2010年2月 7日

どうやらCPAN Authorになったようです

念願のCPAN Authorになったらしい。今年の目標の一つだったのですが、宣言する前になってしまいました。

たいしたモジュールじゃないんですが、Math::CheckDigitsというモジュールをあげてあります。名前のとおり、チェックディジットを計算したり、判定したりするモジュールです。

Algorithm::CheckDigitsというCPANモジュールが既にあります。ただ、これはフォーマット名(JANとかISBNとか)を指定しないと使えなかったりして、いちいちそんなに覚えていられません。単純にModulusとWeightを指定するだけで使えるモジュールが欲しかったので作りました。

フォーマット名を指定して判定したい場合も、このモジュールを基底クラスにしてサブクラスを書けば簡単に作れると思うので、ゆくゆくはそういったモジュールも作成しようと考えています。ちなみにAlgorithm::CheckDigitsはサブモジュールにいちいち似たような処理が書いてあるので、ちょっと好みじゃありません。

企業様向けの社内システム等の受託開発なんてやってると、要件にチェックディジットが出てきたり、テストバーコード打ち出したりとかで、チェックディジットを使う機会が多かったりします。その辺りがこのモジュールを作ろうと思ったきっかけでしょうか。

モジュールはModule::Setupを使って作成しました。tar.gzがパーミッションの関係でPAUSEアップロードに撥ねられたりしてWindowsでCPANモジュールを作るのには苦労しました。

幸い、アップロード時に自動送信されてくるレポートメールの中に失敗の詳細が書かれていました。しかもtar.gz内のファイルパーミッションを書き換えてくれる修正スクリプトへのリンクまで書かれており、それを使って問題を解決出来ました。

集合知を使うところまで自動化されているんだからCPAN恐るべし。ただ、Windowsで開発するのも色々鬼門でめんどくさいなぁとか感じつつある今日この頃です。

CPANはありそうなモジュールが案外無かったりするので、そういうニッチな部分で勝負できるのではないかと思い始めています。

今回はWebには全然関係ないモジュールだったので、次回はWeb関係のものをあげます。

投稿者 Songmu : 23:44

2009年12月22日

JPerl Advent Calendar Casual Trackに記事を書いたら長年悩んでいた問題が解決したでござるの巻

最近全然Blog更新しておりませんが、今回も単なる告知です。内容はタイトルのとおりです。EmEditorのPerlマクロに関する話です。周りが凄い人ばかりなので、ビビりながら書きました。

http://perl-users.jp/articles/advent-calendar/2009/casual/15.html

ちなみにユニコードを扱う方法が分からなかったのですが、id:xaicronさんがTwitterで話しかけてくださって、見事に解決してくれました。こんな感じ。

use utf8;
use Win32::OLE;
Win32::OLE->Option( CP=>Win32::OLE::CP_UTF8 ); #ここで指定
my $nihao = '你好!统一码';
$Window->OutputBar->writeln($nihao); #flagged utf8を直接渡す

flagged utf8を直接出力に渡すってのはちょっと気持ち悪い感じがしますが、EmEditorマクロの場合はそうしないと文字化けしてしまいます。

まあ、これでutf8が使えるようになり、アウトプットバーに中国語も表示されるようになりました。これでEmEditor上でのTwitterライフがさらに充実します。数日前に、Twitterがクラックされた際に、みんな面白がって、アラビア語をPostしてましたが、それもばっちり読むことが出来ました。

Win32::OLE->Option( CP=>Win32::OLE::CP_UTF8 );はPerlでExcel等を扱うときなんかによく使うみたいで、いやー勉強になりました。

情報を提供するよりもむしろ情報を提供してもらっちゃいました。Perl Mongersの文化は素晴らしい。てーかAdvent Calendarの方も追記して書き換えておかないといけませんね。

そのxaicronさんが、hacker Trackに寄稿した「Windows環境でUnicodeファイルを扱う」はPerlでUnicodeファイル名を扱うためのモジュールの話で、これも非常に勉強になった。前職で同僚が中国語ファイル名とか作ることが多かったから、これを知っていれば少し楽になった部分もあるなぁとか。

私もPAUSEアカウント申請して、申請も通ったので、来年はPerlモジュールを書いて念願のCPAN Authorになろうと思います。ネタは色々あるので今年中でも良いんですけど。

投稿者 Songmu : 23:19

2009年10月27日

ブログ上に数式を

とりあえずBlog上に数式を貼り付けたくなったので、ちょっと作ってみた。

gmath.js

Google Chart APIを利用しています。使い方は以下。

  1. jquery.jsとgmath.jsを読み込ませます。
  2. 数式を表示させたい部分にimgタグを置き、altにtex書式を書きます。また、class="formula"を指定します。
  3. onload時に$.gmath()関数を呼び出します。

ゼータ関数を表示させるにはこんな感じ。

<img alt="\zeta (s) = \sum^{\infty}_{n=1} { 1 \over {n^s}}" class="formula" />

\zeta (s) = \sum^{\infty}_{n=1} { 1 \over {n^s}}

KuaiWikiに組み込めば面白い感じですが、Google APIを使っているのでそれに依存するのはちょっと不安な感じ。Media Wikiは標準でそういう機能があるみたいですね。

てーか普通にこんなブログ記事も見つけてしまって、なんだか車輪の発明にもほどがある感じ。まあいいか。

投稿者 Songmu : 01:14

2009年10月11日

ロリコン判定一覧表出力ワンライナ

参考( http://twitter.com/Hamachiya2/statuses/703220972)

perl -e "printf qq{| %2d | %5.2f |\n}, $_, (3.1415926535 * sqrt($_)) for 0..99"

出力結果(左が年齢。右がロリコン認定年齢)

|  0 |  0.00 |
|  1 |  3.14 |
|  2 |  4.44 |
|  3 |  5.44 |
|  4 |  6.28 |
|  5 |  7.02 |
|  6 |  7.70 |
|  7 |  8.31 |
|  8 |  8.89 |
|  9 |  9.42 |
| 10 |  9.93 |
| 11 | 10.42 |
| 12 | 10.88 |
| 13 | 11.33 |
| 14 | 11.75 |
| 15 | 12.17 |
| 16 | 12.57 |
| 17 | 12.95 |
| 18 | 13.33 |
| 19 | 13.69 |
| 20 | 14.05 |
| 21 | 14.40 |
| 22 | 14.74 |
| 23 | 15.07 |
| 24 | 15.39 |
| 25 | 15.71 |
| 26 | 16.02 |
| 27 | 16.32 |
| 28 | 16.62 |
| 29 | 16.92 |
| 30 | 17.21 |
| 31 | 17.49 |
| 32 | 17.77 |
| 33 | 18.05 |
| 34 | 18.32 |
| 35 | 18.59 |
| 36 | 18.85 |
| 37 | 19.11 |
| 38 | 19.37 |
| 39 | 19.62 |
| 40 | 19.87 |
| 41 | 20.12 |
| 42 | 20.36 |
| 43 | 20.60 |
| 44 | 20.84 |
| 45 | 21.07 |
| 46 | 21.31 |
| 47 | 21.54 |
| 48 | 21.77 |
| 49 | 21.99 |
| 50 | 22.21 |
| 51 | 22.44 |
| 52 | 22.65 |
| 53 | 22.87 |
| 54 | 23.09 |
| 55 | 23.30 |
| 56 | 23.51 |
| 57 | 23.72 |
| 58 | 23.93 |
| 59 | 24.13 |
| 60 | 24.33 |
| 61 | 24.54 |
| 62 | 24.74 |
| 63 | 24.94 |
| 64 | 25.13 |
| 65 | 25.33 |
| 66 | 25.52 |
| 67 | 25.72 |
| 68 | 25.91 |
| 69 | 26.10 |
| 70 | 26.28 |
| 71 | 26.47 |
| 72 | 26.66 |
| 73 | 26.84 |
| 74 | 27.03 |
| 75 | 27.21 |
| 76 | 27.39 |
| 77 | 27.57 |
| 78 | 27.75 |
| 79 | 27.92 |
| 80 | 28.10 |
| 81 | 28.27 |
| 82 | 28.45 |
| 83 | 28.62 |
| 84 | 28.79 |
| 85 | 28.96 |
| 86 | 29.13 |
| 87 | 29.30 |
| 88 | 29.47 |
| 89 | 29.64 |
| 90 | 29.80 |
| 91 | 29.97 |
| 92 | 30.13 |
| 93 | 30.30 |
| 94 | 30.46 |
| 95 | 30.62 |
| 96 | 30.78 |
| 97 | 30.94 |
| 98 | 31.10 |
| 99 | 31.26 |

分かったこと。9歳までは年上が好きでもロリコンとなる可能性がある。

投稿者 Songmu : 11:46

2009年9月27日

Wiki作った

8月の夏期休暇中から作り始めていたWikiですが、一応一段落したので公開。

http://www.kuaiwiki.com/

記法の実装は2日くらいで終わったんだけど、それから記法の機能追加とか、細かい点の実装とかDBIx::Classの使い方を覚えるのとかで色々時間がかかってしまった感じ。完全にオリジナルと言えるコードは記法部分くらいなんですが。

作った経緯に関しては、この辺に書いてあります。

しかし、開発しながらBlog更新とかがんがん出来る人ってすごいな、と改めて思いました。自宅でパソコンに向かっている時間はほとんど開発に費やしてしまったから、全然Blog更新しなかったからね。YAPC::Asiaのレポートとかも書きたかったんだけど。まあ、これから書くか。

ソースコードも直に公開します。ただ、環境依存が強いんで、他の環境での設置は手間かもしれません。何せDBIx::Classが0.08100以降だと動きません。なんじゃそりゃって感じですね。

DBIx::Class::Schema::Loaderで読み込まれた設定に、手動でjoin設定とかを追加しようとすると上手くいかないみたいなのです。ちゃんとSchemaを生成する形にすれば良いと思うんだけど、とりあえずSchemaも固まってないし、保留。

投稿者 Songmu : 22:54

2009年7月25日

golf.shinh.orgの出題ミスの件

TAKESAKOさんの指摘にもあるように出題ミスみたいです。私も間違いに気づいて、強引に解答した感じ。で、正しい動きをするコードをどっかに載っけたかったのでここに書く。現状165B。

$c[0]=[];for$i(1..300){print"$i: ".(join" ",@{$c[$i]=(sort{o(@$a)<=>o(@$b)}map[sort{$b<=>$a}$_,@{$c[$i-$_**2]}],1..sqrt$i)[0]})."
"}sub o{$u=$#_*301;$u+=$_ for@_;$u}

ある数字に対する解答配列のサブセットが、必ず別の数字の解答配列になっているのでそれを利用して解いています。

でも、この問題だけど、63の時に解が二つ存在するみたいです。そうなる組み合わせがあるんじゃないかとは思っていたんだけど。その辺すぎゃーん氏のエントリに書かれています。

golf.shinh.orgは知ってはいたんだけど、@sugyan氏のTwitterを追いかけていて面白そうだったので、ちょっとはまっている。Twitterやってて最近では一番良かったことかも。次の問題もアップされたので解いてみようと思う。

ちなみに、ラングトンの蟻はどう書く.orgに投稿したんだけど、他の人の書いたコードを見られてかなり勉強になった。なでしこのコードとかもあって面白かった。

投稿者 Songmu : 01:49 | トラックバック

2009年7月10日

JavaScriptでラングトンの蟻

『単純な脳、複雑な「私」』を読んだのだが、その中に出てきた「ラングトンの蟻」が面白そうだったので実装してみた。

「run」を押すと動き出しますが、IEだと遅すぎて使い物にならないので押さないように注意。少し時間がかかりますが、カウントが10000を越えたあたりから急に動きが変わります。マシンスペックにも寄りますが終わるまで大体賞味1分くらいかな。ちなみに、スペックが貧弱なパソコンだとCPUをぶん回している状態になると思うので注意。

ソース

いやー、ちゃんと動いてますね。ちゃんと動いたときは我ながらちょっと感動しました。

ラングトンの蟻と言うのは、存在が環境に影響を与え、環境が存在に影響を与えるというモデルで、非常に単純な規則ながら面白い動きをします。最初はデタラメに動いていたものが、ある段階から急に規則的に動き出すというものです。

具体的な規則は、下記の繰り返しです。これだけです。

  1. 一マス動く
  2. 入ったマスが白だったら黒に、黒だったら白にマスの色を変える
  3. 入ったマスが白だったら右に、黒だったら左に方向転換

ちなみにこのプログラム、ビットマップ的な表現をするために、divボックスの中に3ピクセル幅のdivボックスをfloatで敷き詰めて、その背景色を変化させるってやり方をしてるんだけど、やっぱこれって効率悪いのかな?もっと良い方法があったら知りたい。

久し振りにスクラッチからJavaScriptを書いたので面白かった。そしてIEの遅さに改めて唖然とした。

投稿者 Songmu : 00:19

2009年6月21日

Sugamo.CSS#5

参加してきた。結論としては「あそこは自分の作業は進まん」と言うこと(笑) まあ、ちゃんと自分のお仕事をしてた人もいましたけどね。偉い。

考えてみると職業マークアップエンジニアがあれだけいるってのは感動的です。僕がCSSに一番はまっていたのって3~4年位前なんだけど、その頃は、マークアップエンジニアカッコワライの世界で、専業マークアップエンジニアなんて考えられない時代でした。「デザインも出来ないのにマークアップエンジニアって何なの?」っていう不遇の時代でした。

当時はCSS舐められてるなぁとか感じつつ、CSSくらいしかまともにできなかった私は、CSSだけじゃ喰えんよなぁと思って、デザインを勉強したりプログラムを勉強したりして今に至る訳です。結局デザインは身につかず、Perlが性に合ったので、その延長でプログラムを書く方に比重が寄って行った感じですね。

とは言え一定のデザインは出来るようになりたいです。相変わらず。


EmEditorネタが微妙にウケたのが良かった。EmEditorマクロネタ(ただしPerl限定)とかちょっとBlogに書いてみようかなと思ってみたり。

Yomotsuさんが相変わらずネタが豊富なのが素晴らしくて、今回持ってきたのは「svgのforeignObjectで外部のページを読み込んでsvgで反転させる」ってネタ。これがGoogleを反転させたデモページ。「これブックマークレットにしたら面白くネ!?」って感じで盛り上がった。

SigさんのVimネタも面白かった。僕はemacs使いたいなぁとか思いつつ、EmEditorです。EmEditorもカスタマイズしていくと機能的に限界を感じる事もしばしばあるんだよね。EmEditorマクロは機能を追加するだけで、エディタのコアな部分までカスタマイズ出来るわけじゃないので。

あと、話題になった出た本とか。

「ハッカーと画家」

Paul Grahamのコラム集。とにかく文が面白く、Lisp最強論が到る所で展開される。「もしかしてLisp最強なのかな?」と心から信じてしまいそうになるほどの文章の面白さ。

本書にも収録されている「ものつくりのセンス」は、本が出る前から各所で話題になった名文です。

他にもPaul Grahamのコラムは「Fine Software Writings」でいくつか読むことが出来る。そこで読んでみて、面白そうだなと思ったら、「ハッカーと画家」を買ってみると良いんじゃないでしょうか。

「JavaScript: The Good Parts」

JavaScriptがらみでちょっと話題に出た本。モダンなJavaScriptに関して非常に簡潔にまとまっていて、ちょっとJavaScriptに慣れてきたかなって人が読むと読み応えがあると思う。本の薄さに騙されて、JavaScriptを始めたばかりの人が買ってしまうと返り討ちに遭うと思われる。

Functionオブジェクトのprototypeにメソッドを生やしていたり、"new"は良くないPartだと言っているあたり、ちょっと好みが分かれる部分もありそうですが、確かにそうなっているのは一理あるなと頷ける内容になっています。

ただ、ビルトインオブジェクトのprototypeにメソッドを生やすのはお行儀が悪い行為だと言うのは割と最近主流になっている考え方かと思いますが、そこに制限がかかるとprototype型言語としてのJavaScriptの魅力が損なわれてしまう部分もあるのではないかなぁと個人的には感じています。

for inが使えないと言うのであれば、イテレーション用のeachメソッドとかをprototype側に持たせれば良いだけの話。もしくはfor inに引っかからないようにするプロパティがJavaScriptの言語使用側に加われば良いと思う。メソッドがバッティングすると困るのは確かなので、やりすぎは良くないと思うけど。

そもそも、JavaScriptではビルトイン型の継承が難しいのも問題があって、

MyDate.prototype = new Date();
MyDate.prototype.constructor = MyDate;

とかやっても、ジェネリックじゃない関数(Dateの場合ほぼ全ての関数)がMyDateに引き継がれないといった現象がある。そうなると、頑張ってapplyしてprototypeにメソッドを生やしなおすより、Dateのprototypeを拡張したほうが楽じゃん、とか思うんですよね。

話が横道にそれた。「JavaScript: The Good Parts」は好みが分かれると思うけど、だからこそJavaScriptをそこそこ学んだ人は読んでおいた方が良い本だと思う。

「複雑系入門」

話題にはならなかったけど、複雑系の本が少し話題になっていたので、個人的にオススメの本を一冊。

その名の通り複雑系を大まかに知るためには非常に良い本。複数のテーマ毎に具体的事例が取り上げられていて複雑系に馴染みが無い人にも読みやすい。

個人的に面白かったのは、いろんなものがべき乗分布で捉えられるという項目。都市の人口ランキングや英文の単語の出現頻度を、対数のスケールでグラフにプロットしてみると見事に一直線に並ぶのです。そういう何気ない部分にも隠れた法則を見つけられると言うところに驚いたことを覚えています。

しかし、この本を読んだのももう10年前だ。


Sigさんが自転車で来ていたので、私も次回は自転車で行こうと思う。雨が降らなければ。

しかし、Sugamo.CSSめちゃくちゃ居心地良いんですけど。主催者のSigさんには超感謝。

投稿者 Songmu : 23:26

2009年6月17日

凝りもせずAkamai勉強会第2回

凝りもせず参加してきた。yasuyukiさんとgeekpageのあきみちさんから「次回もまた是非参加してください」とありがたいお言葉をいただき、素直に信じて参加してきた。

会場提供のDeNAさんには本当に感謝です。ただでさえDeNA社内に入れるってだけで大興奮モノでした。新宿のオフィスビルに複数フロアに跨って入っていて、しかも内装がおしゃれ。非常に勢いを感じさせました。

勉強会の内容的には改めて驚きの連続でした。技術的な側面はともかく、印象に残ったのは、Akamaiの社是として

「インターネットを予測可能で、信頼のできる、予測可能なものにする」

というものがあるというものでした。単なる理念だけじゃなくて、社是になっているって言うのが驚きで、Akamaiの国谷さんも「社是があるってのはアメリカのしかもベンチャー企業としては非常に珍しい」とおっしゃってました。

Googleの「don't be evil」とかもそうだけど、そういう技術馬鹿的な側面(?)を貫いて成功しているって言うのは、日本人からしても好ましいな、と思った。


懇親会も盛況で楽しかった。どこ言ってもいろんな話で盛り上がっていた。あっと言う間に11時半になった。

サイボウズの奥さんもいらっしゃっていて「クラウド的な手法でハッシュはダメだよ(笑)」とか言いながらMySQLと最近作り始めたと言うPacificの話をしていたのが、スゲー面白かった。

他の人の話を聞いても思ったけど、コンテンツとしての自分はまだまだ貧弱だなぁと痛感しました。そういうレベルで語れる内容が無いんだもんよ。

投稿者 Songmu : 00:00

2009年5月16日

Sugamo.cssに行ってきた

週末プログラミングをするには良い機会だと思い参加。Web製作会社の人と話をする機会って実はあまり無いので有意義だった。私が普段関わっているようなプログラマーの人たちとは大分ノリが違ったのが意外でもあり面白くもあり。

ネタとして今作っているJavaScriptベースのAIRアプリを持っていった。話を始めたらみんなが続々僕の後ろに集まってきて、説明する心の準備ができていなかったんでちょっとキョドってしまった。もっと丁寧に説明出来れば良かったんだけど。

お互いのノウハウ公開では、クリップボード拡張とか複数台のパソコン環境をdropboxを使ったりして共有するとか、その辺が興味深かった。

個人的に最近エディタマクロを書き散らしてるんだけど、パソコンによって入っている入っていないがばらばらで結構困っているのでなんとかしようとは考えてはいたのです。

あと、多くの人がローカルでの作業で上手くPerlやRuby等のスクリプト言語を活用しているようでした。こういうのって案外平均的なプログラマーはやらないと思うので、特定の局面では下手なプログラマーよりコード書けるんだろうな、とも感じた。

話が弾んでしまって、思ったより自分の作業は進まなかったけど、それもまた好し。

投稿者 Songmu : 23:32

2009年4月24日

美味しいソースの作り方

Cookpad&カヤック主催の技術者交流会に行ってきた。Cookpadにしても、カヤックにしても、この時期に採用を拡大していて元気だよなぁ。結構名刺交換した。最近勉強会に結構参加してるから手持ちの名刺が少なくなってきた。ヤバイ。個人の名刺作ろうかな。ずっと考えてはいるんだけど。

料理美味しかったです。どんぶりが余っていたので、3杯食べました。以下、話した事や聞いた事など。

PerlからFlash

カヤックはPerlをかなり使っているみたいでした。Flash Media Serverのサーバーサイドの実装を通常のActionScriptではなくて、Perlで書いたフレームワークKamaitachiはおおっと思った。

それを使って、ユーザーがActionScriptのコードを動かせるWonderflというサイトを作っているみたいです。これはActionScript書く人にとっては堪らないサイトですね。

先日のShibuya.pmでもSandBoxの話出たけど、これもセキュリティ対策とか大変そうだな。サイト閲覧者を攻撃出来るようなコードも書けそうだし。

カヤックが会社としてオープンソースに関わっていることのメリット

  • 社内にCPANモジュールのコミッタがCatalyst関係一人、DBIx関係一人、Plagger関係一人といる。
  • Catalystを使っている会社だと認知してもらえれば、Catalyst関係の技術者の応募を期待できる。
  • 採用者に対しても、勤務開始前にオープンソースとして公開しているモジュールを勉強してもらえる

カヤックでJavaScriptメインで書いている技術者の方と話した事

  • もともとPerlが好きでPHP書くのがイヤだから、JavaScriptメインになった
  • やっぱjQuery。jQueryはjQueryという言語の中でDSLとしてJavascriptを使うようなもんだ(笑)
  • 社内の技術者の中でJavaScriptを書くかActionScriptを書くかは意外にもすっぱり分かれている
  • 年間100以上のサービスが生まれるから、サービス管理自体が一仕事

投稿者 Songmu : 23:11

2009年4月22日

低レベルだけど高レベル Shibuya.pm#11

行ってきた。リクルートの大きな会場でした。

tokuhirom氏が言っていたようにレベル高すぎ(笑)で全然わかりませんでした。機械語とかCとか低レベルな話が多かったんだよね。

最初が小飼弾氏のPerlを動かすSandBoxの話で、「この人の話はレベル高くて理解出来ないのは仕方ないかな」とか思っていたら、後から思うとPurePerl以外の話で一番理解出来たのはこの話だったかも、と言う。

clkao氏の発表が個人的には一番役立った。Devel::NYTProfを使うとLine levelでのプロファイルができて、しかも、eval実行文字列の中でもLine levelでのプロファイルできるよ! というお話でした。

最近ちょっとPerlに自信を持ってきたところにその自信をへし折られた感じなのでちょうど良かったかも。

初めてたかだフレンドのクラブランにささやかな自信を秘めて行った時に、見事にぶっちぎられて引きずりまわされた事を思い出しました。そのあと、たかださん(店長に)「(初めてにしては)結構速いらしいじゃん」とかお褒めに預かって、「くそーちきしょー」とか思ったのを覚えています。

今の自分がどんなにやってもがんばっても越えられないように思える壁を見せ付けられるってのは良い経験。「やれば出来る」とか思うこと自体が無駄なんだと言うことを思い知らされます。そう思う前にやれ!ってことですよ。

投稿者 Songmu : 23:06

Akamai勉強会の記事を修正した理由、勉強会へ参加する際の意識付けとか

勘ぐられても困るので書いておくと、別に書いちゃいけない内容があったというわけではありません。

  • せっかく機会を設けてくださったAkamaiさん、企画した方々にあまりにも失礼な書き方があった
  • 誤解(特にAkamaiさんへのマイナスイメージ)を与えかねない表現・間違った記述があった

というところに反省して書き直した次第です。

勉強会では「こんなことBlogとかに書いちゃって良いんですか?」とたじろぐ参加者の面々をに対して「これくらいだったら平気ですよ」とAkamaiの方はおっしゃっていて、そこにもAkamaiの底知れなさを感じました。

勉強会はオンレコ、その後の懇親会はオフレコという切り分けはしていたつもりですし、勉強会の中で出たきわどい質問に対してサービスで答えてくれた分に関しては書いていません。というより、そのあたりは技術的に込み入った話なので、あまり理解していません。

それに大げさに書きすぎた部分もありますが、こんな誰でも行ける勉強会でそこまでクリティカルな内容なんて出てません。

今回、どうしてこういうことをしてしまったか

2chや個人のBlogに「イ○ローテラ鬼畜ww」、「任○堂がマジ○ンをフルボッコww」等(あくまで例えです)の記述がされることは少なくないと思います。

その言葉遣い自体も問題ですが、それらとは違い今回それ以外に大きな問題だったのは、勉強会を企画した方々を侮辱するような行動になってしまった点です。

それはどうしてかと振り返ってみると、結局自分の当事者意識が足りなかったというところに尽きるのかな、と思いました。

私にはどうしても傍観者、観察者になりたがる部分てのがあります。でも、テレビ等を見ているのとは違って、勉強会への参加ってのは当事者になることなんだってことに気が付きました。

そういう当事者意識をしっかり持っていれば、今回みたいな行動は起こさなかったのではないかと反省しています。

コアになって企画する人たちとは違って、私みたいな勉強会をつまみ食いしている人間はその辺りの意識が希薄になりがちなので、注意が必要だと痛感した次第です。

投稿者 Songmu : 12:50

2009年4月21日

Akamai勉強会の追記というかお詫び

完全に予想外の反響に驚くとともにビビッています。これまでまともにブクマを受けたこともないので、まさか半年分のアクセス数を一日で稼ぐことになるとは思いませんでした。いつもの感覚で、勢い重視で面白おかしく書いたところが、あおってしまった部分もあるのでしょう。反省しています。フィード購読者も増え、こうなると書く内容に責任も発生してしまうな、と多少途方にくれています。

プライベートセミナーなのにレポートのページにこれだけアクセスが集まってしまったのは申し訳なく思っています。geekpageさんも書くと言っていたので、私のBlogなんてたいした影響力が無いとタカを括っていました。すみません。


タイトルに当初「鬼畜」という言葉を使っていました。親しい仲で「おまえ鬼畜過ぎ」というのとは違って、初対面に近い方に向けて使うのはあまりにも非常識だと反省しタイトルを変更した次第です。

せっかくお話してくださったAkamaiさんには本当に失礼な書き方をしてしまって申し訳ありませんでした。

そして、せっかくセッティングして下さったyasuyukiさんその他関係者各位に不快な思いをさせてしまったことを深くお詫びいたします。


Akamaiはそもそも、ティム・バーナーズ・リーが

「インターネットの負荷を均衡させ、インターネットの信頼性を向上させる技術」

が無いかと提案していた背景があり、その理念に応える形でAkamaiがMITの研究室で生まれたいうことでした。

そういう理念のもの生まれた企業なので、決して悪の存在ではありませんし、むしろ間逆です。

どんなに企業が自前でシステムを冗長化しても、信頼率は99.999...にしかならないし、レイテンシの問題があるので、距離的な問題を解消できない。

そこでAkamai化すれば100%だし、レイテンシの問題を解決できる。顧客企業が信頼できるコンテンツの配信が出来るようにお手伝いします、ってのがAkamaiのやっていることです。


指摘を受けているように記述には誤りもあると思います。「ルーティングはしていない」という指摘もありました。

実際やっていることは、Edgeサーバー同士のピアリング(キャッシュのやり取り等)と、DSNを動的に書き換えてユーザーから近いキャッシュサーバーを割り当てているってことですね。

詳しくは識者のフォロー等を待ちたいところです。

無秩序なP2Pは困るけど、AkamaiのネットワークはP2P的でありながら管理されているので理想的なのかもと言う話も出ました。


IPv6対応は「正直かなり大変です」と言っていました。ISPレベル・国レベルでの思惑、利害が絡み合っており、上のレベルで号令を取れる存在もないので。

ただ、こういう時こそAkamaiやGoogleみたいなところの存在意義が問われるんじゃないか、とも思います。(悪い意味でなく)独占的であるところのメリットと言うか。もちろん、両者ともそれに備えて動きはしてるんでしょうけど。


以上です。色々すみませんでした。好感を持っていた人に、悪く思われてしまったなぁと感じるのは...、堪える。

投稿者 Songmu : 12:49 | トラックバック

2009年4月20日

ThunderBirdのアドオンをいくつか

職場のメーラーはThunderBirdを使っている。ThunderBirdはSpamフィルタが標準状態でも優秀なのが嬉しい。Gmailとかちょこちょこ判定ミスるけど、ThunderBirdはしばらく使うと殆どミスらない。てことでオススメのアドオンをいくつか。

Lightning

カレンダー&Todo管理ツール。ThunderBirdを使うならこれが無いと始まらないくらいの感覚。これを使えば仕事関係の情報をThunderBirdに集約できる。

ただ、ちょっと開発が活発じゃなくなってるようで残念。機能的に物足りない点も結構ある。

iCal形式を(イン|エクス)ポート出来るのも便利。勤務実績登録用のカレンダーを作成して、毎月末にiCalファイルをエクスポートしたのをPerlで解析して、その月のプロジェクト毎の稼動時間とかを集計するのにも利用している。

でも、エクスポート時は全部の予定が出力されるので、一月分だけエクスポートとかそういう柔軟さが欲しい。エクスポートしたデータを再インポートすると同じ予定が2個できたりするし。

あと、複数日に跨る予定をガントチャートっぽく表示できたりして欲しい。

Contacts Sidebar

これは標準でついててもおかしくない機能。Gmailなんかそうなってるけど、左のサイドバーにアドレス帳を表示させて、クリックしたらその人宛にメールを書く事が出来るというもの。F4キーで表示をトグルできるので、フォルダを見たいときはすぐに消せる。

Xnote

Becky!やNotesクライアントは送られてきたメールの本文を自分で編集できたりする。送られてきたメールに情報を書き加えたり出来たり、件名がいじれると記号を付けて強調できたりするのが便利です。

ThunderBirdはそれが出来ないんだよね。タグとかはあるけど。確かに他人のメールを変更出来るのは問題がある気もするし。

で、それを解決するのがXnote。これは、メールの本文に付箋みたいなのを貼り付けられて、そこに補足情報を書き込むことが可能です。本文に書き込むのと違って自分が捕捉した情報だってこともすぐに分かります。

ただ、ちょっと問題がある。まずは、その付箋部分は印刷されないこと。そして、付箋部分は検索出来ないということ。その辺が残念。

withAttach

何気に便利な添付忘れを警告するソフト。"attach"とか本文中に入っているのに、添付ファイルが無いと送信時に注意してくれる。デフォルトでは英語のキーワードしか入ってないけど日本語の追加も可能。「添付」とか「写真」とか。

メールの作成を始めるときに「添付付きで送付する」ってオプションも選べるようになり、これを選ぶと添付漏れを警告してくれる。

投稿者 Songmu : 23:40

2009年4月19日

EmEditorのススメ

EmEditorのマクロにPerlが本格的に使えることを最近知って、今まで何を無駄な事をやってきたんだろうと愕然としている今日この頃。

エディタは昔は秀丸だったんだけど2003年くらいにEmEditorに乗り換えた。当時秀丸だとgrepで中国語が引っ掛けられなかったのと、確かgrep置換がEmEditorが先に実装されていたからだった。

でも、機能的には大差ないはずなんだけど、EmEditorって秀丸に比べると大分知名度が落ちる。ネット上の情報も少ないし。職場だと秀丸は多いけど、EmEditorを使っている人どころか知っている人すら居ない。前の職場もそうだったな。

先に定番化してユーザーを獲得しちゃったから乗り換える人も少ないのでしょう。秀丸はシリアルが出回っちゃってるからとりあえず最初はそれで使うって人が多いのかも知れないし。あと、EmEditorは書籍が無いなぁ。執筆の話は出てるみたい。期待。

つまり後発で同等の機能の製品だと、どんどん差が開いていく一方ってことですかね。

でも以下のような点が優れているので、EmEditorは一押しです。

  • マクロがPerl(その他色々)で書ける
  • シンタックスハイライトが最初から色々揃ってる(VBScriptとかもある!)
  • 多言語対応がすごい。utf8で中国語検索が可能なだけじゃなくて、GB2310とかBig5とかも!
  • 正規表現がPerl互換で強力!(秀丸は"\b"(単語境界)とか対応してなかった気がする。変数名とかでプログラムコードを検索するときなんかに"\b"は便利)
  • 単語補完が強力
  • 外部ツールとの連携もしやすい
  • アウトラインとかプロジェクトツールバーが便利(らしい)

てな感じ。

投稿者 Songmu : 23:36

2009年4月18日

Twitter再開というか本格開始(かな?)

職場で調べ物とかしているときに気づいた事とか、メモっておきたいとか、ちょっと言いたくなる事がある。例えば以下のような感じ。

  • Windowsだと"con"とか"aux"とかのファイル名って付けられないんだ!今更知った。
  • SQL Serverに複文SQL投げるときにセミコロンで区切らなくて良いとかおかしくね?おせっかい機能がセキュリティホールの原因になっているというMSにはよくあること
  • オフィス用のサンダル買わなきゃ。ピュアウォーカーってやつが気になる

こういうのってTwitter使えば良いじゃんとか思って、職場のエディタマクロと「ファイル名を指定して実行」から投稿できるようにした。こういう仕組みを作ると使いやすくなるね。

ユーザー名は"songmu"です。気が向いたらフォローして下さい。

ついでに、このBlogの右にも最近のつぶやきが出るようにした。Flash版だと幅が足りなかったのでHTML版。デザインもあわせやすいしね。というか、そろそろデザインも全体的にいろいろ何とかしないととか思ってはいるんだけど...。

投稿者 Songmu : 23:01

2009年4月17日

Akamaiが想像以上に物凄かった件 in Akamai勉強会

続きというか、お詫びを書きました。

文章を多少修正しました。技術的な点は色々誤りがあると思いますので、あまり信用しないでください。詳しくはgeekpageさんがじきに書いてくださるはずです。


入口にあった、Akamaiサーバーがリアルタイムに捌いているトラフィックを可視化した地球儀が映ったモニター。アメリカが早朝なのでトラフィックは850Gbpsと少な目(笑) それでもアメリカのバーの長さは凄い
やすゆきさんという方が、Blogでひっそりと告知していたのが、IT勉強会カレンダーに載っていて、それを目ざとく見つけて行ってきた次第。募集枠5人とかだったので、焦って申し込んだら、実際そんなに募集は来なかったみたいで意外。僕なんか「Akamai」って書いてあっただけで飛びついたのに。内輪に近いノリだったてのもあると思うけど、案外「Akamai」には訴求力が無いのかね。まあ、インターネットの裏の支配者って感じだからね。

参加者はgeekpageの人とか、生涯一プログラマの吉岡さんとか、SFCでネットワーク専門にやってる学士の人達とか少人数ながら錚々たる面子。

Akamaiの中の人が色々話してくれたんだけど、参加者からは矢継ぎ早に質問が投げかけられ、非常にホットな勉強会になった。私も質問するタイミングを図るのが大変でした。

参加者全員が「来て良かった」「想像以上だった」と大興奮な内容で、勉強会終わった後の懇親会でもAkamaiの方への質問は終始絶えなかった。

ここには書けないような話題もあったので、書ける範囲で書く。技術的な面は、他の人の方が詳しいだろうので、それ以外のところ。

Akamaiとは?

インターネット接続の不安定さを解消し、顧客企業のWebコンテンツ配信の信頼性を高めるサービスを展開している世界最強のCDN。

独自のコンテンツキャッシング技術、ピアリング技術、キャッシュへのDNS動的割り当て技術等によって、顧客企業のWebサイトを「Akamai化」することにより、コンテンツ配信の信頼性を100%(99.999%ではない!!)保証している。アメリカで100%を謳うとかありえない!

オライリーの「ハイパフォーマンスWebサイト」には、米国トップ10サイト中5サイト(amazon, aol, ebay, myspace, yahoo)でAkamaiを利用と書いてありますが、今やもっとすごい状況になっているみたいです。アメリカの国防総省も使ってるみたい。これはWikipediaに載ってるから書いてよいよね。

最近はゲーム業界も大手はほぼ全てがAkamaiを採用していて、Akamaiにとっては美味しい状況だとか。確かに、オンラインゲーム切れたらまずいもんな。

Googleと同い年!

Googleと同い年だそうです。インターネットの表と裏の支配者がほぼ同時にスタートしているってのは興味深いですね。

ちなみに、アート引越しセンター理論と同様に「A」から始まる名前にしたかったとかで、ハワイ語の「Akamai」にしたんだそうな。英単語でAから始まるものなんて当然ながら全て他の企業に押さえられていたわけです。ちなみに「Akamai」は、CleverとかInteligentとかいう意味なんだそうだ。

世界のWebトラフィックの15%程度をさばいている!

2009年3月現在、世界全体のインターネットトラフィックは、20Tbpsくらい。その中の10TがWebで使われていて、有効活用されているのは7Tくらい。その中の1TbpsをAkamaiはさばいている。つまり世界のWebトラフィックの15%程度をさばいている。

去年の末で、トラフィック総量が15Tbpsくらいだったらしいので、今も指数関数的な勢いで世界のインターネットトラフィックは伸びている。また、Web関係じゃない残りの10Tbpsのトラフィックの中で、利用が目立つのはP2P。

オバマ大統領の就任演説ストリーミングにもAkamaiが利用されたようで、そのときは世界同時700万アクセス、2Tbpsのトラフィックをさばいたそうな。

ちなみに日本の国会中継のストリーミングは同時接続500でダウンするらしく、そんなのに何億円もかけててアホかと。

個人的にはもっとさばいているのかなと思っていたのだけど、Akamaiとは関係のない個人のWebサイトとかそういうロングテールの部分がWebでは大きいんだなぁと改めて認識。

独自のデータセンターやネットワークを持っている訳ではない!

これは皆驚いていました。ISPにAkamaiのEdgeサーバーを置いて、それらを連携させることによってサービスを実現している。今や世界の半数以上のISPに総計4万台のサーバーを置いているのだそうだ。でもたった4万台。これも驚き。

つまりAkamaiはISPに間借りしているわけだけど、ISPからしてみても、Akamaiのサーバーを置く事にはかなりのメリットがあって置きたがる。Akamaiサーバーが外部コンテンツのキャッシュしたりキャッシュされてない情報もピアリングしてきてくれることによって、外部とのトラフィック(=通信費)を抑えることができるから。ISPは隣接しているISPとの通信状況しか分からないわけだけど、Akamaiサーバーは全世界のネットワークの状況が分かる訳なので。

各Akamaiサーバーの状況は、20秒毎に更新され把握出来るようになっていて、冗長化も遠隔管理体制もばっちり。多少落ちても痛くも痒くも無い。リモートでOSをインストール(!)出来るようになっていて、必要なときは一部Windows機に切り替えたりもするみたい。仮想化は検討中だがまだやっていないとのこと。

ビジネス特許も強い!

Akamaiが強い理由として、そのデファクト的な強さのほかに、パテント的な観点もある。技術的な特許のほかに、そのビジネスモデル自体にビジネス特許がかかっていて、競合の参入が難しい部分があるようです。

「秘密結社Akamai」とかそういうジョークも飛び出していました。

動的コンテンツもキャッシュ出来る!

これもすごい話。CDNというと、静的コンテンツのキャッシュのみという印象がありますが、Akamaiは顧客企業から情報をもらうことによって、Akamaiサーバーで一部の情報を処理することも可能みたいです。

ショッピングサイトなんかが混み合っているときに、これまでの行動履歴から購入意欲の少なそうだと判断した人はAkamaiサーバーのエラーメッセージで止めてしまって、購入意欲の有りそうな人に優先的に実サーバーへのアクセスを割り振るなんてこともやっているとのことでした。

もちろん上に書いたようなことは何れもサーバー側の自動処理なので、社員はそういう情報を見たりは出来ない。Akamai社員がAkamaiサーバーに実際に触る事自体に社内的な規制がかなりかかっているみたい。

その他

ユーザー毎にDNSを動的に書きかえる技術なんかも驚いたけど、これについてはもっと正確に解説出来る人がいると思うのでここで多くは書かない。

中国にも現地法人があって、Akamaiサーバーは置いてあるけど、デフォルトでは機能はオフになっている。中国政府にコンテンツの審査を申請して、一ヶ月位したら許可が下りてやっと公開できるという流れになるらしい。

ただ、共産圏には基本的にはAkamaiサーバーは置かせてもらえないらしく、例えばロシアには置かれていない。中国は実はどちらかというと寛容で特殊な例。

Akamaiのサーバーが攻撃されても、もともとISPにAkamaiサーバーを置く際に、そのISP自体のトラフィック許容量よりも高い許容力をサーバーに持たせるので、Akamaiサーバーが落ちるよりも早くISPが落ちる(笑) もちろんそんなことになる前に攻撃を弾いたり他のサーバーに流したりとかやりようはいくらでもある。いわば、全世界に40,000台のファイアウォールがあるようなもの。

数年前にAkamaiが落ちた事があったけど、その原因を聞いてしまった。リンク先にあるようにDoS攻撃が原因ではないみたいです。流石にこれ以上はここには書けません。

修正点について 2009/04/22 12:25

  • タイトルがあまりにもひどかったので修正しました。
  • 「ルーティング」の記述誤りを「ピアリング」等適宜修正しました。また、ルーティングをしているように思われてしまう箇所を削除しました。
  • 「Akamaiはインターネットの動向、ひいては業界の動向が丸分かり」というようななことを書きましたが、Akamaiサーバーがキャッシュしているのは顧客サイトの情報だけに過ぎず、また、内部統制や仕組み上、Akamai社員がそういう生の情報にアクセスすることは不可能なので、誤解を招くような文章(株を買っちゃ駄目、等)を削除しました。
  • ビジネス特許の話は、私自身がビジネス特許への理解があいまいだったのと、それも原因となり余計誤解を招く文章になっていたこと、文章があまりにもひどかったこともあり、全面的に書き直しました。
  • SSLキーを預けているかは定かではなかったので、削除し、書き直しました。単にSSLを含めた動的コンテンツの一部もキャッシュ出来るということが驚きだったということです。

投稿者 Songmu : 22:48 | トラックバック

2009年4月10日

コードブロック引数をオプションにできたら嬉しいんだけど

Perlに標準バンドルの配列操作のモジュールList::Utilにmax関数てのがある。List::Utilは便利なモジュールでPerlベストプラクティスでは積極利用を推奨していて、その辺の事はこの辺でも紹介されている。

で、なんとなくこんな使い方出来ないかなとか思ったけど無理でした。

use List::Util qw/max/;
...
my @lines = <$fh>;
#my $max = max {length} @lines; #こう書けたら超美しいと思うんだけど!
my $max = max map {length} @lines; #こう書くしかないのが残念

つまり、sortみたいにコードブロックを引数で持つ事もできて、渡さないときはデフォルトの動きをする、みたいな感じだったら良かったなぁ。

でも、考えてみると、Pure Perlでそれを実装する方法って無いのか。プロトタイプで&を指定するとコードブロックが省略できなくなっちゃうしな。ちょっと残念な感じ。XS使えば出来たりするのかなぁ。

投稿者 Songmu : 23:45 | トラックバック

2009年4月 9日

真か偽かは状況次第ってのは真理ではあるんだけど

Perlの真理値関連で若干はまったので書き留めておく。

my $hoge, $fuga;
$hoge =  $fuga  = 0; # $hoge: 0, $fuga: 0
$hoge = ($fuga) = 0; # $hoge: 1, $fuga: 0

下の代入では、リストがスカラーコンテキストで評価されているので、要素数の1が入る。少し考えるとなんでこうなるかはわかるんだけど、Perl的な考え方が自分に浸透してないと戸惑うね。

この関連でサブルーチンから値を返すときに、return undef;とかやるとハマるってのがある。

sub hoge{
    return undef;
}
my $hoge = hoge();
my @hoge = hoge();
 
print 'scalar' if $hoge;
print 'array'  if @hoge; #こっちは表示される!

@hogeは要素数が1の配列なので、ifに渡されると評価が真になってしまう。

こういった挙動を解決するための、Perlベストプラクティスでは、「裸のreturnを使う」ってのが推奨されている。でも、return;だとなんだかサブルーチンが正常終了したように見えてしまう。なので、return ();と書いたほうが、空の値を返していることが明確なのでこっちが個人的ベストプラクティス。return $hoge || ();みたいな書き方も出来るしね。

sub hoge{
    return ();
}
my $hoge = hoge();
my @hoge = hoge();
 
print 'scalar' if $hoge;
print 'array'  if @hoge; #どちらも出力されない

ただ、この場合にもちょっとしたはまりパターンがある。mapを使って配列の要素を一括変換かけるときなんかは、判定で偽になっても、場合によってはundefを結果セットに突っ込んで欲しいことも有り得るが、それがうまくいかない。

sub removeNaN{ #数字以外を削除する
    my $num = shift;
    return () unless $num =~ /\d/;
    $num =~ s/\D//g;
    return $num;
}
my @array = qw/10g 33 66m p151 hoge 9/;
my @nums = map {removeNaN($_)} @array;
print join ' ', @nums;#10 33 66 151 9 #要素数が減ってしまう!

こういうときは、明示的にreturn undef;と書かないといけないんだろうな。

最近はPerl5に真理値型がないってのはちょっと不便な気もしてきた。「世の中に絶対的な真とか偽とかはない、それはコンテキストで判断されるのだ」っていうPerlの考え方は好きなんだけど。

投稿者 Songmu : 22:20

2009年4月 2日

イントラ上で印刷禁止のページを印刷させない方法

社内のイントラ内で公開されているドキュメントで「印刷禁止」とかなってるものがあるじゃないですか。

そういうページにはCSS内でこんな指定をしておいて、印刷されたくないhtmlに<body class="unprintable">とか書いておけば、そこそこ印刷を防げると思う。勿論ちょっと細工すれば印刷は可能なんだけど、こうしておくだけでもハードルはあげられる。

@media print{
  body.unprintable{display:none;}
}

でも、そしたら「印刷禁止のページも印刷できるようにするbookmarklet」とかが出回ったりするのかも知れないなぁ(笑) 技術者って必要がなくても制約があったら破ってみたくなるもんだし。

本当に印刷されたくなかったら印刷不可PDFを使いましょうってことで。

ちなみに"unprintable"って英単語は適当に考えたんだけどちゃんとあるんだね。でもちょっと意味合いが違うみたい。イヤーン。

投稿者 Songmu : 23:59

2009年3月19日

お前どれだけPerl好きなんだと自分でも引くわ

マスタリングPerl」を発売日に買った。同僚に「何の本買ったの?」と聞かれて、

「今日発売のPerlの本」

と答えてる自分に引いた。ちなみに「モダンPerl入門」も発売日に買ったと思う。「モダン Perl」で検索で来る人が結構いるのでちゃんと書評を書こうとか思ってたり思っていなかったり、思っているうちに時期を逃したり。

最近正規表現とPHPで祭りになってるけど、多くのPHPプログラマはコピペ好きだからね。と言うか初心者が多いからコピペ使用率が高いのか。

未だにsession_cache_limiter('private must-revalidate');だなんて間違ったおまじないがまかり通っていたりするし。

コピペするより自分で書いた方が速いってことに早く気づけば良いと思う。正規表現なんてぱっと見難解だけど、実はたいして難しく無い。

ただ、正規表現はちゃんとわかって無いと「一見正しく動いているように見える正規表現」が簡単に出来てしまうので、そこが本当に危険。以下正しそうだけど全然正しくない正規表現の例。

#英数字8~16文字のIDチェック(のつもり)
/[a-zA-Z0-9]{8,16}/               #先頭と末尾のチェックを入れていない!
#簡易IPアドレスチェック(のつもり)
/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/ #ドットをエスケープしていない!

Web系のエンジニアにとっても、今や正規表現なんて必須なんだから、先ずは「ふくろう本」を一回しっかり読めば良いと思う。この本はオライリーのこの厚さの本にしてはかなり読みやすいし。

あとは普段のエディタ編集で、正規表現を常用していれば自然と身につくんじゃないかなぁと思う。

投稿者 Songmu : 22:50

2009年3月15日

Perlのサブルーチンプロトタイプについて

プログラミングPerlとPerlベストプラクティスを読み返して勉強しなおした。概要としてはこんな感じ。

  • サブルーチンの引数の型を指定出来るようになる
  • 暗黙的にリファレンス渡しができるようになる

例えば、組み込み関数のpushは第一引数に配列を取るが、暗黙的にリファレンス渡しになっている。(引数リストとして展開されない)

このような挙動は通常のPerlのサブルーチンの仕組みでは実現できないが、プロトタイプを使うと実現できる。

sub my_push(\@@){
  my ($arr_ref, @arr) = @_;
  for(@arr){
    $$arr_ref[$#$arr_ref+1] = $_;
  }
}
my @test_arr = (1,2,3,4,4);
my_push(@test_arr, 1,2,3);
print join ',',@test_arr; #1,2,3,4,4,1,2,3

ただし、サブルーチンを呼び出す時に&(アンパサンド)をつけるとプロトタイプは無視され、引数指定を無視してもコンパイルエラーにならない。なので、アンパサンドをつけた関数呼び出しは一切しない方が良い。

昔は、自分で定義したサブルーチンは組み込み関数と混同しないように、アンパサンドを付けるのが流儀だったが、今はアンパサンドをつけないのが主流。

その代わり、組み込み関数は括弧無しで呼び出して、ユーザー定義サブルーチンは括弧付きで呼び出すと言うのが流儀。

join ',', @array;           #組み込み関数
my_subroutine($hoge, $fuga); #ユーザー定義サブルーチン

そもそも、ファイルハンドルも$付きが推奨されている昨今、コード内に裸のワードは組み込み関数とサブルーチンくらいしか出てこないのである。

open my $fh,'<','hoge.txt';

勿論、自分が定義したサブルーチンを裸のワードで使っていると、将来的に定義された予約語、組み込み関数とバッティングする可能性があるが、そんなサブルーチン名を定義しない or ちゃんとオブジェクト志向モジュールにする、という対策をしておけば問題は起こらない。

しかし、プロトタイプは意図しない挙動をして混乱を招きやすいので使わない方が良い。例えば以下。

sub max($$){
  my ($arg1, $arg2) = @_;
  return $arg1 > $arg2 ? $arg1 : $arg2;
}
print max(3,5);   #5が出力
my @hoge = (3,5);
print max(@hoge); #エラー:Not enough arguments!

no strict 'refs';と感覚的には同じで、上級者向けって感じかな。例えば、&を使ってサブルーチンリファレンスを引数として持たせると新しい構文を作り出すことが出来て面白い。以下、プログラミングPerl p263より引用。

sub try(&$){
  my ($try, $catch) = @_;
  eval { &$try };
  if ($@) {
    local $_ = $@;
    &$catch;
  }
}
sub catch(&){ $_[0] }
#実行
try{
  die "phooey";
}
catch{
  /phooey/ and print "unphooey\n";
};

Perl6では他の言語同様サブルーチンの引数付き宣言も出来るようになるみたいだけど、個人的には従来の引数の指定方法は好き。Perl覚えたての頃は奇妙に思えるけど、そっちの方が引数がその関数ブロックの中のスコープにあると言うことが分かりやすいから。

sub my_sub{
  my ($arg1, $arg2) = @_; #$arg1と$arg2が関数内ブロックのスコープにあることが明らか
...
}

投稿者 Songmu : 23:06

先月はPHPで今月はPerl

今月はPerlの改修案件の仕事をやっている。スクラッチから書くのではないのでもともとのコードの書き方に悩まされている。「use strict」されていないコードがあって、こんな感じのコードが書かれていた。複数のコードが共有する変数がまとめてある。

package MyApp_GLOBALS;
use base 'Exporter';
@EXPORT = qw($HOST_IP $APP_PATH);
  
$HOST_IP = '192.168.0.1';
$APP_PATH = '/home/songmu/myapp/';
 
1;

変数宣言されていない変数が大量にあったのだが、その場合変数のスコープがどうなるか分からなかったので調べてみた。

  • 基本的にはourでの宣言と同じでグローバル変数になる
  • ただし、親ブロックや同一スコープ内で既に同名の変数が宣言されている場合は、警告無しに上書きしてしまう

と言うところのようだ。まあ、素直にour宣言しておきましょうってことですね。そうしないと意図とは違う動きをする可能性があって危険。ourはPerl5.6で追加されたものらしいので、書いた人は知らなかったようだ。正しくはこんな感じかな。

package MyApp_GLOBALS;
use strict;
use warnings;
use Readonly;
use base 'Exporter';
our @EXPORT = qw($HOST_IP $APP_PATH);
 
Readonly our $HOST_IP => '192.168.0.1';
Readonly our $APP_PATH => '/home/songmu/myapp/';
 
1;

あとはプロトタイプとか使われているところとかあって、それで何故かサブルーチン呼び出しがアンパサンド付きになったりしているのが謎。プロトタイプとかPerlベストプラクティスで非推奨になってたから全然使おうとか考えた事もなかったが、いまいち理解していなかったので、プログラミングPerlを引っ張り出して勉強しなおして、Perlベストプラクティスを読み返してなぜ非推奨なのかも理解しなおした。

投稿者 Songmu : 00:46

2009年2月20日

PHPの正規表現と文字列

PHPで正規表現を扱う上で、正規表現パターンの記述で迷ってしまっている人が多い気がする。

  1. PHPが文字列を生成する
  2. その文字列を正規表現エンジンに渡す

と言う2段階の手順があり、そこがやや複雑なので混乱を招く部分があるのだと思う。

混乱を防ぐためには、その手順をしっかり追って、正規表現リテラルとして指定している文字列をechoしたらPHPがどのように出力するかを考えてみると良い。

例えば以下のようなコードがあったとする。

preg_match('/\\d/','3d');

まず、preg_match()の第一引数になっている正規表現パターンをechoで出力するとどうなるかを考える。

echo '/\\d/'; #/\d/

なので、/\d/が正規表現エンジンに渡されると分かる。なので、上記のパターンはマッチする。

さらに混乱を招きやすくしているのが、PHPの文字列の仕様で、特にバックスラッシュのエスケープに関する仕様だ。

PHPマニュアルの文字列の項より抜粋。

引用符をリテラルとして指定するには、多くの他の言語と同様にバックスラッシュ (\) でエスケープする必要があります。 バックスラッシュを引用符の前または文字列の最後に置きたい場合は、 二重にする必要があります。この他の文字をエスケープする場合には、 バックスラッシュも出力されることに注意してください! このため、 通常はバックスラッシュ自体をエスケープする必要はありません。

つまり、エスケープが必要な文字が後に続かない場合、バックスラッシュはそのまま出力される。ただし、バックスラッシュをエスケープしても構わない(エスケープしないと正しく表示されないケースもある)。このエスケープするときのみバックスラッシュを意識すればよいという一見親切な設計が、混乱を招いている。実にPHPらしい。以下実例。

echo '\a'   ; # \a  そのまま出力される
echo '\\a'  ; # \a エスケープされて出力
echo '\\'   ; # \
echo '\'    ; # !Parse Error 「'」がエスケープされ、文字列が閉じてないとみなされる。
echo '\\\a' ; # \\a 一方のみエスケープされるので2つ出力
echo '\\\'  ; # !Parse Error 文字列が閉じていない
echo '\\\'' ; # \'
echo '\\\\' ; # \\
echo '\\\\a'; # \\a

解決策としては、バックスラッシュを書くときは、問答無用でエスケープしてしまうのが正解だと思う。1つ書きたいなら2つ重ねて。2つ書きたいなら4つ重ねて。

1つだけでもちゃんと出力してくれるときがあるので、逆に良く分からなくなっているのだと思う。3つ重ねると、2つ出力とか分かりづらい。そんなありがた迷惑な挙動はお断りしてしまいましょう。

また、ダブルクオート文字列内でエスケープ文字を記述する際にも混乱が起きやすい。PHPの文字列としてマッチさせようとしているのか、正規表現エンジンにマッチさせようとしているのかで混乱してしまうからだ。以下は、何れもタブ文字を削除するコードになる。

$str = str_replace("\t",'',$str);
$str = preg_replace("/\\t/",'',$str);

正規表現を使ったpreg_replaceだと、バックスラッシュを重ねる必要がある。さっきも述べたように、"/\\t/"をechoすると、/\t/になるので、それが正規表現エンジンに渡っているからだ。

このように、PHPで正規表現を扱う際には、一種のメタプログラミング状態になってしまっているので理解が難しい。

投稿者 Songmu : 01:20

2009年2月19日

PHPオンラインマニュアルが充実しているのは確かに素晴らしい、が

PHPは日本語のオンラインマニュアルが充実しているのが何気にすごい。多くの人が迷っている結構重要な事に対する答えが実はしれっと書いてあったりする。

ただ、それ以外の個人のBlogレベルになると、なかなか信用が置ける情報が少ない。純粋にPHP4時代のものもあるし、そもそも間違っているものも少なくない。この人が書いているなら間違いないっていうBlogが無い気がする。

投稿者 Songmu : 23:00

2009年2月17日

PHPの書籍をまとめてみる

一応PHPも業務で使えるレベルになったと思うので、これまで学習がてら入社前、入社後に読んだPHPに関する書籍をちょっとまとめてみる。

初めてのPHP&MySQL

PHP言語とPHPでのWebアプリケーションについてイメージを掴みたく、ざっくり網羅している本が読みたかったので最初に買った本。大体狙い通りの内容が書いてあった。他の言語である程度開発経験がある人が、PHPでのWebアプリケーションの開発となった際にこれを読めばコーディングは始められるかなという感じ。古い情報もあるけどね。

PHPサイバーテロの技法 攻撃と防御の実際

これはめちゃくちゃ良い本。PHPに限らずWebアプリケーション製作者必読書だと思う。様々な攻撃方法と、それに対する防御方法を事細かに書いてある。それでいて単なるケースワークに留まらず、攻撃方法が分類されてまとめられているので、Webアプリケーションのセキュリティに対する知識がしっかりと身につくと思う。恥ずかしながらヌルバイト攻撃の具体的な内容はこの本を読んで初めて知った。

それと驚いたのは画像ファイルのExif情報もXSSのターゲットに成り得ると言うもの。画像共有サイト等で撮影カメラの情報等のExif情報を読み出す処理を行っているWebアプリケーションでは、Exif情報にjavascriptを埋め込まれて攻撃される可能性があるので、ちゃんとExif情報のチェックを行わないといけないという。

確かにそうだけどすごく盲点。そういうことを考え付くヤツがいるってのが恐ろしい。


上記2冊が入社前に読んだ本。以下2冊が入社後に読み足した本。

プログラミングPHP

結局言語仕様とかちゃんと知りたくなって買ってしまうんですよ。馬鹿だよね。分量も少なくさくっと読めた。PHPは良くも悪くも関数依存で複雑な機能は無いので本の中で別段難しいところは無かった。

PHP5系が対象の本だけど、既に古くなってしまっている情報もあって、クラスのメンバ変数の宣言がvarだったり、DB連携のモジュールでPEAR::DBを取り上げてたりする(PDOの項目も少しあるけど)。その辺少し注意かな。

まるごとPHP! vol2

PHPの最新動向を知りたくて、実践的なコードを読みたくて買った本。

再学習PHP5の項目では、php.iniファイルついての解説や、オブジェクト指向、例外処理、PDOなどへの解説がしっかり書いてあって、かなり有用でした。「プログラミングPHP」よりも知りたい情報が書いてあったかも。

フレームワークの比較や、テスト駆動開発などについての記事も面白かった。期待していた以上に役に立った本。

投稿者 Songmu : 23:26

2009年2月16日

怖さを知らないルーキー的な

コードを書くのが楽しくて仕方が無い状態。予定よりも早く実装も進んでいるので、周りにも驚かれてます。

プロ野球で言えば、投げるのが楽しくて仕方が無いルーキー状態。そのうち手痛い洗礼を浴びて、プロの怖さを知ったりするのでしょう。

PHPもそんなに悪くないかなとか思ってると、ASPとかJSPとかのapplication変数(オブジェクト)的なものが標準で無かったり、private staticなメンバ変数を宣言できなかったり、連想配列にarray_shift関数を使うと大変な事になったりと、ちょっと油断するとひどい目にあわされるもんだから油断できない(笑)

HTML+CSS、正規表現とかなら社内でも出来るほうなんじゃないかとか思い始めた今日この頃。あんま自慢にならないけど。

投稿者 Songmu : 23:15

2009年2月11日

iPod touchをテキストリーダーにしたいの巻

前職に比べると通勤時間帯が普通なんで、通勤電車で座れない事が増えてきた。座れなくても混んでなきゃ良いけど、混雑してるとまともに本も読めない。サイズの大きいオライリーの本とか読んだり出来ない。

立ったまま無為に過ごすのも勿体無いなぁと言うことで考えたんだけど、私はiPod touchという便利なものを持っているわけです。これをテキストリーダーにして、なんか自動で取り込んで通勤電車で読めば良いじゃんとか思ったのが始まり。

新聞記事とかPlaggerで整形して、自分用にRSSとPDF作って、iPodでPodcastすれば良いんじゃね? とか思っていたら、おま、iPodってPDFをPodcast出来ないのかよ! そんな気はしてたけどさ。PDFそのままで読めそうにないし。

これまたそんな気はしてたけど、そもそもリーダーアプリを入れないといけないみたいなので、テキストリーダーアプリケーションを物色した。やっぱり似たようなことを考える人は多いらしく、iPod touch用のブックリーダー、テキストリーダーは豊富でした。そんな中、青空文庫用のSkyBookStanzaをインストール。

SkyBookはスゲー快適。新しいアプリで意欲的に新機能を盛り込もまれている段階ってところが良い。青空文庫のルビに対応しているのも大きい。

タップしてページ送り、シークバーを使えばページをぱらぱら送る事が出来たりと、ああ、これが出来ればブックリーダーとして文句は無いなという出来。

とりあえず、小栗虫太郎の黒死館殺人事件をダウンロードして読んでます。いやー、これが無料だなんて改めて青空文庫素晴らしいね。

ただ、SkyBookは縦書きオンリーなので読書する分には良いんだけど、WEBからの記事なんかを読む分には横書きの方が良いかなぁとか思って、Stanzaもインストール。こちらもSkyBookと同様の機能を備えてます。もともと英語圏のソフトなんで、ルビ表示とかは出来ないけどね。

何れも自分で作ったファイルも取り込むことが出来るんだけど、SkyBookは青空文庫形式のテキストファイルで、Stanzaはepub形式。

青空文庫形式は独自の日本語マークアップランゲージって感じで、なかなか面白い。例えばこんな感じ。

霜月|酉《とり》の日
[#改丁]
[#ここから4字下げ]
・・・
[#ここで字下げ終わり]
[#地付き](この日記終り)

記号も全部全角でマークアップされているのが面白い。一番上はルビの設定で、縦棒以降がルビ対象になって「《》」内ににルビを降ると言う仕様になっている。青空文庫のボランティアはみんなこのルールに従って打ち込みをしているみたい。

epub形式はまだまだ日本語の情報は少ないけど国際的に電子書籍の標準形式になろうとしている規格のようです。

拡張子が、epubでバイナリ形式のファイルかと思いきや、実は単なるzipファイルで中身はxmlファイルでした。レイアウトもxhtml+CSSが使えるみたいなので汎用性があって良いですね。

ただ、いかんせん日本語の情報が少ないので、デスクトップ版のStanzaが生成したepubファイルを解凍して解析したり、idpfのサイト(http://www.idpf.org/)を見たりして勉強中。

日本語の情報が少ないから、逆にちょっと頑張って上記サイトの翻訳でもしようかなとも考え中。

てことで、テキストデータをファイル形式に応じて整形してやってiPod touchに取り込めばよいのです。

ただ、取り込むのも問題があって、iFunBoxってプログラムを使えば、iPod touchにファイルを転送出来てそれはすごく便利なんだけど、最終的に自動的に同期とか精々ワンボタンで同期とかそういうレベルに持って行きたいよなぁとか悩みは尽きません。

というか実際に最初に書いた事が簡単に実行できるようになるのがいつになるのだか見当も付かないのだが、とりあえず、SkyBookで黒死館殺人事件が読めているので当初の目的とは違いますがそれはそれで満足だったりします。

投稿者 Songmu : 23:59

2009年2月 8日

EASEUS Partition Managerが便利

自宅で使ってるパソコンがデュアルブートになっていて、WindowsとLinuxを共存させていたのだが、Windowsの空き領域が残り3GBと少なくなったので、Linux領域を潰すことにした。

再インストールもメンドイのでパーティション弄るツール探してたら、EASEUS Partition Managerてのがあって、それを試した。別にデータ飛んだら再インストールすればよいだけの話だし。

Windowsにインストールして、パーティション変更内容を決めて再起動。後は勝手にやってくれて、1時間くらいで問題なく正常起動。あまりの簡単さと素晴らしさに感動したね。

これで容量は60GBになったので、OSとプログラムだけでそうそう使い切ることはあるまい。

メインをLinuxにする事を考えてた時期もあったけど、なんだかんだでWindowsのまま。Adobe製品が使えないのが大きいな。Windows7がクソで、XPのサポートが切れるようだったらLinuxに乗り換えると思う。

投稿者 Songmu : 23:46

2009年1月29日

職業プログラマーは肩が凝る

本格的にプロジェクトにアサインされて、やっとこさ保守の仕事だけの状況から脱却し、開発もすることになった。言語はPHP。

PHP初めてなんで、色々調べながら書いてます。まあ、演算子はPerlチックだし、関数宣言はJavaScriptチックだしで、別にそんなに大変なところは無いね。

ただ、無駄な組み込み関数の多さにうんざり。split('',$hoge)とか出来なくて、str_splitとsplitとかに分かれてるのってアホかって感じ。そのうち、add_one()、add_two()とかそんな関数が組み込まれるんじゃないかとか心配になってしまう。

しかし、連想配列の順序が崩れないのは何気に便利だね。色々出来るし、適切なフレームワークで覆ってやれば便利な言語なんだろうなとか思います。file_put_contents()なんかも便利。

ちなみに本を何冊か読んだくらいなので、PHPのソースってあんま読んだことが無いことに気が付いた。実践的なエラーハンドリングとかがまだ良く分かってない。なんかソースが載っている本を買おう。Web DB PressとかでもPHPの記事読み飛ばしてきたけど、これからはちゃんと読も。

しかし、一日中コード書いてると肩が凝るね。仕事で肩が凝ったのは初めてだよ。初めてノートパソコンのキーボード以外で作業してるから、ポジションとかに慣れてないせいなのかもしれないけど。

投稿者 Songmu : 23:34

2009年1月 9日

tableの森を抜けて

今週はずっとhtml修正と画像加工。10年前からあるサイトなのでいろいろ大変な事になってます。当然、激しくテーブルレイアウトなのです。

DOCTYPEもhtml4.01のURL無しの互換モードなのです。共通テンプレートになっているので、安易に変更できないのです。

てことでCSS書こうにもいろいろ苦労した。互換モードでのCSSコーディングに関する局所的なバッドノウハウが溜まっていくよ。これからかなり役に立つのかもね。

てことで、さっさとhtmlの修正を終えて、システム内で使われてるPerlのコードを読んだんだけど

&jcode'convert

とか書かれていて、一瞬何の事だか分かりませんでした。ああ、そういや、シングルクオートでモジュールの関数呼び出しでこういう書き方もあったんだっけ。変数宣言も全部「local」で「my」とかどこにも見当たりません。

ああ、これはPerl4の書き方なのですね、きっと。

なんだかオラワクワクしてきたぞ。

もちろんこういう自体は想定の範囲内です。COBOL触ったりするよりかはよっぽどマシだよね。

なにぶん私がJavaやPHPでの開発経験が皆無なので、使いどころに困られている部分もあるようで、早めに社内での開発手法等を学んでいきたいところです。

投稿者 Songmu : 23:48

2008年12月12日

オライリーの書籍は新宿紀伊国屋で買うことに決めた

JavaScriptの第5版を買った。第3版を持っているので、なんとなく買いたくなかったのだが、色々必要に迫られて買うことに決めた。

javascriptの本

てことで、第3版と第5版。第5版になって200ページ以上厚くなっているのだが、お値段は据え置き4200円。

CJKVストラップ新宿紀伊国屋で買ったらノベルティー貰った。裏が液晶クリーナーになってる携帯ストラップ。CJKV日中韓越情報処理の本を模したヤツだったので嬉しくなってこれを選んだ。他にも小さい本の形になった付箋メモ帳とかも選べた。

前回オライリーの本買ったときは、Firefoxのシール貰ったし、新宿紀伊国屋でオライリー買うと色々もらえるので今後は新宿紀伊国屋でオライリーの書籍をなるべく買うことにしたい。

投稿者 Songmu : 21:45

2008年12月10日

理想のポータブルデバイスとは?

地図画像やOfficeのファイルなんかをデジタルファイルで持ち歩けて閲覧できるポータブルデバイスがあると便利。転職活動してるときに思った。いちいち念のため地図を印刷するのが勿体無いしメンドイしかさばるし。携帯だとイマイチで。

iPhone・iPod touchとかPSPとかDSとかスマートフォンとかポメラ(?)とかいろいろ候補はあるんだけど、どれもまだまだ発展途上だよね。

用件は以下。

  1. 各種ファイル(PDF、Office、画像)が読める
  2. 画面が比較的大きく文字の可読性が高い
  3. PCからデバイスへの各種ファイル転送・同期が簡単
  4. できればネットが繋がる。gmail・GoogleMap使えると嬉しいなぁ
  5. カメラ。30万画素とかで十分。メモ代わりに
  6. キーボード外付け出来たりすると良いなぁ

てな感じ。

シャープのタッチケータイ、931SHがかなり条件を満たすので、機種変しようか迷った。店頭で触ってみたけど、タッチの反応もよく、欲しい機能も満たされていて、流石は日本メーカーだと思った。

で、色々迷った末、とりあえずiPod touchを購入した。

理由としては今更ながらiPod文化に触れておくかって思ったのと、LDR touchが素晴らしかったってのが大きい

しかしWiFiじゃないと、ファイルのやり取りなんかが出来ないのがメンドクせ。音楽や動画は同期できるけどね。クラックするとやりたい放題みたいなんだけど、とりあえず保留。

ちなみにネットワーク接続の共有(ICS)を使えば、無線ルーター無くてもWiFi接続できる事が判明して狂喜乱舞中。でもヨドバシのポイントでfonのルーター買っちゃったんだけどね。

ちなみに、今年流行りのネットブックは私に言わせれば

「それは私が5年前に通った道だ」

というところです。まだネットブックだなんて言葉が無い頃、VictorがInterLinkっていうA5ノートを出していて、大学の頃はこのPCをメインで使ってました。

小さい割にはスペックも十分で、XP Proが載っていたりして、かなり活躍してくれました。今でもたまに持ち歩いたりします。

ただ、やっぱキーボードが打ちづらいんだよね。使っていた頃は慣れていたつもりだったんだけど、ふと普通のA4ノートを使ってみたら、そのキーボードの打ちやすさに驚愕した覚えがあります。

なので、主に情報のインプットをするだけなら良いんだけど、アウトプットもしたい人にとっては、ネットブックは中途半端。

考えてみると、iPod touch等ポータブルデバイスは、情報のインプットに特化されてて、アウトプットをしたい人向けにはフィーチャーされていない。

そういう人が割合的には少ないからからかもしれないけど、持ち歩けるアウトプットデバイスってのがもう少し注目されると嬉しいなぁ。

ネットブックってのは一つの選択肢だけど中途半端。ポメラは面白い試みだと思う。

ちなみに、ネットブックのポインティングデバイスは、ポインティングスティックがベストだと思うんだけど、なんでどこもかしこもタッチパッドなんでしょうか。ポインティングスティックだと、パームレストを狭く出来てその分キーボードを広くとれる。InterLinkのポインティングスティックはかなり使いやすかった。

投稿者 Songmu : 21:18

2008年11月27日

Shibuya.pmの日に仕事を入れてしまった大馬鹿者の話

半日かからず定員が埋まる中、せっかく定員に漏れずに申し込んだのに、その日に仕事を入れてしまう馬鹿。行けなかった人には大変申し訳ない。

6時半から7時半までの第1・2部のみ聞いて、8時過ぎから出勤。どういう勤務だよ、という。

てことで、Shibuya.pmテクニカルトーク#10に行ってきました。Perlの初心者向け軽量フレームワークの話が多くて私のレベルに丁度良く、面白かった。

Yacafiをちょっと使ってみようと思う。普通に掲示板とか作ろうかな。某所で掲示板を作れとか言われていたような、いなかったような。

追記:

ニコ動にアップされているのを見た。最近はこういう風に行かなくても見られるから素晴らしいね。

mala氏の話が分かりやすくて面白かった。ネタかと思いきやちゃんとした話でした。ネットでは色々話題になっている人だけど、やっぱ賢い人なんだろうなと感じた。

LDRのトップページを読んでる間に、先回りしてキャッシュされてないフィードをパースしてmemcachedに突っ込んどくってのはなるほどなぁと。

やっぱWeb開発でも、新しい考え方を発見して実装するのって大事だよなぁ。そういうことが出来るようになりたい。

mala氏のいる(出戻った・笑)ライブドアは結構行きたかったんだけど、流石に世間的なイメージが悪すぎるかなぁとか思って躊躇してしまって、結局受けなかった。開発がPerlメインで技術力も高いってところはかなり魅力的だったんだけど。

行けるかどうかとは別の問題ですよ?

投稿者 Songmu : 23:16

2008年11月12日

三国志とプログラミング言語

孔明
Ruby
龐統
Perl
周瑜
Python
魯粛
JavaScript
曹操
Java

レッドクリフみてなんとなく思った。

孔明は何でも出来、お行儀が良くて完璧。龐統もほぼ同等のレベルで何でも出来るけど、お行儀が悪くフリーダム。魯粛は不当な扱いを受けていながら実はすごい人。

投稿者 Songmu : 03:18

2008年10月16日

JJUG Cross Community Conferenceに行ってきた

有意義でした。とりあえず、聞いたことをまとめたのを途中まで書いた。順次更新予定。

DOMパフォーマンスチューニング入門

amachangによるJavaScript講座。面白かった。私がテーブルをソートするスクリプトを自分で書いたのを使っていて、これを高速化したかったので、聞きにいった。

議題
  • JavaScriptが遅いんじゃなくてDOMが遅いんだよ
  • DOMが遅いのは、ブラウザのレンダラ側の問題だよ
DOM要素へのプロパティアクセスを意識する

style等でDOM要素のプロパティを見に行く場合、いちいちブラウザ側と通信が発生する。

elm.style.background = "#FFF";
elm.style.width      = "500px";

よりも、

var elmstyle        = elm.style;
elmstyle.background = "#FFF";
elmstyle.width      = "500px";

の方が速い。ドットシンタックスの数を数えると分かりやすい。(上だと4つ、下だと3つ)

ただし、これは無視できるほどのオーバーヘッドに過ぎない。特にFirefoxの場合。IEだと少しは高速化できる。

スタイルの再計算を意識する

JavaScriptでは、変更可能性のあるDOM要素に変更フラグを立てておいて、JavaScript側の処理が終わってから、ブラウザ側でスタイルの再計算、レイアウトの再計算を行う。JavaScriptの処理時間を計るだけじゃベンチマークが取れない!

スタイルの再計算は基本的にはJavaScript側の処理が終わってから行われる。ただし、変更フラグを立てた後、要素のスタイルを再取得しにいった場合は、その場で再計算が行われる。(そうしないとその時点での要素の幅等が出てこないから当たり前っちゃあ当たり前)

なので、どっかの要素に変更フラグを立てた後に、offsetWidthかなんかで要素のスタイルを取得しにいき、また、その要素に変更をかけたりすると、スタイルの再計算が2度走る事になるので、効率が悪い。JavaScript側の処理が終わってから一括してスタイルの再計算がされるようにコードの順番を意識する。

また、変更フラグは、「スタイルを変更したDOM要素」「そのDOM要素のCSSスタイルを継承することによって変更されうる要素」に立つ。

なので、なるべくDOMを掘ってから、スタイルの変更を当てた方が、高速化できる。

レイアウトの再計算

ここが大きなボトルネック。あまり高速化手法は無いが、新たな要素をposition:absoluteで置いてしまうってのは有り。

質疑応答

Q.DOMを高速化する上で、シンプルでクリーンなCSSを書いておくのは有効?そのためのノウハウみたいなものはあるか?(ちなみに私がした質問)
A.そのあたりは出来れば良いのかもしれないけど、分業の問題なので、CSSを書く人側でそういうことまで意識しておく必要は無いんじゃないか。CSS書く人と一緒に仕事をすることが少ない(自分で書く)のでよく分からない。

Q.どのブラウザのJavaScriptが高速だと感じるか
A.圧倒的にWebKit。JavaScriptの処理だけじゃなく、レンダリングも速い。

Q.どうやって技術を学習しているか
A.ソースを読んでいる。WebKitのソースとか別にそんなに難しくない(!!?)。WebKitのソースは拡張子が[idl]のファイルだけを読むだけでも勉強になる。

ギークなお姉さんができるまで

べにぢょさんが「ギーク」をフラットに発音していたのが、気になった。ああ、この界隈では一般名詞化しているんだなぁと思いました。私は後ろを下げて読んでた。

*参考 平板読みは間違い!? 「B'z」の正しい呼び方って?

べにぢょさんはポジティブ100%な人で全然他人の否定をしなさそう。その辺が安心感とか、人気につながってるんだろうなぁとか思いました。

最初は、purpurinが話しすぎかなぁとか思いましたが、最後の方は、purpurinさんの話をもう少し聞きたいなぁとか思った。マークアップエンジニアとしてちゃんとお金を稼げてる人みたいだったから。

purpurinさんが言ってた、

「最初はホームページ作りたかったんだけど、CSSという手段に惚れた」

って言葉はよく分かるなぁと同意。

それと、ひがやすを氏が突っ込んでた

「Webプログラマは(CSSの)スペックは分かるけどデザインは出来ない人が多い」

て言葉も全くだと思いました。なんか、Webプログラマーとデザイナーが交流できるイベントみたいなものの企画みたいな話にもなっていて、期待。

「JavaからRubyへ」アンド・ナウ

面白かった。よくまとまっているエントリーは多くありそうなので、個人的に以下面白いと思った発言を羅列。

  • Webで使われているPHPの代替手段としてのRubyと言う本は多く出ていたが、エンタープライズ目的のJavaからRubyへの移行というニッチが残っていたので「From Java to Ruby」を翻訳した。
  • JavaはCOBOL化している。良い意味で
  • DHHはOO厨(賛辞)
  • 「達人プログラマー」を読め

てことで、3つのセッションのみ参加したが、その次のセッションもペアプロとかしたみたいで、残れば良かったとか思いました。

投稿者 Songmu : 23:34

2008年9月15日

MT4.2にアップグレード

大苦戦した。てことでやったこと。

  • Berkeley DB → SQLiteにDB移行
  • MT3.31 → MT4.21へアップグレード
  • モジュール作ってテンプレートまとめたり
  • 多少CSSいじった

DB移行はすんなりいかないわ、アップグレードしたらテンプレートふっとばすわで、一部MTタグ読まないわで散々でした。

なんとか復旧出来てよかったよ。ホントはコードハイライトするJSを入れようと思っていたのだが、そこまでいかず。トラックバックとコメントも開放しようかとも思ってたりもする。

苦労した点やらはまたいつか。MT4になっていろいろ変わっているみたいだし、結構便利そうな機能もあって、ちょっとしっかり学んでみようかなとか思ってたり。

投稿者 Songmu : 16:59

2008年9月 9日

Template::Declareが便利すぎて、もう二度とタグ打ちしないかもしれない件

こういうモジュールを待っていた。もっと早く出会えていれば良かった。やっぱxmlって手で打つのめんどいから、別のデータ構造をhtmlに反映させる事が出来るツールが最強だとは思ってはいたんだけど、こんな便利なものがあったとは。

こんな感じで書けばhtmlが生成できます。

my @fruit = qw{apple orange banana};
template sample => sub html{
	attr{ lang => ja }
	head{
		title{'test'}
	}
	body{
		p{ 'hoge' }
		ul{
			for(@fruit){
				li{ $_ }
			}
		}
	}
};

テンプレートとして使うことが目的なんだろうけど、単一のhtmlを出力する目的としてもかなり優れています。もう私は、手打ちするときでもこれでしかhtml書かないよ。今後じかに書くことはまず無い気がする。

何せプログラムがコードを出力してくれるわけだから、タグの開閉、ネスティング含め完璧。閉じタグのスラッシュ打ち忘れてレイアウト崩れるとかがなくなるし、他人に渡しても恥ずかしくありません。

ただ、行数がかさむので視認性が劣るときがある。特に属性値を羅列するときに何行にもなってしまうのが問題

それと、テキストノードと他のタグを混在させるのが面倒なのが痛いなあ。

p{#OK
	'this is hoge.'
}
p{#これもOK
	attr{id => "hoge"}
	'this is hoge.'
}
p{#これはNG。エラーになる。
	'this is hoge.'
	br{}
	'this is fuga.'
}
p{#テキストノードに別のタグを続けたい場合は、outs関数を使う。
	outs 'this is hoge.';
	br{}
	outs 'this is fuga.';
}
p{#文字列の中にタグを入れてもバカ丁寧に全部文字実体参照に変換されてしまう
	'this is <strong>hoge</strong>.<br />'
  ."this is <em>fuga</em>."
}

ダブルコーテーションだと文字実体参照に変換で、シングルコーテーションの中だとPerlの文字列らしくそのまま出力されるのでタグを直打ちできる、とかいう仕様だったら嬉しかった。

投稿者 Songmu : 02:38

2008年9月 6日

Google Chromeが@font-faceに対応してないってどういうこと!?

WebKitは飾りですか!? Safariだとちゃんと表示されるのに。CSS3の目玉なんだから(個人的に)、他のどうでも良いプロパティに対応するくらいだったら、真っ先に対応して欲しかったんですけど…。ガッカリだよ!

実際問題、Google Chromeはまだまだって感じですね。マウスジェスチャーが使えるようになってから考える。表示も結構不具合が出る。

投稿者 Songmu : 23:30

2008年9月 4日

Google ChromeがCSSを読み込まなかった件について

休みだったので、タイムリーにGoogle Chromeを触ってみました。自分のサイトを見たら、いきなりCSS読みこまないでレイアウト崩れ。ビビった。

コンソールのResourcesを眺めたら、CSSファイルは読みに行っているのだが、そこから@importしているファイルを読みにいってくれてなかった。

どこか記述がおかしいのかなぁとファイルを調整。コメントを全部消したらちゃんと表示された。

どうやら、@chasetの記述がある場合、それがファイルの1行目にないとそのCSS全体を解釈しないみたいだ。スペースや改行があっても、ダメ。もちろんコメントがあってもダメ。BOMはあっても大丈夫みたい。

つまり以下の書き方はNG。

/* comment */
@charset "utf-8";
...

以下の書き方だとOK。

@charset "utf-8";
/* comment */
@import "hoge.css";
...

コメントの後の@importはちゃんと読み込んでくれるようです。

てことで、@charsetが前!コメントが後! 注意です。

ちなみに、私の日記のトップもChromeだと背景画像を完全には読み込まなかったりする。まだまだベータ版て感じですね。

投稿者 Songmu : 23:12

2008年8月 8日

コマンドプロンプトのdirが使えないからlsを作ったよ!

よくあるネタ。でも、ls.batを作ってどうのって話ではございません。そもそも、コマンドプロンプトのdirって、出力が過保護かつ冗長すぎてむかつくわけですよ。なので、dirの出力結果を受け取って、整形しなおしてプリントするperlスクリプトを書いた。やっつけですが。

#!/usr/bin/perl
use strict;
use warnings;
	
my $CHARS_PER_LINE = 75;
my $options = "";
my $dir = "";
	
for(@ARGV){
	if(/^-/){
		$options .= $_;
	}else{
		$dir = " \"".$_."\"";
	}
}
$options =~ s/-//g;
	
my $str = `dir$dir`;
my @files = split("\n",$str);
@files = @files[5..$#files-2];
unless(@files){ exit; }
	
if($options =~ "l"){
	print join "\n",@files;
}else{
	my @fileNames;
	my $maxlen = 1;
	for(@files){
		unless(/\.\.?$/){
			my @tmp;
			@tmp = split(/ +/,$_);
			$tmp[3] = join " ",@tmp[3..$#tmp];
			if($tmp[2] eq "<DIR>"){
				$tmp[3] = $tmp[3]."/";
			}
			$maxlen = length($tmp[3]) > $maxlen ? length($tmp[3]) : $maxlen;
			push @fileNames,$tmp[3];
		}
	}
	$maxlen += 2;
	if($maxlen > $CHARS_PER_LINE){
		print join "\n",@fileNames;
	}else{
		my $colums = int($CHARS_PER_LINE / $maxlen);
		my $i = 0;
		for(@fileNames){
			printf("%-${maxlen}s",$_);
			if(++$i % $colums == 0){
				print "\n";
			}
		}
	}
}

ダウンロード:ls.pl

PATHの通ったフォルダにこのファイルを突っ込んで、PATHEXTに.plを追加すれば、コマンドでlsが使えるようになる。出力結果はこんな感じ。

C:\Perl>ls
bin/   cpan/  eg/    etc/   html/  lib/   man/   site/

これで、適当にカラム数を設定して、整列してくれるようになりました。フォルダだったら最後に「/」を付けてくれる。

引数は、ハイフンで始まっているかどうかで、オプションか否かを判断していますが、もしハイフン始まりのフォルダ名が引数に指定されたら、うまく動きません。渡された引数がクオートされてるかどうかを判断する方法がわからんので。まあ、そんなフォルダ名は付けるなってことですよ。

あとは、複数フォルダを引数に指定した場合も全てのフォルダ内のファイルがうまく表示されませんが、別にそんな機能いらなくね、という。

オプションの対応はとりあえず「-l」だけ。まあ、個人で使う分には十分です。

投稿者 Songmu : 23:42

2008年7月25日

システム管理者の日

そういや、システム管理者の日でした。今週は結構システム管理者っぽい事をしてました。VBScript, Javascript, Perlをフルに使った気がする。

フォームの、バリデート関連とか、サニタイズ関連とかを見直したり、フォームの一つ一つの項目をVBScriptでオブジェクト指向的に実装したりとか、質問項目をCSVとかデータベースとかから引っ張ってこれるようにしたりとかその辺りの汎用モジュールを書いてた。

どれもこれまでやってきたようなことなんだけど、どうもその場しのぎで汎用性が足りなかったんで今後のために書き直した。

とか言っても、自分の昔書いたコードって、いつ見ても稚拙だから、今書いたコードを見てそのうち書き直したくなったりするんだろうな。その辺りキリが無いね。

投稿者 Songmu : 23:44

2008年7月23日

VBScriptの糞仕様

VBScriptってオブジェクトの中に格納した配列を変更する事が出来ないことに気づいて愕然。いったん格納してしまったら、長さ変更どころか、要素の値変更すら出来ないと言う。

Dim hoge : Set hoge = CreateObject("Scripting.Dictionary")
hoge("fuga") = Array(1,2,3,4,5)
WScript.Echo(hoge("fuga")(0))	'1
hoge("fuga")(0) = 10 			'代入してるのに
WScript.Echo(hoge("fuga")(0))	'1

orz

てことで、いったん配列を一時配列に格納しておいて、オブジェクト内配列を破棄してから、一時配列の値を変更して格納しなおせば一応値変更は可能。以下のような感じ。

Dim tmpArr : tmpArr = hoge("fuga")
Set hoge("fuga") = Nothing
tmpArr(0) = 10
hoge("fuga") = tmpArr
WScript.Echo(hoge("fuga")(0))	'10

うーん、これは明らかに無駄なコード過ぎ。せっかく、クラス自分で定義してオブジェクト指向とか楽しんでたのに、どっちらけ。

投稿者 Songmu : 01:28

2008年7月12日

Inspiron2200のキーボード交換…の予定だったが

職場のInspiron2200のキーボードの調子が突然悪くなり、一部が効かなくなったり、「k」を押すと「jk」、「,」を押すと「,m」とか出ちゃうようになってしまった。Dellに修理の見積もりとったら、2週間入院で4万円とか言われ、却下。補修部品のキーボードユニットを買って自分で修理することにした。ノートのキーボード交換とか初めてだけど、なんとかなるだろうと。実際簡単でした。

残念ながら英語キーボードしか入手出来なかった。日本語配列のままでも使えるだろうとか油断してたら、一部キーの過不足があり英語レイアウトに変更せざるを得なくなるという罠。記号の位置がぜんぜん違うのですげー泣きそうになった。覚えなおしと使い分けが面倒だなぁとか思っておりました。

しかも、キーボードユニットが初期不良でカーソルキーがセンシティブすぎて、キートップに触れただけで認識してしまうという泣きっ面に蜂状態。

もちろん交換してもらうことにして、店に送り返しました。その後、ひとまず元のキーボードユニットを付けてみて使ってみたんですよ。

そしたらちゃんと動くじゃありませんか。単にフィルムケーブルの接続がすこしずれてただけとかそんなことだったようだ。何が幸いするかわからないね。もし、キーボードユニットが初期不良じゃなかったら、泣く泣く英語キーボードを使い続けていたでしょうから。無駄にキーボードユニットは購入してしまったが。

教訓としては、
「調子が悪くなったら一度分解して組み付け直してみよう。ただし出来る範囲で」
ってことですね。

投稿者 Songmu : 16:50

DVD → Windowsメディアサーバー

Windowsメディアエンコーダーで、VOBファイルを直接WMVストリーミング形式にエンコードできることを知った。これでDVD→ストリーミング配信とかが楽すぎる。手順は以下。

  • DVD ShrinkでDVDからVOBファイルを抜き出し
  • WindowsメディアエンコーダでWMVにエンコード
  • ストリーミングサーバーにアップロードして配信

決して違法行為に手を染めているわけではありません。提携企業の紹介DVDをストリーミング配信して欲しい等の要望があったりするので。DVD内のVOBファイルそのままだと細切れだったりするんで、DVD Shrinkで一本の動画ファイルとして抽出するのが楽。

htmlの記述方法とかはそのうち。ググると色々説明が乱立しているが、これも個人的決定版があったりする。

投稿者 Songmu : 16:29

VBScriptにおけるpushの決定版

VBScriptの配列は扱いづらいことで有名(?)ですが、pushを定義したらだいぶましになりました。以前から使っていたのだけど、改良を重ねてこれが決定版。

Sub push(arr,elm)
  Dim i,tmp : i = 0
    If IsArray(arr) Then
      For Each tmp In arr
        i = 1
        Exit For
      Next
      If i=1 Then
        Redim Preserve arr(Ubound(arr)+1)
      Else
        Redim arr(0)
      End If
    Else
      arr = Array(0)
    End If
    If IsObject(elm) Then
      Set arr(Ubound(arr)) = elm
    Else
      arr(Ubound(arr)) = elm
    End If
End Sub

実行コードサンプル

Dim hoge()
push hoge,"test"
push hoge,Array(1,2,"fuga",44)
Dim fuga : Set fuga = CreateObject("Scripting.Dictionary")
fuga("item1") = "testitem"
push hoge,fuga
WScript.Echo(hoge(0))
WScript.Echo(hoge(1)(3))
WScript.Echo(hoge(2)("item1"))

これで、配列にオブジェクトやら配列やらを突っ込めてフリーダムな感じ。ひゃっほー。配列にはオブジェクト格納できないのかと思ってたら、「Set」を使えばできるんだね。実はVBScriptでもかなり複雑なデータ構造が実現可能。Classも定義できるし。ちなみに、こうやって配列にオブジェクトを突っ込むと参照渡しになるようだ。配列だと値渡し。

配列関係の条件分岐が複雑になっているが、空の配列の定義方法によって挙動が異なるのが理由。

  1. Dim hoge : hoge = Array() →IsArray()はTrue。UBound()を使うと、-1が返る
  2. Dim hoge() →IsArray()はTrue。UBound()を使うと、即エラー(!)
  3. Dim hoge(-1) →こういう宣言は不可能(即エラー)

2の変数宣言の方法がシンプルで好きなのだが、こうすると型が形だけ配列扱いになるだけで、Uboundで配列の長さも取得できないというクソ仕様。なんで、コレクションを見に行って、ひとつでも要素があれば配列を伸ばすという形にした。

かなり無理やりなので、メモリはすげー無駄遣いしてるんだろうなぁ。Perlみたいに、無名ハッシュみたいなのを直接入れたり、深いデータ構造の自動生成とかは流石にさせられないのが残念。

それと、配列を走査して書き出したりしようと、オブジェクトを書き出そうとしたときにエラー吐いちゃうんだよね。オブジェクトにtoStringみたいなのを定義できない(多分)のが困る。

投稿者 Songmu : 16:11

お前何年VBScript書いてんだって話なので

VBScriptでg.vbsを書いてみた。これなら拡張子無しでいけるだろうとか思ったらいけなかった。なんだよ。exeとlnkとbatは大丈夫なんだがなぁ。vbsからexeにするツール使おうとしたらウィルス扱いされたので見送り。

Option Explicit
Dim srchStr : srchStr = ""
Dim str
for each str In Wscript.ARguments
	srchStr = srchStr & " " & str
Next
srchStr = Mid(srchStr,2)
Dim sc : Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Dim js : Set js = sc.CodeObject
srchStr = "http://www.google.co.jp/search?q=" & js.encodeURI(srchStr)
Dim shell : Set shell = WScript.CreateObject("WScript.Shell")
shell.Run(srchStr)

まあ、VBScriptとか言いつつScriptControlとか使ってしまってるわけですが、気にしない。

投稿者 Songmu : 01:10

2008年7月11日

ファイル名を指定して実行をランチャー化しさらに検索までも

Windowsキー+Rで「ファイル名を指定して実行」を呼び出せるので、これをランチャーとして使っている。C:\mycommand\にユーザ環境変数でPATHを通して、そこにショートカットやらスクリプトやらを置いている。putty.lnk置いておけば、Windowsキー+R+"putty"でターミナル呼び出せたりして便利。これを使い始めてから、デスクトップはTODOのファイルを置くだけになって大分すっきりした。

調べたら当然ながら似たようなことを考える人はたくさんいるようで、検索するのもファイル名を指定して実行なんて人がいた。「ファイル名を指定して実行」フェチのツール

素晴らしいアイデアなのでパクってYSTでも出来るようにした。上記ページのGoogle版も「複数引数を読まない」「URLエンコードがshift_jis」ってのが気に食わなかったので、Google版も別のを作った。

Perlで書いて、PARでexe化した。Encodeモジュール使ってるせいかサイズがクソでかくなり、動作も遅くなった。残念。PARで作ったexeファイルって単なるZIPのようだし。手動でいらないファイル削ったりしたらもうちょっと軽くなったりするのかも。

生のPerlはこちら。ActivePerl入ってたらこっちの方が断然早い。

ソースはこんな感じ(y.exe)。

#!/usr/bin/perl
use strict;
use warnings;
use Encode;
my $srchStr = join " ",@ARGV;
{
	use utf8;
	$srchStr = decode("sjis",$srchStr);
	$srchStr =~ s/ / /g;
}
$srchStr = encode("utf8",$srchStr);
$srchStr =~ s/([^\w ])/'%'.unpack('H2', $1)/ego;
$srchStr =~ tr/ /+/;
system 'start','http://search.yahoo.co.jp/search?p='.$srchStr;

最終行を何とかすれば、どんな環境でも動くはず。引数がShift_jisなのが前提だけど。本当は中国語も検索できるようにしたいんだよね…。「ファイル名を指定して実行」がsjis動作なのがきつい。

それと、環境変数PATHEXTに.PLを追加しても、「ファイル名を指定して実行」からは拡張子plを補完してくれない。コマンドラインからはいけるんだけど。何故?

投稿者 Songmu : 03:16

2008年6月24日

最近知ったすげー当たり前のこと

Perlのヒアドキュメントって、ダブルクオート文字列と同じで、変数埋め込んだらちゃんと文字列展開されるのね。なんだ、だったら、テンプレート使わなくても簡単なhtmlだったらさくっと書けるわけだ。いままで変数絡めないといけないところは、いちいちprint文書いてた。アホくさい。

流石に制御構造は埋め込めないみたいだけど、それが出来たら、テンプレートモジュール要らないじゃんて感じだからねぇ。

なんで気づいたかと言うと、ここのところ、「UNIXプログラミング環境」読んでたら、「シェルスクリプトのヒアドキュメントには変数が埋め込める」とか書いてあって、シェルで出来るんなら、Perlで出来ないわけが無いだろうとか思ってやってみたら出来ました。

なんで出来ないと思ってたんだろう。ラクダ本調べたら最初の方にちゃんと書いてあったよ。読んだ覚えもあったし。

UNIXプログラミング環境はすげー面白くて、絶版前に駆け込みで買っておいて良かったと思った。cd,ls,pwd,cp,mv,cat,more,chmod,chownあたりのコマンドやviとemacsを少しくらいは使えるけど、unixな環境の便利さがイマイチよく分からないと言う人(つまり私レベルね)がunix的考え方を理解するには最適の本だと思った。勿論古い表現も多いけどね。

ただ、どんな本読んでても最近Cにぶつかるんだよね。やっぱCも勉強せんとあかんかなぁと言う気になってきた。てことでいきなり「K&R」買っちゃった。

今月は本を買い控えたが、それでも1万近く行ってる…。

投稿者 Songmu : 23:43

2008年6月19日

Firefox3快適です

機能に加えて速度も手に入れたから最強だね。早速、自宅の3台と職場のパソコンにインストールしました。

各国のダウンロード数が見られて面白い。チャドが1(6月18日 23:50JST時点)なのが妙に気になっていて、これが2に増えたりしたらちょっと残念かも(6月19日01:50現在。2に増えてます…、残念?)北朝鮮は0だ。

てことで、アップデート絡みでやった事など。

Firebug

自動でアップデートされなかったが、Add-onsのページに行ったら最新版置いてあった。bって書いてあるからベータなのかもしれないけど。

Web Developer 日本語版

そもそも別のところが更新してたのね。通りで最近更新されないと思った。

All in One Gestures

FireGesturesを使いましょう

Tab Mix Plus

http://tmp.garyr.net/dev-builds/から最新のxpiを使えばインストール可能。

Portable Firefox

PortableFirefoxも早くも3.0になっててDL可能です。パッチ当てなくても単独での日本語版も準備されてます。

投稿者 Songmu : 01:58

2008年6月17日

Perlを使える至福

これまで静的なWEBページしかおいてなかった職場唯一のLinuxサーバーにスクリプトをおかざるを得なくなった。というか、むしろそう仕向けた。やったー、これでPerlが書けます。とりあえず簡単なフォームとかなんだけどね。テキスト処理でローカルで使うことはあっても、サーバーサイドで業務で使うのは初めて。

入ってたPerlが5.6だったので、5.10にバージョンアップしたら、ブラウザ上で動くサーバーコントロールパネルが一部動かなくなり、焦って元に戻した。結局サーバー上では、5.6と5.10を併用することにした。5.6だと日本語と中国語を同時に使いたいときに困る。

慣れないことするもんだから、いろいろ設定に戸惑った。sshで入ってユーザーの権限とかいじっていたら、いつの間にかユーザーをwheelグループから外してしまっていて、suできなくなってすげー焦った。最初はpasswdファイル壊してしまったかと思い、詰んだ?とか思って顔面蒼白でした。

何食わぬ顔して、サーバールームに入っていって、rootでログインして、権限設定しなおして事無きを得ました。

サーバーにSSL設定したりと、これまでやったことないことをしているので楽しい。

そういや、CGI.pmとutf8、Encodeを併用するときに

use CGI;
use utf8;
use Encode;
binmode STDIN ":bytes";
my $cgi = new CGI;
my $name = Encode::decode($cgi->param('name'));

てなかんじで動くことはわかったんだけど、最後の行を

my $name = decode($cgi->param('name'));

にすると動かない。なんでだろう。utf8::decodeとバッティングしてるのかな? 不明。

そういやグループ親会社含めても、全社でPerl書けるのって私だけな気が。こうやって、自分しか理解できないノウハウを貯めるのは、まずい気がしてきた…。転職できなくなっちゃう。

投稿者 Songmu : 23:55

2008年6月16日

県別に分離可能なベクター形式の日本地図

Flashで地図サービスみたいなものを作ろうかなと考えている。とりあえず、県別に分離できるベクター形式のファイルが無いものかなぁと思って探したが、フリーのものが見つからなかったので、自分で加工して作った。

日本地図白地図、世界地図、日本地図が無料」というサイトから、日本全体のベクターデータと県別のベクターデータを拾ってきて、ちまちまサイズあわせした。

特に加工再配布禁止とかでは無いようなので、ここに公開するものである。
japanmap47.zip(1.9MB Illustrator10形式aiファイル)

これにFlash内で座標系組み込んで、どっかのAPI叩いて、住所から緯度経度情報を取ってきて、ピンなんかを立てられるようになったらとりあえずの目標は完了。Yahooの天気情報みたいに、地域別・県別でズームアップみたいに出来るようになればよいなぁとか思っている。

投稿者 Songmu : 01:03

2008年5月28日

プレゼン楽しいよプレゼン:準備編

いかん、かなり舞い上がり気味です。またプレゼンするために新しい技術を学びたいくらい。調子に乗ってやった事をまとめてみる。

資料準備編

今回は割と普通の事しか書いてません、多分次回の予行演習編はオリジナリティに溢れた内容になるはずです。

最初はこんな感じ。

  1. 大まかにテーマを決める
  2. 話したい事柄をざっと書き出す
  3. とりあえず話す順番を決めて並べてみる
  4. 見切り発車で資料を作り始める

見切り発車が大事。資料作り始めたら以下。

  1. 資料作っていると話してみたい事が増えてくるので付け足す
  2. 自分のわからない事や分かってないところが見えてくるので調べながら資料作りを続ける
  3. 調べてると話したい関連事項が増えてくる(良くも悪くも)
  4. 時折全体を見直して、話したいところを削る。上手く全体を繋げる

5~8を繰り返して、完成に近づけていきます。完成まで7割がたというあたりで、予行演習を開始します。予行演習をすると足りない点がよりよく見えてくるので、そのフィードバックもしながら資料を作成し続けます。まあ、よくあるスパイラルモデルですな。

ちなみに、見切り発車が大事って言うのは、「800字を書く力」にも書いてあって、結構力づけられたと言うか、目からウロコでした。あまりこういうハウトゥー本みたいなものは読まないんですが、読んでみたら面白かったと言う。

以下抜粋。

  • 文章は「書くと書ける」
  • 書くことは、すでにあるものを再現する作業ではない
  • 作文をとおして「考える」習慣

得てして、「最初から書くべきことが決まっていて、それを順序だてて書く」という理想論に陥りがちなのだけど、実際はプロでもそうではないと言う事を知り(人にもよるのでしょうが)、衝撃を受けました。オススメです。

次回、プレゼン予行演習編。多分。

投稿者 Songmu : 02:15

2008年5月27日

1000speakers:5と書いたほうがSEO対策になるのかも(笑)

なんか、かなり評価してくださっている方もいて、嬉しい限りです。結局のところグリフウィキ作った上地さんのふんどしで相撲を取った感じですけれどもね。

てことで、準備で活躍したもの。

CJKV日中韓越情報処理

CJKV日中韓越情報処理

買って以来書棚の肥しとなっていたが、背に腹は代えられず通勤時に持ち歩いて読んでました。1100ページ超でオライリーサイズと、京極夏彦も真っ青のボリュームですが、案外持ち歩けるもんだなぁとか思いました。

ThinkPad X61 7675-A63(XP Proモデル)

thinkpadx61 thinkpadx61

すげー良い。買ったばかりだったが準備に大活躍してくれました。

なにせ。キーボードがかっちりしてて打ち易い。今まで使ってきた中で一番。Let's Noteはキータッチがぐにょぐにょしてるのが気に食わず、購入を見送っていたがThink Padにして正解でした。

ポインターのアキュポイントも素晴らしい。ホームポジションから指を大きく動かさずマウスカーソルを移動可能なのが良いね。

ただ、ファンクションキーの場所が微妙で、しかも、「レジストリ弄って入れ替えれば余裕でしょ」とか思ってたら、ファンクションキーって入れ替えられないのね…。Let's NoteはBIOSで設定できるみたいだね。

それと無線LANが搭載されてなかったのがちょっと誤算。別に要らないけど。E-mobileあるし。

それとこれ、Core2 Duoって言うの? 噂には聞いていたがすげー処理早すぎワラタ。複数ウィンドウ開いて一つで重い処理してても、他のウィンドウには影響が出ない、スゲェ。

買って速攻メモリ2GBに増設したが、もう一生これでよいんじゃないかってくらい快適。少なくともVISTAを使うことは無いな。

投稿者 Songmu : 02:51

2008年5月25日

1000speakersが一晩明けて

ボーっとしています。多少は部屋を片付けたり。プレゼン準備優先でたまっていたことを片付けたり。

改めて雑感

参加者の学習意欲には圧倒された。自分の知らない分野でもどんどん吸収しようとする姿勢が良い刺激になった。

Hackathonも楽しかった。完走せずに終電で帰ったが。特にニコニコ動画の中の人のオフレコ話を聞けたのが良かったなぁ。ジャスラックとの絡みとか。

運営側の負担の関係で今回でひとまず一区切りと言う感じで、次回からはまた、やり方を変えていくようなので、そういうときに参加できて良かった。

運営に関わった人たちは本当にお疲れ様でした&ありがとうございました。

ニコニコ動画で復習中

ニコニコ動画を自分の発表を見返している。すぐに見返すことが出来ると、色々改善点も見つかるから良いね。

プレゼン中IRCで色々話題にしてくださっていたらしいのですが、どう言われていたのか気になります。自分の出番のときもIRCクライアント立ち上げておけば後で見返すことが出来ると言う初歩的な事を知らんかった。

誰かその辺りのIRCログ送ってくれんかね。

5/27追記:ちゃんと過去ログあった。しかもニコニコ動画の方もIRCのチャットを流すようなかたちになってる。すげー。

動画を見返しながらの反省点としては

  • 笑い方がキモイ
  • 「えー」とか「あのー」とかが多い
  • 「と言う感じ」てな言い方が多い。もっと適切な言葉があったはず
  • プレゼン時間が長い
  • 結構いい加減な事を言っている

等。やっぱ場数かな。良かった点は

  • 息切れせずに話しきれた
  • htmlと漢字というとっつきやすい話題だったので、話したことを大体理解はしてもらえた(多分)

等。でもプレゼン経験皆無にしては上出来だったと思います。

みんなのノートパソコン

Mac多すぎ。半数強Macだった気がする。残りの半分弱がLet's Noteで、それを追う形でThinkPadという3大勢力だったかな。

私のThinkPad X61 7675-A63(XP Pro搭載Ver.)ですが、無線LAN搭載だと思っていたら、非搭載でした。スイッチ付いてるのに~。会場で無線に繋ごうとして初めて知りました。プレゼンのときは有線使わせてもらった。ありがとうございます。

Mac使うならLinuxとか思ってたけど、Macだったら中国語入力も標準で搭載されているようなので(重要)、少なくとも乗り換えの問題点の一つは解消されるなぁ。

そういや、Linuxデスクトップな人はいなかったかな。(定かではない)

終わりました

緊張の日々も終わり。ノートパソコンを持ち歩く生活もやめられます。本読まなきゃ。それと、先週は1回しかロードに乗れなかったけど、今週は乗り込む予定。もうツールド美ヶ原まで1ヶ月しかない。

追記:そういや、twitterのフォローワーになってくださった人が何人かいて、これまで全然twitterやってなかったけど、今更やってみようかとか思ってたり。

投稿者 Songmu : 15:35

2008年5月24日

家に帰って、ブログにアップするまでが1000speakersって話なので

てことで参加してきた。まずはプレゼン資料を公開します。もう動画もアップされてるようだ。早い。

楽しかった。プレゼンも時間がおしてしまったが話したい事は話せたので良かった。しかし23分も話してた。すみません…。

勢い余って最初に申し込んだ関係で、基調講演の後のトップバッターだったが、さっさと自分の出番が終わらせられて良かったよ。後のほうだったらどんどん緊張するばかりだし、他の人の話がまともに聴けなかったと思う。

すげー緊張した。話の最初に「実は職場がこのすぐそばで、休みの日にも職場の近くに来るのはゲンナリなんですけど」みたいな関係ない話をして、ちょっと笑ってくれた人がいたので結構楽になってその後はすんなり話せた感じ。

「プレゼン上手いっすね~」とかお世辞じゃない感じで何人か誉めてくださった。わーい。

プレゼンとか大学以来6年振りとか。しかもピンのプレゼンでスライドを作ったのは多分初めて。あまりプレゼンするような授業はとって無かったし、敢えてOHPばっか使ってたなぁ。

そこそこしっかり準備したり、密かに練習したりした甲斐がありました。意識したのは大きな声を出す事、抑揚をきかせることくらいかな。

プレゼンツールはやっぱWeb屋だったら、パワポじゃなくて、Html+JavaScriptベースでしょうってことで、Html Slidyにした。自分で書こうかとも思ったけど時間が無く諦めた(画面を暗転させる機能が欲しかった)。S6も考えたけど、とりあえずシンプルな機能だけで良かったし、S6使っている人多そうだったから敢えて。(そりゃS6のほうがホットだし高機能だしな)

パワポ使い慣れてない(=プレゼンでは使ったことが無い)けど、htmlだったらデザインし慣れてるし、CSSの制御してデザインを統一するのも楽。この選択は正解だったと思う。

しかし、メイリオってフォントに力があるね。ベタで大きく書いておくだけで様になるので助かった。なので、スライドにそこまでデザインは入れなかった。

他の人の話も面白かった。語学、自分専用プロキシ、Twitterなんかの話が多かった。理解できない話もあったのが悔しい。最近の若い人はすごいなぁとつくづく。

基調講演して下さってたiKnowxakyさんとは講演後に話させてもらった。名刺もらった。

zakyさんの漢字での名前は、「白雅威」なんだってさ。これ豆知識な。

"Do you have Chinese character's name?" とか訊いたら教えてくれた。

"Huh? This is like Chinese pronounciation...?"

と聞き返したら、

「我的老师给我汉字的名字」(先生が僕に漢字の名前をつけてくれたんだよ)

とか流暢な中国語で返されたので超ビビッた(本当に発音きれいだった!)。なんだよ、中国語結構話せるんじゃん。日本語もすげー上手いしな。すげえなぁ。

私もがんばってiKnowやろ。

投稿者 Songmu : 23:28

2008年5月22日

1000speakers準備中

準備に追われてます。なんとなくまとまってきた。もうこんな時間だ。今週は通勤電車内でも資料作ってる。X61買ってマジで良かった。キーボードもスゲー打ちやすいし、ポインターも使いやすい。バッテリーの持ち以外は最強。e-mobileも便利。

投稿者 Songmu : 04:16

2008年5月 4日

1000speakers出ます!

てことで、密かに参加意欲を燃やしていた1000speakersですが、今月は休みが取れたので参加することにしました。

どうせならってことで、話す人にまわる事にしました。超無謀。HTMLと多言語(主に漢字圏)とフォントみたいな話の予定。多分それくらいじゃないと話せるネタ無いし。場違いかもしれませんが変化球勝負です。

絶対、「Songmuって誰?」みたいな話になっていると思う。

投稿者 Songmu : 21:37

2008年4月14日

Windows2000サーバー管理日記

サーバーリプレイスしてから不安定で仕方が無い。本日は正規表現オブジェクトを宣言しているASPで、ことごとく以下のエラーメッセージ。

ライブラリは登録してされていません

ログインページとか入力チェックしている箇所が全部動かない。かなり致命的な状態。

焦って、ググってこのページをみつけて、この手順でVBScript.dllを再登録したらなんとか解決。あー、dll入れ替えたい。

そういや最近、VBScriptでコロンで区切れば、複数の文を一行に記述できることを今更知った。こんな感じ。

Dim i : i = 0

変数名を2回書かないといけないのはまだ冗長だけど大分マシ。これまで変数宣言、初期化処理を2行に分けて書いてたからな。

クラスもちゃんと定義できるし、実は結構VBScriptも悪くないなとか思い始めた。単項演算子とか代入演算子がないとか、妙にタイプの量が増えるのがやっぱイラつくけど。

最近、レガシーASPでCometっぽいことをやろうとしてたりと、方向性がおかしい。

投稿者 Songmu : 22:17

2008年4月 7日

vbscript.dllと正規表現

職場のWindows2000サーバーをリプレイスしたら一部のASPが動かなくなり、

文字の繰り返しを表す正規表現演算子が不正です

とかいうエラーメッセージが出るようになってしまった

正規表現の非欲張り量指定子を使っているところがことごとく上手く動かない。

調べてみると、どうやら、アップデートの時に、vbscript.dllのバージョンアップが何故かうまくいっておらず5.1のままになっていたのが原因。

5.6のdllで上書きしようと試みると、「使用中のため上書きできません」のエラー。サーバーを再起動するわけにもいかず、泣く泣くコードを全て非欲張り量指定子を使わない形に書き換えた。洗い出しきれているかどうかちょっと不安。

しかし、「正規表現演算子が不正です」とか言って、不正なのはお前の正規表現エンジンなんじゃねーかと。まあ、バージョンが古いものに文句言って立って仕方が無いけどさ。

しかし、非欲張り量指定子が使えないのは結構痛い。折を見て、dllを上書きしたい。

投稿者 Songmu : 23:56

2008年3月30日

Livedoorリーダーテラ便利

今更ネタ。やっと本格的にフィード登録をした。キーボードショートカット使ってゴリゴリ動かすと便利。ブラウザ自体もキーボードで操作したくなってFirefoxのキーボードショートカット調べたりもした。

登録フィードはIT系、スポーツニュース系、自転車系、ボウリング系、料理系、中国系、中国語系等々。欲張りすぎ無いのが肝要。

投稿者 Songmu : 00:36

2008年3月17日

Excelでチラシを作るなとは言わないが…

Excelでチラシを作るのはもはや仕方が無い。私もたまにやるし。表組みとか必要なとき便利だよね。下手にエクセルの表をワードの中に組み込んだりするとクラッシュしやすくなったりするし。

そもそもExcelは表計算ソフトだから、印刷を想定していない。それに本来WYSWYGって奇跡的なことで、ディスプレイと同じ出力が、プリンターで得られるのが当たり前だと思っていることは危険極まりなくて…(以下略)

つまり、ExcelのWYSWYGは馬鹿だということを意識しなきゃいけないんですよ。最悪なのが

  • スペースで改行位置をあわせる
  • 空白行を挿入して、改ページ位置をあわせる

この2点。正しい解決策は以下。

  • セル内で改行するときはALT+Enterで改行
  • 改行したいときは、メニューの「挿入→改ページ」(ワードでも同じ)

それと、

  • ちょくちょくプレビュー画面を確認
  • 最終前に印刷して確認
  • プリンタによって印刷結果が異なる場合があるので、最後にPDFで書き出す

この辺が超大事。あと、オブジェクト配置しまくったりとか、複雑な操作しちゃダメ!まず画面とプリンタ出力が食い違う。

PDF出力には、私はPrimoPDFとFlashPaper2を使ってます。

今知ったけど、FlashPaper2ってもう売ってないし、Adobeは今後提供する気も無いんだ! えぇ、FlashPaper超便利なのに! ページ内に埋め込めるし、動きも軽いし。買っておいて良かった。マジで。

あと、ワードとかエクセルが強制終了を連発する事があるけど、そういう時は一時ファイルを削除すれば解決する事もある。一時ファイルは隠しファイルになっているから表示させてない人のPCではいつまでもクラッシュの原因になっていたりする。

あまりワードエクセル使わないんだけど、上司に「どうしてこうなるんだろう」とか聞かれて、作ったチラシとかを修正、印刷する事が結構あったので妙にノウハウがあったりする。

ただ、最近ワードもエクセルもちゃんと勉強する必要もあるかなぁとか感じる事もある。特にワードなんか、実際すげー便利なソフトなんでしょうからね。見出し毎にスタイル定義したりもできるんでしょ?多分。使ってるのがHTMLばっかでわからん。

投稿者 Songmu : 22:20

2008年3月16日

自宅もデュアルに

デュアル!

ついに自宅もデュアルディスプレイにした!ノートだと最近は拡張デスクトップがあって、実はデュアルディスプレイ環境構築が実に簡単です。

買ったのは、Dellの19インチワイド。パソコン環境は、職場よりも自宅の方を少し上にしておくってのがポリシー。逆のような気もするけど。

安さにつられてDellにしたけど、Dellの箱が自宅に送られてきたときは、少しゲンナリ。職場のPCは全部Dellで揃えているので。まあ、気分の問題。そのうち慣れるでしょう。

これでニコニコ動画を見ながらサイト更新したり、プログラム書いたり出来るぜぇ。19インチワイドは流石に大きいのでむしろ映画とか見たほうが良いんじゃないかとか思ってみたり。

投稿者 Songmu : 17:13

2008年3月13日

自分の1行CSSのノウハウも多少公開してみる

http://coliss.com/articles/build-websites/operation/css/886.html
http://www.cssglobe.com/post/1392/8-premium-one-line-css-tips

ままあるが、自分が分かりきっている情報が、多くのブックマークを集めているとなんだか複雑な気分。くだらない感情だけど。そういった情報を整理して上手く見せる事に価値があるのだということは分かっちゃいる。

overflow:hidden;page-break-after:always;なんかは、印刷用のhtml+CSSを書きまくっている私としては常用テクニックだったりするので。

他に1行CSSとして便利なのは、

cursor:pointer;

とかが思い浮かぶ。マウスカーソルを手の形にしてくれる指定。リンクじゃないけど、クリックして何か効果を出す要素に指定しおくと効果的。

また、

white-space:nowrap;

は、かなり使えます。上のリンクでは、aタグに指定して紹介していますが、個人的に多用しているのが、labelタグへの指定。

<label for="fruit001"><input type="checkbox" value="りんご" id="fruit001" name="fruit">りんご</label>
<label for="fruit002"><input type="checkbox" value="バナナ" id="fruit002" name="fruit">バナナ</label>
<label for="fruit003"><input type="checkbox" value="パイナップル" id="fruit003" name="fruit">パイナップル</label>
label{white-space:nowrap;}

とか書いておくと、ちゃんとフォームコントロール直後に勝手に改行される事なく、まとまって次の行に移ってくれます。プログラムで配列からフォームアイテムを順次出力させたりする場合にすごく便利。なんで上記CSSは私のデフォルトCSSに入ってます。

そのうち詳しく書くかも。

投稿者 Songmu : 03:13

2008年3月 9日

その後のデイリーポータルViewer

思ったより上手く動いている。RSSちゃんと読みに行って、更新も出来ているようで安心。一回処理が混み合って、ファイルに重複書き込みが起こってしまっていたが。

個人的にすげー楽しんでます。これまであんま興味持ってなかったライターの記事を一気読みしてしまったりとかね。

なんか最初作者と記事を一斉に抜き出すスクリプトが一部上手く動いておらず、「林雄司」「梅田カズヒコ」「萩原雅紀」等かなりの重要人物たちの記事がごっそり抜け落ちており、ライターごとに記事一覧を抜き出して、手動で追加した。

またスペースの有無、全半角の揺らぎが大きいので、ライター名からスペースを消す事にした。

ライター名じゃなく、記事名も含めた検索で調べても良いんじゃないかとか感じ始めている。例えば、「ドラゴンボール」とかで検索させたりとかね。

投稿者 Songmu : 02:25

ネットワークドライブ変更batファイル

職場で全クライアントPCのネットワークドライブの割り当てを変更する必要があり、調べたらバッチファイルで変更できそうだったので、書いたバッチを以下に公開するものである。

echo Ⅰドライブの割り当てを変更します。
net use I: /delete
net use I: \\serverName\home
net use /persistent:yes
hostname >> i:\tmp\check.txt
echo Ⅰドライブの割り当てが終了しました。
pause

ドメイン管理してりゃログオンスクリプトで一括処理出来るんだろうけど、お金なくてクライアントが殆どXP HOMEなもんで、添付でファイル送って、各自にマニュアル処理してもらいましたよ。

なんで処理が終わったら、確認ファイルにコンピュータ名を書き込むような小細工も仕組んであるという。

投稿者 Songmu : 02:10

2008年3月 8日

IE7の良い点

IE7の印刷機能が結構使えます。「用紙にあわせて縮小」が出来るのが良い。印刷用CSSがいい加減でも出力を1ページに収めることが出来るのです。仕事でhtmlでドキュメント作成したり、レポート画面出力して印刷させたりする事が多いので、助かります。

そういう意味じゃ、紙が好きな企業やユーザーのニーズを満たしているのかもね。Firefoxは印刷機能がいけてないからなぁ。

IE8のベータ版が出ましたね。珍しく対応が早い。

投稿者 Songmu : 01:41

2008年3月 7日

暇な時間に遊びで開発

最近妙に時間がある。考えてみたら、前は自分で全部やってたDBへのデータ入力、修正、閲覧の類を、各拠点や庶務の子に出来るように業務アプリケーション作ったりしたりしたから、やる事が減ったんだな。

てことで時間があったので、イントラ上の管理画面に掲示板機能をつけてみたりした。イントラ内だから、セキュリティとか気にしないでいいのが楽。遊びで、jQuery使ってページの一部だけ書き換えるAjax掲示板にした。レガシーASPでAjaxとかなかなか無い発想(笑)

これで、誰か不在のときに掲示板に書き込んでおけば、電話がかかってきません。実際、今日は上司が不在だったら、掲示板にその旨書き込んでおいたので、「○○さんいますか?」とか全然電話来なくて楽でした。余計時間が出来ました。

簡単な機能だからプレーンテキストで良いやとか思ったら、逆に無駄に苦労した。DB使うほうが楽だった。VBScriptだとUnicodeを扱うとか言っても、基本UTF-16しか読み書き出来ないし。

ASP上でファイルを読み込めば、ASPの文字コードによって、適宜書き出してくれるんだけど、この辺、中途半端に自動で処理してくれるところが気持ち悪い。

完璧に処理してくれるならまだしも、拡張子非表示とか同じで、自動で色々やってくれるげで抜けが多いから全然上手く動かない事が多いと言う。お前それで気を利かせているつもりかよ、って感じですよ。それだったら明示的に処理させてくれれば良いのに。それがMicrosoftクオリティ。

投稿者 Songmu : 22:23

2008年2月26日

デイリーポータルViewerを作った(初めてのCGI)

http://songmu.jp/dailyviewer/daily2.cgi

最初は単にべつやくれいの記事を一気読み出来ないかなぁと思ったのが作成のきっかけ。それをPerlの練習もかねて書いてみた。個人的なものなので最初はすげーやっつけスクリプトでした。

バックナンバーのページから「\d\d?月」となっているリンク先(=月別一覧)に逐一アクセスして、ライター名で全文検索してリンクを拾い出してくるかなり乱暴かつ迷惑なスクリプトだったのです。

これをちょっと改変して公開してみようとか思ったのが、運の尽き(?) ライター名を入力したら、記事一覧を返すCGIを作ってみようと。

しかし、もともとの仕組みじゃ使い物になりません。毎回根こそぎ(80ページ強!)一気にアクセスして、ライター名で全文検索にいくので、実行にも時間がかかるし、何よりデイリーポータルZ側のサーバーへ迷惑この上ないわけです。

じゃあ、「アクセスのあったライターに関して、記事のURLをキャッシュしておこうかな?」とも考えましたが、結局、

「最初に一度だけ一気にアクセスして、バックナンバーを根こそぎ拾い出してきて、更新情報はRSS見に行けば良くね?」

という方針に落ち着きました。もう最初とは全然違うプログラムになってしまったわけです。

最初のプログラムは、先ずは、ライター名ありきだったので、ライター名で全文検索に行けば良かったのですが、ライター名、タイトル、URLのリストが対応したリストを全て抜き出してくるとなると、走らせる正規表現がまたちょっと変わってくるわけです。

月別一覧のページを見ると、ライター名はカッコでくくられているので、そこを起点にして、リンクとタイトルを拾ってくる形になりました。

しかし、さすが手打ちで更新しているだけあって、全角、半角カッコの統一が取れていなかったり、改行される場所のルールが統一されていなかったりで、結構マッチング泣かせな部分がありました。拾い切れていない記事も多々あることでしょう。

また、2005年7月以前の月別一覧のページにはライター名の記述が無いため、それ以前の記事を拾い出すのは泣く泣く諦めました。

ちなみに、記事の順番ですが、バックナンバーのページのリンク順に拾い出しているので、上から、2007年1月、2007年2月…、2007年12月、2006年1月、といったちょっと変な順番になってしまっていますが、気にしません。今後の記事はRSSを見て更新に行くので、時系列順に並ぶと思います。

ライター名一覧も出すようにしてしまったので、入力ボックスの意味があまりなくなってしまいましたが、前方一致であれば、記事を拾い出すことが可能なのが見逃せません。なので「べつやく」と入力すれば、べつやくれいの記事にアクセスできますし、「三土」と入力すれば、「三土たつお」と「三土 たつお」の両方の記事にアクセス可能です。ただ、スペース関係が入ると違うライター扱いになってしまうのは何とかしようと思っています。

初めてスクラッチからCGI書いたので、いろいろ初歩的な点でバカみたいに苦労した。

大学時代に少し触っていたので、改行コードでははまらなかったが、文字コードがらみではまったり、時代は流れて、今やjcodeじゃなくてEncodeだったり。URLエンコードできなくてはまった時間が一番長かったかも。最初のやっつけスクリプトは30分だったが、ここまで書き上げるのに、多分賞味10時間近くかかっている。遅すぎ…。

ちなみに、ローカルのXP ProのIISでPerlを動かせるのを知ってちょっと嬉しかった。どうせならApache入れろよって感じではありますが。

現状の課題としては、アクセスがあるたびに毎回RSSを見に行くところ。RSS見に行くくらいだったら良いでしょとか思っているが、よしんばアクセスが増えることがあったら、何とかしないとなぁ。

小心者なので、デイリーポータルZ宛にお伺いのメール出した。公開しちゃダメって言われたらどうしよう…。

投稿者 Songmu : 21:59

2008年2月23日

コードあぼーん

今週はもう、かなり馬鹿でベタでダメージの大きいミスをした。

サーバー上のプログラムを消してしまったのですな。作業が一段落ついた分をローカルにコピーしようとして、その逆をやるというまあ、よく聞く笑えない笑い話を自分でやってしまったわけです。

凍りついたね。即座に復旧を試みたが、全てアウト。

消したのが、テストサーバー上のデータだったので、実際のサービスには影響は無かったのだが、テストサーバーだったからこそ、あまりしっかりバックアップを取っておらず、数日前のチェックアウトに逆戻りですよ。

正に涙目になりながら、自分で書いたコードを覚えているうちに復旧を試みた。こんな勢いでコードを書いたのは生まれて初めてでした。

そうしたら、2時間で復旧に成功。6時間分位の作業分を取り返したことになる。これはこれで良い経験になりました。今週は結構プログラムを書く余裕があったのですが、よくよく考えてみると、問い合わせが全然ありませんでした。つまり営業成績がヤバイのです。

投稿者 Songmu : 22:08

2008年2月13日

結局、target="_blank"で良いんじゃ?

ここのところ、公私共にサイトを作っていた。特に何も参考にせず、コピペもせず、clearfixをぱぱっと書けたのがちょっと成長かな、と思ってみたり。

てことで、作ったサイト。まだ作りかけの感がぬぐえません。もうちょっと飾り気をつけないとね。

一部DreamWeaverを使っていたわけですが、案外DreamWeaver上のブラウザが役に立たなかったので、機能としてはテンプレート機能を活用したくらい。基本エディターモードだし。

最近作っていたWebアプリケーションの中で、印刷画面を別窓表示させたい部分があって、ちょっと別窓について調べてみた。最近ポップアップブロックとか結構鬱陶しいじゃないですか。

別に社内で使う分にならまだしも、お客様が使用中にブロックされたりしたら洒落にならないので。

別窓を開かずに、ページ遷移の中できっちりコンテンツを見せられるのが優れているってのは正しくも有り、理想論。

なんか以下のように書いて、javaScriptでイベントハンドラ設定しておいて、リンクがクリックされたら、別窓で表示されるようにして、javaScriptがオフ環境の人でもリンクが辿れるみたいなのが、良いのかなぁとか思っていたら、見事、Googleツールバーに弾かれました。

<a href="hoge.html" class="newwin">hoge</a>

Googleツールバーの初期状態はかなりヒステリックで、"window.open()"が絡んでいると、ほぼブロックしてくると言う徹底ぶり。使っているうちに、ホワイトリストが適正に設定されてきて、そんなにブロックはしなくなるみたいだが、ホワイトリストは自分で設定できないみたいだしね。

結局、target="_blank"が良いんじゃないかとか思いました。target属性が非推奨だからといって、javaScriptで無理やり実装しようとして、独自拡張が乱立して更に訳わかんない事になってたんじゃ本末転倒です。はてブなんかはtarget="_blank"を使ってますね。

実際、別窓で開かせたいと言う製作者側の思惑だけでなく、別窓で開いて欲しいと言うユーザーも居る訳ですよ。わざわざ右クリックでコンテキストメニューを表示して「新しいウィンドウで開く」だなんて自分で選ぶよりかは、自然に適正に別窓が開いてくれるほうがありがたかったりする訳ですよ。

ホイールクリックで別窓表示されるように設定すれば問題ない、とか言うかもしれない。しかし、それくらいの設定が出来るくらいのヘビーユーザーなのであればそっちが逆に、target="_blank"を別窓で表示しない設定にすれば良い。実際Firefoxは標準でそういう設定が出来るようになっている。

だから、別窓で表示させたい製作者側は、target="_blank"で表記を統一し、別窓が嫌いなユーザーはtarget="_blank"を別窓で開かないように設定すればよい。それで万事解決だと思う。

ちなみにHTML5では、iframeなんかで利用する関係で、target要素は非推奨じゃ無くなったようですね。

また、今回仕事で作ったWEBアプリケーションでは、印刷画面をCSSで綺麗に実装するのが肝だったのですが、各ブラウザの画面上での画像縮小表示が貧弱なのはどうにかならんのか、とか思いました。

印刷前提だと、画面上ではサイズが大きめの画像を縮小して表示することになり、そうすると画面上で見たときの汚いこと。PDFとかに書き出しちゃえば、問題ないんだけどね。

そういえば、imgタグのwidth,height属性が推奨なのも謎。ネットワーク負荷の観点からすれば、あったほうが良いのかもしれないけど、そのwidthやheightって、mediaがscreenなのを前提としたときのサイズに過ぎないじゃんと言う。しかもそれって、CSSで指定したほうが良いよねっていう。

HTML5ではimg要素のalt属性が必須じゃなくなっていて、議論になっているようです。それは私もどうかと思います。飾り画像なんてCSSで配置すれば良いのだから。ただ、そういうことから窺えるように、理想を追いすぎて発展性の無いxhtml1.1とは違って、HTML5は結構現実に即した仕様になっているようですね。

canvasタグとかかなり面白そうなのですが、更に書くと止まらなそうなので、ここでおしまい。

投稿者 Songmu : 02:32

2008年2月 6日

中途半端な中国語力の中途半端なエンジニア

IE8がacid2に合格してすげーけどなんかmetaタグ必要らしいねとか、今更だけどjQueryテラ便利、これまでgetElementByIdやらgetAttributeやら書いてたのが馬鹿らしくなるねとか、連想配列にはまりすぎて、あらゆるデータ構造を連想配列で書きたくなってしまうと言う、多分プログラマーにおける一種のはしかにかかっている状態だったり、百度が結構本気で日本進出してきたので中国語の出来るエンジニアである私としてはちょっと転職先として興味があったりするとか、デイリーポータルZの作者別記事リンク一覧を抽出するPerlプログラムを書いたのでこれをCGIとして公開しようかとか思っているとか、そんな状態。

結局1月は正月以降殆ど運動せずに終わり、食事も少なめだったので、体重も少し落ちた。2月以降ぼちぼち運動再開して、ここに肉付けしていく事にする。

仕事では、やっとプログラム一つ書き終わりそうだ。スクラッチから作ったものとしては、やっつけプログラムを除くと、初めてかも。本来なら年明けには出来ていないといけないものが、2月頭のリリースとなりそうです。

プログラムの大枠は12月中旬には出来ていたのだが、細かい機能を一つ一つ実装するのに時間がかかった。文字コードがらみとか、印刷用CSSの微調整とか結構こまごまあるもんだよね。その辺の工数見積もりがまだまだ甘いと思う。

一応Webアプリケーションなので、多少はセキュリティにも気を遣ってみた。なんか最近PHPはどうのとか、騒ぎになってますが、ASPは俎上にも上がりませんか。そりゃそうですよね。

投稿者 Songmu : 02:56

2007年12月13日

VBScriptの貧弱さ

片手間ながら仕事でプログラムも書いている。最近やってるのはもっぱらフォームのシステム化。私が今のポジションにつく前から、都度都度、質問項目が付け加えられたり、目的別に同じようなフォームが独立していくつもあったりと、かなり酷い状態なので、この際スクラッチから書き直す事にした。

共通部分は、共有するようにしたり、質問項目はデータベースから回してきたりと、まあ何で今までやってなかったのって感じの事なんですが。入力情報を上手くデータベースに貯めこんで後で分析できるようにもしたいと思っている。

あとは、今更ながらサニタイズ処理を見直してみたりとか、カレンダーからの日付入力や、郵便番号からの住所自動入力なんかも実装したいと思っている。

しかしVBScriptは貧弱で悲しくなるね。配列が使いづらいし、なにより、連想配列が使い物にならない。配列や連想配列の中にオブジェクトを格納出来ないんじゃ、複雑なデータ構造を表現できないから全然意味ないじゃん、と言う。そのあたりを型関係なく自由に使えないくせに、何がヴァリアント型なんだと問い詰めたい。

投稿者 Songmu : 03:12

2007年11月29日

Designer meets Designers 02 に行ってきた

Webに関してずっと一人で勉強しているのもなんなので、ちょっと刺激を受けにこういうセミナーに参加してきた。

当たり前だが、デザイナー向けって感じだったので、内容が物足りない部分もあった。ただ、実際に第一戦のプロがソフトを動かしているところを見られたのはかなり良かった。普段絶対そんな機会無いからね。女性も多くて、男女比は、5:5か、もしかしたら女性のほうが多かったかも。基本的に男は一人で来ていて、女性はグループが多かったし。

全部で5セッションあって、それぞれ1時間弱程度。それぞれの感想は以下。

SESSION1 今からFlashをつくりたい! 基礎から学ぶアクションスクリプト講座

正直イマイチでした。内容が簡単すぎるというのは当たり前で、それは減点対象にはならないけど、講師の話しかたのテンポや抑揚があまりよくなかったのが残念でした。

「ActionScriptプログラミングはJavaよりも楽しい」

とか言ってたのもちょっとなー、って感じでした。別に、意図としては、「ActionScriptは目に見える結果がすぐに出るから楽しい」てなことを言いたかったのだろうが、これに代表されるように、その辺ちょっと説明がうまくない部分が多かったように思う。

そういや、プレゼンで使ってたパソコンに入ってたウィルスソフトがAvastだった。あのパソコンが個人用なのか、それともProfessional Editionをちゃんと買っているのでしょうか?

このセッションで先が思いやられて、結構テンション落ちてしまったが、これ以降は結構良かったのでこの心配は杞憂に終わった。

SESSION2 Silverlightファーストステップ ~なにができるか、どうつくるか~

Silverlightってことで結構期待していたんだよね。まあ、Flashに対抗してむりやり作ったRIA技術で、ジリ貧のMicrosoft必死だな、って印象がぬぐえなかったのですが、実際はGyaoが採用したりと最近何かとホットです。職場でWindowsMediaServerで動画配信てなこともやっているので、今後サービスをSilverlightに移行することもありえるかもしれず、ちょっとどんな技術かは知っておきたいなと考えていたので。

技術的にはイメージ的に舐めていたのですが、ところがどっこい、デモを見る限りではなかなか面白そうです。Microsoftのクセになかなかやるものです(笑)

Silverlight Airlinesのデモなんかは、おおっと感じたね。Flashと遜色ありません。動画を使う場合は、画質はFLVよりもよく出来るらしいし。

開発自体も、簡単なことだけだったら、JSファイルとXamlファイルをテキストエディタでいじれば出来るみたいなんで、はなっから専用ソフトが必要なFlashよりも敷居が低そうなのも侮れないと思う。

ちなみに、このセッションの講演者が使っていたウィルスソフトはNod32でした。私の職場と同じ。

ExpressionWeb

ちなみに、このセッション参加者内の希望者に抽選で「Microsoft ExpressionWeb」がプレゼントされたのだが、それが当たった。信じがたい。まあ、40本も提供ってこともあったのだが、それでも数百人希望者はいただろうに、変なところで運が良い。

機能的に中途半端であまり使い道はないから、転売するかねぇ。買う人いるかな…。Blend2が出たときにアップグレード価格で安く買えたりするんだったら持っておきたい気もする。ちなみに、市価では4万近くするようですね。まあ、参加費のもとはとりました。

SESSION3 現場で使えるActionScript実用テクニック

いきなり、演者がごりごりコードの話を始めたので、ついていけなかった人が多かったように感じる。結構引いてた人が多かったんじゃないかな。

3次元座標を、2次元座標に変換し、奥行きは透視変換(まあ、つまりは遠近法だ)を使って、オブジェクトを縮小・拡大する事によって表す関数の実装なんかの説明が実用的で面白かった。

あとは、円運動させるところで、sinやcosが出てきて、数学アレルギーの人たちが固まっている様子が伺えました。実際は、演者が言っていたようにそんな難しい事はやってなかったんだけどね。

ActionScript3.0の話なんかも出てきて、ActionScript3.0を理解すると、AIRアプリケーションが作れるよ! てなことも言ってた。知ってはいたが、少しデモが生で見られたのが良かったね。

そのあたり、デスクトップアプリケーションに進出しようとするAdobeとSilverlightでWebアプリケーションに進出しようとするMicrosoftとのせめぎあいが見られて面白い。

私もがんばってActionScript3.0勉強しよ。

ちなみに、このセッションと次のセッションは演者はマック使ってました。

SESSION4 デザイナーのためのAjax動的Web制作術

講演者のテンポも良くて、タイピングが速かった。デモに失敗して詰まる場面もあったが、それもご愛嬌で、逆に笑いが取れていたりしたね。ただ、実際、そのデモ失敗のせいでかなり長い時間講演が進まなかったので、本人にしてみたら痛恨だったでしょう。レベルや内容は参加者に一番あっていたセッションだったと思う。

Gucciの日本語サイトがFlashのようでいて、実は全部Ajaxだったりするのが凄い。でも、あそこまで全部Ajaxでやる必要はないよねとか言い切っちゃったのが笑えた。

必要なところ、地味なところで使うのが理想、とか言っていたのが印象に残ったかな。

あとは、簡単なデモとか。DreamWeaverを実際に使っているところが見られて参考になった。Spryのデモもあって、「ソフトが書き出すコードも大分綺麗になりました」とか言っていたが、いや、あれじゃまだ汚いな、と思った。前は確かにもっと酷かったが。Spryは使っていなかったが、やっぱ使わないなと再認識。

SESSION5 RIAの開発の現場ってこんな感じです!!

講演者の阿部さんがカッコ良くて、声も渋かった。なかなかカリスマ的な雰囲気を醸し出していて、話しなれている感があったね。

スゴイ地図のサービス作成での実際の話をもとにしながら、大規模サービス作成のすすめ方の話なんかをしていた。

ペーパープロトタイピングの話や、二つの評価軸をもとに平面に縦軸と横軸を書いてその中に競合サービスを書き込みながら、サイトコンセプトの落とし所を決めるなんて話は、サイトディレクション以外にも応用がききそうで、参考になった。

ただ、やっている案件のスケールがでか過ぎて、違う世界の話をされている気にもなった。最後に少し時間が余ったので、質問の時間がとられたが、誰も質問しなかった。阿部さんも「勿体無いですよ」とおっしゃっていた。確かに勿体無いが、みんなあっけにとられていて、質問する余裕もなかった感がある。その後、私は質問したい事が思い浮かんで、勿体無い事をしたと思った。

総括

やっぱ突発的に質疑応答が発生したときもすぐに質問が投げかけられるように、もっと積極的に聞いて疑問を持つ姿勢が大事だなぁと思った。こういう機会に質問できないなんて勿体無いからね。

次回は、もっと技術寄りの人が技術寄りの話をする講演会に行ってみたい。

あと、こういうイベントの時は、クリップボード必須です。私は職場では活用しているのですが、今日は持っていかずに、会場についてからミスした事に気がつきました。こちらも次回以降の反省としたい。

投稿者 Songmu : 23:02

2007年11月24日

Larry Wallを心の師と仰ぐ事にした。何故かと言うと…

これまで他人のコードを一部書き換えるくらいしかしてこなかったが、Perlを本格的に勉強中。Perl楽しいよ。「初めてのPerl」を読み終わって、「続・初めてのPerl」を読んでいるところである。

先日、ついに「プログラミングPerl」(通称:ラクダ本)を手にとってしまい、前書きを立ち読みしたのだが、それにすっかりやられてしまって、いつの間にか本を持ってレジに立っている自分がいました。

前書きで面白いと思ったのは以下の部分。

私が、日本の文化について好ましく思うのは、cuteであることを恐れないという点だ。たぶん、それは弱さの表われだと考えるからだ。残念だが、この点に関してはアメリカ人は間違っていると思う。
  Perlはキュートである。キュートと言うにはいささか不格好なのだけど。そう、ちょうどラクダみたいにね。

ここのcuteは単なる「かわいい」以上の意味を持つようだ。ちなみに、私はもともとラクダが大好きです。滑稽そうなイメージとは裏腹に、パワフルな草食動物であるところが良いですね!

まあ、実は私が前書きのどこにやられたかと言うと、次の文なんですけどね。

これまでに見た最もお気に入りのアニメは「少女革命ウテナで、…

ウハ。まあ、日本的なものへの理解が深いのも素晴らしいと思います。

投稿者 Songmu : 23:33

2007年11月23日

前倒し忘年会だからコミケ出展者も参加出来たという

大学サークルのOB・OG忘年飲み。まあ、これから立て込むからこの時期に行うのは大正解。いつもはコミケの締め切りに追われて、年末の飲みだけは来られないY君も来ておりました。彼は今回は、エロは封印して一般で勝負するとか息巻いておりました。とは言え、いつもは2500部だが、今回は1200部だとか。

しかし同人だけで私の年収以上稼いでるって云うんだから恐れ入る。本業は更にそれより稼いでいるわけだからね。家賃48万/月マンションも維持しているようだ。

しかし、今回は技術寄りの人間の割合がいつもにも増して多く、すげーマニア話ばっかで、「ニコニコ動画面白れぇなぁ」とかそんな話ばっかでした。

日本有数の料理サイトのエンジニアをしている後輩と話したのが特に面白かった。充実しているようで、スーパーハカーになりてーとかそんな事を言っておりました。

Railsが楽しいとかそういう話をしてるんすよ。開発スピードが速いとは聞いていたが、どんだけ速いかと言うと、会議中に出た意見に対して、即座にプログラムを変更しプロジェクター内でアウトプットを見せられるとか、無茶な事を楽しそうに話しておりました。うおー楽しそうだ。

方や私はVBScriptでレガシーASP書いてデータベース繋いでとか悲しすぎます。いくらなんでも流石にそれは無いみたいな事を他の人にまで言われてしまったよ(笑)

てことで、私もPerlを勉強中。潰しのきく技術を学ぶ事が急務。自分でサーバー立ち上げてなんかやってやろうかとかも。実は一からパソコン自作したことないしね。

投稿者 Songmu : 23:29

2007年10月18日

技術を学ぶ上でのテーマの探し方

そういや、前のエントリーで書き忘れたことだが、ある技術を学ぶ上で、他の技術で実現していることを、学びたい技術で実現してみるってのは結構有効な手段だと思う。これまで個人的にやったことにWEB関係では、

  • TableレイアウトのサイトをCSSで書いてみる
  • Flashで出来ることをJavaScriptでやってみる

なんてのがあげられるかな。上はCSSを学ぶ上でかなり有効です。

ただ、こんなことを言っていますが、Flashは自腹で購入したくせに全然学んでいません。ここで書いている学習の法則からすると、クライアントソフトで出来ることをFlashでやってみるとかでしょうか。…敷居が高すぎるな。

そういや、今更言及しますが、mixiがやっとCSSレイアウトになりましたね。デザインどうこうはともかく、バナー広告や、検索窓なんかに場所をとりすぎて、メインコンテンツが下のほうに追いやられてしまうのはいけてないと思う。同じような問題を抱えているのがWindows Live Mail。あれもバナー広告がでかすぎて使う気にならんよ。

投稿者 Songmu : 03:12

2007年10月17日

JavaScriptでFlashライクにスライドショー

こんなのを作ってみた。

業者さんがあげてきたFlashで、こういう風に写真がフェードアウトしながら切り替わる形のスライドショーがあったのだが、写真を簡単に入れ替えられないのがムカついて作ってみた。おそらくこんなことが出来るライブラリはいくらでもあるんだろうが、勉強もかねて自作。

ソースはこちら → viewslide.js

使い方

htmlのhead部に以下の用に記述。

<script type="text/Javascript" src="viewslide.js"></script>
<script type="text/javascript">
window.onload = function(){
viewSlide("slide",249,187,["1.jpg","3.jpg","4.jpg","5.jpg","6.jpg","8.jpg","9.jpg","12.jpg"]);
}
</script>

body内でスライド描画したい位置に以下のように記述。

<div id="slide"></div>

説明

viewslide.js内の関数viewSlide()を呼び出しています。引数は左から

  • 描画するhtml内のid
  • 領域の幅
  • 領域の高さ
  • 画像ファイルの配列

となっています。関数の引数にidを指定して描画域を指定する方法は、Nifty Corners Cubeの影響を受けている。

また、これを作っているときに一行でIEのJavaScriptを高速化する方法なんて記事がタイムリーに話題になっていたので、私も使わせてもらった。

それと、次の新規サイト制作セットを一部使わせてもらった。

稚拙なコードなんで笑ってやってください。と言うかあんま見ないでください。

いろいろ課題があって、特に以下の問題に対応しないと致命的な問題になりかねない。

  • 画像が読み込み終わってからスライドを開始するようにする
  • 画像が無いときやレガシーブラウザに対するエラー処理をしっかりする

書きなぐった感じなので、その辺り細かい配慮が足りない。他にも以下のような辺りに対処したい。

  • スライド間の秒数や、フェードアウトのスピードを調整出来るようにする
  • id指定して配置できるくせに、現状ページ内に1箇所しかスライドを配置できない。複数個のスライドを配置できるようにしたい
  • グローバル空間汚しすぎ

1番上は、そんなに難しいことではない。そもそもviewslide.js内の定数をいじれば調整可能なのだが、もうちょっと簡単に実現出来るようにしたい。関数の引数で指定できるようにすればよいのかもしれないが、そんなにいくつも引数指定したら訳わかんなくならないかなとか思って躊躇中。オーバーロード出来るようにして引数省略出来るようにすりゃいいのかもしれないけど。

2番目の実現にはもうちょっと試行錯誤が必要そう。いまいち複数setTimeoutを走らせたときなんかにどうなるかが分かってない。

3番目は、もう、自分の未熟さを思い知る羽目になりました。setTimeoutを使うと、どうしても制御変数やら使いまわす変数やらをグローバル変数にしないといけないような気がするのだが、もう少しスマートに書く方法が絶対あると思う。

本当は、名前空間を上手く定義したり、window.onloadも他との競合を防ぐために使わない方が良いんだろうね。

投稿者 Songmu : 05:11

2007年10月 6日

マルチディスプレイが便利すぎる件について

職場でノートに余った17インチディスプレイ繋いでマルチディスプレイにしてみたら感動した。メインディスプレイでコードを編集して、サブディスプレイで動作確認とか、サブディスプレイのほうで画像編集とか便利過ぎ。これまでずっとノートでXGAまでしか使ったことなかったから、SXGAの便利さに気がついたってのもある(笑)

自宅に20インチくらいのワイドディスプレイを買おうかと考えていたが、自宅のノートに17インチ程度のサブディスプレイつなげた方が良さげ。

投稿者 Songmu : 01:28

2007年10月 4日

CSSとインデントとか

F氏のエントリーに反応してみた。

CSSだってインデントした方が可読性が高いのは当然。ただ、そういう意識が浸透してなかったりするんだよね。そもそもWebデザイナーにプログラムの心得がある人が少ないしさ。歴史が浅いんだよ。DreamWeaverもやっとCSS対応がまともになってきたしさ。

それに、エディタによってタブ設定が違ったり、そもそもブログのCSSをブラウザ上で直接編集しようとするとタブが使えなかったり(私はしないが)、他人のコードを適当にコピペすると、インデントのルールがばらばらで、いちいち修正するのがめんどくさかったり。

転送量を抑えるためにサーバーにアップする前にスペースを削除する妙な拘りを持った人もいたり、DreamWeaverにそういうモードがあったりで。

実際問題、現状のCSSって入れ子が無いから、インデントしなくても読めるっちゃあ読めるてのもある。

しかし、よく言われていることであるが、やっぱ入れ子に出来ないのは不便だよな。とりあえず、入れ子が出来て、あとはインターフェースの実装みたいなことが出来るようにならんもんかね。以下みたいな感じ。

.clearfix{//←実装したい機能
  ...
}
body{
  width: 40em;
  ...
  div#main{
    float: left;
    width: 70%;
    ...
    .section implements .clearfix{//←実装
      ...
    }
  }
}

とか考えていたら、入れ子をサーバーサイドで実装したなんてことが書いてある記事があった。

あとは、CSSの記法ってJSONに似てるよなぁ、JSONだったら入れ子に出来るのに、とか考えていたら、やはり同じことを既に考えて実装までしている人がいるわけですよ。しかもこれはちゃんと継承のルールだって考えられてるし。

やっぱ、「こうなれば良いのに」じゃなくて「こうしてみよう」と思えない、スキルが無いあたりが私の未熟さを物語ってますな。自分でホゲってみようとするハッカー精神が足りないよ。

投稿者 Songmu : 18:00

2007年8月25日

EmEditorでJavaScript

職場でこれまで各拠点がエクセルで管理していた売り上げ管理表をウェブアプリケーションにすることになり、社内開発することになった。

私はhtmlとJavaScript部分を担当。普段はテーブルで表示して、ボタンを押すと、フォームに切り替わるみたいな機能を作成。4時間でJavaScriptを200行程度しかかけない自分に絶望した。エラー出しまくりだし、まだまだ理解していないことが多いなぁと。

いつもEmEditorでコーディングしているのだが、EmEditor標準の設定だと、DOM関連のメソッド、プロパティを強調表示してくれないので、設定ファイルを作成した。たいしたものではないが、ここに公開するものである。

em_js_dom.csv

使い方:
ツール → 現在の設定のプロパティ → 強調(1) タブ → インポート

として、このファイルを指定すればOK。既存の設定を消すかどうか聞かれるが、標準の設定もこのファイルに含めてあるのでどちらでも構わない。良く書かれることであるが、自己責任でお使いください(使う人がいるならね…)

ちなみに今回のプログラムでは、なんとなく連想配列を上手く使えた感がある。というよりかはJavaScriptでは初めて使った。

htmlのselectタグ内のname属性名とそれに対するoptionのリストを連想配列にしておいて、JavaScriptでselect内部を書き出すというもの。

嬉しかったので、ちんけなコードながらここに貼り付けておくことにする。(勿論、このままのものを仕事で書いたわけではない。)

window.onload = insertOpts;
function insertOpts(){
  var selectLst = {//name属性とoptionリストの連想配列
    weather : ['晴れ','曇り','雨','雪'],
    editor : ['Vim','Emacs','EmEditor','秀丸','TeraPad'],
    browser : ['IE','Opera','Firefox','safari']
  }
  var i; var j;
  var nameAtt;
  var tmpLst;
  var optElm;
  var tmpTxt;
  var selectElms = document.getElementsByTagName("select");
  //各セレクトノードにオプションを追加
  for(i=0;i<selectElms.length;i++){
    nameAtt = selectElms.item(i).getAttribute("name");
    tmpLst = selectLst[nameAtt];
    for(j=0;j<tmpLst.length;j++){
      optElm = document.createElement("option");
      optElm.value = tmpLst[j];
      tmpTxt = document.createTextNode(tmpLst[j]);
      optElm.appendChild(tmpTxt);
      selectElms.item(i).appendChild(optElm);
    }
  }
}

投稿者 Songmu : 23:01

2007年8月24日

一家に一枚Accelerated-KNOPPIX

少し前の話だが、休みの間に新橋の事務所のパソコンが一台壊れていた。休み明け早々そんな報告を受け急行した。

結論から言ってしまうと、多分暑さのせいでHDDが死んだんだよね。当該のパソコンがあった場所は西日の当たる雑居ビル内だからさ。クーラーかけないで何日も放置してたからこうなったらしい。まったく酷い暑さですね、今年は。

パソコンはWindowsが起動したとたんに落ちて再起動がかかるというどうしようもない症状。セーフモードでも立ち上がらないし、修復かけても改善せず。

こりゃ、初期化だなとか思ったら、同僚は「データはどうなるんですか?」と。「そりゃ消えちゃうよ。ファイルサーバーにバックアップとってなかったの?」 …全然取ってなかったらしい。信じられない。

仕方なく、データをサルベージすることにした。やったことはなかったが、KNOPPIXでCDブートすればデータを見ることが出来るなんてことを小耳に挟んだことがあったので実行に移してみることに。

最初は、KNOPPIXで検索して一番上に出てきたKNOPPIX日本語版の公式サイトからisoイメージ落としてきてCDに焼き、ドライブにセットしてPC起動! 見事にKNOPPIXが立ち上がりました。HDDの内容も見られます! とか思ったら、日本語ファイルが見られないの。

この辺とか見て設定ファイルをいじってみるもののダメ。

諦めかけていたら、Accelerated-KNOPPIXとか言うのがあることがわかり、一縷の望みをかけてこれを使ってみたらビンゴ。初期状態で日本語ファイルが表示されます。必要なファイルをUSBメモリに移して(USBメモリも挿しゃ認識してくれる)、サルベージ完了。簡単です。

いや、すげー便利ですね。自宅にも一枚置いておくことにしました。

ちなみに、その後初期化をしようとしたら、再インストール時に、「ディスクをフォーマットしています」のプログレスバーが0%から動かない。つまり論理フォーマット出来ない。

こりゃ完全にいかれてますね。物理フォーマットしてみるかねぇ。それでももう寿命な気もするけど。

投稿者 Songmu : 01:42

2007年7月15日

「初めての」という罠 By O'REILLY

AJAXによりJavaScriptが再注目されている中、「AJAXを使ったらこういうことが出来ますよ」といったような流行に乗った書籍は腐る程出版されたのだが、現在のトレンドも踏まえ、改めてしっかりしたJavaScriptの理論やコーディングの仕方を取り扱った本はなかなか出てきませんでした。最近ようやく、DOMも含めたJavaScriptに関するしっかりした書籍が整ってきたように感じます。

これを機会に一冊本を買っておくかと思い、候補に挙がったのが以下の3冊。

  

「DOM Scripting 標準ガイドブック」は一番硬派な感じで私好み。「WebクリエイティブのためのDOM Scripting」は標準ガイドブックよりも中身は薄い感じだが、オブジェクト指向やライブラリの使用に関しての記述があるのが良い。「JavaScript,Ajax,DOMによるWebアプリケーションスーパーサンプル」は、個人的には実用例中心の解説書はあまり好きじゃないのだが、このシリーズはPHPでも人気があるように、解説がしっかりしており、その結果理論も分かるように出来ている良シリーズです。ちなみに、話はそれますがASPによるWebアプリケーションスーパーサンプル 増補改訂版のおかげで私はかなり助かりました。ASPに関する書籍って少ないし。最近は.NETばかりだしね…。

ということで、迷った末、目に止まって買った本が何故かこれ。

今回私が目的としていた、JavaScriptにおける「プログラムのモジュール化」「パッケージの作成と活用、組み込み」「オブジェクト指向」の理解に関して、全てが網羅されていたのが大きい。

相変わらず「初めての」とか吹いていますが、O'REILLYの書籍でこの文言は全く当てにならないのはご存知のとおり。私は既に、「JavaScript 第3版」も読んでいます。(これの第5版も訳してくれないかなぁ)

まだ最初の方しか読んでませんが、

ウェブページ作成の場面で、既にJavaScriptのプログラムを何度か目にしていることでしょう。プログラミングの経験は豊富である必要はありませんが、未経験の場合は他の資料を参照する必要があるかもしれません。(中略) 前述のとおり、この本の対象読者は、「ウェブアプリケーションのおおよその仕組みを理解しており、HTMLとCSSを使った経験のある方」です。

とかいきなり書かれてます。明らかに「初めての」ではありません(笑) まあ、O'REILLYの原書だと、「Learning ○○」となっているのが、機械的にことごとく「初めての○○」と訳されてしまっているのが問題なのでしょう。

ちなみに、最近「初めてのSQL」を読みましたが、かなり勉強になりましたよ。

また、Adobe CREATIVE SUITE 3 WEB STANDARDを買ったので、Flashの勉強もしたい。特にActionScript3.0に関する書籍が欲しいのだが、まだ洋書ばかりで日本語だと書籍が無いね。結局こういう本が日本で発売されるのって、JavaScriptと同じでトレンドが過ぎてからになるわけだ。

いっそペーパーバックを買ってしまうかとも思ってしまうが、高いし、読むのに時間がかかるしで自分にとっては非効率なのが分かっているのでそれはしない。

投稿者 Songmu : 23:57

2007年7月 2日

GoogleとYahoo!とテレビのチャンネル数

Yahoo!JAPANのページビューが世界一位になったみたいですね。私の職種柄、職場では、大小さまざまなIT企業のWEB広告やSEO担当営業と話す機会がままある。どこのIT企業の営業の方々も、「これからGoogleもどうなるか分かりませんよ?」/「これからGoogleは日本でも伸びてきますよ」という論調だが、はっきり言って私はそれを信じていません。

日本でYahoo!が使い続けられる理由に以下のような日本人の特性があげられると思います。以下は箇条書きにしましたが、実際はそれぞれが絡み合っています。

  • 与えられたものでとりあえず何とかしようとする
  • 手段自体をカスタマイズしようとはしない
  • 敢えて他人と大きく異なるものを使おうとは思わない。周りと同じ、最大公約数的に分かりやすく標準化されたプラットフォームを使う

一番上は簡単です。多くの日本人は、とりあえずトップページとしてYahoo!があたえられ、それに大きな問題が感じられないから、それを使い続けているのです。

また、実際問題として、最初にYahoo!とGoogleが与えられたとしたら、多くの日本人はYahoo!を選ぶでしょう。

このあたりは、日本と欧米のテレビのチャンネル数の違いに関係がある気がします。

基本的に欧米はテレビのチャンネル数が膨大にあって、そこから自分の見たいチャンネルを選択、購入しないといけません。逆に日本は、チャンネル数が限られてはいるのですが、(地域によって違いはありますが)ほぼ共通のチャンネルの組み合わせが与えられています。

日本では、なんとなくチャンネルを回してみて、面白そうな番組があったら、それを垂れ流しておく感じです。逆に欧米は全チャンネルを回すだけで何時間もかかるので、自分である程度アタリをつけておかないといけません。

日本人は、よほど見たい番組が無い限りテレビのチャンネルを自分からはあまり選択しません。限られたチャンネル数のお仕着せのメディアに慣れてしまっているのです。

この「チャンネル」を「情報」に置き換えると、Yahoo!が日本的で、Googleが欧米的であることが分かります。

Googleの姿勢は、トップページを見れば分かるように、自分で情報を選びなさいという姿勢です。検索ボックスしかない潔いトップページは、多くの日本人が見た場合は、戸惑いを禁じえないはずです。それよりかは適度に情報が垂れ流されているYahoo!の方が心地よいはずです。

それに対してこういうことを言う人がいるかもしれません。
「Googleだってカスタマイズすれば、自分にふさわしい情報を『垂れ流してくれる』ようになるじゃないか」
と。勿論それは何の反論にもなっていません。

何故ならば、多くの日本人は、「多少使いづらくても、最初から準備されている万人共通のプラットフォーム」が好きだからです。そして、手段自体をカスタマイズする手間をかけようとは決して思わないのです。

実際そりゃそうです。ピアノを買ってきて、それを自分で調律してみようとか、キータッチを調整してみようとか、普通の人は思わないでしょう。

例えが極端すぎましたが、日本のパソコンユーザの大半を占めるライトユーザにとっては、インターネットが普通に見られれば(この表現はおかしな表現であることを承知で使っています)、問題ないわけで、他人より上手く使ってやろうとか思わないのです。

周りと同じようにインターネットを使えれば良く、ブラウザや検索エンジンを自分の好きなようにカスタマイズしたりすることに意味を感じられないのです。もちろんコンピュータが余り良く分かっていないから余計なことをしたがらない部分もあるのでしょうが、コンピュータやインターネット如きにそこまで煩わされたくないと言う姿勢はむしろ健全かもしれません。

だから敢えてFirefoxを使ってやろうとか、Googleを使ってやろうとか思う人は少ないのです。

上を踏まえると、「結局日本人はコンピュータリテラシーが低いんじゃないか」と言う意見が出てきそうです。それは大きくは間違っていません。ただ、厳密な正解は「コンピュータリテラシーが低い人がたくさんパソコンを使っている。」ということになりそうです。

日本の特徴として、識字率に見られるように、全体的なボトムアップの充実があげられます。身も蓋もない言い方をすると、「どんな馬鹿でも生きていける」ような社会が完全ではないにしろ実現されています。これは実際誇って良いことなのではないかと思います。多くの人が生きられた方が有効需要の獲得、社会の活性化に繋がりますからね。その分エリートが育ちにくいとの問題点もよく指摘されますが。

話を脱線させますが、普通の人の10倍稼いでいるお金持ちが、普通の人の10倍ティッシュを消費するわけではありません。そして、逆にティッシュを買うことすら出来ない貧乏人が出てくる状況になるとしたら、それはクリネックスにとって大きな痛手です。稼ぐことは決して悪いことではありませんが、富が偏在しすぎて、貧乏人が出てきてしまうとしたらそれは社会として非常に非効率であることは確かなのです。社会全体の底上げは非常に重要です。

話を戻しますが、日本においてコンビニはあれだけのサービスを展開しながら、誰にでも店員が勤まるようにマニュアルがこれでもかと整備されています。携帯電話だってめんどくさい設定もせずにすぐに誰だって使えるように出来ています。何度も言いますが、これは凄いことです。

i-Phoneがスゲー、進んでるとか騒がれてます。マニアはそう思うでしょうが、冷静に考えて、i-Tune立ち上げてしかも最新バージョンにアップグレードしてアクティベードだなんて、一般的な日本人がそんなしちめんどくさいことをするでしょうか? 多くの人は今の携帯電話のままでよいと思うでしょう。先ほど述べたように、手段のカスタマイズなんかに煩わされたいとは多くの日本人はなかなか思いませんから。

話を脱線させまくりましたが、このように、「誰にだってできる」と言うのは、日本におけるパソコンの世界でも例外ではありません。つまり、コンピュータを全然知らない人間が、平気でパソコンを購入し、使いはじめることが出来るような敷居が低さが実現されています。そして実際そういったユーザーが大半になっていると言う現実があります。

そういった人たちにとっては、尚更、Yahoo!のような、万人向けに標準化されたお仕着せのプラットフォームが使いやすいと感じるのでしょう。SNSにおいて日本ではmixiが一番流行ったのもこのあたりにも原因があると思います。

まあ、いろいろ書きましたが、結局のところ、Yahoo!は日本のインターネット界の「巨人」として既に地位を確立してしまっています。この「巨人」と言うのはプロ野球界のジャイアンツと言う意味です。一度「巨人」になってしまった以上、たとえどんなに体質が腐っていても、方針がおかしくても、トップに君臨し続けるのです。ロッテが逆転することはありえないのです。日本はそういう国です。

投稿者 Songmu : 02:14

2007年6月15日

受験番号SW372-XXXXの方は、合格です。

ソフ開受かってた。思っていたより点数高くて、そこそこ余裕の通過でした。あの出来でこれだけの点数が取れてしまったのが意外。

対策は、完全教本に目を通したくらい。読んでても分からないところ結構あったし、やばいなぁと思っていたのだが。しかし、これで晴れて実務経験の無いソフ開保持者の出来上がりです。

それで今日仕事でJavaScriptでWebアプリ(とも言えないようなもの)を書いていたのだが、もう全然だめですね。JavaScriptのスコープとか、オブジェクト指向とか全然理解してないの。Functionを機能ごとに細分化して使いまわすとかが下手糞。こんなのがよくソフ開受かったもんだよ。

ソフ開でひと段落と考えていたのだが、この点数なので、色気を出してちょっと次も狙ってみたくなってもいる。順当に行けばセキュアドだろうか。アプエンは厳しいか。データベースという手もありそう。

そういや、Safari Windows版のベータが出ましたね。Appleのこの姿勢はかなり評価できる。

投稿者 Songmu : 02:55

2007年6月11日

私がMAC使いが嫌いな理由

とまあ、ちょっと危険なタイトルをつけてしまったが、別に全員が嫌いなわけじゃないのです。ただ、一部非常に偏屈な人種がいて、そういう人はイヤになる。

虐げられている(と感じている)少数派特有の強みを前面に押し出してくるところがキライである。そういう人に限って、自分の痛みには敏感なくせに、他人の痛みには驚くほど鈍感だったりするんだよ。

「何でMAC対応じゃないんですか?」とかそういったことをすぐ言ってくる。勿論、実際MAC非対応の部分もあり、努力不足を認めざるを得ないこともある。ただ、それでもこちらはかなりMAC環境に気を配ってはいるのである。

それに引き換え偏屈なMACユーザーはWindows環境のことなど顧みようともしない。sitファイルを送ってくるだけならまだしも、Windows環境で解凍したら文字化けする圧縮ファイルを平気で送りつけてきたりするのだ。

しかも、「何でMAC対応じゃないんだ!?」とか言ってくる人の多くは、自分の側の問題で見られない場合が殆どなのだ。自分の側の問題なのに、すぐ人のせいにする癖がついてしまっている。

以前なんか、とあるMACユーザーが社内で使っているネットワークやコンピュータに制限がかかっており、そのせいでストリーミング用のポートが遮断、プラグインのインストールが制限されていて、動画コンテンツが閲覧できないことがあった。

それなのに、当の本人は、MACとは関係ないにもかかわらず、「MACユーザーに優しくない」とか言って、結局最後まで完全には納得してもらえなかった。

どういう世界にしても、依怙地になっている少数派ってのは厄介だ。歩み寄ろうとしても、簡単に近づかせてくれないから。

そうなると、こっちもこっちで「プレステのソフトがサターンで動かないのは当たり前だし、その逆もまた然りだ」とか乱暴なことを言いたくなっちゃうよね。それも宜しくないのは確かだが。

その点Linuxユーザーは潔いよ。

そういや、職場で部下と言うかアシスタントをつけてもらえることになりそうである。これから募集かけるんだけど。

中国語が多少は出来て、Web関係の知識がそこそこある人。それぞれのハードルは高くないんだけど、両方合わさると少なそうである。しかも募集形態は社員じゃなくてパートだし…。来てくれるかねぇ。

もちろん募集要項に作業環境はWindowsになる旨を明記しておいた(笑)

投稿者 Songmu : 01:32

2007年5月28日

Javascriptでいろいろ

最近、少し仕事に余裕が出てきたので、ちょっと遊びもかねて業務効率を上げるツールをいくつか作っている。Javascript+CSS+htmlで(笑)。 例えば、名札作成スクリプト。csvファイルのリストを読み込んで、スタッフの名札を一気に出力するツールである。イベントなんかで専用の名札を使いたいときなんかを想定して作った。ロゴ画像などをcsv内の指定によって入れ替えられるようにしている。

cssで{width:"9cm";height:"5.5cm";}とか指定したら印刷時にぴったりそのサイズで出力してくれるのでかなり便利。CSSでトンボとか出せるようになるともっと便利なんだけどなぁ。一応策定はされているようだが。もはやWeb技術じゃないね。

Wordとかで同じこと出来るのかもしれないが、Office苦手なのでJavascript。まあどっちにしてもたいしたことをやっているわけではないが。

そういえば、ニコニコ動画でhtmlのtable手打ちでセルの色を指定しながらドット絵を描くという神業動画があり驚愕した。アメーバビジョンに転載されたものが以下。

これを見て思ったのは、javascriptとcssを使って、鉛筆ツールとスポイトツールだけの簡単なお絵かきツールなら結構簡単に作れるかもなと言うこと。

描画部分に関しては、1×1のボックスを敷き詰めて、全てに固有のID('x0003y0043'のような感じ)を振っておいて、そのボックスの背景色がマウス操作によって入れ替わるようにすればよい。

スポイトツールも同様に、ボックスを敷き詰めておき、こちらは逆にマウス操作によって背景色を取得するようにしておけばよいだけだからね。描画色の指定に関しては、普通にRGBで指定させても良いし。

なんか作りたくなってきたかも(笑) 既存のものはたくさんあるようですが。

投稿者 Songmu : 01:16

2007年5月25日

どうやらWebにハマっているようで

友人がやっているカンボジアの学生への基金のプロジェクトに絡んで、Webサイトを私が作成することになりそうである。もう3年目になるのだからちゃんとしたWebサイトを持ったほうが良いよというお節介もあり、なによりどうやら私自身の中にこれまで培ってきたスキルを使ってWebサイトを一から構築してみたいと言う欲求があるようで、手を挙げた。

そういえば、5月のGW明けにAdobeのCreative Suite3の日本発売日の発表があった。かねてからGW明けに発表があるという噂があったので、かなりわくわくそわそわしながらその発表を待っていた。発売日は6月22日。発売日にWeb Standardを買ってやろうと思っています。こんなに発売が待ち遠しくて、しかも発売日にソフトを買うだなんて、クロノトリガーと魔装機神以来でしょうか。ソフト違いですが。まともなパッケージソフトを買うのも、学生時代にMethematicaアカデミックを買って以来ですね。かなりキヨミズ。

Illustratorのライブトレースがかなり魅力的だが、流石にWeb Premiumまでは手が届かないかな。Fireworksは使ったことがないが、CS3でもグラデーションメッシュが無いらしいのが痛い。

そういえば、先日、職場で業者から送られてきたイラレCS2形式のファイルが開けなくて困ったことがありました。ご存知のとおりCS2のファイルは、旧バージョンのイラストレータでは開くことが出来ないのです。

ところが、戯れにAdobe Readerで開くと、…なんと開くではありませんか! 勿論編集はできませんが、閲覧は可能です。いやはや、流石は“Adobe” Readerです。

じゃあ、もしかして、InDesignも開けるかも、と試みてみましたが、敢え無く失敗。そういえば前にも同じ試みをしたことがありました。しかし、Illustratorのファイルは開けてInDesignが開けないだなんて、逆のような気がするよ。

と言うことで、今はどうやらWebにハマっているようで、ついコンピュータ関係の書籍を読んでしまい、中国語の勉強をあまり進めていない危機的状況。

投稿者 Songmu : 01:56

2007年5月21日

会話文の正しいHTMLマークアップ

このエントリーを書いたときに、会話文のマークアップに迷った。結局安易に<br>で区切ってしまっている。実際は会話文はどのようにマークアップするべきなのでしょうね。Web小説の世界なんかでは結構議論になっているようである。いくつか考えてみた。

<br />を使ったマークアップ

Q「質問質問質問」<br />
A「回答回答回答」

前回私がやったマークアップですが、これは単に改行しただけです。

現実的なマークアップ

html
<p class="dialogue">
  <span class="utterance">Q「質問質問質問」</span>
  <span class="utterance">A「回答回答回答」</span>
</p>
CSS
.dialog span.utterance:after{
  content: "\A";
}
ただ、上記CSSだとIEなどでafter擬似クラスを解しないUAでは改行してくれないので、以下のような指定をすることになるのでしょうか。
.dialog span.utterance{
  display: block;
}

ただ、見た目改行させるためだけに、インライン要素をブロック要素にしてしまうってのは、やりすぎな感じがする。<p>タグの中に、ブロック要素を格納することになるわけだしね。それだったら素直に<br />を使えばよい気もするよ。

やりすぎなマークアップ

html
<p class="dialogue">
  <span class="utterance"><span class="speaker"><abbr title="Question">A</abbr></span><span class="voice">質問質問質問</span></span>
  <span class="utterance"><span class="speaker"><abbr title="Answer">A</abbr></span><span class="voice">回答回答回答</span></span>
</p>
CSS
.dialog span.voice:before{
  content: "「";
}
.dialog span.voice:after{
  content: "」";
}
.dialog span.utterance:after{
  content: "\A";
}

これは流石に冗長か。ちなみに、会話文の中にさらに段落や改行、二重かぎカッコでくくる要素が出てくる場合は、更に<span>でネストするのかね。うげ。

結局何が言いたいかと言うと

思うに、どうマークアップすべきかなんて、Web上で文書を公開する手段でしかないhtmlに縛られている状態は滑稽である。特に余りにも「正しい」htmlを書くことにこだわりすぎて、マークアップのためにマークアップする状態に陥ることは愚かである。もちろん、文法的に誤りの無いhtmlが書けることは必要だが。

とか言ってしまうと、身もふたもないが、結局、何のためにマークアップするのかをはっきりさせれば、自ずからどのようにマークアップすれば良いかが分かるのです。私は勿論そうなっていないが、そうなることが理想なのかな。

つまり、会話文を上に挙げた例のようにマークアップしたとして、単に見た目の改行以上の意味を持たせなくて良いと思うのなら、<br>で区切ってしまって良いのです。

ただ、細かくマークアップしておくと後々便利なことがあります。上記の会話文の例だと、たとえば、ある文章の中で、

  • 何回、会話文が出てきたか
  • 会話文が占める割合はどれくらいか
  • とある人間がどれくらい、どれくらいの長さ発言したか

などを、DOMを使ってすばやく調べることが出来ます。そういったxhtml文書の特性をどのくらい活かしたいかによって、どのようにマークアップするかを決めればよいのではないでしょうか。

投稿者 Songmu : 01:24

2007年3月18日

Portable SleipnirからPortable Firefoxへの移行

明日から神戸出張です。一週間まるまる神戸である。今回は割と根回しがしっかり出来たので、向こうではそこまで苦労せずに済めばよいなぁと甘い期待。21日の祝日をぶつけられてしまったので、そこはしっかり休みます。幸いホテルの近くにプールを見付けたので、そこで泳ぐ予定。出張に水着を持っていくこの不真面目さ。

出張時は私用のパソコンは持っていかないが、USBメモリに個人データやアプリケーションを突っ込んで持っていくことにしている。

で、例によってUSBメモリにはPortable Sleipnirが入っていたのだが、これにPortable Firfoxを入れてみることにした。

とはいってもそんな対したことではない。インストールにあたっては以下のサイトを参照した。非常に役に立った、感謝。

Portable Firefox 2.0 系の日本語化

さて、個人設定をどうやって移し変えたらよいものかと調べてみたが、情報が古かったりして、詳しく書いてあるサイトがあまり無かった。一応Firefoxの設定ファイルが、Windows XPの場合、

%AppData%\Mozilla\Firefox\Profiles\hogehoge.default\

というフォルダ以下に格納されていることは分かった。ここの内容をごっそりPortable FirefoxがインストールされているファルダのDataフォルダ以下のDefaultフォルダ内に強引に突っ込んだら、立ち上がりにかなり時間(30秒前後!)を要したものの正常に起動した。アドオンも問題なく動くようだ。とりあえずこれで使ってみることにする。

投稿者 Songmu : 22:56

2007年2月28日

Firefoxの難点を敢えてあげてみる

エイヤっとFirefoxに切り替えて使っていますが、非常に快適です。本日も勤務先で簡単なWebページを一枚ペラっと作るのに非常に役に立ちました。ちなみにちょっと遊び心を出してNifty Corners Cubeと言う角丸ボックスを実現するJavascriptライブラリを試しに使ってみました。

さて、それでも何日か使ってみると流石にアラも見えてきます。そのあたりを少しあげてみます。

まず、あげられることは、起動が遅い、ということ。というか、IEコンポーネントブラウザに比べると遅いのは仕方がないのかもしれないけど。IEってエクスプローラーとかとモジュール共有してるのでしょうし、となると、Windows起動時にプログラムの一部が立ち上がってる形に近い訳だからね。(かなりいい加減な記述なので信用してはいけない) それにFirefoxも立ち上がってからの動作は快適なのだから別に大きな問題ではない。

次に、ページのズーム機能がいけてないということでしょうか。OperaやSleipnir2.xx、IE7では実装されているページのレイアウトをそのまま拡大、縮小出来る機能を実現できるアドオンは現在無いようです。実際、ブラウザの現在の仕様上、アドオンでの実現は難しいみたいですね。

別にこの機能にこだわりがあるわけでは決してないのだが、まあ、他のブラウザで出来ることが、Firefoxで出来ないとなるとちょっと悔しい。

あとは、検索ボックスの問題。基本的な検索に関しては問題ないが、辞書との連携に難有りです。私はたまーに英語でメールを書いたり、ドキュメントを作ったりすることがあるので、検索ボックスですぐオンラインの辞書が使えると重宝するのです。Sleipnir2.xxでは、検索ボックスの最初に一文字打ち込むと検索先を切り替えることが出来て、“e hoge”だと英和、“w ほげ”だと和英といった形で一発で辞書での変換が可能だったのですが、Firefoxではそういったことが出来るアドインは残念ながら無いようです。

仕方がないので、Google検索で“和英 ホゲ”とかやって代用しています。職場ではSleipnirがメインなので、“w ほげ”とかもまだ使ってはいます。

投稿者 Songmu : 01:50

2007年2月21日

Sleipnirを擁護する

てことで、Firefoxマンセーになってしまった私ですが、長年お世話になったSleipnirを簡単に見限ってしまったことに罪悪感を禁じ得ません。なので、TOPページにはFirefoxは加えましたが、Sleipnirは外していません。

実際、Firefoxを使い続けていると、ちょっとは悪い点も見えてきます。大きな点は、Sleipnirに比べるとリソースを喰う点でしょうか。やはり、単独で動いているSleipnirに比べると、いろいろ後から拡張機能を盛り込んだFirefoxの方がメモリ使用率は高めになってしまいます。特にTab Mix Plusを導入したら、動作がやや重くなりました。

ただ、メモリ1GBあると全然問題ないんだけどね。むしろなぜか動作自体は、SleipnirよりもFirefoxの方が軽快なのだ。

昔は、Sleipnirはタブブラウザながらの動作の軽快さがウリの一つだった気がするのだが、Ver2から重くなり、バージョンアップを重ねるごとに重くなるという悪循環を繰り返している気がします。

多分作者もそのあたりに気が付いて作ったのが、Graniなのでしょう。動作環境のメモリ64MBを謳っているように、多分かなり動作が軽快なのでしょうね。なので、Web Developerなどの拡張機能が不要な一般の人が普通にブラウジングする分にはGraniはかなり快適なんじゃないかなぁと想像します。

しかし、Web Developerマジ便利。ボックスの罫線を表示させるとか便利すぎ。今までボックスの領域が分からなくなったときに、CSSに手を加えて、Borderの罫線を表示させたりしていたのが馬鹿らしくなってくるよ。ワンクリックでHTML-lintが使えるのも素敵過ぎ。

てことで、結局Firefoxマンセーになってしまうんですけどね。

投稿者 Songmu : 01:56

2007年2月20日

Vista導入ならず

職場で新たに拠点を構えることになったのですが、そこのハードウェア関係なんかは私が担当なわけです。いつもDellで安っすいPCを購入しているのですが、一番安いモデルだと、もはや法人向けでもVista搭載モデルしかなくて、超ビックリ。そんなすっぱり切り替えてよいのでしょうか。

こりゃ腹を据えてVista導入か、とか思っていたのですが、職場のグループウェアやウィルスソフト、VPNなんかの関係でチキってXPにしてしまいましたとさ。実際グループウェアが満足に動かないらしい。

結局HPで買うことにした。Dellより大分高くなってしまうのですが、苦渋の決断です。DellはXP売らなくて良いのかね。絶対機会損失だと思うのだが。多くの法人は現段階では絶対乗り換えたくないと思うのでそうは買ってはもらえない気がするぞ。実際、Dell以外のほとんどのメーカーは選択肢としてXP搭載モデルを残している状況。

あ~あ、Vista導入になりかかっていたので、めんどくせーとか思いながら、ちょっとわくわくしていたのですけどね。仕事が仕事なので、近々職場に一台は導入することになるのだろうけどね。私の場合必要なのはWebの表示確認と、簡単なWebアプリケーションの動作確認ぐらいだけど。

投稿者 Songmu : 01:50

2007年2月18日

Firefox、Sleipnir(+α)化計画とその実行過程

ずっとSleipnirを使ってきたのだが、使用のマシンに関してはFirefoxに乗り換えた。Sleipnirで便利だと思っていた機能がFirefoxのアドオンを使えばほぼ全て実現できることに今更気が付いてしまった。Firefoxは動作がもっさりしている印象があったが、Ver. 2.0を使ってみたら全然軽快で、かくしてSleipnirの利点が全く無くなってしまいましたとさ。しかも、Firefoxの方がさらに優れた拡張機能を備えるってんだから…!!

しかも標準のブラウザに指定するのが楽なのが地味にいけてます。Sleipnirだと標準のブラウザに設定しても、メッセンジャーやGoogle DesktopからのリンクなんかはIEで立ち上がってきてくるという中途半端な標準具合で、それをSetBrowserで強引に修正したりしたりしていたのですが、Firefoxは設定一発でした。

改めて、オープンソースの威力と、プロプライエタリの限界を見せ付けられる形となりました。Sleipnirはちょっと応援していたので切ないね。これで晴れてGeckoエンジン使いとなりました。

これまでSleipnirを使ってきた大きな理由として

  • 動作の軽快さ
  • タブブラウジング
  • マウスジェスチャー

この3点が挙げられる。マウスジェスチャーで主に使うのはページ(タブ)を開く、閉じる、切り替える、更新するなど。特に秀逸だったのは、右クリックをしながらマウスホイールを動かすと、タブをグリグリ切り替えられる点で、マウスジェスチャー本家のOperaなんかより全然軽快に動くので気に入っていた。リンクをホイールクリックすると新規タブで開く点も密かに気に入っていた。(実はこのあたりに関しては、Sleipnir Ver.2.xx よりも 1.66の方が軽快だったりするのだが)

さてその辺りの優位性が、これから紹介する3つのアドオンによって駆逐されてしまいました。

All-in-One Gestures

マウスジェスチャーを実現するアドオン。各種ジェスチャーの設定、ホイールでのタブのぐりぐり切り替えにも対応。動作も全然軽快。

Tab Mix Plus

タブを開く位置の設定などを細かく設定できる。デフォルトだと新規タブが一番右に開いてきてしまうのが気に食わなかったのでインストール。

これで新規タブを開いたときに、現在のタブの右側に開くように設定。タブを閉じたときもそのタブを表示させる直前に表示されていたタブを表示するようにした。また、Javascriptでのポップアップウィンドウも、別ウィンドウではなく、同一クライアント内で開く設定にできた。

密かに優れものなのが、ツールバーに「最近閉じたタブを開く」ボタンを追加できること。

removetabs

Sleipnirで重宝していた、タブをまとめて閉じるボタンをツールバーに実装するアドオン。全てのタブを閉じる、右側のタブを閉じる、左側のタブを閉じる、他のタブを閉じる、と欲しかった全ての機能を実現できるので合格。

他に便利なアドオン

とまあこんな具合でSleipnirの優位性が消し去られてしまいました。他に、以下のアドオンなんかが便利です。

Google Toolbar

ご存知Google Toolbar。Sleipnir最大の弱点(?)としてページランクを表示できないことがあげられますが、もちろんFirefoxだとそれが可能です。私の場合、検索ボックスもその他のアイコンも全て取っ払って、ページランクだけをウィンドウ右上、メニューバーの隅っこで表示させるようにしました。検索ボックスはブラウザ標準のものを使用します。そういえば、このページがいつの間にかページランクが3とかになっててビックリです。

IE Tab

世の中にゃあIEでしかまともに見られないサイトも数多くあります。(例えばこんなとこ) そんな腐ったサイトにもちゃんと対応してあげるための非常に心優しいアドオン。サイトを表示するときのレンダリングエンジンに、Trident(IEのレンダリングエンジン)も選べるようにするものです。

単に切り替えられるだけではなく、特定のサイトをTridentで開くように予め指定できるのが優れものです。(正規表現での指定にも対応) これで、GyaoやらWindows Updateやらmhtファイルやらも一発でちゃんと表示してくれるようになりました。

社内での業務用WebアプリケーションはIEでしか動かないものも多いので、業務用PCはSleipnir継続かなぁとか考えていたのですが、これを使えば何とかなるかもしれません。

ただ、これで表示させた場合、当然のことながら、表示画面はIEのそれなので、コンテキストメニューがIEと同じであるほか、各種アドオンも使えなくなります。つまりマウスジェスチャーなんかが使えません!! なので、Tridentを使ったタブブラウザを使いたい場合は、やはりSleipnir、Lunascapeなんかに軍配が上がるでしょう。

Web開発にあたって、便利なアドオン

これまで書いてきた位では、SleipnirもFirefoxもどっちもどっちなのですが、決定的に差がつくのはこのあたりの拡張機能でしょうか。

各種説明は下のページが詳しいので説明は譲りますが、私が入れたのは、CSS用に「Web Developer」、JavaScript用に「Firebug」、画面の好きな場所のサイズを測れる「MeasureIt」、カラーコードを抽出できる「ColorZilla」以上4点。

WEB制作時に便利な9つのFirefox拡張機能(Add-ons)(外部リンク)

「Sleipnirは機能がたくさんあって便利… そんな風に考えていた時期が俺にもありました」
てことで、これからFirefox使いになります。

投稿者 Songmu : 21:44

2007年1月21日

「NHKスペシャル|グーグル革命の衝撃」を見て

一応チェックした。Googleに対してどうもネガティブな雰囲気でしたね。Googleを新時代のメディアと考えると、NHKにとってかなり脅威でしょうから、ああなったと考えてしまうのは考えすぎでしょうか。

Adwardsで稼ぐ青年とか、Googleが情報を操作している、というような極端な事例ばかり取り上げて、それでいて、Eric Schmidtがやたら壮大なことを自信たっぷりに、マッドサイエンティストチックに堂々と言うもんだから、Googleに対して殆どの人が良い印象を持たなかったのじゃないかと想像する。

他にも社員の落書きにあるgoogle.govとかgoobleなんか普通のギャグのノリだと思うのだが、ああいう風に取り上げられてしまうと、空恐ろしく感じてしまう人も多いでしょう。

中国での検索結果の話なんか、Googleはしぶしぶ検閲をしていることを公表しているのに、そのくだりが無く、密かにそういうことをやっている感じで放送されていたし。

無線LANのアクセスポイントでPCの位置情報が分かるとかそういう話があったが、そんなことは当たり前だ。いやなら繋がなきゃ良い。個人情報どうのとか言うが、少なくとも自分のIPアドレスはインターネットに繋いだ時点で絶対に公開しているのですよ!?

話がそれるが、インターネットは匿名だとかよく言われるが実際は全然匿名じゃありません。というより、実生活とほぼ同程度に匿名性が保たれているというだけの話です。コンビニでコンドーム買ってったヤツの名前なんて特定しようと思わなきゃ分からないし、それと同様に掲示板に書き込んだヤツも調べなきゃ分からないというそれだけの話です。裏を返せば、調べりゃたいてい分かるし、時には分からないこともあるということです。そんなの実際の犯罪捜査でも同じでしょう。

何にも分かってないメディアが匿名だ匿名だと煽るせいで、本当に匿名だと感じてしまっている人も多いし、そのせいで悪用する人も絶えない感じがするね。

インターネットで問題があるとすれば、その嘘っぱちの匿名性ではなく、インターネットを利用して人と接している時でも、人と接している感覚が乏しくなってしまいがちだということにあると思うのですよ。現ナマより、カードのほうが大きな買い物をしてしまうという、そんな感じに近いと思う。

話を戻すが、Googleを擁護するわけではないが、ちょっと悪意が見える番組構成だったかなと思う。多くの人がGoogleに対して良い印象を持たなかったかもしれないが、お前らがきっと普段Yahoo!でやってることと同じことなのですけどね。

Googleが検索市場で独占的状態になっているのは危惧すべきなのかもしれないが、それでも現在Googleが国家のように多くの人に監視されているメディアであり、インタラクティブなメディアであることを考えれば、既存のメディアに比べても、別に危険な存在ではないし、むしろ安心なくらいかもしれませんけどね。それに他の検索エンジンもがんばっている現在、まだまだ独占的というには程遠いし。

むぅ。逆にGoogle礼賛ぽくなってしまったので、sage(?)

追記: 勤務先もSEO対策をしているのだが、上司がこの番組をちゃんとチェックしていた。すばらしい。SEO Spamの話なんかもあれを見て理解したようで、助かった。今後話を通しやすくなったと思う。

投稿者 Songmu : 23:46

2007年1月14日

TOPページ更新

このドメインにも一応TOPページがあったのだが、余りにも酷いものだったので、一応それなりにまともなhtmlで書きなおした。CSSもちょっと真面目にファイルを分けて、レトロブラウザにはCSS適用しないようにしたり、default.cssを設定して、ブラウザごとの差異が出にくいようにしたりしてみた。

現状はこの程度のデザインだが、デザインを変更しやすいようにCSSを組んでみたので、今後もしかしたらもう少し変えるかも。リキッドデザインにしてみようかとかも思ったが、無茶な話だと思ったね、実際。

それと、この日記以外にコンテンツを増やすかもしれない。一応ネタはある。

投稿者 Songmu : 23:04

2006年12月14日

機械のトラブル続きの年末で

朝、職場のプリンタ(複合機)が調子が悪くなったと連絡を受けたので、別の事務所に直行の予定だったのだが、先にとりあえず職場に行った。コピーとファックスは動いているが、パソコンからプリントアウトが出来ないのでドライバの問題かなとかとも思ったが、いったん電源スイッチ落として入れなおしたら一発で復旧した。電話口でそれくらいの指示が出来なかった自分の無能さに腹が立つ。1時間のロス。

出先には、PCの調子が悪いとかで見に行ったのだが、ウィルスにこっぴどくやられていた。しかも誰かがフリーのウィルス対策ソフトをインストールしていたせいで、もともと入っていたソフトと競合して、その警告を出すは、ウィルスの検知は止まらないわで、愉快なくらいにっちもさっちも行かない状況だった。問答無用で初期化した。実は行く前からそのつもりだった。CD-ROMドライブが空いたり空かなかったりと、ハード的にもかなりキており、クリップを針金状に伸ばしてこじ開けてCD挿入したりした。

文字化けしたメールがあるとかで、その解読を頼まれた。見ると、数値文字参照のまま送られてきたメールである。こんな感じのヤツである。


&#25991;&#23383;&#21270;&#12369;&#12384;&#12424;

Webメールはこういうのが多い。特にYahoo!。今回は送ったほうも送ったほうで、Yahooであるばかりか、yahoo.co.ukだった。送信者は純粋な日本人であるにもかかわらずだ。

適当にメモ帳開いて、以下のように記述して、htmlファイルとして保存してブラウザで開いて解読した。

<html>
<body>
&#25991;&#23383;&#21270;&#12369;&#12384;&#12424;
</body>
</html>

先日、とある事務所のプリンタが壊れ、保証もきかないようだったので、コストも考えてソッコー別のを買い換えて据え付けたことがあった。故障した機械は本社のシステム部署の人たちに送っていたのだが、彼らは分解修理して直してしまったらしい。給紙部分のローラーのゴムが磨耗しており、そこをホゲったら直ったそうだ。

修理にかかる時間を考えるとコストに見合わない気もするのだが、システム課の意地であろうか。流石である。ホント機械が好きだよね彼らは、と感心するよ。しかも、分解修理の後、ネジが一本余ったというお約束までかましたらしい(笑)

投稿者 Songmu : 02:47

2006年12月 6日

コンピュータとか資格とか

仕事でJavascriptとレガシーASP(VB)を連携させて簡単なWebアプリケーションを作っているのだが、ホント自分で書いてて、コードが汚くていやになる。あちこちを参照しあうようなスパゲッティプログラムになっているわ、サブルーチンとしてまとめなきゃいけないようなコードをひとつのルーチン内でまとめて書いてしまっていて独立性は保てていないわで酷いもんである。

設計をしっかりして仕様をまとめておかないといけないなぁと反省しきりである。オブジェクト指向の何たるかを肝に銘じなくてはいけません。

まあ、オブジェクト指向なんて所詮はイデア論であり、2300年以上前にアリストテレスに否定されているわけですけどね。そんな、負け惜しみなのか与太話なのかわからないたわごとを以前アリストテレスの形而上学を読んでいたら思いついたものだが。

しかし、基本的にまともにコーディング経験がなく、我流なのが問題だね。もしソフトウェア開発技術者に合格したとしても、実務経験のないソフトウェア開発技術者資格保持者って微妙すぎる気がする。

資格といえば、同僚が中国語検定1級の1次に合格したらしく喜んでいた。凄い。400人弱が受けて、通過者は6人だった模様。2次もがんばって欲しいが、最終的には合格者無しの年もあるみたいだねぇ。

そんだけ苦労して受かったとしても、3年で効力を失うって言うんだからね。1級試験だけは年1回開催なので、要は中国語検定1級保持者ってのは日本全国に一ケタしかいないわけですよ。受かっている人も、基本的に更新対象者ばかりなんじゃないかと言う。

こういってしまうのは悲しいが、私は未来永劫中国語検定1級を受けることはないでしょう。準1級は目標にしたいと思う。2級は常時受かるくらいの実力は持っておきたいところ。

投稿者 Songmu : 22:31

2006年11月23日

ちょっとづつマイナーチェンジ

サイト内にこのサイトについて、とプロフィールを追加。トップページからのリンクも張った。

この2つのページはこれだけだとちょっとさびしいので、dl, dt, ddタグの装飾を考えないといけないな。

このページ上部の横に並べたリンクも本当は、<li>とかでタグ付けしたほうが良いのだろう。「|」で仕切りを作っているあたりも、かなり適当な感じ。余裕があったらいじりたい。

さしあたってのその他の課題。

  • フッターの装飾
  • リストタグの装飾(メインコンテンツ部・サイドメニュー部それぞれ)
  • <h4>タグの装飾
  • blockquote, pre, codeタグの装飾

この3連休はゆっくりできた。ボウリング、エッシャー展、友達と飲み、ロード、恋人、読書、サイトいじりと一通りこなしたので満足。

投稿者 Songmu : 23:43

2006年10月28日

CSSハク的なこと

長いエントリータイトルを書いて、それが2行にまたがったときに表示に不具合が出ることに気がつき調整した。「デキるやつ…」を書いたときに気がついた。2行にまたがるものが果たして見出しとしてふさわしいのか? という話はこの際置いておく。

これまでエントリーのタイトルが入るh3タグにはCSSでheightを絶対値で指定していたのだが、それだとボックス内の内容が溢れてしまった場合、はみ出して表示されてしまうのだ。IE6だとボックスが適宜(?)自動拡張されるのだが、それはIE6の実装のバグらしい。

てことで、Firefoxだと表示はこんなに悲惨なことになっていたとさ。

IEでの表示
Firefoxでの表示

てことで、ボックスの内容によって、適宜ボックスのサイズを自動拡張してくれるようにするためには、heightでなく、min-heightを指定すれば良いようなのだが、ここでひとつまた問題がある。それは、「IEはmin-heightを読まない」ということだ。

ただ、IEはheightを指定していれば、適宜ボックスを自動拡張してくれるので、IE以外にはmin-heightを読ませ、IEにだけheightを読ませるようにすればよいということだ。なので、スターハックを使用することにした。具体的には以下のとおり。

変更前
.content h3 {
  height: 23px;
  /* 省略 */
}
変更後
.content h3 {
  min-height: 23px;
  /* 省略 */
}
* html .content h3{
  height: 23px;
}

このサイトこの程度とは言え、CSSハックを使うのは初めてのことだ。だいたい、最新のブラウザなら特に表示に問題ないように、簡単なCSS記述しかしてなかったからね。しかもMac使いや、レガシーブラウザを使っている人はノーサポートですから。商業サイトじゃあるまいし。そのへんどっかに書いておいたほうが良いのかもしれないけど。実際IE5.5でこのサイトを見に来ている人は何人かいるようだ。多分2段組が崩れていると思われる。ちなみに、IE7はスターハックを読まず、min-heigthは読む実装になっているようなので、表示は崩れない。

このエントリーは完全に自分に対する備忘録であるとともに、画像とそれに対する簡単な説明をhtmlでマークアップするときに、定義型リストdlを使ってみたかったってのがある。それと、preタグとcodeタグでcssソースをマークアップしてみたかったってのもある。まだ、何もCSS設定していないが。

投稿者 Songmu : 21:03

2006年10月15日

既視感(デジャヴ)じゃない

情報処理試験を受けた。基本情報。今更って話もあるが、最近考えが変わって取れるものは取っておこうかと思うようになったもんで。たいした資格じゃないが。

会場が玉川大学だったので、自転車で行った。と言うか、ご存知のようにスーツじゃないときの単独での移動手段はほぼ自転車一択だ。免許の更新も、中国語検定も自転車で行った。そういうところに自転車で来る人は滅多にいないのでなかなか痛快(?)。なので、マイボールしょって自転車でボウリング行くスタイルもなかなか気に入っている。

受験生の時も玉川大学辺りに模試を受けに行った気がしていたのだが、ビンゴでした。校舎の前に自転車を置いたのだが、その場所を見て受験生のときもまさしく同じ場所に自転車を置いたのを思い出した。今日も代ゼミの模試をキャンパス内の別の所でやっていたようだ。

試験は割かし簡単だった気がするし、実際難易度は易しかったとネットでも言われているみたいです。簡単に答え合わせをしたが、午前午後とも9割前後取れているようなので問題ないでしょう。

ただ、ひとつ心配なのは、受験番号のマークを間違えている可能性があるんだよね。午前午後とも解答用紙に受験番号を同じようにマークするのだが、午後試験で受験番号をマークしたときに「あれ?午前てここにマークしたっけ?なんかこういう風にマークした覚えがない…。別の場所にマークしたかも…」とかちょっと感じてしまった。気のせいだと思うが。

選択問題はJAVAを選択した。今の職場じゃ使わない(JavaScriptは使うけど・笑)ので1年以上見てなかったのだけど、あれくらいだったらまだまだ何とかなりますね。むしろ問題解きながら思い出したりしてました(笑)。

次は何勉強しようかな。中国語検定かな。準1級は去年受けて返り討ちにあったので、堅く2級を確保しておくとするかね。準1級はもう一生受からない気がするよ。情報処理試験は次はソフトウェア開発技術者かな。

帰って家で仕事した。持ち帰りの仕事をしないという、自分の中での禁を早々に破ってしまった。

投稿者 Songmu : 22:37

2006年9月22日

中国人のぱくり方に学ぶ(?)

Kingsoft Office. すげーな。Microsoft Officeそのもの。日本人的感覚からすると、恥も外聞もないという感じだが、ここまでやっておいて平然としているKingsoftの根性には恐れ入る。中国人はその辺図太いし、柔軟とも言える。

中国というとぱくりというイメージが強いが、日本も昔はぱくり天国だったのだから余り人のことは言えない。それに、やっぱり「○○人は○○だ」という固定概念も、度が過ぎると聞いていて気持ちの良いものではない。もちろん民族特有の傾向ってのは明らかにあるが。

私が前に住んでいた中国の南の方では「日本人は皆“色鬼”(スケベ)で女を買っている」と軽蔑されていた。それは「皆」ではないにしろ、確かにかなりの多くの人がそのようなことをしていたのは事実である。女を買うまでにはいかないにしても、駐在員のおじさんはかなりの確率で“卡拉OK”(カラオケ兼キャバクラ)に行って店の女の子の胸や太ももを触っていた。そして持ち帰っている人もいた。実際に見たのだから間違いない。

本当に恥ずかしい限りである。私に言わせれば、そういう場所でお金の力を使わないと女の子とまともに接する機会がもてないなんて、生物的オスとして劣っているという生き恥を晒しながら生きているようなものであり、そんな醜態をさらしてまで生きていける人がいるなんて到底信じがたいのだが。また、自分の妻に綺麗でいようという意識を持続させてあげることができないのであれば、やはりオスとして失格である。なので、自分の妻が魅力的じゃなくなったからって、他所の女を買うというのは根本的に間違っている。

ただ、それでも「日本人はほぼ全員スケベだ」と思われてしまうのは、やっぱり不本意極まりない訳ですよ。中国の南の方ではそういう人が目立つし、近くにいるからそう思うのであって、そうじゃない人もたくさんいるわけです。だから、「○○人は○○だ」というのはジョークレベル以上であまり使うべきではない表現である。当たり前のことだけど、中国に行って身を持って知りました。

脱線ついでですが、日本では真面目だった人が中国駐在ではじけてしまうパターンもかなり多いみたいです。真面目一徹だった人が、お金目当ての女の子たちに急にもてだして、それこそ格安(日本円にすると数千円)で女の子と一晩H出来るもんだから勘違いしてしまうみたいです。こういう人はそれまで自分の欲望を抑圧するばかりで上手く開放できていなかったのだろうね。憐れ。

ぱくりがらみでもうひとつ書きますが、中国ではCD-ROM(その他光ディスク類)が売り物であるという意識がすごく低い。これはモラルの問題というより、中国のマーケティングのあり方として、音楽CDをタダ同然でばら撒いてファンを獲得し、ライブで稼ぐという図式があるというのが大きいらしいです。音楽CDをほぼ合法的にコピーできるのが当たり前なので、コピーに対する精神的敷居が低く、ソフトウェアをコピーすることに対する抵抗が少ないようです。

ここまで他人事のように書いていますが、これに絡んで身近で最近驚くことがあったのです。私の職場のWebサイトが同業の中国人が経営する会社にぱくられたのです。それもかなり徹底的に。

私が勤めている業界は中国人の多い業界であり、そこまで大きな業界ではないので、多くの同業者は零細です。なので、これまでも、同業者のしょぼいサイトで画像の一部が無断で流用されているとか言うことはあったのですが、今回は色合いがちょっと異なるだけで、サイトのレイアウト、文言、ソースレベルでとことんぱくられていてびっくりしました。

ウチのサイトは業者がDreamWeaverで作ったCSSとTableレイアウト混じりののいわゆるハイブリッドデザインである。それを一応私が管理している。SEO的にはそれほど優れているわけでもないのだが、一応業界最王手で検索順位的には成功はしているので、ぱくってみたのでしょう。というか自力じゃこれ以上のサイトは作れないと判断したのでしょうな。

浅はかだなぁとか思ったのは、metaタグの並びとか、それに続くアクセス解析用のscriptタグの並びも同じ。そもそも向こうは明らかにUrchin(アクセス解析ソフト)を使っていないのにそのタグを入れてどうするんだと。つまりソースをほぼ丸ごとコピペしており、それがなんなのか全然わかっていないという。

今年出来た新しい会社であり、SEMのみで集客を試みているようだ。Overtureとか、Adwardsにもガンガンお金をばら撒いており、本当に必死である。

恥も外聞もない、手段を選ばないとはまさにこのことである。それでも上手くいってしまったら、非常に困るのだが、それが今の多くの中国の企業のビジネスのやり方でもあるのだよね。

投稿者 Songmu : 23:55

2006年8月26日

Webと中国語対応

一昨日判明したのだが、IE(Sleipnir)とMovableType上で中国語を使うと、中国語特有の文字が「・」と表示され、上手く表示されなくて困る。IEのエンジンは、ソース内で「lang="ja"」を指定すると、日本語以外の完全に表示をしてくれなくなってしまう。実装上は正しいのかもしれないが、融通が利かなくて困る。Validではなくなるが、mt各種設定ファイルCGIの<html lang="ja">を<html>として、lang="ja"を削ることが出来れば、一応解決は可能だと思う。どうやるのかはわからんが。

サイトのコンテンツ上は、中国語部分を<span lang="zh-cn">でくくってやれば、解決可能で、それが正しい表記法でもある。一昨日のエントリーもそうやって表記をしている。

まあ、どうせ、これを書くのはブラウザ上で直接なんて恐ろしいことはせず、エディタで下書きしてるから、別に良いのだが。それでも困ったら、FireFoxで見ればよいのだし。Operaでも最新の9.01は大丈夫なようだ。ちょっと前のOperaは中国語の表示自体に問題が出ることがあった。

中国語というか、多言語の文字コードにかんして、そこそこ出来るプログラマーでも案外知識が少なかったりして、びっくりすることもしばしばなのだが、確かに普通の人はあんま中国語と日本語の同時表記とか考えないよな。WindowXPでさえ日本語OSだとシステム既定の文字コードがShift_JISってのがガン。多くの人がそのままShift_JISでプログラムを作ってしまうので、中国語を使おうとするといろいろ難点が出るのだ。話はちょっと違うが、携帯電話もいつまでたっても、Shift_JISしか表示してくれないしね。

愛用していたSleipnir Ver. 1.66もUnicode非対応だったので、中国語のサイトを見たときのタイトル部分や、検索ボックスに中国語を打ち込んだときに文字化けを生じていた。2.xxはUnicodeで書かれているので、そういった点が解消されて非常にありがたい。

Vistaはどうなるのであろうか。Shift_JISを使い続けるのだったらもう見限りたいね。今やほとんどのLinuxディストリビューションだってEUCじゃなくてUTF-8を採用しているわけですから。ただVistaはUTF-8じゃなくてUTF-16にするってことはありえるかもしれない。

投稿者 Songmu : 03:17

2006年8月16日

マイミクが少ないのが自慢です

冗談半分、本気半分、タイトルのようにのたまっているが、別にマイミクのお誘いをかけられて断ったこともないし、今後も断ることはないでしょう。自分で探したり誘うことが無いだけで。

Mixiのぬる~い付き合いをハタから生暖かく見ている分には愉快なのだが、別に今のところ積極的にかかわるつもりはない。知り合い同士が連絡を取り合うツールとしては有効だとは思うが。

2chのWeb制作板でmixiのID番号順が早いだの遅いだのくだらない言い争いになっていたが、私のIDは60万台なのでそれなりに早いといえるのだろうか。

てことで、マイミクシィへの追加リクエストを初めて出してみた。

投稿者 Songmu : 03:24

2006年8月 8日

ちょっとデザインを気にしだしたりして

いろいろいじるのがちょっと面白くなってきて、参考にしようとデザイン的によく出来ているサイトを見てまわったりしている。MovableTypeの標準CSSはかなりいけてなくて、適当にいじっていたが、やはり根本的に一から作り変えようかと検討中。「#right」とか「#center」とか、やっぱあり得ないよな。

一昨年の足柄でのロードレースの写真をまた性懲りもなくサイト内に使ってみた。この写真は構図的にもなかなかよく取れていて、撮ってくれた恋人には感謝なのだが、それがこの写真を使っている理由じゃない。大きいのは、この写真の頃が人生で一番くらいに速かったってことなのだ。それも下手をすればもうこの人生において2度とあの頃の速さには戻れないかもしれないのだ。これは焦るよ。

バルセロナオリンピック自転車ロードレース代表の藤田晃三選手が「過去の自分を目標にしている自分に気がついて引退を決意した」とどこかで書いていたが、とりあえず今の自分は過去の自分が目標なのである、情けないことに。ひとまずあのレベルまで行かないと、それより上が見えないよ。あの頃の自分にしたってそんなべらぼーに速かった訳じゃないってのが悲しいね。宮崎君とかと比べたら明らかに遅かったわけだし。

つまり、この写真は自分の目標を明確にするためのものである。

投稿者 Songmu : 03:51

2006年8月 7日

迷走中

横浜高校が大阪桐蔭に負けた。注目された大阪桐蔭の中田選手は、第2打席の打球のスピードにも驚いたが、8回、ホームランが望まれている場面できっちりホームランを打つところにスター性を感じさせた。去年から1年生にして5番を打っていたが(しかも4番はあの平田選手だ!)、大阪桐蔭はなんだか怪物御用達の高校になっているね。

サイトいじってた。見てわかる通り、いろいろ試して遊んでいるのだが、迷走中。なんか今、Amazonのアソシエイトがバグっててアソシエイトリンクに変なカートが表示されて困る。しかも、この表示が非常にダサいので萎える。2chを見てみると、この不具合はやはり自分だけではないらしい。アソシエイトではお任せリンクを作ってみた。表示されるものが自分の読書の参考になれば面白いなと思ったので。

本日放映のP League。宮城選手がスペアを外しまくってまた負けた。このままでは剛球のノーコンボウラーという非常にわかりやすいキャラとして認知されかねない。アマチュアでの戦跡を見る限り、本当はそんなはずはないのだが。

投稿者 Songmu : 02:09

2006年8月 4日

背景画像のハック(?)

背景画像だが、左右、上下、上下左右に反転させて、右、下、右下に配置し、1枚の画像にくっつけた。そうすると、画像と画像の境目がそれほど不自然ではなくなるね。この写真の場合上下の境目はちょっと厳しいか。

これはあらゆる模様に通じるものがあって、背景画像を作成する際にも応用が利く。今更気がついたが、多分Webデザインをやる人とかにとっては当たり前のことなのだろう。こうした細かいTipsを積み上げていかなくては。

というか、こういう背景画像の置き方をCSSで指定できるようにならんもんかね。背景画像のファイルサイズが増えてもったいない。

background-repeat: reverse-repeat;

とか。

投稿者 Songmu : 00:46

2006年7月25日

Gizmoはスゲェ

何か書こうと思っていたら、Gizmoをインストールして遊んでいたら、時間が過ぎてしまったので、今日は諦めた。VoIPソフトだが、固定電話で完全無料でかけられるようになったのがスゲェ。録音機能も標準でついているのがびっくり。音質はSkypeよりかは悪い気がするが、気のせいかも。

仕事柄、こういった技術には敏感にならざるを得ないのが職業病。特に通信関係はね。パソコン使ってマルチメディア!(ワラ)、とかあほらしくてそういったことには全く興味なかったのだが、そうもいってられないようだ。動画、音楽配信とかどうでも良かったんだけどさ、職場がそういうことをやるということになると、白羽の矢が立つ(?)のは決まって、私とシステム関係の上司一人の合計2人になるわけですよ。

なんか最近コンピュータ関係の技術書やら、読み物やらばっか読んでいたので、趣向を変えて、久しぶりに小説を読んでみることにした。邪魅の雫までは小説は封印かと思っていたが、禁を破ることにした。

投稿者 Songmu : 03:09

2006年7月23日

おっかなびっくりアップグレード 3.1x→3.3

昨日、長いエントリーを作成してしまったせいか、サイトの再構築に少し不具合が出た。最初に適当にMovableTypeをインストールしたときに、データベースにとりあえずBerkeley DBを選んでしまったのだが、それが原因かもしれない。MySQLを使うかねぇ。

で、とりあえず、MovableType自体をアップグレードしてみることにした。そうしないと、Berkeley DBからMySQLへの移行もめんどくさそうだし。

3.171-jaから3.31-jaにダイレクトにアップグレードした。これまで使用していたのがバージョン3.171-jaなのだが、3.2xから3.3xへのアップグレードをレポートしたサイトは多数あれど、3.1xから3.3xにダイレクトにアップグレードしたことを詳しく解説したサイトがちょっと見、みつからなくておっかなびっくりのアップグレードになった。

一応、本家のマニュアルに3.1xからのアップグレードについて記載があったので、確認しながらこわごわ再構築。

FTPでサーバーに接続し既存の構成ファイルをすべて消去し、新しいバージョンのファイルに入れ替え、それに加えて、既存のmt.cfgという名前のファイルをmt-config.cgiという名前に変更してアップし、cgiファイルのパーミッション書き換えてから、管理画面にアクセスすれば自動的にアップグレードを開始してくれる。不安だったが無事終了した。

mt.cfgをmt-config.cgiと書き換える以外は、3.2x→3.3xと手順は同じであるようだ。

簡単といえば簡単だが、ファイルをすべて入れ替えなくてはいけないのが時間がかかってめんどいね。ま、そのうちワンクリックでアップグレードとかになるのだろうなぁ。

アップグレードの確認のために、一個エントリーを投稿した。無事投稿された。良かった。

肝心のMySQLの導入は先延ばし。

投稿者 Songmu : 23:15

深海魚フィルタ

昨日、Becky!のSpamフィルタ、BkAspilは余り良くないとここに書いたが、本日タイムリーにBecky!用の別のSpamベイジリアンフィルタプラグインがあることが判明。しかも今月できたてほやほやらの新しいプラグインらしい。窓の杜のニュースに載っていたのだが、なんだかYahoo!のニュースにも取り上げられていてちょっとびっくり。

早速その、深海魚フィルタを使ってみることにした。使いはじめなので、まだ精度は不明。

どうでもいいが、サポートが

  1. mixiの「Becky!愛好者」コミュニティに入っておりますので、そちらをご利用ください。
  2. bill-gates@mbr.nifty.comまでご連絡ください。

とかなっていて、ちょっと萎え。

投稿者 Songmu : 23:04

Spamの応酬

NotesにSpamが鬼のように来る。インターネット上に公開しているアドレスをNotesのアドレスに転送かけているもんだから、そこにくるSpamがすべて流れてくる。

その外部に公開しているメールアドレスは、申し込みフォームから流れてくるメールを除くと、9割以上Spamなもんだから、大いに困る。NotesはSpamのフィルタはおろか、メールの振り分けすら出来ないから、その点は勘弁して欲しい。

Spamフィルタは、もはやベイリジアンフィルタが業界標準となっているようだが、一回使ってみると、確かになかなか快適である。いくつか搭載メーラーを使ってみたがちょっとその比較をしてみたい。

Mozila Thunderbird

最近飛ぶ鳥を落とす勢いで、普及が進んでいるフリーメーラー。何せ天下のMozilaプロジェクトなのである。

こいつは標準でSpamフィルタを備えているのだが、そのフィルタ能力はすげえ。勤務先でNotes以外のPOPメールを受信するので使い始めたのだが、1週間ほど学習させたら誤検知は全くなくなった。2週間したら、Spamの見逃しもほぼなくなった。Spam学習もワンクリックですばやく迷惑メール指定ができるのが優れもの。メールを受信すると、ズババっと迷惑メールマークをつけて、ゴミ箱に一気に放り込んでくれるのはなかなか爽快。何せ職場のPOPメールは殆どSpamなもんだから。

メーラーとしての能力を問うと、動作がもっさりしているのが気になるところ。デザイン的にも妙に小奇麗で丸みを帯びていて、色彩が薄いのも個人的には少し気に食わない。なので自宅のメインメーラーにはなりそこねている。

Sylpheed + bsfilter

Sylpheedは日本発祥の誇るべきフリーメーラー。一時Vine Linuxを使って遊んでいた際、標準メーラーとして搭載されており、割と使いやすかった覚えがあった。それで、去年Windowsにも移植された際に使ってみたのが使い始め。現在もたまに自宅から職場のPOPメールを受信する際に使用している。

bsfilterと連携をとると、Spamフィルタ機能を実装できる。Sylpheedに関してはドキュメントが少ないので、設定には少し苦労した。Spam自体の学習はワンクリックで指定できる点はThunderbirdと同じく簡単。

肝心のSpamフィルタ能力は概ね良好。ただし、Thunderbirdにはかなわない。しばらく学習させるとSpamを取り逃がすことは少なくなるのだが、ごく稀に誤検知があり、普通のメールをゴミ箱に投げ込まれていることがある。なので、Spamを一斉消去する際はざっと一覧に一度目を通してから消去する手順を踏まざるを得ない。

デザイン的にもシンプルですっきりしているので、個人的には好きなメーラーではある。ただ、まだ煮詰めが甘い部分があって、時々突然マウス操作を認識しなくなったりなどの誤動作も起こす。メニューや設定画面がやはりLinuxライクなので、慣れないと苦労するかもしれない。

それに、私にとっては致命的な弱点がある。中国語を上手く表示できないのだ。表示フォントをMS UI Gothicに指定しても中国語特有の漢字を表示してくれない。文字コードごとに細かいフォントの指定が出来ないのも×。中国語のメールを頻繁に(嘘)やり取りする自分にとっては大いなる問題。

なので、特に多言語環境に関してなど、まだまだ改善の余地はあるのだが、現在も鋭意開発中なので、今後に大いに期待している。

Becky! + BkASPil

大学時代からずっと個人メールにはBecky!を使っている。かなりメジャーなシェアウェア。通ってた大学がライセンスを取得しており、無償で使うことが出来た。

BkASPilというBecky!用のプラグインを使用すれば、ベイジリアンフィルタを使用可能になる。

ただねー、このフィルタは正直いまいち使えない。誤検知がないのはありがたいのだが、Spamは半分強くらいしか拾ってくれない。一度Spam指定したのとほとんど(全く?)同じメールでないとSpamと検出してくれない模様。Spamの指定も右クリックから行わないといけないし、時間も数秒かかるのが難点。

よく調べてみると、閾値などの設定なども出来るようなのだが、そういった設定を施さなくても標準状態でもう少し使えるレベルであって欲しいものである。

ずっと使ってきた慣れもあるのだが、これをメインで使っている。大量のメールにもかかわらず動作が軽快なのがすばらしい。過去受信したプライベートのメールはすべてこのメールボックスに入っている。また、スペースキー連打で読み飛ばしがなにるのが何気にポイント。今回紹介したほかの2つのメールはそれが快適に出来ない。Thunderbirdなんかスペースキーを連打すると勝手に次のメールに移ったりするし。残念なのはSpamフィルタの性能。

Gmail

かなりすぐれたSpamフィルタ能力を誇るらしいのだが、アドレスを一部の人にしか公開しておらず、残念ながら(?)まだSpamを受信したことがないので分からない。Webメールに革命をもたらしたインターフェースはもちろん秀逸。


以上、スパムフィルタの比較だったが、同じ単純な理屈(ベイズの定理)のはずなのだが、フィルタ能力に差があるのはなんだか不思議だ。

実はベイズの定理は、学生時代に離散数学をわりとしっかりと齧っていたこともあり、ちょっと思い入れのある定理である。もうすっかり忘れたけどね。クラスでは一番優秀だった自信があるのだが、それでもそんなものなのですね、学生の勉強なんて。

離散数学のクラスからグラフ理論のゼミに行ったものの、しばらくしたらそこの先生が他の大学に移ってしまい路頭に迷ってしまった、ってのはまた別の話。

投稿者 Songmu : 04:13

2006年7月18日

サイトいじり

とりあえず、ほったらかしっ放しだったサイトの体裁を簡単に整えてみた。体調悪いわ、雨だわで、外出、運動する気にもなれず、気兼ねなくサイトいじりに没頭できた。寝たり本読んでたりしてたので、実質の作業時間はほんの数時間だが。しかし、なんだかんだで苦労した。

DOCTYPE が XHTML 1.0なもんだから、安易に「XML宣言でも入れるべ」とか思ったのが大間違い。いきなりIEでのレイアウトが崩れてショックを受けました。調べたらIEはDOCTYPE宣言以前になんらかの記述があると、レンダリングが互換モードに切り替わる致命的なバグがあるらしい。MovableTypeの初期テンプレートで、文法的にinvalidにも関わらず、XML宣言がなされてない原因がわかったよ。何言っているか分からない人もいるかもしれないが、つまり、IEは糞ってことですよ。

勤務先のWebサイトはHTML 4.01 Transitional のURL付きで管理、運営しているもんだから、恥ずかしながら、そんなことは露知らず。CSSハックを施すなどの対処方法はあるようだが、めんどくさい(=それだけの技術がない)ので、XML宣言をはずしたままにすると言う、一番乱暴な手にでた。まあ、文字コードがUTF-8だから別に問題ないっしょ。

まあ、あとのデザインはこんな具合です。この程度ですよ。閲覧者の画面解像度が高いと、背景画像の出方がおかしくなるが、まあ気にしません。しかし、今日作業していても感じたが、Webサイト管理者としての自分の課題、

  • デザイン力の強化
  • コンテンツ制作スピードの向上

以上2点を痛感したね。デザインセンスとなるともうどうしようもないから、オーソドックスなデザインパターンをある程度知る必要があるね。配置に関しては少しは本を読んだから、今後は配色やらフォント関係の学習が必要かな。

コンテンツ制作スピードに関しては、手打ちのみの現状を打破しなくてはならない。なんらかのオーサリングソフトの使い方、簡単なテキスト整形スクリプトの作成などを学ばなくては。

アーカイブページにも少し手を加えた。昔の私のサイトの体裁にそっくりにしてしまったが、むしろこれをメインにしても良いような気も(?)

投稿者 Songmu : 00:12

2006年5月31日

すげぇすげぇの今日この頃

なんか○○はスゲェ、ってテーマで毎日何かしら書けそうな気がしてきた。スゲェスゲェって言いまくっているのは馬鹿みたいなのだが、すごいモノはすごいと言える事は大事だよな。

で、Googleはスゲェ(笑) ってよく言われるが、何がすごいのか良くわからなかったのですよ。検索がすごいのは良くわかっていたし、いち早く使っていた部類だとは思うしね。

そこで、Gmailですよ。もう、このあまりの使い勝手の快適さに愕然として、Googleのすごさがわかったね。それ以降はもう、馬鹿みたいにGoogleはスゲェと思う今日この頃なのです。ありがちな話だとは思うが、「ああこれがWeb2.0ってやつなのか」とGmailで実感しました。

Ajaxがナイスなのは、これもよく言われるが、「枯れた技術なのに最先端」って構造が非常に萌えるってことですかね。俺もJavascript馬鹿にしてたもんなぁ。「ハッカーと画家」の巻末用語集に、

残念ながら、Webサイトで安っぽいトリックを実現するのに多用されたため不当に低く評価されている。

なんて書いてあって、まさしくそのとおり。

投稿者 Songmu : 02:15

2006年5月29日

HTML+CSSはスゲェ

今更何言ってんだって感じの題名ですが、ここ1年で一番の収穫は、HTML+CSSをしっかり理解したことかな。(もちろん1年かけて理解したというわけではない)

ホント、他人のサイトのソースをのぞき見ながらサイトを構築する危険性が分かったよ。一度体系的にしっかり学ぶってことが必要なんだな、と思った。htmlを殆どテキストエディタで書いてたくせに、ブロック要素とインライン要素すら知らなかったもんね。

しかし、HTML+CSSはスゲェ。もう、Webページだけでなく、あらゆるドキュメントをこれで作りたくなるくらい。Wordなんていらねぇよ、といいたいところだ。あとは、ドキュメント製作用の優れたHTML+CSSエディタとブラウザがあればいうこと無しなのだが。

そのうちその辺もしっかりしてくるでしょうけど。あらゆる形式がXML形式になろうとしているみたいだし。ああ、なんかすげーありきたりな内容になってしまった。

投稿者 Songmu : 01:03

2005年10月13日

中速タイパー

 一日中家にいたわけです。良い機会なのでメールとブラウザのお気に入りの整理を敢行。基本的にいらんもんを消しまくった。しかし、本の整理と一緒で、つい手を止めて読み耽ってしまうこともしばしば。

 話は変わるが、最近文字がものすごく汚いね。えてして長い文章を書くときなんかは、最初は文字をきれいに書いていても、だんだん汚くなるものだ。ただ、その頻度が酷い。

 これは、ペンで字を書く機会が減ったからというのとともに、キーボードに慣れすぎてしまったんだろうな。

 何せ、俺様のしょぼくれたタイプでも1分間に400タイプは堅い。そうなると、手書きと、キーボードで入力速度に大きく開きが出てきてしまうわけだ。つまり手書きはまどろっこしい。

 ちなみに携帯メールも面倒くさいね。今の英語の世界記録でも200文字強/分みたいだ。つまり俺様のタイプにもかなわない有様なのだ。

投稿者 Songmu : 21:38

2005年10月10日

PC好きじゃないはずの私

 数日高知に行ってました。

 話は飛ぶが、最近PC関係にお金を使いすぎなのだ。主に書籍だが。学生時代は、ほとんどWebで適当に調べて、レポートを書いたりしていたが、やはり体系だって学ぶとなると書物が良い。その点は古いタイプの人間だと思う。それに行き帰りの電車内で読むことが多いし。

 そもそも、勘違いされては困るのだが、よくよく考えてみると俺は別にPC関係が好きなわけではないのだ。自分自身を「アナログだ」なんてそれこそデジタルな発言をするつもりもないが、使い始めたのは遅かったし、必要だから使っているに過ぎないのだから。

 そういえば、コンピュータについて知っているのと、ソフトウェアを使いこなす技術は、また別の話だよな。というのも、最近、Officeを会社で使うわけですよ。当たり前ですが。

 しかし、実は俺はOfficeを使ったことがほとんどなかったのだ。大学時代レポートはWordなんかじゃなくLaTeXで書いてましたから。そっちのほうが数式がきれいに出たし。中国語のレポートはWordで書いたけど。

 しかし、PCが扱える→Officeが使えるって考えてる人が多くて難儀する。まあ最低限はOfficeも使えるが。そもそも、「PCが扱える」って言葉も怪しい言葉だな。

 「PCを扱える」か否かの線引きをするとしたら、エディタを日常的に使うか否かによってそこそこ判別できる気がする。世の中、エディタを使わない人はすげー多いらしいのな。エディタなしで、PCを使えるってのは、俺にしてみればむしろミラクルに感じてしまうが。ほかにも"C:\Windows\..."とか"/home/usr/.."とか言ってもぜんぜん分からない人とかがいるのも結構信じがたいものがある。

 まあ、そういったことを知らなくてもPCを扱えるようになるってのはすばらしいことだと思うが、そういったことをわからずにPCを使うには、まだまだPCは不親切だといわざるを得ないね。

投稿者 Songmu : 23:58