Mac(homebrew)でGoのインストールと、Emacsの環境構築
Goの勉強のためまずHello worldとEmacsの環境を構築をしたので、その記録。
この記事のゴール
- homebrewでGoのインストール
- godocによるドキュメントの表示
- Hello worldを表示する
- Emacsの環境構築
- go-autocompleteで保管
- M-x godocでドキュメント表示
- goflaymakeで構文チェックなど
- godefで定義ジャンプ
goをhomebrewでインストールする
$ brew install go
インストールされているか確認
$ go version go version go1.2 darwin/amd64
Hello worldを書いてみる
適当な場所で以下のファイル(hello.go)を作成
package main import "fmt" func main() { fmt.Println("Hello World!") }
ビルドして実行
$ go build hello.go $ ./hello Hello World!
godocをインストールしてドキュメントを表示する
godocを使うとコマンドのドキュメントを表示できるようになる。以下のように使う。
$ godoc fmt Println PACKAGE DOCUMENTATION package fmt import "fmt" FUNCTIONS func Println(a ...interface{}) (n int, err error) Println formats using the default formats for its operands and writes to standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered.
godocをインストールするにはgo getを使うようなんだけど、環境変数$GOPATHを設定していないとだめらしい。.zshrcなどに以下のように設定する。
# for go lang if [ -x "`which go`" ]; then export GOROOT=`go env GOROOT` export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin fi
GOROOT/binをPATH環境変数に追加しているのは、godocのコマンドのインストール先がここになるから。(通常は、GOPATH/binにインストールされるらしい)
Go 1.2 (devel) doesn't install godoc into bin · Issue #23281 · Homebrew/legacy-homebrew · GitHub
以下のコマンドでgodocをインストール。
$ go get code.google.com/p/go.tools/cmd/godoc
ちなみに、$GOPATHを設定してないと以下の様なエラーとなる。
$ go get code.google.com/p/go.tools/cmd/godoc package code.google.com/p/go.tools/cmd/godoc: cannot download, $GOPATH not set. For more details see: go help gopath
Emacsの環境設定
次の記事を参考に必要なものをインストールした。
go側の必要なパッケージをインストールしておく。
$ go get code.google.com/p/go.tools/cmd/godoc $ go get code.google.com/p/rog-go/exp/cmd/godef $ go get github.com/nsf/gocode $ go get -u github.com/dougm/goflymake
list-packagesで以下をインストールしておく
- go-mode
- go-autocomplete
- auto-complete-mode(インストール済みだったので、ここでは特に説明しない)
- flyamke(インストール済みだったので、ここでは特に説明しない)
init.elに以下を追加。
;; PATHの設定をシェルの設定から持ってくる ;; $SHELLで設定されているシェルの設定が使われる (when (memq window-system '(mac ns)) (exec-path-from-shell-initialize)) ;; ============================================== ;; goの設定 ;; ============================================== (when (and (require 'go-mode nil t) (executable-find "go")) ;; GOROOT, GOPATH環境変数を読み込む (let ((envs '("GOROOT" "GOPATH"))) (exec-path-from-shell-copy-envs envs)) ;; go-autocompleteの読み込み (eval-after-load "go-mode" '(progn (require 'go-autocomplete))) ;; goflaymakeの読み込み (add-to-list 'load-path (concat (getenv "GOPATH") "/src/github.com/dougm/goflymake")) (require 'go-flymake) ;; go-eldocの設定 ;; https://github.com/syohex/emacs-go-eldoc (add-hook 'go-mode-hook 'go-eldoc-setup) (set-face-attribute 'eldoc-highlight-function-argument nil :underline t :foreground "green" :weight 'bold) )
今回、exec-path-from-shellを使って.zshrcで設定したPATHや環境変数(GOROOT, GOPATH)を読み込むようにしている。
- EmacsでPATHの設定が引き継がれない問題をエレガントに解決する - Qiita
- Emacsでの環境変数の設定に exec-path-from-shellを使うようにした - syohex’s diary
ちなみに、exec-path-from-shellは$SHELL環境変数に設定されているシェルの環境変数をひっぱってくるらしい。デフォルトのシェルを変更するには以下のようにする(ここでは、bashからzshに変更)
$ echo $SHELL /bin/bash $ chsh -s /bin/zsh # ここで再起動 # 再起動後以下のように表示されていればOK $ echo $SHELL /bin/zsh
そして、Emacsを起動して、hello.goを開いてみる。fmt.Pまで入力すると以下のように保管される。
godocも使える。
goflymake(https://github.com/dougm/goflymake)でエラーチェックなど
定義へジャンプする。
Printlnへカーソルを持ってきて「C-c C-j」でPrintlnのソースコードへジャンプする。
とりあえず今日は環境設定で終わり。次は、何かプログラムを作ってみようかな。
追記(2014/01/14)
go-eldocを追加(init.elの設定は前述の設定に追加)
@syohex さんに教えてもらったgo-eldoc(GitHub - syohex/emacs-go-eldoc: eldoc for go language)を追加。以下のようにミニバッファにメソッドの引数がでてくる。(・∀・)イイ
ポータブルでワイヤレスなスピーカー BOSE SoundLink Mini Bluetooth speaker を買った
スピーカーを全く知らない人間が、BOSEのスピーカーを買ってみた感想です。
これは、感動するほどすごい。
これまで、スピーカーといえばiPhoneのスピーカーとテレビのスピーカー、5,000円くらいで買ったSONYのスピーカー、そして、PS3用のSONYのスピーカーくらいしか家にはなかったので、ずっとミニコンポ位はほしいなと思ってたんですね。しかし、置く場所もないしそんなにお金かけるほど(自分は)音楽もきかないしってことで、結局現状のまま何年も過ごしていた状態でした。
そして、なんとなく家電屋でこのBOSEのデモ機を見た時に、これだと思ったわけです。買ってみようかなと思った理由は主に以下の4つのポイントでした。
1. 小さいのに音がいい、重低音がっ
結構小さいのに、周りの音に負けない音がでてて、これから音がでてるのかって思うほどのインパクトがありました。
2. ワイヤレス(Bluetooth)で聴ける
うちの場合、だいたい音楽はiPhoneの中に入っていてそこから、SONYのスピーカーにつないで聴くか、Apple TVにAir Playで飛ばしてテレビのスピーカーで聴くかだったので、Bluetoothで飛ばして聴けるというのは魅力的でした。
3. ポータブル(持ち運び)できる
バッテリー内蔵なため、電源アダプタをはずして持ち運びできます。そんなにメリットかと思うかもしれないですが、私は、iPhoneで音楽かけながら洗濯物干したり、出かける準備をしたりしていたので簡単に持ち運べるのは結構魅力的でした。充電も付属のクレードルに載せるだけなので、ちょっと寝室に移動させて音楽聴くってときにも煩わしことがありません。ただ、クレードルに載せて充電モードにさせるのにコツがいる感じです。
安い(22,890円)
BOSEといえば、ヘッドフォンでも?2万5千円以上だった気がするのですが、こいつはそれよりもう一声安いです。結局、この音で、この大きさで、さらにポータブルでこの値段か?!ってことになったわけです。
まぁ、値段に関しては人によるってところもあるので、なんともアレですが。ちなみに、家のスピーカーたちの値段は以下の様な感じなので、順当なステップアップな感じです。
テレビ(REGZA 42Z3)のスピーカー
これもとりあえず、音が出ます程度・・。
SONY SRS-M50 (5,259円)
これは値段の割にいい音がでると友達に教えてもらい購入したものです。
PlayStation3用 サラウンドサウンドシステム (22,780円)
あれ、これって昔買った時は1万6千円くらいだったのですが、今は、今回購入したBOSEのスピーカーと同じ位の値段になってますね・・。安い時に買ったんですねきっと。
これを買ったきっかけは、テレビ(REGZA 42Z3)の音がめちゃしょぼいということで、急遽買ったものです。映像の綺麗さ、ゲームに強いと謳われていたりしてかったんですが、音にはまったく力を入れてなさそうでした。
実物の写真たち
同梱物。本体と充電クレードルと電源アダプターの3点。
手のひらに乗せてみた。なんとか、乗ります。ちょっと重いのでぷるぷるします。
充電クレードルと本体。このクレードルに載せるだけで充電できます。ちょっと乗せるのにコツがいるけど・・。
クレードルに載せてみた。充電が開始されると音がなります。ぴぽっ
クレードルを使わずに直接接続することも。
電源ボタンとか。左から、電源ボタン、ミュートボタン、音量下げるボタン、音量上げるボタン、Bluetoothで音を出すボタン、AUX接続で音を出すボタン。いま、どのくらいの音量かわからないのが残念。
Bluetoothで接続する
iPhone、Macbook ProからBluetoothで接続する方法を説明します。
iPhoneから再生する
ここでは、iPhoneから音楽を流してみます。
まず、電源を入れてBluetoothのボタンを押します。すると下の写真のようにランプが青く光り点滅します。
次に、iPhoneの「設定」>「Bluetooth」を開き、BluetoothをONにします。すると、以下のように「Bose Min... 接続されていません」と出てきます。
「Bose Min...」をタップしてしばらくすると、「接続されました」となります。
すると、Soundlink miniの方では点滅していた青いランプが、白の点灯状態となり、ぴぽっと音がでます。これで接続完了です。あとは、iPhoneのiTunesやその他アプリ(radikoやTuneIn Radioなど)から再生すればSoundlink miniから素晴らしい音がでてきます。
Macから再生する
基本的な流れはiPhoneの時と同じです。
Soundlink miniのBluetoothボタンを押し、青く点滅することを確認したら、Macの「システム環境設定」>「Bluetooth」を選択し、以下のように「ペアリング」を行います。これだけです。
ちなみに、一台の機器で接続するだけならこれらの操作は一度するだけで基本的には次回接続時には自動で接続されます(Soundlink miniの電源がOFFの時はONにする必要はあります)が、複数の機器を使って切り替えたりする場合(上記のように、iPhoneで接続したりMacで接続したり)は、切り替えるたびに上記の接続(ペアリング)設定をし直す必要があります。まとめると以下の様な感じですかね。
- 1台の時
- ペアリング設定は1度だけ
- 2台以上の時
- 接続する機器を変更したいときに接続(ペアリング)設定をし直す
- Soundlink miniの電源がOFFになっている時
- 電源を入れる(自動で電源は入りません)
AUXケーブルで接続する
AUXなにこれと思ったんだけど、いろいろ調べたら、テレビともつなげるということが分かりました。
うちのREGZA 42Z3の場合「ヘッドフォン」と書かれているジャックからステレオミニプラグケーブルと、Soundlink miniを接続します。
これまでのスピーカーとの違い
私のiPhoneの中にはちょっぴりしか音楽が入っていないですが、とりあえずYUIさんを流してみました。
BOSEのスピーカーは重低音すごいですって聞きますけど、確かにすごいです、この大きさでズンズンきます。iPhoneとかでテレビで音楽聴いてても、ベースっているの?って思ってたりしましたが、ベースいるんですっていうのが、分かりましたスミマセン。今まで、音楽の半分も聞いていなかったんじゃないかと思えてきます。それほど、今までの環境と次元が違います。
低音もさることながら、YUIさんの声もめちゃクリアに聞こえます。今まで聞こえてなかった音が聞こえてくる感じです。目の前で、弾き語りしているかのように聞こえます。言い過ぎですかね。いや、これまでの環境とそれほどの差があるということです。
テレビにつないで映画を見たら
年末に買ったパシフィック・リムを見てみました。ずーんずーんずごごーんって感じです。PlayStation3用 サラウンドサウンドシステムのダイナミックモードで聴くより迫力があります。
売り上げランキング: 13
このスピーカーでこんなに迫力でるってことは、ホームシアターとか買っちゃったらどうなるんでしょう。マンションのスペック上げないとダメかもしれません(音漏れしそうで)
ジャズを流すとおされなバーにいる気分になる
おしゃれなバーでジャズを聴いたハッキリとした記憶はないですが。印象です。小洒落たバーやカフェのちょっと気の利いたスピーカーから流れているようなアレです。
私はジャズも聴かないですが、このスピーカーを通して聴くジャズは面白いです。やっぱりベースがしっかり聞こえてくるし、いろんな楽器の音がよく聴こえてくるからだと思います。これはジャズに限った話しじゃないと思いますが。いろんな音楽を聴く楽しみがでてきた感じがします。
まとめ
最初に書いたとおりスピーカーの知識がまったくない人間の感想なので、参考になるかはわかりませんが、同じような環境にいた人にはおすすめしたくなる製品です。
いい音で音楽を聴く、ただそれだけで、今までの生活ががらっと変わったような気さえしてきます。(その前に、いままでの環境が悪すぎたせいなのかもしれないですが・・)音響機器に投資する人の気持がちょっとわかった気もします。
MacBook Pro Mid 2010のHDDをSSDに換装したら快適になった
3年くらい前にかったMacBook Proがだいぶもっさりしてきたので、思い切ってHDDをSSDに交換することにしました。
MacBook Proのスペックはこんなの
- MacBook Pro 13-inch, Mid 2010
- プロセッサ:2.66 GHz Intel Core 2 Duo
- メモリ:4 GB 1067 MHz DDR3
- グラフィックス: NVIDIA GeForce 320M 256 MB
- HDD:SATA 5400RPM 320GB
購入したSSDはSamsung SSD840EVO 250GB
交換した結果色々さくさく動くようになりました(・∀・)特に、今までネットをするだけでもひっかかりがあるようでストレスありまくりだったのが、全くなくなった。それとiTerm2を起動するのに時間がかかってたのが、すぐに起動するようになったとか。会社で使っているMacBook Airとそんなに変わらない使い心地になった気がします。いや、よかった。
交換前と交換後の比較
Xbench(http://xbench.com/)というソフトを使ったベンチマーク結果。
交換前(SATA 5400RPM 320GBの場合)
スコア | 詳細 | |
---|---|---|
Sequential | 71.56 | |
Uncached Write | 89.80 | 55.14 MB/sec [4K blocks] |
Uncached Write | 55.41 | 31.35 MB/sec [256K blocks] |
Uncached Read | 62.55 | 18.31 MB/sec [4K blocks] |
Uncached Read | 93.21 | 46.85 MB/sec [256K blocks] |
Random | 33.06 | |
Uncached Write | 12.45 | 1.32 MB/sec [4K blocks] |
Uncached Write | 66.51 | 21.29 MB/sec [256K blocks] |
Uncached Read | 64.64 | 0.46 MB/sec [4K blocks] |
Uncached Read | 98.29 | 18.24 MB/sec [256K blocks] |
交換後(SSD840EVO 250GBの場合)
スコア | 詳細 | |
---|---|---|
Sequential | 208.08 | |
Uncached Write | 365.03 | 224.12 MB/sec [4K blocks] |
Uncached Write | 306.19 | 173.24 MB/sec [256K blocks] |
Uncached Read | 92.52 | 27.08 MB/sec [4K blocks] |
Uncached Read | 414.99 | 208.57 MB/sec [256K blocks] |
Random | 1010.15 | |
Uncached Write | 1401.52 | 148.37 MB/sec [4K blocks] |
Uncached Write | 519.96 | 166.46 MB/sec [256K blocks] |
Uncached Read | 2537.13 | 17.98 MB/sec [4K blocks] |
Uncached Read | 1076.51 | 199.75 MB/sec [256K blocks] |
何かの間違いかと思うくらいパフォーマンスが向上してます。
色々起動時間など
内容 | 交換前 | 交換後 |
---|---|---|
起動時間 | 66秒 | 20秒 |
Chrome起動時間 | 7秒 | 1秒 |
Xcode起動時間 | 20秒 | 11秒 |
Xcodeからエミュレータ起動 | 38秒 | 16秒 |
iTunes起動時間 | 9秒 | 2秒 |
劇的に早くなってるビビった。
いるもの
HDDの内容をそのままSSDにコピーするために、MacとSSDを接続するためのケーブルが必要なので、これを使った↓
そしたら、これに入っているはずのSATA電源変換用ケーブルがなくなっていたので変換ケーブルも購入。
あとは、HDDについているネジを外すための特殊なドライバー。これがなくて、ペンチで無理やり外したりするはめに・・。
売り上げランキング: 2,748
換装の詳しい手順
以下の記事が参考になりました。
MacBook Proの内蔵HDDをSSDに交換する(前編) (1) システムのボトルネックを解消してMountain Lionに備える | マイナビニュース
MacBook Proの内蔵HDDをSSDに交換する(後編) - 起動時間は半分以下! ディスク性能は最大で約100倍超!! (1) システムの復元か、再インストールか | マイナビニュース
ハマったところ
換装後は「システム環境設定」>「起動ディスク」からディスクを選んでおかないと、起動に時間がかかるっぽいです。しばらく気付かなかったけど、これで、起動時間がめちゃ早くなりました・・。
Macの起動、リンゴマークが出るまでが遅い時は、システム環境設定から起動ディスクを設定してあるか確認を。~兄妹の気まずい絵日記 / もっと知りたいリンゴあれこれ
320GBのディスクから250GBのディスクにコピーしようとすると「容量が足りない」みたいなエラーになったので、320GBのディスクのパーティションを一回200GBくらいにしてからじゃないとコピーできませんでした。パーティションサイズの変更は以下のサイトが参考になりました。
【Mac】後からハードディスクのパーティションを変更(追加・削除)しました ~OS X Lionの大部屋作り~ / もっと知りたいリンゴあれこれ
第1回 Build Insider OFFLINE に行ってきた
6月8日は「<htmlday> 2013」ということで日本各地でWeb関連のイベントが行われたそうですよ。
ということで私はその中のひとつ「 第1回 Build Insider OFFLINE」に参加して来ました。(途中から参加なのでキーノートとランチは出来なかったけど・・。)
よりよい開発を目指すためのプロセス・ツール活用
まず最初に聞いたのがこのセッション。中村薫さんによる開発プロセスに関する自身の事例や、利用しているマイクロソフトのTFSというソフトウェアを通して感じたことを聞かせてもらいました。
Team Foundation Server - Wikipedia
TFS(Team foundation Server)しっている人と言われて、会場の8割くらい?が手をあげていたので、アウェイ感半端無かった。マイクロソフト関連のアプリケーション開発ってぜんぜんやったことないので、初耳でしたよ・・・。
TFSがどういうものかというと、私の理解によるとRedmineとJenkinsとGitが一つになったようなやつです。また、ローカルな環境にインストールして使えるTeam foundation Serverと、クラウドサービスとして展開しているTeam foundation Service(どっちもTFSなので分かりにくい)があるようで、中村さんはほとんど、TFService(クラウドの方)を使っているということでしたね。クラウドの利点である離れた場所にいる人と開発を行うってところで威力を発揮しているみたいでした。
印象に残ったのは、TFServiceは3週間毎にリリースを行なっているということ。マイクロソフトみたいな巨大な企業でさえアジャイルなプロセスが実践できているんだから、会社の規模が大きからできないよねって言い訳は出来ないよねって。なるほどねーと思いました。
Backbonejs
次に聞いたのMVCフレームワークのBackbornejsです。LINEの清水大輔さんによるセッションでした。
- 資料はこちら
BackboneとはMV*(MVCとかMVVMとかのこと)アプリを作るためのフレームワークというかライブラリって感じらしい。フルスタックなAngularJSと違って、もっと軽量で自由度が高いそう。
また、MVCフレームワークの人気度調査では1位になっているらしい(http://caliper.io/blog/2013/Javascript-Framework-Popularity/)でもGoogleトレンドでみたらAngularJSに負けてたってことでしょんぼり。
Backbonejsは他のJSライブラリと組み合わせて使うことが一般的で、jQuery, zepto(LINEではこれをよく使っているらしい)、Ender、underscore.js, json2.jsなどをよく使っているみたい。
Backbonejsを使うと、DOMからビジネスロジックが分離されることになるのでテストが書きやすくなるらしい。jQueryだけで作っているJavaScriptのテストってすごいやりにくかったりするので、これはいいね。
AngularJS
次は金井健一さんによるAngularJSについてのセッション。
AngularJSの得意なこととして
苦手なこととして
- モバイル向けアプリケーション(ファイルサイズが大きい。フルスタックなので。通信コストとか)
- ゲームなどのグラフィックの扱い(でもhttp://bombermine.com/のゲームのフレームとかステータス表示とかで使っているみたい)
モバイルは苦手みたいですが、最近タッチイベントとかスワイプイベントとか取れるようになってモバイル対応も始まっているようです。金井さんの希望としては、モバイルでは機能を少なくして、ライブラリのサイズを小さくして貰えたら、ということでした。ただ、サイズが大きくてもダウンロード型のアプリでライブラリを含めるのはありかな、ということです。
Knockout.jsとは
次は、沢渡真雪さんのKnockout.jsというライブラリのおはなし。
特徴としては
Observable
Observableとは値を監視可能な形にラップする仕組みだそうで。
- ko.observable
- ko.observableArray
- ko.computed
の3つがあり、次のように使うみたい。(因みに以下は動かして見てないので、雰囲気だけ感じてください)
var value = 1; // valueが変更されたことを知るのは難しいので・・ // まず、こうしてvalueを監視可能なオブジェクトにラップします。 var value = ko.observable(1); var value2 = value(); // value()というGetterができてる value(1.048596); // 値をセットする(Setterができている) // 次に、通知を受け取れるようにsubscribeでリスナーを登録します value.subscribe(function(newvalue) { alert(newValue); }); // この状態で、valueに値をセットすると value(30); // 変更されたことを受け取って、上で登録した関数が実行されます(30という値がalertで表示される) // つぎに、ko.computedでobservable同様の監視可能なオブジェクトを作る。 var value3 = ko.computed(function() { return value() + value2(); }); // computedなやつもsubscribe可能なので、次のようにできる value3.subscribe(function(newValue) { alert(newValue); }); // ということで、依存関係を自動で追跡して更新・通知してくれる!
あと、DOMとのバインディングの機能もありますということで、これはサンプルをメモれなかったので、後で自分で試してみようかと・・。
リアルタイムWeb最前線〜Socket.IO & SignalR徹底解説
最後に聞いたのが、芝村達郎さん(26歳)のWebSocketのライブラリであるSocket.IOとSignalRのセッション。
Windowsの人はSignalR使って、それ以外のMacとかLinuxとかの人はSocket.IO使えばいいじゃん、ということでした。
- 資料はこちら
Socket.IOの特徴としては
- Node.jsで動作する
- シングルスレッドモデル
- 対応してるトランスポートが多い
- クライントライブラリが多い
SignalRの特徴としては
- ASP.NET上で動作する
- マルチスレッドモデル
- SignalRの方がパフォーマンスはでる
- Socket.IOは複数のサーバを用意してコア数分動かす必要がある
- Taskベースの非同期処理ができて開発しやすくなった
- RPC感覚で処理をかける
- 対応トランスポート
- Websocket(WS2012+.NET4.5の場合だけ動く)
- Server-Sent Events
- Forever Frame
- Long Polling
- クライアント
- Javascript(jQuery依存)のライブラリ
- .NET framework 4/4.5
- Windows Storeアプリ
- Windows Phone 8
- Xamarin.iOS/Wamarin.Android
- 将来的にC++/ .NET Micro Framework
スケールアウトが非常に難しいらしいです。単純にサーバを増やしただけではスケールしなくて、誰がどのサーバにつながっているかを管理する必要があるということでした。そこで、メッセージングサーバを使って、誰がどこにつながっているかを管理するんですが、それにはRedisやAzureサービスバスとかを使うのだそうです。これはSocket.IOとSignalRとで異なった対応方法が必要になり、以下の様な感じになるみたいです。
Socket.IO
- 接続情報をメモリではなく外部ストレージに保存して共有(Redisを使えば)
- 接続情報はメモリに持っている。どのクライアントがどのサーバにつないでいるかを持っている。
- ・RedisStore
- ・SbStore(※接続情報の共有はできない)
SignalR
- そもそも接続情報もってない
- 情報共有はせず、メッセージングに投げっぱなし
- ・ SignalR.Redis
- ・ SignalR.ServiceBus
開発のヒントとして
- 通信頻度を下げてリソースの消費を抑える
- 1000台のクライアントが同時接続しているとき、1クライアントが1つメッセージを送ったら1000クライアント分データを送らないといけないなど。
- underscore.jsのthrottle/debounceを使って通信量を抑えるとか
- ビューの更新にデータバインディング可能なライブラリを利用する
- AngularJSとかKnockout.jsとか使う
開発をして思ったこと
Google I/O報告会に行ってきた(メモ)
5月24日に行われたGoogle I/O報告会に行ってきました。久しぶりの大きな勉強会&長丁場なので最後までいられるか心配してたんだけど、なかなか濃い内容だったので5時間あっという間だった。
発表者の方が言ってたように今回のGoogle I/Oでは特に大きな発表はなく(Google App Engine発表、というようなインパクトのあるものはなかったという程度に)、これまでの技術をより安定&洗練するためのテクニカルなところの成果発表といった感じでした。とはいえ、Googleの技術を使って開発等してる方にはなかなか充実したものだったんじゃないかと思います。(最近全然Google関連の技術に触れてないんだけど・・。)
印象に残ったのはサンフランシスコではGoogle Glassやその他サービスを作った技術者の人と話が出来たり、コードの不具合を見てもらったり出来たらしいってこと。なかなかそういう機会ってないと思うので羨ましいっすねー。来年こそはと思ったけど今日受けたTOEICの出来栄えがなかなかアレな感じなのでいつになることやらー。
技術的な所では、AndroidのVollayライブラリというやつで、ネットワークに接続して画像取ってきたりするのが便利になるらしい。(キャッシュとか、HttpClientどれつかうとかで悩まなくなるらしい)あとは、Google App Engineで使ってたDatastoreサービスが、外から(App Engine以外から)HTTP、JSONで使えるようになるらしい。これは、結構いいかも。EC2でフロントつくって裏はDatastoreとか。
ということで、今回のGoogle I/O報告会の資料などのリンクをメモっときます。
- DevFest Japan 2013 Google I/O 報告会のページ
- Androidの資料
- Chrome / HTML5の資料
- Google Cloud Platformの資料
- Geo and other topicsの資料
以下は自分用メモです。誤字脱字、勘違い、理解不足のため途中で諦めたような記述等多々ありますのでお気をつけください・・。
Androidセッション
Development Tool
Android Studioが発表された
IntelliJ IDAベースになった
Gradle OSSのビルドシステム
環境に応じてパッケージ名を切り替えたりできる?
Google Play
PlayやAndroid Studioからリソースを翻訳してくれるサービス
α版ベータ版の段階的リリース
ユーザ数を増やすセッションとかもあった
Google Play Services
Google Wallet
物理的なものも販売できるようになる
Location API
位置情報の取得などを頑張ってやってたことをPlay Serviceがやってくれたりする
Application Design
Structure in Android App
エレベータピッチ、フィーチャーリストの間のユースケース
UI/UX
4.2からDaydrem
ドックアプリの汎用的なもの
視覚障害者に対してどのように配慮すべきか
その他
Google TV
韓国では使われている、ビッグマーケット
Performance
1秒遅くなると
PV9.4%へる
直帰ユーザ8.3%増える
コンバージョン3.5%減る
とか
0−100ms 速い
100−300msのろま
300−1000ms
1s+メンタルコンテキストスイッチ
モバイルネットワーク
HSPA(3G)
全部おわるまでに600ms
LTEでは240ms−500ms
HTTPSだと +200ms
リダイレクトは絶対止めましょう
3Gだと600ms−3500msかかるので
バッテリー
通信の次に電池を消費する
LTEモジュールの状態遷移
通信モジュールが待っている時間が無駄
データ量に依存せずに必ず発生する
ビーコンはかなり危険(Pandraの例
測定ツールもある
BestPractice
データをプリフェッチ(大量に)
通信をOFFにする
ポーリングを避ける、プッシュする
データは一気に取ってくる、通信回数を減らす
Vollayネット接続ライブラリ
Easy Fast Network
JSON, image, text memory disk cache、デバッグ、トレース
順番が変えられない、キャッシュされない
次互換性、Apacheのライブらい(HTTCぃねt)とかの問題
これらを解決
グラフィックの最適化
フレームワークが頑張ってる
無駄な描画をしない
背景色はThemeで定義
9Patchでかぶさる部分を透明にする
他にも色々なチェックツール
クラウド関連
PlayGame Services & GCM
AppleでいうところのGame Center
初日はゲームに関するセッションが多かった
売りげベースでゲームが多かった
Cloud Save(端末を変えても続きからプレイできるとか)
Achievements(実績)
トロフィー的な
Leaderboard(ランキング)
サークル内の限定的なものとか
Multiplay
Androidだけでなく、WebやiOSでも利用可能
iOS用ライブラリや解説もある
Google+のIDでサインイン
iOS版ではライブラリのアップデート毎にリリースする感じになる
Android版ではPlaystoreでやってくれる?
Cloud Save
細かいことはできない
Multiplay
Google Serviceを介して
つながったらP2Pで
注意
小さいデータ。JSONとかよりもPBとかを使う
メッセージの暗号化
GCM XMPP
自サーバとGCMでつないだ状態になるので速い
メッセージIDなどを埋め込まないとどれがどれだかわからなくなる
XMPPの場合はマルチキャストメッセージが使えないので、その場合はHTTPSで
アプリ側から、GCMへメッセージを送信出来る
Play Serviceに統合された(下位互換性を保持)
質疑応答
Q. カードレイアウトについて
今こういうUIがいいよっていうのは、ありますか?
A. あんまりセッション見てないのでわかりませんでした
ストラクチャーアンドロイドアプリデザインのところとか
Q. Android OSやAndroid端末
A. Gallaxyがでた。Nexusと同じ位置づけ
Q. Androidの新しいバージョンの発表がなかった。
今後のAndroidのロードマップやこれを強くしていこうとしているのは、なんだと思う?
A。次に進むために周りを固めている印象。
Q. Cloud Save ゲーム以外でも使える?
A. ゲーム以外でも使えます
Q。Android Studioの本格的に利用できるのはいつころ?
A. 時期は不明。EclipseとStudioどっちつかえばいいの?
Eclipseのほうが機能がおおいので、人によってはStudioだけではだめかも
Q. Valayについて質問。動的な部分のキャッシングできおつけること。キャッシュがたまったらどう制御する?
A. キャッシュクリア出来る。キャッシュサイズも調整できる。
Q. LocationAPI。ヒューズどロケーションプロバイダが追加になったけど、今後は?
A. 今後はひゅーずどの方を使いなさいということ。2.2以降のデバイスであれば、ひゅーずどに以降してくださいということ。
Chrome HTMLとか
WebM Google製のオープンなビデオフォーマット
VP9を開発中
H.264より画質が良くてサイズが小さい
もうChromeで使える。(βで)、8/20以降、ステーブル版にくる
YoutubeですでにVP9ビデオが公開中
Web Components In Action
UIコンポーネントの基盤をWebに
カスタム要素をりようできるようになる
Ploymerフレームワーク・ライブラリ
Web Componentsをさらに便利に。
Web Componentsに対応していないブラウザでもJSで保管して使えるように
Web RTC
ブラウザかんでP2P
Chrome限定でスクリーンキャプチャをとれる
webp
モバイルからのアクセスが増えている
画像のサイズが上がってきているので問題になってくる
サイズはJpegより最大30%くらい減るけど
エンコーディング(圧縮)5−10倍遅い
デコード:1−3倍遅い
アメリカでは従量制が多いので、サイズを減らすのがいいのではないかという方向
将来ハードウェアサポートが期待できる
requestAutocomplete()
決済情報を保管してくれる
A more awesome Web, Mobile HTML , Dart
CSS
emとかの単位。そうたい的な単位が増えたよ
変数が使えるようになる
var-fontColor : red;
color: var(fontColor);
@supports、CSSがサポートされているときはこっちを、とか
@mediaはデバイスごとだけど
@support (disploya: flex) { display: flex }
postision: sticky
ぜんたいの中の一部を表示するとか。
Multimedia
WebRTCでスクリーンキャプチャ
マイクの入力が取れるようになった
Speech Api 自分が喋った内容をテキストに落としてくれるとか
Mobile HTML
Viewport, viewport units, Flexible box module, position:sticky
上記でスクリーンサイズに対応
Geolocation , Offine Events, Application Cache、Storage Apis
ユーザがどこにいるか、ネットワークが繋がっていない時とか
入力を手伝うための機能を使う
Navigation timing API
むずかしかったのでよく分からなかった
色んなハードウェアがあるけど
Androidのインテントをブラウざから
Fullscreen、ネイティブアプリっぽいのをつくれる
Dart
海外では意外と期待している人が多い
JavascriptとDartの比較
言語デザイン
大きなアプリケーションの場合
All in one
エラーを無視するか、警告を出すか
DOM操作がやりやすい
デフォルトのライブラリがjQueryっぽい
新しいWebの機能を取り込む
メソッド化スケーティング
Dartせいのプレゼンツール
メソッド名を動詞にこだわっていない
Performance, Devtools
Workspace
Devtoolsをエディタにしてしまおう
Elementsパネルで修正したスタイルやソースパネルで編集した内容が、そのままローカルに保存される。
SASSサポート
Source mapが必要
Portfowarding
リモートデバッギング、USBでつながっている端末とローカルのアプリを繋げることができる
Frame chart
Javascriptのプロファイル
どのメソッドにどれだけ時間がかかったかタイムラインで見られる
メモリ(アロケーショントラッキング)
メモリの割当てをタイムラインで見られる
Show composited layer
GPUをりようしてパフォーマンスアップ。
アニメーションに3D表現を使うと速くなるというテクニック、
それを視覚的にすることができる
上記の多くは、Chrome Canaryでないと試せない
QA
Q. Webpをモバイルで使うときどうするか
A. JavaとObjCで使う例がある
Q. Dartのサーバーサイドのセッション
A. サーバの話は出て来なかった。
Q. WebkitがブランチBlink
A.
Q. Webpについて圧縮
A. アリゴリズムについてのセッションはなかった。
Q. AndroidのChromeで加速度センサーの対応状況
A. Chromeブラウザになって使えなくなった??標準ブラウザのときは使えたっぽい。
Google Cloud Platform
Compute Engine
EC2みたいな感じ
今までは、サポートに入っているひとしか使えなかったけど、一般公開された
1分単位で課金(ここはComputeEngineが有利かな)
EC2とかは1時間単位で課金される
Debian VMを使う
Small, microインスタンスを追加。
CPUをあまりつかってない用途のものにいい
高級パケットルーティング
1つのプロジェクトの中に複数のネットワーク、サブネッワークをつくったり、BPM?
Max10TBの永続ストレージ。VMにつなげることができる
Cloud Datastore
AppEngineのDatastoreが外からも使えるようになる
JSONかPBで使えるようになった
AppEngineのDatastoreと同じ
ダウンタイムはほぼなし
Compute Engineでアプリを使って、Datastoreはこっちを使うとか
25%値下げ
AppEngine PHP
Limited preview(申し込んで許可されたひとだけが使える)
PHP5.4
Wordpressが動く
DatasotreAPIがまだ使えない
Cloud SQLは使える
Cloud DatastoreのJSON APIを使える
mbstringが入っていない(対応しているExtensionが少ない印象)
ファイルシステムに書き込めない
Cloud Storageを代わりに使う
一部関数が使えない(exec, tmpfile)
C拡張は使えない
1つのアプリで複数モジュールを管理
スケール、デプロイ、バージョン、パフォーマンスがモジュールごとに別々に管理できる
Mobile Backend Starter
Androidのアプリからサーバがわのコードを書かずにDatasotreを使える
コードがGithubに公開されているのでそれをもってきて使う
Big Query
AnalyticsとAdsenceをデータソースとして使えるようになる
(Analyticsはプレミアムアカウントだけ)
Google Apps Scriptから使えるので、スプレッドシートに大量のデータをいれて
アクセス解析するとか
Google Cloud Storage
バージョン管理ができるようになった
可用性の落ちるストレージが安く提供されるようになる
もとのデータソースをフィルタした結果を置いておくとか
ファイルを書き換えた時とかに通知するとか
gsutilコマンドを使ってcpコマンドみたいなことができる
S3のデータも同じように扱える
大きなファイルをアップロードしたいときとかに、
分割したファイルをマルチスレッドでアップロードできる
(Cloud compsiteとかと関連)
Drive API
去年I/Oからの差分
Widgets(UI系の機能)
Google Picker、Embeddable Sharing Dialogを出せる
ダウンロード先にGoogle Driveを選択できる
Apps Admin SDK
Directory API
Provisionning API系を置き換えるもの
ユーザの情報をかき集めるのが大変だった
Reports API
既存のAPIが色々Deprecatedされたので注意
Google Apps Script
Form + GAS
FormをGASで作れるようになった
Formのデザインを拡張できるようになった
Docsにもスクリプトを置けるようになった
ヘッダ、フッタ、リストアイテムとかをいじれるようになった
他人のカーソル位置とかも取れるようになる(予定
ダイアログとかも出せるようになった
サイドバー機能。ドキュメント書きながらなんかするなど。
トリガーの充実
GAS+Drive SDK
GASだけでDriveの中身をいじれるようになった
ディレクトリ以下のファイルの一覧を取得とか
フォルダやファイルの検索が簡単
QA
Q. Google StorageにあるファイルをWebに公開できる?
A. できる。権限設定も細かくできる。
Q. DriveとStorageの住み分け
A. TB単位のデータをいれるのはStorageとか
Q. アジアにデータセンターはできる?
A. とくに発表はなかった
Q. Rubyを使えるようにな情報は?
A. 情報はきいてない。
Youtubeを動画フラットフォームとして使って貰いたい
ライブ配信とかあった
デベロッパーからも使って貰いたい、
YoutubeLiveが個人でも使えるようになった
パートナーシップをむず部
チャンネル1000人以上いること
著作権違反がないこと
Live API
アプリからイベントを作成したりできるようになる
APIがv3になった
結構大きな変更
TopicksAPI
Freebaseと連携
キーワードから動画を検索とかが簡単になった
Androiアプリの中からYoutubeを動かせるようになった
いままでは、WebViewとかインテントで飛ばすとか
VP9を今年中に対応
Sign in
「G+ Sign in」ボタン
設置の仕方(Android , iOS、PC)
何が嬉しい?
Google にログインするので、、
アプリをパーソナライズ
Googleのサービスの内外で友人が登場する
Gogle Search ,Restful APIによる外部サイト連携
Goolgeの書くサービスのいち口をSign inにする?
Go
GEO
Maps関連
パーソナライズ強化
素早く表示・WebGL実装
地図そのものがインターフェース
あにめーしょんとかスムーズ
実装系の話
デザインが大きく変わった、機能はあんまりかわってない
8/14から新デザイン v=3.ex
11/14 v=3
Google maps Tracks API
車両などの追跡用API
位置の記録とGeoFenceが主な機能
どっかのエリアに入ったら通知したりできる
通常のユーザ(無償版)も利用できるように
QA
Q. Anroidでアカウントマネージャを使ってましたが、今後はSign inボタンになる?
A. Android向けの話だと、Sign inボタン使わなくても、
Google Gamesの中に認証用のAPIが入っているので、それを使えうとSign inボタンはつかわなくてもできると思う
Q. Map v3の件。カスタムのピンを作っているが、デザインはどうなる?
A. フロントとシャドウとプロパティがあるけど、シャドウは今後無視されるようになる。
Q. G+、ポストができない?Developerサイトを見るとReadonlyだったけど?(APIを使ってポストする?
A. Sign inの後に認可画面がでるので、そこでちゃんと権限をしていしていたらできる
Q. Go言語。v1.1。ロックをかけるのはプログラマの責任?言語がやってくれるようになった?
A. 管理は自分でやる。コンパイル時に検出してくれる。べーすこんでぃしょん?
Chrome Packaged Apps
Chrome app v2
ブラウザをプラットフォームとしてNativeアプリっぽいものを動かす
見た目が違う。ブラウザとは別のウィンドウで立ち上がる
定例屋のAPIをサポート、
Socket API、USB、Blouetoothをさわれたり
YoutubeからDLNAをつかってテレビにつなげる?
今回からウェブストアで公開できるようになった
ネイティブアプリみたいなものがChromeさえインストールされてたら動く。
モバイルはどうするか
Cordova + plug-in
(Fongapのオープンソース版?)
やるねこ0.0.6リリース
今回のリリースではウィジェットに8件表示されない時がある問題の修正を行いました。また、IS01のサポートを諦めました。その他、AdMobのSDKの更新を行いました。
すぐアップデートしなきゃといいつつ前回のリリースからちょうど1年ですね。なんですかね、これ。
https://play.google.com/store/apps/details?id=com.hironemu.yaruneko
rvmでRuby 2.0.0をMac OSX Lionに入れるときに
ちなみにbrewも使ってる場合です。
普通にインストールするとエラーになった。
$ rvm install 2.0.0
ここ(https://github.com/wayneeseguin/rvm/issues/1290)にあるようにするとインストールできるっぽいのでやってみる。
$ rvm install 2.0.0 --skip-openssl --with-opt-dir="`brew --prefix openssl`" ....省略 Error running 'make', please read /Users/hironemu/.rvm/log/ruby-2.0.0-p0/make.log There has been an error while running make. Halting the installation.
だめぽ。ログをみてみるとなんかOpenSSLのディレクトリがないっぽい。
ld: warning: directory not found for option '-L/usr/local/Cellar/openssl/1.0.1c/lib'
「brew --prefix openssl」の結果をみてみると確かに、/usr/local/Cellar/openssl/1.0.1cと表示される。どこからでてきたのこれ。ばぐなの?なおってるの?
https://github.com/mxcl/homebrew/issues/12571
とりあえず先にbrew installで最新のものを入れておく
$ brew install openssl
そしてもう一度Rubyのインストール
$ rvm install 2.0.0 --skip-openssl --with-opt-dir="`brew --prefix openssl`"
あれ、まだだめ。よく見たら違うところがエラー
/Users/hironemu/.rvm/src/ruby-2.0.0-p0/lib/fileutils.rb:111: [BUG] Stack consistency error (sp: 38, bp: 36) ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]
以下のサイトにCC=clangをつけろというのがあったのでやってみる。
http://stackoverflow.com/questions/15055457/error-while-installing-ruby2-with-rvm
$ CC=clang rvm install 2.0.0 --skip-openssl --with-opt-dir="`brew --prefix openssl`" ~ Installing Ruby from source to: /Users/hironemu/.rvm/rubies/ruby-2.0.0-p0, this may take a while depending on your cpu(s)... ruby-2.0.0-p0 - #downloading ruby-2.0.0-p0, this may take a while depending on your connection... ruby-2.0.0-p0 - #extracted to /Users/hironemu/.rvm/src/ruby-2.0.0-p0 (already extracted) ruby-2.0.0-p0 - #configuring ruby-2.0.0-p0 - #compiling ruby-2.0.0-p0 - #installing Retrieving rubygems-2.0.0 ######################################################################## 100.0% Extracting rubygems-2.0.0 ... Removing old Rubygems files... Installing rubygems-2.0.0 for ruby-2.0.0-p0 ... Installation of rubygems completed successfully. Saving wrappers to '/Users/hironemu/.rvm/bin'. ruby-2.0.0-p0 - #adjusting #shebangs for (gem irb erb ri rdoc testrb rake). ruby-2.0.0-p0 - #importing default gemsets, this may take time ... Install of ruby-2.0.0-p0 - #complete
やったでけた。
確認
$ rvm use 2.0.0 Using /Users/hironemu/.rvm/gems/ruby-2.0.0-p0 $ ruby -v ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin12.2.0]
おけ。