2009-12 << 2010-01 >> 2010-02

2010-01-31 (日)

新宿でN村先生とご飯食べる.

まだフグの事を根に持たれている.

何食べてもいいって言われたら,値段なんて気にせず一番食べたいものを食べるでしょう.

・・・ごめんなさい.出世したら奢るので許してください.

2010-01-29 (金)

眠いし.忙しいし.

2010-01-28 (木)

宇宙人が地球を見たら,生命の時代が終わり,電気や光で結ばれたネットワークの時代が始まろうとしていると認識されるだろうか

しばらくはヒトという生命が付いて回るけど,いつかは人間の脳細胞程度の意味になりそうだ.

2010-01-27 (水)

ねむい

2010-01-26 (火)

なんか体調悪いなあ.

*就活

そろそろ就活の季節ですね.

私が就活はじめたのがちょうど2年前か.本格的に始めたのは4月になってからですが….(2社以上に同時にエントリーしている状態からが本格的だと思っています)

今年も厳しいと騒がれていますが,ちゃんと何かしてきた人なら問題なく行きたい所に行けるのだと思います.業種にもよると思いますが.それよりも,「何かしてきた人」という大学生がとても少数派だろうと思えるのが問題な気がします.ちゃんと払った学費分以上のことを得られた人ってどれくらいの割合でいるんでしょうか.大学って普通に授業受けてるだけじゃ明らかに費用対効果が悪すぎるからなぁ.学歴で会社入る気なら別ですが.

*メモ

やっと課金APIがリリース.mixiアプリはまだ色々出てきそうな雰囲気なので,たまにチェックするようにしよう.

2010-01-25 (月)

http://www.wide.ad.jp/news/press/20100125-IRC-server-close-j.html

wideはircサーバの運用やめちゃうのか.

特定のサービスに依存しないチャットとしてIRCは重要だと思うのだけど,ライトユーザーにはあんまり普及していないしなぁ.

*そろそろPerlとC++以外の言語をメインで使いたい

普段使っている言語が,PerlとC++だというと,なんとなく古い人間だと思われてしまいがちなのでどうにかしたい.仕事ではPHP使ってますとか言うと,さらに変な目で見られそう.

特にC++の代わりに使えそうな言語が見つからない.各種アーキテクチャ向けの無駄の少ないネイティブコードを出力できて,モダンな設計の言語なら何でも良いのだけど.

TeX程度の品質で論文が書けるワープロソフトも欲しかったけど,もういいや.

*メモ

http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree.html

2010-01-24 (日)

生きてます

週末体調悪かったせいで予定のタスクが終わっていないので少し憂鬱です.

*Flash::PV3D

Number2D.subtract()とNumber3D.sub()は,なんで名前違うの?

2010-01-23 (土)

吐き気+熱

2010-01-22 (金)

腹痛+吐き気

2010-01-21 (木)

腹痛

2010-01-20 (水)

*Excelの使い方

今日はExcelと格闘するなどした.とにかくデータ量が増えると何をするのも重い.一回クリックするごとに待たされるとかおかしい.使い方間違ってるのかなぁ.

とりあえず,Spreadsheet::WriteExcel に助けられた.Perlでエクセルのブックを生成できる.これでえくせるもこわくありません.調子に乗って,大量データを全部Excelの表にしてやった.とうか,なんでテンプレートに従って,複数のcsvをまとめる機能とか標準でないの?

事務系の職種なら「こんなにたくさんエクセルの表とか作りました」とか言って給料もらえるかもしれません(いや流石にもらえないか).

欠点は

  • グラフを入れられない…グラフを入れるためにExcelで開くのかと思うと憂鬱
  • 少し遅い…数万件のシートがたくさんあるとそれなりに待たされる
  • インターフェイスがいまいち…Excelの仕様に引きずられたのかな
  • 古いxls形式で出力される…xlsxでしょう

くらいか.グラフも自動で入れたいなぁ.

*MySQL Next-Key Locking

日本語の説明は分かりにくいけど,英語の説明は明快なので s/ja/en/した方がいいかも.

重要なのは存在しない行のロックでこのアルゴリズムが使われることです.

つまり,

CREATE TABLE test(id int primary key) type=InnoDB;
INSERT INTO test VALUES(1),(2),(9),(10);

こんな感じのテーブルがあって,

BEGIN;

SELECT id FROM test WHERE id=5 FOR UPDATE;

INSERT INTO test VALUES(5);

COMMIT;

このよくありそうなトランザクションの実行中に,他のトランザクションでid=6のロックに失敗します.

2010-01-19 (火)

*なんかネットが遅い

複数のサーバにファイルをアップロードしてみた.

uplink.png

あきらかにコネクションあたりの帯域が制限されている.困るなぁ.

asahiネットやめようかな.どこか良いプロバイダ無いかなぁ.Niftyは固定IPが高いんだよな.このご時勢,IPv4アドレスの値段が下がることは期待できないし.

*SQLと戯れる日々

MySQLのINが遅い.一つのSQLにまとめたほうが早いだろうと,INの中にたくさん書いたら遅かったので,スクリプトで処理して複数のSQLに分けたら半分以下の時間で終わった.それでも10分くらい待たされますが.もしかしたら,INで検索した結果をさらにJOINしていたのが原因だったかも.

システムの負荷試験とかで,いろいろ嵌り始めたので,少しはDBの知識も必要だと感じてきた.MySQLの細かいところを少し勉強しておきたい.InnoDBのNext-key lockアルゴリズムとかも一見単純な処理がデッドロックするのを見て初めて知った.かなり危うい感じですが,幸いにも,DBに詳しい人が周りにいるのでたぶん大丈夫でしょう.

そもそもSQLやDBがもう少し賢ければ,ここまで面倒なことにはならない気がする.

トリガとかストアドプロシージャとかも便利そうだけど,あまり詳しい説明が見当たらないなぁ.トリガーが有効化されるとき,SQL文がアトミックなのかどうかも説明を見ただけではまだ分からない.

*CSS

トップページのHTMLがあまりにひどかったので,IEで表示が崩れないように入れていたHTMLタグを消した.代わりにcssを少し修正してなんとかそれらしく.IE7では大丈夫そう.IE6以前とかもう知らない.ついでにメニューもリストにする.

IEの実装はひどすぎるので,自分で有料Webサービスを提供する時はIEユーザーにはIEサポート料を上乗せして課金したい.上乗せすると嫌がられそうなので,Firefox割引とかChrome割引とかがいいか.

今時レイアウトのためにdivを入れるのは,tableでレイアウトするのと同じように格好が悪いということに気付いてないサイトも多い気がする.

2010-01-18 (月)

トラックバックとかコメントはTwitterで代用可能な気がするけど良いインターフェイスにするのは難しそう.

*order by rand() limit 1

MySQLでテーブルからランダムに1レコード取得する方法を調べると,order by rand() limit 1がたくさん出てくる.MySQLってorder byの後の式も検索に影響するのか,すごい,と思ったけど違った.普通にランダムにソートした後に1件だけ取り出すのでテーブルをフルスキャンしている.

とても小さいテーブルならともかく,まともな用途には使えない.変なことをせずに,IDを振ってから乱数でIDを指定するべきです.

*FreeBSD

SDから起動してくれないので,USBから起動するようにしておく.ためしにFreeBSDを入れた2GのmicroSDがあったので,USBアダプタ経由で起動.同じmicroSDをSDカードスロットに挿すと起動しない.EeePCのSDカードスロットのSDの認識が遅いんじゃないだろうか.

とりあえず,apache,samba,screen,irssi,subversionあたりをインストール.

最近は,gitとか流行ってるけど気にせずsubversion.そういえば,FreeBSDもsubversionで取ってこれるようになったけど,まだcvs使ってるな.subversionとか無駄にディスク消費するし,gitとかもってのほか.自分で開発するときは便利なんですが,ソースもめったにいじらないのにワーキングコピーを持つとか効率悪い.

*ところで

ブラウザ三国志で利用が禁止されている「BOT・チートツール等」ってどんなものを指すんだろうか.

なんとなく想像はつくけど,ゲームとか初心者なので分かりません.

たぶん,支援ツールは含まれませんよね.

目を放している隙に勝手に拠点の設備がレベルアップしてしまうバグがあるのでちょっと心配ですが.

ゲームって,自分でプレイするより,プレイするプログラムを書くのが面白いですね.以前にも,パンヤというゴルフもどきをするゲームを,画像処理でプレイさせてみたけど,結構おもしろかった.

まぁ,後半は最近見た夢の話なのですが.

2010-01-17 (日)

*C++::低機能HTML/XMLパーサ

低機能なHTML/XMLパーサを公開.

Nintendo DS用に書いたブラウザからパーサ部分だけを抜き出したもの.必要な部分だけ抜き出したので文字コードの自動認識とかもしません.まともなライブラリを使う程でもない,ちょっとした処理に便利です.元がDS用なので少しいじればかなりコンパクトに収まります.

*夢を見た

ブラウザ三国志で資源が溢れるのを防ぐために,危なくなったら通知するツールを作ったのだけど,なぜか勝手に資源を使って設備をレベルアップするバグが混入してしまったため公開できないでいる.ゲームが面白くなくなってしまう致命的なバグなのでどうにかしたい.

ソースを探ったところ,この辺にバグがありそうだなぁ.

        if (village.buildComplete < Time::now()) {
            Sleep(1000);
            facilitys[n].refresh();
            if (facilitys[n].state==2) {
                cout << "BUILD!" << n << endl;
                facilitys[n].build();
                n = (n+1)%facilitys.size();
            } else {
                cout << "WAIT..." << endl;
                Sleep(10000);
            }
            village.refresh();
            count = 0;
        }

今いじるとバグが増えそうなので,よく考えてから手をつけよう.

という夢を見たのですが,夢なので仕方ないです.

*EeePC 901にFreeBSDをインストールする

メモ.

ずいぶん前にFreeBSDとの相性は良くないとか聞いていたけど,気にしない.

ネットワークも標準で認識しないけど,気にしない.

とりあえず,様子見のためSDにインストールする.SDに書き込むと落ちるとか書かれているけど,今のところはまだ大丈夫.

SDを挿すとdoes not start on track boundaryとか言われるの.トラックやシリンダの単位はいつまで存在するんだろう.最近のデバイスは,255cylsという63headsあからさまにいい加減な値で認識するので,BSDでパーティション切る時に中途半端な感じになってしまって嫌だなぁ.

いきなりrootfsのマウントに失敗したけど.あわてずに,ufs:/dev/da0s1a.umassの認識がマウントに間に合わないみたい.kern.cam.scsi_delayとかでいけなかったら,最悪カーネルに変なコードを入れるしかないか. root_mount_wait()あたりをいじればいけそうだなぁ.

最近は,SSHのkey's randomart imageが表示されるのか.

acpi_asus,acpi_videoをロード.

ネットワークはaeドライバで,ale0で認識.

無線LANは無理そうなので,放置.

カメラも付いているので,外から部屋の様子を見れるようにしたい.

*秋葉原

16GBのSDと1TBのHDDを買う.

2010-01-16 (土)

寝る

毎週土曜日は寝てて終わる

2010-01-14 (木)

右Ctrlが無いキーボードは困るなぁ

ランチャー起動用のショートカットキーにしているので

2010-01-12 (火)

8.0-RELEASE-i386-memstick.imgを使ってUSBメモリからFreeBSDのインストーラを起動しようとしたがうまくいかない.

Boot error

とだけ画面に出て止まってしまう.これはFreeBSDのブートローダのが出すメッセージだと思うので,パーティションが見つからないのかも.MBRのコードを手でいじればいけるきがしないでもないけど,CDからインストールした方が早そう.

bootonlyでインストールしようとしたら,ネットワークカードを認識していない.CDからインストール後にドライバ入れないとダメかな.

というわけで会社行こう.

2010-01-11 (月)

今日は休日か.

そういえば,ApacheのリバースプロキシはWebSocketを通してくれるのかな.通してくれるなら,80番ポート使えて便利な気がするのだけど.

DOMの仕様書読んだりした.手元に,自前のHTMLパーサがあったので公開するまえに読んだのだけど,変な実装してしまったかな.自作のやつは,子要素を持てないElementノードがあって,子要素を持てるContainerノードがサブクラスとして実装されているあたりが違うな.元がDS用に書いたものなので,なるべく省メモリにしたくてそうなったのだけど.

あと,レイアウトエンジンがDOMに食い込んでたので,ばっさり消してみたりした.

*買い物

お腹が減ったので秋葉原に行く.

抵抗とかコンデンサとか,ドリルとかノコギリとか,中古のネットブックとか買った.

ネットブックはサーバ立てるために買ったのだけど,普通に使いたくなった.というか,静かだと思ったらSSDか.どうせストレージは外付けするし,CPUとメモリ以外のスペックを全く見てなかった.

*FreeBSD

8.0-RELEASE-i386-memstick.imgがあるのか,試してみよう.USBメモリからインストーラ起動できるっぽい.bootonly相当で良い気もするけど,いまどき1GB以下のUSBメモリなんて無いだろうから,このサイズでもいいのか.USBメモリにコピーするのにちょっと時間がかかりそうだけど.

2010-01-10 (日)

sang0と秋葉原に行く約束をした気がするけど,ずっと寝ていた.

LANケーブルの調子が悪いと思っていたら,コネクタ付近で断線しているっぽい.コネクタ付け直そうかと思ったけど,工具が無い.LANケーブルを見ていると,しろみどりみどりしろだいだいあおしろあ…という呪文がいまだに頭の中に浮かぶな.工具片手に校内を歩き回った高校時代が懐かしい.学内LANを自分たちで引くという経験を学生が出来たのは,あの時期だけだろうな.そのときに作った,コンピュータ同好会は,まだ存在するのか.同好会のまま存続しているのが少し微妙といえば微妙だけど.

2010-01-09 (土)

*kstm.org新年会

10時に秋葉原集合らしい.10時過ぎに行ったけど,まだ誰も来てなかった.少し待ったら,gazyuとsafiiが来た.

リビアでmeshiが合流.家具を見た後,万世で肉を食べる.

その後,有明の大塚家具に.kmuroiとgotoが来る.safiiとmeshiは高そうな椅子を買っていた.机欲しかったけど,20万くらいか….部屋の作業環境をどうにかしたけど,家にいる時間は殆ど寝ているので,あんまり意味が無いんだよなぁ.

その後,買い物のため,goto家の近くのイオン品川シーサイドに.今,マクドナルドでポテトのLを買うと100円マックがもらえる券が付いてくる.会社の上司の人がくれた券があったので,gotoにあげる.もちろん,ついでに何か買って来いという意味で.で,シャカシャカチキンとポテトのLが来た.今度はコーラが当たる.で,コーラをもらうついでにポテトのLを買う.で,またシャカシャカチキンが当たる.で,ポテトのLをついでに買う.…無限ループ.マクドナルドの策略に嵌りました.これはとても危険です.

sang0が来たおかげで無限ループから脱出.ポテトでだいぶお腹いっぱいな気がするのは気のせい.

鍋の材料を買ってgoto家に移動.

2010-01-08 (金)

*波と粒子と

量子力学の入門書(?)とかで,「波の性質」と「粒子の性質」が相反する性質のように書かれていたりするけど,この2つの性質は波や粒子を観察することによって得られたもので,理論的に導き出された物じゃないのに,両方の性質を持っていると何か問題があるんだろうか.

さも「不思議でしょう?」と問いかけるような説明によって,イメージするのを妨げている気がする.今まで気づかなかっただけで,光や電子をよく観察したら,どちらも干渉もするし量子化された単位が存在していたというだけの説明じゃだめなのかなあ.

2010-01-07 (木)

*C++

もう少し,std::wstringとstd::stringを混ぜて使いやすくして欲しいなぁ.入出力は,UTF-8とかでエンコードされた状態の文字列をstringで扱って,内部ではwstringで持つという使い方も多いと思うのだけど.

内部エンコーディングまでUTF-8にするのも良いけど,日本語文字列がメインの場合は,wstringの方がメモリ効率良いし,速度的に有利です.wchar_tが4バイトな環境もありますが,変な文字使う必要ないなら2バイトにして使っちゃいます.

2010-01-06 (水)

寝ていた時,何か痛いと思っていたら,布団の中からラジオペンチ出てきた…

*東京怖い

起きたのは良いけど食べ物が無かったので,朝ごはんを買いにコンビニに.普段行かない時間に行ったら,人が商品とレジに群がっていた.オフィス街恐ろしい.これでは買う気が起きないので,何も買わずに帰ってきた.

なんで一斉に12時に昼食に行くんでしょう?非効率的だと思わないのかなあ.決まった昼休みを作るなら,周りの会社とずらそうと思うのが普通だと思うのですが.

電車のラッシュとか,普通の人なら見ただけで会社に行くのを諦めるような状況でも,一斉に行動する東京の人は凄い.いったいなにがそうさせるのか….

とか書いているうちに,朝ごはんを食べてから会社に行くか,会社に行ってから昼ごはんに行くか,迷う時間になった.

二日連続でGoogle Mapsカーを見た.最近,会社付近を回ってるみたい.

2010-01-05 (火)

昨日,寝すぎたせいか,あまり寝れなかった.

眠い.

晩御飯作る気力も無いので久しぶりに帰りにマックに寄って食べた.帰ったらすぐに寝てしまった.

2010-01-04 (月)

りんごが落ちた.ニュートンか.

あと,メールで気づいたけどhamaPatchのサイト閉鎖されてたのか

ここ1ヶ月くらいメール読むのを忘れていた.どうするか.あー,掲示板とかにもなんかあるなぁ.

必ず返事はしますので,申し訳ありませんが,お待ちください.

メールとか,電話とか,自分にとって必須で無いものは存在自体を忘れてしまうのですが,何か良い方法ないですかね….テレビとか新聞とかのメディアがまだ存在していたことにも実家に帰って気づいた.

衣食住とC++とPerlがあれば生きていける.

追記:

メールの返事とか出しました.返事来ない場合は,間違って捨ててしまったかもしれないです.もう一度送っていただけるとうれしいです.

kawahira.mobileあっとびんずめどっとねっと は携帯に届くので,急ぎの場合はそっちに通知してもらえると返事が早いです.

2010-01-03 (日)

ThinkPad X200の「_(ろ)」キーが壊れた.キートップが取れただけだと思ったら,引っかかる部分が割れていた.

仕方ないのでWindowsキー(田ミ)を移植してなかったことに.

取れた部分は,一応接着剤でつけててみた.これでどうかなぁ.

*円周率とネイピア数 #ggrkz_puzzle

円周率(π=3.14159…)とネイピア数(e=2.71828…,自然対数の底)ってなんだか良いですよね.

プログラムを書いているときは0と1の世界ですが,現実世界はπとeで出来ていると思います.

つまり,πとeを操れると,いわゆるリア充っぽい.

面白い年賀状がtwitterでRTされているのを見かけた.

  • Google電卓で計算できる式
  • 1,2,3,4,5を1回ずつと
  • ASCII非英数字の演算子を使って
    1. 値がπ(円周率)になるべく近い式を見つけよ
    2. 値がe(自然対数の底)になるべく近い式を見つけよ
  • 解答と一緒に #ggrkz_puzzle と書く

http://f.hatena.ne.jp/taitoku/20100103113627

以下を読むまえに,面白そうだと思った人はやってみると良いと思います.

πやeの近似値としては,22/7や19/7が有名ですね.最初これを作るパズルだと思ったのですが,それは作らずちょっと捻って.

  • e ≒ 3^1.54/2 = 2.7147931…

19/7よりちょっとだけ近い.やったね.

で,円周率の方を考えてたんだけど,「3.1425」というのを見てやられたと思った.そういう問題だったか.

この時点で,もしかしたら,もう少し奥の深い(?)問題なのではないかと思い始める.まずは,問題をよく読んで変な罠が無いか探してみる.

使える演算子を確認すると,階乗が使える!Googleの階乗はΓ関数だったはず.

  • π = ((4-5)/(3-1))!^2

今度こそ,問題の意図を正しく読み取ったに違いない.「なるべく近い」なんて言いながら理論値が出るわけですか.これは良い問題です.

(-1/2)! = Γ(1/2) = sqrt(π) を利用.Wikipediaにも書いてありました.

円周率は簡単だけど,ネイピア数は難しい.オイラーの公式を知っていれば,式は簡単に作れるのですが,1と2がたくさん出てくるのでどうにか処理しないといけません.

  • e = (-1)^( -(-.5)!^4 ) ^(-(3^0)/2)

この辺で挫折.

がんばれば出来そうなので,後でやろう.だれかやってくれないかな.

大人気なかった気がするけど,ちょっと楽しかった.

追記:

これを書いた後,帰るために電車に乗ってしまったのですが,帰ってきて,考えようと思ったら答え出てた.

  • e = (-1)^((-(-(.2+.3))!^4)^(-.5))

これは綺麗です.1~5を順番に使っています.2と3で0.5を作れそうだな,とは思ってたけど,簡単だった.それと,順番に使おうとか思いつきもしませんでした.くやしい.

円周率も綺麗なものが上がってました.

  • π = (1/2)!/(3!)*(4!)*(.5!)

凄い.

とてもよく出来たパズルだったけど,誰が考えた問題なのかなぁ.最初は高校生くらい人たちがやっているのかと思ったけど,問題の出来が良すぎる.

2010-01-02 (土)

自分で使っている文字コード変換のためのencode.hを公開しておく.

EUC-JPとかWin32APIを使う場合は変換できないかも.

謎のイテレータがたくさん入っていますが,正常な文字列以外を渡したりするとおかしなことになるので,使い物になりません.イテレータじゃなくてストリームとして再実装する予定です(やりたくなったら).

*C++のvtableが憎い

ポインタを介さないアクセスの場合は,仮想関数テーブルを見る必要が無いので,メソッド呼び出し時のオーバーヘッドはありません.

が,インスタンス生成時は別で,オブジェクトの先頭にvtableを埋め込む処理が入ります.

これが厄介で,ごく単純な処理の場合は賢いコンパイラはvtable自体の存在を忘れてくれますが,配列だったりすると全ての要素にvtableを埋め込んでくれます.

    Nanika o[16];

とかすると,Nanikaは初期化不要でコンストラクタも無いのに16回のループが発生してしまいます.ポインタ経由でアクセスする可能性があるなら仕方ない処理なのですが,その場所ではその仮想関数テーブルは使われないのです.

遅いと困る箇所だったので,テンプレートで実装したのに,クラスの宣言自体にvirtualがあると,無駄な処理が発生してしまいます.

とりあえず,Nanikaのvirtualが無い版を作って無理やり解決したけど,どうにかならないのかなあ.今回の場合は,データと処理を別クラスにする方が結果として綺麗になりそうだけど,後から変えるのは面倒.

もう少し,仮想関数とテンプレートを簡単に併用できるようにして欲しいな.

*もしもコンピュータを再設計して良いなら

とりあえず,記憶領域の最小単位を10ビットとかにしたい.

現在は8ビットが最小単位で管理されていて,その倍数の32ビットや64ビット単位でCPUも計算を行っています.これらは,2のn乗ビットになり,CPUの回路やアルゴリズムの実装が綺麗になるという利点がありますが,今となっては弊害の方が多い気がします.

8ビットCPU時代ならともかく,128ビットのレジスタが普通に存在できるCPUにおいて,8ビットを10ビットにしたところで,効率は下がらない気がします.それよりも,現実社会の事象を扱うソフトを書くときは,10ビット単位の方が効率よく計算や格納ができそうです.

8ビットだと足りないけど,10ビットなら足りるという問題は結構あります.マイコンを使ってて,よく使うA/D変換器なども10ビットです.でも,マイコンのレジスタは8ビットだったりするので2ビット捨ててしまうか,6ビットと計算時間を犠牲にしてそのまま格納するかでかなり迷います.256段階のデータは少し荒すぎるので10ビット欲しいのは確かなのですが,何かが犠牲になってしまいます.

タッチパネルに触れる時や,デジタル温度計を見かけたときに,自分だったら作るとき何を思うかが一瞬だけ脳裏をよぎります.

Unicodeを策定するときも,文字数を少なくするために中国や日本の漢字の似たものを統合するというような乱暴なことをしなくて済んだと思います.この問題のしわ寄せは,現在も問題が出ていますし,かなり先の将来まで引きずると思います.

あと,これから迎える2038年問題も考える必要は無かったかも.

とにかく,8ビットという単位のせいで発生している損害はかなり大きいと思う.

2010-01-01 (金)

あけましておめでとうございます.

夜まで昼寝.

ちょっと半田付けしたりしたけど,時間がかかりそうなのでまた後で.

ナゾナゾ:ここに海がある.0Ωには何がある?

思いついたけど,この日記はUTF-8なので意味が無かった.

実家に帰る.終電だった.危ない.

電車の中でプログラム書いてたけど,VC++のヘルプが起動しないのでAPIが調べられない.