ときどきの雑記帖 リターンズ

最新ページへのリンク
目次ページへのリンク

2006年12月31日

おおつごもり

休みの日にはアクセス数が減る傾向にあるので、 年末休みであろう今日あたりに読んでいる人は少ないかも知れませんが 定期的にでも不定期にでも見てくれている人ありがとう。 アクセスログのリファラ部分を見ているとbloglineとかLDRとか はてなブックマークとかに登録している方もいるようで、ありがたいです。 別に登録されているからといって何かわたしに利益があるわけではありませんが、 そうするだけの価値を見出してくれた人がいるということで、 ある種励みになります。 あなたにとって少しでも有益になる情報が提供できていたらうれしいです。 2007年は2006年よりも良くなるようにしたいと思います。

偶然見かけたものですが心打たれるものがあったので紹介します。

  ベホマが使えなくたって、ベホイミが使えなくたって、ホイミ1回で助かる命だってある。
人を助けるのは強大な呪文じゃなくて、隠された才能じゃなくて、救おうという意志。

倒れそうなときに、知らない人からかけてもらったケアル1回で敵が倒せることもある。
倒れそうでも、無視して先に行かれちゃうこともある。

何かをするのは、強大な力じゃなくて、ほんとうに小さな意志で十二分。
もちろん、ベホマが必要なときもある。でもそれだって、
 ホイミを1万人が唱えてくれるなら、そっちの方がいい事だってあるだろう。
  

ここに、あなたにとってのホイミにでもなるものがあったなら幸いです。 2007年もよろしくお願いします。

2006年12月30日

ヲチ

この年の瀬に何をやっているのだ俺わ(笑)

★サンプル・ソース

/* 大きいHTMLソースをダウンロード */
extern DWORD MyDownloadFile( FILE fp, LPCTSTR lpURLName, DWORD dwDebug )
{
 HINTERNET hInet, hUrl;
 DWORD dwReadSize = 0; ←読み込んだバイト数⇒戻り値用
 
 if ( (hInet = InternetOpen(TEXT("MyApp"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0)) != NULL ){
  if ( (hUrl = InternetOpenUrl(hInet,lpURLName,NULL,0,0,0)) != NULL ){
   TCHAR szBuff[ READ_BUF_SIZE ]; ←ここで宣言した方が良い。while文中で確保・解放が繰り返されるため。遅くなるよ。
   DWORD dwSize;
   
   do {
    InternetReadFile( hUrl, szBuff, READ_BUF_SIZE, &dwSize );
    fwrite( szBuff, dwSize, 1, fp );
    dwReadSize += dwSize;
   } while ( (dwSize != 0) || (--dwDebug != 0) );
   
   InternetCloseHandle( hUrl );
  }
  InternetCloseHandle( hInet );
 }
 return( dwReadSize ); ←読み込んだバイト数
}
  

え゛? 関数の内部でブロック作ったときってその中で変数を新たに宣言したときに 新しくスタックフレームを構成するってこと? んなことしたら、そのブロックの中で外側のローカル変数アクセスするときに大変じゃん (gccは関数内関数でそういうことをやるけど)。 関数で使う分は内部でブロックを使って宣言されているのも含めて 関数の頭で確保するもんだと思ってたけど違うんだろうか (少なくともそうするコンパイラがあるのは事実)。 まあ、

func()
{
    char foo[10];
    {
        char hoge[10];
    }
    {
        char mogera[10];
    }
}

とあったときに、30バイト+α(アライメントを揃える分)確保するのか 20バイト+αで済ませるのかという違いはあるけど。

お礼

サロゲートペア領域の文字を使っているデータをいただきました。 ありがとうございます。

引き続き募集しておりますのでお手持ちにそういうデータがあり、私が見てもかまわない (世間一般に公開はしません)ものがあればお願いします。

2007年に向けて

あろはさんから強く求められていろいろ考えているのですが、 blogでいうところのコメント機能(もどき)をつけようかと思っています。 まあここで使えるソフトの制限がきついので出来合いのものが使えないのがきついですけどね。 全体を静的に書いているのでリアルタイムに反映するのは無理ですが、 まあメールを送るよりはお手軽にできるようにしたいと思っています。

年内の xgawk for winのリリースをするのはあきらめました(笑) 修正を巻き戻して、gawk for win での修正を持ってくればまあできなくはないのですが、 それではあまり(わたしにとっては)あまり意味がないのでやりません。

2006年12月29日

本日の購入

久しぶりに新宿の紀伊国屋書店(南口店のほう)へいく。

Extending and Embedding Perl
Tim Jenness Simon Cozens
1930110820
けっこうPerlの中身について解説している本らしい。まあ RHG みたいなもの? 索引に "stash" があったのと、正規表現エンジンについての解説があったので買ってしまった。 残念ながら "swash" のほうは載っていなかったのだけど。
Vbscript in a Nutshell: A Desktop Quick Reference (In a Nutshell (O'Reilly))
Petrusha Paul Lomax Matt Childs
1565927206
特にExcellに絡んだVBAの本は日本語でもたくさん出ているけど、 Excellのシーとやセルなどの操作の説明に終始していて(それはそれで必要な情報だけど)、 今回悩んだようなことの助けにはならないのでそのために。 まあこの本は VBA ではなく VBScript のものではあるけれども、 辞書とか正規表現は共通で、なおかつ日本語のVBA解説本には載っていないのでその面では役に立つだろう。 って WSHクイックリファレンス 第2版と内容がかぶっていたりするのだろうか? こっちの本は訳書ではなくて日本人の著者が書き下ろしたものみたいだけど。 まあ売り場になかったんで比べようにも比べられなかったけどね。

根が深い (xgawk for win)

むー、単体テストでは問題なく文字コード変換もできていたんだけど、 xgawkに組み込んだらその辺が原因になってちゃんと動かないナリよ。 あまりコードに潜っている時間が取れないのでお年玉にも間に合わないかも。

ふと目に付いた言葉

人の足を止めるのは絶望ではなく“諦観”あきらめ
人の足を進めるのは希望ではなく“意志”

ズレータ

プロ野球ネタ。 まあなんというか、日本の球団は外国人選手にはとことん甘いねえ。

年賀状

書いてない。 この際だから来たのに返事だけ書こう。

朝三暮四

ふむ。つまりは某社の年末に出た祝金とか言うやつはそういう性質のものなのだなあと 2ちゃんねる某スレを見ながら思った。

2006年12月28日

■_ 仕事納め

某社の年内の営業(?)は今日までですた。 まあここは業務とは関係ないので、特に何も問題がなくてかつネタがあれば 年末年始も書きますけど。

■_ 今年読んだ本から三冊

流行に乗って(笑)

ローマ人の物語 XV ローマ世界の終焉は入れたいところですが、 まだ読了していないので除外します。 えーと今年読んだ本てなにがあったっけか?

順不同でこんなところでしょうか
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド

オシムの言葉―フィールドの向こうに人生が見える
オシムの言葉―フィールドの向こうに人生が見える

上記二点については改めて語ることもないでしょう。
散るぞ悲しき 硫黄島総指揮官・栗林忠道
散るぞ悲しき 硫黄島総指揮官・栗林忠道

この本に関しては、いずれ書評ということではなく何かしら書きたいと思います (「硫黄島からの手紙」を観た後かな?)。

あ、greeteaさんに読めと云われた(いや、名指しで書かれたわけではありませんが)
Smalltalk Best Practice Patterns
Smalltalk Best Practice Patterns

も忘れてはイケナカッタ。

■_ grep -v

シェルスクリプト相談室

485 Name: デフォルトの名無しさん [] Date: 2006/12/26(火) 23:54:08 ID: Be:
    sedで-dオプションを使って、特定の文字列がヒットした時に、
    その行を削除したいのですがうまくいきません。
    manpageみても使い方がよくわからず、困り果てております。
    どうやって使えばいいかご教授お願いします。 

486 Name: デフォルトの名無しさん [sage] Date: 2006/12/26(火) 23:58:45 ID: Be:
    >>485
    -dオプション???

    単純に行削除だけなら例えば以下のように。
    -- 
    sed -e '1,5d' #最初の5行を削除
    sed -e '/pattern/d' #patternを含む業を削除 

487 Name: デフォルトの名無しさん [] Date: 2006/12/27(水) 06:42:35 ID: Be:
    >>486

    使い方思いっきり間違ってました
    ありがとうございます
    助かりました 

488 Name: デフォルトの名無しさん [sage] Date: 2006/12/27(水) 17:11:03 ID: Be:
    てか、パターンを含む行を削除したいだけなら grep -v でやれば良い。

489 Name: デフォルトの名無しさん [sage] Date: 2006/12/28(木) 01:09:04 ID: Be:
    きっとgrepでは業(カルマ)を削除できないのだろう。 

そういう使い方のときの「業」は「ごう」と読むのではなかろうか? まあウケたけどね。 grep -v って意外に知られてないんだよなあ。

■_ あ、うらやましー

あろはさん、 オレンジニュースで取り上げられてるー (正確にはあろはさんが作りつつあるエディタですが)。

■_ メモ

檜山正幸のキマイラ飼育記 - きくちさん、弾さんはエンタテイナーなんです

ふむ。納得。 不穏当発言を避けるためにあえてコメントせず。

■_ おそるべしWikipedia (英語版)

こんなエントリまであるとはっ! → Perl 6 - Wikipedia, the free encyclopedia とか Perl 6 rules - Wikipedia, the free encyclopedia

おまけ

Regular expressions

    Main article: Perl 6 rules

Perl's regular expression and string-processing support has always been one of its
defining features.  Since Perl's pattern-matching constructs have exceeded the
capabilities of formal regular expressions for some time, Perl 6 documentation will
exclusively refer to them as regexes, distancing the term from the formal definition.

Perlの正規表現と文字列処理に関するサポートは常にその機能の定義とともにありました。
Perlのパターンマッチングの構造は理論的な正規表現の能力を越えたところにあるので、
Perl 6のドキュメントでは理論的な定義からあまりにもかけ離れたところに来てしまった
ので、そういったものを正規表現 (regexes)として参照することはあきらめました。


Perl 6 provides a superset of Perl 5 features with respect to regexes, folding them
into a larger framework called "rules" which provide the capabilities of context-
sensitive parsing formalisms (such as the syntactic predicates of parsing expression
grammars and ANTLR), as well as acting as a closure with respect to their lexical
scope. Rules are introduced with the rule keyword which has a usage quite similar
to subroutine definition. Anonymous rules can also be introduced with the regex 
(or rx) keyword, or they can simply be used inline as regexps were in Perl 5
via the m (matching) or s (search and replace) operators.

Perl 6では、Perl 5の正規表現に対してリスペクトを払いつつもそのスーパーセットを
提供し、それを"ルール"と呼ばれるより大きな枠組みのものとしました。これは
文脈を意識した(context-sensitive)解析(expression grammarsを解析するときや、ANTLR
のような構文的な優先順位のようなもの)や、レキシカルなスコープを持つクロージャと
して振舞うようなものを提供します。ルールでは、サブルーチンを定義するときに使う
ようなキーワードである rule を導入します。名前を持たないルール(anonymous rule)
を regex もしくは rx というキーワードを使って作ることも可能です。また、これらを
Perl 5における正規表現と同じようにマッチング演算子 m や置換演算子 s を使った
文の中に置くこともできます。


In Apocalypse 5, Larry Wall enumerated 20 problems with "current regex culture". 
Among these were that Perl's regexes were "too compact and 'cute'", had "too much
reliance on too few metacharacters", "little support for named captures", "little
support for grammars", and "poor integration with [the] 'real' language".

黙示録 5 (Apocalypse 5)において Larry Wall は "現在の正規表現文化" (current regex
culture) における20の問題を挙げました。これらの中には、(Perlにおける正規表現が)
"詰め込みすぎで'巧妙' (too compact and 'cute')である"、"あまりにも少数のメタキャラ
クタに頼りすぎ" (too much reliance on too few metacharacters)、"名前によるキャプチャ
に対するサポートが貧弱"(little support for named captures)、"文法に対するサポートが
貧弱"(little support for grammers)、"'現実の'言語との不十分な融合" (poor integration
with [the] 'real' language) などがあります。

■_ ちょっと愚痴ってみる

別に深く感謝しろとは云わないけどさあ、情報を提供してもらったことについて なにも云わないでさらなる情報を要求するってはどゆこと? 「ありがとう」の一言ぐらいあったってバチはあたらないと思うけどねえ。

■_ Rubyの暗黒面(でもない?)

Matzにっき経由で tech addict - ruby gotchas and caveats

ちょ、コメント欄に使っているキャラクタって(笑)

2006年12月27日

■_

昨日(26日)から今日にかけて、東京近辺は土砂降りの雨+雷。 雷の聞こえる中PC起動してネットにアクセスするのはちょっと怖かったり。 まあ結構遠かったですけどね。

■_ プロジェクト管理

TechCrunch Japanese アーカイブ » Unfuddle、デベロッパー向けにセキュアなプロジェクトマネジメントを提供

へえ。いっぺん試してみようかな。

■_ 暦いろいろ

その後の日付データ型

グレゴリオ暦への改暦ではイギリスが行った時点が特別扱いされるのね。

■_ メモ (Common Lisp のformat関数の書式指定)

format関数

xyzzyで format関数使うときにいつも悩むのでとても参考になる。

■_ プログラマ向けのカルタ

「ろ」論よりコード☆新春エンジニアかるた大会/Tech総研

やっぱり「さわらぬコードにエンバグなし」かなあ。

xgawk for win

うがあ、マルチバイト処理を有効にするとこける~ SEGVで落ちているのにデバッガで引っ掛けられないというのはどういうことだ…

勘違いして仕様をきめてしまった部分を見つけてしまったので 善後策を検討中。今年中にけりをつけられるかなあ。ちと不安になってきた。

2006年12月26日

■_ そうかなあ?

学生にはお金がない。その割に最近のソフトウェアはどんどん高価になっていく。 オフィススィートなどもレポートを書く際に必要になるが、 個人では購入できず研究室のPCを利用する人も多いだろう。

オフィスソフトに関しては下がってきた印象しかないのだけど、 最近またあがってきてるのかな? まあ表計算ソフトだけで「じうまんえん」とかの時代を知っている old timer の印象かもしれませんがね。 あ、あと、最近はWord/Excel込みで売っているPCもあるからそれで 買っている人も多いと思うんだけどどうだろうか? 学生さんならパワポは不必要とは云わないまでもそうそう需要はないような (そうじゃないぞという学生さんからの反論お待ち申し上げます)。

数日前に書いたMathematicaみたいに高いのはとことん高いけど、 「どんどん高価になっていく」というのはちょっと違うような気がするんですが。

■_ すみません

「某」は良く使うような気が。

って誰に謝っている?

■_ 多くは書かない

AWK でバイナリデータを読み書きする方法がよくわからんので, 実際のオブジェクトファイルが作れない…

gawkに関していえば 8bitのデータをそのままスルーしてくれるので、 localeに気をつければまあなんとか。 読み込みについては、 RSをありえないパターンに設定して一気に読むしかないかなあ。 固定長読み込みはまだ実装されてないしね。

gawk以外のawkだと、print/s?printf はそのままlibcのそれに スルーするパターンがあるので、\x00が出力できなかったりすることがある。

■_ 今週のPerl6

今週も取り立てて興味を引くようなトピックはなし。 強いて云えば→ Google グループ: perl.perl6.language

S05に手が入ったようなので後でチェック。 それとS03を読んどいた方がいいかもしれないのでメモ。

■_地デジ

マスプロ電工、地デジ対応のオートブースター内蔵卓上アンテナ第2弾発表 (MYCOMジャーナル)

むーん試してみようかな。

■_ xgawk for win

ちまちまと作業。 とりあえず実行ファイルまでビルドできた。 余裕があれば、gawk for winでやっている機能(/dev/inetとか)を追加するつもり。

処理対象の文字コード指定をどうするかはまだ決めていない。 とは云ってもUnixと同じ、環境変数を参照してのlocale決定は入ってるんだけど。

■_ え゛

なんにしてもActivePerlがVC6前提なので

そうだったのかっ!?

C:\Perl\bin>dumpbin /imports perl58.dll | grep dll
Dump of file perl58.dll
    KERNEL32.dll
    USER32.dll
    ADVAPI32.dll
    MSVCRT.dll
    SHELL32.dll
    WS2_32.dll

あ、ホントだ。

■_ メモ

VistaでUnicode以外の選択肢はなかったのか?──京大の安岡助教授が語る:ITpro

ただし,Unicodeを使うことが悪いと言っているのではありません。私が所属する京都 大学人文科学研究所でも,日本語や中国語,韓国語を扱うシステムで「UTF-8」を採用 しています。私が言いたいのは,WindowsでUnicodeだけをサポートするのではなく, すべての文字を2バイトで表現しているShift_JIS-2004などをサポートしても良かった のではないか,ということです。

 つまり,「cp 932とコードが被るShift_JIS-2004」と「サロゲート・ペアなどに対応 する必要があるUnicode」のどちらを選ぶのか,ユーザーの選択に任せてもよかったの ではないかと思っています。

これまでのものとの連続性を考えるとそうかもしれない。 ただ、MicrosoftはUnicode一直線だからなあ。

2006年12月25日

■_ きみのあさ

寝坊しかかる。ヤバス。

■_ なぜだろう?

継承関係と、クラス・インスタンスの関係は別なので、継承関係は ">" で、
クラス・インスタンスの関係は ">>" で表現することにすると、"特異クラス 
>&;gt; インスタンス" よりも "インスタンス >> 特異クラス"のほうが
ぴったりくるのです。

特異クラスには名前がないのですが、仮にεと書くと、

class ε << obj
  # ...
end

のように書くのが自然ではないかな、と思いました。ここでεを省略すると、

class <<obj
  # ...
end

が自然では。
アングルブラケットの向きは構文解析の事情じゃないの(シフト演算子との区別を つけやすくするため)? と思ったのですが、 考えてみりゃどっちの方向でも一緒ですね。

■_ konozamaよりもひどい

機動戦士ガンダム DVDーBOX1 先行予約特典セット【完全初回限定生産】 :楽天市場 みんなのお買い物レビュー http://review.rakuten.co.jp/rd/2_213310_11813213_0/

マニアのこだわりを甘く見たな(笑)

演算子の優先順位のない言語

どこで見かけたか忘れちゃったけど(2ちゃんのどっかのスレか?)、 APLは演算子の優先順位がなくて左から順に演算して行ったような記憶が。

後継(?)のJとかは知らない。 C Magazineの連載(千言万語)で結構長く取り上げられたので印象に 残ってるんですけどね、Jは。

コマンドプロンプトでがんばってみる

odz buffer - 「ファイルの文字列置換」に関する補足 経由で So-net blog:Miscellaneous:ファイルの一括文字列置換

複数のファイルの特定文字列を一括変換したい場合

for i in *; do cat < "$i" | sed 's/AAA/BBB/' > "$i"; done

for i in *; do sed 's/AAA/BBB/' < "$i" | tee "$i > /dev/null; done

参照⇒
http://d.hatena.ne.jp/odz/20061218/1166499908
UNIXの文化というのはまったくもって効率的というかなんと言うか...
Windowsだとそれ用にアプリケーションが必要になるんだよなぁ、こんなことするだけでも。
  

sed はさすがにどうにかする必要はありますが、

    for %i in (*) do (type %i | sed "s/AAA/BBB/" > %i.new)

くらいのことは cmd.exe でもできるのではないかと。 シングルクォート→ダブルクォートとか リダイレクトでたぶん中身が消えるので別の名前に送るようにはしましたが。

今日のAA

| |⌒○
| |二二)  間に合って良かったですニャ
|_|∀・)
|サ|⊂)\
| ̄| /;__)

2006年12月24日

xgawk for win

クリスマスにあわせてCVS HEADでビルドしようと思ったけどくじけますた。 まあお年玉にはできるのではないかと。

JavaScript

Artonさんのところ L'eclat des jours(2006-12-24) でJavaScriptの問題をみて考えてみた

げーん。 ほとんど不正解ですた。 すげー言語だ > JavaScript

来年の目標

さてどうしようか。 つらつらと考えてはいるのだけど。

Haskell入門もぐだぐだだったから持越しかなあ。

おおきなおせわだ

なんとはなしにリファラを眺めていて、Perl関係のリンク集のページから飛んできているのを発見。 リンク元を見てみると

関数について説明した「perlfunc」の和訳がないなど完全ではないですが,
  

そーゆーの(関数の日本語でのリファレンス)が必要なららくだ本買えよ。 てか、perldoc.jpになかったか?

2006年12月23日

ませまてぃか

某blogで話題の端に出てきたので、リンクを手繰りながら販売代理店のページにたどり着き、 幾らくらいなもんじゃろねーとStandard(だったと思う)の値段を調べたら (操作ミスとか見間違いでなければ)約34万円。 個人で買えるかよ、こんなの。 まあお気楽に試して使ってみようという代物ではないと。

今日のAA

     いいか、みんな

            (゚д゚ )
            (| y |)

    信者という言葉は

           信 ( ゚д゚)  者
           \/| y |\/

        二つ合わさって儲けるとなる

            ( ゚д゚)  儲
            (\/\/

    つまり、俺たち信者は金づるでしかないと言うことだ

            (゚д゚ )
            (| y |)

Rubyのソースコードリポジトリ管理がSVNへ移行

SVNへの移行

あー CVSViewみたいにtar玉で落とす機能は(まだ?)ないのね。残念ナリ。 以前ruby-devで前田修吾さんに訊いたときにはそういう機能(リポジトリからtar玉を動的に作成 してダウンロード可能にできる)がないでもないということだったと思うけど。

なんでそんなことにこだわるかというと、会社のネットワーク経由だとイロイロあって svn co ... ができんのですよ。listは取れるんだけど。 リクエストするにしてもそういう機能を必要とする人がどれだけいるかだよなあ…

会社でんなことするのが悪い? ごもっとも。

今度はWindows SDKの暗黒面ですね

バカが征く

非常に今さらなんですけど、BOOLってナニ? (笑)

BOOL  Boolean variable (should be TRUE or FALSE). 
      This type is declared in WinDef.h as follows:

        typedef int BOOL;

でもって、TRUEは1で、FALSEはゼロ。

Winwdows SDK でいうところのBOOLはBOOLであってboolでないのです。 BOOLといっといてその値は二値ではく、 intを返していたりすることは実はよくあります。 ぶっちゃけていうと、 FALSEは0だけど、TRUE(として見なされる値)は1とは限らない ということです。で、APIによるのですが、 FALSE以外に返す値がTRUE一種類ではなく複数種類返しうるものが存在します。 ですから、戻り値の型がBOOLだとされているAPIの呼び出しのときに

    if (SomeWin32APIFunction(...) == TRUE) {
        呼び出しが成功したときの処理とか
    }

とかいう判定をするととってもシアワセになれます。 ですから、BOOLを相手にするときは

    if (SomeWin32APIFunction(...) != FALSE) {
        呼び出しが成功したときの処理
    }

としなければならないのでいす。 実質 intを返す(つまりFALSE以外に返す値が複数種類存在する) のになんでワザワザBOOLという名称をつけたりしたのかは 残念ながら知りません。

無名

んー確かに有名/無名の用法での無名がありますねえ。 ふと脳裏に浮かんだ「名無しファンクション」… 特に意味はありません。

2006年12月22日

■_無線LAN対応ルーター購入

PSPとかDSとかW-ZERO3でもアクセスできるようできると嬉しいかなあと 思いつつ、無線LANルーターを購入しました。 ノートパソコン買ったときにも活用できるだろうし。 問題はいつ設置とセッティングをする気になるかということなんですが(笑)

■_ anonymous → ?

成績表のソート ttp://blogs.wankuma.com/episteme/archive/2006/12/22/52840.aspx (諸般の理由で ttp リンクにしています)

anonymous function とか anonymous delegate の anonymous を 「匿名」と訳すのにすげー違和感を感じるのはワタクシだけでしょうか? 「匿名」ってのは本当は名前があるんだけど、それを隠すというものであって ハナから名前がないというのとは違うと思うんだけどなあ。 → とくめい 0 【匿名】 - goo 辞書

確かにanonymous という単語の訳には「匿名」ってあるけどさあ (だから anonymous FTP のときに「匿名」を使うのは間違ってないと思う)、 真性の名無しなんだからこの場合は「無名」とかを使うべきでない?

例によってこだわりすぎかなあ…

これはいい

ITmedia News:関東のJRも私鉄もバスも1枚で――PASMO、3月18日スタート

東急電鉄とか東京メトロは通勤以外に毎週何回か乗るからこういうのが使えると よいかもれしれず。

2006年12月21日

■_

まーそのなんといいますか、会社に対して毒吐きたくなったんだけど 収拾つかなくなりそうなので自粛。まあ、 「忠誠心」という言葉は使う方と使われる方とで受け取り方違うよね。 ということで。

この辺の理由で各方面でのやる気が失せてますので (元からそんなにあったわけでもないけど)、しばらくの間 一層ぐだぐだになります。

■_ スタブ

Java 2 Platform SE 1.3: クラス Stub とか Webサービスの基礎(2004年度ソフトウェア特論) にある用例は知りませんでした。不勉強。 RPCとかはあまり使う機会がなかったしなあ。

■_ JVM

某社社内システムでとある処理をしようとしたところ動かない。 いろいろ調べてみると、IEでSunのJVMを使っているとそういう症状が出ることがある ということが判明し、設定を変えてSunのJVM を使用しないようにすることで解決。 んー、今まで特に問題なかったんだが、SE6入れたところでおかしくなった模様。

2006年12月20日

■_ あ、先生が見つけてくれた

はじめてのにき(!)(2006-12-20) すみません。バックトラックで投げられないわたしが悪いんです。

トランポリンは実行時に生成しないと言わない… のだろうか。僕は実行時に作るヤツしか 見たことないけど、よくわからんな。 Binary Hacks の用語集を見ると… 載ってねえ! くそめ!!いやでもまぁ索引からひくとまぁそんな感じのことが。

うーむトランポリンは jmp 装置を持ち運んでる印象なんだろうな、 というわけでそれはジャンプ台とか呼びたいような気がするけどこれも今度調べる。

えーと gcc の拡張である関数内関数(でいいんだっけ? 要はPascalみたいに入れ子になった 関数)のときに同様のコードを使っていて、それをトランポリンと呼称していたと 思います(前世紀(笑)にrmsが日本に来てGNUのセミナーで話をしたとき そんな話題が出たことが)。あれは動的(実行時)に生成はしていないですよね? と思ってちょっとしたコードで試したら…あれ? んーそれっぽいアセンブリコードが出てこない。

動的にコードを生成というと、これも前世紀の話になりますが某プリンタドライバの 開発のときに、指定されたROPに応じて文字通り動的にバイナリコード列を生成して そこに飛び込んでレンダリングをするような コードを書いたことがあります(デバッグ大変だったあ)。 それは単純にスタック領域に作ってたんで、 DEPとかで引っかかって大騒ぎになったようですが (デバイスドライバの中の話なんで、アプリほど気軽にヒープをあれこれできない。 まあスタックもそうだったりするんですが程度の問題)。

あと、スタブというと、トップダウンで作っているときにとりあえずの呼び出し先として 作っておくような関数/サブルーチンを指すものとして覚えていたんですが、 違うんでしょうか?

■_ Firefox 2.0.0.1

うーん、なぜか自動更新が利いていないし、自分でチェックしにいくことも できないんですがなぜだろう。→ 証拠画像

■_ 求む UTF-16のサロゲートペア領域のデータを扱っている人

つってもここを読んでいる人にはそういう人は多分いなくて、 いるとしたら gawkとかonigsedを持っていってる人たちの中だと思うのだけど、 要するに検討/検証するのにデータが欲しいわけですよ。

まあ単なるデータなんて自分ででっち上げてもいいんですけど、 実際に使われたときにどうなのというのは貴重な情報なので。 事実、UTF-8のBOMで引っかかるなんてのはある意味予想していなかった事態だけど 起こってしまったわけだし。

こーゆーデータは多分海の向こうの開発者(たとえばUlrich、おまえさんだ(笑))は 十中八九想像の埒外なわけですよ。規格上許されているとしてもね。 まあUlrichに関しては、 「wchar_tが16bitしかない環境のことなんか知ったものかよ」 的な反応で終わるだろうけど。

つーことで、gawkのページにでも書いてみるか。 あとドキュメントにも。

■_ xgawk for win

久しぶりに試験配布用にビルドしようと思ったが、 PostgreSQLのインポートライブラリの作成の方法を忘れてしまい往生する。 正確には作成の方法じゃなくて、どのDLLを元ネタに作ったんだっけということ。 バイナリ配布されているパッケージにあるインポートライブラリは VC++用じゃないので、自分でぽすぐれそのものをビルドするか、 DLLから作成するしかない。 今年三月にxgawk for winを作ったときにインポートライブラリ作ってはいるけど、 ぽすぐれはバージョンアップしてるしねえ。

とりあえずぽすぐれ拡張なしで作るか?

■_ おおきなのっぽの

古時計ではなく、古コンピュータ。 還暦まで現役!…世界最古のコンピューター、富士通が延命へ : ニュース : ジョブサーチ : YOMIURI ONLINE(読売新聞)

読売新聞の昨日の夕刊の二面に載っていたのだけど、 まるで蒸気機関車の動態保存だね。 専任(?)のメンテナンス担当者がいるというのがちょっとナニだけど (まあこれにかかりっきりということもないだろう)。

■_

某日記(中期): この業界、モノがあってナンボ

広がりを見せるこの話題。 この方の意見はいつもうなずけるものが多いなあ(ライセンスに対する態度とか)。

Matz 氏の HSP についての話 - たしかに HSP みたいにひどい言語がそれなりに使われているという事実は言語原理主義者 Matz 氏でなくとも訝しく思うところがなくもないが、結局のところはバランスとタイミング なのだと思う。我々としては「何であんなウンコなカーネルなのに」とかそういうような 類の話はとうの昔に通過してきているのである。

HSP という言語がウンコなのは、どちらかといえば処理系としての HSP の実装者の 都合だろう。実装者の知見の狭さというのもあるかもしれないし、あるいは、 いい言語はえてして処理系そのものを実装するのが難しい。

ある言語がいい言語だったとしても、結局はそれだけのことであって、必ずしも目的に 合致してるとは限らない。たとえば俺がエディタを作ったとして、そのマクロ機能に何か 既存のいい言語を使おうとしても、多くの言語処理系はそういう再利用がしにくい。 じゃあ自分でそういう言語の処理系を実装するかというと、そんな暇はない。結局、 ろくでもない言語を自前で設計実装して組み込むことになって、目も当てられないと いうようなことになったりする。いかにいい言語であっても、目的にあった処理系や 言語実装が用意されていなければ使われない。そういう手頃なものがなければ自前で 実装することになるけれども、大抵はひどい言語のほうが簡単に実装できるから、 その時点でひどい言語が実装されることが約束されている。

最近は Lua みたいに始めから組み込まれることを意識してる言語実装があるけれど、 そういう流れは評価できる。私は個人的には、パーサから何から全部ライブラリに なっているべきだと思っていて、たとえばパーサがライブラリになってれば、 統合環境にありがちなハイライト処理とかコンテキストヘルプとかの処理がやり やすくなると思うんだが、そうなってないのでうんざりする目に遭う。プログラミング 言語の作者はとかく言語そのものの仕様に目を奪われがちだけども、言語の処理系実装 そのものの再利用の便宜みたいなところにもちゃんと目を向けるべきです。

自分がどこかで感じてはいても言葉にすることができなかったこと (無論それ以上のものではあるけれども)を見事に述べているという感じ。 組み込みを意識した言語というとTclが嚆矢なんでしょうか? まあTclも相当反響を呼んだ言語でしたが(rmsの例のアレ)、 Tkを使うためのものという立場でないところで使われてはいるのでしょうか? Luaはゲーム業界などで結構使われいる気配がありますが。

他の言語については良くわからないのでコメントできないけど、 Rubyに関しては(コメントできるほど知ってるのか>おれ)、 最後の「言語の処理系実装そのものの再利用」のための枠組みとかサポートは ちょっと弱いかも。 イメージでしかないのだけど、Pythonは割と他のアプリから使いやすい印象はある。 実際 Mozilla(Seamonkeyだっけ?)の次のメジャーバージョンとかでは ブラウザをPythonでぐりぐりいじれるとか言う話らしいし、 OOoでもマクロ言語として使えるとか使えるようになるとか聞いた記憶が。

あ、でも国産(つってもレンダリングエンジンはできあいのもの)のブラウザで Rubyがマクロってのがあったような。

2006年12月19日

アナタにとっての自由とFree

とある探し物していて偶然見つけたMLらしきもののアーカイブ Volume018 GNU(グヌー/グニュー)とは

あきれ果ててお兄さん涙が出てきました。

GNUとは(Gnu is Not Unix)の略だそうです。
「GNUはUNIXではない」という自己否定的な意味もよくわかりませんが、GNUの説明

再帰的な定義云々はおいといて、なぜ「Not Unix」なのかというと 彼がプロジェクトを始めた頃にはLinuxも*BSDもなくて、あるのは 商用UNIXばかり。そしてその中でさらに標準をめぐって争いをしていて 「自由なプログラミング」には程遠いものであったと、そして、GNUプロジェクト が目標とするOSは、そんな「UNIX」ではないよ。ということだから。 決して自己否定しているわけじゃない。

GNUプロジェクトは、リチャード・ストールマン(Richard M. Stallman)という
方が始めたもので、「ソフトウェアは"フリー"であるべきである」という理念に基づ
いています。
ここで"フリー"という用語の意味は、"無料"の意味ももちろんありますが、
"第三者が自由に手を加えることが可能なかたちで提供する"という意味が含まれます。
具体的に言えば、ソフトウェアのプログラムソースを公開するということです。
  

このメールマガジンの中で、興味のある人は GNU プロジェクト - フリーソフトウェア財団 を読んでねとあるのですが、書いた本人が読んでいないようです。 だってそのページには

「フリー」は自由のことをいうのであって、値段のことではないので、複製を販売することと
フリーソフトウェアであることに矛盾は全くありません。事実、複製を販売する自由は重要です。
  

とあるんですから。 少なくとも rmsは Free SoftwareのFreeには「無料」の意味はこめていません。

UNIXの世界では、GNU以前から、"フリー"の精神というのが尊重されて来ました。
UNIXというOS自体、AT&T ベル研究所で作られ、その後一般に無料公開されたOSです。
誰もが自由に使えるのが当たり前だったのです。
  

UNIXの1/4世紀あたりに載っていたと思うけど、「無料公開」といってしまうのは ちょっと違うような。また、「誰もが自由に使えるのが当たり前」であったのなら、 Lions本(のアングラコピー)のようなものがあるわけがないわけで。

rms の思想は素晴らしい、GNUプロジェクトのソフトウェアを使わせていただく際には 押し頂いて深く感謝せねばならない。 なんてことは絶対云いませんが、Free Software の Free を故意にせよ不注意にせよ 「無料」のそれと誤読してそれを広めるなんてのはちょっといただけないなあ。

ということで以前にもまして (rmsがいうところの)Free Softwareを日本語で 云う/書くときは 「自由ソフトウェア」(もしくは「自由なソフトウェア」) を使うようにしようと思うのでありました。 g新部さんはすでにそうしてらっしゃるような。

雑感

こういうときはトラックバック打てるといいんだろうけどねえ。 ホワット・ア・ワンダフル・ワールド: 括弧のないLisp

さすがにボクも,HSP はすばらしい言語です ! とは必ずしも無条件には言えないかも
しれないかもしれない :-)

# お茶を濁す
  

わは。前に包丁をたとえに出したことがあると思うのだけど、 たとえば原付で十分用を足せる人に対して、 「いや、運転の何たるかを知るためにA級ライセンスを取れ、そのための努力をしろ」 とかいうのは無茶なわけですよ。 (プログラミングの)初心者にナニが良いのかというのはまたこれで論争に なってしまうだろうけど、「××をしたい」という欲求があって、 HSPではそれがかなえられるけど、Rubyでは(少なくともその人にとっては) 不可能なことであったのなら、どんなにデザインが優れていても意味ないですよね。 色が白かろうが黒かろうが鼠を捕るのが良い猫だとのたまった方もいらっしゃいますし。

# もしそれを嫌がるのならば,まさしくそれは囲い込みというか,自分の食い扶持のた
# めに信者を増やす宗教活動に見えてしまうかも.いや,それは言い過ぎか.すいません.
#現に幸せになってる人も多いわけですからねぇ.
  

んーと宗教活動云々は言葉的にもちょっと微妙っす。 詳しくはコメントしないけど。 ただそう感じている人はあろはさん以外にもいることはいます。

しっかし,ボク的には,松本氏は,Lisp が 50 年かけてできなかったことをやりとげ,
Ruby で,現に世界を変えつつある凄い人,というイメージがあるのだが,なにゆえに
こんなにムキになって他言語を取り上げ,いやらしい皮肉を語るのだろうか ? 誰にも
マネできないことを成し遂げたのだから,もっとどっしり,大御所的に振る舞っても
良いと思うのに.嫌いな言語やよく知らない言語は,単に放っとけば良いんじゃない
かなぁと.他言語訪問,とかいって,結局は中途半端に取り上げるだけで,最後は
Ruby マンセーに落ち着く水戸黄門的るびま記事とかも,いろいろアレな気が.

# いや,その庶民的なところが良いのかもしれませんが.口を滑らせるのも芸なのかも知れない.
  

会って話もしたこともあるとは云ってもそんなに深い付き合いしているわけではないので あまり無責任なことは云えませんが、 「ムキになって皮肉」というのはちょっと違うかもしれない。 多分悪気はないんですよ。 最後の一行にあるように「芸風」とみるのが良いのかもしれません。

dankogai さんも,どっからどうも見ても圧倒的な勝ち組 (金持ち,有名人,アルファブロガー,
奥さん美人らしい,良いマンションに住んでるらしい) なのに,やたら数学や学歴にコンプレッ
クス剥き出しな印象があるし (なんか,中卒だけど,そこらの ph.D よりも勝ち組だぜ的な.
いや,もちろんそうですし,裸一貫から自分の実力一つで成り上がったということは,非常に
立派で物凄いことだと思うのでですがねぇ…).う〜ん,まぁ,わかってやってる芸風なんで
しょうけど.ちょっとボク的には辟易してしまうかもしれない.
  

最後の一文には賛成しちゃうかも。 もっと書こうとすると筆が滑りそうなので詳しくは書かないけど(笑)

比較するときは慎重に

すみません。トラックバック使えよネタ三連発です。 そろそろRuby/PythonのようなLLを褒めるのにJavaを貶めるのは止めません?

もうURLを失念するくらいいろんなところで言われていることですけど、 LL(Lightweight Language。RubyやPython,Perlのような軽量なスクリプト言語) との比較で出てくるJavaコードは、「普通こんなコードかかないでしょ」というくらい 冗長な場合が多い。

Rubyでコードが簡潔に書ける!ということを表す時にJavaを引き合いに出すのは いいんですけど(引き合いに出す相手としては間違ってないと思います)、 Javaのこんな長いコードがRubyではこんなに簡潔に!とか言う時のJavaコードを 恐ろしく冗長にして比較するのはそろそろ止めましょうよ。 そんなことしても逆に一部では反感を買っちゃうでしょ。そんなことしなくったって、 LLはもちろんJavaよりも簡潔に書けるんですから、ひねり技はいりません。 そんなことJavaプログラマだって普通に認めてることですから。

だってどっからどうみたってLLのほうが簡潔でしょ。それを抜いてもJavaのほうが いいところがまだあるからJava使ってるんで。

まあ自らの長所を際立たせるために競争相手を低く見せる傾向になってしまうというのは 避けられないのかもしれませんね。程度問題だとしても。 自分が普段使っているものを不当に(少なくともそう感じられるように) 取り扱われるのはそりゃあ我慢ならないでしょう。

わたしが、「Free SoftwareのFreeは無料のFreeだ」と云われて黙ってられないように(笑)

いってみたいなよそのくに大阪へ

お、大阪っすよ!

いっそのこと「昔話」でもしてみよかしらね。 20年以上も前、C++が産声を上げた頃、 びあねセンセがどうやってC++を作ったかってお話。 旧くからの付き合いのある足立さん(国産C++コンパイラこさえた ひと/びあねセンセと仲良しで僕は頭があがりまっしぇん)から伝え 聞いたお話なんだけど、これがすっげーオモロイんだ。 最初のC++コンパイラはC++で書いてある…え?どーやってコンパイルすんのよ!? そのタネ明かしをしよっかな、と。

それとかtemplateの実装をヘッダと分離できる処理系のからくりとか。

昔の処理系を探し出してきて、コンパイラがC++をCに変換する様子を ご覧にいれるとか。

ああなんてワタクシ好みの話題なのでしょう。 でも大阪は遠い。しょぼーん。

こういうのがあるのなら

Andy Armstrong / Acme-6502-v0.0.4 - search.cpan.org

だれか CASL-IIシミュレータを(笑)

諦観

某日記: 平成18年12月18日(月曜日)

世の中は諦めが肝心だ。よく馬鹿の一つ覚えで「諦めたら終わりだ」とか言う人がいるけれど、 そんなのは状況による。「しょうがないねえ」で現状を受け入れて初めて先に進める場合と いうのも確実に存在するのだ。

Sir! 激しく同意いたします。Sir!

GNU の sed だと
     for i in *; do sed -i -e 's/AAA/BBB/' "$i"; done
でいいらしい。なんて軟弱な!

Sir! 軟弱でありますか?! Sir!

事情がわからない人への解説: GNU sed には、ファイルをoverwrite する -i オプションというのがあります(Perl/Rubyと同じ)。

誰かと思ってみたら

狐の王国 超訳はいいがそこに何があるのか?

必要悪を悪だと認識せずに必要性を訴える事こそが、悪そのものなのだから。

という結論はどうでも良くて(反対という意味ではない)、 リンク先を辿ってみると、あら、 「Web 2.0 が殺すもの」の著者さんじゃああーりませんか。 思わず納得してしまったナリよ。

なっちゃん(笑)の訳がThe Lord of the Rings のときに問題視されたのは、 超訳云々というよりは、その世界観をぶっ壊してしまうような訳を 連発したからじゃなかったっけ?

2006年12月18日

■_ shell-command-on-region

たった今、shell-command-on-region でぐぐったら、odzさんのはてなのページが一番上に出てきました。 そんなことはどうでもよくて。

確かめてみたら xyzzy には shell-command-on-region ってないんですよね。 同じような機能はあったよなあと思いつつ探してみると filter-regionがそれっぽい。 キーバインドは C-x | 。 同じような関数にfilter-buffer というのがあって、 こちらは C-x # にバインドされている。 これは Emacs Lisp でいうところの shell-command-on-buffer ということでいいのかな?

■_ Mathematica

「Mathematicaはもはや計算だけのソフトではない」 --- 米Wolfram ResearchのWolframディレクターが語る:ITpro

Mathematica って興味はあるんだけど、結構高いし、 値段に見合うほど使えるのかというと甚だ疑問だったりするので 遠くから眺めるだけのソフトだな(笑)

■_Perl::Critic

Perl::Critic

試しに

$mes = "hello, world";
print $mes, "\n";

とだけ書いたファイルを食わせてみたらやたらとチェックされてびびった。

■_ Jyhon本

西尾泰和のブログ: 執筆日記6

この人のプロファイル見てたら落ち込んできちゃったよ orz
まあすぐそれなりに復活しますけど。 そんなことはどうでもよくて(本日二回目)

オライリーの「Jython Essentials」はJython2.1が出た4ヶ月後の出版だけど、 Jython2.0に基づいていて現状に則さない記述がある。 だから2月出版の僕の本についさっき出たJava6.0に関する言及がなくても別に許されるよね?

をーJythonで本にできるのかあ。 出たら買おう。

「ある言語のユーザーの中に、自分にとって不快な言動をする人がいる」ということを 言語自体や言語のユーザー全体をけなす理由にするのは反感の元だと思います。

    しかし、今回のことで「Lispが広まらないのには括弧以外の理由があるのかもね」
と強く感じた次第である。 

まぁ、そう感じるのは個人の自由ですけど、わざわざそんなこと書かなくてもなぁと 感じた次第です。僕は以前、とある熱狂的なRubyユーザに「なんで日本人なのに Rubyつかわないの?非国民!」みたいなことを言われたことがあります。 その後しばらくは「絶対にRubyなんか使わない」と怒っていました。

言語Xのユーザーは、特に有名なユーザーは、同じ言語Xのユーザーから言語Xを 使わないことを理由になじられたりはしません。だから「言語Xを使わないことをなじる 言語Xのユーザー」がいないと感じてしまうんでしょうか。実際にはどんな言語にも そういうユーザーはいるのであって、彼らの言動を無視するスルー力が必要なのかも 知れません。

Googleヒット数
Lisp厨(10,800)/Lisp(1,190,000) = 0.009
Ruby厨(30,500)/Ruby(2,140,000) = 0.014
Python厨(14,100)/Python(1,960,000) = 0.007

まったくもって同感。 まあまつもとさんにしても、筆が滑ったという感じなのだろうけど 立場上発言には注意をもっと払わなければいけないということなのだろうか。

各言語における「厨房率」が有意に差があると認められるかどうか 確かめてみようかと思ったが面倒くさいのでやらない。

■_ C++ Conding Standard

C++ Coding Standard

C++のCoding Standard というネタでは本も出ているけど関係はないのかな?

 Bad Points
Now the bad:

    * The standard is usually stupid because it was made by someone who doesn't
      understand C++.
    * The standard is usually stupid because it's not what I do.
    * Standards reduce creativity.
    * Standards are unnecessary as long as people are consistent.
    * Standards enforce too much structure.
    * People ignore standards anyway.
    * Standards can be used as a reason for NIH (not invented here) because the
      new/borrowed code won't follow the standard. 

というあたりはにんともかんとも。 Standards reduce creativity. というのは納得できるけど、やっぱそういうものなのかねえ。

■_ 今週の Perl 6

Pugs: Weekly Perl 6 mailing list summary for 10-16 December, 2006

supertyping は斜め読みしてたけどよくわからなったのニャー

■_

「プログラミングって面白そう!」

「自分も勉強してみたい」

そんな風に考える初心者は世の中に沢山いても、「こうすればOKだよ!」みたいな道しるべって無いですよね。

「やっぱり最初はC言語からだね」とか「今時はJavaでしょ」みたいな空気とか、

「Lispこそハッカーへの道ですよ」みたいな悪魔のささやきとか、

ようするに各種宗教の勧誘みたいな状況にあるわけです。

何をどういう順番で勉強していけば順調に成長できるのか、絶対確実な道はありませんが、

(プログラミングはまだ歴史が浅いので、数学や物理みたいには体系化されていない様子です)

まだまだ初心者な自分が、多分こんな感じでやればいいのでは、、、という無難なコースを大胆にも考えてみました。

以下は書籍「ハッカーと画家」の一部引用です
    「ハッカーと画家」という書籍の中では、エリック・レイモンドという人の意見が取り上げられています。

    「まず習得が容易なPythonとJavaを学び、次にUNIXをハックする為にCを学び、CGIの為にPerlを学び、さらにLispを学ぶべきだ」

    とあります。
  
現役PGの皆さん、特にベテランの方はこの意見に概ね同意するのでは無いでしょうか? しかしここで私id:hamastaは「全面的に非同意」をあえて主張したいと思います。 そもそも、初心者といっても小学生から大人までいろいろいるはずで、 環境や現在の状況によってベストな道は違って当然と思うんですよね。 だからいくつかコースを分割して提示すればいいんじゃないのかと思いました。

その人のニーズを把握して提案すべきではないかというのには大いに賛成。 Yahoo! 知恵袋とか教えてgooとかだと、Cの人気がやたらと高いけど。 職業プログラマなら覚えておくべきもののひとつだとは思うけど、 丸っきりの初心者に、メンターとかちゃんとした講師なしにCとかC++を 覚えさせようというのはやっぱりちょっと無茶だよねえ。 そりゃあ谷底に叩き落しても這い上がってくる人も中に入るかもしれないけど、 無用に苦労をさせることもないと思う。

■_ Pythonてばスゲー

PyMite

PyMite is a flyweight Python interpreter written from scratch to execute on 8-bit and larger microcontrollers with resources as limited as 32 KiB of program memory (flash) and 4 KiB of RAM. PyMite supports a subset of the Python syntax and can execute a subset of the Python bytecodes. PyMite can also be compiled, tested and executed on a desktop computer.

むーサブセットとはいえ8bitコントローラーで動くようにできるなんてなんてすごい。 ってライブラリを考えなければそうでもない? ことはないよなあ。やっぱり。

今日の検索

http://www.google.co.jp/search?hl=ja&rls=GGLJ;GGLJ:2006-49;GGLJ:ja&q=uac+蜷後§蜷榊燕&lr=

イッタイ何の検索だったんだろう?

2006年12月17日

Binary 2.0 カンファレンス2006 レポート

artonさんのところ

おおなんと詳しい。 感謝しつつ読む。

××依存

OKWave ファイルがオープンできない

凄いなぁ、ユーザが実行ファイルのファイル名を変えると動かなくなるプログラムですか。
あー、エクスプローラ上で、同じフォルダ内でコピペしただけでも動かなくなるんですね?
いや、凄いなぁ。「専門家」にはできない芸当ですね。

あ、念のために補足しておきますと、argv[0]にフルパスが入るか否かはOS依存じゃなくて処理系依存ですから。
つまり、BCCではなく他のコンパイラにすると使えなくなる(かもしれない)手法ってことです。
この件に関しては私も専門家ではないのでVCではどうなるか知りませんが、
少なくともgccでは巧くいかないことは判っています。

OSと処理系の両方に影響受ける(依存する)と思うんだけど違うかな。 むかーしRubyのWindowsへの移植でいろいろやっていたときに知ったのだけど、 たとえばWindowsで、PATHの内容を参照してプログラムを実行、 たとえば PATH=c:\foo\bin で、別のディレクトリ(c:\hoge)で c:\foo\bin\bar.exe を起動したとき、

NT系列の場合
コマンドラインargv[0]の内容
barbar
c:\foo\bin\barc:\foo\bin\bar
..\foo\bin\bar..\foo\bin\bar
9x系列の場合
コマンドラインargv[0]の内容
barc:\foo\bin\bar
c:\foo\bin\barc:\foo\bin\bar
..\foo\bin\barc:\foo\bin\bar

のようになった。 さっき試したら、xp上のgcc(cygwin)でも同じような挙動になった (cygwin形式のパスに変形されて入った)。

Jave 7

[mustang/Java SE 6] 次世代Javaの動向 4 [dolphin]

132  Name: デフォルトの名無しさん  [sage] Date: 2006/12/15(金) 04:27:57  ID:  Be:
   Java SE 7.0 のスライド、らしい。
   http://blogs.sun.com/dannycoward/resource/Java7Overview_Prague_JUG.pdf

   なんか BigDecimal で四則演算が使えてるっぽいサンプルとか、
   JavaBeansのプロパティが -> で参照できてるっぽいサンプルとかがある。

   Closure の構文みるに、8月の段階で提案されてた構文っぽいので
   他の言語機能も構文変わったりするのかも。 
  それと個人的には Java SE 7.0 って機能てんこ盛りすぎに思えるので
  いくつかの機能は次のバージョンに持ち越される可能性もあるんじゃないかと心配したり。
  ざっとみただけでも、コンパイルエラーになりそうなサンプルが 2つほどあったり……

 158  Name: デフォルトの名無しさん  [sage] Date: 2006/12/17(日) 01:08:15  ID:  Be:
    >>132
    あくまで提案か。
    実装するにはヤバイのが多いな。
    BigDecimalの演算子だが
    divide使うとき、MathContextの値はどうするのだろうか。
    二つのBigDecimalオブジェクトのMathContextの値が異なれば
    誤差が片方のMathContextの制度を基準にして除算を
    することになると思うが、そうしたくない場合には
    結局BigDecimal#divide(BigDecimal, MathContext)を使うことになるんだろうな。

    その辺り、どう解決するのだろうか。 

 159  Name: デフォルトの名無しさん  [sage] Date: 2006/12/17(日) 01:18:13  ID:  Be:
    とはいえ、いまだに大量に要る浮動小数点を金額計算に使うやつらをとめれるのは大きいか

    だってnewするの面倒だもんと聞いたときには何の冗談かと

    あとしらないで1.05とか掛け算したんだけど、なんかコンパイルエラーが出るんですが、
    doubleにしたらエラー消えたからOKだとおもったとか

    こんなのが業務プログラム経験10年とかでベテランですといってごろごろいるんだが
    そのたびにぶちきれてる俺はいやなやつと思われてるっぽい

BigDecimalがお手軽に使えるのはまあよいことのような気がするけど、 159のような状況は考えたくもないな。

Rubyについて Part 25 (気にしてますか?GPL混入

40 Name: デフォルトの名無しさん [sage] Date: 2006/12/16(土) 02:54:30 ID: Be:
    そして誰もGちゃんを止められない悪寒
    東京近辺の方カキコきぼん。

誰? > Gちゃん

2006年12月16日

えーと

俺は○○言語のプログラマーよりは上だ

このコメント書いたのあろはさんとか? いや大学生(あ、あろはさんは院生だっけ?)でProlog使ってて…ところがなんとなく。

Binary 2.0 カンファレンス 2006

「PS3上のLinuxをWiiリモコンで操作」---Binary 2.0 カンファレンス2006より:ITpro

んー、行きたかった。 職場の忘年会に出てたのでストリーミングで見るということもできなかったし。 とりあえずはてなで見かけたものを眺めつつ己を慰めてみる。

Amazon アフィリエイト

まあここで自分も貼ってたりするんで偉そうなことはいえないのですが (あ、理由の大部分は書影を使うためなのでここでぽちっとなしてくれという意識は ほとんどありません(全くないわけではない(笑)))、 某MLへの投稿で、これこれの本に関してこういう情報がありました的なものがあったのだけど、 それにアフィリエイトのひもつき(http://amazon.co.jp/ほげほげ/ふがふが-22ってやつ)リンクを 貼り付けていたと。 よっぽど罵倒注意してやろうかと思ったけど、スルー力を発揮して我慢しました。

本日の購入

よつばと! 6 (6)
あずま きよひこ
4840237026
よつばとしろとくろのどうぶつ
あずま きよひこ
484023714X
さよなら絶望先生 第6集 (6)
久米田 康冶
406363762X
ローマ人の物語 (15)
塩野 七生
4103096241
ついに最終巻。ほとんど駆け足の感があるけれども、西ローマ帝国の最後とその後を。 東ローマ帝国の名将 ベリサリウスと、 皇帝ユスティニアヌスがでてきたのはちょっと驚いた。 西ローマ帝国滅亡で話が終わると聞いた覚えがあったので。
VBScript実用プログラミング・テクニック―正規表現、OOP、SQLを応用したビジネス・ツールの作成技法
佐藤 信正
4896273311
バッチファイルでやるよりは楽できる場面もありそうなので。 xgawkとかの configure の代替物をこれで作れないかなあと思いつつ購入。
GreasemonkeyスクリプティングTIPS&SAMPL
高山 恭介
4798015350
どちらかというと、FirefoxやThunirbirdの拡張(おっと今はアドオンだっけ?)の 書き方の参考書が欲しいなりよ。 Web上の情報だと自分の欲しいところが見つからなかったりして (FireffoxやThundirbirdの)ソースを見たりしているのだけど でかすぎて追いかけるのが大変。
ちゃんとCSSするためのスタイルガイド入門
長谷川 恭久 上ノ郷谷 太一 有坂 陽子
4798112194
正規表現メモリニューアルの参考のために。 CSSはいろんなところからもらってきたりその場で調べて適当に解決したりで ちゃんとしてないのでどうにかしようと。

これともう一つ、 ここが変だよC言語(上) という本も買ったのだけど、なぜかこれのアフィリエイトリンクができない(^^; それはおいといて、出版社が出版社なのであまり期待していなかったのだけど、 斜め読みした限りでは結構面白い。突っ込みどころがないでもないけど、 なかなか鋭いところをついていると思う。 これはぜひともあろはさんに読んでもらいたい。 つか読ませるためにこの本贈りつけて差し上げますから住所教えてちょ(笑) >あろはさん

2006年12月15日

■_ --posix

GNU のユーティリティ類でPOSIXにもあるようなもの、たとえばここで挙げる sed なんかは、POSIXで規定された動作に沿うようにする(GNU拡張を禁止する) --posix というオプションを持っています。 で、GNU sed で --posix を指定したときの動作に付いてのお話

GNU sed では、デフォルトでPOSIX の Basic Regular Expression で定義されている ところの正規表現 + α が使えます。たとえば \| とか \? がそうです。 ところが、--posix をつけたときでもこれらのメタ文字が使えるのはおかしいんじゃないか? というのが話の発端。

まあ「POSIXでもそれらが『使えない』とは定めてないじゃん」などの理由で バグじゃないので放置。ということになったようです。 まあ、そもそもGNU sed で '\|' とかが使えるというのを知っている人は そう多くないだろう。

■_ それはどうだろうか

お世話になります。

さて、良いWebアプリを開発しようとした場合、次の言語をマスターしなければなりません。
1.c#または.NetVB
2.html文
3.javaスクリプト
これは苦痛です。
そしてこれは、Microsoftの怠慢の結果だと思います。

1.Windows,Linux,Mac の、それぞれ用の .NetFramework付きブラウザ(のようなもの)をリリースする
2.そのブラウザ(のようなもの)と、サーバー間は、html文ではなく、
  コントロール(ソフト)は、c#または.NetVBから作られた中間言語(のようなもの)で、また、データは、
  非XMLかつ非テキストでやり取りをする(XMLもテキストも指定はできる)
3.現状のc#または.NetVB、およびVisualStudioの機能を大幅に拡張し、
  早く短い通信や、軽く見栄えの良いアプリが簡単に作れる機能とする
4.さらに、コントロール(ソフト)をサーバーに置くか、クライアント側に置くか
  だけの違いで、現状言われているWebアプリとWindowsアプリを実現してくれたら
  asp.net(Webアプリ)とWindowsアプリの垣根がなくなり、これも覚えるのが1つで
  済むようになります。

以上を実現するには、かなりの仕組みが必要とは思いますが、不可能ではないはずです。
こうすれば、html文もAjax(javaスクリプト)も使わず、c#または.NetVBだけで、ソフトが作れると思います。(または、全く新しい言語で)

さらに、上記機能を完璧に使いたいなら、サーバーもWindows(つまりIIS)を使いなさい、
とすれば、Linux,UnixのWebサーバーのシェアを奪えると思うのですが。
(上記を実現してほしいために、Microsoftに餌をぶらさげたつもりです)

よろしくお願いします。

今の状況がベストとは云わないけど、 まあなんというか香ばしいよね。 ユーザーにとってみれば、自分の望む結果が得られればいいわけで、 「今日からいままでのブラウザは捨ててこれ使ってください」ってのは なかなか難しいと思うんだけどね。 見たところ、HTTPもしゃべるなという感じだしなあ。

■_ Java 7

Java 7ではbeanプロパティアクセスのset/getは矢印(->)使うとか言う話で…

    Danny Coward talk PDF (p.27): Reading JavaBeans properties 

a.setFoo(b.getFoo());
a->Foo = b->Foo;

何か、気持ち…悪い。 

それなんてC++ Builder (いや、表記がそれっぽいなと)?

■_

Vista搭載の新PCへ、今のPC環境を丸ごと移行! 「PCmover for Vista」発売に (MYCOMジャーナル)

今まで出てなかったが不思議な類のソフトウェア。 Mac OS XはOSだけで同じことができるんだっけ?

2006年12月14日

■_ いつも手の中に

問題です。以下の C++ のコードがどのくらいの数値を出力するかどうかを予想して、
実際に確かめてみて下さい。

#include <stdio.h>
struct C {
    void f() {}
    virtual void vf() {}
};
int main() {
    printf("%p\n", &C::f);
    printf("%p\n", &C::vf);
}
まぁうちだと 0x804847c, 0x1 だったわけですが、要は仮想関数の場合、関数ポインタじゃ なくて仮想関数テーブル内のインデックスを保持するわけ。これが Java だとか C++ だとかで、 sumimさんのメンタルモデルが裏切られた 理由なわけですが、通常これはありがたいわけです。 これが無いとまともな mem_fun は書けません。

せんせー、VC++ 7.1だとこうなりますた。

00401030
00401040

ただ、アセンブリ言語ソースを吐かせてみると

; Line 7
	push	OFFSET FLAT:?f@C@@QAEXXZ		; C::f
	push	OFFSET FLAT:$SG624
	call	_printf
	add	esp, 8
; Line 8
	push	OFFSET FLAT:??_9@$BA@AE			; `vcall'
	push	OFFSET FLAT:$SG626
	call	_printf
	add	esp, 8

コメントからすると、ふつーのポインタとは気配が違うっぽいことは いえそうだけどよくわからないのニャー。

いや、ちょっとまて。??_0@$BA@AE を検索してみると 同じソースの中に実体がある。

??_9@$BA@AE PROC NEAR					; `vcall', COMDAT
	mov	eax, DWORD PTR [ecx]
	jmp	DWORD PTR [eax]

これって「トランポリン」ってやつ? VC++では ecxに this が入ってくるのはオヤクソクだから、 確かにvtableを引いてるっぽい。 んじゃあ、仮想関数を増やしてみたら?

#include <stdio.h>
struct C {
    void f() {}
    virtual void vf() {}
    virtual void vf2() {}
};
int main() {
    printf("%p\n", &C::f);
    printf("%p\n", &C::vf);
    printf("%p\n", &C::vf2);
}

アセンブリレベルではこう

; Line 8
	push	OFFSET FLAT:?f@C@@QAEXXZ		; C::f
	push	OFFSET FLAT:$SG627
	call	_printf
	add	esp, 8
; Line 9
	push	OFFSET FLAT:??_9@$BA@AE			; `vcall'
	push	OFFSET FLAT:$SG629
	call	_printf
	add	esp, 8
; Line 10
	push	OFFSET FLAT:??_9@$B3AE			; `vcall'
	push	OFFSET FLAT:$SG631
	call	_printf
	add	esp, 8

(略)
;	COMDAT ??_9@$BA@AE
_TEXT	SEGMENT
??_9@$BA@AE PROC NEAR					; `vcall', COMDAT
	mov	eax, DWORD PTR [ecx]
	jmp	DWORD PTR [eax]
??_9@$BA@AE ENDP					; `vcall'
; Function compile flags: /Odt
_TEXT	ENDS
;	COMDAT ??_9@$B3AE
_TEXT	SEGMENT
??_9@$B3AE PROC NEAR					; `vcall', COMDAT
	mov	eax, DWORD PTR [ecx]
	jmp	DWORD PTR [eax+4]
??_9@$B3AE ENDP						; `vcall'
_TEXT	ENDS
END

結論: VC++では、仮想関数のアドレスを取ったときには g++のそれのようにvtable上でのインデクスが得られるのではなく、 トランポリンコードの先頭アドレスが得られる。

■_ 三国志 != 三国志演義

その昔、呉の周喩は孔明の手紙を読んで憤死した(*2)と伝えられているが、
... (*2) 本当かどうかは知らないが、少なくとも三国志(横山三輝)ではそういう話があった

それは十中八九「三国志演義」でのエピソードです(横山三国志は演義がベース)。 まあ日本でいう「三国志」はほぼ間違いなく「三国志演義」になっちゃうんですが。 本当の「三国志」は部分的にしか読んでいないのでちと説得力に欠けますが。

■_ 元号のはなし

昨日の ERA のつづき。

Wikipediaの元号一覧というエントリによると、

645年 	大化 	たいか 	6
650年 	白雉 	はくち 	5
654年 	廃止
686年 	朱鳥 	しゅちょう 	1
686年 	廃止
701年 	大宝 	たいほう 	4

断絶している時期が存在している。 で、南北朝時代はやっぱり北朝と南朝とで別個に元号を定めていた。 やっぱ明治以降というのはそれなりに意味のある区切りでないかなあ? それ以前ということでなら、どこで区切るのがいい?

上記を見つける過程で見かけた興味深いエントリ → 旧暦2033年問題 - Wikipedia

暦ってのもいろいろあるんだねい。

■_ Dive into PHP

PHPのソース構造って良くわからん。 なんでこんなことやってんだオレは…

PHPにも printf があって、その書式指定に %d を取りますが、 このとき、多分

	DVAL_TO_LVAL(op->value.dval, op->value.lval);

というマクロで浮動小数点で保持しているデータを整数化しています。 マクロの定義は

#define DVAL_TO_LVAL(d, l) \
	if ((d) > LONG_MAX) { \
		(l) = (unsigned long) (d); \
	} else { \
		(l) = (long) (d); \
	}

のように単なるキャストなので、 printf("%d", 70.21*100) のようなことをすると、ものの見事に小数部が切り捨てられるというわけです。 70.21*100 が、7021 ではなく 7020.99... なのは前回までに調べた通り。

gawkだとちょっと事情が違うけど、基本的には同じことなので略。

■_NULLの(規格上の)定義

odz さんがいいポインタを示してくれたので、 JIS (JIS X 3014: 2003)の該当箇所をチェック。

4.10 ポインタ変換 ゼロと評価される右辺値を持つ整数型の汎整数定数式(5.19)を、 空ポインタ定数と呼ぶ。空ポインタ定数はポインタ型に変換することができる。 その結果は、その型の空ポインタ値となる。 (以下略)

18.1 型 (略) 3 このヘッダの内容は、標準Cライブラリの <stddef.h> と同じとする。 ただし、次の変更がある。 4 この規格でのマクロ NULL は、処理系定義の空ポインタ定数(4.10)となる(180)

注(180) 定義内容には、0及び0Lがあり得る。しかし、(void*)0はあり得ない。

ということなので、NULL の実体が __null というシンボルであろうが まったく問題ないと思われ (5.19によればconst 属性の変数でも「汎整数定数式」と見なせるので)。

■_Ocaml

第5回 LablGLで3Dグラフィックス~OCamlの「多相バリアント」と「ラベル付き引数」~:ITpro

今回のは特に実行してみないと実感できそうにないっすね。 インストールしてみようか、OCaml。

■_

自分はときどきブログでC++の批判なんかを書きますが、一番使っている言語はC++です。 そもそもC++の言語仕様が複雑すぎるとか、堅牢ではないとか、そういう話は別に数学的 にきちんと意味論が定義されてないとか、そういう話ではなくて。仕事なんかで他のメ ンバがC++わかんね、という理由でPureC言語でWindowsアプリを書かされたり、どんな 案件でも何故かVisualBasicになったり、とか。MFCが解らんとか、マジで普通です。 たまにC++使える人がいるかと思えば、全然言語のトラップや定石を知らなくて、何が起 こるかわからんので恐ろしい気分になったり(そしてこんなことを言ったら確実に殺され るので表向きは尊重しないといけなかったり)。まあ、それは職場のレベルが低いんで しょ、と言われれば、そう思う人にとってはそうなのかもしれないけど(自分はそうは 思ってません)、同じような職場は多いんでないかな。
C++の言語仕様がもっと良ければもっと仕事が楽になるのは確実なので、文句言っている のは理想論ではなく現実論です。言語設計者の苦労や偉大さなんてそんなの知らんがな。 仕事で多いWindowsツールを組むのであればC#の方が問題少ないです、マジで。仕事上の しがらみでC#がつかえないことも多いけど。
ちゅーことで、底辺ドカタプログラマも苦労が結構あるんですよ。

素のCで(いや、C++でもライブラリがないとナニですが)Windowsアプリは組みたくないなあ。 「どんな案件でも何故かVisual Basicになったり」 というくだりには思わず涙が。

業務上のユーティリティを組むときは「とりあえずExcel(のマクロ)で」 と注文されることの多い俺ガイル。

■_ 地獄への道は善意で舗装されている。らしい。

Yahoo!知恵袋 - 次の文章でおかしなところがあったらご指摘ください・...

ポインターの意味が分っていません。
void dgt_no(const char st[], int tx[])
char st[] も int tx[] も配列の宣言です。ポインターではありません。
ここに指定できるのは実数かポインターだけです。いずれも32ビット幅です。
戻り値についても同じ原理です。
mainの中で二つの配列が定義されているので、この関数定義部にはそれらの
ポインターを渡すようにします。
void dgt_no(const char *st, int *tx)
そして関数dgt_no内において、
st[添え字]という表現ではなく、
*(st+添え字)とします。
演算の際に誤りが生じないのなら *st+添え字 でもかまいません。
txについても同様です。

この後にツッコミが入っているけど、すげえ解説だ(笑)

■_ うげ

昨日アフィリを貼り付けた 「オブジェクト指向入門 第2版」だけど、 よーく内容紹介を読むと

第2版は、第1版の約3倍、1900ページ以上のボリュームで、「原則・コンセプ ト」と「方法論・実践」の 2分冊(1分冊約960ページ)になりました。本書は上 巻に該当する「原則・コンセプト」編です。

きーやー。

2006年12月13日

■_ 7021 != 7021 (Part 3)

そうじゃなくって、a=70.21 で b=100 の時に a*b の整数部分 (それが int() であれ printf の %d であれ) を取り出したい時ってありますよね。 型宣言もなく浮動小数点で数値を扱う awk では意図して注意するしかないのか もしれませんけど、単純な四則演算ほど紛れ込みやすいものです。 どうすればいいんだろう?

んと、70.21 * 100二進表現での整数部分 (=7020)ではなく、7021として取り出すには? ということでしょうか? intにしても書式指定 %d にしても単純な切捨てで整数部分を取り出しているわけですから、 その辺考慮してやればいいのではないかと。 つまり、

>ruby -e "printf %Q{%15.14f}, 70.21*100 - (70.21*100).to_i"
0.99999999999909
$ gawk 'BEGIN{printf "%15.14f", 70.21*100 - int(70.21*100)}'
0.99999999999909

なんですから、元の数値(70.21*100)に適当なεを加えてやってから整数化するか、 整数化する前とした後の数値を比較してある範囲に入っていたら整数化した数値に 1加えてやるかすればいいのではないでしょうか?

■_ERA

意外にもJavaで標準的に和暦が使えるようになったのは、このJava 6 かららしい。 しかもその実装がアレゲ過ぎです。なんてたってちゃんと扱える元号が明治以降後は それ以前扱いというちょっと情けないというか残念な結果になってしまっている。
西暦以外の年号や暦を使っている国や地域はそれなりにあり、 ちょっと考えただけでもイスラム歴はどうなっているんだろう、 どっかの国で大問題にされてないかとすごく気になったりもするのですが、良いのか、 大丈夫か。シアトルの人間にはそこら辺が思いついても、 サンノゼやパロアルトの人間には思いつかないのかと思ったり。 正直今まで西暦だけって言うのはちょっと気まずい仕様だよなと思う。
#まぁ皆さんがんばってライブラリを作られてたんでしょうけど。 とか。

へー、インストールしたら試してみよう。 明治5~6年の境目がどうなっているのか楽しみだ。

この方は扱えるのが明治以降なのは残念だと書かれているのですが、 ではどこまでサポートすればよいのでしょうか? まさか大化元年から? あと、ちょっと考えただけで思いつくのは南北朝時代は南朝北朝で それぞれ別個に元号を定めていたように記憶しているのですが、 その辺はどうするのでしょう? (やっぱり和暦←→西暦変換はいろいろひっかかりやすい問題があるらしい → 和暦、西暦の年月日対応に関する注意点)

太陰太陽暦(旧暦)から太陽暦(新暦)への切り替えもあることだし、 明治以降ということでも大部分のニーズは満たせると思うんですけどねえ。

■_ MOONLIGHT MILE

宇宙開発マンガ『MOONLIGHT MILE』がアニメ化、2007年3月WOWOWにて放送開始 (MYCOMジャーナル)

原作は好きで、単行本買って読んでたりする。 観たいけどWOWOWじゃあ契約してないから観られんな。

■_ 来年一月ですか

オブジェクト指向入門 第2版 原則・コンセプト
バートランド・メイヤー 酒匂 寛
4798111112

カレーなる辛口Javaな転職日記 - オブジェクト指向入門 第2版 原則・コンセプト で、Amazonに登録されているのを発見。 即ぽちっとなしても良かったのだけど、多分神保町へ出向く方が早く買えるので まだしてない(ならアフィリエイトも貼るなって)。

■_ 瑣末なことですが

直接コメントつけた方が早かったかな?

find corpus/sent -type f -print0 | xargs -0 -e python check.py | perl -pe 's{^corpus/sent/}{}'

いやなんかなにげに、Python と Perl が同時にコマンドラインに並んでいたので。
Perl を使っているところは普段なら sed を使うところだけど、単に / のエスケープが 面倒だったので Perl を使ったというオチ。
まぁ、awk/sed/perl を覚えておくといろいろ便利なんだけど案外しらない人は多そう。

えと、sedでも正規表現のデリミタは変えられます(多分Perlの仕様はsedから来ている)。 ただ、{} とか [] のようなカッコ対は使えませんけど。 わたしは / が頻出するようなパターンのときは ! とか # を使うことが多いです。 GNU の configure とかだと @ とか , を使っていたような。

s コマンドとか yコマンドときはコマンドのキャラクタの直後に来たキャラクタを、 通常のアドレス指定等のときは \!pattern! のように\を前置します。 で、\ はデリミタとして使うことはできません。 GNU sed のinfoから(でもGNU固有の拡張ではなかったはず)。

`\%REGEXP%'
     (The `%' may be replaced by any other single character.)

     This also matches the regular expression REGEXP, but allows one to
     use a different delimiter than `/'.  This is particularly useful
     if the REGEXP itself contains a lot of slashes, since it avoids
     the tedious escaping of every `/'.  If REGEXP itself includes any
     delimiter characters, each must be escaped by a backslash (`\').

The syntax of the `s' (as in substitute) command is
`s/REGEXP/REPLACEMENT/FLAGS'.  The `/' characters may be uniformly
replaced by any other single character within any given `s' command.
The `/' character (or whatever other character is used in its stead)
can appear in the REGEXP or REPLACEMENT only if it is preceded by a `\'
character.

もはやロストテクノロジーかも知れず(笑) > sed とか awk

■_ encoding (Perl)

もうひとつ odzさんのところから。

Perl で、標準入力のエンコーディングを指定するには binmode を使えばいいけど、

while (<>) {
}

な null filehandle を使うときは use open を使わないといけない罠。 まぁ、当然といえば当然だけど、知らなかったらはまるよな。引数を指定せずに パイプかリダイレクションを使うと動くし。

use encoding と組み合わせるととっても悩めます(ハマッた奴)。

イマサラ云っても詮無いことだとは思いますが、 Pythonの # coding: ほげほげくらいの 仕様にとどめてもらった方が使い勝手が良かったような > encoding プラグマ
まあイロイロと理由があったのだろう。 それはさておきPerl 6だとどうなるんだろう? まさか多言語対応考えてないということはないと思うけど。

■_ Agree 2007

 発売されるのは、日本語ワープロ「一太郎 2007」(2万1000円)、 かな漢字変換ソフト「ATOK 2007 for Windows」(8400円)、 表計算ソフト「三四郎 2007」(5250円)、プレゼンテーションソフト「Agree 2007」 (8190円)、グラフィックソフト「花子 2007」(1万290円)、 統合オフィススィート「Just Suite 2007」(2万6250円)。価格はすべて標準版で、 特別優待版やバージョンアップ版なども用意される。新製品は、 すべてWindows Vistaに正式対応し、Vistaで新たにサポートされる文書形式の XPS形式での出力が可能なほか、デスクトップ検索や検索フォルダなど Vistaの新機能もサポートする。また、今回の発表に合わせて、 ATOK用の各種辞書や翻訳ソフト、OCRソフトなどオプション製品5種も発売する。

プレゼンソフトだけちょっと試してみたい。 CMさせるなら鈴木阿久里に是非(笑)

■_ ん? 見落としていたか?

: While I agree with most of the changes made to the s[]... notation, : there's one oddity that I just spotted: : : S05 says: : >This is not a normal assigment, since the right side is : >evaluated each time the substitution matches (much like the : >pseudo-assignment to declarators can happen at strange times). : >It is therefore treated as a "thunk", that is, as if it has : >implicit curlies around it. In fact, it makes no sense at all : >to say : > : > s[pattern] = { doit } : > : >because that would try to substitute a closure into the string. : : So I can't say something like : : s[(\d+)!] = { my $num = 1; $num *= $_ for 0..$0; return $num; } s[(\d+)!] = "{ my $num = 1; $num *= $_ for 0..$0; return $num; }" s[(\d+)!] = { my $num = 1; $num *= $_ for 0..$0; return $num; }.() s[(\d+)!] = do { my $num = 1; $num *= $_ for 0..$0; return $num; } : or : : s:s:g[(\w+): (\d+) dB] = : @() -> $name, $num { : $num = exp($num/10, 10); : say "$name has excessive wattage: $num Watts" if $num > 1000000; : : "$name: $num Watts"; : } s:s:g[(\w+): (\d+) dB] = do given [at]() -> [$name, $num] { $num = exp($num/10, 10); say "$name has excessive wattage: $num Watts" if $num > 1000000; "$name: $num Watts"; } : or : : s:s:g[<,> (\w+): (.+) <,>] = [at]() -> $key, $val { $key => $val } s:s:g[<,> (\w+): (.+) <,>] = -> $key, $val { $key => $val }.(@()) s:s:g[<,> (\w+): (.+) <,>] = do for @().each -> $key, $val { $key => $val } : ? That seems like a pretty significant limitation. Could closures be : an exception to the "implicit curlies" rule? That is: if you supply : your own closure on the right, the substitution algorithm accepts it : as is; if you supply anything else, it gets wrapped in a closure as : described. Could do that too (and there's even precedent with attribute defaults), but outlawing it (at least for now) keeps people from cargo culting P5's s{foo}{bar} into P6's s{foo}={bar}.

こんな表記はじめて見たぞ。s:s: ってsが二重になっているのはなんなんだろうか?

2006年12月12日

復活の日(まであと何日?)

昨日(12/11)のニッカンスポーツと 東スポで一面を飾っていましたが、 小橋健太が会場に現れて挨拶をしたそうで。 小橋とか高山はほぼ同年代なんで、ちょっとひいきに思ってたり。 二人が二人とも長期離脱中ですが (高山は一応復帰戦はやってますが以前の通りとまではいってないので)。

小久保・鉄ちゃん疑惑の記事は先にgreeteaさんのエントリを見て知っていたのですが 読んで笑ってしまいました。

C++には地雷がいっぱい

バカが征く

だいたい、こっちだってC++の仕様を確かめたくって コード書いてるわけじゃないし、サックリ出来るんなら それに越したことないわけだし。いくらC++が『本物の プログラマご用達』とかいったって、いくらなんでも 限度ってもんがあるんじゃないの?っていったら、 刺されちゃうかもしれないけど。

今回のこれは、基底クラスのコンストラクタで何かしようとしたのが 敗因(?)ですね。情報はそろってるんだから警告ぐらいしてくれたって バチは当たらないと思うんですが、コンパイラを作っている人は そうは考えないということなんでしょうか。

正直な話、コンストラクタの本体でできることってそんなにないと 思うんですよね。メンバーの初期化はできないし(初期化リストを 使わないとして。本体でごにょごにょすると、それは「初期化」じゃなくて 再代入扱いになってしまいます)、せいぜいがメモリとかの リソース確保くらい?

んー、この仕様を活用できるようななにかすばらしい手法があったりするんだろうか?

追記:
偶然ですがこんなのを見つけました→ コンストラクタで仮想メソッドを呼ぶ

やっぱり(C++では)コンストラクタで仮想関数を呼び出すのはご法度のような。

7021 != 7021 (part 2)

ということで、ウワサのbcmathライブラリを見てみた。 例の記事では4.x云々とあるけど、5.xでも事情は変わらない模様。 アーカイブを展開したディレクトリ下の ext/bcmath/libbcmath/src に ライブラリのソースがある。

まず始めに bcmath.h というヘッダファイルを見る。

/* bcmath.h: bcmath library header.    	*/
/*
    Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
    Copyright (C) 2000 Philip A. Nelson

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

ふむ。FSF謹製(それともどこかから寄付されたもの?)か。

typedef enum {PLUS, MINUS} sign;

typedef struct bc_struct *bc_num;

typedef struct bc_struct
    {
      sign  n_sign;
      int   n_len;	/* The number of digits before the decimal point. */
      int   n_scale;	/* The number of digits after the decimal point. */
      int   n_refs;     /* The number of pointers to this number. */
      bc_num n_next;	/* Linked list for available list. */
      char *n_ptr;	/* The pointer to the actual storage.
			   If NULL, n_value points to the inside of
			   another number (bc_multiply...) and should
			   not be "freed." */
      char *n_value;	/* The number. Not zero char terminated.
			   May not point to the same place as n_ptr as
			   in the case of leading zeros generated. */
    } bc_struct;

まあ多倍長演算するときのデータ構造だったらこんなものだろう。

/* The base used in storing the numbers in n_value above.
   Currently this MUST be 10. */

#define BASE 10

マテ。

使っている基数が10じゃん。 これなら例の演算で誤差が出てこないのは当たり前。

なんとなくわかってきた (VBA)

    vCell1 = Worksheets(vSheet).Cells(vStartRow, vCol)
    Set vCell2 = Worksheets(vSheet).Cells(vStartRow + oDictTotal.count, vCol + 1)

一見同じようなことをしているように見える二つの行だけど、 前者は vCell1に Cells() で指定されたセルの値が入るのに対して、 後者は vCell2に Cells() で指定されたセルを表すオブジェクトそのもの (多分参照だろうけど)が入る。 だから、

    Range(vCell1, vCell2).Select

のように使うには、vCell2でのやり方に揃えなければいけない。 これが理解できるまでに数時間…参考書には関数とかメソッドとかプロパティは 事細かに載っているのにこういうことを説明してくれていない。うが。

JAVA SE 6 リリース

Sun、Java SE 6正式リリース (MYCOMジャーナル)

とりあえず JDKはダウンロードしてみたがインストールしているひまがないな…

続・内包リスト

「内包リスト」は専ら「集合の内包的定義」という時の内包を意識しているわけで、 「内包する」という意味合いはほとんど考えなかった。今までリストが [1, 2, 3] のような外延的定義だったのとの対照しての用語法だから、 敢えて言えば今までのリストを「外延リスト」と呼び直してもいいぐらいだ、と思う。

なるほど。 といいつつ不勉強で今まで「外延」という単語を知りませなんだ。 ぐぐってみて、「外延」と「内包」というのがペアになって出てくるのを 見つけて納得しました。

JRuby 0.9.2

JRuby 0.9.2登場 - opensslエクステンションを追加、Railsサポートも改善 (MYCOMジャーナル)

新しいグラフィカルirbコンソール向けのコードを追加
  

へ、なんですかコレは?

そのデータはいずこにありや? 全世界は知らんと欲す

 アクセス数を取得するとき
chomp($count = <DATA>);
と打ちますが
この記憶されてるデータはどこに保存されていてるんでしょうか?
cgi-binというフォルダにテキスト形式で保存されてるのでしょうか?

それはあなたの心の中に。

2006年12月11日

■_ わたしもしらないぬるぽのせかい

あ、先に書かれてた

C/C++においてNULLと0に関して云えることは、 「NULLの定義は0とか (void *)0 (こっちはC++の場合はありえない。後述) であるとは限らないが、整定数 0(0Lを含む)を ポインタとして評価すると それは常にナルポインタである」 ということだと思います。参考→ C FAQ 5

odz buffer - NULL と 0 で、odzさんは ええと、C++ では NULL と 0 が同一なんて規定があったっけ? NULL マクロを使うのをやめてリテラルの 0 を使えという話はありがちだけど、(後略) と書かれているわけですが、 Stroustrup: C++ Style and Technique FAQによると

Should I use NULL or 0?
In C++, the definition of NULL is 0, so there is only an aesthetic
difference. I prefer to avoid macros, so I use 0. Another problem with
NULL is that people sometimes mistakenly believe that it is different
from 0 and/or not an integer. In pre-standard code, NULL was/is
sometimes defined to something unsuitable and therefore had/has to be
avoided. That's less common these days.

If you have to name the null pointer, call it nullptr; that's what it's
going to be called in C++0x. Then, "nullptr" will be a keyword.

あの検索性の悪いJISのpdfから探す気にはなれないので、 「規格」としてはどーなのよ? という質問に対する答えはわかりませんが、 Stroustrup氏の意向としては「定義」と考えているのかもしれません。 まあ #define NULL 0だからといって即 「NULL と 0 は同一である」とは云えないのはC FAQにある通りですね。 で、すっきりさせるために nullptr なるものを持ち込むと。

C++でのNULLのdefineがCのような (void *)0ではなく、単なる整定数 0になっているのは、 void *からの暗黙のキャストを許さなくなっているから。 たとえば

#ifdef CSTYLE
#define NULL (void *)0
#else
#define NULL 0
#endif

int
main()
{
	char *p;

	p = NULL;

	return 0;
}

というプログラムをC++プログラムとしてコンパイルすると、 NULL が (void *)0のとき、コンパイルエラーになる。 Cでも NULL が 整定数 0であってもいいのだけど、 あえて (void *)0とかになっているのは C FAQにある通り。 まあこの辺は odzさんあたりなら先刻ご承知だと思うので はっきり云って蛇足っす。

上の定義は、ポインターの型の扱いに関して間違いの あるプログラムを動くようにするし (ポインターの内部表現がどんな データ型でも同じマシンに限られる。そういう意味で 役に立つとはちょっといいにくいが)、この定義により、NULLをポインターの意味以外で 使う間違いを見つけることができるかもしれない(たとえばASCIIのナル文字(NUL)が 本当は必要な場合など。質問5.9参照)。

■_ わたし売ります

ベイスターズからフリーエージェント宣言していた門倉投手ですが、 まあジャイアンツに行き先は落ち着いたらしいと。 mixi のベイスターズコミュでは大いに盛り上がったようですが、 彼に対して厳しい味方をする人が多かったように感じます。

球団が決めた年俸の額に逆らっちゃいけないという決まりはないし、 プロ野球選手、それも投手の選手寿命なんて短いのだから 彼が年俸もっとくれと主張するのには何のケチもつけるつもりはない。

がしかし、彼が例えば(ジャイアンツが提示したという)年俸一億円の 働きをする選手かどうかと問われれば、「ないんじゃなかろうか」 と答えるでしょう。ただでさえベイスターズはフリーエージェント宣言した 選手の引き留めで痛い目見てて(斎藤隆とか鈴木尚典とか)、 赤字に苦しんでたりしてそうそう大盤振る舞いはできない事情もある。

まあジャイアンツが複数年(2年)、一年あたり一億という提示をしてくれた らしいので良かったね。と。

いかん、例によってオチなかった。

■_ リスト内包表記 → 内包リスト

Floating Log 10.12.2006

長くなりそうなので、先にまとめを言ってしまう:

「リスト内包表記」の代わりに「内包リスト」と言おう。 

Fe2+さんも訳語で悩んでるんですねえ。 RSSリーダーの調子が悪かったのか 八百万の神々には今まで気が付きませんでした。 ま、それはともかく。 いいんじゃないでしょうか、「内包リスト」 細かいこというと「ナニを内包しているので?」 という感想を持たないでもないのですが、 そういうこと云い出すとまた語が長くなってしまうので引っ込めます。 で、

結局「実践Python」は買わなかった。

わは。

■_ きょうのひとこと

言語の Windows 対応度

今日の結論 : Python は素晴らしい. 

ctypesはすごいよねー。ということで。

■_ 7021 != 7021

わかりやすく、かつ簡潔に書くのは難しい。

二進と十進の間

当然 (?) ながら、awk も同じ挙動ですね。

$ gawk 'BEGIN{printf("%d\n", 70.21*10000)}'
702099

私に説明できるだけの能力がないので、コレ以降のツッコミはしません。

斉藤さんに敬意を表してawk(gawk)を使って話を進めましょう。 まずは次のスクリプトを実行してみます。

BEGIN {
    spam = 70.21 * 10000
    egg  = 70.21 * 100
    ham  = 702100

    printf("%d:%d:%d\n", spam, egg, ham)
    if (spam == ham)
         print "spam equal ham"
    else
         print "spam not equal ham"
}

どんな結果になると思いますか? (正解を知りたい人は以下の塗りつぶし部分を選択して反転表示させて確認してください)

E:\work\script\awk>gawk -f moge.awk
702099:7020:702100
spam not equal ham

予想通りでしたか?

このような結果になった理由は、 第一に小数付きの数値を十進数→二進数に変換したときに発生する誤差、 第二に浮動小数点付きデータを特定の桁数に収めるために丸めたときに発生する誤差 の二つが挙げられます。

一般的に云ってコンピュータでは小数付きのデータを 浮動小数点数として格納し、扱います (→ 浮動小数点数 - Wikipedia)が、 今日広く使われている IEEE 754 という形式では、

2x × 1.yyy...

というように基数として2を使用して小数つきの数を表します。 したがって、どんな数値であっても二進数で表されるということです。 さてここで70.21という数値に注目してみましょう。 この数字を二進数で表すとどうなるでしょうか?

整数部に関しては話は簡単で、 70 =26 + 22 + 21 になります。 小数部はどうするかというと、 話は同じことで数直線上で見ると理解しやすいと思いますが 2-1, 2-2, 2-3の和で表します。 詳しい説明は省きますが、小数部に2を掛けてその答えが1を超えたら 対応するビットが1(さらに積から1を引いて計算を続行)、 そうでないならビットはゼロという操作を値がゼロになるまで続けることで 求めることができます。 さっそく0.21でやってみましょう。

0.21 × 2 → 0.42 … 0
0.42 × 2 → 0.84 … 0
0.84 × 2 → 1.68 … 1
0.68 × 2 → 1.36 … 1
0.36 × 2 → 0.72 … 0
0.72 × 2 → 1.44 … 0
0.44 × 2 → 0.88 … 0
0.88 × 2 → 1.76 … 1
0.76 × 2 → 0.52 … 0
0.52 × 2 → 1.04 … 1
0.04 × 2 → 0.08 … 0
0.08 × 2 → 0.16 … 0
0.16 × 2 → 0.32 … 0
0.32 × 2 → 0.64 … 0
0.64 × 2 → 1.28 … 1
0.28 × 2 → 0.56 … 0
0.56 × 2 → 1.12 … 0

終わる気配がありません。 人の手でやるのもバカらしいので、これもawkにやらせましょう。

BEGIN {
    val = 21     # 0.21 * 100 なぜ0.21そのままでやらないのかは宿題です :-)
    limit = 1000 # お好きな数字をどうぞ
    for (i=0; val != 0 && i<limit; i++) {
        val *= 2
        if (val >= 100) {
            printf "1"
            val -= 100
        }
        else {
            printf "0"
        }
    }

    if (val != 0)
        printf "...まだ続きます"
}

1000桁やっても止まりません。 IEEE754 の倍精度(awkやPHPで浮動小数点数を表すのに使われる型)では 52+1 ビット分しか最初の例で挙げた 1.yyy の部分を表すのに使うことができないので、 1000桁やっても止まらない 70.21 を 正確に表すことはできません

つまりここで誤差が発生するわけです。 awkではちょっと厳しいのでCの力を借りて、 どういう値で格納されたのか調べてみましょう。

#include <stdio.h>
#include <math.h>

char *tbl[] = {
    "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
    "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111",
};

int
main()
{
    double val = 70.21;
    double tval;
    char *p;
    int exponent;
    char mantissa[64] = {0};
    int i,j;

    p = (char *)&val;
    exponent = (p[7] & 0x7f) * 16 + ((p[6] >> 4) & 0xf) - 1023;

    strcpy(&mantissa[ 0], tbl[p[6]&0xf]);
    for (i=5, j=0; i>=0; i--) {
        strcpy(&mantissa[j+4], tbl[(p[i] >> 4)&0xf]);
        strcpy(&mantissa[j+8], tbl[p[i]&0xf]);
        j+=8;
    }

    printf("%5.2f = %c2^%d * 1.%s\n",
           val,
           (p[7] & 0x80) ? '-' : ' ',
           exponent, mantissa);

    for (tval=0, p=mantissa+strlen(mantissa); p>=mantissa; p--)
        tval = ((tval / 2) + (*p=='1' ? 1 : 0));

    tval = tval/2 + 1;
    tval *= pow(2, exponent);
    printf("%18.15f\n", tval);
    
    return 0;
}
//注意: 手抜きで0を特別扱いしていませんので使いまわしをするときは気をつけて
//バイトオーダーがビッグエンディアンのマシンでは正常動作しません
//実行結果
//70.21 =  2^6 * 1.0001100011010111000010100011110101110000101000111101
//70.209999999999994

やはり変換時に誤差が出ていますね。 gawk 'BEGIN{printf("%d\n", 70.21*10000)}' でprintfの対象になっている数値は実はこの 70.2099... に10000を乗じて それを整数化したものなのです。 つまり

これはPHPに限った問題ではないが、コンピュータ・プログラムは内部で2進数演算
しているため、 10進数の計算と比べると誤差が発生することがある。とくに、浮動
小数を整数化するときや、四捨五入をする際に問題になることが多い。

二進数で計算しているから誤差が出る、十進数で計算しているから誤差が出ない のではないのです。 誤差が出るような計算を行えば、二進でやろうが十進でやろうが はたまた十六進でやっても誤差は出ます

(これは今述べた誤差とは性質が違うものなので本当は同列に並べて話をしてはいけない)

む。BCMathとやらを調べる時間がなくなってしまった。 続く。 かもしれない。

■_ 今週のPerl 6

Pugs: Weekly Perl 6 mailing list summary for 3-9 December, 2006

特に目を引く話題はなし。 Synopsis にちょこちょこ手が入っているようだけど、 S05以外は追いかけている余裕がないので華麗にスルー。

■_ 明日書く(かも知れない)

Radium Software Development: Go TO Statement Considered Harmful

■_ マジっすか?

Mac OS Xの文字コード問題に関するメモ - リムネット(RIMNET)のメール・アドレスにUTF-8のメールが届かない件

以前、リムネットのアドレス宛のメール(charset=UTF-8)でおもしろい文字化け (やぎさん郵便(Apple Mail版))が見られた。そこで、検証のために再度UTF-8 のメールを送ったところ、これが届かない。charset=ISO-2022-JPのメールなら届く ので、おそらくサーバ側の迷惑メール・フィルタの類で弾かれているものと思われ る。文字化けメールを送ったので、迷惑メール・フィルタに何らかの形で「学習」 されてしまったのだろうか。

ん、でも自分で自分にUTF-8のメールを送ったことがあるけどそれは届いたような? まあ時期的に微妙だったかもしれない。 要チェック。

■_ 単なる仮説ですが

ところで、memset の第二引数って、何で int なんだろう。1 バイト = sizeof(char) = sizeof(unsiged char) の保証が無いから?

K&R時代のルールで、昇格ルールに従ってchar を渡そうとしても int に拡幅されて渡されるようになっていたからではないかと。 あと、ふつう(笑)のCPUだと int より小さい幅の数値をスタックに積むことが できないからというのもあるかな (int = 8bitなんて環境とか、6502 みたいなCPUは無視(笑))。 signed/unsigned で大きさが変わるというのはちょっと考えづらい。 世の中は広いのであるかもしれないけど。

2006年12月10日

それはC++の暗黒面(のひとつ)です

うわ、これでコンパイル・エラーになるのか。かんべんしてほしい。
(snip)
多重定義されているメンバ関数をオーバーライドするときは、多重定義されて
いるすべてのメンバ関数をオーバーライドしなければならない。

ってこと? ちょっとにわかには信じられない。これが事実だとしたら、メン
バ関数の多重定義はやるなっていってるのとおんなじじゃん。
  

これなんですが、

  When a usingdeclaration brings names from a base class into a derived class
scope, member functions in the derived class override and/or hide member
functions with the same name and parameter types in a base class (rather
than conflicting). 

ということで、同じ名前のものを再定義した時点で 同じ名前で引数が異なる(シグネチャが異なる)ものも隠してしまうという 仕様であるらしいです。 で、対処方法がないかというと実はあって、

@@ -16,6 +16,7 @@ public:
 
 class Derived : public Base {
 public:
+    using Base::getValue;
     Derived(int value) : Base(value) {}
     virtual ~Derived() {}
     virtual void getValue(int* out) { *out = value; }

これでコンパイルできるようになります。 もちろん実行もOK。

参考→ [cppll:6096] Re: メンバ関数をオーバーライドするとオーバーロードできない?

なぜこうなったかについては海より深い理由があるようです。 禿げストローストラップ先生の本に載ってたかなあ。 だとしても読んだのは昔なので完全に忘れていた。

追記:こーゆー↓のもみつかりました。

27.
派生クラスの仮想関数は、識別形式の異なる基底クラスの仮想関数を隠す、という
のはなぜですか。ほかのコンパイラの場合、このコードには何も問題がありません

C++ の規則では、多重定義はスコープ内でのみ認められ、スコープを超えるものは
認められません。基底クラスは、派生クラスのスコープを取り巻くスコープ内にあ
ると考えられます。そのため、派生クラス内で宣言された名前は、基底クラス内の
あらゆる関数を隠し、多重定義できません。この基本的な C++ 規則は、ARM より
も旧式です。

ほかのコンパイラが、何も異常を表示しないとしても、これにより損害を被ります。
なぜなら、コードは、期待するとおりには動作しないからです。サンのコンパイラは、
そのコードを受け付けるときに警告を表示します (コードは正当ですが、おそらく
望むとおりには動作しません)。

多重定義されたセットに基底クラス関数を含めたい場合は、基底クラス関数を現在
のスコープに入れるために手を加える必要があります。デフォルトの標準モードで
コンパイルを行なっている場合は、宣言の使用を追加できます。

class Base {
public:
        virtual int    foo(int);
        virtual double foo(double);
};

class Derived : public Base {
public:
        using Base::foo; // 多重定義セットに基底クラス関数を追加する
        virtual double foo(double); // 基底クラスバージョンを置き換える
};
  

オーバーロードされた関数のオーバーライド

前のエントリの続き。 前のエントリは朝方寝る前に、greenteaさんの怒りの書き込みを見つけてその勢いで書きました。 そのため odzさんと時間的にほぼかぶったようです。

Effective C++ 原著第3版 Effecive C++ に関連事項がありました(第33項)。 ちょっと長いので関係が特に深いと思われる部分だけ抜粋して引用します。

class Base {
private:
    int x;
public:
    virtual void mf1() = 0;
    virtual void mf1(int);
    virtual void mf2();
    void mf3();
    void mf3(double);
    ...
};

class Derived: public Base {
public:
    virtual void mf1();
    void mf3();
    void mf4();
    ...
};
  

たいていのC++プログラマは、このコードの振る舞いをはじめて見たときには、 驚くでしょう。スコープによる名前隠蔽のルールは上で述べた通りです。Base にあるmf1という名前の関数とmf3という名前の関数は、Derivedの中では、 Derivedのmf1とmf3によって隠蔽されてしまいます。そのため、Base::mf1 と Base::mf3は、オーバーロードされたものまで含めて、Derived には継承され ないのです。

Derived d;
int x;
...
d.mf1();   // 問題なし(Derived::mf1が呼び出される)
d.mf1(x);  // エラー!(Derived::mf1 が Base::mf1を隠蔽するため)
d.mf2();   // 問題なし(Base::mf2が呼び出される)
d.mf3();   // 問題なし(Base::mf3が呼び出される)
d.mf3(x);  // エラー!(Derived::mf3 が Base::mf3を隠蔽するため)
  

これでわかるように、基底クラスや派生クラスの関数の引数型が異なっていても、 名前の隠蔽は行われるのです。関数が、仮想関数であってもなくても同様です。
(中略)
このような振る舞いをするのは、ライブラリやアプリケーションフレームワーク などにある「遠いクラス」から派生クラスを作る際に、「オーバーロードされている 予想外の関数」を継承してしまうのを防ぐためです。 (後略)

覚えておくこと

  • 基底クラス内にある名前は、派生クラス内に同じ名前があると、隠蔽される。 public 継承ではそれは望ましくない。
  • 隠蔽された名前を可視にするには、using宣言か「仕事を送る関数」を使うとよい。

で、12月になってからところどころ permalinkがおかしいという指摘ですが、 自宅を含め数箇所で書いているのですけど同じエディタのマクロを使っていても そのマクロが参照しているデータが一箇所に集まっていないので、 更新し忘れたものがあったというのが理由です。 今、マクロを見直していますのでその辺のミスをなくせるようになると思います。

ここ(rimnet)にblog書くためのソフト入れればいいんでしょうけど、 Perlの 5.0.xしか使えないとかあるんでちと厳しいですね。 はてなは会社からは見えないとかあるんでちょっと敬遠(^^; (いやはてなだけじゃなくて、blogの有名どころは軒並みブロックされるのですが)

独自ドメインとってレンタルサーバー借りてごにょごにょというのも以前から考えてはいるのですが、 ちょっと腰が重いです。

二進と十進の間

んー「~の間」ってフレーズ好きだなぁ、わし。

PHPの演算誤差

つっこみいれてえ(笑)

まあ某 v とか K とかが名前の頭につく人みたいに、 頭っから「間違いです」って一言で切って捨てるようなことはしないけど、 このページ(と続きのページ)で書かれていることは 必要なことを説明しているように見えて実はしていない。 まあ誤差の話はそれだけで一冊本が書けてしまうくらい根が深く、 奥が深いものではあるのだけど。

演算にまつわる誤差の話は(所詮入門レベルのものとはいえ) わたしは大学の講義で叩き込まれたんだけど、 イマドキの、PGとか称されるプログラマさんはそういうの受ける機会がないのかな? 基本情報処理技術者レベルでもないのだろうか? シスアド…じゃあないだろうな。

有明まんがまつり

「最近はコミケも急激に電脳化」 PowerBuyer3[es]発売

PowerBuyer3[es]は、『移動中や仕事の合間での事前サークルチェック、 コミケ会場でのリアルタイムの情報確認、更新をスムーズに行うことを目指して いる』ものらしく、VGA(640*480)・QVGA(320*240)の各画面解像度へのネイティブ 対応・画面回転機能にも対応し、主な機能には『マップ表示』・『手書き入力機能』 ・『サークルカット表示』・『サークルカット情報表示』・『サークルチェック機能』 ・『検索機能』などがある。また今回のバージョンでの変更点は、『W-zero3[es]対応』、 『片手操作のインターフェースの整備』だそうで、『W-zero3 esのテンキーに対応し、 主要なほとんどの操作が片手で可能』とのこと。

へー。こんなものがあったのか。 電脳関係のサークルはどんなのが参加しているんだろうか。

本日の購入

評伝シャア・アズナブル 《赤い彗星》の軌跡 上巻 評伝シャア・アズナブル 《赤い彗星》の軌跡 下巻

表紙を見かけてノータイムで買ってしまったが、 落ち着いて中身を読んでみると、ちょーっと微妙だなあ。

2006年12月09日

ボーナス

某社でも金曜日に銀行口座に振り込まれますた。

最近流行っているらしいコラのシリーズに、「一部上場社員はボーナスが大体半年分
もらえて、平均年収が700万以上」といネタがあるけど、ぶっちゃけボーナスが6.0も
ある企業ってそんなに多くないよな。場合によってはボーナス無しの年棒制もあるし。

某社では、ワタクシが入社してから数年前まで一時期を除いて 3.2+3.2で6.4ヶ月分支給されていたのですが、 今はそれだけ(上回る人も含めて)もらっている人は少ないんじゃないかなあ。 会社自体の景気は良いのにねえ。

そのせいで、 「会社が儲かってるから(ボーナス)たくさんもらってるんでしょ?」 とか云われると結構つらいっす。

ワタクシが今現在どれだけもらっているかは 禁則事項でっす(笑)

サイヤ人

え、ひょっとして漏れも入ってる?

寺原クンいらっしゃい

スペランカー多村とのトレードでベイスターズにやってきた寺原ですが、

しかし、器用さがもたらす問題点もあった。自分の投球フォームをすぐに忘れてしまうのだ。
ソフトバンクには沢村賞右腕の斉藤和を始め、新垣、和田、杉内と好投手が身近にいる。
そのせいか、寺原の投球フォームが不思議とチーム内の投手に似てくることが入団後、2、
3年は見られた。和田と一緒に自主トレを行った後は、どことなく和田の左腕を包み隠す独特の
フォームに似てきたことも。昨季まで在籍した尾花投手コーチ(現巨人コーチ)が巡り巡って、
寺原に高校時代の投球フォーム写真を手渡したという話もあった。

 今年1年は、そんなことはなかった。どんな成績でもじっと耐えて、自分の信じた投球フォー
ムを貫いた。あとは自信回復と何かのきっかけだと思う。チーム名が変わる寺原だが、マウンド
に立って投げるという「投手」の仕事までは変わらない。まだまだ、やれる。投げるチャンスが
あるんだ。このまま、160キロを出せる才能を眠らせておくのはもったいない。今季、わずか
3勝に終わった寺原だが、ここ数年、味わった悔しさをマウンドにぶつけてほしい。

正直杉内とか新垣は無理にしてももう一人くらいつけてくれてもという 微妙なトレードだったけど、来たからには大いに期待するぞ(笑)

完全覇道マニュアル ~はじめてのマキャベリズム~

面白そうだ。 探して見つからなかったらAmazonでぽちっとなだな。

完全覇道マニュアル公式サイト
この画像が笑えます。

だって日本Rubyの会会員じゃないもん、わし(少なくとも今は)。

      さいとうさん Rubyの会のMLに入ってたんですか。
  
え~、だって、発言してるじゃん。(w

諸般の理由でRubyの会のMLに入っていない(会員でない)ので、 いくらさいとうさんが発言されていようがわたしの目に触れることはないのでいす(笑)

んー、 日本Rubyの忘年会2006も順調に参加者が集まってるなあ

ぐらころ

ごちそうさま。

モスバーガーのほうが好きなんだけど、明日で今年のグラコロは終わりということなので。

DVDの売り方

ITmedia News:アニメDVD熱い商戦 供給過多にあの手この手

特典で釣るってのもそう長いこと持たないような気がするけどねえ。 それに攻殻機動隊 SSSのDVDの売れ行きがいいのはおまけがいいからではないと思うよ。

といいつつも某アニメDVDの初回限定版にネットラジオの特別編CDがつくということで 買うかどうか悩んでしまっている俺ガイル。

どうするVista

ITmedia +D PC USER:“Vista待ち”のあなたは、大きな勘違いをしている (1/3)

ボーナスも出たし、サブノートでも欲しいなあとは思っているんだけど、 さてどうしたものやら。 UACと開発ツール(Visual Studio 2005とか)の相性が悪い(暴走とかするわけではないが)とも伝え聞くし。

2006年12月08日

■_ 今日のハマリ

VB/VBA では、Pascalなどと同じように Procedure/Function の明確な区別があります (VB/VBAでは Sub/Func ですが)。 で、

この規則がわからなくてコンパイルエラーになり、結構悩みました。 なんじゃいこの仕様は。

Mongoose

Matzにっき経由で スクリプト言語 mongoose (マングース)

正規表現
現在の所Windows版とlinux版で実装が違います。
これはひとえに GCC の wchar_t がダメダメな実装のためです。(L"あ"とか定義
できないのも困ったもんだ...すんげぇ不便だよー 泣)
現在の所は仕方なく、Windows版 → 日本語も扱えます。linux版 → 日本語は利用できません。
という実装になっています。これはいずれなんとかしたいと思います。
  

gccで L"ほげほげ"ができないのって、文字コード指定してないからじゃないかなあ? ソースも公開されているようなので見てみるか。

正規表現はWindows版だとBoostのやつを使っているのか。 Linux版で同じように使ってないのは何でだろう (こっちではICUのを使っているっぽい)?

セクター 0:0

スタートレックの世界を描いた銀河系地図 - GIGAZINE

セクター0:0(地図のど真ん中)が地球だなあ。

Write Great Code

ほげめも: Write Great Code Vol. 2 低いレベルで考え、高いレベルで書く

買ったものの実はまだ読んでいなかったりする。

このシリーズの次の本「Write Great Code Vol. 3 Engineering Software」は、
サブタイトルの示すとおりソフトウェア工学について、特に読みやすく保守
しやすいコードを書く手法を扱っているそうです。内容的には定番「達人プログ
ラマー—システム開発の職人から名匠への道」と同じカテゴリに属するのかもし
れません。現在まだ執筆中のようですが、きっと類書にはない特徴を持つ教科書
のような本に仕上がるでしょうから、今から楽しみにして待ちましょう。
  

まだ続きが出るのか。 現在執筆中ということは日本語版はまだまだ先ということね。

本日の購入

いろいろ。

まんがサイエンス 10 (10)
あさり よしとお
4056046263
けものとチャット 2 (2)
みずしな 孝之
4812465346
くーにゃんの実物をぜひ見てみたいものナリ。
OSM (オープンソースマガジン) 2007年 01月号 [雑誌]
B000L22V18
さいとうさん Rubyの会のMLに入ってたんですか。
十七歳の硫黄島
秋草 鶴次
4166605445
硫黄島からの手紙を観る前に
大市民日記 2巻 (2)
柳沢 きみお
4537105607

箱を開けるための鍵は鍵のかかった箱の中

ホワット・ア・ワンダフル・ワールド (この素晴らしき世界,等価変換な日々) 新エディタ Shiki を作る日記 (15)

前回,apt でインストールしようとしたら,(SBCL はネイティブスレッドを使ってる ?)
カーネルが古すぎて無理だよ ! とか言われたので,ソースからのインストールを試みる.

しかし,ここで問題が.Common Lisp の処理系をコンパイルするためには,Common Lisp
のネイティブコンパイラが要るのである !!

なるほど… では,SBCL をインストールするためには,SBCL のバイナリパッケージを
インストールする必要があるのか.あれれ,バイナリから入らなかったからソースから
入れようとしてるんじゃなかったっけ ???
  

ある言語を一番自然に記述できるのはその言語自身だったりするので、 まあそういうこともあるだろう(ghc(Haskell)も自分で自分を記述していなかったっけ?)。 でも他のCommon Lisp処理系でコンパイル可能というのなら、 まだ状況はいいほうじゃないかなあ。 完全にセルフコンパイルで、コードジェネレータを作る羽目になったりしたら…(笑)

ひでえ

痛いニュース(ノ∀`):【Xbox360】「カルドセプトサーガ」で、プログラマーがランダムなサイコロを作れなかったことが発覚

なんでソートにそんなに時間がかかる(笑)

ふぃぎあ

GA Graphic: 神様はちゅう学生♪ 「かみちゅ!」のドキドキゆりえちゃん ;美少女フィギュアコンベンション2006 INDEX

欲しいけどもう置く場所がNEEEE!

2006年12月07日

Is mem_fun1 obsolete?

んと、わたしはVC++ 7.1 と g++ 3.4.4 で試したんですが、 どちらもmem_fun ではエラーになってしまったので mem_fun1を使いました。 参考にしたSTL本の奥付を見ると初版が1999年だったりしたので、 今日では obsoleteになってしまっているというのはあるかもしれません。

mem_fun1 obsolete あたりでぐぐってみたところ、 直接の記述は見つからなかったのですが HippoDraw: MSconfig.h File Reference

#define 	MEMFUN1_DEFECT   1
 	Define if mem_fun doesn't always work when used to call member
        with one argument and the obsolete mem_fun1 must be used. 

というのが見つかりました。どうも確かに obsoleteっぽいですね。 さすが万年入門者だ > 自分
今週末にでももっと新しいSTL本をチェックするとします。

話は外れますが、Yahoo知恵袋とかの回答のプログラム中で 文字列→整数(浮動小数点数)変換に atoi/atof を使っているの見ると 「stoltol/strtol 使わんかいゴルァ」 と突っ込みを入れたくなります。 エラーも検出できるし、 ポインタがどこまで進んだかの情報も得られるのでこっちのがいいと思うんですが。 あ、これはC++じゃなくてCの話です。

■_ Binary 2.0 カンファレンス

というわけで、今年も Binary 2.0 カンファレンスを昨年に続き開催したいと思います。12月15日の夜という日程は決まっていますが、詳細はまだ未定です。ご期待ください。

げーん、12月15日って職場の忘年会の日ぢゃん。 無念…

ドタキャンするか?(笑)

■_ あとでよむ

Bjarne Stroustrup が見る、現在のソフトウェアの問題 - An Agile Way [ITmedia オルタナティブ・ブログ]

原文の方も忘れずに。

■_ Perl から pcreを使う

Yves / re-engine-PCRE-0.08 - search.cpan.org

なぜこういうものを作ったのか意図が良くわからないが、とりあえずあとで見る。

ついでに CGI::Application::Plugin::DebugMessage - show the debug message - search.cpan.orgもメモっておく。

■_

var/タワゴト (2006-12-06): ypcat [websys] KENT-WEBと日本のcgi黎明期 より

    この主張は誤っている。プログラムの使用を制限しないことによって、人類が
プログラムから得られる富の量を減らしてしまう場合がある。例を示そう。TeXとviだ。 
--中里一日記 GNU宣言
    UNIX と C ってのは,やっぱり最悪のコンピュータウィルスだな.この 
2 老害のせいで,計算機科学の発達は 20 年遅れた.こいつらのバッドノウハウに
そそぎこまれた,莫大な量の不毛なマンパワーが,もしもっと他のことに正しく向
けられていたら…  
--新エディタ Shiki を作る日記
それにぜひKENT-WEBとealis、そしてperlを加えてください。

フリーなボログラムは恐ろしい。無料の三流ソフトに賞味期限が付いていないのは、
なんと恐ろしいことか。perl5はperl4をある程度巻き取った上で眠りに入り、ruby,
pythonといった後進に道を譲るすべきだった。しかしperlは、perl6として生きながらえ、
世の中の富を減らさんとしている。

んー Perl 6に対してちょっと辛目の評じゃないかなあという気はします。 まあ実物(Pugsはおいといて)が未だ存在していない以上、 なんとも云えないですが。

そして、最近やっぱりPHPにも同じ事を感じている。PHP5でオブジェクト指向言語に
なったらしいけど、ラッパー被せただけでちゃんとしたOOじゃない。@stat()と記述
しても、warnレベルのエラーの放出を止められない。@@stat()とか書いたらwarn止
めて例外飛ばすようにしてくれないかなぁ。。PHP4の後方互換あるからダメか。
Zendさん、ぜひPHP6は作らないでさいね。。

5.2.0で派手なメモリーリークを起こすとか聞き及びましたがどうなんでしょうか (いやOO以前の問題ということで)。

■_ Excel VBA

どうしたものかと思案していたら、ひかりが射してきますた。 Excel VBAは連想配列(ハッシュ)を備えていて、 oDictUse.Item(user) = oDictUse.Item(user) + count のようにちょっと記法がナニではありますが、一応役目は果たしてくれます。 あ、使う前に Set oDictUse = CreateObject("Scripting.Dictionary") のようなオマジナイが必要です。 どうも、この、単純な代入とオブジェクトのときのSetとの使い分けが すっきりこないんだよなあ。

Scripting.Dictionary オブジェクトのプロパティには、 Keys (登録されているキーを配列に得る)とか Count (登録されているキーの数) なんかがあります。

もうひとつ。 CreateObject("VBScript.RegExp") というステキな呪文を唱えることによって、正規表現オブジェクトを得ることができます。 VBScriptで使えるものはすべて使えるので、 Perlで使えるようなものはほぼ使えるものかと (こんな感じ (\S+@\S+)\s+\((\d+)\s+licenses\))。

■_ぽすぐれ 8.2

PostgreSQL 8.2リリース - 200以上の新機能と改良点 (MYCOMジャーナル) あとでチェック。 xgawkでリンクできるのを試さないと。

■_ いいアジャイルと悪いアジャイル

僻地のプログラマkmt-tの日記 - 今日も風邪引いています 経由で いいアジャイルと悪いアジャイル

あとでかく。 かも知れず。

2006年12月06日

for_eachの第三引数にメンバー関数を渡す

バカが征くより

for_eachへの関数ポインタ引数っていうのは、メンバ
関数ならstaticじゃなきゃダメってこと?
  

ちょっと関数オブジェクトを使ってごにょごにょする必要があるみたいです。 とりあえずコンパイル&実行はできましたが、 結局外側で作ったインスタンスが一つ必要なのが納得いかない。 Boostだともっとすっきりできたりするのだろうか? わたしは万年STL入門者なので、 親切なC++スーパーハカーがきれいに解いてくれることを期待。

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

class Foo {
public:
    void doit(vector<int>& vec) {
        for_each(vec.begin(), vec.end(), printi);
    }

    bool show(int i) {
        cout << i << endl;
        return true;
    }
    static void printi(int i) {
        cout << i << endl;
    }
};

int
main()
{
    vector<int> vec;
    vec.push_back(0);
    vec.push_back(1);
    vec.push_back(2);

    Foo foo;
    foo.doit(vec);

    for_each(vec.begin(), vec.end(),
             bind1st(mem_fun1(&Foo::show), &foo));
    
    return 0;
}
0
1
2
0
1
2

■_ これだからASCIIで間に合ってしまう人たちは…

memcmpの挙動がreleaseとdebugで異なる - MSDNフォーラム

/clr:pureを指定したプロジェクトにおいて以下のコードを実行した結果が

リリースビルドとデバッグビルドで異なります。

typedef unsigned char u8;

u8 buf0[] = { 0x7F };

u8 buf1[] = { 0x80 };

int test = memcmp( buf0, buf1,1 );

Debug::WriteLine( test.ToString() );

//debug: -1

//release: 1

どちらが正しいのでしょう?

ILを覗いて調べてみました:
(略)
-----release -----
public static unsafe void doit() {
  int num5;
  $ArrayType$$$BY00E e$$$bye1;
  $ArrayType$$$BY00E e$$$bye2;
  *((sbyte*) &e$$$bye2) = 0x7f;
  *((sbyte*) &e$$$bye1) = 0x80;
  uint num4 = 1;
  $ArrayType$$$BY00E* e$$$byePtr2 = &e$$$bye1;
  $ArrayType$$$BY00E* e$$$byePtr1 = &e$$$bye2;
  int num3 = 0;

  sbyte num2 = 0x7f;
  sbyte num1 = -128;
  do  {
    if (num2 > num1)  { //

昔のCコンパイラのライブラリでも同じような問題があったような記憶が。 K&Rの時代ならいざ知らず、21世紀の今となっては signed char なんて 百害あって一利なしの代物ではなかろうか?

■_ 日本Rubyの忘年会

日本Rubyの忘年会2006 Wiki - FrontPage

日曜の夜か、どうしようかな… とか考えているととっとと埋まってしまうに違いない。

■_ どこまでライブラリで

ライブラリで言語はリッチになりません

どこで見たのか覚えてない(mixiだったかなあ?)のだけど、 The Great Quux (よーするに Guy L. Steel Jr.)が なにをどこまでどのようにライブラリで提供するのが良いのか とかに言及してたような記憶があります。

ちょっと探してみやう。

■_ 比較の話

Note - 晴

unsignedとsignedの比較は、どっちに合わせられるのが規格上正しいんでしょうか。

両方ともをよりビット幅の大きい型に直してから比較するのは勿体無いので無しとしても、
unsigned_var > -1がunsigned_var > 0xffffになったりするのは悪夢ですのでsignedで
比較する方が安全と思うのですが、unsignedでの比較になるコンパイラもあるんですよねぇ。

勿論、警告出してくれたら一番嬉しいのですけど。

なにやらgccでもunsignedの比較になるのが怖いんですけど。

C++Builderでも警告は出たものの結果は符号無しの比較に……そういう規格なのか!?

K&R時代とANSI/ISO以後とで変わっているはずだけど、 とりあえず現状はこんなとこのはず。

  1. 両方のオペランドが同じ型である場合、型変換は行われない。
  2. そうでない場合、両方のオペランドが符号付き整数型をもつ、 または両方のオペランドが符号無し整数型をもつならば、 整数変換順位の低い方の型を、高いほうの方に変換する。
  3. そうでない場合、符号無し整数型をもつオペランドが、 他方の整数型オペランドの変換順位よりも高い又は等しい変換順位をもつならば、 符号付き整数型をもつオペランドを、符号無し整数型を持つオペランドの型に変換する。
  4. そうでない場合、符号付き整数型をもつオペランドの型が、 符号無し整数型をもつオペランドの型のすべての値を表現できるならば、 符号無し整数型をもつオペランドを、符号付き整数型を持つオペランドの型に変換する。
  5. そうでない場合、両方のオペランドを、 符号付き整数型をもつオペランドの型に対応する符号無し整数型に変換する。

出典: JIS X3010 6.3.1.8

つまり、同じ幅(int と unsigned intとか、char と unsigned char)だったら 無符号になると。

■_多分買う

ニンテンドーDS用の英語トレーニングソフト発売 - 語学のアルクと共同開発 (MYCOMジャーナル)

初級用から入るかどうかは未定。

■_ 本日の購入

TVアニメ「涼宮ハルヒの憂鬱」キャラクターソングVol.4 鶴屋さん
TVアニメ「涼宮ハルヒの憂鬱」キャラクターソングVol.4 鶴屋さん

TVアニメ「涼宮ハルヒの憂鬱」キャラクターソングVol.5 朝倉涼子
TVアニメ「涼宮ハルヒの憂鬱」キャラクターソングVol.5 朝倉涼子

ゆめのばとん(DVD付)
ゆめのばとん(DVD付)

さいごのろっく(DVD付)
さいごのろっく(DVD付)

孫子の兵法〈5〉栄光の果てに
孫子の兵法〈5〉栄光の果てに

2006年12月05日

今日の日めくり: 過ちは改むるに憚ることなかれ

■_ MPFR 2.2.1

何の気なしに MPFRのページ を見に行ったら実にいいタイミング(11/29付け)で2.2.0→2.2.1へ アップデートされていた。 んーと、どうやってビルドしたんだっけ?(^^;

A Native GMP Port Using Microsoft Visual Studio にあるのは Visual Sudio 2005用なんだよな。 アセンブラもYASMを使うし(nasmしか入れてない)。

■_ S○larisのawkは腐っている

bug-gnu-utilsに投稿されたメールによるとSolarisのawk(nawkでもxpg4/awkでもない 奴ね)、

  1. if (index in array)が使えない (for (index in array)は使用可能)
  2. FSに正規表現を与えることができない(先頭の文字のみが採用される)
  3. $0を書き換えることができない
  4. next がない?

■_ 売り言葉に買い言葉

Script Languages

気持ちはわからないでもないけどツッコミどころがあちらこちらに…

■_ むずがゆいこの感じをナントカしてくれ

『Java言語で学ぶリファクタリング入門』

恐れ多くも結城さんにケチをつける気は毛頭ないんですが、 「Java言語」 という表記はどこかからの要請だったりするのでしょうか? Cなら一文字しかなくて寂しいから(笑)という理由が考えられなくもありませんが、 なーんかJavaにまで「言語」ってつけちゃうと収まりが悪いような気がするんですが。

こんなこと考えるのは漏れだけ?

(タイトルに)ケチをつけつつも買いますよ、多分(笑)

■_ ネットの片隅でぼそりと独り言を云ってみる

MSN相談箱 CGI(perl)での一部日本語の文字化けについて

perlでCGIを作成しています。jcode.plを使っているのですが、
表示される日本の一部だけが文字化けしてしまいます。
何が原因なのでしょうか。
解決方法について教えてください。

◆perl文中の記述
”登録申請を行ってください。”
 ↓
◆ブラウザ上の出力結果
”登録瑞ソを行ってください。”

参考:jcode.pl,v 2.6 1997/12/24 17:01:11
基本的にPerlで日本語を使うときはEUCにするべきです。

もうUTF-8にしようよ…

多村トレードでホークスへ

Rubyistのページを巡回していて、 xe-kdoo で 多村←→寺原のトレード成立のニュースを知る。

マジっすか?(笑) mixiのベイスターズコミュでは最低杉内とかいう声が上がってますが (ほかにも新垣とか、そりゃ無理だろう)、 まあ寺原との一対一というのは意外といえば意外。 大矢の意向なのかなあ? 日本の球団のこういうのって良くも悪くも監督の意向が色濃く反映されるようだし。

両選手の活躍を祈ります。 古木ぃー、奮起せいよ!

2006年12月04日

■_ 続・続 dereferece

Fe2+さんからの反応

脱構築 deconstruction に倣って「脱参照」とか。あれ? 英語じゃなくてフランス語か? 
まあいいや。

あと、「手繰る」「辿る」という解説だけど、個人的には「外す」という感じかな、と。
うまく訳語をひねり出せないんだけど。 

あのときの例ではだしませんでしたが、 「外す」(参照のレベルを浅くする)というのは考えたことがあります。 まあどっちにしてもしっくり来る日本語が出てこなかったというのには 変わりないのですが。

■_似非Pythonistaの迷い

今日も odz さんとの交換日記が成立してしまった(笑)

えー、Pythonの仕様がおかしいとか変だとかいうつもりは毛頭ありません。 ただ

irb(main):001:0> true
=> true
irb(main):002:0> false
=> false
irb(main):003:0> false=true
SyntaxError: compile error
(irb):3: Can't assign to false
false=true
      ^
        from (irb):3:in `Kernel#binding'
irb(main):004:0> false.class
=> FalseClass
irb(main):005:0>

自分としては true(True)/false(False) のようなもののイメージはこの Rubyのものがしっくりきていて、また、Pythonで 昨日の例のような書き換えが現在はできるけれどもいずれできなくなるようなことを どこかで聞いたような覚えがあったので、2.5で確認してみたらそうでなかったので ちょっとびっくりしたと。そういうわけです。 ですので

というか、真偽値評価でいうところの False ってのは __builtins__.False に
束縛されているオブジェクトって意味ではないでしょう。内部では内部的な値の 
False オブジェクトと同一(same)かどうか見ているだけでは。

まぁ、そもそも False やら True のやらの組み込みオブジェクトを上書きしたり
しないですけど。

という事情は納得です。 True/FalseをいじくるのはPerlで $[ (配列の添え字の下限)をいじるようなもんですね (これもPerl 5になった時点で deprecated ですが)。

■_ Google API

Japan.internet.com Webテクノロジー - Google、表計算ツールの API を公開

なんか面白いことできないかなあ。 と思案してみる。

■_ 今週のPerl 6

Pugs: Weekly Perl 6 mailing list summary for 26 November - 3 December, 2006

... On the sixth day of Christmas my true love sent to me,
Six versions of Perl,
FIVE LANGUAGES COMPILING!
Four bytes of bytecode,
Three POST nodes,
Two ASTs,
And a Partridge with a parse tree."

-- Jonathan Worthington, 'Naming PAST-pm compiler tool chain'

何かのパロディなのかもしれないが、どこが面白いのか良くわからにゃい。

■_Yet another Perl 本

bakelattaの日記 - 何でPerl本はこうなんだ

Perl 5.8で動作確認済みということだが、use strict とか use warnings とかはない
(#!/usr/bin/perl -w はしてる)。CPANモジュールの使い方の説明は後半にあった
(CGI::Sessionとか)。日本語処理については華麗にスルーしているっぽい。
myやlocalについての説明はあるが、その他のサンプルコードではmyは使っていない。
openの引数は2つ。

なんで2006年の12月にもなってPerl本ってこうなんだろう。KENT本の場合は、KENT神が
書いたということや、@niftyみたいにuse strictすら使えないサーバのことも考慮している
という点もあるのかもしれないけれど、この本の場合、CGIに特化した本というわけでも
なさそうだし。

この本は先週末あたりに見かけたので買おうかどうしようかと思いつつ ぱらぱらと眺めていたら上記のような状況だったのでスルーすることに。 現状のPerlにおける日本語処理というのはきちんと書いておかないと いけないと思うのだけど、事情がわかっている人は何らかの理由(本業が忙しいとか) で書けず、書ける余裕のある人は事情がわかってないということなんでしょうか。 あー 結城さんの本はどうだったっけ?

■_ 今日のヲチ

C言語でprintf関数を作成したいのですがまずどうすればいいでしょうか?

位置指定 (%$1d みたいなやつ)まで含めた仕様を求めていたりするととっても大変なので、 まずは要求するレベルを明確にすることだと思うな。 あ、あとなんでそんなことをしたいのか(しなければならないのか)の理由か。

2006年12月03日

真と偽と

あれ? 2.5では変わったのではなかったっけ?

Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> False
False
>>> type(False)
<type 'bool'>
>>> if False:
...     print "True?"
...
>>>
>>> False=True
>>> False
True
>>> if False:
...     print "True!"
...
True!
>>>

おしえてえらいひと。

RubyKaigi2007

ML(ruby-list)に2007年のRubyKaigiに関してのメールが流された。

さらに、2007 年はまつもと ゆきひろさんに加え、Dave Thomas 氏をゲストとして 招待することを決定いたしました。 Dave Thomas 氏は、日本でも『達人プログラマー』 などの著作で知られていますが、まだ海外では知る人ぞ知る言語だった Ruby を多く の人に知らせるきっかけにもなった『プログラミング Ruby』の執筆を行うなど、 Ruby の世界的な普及のきっかけとなった方です。そして現在でも、『Agile Web Development with Rails 2nd edition』を 2006 年 12 月に発表するなど、Ruby 界を 牽引する第一人者と言えます。その Dave 氏の初来日になります。

おお、大物が来日。 早速オープンされたサイトはこちら→ 日本Rubyカンファレンス2007 - トップページ

父親たちの星条旗

観た。 作品の性格なのか、ちょっと年配の方が目立ったような印象があった。 いわゆる「戦争映画」というよりは、戦争のあとに話のポイントがある映画だと思う。 画の分量的には先頭シーンのほうが多い気がするけれども。

日本人でも、その写真を見れば「ああこれは見たことがある」と答える人は 少なからずいるであろう有名な、擂鉢山に星条旗を立てる海兵隊員たちの写真。 わたしは今まであの写真は戦闘の真っ最中の場面だと思っていたのですが、 違ったんですね。不勉強でした。そして組織のえらいさんの在りようは 洋の東西を問わないと。

本編終了後にペアとなるもう一本の「硫黄島からの手紙」の予告編を上映するという 珍しいスタイル。でも先にやるよりはよかったような気がする。

2006年12月02日

訳語

odz buffer - deference

えーと、とりあえず演算子における reference と dereference は動詞としての
用法では。ちょっと自信ないですけど。

いや、そういう問題でなくて、対応する良い日本語がないという話なんですが、
アドレスとかポインタとかインクリメントとかデクリメントとかキャストとか
言ってんですから別にカタカナのデリファレンスでいいんじゃないですかね。駄目?
  

あ、すみません。動詞/名詞はそうですね。 日本語の場合名詞の動詞化(っていうの?)が簡単なんでごっちゃにして話を進めてしまいました。

デリファレンスがダメというわけではないのですが、 reference が日本語にできるのにもう片方がそうでないのはバランスが悪くないか とか考えてのことです。 私は金とって文章書いているわけじゃないのでまだ気楽な部分はあるのですが、 こういった用語を直接カタカタ書きすると 「やたらと横文字増やすな。わからん」とかいう文句があったりするわけですよ。 でもがんばって日本語で単語を作り出しても、The Art Of Prpgramming の前の訳書 みたいに「却ってわからん」とか云われたりするわけで、悩ましいところではあるのですが。

話は外れますが、正規表現に back reference ってありますよね? あの訳語が「後方参照」だったり「前方参照」だったり 人によって違ったりするのですが(でも「後方参照」のほうが多数派?)、 JIS でback reference を含む規格が訳されたとき、 一体どんな訳にしたのだろうと期待しつつ中身を見たら 「バック参照」となっていました。見て脱力しました。はい。

よつばと展

よつばと!展

■よつばと!展
主催=よつばスタジオ  企画協力=GoFa(Gallery of Fantastic art)
会場=GoFa(東京都渋谷区神宮前5-52-2青山オーバルビル2F左ウイング)
会期=2006年12月2日(土)~12月17日(日) 営業時間=11時~18時(会期中毎日)
入場料=500円(カフェチケット付き)
  

サイン会のための整理券は瞬殺だったらしい。 結構人出があったようなのでちょっと様子見よう (でもそんなに長くやっているわけでもない)。

「資格」試験じゃないだろう(少なくとも今のところは)

 ソフトウェア開発技術者の資格をとろうと思っています。
Wikipediaで調べたら「試験のレベルは基本情報技術者試験より
かなり難しい」って書いてたんですけどネットで午前の試験を
ちらっと見たら基本情報とかぶってる部分が多くてそんなにむづ
かしそうに見えなかたんですけど本当にむづかしいんですか?
仕事が忙しいので一日2時間くらいしか勉強できないんですが
それだったら資格を取得するのにどのくらい時間かかると思いますか?
  

本当に「資格試験」化するとか、有効期間を設けるかもしれないとかで ./J でトピックがたったけど、少なくとも現状では 情報処理技術者試験は「資格試験」ではない。 なんかしらんが、資格試験扱いする人をよく見かけるけど。

会社によっては手当てとか合格時に一時金が出るとかあるみたいだけど、 某社ではそのての優遇措置はまったくありましぇん。

特に深い意味はありません

確かにイチローは年間最多安打記録を更新したり、そのシーズンの最多安打打者 だったりするくらいなので打撃技術には長けているでしょう。 でも、四死球やエラーによる出塁を含めた 出塁率を見ると、その安打数の割には決して高いものではありません。 むしろ一番打者としては物足りないくらいです。

でなにが云いたいかというと…あーやめやめ。 結論は察してください(笑)

メンバーへのポインター (C++)

確かにめったに使うものではないかもしれませんね。 わたしも知識としては知っていましたが、 実際使ったのは5回以内で収まると思います。 まあC++でどれほどプログラムを書いているのだ、おまいは? という問題があるのであまり信頼できる数字ではありませんが。

メンバーへのポインタといえば、 メンバー関数のポインタをコールバック関数に登録しようとして はまるというのは割とよく見ますね。 この場合 .* を使ってアドレスとっても使えなかったりする (コールバック関数から呼び出せない)わけで。

2006年12月01日

■_ #!

Hena Hena Nikki ~悔い倒れの日々~(2006-11-30)

* [computer] Linux 上でのシェバングの挙動が BSD 系 OS のそれと違う

ZnZ さんの日記によると、 kernel レベルの処理で、シェバングの引数の分割結果が異なるらしい。 
…これ、今日はまりました。某 Ruby スクリプトが大学の計算機で動かなかった。 ;-(

今回は -K を指定したかっただけなので、組み込みのグローバル変数 $KCODE いじれば問題なし。
と、後で気付いたわけで…。失敗失敗。

比較的新しい FreeBSD と古い FreeBSD ではシェバングの処理が異なることを、 yoichi さんに
“#いーまくせん”で教えてもらった (少し古い情報と一緒に)。ああ、Mac OS X 環境が特殊って
考えた方が良いのでしょうか…。 

んー、デフォルトで、使えるのは「インタプリタ名 + 引数一つ」 と覚えていたわたしは古い 人間なのでしょうか。複数の引数を渡そうとして記述してもどう動くかは環境次第で 「使えたらラッキー」程度のものだと (使おうとするならあらかじめ調べるべきであり、複数の環境で動くことを養成されるような ものなら使うべきではない)。

規格的にどーなのよ? と思い調べてみたけど、どうも明確には決まっていないっぽい。 exec(2) とかを見ると

 An interpreter file begins with a line of the form

          #! pathname [arg]

     where pathname is the path of the interpreter, and arg is an
     optional argument. When an interpreter file is executed, the
     system  invokes  the  specified  interpreter.  The  pathname
     specified  in  the interpreter file is passed as arg0 to the
     interpreter. If arg was specified in the  interpreter  file,
     it is passed as arg1 to the interpreter. The remaining argu-
     ments to the interpreter are arg0 through argn of the origi-
     nally  exec'd  file.  The interpreter named by pathname must
     not be an interpreter file.

arg と単数形なんでやっぱ一つだけと見たほうがいいのだろうか? The remaining argumens to the interpreter are arg0 through argn... の部分はよく意味が取れなかった。 Bug in #! processing - One More Timeからの一連のスレッドとか Re: #!/bin/sh & execve'#!'-magic, details about the shebang mechanism を見るとけっこう違いがあるものだということがわかる。

■_

Javaの台頭で、先細るVisual Basic利用 - 米最新プログラミング事情 (MYCOMジャーナル)航海日誌(2006-12-01)

今後は,Python/Ruby系統が微増し,PHPもちょっと増え(そして減る),JavaScriptもAjax
コンテンツの増加で増える.

そして少しずつ他言語にばらけてくるために,Javaの利用率が減るのは確実で,1位を君臨
しつづけられないと思われる.

概ね賛成なんですが、Javaに取って代わって一位になるようなものってあるんでしょうか? これっというものが思い浮かばないのですが… いやまあ例によってわたしの不勉強というのは大いにありうるわけですが。

■_ 参照と被参照の間

odz buffer - type declaration とか cast とか

本題でないところなんですが (本題についてはまったく同意ですので取り立てて書くこともない)。

    Cに関しては、特に強かった呪縛は->演算子。そしてなぜこれが呪縛になったかというと、
    単項(unary)の*、すなわちポインター参照が前置だったから。
    404 Blog Not Found:電脳言語における祖先の呪い--演算子篇
単項の * は dereference。reference は &。

dereference を日本語にしようとすると悩みませんか? referece は「参照」で固まっちゃってますが、dereferece を日本語の名詞で表そうとすると ぴったり来るものがないと思うのですが。

イメージ的には、「参照(先)を手繰る(or 辿る)」といったものなんですが、 これは名詞じゃないし、「参照解決」というのもなんか変。

とまあこのネタは何度か書いてはいるのですが。 さんざん悩んだ挙句、カタカナ書きで「デリファレンス」にしてしまった自分はちからよえー。

■_ あとで読む

GPLv3 - Transcript of Richard Stallman from the fifth international GPLv3 conference, Tokyo, Japan; 2006-11-21

が、ざっと見て目に付いたところ

Q3: When using GPL version 3, should we still write a copyright notice?
Richard Stallman: Yes, when you release Free Software, it's normally copyrighted, 
and therefore you should put a copyright notice on it, and then underneath the 
copyright notice you put a licence notice which says "You are permitted to use 
this material under the following licence". That's true for GPL version 2, and 
it's true for GPL version 3, and it's true for all the other Free Software licences. 

ふむ。copyrightの表記はしておけと。

■_ メモ (Python, WSGI)

■_ Niklaus Wirth

ここで書いたのか別のところなのか覚えていないのだけど (検索してみろって >じぶん)、 「Oberon 以後のヴィルトは言語のデザインをしていないのか?」 ということに関して情報を見つけた。 なんでも、Oberonの開発後はFPGAを使った研究に携わり、 その後1999年に引退したとのこと。

■_ 今日の購入

Write Great Code Vol.2 (2)
Write Great Code Vol.2 (2)

深く静かに潜行…
実践Python~文字列操作からWebアプリケーション開発まで
実践Python~文字列操作からWebアプリケーション開発まで

はじPy (初めてのPython) みんPy (みんなのPython)ときてこれは?
はやぶさ―不死身の探査機と宇宙研の物語
はやぶさ―不死身の探査機と宇宙研の物語


次の月へ 2007年1月
前の月へ 2006年11月
一覧

ホームへ


Copyright (C) 2006 KIMURA Koichi (木村浩一)
この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp