計算機

プログラマの生産性の公式

n行の動くコードをコーディングするのにかかる時間をTとすると、Tはざっくり以下のようになるだろう。 T = n*(tc + tw) + n*b^2*(tc + tw + tb) + n*b^3*(tc + tw + tb) + ... = n*(tc + tw + tb) / (1 - b) - n * tb ここにtcはバグの有無を問わず1行のコ…

読まないドキュメントより読めるコード

ウォータフォール開発はとにかく仕様書を書くことが求められる。文章を書くこと自体は嫌いでないが、仕様書を書くことは嫌いだ。なぜなら、意味がないからだ。その仕様書を他の人が読んで意思決定が行われたり、その仕様書をもとに他の人が開発をするなら、…

機械が使うものか人間が使うものか

機械には 人間が使う機械 機械が使う機械 の2種類がある。 人間が使う機械とは、UI(ユーザーインターフェース)を持っている機械のことだ。従来道具と言われてきたものは、人間が使う機械である。自動車もスマートフォンもそうだ。 システムとして見た場合…

ITこそITで効率化せよ

情報通信技術(IT)の主な用途は既存の業務の効率化である。計算機は決まった作業を正確にするのに優れている。帳簿をつけたり、そろばんを弾いたり、書類を回送したりする作業は人間がするよりも機械がおこなった方が効率がよい。そのため、計算機はこれらの…

OSSとは標準規格である(3)――OSSを作る側の幸福

企業としてOSSを開発することにどういった利点があるのだろうかということについて ソフトウェア規格の奪い合い OSSは最大多数の最大幸福を実現する OSSを作る側の幸福 の順に書いている。今回は3回目である。 OSSを作る側の幸福 OSSは利用者を幸せするから…

OSSとは標準規格である(2)――OSSは最大多数の最大幸福を実現する

企業としてOSSを開発することにどういった利点があるのだろうかということについて ソフトウェア規格の奪い合い OSSは最大多数の最大幸福を実現する OSSを作る側の幸福 の順に書いている。今回は2回目である。 OSSは最大多数の最大幸福を実現する ソフトウ…

OSSとは標準規格である(1)――ソフトウェア規格の奪い合い

OSSは今や当然の存在だ。ソフトウェアが欲しいときに最初に検討するのはOSSだ。OSSを無視して計算機システムを考えることは不可能だ。 OSSは篤志家が開発していることも多いが、最近では企業が争って開発に参加している。私がお世話になっているHadoopもほと…

「Infrastructure as Code」について

「Infrastructure as Code」という言葉を良く聞く。基本的にはバズワードは好まない。馬鹿だと思われるからだ。 ビッグデータという言葉は嫌い - 超ウィザード級ハッカーのたのしみ しかし、Infrastructure as Codeは好きだ。言葉というより、コンセプトに同…

深いネストは忌むべき

Zen of PythonはPython以外の言語であっても私がコードを書くときの指針である。 その一つに、 Flat is better than nested. という文句がある。深いネストはコードの可読性を著しく落とす。スクリーンの右のほうに文字が寄っているコードは大変読みづらい。…

正しい開発プロセスなんてあるのだろうか

良いソフトウェアを生み出すためには良い開発プロセスが必要である。ソフトウェア工学のセントラルドグマだ。 複数人数で管理のない体制の中でまともな製品が生まれることはない。烏合の衆が勝手気ままに動いて製品が出来上がるほど我々は賢くない。 大きな…

テストの自動化なんてするもんじゃない

何でもかんでも自動化すればいいってものではないということ。 感覚的にですが、テストを自動化しようと思ったら手動でやる場合に比べて2倍から10倍の手間がかかります。保守を含めると、作るだけに比べて2〜3倍の手間がかかる。合わせると4倍〜30倍の手間…

CephのStraw2について

Cephについて調べております。 CRUSHの中のstraw bucketというアルゴリズムに驚嘆したのですが、改良の余地がありそうだと思えたので、もっといい方法はないかと考えてしました。しかし、Cephの作者はおそろしく頭がよく、私の発想の2段階先に行っていました…

Ceph, 特にCRUSHアルゴリズムについて

Cephに興味が出たので調べていまして、そのメモ代わりに…… どのサーバーが何のデータを持っているのか覚えておかなければならない問題 分散ストレージシステムで面倒な課題にデータの位置の管理があります。あるファイルがあったとして、そのデータを読みた…

AZIT: 高効率ローマ字入力法AZIK改良版

ローマ字入力の効率を向上させる入力法AZIKというものがあります。これを改良したAZITというローマ字入力法を作っています。 Google日本語入力用のローマ字テーブル: mozc_azit.txt 入力方法: README.md 今回は、AZIKのどこをよいと思ったのか、どこが気に…

日本語入力効率化のためのローマ字表

役人は文章を書くのが仕事です。 日本語入力を素早くすることは、役人の生産性向上のためには必須です。 親指シフトを覚えようかと本気で考えていました。しかし、親指シフトは学習コストが高すぎます。また、今後消滅するの方向にあるのはまちがいありませ…

連歌とWebと

連歌というものがあります。五七五と七七の句を交互に出し合って、複数人で歌をつくるというものです。 これ、Webでやったら面白いんじゃないの?と思いました。 懐かしのCGI掲示板的なものは見つけました: Web連歌 これはこれでサービスとして成立していま…

IoTについて

IoT (Internet of Things)という言葉がバズっております。IoTとは、人間だけでなく、モノがインターネットに接続して相互に通信しあうことができれば、なんか面白いことができそうだというものです。 この言葉を知って思ったのが、ゴロが悪いなということと…

ビッグデータという言葉は嫌い

ビッグデータという言葉が数年前から流行ってみますが、私はこの言葉が嫌いです。 Googleっぽいから BigTableとかBigQueryとかBigdaddyとかGoogleの分散システムにはBig~~~と名前が付いている場合が多いです。ビッグデータという言葉を使うと、Googleかぶれ…

ベンダーロックインの何がいけないのかさっぱり分からない

ベンダーロックインが悪いことだという風潮があります。弊社の製品を使えばベンダーロックインを防げますと歌っている製品は多いです。 しかしながら、ベンダーロックインの何がいけないのかさっぱり分からんのです。 カメラでニコンのFマウントのレンズを買…

メソッドの主語を統一したい

Javaでプログラムを書いていて気持ち悪いなと思うところは主語が一貫していないところです。Javaの文法でなくて慣例の問題です。 object.getValue(); というメソッドがあったとしてこの"get"の主語は何ですか?valueを得るのはこのメソッドの呼び出し元のク…

ソースコードは符号でなくて規則なのではないか

前回ソースコードは符号でなくて織物なのだからソーステキスタイルとでも呼ぶべきと書きました。 codeには符号以外の意味もあります。ドレスコードのcode、つまり規則です。 規則という意味であれば、ソースコードという呼び方も私にはしっくりきます。 なぜ…

コードでなくてテキスタイルと呼ぶべき

昔、ソースコードのコードのことを、符号という意味のCodeではなく、コード織りのCordだと思っていました。コードを書くこと、つまり部品が絡み合わせていって大きなソフトウェアにする作業は、布を織るようだからです。 文字コードのコードが符号という意味…

OSS潜入レポート

趣味でOSSコミュニティに潜入しております。調査対象は、お世話になっているHadoopの開発コミュニティです。 昔からOSSに対して疑問だったことがあります: こいつら仕事でもないのになんでプログラムなんて作っているの? OSS開発に潜入して、OSS開発者の正…

カバレッジってどうなんだろうね?

Apache Hadoopの開発システムは、成功しているプロジェクトということもあって、かなりイケています。 パッチにテストコードが含まれているかどうかや、それが通るかどうか、スタイルが適切かどうか等を機械が自動的に判別してくれます。 そういう機械による…

ビルドツールの決定版ってないのかね?

ビルドツールは世の中に山ほどあります。 CならGNU MakeとかWafとかSConsとか。あるいはMakefileを出力するものとして、AutotoolsとかCMakeとか。 JavaならAntとかMavenとか。 スクリプト言語にはビルドは必要ないが、テストしてパッケージに巻き取るツール…

Rasberry PiでHadoopクラスターを構築する。その2

したこと: 配線を綺麗にした 前回と比較してほしい。かなり美しくなっている スイッチングハブをBuffalo製のに変えた。 初期不良を掴んでしまったみたいなので、新しく買った。2000円なので交換する手間のほうが高いので。 Raspiが100Mpbsしか無理なので、全…

Rasberry PiでHadoopクラスターを構築する。その1

Raspberry PiでHadoopクラスタを作ろうと思いまして、ゴニョゴニョしております。 写真のようにハードウェアは組み上がりました。 構成としては、 部品 メーカー 個数 Raspberry Pi 2 B 6 USB HDD 1TB Trancend 5 Micro SD Class 10 Sumsung 6 100 Mbps 8ポ…

ARM用にHadoopをビルドする。

Raspberry PiでHadoopクラスタを作ろうと試みています。 Raspberry Pi 2 Bを1個買いまして、Raspbianを入れました。Rapbianは入っているパッケージ等が実験的すぎるので、台数増えるとトラブリそうです。 Apacheから配布されているHadoop 2.6.0のバイナリを…

Hadoop用シェルが欲しい

Hadoopのコマンドって使いにくいじゃないですか?特に遅いところがイライラします。 Hadoopは、分散処理のフレームワークでしたが、最近は分散OSになろうとしていると思っています。OSの機能に相当するものが、分散システム上に作られてきています。 OSの機…

マンデルブロ集合を計算してみる3

前々回:マンデルブロ集合を計算してみる - 超ウィザード級ハッカーのたのしみ 前回:マンデルブロ集合を計算してみる2 - 超ウィザード級ハッカーのたのしみ マンデルブロ集合は以下示される複素数列の挙動について表したものである。 そこで、この複素数列…