高速ファイル検索ソフトEverythingの導入と設定

おまえ達のやっていることは検索で、思索ではない
伊坂幸太郎 - 『魔王』より

Windowのファイル検索ソフトの定番『Everything』。Windows標準機能の検索等と違って、あらかじめ作成したインデックスを使っての検索なので非常に高速です。正規表現が使えたり検索ツールとしても優秀なのですが、インクリメンタルサーチでとにかく動作が非常に高速なのが非常に便利。在処がわかっているファイルでも、Everything経由で開いた方が早いので、ファイルを開いたりという作業はほとんどEverythingだけで事足ります。

インデックスの作成もNTFSのインデックス情報を使っていて非常に早いのですが、それでもファイルが増えてくると結構重たくなってきます。起動後一回だけの話なのですが、たとえ10秒程度でも待ちが入ると、思考も中断されてしまうので、いまいちです。対策として、Optionに「システム起動時にEverythingを起動する」という設定があるのですが、Windows7ではUAC(ユーザーアカウント制御)にひっかかって、期待道理に起動してくれません。

対策としては、タスクスケジューラ経由の起動に登録すればOK。タスクスケジューラは、スタートメニューの「アクセサリ」→「システムツール」→「タスクスケジューラ」で起動可能です。詳しい手順等は、以下が参考になります。

うまくいけば、起動時にEverythingがバックグラウンド起動してくれるので、ファイル検索したい時には、瞬間的に検索結果が得られます。Everythingの起動をメニューやランチャーからすると、「本当に実行しますか」というUACの警告がまた出るので、起動ショートカットキーを定義(Option)しておいて、それ経由で起動するようにしておくと完璧です。

まだ、使ってない方は、この機会にぜひどうぞ。

【関連記事】
WindowsでCUI環境

【関連書籍】
ライフハッカー式整理のアイデア122―賢い人はなぜいつも机がきれいなのか? 小山 龍介
デスクワークを3倍効率化するテクニック―エクセルの3つの機能で仕事のスピードを加速する 奥谷 隆一

CygwinからPython for Windowsとpy2exeを使う

私は不得手なことは一切やらず、得意なことだけやるようにしている。
本田宗一郎

Windowsでpythonという場合、cygwin pythonかWindows python(Python for Windows)の選択肢があります。自分の場合、shell作業との相性からcygwin版のpythonを使っていますが、目的によってはWindows pythonを使いたい時もあります。ということで、WIndows pythonとcygwinの組み合わせ時の注意点などをメモっておきます。

Cygwin terminalからWindows Pythonを使うための設定

alias設定

Windows Pythonの標準インストールであれば、python本体はC:\Python27\python.exeがインストールされると思います(Python2.7の場合)。基本は、cygwin版pythonを使うので、ここにはパスを通さず.bashrcあたりにaliasだけ用意しておきます。
alias winpython='c/Windows/Python27/python.exe'

interactiveモードとprint問題

cygwin terminal (Mintty等)からWindows Pythonを使った時にまずハマるのが、出力問題DOSプロンプト以外からの起動だと、Windows Pythonはinteractiveモードとして認識してくれないのが原因のようです。

対策としては以下の方法があります。
  • interactive modeのoption(-i)付きで起動する。
    $ winpython -i
    
    [欠点] interactive実行の時はいいのですが、script指定で実行した後、プロンプトが残ってしまう

  • バッファリングを無効にする。
    (-uオプションをつけるか, 環境変数PYTHONUNBUFFEREDを設定する)
    $ export PYTHONUNBUFFERED=1
    $ winpython hoge.py
    
    または、
    $ winpython -u hogepy
    
    [欠点] interactiveモードには使えない

  • DOSプロンプト経由で実行する (cygstartを使う)
    $ cygstart /cygdrive/c/Windows/Python27/python.exe hoge.py
    
    [欠点] 実行すると終了するので、print内容確認したい時とかには向かない
全ての用途を満たすような解はなさそうなので、目的に応じてこのあたりを使い分けるのが良いかと思います。

(参考)

改行コードの違い

Windows Pythonとcygwin pythonを切り替えて使う際に、ひとつ注意点として改行コードの扱いの違いがあります。 Cygwin版がCR+LFとなるのに対して、Windows PythonはCRです。
print文等で自動付与される改行に加えて、明示的に'\n'で書いたものも違います。

・cygwin版の出力 (出力内容をodコマンドで確認)
$ python -c "print 'abc'" | od -c
00000000   a   b   c   \n
$ python -c "print 'abc\n'" | od -c
00000000   a   b   c   \n  \n

・Windows Pythonの出力 (出力内容をodコマンドで確認)
$ winpython -c "print 'abc'" | od -c
00000000   a   b   c   \r  \n
$ winpython -c "print 'abc\n'" | od -c
00000000   a   b   c   \r  \n  \r  \n

fileへwriteした時の改行の扱いも同じように違うので注意が必要です。

py2exeを使う

Cygwin pythonがあるのに、あえてWindows pythonを使う目的の一つ(個人的にはこれだけ)が、py2exeです。python scriptをexe形式に変換してくれる便利なしろものです。自分専用のscriptであれば、わざわざexe化する意味はないのですが、Windows用で、かつ、配布用のプログラムとなると、python環境不要なexeの方が何かと便利です。

上で書いたようなかたちで共存できているなら、py2exe使う時だけ、Windows Python呼び出すだけです。とはいえ、せっかくcygwin環境から使うので、Makefileも用意してあげましょう。

Makefile
PYTHON = /cygdrive/c/Python27/python.exe

TARGET = test.exe
SRC    = test.py
SETUP  = setup.py

dist/$(TARGET) : $(SRC) $(SETUP)
	$(PYTHON) $(SETUP) py2exe

clean:
	rm -rf dist build

setup.py
# -*- coding: utf-8 -*- 

from distutils.core import setup
import py2exe

option = {
    "compressed"    :    1    ,
    "optimize"      :    2    ,
    "bundle_files"  :    1
}

setup(
    options = {
        "py2exe"    :    option
    },
    console = [
        {"script"   :    "test.py"}
    ],

    zipfile = None
)

これらを対象のpyファイル(上の例ならtest.py)と同じディレクトリに置いてやればOKです。
py2exeの使い方やインストール等は以下あたりが参考になります。

ファイルが増えてくるとMakefile用意しておくとやっぱり便利です。

B009Z30HPG

【関連記事】
gnupackでCygwin導入した時に最初にすること
WindowsでCUI環境


【関連書籍】
GNU Make 第3版 Robert Mecklenburg 矢吹 道郎 (監訳)
エキスパートPythonプログラミング Tarek Ziade 稲田 直哉
初めてのPython 第3版 Mark Lutz 夏目 大
Dive Into Python 3 日本語版 Mark Pilgrim Fujimoto
Python クックブック 第2版 Alex Martelli Anna Martelli Ravenscroft David Ascher 鴨澤 眞夫

Windowsのネットワーク設定を切り替えを便利に

あちこち旅をしてまわっても、自分から逃げることはできない。
ヘミングウェイ

ノートPCを持ち歩いて使うと、IPアドレス設定等を場所や目的にしたがって切り替えたい時が結構あります。大抵は、DHCPで事足りるかもしれませんが、固定IPが必要なことも結構あったりします。ノートPCだと、イントラやインターネットに接続するという以外に、ちょっとした調査や解析のためにローカルなネットワークに接続したい時なんかもあるでしょう。

Linuxであれば、ifconfigの設定scriptを準備しておくというのが常套手段かもしれません。一方、Windowsの方は、あんまりなじみがないかもしれませんが、netshコマンドでコマンドラインからネットワークアダプタの設定ができます。GUIでももちろんできますが、Windowsのアダプタ設定は階層が深いし、なんとも使いにくい。。。そこそこ切替頻度が高いのなら、バッチファイル用意しておくことをおすすめします。
例えば、「ローカルネットワーク接続」の設定を、固定IPやDHCP設定に切り替えるの次のようなバッチファイルを用意すればOK。

dhcp.bat
netsh interface ip set address "ローカル エリア接続" dhcp
netsh interface ip set dns "ローカル エリア接続" dhcp

fixedip.bat
netsh interface ip set address "ローカル エリア接続" static 192.168.1.10 255.255.255.0 192.168.1.1 1
netsh interface ip set dns "ローカル エリア接続" static 192.168.1.1 primary
netsh interface ip add dns "ローカル エリア接続" 192.168.1.2

もう少し細かいところは、以下あたりのページが参考になるかと思います。

なお、netsh interface dumpしたものをnetshに食わせればOKという説明もありますが、文字コードがsjis+CRLFになっている必要があるので、powershellやcygwinのターミナルからnetsh dump実行すると文字コードがUTF8になったりしてうまくいかない可能性があります。また、dump結果に「はい」とかの日本語が入ってエラーになるということもあるので、最初から、上記の例のように必要最低限の内容を書きだして、バッチファイルにした方が早いかと思います。その場合も、SJIS+CRLFでの保存は必要です。

なお、用意したバッチファイルは、管理者として実行する必要があります。ショートカットを作って、毎回管理者権限で実行する設定をしておくほうが良いです。

ちなみに、私の場合、設定ごとにショートカットを作って、作ったショートカットをLaunchyからキーボードショートカットで呼び出して使っています。

ちなみに、Let's noteにはネットワークセレクターという切り替えアプリが入ってますね。

4774149543

【関連記事】
WindowsでCUI環境


【関連書籍】
Clean Coder プロフェッショナルプログラマへの道
整理HACKS!―1分でスッキリする整理のコツと習慣
IDEA HACKS! 今日スグ役立つ仕事のコツと習慣

Excelでのcsvで扱う際のあるある対策 - 書式の自動設定

善意、純情の犯す悪ほど困ったものはない。第一に退屈である。
中野好夫 -「悪人礼賛

データベースやログのエクスポート時のフォーマットとしてよく使われるcsv。テキスト形式なのでエディタでも開けますが、Windows環境であればExcelで開いていると思います。Excelでcsv扱うのは、便利ではありますが、いろいろ不都合や不満点があります。
よくあるのは、次のようなもの。
  • 書式が日付や数値に勝手に変換されてしまう。
  • セルの横幅を内容にあわせて調整したい。
  • 大きな表の場合に、毎度オートフィルタとウィンドウ固定するのが面倒

例えば、以下のようなcsvを開こうとしたとします。
DATE,TIME,ID,ID2
2013/12/1,10:00:01,0-1,A
2013/12/20,12:20:00,1-1,01
2014/1/1,15:10:30,A-1,A1
これをExcelで開くと以下のような見え方になります。

csv-in-excel

特に、最初の書式変換がかなりやっかいです。単に表示の書式があっていないというだけならまだいいのですが、ファイルを読み込む段階でセルの値が変換されてしまっているので、あとから対象の列の書式を変更(例えば、文字列として指定)しても意図しない値になってしまいます。
日付の列の幅が足りずに「####」になっていたり、C3の"1-1"は1月1日になり、C4の"01"は"1"になっています。特に値が変わっているものは、読み込み時に変換されてしまっているので、ファイルを開いてから、書式設定を文字列にしても元の値にはなりません。。

特に、勝手に書式が変わる件は、csvをExcelで扱う時の定番問題なので、ググるといろいろヒットします。基本的な対策としてあげられているのは、外部データの取り込みのテキストファイルウィザードを使うというもの。

参考) ITPro :CSVファイルを読み込んだら「1-15」のような製品番号が「1月15日」に変わってしまった!

確かにこの方法で開けますが、非常に手間が多くなってします。そこで同じようなことをするラッパーを用意することにします。ついでに、オートフィルタやウィンドウ固定等、毎回ファイルを開く度に行う操作も自動化させます。

以下ような内容のVBScript(WSH)を用意し、csvを開く時は、このスクリプトにドラッグ&ドロップします。「送る(Sendto)」メニューに入れてもおけば便利かと思います。

Dim xlApp, WS, FS, Args, TempFile, I, Format(255)

Set Args = WScript.Arguments
If Args.Count <> 1 Then WScript.Quit
If LCase(Right(Args(0),4)) <> ".csv" Then WScript.Quit

Set WS = CreateObject("WScript.Shell")
TempFile = WS.ExpandEnvironmentStrings(WS.Environment.Item("Temp"))
Set WS = Nothing
Set FS = CreateObject("Scripting.FileSystemObject")
TempFile = FS.BuildPath(TempFile, FS.GetBaseName(Args(0)) & ".txt")
FS.CopyFile Args(0), TempFile

For I = 0 To 255
    Format(I) = Array(I + 1, 2)
Next

Set xlApp = CreateObject("Excel.Application")
With xlApp
    .WorkBooks.OpenText TempFile, , , , , , , , True, , , , Format
    .DisplayAlerts = False
    .ActiveWorkBook.SaveAs Args(0), 6
    .DisplayAlerts = True
    .ActiveWorkBook.Saved = True
End With
' テンポラリtxt削除
FS.DeleteFile TempFile

Set xlSheet = xlApp.Worksheets(1)
'オートフィルタ
xlSheet.Cells.AutoFilter(1)
'ウィンドウ固定
xlSheet.Activate
xlSheet.Range("C2").Select
xlApp.ActiveWindow.FreezePanes = True
'サイズ自動調整 
xlSheet.Cells.Select
xlSheet.Cells.EntireColumn.AutoFit

xlSheet.Range("A1").Select
xlApp.Visible = True

Set xlApp = Nothing
Set FS = Nothing

VBAの中身はこちらのやりとり(CSVファイルを読み込んだときに文字 列として読みたい - Google Groups)をベースにさせて頂きました。textとして読み込むと同時に、Window固定とオートフィルタ設定を追加しています。
これで先ほどのcsvを開くと以下の様になります。

csv-with-excel-2

データ化けもなくなり、オートフィルタやウィンドウ固定もプリセットされるようになりました。なお、ウィンドウ固定の位置や、文字列以外にしておきたい列がある場合は、スクリプトの該当箇所を修正する必要があります。必要ならファイル名等で場合分けもできますので、そのへんは各環境や目的のファイルにあわせてということで。

しかし、csvの書式問題ってずいぶんと昔からある不満点のはずなので、せめてExcelの設定で読み込み書式を選択できるようにする(例えば、自動検出と文字列固定とか)はあってしかるべきと思います。自動認識もうまくはまる時は便利ですが、それ以外の時は単なる迷惑以外の何者でもないです。ぜひ、改善してほしいものです。

【追記】テキストとして開くと、項目内改行がされないみたいです。上のvbsだと元ファイルまでおかしくなってしまいましたので、そういったファイルには残念ながら使えません。csvで開くと書式化け問題になるし。。もっといい方法ないものか。。

4873113474

【関連記事】
WindowsでCUI環境

【関連書籍】
Excel Hacks 第2版― プロが教える究極のテクニック140選 David Hawley Raina Hawley 羽山 博
Windows自動処理のためのWSHプログラミングガイド 五十嵐 貴之
最速攻略 VBScriptサンプル大全集 Windows7/Vista/XP/2000対応 結城 圭介
続ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに! 立山 秀利

gnupackでCygwin導入した時に最初にすること

人生の半分はトラブルで、あとの半分はそれを乗り越えるためにある。
八月の鯨』より

Windowsにgnupackを使ってCygwin環境をセットアップした時のメモです。

gnupackについては、emacsとあわせてアーカイブ展開するだけで、ある程度設定済の環境がすぐに使えるということで、手軽にCygwinを構築するには非常に便利です。とはいえ、いくつか設定等変更しておくと便利な部分もあるので、そのあたりのメモです。ベースとしては、gnupack_devel-11.00.exeを使っています。


apt-cygの修正

今現在最新の11.00だと、ちょっと前にCygwinダウンロードサーバ側の変更に追従できていないためにエラーになります。とりあえず修正必要なのは二点。

  • mirrorサイトのディレクトリパス変更へ追従 (でないと、apt-cyg updateでsetup.iniがnot foundになり失敗する)
  • tar.xzへの対応 (元のapt-cygだとbzip2決め打ちになっているので新しいパッケージ解凍に失敗する)

apt-cygの公式版の更新は止まっていますが、forkしたものがいくつかgithubで公開されているので、それをとってきて、/app/script/apt-cygを置き換えるのが手っ取り早いです。
forkの状況等は以下のページが詳しいです。

apt-cyg - PIB

また、プロキシ環境でapt-cygで使いたい場合は、/etc/wgetrcを~/.wgetrcにコピーして、proxy設定部分を書き換えておきます。


Cygwinパスとの互換性

gnupackではwindowsフォルダのパスが標準cygwinと少し違います。とはいえ、cygwin環境用のスクリプトで、内部でWindowコマンドを呼び出しているものなどがあると、標準Cygwinスタイルのパス(/cygdrive/c/...)を期待している場合があります。いちいちスクリプトを変更するのもの何なので、互換性確保のためにsymbolic linkをはっておきます。

# mkdir /cygdrive/
# ln -s /c /cygdrive/c

minttyの文字コードをUTF-8に変更

gnupackの場合、windowsコマンド等との互換性優先のためか、minttyのデフォルト文字コードがsjis(cp932)になっています。他の環境やツールとの互換性を考えると、utf-8の方がいろいろ都合が良いので、設定を変更しておきます。gnupack展開先のトップディレクトリにあるconfig.iniを書き換えます。

(config.ini.diff)

18c18
<     LANG           = ja_JP.cp932
---
>     LANG           = ja_JP.UTF-8

また、.vimrcの設定も標準でsjisになっているのでこれも書き換えておきます。
(sjis設定で上書き設定している部分をコメントアウト)

~/.vimrc.diff

2c2
< set encoding=cp932
---
> "set encoding=cp932

Windowsコマンドの文字化け対策

minttyの設定をUTF-8に変更して困るのは、Windowsコマンド(ipconfig等)の出力の文字化けです。標準Cygwin環境もデフォルト文字コードがUTF-8なので同じことになります。対策として標準出力をUTF-8に変換するラッパーを通すようにします。
文字コード変換にはiconvを使えばいいのですが、gnupackのデフォルトでは入っていないので、予めapt-cygでlibiconvをinstallしておきます。その上で、.bashrcに以下のようなaliasを設定すればOKです。

(~/.bashrc)

function wincmd() {
    CMD=$1
    shift
    $CMD $* 2>&1 | iconv -f cp932 -t utf-8
}

alias ipconfig='wincmd ipconfig'
alias netstat='wincmd netstat'
alias netsh='wincmd netsh'
alias cscript='wincmd cscript'

他に、必要な物があれば同じような感じで追加すればOKです。
なお、netsh interface dumpのように、標準出力をファイル出力したものを、そのまま別コマンドの入力として使うような場合には、ダンプしたファイルの文字コードがUTF-8のためにエラーになってしまうことがあるので注意が必要です。(PowershellもUTF出力なので同じみたいですが)


pingの切り替え

Windows7で、minttyからping打とうとすると、実行権限がないというエラーがでて実行できません。

# ping 127.0.0.1
ping: socket: Operation not permitted

minttyを管理者として実行すればいいのですが、それも面倒なので、Windows版のping (C:\Windows\system32\PING.EXE)を使うようにします。(Windows版だとpermissionにひっかからない)
.bashrcにaliasをはればいいのですが、minttyの文字コードをUTF-8に変えていると、他のwindowsコマンドと同じく文字化けしてしまうので、その場合は、上述の例と同じく、.bashrcで文字コード変換のラッパーををかますようにalias登録しておきます。

(~/.bashrc)

alias ping='wincmd /c/Windows/system32/PING.EXE'

設定関係はこれくらいで、あとは、必要なパッケージを追加で入れていきます。ssh, mingw64-i686-gcc-core, git, pythonなどなど。その辺は、それぞれの目的に応じてということで。

なお、gnupackは便利なのですが、最近更新が止まっているせいか、新しいバイナリをあとから入れるといろいろ問題があるようです。詳しく見てませんが、gnuplotやgroffは動きませんでした。ソースからコンパイルすればいいのかもしれませんが、本格的に使おうという人は標準Cygwinの方が結局手間がないかもしれません。

4774149543

【関連記事】
WindowsでCUI環境


【関連書籍】
詳解 シェルスクリプト Arnold Robbins Nelson H. F. Beebe 日向あおい
Windows コマンドプロンプト ポケットリファレンス 山近 慶一
Windowsコマンドプロンプト スパテク242 Vista/XP/2000対応 (スパテクシリーズ) 飯島 弘文

WindowsでCUI環境

人は習慣を好む、なぜならばそれを作ったのは自分だから。
バーナード.ショー

最近、仕事環境がかわったことで、職場のPC(Windoes 7)と、ついでに自宅で眠っているPC(Vista)をクリーンインストールからやり直しました。どちらの環境でも本格的なコード書くことはないですが、ちょっとしたスクリプト書いたり、ソースコードを読んだりすることはあるので、そのための環境も整えています。Windows環境でも定番で入れるアプリはいくつかありますが、その中で、CUI環境、キーボード操作改善関連のものをいくつか紹介しておきます。


gnupack (cygwin + emacs)

Cygwin

WindowsでCUIといえば、やはりcygwin。最近はWindowsもPowershellになって以前より使いやすくなってるらしいですが、いろいろ覚えるのもの面倒だし、やはりUnixライクな環境というのは便利なので入れています。gnupackは、Cygwinとemacsをアーカイブ展開するだけで使えるようにパッケージ化されたもので、導入が手軽なので乗り換えてみました。
emacsの方は、以前はMeadow使ってましたが、最近進化も止まっているのと、こちらの方がWindowsカスタマイズ済なので導入もお手軽ということで同じく最近乗り換えました。日本語入力も問題ありません。

gnupack (cygwn + emacs package) - SourceForge.JP


Launchy

Launchy

コマンド入力型のランチャ。コマンド入力でアプリやURL、フォルダを開けます。Launchy自身もAlt+Spaceで簡単に起う動する上に、コマンド入力も補完が聞くので少ないキーストロークで目的のアプリを立ち上げられます。私の場合、ショートカットを集めた専用のフォルダを作って、それをカタログに追加して使っています。

http://www.launchy.net/


Nostalgy (Thunderbird Add-on)

thunderbird

メーラはThunderbirdを愛用していますが、いくつか入れているAdd-onの一つが、NostalgyというキーボードショートカットのAdd-onです。メールの移動や、タグ付けがマウスなしで手早くできて非常に便利です。

Nostalgy :: Add-ons for Thunderbird - Mozilla Add-ons


Ctrl2Cap

capslock

emacsユーザーでなくとも、キーボードショートカット多用する人ならCapsのCtrl化は必須ですよね。Microsoft Technetで公開されているドライバです。

Microsoft Technet : Windows Sysinternals : Ctrl2cap


F1ブレイカー

F1

個人的には、Caps Lockと並んで存在が悪としか思えないF1ヘルプ起動。ESCキーを押そうとしてうっかりF1を押してしまう人は、これを入れて無効にしてしまいましょう。しかし、F1でヘルプ開く人なんてほんとにいるんでしょうか。。

F1ブレイカー : Vector


他にも、おすすめはありますが、とりあえずここまで。


4873114020
【関連記事】
gnupackでCygwin導入した時に最初にすること
gdbを電卓として使う
Caps lockとCtrl


【関連書籍】
Clean Coder プロフェッショナルプログラマへの道
整理HACKS!―1分でスッキリする整理のコツと習慣
IDEA HACKS! 今日スグ役立つ仕事のコツと習慣

本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


プロフィール

  • Author:proger
  • 組み込み関係で仕事してます

ブログ内検索