2015年1月4日日曜日

2015年の目標

今年は、まだ4月以降の予定が立たないので非常に目標をたてることが難しいのですが、
ひとまず、現段階での目標を設定しておきたいと思います。

GDG中国

GDG中国の活動に関しては、実は2月のイベントを予定していましたが、いつもの岡山県立図書館がすでに2月の土曜日が全て埋まっていて、困った状況に陥っています。
ただ、前回遠方から講師をお呼びした事を考えると、次回は中国地方の方で回したいなと考えているので、余裕のある日程を設定(3月中旬?)して(それまでは、GDG Cafeとか、Golang Cafeでの延命措置…)きっちりやろうかなと思っています。
ただ、この時期のイベントは結構難しいんですね。年度末に向けて忙しくなるので…。

ということで、「生活習慣」と化した毎週の小さいイベントをこなすという事に重点をおいてみようかなと考えたりしています。
(これについては、また別途エントリーを書こうかなと思っていますが…)

それから、この2年間ずっと思っていた、「発表の質の低下」についてもしっかり考えて対応しないといけないと思っています。そのためにも毎週の小さいイベントが支えになることがわかってきたので、イベントでの成果などから発表の内容を考えていけたらと思っています。

当然、新しい技術が出てきたらそれを触る回も作っていく予定です。そのためのGDG Cafeと思っています。(名前はこれでいいのか?という気もしますがまあ良いでしょう)
そろそろbetaを取ろうかなと思ったり。

仕事

仕事に関しては4月の赴任先がわからないのと、1〜3月はいろいろと忙しくなる時期なので難しいかもしれませんが、ひとまず、「勤務時間の20%ルール」というのを導入して(以前もこんなことを言ってダメだった気がするけど…)IT技術の時間を作ろうと思っています。
そこで、今の職場でも「違和感のない」技術を考えると、

  1. Raspberry Pi
  2. arduino
  3. Android
  4. iPhone
  5. VBA + Access
ということで、組み込み機器のハックに勤しんでみようと思っています。ただ、Google技術全く絡まないのもあれなので…。少し工夫しようと思います。

4月以降に(覚えていれば)目標を再設定しようかなと思っています。
少しでも時間を作ってIT技術に触れる時間を長くしたいなと思います。

技術関係

ほぼ1人で開発することしかなくなるので、今年は「チケット駆動開発」というものに取り組んでみようと思います。
ただ、1チケット1commitを貫くだけになりそうではありますが、昨年はテストにこだわったので(?)今年は、チケット駆動開発を実践してみたいと思います。

それから、できれば毎月1つはqiitaか、blogに技術情報を投稿する。というのも目標に掲げてみたいと思います。
全ては、発表の質を上げるというところに繋がるようなものですね。

まとめると

GDG中国での活動の質を上げる。ということですね。

2014年12月31日水曜日

2014年を振り返る

今年もあと8時間程度となりました。

家の大掃除に集中していたのでこのタイミングになりましたが、
今年も1年を振り返っておきたいと思います。

2014年のGDG中国のイベントに関して。

  1. 2/11(火祝)第23回勉強会@岡山(Dart Flight School)
  2. 5/10(土)第24回勉強会@岡山(Android Studio/Android Wear/Go/Managed VMs)
  3. 6/21(土)第25回勉強会@岡山(Android Wearハッカソン)
  4. 7/19(土)GDG Devfest Japan 2014 Summer(Google I/O報告会)
  5. 12/6(土)第26回勉強会@岡山(Android Wear/AngularJS/UI/UX関係+LT2本)
  6. Golang Cafeを毎週(京都に行ったり、Google東京オフィスに行ったり…)
  7. GDG Cafe #1を試行開催(2回)
個人的な講師など
  1. 4/6(日)GDG Devfest Japan 2014 Spring(Go/Google Apps Script)
  2. 8/23(土)AngularJS勉強会 #2(LTをしてきました)
  3. 9/20(土)OSC広島(Google App Engine)
  4. 11/22(土)GDG Devfest Kyoto 2014(Go)
  5. 11/23(日祝)第6回中国地方DB勉強会(Bigquery)

仕事関係でコミュニティの活動に影響が出るかもしれないのが、採用試験に合格したので4月には職場が変わってしまうかもしれないということと、場所の問題で、イベント開催が厳しくなる可能性も出てきました。これはGDG中国の活動を継続するということに関しても考えないといけなくなるかもしれません。
それは現時点では未定なので何も言えることはないのですが…。

それから、昨年も感じていた事でしたが、発表の質が非常に悪くなってしまっている感じがしているのと、技術を追いかけるという作業をする時間が取れなくなってきているのも強く感じる1年でした。(これはどうしても仕事の関係上仕方がないので…)

ですが、GDG中国の活動というのは今後も継続したいと思っているので、何らかの方法でイベントの開催と活動の継続をしたいと思います。
そのための施策がGDG Cafeだったり、Golang Cafeだったりします。今のところ特に問題があるということもなかったので大丈夫でしょう。
最悪、日曜日のイベント開催も考えればいいだけの事ですし…。

さて、2013年を振り返った結果や、2014年の目標を見た感じからの振り返りもしておきたいと思います。

GDG中国のスタッフの立て直し→できてません。私自身が迷っていることではあるけど、大きなイベントの時に自分が動けない。という状況が今年は発生しました。そういう時にスタッフにお願いするのは良いと思うのだけど、自分が何もしないというのが正しいかどうかは少し考えているところです。
なので、来年のDevfestなど、他のGDGと連携して開催するようなものへの参加はできなくなるかもしれません。(むしろ、今のところ不参加の方向で考えています)

Golangが盛り上がる→その通りだったと思います。こちらもGolang Cafeでずっと最新の情報を追いかけてきたのですが、実際にアプリケーションを作ったりする事ができなかったのはちょっと残念でした。
来年もGDG CafeやGolang Cafeを継続する中でアプリケーションを実装するということをやってみたいと思います。

GDGでやってみたいテーマ→大体やったかもしれない。
Dart、Google App Engine、AngularJSはしっかりやれたと思います。よく考えるとMapsとかほとんどやれていないので、どこかでやってみたいですね。

残念な点は、他のコミュニティのイベントにほとんど参加できなかった。
いろいろなコミュニティの方と話をしたりする機会が取りにくくなっているということだと思うのですが、土曜日に仕事の用事が入ることが増えてきて、その時にイベントと被るという事がありました。それは非常に残念だったので、来年は、他のイベントにも参加できるように調整したいと思います。

来年の目標はまた来年になってから設定したいと思います。

2014年もあと少しですが、GDG中国のスタッフ、イベント参加者の皆さん、その他今年お会いした方々には大変お世話になりました。来年もよろしくお願いいたします。

2014年12月13日土曜日

第26回GDG中国勉強会を開催しました。

第26回勉強会@岡山を開催しました。
今回は、Android Wear/AngularJS/UI/UXとLT3本(GDG中国のこと/MIT AppInventor2/Android Studio)
という、豊富なコンテンツを提供できました。参加者の皆さんのおかげです。ありがとうございました。

特に、AngularJSのノウハウを発表して頂いた、@armorik83さんの資料は、いろんな方が注目されていて、勉強になるというコメントも見ました。
今後の、Angular2を見据えたコードを書くというのが、仕様がガラッと変わるということで、重要なポイントになりそうです。

久しぶりにAppInventorの話であったり、AndroidでJUnit4を使うという話も新鮮で良かったです。

私はLTでGDG中国の来年のイベントの計画について話をしました。今年は色々なことがありましたので、来年のコミュニティ運営に影響が出そうだったので発表をしました。
4年半の運営をしてきて、これまでは、割りとフットワークが軽かったのですが、少しずつそうもいかなくなってきて、特に、この1年半はコードを書く量と、時間の確保が減ってきて、これまでのような活動ができなさそうな予感がしています。
今後は今の職業柄、異動もありますので、異動先によってはイベントの開催自体が難しいという状況に陥ってしまう可能性もあって、事前に話をしておきました。

と言っても、毎年適当に「やりたい時にやる」というスタイルを貫いていますので、GDG Chugokuがリストから消えない程度には活動を続けようと思っています。
(次は2月に開催。その後はひとまず未定)

今回は、忘年会的なノリのイベントを目指したものでしたので、来年やってみたいものを紹介しようと思います。
あくまでも個人的なもので。



Compute Engineのお陰で私もクラウド上にサーバを作る事ができるようになったので、AWSと比較されていますが、GCEもお試し下さい。

ということで、今年も残り少ないですが、良いお年をお迎えください。
来年のGDG Chugokuのイベントでお待ちしております。

第6回中国地方DB勉強会で発表してきました。

第6回中国地方DB勉強会に参加してきました。

この勉強会は主にRDBMS(PostgreSQL/MySQL/SQLServer/Oracle…)とか、RDBに関する技術を扱っているようです。が、今回は「クラウド」がテーマになるということで、呼んで頂く事ができました。

私の発表資料はBigQueryとCloudSQLの紹介です。技術的な話題というよりは、「そもそも使っている人がいないだろう」というのを想定して内容を決めました。

話の中心としては、「大量のデータを大量のPCで力づくで短時間にデータを解析してしまうサービス」ということで、BigQueryを紹介し、「クラウド上にあるMySQLでメンテナンスコストと移行コストを下げよう」という所を話したつもりです。

BigQueryは、少ない件数でも3秒〜5秒かかってしまいますが、10万件でも、100万件でも3億件でも3秒〜5秒で結果を返すという特性を持っています。キャッシュの仕組みもありますが、やっぱり3秒程度はかかります。(というデモはやりました)

ただ、BigQuery自体は単体でも使えるので、Googleのサービスと組み合わせなければいけないわけではなく、AWSだろうが、Herokuだろうが主となるサービスは、自由に使って頂いて、BigQueryが使えるのであれば、BigQueryにデータを送るようにしていただければそれで良いと思っています。大量のデータを後で解析する必要がある場合は、ぜひ、BigQueryを導入していただけるとうれしいです。

想定外だったのが、AWSの発表をされた玉川さんがBigQueryのことにも詳しく、私のセッション中にフォローのコメントを頂いたりと、「俺じゃなくて良かったんじゃね?」という感じにもなったのですが、これは私の勉強不足と言わざるを得なかったです。

Cloud SQLの方ですが、中身は、MySQL5.5ですので、ローカルでMySQLを使っている方は特に苦労することはないと思いますが、スケールしませんので1台のMySQLがクラウド上で動いているだけ。というもので、説明することが少なかったので、データベースの作り方と、Read Replica(beta版)の紹介をしました。

本当は、BigQueryもCloud SQLも詳細まで説明すればよかったのかもしれませんが、私自身があまり使っていない(デモ、サンプル程度)ので事例だったり、ヘビーな使い方を紹介する事ができなかったのは残念です。

2014/11/23時点で、中国地方にBigQueryとか、Cloud SQLを本格導入している人はいないだろうと思っているので、まずは利用者を増やす所から始めないと事例は増えないだろうなーと思っています。
(もし使っている人がいれば、+Takashi Yokoyamaまでw)

また何かのタイミングでBigQueryの話をしてみようと思います。

2014年11月30日日曜日

GDG Devfest Kyoto 2014で発表してきました。

もうすでに、公式のイベントレポートが上がっているのですが、私も参加してきたので書き残しておきたいと思います。

皆さんSlideshareで公開されているようですが、私はGDGのオーガナイザーですから、Google Presentationを使って資料を作っています。その資料は以下のURLから参照して下さい。

https://docs.google.com/presentation/d/1nDTrzQ5etYb_7F2GhumY2pNO3KsRWp9TpTjd00g1Dtc/edit?usp=sharing

今回は依頼を受けた時に、私の前に何人か発表するということがわかっていましたので、初心者向けというわけにもいかないだろうなと思ったので、Golang Cafeで1年間いろんなことをやって来ましたので、自分でも整理するためにGolang Cafeで特に議論することがあった部分について紹介しようと思っていました。

が、12月にリリース予定のGo1.4についての話題が出てきて、すでにrc版になっていましたので、ここは早く1.4の内容について紹介するのがいいだろうと思って、半分はこれまでの内容で、半分を1.4の内容にすることにしました。(実際には思いつかなかった(≒思い出せなかった)ということもあるのですが…)

Go.1.4の内容に関してはBlogに書いていませんが、Golang Cafe #55でやった内容をそのまま資料にしています。やっぱり一番衝撃的だったのは、Androidの正式サポートでしょうか。言語仕様からして合わないだろうと思っていたのですが、しっかり入れてきました。動きも申し分なく動いていますし、良さそうに見えます。
後は、ドキュメントがどれくらいでてくるか。ということと、NDKの仕様が変わらないことを祈っています。
(当日の発表前にオリジナルのデモを作ろうと頑張っていたのですが、ちょっと間に合いませんでした。私のNDKのノウハウの不足と時間不足でした。)

今日のGoConの情報で思い出したけど、何らかの書き込み時にWrite()、Flush()、Close()の順番で呼び出すけど、Close()でエラーのチェックをしないと困る時があるというのは入れておくべきだったと思いました。
実は、実装によっては、パッケージ内部で以前発生したエラーをずっと持っていて、Close()を呼び出したタイミングでエラーを返すという場合があるので、必ずClose()はチェックするようにしましょう。というものです。
そうだったなと思い出すけど、なかなか実践できていないというのが現状かなと思いました。

貴重な経験を頂きましてありがとうございました。また、何かのタイミングでGDG京都のイベントに参加できれば、その時はよろしくお願いします。

2014年11月16日日曜日

Golang Cafe #54を開催しました。

Golang Cafe #54を開催しました。今回は、Go1.4 Release Notesを読み進めました。

今回、読み進めた所は、以下の点です。

  • Changes to the language
    • For-range loops
    • Method calls on **T
  • Changes to the supported operating systems and architectures
    • Android
  • Changes to the compatibility guidelines
  • Changes to the implementations and tools
    • Internal packages
    • Canonical import paths
    • Import paths for the subrepositories
    • The go generate subcommand
    • Change to file name handling
    • Changes to package source layout
  • Performance
  • Changes to the standard library
    • Major changes to the library
      • syscall
    • Minor changes to the library
      • Testing周りを中心に見ました。

個人的に読み進めた部分をおさらいしたような流れになってしまいましたが、再度読み返してみて、わりといろんな所が変更になっていると思います。

For-range loopsの変更はブランク演算子("_")を書かなくても良くなった点が変更になっています。
次に、ポインタのポインタのメソッドを呼ぶ事が1.3以前では呼び出せていたものが、コンパイルエラーになります。

参考コード(Go Playgroundなので、1.4に置き換わるまでは動作します。)
http://play.golang.org/p/JTHWyVJ3V-(こちらは1.4でもビルドが通る)
http://play.golang.org/p/k-GxLYJOPO(こちらは1.4からコンパイルエラー)

以前のGolang Cafeでも話題になったように、ポインタをあまり使わないのであれば特に影響はありません。

Go1.4からのAndroidのサポートが増える件については、Qiitaの記事を見て動作確認をしてみてください。

いろいろ変更になっていますが、1.3以前までの互換性のガイドラインに変更はありません。(実際、1.0系/1.1系を使っているという方は、あまりいないかもしれませんが…アップデートを忘れている事例を除いて…)

他に増えたのが、
内部パッケージ(Internal Package)でパッケージのディレクトリ内に"internal"というディレクトリを作ると、同一パッケージ外から参照する事ができないパッケージを作ることができるようになります。

それから、Canonical Import Paths(標準的なインポートパス)ということで、package文の末尾にコメントを記入することで、ローカルのディレクトリ構成が正しい(≒go getしたものが正式である)時でないとコンパイルエラーにすることができるようになりました。
リポジトリもいろんなものがあるので、リポジトリを移設することも考えられるかもしれません。そういう時に古いリポジトリを参照しているといつまでも最新バージョンに置き換えられないことになるので、強制的にアップデートさせるのにいいかもしれません。
ただし、go get -uとかして、最新のコードが取得されていないとダメですが…。

Goの公式パッケージのリポジトリがGoogle Codeからgolang.orgに変更されます。
来年の6月1日から正式移行のようです。

go generateコマンド(実際には、コメントに書かれたコマンドを起動するだけのもの)が追加されました。最初は「ライブラリ作者には便利」とだけ認識していましたが、ビルド時に実行したいコマンドを書いておくことで、任意のコマンドを実行する事ができます。(大体はソースコードの自動生成で利用されることと思いますが…)

以前は、windows.goとか、amd64.goというファイル名でwindows専用だったり、64bit専用のソースコードとしてコンパイルされていましたが、これからはそれができなくなります。

あとは、テストコードを書く時に、これまでだと、全てのテストにsetupの処理と、teardownの処理を書かなくてはいけませんでしたが、Go1.4でTestMain()が追加になったので、全てのテストに共通した準備と後処理を書く事が可能になりました。Go本体だと、テスト後にメモリリークが発生しているかどうかのチェックを行うという使い方がされていました。

次回(これからですが)は、Goで大量データを処理するコードを書いて実行する。
ということをテーマに進めて行く予定です。

2014年11月9日日曜日

Golang Cafe #53を開催しました。

Golang Cafe #53を開催しました。

今回は前回に引き続き、isucon4の予選問題に挑戦しました。Golang Cafeということで、GoのWebアプリケーションを置き換えたりしながら速度アップを図っていきました。

最初の状態のスコアは以下のようになりました。

$ ./benchmarker b
18:12:29 type:info message:!!! DEBUG MODE !!! DEBUGE MODE !!!
18:12:29 type:info message:launch benchmarker
18:12:29 type:warning message:Result not sent to server because API key is not set
18:12:29 type:info message:init environment
18:12:34 type:info message:run benchmark workload: 1
18:13:34 type:info message:finish benchmark workload: 1
18:13:39 type:info message:check banned ips and locked users report
18:14:04 type:report count:banned ips value:4
18:14:04 type:report count:locked users value:2568
18:14:04 type:info message:Result not sent to server because API key is not set
18:14:04 type:score success:6620 fail:0 score:1430

successがリクエストをして正しい結果が返ってきた回数で、failが間違った結果が返ってきた回数です。実際には最後のScoreの値で競っていくようです。

このisuconのアプリケーションはmartiniが使われていたので、gorillaに書き換えてみました。

$ ./benchmarker b
22:40:23 type:info message:!!! DEBUG MODE !!! DEBUGE MODE !!!
22:40:23 type:info message:launch benchmarker
22:40:23 type:warning message:Result not sent to server because API key is not set
22:40:23 type:info message:init environment
22:40:29 type:info message:run benchmark workload: 1
22:41:29 type:info message:finish benchmark workload: 1
22:41:34 type:info message:check banned ips and locked users report
22:41:59 type:report count:banned ips value:4
22:41:59 type:report count:locked users value:2569
22:41:59 type:info message:Result not sent to server because API key is not set
22:41:59 type:score success:6760 fail:0 score:1461

Golang Cafeの最中では、エラーが取れなかったのですが、その後すぐに原因が分かったのでエラーを修正した結果です。Scoreが31上がりました。やっぱりreflectionを使うとスピードがどうしても遅くなるようです。

次に、Golang Cafe #50の時に教えてもらった、gojiに書き換えてみました。

$ ./benchmarker b
23:18:46 type:info message:!!! DEBUG MODE !!! DEBUGE MODE !!!
23:18:46 type:info message:launch benchmarker
23:18:46 type:warning message:Result not sent to server because API key is not set
23:18:46 type:info message:init environment
23:18:53 type:info message:run benchmark workload: 1
23:19:53 type:info message:finish benchmark workload: 1
23:19:58 type:info message:check banned ips and locked users report
23:20:23 type:report count:banned ips value:6
23:20:23 type:report count:locked users value:2567
23:20:23 type:info message:Result not sent to server because API key is not set
23:20:23 type:score success:6920 fail:0 score:1495

更に、スコアが34上がりました。gojiは軽量フレームワークなので処理スピードが早いようです。

ここまでのソースコードはgithubにpushしてありますので興味があればどうぞ。
ソースコードをそれぞれで修正したかったので、branchを分けています。
masterは何もしていない状態なので修正後のものが見たい時は、branchを切り替えて下さい。

Goのフレームワークを変えるだけでもかなり差が出ることがわかりましたが、Sessionの保存にgorilla/sessionを使っているので、データがCookieに全て保存されて通信されてしまっているのでその辺りも修正すればもう少しスピードアップが見込めそうな気がしています。(ローカルでのテストなので通信コストは低いけど…)

次回は、リリース間近のGo1.4のRelease Noteを読み進める予定です。