カテゴリー
勉強会

ぐんまRuby会議01に参加したよ

ぐんまRuby会議01
ぐんまRuby会議01 : ATND
日時 :2013/03/09 13:00 to 18:00
会場 :高崎市総合福祉センター

日頃お世話になっているGunma.webにて開催を知り、僭越ながら参加しました。Rubyには興味あるのですが、なかなか学習する時間が取れないので Hello,world 止まりの知識。今回は群馬で初開催という事もあり、ビックな方々の参加多数のようです。後で知ったのですが。

ぐんまRuby会議01のテーマは puts "Hello, World" だし、Gunma.webで知り合いの方も運営手伝っているし、知っている人もチラホラいるので軽いノリでエントリーしたのですが、諸事情あって少しだけお手伝いする事に。急に緊張して来ましたよ。

ランチセッション

ぐんまRuby会議01 - 群馬名物:鳥めし竹弁当(登利平)を食べる会 : ATND

群馬名物の登利平「鳥めし」を食べる会です。

実は高崎駅にはたかべんの「鶏めし弁当」が売られているのですが、賛否はあるものの事実上群馬の「とりめし」と言えば登利平となっています(たかべんの方が先に販売されていたようですが )

間違えた方もいらっしゃるようで...

高崎駅構内にはたかべんさんのものしか売っていないそうです(改札出ると登利平もあります)登利平の鳥めしはリーズナブルな「竹」が一番美味しいので今回逃した方は次の機会に是非!

本編

最初はYuguiさんによる講演「Mad Web Programmer」Ruby書く人なら常識なのかもしれないのですが、通称キリン本の著者との事。どんな方なのかと思っていたら意外な人物像で、ビックリしました。重量感のあるお話でした。

須藤功平さん「プログラマー」 "同じ事でつまづく人を少なくしたい。"が印象的。コードを書くことが好き。このブログも間接的にはそんな感じで書いている...いや、自分がまたつまづかないようにだった。

大場光一郎さん「サラリーマン」 球団持っていない方の会社の人。ペアプロならぬトリオプログラミングが最高でした。いや、するのは嫌かも...。

愛を叫んだケダモノ

プラチナスポンサー「ツルマウソフト」早川真也さん。社会貢献として取り組んでいるという入力デバイスの話が気になります。人生で2番めのピークとの事。劇場版は...

寺嶋祐也さん。温泉は近い。勉強会の会場は遠い。外貨の獲得。実は結構有効(重要)だと思っています>外貨の獲得。Middleman勉強会ではお世話になります。

LT

関 将俊さん。アーティスト。OSSは難しい。アーティスト志向。自分のために書く。かっこいい。

g新部 裕さん。g新部のgは群馬のg。オープンソースって言うな!で、ちょっとビクってなりました。

こしば としあきさん。PadrinoというRubyのフレームワークのお話。

五十嵐邦明さん。東京と群馬の人口17倍違う。群馬で3人集まる勉強会は成功。

斎藤ただしさん。最初のRuby本の経緯のお話。

寺嶋章子さん。「おれと嫁とRuby」の人の嫁さん。Rubyで育児Hack。馴れ初めの地が伊香保グリーン牧場とは!

所感

Ruby会議で特に感じたことは地域開催にも力を入れている、という事。Rubyが盛り上がっている背景にはこういうバックエンドがあっての事なのかな、と思いました。

実行委員長の南齋さんをはじめ、運営スタッフの方々、guRuby、toRubyの方々、お疲れ様でした!

カテゴリー
勉強会

MTCafe Gunmaに行ってきたよ

MTCafe Gunma 2013
2013年03月02日 会場:カントリーホテル前橋 1Fティールーム「けやき」

Gunma.webにてLTされていた藤本 壱さんが主催のMTcafe Gunmaに参加して来ました。主催の藤本さんですが、つい先日、改訂新版スタイルシートポケットリファレンス[CSS3対応]を出版されたとの事で、おめでとうございます。

ブログエントリーを見ていたら、「改訂新版 スタイルシート ポケットリファレンス 〔CSS3対応〕」プレゼントキャンペーン を行なっているとの事で、ついでみたいな感じになってしまいますが告知してエントリーしてみるテスト。

さて本題です。

MTcafeはMT=Movable Typeのライトなイベントであるとの事です。Movable TypeはPerl製という事もあり、以前興味があった時期があったのですが、お値段がそこそこ良かったのでちょっと敬遠しているうちに使う機会を逃していました。

これを機に少しでもMTに触れられれば、との思いでおじゃまさせて頂きました。

まずはSix Apartの長内さんのプレゼンでは群馬の思い出から始まり、MTとは何か、最近のMTの動きを紹介して頂きました。Six Apartは現在日本法人がメインで活動しているそうで、セブン-イレブンに例えてこれからの展望を話されていました。

WPと比較しての優位性で公的な機関での利用というのが挙げられていて、入札で優位というお話が印象に残りました。良い悪いは別にしてオープンソースの利用を敬遠しがちな公的機関。国内でサポートの厚いMTが優位であるというのは当たり前ではあるかも知れないけど、思いつかない事でした。

続いて藤本さんのプレゼンでは、MTのプラグインのお話。WPconnectorというプラグインで、WordPressのエントリーをMovableTypeで管理しようというものらしいです。

どちらもMySQLを使っているのでDBにアクセス出来れば情報の取得は可能と思いますが、実現するためにはいろいろなロジックを実装する必要が有るようです。MTで使われているO/Rマッパー(MT::Object)を継承してサブクラスを作っていくとの事ですが、WP側の操作もボタンひとつで出来るように作られているそうです。ヌカリがありません。

気になったのはデモを動かしている時にlocalhost:5000だった事。きっとstarmanで動かしていたのだと思うのですが、リモートもstarman(+Nginx等)じゃダメなのかが気がかりなところです。実際に自信で試してみないと分かりませんね。

タカハシさんのプレゼンはテンプレートを作ればXMLで書きだすという事も出来るというお話でした。このXMLで書きだしたファイルをInDesign等で編集することによってwebだけではなく紙メディアでも使うことが出来るので幅が広がるとの事でした。XMLで書き出せばEPUB化して電子書籍も作れるかもしれません。

しつこく動的利用の事を質問するボクに対してオノザキさんが解の一つであるDynamicMTMLについてお話して頂きました。簡単に言うとSSIのような仕組みでテンプレートで書きだされたHTML(MTML?)のある部分だけ動的に生成する、というものみたいです。ただし、解の1つなので方法は1つではないとの事。ベストプラクティスは使う状況によって異なるみたいですね。

今回の参加をきっかけに、まずはMovableTypeを設置してみて色々イジってみようと思います。習うより慣れろ!ってね。

カテゴリー
勉強会

群馬でアルゴリズムを学ぼうに参加したよ

2/16 邑楽町公民館にて開催された 群馬でアルゴリズムを学ぼう : ATND に参加して来ました。

ASCIIから出版されているアルゴリズムを学ぼうが教科書で、@tsurumau先生のもとで学びます。今回は「第1講 アルゴリズムと計算量」

前日に軽く読む程度で参加したのですが、実際の内容は第1講から深い内容でした。普段アルゴリズムを考えたりする深いコーディングはしない(主義)なので、頭から煙が出る勢い。

aのk乗をmで割った余りを求める関数、int powmod(int a, int k, int m)を書け。ただし、a,k,mは1以上の整数で、すべてJavaのintの範囲に入るとする

このような問題でしたが、Javaで書かれた例がすでに深いと気が付きませんでした。このような問題は単純にループで回す事で実現可能ですが、アルゴリズムを使えば一瞬で計算が終わる、という。

家に帰って写経してみました(Perlですが)

k=2の31乗-1で試した結果。
https://gist.github.com/4971027.git

use strict;
use warnings;
use Benchmark qw(:all);
 
sub powmod1_1 {
  my ($a, $k, $m) = @_;
  my $t = 1;
  for (my $i = 0; $i < $k; $i++){
    $t = ($t * $a) % $m;
  }
  return $t;
}
 
sub powmod1_2 {
  my ($a, $k, $m) = @_;
 
  if (int $k == 0){ return 1; }
  my $t = powmod1_2($a, $k /2, $m);
 
  $t = ($t * $t) % $m;
  if ($k % 2 == 1){
    $t = ($t * $a) % $m;
  }
  return $t;
};
 
my ($a, $k, $m); 
$a = 2; $k = 2**31-1; $m = 5;
my $results = timethese(1, {
  'powmod1_1' => sub { powmod1_1($a, $k, $m); },
  'powmod1_2' => sub { powmod1_2($a, $k, $m); },
});
 
cmpthese($results);
 
 
# // 結果 //
Benchmark: timing 1 iterations of powmod1_1, powmod1_2...
 powmod1_1: 541 wallclock secs (539.17 usr +  0.34 sys = 539.51 CPU) @  0.00/s (n=1)
            (warning: too few iterations for a reliable count)
 powmod1_2:  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
            (warning: too few iterations for a reliable count)
            s/iter             powmod1_1             powmod1_2
powmod1_1      540                    --                 -100%
powmod1_2 1.00e-15 53951000000000000000%                    --
[Finished in 540.9s]

MacBook Core 2 Duoなので最近のマシンと比べると遅いのでしょうね。それはともかく、この歴然の差。アルゴリズムすげーぜよ。

また、二分探索というアルゴリズム(の基礎)も初めて知ったのですが、面白い考え方でした。仕組みを聞けば単純だけれど、思いつくかと言われれば簡単にはいかないでしょう。こういう知識があるかないかだけでも大きく違うんでしょうね。

今回の勉強会では、普段なかなか手を出さないことに触れる事ができました。数学の知識とか、忘れていることも多いし、知らないことも多い。すごく勉強になりました。先生、次回もよろしくお願いします。

ところで、ソースコード書く男の人って皆んなこんなことやっているのでしょうか?

カテゴリー
勉強会

Gunma.web #12に行ってきた

今回のGunma.webは旧暦でいう大晦日開催。高コンの前座ということもあり、過去最大の参加人数33名(!)となりました。やはり年の瀬となると沢山の人が集まるのは当然なのでしょうか。LTの数も9本とこちらも最多記録。今回はバトル形式らしいです。

開催からやたら時間が経ってしまいましたがレポートです。

LT/発表一覧


「正解がわかりません」 LT @korogaru さん

A/Bテストのお話。

LT初という事でバトル前座を希望したものの思惑とは異なり一発目の発表となってしまったというド緊張必至の順番。

A/Bテスト。サービスリリース後、どう改善すればより良い結果になるのか。テストでは分かり得ない、実際のユーザーの行動に基いて改善していくのに必要な方法。という認識。

A/Bテストを行う上では小さく始めてみることが大事との事。また、分析するデータもクリック率だけではダメで、コンバージョン率を意識しないとあらぬ方向へ行くことも。きちんとデータを取れば2、3倍は難しいが、1.2倍や1.3倍ならある。

個人的にはわりと大規模なサービスでないとなかなか難しいかな、と思っていたりします。いや、個人的なサービスしかしていないのでよくわかりませんが。質問にも出ていましたが、自社にエンジニアがいないと難しそうですね。

「正解がわかりません」

きっとそれでいいのです。人生に正解などありえないのだから...。


「vimをつくってみた」 LT @tsurumau さん

JavaScriptのフレームワークでvimを作ったというお話。

  • impact game engine
  • JSとHTML5でゲームを作る
  • 価格は99ドル
  • ブラウザで動作するのでデスクトップでもモバイルでも動作するみたい。調べてみたら、60フレーム/秒とか実現しているらしい。

    で、今回のvimはvi-impact。impactで作られたviって事みたい。

  • コマンド カーソルの移動と入力くらい
  • 独自なコマンド
  • 著作権考慮
  • ギリギリまで作業していたみたいで動かない機能が若干あったみたいだけど、デモが始まって...wwwwww。

    これは見ないとわかりません。ぜひデモを試してみて下さい!楽しいよ!
    vi-impact Github

  • :set impact
  • :set cat
  • は必見ですww
    ※どうやらUSキーボードじゃないと動作しないみたいです

    実装にはほとんどフレームワークの機能を使っていない、との事でこの方は一体どこを目指しているのでしょうか?

    PS.群馬でアルゴリズムを学ぼう お世話になりました!


    「Photoshopの自動処理で効率作業」 LT @caz0404 さん

    PhotoShopのアクションパネルで自動処理が出来るよ!というお話。

    解像度の変更、明るさ、シャープ等の作業を記憶しておいて、複数の画像に対して自動処理する事が出来る。また、フォルダ単位で実行も可との事。なるほど。

    あるアクションを無効化にしたり、途中でパラメータを指定出来たりとたくさんの画像を処理する時には便利そうです。画像処理系のソフトは中々使いこなすのが難しいですが、こんな感じで紹介してもらえるとスキルアップに繋がりそうです。

    初LTにチャレンジと言う事でしたが、スライドではなくムービーで発表するという一風変わったLTでした。絶対時間オーバーしないってこの事だったんですね。納得。

    個人的には高コン観戦しながらのお酒に行けなかったのが無念です。次の機会には是非。


    「モダンすぎる静的サイトの作り方」 LT @yterajima さん

    静的サイト生成ツールのMiddlemanのお話。個人的に非常に興味があるお話。

    CSSにはLess、Sass等のCSSプリプロセッサがあるけれども、HTMLはどうするか。

    非常に直面する事が多い問題です。閉じタグ嫌い←同意。ボクは結局HTML書くのですが...。

    Slimというテンプレートエンジンを使うとタグを使わずに済む。SlimはHamlを進化させたもの。Slim + Sassがおすすめ。でも、この組み合わせで作業しているとちょっとした悲劇が襲うことになる。

    Sass   →      convert to CSS
     ↑                     ↓
    convert to HTML ← Slim/Haml

    無限連鎖...。

    この解決策がMiddlemanという事です。middlemanとは static site jenerater(静的サイト生成ツール )の事で、静的サイトを作るためのツール群とでもいうのでしょうか。

    middlemanのドキュメントは英語なのですが、実は日本語訳を作ったとのこと。これで勝つる。
    http://middleman-guides.e2esound.com/

    ただし、これを使うにはターミナルという黒い画面(macのデフォルトでは白い画面ですが)を使う必要があります。ボクは使っているのでモーマンタイです。最近静的なサイト作り手を出す事が億劫になっているので、いいきっかけになればいいな。

    という事で、agatsuma.survive#02 おじゃまします。


    「エンジニアがTRPGをやるべき理由 〜隣り合わせの遊びと技術〜」 LT @parrot_studio さん

    TRPG = テーブルトークRPG。前回のGunma.webの時にちょこっと話が出ていましたが、自分は馴染みがなくどんな感じでプレイするのか今だにイメージが出来てません。

    GM(Game Master)と呼ばれる人がシナリオを進めるようです。使うものは紙と鉛筆とサイコロ。勝手なイメージではスゴロク的な人生ゲーム的な感じです。きっとぜんぜん違うんだとは思いますが。

    そしてこのTRGPがAjile的だ、という事。

    TRPGをプレイすることによって論理構成力、コミュニケーション能力、アドリブ力、リソース管理能力、判断力等々の非技術的なスキルが磨かれる→結果的に合理的にスピード感のある仕事やプロジェクトの進行が出来る=アジャイル的って事かな?

    恥ずかしながらAjileという言葉にいまいちピンときていません...。(@parrot_studioさんのブログでは「概念であり結果」と綴られています)

    マツコ的に言うとふわふわっとしたものなんでしょうね。TRPGをプレイしてみれば分かるのかしら。


    「javascriptで苦戦した経験」 LT @kanayannet さん

    JavaScriptでの経験談のお話。

    何かと躓きやすいJSですが、しばらく書いていないと忘れて同じ所で躓くという事を思いだしました。JavaSsriptにおけるグローバル変数って単に大元であるwindowオブジェクトに属している値やメソッドであると、考えると

    function Test(aaa,bbb){
        this.x = aaa;
        this.y = bbb;
    }
    
    var Test = function (aaa,bbb){
        this.x = aaa;
        this.y = bbb;
    }
    

    となるので、Test()は window.Test() と同義。となるとthisに入るのはwindowオブジェクトそのもの。this.xはwindow.xと同義になるのでグローバル変数xが汚染される...となるのですが、忘れます。手を動かして思い出しました。

    また、巻き上げの件では、

    global = 'global';
    
    function func(){
      console.log(global); // undefined
      
      var global = 'local';
      console.log(global); // local
    }
    
    func();
    console.log(global); //global
    

    となるようで、コンパイルと実行の関係なのでしょうか。JavaScriptの場合は関数スコープしか無いのでどこで変数宣言しても先頭で宣言したことになる...って読んだことあるような無いような...。

    最近は純粋なJavaScript書く事があまりなくて、専らjQueryだったりするので余計に忘れてしまいます。

    JavaScript=全てがオブジェクトで出来ているっていうのを考えると、OOP(オブジェクト指向プログラミング)を覚えるのに最適な言語なのではないかと思っていたりします。ブラウザで動くしね。

    こういう経験談的なLTもいいのではないか?

    確かにこのような機会があることで試してみたり、再発見することは多いと思います。今回も再確認する良いきっかけになりましたし。ボクも誰か一人でも役立つような発表が出来るよう精進しようと思います。


    「MTCafe Gunma 2013へのお誘い」 LT @hjfuji さん

    3月2日(土)に開催されるMTCafe Gunma 2013の告知LTです。

    MTというのはMiyagawa Tatsuhikoの略...ではなく、Movavle Type。MTはperl製のCMS(Blog)で、以前から知っていましたが使ったことはありませんでした。perl使いなのに...。blogを開設しようとしていた当時はOSS版が無かったので...。

    MTは2011年からシックス・アパート日本法人が扱っているとの事。シックス・アパートはボクの尊敬するTatsuhiko Miyagawaさんもエンジニアとして在籍していたのでとても気になります。

    MTCafe Gunma 2013、参加させて頂きます!


    「Koi::Bana」LT @clicktx

    前エントリーに書きました。


    「Nuuk Jam」 LT @ivoryworks さん

    エディタを作ったお話。まさかのカブり。と、思わせておいて...。
    どこからこの発想が浮かんだのか実に変態的です。URL shortenerいわゆるURLを短縮するサービスを使ってファイルを保存するというwebサービス。

    http://goo.gl/

    googleが提供しているURL短縮サービスですが、トップレベルドメインである.gl=グリーンランドみたいです。.jp=japみたいなものですね。Nuukはグリーンランドの首都みたいです。

    保存方法は対象のデータをURLエンコードして、これを含んだURLを生成。このURLをURL Shortenerで短縮させる。http://goo.gl/6dTBg のように短縮されるので 6dTBgにデータが紐付く。ここまで基本。

    で、どこらへんがジャムかって言うと大きなファイルを保存する時。

    例えば画像の場合はdata URI schemeという画像データをbase64エンコードして作られたURIを元に分割して保存する仕組みになっているので複数の短縮URLが生成されます。これを元の画像に復元する時に1つにする=詰め込む、という事に由来しているようです。だから頻繁にパンを焼いていたのですね。

    なぜ分割するかについて。実はURLの長さについてはRFCで定められていないそうですが、googleのAPIに制限があるからとの事。あまりにも長いURLはブロックされるみたい。googleはNuuk Jam想定内なのかもしれません。

    ただひたすら、無駄に短縮URLを消費していくという実に変態的な仕様に笑いが止まりませんでした。ネーミングセンスも抜群だしね。

    と、@ivoryworksさんのエントリー読んだらアイデア自体は同様の事をしていた先人がいた様子。このエントリーを見て思い出した言葉があります。

    良いと思えるアイデアが閃いたら、まずは世の中に同じアイデアのプロダクトがないか徹底的に調べる事が重要です。


    所感とか

    初参加の方も多数、参加人数も最多という事もあり、なんとなくですが発表者の面々はいつもよりも緊張していたのではないでしょうか?私?パなかったですがなにか?

    主催もおっしゃっていましたが、技術関係のみならず色々なLT/発表が出来るのがGunma.webの特徴の一つ。新しい発表者が増えるともっともっと盛り上がると思うので、是非チャレンジしてみて下さい!

    関連リンク

    発表のスライド等のリンクは以下のリンクから閲覧できます。

    カテゴリー
    勉強会

    Gunma.web#12でLTしました

    スライド(ロングバージョン)

    Koi::Bana〜恋に落ちたエンジニア〜 from Munenori Sugimura

    アップしたスライドは気に入っている機能の紹介部分を足したものになっています。

    当日話した内容はSublime Text 2の機能や魅力にはひとつも触れずに惚れた腫れたのお話しか出来ませんでしたが、すごく使いやすいので気になった方は是非お試しを。

    質問コーナーでSublimeTextT3に関して聞かれましたが、ST3に関して知ったのがごく最近でまともに回答できなくて申し訳なかったです。あと、@ivoryworksさんネタパクりました。ごめんなさい。

    また、懇談の席で聞いた日本語の検索に難があるというお話。個人的に日本語で検索したことが無かったので気が付かなかったのですが、確かに検索パレットを開いたあとに日本語で入力すると文字確定(enterキー)時点で検索が実行されてしまいます。検索文字列をコピペで貼り付ければ問題なく検索はできるのですが...。

    ネタLTしか思いつかなかったのに何エントリーしてるんだよ!的な感じなのですが、そこを寛大に許してくれるのがGunma.webのいいところ。

    他の方のLTでも言われていましたが、気軽に喋れる機会ってなかなか無いので感謝しています。