Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

MacへSubversionを入れたい

2020年にもなって、svnを使っているプロジェクトに関わることになった。まあ、だからどうと言うことはない。 どうと言うことはないんだけども、Macでのsvnには苦い思い出がある。 かなり前のことだけど、WindowsなどとUnicodeの正規化の扱いが違い、濁点が含…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(17)

元のJavaのテストではfiveBucksはMoneyではなくExpressionだった。ここから派生する汎用化を15章では行っている。例えば、plusメソッドがExpressionを受け付けるようにしたり、Expressionにplusメソッドを追加したりだ。これは結局、何がしたいのかというと…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(16)

15章。ついに「5ドル+10フラン」のテストを書くぞと、ケント・ベック先生は意気込んでいる。こんなテストを書いている。 @Test public void testMixedAddition() { Expression fiveBucks = Money.dollar(5); Expression tenFrancs = Money.franc(10); Bank b…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(15)

さて、もうちょっとコードをキレイにしてから先に進みたい。 今、通貨は文字列で定義されている。Java版だとStringだ。私のRustのコードだと、ここが&'static strになっている。 Rustの&strはヒープに確保された領域に書き込まれたUTF-8シーケンスに対する参…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(14)

さて、ここでちょっと立ち止まって、コードを眺めてみよう。 コード全体は今でも100行ちょっとに過ぎない。 #[derive(Debug, Clone)] pub struct Money { amount: f64, currency: &'static str, } impl Money { pub fn dollar(f: f64) -> Money { Money { am…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(13)

14章に入る。いよいよ通貨の変更を実装する。2フランを1ドルに換算したい。 本で示されたテストはこうだ。 @Test public void testReduceMoneyDifferentCurrency() { Bank bank = new Bank(); bank.addRate("CHF", "USD", 2); Money result = bank.reduce(Mo…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(12)

13章「実装を導くテスト」に入る。 最終的にどんなコードを目指しているのか見失ったままストーリーが続いているのだが (いや、一度、この部分は読んでいるんだけど・・・これが写経の効果だな)、 とりあえず、著者のインサイトに従っていくことにする。 さ…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(11)

どうやらほとんど11章まで終わっていたみたいなので、12章に入る。 やりたいことはドルとフランの間で透過的に演算が出来ることだ。 「$5 + 10 CHF = $10 (レートが2:1の場合)」みたいなことがしたい。 ただし、まずやるべきは同じ通貨同士の足し算だ。 とい…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(10)

9章に入る。いよいよ、通貨の導入だ。 その前に、Dollar構造体とFranc構造体の統一を片付けてしまおう。 9章の展開とは違うんだけど、とりあえず、以下の様なテストが通ることを目標にする。 #[cfg(test)] mod tests { use super::*; #[test] fn test_multip…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(9)

第8章に入る。 この辺りから、本のコードと自分のコードの差が大きくなって、 本の戦略がそのまま使えない感じになってきた。ちょっと試行錯誤しながら進めたい。 まず、本の方ではtimesメソッドがDollarとFrancの両方にあるので、それをまとめたいと言って…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(8)

7章に入る。 ドルとフランは比較できるのだろうかという疑問をテストに書いてみるところから始まる。 この本のコードでは、equalsメソッドはObjectを受けているので、ドルとフランは区別なく 扱われ、スイス経済に大打撃を与えている。 一方、私のRustの実装…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(7)

5章「原則をあえて破るとき」に入る。 この章は、クソコードを作って終わり。 ただし、これをどうにかしないうちは家に帰らないことも誓う。 とりあえず、今まで作ったドルとは別にフランを作る。それも単なるコピペで作る。 フラン・・・そんな通貨単位はも…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(6)

4章「意図を語るテスト」に入っていこう。 amountという内部構造がインターフェースとして外に出ているのは 見づらいし良くないよねということでリファクタリングしている。 もっともだ。 そもそも、こちらにはコンストラクタすらないので、このタイミングで…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(5)

3章「三角測量」に入る。 DollarをValue Objectにしたいと言い出す。等値であることをチェックできるようにするのだと。 Value Objectというパターンに馴染みはないんだけど、 オブジェクトを値として扱うことにはいろいろな難しさがあることは知っている。 …

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(4)

2章「明白な実装」に入る。 仕様が変わった。timesメソッドはDollarを返す様になった。 あ、今、私のtypoも見つかった。DollarじゃなくてDollerになってる・・・。 ともあれ、仕様変更の結果、テストはこうなった。 #[test] fn test_multiplication() { let …

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(3)

いよいよ「テスト駆動開発」に入っていこう。 まずは、P4の最初のテストだ。おもむろに存在しないDollerクラスをnewして、 ありもしないtimesメソッドやamountフィールドを参照している。テストファーストなのだ。 ・・・Rustでデータ型を表現するのはどうす…

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(2)

最初にやるのはcargo newである。 > cargo new money Created binary (application) `money` package > cd money > ls -la total 16 drwxr-xr-x 6 tambara staff 192 3 20 17:48 . drwxr-xr-x 3 tambara staff 96 3 20 17:48 .. drwxr-xr-x 8 tambara staff …

ケント・ベックの「テスト駆動開発」の写経をRustでやってみる(1)

社内で、ケント・ベックの「テスト駆動開発」を写経する会を立ち上げて、アドバイザーみたいなことをやることになった。良いコードを書くにはまだ及ばないが、酷いテストコードを直す経験ならちょっとしたものである(笑)。 とりあえず、参加メンバーはあまり…

docsifyを入れてみる

下準備 まずはNode.jsを入れるところから。 > brew install nodebrew Warning: nodebrew 1.0.1 is already installed and up-to-date To reinstall 1.0.1, run `brew reinstall nodebrew` あれ? > nodebrew -v nodebrew 1.0.1 Usage: nodebrew help Show th…

Java13にヒアドキュメントが入ったらしい

http://jdk.java.net/13/ からダウンロード。展開して、 > sudo mv ./jdk-13.jdk/ /Library/Java/JavaVirtualMachines/ > /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home > set -x JAVA_HOME (/usr/libexec/java_home …

DataGripでモデルの絵を書く

DB

絵は本来、「描く」ものだが、データモデリングの場合、「書く」のが正しい気がするのでタイトルはわざとである。つっこまないように。そして、見習わないように。 さて、DataGripの話をしようとしていたのにAWSに不慣れなせいでDBに接続するところで前回は…

データモデリングをしようと思い、DataGripを使ってみることにする

DB

でっかいSIerでお仕事をしていると、データモデリングをすることが・・・それほどはない。だいたい、そのポジションは1アプリケーションにつき、1人が専任してやることが多いからだ。それぐらいデータモデリングは統一された考え方が必要だし、重要なものだ…

プロセスフローを書きたいと思い、BlueworksLiveに出会った

でっかいSIerでお仕事をしていると、プログラムコードを書くよりもビジネスプロセスを書く方がよっぽど頻度が高い(個人の感想です)。 ビジネスプロセスというとスイムレーンが水平に並んでいて、お仕事が左から右にフローチャートみたいな書式で流れていく、…

w3mをインストールしたら、opensslがインストールされて・・・あとでみる

ちょっと必要があってw3mをhomebrewでインストールした。 途中でopensslがインストールされてCaveatsがいっぱいでてるけど、 後で読む。そのためにとりあえずここに貼っときます。 > brew install w3m ==> Installing dependencies for w3m: bdw-gc and open…

C++でも遊んでみたい

2019年にもなって、C++を勉強しなくてはいけなくなった。嘆かわしい。 C++は大変に歴史があり、かつ、あり得ないぐらいに幅広く使われているので、大量の歴史的経緯を抱えている。 そのため、実体がよくわからない。私が最後にC++を勉強したのは20世紀のこと…

attr_accessorを自分で実装する

自作クラスでデータを保持しようとしていて半角カナが入ってきて発狂し、絶叫し、半角カナ絶対殺すマンが覚醒した。 といっても、Rubyで半角カナを全角カナに変換するのはとても簡単。NKFを使う。 > irb irb(main):001:0> require 'nkf' => true irb(main):0…

treeコマンド

treeコマンドは、たまーに欲しくなる。 プロジェクトの共有ディレクトリの使い方を説明するととかに。 Macにはない。Homebrewで入れれば良いらしい > brew install tree ==> Downloading https://homebrew.bintray.com/bottles/tree-1.8.0.mojave.bottle.ta …

OCamlでコマンドライン引数を処理する

さて、次はファイル名や表示行数を指定できるように修正しよう。 引数は、Cのargv相当がSys.argvに入ってくるが、自分でパースするのはめんどうだ。 もちろん、標準ライブラリでパースできる。Argモジュールを使う。 以下の手順を踏む。 引数で指定された情…

OCamlでナイーブなtailを作る

プログラミングの基礎 ((Computer Science Library))を読み終わった。それなりに面白かった。正直、赤黒木とかちゃんと理解するのは普通に難しいので飛ばし読みしたけど。昔、一度理解はしたけど、実装しろと言われたらもう一度勉強し直さないとどうにもなら…

GoでMarkdownをHTMLにする

OCamlに浮気していたけど、golang版の議事録作成ツールの最後のピースとして、Makdownの変換部分について調べてみる。 Markdownの変換は標準ライブラリでは出来ない。外からライブラリを持ってくるときにはGOPATHが大事になるらしいが、 それも過去のことら…