2015年8月31日月曜日

休む

有給が余っており、この調子だと前年の繰り越して残ってたのが10日くらい使わないまま無くなってしまう。
 先月なぞは祝日の存在をすっかりわすれていて、別の日にとった休暇を祝日の代休とせず有給で申請してしまった・・・(その後担当部署から連絡きて、祝日分に訂正してもらう手間を発生させるという始末)

週二日の休みはリフレッシュ度が足りないので、たまに三連休をとると生き返る感がある。9月からの4ヶ月、三連休なんどか作りつつ少し長めの休みをとってしまおう。

2015年8月24日月曜日

カーネルパラメータ調整

sysctl でみえるやつ。OS X で bittorrent を使っていて、「調整しておくと幸せかも?」と思ったので久しぶりにみてみることに。

% sysctl kern.ipc.{somaxconn,nmbclusters} net.inet.tcp.{send,recv}space net.inet.udp.recvspace
kern.ipc.somaxconn: 128
kern.ipc.nmbclusters: 65536
net.inet.tcp.sendspace: 131072
net.inet.tcp.recvspace: 131072
net.inet.udp.recvspace: 196724

前のバージョンだといずれも小さかった記憶があるけど変わっていた。
kern.ipc.somaxconn は増やしておくとよさそう。他はそのままで。

FreeBSD だと kern.ipc.somaxconn は 10.0 から kern.ipc.soacceptqueue に変わっていた。
https://www.freebsd.org/cgi/man.cgi?query=listen&sektion=2
"
 The kern.ipc.somaxconn sysctl(3) has been replaced with
 kern.ipc.soacceptqueue in FreeBSD 10.0 to prevent confusion about its
 actual functionality.  The original sysctl(3) kern.ipc.somaxconn is still
 available but hidden from a sysctl(3) -a output so that existing applica-
 tions and scripts continue to work.
"

ラップトップを換えた効能

・スペック向上によりいろいろ「待ち」が減り、ストレス減
再起動にかかる時間、アプリケーション起動もろもろ
・使い慣れている OS なので、同上
・キー配列も同様(外付けキーボード未使用として)

メモリが8Gにみたないラップトップを使っていたのは 2010年にいた当時の会社で支給された Mac Book 白以来だった・・・。
そのときは1ヶ月後くらいには自宅で使っていた MBP のを使うようにした。落下させたりしてしまい、ボッコボコになった思い出。

数値化できないけども、やはり効果は覿面。最低限メモリは8G&ストレージはSSDダネ。。自腹ならメモリは16G積んでしまう。

Windows なラップトップの事情は知らんのだけど、SSD 標準搭載なやつは PCIe 接続なんだろうか。

ロースペックで頑張るのは、アーリーリタイアでもして時間によゆーがあるひとがすればよい、と思うのだ。

2015年8月23日日曜日

興味深いエントリー

http://thinkchang.hatenablog.com/entry/2015/08/22/223034

一年以上前に、ちらっと
http://ktjtn.blogspot.jp/2014/01/blog-post_21.html

表にでてこない人と接触できるとよいなと思ってたり。
 「著名」でなくて凄いひとはごろごろ潜んでいるはず、、。

2015年8月18日火曜日

pypy はえー

(2011/05/04 18:30公開、2015/08/18 2:45 更新)

名前が素敵な PyPy
http://sourceforge.jp/magazine/11/05/02/064241

MacPorts に早速 1.5 来てたので入れて、下記を実行
ここから拝借した)

import sys
import timeit

print (sys.version)
t = timeit.Timer("test.pystone.main()", "import test.pystone")
t.timeit(10)


・Python 2.7.1
2.7.1 (r271:86832, Dec 31 2010, 13:54:06)
[GCC 4.2.1 (Apple Inc. build 5664)]
Pystone(1.1) time for 50000 passes = 0.693661
This machine benchmarks at 72081.3 pystones/second
Pystone(1.1) time for 50000 passes = 0.6901
This machine benchmarks at 72453.3 pystones/second
Pystone(1.1) time for 50000 passes = 0.700685
This machine benchmarks at 71358.7 pystones/second
Pystone(1.1) time for 50000 passes = 0.69343
This machine benchmarks at 72105.3 pystones/second
Pystone(1.1) time for 50000 passes = 0.686145
This machine benchmarks at 72870.9 pystones/second
Pystone(1.1) time for 50000 passes = 0.696792
This machine benchmarks at 71757.4 pystones/second
Pystone(1.1) time for 50000 passes = 0.695822
This machine benchmarks at 71857.5 pystones/second
Pystone(1.1) time for 50000 passes = 0.685601
This machine benchmarks at 72928.7 pystones/second
Pystone(1.1) time for 50000 passes = 0.700942
This machine benchmarks at 71332.6 pystones/second
Pystone(1.1) time for 50000 passes = 0.699862
This machine benchmarks at 71442.7 pystones/second


・PyPy 1.5
2.7.1 (?, May 03 2011, 16:48:00)
[PyPy 1.5.0-alpha0 with GCC 4.0.1]
Pystone(1.1) time for 50000 passes = 0.267667
This machine benchmarks at 186799 pystones/second
Pystone(1.1) time for 50000 passes = 0.068037
This machine benchmarks at 734894 pystones/second
Pystone(1.1) time for 50000 passes = 0.067261
This machine benchmarks at 743373 pystones/second
Pystone(1.1) time for 50000 passes = 0.067966
This machine benchmarks at 735662 pystones/second
Pystone(1.1) time for 50000 passes = 0.067146
This machine benchmarks at 744646 pystones/second
Pystone(1.1) time for 50000 passes = 0.067497
This machine benchmarks at 740774 pystones/second
Pystone(1.1) time for 50000 passes = 0.067191
This machine benchmarks at 744147 pystones/second
Pystone(1.1) time for 50000 passes = 0.07886
This machine benchmarks at 634035 pystones/second
Pystone(1.1) time for 50000 passes = 0.068004
This machine benchmarks at 735251 pystones/second
Pystone(1.1) time for 50000 passes = 0.068635
This machine benchmarks at 728491 pystones/second


現実的なアプリケーションだとどのくらいになるのだろうね。
ここみると、Django は 8倍高速らしい。

2015/8/18 現在は以下 
2.7.10 (default, May 28 2015, 02:30:16)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
Pystone(1.1) time for 50000 passes = 0.452571
This machine benchmarks at 110480 pystones/second
Pystone(1.1) time for 50000 passes = 0.455215
This machine benchmarks at 109838 pystones/second
Pystone(1.1) time for 50000 passes = 0.449152
This machine benchmarks at 111321 pystones/second
Pystone(1.1) time for 50000 passes = 0.450072
This machine benchmarks at 111093 pystones/second
Pystone(1.1) time for 50000 passes = 0.439352
This machine benchmarks at 113804 pystones/second
Pystone(1.1) time for 50000 passes = 0.453671
This machine benchmarks at 110212 pystones/second
Pystone(1.1) time for 50000 passes = 0.451542
This machine benchmarks at 110732 pystones/second
Pystone(1.1) time for 50000 passes = 0.450634
This machine benchmarks at 110955 pystones/second
Pystone(1.1) time for 50000 passes = 0.45061
This machine benchmarks at 110961 pystones/second
Pystone(1.1) time for 50000 passes = 0.461482
This machine benchmarks at 108347 pystones/second

3.4.3 (default, May 25 2015, 18:48:21)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)]
Pystone(1.2) time for 50000 passes = 0.550403
This machine benchmarks at 90842.5 pystones/second
Pystone(1.2) time for 50000 passes = 0.535997
This machine benchmarks at 93284.1 pystones/second
Pystone(1.2) time for 50000 passes = 0.533127
This machine benchmarks at 93786.3 pystones/second
Pystone(1.2) time for 50000 passes = 0.527765
This machine benchmarks at 94739.1 pystones/second
Pystone(1.2) time for 50000 passes = 0.536051
This machine benchmarks at 93274.7 pystones/second
Pystone(1.2) time for 50000 passes = 0.54033
This machine benchmarks at 92536 pystones/second
Pystone(1.2) time for 50000 passes = 0.535856
This machine benchmarks at 93308.7 pystones/second
Pystone(1.2) time for 50000 passes = 0.534745
This machine benchmarks at 93502.5 pystones/second
Pystone(1.2) time for 50000 passes = 0.524912
This machine benchmarks at 95254.1 pystones/second
Pystone(1.2) time for 50000 passes = 0.531086
This machine benchmarks at 94146.7 pystones/second

3.5.0rc1 (default, Aug 16 2015, 06:23:26)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)]
Pystone(1.2) time for 50000 passes = 0.506479
This machine benchmarks at 98720.7 pystones/second
Pystone(1.2) time for 50000 passes = 0.508563
This machine benchmarks at 98316.2 pystones/second
Pystone(1.2) time for 50000 passes = 0.511506
This machine benchmarks at 97750.5 pystones/second
Pystone(1.2) time for 50000 passes = 0.501795
This machine benchmarks at 99642.3 pystones/second
Pystone(1.2) time for 50000 passes = 0.49656
This machine benchmarks at 100693 pystones/second
Pystone(1.2) time for 50000 passes = 0.49607
This machine benchmarks at 100792 pystones/second
Pystone(1.2) time for 50000 passes = 0.478405
This machine benchmarks at 104514 pystones/second
Pystone(1.2) time for 50000 passes = 0.482465
This machine benchmarks at 103634 pystones/second
Pystone(1.2) time for 50000 passes = 0.491406
This machine benchmarks at 101749 pystones/second
Pystone(1.2) time for 50000 passes = 0.484606
This machine benchmarks at 103177 pystones/second

2.7.9 (295ee98b69288471b0fcf2e0ede82ce5209eb90b, Jun 02 2015, 07:48:49)
[PyPy 2.6.0 with GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)]
Pystone(1.1) time for 50000 passes = 0.044237
This machine benchmarks at 1.13028e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.011606
This machine benchmarks at 4.30812e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.011401
This machine benchmarks at 4.38558e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.010419
This machine benchmarks at 4.79893e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.011264
This machine benchmarks at 4.43892e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.012208
This machine benchmarks at 4.09567e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.01142
This machine benchmarks at 4.37828e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.013389
This machine benchmarks at 3.73441e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.010013
This machine benchmarks at 4.99351e+06 pystones/second
Pystone(1.1) time for 50000 passes = 0.011098
This machine benchmarks at 4.50532e+06 pystones/second

PyPy 関連

ぐぐってみただけ。

そうだ! EuroPython 2011へ行こう - #3 PyPyについての講演,ハンズオン,スプリント
http://gihyo.jp/news/report/01/europython2011/0003

PyPyに関する論文、というのはこれかな?
Tracing the meta-level: PyPy's tracing JIT compiler
http://dl.acm.org/citation.cfm?id=1565827

DjangoAndPyPy
https://code.djangoproject.com/wiki/DjangoAndPyPy
↑からリンクあるけども Django のテンプレートエンジンでの性能比較
http://speed.pypy.org/timeline/?ben=django

PyPy Compatibility
https://bitbucket.org/pypy/compatibility/wiki/Home


Django のドキュメントでは、どうも1.7からは topicsに Performance and optimization というのが設けられ、 Alternative software implementations 項に PyPy についての記述があるようだ。1.7 は 2014年9月にでてた。

記載されてるくらいなので、今利用することはそれほど奇をてらったものではないのかな。

https://docs.djangoproject.com/en/1.7/topics/

https://docs.djangoproject.com/en/1.7/topics/performance/#alternative-software-implementations


アレルギー

ジョコビッチの本が気になったので少々立ち読み。。


最初のあたりぱらぱらとしか見なかったけど、自分がなにアレルギーなのかちゃんと把握しましょう、ということかな。

そう考えると、「好き嫌いせずなんでも食べましょう!」というのは害だよな。
アレルギーではないけどカフェインに弱い体質の人もいるし、こういったのは小さいうちに調べておけないものなんかね・・・。

2015年8月16日日曜日

お参りへ行った

前回のつづき。
これまで足を運んだことのなかった神田明神 http://www.kandamyoujin.or.jp/ へ行ってみた。

お参りし、初穂料を納めて御神札とお守りを授かり、帰宅。
http://www.kandamyoujin.or.jp/omamori/

嫌いなことは言わなくていい


確かにそうだよなと。

2015年8月15日土曜日

fb

やむをえずfbのアカウント再開することがあるのだけど(たまにみるだけ)、いつからか Firefox でのスクロールがくそ重い。(Mac で)
なのでますます使わなくなるのに拍車がかかるのであった。

2015年8月14日金曜日

memcached

(いまさら感満載だけど)memcached 周辺についてちょいと調べる機会があった。
まぁぐぐると何年か前の記事なりなんなりがあれこれみつかるよね。

で、
Python で使える有名な memcached クライアントライブラリは
python-memcached か pylibmc だと思う。Django のドキュメントに記載されているし。
https://docs.djangoproject.com/en/1.8/topics/cache/#memcached

前いたとこだとほぼ python-memcached を使っていた記憶があるのだけども、、python-memcached 単体では

Consistent Hashing 使えない

のよね。。
今も、2010年の stackoverflow のポスト内容と変わらずであった。
Djangoでつかうなら hash_ring いれて django-memcached-hashring 使いましょう、と。

pylibmc なら OK. それでもデフォルトは consistent hashing ではないようだけど。
http://sendapatch.se/projects/pylibmc/behaviors.html#id3


Cython でゴリゴリかかれてる libmc とやらは使えるぽい。ちゃんとみてないけど ketama.cpp あるので、きっと。

ketama は 1年くらい前に README 修正されて、メンテナー募集してるのね。
https://github.com/RJ/ketama

2015年8月11日火曜日

選択


何度かぱらぱらと読んでるこの本。このような卒業式スピーチに立ち会えるのはただただ素敵だな〜と思う。20代だろうし。

ジェフ・ベゾス氏の 人生は「選択」でつくられる のところなんかはドキッとする。

ちょっと変えて書くと

惰性でいきるか、好きなことをするか
常識にしたがうか、独創的になるか
楽なほうを選ぶか、リスクをとるか
批判に屈するか、自分の信念にしたがうか
間違ったときごまかすか、正直に謝るか
恋をしたときふられるのにびびって行動しないか、思い切って行動するか
冒険するのをやめるか、あまり考えなくともやってみるか
辛い時諦めるか、諦めず挑戦を続けるか
批評家で終わるか、創造者になるか
他人を犠牲にしても賢い人でいたいか、他人に優しくするひとでありたいか


このスピーチを紹介してるサイトや動画など。動画は TED に。
http://logmi.jp/6726
https://www.ted.com/talks/jeff_bezos_gifts_vs_choices

2015年8月10日月曜日

PyPy

本番に導入した事例があるようだ。

前勤めていた会社でも Python やら Django やらつかっていて、技術的に濃いところを知ってるプログラマさんが「PyPy どうだろうねー」と言っていたことがあった(2011~2012年くらい)。

その基本構成は 2009年末頃からさほど変わっていなかったので、「ウェブオペレーション」にもある




"常に5年後の計画を作るということだ。「今のソリューションは5年後も大丈夫か?」と自問自答しよう(以下略"

という教訓の通り、今もなおその構成が健在かつトラフィックが増してるなどして性能がプアで悩ましい状況が生まれていたとしたらちょうどいい解決策かも、と思った。
(まぁちゃんと計画してるんなら別の言語にしてるのだろうが・・・)

なので興味津津。

当時の PyPy, PyMySQL, uWSGI の状況は覚えてないけども「ちょっくらためしてみるか」と思えるほど整ってなかったかな。

2.5倍とかくと「おぉ〜」と思い、250%とかくと「まじで!?すごーーーーい」と思える。なんとなく。

PyPy's Speed Center
みると The geometric average of all benchmarks is 0.14 or 7.1 times faster than CPython とある。
 
感想としては
・お手伝い先の中の人の経験値になってるのかはなんとなく気になる(まるっとお手伝い元さんの成果だと評価されないんだろうな、とか今後の改善つらいのかなとか、その後の運用とかとか)
・開発環境はどうしてるかしら
・プロファイリングや種々の取り組み方などなどもきになる
・「Python アプリと言っても JSON 受け取ったり戻したりするウェブアプリなので、たいした構成では無い。」
から
「かなり複雑で巨大なWebアプリケーション、ユーザ数は 100 万以上。」となってるので、当初から適用箇所かわったのかな。

とか、

・Instagram や Pinterest のその後の構成が気になってきた
Pinterest は 2011年では 'heavyly-modified' Django だったり Tornado つかってたりする。
http://www.quora.com/What-is-the-technology-stack-behind-Pinterest-1
Instagram 3年前は: http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances
Disqus もたしか Django 使っている(いた?)ような。 
・Dropbox の pyston どうなってるのかしら
・同じノリ(?)でクックパッドさんが Rubinius にしたらどうなるのか
(そもそも PyPy の目指すところと Rubinius の目指すところが似てるのかすら知らないけど)

ちょいとぐぐってみると Quora が PyPy 使ってたらしき記事をみたけど、その後使わなくなってた。今は不明。http://www.quora.com/Is-Quora-still-running-on-PyPy
"The main reason for not switching to PyPy is its performance: in our case CPython + Cython version is noticeably faster (at least currently)." と。Django 絡んでなさそうな気がする。

そういやちょっと前に Cython 本、日本語版でてたね。

2015年8月9日日曜日

トシガイ

以前「トシガイ」という番組があり、何回かみたことがあった。

トシガイ

もし今年トシガイしてみるとしたら何につかうかなぁ。36万。
インヂュニア・​オートマティックやシーマスター アクアテラ 15,000ガウスは買えない。

PS4 買い替え

どっぷりゲーム浸り、なんてことは全くないもののそこそこ稼働している(Hulu みたりもしている)ので、やや軽量化&省電力化した新型に買い替えた。
価格は変わらない、っていうのはやはり厳しい懐事情なのか。
「39800円」にすらならず、ずっと「39980円」だし。。

https://www.scei.co.jp/corporate/release/150622.html

http://www.4gamer.net/games/990/G999024/20150717147/

8%の消費電力低減と10%の軽量化らしい。本体のサイズはかわらず。
買い換えることで DUAL SHOCK 4のバッテリー交換も兼ねてたりも。
4gamerの記事だとHGSTのHDDだけども、今回買ったのについてきたのはSeagateのだった。旧型のはHGST。

前のモデルは某家電量販店でそれなりの価格で買い取ってもらえることを確認。
購入時にはそこそこポイント使ったので実費で数千円で買い替えという具合。

追記: 買い取り査定の結果、現在の買い取り上限金額だった。よしよし。

PS は R3000 かなにかが地味に性能良くなってたかなにかで鉄拳の処理落ちが無くなってたというのがあったような
PS2 は GS と EE がワンチップ化して うす!ちーさい!のがでた
PS3 はほぼオブジェで使わずじまいだった・・・。初期型の重量はすごかった。5kg..
現行モデルのデザインはお世辞にもかっこいいとは言えない。
PS4 は来年にはサイズ小さくしたのがでるのかもしれないな。


お参りへいこう

身によくないことが起こっているわけではないけども、、
どうも仕事で自分がとある当番のときにある出来事がおこりやすそうな気がしている。

前の職場では帰省してたり自分の誕生日だったり休暇とってる日に障害がおきてたりもしていた。

気にすること自体がよくなかったりするかもしれないけど、まぁ気分転換がてらどこかにお参りして、厄除けなものでも授かっておきませう・・。

2015年8月6日木曜日

ビット数

ちょっと前に書いたこのエントリでは、ファイルシステム周りをごそごそと読んでいた。

ふと疑問に思ったのが、「ほげビットなファイルシステム」というのはどういうことなんだっけ、、と。

XFS - 「high-performance 64-bit journaling file system 」
ZFS - 「ZFS is a 128-bit file system」
BFS - 「to provide BeOS with a modern 64-bit capable journaling file system」
HAMMER - 「a high-availability 64-bit file system」

http://www.atmarkit.co.jp/ait/articles/0408/24/news093.html
みると「64bitファイルシステムであるXFSは、理論上最大900万Tbytesのファイル、最大1800Tbytesのパーティションをハンドリングできる。」とは書いてあるけども。

wikipedia に記載の Limits は理論上ではない実際の制限だから異なるよーんということなのか。

UFS の UFS2 に関する記述をみると
「In UFS2, Kirk McKusick and Poul-Henning Kamp extended the FreeBSD FFS and UFS layers to add 64-bit block pointers (allowing volumes to grow up to 8 zettabytes), variable-sized blocks (similar to extents), extended flag fields, additional 'birthtime' stamps, extended attribute support and POSIX1.e ACLs. UFS2 became the default UFS version starting with FreeBSD 5.0. 」
と。

うーん。マキュージック先生とPHKさんがやってくれたね!ということしかわからん・・。

HFS Plus の説明をみてもピンとこず、、
ファイル数は 2^31 で、ボリュームサイズ、ファイルサイズは 2^63 - 2^31 とは・・・なんでなの。 2^31 減じるの?

2015年8月5日水曜日

恩師の訃に接す

高専のときの研究室の指導教官の訃報があった。
そんな歳でもないので、突然の知らせでただただビックリした。

母校のサイトをみてみるとお知らせに掲載されていた。どうも病気療養中だったようだ・・。

できのよくない学生で手を焼かせてしまってたな。

和田守先生、さよなら。

2015年8月3日月曜日

Windows 10

以前 8 を買って VMware Fusion 上でときどき使っており 8.1 にしていた。
10 がでたので 10 に更新。

アップグレードを受け取って実行するとデバイスの認識で弾かれてしまい、この方法で実施する際の回避策はよくわからなかったので iso でアップグレード。

その後設定で OS を Windows 10 に変更、VMware Tools を再インストール。「修復」で入れなおし。

Edge


やはり 8, 8.1 はダメな子だったんだろうか。