けんぼうは留年生

ノンジャンルで何か書きたくなった時に書く感じ

電通大の休み方と辞め方の話

UEC Advent Calendar 2015 4日目
本来留年はしない方が良いし休学もしない方が良いし退学なんて絶対したくないものだが、したくないことでもせざるを得ない場合があるのが人生。せざるを得なくなってしまった電通大生に向けて今日は少し書いてみようと思う。

続きを読む

パスワードを作るやつを作った話

GitHub - kembo/password_generator_kembo: パスワード作るやつ
http://kembo-net.github.io/password_generator_kembo/javascript/
一年くらい前の記事で語った「ハッシュを使ってパスワードを作る」って奴javascriptで作ってGitHubに上げてみた。
GitHubってそのままWebに公開出来るんだねー。便利だねー。

続きを読む

何よりも大きな話をしよう(無限,超限順序数の話)

 僕は何度か色々なところで巨大数の話をしてきたと思うが、今日はちょっと趣向を変えて有限ではなく無限の数の話をしようと思う。「無限」の捉え方は色々あるのだが、今回は以前の記事でちょっとだけ触れた「超限順序数」というものについて語りたいと思う。

順序数とは

 そもそも「数とは何ぞや」という話から始まる。数について色々な説明の仕方があるとは思うが、その中でペアノさんが導き出した自然数に対する根源的な公理が「ペアノの公理」だ。ペアノの公理の詳しい内容については他のサイトにお任せするとして、一番重要なのは以下の2点である。

  • 最初の数(0でも1でも)がある
  • どの数にも「次の数」がある

 「何であるか」という問いに対し最低限の要件のみを与え「そのように振る舞うものがそれである」と言ってしまうのが「公理」だ。曖昧な言葉の意味へ言及することを避けるためだ。
 要は「最初の数」と「次の数」さえ定義されればそれは数(自然数)と呼ぶことが出来るということだ。例えば関数型プログラミングをかじったり舐めたりしたことのある人ならチャーチ数という言葉に聞き覚えがあるはずだ。それもペアノの公理を満たす数の定義の一種だ。
 今回は集合を使ってこの「最初の数」と「次の数」を定義する。これが「順序数」である。

 式だけだと分かりにくかろう。実際にこれを元に1,2,3,……を表そうとするとこうなる。

  • 1=0\cup\{0\}=\{\}\cup\{0\}=\{0\}=\{\emptyset\}
  • 2=1\cup\{1\}=\{0\}\cup\{1\}=\{0, 1\}=\{\emptyset,\{\emptyset\}\}
  • 3=2\cup\{2\}=\{0,1\}\cup\{2\}=\{0, 1, 2\}=\{\emptyset,\{\emptyset\},\{\emptyset,\{\emptyset\}\}\}

 要するに0は空っぽの集合で、それ以降は自分の直前までの数の集合ということになる。こう定義すると数の大小関係の定義がやりやすく厳密になる。ある数はその数の直前までの数を全て含んでいるので、含んでいる方が大きくて含まれている方が小さいのだ。

  • a \gt b \Leftrightarrow a \ni b

 ではここで「自然数全体の集合」というものを考えてみよう。どの自然数も「自然数全体の集合」に含まれているので、自然数全体の集合」を順序数と見なすとこれはどの自然数よりも大きいということになる。

  • \omega = \{0,1,2,3,\dots\}
  • 自然数nについて n \in \omega \to n \lt \omega

 このωのように有限ではない順序数のことを「超限順序数」と呼ぶ。ところで、このωは自然数の集合であるから、自然数以外の余計な物は含んでいない。故に「ちょうどピッタリ自然数より大きい数」だと言える。「ωより小さくて自然数より大きい」数は存在しないということだ。

超限順序数ωとは

 簡単にまとめておこう。

  • 「超限順序数」はどんな自然数よりも大きい数
  • ωはどの自然数よりも大きい超限順序数の一種。
  • 自然数よりも大きくてωより小さい数は無い。

超限順序数を足し算してみよう

 ω+1を計算してみよう。さっきの定義を思い出せばすぐ出来る。

  • \omega + 1 = \omega \cup \{\omega\} = \{0,1,2,3,\dots,\omega\}

 このようにωには前の数ω-1は無いが次の数ω+1はちゃんとある。では今度は2を足してみよう。集合での表記は面倒臭いので以後割愛する。

  • \omega + 2 = (\omega + 1) + 1 = \omega + 2

 最初の定義をもう一度思い出してほしい。定義にあるのはsuc即ち+1の演算だけだった。だから+2とは+1を2回繰り返すことだし、+nとは+1をn回繰り返すことになる。「何を当たり前のことを」と思うかもしれないが、そういう細かいことを気にしていかないと次の演算を理解できない。

  • 1 + \omega = \omega

 さてゆっくりこの一見頭のおかしい式について考えてみよう。+nが+1をn回繰り返すことならば、+ωは+1をω回繰り返すことになるだろう。
1+\omega = 1 \overrightarrow{+1+1+1\dots}^{永遠に続く}
 いきなりω回+1を繰り返すのはちょっと無理があるので、ゆっくりωに近づいていこう。最初はこうなる。
1+1=2
2+1=3
 これを自然数n回繰り返してるとこうなる。
n+1
 nが自然数ならば当然n+1も自然数だ。そしてこのnが自然数の限界を突破するまでこの作業は続く。逆に言うと自然数の壁を突破する直前までは常に自然数だ。つまりn回目の+1でωになっちゃったりはしないので、1+ωがωより大きくなるのは不可能なのだ。数式で表現するとこう。

  • 1+n \lt \omega \Rightarrow 1+\omega \leq \omega

 1+\omegaが有限なはずもないので必然的に1+\omega = \omegaとなるわけだ。
 要するにωとは「自然数を全て数え上げる」という不可能なはずの動作をやってのけるバグ技みたいなものだ。自然数は無限にあるのでちょっとやそっと途中から数え始めたくらいでωを超えられるわけではない。
 じゃあ+ωしたものは全部ωになってしまうのだろうか? そうではない。ωにならωを足すことで値を増やせる。

  • \omega +1\to\omega +2\to\dots\to\omega + \omega

 ω+nだけで普通の自然数と同じだけ続いているので、その限界を超えることでより大きな 超限順序数ω+ωを練成できる。

超限順序数を掛け算してみよう(序章)

さすがに長くなってきたので、この辺で終わりにしよう。最後に少しだけ掛け算を定義してみる。

  • \omega + \omega = \omega \cdot 2

 実に単純な話だ。ωを2個足してるのだからωかける2、それだけだ。次回は掛け算でも前後を交換出来ないこと、そしてもっと不思議な掛け算やさらに複雑なべき乗について扱っていこうと思う。
 そんな感じで。

*1:suc(x)とは「xの次の数」即ち「x+1」という意味になる。

買いましたPebble Watch

f:id:kemboorg:20150528160805j:plain
やったぜ✌('ω')✌

何これ?

 所謂スマートウォッチです。ディスプレイが通常の液晶ではなく省電力なメモリ液晶と呼ばれる代物で、他の同様の商品に比べると「明るい場所でも見やすい」「画面は常時表示しっぱなし」「電池が良く保つ」というメリットがあります。

日本語化

 デフォルトだと英語です。メニューが英語なのは良いんですが、通知の日本語を表示出来ないのは超困ります。ので、有志の方が非公式で日本語言語パックを作ってくださっているのでこれを利用しました。
Pebble 日本語言語パック / Pebble Japanese language pack
 作ったのが日本語圏の方ではないというのがまた驚いた。

通知

 スマホに来る通知は大体pebbleにも飛ばせる模様。今はGMailTwitterのリプライをpebbleに飛ばしてるのですが、全てのメール通知が飛んで来てしまうのはちょっとどうにかしたい。スマホの通知はメインタブのメールしか通知しないのになぁ。
 pebble音は出ないんですが、時計がブルっと来ると結構気づきます。僕は自転車移動が多いんですが、信号待ちのタイミングとかでチラッとメール確認とか出来るの超便利ですね。スマホを取り出すまでもないちょっとした情報の確認にはお役立ちです。

時計

 他の一般的な"スマートウォッチ"ってボタンを押して液晶つけないといけないんですよね。その反面デフォルトで画面つきっぱなしのpebbleは腕時計として要をなしています。ただ、解像度は低いのでアナログな時計を表示したい時は針が太めのものを選ばないと見づらいですね。僕はデジタル表示にしてます。時計の種類は本当に追えないほど無数にありますし、自分でも作れます。僕もシドニアの騎士風とか作ってみますかね。

アプリ

 勿論時計以外にも色々アプリがあります。メモを表示してくれたりだとか、サイクルコンピューターの代わりになる奴とか、万歩計とか、睡眠管理とかその他諸々……。とは言え所詮は時計。画面は狭くボタンの数も少ないのであくまでスマホの補助の範疇を超えない程度にしておかないと却って使いづらいです。まだ買ったばかりなんでしばらく使ってみて良さそうなのあればレビューします。後javascriptで作れるらしいので僕も何かしら作ってみたいですね。

ゲーム

 当然ゲームも有ります。ただ、あの小さい画面と少ないボタンですから碌なゲームは出来ません。テトリスとか入れてみましたが、大抵のゲームは苦痛でしか無いです。
 そんな中でちょっと面白そうかな?と思ったのがこのゲーム。forums.getpebble.com
 放置してると一定時間でアイテムを拾ったりモンスターに遭遇したりする。その都度選択肢を選んでRPGっぽくダンジョンを攻略していくゲームらしい。まだ全然進めてないから「面白い」とは言えないけど、こういうデバイスだからやはり放置系のゲームが合ってると思うんだ。皆の評価は高いっぽい。

電池

 めっちゃ保つらしいです。一週間くらいイケるとか。そうは言ってもスマホの方が保たなきゃ意味無いんだよなぁ。まぁスマホが落ちても多分時計としての用はなすはずだし。

その他

 防水とかも完璧らしいです。プールに飛び込んでも良いらしいから風呂とか大抵の場面は凌げそう。その反面端子が磁石でくっつくタイプだったりします。まぁ充電そんなにいらなさそうだから大丈夫でしょ。
 デザインは黒だと黒すぎたし白は好みじゃなかったから赤を選んだけどやっぱりあればオレンジが良かったとは今でも思ってる。でもまぁ赤も悪く無いです。
 後軽いですね。この前に使ってた腕時計が金属製でズッシリ来るものだったので、軽さが際立ちます。

展望

 今はスマートフォンと組み合わせてるんですが、これタブレットと合わせた方が強いんじゃないですかね? こいつのお陰でスマホを取り出す頻度は下がりそうですから、ちょっと取り出しづらいタブレットでも良さそうな気がするんです。これ単体だと弱いですからやはり親機の電池の保ちは重要なわけで、そうすると大きいタブレットの方がバッテリー面でも有利なんじゃないかと考えてます。丁度7月に更新月なんで何か考えます。
 後さっきも書いたけどアプリ何か作りたいですね。パソコンやスマホみたいなリッチな環境で動かすプログラムも良いけど、こういう小さな世界でごにょごにょするのちょっとテンション上がる。


総論としては「まだ1日も使ってないから何とも言えないけど今のところ良い感じ」です。

だから僕は「嫁」と呼ばない

f:id:kemboorg:20080608004854j:plain
 そう、鬼太郎(5期)のネコ娘です。初めて見たその日からずっと僕にとっての1番なわけですが、今日は彼女の話ではないです。タイトルの通り僕はネコ娘を「嫁」とは呼びません。その事について語ります。正直書くのをためらうレベルで気持ち悪くて恥ずかしいのだけれども、それ以上にこれは一度はっきりさせておかなければならないと考えここに記します。

俺の嫁」はオナニーだ

 架空のキャラクターに対して「俺の嫁」という表現――最近だと単に「嫁」と呼ぶことの方が多いですが――をよく見かけます。嫁と呼ぶからには「愛し"合う"」必要があるわけですが*1、作品や画面の中からこちらを愛してくれるわけではありませんから(ギャルゲとかラブプラスの類は除く)、それはあくまで妄想の世界で繰り広げられるおままごとに過ぎません。自分の手に人形を被せてそれと愛を語り合ってるような物――要はオナニーです。別にオナニーは悪いことではありません。むしろオナニーの対象に非実在キャラクターを持ってくるのはむしろ推奨すべきことでしょう。実在の人物でこれを始めた場合下手すると警察沙汰になりますからね。

ネコ娘は実在しない

 これは事実です。僕がいくら一生を費やして妖怪横丁探したってそんな物出て来やしないんです。悲しいことに僕がネコ娘と出会える可能性は限りなく0なんです。

でも、ネコ娘は"いる"

 彼女がこの世界にいないということと彼女が"いる"ということは矛盾しません。こちらの世界から直接干渉することが出来ないだけでネコ娘の"いる"世界は"ある"んです。「そんなのあるとも無いとも言えないんだから悪魔の証明だろ」と言われてしまうとそうなんですが、"いる""ある"と言うからにはそれなりの根拠があるんです。

僕は本当に"いる"のか

 主観の話をします。僕は自分が真にこの世界に"いる"とは思っていません。僕はこの世界の表面にへばりついて五感と言う名の節穴からこの世界を覗きこんでいるだけです。もしかしたら節穴の向こうに広がっているのは本物の世界じゃなくて誰かが作った偽物かもしれないけど、僕はあくまで節穴から覗いてるに過ぎないのでその区別は付けられません。でも、少なくとも僕にとってはこの節穴が全てなわけですから僕は多分ここに"いる"んだと思って生活しています。

あなたは本当に"いる"のか

 さっきも言ったように節穴を覗いているだけなので、もしかしたら僕が目の前で話をしている相手も確実に存在しているとは言い切れません。でも、区別出来ないのだから疑ってもキリがないので大体"いる"と思って暮らします。じゃあどんな時に"いる"と感じるのでしょうか。

心の中に写った虚像のその向こうに見えない"何か"

 僕は他者を直接捉えたり理解したりすることは出来ません。でも、その人と繰り返し接していれば「この人はこういう感じ」という虚像が心の中に出来上がってきます。そして、その虚像の向こうに見えそうで見えない"何か"又は本体が"いる"という感覚の正体なのだと考えています。どこまで正確な虚像を描いてもそれはあくまで虚像であってその人本体を捉えられるわけではありません。だから結局「虚像の向こうに何となくあるような気がする"何か"」が"いる"の根拠になるしかないのです。

だから、ネコ娘も"いる"

 ネコ娘は僕の五感という節穴の更にその向こうにあるテレビという節穴の中に観測された存在です。僕は繰り返しネコ娘を観測しましたし、僕の心にはネコ娘の虚像があるわけです。その虚像の中に見えそうで見えない"何か"を見出すことで彼女は確かに"いる"のだと僕は確信するわけです。
 鬼太郎の世界も現実の世界も同じ節穴の向こうです。この世界に実在している人間もどこか別の世界に実在している者も、同じく節穴の向こうから自分の心に虚像を作る存在です。虚像の向こうに実体があるような気がするのなら、それは対象がどこの世界にいようが関わらず"いる"のです。

"いる"人を勝手に嫁には出来ない

 というわけでネコ娘はこの世界には実在していなくても、僕にとっては"いる"のだということがお分かりいただけたかと思います。彼女は僕の中の妄想の産物ではなく確かにどこかにいる他人であって、他人の意思を勝手に捻じ曲げるような真似は許されません。逆に言えばネコ娘を「嫁」呼ばわりすることは即ち彼女の存在を自分の中に閉じ込めてしまうことであり、彼女を"いない"ものにしてしまうことになるんですよ。

だから僕は「嫁」と呼ばない

おしまい。
f:id:kemboorg:20081221092419j:plain

*1:そこまで深い意味は無く単にスラングとして利用する場合も多いです

きっと!きっとやるから!~Kitコマンドの仕様~

 Kitコマンドについては昨日書いたのですが、深夜テンションに任せて適当に書いたものだったから内容に不満があったのと、とりあえず意図した動きをするようになった気がするのでもう一度記事として書きなおして投稿します。

https://github.com/kembo-net/Kit
 KitコマンドはGitコマンドを拡張し、プロジェクトをより進めやすくするための物です。従来のGitのように作業後にメッセージを書くのではなく、事前にこれを宣言することで現状把握をしやすくします。

インストール方法

 インストーラーはまだ出来ていません。自分でコンパイルし、~/binの下にkitというファイル名にして突っ込んで下さい。

コマンド詳細

initコマンド

$ kit init
$ kit init project_name

 initコマンドはkitを利用するための準備をするコマンドです。もし、あなたがGitリポジトリの中にいるなら.kitstackというファイルを生成します。もし、Gitリポジトリにいなければこのコマンドはgit initと同じ動作をしてからその作ったリポジトリの中に.kitstackを用意します。

doコマンド

$ kit do "commit message"
$ kit do after "commit message"
$ kit do after [0-9]* "commit message"
$ kit do [0-9]* "commit message"

 このコマンドがKitコマンドの中核となるものです。doの後ろに付けたコミットメッセージを.kitstackに積み上げます。stackと書かれているように通常は予定は後に宣言されたものを先に実行するものとして上に予定を積んでいきますが、afterオプションを付けた場合は逆に下に挿入されます。また番号を指定した場合は一番上を0として数えた番目の所に挿入します。予定が追加されたことはgitに記録されます。

doneコマンド

$ kit done [0-9]* (file_name1 file_name2 ...)

 doneコマンドはdoの次に大切なコマンドです。doによって.kitstackに積まれた予定を実行します。通常は一番上の予定を全てのファイルを対象にコミットします。番号を指定した場合はその番号の予定を、ファイル名を指定した場合は(複数可)そのファイルだけを対象に実行します。

removeコマンド

$ kit remove [0-9]*

 .kitstackに積んだ予定を削除するコマンドです。数のオプションを付けなければ一番上の予定を、付けた場合はその番号の予定を削除します。削除したことはgitに記録されます。

editコマンド

$ kit edit [0-9]* "commit message"

 .kitstackに積んだ予定を編集するコマンドです。数のオプションを付けなければ一番上の予定を、付けた場合はその番号の予定を編集します。編集したことはgitに記録されます。

now,listコマンド

$ kit now
$ kit list

 これらは現状を確認するためのコマンドです。nowは.kitstackの一番上の予定を表示します。listは全ての予定をインデックス付きで表示します。他のコマンドで番号を指定する場合listコマンドでどの予定がどの番号だったか確認しておくと良いでしょう。

-nオプション

 予定を追加したり削除したりした場合は標準ではそのことが記録されますが、記録したくない場合は-nをコマンドの直後に付けることで回避出来ます。

その他のコマンド

 その他ここに書かれていないコマンドが実行された場合kitコマンドはgitコマンドのエイリアスとして動作します。