2011-01-01から1年間の記事一覧

PCの寿命

はじめに PCの寿命は何で決まるのか、というのをちょっと考えてみる。そもそもPCの買い替え寿命を感じる所というのは何かと考えると、それは「動作の重さ」というのが一番大きいと思われる。PCの機械的寿命は巷の交換頻度と比べると割と長く、また割と容易に…

とっても遅延評価なPython3

はじめに Python2.x系は関数型言語としては、遅延評価が弱かったのだが、Python3から幾らかのBuilt-in Functionが強力な遅延評価機能を導入したのでちょっと見てみる。 filter Python2までは 文字列・タプル→そのまま それ以外→リスト を返していた(つまり…

補足:unique_ptrのパフォーマンスについて

C++

unique_ptrを使ったコードと使わないコードのアセンブリをgccに吐かせてみると、-O0の場合はunique_ptrを使うコードの方は関数呼び出しが1回余計に挟まることで、クリティカルなオーバヘッドになっている。一方gccで-O2を指定してアセンブリを吐かせると、un…

C++で大規模な配列追記のパフォーマンス

C++

はじめに @__boronium による 「じゃあC++はどうなの?」 という疑問にお答えするコーナー。元のPython版はhttp://d.hatena.ne.jp/ponkotuy/20111216/1324021461 でどうぞ。ちなみにg++4.6.1 -O2 -std=c++0xでコンパイル。 はじめる前に補足 微妙に間違った…

Pythonで大規模な配列のパフォーマンス(append編)

はじめに Pythonで大規模な追記を扱う時に、どの型を使うと早いのか、パフォーマンスを調べてみる。ちなみにPythonは3.2を使用。 list まずは定番のlist型 l = [1,2,3] for i in range(10**7): l.append(i) 5.7秒、1.6GB set 早いと評判のset型 s = set([1,2…

D言語で素数列を求めるコードを書いてみた

D

ことの由来 Haskellの練習がしたくて、Sphere Online Judgeで競技プログラミング始めてみたのである。関数型言語はどっちかというと競技プログラミングの方が強そうな気がしたので。初っ端から素数の問題にぶちあたり、Haskellで素数どうやって書いたもんか…

Mercurial Advent Calendar 2011 〜自鯖で公開レポジトリ〜

はじめに 私自身は、Mercurialを使い始めてだいたい1年ぐらいになる。元々は特に理由もなくSubversionを使っていたのだが、レポジトリを自鯖で公開したいと思うと色々不満が多く、乗り換えを決意した。Gitと比較検討した結果、まぁMercurialが一番手っ取り早…

D言語を始めてみた 〜ラベルすごい〜

D

D言語にはラベルという機能がある。 空文を含めて任意の文がラベル付け可能で、 goto文の飛び先とできます。 continue 文や break 文の飛び先ともなり得ます。 …えっ continue 文や break 文の飛び先ともなり得ます。 なんだってー!?!?という訳でbreak文…

「ぐへへお姉ちゃんパンツ何色」から始めるPythonクラス解説

はじめに とりあえずこれを読みましょう。http://b0r0nji.blogspot.com/2011/12/blog-post.html Python編 さて、ほむほむのパンツをPythonで実装するとこうなります。(ぽんこつさんはお姉ちゃんキャラ嫌いなのです) class Pants(object): def __init__(sel…

桜花あどべんとかれんだぁ(3日目) 〜桜花たんのここがこわい〜

はじめに 桜花たんはツイドルである。桜花たんはかわいい。真理である。しかしぽんこつさんは別のパラダイムを提供したい。可憐な薔薇には棘がある。桜花たんはこんなにもこわいのだと。 桜花たんのここがこわい その1 〜負けず嫌い〜 Event: jubeatを一緒に…

メモリの進化の話

私が愛読してる後藤さんが、次世代メモリの動向を纏めていた。http://pc.watch.impress.co.jp/docs/column/kaigai/20111107_488696.htmlナカナカ面白いと思ったので、幾らか思ったことを纏めておく。 メモリの進化 常々不思議だった訳だが、「どうしてメモリ…

Python importテクニック(発展版)

はじめに 前回のPython importテクニック見てて、 「ひょっとしたらこんなアホなimportできるんじゃね」 とか思ったので試してみる。 やったこと 前回importについて 「他の文と同じで、特別扱いしない」 という主旨の発言をした。ということは、実行時にimp…

Ubuntu11.10雑感

Ubuntu11.10(最終的にはXubuntu11.10になったが)入れてみたので、とりあえず纏めてみた。 Unityは糞(極めて主観的な表現が含まれております。ご了承下さい) 11.04では、UnityどころかGNOMEにもバグがあったので、アップデート回避して10.10を使い続けて…

Python3のsetter補足

おさらい 前に書いた記事で、python3で@hoge.setterを使って、 class Class: def __init__(self, a): self._a = a @property def a(self): return self._a @a.setter def a(self, v): if v < 20: self._a = v else: print("ERROR") if __name__ == "__main__…

Python importテクニック

Pythonのimportのここが凄い Pythonのimportは結構特殊というかフレキシブルな構造をしている。他の言語の類似機能だと必ず最初に宣言する必要があるが、Pythonの場合はそのような配慮は全く不要で、何処でも書けてしまう。また、書いた所でimport処理が実行…

SKKで麻雀用語辞書を作る

SKK

フリーで公開されている麻雀辞書が既にあるので、これをベースにSKK用に書き換えれば宜しい。http://idaemons.org/projects/mahjongdic/私はCannaの形式からSKK形式に変換するツールhttp://www.unixuser.org/~haruyama/software/canna2skk/を使って変換した…

propertyが使えない原因

propertyが使えない理由は、propertyが新スタイルのクラスを要求するからだと分かった。http://www.python.jp/doc/release/reference/datamodel.html#newstyle要約すると、Pythonは2.1から新クラスを導入したが、互換性維持の為、新クラスを利用する場合は、…

propertyが使えないだと!?

Pythonでpropertyを使ってみようと思って、大いにハマったのでメモ。 class Class: def __init__(self, a): self._a = a def get_a(self): return self._a def set_a(self, v): if v < 20: self._a = v else: print "ERROR" a = property(get_a, set_a) if _…

点と線分間の距離

会社で点と線分の距離を計算する必要があって、困っていたら、http://www.deqnotes.net/acmicpc/2d_geometry/linesに書いてあったので、Python風に書き換え。 def dot(p1, p2): return p1.real*p2.real + p1.imag*p2.imag def cross(p1, p2): return p1.real…

フレッツ・スポットがあまりにも時代遅れで残念な件について

はじめに フレッツ・スポットというサービスがある。まあ所謂公衆無線LANサービスである。リナカフェでインターネットしたいから、というのが動機で契約しようと思った。このサービスはフレッツ光使ってると210円で使えて安いんだが、色々罠があるよという話…

PythonのMeCabが残念過ぎる件について

はじめに Twitterの発言をベイズ分類器で解析しようかと、MeCabをインストールしてたら大いにムカついたのでメモ。 MeCabのここが残念 tagger = MeCab.Tagger("-Ochasen") node = tagger.parseToNode("PythonからMeCabの形態素解析機能を使ってみました。") …

pynotifyとdate.strptimeの複合バグ

バグの種類 pynotifyをimportしたコードで、datetime.strptimeで、文字列を解析すると発生するバグ。Junとかの月・曜日が該当する。 解決方法 localeの問題らしく、情報が中国語しか無かった。http://hi.baidu.com/esbat/blog/item/b520232d748ac93f359bf742…

gccgoの底力を見た

はじめに Go言語自体、文法は結構気に入ってたんだが、標準コンパイラの速度が割と残念だなーというのがFirstImpressionだった。という訳でgccgoに期待していた訳だが、今回使ってみたので結果を載せてみる。 gccgoのインストール これほど遅れた理由は、gcc…

Terminatter Hack

はじめに Terminatterそこそこ自信があるのだけど、あんまり流行ってないみたいなので、Terminatterのこんなところが凄いよーとか書いてみる。downloadは以下からどうぞ http://ponkotuy.com/hg 例えばこんな感じ 左の画面はmain.pyを動かしている。所謂User…

Pythonのsumって遅くね

Pythonで、listみたいな形式のデータをsumしたときの速度の話。 sum(data[j][i-1:i+2]) と data[j][i-1] + data[j][i] + data[j][i+1] という2つで比較したところ、後者の方が25%ぐらい早くなった。arrayが原因かは分からないけど、少量のsumやるぐらいなら…

PythonでPerlin Noiseを生成する

Perlin Noiseって何ぞ 普通に乱数を何度も使うと、隣接した値と非依存の値を生成する(そうでなければ乱数とは言わない)ので、ランダムかつなめらかな地形みたいなものは作れない。このような「ランダムかつなめらか」という目標を達成する手法としてPerlin…

Terminatterをリリースしてみる

Terminatterとは Terminalで動く、UserStreamオレオレTwitterクライアントTerminatter。以下の特徴がある。 軽い ssh越しに実行できる キーボードだけで操作できる しかもEmacsキーバインドが使える!←かなり重要 端から見ると格好良い←超重要 当然欠点もあ…

Speeding up of Python File Copying

はじめに 前回の反省を踏まえ、自作クラスを使ってファイルコピーを高速化してみる。 コード https://ideone.com/4MUEW 原理 1つずつファイルを処理すると、ランダムアクセスが増えて、遅くなるのだから、連続で読み込んで、連続で書き出すようにすればいい…

Python File Copy Test1

はじめに ファイルコピーのプログラムを作ってみたのは良いが、やったらめったら遅いのが気になって、パフォーマンスを計測してみることに。とりあえずshutilが遅いのではないか、という疑惑があって、shutil.copyfile、shutil.copy、os.system('cp "{0}" "{…

Pythonでstrを継承してみる

こんな感じで__new__を使えば良さげ。http://ideone.com/2VlhSついでにclass定数(という表現は間違ってるような気がしないでもないが)も使うと、http://ideone.com/0CJwWideoneの使い方も覚えたし満足。