日記

この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.

« 2009-12 »

2009-12-31

ネットバンクに口座作ったりレンタルサーバ借りたりするのって, 届いたハガキを送り返したり,身分証のコピーを郵送しろとか言われたり, なんで技術的にはネットで完結できることが放置され続けているんだろう. 色々な所に個人情報を預けること自体が不安なので,ネット上で身元を保証してくれる 機関が必要じゃないかなぁ. もちろん,今だって個人証明書取れる認証局はあるのだけど, どのサービスに対してどこまでの情報を保障するかを気軽に選べるようにならないかな.

仮説::共用パスワードには人名が含まれる

パスワードを共有することの危険性とかはここでは考えません.

多くの場所で「便利な共用パスワード」が使われています. 色々なところでパスワードを見て(そんなにサンプル数が多くないですが), 傾向が見えてきました.

  • その集団が崇拝する人の人名
  • パスワードを共有するグループにちなんだ単語を前後に付ける
  • 安全性向上のために数字を混ぜる

というルールで生成されたパスワードが偶然とは思えないほど色々なところで見られます.

だからどうした,という話でも無いのですが.

2009-12-30

以前NDS用に書いたHTMLパーサをいじったりする.

2009-12-29

何もしない日.寝たり起きたり食べたりしただけ.

Googleのウェブマスターツールを見る限り,このサイトは電子工作もしくは, Winnyとかに関係があるサイトっぽい.

「PNPトランジスタ」でググるとトップに表示されるとかどういうことなんでしょう. ロボ研の新人教育用に書いたものだけど,こんなコンテンツの存在自体忘れていた.

[2009-12-28##1262111647] 忘年会.

スーツ着た.刺身食べた.ケーキ食べた.二次会みたいなのに行った.眠い.

2009-12-27

風邪気味.秋葉原.

2009-12-25

眠い.

もうすぐ今年も終わりです.

[2009-12-24###1261662928] 二度寝して起きたら14時半だったのであわてて出社.

SQLのdatetimeってISO8601形式のタイムゾーン指定子は付けてはいけないのか. そもそも時刻はいらなかったので,削って解決した.

ブラウザ三国志で武将を一覧表示するグリモンのスクリプト

終戦を迎えたようなので,使っていたツールをひとつ公開しておく.

FirefoxとGreaseMonkeyが必要です.

bura3deckext.user.js

デッキ内のメニューに「武将一覧」が現れます. 連打すると同じ武将がたくさん表示されてしまうのは仕様です.

機能:

  • 全ての武将の状態を一覧表示
  • パラメータでソート
  • デッキに入れる&外す

仕事の''休憩中''に急いで書いたものなので,ひどい実装.

テーブルをソートできるようにするsortableTable()は, 少しいじれば手軽に使えて便利かもなぁ. 本格的に使うなら,ちゃんとしたライブラリ使うけど, コピペで済ましたいときとかは,これくらいのサイズが良さそう.

コピペ駆動開発に適したプログラミング言語

というネタを思いついた.

ネット上のコード断片とかをコピペしまくって開発するのは簡単かもしれないけど, 変数名の調整が面倒だったり,途中に無理やり入れたせいで面倒なことになったり, 同じようなコードがあちこちにあって保守が大変とか, 分かる人が見れば明らかにコピペだと分かってしまって恥ずかしいとか, 間違ってGPLなコードをコピペしたときに大変とか,問題がたくさんあると思います.

このあたりを考えるのは楽しいかもしれない. 言語よりは開発ツールのサポートで解決する方がマシかもしれないけど.

プログラミングが苦手な情報系学生に普及するかもしれません. まぁ,授業とかでは使われないでしょうが. 実際の開発現場に普及しないことを祈ろう.

安全なパスワード

http://itpro.nikkeibp.co.jp/article/COLUMN/20091216/342238/

mcafeeのサイトから得られたパスワードにjdqr33なんて入ってたら, すぐにその部分の規則が分かってしまうと思うのですが. はまちちゃん手法の方が良い気がする.

2009-12-23

JavaScriptのnew

あんまりJavaScriptでnewは使わなかったのですが, 使ってみるとなんだか使いにくい機能ですね. Perlのnewよりはマシな気がしますが,無理やりクラスを実現する手段として 取り入れてしまった感じがします. \__proto__とか,プロトタイプベース言語なのにこの扱いは酷いと思います.

いっそのこと,ActionScriptみたいにclassを入れてしまうのが良かったんじゃないかなぁ.

そもそも,オブジェクト指向の認識のされかたが偏っているのが原因じゃないかなぁ. 学校や入門書で得られるオブジェクト指向の知識って「クラス指向」だったり, 「Java指向」だったりして,あまり良くないと思います. でも,一般化されたオブジェクト指向の話をいきなりされても理解しにくいから 具体的な手法を学ぶ方が楽なのは確かです. 問題はクラスな気がするので,クラスが無いオブジェクト指向言語 (いまならGoとか)をやるのが良いと思います.

さらに言えば,プログラミングが手続き型プログラミングに偏っているのも 気がかりなので(以下略)

2009-12-22

Javascript

document以下に無いDOMでidを検索したいときってどうするんだろうか. 再帰的にid属性を調べるしかないのかなぁ. 一時的にどこかにappendChildすればgetElementByIdが使えるのだけど, idが衝突する可能性がある.

2009-12-21

とうとう,IPアドレスが売買される時代か. IPv6とか真面目にやるべきだと思うのだけど. ISPと家庭用のネットワーク機器が問題だよなぁ. ISPがグローバルIPアドレス料を料金に入れるくらい枯渇したら,普及するかな. IPv4はNAT経由でしか通信できないプランとかが必要だと思う.

2009-12-20

19時過ぎまで寝る.12時間くらい睡眠は必要です.

Papervision3D

pv3d使ってみる.

本体は,Project homeからダウンロード. 今のところの最新は,2.1.932. ソースのままでも良いですが,swcを適当なディレクトリに入れて,flex-config.xmlで パスを登録しておくのがお手軽.

ティーカップとかは無いので,PaperPlaneあたりが良いかな. ただ,裏面が無い(?)せいか画面から消えたりするので,Arrowとかがよさげかも.

検索すればサンプルがたくさん出てくるので,使うだけなら簡単そう.

2009-12-19

D社の人たちとネトゲをすると金銭感覚が破壊されるので危険.

FirefoxのXMLHttpRequest

XMLHttpRequestって整形式なXMLじゃないとresponseXMLが空になる?

DOMParserも整形式じゃないとだめっぽい.text/htmlモードは未実装? 適当な要素作って,innerHTMLに流し込んでパースさせるしか無いの?

kstm.org忘年会

秋葉原集合.goto,safii,meshi,gazyu,kouma,が参加.sang0は風邪で欠席. あとtAGuとかもいなかった.

みんなが集まるまで,喫茶店で軽食.

予約した時間までしばらくあるので,万世で焼肉食べようという話に.

店に入ってから考え直して,少し早いけど,予約していた店に行こうということに.

そして,モツ鍋とか色々食べる.

その後,ラーメンが食べたくなったので,ラーメン屋に.

で,終電過ぎてる人とかいたので,カラオケに行って,また飲み食い.

翌朝の7時頃帰る.

エンゲル係数の高い一日でした.

2009-12-18

今日はセクションの忘年会です.

セブンアンドワイ

7&Y脆弱性の騒動が収まる気配が無いのはどういうことだろう. サービス止めた時の損害が大きすぎるのかな. ブランドイメージや,被害を被った人への補償を考えれば,すぐにでも止めた方が 被害は少なくできると思うけど.

こういうときに,法的な営業停止処分が下りるようにするべきじゃないかなー.

7&Yのサービス使っている人は,登録している個人情報を消しておいた方が良いと思います.

2009-12-17

眠い.

大人数で行きつけのイタリアンレストラン(=サイゼリア)に行ってで夕食.

2009-12-16

PHP

substr("1234", -7);

の結果がPHPのバージョンによって違う気がする.

2009-12-15

眠い.10時間近く寝てるんだけどな.

[2009-12-13##1260780231] 眠い.

脆弱性報告

はまちちゃんの善悪とかはどうでも良いのですが.

脆弱性でサービスが攻撃される場合,被害者はユーザであって, サービス提供者は攻撃からユーザを守るために,安全なシステムを作るべきだと 思う.

鍵が壊れた金庫で現金を管理していた銀行から現金が盗まれたときに, 「盗難の被害にあったので皆さんの預金が無くなりました」とか言われたら, 普通は銀行に対しても怒ると思うけど,違うのかな.

今回の件は, 「悪戯好きの子供が裏口から入って,金庫の札束で遊んでいた」 ときに,「悪戯のおかげで問題が明らかになった」とか 「でも悪戯は悪いこと」とかが話題になっている.問題はそこですか.

こういう比喩は印象を操作できるから好きじゃないけど思ったので書いてしまった. 悪戯好きの子供と違うのは,はまちちゃんは間違いなく確信犯だということか.

脆弱性を報告したことのある人ならきっと分かると思いますが, 本当にサポート窓口の対応は酷いと思う. ちゃんとしているところも多いだろうけど,ちゃんとやっているとこのサービスの 脆弱性を報告する機会が無いので分からない.

かといって,IPA経由とかだと手間と時間がかかり過ぎるし, 開発者にちゃんと伝わったのか確認ができなくて不安になる.

問題を正しく理解できるか怪しい人に地道に説明するより, いたずらして注目を集めた方が,リスクはあるけど, はまちちゃんみたいに人気者になれるかもしれないし得だと思う.

[2009-12-12######1260626073]

10年くらい使っていた愛用の傘を無くしたことを昨日気づいた. 会社に行くときに傘が無いことに気づいて, そういえばと,前の雨の日の帰り道を思い出してみると傘を持っていなかった. 会社にあるのかと思ったけど,行ってみたら無かった. どこにやったかなぁ. 前回雨が降っていたときには使ったのだけど.

新宿の東急ハンズに行ったけど,何も買わなかった.

普段使っている口座の残高が来週中に3桁になりそうだったので, 給料が入っている口座から移動するためにコンビニへ. って,ローソンのATMって一度に扱える限度額が20万なのか. 仕方ないので,20万ずつ地道に出し入れする. そして,ローソンのATMは使いにくい. 最初みずほのATM行ったら閉まっていた.休日は21時までっぽい.

2009-12-11

雨.

Firefoxでクエリ文字列がUTF-8でエンコードされないのに困っていた.

network.standard-url.encode-query-utf8 を trueに.

傘が見当たらない.

2009-12-10

眠い.

負荷試験の準備とかを始めた.

2009-12-09

眠い

冬のボーナス来た.

2009-12-08

Webサービスの利用規約で,ソフトウェアやデータの解析を禁止している場合, 具体的にはどんな行為が禁止されるんだろうか. 解析ツールを用いてリバースエンジニアリングするとかはダメかもしれないけど, 普通にHTMLを読むのは,データの解析に当たるんだろうか. ブラウザがHTMLをパースするのは解析では無いのかとか, Firebugの画面を開いたままアクセスしてしまったら解析したことになるのかとか, ブラウザに表示された文字列を構文解析して内容を理解することは解析なのかとか. どのあたりに線が引かれるんだろうか.

単に何も考えずにパッケージソフトウェアの規約を持ってきただけという気もするけど.

あと,mixiはそろそろログインのデフォルトをSSLにしたほうが良いと思う.

[2009-12-07##1260191919]

3goku.zip

実行してmixiのパスワード入れると謎の数字が出てきますが,なんのことかさっぱりわからない.readme.txtやソースが間違って入っているのはバグです. 気が向いたら修正します.

補足:ブラウザ三国志やってる人しか動かない気がしないでもないです.

2009-12-06

TODO:hspprint

mixiアプリの遊び方

Webブラウザ以外のクライアントを作ったりしたくなったときのために.

もしかしたら,ちゃんとしたAPIが用意されてるのかもしれませんが, 簡単そうだったのでHTML見て調べてみました.

アプリのページにアクセス

「/run_appli.pl?id=[アプリのID]」

アプリ本体はiframeで読み込まれるので, iframeタグのsrcを見ます. 「app_content_[アプリのID]」というidが付いているiframeです.

「st」というパラメータが付いてますが,何かするときは,これをサーバに渡す必要があります. 中身はまだ良く見てないです.

Remote Data Requests

アプリケーションサーバと通信したい場合,OpenSocialの Remote Data Requestsで通信します. mixiは,/gadgets/makeRequest経由で通信するみたいですね. よく知らないのですが,jsが投げるリクエストの内容は実装に依存するのかも.

少なくとも,mixiの場合のパラメータはこんな感じ

  • url 通信先のURL
  • httpMethod GETかPOSTか
  • headers リクエストヘッダ
  • postData POSTするデータ
  • authz 認証が必要(=signed)
  • st 何かのデータ(iframeのURLで取ったst)
  • getSummaries true/false
  • contentType TEXTとか
  • numEntries エントリの数
  • signOwner true/false オーナーの署名を付けるか
  • signViewer true/false ビューアの署名を付けるか
  • container=default つけなくても良さそう
  • bypassSpecCache よく分からないけど,付けないで良さそう
  • gadget ガジェットXMLのURL

例

いまやっているブラウザ三国志だとこんな感じ.

#include <iostream>
#include "../cppfl/http.h"
#include "../cppfl/stringex.h"
using namespace std;
using namespace Net;

#include <regex>
using namespace tr1;

int main(int argc,int argv[])
{
	map<string,string> params;

	params["email"] = "*****@example.com";
	params["password"] = "********";
	params["next_url"] = "/home.pl";

	HttpClient hc;
	hc.load("http://mixi.jp/login.pl",params);

	string cookie;
	for (int i=0;i<hc.headers["Set-Cookie"].size();i++) {
		cookie += (hc.headers["Set-Cookie"][i]*split(" "))[0];
	}
	if (cookie.size()<=0) {
		cout << "Error: login failed." << endl;
		return 1;
	}
	cout << cookie << endl;

	hc.clear();
	hc.req_header["Cookie"] =  cookie;
	hc.load("http://mixi.jp/run_appli.pl?id=6598");

	smatch match;
	if (!regex_search(hc.body, match, regex("<iframe src=\"(http://[^\"]+)\" id=\"app_content_"))) {
		cout << "Error: iframe." << endl;
		return 1;
	}

	string url = string( match[1].first, match[1].second ) ;

	if (!regex_search(url, match, regex("http://([^/]+)/[^#]+#st=([^&]+)"))) {
		cout << "Error: url parse error." << endl;
		return 1;
	}

	string host = string( match[1].first, match[1].second ) ;
	string st = urldecode(string( match[2].first, match[2].second ) );
	cout << host << endl;
	cout << st << endl;

	params.clear();
	params["url"]="http://m1.3gokushi.jp/user/mixi_if.php";
	params["httpMethod"]="POST";
	params["postData"]="mixi_id=********";
	params["authz"]="signed";
	params["st"]=st;
	params["signOwner"]="true";
	params["signViewer"]="true";
	params["gadget"]="http://m1.3gokushi.jp/canvas.php";

	hc.clear();
	hc.method = HttpClient::GET;
	hc.req_header["X-Mixi-Platform-IO"] = "1";
	hc.load( "http://" + host + "/gadgets/makeRequest" ,params);

	cout << hc.body << endl;

	return 0;
}

という,プログラムを書く夢を見ました.

実行したら,謎の文字列が出てきましたが,なんのことかさっぱりわかりません.

2009-12-05

眠いので寝る日. 「起きる→食べる→ネット→寝る」を8時間くらいの周期で繰り返していた. 日付感覚が無くなる.

ブラウザ三国志

ドワンゴ1位.

それにしても重いな…. mixiアプリはやっぱりユーザー数の増え方が凄いと思う.

PHP::PDO

PDOStatementって,セットしたパラメータを取り出す関数は用意されて無いのか. 一応,debugDumpParamsで中身をダンプできるけど,標準出力に出てくるので, バッファを制御して取り込んだ上に,中身をパースしないといけない.

幸いなことに,PreparedStatementは自前のクラスでラップされているので, bindするときに,配列に突っ込めば,パラメータを取り出せるようにはなる.

トランザクション周りのエラーを記録するために, それまで実行したSQLを持っておきたいだけだったのに.

WikipediaのC++0x

コンセプトの項目がさりげなくなくなっているけど, コンセプトに依存していた機能の説明がそのままなので,矛盾を来している. せめて,英語版のように見送られた機能のリストがあれば.

ところで,正規表現のところにあるサンプルって,意図したとおりのものなのかなぁ. なんか,誤解を生みそうな例になっているような.

[2009-12-04##1259937914]

mixiにログインする方法

とりあえず,C++で.Cookie取れない場合は失敗.

#include <iostream>
#include "../cppfl/http.h"
#include "../cppfl/stringex.h"
using namespace std;
using namespace Net;

int main(int argc,int argv[])
{
	map<string,string> params;

	params["email"] = "mail@example.com";
	params["password"] = "********";
	params["next_url"] = "/home.pl";

	HttpClient hc;
	hc.load("http://mixi.jp/login.pl",params);

	string cookie;
	for (int i=0;i<hc.headers["Set-Cookie"].size();i++) {
		cookie += (hc.headers["Set-Cookie"][i]*split(" "))[0];
	}

	hc.clear();
	hc.req_header["Cookie"] =  cookie;
	hc.load("http://mixi.jp/run_appli.pl?id=6598");
	cout << hc.body << endl;

	return 0;
}

書いていて,*split(" ")が気色悪かったので,何か考えよう.

mixiのブラウザ三国志やってます

三国志の登場人物の名前も殆どしらないし,ゲーム自体あまりやらないのですが, 周りの様子を伺いながら,進めています.

軽い気持ちで始めたら,わりとみんな本気で大変. kawangoさんは,軍資金としてWebMoneyを配っているし. 「金の力と数の力を頼みに」という一部上場企業らしいプレイ方針.

第9ワールド 新川寮8F (200,-48)

同盟の順位を見ると我らがドワンゴは3位.

…仕事?してます.ちゃんとやってます.

2009-12-03

やっぱり風邪っぽいけどとりあえず出社.

かわんごさんのプレイ方針が本気っぽくて酷い. 資金投入が給料の2割までに制限されているのは,優しさだと思うことにする.

2009-12-02

風邪っぽい.

mixiのブラウザ三国志を始めた.

2009-12-01

cssのdarkgrayってgrayより明るいのか.そしてgreenは#00FF00じゃない.