ユニックス・セキュリティが 塀のうえ
ユニックス・セキュリティが おっこちた
王様の馬ぜんぶをあつめても
王様の家来みんなをあつめても
セキュリティを もとには戻せない
-- "The UNIX-HATERS Handbook" p. 251
を頻繁に使ってきたが、じつはunicode('なんか', 'euc-jp')
のほうがチョっと速く、さらに'なんか'.decode('euc-jp')
のほうが倍近く速いということを発見した。 なんだこりゃ。もっと速くに気づくんだった。import codecs decoder = codecs.getdecoder('euc-jp') decoder('なんか')[0]
なんでいきなりこんなコトをやりだしたかというと、 いま「Python で速度の限界に挑戦!」みたいなコードを書いているので…。
趣味ソフトウェアについてつづき。実際には、新山の場合は「作りたいから」作るんではなくて、
「使いたいから」ソフトウェアを作っていることが多いよな。
(ようするに自分が実生活で欲しいものしか作ってないワケだ…。)
これは料理にしても衣服にしてもそうだろうが、本当に自分に合ったものというのは、
最終的には自分で作るしかないんではないかという気がする。一般人にとっては。
ま、すんげー金持ちであれば人に頼んで作ってもらえるかもしれないけどさ。
そういえば日本では最近は「欲しいものは自分で作るべし」っていう兵庫標語を聞くのだろうか?
アメリカではいまだにこういう考え方がけっこうメジャーなのがエライと思うが、
だいたい新山の場合は「ソフトウェアは自分でなんとかするしかなかった」という時代に育ったので
こういう習慣がなんとなく身についたものの、今ではソフトウェアを自分で書く必要なんかない
からなあ。趣味でラジオを作る人がもう (ほとんど) いないのと同じように。
いやそれはホントか? MS にダマされてるだけじゃないのか?
こないだ日経かどっかのセキュリティ関連の記事を読んで思ったのだけど、 「あやしいメールは開かないように」とか「あやしいファイルはダブルクリックしないように」 とかいうアドバイスは、実はぜんぜんアドバイスになっていない。状況によっては、 あやしそうに見えるメールを開かねばならないときもあるのだ。 こういうときに何もつっこんだ説明ができず、ただ「ウイルスで個人情報流出!」などと 恐怖感を煽っているだけの「専門家」とゆーのは、ひじょーーに情けないし、おまけに罪深い。 結局のところ、こいつらはただユーザに責任をおしつけているダケじゃん。 そもそも大多数のユーザに「何かもうよくわからんから『はい』って押しちゃえ」と 思わせるような意味不明な設計がまずいんだよ。 ソフトウェアの世界では、OS やフレームワークの設計というのは国の法律を設計するのに似ている。 ある種の犯罪 (この場合は詐欺) が多発すれば、それは犯罪者も悪いのだが、そういう犯罪を容易に するような法制度というかシステムも悪いのだ。もし詐欺被害の相談窓口がいかにも お役所的で使いにくいものだったら、国民 (ユーザ) は面倒くさがってそんなところには行かないので 結果的に詐欺を野放しにしてしまっていることになる。MS はこの点では完全に有罪だ。でも、 これを見て見ぬフリしている (で、新機能だけはやたらと騒ぎたてる) 連中はどうなのよ? MS のアホな設計を肯定してしまうというのは、間接的に こういった犯罪を支援することにつながっているんではないか?
今年は、あのキチガイ的に暑かった一週間をのぞけば、だいたいオッケーな年だったな、と思う。 まあそんなこともあるさ。
timeit
というモジュールをみつけた。
$ python -m timeit '"".join( chr(i) for i in xrange(256) )'
1000 loops, best of 3: 333 usec per loop
$ python -m timeit 's=""' 'for i in xrange(256):' ' s+=chr(i)'
1000 loops, best of 3: 298 usec per loop
Python で文字列処理するときには、小さいループの速度がけっこう気になる。
たとえば新山がよくやってる HTML のメタ文字 (&, <, >, ") の
エスケープはどうするのが一番速いのか?
(" は通常はメタ文字じゃないが、属性値の中ではエスケープしないとダメなので
つねにエスケープしといたほうが安全だる)
from random import randrange
import re
P = re.compile(ur'["<>&]')
S = { u'&':u'&', u'"':u'"', u'<':u'<', u'>':u'>' }
T = { ord('&'):u'&', ord('"'):u'"', ord('<'):u'<', ord('>'):u'>' }
def a(s):
return P.sub(lambda m: S[m.group(0)], s)
def b(s):
return u''.join( S.get(c,c) for c in s )
def c(s):
return s.replace(u'&',u'&').replace(u'>',u'>').replace(u'<',u'<').replace(u'"',u'"')
def d(s):
return s.translate(T)
TEST = [ u''.join( unichr(randrange(32, 127)) for i in xrange(1000) )
for z in xrange(1000) ]
def t(f):
for s in TEST:
f(s)
return
from timeit import Timer
print Timer('t(a)', 'from __main__ import t,a,b,c,d').timeit(10)
print Timer('t(b)', 'from __main__ import t,a,b,c,d').timeit(10)
print Timer('t(c)', 'from __main__ import t,a,b,c,d').timeit(10)
print Timer('t(d)', 'from __main__ import t,a,b,c,d').timeit(10)
で、こいつを実行したところ、
となった。
結局 (ケッキョキ)、replace
がいちばん速かったことになる。
なお、unicode
の translate()
メソッドは
str
の translate()
メソッドとちがって、
1文字 → 複数文字の変換もできる。
には頭のおかしい人が多い
のか!!!!!!!!!!!! ?
どうしたも
こうしたも
ない。
>>> 'fungaa: %d' % x+1 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: cannot concatenate 'str' and 'int' objects
しかし、会社に入った人間がすべて視野が狭くなるかというと
そうでもないと思う。そういう人は、どのみち最初から狭かったのである。
世の中には合法的に視野を狭くするための仕組みがごまんとあるからなあ、
たとえば PhD とか。。。。。。。。
。。。。。。
趣味プログラミングで楽しいのは、このように「何を作るか」考えているときかもしれない。 それはちょうど旅行の行き先を考えているときのようなもんだ。 しかもプログラミングで重要なのは、今じゃ環境がそろってるので、 ハード上の制約さえなければほとんど作りたいもんは何でもつくれる。 ネットがあるから自分の知らない分野でも別にいい。 こういう無限 (に近い) 自由度っつうのはなかなか他ではないよなあ。 しかし周囲を見回してみると、実際にはつまらんものしか作ってない人が多い。 こういう状況でつまらんものしか作れないってのは 100% 自分のせいなんだけど。
大学への帰り道、ここに来ていたポーランド人の学生から、
PhD への入学を考えてるんだがアドバイスくれ、と言われたので、
いろいろと脅かしておく助言しておく。セキュリティに興味があるんだそうな。
ほう! ほう!
…相手が中国人の場合、最後の一言はかなり説得力があるらしい。 実際にはこの説明はひどくアナクロ的な誇張された見方だと思うし、 ここまでいったあとで新山は「でも最近は変わってきているよ」というようにしている。 でも細かいことを知らない外国人に簡単に説明しようと思ったら こういうステレオタイプを使うしかない。たぶんこれを聞いた外国人は 日本に対して「おそろしい国だ」という印象をもつだろう。 そしてその印象はたぶん正しい。政治とか経済とか、 そういう客観的な部分だけで日本を語ろうと思うとどうしてもそうなる。 けれど実際には新山はこういう客観的な枠組みでは決して現れない日本が好きなのだ。 生活水準や教育制度は新山の個人的な好みにはまったく関係がないということに、 昔のオレは気づいていなかったのである。 だが、「主観的な」日本のよさを英語でうまく説明する能力は今のオレにはない。
ちなみに、その後会話はこんなふうに続く:
じっさい、日本からの留学生に男が少ないのは、 保守的な人間にとって留学はリスクが大きすぎるからだと思う。 だからいまでも海外留学する男は、会社の金でハクをつけるための海外派遣を除けば みんなどこか「社会からはみだした奴」だと思われているし (まあ、新山個人については否定しませんが)、保守的な価値観での「成功」は 何だかんだいってもいまだにいい大学 (や大学院) を出て、 面接でいい子にして、会社に忠誠をつくすことによって得られるのだろう…。 もっともオレはそんな「成功」など興味ないが。かといってアメリカ的な 「一発当てて大金持ち / 有名人に!」的な「成功」にも興味がないんだよね。 まあ、この程度の選択肢しか考えられないようじゃ永遠にオトナにはなれないだろうよ。
ちなみに Wikipedia英語版によると 2003年時点で、東京にある主要企業の 83% が終身雇用制度を採用している と書かれているが、これのソースはどこなんだろ? まあいずれにせよ、メディアはウソばかりついている。
from termios import TIOCGWINSZ
from fcntl import ioctl
from struct import unpack
(lines, cols, _, _) = unpack('HHHH', ioctl(0, TIOCGWINSZ, '_'*8))
個人的には、信仰に「心の平安」を求める人はアブナイ、と思う。 そやつはあまりにも人間化しすぎている。 食べ物や睡眠で「心の平安」が得られる人のほうが、よっぽど好きだ。 ようするにオレが好きなのは家畜ってことだけど。新山も含めて。
朝方は雨がふっていた。 明日も雨らしい。
あっっっ!!! やべえ!!
クスクスを
一箱つくると
多すぎる
-- 新山えうすけ
file()
について、
だいぶ前に発見してそぬ後忘れ去っていたが
きょうふたたび発見してムカついたことを書いておく。
すでに存在する (バイナリ) ファイルを更新するには、
mode として 'r+'
を与えてやらねばだめなぬだ。
'w+'
や 'a+'
ではダメである。
fp = file('foo', 'w') # ファイルは truncate される。
fp = file('foo', 'w+') # 'w' と同じだが中間から read できる。
fp = file('foo', 'a') # read 不可。write は追記のみ。中間ぬバイトを書き換えようとすると
# 勝手にファイルぬ末尾に飛ばされる。(くそったれ)
fp = file('foo', 'a+') # 'a' と同じだが、(中間から) read できる。しかし中間ぬバイトを書き換えようとすると
# 勝手にファイルぬ末尾に飛ばされる。(くそったれ)
fp = file('foo', 'r+') # 唯一の「まともな」モード。中間の書き換え、追記も可能。
# しかしファイルの新規作成はできない。(くそったれ)
'w+'
や 'a+'
にはいったい何ぬ意味があるんだ?
これは open(2) よりもはるかにわかりにくい。
なお、新山はムカついている時は口をあまり開かずにしゃぶるぬで、 「の」を「ぬ」のように発音する傾向があるます。あと typo。
おむぐわとふろふるまおバーベキュう。(○MGW┬FЯ0F」mΑ〇Bβ9)
なんでここで「バーベキュう」なんだ?? 意味明瞭。
ところで… Google の時代に JARO のような審査はいったい誰がやるのだろうか。 まさか機械学習?? くふぇっっ (本当に連中の考えそうなことでこわい)
まあどのみちオレは広告をほとんど見ないんでドーでもいいけどね。
マダフッテルノ??
どうでもいいけど (どうでもよろ、) 「山廃仕込み」という文字列を見て、 山の中で廃人が酒をカックラってる図を想像してしまうのはオレだけだろうか。
どうでもいいけど (どうでもよろ、) 「カックラキン」って何語なんだろう。 タークラターと何か関係はあるのだろうか。
どうでもいいけど (どうでもよろ、)
ぼく、歯並び悪いんで。
そういえば英語のオレンジ (orange) の語源について、どっかでびっくりする話を読んだ。 もともとオレンジはスペイン語の naranja から来たもので 英語で "norange" として話されているうちに、「あ・のれんじ (a norange)」 →「あのれんじ (anorange)」 → 「あん・おれんじ (an orange)」だと思われるようになって an が離れてしまい orange となった! というのである。 ホントかどうか知らないが、これが本当だとしたらかなり笑える。
google://じ ょご−ん/ (?件)
あいかわらずどのページにも微塵としてこのキーワードは含まれてないが、 「日本語のページを検索」してるのに、なぜか 「選択された言語のページからは該当するページが見つかりませんでした。」 となっている (これもヘンな日本語)。 つまり、これらのページは日本語ですらないと??
ちなみに「じ ょご−ん」というのは、「ドカーン」のような意味でスズキが使ってた擬音である。 オレはこれが気に入ってるのだ。力点はなく、すべての音を平坦に発音する。さあご一緒に! じ ょご−ん!
おもしろいことに、なぜか日本人のつくる擬音はすべてカナ表記が可能である。 というか、カナ表記が可能だから擬音っていうのか? さあ
な~!!!! 1
新山はこういうテキトーーーなの結構好きなんだよね。 なにかエラい人が話す“講習会”ではなくて、みんなで集まって各自勝手に 雑談しながらガヤガヤやるだけ。センスの悪い (そして声の大きい) 奴がまじってると 最悪なんだけど、ある程度は言いだしっぺの Peter が仕切ってるから安心 (かれは長いあいだ nylug-talk でモデレータをやっていて、新山の尊敬する nylugger のひとりである。 でも「えらい人」というのとはちょっと雰囲気が違う)。 雰囲気としては試験前に集まって勉強してる学生の集団に近い。 ただし集まってんのは学生じゃなくてハゲた髭おやじが多いんだけど。 このあとどういう方向に進むのかはまだ未定。
途中で、だれかが「そういえば Python って誰が作ったんだ?」と尋きだし、 みんなそれぞれ「さあ? たしかイタリア人じゃなかったっけ?」 「いや、テキサスのやつだよ」とか勝手なことを言いあう。 あのー、さすがにテキサスじゃないと思うますが…。
でもアメリカ人ってみんなこんなもんだよ。 (インターンをしていた某社でも言われてたのだが、 「この会社はみんないいやつで、誰でもどんな質問にでも親切に答えてくれるが、 みんな違ったことを言う」んだと。べつにこの会社に限ったことじゃないと思う。)
Dijkstra は、すぐれたプログラマになるための資質として 「母国語が完璧にできること」を挙げたらしい。まあそれはそうだと思うが、 日本の国語の授業は「日本語の授業」ではない。ありゃ何か別のもんだ。 すくなくともこれくらいは教えろ! と思う:
ようするに「日本語」っていうのはひとくくりにできなくて、 多様性があるってとこがポイントだと思うのである。 こういうことは (自分が普段から喋っている言葉が“普通”だと思っている) 日本語ネイティブの人間に教えるからこそ意味があると思う。 言語というのはいつの時代でもつねに変化しているし、 地域的にも一枚岩でないし、各個人によっても違う。 つまり、コミニュケーションというのはいつも 「お前の言葉がそのまま通じると思ってんのが大間違いなんだヨウ! このバカヤロメ!!」 というところから始まる。誰もかれも一人として正確には同じ日本語を喋ってないし、 その必要もない (もしかすると他人には世界が違って見えているのかもしれない)、 という前提をまず認めたうえで、さあどうやって自分の意志を伝えるか? ってのが出発点でしょ。 この前提をわかってないやつがわかりにくい文章ばっかり書くんだよ。差別も助長されそうだし。
(追記: 国内の多様性さえ認められない連中が、海外と交流とかいってるのが笑わせる。)
まあ、世の中のお偉いさん (や NHK や言語処理屋) は こういう「統一された言語」という幻想がたぶん好きなんだろうね。コントロールしやすそうだし。 しかし言語の多様性というのはべつに主義でもなんでもなく、 観測された事実でしかない。自然言語は定まっていないことが特性なんで、 それはそういうものとして、なるべく目からウロコを落としてから使うしかないってことになる。
あとはプレゼンの練習とか、
生徒の間で文章の推敲合戦をすべきだと思う。
結局のところ「わかりやすい文章」を書くには、
「すんげ〜〜わかりにくい文章」を読まされないとわかんないと思うから。
しかしこんなことを言うと、国語の先生どもは絶対に
「国語は実学ではない…これは文章を通して生徒にゆたかな醸造情操を身につけさせるために云々」とか言うだろう。
ああそうですか。まあ、ここまでやると日本語というより「コミニュケーションの授業」って感じだけど。
古文や漢文は面白いのだけど (昔は嫌いだったが)、 あれも「古文」というひとつの確立された日本語文法があるかのように教えていてよくないよな。
べつに深い意味はない。
Document ID: f1daf45e695b9fe58b04dc58348e4edf
Yusuke Shinyama