久しぶりにブログ。
最近はずっと忙しかった。プログラム作る仕事だから基本的には楽しいからいいのだけど。
今日は朝まで生テレビを見ていた。非正規雇用者の貧困問題についてだった。僕はこの貧困問題については、市場主義が生み出したものなのかなと思っている。価値を作れる能力のある人はそれだけもらえるし、そうでない人はもらえない。僕は超市場主義者なのでこれでいいと思っている。弱肉強食。勝てないなら消えていく。その中で自分の勝てる分野を探していく。そういうことでいいと思う。
ただ、社会というものがある以上、その中でどうしても自分の場所を確保できなかった人のための最低限の保障は必要なのかなとも思う。しかし結局これは早い話が、能力のある人からの寄付(税金)ということになる。社会全体がそれだけの力がなければそれもままらなない。今日本はそれが出来ない状況に陥っているのだろうか。そんな寄付をしていたら高齢者への保障も、医療も、道路も、そして企業もダメになっていってしまう。そんな状況なのかもしれない。
結局お金が足りないのだと思う。国内でこちょこちょあっちからこっちにお金や物を動かしてもそもそも足りていないのだと思う。日本は対世界の価値を、僕たちが求めているほど生み出せていないのだと思う。
番組の中で日本の経済は良くなっていくのか、そしてどうしたら良くなるのかという問いに、堀紘一さん(僕はこの人が言っていることが番組全体を通して一番まともだと思った)が、日本の得意なものをやるしかない、それはコツコツやること、そしてチームワークであり、製造業を強くしていかなくてはいけない、ということを言っていた。そして「日本人はITではインドに、金融ではアメリカに絶対に勝てない」ということを言っていた。
この二つの勝てないものの発言は、ものすごく僕にとっては興味深い物だったし、確かにその通りだと思った。「ITは論理力、英語力、数学力この3つでだいたい決まる。そしてそれはインドには勝てない。金融は日本はもともとお金に対してあまり良いイメージを持っていない文化があり、向いていない。アメリカには勝てない。」というものだった。
結局のところ日本人はチームワークで戦うしかない。そして、製造業で、日本にしか持てない技術で戦うしかない。そういうことだと思う。
さて、僕はIT企業に勤めている。プログラマーをやっている。僕はインド人に勝たなくてはいけない。もちろんアメリカ人にも。そうしなくては生活ができない。論理、英語、数学。僕はどれも日本のIT企業の中ではまだぎりぎり勝負できるかもしれない。でもおそらくインドでは全く勝負にならないだろうと感じる。そしてアメリカでも同様に。
最近読むコンピュータ関連の情報は50%ぐらいは英語の情報になってきている。英語の方が新しいし、正しいし、量も圧倒的に多い。英語ができなければITの世界ではやっていけない。マイクロソフトの日本語訳のドキュメントの範囲でプログラムを書くだけなら問題ないが、それでは日本の片隅で動くプログラムしか書けない。それでいいなら別だけど、いまのところ僕はそのつもりはない。
My Daily Programming Life...
プログラミングは楽しいね
最近は頭の中はコンピュータのこと考えているのが80%ぐらいになっている。とにかく本を読んでいる。Webもかなり参考になる。
こうして今いろいろ勉強してみると、やっぱり素直に大学で情報工学科行っておいた方がよかったのかなぁとか思う。自分が知りたいことをいろいろ検索していると、しょっちゅう大学の講義資料とかそういうのに出くわす。情報工学科の人たちはこんなに楽しいことを学部の3年とかで勉強しているのかぁ、とか思うと、やっぱりそっちのほうがよかったかなぁって思う。まあいまさらどうしようもないので、いまからでも順番に勉強していく。
以前に日本のソフトウェア輸入額は輸出額の100倍あるって書いた。いろんな本を一度に読んでみて、その理由の一つが分かった気がする。情報が足りないか、誤っていることが多いと言うこと。
だいたい読む本は海外で出版されたものの翻訳が多い。海外の本にはかなりいい書籍があるということが最近分かってきて、さらにそれらは本当に今の、最新の情報が載っている。でも、それが翻訳されて発売されるまでにはかなりの時間を要するし、すべての本が翻訳される訳じゃない。
そしてその翻訳が意味不明なことが多いのも問題を大きくしていると思う。Windows SDKとかでもそうだったりすることもある。デバイスドライバの本を読んでいて、意味の分からないところがあって、なんどかその前後のページを読み直していて、ちょっと気がついて、それがもともとどんな英語だったか想像してみたら理解できたって事があった。
コンピュータの独特の用語とかそういったものが翻訳されるときに、どうするかというのは結構難しいと思う。
たぶん英語の文章も慣れれば日本語と大差なく読み進められると思うし、多少時間がかかってでも読めるようにしておいたほうが、あとあと楽だろうと思う。とにかく日本語翻訳の本を読むのはなるべく避けた方がいい気がしてきた。
日本の技術者が自分で書いている本はすごくいい本がたくさんあると思う。でも翻訳の本は、やっぱり読みにくいし分かりにくいと感じることが多い。
タイトルに「プログラミングは楽しいね」と書いたけど、今はプログラミングそのものよりコンピュータとOSの仕組みの理解に時間をかけている感じ。プログラミングの勉強としては、デザインパターンが最近の課題かと思う。言われれば分かるけど、自分でやってみてそれが本当にその方法論を実践できているのかを確認できるだけの力がない。
C++のライブラリでPOCOというのがある。これはデザインパターンを駆使して作られていると思う。そしてそれをC++で実装しているわけで、最近はこのソースコードが僕の教科書になっている。教科書にしてよいかどうかははっきりとは分かっていないけど、いろいろな評判を聞くと、決して悪いことはなさそう。
ところでC++難しいね、やっぱり。少しずつ理解していこう。
こうして今いろいろ勉強してみると、やっぱり素直に大学で情報工学科行っておいた方がよかったのかなぁとか思う。自分が知りたいことをいろいろ検索していると、しょっちゅう大学の講義資料とかそういうのに出くわす。情報工学科の人たちはこんなに楽しいことを学部の3年とかで勉強しているのかぁ、とか思うと、やっぱりそっちのほうがよかったかなぁって思う。まあいまさらどうしようもないので、いまからでも順番に勉強していく。
以前に日本のソフトウェア輸入額は輸出額の100倍あるって書いた。いろんな本を一度に読んでみて、その理由の一つが分かった気がする。情報が足りないか、誤っていることが多いと言うこと。
だいたい読む本は海外で出版されたものの翻訳が多い。海外の本にはかなりいい書籍があるということが最近分かってきて、さらにそれらは本当に今の、最新の情報が載っている。でも、それが翻訳されて発売されるまでにはかなりの時間を要するし、すべての本が翻訳される訳じゃない。
そしてその翻訳が意味不明なことが多いのも問題を大きくしていると思う。Windows SDKとかでもそうだったりすることもある。デバイスドライバの本を読んでいて、意味の分からないところがあって、なんどかその前後のページを読み直していて、ちょっと気がついて、それがもともとどんな英語だったか想像してみたら理解できたって事があった。
コンピュータの独特の用語とかそういったものが翻訳されるときに、どうするかというのは結構難しいと思う。
たぶん英語の文章も慣れれば日本語と大差なく読み進められると思うし、多少時間がかかってでも読めるようにしておいたほうが、あとあと楽だろうと思う。とにかく日本語翻訳の本を読むのはなるべく避けた方がいい気がしてきた。
日本の技術者が自分で書いている本はすごくいい本がたくさんあると思う。でも翻訳の本は、やっぱり読みにくいし分かりにくいと感じることが多い。
タイトルに「プログラミングは楽しいね」と書いたけど、今はプログラミングそのものよりコンピュータとOSの仕組みの理解に時間をかけている感じ。プログラミングの勉強としては、デザインパターンが最近の課題かと思う。言われれば分かるけど、自分でやってみてそれが本当にその方法論を実践できているのかを確認できるだけの力がない。
C++のライブラリでPOCOというのがある。これはデザインパターンを駆使して作られていると思う。そしてそれをC++で実装しているわけで、最近はこのソースコードが僕の教科書になっている。教科書にしてよいかどうかははっきりとは分かっていないけど、いろいろな評判を聞くと、決して悪いことはなさそう。
ところでC++難しいね、やっぱり。少しずつ理解していこう。
APIフックとかドライバとか
仕事の中で今はWindowsのAPIフックとかフィルタドライバとかの話が面白い。まあ、普通のAPIフックはユーザーモードのちょっとテクニカルな話なだけでそれほど目新しいことはないけれど、フィルタドライバはかなり違った世界だ。
デバイスドライバは情報も少ないし、種類もいろいろあるし、かなり理解は大変。とくに最初がたいへん。なんとなくその世界が分かってくるまでにかなりいろいろ読んだ。CプログラミングのHellow Worldのようにはいかない。
まだまだドライバを書けるレベルにはほど遠いけど、入り口にはたどり着いた感じ。これまではどこが入り口かも分からなかった。
ドライバはなんか、Windowsと対等に渡り合える感じがいい(笑)Windowsだろうがなんだろうが、俺が支配者だ!みたいな感じです。まあ、その結果がブルースクリーンだったりするわけですが・・・。
フィルタドライバに関しては、実デバイスをいじる訳じゃないのでハードウェアの知識が直接必要になるわけじゃない。でもその周辺で何が行われるかは知らないといけない。とりあえず、ファイルシステムフィルタをきちんと理解して自由に書けるようになりたい。
デバイスドライバは情報も少ないし、種類もいろいろあるし、かなり理解は大変。とくに最初がたいへん。なんとなくその世界が分かってくるまでにかなりいろいろ読んだ。CプログラミングのHellow Worldのようにはいかない。
まだまだドライバを書けるレベルにはほど遠いけど、入り口にはたどり着いた感じ。これまではどこが入り口かも分からなかった。
ドライバはなんか、Windowsと対等に渡り合える感じがいい(笑)Windowsだろうがなんだろうが、俺が支配者だ!みたいな感じです。まあ、その結果がブルースクリーンだったりするわけですが・・・。
フィルタドライバに関しては、実デバイスをいじる訳じゃないのでハードウェアの知識が直接必要になるわけじゃない。でもその周辺で何が行われるかは知らないといけない。とりあえず、ファイルシステムフィルタをきちんと理解して自由に書けるようになりたい。
あけましておめでとうございます
新年ですね。今の自分の状況で新年を迎えられたのは、本当によかったと思う(就職できたりとか)
ところで、ちょっと読んだ記事で、ソフトウェアの輸出入の差は100倍以上あるそうな。輸出額が約90億に対して輸入額が9000億以上なんだそうだ。この差はひどい。
なんでだろ・・・。日本は世界に売れるソフトを作っていないのか。
確かに考えてみると、Windows,Officeなんてのは当然ながらアメリカ製。フリーソフトだけどFireFoxやThunderbird,Operaなんかも海外製っちゃ海外製。Flashなんかもアメリカ製(Adobeはアメリカ?)。
んー、自分のパソコンの中身を見ても、日本製のソフトはFTPクライアントのFFFTPぐらいしかないかも。あとはゲームとか。
ゲームは是非日本から世界に発信してほしいなぁと思う。やっぱゲームは日本は強いんじゃないかと思うし。
一応今の会社は自社製品を作って売っているので、それが世界で売れるようになったらいいなぁ。決してどんなソフトだって世界で売るのは不可能じゃないと思うんだけどなぁ。
そういうものに向けていろいろ勉強しなきゃね。
ところで、ちょっと読んだ記事で、ソフトウェアの輸出入の差は100倍以上あるそうな。輸出額が約90億に対して輸入額が9000億以上なんだそうだ。この差はひどい。
なんでだろ・・・。日本は世界に売れるソフトを作っていないのか。
確かに考えてみると、Windows,Officeなんてのは当然ながらアメリカ製。フリーソフトだけどFireFoxやThunderbird,Operaなんかも海外製っちゃ海外製。Flashなんかもアメリカ製(Adobeはアメリカ?)。
んー、自分のパソコンの中身を見ても、日本製のソフトはFTPクライアントのFFFTPぐらいしかないかも。あとはゲームとか。
ゲームは是非日本から世界に発信してほしいなぁと思う。やっぱゲームは日本は強いんじゃないかと思うし。
一応今の会社は自社製品を作って売っているので、それが世界で売れるようになったらいいなぁ。決してどんなソフトだって世界で売るのは不可能じゃないと思うんだけどなぁ。
そういうものに向けていろいろ勉強しなきゃね。
仮想メモリとアドレス変換
難しい・・・きちんと理解できない。たぶんまだ知識不足だな。
プロセスメモリ空間(論理アドレス)→(Intel x86の場合)セグメンテーション→リニアアドレス→ページング(PTEなどを経由)→物理アドレス・・・なのだと思う。きっと・・・。
よ くわからないのは、x86のセグメンテーションの部分。Windowsのメモリ管理の解説を読むと、たいていこの部分は飛ばしてあるように見える。ページ ングの仕組みがメインなので、ある意味自動的に行われるセグメンテーションは飛ばしているのかもしれない・・・。最初はセグメンテーションは利用しないの かと思った。
この辺がきちんと説明できるようになりたいなぁ。CPUに関しては「はじめて読む486」っていうすばらしい本があって、結構昔に 読んだ。でも実際OSがどんな風に利用しているかはきちんと知らずにいたので、ここへきてちゃんと理解しようと思っていろいろ読んで、かなりいい線まで来 たと思うのだけれど・・・。CPUの機能で実装されている部分と、OSの機能で実装されている部分と、CPUの機能をOSが利用して実装されている部分の 区別がいまいちはっきりつかない。でも結局はすべてCPUの機能をOSが利用しているってことか・・・。
もうちょい勉強が必要。
2009/7/1 追記
前のブログを読み直して、これを見つけた。とりあえず今はだいたい理解しているはず。
セグメンテーションの部分はWindowsもしっかり利用している。でもコードセグメントもデータセグメントもすべて0~4GBの範囲を利用できるようにディスクリプタが設定されているから、仮想アドレス空間内でばらばらに存在するようなことはない。CSもDSも領域がかぶっているような感じかな。
プロセスメモリ空間(論理アドレス)→(Intel x86の場合)セグメンテーション→リニアアドレス→ページング(PTEなどを経由)→物理アドレス・・・なのだと思う。きっと・・・。
よ くわからないのは、x86のセグメンテーションの部分。Windowsのメモリ管理の解説を読むと、たいていこの部分は飛ばしてあるように見える。ページ ングの仕組みがメインなので、ある意味自動的に行われるセグメンテーションは飛ばしているのかもしれない・・・。最初はセグメンテーションは利用しないの かと思った。
この辺がきちんと説明できるようになりたいなぁ。CPUに関しては「はじめて読む486」っていうすばらしい本があって、結構昔に 読んだ。でも実際OSがどんな風に利用しているかはきちんと知らずにいたので、ここへきてちゃんと理解しようと思っていろいろ読んで、かなりいい線まで来 たと思うのだけれど・・・。CPUの機能で実装されている部分と、OSの機能で実装されている部分と、CPUの機能をOSが利用して実装されている部分の 区別がいまいちはっきりつかない。でも結局はすべてCPUの機能をOSが利用しているってことか・・・。
もうちょい勉強が必要。
2009/7/1 追記
前のブログを読み直して、これを見つけた。とりあえず今はだいたい理解しているはず。
セグメンテーションの部分はWindowsもしっかり利用している。でもコードセグメントもデータセグメントもすべて0~4GBの範囲を利用できるようにディスクリプタが設定されているから、仮想アドレス空間内でばらばらに存在するようなことはない。CSもDSも領域がかぶっているような感じかな。
一部間違えた
前に書いたPHPをSSIで動かす話。一部理解を間違えていた。<--#include virtual="foo.php" -->で動かす場合、Content-Typeのヘッダが必要ないと書いたけれど、実際には必要で、だけどPHPだから不必要ということだった。 CGI版PHPでは、勝手にContent-Typeを出力する。だから不必要と言うことだった。だからこれがPerlとかのCGIだったら、 Content-Typeの出力が自分で必要になるはず。今日は色々調べていったら、自分のサーバーではsuPHPを使っているということが分かった。最近はこれになってきているみたいね。確かにユーザー権限ですべてが動くというのは管理も楽だしセキュリティ上もよいはず。
PHPとデフォルト引数と参照渡し
PHPでプログラムを書いていた。PHP4のオブジェクトを利用したプログラム・・・。PHP4のオブジェクトはかなり貧弱なので使いたくないとは思っていたのだけれど、やっぱり使った方が管理が楽と言うことで使ってみた。
んで、やっぱりオブジェクト指向で書いていれば、どうしたって参照渡しが必要になる。
関数を書くときに、よくデフォルト引数を指定する。今回参照渡しの引数に対してNULLをデフォルトで指定したかったのだけれど、ダメだった。できないらしい。検索したけどやっぱりできないって結論のものが見つかった。ちょっと不便かな。
んー、そういえば、ちょっと前にJJFの申し込みフォームを作ってたときは、PHP4のnewが参照ではなくコピーを返すことを知らずにかなり悩ん だ覚えがある。この辺もPHP4でオブジェクトを利用したくない理由。でも結局オブジェクトを使った方が何かと後で変更が楽。んー、悩ましい。PHP5が 使えるレンタルサーバー増えないかな。
