yuu_nkjm blog
2009-11-10(Tue) [長年日記] 編集
[DF][Windows 7 (64bit)] Windows 7 64bit版でファイラDFが動くか
Windows 7 64bit上でDF(Ver. 197)を実行することができました.2週間ほど使ったところ,特に問題は発生していなさそう.しかし,意図通りの動作をしていなかったとしたら怖いなー.いつかはDF使いからデフォルトのエクスプローラ使いにクラスチェンジするべきなのか….まあ,エクスプローラが信用できるかと言うと,そんなこともない気がしますが.
2009-11-16(Mon) [長年日記] 編集
[Windows 7 (64bit)][TeX] Windows 7 (64bit)でwmf2epsを使う
(2010-04-08追記) ついに公式パッチきたー!
以下の公式ページにインストール方法が書かれています.Windows 7@The WMF2EPS Homepage
んで,自分も早速やってみた.Windows 7 (64bit)でwmf2epsを使う (その2) - yuu_nkjm@tDiary(2010-04-09)
texで書いた論文に張り込む図はepsを使うのが標準だ.僕は,Power Point で作成した図をwmf2epsというソフトで変換している.
Windows 7 (64bit)では,wmf2epsに添付されているW2kPrint.INFというインストールファイルが使えない.以下の様に適当なPSプリンタを登録したらPowerPoint 2007からコピーしたwmf(?emf?)の図をepsに変換することができた.
プリンタの登録
- コントロールパネル→デバイスとプリンター→プリンターの追加
- ローカルプリンターの追加
- 既存のポートを使用で「FILE:(ファイルへ出力)」
- TOSHIBA e-STUDIO PS3を選択
TOSHIBA e-STUDIO PS3の設定
- TOSHIBA e-STUDIO PS3のプロパティ
- 詳細設定タブ→標準の設定→詳細設定
- グラフィックス TrueTypeフォント: ソフトフォントとしてダウンロード
- PostScript 出力オプション: EPS
- TrueType フォントのダウンロードオプション: ビットマップ
- PostScript 言語レベル: 2
wmf2epsの設定
- EPS-Conversion→WMF2EPS Settings
- EPS-processingのPS-PrinterでTOSHIBA e-STUDIO PS3を選択
うまくいかないところ
boundingboxの計算が正しく行われないようで,図の端の線が切れてしまうことが多い.困った.取り敢えず,まっ白なboxを端っこにおいたりしてしのいでいるけど嫌な感じ.
Windows VistaやWindows 7でのインストールの仕方(2010-01-05)
kbysさんから教えていただいたページ(Windows Vista (30-May-2009)@The WMF2EPS Homepage)をざっと和訳.
- WMF2EPSを解凍し,適当なディレクトリ(%ProgramFiles%\WMF2EPS)にインストールする.
- インストールディレクトリの下に,新しいディレクトリ(%ProgramFiles%\WMF2EPS\PSprint\Vista)を作る.
- MF2EPS2.PPD ファイルをWMF2EPS\PSprint\Win2000\Standardから,%ProgramFiles%\WMF2EPS\PSprint\Vistaへコピーする.
- Windows XPへインストールしたWMF2EPSから4つのPS driver files (PS5UI.DLL, PSCRIPT.HLP, PSCRIPT.NTF, PSCRIPT5.DLL)を%ProgramFiles%\WMF2EPS\PSprint\Vistaへコピーする.これらは,典型的には%windir%\system32\spool\drivers に存在する.(これらのソフトウェアはコピーライトの関係で,ここで再配布することはできません)
- Vista 64 bitの場合は,さらに三つのファイル(PSCRPTFE.NTF, PS_SCHM.GDL, run64.exe)を%ProgramFiles%\WMF2EPS\PSprint\Vistaへコピーする.
- wmf2epsのヘルプファイルに書かれているように,プリンタのインストールを続ける.Windowsからドライバの検索場所を聞かれたら,ProgramFiles%\WMF2EPS\PSprint\Vistaを指定する.
2009-11-17(Tue) [長年日記] 編集
[Windows][Windows 7 (64bit)][UWSC] ウィンドウに対して決まったボタン操作を適用する
概要
「ウィンドウAが開いたらOKを押す.ウィンドウBが開いたらキャンセルを押す」という動作を数千回しないといけない状況に追い込まれた.そこで,はじめてUWSCを使ってみた.UWSCは簡単なスクリプトをかくことで,Windows上の定型的な作業を自動化できるみたいです.ちなみに,以下のスクリプトはWindows 7 (64bit)で動きました.
コード
while True id = GETID("秀丸メール") SLEEP(0.1) ifb (id > 0 ) CLKITEM(id, "OK", CLK_BTN) endif id = GETID("同じ名前の添付ファイル") SLEEP(0.1) ifb (id > 0) CLKITEM(id, "キャンセル", CLK_BTN) endif wend
適当な説明
- while文の終わりの書き方はwend.
- 「"秀丸メール"と言う名前のウィンドウが開いたら」そのウィンドウのOKボタンをクリック.
- 「"同じ名前の添付ファイル"と言う名前のウィンドウが開いたら」そのウィンドウのキャンセルボタンをクリック.
- "ifb"はtypoではない."if block"の略か?
- 比較演算子で同値を示す時は"=="ではなく"=".
2009-11-19(Thu) [長年日記] 編集
[coLinux][Linux][openSUSE][zypper] openSUSEをアップグレード(アップデート)する
11.1から11.2アップグレードの手順
openSUSE11.1からopenSUSE11.2にアップグレード(アップデート)した.ちょこちょこ不具合があった.それらは,次節にリストアップした.アップグレードは,openSUSE11.2のUpgradeページに書かれている通りにひたすら実行した.アップグレード実行後再起動したら,無事にOSが起動した.Update前には,できればHDDのバックアップを取っておきたい.
#現在のレポジトリで最新版にアップデートする zypper update #自身のレポジトリを列挙する. zypper ls -d #11.1のレポジトリをリネーム. zypper renamerepo repo-oss openSUSE-11.1_OSS zypper renamerepo repo-non-oss openSUSE-11.1_Non-OSS zypper renamerepo repo-update openSUSE-11.1_Updates # 全てのレポジトリをOFF(openSUSE 11.2に互換性が無いもののみでもよい) zypper modifyrepo --all --disable #11.2のレポジトリを登録 zypper addrepo --name "openSUSE-11.2 OSS" http://download.opensuse.org/distribution/11.2/repo/oss/ openSUSE-11.2_OSS zypper addrepo --name "openSUSE-11.2 Non-OSS" http://download.opensuse.org/distribution/11.2/repo/non-oss/ openSUSE-11.2_Non-OSS zypper addrepo --name "openSUSE-11.2 Updates" http://download.opensuse.org/update/11.2/ openSUSE-11.2_Updates #zypperのメタデータ他をリフレッシュ zypper refresh # zypperを取ってくる.ここで依存関係の問題が出てくることがあるが, # 適当に頑張る. zypper in zypper #アップグレードに必要なファイルをレポジトリから取ってくる zypper dup -d #アップグレードする zypper dup
zypper refreshより前のレポジトリの設定は,yast->ソフトウェア->ソフトウェアレポジトリから設定してもよい.
不具合 (11.1から11.2への移行時)
以下,メモ書き.まとめるのはあとで.
- apacheが起動しなくなった."alloc_listener: failed to get a socket for (null)"なんてエラーを吐きながら死亡.→alloc_listener: failed to get a socket for (null) - yuu_nkjm blog(2009-11-20)
- w2boxが死亡. "PHP Fatal error: ereg(): Timezone database is corrupt - this should *never* happen! in w2box/lang/index.php on line 12"というエラー.langファイルに"date_default_timezone_set('Asia/Tokyo');"としたら復活.
2011-11-28 追記.11.4から12.1へのアップグレード
11.4から12.1へのアップグレードも上記の方法でうまく行った."zypper modifyrepo --all --disable"をしなかったときは,おかしくなった.
#現在のレポジトリで最新版にアップデートする zypper update # 全レポジトリをOFF zypper modifyrepo --all --disable # 12.1のレポジトリを追加 zypper addrepo --name "openSUSE-12.1 OSS" http://download.opensuse.org/distribution/12.1/repo/oss/ openSUSE-12.1_OSS zypper addrepo --name "openSUSE-12.1 Non-OSS" http://download.opensuse.org/distribution/12.1/repo/non-oss/ openSUSE-12.1_Non-OSS zypper addrepo --name "openSUSE-12.1 Updates" http://download.opensuse.org/update/12.1/ openSUSE-12.1_Updates zypper refresh zypper dup -d zypper dup
2014-11-21 追記.12.2から13.2のアップグレード
見事に死亡.アップグレードが問題だったのではなく,ハードディスク(イメージ)がおかしくなったのかもしれない.とにかくブートしなくなった.
#現在のレポジトリで最新版にアップデートする zypper update # 全レポジトリをOFF zypper modifyrepo --all --disable # 新しいレポジトリを追加 zypper addrepo --name "openSUSE-13.2 OSS" http://download.opensuse.org/distribution/13.2/repo/oss/ openSUSE-13.2_OSS zypper addrepo --name "openSUSE-13.2 Non-OSS" http://download.opensuse.org/distribution/13.2/repo/non-oss/ openSUSE-13.2_Non-OSS zypper addrepo --name "openSUSE-13.2 Updates OSS" http://download.opensuse.org/update/13.2/ openSUSE-13.2_Updates-OSS zypper addrepo --name "openSUSE-13.2 Updates Non-OSS" http://download.opensuse.org/update/13.2/ openSUSE-13.2_Updates_Non-OSS zypper addrepo --name "openSUSE Factory OSS" http://download.opensuse.org/factory/repo/oss openSUSE_Factory-OSS zypper addrepo --name "openSUSE Factory Non-OSS" http://download.opensuse.org/factory/repo/non-oss openSUSE_Factory_Non-OSS #zypperのメタデータ他をリフレッシュ zypper refresh # zypperを取ってくる zypper in zypper #アップグレードに必要なファイルをレポジトリから取ってくる zypper dup -d #アップグレードする zypper dup
2009-11-20(Fri) [長年日記] 編集
[coLinux][Linux][openSUSE] alloc_listener: failed to get a socket for (null)
openSUSEを11.2にアップグレードしたら,下記の様なエラーが出てapacheが起動しなくなった.
alloc_listener: failed to get a socket for (null)
RackerHackerさんの記事のコメントを見ると
Nathan Anderson says: It'll also work if you downgrade apr to something like 1.3.3-4. Posted on August 14, 2009 at 6:51 pm.
とあったので,aprモジュールをダウングレードすることに.まず,yastのレポジトリ設定から,古いレポジトリ(11.1)を登録する.yastのソフトウェアの更新からバージョンタブを選ぶと,インストールできるバージョンが選択できるので,ちょっと古いのにした.この操作により解決.しかし,やって直ぐメモしないと,すぐに何をしたのか忘れてしまいますね.
2009-11-21(Sat) [長年日記] 編集
[Apache][w2box] w2boxでTimezoneのエラー
apacheを更新したら,w2boxが動作しなくなった.apacheのログを見ると
PHP Fatal error: ereg(): Timezone database is corrupt - this should *never* happen! in w2box/lang/index.php on line 12
というエラー.w2boxのlangファイルに
date_default_timezone_set('Asia/Tokyo');
と追記したら直った.本当は,phpの設定ファイルにデフォルトのタイムゾーンを設定するべきなんだろうなとは思う,がまあいいや.
2009-11-30追記.頻発するのでphp.iniに下記の通り記述した.
[Date] ; Defines the default timezone used by the date functions ;date.timezone = date.timezone = 'Asia/Tokyo'
2009-11-22(Sun) [長年日記] 編集
[Linux][command][find] リンク切れのシンボリックリンクをfindで探してlsで表示
へたれCUIユーザなので良い方法が分からんかった.色づけして目視で乗り切るならこんなとこで.
find ./ -type l |xargs ls -CF --color=auto
find ./ -type l |xargs ls -la --color=auto
(2009-12-10追記) xtypeオプションなるものでいけたっぽい.manの解説を見ても何を言っているのかが良く分かりませんが(笑)
find ./ -xtype l
(2013-11-15追記) この実例は分かりやすい. ShellScript - リンク切れのシンボリックリンクを探す方法 - Qiita [キータ]
2009-11-23(Mon) [長年日記] 編集
[Windows][PowerDirector][動画編集] 自分の好きなWindows Media Encoder 9プロファイルをCyberLink Power Director 8に取り込ませる
下記のディレクトリにprxファイルをおけばよい.
C:\Program Files\CyberLink\PowerDirector\Language\Jpn\Profiles
2009-11-25(Wed) [長年日記] 編集
[coLinux][Linux][openSUSE] coLinux(openSUSE11.2)からWindows XPの共有フォルダをマウントする
下記のコマンドでOK.mount.cifsってのを使っても良いようだ
mount -t cifs //192.168.0.10/Share /mnt/windows_share -o username=hoge,iocharset=utf8
ある日以下のようなエラーが出た.
mount error: cifs filesystem not supported by the system
/var/log/messageを見ると,以下のようなエラー.coLinuxのモジュールがない様だ.
modprobe: FATAL: Could not load /lib/modules/2.6.**.**-co-0.8.0/modules.dep: No such file or directory
coLinuxの実行ファイルがあるディレクトリのvmlinux-modules.tar.gzに含まれる,modules.depを該当ディレクトリにコピーすればうまくいった.
2009-11-26(Thu) [長年日記] 編集
[Apache][.htaccess] 親ディレクトリの.htaccessで設定したユーザ認証をある子ディレクトリ内で解除する
はてなですでに質問がなされていた. 親ディレクトリの.htaccessで設定したBasic認証によるアクセス制限を、ある子ディレクトリ内でのみ解除する方法 - 人力検索はてな.以下の.htaccessファイルをアクセス制限を外したい子ディレクトリに置いたら期待通りの動作をした.あ,別にBasic認証じゃなくてDigest認証でもOK.
Satisfy any order allow,deny allow from all
より細かい制御をしたい場合は,以下のサンプルが参考になると思う.ミケネコさんのhtaccess リファレンスにはかなりの情報がまとまっていそう.
AuthUserFile /home/user/ ... /.htpasswd AuthGroupFile /dev/null AuthName "Please enter username and password" AuthType Basic require valid-user Satisfy any order deny,allow allow from .myfriend.ne.jp deny from all
2009-11-27(Fri) [長年日記] 編集
[Linux][command][sed][grep] grepとsedで文字列の一括置換
grepとsedを使って,特定のディレクトリ以下のファイルに含まれる文字列を一括置換したい.そこで,以下の手続きを実行するコマンドを発行する.
「秀丸のGrepして置換」の機能を想定した.findしてgrepしてxarg sedの方が汎用性高そうだったな.
- 特定のディレクトリ以下のファイルで,置換したい文字列を含むファイルのリストを生成する.
- 置換を実行したくないファイル名が含む文字列を指定することで,置換の対象としないファイルを取り除き,置換を実行すべきファイルのリストを生成する.
- 置換を実行したいファイルにおいて,置換を実行する.
簡単に言うと
grep -Erl '置換したい文字列' | \
grep -v "置換したくないファイル名" | \
xargs sed -i バックアップファイルのサッフィクス 's/置換したい文字列/置換後の文字列/g'
くどく説明すると
grep -Erl 'sedによる置換を適用したいファイルの中身に含まれる文字列' | \
grep -v "置換したくないファイル名が含む文字列" | \
xargs sed -i バックアップファイルのサッフィクス 's/置換したい文字列/置換後の文字列/g'
コマンドライン
最後の"-i"をつけると,バックアップファイルが作成されファイルが上書き編集される.
grep -Erl '置換したい文字列' | \
grep -v "置換したくないファイル名" | \
xargs -n 1 -i "バックアップファイルのサッフィクス" sed '1s/^/---------------{}--------------\n/' {} | \
sed 's/置換したい文字列/置換後の文字列/g'|lv
関連資料
- grep
-E, --extended-regexp PATTERNを拡張された正規表現として扱います。 -e PATTERN, --regexp=PATTERN PATTERNをパターンとして指定します-で始まるパターンを保護するために有効です。 -r, --recursive 各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは -d recurse オプションと等価です。 -l, --files-with-matches 通常の出力はせず、このオプションを指定しなかったときに出力される入力ファイルの名前を表示します。スキャン動作は最初のマッチで終了します。 -v, --invert-match 結果を反転し、マッチしなかった行を選択します。
grepのman
- sed
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) g G Copy/append hold space to pattern space. s/regexp/replacement/ パターンスペースに対してregexpのマッチを試みる。マッチに成功すると、マッチした部分をreplacementに置換する。replacementは特殊文字である&を含むことができ、これはパターンスペースのマッチした部分を参照する。また\1から\9までの特殊エスケープを含むこともでき、これはregexpの副表現(sub-expression)にマッチした部分をそれぞれ参照する。
sedのman
sedで使用できる正規表現演算子
POSIX 1003.2で規定されているsedでは、以下の演算子が使用できます。
- .
- *
- ^
- $
- \(regexp\)
- \1 \2 \3 \4 \5 \6 \7 \8 \9
- [char-list]
- \{n,m\}
- \{n,\}
- \{n\}
- [:alnum:]
- [:alpha:]
- [:blank:]
- [:cntrl:]
- [:digit:]
- [:graph:]
- [:lower:]
- [:print:]
- [:punct:]
- [:space:]
- [:upper:]
- [:xdigit:]
GNU sedでは上記のものに加えて、以下のものが使えます。
付記: GNU sed 4.0.5ではオプション指定によりEREを使えるようになります(使えるEREはGNU のegrepと同じ)。
GNU sed 4.1.2 ではオプション指定によりPerl5互換の正規表現を使えるように なります(有効にしてコンパイルした場合)。また、正規表現演算子として\sと\Sが使えるようになっています。正規表現メモより
2009-11-28(Sat) [長年日記] 編集
[find][grep][xargs][command] findした検索結果に含まれるファイルに対してgrepを実行
やりたいこと(シナリオ)
/srv/www以下のファイルで,2009という語が含まれている行を抽出したい.基本的には,ファイル名に*.htmlを含むファイルを選び出し,そのファイルから2009を含む行を抽出する.
xargs
一番使う.
# 手抜き find /srv/www -name \*.html | xargs grep -nH 2009 # 特殊文字対策 find /srv/www -name \*.html -print0 | xargs -0 grep -nH 2009 # locateは便利なんだけど,どこのどのファイルがインデックス対象になっているかを注意する必要がある. locate /srv/www/*.html|xargs grep -nH 2009
find
- nameにはワイルドカードが使える.ワイルドカードを使う場合は,エスケープする必要がある.
- {}は検索で引っかかったファイル名が入る.{}と\;の間にスペースが必要なことに注意する.\;となっているのは,;をシェルに解釈させないため.
- -printを指定しなくてもデフォルトが-printなことが多いので,面倒な時はタイプしないことも.
- 検索対象ディレクトリは複数が可能. "find /srv/www /home/user/public_html -name \*.html" -print
- findだけで頑張る.
# プレースホルダ{}あたりの書き方がややこしいので,xargsを使ってしまうことが多い. # findの結果が多いときもxargsの方が有利. find /srv/www -name \*.html -exec grep -nH 2009 {} \; find /srv/www -name "*.html" -exec grep -nH 2009 {} \;
grep
- nで行番号表示,Hでファイル名表示.
-
ファイル名でフィルタリングしなくていいなら,これが楽. grep -rnH 2009 /srv/www