#131 Tinkerer でブログを始めました

最近、多忙によりあまり更新できなくなっております…(´・ω・`)

そんな最中ですが、新しいブログを始めてみました。

a wandering wolf

「同じタイトルかよ!」というツッコミは無粋です。

これは Tinkerer というPython 製のパッケージを使って作りました。

Tinkerer

Tinkerer は Sphinx というドキュメント作成ツールを利用しています。

Sphinx-Users.jp

簡単に始められるので、興味がある方はぜひ。

#130 Practical Introduction to NaturalSpec

This is the translated text of the topic I've written - #126 Practical Introduction to NaturalSpec (ja: #126 NaturalSpec 実践入門).

Preface

In the summer of 2012, some tutorials of a product was translated into Japanese.

NaturalSpec Tutorial(translated) - FsNinja (ja: NaturalSpec チュートリアル翻訳版 - FsNinja)

From the bottom of my heart, I appreciate @smallgeek for his great work as a F#er like him.

This NaturalSpec is a testing framework with Behavier Driven Development (BDD) style written in F#.

forki / NaturalSpec - GitHub

Though we need to write tests in F#, we can write System Under Test not only in F# but also in VB or C#. I use this testing framework when I do Test Driven Development (TDD) in F#.

In this topic, I will show you how to use NaturalSpec in transcription style.

Note: Some of the codes are actually written in Japanese, but in this topic, rewritten in English.

BTW, this topic is inspired by the following excellent work.

Introduction to RSpec and getting one step ahead - t-wada's diary (ja: RSpec の入門とその一歩先へ - t-wadaの日記)

続きを読む »

#129 2012年に読んだ本

何だかこの記事を書くのが流行ってるようなので、今年最後のビッグウェーブに私も乗っかってみようと思います。

今年読み終わった本

Scala実践プログラミング―オープンソース徹底活用Scala実践プログラミング―オープンソース徹底活用
著者:小笠原 啓
販売元:秀和システム
(2011-06)
販売元:Amazon.co.jp
計算機プログラムの構造と解釈計算機プログラムの構造と解釈
著者:ジェラルド・ジェイ サスマン
販売元:ピアソンエデュケーション
(2000-02)
販売元:Amazon.co.jp
達人プログラマー―システム開発の職人から名匠への道達人プログラマー―システム開発の職人から名匠への道
著者:アンドリュー ハント
販売元:ピアソンエデュケーション
(2000-11)
販売元:Amazon.co.jp
入門Git入門Git
著者:濱野 純(Junio C Hamano)
販売元:秀和システム
(2009-09-19)
販売元:Amazon.co.jp

Java開発者のための関数プログラミング - O'Reilly(リンクのみ)

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))
著者:Steve Freeman
販売元:Addison-Wesley Professional
(2009-10-12)
販売元:Amazon.co.jp
アジャイルサムライ−達人開発者への道−アジャイルサムライ−達人開発者への道−
著者:Jonathan Rasmusson
販売元:オーム社
(2011-07-16)
販売元:Amazon.co.jp
Clean Code アジャイルソフトウェア達人の技Clean Code アジャイルソフトウェア達人の技
著者:Robert C. Martin
販売元:アスキー・メディアワークス
(2009-05-28)
販売元:Amazon.co.jp
いわゆる名著とか呼ばれる本が多いです。
それまで読んだことがなかったのですが、やはり多くの気づきを得られました。
特にGOOS原著は、私に TDD とオブジェクト指向開発の新しい視点をもたらしてくれました。

今年読み終わった雑誌

WEB+DB PRESS Vol.67WEB+DB PRESS Vol.67
著者:川口 耕介
販売元:技術評論社
(2012-02-24)
販売元:Amazon.co.jp
Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]Software Design (ソフトウェア デザイン) 2012年 06月号 [雑誌]
販売元:技術評論社
(2012-05-18)
販売元:Amazon.co.jp
WEB+DBプレスは関数プログラミングと Hadoop、Software Design は Fluentd について知りたくて読んでみました。

読むのに時間がかかりすぎた本

Real World Haskell―実戦で学ぶ関数型言語プログラミングReal World Haskell―実戦で学ぶ関数型言語プログラミング
著者:Bryan O'Sullivan
販売元:オライリージャパン
(2009-10-26)
販売元:Amazon.co.jp
これは去年の4月に買って、その年の夏頃には読み始めていたと思うんですが、色々あって放置していました…(´・ω・`)

まとめ

2012年は11冊しか読み終わってないんですね…。
(同人技術書(「簡約!λカ娘」など)は除外してます)

来年も良い本を、今年以上の分量で読んでいきたいものです。

#128 Mercurial でのちょっとした Tips

これは Mercurial Advent Calendar 2012 23日目の記事です。

正直ネタに困っていたんですが、困った繋がりで私が Mercurial を使っていて便利な/困った時に助かった操作をTips形式で紹介します。
本当に小ネタなんで、驚きの操作はないはずですよ!

マージを取り消したい

ブランチ切って作業していて、「よし、完了した!」と思ってメインのブランチにマージしてみたら、「…あれ、この作業[足りなく|不要じゃ|間違って]ね?」ということ、多くはないですがあります。
これだけでも残念なんですが、さらに悪いことに、それに気が付くのがマージコミット後だったりして、ほんとアレ。

こんな時、私は rollback して元のブランチに update して修正します。
C:\User\Gab_km\myrepo>hg rollback
tip をリビジョン 5 に巻き戻しました (取り消し commit)
1 と 5 が作業領域の親リビジョンになりました

C:\User\Gab_km\myrepo>hg update -C myBranch
ファイルの更新数 2、 マージ数 0、 削除数 0、 衝突未解消数 0
なお、 strip を使う方法もあるようですね。

Mercurialでアレを元に戻す108の方法

あるリビジョン時点でのファイル内容が見たい

コミットの歴史を積み重ねて、ふと「あのリビジョンのあのファイルでは、どう書いてたっけなぁ」と振り返りたくなることがあるかもしれません。

そんな時に使えるのが cat です。
C:\User\Gab_km\myrepo>hg cat 4 hoge.py
def spam(message, times):
    result = ""
    for i in range(times):
        result = result + message
    return result

if __name__ == '__main__':
    print(spam("Spam!", 4))

ファイルを指定してコミットする

Git と Mercurial を併用しているときに違ってくるポイントに、コミットの仕方があります。

Git は明示的にコミットしたいファイルをステージングしてからコミットしますが、 Mercurial は登録されたファイルはデフォルトで全てがコミット対象です。

Mercurial の方が操作が簡単だなと思う一方、コミットを分けてで入れたかった他のファイルの修正を誤って同じコミットに入れてしまう、ということもあるかもしれません。

Mercurial では、ファイルを指定してのコミットも可能です。
ファイルを変更したけどまだコミットしたくない場合は、次のようにコミットしたいファイルだけ選んでコミットしましょう。
C:\User\Gab_km\myrepo>hg status
M fuga.py
M hoge.py

C:\User\Gab_km\myrepo>hg commit fuga.py -m "commit only fuga.py"

C:\User\Gab_km\myrepo>hg status
M hoge.py

特定ブランチのリビジョングラフを見る

Mercurial ユーザ諸兄は、グローバルな hgrc で graphlog を有効化されていることと思います。
C:\User\Gab_km\myrepo>hg glog -l 3
@    チェンジセット:   7:3eedb8286885
|\   タグ:             tip
| |  親:               1:06352cc90a8b
| |  親:               6:bbd9b09a6928
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 13:01:27 2012 +0900
| |  要約:             merged
| |
o |  チェンジセット:   6:bbd9b09a6928
| |  ブランチ:         ticket/#1
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 13:01:05 2012 +0900
| |  要約:             [from now] 2012/12/22 13:01:05.28
| |
o |  チェンジセット:   5:68a046f79639
| |  ブランチ:         ticket/#1
| |  ユーザ:           Gab_km <hoge@fuga.com>
| |  日付:             Sat Dec 22 09:12:17 2012 +0900
| |  要約:             [from now] 2012/12/22  9:12:17.29
| |
ブランチの履歴が一目瞭然なのがいいですね。

これを、あるブランチに着目して見たいと思ったときは、 hg glog -b branchName と入力します。
C:\User\Gab_km\myrepo>hg glog -l 3 -b ticket/#1
o  チェンジセット:   6:bbd9b09a6928
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 13:01:05 2012 +0900
|  要約:             [from now] 2012/12/22 13:01:05.28
|
o  チェンジセット:   5:68a046f79639
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 09:12:17 2012 +0900
|  要約:             [from now] 2012/12/22  9:12:17.29
|
o  チェンジセット:   4:0f1b086dcfe0
|  ブランチ:         ticket/#1
|  ユーザ:           Gab_km <hoge@fuga.com>
|  日付:             Sat Dec 22 07:31:09 2012 +0900
|  要約:             [from now] 2012/12/22  7:31:09.50
|

まとめ

どれもちょっとした操作ばかりですが、「あー、こういうことしたいんだけどなぁ」という小さな要望も、 Mercurial は叶えてくれますね。

#127 MessagePack InterLanguage

この記事は LL/ML Advent Calendar の10日目です。

今回は MessagePack というシリアライゼーション方式について書いてみます。

MessagePack とは?

MessagePack: It's like JSON. but fast and small.

MessagePack は圧縮効率の高いシリアライゼーション方式です。
例えば
{"compact": true}
のような Map をシリアライズすると、
[0x81, 0xa7, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xC3]
という10バイトのデータに変換されます。

MessagePack InterLanguage

この MessagePack ですが、Ruby, Java, Python, CLI(.NET系言語) など、多くの言語で利用することができます。
そこで、「いろんな言語間で、MessagePack を介してデータをやりとりしてみようかな」と思って書いたのが次のコードです。F#(msgpack-cli) -> Python(msgpack-python) -> D(msgpack-d) -> F#、という流れでソケット通信を行い、MessagePack でシリアライズしたデータを送信し、受信側でデシリアライズしています。

実行結果は次のようになります。

msgpack_sample.fs
Sent to Python server.
Listen start.
Received: (3, "Hello D!")
msgpack_sample.py
Waiting for connections...
Connected to F# client.
b'\x01'
receive: 1
Connected to D server.
send: Python
msgpack_sample.d
Waiting for connection...
Connected to Python client.
Python
Connected F# server.
11

まとめ

MessagePack 面白いわー!(・∀・)
…こんな風に無理矢理タイトルのつじつまを合わせちゃえば良いんですよね?

Special Thanks

@methane : msgpack-python の使い方について教えていただきました。
@repeatedly :  D言語での色々について教えていただきました。
いつも何かとありがとうございます!
プロフィール
あわせて読みたい
あわせて読みたい
記事検索
Project Euler
なかのひと
アクセス解析
Coderwall
  • ライブドアブログ

トップに戻る