2007年12月18日火曜日

pythonで PowerPointを操作する。

win32com.clientを使う。
DispatchExメソッドを実行してPowerPointのオブジェクトを取得する。
それ以降はなんとなく関数を実行していく。

以下サンプル。

・powerpoint.py
#!/bin/env python
# -*- encoding: shift-jis -*-
import sys
import os
import re
import time
import win32com.client, pythoncom



from_path="test.ppt"
pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
ppt = win32com.client.DispatchEx('Powerpoint.Application')
ppt_file = ppt.Presentations.open(from_path, False, False, False)
slide_count = ppt_file.Slides.Count
for slide_num in range(1, slide_count):
print slide_num
slides=ppt_file.Slides(slide_num)
#################3
#オブジェクト
##################
for i in range(1,slides.Shapes.Count):
print i
try:
print slides.Shapes(i).TextFrame.TextRange.Text
except:
pass



win32com.clientでExcelを操作する方法は以下のサンプル。
・ExcelSample.py

#-*- coding:utf-8 -*-
"""
win32モジュールを使用してExcelを操作するサンプル
"""

import win32com.client

#Excel.Applicationを起動
xlApp=win32com.client.Dispatch("Excel.Application")

#visible
xlApp.Visible=1

#workbooksを追加
xlApp.Workbooks.Add()

#シートを指定
sheet=xlApp.Workbooks(1).Sheets(1)

#シートの(1,1)に値を代入
cellObj=sheet.Cells(1,1)
cellObj.Value="Hello From Python"
cellObj.Font.Size=18

sheet.Range("A2:A5").Value=("A2","A2","A2","A2")
sheet.Range("B2:C5").Value=(("B2","C2"),("B2","C2"),("B2","C2"),("B2","C2"))
sheet.Range("A2:C5").Borders.Weight=2

#ファイルの保存
xlApp.Workbooks(1).SaveAs(Filename='output.xls')

#終了
xlApp.Quit()

グラフを描写するサンプル。
・ExcelGraphSample.py
#-*- coding:utf-8 -*-
"""
win32モジュールを使用してExcelを操作するサンプル
"""

import win32com.client

#data
MyData = ( ('Name','Value'), ('A',5), ('B',2), ('C',3), ('D',7), )
MyRange = "A1:B5"

#Excel.Applicationを起動
xlApp=win32com.client.Dispatch("Excel.Application")

#visible
xlApp.Visible=1

#workbooksを追加
xlApp.Workbooks.Add()

#シートを指定
sheet=xlApp.Workbooks(1).Sheets(1)

#
DataRange = sheet.Range(MyRange)
DataRange.Value = MyData

#ChartWizard
xlChart=xlApp.Charts.Add()
xlChart.ChartWizard( Source=DataRange ,
Gallery =3 ,
Format=None,
PlotBy=2,
CategoryLabels=1,
SeriesLabels=1,
HasLegend=1,
Title='sample',
CategoryTitle='NAme',
ValueTitle='Value'
)

#シート上にグラフ作成
xlChart2 = xlApp.Charts.Add()
xlChart2.ChartWizard(DataRange, 2, None, 2, 1, 1, 1,'Sample01', 'Name', 'Value','Extra')

xlChart2.Location(2, "Sheet1")    #Sheet1に表示する
xlChartObj = sheet.ChartObjects(1)
CellC2 = sheet.Cells(2,3)    #セルC2を基準に使う
xlChartObj.Left, xlChartObj.Top = CellC2.Left, CellC2.Top    #位置の設定
xlChartObj.Width, xlChartObj.Height= CellC2.Left * 2, CellC2.Height * 10  #縦横サイズの設定     

#ファイルの保存
xlApp.Workbooks(1).SaveAs(Filename='graph.xls')

#終了
xlApp.Quit()

2007年11月28日水曜日

sakuraエディタでの pythonキーワード設定

sakuraエディタでpythonキーワードの設定
デフォルトではpythonについてハイライト表示などは設定されていない、
しかし、すでにキーワード設定ファイルなどは用意されている。




sakura editor起動->設定->共通設定->強調キーワードタブ
セット追加ボタン 名前はpython
インポートボタンでpython.kwdを読み込ませる。

メニュー->設定->タイプ別設定一覧
設定17を選択し、設定変更ボタンを押す。
スクリーンタブ
設定の名前:python
ファイル拡張子:py

カラータブ
コメントスタイルブロック型""" ~"""
コメントスタイル行型:#
強調キーワードにpythonを選択


これで設定完了

2007年10月3日水曜日

mantis

mantisという名のBTS(Bug Tracking System)です。

必須のアプリケーションは Apache+PHP+MySqlというわけでXAMPPを使うのが
簡単。
というわけでXAMPPをインストール。

mantis の圧縮ファイルを解凍し、Apacheの設定でPHPを使える設定を
行い、htdocs配下に配置すれば使えるようになる。

http://localhost /mantis/admin/をアクセスすると、mantisのデータベース
作成が行えるようになる。

http://manual.mantisbt.org/

2007年9月29日土曜日

pythonでOpenGL

pythonでOpenGLでも使いましょうということで、

1.setuptools のインストール
パッケージインストールツール。windows pythonにはデフォルトでインストール
されていないのでインストールする必要がある。
PyOpenGLのインストールに必要である。

インストール方法:
python-setuptools のセットアップファイルをダウンロード
#wget http://peak.telecommunity.com/dist/ez_setup.py
#python ./ez_setup.py

2.glut のインストール
OpenGLを使用するためのライブラリ
glut-3.7.6-bin.zipをダウンロードして、解凍する。
*dll を
C:WINDOWSsystemへコピーする。
C:WINDOWSsystem32へコピーする。

3.PyOpenGL のインストール
PyOpenGL-3.0.0a6.tar.gzをダウンロードして展開をする。
#cd PyOpenGL-3.0.0a6
#python setup.py install
これでインストール完了。

4.pygame のインストール
pygame-1.7.1release.win32-py2.5.exeをダウンロードして
インストールする。


4 はついでにインストールしましたw

これでpythonでOpenGLが使えるようになります。

以下簡単なサンプル
#!/usr/bin/python
import sys
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

init_flag = 0

def display():
global init_flag
if not init_flag:
glEnable( GL_LIGHTING )
glEnable( GL_LIGHT0 )
glEnable( GL_DEPTH_TEST )
init_flag = 1

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT )
glPushMatrix()
gluLookAt( 0,3,-10, 0,0,0, 0,1,0 )
glutSolidTeapot( 2 )
glPopMatrix()
glFlush()

def reshape(w,h):
glViewport( 0, 0, w, h )
glMatrixMode( GL_PROJECTION )
glLoadIdentity()
gluPerspective( 45.0, 1.0*w/h, 0.1, 100.0 )
glMatrixMode( GL_MODELVIEW )
glLoadIdentity()

def keyboard(key,x,y):
if key==chr(27): sys.exit(0)

glutInit( sys.argv )
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH )
glutInitWindowSize( 256, 256 )
glutCreateWindow( 'teapot' )
glutReshapeFunc( reshape )
glutKeyboardFunc( keyboard )
glutDisplayFunc( display )
glutMainLoop()

2007年9月22日土曜日

画像のファイルフォーマットについて

C言語でファイルフォーマットチェック関数を簡単に作ってみました。
今後はファイルサイズなどもチェックできるように使用と思います。
JPEGフォーマットについて:
http://siisise.net/jpeg.html#format

int checkextent( char* chp_file ) {
int in_cnt = 0;
int in_ret = 0;

char* chp_ret = NULL;
char cha_buff[ BUFF_SIZE + 1];

FILE* fp = NULL;

chp_ret =fgets( cha_buff, BUFF_SIZE , fp );
if ( *chp_ret = 0xFFFFFFFF && *(chp_ret+1) == 0xFFFFFFD8 ) {
return JPEG_FORMAT;
}else if ( *chp_ret == 'G' && *(chp_ret +1 ) == 'I' &&
*(chp_ret +2)== 'F' ) {
return GIF_FORMAT;
}else if ( *chp_ret == 0xFFFFFF89 && *(chp_ret +1 ) == 0x50 &&
*(chp_ret +2 ) == 0x4E &&
*(chp_ret +3 ) == 0x47 &&
*(chp_ret +4 ) == 0x0D &&
*(chp_ret +5 ) == 0x0A ) {
chp_ret = fgets( cha_buff, BUFF_SIZE , fp );
if ( *(chp_ret ) ==0x1A &&
*(chp_ret +1 ) == 0x0A ) {
return PNG_FORMAT;
}
}
fclose( fp );
return NG;
}

2007年9月17日月曜日

FTPやらtelnetなどを使ってみる。

windowsから色々な場所へftp,telnetをしたくなる場合があるため、ちょっと調べてみました。


■FTPモジュールの使い方
基本的なftpモジュールの操作
結構primitiveなことができるため、ftpを覚えるという点からもよいかもしれない。
from ftplib import FTP
ftp = FTP( SERVER )
ftp.login( USER , PASS )
ftp.cwd( PUT_PATH )
fp_up = open( i , "r" )
ftp.storlines( "STOR "+PUT_FILE , fp_up )
fp_up.close()
ftp.close()

※FTPとかによく使う豆知識
現在のディレクトリを取得
import os
print os.path.dirname(os.path.abspath(__file__))


■telnetモジュールの使い方
これはまぁ、そのままです。
import telnetlib
tn =telnetlib.Telnet( FUMIDAI )
response=tn.read_until( PROMPT[cnt] )
tn.write( WRITE_DATA[cnt]+ '\n' )
tn.close()

2007年9月14日金曜日

プログラムのお勉強

【アセンブラの勉強】
とりあえず、gcc -vでコンパイルの詳細情報を出力する。
# gcc -v sample.c
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.4 (pre 3.3.5 20040809)
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=4 sample.c -quiet -dumpbase sample.c -auxbase sample -version -o /tmp/cclBAc0J.s
GNU C version 3.3.4 (pre 3.3.5 20040809) (i586-suse-linux)
compiled by GNU C version 3.3.4 (pre 3.3.5 20040809).
GGC heuristics: --param ggc-min-expand=55 --param ggc-min-heapsize=48247
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/include
/usr/i586-suse-linux/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/bin/as -V -Qy -o /tmp/cco4tK3p.o /tmp/cclBAc0J.s
GNU assembler version 2.15.91.0.2 (i586-suse-linux) using BFD version 2.15.91.0.2 20040727 (SuSE Linux)
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crt1.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crti.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtbegin.o -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4 -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/lib -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../.. /tmp/cco4tK3p.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtend.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crtn.o


まとめると。
cc1、as、collect2を使ってコンパイルを行っている。
cc1はCのソースをアセンブラコードに落とし、asでアセンブラからオブジェクトコードに変換し,
collect2はリンカでオブジェクトファイルをリンカなどで紐付ける。

もっとわかりやすくすると。
cc1 -quiet -v -D__GNUC__=3 -D__GNU_MINOR__=3 -D__GNU_PATCH_LEVEL__=4 sample.c -quiet -dumpbase sample.c -auxbase sample -version -o sample.s
これは色々なマクロ変数を定義し、sample.cを元にsample.sを作成する

次にアセンブラコードを
as -V -Qy -o sample.o sample.s
これでオブジェクトファイルを作成。

collect2 を使ってオブジェクトファイルから実行ファイルを作成する。
また、ldコマンドを実行しても同じことが作れる。

/usr/lib/gcc-lib/i586-suse-linux/3.3.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crt1.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crti.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtbegin.o -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4 -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/lib -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../.. /tmp/cco4tK3p.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtend.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crtn.o


最後の collectはすっげーめんどくさい。

実際のコンパイルはこんなことをやっています。

次回はアセンブラコードを書いて、標準出力するサンプルを作ってみようかと。

2007年9月12日水曜日

画像フォーマット

・PNGフォーマット
http://www.libpng.org/pub/png/spec/1.0/PNG-Contents.html

・ JPEGフォーマット
http://www.marguerite.jp/Nihongo/Labo/Image/JPEG2.html

・ GIFフォーマット
http://www.tohoho-web.com/wwwgif.htm#GIFAbout

ハフマン符号:
エントロピー符号化:


・JPEG
静止画像の圧縮する形式。基本的に不可逆。
符号化方式:
離散コサイン変換を用いて空間領域から周波数領域へ変換する。
変換データを量子化して、ハフマン符号を行い、圧縮することができる。

ノイズ:
ブロック単位変換のため、圧縮率を上げると、ブロック境界にノイズが
現れる。これをモスキートノイズという。

周波数変換で低周波成分の画像エネルギーが集中しているため、高周波成分では
エネルギーがゼロ。
画像は急激な変化を十分に表現できない。

赤は弱く画像を小さくすると、赤の部分でノイズが乗りやすい。


調べる単語:
エントロピー符号化、ハフマン符号。

2007年9月11日火曜日

readelf

ELFヘッダを見る方法:
readelf -h [オブジェクト]
ELFのマジックナンバーは「177ELF」という文字列になっている。

ABI:Application Binary Interface


・プログラムヘッダ
readelf -l sample

・セクションヘッダ
readelf -S sample

・ストリングヘッダ
ストリングヘッダが.shstrtabにあたるのでオフセットが0012f5、サイズが000158バイトのストリングテーブルがある。
od --skip-bytes 0x0012f5 --read-bytes 0x158 -t x1z sample

・シンボルテーブル
readelf -s sample
ELFヘッダから読み取ってみると。
シンボルテーブルとしては.dynsymがあることがわかる。
そしてダンプしてみると。

od --skip-bytes 0x0001ac --read-bytes 0x000060 -t x1z sample


・再配置情報

2007年9月6日木曜日

GDについて

gdImageCopyResized
とgdImageCopyResampled

の比較。

Resizedのほうが画質が悪く感じられる。


gdImageCopyResampled:

四角形のイメージを別のイメージにコピーする際に使う関数。
スムーズにピクセル値を修正する。
イメージのサイズを減らす際にclarityを保つためである。
オリジナルとターゲットのX,Y座標は適度に領域を延ばしたり、
縮めたりする結果、変化させることが可能
ピクセル値を修正しない場合には gdImageCopyResizedを見る。


gdImageCopyResized:
四角形をイメージから別のイメージへコピーすることができる。
オリジナル画像のX,Y座標とターゲット画像のX,Y座標を適度に
領域を延ばし縮みさせることで変化されることが可能。
イメージ間のコピーでの重要点:
イメージは同じカラーテーブルをもっている必要はないので、
ピクセルはコピーするための同じカラーインデックスをセットしない。
gdImageCopyは同じRGB値をgdImageColorExactに頼って探そうとする。
しかし値が見つからなかった場合にはgdImageColorAllocateで使われたカラーでallocateしようとする。



書いてある内容からするとResampledを使ったほうがよさそうな気がする。

2007年8月30日木曜日

Windows Serverについて【その後】

apacheのインストール方法が悪かったみたい。
portを80以外でインストールするとサービスに追加
されないらしい、それなので httpdコマンドで
サービス追加すれば問題なくいく。
httpd -i -n "service name" -f "conf path"

デフォルト以外のインストール方法も覚えなければなぁ。

2007年8月18日土曜日

Windows serverについて

apacheをインストールしたが、うまくサービスに追加されない。
httpdを直接起動すると立ち上がるが。
原因がわからず。

ちょいと調べてみるか

2007年8月7日火曜日

Rock in Japane Festival

Rock in Japane Festivalに行って参りました!!!
毎日朝からひたちなかまで通っていたため、かなり
つらかったです。


1日目:
カエラ
グレープバイン(途中から)
ポリ
GO!GO!7188
YUI(途中から)
奥田民生(途中まで)
DJハヤシ
増子直純
ELLE(途中まで)

2日目:
BaseBallBear(関根最高、湯浅ステキw)
ウルフルズ(トータスオーバック)
休憩
フルカワミキ(途中まで)
エレファントカシマシ(途中くたばりましたw)
スネオヘアー(毎年下ネタw)
アジカン(ちっこいw)
ヤノカミ(矢野顕子すごい)
バンプ(飯食いながらw)

3日目:
マキシマムザホルモン(大盛況)
ボラ(ギターよりたたいてる方が多くない?)
パフィー(意外に盛り上がった)
トライセラ(疲れ果てて寝てた)
Cocco(言葉が危ういw)
ロケットマン(ふかわ)
リップ(最高)
ラッド(来年はグラスだろう)


総括は明日。
待ってろよ年末!!!!
年末はフェス仲間を作って、盛り上がりたいなぁ~。

2007年8月1日水曜日

Six Easy Pieces

Six Easy PiecesというFeynmanの本を読み直そうと
思いました。
これは、大学時代の課題の本として買ったのですが、
今思うとなかなか面白い本なのではあると思う。

といっても、英語だから読むのが遅いです。。。。

2007年7月31日火曜日

IE7のバグ?

IE7のダウンロードでファイル名の2バイト文字がある場合2バイト目がの値が

0x5Cまたは0x7Cの場合は0x5C→0x57 、 0x7C→0x5Fと変換されてしまう。

microsoftのサポートページにすでに記述されているが、、、、、

パッチを当てろということだそうです。

変換される一覧は後日のせます。

参照サイト

http://d.hatena.ne.jp/ocs/20061103

2007年6月30日土曜日

turbogearについて

turbogearとはRuby on Rail のpython版みたいなもの。
というわけでちょっと触ってみました。

http://turbogears.org/about/sqlobject.html
が公式サイト

簡単なBlogを作って見ようと思う。
とりあえずmixiや、このblogからデザインをぱくることにしようw

とりあえずDBからのDeleteの方法がどうやるんだかw

2007年1月28日日曜日

国立新美術館

スラドでも取り上げられていた、
国立新美術館に行ってまいりました。

入場料無料ということもあり、これは
ぜひ行っておきたいと思っていました。

漫画、日本芸能、未来のメディアについて
展示してあるのですが、激混み状態
だったので、あまり見ずにすらすらいってしまいました。
(無料だからまた回ればいいやとw)

からくり人形、1970年代から各年代の代表漫画の説明、
などなどあって、回ってたら。。。。。
「これから起動戦士ガンダムの放映がはじまりまーーす」
って聞こえたため、速攻入ってしまったw
映画版のやつでした。約120分ずーーと見てました
これでいいのか?って思ったが、やはり面白い。
最後は小声で「ジークジオン!」って言ってましたw

その後は未来の技術と称された展示がありました。
・液体と砂鉄を混ぜて液体をいろいろな形にしてみたり。
・検索ワードに関するサイトがぐるぐる出てきたり(なんじゃ?w)
その他省略w

なんか結論はガンダムはすばらしいという感じになってしまいましたw


話の展開は変わり
CD買っちゃいました。
・Snowdome
・記念ライダー1号、2号

むふふですw

2007年1月15日月曜日

Lhaのバグ?

lhaで圧縮ファイル内にファイル名に0x5cのコードが含まれている場合SJIS運用のUnix系で
展開すると文字化けが起こる。
デフォルトのlhaでは圧縮、展開時にパスを扱う漢字コードが
Linux上ではEUC,Windows上ではSJISと決めうちになっているらしいです。
そのため、EUCではSJISでの0x5cを含むマルチバイト文字の特別処理が要らないため、
パスの中のを/に一括置換を行う処理になっているようです。
そのため、表の一部の0x5cが/になって文字化けを起こしています。
この問題を解決するためには、lhaをリコンパイルする必要があります。
lhaのリコンパイル時にコンパイルオプションで文字コードをSJISに設定
し、0x5cを含むマルチバイト文字の特別処理を行ってくれるようにします。
これにより、文字化けすることなく展開が行えます。


参考URL:
http://blogs.sun.com/nishigaya/entry/java_se_6_jar_improvements