Home

日記
re:ちはるの多次元尺度構成法(日記)「今日は何文字書いた」Edit

自分を励ますために、今日は何文字書いて、全体では何文字まで進んだ、というのを記録している。手で文字数を数えているわけではなくて(そりゃそうだ)、コマンド-iと打てばすぐに全体で何文字と表示されるので、それをメモしている。

(中略)

というわけで、原稿が進もうが、マイナスになろうが、それを記録することで原稿が進むということはあると思う。ゼロの状態が続いているということは、その仕事から逃げているということだ。

更新履歴記録機能が充実したエディタもしくはバックアップツールを作ろうかと思っているんだけど、更新文字数履歴が簡単に表示できるような機能も用意しておくと、上記のような効果が期待できるかもしれないなー。

Published At2002-04-17 00:00Updated At2002-04-17 00:00

日記
席替えEdit

昨日は唐突に会社の席替えがあった。てっきり今回は俺は動かないかと思って全然整理していなかったにも関わらず、まあなんとか半日で移動は済んだ。単に背後の席に移動しただけなんで距離は近いんだけど、結局全部のマシンの配線から何からやり直すわけだから、気分的には完全な引っ越し作業。おかげでじゃまなものを一通り整理できて、机の上が広くなった。しかも、机の脇に特に使うあてのない半畳ほどのデッドスペースができた。せっかくだからここに小さなちゃぶ台でも置いて、のんびり過ごす空間を作ろうかな。ひとまず電気ポットとコーヒーセットを設置してみた。

Published At2002-04-17 00:00Updated At2002-04-17 00:00

日記
「“無料音楽”の急増により世界の音楽商品売上が5%減〜IFPI調査」Edit

一方、ドイツでは、1万人のユーザーのうち18%が、音楽をCD-Rに違法コピーしたと回答。米国では、音楽をダウンロードしたユーザーの70%がCD-Rに書き込んだと答え、1カ月に20曲以上ダウンロードしたユーザーの35%が音楽の購入を減らしたと答えている。

単に、ユーザーが標準的に使うメディアが、カセットテープとかMDとかから、CD-Rに移行しただけなんじゃないの? 前までは友達とかレンタル屋からCDを借りてカセットテープとかMDとかにダビングしていたのが、CD-Rにダビングするようになっただけなんじゃないか? もともと違法コピーされていた分が別のメディア(CD-Rもしくはハードディスク)に違法コピーされるようになった、というのを上記のようにねじ曲げて(あるいはその可能性に気づかずに)発表しているような気がする。

Published At2002-04-17 00:00Updated At2002-04-17 00:00

日記
.NETのクラス構造はわかりにくいなーEdit

VB.NETをいろいろ(主にwebアプリケーションフレームワークよりを)いじっている。まだ用語(キーワード)に慣れないけど、基本的な言語仕様はかなり素性がよさそうな気は十分する(かつてのVBScriptに比べれば)。従来のVB(RADツール)的な考え方をwebにまで対応させるというやり方は、過去ブラウザ互換性という点では怪しげだけど、最近の高機能ブラウザをメインターゲットにした場合は、かなり有効そうだ。ただどうも(VB).NETってクラス構造がめちゃめちゃわかりにくいな。標準のヘルプドキュメントのできが悪いだけかもしれないと思いつつも、もしかしたらまともなクラス階層を持っていないんじゃないかという気もしてきた。調べてみても、名前空間ごとの(=単に機能単位で分類した)クラス一覧はあっても、きちんとしたクラス階層図が見あたらないし。webアプリケーションフレームワーク上に自前のクラスを追加して連携させようとすると、単体とか一対一の連携ではそれなりに動いても、webアプリケーション全体になじませようとすると、うまく連携できなくなったりする。必要なプロパティが記述場所によって微妙に見えたり見えなかったりとか。.NETで標準的に与えられたフレームワーク内でクラスをカスタマイズする使い方ならば、そこそこ使いやすそうだけど、フレームワーク自体を拡張したりするような使い方は考えられていないのかな? webフォーム(を拡張した)ユーザーテンプレートをつかい回すようなインターフェースも(VisualStudio .NET上には)用意されていないっぽいし。そんなの最近の(オブジェクト指向言語用の)IDEでは標準的な機能じゃないのか。

Published At2002-04-20 00:00Updated At2002-04-20 00:00

日記
イチゴ狩り後爆睡Edit

土曜日はオクサンの会社のイベントで秩父の方までイチゴ狩りに行ってきた。ムスコが思いのほか暴れないでくれたので、予想よりもずいぶん楽に過ごせた。しかしオクサンともども最近慢性的に寝不足気味だったこと+往復の道中で渋滞した(運転は往きはオクサン、帰りは俺)こともあって、夕方6時頃に家に帰り着いたときにはかなりへろへろ。そのまま爆睡したところ、翌日午前10時頃まで寝てしまった(途中腹が減って朝方5時頃に1時間ほど起きたけど)。純粋に寝た時間だけでも15時間くらいか。あまりに寝過ぎたせいか日曜日は一日中だるくて、思わずさらに3時間ほど昼寝までしてしまった。

Published At2002-04-22 00:00Updated At2002-04-22 00:00

日記
VB.NET覚え書きEdit

前の地獄仕事の後をいまだに引きずったりしているせいで、新しい仕事の方になかなか集中できない。新しい仕事の方も、スケジュール的には結構きつい(し、技術的難易度はかなり高い)のに。せっかく地獄を抜け出したのに、のんびりweb日記を書くモードになかなか入れないんで、しょうがないから仕事の覚え書きを日記代わりに書いておこう。

というわけで、VB.NET(あるいは.NETのWebアプリケーションフレームワーク)に関する覚え書き。

  • Pageのグローバル変数(プロパティ)は、PostBackで破棄されてしまう(いかにもPage単位でグローバルに見えるのに)。PostBackでPageのグローバル変数を保存したい場合は、INPUTタグ相当に変換されるコントロールにセットしておくか、あるいはSession、Application、ViewStateなどに明示的に保存しておく。ただし、ViewStateにはオブジェクト(あるいは暗黙のうちにシリアライズされないオブジェクト)は保存できない。
  • Application(やSession)にオブジェクトを保存した場合、それを取り出す際には明示的にCTypeで型変換を行う必要がある。CTypeしなくてもきちんと取り出せる場合があるが、保証はない。明示的にCTypeすれば確実に取り出せるらしい。
  • 結局Page単位でグローバルなオブジェクトを保存する仕組みはないらしい。アプリケーション単位(Application、Cache)か、ブラウザセッション(Session)単位で保存しつつ、生存時間を開発者がコントロールするしかない。ただし、オブジェクト変数じゃないのならばViewStateに入れることで、比較的気軽にPage単位の生存時間を利用することが可能。
  • といいつつも、オブジェクトをPage単位の生存時間で扱う方法として、ユーザーコントロールのSessionを利用するやり方が使えるかも。と思いついたけれども試していない。もしそれで実現できたとしても、面倒くさいから常用したくないな。
  • Pageのグローバル変数は、Server.TransferでほかのPageに移動する際ならばPage間で引き継ぐことができる。Context.Handlerを遷移元ページのクラス名で型変換かけることで、前のページのPublicなPropertyが見える。でも、同ページ内でのPostBackでは同様の処理はできなかった。
  • そういえば、.NETのオブジェクトはリファレンスカウンターを持たず、適当にガベージコレクトされて破棄されるようなことが書いてあったが、ApplicationやSesionに保存されたオブジェクトが破棄されるタイミングはどうなるんだろう? ApplicationやSessionに保存したオブジェクトも、暗黙のうちに破棄される可能性を意識してプログラムを組む必要があるのか? だとしたらApplicationとCacheの違いは、単に生存確率の差だけ?
  • Page単位のCacheの仕組みのサンプルとして、10秒とか30秒とか適当な時間単位でCacheを有効にするよう設定されていたが、その時間に根拠はあるのだろうか? まじめにDirtyコントロールするのはかなり大変そうだから、トライアンドエラーで適当に時間設定しろってことなのか?
  • 汎用のCacheクラスを使ったキャッシュの方は、ファイルの更新をキーにCacheに更新をかけさせるような仕組みを持っていたが、ファイルではなくDBの状態をキーにできないんだろうか? DB側にTriggerを作っておいて、それをキーにCacheクラスにUpdateがかかれば便利そうなのに。
  • アプリケーション内でのconstは、ユーザーコントロール(ascx)に入れるのと、従来のようにglobal.asaxに入れるのとではどちらがいいんだろう?
  • そういえば、Pageのグローバル部でnewしたオブジェクトは、各イベントハンドラ内で見えたり見えなかったりしている気配。PageのOnLoadでnewした場合は、どこからでも見えるみたいだけど。いったいPageのグローバル部のスコープはどうなっているんだ?
  • 同様に、global.asax内のグローバルな変数たちも、どのイベントハンドラ内で生成してからApplicationなりSessionなりに入れるかで、Page側からの見え方が違うっぽい。少なくともオブジェクト内で直接Sessionをみたい場合は、Session_OnStartとかで生成しないとダメ。
  • といいつつも、たいていの場所から見えるHttpContext.Currentを使えば、webアプリケーションの現在のhttpセッション(=Page)が簡単に扱えるので、上記のようなことは実際には気にする必要がなかった。HttpContext.Current.ResponseとかHttpContext.Current.Sessionとかがたいていの場所で使える。
  • <%# …… %>を使ってデータをBindする表記法を使うと、VisualStudio.NETのデザイナ画面がすぐに腐る(開けなくなる)な。少なくともaspxのhtml画面側で<%# …… %>部を追加するとすぐダメになるっぽい。新規追加時には各コントロールのtext部に書いて追加すれば、腐りにくい気配(でも修正はhtml画面でやらないとダメ)。
  • 結局普通に(旧RecordSetっぽく)DataSetを使う場合は、DataSet.Tables(0).DefaultView(RowIndex)(field_name)とやるのが基本なのか? DataGridとかDataListとかにDataBindするだけだったら、DataSource=DataSetすればいいだけなんだろうけど。

ほかにもいろいろあった気がするけど、思い出すのに疲れたから今日のところはここまで。

Published At2002-04-22 00:00Updated At2002-04-22 00:00

日記
web日記関連図Edit

最近あちらこちらのweb(日記)コミュニティに関する話題を眺めているうちに、ちょっと面白そうなシステムのネタを思いついた。そこそこ手間がかかりそうなシステムなんで、作る暇を見つけるのは難しそうだけど、一応案だけをここに書いておこう。開発コードは「web日記関連図(blogmap)」。

このシステムでやりたいことは何かというと、現在web日記界(ってどこ?)の複数のweb日記で扱われている共通の話題というものを、システム的に認識しやすくする手段を提供すること。具体的にどうやってそんなことを実現するのかというと、web日記本文中での言及リンクURLを利用する。

textmaniaでは更新報告系リンク集やアンテナ系サービスから、主にweb日記ページの新着ページ情報を収集している。それを利用すれば、web日記が更新されたタイミングがおおむね把握できる。

で、まずは更新されたページの内容をまずGETする。そのページに日記本文が書かれていることを前提とする。そうでない場合は基本的に捨て情報(ノイズ)となる。

続いて、日記本文で張られているリンク情報(URL)群を抽出する。そこで、他のweb日記に対するリンクだけを取り出し、それ以外のリンク情報(サイト内のメニューなど)は抹消したいところだが、そのあたりのフィルターを雑多な構成のweb日記一般に適用できるように作るのは、なかなか難しそうだ。

ともかく上記のようなやり方で、あるweb日記をキーにそこに張られているURL一覧、という情報が取得できる。あとはそれを適当に解析することで、web日記において広く話題に上っている(=リンクされている)ものがなんとなく出てくる。具体的にどうやってノイズを取り除いて、どういう切り口で解析して、どういうインターフェースで見せるかは、要熟考。

ってのは要するに、ばるぼらアンテナ(あるいはその元ネタのblogdex)の、対象をニュース系に限定しないバージョンっつーか、ニュース系以外を主に対象としたバージョンみたいなものなわけだね。

こういうもの(web日記間の相関図をシステム的にうまく見せるインターフェース)は、ちょっと前までは更新報告系リンク集に機能拡張する形でしか実現できないかと思っていたんだけど、家サーバーのマシンパワーと回線速度も上がったことだし、プログラムでも何とか実現できるような気がしてきた。ゴールデンウィーク中にうまく暇を見つけられたら、プロトタイプでも作ってみよう。

Published At2002-04-24 00:00Updated At2002-04-24 00:00

日記
今日はバリウムの日Edit

前日夕方から飲まず食わずで、いつもより一時間早く起きてムスコを保育園に送っていって、9時から一日人間ドックってのはつらいね。今日は早く帰って寝よう。

Published At2002-04-24 00:00Updated At2002-04-24 00:00

日記
キーワードでの関連づけEdit

GETしてstriptagしてChasenで形態素解析して名詞らしき単語だけを抽出し、それをベースに解析すれば、日記本文中に使われているキーワードを使った関係図の作成も、なんとかなりそうな気がしてきた。

ただ、よく使われる一般名詞と固有名詞をどうやって差別化するかが難しい。単純に出現した単語でリンクを張っていくのではなく、その単語のweb全体での出現頻度の増減を監視して、「増減が激しかったキーワード=話題のキーワード」と捉えることで、なんとかなるかな? あと、出現数があまりにも多すぎる単語は、一般名詞として解析対象から捨てるようにしたり。

というのは、一つの単語(名詞)=キーワードという単純な場合に有効そうだけど、実際のことを考えると、単語の組み合わせという形で表現される話題が非常に多そうだ。そうなると、あるページで出現した単語の組み合わせがほかのページでも使われているか、という多対多の組み合わせ数をカウントする処理が必要になって、マシンパワーを激しく食いそうな気が。自動で全パターンをカウントして解析するのはつらいかな。

Published At2002-04-25 00:00Updated At2002-04-25 00:00

日記
書影リンク拡張Edit

Amazon.co.jpのアソシエイトプログラムには、書影付きリンクの方法が用意されていることに今さらながらに気がついたので、hnsを強引に拡張して書影付きリンクに対応させてみた。相変わらずhns(というか、PerlっぽいPerlプログラム)がよくわかっていないので、実装方法がかなり強引かもしれない。具体的にどうやったのかというと、

  • theme.phの「package HNS::Hnf::Command::IMG」部に、「$TemplateWithISBN=qw(<a href="http://www.amazon.co.jp/exec/obidos/ASIN/%2/my-associate-id"><img %align src="http://images.amazon.com//wp-content/P/%2.09.MZZZZZZZ.jpg" alt="%content" border="0">)」というのを追加
  • Command.pmの「package HNS::Hnf::Command::IMG」のTemplateに「use vars qw($TemplateNosize $TemplateWithsize $TemplateWithISBN);」を追加。
  • Command.pmの「package HNS::Hnf::Command::IMG」のsub AsHTMLで、Templateを切り変えているif文の冒頭に

    if ($src =~ /^isbn:/i ){
    $Template = $TemplateWithISBN;
    $src=~s/^isbn://i;
    $self->{attr}->[2]=$src;
    }
    elsif ……
    
    を追加

って感じ。これで「IMG n ISBN:4344402146」なんてやると、

Published At2002-04-25 00:00Updated At2002-04-25 00:00