2012年7月25日水曜日

HDDの交換

自宅のメインPC(Core2QUAD, Windows7 64bit)の動きがどうも怪しく、昨年末にHDDに2セクタほど物理障害が発生していることに気づきました。(NTFSの強力なリカバー機能できづかなかった)その後、なんども修復(chkdsk)を試してみてるんですが、どうしても消えてくれません。これは再フォーマットしかないとあきらめて、ついに新しいHDDをかってきました。(しばらく昨年のタイ洪水のおかげでHDD値上がりしてたのが、少し落ち着いてきた)


右側が元々のWD500GB、左側が新しいSG1TBです。裏面は以下のとおり。


ちょっと写真の向きの変更方法がわからないんですが、上が新しいSGです。すっきりしてますね~

PS:
なんかSGは動作音(ヘッドを休めるときと、動かし始めの音?)が大きいです。元のWDは一部のセクタ破壊が起きただけなんで再フォーマットすれば使えるはず・・・しばらく保管しといたほうがいいな。

2012年7月22日日曜日

Android開発環境の更新・・・またトラブル

Androidの開発環境、ADTがr19→r20になったようです。ネットで調べてみると、新しい機能が付加されたようで、r20はまた人柱かとのうわさ。(AndroidはGoogleが主催してるせいもあって、OpenSourceのかおりがプンプンなんですが、安定板と開発版のリリースは分けて欲しい)
さて更新しようとするとまたトラブルです。なんかSDK本体はr20になったようなんですが、eclipse本体の認識はr18のまま。(r19の更新は見逃したらしいです。r18を4月に更新したんですが、そのときもさんざんトラぶったのに)いくら頑張っても、DLサイトからおとしてくるスクリプト実行でエラーがでてきます。
あきらめてeclipseの再インストールから始めました。(SDK自体はそのまま使えるので、かなり楽です)無事、ADT r20が設定できました。今度は日本語化するのやめました。(これが原因かはわからないけど、もういいや)

2012年6月23日土曜日

仮想マシンのVT技術が与える影響について

Intel VTっていう仮想化支援技術があります。昔から仮想マシンを使っていたんで興味はあったんですが、性能差がどれくらいでるんだろうと気になっていました。しかし調べてみるとVTが実装されたコアはNehalemからで自分とこの現状のメインマシンCore2あたりではダメな模様。(Corei5のノートPCならあるが・・・)
ぐぐってみたらベンチマークのせて比較している人を発見。それもベンチマークソフトをホストOSの、VT有効なゲストOS、VT無効のゲストOSの3種で比較してらっしゃる。結論だけいうと、100%、101%、50%な感じ。VT有効なゲストOSの方が若干速いのはどうよというところもありますが、数値的には誤差レベルです。これでVT有効、無効の明確な差がわかります。(メインマシンの石変えたいな・・・・)
ところでこのVT技術って、4種類に分類されていてIOの仮想化支援なんてものあるそうですね。ちょっと気になります。

2012年6月21日木曜日

ログ関数(可変長引数)

ちょいと汎用のログ関数(ログするデータを可変長にする)が欲しくなったので作ってみた。昔からよくやる手が、文字列バッファにsprintfでログ内容をその場その場で作成し、文字列としてロギングする方法だけど、どうみてもこれスマートじゃないよね。というわけで可変長引数を使ってみた。

簡単な実装例を示す。


FILE* glb::logFile;

void glb::logOpen( const char* filename )
{
 logFile = fopen( filename, "w" );
}

void glb::logClose( )
{
 if ( logFile != NULL )
   fclose( logFile );
}

void glb::logging( const char* format, ... )
{
 va_list argp;
 va_start( argp, format );
 vfprintf( logFile, format, argp );
 fprintf( logFile, "\n" );
 va_end( argp );
}

printfみたいにformatを入れないといけないのが難点だけど、そのおかげで文字データだろうが、整数だろうが浮動小数点だろうが自由にログできる。(format使うおかげで、csv形式にも簡単になるしね)

 glb::logOpen( "log.log" );

 glb::logging( "%s", "1st" );
 glb::logging( " %s, %s", "2nd", "3rd" );
 glb::logging( "%f", 3.0 );

 glb::logClose( );

2012年4月29日日曜日

セキュリティについて:DEP, ASLR

コンピュータへのHackingに対抗するための技術としてDEP(Data Execution Prevention:データ実行防止)、ASLR( Address space layout randomization:アドレス空間配置のランダム化)というのをあるのを知りました。結構昔からある技術でした。wikipediaでも調べればのってますが、概要をメモしときます。昔からよく行われるHackingの手法に「バッファオーバーフロー攻撃」というのがありますが、どちらもそれに対抗するものです。

・DEP
「バッファオーバーフロー攻撃」はデータをバッファのサイズ以上に書き込んで、その時意図的に自分の実行したいプログラムをそのデータ列にいれて、そこを実行させようとします。そこでメモリ管理テーブルにNXビットというのを設けて、データエリアとプログラムエリアを判別できるようにしてやろうということです。バッファオーバーフローではデータエリアにデータが書き込まれるはずなので、そこを実行しようとしたらOS側で検知して、中止します。windows XP SP2以降のwindowsに実装さrているそうです。(Linuxにはなし)
ただこれをすり抜ける技術としてReturn-to-libc攻撃というのが考えられて、さらによりセキュリティをあげるため、以下のASLRが考えられたようです。

・ASLR
バッファオーバーフロー攻撃を成功させるためにはスタック領域やヒープ領域のアドレスがわかっていないとできません。(更にいうとReturn-to-libc攻撃を成功させるためにはlibcのアドレスも必要です)そこで、これらのアドレスを実行時にランダムに配置してやれば攻撃できない(正確には難易度があがる)ということになります。Return-to-libc攻撃がかなり困難になります。windowsはVista以降、Linuxはカーネル2.6.12から、Mac OSXは10.5から一部のライブラリに実装したそうです。
ただこれはOSが32bitの場合、16bitでしかランダム化できないため、力技で攻撃すれば総当りで、最近のCPUなら分単位で突破できる可能性があります。(64bitのOSだと、成功の確率が飛躍的に下がるため、非常にセキュアになるそうです)

2012年4月26日木曜日

Android開発環境が更新

久しぶりにwindows上のAndroid開発環境を更新しようと思い立ちました。ところがeclipseを起動できなくて異常終了してしまいます。ログを見てもよくわからず、諦めて"eclipse -clean"でコマンドプロンプトから直接起動。(知らないうちにJavaの何かが更新されたかな?)これで起動できるといきなりADTがver17以降にあげろと文句言われてしまいました。SDK Managerで更新しようとすると、なぜかplatform-toolsのmvがうまくいかないと言われて、更新ができません。
でもよく考えたらSDK Managerってplatform-tools以下にあるんじゃなかったっけ?それじゃ更新できんだろうと思い、色々調べてみると、eclipseのHelp>Software check(日本語化してしまってるんで、ちょっとうろ覚えです)から更新するといいとありましたが、やっぱり怒られます。試しにplatform-toolsは更新しないようにチェックを外してからやると、先のダイアログで勝手に含まれてしまうようなメッセージがでましたが、無事できたようです。それにしてもeclipseの更新は時間がかかります。なんでこうなのか・・・

ちなみにMacだと特に問題は起こりませんでした。windows特有の問題なんだろうな〜(googleさん、ほとんどLinuxで開発してるみたいで、windowsへのポーティングにはよく問題がおきます)

2012年4月6日金曜日

enghelperをインストール

ここのところruby環境をubuntu11.10で整えるのに頑張っていましたが、それもenghelperを動かしてみたかったからです。これは英次郎のデータをもとに加工して、辞書ツールや、英文をいれると「適度に」日本語のルビをふってくれるものです。(この「適度」というのがポイントです。パラメータで自分の実力にあわせてチューニングできます)
ただ先にも書きましたが、ubuntu等のディストリビューションではruby-1.8が主流で、まだまだ1.9は入っていません。しかたなくrvm(Ruby Version Manager)をインストールしてruby-1.9.2をインストールしようとしましたが、従来のrubyと環境がうまく整合させるのに苦労しました。(これもenghelperがruby-1.9を前提に作ってあったためです)さらにenghelperは動作に、nokogiriとengtaggerをrubyのライブラリとして要求しており、これのインストールにも苦労しました。通常、gemを使えばそのままライブラリをインストールできるはずでした。まずgemを使うのに苦労しました。最初、どうもバージョンが古いと言われたので、以下を実行しました。

$ sudo gem update --system

しかしこれやろうとするとubuntuのシステムとぶつかる恐れがあるので推奨しない、apt-getを使えと言われました。しかたなく 以下を実行。

  sudo apt-get install rubygems

これで最新のバージョンになり、gem installができるようになりました。(それでも最新のgemよりは古いんだろうな)これでnokogiriとengtaggerがインストールできるようになりました。
nokogiriのインストール

sudo apt-get isntall libopenssl-ruby
 sudo apt-get install libopenssl-ruby
 sudo apt-get install libxslt-dev
 sudo apt-get install libxml2-dev
 sudo gem install nokogiri
nokogiri本体は、gem installでOK。動作に必要なライブラリがいくつかあり、足りないものを事前にインストールしておく。

engtaggerのインストール

sudo gem install engtagger

ところでenghelperですが、どうもDLした内容と説明があっていません。説明に書いてあるスクリプトが見つかりません。しばらく悩んでいましたが、どうも3月末から4月にかけて更新が2,3回行われたようです。現時点で最新のenghelper-0.5.7をDLしてきて内容が説明と同じものなのを確認できました。
これで辞書ツールを動かすことができました。
さすがに元のデータが用語数多い英次郎です。例題が大量にでてきます。(ただその内容については、賛否両論あるので自己責任で)
次に肝心のルビ振りツールですがうまく動きません。apacheのerror.logを見ると、engtaggerのロード(require)でロードできないとエラーがでています。engtagger, nokogiriともどうもrequire(Rubyの文法でライブラリのロードです)でエラーがでます。
> require 'engtagger'
LoadError: no such file to load -- engtagger
from /usr/share/ruby-rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

gemできちんとインストールしたはずだが、場所を確認する。
$ gem which engtagger
エラーがでる?入ってないのか?
$ sudo gem which engtagger
/var/lib/gems/1.8/gems/engtagger-0.1.1/lib/engtagger.rb
よくわかりませんが、通常ユーザとrootで環境が違うようです。ただこの場所はどうみてもrvmが入っている/usr/share/ruby-rvm以下ではないのでまずい感じです。(rubygemsがubuntu標準なのでこの位置に入れられてしまうか?)

さらにnokogiriも調べてみます。こっちはgem which でどうしても見つかりませんが、偶然以下で見つけました。
/var/lib/gems/1.9.1/gems/nokogiri-1.5.2
どうみても場所がばらばらです。

しかたなく手作業で以下の場所にコピーしてしまいます。(irbで $LOAD_PATHを表示させてどこからライブラリを読んでいるかを調べておきました)
/usr/share/ruby-rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1

結局コピーしたのは以下のものです。

-rw-r--r-- 1 root root 25037 2012-04-06 18:41 engtagger.rb
-rw-r--r-- 1 root root  3877 2012-04-06 18:45 nokogiri.rb
drwxr-xr-x 2 root root  4096 2012-04-06 18:42 engtagger
drwxr-xr-x 7 root root  4096 2012-04-06 18:46 nokogiri
drwxr-xr-x 3 root root  4096 2012-04-06 18:46 xsd

よくわかりませんが、.rbがディレクトリ以下のものもrequireしていたんで一緒にコピーしておきました。これで無事enghelperが動作してくれました。

きちんとルビをふってくれてます。(^^)v