2014年4月26日土曜日

Golang Cafe #26

4/20(日)に開催された「Golang Cafe #26」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、ハムエッグさん、私の4名でした。

今回からコンテナ型仮想化環境「Docker」のソースを読み始めました。

DockerがGoで記述されているのは知っていましたが、肝心のDockerを知らなかったので(^^;)、この状態でソースを読み進めると後々ツラいと思い、前日に開催されていた「Docker入門」に参加して、概要だけでも頭に入れて参加しました。

前半はDocker談義や雑談を行い、Dockerソースの総行数を求めたりしました。

後半からエントリーポイントとなるdocker/docker.goを読み始めました。

import部にて、実際にパッケージ名の別名(省略)を行っている例を初めて見ました。

  import (
   ...
   flag "github.com/dotcloud/docker/pkg/mflag"
   ...
  )

別名を"_"にすることで、パッケージ配下の全てのgoファイルを対象にinit()関数が実行されるため、初期化処理に利用できます。

  _ "github.com/dotcloud/docker/pkg/mflag"

const部で定義されているファイル名の拡張子に".pem"が記述されていたり、パッケージ名に"x509"の文字が見受けられるので、電子証明書を使った暗号化通信が行われるようです。

あと、オプション表記に"#"を使うパターンがあるのも初めて知りました。

  bridgeIp = flag.String([]string{"#bip", "-bip"}, ...

dockerは指定するオプションなどによって、3つのモード(init, daemon, client)で起動します。

起動時に以下のファイルが存在すればinitモードで起動します。

  $HOME/.docker/.dockerinit

この判定処理はmain()関数の先頭(=オプション判定よりも先)に記述されています。

  func main() {
      if selfPath := utils.SelfPath(); strings.Contains(selfPath, ".dockerinit") {
          // Running in init mode
          sysinit.SysInit()
          return
      }

"d(-d)"オプションを指定して起動するとdaemonモード、それ以外ならclientモードで起動します。

daemon&clientモード判定のif部はコード量が少しあるため、今回はclientモードを読みました。

if *flDaemon {
    // daemonモードの処理
    ...
} else {
    // clientモードの処理
    ...
}

自分の感覚だと、上記のif部は「コードが長過ぎる・インデントが深過ぎる」と判断して、分岐後の処理を別関数に切り出そうとするのですが、そうなっていない理由を知りたいと思いました。

もしかしたら、

  • ソースリーディング時の流れを考慮しているため。
    • 重複したコードもなく処理も一度しか出現しないので関数化不要?
    • 関数化するとリーディングの流れが中断して(=目線が途切れて)しまう。
  • コンパイラーの最適化に影響があるため。
    • 生成されるバイナリーファイルのサイズが増加する?
    • バイナリーファイル実行時の速度やメモリ消費量に影響がある。

といった理由があるのかもしれません。

余談ですが、自分は普段からソースはlessやvimで読み書きしているのですが、lessでソースを見ていたら横山さんに驚かれてしまいました...(^^;)

次回も引き続きDockerソースを読み進める予定のようです。

P.S.情報処理技術者試験後のGolang Cafeはやはりキツかったですね...(^^;)

[2014.04.27] 余談にて横山さんからのコメントを反映して、P.S.を追加しました。

2014年4月14日月曜日

Golang Cafe #25

4/13(日)に開催された「Golang Cafe #25」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、初参加のハムエッグさん、私の4名でした。

今回より、ハッシュタグは #gdgchugoku を交えつつ #golangcafe をメインに使っていくことになりました。

ハムエッグさんはGoをほとんど触られていないということで、#1 以来の「How to Write Go Code」を見て行くことになりました。

その際、横山さんから「進めてみて下さい」とのフリがあり、5/10の予行演習を兼ねたり、ご両人には物足りないかと思い、私の方で進行を引き受けさせて頂きました。

私とハムエッグさんは「How to 〜」を読み進めたため、横山さんと萩野さんがどのような話をされたのかわかりませんでした。後日のご両人のブログで確認したいと思います。

「How to 〜」の方は、記載されている内容を進めてもらいつつ、要所でGoコマンドやディレクトリー構成の説明、コーディングしたGoソースの解説などをさせて頂きました。

私事ですが、5/10(日)にGDG中国様主催の「第24回勉強会@岡山」にてGo言語のハンズオンをさせて頂く事になっており、今回は、そこの場所に生かせる良い経験をさせて頂きました。

参加者の方々のブログなども是非ご覧下さい。


次回からは「Docker」のソースを読んで行く予定なので、前日に「Docker入門」の話を聞いておくものよいかも。

2014年4月9日水曜日

GDG DevFest Japan 2014 Spring

4/6(日)に京都で開催されたGDG様主催の「GDG DevFest Japan 2014 Spring」に参加しました。

「お祭り」ということで、主役である全国のGDG&GTUG Girlsのマネージャー&オーガナイザーの皆様に加え、API Expertsやグーグル株式会社の方々も参加されるなど、多くの方々(ざっと見で50名以上)が参加されていました。

参加の経緯


Golang Cafe #23」にて、主催者&GDG中国横山さんから「#24はDevFestのセッションで開催します」というお話があり、それを聞いた萩野さんと私は「じゃあ京都で」ということに(^^;)

LTに申し込み


アジェンダを見た時に「Golang Cafe #24に参加しない人はGoに触れることなく一日が終わってしまうではないか!」と思い、5〜10分なら何とかなるかとダメもとでLTに申し込みました。

関西にも多くのGopherがいらっしゃるので、もし他にGoを話す人がいらっしゃればそちらが優先されてよし、仮に自分も話せた場合にはテーマが被っていても大丈夫なように「Go」ではなく「Gopher」をネタに選びました。


京都(丹波口)に着いた感想


  • 新幹線にて約1時間で到着!
  • 大都会と同じ位の肌寒さ。
  • 桜が散り始めていた。
  • 会場が街の中にあった。
  • 建物が低いため街が広く見えた。

自分が受講したセッション


オープニング

Google Developer Relations Japan鈴木さんの説明で、初めて今回は「GDG&GTUG Girlsのマネージャー&オーガナイザーの皆様の祭りの会」であるということを知りました(^^;)
# だから皆さんハッピを着ていた訳ですね、納得!

Google Compute Engine 入門

講師はGDG四国Oshimaさん。ゆっくり&丁寧な説明で参加者全員の足並みが揃うように進められていたのが印象的でした。おかげさまで、私もゼロの状態からインスタンスの生成・起動・削除までの一連の作業を行うことができました(^^)v

ゆるキャラをSVGで描く

講師はGDG九州Matsuokaさん。前半はSVGの概要からInkscapeでの図形や色の使い方までの説明、後半は「Inkscapeハンズオン」として、ゆるキャラである(?)「ドロイド」を描いて行き、最後はSVGファイルをテキストエディターで編集して手足をアニメーションさせました。
# 復習として、ゆるキャラ「ゴーファー」も描いてみたいところ!

GAEの紹介

講師はGDG名古屋中垣さん。前半はGAE/Jの機能と、実例として著書「作ればわかる!Google App Engine for Java プログラミング」からのアプリの紹介、後半はGAEの事例(モバイルゲームのサーバーサイド、など)が紹介されました。
# 著書、私も購入済みです!

Dart + StageXL

「参加の経緯」からすると、この時間帯は「Golang Cafe #24」に参加しているシーンなのですが、めちゃくちゃ悩んだ末、Dartのセッションを選択しました。
# なぜなら、まだ”Flight"できていないため...(^^;)

講師はGDG京都Kuranoさん。「Dartは専門ではない」と言われながらも、ご自分で試されたサンプルソースやデモを交えながらStageXLを紹介されました。パーティクルエミッターを使って雪景色の画像に雪を降らすデモなどでは、会場からも「おぉ!」と声が上がっていました。
# StageXLは「HTML5のCanvas上に描画するFlashに近いフレームワーク」です。

トークセッション

壇上にGDGのマネージャー&オーガナイザーの皆様が集結!皆様への質問を受け付けていた「Google モデレーター」が途中からコケていたハプニングもありつつ、参加者からの質問に対して、組織のまとめ役としての体験談などを交えながら回答されていました。

参加者からの質問が落ち着いたところで、スクリーン上に「質問パネル」が登場!参加者が選んだパネルに隠されていた質問に回答していく形式となったことで、番組さながら「まずはドロイドの10」「ゴーファーの40?」「アップ猿人の20!」など、会場が暖まって行きました。

ライトニングトーク&懇親会

間違った日付を指定していたらしく、注文していたピザが届かないハプニングが発生!立て直しまでの時間にAPI Experts江川さんが「Chromecast」のデモを見せて下さいました。
# 食事のリカバリー対応をされた方々、お疲れ様でしたm(__)m

LTの内容はこの場での発表だったため全てを拾えませんでしたが、全部で6つあり「Google I/Oへの参加」「HTML5で対戦ゲーム」「Drupalの紹介」「Android Ware」などが、笑いや感心を交えながら発表されました。

私は1分ほど短く終わってしまい「時間オーバーよりはよかったかも」と思っていたところで、司会の中垣さんから「名古屋では時間いっぱいまで何かやって頂くことになっています」といわれ、とっさに出てしまったのが即興の「Go音頭」でした...q@w@p
# あれは、はずかしい!(>_<) 失礼しましたm(__)m > 皆様 そして、名古屋こわい!w

クロージング

参加賞として「GDG DevFest Tシャツ」が配られ、最後は全員でTシャツを身に付けて集合写真を撮りました。

個人的な感想


セッションの内容はもちろんのこと、いつもと違う会場の雰囲気を知ることができたり、全員とは行きませんでしたが、ネット上でしかお見受けしていない方々を実際に見れたり、また、お話ができたり、そして、新しい出会いがあったりと、有意義な時間を過ごすことができました!

あと、熱狂的Gopherの山口さんとの再会は驚きでした!q@w@p
# お声掛けやら資料のご指摘など、ありがとうございましたm(__)m

主催関係者の皆様&参加者の皆様、お疲れ様でした&ありがとうございました!
# 横山さん&萩野さん、お疲れ様でした&ありがとうございました!


LT資料


@tenntennさん、顔文字の件、ありがとうございましたm(__)m

2014年4月7日月曜日

Golang Cafe #23

1週間遅れとなってしまいましたが、記録ということでm(__)m

3/30(日)に開催された「Golang Cafe #23」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。

前回に引き続き、横山さんが作成されたOAuthのGoソースを各自で整理する会となりました。前半の30分ほどは「#24 に参加するならば?」といった話をしていました。

自分は似たような処理をまとめる方向で作業を開始。関数化などに挑んでいましたが、途中で関数化するメッシュが定まらなくなり、何度も同じところを書き直しているうちに時間となりました。

敗因は「森を見ずに木を切り始めたら」かと。OAuthの学習ができていればもう少し余裕を持ってファイル全体を眺めた上で手を入れられたのではないかなぁ、と。あとは自分のコーディング判断のブレっぷりに少々悲しくなりました(T_T) がんばれ自分。

横山さんや萩野さんのブログも是非ご覧下さい。


次回の「Golang Cafe #24」は「GDG DevFest Japan 2014」のセッションの一つとして開催されます。(この記事を書いている時点では「開催されました」ですね ^^;)

私は悩んだ挙げ句、#24 は欠席とさせて頂き、同時間帯の「Dart + StageXL」のセッションを選択させて頂きましたm(__)m