December 31, 2009

PythonでLDAを実装してみる

Latent Dirichlet Allocationはテキストのような不連続データのための生成的確率モデル。入力はドキュメント。出力はドキュメントを特徴づける何か(tf-idfみたいなもん)。

基本的なアイディアは、あるドキュメントは潜在的ないくつかのトピックが混合していて、それぞれのトピックは語の分布で特徴づけられている、ということ。

論文[1]ではαとβというパラメータを用いてドキュメントが以下のように生成されると仮定している。
  1. ドキュメントのトピックの分布θがディリクレ分布Dir(α)に基づいて選ばれる。
  2. ドキュメントの語数N個になるまで以下を繰り返す。
    1. トピックznが多項分布Mult(θ)に基づいて選ばれる。
    2. 単語wnが確率p(wn|zn,β)で選ばれる。
ただし、トピックzの数をk個、単語wの種類をV個とすると、パラメータαはk次元のベクトル、βはk x V次元の行列でβij=p(wj|zi)。


Fig.1 LDAのグラフィカルモデル。Mはコーパス内のドキュメントの数。Nは各ドキュメントの語の数。αによって分布θが決まり、分布θに従ってzが選ばれ、zとβに従ってwが選ばれる。


ここで、ドキュメントにおけるαとβの値がわかれば、トピックがどんな割合であって(α)、そのトピックに関する語がどんな割合で存在するか(β)がわかる。つまり、ドキュメントが上のようなプロセスで生成されているとしてαとβの値はいくつかということを推定するのがLDAの目的。

αとβを推定する方法は変分ベイズEMアルゴリズムを利用するものやGibbs Samplerを利用するものなどが提案されています。また、いくつもの派生的なモデルも提案されています。

本稿では、論文[1]と
lda, a Latent Dirichlet Allocation package
http://chasen.org/~daiti-m/dist/lda/
のmatlabの方をパクっ参考にして、変分ベイズEMをPythonで実装してみました。

実行方法

要Numpy、SciPy。
python lda.py [-Nclasses] [-Iemmax] [-Ddemmax] [-Eepsilon] 入力ファイル名 出力ファイル名
classesはクラスの数。emmaxはEMの最大反復回数。demmaxは一つのドキュメントのEM最大反復回数。epsilonは収束条件。
たとえば、トピックの数が10個、「train」が入力で「model」に出力する場合は、
python lda.py -N10 train model

入力

テキストファイル。
1:1 2:4 5:2
1:2 3:3 5:1 6:1 7:1
2:4 5:1 7:1
ってな具合のフォーマット。行がドキュメント、<語のID>:<カウント>。SVMのライブラリでつかうフォーマットと似ている。上記の参考にしたサイトの上から1/3あたりのDownloadからcかmatlabバージョンをダウンロードして解凍するとtrainというファイルがありそのまま使える。

出力

<出力ファイル名>.alpha
<出力ファイル名>.beta
の二つ。alphaは長さがトピック数のリスト。betaはトピックの数×語の数の二次元リストになっている。はず。

References

[1] Blei et al., Latent Dirichlet Allocation, The Journal of Machine Learning Research, 2003.

ソース

lda.py


雑感

すごく…遅いです…

December 28, 2009

Pythonで順列や組み合わせを手に入れる

from itertools import ...

IteratorArguments
product()p, q, ... [repeat=1]
permutations()p[, r]
combinations()p, r

product('ABCD', repeat=2)AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2)AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2)AB AC AD BC BD CD

10.7. itertools — Functions creating iterators for efficient looping — Python v2.6.4 documentation

December 26, 2009

Chironで実行可能なSilverlightアプリをつくるときのコマンド

構成が
app/app.py
app/app.xaml
index.html
で、index.html内で
<param name="source" value="app.xap"/>
としたら
Chiron /d:app /z:app.xap

Google App Engineでテンプレートを使おうとしたらUnicodeDecodeError

Google App Engineでテンプレートを使おうとしたらエラーが出る。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 116: ordinal not in range(128)

どうやらテンプレートで日本語を使おうとしたときのunicodeのエンコード・デコードのエラーっぽい。

…
sentence = 'すもももももももものうち。'
template_values = {'sentence':sentence}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path,template_values))
…

これのtemplate.render()に

.decode('utf-8')

をつけて

…
sentence = 'すもももももももものうち。'
template_values = {'sentence':sentence}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path,template_values).decode('utf-8'))
…

となおしたら、大丈夫だった。テンプレートはutf-8で。

December 25, 2009

MacでLaTeXはDrag & Drop pTeXがいい

Snow Leopardになっても小川版pTeXがすごくいい。

Drag & Drop pTeX - JIS X0212 for pTeX
http://www2.kumagaku.ac.jp/teacher/herogw/

ghostscriptのインストールも忘れずに!

  1. 古いものを削除。アンインストールツールが付いている。


  2. pTeX.appをアプリケーションフォルダにドラッグアンドドロップ。


  3. TeXShopのPath設定で(pdf)TeXを

    /Applications/pTeX.app/teTeX/bin

    に。TeX + dvips + distllerの設定も

    Xtexshop

    に。dvipdfmxでフォントを埋め込む。なお埋め込まない場合はXtexshop-ryu。文字コードの認識しない場合は

    Shift_JIS/ヒラギノフォント埋め込みの場合は“dotexshop”、同/フォント非埋め込みの場合は“dotexshop-ryu”
    EUC/ヒラギノフォント埋め込みの場合は“dotexshop-euc”、同/フォント非埋め込みの場合は“dotexshop-euc-ryu”
    UTF-8/ヒラギノフォント埋め込みの場合は“dotexshop-utf8”、同/フォント非埋め込みの場合は“dotexshop-utf8-ryu”


  4. ついでに文字コードもUTF-8に。


  5. あとは Typesetting の Default Script を Tex + DVI にして、Misc の BibTeX を jbibtexにする。

December 23, 2009

MacのEclipseでGoogle App EngineのPYTHONPATH




Eclipseで新しいGoogle App Engineのプロジェクトを作るときのGoogle App Engine Directory、あるいはプロジェクトを指定してからプロパティでPyDev - PYTHONPATHのExternal Librariesの場所は
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
PyDev - PYTHONPATHのExternal LibrariesではAdd Source FolderしてからCtrl+Shift+Gで直接場所を指定できる。


/usr/local/bin/dev_appserver.py
"${project_loc}/src"
--port==9999

December 18, 2009

ことえりにZコマンドを



Google日本語入力で使える「Zコマンド」がすごいのようにことえりのユーザ辞書に単語を登録した。

z+[hjkl] = ←↓↑→
z+- = ~
z+[ = 『
z+] = 』
z+, = ‥
z+. = …
z+/ = ・

記号入のほうは登録するときは注意が必要。たとえば「z.」は「z。」で登録しないとうまく行かない。

ユーザ辞書にRegister Wordsするときのショートカットは

Ctrl + Shift + N

MacからEPDことEnthought Python Distributionを消す方法

以下引用。

• On Mac, you'll need to uninstall manually as Apple does not yet support a standard uninstall mechanism for .mpkg installers. The recommended uninstall commands are as follows. The instructions suffixed by a #* are specific to restoring a different Python interpreter, in this case MacPython 2.5 from python.org. If you want to restore a different Python, you'll need to know where your backup Python environment is and customize these commands based on that information.

cd /Library/Frameworks/Python.framework/Versions
sudo rm -rf 2.5.2001 Current
sudo ln -fhs 2.5 Current
cd /Applications
sudo rm -rf "EPD 2.5.2001"
cd /usr/local/bin
PYTHON=/Library/Frameworks/Python.framework/Versions/Current
sudo ln -fsh $PYTHON/bin/python
sudo ln -fsh $PYTHON/bin/pythonw
sudo ln -fsh $PYTHON/bin/python2.5
sudo ln -fsh $PYTHON/bin/pythonw2.5

As an example, on OS X 10.6, to restore the default Python installation you would set the PYTHON variable as:

PYTHON=/System/Library/Frameworks/Python.framework/Versions/2.6
EPD - Frequently Asked Questions (FAQ) :: Products :: Enthought, Inc.

December 16, 2009

Ubuntu 9.10とWindowsのデュアルブートでデフォルトのOSをWindowsにする

UbuntuとWindows 7とのデュアルブートにしようとした。デフォルトで起動するOSをWindows 7にしたくてググったら、/boot/grub/menu.lstを書き換えましょう、という記事がたくさん見つかったのだけど、そもそもmenu.lstが見つからない。

で、さらに調べたらGrub2に関する記事を読め、と。

デフォルトのOSを切り替えるためにはStartUpManagerを使いなさいとのこと。

手順にしたがってソフトウェアセンターからStartUpManagerをインストールして、



システム > システム管理からStartUp-Managerを起動して設定した。


December 13, 2009

jQuery + PythonのJSONでのデータのやり取り


jQueryとPython CGIのデータのやり取りをJSONでおこないたい。
構成は、
index.html
sample.js
sample.py
(lib/jquery/jquery-1.3.2.js)

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>jQuery + Python</title>
    </head>
    <body>
        <h1>jQuery + Python</h1>
    
  <form id="hoge">
   <input type="text" name="foo" />
   <input type="text" name="bar" />
   <input type="text" name="baz" />
  </form>
  
  <a id="foo" href="#">show</a>
  <a id="bar" href="#">clear</a>
  <div id="baz"></div>

  <script type="text/javascript" src="lib/jquery/jquery-1.3.2.js"></script>
  <script type="text/javascript" src="sample.js"></script>
    </body>
</html>


sample.js

p2jはパラメータからJSON形式に変換する関数。どこかのページに掲載されていたのですが、失念してしまいました。すいません。
var $j = jQuery.noConflict();

function p2j(d) {
 if (d.constructor != Array) {
  return d;
 }
 var data={};
 for(var i=0;i<d.length;i++) {
  if (typeof data[d[i].name] != 'undefined') {
   if (data[d[i].name].constructor!= Array) {
    data[d[i].name]=[data[d[i].name],d[i].value];
   } else {
    data[d[i].name].push(d[i].value);
   }
  } else {
   data[d[i].name]=d[i].value;
  }
 }
 return data;
};


$j(document).ready(function(){ 
 $j('#foo')
 .click(function() {  
  // クエリ
  var query = $j(":input").serializeArray();
  console.log(p2j(query));
  
  // GETリクエスト
  $j.get('sample.py', query, function(text) {
   // 結果の処理
   var json = JSON.parse(text);
   var html = "";
   for (var i in json) {
    html += json[i].key + ':' + json[i].value + ' ';
   }
   $j('#baz').html(html);   
  });
  
  return false;
 });
 
 $j('#bar')
 .click(function (){
  $j('#baz').html('');
 }); 
});


sample.py

JSON形式にするにはjsonモジュールかsimplejsonモジュールがいいかもしれません。
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cgi
import cgitb; cgitb.enable()
import json

print "Content-type: text/javascript; charset=utf-8"
print

form = cgi.FieldStorage()

foo = form.getfirst("foo", "")
bar = form.getfirst("bar", "")
baz = form.getfirst("baz", "")

print json.dumps([{'key':'foo','value':foo},
                  {'key':'bar','value':bar},
                  {'key':'baz','value':baz}])

November 24, 2009

EclipseにAptanaプラグインを入れたのにjQueryのコード補完ができない


AptanaでjQueryのコードアシストしてくれない。はまった。

Grobal References(タブがないときはメニューバーから Window > Show View > References)でjQueryにチェックを入れたら解決。

November 21, 2009

LaTeX for BloggerをSafariと新しい編集インターフェイスのために改造する



Bloggerの新しいインターフェイスになってLaTeX for Bloggerが機能しない。(そもそもSafariだと微妙だった。)なのでちょっと書き換えた。正規表現を使ったり。チェックとかはしてない。

ダウンロード

LaTeX for Blogger w/ Undo in the Updated Editor

References

WolverineX02 - LaTeX for Blogger
http://wolverinex02.googlepages.com/emoticonsforblogger2

クリボウの Blogger Tips: Blogger に LaTeX 数式を挿入するユーザースクリプト「LaTeX for Blogger」更新
http://www.kuribo.info/2009/05/blogger-latex-latex-for-blogger.html


コード

// ==/UserScript== 以下を次のように書き換える。

function setlatex(domname) 
{
var editbar = document.getElementById(domname);
  if (editbar) {
    var latexbar = document.createElement('div');
    latexbar.setAttribute("id", "latexbar");
    latexbar.setAttribute("class", "goog-toolbar goog-toolbar-horizontal");

    var buttons = emoticonButton("Latex", "http://wolverinex02.googlepages.com/latex.gif");
    buttons += separator();
    buttons += emoticonButton2("Unlatex", "http://www.codecogs.com/gif.latex?Un%5CLaTeX");

    latexbar.innerHTML = buttons;
    editbar.appendChild(latexbar);
  }
}

function emoticonButton(name, url) {
    var button = " \
    <div class='goog-inline-block goog-toolbar-button' id='htmlbar_undefined' onmousedown=' \
    (function latex_compilator() { \
        var rich_edit = document.getElementById(\"postingComposeBox\"); \
        var rich_body = rich_edit.contentDocument.getElementsByTagName(\"body\"); \
        var contenu = rich_body[0].innerHTML; \
        contenu = contenu.replace(/\\$\\$(.+?)\\$\\$/g,\"<img src=\\\"http://www.codecogs.com/gif.latex?$1\\\" border=0 align=middle />\"); \
        rich_body[0].innerHTML = contenu; } \
    )();'> \
        <img src='" + url + "' alt='" + name + "' border='0'> \
    </div> \
    ";
 return button;
}

function emoticonButton2(name, url) {
    var button = " \
    <div class='goog-inline-block goog-toolbar-button' id='htmlbar_undefined' onmousedown=' \
    (function latex_decompilator() { \
        var rich_edit = document.getElementById(\"postingComposeBox\"); \
        var rich_body = rich_edit.contentDocument.getElementsByTagName(\"body\"); \
        var contentu = rich_body[0].innerHTML; \
        contentu = contentu.replace(/<img(.+?)gif.latex\\\?(.+?)\\\"(.*?)>/g, \"$$$$$2$$$$\"); \
        rich_body[0].innerHTML = contentu; \
    })();'> \
        <img src='" + url + "' alt='" + name + "' border='0'> \
    </div> \
    ";
 return button;
}

function separator() {
  return '<div class="goog-toolbar-separator goog-inline-block">&nbsp;</div>';
}

setlatex("postingComposeToolbar");


以下HTML編集モードに使うときのための自分用メモ

var html_edit = document.getElementById(\"postingHtmlBox\");
var contentu = html_edit.value;
...
html_edit = html_edit.value;
...
setlatex("postingHtmlToolbar");

November 10, 2009

Eclipseを2つ開く

Macで。Eclipseを複数起動したい。

ターミナルから、
open -n /Applications/eclipse/Eclipse.app
ただし既に開いているワークスペースは開けない。

ちなみに open -n の説明。
-n, --new Open a new instance of the application even if one is already running.

November 8, 2009

Pythonのsqlite3のおおまかな手順

Pythonのsqlite3のおおまかな手順を記す。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# sqliteモジュールをインポートする
import sqlite3

# コネクションをつくる
conn = sqlite3.connect('post_tube.sqlite3')

# カーソルをコネクションからつくる
c = conn.cursor()

# テーブルをつくる
try:
    c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')
except sqlite3.OperationalError:
    print "table stocks already exists"

# データ行を追加する
c.execute("insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)")

sql = "insert into stocks values (?,?,?,?,?)"
c.execute(sql, ('2006-01-06','BUY','RHAT',100,35.14))

c.executemany("insert into stocks values (?,?,?,?,?)", 
    [('2006-01-07','BUY','RHAT', 150, 35.14),
    ('2006-01-08','BUY','RHAT', 300, 35.14)])

# レコード取得
c.execute("select * from stocks")
for row in c:
    print row[0], row[1], row[2]

# レコード更新
c.execute("update stocks set trans='SELL' where qty > 100")

# レコード削除
c.execute("delete from stocks")

# コネクションの変更を保存(コミット)する
conn.commit()

# 終わったらカーソルを閉じる
c.close()

12.13. sqlite3 — DB-API 2.0 interface for SQLite databases http://docs.python.org/library/sqlite3.html

Webstemmer使い方抜粋

  1. 学習用ページの取得

    textcrawler.py -o nikkei http://www.nikkei.co.jp/

  2. 学習

    analyze.py nikkei.2009xxxxxxxx.zip > nikkei.pat

  3. 抽出用ページの取得

    textcrawler.py -o nikkei http://www.nikkei.co.jp/

  4. 抽出

    extract.py -Ceuc-jp nikkei.pat nikkei.2009yyyyyyyy.zip > nikkei.txt


November 2, 2009

Carbon EmacsでPython

一番使いそうなコマンド

C-c C-c バッファの内容をPythonで実行
C-c C-r リージョンの内容をPythonで実行
C-c C-s 任意の式をPythonで実行
C-c C-z Pythonの出力を表示
M-TAB 補完

C-x o フレームを移動
C-x →/← バッファを移動

ロワ太郎のバッテリ使用習慣

以下引用
×)バッテリーが届いてから、そのまま放置
◎)バッテリーが到着後、すぐに満充電をし、普通の使用で残量が空になるまで使用、その後、再度満充電。この充放電の繰り返しを3回~5回する。


×)旅行や運動会などの使用機会がないので引き出しに長期間保管
◎)二週間に一度は取り出し、ご使用なさるのがベストです。1ヶ月以上使用しない場合はバッテリーの性能維持の為に、30~40%程度の充電残量状態で本体から取り外し、冷暗所に保管してください。


×)オリジナル(純正品)を使い切ってからロワのバッテリーを予備で使用
◎)オリジナルとロワのバッテリーをお持ちの場合は、交互で使用すること。バッテリーは長期間使用しないと、バッテリー内の化学反応がなくなる可能性があります。


×)バッテリーをカメラに入れたままで保管
◎)バッテリーを本体に取り付けておきますと、本体の電源が切れた状態でも少しずつ放電されます。この状態が長期間(数ヶ月以上)続くとバッテリーが過放電状態になり、性能が劣化する可能性があります。


×)車の中にそのまま置くこと
◎)炎天下の閉め切った車内など湿度の高い場所でバッテリーを保管しますと、劣化が進み、膨張などの危険があります。バッテリーは10~30℃の場所で保管して下さい。


×)旅行前夜、寝る前にベットのそばのコンセントに充電器を差し、不安定な場所で、寝ている間に充電
◎)周りに何もないところで、状況を確認しながら充電してください万が一、ご使用方法の誤りによってバッテリの落下、温度の高い場所での保存等で発熱、発火が起きた場合、火災になる恐れがあります。

October 30, 2009

SafariでTop SitesからSearch Historyへのショートカット

SafariでTop SitesからSearch Historyへのショートカットは

⌘+F

よく使うコンボ

新しいタブを開いてGoogle検索窓に移動

⌘+T → tab

新しいタブを開いて履歴検索

⌘+T → ⌘+F

Pythonでffnetでニューラルネットワーク

Feed-forward neural network for python (ffnet)
http://ffnet.sourceforge.net/

を使ってみる。

October 29, 2009

ことえりで読み方のわからない漢字を変換する


ことえりで

ネ申

って入力して、選択、でメニューバーの「あ」から「部品の共通な漢字を検索」あるいは(Ctrl + 1)で、



って。
カタカナもいけるんだ!?
読み方のわからない漢字の部首を入力して「部品の共通な漢字を検索」すれば変換できる。

ことえりのショートカット

Control + Shift + R : Reverse Conversion 再変換
Control + Shift + Y : Retrieve Fixed Yomi 直前に入力した読みを再入力
Control + 1 : Search Similar Kanji 部品の共通な漢字を検索
Control + 2 : Convert to Related Character 関連文字に変換

October 22, 2009

Bloggerに続きを読むで記事の最初から表示する

Bloggerのバージョンアップで Read more... が使えるようになった。クリボウの Blogger Tips/ Blogger 公式の「続きを読む」機能が登場が非常にわかりやすい。デフォルトだと<!-- more -->の直後から表示される。できれば記事の最初から表示してほしい。

October 21, 2009

Bloggerに簡単なタグクラウドを

「ラベル」ウィジェットを改造してタグクラウドを付ける。以下のサイトを参考に。

A Simple Blogger Tag Cloud Widget

とか言ってる間に、ラベルにタグクラウド機能がついてました。

デジタルカメラのISO感度とは

デジタルカメラのISO感度とは、レンズを通して受けた光量を撮像素子(CCDやCMOS)がどれくらい増幅して取り扱うかを調整するための基準。感度が高ければ光量を大きく増幅する。

October 16, 2009

Snow Leopardの辞書.appで新しい単語を調べるとき新しいウィンドウを開かない

Dictionary.appが開いている状態でSpotlightとかから新しい語を調べて選択しようものなら新しいウィンドウを開いてくれる。べんりなばあいもあるかもしれないけれども...

October 15, 2009

PythonでPLSAを実装してみる

probabilistic latent semantic analysis (PLSA)は、

・文書dがP(d)で選ばれる
・潜在変数zがP(z|d)で選ばれる
・語wがP(w|z)で生成される

というプロセスを経て、結果として(d,w)のペアが観測されるという文書と語の生成モデル。

October 4, 2009

Pythonの正規表現でピリオド(.)に改行も含める

標準の状態だと「.」(ピリオド、ドット)には改行以外のすべての文字を含む。
改行も含むようにフラグ

re.DOTALL

を追加する。たとえば、

p = re.compile(r'\(.*?)\', re.DOTALL)
p.match('\n\nfoo')

とか。

October 2, 2009

PythonでScipyで擬似逆行列

擬似逆行列 - Wikipedia

scipy.linalg.pinv(a) http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.pinv.html
scipy.linalg.pinv2(a) http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.pinv2.html

September 30, 2009

September 27, 2009

Snow Leopardの英語環境でイラレやFlashを使う

IllustratorやPhotoshopで文字化けが起こる。Snow Leopardでは 右クリック→Get Info では言語設定ができない。そこで

September 25, 2009

gfortranのアンインストール

/usr/local/bin/gfortran-uninstall

EPDのインストールメモ

Install Notes
-------------

A full installation will install the following:
* Python framework -- installed into:
/Library/Frameworks/Python.framework/Versions/5.0.0

* Python applications -- installed into
/Applications/Enthought/EPD-5.0.0

* System fixes -- makes the EPD Python your default one by adding lines to
your .bash_profile to your path.

* Examples -- this is the examples and demos found in the sources for
the projects included in EPD. Installed into a sub directory of
/Library/Frameworks/Python.framework/Versions/5.0.0/Examples
and a symbolic link at
/Application/Enthought/EPD-5.0.0/Examples


Uninstallation
--------------

If you wish to completely uninstall EPD, you'll need to do so manually as
Apple does not support a standard uninstall mechanism for .mpkg installers.
If you don't want to fully uninstall, but instead wish to switch your default
Python to some interpreter other than EPD, see the below section on Changing
The Default Python Interpreter.

The recommended uninstall procedure is as follows, and this assumes you have
MacPython 2.5 installed. If you do not, you'll need to know where your backup
Python environment is and customize these instructions based on that
information.

$ cd /Library/Frameworks/Python.framework/Versions/
$ sudo rm -rf 5.0.0
$ cd /Applications/Enthought/
$ sudo rm -rf EPD-5.0.0



Changing The Default Python Interpreter
---------------------------------------

During installation, EPD made itself your default interpreter by modifying
your .bash_profile to prepend it's 'bin' directory to your PATH environment
variable. In addition, it modified the symbolic link

/Library/Frameworks/Python.framework/Versions/Current

to point to its version. You can change these two settings to switch to a
different default Python interpreter temporarily and/or permanently.

September 14, 2009

Snow LeopardでMacPortsでgcc43

My install procedure (I rm -rf'ed /opt/local after 10.6) was:

1. port install libiconv +universal
2. port install mpfr +universal
3. port install gcc43
4. [wait until it breaks]
5. cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_gcc43/work/gcc-4.3.4/gcc/cp/
6. Edit line 76 of the file and remove tree-inline.o from CXX_C_OBJS
7. Resume compiling

I can put together a complete patch if necessary but didn't create a .orig file to diff from when getting this to work.

http://trac.macports.org/ticket/20816

September 11, 2009

Snow LeopardでGreaseKitをビルドすると動くらしい

GreaseKitはSafari向けのGreasemonkeyスクリプトが使えるSIMBLプラグイン。非常に便利。だがSnow Leopard入れたらGreasKit (1.5)が動かない。32 bitモードで起動すればいいらしいが、それはちょっと。そこで「GreaseKit 64bit」とかでググる(英語)。そうしたらソースから10.6に対応する形でビルドすれば使えるよ、と。

Tristan O’Tierney » Blog Archive » GreaseKit in 64bit Safari

でやりかたを紹介してくれている。(しかも下の方にpre-buildしてくれたものを用意してくれている。)で、導入したら見事に動きました!oAutoPagerizeとかLDRizeとか! Many thanks!!!



SIMBLのβ版(0.9.4b)をいれておく。
http://www.culater.net/dl/files/SIMBL-0.9.4b.pkg.zip

プラグインの置き場所は
/Library/Application Support/SIMBL/Plugins (確認済み)
~/Library/Application Support/SIMBL/Plugins



他のやり方→Snow Leopard でGreaseKitが動かなくなった件

SafariStandも使えるようなればいいなあ。→新しいバージョンが!使えるようになった!ありがとうございます!(2009/9/13)

August 26, 2009

VAIO type SZにWindows 7を入れてディスプレイドライバで困る

(追記)

ええと、

ftp://ftp.vaio-link.com/pub/Vaio/Original/

からダウンロードしたものを使ったほうがよさそう。下のやり方だとnv4_mini.sysなんたらでエラーが発生してAeroの設定とかができない!SZ90/80/70は海外のSZ1に相当する(?)らしい。Vista搭載機種以降のもので使えそうなものをいろいろ試してみた。

SZ90PSの場合

上記サイトから

SZ1_DRIVERS.ZIP

をダウンロード、解凍。
デバイスマネージャから不明なものを選んで、ドライバの更新で先ほど解凍した場所を指定してドライバを探す。

さらに、GeForce 7400MでVistaが搭載されているのはSZ93、らしいので、

SZ4_DRIVERS.ZIP

をダウンロード、解凍。
デバイスマネージャからディスプレイアダプタを選んで、ドライバの更新で解凍した場所を指定する。(これしないとAeroを設定しようとしたときエラーが出る。)

まあまだ Fnキーも使えないし、SDカードも読めない。(しかもこないだ分解して掃除したら音が聞こえなくなった!!!)

(追記終わり)


VGN-SZ90PSにWindows 7 Enterpriseを入れてみたら、GeForce Go 7400のディスプレイドライバがなくて困った。NVidiaのページからダウンロードしたドライバを入れようとしたが、ハードウェアが見つかりません、て。以下解決(?)。

  1. ソニーの製品別情報のページの下部にあるから「VGN-SZ*「Graphics Driver Ver.8.4.9.1」アップデートプログラム」から同意して NVDVID-01040609-UN.exe をダウンロード。
  2. 実行。しても一見何も起きない。が、C:\Update\Video2というフォルダを作成されている(違う名前かも)。そこにドライバがある。
  3. コントロールパネルからデバイスマネージャを立ち上げる。ディスプレイアダプタのところに表示されているGenericなんたらというのをダブルクリック。2番目のタブ(Driver)から2番目のボタン(Update Driver)。
  4. 自動的に探すほうじゃなくて、2番目の選択肢(Browse my computers for driver software)を選ぶ。
  5. で、ドライバを探す場所でさっきのC:\Update\Video2を指定して、次へ。
  6. たぶん何とかなる。

まだFnキーとか効かないけど、なんとかなるものか。

August 23, 2009

Silverlight 3でのDataGridの設置の仕方

2に比べて大分簡単にDataGridを置くことができるようになった。
設置したい場所にカーソルを合わせて、ToolboxからDataGridを選んでダブルクリックすると、自動的に必要な参照と名前空間が追加される。Toolboxが表示されてないときはメニューバーのView > Toolbox。(日本語だったら 表示 > ツールボックス ?)


簡単!

で、あとはDataGridのカスタマイズとかデータを追加するための作業とか。以下関連リンク。

August 22, 2009

Folxを消したのにDownload (all) with Folxというコンテキストメニューが消えない

MacのダウンロードツールFolxはまあまあ便利だったけど、邪魔だから消した。にもかかわらずSafariで右クリックしたときにでるコンテキストメニューから Download (all) with Folx というのが消えない。

正しいかわからないが以下対策。

/Library/Internet Plug-Ins/FolxNetscapePlugIn.plugin
~/Library/Application Support/Eltima Software/Folx
~/Library/Internet Plug-Ins/FolxNetscapePlugIn.plugin
~/Library/Preferences/com.eltima.Folx.plist

というファイルを削除。さらに、

/Library/Input Managers/FolxIM

というフォルダを削除。でブラウザの再起動。

ちなみにFirefoxはアドオンからFolx~を削除する。

Silverlight 3ではテーブル形式のデータ処理が強化されたらしい

Siverlight 3では
Silverlight 3 には、データ中心の RIA の作成を簡素化する目的に特化した一連の新しいコントロールが導入されています。これらのコントロールには、DataGrid、DataForm、 DataPager、FieldLabel、DescriptionViewer、ErrorSummary、ChildWindow などがあります。
とのこと。

Silverlight 3 を使用してデータ ドリブンの経費アプリケーションを作成する

あとでなんかしてみる。

August 13, 2009

はじめてのmixiアプリをGoogle App Engineにアップする

  1. Google App Engine(GAE)のアカウントをとる。
    mixiデベロッパー登録する。
  2. はじめてのmixiアプリの「Gadget XMLファイルの作成」に従いxmlをつくり、hello.xmlと名付ける。
  3. DeployするGAEフォルダ(テンプレだとapp.yaml、index.yaml、main.pyが入っている)にmixiというフォルダ(名前は任意)をつくり以下のような構成にする。

    ./app.yaml
    ./index.yaml
    ./main.py
    ./mixi/
    ./mixi/hello.xml


  4. app.yamlに設定を追加する。
    application: satomacoto
    version: 1
    runtime: python
    api_version: 1

    handlers:
      - url: /mixi
      static_dir: mixi

      - url: /.*
      script: main.py
  5. Deployする。たとえばアプリケーションを
      http://satomacoto.appspot.com/
    にDeployしたら
      http://satomacoto.appspot.com/mixi/hello.xml
    に存在するか確認する。
  6. 確認できたらはじめてのmixiのアプリ作成から手順通りに。

August 11, 2009

Bloggerに関連記事を表示する

Bloggerで記事の下にRelated Postを表示する一つの方法。

Best Related Posts Widget for Blogger - Show Simlar Articles Below Blog Posts Plugin

のOption 2を参考に。Option 1ではうまく行かなかった。"Related Post"というタイトルと表示する件数をカスタマイズできる。

Terminalで空ファイルをつくるには touch ファイル名

Terminalで空ファイルをつくるには

> touch ファイル名

May 26, 2009

MacPortsを消す/アンインストールする方法

以下引用。

基本的には赤字のコマンドをターミナルで実行すればいい。

ただしMacPortsを/opt/localでないところにインストールしている場合は適宜変更する必要あり。
またbash以外のシェルを使っている場合も適宜変更する必要があるかも。

MacPortsのバージョンによっては下のコマンドに書かれているファイルやフォルダがない場合もあるかもしれないけど、問題ない。

とのこと。

How do I remove or uninstall MacPorts?

Uninstalling MacPorts can be a drastic step, and depending on the issue you're experiencing, you may not need to do so. If you're unsure, ask on the macports-users mailing list first.

If you need to uninstall MacPorts, and your port command is functioning, have it uninstall all the installed ports by typing this in the Terminal:

sudo port -f uninstall installed

All that will be left in your installation prefix now will be files that were not registered to any port. This includes any configuration files you edited, any databases you created, any files which MacPorts renamed in order to allow a forced installation or upgrade, and the base MacPorts software itself. You may wish to save your configuration files (most are in /opt/local/etc), databases, or any other unique data.

To remove all traces of MacPorts, type this in the Terminal:

sudo rm -rf /opt/local \
/Applications/MacPorts \
/Applications/DarwinPorts \
/Library/Tcl/macports1.0 \
/Library/Tcl/darwinports1.0 \
/Library/LaunchDaemons/org.macports.* \
/Library/StartupItems/DarwinPortsStartup \
/Library/Receipts/MacPorts*.pkg \
/Library/Receipts/DarwinPorts*.pkg

Substitute your own MacPorts prefix for /opt/local, if you've installed MacPorts in a different place.

If you use a shell other than bash (perhaps tcsh), you may need to adjust the above to fit your shell's syntax.

Note that depending on which version of MacPorts you have and which ports you've installed, not all of the above paths will exist on your system. This is ok.

http://guide.macports.org/chunked/installing.macports.uninstalling.html

May 9, 2009

April 20, 2009

Save a Bookmark on Deliciousで自動的におすすめ/人気タグを入力するGreasemonkeyスクリプト

Download

Delicious Tagger for Greasemonkey

Code

// ==UserScript==
// @name        Delicious Tagger
// @namespace  http://satomacoto.blogspot.com/
// @include     http://delicious.com/save?*
// @description  Adds the populer/recommended tags
// ==/UserScript==

var d = document;

var recos = d.getElementById('save-reco-tags');
var pops = d.getElementById('save-pop-tags');

var tags = '';
if (recos != null) {
  recos = recos.getElementsByClassName('tag-list-tag')
  for (var i = 0; i < recos.length; i++)
    tags += recos[i].innerText + ' ';
}
if (pops != null) {
  pops = pops.getElementsByClassName('tag-list-tag');
  for (var i = 0; i < pops.length; i++)
    tags += pops[i].innerText + ' ';
}

d.getElementById('tags').value = tags;
d.getElementById('tags').focus();

YouTubeで自動的に高画質動画に飛ぶGreasemonkeyスクリプト

// ==UserScript==
// @name        Jump to fmt=18
// @namespace  http://satomacoto.blogspot.com/
// @include     http://*youtube.com/watch*
// @description  YouTubeで自動的に高画質動画(fmt=18)に飛ぶ
// ==/UserScript==

(function() {
var url = location.href;
if(url.indexOf("&fmt")<0){
location.replace(url + "&fmt=18");
}
})();

April 19, 2009

Silverlightで初期化パラメータの取得を取得する

http://www.atmarkit.co.jp/fdotnet/dotnettips/839sl2initparam/sl2initparam.htmlから引用。

aspx/.htmlファイルにセットした初期化パラメータは、Silverlight 2アプリケーション側では、Applicationオブジェクト(App.xaml)が起動した際のStartupイベント・ハンドラ(通常はApplication_Startupメソッド)で取得できる。

これはStartupイベント・ハンドラの第2パラメータとして渡されるStartupEventArgsオブジェクト(System.Windows名前空間)のInitParamsプロパティに格納されており、このプロパティはディクショナリ形式であるため、次のようにしてアクセスできる。

初期化パラメータとして設定した内容は、実際にはSilverlight 2アプリケーションの本体であるPageオブジェクトに渡すことになるだろう。ここでは初期化パラメータの値を引数に取るコンストラクタを用意して、Pageオブジェクトに渡している。

Silverlightでxmlをあつかう

  1. XContainer.Descendants メソッド (System.Xml.Linq)
    このドキュメントまたは要素の子孫要素のコレクションをドキュメント順に返します。

March 29, 2009

ButtonでOnMouseLeftButtonDownが発生しない

SilverlightにはLabelクラスがないので代わりにButtonクラスを使おうとした。(TextBlockだといろいろ見た目がいじれない。)が、ボタンではOnMouseLeftButtonDownとOnMouseLeftButtonUpがあるのに発生しない。
そこで http://silverlight.net/forums/p/22148/118943.aspx に書いてある方法をとる。以下引用。

でもこれだとこんどはClickイベントが使えなくなる?のかな。いいけど。

March 22, 2009

ワイヤレス ネットワーク アダプタの無効化で止まる

無線LANはつながっているように見えるがウェブページを見ることができない。タスクバーのネットワーク接続から右クリックをして修復しようとするも、ワイヤレス ネットワーク アダプタの無効化 と表示されて止まってしまった。ワイヤレスネットワークが修復できない。

で、色々試行錯誤したら、今回の場合、DropBoxが悪さをしていた模様。一旦DropBoxを終了したら、すんなり修復できた。

March 15, 2009

PCでもラジオ講座が聴ける!

2009年度からほとんどのNHKラジオ講座がPCで聞けるらしい。

PCでもラジオ講座が聴ける!
4月6日(月)午前10時から、ほとんどのラジオ講座(新作)がPCでも聴くことができるようになります。
今、音声配信が行われている入門ビジネス英語や実践ビジネス英語と同じく、放送の1週遅れで1週間掲載されます。
詳細はこちら


http://www.nhk.or.jp/gogaku/

February 22, 2009

SilverlightのDataGridの簡単なサンプル

Silverlight 2.0でDataGridを使った例。


テキストボックスに文字や数字を入れてAddをクリックするとデータの追加。任意のデータを選んでRemoveをクリックするとデータの削除。

SilverlightでDataGridを使うために から随分たったけど。


ソースファイルは以下。
Download SilverlightDataGrid.zip (24.2K)


Page.xaml
  • 8〜17行目でDataGridを設置した。
  • 4行目で名前空間を xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" としたので、<my:DataGrid>としている。
  • Page.xaml.csのなかで表示用のDataクラスで3つのプロパティ Name、Age、Available をつくり、そのリストをデータソースに指定した。
  • 9~16行目の<my:datagrid.columns>~</my:DataGrid.Columns>内で各列について設定。ここではDataGridTextColumnとDataGridCheckBoxColumnをつかった。作成した表示用のクラスのプロパティに対応させて、たとえば Binding="{Binding Name}" とバインディングするように指定。



Page.xaml.cs

Graph Visulization with Silverlight 2.0



Flareの物理計算の一部をSilverlightに移植してグラフ構造を可視化してみた。FlareはActionScriptで書かれたFlash用のデータ可視化ライブラリ。元のプロジェクトはPrefuse。

Startを押すとアニメーション開始。
Stopで停止。

数字はノード。線はエッジ。
数字は掴んで動かせる。

スライダーを動かすと力が変化する。
上から、抵抗、反発力、重力。

まだ中途半端だけど。

February 4, 2009

Boot Campの起動時にチェックディスクをしない

コマンドプロンプトから

chkntfs /x c:

ファイル システムの種類は FAT32 です。

と表示される。
chkntfs の使い方はプロンプトから

chknsfs /?



http://www.atmarkit.co.jp/fwin2k/win2ktips/354chkntfs/chkntfs.html

January 29, 2009

PowerPoint 2008 の固定ガイドを使う

メニュー→表示→ガイド→固定ガイド ⌘+G

青い線が入り配置に役立つ。
optionを押しながらガイドをドラッグ&ドロップすると複数のガイドを作成できる。
消すときはドラッグして一番端に持っていく。一本のときは消えない。(正式なやり方かわからない)
commandを押しながらオブジェクトを移動するとガイドは無視。

Mactopia Japan : PowerPoint tips | 複数のガイドを使ってレイアウトを整える。
http://www.microsoft.com/japan/mac/officesolution/tips/powerpoint/09.mspx

Mactopia Japan - PowerPoint のオンラインヘルプ
http://www.microsoft.com/japan/mactopia/help.mspx?app=3&qu2=

January 22, 2009

Bloggerのタイトルを変更

Bloggerでのタイトルは「(名前) : (記事のタイトル)」がデフォルトだが、この順番やらを変更するにはレイアウトのHTMLをいじればいいらしい。

http://itfun.jp/2008/09/blogger_14.html

January 19, 2009

WordPressをローカルにインストールしたときに起きたエラー

Mac OS X Server 10.4.11にWordPress 2.6.1をインストールする方法
を参考にWordPressを入れた。

WordPressで、
Error establishing a database connection
というエラー。

phpMyAdminで、
#2002 - The server is not responding (or the local MySQL server's socket is not correctly configured)
というエラー。

いろいろ探したら、どうやらMySQL server version 5.1.30を新たに入れたために起こったエラーのようだ。
Leopardのデフォルトのphpのバージョンではソケットの場所を"/var/mysql/mysql.sock"としているのに対して、自分で入れたMySQLでは"/tmp/mysql.sock”という場所を使っている。

解決方法は、Mac OS X Server 10.4.4: Apache/PHP/MySQL の相互動作の機能強化の下半分を参考に。以下引用。

以下の手順に従って、以前の MySQL ソケットの場所を使うように PHP 構成ファイルを修正します。
  1. もしなければ、“/etc/php.ini”を作成します(このためには、“/etc/php.ini.default”を“/etc/php.ini”にコピーします)。
  2. “/etc/phi.ini”構成ファイルをエディタで開き、[MySQL] セクションにある以下の行、

    mysql.default_socket = /var/mysql/mysql.sock

    これを、以下のように変更します。

    mysql.default_socket = /tmp/mysql.sock

  3. Web サーバを再起動し、新しい PHP の設定を有効にします。このとき、MySQL を再起動する必要はありません。
その後、Mac OS X Server にプリインストールされている

/var/mysql/mysql.sock

を利用する MySQL のバージョンを使いたくなった場合は、

/etc/php.ini

ファイルから上の行を削除するか、または行の内容を元に戻してください。

January 15, 2009

Pythonで大規模疎行列計算

scipy.splinalg.eigen

scipy.sparse.linalg.eigen
になったのかな。

http://handasse.blogspot.com/2008/02/python-scipyarpack.html
http://projects.scipy.org/pipermail/scipy-svn/2008-February/001910.html

January 14, 2009

隠れマルコフモデルの例 その2

隠れマルコフモデルの例のつづき。

さて、たとえば、友人が初日に「散歩」二日目に「買い物」三日目に「掃除」という順で行動したら、その観測結果が得られる確率はいくらでしょうか、そして、このような観測結果が得られたとき三日間の天気はどのようであったでしょうか。前の疑問に対しては前向きアルゴリズム、後の疑問についてはビタビアルゴリズムを利用できます。(観測された事象系列を結果として生じる隠された状態の最も尤もらしい並びをビタビ経路と呼びます。)これらは、同じコードで実装することができます。以前のエントリーと同様、状態遷移図は次のように書けるとします。


まずアルゴリズムを理解するために初日に「散歩」したという情報のみがある場合を考えます。
初日の状態確率は(添字は何日目かを表すとします)

Pr(雨0)=0.6, Pr(晴れ0)=0.4

初日「雨」で「散歩」する確率は

Pr(雨0,散歩)=Pr(雨0)*Pr(散歩|雨0)=0.6*0.1=0.06

このとき次の日「雨」の確率は

Pr(雨0,散歩,雨1)=Pr(雨0,散歩)*Pr(雨1|雨0)=0.06*0.7=0.042

同様に初日「晴れ」で「散歩」して次の日が「雨」の確率は

Pr(晴れ0,散歩,雨1)=0.4*0.6*0.4=0.096

つまり初日に「散歩」して次の日が「雨」であるとき

Pr(散歩,雨1)=Pr(雨0,散歩,雨1)+Pr(晴れ0,散歩,雨1)=0.042+0.096=0.138

となります。Pr(雨0,散歩,雨1)<Pr(晴れ0,散歩,雨1) であることから、「晴れ→雨」であった可能性が高い、ということがわかります。

二日目が「晴れ」である場合についても計算すると「雨」「散歩」「晴れ」は

Pr(雨0,散歩,晴れ1)=0.6*0.1*0.3=0.018

「晴れ」「散歩」「晴れ」は

Pr(晴れ0,散歩,晴れ1)=0.4*0.6*0.6=0.144

つまり「散歩」して次の日が「晴れ」になるとき

Pr(散歩,晴れ1)=0.018+0.144=0.162

となり、また「晴れ→晴れ」でありそうだということがわかります。

これらを併せて考えれば、「散歩」をする全体確率は

Pr(散歩)=0.138+0.162=0.3

このときビタビ経路は「晴れ→晴れ」となります。

では初日に「散歩」、二日目に「買い物」した場合はどうなるでしょう。全体確率とビタビ経路を求めます。
初日に「散歩」したとき、二日目の「雨」である確率は0.138、「晴れ」である確率は0.162であるとわかっています。
また、「雨」に至るまでの尤もな経路は「晴れ→雨」、「晴れ」に至るまでの尤もな経路は「晴れ→晴れ」だとわかっています。


(つづく?)

Viterbi algorithm わかりやすくなってる!!!
→ 実装(コピペ)