日記
大井町と大手町とか青梅と青海とか紛らわしすぎる。
今日はお弁当を作る気があまり起きない。まぁいっか。
__ FreeMindはやっぱりマインドマップなんかじゃない。これじゃただの「きれいな箇条書き」です。
こういう通常の文章という1次元的なフォーマットがあり、箇条書き文書というツリー状のフォーマットがあり、そしてマインドマップという右脳を大いに使ったフォーマットがあって、3つそれぞれ特色が異なっているから価値があると思うのです。マインドマップも基本はツリー状に発展していきますが、ツリー状に制約されてしまうと自由な発想を妨げます。頭の中にツリー状に整理された状態でイメージがあるのなら箇条書きで十分なわけで、そうではないからマインドマップが重要なわけです。脳の中のネットワーク状のアイデアをネットワーク状のまま紙に書き出して全体を観察できるようにした上で、それを整理することで初めてツリー状になるんです。
絵を描いたり変なところから線を繋いだりできないマインドマップなんてマインドマップじゃない。
__ もうすぐ9時。 明日は研究室のミーティングのはずだったけどキャンセルになったので赤坂某所のSICP勉強会に行ってきます。かなり久しぶりな気がします。
おそらく10年(早ければ5年)以内にローカルディスクというものは絶滅し、すべてどこかサーバ上のデータを扱うことになるだろうと思うわけだ。
HDDが1GBあたり31円のこの時代でも1GBあたり7000円のメモリは売れてますよね。10年後でもローカルディスクの方がネット接続より早いでしょうから絶滅はしないでしょう。「ベストエフォートで100Mbps」と言っている回線が、本当に100Mbps出るようになったらだいたいUSB1.1くらいの速度ですかね。その頃にはUSB1.1は絶滅しているかも知れません。
でもファイルをオンラインに置く流れはもうかなり強い物になってきているようです。今日聞いていたBootcamp: Reportによれば25GBのオンラインストレージが無料で使えたりするそうですし、以前はてなでバックアップの取り方をサーベイしたときも「Yahooブリーフケースを使う」とか「GMail宛にファイル添付で送る」とかのオンライン保存をしている人が結構多くて驚きました。
__ IBMには近藤科学、実売9万円のホビーロボット「KHR-2HV」があってみんなで側転させて遊んでるんだってさ(誇張)
__ K&Rがバフェットの1000分の1の価値であることに皆さん不満げな様子ですな(笑)
__ 朝日新聞のasahi.com: ウィニー開発者に懲役1年求刑 京都地裁。 とりあえず「『懲役1年』って執行猶予はつかないの?」とか「なんで最終弁論(9月)の前に『懲役1年』とかニュースになってるの?」とか悩んでたのですけど、 「『ウィニー開発者に懲役1年求刑 京都地裁』ってタイトルなのに中身は『検察側は(中略)懲役1年を求刑した。』じゃん!釣り?」という結論に。 求刑とかそういう法律用語には詳しくないのでこういうことをされると困るなぁ。
__ なんかささださんが面白そうなことをやっているのでPythonで似たようなことをしてみました。
# -*- coding: cp932 -*-
import re, sets, copy
data = """
ONE
TWO
+FOUR
-----
SEVEN
"""
chars = re.findall("\w", data) # 文字だけ取り出す
chars = list(sets.Set(chars)) # uniq代わり
class Array(list):
def perm(self):
done = []
while self:
e = self.pop()
yield e, done + self
done.append(e)
def foo(data, candi = range(10), i = 0):
if candi == []:
try:
if eval(data.strip().replace("\n", "+")) == 0:
print data
except:
pass
else:
for (value, rest) in Array(candi).perm():
foo(data.replace(chars[i], str(value)), rest, i + 1)
from time import clock
start = clock()
chars.remove("E")
chars.remove("S")
data = data.replace("E", "0")
data = data.replace("S", "1")
foo(data, range(2, 10))
print clock() - start
#foo(data)
理論的にはfoo(data)だけで答えが出るはずなのだけども、時間がかかってしょうがないので枝刈りをせざるを得なくてchars.removeなんかをするハメに。でもこの枝刈りバージョンは6.3秒で答えが出ましたよ。枝刈り無しだとどれだけかかるんでしょうかねぇ。
それはさておきこのアルゴリズムのいやらしいところはpermutationとかそんな所じゃなくてもちろん
if eval(data.strip().replace("\n", "+")) == 0:
print data
なのです。筆算の横棒がハイフン5つでできているので正しい筆算、例えば
940 739 +8925 ----- 10604
の時に、eval(data.strip().replace("\n", "+"))である「940+ 739++8925+-----+10604」は0になるわけです。いやはや。
フィードバック
あれ、Python って再帰で書くのって一般的?
一般的なのかどうかはよく知らないですけど、僕はPython3.0でmapやreduceがなくなる予定なのを悲しんでいる口なので再帰呼び出しは大好きですよ~。
Rubyのブロック(?)と比較すると、関数の引数に無名関数を渡すようなことがしたい場合に「lambda x: x*2」なんていう「包む皮」のない構文を使わないといけなくて可読性が低いのと、lambda構文の中にはifとかを入れることができないのとで、かなり使い勝手が悪いです。そういうわけでRubyのブロックの中にブロックを使っているようなコードはPythonでは名前のついている関数にしたく、で名前つけたんだったら再起にしてしまいたくなるわけです。
> 10年後でもローカルディスクの方がネット接続より早いでしょうから絶滅はしないでしょう。
確かに、ローカルのほうが速いんですが、 10年たったら、実測10Gbpsくらいになっている可能性はあり、 それで帯域十分という判断になれば、 ネット接続になるんでは~??
> だいたいUSB1.1くらい
これって、USB2.0ですよね?
調べてみたらUSB1.1が12MbpsでUSB2.0が480Mbpsでした。
実測10Gbpsあれば確かに十分なので、データをローカルに置こうがリモートに置こうが大した差はなくなるかとは思います。それでローカルに置くよりもリモートに置く方が安いとか安全だとかであればリモートへの移行は進むと思います。でもやっぱりローカルのハードディスクは残ってそうな気がします。
10年経つと市販のパソコンが全部シンクライアント化していたりするんですかねぇ…。