2014年2月27日木曜日

Golang Cafe #18

2/23(日)に開催された「Golang Cafe #18」に参加...できませんでした(T_T)

今回は、OAuth 2.0クライアントのgoauth2パッケージと横山さんのサンプルを使ってGoogle APIへのアクセスを試みたようです。

TogetterをまとめているとGoogle App Engineのappcfg.pyについてのツイートがちらほらと。何のことかとソースを見てみようとしたら、2種類ありました。


コード量の差、あり過ぎ...前者の話だと信じておきます(^^;)

[2014.03.02] 消えたコード(?)はwrapper_util.pyとして別ファイルになっていました。

早速GAE 1.9にアップデートしたら、前者の方はコード量が減っていました(@o@)

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


次回は「Twelve Go Best Practices」を読み進めるようです。次回こそは参加だ!

2014年2月19日水曜日

Golang Cafe #17

2/16(日)に開催された「Golang Cafe #17」に参加してきました。

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

今回はosのサブパッケージ(exec, signal, user)を、横山さんのサンプル(exec, signal, user)にて確認しました。

各パッケージの機能は以下の通りです。

  • exec - 外部コマンドの実行
  • signal - シグナルの通知と停止
  • user - アカウント情報の取得

Goでも外部コマンドを実行できることを学べました。exec.Start()は実行したコマンドの終了を待たず、exec.Run()はコマンドの終了を待ちます。userはアプリの認証やアクセス権限の判断材料に使えそうです。今回はWindowsでも情報を取得できました。

終盤は「ぷちクロスコンパイル大会」になりました。萩野さんはWindows 7 64bit上で32bitのバイナリー作成に挑まれました。gccが別途必要だったりしましたが、無事に作成されました。私はOS X 64bit上でLinux 64bitのバイナリー作成に挑みましたが、横山さんに紹介して頂いたこちらのサイトの手順ですんなりと行けました。

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


次回は公式パッケージから離れてgoauth2の予定です。私はOAuthを学習していないので興味津々なのですが、日中は用事があるため、順調なら途中から参加、ダメなら欠席(T_T)となります。
# 欠席でもトゥギャり作業は行いますので、どしどしツイート願いますm(__)m > 参加者各位

2014年2月14日金曜日

第23回勉強会@岡山

2/11(火)に開催された「第23回勉強会@岡山」に参加してきました。

メインテーマは「Dart」言語のハンズオンということで、以下の点に興味を持って参加させて頂きました。

  • 新しい言語なので、何が出来るのか知りたかった。
    (2013年11月に1.0、2014年1月に1.1がリリース)
  • JavaScriptとの違いを知りたかった。
  • AngularJSと絡められるらしい。

2014年2月は「Dart Flight School」として世界規模で展開されており、本勉強会は、日本の岡山会場と位置付けられていました。

勉強会の流れ

1. ウィエルカムムービーの上映

会場では日本のスタッフの方が翻訳された日本語テロップの付いたムービーが流れました。

Dartはプラットフォームである」という言葉が印象に残りました。

2. 開発環境(Dart Editor)のインストール

開発環境は、IDEである「Dart Editor(Eclipseベース)」、JavaScriptに変換する「dart2js」、Dart VM搭載の「Dartium(Chromeベース)」で構成されていました。

プロジェクト作成時などに「pub」コマンドで自動的に関連するライブラリーがダウンロード&インストールされるのは便利です。(Editorの設定で無効にもできます。)

3. Dartチュートリアルのハンズオン

実際にコーディングする箇所がハイライトで表示されていたり、解説の英文も読みやすく、全体として「進めやすい」と感じました。

個人的にはコーディングに時間がとられてしまい、じっくりと内容を理解する余裕がなかったので、再度、自分のペースでやり直したいです。

4. 「AngularDartチュートリアルの解説

時間の都合でハンズオンではなく、講師の横山さんによるポイントの解説となりました。「AngularJS」を知らない方には少々難しかったと思います。

AngularJSチームが開発しているということなので、安心して使えそうです。

Chapter_07はアプリ実行前に「dart -c bin/generator.dart」コマンドの実行が必要でした。

本章のサンプルをJavaScriptに変換した参加者の方曰く「15,000行近くになる」ということで「これではモバイル環境には適用できないなぁ。」という声も上がっていました。

5. ユニットテストのハンズオン

unittestライブラリーを使った簡単なハンズオンでしたが、分かりやすかったです。

リンク

当日の様子は、Togetterの「第23回勉強会@岡山」からも知ることができます。

感想

実際に使ってみて、文法では「..(属性名の省略)」や「=>(returnの短縮)」や「アクセッサーはget/setを付ける(例:get age)」といった独自の表記もありましたが、JavaやJavaScriptを知っていれば、さほど違和感なく始められると思います。

属性を「_」から書き始めればprivate扱いになる点ではPythonっぽさを、そのスコープはライブラリー内という点ではGoっぽさを感じました。

あと、DartはWebブラウザー上で動作する言語だと思い込んでいましたが、サーバーサイドも記述できるという話を聞いて、少し驚きました。

触ったばかりなので、まだ何とも言えないのですが、引き続き、動向を追って行こうと思います。

新しいモノ好きな方やaltJSを模索している方などは、試してみては如何でしょうか?

p.s.参加者には公式グッズを頂けるらしかったのですが、発送が遅れて間に合わなかったそうです。(代わりに(?)参加者の方が持参されていた「白菜」を頂きました!w)

2014年2月12日水曜日

Golang Cafe #16

2/9(日)に開催された「Golang Cafe #16」に参加してきました。

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

今回はnetのメール系パッケージを、横山さんのサンプルにて確認しました。

net/mailパッケージは、メールメッセージ(ヘッダー、アドレス、ボディ)のパース(解析・検証)を行います。横山さんのサンプルソースではテストに使われていました。

メールの送信にはnet/smtpパッケージを使います。簡単にメールを送信するなら、
  1. smtp.PlainAuth()
  2. smtp.SendMail()
で実装できますが、実運用の際はメールセキュリティを考慮する必要がありそうです。

サンプルにはありませんでしたが、メールにファイルを添付する際はmineパッケージやmime/multipartパッケージにて、MIME(Multipurpose Internet Mail Extension)に対応します。

次回のパッケージを決める際、net/textprotoパッケージを覗いていたら、自己学習としてGoでメールクライアント(MUA:Mail User Agent)を作成中の萩野さんが拍子抜けされていたのが印象的でした。(どうやらゴリゴリと実装されていた模様...^^;)

詳細&技術な内容につきましては、横山さんや萩野さんのブログをご覧下さい。


次回はosのサブサッケージ群(exec,signal,user)の予定です。

[2014.02.14] 萩野さんのブログ(その2)へのリンクを追加しました。
[2014.02.16] 横山さんのブログへのリンクを追加しました。

2014年2月4日火曜日

Golang Cafe #15

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

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

今回はnetパッケージで、横山さんのサンプル(tcp, udp)にて動作を確認しました。

TCP

Delphiでソケット通信アプリを作成した経験があったので理解しやすかったです。

TCPの流れは、サーバー側はnet.Listen()とListener.Accept()で待ち受け、クライアント側はnet.Dial()で接続し、それぞれ取得したConnインターフェースでデータの入出力を行います。

サーバー側では、受け取ったConnをGoroutineで並列処理するのが"Go通"ですq@w@p

netパッケージのOverviewがシンプルな骨格を提示してくれています。

UDP

用意されたサンプルが動作しない状態だったため、各自で動作するようにもくもくしました。結果的にはTCPのサンプルをコピーしていたため、コネクションレスであるUDPで双方向通信を行う実装になっていたのが原因でした。

UDPの流れは、サーバー側はnet.ResolveUDPAddr()とnet.ListenUDP()で待ち受け、クライアント側はnet.ResolveUDPAddr()とnet.DialUDP()で接続し、それぞれ取得したUDPConnインターフェースでデータの入出力を行います。

サーバー側では、受け取ったUDPConnのReadFrom()/ReadFromUDP()メソッドにてバッファーを用意しておく必要があります。

萩野さんが紹介して下さった「Strange behaviour of golang UDP server」で理解が進みました。

後半

Git&GitHub講座になりました。私はGitを触れておらずGitHubもアカウントを取得しただけという状態だったので、本勉強会を通じて習得したいところです。

リモートリポジトリー上のサンプルソースが更新され、ローカルのソースを最新化するために、以下のgitコマンドを実行させました。

  • git status
  • git reset --hard
  • git pull

横山さんの「golangcafe」を自分のGitHubにforkするため、以下の手順を実行しました。

  1. GitHubにサインインする。
  2. forkしたいGitHub上のリポジトリー(横山さんの「golangcafe」)を開く。
  3. 画面右上の「Fork」をクリックする。

詳細&技術な内容

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


[2014.02.07] 横山さんのブログへのリンクを追加しました。
[2014.02.11] 萩野さんのブログへのリンクを追加しました。