VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

2013年09月

iOS 7で追加されたMultipeerConnectivity.frameworkを早速使ってみた

Apple Storeに14時間並んでiPhone 5sを手に入れたら、 同期の @saya_223n が発売日にたった3時間で手に入れていて少し切なくなりました.  株式会社ジェネシックスのiOSエンジニア 坂田(@huin)です.


さて、iPhone 5s(とiPhone 5c)の発売に合わせてついにiOS 7がリリースされました. iOS 7の目玉はなんといってもUIの刷新ですが、UI以外にもフレームワークの変更や追加が数多く行われています.

というわけで、今回はiOS 7で個人的に注目している MultipeerConnectivity.frameworkについてご紹介したいと思います.

MultipeerConnectivity.framework とは

MultipeerConnectivity.framework (長いので以後MC Frameworkと表記します) はiOS 7で新規に追加されたフレームワークの一つです. Bluetooth or/and WiFiを利用して端末同士(3台以上も可能)で直接通信を行うためのフレームワークで、iOS 7で追加されたAirDropのAPI版だと考えると分かりやすいかと思います. 
 

WWDC 2013では、#708 Nearby Networking with Multipeer Connectivityというセッションで紹介されていました. 9/25現在、プログラミングガイドは存在しないのですが、MultipeerGroupChatというサンプルコードが配布されています. サンプルコード以上の例が作れなかったため非常に良いサンプルのため、今回はこのサンプルコードをベースにご紹介したいと思います.

注意 なお、このフレームワークはiPhone 5など、比較的新しい端末のみでサポートされています. AirDropが利用できないiPhone 4ではうまく動作しなかったのでご注意下さい.また、複数端末で利用する機能であるため、iOS 7が動作する端末が2台以上必要になります.

MultipeerGroupChat について

MC FrameworkのサンプルコードMultipeerGroupChatは、名前の通りグループチャット機能を実現するサンプルで、テキストメッセージの送信や写真の送受信ができます.

IMG_0002    IMG_0004


MC Frameworkの概要

MC Frameworkによる通信は、基本的にはMCSessionクラスとMCSessionDelegateプロトコルのメソッドを通じて行うだけです.サンプルでは、MCSessionの他に接続開始までのプロセスでMCAdvertiserAssistantMCBrowserViewControllerクラスを利用していますが、最低限これらのクラスだけで実現できます. 以下これらのクラスについて説明します.

デバイス同士の接続

端末同士で通信を行うためにはまず端末間の接続を確立する必要があります. MC FrameworkではAdvertiserとBrowserという2つの役割がこれを行います. Advertiserが自身を周囲に知らせ、Browserがこれを見つけて接続を確立するという流れです.

Advertiserの動作

Advertiserは周囲に対して自身の告知を行います. MC Frameworkでは MCAdvertiserAssistantクラスのオブジェクトを生成し、startメソッドを呼ぶことでこれを行います. サンプルでは SessionContainerクラスの初期化メソッドinitWithDisplayName:serviceType:の中で行っています.
 

// Session container designated initializer
- (id)initWithDisplayName:(NSString *)displayName serviceType:(NSString *)serviceType
{
    if (self = [super init]) {
        MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:displayName];

        _session = [[MCSession alloc] initWithPeer:peerID securityIdentity:nil encryptionPreference:MCEncryptionRequired];
        _session.delegate = self;

        _advertiserAssistant = [[MCAdvertiserAssistant alloc] initWithServiceType:serviceType discoveryInfo:nil session:_session];
        [_advertiserAssistant start];
    }
    return self;
}

Browserの動作

Advertiserを探索し、接続を開始する役割はBrowserと呼ばれます. MC FrameworkではMCBrowserViewControllerクラスがAdvertiserの探索、接続およびUIの提供までを行ってくれます.

サンプルでは MainViewControllerのメソッドbrowseForPeers:でこれらの処理を行っています. といってもやっているのはMCBrowserViewControllerの初期化と、サービス提供に必要な最小/最大人数の設定、そして表示のみです.

セッションへの端末の参加/離脱イベントは、MCSessionDelegateプロトコルのsession:peer:didChangeState:メソッドで受け取れます. これらはSessionContainerクラスで実装されています.

デバイス間の通信

端末間の接続を確立したら、あとはMCSessionオブジェクトに対してデータを送るだけです.

MC Frameworkでは、データ、リソース、ストリームの3種類のデータ送信がサポートされており、それぞれ

  • -(BOOL)sendData:toPeers:withMode:error
  • -(void)sendResourceAtURL:toPeer:withTimeout:completionHandler:
  • -(NSOutputStream *)startStreamWithName:toPeer:error:

を呼ぶことで各種データの送信が可能です.

また、受信側は、MCSessionDelegateプロトコルの各メソッド、

  • - (void)session:didReceiveData:fromPeer:
  • - (void)session:didReceiveResourceAtURL:fromPeer:
  • - (void)session:didReceiveStream:withName:fromPeer:

そ実装することで、受信できます.

サンプルでは、SessionContainersendMessage:およびsendImage:メソッドでそれぞれテキスト(をNSDataにしたもの)と画像(のURL)を送信しています.


// 文字列の送信
- (Transcript *)sendMessage:(NSString *)message
{
    NSData *messageData = [message dataUsingEncoding:NSUTF8StringEncoding];

    NSError *error;
    [self.session sendData:messageData toPeers:self.session.connectedPeers withMode:MCSessionSendDataReliable error:&error];

    if (error) {
        return nil;
    } else {
        return [[Transcript alloc] initWithPeerID:_session.myPeerID message:message direction:TRANSCRIPT_DIRECTION_SEND];
    }
}

// 画像URLの送信
- (Transcript *)sendImage:(NSURL *)imageUrl
{
    NSProgress *progress;
    for (MCPeerID *peerID in _session.connectedPeers) {    
        progress = [self.session sendResourceAtURL:imageUrl withName:[imageUrl lastPathComponent] toPeer:peerID withCompletionHandler:^(NSError *error) {
            if (error) {
                NSLog(@"Send resource to peer [%@] completed with Error [%@]", peerID.displayName, error);
            } else {
                Transcript *transcript = [[Transcript alloc] initWithPeerID:_session.myPeerID imageUrl:imageUrl direction:TRANSCRIPT_DIRECTION_SEND];
                [self.delegate updateTranscript:transcript];
            }
        }];
    }

    Transcript *transcript = [[Transcript alloc] initWithPeerID:_session.myPeerID imageName:[imageUrl lastPathComponent] progress:progress direction:TRANSCRIPT_DIRECTION_SEND];
    return transcript;
}

まとめ

今回はMultipeerConnectivity.frameworkによる端末間通信について紹介しました. 接続の確立までが少し手間ですが、登場するクラスは少なく簡単に端末間通信を行うことが可能です.

端末間で直接通信を行うアプリはこれまでもありましたが、サーバーを介したものなど大掛かりなものが多かったように思います. MC Frameworkの登場で、身近にいる人同士で直接楽しめるアプリが増えるのではないかと思います. ジェネシックスでもこれらの新しいフレームワークを積極的に利用していくつもりです.
 

なお、VOYAGE GROUPでは現在、新規サービス立ち上げに向けてiOSエンジニアを募集しております. ご興味のある方は下記URLからお問い合わせ下さい.

採用情報 :  http://voyagegroup.com/crew/recruit/career/ios/

応募までは行かないけど…という方は@huinにご連絡頂けると社内バーのAJITOで飲みながらのお話などご招待させて頂きます. ご連絡お待ちしております!

子供向けブロックプログラミング学習ツールを作ってみました。

こんにちは。 VOYAGE GROUP でエンジニアをしています tatenosystem です。
最近は本ブログで「ネタ担当ポジション」を期待され、地味なプレッシャーをシステムの偉い人から受けながらホソボソと生きています。

先日知人から「うちの子供にプログラミングを教えて欲しい」という変わった依頼がやってきました。
小学4年生のゲーム好きな子で、「将来ゲームを作ってみたいからプログラムをやってみたい!」という理由とのこと。
いちおう私もプログラマなので、面白そうなので引き受けました。

そんなわけで プログラム初心者小学生でも勉強できるツール を調べてみました。

MITメディアラボのスクラッチgoogle-blockly前田ブロック など、子供向けプログラミングツールはいろいろありました。
そこで、「前田ブロック」を使って実際に教えて見ました。が、

 簡単なゲームを作ってもらおうと思ったのですが、プログラム初心者の小学4年生にはゲーム制作は敷居が高い。
むしろ 私が 「前田ブロック」にハマりました。

「もっとゲーム感覚でプログラミングが学べるもの無いかなぁ。。。」

「わかりやすいといえば、ぴゅう太の日本語BASICか? しかし今更どこで、ぴゅう太を売っているんだ?」

みたいなことを本気でいろいろ考えてましたが、

そういえばアメリカでは(日本でも) 教育系のスタートアップ がひとつのトレンドとして注目されることを思い出しました。
EdTech(エドテック) とも呼ばれて、なかなかのトレンドぶり。
日本でも、政府の成長戦略素案に「プログラミング教育」が盛り込まれたりと、今後の注目トレンド間違いなし!

ビジネスチャンス キタコレ!!!


そんな訳で作ってみました。

ゲーム感覚で学べる「子供向けブロックプログラミング学習ツール」、


sample_game01

ツール名は、「前田ブロック」の パク  リスペクト です。ネーミングセンスに感嘆しました。
JavaScriptフレームワークの enchant.jsで作成しました。
キーボード入力は一切使わない学習ツールを目指しました。iPad(タブレット)でも動作します。

ブロックを配置しクマを動かすプログラムを作ります。 
クマが全ての「りんご」を取ったらゲームクリアとなります。 

ブロックは「ドラッグ&ドロップ」で左のプログラムエリアに配置できます。

 use_001

配置したブロックは、クリックで「チェックを行う向き」や「クマの移動方向」を変えることができます。

use_002

ループブロック が実行されると、再び左上からプログラムが実行されます。

use_003

プログラム実行ボタンを押すと、赤い四角(「実行」)が左上から下に落ちてきて、赤い四角のブロックが実行されることになります。

vg_use_004

code_area_01

IFブロックや「実行」を左の列に移動させとこが出来ます。
制御ブロックを置くと、「実行」を右や左の列に移動させとこが出来ます。

(例)クマの上に障害物があったら、クマを左に動かす

code_area_03

■ この学習ツールで教えたいこと
  • プログラムって凄そうだけど、所詮は1つずつ順番に処理しているだけなんだよ-。ね、簡単でしょ?(*1)
  • IF処理。なにかをチェックして、そのチェック結果で処理を変えることが出来るんだよ(*2)
  • ループ処理。同じ処理を何度もグルグルまわして処理ができるんだよ(*3)
(*1) マルチスレッド的な処理は除く
(*2) たてのブロックでは、障害物の有無、リンゴ・毒りんごの有無、フラグの有無をチェックできます
(*3) たてのブロックでは、プログラムエリア全体が大きなループ処理の中に入っているイメージです

では、見て行きましょう。

クマをループ処理で上に歩き続けさせたい場合は、次のようにブロックを配置します。

 vg_code001

プログラムのイメージだとこんな感じです。
while(true) {
    kuma.y--;
}

上に歩き続け、前方に障害物があった時に、右に歩くコードは、次のようにブロックを配置します。

vg_code002

プログラムのイメージだとこんな感じです。
while(true) {
    kuma.y--;
    if (MAP[kuma.x][kuma.y - 1] == WALL) kuma.x++;
}

上に歩き続け、右にリンゴがあった時に、右に歩くコードは、次のようにブロックを配置します。

vg_code003

プログラムのイメージだとこんな感じです。
while(true) {
    kuma.y--;
    if (MAP[kuma.x + 1][kuma.y] == APPLE) kuma.x++;
}

デモゲーム の下の2つのリンゴをとるプログラムは、
 
sample_code101

となります。
プログラムのイメージだとこんな感じです。
while(true) {
    kuma.y--;
    if (MAP[kuma.x + 1][kuma.y] == APPLE) kuma.x = kuma.x + 2;
    if (MAP[kuma.x][kuma.y - 1] == WALL) kuma.x++;
}

すこしプログラムらしいフラグを使ったブロックプログラムも作れます。

vg_code100

プログラムのイメージだとこんな感じです。

while(true) {
    if ( FLAG[1] ) {
        kuma.x++;
        if (MAP[kuma.x + 1][kuma.y] == WALL) kuma.y--;
        continue;
    }
    kuma.y--;
    if (MAP[kuma.x + 1][kuma.y] == APPLE) {
        kuma.x++;
        continue;
    }
    if (MAP[kuma.x][kuma.y - 1] == WALL) FLAG[1] = true;
}

これはまったく同じ処理をするプログラムですが、こっちのプロック配置のほうがわかりやいかも知れませんね。
(FLAG[1] == true 時の処理を上に持ってきました)

vg_code101


具体的な遊び方(プログラミングのやり方)は、下記ページを参考にしてください。


ブロックの種類の説明は、下記ページになります。


さらに自由にゲームを作成できるエディタも用意しました。
ゲーム作成後、作成したゲームを遊べるURLが出力されます。


そんな訳で、来月この「たてのブロック」を持って、知人の子供にリベンジしに行ってきます ( ー`дー´)ゞ
 
カリキュラム的なゲームを充実させて、これを使って近い将来「子供向けのプログラミングセミナー」とか開催出来たら面白いですね。
 
「たてのブロック」の今後にご期待ください!


オレはようやく登りはじめたばかりだからな
このはてしなく遠いプログラミング学習ツール開発道をよ…

vgblog_last01


未完


圧倒的な成長を目指す「Treasure2013」(後編)

こんにちは。システム本部 三浦@hironomiuです。

本エントリーは
圧倒的な成長を目指す「Treasure2013」(前編改めプロローグ)
圧倒的な成長を目指す「Treasure2013」(前編)の続編エントリーです。

Treasure最終日打上げ
treasure6

今回はTreasure2013の後半戦についてお伝えしていきたいと思います。
又、本エントリーを見て圧倒的な成長をしたいと思って頂けた学生さんは
11/9(土)、10(日)、16(土)、17(日)の4日間で開催される
大規模サービス構築プログラムSunriseがありますのでエントリーお待ちしてます!!

後半戦は8/21-8/30の8日間で行われました。
今回はその8日間を振り返っていきたいと思います。

後半戦は4人1チームの5チームに分かれて前半戦で学んだ技術を用いて
実際にサービスを作成していきます。
作成したサービスは最終日に発表し順位をつけます。

サービスの概要を決定する際には前半戦で学んだリーンキャンバスをチームメンバー全員で埋めながら
本当に顧客に価値のあるものを目指しているか常に意識し限られた時間で
とことん議論しプロダクトの作成までこぎつけていました。

各チームの作ったサービスの概要をお伝えしたいと思います。

チーム わくわく(しんちゃん、みかみん、もと、もぐら
(サポータ @tamakiii、@chocopie116、@jubilostar)

gw1
「出会いをワクワクに」というコンセプトで、
ユーザーと、その友達のSNSへの投稿から形態素解析(mecabを利用)を用いて
興味のあるカテゴリを抽出し関連する興味のあるイベントをおすすめしてくれるサービスを作りました。

チーム 漆黒の闇に染まるフラペチーノ(いなっぺ、さっちゃん、ぶーさん、もりさん)
(サポータ をいでさん、しま、みやしゅー(さん))

gw2
「夢に向かう道を 学生に示す」というコンセプトで
過去の先輩たちがどのようなイベントを経て人生を歩んできたかを視覚化する
「アユメル」というサービスを作りました。

チーム My N.Y.(せんちゃん、ももえちゃん、だっち、なんちょく
(サポータ しんばし、りっきー、はっち(さん))

gw3
「写真で紡ぐストーリー」というコンセプトで
ユーザが、投稿された写真にコメントを付け
その写真を4つなげて1つの(4コマ漫画のような)ストーリーを作る
「Photo Links」というサービスを作りました。

チーム DTYZ(ダルツ、たまちゃん、ユキミネ、ざわ)
(サポータ 大山さん、ゆう、長ちゃん)
gw4 

「曲とそれに纏わるストーリーや思い出を共有し、
新しい曲と出会える」というコンセプトで「オモイデユニオン」というサービスを作りました。
 
チーム 七対子(かみかみ、るい、さっぽろ、2世)
(サポータ @hironomiu、@suzu_v、ごっさん)
gw5
「世界のRT数の多い画像tweetを見たい」というコンセプトで
WebGLで地球儀を作り地球儀上の国を選ぶと
その国のRTの多い画像tweetを表示するサービスを作りました。

最終日(プレゼン)
最終日は作ったサービスのプレゼンです。Treasureでは各サービスに順位を付けて発表します。
そのため各チームのプレゼンにも力が入ります。

総合プロデューサからプレゼンの注意
treasure7

プレゼン風景
treasure8

treasure9

treasure10

treasure11

treasure12


どのサービスもとても素晴らしくただ作るのではなく価値のあるサービスを作り出したと思います。
そして最終日のプレゼンを含めどこが優勝してもおかしくない出来上がりでした。

まとめ

初日から最終日までを改めて振り返るとTreasure生、サポータ含め全てのメンバーが熱く
圧倒的な成長に向けて全力で頑張れたからこそ素晴らしい結果で締め括れたと思っています。
Treasureのコンセプト『「想像」が「創造」になる。』の通り、自分たちの「想像」する価値のあるサービスを実際に「創造」することができた3週間だったのではないでしょうか。
ここで得た仲間や経験を通じて、これからも「未知」なるサービスを「創造」し続け、価値のある素晴らしいモノ創りに挑戦し続けて欲しいです。

圧倒的な成長を目指す「Treasure2013」(前編)

こんにちは。システム本部 三浦@hironomiuです。

本エントリーは圧倒的な成長を目指す「Treasure2013」(前編改めプロローグ)の続編エントリーです。

Treasure初日、個人開発環境構築
treasure3










今回はTreasure2013の前半戦についてお伝えしていきたいと思います。
又、本エントリーを見て圧倒的な成長をしたいと思って頂けた学生さんは
11月に大規模サービス構築プログラムSunriseがありますのでエントリーお待ちしてます!!

前回のエントリーで触れましたが前半戦は8/12-8/20の7日間で行われました。
今回はその7日間を振り返っていきたいと思います。

前半戦カリキュラム
前半戦7日間のカリキュラムは以下の技術的なキーワード、エッセンスを軸に組み立てました。

- 個人開発環境(Vagrant,VirtualBox,puppet,serverspec)
- バージョン管理 git(github)
- Webアプリケーションフレームワーク(PHP:slim2)
- TDD、ペアプロ
- Webセキュリティ(脆弱性実例)
- OSSソースコードリーディング
- データベース(MySQL)
- チーム開発、リーンスタートアップ、UX

そして組み立てていく上でTreasure2013ではただ技術を詰め込むのではなく
イマドキのモダンなWeb開発を特に意識しました。

講義 Webアプリケーション
講師 前田さん@brtriver
Treasure2013の肝です。座学からワークショップまで幅広く行いました。
講義の内容はslim2を用いたMVCフレームワークの理解、testrunner&phpunitを用いたテスト開発技法、
そしてTDDをテーマに用いたペアプロ、Webセキュリティと書ききれない程に密度濃く幅広く行われました。
講義の理解度を測るためにコーディング時だけではなく座学時も章ごとに学んだ事をテキストに記載し
Treasure2013用のgithubリポジトリににpull requestを投げ講師の指摘が入る念の入り用です。
Treasure生一人一人の理解度を測りながら個別に的確な助言、指摘をしていました。

課題制作時のルール
treasure_web1









Pull Requestからのコメントのやりとり
Treasure_pr















講義 データベース

講師 三浦@hironomiu
本来はjenkinsを用いたCIについての講義を予定していましたがWebアプリケーションの講義の状況から
データベースの理解度が少し浅いのでは?
とCTO小賀さん@makoga、講師陣の間で意見があがり急遽データベースに変更しました。
講義は4人1チームのワークショップ形式で各問題に対してチームで答えを出していく形で進みました。

講義を変更するような臨機応変さも圧倒的な成長に対してTreasure2013が
フルコミットしている一端ではないかと自負しています。

講義抜粋
treasure_db1









講義 リーンスタートアップ/UX
講師 藤井さん@mikihirocks
こちらもチーム単位でのワークショップ形式で行いました。
リーンスタートアップ/UXを題材に資料の題名にある通り、価値を量産するものづくりプロセスについて
実際のサービスの事例、面白い切り口での例えなどを交えながら深く学んでいきました。
Treasure生も価値を量産すると言うことに対して様々な議論、思考を行っていました。

講義表題
treasure_lean1








講義抜粋
treasure_lean2








番外編

休憩時にはVGメンバーからの心のこもった差入れもあり楽しく休憩できました。

VGメンバーからの差入れ
treasure5treasure4










講義後にはVGのラーメン好きメンバーと盛り上がり
某ラーメン屋さんの注文の仕方の課外講義(?)もありました。

注文の仕方を熱心に聞くTreasure生(講師? 楓さん@kaepon1219Treasure_jiro












あれ?講義の時よりも真剣そうな顔をしていますね。笑

前半戦いかがだったでしょうか?
ここから後半戦はこれまで学んだことをベースに4人1チームでのサービス開発になります。
次回は後半戦の模様をお届けします。どんなサービスが出来るかお楽しみに!!

圧倒的な成長を目指す「Treasure2013」(前編改めプロローグ)

こんにちは。システム本部 三浦@hironomiuです。

今年も8/12から8/30までVOYAGE GROUPの夏の風物詩エンジニアインターンTreasure2013が行われました。

結果はTreasure2013に関わった全てのメンバーが最高に楽しく、圧倒的に成長が出来たインターンでした!!

Treasure2013前半戦終了
treasure2














本エントリーは前半戦について振り返りながらTreasure2013の楽しさ、Treasure2013の
テーマである圧倒的成長への醍醐味を皆さんに少しでもお伝えできれば幸いです。
又、本エントリーを見て圧倒的な成長をしたいと思って頂けた学生さんは
11月に大規模サービス構築プログラムSunriseがありますのでエントリーお待ちしてます!!

スケジュール
月日(曜日) 講義
8/12(月) 環境構築
8/13(火) Webアプリケーション
8/14(水) Webアプリケーション
8/15(木)前半 Webアプリケーション
     後半 データベース
8/16(金) 中間課題
8/17(土) 予備日
8/18(日) 予備日
8/19(月) 中間課題発表
8/20(火) リーンスタートアップ/UXデザイン
8/21(水) グループワーク
8/22(木) グループワーク
8/23(金) グループワーク
8/24(土) 予備日
8/25(日) 予備日
8/26(月) グループワーク
8/27(火) グループワーク
8/28(水) グループワーク
8/29(木) グループワーク
8/30(金) 最終日 グループワーク発表

今年は8/12-8/20をVG現場エンジニア3人を講師(更にVG内定者が講師フォロー)とした講義形式の前半戦、
8/21-8/30を前半戦で得た知識をフル動員して4人1チーム計5チームで実際にサービスを作る
グループワーク形式(各チーム毎にVG現場エンジニア2人、人事1人がサポータとして終日フォロー)の
後半戦と言う形で進めました。

又、後半戦で各チームが制作したサービスは最終日に発表を行い
VG社員が評価をし優勝から最下位まで順位を発表します。

前半戦カリキュラム
前半戦7日間のカリキュラムは以下の技術的なキーワード、エッセンスを軸に組み立てました。

- 個人開発環境(Vagrant,VirtualBox,puppet,serverspec)
- バージョン管理 git(github)
- Webアプリケーションフレームワーク(PHP:slim2)
- TDD、ペアプロ、Webセキュリティ(脆弱性実例)
- OSSソースコードリーディング
- データベース(MySQL)
- チーム開発、リーンスタートアップ、UX

フロントサイドアプリや軽く触れたデプロイ運用やCI(jenkins)も含めると更に多くなりますが、
改めて振り返ってみると、とても濃い7日間のカリキュラムですね!!


その前に?
。。。とその前に!
実はTreasure2013は初日の8/12の前から始まっていました。

Treasure2013の参加が決まった学生さん(以後、Treasure生)には参加の連絡と共に
事前課題と言うMissionが伝えられました。

最初のMissionはgithubアカウントを取得しVGで今回のTreasure2013用に用意した
プライベートなリポジトリにteamアサインされることです。
アサインされリポジトリにアクセスが出来るとREADMEに次へのMissionのが登場します。

Mission(スクロールバーの長さに注目!)
treasure1








では具体的にどのようなMissionだったのでしょうか。

- 準備
カリキュラムに個人開発環境がありますが
Treasure生にはPCを持ち込んでもらい自身のPCに開発環境を作り開発をしてもらいます。
そのため予め必要なツール、パッケージの準備を行ってもらいました。
Vagrant、VirtualBox、sshターミナル、etc

- 前提技術
Treasure2013は講義を行う上で前提となる技術が多岐にわたります。

ベースアプリ(GroupWorkBase)に用いた技術
groupworkbase1







前提技術が著しく欠ける場合Treasure2013のゴールである圧倒的な成長が達成できない可能性があります。
そのためTreasure生に必要となる前提技術の一覧を示しTreasure2013の初日8/12までの間に
VG講師陣と一緒に不足している前提技術の習得をしながら習熟度を測っていく方法を模索していました。

CodePirates
タイミング良く別プロジェクトとして進行していたプロジェクトが今回の要件にマッチしていました。
そこでそのプロジェクト(プロジェクト名:CodePirates)を習熟度を測るサービスとしてリリースするよう協力してもらいました。
作成者はTreasure2012卒業生でVG内定者の さるへい@A01saru、しなもそ@sinamon129、にっしー@blackstar240の
三名で去年のTreasure2012のベースアプリを用いて作成しました。

このサービスのおかげで8/12の開始までTreasure生と講師陣で一緒に圧倒的な成長に向けた事前準備を行えました。

ちなみにCodePiratesに載せた問題も手作りでCTO小賀さん@makogaも参加しています。
(むしろ率先して問題を作っていました。(笑))

CodePirates TOP
CodePirates1







問題リスト
CodePirates2










問題
CodePirates3










Treasure講師陣とのやりとり
CodePirates4











余談
今年のTreasure生は20人で事前課題の時点では顔合わせもしていない状態のため静かにスタートしましたが、
講師の前田さん@brtriverが事前準備からフルコミットで参加しTreasure生の回答、コメントに対して
全て返信する姿にTreasure生も徐々に触発され日々Treasure生からの回答、コメントの数が
増えていき熱を持ったやりとりになっていきました。

このCodePiratesでのやりとりから今年のTreasure2013も熱くそして圧倒的な成長が期待できると
手ごたえがあったのをおぼえています。

振り返り
振り返るとTreasure2013前半戦初日の8/12を迎えるまででこんなにトピックが多かったことを改めて驚いています。

事前準備、初日までのTreasure生とのコミュニケーションにおいても沢山のメンバーがTreasure2013の成功に向けてフルコミットして
一致団結し知恵を絞りながら創意工夫した結果がTreasure2013の大成功につながったのではと思っています。

さて、ここから前半戦の講義の様子などをお伝えしようと思いましたが
本エントリーはここまでにして前半戦、後半戦を改めてエントリーしたいと思います。

それでは次回こそ前編(前半戦編)をお楽しみに!!


記事検索
QRコード
QRコード