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

投稿日: 2005年06月03月 更新日: 2017年07月22月

Win32環境のデバッグメモ

フォルダ展開機能

はてなの質問より

フォルダ展開機能 ”File Decompression Functions”を利用したプログラムを作成しようと考えています。”Zipfldr.dll ” どこかに、サンプルソース、ならびにヒントとなるドキュメント(MSDN){英日どちらでも}また、(これらがCOMインターフェイスの何を使っているかなど)、がありましたらよろしくお願いいたします。

今開いているページのタイトルをコピーする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 も勉強用には悪くない。 ある程度の規模のプログラムを読み書きできるようになったら、構造化・オブジェクト指向プログラム設計やデザインパターン、ジェネリックプログラミングなどを勉強しておくと一段高みに上れる。

日常のSubversion

なぜか数学者にはワイン好きが多い - 日常のsubversion

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ