384ta

by Ryutaro Miyashita

Mobile App Engineer

Page 2


Realm meetup #8 参加レポート

realm-meetup-no8.jpg

2015/10/27、話題のモバイルデータベース技術 “Realm” のミートアップイベントである Realm meetup #8 が、 Sansan 株式会社を会場に行われました。今回は Reporter 枠というイベントの様子をレポートする代わりに優先的に参加できる枠を使っての参加ですので、イベントレポートを書きたいと思います:)

 Realm Recent Updates

まずは Realm の岸川さんと山﨑さんから、 Realm Objective-C, Realm Swift, Realm Java の最近のアップデートについて発表がありました。

 iOS

Realm iOS は最近 0.96.2 にアップデートされ、様々な機能強化がアナウンスされました。

  1. Xcode 7.1 でビルドされ、 Carthage や Pre-build バイナリを使っている場合もリンクできるようになった
  2. NULL プロパティがサポートされた
  3. キーパス・コレクション・クエリに対応した
  4. エラーハンドリングが改善された

また、注意点として、NULL 対応が入ったことで Realm の DB ファイルフォーマットが新しいものになり、ほとんどの場合でマイグレーションが必要になるそうです。

Objective-C 版でマイグレーションを行わずに対応するには、クラスメソッドである +(NSArray *) requiredProperties を使うと良いとのことでした。

Swift 版では Swift の構文である Optional がそのまま利用できるようです。

dynamic var name = "" // not null
dynamic var birthday: NSDate? // nullable

その他、詳しくはニュースリリースを見ると良いでしょう。

また、新型 Apple TV に搭載されている tvOS 対応も進められていて、とても興味深い話が展開されました。 GitHub の Issues 2691

Continue reading →


チャットを使って働くときに気をつけていること

私が働いている ChatWork では、会社名の通り ChatWork というビジネス向けのチャットサービスを開発・提供しています。社内のコミュニケーションももちろん ChatWork で行われていて、普段からプロジェクトチャットや雑談系チャットなど、大いに盛り上がっています。

チャットサービスを使って仕事のコミュニケーションを取る場合、メールのようにお決まりの定型文

○○ 株式会社 ○○ 様

いつもお世話になっております。○○ の ○○ と申します。

を書かなくて済みますし、発言がタイムライン上に並ぶので、話の流れが追いやすいなどのメリットがあると思います。また、気軽に発言しやすいので、やり取りが素早くスムーズにできるとも思います。

ただこの気軽さを先行しすぎて、やり取りが複雑化してしまうこともあるので、気をつけていることを紹介します。とてもシンプルなことです。

=====

 主語を書く

雑談系チャットでは良いのですが、大切なプロジェクトチャットでは極力主語にあたるものを書くようにしています。

  • クラッシュしました
  • バグを見つけました

と、チャットに書く場合はサラッと一言だけを残してしまいがちなのですが、このチャットを受け取った場合に「どういうことだろう」と考えてしまいますよね。なので、

  • ○○ の操作を行っていたら、クラッシュしました
  • ○○ を開いたら、表示がおかしくなるバグを見つけました

というようにちゃんと話のストーリーが分かるようにします。タイムライン上で話のキャッチボールが発生しなくても良い場合にはこう書くことが多いです。

 主語を省く

しかし、いつも主語を付けるわけではありません。自覚的に省いて発言する場合もあります。それは、話の流れを集中させたい場合です。

  • クラッシュしました
  • バグを見つけました

というチャットを受け取ってもらう側に「どういうことだろう」と思ってもらって、話の流れを作りたいときには主語を省きます。複数回の話のキャッチボールを行って、ディスカッションしたい場合ですね。

=====

これらはいつもいつも考

Continue reading →


AppCompatCheckBox でハマったこと

Android Support Library 22.1 の登場と共に、 AppCompatFooBar シリーズが充実しました。 Android 4.4 以下でも Material Design ライクな UI ウィジェットが使えるようになって、デザインの統一感が向上させられると思います。

そんな AppCompat シリーズの 1 つである AppCompatCheckBox を使うときにハマったことがあるので、共有したいと思います。話としては CheckBox に限らない、 AppCompatFooBar 全般の話なのですが、 CheckBox を触る上で出会った事柄なので …… 。

 AppCompatCheckBox がレンダリングされない

CheckBox を使って UI を組んでいた場所を AppCompatCheckBox に置き換え、いざビルドしてみても CheckBox がレンダリングされないということが最初に躓いたところでした。

001.png

やりたいことは、

  1. support-v7 の AlertDialog の上に ListView を乗せたい
  2. ListView の各行で使う View の中では AppCompatCheckBox を乗せたい

というものです。上のスクリーンショットを見れば分かるのですが、 本来各行の右側にあるはずの AppCompatCheckBox が表示されていませんね。

また、この例では AppCompatTextView の文字色もかなり薄い色になっていますが、躓いた環境では XML 上で textColor を当てはめていて、これも問題の特定に時間がかかった原因でした。

※ AppCompatTextView / AppCompatCheckBox には android:theme="@style/AppTheme" を適用しています。

 原因は LayoutInflater の使い方

Dialog の表示には support-v4 の DialogFragment を使っています。

Continue reading →


Android Design Support Library を少しだけ触ってみました

Google I/O 2015 で Android M Preview が発表されると同時に、Android Design Support Library (以下 ADSL) が使えるようになりました。

ADSL はこれまで Material Design ガイドラインにありながらも、標準 API や Support Library API では自前で実装するしかなかったパーツをライブラリとして、補完してくれるものです。

  • NavigationView
  • TextInputLayout
  • FloatingActionButton
  • CoordinatorLayout / Snackbar

の 4 つを触ってみました。

 ADSL の使い方

build.gradle に

dependencies {
  compile 'com.android.support:design:22.2.0'
}

を追加して、 Sync します。

NavigationView は DrawerLayout の中に設置する要素です。これまで RelativeLayout や ListView などを組み立てて作っていたナビゲーションドロワーを 1 つの要素で作ることができるようになりました。

drawer.png

<android.support.design.widget.NavigationView
    android:id="@+id/main_drawer_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/main_drawer"/>

app:headerLayout

Continue reading →


AWA のターゲットに私はいない

私の SNS 上の周辺で AWA が盛り上がっているのを見ました。なんだろうと思ってみてみると、エイベックスとサイバーエージェントが提供する音楽配信サービスとのこと。

フル機能は月 1,080 円で使えるらしいのですが、 90 日間はお試しで無料だというので iPhone にアプリをインストールして触ってみることにしました。しかし、残念ながら、私はターゲットではなかったようです。

どういうことでしょうか ?

その答えはこちらの記事に書いてありました。

AWAに懐疑的な声を漏らしていたユーザーには「音楽体験とは深く味わうものである」という価値観が共通してあるように思えた

引用 : ユーザーと価値観を共有するUXデザイン | keisuke.tsukayoshi

AWA を起動してスプラッシュスクリーンを通過後、ユーザ登録を行い、最初に目にする画面です。

awa001.png

すぐに AWA の上で集計された何らかの Top 100 を再生することができるようになっていて、その下にはジャンル別 Top 20 やユーザが作った人気のプレイリストを再生することができるようになっています。

このホーム画面には「検索」という体験を提供するためのアイコンが用意されていません。右上のハンバーガーメニューをタップし、表示されるメニューの中から「Search」を選択することでアーティスト名や曲名で検索を行うことができます。

私の普段の音楽の楽しみ方は、気に入った曲に長く向き合うような楽しみ方です。ジャンルを問わずに音楽を聴きますが、曲は「あの曲」という選択をします。なので、 AWA が「検索」を少し深いところに置いている時点で、私というユーザは対象外なのだと思いました。

AWA の PC 版ウェブサイトにアクセスすると、動画を背景に様々な場面で音楽を楽しむ人たちが出てきます。

awa002_a.png

何かをしながら、誰かと一緒に …… 場面はこうしたもので作られていて、ファッショナブルに、オシャレに音楽を楽しんでいるようなイメージを持ちました。私のように、あの曲を、1 人で …… とは真逆ですね。

Continue reading →


shibuya.apk #1 に参加しました

昨日、DeNA さんの会場提供で shibuya.apk の第 1 回に参加してきました。これまでも半クローズドのような勉強会を開催されていたそうですが、オープンにしての初回ということで、第 1 回だそうです。

Android の Chrome はネイティブアプリでしかできなかったようなこともできるようになってきた (Push / Service Worker etc) お話、新しい Android 用コンパイラである Jack & Jill のお話、そして、先日開催された Twitter Flock Tokyo の延長戦として、 Fabric についてのお話をサンプルコードを Java に変えて、中の人である Romain Huet さんがされました。

いよいよ Google I/O 2015 が来週に控えていて、 Android M などの新しい発表が噂されています。個人的には、今後の開発言語についての言及があるかどうかを期待半分で楽しみにしていて、 Jack & Jill がどういう役割を果たしていくのかはとても興味深く思っています。

懇親会の LT も有益 & 面白いネタが揃っていて大満足なイベントでした。

ちなみに、懇親会で Twitter / Fabric の中の人である Romain Huet さんに聞きたかったことを英語で質問して、キチンと返事をもらえて、疑問を解決できたのが個人的なハイライトでした :)

Continue reading →


Realm meetup #3 に参加しました

モバイル向け DB である Realm のミートアップイベントに参加しました。初回は私も発表しました。

3 回目の今回は、日本で Realm の開発をされている岸川さんから近況のアップデート報告があり、 3 件の iOS 側での利用事例がありました。

今回から、発表の内容に関してはビデオ撮影が行われていて、後ほど掲載されることになっているそうです。

Realm を使っていてハマるところとして、

  1. マルチスレッド
  2. マイグレーション
  3. nil / null の扱い

が異口同音に挙げられていました。マルチスレッドの問題に関しては下にどんなことなのかを書きます。マイグレーションに関してはこれまでに使ったことがないので、実感値は伴っていないですが、大変さが伝わってきました。 nil / null に関しては GitHub 上で Work In Progress の Pull Request が進んでいるそうです。

発表の内容を聞いていて、実際にマーケットにリリースされているアプリでの Realm 利用事例が増えてきているなと感じました。

 マルチスレッドに関して

Realm は 2015/05/21 現在、スレッドを飛び越えることができません。 Java のコードで示すと、

public class MyModel extends RealmObject {
  @PrimaryKey private long id;
  @Index  private String name;
  // Getter / Setter は省略
}

こういうモデルオブジェクトがあった場合、

// 実際には Transaction の中でオブジェクトを生成する
MyModel model = realm.createObject(MyModel.class);
new Thread(() -> {
  Log.d(TAG, model.getName());
}).start();

Continue reading →


Twitter Flock Tokyo に参加しました

flock.jpg

Twitter の開発者イベントである Twitter Flock Tokyo に参加しました。イベントがあると知り、申し込んだは良いものの、どれぐらいの規模でどういうイベントになるのか、当日までさっぱり分かりませんでした。

会場に着いてみると EDM が流れ、 Twitter カラーである青で彩られたエントランスとカンファレンススペースがあり、ウェルカムドリンクやお菓子で歓迎をしてくれるという予想外の雰囲気でした。

イベントの内容としては Fabric 全力推しで、

  1. Crashlytics
  2. Beta by Crashlytics
  3. Digits
  4. Answers
  5. MoPub

を 1 つ 1 つ紹介するというもの。とにかく簡単に使え、フリーというのがプッシュされていました。個人的に収穫があったのは Answers について色々と知れたことです。

懇親会の時間に Answers ブースに行って話を聞けたのですが、モバイルアプリのために最適化された Google Analytics みたいなもので、当然 Crashlytics ともキチンと連携していて、リアルタイム性に特化した感じ。

Crashlytics と Beta はどんなものか分かっていましたが、それ以外の Fabric ファミリーを知ることができて良かったです。

ちなみに、 Twitter がどうして Fabric を展開するのか ? という質問を懇親会の時間に Twitter Japan の方に質問したところ、やはりエコシステムを作ることにメリットがある……という旨のお話をされていました。

Crashlytics / Beta / Digits / Answers はアプリの

  1. 安定性
  2. 配布
  3. ログイン
  4. 計測

に寄与しますが、 MoPub は広告プラットフォーム。ここまで到達することで、開発者と Twitter に利益が生まれるのかもしれません (広告関係は詳しくないので、詳細が分からず) 。

Continue reading →


そのスライドにアニメやマンガの 1 コマは必要ですか ?

自分が絶対にやらないようにしていることの 1 つに、少なくとも SlideShare や Speaker Deck に掲載するような資料にはアニメやマンガの 1 コマを使わないというものがあります。

普段から閲覧している “はてなブックマーク” の IT カテゴリーホットエントリーには、何かしらの勉強会で発表された資料が掲載されていることがありますが、その中にはしばしばアニメやマンガの 1 コマを抜き出したものが見受けられます。

※ 具体的な資料 URL を掲載することは控えますが、少し大きめのイベントの講演資料まとめや、 connpass のイベントページの資料情報などから埋め込まれた資料を見れば、見受けられるでしょう。

許諾を得て使っている様子はないですし、大抵の資料には引用情報も無いです。本当にその 1 コマは必要なのでしょうか。

普段フリーソフトウェアや OSS のライセンスを気にして、きちんとアプリやサービスのクレジットに掲載をするようなエンジニアが、資料を作るときには、こうしたことを気にしなくなってしまうのは、悲しいですね。

Continue reading →


live image 15 に行ってきました

tif.jpg

イージーリスニング系の祭典、 live image 15 に行ってきました。今年で live image は 15 周年で、私が以前参加したのは live image 3 / 4 なので、 10 年ぶりの参加です。

会場は東京国際フォーラム ホール A で、この会場でライブに参加するのは昨年の Kalafina LIVE TOUR 2014 以来です。大きな会場で大好きな音楽を堪能できるのは幸せですね。

“地球に乾杯” や “風笛” 、 “パリは燃えているか” などの定番曲の他、 LE VELVETS が歌う Time To Say Goodbye / O Sole Mio はパフォーマンスや音響も相まって素晴らしいものでした。

“情熱大陸” では “葉加瀬太郎 with 小松亮太” のオリジナルメンバーに加えて、 NAOTO / 高嶋ちさ子 がバイオリンに加わり、ピアノを羽毛田丈史が弾くという贅沢仕様。 NAOTO のブリッジ演奏が見られたのは個人的なサプライズでした :)

My Favorite Things がアンコールなのも変わらない良さを感じます。 DVD 化された最初の live image に収録されているアレンジ版とほとんど変わらないまま引き継がれているのも伝統の良さでしょう。

約 10 年ぶりの参加となった live image でしたが、とても楽しめました。本編と関係ないのですが、惜しむらくは、観客の年齢層がグングン高くなっていて、私と同年代をほとんど見かけなかったことでしょうか。

 2015/05/16 セットリスト

 第1部

  1. 地球に乾杯
  2. 臨死体験
  3. ROOKIES 〜愛のテーマ〜
  4. オーシャン・ブルー 〜ORCA〜
  5. 風笛
  6. Time To Say Goodbye
  7. O Sole Mio
  8. 黄昏のワルツ
  9. シネマメドレー 〜風のワルツ・白い巨塔・蜩ノ記〜
  10. パリは燃えているか

 第2部

  1. QED
  2. Tiny Lips
  3. 放課後の音楽室
  4. HIRUKAZE
  5. ニュー・シネマ・パラダイス 愛のテーマ
  6. Tango
  7. 愛しきあなたへ
  8. リベルタンゴ
  9. ひまわり

Continue reading →