ソフトウェアの最近のブログ記事
お仕事中のAccessのお仕事で、久しぶりにSQLで悩みました。
解決は、お風呂場とベッドの中でのリラックスした熟考と若干の試行錯誤。
時々、こうやって普段使わない部分の頭を使うのが、よいと思います。
Accessみたいに手軽にクエリーを作れて実行できるのは、実に便利。
クエリーをGUIで作れるのはいいのですが、ユニオンクエリーやDISTINCTなんかも対応してくれたら、嬉しいのですが。
まあ、そのためにSQL表示があるわけですが。
SQLを使えば、何でもできる、くらいの自信はあるのですが、問題はパフォーマンスですね。
でもSQLとのつきあいは、そんなに長くない、13年くらいです。
最初に勉強した本は、SRCの「SQLテクニック Q&A」。
付録の、BNFの構文はよく読みました。懐かしいです。
Rubyの本を読んでいて、正規表現の項になった。
そこで見慣れない記法が・・・。
(.*?)"
暫く考えたあげくに、「Perl5 デスクトップリファレンス」の正規表現の項を再読。
分かりました。
「繰り返しサブパターンは可能な最長の文字列にマッチする。ただし、その後に?が続く場合は、最短のマッチングを行う。」
Rubyの例では、「"」が現れるまでの最短のマッチングになります。
分かっていると思っていた正規表現での新しい発見でした。
Yugui著
オライリー(2008)
いまさらですが、Rubyの勉強を。
6月に出たばかりの本ですが、Amazonでは在庫切れ。楽天で買いました。
まだ1/3しか読んでいないのですが、これだけ言語がある中、更に新しい言語が必要なのか?、と思って読み始めたのですが、「ええっ!こんな設計ありなの?」と驚くことしきり。
まつもとゆきひろ氏を見直した1冊でした。
頭を硬くしないためにも、新しい言語には挑戦するべきですね!
マッコーネルの本だったか、プロならば、年に一つは新しい言語に挑戦するべき、というのがありましたね。
最近はプロジェクト管理や、ピープルウェアの本が多くて、とても年に一つにはなっていませんが、その精神は大切にしたいと思います。
Railsの本も読もうと思います。
Rubyが好きになりそうです。
とても魅力的な言語です。
最近の、日経だったかITMediaだったかの記事。
「最近のMS-IMEは目に余る」。
なんでも、現在は中国で開発されていて、日本のマイクロソフトも手が出せないという。
誤変換に悩まされていた私としては、記事を読んで、迷わずATOK2008を購入。
かしこいかな漢字変換です。
日常使うものは、なるべくストレスなく使えるものを選ぶべきです。
使用許諾契約も、私が一人で使う限り、複数のマシンにインストール可能で、大助かりです。
先日セットアップしたCentOS4.4。
思い立ってyumでupdate。
すると思ったとおり、カーネル・パニックで立ち上がらない。
RedHat7.3のRAID1サーバーと同じです。
GRUBで古いカーネルを選択すれば立ち上がります。
デフォールトのカーネルを古いカーネルにするために、/etc/grub.confを編集。
default=0 を default=1 にする。(1番目をデフォールトとする)
これでOK。
開発マシンには何台かVistaを入れているのですが、メールやドキュメント作成用のマシンは、未だXP。
VistaのSP1も出たし、そろそろいいかとアップグレード。
朝の6時半に始めたのが、終わったのが午後5時半!
このうち、アップグレードは3時間、外出と食事に1時間、Microsoftのサポートに2時間(このうち1時間は、接続待ち)、残りは、OneCareでネットに接続できなくなって、いろいろ調べていた時間と、動作しなくなったアプリの代替を探していた時間。
結果からいうと、XPからVistaにアップグレードするときには、OneCareの削除と再インストールが必要。
何もいってくれないので、わかりませんよ。
最初は、IEのエラーページのファイル名がdnserrorだったので、DNSが原因と思いました。
こちらでは、ルータのせいで、DNSの設定を明示的にしないとネットに接続できないのです。
それで、TCP/UDPのポート53をOneCareで穴を開けたりしたのですが、効果なし。
ネットで調べても類似の現象はないし、万策尽きて、サポートに電話。
土日もやっていて助かりました。
サポートそのものは丁寧で文句のつけようがなかったのですが、天気のいい日の昼間の時間を返してほしいものです。
UMLを描くツールがないか探していたのですが、リバースエンジニアリングなんていらないから、シンプルなものが欲しい。
どうせなら、前のプロジェクトで使っていたVisioを使えればベスト!
という方にお勧めなのが、Visio用のフリー(寄付金募集中)のUMLステンシル。
VisioはStandardだけでも、かなり使えて、お勧めです。
UMLではないのですが、ドキュメント作成ということで、Hot Documentのサンプルも見たのですが、コメントだけではなく、ソースも解析している、と謳っているいるわりには、ファイルの一覧とかメソッドの一覧とか、ソースの行数とか、単に数え上げているだけのように見えますけれど・・・。
納品物をJavaDocで作っているときに、問題が・・・。
JavaDoc以外のアノテーションの記述で、JavaDocがCrashします。
出来上がったドキュメントは、左側の「すべてのクラス」のフレームが正常に表示されません。
しばらく解決策を探った結果、コマンドプロンプトから、JavaDocを起動するのではなく、Eclipseから作成することで、正常に作成できることが分かりました。
JavaDocのバージョンの違い?
Windowsのコマンドプロンプトで、Javaをよく起動して試験しているのですが、長いコマンドをタイプするのは面倒。
Linuxのシェルみたいに、直前のコマンドを実行してくれるコマンドがあるはず、とネットで調べると、便利なF7キー。
数個前までの履歴が別ウインドウに表示されて、そこから実行する物を選択できます。
もっと早く調べていれば、少しは時間の節約になったのですけれど・・・。
「手を抜くためにはどんな努力でもする」というふうにならなければいけませんね。
今回のお仕事、開発はWindowsマシンで、動作確認は、3台のLinuxでやっています。
ファイルの転送はFTP。
今までずっとFFFTPを使ってきたのですが、今回使っていて、頻繁に転送が中断します。
「ファイル一覧が取得できなかった」というエラーです。
FAQで見た、フルパスを使わないチェックを入れたのですが、それでも変わらない。
それでとうとう、FTPクライアントを探す羽目になったのですが、見つけたのが「FileZilla」。
全く問題なく動作しました。
今度はこれをメインにするかも・・・。
今回のお仕事で使う分散キャッシュを使うプログラムが、どうにも起動しない。
複数のLinuxマシンでキャッシュを共有します。
マルチキャストで、自動的にキャッシュの在りかを検索するはずなのですが・・・。
先行して調査していたKさんに聞いているうちに、分かったのは、私のところのLANはDNSを運用していないので、ホスト名は何でもいいだろうと、Linuxは全て、localhostにしていました。
これがいけなかった。
ホスト名を別々にしたら、一発で動きました。
DNSがなくても、localhost にしたらいけないのですね・・・。
週末からずっと懸案だった問題が一段落し、このブログを書いています。
思ったのは、夜更かしをするより、睡眠をとって頭をリセットし、朝、問題を考える方が解決しやすい、ということです。
昨日、今日とそれを実感しました。
今回手伝ってくれたMさん、本質的にJavaプログラマなのですが、やはりコードがきれい。
私みたいに、Cから入った人のコードとは違います。
年齢は同じくらいなのに・・・少しうらやましい。
Mさんは、Null Pointer Exception を「ヌルポ」というのですよね。
業界用語でしょうか?
それで思い出したのが、オーケストラでヴァイオリンを弾いている弟がチャイコフスキーのことを「チャイコ」と言っていたこと。
なにか笑ってしまいました。
週末は、Microsoftに振り回されて、大きく時間をロス!
その1・・・Outlookからのメール送信が、例の0x8004210Bのエラーでできない。(それもできる時もある)
ネットで検索して、Microsoftの技術情報からプロファイルの再作成もやってみたのですが、それでもだめ。
驚いたことに、同じ宛先で、別のNote PCのOutlookから送ろうとしても同じエラー。
これはメールサーバーに違いないと、ホスティング会社に問い合わせると、ログではサーバーまで到達していない。
結局、月曜の朝に、どういうわけか送信出来るようになっていた。
その2・・・ネットラジオのログをAccessで読み込んでいます。1年以上使っているのですが、日曜に読込みプログラムでエラーが。
Insertのところで、「データベース''を開くことができません。アプリケーションで認識できないデータベースであるか、またはファイルが破損しています。」
どうにも原因が分からなくて、もしやと思って、データベースを修復すると、エラーが消えた・・・。
その3・・・お仕事で使うメッセージング・ツールがエラーが出て、どうにもWindows上で動かない。これもよくある、「Microsoft.VC80.CRT」のエラー。イベントログを見たり、ネットを検索して分かったことは、Visual Studio VC++2005ランタイムのSP1が必要だということ。
どれも3時間以上かかっていますよね。
私の週末を返してくれー!
消えるのが早すぎて、誰が出しているのか判別できなかったのですが、デジカメで記録。
見ると「vsjitdebugger.exe」。
とすると問題は2つあって、シャットダウン時に何らかのエラーが起こっていることと、VisualStudioの起動に失敗していることです。
常駐プログラムを疑ったのですが、最終的にたどり着いたのは、掲題の「Canon Camera Access Library 8」というサービス。
これを「手動」とすることで、出なくなりました。
カメラの画像の取り込みにも影響ないみたいなので、何に使っていたのかいまいち分からないのですが、結果オーライということで。
どうやってたどり着いたかは、聞かないでください。結構、偶然と行き当たりばったりの要素がありますから・・・。
パフォーマンスが重要視される大規模システムのリサーチをしています。
トレーディングや、携帯のサイトなどのシステムですが、驚いたことに、このようなシステムでは、もうJ2EEではない。
分散キャッシュを使った、イン・メモリーな処理になるのですが、いくつかのメーカーが、このようなグリッド製品を出しています。
GigaSpaces、Tangosol (現在はOracle)、Gemstone、Terracottaなどです。
この文献が、参考になります。
GigaSpacesとGemFireについては、評価版をダウンロードして、動作させてみました。プアーなマシンの上ですが。
このようなソフトのアーキテクチャには、層すらないのです。カルチャー・ショックですね。
層は複雑さや、ロードをシェアするために必須と思っていたのですが・・・。
それから、イン・メモリのデータ・ストアも、かなり衝撃ですね。
前述の文献では、「メモリ内に保存されたデータの依存関係が、ディスク上では損なわれることがあり、数秒もしくは数分、数時間にわたってデータを保存するには、結局のところハッシュマップやJavaSpaceが最も良い方法だということです。データの元の形を保ったまま、普通は保存しておける (恐らくオブジェクトかXML) のに、なぜこれをリレーショナル構造にマップし直さなくてはならないのでしょう。」と述べています。
大変勉強になります。
リサーチの機会を与えてくださったMさんに感謝です。

