幼少期の謎

わたしは物心がつくのが遅くて、幼少期の記憶があまり残ってないのですが、幼稚園時代に描いた絵の記憶が少しだけあります。

実際のところ、記憶と言っても充分に単純なもので、2種類の絵しかかけませんでした。山の絵と海の絵の2つです。山は大きな山に道があって迷路みたいになっているやつで、海は海中にカニや魚がいるというもの。その絵心は大人になっても大して向上することもなく、今に至っています。

そんな幼少時代に起きた、もう1つの奇跡の構図があって、それはなんと、パンダが横に並んで手をつないでいるというもの。3年に1度の奇跡。その奇跡の1枚はまさに1度しか描いてないそうです。山と海は何度も描いているというのに。

そして先日、上野動物園に行ったのですが、パンダが横に並んで手をつないでいるなんていう飼い方をしているわけがなくて、パンダは孤独でモノトーンで、ハードボイルドでした。だからあの奇跡の構図は自分の素晴らしき(?)イマジネーションによるもの…と思いきや、よくよく観察すると、至るところにある土産物屋さんには定番のパンダのぬいぐるみがズラリとギッシリ並んでいて、それと比較すれば実はあの絵の構図、まさに写実的なものだったということを理解しました。あの時オレは、おみやげのぬいぐるみを描いてたんですね。愛想のないホンモノのパンダではなく。

なんてカワイイな幼少期のオレ…(笑)

カメ

先日、昼休みに散歩していたら皇居のお堀でカメを見ました。お堀は岩が点在しているわけでもなく、休むところがないとカメも疲労してしまうんじゃないかとも思いましたが、なんとなく元気そうでした。

思えば二ヶ領用水でも宮内交差点に近い卓球場のとこの橋からもいつもカメさんが見えます。宮内小学校にいるカメさんは旧中原図書館にいたカメが引っ越ししてきたものですかね。うちの近所の床屋さんのカメも子供に人気ですし。

というわけで最近カメがキてる! だからバス待ち時間に入った小杉(東急スクエア)のUniqloでウサギとカメのTシャツがあったのを見て、思わず買ってしまった…という取り留めのない話。

golangのmap[int]intのメモリ効率

最近使うコンパイル言語と言えばgolang。これはこれでけっこうハッピーですね。C++なんて最初からいらんかったんや! channelとgoroutineで並列処理も楽々。ただ適当に書いてるとgoroutineのリークがけっこう起きるみたいですね。

[]intとmap[int]intのどちらを使うか。sparseな感じだとどのくらい違うのかな? []intはだいたい意図したとおりの配列になるのだが、map[int]intはたぶんhash + listかred-black treeになっているだろうから、オーバーヘッドは気になる。

試してみた。

package main

import (
    "flag"
    "fmt"
    "syscall"
)

func main() {
    n := flag.Int("num", 10000, "number of iteratio")
    flag.Parse()
    fmt.Printf("num=%d\n", *n)
    data := make(map[int]int)
    for i := 0; i < *n; i++ {
        data[i] = i + 1
    }
    var r syscall.Rusage
    syscall.Getrusage(syscall.RUSAGE_SELF, &r)
    fmt.Printf("%+v\n", r)
    return
}

./test -num 67108864

num=671088
{Utime:{Sec:24 Usec:232528 Pad_cgo_0:[129 255 255 255]} Stime:{Sec:1 Usec:172404 Pad_cgo_0:[0 0 0 0]} Maxrss:5017321472 Ixrss:0 Idrss:0 Isrss:0 Minflt:1225546 Majflt:0 Nswap:0 Inblock:0 Oublock:0 Msgsnd:0 Msgrcv:0 Nsignals:0 Nvcsw:2759 Nivcsw:1253}

MacOSのgetrusageのMaxRSSはバイト単位。したがって、5017321472/67108864≒74.8。4バイトがキー、4バイトが値だから74.8-4-4で66バイト程度がmapのオーバーヘッドと考えられる。こんなもんか。もし密度が1/20以下くらいのsparseな配列であれば、mapを使うのもいいだろう。

証券会社乗り換え計画

今年になってまた株取引をはじめまして。計算で求めた多数の銘柄に投資して一定の確率で回収する方式を確立していこうとしています。まあ計算と言ってもまだメチャクチャなところもあって、それなりに資産が目減りしていくわけです(笑)。テストしてみると、今のアルゴリズムだとランダムに銘柄を選ぶよりは数%マシな選択にはなってるようですが、全体的な下落には全く逆らえておらず、今後の改善が待たれてます。うーん、どうなることやら。

これ初年度は勉強代だと思って我慢しながら考慮が足りなかった計算をいくつか追加してるんですが、感覚的にはそれほどひどい負け方をしている気持ちはしてなかったのですよ。しかし評価額は減っていく。やっぱダメなのか? 俺達はまた奴らの養分にされるのか!?

で、取引のデータを眺めていたら、実はほとんどマイナスになってない。確かにちょっと落ちてるけど、評価額の下落と比べるとこんなのゴミみたいな…よく見ると、要は手数料のぶんがどんどん削られていってるんです。

20代の頃にやっていた取引では長期保有戦略でそれなりに利益が出たんですが、ありゃ直感に頼りすぎたバクチだったなと。円熟のアラフォーは計算と確率で堅実に行くぞと。いうことで、今回は細かく取引を繰り返して確率で勝つという考え。ホームラン狙いではなく、出塁率で勝負する。で、取引ごとに取られる手数料が無視できない問題になっていると。計算方法が固まってきたらもっと取引の頻度を増やすつもりだったから、これはまさに由々しき問題。

実際、前職の持株会の精算に指定された証券会社を使っていたんですが、比べてみると確かに使うサービス…日本株(現物)のネット取引…しかしてないのに手数料が高い。もちろん店頭中心のセレブ証券会社と比べるとそれでも安いのですが、純ネット系の証券会社と比べるとだいぶ高いです。しかも逆指値も指定できないので損失が始まるとなかなか止められない傾向にあることも不便に思っていました。誰だよこんなサービス作ったの。ふざけやがって。

つまり、比較していて怒りすら感じるほど、サラリーマンの小遣い投資には全く向いていない証券会社だったんです(!)。おれはMacBookProの代金を市場から回収しなきゃいけないのに。(つづく?)

踊るモンキーって実は…

昨晩のマグロ・サンダーボルトのルームランナーのくだりはとにかく凄かった。マジで読書人生で最大の凄さだったかもしれない。スゴイすぎる。画面上に流れる活字読むだけでここまで凄い経験ができるとは思わなかった。事件ですよ。

話はだいぶさかのぼりますが、キョート城にあった踊るモンキーの区。この踊るモンキーって要は猿楽町とか猿楽通りの「猿楽」のことだったんだと気づきました。実は今の職場の近所に猿楽町があります。このへんはとんだ文教地区で、いろいろな名門学校がありますが、猿楽町1丁目には夏目漱石が学んだ学校があって、その石碑があります。そう言えば彼はマダナイ=サンという名前のニンジャキャットの伝記を書いたことがあるわけで、実は踊るモンキーの区という地名にはそれなりの意味があったんだろうなと思うようになりました。

邪悪な企み? のるレージ

みなさ〜ん、のるレージしてますか?

のるレージというのは、東急がやっているPASMOのポイントサービスです。東急の駅で降りるとポイントが貯まる。ポイントに応じてランクが上がっていき、応募できるプレゼントが増えていくというしくみ。ポイント交換などで何らかのアレもできます。ポイントは月ごとの集計です。

1月から通勤定期で会社に通うようになった私は現在「助役」なわけですが、この「のるレージ」、事件の香りがしてきています。

というのも、ポイントが確定したというメールが毎月11日頃に届くようになっているのですが、届いたメールを見てすぐにサイトを見に行くと必ず(?)メンテナンス中なんです。でも、メンテナンス中にわざわざランクの確認をしたくなるアナウンスを打つとか、そういうことするか普通? 実際何らかの邪悪な陰謀なのでは!?

これが気になって夜も眠れません。来月はどうなんだろう…

謎(?)の入力トラフィック

今月に入ってから、私の借りているサーバの一つに謎のトラフィックが入ってくるようになったんです。これは怪しい。(このブログが置いてあるサーバではありません…念のため)

tcpdumpで見てみると、近くの(同一サブネットの)IPアドレスの知らないサーバがかなりいい感じの頻度でbroadcastでパケットを投げてきてるんです。

22:31:14.767094 IP xxx.yyy.zzz.aaa.40210 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.772110 IP xxx.yyy.zzz.aaa.40210 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.777123 IP xxx.yyy.zzz.aaa.40210 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.782090 IP xxx.yyy.zzz.aaa.40210 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.787430 IP xxx.yyy.zzz.aaa.39501 > 255.255.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
22:31:14.792045 IP xxx.yyy.zzz.aaa.55342 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.796911 IP xxx.yyy.zzz.aaa.55342 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.802612 IP xxx.yyy.zzz.aaa.58642 > 255.255.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
22:31:14.807821 IP xxx.yyy.zzz.aaa.58642 > 255.255.255.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
22:31:14.812899 IP xxx.yyy.zzz.aaa.51141 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.818382 IP xxx.yyy.zzz.aaa.43229 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.823763 IP xxx.yyy.zzz.aaa.45229 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.829008 IP xxx.yyy.zzz.aaa.59285 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.834226 IP xxx.yyy.zzz.aaa.37424 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)
22:31:14.839663 IP xxx.yyy.zzz.aaa.57427 > 255.255.255.255.netbios-dgm: NBT UDP PACKET(138)

こんなポートでlistenしているプログラムがあるわけでもなく。試しに iptables -A INPUT -p udp -m udp –dport 137:139 -j DROP としてみても、止まらず。通信量で課金されるわけではないけど、こういうのって、どうしようもないのかな。

MacOSのbashとshとPOSIXLY_CORRECT

Linuxでは/bin/shも/bin/bashも同じで/bin/shは/bin/bashへのシンボリックリンクですが、MacOSの場合、/bin/shと/bin/bashは微妙に異なっています。

# uname -a
Darwin mbp.local 13.1.0 Darwin Kernel Version 13.1.0: Wed Apr  2 23:52:02 PDT 2014; root:xnu-2422.92.1~2/RELEASE_X86_64 x86_64
# ls -l /bin/bash /bin/sh
-r-xr-xr-x  1 root  wheel  1228240 10 31  2013 /bin/bash
-r-xr-xr-x  1 root  wheel  1228304 10 31  2013 /bin/sh
# gsha1sum /bin/bash /bin/sh
5151b7973af09c094516a602efae96dd702a8424  /bin/bash
2ff0132fe784dcd3aeb1c258b064eb2592776652  /bin/sh

実体はどちらもbash-3.2です。意外と古いですね。

# sh
sh-3.2$ echo $BASH_VERSION 
3.2.51(1)-release
sh-3.2$ exit
# bash
bash-3.2$ echo $BASH_VERSION 
3.2.51(1)-release
bash-3.2$ exit

しかし、bashとshでは、初期設定が少し異なっています。大きく異なるのはPOSIXLY_CORRECTの値。shはPOSIXLY_CORRECT=yですが、bashは未設定です。この値が設定されているMacOSの/bin/shは、私が多用するecho -nが”-n\n”が出力されたりして、甚だ不便です。Linuxの場合はPOSIXLY_CORRECT=yでもecho -nは正しく改行なし-n抜きで出力してくれます。つまり、シェルスクリプトを実行するときに、Linuxであればsh hogehoge.shで良かったのが、MacOSではbash hogehoge.shとする必要があるわけです。これは忌々しい。/bin/echo -nなら問題ないが、echoごときにいちいち/binなんてつけてらんないし。

しょうがないので最近はシェルスクリプトの先頭付近にunset POSIXLY_CORRECTと書くようになりました。しかし、なんかこういうのは負けた気分になるね。

巨蕪、墜つ

俺達のピーカブーがついに引退。お疲れ様でした。

10年間、まるで馬車馬のように働いたカネで悠々自適の引退生活か? 南の島でビーチに入り浸りか? そうなのかピーカブー!? それがおまえのホワイトカラーエグゼンプションなのか? 色白なだけに??

もともとローソンのロッピーで株取引ができるという、トチ狂ったとしか思えないサービスのアイコンイラストから生まれた、蕪に顔が描かれてそこから直接手足が生えてしまった、ちょっと何を言っているのか分からない恐るべきキャラ。いわゆるこんにち流行りの「カブ型モンスター」というジャンルを単独で切り開いた先駆者なわけだ。

当時私は株取引をしていましたので少し検討しましたが、さすがにコンビニの端末で取引はしないよなぁ、と思って申し込みませんでした。

私にとっても、ピーカブーはアンパンマンの次に描けるようになった顔。まあアンパンマンのボディはまだ描けないので、全身を描けるキャラとしては唯一無二? あーピチューは微妙に全身かけるかも(ちょっと怪しい)。あと、うーたんもかけるかもしれない。

この後、万が一にも川崎が負け続けたら、カブの呪いとして後世に語り継がれますね。それだけは避けてほしいよね。

Railsその前に

Ruby on Railsはじめます。世の中の説明やチュートリアルはいろいろ間違っていて、Railsの前にRackを説明するべきなんですよね。rails newでたくさんファイルができてうれしいね、じゃないでしょ。意味の分からないファイルがたくさんできても嬉しくないんですよ。むしろ分からない領域が広がれば広がるほど悲しいでしょ。アクセスがどこから来て処理はどこに行くのか。それを知っとかないと不安が大きいままになってしまう。戦場の足場は大事なんです。

RackはPythonで言うWSGIみたいなもので、リクエストを処理するところだけ書くとうまいことWebサーバとつながってくれる、というもの。ググって調べると分かりやすい説明がありますのでどうぞ。そのRackの設定がconfig.ruで、Railsでも作られます。Rails自体がRackに対応したアプリとして実装されているので、WebサーバとつながっているRackのconfig.ruから辿って行くと処理が追いやすいと思います。

require ::File.expand_path(‘../config/environment’, __FILE__)
run Rails.application

まあそれでも、Rails.applicationってどこよ? とかrunって何よ? というと探すのはそれなりに苦労しますが、何を探していけばいいのかの手がかりにはなりますよね。