2009年6月27日土曜日
2009年4月5日日曜日
2009年2月22日日曜日
2009年2月6日金曜日
マイクロソフト、Windowsでのエラーを自動修正するオプションを追加
2009年2月4日水曜日
涙ぐましい後方互換性
Windows95を出荷する際のMicroSoftの開発者たちの苦労話。
主要なサードパーティ製アプリケーションがすべて正常に動作するようにしたそうです。
レイモンド・チェンのThe Old New Thingと同じですね。チェンはSim Cityについて語っていましたが、中島さんはWin3.1用の教育ソフトですね。
弊社のパッケージでも、メジャーバージョンアップではデータ構造から作り直しをすることがよくあるんですが、下位バージョンを使っているユーザーさんのために、このリンク先のようなことは頻繁にやります。
旧版のデータ構造を消さずにそのまま残しておいて、旧版からの移行ユーザーの場合だけ、わざわざ旧版のテーブルを一旦作ってから新版のテーブルへバケツリレーのようにデータを転記したり(ユーザーさんが自前で作成しているI/Fプログラムへの配慮である場合が多い)、旧版のロジックをほとんどそのまま残して、特定のユーザーさん向けに特殊設定を出荷して、旧版モードでもとりあえず動くようにしたり(ユーザーさんが業務のやり方が変わることを望まない場合を考慮して)。
Windowsと比べるなんて恥ずかしいですけどね。規模が全く違いますし。。
ただ、規模こそ違えど、ユーザーが日常的に利用するアプリケーションを作っていて、それがバージョンアップ時の足かせ(言葉悪いですが)になっている感じが似ていて、心強くなりました。
特に、中島聡さんのブログは弊社と考え方が全く同じで、感動しました。毎日ひどい思いして開発しているけど、間違っていないんだなあと確認。
MicroSoftのこの伝統は、今も生きているようです。
本当はすごい「Windowsの互換性維持」:ITpro
でも、Windowsは好きじゃないけどね。。
2009年2月2日月曜日
エンタープライズソフトウェア企業というのはテクノロジー企業ではない
さきほどのFizz-Buzz問題に続いて、同じ青木さんの翻訳されたポール・グレアムのエッセイ。
読んでいてギクッとなった箇所を抜粋。
技術的に難しい何かをするスタートアップをやれるほど頭が良くないと思っているなら、エンタープライズソフトウェアを作ればいい。エンタープライズソフトウェア企業というのはテクノロジー企業ではないのだ。彼らはセールス企業であり、セールスでは努力がものを言うのだ。
ひどいなあ。。当たってるよ。
たしかにうちの会社もエンタープライズソフトウェア分野のベンチャーで、確かに技術的に難しいことはやってない。やる必要もない。
セールストークと、力技の会社だ。具体的なことを書くと社名がバレるので書きませんが。
せいぜい、100万オーダーの伝票を一瞬で照会したいとか、各社ごとに違う業務フローをパラメータ設定だけですべてフォローするとかくらいですかね。難しいのは。
前者はシステム開発としては大事で手を抜けないところではあるけど、特別技術的に難しいチャレンジがあるわけではないし、後者は極端な話、顧客の数だけプログラムを書き、巨大なif節で呼び出すプログラムを分岐させればいいだけ。(嘘みたいな本当の話)
っというわけで、ポール・グレアムにずばり言われてますね。。しかも2年も前に。。
どうしてプログラマにプログラムが書けないのか
上記の記事から引用(一部抜粋)。
開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。Fizz-Buzz問題の例はこんな感じだ。
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
僕はDelphiでやりましたが、3分くらいかかりました。。死にたい。。
あの命令をDelphiではどう書くんだっけ、とヘルプを見るのに1分くらい使ってしまった。。
アルゴリズムは一瞬で浮かぶけど、それを各言語の仕様に落とすときに混乱するなあ。
beginはどこに書くんだっけ、とか、セミコロンは入るんだっけ、とか、あ、間違って中括弧"{}"付けちゃった、とか。
うわ、間違って74バイト目に記述しちゃった! とか。(20代以下のプログラマーには何の話だか分からない)
あ、変数宣言するの忘れた! とか。(←最近Pythonで遊んでるのでやりがち)
ちなみにうちの会社のへっぽこプログラマーたちのほとんどは2分では終わらなかった。。ああ。。
特にひどいのは10分たっても終わる気配すらなく、さらに言うとロジックが間違っていました。
3と5両方の倍数でFizz、Buzz、FizzBuzzの3つすべてが出力される! という。。。orz
2009年1月29日木曜日
Make Link いい FireFoxアドオン
ブログにリンク先のタイトル書いてaタグ書くのめんどいなあと思ってたら、FireFoxアドオンにいいーのがあった。
上記サイトなど参考にしました。
これ、自分が見ているページのどこでも右クリックすれば、ハイパーリンク付きのテキストとしてクリップボードにコピーできる。コピーの書式もカスタマイズ可能。
すげべんり。
1月28日はジャクソン・ポロックの誕生日だったんだ
はてなのCTO伊藤さんって同い年じゃん
はてなのCTO伊藤さんの記事が面白かった。
ちょっとオーダーが違うんだけど、会社の製品開発の参考になりました。うちの製品はここまですることは無いんだけど、でもスピードにはこだわりたい。。
内容は私のようなヘッポコには難しく、理解できたのはここと、
大規模データをI/Oするコツは、「いかにメモリだけで済ませるか」。OSのキャッシュの仕組みを理解すること
あとこの部分くらい。
1. バッチ処理でデータを抽出する
2. 用途に応じたデータ構造でインデックスサーバーを作成する
3. アプリケーションからRPCでクエリする
このあたりは理屈としても手法としてもそんなに珍しいことではないんだと思うけど、きちんと実装しきるのってとても難しいよなあと。
また、伊藤さんの最後のここがかっこいい。
例えば、キーワードでリンクしたいということを誰かが思いついたときに、『TrieでCommon Prefix Search、分かち書きの世界』という技術的な問題に帰結できるかどうか。それでサーバーの計算量が決まってくる。それこそ会社の持つ「技術力」なのだ、と全体を締めくくった。
うちの会社にはこんなことを胸張って言える人がいない。それが問題なのかもしれない。技術力が著しく軽視されている社風だからな。。プログラムなんて誰でもかけるし、システム開発なんてバカじゃなきゃ覚えられるというのは社長の弁ですから。
さて、上記の記事を読んでいてはてなのCTO伊藤さんって何歳なんだろうと思って調べてみたら、、、
「ココログ」開発者、はてなへ (1/3)
2005年の記事当時で27歳ってことは、同い年ジャン!
うーむ。。差を感じる。どこでこの差はついたんだろう。鬱出汁脳。。。
2009年1月28日水曜日
MicroFocusからEclipse用COBOLプラグイン
うちの会社はMicroFocusからライセンス買ってるから、これも使えるのかな?
うちのパッケージ、まだCOBOLソース残ってるんだよね。僕自身、ほんの2年前までCOBOLの新規ソース作ってたし!
最近はさすがに新規をCOBOLで作ったりしないし、COBOL書けるやつ、読めるやつ、どっちも減ってきたんだけど、これあると便利だな。。
今は秀丸に自前のマクロを組み合わせてみてるんだけど、アウトライン表示とか、コードコンプリートとか、宣言の参照とか、できなくて不便なんだよね。
2009年1月27日火曜日
【GIZMODOから】「Ubuntuのデルがややこしいからオンライン大学履修できなかった」と女子大生がTV出演(動画あり)
GIZMODOから。
確かに、Winとちょっと違うだけで普通のユーザーは全く何もできなくなりますよね。。
これ分かります。。
自宅サーバ公開しました
まだまだなにもできていないのでURLはお知らせしませんが、一応Apacheは動いているみたいです。
LAMPで開発するのは初めてだし、HTML書くのも10年ぶりだし、Web開発はど素人だけど、新しいことをやるのは楽しい。
なんせ、社会人になってからいままで、ずっと基幹業務(主に会計)の分野でC/S開発だけをやってきたので、新鮮だなあ。
でも、思い返してみれば、学生のころはWeb開発やりたかったんだよなあ。HTMLを書くバイトをしていたし、自分でHP作ってたし、当時はやってたナップスターで遊んでたし、出始めのころのグヌーテラを見て、P2Pの可能性に心ときめかせてたし。。。
(Web開発とP2Pって関係なくね、という突っ込みはナシの方向で。。)
この後、Winnyが社会問題になるわけですが、僕自身はそのころはSAPをやっていて、とっても退屈なデータ移行とか、並行稼動テストとか、お客様の社内調整の手助けとか、そういうつまらんことをやっていて、どんどんIT自体に興味を失っていったのでした。。
そういうわけで、完全にIT業界が嫌いになって7年くらいになるわけで、その間、自宅でPCに触るなんてことはほとんど無かったわけです。
そんな僕が、今またITに興味を持ち始めている。ちょっと驚きです。
Ubuntuに触れ始めてから一気に昔の「PCをいじっているだけで楽しいあの感じ」が戻ってきました。
思えば、学生のころはずっとMacをいじっていたわけで、社会人になって初めてWindowsに触れたのでした。
偶然かもしれませんが、ITに興味を失った時期と重なります。
Windowsで、退屈なデータ移行をやっていた時期と重なる。
今回、新しい世界が見えてきて、とっても楽しいです。やったー。
…でも、自宅サーバ公開した途端にNMAPポートスキャン攻撃とか食らってちょっと鬱。。
ネットの世界は厳しいなあ。。。
2009年1月22日木曜日
ubuntu server couldn't finde package
特にサーバを立てる必要はないのだが、遊びでやってみることに。
自宅には余ったPCがなかったので、昨年末にアキバのソフマップで型落ちの富士通FMVを¥3,000で購入。
スペックは下記な感じ。
CPU Celeron 2.50GHz
メモリ 512MB
HDD 36GB
これで¥3,000って安いんじゃないかと思うけど、どうなんかな。
そんな感じです。
ネットワークの設定でつまずいて、apt-getが通らなくて困った。
http://jp.archive.ubuntu.comの名前解決が出来ないらしいメッセージが出ていたのだが、ネットワークに疎くて解決するのに時間がかかった。
ubuntu日本語フォーラムの下記の記事がとても参考になりました。感謝です。
http://forums.ubuntulinux.jp/viewtopic.php?id=2741
2009年1月20日火曜日
2009年1月19日月曜日
WinもIPythonにしちゃった
とやっているうちに我に返りました。
こんなに重くて、いろいろ面倒なCygwinを入れる必要あるのか??
会社でPythonを使うとすれば、それは何らかのツールを作っているときだし。
わざわざCygwinをいれるほど僕はUnix野郎じゃなかった気がする。。。
というわけで、会社でのPython開発環境もIPythonにしました。
さあ、仕事でつかってみよー。
ipythonの方が便利じゃん
っということで、ipythonを導入。
参考にしたのは下記のあたり。
IPythonって最高!
コード補完超便利。インタラクティブシェルだし最高。
加えて、lsとかある程度のshellコマンドも使えるので、コンソールを切り替える必要がなくて楽。入出力の履歴も見れるし。デバッグもできるらしい。
で、こうなってくるとインタラクティブシェルで書いたコマンドをファイルに保存したい。
エディタ立ち上げて書き直すのも面倒。
そのあたりは下記を参照しました。
pythonのシェルで入力履歴をファイル保存する
結構いい感じ。日本語の扱いに不安が残るけど、まあ調べれば何とかなるでしょう。
会社のWinマシンにもCygwinを入れたので、会社でも使ってみようかな。
2009年1月12日月曜日
オープンソースで分からないこと
- 自分のローカルにあるソースをカスタマイズしたのち、公式版がバージョンアップした場合、ローカル版はどうなるの?
- 修正したソースを公式のリポジトリにコミットしたとして、各地から上がってくる修正の中にはお互いに利害が対立するソースもあるはずだけど、利害調整は機能してるの?
- コミッタを限定することで混乱を避けているのかもしれないが、逆に言うとユーザーが各地で行っているカスタマイズは拾えていないということ?
- だとして、亜種が大量に生まれると思うのだが、それは誰の利益になるの?
自分は仕事で大企業向けの業務ソフトを作って提供しているんだけど、その中で上記のようなシチュエーションになることはしょっちゅうなわけで。
なにしろ数百社のユーザー先でそれぞれ導入プロジェクトが走っていて、そこから期限付きの修正要求や機能拡張要望が集まってくる。
それらの中には、平気で矛盾した要求がくるわけで、例えば売上データを入力して、それを基に請求書を発行するという機能を例に上げると。。。
- A社:売上データの承認が終わるまで請求書発行出来ないようにしてほしい
- B社:データの承認を待たずに請求書発行出来るようにし、承認後に訂正分があれば別途発行してほしい
- C社:データの承認も、請求書の発行も一切出来ないようにしてほしい
上記の例はものすごく簡単な例だから実装も単純だけど、それでもちょっとした気遣いは必要なわけで。
これらの要求を矛盾なくパッケージとしてまとめて出荷することを、毎月やっているわけですが、これと同じレベルのことをオープンソースプロジェクトの人たちは本当にやれているのだろうか。。
そんな素朴な疑問がわくわけです。
特に業務システム、ERPの分野とか、nexediっていうところがオープンソースのERPを提供し始めているけど、上記のような理由で難しいんじゃないかなと思ってしまいます。
ただ、個人的にはすごく注目しているんですけどね。
業務システムの分野こそ、オープンソースにする価値はある気がするから。
これは、何らかのプロジェクトに参加してみないと分からないのかな。
ちっちゃなプロジェクトじゃ意味ないんですけどね。
2009年1月3日土曜日
geditからPythonを直接実行できるようにする
で、開発環境としてEclipseも考えていたんだけど、もうすこし軽快なエディタでさくさくやりたいなあ、ということでいくつか物色。
結局、gnomeに標準で付いてくるgeditにしたんだけど、他にもIDLEとかEmacsとか色々あるのですねえ。
この際、Emacsを覚えてハッカー気取りになりたいなあと思いつつも、きっとEmacsを使えるようになる前に飽きるなあと思ったりしていました。いやあハッカーにはなれないですなあ。
で、geditにはPythonコンソールというプラグインが付いていて、エディタでコーディングしながら下のペインでインタラクティブシェルが使えるんです。これはこれで便利です。
が、所詮インタラクティブシェルなので、ほんの数行書いて試してみるくらいならいいのですが、書き上げたプログラムのテスト実行するのには面倒なので、ちょっと拡張してみることにしました。

まず、「編集」メニューの「設定」から「プラグイン」タブを開き、「外部ツール」にチェックを入れ、外部ツールプラグインを有効に。
このプラグインは、geditのメニューから任意の外部コマンド、シェルスクリプトを実行出来るようにするものみたい。ショートカットも割り当てられるのでかなり便利。
今回は、他のIDEと似た動きをさせたいので「F9」キーの押下で実行出来るようにしたい。
あらかじめ組み込まれている「コマンドの実行」で近いことは出きるが、これだと毎回実行コマンドを手入力しないといけないので少しめんどう。
なので、この「コマンドの実行」に記述されているシェルスクリプトを参考に、以下のような新規コマンドを作成。
#!/bin/sh
exec `zenity --entry --title="Run command - gedit" --text="Command to run" --entry-text="python "$GEDIT_CURRENT_DOCUMENT_NAME`
その他、入力を「編集中のドキュメント」に設定。(下図参照)

これでF9を押すと。。。

こんな感じになります。これでOKを押せばPythonスクリプトをgeditから実行出来ます。
引数が必要なスクリプトであれば、この画面で.pyの後にスペース区切りで渡してやればいいと思いますよ。
ダイアログをはさむのが面倒であれば、もちろん下記のように書くだけでいいと思います。
#!/bin/shってな感じで遊んでいます。仕事に関係のないプログラミングは楽しいですね。(今回はプログラミングしてませんが。。)
python $GEDIT_CURRENT_DOCUMENT_NAME
今のところの目標はpygameを使って簡単なゲームを作ることにしています。。
とりあえず、リバーシを作るかな。ベタに。。
ちなみに特に触れませんでしたが、今回このカスタマイズをするなかでzenityというgnomeのツールの存在を知りました。(上記のコマンドのなかにもサラッと出てきていますね)
コマンドラインから簡易なダイアログを生成することが出きるので、ちょっとしたスクリプトもまるでGUIツールのようにリッチなふりが出来ますね。
これかなり便利。