[ Date: 2007年07月15日 / Modified: 2007年07月15日 ]
Rubyでソースコードの自動生成
[ Date: 2007年02月24日 / Modified: 2007年02月24日 ]
Ruby版 Blogツール作成
投稿者 jgb : 01:03
[ Date: 2006年02月09日 / Modified: 2006年12月17日 ]
クラス間の通信
実際クラスどうしに渡されるのは、オブジェクトのアドレスなので、見ためほどデータが重くなっているわけではないのだが、あまりシンプルとも言えない場合がある。
そもそもあるクラスから利用される部品クラスの部分が、一つやふたつのフィールド値であるような場合、そもそも部品クラスとして埋め込む必要があるのかとも思えるケースがある。
もうひとつ問題は、ファイルやネットごしのデータを読む場合、あるタイミング(例えばその読み込み過程である種のデータに出会った時などに)、何らかのコールバックをクラスどうしで呼び合えないと、全く同じような分岐処理を複数のクラスに書くはめになる。そういうのはいかにも無駄と思える。対象となるデータに遭遇した時に、うまくインスタンスどうしがメッセージ通信してくれれば、もっともっとコードをシンプルに、かつ独立性を高めて書けるのにと思うのである。
こういう場合に、特定のクラスフィールドを作って、そのフィールド変数を内側に含んだクロージャを使ってインスタンスどうしを通信させるというような方法をもっと考えるべきだろう。最低限必要なフィールド値だけを、必要なタイミングで操作変更してくれるような、コールバックメソッドとしてのクロージャ。こういうのがうまく書ければ、なんでもかんでも部品クラスに埋め込まなくてもよいはずだ。
投稿者 jgb : 00:57
[ Date: 2005年12月04日 / Modified: 2006年12月17日 ]
来年に向けてのメモ
開発中の Txt2dbx の次のヴァージョンは、完全な Perl OOP で書く。これは、他言語版を作るためにも必要と思われる。Txt2dbxは、ひょっとしたらもっと汎用的な Text->XML 変換器にするかもしれない。今考えていることの中で、これから注目して学習していきたいことをいくつかメモっておこう。
- 正規表現をオブジェクトとして扱うクラスの作成と、そうすることのメリット
- クロージャによって、特定のアクションをクラス間で受け渡す仕組み
- Damian Conway の言う「総称性」の研究。継承ではなく、「何らかの情報(たとえばある特定の種類の検索ツリーのノードに格納すべきデータ型)が欠如している場合に、それを入力するだけで一連の別個の(無関係な!)クラスを生成できる」ような仕組み
3番目のはいかにも、複雑なパーサーツールを作るDamianのような人が考えそうなテーマではないだろうか。
投稿者 jgb : 22:21
[ Date: 2005年10月14日 / Modified: 2006年12月17日 ]
Cygwin 困ったときの備忘録:
1.chmodでチェンジできない!
一般ユーザでCGIファイルのパーミッションを実行OKに変えようとして、何度「chmod 755」とかやっても、ちっとも変更されない場合がある。これは、ユーザー環境変数の「CYGWIN」の値が問題なようだ.もし「CYGWIN = nontsec」となっていたら、「ntsec」に変える。ただしこれはファイルシステムがNTFSだから関係あること.ネットで調べると各変数値の意味はこうらしい(http://pcweb.mycom.co.jp/special/2002/cygwin/004.html).
[ ntsec ] Windows NT/2000/XPのセキュリティモデルを利用してUNIX風のファイルとプロセスに対するパーミッション設定を実現するもの.ただしファイルセキュリティはNTFS上でしか動作しないので、FAT32上でCygwinを使う場合やWindows 9x系の場合は必要ない.
[ smbntsec ] 共有フォルダ(Sambaドライブも含む)でも「ntsec」を有効にする設定.
[ glob ] UNIXスタイルのファイルワイルドカード文字をコマンドプロンプトからでも有効にするというもの.
ちなみに、私んとこのユーザ環境変数ではこうなってる。
CYGWIN = binmode ntsec smbntsec glob tty
2.Active Perl のPPMは、administrator権限でWindowsのコマンドプロンプトからでないと使えない.
そうじゃない方法はあるんだろうが、これが基本であって、まあ考えてみたらあたりまえのこと.CygwinのPerlはCygwin環境へのInstall権限さえあれば一般ユーザでもできるので、ついとまどってしまう.
3.だからCygwinのPerlとWindows版のApache2でCGIのテスト環境にしたい!
...と思うんだが、実際やってみるとCGIファイル先頭の「#!...」のパス表現が分からない。しかたなくActivePerlのパスにもどしてやってたが、やっとしくみが分かった. cygwinのshellで「which perl」すると、「/usr/local/bin/perl」である.nt:~$ which perl
/usr/local/bin/perl
nt:~$ ls -lF /usr/local/bin/perl
lrwxrwxrwx 1 jgb admins 17 Apr 26 17:10 /usr/local/bin/perl -> /usr/bin/perl.exe*
これは「/usr/bin/perl.exe」へのSリンクだと知っていたので、Windows側がCygwinのSリンクを理解できないのかと思い、CGIファイルの先頭に「#!D:/cygwin/usr/bin/perl.exe」などと書いていたが、ことごとくエラーになる.
そこでフォルダを開いてみると分かるのだが、Cygwinの/usr/binなどはWindows側からは見えないしくみになっている.そこで(どっかのサイトを読んでいて分かったのだが...)、実は「/bin/perl.exe」というのがあり、こちらは可視ファイルになっており、CGIファイルの先頭に「#!D:/cygwin/bin/Perl.exe」などと書くとあっさりうまくいった。
CygwinのプログラムをWindows側から利用する場合は、フォルダを開いてアイコンが見えるものを使わなければならない...ということだろう。
投稿者 jgb : 16:34
[ Date: 2005年07月25日 / Modified: 2006年12月17日 ]
PHPNOTE 第6回終了
投稿者 jgb : 00:10
[ Date: 2005年05月05日 / Modified: 2006年12月17日 ]
やっとこさBフレッツ
投稿者 jgb : 11:17
[ Date: 2005年03月31日 / Modified: 2006年12月17日 ]
もう3月も終わりかい!
投稿者 jgb : 22:35
[ Date: 2005年02月24日 / Modified: 2006年12月17日 ]
PHPのSESSION変数でファイル名を渡す
Smartyのテンプレートから別のPHPスクリプトを読み込むには
{include_php file="$server_root/blog/scripts/include_file.php"}
などとするが、そのスクリプトに読み込みたい(その都度違った)ファイル名を渡したいときはどうすればいいのだろう。普通に考えれば、ファイル名をSmarty側で読める変数名にassignしてテンプレート側で読めばできそうなのだが、いろいろやってもうまくいかなかった。
...ということで、結局SESSION変数で値のファイル名をグローバルなスコープにしてしまうことで、うまくいった。
index.php(テンプレート呼び出し側)
session_start();
..............................
if (isset($file_path)) {
$_SESSION["incfile"] = $file_path;
}
テンプレート側
{include_php file="$server_root/blog/scripts/include_contents.php"}
include_contents.php側で
$file = $_SESSION["incfile"];
include("$file");
投稿者 jgb : 08:53
[ Date: 2005年02月13日 / Modified: 2006年12月17日 ]
miniDNSからお引越
12月6日の夕方頃、外から自分の自宅サーバのサイトをメンテ中に、突然交信不能になった。いろいろ調べたら、 ちょうどその時刻に、ダイナミックDNSをお願いしてた miniDNSから自分の登録情報が抹消されたらしい。
ログインしてみたら実際そうなっていた。下記のサイトでのメールで、みなさんおこまりの様子や解決方が相談されている。
「DynamicDNS情報交換室」
つたない英語で、miniDNSにサポートお願いメールしたら僕んとこにも同様のメールが送られてきた。
実は僕は子どもとメールアドレスを共用していたので、子どものパソコンの方で先にminiDNSからのメールを受けてしま い気づかなかっただけなのだった。(やっぱりアドレスはちゃんと別にしよう!)それにしても、メールの発行日が11月末なので、これでは期間が短過ぎて、みんな対策遅れになった人多いんじゃないだろうか。 ....で、
独自の更新用スクリプトなどを利用されている方は、更新するサーバを、 minidns.net から 3domain.hk に、または www.minidns.net から update.3domain.hk に変更してください。
とあるわけだが、実際利用したことない 3domain.hk に行って、miniDNSで使ってたログインネームで入ると、 確かに自分の登録情報があった。
問題は、自動更新のPerlスクリプトをどうするかだが、単純に wget で更新する次の部分を、www.3domain.hk に変更するだけでうまくいった。($UpdateURL 等は実際はそれぞれ1行で書く)
[ 次のもともとのminiDNS用のを ]
# old update string : for miniDNS # $UpdateURL = "'http://www.minidns.net/areg.php?opcode=ADD \&username='$UserName'\&password='$Password' \&host='$Host'\&ip='$CurrentIP";
[ 3domain用に書き換える ]
# 3domain へログインしてIPアドレスを更新するサブルーチン sub updatedns { ## 3domain $UpdateURL = "'http://www.3domain.hk/areg.php?opcode=ADD \&username='$UserName'\&password='$Password' \&host='$Host'\&ip='$CurrentIP"; system("/usr/bin/wget -v -O 3domain.log $UpdateURL >> ipupdate.log.tmp 2>> ipupdate.log.tmp"); ## Inform new IP &message(); }
詳しくは、www.3domain.hk のメニューから -> ダウンロード のページへ行っ て「IP更新用クライアントソフト」のページの下の方にある、
IP更新インターフェイス仕様 --> 1. 標準HTTPプロトコル
のところにヒントが書いてある。実際は、これは古い仕様なのでその下にある 「2. 3Updateプロトコル (推奨)」 がすいショーなんだそうだが、動いてるし今のスクリプトは中身がよく理解できてるのでこのままでいいでしょう。
投稿者 jgb : 14:43
Blosxom 始めました
投稿者 jgb : 14:39
[ Date: 2004年11月03日 / Modified: 2006年12月17日 ]
GNOME 起動せず!
子供と部屋で暴れていて、うっかりサーバの電源がつながっているコンセントのスイッチを切ってしまった。その時は、Linuxマシンがサーバともう一台クライアント機が稼働していて、両方ともやっちゃった。再稼働するとサーバは問題なかったが、クライアントに使っているVineLinux3.0が、起動するもののグラフィカルログインできない。startx でもGnomeが立ち上がらない。 ネットや本でいろいろ調べたが、結局次のようにして回復させた。
.xsession-errors を確認 デスクトップ・ファイル applications:///nautilus.desktop (パネル・ランチャ : ファイル 'applications:///nautilus.desktop' 読み込み中にエラー: ファイルがありません) が開けません
といった文があるが、今回の直接の原因かどうかはわからず。次にとりあえず setup を実行。
# kon # setup
クライアント機のビデオカードは非常に古くて、RivaTNT2 16MB。ビデオカードの認識は(古いんで)うまくいくが、次にこんなメッセージが!
「以下のファイルの設定に誤りがあります
/usr/X11R6/lib/X11/xorg.conf
このファイルは通常、以下にリンクする必要があります
/usr/X11/xorg.conf
今すぐリンクしますか?」
「はい」で進むとモニターの検出。検出結果の機種名は I-O DATA の「LCD-A15H」と正しく表示しているのに、そのまま自動検出に進むと失敗する。しかたなく手動で 16MBビデオメモリーなどなど選んでXのテストに進むと、みごとGNOMEの画面が表れて設定ファイルが /etc/X11/xorg.conf として書き込まれた。 xorg.conf は、前のXF86Config に変わるものらしい。(XF86Configも一応残されている) 「このファイルは、Xサーバによって検出されるディレクトリ内に保存される必要がある。(詳細は /usr/X11R6/lib/X11/doc/README.Config)」と書いてある。README.Config、これは「Configuring XFree86: A Step-By-Step Guide」、どっかに翻訳があるだろう。 ちなみに、xorg.conf のパーミッションは、644 の root:root であるらしい。 これでセッションファイルを削除せずに、前の設定のままGNOMEが立ち上がった。よかった!!!!
投稿者 jgb : 13:41
[ Date: 2004年10月30日 / Modified: 2006年12月17日 ]
Fedora2でこけた!
agpgartの読み込みの後はシリアルバスまわりの設定に進んでいるようだが、どうもそのへんで止まってしまう。うちのサーバは特殊事情で、作った時にAGPカード経由でモニタが写らなくて、PCIバス版のRADEON7000を使っている。なぜそうなったかは、マザーのせいなのかその時買ったGeForceMX4000のカードが初期不良だったのかはわからずじまいで、みごとに玄人志向の人柱になったのだったが、まあ、PCIバスのカードのほうが安定して写るようになったのでそのまま今日まできていた。ひょっとしたらPCIのビデオカードじゃだめなんじゃ?なんて思ったりしたが、無駄な出費も控えたいので、ここはひとつ考えなおすことにした。
サーバは、Vine Linux3 で立て直すことにした。今までノートで使ってきたけど、Perlで XML::Parser が入らなかったりといろいろ収録ソフトが古めだったのでちょっとやる気が起きなかった。何でもアップグレードすりゃいいんだが、それなりのスキルが求められてくるし、思わぬところで足をすくわれたりする。始めから用意されているってことは、それなりの安心感につながるもんなのだ。
しかしVineも3.0になってかなりそのへんもよくなった感じ。もともとサーバOSのアップグレードは、PHP5が使いたかったからなのだが、PHP5のパッケージ自体はFedora より Vine のほうが用意が早かった。また apt によるアップグレードの簡単さはとても気に入っていた。なんせ2.6rの後のマイナーバージョンは aptしてれば勝手に上がっていった。
このアップグレードのしやすさという点で、サーバとして運用するにはVineはかなり使いやすいのではないかと思う。FedoraはOSのバージョンアップの期間が9ヶ月と素人にとっては結構早くて、そのたびにトラブっていたのではちょとキツイ。たとえインストールがうまくいったとしても(うまくいった場合のインストールはとても楽なんだけど)、使いこなすのにかなりスキルが求められる感じがした。
で、...Fedora2はクライアント機で後日ためすことにした。まあサーバだめでもFC1で味わったあの先進性と美しさはやめれまへんので....。 あ、それとちなみに今回 SSH と rsync が使えるようにべんきょして、バックアップは完璧にとった上で作業したので、それだけは非常によかったです、うん。
投稿者 jgb : 15:27
[ Date: 2004年08月02日 / Modified: 2006年12月17日 ]
Update to FC2 どうするかな〜
投稿者 jgb : 14:08