Pages

December 27, 2012

JDKをwgetする

JDKはブラウザで同意のもとでDLしなくてはいけなくて、それがサーバのセットアップとなると結構めんどくさくて頭にきていたのですが、なにやら調べてみるとwgetでいけるみたいです。
$ wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/6u38-b05/jdk-6u38-linux-x64.bin"
こんなかんじでおkみたいです。

仕組みとかはChromeとかのdevtoolでみてみるといいかもです。

December 02, 2012

自分のMIT Licenseページを作る簡単な方法

MITライセンスのページってOSIのページくらいしか見当たらないし、権利者絡みでもいろいろあると思って調べてたら、手軽にできるサービスを見つけました。

mit-license.orgというサイトで行えます。任意のユーザ名がサブドメインとして選べ、個人のライセンスページになるという仕組みみたいです。

Remy Sharpさんありがとう。

ということでサービスへの登録ですが、json形式でcurl使って投げてあげれば作られるという簡単な方法です。

私の場合だと
$ curl -d'{ "copyright": "本名" }' http://pyyoshi.mit-license.org
として投げました。 定義できるものはそれなりあって、フォーマット形式をtxtにしたり、メールを登録できたりします。

詳しくはこちらのreadmeでも読むといいと思います。


これ削除するときはどうするんだろ…

September 19, 2012

[メモ]C++のメモリリークを検出する方法

cchardetでバインドしているライブラリにメモリリークするバグがあったのだけれど、C++と親しい付き合いをしていないし、自分で書いたコードではないのでどのように見つけてあげればいいのかわからないので、Google先生に聞きました。

September 18, 2012

自動でCoffeeScriptをコンパイルするPythonスクリプトを書いた

いちいちコマンド書いてられないので、ファイルに変更があった場合にビルドするスクリプトを書いた。

mono+TwitterIrcGateway+znc環境の構築

TwitterIrcGatewayをCentOS6環境で使うための備忘録

August 22, 2012

環境によってCythonでうまくコード変換ができない場合の対処

なぜかWindowsやUbuntuでは素直に変換しビルドが成功するのに、CentOSではうまくpyxをC/CPPに変換できない問題が発生しました。

この原因がどのようなものなのか色々と調べてみたのですが、検索の仕方がまずかったのか謎のままでいました。

きっとCython.Distutils.build_extが悪さしてるんだろうなという検討はついていたので、

それを標準のdistutils.command.build_ext.build_extに変更し、

さらにCython.Compiler.Main.compileを使用して"*.pyx"をC/CPPに変換させるような処理に変更しました。

C/CPPに強制変換させているので、sourcesにはpyxではなく、変換したC/CPPファイルを追加するようにも変更してください。

この変更によって、たぶんCentOSのようにうまく変換できない環境でも対応できるかと思います。

変更した際のdiffはこちら

備忘録♪備忘録♪


August 07, 2012

何か一つ自身を持てるもの・強みになるものをもつ

pull requestが通るとニヤニヤが止まらなくなる僕です。

たとえ本当に小さな事でも誰かの役に立ったと思うと嬉しいのです。

誰がなんと言おうと僕はこれからもこれに快楽を得ていくでしょう。

NASのHDDを復旧準備

ここ最近調子が悪いNAS。 そしておいておいたファイルがデバイスエラーで読み込めなくなってしまった。

ファイルシステムがXFSという事もあってLinux機につないで作業を行った。

August 02, 2012

Windows環境下でもVirtualenvWrapperを使う


とても便利なvirtualenvwrapperですが、なぜかWindowsには対応していません。

MSYS下なら動かせないこともないのですが、PythonがMSYS環境であまり良い挙動を取りません。

どうしたら良いものか調べていたらPowerShell2で動かすことができる

virtualenvwrapper-powershell

というものを見つけました。

なにやらvirtualenvwrapperをPowerShellスクリプト用に再実装したものみたいです。

ということで

使えるところまで準備していこうかと思います。

前提条件としてPowerShell(Win7はビルトイン)とvirtualenvはインストール済みとします。

なお、私はPS初心者です。なのでPSの環境を一から作るところから始めます。ご了承ください。

July 17, 2012

ファイル監視にwatchdogがかなり便利な件


win32apiを叩くのはナンセンスだし、何より手軽に書きたかったのでpypiで探索していたらwatchdogというものを知りました。

以下が「*.jpg, *.png, *.txtの3つのファイルが、作成・編集・削除された時にそれを知らせる」コードです。


on_created, on_modified, on_deletedに自分が実行したい処理を書いていけばいいかと思います。

例えばdocを編集していちいち自分でmake htmlとせずともwatchdogを使えば自動化できてしまいます。

ただちょっと触って気になったところが、ファイル・ディレクトリ作成時にon_any_eventだと2回実行してしまうことです。

このコードを使ってみればわかると思うのですが、どうやら作成イベントは on_created, on_modifiedの順で実行されているためのようです。

OS内部のことはわからないのであくまで推定ですが。

July 14, 2012

Python向けTumblrライブラリPytumb2をリリース

Python向けTumblrライブラリPytumb2をリリースしました。

1年くらい前にPytumbをリリースして以来まったくメンテナンスせずに放置状態だったので、この際コードの書き直しを行いました。

使い方はTweepyのように手軽に扱えるようにしています。

詳しくはtests.pyexample.pyを見ていただければとおもいます。

また、ドキュメントはまだ揃えていませんが、api.pyにある程度書かれています。

バグや要望等は随時承っております。

では

PyYoshi/Pytumb2 · GitHub

July 10, 2012

久しぶりに数学的なプログラミング><

「for文を使って,s=1+3+5+...+99の和を計算、表示するプログラミングを作りましょう」

というネタがTwitterで流れてきたのでPythonでやってみました。

#!/usr/bin/env python
reduce(lambda a,b: a+b, [i for i in range(1,100) if i%2==1])
sum([i for i in range(1,100) if i%2==1])

男らしく()ワンライナーで書いてみました。

というかいくら奇数の足し算とはいえ、数学的なプログラミングを最近全くしていないせいか、最初???ってなりました。

そういえば自分の作ったプログラムって数学的な要素全然ない気がします…

コードは2つの方法があります。短く書きたいならsum()を使うのがいいと思います。

僕はどうなってるのか気になるタイプなのでreduce()使ったヤツのほうが好きですね。

といいますか、Pythonは気持ち悪いくらい便利な関数が標準で備わってます><

June 28, 2012

ネタが無くなった

cchardetを作るまではいろいろはかどっていたプログラミングですが、それを終えるとネタがないことに気づいた。

PyGooglePlusは仕様変更の速度についていけないのとサンプリングデータの数が少ないのでという理由であまり更新できない。

もっとも仕様変更に柔軟に対応できるプログラミングの仕方が考えつかない自分のせいでもあるのですがXD


なにぶんニートの身分だと、やることがないと暇なのである。

仕事探せというお話ではあるのですが、仕事を探すのがひどく億劫。どうしようもないクズである…

親には申し訳ないとは思うけれど、もうちょっと自由でいたい反面、お金がないと遠征もできない。

素晴らしい負の連鎖である。 バイトくらいは探したほうがよさそう。

June 26, 2012

cChardetをPyPiに登録してみた

BeautifulSoupのGoogle Groupにcchardetを導入したら高速化したよって報告したらBS開発者から

「ビルド等の導入をシンプルにしてくれたら使ってやってもいいよ。」

と言われたのでlibcharsetdetectを取り込んで1つの静的ライブラリにしちゃいました。

いくつかライブラリを作っているみですが、PyPiにはじめて登録しました。

適宜setup.pyに必要な情報を入れたら、

$python setup.py register
でユーザ登録とライブラリの登録を済ませます。その際にログイン済みでないとファイルのアップロードができなくなりますので注意してください。

そして、sdistをアップロードさせます。
$python setup.py sdist --formats=gztar upload

これだけで簡単に登録できちゃいました。 難しいこと考えずにアップロードできるのは大変便利ですね。

ただし、registerすると~/.pypircにユーザ名と暗号化されていないパスワードが書かれちゃっています。

registerでログイン・アップロードを終了したら消すという作業をするのもありなのかもしれませんね。

この辺は要調査

cchardet: PyPi

June 20, 2012

より高速なchardet、cchardetをリリースしました

以前の投稿にchardetがあまりにも遅いと嘆いていました。

これも何かの縁だと思い、Cythonの練習がてら、さっそくcchardetをリリースさせて頂きました!

ベンチを取ったのですが、C拡張なだけあってかなり早い結果が出ました。

chardetが4.009999990463257秒で検出したのに対し、cchardetは0.0009999275207519531秒と実に4000倍!(計算あっているか不安w)

割かし満足しています。

ただ不満もありまして、chardetはconfidenceを出力できるのに対し、cchardetはencodingしか吐きません。

これはcharsetdetectライブラリ側の問題なのですが、いずれソースをいじって得られるようにしたいと考えています。

もう1つはビルド環境がWindowsでしかおこなっていないため、setup.pyをもう少々柔軟なものに変えないと他のプラットフォームで扱えないことです。

この2つは時間があるときに修正していきたいと思います。

ではでは

PyYoshi / cChardet

追記 2012,06/20,22:39
linuxもビルドできるように修正しました。 Ubuntu 12.04 64bit環境で確認

追記 2012,07/07,14:35
confidenceを取得できるようにしました。


June 18, 2012

PyGooglePlusをプロファイリングしてみた

現在noseでテストコードを書いてるのだけれど、ついでにどこが足を引っ張っているのか知るためにnose経由でプロファイリングしてみた。

準備
  • Graphizをインストール
  • $ pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
  • $ pip install pbp.scripts

テストコードをtests.pyとして書いたら
$ nosetests --with-profile --profile-stats-file nose.prof tests.py
$ hotshot2dot nose.prof| dot -Tpng -o profile.png
を実行して出力した画像とにらめっこ

今回はApiHandler.get_user_info()のみのテストコードで行った。 またBeautifulSoup4がリリースされていることを知り、lxmlあれば早くなるよって言ってたので、3と4の2パターンで行った。

以下が結果である。







上がBS3、下がBS4であるが結果としては、lxmlを使っているはずのBS4のほうが遅い結果になっている。処理が余計にかかっている印象。 いずれ改善されると思うけど、特に必要性を感じないのであればBS3を使っておけばいいと思う。

それにしてもchardetの処理が足を引っ張りすぎている気がする。それと自分のライブラリ(苦笑)

※ この結果を出したときは指定していなかったが、文字コードが固定で既知なら,from_encoding引数をBeautifulSoupに指定してあげるのもいいと思うよ。 実験的にPyGooglePlusにも使用してみたら、5分の1くらい処理時間が縮まりました。 省いてるから当然だね。 だとしてもC拡張のchardetが欲しくなるよね。だれか作らないかな

参考:



June 05, 2012

Pythonコードを実行ファイル(exe)にするときの注意点

自分が知っている限りだと、py2exeとcx_freezeがある。前者はwindowsのみ対応であるが、cx_freezeはmac等のプラットフォームにも対応している。

さらにcx_freezeはsetup.pyに特に記述しなくても実行ファイルを作ることができるのでpy2exeより手軽に作れて便利なのである。

またpy2exeに比べてコードの依存関係のチェックを詳しくしているのか実行ファイルサイズが小さくなる

で、便利ではあるcx_freezeなのだが使ってみて デメリット が2つほどあった。

1. py2exeでは1ファイルのなかにpydやpython.dll等があるのだが、cx_freezeは実行ファイルの他にpydとかそのへんの動的ライブラリが外に出る。

2. py2exeはバイナリにビルドするコードを内包しているが、cx_freezeは__main__.py*というファイルにもろでているため、ごにょごにょするとバイトコードの中身がわかってしまう。

というデメリットがある。 #1のデメリットはNSISを使えば1ファイルにまとめ上げることは出来る。 (参考)


以下のことから、あんまり見せたいくない文字列があるときはcx_freezeは避けて、py2exeを使えばいいのである。

その時は

1. なるべくコードは1ファイルに収めてビルドする。

2. 見せたくない文字列がある場合は軽く難読化する。

に気をつければいいんじゃないかな?

※ py2exeのメインコードは実行ファイルのバイナリでしか見つからなかったが、どこか違う場所にあるかもしれないので、この記事自体が意味をなさなくなるかもしれないのであしからず。

それと、そもそもPythonという言語のコンパイルはバイトコードに変換するだけであってC#とかJavaのように中間コードに変換しているわけではないので、コードは覗かれて当然であるという認識のもとで使うべきであるかと思います☆(ゝω・)vキャピ

June 01, 2012

IronPythonはクソ

PyGooglePlusでクライアントでも作ろうかとC#にIronPythonを組み込んで実験していたのだけれど、どうもうまく動かない。

というのもIronPython単体ではCPythonには負けるものの、いちよ実行はできたのだけれどC#から呼ぶとログイン処理からユーザ情報取得処理までに5分くらいかかる始末

せっかくdynamic使えてかなり親和性が上がっているのにもったいないなぁ…

ちなみにurllib2までの処理は軒並みな速さなのだけれどObjectを生成するBeautifulSoupやsimplejsonでかなり時間がかかっているみたい。

というわけで、pythonで書かれたものをrpc serverにしてソケット通信すればいいんじゃね?ってのが昨日たどり着いた結論;(

May 25, 2012

PyGooglePlusをリリースしました

Google+の非公開APIを扱えるようにするPython製ライブラリ「PyGooglePlus」をリリースしました。


何時まで経ってもWrite API公開されないし、Webハックは楽しいので作ってしまいました。
Chrome Devtoolsとにらめっこしたせいもあって結構使い方わかってきた感じがします。
ただ、やはり久しぶりに書いた(まともな)コードなだけあって、へんてこな書き方が多く見受けられたのがちょっとアレですね。

使い方ですが、ひと通りtest.pyに書いてありますが、まぁ誰もこのままじゃ使わないだろうからドキュメント書いて、クライアント作ってぽいっとgithubにでも上げたいと思います :)

May 17, 2012

Python2.7.3 x64を自ビルド for Windows

前提としてsvnやVC++、Perl、Gowなどが入っているものとする

cd src
svn checkout http://svn.python.org/projects/python/branches/release27-maint/ python2.7.3

svn export http://svn.python.org/projects/external/bzip2-1.0.5

svn export http://svn.python.org/projects/external/openssl-0.9.8l

wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fgnupack%2F49095%2Fsqlite3-3.6.21-3-src.tar.bz2"
tarコマンドではうまく解凍できないので7zip等で解凍、PCBuild内に置く。

wget "http://downloads.sourceforge.net/project/tcl/Tcl/8.4.19/tcl8419-src.zip?r=http%3A%2F%2Fwww.tcl.tk%2Fsoftware%2Ftcltk%2Fdownload.html&ts=1337257341&use_mirror=jaist"
wget "http://downloads.sourceforge.net/project/tcl/Tcl/8.4.19/tk8419-src.zip?r=http%3A%2F%2Fwww.tcl.tk%2Fsoftware%2Ftcltk%2Fdownload.html&ts=1337257429&use_mirror=jaist"
tcl/tkはsrcルートにtcltkというディレクトリを作り、その中に解凍


VisualStudio2010から
_bsddbのプロパティのインクリュードディレクトリにPCBuildとPCBuild/build_windowsを追加する。
_tkinterのプロパティのインクリュードディレクトリにtcltk内のgenericとxlibを追加。構成の種類をスタティックライブラリにする。

ビルドする。

2つほどエラーがでるがpython自体はビルド完了する。 2つのエラーは
ここのパッチ
を使えば解決するみたいなのだがうまくいかない…


Windowsはさくっとビルドできないのがつらくてしょうがない…



February 20, 2012

ircBot-consoleで自動オペレータ権限付与するスクリプト書いたよ

IRCを使用しなくてはいけなくなったので書いてみました。

このコードはircBot-console用でJavaScript(Rhino)で書かれています。



WHITE_LISTにユーザを追加していくことで、自動でOP権限を与えるユーザを増やすことができます。

また、完全一致か前方一致か選択できます。

愚痴としてRhinoのデバッグメッセージがないこと(オブジェクトハッシュしか出力されない)、エラーログを記述するための関数がないことかなー。スクリプトのデバッグはとてもめんどくさいです。 OSSだし自分で書きなおせってのはあるけど