前の月 / 次の月 / 最新

hiChangeLog / 2007-01

2007-01
SMTWTFS
123456
78910111213
14151617181920
21222324252627
28293031

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

2007-01-31 Wed

Igor 6リリース [Igor Pro]

Igor Pro 6がリリースされた。いくつかの新機能が実装された。

実装されて嬉しい機能:
・ウィンドウを「隠す」機能の追加(例えばやたらとグラフが多い場合に有効)
・GraphBrowser(グラフのサムネイル表示ができる!これで命名の悩みが減ると思う)
・「最近使ったウィンドウ」メニューの追加
・tool、infoパレットの分離独立
・ファイルダイアログの刷新(複数選択はまだできない)
・グラフのrangeで、最大値と最小値の独立なautoscale
・Annotationでの相対的なフォントサイズの指定
・グラフ中Traceの表示倍率の設定(いちいち別な軸を用意する手間が省ける)
・グラフのカーソルが2種(AとB)から10種(A-J)に増えた
・グラフのカーソルの水平線あるいは垂直線のみの指定
・「グリッドにスナップ」
・Drawオブジェクトの回転
・Grep(正規表現)
・マルチスレッド(バックグラウンドでのタスク実行やdual CPUマシンでのパフォーマンスup?)

実装してほしいと願う機能:
・wave、ウィンドウの名前の文字制限(31文字)の拡大(256とか)
・ファイルダイアログのドラッグによる複数選択
・キーカスタマイズ
・waveやコマンド名の補完
・オブジェクト指向(もはやIgorではなくなるか・・・)

IllustratorでPDFを作る際にリンクを貼るためにはどうすれば良いだろう? [Illustrator][PDF][Windowsプログラミング]

[2007-01-18-01][2007-01-19-01]に書いたがやっぱりリンク付きPDFは便利(プレゼンなどで)。
Javascriptでもいじれるみたいだが、残念ながら上書きのみのようで、完全に制御するにはSDKでプラグイン作るレベルまで行かないとダメのようだ。

しかし実際にリンクを貼る作業をIllustrator上でどうやって実現すればいいのだろう?
現在の妄想:

__HILINK__(ファイル名、しおり名)
といったテキストオブジェクトを、ファイル名やしおり名へのリンクに変換するようにすれば良いのでは?ととりあえず思ってる。クリッカブルな領域は、縦横比に捕われず自由変形できるテキストオブジェクトが占める領域で指定するようにすればどうだろう。

作成途中でどこにどんなページが来るかわかりっこないので、リンク先はファイル名で指定するしかない。で、PDFを連結する際に元ファイル名がそのページのしおりになるようにすれば、このリンクが有効となる。

リンクの実装と管理、PDF連結、サムネイル表示を一手に引き受けるプログラムを用意すればファイル名を考える煩わしさから解放されるけど、ちょっとしんどそう。ただ、画像データに対しいちいちファイル名を考えて与え、管理もファイル名で行うのはいただけないと日頃思っているので、余裕があればなんとかしたい。

2007-01-29 Mon

指定したパス(ファイル、ディレクトリ)の存在を確認するには_access関数 [Windowsプログラミング]

以下のような感じで動いているようだ。(tchar.hは直接は関係ない)

#include <io.h>
#include <tchar.h>
inline BOOL DoesFileExist(LPCTSTR path){
	return _taccess(path, 0)==0;
}

2007-01-27 Sat

Visual Studioでビルド後に定型処理をさせる [Windowsプログラミング][コマンド]

ちょっとSusieプラグインを作ってみようと思った。この時ビルドするのはDLLだが、使用にあたっては拡張子をspiに変更する必要があり、これをいちいち手動でリネームするのは面倒くさい。自動化するにはプロジェクトのプロパティからビルドイベント => ビルド後のイベントと辿ってコマンドラインに以下を入力(リネーム後のファイル名としてパスを含めていないことに注意。これはrenameコマンドの仕様)。

rename $(OutDir)\$(TargetFileName) $(TargetName).spi

結局これは以下と等価である。
rename Release\myproj.dll myproj.spi

2007-01-26 Fri

ThinkPad T42の液晶が実用に耐えぬほど暗転するようになった

よりによって博士論文審査会の3日前に、メインマシンであるThinkPad T42の液晶画面表示がイカれた。

実用に耐えないほど暗い(目をこらすと僅かに画面が見える)のが症状。OS起動直後や解像度の変更直後の表示はちゃんと見えるが、1分程で暗転する(最初は数時間程度もっていたが、徐々に短かくなって1分程に縮まった)。この症状が発生する前から起動時に液晶が赤みがかっていたが、何か関連があるのだろうか?外部モニタを接続すると問題無く表示できるので、OSやビデオドライバ関連でなく液晶周りがイカれているのだろう。

しかし結構一般的な症状のようだ。インバータが原因となっているcaseが多い。

ThinkPadリフレッシュサービス (ThinkPadシステムボードリペアサービス )
ThinkPad R Series : 液晶画面表示が暗い
http://www.thinkpad-club.com/webforum/archive/tp600j10.html#00954

ThinkPad T40/T40p/T41/T41p/T42/T42p/T43/T43p - インバーター・カード (14.1 型 LCD) の取り外し取り付け

もっと根本がヤレてる場合でも結構対処できてしまうようだ。

ノートパソコンバックライト交換サービス

2007-01-18 Thu

TeXの数式をGhostscriptでアウトライン化する [TeX][Illustrator]

以下はTeXの数式をDTPソフトにの内容と同一である。

Illustrator CS(Windows)を大金はたいて購入したものの、(Illustrator 10では問題無くできていた)TeXの数式が記されたepsファイルの読み込みに難があった。(http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/27936.html)

どうしたものかとムカツイていたが、以下のようにしてTeXの数式をアウトライン化すれば、Illustrator CSで問題無く読み込めた。

dvips -Ppdf -E testeq -o testeq.eps
gswin32c -dSAFER -q -dBATCH -dNOPAUSE -sDEVICE=epswrite -dEPSCrop -r9600 -sOutputFile=testeq2.eps testeq.eps

TeXソースの記述では特に何も気をつける所は無い。

\documentclass{article}
\begin{document}

\begin{eqnarray}
z^2 = x^2 + y^2
\end{eqnarray}

\end{document}

2007-01-17 Wed

コントロール上でマウスの動きを捉えるにはSetCaptureするとよい [Windowsプログラミング]

例えばMFCでダイアログベースにし、その上にボタンやリストビューなどのコントロールを配置し、かつダイアログのOnMouseMoveイベント(WM_MOUSEMOVE)で何かする(マウスカーソル座標表示など)ようにしたとする。この時コントロール上でマウスカーソルを動かしても、ダイアログのOnMouseMoveは実行されない。というのはWM_MOUSEMOVEはコントロールのウィンドウに送られるからである。

コントロール上でマウスの動きを捉えるには、真っ当にはコントロールのクラスを派生して自前でWM_MOUSEMOVEの処理を記述することである。が、ドラッグアンドドロップや単純な座標検出などの作業などにはこいつは大袈裟すぎる。そんな時はCWnd::SetCapture() (::SetCapture(HWND)でもいいけど) するとよい。これの呼出し後は「カーソルの位置に関係なく、以降のすべてのマウス入力が現在の CWnd オブジェクトに送信されます。」(MSDN) 終わったらReleaseCapture()する。

以下は簡単な例。ダイアログ上のクリックでCapture状態が入れ替わる。マウスカーソルの座標がウィンドウ左上に表示される。Capture時はダイアログ上あらゆる場所でのカーソルの座標が更新されるが、そうでない通常時はコントロール上のカーソルの動きは無視される。当然、Capture時にボタンのクリックなどコントロールにマウスイベントを送ることはできない。

void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
  CString str;
  str.Format("x:%d y:%d", point.x, point.y);
  GetDC()->TextOut(0, 0, str);
  CDialog::OnMouseMove(nFlags, point);
}

void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
  static bool b = true;
  if(b) SetCapture();
  else ReleaseCapture();
  b = !b;
  CDialog::OnLButtonDown(nFlags, point);
}

2007-01-15 Mon

PDFの仕様と手書きPDF入門 [PDF]

何であれ理解にあたっては実際にやってみるのが一番。
PDFの仕様を理解しようとして手書きPDF入門というページを見つけた(web archive内)
http://web.archive.org/web/20041204131320/http://www.kobu.com/docs/pdf/pdfxhand.htm

PDFのサムネール画像の作成方法 [PDF][COM][VBScript(WSH)][画像ファイル]

Acrobatの機能として、ページのイメージのサムネール画像の作成・埋め込みがサポートされているが、単体のラスタ画像ファイルでこれを作成したい場合にはどうすればよいか。

外部プログラムでこれらを行うものがいくつかある。

Xpdfに付属する pdftoppm でPDFのページイメージをppmにできる。

pdftoppm.exe -f 3 -l 5 adachi.pdf -r 50 myimg
として、3ページから5ページの画像が50dpiで myimg-000003.ppm とかの名前で出力される。ppmはそれなりに一般的な画像形式のようだが手元のwwwブラウザでは表示できなかった。

またImageMagickの convert でも
convert.exe -resample 50x50% mydoc.pdf hoge.png
などとして全ページのイメージを出力できる。(指定したページのみの場合はどうするのだろう?)

Ghostscriptの使用が多分最も正統派なのだろうが、それはPDF Hacksを参照。

手元のAcrobat 7 Standardはアドバンスドメニューから「すべての画像を書き出し」というメニューがあった。

またAcrobatがあればCOM経由で以下のようにもできる。拡張子をvbsなどとして保存し、ダブルクリックすれば開いてる文書の最初のページがクリップボードにコピーされる。
Dim app, avdoc, pddoc, pdpage, point, rect
Set app = CreateObject("AcroExch.App")
Set avdoc = app.GetActiveDoc
Set pddoc = avdoc.GetPDDoc
Set pdpage = pddoc.AcquirePage(0)
Set point = pdpage.GetSize()
Set rect = CreateObject("AcroExch.Rect")
rect.Left = 0
rect.Right = point.X
rect.Top = 0
rect.Bottom = point.Y
pdpage.CopyToClipboard rect, 0, 0, 100

こんなところか?

PDFのサムネール表示とその画像の解像度について [PDF][Illustrator][画像ファイル]

PDFのサムネール表示は全体を俯瞰するのに便利。手元のAcrobat 7 Standardでは「ページ」というナビゲーションタブでこれが見られる(Foxit Readerを2分ほど使ってみたが、同様の機能はなかった)。特に私は口頭発表でPDFを用いるため、ページの順序を考えたり、聞き手の方々に全体を示しつつ指示のあったページに素早く移動する際にこれが活躍する。この時のサムネール画像の解像度について考えたことをメモする。

まず、PDFにはページのデータとは別にサムネール用のラスタ画像ファイルを内包する仕様が用意されている。これを持っていないPDFをAcrobatでサムネール表示する際には、Acrobatがその都度サムネール画像を作成し描画する。これが一番解像度の良い表示となるが、当然ながら描画にあたってはそれなりの時間がかかってしまう。

この欠点を克服するのが「サムネール画像の埋め込み」というものである。「ページ」のオプションメニューからこれを選択すると、ラスタイメージがPDFの仕様に従ってファイルに埋め込まれ、サムネール表示にあたっての描画の負担はかなり軽減される。だが解像度はサムネール画像なしの場合よりも悪い。かつ、その解像度を指定するオプションも見当たらなかった。

私は発表用のスライドはIllustrator CSで1枚ずつ作成し、後でこれを結合している。Illustratorのオプションとしてサムネール画像を作成というのがあるが、この場合の解像度はかなり悪い。

またPDFキャビネットもPDFのサムネール表示をすることが可能である。これは既存のサムネール画像とは別の機構で表示してくれるようで、その解像度はそれほど悪くなく、かつ内容はどこかにキャッシュするらしく、表示のたび再描画してる気配は見えない。

まとめる。解像度の大小は以下の通り:
埋め込みサムネール画像なし > PDFキャビネットの表示 > Acrobat 7 Standardによる埋め込みサムネール画像 > Illustrator CSによる埋め込みサムネール画像

埋め込みサムネール画像なし埋め込みサムネール画像なし
PDFキャビネットの表示PDFキャビネットの表示
Acrobat 7 Standardによる埋め込みサムネール画像Acrobat 7 Standardによる埋め込みサムネール画像
Illustrator CSによる埋め込みサムネール画像Illustrator CSによる埋め込みサムネール画像


画像ファイルを指定した埋め込みが最もflexibleと思うのだが、AcrobatのメニューのみならずAPI(もちろんJavaScript、COMインターフェースも)にもそういったものは無かった。まあAPIの方には PDDocCreateThumbs なる関数が用意されているのでこれを駆使すれば同等のことができると思うのだけれど。

ならばサムネール画像を埋め込むソフトはあるかと思いきや、以下しか発見できなかった。複数ページに一気に埋め込むのは面倒な感じである。
http://www.coolpdf.com/pdfthumbnail.html

調べてる最中に、いっそ自前でこういうソフトを作ってしまおうかとも考えたが、PDFの仕様を理解する時間がとれないのでとりあえず保留。

Windows XPでクリップボードビューア [Windows]

アクセサリメニューにクリップボードビューアが無いなあと思ったが、「ファイル名を指定して実行」で

clipbrd
すればよかった。
http://arena.nikkeibp.co.jp/tec/winxp/20030520/104699/

Annotation中の文字列の動的な振舞 [Igor Pro]

Igor Proにおいて、Annotation(Tag)はグラフ等に文字列を挿入する際に活躍する。
ただの文字列表示だけでなく、グラフ中の系列を表示したり、またTagの位置はデータの位置と関連づけたりできる。何よりそれらが動的な性質を持つことが素晴らしい(系列の色や場所を変更すれば、それがAnnotationに自動で反映される)

この動的な性質は、文字列そのものにも持たせることが可能である。例えば以下のようにAnnotationに記述したとしよう。

\{hoge}
\{foo*3}
\{fuga()}
\{time()}
もしrootディレクトリにhogeなるString(文字列変数)やfooなるVariable(数値変数)があれば、その値の評価結果が上のAnnotationの1行目、2行目に反映される。fuga()なるFunctionが定義されていれば同様にその返り値が3行目の表示に反映される。time()関数はIgorにもともと備わっているものである。評価、即ち値のupdateは、例えばAxis(軸)の設定変更時、Windowのサイズ変更時、Annotationの変更時、Experiment読み込み時に自動で行われる(移動や表示などではupdateされないようである)。

Igorのマニュアルには「root直下のグローバル変数とか使うとうっかり消して大変なことになりがちだからこれはあんまりオススメできません」とあるが、そこは適材適所でこれにもうまい使い方があるはず。例えば、
experiment: \{IgorInfo(1)}.pxp
などとしておけば出所のExperimentの名前がグラフからわかる。解析方法を変えた時などにはExperimentを別名で保存するようにしておけば、手元の印刷されたグラフがいつのバージョンの解析に基づいているのかがわかる。

ファイル名に使えない文字の種類 [ファイルシステム]

ファイル名として使えない(使ってはいけない)文字の種類を調べた。
OS文字
Windows \ / : ? * " > < | NUL
UNIX / NUL

+、@、&、#、$、%あたりも特に問題なかったのが意外。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0

2007-01-14 Sun

pythonに三項演算子は無い [python]

三項演算子ではなくifとelseで書けよとのことだそうだ。
http://omake.accense.com/wiki/PythonIntroThree

2007-01-13 Sat

py2exeでpythonスクリプトをWindows実行形式に変換 [python][Windowsプログラミング]

py2exeというのが、pythonスクリプトをWindows実行形式に変換してくれるプログラムのようだ。すげー
私はダウンロードした実行ファイルをまず展開してインストール方法がわからずムカツいたが、単に実行ファイルを実行するだけでインストールは即座に終わった。

実際に変換するには

from distutils.core import setup
import py2exe
#setup(console=["aaa.py"]) # 実行時dos画面が出る
setup(windows=["aaa.py"]) # 実行時dos画面が出ない
なるsetup.pyを用意した上で
python setup.py py2exe
とする。するとdistディレクトリ内にexe本体を含めた配布用ファイル一式が出来上がる。配布にあたってはこれらをまとめて配布する必要がある。

参考:
py2exe: Python のスクリプトを Windows 用の実行ファイル (exe形式) に変換する
py2exe

wxWidgetsのGUIデザイナ:wxGladesとXRCed [python][Windowsプログラミング][wxPython]

ちょっとしたGUIプログラムをパッと作りたい時にどうするか。
C/C++はちょっとやるだけには面倒なので、もっと何も考えないでいいやつにしたい。
Visual Basicは文法面がちょっと気にくわない。.NETはよくわからない。
じゃあスクリプト言語でということになるが、何かと文書やツール類が充実してるpythonが良さそう。
で、WindowsでpythonをGUIから使う/呼ぶためにはどうすればいいのか調べたことをメモする。

まずwxWidgetsというものがある。これは言語やOSの違いを吸収してくれるGUIツールキット。これをpythonからいじるためのものがwxPythonである。これが「pythonでGUI」に必要な条件(他のツールキットももちろんある)。

で、GUI設計においてはデザイナの使用がキモなので、このためのツールを探した。そしてwxGladeなるものとXRCedなるものを発見した。

前提(サイザー)
wxWidgetsにおいてはサイザーなるオブジェクトがある。これはウィンドウと各コントロールの相対的な大きさや位置関係をよしなに面倒見てくれるオブジェクト。wxWidgetにおいては、コントロールの配置はサイザーの使用が原則のようだ。wxGladeではサイザーが無いとコントロールが配置できない。XRCedではできるみたい。

wxGlade
これはコントロールを比較的直観的に、つまりはVisual Studioのように配置できるため、画面などもそこそこ見慣れたものが出てくる。GUIの情報の出力形式はXRC(後述)、python、C++など色々と選べる。インストーラでインストールできた。
wxWidgets でクロスプラットフォーム GUIアプリを作ろう

XRCed
これはVisual Studioなどと比べ抽象的に(と感じた)コントロールを配置するもので、最初は面喰らったがサイザーの概念が多少わかるとこれはそれほど苦にならなかった。GUI情報の出力はXRCのみ。wxPythonで記述されており、wxPythonに付属。
PythonMatrix:XRCedの使い方


ちょっと触っただけだが、どちらも優れていて使い易そうだなと感じた。だが、wxGladeは複数の出力形式ができ、イベントハンドラ名の記述もできる点で優れているのかなあと感じた。GUI部分を変更して上書き保存しても、ハンドラの定義部分はうまく残してくれるようだ。


順番は前後したが、wxPythonにおいてGUIの記述は2通りある:ソースに直接コントロールの配置など全て記述するのと、GUI情報のみXMLファイルに格納し(これをXRCというようだ)別途読み込むこと。前者はソースひとつで完結する単純明瞭さがメリットで、後者はインターフェースと処理のロジックを分離できるのがメリット。

wxGladeでハンドラを指定してpython形式で出力するとハンドラの記述も終わっていて便利。一方でXRCで出力すると、後に別途自分でpythonソースにハンドラを記述(「このボタン押下時この関数を呼べ」)する必要があってひと手間増える(GUIとソースの分離がXRCの本質なので、まあこれは当然)。XRCedは出力がXRCなので、当然同様な事情である。

パッと作成するシンプルさの観点からは、wxGladeを使用してpythonで出力するのが良さそうというのが今日の結論。

なお、XRCで記述したコントロールに対しイベントハンドラを記述するには以下のようにする。XRC Tutorial

<?xml version="1.0" encoding="cp932"?>
<resource>
  <object class="wxFrame" name="myframe">
    <title>myframe_title</title>
    <object class="wxPanel" name="mypanel">
      <object class="wxBoxSizer">
        <orient>wxVERTICAL</orient>
        <object class="sizeritem">
          <object class="wxButton" name="mybutton">
            <label>mybutton_label</label>
          </object>
        </object>
      </object>
    </object>
  </object>
</resource>

import wx
from wx import xrc

class MyApp(wx.App):

    def OnInit(self):
        self.res = xrc.XmlResource('hoge.xrc')
        self.init_frame()
        return True

    def init_frame(self):
        self.frame = self.res.LoadFrame(None, 'myframe')
        self.panel = xrc.XRCCTRL(self.frame, 'mypanel')
        self.frame.Bind(wx.EVT_BUTTON, self.OnMyButton, id=xrc.XRCID('mybutton'))
#        wx.EVT_BUTTON(self, xrc.XRCID('mybutton'), self.OnMyButton) # also acceptable ?!
        self.frame.Show()

    def OnMyButton(self, evt):
        wx.MessageBox('hoge', 'fuga')
   
if __name__ == '__main__':
    app = MyApp(False)
    app.MainLoop()

2007-01-11 Thu

WindowsでWanderlustを入れた [Emacs]

NTEmacsの21.3.1で、Apel10.6、limit-1_14-200411201014、semi-1.14.6.tar.gzを入れた。

make
make install LISPDIR=/C/programs/emacs-21.3/site-lisp VERSION_SPECIFIC_LISPDIR=LISPDIR=/C/programs/emacs-21.3/site-lisp
でいけた。次に wl-2.14.0.tar.gz を展開してMakefile中のLISPDIRとINFODIRを上記のように適宜編集し
make
make install
make install-info
とした。まあうまく動いているようだ。

アーカイバとしてlhaを使おうと思った。http://www.vector.co.jp/soft/dl/win95/util/se347175.html から入手した実行ファイルをlha.exeとリネームしてemacsのbinに入れたら、うまく動いているようである。

EmacsでMule-UCSを入れるのに少々手間取った [Emacs]

Mule-UCSはUnicodeを使うためのパッケージ。http://unit.aist.go.jp/itri/itri-gist/ftp.m17n.org/ から入手できる。
インストールは

emacs -q --no-site-file -batch -l mucs-comp.el
してバイトコンパイルした後にlispのディレクトリに入れれば完了と書いてあった。
最初Mule-UCS-0.84を試してみたが以下のように怒られてしまった。(emacs 21.3.1)
While compiling toplevel forms in file c:/temp/Mule-UCS-0.84.tar/Mule-UCS-0.84/lisp/un-define.el:
  ** reference to free variable progn
  ** The following functions are not known to be defined: find-charset,
    w32-regist-font-encoder
Wrote c:/temp/Mule-UCS-0.84.tar/Mule-UCS-0.84/lisp/un-define.elc
While compiling toplevel forms in file c:/temp/Mule-UCS-0.84.tar/Mule-UCS-0.84/lisp/un-supple.el:
  !! Symbol's value as variable is void ((progn))
前者に関してはMeadow用の機能なので気にする必要はない(http://www.m17n.org/mlarchive/mule/200104/msg00011.html)ようだが、後者はヤバそうな雰囲気がある。実際にWanderlustの動作が変だった。http://masaru.org/diary/200209.html

そこで Mule-UCS-current で試したらうまくいった。http://nais.to/~yto/clog/2006-10-16-1.html

2007-01-09 Tue

\verbコマンドを\textttコマンドにEmacsで一括置換する [TeX][Emacs]

コマンド中にverb命令は使えないようなので、まとめてtextttに変えたいなあと思ったことがあった。
Emacs上のreplace-regexpで以下のようにしたらうまくいった。クエスチョンは最短マッチにするための命令

Replace regexp \\verb|\(.*?\)| with: \\texttt{\1}

dvipdfmでリンク付きPDFを作ろうとしたらエラーが出た [TeX]

目次や図番号からのリンクの機能はやっぱり便利。

\usepackage[dvipdfm,bookmarks=true,bookmarksnumbered=true,bookmarkstype=toc]{hyperref}
とかいう記述を追加しdvipdfmxによって作成したPDFにはそんなリンクの機能を持たせることができる。

ところがやってみるとエラーが出てタイプセットがうまくいかない。1回目は無事通るが、2回目に
[1] [2]) [3] (./myreport.lof
! Missing number, treated as zero.
<to be read again>
                   \let
l.2 ...my_reference}}}{4}{figure.1.1}
などとなる。これはどうやら図のキャプションからciteを呼んでいることが原因のようで、lofファイルを見てみると
(前略)\cite {my_reference}(後略)
と、コマンドと引数に空白が勝手に加えられてしまっている。これを機械的に除去してもうまくいかなくてムカツいてたが、hyperref - TeX Wikiに次の記述を発見し、この通りやったらうまくいった。書いてある通り、参考文献のリンクなぞ不要なので全く問題ない



cite.sty cannot currently be used with hyperref.
However, I can do a workaround via:
\makeatletter
\def\NAT@parse{\typeout{This is a fake Natbib command to fool Hyperref.}}
\makeatother
\usepackage[hypertex]{hyperref}

so that hyperref will not redefine any of the biblabel stuff - so cite.sty
will work as normal - although the citations will not be hyperlinked, of
course (But this may not be an issue for many people).


2007-01-08 Mon

AcrobatとPDFとその操作について調べたことをメモ [PDF][Windowsプログラミング]

Acrobat Developer Centerから文書やらツールキットやらに辿れる。何でもある。文書はAcrobat 7.0.5 SDKを試しに入れてみたら大量に付属していたので、個々にかき集める前にSDKにインストールを行うと良さそう。

本家ではないが、Adobe Acrobat 7.0例文辞典なんてすごいページもあった。

OLE(COM)によるAcrobatの操作を介したPDFのリンク作成は無理っぽい [COM][PDF][Windowsプログラミング][VBScript(WSH)]

AcrobatにはCOMインターフェースが備わっており、他のプログラムから操作ができる。で、PDFのリンクをいじろうと思ったけどできなかった。全機能が利用できると思ったが、そうでもないみたい。

Acrobat Developer Center - Interapplication Communication から他プログラムからの操作のための技術文書が入手できる。でリンクツールに関連するあたりを見てみるとAcroExch.PDAnnotなるオブジェクトを発見したが、これにリンク先を指定・取得するメソッドが無い。AcroExch.PDDoc.AddNewAnnotメソッドを見てみると、subtypeは(Linkではなく)Textでないといけないと書いてある。つまりOLE経由ではリンクの操作はできないみたいなのである。一方でApple eventの方にはannotationクラスできちんとリンク周りのメソッドが用意されている。ムカツク。

ちなみにPDAnnotは以下のようにして取得できる。

Dim app
Set app = CreateObject("AcroExch.App")
Dim avdoc, pddoc, pdpage, pdannot
Set avdoc = app.GetActiveDoc
Set pddoc = avdoc.GetPDDoc
Set pdpage = pddoc.AcquirePage(0)
Set pdannot = pdpage.GetAnnot(0)
msgbox pdannot.GetContents
msgbox pdannot.GetTitle
msgbox pdannot.GetColor
msgbox pdannot.GetSubtype

2007-01-07 Sun

Visual Studio .NET用subversionクライアント(プラグイン)AnkhSVNを試した [subversion][Windowsプログラミング]

AnkhSVNはVisual Studio .NETでsubversionを使うためのクライアント(プラグイン)である。AnkhSetup-1.0.0.2668-RC4.msi をダウンロードしてきてVS .NET 2003にインストールし、ちょっと使ってみた。AnkhSVN Wikihttp://www.kopan.org/index_i-32.htmlなどを参考にした。

以下の手順で既存のソリューションに適用できた:
・リポジトリをあらかじめ作っておく(TortoiseSVNなどで)
・ソリューション開き、ソリューションエクスプローラを表示させる
・ウィンドウ内最上部「ソリューション'mysolution'(1プロジェクト)」となっているところを右クリックし、Ankh => Add Solution to ... とする
・リポジトリのURLを入力する

するとTortoiseSVNチックにアイコンの表示が変わった。最初は緑色。
ソースに変更を施してビルド(保存)すると緑のチェックが赤のMに変わった。
右クリックしてDiffとすると変更した点が確認できる。
右クリックしてCommitとすると、ログ入力する画面が出てきた末にコミットできた。
ファイルを右クリックしてAnkh => Log とすると関わりのあるログが参照できる。

プロジェクトやソリューションの変更はCommitできず、またログも見られない。これは、プロジェクトの設定はバージョン管理しないというAhnkSVNのポリシー?に基づくもののようだ。
Frequently Asked Questionsより"Some project settings not preserved across checkin/checkout (ie. Working Directory). Why?"

任意のリビジョン間のdiffも現在見られないようだ。これはTortoiseSVNならShow logして2つのリビジョン選択し右クリックして"Show differences as unified diff"すると見ることができる。

ソリューションやプロジェクトを右クリックして"Revert to Revision"してもうまくマージされない。これはプロジェクトやソリューション単位だとうまくいかないが、個々のファイル毎だとうまくいくようだ。

終了時にたまに以下のエラーが出る:

An internal error occured:

パラメータが間違っています。
   at EnvDTE.UIHierarchyItems.Item(Object index)
   at Ankh.Solution.Explorer.GetNodeForProject(Project project)
   at Ankh.Solution.Explorer.ProjectRefreshCallback(Object state)




たまにエラーが出て、過去バージョンへのMergeがうまくいかず、またドキュメントも整備されていないので、まだ発展途上なのかなと感じた。多少手間は増えるが、AddやCommitなどは随時TortoiseSVNで行った方が操作の一貫性も保てるし確実なのではないかと思ったのを今日の結論とする。

信頼性の高いHDDが欲しい [HDD]

実は体験したことがないし、そんな話も最近聞かないが、HDDクラッシュはやっぱり悪夢である。一般人に手の届く価格で、そのあたりに気を使っているモデルはないかなーと探していたらそれっぽいのがあった。
Maxtorから容量500GBでSerial ATA II接続のHDD“MaXLine Pro 500”シリーズ「7H500F0」が登場!

これをまたHDDケースに入れるか、バックアップ用サーバを組むか、とかでまた迷う。

2007-01-06 Sat

Mathematicaで、Apply関数でリストを操れる [Mathematica]

式(第二引数)の頭部を置換してくれる関数。例えば以下でmylistの各要素の和が求められる。

Apply[Plus,mylist]

平成17年度数式処理

Mathematicaでローカル変数はModule関数などで用いるとよい [Mathematica]

うっかり変数などを定義してしまうと他の関数の動作に影響を及ぼしかねないので、(Mathematicaに限らず)可能な限りローカル変数を用いるのが良い。そのためにはModule関数を用いる。

g[x_] := Module[{a}, a = 5; While[a > 0, Print[a^x]; a = a - 1]]
Lispのletみたいなもんか。

平成17年度数式処理

Mathematicaで関数の条件分岐は If などで実現できる [Mathematica]

階段関数とかは定義にあたって条件分岐が必須となる。Mathematicaで行うには例えば以下のようにする。

f[x_] := If[x < 0, 0, 1]
このIf文の第一引数でQで終わる諸テスト関数が活躍する。

Mathematicaで陰関数のプロットには要 ImplicitPlot パッケージ [Mathematica]

タイトル通り。

<< Graphics`ImplicitPlot`
ImplicitPlot[x^2 + y^2 == 1, {x, -1, 1}]

平成17年度数式処理

Mathematicaで通分はTogether [Mathematica]

タイトル通り。

平成17年度数式処理

Mathematicaで"? "を先頭に付して評価するとヘルプが見られる [Mathematica]

タイトルのまま。
なんとワイルドカードも使える。例えば「Qで終わるテスト関数を一覧したいなー」と思った場合には

?*Q
とすれば良いのだ。便利便利

平成17年度数式処理

Mathematicaで Ctrl + L で直前の入力のコピー&ペーストができる [Mathematica]

タイトルのまんま。
平成17年度数式処理という授業レジュメで学んだ。

Mathematicaの式変形と仮定 [Mathematica]

Mathematicaには式変形するコマンドSimplifyなどが用意されている。前提によって変形のされ方は変わるが、それは指定できる。Simplifyなら第2引数に条件を入れる。

In[1]:= Simplify[Abs[x]==x]
Out[1]= x == Abs[x]

In[2]:= Simplify[Abs[x]==x, x>0]
Out[2]= True
3.3.10 仮定の使用

Mathematicaのテスト関数 [Mathematica]

Mathematicaで、偶数や素数だったらTrue/Falseを返す関数は末尾にQがつくものが多い(EvenQ、PrimeQとか)。この判別の行為をテストと呼んでいる。ヘルプの組込み関数から プログラミング => テスト として一覧が見える。

カレントディレクトリ内のディスク使用状況をduで調べる [コマンド]

普段使用してるLinuxのduはバージョン4.5.3だったが、

du *
などとするとカレントディレクトリ内のディスク使用状況が列挙された。

一方WindowsではRyu1さんのduコマンドを使わせて頂いているが、先程と同様にするとリカーシブに下層のディレクトリの容量も表示してくれて表示が大変なことになるので、
du -s *
とする必要があった。

このアスタリスクはシェルの持つ展開機能。同様なことをシェルに頼らず実現するなら
ls | xargs du -s
とする(xargsの使いかたがちょっぴりわかってきた)

2007-01-05 Fri

CTANに沢山文書があった [TeX]

CTANとはComprehensive TeX Archive Networkの略で、TeX関連のファイルを集約させた場所。
マクロの類が膨大にあるのは以前から知っていた(膨大すぎてかえって見る気が失せる)が、良く見たら解説文書の類も結構充実していた。Windowsヘルプ形式のファイルも結構用意されていた。

CD/DVDによる書籍

四則演算は当然だが、検索能力も計算機の仕事の中で最重要であると考えている。この意味で、色々な書籍がCD/DVDの形態で販売されるとよいなと思っていた。

辞書や百科辞典は既にある([2006-11-22-3]及び[2006-11-22-4])が、C MAGAZINEトランジスタ技術もそのような形でバックナンバーを販売していた。もっと増えるといいな

win32guiっていうのがあるそうだ [Windowsプログラミング]

win32guiというライブラリがあるようだ。面白そうなんだが、難しそうでまた普及してなさそう。時間のある時にいじってみよう

2007-01-04 Thu

iTunesとCOM [iTunes][COM]

iTunesはCOMインターフェースを備えているようだ。面白そうなんだが使う機会はあるだろうか?
iTunes COM for Windows SDK License Agreement

GTDという情報・仕事の整理術 [GTD]

GTDという情報・仕事の整理術があるそうだ。Getting Things Doneという本で提案されたものらしい。

Webを検索してみると関連する文書やソフトがウヨウヨ引っ掛かって、「生活が充実しました」など歓喜の声なども多く見られる。本当に必要な仕事とその処理方法・結果に関してじっくり考えるあたりがキモのようだ。ちょっと惹かれたけど、例のごとくソフト選びやそのカスタマイズに時間を取られて本末転倒になりそうなので導入は見送り。

参考:
【GTD】ライフハック Part2【Life Hack】
写真でわかるGTD(週次レビュー編)

TortoiseSVNを触ってみた [subversion][TortoiseSVN]

強力なバージョン管理システムsubversionは便利だが、Windowsはなにかとコマンドライン端末と相性が悪いので、「ナマ」のsubversionはやや使いにくい。そこで有志がエクスプローラの拡張としてのインターフェースを持つTortoiseSVNを作製した。便利そうなのでちょっと使ってみた。

- まずリポジトリを作りたい場所で右クリックし、"Create repository here"してリポジトリを作る。
- で適当な作業場所で右クリックし"SVN Checkout"するとそこにリポジトリがチェックアウトされる。
- 追加したいファイルをそこにコピーするなりそこで作るなりし、右クリックして"Add"するとaddされる。
- あとは適宜commitなど。これも右クリックからできる
- まとめてAddしたいディレクトリは、そこで右クリックして"Import"するとまとめてインポートできる

おー便利そうだ。でもリポジトリのバックアップはまだTortoiseSVNからはできないみたいだ。

参考:uebu: Subversionの導入(WindowsXP)

screenで変な文字を表示させて画面が固まった時、(prefix)+C したら復旧した [screen]

日本語テキストをうっかりcatしてscreenが固まった際、どうすれば復旧できるのかと調べた。
タイトル通り、(prefix) + C (clearコマンド)で復旧できた。

2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2010-03-08 22:21