# -*- coding:utf-8 -*- # broken_barh import numpy import matplotlib.pyplot ######################################################################## ## Main function ######################################################################## ind = numpy.arange(8) matplotlib.pyplot.axis([0, 10, 0, 10]) matplotlib.pyplot.grid(True) # xranges: (xmin, xwidth) # yrange: (ymin, ywidth) # 左下:(1, 1), 右上:(2, 4) matplotlib.pyplot.broken_barh([(1, 1)], (1, 3)) # 左下:(3, 3), 右上:(6, 4) matplotlib.pyplot.broken_barh([(3, 3)], (3, 1), facecolor='red') matplotlib.pyplot.savefig('test15.png')
2013年6月16日日曜日
[Python][matplotlib]区間横棒グラフ
0 から開始ではなく途中からの横棒グラフを描くには broken_barh() を使う
[Python][matplotlib]横棒グラフ
横棒グラフを描く場合は barh() を使う
# -*- coding:utf-8 -*- # barh import numpy import matplotlib.pyplot ######################################################################## ## Main function ######################################################################## tokyo = [7.0, 6.5, 9.1, 12.4, 19.0, 23.6, 28.0, 29.6, 25.1, 18.9, 13.5, 9.9] ind = numpy.arange(1, 13) # 横棒グラフ matplotlib.pyplot.barh(ind, tokyo) matplotlib.pyplot.axis([0, 40, 1, 12]) matplotlib.pyplot.grid(True) matplotlib.pyplot.savefig('test15-1.png')
[Python][matplotlib]Grid 付き棒グラフ
# -*- coding:utf-8 -*- # Grid 付き import numpy import matplotlib.pyplot as plt import matplotlib.font_manager as fm temperature = (7.0, 29.6, 16.8, 28.9) ind = numpy.arange(4) print ind width = 0.35 p1 = plt.bar(ind, temperature, width, color="b") # フォントを指定して日本語表示 #prop = fm.FontProperties(fname='C:\\WINDOWS\\Fonts\\ipamp.ttf') prop = fm.FontProperties(fname='/usr/share/fonts/ipa-pmincho/ipamp.ttf') plt.xticks(ind + width / 2., (u'東京 1 月', u'東京 8 月', u'那覇 1 月', u'那覇 8 月'), fontproperties=prop) plt.axis([-1, 4, 0, 35]) # axis([xmin, xmax, ymin, ymax]) plt.grid(True) #plt.show() # png 出力 plt.savefig('test06.png')
[Python][matplotlib]棒グラフ
棒グラフを描く場合は bar() を使用する
# -*- coding:utf-8 -*- # 棒グラフ import numpy import matplotlib.pyplot as plt import matplotlib.font_manager as fm temperature = (7.0, 29.6, 16.8, 28.9) ind = numpy.arange(4) print ind width = 0.35 p1 = plt.bar(ind, temperature, width, color="b") # フォントを指定して日本語表示 #prop = fm.FontProperties(fname='C:\\WINDOWS\\Fonts\\ipamp.ttf') prop = fm.FontProperties(fname='/usr/share/fonts/ipa-pmincho/ipamp.ttf') plt.xticks(ind + width / 2., (u'東京 1 月', u'東京 8 月', u'那覇 1 月', u'那覇 8 月'), fontproperties=prop) plt.axis([-1, 4, 0, 35]) # axis([xmin, xmax, ymin, ymax]) #plt.show() # png 出力 plt.savefig('test05.png')
[Python][matplotlib]複数のファイルに出力する
figure() で figure object を複数作成し、それぞれ savefig() で画像ファイルに出力する
# -*- coding:utf-8 -*- # 2 つのファイルに出力する import numpy import matplotlib.pyplot as plt t1 = numpy.arange(0.0, 1.0, 0.02) fig = plt.figure(1) # 1 rows, 1 column, first plot plt.subplot(1, 1, 1) plt.title('sin()') plt.plot(t1, numpy.sin(2 * numpy.pi * t1), 'k') # png 出力 fig.savefig('test10-0.png') # 新しい figure を作成、引数に 1 を渡すと上で作成した fig に追加でグラフを描く fig = plt.figure(2) # 1 rows, 1 column, first plot plt.subplot(1, 1, 1) plt.title('cos()') plt.plot(t1, numpy.cos(2 * numpy.pi * t1), 'r') # png 出力 fig.savefig('test10-1.png')
[Python][matplotlib]複数のグラフを 1 つのファイルにまとめる
figure() で figure object を作成し、そこに subplot で描画領域を区分けして plot していく
4 つ載せる場合
# -*- coding:utf-8 -*- # 2 つのグラフを表示する import numpy import matplotlib.pyplot as plt def f(t): return numpy.exp(-t) * numpy.cos(2 * numpy.pi * t) t1 = numpy.arange(0.0, 5.0, 0.1) t2 = numpy.arange(0.0, 5.0, 0.02) fig = plt.figure(1) # 2 rows, 1 column, first plot plt.subplot(2, 1, 1) plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') # 2 rows, 1 column, second plot plt.subplot(2, 1, 2) plt.plot(t2, numpy.cos(2 * numpy.pi * t2), 'r--') # png 出力 fig.savefig('test08.png')
4 つ載せる場合
# -*- coding:utf-8 -*- # 4 つのグラフを表示する import numpy import matplotlib.pyplot as plt t1 = numpy.arange(0.0, 1.0, 0.02) fig = plt.figure(1) # 2 rows, 2 column, first plot plt.subplot(2, 2, 1) plt.title('sin()') plt.plot(t1, numpy.sin(2 * numpy.pi * t1), 'k') # 2 rows, 2 column, second plot plt.subplot(2, 2, 2) plt.title('cos()') plt.plot(t1, numpy.cos(2 * numpy.pi * t1), 'r') # 2 rows, 2 column, third plot plt.subplot(2, 2, 3) plt.title('tan()') plt.plot(t1, numpy.tan(2 * numpy.pi * t1), 'b') # 2 rows, 2 column, fourth plot plt.subplot(2, 2, 4) plt.title('log()') plt.plot(t1, numpy.log(t1), 'g') # png 出力 fig.savefig('test09.png')
[Python][matplotlib]出力するグラフのサイズを指定
- figure() と subplot() を使用して出力サイズ (pixel) を指定する
- figure で 4x3 inch に出力する指示をし、その figure object に subplot でグラフを描く
- ファイル出力する時 (savefig) に、100dpi と指定すれば 400 x 300 pixel となる
# -*- coding:utf-8 -*- # 400x300 pixel の画像として出力する import numpy import matplotlib.pyplot as plt import matplotlib.font_manager as fm temperature = (7.0, 29.6, 16.8, 28.9) ind = numpy.arange(4) print ind width = 0.35 fig = plt.figure(figsize=(4, 3)) plt.subplot(111) plt.bar(ind, temperature, width, color="b") # フォントを指定して日本語表示 #prop = fm.FontProperties(fname='C:\\WINDOWS\\Fonts\\ipamp.ttf') prop = fm.FontProperties(fname='/usr/share/fonts/ipa-pmincho/ipamp.ttf') plt.xticks(ind + width / 2., (u'東京 1 月', u'東京 8 月', u'那覇 1 月', u'那覇 8 月'), fontproperties=prop) plt.axis([-1, 4, 0, 35]) # axis([xmin, xmax, ymin, ymax]) # png 出力 fig.savefig('test07.png', dpi=100)
[Python][matplotlib]グラフを描く
plot() の第 3 引数で plot 描画の方法を指定する。
numpy で生成した数列をグラフ化
Sine curve を描く
# -*- coding:utf-8 -*- import matplotlib.pyplot as plt plt.plot([1,2,3,4],[1,4,9,18], 'ro') # r: red, o: circle marker plt.plot([1,2,3,4],[3,5,15,2], 'b^') # b: blue, ^: triangle_up marker plt.axis([0,5,0,20]) # axis([xmin, xmax, ymin, ymax]) plt.show()
numpy で生成した数列をグラフ化
# -*- coding:utf-8 -*- # numpy で生成した数列をグラフ化 import numpy import matplotlib.pyplot as plt t = numpy.arange(0., 5., 0.2) print t plt.plot(t, t, 'r--') plt.plot(t, t**2, 'bs') # 2 乗 plt.plot(t, t**3, 'g^') # 3 乗 plt.show()
Sine curve を描く
# -*- coding:utf-8 -*- # Sine curve を描く import numpy import matplotlib.pyplot as plt import matplotlib.font_manager as fm t = numpy.arange(-numpy.pi, numpy.pi, 0.1) print t # フォントを指定して日本語表示 #prop = fm.FontProperties(fname='C:\\WINDOWS\\Fonts\\ipamp.ttf') prop = fm.FontProperties(fname='/usr/share/fonts/ipa-pmincho/ipamp.ttf') plt.title(u'Sine curve テスト', fontproperties=prop) plt.plot(t, numpy.sin(t), 'k') #plt.show() # png 出力する場合はこちら plt.savefig('test04.png')
[Python][matplotlib]インストール
Windows
Fedora
yum でインストール
動作確認
ここで Atcive Tcl を ActiveTcl Downloads - Tcl for Windows, Linux and Mac | ActiveState からダウンロード、インストールすると tkagg backend でも実行可能となる。
- Numerical Python - Browse /NumPy/1.5.1 at SourceForge.net から numpy-1.5.1-win32-superpack-python2.7.exe をダウンロードしてインストールする
- matplotlib - Browse /matplotlib/matplotlib-1.0.1 at SourceForge.net から matplotlib-1.0.1.win32-py2.7.exe をダウンロードしてインストールする
Fedora
yum でインストール
# yum install numpy # yum install python-matplotlib
動作確認
# -*- coding:utf-8 -*- import matplotlib.pyplot as plt plt.plot([1,2,3,4],[1,4,9,18]) plt.ylabel('some numbers') plot.show()Fedora では問題なく動作したが、Windows の場合は以下のようなエラーが表示された。
> python test00.py Traceback (most recent call last): File "test00.py", line 2, in <module> import matplotlib.pyplot as plt File "C:\usr\Python27\lib\site-packages\matplotlib\pyplot.py", line 23, in <module> from matplotlib.figure import Figure, figaspect (略) File "C:\usr\Python27\lib\site-packages\matplotlib\font_manager.py", line 214, in win32InstalledFonts key, direc, any = _winreg.EnumValue( local, j) MemoryErrorこれは matplotlib の backend (renderer) がデフォルトで tkagg backend を使うことになっているために発生している。agg backend に切り替えて動作させるとグラフ作成ができた。
# -*- coding:utf-8 -*- import matplotlib matplotlib.use('agg') # Backend を agg に変更する。matplatlib.pyplot を import する前にこれを実行すること import matplotlib.pyplot as plt plt.plot([1,2,3,4],[1,4,9,18]) plt.ylabel('some numbers') plt.show() plt.savefig('test01.png')
ここで Atcive Tcl を ActiveTcl Downloads - Tcl for Windows, Linux and Mac | ActiveState からダウンロード、インストールすると tkagg backend でも実行可能となる。
[Emacs]NTEmacs で作成した文章の印刷
NTEmacs の M-x print-buffer を使用して印刷する方法を記述する。
NTEmacs から直接印刷することは困難なのでテキストエディタ (今回はサクラエディタW を使用) を使用して印刷をする。
.emacs に以下を記述
NTEmacs から直接印刷することは困難なのでテキストエディタ (今回はサクラエディタW を使用) を使用して印刷をする。
.emacs に以下を記述
;;; ===== 印刷 ===== (setq exec-path (cons "C:\\Program Files\\Utility\\sakuraW_r1428" exec-path)) (setq print-region-function (lambda (start end &optional lpr-prog delete-text buf display &rest rest) (let* ((procname (make-temp-name "w32-print-")) (tempfile (subst-char-in-string ?/ ?\\ (expand-file-name procname temporary-file-directory))) (coding-system-for-write 'sjis-dos)) (write-region start end tempfile) (set-process-sentinel (start-process procname nil "sakuraW.exe" tempfile) (lambda (process event) (let ((tempfile (expand-file-name (process-name process) temporary-file-directory))) (when (file-exists-p tempfile) (delete-file tempfile))))))))
- setq exec-path と setenv "PATH" にある PATH はエディタのある PATH を指定すること
- start-process にある sakuraW.exe は使用するエディタを指定すること
- 作成中の文章で M-x print-buffer を実行すると buffer 全体がサクラエディタにコピーされるのでそこから印刷を行うことが可能となる
- M-x print-region で region 指定の印刷もできる
[Emacs]Fedora の Emacs で Anthy が使えるようにする
インストール
また、最終行の global-set-key で「半角/全角 漢字」キーによっても Anthy に切り替えられるようにしてある
# yum install anthy-el.emacs に Anthy の設定を追記
;; Anthy (set-language-environment "Japanese") (setq default-input-method "japanese-anthy") (global-set-key [zenkaku-hankaku] 'toggle-input-method)emacs で M-x toggle-input-method を実行すると Anthy が起動して日本語入力ができるようになる
また、最終行の global-set-key で「半角/全角 漢字」キーによっても Anthy に切り替えられるようにしてある
[Emacs]Fedora にてファイル名一覧の文字化けを直す
Fedora13 ではファイル名/ディレクトリ名が UTF-8 で表示されているので Emacs の Dired 表示が EUC 表示されると文字化けしてしまう。
ファイル名の文字コードを指定するには .emacs に以下を追加する
ファイル名の文字コードを指定するには .emacs に以下を追加する
(setq file-name-coding-system 'utf-8-unix)
[Emacs]migemo
インストール
未完了
未完了
- migemo からダウンロード
- Ruby が必要なので Ruby をインストールする
- Ruby/Romkan を Ruby/Romkan からダウンロード
- Ruby/Bsearch を Ruby/Bsearch からダウンロードする
- Romkan と Bsearch を C:\usr\ruby\lib\ruby\site_ruby にコピー
- SKK-JISYO を SKK 辞書 からダウンロードする
- SKK-JISYO.L を migemo ディレクトリにコピー
- genchars.sh でエラーとなってしまう
> ./configure --with-emacs=emacs > make > make install
- C/Migemo を KaoriYa からダウンロード
- ダウンロードしたファイルを解凍する
- c:\usr\emacs\bin に migemo.dll を移動
- c:\usr\emacs に dict ディレクトリを移動
[Emacs]APEL
インストール
- APEL からダウンロード
- ダウンロードしたファイルを解凍し、makeit.bat を編集する
set PREFIX=c:\usr\emacs set EMACS=%PREFIX%\bin\emacs.exe set LISPDIR=%PREFIX%\site-lisp set DEFAULT_MAKE_ARG=elc
- コンパイル
> makeit.bat
- インストール
> makeit.bat install
[Emacs]sqlite-dump
インストール
動作確認
- sqlite-dump から sqlite-dump.el をダウンロードする
- .emacs に以下を記載
;;; ===== sqlite-dump ===== (autoload 'sqlite-dump "sqlite-dump" nil t) (modify-coding-system-alist 'file "\\.sqlite\\'" 'raw-text-unix) (add-to-list 'auto-mode-alist '("\\.sqlite\\'" . sqlite-dump))
動作確認
- テストファイル作成
> sqlite3.exe test.sqlite SQLite version 3.6.18 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> CREATE TABLE test (id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL); sqlite> INSERT INTO test VALUES (NULL, 'Tokyo'); sqlite> INSERT INTO test VALUES (NULL, 'Osaka'); sqlite> INSERT INTO test VALUES (NULL, 'Nagoya'); sqlite> SELECT * FROM test; 1|Tokyo 2|Osaka 3|Nagoya sqlite> .exit
- Emacs で test.sqlite を開く
BEGIN TRANSACTION; CREATE TABLE test (id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL); INSERT INTO "test" VALUES(1,'Tokyo'); INSERT INTO "test" VALUES(2,'Osaka'); INSERT INTO "test" VALUES(3,'Nagoya'); COMMIT;
- 項目を追加
INSERT INTO "test" VALUES(4,'Sapporo');
- コマンドラインで確認
> sqlite3.exe test.sqlite SQLite version 3.6.18 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> SELECT * FROM test; 1|Tokyo 2|Osaka 3|Nagoya 4|Sapporo
[Emacs]twittering-mode
インストール
操作方法
Table: twittering-mode キーバインド
- twittering-mode から twittering-mode.el をダウンロードする
- trunk/twittering-mode.el のページに行き、一番下にある Download in other formats: Original Format からダウンロードできる。
- ダウンロードした twittering-mode.el を site-lisp の下に移動する
- .emacs に以下を追記
;;; ===== twittering-mode ===== (require 'twittering-mode) (setq twittering-username "ユーザ名") (setq twittering-password "パスワード")
- twittering-mode 開始
M-x twittering-mode
操作方法
Table: twittering-mode キーバインド
キーバインド | コマンド | 機能 |
C-c C-f | twittering-friends-timeline | フレンドタイムラインを表示 |
C-c C-s | twittering-update-status-interactive | つぶやきをポストする |
i | twittering-icon-mode | アイコンモード、テキストモードの toggle |
[Emacs]simple-hatena-mode
必要なもの
インストール
設定
.emacsに以下を追加
メモ
パスワード入力プロンプトが出てくるとのことだったが、どうしてもログインに失敗していた。~/.hatena/ユーザ名 /diary/config.txtにパスワードを記入すると投稿が可能となった。
- Perl
- はてなダイアリーライター はてなダイアリーライター(略称:はてダラ)
- simple-hatena-mode.el: simple-hatena-mode - Emacsのsimple-hatena-mode.el のインストールを参照
インストール
- site-lisp以下にsimple-hatena-modeというディレクトリを作る
- はてなダイアリーライターをhw.plで保存し、simple-hatena-modeディレクトリに置く
- simple-hatena-mode.elをsimple-hatena-modeディレクトリに置く
設定
.emacsに以下を追加
;;; ===== simple-hatena-mode ===== (setq exec-path (cons "c:/usr/perl/bin" exec-path)) (require 'simple-hatena-mode) (setq simple-hatena-default-id "ユーザ名") (setq simple-hatena-bin "c:/usr/emacs/site-lisp/simple-hatena-mode/hw.pl")
メモ
パスワード入力プロンプトが出てくるとのことだったが、どうしてもログインに失敗していた。~/.hatena/ユーザ名 /diary/config.txtにパスワードを記入すると投稿が可能となった。
[Emacs]ZenCoding を使う
インストール
en-coding - Project Hosting on Google Code の Emacs 対応をインストール
動作確認
使用例
en-coding - Project Hosting on Google Code の Emacs 対応をインストール
- EmacsWiki: Zen Coding から zencoding-mode.el をダウンロードする。
- emacs\site-lisp に zencoding-mode.el を置く。
- .emacs に以下を追加
;;; ===== zen-coding === (require 'zencoding-mode) (add-hook 'nxml-mode-hook 'zencoding-mode)
動作確認
div#name.oneと入力して Ctrl + Enter を押すと下記のように変換される。
<div id="name" class="one"> </div>
使用例
a
ここで Ctrl + Enter を押すと<a></a>
html>(head>title)+body
ここで Ctrl + Enter を押すと<html> <head> <title> </title> </head> <body> </body> </html>
table>(thead>tr>td+td)+(tbody>(tr>td+td)*3)
ここで Ctrl + Enter を押すと<table> <thead> <tr> <td> </td> <td> </td> </tr> </thead> <tbody> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> </tr> </tbody> </table>
[Emacs]Astyle を使う
- Artistic Style - Index の Download から AStyle_1.24_windows.zip (2010/10/14 現在) をダウンロードする。
- PATH の通った場所に解凍したファイル内にある AStyle.exe を移動する。
- .emacs に以下を追記
;;; ===== astyle ===== (defun astyle-this-buffer(pmin pmax opt) (interactive "r sInsert options (ex. --mode=c --indent=tab --indent-cases --brackets=linux): ") (message "pmin:%d pmax:%d str:%s" pmin pmax opt) (setq cmd (concat "astyle.exe " opt)) (message "cmd:%s" cmd) (shell-command-on-region pmin pmax cmd (current-buffer) t (get-buffer-create "*Astyle Errors*") t ) )
- バッファを選択して M-x astyle-this-buffer を実行すると astyle.exe に渡す option を聞かれるので入力する。
[Emacs]org-mode
インストール
- Org からダウンロード
- ダウンロードしたファイルを解凍し、c:/usr/emacs 以下に置く
- org-6.13a ディレクトリ内で make を実行する
- .emacs に以下を追加
; === org mode === (setq load-path (cons "c:/usr/emacs/org-6.13a/lisp" load-path)) (load "org.elc") (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
[Emacs]nXML モード
Emacs 23.2 から標準搭載となった nXML モード
初期設定
.emacs に以下を追加する
Table: nXML mode 設定の内容
Schema を設定
emacs/etc/schema に schema ファイルがある
Table: Schema ファイル操作
操作方法
Table: nXML mode 操作方法
初期設定
.emacs に以下を追加する
;;; ===== nXML ===== (add-hook 'nxml-mode-hook (lambda () (setq nxml-slash-auto-complete-flag t) (setq nxml-child-indent 2) (setq indent-tabs-mode nil) (setq tab-width 2) (define-key nxml-mode-map "\r" 'newline-and-indent) ) )
Table: nXML mode 設定の内容
nxml-slash-auto-complete-flag | "</" を入力すると自動で終了 Tag を補完してくれる |
nxml-child-indent | インデント 2 スペース |
indent-tabs-mode | t:インデントはタブで行う, nil:インデントはスペースで行う |
tab-width | タブ幅 2 |
define-key nxml-mode-map "\r" 'newline-and-indent | Enter キーを押すと改行 + インデントが行われるようにする |
Schema を設定
emacs/etc/schema に schema ファイルがある
Table: Schema ファイル操作
C-c C-s C-w | 現在使用中の schema ファイルを表示する。schema が選択されていない場合は "Using vacuous schema" と表示される。 |
C-c C-s C-f | 手動で schema ファイルを指定する。指定すると current directroy に schemas.xml ファイルが作成され、次回からはここで選択した schema ファイルが使用される。 |
操作方法
Table: nXML mode 操作方法
C-RET | "<" 入力後に Tag 補完 |
2013年6月9日日曜日
[Emacs]Emacs 23.1
Windows 上でのコンパイル
Emacs 23.1 が 2009/7/29 にリリースされたので Windows でのコンパイルをしてみた。
備考
22.2.1 で使用していた .emacs にある以下のものが使用できなくなっていたが、まずは起動できた
Emacs 23.1 の IME patch を当てる
Emacs 23.1 が 2009/7/29 にリリースされたので Windows でのコンパイルをしてみた。
- Emacs のソースファイルを Index of /gnu/emacs からダウンロードする
- MinGW (Automated MinGW Installer) を MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net からダウンロードする
- MinGW のインストーラを実行しパッケージをフルインストールする
- MSYS Base System を MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net からダウンロードする
- MSYS のインストーラを実行する
- GnuWin32 Packages から必要となるライブラリをダウンロード・インストールする。それぞれ Setup パッケージをインストールすればライブラリ、ヘッダファイルがインストールできる。
必要となるライブラリは以下のもの。- Xpm
- LibPng
- Zlib
- LibUnGif
- LibJpeg
- LibTiff
- Cygwin など他の実行ファイルが呼び出されないように MinGW, MSYS のみの PATH にしておく
> set PATH=C:\usr\MinGW\bin;c:\usr\msys\bin
- ダウンロードした Emacs のソースファイルを展開する
- 展開した Emacs ディレクトリ下にある nt ディレクトリに移動し、configure.bat を実行する
> cd nt > configure.bat Checking for 'cp'... Checking for 'rm'... Checking whether 'gcc' is available... Checking whether gcc requires '-mno-cygwin'... (中略) config.settings gmake.defs ..\leim\makefile.w32-in 1 個のファイルをコピーしました。 1 個のファイルをコピーしました。 Emacs successfully configured. Run `make' to build, then run `make install' to install.
- mingw32-make.exe を実行する
> mingw32-make.exe [Please ignore a syntax error on the next line - it is intentional] /bin/sh: -c: line 0: unexpected EOF while looking for matching `"' /bin/sh: -c: line 1: syntax error: unexpected end of file Using C:/usr/msys/bin/sh.exe as shell. (中略) mingw32-make.exe[1]: Entering directory `C:/home/emacs-23.1/leim' mingw32-make.exe[1]: Nothing to be done for `all'. mingw32-make.exe[1]: Leaving directory `C:/home/emacs-23.1/leim'
- mingw32-make.exe install を実行すると bin ディレクトリが生成され、そこに runemacs.exe が作成される
- runemacs.exe を実行してバージョンを確認する
備考
22.2.1 で使用していた .emacs にある以下のものが使用できなくなっていたが、まずは起動できた
(require 'fixed-width-fontset) (require 'ntemacs-font)fixed-width-fonset を 23.1.1 では使用しないように .emacs の fixed-width-fonset をロードする箇所を以下のように変更
; fixed-width-fontset ; Emacs 23.1.1 の場合は使用できない (defun load-fixed-width-fontset () (message "This emacs version can support fixed-width-fontset") (require 'fixed-width-fontset) (require 'ntemacs-font)) (message "emacs-version %s" emacs-version) (message "emacs-version %d" (string-to-number emacs-version)) (if (< 22 (string-to-number emacs-version)) (message "This emacs version CANNOT support fixed-width-fontset") (load-fixed-width-fontset))sile-lisp ディレクトリに fixed-width-fontset のディレクトリがあるとロードしにいってしまうので、ディレクトリも削除しておく
Emacs 23.1 の IME patch を当てる
- NTEmacs JP Project プロジェクト日本語トップページ - SourceForge.JP から Emacs-23.1-IME.patch.gz をダウンロードする
- emacs-23.1 を解凍したディレクトリのルート (INSTALL, COPYING, README などがあるディレクトリ) に Emacs-23.1-IME.patch を置く
- patch を当てる
> patch -p3 < Emacs-23.1-IME.patch patching file lib-src/makefile.w32-in patching file lisp/loadup.el patching file nt/configure.bat patching file src/keyboard.c patching file src/w32.c patching file src/w32fns.c patching file src/w32term.c patching file src/w32term.h patching file src/window.c patching file lisp/international/w32-ime.el
patch コマンドのオプションにある -p は patch ファイルで指定されているディレクトリ階層のレベルを指定する。
この patch ファイルには以下のように記載されており、Emacs-23.1 のディレクトリから見ると 3 階層目からの lib-src からが指定したいファイルとなる。そこで -p3 で 3 階層目から使用することを明示する。--- ~/src/emacs-23.1/lib-src/makefile.w32-in 2009-07-30 00:09:40.000000000 +0900 +++ /tmp/emacs-23.1/lib-src/makefile.w32-in 2009-08-03 16:54:16.990792800 +0900
patch コマンド中に nt/configure.bat で下記のエラーが出てくる。これは configure.bat の改行コードが CR+LF であるが、patch の方は LF となっているために一致箇所がないと判定されてしまう。その場合は元の configure.bat をエディタで開いて改行コードを LF にして保存すればエラーが解消される。patching file nt/configure.bat Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file nt/configure.bat.rej
- nt ディレクトリで configure.bat を実行する
> configure.bat --with-gcc --enable-w32-ime --no-cygwin --cflags -D_UNICODE --cflags -DRECONVERSION --prefix=c:/install
RECONVERSION フラグを付けてコンパイルすると入力済み文字列に対して "変換" ボタンを押した時に再変換が可能となる
"_UNICODE" フラグを付けてコンパイルすると Unicode 版を使用可能となる。
"--prefix" でインストール先ディレクトリを指定する - mingw32-make.exe を実行する
mingw32-make.exe bootstrap をしたところで elc ファイルが一旦削除され、その後再度作成される。> mingw32-make.exe bootstrap > mingw32-make.exe info > mingw32-make.exe > mingw32-make.exe install
- .emacs の編集
.emacs ロード時に以下のように表示される。これは php-mode のロードで問題が発生してるようだ。
.emacs の該当箇所を requrire から autoload に変更すれば Warning はでなくなる;;; ====== php ===== ;(require 'php-mode) (autoload 'php-mode "php-mode" "Major mode for editing php code." t)
[Emacs]Emacs 各バージョン
Emacs 23.4
Emacs 2.33
Emacs 23.2.1
- Windows7 で Microsoft IME を使うとインラインで日本語入力ができない
- Google 日本語入力を使ってもインラインで日本語入力ができない
Emacs 2.33
- Windows7 で Microsoft IME を使うとインラインで日本語入力ができない
- Google 日本語入力を使えばインラインで日本語入力ができるようになった
Emacs 23.2.1
- 日本語入力時のフォーカスが IME patch 不要で入力位置に出るようになった
- CEDET のサポート
参照: A Gentle introduction to Cedet
まずは M-x semantic-mode で開始する- M-x semantic-ia-complete-symbol
Completion バッファが表示される
- M-x semantic-ia-complete-tip
マウスカーソルがある場所に吹き出しで表示される
- M-x samantic-complete-analyze-inline
Completion バッファが表示される
C-c , SPC でも実行可能
- 入力していくと候補が絞られ、TAB で補完することができる
- M-x semantic-analyze-proto-impl-toggle
ヘッダファイルの関数定義で実行すると関数の実装箇所に飛ぶことができる。
関数の実装内でこのコマンドを実行するとヘッダファイルの定義に飛ぶ。
- M-x semantic-decoration-include-visit
include 定義ので上このコマンドを実行するとヘッダファイルに飛ぶ。 - M-x semantic-idle-completions-mode
または -> を入力したところでしばらく操作をしていないと補完候補が出てくる
TAB で次の候補へ切り替えることができる
- M-x semantic-speedbar-analysis
Speedbar が表示され、そこに補完候補が出てくる
クラス変数入力前の状態
クラス変数を入力すると属する method が表示される
- M-x semantic-symref-symbol
GTAG を実行した後で関数上でこのコマンドを実行すると関数が使用されている箇所を表示できる。
- M-x semantic-ia-fast-jump
関数が使用されている場所でこのコマンドを実行すると関数の実装箇所に飛ぶ。 - M-x semantic-complete-jump-local
関数またはローカル変数をしているすると、その定義の箇所に飛ぶ。
- M-x semantic-ia-complete-symbol
[Emacs]DocBook XML モード
- DocBook XML Mode for GNU Emacs | Download DocBook XML Mode for GNU Emacs software for free at SourceForge.net から docbook-xml-mode.x.x.tar.gz をダウンロードする
- ダウンロードしたファイルを解凍し、emacs/site-lisp 以下に置く
- .emacs に以下を追記
;;; ===== DocBook XML ===== (load "docbook-xml-mode.el")
- docbook ファイルを開いて M-x docbook-xml-mode を実行すると DocBook XML モードが動き出す
[Python]TeX の数式を png に出力するスクリプト
[TeX] 数式文字列を png ファイルにして出力する の手順を python スクリプトで実行できるようにする。
実行結果
# -*- coding:utf-8 -*- import os import optparse ######################################################################## ## Check options ######################################################################## def checkOption(opt): if opt == None: parser.print_help() exit() skeleton = """ \\documentclass[11pt,a4paper]{report} \\pagestyle{empty} \\begin{document} \\%s{$%s$} \\end{document} """ parser = optparse.OptionParser() parser.add_option("-t", "--tex", dest="tex", help="tex format", metavar="[TEX]") parser.add_option("-s", "--size", dest="size", help="Font size (0-9)", default="4", metavar="[SIZE]") parser.add_option("-o", "--output", dest="out", help="output file name prefix", metavar="[OUT]") (options, args) = parser.parse_args() checkOption(options.tex) checkOption(options.size) checkOption(options.out) print "tex : %s" % (options.tex) print "size : %s" % (options.size) print "output: %s" % (options.out) # フォントサイズを決める if options.size == "0": fontsize = "tiny" elif options.size == "1": fontsize = "scriptsize" elif options.size == "2": fontsize = "footnotesize" elif options.size == "3": fontsize = "small" elif options.size == "4": fontsize = "normalsize" elif options.size == "5": fontsize = "large" elif options.size == "6": fontsize = "Large" elif options.size == "7": fontsize = "LARGE" elif options.size == "8": fontsize = "huge" elif options.size == "9": fontsize = "Huge" else: fontsize = "normalsize" texdata = skeleton % (fontsize, options.tex) print texdata outputBase = options.out texFilename = outputBase + ".tex" dviFilename = outputBase + ".dvi" pngFilename = outputBase + ".png" fd = open(texFilename, "w") fd.write(texdata) fd.close() os.system("platex %s" % (texFilename)) os.system("dvipng %s -o %s -T tight" % (dviFilename, pngFilename)) print "Remove temporary files" print " %s, %s, %s, %s" % (texFilename, dviFilename, outputBase + ".log", outputBase + "aux") os.remove(texFilename) os.remove(dviFilename) os.remove(outputBase + ".log") os.remove(outputBase + ".aux")
実行結果
python tex2png.py -t "y=ax^{2}" -o y_ax2
python tex2png.py -t "y=ax^{2}" -s 1 -o y_ax2_1
python tex2png.py -t "y=ax^{2}" -s 9 -o y_ax2_9
[Python]os モジュール
スクリプトを動作させている OS を区別する
os モジュールの name を使う
Windows XP で動作させた場合
Fedora13 で動作させた場合
matplotlib で日本語フォントを使う場合、Windows と Linux ではフォントの指定先が異なるので次のように分ける。
os モジュールの name を使う
# -*- coding:utf-8 -*- import os if os.name == "nt": print "OS name is %s (Windows XP)" % (os.name) elif os.name == "posix": print "OS name is %s (Linux)" % (os.name) else: print "OS name is %s" % (os.name)
Windows XP で動作させた場合
> python test.py OS name is nt (Windows XP)
Fedora13 で動作させた場合
$ python test.py OS name is posix (Linux)
matplotlib で日本語フォントを使う場合、Windows と Linux ではフォントの指定先が異なるので次のように分ける。
# フォントを指定して日本語表示 if os.name == "nt": # Windows の場合 prop = fm.FontProperties(fname='C:\\WINDOWS\\Fonts\\ipamp.ttf') else: # Linux の場合 prop = fm.FontProperties(fname='/usr/share/fonts/ipa-pmincho/ipamp.ttf') plt.xticks(ind + width / 2., (u'東京 1 月', u'東京 8 月', u'那覇 1 月', u'那覇 8 月'), fontproperties=prop)
[Python]Logger
ログファイルを作成する時は logging モジュールを使う
出力結果 (test.log)
ログレベルを設定, ログファイルに追記する場合
出力結果 (test.log)
# -*- coding: utf-8 -*- import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename='./test.log', filemode='w') logging.debug("A debug message") logging.info("An info message") logging.warning("A warning message") logging.error("An error message") logging.critical("A critical message") logging.exception("An exception message")
出力結果 (test.log)
2011-02-11 14:41:44 DEBUG A debug message 2011-02-11 14:41:44 INFO An info message 2011-02-11 14:41:44 WARNING A warning message 2011-02-11 14:41:44 ERROR An error message 2011-02-11 14:41:44 CRITICAL A critical message 2011-02-11 14:41:44 ERROR An exception message None
ログレベルを設定, ログファイルに追記する場合
# -*- coding: utf-8 -*- import logging logging.basicConfig(level=logging.WARNING, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', filename='./test.log', filemode='a') logging.debug("A debug message") logging.info("An info message") logging.warning("A warning message") logging.error("An error message") logging.critical("A critical message") logging.exception("An exception message")
出力結果 (test.log)
2011-02-11 14:42:45 WARNING A warning message 2011-02-11 14:42:45 ERROR An error message 2011-02-11 14:42:45 CRITICAL A critical message 2011-02-11 14:42:45 ERROR An exception message None
[Python]Flickr API
インストール
Search
Upload
スクリプトを実行すると Upload を許可しても良いかの確認画面が表示される
- Scripts/easy_install.exe を使って flickrapi module をインストールする
> cd Python25/Scripts > easy_install.exe flickrapi Reading http://pypi.python.org/simple/flickrapi/ Reading http://flickrapi.sf.net/ Reading http://stuvel.eu/projects/flickrapi Best match: flickrapi 1.4.2 Downloading http://pypi.python.org/packages/2.5/f/flickrapi/flickrapi-1.4.2-py2.5.egg#md5=d2312c2ee10b838afe7d607b51b969d6 Processing flickrapi-1.4.2-py2.5.egg Moving flickrapi-1.4.2-py2.5.egg to python25\lib\site-packages Adding flickrapi 1.4.2 to easy-install.pth file Installed python25\lib\site-packages\flickrapi-1.4.2-py2.5.egg Processing dependencies for flickrapi Finished processing dependencies for flickrapi
- Sign in to Yahoo! から API Key と Secret code を入手する
- 自分のページから Tag を指定して検索する
自分のユーザー ID は Flickr の photostream を開いた時に URL に表示される。
http://www.flickr.com/photos/************/
の *** の部分
Search
# -*- coding: utf-8 -*- # Flickr API テストスクリプト (Search) import flickrapi api_key = '入手した API key' flickr = flickrapi.FlickrAPI(api_key) my_user_id = '自分のユーザー ID' search_tags = '検索する Tag' for photo in flickr.walk(user_id=my_user_id, tags=search_tags): print "title: ", photo.get('title') print "id: ", photo.get('id') print "secret: ", photo.get('secret') print "URL: http://www.flickr.com/photos/%s/%s/" % (my_user_id, photo.get('id'))取得できる結果のパラメータ (photo.get() に渡している引数) は Flickr Services: Flickr API: flickr.photos.search の Example Response 参照
Upload
スクリプトを実行すると Upload を許可しても良いかの確認画面が表示される
# -*- coding: utf-8 -*- # Flickr API テストスクリプト (Upload) import flickrapi api_key = '入手した API Key' api_secret = '入手した API secret code' flickr = flickrapi.FlickrAPI(api_key, api_secret) # Web ブラウザに Flickr 画面が表示され、このスクリプトから upload をしても良いか許可を求められる (token, frob) = flickr.get_token_part_one(perms='write') if not token: raw_input("Press ENTER after you authorized this program") flickr.get_token_part_two((token, frob)) u_filename = 'test.jpg' u_title = 'test' flickr.upload(filename=u_filename, title=u_title)
[Python]ディレクトリ
ディレクトリ作成
ディレクトリ作成には os モジュールの mkdir() を使う
実行結果
ディレクトリ削除
ディレクトリ削除には os モジュールの rmdir() を使う
実行結果
ディレクトリ内のファイル走査
ディレクトリ作成には os モジュールの mkdir() を使う
# -*- coding: utf-8 -*- # ディレクトリ作成 import os import os.path target = "test" if os.path.exists("./" + target) == True: print "%s has already existed." % (target) else: os.mkdir(target)
実行結果
$ ls mkdir.py rmdir.py $ python mkdir.py $ python mkdir.py test has already existed. $ ls mkdir.py rmdir.py test
ディレクトリ削除
ディレクトリ削除には os モジュールの rmdir() を使う
# -*- coding: utf-8 -*- # ディレクトリ削除 import os target = "test" if os.path.exists("./" + target) == True: os.rmdir("test") else: print "%s does not exist." % (target)
実行結果
$ ls mkdir.py rmdir.py test $ python rmdir.py $ python rmdir.py test does not exist. $ ls mkdir.py rmdir.py
ディレクトリ内のファイル走査
- os.path.walk
Current directory の中身を走査して jpg ファイルを選び出す# -*- coding: utf-8 -*- import os import re def callback(arg, dirname, filenames): print "dirname: ", dirname for file in filenames: print file if re.search("jpg$", file): print "---> This file is JPEG" arglist = [] os.path.walk('./', callback, arglist)
実行結果> python dir.py dirname: ./ aaa.txt bbb.txt ccc.jpg ---> This file is JPEG dir.py
- os.walk
Python 2.3 以降では os.path.walk ではなく os.walk を使う# -*- coding: utf-8 -*- import os top = '.' print "--- os.walk(top) ---" for root, dirs, files in os.walk(top): for name in files: print "File: %s" % (name) for name in dirs: print "Dir: %s" % (name) # リストの並び順が変わる print "--- os.walk(top, topdown=False) ---" for root, dirs, files in os.walk(top, topdown=False): for name in files: print "File: %s" % (name) for name in dirs: print "Dir: %s" % (name)
実行結果> python dir2.py --- Recursive os.walk(top) --- File: aaa.txt File: bbb.txt File: ccc.jpg File: dir.py File: dir2.py Dir: test File: aaa.txt --- Non-recursive os.walk(top, topdown=False) --- File: aaa.txt File: aaa.txt File: bbb.txt File: ccc.jpg File: dir.py File: dir2.py Dir: test
- os.listdir
# -*- coding: utf-8 -*- import os top = '.' # 指定した path に含まれる要素のリストを作成する ls = os.listdir(top) print ls for name in ls: print name
出力結果> python list.py ['aaa.txt', 'bbb.txt', 'ccc.jpg', 'dir.py', 'dir2.py', 'list.py', 'test'] aaa.txt bbb.txt ccc.jpg dir.py dir2.py list.py test
[Python]CSV
CSV ファイル読み込み
CSV ファイルを読み込むには csv モジュールを使用する。
Example: CSV 読み込みスクリプト (test00.py)
Example: csv ファイル (tokyo2010.csv)
実行結果
CSV ファイルへの出力
Example: CSV への出力スクリプト (test01.py)
出力結果
CSV ファイルを読み込むには csv モジュールを使用する。
Example: CSV 読み込みスクリプト (test00.py)
# -*- coding:utf-8 -*- import csv f = open("tokyo2010.csv", "rb") reader = csv.reader(f) for row in reader: print row try: temp = float(row[3]) if temp >= 15: # 数値に変換して 15 ℃以上であれば表示 print " ---> Over 15 degrees C (%.1f)" % temp except ValueError: # float 変換できなければこちらに入る print "Not float" # 先頭に戻る print "------------------------------------" f.seek(0) for row in reader: print row f.close()
Example: csv ファイル (tokyo2010.csv)
Month,Ave. Atmosphere Pressure(hPa),Precipitation(mm),Ave. Daily Temperature(degree C),Ave. Humidity(%),Ave. Wind Speed(m/s),Sunshine Duration(h) 1,1010.2,9,7,41,2.7,221.9 2,1012.6,115,6.5,60,2.8,118.3 3,1012.7,143.5,9.1,61,3.2,139.8 4,1013.6,214,12.4,62,3.1,139.9 5,1007.3,114,19,60,3.2,198.8 6,1007.1,108,23.6,67,2.9,162.5 7,1005.9,70,28,70,3.3,182.7 8,1009.7,27,29.6,67,3.4,222.6 9,1008.3,428,25.1,68,2.9,165.3 10,1012.7,211,18.9,68,2.5,81.4 11,1012.3,94.5,13.5,56,2.4,158.9 12,1005.1,145.5,9.9,50,2.7,194.9
実行結果
$ python test00.py ['Month', 'Ave. Atmosphere Pressure(hPa)', 'Precipitation(mm)', 'Ave. Daily Temperature(degree C)', 'Ave. Humidity(%)', 'Ave. Wind Speed(m/s)', 'Sunshine Duration(h)'] Not float ['1', '1010.2', '9', '7', '41', '2.7', '221.9'] ['2', '1012.6', '115', '6.5', '60', '2.8', '118.3'] ['3', '1012.7', '143.5', '9.1', '61', '3.2', '139.8'] ['4', '1013.6', '214', '12.4', '62', '3.1', '139.9'] ['5', '1007.3', '114', '19', '60', '3.2', '198.8'] ---> Over 15 degrees C (19.0) ['6', '1007.1', '108', '23.6', '67', '2.9', '162.5'] ---> Over 15 degrees C (23.6) ['7', '1005.9', '70', '28', '70', '3.3', '182.7'] ---> Over 15 degrees C (28.0) ['8', '1009.7', '27', '29.6', '67', '3.4', '222.6'] ---> Over 15 degrees C (29.6) ['9', '1008.3', '428', '25.1', '68', '2.9', '165.3'] ---> Over 15 degrees C (25.1) ['10', '1012.7', '211', '18.9', '68', '2.5', '81.4'] ---> Over 15 degrees C (18.9) ['11', '1012.3', '94.5', '13.5', '56', '2.4', '158.9'] ['12', '1005.1', '145.5', '9.9', '50', '2.7', '194.9'] ------------------------------------ ['Month', 'Ave. Atmosphere Pressure(hPa)', 'Precipitation(mm)', 'Ave. Daily Temperature(degree C)', 'Ave. Humidity(%)', 'Ave. Wind Speed(m/s)', 'Sunshine Duration(h)'] ['1', '1010.2', '9', '7', '41', '2.7', '221.9'] ['2', '1012.6', '115', '6.5', '60', '2.8', '118.3'] ['3', '1012.7', '143.5', '9.1', '61', '3.2', '139.8'] ['4', '1013.6', '214', '12.4', '62', '3.1', '139.9'] ['5', '1007.3', '114', '19', '60', '3.2', '198.8'] ['6', '1007.1', '108', '23.6', '67', '2.9', '162.5'] ['7', '1005.9', '70', '28', '70', '3.3', '182.7'] ['8', '1009.7', '27', '29.6', '67', '3.4', '222.6'] ['9', '1008.3', '428', '25.1', '68', '2.9', '165.3'] ['10', '1012.7', '211', '18.9', '68', '2.5', '81.4'] ['11', '1012.3', '94.5', '13.5', '56', '2.4', '158.9'] ['12', '1005.1', '145.5', '9.9', '50', '2.7', '194.9']
CSV ファイルへの出力
Example: CSV への出力スクリプト (test01.py)
# -*- coding:utf-8 -*- import csv f = open("out.csv", "wb") writer = csv.writer(f) row = ["Tokyo", 1, 7.0] writer.writerow(row) row = ["Tokyo", 8, 29.6] writer.writerow(row) row = ["Naha", 1, 16.8] writer.writerow(row) row = ["Naha", 8, 28.9] writer.writerow(row) f.close()
出力結果
Tokyo,1,7.0 Tokyo,8,29.6 Naha,1,16.8 Naha,8,28.9改行コードを LF (\n) にする場合は cvs.writer() に lineterminator 引数で指定する。
writer = csv.writer(f, lineterminator="\n")
登録:
投稿 (Atom)