計算機

Bash でスタックトレースを表示

Bash でスタックトレースを表示する方法。 caller という組み込みコマンドで関数の呼び出し元の位置がさかのぼって取れます。これを使って以下のようなスタックトレースを表示する関数が作れます。 function print_stacktrace() { index=1 while frame=($(ca…

Bash で Power Assert 風のものを作った

GitHub - fjkz/power-assert-bash: Power Assert for Bash Bash で Power Assert 風のものを作りました。*1 なぜか Bash には assert がありません。なので、 Bash でテストを書くときは、 set -e として、 [ "$actual" == "$expect" ] とか書きます。しかし…

TT-Runnerの記録2:ベータ版

前回: 構造化されたテストスクリプト群の実行ツール - 超ウィザード級ハッカーのたのしみ TT-Runner: テストスクリプトのディレクトリ構造フレームワーク - 超ウィザード級ハッカーのたのしみ TT-Runner の記録 1 - 超ウィザード級ハッカーのたのしみ GitHub…

ディレクトリ構造のスキーマ

私はファイルシステムとかブロックストレージとかには少しだけ詳しいと思うが、現実に興味があるのはもう少し上の階層だ。RDB でいうとどのようにスキーマを設計すべきかという階層の話に興味がある。昔に書いた以下の記事でいうと「シンタックス層」が関心…

TT-Runner の記録 1

TT-Runner: テストスクリプトのディレクトリ構造フレームワーク - 超ウィザード級ハッカーのたのしみ GitHub - fjkz/ttap: A Test Scripts Runner TT-Runner (Test scripTs Runner あるいは Tree Tests Runner) というのをシコシコと作っています。*1 以下、…

CAP定理について

CAP定理という分散ストレージシステムの設計において非常に重要な定理がある。まだ、以下の元の論文を読んでいないので、正確な理解かどうかは保証できないが、理解している範囲で考えることを記す。 https://www.comp.nus.edu.sg/~gilbert/pubs/BrewersConj…

TT-Runner: テストスクリプトのディレクトリ構造フレームワーク

以前書いたテストツールがある程度できたので、公開する。TT-Runner と名付ける。 GitHub - fjkz/ttap: A Test Scripts Runner 結合テスト以降のユニットテストフレームワークがうまいこと使えなくて、スクリプトをだらだらと書いているような場合を想定した…

コード型ログ(5) Bashで自分のディレクトリを知る

シェルスクリプトで自分のディレクトリを知りたいことがあります。 . ./functions.sh 例えば、上のように他のシェルスクリプトを読み込みたいときに相対パスを使うのはよくないときがあります。なぜならば、./の場所はシェルスクリプトを実行するカレントデ…

構造化されたテストスクリプト群の実行ツール

テストコードってどんどん増えていく。だらだらスクリプトを書くのは簡単だが、すぐに収拾が付かなくなり、経済的に耐えられないレベルで混乱してくる。何のテストをしているのかももちろんわからないが、動かし方も分からないし、どうなったらpassなのかも…

ncatで遊んでみる

ncatという超便利コマンドを恥ずかしながらいままで知らなかった。HTTPプロトコルを学ぶには最適なおもちゃだ。 www.example.com の 80番ポートに、 / を GET するという HTTP リクエストを投げてみる。 fjk@x240:~$ ncat www.example.com 80 << END GET / H…

テスト駆動開発で品質が上がる証拠

テスト駆動開発(TDD)で品質が上がる証拠を得た。 Realizing quality improvement through test driven development: result and experiences of four industrial teams*1 性質が異なる4つの製品の開発プロジェクトで TDD を行って、TDD でない類似の開発プ…

リコメンデーションのための相関係数2

ユーザーに対して類似のアイテムを推薦するアルゴリズムのアプローチには、 ユーザーの相関をとるアプローチ、 アイテムの相関をとるアプローチ がある。今回は2のアイテムの相関をとるアプローチについて。 item A item B item C item D user 1 2 0 2 1 us…

リコメンデーションのための相関係数1

ユーザーに対して類似のアイテムを推薦すること、いわゆるリコメンデーションを機械にさせるのが、浸透している。リコメンデーションのアルゴリズムというのは興味深い。 item A item B item C item D user 1 2 0 2 1 user 2 3 0 1 3 user 3 2 1 3 1 user 4 …

出版業は市場データで効率化できるはず

Amazonは手に入りにくい本が簡単に手に入るのでよくお世話になっている。特に便利だと思うのは、中古本のマーケットプレイスというシステムだ。欲しい本が予め決定しているときに、Bookoffに行くことはない。非常によく出ている本はBookoffで探せば見つかる…

コード型ログ(4) Initialization-on-demand Holder

前回: コード型ログ(3) privateなメソッドのテスト - 超ウィザード級ハッカーのたのしみ 必要なときにインスタンスを作ったら、メモリ効率がよくないかと思って変なことをしてしまう悪い例。 class BadSingleton1 { private static BadSingleton1 instance;…

コード型ログ(3) privateなメソッドのテスト

前回: コード型ログ(2) staticな変数の排他にはsynchronized(*.class) { } を使う - 超ウィザード級ハッカーのたのしみ privateなメソッドは、ユニットテストがしにくい。 対処法は2つで、 テストしないか、 Reflectionで頑張るか、 スコープをpackage pri…

コード型ログ(2) staticな変数の排他にはsynchronized(*.class) { } を使う

他の人が書いていたら読めるけれども、知らなきゃ書けない定型文をあつめたコード型ログを作っている。今回は2回目。 前回: コード型ログ(1) スレッドを止めるにはinterruptを使う - 超ウィザード級ハッカーのたのしみ いい設計とは言えないかもしれないが…

コード型ログ(1) スレッドを止めるにはinterruptを使う

他の人が書いていたら読めるけれども、知らなければ書けない定型的なソースコードの型を集めているので気が向いたら書いていく。ダジャレが好きなので、コード型ログと呼ぶ。今回は1回目。 無限ループを持つスレッドはinterrupt()で止められるようにする。 …

シンプル騎士団を結社する

シンプル騎士団を結社する。 シンプルであることが設計の最大の美徳ある。これを教義とした秘密結社、シンプル騎士団を結成したいと思う。活動の実体もないし、名簿とかもない。シンプルさって大切だよねと思っている人は、ただ心に思うだけで、特に手続きも…

技術者が得意げに解説することこそ解決すべき技術的課題

技術者というのは、製品の仕組みだとか作リ方だとか飼い慣らし方だとかを知っている。それが彼らの自尊心だから、知っていることを得意げに語りたがるし、知らない人を下に見たりする。気持ちはわかるし、誇りを持つことは良いことだ。 ずっとやっていたら詳…

○×ゲームの神の一手を導いてみた

小さい頃にノートの隅や地面で良く遊んだ○×ゲームを計算機で解いてみた。 ○×ゲーム程度であれば、スクリプト言語を用いて、かつ枝刈りとかせずに終端までミニマックス法で全探索しても十分に解ける。ミニマックス法というのは、要するに負けない手を打てば勝…

ソフト開発にも生産技術者が必要

製造業には必ず生産ラインの世話をする役職の人がいる。製造業においては、この役割の人は階級が高くて、会社内ではエリートがする仕事である。昔は社会的にも地位の高い仕事だったのだろう。現在だと聞かないが、かつては製鉄業の現場監督はエリートの仕事…

企業と効率とインターネットの可能性

一般論として世の中の企業というのは非効率で不合理な多くてどうにかならんもんかなと思う。 ムダのために会社が損をしたら、株主なり債権者は金銭的に困る。従業員からしても、自分の金ではないからと、『サラリーマンは気楽な稼業と来たもんだ』とはならな…

プログラミングは「モノづくり」なのか?

ソフトウェアを開発することを「モノづくり」と言う人が少なからずいる。これにすごく違和感があるのは私だけだろうか? 「モノづくり」ってよく分からない言葉だが、日本の製造業をポジティブに表現するために使う。すり合わせだとか高度な熟練技能だとか日…

KdV方程式を解いてみた

KdV方程式を数値的に解いてみた。*1 KdV方程式は、以下の式で表される方程式です。 非線形の偏微分方程式だけれども、手計算で頑張ることができて、よく研究されてきた方程式です。バーガース方程式と同様の非線形項に加えて、3回微分の項がある。この項は…

可読性に関するソフトウェアメトリクスを考えた

新しいソフトウェアメトリクスを思いつきました。 ソフトウェアメトリクスとは、ソフトウェアの特性を推定するための定量値のことです。バグの数とかレビューの時間とか開発の過程で得られる値もありますし、テストの数だとかカバレージといったテストを評価…

頼むから凝ったコードを書かないでくれ

コーディングは自由度が高い。自由度が高いゆえに、同じことをいろいろなやり方でできてしまう。 There should be one-- and preferably only one --obvious way to do it. とZen of Pythonにあるように冴えたやり方はたった1つだ。しかしながら、イマイチ…

トヨタ生産方式とアジャイル開発

トヨタ生産方式には7つのムダというものがあります。それぞれ、以下のようになっています。 作りすぎのムダ 手待ちのムダ 運搬のムダ 加工そのもののムダ 在庫のムダ 動作のムダ 不良を作るムダ トヨタ的な考え方では、製品を加工している作業が唯一付加価…

クラスの凝集度を示すメトリクス:LCOM*

ソフトウェアメトリクスについて調査中です。今日はLCOM*について。 LCOM*とはLack of Cohision in Methods(メソッドの凝集度の欠陥)を示しており、以下の式で定義されます。 1 a ――――― Σ μ( Aj ) - m a j LCOM* = ――――――――――――――――――――――――― 1 - m ここで…

オブジェクト指向で再利用性が高まるは嘘

オブジェクト指向でプログラムを作れば再利用性が高くなるというのは誤りだったと思う。オブジェクト指向プログラミング(OOP)についての本を呼んでいるとOOPは再利用性が高いというようなことが書いてある。すでに結論が出ている話な気もするが、これは必…