Jun Araki’s Blog
随所に主となれば立処皆真なり

2009 年 4 月 9 日

Python での日本語文字コード判定

Filed under: Programming Language,Software,Tips — araki @ 12:06 AM

EUC-JP、Shift_JIS、UTF-8 の文字コードが混在したテキストを解析する機会があって、その時にいくつか方法があったのですが、python の pykf と chardet を使って、文字コードを自動判定して全て EUC-JP に統一するというスクリプトを書きました。chardet は短い文字列に弱いらしいので second guess にしました。

# -*- coding: utf-8 -*-

import sys
import pykf
import chardet

def main():
    f = open(sys.argv[1])

    line = f.readline()
    while line:
        code_changed_line = to_euc(line)
        print code_changed_line
        line = f.readline()

    f.close()

def to_euc(text):
    c = pykf.guess(text)
    sc = second_guess(text)

    if c is pykf.EUC:
        return text
    elif c is pykf.UTF8:
        try:
            return unicode(text, 'utf8').encode('euc-jp')
        except:
            return text
    elif c in (pykf.SJIS, pykf.JIS):
        try:
            return unicode(text, 'utf8').encode('euc-jp')
        except:
            return pykf.toeuc(text)
    else:
        return text

def second_guess(text):
    sc = chardet.detect(text)
    return sc

if __name__ == "__main__":
    argc = len(sys.argv)
    if (argc != 2):
        print "Usage: python %s filename" % sys.argv[0]
        sys.exit(1)

    main()

インストールの手順は以下の通りです。手順自体は簡単ですが、pykf についてはダウンロード可能なサイトがいくつかあり、中にはモジュールが足りずにインストールが失敗するもの (例えば、SourceForge.jp 上のものなど) もあったため、少々厄介でした。

$ wget http://archives.sertice.org/devs/linux/cvs/pykf-0.3.4.tgz
$ tar xvfz pykf-0.3.4.tgz
$ cd pykf-0.3.4
$ python setup.py build
$ python setup.py install
$ wget http://chardet.feedparser.org/download/chardet-1.0.1.tgz
$ tar xvfz chardet-1.0.1.tgz
$ cd chardet-1.0.1
$ python setup.py install

参考にさせていただいたサイトをメモしておきます。

2009 年 3 月 21 日

Debian lenny/stable で platex 環境構築

Filed under: Software — araki @ 9:39 PM

今日は困ったことに Debian lenny/sid で、X のログイン画面からログインしてもその後メニューバーも含めて画面に何も現れない現象に悩まされました。昨日まで書いていたある原稿の続きを進めたかったので、結局 Debian lenny/stable をインストールして真っ新な状態から platex 環境を再構築しました。原稿自体はリポジトリにコミットしていたので、それは問題ありませんでした。

lenny/sid での構築手順は以前のポストに書いていたので、基本的にはそれを踏襲しましたが、一部そのままでは入らないパッケージもあったり、他にも必要な設定があったりしたのでなかなか大変でした。手順を再掲します。

まず、lenny/sid の時と違ったのは (デフォルトの sources.list では) xdvi が apt-get でのインストール対象から外れていたことです。

$ sudo apt-get update

platex 環境関連

$ sudo apt-get install ptex-bin yatex okumura-clsfiles

ビューア関連

$ sudo apt-get install gs gs-esp xpdf xpdf-japanese dvipdfmx xdvik-ja

日本語関連

$ sudo apt-get install kinput2-canna kinput2-common language-env anthy scim-anthy
$ sudo apt-get install ttf-kochi-gothic ttf-kochi-mincho
$ sudo apt-get install xfonts-a12k12 xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

この時点では dvipdfmx での PDF 生成がうまくいかず、Could not open config file “fontmapsx”. と Could not find encoding file “H”. というエラーが出ます。どちらも結構有名なエラーらしいですね。前者の方は、これが正しい対処法ではないかも知れませんが、以下でエラーは消えます。

$ sudo ln -s /etc/texmf/dvipdfm /etc/texmf/dvipdfmx

次に後者への対処ですが、これには CMap ファイルのインストールと設定をします。まず、/etc/apt/sources.list に以下の 2 行を追加して apt-get update を実行します。

deb http://ftp.jp.debian.org/debian/ lenny non-free contrib
deb-src http://ftp.jp.debian.org/debian/ lenny non-free contrib

この後に CMap ファイルをインストールします。

$ sudo apt-get install gs-cjk-resource cmap-adobe-gb1 cmap-adobe-japan1 cmap-adobe-japan2

そして、/etc/texmf/texmf.d/80DVIPDFMx.cnf に以下を記述します。

CMAPINPUTS=.;/usr/share/fonts/cmap/adobe-japan1//;/usr/share/fonts/cmap/adobe-japan2//;/usr/share/fonts/cmap/adobe-gb1//;/usr/share/fonts/cmap/gs-cjk-resource//

最後に texmf を更新します。

$ sudo update-texmf

ここまですると、ようやく dvi 経由の pdf 生成/表示 (tex -> dvi -> pdf) が可能です。

$ platex foo.tex; platex foo.tex; dvipdfmx foo.dvi; xpdf foo.pdf

何も知らない状態からここまでするのは結構大変なので、例えば Ubuntu の latex-env-ja や latex-extra-ja のような一括パッケージなどでもう少し簡便に platex 環境を構築できるようになると有り難いのですが、それは今後に期待しておきます。参考にさせていただいたサイトを以下にメモしておきます。

Stow によるパッケージ管理

Filed under: Software — araki @ 3:12 PM

rpm や apt などの独自のパッケージ管理機構を持たない Linux OS を使っている時はもちろんのこと、そのような独自のパッケージ管理機構を持つ Linux OS を使っている時でもパッケージを tar ボールなどのソースからインストールするという機会はよくあると思います。例えば、新しいバージョンのパッケージを試したいが、まだ自分の使っているディストリビューション用のパッケージが用意されていない時などです。

そういった tar ボール型のパッケージも rpm や apt などのパッケージ管理システムでするのと同様に管理したい時 (例えばパッケージのアップグレードや削除など) に便利なのが Stow です。ダウンロードは GNU のサイトからできます。1.3.3 が出たのがかなり前 (2002 年 1 月) なので有名なツールなのかも知れませんが、私は最近知りました。ちなみに、”stow” という単語は「しまい込む、詰め込む」という意味です。

まず stow をインストールします。今回は /usr/local/stow 下にインストールしました。

$ tar xvfz stow-1.3.3.tar.gz
$ cd stow-1.3.3
$ ./configure
$ make
$ sudo make install

ここでは例として、autoconf-2.63.tar.gz を Stow に入れてインストールします (autoconf のインストールに必要な awk, perl, m4 などはインストール済みとします)。

$ tar xvfz autoconf-2.63.tar.gz
$ cd autoconf-2.63
$ ./configure --prefix=/usr/local/stow/autoconf-2.63
$ make
$ sudo make install

次に、Stow を利用して autoconf-2.63 に対応するシンボリックリンクを /usr/local/bin に作成します。これにより、autoconf 2.63 を利用できるようになります。

$ cd /usr/local/stow/autoconf-2.63
$ sudo stow -t /usr/local/bin/ bin
$ ls -ltr /usr/local/bin
lrwxrwxrwx 1 root root      33 2009-03-21 15:05 ifnames -> ../stow/autoconf-2.63/bin/ifnames
lrwxrwxrwx 1 root root      36 2009-03-21 15:05 autoupdate -> ../stow/autoconf-2.63/bin/autoupdate
lrwxrwxrwx 1 root root      34 2009-03-21 15:05 autoscan -> ../stow/autoconf-2.63/bin/autoscan
lrwxrwxrwx 1 root root      36 2009-03-21 15:05 autoreconf -> ../stow/autoconf-2.63/bin/autoreconf
lrwxrwxrwx 1 root root      34 2009-03-21 15:05 autom4te -> ../stow/autoconf-2.63/bin/autom4te
lrwxrwxrwx 1 root root      36 2009-03-21 15:05 autoheader -> ../stow/autoconf-2.63/bin/autoheader
lrwxrwxrwx 1 root root      34 2009-03-21 15:05 autoconf -> ../stow/autoconf-2.63/bin/autoconf
$ which autoconf
/usr/local/bin/autoconf
$ autoconf -V
autoconf (GNU Autoconf) 2.63
Copyright (C) 2008 Free Software Foundation, Inc.
(以下、略)

参考にしたサイトを以下にメモしておきます。2 番目のサイトがよくまとまっています。

2009 年 2 月 27 日

.emacs の見直し

Filed under: Software — araki @ 11:41 PM

他人の .emacs を見るのは楽しいものです。その人の Emacs へのこだわりが分かったり、もっと早く知っておけば良かったと思う設定もあったりします。たまに自分の .emacs を振り返ってみるのも面白いです。以前は便利かも知れないと思って設定したものでも、後から見るとほとんど使っていなかったりします。

最近 .emacs を振り返る機会があったので、今の私にとって最低限必要な設定をメモしておきます。Emacs のバージョンは 22.1.50.1 です。

;; 起動時にスタートアップ画面を表示しない
(setq inhibit-startup-message t)

;; メニューバーを非表示にする
(menu-bar-mode -1)

;; ツールバーを非表示にする
(tool-bar-mode -1)

;; タイトルバーにファイル名を表示する
(setq frame-title-format (format "emacs@%s : %%f" (system-name)))

;; "yes or no" の代わりに "y or n" の省略形を使用する
(fset 'yes-or-no-p 'y-or-n-p)

;; 括弧を強調表示する
(show-paren-mode t)

;; カーソル位置の行番号を表示する
(line-number-mode t)

;; カーソル位置の列番号を表示する
(column-number-mode t)

;; 時刻を表示する
(setq display-time-day-and-date t)
(setq display-time-24hr-format t)
(display-time)

;; 1 行ずつスムーズにスクロールする
(setq scroll-step 1)

;; スクロールバーを右側に表示する
(set-scroll-bar-mode 'right)

;; バッファの末尾で新たな行を追加しない
(setq next-line-add-newlines nil)

;; 行頭で行削除 kill-line (C-k) したら改行も含めて行全体を削除する
(setq kill-whole-line t)

;; 行数を指定してジャンプする (goto-line)
(global-set-key "\C-l" 'goto-line)

;; タブを使用せず、スペースを使用する
(setq-default indent-tabs-mode nil)

;; リージョンをハイライト表示する
(setq transient-mark-mode t)

;; font-lock-mode (色の設定等) を有効にする
(global-font-lock-mode t)

;; 半角スペースや全角スペースなどを色付け表示する
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-1 '((t (:background "dark turquoise"))) nil)
(defface my-face-b-2 '((t (:background "cyan"))) nil)
(defface my-face-b-2 '((t (:background "SeaGreen"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
(font-lock-add-keywords
major-mode
'(
(" " 0 my-face-b-1 append)
("\t" 0 my-face-b-2 append)
("[ ]+$" 0 my-face-u-1 append)
)))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))))

;; 圧縮されたファイルも編集できるようにする
(auto-compression-mode t)

;; クリップボードを他のアプリケーションと共用にする
(setq x-select-enable-clipboard t)

;; リージョンをコメントアウトする
(global-set-key "\C-co" 'comment-region)

;; リージョンのコメントアウトを解除する
(global-set-key "\C-cr" 'uncomment-region)

;; ファイル名を補完する時に大文字と小文字を区別しない
(setq read-file-name-completion-ignore-case t)

;; 文字コードを設定する
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)

[2014.1.21 追記] 文字コードに関する設定を追加
[2010.9.14 追記] タイトルバーに関する設定とファイル名の補完に関する設定を追加
[2009.11.29 追記] メニューバーとツールバーの非表示、クリップボード、リージョンのコメントアウトに関する設定を追加
[2009.10.17 追記] リージョンのハイライトに関する設定を追加
[2009.6.10 追記] global-font-lock-mode と auto-compression-mod に関する設定を追加

2008 年 12 月 29 日

Emacs で翻訳環境を整える

Filed under: Software,Tips — araki @ 11:43 PM

最近ようやく少し時間が取れたので、以前から気になっていた Emacs での翻訳環境を整えてみました。参考にさせていただいたサイトは以下です。試した環境は、Emacs 22.1.50.1@Ubuntu 8.04 (LTS) です。

1) po-mode をインストール
po ファイルを修正する場合は入れておくと便利です。

$ sudo apt-get install gettext-el

2) text-translator によりネット上の翻訳サービスを利用
Google などのテキスト翻訳サービスを提供するウェブサイトを利用して翻訳を行う elisp をインストールします。サイトの更新はかなり前に停止しているようですが、elisp 自体は問題なく動きました。インストール後に .emacs に以下を記述します。

(require 'text-translator)
;;翻訳キー設定
(global-set-key "\C-xt" 'text-translator)
(global-set-key "\C-x\M-T" 'text-translator-translate-last-string)

翻訳したい文字列を選択してコマンドを実行すると、ウィンドウの下の方に翻訳結果の文字列が表示されます。英日だけでなく、日英など各翻訳サービスに付随する翻訳が可能です。各々の翻訳サービスの機械翻訳の質はまだ高くないですが、ブラウザをいちいち見たりせずに済むので翻訳の手助けにはなりそうです。

2008 年 11 月 26 日

さくらのレンタルサーバへ移行

Filed under: Server-related,Software — araki @ 10:43 PM

最近本サイトの可用性を上げる必要性に迫られたので、自宅サーバからさくらのレンタルサーバへ移行しました。自宅サーバで本サイトを運用している時は DDNS を使用していたのですが、やはり時折 DNS の更新が遅いために (特に週末にかけて) 長くて 1 日程度落ちている時もありました。早く ISP の固定 IP サービスが無料程度の価格帯になるよう願っています。レンタルサーバでも少なくともシェル操作は必要だったので、スタンダードプランにしました。年間一括で 5,000 円を支払いました。その数日後に、料金の変更無しに容量が 1GB から 3GB に増強されるという連絡が届きました。どうもついていたようです。

自宅サーバでなくなったのでやれることの自由度が落ち、OS も Debian でなくなったのが残念ですが、しばらくはこちらで運用します。自宅サーバは別用途に使おうと思います。

サーバ移行後の作業をメモしておきます。WordPress のバージョンが上がり (2.0.10 -> 2.6.3)、かなり使い易くなりました。

  • MySQL データベースの作成 (さくらのコントロールパネルより実施)
  • Emacs のインストール
  • WordPress のインストールと設定 (プラグインを含む)
  • WordPress のデータ移行
  • AWStats のインストールと設定
  • Cron の設定 (さくらのコントロールパネルより実施)
  • メールユーザの作成
  • DNS 切替
  • メール送受信の確認

2008 年 8 月 28 日

Flash のデバッガ

Filed under: Software — araki @ 7:38 AM

最近 Flash をいじる機会があったので、Flash(ActionScript) のデバッガをメモしておきます。まだ使い切れていないので、これから良し悪しを見てみようと思います。

  • Flash Player Debugger: ブラウザまたはデスクトップで SWF ファイルを実行しながら、各種ツールを用いてデバッグが可能。
  • FlashTracer: Flash の trace を表示するための Firefox プラグイン。
  • flash-thunderbolt: Firebug からコマンドベースで操作。

2008 年 5 月 10 日

コンピュータ将棋が人間を破るということの正確さ

Filed under: Events,Hardware,Software — araki @ 10:15 PM

先週末、第 18 回世界コンピュータ将棋選手権にて優勝プログラムと準優勝プログラムがそれぞれ平手戦でアマトップの実力者を破りました。この事実はあまたのニュースで取り上げられていますが、これによってコンピュータ将棋がアマのレベルを越えた、というのはやや短絡的であり、言い過ぎであるような気がしています。

この出来事の要因には、CPU などのハードウェア上の進歩や学習アルゴリズムなどのソフトウェア上の改良も当然ながら有りますが、エキシビジョンマッチ故の人間に有利なルールや対局場所の雰囲気なども有ったと思います。具体的には、ルールについては持ち時間 15 分、切れたら 30 秒の秒読みという持ち時間に関するルールがあり、これはアマトップと言っても十分に実力を発揮する程の思考時間ではないと思われます。対局場所については、コンピュータ将棋の開発者やそのマシンが集う大部屋での対戦であったこと、また秒読みについては激指戦をネット中継で見る限りアマトップの方のすぐ隣りの席で読まれていたことから、アマトップの方にかなりのプレッシャーが有ったことは容易に想像がつきます。

対局後には、準優勝プログラムの作者棚瀬さんが、現在のコンピュータ将棋にも弱点があって、その弱点を突くような指し方をすればアマでも勝つことができるという意味のことを仰っていました。実対局では、コンピュータ将棋に対してがっぷり四つに組んでから戦うという流れでしたが、それはむしろコンピュータの得意な戦略であり、例えば現在のコンピュータ将棋の主たる弱点である序盤に攻撃を仕掛けるような戦略を採れば、アマであっても勝機はまだ十分にあるということかと思います。

もちろん、この対局はコンピュータ将棋の大会のエキシビジョンマッチであるので、上記の環境面については仕方が無い部分もあるかと思いますが、新聞記事などのニュースの多くにはこれらのことは省略されているので、その読者は記事を読んで短絡的にコンピュータ将棋がアマのレベルを越えたという思い違いをし易そうであるという意味で、いささか乱暴な印象を受けます。

しかしながら、その厳密性や正確性はさておき、現在のコンピュータ将棋のトップがアマトップと同程度の実力を持つということは事実であると言えます。さらに、このような公の場で誰々が誰々に勝った、負けたということは、細かな諸条件が無視され得る程に誰の目にも明らかな事実であり、この出来事はコンピュータ将棋の歴史に明確に刻まれていくものなのでしょう。

ちなみに、今回のこの出来事は、コンピュータ将棋は既にアマトップを破ったのだから、次にコンピュータ将棋が対戦すべき人間はプロ棋士になるでしょう、という分かり易い論理展開の根拠になり得ますが、将棋の文化という側面からも、その前に、エキシビジョンではないコンピュータ将棋と人間の対局について勝負としての公平さや厳密さを議論する契機になって欲しいと個人的には願っています。

2008 年 1 月 26 日

WordPress のソースコード色付け表示

Filed under: Software — araki @ 8:50 PM

以前 wp-syntax を導入していましたが、最近になってうまく動作していないことが分かりました。コードを手直ししてもどうも動かないので、色々と調べた結果、PHP Hilight String というプラグインにしました。というより、自分の環境で動作したのがこれくらいでした (WordPress のバージョン (2.0.10) が古いので、このバージョンを上げる方が先決、という話もありますが)。

参考にさせていただいたサイトをメモしておきます。

非常に単純なコードですが、サンプルコードの表示例を書いておきます。デザインのカスタマイズはまた次回に。

[2008.11.21 追記]
WordPress のバージョンを 2.6.3 にアップグレードしたのに伴って、プラグインを SyntaxHighlighter に変更しました。使い方は簡単ですし、デザインも気に入りました。

<?php
// PHPサンプルコード
function foo() {
    echo "Hello World!\n";
}
for ($i = 0; $i < 10; $i++) {
    foo();
}
?>;
public class Hello {
    // Javaサンプルコード
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
class Hello:
    # Pythonサンプルコード
    def foo():
        print "Hello, world!"

2008 年 1 月 2 日

Debian lenny/sid で platex 環境構築

Filed under: Software — araki @ 11:43 PM

新しくインストールした Debian lenny/sid で platex の環境を構築した時のメモです。最小構成から日本語入力/表示環境も含めて、一つ一つインストールしました。

$ sudo apt-get update

platex 環境関連

$ sudo apt-get install ptex-bin yatex okumura-clsfiles

ビューア関連

$ sudo apt-get install gs gs-esp xpdf dvipdfmx xdvi xdvik-ja

日本語関連

$ sudo apt-get install kinput2-canna kinput2-common language-env anthy scim-anthy
$ sudo apt-get install ttf-kochi-gothic ttf-kochi-mincho
$ sudo apt-get install xfonts-a12k12 xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

これで (最低限の) 環境がひとまず整い、日本語の文書を作成できました。さらに whizzytex などを利用して WYSIWYG 環境を作りたいところですが、それはまた次回に。

Older Posts »

Powered by WordPress