Working in the submarine in this 2 months

さて この記事 からちょうど2ヶ月.

転職すると忙しいとは聞いていましたが, 様々なことがありバタバタと2ヶ月が過ぎていきました. あっという間に時間が経ったような気がしますが, 振り返ると半年くらい仕事している気がして, 短いような長いような日々でした. それだけ充実していたんでしょうね.

今携わっている仕事には意味を感じていて, 大変は大変ですが精神的にはすごく楽しくやっています.

周囲は自分よりすごい人しかいなくて追い付くのに苦労してますが, おそらくそうやって足掻いている分成長しているんだと思います. こればっかりは後で振り返らないと分からないので判断は保留ですが.

身に付いた技術の1つに vi があります. h, j, k, l, Shift-g, dd, yy, p, Ctrl+f, Ctrl+b あたりは手に馴染んできました. ちょっとだけサーバ管理者っぽくなりました.

誰ともなく未来の自分に現状報告でした.

直接もしくは間接に支えてくださっている方々に感謝.

Python Developers Festa 2011.10

Python の勉強会で Asakusa/Hadoop について話してきました.

Python Developers Festa 2011.10 を開催します

Python Developers Festa 2011.10 を終えて

「エ!? Python の勉強会で??」と思うかもしれませんが, 主催者の @voluntas さんに「Hadoop について話さないか? @Shiumachi が Hadoop について話して, @cocoatomo が Asakusa について話してよ」という話が飛んできたので, 喜んで発表してきました.

発表資料

発表

Hadoop を知ってる人で Asakusa のことを初めて知る人向けに発表してきました. なので浅く広く発表したのですが, 実は Asakusa を知ってる人がけっこういて,「その人達には物足りなかったかなぁ?」と振り返って思います.

発表内容についてよく知り, 聞き手をイメージし, 聞き手に何を持って帰ってもらうか? を掴めないと, 良い発表はできないことを思い知りました. 今回は聞き手のイメージが甘く, 説明を浅くしすぎたと思います. 孫子の「敵を知り, 己を知らば, 百戦して危うからず」ですね. 反省して次回の発表に活かします.

発表した手応えとして,

  • Hadoop はみんな知っている. Asakusa もけっこうな人が知っている.
  • Hadoop の象はウケる
  • B2C の人が多いかと思いきや, B2B だったり基幹バッチを抱えている人もいた
  • バッチの問題はどこにでもある
  • 興味を持つ方々は Asakusa アプリケーションどうしの優先順位の設定に関心が強い

こんなものを感じました.

発表内容は申し訳無い部分が多々ありましたが, Asakusa を知ってる人が今より増えて興味を持っていただけると嬉しいです.

次回?

あるか分かりませんが, 次回に発表するとしたらこんなとこでしょうか.

  • PyPy (特に静的解析のあたり)
  • Heroku (Google App Engine の Django (< 1.0.0) から Heroku への移行)
  • 楕円曲線暗号 (←!? 全力で置いてけぼりにしそう. でも V さんが求めるなら解説します)

聞き手として

この勉強会は @voluntas さんの興味に基づいて発表が決められているので, 普段自分が聞かないような幅広い内容の発表が聞けました.

特に, @sawonya さんの部屋の片付けに関する発表が胸に刺さりました. えぇもうそりゃグサリと. こんな感じで. https://twitter.com/#!/cocoatomo/status/125133226791538688

また, 重かったのは @hiroki_niinuma さんの発表. 内容は自分の想像を絶していたので, ここに書くことはできません. ただ, 自分の身に置き換えて考えたときに, 平時から準備しておくことはたくさんある, ということを再認識してきました.

トラブル1

いつものことですが, 何かするときに必ず1つ忘れていくことがあって, それが今回は参加票の印刷忘れでした.

近くのセブンイレブンを探しましたが見付からず, 会場の隣りにある Fedex で印刷してきました. パソコン (10分以内) 262 yen + 印刷代 55 yen = 317 yen かかりました. 忘れ物の代償なのでこんなものでしょう.

皆さんも Oracle 青山センターに行って, 印刷を忘れたときは Fedex が便利ですよ!

トラブル2

実は発表準備中にちょこっとしたトラブルがあったので記録しておきます.

  1. なぜか認証が必要な Wifi (M-Zone とか会場の Wifi) に繋ごうとすると Safari ごと固まる
  2. 強制終了して再起動しても起動しない
  3. 仕方無いので Google Chrome を代わりに使う
  4. スライドが Sphinx の s6 テーマで作られていて, ローカルの JavaScript ファイルを読み込まないためプレゼンができない
  5. 困った\(^o^)/
  6. HTTP サーバを通せば Chrome も表示してくれるので, Mac OS X の Web共有を使ってちょちょっと Apache HTTP Server を立てる
  7. そこの DocumentRoot に Sphinx の build/html フォルダへのシンボリック・リンクを置いて事無きを得る.

事無きか? と言われると, Google Chrome に入れていたけいおんテーマを見られてしまいましたが, まぁ良い.

https://chrome.google.com/webstore/detail/jijlppfhlfgamaofmpafjpibhdmmcbde?hl=ja

最後に

実は Python Developers Festa (旧 Python Hack-a-thon) に参加するのは初めてだったのですが, 発表までさせていただいてありがとうございました.

主催者の @voluntas さん, 会場を提供していただいた Oracle さん, 素晴しい勉強会に参加できて非常に楽しめました. ありがとうございました!!

スタート幾何 第 2 回

スタート幾何 #2 というものに参加してきました.

http://partake.in/events/eb51cfab-184e-4c79-a08d-2c148451ffa8

今回は会場係もやっていたのですが, 諸々の私の手落ちにより開始時刻が非常に遅れてしまいました. ご迷惑をお掛けしました.

内容

教科書は松本幸夫先生の「多様体の基礎」を使っていました. すごく丁寧に書いてあってギャップや読者への宿題がほとんど無い本なのですが, それが良かったみたいでした.

今日は第 2 章から始めて, 例 2 のところまで行きました. 細かく突っ込んでいってしまったので, 速度としてはこんなものになってしまいました. 私としては, 定義の気持ちや証明のポイントなどを突っ込んで, どこがキモなのか伝えられたので満足しています.

懇親会

みんなの分のお菓子を買っていただいた方がいらっしゃって, 勉強会後にその場でプチ懇親会みたいになりました.

参加者に教師の方もいらっしゃったようで, 大学入試で使う数学と高校までで教える数学のギャップの話を主にしていました. 自分もすごく興味があり, また問題を抱えているな, と思っているところなので, 現場の方と話せて非常に有意義な時間になりました.

参加者

基本的にみな数学好きな感じでしたが, 年齢の幅が広かったり IT 関係以外の人も来ていたりして驚きました. ご高齢な方は数学を学ぼうという意欲はかなり強い方で, 非常に自分への刺激になりました.

数学への理解を広めたいなぁ, と思っている身としては, 自信を付けていただいた感じです.

逆にそういう方が勉強会を知るのに, 実質 Twitter が必須になってる PARTAKE を使うのは障壁にもなるんだなぁ, と実感しました. (だったら, オープンソースなんだからお前がなんとかせい, という話ですが :P)

まとめ

数学をやる立場としても, 数学を教える立場としても非常に充実した会でした. 次回も是非参加したいと思います. (もちろん家族との時間も大事にね. YAuth ポイント収集頑張れ!! > 俺.)

test

comment test

スタート代数 第1回

今日はスタート代数という勉強会を開催してきました. http://partake.in/events/989bf10a-d5f0-4fcc-ba1f-f152fe2f7072

「スタート」と頭に付いていますが, 懇切丁寧に教えるのではなく懇切丁寧にツッコミを入れる大学のゼミ形式でやってきました. 初めてこの形式に触れた人は驚いたかもしれませんが, ゼミ形式では発表者が理解を深めるのが目的となっています. ソースコードレビューを思い浮かべてもらえると感覚は理解できると思います.

なぜ体論からか?

通常, 代数を学ぶ際には「群」→「環」→「体」と進むのが普通です. でもそこで敢えて体論から始めるのには訳があります.

まず, 体が代数的対象の中で一番身近なこと. もちろん自然数や整数も使っていますが, 割り算が許されない数を扱う場面は少ないと思います.

第2に具体例が分かりやすいこと. 群の例として剰余群が出てきたり, 環の例として多項式環が出てきたりしますが,「これ使ってすごいことができるぜ」感が足りないのです. それに比べてガロア理論での「方程式の根の様子が分かっちまうぜ」の方が印象が強いと考えました.

もちろん群や環のことも少しは知らないと体の話ができないので, その部分については全力でバックアップしていってます.

結果報告

今回は3ページまで進み, 多項式とその根について語り始めるあたりで時間切れとなりました. 遅いように感じると思いますが, 確実な理解を得るためにはこれくらいのスピードになってしまうものです.

「抽象代数を理解するとは?」や「数学のゼミってどんなふうにやるの?」という, あまり知られていない (と思われる) ところが, 体験できたのではないでしょうか?

こちらに参加者の方の板書ノートが公開されています. http://lockerz.com/s/135335969

宿題

今日は宿題がいくつか出ていました.

  • 1のある可換環 R に対し, ∀a ∈ R, a0 = 0
  • 四元数体の逆元を計算せよ
  • ある可換とは限らない群において, ある元の逆元が1つしか存在しないことを示せ

どれもそう難しくないので挑戦してみてください. 1つ目の問題などは「R が可換で無かったらどうなるか?」「R に1が無かったらどうなるか?」「0の公理を削ってみたらどうなるか?」と色々といじってみると, 公理の必要性が分かると思います. (自分はこんなふうにして数学の抽象概念を理解していました.)

まとめ

内容はけっこうガチでやってしまったので, 次回何人参加するのか不安ではあります. また, 元々数学ができる人しか参加しないんじゃないか? という指摘もあると思います. しかし,「数学の抽象的な思考を知った上でプログラミングをする方が幸せになれる」と確信しているので, 今後も様々な方法で数学について知ってもらえるよう活動をしていきます.

  • Java 使いのための数学入門
  • Coq を使って知る数学

などなどできたら良いな, と思っています. だいぶ先の話ですが :P

I'm going aboard the Nautilus Technologies

前職を8/11に退職 (最終出社は7/22) し, 3週間ほどの人生の夏休みを経て, 今日から再度雇われの身に戻ります.

次の職場はノーチラス・テクノロジーズ (現・EC-One) です. Hadoop など分散処理の世界へ飛び込んでいきます.

http://www.nautilus-technologies.com/

中途として入社する初めての会社なのでけっこうドキドキしてますが, 新卒で会社を選んだときよりは色々考えて決断したし, 社員にも知ってる人は多いので, 完全に未知の世界ではありません. むしろ, これからやらないといけないことが見えていて, それに対してドキドキワクワクしています.

分散処理の方々とは関わる機会が多くなると思いますが, よろしくお願いいたします. (毎回思うけど,「よろしくお願いいたします」ってどう英訳するんだろうね〜.) もちろん Python や数学にも変わらず関わっていきますよ.

それでは, 今後の cocoatomo にご期待ください.

(余談) それにしても俺の夏休みは夢を詰め込み過ぎた…… 計画性は大事ですね.

Black Hawk Down as some project management

「とあるプロジェクトとして Black Hawk Down を観ると良い」という話を聞いて実践してみた. 以下は見ながら書いたメモである. 激しくネタバレしているので注意.

各時点での状況と自分の決断を記録して, 全て見終わった後にレビューするつもりで書いていった. (なので, 断片的で読みづらいかもしれない.)

総括

先に総括を書いておくと,「自分は判断を変えるのは早いかもしれないが, 簡単に諦め過ぎ」だと思う. 実際に指揮をしたら,「あいつの部下として従軍すると, 生き残る奴は多いが必ず誰か死ぬ」みたいに言われてると思う. そしてたぶん指揮する立場には居られませんな.

では, 以下から順次状況のメモと決断結果を載せていく.

(ちなみに映画のあらすじ, 登場人物の名前, あらすじの解説は http://bhdaa.sakura.ne.jp/characters.html がとても詳しく, 俺もここを参照しつつ状況を把握していった.)

状況1

デルタフォース投入 アイディードの拉致および治安回復で 3 週間の予定が 6 週間に.

その原因は分析したのか?

なぜ市民が民兵に撃たれるのか? 現場で必要な対応がルールに縛られてできないのか?

銃器があるのが日常の風景なのか?

本当にあの実業家を捕えることで状況が変わるのか?

ワシントンに報告……

先頭より優れた才能? まぁ, 事務方か.

規律, デルタ・フォース 厳しい上官 軍隊ってどこにでも基地を作れるんだな.

色んな信条, 考え方が混った集団. そりゃ当然か.

ビールズの発作は不吉だな.

決断1

イスラム教の祈りのシーンまでの感想.

なぜ 6 週間かけてもアイディード将軍を拉致できなかったのか? の分析が分からん. そしてあの実業家 (死の商人) を捉えることにどんな意味があるのか? 本当に効果があるのか?

状況2

さて, 将軍の部下 2 人を捉える作戦に.

ワシントンが目立つと戦車, 攻撃機などの使用を却下. う〜ん. 「撃たれるまで撃つな」か.

あの迷ってた若いリーダーが話の中心かな. エヴァーズマン軍曹, レンジャー

グライムズ, 初めての出撃

相手を舐めているのかそうでないのか? レンジャー

相手を舐めて準備が軽いレンジャー, 計画通り終わると思っている. デルタは万全の準備…… 死亡フラグじゃねーか?

情報屋は信じられるのか?

さて出撃.

あれ? あの電話を受け取った人は? もしかしてアイディード? 二重スパイ? あ, いや別の拠点か.

エヴァーズマン軍曹, 緊張しすぎ.

タイヤを燃やしてる時点で……は気付けないか.

3:42 PM little bird は人の輸送用ヘリか.

そういやなんで Olympic Hotel なんて名前なんだ? Olympic と関係が?

いや, リーダーが助けに降りちゃダメだろう…… 相手の方が戦力を一気に投入してきている. 道の真ん中で救助すんな.

今のところ大きな失敗には至ってないか. 標的は捕えられたのか?

あれ? 囲まれてる? まぁここを撤収すれば大丈夫か. あれ? 意外と撤収難しいんじゃないか? あれ? tail roter やられた? super 61 やられた.

決断2

さっさと戻る予定だったのが狂った時点で何か手を打つべき. 大事なのは今後の戦力を減らさないこと. 捕虜を連れて帰ること.

包囲されてしまい, 撤収のルートが確保できないので, さらにその外側に圧倒的な物量で包囲するのか? 倒す戦闘ではないので, 難しい. 撤退戦に近い. 撤退戦を成功させるためには人の量がいるはず.

状況3

主導権を失ったのに, 人は投入しないのか? そう言えば, 援護のヘリは十分なのか? 今さら捕虜の話か? でも, これが成果か. 今となれば成果の基準は変わってるのに……

あれ? なぜ人を置いて車両隊が撤収する?

もう既に完全な負け戦というか殲滅戦じゃないか?

指示の伝達の中継で手間取るとは…… お, 目的の捕虜は確保できたか? いや, 負傷者を乗せた最初の 3 輛のみか.

さて救助用ヘリ, スター 41 はどうなるのか? 安全を確保って…… 包囲されるのが落ちだろう. あれか負傷者を助けに行って負傷者になるパターンか.

なんで経験の無いリーダーを即時の判断を求められるところに突っ込まれたんだ?

「早く負傷者の回収を」ばっかり出てくる……「早くプロジェクトを元のペースに」 そんな重い装備を付けた負傷者を回収するのは大変だろうに. 状況を知らないで墜落現場に向かうのは……

おいおい, 衛生兵を運んだスーパー 68 もやばいぞ. 離脱できたか.

最初に撤退パターンを考えてなかっただろ…… この映画観る限りは.

あ, スーパー 64 も投入するんだ. 逐次投入だね.

スーパー 64 もテイルローターやられてるじゃん. 何が大丈夫なんだ? 現場で大丈夫か? と聞かれたらつい大丈夫と答えてしまうのか.

努力はしている, 各自の持ち場を守れ, とな. この状況でか?

「兵を貸せ?」デルタがそう言ってるのか? 現場の判断で順次人が危いとこに集っていくのか?

飽く迄安全な領域を作り, 待機するのが正解な気が……

決断3

さてスーパー 64 も墜とされたとこで決断. この状況で (遺体を含め) 一人も残さず撤収するのが良い決断なのか? 心情としてはそれは認めたくない. でも, あれ? 簡単なはずがなんでこうなってるんだっけ? 戦力差を見誤ったからか. その時点で色々前提が崩れてるので, そのゴールを捨てる. できる限りの人を撤収させる. しかし, 最後に残る人は人数減りつつ, 撤収しなきゃだから余計難しくなるんじゃないか?

ここの決断は難しい. ここで元々のゴールを捨てたら, 今後部下は着いては来ない…… きつい. しかし, 自分は 8 割の人間の生還をゴールにすると思う.

墜落現場に人を結集させるんじゃなく, できる限り街の外へ部隊を逃がす. (そもそもなんで墜落現場に人を集める話になったんだっけ??)

この時点でだいぶ絶望的だな. 基地に最低限の部隊を残して全員投入するか? そろそろ比率的に無理が出てるか? 圧倒的物量を用意できる手段を探す. (それが何かは分からないが)

状況4

さて, 第 2 墜落現場にシュガート, ゴードンが降りたい (機体は super 62), と言ったのを, 地上部隊に任せろ, しかし到着時刻の見通しは立っていない.

人が生きているか分からないところに救援を放り込むのか?

トーマスを死地に引き摺り込んで, なんでウンウンなんだ?

暗視装置無し……

墜落現場が分からずに, どこへ進むつもりなのか?

ここでの俺の決断はさっきの決断と一緒. 動ける者から外に出ろ.

んで, 本部の決断は?

せっかくヘリがあるのに, それを放棄するような戦い方はどうなのか? あれだ, 将棋で桂馬を打ったりしないで, 歩ばっかり打ち込むようなやり方だ.

車輌隊に元来た道を引き返せとな. 現場を知らない本部の指示とか…… 情報は最新なのか?

やっと車輌隊を引き返させるのか. 立て籠ってる人たちの救援がすぐには不可能になった. 無駄撃ちを避けろ, という時点で負けている……

え, 助けに行った 2 人がデルタ? そしてゴードンがやられるとか……

第 10 山岳師団という手があったのかよ……

なぜデルタの彼 (フート) は徒歩で移動, という決断をしたのか?

さっきのしつこく現場に行こうとしたのはサンダーソンか.

静かな祈りの時間が不気味.

スミス…… 助けに行って撃たれるのは……

チョーク 4 か…… 話の中心なだけなのか, 未熟なのか……

さて夜がやってくる.

そもそも要人を押さえれば戦闘が終わるようなものだったのか?

街の制圧を目指すのか?? この人数差で?

あ, 寝なきゃ. 俺のこの作業がデスマっぽくなってる.

結局スティール大佐が正しかったのか.

レンジャーの意地で救援拒否とか……

さらに一人も残さず, の大将……

最初から国連軍入れとけよ……

退職しました

昨日が最終出社日で3週間ほど有休を使い人生の夏休みに入ります. まだ雇用関係はあるので NEET じゃないですよ? NEET 状態ですけどね.

一般的には元の会社がどーとか, 新しい会社がどーとか書いたりするんでしょうが書きません. 前にいた会社や部署にも良いところはあるし, 移る理由もすごく個人的なことなのでそんな視点で書いても FUD になるだけです. 要はかっこ悪いので書きません.

経緯

なのでどんな経緯で退職に至ったかの流れを話します.

まず, 全ての始まりは「 Hadoopソースコードリーディング第3回 」. @shot6 さん主催, @kkawamura さん会場提供の, Hadoop について勉強する会. ちなみにタイトルに「ソースコードリーディング」と付いていますが, この会ではソースコードは登場しませんでした. (その後もほとんど出ることが無いという不思議な感じでした.)

当時の Twilog を見返すと, 右も左も分かっておらずポカーンとしてる感じが伝わってきます.

その次の 第 4 回 では Twilog のログ が増えています. 勉強会の雰囲気にも慣れ, 内容も少しずつですが理解し始めたからだと思います.

ここらへんから段々と勉強会中継 bot のようになり, そのつぶやきを勉強会 bot としての先輩である yutuki_r さんに RT されていったこともあり, follower が増えてきました. follower が増えると, ふとつぶやいたことにも反応をもらえることがあり, どんどん Twitter でのグラフ構造が広がっていきました.

そして, もともと人に数学を説明するのが好きだったのもあり 第 5 回 の後には [algorithm][Dijkstra] 文系 Hadooper でも分かる Dijkstra アルゴリズム というブログエントリを書き, 今までの記事に比べるとかなりの反響をもらいました. それまでは特に目的も無く, 自分のメモのようなものしか書いていなかったので, 誰かのために書くというのは初めてだったかもしれません. また第 5 回の様子から, この業界に大学数学が分かる人が思った以上に居ないことが分かりました. それはブログの記事の反響からも読み取れました.

これ以降も「分散」というキーワードで勉強会に出たり, Twitter 上でやり取りすることで転職への流れにつながっていきました. この勉強会に私を誘ってくれた, 旧部署が誇る日本語の文章を解し, リンク先の内容も解析し, 光速な公式 RT をすることで follower の TimeLine を潤している RT bot @yutuki_r さんにすごく感謝しています. (あ, ホントは部署の先輩ですよ. 人間として実装されてますよ.) そしてなによりこんなダメ人間に場を用意し, 声を掛けてくれた QB...じゃなくて @okachimachiorz さんに感謝します. (ダメ人間ぶりについてはまたどこかで.)

一技術者として

ここまでは分散処理の話でしたが, ここからはそれとはまた別の OSS コミュニティのような雰囲気のつながりの話をします.

まず, こちらの発端は @gnue さんが開いた 『ガベージコレクションのアルゴリズムと実装』読書会@関東. GC という, アルゴリズムの性能がプログラミング言語の性能に直結する話に強い興味があり, @nari3 さん, 相川さん, 竹内先生の本の読書会に参加しました.

なんでこの会に参加したかは忘れましたが, 大学院のときのゼミのような雰囲気を感じ取り, そこに惹かれて参加したんだと思います.

この勉強会にはそれはそれは濃い人達 @shinh さんとか @isoparametric さんとか @pi8027 さんとか @melponn さんとか @finalfusion さんとか, 主催の @gnue さんとかが参加されており, すごく刺激になりました. もちろん他の方々も総じてレベルは高かったです. ここで名前を挙げたのは, その中でもまだやり取りをしていたり, キャラが立っていたりした人達です :)

この濃くレベルの高い勉強会を知ってしまったために勉強会にハマってしまい, Twitter で興味のある勉強会を見付けては参加していきました.

その中でコミュニティや会社を越えた技術者どうしのつながりが構築され, FOSS の空気のようなものを強く感じるようになりました. その空気は言葉にはしづらいのですが, とにかく会社の中とは違う空気でした.

その後, 自分でも勉強会を開くなどしていき, どっぷりハマっていきました.

Python

その勉強会の中でも Python との出会いは今の自分に大きく影響しています. InfoTalk という AIIT で毎月やっている勉強会で, エキスパートPythonプログラミング の訳者4人のうち2人 @methane さんと @shibukawa さんが発表されるというので InfoTalk#21: Python Summer に行きました. (仕事で Jython を使ったこと Python 自体には触れてはいました. 今考えると筋が悪いし, レベルも低いですが.)

この本は気になっていたのでさっそく購入し, 懇親会にて @t2y さん含め4人中3人のサインをいただけました. アイドルなどにハマったことはないので, 誰かのサインを求めたのはこれが初めてでした. お願いする手が震えていたのをよく覚えています.

4人中3人まで集めたので後は1人, 師匠の @shimizukawa さんのサインが足りません. どうもこの本の読書会をやっており, そこに行けばサインをもらえるだろうと考え エキスパートPythonプログラミング読書会03 に参加しました. 01, 02 でやった内容は簡単な文法なので途中からでも大丈夫だろうと, サイン目当てで飛び込んでみました. 本も面白いし, @shimizukawa さんの話も実務に沿った内容で, 単なる理想論以上のものが聞ける会だったので, その後はほぼ全部の回に出てぎゃーぎゃー言ってます. (継続中) それは http://togetter.com/t/expertpython ここらへんの togetter を見てもらえば分かると思います. 内容まとめ & 疑問投げ bot と化しています.

また読書会03の懇親会では InfoTalk でサインをいただいた @t2y さん, 世界の @tk0miya さん, @shimizukawa さんという, 今振り返るとすごく濃いメンバーに囲まれ楽しく会話をしビールを飲んできました.

この流れのまま Python にどんどんのめり込んでいき, Pythonista の方々と交流を広げ深めたり, CPython 3.2 ソースコードリーディング <http://partake.in/events/4fbc22d9-67ad-4c2e-a5e7-01e05c6eb04c> を開催したりしていきました. (他にも色々やってますが, きりが無いので省略.)

まとめっぽいもの

こんなふうに主に人との出会いを通してこの数年で自分が変わっていって, その結果転職という道を選び, その先へ進もうとしているのだと思います.

今振り返ってみて, これが1年4ヶ月ほどの期間の出来事だったことに正直驚いています. 自分も変わり, 周囲とのつながりも変わり, 周囲からの評価も変わり, すごく不思議な気持ちです. 人と出会うということはそういう変化を伴うものなんだと思います. (もちろん何かをアウトプットして周囲に情報を与えていくことは前提ですよ.)

気持ちとしては, 同期と話しててふと口から出た「卒業」という表現がピッタリ来ます. 「私の戦場はここじゃない」というセリフがピッタリきます.

変わったことが良かったかどうかは5年から10年後の評価を待たないといけないですが, 私に変化をもたらし, 前に進めてくれた人達みんなに感謝します. (これを読んでるあなたですよ, あなた.)

次の会社は知ってる人は知っていますが (バレバレですね^-^;), またそのとき記事を書きます.

まずは3週間の人生の夏休みを楽しもうと思います. 娯楽的にも数学的にもプログラミング的にも. なにより家族との時間を大切に.

素因数分解の暗算高速化

誰の役に立つのか, 何の役に立つのか良く分からないが, 中学生くらいのときから数字を見るたびに素因数分解に挑んできた俺が使っている, 暗算で素因数分解をする方法を紹介します.

方針

簡単に計算できるように, 1桁の掛け算と2桁の足し算くらいしか使わないことにします.

11で割る

まず, 一番簡単な11から.

11 = 10 + 1 を利用して, 11の倍数をどんどん引いていきます. 残りが0になったら11の倍数, そうでなかったら11の倍数でない, と分かります.

具体例

135 から始めます.

  1. 135 を 13 と 5 に分解.
  2. 13 - 5 を計算して 8.
  3. 11 で割れないので終了.

簡単ですね.

7で割る

7 * 3 = 21 を利用します.

具体例

1113 から始めます.

  1. 1113 を 111 と 3 に分解.
  2. 111 - 3 * 2 = 105.
  3. 105 を 10 と 5 に分解.
  4. 10 - 5 * 2 = 0. よって7で割り切れる.

色んな数で割る

せっかくなので, 41 くらいまでは揃えてみましょう. そうしておけば, 42^2 = 1764 までの数に出会ったときに素因数分解で困ることは無いです(誰得

3で割る

各桁の数字を足す. 有名なのですぐ分かる.

5で割る

下1桁見れ.

7で割る

既出

11で割る

既出

13で割る

13 * 3 = 39 を利用して,

  1. 下1桁と上の残りに分解
  2. 上の残りに下1桁の4倍を足す

で, 13で割った余りを変えずに数を小さくできる.

17で割る

17 * 3 = 51 を利用して, 下1桁の5倍を上の残りから引けば良い.

19で割る

下1桁の2倍を上の残りに足せば良い.

23で割る

23 * 3 = 69 なので, 下1桁の7倍を上の残りに足す.

29で割る

3倍を足す.

31で割る

3倍を引く.

37で割る

37 * 3 = 111 なので, 11倍を引く. 37の倍数で2桁のものは, 37 と 74 しかないので覚える.

41で割る

4倍を引く.

まとめ

非常に誰得なエントリですが, こういうネタが好きな人が居れば嬉しいです. というか変態です.

43 は素直にやると13倍を足さなきゃいけないので面倒です. 誰かもっと良い方法教えて.

それでは.

Google Code Jam 2011 反省

総括

A -> C -> B の順に解いていった. D はちゃんと読んでないけど, 読んですぐ解けるのを選んでいった.

問題読むのにも時間かかるのでこの方針は間違ってないはず.

Problem A

順調に解け問題無し. 細かい計算をもっと速く実装できるように鍛錬.

Problem C

英語の読み間違いにより時間をロス. 英語をすらすらと読めるようになろう.

素数がらみの問題だと分かったが, 素数生成で手間取る. こういうのは予めメモリサイズや速度を考慮したライブラリを自分で作っておくべき. 去年と同じく Big の方でメモリサイズを考えずにプログラムを走らせ, swap しまくりで遅くなり expired. 無念.

終わってから大きい方の素数について無駄な計算をしていることに気付く. 枝刈りの感覚重要.

Problem B

総当たりっぽかったのでいったん避けたが, やっぱり総当たりしか方法が無さそう. 最初から解けば良かった.

Python で解いていたが, debug に手間取り時間切れ.

追記

他の人のつぶやきを見ていて気付いたこと.

Problem B で総和を何度も求めているが, そこのコスト計算をしてなかった. 範囲を変えて総和を求める場合のチューニング方法を知っておくべき. 先頭からの和を取って事前処理をしておけば, 部分的な総和は O(1) で求まる.