雑記から戻る過去雑記ログ
他の月を見る
(2002/02)
技術者になるということ
●技術者になるということ

 失業者はエンジニアになれるか?
を読んでいて思ったこと。

 技術者であるということの条件はなんなのでしょう?
 たとえば、医者や弁護士とかなら、資格が必要です。医者の場合は、必ず専門の学校に通わなければ資格を取る条件さえもらえません。ところが、技術者であることの必要十分条件にような資格は存在しません。たとえば情報処理試験とかありますけど、これを持っているからと言ってソフトウェア技術者であるとは言えないです。それに多くのソフトウェア技術者は無資格です。
 じゃぁ、自分が技術者であると言えるのはなぜなのか。

 工科の大学や、大学の工学部を出れば技術者か。いやノン。
 メーカーの開発部門に入れば技術者になれるのか。これも確定ではありません。特定の分野の技術者なら、学校や資格試験が必要条件になる場合もありますが、十分条件にはなりません。

 結局、わたしは、「自分は技術者である」「自分は技術者になる」と自分に宣言したときから、技術者である、あるいは技術者になるための道を歩き出すということだと思います。それはたとえば大学で授業を受けるとか、会社の新人研修で教えてもらうとか、そういう受け身な立場ではありません。自分から技術者になるという方法しか道はないし、逆に自分で技術者であると宣言してしまえば、それで技術者なのだから、非常に安易な道かもしれません。

 「技術者になりたい」と思った年齢によって、その道で成功するかということの難易度は社会的な条件等から変わると思いますが、まずは自分が技術者である、技術者になると宣言することからすべては始まるのだと思います。技術者で飯を食うということを考えないのであれば、年齢さえ制約にはならないのかもしれません。

 技術者になれば、その間はずっと勉強です。毎日が解決不可能だと思われる問題との戦いです。こういう日々がつらくなって、定型作業が仕事になるような職業を選んでおけばよかったと思うこともありますが、やっぱりわたしにはそういう仕事は耐えられないだろうなということはわかっていたりします。結局子供の頃からあこがれていた「エンジニア」になったということ自体には満足しているんだろうなと思います。

 日本は技術者に対する待遇はあまりよくありません。技術者が歩んでいる茨の道に対して、その見返りはかなり少ないと思ってよいです。これは技術立国とかつて呼ばれた日本の歩んできた道の中に原因があると思います。過去の技術者が、苦しい時代に少ない報酬で、情熱だけで馬車馬のように働いていたから、今の日本があるんです。現在の技術者の待遇はよくないけれど、その原因を責める気にはなれません。

 今は、お金持ちになりたいと思ったら、別の仕事を選んだ方がよいと思います。

 それでも、ものを創り出すということが好きで、この道を選んでくれる子供達がこれからもたくさん出ることをわたしは望んでいますし、そういう子供達を応援したいと思います。

 技術者になりたいと思う人には、わたしはロバート・A・ハインラインの「夏への扉」を送りたいと思います。(ついでに猫好きの人にも送ります)


2002/02/27(Wed)
花粉症
●花粉症
 嫁さんが昨年のこの時期くらいに、はじめて花粉症の症状が出てかわいそうと思ってましたが、またこの土曜日くらいからきつくなってます。
 わたしは元々子供の頃からアレルギー性鼻炎でずっと苦しんできました。幸い花粉症はなく、また年を経るに従って、アレルギー性鼻炎は軽くなってきたのでいい傾向だったのですが、この土曜日からその症状が...
 どうも、周りの人も「土曜日から」と口裏を合わせたように言うので、「え、俺もとうとう花粉症...」と、ショック。まあ子供の頃からつきあってきた症状なので、もう慣れていると言えば慣れているのですが、やっぱりちょっと悲しいですね。うう、目もかゆいし。

●キーアサイン機構

 Delphiでアプリケーションを作るとき、キーアサイン機構に関してはかなり昔から悩んできてます。はじめはTMenuのイベントハンドラにやることを定義して、TMenuのShortCutプロパティを使っていましたが、フォームの上に複数のコントロールがあると、フォーカスによって動作を変えるのが難しい。たとえば、エクスプローラ型でListViewとTreeViewがある場合、TreeViewの上では動作するけどListViewの上では別の動作をさせたい場合など。で、仕方がないのでメインメニューではショートカットを定義せずに、各コントロールにポップアップメニューをつけて、その中のメニュー項目でショートカットを定義していました。こうすれば、フォーカスがあるときしかそのメニューは動作しないので、なかなかいい具合。

 次の世代では、DelphiのVCLにTActionという便利なクラスができたので、これを使うことにしました。上記と同様の問題もあるのですが、それは、各ハンドラの中でどこにフォーカスがあるかを調べながら動作させるようにしました。TActionの参照を持つラッパークラスを書いて、親子構造を持てるようにして、メニューの子供を持つ構造にも対応させるようにしました。これがTaskPrize r.2に搭載されています。K2Editorはラッパーを含んでいないすっぴんTActionを使用しています。

 ただ、TActionを使うと、メニュー構造をファイルなどから読んで再現させるのが面倒(というか時間がかかる)ので、もうちょっと簡単に読み込めるような方法が欲しいな。それと、今まで書いたすべての方法に共通するのですが、ListViewやTreeViewの第1カラムの名前が編集されているときもこれらのTActionのショートカットが利いてしまうので、コピー(CTRL+C)やペースト(CTRL+V)などが横取りされてしまいます。これを避けるために、ListViewなどの項目が編集されているかどうかを監視して、もし編集されたら、必要なショートカットをTActionから削除してしまうような処理を入れてます。これも面倒で美しくないですね。

 で、これから考える次世代のキーアサイン・メニュー構造を保持するクラスですが、もう完全自家製にしようと思っています。で、フォームのisShortCutをoverrideして、全部の動作をここでコントロールするようにする。TActionは使わない。ListViewが編集されているときはキー定義をスルーするような処理もここに入れる。
 読み込み時は、構造体の配列に直接読み込む形を取って、必要な時にその構造体配列からこの次世代キーアサイン構造クラスを生成するようにすれば、読み込みも結構早くなるだろうと期待してます。

 最近、おうちでコーディングする時間(というか集中する持続力かな)がないので、構想だけは頭で練っているのですが、なかなか実験する機会が取れません。ま、妄想だけふくらませておけば、そのうち堰を切ったようにやる気があふれてくるという現象が起きるだろうと、淡い期待。

●本注文

 ruby本、注文しました。今後の展開は内緒。


2002/02/25(Mon)
mp3のビットレート
●mp3のビットレート

 もう、最近は、音楽CDはパソコンでリッピングしてmp3でファイルを持っているのですが、これがお手軽でお手軽で、パソコンのある環境ならどこでも持っていけるし、便利です。リッピングできなくするような技術が発表されて、そんなことになったらせっかく手に入れたお手軽環境が使えなくなるので、悲しいなぁとか思ってます。

 ところで、ビットレートなんですが、通常128kbpsを使ってますが、こないだなぜだかリッパーの設定が変わってしまって、64kbpsで保存しちゃいました。もとのCDを聞いたことがなかったので、どれくらい音質が落ちちゃっているのかわからないのですが、まぁこんなもんかなぁとも思ってました。でも、時間が経つにつれ、どうも音質悪いような気がして、128kbpsで取り直しました。
 あぁ、世界が全然違いますね。やっぱり最低128kbpsは確保しないと、ポップスとはいえだめです。

 なお、クラシック系やライブなどになってくると、わたしが試したところでは256kbps必要とします。ライブ録音で拍手などが入っていると、128kbpsではあきらかに音質が変わっているのがわかります。高域が落ちているというよりは、あきらかに変質しているという感じです。

 拍手というのは、細かい打撃音がたくさん入っているので、周波数帯域が非常に広くなります。FMラジオなどでザーという音をよく聞くと思いますが、こういう音も拍手と同じように、周波数帯域が広いです。原理的には、拍手と同じように打撃音がたくさん入っています。こういうノイズはホワイトノイズとか呼ばれますが、拍手の周波数分布はホワイトノイズにかなり近いと思います。しかし、完全なホワイトノイズの場合は、波形はほぼランダムなので、人間は意味のある音としては聞くことができません。こういうノイズは圧縮しても、たぶん違いは聞き取れないと思います。ところが拍手は周波数帯域が広く、また意味のある音として聞けるので、ある法則性に従った波形をしています。こういう波形に対してmp3圧縮は弱いのでしょう。

 ということで、ポップス系128kbps、クラシック・ライブ系256kbpsが最低ラインかなと思います。耳のいい人は、もっと上じゃないとだめなんでしょうね。でも、わたしにはこれで十分。

●手書きPDF

 手書きPDF入門。ネタもと、naoさんち。うーむ。テキストエディタでPDFが直接書けるのか。ちょっと目から鱗。うまくやれば、提携フォームファイルをあらかじめ作って置いて、そこにエディタで書いた文書だけ流し込むことで、社内文書なんかはPDFで書けちゃうかもね。naoさんところの今後の展開に期待。

2002/02/20(Wed)
キャンプ
●キャンプ

 毎年、この時期が一番おもしろいなぁ、プロ野球は。

 阪神ファンは、きっとみんなそうだと思う....

 SkyAで、毎日22時から24時まで、安芸のキャンプレポートをやっていて、ほとんど毎日見てます。帰るのが11時とかになるので、全部は見られないのだけど...

 あ、なお、西京極でやるオープン戦(対中日戦)を会社の同僚と見に行くことになりました。楽しみです。

2002/02/18(Mon)
ShellExecuteとウィンドウハンドル
●ShellExecuteとウィンドウハンドル

 アプリから起動したアプリのウィンドウハンドルを取得したいとします。ウィンドウハンドルが取得できないと、そのアプリをコントロールするのが難しいので。

 CreateProcessでは、起動したときに得られるプロセスIDを使用して、EnumWindowを使って、開いている全ウィンドウの中から、そのプロセスIDを持つウィンドウを探せばよいのです。(厳密には不可能なのですが、まぁいろいろな制限事項の中では可能)
 ShellExecuteを使ったときのウィンドウハンドル取得方法は知らないので、Webで検索してみました。うーん、するとShellExecuteの返り値がプロセスIDになるという記述が...
 ほんまかいなとテストしてみると、やっぱりだめ。

 この情報はVBのもので、VBのShellExecuteはそういう仕様になっているのかな(未確認)。VBのShellExecuteが、Windows ShellAPI ShellExecuteのラッパーになっているとして、どうやればShellExecuteからプロセスIDが得られるのだろう? そもそもShellExecuteの返り値であるHINSTANCEは、どうやって何に使うのかも知りません。

 CreateProcessって、使うのちょっと面倒だからね。ShellExecuteの方がお手軽。ShellExecuteで細かいことがいろいろできるとうれしいな。

 しかし、そもそも、なんでウィンドウハンドル取得するのが、こんなに大変なんだろう。もうちょっとなんとかならんかったの>MS


 その後:
 ウィンドウハンドルが動的に変わってしまう場合があることが判明。アプリ側がウィンドウの再生成をすると、変わってしまうんですねぇ。
 使う直前にEnumWindowを使って取得しないといけないわけですねぇ。いやですねぇ(^^;


2002/02/15(Fri)
回線速度
●回線速度

 ADSL実験室だと1.2Mくらい出てますが、ここでの計測結果は以下の通り。ちなみにうちはフレッツADSLです。収容局から直線で2.5kmくらい。条件としては悪くなるぎりぎりというところか。

[後日修正]
 イーアクセスの地図で確認したら、収容局から道なりで1.4kMでした。

--------- Broadband Networking Report ---------
<ダウンロード速度>
最高データ転送速度: 902.96Kbps (112.87KB/sec)
平均データ転送速度: 665.02Kbps (83.12KB/sec)
転送データ容量: 664.98KB (110.83KB×6回)
転送時間: 9.193 秒
-----------------------------------------------
1回目 398.70Kbps ASAHI-Net
2回目 885.82Kbps BIGLOBE
3回目 380.07Kbps OCN
4回目 536.74Kbps NIFTY
5回目 902.96Kbps WAKWAK
6回目 885.82Kbps WebArena
-----------------------------------------------
測定日時: 2002年02月13日(水) 23時12分
測定サイト: http://www.musen-lan.com/speed/
利用ブラウザ: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)
-----------------------------------------------

 まぁ、回線スピードが必要だと思うことはあまりないですねぇ。OSのパッチやらをダウンロードするのには快適。ATOK15とかダウンロード販売で買っても、ダウンロードはなんら問題ないだろうとか。
 アングラなことをやろうと思えば、ある程度速い回線は欲しくなるんだろうけど、まぁほどほどにしておかないとあきません(^^;

●TPZ r.2.4.9

 完全終了時にエラーを吐く件の修正。
 完全終了させない人は全く気づかないかも。
 もともとは、Pluginをunloadするときにアドレスエラーが出ていたのを直すための修正したときに入ったバグですが、こっちでアドレスエラー出してたら元の木阿弥です。

2002/02/13(Wed)
K2Editorプラグイン構想
●K2Editorプラグイン構想

 永さんとnaoさんの雑記を受けて。

 K2EditorプラグインIF装備は、やりたいという気持ちあります。
 そのときには、K2Editorは作り直し、またTPZの副産物というスタンスは取りません。
 もし、K2Editor r.2を出すなら、

  ・プラグインIF
  ・起動高速化
  ・キー・メニュー・ツールバーフルカスタマイズ
  ・マクロ言語に制御構造と変数機能などを追加
  ・対応文字コードの多様化

などを一気にやってしまって、シェアウェア化します。ここまでやると、開発工数の回収のことを考えないとやってられなくなりますので。

 暇と余裕さえできればやりたいと思っていまして、材料はちょっとずつ集めています。プラグインIFを備えれば、関数ジャンプなんかも作れると思うので、特定要素特化型K2Editorにすることも可能になるでしょうね。人ごとのように、そんなK2Editorが使える日を楽しみにしています(笑)。

 あ、別件ですが、今秘密裏にK2Editorのウィンドウをコントロールするアプリを作ってます。(仕事で使っているのですが)
 開いているK2Editorの一覧を表示して、ダブルクリックでそのエディタにフォーカスが移るとか、たくさんのK2Editorの中から何枚かを選んで、横に並べるとか、デスクトップ復元機能を持たせるとか、そういうことができます。そのうち公開すると思います(自分用としてお蔵入りする可能性もありますけど)。

2002/02/07(Thr)
時計ずれてる
●時計ずれてる

 NIFTYのCGIサーバーの時計が、標準時に比べて111秒ずれとる。うーん、ちょっとずれすぎちゃう?

 naoさん日記の時計合わせソフトに期待。できたらちょうだいね>naoさん
2002/02/02(Sat)