DropTalk 3をリリースしたので、プログラマ的に自慢してみる

Share on Facebook
このエントリーをはてなブックマークに追加

HMDTでコツコツと開発を続けているVOCAアプリ、DropTalkの最新版であるDropTalk 3が公開されました! 今日のところはまずはDropTalkをリリース。DropTalk HDとDropTalk HD Freeはもう少しお待ちください。現在審査中です。DropTalk 3の詳しい情報は、こちらのDropTalkのページを参照してください。

DropTalk 3は、前のバージョンから大幅な機能アップをしました。すんごい大幅なんです。もちろんユーザにとって便利な機能を実装していったわけなんですが、結果的にプログラマとして大きいチャレンジになるものがいくつかあって、それらをガシガシと実現していきました。これが楽しかったんですよ。

ということで! HMDTのサイトでは、DropTalk 3におけるプログラマ的に注目してほしいポイントを紹介していきます。単なる自慢ですね、これは。

Finderライクなファイル管理

DropTalkではキャンバスと呼ばれるファイルを作るんですが、以前のバージョンではフラットにしか管理できなかったんです。当然、キャンバスの数が多くなると管理が困難になります。ユーザの方に聞くと、数十とか100とか平気で作ってしまうらしいんですよ。これはもう、フォルダを導入して階層管理にするしかないでしょう。

iOSでフォルダを利用した階層管理を実現しようとすると、問題になるのがユーザインタフェースです。UITableViewでチマチマやるのも格好悪いし。よーし、これを作ったれ! ということで、気合を入れてファイル管理ユーザインタフェースを作りました。

基本的な操作はドラッグアンドドロップです。ドラッグして、項目の並び替え、フォルダに入れる、といった操作ができます。上の階層に戻すときは、ナビゲーションバーにドラッグするようにしました。あと、メニューを使って、カット/コピー/ペーストもできるようにしました。Finderですな、こりゃ。

 

UICollectionViewの編集

UICollectionViewが大好きです。最近は、ほとんどのアプリのユーザインタフェースは、これで組んじゃいます。でも、使い込んでいくうちに欲しくなるのは、編集機能。UITableViewみたいに、行や列の追加や削除ができたり、並べ替えができたらいいのになー、と思ってました。

ないものは作ってしまえー、ということで作りました。UICollectionViewに編集モードを追加して、行や列を自在に編集しています。

これは特に難しいことをしているわけではなくて、ほぼ用意されているメソッドだけで作りました。insertItemsIndexPaths:とdeleteItemsAtIndexPaths:を駆使しています。難しくはないけど、泣きそうになるほどめんどくさかったです。

SVGレンダラの作成

DropTalkは、可愛らしいシンボルが魅力です。これはできるだけ綺麗に描きたいところ。が、年を追うごとにiPadの画面がどんどんでかくなってきて、リソースとして保持しているPNGファイルじゃ解像度が足りなくなってきました。iPad Proの画面サイズなんてどうすりゃいいのよ。もっと大きいPNGファイル作る? それだとアプリサイズがどんどんでかくなってしまいます。

これを解決するには、ベクタファイルに対応するしかないね! ということで、シンボル画像をSVGファイルに変換して、それを表示するためにSVGレンダリングエンジンを作りました。これなら、どれだけ画面が大きくなっても大丈夫です。iPad Proでもこの美しさです!

svg_renderer

 

 

こんな感じで、プログラマ的に面白いことを色々とやってみました。やりたいと思ったことに、チャレンジできる時間と技術の余裕があったのが嬉しかったですね。

WWDC最終日:一年間のやる気をもらいに

Share on Facebook
このエントリーをはてなブックマークに追加

終わったー! WWDC全日程終了しました。参加された方々、お疲れ様でした。

楽しかった? と、訊かれれば、そりゃもう、最高に楽しかったよ! WWDCはさ、新しいMacが発表されるとかどうでもいいんです。参加するだけでいいの。

初めて参加した弊社のスタッフが、「Swiftの新しい文法で表記が短くなっただけで、歓声があがるのがすごく楽しい」って言ってました。そうなんだよね。周りに座っている世界中から集まってきたたくさんの人たちが、自分が毎日一生懸命やっていることに対して同じ気持ちを持っているんです。

Swiftが新しくなったよ! イエー! 関数の名前も全部変えたよ。 ブー! でも自動コンバートしてくれるんだ! イエーイ! ところでXcodeのFix Issueボタンって何もフィックスしてくれないよね。 ハハハハハ!

小さい会社で細々とコードを書いていると、「どうぜプログラマの言うことなんて誰も理解してくれねーよ」とひねた気持ちになっちゃいます。それがWWDCに来ると、「みんな同じ気持ちだったんだ! そんなことに気を病むよりも、もっとぶっとんだ未来に突っ走っていこう!」と無駄に煽られるんです。

私は常々、WWDCには一年間のやる気をもらいに行く、と言っているんですが、今回もたっぷりもらってきました。帰ったらコード書きまくるぞー! テストコードも書くぞー。デザインもやるぞー。本も書くぞー。あとは、SiriKitチェックして、Messagesフレームワークチェックして、tvOSもアップデートして、Accelerateフレームワークのニューラルネットもチェックして、、、とにかく、やりたいことでいっぱいだー!

おまけ。最終日はお約束のカニでした。頭がおかしくなるくらい美味しい。

IMG_4404

 

PPQ Dungeness Island

WWDC四日目:英語のセッションを聴くということ

Share on Facebook
このエントリーをはてなブックマークに追加

WWDCも四日目になりました。疲れてきたー。体は時差ぼけがとれてきて調子いいんだけど、頭の方が。ずーっと座学で勉強している感じだからね。大学一年のときみたいだ。

WWDCのセッションはもちろん全部英語なのですが、唐突ですが、私は英語が苦手です! 自信を持って言えますが、苦手です。エンジニアは英語力がないとやっていけないので、学生のときからコツコツと、社会人になってからもジリジリと勉強し続けていますが、何年やっても苦手なものは苦手です。

それでも苦手なりに少しは上達するもので、仕事に絡むもの、たとえばAppleの技術文書を読むくらいなら、どうにかこなせるようになりました。その代わり日常会話はダメね。新聞や小説も訳わかんねぇ。技術のドキュメントなら読めるのは、典型的な文章に慣れてきたこと、語られていることの背景を理解していること、通常使われない特殊な単語(implementsとかinferenceとか)を覚えてきたこと、が理由として挙げられるでしょう。新聞とかは、その辺りが全然別物なのです。

リーディングならどうにかなるんですが、ヒアリングとなるとこれまた別の話で。WWDCに来てセッション聴いてても、何言っているか全然わかんねー。周りが笑ってても、なんで笑ってるかわかんねー。

まぁ、後ろにKeynoteのスライド出てるから、何についての話かはわかるんですよね。どうせビデオも公開されるし、後で見返せばいいか。そうかそうか、じゃこの場は軽く流してTwitterでもチェックしながら、、、ってとこでハッと気づくんです。私、何しにここに来てるんだー?! 安くない金と貴重な時間をぶっこんでるのに、これじゃモトがとれねぇ。ビデオの見返しなんてやったことないし。

過去に参加したWWDCからこのような教訓を得た私は、今回はセッションを聴く時のスタイルを変えました。まず、メモは取らない。メモを取ると、その間に何言っているかわからなくなるから。後ろのスライドも気にしない。スライド読んでいると、その間に何言っているかわからなくなるから。ひたすらスピーカーの顔を凝視して、その言葉を理解することにすべての集中力を動員するんです。聴け! とにかく聴け! いま、まさにこの場で、理解をするんだ!

それくらいの気合いを入れて聴くと、喋っている言葉がどうにか頭に入ってくるようになりました。面白いもんで、音声として聴くとわからなくても、喋っている人の表情やジェスチャー、周りの雰囲気があるとわかってくるんですね。人が話を聴くときは、ノンバーバルな情報もフル活用しているんだと実感できます。

ただ、喋っていることがわかったとしても、理解できるかはまた別の話で。特に馴染みのない分野だと、これ日本語で聞いても理解できねぇよ、という内容だったりします。あぁー、またわかんなかったよー! と、頭を抱えながら、また次のセッションを求めてさすらうのでした。

おまけ。インド料理を食べました。カレーのビュッフェです。

IMG_4386

Amber India

WWDC三日目:あきらめの悪いApple

Share on Facebook
このエントリーをはてなブックマークに追加

WWDC三日目も終わりました。セッション三昧の日々です。SiriKitやMessagesフレームワークなど、基調講演で華々しく打ち上げられた新機能に関するものもありますし、従来の機能を地味にアップグレードした解説もあります。

そうそう、今日弊社のスタッフと話していたのですが、WWDCのセッションは3つくらいのパターンがあるよ、と。まず「Getting Started」。これは、その分野をこれから使おうとする人に向けた、チュートリアル的な内容のセッション。次に「What’s New」。その分野での新機能を紹介するもの。そして「Advanced」。その分野を使い込んでいる人に向けて、上級の使い方を説明するもの。

今回のSwift関連のセッションでいうと、「Getting Started with Swift」がGetting Started系。「What’s New in Swift」「What’s New in Foundation for Swift」がWhat’s New系。そして「Swift API Design Guidelines」「Understanding Swift Performance」なんかがAdvanced系だね。自分がその分野を得意かどうかで、どれを聞きに行くか決めるといいよ、なんてことを話していました。

で、私は興味のあるTestingやらMetalやらのセッションをウロウロしていたんですが、結構アレ? と思うことがありまして。そういった特定のプラットフォームにフォーカスしていないセッションでも、tvOSやwatchOSの話題が出てくるんですよね。たとえばTestingのセッションでは、クラッシュログの収集というテーマで話していたのですが、デモとして使われていたのはtvOSアプリでした。もっともこのデモは、tvOSシミュレータがなかなか立ち上がらなくて失敗してしまいましたが。

他にもセッションの最後に、この技術をサポートするプラットフォームを明示するようになってました。「iOS、macOS、tvOS、watchOS」って感じでね。これが意外に、tvOSをサポートする技術が多いんですね。watchOSはさすがにいろいろな制約があるので、難しいものが多いみたいですが。

初日の基調講演を思い出してみると、確かに4つのプラットフォームでやっていくよ、って宣言してました。でも正直、そんな真面目に受け取っていなかったですよ、私は。今回参加した人たちも、tvOSとwatchOSにはそんなに期待していなかったんじゃないかな。そりゃ、Apple Watchが登場した2014、Apple TVがプラットフォーム化した2015は、興味津々でしたよ。でも市場での盛り上がりがそれほどでもなく、アプリを作ろうと思っても制約が強くて思い通りのものが作れなくて、熱が引いていきました。このままフェードアウトしていくのかなぁ、っていう気分でした。

それがなんか、Appleはやる気満々なんですよ。tvOSもwatchOSも特別なものではなく、4つのプラットフォームを同列のものとして扱っているんですよ。戦略として、これらの平準化を推し進めているという印象を受けます。iOSやmacOSの機能を、積極的にtvOSやwatchOSに移しているんですね。環境を整えることで、アプリの移植をプッシュしようということです。

私は常々思うんですが、Appleって意外とあきらめが悪いんですよ。Apple WatchやApple TVにしても、ヒットしたとは言い難いですよね。Siriだって登場した時はボロクソに言われていました。でもそういった製品や技術を地味にアップグレードし続けて、気がつくと標準になってしまっているんです。プラットフォーマーとしての矜持というか、意地というか。

だからセッションを聴いていると、tvOSではこういう機能にしようか、watchOSではこう展開しようか、って自然に考えちゃいます。こっちに来る前は、そんなこと全然考えていなかったのに。WWDCマジックですね。

おまけ。メキシカンを食べてきました。ロティサリーチキンです。

IMG_4384

green chile kitchen

WWDC二日目:バイバイNEXTSTEP(うわべだけ)

Share on Facebook
このエントリーをはてなブックマークに追加

WWDC二日目です。会場をMosconeに移して、セッションやラボが山盛りに開催されています。やっぱり、Mosconeに来るとしっくりきますね。ホーム感があるわぁ。

IMG_4367

セッションは、一回の時間が短くなったんですね。40分くらい。それが一時間おきに組まれます。このくらいの方が、集中力が保たれていいかな。途中で眠くなる前に終わる感じです。

初日は新機能を中心に回ってみましたが、やっぱり気になるのはSwift 3でしょうか。Xcode 8をダウンロードして、試しに手持ちのコードをビルドしたら、出るわ出るわエラーの嵐。Cocoaの関数名や定数名を全部変えてきています。いったいどうなってんねん、とセッションを聞きに行ったら開口一番「Grand Renaming」。そうすか、またすか。

SwiftのAPIデザインガイドラインなるものを制定して、CocoaのAPIをすべてSwiftyにしたとのこと。たしかに今までObjective-Cそのままだったから、新しい名前の方がとても馴染むのは分かるけど、それを本気でぶっこんでくるか。でも、古いソフトウェアをそのままほったらかしにせず、常に手を入れて最新のトレンドに合わせていくのは、とても大切なことです。オーバーホールですな。

そんな流れで、いくつかのクラスから「NS」の接頭子が外れました。NSDataではなくてData、NSCalendarではなくてCalendarになります。NSは、もう知らない人の方が多いでしょうが、NEXTSTEPの意味です。そうか、ついにNSの名前も消えちゃうのか、と思ったらそうではないらしい。新しいDataやCalendarは値型でより軽量にアクセスするための構造体で、背後ではNSDataやNSCalendarが作られています。これらはCopy on Writeになるので、暗黙的なmutationが利用できるようになります。

目に付かなくなったけど、まだまだ背後で活躍するNSのクラス群。ジョブズの遺産は、Swift時代になってもその姿を変えながら、連綿と残り続けます。

おまけ。お昼は飲茶でした。

IMG_4368

 

Yank Sing

WWDC初日:未来は視えたか?

Share on Facebook
このエントリーをはてなブックマークに追加

WWDC初日、KeynoteとState of the Unionが終わりました。

レインボーカラーのAppleフラッグが半旗で掲げられ、フロリダの事件への黙祷が捧げられる中で、Keynoteが開幕しました。ただのテクノロジーカンパニーではなく、ベイエリアおよび西海岸のカルチャーを牽引するAppleの意識が現れた行為でした。

IMG_4352

常々よく言われるのですが、WWDCには革新の年と成熟の年があります。新しい技術をボンボンぶっこんでくる年もあれば、それらを普及/定着させるために開発者を促す年もあります。今年は紛れもなく、後者でしょう。

大きなテーマは、アプリとシステムの統合だと感じています。いままでシステム優先で進めていたものを、アプリへの窓口を作って融合させていこう、というものですね。iMessageへの機能拡張、SiriKitによるSiriへの情報提供、Mapの機能拡張、などがそういった施策です。頑なにSandoboxによるアプリの独立性を訴えていた時期を経て、機能拡張およびNSUserActivityという仕組みを通じてアプリ間連携をさらに深めていくのでしょう。

成熟の年は逆に言えば、新しいものはなんもなかったということです。Google、MicrosoftやFacebookが攻勢を強める、ボットサービス、VRおよびAR、クロスプラットフォーム戦略に関しては、清々しいくらい何もないです。自分の信じた道をただ進み、周りはガン無視です。相変わらずだな、おい。

ただ一つだけ。ボットサービスに対するAppleの答えは、機能拡張によるiMessageの強化だと思っています。Facebookなどが進めるボットサービスの目的は、自称「AI」ソフトウェアによってテキストベースの応答サービスを提供することですが、そんなものはしばらく使い物にならないだろう、とAppleは考えています、きっと。その代わり、チャットサービスのAPIを解放して、人同士のコミュニケーションをリッチにする方がよい、ということだと思います。Siriにしても、音声認識サービスとしては進化させますが、それ以上の「AI」的アプローチは限定的に感じますし。それが現時点でのAppleのメッセージなんだと思っています。

結論としては、とても抑制的な、実現可能な未来を描いたものでした。いまできることをさらに強化することで、ユーザにアピールするのでしょう。物足りないといえば物足りないですが、まぁ、いつもAppleってそんなものですよね。中途半端な未来を提示するよりは、練り上げて出来上がったものをバンと発表すると。みんなの好きな「イノベーティブ」なAppleは、今年はおあずけってことでしょう。

おまけ。今日はシーフードを食べてきました。牡蠣や、生のはまぐりが美味しかったです。

IMG_4364

Anchor & Hope

WWDC 2016:前日レジストレーション

Share on Facebook
このエントリーをはてなブックマークに追加

久しぶりのWWDCに参加しに、サンフランシスコにやってきました。8時間のフライトを経て降り立ったカリフォルニアは、相変わらずの雲一つないアホみたいな青空です。

ホテルにチェックインしたら、何はさておきカンファレンスのレジストレーション。今年はレジストとKeynoteはいつものMosconeじゃなくて、Bill Graham Civic Auditoriumでやるとのこと。初めていってきましたよ、シビックセンターの隣にあるんですね。観光地から外れるから、ちょっと違う雰囲気。

IMG_4338

会場前は車を通さない歩行者天国状態になっていて、ステージが用意されていたり。レジストも外でやってました。中の様子は伺えません。

今年のお土産はジャケット。これ、結構質感いいですよ。試着してレジストレーション完了! 背中の16が気合入っているぜ。

IMG_4343

KeynoteおよびState of Unionの展望ですが、アプリ屋としては、とにかくiOS 10とwatch OS 3に期待です。今年はいままで、GoogleやMicrosoftの動きが激しいですよね。チャットを前面に押し出した、会話ベースユーザインタフェースの提案。VRやARがいよいよ開始する期待感。Xamarin買収や、Ubuntu搭載による仁義なきプラットフォーム拡充など。とにかく新しいことやってやろうぜ、という雰囲気が盛り上がっています。Appleもこれに追従するのか、ガン無視して粛々と独自路線を突き進むのか、それとも驚きの隠し玉があるのか、世間の耳目を集めるKeynoteと、実戦略解説であるState of Unionはもうすぐです!

DropTalk 3、いよいよパブリックベータ開始!

Share on Facebook
このエントリーをはてなブックマークに追加

droptalk3

HMDTでコツコツと作り続けているVOCAアプリであるDropTalkが、いよいよ最新バージョンであるDropTalk 3のパブリックベータを開始することとなりました! ようやく出せました。いやー、疲れたよー。

興味のある方は、こちらのページから参加申し込みを確認してください。興味のない方も、無料で参加できるので、よろしければどうぞ。

今度のバージョンは、とってもたくさんの新機能を搭載しています。その中から、このページ読みに来ているから技術的に面白いものを1つ。SVGファイルの読み込みと表示に対応しました。これで、iPad Proのどでかい画面でも、綺麗な絵を楽しむことができるんですよ!

もちろん、SVGレンダリングエンジンは弊社開発です。

Swift 2.2に対応しながら

Share on Facebook
このエントリーをはてなブックマークに追加

いまさらながら、ボチボチと手持ちのコードのSwift 2.2、というか来るべくきSwift 3に向けた対応を進めています。無視しまくっていた警告をプチプチとつぶしています。みなさんご承知の通り、ほとんどがdeprecatedされたものですね。作業自体は別に難しくはないんですが。

結構大胆にいろんなものをdeprecatedしてきましたよね。「++演算子を使うな」と言ってきたり。「..<演算子を使った方がSwiftらしいからそうしろ(警告文直訳)」と言ってきたり。今回は全般的に、CっぽいものやObjective-Cっぽいものをザクザクと削除にかかってきている印象です。言語設計者に、Swiftかくあるべし、という確固たる思想があるのを感じさせますね。

プログラミング言語のバージョンアップっていうと、普通は色々な文法を付け足してきてブクブクと肥大化していきますよね。Javaとか、Javaとかね。あとJavaもか。それに比べれば、文法を削りにきてるってのは健全かもしれない。普通はやらないですよ。昔のコードが動かなくなるんだから。みんなやりたくてもやれなかったことを堂々とやるのは、AppleらしいといえばものすごくAppleらしい。

とはいえ、ちょっとストイック過ぎんじゃない? って気もしますね。文法を変更した経緯は丁寧に説明されていて、++演算子を削った理由とか説明されているんですが、まぁ一言でいえばSwiftらしくなくて嫌だ、ってことですか。

理由の一つとして、

x++はx+=1と比べてそんなに短くならない

と述べられたりしてるんですが、それを言っちゃあおしまいでしょ。

シンプルさの追求や曖昧さをなくす、といえば聞こえがいいですが、一歩間違うと多様性の排除にもつながっていくでしょう。ま、プログラミング言語や技術に対して、多様性が善として働くとは限りませんが。Swift 3に向けてどうなっていくか、興味深いです。

なぜWWDCに行くのか

Share on Facebook
このエントリーをはてなブックマークに追加

WWDC 2016、無事当選しました! 今年もまた抽選でしたが、嬉しいことに当選メールが届きました。なんとなくですけど、今年はネットニュースや私の周りのSNSではいまひとつ盛り上がりに欠けていたので、参加人数の増加も一段落したのかな、と感じています。誰も彼もが参加していたブームが去って、行きたい人が普通に行けるようになったのはいいことだと思います。弊社スタッフも当たったので、今回は二人で参加することになりました。

WWDCに行って得られるものは何でしょう? 昔はここでしか聞けない話というのがあったのですが、ほぼすべてのセッションがストリーミングで見られる昨今、情報のためってわけではないですよね。じゃあ、人脈を作るため? Appleのスタッフに質問するため? ティム・クックの顔を拝むため? 私個人に限って言えば、勉強の時間を確保するため、なんです。海を渡って、世界中の開発オタクが集まる特異な場所に、5日間強制的に自らを放り込むんです。これが必要なんですよ。たとえ同じものを日本でネット経由で見たとしても、日々の雑務に追われて全く身に入らないでしょう。こうして得たものが、次の一年間の仕事のネタとモチベーションになります。

あと楽しみなのは、やっぱりご飯ですね。私、3年半ほどアメリカに住んでたことがあるのですが、その時に知ったのは、アメリカにもうまいメシは探せばある(探さなければマズいメシばかり)ということです。なので必死こいて、それぞれの都市を訪れるたびに、うまいメシ屋リスト(食べられるものを出す店)を作り上げていました。久しぶりに訪れるサンフランシスコで、そのリストを確認したり更新したりするのが楽しみです。