2013年12月30日月曜日

Xenのコンパイルでbits/predefs.hがみつからないと言われたときは

Xen をコンパイルしていると、 tcgbios.c のコンパイル時にエラーが出力される。ビルドに失敗したときのソースが手元になりのでエラーメッセージを掲載できないが、同様の問題で困っている人がいた。 xen-devel の ML に投稿があった。

どうも 、 tcgbios のコンパイルには、32bit 版の libc が必要らしい。Debian の場合、以下のコマンドで 32bit 版の libc をインストールできる。

  • sudo apt-get install libc6-dev-i386
ML への投稿だと、Xen のソースの中に README があって、そこに Xen をビルドするのに必要なパッケージが書かれているので、そこに、 lib-dev-i386 を追加してくれないか?という提案らしい。ただ、この記事を書いた時点では、まだ追加されている様子はない。(tcgbios はなんで libc6 の 32bit 版に依存するんだろう?という疑問はある。)

2013年12月29日日曜日

zshのサブシェル実行がわからない

Software Design 1月号の第1特集第2章で、サブシェルについての解説があった。紙面のコマンド例ではプロンプトが%だったので、zshかなーと思って、サブシェルの解説で示されていたコマンド例と同じことをやってみたら、結果が異なった。結論から言うと、解説にも書いてあったけど、想定してるのはashまたはdashだった。あと、サブシェルの生成の契機がdashとzshだと違った。

紙面だと、dash で
  • $ (sleep 200 | sleep 200) &
したら、サブシェルが生成されていた。
zshで試すと、以下のようになっていた。
なぜ違うのだろうか。ていうか、そもそも、dashだと、パイプで繋いだプロセスがそれぞれ独立したプロセスとして起動されているのに対して、zshは、パイプの前にあるプロセスの子プロセスとしてパイプの後のプロセスが起動されている。

サブシェルを実行してその中でプロセスを二つ起動するのと、サブシェルを起動せずに、子プロセスとして二つ目のコマンドを実行するのだと、後者の方が高速な気がする。ただ、zshは結構大きいので、起動が遅い。なので、無駄にサブシェルを起動しないようにしているのではないかと思う。

実際に、シェルの起動と終了にかかる時間を測定してみた。dashもzshも、起動時に-cオプションでコマンドを渡せるので、*sh -c exitをtimeコマンドで10回測定した平均を計算した。ちなみに、どちらのコマンドもzshから起動している。dashから起動したら、また違う結果になると思う。

  • dash: 0.0026 s
  • bash: 0.0047 s
  • zsh: 0.0062 s
やっぱりdashが速い。

とここまできて、やっとA User's Guide to the Z-Shellの3.2.3項を読んだのだけど、
In zsh, all but the last portion of the `pipeline' thus created is run in different processes.
らしい。つまり、パイプの最右のコマンド以外は新しいプロセスを生成するらしい。で、() で括ったときにどうなるかというと、どうも、ps コマンドで眺めている感じだと、パイプの最右のプロセスが子プロセスとして生成されて、最右以外のプロセスは最右のプロセスの子プロセスとして生成されるっぽい。謎だ。

3.8.3項, 3.8.4項 あたりをちゃんと読まないと。

2013年12月28日土曜日

とりあえずvagrant使ってみた

Linux Mint 15 で vagrant を入れて、作成したVMにログインできるところまで確認した。ちなみに、vagrant は「放浪者」とかそんな意味だった(alc)。vagrant の公式サイトを参考にした。

  • sudo apt-get install vagrant
ログ見てたら一緒にvirtualboxも入ってた。vagrantは、virtualboxでVM作成するところを自動でやってくれる。
  • vagrant init precise32 http://files.vagrantup.com/precise32.box
vagrant の初期化。カレントディレクトリにVagrantfileを作成する。このファイルはrubyで書かれていて、第一引数は、生成するVMのインスタンス名を指定し、第二引数は、ユーザのシステムに.boxなファイルが無いときに取得しに行くURLを指している。ちなみに、このURLをブラウザに突っ込んだら、website-unavailable.com に飛ばされた。vagrant init 自体は、設定ファイルを生成するだけなので、すぐに終わる。
  • vagrant up
VMを起動する。最初は、VMイメージが手元にないので、vagrant init の第二引数で指定したURLに取りにいってるみたい。二つ目のインスタンスを作ろうとしたら、ダウンロードは起こらなかったけど、Thinkpad X220i (Core i3-2310M@2.10 GHz, 4GB RAM, SSD) な環境で34秒かかった。結構遅い。この処理の内訳も気になる。VMの起動とゲストOSの起動処理の比率で、この34秒が遅いのか否か分かれる。vagrant up したら、/usr/lib/virtualbox/VBoxHeadless とかいうプロセスが起動してた。
  • vagrant ssh
起動したVMにsshでログインできる。パスワードとかはかかってない。あと、コマンドのヒストリを見ると、update-locale とか locale-gen とかしてた。ちなみに、uname -aしたら、Ubuntu 32-bit で Linux 3.2.0-23-generic-pae だった。
  • vagrant suspend
vagrant suspend でVMを停止できる。4.557 秒かかった。
  • vagrant resume
vagrant suspend したVMを再開できる。19秒かかった。ちなみに、vagrant up でも再開できる。
  • vagrant status
vagrant で作成したVMの状態を確認できる。また、VM名を指定することで、各VMごとの状態を確認できるらしい。今回は、一つしかインスタンスを起動していなかったためか、「A multi-vm environment is required for name specification to this command.」と怒られた。
  • vagrant halt
vagrant suspend はサスペンドなので、状態を保持して停止させるけど、vagrant halt は、シャットダウンするみたい。
  • vagrant destroy
停止させる。所謂強制終了と捉えれば良いのか?

とりあえず、ps -ef してみたら、以下のプロセスが起動してた。
  1. /usr/lib/virtualbox/VBoxXPCOMIPCD
  2. /usr/lib/virtualbox/VBoxSVC
  3. /usr/lib/virtualbox/VBoxHeadless
最初のはIPCだから、vagrantコマンドでvirtualboxを制御するためにコマンドを送るインタフェースかな?VBoxSVCは、ここを見ると、SMF Service Wrapperとのこと。書いてあることを素直に解釈すると、「非特権ユーザの所有するvirtualboxインスタンスをSolarisのSMFサービスとして制御する。」とか、「VBoxHeadless VMを起動した後にSMFサービスとしてresumeして、VMへのシリアルコンソールヘ接続する。」とのこと。色々書いてあるけど、要は、virtualboxのインスタンスの管理を便利にするためのものらしい。引数には、「--auto-shutdown」が指定されている。VBoxHeadlessは、man vboxheadlessを読むと、virtualboxのVMを起動したり、起動したVMの画面をキャプチャできるらしい。とにかく、vagrantでは、VMの起動にvboxheadlessを利用している。引数は色々指定されている。--comment でVMのインタンス名を指定しているようだ。--startvmも渡されているようなので、やはり、vboxheadlessでVMを起動している。また、--vrde config も渡されている。これは、よくわからない。

ホスト側から見た環境は、大体、これくらい。次にゲストから見てみる。topを実行すると、「Mem: 378000k total」と表示されるので、378 MBメモリが割り当てられているようだ。cat /proc/cpuinfo すると、processor: 0 の状態しか表示されないので、1コアしか割り当てられていない。gccやmakeは最初から入っているみたい。このあたりのスペックに関しては、vagrant init したときに指定したURLで配布されているイメージの仕様だろうから、どこかに書いてあるだろう。

ざっと見るとこんな感じだった。vagrant -h すると、以下のようなコマンドが利用できるらしい。
  1. box
  2. destroy
  3. gem
  4. halt
  5. init
  6. package
  7. provision
  8. reload
  9. resume
  10. ssh
  11. ssh-config
  12. status
  13. suspend
  14. up
今回書いていない、package, provision, reload あたりがとても気になる。vagrant gem は、vagrantのプラグインをgemを使ってインストールするコマンドらしい。どのコマンドも、vagrant [command name] -h で使い方が表示される。ただし、-h オプションで参照できる情報が異様に少ないので、あまり参考にはならない。

今後は、今回書かなかった(試していないので書けなかった)コマンドや設定ファイルの中身を見ていきたい。

追記(2013/12/29 00:57):SMFはService Management Facility の略らしい。ここに書いてあった。

2013年12月26日木曜日

xen-unstable で seabios 関連のコンパイルエラー

既知のバグに引っかかった.xen-unstable をコンパイルする際に,seabios 関係でエラーが出た.既知のバグらしく,Xen Wiki を見ると,英語以外の言語を利用している環境だと発生するらしい.確かに,日本語環境をインストールしたマシンに Xen をインストールしたのは,初めてだった.以下のように LC_ALL 環境変数を変更して,英語にすることで対処できた.
export LC_ALL=en_US.UTF-8
追記(2013/12/26 17:18):対処できてなかった.いや,そこの問題は突破できたみたいだけど,connection reset by peer とか言われる.困った.

2013年12月19日木曜日

Xenをmake cleanしたときにErrorが出る件

Xen-devel の ML で報告されている([Xen-devel] Make clean failure with qemu)けど、xen/ で make clean するとError が出る。

問題がありそうな xen/tools ディレクトリに移動して make clean したら解決した。原因は何だろ。


2013年12月11日水曜日

Disassemble Linux kernel

Decompress

/boot/vmlinuz-XXX なカーネルイメージは,圧縮されている.通常,disassemble するには objdump を使う.しかし,圧縮されているので,そのままのカーネルイメージには objdump は使えない.そこで,始めに,圧縮されているカーネルイメージを展開する.展開ということで,手元にあるカーネルイメージの圧縮形式はbzip2なので,bunzip2で展開しようとしたけど,無理だった.file コマンドでカーネルイメージを調べると,Linux kernel x86 boot executable bzImage とのこと.通常のbzip2ではなかった.さらに調べると,なんと,最近のLinuxには,vmlinuzをvmlinuxに展開するためのscriptが同梱されているとのこと.遠回りをした結果,ソースのレポジトリに戻ってきた.linux/scripts/extract-vmlinux なるスクリプトがあるので,これを利用する.

Disassemble

既に書いたように,vmlinux形式への展開は完了した.vmlinuxはELF形式の実行ファイルなので,objdumpが使える.ただし,シンボル情報はstripされているので,シンボル情報が欲しい場合は,カーネルのビルドオプションを指定する必要がある.多分できると思う.以下のコマンドでvmlinuxをdisassembleする.

2013年11月27日水曜日

rsyslogdで秒よりも細粒度の時間を記録する

rsyslogdは、最近のLinuxディストリビューションだと標準でインストールされているsyslogデーモンです。syslogdを拡張したものとしては、rsyslogdやsyslog-ngがありますが、syslog-ngは、ポリシがsyslogdと互換性がないなど、やや運用には手間がかかります。まあ、syslogdのポリシをsyslog-ngのポリシに変換するツールは確かsyslog-ngの中の人が提供してくれていたような気もしますが、私は標準でインストールされているrsyslogdを使っています。

rsyslogdになって何が拡張されているかというと、TCPを用いてリモートマシン上のrsyslogdにログを転送できます。syslogdでは、ログの転送にはUDP/514を用いますが、rsyslogdからはTCP/514を用いてログを転送できます。UDPの方が少しレイテンシは良いですが、高負荷な環境でないのならTCPを用いるのがベターでしょう。

で、rsyslogdによるログの転送速度を測定したかったのですが、rsyslogdで標準で記録できるタイムスタンプは、最も細かくても秒単位です。1,000回ログを転送したとしても1秒かからないので、このままでは、測定になりません。rsyslogdのソースコードをもってきて、ログの送信時間を秒よりも細粒度の単位でログメッセージに含めたり、複数回のログの受信時間を測定して、その時間を受信したログの数で割ったりしようとしましたが、ソースコードを書き換えるのは少し抵抗があります。性能を測定したいのに、ソースコードに手を加えるのはどうなの?という点です。

そこで、色々調べたところ、rsyslogdは、ログメッセージの形式をポリシで設定できるようです。そこで、より細粒度にタイムスタンプを記録できないかと調べたところ、%timegenerated%なるパラメータがありました。さすがですね。ただ、%timegenerated%と書いただけでは、標準のタイムスタンプと形式が変わりません。より細粒度な時間を記録するには、%timegenerated:::date-rfc3339%と書きます。rfc3339はインターネットにおける時間の取り扱いに関するRFCです。時間に関するパラメータとしては%timereported%もありますが、これは、受信したログに含まれる情報をもとにしてタイムスタンプを記録します。一方、%timegenerated%は、送信側がログを生成した時間を推測するようで、こちらの方が高精度です。ちなみに、timegeneratedとdate-rfc3339の間にあるコロンは、rsyslogにおけるフィルタに関係します。rsyslogでは、ログメッセージにフィルタを適用して指定した箇所だけをログに記録できます。コロンはログの開始位置と終了位置を指定するたのもので、%msg:1:2%と書いた場合は、%msg%のうち、1文字目から開始して2文字目までの範囲だけをログに記録します。このフォーマットではコロンは省略できないので、文字列を全部記録したいけどオプションも指定したい場合には、コロンが三つ並ぶ形になります。

高精度にタイムスタンプを記録するにはオプションを指定すれば良いことが分かりました。ここで気になるのは、どういったオプションがあるのかです。オプションの種類については、rsyslogのソースコードのdoc/property_replacer.htmlに書いてあります。タイムスタンプに関係するオプションとしては、date-mysql, date-rfc3164, date-rfc3164-buggyday, date-rfc3339, date-subsecondsが用意されています(2013/11/27現在)。それぞれ、以下のような形式で出力されます。

  • date-mysql: 20131127211715
  • date-rfc3164: Nov 27 21:17:15
  • date-rfc3164-buggyday: Nov 27 21:17:15
  • date-rfc3339: 2013-11-27T21:17:15.425969+09:00
  • date-subseconds: 425969

それぞれの詳細はドキュメントを参照していただきたいですが、秒未満を見たいだけならdate-subsecondsだけでも良いのですが、すべての時間を含む表示が得られるdate-rfc3339がもっとも詳細に多くの情報を取得できます。

しかし、ただログを受信して保存するだけのデーモンなrsyslogdですが、実は多機能でドキュメントもかなり充実しています。以外に便利なので、少し勉強してみてはどうでしょうか。ソースに同梱されているドキュメントが詳細でお勧めです。


2013年11月13日水曜日

勉強できる人と研究できる人の違い

話をしていて何とはなく感じたことを。

よく言われることだけど、勉強ができる人と研究ができる人は特徴がかなり違う。自分の感じた差異の中で重要だと何となく思っているのは、「主観的か客観的か」の違いだと思う。経験上(といっても数年だけど)、先輩、同期、後輩と学生を眺めてきて思ったのだけど、成績が良くて研究がいまいち進捗しない学生の特徴は、主観的だということ。まあ、主観的でも研究できる人については、たまたま彼等の主観が客観的に要求されていることとマッチしているだけなのかもしれないけど。

主観的な人だと、自分が理解して自分の中で納得したいので、割と教科書を読み込んで、突き詰めていく。だから、当然、試験では高得点を取れる。しかし、研究は、客観的な観察が必要だと思う。だって、今どんな問題があって、それを解決するために何が要求されてるかなんて、客観的に考えないと分からない。主観的に考えて分かる人は、その問題に実際に直面した人。でも、研究目的となる事例に実際に自らひっかかってそれを解決できるかというと、必ずしもそうではない。だから、主観的に過ぎる人は、何が問題なのかは何となく分かるんだけど、じゃあ、どういったアプローチでどう解決に持っていけば良いのかが分からない。

客観的な人だと、ある問題の周辺を調査し、その中から類似点を捜す。そして、適していると考えられるものから順に試していく。そして、試していく中で、さらに客観的な観察を重ねて、徐々に正解に近づいていく。主観的だと、試していく中で、俯瞰して周辺を見れないので、類似点や関連性について見落としがちだ。

結局は、言い古されているかもしれないけど、研究をしたいのなら、客観的に物事を観察できるようになろうということ。 別に研究に限らず、客観的に考えるということは、接客業や営業でも大事で、要は、相手の立場や色々な視点で考えるということ。これができないと、顧客の要求を満たせないので、お金は稼げないのではないかと思う。主観的な人で稼げるのは、本当にその分野の要求と主観的な要求がマッチした人で、そういった人は、どんどん深く掘り下げていって、大きな成果を残す。でも、そういった人は稀で、基本的には、客観的な分析と試行があってこそ、研究が地道な進歩を得ると思う。

駄文でした。

2013年11月11日月曜日

golang て if や for の次の行からはブロックを開始できない?

こういうのって構文として許されていない。多分、if や for の condition を括弧で囲んでいないせいだ。

ifを書きたい場合は、condition と同じ行からブロックを始めないといけない。
Xenのソースの書き方に習って今まで書いてたので、言語が違うとはいえ、括弧の位置の制約って結構慣れないな。


Installing CuteMarkEd on Linux Mint 15

CuteMarkEd is a markdown editor with GUI for Linux and Windows. Here is a page on GitHub. Installation instructions are described in here. (Be careful: I have already installed some packages like libc6, so, following procedure may not contain necessary packages. Read the documentation from developers of CuteMarkEd carefully.)
  • git clone https://github.com/loose/CuteMarkEd.git
  • cd CuteMarkEd
  • less README.md
  • git submodule update
  • sudo apt-get install ubuntu-sdk libqt5webkit5-dev qtquick1-5-dev qtlocation5-dev qtsensors5-dev qtdeclarative5-dev libgstreamer-plugins-base0.10 libgstreamer-plugins-base0.10-dev libhunspell-dev libxslt1-dev libsqlite3-dev
  • cd discount
  • ./configure.sh
  • make
  • sudo make install
  • cd ..
  • qmake CuteMarkEd.pro
  • make
  • sudo make install
 With these procedures, CuteMarkEd is successfully installed in my environment. However, it is installed to /usr/lib/x86_64-linux-gnu/qt5/bin/. $PATH does not contain that place. So, if you want to boot the editor with command easily just type 'cutemarked', change a location to install or make symbolic links to a place where $PATH contains. I created symbolic link to /usr/local/bin/ by a following command:
  •  sudo ln -s /usr/lib/x86_64-linux-gnu/qt5/bin/cutemarked /usr/local/bin/
It works well :-)

2013年11月10日日曜日

PerlでMeCab

Linux Mint 15でPerlを使ってMeCabを呼び出してみた。ドキュメントの通りにやったらできた。MeCabのPerlバインディングの使い方についてはここを参照。

  1. パッケージの導入
    1. % sudo apt-get install perl mecab libmecab-perl
  2. MeCab単体が使えるか確認
  3. Perlでソース書き
以下、テストのソース。動作としては、MeCabを単体で動作させたときと同じ。while文で標準入力を受けつけて、MeCab::Tagger の parse を呼び出してるだけ。

Linuxで画面の動画キャプチャからYouTubeへのアップロードまで

Linuxで画面キャプチャってどうやるのか調べた。Linux Mint 15 で試した。

  • キャプチャ:recordmydesktop
  • 編集:OpenShot
今回は、作成したキャプチャ動画をそのままYouTubeにアップロードした。YouTubeへのアップロード機能は、OpenShotが標準で備えている。 recordmydesktopはここを参照すれば分かる。OpenShotは雰囲気で使った。今回は長さを少し短くしただけなので、動画のプロパティをOpenShotから開いて長さを変更した。

これがキャプチャした動画。私の大好きなフリーセルです。



2013年11月7日木曜日

ファイルの拡張子の一括変換

ITProの記事を参考にしました。ITProの記事のスクリプトを少しだけ変更して、引数で渡した拡張子を持つファイルの拡張子を一括して特定の拡張子に変換するスクリプトを作成した。


これをch_ext_to_txt.shのような名前で保存して実行権限をchmod +xで付与してパスの通ったディレクトリに移動する。実行方法は、ch_ext_to_txt.sh tex とすると、拡張子がtexのファイルの拡張子をtxtに変換する。

で、これの最大の疑問は、${foo%word}です。大体想像はつくけど調べた。manpageを見ると、以下の説明(日本語)がある。
${parameter%%word}
パターンに後方一致した部分を取り除くword が展開され、パス名展開の場合と同じようなパターンを作ります。 このパターンが parameter を展開した値の末尾の部分とマッチする場合、展開結果は parameter を展開した値から最短一致パターン (``%'' の場合) または最長一致パターン (``%%'' の場合) を取り除いたものになります。 parameter@ または * である場合、 パターンを削除する操作は全ての位置パラメータに順番に適用され、 展開結果はリストとして得られます。 parameter@ または * が添字になっている配列変数である場合、 パターンを削除する操作は配列の全ての要素に順番に適用され、 展開結果はリストとして得られます。
便利ですね。 つまり、parameter で渡した文字列からwordに後方一致した部分を取り除く、ということらしい。だから、${foobar#bar}としたらfooが返される。

シェルスクリプト便利ですね。

Linux Mint でキーボード配列をJISからASCIIに変更

なんのことは無いよくある話だけど、メニューが分かり難かったのでメモ。

メニュー → 設定 → 地域と言語

の順番で選択する。すると、Layouts タブがあるので、有効なリストの下にある+を選択すれば English (US) を選択できる。

因みに、ここでオプションを押すと、CapsLock を Ctrl として機能させられる。 これは、Ctrl key position で At left of 'A' を選んだ。

2013年11月1日金曜日

最近のWebアプリケーションの流行に関して思うこと

最近,Webアプリケーションが異様な勢いで普及している.少し前までは,Vectorなりフリーで配布されているソフトウェアを探して,どれが良さそうか探したものだ.でも,最近は,ブラウザからGoogleで検索すると,欲しいサービスがWebアプリケーションとして提供されていることが多い.Webアプリケーションの利点として以下があるように思う.
  • 試すのが簡単
  • 環境を選ばない
  • Google
試すのが簡単というのは,ブラウザでリンクをクリックすれば,その場で実行できているからだ.Windowsしか知らないけれど,昔は,ダウンロードして実行してみるかスクリーンショットや説明から機能を推測していた.しかし,最近は,ブラウザでページを開くだけで,すぐに実行できる.ダウンロードの必要もない.何をやるにしても,最初の手間というのは,厚い壁で,これが多くのユーザを敬遠させていたのではないかと推測する.

環境を選ばないというのは,つまり,標準的な機能を備えたブラウザさえあれば,どんな環境からでも利用できるということ.CPUのアーキテクチャなんてどうでも良いし,OSだって基本的には関係ない.さらに言うと,環境を選ばないということの他に,共通のインタフェースだという点が重要だと思う.UNIXから派生した各種OSが大量に亜種を生み出しながら発展していったのは,CUIという共通したインタフェースがあったからだ.シェルの違いは多少あっても,基本的にはコマンドを実行してその結果を閲覧するスタイルだ.これは非常に単純ながら効率的なのでとても使い易い.(これらの利点はGNUによるツールの貢献が大きいかもしれない)

Windowsには標準のパッケージ管理システムがない.Debian系列のLinuxディストリビューションならaptがある.これはすごい便利だ.キーワードで検索すればそれらしいアプリケーションやライブラリを提示してくれるし,バージョンアップだってやってくれる.最近は,Googleがこの役割を担ってくれている.

なんとなく思い付いたことをいくつか書いたけど,つまり,シェル=ブラウザになったことで,アプリケーションの基盤もブラウザになったということ.OSやアプリケーションもブラウザ主体で開発していくのが昨今の流れに沿ったスタイルなんじゃないかと思ったということ.そういう意味だとChromeOSが開発されたのは自然な流れだったのかもね.

2013年10月31日木曜日

英語でプレゼンしよう

正直,私は英語で話すとか不可能だと思ってたし初めての国際会議and海外出張は失敗だったと思う.ただ,これは,あまり積極的に話さなかったからだと思う.話さないことには自信もつかないので,とにかく,英語で話した方が良いと思う.

学生なら,ポスタ発表とかでも発表させてもらえれば良い.ポスタ発表だと,ポスタの近くで質問を受け付けたり説明したりすることを義務付けられているものが殆どだと思うので,話さざるを得ない.私も安請け合いで発表したけど,聞きにくる人はこちらの研究を知りたがってるわけで,こちらの英語が分かりにくかったり会話が噛み合っていなかったら,ゆっくり確認してくれたりもする.そういうやりとりを繰り返して,「ああ,こういう表現だと通じないな」とか「割と通じるな」とか色々経験するし,これからどういう勉強していけば良いのかも,ある程度の目処がたつ.

最近はインターネットが発達してるので,話す相手には困らないと思う.会話で無理なら,Twitterで外国人に英語で絡むのもありだと思う.Twitterは気楽にやりとりできるし,ある程度の速さでレスポンスを返した方がやりとりも続く.

とにかく話すと良いのでは,ということ.何もしないで一人で勉強してても上達してるかどうかは分かりません.

golangのifやforの書き方について

golangのTutorialをやった.ifとかforの書き方がCと違うのでメモ.

golang では,for でループを表現する. 以下は例.

条件を囲む小括弧は付けてはいけない. また,中括弧は必ず付けなければならない.これはPerlと一緒だ.

後の方の説明を見ると,ifも同様の構文で,中括弧は必須だ. ただし,ifの場合の説明では,条件を囲む小括弧は不要とだけ書いてある. まあ,小括弧を付けても,条件式の評価値が変化するわけではないので,問題ない. for の場合は,セミコロンが入るので,構文としておかしくなるということか. ただし,ifについては,条件式の前に一文だけ?ステートメントを書ける. この際は,条件式の前のステートメントと条件式はセミコロンで区切るため,小括弧で囲めない.

これはOKで, これはダメ.

Tutorial では,for ではセミコロンを省略できるとある. その例として挙げられているのは以下のコード.

Tutorial は導入なので書かれていないけど,セミコロンを省略する場合は,すべてのセミコロンを省略しないといけない. つまり,以下のようなコードはsyntax errorだ.

golangはCとsyntaxが似てるものの割と自由に書けるのでとても書きやすいし,Cプログラマは勉強しやすい. 邪魔なセミコロンが取り払われたのは良い. ただ,似ていることで勘違いから発生するバグもあるので注意して書かないといけない.

駄文: 関数呼び出しのときに引数を示す括弧は不要なんじゃないかなーとか思う.

2013年10月29日火曜日

SyntaxHighlighterをBloggerで

SyntaxHighlighterのテストにC++のコードを書いてみた.BloggerにおけるSyntaxHighlighterの使い方で紹介されている通りに.とても綺麗で見易い. C++は書いたことないので適当にHelloしてきたコードをWandboxで試した.これまでコードが綺麗に載せられないので躊躇してたけど,これでポストできる.更新頻度は気分次第だけども.

2013年10月28日月曜日

Debianをインストールしてから私がしたこと


何回目のインストールだろうか.http://cdimage.debian.or.jp/ から netinst イメージをダウンロードして現在(2013/10/28)の最新版をインストールした.因みに,Debianは,インストール時にrootユーザを作らない場合,最初に追加したユーザがsudoユーザとして登録される.便利だ.Debianを選んだ理由は特にない.敢えて言えば,使い慣れていることと,ミニマルな環境が作り易いことか.apt良いよ.
  • sudo apt-get install i3-wm i3status suckless-tools
  • sudo apt-get install mercurial git-core
  • install vim
    • sudo apt-get install clang libncurses5-dev
    • hg clone https://vim.googlecode.com/hg/ vim
    • cd vim
    • make
    • sudo make install
  • sudo apt-get install ssh
  • sudo apt-get install zsh
    • echo "source ~/.zsh_aliases"
    • echo "alias ls='ls -F --color=auto'" > ~/.zsh_aliases
  • chsh
  • sudo reboot
少しだけgolangのコードを書いてみて,今日は終わり.あとは,TeXの環境とかも準備しないと.そういえば[改訂第6版]LaTeX2ε美文書作成入門が発売されていた.買おう.

2013年8月20日火曜日

dokuwikiのインストール

1ヶ月も更新してなかった…ことはどうでも良くて,既読論文を管理する方法を幾つか模索してて,試しに,WikiEngine (Wiki Clone) を使ってみた.で,見た目が好みなので,DokuWikiをインストールしてみた.DokuWikiは,phpベースのWikiEngine.以下,インストール手順.(公式サイトにあるインストール手順に沿っています.今回はDebian 7.1を利用しました.)


  1. aptでDokuWiki, lighttpd などをインストール
    1. % sudo apt-get install lighttpd
    2. % sudo apt-get install php5-cgi php5 dokuwiki
  2. lighttpdでfastcgi, fastcgi-php, dokuwiki の3モジュールを有効化(参考)
    1. % sudo lighty-enable-mod fastcgi, fastcgi-php dokuwiki
  3. lighttpdを再起動
    1. % sudo /etc/init.d/lighttpd restart
以上で,インストールは終了.Apacheやnginxでも使えるようです.web.pyを以前使っていた関係で,今回はlighttpdを使った.

感想:かっこいい.公開するようなサービスなら,アカウント管理とかACLとかできて便利だと思う.ただ,今回の私の用途には向かなかった.欲しい機能としては,タグ管理,PDFファイルの添付なんかがあると良かったんだけど,あったのかな?全体的に分かりにくく感じた.もっと分かりやすいインタフェースだと,より便利かも.あと,ややもっさりしてる.

次は,Zoteroあたりを試してみる.

2013年7月14日日曜日

Firefox OS for emulator をビルド

Firefox OS をビルドしてみた.エミュレータ用にだけど.Firefox OS を動作させられる端末を持ってないので,今回はエミュレータ向けにビルドした.環境は以下の通り.

  • VMware Player 5.0.2 build-1031769
  • Ubuntu 13.04
  • mem: 8 GB

ソースの取得

git でレポジトリを取ってくる.
ubuntu:m-sato% git clone git://github.com/mozilla-b2g/B2G.git

ビルドする端末の選択

以下のコマンドを実行すると,構成できる端末の一覧が表示される.
./config.sh
今回は,エミュレータ用に構成する.
./config.sh emulator
構成が 終わったら,ビルドの用意をする.Ubuntu 13.04 だと,GCCのバージョンが4.7になっている.Firefox OS は4.6で作られているので,ビルドする前に環境変数を指定する.
export CC=gc-4.6
export GXX=g++-4.6

ビルド

以下のコマンドでビルドする.
./build.sh
以下,エラーへの対処.

  • /usr/include/zconf.h が無い!と怒られる.以下で対応した.
    • % sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/include/
  • /usr/bin/ld: cannot find -lX11 とか言われた.
    • % sudo apt-get install libx11-dev:i386
  • libGL.so のシンボリックリンクが無い?
    • % sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/x86_64-linux-gnu/mesa/libGL.so
    • stackoverflowのここを参考にする.(正直,最後のtarballの展開が何をやってるのか分かってない.)

ミュレータの起動

ビルドに成功したら,エミュレータを起動しよう!と言われる.ので,起動する.
./run-emulator.sh
もっさりしたエミュレータが起動する.

2013年7月10日水曜日

SDカードへのRAWアクセスの失敗

Android ICS のイメージをSDカードに書き込もうとしたら失敗した.

やりたかったのは,ここから取ってきたAndroid ICS 4.0.3 for ODROID-7 をSDカードに書き込むこと.ODROID-7は,Android開発者向け端末で,SDカードから起動する.このため,SDカードにAndroidのイメージを書き込めば,簡単に端末のOSを入れ替えられる.

そこで,Windows 7 マシンにUSB SDカードリーダ経由(これ)でmicro SDカードにAndroid ICS イメージを書き込む.書き込みには,上記リンクから取ってきたzipに格納されていた書き込み用のツールを使った.解凍して得られたファイル(odroid7.odt, ODROID_A_TF_Burner.exe)のうち,ODROID_A_TF_Burner.exeを起動したら,ドライブを選択して,書き込みできる.

ここで困ったのは,書き込もうとすると,「Cannot write image file.」とメッセージが表示されて書き込めなかったこと.調べると,どうも,USB SDカードリーダには,SDカードへのRAWアクセスができないものがあるらしい(同じく困ってる人).

しょうがないので,SDカードリーダが筐体に直接収まっているマシンにイメージを持ってきて,再度書き込みを試すと,書き込みに成功した.書き込み後,ODROID-7にSDカードを挿入して電源を入れると,Android lICSが起動した.

2013年7月2日火曜日

Xenのゲスト起動時にHAP (EPT/RVI) を無効にして起動する.

Shadow Page Table を使った実験をしたいのに,EPTが有効な状態で起動して困ったのでメモ.

/etc/xen/domain の中に,hap = 0 を追記して起動する.
Xen の起動時に設定するとか見た気がするけど,そんなことないかも.少なくとも私の環境では不可能だった.

2013年6月11日火曜日

ESORICS 2013 accepted papersが発表されました.


Accepted Papers

ESORICS 2013 の Accepted Papers が発表されました.日本人で採録されたのは,NEC古川さんの比較可能な暗号についての論文のみのようです.素晴しいですね.

2013年6月4日火曜日

neobundle.vimでプラグインを遅延ロード

忘れそうなので,メモ.Shougoさんのスライドからの引用です.

NeoBundleLazy 'RipRip/clang_complete',
Autocmd FileType cpp
\ NeoBundleSource clang_complete
NeoBundleLazyで指定したプラグインは,Vimの起動時には,読み込まれない.ただ,読み込まれないと困るので,Autocmdでファイルタイプがcppのときだけ,NeoBundleSourceコマンドで読み込む.

2013年5月31日金曜日

現在開いているバッファの親フォルダを開く

Windows限定です.


,cd などとタイプして使います.エクスプローラーは,使い方によっては,それなりに便利です.

Vimで括弧付きの列挙を入力する

ここを参照すると,列挙自体は非常に簡単.これを使って,
(1) ...
のような列挙を入力する.

以下を.vimrcに追記する.

:call PutEnumList(4) などとして使う.

2013年4月15日月曜日

Wordで文章の読みやすさをチェック

Wordはスペルチェックしてくれるだけじゃない。英語の読みやすさまでチェックしてくれる。研究をしてると、いずれ英語で論文を書くことになると思うが、Wordはとても頼れるツールなので、ぜひ活用していくべき(ただし、あくまで「普通」の英語を書くことを想定したチェックなので、「論文的」英語を書く際には、鵜呑みにしてはいけない)。

詳細はMicrosoftが説明してくれているので、省略する。

上記リンクを参考にWordを設定したら、Word上で英語で文章を書き、F7を押す。すると、スペルチェックや英語の文法的に間違っている場所を探して、更に改善案まで出してくれる。

これだけでもかなり優秀だが、上記リンクであるように「文書の読みやすさをチェックする」にチェックを入れておくと、以下のようなウィンドウが表示される。


これらの評価値は、英語の文章を書くうえで参考にすべき基準の1つになる。Flesch Reading Ease や Flesch-Kincaid Grade Level は下記リンクを参照のこと。
本当は、LinuxでWord相当のことができるツールがありそうなのだが、私はまだ探せていない。今度探してみよう。

2013年4月14日日曜日

Glendaの画像

すごかったので紹介。
ここからとってきた。http://glenda.cat-v.org/gallery/

Big ASCII art Glenda by Jack Johnson (apparently courtesy of img2txt.php):
                 ::iiii;;
                 ii..;;;;ii
                 ii;;iiLLii;;
       ;;tttt;;  ..tt..GGGGii;;
     ..ii....iiii  ;;iiiiEEffii..
     ;;;;..ff;;;;tt..ii..ffKKtttt
       ii..ffEELL;;tt;;jjttLLttiiiiiiiiiiii..
       ;;ii..LLEELL;;jjtt,,            ..;;ttii
         ;;ii..iiKKDDii                      ..tt..
           ;;ii..ttff..                        ;;tt..
             ::iiii..                          ..;;ii
                 tt                              ..ttii
               ::;;                                ;;tt
               ;;..                                ..jj..
               ;;;;                                iijj;;
               ..ii                    ,,..      ..GGttii
                 ii                    LL;;        ..ttii
                 ii..                  ..      ;;....tt;;
                 ..ii                      ..ff;;ff;;tt..
                   ii                      ttLLGGDDtttt
                   ii..                    ;;ffffff;;tt
                   ;;;;                    ..tt;;;;;;tt
                   ;;;;                      ;;ii,,iiii
                   ii..                        ....iiii
                   ii..                            iiii
                   ii..                            iiii
                   ii..                            tt;;
                 iiLL..                          ..tt..
               ..ffttii                          ::ii
               ;;ii;;tt,,                      ..tt..
               ..ttttjjGGii                ..ii;;tt
                 ..iittiitttt..      ;;tt....tt..ii
                           ;;ttttii;;..ii::  ;;ttii
                                   ..iiiiiiiiii..
Small ‘hand-drwawn’ Glenda by ems:
  (\(\
  ¸". ..
  (  . .)
  |   ° ¡
  ¿     ;
 c?".UJ"
And bigger one by andy753421 (with two very minor edits by uriel):
      __
     (  \
 __   \  '\
(  "-_ \ .-'----._
 '-_  "v"         "-
    "Y'             ".
     |                |
     |        o     o |
     |          .<>.  |
      \         "Ll"  |
       |             .'
       |             |
       (             /
      /'\         . \
      "--^--.__,\_)-'

2013年4月3日水曜日

Debian で getty[XXX]: /dev/hvc0: No such file of directory というログを出ないようにする

VM (Debian Squeeze (6.0.7) on Xen (4.2.0)) な環境でのこと.
/etc/ で grep hvc したら inittab がヒットしたので,/etc/inittab を修正して,以下の行をコメントアウトする.

co:2345:respawn:/sbin/getty hvc0 9600 linux

再起動後,警告は出なくなった.VMM or Dom0 側で対処できないかなぁ.

追記(2013/04/03 11:09):l
下記Webサイトにあるように /dev/hvc0 を作れば良いのか?

xenの仮想コンソール

2013年3月7日木曜日

ファイル内の関数定義っぽいものを抜き出して表示

車輪の再発明な感が強いけど,メモ.本気でやりたい人はctagsとかsilentbob使えば良い.やりたいのは,ちょっとした工夫で割と便利にすること.

エイリアスの定義

以下のエイリアスを定義.Cしか考えてないけど,大体の言語に応用が効くと思う.LispやRubyとかだとエイリアス組むまでもないが.OCamlだと難しそう.
alias listfuncdefs='grep -E "(void|int|char|short|long) \w+\(.*\)"'

解説

「void function_name(void) 」なパターンだけを抽出する正規表現.行数とかを表示したい場合は,「cat -n」とかを噛ませると良いかも.

使い方

「listfuncdefs core.c」でcore.c内で定義されている関数の一覧が取得できる.精度は低い.

2013年3月2日土曜日

sigos124感想

どの発表に関しての感想とかではなく、VMの話をするとき、特にXenやKVMみたいな、VMを複数動かすようなVMMを使う場合は、VM数を増やしたときのオーバヘッドを最小化するような方法をどうやって実現するかが課題かなと感じた。

あと、某発表はOSとかシステムソフトウェア関係なかった。ブラウザをシステムソフトウェアと考えてもいい時代かもしれないけど。そしたら棲み分けが問題になるような気もする。ブラウザの研究は、どこの研究会?

2013年2月17日日曜日

ローマ字を日本語の五十音順にソート

日本語でソートするのは面倒(?)でローマ字でソートしたいけど標準のsortだとアルファベティカルに並べてしまう.ということで,ローマ字をスコア化するスクリプトを書いた.既に誰かやってるのかな?てきとーに探しても見つからなかったので作った.

特徴

  • 短い?
  • 遅い
  • 改良しやすい
  • ローマ字にしか使えない
ということで,誰かもっと良いのがあったら教えてください.もしくは,改良しましたとかあったら報告ください.

コード

スコア算出用のテーブルの用意

母音をあ~おで1~5,子音をあ行から順に+5ずつ増加.これで1~50までのスコアを作る.

ローマ字による文字列をスコア化

正規表現でマッチさせます.つまり,遅い.解説も何もないので,下記コードを見てください.
CalculateScoreは1音節分のスコアの計算,ConvertNameToDigitsは1音節ずつマッチさせた結果を連結します.ConvertNameToDigitsで得た結果をリストに格納してsortに渡せば,ローマ字でソートしてくれます.ConvertNameToDigitsの結果をキーにした連想配列を作って,keysでkeyだけ取ってきてソートした順に連想配列のvalueを取るのが普通の使い方かな?
正規表現で音節を取ってくるところが気に入ってる.

使い方

  • ConvertNameToDigits("sato"); みたいに使います.結果は,文字列で1120 (=(10+1)+(15+5))です.

2013年2月3日日曜日

sysenter命令実行時にEIPに格納されるアドレス


  • 32bit
    • ia32_sysenter_eip msr
  • 64bit
    • ia32_lstar msr
ia32_lstar msrには、カノニカルアドレスが格納されている必要がある。msrの書き込みと読み込みは、特権レベル0またはリアルモードで実行する。以下の場合は、一般保護例外が発生する。

  • 特権レベルが0でない
  • ecxが予約された値または無効な値
  • If the value in EDX:EAX sets bits that are reserved in the MSR specified by ECX.(どう翻訳すれば良いのか。)
  • msrへの代入元レジスタのアドレスがカノニカルでなく、かつ、ecxが以下を示す値を格納している場合
    • ia32_ds_area
    • ia32_fs_base
    • ia32_gs_base
    • ia32_kernel_gs_base
    • ia32_lstar
    • ia32_sysenter_eip
    • ia32_sysenter_esp
Linuxだと、wrmsrやrdmsr命令に関しては、マクロが定義されている(LXR)。wrmsr_safeなども参考になる。

2013年1月31日木曜日

latex2rtfおすすめ

TeXで書いてたのに,Wordで出せとか言われること,よくあると思います.ありますよね.イライラします.

latex2rtf を使いましょう.大体解決します.

latex2rtf

素晴しい.Linux, FreeBSD, Windows, Mac に対応しているようです.大勝利ですね.細かいTeXのコマンドは使えないようですが,問題ないでしょう.一旦 rtf に変換して,Word なり何なりで細かい修正をすれば良いのです.

注:TeXで書いた原稿に,Wordの提供する英語の修正機能を使いたかっただけです.Wordは出来る子です.

2013年1月26日土曜日

makeのログをsyslogに渡す

make したときにエラーが出ても、メッセージが上方に流れてしまって、エラーの原因が分からなくなることがあります。私だけかも知れませんが。

そこで、対処として、make > ./make.log 2>&1 のようにすれば、カレントディレクトリのmake.logというファイルにメッセージがリダイレクトされます。後からmake.logを見れば、makeの結果が分かるわけです。

ただ、せっかくログ出力用のツールがあるので、これを使います。syslogです。

syslog へのログの転送

syslogへのログの転送にはloggerを使います。また、makeに関するログだけ別のファイルに出力した場合は、syslog.confを修正する必要があります。以下のコマンドで、syslogに向けてログを転送できます。

make 2>&1 | logger -p local3.info -s -t make

2>&1: stderrをstdoutに渡します。パイプへstderrを渡すには、これが一番スマートなやり方だと思います。
-p: ファシリティとプライオリティを指定します。
-s: stderrに出力します。
-t: タグを指定します。

syslog.confの修正

syslog.confを以下のように修正すれば、local3ファシリティのinfoプライオリティのログだけを分けられます。(>>でアペンドすることで正しく動作するかは怪しい。追記する行より上に !ppp とあると、pppからのログに関するポリシと見なされます。行頭に!が付いている行がある場合、その行よりも上にポリシを追加すべきです。)

% sudo echo "local3.info    /var/log/make.log" >> /etc/syslog.conf

Debian Squeezeなど、最近のディストリビューションでは、セキュリティの観点から、暗号化して計算機外部へ転送できるので、rsyslogを使うことが多いです。この場合、/etc/rsyslog.confに上記のポリシを追記してください。

多分、他に良い方法があるんでしょうね。makeにそれらしいオプションがあるとか?

Google アカウントのパスワード入力失敗時に表示される情報の差異

Google アカウントでログインしようとしたときに、間違ったパスワードを入力してしまいました。このとき、こんな警告が出ます。

これは問題ない。あたりまえですね。しかし、下の場合はどうでしょうか?

実は、ひとつ目の画像は、適当なパスワードを入力した場合に表示されるメッセージです。ふたつ目の画像は、以前使っていたパスワードを入力した場合です。

この表示の違いは、パスワードを忘れた正規のユーザにとってはありがたいものです。しかし、不正にログインしようとしている人たちに有利な情報を与えていないでしょうか?パスワードの変更がかなり前だった場合には、そのアカウントは頻繁にパスワードを変更していないことになります。つまり、長期的に多くのパスワードを与え続けやすいということです。頻繁にパスワードが変わるなら、不正にログインする側もあきらめるかも知れません。しかし、パスワードが長期的に変更されないアカウントに対しては、より積極的に不正なログインに臨むかも知れません。

また、以前使っていたパスワードとマッチしたら表示を変更するということは、不正にログインを試みようとした人に対して、有効なパスワードの情報を与えることになります。つまり、Googleは、ひとつのアカウントにつき、複数のパスワードを保持しているといえます。

本当にこのままで良いのか疑問です。利便性の向上と安全性の確保はトレードオフの関係にあると思いますが、パスワードに関してここまでの利便性が必要なのか疑問があります。また、2段階認証に取り組んでいるサービスにしては、そもそものパスワードの扱いに問題があるのではないかなとも。

asmregparmとは

 Linux 2.6.32 のビルドに失敗した。そのときに気になったasmregparmを調べたので報告。

ソースコードの取得とビルド

% git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux
% cd linux
% git checkout v2.6.32
% make oldconfig
% make menuconfig
% make
ここで失敗。

エラーメッセージを見ると、syscall_trace_leave関数の定義が違うとある(エラーメッセージは残してないので、覚えてる範囲で書く)。googleさんに聞くと、asm/x86/include/asm/ptrace.h の中の syscall_trace_leaveの定義に、asmregparm 修飾子が足りないとのこと[1]

このパッチを参考にコードを修正したところ、この問題は解決した。



asmregparmとは

で、asmregparm とは何か?答えは[2]にあります。ソースを探すと、arch/x86/include/asm/linkage.h の中に以下の定義があった。

#define asmregparm __attribute__((regparm(3)))

これは、型宣言時にregparm属性を付与する。__attribute__については、Unixwiz.netの記事[3]を参照のこと。regparm は、関数の引数をスタックではなく、eax, edx, および ecx レジスタに格納して渡すことを意味する。引数の 3 はレジスタに格納する変数の数。3 なら、第3引数まではレジスタに格納。詳細は、GNU の GCC Document [2] を参照。

参考:
[1] Patchwork x86: fix ptrace.o compile error, https://patchwork.kernel.org/patch/1301031/
[2] 5.24 Declaring Attributes of Functions, http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html
[3] Unixwiz.net - Software Consulting Central, Using GNU C __attribute__, http://unixwiz.net/techtips/gnu-c-attributes.html

2013年1月24日木曜日

標準エラー出力をパイプに渡す

あたりまえだけど,以下の方法で可能
% command1 2>&1 | command2
まず,最初に2>&1で標準エラー出力を標準出力に渡す.これで標準出力に標準出力と標準エラー出力がまとまったので,まとまった標準出力をパイプへ渡す.
参考:how do I pipe STDERR?

syslogd on FreeBSD (シングルユーザモード)がまともに動かない

FreeBSD でシングルユーザモードになってからsyslogdを起動すると,rootで入力したコマンドが全部ロギングされる.まるでキーロガーみたい.そして他のプログラムからのsyslog関数によるログを受け付けない.

シングルユーザモードへの移行

FreeBSD 9.0.0-RELEASEで以下の手順によりシングルユーザモードになる.
% shutdown now

 syslogd の起動とログの確認

# /etc/rc.d/syslogd start 
# cd /var/log
# less syslog
syslogd のポリシには,「*.* /var/log/syslog」 と書いている./var/log/syslog の内容は以下の通りだった.
Jan 24 01:01:31 freebsd-hvm kernel: Starting syslogd.
Jan 24 01:01:31 freebsd-hvm kernel: #
Jan 24 01:01:32 freebsd-hvm kernel: le
Jan 24 01:01:32 freebsd-hvm kernel: s
Jan 24 01:01:32 freebsd-hvm kernel: s
Jan 24 01:01:33 freebsd-hvm kernel: s
Jan 24 01:01:33 freebsd-hvm kernel: y
Jan 24 01:01:33 freebsd-hvm kernel: sl
Jan 24 01:01:33 freebsd-hvm kernel: o
Jan 24 01:01:33 freebsd-hvm kernel: g
Jan 24 01:01:33 freebsd-hvm kernel:
ポリシが悪いのか?キーボード操作がロギングされるのはどういう状態なんだろうか.何かのプログラムがデバッグモードで動いてるのか?
ファシリティが「kernel」になってるのも気になる.

2013年1月23日水曜日

64bitモードにおけるスタック操作

Intel® 64 and IA-32 Architectures Software Developer’s Manual の Section 7.3.1.5 において,64bitモードにおけるスタック操作について説明している.
困ったことに,pushad や popad は使えないようだ.
PUSHA, PUSHAD, POPA, and POPAD are not supported.

LKMで処理を挟み込む前に汎用レジスタを退避させたい.とりあえずの対処として,makeした後に生成される *.o を objdump -d で逆アセンブルして,使われるレジスタを見つけた.その後,使われているレジスタを push/pop で退避させた.

参考:Intel® 64 and IA-32 Architectures Software Developer Manuals

spell

Vim ではコマンド :set spell でスペルチェックができる.
  • :set spell でスペルチェックを有効化
  • :set nospell でスペルチェックを無効化
  • 単語の上でzgとタイプすると,カーソルの下にある単語を辞書に登録(zgのgはgood)
  • 単語の上でzwとタイプすると,カーソルの下にある単語を間違った単語として辞書に登録(zwのwはwrong)
これくらい使えれば大丈夫では.

http://vimdoc.sourceforge.net/htmldoc/spell.html

BibTeX形式への変換ツール

BibTeXのエントリをいちいち書くのが面倒だと感じた.スクリプトを書こうとしたけど,そんなの誰かやってるだろと思い,調べた結果,当然のごとく既にあった.

BibTeX形式への変換ツール(インポート) 

が,ざっと眺めると,IPSJやIEICEの形式に対応したものは無い様子.今度,暇な時に作ろう.
しかし,文献の引用形式が分野ごとに違うのは非効率なような.それなりの理由があるのかも分からないが.

2013年1月14日月曜日

はじめに

今までtumblrにいくつかブログを書いていましたが、どうせ書くなら、広く公開した方が良いと思いました。これからは、bloggerにポストします。

地方国立大学の博士後期課程の学生です。情報工学、特に、システムセキュリティ、仮想化技術の応用が専門です。ログの改ざん防止がこれまでの研究テーマです。

研究やってたり論文を書いたりして思ったことや、仮想化関係で調査したことをまとめることになります。 同じような分野に興味のある人や似たような環境に居る人の役に立つような情報を提供できればと考えています。
 
興味のあるもの/こと:
  • 仮想化技術
    • 特にXenが好き
    • 最近はKVMも
    • 日本人ならbitvisorに興味を持つべきか
  • OS
    • Linux
      • Debianがメイン
    • 時々FreeBSD
    • Vimがまともに動けば何でも良い
    • Windowsは良くわからないけど、とても便利だとは思う
  • Vim 
    • 別にemacsが嫌いなわけではない
    • 入力モードを分けることで簡潔な操作体系を提供してると思う
    • unite.vim, neocomplcache, vimfiler など
  • キーボード
    • HHKB (PD-KB02), HHKB Lite 2
    • どっちもUS配列
    • Escキーの配置が良い
    • マイクロソフトのキーボードなら大体満足
  • マウス 
    • マイクロソフトのマウスなら大体満足
    • 今まで買ったマウスのうち、6/8がマイクロソフト製
  • その他 
    • SKKFEPは素晴しい
    • 読書
      • 森博嗣
      • 西尾維新
    • 音楽
      • 菅野よう子
      • Liquid Tension Experiment