今日、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)いただければと思います。

参照:

QuickIRC2 取扱説明書

謝辞

前作のQuickIRC version 1を事実上のがらくたにしてしまったJavaアプレット関連事情の変化について、次の通りSunに謝辞を述べさせていただきます。 Sunは、Javaアプレットのエコシステムを保守しきれず多くのJavaアプレットの寿命を終わらせた者であるから、彼らの責任は当然、死に値する。従って、Sunは腹を切って死ぬべきである。また、Sunはただ死んで終わるものではない。彼らは無責任な悪人であり、唯一神又吉イエスが地獄の火の中に投げ込む者達である。 Sunを支持する有権者も彼らと同様に腹を切って死ぬべきは当然であり、また、唯一神又吉イエスがそういう有権者を当然、地獄の火の中に投げ込むものである。

IRCクライアントのWebアプリQuickIRCの説明書より。

Version 1はAppletベース、Version 2はFlash+JSベースだそうで、謝辞から作者の静かな(そして大きな)怒りが伝わって来ます・・・。

セルオートマトン法―複雑系の自己組織化と超並列処理

これは趣味だ、これは趣味だ、これは趣味だ

深夜にありがちな、”“最初にどの項目を見ていたのか忘れる程、ウィキペディアが連鎖している状態”“すなわちウィキペディア迷子になっていた。

なので、何故この項目を読んでたのか知らんが、セルオートマトンの項目を読んでる時に下記を見つけた。

セル・オートマトン – Wikipedia

さらにウルフラムは真の無作為性と計算既約性の概念を定式化し、ルール110がチューリング完全であると推測した(1990年代に Matthew Cook がそれを証明した)。

セルオートマトンがチューリング完全ってどういう状態?

1個前の状態、ルール、今の状態、って感じで有限オートマトンっぽいっていうことはわかるけど何がどうなったらチューリング完全になるんだろう?と思ってAmazonで本を気絶買い。

で、歴史とか超並列性を前提にした面白そうなコンピューターがあることは分かったけど、上記に関してはさっぱり分からんかった。

偉い人が推測して、最近証明したようなもんだから素人にはまったく理解できないようなものなのかな。

はてなのキーワードにも書いてない。

どなたか分かる方、キーワード書いてもらえんでしょうか・・・。(もうやる夫か結城浩先生しか望みが・・・)

参照: はてなキーワード「ルール110

最近、ココとかココとか、COBOLってどういう言語なんだろうなーと気になってました。

学生時代の友達とかもCOBOLやってるって言ってたし、そういや「あー、ぼるしる(スペルわからない)?」とか適当に言ってました。(言いたいだけ)

株式会社COBOLとかすごいですね。会社のミッションが物凄くはっきりしてて、「COBOL技術者の生活を守る」って、アカンやん・・・とか思ったんですけど、大企業なんかは雇用の創出自体が目的の一つになってるとこもあるからいいのか。

営業の目的に書いてある、「お客様第一主義」とはすぐ反しそう。(「COBOL技術者の生活を守る」のを第一目的としつつ、「お客様第一主義」というイデオロギーを持つ。つまり二番。ということ?)

で、COBOLってどんなもんかgccとかで試してみようかなと(gccでコンパイルできるかしらないけど)調べてみたら・・・

サルでもわかるCOBOL入門 【ひよこグミ】

COBOLでは1行に80桁まで記述ができます。(桁のことをカラムと言います

(略)

  • 一連番号領域(1~6カラム)

    プログラム行を識別するために使用されます。コーディング上は書く必要はありません。プログラム翻訳時にこの領域は無視され、番号は自動的に振られます。憶えなくて構いません。また、市販されているエディターでは、この部分自体を省いた形式で利用するソフトが大半を占めています。

  • 標識領域(7カラム目)

    通常のコーディング時は空白のままで使用しません。コメントをつける場合や前の行からの文字列が続いている場合にはココに特定の文字を記述します。

    • *(アスタリスク)
      コメント行とし、以下のカラムをコメントとして使用できます。
    • -(ハイフン)
      文字列のつなぎとみなし、以下のカラム記述を前行からの続きだとみなします。
    • o /(スラッシュ)
      翻訳リスト時にここで改頁されます。また以下のカラムはコメントとして使用できます。
  • A領域(8~11カラム)

    各部や節の見出し(○△ DIVISION や □△ SECTION)、段落の見出し等を記述します。またDATA部のFD句やレコード記述の01、作業領域節の01,77,88なんかも同様にここから記述を始めます。

  • B領域(12~72カラム)

    各段落を構成する文(命令文も含む)を記述する場所です。ピリオドも必ずこの中で収まるようにしなければなりません。いわばメインの領域と言っても過言ではないでしょう。いや少し大袈裟ですね。

  • プログラム識別領域(73~80カラム)

    ここは全てコメントとして扱われ、プログラム翻訳時には無視されます。書く必要はありません。たまに間違えて73カラム目にピリオドつけるバカがいます。コンパイルエラーを見て「どこがエラーだゴルァァ」なんてゴリラみたいな顔で叫んでます。ええ私ですとも。

列によって機能が厳密に分かれている・・・だと・・・?

エディターの支援が必要そうだなあ。あー、紙に書いたり、出力したときに分かりやすいように列指向(?)なのか?なるほど・・・。

これは、いきなりJavaやれって言われて心を折られる技術者の気持ちもわかるなぁ。見た目的にはPythonとかの方が移りやすそうだけどCOBOL→Pythonなんてパスはないわな。

別に言語なんて似たようなもんだから他の言語勉強すればいいのにとか思ってたけど、こりゃきついわ。

株式会社COBOLの事例にあるみたいに、COBOLやってて産休で子育て終わって戻ってきたらJava書けとか言われたら困るよねえ。

【急募】ウェブサービス開発のプログラマとデザイナー – p4lifeのメモ

ワイアード株式会社では、ウェブサービスの開発・運営を行うプログラマ及びデザイナーを急募しています.

ちょ、ちょっと、ちょっとー!俺がせっかく頑張って求人書いたのに、こんな魅力的な募集開始しないでよー!!

p4lifeさんと以前お話させていただきましたが、ワイアードさんは素敵で有望な会社ですわ。・・・畜生!

でもさ、何十人も雇おうとしている訳じゃないじゃないですか。だから、このエントリーを書いてあちらにトラックバック飛ばすことでそこからの流入を狙おうという・・・。

というかあちらは社員募集でこっちはアルバイト募集か!アルバイト募集の方が来たら分けていただきたい!と、男らしくないことを堂々と言わせていただこう。

ワイアードさんには「個人環境としては Windows,Mac, Linux 等自由に利用できます.」とありますが、うちはMacBook ProとAirは禁止ですよ。

MacBookのmachidaさんがネチネチと「ホントは重いんじゃないの?」とか「ゴッド寺田に影響されてるの?」とか文句を言いますからね。

参照: アルバイト募集のお知らせ

※アルバイトの方が決まりましたので募集打ち切らせていただきます!※

前のエントリで「アルバイトでRails覚えたい人いないですかね」的なことを書いたらコメントくださった方がいました。ありがとうございます。

雇い主に許可を取ったので正式に募集したいと思います。

求人って求人する側もされる側も少ない情報からお互いを選択する大事な場ですよね。(だてに10年で6社もふらふらしてません)

そこで正直なとこを書きます。

場所は五反田のアクトインディさんという会社のオフィスの一部を借りています。(というより、前にブログに書いた通り、俺が「何か出社・・・したいっすねー・・・」といったら「席空いてるから出社すれば?」ということでノートとFONを勝手に持ち込んで仕事してるといった感じです。

現在、デザイナーのmachidaさんと俺(システム)の2人で複数のサイトを平行して構築、運用してます。1個を構築するためにもう一つを後回しにして諦めるといった状況なので、一緒にやってくれる人がいるといいなというところです。

仕事内容はサーバ構築・プログラミング・テスト・保守といったデザイン以外の全てって感じです。

そのため、「こういうサイトが作りたいんだけど・・・」と言われたところからサーバ選んで設定して、実際のモノを作るところまで全てやるので一通り分かって楽しいんじゃないかと思います。

仕事は基本的にSkypeチャットとRedmineのみで進んでく感じです。

細かいことを言うと、Debian or CentOS, svn, Rails, MySQL, Apache2 + Passengerでやってます。

こんな本文中にコードが張られるニッチなブログをごらんの方には当たり前かもしれませんが、

「自分のコードを書いてる人」

っていうのはレアなんですよね。仕事である程度書いてるという人よりは、ニートだけど趣味で自分のコード書いてます。これから覚えていきたい。という人の方が楽しいと思います。

募集要項はまとめるとこうです。

募集要項:

Webプログラマー(アシスタント)アルバイト募集!Webサイト構築に関わる技術を覚えたい人に最適!私服(可)、PC持込(可)、ガチ鬱(可)

  • 時給:800円~(応相談)
  • 交通費:支給
  • 場所:JR五反田徒歩7分
  • 時間:週3日~(3ヶ月以上働ける方)
  • 性別:不問
  • 年齢:18歳~
  • 仕事:Webサイト構築

必須:

  • HTML/CSS
  • 何らかのプログラミング経験(業務・趣味問わず)
  • コードを書く気

推奨:

  • Linux
  • MySQL
  • Ruby, JavaScript
  • Ruby on Rails

当選者にはmachidaさんからカロリーメイト(ポテト味)、俺からアシュラ「上巻」(ジョージ秋山)プレゼント!

下記メールアドレスまでメールを送ってください。ブログや作ってるコード(どんな些細なものでも)があるとなおうれしいです。その後五反田で面接的なものしましょう!

これをごらんの方、お知り合いなどでアルバイトしたそうな方がいればそっと教えてあげてください。

家の糞ノートでこの間、IE7へのアップデートが出てきました。

「IE7にアップデートしますけどいいですか? Y/N」

みたいな感じだった。

これ、一般の方は大体Yを押すよね?ってことはIE6激減?

Yahoo!のトップにアップデート促すようなのだれか埋め込んでくれねえかな・・・。

ssl_requirement を改造して、https => http の画面遷移でブラウザの警告をなくす – Rails で行こう!

HTTPSの認証ページから認証後、HTTPのページへセキュリティーの警告無しにリダイレクトする方法

私にとっては正直、どうでもいいことだが、人によっては、あの警告に恐怖を感じるのかもしれない。われらが ssl_requirement は正しい作法に従って、302 Redirect で https => http の画面遷移を行う。したがって、セキュリティー警告が出るはずである。

こちらのコードをssl_requirementにマージしたものをgithubに置きました。(パクリなので問題あれば削除します)

警告文の内容が正しくてもそれによって離脱率が上がるのであれば無理やりにでも消さざるを得ないスね・・・。

$ ruby script/plugin install git://github.com/komagata/ssl_requirement_paranoid.git 

2時頃ハッと起きて出社。

火曜日はBTS(Redmine)のチケットを確認する日なので3人で確認。

IE6でSSLから非SSLにリダイレクトした時の警告を消すこと。などがちょっとした課題。

複数プロジェクトが平行していることから、アルバイトを雇ったらどうかという話がでているが、色々と未知数なのでもっと儲かってからにした方がいいかも。

時給安くてもRailsとか覚えられればいいって人はいないですかね・・・。