2009-08-23

python でファイルオープン

まだ調査してますけど、
既存のファイルをオープンして更新する処理、
ってのが結構面倒ですね、オープンするだけが、、、


f = open("filename", "a+b")


でバイナリモードで「追記」で開けると思ってたんですが、

seek のマニュアルの通り、
> ファイルを追記モード (モード 'a' または 'a+') で開いた場合、書き込みを行うまでに行ったseek() 操作はすべて元に戻されるので注意してください。

ということで、ダミー値を書いてからではないと、
他の場所の更新が出来ないみたい。

望みの処理をしたい場合、


import os
if os.path.isfile("filename"):
f = open("filename", "r+b")
else:
f = open("filename", "w+b")


とやる必要があるみたい。

何それ面倒。

2008-03-09

project.vim の修正

vim script の project.vim を使っているのだけど、
  • project.vim のプロジェクトを定義しているファイルパスがデフォルトで ~/.vimprojects
    => それぞれのプロジェクトごとに指定しておきたい
  • プロジェクトのパスを絶対パスで定義する必要がある。
    =>絶対パスを調べるのが面倒
    =>プロジェクトを移すと設定しなおさないといけない
というのが不満だった。
なので
  • デフォルトはカレントディレクトリの .vimprojects を見る
  • プロジェクトのパス設定をカレントディレクトリからの相対パスで出きるようにする。
という修正を行った。
で、その project-1.4.1.tar.gz 用パッチ。

--- org/project.vim 2008-03-09 14:08:04.000000000 +0900
+++ new/project.vim 2008-03-09 14:12:47.000000000 +0900
@@ -21,7 +21,8 @@
let filename=bufname(g:proj_running)
else
if strlen(a:filename) == 0
- let filename ='~/.vimprojects' " Default project filename
+ "let filename ='~/.vimprojects' " Default project filename
+ let filename ='./.vimprojects' " Default project filename
else
let filename = a:filename
endif
@@ -971,12 +972,19 @@
let home=substitute(a:info, '.\{-}"\(.\{-}\)".*', '\1', '')
if strlen(home) != strlen(a:info) | let home=escape(home, ' ') | endif
endif
+ let parent_home=a:parent_home
+ " If project home path isn't absolute path, set current direcotry.
+ if parent_home == ''
+ if !s:IsAbsolutePath(home)
+ let parent_home = getcwd()
+ endif
+ endif
if strlen(home) == strlen(a:info)
- let home=a:parent_home
+ let home=parent_home
elseif home=='.'
- let home=a:parent_home
+ let home=parent_home
elseif !s:IsAbsolutePath(home)
- let home=a:parent_home.'/'.home
+ let home=parent_home.'/'.home
endif
return home
endfunction

project.vim のあるディレクトリで
patch -p1 < project.patch
で適用してね。

上を適用することで、
Project のパスを相対パスで指定できる。
元の様に絶対パスでも指定出来る。

後は、taglist.vim と連携できるとうれしいのだけども。

追記(2008-03-11 02:50):

考えなしに拡張すると、痛い目見た。
サブディレクトリでカレントディレクトリ変更すると、
後のファイルオープン操作がおかしくなる。
それを修正しました。
.vimprojects ファイルからの相対パスが使えるようになります。


diff -ur org/project.vim new/project.vim
--- org/project.vim 2006-10-13 22:47:08.000000000 +0900
+++ new/project.vim 2008-03-11 02:36:15.000000000 +0900
@@ -21,7 +21,8 @@
let filename=bufname(g:proj_running)
else
if strlen(a:filename) == 0
- let filename ='~/.vimprojects' " Default project filename
+ "let filename ='~/.vimprojects' " Default project filename
+ let filename ='./.vimprojects' " Default project filename
else
let filename = a:filename
endif
@@ -971,12 +972,18 @@
let home=substitute(a:info, '.\{-}"\(.\{-}\)".*', '\1', '')
if strlen(home) != strlen(a:info) | let home=escape(home, ' ') | endif
endif
+ let parent_home=a:parent_home
+ if parent_home == ''
+ if !s:IsAbsolutePath(home)
+ let parent_home = fnamemodify(bufname("%"),":p:h")
+ endif
+ endif
if strlen(home) == strlen(a:info)
- let home=a:parent_home
+ let home=parent_home
elseif home=='.'
- let home=a:parent_home
+ let home=parent_home
elseif !s:IsAbsolutePath(home)
- let home=a:parent_home.'/'.home
+ let home=parent_home.'/'.home
endif
return home
endfunction

2008-03-01

log4cxx のコンパイル

Fedora8 でlog4cxx のコンパイルをしたら、
以下の様なエラーがでてコンパイルできませんでした。


../include/log4cxx/xml/domconfigurator.h:211: error: extra qualification 'log4cxx::xml::DOMConfigurator::' on member 'subst'

とらえずコンパイルを通すには、
include/log4cxx/xml/domconfigurator.h:211 の
protected:
String DOMConfigurator::subst(const String& value);

となっている部分を
protected:
String subst(const String& value);
とすればよいようです。

クラスの宣言内で、
スコープの指定が不要になっているみたい。

GCC 4 からなのかな?

2007-03-20

Vine 4.0 && NIS Client

Vine Linux 4.1 でNIS クライアントの設定を試みました。
だけど、今までのように
/etc/yp.conf
に書いただけだと、起動時に
ypdomainname が設定されないようです。
どうやら、
/etc/sysconfig/network

NISDOMAIN=hogehgoe
という記述がいりそう。
あとは、
# chkconfig ypbind on
で自動起動するようにしておけば使えるようになる。

2007-02-21

Adobe postscript driver

Adobe のPSプリンタ用のドライバの設定。

日本語用にはグラフィックスのTrueTypeフォントの設定で
ソフトフォントとしてダウンロードを選択する必要があるよう。

ファイルなどの置き場は
WindowsでPostScriptファイルを生成する方法
(http://www2.infonets.hiroshima-u.ac.jp/~taoka/websys/makePS.htm)
を参考にしてください。

Adobeのトップからファイルを置いてるところまで
辿っていけないのだけど。。。。

2007-02-12

Import EPS file in inkscape on Fedora Core 6

Fedora core 6 の inkscape では
EPSのインポートの際に文字の囲まれた部分が塗りつぶされてしまう。
内部的に pstoedit で plot-svg という形式に直してるらしいのだけどそれがダメなので、
sk という Sketch 形式を経由してインポートする。
そのためには、EPS のインポート用の拡張を以下のように書き直す。

+++ /usr/share/inkscape/extensions/eps_input.inx 2007-02-12 20:50:37.000000000 +0900
@@ -2,15 +2,16 @@
<_name>EPS Input</_name>
<id>org.inkscape.input.eps</id>
<dependency type="executable">pstoedit</dependency>
+ <dependency type="extension">org.inkscape.input.sk</dependency>
<input>
<extension>.eps</extension>
<mimetype>image/x-encapsulated-postscript</mimetype>
<_filetypename>Encapsulated Postscript (*.eps)</_filetypename>
<_filetypetooltip>Encapsulated Postscript</_filetypetooltip>
- <output_extension>org.inkscape.output.svg</output_extension>
+ <output_extension>org.inkscape.output.sk</output_extension>
</input>
<script>
- <command reldir="path">pstoedit -ndt -f plot-svg</command>
+ <command reldir="path">pstoedit -f sk </command>
+ <helper_extension>org.inkscape.input.sk</helper_extension>
</script>
</inkscape-extension>

元のファイルを残してなかったので、元のファイルの記述が違うかもしれません。
なので手でやった方が確実かも。
一段経由するので遅くなるけどこれで大丈夫になりました。

2007-02-06

Fedora core 6 && Adobe reader 7.0.8

Fedora core 6 に Adobe reader 7.0.8をいれたけど、
syntax error
が一杯でて起動できない。
どうも、起動スクリプトがダメなようです。
Ubuntu などでもどうようなことが起きてるらしい。
http://ubuntuforums.org/showthread.php?t=233514
解決策としては、
echo $mfile| sed 's/libgtk-x11-\([0-9]*\).0.so.0.\([0-9]\)00.\([0-9]*\)\|\(.*\)/\1\2\3/g'
と言う部分を
echo $mfile| sed 's/libgtk-x11-\([0-9]*\).0.so.0.\([0-9]*\)00.\([0-9]*\)\|\(.*\)/\1\2\3/g'
と言う風に書き換えるということらしい。