サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
ideal-user-interface.hatenablog.com
Pythonでvtk(Visualization Toolkit)を使いたい。実行環境、Windows XP。とりあえず、「import vtk」ができる状態までもっていく。すでにPython2.6がインストールされていることが前提条件。 バイナリのダウンロード http://cpbotha.net/2009/08/13/python-2-6-enabled-vtk-5-4-windows-binaries/ ここから、VTK-5-4-2-Py26-VS9sp1-win32-cpbotha.net.zipをいただく。このzipファイルを展開すると、「VTK」フォルダになる。その中のフォルダ構成は下図の通り。 このフォルダをどこでもいいが、とりあえずC:\Program Files (x86)に置いておく。 ファイルの移動 「VTK」フォルダの中の「lib\site-packages」の中に
wxListCtrlで作成した表において、セルの値を直接編集することはできない。SetStringItemメソッドで、値を変えることはもちろんできるが。ここでの直接編集とは、マウスで表のセルをクリックして値をキーボードから入力するようなことを指す。 wxGridなどを使って表を作成すれば、セルの編集にも対応できるが、比較的簡単にきれいな表を描けるのでどうしてもwxListCtrlを使いたい。そこで、wxListCtrlで作成した表で値を直接編集し、その編集した値をどう取得すればいいのか、というのが今回の話。 セルの値を編集できるwxListCtrl セルの値を編集するために、wx.lib.mixins.listctrl.TextEditMixinを継承して使う。下はテストコード。 import wx import wx.lib.mixins.listctrl as listmix clas
システムコールを使ってファイル操作をするCのプログラムを作成する。 特定のディレクトリ内のファイルとディレクトリをすべて削除したい。unlink()を使えばファイルは消すことができる。また、rmdir()を使えば空のディレクトリは消すことができる。しかし、中味があるディレクトリだと消すことはできないので、中味を消してからディレクトリを消すしか方法はない。なので、階層が深いと面倒な処理が必要になると思われる。 全部考えると複雑なので、できることを組合わせて、最終的な目的を達成できるようにしたい。方針を以下のように定めた。 プログラムの方針 まず、ディレクトリの探索を再帰的に行うようにする。 探索で見つけたディレクトリ内のファイルはすべて消していく。 すべてのファイルを消した後で、ディレクトリを再探索して順次消していく。すべてのディレクトリは空なので消せる。 最初は、ディレクトリの探索だが、い
昨日の続きで、アニメーション作成方法を検討する。 まず、連続的に画像ファイルを出力して後で動画ファイルにまとめる方法ではなく、画像を繰り返し再描画して動いているように見せる方法を見てみる。 matplotlibのexamplesの中のanim.pyを読む。主要部分だけを抽出すると以下の通り。 import pylab as p p.ion() x = p.arange(0, 2*p.pi, 0.01) line, = p.plot(x, p.sin(x)) for i in p.arange(1,200): line.set_ydata(p.sin(x+i/10.0)) p.draw() 順番に見ていくと、 p.ion() --- interactiveモードをオンにする。interactiveモードがどのようなものか正直分からないのだが、これがないとグラフのウィンドウが表示されないことは
StdDialogButtonSizerについて調べていたら、wxPythonコードのスタイルガイド(全10項目)を見つけたので、内容を確認し今後書くコードにできるだけ反映させたい。これに準ずるように努力すれば、クリアでPythonicなコードになるらしい。 以下引用の出典:wxPython Style Guide - wxPyWiki 1. 「import wx」を使い、「from wx import *」は使わないこと。 もちろん「import *」とかもダメ。すぐに思い浮かぶ理由は、名前衝突を避けるためと可読性が悪くなるから等か。 2. コンストラクタ内では、キーワード引数を使うこと。 例えば、wx.DefaultSize、wx.DefaultPosition、wx.ID_ANYでは なく、MainFrame = wx.Frame(None, title="A Title", siz
pythonのmatplotlibライブラリで複数の図を並べて描くときに、軸のラベルが隣りの図に被ってしまうことがある。その解決方法。 例えば、何もユーザが指定しなければ、ラベルの位置は自動調整されて適当な場所に決められる。こんな風に...。 この図を描くpythonのコードは以下の通り。これは何の問題も無い。 import numpy as np import matplotlib.pyplot as plt def f(t): return np.exp(-t)*np.cos(2*np.pi*t)+1 t1 = np.arange(0.0, 5.0, 0.1) t2 = np.arange(0.0, 5.0, 0.02) fig = plt.figure() plot1 = fig.add_subplot(221) plot1.plot(t1, f(t1), 'bo', t2, f(t
TCP/IPプロトコルでのネットワークプログラミングをPythonで実装することが目標。 今回の検討項目 前回(http://d.hatena.ne.jp/Megumi221/20110310)は、簡単なチャットプログラムを実装してみたが、ここではネットワークプログラムにGUIをラップする方法を検討する。 というのも、実際にコードを書いてみると、GUIのループ(wxPythonではapp.MainLoop()のこと)とネットワークプログラムのwhileループ(データの送受信をするところ)の両立が単純ではない。コードの中にwhileループがあると、GUIが立ち上がらない、もしくは立ちあがってもwhileループに入るとフリーズすることが分かる。 これを避けるためには、通信部分をThreadで実行するか、wx.Yieldを使ってフリーズするのを回避する。 参考サイト wxPyWiki LongR
アプリケーションを立ち上げて、その画面にファイルをドラッグ&ドロップすると、画面にそのファイル名が表示されるような仕組みを、wxPythonで実装したい。 そのためには、wx.FileDropTargetクラスを使えばよい。例えば、下記のコードのように書ける。 import wx class MyFileDropTarget(wx.FileDropTarget): def __init__(self, window): wx.FileDropTarget.__init__(self) self.window = window #ファイルをドロップする対象 def OnDropFiles(self, x, y, filenames): #ファイルをドロップするときの処理 for file in filenames: self.window.text.SetValue(file) clas
UNIXネットワークプログラミング入門 作者: 雪田修一出版社/メーカー: 技術評論社発売日: 2003/06/05メディア: 単行本購入: 5人 クリック: 84回この商品を含むブログ (15件) を見る自分のようなネットワークプログラミング初心者には、この本はとても良い。言語はCだけど。本の中のサンプルコードに、誤りが(ほとんど*1)無いのが素晴らしい。長々とサンプルを入力した挙句、動かなかったということはよくあるが、デバッグできないと学ぶのが嫌になってしまうものだ。本の内容は、ソケットを使ったクライアント・サーバモデルによるネットワークプログラミングの入門。 7章まで読んだ。最後まで読み終わる前に、居ても立ってもいられず、Pythonで同じことをやりたいときには、どのような実装になるのかを調べてみた。 このへんを参考にして。 Recipe 52218: Message Passing
Apacheの設定 CentOSでのApacheの設定と起動を行う。インストールは済みだったので、必要がなかった。ここ参照→http://centossrv.com/apache.shtml# /etc/httpd/conf/httpd.confファイルを編集した。 mod_pythonのインストール 次にmod_pythonのインストール。悲しいお知らせを見つける(http://coreblog.org/ats/mod_python-has-no-future)も、yum install mod_pythonで片付ける。インストールはいいが、設定が面倒。URLの設定とか。 PostgreSQLのインストール 公式に推奨されているデータベースがPostgreSQLのようなので、SQLiteの代わりに使おうかと。
MacOSで、Amazon EC2 API Toolsを使用するための環境変数の設定を行う。.bashrcファイルに以下の記述を加えた。Javaランタイムがどこにあるか、確認するのにちょっと手間取った。 export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home export EC2_HOME=/Users/hoge/tools/ec2-api-tools export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin export EC2_PRIVATE_KEY=/Users/hoge/aws-keys/pk-XXXX.pem export EC2_CERT=/Users/hoge/aws-keys/cert-XXXX.pemtoolsディレクトリの中身は以
みんなのPython Webアプリ編 [みんなのシリーズ] Chapter9の「テンプレートエンジン」のところまで到達。 テンプレートエンジンの原理は分かったつもりになれたので、stringモジュールに含まれるTemplateクラスを使って実際にやってみる。これまで、モジュールの中にPythonコードとHTMLが混在していたのを分離してコードを見やすくすることを目的とする。 クライアント側の画面は以下のHTMLファイルを表示する。 <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <form action="/cgi-bin/idandpassdb2.py" method="POST"> Input user ID and password<br /
Pythonのコードを書くときに、変数や関数の命名規則をどうするのがいいのか迷ったので、基本に帰って、PEP8 (Style Guide for Python Code)を読んでみる。短い文献ではあるが、命名規則の他にいろいろと発見があった。 1行の最大長さ すべての行の最大長さは79文字とする。 今まで、73文字にしていた。でもこれは問題ないか。 import importは別々の行に配置する。 今まで、import os, sysとかやっていた。今後はやめる。 式や文の中でのホワイトスペース 演算子のまわりに、1文字以上のスペースを配置して、別の式と列揃えすることは避ける。 算術演算子の前後にスペースを置く。 こう言ってもらえると、迷いが無くなって助かる。 コメント 文末のピリオドの後には、スペースを二つ配置する。 ?なぜかよく分からない。何かいいことあるのかな。 プログラミングにおけ
リストコントロールwxListCtrlを使うと、簡単にきれいな表を作ることができる。ただし、このままだと表のセルの内容を直接編集することができない。これではとても不便だ。ユーザであれば、値を書き換えるためにマウスでポインタを移動してセルをクリックして値を入力する、ということを自然にやろうとするだろう。 その操作を実現するために、wx.lib.mixins.listctrlをimportすればいい。そうすると、wxListCtrlで作成した表の値を直接編集することが可能になる。 実装例。コードの一部を以下に示す。wx.lib.mixins.listctrlをimportして、TextEditMixinを継承している。これだけで、wxListCtrlの表が編集できるようになる。 import wx.lib.mixins.listctrl as listmix class TestListCtr
Fortranのコードをpythonに結び付けるにはf2pyツールが利用できる。そこで、f2pyを使用した場合の計算の実行速度を測定する。 実行手順 計算内容は、tanhやexpで表現した数式の足し算を1億回行うだけの単純なもの。 Fortranコードの計算時間を測定。 Pythonコードの計算時間を測定。 Fortranサブルーチンを読込むPythonコードの計算時間を測定。 テスト環境 OS: Debian Lenny CPU:AMD Phenom II X4 945 まず、以下のFortranコードを実行する(cacl_test.f)。gfortranでコンパイル(オプションは-O3)。 c calc_test.f c program calc_test implicit none c integer i, numberIteration real*8 xValueMin, xVal
Python Scripting for Computational Science (Texts in Computational Science and Engineering) Springer 2009-02-13 売り上げランキング : 40536 おすすめ平均 理工系のためのPython教本 Amazonで詳しく見る by G-Tools 『Python Scripting for Computational Science』8.10.3節に、pythonコードを最適化(optimazation)する方法の例が15ほどまとめられている。 この本の目的自体が、pythonを科学技術計算で利用することを紹介するものである。そのためそこで紹介されている15の方法においては、numpyライブラリを使用することが前提であったり、CやFortranコードと組み合わせてpythonを使うとき
Python Scripting for Computational Science (Texts in Computational Science and Engineering)をテキストにして、科学技術関連の計算や処理にPythonを活用する方法を学んでいる。この本の中で計算やグラフ作成、3D描画等に有用なモジュールが紹介されていたのでどういうものがあるか一通り見てみた。 今後使えそうなものも多くあるので、ここにまとめておく。 Biggles(http://biggles.sourceforge.net/):GNU plotutilsをベースにしたプロットツール CAGE(http://www.alcyone.com/software/cage/):A generic and fairly complete cellular automata simulation engine.(よ
http://codezine.jp/trackback/devsumi2009/ 午後から参加。帰りの坂道はきつかった。 テクノロジーは世界をインターフェイスする(西村佳哲氏) インターネットは世界を繋ぐ、みたいな内容 生物時計は25.3時間 人はメディアを通してスケールしたものを見る(距離、時間等をスケール) breathing earth(地震の可視化)センソリウムPJ デザインとは? 可能性を形にすること 体験をつくる(メディア特性を生かす) 恩返し? 創造の全体性:考える→つくる→使う これらがパートワークになっている 並列処理開発を支援するコンパイラの機能(大野圭一氏) Sunのコンパイラの紹介(共有メモリの場合の並列化) 粒度の大きさの順番 機械語命令の列 プログラム行の集まり アルゴリズム 解決しようとしている問題 分散メモリの場合の並列プログラミング socket MPI
本ブログは以下へ移設いたしました。 ブックマークの変更をお願いいたします。 www.sunnycoder.blog 今後、これまでの記事のリライトや、古くなった情報の更新を含めて、 新たなサイトで運営をしていきます。 今後ともよろしくお願いいたします。
Excelでグラフを作成することがあるが、コピペで数値を処理するのが面倒になってきたので、pythonで処理する。 参考ページ http://www.hlj.com/~tanoue/Python/Wdw/wpy1.html(win32comの使い方) http://d.hatena.ne.jp/tenkoma/20060907(既存のExcelファイルを開く方法) 行いたいこと pythonからExcelファイルを操作するには、win32comモジュールを使う。 グラフの雛型を作っておいて、指定したセルに値を書き込めばグラフ化されるようにする。 グラフの雛型はExcelファイル(ファイル名test_sheet.xls)で保存する。 始めに下図のtest_sheet.xlsを作成しておく。ファイルはC:\Doc\Python-development\test_sheet.xlsに置かれている
日経ソフトウェアの記事(作ってビックリ!Visual Basic, こだかかおる、pp.130、2008年7月号)に基づいて、VBの代わりにwxPythonで同じものを作っている。 前回までやったこと Virtual Earth APIはJavaScriptで呼び出すものであり、その部分を記述したHTMLファイルはダウンロードできるものをそのまま使う(ファイル名ve.html。http://itpro.nikkeibp.co.jp/article/MAG/20071120/287618/?ST=nsw#200807のvb0807.lzhを展開)。 wxPythonでウィジェットを配置し、アプリケーションの外枠を作成した。 地図の表示はできた。 ボタンを押したときや、文字を入力したときのイベントは何も定義していない。 JavaScriptの関数を、関数が定義されているファイルの外からどう実行
日経ソフトウェアの記事で、Visual Basicで地図アプリケーションを作るものがある(作ってビックリ!Visual Basic, こだかかおる、pp.130、2008年7月号)。 同じことを、Visual Basicの代わりにwxPythonでやってみる。Virtual EarthのAPIを使って、WebアプリではなくWindowsフォームアプリケーションを作成する。 世界中に地図情報を提供するサービスである、Microsoft Virtual EarthのAPIは公開されている。wxPythonで作るので、Linuxでも使えるアプリになるはずだ。でもとりあえずWindowsでやってみる。 ポイント整理 Virtual Earth APIを使う。 Virtual Earth APIはJavaScriptから使用するようになっている。 JavaScriptは今まで使ったことない。 VBで
複数の数値をきれいに入力するために、まず入力用の表を作る(行数は1行で固定する)。この表はwxGridで作成する。続いて、ボタンを押すことで、入力用の表に入力した数値を別の表へ順番に記入していく(行数はだんだん増えてゆく)。この出力用の表はwxListCtrlで作成する。 コードの主な部分のみ、以下に示す。 (1)入力用の表を作成 import wx.grid as gridlib class SelectSamplePoint(gridlib.Grid): def __init__(self, parent): gridlib.Grid.__init__(self, parent, -1) FltEdX = gridlib.GridCellFloatEditor(1,5) FltEdY = gridlib.GridCellFloatEditor(1,5) FltEdZ = gridlib
昨日試した方法よりも、かなりきれいに並べられる方法に到達したので記録しておく。 基本的には”サイザーの入れ子”である。 横線は引けるし、画面の中央にパネルを出せるし、でほぼ理想どおりに動いてくれた。 今後はサブパネルを開くときには、これを雛型にしてアプリケーションを構成することにしよう。 import wx import DoCommand class NumberDomainFrame(wx.Frame): def __init__(self, parent, file_name): wx.Frame.__init__(self, parent, title="hoge", size=(300,130)) p = wx.Panel(self) self.file = file_name sizer = wx.BoxSizer(wx.VERTICAL) box = wx.BoxSizer(
Linuxの共有マシンでwxPythonが使えないと不便であるので、いまさらながらインストールすることにした。なにせ共有マシンであるので、ローカルにインストールすることが前提(rootには頼みづらい)。自動的にインストールしてくれるWindowsと違って、ビルドしなければならないからちょっと混乱した(数時間かかってしまった...)。家のLinuxにインストールしたときもだいぶ手こずった記憶があるので、同じことを繰り替えないためにも手順をメモしておく。 まず、Python2.5のインストール。/usr/bin/にあるpythonはバージョン2.2であったので、自分専用にバージョン2.5をローカルディレクトリに置いておく。 アーカイブを展開したディレクトリ名がPython-2.5。 % cd Python-2.5 % ./configure --prefix=/(my directory pa
昨日のTimeFlies2.pyを配布できる形に変換したい。 そこで、py2exeを使ってPythonプログラムのフローズンバイナリを作ってみる。 py2exeの使い方は、いろいろな人が解説してくれている。 http://python.matrix.jp/modules/py2exe.html http://ymasuda.jp/python/py2exe/py2exe.html http://www.python.jp/Zope/articles/tips/py2exe これらを参考にして、以下のsetup.pyを作成する。アプリを実行するときにコンソールは開きたくないので、今回は"windows="を引数に指定する。 from distutils.core import setup import py2exe py2exe_options = { "compressed": 1, "o
subprocessクラスを使って、プログラムの中で別のプロセスを起動する。 以下のコードで正常に動作することを確認した。 import subprocess import sys, time itime=0 cmd = "python cmdtest.py" p=subprocess.Popen(cmd, stdout=subprocess.PIPE) while (p.poll()==None): itime +=1 sys.stdout.write('.') time.sleep(0.2) print "completed" print p.stdout.read() # display results of cmdtest Popenメソッドの引数の"stdout=subprocess.PIPE"で、サブプロセスと親の間のパイプを作る。 p.poll()でサブプロセスの終了を確認す
このページを最初にブックマークしてみませんか?
『理想のユーザ・インターフェイスを求めて』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く