2009/06/23

「コンピュータが子どもの心を変える」を読んで

ジェーン・ハーリーさんが書かれた邦訳本で、原題は「Failure to Connect」というシンプルなものです。タイトルの通り、子どもの(主に心の)発達とコンピュータなどの電子メディアがどのような影響を与えるかについて書かれています。さらに、もしコンピュータを積極的に活用するとしたら、発達の段階に合せてどのように活用するべきかのアドバイスもまとめられています。

コンピュータの影響を述べた本には良いか悪いかの一面から捉えるものが多いように思いますが、この本はコンピュータは11歳未満の子どもにはあまり有効ではないだろうと述べながらも、大人が一緒に子どもを指導する事でポジティブな影響を与えられる可能性についても言及しています。 その一方で実際にコンピュータを活用している学校などを訪問した経験から、効果的な活用が非常に難しい事も指摘しています。

この中で子ども向けの教育的ソフトウェアは、そのソフトウェア作成者の能力を投影している事と、それ故に内包される限界を指摘しています。所詮可能な事はプログラムされたものに過ぎないというわけです。 コンピュータが大きな可能性を秘めている事は事実ですが、その可能性を引き出すためにはコンピュータを使わなければいけません。誰かが作ったプログラムをおとなしく使っているだけでは、そういった能力を身に付ける事はできないという事ではないでしょうか。

個人的な経験からもコンピュータを能力を高めるための道具として使うためには、積極的な態度でコンピュータを使う必要があると実感しています。 もしそうしなければ刹那的にコンピュータの前でWebやチャットをしながら時間を浪費してしまうでしょう。 子どもが独力でそういった安易な方向に流されずに、良き道具としてコンピュータを活用する事は難しいだろうという印象を持ちました。

この本は教育者や子どもを持つ大人が興味を持ちそうですが、幅広いリサーチに裏打ちされた内容から得るものは多くあると思います。広くコンピュータやデディアに関わる方なら読むべきでしょう。

2009/06/17

XHTML+RDFa ReadyなWebページを書いてみた

さすがにpending状態なWebサイトの更新に向けて、とりあえずトップページの分だけ、 神崎さんのページwww.w3.orgなどを参考に、XHTML+RDFaなファイルを作ってみました。

とりあえず手探りでしたが、もう少し試行錯誤を重ねて汎用的なテンプレートを作っていこうとしています。 今回手で作ったページはお試しなので、辿れるところには置いていません。

emacsのnxml-modeを使ったものの、property要素を使おうとするとエラーになりました。 対応するスキーマがUbuntu 8.04の/usr/share/emacs/site-lisp/nxml-mode/schema/になかったのでtrangを使ってDTDからRNCファイルに変換しました。 いろいろ試しつつ最終的にはvalidator.w3.orgで確認してエラーがない事を確認しています。

他のXHTML, CSSのvalidator同様にアイコンを付ける事ができるメッセージが出たのですが、気になるところがありました。表示されたXHTMLの断片コードが次のようになっていたのですが…

...
resource="http://www.w3.org/TR/rdfa-syntax"
rel="dct:conformsTo" xmlns:dc="http://purl.org/dc/terms/"
...
たぶんこの"dct:conformsTo"の部分が"dc:conformsTo"だと思うんですよね。

まぁ名前空間の接頭辞は上書き可能とはいえ、まぎらわしいので、この部分のxmlns:dcは取り去ってファイルの先頭で宣言している接頭辞に合せて"dc:conformsTo"に変更しました。

2009/06/16

ExcelとOpenOffice Calcが出力するCSVファイル

CSVといえば、1行1レコードとして、各フィールドをカンマで区切っているファイル形式として、いまさら説明する必要がないほどによく使われています。 あまりにもポピュラーなのに、ちゃんとした形式はドキュメントが整備されてこなかった経緯があって、rfc4180がやっとInformationalとして発行されているぐらいです。

このファイル形式の問題点は、SJISかUTF-8かというマルチバイト固有のエンコーディングの問題もありますが、やはりデリミタが文字列として入っている場合の処理が面倒になるという点でしょう。 自分でデータを作成する場合にはデータにデリミタを含まないと決める事でawkやら各種スクリプト言語でループ+split()を使い簡単に処理をさせる事ができます。 しかし「デリミタを含まない」という前提が崩れてしまったり、もらったデータにはダブルクォートやらデリミタが含まれていて区切り文字でsplitする事ができない場面もあると思います。

デリミタをデータに含んでいる場合にはrfc4180にも書かれている通り、ダブルクォート'"'で囲む事が一般的です。ちなみにWindows版のExcel, OpenOffice(oocalc)でCSV形式で出力させると次のようになります。

Excel 2007が出力するCSVファイル

no#,dirname,dirname2
1,X11R6,"b,in"

OpenOffice Calc (oocalc) 3.1が出力するCSVファイル

"no#","dirname","dirname2"
1,"X11R6","b,in"

まとめ

"bin"の間にカンマ','を含んでいると、excel、oocalcどちらもダブルクォートで囲みますが、”X11R6"のようにexcelではダブルクォート、カンマを含まないデータはそのまま、oocalcでは数字以外はダブルクォートで囲むように処理されています。

CSVで保存する目的は他のソフトウェアやマシンにデータを渡すことが多いと思いますが、処理する先では元のデータに戻すために、ダブルクォートで囲まれていないカンマでレコードを分割し、ダブルクォート2つを1つに置換してから、最終的にはフィールドを囲むダブルクォートを取り去る必要があります。

ありふれたawkを使う方法は微妙に面倒なので、あまり普通のサーバーには入っていないかもしれないrubyを使って切り分けるcsv_split()を作ってみました

#!/usr/bin/ruby

def csv_split(reg_char, line)
  res = []
  quote_flag = false
  prev = nil
  for item in line.split(reg_char)
    if (item.count('"') % 2) == 1
      quote_flag = (not quote_flag)
    end

    ## yield during quotation
    if quote_flag 
      if prev == nil
        prev = item
      else
        prev = "#{prev},#{item}"
      end
      next
    end

    ## return the result
    if not quote_flag and prev != nil
      res << escape_result("#{prev},#{item}")
      prev = nil
    else
      res << escape_result(item)
    end
  end

  yield res
end

def escape_result(item)
  res = item
  res = res.gsub(Regexp.new('""'),'"').gsub(Regexp.new('^"'), '').gsub(Regexp.new('"$'), '')
  return res
end

## main ##
open(ARGV[0]).each do |line|
  line.chop!()
  csv_split(/,/, line) do |f1,f2,f3|
    if header == false
      header = true
      next
    end
    print "#{f1}\t#{f2}\t#{f3}\n"
  end
end

2009/06/12

DB2 Express-C v9.5でネットワーク接続を有効にしてみる

DB2はデフォルトではネットワーク経由でのサーバーアクセスを許可しません。 これはOSのインストールの度にやる作業なので、自分用の作業メモを残してみます。

ポート番号の予約

実際のところ全部ポート番号を直に使えば良さそうですが、一応マニュアルに沿って作業する事にしました。
/etc/servicesに適当なエントリを作成して任意の番号を割り振ります。 ポート番号はRFC3232を確認すると、IANAを確認するべしとあるので、そこからたどってポート番号のアサインを確認すると、49152から65535が動的割り当て+プライベートの領域として予約されているので、自分用に51001以降を使う事にしました。

$ echo "db2yasu  51001/tcp  ## for DB2 instance" | sudo tee -a /etc/services

DB2サーバー設定の更新

サーバー側では勝手に決めたポート番号の登録の他にネットワーク接続の方法としてtcpipを登録する必要があります。

$ db2set DB2COMM=tcpip
$ db2 update dbm cfg using SVCENAME db2yasu
あとはインスタンスを再立ち上げすれば反映されるはず。

インスタンスの再起動と確認

再起動はいつも通り。

$ db2stop ; db2start

まずはdb2setコマンド。

$ db2set -all | grep DB2COMM
そして次のように表示されればOK。
[i] DB2COMM=tcpip

コマンドで設定を確認するよりもnetstatを使った方が確実。

$ netstat -na | grep 51001
設定が反映されていればサーバーがポートを開いているので次のように表示されます。
tcp        0      0 0.0.0.0:51001           0.0.0.0:*               LISTEN

だいたいこんなところでしょうか。

太郎焼を買ってみた

先日のたい焼きに続き、今日は市役所に用事があったので散歩がてらお城から七日町に足をのばして太郎焼(==きんつば==大判焼)を買ってきました。(お店:太郎焼総本舗)

さすがに家からの往復で1万歩をあっけなく越えてしまい少し疲れましたが、そんな身体には甘いものがおいしく感じられます。
お祭の屋台で買うものよりも風味も良いし、生地に弾力があってしっかりした作りでとてもおいしかったです。

たい焼きの尾長屋は昨日もテレビで紹介されていたしユニークだけれど、この機会に地元のお菓子を探してみようかなと思いました。

2009/06/10

個人レベルでのLVM2の使いどころ

今日はeSATA接続ができるHDDスタンドを買ってきてlinuxに接続してみました。 余っているSATAディスクをバックアップメディアのように取り替えて使うには良さそうです。

ただautofsを使って/misc以下にマウントさせようとしたところ/dev/sdeのようなパスは変化するので、毎回一意になるパスを探していました。 ext2, ext3を使えば/dev/disk/by-uuid/xxxxが使えるのですが、xfsを使う予定だったので今回は使えません。/dev/disk/by-id/xxxxxで表示される名前は認識の順序で変化しないか確信が持てませんでした。
いろいろ考えて今回はLVM2を使い、任意になるようなVG, LV名を割り当てる事にしました。

Linuxを使っているとLVM2パッケージを使う事で、難しい準備無しに仮想的なディスク機構の仕組みが使えます。例えばubuntuなら

$ sudo apt-get install lvm2
ぐらいで関連するパッケージと供に導入は完了です。
ただHOWTOでは複数のハードディスクをまたがって一つのパーティションを作成できる事が利点として宣伝されていますが、最近はHDDの容量が増大しているため個人レベルでこの仕組みを使うには訴求力は低いかもしれません。

まぁ必要のないのに使う事はないんですけどね。 今回のような使い方はトリッキーな用途かもしれませんが、他に今までで役に立ったことというと…

  • 手元に比較的サイズの小さいUSB HDDが4,5台あったので、まとめて単一のバックアップ用領域を作成した事
ぐらいでしょうか。

LVM2のもう一つの用途にはLV上にファイルシステムを作成しマウントする事で、サイズを動的に増やしたりする事ができる点が挙げられています。
ただ個人で使う場合にファイルシステムを分割する意味はあるのか自信はありません。 誰かがi-nodeを使い切ってしまうのを避けられるとか、アクセスを局所的にする事でパフォーマンスの向上が期待できる、といった理由や利点はありますが、個人で使う分には意味がなく、LVM2にする事でパフォーマンスの向上といった事は期待できなくなりそうです。

パーティションはともかく自分自身のコンピュータの使い方として、tar.gzやisoファイルを収集するというのであれば、将来HDDを追加する事を考慮してホームディレクトリをLVM上に作成する事は意味がありそうです。

複数のユーザーがいて必要な領域を割り振るにはquotaみたいにファイルシステム単位で設定するよりも、ファイルシステムサイズの上限まで使って良いという方が完結なんですけどね。 個人用途で意味のあるLVM2の用途は見つけるのが難しいかもしれません。

2009/06/03

近くのたい焼き屋さんを食べ比べる

最近は毎日最低でも5千歩、できれば1万歩ぐらいは歩くようにしています。 観光地という事もあって飽きないようにルートを選択できるのは良いところです。

昨日と今日の2日間続けて散歩がてら途中にあるお店でたい焼きを買ってきました。 どちらもしっとりしていて、パリパリ感はまったくありませんが、おいしかったです。

1件目は白いたい焼きが特徴の「長尾屋」さん。 大きさは普通サイズですが、お餅のように弾力があります。 白あんよりは普通な感じの黒あんの方が生地と良く合っていると思いました。

2件目はプチサイズが特徴の「豆乳deプチたい焼き/苺小町」さん。 3匹で100円の値段で、種類も豊富なのでいろいろな種類を買っても、あまり負担にならないのが良い感じ。 お茶うけにピッタリな感じです。

たい焼きは尾っぽのはじっこがパリパリしていないと許せない、というのでない限りはお勧めです。 この2件はどちらもチェーン店でしたが、今度は地元のお店に行ってみようかな。

2009/06/02

Webコンテンツに求めるもの

自分のWebサイトをガタガタいっていないで早く作れば良いのですが、 セマティックWebやXHTML-Modularizationなどについて読むと方向性を考えないといけないかなぁと思います。

例えば過去のWebブラウザとの互換性をできるだけ確保するか、ある程度は犠牲にしてXML Parserでvalidate可能とするか、見方によればどちらも同じものを指す可能性がありますがアプローチの仕方は違ってくると思います。
セマンティックWebのオントロジーと組み合せる事で文書の構造に意味を持たせるアプローチは、 作成者側(あるいは利用者)がメタデータをどう与えるかが焦点になりますが、その作業量は作成者のさじ加減次第に思えて、最終的に利用者が得る利点はそれほど明確ではありません。

ただ現時点の範囲でも「誰それが書いた何時いつの、○×についての文書」という検索が十分実用になる事は、電子的なアーカイブと組み合せて、現在のサーチエンジンの姿の延長線上にある未来的な図書館の姿として一つの姿なのかもしれません。 ただ、それ以上に押し進めていって何が残るのかはUserAgent次第といったところでしょうか。

技術は適切に使いつつも、コストと利益のバランスの取れるところを探す必要がありそうです。

XSLTでblueprint用の宣言を出力できずに悩む

XML + XSLTの勉強をしつつ、CSSの勉強もしなきゃと思いblueprintを試してみました。

体裁を整えるという意味では簡単に使えるので、オリジナルの文書の一部を<div class="prepend-10 span-8 last">なんかで囲むだけで使えるという意味では良い感じです。

たまたま簡単なXSLTを試そうとblueprintに必要なlinkタグを含んだXHTMLを生成しようとしたのですが、おきまりの宣言を出力するのに少し勝手がわからず苦労しました。 うまく表示できなかった部分は次の個所です。

<!--[if lt IE 8]>
  <link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection" />
<![endif]-->
"[if lt IE 8]"の表記自体は、IEのバージョン毎に表示したい文字列を変化するための方法としてCSS - Conditional commentsなどで紹介されています。

XSLTでtemplateの中に入れて、そのまま出力しようとすると、内容が消えてしまいます。 まぁXMLレベルでコメントに入っていますから、XSLTで処理される対象となる前に無視されてしまいます。

XSLTでコメントを出力するために"xsl:comment"タグで囲めば良いのは、わりとすぐに判りましたが、"<!"の部分でXMLがパースエラーを起してしまい、困ってしまいました。 XMLレベルの話しなのに、XSLTの中から答えを探そうとしていたのが原因だったので、それに気がついてからは割と簡単に答えに辿り着きました。

最終的にはこんな感じに落ち着きました。

<xsl:comment>[if lt IE 8]>
<![CDATA[<link rel="stylesheet" href="css/blueprint/ie.css" type="text/css" media="screen, projection" />]]>
<![CDATA[<![endif]]]></xsl:comment>
別にどうって事もなかったんですけどね。最初はこんなもんでしょう。

LDOCE5をUbuntu 8.04 amd64版で使ってみる

CPUをPhenom II 940に入れ替えたりHDDを載せ換えたりしてデスクトップ環境を一新しました。 そこで仕事(趣味?)の主体をデスクトップに持ってきています。 それにつられて「ロングマン現代英英辞典【5訂版】(DVD-ROM付)」(LDOCE5)をWindows Vistaから、Ubuntu 8.04 amd64に移して使う事にしました。

改めてDVDから以前のように

$ linux32 ./setup.sh
で導入したのですが、メイン画面は表示されるものの、クリックして辞書などへ移動する事ができなくなっていました。

記憶が不確かですが、以前は確かに動いたと…。 CPUを交換したUbuntu 8.04.2をDVDから改めて導入したりしてライブラリが変ったせいなのかなと思ったりしたのですが、Googleで探してみると「LDOCE5をVine4.2で使う」でflashplayerのライブラリを入れ替えて解決した事がわかりました。

ここを参考に、古いflashplayerのアーカイブを取得して古いライブラリと入れ替えました。

説明のための前提

上記のリンク先から"Flash Player 9"のリンク先にあるfp9_archive.zipファイルを、"~/"にダウンロードしておきます。 Longman自体は"~/ldoce5/"で自分の権限で導入されているとします。

導入手順

$ cd ~/ldoce5/plugins/
$ unzip -x ~/fp9_archive.zip
$ tar xvzf fp9_archive/9r31/flashplayer_9r31_linux.tar.gz 
$ cp install_flash_player_9_linux/flashplayer.xpt .
$ cp install_flash_player_9_linux/libflashplayer.so .
$ rm -rf install_flash_player_9_linux
$ rm -rf fp9_archive

起動して確認

ここまでで無事に動くようになりました。 参考にさせて頂いたVineの場合ではflashplayer7をベースにした違いからか、アイコンが表示されていませんでしたが、ちゃんと表示されていました。いまのところ不具合は認識していません。

$ ~/ldoce5/ldoce5

後から気がついた事

2日ほどして気がついたのですが、相対パスでldoce5コマンドを実行してもうまく動かない事に気がつきました。"~/ldoce5/ldoce5"のように絶対パスで起動する分にはうまく動くようです。

理由はよくわからないですね。何か中で動いているflashplayerかXULでファイルを読み込むような処理をする時に、基準になるbasedirをうまく扱えないのかなぁ。

xlstで遊んでみる

日頃からData(Model)とViewの切り分けが難しいなぁと思っていると、些細な事が気になります。 メンテしていなかったサイトに載せるコンテンツを作るためにhtmlファイルを作成しようとして、 xml+xslt or xhtmlが良さそうだなぁと思ったのですが、いくつか問題だと思う事がありました。

  • CSSのために、<div>などの指定を含んでしまいがちになる
  • xhtmlのタグだけでは微妙に表現したい事が書けず、不足分を補うために"id"やら"class"属性を書く事になったり、他のxml文書を含めるためのnamespace指定やらprefixの指定やらで冗長になる
  • 自分用のxml文書を作ってXSLTで変換するのが良さそうだけれど、規模感の大きいXSLTは構造化 or オブジェクト指向言語と同じように適切な規模に区切って管理する事が難しいように思える
xhtmlもxmlですから、xhtmlとxsltを組み合せれば、ほぼ満足できるものが作れそうな感じがします。 でも独自マークアップでxmlを定義してしまうのも手かなぁと思ったりします。

いずれにしてもxsltを避ける事が難しいのはわかっているので、ちゃんと勉強する事にしました。 xhtmlやらxsltやらをキーワードにして検索しているとwww.kanzaki.comの神崎さんのページは避けて通れないようです。この徹底ぶりは凄いですね…。xsltでさえもstylesheetでちゃんとみえるようになっていますし。

とりあえずはwww.w3.orgの資料と手持ちの本を読み進めています。