権威と OSS

権威とはなんなのだろう?――というのは長いこと悩んでいる疑問である。私が権威が大好きな権威主義者ということなのだろうな。 また、OSS というのも社会学的に興味深い営みであり、これを観察することも趣味である。 さて、どうも最近 OSS が権威主義的にな…

ブロックチェーンについての考察

タイトルが雑だが、最近ブロックチェーンについてぼんやり考えていて、その覚書。 元の bitcoin の Proof of Work (PoW) は以下の式を満たすブロックをブロックチェーンにつなげることができる。 hash(prev, tx, nonce) < 1 / difficulty * hash_max (eq.1) …

bitcoin と ビザンチン将軍問題

bitcoin はビザンチン将軍問題を解決したとしばしば言われます。これが厳密には誤りだそうです。私もそんなに詳しくないのだけれども、確かにそうかなと思います。 ビザンチン将軍問題というのは――離れた場所にいる複数の将軍間で作戦の合意をとりたい;ただ…

bitcoin: Proof of Work の肝

bitcoin の仕組みは「ようできてる」と感嘆します。ポイントはデータベースの更新を承認する「Proof of Work」(PoW) という仕組みです。 さて、bitcoin が PoW で上手く回っているのは、PoW の特徴によるものに思います。PoW がなかったどうなるのかというの…

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 でない類似の開発プ…

インターネットの物理学

服部の『Amazonランキングの謎を解く: 確率的な順位付けが教える売上の構造 (DOJIN選書)』を読んで、なかなか興味深かった。(興味深かったけれども、本書は分かる人にしか分からなくて、分かる人は原著論文が読めるレベルという一体誰向けに書いているのか…

リコメンデーションのための相関係数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 …

寄付と投資

歳をとったのか世のため人のために多少は貢献できないかなと思うようになった。手っ取り早い手段は寄付をすることだ。世の中にはお金で解決できる問題は多い。ただお金を出すだけで世の中のためになるなら楽なものだ。金は命よりも重いが、負担にならない程…

『Who Gets What』

アルビン・E・ロス著『Who Gets What――マッチメイキングとマーケットデザインの新しい経済学』を読んだ。本の内容とは別に考えたことを記す。 Who Gets What (フー・ゲッツ・ホワット) ―マッチメイキングとマーケットデザインの新しい経済学作者: アルビン・…

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

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()で止められるようにする。 …

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

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

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

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

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

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

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

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

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

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