投稿

7月, 2014の投稿を表示しています

ファイルシステムまわり

NTFS-3G マウントオプションで涙がでるほど書き込み速度がかわる。 結論からいうと、big_writesを使え。asyncはたしか付けなくても(デフォルトでつくので)良かったはず。noatimeも早くなる。(アクセス時間の記録がつなかくなる。) mount.ntfs /dev/sdXN /mount_point -o big_writes,async,noatime これで書き込み速度が20〜30MB/s → 50〜70MB/sになった。これは……… fdisk / parted パティションテーブルまわりを操作するにはfdiskを使えと書いてあるところが多いが、
知っての通りパティションテーブルはDOS時代から用いられてきたMBR(Master Boot Record)と、
より現代的なGPT(GUID Partition Table)がある。 fdiskは後者に対応していないので、そういうときはpartedを使おう。 fdisk -lのかわりはparted -l・ただしアラインメントは見てくれない。 アラインメントができているかを見たい場合、以下。parted /dev/sdX align-check min 1 min は optでもよい。1はパティション番号。

ESXi

記事が消えた 書きかけの記事が飛んだのであまりやる気が無い。 以下は、新たに復旧させた内容。 ESXi 自分用の計算・実験・データサーバを、仮想環境に移行することにした。 仮想環境には、 Type-1: マシン上で直接仮想化ソフトウェアを動かすやつType-2: マシン上でふつうのOS(Linux, Mac, Windows…)を動かし、その上で仮想化ソフトウェアを動かすやつ の2種類がある。 Type-1については、bare-metal virtualizationとか呼ばれてる。 今回導入したのは、Type-1 に該当する、VMware ESXi。 以下、メモ。 やっぱりユーザランドで動作するVirtualBoxよりずっと快適。 準仮想化対応。ディスク/NICまわりのioが快適な気がする。デバイスのホストパススルーは、CPUとマザーボードがVT-dに対応していなければならない。 とても期待していたのだけれど、古いマザーボードなうえAMDだったのでパス。
そろそろ長いこと使ってるし買い替えかな……… ハードディスクのコピー サーバの以降に関連し、ハードディスクのコピー作業が発生したのでメモ。 ふつう、LinuxやMacなどでディスク(まるごと)をコピーするとしたらddコマンドを使うものだけれど、 再開ができない進行状況が出ない と不便。(本当、どちらもできるのだけれど、一手間要るので、めんどう。もっと簡単にやりたい。) 探したところ、 ddrescue (GNU ddrescue) というコマンドが便利だった。 進行状況が出る再開ができる未確認だが、コピーするサイズ単位(ブロックサイズ)を適当に調節してくれるらしく、速い? コピー時は、入力、出力、ログファイルを指定する。 sudo ddrescue /dev/sdb1 sdb1.img sdb1.log 進行状況は、こんな感じで出る。 GNU ddrescue 1.17 Press Ctrl-C to interrupt Initial status (read from logfile) rescued: 330498 kB, errsize: 0 B, errors: 0 Current status rescued: 127153 MB, errsize: 0 B, …

ZFS in Open Source

ZFSというファイルシステムがある。 元々Sun時代にSolarisに載せるためのファイルシステムとして開発されていて、 柔軟にボリュームが切れる固定サイズにも可変サイズにもできるボリュームごとに好きなだけ簡単にスナップショットがとれるCopy-on-writeだから軽量専用のスナップショット出力吐きコマンドがあるたとえばSSH経由で(差分のみの)コピーも…!重複排除、暗号化が使える(後のバージョン)さらに、ボリュームマネージャも含んでいるミラーリング、ストライピング、RAID(RAID-Z)などがコマンド一発で(!)できる特殊なハードウェア不要 という、非常に先進的なファイルシステム(+論理ボリュームマネージャ)。 多くの人がSolaris以外でも使いたい!と思ったようで、様々にポートがされているのだけれど、以前と大きく状況が変わっているようなのでまとめる。 そのまえに:ZFSのバージョン ZFS自体は今も活発に開発されており、機能追加がされている。そのため、ZFSにはバージョンがある(!)。
(他のファイルシステムはないよね。EXT2, EXT3, EXT4は別物のようなものだし。) 既に述べたとおり、ZFSは、論理ボリュームマネージャとファイルシステムの両方を含んでおり、 ZFS Pool (zpool) -- 論理ボリュームマネージャZFS Filesystem (zfs) -- ファイルシステム のそれぞれにバージョンがついている。 英語版ウィキペディアの記載を見るとはやいのだけれど、
ZFS Poolのバージョンが重要で、 5 -- 圧縮に対応21 -- 重複排除に対応28 -- Multiple virtual device replacements (?)30 -- 暗号化に対応 ここらへんが、外から見た機能面で重要なところか。 各OSへのポート状況List of operating systems supporting ZFS ZFS-FUSE 一番昔からあるやつ。
ライセンス上の都合でLinuxのカーネルに取り込めなかったので、FUSEとして開発。
(FUSEなので)動作が遅い。あと、古いzpool(バージョン23)まで対応していない。 KQ Infotech's ZFS on LinuxLinuxへの移植その1。死んだ。ZFS on Linux Lin…

Java on Mac

新しい Eclipse (4.4) を導入しようとしたら、Apple版の Java (Java 6) では対応してない、最新版の Java 7 ないし(8)を入れろと言われたのだけれど、ハマったのでメモ。 下準備 Apple のアプリのインストーラで入れたパッケージは、pkgutil --pkgs で一覧できる。 ~ % pkgutil --pkgs | grep Java com.apple.pkg.JavaEssentials com.apple.pkg.JavaForMacOSX107 com.apple.pkg.JavaMDNS com.apple.pkg.JavaSecurity com.apple.pkg.JavaTools また、全てのインストール履歴は /Library/Receipts/InstallHistory.plist に残されている。 ~ % less /Library/Receipts/InstallHistory.plist みると、 com.apple.pkg.JavaTools com.apple.pkg.JavaEssentials はOS Xのインストール時に入れたものらしいので、消さないほうが良いっぽい。 いくつかのサイトをみてみると、 com.apple.pkg.JavaForMacOSX107 こいつだけ消せと言ってくる。 ここまでは下準備かな。 Apple版 Java おそらくではあるが、いくつかのアプリはApple版のJavaを前提にしているっぽく、 ダブルクリックするだけでも「Apple版のJavaをインストールしてください」とか言ってくるので、 Apple版Javaは入れといたほうがいいと思う。 これは、 http://support.apple.com/kb/DL1572 ここからダウンロードできる。 Oracle版 Java (公式) ねんのためいうと、Oracle (旧SUN) は Java の開発元です。 今までは、AppleでJavaを使うには、Appleによる改造版Javaを使うしかなかったけど、 現在ではOracleによる公式Javaを使うこととなった(Appleが開発をやめた。) で、ふつうJavaはhttp://java.com/からダウンロードできるのだけれ…

MoinMoin の plugin 作成

昨日の投稿にもう少し追記をすると、 MoinMoin は、Pythonで書かれていて、自分でプラグインを使って拡張できる設計になっている。 おそらく最もよく使うであろうPluginの形式は、 actionmacro の二種類ある。 macro macro は、ページ内で(インラインで)実行されるもので、よく使っているものだと 強制改行コードハイライト引用ブロックAdmotinion などがある。 インスタンスディレクトリ(data)を基準に、 moin/data/plugin/macro にそれぞれ放り込む。 APIは、マクロ名をMyTestMacroとすると、 MyTestMacro.pyというファイルに、 def macro_MyTestMacro(macro, 自分の引数) という関数を用意する。 action action はページから(ページ外で)実行されるもので、よく使っているものだと ページの削除ページ名の変更スライドショー なんかがある。 そして、全ページから実行可能になる。 インスタンスディレクトリ(data)を基準に、 moin/data/plugin/action にそれぞれ放り込む。 APIは、アクション名をMyTestActionとすると、 MyTestAction.pyというファイルに、 def execute(pagename, request) という関数を用意する。 YouTube の Live streaming の保存 知り合いがイベントを YouTube でライブ配信しているのだけれど、これを保存するにはどうすればいいかと調べてみたら、
フツーにVLCで保存できることを知った。 やりかたはとても簡単で、 メニューから『詳細設定でファイルを開く』『ネットワーク』タブを開き、URLにYoutubeのストリーミングのURLを入力する(httpsはhttpに直す)『ストリーミング/保存』にチェックをいれ、『設定』で保存ファイル名を指定。『ストリーム出力の表示』にチェックをいれると、見ながら保存できる と、これだけ。すごいぞ……… CSShttps://developer.mozilla.org/ja/docs/Web/CSS Mozilla Developer Network の資料。よさそう。http://www.w3.org/wiki/CSS W3C…

Apache on Mac / MoinMoin

Apache on Mac userdir 今まで実験用のhttpdはLinuxサーバに設置していたが、開発環境としては不便だったので、 手元のMacに作ることにした。 まず、Apache(httpd)の自動起動を有効にする。 sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist 安全のため、Apacheのlistenアドレスを変更し、ローカルからのアクセスのみを許可するようにする。
/etc/apache2/httpd.conf を編集する。 Listen 127.0.0.1:80 Userdirを有効にする。
デフォルトで有効になっているが、アクセス権の設定が正しくなされていないので、設定する。
/etc/apache2/users/userdir.conf を以下のとおり新規作成する。 <Directory "/Users/*/Sites/"> AllowOverride All Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI AddHandler cgi-script .cgi <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> Apacheの設定を適用するため、再起動する。(reloadでもよいのだが) sudo apachectl restart これで、~/Sites/ に設置したファイルは、http://localhost/~USERNAME/ でアクセスできるようになる。 Moinhttp://www.potpourris.net/docs/Moin ここにあるとおりイ…

執筆計画

執筆計画 articles まだ執筆していないページは以下のとおり。 docs/Linux/Disks/ZFS docs/Linux/Disks/DiskEncryption docs/Python/Python on Linux docs/Python/Python on Windows docs/Python/IPython/notebook docs/Python/scikit-learn docs/Python/interact with web docs/Python/PyPy TeXの簡単なつかいかた (ページ名未定)docs/Writing/Vim docs/PGP/What is PGP (図がなくてわかりにくいから、加筆修正) docs/PGP/PGP on Windows docs/Moin/disigning howtos Mac の便利なGUIアプリの紹介 codescodes/Skype log converter 汚いから書き直したい。OpenCV for Macやめるか続けるか決める。今は古いバージョンを放置してる。 執筆計画 (追記) 2014-07-16 追記。 Windows でのSSH/SCP環境Windows でのX11環境sshまわり (ssh_config, 公開鍵認証, RSA/ECDSA, X転送, ポート転送, ssh-agent, ssh-agent(mac(incl. 切り方)))VPNSoftetherOpenVPNTunnelbrickminiaudicleMarkdownMouMendeleyTeXとの連携方法(bibtex)Wireshark動画変換ffmpegIPython Notebook のバックエンドとしてAA動画への変換Isabelle/HOLMac の便利なGUIアプリの紹介AppCleaner InsomniaXFluxRemote MouseSynergyApp Language ChooserMac InformerMacWinZipper EasyTag for Mac MP3 Scan+RepairVirtualBox virtio

Career-grade NAT

Career-grade NAT(CGN)、クリーンな透過性とend-to-end原則を破壊する悪の技術だと思っている。 しかも最近、「NATはパケット交換ネットワークを回線交換ネットワーク的にするものた」という表現を知り、なるほどいい表現だと思うと同時に、ますます先の気持ちが深まった。

ただ、 Web Standards Killed the HTML Star – JeffCroft.com こういう話もある。 要約すると、「Webの標準化が進み、綺麗になったことで、Webのguru(スターなWeb技術者)は食い扶持を失った。」 「昔のWebは、ブラウザも規格もクソだったが、だからこそguruなの出る幕があった。」 「綺麗な技術になってしまうと、それを、扱える能力はコモディティになってしまう」 こんな話だったと思う。(割と前に読んだので忘れかけ)
この話は重い。
IPv6は、少なくともエンドツーエンド原則は復活してくれそうだという点では美しい。(6/4まわりの移行技術など怪しいところもある気がするが)
でも、美しい技術では、食えなくなってしまう。
逆に、計らずともThe Internetの飛躍的な発展により、IPv4はNATというクソの山のような技術を生み出してしまったのだけれど、 そのおかげで、(今やコンシューマでは食えないであろう)ベンダがCGNで毎年しのぎを削りつつ、食えている。
つらい話だ。
これだけクソと言っておいてなんだけど、 インターネットは「TCP(UDP)/IPのみでなりたち、 関連する通信にはコネクションを一本だけ張る(反例: FTP)」ものだと考えれば、 NATはエレガントな技術だとも言えると思う。
もっとも、このThe InternetをTCP/IPのみだと言うこともまた、大きな悪なのだけれど。 The InternetはIPであって、TCPまで含めてはいけない。

Wiki / Mac / VirtualBox

ウィキ IPv6 ウィキの設定を変えた。イースターエッグのつもりなので詳しくは書かないけど、IPv6経由でアクセスすると、ちょっといいことがあるかも。(ほぼ言ってる) Mac Mac の if名変更 Macのネットワークインターフェイスの追加・削除やプロファイル変更は、『システム環境設定』の『ネットワーク』から行える。 ところが、実は落とし穴があって、ここからネットワークインターフェイスを削除しても、ifconfigで表示されるネットワークインタフェイスのリストからは消えない。 なぜかと思い調べてみてわかったのだが、どうやら Mac では、 デバイスがはじめて追加されると、適当なif名(e.g. en1)がアサインされるどのネットワークプロファイルにおいても、同じインタフェイスは同じif名が維持される 例: AirMacに en0 が割り当てられれば、どのネットワークプロファイルに切り替えてもen3 例: Thunderbolt ethernet に en3 が割り当てられれば、どのネットワークプロファイルに切り替えてもen3 システム環境設定からデバイスを削除しても、実際は削除されない らしい。 マッピングは /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist というファイルで管理されているらしく、これを編集するにはどうすればよいかと「NetworkInterfaces.plist」で検索してみたら、 OS X Lion:Mac App Store からワイヤレスで OS X Lion をダウンロードできない - 「お使いのデバイスまたはコンピュータを検証できませんでした」 「NetworkInterfaces.plist」ファイルをデスクトップにコピーします (念のためのバックアップの作成です)。 「NetworkInterfaces.plist」ファイルをSystemConfiguration から削除します。 フツーに削除して良いらしい。 ということで、インターフェイスを全て消した上で、ファイルをsudoで削除し、再起動。 リセットされた。

VirtualBoxまわり virtio virtio を使ってみた。 より正確には、MacのVirtualBox上で動かしているWindows…

文章を書く / ウィキ / ブログ

文章を書く このウィキを設置してからというもの、また以前のように長文を書くことが増えたと思う。 手でちまちまウェブサイトを記述するのが面倒で、外部ブログは不便で、ホスティングウィキは自由度が低いもの、手頃でないものしかなく、 かといってウィキを時前で設置するのは…と思っていたが、いやいや、インストールして本当によかった。

ウィキ ウィキのテーマ このウィキのテーマは、自分で作った。元々は学部時代に所属していた研究室のために、自分で作ったものだが、 その研究室はCMSを使うのをやめて、手動でHTMLを更新するようなやりかた(?)に移行してしまったようで(そのほうが確かに自由度は高い)、 潰してしまったので、いくらか改変を加えた上で、自分で使うことにした。 適当にブラッシュアップが公開したいと思う。 コンテンツの記述 テーマにもよるだろうが、このテーマでは、ページ名が上に大きく(一番大きい見出しと同じ大きさで)表示されるようになっている。 そこで、ページ名はそこにまかせて、headingを、各セクションに対応させるという運用をとっている。 こうすると、H1がセクションごとに生成されるので、HTMLレベルのセマンティクス的には良いのかがわからないが、 TableOfContentsでも綺麗に表示されるのでいいかなと思っている。 ところで、ドキュメント類については、意外と記述してみるとセクション番号が入っていないと読みにくく、 どうしようかと悩んでいたが(=CSSで強制的に入れられなくはないが、全ページにはセクション番号は要らない。特に、トップページ。)、 以下の解決法を知った。 #pragma section-numbers on 便利。

ブログ けっきょく、編集性がよく、慣れているのもあって、ここでブログを書いている。 ただ、あくまでウィキなので、ブログを書くには向いていないのも事実だ。 実際、 週次・月次・年次の一覧機能ブログらしいRSSの出力 など、かなりクリティカルな機能を、今のところ適当に済ませてしまっている。 RSSについては、適当にウィキのデータを参照して、ブログ部分だけRSSを吐いてくれるコードを書くべきだろう。

Python on OS X

個人的には、Linux ディストリビューションネイティブの、(バイナリがある、網羅的である、活発である、などの)well-managedと言って良いパッケージマネージャならともかく、 若干そうではない(ある程度網羅的で活発ではあるが、バイナリが網羅的でない)Homebrewで重たいパッケージを入れたくはないという気持ちがあった。 そこで、今までは公式パッケージを用いていたのだけれど、 2.7.7が出たかと思ったら、一ヶ月ぐらいでもう2.7.8が出たのにめんどくささを感じたのと、 OpenCV含め、他の「重たい」ライブラリとの組み合わせ管理を楽にしたいという思いから、HomebrewでPythonをインストールすることにした。 結論からいうと、良さそう。 OSノンネイティブのパッケージマネージャでheavyなソフトのインストールというと、Macports時代の印象からか、 OSにあるものと同じだがバージョンが違うライブラリのようなものをモリモリインストールされ、 さらにそれらが全てソースからコンパイルするから死ぬような目に遭う、みたな印象があったのだけれど、 $ brew deps python gdbm makedepend openssl pkg-config readline sqlite これだけしかないし、 brew info python python: stable 2.7.8 (bottled), HEAD http://www.python.org /usr/local/Cellar/python/2.7.8 (4654 files, 74M) * Poured from bottle バイナリからインストールできる(bottle)。 おまけに、pipまでまとめてインストールしてくれるから、とても気が利いている。 さらに、HomebrewにはPython用のtapも用意されていて、 これを使うと、Apple Accelerate Framework (Intel MKLのApple版みたいなイメージ?)を使ってコンパイルできるらしい。 以下が、単純なスピードテストを実行した結果。 import timeit, numpy, scipy t = timeit.Timer("np.dot(A,B)","import num…