ドメインに参加していた Windows 7 のPCにローカルアカウントで入りなおすとき、いつも "コンピューター名\ユーザー名" の形式で入力していた。コンピューター名をその都度調べて正確に入力しないといけないから面倒くさいと感じていたが、実は「.\ユーザー名」という形式にも対応しているのだった。
2015年5月6日水曜日
出力をクリップボードにリダイレクトする方法(clip, xclip)
Windows で作業をしていて初めて知った("clip"コマンド)。Linux/Unix の世界にも同様のコマンドがあった("xclip")。知ってよかった。
C:\Users\foo>date /T | clip
2015年2月22日日曜日
Fedora Live USB Creator: "vesamenu.c32: not a COM32R image"
Fedora 21 Workstation の ISO と liveusb-creator をダウンロードしてWindows 8.1 を使ってブータブルUSBを作ってみたものの、次のメッセージが出て起動しなかった。(BIOS環境の場合のみ。UEFIの場合は問題なかった)
vesamenu.c32: not a COM32R image boot:
この症状は、USBの中にあるSYSLINUXの設定ファイル、具体的には /syslinux/syslinux.cfg をほんの少しだけ変更してあげれば治った。
- 変更前の /syslinux/syslinux.cfg:
default vesamenu.c32 timeout 100 ...
- 変更後
default linux0 timeout 100 ...
こちらに書いてあるように、プロンプトでTabキーを押してイメージの候補を表示する、という方法もある。が、キーボード押したくない場合には syslinux.cfg を編集すればよい。
2015年2月20日金曜日
netshコマンドを使ってWindowsファイアウォールのポートを開ける
netshというコマンドを使えばいい。
たとえば TCP/80 を開けたいなら、コマンドプロンプトを管理者として開いて
netsh advfirewall firewall add rule name="HTTP" dir=in action=allow protocol=TCP localport=80を実行すればOK。
ここで、nameオプションは「ルールの名前」と呼べばよいだろうか。文脈に応じて分かりやすい文字列を指定すればよい。
Windows Server 2012と2008で動作確認した。
2013年9月25日水曜日
2013年2月9日土曜日
外付HDDにWindows 7でチェックディスク(chkdsk) --> メモリ消費すごい
システムドライブ以外のドライブに対して「不良セクターのスキャンと回復」を有効にしてエラーチェックつまり "chkdsk /r" コマンドを実行するとメモリを大量に消費する。
What we do with a bug report? - Engineering Windows 7 - Site Home - MSDN Blogs
うちの Windows7(RAM 12GB搭載)でも確かに再現。2TBの外付けハードディスクドライブに対して chkdsk /r を実行し、しばらくするとメモリ使用量が8GB近く、システム全体で10GBほどに上がった。ここまで上がるとある意味楽しい。そして一晩寝かすと途中で強制終了されていた。
しかたないのでVMに入っている Windows Server 2008 で同じ chkdsk /r を試してみたら、問題は起こらなかった。
2012年8月19日日曜日
2012年6月7日木曜日
Windows Server 2003 の diskpart ってパーティション縮小(shrink)できない。GParted便利
Windows Server 2003 の diskpart
人生で初めて Windows server 2003(x64)を直接触る仕事を経験。Unix系じゃないサーバー機。ぼくも人生の荒波に揉まれてずいぶん大人になりました。
パーティションを切る必要があったけど、インストールやらネットワーク設定やらWindowsアップデートやらを一通りやった後でいいや、と思っていざやろうとするとできなくて焦った。というのは'diskpart'コマンド自体は入っているんだけど、Win server 2008 と違ってなんだかオプションが少ない。'shrink'も無い。
GParted
最初からやり直すのはしんどいのでいろいろと道具を探した結果、'GParted'というソフトがみつかった。ダウンロードしたISOをCDに焼いてブートして、GUIで自由に(たぶん、自由に)パーティションを設定できるというもの。
最初からやり直しになってもまあいいか、と期待せず使ってみるとこれがとても使いやすかった。そしてパーティション変更後も Windows server 2003 が正常にブートした。感謝。
2012年5月27日日曜日
Windows バッチファイル FOR文での「コマンド置換」
Windowsの .bat ファイルを書いた。そして、dir等のコマンドの出力を、FOR文のパラメータとして指定する方法を知った。
- .batファイルの例
- 拡張子 xml のファイル名を降順ソートで列挙し、後続のコマンド(ここでは単なる echo)に渡すFOR文。
@echo off for /F "usebackq" %%file IN (`DIR /B /-N *.xml`) DO @echo %%file
Unix系のシェルで言うところのコマンド置換(command substitution)。バッククォート(`)を使う点は共通だ。
2011年4月14日木曜日
Windows7でのEmacsとGoogle日本語入力の組み合わせ
SKKを使っているのでずっと知らなかったが、GNUが配布しているWindows用バイナリ:Index of /gnu/emacs/windows ではMS-IMEを使った日本語入力ができないらしい(もう少し詳しく言うと、入力はできるが変換候補が画面の端のほうに表示されるため、スムーズに漢字を選べない)。これを解決するためにIMEパッチなるものが存在することも知った。
この現象が出るかどうかはIMEに依存し、使用するIMEによって症状が異なるらしい。試しにWindows7のタスクバーやコントロールパネルでIMEを「Google日本語入力」に切り替えてからEmacsを再起動すると、普通に入力できた(Emacsのカーソルのある場所に変換候補が表示された)。
試した環境:
- OS
- Windows 7 Home Premium
- Emacs
- GNU Emacs 23.3.1 (i386-mingw-nt6.1.7600)
- Google日本語入力
- GoogleJapaneseInput-1.0.556.0 (Google日本語入力で、「ばーじょん」と入力、変換することで分かる)
ATOKとかその他のIMEでどうなるかは分からないが、とりあえずGoogle日本語入力を使う限りはEmacsにIMEパッチを当てなくても済むようだ(…ちょっと試しただけなので何とも言えないかな)。
2011年4月3日日曜日
Emacs でキータイプのたびに音を鳴らしてみる on Windows7
最近、「Ommwriter」というテキストエディタ(?)の存在を知った。
デモ動画を見て真っ先に「いいなあ」と思ったのは、キーをタイプするたびに気持ちいい音が出るところ。これならEmacs でもできるだろうと思って試してみた。
環境は次のとおり。
- OS
- Windows 7 Home Premium
- Emacs
- GNU Emacs 23.3.1 (i386-mingw-nt6.1.7600)
Emacsから外部プロセスを使って音を出す
Emacsで任意の音声ファイルを再生することはできなそうなので、外部のコマンドを利用して鳴らす方針にする。とはいえ、Windows環境だからコマンドラインから音声を再生するコマンドがあるのかがわからない。Linux環境であればコマンドもいろいろありそうだが…。
しばらくWebサイトを漂流した結果、QuickView 2.52、MPXPLAY 1.50、(Free)CDP 1.1/2.1、OpenCP 2.60、XTC-PLAY 0.97c などがあるとわかった。試した結果、"Mpxplay" が動作したのでこれにした。
Mpxplayのインストール
Welcome to the PDSoft Homepage から、"Mpxplay v1.57 for Win32"をダウンロードして、C:/Program Files (x86)/MPXP157W/に置く。
音源
次に、それっぽい音源を用意しなければならない。
クリック音みたいな短い音で自由に使える素材がないかなあと探した結果、このサイト「全ての効果音・SE1|フリー音素材01SoundEarth」がみつかった。ここから「ボタン音・ワンショット系」のmp3をとりあえず10個(b_001.mp3 から b_010.mp3 まで)ダウンロードして、~/.emacs.d/mp3/ に配置。
以上で必要なものがそろったので、次はEmacsを使っての実験。以下のようなコードを*scratch*バッファで実行してみて音が出ればOK。
(let ((sndfile
(concat (getenv "HOME") "/.emacs.d/mp3/" "b_001.mp3")))
(start-process
"my-test-process"
nil
"C:/Program Files (x86)/MPXP157W/MPXPLAY" "-f0" "-xel" sndfile))
ここで、start-procesが非同期に外部コマンドを実行するための組み込み関数。また、外部コマンドであるMPXPLAYに指定しているオプションの意味は、以下のとおり(Mpxplayに付属のREADME.TXTより抜粋)。
-f0 : no screen output (some warning/error messages are not displayed in this mode (ie: serial-control and LCD errors))
-xel : exit at end of (play)list (has effect in directory browser and in jukebox queue too)
Mpxplayのプロセスが増える問題(.iniファイルを消すと解決)
いまいち原因がわからないのだが、Mxplayを続けて実行すると音が出なくなり、プロセスが残るという現象が出て困った。
具体的には "Warning: mpxplay.ini is read-only!"というメッセージを出力されるので、mxplay.ini を思いきって消したら解決した。この現象はEmacsを経由しない場合、つまりWindowsのコマンドプロンプトからでも発生したので、Mxplay自身の問題というか仕様なのだろう。
キー押下で音を出す設定
Emacsでは、a や b などの普通のキーを押したときにself-insert-commandというコマンドが走る。よって、このコマンドに音を出す処理を advice として追加してやれば済みそうなのだが、実はうまくいかない(self-insert-commandは特別な扱いになっているようだ)。
そこで、self-insert-commandを自作の関数でラップし、キー押下時にラッパー関数のほうが実行されるようにする。さらに、ラッパー関数に advice として音を出す処理を追加する。
elispコード
以下を*scratch*バッファで実行すると、音が出るようになるはず。
(defcustom my-sound-dir
(concat (getenv "HOME") "/.emacs.d/mp3/")
"音声ファイルの場所")
;;; Can't advise SELF-INSERT-COMMAND, so create a wrapper procedure.
(defun self-insert-wrapper (n)
(interactive "p")
(self-insert-command n))
;;; Advise SELF-INSERT-WRAPPER to execute after every keypress
(defadvice self-insert-wrapper (after ad-self-insert-wrapper activate)
"入力された文字に応じて音声ファイルを選び、外部プロセスを呼ぶ"
(let ((sndfile
(concat my-sound-dir "b_" (format "%03d" (1+ (% (char-before) 10))) ".mp3")))
(start-process
"proc-sound"
nil
"C:/Program Files (x86)/MPXP157W/MPXPLAY" "-f0" "-xel" sndfile)))
;; Remap SELF-INSERT-COMMAND to be SELF-INSERT-WRAPPER.
(global-set-key [remap self-insert-command] 'self-insert-wrapper)
実際に使えるか、という問題
上のコードを実行して、実際に音を出しながらキーをタイプしてみたところ、ときどき砂時計が出てきてしまった… 残念ながら、実用に耐えない、という結論(とりあえず)。
ビープ音(ベル)だけ変える場合
ビープ音というのは Ctrl-g を押したときなどに鳴る音。これは頻繁に鳴るわけではないので、性能の問題は無視できるだろう。下記のコードを実行すれば、ランダムなピープ音が鳴るようになる。
(defcustom my-sound-dir
(concat (getenv "HOME") "/.emacs.d/mp3/")
"音声ファイルの場所")
(setq ring-bell-function
(lambda ()
(let ((sndfile (concat my-sound-dir "b_" (format "%03d" (1+ (random 10))) ".mp3")))
(start-process
"proc-sound"
nil
"C:/Program Files (x86)/MPXP157W/MPXPLAY" "-f0" "-xel" sndfile))))
ここで重要な組み込み関数/変数は、ring-bell-function。これにセットしたlambda式は、ビープ音を鳴らすタイミングで実行される。
2010年12月12日日曜日
Windows7 に C/Migemo & migemo.el を導入
Emacsで、いわゆる日本語インクリメンタルサーチを実現する。
日本語インクリメンタルサーチつまり Migemo の辞書検索モジュールには Ruby/Migemo と C/Migemo の二つの実装がある。ここでは高速かつRuby不要という点から後者を利用する。
前提としている環境
- Windows 7 Home Premium 64bit
- Cygwin 1.7.7
- GNU Emacs 23.1.1 (i386-mingw-nt6.1.7600)
※Cygwinのバージョンは uname -a コマンドを打つと確認できる。
導入作業
- 辞書ファイルをインストール
-
KaoriYa.net より「バイナリ(DLL) 1.3 64bit版 for Windows (約3.46MB)」をダウンロード。
解凍すると、
/dict/utf-8に辞書ファイルが計5個生成される。これ(UTF-8の辞書)を emacs向けのフォルダに置く。ここでは、~/.emacs.d/site-lisp/migemo/に置くこととする。$ cd ~/download #ダウンロードしたファイルがある場所へ移動 $ unzip -q cmigemo-1.3-w64dll.zip $ ls cmigemo-1.3-w64dll/dict/utf-8/ han2zen.dat hira2kata.dat migemo-dict roma2hira.dat zen2han.dat $ mv cmigemo-1.3-w64dll/dict/utf-8 ~/.emacs.d/site-lisp/migemo/
- C/Migemo の dllファイル および exeファイル を作る
-
さらに「ソースコード 1.3(予定) 開発版」をダウンロード。
Cygwinを起動して、以下のようにコンパイル&設置を行う。
$ cd ~/download #ダウンロードしたファイルがある場所へ移動 $ tar xvjf cmigemo-1.3c.tar.bz2 #解凍 $ cd cmigemo-1.3 $ make cyg #コンパイル $ cp build/{cygmigemo1.dll,cmigemo.exe} "C:\cygwin\bin" #dll と exe を cygwin/bin に設置 - migemo.el のインストール
C/Migemo を emacs から実行するための elisp が "migemo.el".
オリジナルのソースコードは積極的にメンテナンスされていないようなので、どなたか分からないが個人的にElispを公開しているかたのものを使うことにする。
sakito / dot.emacs.d / source – Bitbucket よりダウンロードして、load-pathに置く(
~/.emacs.d/site-lisp/など)。emacs の
*scratch*バッファを使うなどして下記elispコードを評価。;; migemoの設定 (setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs" "-i" "\a")) (setq migemo-dictionary (expand-file-name "~/.emacs.d/site-lisp/migemo/utf-8/migemo-dict")) (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil) (setq migemo-use-pattern-alist t) (setq migemo-use-frequent-pattern-alist t) (setq migemo-pattern-alist-length 1000) (setq migemo-coding-system 'utf-8-unix) (load-library "migemo") (migemo-init)- 動作のテスト&設定の永続化
- "C-s"で日本語インクリメンタル検索が動作するか試す。問題がなければ上のelispコードを .emacs や init.el に保存しておく。
2010年10月27日水曜日
IETesterのTips:コマンドライン起動
Webサイトを仕事で作る場合、たいていはIEの異なるバージョンで動作をテストする工程がある。その工程で役に立つのがIETesterというソフト。このソフト一つをインストールすればIE5.5以上の各バージョンでのレンダリング結果およびJavaScriptの挙動が確認できるので、色々なバージョンのIEをインストールして共存させる必要がない、開発用PCを仮想化する必要もない。
このIETesterを起動する際、GUIでボタンをクリックしてもよいのだが、何回もボタンをクリックして、同じURLを何回も入力 or コピペ する必要があるので面倒。そこで一度URLを入力したら全バージョンのIEを起動してくれるようなインターフェースが欲しくなる。以下、CUI(コマンドライン、コマンドプロンプト、DOSプロンプト)でそれを実現する方法。
1. 起動用のバッチファイルを作る
@echo on @start "" /b "C:\Program Files (x86)\Core Services\IETester\IETester.exe" -all %1
ここで、startコマンドの第二引数"/b"は新しいウィンドウを開かないことを表す。よって第一引数(ウィンドウタイトル)も空文字列でOK。
これをファイル名 "ietest.bat" として、デフォルトのフォルダ(c:\Users\foo など)に保存しておく。
※OSは Windows 7 Home Premium。
2. コマンドプロンプトからバッチファイルを実行(引数は表示したいURL)
C:\Users\foo> ietest.bat http://host.domain/
(補足)BASIC認証をかけてるサイトなら id, password を引数に含めればOK
C:\Users\foo> ietest.bat http://id:password@host.domain/