昨日のギャラリーフェイクより

「発明家である以前に、一人の時計職人であった」

一般にとって非実用的な時計であっても、所有者であるマリー・アントワネットに最も適した時計を作った(アニメの設定)ブレゲに対して主人公がこう評した。あくまでアニメの中の話なんだけど、なるほどと思った台詞。

僕もプログラマーである以前に、ユーザにあったソフトを作る職人でありたい。ソフトに限らず、ネットワークでもシステムでも、技術的にどうとかじゃなく役に立つかどうかが重要だということを忘れないようにしたい。

最終更新時刻: 2008年10月29日

Win32環境のデバッグメモ / フォルダ展開機能 / 今開いているページのタイトルをコピーするbookmarklet / プログラマーに必要な知識 / 日常のSubversion

今開いているページのタイトルをコピーするbookmarklet

Bookmarklet のリンクにターゲットを指定する | alectrope

のスクリプトを参考に(というかほぼそのまま流用)してtDirayのRDフォーマットのためのリンクをクリップボードにコピーするbookmarkletを用意した。長いので途中で改行を入れているが使うときは多分1行のほうがいいと思う。

javascript:(function(){window.clipboardData.setData('text',
'((<"'+document.title+'"|URL:'+location.href+'>))');})();

プログラマーに必要な知識

Programmer’s High! - 初級プログラマ最短作成方法経由Island プログラマになるには/小品集の楽しみより

プログラミングを基礎から、しかも手っ取り早く身につけるにはどんなコースが良いだろう。

まずは、Unix環境でOSの概念とCの基礎を身につける。低レベルのインタフェースまでブラックボックスになってしまっているのは、学習環境として好ましく無いからだ。本を一冊、私が思い当たるのは、ちょっと古いが Kernighan&Pikeの"Unix Programming Environment" かな。これは大して分厚く無いくせに、一冊でUnixの基礎からシェルプログラミング、システムプログラミングのさわりやら構文解析やらまでカバーして、おまけにUnixの基本思想がわかるというお得な内容だと思う。最近のunixに慣れた目には古くさく映るかもしれないが(emacsもperlも無し。ネットワーク関係も弱い)、基礎を学ぶにはこのくらいシンプルな方が良いのではないか。 (同じくらいの範囲をカバーして、最近の技術にも触れた本って出ていないのでしょうか。ご存知の方いましたら教えて頂ければ幸いです)。

これに、リファレンスとしてKernighan&Ritchieの "The C Progamming Language" を揃えて、Unix boxを一つ見付けて一ヵ月も遊んでいればだいたいの仕組みはわかる。もうsedとawkで住所録を作り、Cで電卓プログラムを作るくらいは出来るようになってるはずだ。 yaccとlexで簡単なインタプリタやトランスレータも作れるはず。オープンソースのコードを拾って来て読んで参考にしよう。emacsは同時進行で覚えておく。

次にPerlとHTML (今なら、sed, awkをすっ飛ばしてperlに行ってしまっても良いのかもしれない)。テキスト形式のデータから様々なWebpageを自動作成できるようになるだろう。こまごまとしたコマンドラインツールをPerlで作ってみよう。正規表現で寝言が言えるようになろう。動的データ構造を使ったアルゴリズムをいろいろ試してみよう。 CPANからコードを落して、ソースを読んでみよう。一ヵ月。

それからネットワークだ。スクリプティング言語で手軽にネットワークアプリが作れる時代だが、一応低レベルのソケットインタフェースはCでやっとかないと却って分かりづらい。いきなり高レベルのから始めてしまうと、トラブルの際にどうしたら良いのかわからなくなる。簡単なクライアントとサーバを作る。サーバ側ではdaemonにするためのテクニックやinetdの仕組みなんかも学べる。一ヵ月。

ここでCGIとHTTP。もうプロセスの概念はわかっているだろうから、パーミッション関係のトラブルなんかは見当が着くだろう。RFCの読み方もわかっているだろうから、何で最初にContent-Type:が来て、何で空行が必要かもわかるだろう。要するに、これまでの知識の上にちょいと積み重ねるだけである。Webの世界は他にもいろいろ目新しいテクニックが溢れているが、基礎が分かってればすぐに追い付けるので、あまりそっちを追っかけない方が良い。最近はオープンソースのデータベースサーバなんかがあるので、CGI内からSQLサーバにソケットで繋いでデータをやりとりしてみても面白い。 HTTPを学んで検索ロボットを作ってみても良い。一ヵ月。

そろそろ見た目カッコ良いGUIが作りたくなってきたか。ネットワークとは逆に、GUIは高レベルのスクリプティング言語で始めることを薦める。イベントドリブンの概念は高レベルの言語でも変わらないし、低レベルでは余分な約束事が多すぎて学習効率が悪い。せっかくPerlをやったんだからPerl/Tkを始めてみても良し。色んな言語を知りたければPython/Tkを始めてみるとか、カッコつけたければ Scheme+TkであるSTkをやってみても良い。見た目を追求したければGtkだ。 Unixの世界でもインターフェースビルダがいくつか出て来ているが、最初は全部コードで書いた方が良いだろう。インタフェースビルダを使うと、ジオメトリの管理なんかがわかりづらい。既にUnix的思考法に慣れているはずなので、簡単なインタフェース記述からソースコードを自動生成してみるなんてことももう自然に出来るはずだ。オブジェクト指向の考え方も身につけよう。一ヵ月。

これまでで、ひととおりのことはわかるようになったと思う。ここまで来たら、今までちょっとづつかじって来たものの背後にある一般的な理屈に目を向けても良いかもしれない。言語処理系の原理だとか、OSの基礎概念、様々なネットワークプロトコル。具体例を知っているから、分かりやすいはずだ。そして、一度一般化出来れば、新しいシステムを学ぶのはうんと楽なはずだ。例えば、新しい言語を学ぶ必要が出て来たら、ちゃんとした本 (普通はその言語の開発者が書いたものが良い) を一冊買って来て斜め読みしながらいくつかプログラムを書いてみれば、すぐにそこそこ使えるようになるだろう。オープンソースのプロジェクトに参加して、良質のコードをたくさん読み、大きなシステムの設計法を覚えよう。共同作業を円滑にするためのコーディング慣習やドキュメントの書き方も学べるだろう。一ヵ月。

以上半年で初級プログラマの出来上がり。

或曰: SF研新入生歓迎会より

基礎は IT 系だろうがゲーム屋だろうが変わらず、計算機論理設計・OS・コンパイラ理論・アルゴリズム論といった分野で、あとは toy program ではない“本物のプログラム”を読み書きしてればゲーム固有の部分なんて OJT で 2 ヶ月も勉強すれば十分に身に付く。“本物のプログラム”は何でも良いけど、たとえば FreeBSD (kernel に限らず /usr/bin のコマンドのソースとか), Apache あるいはエディタやスクリプト言語のソースコードなどなど。MINIX も勉強用には悪くない。 ある程度の規模のプログラムを読み書きできるようになったら、構造化・オブジェクト指向プログラム設計やデザインパターン、ジェネリックプログラミングなどを勉強しておくと一段高みに上れる。

最終更新時刻: 2008年10月29日


Command Prompt Explorer Bar / 図書館で勉強 五週目 / モバイルのインターネット接続環境 / Effective C++: 55 Specific Ways To Improve Your Programs And Designs

図書館で勉強 五週目

図書館で勉強5週目。

といっても最近は勉強よりもプログラミングのほうがメインになりつつある。

モバイルのインターネット接続環境

現在は64kbpsで使い放題の@freed。利用頻度は週8時間くらい。

乗り換え先を検討中。

  • b-mobile
  • WILLCOM

ホットスポットも使いたいので今のところb-mobileが有力候補。

最終更新時刻: 2008年11月02日

「ThinkPad X41」開発者インタビュー

山田祥平のRe:config.sys【特別編】 - レノボ・ジャパン「ThinkPad X41」開発者インタビュー

やっぱり今買い換えるとしてもThinkPadシリーズがいい。改めてそう思った。

最終更新時刻: 2008年08月18日

Visual C++でdspをコマンドラインでビルドする / 無駄なドキュメントは書くな / 充実していると感じるとき / プログラマーとして1年

Visual C++でdspをコマンドラインでビルドする

或曰:Visual C++ 6.0 / コマンドラインからのビルド

makefile のエクスポートをせずとも、

MSDEV.EXE DxApp.dsp /MAKE "DxApp - Win32 Debug UNICODE"

なんて感じでビルドできるのね。

無駄なドキュメントは書くな

未来のいつか/hyoshiokの日記 - 無駄なドキュメントは書くな

断言する。実装に関するドキュメントと最新の実装は常に食い違っている。いまだかつて同期したことがない。無駄なドキュメントを書く時間があるならコードを洗練しろ。無駄なドキュメントを書く時間があるならコードをドキュメントにしろ。

ソフトウェア工学の教科書にドキュメントの重要性が書いてあるからといって信用してはいけない。ウオーターフォールモデルが商用ソフトウェア開発の現場で役にたたないように、実装に関する詳細ドキュメントは百害あって一利なしである。

ひげぽん OSとか作っちゃうかMona-経由

充実していると感じるとき

特に仕事やプログラミングに限らないが、自分が充実してると感じるのは新しい知識を吸収しているときと、吸収した知識を活かしているとき。

若いうちは前者に多くの時間をかけたいと思う。

プログラマーとして1年

自分の向き不向きと今時点の自分の相対的なスキル、足りないもの、求められるもの、やりたいことなどが少しずつわかってきた。

それらを踏まえて今後どうなるのか、どうするのかを考えていきたい。

しかし問題はそんなことを考えている余裕の無い現状。あまり急いで答えを出したくないし、考える余裕を作る環境作りが先かも。

最終更新時刻: 2008年10月26日


Araxis Merge/ファイル比較マージツール / Adobeの3Dソリューション / tDiary 2.1.1(dev) released!!

Araxis Merge/ファイル比較マージツール

Araxis Merge/ファイル比較マージツール

差分結果を印刷できるDiffツールは無いか?と聞かれて見つけたソフト。自分で普段使っているWinMergeやRekisaは残念ながら印刷機能がないのでこのソフトの評価版をお薦めした。印刷結果を見せてもらったが、行中の差分をハイライトしてくれたりしていい感じ。HTML書き出し機能も素晴らしい。

Adobeの3Dソリューション

以前、AdobeのWeb3D作成ツールにAtmosphereというソフトがあったが、最近名前を聞かない。米Adobeの公式サイトによると現在は販売/開発を行っていないらしい。

Adobe Atmosphere

Adobe has discontinued the sale and development of Adobe(R) Atmosphere(R) software. If you are interested in Adobe's 3D technology solutions, check out Adobe Acrobat(R) 7.0 Professional software.

簡単に訳すと「AdobeはもうAtmosphereの販売と開発は行いません。もしAdobeの3Dテクノロジーソリューションに興味があるなら、Adobe Acrobatを調べてみて下さい」といったところだろう。

なんで3DなのにAcrobatなんだ?と思ってリンクされているAdobe Acrobat Professionalページを見てみると、最近のAcrobatは3Dビューワーを内臓しているらしいことがわかる(Highlightsより)。

ちなみに日本AdobeのAdobe Acrobat Professionalには<3D>の文字は見当たらない。探してみるとAdobe Acrobat - 建築業(AEC)向けソリューションに、以下の記述を発見した。

3DコンテンツをAdobe PDFファイルにインポートし、あらゆる設計図やプロジェクトに関する文書を簡単な操作でやり取り インタラクティブな3DデータをAdobe PDFで表示

しかしこれはこのページにもあるように建築業界などの図面のようなCAD的用途にフォーカスを当てている機能だろう。しかも「インポート」と言っているあたり、3D作成機能がついているようには思えない。今のところAcrobatは3Dビューワーではあるが、AtmosphereのようなWeb3D作成ソフトを置き換えるものではないようだ。

tDiary 2.1.1(dev) released!!

早速、ここで使っているtDiaryをアップデートする。理由は新機能である<n日表示機能>が使いたかったから。

毎度手作業でアップデートしているのでメモする

  • 運用ディレクトリ(e.g. /diary)とは別のディレクトリ(e.g. /diary2)にtDiaryのアーカイブを解凍する
  • 今の設定を移行
    • /diary/.htaccess
    • /diary/tdiary.conf
  • RDスタイルにする。
    • /diary2/misc/style/rd/rd_style.rbを/diary2/tdiary/にコピー

ここまでで/diary2にアクセスするとエラーにならずに表示できる(テーマは適用されていない)

  • 自前のテーマを移行。
    • /diary/theme/my/*
  • データを移行。
    • /diary/data
    • /diary/images
  • プラグイン等を移行。
    • /diary/grep.rb
    • /diray/image_size.rb
    • /diary/index.rdf
    • /diary/rdf.png
    • /diary/plugin/image_ex.rb
    • /diary/plugin/similarity_search.rb
  • プラグインをインストール
    • /diary/misc/plugin/xmlrpc/xmlrpc.rb
    • /diary/misc/plugin/trackback/tb.rb

あとは運用ディレクトリの名前を変更(e.g. /diary3)して新しいtDiaryのディレクトリを運用ディレクトリ(e.g. /diary)にすれば完了。

念のため以前の運用ディレクトリ(e.g. /diary3)はしばらく残しておく。

本当は上書きするだけでいいのかも。

最終更新時刻: 2008年11月01日

ファイル選択ダイアログで落ちる (8) その後 / 何がやりたいのか / Windows XPからファイルサーバへの接続が非常に遅い

ファイル選択ダイアログで落ちる (8) その後

リンク元から発見したBaba Centerfolds - ファイル選択ダイアログで落ちるに再現状況が詳しくかいてある。

回避策として紹介されているツールチップを消す方法は今のところ一番簡単そう。

Adobe のユーザフォーラムでもスレが立っていて: [フォルダオプション]-[表示]の [フォルダとデスクトップの項目の説明をポップアップで表示する」のチェックをはずす。 これが一番よさそうです。

何がやりたいのか

結局のところ、プログラミングは楽しいけれどプログラミングだけする仕事は嫌。これらのすべてを仕事内でやろうとは思わないが、今は趣味としてやっている時間が少ないことが問題。

  • システムの構築/管理したい
  • ネットワークの構築/管理したい
  • サーバーの構築/管理したい
  • サイトの構築/管理したい
  • Illustrator/Photoshopなんかでデザインチックなこともしたい

システムの構築を効率よく進めるスキルを磨くためにもプログラマーを経験しておきたい、と思って行動(今の会社に就職)したのが1年前。

この1年忙しかったのはいいんだけど、そろそろ余裕を作らないとチャンスを逃してしまうしスキルアップを妨げる。

Windows XPからファイルサーバへの接続が非常に遅い

Windows XPからファイルサーバへの接続が非常に遅いより

本事象はWebClientサービスが有効な場合にのみ発生しますので、WebDAVを全く使う予定がない場合は、クライアント側のWebClientsサービスを停止してしまうことが一番簡単な解決策です。

最終更新時刻: 2008年10月30日



lua / 日本のエンジニア / StampVer / 自サイトへのリンクをハイライトする Bookmarklet

lua

或曰: お仕事で触れられてた、組み込み用スクリプト言語lua。

StampVer

Elphin: StampVer

WinMergeのビルドで使われてるツール。

自サイトへのリンクをハイライトする Bookmarklet

[戯] 自サイトへのリンクをハイライトする Bookmarklet

最終更新時刻: 2008年10月30日

TortoiseSVNSCC / 編集可能なコントロールのサンプル / 社長と飲んだ / 「システムエンジニア」「プログラマー」の定義

TortoiseSVNSCC

Regsvr32.exe TortoiseSVNSCC.DLLするとアプリケーションエラーで落ちるので使用できず。install.reg書き換えて手動でレジストリに登録すれば使えるのかも?

tortoisesvnscc.tigris.org

編集可能なコントロールのサンプル

要するにクリックイベントが発生したとき、選択したセルの上にエディットコントロールを重ねればいいみたい。

社長と飲んだ

久しぶりに社長とサシで飲む。1年たっての現状と、自分が今後どうしたしたいかという辺りを報告する。それに対してどうすべきか、どうすればより良く仕事を進めることができるのか、といったあたりの話を聞くことができて有意義だった。

大切なことはマネージメント能力だ。自分(人)をマネージメントして時間を作って、先を見越して動く。結局のところどう時間を作るか、活かせるかが重要になるんだろう。

「システムエンジニア」「プログラマー」の定義

このメモでもよく「システムエンジニア」「プログラマー」と書いているが、実質違いなんて無いと思う。世間一般のイメージとして使い分けているだけで。

自分が思うそれぞれのイメージ。

  • システムエンジニア
    • お客さんから話を聞いて、プログラマーに支持する人
  • プログラマー
    • システムエンジニアから話を聞いて、実装する人。

大雑把にこんな感じ。どっちかだけしかできないのはつまらない。どっちもやると面白い(のか?)。

最終更新時刻: 2008年10月23日

新人はスケジューリングをしない

新人はここが分かってない!(前編)

未だにスケジューリングが甘いので自戒をこめて。

最終更新時刻: 2008年11月08日

TortoiseSVNの無視リスト

バージョン管理したくないファイル(Visual Studioが出力するファイル等)を除外するためにリストを作成した。

#
*.ncb *.opt *.positions *.aps *.clw

今のところこれだけ。dswは管理する。

最終更新時刻: 2008年10月29日


サーバダウン / [book][buy]いろいろ / RSSからコメントをはずした

サーバダウン

mylab.jpのウェブサービスが朝9時くらいから昼14時40分までダウン。

朝9時。コメントスパムが来てメールが携帯にバンバンくるので目が覚めた。あまりにもしつこいのでまずはApacheを止める(自鯖とはいえ強引すぎ)。そしてtDiaryのスパムフィルターがなくなっていることに気づく。確か20041225#p02の時、一緒にコメントフィルターも設定したはずなのに。

そういえば20050609#p03にフィルター(diary/tdiary/filter/*)の移行について触れてない。でも大丈夫。前の環境(diary2/)はこんなときのために残してあるんだから。と思って(diary2/)下を見てみると、ここにもない。

あー、そうか。20050403#p03でも移行してなかったか。2世代前のデータはバックアップとってないや。定期的にバックアップ取るべきだと改めて思った。

そしてここまで来て、Apacheを起動せぬまま2度寝。最悪。出先で気づいた。

フィルタ - ツッコミ、リンク元の記録を拒否する機能

いろいろ

C Magazineの今月号とバックナンバー2冊分と他いろいろ。

RSSからコメントをはずした

今回のようなコメントスパムでRSSにコメントが含まれると、フィードを利用してる人(自分も含めて)に迷惑をかける。のではずした。

最終更新時刻: 2008年11月16日

Lex and YACC primer/HOWTO / if(a=b)を検索する正規表現

Lex and YACC primer/HOWTO

Lex and YACC primer/HOWTO

if(a=b)を検索する正規表現

かなり適当。

if *([^(]*[^=!><]=[^=].*)

取りこぼしパターンいっぱい。あくまで目安。

最終更新時刻: 2008年07月09日


[book][buy] フリーランスはじめてみましたが… きたみ りゅうじ / 日本標準時 / モバイルインターネット環境 / 図書館で勉強 6週目 / Apache 2.0.54とPHP 5.0.4をWindowsにインストール

フリーランスはじめてみましたが… きたみ りゅうじ

フリーランス はじめてみましたが・・・(きたみ りゅうじ)

久しぶりに本を読んだ。

正確に言うと、専門書以外の本を読んだのが久しぶり。しかも借りたのではなく、購入したとなると何年か振りかもしれない。

著者のきたみりゅうじさんはサイトを運営していて、そのサイトは僕のお気に入りのひとつだったということが購入理由の一つ。フリーランスになったことも、当時の日記で知った気がする。

その人が本を出したのだから立ち読みくらいはする((-この本以前にも数冊出しているが、残念ながらまだ読んでいない-))。で、立ち読みしたら面白くてそのまま読み進めてしまった。これは購入せねば失礼だ。手元に欲しいし。

それに、SEからフリーランスになるということがどういうことなのかにも興味があった。同じ職業の先輩が、どうがんばっているのか気になる。

そういうわけで、先日購入してようやく今日読むことができた。読みやすい文章だったので小一時間で読了。感想としては「フリーランス大変だな〜」と「フリーランスいいな〜」の両方。

あときたみさんに限らずだけど、コンピュータ+「何か」ができる人は強い。その「何か」のひとつがきたみさんにとってはイラストなんだと思う。実際、僕はきたみさんのサイトの4コマまんがのファンの一人だし。

この本を読んで僕もコンピュータ以外orコンピュータをからめた「何か」がないとな、と改めて思った。

モバイルインターネット環境

今加入している@freedはネットサーフィン程度ならば使えるが、ファイルの送受信をやると不満が出てくる。帰ったらアクセスポイント/料金等を調べておく。

図書館で勉強 6週目

6週目、というか6回目。まぁ、スレタイ的なものなのでこのまま週目で続ける。ただ、漢数字だったのを英数字に変更する。

前回から2週間空いてしまった。久しぶりに来て、やっぱり集中できることを実感。

Apache 2.0.54とPHP 5.0.4をWindowsにインストール

最終更新時刻: 2008年10月26日

フレームはなぜいけないのか? / サーバダウン

フレームはなぜいけないのか?

Webサイトを制作するにあたって、お客さんor製作者から「フレームにしたいんだけど」と言われると大抵の場合「やめておいたほうがいい」と答える。

「なぜ?」と聞かれる。当然の疑問だと思う。フレームはお客さんからすれば常に同じメニューが表示されているので一見使いやすいし、製作者からみたらメニューが別ファイルになっているので管理が楽だ。もし、各ページにメニューがあったらメニューに変更があったときに変更するファイルが多数になって管理が大変そうに思える((-実際はサーバーサイトのスクリプトで解決することもできるし、他にも方法はある-))。

今日も同じ質問をされたが、咄嗟のことだったので「対応していないブラウザがあるから」という的を外れた答えしか返せなかった。ではスタイルシートはいいのか?と聞かれた。んー、ちょっと別の問題だけど先の返答ではそう返されても仕方が無い。

「HTMLの仕様が〜」とか技術者的な理由ではなく、対お客さん用の説明を考えておこう。検索エンジンから飛んできたとき困るとか。それも完全ではないがRefererで飛ばすこともできなくはないのだけれど。もっと単純な理由があったと思う。

サーバダウン

熱くなってきたせいか調子がwww.mylab.jpサーバの調子が悪い。やっぱりTerminatorに内蔵RAIDはきついか・・・。

午前中に多分2時間くらいダウン。

最終更新時刻: 2008年11月04日