Thanks Driven Life

日々是感謝

Turnip 1.3.0 リリースしました

Release Version 1.3.0 · jnicklas/turnip

リリースノートのとおり、1.2.4 との大きな差は、Ruby 1.9 以下のサポートを排除したことです。

現時点ですぐ Ruby 1.9.3 で動かないというわけではありませんが、 今後あらたにコードを追加していく時は Ruby 2.0.0 以上の機能を使うことに躊躇いがなくなる、ということです。

ちなみに、Ruby 1.9.2 は既に動かないと思います。

Agile Japan 2015 サテライト<沖縄> に参加 / 発表してきました

Agile Japan 2015 サテライト<沖縄> - Java Küche | Doorkeeper

発表した話は後ろで書きます。

セッション

基調講演 1, 2

2日前に行なわれた 本会場 での基調講演の録画動画を見ました。

Janet さんの「アジャイル・テスティング」というタイトルからしてテスト技法みたいなイメージがあったけど、 どちらかというと「テストを通してチーム/メンバー間でのコミュニケーションをどうすべきか」みたいな話題でした。 特にテストのタイミングになると「質問」というフェーズから様々な情報の共有が行われるので そこでしっかりしていこう、みたいな話だったと思います。多分。なるほどなー。

横塚さんは、正直なところ発表を見る前は

「東京海上日動システムズ株式会社 顧問」
って肩書だし、すごい堅い上に「なんちゃってアジャイル」について語るのでは

みたいなイメージだったのですが、そんなことはなくて、ものすごい(いい意味で)Agile おじさんでした。 中期経営計画の話題になったときは、諸事情により面白かったです。

事例紹介セッション (1):『ここんところと、これからと』

ここからは沖縄会場のセッション。まずは高江洲さん。

  • そもそも Agile とは
  • 「事例紹介」の中によく出てくる XP, Scrum とかはわかったけど、それ Agile って言えるの?

みたいな話題を、お馴染アジャイルマニフェストを交えて話してくれました。

途中には「残念なアジャイル(いわゆるあるある話)」の紹介もしてくれました。 ここで印象に残っているのは、懇親会でも同じ話題が聞こえてきたのですが

「残念なアジャイル」みたいなことが起きて

 ・やっぱりアジャイルは駄目だった
 ・おれたちにはできないものなんだ

っていってそこで諦めてしまうのを良くみるが、そこでなんで諦めるのか。
「うまくいかなかった」「できなかった」ってタイミングで「気づき」を得られているだろ。
なんで駄目だったかということを『ふりかえり』して、それを次に生かしていけばいいのでは?

みたいな話をしていて、なるほど「気づき」という捉え方か、といろいろ考えさせられました。

事例紹介セッション (2): 『リモートでアジャイル(っぽい)開発をした事例のご紹介』

永和の水谷さんによる、最近あった開発でのお話。

当初ウォーターフォールのつもりだったが、お客様からの

  「要件を変更することを良しとする」という要件

を提示されて、いろいろあってアジャイル「っぽく」するようにした

みたいな話「うぉお」ってなりましたね。ある意味闇っぽい。 ほかにもいろいろ「あー」「あるあるだわー」みたいな生々しい話聞けておもしろかったです。

事例紹介セッション (3):『enPiT成果報告 ~学生5人でアジャイルやってみました~』

琉大の学生さんによるアジャイル開発してみました報告。

私が在学中にはこういう制度(イベント)が無かったので、結構羨しい。 プロダクトオーナーとのやりとりが、交通費の都合もあって週一で SKype(だっけ?) によるビデオチャットだけで そこが結構大変だった、というのはまあなるほどなーという。

その間はメールとかでやりとりしていたんだろうか。質問するの忘れてたな。

発表

最後のセッション、「テクニカルセッション」という枠で発表してもらえないかーという話があったので、 ここ最近、ようやく安定してきた Docker を使った E2E テスト環境の話をしました。

今回みたいに真面目な話題で社外で発表するのっておそらく大学の時以来(学会とか修論発表)だったのでかなり緊張していました。 ちなみに真面目じゃない発表はこちらです → http://d.hatena.ne.jp/gongoZ/20110829/1314576794

30分という枠だったので、単に「Docker で動かしてました」だと時間が足りないだろうなということと、 あとなんでこういう構成にしたのかっていう背景が無いとどうしても突然感が拭えなかったので プロローグという形で、CI に取り組み始めた辺りから話すことにしました。 おかげで予想以上にスライド増えてしまい、高速に話してしまうし(そして噛み噛みだった)、質疑応答時間を取れないぐらいギリギリだったので そこが残念だったなーというところです。もし質問等ありましたらいつでも Twitter にメンションでもいいしメールでもいいので、よろしくお願い致します。

まとめ

今回の沖縄サテライトのテーマが「現状確認会」ということで、現場の声みたいなものが聞けてとてもよかったです。

おわりに

今回の私の発表、現チームメンバーが見たら「かなり端折ってるな」という印象があると思います。

内容としては、ここ数年で取り組んできたうちの 30% ぐらいなので、 できれば別の機会にちゃんとまとめて発表したいです。余談ですが YAPC Asia 2015 いきたいです。

Emacs で vueify ファイル (.vue) を開いた時の highlighting / support を mmm-mode でどうにかする

経緯

  • Vue.js で構築している pizza-figlet を、試しに Browserify + Vueify してる
  • View Logic と Markup の密結合、下の記事を読んで試してみたかった(React の記事だけど)

    ところで、React.jsではComponentとして、マークアップとViewのロジックをcreateClassの中に書いていくのですが、他のフレームワークのようにマークアップはHTMLやmustacheで書いてViewのロジックをJSで書くみたいに分かれてなくて気持ち悪い!という人もいるのではないでしょうか? それに対して、React.jsの開発者であるPete Huntはそれは「関心の分離(Separation of concerns)」ではなくて「技術の分離(Separation of technologies)」だとしていて、マークアップとViewのロジックは密であるべきとしています。 reactjs - React.jsのComponentについて - Qiita

そんなこんなで .vue ファイルを書くのは良いのですが、問題は私が Emacs ユーザだということ。

vueify の特性上、いろんな言語が入り乱れることになるため、ここは昔懐しい mmm-mode を使ってみました。

その前に

.vue 内に書く <template><script><style> で、lang=xxx を使わない場合は、 mmm-mode を使うまでもなく web-mode で何の問題もありません。

  • <script><style> の中は勝手に js, css と判断してくれる
  • <template> に関しては通常のHTMLタグ同様に扱うので問題無し

書いてみた

gist.github.com

  • dolist のネスト、cl-loop あたり使ったらもっと綺麗に書けるのかもしれないが、ひとまずこれで
  • template の部分は書いてません。jade とか使うことになったら追加すれば良さそう

こいつを eval しておくと、こんな感じになります。

f:id:gongoZ:20150401215145g:plain

とりあえずこれで大分楽になった。

まとめ

GitHub を見ると mmm-mode がまだ時々開発が行われているのと、最古のファイルが 15 years ago とか書いててすごい歴史っぽい。

「てぃーだ大感謝祭2015」に行ってきました。

てぃーだ大感謝祭2015 ~ ありがとう10年、これからもずっと ~

休日は いつも外食 して、すぐ家に帰って寝るという生活をしているので
たまには賑やかなイベントにでも参加しようと考えました。

場所は北谷にある うみんちゅワーフ というところ。
初場所がわからずに、会場から 1.3km ほど離れたイオン北谷店に車止めたりしました。足痛い。

会場についた私は、早速イベントを楽しむことにしました。

まずは 梅しん の唐揚げ。塩こしょうor秘伝タレが選べたので、私はタレをチョイス。
美味しい。

続きましては カレー倶楽部ルウ のチキン南蛮。
お店の人が「他の店の唐揚げとはちょっと違うやわらかさを是非!!」と叫んでるだけあって、確かにおいしい。
唐揚げばっかりで胸焼けする人にはちょっとした味や食感の変化で休憩になりそう。

3店目は 舷喜屋(げんきや) の唐揚げ。普通。美味しい。

4店目はちょっと変化させて りょうたの手羽先手羽先。美味しい。

最後は 吉吾 のからあげ。しょうゆダレ。美味しい。

ついつい店の前にあった大量のかあらげを撮影。良い。

※ 他3店あったのですが、うち2店(からあげカリッジュぶんごや)は沖縄にあるというのと、「瀬戸田レモンガラ塩唐揚」というのがお勧めという とり将 は、すでに売り切れていたので断念(普通の唐揚げはあったが)

そんなわけで満喫しました。てぃーだ大感謝祭。楽しかった!!

唐揚げどこが美味しかった、みたいなランク付けは苦手なので全部美味しかったってことにしてください。

複数ファイルの tail -f を heroku logs っぽく表示する「9t」

[2015年03月10日 17時 追記]

以前は qb という名前でしたが、多数の方から「きゅーべーだと思った」という感想が得られたので Rename


一杯 tail していこうっていう精神を持った九尾的な意味です。 あと最近 NARUTO 読み返したのもあります。

使い方

こんな感じでインストールできるはず

$ go get github.com/gongo/9t/cmd/9t

そんでもって、更新され続けているファイルを幾つか指定して実行

$ 9t d.log tamura-yukari.log random.log

f:id:gongoZ:20150309220715g:plain

経緯


BSD な tail だと -qf とかで似た感じになるんですが、今度はどのファイルから出力されたかわからない感じになるので断念。


こういうのも見つけて、しばらくはこれ使ってました。

複数ファイルを一気にTail - 自分の仕事を憎むには人生は余りにも短い

おまけ

最長のファイル名に併せて揃えてるのですが、その指定の仕方をこんな感じ 9t.go#L26 でやってます。

fmt.Printf("%*s: %s\n", max, filename, text)

https://golang.org/pkg/fmt/ の中で * がどうのこうのって書かれてるのみて雰囲気で書いたらそれっぽくなった。便利。 (使い方間違ってるとかあれば連絡お願いします。)

おわり

THE LAST -NARUTO THE MOVIE- の予告の空耳で「NARUTO THE MOVIE」が「ナルトじゃムーリー」に聞こえました。

私の名前と同じ PHP 製 Web アプリケーションフレームワーク「Gongo」を使ってみた

はじめに

本当に「使ってみた」の報告なので、このフレームワークのどこが良いとか悪いとか詳しい部分は書きません。

経緯

ふと Packagist で自分の名前を入れてみた(本当に)

f:id:gongoZ:20150226225955g:plain

なんか出てきた…

Gongo is a micro web application framework for PHP 5.2 or later.

気になったので使ってみた

使ってみた

https://github.com/gongo/gongongo

ついでに Heroku にも上げてみました。

https://gongongo.herokuapp.com/

  • 「Home」そのまま
  • 「Repositories」私が GitHub 上に持つリポジトリ一覧
  • 「Messages」てきとうにテキスト保存していけるやつ

簡単に説明

Routing of root /

README を見るといくつかパターンがあるようですが、今回私は以下のようにしました。

public/index.php#L14-L21

class Application extends Gongo_App
{
    // `/` にアクセスすると `\Gongongo\Controller\Root` の `getIndex()` を実行
    public $uses = array(
        'root' => '\Gongongo\Controller\Root'
    );
}

// `app/` や `config/` があるパスを指定する
$app = new Application(dirname(__FILE__) . '/..');
$app->init()->run();

Routing その他 & View やアクションメソッドの設定

app/Controller/Root.php

  • $uses['view'] は、使用する View クラス
  • $uses['/xxx'] は、/xxx にアクセスすると実行するクラス
  • getIndex() だと / にアクセスした時に実行されるメソッド
    • ちなみに getFoo() ってやると GET /foopostFoo() だと POST /foo です。

View

app/View.php)

$uses['template'] にテンプレートクラスを指定します。 今回は Twig を指定しましたが、他にも Smarty とか いろいろあるようです

コントローラのアクションメソッド内で、たとえば $this->view->render($app, 'foo') を呼び出すと

template/{テンプレートクラス名}/foo.{テンプレートにあった拡張子}

が呼ばれます。

テンプレートが使用する変数は、コントローラのアクションメソッド内で

app/Controller/Repository.php#L12

$app->context->{テンプレートが参照する変数名} = 'xxx';

とかすれば大丈夫っぽい。

設定ファイル

config/config.ini

正直ここらへんはよくわからず。わかるけど何が必須かわからず。 とりあえず 例題 を参考に、足りなさそうな部分をエラー画面見ながら追加していった感じです。

とまあそんな感じで

全部勘です

まとめ

The website written by gongo using Gongo

これ言いたかっただけ感ある。

そういえば Heroku に PHP アプリケーション上げたの初めてだったので、そこらへんも勉強になった。

emacs-ikku / 文章の中から一句を探し出す

経緯

一句詠んでますか

いろいろあって作りました。

使う前に

mecab コマンドを使用するので、各自インストールお願いします。

使い方

(ikku/find) で、指定した文字列から一句を一つ見つけます。無ければ nil を返します。

(require 'ikku)

(setq song (ikku/find "ああ古池や蛙飛び込む水の音ああ"))
;; [cl-struct-ikku:song]

(ikku:song-to-string song)
;; "古池や 蛙飛び込む 水の音"

(ikku:song-to-string song "/")
;; "古池や/蛙飛び込む/水の音"

(ikku/search) では、指定した文字列から一句をあるだけ見つけます。無ければ空リストを返します。

(dolist (song (ikku/search "ああ古池や蛙飛び込む水の音ああ天秤や京江戸かけて千代の春ああ"))
  (message (ikku:song-to-string song "/")))

;; 古池や/蛙飛び込む/水の音
;; 天秤や/京江戸かけて/千代の春

中身について

新たにロジック考えるのめんどくさかったので、作る経緯となった r7kamura/ikku をほぼ参考にしました。感謝 id:r7kamura

あと、Ruby のコードをなるべく労力を減らして Emacs Lisp として持ってくるために、初めて magnars/dash.el を使用してみました。さすがに使いやすくて良い。ただ途中から導入したので、もしかしたら dash.el 関数におきかえられるやつが残ってるかもしれない。まあいいか。

まとめ

雑に一句詠んで人生過ごしたい