Android Studioでも再び悩ませるMac OS X用キーマップ

Eclipse 4.2の重さにうんざりして以来、Sublime Text 2IntelliJ IDEA系IDEに移行したのだがAndroidに関してはEclipseを使っていた。そんな中Google I/OにてAndroidのIDEとしてIntelliJ IDEAベースのAndroid Studioがプレビュー版としてリリースされた。

これでEclipseを完全に使わなくて済むので大歓迎なのだがIntelliJ IDEAのキーマップが何故か英語キーボード配列で割り当てられているという英語圏外のユーザにとっては致命的な不具合があって困る。

デフォルトでMac OS X風キーマッププリセットが用意されているのでこれを使っているのだけど、アクティブなタブをCtrl + Cmd + ]で右に移動しようとすると実際はCtrl + Cmd + [と判定され左のタブに移動して、今度はCtrl + Cmd + ]を実行するとこれはCtrl + Cmd + ¥と判定され、何も起きずに右方向のタブに移動できないという悲しい出来事が起こる。Android Studio Previewでも残念ながら悲しい結果になった。

しょうが無いのでMac OS Xプリセットをコピーして必要なものをアサインし直すという不毛な作業をしている。

ガラポンTV APIのラッパーライブラリ書いてみた

http://garapon.tv/のAPIのラッパーライブラリを書いてみたので公開。ガラポンTVはワンセグ動画だけど2週間分のテレビ番組を全部録画するレコーダー。申請するとAPIをつかって録画した番組のデータを使っていろいろ遊べる。

NHKのスペイン語講座ムーブした途端にブルーレイレコーダの外国語押し、NHK押しが始まり「おまかせ・まる録」にまったくお任せできなくなったのでこれでなんとかする。ガラポンTVで見たい番組が見つかったら次からはレコーダで予約してフルセグの画質で見るみたいなことがしたい。

ライブラリはとりあえずPHPで書いている。途中でやっぱりPHPめんどくさいってなってGuzzleライブラリに頼ってさくっと実装した。まだテストファーストでしか動かしていないので自分の好きそうな番組を探すツールはこれから作る。

Google ReaderからFeedlyに乗り換えて2ヶ月

Google Readerが辞めると発表された日からFeedlyに乗り換えてずっと使っている。なので2ヶ月くらい使っているけど今のところ何も問題になっていないし満足している。

他のReaderサービスと比較していないのだけど、Google Readerが辞めると発表された日に俺が代わりをやるぜ!(意訳)と言った心意気を買ってFeedlyを使うことを決めた。打算的な面からもそう言ったからにはサービスが急に終わるということも無いだろうし。

FeedlyはウェブからもiOSアプリもAndroidアプリもあるのでマルチスクリーンで使うことができて便利。iPadやiPhoneでも使えるし既読データも共有することができる。GoogleアカウントでログインするとGoogle Readerのフィードをインポートしてくれるのでフィード登録しなおす必要もないしすぐに使い出すことができる。

デザインもフラットUIでスッキリしているがiOSアプリでは多少の設定は必要かもしれない。たくさんのフィードを登録しているとマガジンスタイルだと俯瞰しづらい(同様の理由であまりFlipboardを使っていない)ので基本的にタイトルオンリーやリストスタイルの表示を設定でデフォルトの表示スタイルにしている。あとiOSで一覧を開いただけで既読にされてしまったりしたのでAutoReadはオフにしている。この辺りのカスタマイズは自分なりに見つけないといけないだろうけど一度使いやすい設定を見つけてしまえばあとは問題ない。

FeedlyがGoogle Readerとくらべていい所としていろいろな外部のウェブサービスと連携している点がある。TwitterやFacebookの共有数を調べて表示してくれているっぽいので読む前からどれくらい人気のある記事かがわかったりするし、自分から共有するのも楽ちんである。

Google Readerの開発者だってTwitterやFacebookを使っている人もいるはず。でも繋げたくても競合するGoogle+という自社サービスがあることが災いして他のSNSサービスとの連携を実現することができなかったのだろう。これでは開発者もやる気がなくなる。なにやらどこかの会社でも聞いたような話だ。

ブログを書く心理と目標

今年はブログを頑張ろうと思っていて、頑張るからには目標を立てようと思ったのだけどそれが難しい。

単純にPVを上げるとかにできればいいのだが、それを目標にしてしまうとSEOを頑張ったり、目を惹くタイトルであったり、集客しやすいテーマであったり、誰のためにやっているのか、頑張る方向性が間違っているような気がしてピンとこない。

そんな中ウェブログの心理学という本を読んだ。

ウェブログの心理学

本によれば「ブログを書く目的は自己表現動機であり、その理由は共感してくれる他者と出会い親しくなれる、自分の考えを整理できる点である」ということになる。

基本はこれだ。前者の理由はSNSでも可能なように思える。自分はSNSが苦手のなので自分の意見を言って交流するというのはさほど求めておらず、後者の理由が大きいと思う。「人が生きる意味は、自分の人生を観るために生きる」という誰かの言葉の引用があった。ブログを書く理由はやはり自分の内側に向いている気がする。

また本には日記には事実と心情という側面があり、自己向きの事実である「備忘録」、他人を意識した事実である「日誌」、自己向きの心情である「日記」、他を意識した心情としての「公開日記」という分類を言及している。心情中心に書く人の方が当然、自己表現や他者との精神的な繋がりを求める傾向があり、逆に事実中心のブログを書く人は自分の考えを言って叩かれることを恐れる傾向もあると。

最近、自分のブログを読んでひどくつまらないと感じていたのはやはり心情面が少ないし自己表現に乏しいからだと思う。例えば技術的なことは「俺が書く必要があるのか?」と思ってしまい、誰も触れないようなすごい狭い領域のことを書きたくなる。基本的に同調化欲求よりも個別化欲求を求める傾向がある。

ここ数年、技術的な話が中心になっている要因の一つにブログがエンジニアにとって一つの資産になるということが影響していたように思う。しかし、今だとGitHubだとかStack Overflowだとか日本だとQiitaだとかがあるのでインターネット上のアウトプットとしてブログに固執する必要もなくなってきている気がする。

ということで目標としては技術的なことはブログ以外で頑張り、ブログは心情重視で頑張るということにする。とは言え、書きたいことに制約をかけるといのも何か違うと思っているので技術的なことをブログで書かないということにはしないつもり。基本は自分が楽しんで書く。

なんか結果的に今年立てた最初の目標とあまり変わっていないのだけど、心情面で頑張るということを導けたということだけでもよしとしよう。

Gunosy騒ぎに理解がついていかない

Gunosy騒ぎがあったことは知っていたが具体的に何があったのかはよくわかっていなかった。以下のサイト読んで状況を知った。

Gunosyはこんなもんだし、自称情報強者落ち着きなさいよという話。

僕も上の人と同じ意見で、なぜそこまでの騒ぎになっているのかはよくわかっていない。仮にはてブに依存しまくりで、はてブに影響を与えたとして、だから何ナノ?としか思わない。

自分のお勧めがこないのはこういうやり方だからけしからん。というのが批判の主張と理解しているんだけど、Gunosyからいい記事が届かなければ次第に使わなくなるだけだし、けしからん、とか、もう今日からつかわんみたいな批判に飛躍するところがよくわからない。

そういう人たちはGoogle検索で期待する結果が得られなかったら検索エンジンのアルゴリズムはページランクだった!みたいことを言い出してGoogle検索使うのを止めておもむろに自分のサイトからリンクを削除していくのだろうか?

GunosyがGunosyの批判記事をフィルタリングしたからダメだという人もいるけど、Googleだって以前ガイドライン違反をしていたよ。

http://www.itmedia.co.jp/news/articles/0902/19/news015.html
米Google日本法人は2月18日、自社サイトのPageRankが9から5に急落した理由について、「Googleのガイドラインで禁止している『有料リンク』とみなされる行為を、わたしたち自身が行っていたことが判明したため」と説明した。

人間誰しも間違いを冒すもの。アプリやサービスが全て自分が思う通りになっていないとけしからんと人が決めつけてしまうのは何でなんだろう。失敗や間違いに対する許容値の問題なんだろうか。

今までありがとうFireworks 。もうちょっとだけ続くんじゃ

Fireworksをオープンソースにしてくれという活動があるので署名した。
http://www.change.org/en-GB/petitions/adobe-com-release-adobe-fireworks-to-open-source

Adobe MAX, The Creativity ConferenceにてFireworksの新規開発の終了および、制作系アプリの提供がCreative Cloudに統合されパッケージとしての販売がなくなることが発表されている。

Adobe,同社のクリエイティブツール「Adobe Creative Cloud」のアップデートを発表――クラウドサービスとして生まれ変わり,2013年6月18日から提供開始予定

FireworksはDreamewever 4 x Fireworks 4からMacromedia Studio MX 2004→Adobe Suite CS4 Web Standard→Fireworks CS6と使いけている(基本ぎりぎりでアップグレードしている件)。たまに自分のウェブやアプリの画像を作るだけの自分にとってはPhotoshopやIllustratorのような高いソフトはオーバースペック気味で手が出ず、Fireworksには随分お世話になった。

月5000円は高いので、ライトユーザ向けのプランが用意されない限りは個人でCreative Cloudを使うことは無いだろうからIllustratorなどに移行することもないだろう。

というわけでギリギリまでFireworks CS6を使い続けてAdobe以外のツールに移行するんじゃないかと思う。並行して代わりになりそうなツールをウォッチしておこう。

http://blogs.adobe.com/fireworks/2013/05/the-future-of-adobe-fireworks.html
While we are not planning further feature development for Fireworks, we will continue to sell Fireworks CS6 as well as make it available as part of the Creative Cloud. We will provide security updates as necessary and may provide bug fixes. We plan to update Fireworks to support the next major releases of both Mac OS X and Windows. As more specific details on the next version of Windows and Mac OS X are made available, we may adjust these plans.

Fireworksは新機能の開発の予定はないが、Fireworks CS6はCreative Cloudの一部のとして販売は続けられるし、セキュリティアップデートや必要なバグ修正は続けられるつもりだそうだ。次のMac OS X/Windowsのメジャーバージョンアップくらいは面倒みる予定らしい。

もうちょっとだけ続くんじゃ、とか言ってFireworks Zとか公開されたりしないだろうか。

Minecraft Server Managerでマルチサーバを公開してみる

Minecraft Server Manager 0.8.16 Betaを試した。

Minecraft Server Managerとは

Minecraft Server Managerは本家のWikiで以下のような説明。

  • 動作環境はDebian/Ubuntuをサポート
  • MinecraftやBukkitサーバたちを管理できるスクリプト
  • 定期的にWorld Edit互換のバックアップを作成できる
  • “あと10秒でシャットダウンします”といったメッセージをプレーヤーに通知できる
  • Terminalからゲーム内のコマンド(“say”, “op”, “whitelist”など)が使える
  • すべてのコマンドがTabで補完されるので簡単に学習できる

http://msmhq.com/がサイト。複数のマイクラサーバを管理してコマンドであたらしいマイクラサーバを作成したり、開始したり、停止したりできるサーバ管理者向けのツールっぽい。ちょうどDebianサーバを持っているので1マイクラサーバでもいろいろ便利そうなので使ってみることに。

実際にDebianのサーバで動かしているが、コマンドのテストの多くはローカルの仮想環境にあるUbuntuで行った。

インストール

インストールコマンドだと途中でパッケージの更新(apt-get update; apt-get upgrade)が入るので関係のないソフトウェアも全部最新にさせられることに注意(嫌ならManual Installationをする)。wgetだけは先にsudo apt-get install wgetで入れとく。

$ wget -q http://git.io/Sxpr9g -O /tmp/msm && bash /tmp/msm
MSM INSTALL: Configure installation
Install directory [/opt/msm]: (リターン)
New server user to be created [minecraft]:(リターン)
Complete installation with these values? [y/N]: y(リターン)

上記のデフォルトでは/opt/msmにユーザminecraftでインストールすることになる。パッケージが更新され依存するscreen rsync zipがインストールされる。サイトではRedhutはwget -q http://git.io/lu0ULA -O /tmp/msm && bash /tmp/msmでと書いてあるのでCentOSでも動くのかもしれない。

No directory, logging in with HOME=/,ディレクトリがありません。HOME=/ としてログインしますと警告がうるさいのでminecraftユーザのホームディレクトリを作成しておく。

sudo mkdir /home/minecraft
sudo chown minecraft:minecraft /home/minecraft

コマンド

インストールが成功するとmsm helpを打てといわれる。MSMではすべての操作をmsm xxxxのような形で実行する。

セットアップコマンド

コマンド 説明
server list マイクラサーバを一覧
server create <name> 新しいマイクラサーバの生成
server delete <name> 存在するマイクラサーバの削除
server rename <name> <new-name> 存在するマイクラサーバのリネーム

サーバ管理コマンド

コマンド 説明
<server> start マイクラサーバを起動
<server> stop [now] プレーヤーに警告をしてマイクラサーバを停止、またはいますぐ停止
<server> restart [now] プレーヤーに警告してマイクラサーバを再起動、またはすぐに
<server> status マイクラサーバの起動状態(running/stopped)を見る
<server> connected マイクラサーバに接続しているプレーヤーの一覧
<server> worlds list worldstorageにあるワールドの一覧
<server> worlds load worldstorageにあるワールドのリンクをマイクラサーバディレクトリに作成する
<server> worlds ram <world> 指定したワールドをRAMで上で動かすかDiskかのトグル
<server> worlds todisk RAM上のワールドをディスクに同期する
<server> worlds backup マイクラサーバ持っているすべてのワールドのバックアップを作成する
<server> worlds on|off <world> 指定したワールドをアクティブまたは非アクティブにする、非アクティブなワールドはバックアップされない
<server> logroll ログの縮小化のためマイクラサーバログを移動しgzipでアーカイブする
<server> backup マイクラサーバのディレクトリのバックアップを作る
<server> jar <jargroup> [<file>] マイクラサーバのjarファイルを設定する
<server> console インタラクティブコンソールに接続する、アクセスは制限される
<server> config [<setting> <value>] マイクラサーバを指定の値を設定する、指定しなかった場合は設定の一覧

マイクラサーバゲーム内コマンド

コマンド 説明
<server> wl on|off ホワイトリストチェックの有効・無効
<server> wl add|remove <player> ホワイトリストへプレーヤーを追加または削除する
<server> wl list ホワイトリストにあるプレーヤーの一覧
<server> bl player add|remove <player> プレーヤーをバンまたはバン解除する
<server> bl ip add|remove IPアドレスでバンまたはバン解除する
<server> bl list バンしているプレーヤーとIPアドレスの一覧
<server> op add|remove <player> プレーヤーに管理者権限を与えるまたは取り消す
<server> op list 管理者権限のあるプレーヤーの一覧
<server> gm survival|creative <player> プレーヤーのゲームモードを変更する
<server> kick <player> マイクラサーバーからプレーヤーをキックする
<server> say <message> マイクラサーバ上のすべてのプレーヤーへ(ピンク)メッセージを送る
<server> time set|add <number> マイクラの時刻を設定または追加する(0-24000)
<server> toggledownfall 雨または雪のトグル
<server> give <player> <item> [amount] [data] プレーヤーにアイテムを与える
<server> xp <player> <amount> プレーヤーに経験値を与える、負数なら減らす
<server> save on|off ワールドの変更をファイルに書き込むかの有効・無効
<server> save all 強制的に保存していないワールドの変更をファイルに書き込む
<server> cmd <command> コマンド文字列をマイクラサーバに送る
<server> cmdlog <command> cmdコマンドと同じだが、結果のログ出力を表示する(Ctrl+Cで終了)

Jarコマンド

コマンド 説明
jargroup list jarファイルの一覧
jargroup create <name> <download-url> ダウンロードURLとしてjarグループを生成する
jargroup delete <name> jarグループを削除する
jargroup rename <name> <new-name> jarグループをリネームする
jargroup changeurl <name> <download-url> jarグループのダウンロードURLを変更する
jargroup getlatest <name> jarグループのダウンロードURLから最新のjarファイルをダウンロードする

グローバルコマンド

コマンド 説明
start すべてのアクティブなマイクラサーバを開始する
stop [now] すべての起動中のマイクラサーバを停止する
restart [now] すべてのアクティブなマイクラサーバを再起動する
version Minecraft Server Managerのバージョンを表示する
config MSMで使われている設定の一覧
update [--noinput] MSMのファイルを最新のバージョンに更新する

コマンドから使い方を推測すると複数のマイクラサーバを管理するのでマイクラサーバに名前をつけて、マイクラサーバの名前を指定してコマンドを送ることになる。

またjargroupコマンドがありマイクラサーバと分離されている模様。マイクラサーバをどのjarファイルで生成するのか管理でき、例えばmodを当てたserver.jarを何処かに公開してそれを使って構築したり、あるマイクラサーバは公式のserver.jarから構築するなどの使い方ができると思われる。

サーバの作成と起動

まずは公式のマイクラサーバのminecraft_server.jarをminecraftという名前のjargroupで作成する。(ドキュメントではデフォルトでcraftbukkit、minecraftのjargroupがあるらしいのだが無いと怒られるので作成する)

sudo msm jargroup create minecraft https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar
sudo msm jargroup create craftbukkit http://dl.bukkit.org/latest-rb/craftbukkit.jar

次にmyserver1というマイクラサーバを作成し、minecraftjargroup、つまり公式のminecraft_server.jarを指定して開始する。

sudo msm server create myserver1
sudo msm myserver1 jar minecraft
sudo msm myserver1 start

以下の情報は今のところ気にしなくていい。

[MSM Info: Assuming 'minecraft/1.3.0' for this server.You should override this value by adding 'msm-version=minecraft/x.x.x' to '/opt/msm/servers/myserver2/server.properties' to make this message go away]

コマンドなどバージョンによって下位互換を取らないといけないときにMSMにminecraft_serverのバージョンを教えてあげないといけないことがある。どうしても気になるならsudo msm myserver1 config msm-version minecraft/1.5.2などを実行する。

マイクラサーバ実行中でも以下のようにしてLinuxのターミナルから管理者権限を与えることができる。

sudo msm myserver1 op add username

2つ目のマイクラサーバを起動してみる。複数のマイクラサーバを公開するにはそれぞれポートを別にしないといけない。

sudo msm server create myserver2
sudo msm myserver2 jar minecraft
sudo msm myserver2 config server-port 25566
sudo msm myserver2 start

デフォルトのポート以外に接続する場合、クライアントは Server Addressに 127.0.0.1:25566 というようにコロンとポート番号を指定する。

マイクラサーバは/opt/msm/servers/myserver2/といったディレクトリにファイルがあるのでMSMを使わないで直接server.propertiesファイルなどの設定を変更することも可能。ファイル階層は以下のようになる。

/opt/msm
`- servers
   `- server_name
      |- world -> /opt/msm/servers/server_name/worldstorage/world
      `- worldstorage/
         |- world/
      |- worldstorage_inactive/
      |- server.jar
      |- server.properties
      |- server.log
      |- ops.txt
      |- white-list.txt
      |- banned-ips.txt
      `- banned-players.txt

ワールドの管理

基本的にMSMでワールドを管理するときにはworldstorageというディレクトリにワールドの実体ファイル(ディレクトリ)を置いてあげないといけない。

最初にマイクラサーバを起動するとworldというディレクトリにワールドを作成されるので、これをに以下のようにしてworldstorage下へ移動しworlds loadコマンドでシンボリックリンクを作成する。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1
sudo mv world worldstorage/
sudo msm myserver1 worlds load

バックアップ

これでsudo msm myserver1 worlds backupを実行するとworldstorageにあるワールドのバックアップ(zip)がWORLD_ARCHIVE_PATH(/opt/msm/archives/worlds)に作成されるようになる。

なおworldstorageに複数ワールドがあるとすべてバックアップされる。これは <server\> worlds on\|off <world\> コマンドでアクティブ・非アクティブを切り替えることでアクティブなものだけがバックアップされるようになる。

リストア

リストアのコマンドは今のところないようなのでバックアップファイルから戻す。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1/worldstorage
sudo mv world world_org
sudo unzip /opt/msm/archives/worlds/myserver1/world/{日付}.zip
sudo chown -R minecraft:minecraft world 
sudo msm myserver1 start

RAMを使う

ワールドをRAMに置くことでパフォーマンスが期待できる。

デフォルトでは/dev/shm/msmを使うことになっている。/dev/shmにディレクトリがない場合は以下のようにして作っておく。パスは/etc/msm.cnfのRAMDISK_STORAGE_PATHで変更することもできる。

sudo mkdir /dev/shm/msm
sudo chown minecraft /dev/shm/msm
sudo chmod -R 775 /dev/shm/msm

以下のようにサーバ名、ワールド名を指定してRAMに配置する。ワールドのパスを変えるので当然マイクラサーバは止めないといけない。

sudo msm myserver1 stop now
sudo msm myserver1 worlds ram world
sudo msm myserver1 start

ワールドはstopコマンドでサーバを止めたときなどのタイミングでディスクに同期されるので壊されてもいいようなテンポラリなワールドとして使えるわけではない。

マイクラサーバのバージョンアップ

jargroupコマンドで取得したjarファイルを置き換えることで可能。

停止してバックアップを取る。

sudo msm myserver1 stop now
sudo msm myserver1 backup
sudo msm jargroup getlatest minecraft
sudo msm jargroup list

でjarファイルのリストが見れるので日付で使うファイル名をきめて

sudo msm myserver1 jar minecraft 日付-minecraft_server.jar

起動するとバージョンが上がっているはず。

sudo msm myserver1 start

まとめ

MSMを使うとscreenを意識しなくていいし、バックアップもコマンド一つで取れるので楽ちん。マルチサーバを一台管理するだけでも便利だと思う。

TwentyThirteenに負けないシンプルなテーマを_sから作ってみた

まだ途中だけど区切りがいいので一旦新しいテーマに変更してみた。

makotokw2013

やっぱりトレンドによってブログのデザインは時々変えたくなるもので、フォントが小さいのが美しいとか思っていた時期もあるけどモバイルファーストな昨今ではサイドバーがなくてフォントが大きいサイトが潔くて羨ましいと思うことが増えていた。そんな中Octopressで書かれたブログがギークっぽくていいなと思ったり、GitHubやQiitaを使っているうちにもう全部Markdownで書いたらええやん。と思ったりしてJekyllで超絶シンプルなサイトを作ろうとしていた。(並行中)

このブログについては過去の大量のエントリーを移行するのもしんどいし、Markdownで書けるプラグインなんかも作ったりしたのでこのままでいいかと思っていたんだけど、TwentyThirteenを見たらスイッチが入って新テーマをつくる気になった。

最初TwentyThirteenをベースに変更しようとしていたんだけど自分が使うものがどれか判断が付きづらく編集がし辛いということがあったので以前Twitterでマクラケン直子さんから教えていただいたUNDERSCORES(_s)をベースに変更することにした。この方針変更はあたりで_sとTwentyThirteenのhtmlの構造がほとんど同じなので一部のスタイルをパクっ参考にすることができた。

モバイルファーストで考えると下までスクロールするならもうウィジェットなんか無くてもいいやん、リンクでいいやん。とかどんどん使わないものを削っていってかなり大胆な変更になった。とは言えデスクトップで使うときはナビくらいサイトヘッダにあってもいいんじゃないかと思い始めてまだ思案中の段階。

FacebookのOGP入れたり、Zenback Widget入れたり、コードハイライトしたりしてこんだけシンプルなのになんでこんなに大変なんだろうと思うことがあって、情報を共有するためにテーマはオープンソースでGitHubに公開しようと思ってる。

ブログ大リファクタリング中

ブログ書こう

ブログのデザインが気に入らない

いや書こう

いや気に入らない

_人人人人人人人人_
>ブログが更新されない! <
 ̄^Y^Y^Y^Y^Y^Y^Y ̄

時折訪れるこのループを回避すべく新しいテーマを作っている。超シンプルテーマになる予定。

そもそも他のテーマ使えばいいじゃんという話なのだが、過去のエントリのhtmlをケアしないといけないという問題がある。でいろいろやっているちにソースコードの表示でpreだけpre > code、codeだけ、さらにはblockqouteとか乱立していてcss4の親セレクタとか使えないと無理じゃね?と思い始め、いよいよずっと放置していた過去10年分のエントリを修復しないといけない気がしてきた。

頑張って1000件のエントリ見直すぜ!と思っていたらエントリ数が2000件超えてて、1件1件WordPressの管理ページで直すのは現実的じゃないと思ってエントリーを一回テキストファイルにdumpしてgrepでチェックしたり、リンク切れ探したりしてテキストベースで直して、またデータベースに直接放り込むという強引なドリブルをやるスクリプトを書いたりしていてなかなか終わらない。

Go Conference 2013 springに行ってきた

土曜日にGo Conference 2013 springに行ってきた。

過去のブログのエントリーを見ると2009年、おそらく最初に公開されたときにちょこっと触っただけでそれ以降は全く状況を知らない。当時は面白そうと思いつつ、動かす場があまりなさそうと思って諦めていたので時間がたって状況が改善されているかもということで再び興味を持った。

GoConは午前中はもくもくして、午後からセッションがあるというイベント。全然触ったことがない人でもGo Tourをやればいいということで参加。GoConの登録アンケートによれば60%くらいGoを書いたことがある人が登録していたらしい。イベントの場では半分ぐらいがGoを触ったことが無いと手をあげていた。2009年に触った記憶など1bitも残っていないので全然触ったことが無い人で手を挙げておいた。

モクモクとやっていたA Tour of Goメモは以下。

忙しい人のためのA Tour of Go
http://qiita.com/items/0638c0af1002647e3f7a

A Tour of Goはなかなか優れているのでGoに興味が有る人は是非やってみるといいと思う。その場でコードをいじりながら実行結果を確認できるというのがいい、あと読んでるだけじゃ頭に入ってこないので所々に演習問題が入ってくるのもいい。

半日で新しい言語の取っ掛かりがつかめるようになるのは大きい。すべての言語にこのレベルの物があればもっと武器が増えるかもしれない。といいつつ、Code Schoolとかあまり手を付けていないのでやっぱりこうやってイベントで集まって強制的に時間を作ってやるのがいいんだろうな。

午後のセッション

@tenntennさんからGo言語で作るWebアプリ。Goにはhttpパッケージなどいろいろなパッケージが用意されていてSinatraみたいにルーティングとハンドラを書いていくような感じで簡単に実装ができるという話。

@najeiraさんからGo on AppEngine。個人的にこれが一番熱い。言語として使いやすくてもやっぱり動かす環境を整えられないと魅力半減。Goのような言語でAppEngineを使えるのは大きい。ただPythonのSDKに依存していたりまだ実験中の様子、システムの一部をGoで書くとか使い分けもできるし今後に期待。

@Jxck_さんからGoroutine & Channel in Go。Goの魅力の一つにGoroutineやChannelを使った並行処理があげられる。というかこれを使いこなさないとGoを使う意味がないという感じ。GoroutineやChannelは新しいおもちゃを手に入れた感がある。

@methaneさんからGOMAXPROCS の基礎。Goroutineの実行はスレッドのよう見えるけどそういうわけじゃなくていろいろゴニョゴニョ中ではしているんだよという話。Goroutineの使い方はGo言語の肝となるわけなのでどういう処理をどれくらい並行させるかというのは大規模なシステムになると鍵になってくるのだろう。

@fumitoshi_ukaiさんからGoのどのあたりがよいか。「Goは最初気持ち悪いだけどやっているうちに好きになっていく。でもそれをうまく説明できない」というのが印象に残った。A Tour of Goやっただけでもなんとなくその気持がわかる気がしていて、使いこなすといままで面倒だったコードがすごい簡潔になるんだろうなという予感がすごいして、それがわかっていくうちに気に入るんだろう。

@moriyoshiさんよりGoでゲームをつくろう。大規模なシステムのための言語のように見えるけど、SDL系やOpenGL系のライブラリもあってやろうと思えばゲームも書けるんだよ。という話。数時間で実装されたというデモもあった。確かにGoroutineとかの並行処理があるから考え方を変えればゲームも書きやすい言語なのかもしれない。

@derekcollisonさんからApcera Case Study: The selection of the Go language。PaaSのサービスの実装にGoを選びましたよという話。以前はRubyを使っていたけどいろいろ制約もあってNode.JSかGoを選択肢で比較したけど、決まるときはあっさりGoに決まって全然問題ないよ。という流れ。印象に残ったのはGoの場合、経験のあるエンジニアを採用できないというリスクがあったけどそれがあまり問題にならなかったということ。シンプルなので理解も早いということなのだろう。ちなみに誤解を招かないように何度もRubyもNode.JSも好きだよと繰り返されていた。

セッションはいろんなバリエーションがあって面白かった。思っていた以上に言語の使いどころの幅も広い感じ。ちょっとしたコマンドラインのツールとかGoogle App Engineを使ったり試して行きたい。