HTMLのマークアップをしてて、本当にこのタグでいいのか?とかセマンティックが気になって変に複雑になりすぎたりコーディングが遅くなったりすることがある。

そういう時、いつもロジバンのことを考えるようにしている。

自然言語解析の難しさ、同音異義語、完全な単語のセットについて徹底するならマークアップにはロジバンを使うべきだ。パーサ・コンパイラ作ってプログラミングもロジバン(クライアントスクリプトも)。というかできれば喋る言葉もロジバン。全ての表現の中間言語としてロジバンを使えばいいじゃないか。それぞれの言語(自然言語も含めて)のロジバンへのコンパイラが作れれば人類皆兄弟。

ロジバンを使ってRDF/OWLのシソーラスを作ろう、それを基にマークアップしていくのだ。その上にDreamweaverみたいなWYSIWYGエディタを作る。それを使ってコンテンツを記述していけばいいんだ。そうだ、そうだ!

・・・。

クールダウンした後、適度にクリーンで、ある程度適当な書きやすいHTMLを書いていくことができます。

我々プログラマの二元論的思考は問題解決の強力な武器になるが、時として現実的でない答えを出す。(現実には無限の長さのテープが無いので)

「何事もバランス」という言葉で片付けるのは腹が立つので、一旦極北を考え、(あくまでそれを胸に閉まって)そして手を動かそう。

二度寝してしまう前に家を脱出。会社前のドトールで本読んでたら暴睡。

引き継いだ前システム担当の方から未解決のバグ管理表(Excel)がメールで届いた。 奇声を発していたらrono23がRedmineに入れといてくれた。

rono23はMac上のVirtualBox and VMWare Fusion上のCentOS + Xenに苦戦中。

だからMacは(略 と嫌味を言っておいた。(VirtualBox上のホストOSがフリーズ)

アプリの方はまだリビジョン7。若いなー。何度も出てくるhabtmのcheckboxをhabtm_check_boxってヘルパーにまとめた。こりゃ楽だ。

未来の誰かのためにJUDEで書いたActiveRecodeのモデルの絵をリポジトリに入れた。これ見りゃ概要わかるだろう。

9時頃起きて外に飛び出す。このままいると寝てしまう!

前日、設計クイズで書いた旧システム全部を引き継ぎ会議。NonDocumentationパターンなので概要やハマリそうなところを口頭で聞かせていただいた。本番サーバーのパスワードさえ分かれば後はなんとかなるだろう。

いままで1台で4つのサービス・アプリ、4つのサービスの開発環境、SVNリポジトリをまかなっていたHP ProLiant ML110 G5。

今回新しくプロジェクトを引き継いだので開発サーバー+1IPゲット。rono23にそれをまっさらにしてプロジェクト分だけxenで立ててと無茶振り。出来たらおれにもやり方教えて!

アプリの方はまあ順調。というか単純作業が続く。Rails2.1.1からNamespace関連の問題が無くなったので気持ちいいがscaffoldがnamespaceに完全対応してないので手で各部分が多い。次こそgenerater書きたい。

fixture書くのが少しだるい。csvにしてOpenOfficeで作成。CUIのスプレッドシートアプリないのかな?

明日は家に篭ってコーディング予定。設計クイズの結果はもうちょっと様子見て書きます。(まだどうなるかわからんので)

Youtubeでガリガリガリクソンで笑った後、ニコニコ動画でこんなの発見。

国道20号線をカメラ積んで走ってひたすら写してるだけ。 見覚えある場所だと何か面白いんだよね。

こんなんがアップされてなぜかコンテンツとして成り立っちゃってるのがおもろいなあ。

M-1グランプリの動画だと思ったらM1エイブラムス戦車の動画だった。

現状、「OpenPNE(1)」と「OpenPNEの会員データと連動したWebデータベースアプリ(2)」が動いているコンシューマ向けサイトがあります。

ここに、私が別の「Webデータベースアプリ(3)」を、yoshukiさんが別の「携帯対応フォーラムアプリ(4)」を追加で作る予定があります。

  • (1)、(2)は前担当会社のシステム(PHP)でありこれからサーバー毎引き継ぐ。
  • 1年前から周辺システムはRailsで統一されつつある。
  • サイト全体を今後、継続的に開発していく予定にある。
  • お客さんの優先順位の第一位は(3)を期間内に立ち上げる事
  • (1)はクローズしてもかまわない事。
  • とは言え出来ることなら既存会員データは残したい。(俺の思惑)
  • 工期に余裕はない。(まっさらから3を作る分しかない)

みなさんなら会員データ周りをどのように設計しますか?

俺が考えた選択肢:

  1. (1)、(2)の会員テーブルを見るようにして(3)、(4)を作る。
  2. (3)、(4)ともに新規に作る(データ連携無し)
  3. (3)と(4)は同一会員データで作る(1、2との連携は無し)
  4. (3)、(4)を作った後で(1)、(2)をそれにあわせるように改修する。
  5. (3)、(4)を作った後で(1)はクローズ、(2)は改修する。
  6. 認証サーバ的なものを作る。

俺の中のSIer人格:

「お客さんから必要十分条件は提示されている。当然2だ。どんなシステムも段階的改修が可能である。ストアドプロシージャ、変換スクリプト、バッチ等で次フェーズ以降でのシステム統合を目指せばよい。」

俺の中の楽観主義者:

「5でしょ!きょうびほとんど使われて無いOpenPNE維持してもコストかさむだけでしょ!(2)をRailsで作り直して新機能を作ろう!」

俺の中の潔癖主義者:

「6が正しい。OpenIDサーバーを作り、全てのサービスを対応させる。authorizeとauthenticateは別である。」

俺の中の事無かれ主義者:

「前の会社がOpenPNEに合わせたんだから僕らも1だよ。PHPで作れば環境も合わせられるし」

まあ、おまいら(俺ら)の言い分もわかるが・・・。

以前、やったアルバイト募集のお知らせは無事rono23さんに決まって、一緒にやり出して1週間以上経ちました!

約束通り、カロリーメイト(ポテト味)とアシュラ(ジョージ秋山)上巻が贈られました。 ビシビシとRedmineのチケットを潰してくれて大変助かってます。

さっそくrono23とジェネレーションギャップを感じて面白かったことを。

マカー

  • 新製品発表時はUst張り付き
  • UNIXはMacで勉強
  • iPhone lover

iPhoneアプリは基本Mac持ってないと作れないというのを知った(俺が)。ひどいー! MacはMTA(Postfix)が入ってることを知った(俺が)。これは便利だなー。

フリーソフトウェア

  • GNUとかGPLとかはわりとどうでもいいらしい(RMS?)
  • bash(zshはおっさん)

わこうど全体的に俺らおっさんほどライセンスに関する嫌悪感が少ない感じがします。(BSD, MIT, Public domainが当たり前。当たり前なので興味が無い) bashは最近のディストリビューションのデフォルト設定が素晴らしいからかもしれませんな。

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術

最初の題名は「Scripting for testers」だったそうで、プログラマにはちょっと物足りないかも。

今日、machidaさんがハマってたもの。

新しくアップしたサイトがIEでのみ一瞬表示された瞬間にIEのエラー表示に変わってしまう。

一見、リダイレクトしてるように見えたのでProxomitronでヘッダを見ようとしたら問題の動作が起きない。(ヘッダには問題無さそうだった)

どうやらProxomitronのデフォルトの設定に含まれるフィルター、Suppress all JavaScript errorsでJavaScriptのエラーを抑止すると問題が起きないようだ。(これ外すと起きる)

原因はJavaScriptだと思い、JavaScriptをオフにしてアクセスすると、いや問題が起きる。ところがActive Xをオフにすると問題が起きない。

原因は良くわからないがここから先はHTMLのどの行が影響を与えているのかを調べていくしかない。

結果どうやら一番怪しくないと思ってたCSSの中に原因があるようだった。(Active Xじゃないのか?)

img {
   behavior: url("pngbehavior.htc");
}

この部分が原因のようだ。(htcてなんだよ・・・)

調べてみると、1998年にRFCに提案されてるHTML Componentsという技術があった。HTMLとVBScriptやJavaScriptを一つのコンポーネントとして定義し、振る舞いを要素と結びつけることができるようだ。(コンポーネントはhtcという拡張子のファイルになる)

PNG Behaviorという手法があって、これはActive XのAlphaImageLoaderでIE6でもPNGのアルファチャンネルを有効にするというものらしい。スクリプトは前述のHTML Compornentsになっていてbehavior要素で紐付けされる。HTML CompornentsもbehaviorもIEでしか動かないからIE固有の問題解決にはうってつけというわけだ。

CSS → JavaScript → Active X

という構成になっている。

出るエラーはJavaScriptだが原因はActive X。読み込んでいる場所はCSSというやっかいな状態の原因はこれだ。

取り急ぎPNG Behaviorの使用を取りやめて収拾したが、やはりハックやBKの類はその怪しさを受け入れてどっぷりとつかるか、近づくのをよす方がいいと思った。

DNSBLクライアントのライブラリdnsbl_clientをGithubに置きました。

komagata’s dnsbl_client at master ? GitHub

Install:

% sudo gem install komagata-dnsbl_client -s http://gems.github.com

Usage:

require 'dnsbl_client'
DNSBL::Client.new('list.dsbl.org', 'niku.2ch.net').listed? '61.211.32.39' # safe ip
=> false
DNSBL::Client.new('list.dsbl.org', 'niku.2ch.net').listed? '78.157.143.202' # spam ip
=> true

2chのDNSBL、BBQ用のライブラリも同梱してます。

require 'dnsbl_client'
DNSBL::BBQ.listed? '61.211.32.39' # safe ip
=> false
DNSBL::BBQ.listed? '78.157.143.202' # spam ip
=> true

何で作ったのか

人への嫌がらせ方法も進化したのか、「玄関前に猫の死体」から「ピザの大量注文」になり、最近では「お墓の資料の大量注文」というのもあるようです。

仕事で霊園(お墓)のサイトをやっています。そこでは、お墓を買う予定のある方が興味のある霊園(を運営する石材店)にフォームから資料請求できるようになっています。

この資料請求はお墓の購入にほとんど直結するといってもいいような確度を持つ大事なものです。(お墓は高いすからね)

普通は特定の市、区全体にカラーの広告を配布してやっと1件、2件獲得できる。それがお墓の資料請求なのです。

で、やられました。お墓の資料の大量注文。オープンプロクシ経由でゲイバーに。

そのプロクシ:

% nmap xxx.xxx.xxx.xxx
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2008-09-20 20:41 JST
Interesting ports on xxx.xxx.xxx.xxx:
Not shown: 1655 closed ports
PORT     STATE    SERVICE
21/tcp   open     ftp
53/tcp   open     domain
80/tcp   open     http
88/tcp   open     kerberos-sec
135/tcp  open     msrpc
139/tcp  open     netbios-ssn
157/tcp  open     knet-cmp
179/tcp  filtered bgp
389/tcp  open     ldap
445/tcp  open     microsoft-ds
464/tcp  open     kpasswd5
554/tcp  filtered rtsp
593/tcp  open     http-rpc-epmap
636/tcp  open     ldapssl
1026/tcp open     LSA-or-nterm
1027/tcp open     IIS
1050/tcp open     java-or-OTGfileshare
1720/tcp filtered H.323/Q.931
1723/tcp open     pptp
1755/tcp filtered wms
3268/tcp open     globalcatLDAP
3269/tcp open     globalcatLDAPssl
7070/tcp filtered realserver
8080/tcp open     http-proxy
8443/tcp open     https-alt
Nmap finished: 1 IP address (1 host up) scanned in 65.058 seconds

Windowsなのでスパムメールより主にプロクシとして日本から便利に活用されてるホストみたいです。

追跡を断念して今後の予防策を調べてみたところ、知ったのが2chで使っているDNS BlacklistのBBQです。

DNSBLはスパムメール対策としてよく使われるみたいですが、スパムメール対策としては効果は微妙なようです。ですが、BBSやコメントスパム対策にはかなり効果がありそうです。

荒らしの総本山といえる2chのデータを元にメンテナンスされているBBQのブラックリストは日本で使うには一番の品質なんじゃないでしょうか。実際、上記のプロクシのIPも登録されています。

実装の方は、Apacheで直接DNSBLを使えるモジュールもありますが、完全に弾くだけでなく、どこかに退避させたりしたいのでアプリの中から使いたいところです。PHPではPEARにNet_DNSBLというライブラリがあるみたいです。Rubyで見当たらなかったので作ってみたというわけです。

まだテストもなくしょぼいコードなので何かあったらご指摘(もしくはpush)いただければと思います。

参照: