2014-07-26

ReactiveCocoa 勉強会に参加した #rac_kansai

2014-07-26 (土)。はてなの京都オフィスを借りて開催された ReactiveCocoa 勉強会に参加した。

内容は Objective-C で Reactive プログラミングを行なうライブラリー ReactiveCocoa の勉強会。

LT で 10 分弱、話しをしたので資料を置く。

ReactiveCocoa では直接 Collection 系 (NSMutableArray とか NSMutableDictionary とか) を Observe できない。RACSubject を使えば大低の場合、代替の機能を提供できる、という話をした。

スライドには簡略化したコードしか書いていない。サンプル・コードは ViewController の他に ViewModel と Model を作って MVVM な作りにしてある。また、口頭でしか伝えなかった KVO と ReactiveCocoa を使った Observe のサンプル・コードも書いてある。興味のある方はどうぞ。

see also.

2014-07-14

find コマンドでファイル名正規表現検索

find コマンドの検索では専ら -name オプションを使う。これだと細かいファイル名指定が出来ない。先日、正規表現が使えると教えてもらったのでメモ。

画像検索を例に...

JEPG, PNG 画像を検索してみる。-name オプションを使う場合はこんな感じ。二回に検索を分ける。

$ find . -name '*.jpg'
$ find . -name '*.png'

正規表現を使う

正規表現を使う場合、検索開始パスの前に -E オプションを付ける。検索には -name の代わりに -regex を使う。拡張子 .jpg と .png なファイルを検索する場合はこんな感じ。

$ find -E . -regex '^.+\(jpg|png)$'

大文字・小文字を無視したい

Windows 系のソフトを使うと、ファイル名が大文字だったりする。アルファベットの大文字・小文字を無視させて検索する場合は -regex ではなく -iregex を使う:

$ find -E . -iregex '^.+\(jpg|png)$'

沢山の画像フォーマットに対応

JPEG の拡張子は .jpg の他に .jpeg も使われる。画像ファイルには GIF もまだ健在。ウェブをやっていると ico ファイルも扱うか? 最近は .svg も使われるようになってきた。全部に対応するよう、正規表現を書いてみる。

$ find -E . -iregex '^.+\(jpe?g|png|gif|ico|svg)$'

ここまでくると、随分、実用的になったかな。

Man は Mac OS X に付いてくるものを参考にした。BSD 系の find みたいね。

2014-06-26

What's New in Android (Google I/O 2014) 殴り書きメモ

Google I/O 2014 のセッション「What's New in Android」が YouTube ライブされていたので見た。司会の二人は止まることなく口を開き、1 時間のセッションを駈け抜けた。大まかな内容は掴めたけど、テキストに直せるほどの情報はメモしきれなかった。きっと後日公開されるスライドを見て欲しい、ということなのだと思う。

詳しいことは、スライドや他の人のブログに譲るとして、速報的にメモの欠片を箇条書きで出してみる。

Meterial APIs

  • ウィジェット
    • View.setElevation()
    • View.setTranslationZ()
  • アニメーション
    • Activity Transitions
    • Animation curves
    • Animated Reveal
  • アイコン
    • State Animations (StateListAnimator, AnimatedStateListDrawable)
    • Touch Feedback Ripples (RippleDrawable)

Render Thread

  • UI Thread: UI 部品を作るスレッド
  • Render Thread (NEW): 表示するスレッド

Supported Lib

  • CardView
  • RecyclerView
  • Palette
  • RoundedBitmapDrawable
  • ViewPropertyAnimator

カメラとオーディオ

  • Camera2 APIs
  • 新しいオーディオのバッファリング
  • Media Session - フレキシブルなプレイバック・コントロール
  • Media Controller

ステータス・バー

  • Theme attr: android:statusBarColor
  • 固定色 (solid color)
  • 透明 (@color/transparent)

マルチ・ネットワーキング

  • SMS
  • 特定のキャリア機能

Android L での通知

Material テーマ

  • 背景: カード型、影付き
  • 前景: dark text
  • アクセント・カラー: 小さな丸アイコンの中の色を設定 (Notification.Builder.setColor())
  • 小さなアイコン・バッチ
  • 開くビュー (Expanded views) とアクション・ボタン
  • 必要ならカスタム・ビューも OK

Media Style

  • アクセント・カラー: 背景色
  • 最大 6 個までのアクション・アイコン
  • 畳み込んだ時は、最大 2 個まで
  • カスタム・プログレスバー
  • 新しい Media Session API 対応

Hands-up 通知

以下の要件に使われる:

  • 高い優先度
  • 人を誘う
  • 音を出す
  • full screen intent

ロック画面

3 種の通知: 状態によって表示する通知情報が変わる

  • visibility_private
  • visibility_public
  • visibility_secret

通知のスマートなソート

  • カテゴリー: 電話・メッセージ・アラーム・ソーシャル
  • 古いものより、良いものを

Android Studio

ほとんどの情報が黒塗りで公開されず。笑いを誘う。

その他

  • Enterprise
  • ART (Dalvik を置き換える)
  • Android Wear (スマホ・アプリへの通知は自動的に wear にも)
  • Android TV (対応!)

Android Wear 〜 身に付けられる Android

Google I/O 2014 のキーノートで Android Wear SDK が発表された。Wearable、いわゆる「身に付けられる」ガジェットに対して Android アプリを作成できるようになる (もちろん、そのガジェットは Android ベースでないといけない)。

Android Wear として 3 つのスマート・ウォッチが紹介された。

  • LG G Watch (今日から Play Store で発売)
  • Samsong Gear Live (今日から注文受付)
  • Motorola Moto 360 (2014 年夏発売)

(日本での発売は??)

Android Wear SDK

Android Wear SDK を使うと以下の機能を持った「Wear」向けアプリが作れる。

  • カスタム UI
  • センサー制御
  • 音声操作
  • データ転送 (スマホやタブレットへ)

デモ by LG G Watch

Android Wear では「OK Google」からの音声検索、Android 通知の受信なども基本的にサポート。タッチパネル方式で、左右のスワイプでページをめくったり、上下のスワイプで通知を表示するデモが行なわれた。

対応しているアプリとして、Gmail, Twitter, Facbook、万歩計、天気予報などを見ることができた。この他、音声入力からリマインダーを設定したり、Google Keep にノートを取ったりと機能も多彩。

極めつけは Lyft を使って車を呼ぶデモまで見せた。

Android Wear SDK は、今までと一味違ったサービス提供の門戸を開きそう。

Android One 〜 低価格 Android スマートフォン発表

Android One

Google I/O 2014 のキーノートで android one が発表された。$100 を切る低価格スマートフォン。スペックは以下の通り:

  • デュアル SIM
  • SD カード
  • 4.5 インチ・ディスプレイ
  • FM ラジオ

あとがき

Android プロジェクトが初めてお披露目した時、Android スマホは低価格でスペックの低いものになると言われた。iPhone が高級スマートフォンを代表するなら、iPhone が狙えないターゲットに向けて発売されると。主に中国・インド・東南アジアなどの市場を目指すだろうと。

ところが蓋を開けてみれば、各社フルスペックで高価な Android 機がメイン・ストリームになった。Android One は、原点に戻ってターゲットを絞り直したような製品に思える。安価な Android を大勢が持つことで、世界は変わる、と言われたけれど、それは実現するのかしらん。

Android L 〜 Google I/O 2014 Keynote より

2014 年度の Google I/O 基調講演 (Keynote) は、Apple の WWDC と足並みを揃えるかのように開発者向けの発表に重きが置かれた。Android 5.0 Lolipop の発表はなかったし、Nexus シリーズの新作発表もなかった。少しばかりスマート・ウォッチやスマート・テレビといったガジェット類が紹介されたけど、発表の中心は開発者向けの SDK やサービスだった。

今年は発表内容が多い上に、一つの内容がボリュームたっぷりだった。複数回に分けて、ぼくが興味を持った点に絞ってまとめを書く。まずは Android L について。

Android L

新しい Android のスタイル。明言されなかったけど、Android 5.0 Lolipop は「Android L」なのかもしれない。リリースは今年後半を予定。プレビュー版は明日リリース。

Material Design — インターフェースの変更

L は Material Design という新しいデザインを導入する。iOS がバージョン 7 で見た目を変えてきたのと同じくらいインパクトがある。

Material Design はスマートフォン、タブレット、WEB でインターフェースを統一する。Windows の様なフラットデザインと、iOS の様な三次元効果 + アニメーションを融合させた新しいスタイル。例えば Google Now の様なカード式の見た目、更にカードをタップするとそのカードが浮き上がり少し大きくなる様に見えるアニメーションをシンプルな API で提供する。

通知センターも改良される。Google Now タイプのカード式。通知の優先度を変えられたり、通知カードを広げたり、アクション用のボタンを配置することが可能。この他、Hands-up 通知と呼ばれる「重要」な情報のみをユーザー操作に影響を与えないよう表示する機能も付いた。これはフルスクリーン時でも通知されるらしい。

ロック画面にも通知センター機能が追加される。これは、情報の種類 (プライベートか、それとも周りの人に知られても良いものか?) によって表示が変わる。通知センターと同じように全ての情報が表示されるもの。通知が来たことだけを知らせるもの。複数のパターンが用意されている。

ロック画面の解除にも新機能。Android Wear などと Bluetooth 通信することで、認証画面なしでロック解除が可能になるという。今は「時計」くらいしかガジェットが存在しないけど、この先、ロック解除を目的とした「指輪」が作られるかもしれない。

ART

Android のランタイムが従来の Dalvik から ART に変わる。ART 自身は今の Android (KitKat) でも使えるけれど、L 以降は ART がデフォールトになる。

ART に変わることで、アプリの起動時間が短くなったり、実行性能が上がったり、バッテリー消費が抑えられる。

Project Volta

Android が省電力に力を入れる。それが Project Volta。紹介されたのは 3 つの機能。

1 つ目は Battery Historian。バッテリーの利用状況を調べることが出来るツール。これでバッテリー消費の激しいサービスやアプリ、機能を見つけて改善を促すものと思われる。

2 つ目は Job Scheduler API。適切なタイミングでアプリ/サービス(?)を起動・終了させることができる。ずっと起動しっぱなし... ではなく、必要な時だけ「動かす」ことでバッテリー消費を減らすことが出来る。

3 つ目は Battery Saver。省電力モードかな。

その他

この他にも色々発表があったけど、長くなるので箇条書き。

  • 64 bit CPU 対応
  • Android Extension Pack: GPU の強化
  • 仕事用と個人用のデータを分離 (どうやるのかな?)

あとがき

Android L は、Android のスマートフォンやタブレットだけでなく、TV や Wearable にも同じ UI を提供する。機能としても、Android ファミリーの「連続性」を強く意識しているように感じた。で、どこからどこまでが「Android L」なのかが分からない。

ともかく、Android L で Google はスマホ・タブレットの世界からもっと広い「家電」へと腕を伸ばしてゆくことになりそう。普及がどれくらいのペースで進むか楽しみ。

2014-06-03

【WWDC】iOS 8 開発者向け新機能

2014-06-03 の WWDC で Apple は開発者向けの発表を行なった。特に新 SDK はアップル・ストア始まって以来の大きなリリースになるという。新 API の数は 4,000。

TestFlight

TestFlight は開発中アプリのテスト公開用プラットホーム。Burstly 社が開発していたけど、2014 年 2 月に Apple により買収されていた。その TestFlight が Apple の正式サービスとして再開される。価格は無料。

アプリ拡張

他のアプリとの連携が可能になる? やり方はよく分からないけど、一度 iOS のセキュリティ・システムを経由する形で、アプリ間の連携が可能になるっぽい。例えば iOS 標準の「共有」項目に自分のアプリを追加したり、アクションを追加したりできる。

Notification Center に置くウィジェットの開発も、この機能を使う。

サードパーティー・キーボード

システムワイドに使えるサードパーティー・キーボードの開発。

Touch ID

指紋認証をアプリにも組み込めるようになった。アプリのログインなどに利用できる。

HomeKit

家庭のデバイスと連携するための仕組み。ライト・鍵・カメラ・ドア・温度計・プラグ・スイッチ etc. を iOS から操作できるようになる。デバイス側の開発も必要なので家電メーカーの開発を待ちしかないのかな?

Cloud Kit

iOS 用のサーバーを提供・開発に利用する仕組み。Amazon EWS や Google App Engine を使わなくても、サーバー・システムを開発できる。

Metal

OpenGL を置き換える Apple の 3D エンジン。特にゲームでオーバーヘッドへ少なくして 10 倍の速さを叩き出す。

XCode - Swift

Objective-C に代わる新しい開発言語 Swift を発表した。

Swift は Objective-C にないモダンな機能を提供する:

  • Closures
  • Generics
  • Namespaces
  • Type interface
  • Multiple return types

Swift は REPL を採用しインタラクティブな開発が可能となる。コード量の削減も大きい。

これは WWDC で出た Objective-C のサンプル・コード:

if (myDelegate != nil) {
  if ([myDelegate respondsToSelector:@selector(scrollViewDidScroll:)]) {
    [myDelegate scrollViewDidScroll:myScrollView];
  }
}

このコードが Swift だと、こうなる:

myDelegate?.scrollViewDidScroll?(myScrollView)

う〜ん、すごい。サラリと説明されてたけど Autovectorizer (自動ベクトル化) もサポートするらしい。メモリー管理は GC (ガベージ・コレクション) ではなく ARC。ランタイムは Objective-C と同じ。

落ち穂拾い

  • Camera APIs (ホワイトバランス etc.)
  • PhotoKit
  • HealthKit
  • SpriteKit
  • SceneKit

盛り沢山。

【WWDC】iOS 8 新機能

2014-06-03 の WWDC で Apple は iOS 8 を発表した。ベータ版は今日リリース。正式版は今秋リリース。サポート・デバイスは iPhone 4s+, iPod touch 5G, iPad 2+, iPad mini+。

iOS 8 の新機能を列挙する。

Notification Center

iOS 8 の Notification Center は (Yosemite と同じく) Today と Notifications だけになった (iOS 7 では Today, All, Missed の 3 つ)。

Notification Center のバナー型通知では、その場でリアクションを返せるようになった。例えば Message が届いたら、アプリを開かず返事を送れる。カレンダーの招待が来たら、その場で「OK」か「拒否」を選べる。Facebook の通知なら「いいね」も可能。

ロック・スクリーンでも通知にリアクションが返せる。

QuickType

iOS のキーボード入力に予測入力が付いた。コミュニケーションを理解する点がスイート。例えば、メッセージで「映画か食事か」と質問されたら、入力候補には「映画」「食事」が現れる。

Enterprise

企業向け機能の対応。企業向けに iPhone/iPad を提供。最初から設定を終えておける (らしい)。

Health

HealthKit という開発用フレームワークが用意される。これを使って体重計や血圧計を作ると、Health アプリに情報が集約される。病院がアプリを作ることも可能。

Family Sharing

家族とデータを共有する機能。家族の人数は 6 人まで。

まず「家族」を招待する。Family Sharing がオンになると以下のデータを共有できる。

  • iTunes/App Store で購入した音楽・映画・アプリ・本
  • 「家族のフォトストリーム」に入っている写真と動画
  • 自分の居場所
  • クレジット・カード (子供が購入する時にペアレンタル・コントロールが出来る!)
  • その他 (カレンダー、リマインダー、デバイスを見つける)

Photo

写真アプリに検索機能が付いた。時間・アルバム・場所で検索が可能。

また写真アプリに編集機能が付いた。

写真の保存場所は iCloud。ストレージ・サイズの価格帯は下記の通り

  • 5 GB: 無料
  • 20 GB: $0.99/月
  • 200 GB: $3.99/月

(※2014-06-03 現在、5 GB・無料、10 GB・2,000円/年、20 GB・4,000円/年、50 GB・1 万円/年)

【WWDC】OS X 10.10 Yosemite

2014-06-03 の WWDC で Apple は OS X 10.10 Yosemite を発表した。発音は「ヨセミティー」と聞こえた。開発者プレビューは今日リリース。正式リリースは秋を予定。価格は 0 円。

Yosemite は iOS 7 が採用した新デザインを踏襲する。アプリ・アイコンは刷新 (大きな変更のものから小さな変更のものまで)。ウィンドウのタイトル・バーは半透明になる。以下、新機能を列挙する。

Notification Center

iOS ライクな通知画面が加わった。カレンダー、リマインダー、天気、株価、ウィジェットが配置される。2 つのセグメントに分けられていて、一つは「Today」、もう一つは「Notification」。前者は、Android の Google Now に似ている様に見える。

Spotlight

スポットライトは画面の真ん中に現れる。検索キーワードが入力されると、インクリメンタルに検索結果が表示される (画面の真ん中に検索結果が現れるので見やすい)。スポットライトの検索対象は、アプリ・ドキュメント、連絡先・カレンダー・メール・メッセージ・辞書・システム設定に加えて、Wikipedia・地図・ニュース・Bing・App Store・iTunes Store・iBooks Store・ウェブサイト・Movie showtimes。

検索結果を選択すると、プレビューが見られるようになった。地図検索には Yelp のレビューなども載る。

iCloud Drive

iCloud Drive は Finder アプリからアクセス可能になった。iCloud 内のファイルは全てのデバイス (iPhone/iPad 含む) で自動的に同期され、検索可能で、タグ付けが可能。

Mail Drop

メールに添付したファイルは最大 5 GB まで Apple のサーバーに送られる。メール本文にファイルは添付されない。受信者は Apple のサーバーから添付ファイルを受け取る。この仕組みを Mail Drops と呼ぶ。

メールが軽くなるのが利点。

AirDrop

AirDrop が iOS・OS X でのデータ転送に対応した。今までは iOS 同士でしかファイルを送れなかったものが、iOS から Mac にデータを送れるようになる。気に入った写真をケーブルで繋いで Mac に入れる必要はなくなった。AirDrop で写真を転送できる。

Handoff

Mac で開いているものを iOS で開いたり、iOS で編集しているものを Mac で編集の続きができたりと Mac と iOS の垣根を無くす。デモではウェブ・ブラウザーの閲覧とメールでの編集をやっていた。

電話のサポート

iPhone にかかってきた電話を Mac で受けることができる (発信も可能)。Mac で作業中に電話がかかってきても、気がつかなかったということがなくなる。

2014-05-25

シリコンバレー訪問 第 6 日目

今日は帰るだけなので、張りつめていたものが切れたよう。朝食は四日目にお世話になった Panera Bread (結局、朝ごはんは Paris Baguette か Panera Bread の二択で終わってしまった)。オーダーは白い玉子とアボガドとほうれん草の朝食パワー・サンドイッチ (Egg White, Avocado & Spinach Breakfast Power Sandwich)。

食後は一路空港へ。ホテルからサンフランシスコ国際空港へ向かうシャトルバスを待つこと 15 分。来ない! 確認してもらったら、忘れていたとのこと。この大らかさがアメリカ! 更に待つこと 15 分。シャトルバスがやって来た。

アメリカはクレジットカード社会。朝食から夕食、カフェにタクシー (というか Uber) まで全てクレジット・カード決済。現金を使ったのは、ホテルのベッド・メイキング用チップと路上駐車場くらいしかなかったと記憶している。なので、シャトルバスが「No card. Cash, cash!」と言った時には慌ててしまった。

搭乗時間には余裕を持っていたので、免税店を回ったり、Il Fornaio Caffe Del Mondo でカフェ・オレを注文したりして優雅な一時を過ごす。

Untitled

サンフランシスコから仁川へ

サンフランシスコ時間で 14:30 頃離陸。まずはお菓子が一袋。

チキンの晩ごはん。

パスタの朝ごはん (?)

仁川に 19:15 頃着陸。

そして今、仁川国際空港の無料 Wi-Fi を使ってブログ記事をポストしている。20 時半頃に羽田行きに搭乗して、日本時間 23:05 に到着予定。帰る電車がないので... さて、どうしようかな。

雨降る仁川を横目で見ながら考える。