2月から株式会社はてなに入社します
最近はフリーランスで仕事してたので今流行り?の華々しい退職エントリーは書けませんが、 技術ネタ以外で書く事に困っていたのでお知らせの意味もかねてこのエントリー書きます。
直近の約1年間はフリーランスでiOSアプリ開発(Androidも少し)をメインに仕事してまして、 年末までの半年間は地元広島を離れて東京で某大手企業のアプリを担当してました。 スマートフォン系の仕事の多さや勉強になることも多々あって、 東京に移り住んでゆくゆくは会社でも作るか!なんてこと軽く考えてたんですが、 家庭の事情で地元広島か、もしくはなるべく広島に近い場所で就職しようという事になった次第です。
そんな時広島から少し遠いけど前から憧れの企業だったはてなが、 iPhone, Androidアプリエンジニアを募集してるのを知りダメ元で応募してみました。 すると自分でもびっくりなんですがトントン拍子で最終面接までたどり着き、 課題だったプレゼンもなんとかこなして2月から入社することになりました。 (東京でもチャレンジ兼ねて就活して2社ほど内定いただきましたが、結局行けなくなってしまい関係者の方々すいません)
元々生まれも育ちも広島で、地元のSierに就職してからは業務システムの開発(主にJava Webと.NET C#)やLinux、UNIXサーバの構築、 保守などのインフラ周りを主にやってきた人間です。 そういう経歴にも関わらず以前からシリコンバレーのベンチャー企業への憧れがすごくあって、 SIerよりITベンチャーで働きたいという思いが強かったのですが、 広島にそんな有望なベンチャーもなく、何年も鬱々とした日々を過ごしてきました。
そんな状況をなんとかしたくて約4年前から個人でiOSアプリを少しずつ作り始めました。 がんばった甲斐あっていくつかアプリを公開できるほどになり、 気がつけば仕事・趣味含めほぼiOSアプリ開発(Androidも少しね)ばかりやるような状況になってました。 ただ当時は周りにiOSエンジニアがほとんどいなくて、 Webだけでいいじゃんという人にアプリの良さを理解してもらうのにはよく苦労しました。 それでもアプリ開発が楽しく率先して仕事選んでましたねw
というわけで、Perlはほぼ未経験ではてなに入ることになりちょっと心配な面もありますが、 PerlもがんばりつつiOS周りの開発で培ったノウハウを活かして、はてならしいアプリを提供できればと思ってます。
個人でアプリを作り始めた4年前、とても自分がはてなに入社できるなんて思ってもみませんでした。 でも縁あってこの機会をもらえたからには、はてなが更に飛躍できるよう力の限りがんばっていく所存です。 若くて優秀なエンジニアがたくさんいる環境で、36歳の自分がどこまでやれるのか楽しみでもあります。
そしてこのはてなブログも息切れしないよう力の限り続けていく!?・・・予定です。
爆速ではてなブログリーダー・アプリを作ってソースコード公開してみた!
はてなブログには人気エントリーを返すRSSフィードがあるので人気エントリーを表示するアプリを勉強がてらに作ってみました。
Core Data に取得した人気エントリーを保存してるのでオフラインでもみれます。
(ただこのアプリ、表示できるのは人気エントリーの一覧だけです・・・)
http://blog.hatena.ne.jp/-/hotentry/rss
アプリのスクリーンショットです。
・ブログ一覧画面(縦)
・ブログ詳細画面(縦)
・ブログ一覧画面(横)
・ブログ詳細画面(横)
Xcode5から使いやすくなったAuto LayoutやXCTestなどあまりキャッチアップできていなかった部分の勉強や単体テストをちゃんと書くという目的があったのですが、作りっぱなしでは面白くないので公開します!
https://github.com/asakahara/ASHatenaBlogReader
感想としてAuto Layoutは正直かなりよかったです!
これまでUILabel
の高さを可変にする表示はNSString:sizeWithFont:constrainedToSize:lineBreakMode:
を使って毎回計算してました。
Auto Layoutの使う場合、制約の設定さえちゃんとしておけばUILabel
の高さ調整は勝手にやってくれます。
(もっと早く知っておきたかった・・・)
勝手にやってくれるんで sizeToFit
などのメソッドをプログラムから呼び出さないようにしましょう。
ただ一つ問題として横画面にも対応させたのですが、縦から横画面へした際にStoryBoardから設定した制約だけではUILabel
の横幅の制御がどうもうまくいきません。
仕方なくUILabel.preferredMaxLayoutWidthを横画面のサイズに併せて変更かけることで対応しています。
- (void)updateLabelPreferredMaxLayoutWidthToCurrentWidth:(UILabel *)label { label.preferredMaxLayoutWidth = [label alignmentRectForFrame:label.frame].size.width; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; // 横画面にした際にラベルの横幅が縦画面のサイズのままになってしまうため、 // preferredMaxLayoutWidthを画面サイズに併せて調整する [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.bodyLabel]; [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.titleLabel]; [self.view layoutSubviews]; }
その他にもCore Data用に初めて使ったMagicalRecordは思った以上に便利でした。
特にマルチスレッドでCore Dataを扱う部分をかなり楽にしてくれます。
MagicalRecordのドキュメントにあったサンプルを見てもらえば納得してもらえると思います。
Person *person = ...; [MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ Person *localPerson = [person MR_inContext:localContext]; localPerson.firstName = @"John"; localPerson.lastName = @"Appleseed"; } completion:^{ self.everyoneInTheDepartment = [Person findAll]; }];
ブロック内に書いた処理を全て別スレッドで処理を行い、完了ブロックはメインスレッドで動作します。
あと単体テストはXCTestを使って最低限のモデルのテスト書いてます。
HTTP通信周りはOHHTTPStubs使ってやってます。
今回特に参考にさせていただいた資料としてはてな教科書があります。
初心者の方にも分かりやすい内容となっており、一通りこなせばこの手のアプリは誰でもきっと誰でも作れるはずです!
一から作ったり勉強するのはいや!という方はソースだけでもダウンロードしてお試しください。
やっぱりアプリ作るのは楽しいですね!