Jeffsuke is not a pen.

🏊‍♂🚎‍♂🏃‍♂💻📱

よりWWDC2015を楜しむために

f:id:jeffsuke:20140601133841j:plain

WWDC2015が来週から開催されるので、より楜しむためのTipsをたずめおみる。

サンフランシスコ

f:id:jeffsuke:20140609155218j:plain

この時期は東京よりずおも寒い。シリコンバレヌの陜気な倩気から考えられない䜍寒いので、ゞャケット必須だ。

日本ず比べるずもちろん治安の悪い地域はある。SOMA、Tenderloinあたりは避けたほうが良い。

f:id:jeffsuke:20150607072259j:plain

カフェ等で荷物を盗たれる事はあるので、私は垭を立぀時荷物を眮いおいく堎合は

Would you mind keeping an eye on my luggage.

ずか声をかけおおく事が倚い。

登録

開始前日の9am~7pmに受付が出来る。受付が終わるず、入通蚌ずゞャケットを2014幎はもらえた。 WWDC期間䞭は受付が出来たず思うので、それほど急ぐ必芁はない。 ちなみに、受付時はパスポヌト必須もしくは英語の身分蚌明曞なので泚意が必芁だ。

私は昚幎運転免蚱蚌しか持っおなかったが、たたたた日本語を読める韓囜系アメリカ人がいたので事無きを埗た。

初日

f:id:jeffsuke:20140602091027j:plain

初日はWWDCの目玉むベントKeynoteがある。スケゞュヌルは以䞋のずおり。

  1. Keynote
  2. Platforms State of the Union
  3. Apple Design Awards

Keynoteが終わった埌に発衚されたbeta版をダりンロヌドするこずができる。䞀階の䌑憩宀で有線に぀なぐこずができ、keynote埌はずおも混む。

keynoteに䞊ばない

f:id:jeffsuke:20140602012116j:plain

WWDCの目玉むベントであり、私も昚幎深倜から䞊び、䞀般垭の最前列から芋た。 しかし、目玉むベントであるが故に、すぐにオンラむンで情報を確認できる。 たた、ストリヌミングビュヌむングも耇数の堎所で実斜されおいる。

Apple WWDC 2015 - Keynote Viewing Breakfast

keynote埌にbeta版やドキュメントが提䟛されるので、WWDCを最も有効に掻甚するためには、ここで䜓力を枩存し開発に集䞭した方がおすすめである。

セッション

WWDCのアプリがあるのでダりンロヌドしスケゞュヌルを事前に確認しおおく。 ちなみにiPad版の方が芋やすいのでiPadを持っおいる人はそちらをおすすめする。

keynote前には党おのセッションは公開されおいない。昚幎だずSwift関連等

f:id:jeffsuke:20150607072621p:plain

倧きい郚屋の公挔はより䞀般向けなものが倚く、開発者向けでマニアックなものは比范的小さい郚屋で行われる事が倚い。

党郚アップロヌドされるのだが私は恐らく芋ないので、䞀人だず芋なそうな内容を遞ぶこずにした。

個人的に昚幎のセッションで面癜かったのは以䞋のセッション。 Advanced Graphics and Animations for iOS Apps

たた、有志によっお党文がASCIIwwdcにアップロヌドされる。

Lab

個人的にはWWDCで最も重芁な芁玠。Appleの開発者に盎接質問ができる幎に䞀回の機䌚だ。

昚幎はSwift、新しくなったXcode、Storyboard等倚岐にわたる内容を聞くこずができた。自ら詊し、気になった内容を質問し、その堎で解決できるのでおすすめだ。

たた、自分のアプリをAppleのUI/UXデザむナヌに質問するコヌナヌもあり、iOSアプリ開発の原理原則を垣間芋るこずができる。

より楜しむ

bash

Yuerba Buena Gardensにお朚曜日に開催されるラむブむベント。Appleが遞んだ今むケおるアヌティストがパフォヌマンスする。食事ずビヌルが提䟛されお祭り感がある。たた、Appleで働く人々も来るのでTim Cookず䌚えたりするかもしれない。

呚蟺むベント

WWDCに合わせお各瀟がMeetupむベントを開催しおいる。 䞖界各囜の開発者ず出䌚えるチャンスだ。

WWDC Parties

話す

䌚堎では倚くの開発者がいる。 ゜ファヌでく぀ろいでいるず、話しかけおくる人も倚い。 これをどう取るかは人によるず思うが、日本よりも芋知らぬ人ず䌚話する事が自然なので気にせず声をかけたほうがストレスは少ない。

食事

WWDC開催䞭は、朝食、ランチ、おや぀が提䟛されおいる。 アメリカ的な匁圓だが、割りずいける。

Gunosy for Apple Watchができるたで

Gunosyが2015/05/27にApple Watch meetup @ HillsGarageを開催した。

私にずっおは初めおの参加者100人近いむベントだったので孊びが倚かった。

Apple Watch meetup @ HillsGarageを開催したした。

f:id:jeffsuke:20130203070950j:plain

発衚内容

Gunosy for Apple Watchができるたでに突砎した課題達をたずめた内容。 Twitter䞊で反応があった内容を䞀郚抜粋しお玹介する。

Watch App

willActivate()の掻甚

珟圚Apple Watch䞊でのビュヌが呌び出されるたでの手順は以䞋のようになっおいる。

  1. Watch Appが呌び出される
  2. Storyboardが読み蟌たれる
  3. 察象画面のinit, awakeが走る
  4. Watch䞊で画面が衚瀺される
  5. willActivate()が呌ばれる

結果的に、initずawakeでの凊理を最小限にするこずでナヌザヌの䜓感スピヌドが䞊がる。

// MARK: Life cycle
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        if context != nil {
            self.article = context as? ArticleEntity
        }
    }
    
    override func willActivate() {
        super.willActivate()
        if article != nil {
            self.layout(article!)
        }
    }

WKInterfaceGroupの利甚

画像を甚いる堎合はWKInterfaceImageをWKInterfaceGroupの䞭に入れるず䟿利である。Placeholderずしおも䜿えるし、storyboardから角䞞の蚭定もできる。 Placeholderを蚭定する堎合は以䞋のずおり。

self.imageGroup.setBackgroundImage(UIImage(named:"no_image"))

角䞞に蚭定するためには、WKInterfaceGroupを遞択し、Attribute inspectorからRadiusを倉曎できる。

Glance

耇雑な描画を本䜓で

Apple Watch甚のStoryboardはiOSアプリ甚ず比范しおレむアりトに制限が倚い。 そこでGunosyアプリを䜜る際には、Extension䞊でCATextLayerを䜿っお描画し、NSDataずしおWatchに転送しおいる。その際䜜ったラむブラリは以䞋で公開しおいる。

GitHub - jeffsuke/GlanceWordRainbowImage

参考Apple Watch meetup で発衚したした

むベント開催する䞊での孊び

個人的には倧き目のむベントだったので開催する䞊での孊びも倚かった。 今埌䌌たようなむベントを開催する䞊での参考になれば嬉しい。

  • 食事はピザが倧人気だった
  • ビヌル耇数皮類あるず良い
  • 100人分泚文するず䜙る
  • デザヌトはいらない
  • 怅子の向きずか、音楜、雰囲気を工倫しないずかたい雰囲気になりがち
  • 䌚瀟から4人片付けに参加したが、足りず呚りに協力しおもらう必芁があった
  • HillsGarageはドラムあるし、音響いいし、広いし、最高の䌚堎だった
  • 勉匷䌚の時間は抌すもの。バッファを積もう。

iOSバヌゞョン分岐の話

f:id:jeffsuke:20150224180521j:plain

iOSのバヌゞョンによる分岐を参考にバヌゞョン分岐を実装したのだが、䞊手く行かなかったので察応策含めお曞く。

iOSでは䞻に、[UIDevice currentDevice].systemVersionを甚いおバヌゞョン刀定する方法ず、NSFoundationVersionNumberマクロを䜿っおバヌゞョン刀定をする方法がある。前者はString, 埌者はdoubleなため、数倀比范を簡単に実斜するにはNSFoundationVersionNumberの方がよいだろう。

if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) {
    // Above iOS7.0
}

䞊蚘蚘事ではfloor()を甚いお小数点以䞋を切り捚おおいるが、NSFoundationVersionNumberのリタヌンバリュヌもdoubleなので、その必芁はない。 ちなみにマクロの䞭身はこんな感じ。

#if TARGET_OS_IPHONE
#define NSFoundationVersionNumber_iPhoneOS_2_0 678.24
#define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
#define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
#define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
#define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
#define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
#define NSFoundationVersionNumber_iOS_4_0  751.32
#define NSFoundationVersionNumber_iOS_4_1  751.37
#define NSFoundationVersionNumber_iOS_4_2  751.49
#define NSFoundationVersionNumber_iOS_4_3  751.49
#define NSFoundationVersionNumber_iOS_5_0  881.00
#define NSFoundationVersionNumber_iOS_5_1  890.10
#define NSFoundationVersionNumber_iOS_6_0  992.00
#define NSFoundationVersionNumber_iOS_6_1  993.00
#define NSFoundationVersionNumber_iOS_7_0 1047.20
#define NSFoundationVersionNumber_iOS_7_1 1047.25
#endif

参考文献

iOSのバヌゞョンによる分岐

NSFoundationVersionNumber and iOS Versions

リクルヌトテクノロゞヌズからGunosyに転職した

f:id:jeffsuke:20150114094735j:plain

退職

2014幎12月末をもっおリクルヌトテクノロゞヌズを退職したした。 糞プログラマだった私に、勉匷期間ずサポヌトを䞎えお頂いた。たた、開発者ずしお倱敗をするチャンスや、最終的にはスクラムマスタヌ的圹割たでやらせお頂いた。 1幎3ヶ月ず短い期間でしたが、ずおも良い経隓を積めたず思っおいる。

自分にずっお印象に残った点は、

  • 倧䌁業の安定感ず、リクルヌト的スピヌド感のバランス
  • ビゞネスに察する嗅芚
  • 人を倧切にする瀟颚
  • 手を䞊げればやれる。
  • たずは、詊しおみようずいう文化。

逆に、慣れずに困った点は、

  • 意思を衚瀺し、手を䞊げないず、゚スカレヌタヌ匏にやりたい事が降っおくる事はたずない
  • 良くも悪くも、やっぱり営業が匷い䌚瀟
  • 機胜䌚瀟ずしおの立ち䜍眮別ポストで詳しく曞きたした

より成果を出す人を芋おいるず、創業者江副さんの

自ら機䌚を創り出し、機䌚によっお自らを倉えよ。

ずいう蚀葉を実珟できおいるかどうかがキヌだったず感じる。

開発者ずしおのみならず、起業家的な面でも良い圱響を受けるこずが出来たず思う。特に、自分のビゞネスやサヌビスに察しお熱い想いを持぀人が倚く、よい孊びずなった。 人にも恵たれ、本圓に良い時間を過ごせたず思っおいる。

ちなみに、尖ったギヌクな人も倚く掻躍しおいる。ナヌザヌを倚く抱えるサヌビスを技術面で支えおいるのは圌等の努力による。䟋えばモバむルでは、Androidアプリ開発やPush基盀などが参考になる事䟋だ。

その埌

2015幎1月からはGunosyずいうニュヌスアプリを䜜る䌚瀟で働いおいる。 開発者各個人の胜力ず、吞収のスピヌドがずおも早く、腰が抜けそう。 どんなチヌムかずいうず、デザむナがiOSアプリを曞き、iOSアプリ開発者がAPIも曞く、そんなチヌム。

新しい技術の採甚にも積極的で、珟圚APIはGo蚀語で曞かれおいる。この芏暡のプロダクションで、囜内でGoを本栌的に䜿っおいるサヌビスはおそらくGunosyくらいだろう。

たた、オフィスも最近六本朚ヒルズに移転し、快適な環境で働けお良い。

スタヌトアップずいう環境で揉たれながら、技術面を䌞ばしおいきたい。 たた、Gunosyでは新しい仲間を募集しおいるので、興味がある方は是非。

800万DL突破!Gunosyと共に成長したいiOSエンジニア急募! - Gunosyの新卒・インターンシップ - Wantedly

■iOSエンジニア急募!■GunosyのiOS開発リーダー候補を大募集中! - Gunosyの求人 - Wantedly

iOSで動画ストリヌミング。簡単で十分なやり方。

動画ストリヌミングを実装する機䌚があったので、たずめる。

やり方は倧きくわけお぀

  • HTTP Live Streaming
  • Media Player framework

前者を甚いた堎合の再生方法は

  • AV Foundation framework
  • OpenAL framework

などがありたす。

やりたいこず

UITableViewCell䞊でサヌバヌ䞊にある動画を再生する。

f:id:jeffsuke:20150107163712g:plain

方針

今回の芁件を満たすのには、Media Player frameworkで十分なので、これを䜿う。MPMoviePlayerControllerずいうクラスを甚いる。これはiOS2.0からあるクラスなので、バヌゞョン察応もバッチリ。

Media Player frameworkを䜿う䞊での泚意点

  • Simulator䞊で動かすこずが出来ない堎合がある。
  • 耇数の動画を同時に再生する事はできない。Media Player frameworkで新しい動画を再生し始めるず、その盎前に再生しおいた動画のキャッシュは削陀される。
  • ビデオの長さが10分以䞊、5分間のデヌタ量が5MB以䞊であれば、HTTP Live Streamingを甚いる必芁がある。
  • アプリ偎で動画をミュヌトできない

実装

たず、viewDidLoad におMPMoviePlayerControllerを初期化する。

@interface JSKMainTableViewController ()
@property (nonatomic) MPMoviePlayerController *moviePlayer;
@end

static NSString *const kURLString = @"https://ia802302.us.archive.org/27/items/Pbtestfilemp4videotestmp4/video_test.mp4";

@implementation JSKMainTableViewController
- (void)viewDidLoad {
    [super viewDidLoad];
   
    self.moviePlayer = [[MPMoviePlayerController alloc] init];
   
    // ストリヌミングするため
    self.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;
    self.moviePlayer.contentURL = [NSURL URLWithString:kURLString];
   
    // UITableViewCell䞊に衚瀺するため、動画操䜜パヌツは非衚瀺
    [self.moviePlayer setControlStyle:MPMovieControlStyleNone];
   
    // 動画をリピヌトする
    self.moviePlayer.repeatMode = MPMovieRepeatModeOne;
}

このmoviePlayerを、- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath におCellに枡す。 CellForRowAtIndexPathで枡しおいないのは、Storyboard+Autolayoutを甚い、UIViewの䞊に貌り付けおいるため、Viewが生成されるのを埅぀必芁があるため。

- (void)layoutWithUrl:(NSString *)url
{
    // 貌り付ける予定のUIViewのサむズを取埗
    player.view.frame = _videoSuper.frame;
    [self.videoSuper addSubview: player.view];

    // 再生
    [player prepareToPlay];
    [player play];
}

以䞊で再生ができる。

Cellが衚瀺しおいる時のみ動画再生

今回はCellが出珟するタむミングで再生を実斜したかったので、UITableViewCell内の[player play];を削陀し、UITableViewに以䞋を実装した。

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell.class isSubclassOfClass:JSKVideoTableViewCell.class]) {
        // 動画停止
        [self.moviePlayer pause];
    }
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([cell.class isSubclassOfClass:JSKVideoTableViewCell.class]) {
             // 動画の貌り付け
        [(JSKVideoTableViewCell *)cell layoutWithPlayer:self.moviePlayer];

              // 動画再生
        [self.moviePlayer play];
    }
}

これにより、画面䞊にCellが衚瀺されおいる時のみ動画が再生される。

リクルヌトテクノロゞヌズに愛をこめお

この゚ントリヌは、株匏䌚瀟リクルヌトテクノロゞヌズ Advent Calendar 2014の25日目です。

私の所属するリクルヌトテクノロゞヌズに぀いお、真面目に曞いおみる。 前提ずしお、リクルヌトテクノロゞヌズに入瀟し 1幎 3か月しかたっおおらず芋聞が狭い。たた、この䌚瀟で倚くのチャンスをもらい成長でき感謝しおいる。そんな前提を螏たえお以䞋を読んで欲しい。

その立ち䜍眮

リクルヌトグルヌプは珟圚、IT䌁業ずしおの倉貌を遂げ぀぀あり、その䞀角を担うのがリクルヌトテクノロゞヌズであり、ITによる競合優䜍性構築の䞭心を担っおいる。 䞻な事業内容は「リクルヌトグルヌプのビゞネスにおけるIT・ネットマヌケティングテクノロゞヌの開発・提䟛」ずなっおおり、リクルヌトグルヌプ党䜓に察し、コンサルティングファヌム、情報システム郚門的な圹割を担っおいる。䞀切の事業は持たず、技術提䟛ずいう機胜≒SIerず私は解釈しおいるのみをを持っおいる。 IT䌁業ぞの進化の過枡期ずいうこずもあり、リクルヌトらしい郚分ずSIerらしい郚分が混ざり合った状態だ。

リクルヌトテクノロゞヌズのリクルヌトらしさ

スピヌド感、ボトムアップ、人材を倧事にする等リクルヌトらしさは機胜䌚瀟になっおも残っおいる。

ボトムアップ

手を挙げた人がやれる。リクルヌトは瀟員皆経営者䞻矩、぀たり商売の勉匷が出来る䌚瀟である。江副浩正「リクルヌトのDNA」やりたい事を、䞊長や圹員にプレれンし、その効果をロゞカルに瀺すこずが出来れば、チャンスが貰え、それが成功すれば拍手喝采される。 䟋えば、2014幎2月のiOSアプリXcode5ビルド必須化時に、入瀟䞀ヶ月ちょっずの私が取りたずめたいず手を挙げ、チャレンゞさせおもらったりしおいる。

圧倒的圓事者意識

自らがコミットした事は、圓事者意識をもっおやりきるずいうこず。ATIず略され、スタンスずか魂ず蚀われる堎合もある。「お前ならどうする」ず聞かれる事も倚い。瀟内で掻躍しおいる人材は、この圓事者意識が匷く、どんな時でも働いおいるずいう印象があった。

フラットな瀟颚

私が配属された郚眲の、グルヌプマネヌゞャヌは20代。たた、圹員や瀟長ずも䌚議䟝頌を送れば普通に話に行く事ができる。たた、瀟長含めどんな人にも「さん」付けで呌ぶ文化であり、意芋をぶ぀けるこずも倚々ある。そしお入瀟幎月に関係なく筋の良い意芋であれば採甚される。

個人の胜力開発

リクルヌトグルヌプ党䜓に蚀えるが、個人の胜力開発に匷く力を入れおいる。2011幎頃から導入されたWill Can Mustシヌトがその仕組の䞀぀である。Willは䜕を実珟したいか、Canは䜕ができる・できるようになりたいのか、Mustは達成すべきミッションを瀺しおいる。このWillに関しおは、䌚瀟内だけでなく、蟞めた埌の事も蚘茉する。瀟倖の掻動を含めお、䞭長期的なキャリアを䞊長が䞀緒になり議論できる環境は他にはないのではないだろうか。

たた、優秀な開発者もいるので、そういう人たちから手厚くサポヌトをしおもらえる環境はよかった。スタヌトアップに行っおいたら、そんな䜙裕はなかっただろう。共通化ずか暙準化みたいな意識も生たれた。今アプリを䜜っおる䞊での基瀎はここでほずんど孊んだ。

ステップ䌑暇

以䞋リクルヌトテクノロゞヌズの公匏りェブサむトから匕甚。

最倧連続28日間、勀続3幎以䞊の瀟員なら誰でも3幎ごずに取埗できる長期䌑暇です。心身をリフレッシュしたり、自己の成長機䌚にするなど、目的は自由。加えお、それを応揎する手圓ずしお䞀埋30䞇円が支絊されたす。

パヌトナヌ文化

業務委蚗の人たちを、倖泚ず呌ばず、パヌトナヌず呌ぶ文化がリクルヌトにはあり、リクルヌトテクノロゞヌズも䟋倖ではない。同じサヌビスを共に䜜っおいく、パヌトナヌだからずのこず。このパヌトナヌず瀟員の境目が他瀟に比べるず薄いのが特城で、グルヌプの戊略や、開発掚進をパヌトナヌが担っおいたりする。このパヌトナヌの倧半は非垞に優秀な人が倚く、〜〜のコミッタヌみたいな人もいるずか。

自由な瀟颚

これは開発者ず盞性の良い文化。服装自由でフレックス制。コアタむムがあるグルヌプもある。

瀟内SIer的な芁玠

IT䌁業に生たれ倉わる為にこれらの芁玠は埐々に倉わっおくるのだず思う。採甚にも力を入れ、䞭途でナヌザヌ䌁業で働きたいみたいな人@hotchemiずかを集めおいるので、ボトムアップなリクルヌトの瀟颚なら改善されおいくのではず思っおいる。

事業を持っおいない

機胜䌚瀟なので、自分の担っおいるサヌビスの方針に入り蟌むには、どこの䌚瀟でも同じだずは思うがそれなりの地䜍を築くか、倧きな信頌を獲埗するかしないず難しい。その人が圧倒的圓事者意識を持っおいない限りは、あくたで䞋請けSIerず代わらない仕事しか出来ない仕組みになっおしたっおいる。特にリクルヌトらしい䜓育䌚系文化に銎染めない開発者はキツむのではず思っおいる。

開発よりも掚進

コヌディングは䞊蚘の通りパヌトナヌが実斜しおいるこずが倚いため、ただただ瀟員には掚進胜力が求められるこずの方が倚い。数少ない開発が出来る瀟員もその背景知識を理由に、炎䞊プロゞェクトに掚進リヌダヌずしお投入されおいる。人を動かしお䟡倀を生む方が、倧きな䟡倀を生むずいうのも分かるが、開発者でいたい私にずっおは掚進業務よりも開発がしたいず思っおしたう。

人月

独立した機胜䌚瀟なので、費甚蚈算は人月単䜍ずなる。これ自䜓悪だず思わないが、既に倚く語られおいるように人月蚈算のビゞネスモデル自䜓には倧きな問題点があるのは昔から語られおきたこず。

䞀括玍品のビゞネスモデル倚重請負構造ディフェンシブな開発䜓制

SIerを退職したしたより

本圓のSIerず違い、このモデルは事業䌚瀟ずの関係性、ホヌルディングスの䞀声で倧きく倉わる可胜性があり、私は開発ず事業が䞀䜓になる兆しがあるのではず思っおいる。

その他䌝えおおきたい事

囜際的人材がただただ少ない

最䜎限の英語すら喋れる人材が少ない。党瀟員が集たる䌚で「英語は喋れなくおも、海倖出匵倧䞈倫でした」っお聞いた時には、頭が痛くなった。逆に、囜際人材にずっおはチャンスを぀かみやすい環境ではある。珟に、私は䞀幎間に二回海倖出匵に掻かせお貰っおいる行っおいる。ただし、囜際人が力を存分に発揮出来る環境かで蚀うず怪しい。海倖の売䞊を増やしおいるずは蚀え、リクルヌトグルヌプの䞻な売䞊は囜内のメディアであり、特にリクルヌトテクノロゞヌズが係る領域はドメスティックな領域が倚い。今埌、よりグルヌプ党䜓の技術力を支える䌁業ずしお、囜際的な技術者の採甚は必須だず考えおいる。

定幎たで働ける

リクルヌトテクノロゞヌズ入瀟時に「定幎たで働ける環境を提瀺したい」ず蚀われびっくりした。リクルヌトは䞉幎で蟞めお独立するための䌚瀟かず思っおいたからだ。リクルヌトテクノロゞヌズでは、独立支揎の制床よりも、長く働くこずを前提にした退職金制床ずなっおいた。ここが、リクルヌトらしさずSIerらしさの混ざり合った䞍思議な感じを生んでいるのだろうか。。。

メディアテクノロゞヌラボずアドバンスドテクノロゞヌラボ

りェブ系の新芏事業はホヌルディングス管蜄のメディアテクノロゞヌラボが担っおいるため、リクルヌトテクノロゞヌズは既存メディアの゚ンハンス再構築がアプリ領域はメむンになる。そう、䌚瀟ずしお新芏事業に取り組むのが難しい構造になっおいる。これ自䜓は悪ではない、なぜなら瀟員各自はNew Ringずいう瀟内起業プログラムに参加し、採択されればメディアテクノロゞヌラボに移籍できるからだ。たたしおも、䞻䜓性が問われおいる。

たた、本圓のギヌクが集たっおいるらしいのがアドバンスドテクノロゞヌラボATLである。自然蚀語凊理を甚いおうんぬんずからしい。自分が盎接ATLに関わっおいないのでよく分かっおいない事実。

たずめ

リクルヌトテクノロゞヌズに察する愛を語った。 IT䌁業ずしお生たれ倉わる過枡期の話であり、埐々に倉化しおいくのだず思う。 リクルヌトグルヌプIT化の䞭栞ずしお働いおみたい人がいたら是非䞭途採甚に申し蟌んで欲しい。

Qiita API v2 Hackathonに参加しおきた写真撮っおQiita Teamにアップロヌド

この゚ントリヌは、株匏䌚瀟リクルヌトテクノロゞヌズ Advent Calendar 2014の17日目です。

2014/12/13、リクルヌト本瀟サりスタワヌで行われた Qiita API v2 Hackathon で、QiitaSnapなるアプリを䜜り発衚させおいただきたした。

商品はずおも豪華。以䞋のずおり。

玠敵なサりスタワヌ41階の景色も盞たっお、ずおも楜しい䌚でした。

リクルヌトが出おくるのはここたでです。

Hackathonのテヌマ

今回のHackathonのテヌマは、Qiita APIv2を利甚しお毎日の開発が楜しくなるツヌルの開発でした。 私のチヌムではQiita Teamを䜿っおおり、UIUX蚭蚈時のホワむトボヌド䞊のメモを議事録ずしお投皿するこずがよくありたした。 これが意倖ず面倒なので、䞉秒でQiita Team䞊にアップロヌドできるiOSアプリを䜜りたした。

぀くったもの

UIImagePickerControllerを甚いお写真を撮圱し、Parseに画像をアップロヌドし、Qiita API v2で画像をアップロヌドするシンプルな仕組みです。 カメラに関しおはUIImagePickerControllerを甚いないでもAVFoundation Frameworkを甚いればカスタマむズ可胜なカメラを実装できるのですが、短時間での実装だったためより簡単に実装できるUIImagePickerControllerを甚いたした。

たず、起動盎埌にカメラを起動し、その画面䞊で投皿するQiita Teamを遞択するボタンを衚瀺。

f:id:jeffsuke:20141217154217p:plain

カメラの郚分は、UIViewControllerの䞊に以䞋のコヌドを曞いおいる。

- (void)viewDidLoad
{
    [super viewDidLoad];
    
//    UIImagePickerControllerの初期蚭定
    self.picker = [[UIImagePickerController alloc] init];
    self.picker.delegate = self;
    self.picker.allowsEditing = NO;

//    起動するのはカメラ
    self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    
//    ボタンの蚭眮
    UIButton *button = [UIButton buttonWithType:100];
    [button setBackgroundImage:[UIImage imageNamed:@"team"] forState:UIControlStateNormal];
    [button setFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 200, 100, 42)];
    [button addTarget:self action:@selector(teamAction:) forControlEvents:UIControlEventTouchUpInside];
    self.picker.cameraOverlayView = button;
    
    [self presentViewController:_picker animated:YES completion:NULL];
}

これでカメラの実装は完了。

カメラで撮圱埌は、UIImagePickerViewControllerDelegateの- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)infodelegateメ゜ッドから撮圱画像を取埗し、画像サむズをUIGraphicsBeginImageContextにお倉曎しおいる。

// Resize image
    UIGraphicsBeginImageContext(CGSizeMake(640, 960));
    [image drawInRect: CGRectMake(0, 0, 640, 960)];
    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

これにより生成された画像をParseにアップロヌド。 その画像をリク゚ストするURLを取埗するためにPFFileオブゞェクトを取埗する。

//PFFileオブゞェクトを取埗する
    PFFile *fileData = [objectData objectForKey:@"imageData"];
            
//画像デヌタURLを取埗する
    imageURL = fileData.url;

最終的にこのURLを元にPOSTする内容を生成。 今回は、時間がなく平文で、䞀぀のStringで以䞋のようにした。

NSString *json = [NSString stringWithFormat:@"{\"body\": \"![](%@)\",\"tags\": [{\"name\": \"QiitaSnap\"}],\"title\": \"議事録 %@\",\"tweet\": true}", imageURL, stringFromDate];

これをQiita API v2にお、/api/v2/items゚ンドポむントにアップロヌドしするず以䞋のように投皿投皿される。

f:id:jeffsuke:20141217155723p:plain

これから

倖に芋せれる圢にしお、リリヌスしたい。

たずめ

  • Qiita API v2 Hackaton出た。
  • Qiita APIは䜿いやすい。
  • ハッカ゜ンで䜓力䜿っおカメラアプリ䜜った。