片目猫Tools

プログラマ片目猫の送る便利ツール集

Pythonまとめ

2008-06-20 06:37:29 | Weblog
Pythonの勉強で参考にしたサイトをまとめ中。

Pythonチュートリアル。
 まずはここから。
Pythonライブラリリファレンス。
 これがあれば大概の事はできる。
wxPython
 Windowアプリが簡単に作れる拡張モジュール。
 Demoは必見! wxPython-demo
numpy
 上記Demoのplot.pyを試すために必要になります。
py2exe
 pythonコードをWindowsのexeに変換できます。
wxPythonリファレンス
wxPythonチュートリアル
wxPython日本語説明

・wxPythonのサンプル。
コントロールいろいろ
リストボックスサンプル
ドラッグ&ドロップしたグラフデータファイルを描画。
tree表示
文字列解析

Pythonで正規表現

2008-06-12 03:03:54 | Weblog
PerlからPythonに浮気中の片目猫です。
Google App Engineを利用してやれないかと思って勉強中です。

Pythonはオブジェクト指向のスクリプト言語。
Perlと比べて読みやすいソースコードが書けるらしいです。
たしかに、Perlは記号に意味を持たせすぎて初めて読んだ時は
わけがわからなかったからな。。。

で、Pythonを触ってみた感想ですが、なかなか面白い。
コマンドラインインタプリタも言語としてサポートしていて、
オンラインヘルプもLinuxのmanコマンド的に参照できていい感じです。

クラスも簡単に作れるし、関数オブジェクトも簡単に使えるし。

インデントが強制されていて、同一インデントでネストの
深さを表わすのは面白いですね。
でも、Webに公開されているサンプルソースを試そうと思ったら
インデントが崩れてて全然キチンと動いてくれなくて困ったり。

あと、いかにリスト(シーケンス)を作るかが鍵みたなところがあります。
Python独自のリストの内包表記やジェネレータが威力を発揮します。
このへんPerlとは文化の違いを感じますね。

さて、タイトルの正規表現なのですが、困ったことにPythonは正規表現を
言語的にサポートしていません。
もちろん標準モジュールとしてサポートされてはいますが、
これがPerlに慣れている人間からするとちょっと使いづらい。
試行錯誤してできるだけシンプルにした結果が下です。

例題:数字と英字が連続していた場合、境界にスペースを入れなさい。
   たとえば、文字列”12345aiueo”を”12345 aiueo”に置換する。

perl なら、
$str = "12345aiueo"
$str =~ s/([0-9])([a-z])/$1 $2/gi
これが、pythonで同じことをやろうとすると、

import re
str = "12345aiueo"
str = re.sub("([0-9])([a-zA-Z])",lambda x:x.group(1) + " " + x.group(2), str)
となります。

importを除いた処理のための行数は同じですが、明らかにpythonの方が長いです。
その分、わかりやすいと言えば分りやすい...かなぁ?

大きな問題は、置換sub()の置換文字列にグループにマッチした文字が使えないことです。
パターンには使えるんですけどね。
"<(.*)>(.*)</¥1>"

こんな感じでHTMLタグのパースとかに使えそう。

で、これに対応しようとすると、パターンを指定する場所に関数を指定
してあげる必要があります。
関数には、引数にマッチオブジェクトが渡されますので、
引数.group(グループ番号)でマッチした文字を引っ張り出せます。

ちなみに、lambdaは一時的に使い捨ての無名関数を定義できます。
Lisp起源の機能らしいですが、便利なのかな。
関数は重複コードをまとめてなんぼなものと思っているので、
実際使ってみるまで全く利用シーンを思いつかなかった。

今回使用したのはここに関数を書かなくてはならなかったからです。
Perlは関数でなくても全然処理できてるわけで。
正直微妙です。

自作のARM実行ファイルがQEMUで動いた

2008-05-19 23:59:20 | Weblog
課題その1

自分でコンパイルしたARM用実行ファイルをLinux上で動作させる。

に成功しました。

ファイルの転送、どのようにしたかというと・・・
wgetを使いました(^^;

ローカルでファイルのやりとりもできるんでしょうけど、
Linux初心者な私にはちょいとやり方が分からず。
arm-testがwgetをサポートしてくれていたので、
フリーのWEBスペースに、以前に作成したARM用にビルドしたHello World
をアップし、QEMUのARM版Linuxからwget。
実行権限をつけて実行すると、あっさり動いてくれました。

というわけで、ARM用のバイナリをコンパイル&実行する環境までは
作成が出来ました。

次の課題は、デバッグかな?
gdbはインストールされていないので、クロスコンパイル環境で
ビルドしたものを持ってくる。
あるいは、QEMUのGDBインタフェースとやらを調べてみる。
いずれにしてもハードルは高そうです。



噂のLinux Ubuntuを使ってみた

2008-05-15 05:07:44 | Weblog
最近何かと噂の?Linuxデストリビューション Ubuntuを使ってみました。

Ubuntuのページに行ってみると、

日本語ローカライズドVirtualBox用仮想マシンなるものがありました。
早速Virtual Boxをダウンロード&インストール。

仮想マシンのイメージをダウンロードしてVirtual Boxに登録して
実行すると。。。動きました!異常に簡単です。

・感動したこと
 起動早いです。
 RedHatを使っていた頃は、起動時にいろいろチェックやらなんやら
 を実行しているようで、数分起動まで掛かっていましたが、
 ubuntuだと1分切ります。
 
 不足アプリのインストール。
 コマンドを入力すると、インストールされていないものでした。
  シェルに「このコマンドを実行してみろ」というメッセージが
  出てきたので、試してみると、サーバにアクセスしてダウンロード&
  インストール。
  依存関係まで解決してくれてとっても親切です。


・詰まったこと
 rootアカウントを使用するために、suを実行してみましたが、
 対応していませんでした。
 ubuntuでは、rootアカウントでコマンドを実行するために
 毎回
 >sudo <コマンド>と実行するようです。

 常にrootユーザーを使うには、
 >sudo -i
 を実行すればOK. 
 パスワードを聞かれるので、初回に設定したパスワードを入力します。

QEMUでARMを動かす

2008-05-15 04:29:31 | Weblog
前回はAndoridのadb shell上でARM用にビルドしたコードを
動かしました。

今回は、QEMUにてARM用のLinuxバイナリイメージを動作させてみます。
オープンソースなコードを扱うため、ホストOSをLinux(ubuntu)にしました。

まず、ここからQemuを持ってくる。
qemu-0.9.1-i386.tar.gz
を使用しました。

そこにあるARM用のLinuxのイメージをまた持ってくる。
arm-test-0.2.tar.gz

両方解凍する。

arm-test/README
に書いてあるとおりにコマンドを実行する。

あっさりQEMU上でARM用のLinuxが動きました。

今後の課題:
1.自分でコンパイルしたARM用実行ファイルをLinux上で動作させる。
  tftpでファイルを送りつけるぐらいかな?
2.ホストOSからゲストOS上のプログラムをデバッグする。
  ※QEMUは、ゲストOSをデバッグするためにGDBインタフェースを
   提供しているらしいです。
3.Linuxを自前でコンパイル&QEMUイメージ作成
  ここまでできれば、OSのコードをデバッグできるようになる。

Android始めました。

2008-05-07 06:17:34 | Weblog
Androidとは、Googleが開発している携帯電話用プラットホームのことです。

開発環境のインストールはここを参照しました。

なにから始めようかと考えて、とりあえずCソースをARM用にビルドして
Android Shell上で動作させるところから。

開発環境:Windows

手順1.クロスコンパイル環境インストール
クロスコンパイル環境(x86/Windows→ARM/Linux)に、CodeSourceryを使用。
http://www.codesourcery.com/gnu_toolchains/arm/download.html
から、
Target Platform:ARM GNU/Linux
Host Platform:IA32 Windows
でダウンロード。
インストールは、ダウンロードしたファイルを実行してデフォルト設定のまま進めればOK。

手順2.コンパイル&実行

ここを参考に、Hello Worldを作成して実行してみました。

これで、Android Shell上でCソースを実行することはできました。
Cが動作するなら大概のものは作れそうですね。

課題として、Androidのデバイスをたたく方法
Androidアプリケーションから作成したプログラムを呼び出す方法
を調査する必要があります。

Android Shellの環境を調査しながら、ぼちぼちやってみます。

殺虫技術の進歩

2008-04-28 02:02:50 | Weblog
暖かくなってきました。

そのせいか、コバエが発生しました。大量に。
どうやら発生源は生ゴミのゴミ箱のようです。
ごみ箱を開けると、待ってましたとばかりに飛び出します。
流しに巣くって、水を流すたびに不快な気持にさせてくれます。

コバエといえば、昔実家で発生したときにやった粘着テープの
素敵な飾り付けを思い出します。
うっかり体にくっついたときなど最悪でした。
それになかなか撲滅できず、数週間悩まされた記憶があります。

洗い残しの食器をかたし、早速殺虫剤を買いに行きました。

やはり、ほかのご家庭でも発生しだす季節なのか、特設コーナーが
できてました。
最近は、いろいろなタイプが出ています。

止まり木の習性を利用して、ゼリー状の薬剤に誘い込み、殺すタイプ、
芳香剤のように虫の嫌うにおいを発し、寄せ付けないタイプ、
定番のスプレー殺虫など。

とりあえず三種類を買って試してみました。

効果のほどは・・・てき面でした。

まず殺虫剤。
発生源のゴミ箱に2、3度噴射してしばらくすると、ほとんど動く
ものがなくなりました。

そして、誘い込みタイプの殺虫剤。
流しにおいたところ、掃除されて行き場をなくしたコバエたちが
殺到して、面白いほど取れました。
ただ、ちょっと匂いがきついです。
一か月使えるものですが、これを一か月も置いておくのはちょっと...
な感じです。

そんなこんなで、あんなに悩ましかったコバエ退治は一日で片付きました。
こんなにあっさり片付くとは、技術の進歩を感じざるを得ませんね。

GoogleのAppEngineについて

2008-04-22 00:37:58 | Weblog
GoogleがAppEngineなんてものを発表したそうです。

infoQ「AppEngineがウェブ開発を簡単にする」

要は、Googleのリソースを使ってWebアプリを開発&提供できますという
ことで、Webアプリへのアクセスが大きくなっても対応できるのが
魅力らしいんですが、ここで気になったのが↓


プレビューリリースでのクオータは、「開発者一人につき3つのアプリ」「1つのアプリにつき500MBのストレージ」「1日(その時点から24時間前まで の)につき2000通のEmail、10GBの下り帯域、10GBの上り帯域、200万メガヘルツのCPU、65万回のHTTPリクエスト、250万回の Datastore API呼び出し、および16万回のURL Fetch API呼び出し」となっている


200万メガヘルツのCPUって...2テラヘルツ!
普通にこんな環境個人じゃ手に入らない。
こんだけCPUパワーあったら、いままで速度的に実現が難しかった
シミュレーション系のプログラムも動かせるんじゃ・・・

今のところ開発言語はPythonのみとのこと。
ほか言語のサポートも考えているようだから、使えるようになったら、
いろいろ試してみたいなあ。
お試し期間中は無償らしいし。


Windowsアプリの開発環境を整備する

2008-01-27 22:31:43 | Weblog
今回は、Windowsアプリ開発環境をフリーで整備する方法を説明します。

使用するツールは、
・Visual Studio 2005 Express Edition C++
・Microsoft Platform SDK
の2つです。
VS2005は、C++のコンパイラです。
MS Platform SDKは、Win32 APIを使用するために必要です。
ともにMicrosoftの製品ですが、何とも太っ腹なことに、無償で配布されています。
これでWindowsアプリも作れちゃいます。
でも、今回作るのはコマンドラインアプリです。

まずはそれぞれダウンロードしてインストールしてください。

注意すべきこと(※片目猫がはまってしまったこと)は、次の3つです。

1.デフォルトで使う文字列が、マルチバイト(wchar_t)になっている。
  なので、charのつもりでコマンドライン引数を扱おうとして
  はまってしまいました。

  プロジェクトの設定は、下のやり方で変更してください。
  [プロジェクト]→[xxxのプロパティ(p)]→
  [構成プロパティ]→[全般]→[文字セット]を[設定なし]に変更する。

  しかし、デフォルトがマルチバイトって、どうなんでしょう・・・。

2.Pratform SDKへのパスを通すのを忘れずに。
  ・インクルードパスの追加
   [ツール]→[オプション(o)]→[VC++ディレクトリ]
   [ディレクトリを表示するプロジェクト(s)]にて、[インクルードファイル]
   を選択。
   Platform SDKのパスを追加する。
   「C:Program FilesMicrosoft Platform SDKInclude」
  ・ライブラリパスの追加
   [ツール]→[オプション(o)]→[VC++ディレクトリ]
   [ディレクトリを表示するプロジェクト(s)]にて、[ライブラリファイル]
   を選択。
   Platform SDKのパスを追加する。
   「C:Program FilesMicrosoft Platform SDKLib」

3.プリコンパイル済みヘッダファイルが開けない?
 Win32コンソールアプリケーションのソースファイルをコンパイルすると、
 なぜか「fatal error C1083: プリコンパイル済みヘッダー ファイルを開けません。'Debugtest2.pch': No such file or directory」
 というコンパイルエラーが出ます。
 これは、一回プロジェクトをビルドすると次回以降出なくなります。
 何なんでしょうね。これ。

[参考サイト]
「Microsoft Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う」についての質問

これで、環境は整いました。
次回は、dot.exeのダミープログラムを作ります。

Graphvizへのコマンドライン引数を調べる。

2008-01-27 22:14:51 | Weblog
Doxygenは、ソースコードが公開されているツールです。
なので、ソースコードを調べて*.dotファイルを削除しているところを
コメントにしてしまえば解決できます。
でも、それを調べるのは結構面倒です。
また、ソースコードが公開されているとはいえ、簡単にコンパイルできてしまうものかも分りません。

そこで、今回はもっと簡単な方法をとります。

Graphvizは、例えば下のようなコマンドで実行します。
dot -Tgif sample1.dot -o sample1.gif
Graphvizをインストールしたフォルダを見ると、確かに
dot.exe
という実行ファイルがありました。

このコマンドが実行された時点では、入力となるdotファイルは存在し、また
そのファイルはコマンド引数としてdot.exeに渡されています。

このファイルを得るにはどうするか。
dot.exeファイルを、オリジナルのものから自作のツールに置き換えるのです。
そうすれば、Doxygenは、dot.exeが置き換わったことに気付かず、実行して
くれるはずです。
そして、呼び出された自作ツールで、dotファイルを別の場所にコピーしておけば、
Doxygenが削除しても問題ありません。

今回は、exeファイルを作る必要があるので、Visual Studio2005を使って
ツールを作りましょう。

次回、フリーでWindowsプログラムを作成する環境の作り方を説明します。