Programming」カテゴリーアーカイブ

プログラミング全般に関するカテゴリーです。

coreのダンプとgdbでのデバッグ

coreをダンプするように設定して、デバッグする手順

1. プログラムのコンパイル

$ g++ -O0 -g example.cpp

最適化無効、デバッグ情報付加でビルド

2. coreをダンプするように設定

$ ulimit -c unlimited

最近の環境ではデフォルトでcoreを出力しない設定になっていることが多いです。

3. ビルドしたプログラムの実行

$ ./a.out
$ ls
a.out core example.cpp

4. デバッグ

$ gdb a.out core

Pythonで日本語ドメインの変換

Pythonを使ってPunycode表記に変換する方法

日本語ドメイン名をPunycode表記に変換

>>> u'日本語.jp'.encode('idna')
'xn--wgv71a119e.jp'

Punycode表記を日本語ドメイン名に変換

>>> 'xn--wgv71a119e.jp'.decode('idna')
u'\u65e5\u672c\u8a9e.jp'
>>> print 'xn--wgv71a119e.jp'.decode('idna')
日本語.jp

Pythonで数式処理

Pythonで数式処理をしたい場合はSymPyが便利です。

SymPy
http://www.sympy.org/

ライセンスはLicensed under BSD。

使い方

モジュールのインポート

>>> from sympy import *

シンボルx, yで計算

>>> x, y = symbols('x y')
>>> expr = x + 2*y
>>> expr + 1
x + 2*y + 1
>>> expr - x
2*y

expr - 1x + 2*y - xではなく、ちゃんと計算して2*yになります。

展開と因数分解もできます。

>>> expand(expr * expr)
x**2 + 4*x*y + 4*y**2
>>> factor(x**2 + 4*x*y + 4*y**2)
(x + 2*y)**2

見栄え良く表示したい場合は次のようにします。

>>> init_printing(use_unicode=True)
>>> expand(expr * expr)
 2              2
x  + 4⋅x⋅y + 4⋅y

微分、積分もできます。

>>> diff(sin(x), x)
cos(x)
>>> integrate(sin(x), (x, 0, pi))
2

等式の計算もできます。

>>> solve(x**2 -2,  x)
⎡   ___    ___⎤
⎣-╲╱ 2 , ╲╱ 2 ⎦

x^2 - 2 = 0の解を求めています。

行列など、他にもいろいろできるそうです。