スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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 鴨澤 眞夫

FC2 Management

Linuxで簡易ネットワーク解析 - bridge, tc, netem

ロンドン橋がおちる おちる おちる
ロンドン橋がおちる さあどうしましょう
『London Bridge Is Falling Down』 - 高田三九三訳詞・イギリス民謡

Linuxを使ってパケットキャプチャや、パケットロスや通信遅延といった通信環境のシミュレーションを簡易的に実施するという話です。

本格的な評価のための通信レミュレーションとなると、専用の機材を使わないと難しいこともありますが、簡易的な確認であれば、ノートPCに入れたLinuxだけでできるようにしておくと、特別な機材準備もいらないので、結構便利だったりします。メモもかねて残しておきます。

やりたいこと

  • 有線ネットワーク上のパケットキャプチャ
  • 通信の遅延や瞬断、パケットロスのレミュレーション

準備


パケットキャプチャ用の接続と設定

パケットキャプチャのソフトの方は、Wiresharkやtcpdumpを使えばいいんですが、問題は接続方法。最近は安くてコンパクトやミラーリング対応のスイッチングハブ(以下ものもとか)もあるので、それを使うというのが基本的な方法です
実際、ものさえあればそれが一番手間いらずですが、あとで説明するネットワークエミュレーションもあわせて実施できるようにするため、ここではブリッジを作成した接続方法を説明します。

USB-Etherの接続

Linuxをブリッジにするために、まずUSB etherを2本USBポートに差します。挿した直後は、ホストOSの方で認識されてしまうので、virtualbox側で認識させます。何も問題なければ、ゲストOS側にeth3, eth4で認識されます。ifconfigで見えているか確認しましょう。
USB etherを2個さす理由は、bridgeの両端用です。通信キャプチャしたい機器と機器の間に準備したPCが挟まるような形でLANケーブルを接続します。

例) 機器Aと機器Bの通信をキャプチャしたい場合
 [元の接続]
 (機器A) ----- (ハブ等) ---- (機器B)

 [接続変更後]
 (機器A) ----- (ハブ等) --- [(USB Ether1) 解析用PC (USB Ether2)] ---- (機器B)


内蔵のetherポートやホストOSとの通信用の仮想ドライバを片方側に割り当ててもいいのですが、ここは独立性が高くなるよう専用ポートを用意するようにしています。これだと、既存のネットワークとの接続を維持したまま、ターゲットのネットワークを見れるというメリットもあります。

bridgeの設定

USB etherが認識できたら、これらを両端としたブリッジを構成します。ブリッジの作成は、brctlコマンドで行います。brctlはbridge-utilsのパッケージに含まれますので、入っていない場合はインストールしましょう。
先ほどのUSB etherがeth3, eth4とすると、以下一連のコマンドでeth3とeth4を中継するbridgeデバイスが作成できます。

brctl addbr br0
brctl addif br0 eth3
brctl addif br0 eth4
ifconfig eth3 0.0.0.0 up
ifconfig eth4 0.0.0.0 up
ifconfig br0 0.0.0.0 up

bridgeデバイスの状態は、brctl show br0で確認できます。
うまくいっていれば、これで通信がbridgeされているはずです。 試しに、br0を通るパケットをtcpdumpやwiresharkで見てみましょう。
tcpdump -i br0
機器Aから機器Bへのパケットが見えていればOKです。

大抵は、これでOKですが、マルチキャストパケットの場合、IGMP snoopingのために通信が中継されないことがあります。とりあえず全キャプチャしたいという時には、混乱のもとになるので、IGMP snooping機能は無効にしておいた方が安全かと思います。
bridge-utilsはまだ対応していないので、/sys/devices/virtual/net/brN/bridge以下のファイルを変更することで、設定を変更します。multicast_snoopingの内容を1から0に変更します。
echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping

その他、Linux bridgeの詳しい内容については、以下が参考になります。


通信環境のエミュレーション

パケットロスや、通信速度といったにはnetem (tcコマンド)を使います。
先の手順で機器Aと機器Bの通信は全て解析用PCがブリッジしているので、tcコマンドで中継しているデバイス (br0、又は、eth3やeth4)に設定することで、機器Aと機器B間の通信に対する遅延やエラーをエミュレートできます。

4797373512 eth0に100ms遅延
tc qdisc add dev eth0 root netem delay 100ms

eth0を100ms±10ms(ランダム)の遅延 (先にaddしたものを変更)
tc qdisc change dev eth0 root netem delay 100ms 10ms

パケットロス率を0.1%に変更
 tc qdisc change dev eth0 root netem loss 0.1%

bitエラー率を0.1%に変更 (ランダムなオフセットに対して1bit error)
tc qdisc change dev eth0 root netem corrupt 0.1% 

パケット重複 (1%)
 tc qdisc change dev eth0 root netem duplicate 1%

パケットリオーダリング (5パケット毎に10ms遅延して送信)
tc qdisc change dev eth0 root netem gap 5 delay 10ms

設定したフィルタを削除
tc qdisc change dev eth0 root

その他、netem, tcコマンドの詳細は、以下が参考になります。

警察の初動捜査と同じで、不具合や問題の解析も何か起こった時にすぐ解析できるかどうかは、結果や経過を大きく左右します。簡易的であっても、手軽に解析できる環境をもっておくというのはいざという時に強い味方になります。

4897977967
【関連書籍】
ルーター自作でわかるパケットの流れ 小俣 光之
Linuxネットワークプログラミングバイブル 小俣 光之 種田 元樹
実践 パケット解析 ―Wiresharkを使ったトラブルシューティング Chris Sanders 園田 道夫
パケットキャプチャ入門 第3版 (LANアナライザWireshark活用術) 竹下 恵
パケットキャプチャ実践技術―Wiresharkによるパケット解析 応用編 竹下 恵

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のプログラミングのツボとコツがゼッタイにわかる本―最初からそう教えてくれればいいのに! 立山 秀利

Ubuntu12.04でatftpdを使う時の設定

僕はつい見えもしないものに頼って逃げる
君はすぐ形で示して欲しいとごねる
Mr. Children - NOT FOUND

開発環境用のUbuntu12.04上でatftpd(Advanced TFTP server)を動そうとした時に、少しハマったのでそのメモです。

まず、atftpdはaptitudeでinstallしておきます。

$ sudo aptitude install atftpd

デフォルトでは、inetd(Ubuntu12.04だとrlinetd)経由での起動になっていますが、不要なので単独daemonとして起動するように/etc/default/atftpdを変更します。
USE_INETDをfalseに変更して、これでOKかと思ったのですが、実際にこれで起動するとatftpdの起動に失敗します。解決策としては、同じく/etc/default/atfpdで、OPTIONSにポート番号指定(--port=69)を追加してやればOKのようです。

(参考)
TFTP Server atftpd fails to start - Ask Ubuntu

(/etc/default/atftpd 設定例)

USE_INETD=false
OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --port=69 --maxthread 100 --verbose=5 /srv/tftp"

変更後、atftpdを起動し直します。

$ sudo /etc/init.d/atftpd start

ps等で起動しているか見てみて、atftpdが起動していればとりあえず起動は成功です。

念のため、動作確認するために、別のマシンor自分自身からtftpしてみます。
自分自身からアクセスするならtftp localhostして、適当なファイルをputして成功すればOKです。 うまくいかない場合は、エラーログ等参考に、root directory(/tftpbootとか)のpermissionやiptable等のフィルタ設定を見直しましょう。


4873114225 【関連書籍】
Linuxカーネル Hacks ―パフォーマンス改善、開発効率向上、省電力化のためのテクニック 池田宗広 大岩尚宏 島本裕志 竹部晶雄 平松雅巳 高橋浩和
リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY) 坂井弘亮
起動プログラム ブート・ローダ入門─クロックの初期化や外部メモリの設定からOSの起動まで TECH I シリーズ (TECH Iシリーズ) Interface編集部
組込みソフトウェア開発入門 ~組込みシステムの基本を‐ハードウェアとソフトウェアの両面から学ぶ! 星野香保子 並木秀明 菊池宜志 日比野吉弘

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! 今日スグ役立つ仕事のコツと習慣

再開

ここしばらく放置状態にしていたこのblogですが、最近ちょっと時間もできてきたので再開しようかと思います。
しばらく放置していたので、長期間更新なしで出る広告がもりもり出てるし、Google AdSenseも何かの表紙に停止されていました。。しばらくアフィリエイトブログ状態だったからかな。。

退会しようとするユーザーをつなぎとめる仕掛け

クオリティを与えよう。それが最高の広告だ。
ミルトン・ハーシー (ハーシーチョコレートの創業者)

月定額で動画が見放題ということで、昨年日本上陸したHulu。iPadや携帯、お風呂テレビなんかでも見れるので結構便利なのですが、最近はあんまり見る時間もなく、ほとんど使えていません。

ここ二ヶ月くらいは全く見ていないので、解約しようとページを開くと、そこに、「アカウントホールド」なる設定があることに気づきまhした。どうやら、しばらく休止状態にして、その間は料金もかからないようにできる模様。期限がくると自動で再開されてしまいますが、それまでのあいだに再開や、解約は自由とのこと。解約すると二度と再加入しないだろうけど、こういうオプションを用意しておくと、「また気が変わっても面倒だし、とりあえずは休止にしとくか」というユーザーも多いのではないでしょうか。かくいう私がそうでした :-P

退会しないで下さいといっても無駄ですが、こういうさりげない形で、ユーザーの意思でそちらを選ぶよう誘導するのって非常にうまいですね。

ちなみに、HuLuの設定は、Huluの「アカウント」=>「支払い情報」のところになる「アカウントホールドを利用する」から可能です。


Macbook airでBlu-rayドライブを使う

白鳥は哀しからずや 空の青 海のあをにも染まずただよふ
若山牧水

自宅PCをMacbook air (Mid2011 13")に乗り換えてから、しばらくはドライブ無しで使ってたのですが、さすがにないとやっぱり不便。ほとんど必要なケースはないんですが、CDリッピングくらいはやっぱりしたい。
一応、Windows PCもまだありますが、いちいちそのために別PCでWindows立ち上げるのも面倒。ということで、やっぱりドライブは購入することにしました。


さて、Macbook air用のドライブとしてまず候補にあがるのが、Apple純正のMacBook Air SuperDrive。専用ドライブなので見た目のデザインはMacbook airとの組み合わせでの機能は一番。itunesのバックアップなんかはこれでないとできないみたいだし。

Apple MacBook Air SuperDrive MC684ZM/A
B00485CHL8

とはいえ、このドライブ、Macbook air専用のため、他の機器では使えない。Windowsはもとより、Macbook Proでだって使えない。これはさすがにいまいち。
あともう一点悩ましいのがBlu-ray対応。どうせ新たに外付けドライブ買うのであれば、できればBlu-ray対応のものにしたいところです。自宅にはBDレコーダもありますし、別にMacでBDをみたいというわけではないんですが、BDレコーダでBDやDVDにバックアップとった個人ムービーを、PC環境でもう一度バックアップor編集したいと思うことが前々からありましたので。


というわけで、今回はsuperdriveはやめて、汎用のBlu-rayドライブを購入することに決めました。
私が購入したのは次のBUFFALOのポータブルBlu-rayドライブ(BR-PX68U2-BK)。

BUFFALO ポータブルブルーレイドライブ BR-PX68U2-BK
B002UD6CMK

旧モデルなので安かったのが決め手です。発売が古いため、バンドルされている再生ソフトも古く、Updateが必須という話もあるようですが、私の場再生用じゃないので問題なし。というか、そもそもMac用じゃないですしね。
ちなみに、このモデル含め、現在発売されているBlu-rayドライブはどれも公式にはMac対応していません(過去にあったようですが今は品切れ)。とはいえ、実際使っている限りは、何の設定せずとも問題なく使えています。メニューにもBD関連の設定が出ますので、Mac OS Lion自体にもBlu-ray対応はきちんと入っているようですね。


以下、簡単な動作確認結果です。

メディア書き込み (ファイル書き込み)読み込み
音楽CD - OK (itunesでリッピング)
CD-R OKOK
DVD-Video - OK (DVDプレイヤで再生)
DVD-R OK (Finderからファイル書き込み) OK
DVD-RAM OK (Finderからファイル書き込み) OK
BD-R (1層 25GB) (未検証) OK
BD-RE (1層 25GB) OK (Finderからファイル書き込み) OK
BD-RE (2層 50GB) OK (Finderからファイル書き込み)OK

書き込み速度も十分でています。
Blu-rayへの書き込みはできないかなと思っていたのですが、あっさりできたのは意外でした。あんまり書き込みすることはなさそうですが、うれしい誤算です。あと、DVD-RAMが使えるのものうれしい。


といことで、
・公式サポートでないということは気にならない
・自己責任で使う
・BDやDVD-RAMの資産がある
というMacbook airユーザーの方には、Blu-rayドライブはいいかもしれません。
私が買ったのは古い型ですが、BDXL対応の多分新しいモデルでも大丈夫かと思われます。

BUFFALO BDXL対応 ポータブルブルーレイドライブ BRXL-PC6U2-BK
B004T7V62G

捨てる、売る、電子化

人生は短い。この書物を読めば、あの書物は読めないのである。
ラスキン

長らく放置状態にしていた物置を大掃除。すると出てくる出てくる、引越し以来開けていないダンボールや、二度と着ないであろう服、未だ読んでないものも含めた大量の本、長らく聞いていないCD。。。「いつかまた」と思って残してきたこれらの荷物達ですが、この状態では「いつか」も一生こないのはいい加減明白。思い切って「捨てる」「売る」「電子化」することを決めました。


大切な本は電子書籍化

電子化すべきか、残すべきか

掘り出されたダンボールの中身は、また読むかと思って残している書籍から、買ったものの一度も読んでいないもの、あるいは読み終わって処分していないものまで様々。不要なものは、捨てるか売るかするとして、問題は残しておきたい書籍達。紙の形はかさばるし、持ち歩くのも一苦労なので、ここはやっぱり電子化したい。とはいえ、自分で自炊環境揃えるのも大変ですので、前から気になっていた自炊代行サービスを利用することにしました。装丁が気にいっている本も多かったのですが、今の我が家では立派な本棚に並べてあげることもできませんので、見たい時に読めるPDFに生まれ変わってもらってもらうことにしました。

さて、自炊代行サービスといえば、出版社からスキャン代行業者への質問状以降、各所でいろいろな議論を呼んでいます。自炊代行というサービス、あるいは、それに対する作家・出版社の反応に対しては、それぞれ賛否両論あると思いますが、これらの事をきっかけに、怪しげな代行業者が減ったようなので、その点だけは少なくとも良かったのではないかと思います。

そんな中、業者選びは少々迷いましたが、結局、最大手のbookscanを選びました。

bookscanってどうなの?

bookscan bookscanといえば国内最大手で、サービス面も充実していて評判も非常に良い業者です。但し、人気のある分納期は遅く、一時期は半年待ちという頃もありました。さすがに今は大分緩和してきて、今日時点では2ヶ月半待ち程度。それでも長いです。
そこで、選んだ選択肢は、納期が優遇されるプレミアム会員。これが非常に便利!。以下、簡単ですが、使用後の感想です。

プレミアム会員

bookscanのプレミアム会員は月額9980円。ちょっと高額に思えるかもしれませんが、50冊分のスキャンと、非常に充実したサービスがついてきます。50冊以上本があるなら断然こちらがおすすめです。以下、一部サービス内容を抜粋します(2012/1/2時点)。

  • 毎月50冊分まで無料でスキャン
  • 納期は、書籍到着後、当日~1週間以内にPDF化
  • Amazonや楽天ブックス等のサービスから、直送指定可能
  • OCR、名前変更作業付き

50冊分のスキャン換算であれば1冊200円ですね。通常コースならスキャンだけなら100円でも可能ではあるのですが、ファイル名変更(個別だと50円/1冊)はないとかなり不便だし、あとあとの検索を考えるとOCR処理もしておきたい。となると、結局1冊あたり150~250円はかかる計算になるので、決して割高ではありません。何より、待たずにすぐスキャンしてくれるのはうれしいです。スキャンデータを一括ダウンロードできるアプリも大量のスキャンデータがあるとかなり重宝しますよ。
プレミアム会員は、一時は会員枠の空き待ち状態で、登録したくてもできない状態がでしたが、今はすんなり登録できました。キャパが増えたのかも。

チューニングラボ

そしてbookscanの一番のおすすめはチューニングラボ。空白除去や文字の鮮明化処理、容量圧縮をほどこして電子書籍リーダーやスマホ・タブレットへ最適化してくれます。これが想像以上に便利。実際、単行本なんかをスキャンすると、上下にかなりの空白があるので、スキャンデータそのままでは無駄なエリアが多く、文字もその分小さくなってしまいますが、チューニング後のデータはかなりいい感じに処理されて、無駄な空白がきれいに除去されて非常に読みやすくなります。これだけでもbookscanを選ぶ価値があるといっても過言ではないです。
ちなみに、チューニング後のpdfはOCRデータは削除されていました。

ネットショップからの直送指定

また、これまたすごく便利なのがネットショップからの直送指定。プレミアム会員限定です。今まで本は基本新品で買うことが多く、マーケットプレイス等で中古の本を買う場合も状態のいいものをできるだけ選ぶようにしていました。しかし、電子化するのが前提なら少々日焼けしてようがヨレてようが関係なし。中身さえ読めればOKなので、お手頃なものを選んで、直接bookscanに直送。プレミアム会員なので、購入後一週間以内にはスキャンも完了、いつでもどこでも読めるようになる上、お財布にもやさしいということで、かなり便利です。
私の場合、40冊ちょっとは家の蔵書を送って、残りの数冊はAmazon等で気になる本を直送、という形で運用しています。

著作権

唯一の不満点は著作権関連。これはbookscanだけの問題ではないし、むしろ自炊代行業者の中では努力されている方だとは思うのですが、それでも何がスキャンできて、何がNGなのか判別するのは非常に難しい。建前上は、スキャン依頼する方がそれぞれ確認すべきということなのかもしれないけど、現実に即しているとは思えません。実際、運用されたとしたら、確認する方だけでなく、される方もいい迷惑でしょうし(自炊代行を認めていようといまいと)。この辺なんとかならないかなぁと思います。
ちなみに、最初にbookscan送った書籍の中に、自炊代行を許可しない著者の方の本を含めてしまっていたのですが、それらはスキャンされずに丁寧に送り返されてきました。これから送付しようとされている方はご注意下さい。
どの作家が反対しているかは、以下の記事中で、自炊代行業者への質問状に名を連ねた122人のリストが確認できますので、参考になるかと思います (※ もちろん、これが全てではありません)。

何で読もう?

482228428X 私の場合、PDFリーダー環境としては、iPad, kindle3, スマートフォン、それにMacbook airがありました。それぞれ一長一短ですが、やっぱり一番便利なのはkindle。軽いし、何よりe-inkがとにかく読みやすい!。一年程前に、興味本位で買ったものの、現状、日本語書籍が基本的にないのがやはりネックになって、US storeで雑誌をちょろちょろっと買って読んだくらいでお蔵入りしていたのですが、日本語PDFがまとめて手に入ったことで再登場。一気に、かかせないツールになりました。
日本上陸も近いと言われるkindleさん。kindle fireも魅力的ではありますが、本を読むのはメインならやっぱりe-inkモデルがおすすめです。


残りはリサイクルへ

さて、読みたい本は電子化するとして、残りは、もう読むことはないだろう本とCD達。CDについては、学生時代から書い集めたものがダンボールに二箱分ほど。お気に入りは既にPCの中ですし、CDを引っ張り出してきて聴くことなんてまずありません。多分この先もないでしょう。
これらは思い切ってリサイクルショップへ売却することにしました。私の場合、CDのジャンルとしてハードロック・ヘヴィーメタル系のものが結構あるのですが、こういうのはローカルのお店よりネットショップ向けなんだろうなと思ったので、今回は近所のお店ではなく、ネット系のリサイクルショップで売ることに決めました。

と、その前に、ものは試しということで、20枚程CDと古い本を見繕って近所の中古屋さん(ブックマーケット)に持って行ってみました。結果は、、、、、敢え無く惨敗。一緒にもっていた中古本達もあわせて、一部を覗いて値付け不可との判断。ちょっと悲しい。。処分してもらわずに引き取って来ました。

気をとり直して、今度はネット系ショップで売却手続き。こちらもいろいろありますが、評判を見ると、livedoor recycleが良さげです。品物単位で買取価格を見せてくれるのが好感が持てます。ということで早速申し込み。


申し込み日の2~3日以降くらいの指定した日に、宅配業者の方が引き取りにきてくれます。10点以上なら送料は無料。準備としては、ダンボール詰めと、印刷した申し込み書と身分証目書の同梱。回収した次の日には到着、その次の日には査定完了。結果はWebで簡単に確認できます。近所の中古屋さんでは値付け不可だったものが、以外と高値(といっても100円強)だったりしてちょっとうれしい。トータルでほんとに高価買取になったのか定かではありませんが、一枚一冊ずつ値段がついているのが見えるのは安心ですね。


ということで、電子化とリサイクルで、場所をとっていた本やCDがだいぶへって、非常にすっきりしました。一気に整理するのも気持ちはいいのですが、今後はためずに継続的にしないとダメですね :-)


4478732868 【関連書籍】
はじめてのGTD ストレスフリーの整理術 デビッド・アレン 田口 元
「捨てる!」快適生活―部屋スッキリの法則 飯田 久恵
電子ブック自炊完全マニュアル 戸田 覚
「自炊」のすすめ 電子書籍「自炊」完全マニュアル

すべてがπになる - 円周率の魅力

詩人味を持ち合せていない数学者は完璧な数学者とは言えない。
カール・ワイエルシュトラス

pi_day

3月14日は何の日かご存知でしょうかでしょうか? ホワイトデー? それもそうなんですが、もっとグローバルな記念日があるのです。上の画像は3月14日版のGoogleロゴです。そう、3.14で円周率(π)の日なんですね。Googleのロゴを見て知った人も多いんじゃないでしょうか。ということで、πの話をとりあげてみます。

Pi Day

日本人はゴロで記念日作るのが好きですが、これは日本限定じゃなくて、欧米でも"Pi Day"として結構有名みたいです。オフィシャル(?)サイト(http://www.piday.org/)ではπをあしらったTシャツやらも販売しています。ちょうど、アインシュタインの誕生日が3月14日ということもあって、大学などでイベントをもったりするところもあるようです。ちなみに、7月22日は円周率近似値の日とされているそうです。22/7が円周率の近似値として用いられるからとのこと。無理やり感がありますが、ヨーロッパ等では、日付の順序が、mm/ddではなくdd/mmになるので、案外受け入れられやすいのかもしれません。

円周率の覚え方

円周率(π)は、数ある数学定数の中でも、最も魅力溢れる数の一つですが、3.14159265...と延々と続く無理数である点が一般的には最も有名な特徴ではないでしょうか。私も子どもの時意味もなく100桁くらい覚えた記憶があります。その時は、ゴロとかではなく直接覚えてたような気がしますが、世の中には結構有名な覚え方というのもあるんですね。
産医師異国に向かう 産後厄なく 産婦みやしろに 虫散々闇に鳴く
3.14159265 358979 3238462 643383279 (30桁)
というのが一番有名みたいです。

円周率ついに割り切れる?

上述の通り、πが無理数なのは有名な話ですが、Googleで「円周率」を検索すると4位くらいに、次のnewsが入っています。
ネタ自体も秀逸ですが、Googleもなかなか秀逸です(笑)。

数学定数の顔

円周率(π)は、その名の通り円周と直径の比をあらわす数ではありますが、幾何学以外のあらゆる数学の分野で顔を出します。その最たる例はオイラーの公式でしょう。
eiπ = - 1
それぞれ異なる由来を持つ虚数単位のiと自然対数の底e、そして円周率πの関係性が、ここまでシンプルな数式で表されるというのは誰もが驚きます。リチャード・ファインマンはオイラーの公式について、「我々の至宝」かつ「すべての数学のなかでもっとも素晴らしい,そして驚くべき公式の一つ」だと述べています。個人的には、グレゴリーの公式に初めて出会った時も衝撃的でした。
π
4
1
1
1
3
1
5
1
7
+ ...
実用性云々はさておき、高校でオイラーの公式の証明くらいまでを教えるというのは、数学の魅力を伝えるという意味で非常に意味があるのではないでしょうか。

πが奏でる音楽

πの十進表示は、一見ランダムに見える数字の羅列です。非科学的だと分かっていても、この数列には何らかのメッセージがあるんじゃないか?、なんてこともついつい考えたくなります。YouTubeに円周率を譜面に見立てて演奏している動画ありましたので紹介しておきます。

YouTube - 円周率 pi

多分ランダムな音階でもエコーかけたりするとそれなりに聞こえるということなんでしょうけど、やっぱり譜面がπだと思うと聴く方の気持ちがかわりますね。


様々な顔をもつ円周率π。今後も様々なかたちで人々を魅了し続けるでしょう。


448601863X 【関連記事】
始まりはいつもゼロ? - 0オリジンと1オリジン
博士の愛した数式 - 数学の美しさ
googleを電卓として使う

【関連書籍】
不思議な数πの伝記 A.S.Posamentier, I.Lehmann
オイラーの贈物―人類の至宝eiπ=-1を学ぶ 吉田 武
πの歴史 (ちくま学芸文庫) Petr Beckmann
数の悪魔―算数・数学が楽しくなる12夜

PR


人気エントリ
最近の記事
4873115655
PR
最近のコメント
4873114799
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
4873115930
ブログ内検索
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。