2012年12月31日月曜日

2012年末に思うこと

大晦日に「グーグル ネット覇者の真実」を読んでて、つい4年前に買ったGoogleの技術に関する本も読み返してます。

グーグル ネット覇者の真実

なんというかこの10年ちょっとの間に、ネットの変化(あえて進化とはいいません)のめまぐるしさを思い返してました。それと同時に考えたのが、ここ2,3年の企業や個人へのネット攻撃です。
世の中のセキュリティソフトにも色々ありますが、やっぱりproxyが一番確実だろうと思います。まだ一般的な個人ユーザにそれを提供する会社はないですが、GoogleとかAmazonがその気になったりするんじゃないかと考えてしまいました。
Googleは最良の検索サービスを提供するんだから、さらに一歩進んで「安心」まで提供を始めたりして。。。(それがさらに検索の件数を増やすだろうから)そしてAmazonは自身が販売しているKindle FireのWebがAmazonのクラウド前提のサービスらしいから、Amazon会員ならセキュリティを無料で提供、なんてサービスやりかねんなという気がしています。(その分、子供も安全にwebを使えるとか宣伝文句をうたって)

どちらも必要なコンピュータパワーを考えると気が遠くなりますが、どちらの会社もそれを可能にする基盤システム(OS、ファイルシステム含めて)を自前で揃えてます。来年末くらいにはやりそうでこわい。

ところでファイルシステムで考えたのが、これだけ必要なデータが増えると、ファイルシステムは従来のファイル名によるデータ取得のような(windowsでいうとFATテーブル)ではまかないきれなくなり、DBになるんでしょうね。(昔、windows XPのときに、M$がWinFSとかいうDBでファイルシステムを構築しようとしているという話をきき、当時のPCのパワーでは「無茶だ」と一笑に付しました。実際M$も早々にあきらめましたし。)この状況だと、このデータ量を管理しようと思うと、従来のファイルシステムでは無理ですね。(家庭用のPCでも、もう10年もたない気がする。大体、HDDの容量がTB超えてくるとメンテナンスしないとだんだん使い物にならなくなってくるけど、普通の人にはそんな感覚わからないだろうし。)

linux( Ubuntu ) 古いカーネルの削除

前もどっかでメモした記憶があるんですが、ちょっと困った状態にPCがなり調べてたら、設定やらコマンドが昔と変わってたので、一応メモ。

1.現状
ノートPC(aspire-one)はいろんな実験環境で、windows-XPにUbuntu-11、これにさらにBT5R3をインストールしたという、かなり危ない状態です。BT5R3はUbuntuベースなんで、先に入ってたUbuntu-11と特に問題も起こさず、boot-loaderは同じgrubだったのはよかったんですが、なぜかboot時のメニューリストでUbuntu-11の方が5,6個でてくる状態に・・・

2.調査
こんなときは、grubの設定ファイル(/etc/grub.d/grub.conf)を修正してやれば、と思って「そういえば、現状Ubuntuが2個入ってるけど、どちらのgrub設定で動いてるんだ?」としばし悩み、順当に考えれば、後から入れたBT5R3だろうとそちらで起動。
ところが設定ファイルが見つかりません。/etc/grub.dの下は何かのスクリプトしかない。いつからこんな風になったんだ?しばらく悩んで思い出したのが、そういえばgrubは/boot/grubにあることを。さっそくそこを調べると、何か大量のファイルがあり(以前は設定ファイルと少しだった気が)、grub.confはやはり存在しません。
それらしいのがないか見てみると、grub.cfgというのが見つかりこれだろうと中を見ると、ファイルの最初がなんかスクリプトっぽくて、その後ろにありました、起動時の選択リストのデータが。それで判明したのが、Ubuntu-11の方は何度かカーネル更新してたらしく、古いカーネルが削除されずに残っていて(でも、Ubuntu-11を使っているときはとくに起動時にメニューは増えませんでした)、BT5R3をインストール時に、ご丁寧に調べてくれて、それを全部起動時の選択リストにいれてくれていたことでした。

3.修正
さて現状の状況が把握できました。ということはBT5R3側の/boot/grub/grub.cfgを何とかすればいいんですが、このファイルはread-onlyでファイルの最初に直接編集するな、/usr/sbin/grub-mkconfigを使えとのこと。試しに起動してみると、なにもコマンド入力は要求されず、HDDの状態を自動的に調べて、起動可能なシステムを設定ファイルに列挙するスクリプトのようです。

(1)古いカーネルの削除
ということでまずはUbuntu-11の古いカーネルの削除から始めます。Ubuntu-11でシステムを起動して、以下のコマンドでインストールされているlinux-imageをリストアップします。

dpkg -l | grep linux-image

表示されてくるものは、linux-image-2.6.15-23-386だったり、linux-image-2.6.15-23-genericとかでてきますが、基本注意するのはバージョンの数字のところです。残したい最新のバージョンだけ注意して、古いものを以下のコマンドで削除します。(慎重に作業してください!間違えると、取り返しがつきません。)

sudo apt-get remove --purge linux-image-2.6.15-23-generic


(2)grub設定ファイルの更新
さてこれで古いカーネルは削除できたので、/usr/sbin/grub-mkconfig(当然、sudoつけます)でgrubの設定ファイルを更新してやればいいだろうと、そのままUbuntu-11で実行しましたが、でもここで更新されるgrub設定ファイルはBT5R3のgrubからは見えない位置・・・ ダメじゃん!
今のPCはBT5R3のgrubで起動しているはずなので、BT5R3でシステムを起動しなおして、/usr/sbin/grub-mkconfigを実行しましたが、今度はBT5R3インストール時とは異なり、Ubuntu-11のファイルシステムは調べてくれません。(-"-)
当たり前といえば当たり前の結果に暫く悩み、結局grub.cfgの手動修正を実行、無事起動時にでてくる大量のシステム選択リストはきれいになりました。


PS
その後、別のPCでも同様の問題が発生しました。よくよく調べてみると、ちゃんと以下の様にオプションを与えてあげないとダメでした。(前回は何もオプションなしでやったので、本来grub.cfgに出力される内容を画面に出力していただけで終わっていた)

> /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg

これで異なるディストリビューションのカーネルも調べて、設定ファイルに反映してくれるようになりました。



2012年12月23日日曜日

Nexus7のアプリ開発

Nexus7のアプリ開発用に、eclipseの環境を整備していましたがその後何にもしてませんでした。せめてHelloAndroidくらい動作を確認しようと思い立ち、まずNexus7の設定を見るも、「開発者向けオプション」が見当たらない(;°ロ°) 何これ?こんなんで大丈夫なのかと思ってUSB接続してみるも、やはりデバイスが認識されていません。だいたい、USB接続するとどうしてもドライブと認識されてしまっているから、これじゃダメでしょ。ググってみて、調べて見つけました、なんというかGoogleの遊び心なのか、これくらい自分で調べれる人じゃなきゃこんなオプションを有効にしちゃだめよ、という意味なのか。昔のMicrosoftにもあった、隠し技で開発者向けオプションがでるようになり、USBデバッグモードをOnにできました。

さあこれでいいだろうと思っても、USB接続するとやはりドライブとして認識してしまい、あいかわらずeclipseからデバイスとして表示されません。再度、ググってみるとドライブとして認識するときMTPという通常のドライブ、それとPTPはカメラデバイスとして認識するようで、PTPにしないとだめなようです。ただ、それでもUSB接続するとやはりドライブとして認識されてしまいますが、今度はドライバがエラーが表示されるようになりました。

さらにググって、ASUS(Nexus7の製造メーカね)のNexus7のページをみると、USBドライバをDLできます。これをDLして、Windowsのデバイスマネージャから(ってことはMacはまた難しいかな、なんかこの展開、Galaxy S2のときと同じだな)ドライバの更新を行い、ドライバのエラーがでなくなり、無事eclipseのデバイスで認識できるようになり、HelloAndroidを実行できました。

それぞれの詳細な方法は割愛しますが、なんともあいかわらずハードルが高い・・・

PS.
ところでMac BookでのAndroid開発ですが、あいかわらずGoogle USB Deviceは非対応です。でもGoogleのHPを見てみると、MacやLinuxは自前のDevice driverでいいとのこと(でも前は、2.3の最初のときだけはよかったけど、その後の更新でダメになったけど。。。)。まあ試してみるかとやってみたら、1回目は何か問題がでてきましたが、Nexus7を一度抜いて、eclipseを再起動したらあっさりうまくいきました。安定してくれるといいけど。。。(ちなみに、そのHPにAndroid4.2からのUSBデバッグモードをOnにする隠し技が記載されてました)

PS(その2)
結局、今はWindows、Macとも安定してNexus7上にてデバッグできています。MTPも特にそのままで何も問題が起きません。当初悩んだのがなんだったのか、という状態です。しかし、実機デバッグが安定してできると快適です。なにせPC上のemulatorが起動は遅いわ、動作も遅いわでひどい状態ですから。AndroidをPC上で直接動かしちゃえというプロジェクトも進行しているそうです。

2012年11月27日火曜日

Android開発環境の更新(4.2 Jelly Bean対応)

Nexus7を買ってから、まだアプリを作ってみないうちにAndroidがVersion Upされました。さてまた開発環境の更新ですが、またまたトラブルです。SDK Managerを起動しても、4.2のSDK Platformがリストに表示されてきません。あいかわらず困らせてくれます。
調べてみると、android-sdk-windows\toolsのところで以下のコマンドを実行すると、リポジトリのリストを更新してくれて解決されるらしいです。

> android.bat list sdk


無事、表示されました。(後で気づきましたが、メニューに「reload」がありました)

注意ですが、これやってるときはandroid-sdk-windows以下のファイル操作(更新)が起こるので、コマンドプロンプトやExplorerを閉じろといってきます。

結局、更新は失敗しました。(つд・) なんでこう安定してないんだ、Androidとeclipseのペアは。(まあ、再インストールしてもすぐ済むけどなんかいいかげんにしてほしい。)

googleで調べてみたら、ADTのv21パッケージがありしかもそれがeclipse込みΣ(゜д゜lll) さすがにgoogleもVerUpのたびに問題起きるから、eclipse込みの開発パッケージにしたんかな。(でも、Android以外のパッケージはまた入れなおさないといけないよ(つд・))
ちょっと、今後どうするかもう少し調べてみます。

2012年11月23日金曜日

google クラウドプリンタの設定

家には多数のPCがあり、しかも1階、2階に分かれてたりしますが、プリンタは2階にある1台だけ。そうするとプリンタの共有を当然考えますが、Windows標準のプリンタ共有だとプリンタが接続されているPCの電源は入ってないといけないし、プリンタが古いEPSONのせいか、Windows7とかからだとうまくいかないことがよくありました。
そういえばgoogleさんにクラウドプリントとかいうリモート印刷の機能があったのを思い出し、設定してみました。調べてみると、最新のEPSONやCanon(の複合機)だとプリンタ自体がクラウドプリントの機能を持っているようです。でもうちのは古いEPSON、そうなると接続しているPCにchromeをインストールして、グーグルアカウントを設定、そこからクラウドプリント機能をOnにします。
chrome等のアプリからしかこのクラウドプリント機能は使えませんが、まあほとんど印刷するのは気になったHPの印刷くらいだからこれで充分です。(年賀状とか、特別なのはプリンタが接続されているPCでやりますから)
設定してみたらなかなか快適です。プリンタや、接続されているPCの電源が入ってなくてもgoogleさんのほうにジョブがたまってますし、後から電源いれれば印刷できます。(ただ、とうぜん印刷情報はgoogleのクラウドにいったんは入りますから、情報検索のネタにされてる可能性はあります。仕事用に使うときは、ちょっと注意しないといけないでしょう。)

2012年11月10日土曜日

Back Track試してみました(無線LAN)

無線LANの暗号化でWEP方式は弱いと散々言われてます。数年前の11bしかなかったバッファローの無線LANルーターはWEP(それも6文字だったかな?)しかなく、明らかに簡単に解読ツールで一瞬で調べれたのは知ってたんで、すぐにお蔵入りにしてしまいました。
2,3年前に買ったやつはa/b/gが使えるんですが、DEFAULTが11aがAESで11gがWEP64?よく意味が分からず使っていたんですが、どうも暗号キーのbit長が長いだけのものらしく、どうしたものかと悩んでました。

そこで噂に高いBack Track(今回は最新の 5R3です)を試してみます。しかし本当、使い方が全然わからん\(◎o◎)/! ネットで調べてみても、どこにも詳しい使い方はないので有名なのがわかったくらい。ただ試してみてて、どうも基本はコンソールの文字表示のプログラムがほとんどで、それらのうち関連が高いのをGUIから管理できるツールがいくつかあるという感じのようです。(うちのWindowsノートPCだと最新の1台はXが起動しなかったので、やむなく古いほうで実験)また、無線LANのドライバがかなり厳しい使い方(そりゃ当たり前だよな)をしているせいで、対応しているものが限られる・・・ 運よく古いノートPCは対応してました。しばらく使い方を悩んでいましたが、メニューで、Back Track>Exploitation Tools>Wireless Exploitation Tools>WLAN Exploitation>getrix-wifi-cracker-ng で起動するGUIツールの使い方が若干わかりました。そこからは試行錯誤で試してみましたが、結論からいうとWEP64 簡単に暗号キーが解読できてしまいました。(*_*)

こりゃだめだと考え、無線ルーターの設定をもう一度よく見て、11gの暗号をWEPからAESに変更する方法がわかりすぐに変更、再起動。再度、Back Trackでチャレンジしてみました。前回は5万パケットをログして解読しましたが、さすがにAESは5万パケットをログしても解読できないようです。(あるいは解読プログラムの使い方が悪いだけかも・・・ もう少し試行錯誤してみないと)おかげでスマホやタブレット、ノートPCの無線設定でいくつか11gのWEP64使ってるのがあったんで、再設定です。

家は1階と2階それぞれに無線LANがあり(2階の床下に鉄板が防音用に敷いてあるせいで、電波届かないんですよ)、WEPは両方とも使用禁止にしました。しかし恐ろしい時代になったもんだ。

ツールの詳しい使い方は書くのやめときます。下手すると問題がでそうなツールですから。ただ、今回はパケットをログするため、わざとBack Trackを使ってる横でタブレットでYouTube見たりしてログをキャプチャーしやすいようにしたので5万パケットをすぐにログできましたが、使ってないと全然キャプチャーできません。アタック用のツールもあるんですが、その無線LANルーターが使われてない状態で必要なパケット数を集めるのはかなり厳しいです。


2012/11/24 追記
WPA/TKIPの暗号設定で使っていますが、どうもこれも解析できるようです。ただし、かなり条件がWEPに比べると厳しいです。

1)パケットログにハンドシェイク・パケット(ようは接続開始時のパケット)が必要
2)辞書ファイルが必要(ネットで調べたら、32GBのものが(DLしてみたら11MBしかなかったよ)公開されてました(@_@;) )

1)の条件を満たすために、接続を中断させるツールもBack Trackにはついています。試してみたら、横で見ていたYouTubeが見事に切断されてしまいました。(大抵の設定だと、すぐに自動接続開始しますから、ハンドシェイク・パケットがログできます)ただ問題は辞書ファイルです。今はUSB起動でBack Trackを使っていますから、とてもそんなでかい辞書を入れれません。ちょっと方法を考えないと。
(試してみたんですが、辞書にないキーを使ってるとやっぱり解読できませんでした。まあ当たり前か)

2012年10月27日土曜日

EXCELでタイムライン表示

計算結果のうち、複数のイベントが何秒に発生し、それらの関係をまとめるためによくタイムラインを作ります。それ用の表示プログラムもこれまで何種類も作ってきたんですが、OSが変わったり、windows manager、あるいはミドルウェアが変わったりで同じような機能のものを何回もつくってきた気がします。
ふと思いついたのが、最近のEXCELって機能が増えてきたから、グラフのうちの散布図を使えばできるんでないか?横軸を時間、縦軸はイベントの種類を適当につけてラベルを散布図のマークのところにつけれれば・・・ と思ってぐぐってみたら、結構みんなおんなじこと考えるんですね。いくつもヒットしましたが、microsoftの公式見解では「不可能」とのこと。Σ(゜д゜lll) ええ~~、そんなにはっきりいわれちゃうと、と思ったんですが他にヒットしてみたのを見ると、なんか頑張れば似たようなものができるというのがありました。いくつか調べてみて、何とか思い描くものができました。結構、手順は複雑ですが、一度作れれば後は各イベントの時間をペーストしてやれば、いろんな計算結果をきれいにレポートにまとめれます。
ちょっと長いですが、手順をまとめます。

①まずデータを用意します。下図に示したように、第1列にイベント名称(これをラベルとして散布図に表示したい)、第2列にそのイベントの発生時間、第3列が今回の肝として散布図を描くために各イベントの種類(シーケンスと定義しましたが特にイベントの順番というわけではありません)を定義します。散布図として描くのは図中で選択してあるセルです。


②これで選択してあるエリアで、散布図を描きます。
こんな感じになり、横軸が時間なのはいいですが、肝心のグラフ中のイベントのマークのところにラベルがつきません。ここに手作業で一つずつラベルを定義してやります。

③散布図中のイベントマークのところをマウスで左クリックしてやると、すべてのマークが選択され、各マーク(イベント)のところにシーケンスの値がラベルとして右側(デフォルト位置)に表示されます。
なんとなくイメージに近くなりました。ここで細工を加えます。

④ここでさらに右クリックする等して「データラベルの書式設定」を表示させます。デフォルトでは「ラベルの内容」はY値になっていますが、これを「系列名」にしてやります。


⑤やりたいことは、このラベルのところを第1列で定義した各イベントの名前にしたいのです。ここで一つのマークだけを選択するために、最初のマークをShiftキーを押しながら右クリックしてやります。すると一つだけ選択状態になります。
表示されている各マーク(イベント)の表示がシーケンスという表示に手順④でなっていますが、そのうちの一つだけが選択された状態になりました。

⑥さてここが重要です。この状態で、「=」キーを押してやります。表示上は何も変わりませんが、そこで当該マークのラベルにしたい名前が定義してあるセルを選択します。(下図の例では、「ABC」を選択した結果です)
みごと望みの表示になりました。これを各マークで繰り返し、グラフに表示したいイベント名のセルを定義していきます。ラベルの表示位置はここではデフォルトの「右側」のままですが、手順④のところの「データラベルの書式設定」で上にも下にもできます。

またここが重要なのですが、こういうタイムチャートを描いていると計算結果によってとなりあうイベントの時間が近くてラベルが重なりあって見難くなります。そういう時は各イベントで定義してある「シーケンス」の値を適当に調整して表示位置を上下に変えます。

これで一度できてしまえば、時間の列のところに任意の計算結果をペーストしてやればきれいなタイムチャートの完成です。この様なことをやってくれるadd-inを作ったよというHPもありましたが、ちょっと怖かったので今回は手作業で行いました。

2012年10月14日日曜日

Git入門



これまで仕事ではソースコードの形態管理にSubversionを使ってきました。しかし最近、世の中が分散形態管理システムのGitが評判になってきており、ちょっと試してみようと思いました。しかし、調べてみても一般的なコマンドの説明ばかりで、具体的にGitサーバーをどう設定したらいいのかとかまとめてあるのが見つかりません。この土日でやってみたのをまとめておきます。具体的には以下のような環境です。



自宅で用意したものです。クライアントはもっと種類増やしてもいいんですが、まとめるのが大変なのと、Gitが基本CUIでGUI環境があまりよくない、あと日本語文字コードの扱いに問題があるとのことだったので、UTF-8に統一してあります。


X.Gitのインストール

Ubuntu等のマシンで以下を実行してgitのパッケージをインストールする。
$ yum install git-core (Ubuntuは sudo apt-get install git-core でした)

WindowsではGitoliteがクライアントとしてよさげ。
と思ったら、Eclipseだと標準でGitプラグイン(EGit)が入っており、「インポート」で普通にサーバーを選択できた。
(Gitコマンドはファイル名→右クリックの「チーム」のサブメニューにある)

MacだとXcodeでgitクライアントのCUI版はインストールされるらしいが、GUI付はGitXがいいらしい。
(でもこれは0.7で開発が止まってるように見える。日本語大丈夫だろうか?)
(入ってなかった。ググったらcode.googleにあるよ!)


0. サーバーの設定
基本Ubuntuはクライアント利用が前提であり、最近は特にセキュリティの問題からサーバー関係のプログラム(サービス)は特に自分からインストール・設定してやらないといけません。(Redhatでもかなりまえにtelnetdが外されて(パッケージすらなくなった!)びっくりした)

最初にgit用にアカウントを作ります。リポジトリは基本この下におきます。(管理者権限を付加しておいたほうが後々便利です。設定後はとったほうがいいですが、このあとgitアカウントで設定いろいろしますから)

まずsshをインストールしないといけません。
「ソフトウェアセンター」で入れましょう。(sudo apt-get install sshdだと ないと言われた。名称が少し違うようだ)

ところでデフォルトではsshからrootでログインできてしまいます!(ダメやん、そんなの)
$ sudo vi /etc/ssh/sshd_config

PermitRootLogin no ← noにしておく

$ sudo /etc/init.d/ssh restart

でsshサービスを再起動しましょう。
念のため以下のコマンドでちゃんと起動しているか確認。

$ sudo lsof -nPi:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 3750 root 3r IPv4 16769 0t0 TCP *:22 (LISTEN)
sshd 3750 root 4u IPv6 16771 0t0 TCP *:22 (LISTEN)

さて実際に使うにはssh鍵をサーバー、クライアントの双方に登録してやらないといけません。一番簡単なのはクライアント→サーバにsshでログイン(このとき鍵の生成を聞かれて、登録されます)。再度、サーバーからクライアントにsshでログインしなおす(これで双方のssh鍵が互いに登録されます)
ただ今回はサーバ:Ubuntu、クライアント:Macで試してますが、Mac側が当然のごとくsshだろうがリモート接続は許してくれません。
クライアント(Mac)でssh鍵を生成します。

$ ssh-keygen -t rsa

ここでパスワードを聞かれますが、複数のマシンでパスワードが異なってるとめんどくさいので、いんちきですが「空」でリターンだけ押してやります。2回聞かれますが、それでポスワードが「空」の鍵が生成できます。(せめてすべてのマシンで同じパスワードで設定してやるくらいしたほうがいいんだけど。まあ仕事でやるのとは別なんで)
これでMacのホームで.ssh/id_rsa.pubが生成できますから、これをサーバー側に送ってやり(scpがいいでしょう)、サーバー側のリポジトリを公開するユーザーのホーム/.ssh/authorized_keysにアペンドしてやりましょう。(くれぐれもコピーはしないように!1マシン=1行で登録されてますから、コピーなんてするとほかのマシンの設定が消えてしまいます。なお最初の登録時には.ssh/自体存在しないことがありますが、そのときは自分で作成します)


1.まずgitサーバーのマシンでリポジトリの作成(サーバーのgitアカウントで実行)
gitアカウントのホームに作ります。

$ mkdir project.git
$ cd project.git  ←<リポジトリを作成するディレクトリ>
$ git init ←これ不要かもしれません。クライアントが必要なだけの気もする。

.git/というリポジトリが保存されるディレクトリが作成されるだけなので、同じ階層に共有するリソースを作成する。
ここで注意ですが、ここで生成されるのはgitリポジトリであり、ファイル本体はこのリポジトリ内にあり、素で見てもファイル名なんかは見えません。gitサーバーでもリポジトリ内のファイルがどうなってるかみたいなら、別アカウントでこのリポジトリのクローンを作ってやりましょう。

2.クライアント側の環境設定をする
各クライアント(まずはMacです)で以下のコマンドを実行します。homeディレクトリの.gitconfigというファイルに登録されます。(EclipseではGUIで行いますが、登録内容は同じです)

$ git config --global user.name "Hoge Hoge" ←当該リソースを触った人です
$ git config --global user.email hoge@home.com
$ git config --global core.qutepath false (ファイル名の文字化けを防ぐ)// 別のより新しい記事ではこの記載がない
$ git config --global core.editor "'C:/Program Files/sakura/sakura.exe’ -code=4" (デフォルトのエディタを設定 なければviがデフォルトになる)

3.クライアントのマシンでリポジトリのクローンを作成する。
今回は1.でリポジトリ名をproject.gitとしたので、何となく作業用ファイルを置く場所も「project」にしてしまいました。そのあたりは実際に使うときに変えてください。

$ cd <クローンを作成するディレクトリ>
$ git init ←記憶が明確でないけど必要な気がする
(20131016:結果的には同じですが間違えてました。git initいりません。)
$ mkdir project     // クローンを作成するディレクトリ
$ git clone git@<ホストアドレス>:/home/git/project.git project

これでsshによりgitサーバーからリポジトリのクローンがローカルに作られます。(ただ最初は空っぽですが)サーバーの指定がgitのsshで直接やる一番原始的なコマンドで、本当はhttp, httpsでスマートにやりたいんですが、そのためにはApatch等の設定が大変なので、それはまた今度ということに)
実は今回いろいろ試しながらやってたので、もしかしたらMacやUbuntuではcloneやるまえに、git initする必要があると思います。EclipseだとGUIが勝手にやってしまってるかもしれないんで。cloneする前に、.git/というリポジトリ情報を保存するエリアを作成しておく必要がある気がします。(1.のサーバー側準備でgit initコマンドしてますが、今から調べるとこれ意味なかったような状態になっており、施行錯誤してるときにクライアントで先にgiti initやった記憶があります。)


4.クライアント側で作業をする

さてクローンが無事できたので(最初だと空っぽだけど)、最初のファイルを作ります。

$ vi text.txt

適当にテキストをいれ、これをクライアント側のローカル・リポジトリに追加しましょう。

$ git add text.txt ←最初の1回は当該ファイルを管理対象に追加する指定が必要です
$ git commit ←ローカル・リポジトリへのcommitです。エディタでコメントを求められます。正式にはコミットするファイルをこのあとに引数で与えます。


5.gitサーバのリポジトリにローカルを反映させます。

$ git push origin master

(originってなんだ?ってとこですが、gitサーバーのリポジトリを示しています。一度、cloneコマンドを行った時にアドレスが記録されているのでこれでいいんですが、全部書くと以下のようになります。

$ git push git@<ホストアドレス>:/home/git/project.git master

最後のmasterはブランチ名です。masterは当然デフォルトのやつです。Subversionでいうところのtrunkにあたります。)
2回目以降は単に以下でいけます。それはそれでどこに作用するのかわからないので怖いんですが。

$ git push


6.別のクライアントにローカルリポジトリを作成する

ここからが本番です。別のマシン(今回は別のUbuntuでいきます。Windowsは慣れてからで)にローカルリポジトリを作成します。
まず2.の環境設定をします。わざとユーザー名は変えておきましよう。(Hiroyuki Maeda2)後で誰が変更したのか確認できるようにです。
次に、3.の手順でクローン・リポジトリを作成します。すると今度は3.でcloneを作ったところでリポジトリに追加したtext.txtが作業エリアに登場してきます。


7.別のクライアントでファイルを編集

text.txtに2行目を追加します。それをコミットしてpushします。

$ vi etxt.txt
$ git add text.txt
$ git commit ←ここでコミットログ求められます
$ git push origin master


7.最初のクライアントでgitサーバーのリポジトリを取得

さて2番目のクライアントがファイルを変更しました。1番目のクライアントでそれを取得します。

$ git pull ←必要ならoriginやmasterの情報を付加します
シェルには何やらファイルが変更されたとのメッセージが。
確認すると、確かに2行目が追加されています。

$ git log

これでコミットログを確認すると確かにログが表示されます。


8.コミットログやファイル本体に日本語使うとどうなる?

さて実際に使いこもうと思うと、最初の難関が日本語です。(正確には文字コード)
UbuntuなんかはUTF-8だし、MacはSJIS(と思ったんですがsnow Lepord以降はUTF-8のようでした)、Widnowsは今はUnicode(ほとんどUTF-8)です。

試してみたら、Ubuntu側で日本語でログやらファイルを編集しても、Macでは無事よめちゃいます??自動で文字コード変換してる? ちょっとこれ以上はWindowsも入れてみないとなんともわかりません。


9.Windowsでローカル・リポジトリを作成

さて今度はWindowsです。eclipseがEGitをインストール済みなので、これを使います。importでGitを取り込めますが、サーバ側がsshの設定しかしてないので、プロトロコルは当然sshでいきます。
取り込んでみると、ファイル自体はやはりUTF-8でした。(ただ鍵ファイルの設定がみあたらない。もしかして鍵なしのssHでいってしまったかも)
コミットログのヒストリを見てみると、ちゃんと誰が修正したかもわかります。(このために、ユーザー名を2つのクライアントで変えておきました)なおローカル・リポジトリはEclipseのworkspace以下に各プロジェクトが保存されていますが、当該プロジェクト名フォルダ直下に「.git」フォルダが作られていますので、そこで管理されています。
ところでEclipseだとuser.nameとかどこで管理しているのか?それはPreference → Team → Git → Configurationのところでkeyとvalueの設定をするところがあります。ここにuse.nameとかuser.emailとか設定します。注意するのがcore.autocrlfで、これいつもEclipse起動時にDialogがでて気になりググってみたら、push/pull時に改行コードを自動的にCRLFにしてしまうかどうかという設定でした。当然、falseにしておきます。(おそらくこれはWindows独特の設定だと思います。Windowsだけは改行が昔からCRLFですが、LinuxやMacはLFだけですから。)
あと注意が必要なのが、commitとpush/pullのやりかたです。基本右クリックで表示されるメニュー内のTeamサブメニューでやるんですが、ファイルを選択したときはcommitしかでません。プロジェクトで右クリックするとpush/pullのサブメニューがでてきます。(当たり前といえば、当たり前ですが)



疑問 git pushでローカルのリポジトリがサーバーに送られるが、その時に衝突が起きた場合どうなるのか?

Windows側でファイルを更新、pushしてからMac側でその更新をpullして確認。その後、Ubuntu側で(最新のpullをする前に)独自の修正をしてpushしようとしたらサーバーからrejectされました。
一番いいのは作業する前に

$ git fetch
$ git diff FETCH_HEAD

を行い、自分のローカルリポジトリをサーバー上のものと調べてること。

$ git merge FETCH_HEAD

もしpushしてrejectされるようなら、上記を行い手作業でマージして差分を解消してからpushしなおしになります。(先にpullしてサーバーとローカルリポジトリの同期をしてから、pushしなおさないといけないかもしれません。この方法だと最後にマージのログがヒストリに残りました。)一番簡単なのは、自分の作業用ファイルをどっかにおいておいて、pullして作業環境をサーバとあわせ、さきほど別のところにおいておいたファイルを見ながら修正することでしょうね。

実際にUbuntu側で問題を解決しpushしたあと、Windows側でpullしてhistoryを見てみた画像です。なんか以下にもmergeやったよ、という記録まで残ってます。


最後に日本語の文字コードについて。基本、UTF-8が問題でないようです。ファイル名もUTF-8なら問題ありません。ただところどころ使ってる環境によって日本語がファイル名のログ表示が化けるものがありますが、結果は大丈夫です。(このあたりはまだまだだと感じました)WindowsのGit GUIでも日本語ファイル名の扱いに問題がでるようですし、一番問題がなさそうながどのOSでもEclipseのようです。CUIでやるのが基本のようですが、いまどきそれはつらい。(Git作ったLinusはバリバリのコマンド入力の人らしいし、このあたりはだいぶ時代に遅れています。)



2012年10月12日金曜日

Ubuntu更新エラー

なんか時々、Ubuntuを使っていて更新マネージャーが起動してエラーを起こすことがよくありました。その時は無視してるうちに解消していたのですが、この3,4か月さわってなかったため、今日起動してみたら200個以上のパッケージが更新対象に・・・当然のごとく更新でエラーがでました。
どうしても消えなくて、やむなくググるとありました。

$ sudo apt-get update  (更新データベースのリポジトリ同期です)

$ sudo apt-get upgrade (更新が必要なパッケージの更新作業自体を行います)

昔の記憶だとupdateだけだったと思うんですが、役割が分担されてます。おそらく更新マネージャはGUIでこれら2つのコマンドと同じようなことをしてるんでしょうが、状態ファイルの管理がうまくいかないことがあるんでしょうね。(多人数でプログラム作ってると似たようなことよく経験しました)もう手作業でやったほうがいいかしらん。

注:ただパッケージの種類にもよりますが、再起動が必要なものがあります。そのためGUIの更新マネージャでは最後に「再起動してください」というボタンが表示されますが、CUIでコマンド実行してるとそんなのはできません。念のため、上記2つのコマンド実行後、再起動して更新マネージャで確認するのが確実です。

2012年10月9日火曜日

nexus7とiPad3

家にNexus7がきて1週間くらいでしょうか。iPad3も持ってるんで、使い比べて感じたことなどを。

1. バッテリーのもち
Nexus7が4,325mAh、対してiPad3が11,666mAhと倍以上の差です。そのため、明らかにiPad3の方がもちます。本当に1週間で1回充電すればOKです。(そのかわり充電にはかなり時間がかかります)Nexus7は2,3日で再充電が必要になる感じです。もうちょい持ってくれると嬉しいんだけど。

2. 持ち運びのしやすさ
これはもうNexus7の圧勝です。軽いし(iPad3に比べて、ほぼ半分の重さ)、カバンに入れても邪魔にならないサイズです。昔はノートPCなんて持ち運んでいて、iPadが出た時は感動したものですが、人間欲望には際限がないですね。

Nexus7はせっかく速いCPU(Tegra3)持ってるんだから、それも試して見たいですがちょっと適当なゲームを持っていないのでそのうちにでも。

2012年10月6日土曜日

iOS6のマップ騒動について

題名の件について、ネットでは様々な記事が流れてます。でも結論として、いかにこのマップサービスでGoogleが先行しているかを思い知らされました。そりゃ、数年前からやってるし、金かけてストリートビューとか、裁判沙汰になりながら位置情報データを記録してましたからね~ やっぱマップというと位置に付属する情報がいかに正確か(現状に近いか、新鮮さ)が命だよね~。
10年以上前のGoogleがペーパー(論文)で出してきた自社システムの情報みてると、よくここまで10年くらい金使えたよな~と感心します。でもそのおかげで、大量のデータを世界中の誰よりも蓄積できて、その成果が今でてます。今からほかの会社が、この種のサービスしたいと思っても追いつけるんだろかと考えちゃいますね。(Appleはこのままではヤバイと気づいたのはいいけど、データの蓄積できてない段階でサービスをスタートさせたのはまずかったね。)
でも本当にGoogleのシステムはすごいな~と昔から感心してました。Linuxをベースにしてるとはいえ、ファイルシステムから全部自分のサービス用に特化してるし。そもそもHDDの故障データにはびっくりしました。直感的にはそうだよな~とは思ってたけど、データで示されるとやはりHDDって機械部品だよな~と実感します。(初期故障の比率はある程度あって、それをこせるとある程度(数年)は動く、でもそれ過ぎると一気にまた故障率が上がる)

2012年10月5日金曜日

Nexus7買ったよ!

9/25の発売日の夜、家でGoogle Playからついポチりました。(購入)パッドなんて、iPadを2台(1代目と3代目)持ってるんですが、やはり一台くらいはAndroidが欲しかったのと、出張なんかでは7インチのほうが大きさ的にやさしいよね、ということで。(やっぱiPadでかいよ)
なかなかこなくてFedexで追跡。(通知メールを見たら、宅配業者はFedexとのこと。でもNexus7て台湾のASUS、でも製造工場は中国だよね?)

なんと、香港のFedexから始まっとる!2,3日中国からの輸出手続きで本土とやりとり後、関空へ。そこでも入関に1日かけてやっと国内輸送。最後はちょうど家が留守のときにきて、夜に無事受け取りました。(住所が大阪なんで、一瞬あせった)
無事とどきました。さっそく箱をあけて電源Onとしようとしたら、、、バッテリーがチャージされてない!?これまでこの手のものって、たいてい出荷検査の関係とかでバッテリーはフルチャージに近い状態だったんですが、こんなの初めて。しかたなく電源つないでしばらくチャージ。

ちゃんとおまけの「トランスフォーマー」も入ってます。面食らったのが、最初にgoogleアカウント名が入力済みとは聞いてたんですが、いきなりスマホでいれてるアプリのうち、Nexus7でも対応してるやつをダウンロードしてインストールしちゃったこと。なんか最初はそうだったけど、選択できるようになったって記事あったのに。おかげでこっちでは必要ないものをいくつかアンインストールしました。7インチはやはりだいぶ小さい感じですが、出張のときはこっちのほうがよさそうです。少し環境構築しないと。(エディタくらいは使いたいよね。Google Appで簡単なワープロ使えますが、あれはネット環境ないとだめだし、こいつはWiFiモデルしかない。オフラインでも使える機能、こいつでも使えるんかな)
さてさて、iPadとバッテリーの持ちとかいろいろ比較してみないと。

2012年8月30日木曜日

ExcelのVBA(保存用ボタンを作る、その2)

前回、VBAで保存用マクロを作成したんですが、そのときファイル名指定を相対指定で行いました。てっきり*.xlsファイルがある場所がカレントだろうと思っていたんですが、試しているとどうも動きがおかしく、*.xlsファイルのある場所以外によくファイルが保存されます。
調べてみたら、VBAではカレントという概念があまりないようで、基本的に絶対パス指定か、ファイル指定用のダイアログを使ってファイル名を絶対パスでもらうのが本来の考え方のようです。その後、詳しく記載してあるページが見つかり*.xlsファイルのある場所はカレントにはならないことがわかりました。(OSやOfficeのバージョンによっても一概にはいえず、My DocumentsになったりProgram File内のOfficeがインストールされている場所が相対指定の場合カレントになってしまうようです)Excelを起動しておき、そこから「開く」を行って*.xlsファイルを指定してやると、*.xlsファイルのある場所(ダイアログによりファイルを指定しています)がカレントになるようです。

でもこれでは困ります。更に調べると、ありました*.xlsのある場所(パス)を指定する方法が。


    fnsave = ThisWorkbook.Path + "\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff


ThisWorkbook.Pathというのが、*xlsファイルのある場所(パス)示すそうです。これでうまくいきそうです。

2012年8月15日水曜日

ExcelのVBA(保存用ボタンを作る)

はっきりいって使い方として邪道だとは思うんですが、Excelのシートで各種プログラムの設定ファイルなんかを操作したくなります。(自分ならSakuraエディタでやるほうが好きなんですが、普通の人にはテキストエディタはちとハードルが高い)
それならばと日本人には使い慣れたEXCELでテキストファイルを保存するようにすればいいでしょうと、ちょっとVBAマクロを調べてみました。意外と簡単にできました。


Sub Save()
    fnsave = "MMM\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

Sub Save2()
    fnsave = "initialize.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

スクリプトが2個作ってありますが、それぞれのシートにボタンを張っておき、それぞれのスクリプトを設定するだけです。EXCELのBookの位置を基準にフォルダもかえて保存できちゃいます。これなら普通の人でもプログラムの設定を簡単にできるでしょう。(GUIつくるのがいいんだけど、社内ツールなんでそこまで金をかけちゃいられない)
ただOffice2010でやったんですが、マクロ作成の「開発」機能がデフォルトでオフになっていて、メニューの結構深いところにいってオンにしないとだめなんですね。ちょっとびっくりしました。

2012年8月12日日曜日

HDDの交換、その後

HDDを交換して、Windows7からインストール。かなり時間がかかりましたが、やはりクリーンインストールすると動きが快調ですね~。
以前はどうも動きが怪しいところがよくあったんですが(Sakuraエディタがなぜか保存時に異常終了する。chkdskしてHDD修復後に何回か再インストールしたんですが、どうしても治りませんでした。)、今は快調に動いています。いったいどこが壊れていたのやら。
後、VMplayerがどうしても動かなくなっていたんですが、システム入れなおしたらまた動くようになりました。これはうれしい。(ただ、その他のアプリは普通に動いていたんですよ。それでなかなか面倒くさい再インストールに踏み切れなかった)

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


2012年3月28日水曜日

ubuntuにruby-1.9をインストール

ちょっと入れてみたいOSSがあり、それがデータ作成にruby-1.9を使ってました。最初、ubuntu11.10にもrubyが入っていたのでいいと思ったら、どうもエラーがでます。よく見たら、force_encodingという関数が見つからない様子。調べてみたら、ruby-1.9から追加された関数らしい。
ubuntuのサーバにはruby-1.8までしかなく(調べてみると、大抵のディストリビューションがまだ1.8系らしい)、かといって既存のものをいきなり外して新しいのを入れるのもどうかと・・・(ruby使ってるツールがありそうで、最初に外したところでエラーでとまっちゃいそうな気がして) 調べてみたらrvmというコマンドがあるらしい。(ruby version managerというらしく、複数バージョンを使い分けられるらしい)ただデフォルトではrvmが入っていません。Ubuntuのサーバにはありました。

$ sudo apt-get install rvm

これでrvmが使えるようになりました。

$ sudo rvm install 1.9.2

こうすると/usr/share/ruby-rvm以下にソースをgetしてきて、展開しビルドしてくれます。とここまではいいんですが、どうもSSL2のところでエラーがでます。色々調べてたら、英語のページで同様の現象とその対策がありました。

/usr/share/ruby-rvm/src/ruby-1.9.2-p180/ext/openssl/ossl_ssl.c


// OSSL_SSL_METHOD_ENTRY(SSLv2),
// OSSL_SSL_METHOD_ENTRY(SSLv2_server),
// OSSL_SSL_METHOD_ENTRY(SSLv2_client),

100行目くらいにある上記の3行をコメントアウトしてしまいます。(いいんかい!という気もしますが、まあとりあえず外部接続に使う気はないんで)その後、ビルドできました。
ただ、バージョンがどうにもうまく切り替えれません。rvmをインストールすると、${HOME}/.rvmというディレクトリが作られ、その下に展開されるらしいんですが当該ディレクトリができていません。もう少し格闘しないといけなさそうです。

PS
ようやくわかりました。どうも/etc/profile.d/rvm.shを実行しないといけないようです。${HOME}/.rvm以下にスクリプトを展開するというものもあるようですが、ubuntuの現状だと/usr/share/ruby-rvm以下に展開されてしまい、そういう場合はrvm.shを実行しないといけないようです。rootになるとhomeに.bashrcがないので/etc/bash.bashrcが実行され、そこからrvm.shが実行されるんですが、通常ユーザーの場合は~/.bashrcがあるので、そこの最後に以下の行を追加しました。

source /etc/profile.d/rvm.sh

これでrvm関係の環境変数がセットされ、バージョンが切り替わるようになりました。というこで、やっと目的のOSSのインストールにかかれます。、

2012年3月21日水曜日

hadoop お試し

(何か操作を失敗したのか内容が消えてしまっていたので、記憶の限り簡単にメモしなおし)
最近話題の「ビッグデータ」のさわりを簡単に試してみたくなりました。

1.VMwareのイメージで試す
これが一番お手軽です。Yahoo! Cloud Virtual Machine Applianceここにubuntu8上に設定したhadoop-0.20があり、VMplayerを用意すれば簡単に試せます。ただシングルマシンの環境なのにセキュリティがばっちり入っていて、毎回kinitしないといけないのがめんどくさいですが。

2.Cloudera社のHP上からパッケージを落とす
Ubuntuなんか使ってる方だと簡単に環境を構築できます。リポジトリリストにCloudera社のものが入ってしまうので、通常の更新確認で若干遅くなったり、たまに反応がこなくなったりするのが玉にきずですが。(自分は結局外してしまいました)

どちらも同じサンプルプログラムが入っていて、MapReduceを実体験できます。(どうみても同じものにしか見えんw YahooでHadoop作った人が独立してCloudera立ち上げたせいなのかもしれません)当然、複数nodeの動作状態をモニタする機能もあります。(ブラウザで見ることができます)

(1)HDFSの状況を確認
HDFS上にできているファイルの確認用画面です。http://localhost:50070で見れます。(もちろんほかのマシンからでもOKです)

(2)MapReduceの動作状況の確認
今度はサンプルのPIを計算しているときの動作状況をモニタしてみます。http://localhost:50030で見れます。

最下段にRunしているジョブが表示されています。そこをクリックするとより詳細なMapReduceの状態がモニタできます。
これは見ていて非常に面白いです。ブラウザの表示を更新すると計算状況の進捗状態が直接わかります。

2012年3月18日日曜日

ubuntuの環境メンテナンス

しばらく電源を入れてなかったubuntuのマシンもメンテナンスしないと。
ちょっと久しぶりにnoSQL関係の性能を見てみたくなり(google leveldbです)、そうなるとboostいれないと、となります。素手でインストールしてもいいんですが、更新の手間やらC++のライブラリでほとんど採用されそうな状況でどうしようかとおもいましたが、Canonicalのパッケージにしときます。(現状、48ですがCanonicalは46でした。まあ、ちょっと遅れてますが、そのあたりはあきらめて。)
さて、この連休中にちょっとleveldbの性能をみてますか。(ちょっと、従来テキストベースでデータを読み込んでいたプログラムが、最近読み込むデータがGBクラスになってきて、こりゃnoSQL(KVS)の採用を考えないといけないなと・・・)
仕様を考えるセクションはComputer Scienceに詳しいわけではなく、使ってる状況を見てこちらから提案しないと互いにHappyにはなれません。

2012年3月17日土曜日

計算機のメンテナンス

最近、windows等で脆弱性に対する更新がまた多くなっています。新しい計算機が欲しいなあ~と考えてたら、家中のPCの更新すませとかないと(ウイルススキャンもやらないと、電源もしばらく入れてないのがあるし)と思いたち、休日の土曜日の午前中にマシンのメンテナンス。いや~、時間かかりますね。(ついでにいくつかはハードディスクの最適化もしとかないと)これで更にマシン増やしたら、面倒みきれないぞと考えてしまいました。(Macやlinuxのマシンもあるので大変です)

2012年3月5日月曜日

Android GUI開発-部品の配置

AndroidのGUIを作るのに、ボタンを並べますが大抵の例は「垂直方向」か「水平方向」ばかりです。垂直と水平を混在させるにはどうしたらいいんだろうかと調べていたんですが、やっとわかりました。Eclipseの開発環境のマウスだけでやる方法はわかりませんでしたが、部品はマウスで配置して、後はXMLを直接編集することでできました。main.xmlはこんな感じになります。(最初にボタンを5個配置して、赤字部分をテキストで追加し3個のボタンだけ水平に配置しました。部品の配置方向を最初に"vertical"としておき、3個だけインデントして"horizontal"と定義してあるところがポイントです。)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A" />

    <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="C" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="D" />
    </LinearLayout>

    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="E" />

</LinearLayout>

エミュレータで実行してみると以下の様になります。

こんな感じになります。

2012年3月2日金曜日

Linux ファイルの最大オープン可能数

Linuxにおける、ファイルの最大オープン可能数を調べたのでメモしておく。

1.ファイルオープン数

# cat /proc/sys/fs/file-nr
1395 10 76503

3つの数字が表示されますが、
左から順番に、
・今までにオープンしたことのあるファイルの最大数
・現在オープンしているファイルの総数
・オープン可能なファイル数

なお、3個目のオープン可能最大数は以下のファイルで管理されている。
   /proc/sys/fs/file-max
これをシステム起動中に、rootでechoコマンドで書き換えてもいい。正式にはsysconfigを書き換えてリブート。

2.あるディレクトリ下のファイル数

上記と関係するが、プログラムである特定ディレクトリ以下のファイルをすべて開く処理がよくある。
そのとき上限にひっかかってないか調べるため、ファイル数を調べたいが、以下のコマンドでわかる。

$ find . -type f | wc -l



2012年2月27日月曜日

Windows7 64bitの状況

Windows7を使っていてふと思ったんですが、「アプリは64bitになっているんかしらん?」ということを。64bitを選んだのはメモリをたくさん(4GB以上)積みたかったから。複数アプリを同時に動かしてるとメモリいるしね。でもアプリが64bitに対応してなきゃあまり意味ないし、それに結構32bitしかなくて設定に苦労した経験が多かったので気になった。
コントロールパネルでインストールされているアプリ一覧見ていて、javaが32bitと64bitの2つが入ってるのにびっくり!

しかも会社名がSunとOracleに分かれてるw。32bitの方はバージョンが古いので、もしかしてOracleに買収される前のバージョンのままか?でもなんで、それぞれ入ってるんだと思ったら、(pluginで使ってる)IEも32bitと64bitが入ってました!(Startメニューにちゃんと2個ありました)
なんだこれはと思ったら、Quick起動に最初から入ってるIEは32bitがデフォルトという落ちまでついてました。(右クリックででてきます)
調べてみると、IEやChromeが使ってるFlashが32bitしかなかったり、その他のpluginもほとんど64bitがないので32bitがデフォルトの様子。Chromeも64bitがまだChromium(開発版ね)しかないとのことでした。windowsの64bitだと起動直後の状態でもメモリを1GB以上くってるんで、なんか64bit使っててもあまり恩恵うけてない感じです。32bitよりはメモリ関係が安定してるんじゃないかと思いたい・・・(自宅で使ってる分には、そんな重いアプリや大きなドキュメント使わないのでwindowsも32bitで十分な気がしてきた)

2012年2月25日土曜日

NTT docomo料金プラン検討

昨年の秋にGalaxy S2を買ってからずっと気になってたのが料金プランです。一応パケホーダイフラットに入ってますが、普段は電話としてしか使っておらずスマホとして使うのは自宅でWifi接続のときがほとんど。なのでパケホーダイ2のほうがいいんじゃないかと気になっていました。パケホーダイ2の料金設定は以下の通りです。

  1. 4,650パケット/月まで390円
  2. 71,500パケットまでが従量制で、最大5,985円(フラットより585円高い)
それでこれまでの4ヶ月くらいのパケット通信料を調べてみました。すると平均34万パケットも通信しています。何にいったい使っているのかわかりませんが(gmailとカレンダーくらいしか思いつかない。たまに日経のHPはみるけど。。。)、これではパケホーダイフラットのままの方がいいです。

2012年2月23日木曜日

Android Samsung Kies(とAir)

Galaxy S2に音楽を追加したくなったんですが、以前Kies(Samsung版のiTuneみたいなもの)をアンインストールしていました。(HDDのセクターが一部壊れたため、動きがおかしくなってた)
再度、インストールしたんですがどうもうまくつながりません。数回に1回つながるというかんじ?(イベントログを見ると、USBドライバがクラッシュして、オフラインになりましたとのこと・・・何度インストールしなおしても状態は改善されず)しかも、インストールしてある音楽一覧をスクロールしようとしても、動きが無茶苦茶遅くてまともに操作できない(/_;) 
かなり我慢してなんとか音楽をいれましたが、他に方法がないかと思ったらkies Airというのがありました。これはGalaxy側のアプリでWi-Fiを使って通常のブラウザによりGalaxy内のコンテンツを管理できるようになります。(Kiesがいらなくなります)起動すると以下のような表示がでます。
IPアドレスが表示されるので、Galaxyがサーバーみたいになりここをブラウザで見ます。そうすると音楽や写真、電話帳の内容を修正したり、さらにはSMSまで使えうそうです。(SSIDだけは消しときます。IPアドレスはプロバイダから割り振られたプライベートアドレスです。)そうするとGalaxy側に接続を許可するかというDialogが出てくるので、それを許可すればOKです。

ところでここで問題なのが、複数の音楽等コンテンツをダウンロードしたりしようとするとJavaを有効にしろと言われます。(1個ずつならOK)Javaなら入っているんですが、どうしてもうまくいきません。ネットでぐぐってみると、結構同じ悩みを抱えている人がいますが解決方法が見つかりません。SamsungのHPにいっても単にJavaを入れろとしか書いてありません。試してみてわかったのが以下のことです。


  1. 気をつけてないと複数バージョンのjavaがよくインストールされています。大抵はうまく動くんですが、いい状態ではないのは確かです。(→最新のもの、一つにしましょう)
  2. 通常はChromeをブラウザに使っているんですが、今はV17です。でもSamsungのHPなんか見てると、ChromeのV11とかV12で使えるとかかいてあるので最新のV17ではダメかも。
  3. IE8はOKとあったので、試してみましたがうまくいくユーザーと、やはりだめなユーザーがあります。ダメなのは最初から設定してあるもので、そこで色んなプログラムのインストール等管理作業をしているので、プロファイルになんかゴミがのってしまっているかも。。。

ただ、複数ダウンロードできるユーザーもあったんですが、やってみると「全部」を選択してもそれはそのとき画面に表示されてるもの(例えば音楽3曲分)だけが一度にダウンロードできるだけであって、他のページに入っているものは選択されませんでした。これじゃ「全部」の意味ないよ~。頑張って調べたわりには報われませんでした。(まあとりあえずKiesは削除できるんでいいか)

あとGalaxy S2のデフォルトプレイヤーでは音楽データ(mp3)は、/sdcard/media以下にベタっと入っており、アルバム毎のフォルダ単位で入っていると予想してたのには驚きました。これでどうやってアルバム名を管理しているんだろう?(iTune等だと、アルバム名のフォルダが作られてその中に各曲が入っています)と思ってたんですが(プレイヤーが管理用のファイルでも別に持ってるのかと思った)、mp3ファイルにアルバム名やアーティストの情報が入ってるんですね。

2012年2月19日日曜日

Hacking:美しき策謀

サイバースペースのセキュリティが問題になっていますが、どんな(攻撃・防御)方法があるか用語は知っていても、具体的にどんなものかは知りません。勉強したくなり、タイトルの本を買って読んでます。具体的なプログラムが載っており、これいいんかなと思ったんですが、試してみると半分以上は現在の最新OS(Linux)では対応済みで本の解説通りには動きません。(ただ異常は検知してくるので、危ないことをやっていることはわかります)
前からポートスキャンというものがあることは知っていましたが、やってみました。ツールとしてnmapというプログラムを使います。このソフト、オープンソースでGPLで公開されているんですね。同サイトには他にもsnifferのようなセキュリティ用のツールが公開されていました。とりあえずMac OSXでビルドして、(自宅の)windows7をスキャンしてみました。


macbookair:nmap-5.51.6 hogehoge$ sudo ./nmap -sS 192.168.24.58

Starting Nmap 5.51.6 ( http://nmap.org ) at 2012-02-19 08:16 JST
Nmap scan report for Hiro-PC (192.168.24.58)
Host is up (0.0025s latency).
Not shown: 992 filtered ports
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
445/tcp   open  microsoft-ds
554/tcp   open  rtsp
912/tcp   open  apex-mesh
2869/tcp  open  icslap
5357/tcp  open  wsdapi
10243/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 4.45 seconds
macbookair:nmap-5.51.6 hogehoge$

こんな感じで待受状態のポートが出力されてきます。(各ポートが何のサービスなのかの説明は控えておきます。)まともな使い方は、これでマシンに変な脆弱性のある設定がされていないかを調べるものです。

2012年2月15日水曜日

Android デバッグ方法

以前、プログラムを修正してもうまくエミュレータやら実機に反映されないと言ってましたが、どうも先日デバッグ方法で気づいたAndroid SDKで追加されているデバッグメニュー同様、実行も追加されていました。Androidアプリ専用の実行メニュー項目から起動すればすぐに修正が反映されました。
また、起動が遅くてイライラすると言いましたが、どうも動きを見てると「エミュレータは起動しっぱなしでいいんじゃないか?」という気がしてきました。案の定、最初のエミュレータ起動には時間がかかりますが、その後はそのままでプログラムを修正しても自動でインストールしてくれました。(ただAndroidのアプリは、見た目は停止させても裏で動いているので確実にインストールさせようと思ったら、エミュレータ上で事前にアンインストールしておくと間違いありません。)これなら最初だけは我慢しなければいけませんが、そんなに問題ありません。
(Androidは、eclipse上でGDBを動かし、エミュレータ上のプログラムにリモートでデバッグをかけているそうです。それならエミュレータは起動しっぱなしでいいんじゃないか?ということになります。)

2012年2月14日火曜日

Android アプリのeclipse上におけるデバッグ

Androidアプリの作成するさいのデバッグ方法ですが、簡単なのはLogCatクラスを使用して実行中にログを出させて、それをeclipseなりでモニタする方法があります。実機とつないでも簡単にできますが、やはりeclipseを使うんですから、ソースを直接ステップ実行したいです。簡単にできるだろうと最初は思ったんですが、これが中々うまくいきません。windows7上で試していたんですが、どうも「実行」(run)メニューの2番目にある通常の「デバッグ」ではだめなようで、Android SDKを入れたことで追加されるメニュー項目の「デバッグ」からAndroidアプリのデバッグを選択してデバッグの構成からいかないとだめなようです。結局うまくいかず、次にMac OSX上の環境で試してみたら、デバッグができました。ただ、それでも自分でビューを「デバッグ」に切り替えないといけない(自動で変わってくれたのは最初の1回だけ・・・)ような、あるいはブレークポイントをはってもそれがうまくエミュレータ上に反映されない?ような状況がでてきました。以前もアプリを変更しても、それが中々エミュレータ上に反映してくれなくて四苦八苦してましたが、もう少し試してみないとよくわかりません。(ブレークポイントの設定を変えるたびにアプリを再ロードは、ちょっとおかしいだろう。→さすがにこれはありませんでしたが、初期化ルーチンで止めたい時はエミュレータ上でアプリを一度止めて、再実行しないとだめですね。当たり前ですが。)
あと、ネットで調べていた時たいていは単に「デバッグ」で動かせばいいとしか書いてありませんが、大事な設定があります。当該プロジェクトの"AndroidManifest.xml内の設定で「デバッグ可能」(Debuggable)というフラグがあり、デフォルトの初期値がNULLなんです。これを手動で"true"にしてやる必要があります。(右上にあります)
true/falseなんですが、まさか初期値がNULL(空白)とは予想してませんでした。(これに気づくのに2,3時間かかりました)
あと実機(自分はgalaxy s2)上でもソースコードデバッグができるそうですが、これはまだ試していません。ただ調べてると、Samsung Kies(iPod/iPoneのiTune相当)を入れてないとダメという情報もあり(該当するSamsungのページは今ではなくなっていました。どうも専用のUSBドライバをいれないといけないようです。実際、windows用にしかでてないんですが、昨年末のVerUp以降最新のをいれないとGalaxy s2にはアプリを入れれなくなってしまい、現在Mac OSXではアプリを作ってもアップロードできない状態です。)、各社癖がありそうで大変です。

しかしAndroidの開発環境がjavaで構築されているせいなんでしょうが、動作がとてものろくてかないません。仕事でAndroidアプリを作成している人たちはどうしてるんでしょうね?(我慢するしかない?自分のPC(win7)は一応Core5、メモリ4GBつんでますからそんなに貧弱ではないと思うんですが、どうみてもCore2のMacの方が動作が早く見えるんですが・・・)


PS
ほぼ確実にソースコードデバッグができる手順がわかりました。

  1. emulatorを起動する。(何らかのアプリをデバッグするでもOK)
  2. デバッグしたいプロジェクトを選び、eclipseのビューをjavaからデバッグに切り替える。
  3. そこで(Androidアプリの)デバッグを実行する。
  4. コンソールに当該アプリをemulatorにインストールしますというメッセージが表示され、ブレークポイントで止まる。(Step実行が可能になる)

この手順4になるときに、Core5/4GBのノートPCでも数秒かかります。(Macだと心持早め)仕事で使うなら、Linuxマシンでないとだめな感じです。手元にはメモリが1GB程度の貧弱なマシンしかLinuxマシンがないので実際に確認できませんが。

2012年2月6日月曜日

VMware Player-4.0.2のインストール(CentOS4利用)

久々にLinuxを使いたくなり、以前VMPlayer3で作成したイメージがありましたが折角なんでVerUpします。
VMware Player-4.0.2をDLしてきてインストール、さらにCentOS4(昔作ったプログラムを動かしたいので、あえて古いVerです)をインストールします。Defaultではユーザ名を入力するだけで勝手にインストールされて英語設定になりますが、インストール後設定で日本語にできます。(前はできなかった記憶があり、一度Linuxの入れ物だけつくり、手作業でブートしてインストールしました)その後、vmware-toolsをインストールですが、なぜかうまくいきません。「パッケージがみつからない」と怒られます。
よく理由がわかりませんが、ネットでvmware-toolsのisoイメージを直接vmwareのサイトからDLして使う方法を調べてみたのですが、webで当該URLにアクセスしようとするとうまくいったり、いかなかったりしました。なんか英語のページなどにあった情報で、english版のVMPlayerはVerがさらにあがっており、4.0.3がでているらしいんですがなぜかvmware-toolsがvmwareのサイトに当該Verがなく、4.0.2ものを手動でDLして使えというのがありました。他の日本語のページでは4.0.2で特に問題があったという記述はなく、詳細な理由はわかりませんが手動でDLすることにします。ただ使うのに2回ほど解凍してやる必要があり、それがゲストOSがLinux用のvmware-toolsのパッケージ(tools-linux-8.8.1.exe.tar)から、tools-linux-8.8.1.exeを取り出してこれをlinux上で動かしてisoイメージをとりださないといけません。windows上で作業を行うのにいくつかツールがありますが、自分は「7-zip」を使いました。(解凍できる形式が多く便利でした)
手動でvmware-toolsのisoイメージを作成し、これをVMPlayer上のLinuxでマウントしてやり内部に入っているPerlのインストールスクリプトを実行してやります。これで無事、vmware-toolsがインストールできてvmware用のXドライバや、windowsのHDDをマウントできるようになり、動作環境の準備ができました。

2012年1月31日火曜日

windows7(64bit)の調子がおかしい

windows7(64bit)にiPad用のiTunesをインストールしてあるんですが、iBooksに伴うVerUpのニュースがあったので更新しようとしました。
ところがなんかiTunesがうまく起動しません。ものすごく時間がかかったあと、ヘルプメニューから更新の確認をすると、Dialogは出るんですが真っ白け。そのまま変化がありません。強制終了も効かなくて、やむを得ず再起動しました。そこから状態がどんどん悪化、iTuneのVerUpどころか起動はうまくいかないは、あげくはAcrobat Readerまで起動しなくなってしまいました。メインで使っているゲームは問題なく動くんですが、これでは困ります。レジストリを調べてみようとツールを動かしたら、メモリアクセスエラーとでる始末。(appleの更新チェックデーモンでも、実行しようとするとでてきます)
このPCにはなんだかんだ色々インストールしてあるので、どれかがぶつかっているようです。iTuneを動かそうとするとQtと衝突してるとかいうようなメッセージが出てきたので、アンインストールしようとしてもうまく動きません。(レジストリがかなりやられてる?)
仕方ないので、新しいユーザーを作成しそれに管理者権限をもたせ、そちらからアンインストールです。どうも元々のユーザーのプロファイルはだいぶ傷ついているようで、アンインストールもできなかったのが、新しいユーザーでは動きました。ただ何故かアンインストールでのファイルの削除が異様に時間がかかります。確かにQt SDKはMinGも入っているのでファイルの階層も多いのですが1日以上かかってまだ終わりません。はたして復活できるのか。(OSからの再インストールになるのかな〜)

ディスクの反応速度がどうも遅い気がするので、まさかと思いイベントログを調べて見ましたが、案の定「不良ブロック」の検出がでています(-_-メ) NTFSが強力なジャーナリング機能を持っているので、時間をかけてそれなりに動いてしまっていたので気づくのが遅れました。運を天にまかせて修復をしてみます。
・「コンピュータ」を開く
・ドライブ「C:」を右クリックして「プロパティ」を選択、そこの「ツール」タブを選択する。


・ここで「エラーチェック」を選択すると以下の画面が出ます。


・「不良セクターをスキャンし回復する」を選択し「開始」を押します。システムドライブの場合は「実行を再スケジュールしますか」と聞かれ、それを選択し、一度マシンをシャットダウンします。(注:再起動ではだめです)
・電源を入れると、なつかしいCHKDSKが動いて修復してくれます。(時間はかかります)

これでiTuneの問題も、Acrobat Readerの問題も解決しました。ただイベントログにあいかわらず不良ブロックのイベントはでます。(但し2行だけ。以前はそれを使っていたので山のようにでていた)おそらく起動時のHWチェックなんだと思いますが、もう少し様子見です。

2012年1月2日月曜日

NoSQL:現状のまとめ

これまでいくつかのNoSQLを試してきましたが、この業界”栄枯盛衰”が激しく、競争が激しいです。ちょっと現状での状況をまとめておきます。


  1. CouchDB:ドキュメント指向という考え方で、今人気です。インターフェースもHTTPを持っており、非常に使いやすいと評判です。
  2. Redis:有名なオンメモリDBのmemcachedをファイルに永続化する機能を持っています。(以前、気に入っていたTTとかKTと考え方は同じです)インターフェースがtelnetしかないのが玉にキズですが、爆速だとのこと。(ただクライアントにjavaが用意されているのがちょっと理解しにくいですが。確かに今時のjavaは速いんですが、時にGC入ってしまって制御できないのが使いにくいんですが。)
  3. Cassandra:Facebookで開発され公開された有名なjavaで作成されたDBです。とにかくスケールするのが簡単で、巨大なDBもなんなく構築できます。インターフェースには、これまた特別に開発したthriftも開発がしやすく、魅力的です。
  4. HBase:Facebookのメッセージシステムに使われているそうです。インターフェースにはHTTP/thriftが用意されており、巨大テーブルが使えるのが特徴だとか。
  5. LevelDB:googleの公開しているnoSQLです。コンセプトはRedisと同じで、とにかく高速なのと、chrome内に内蔵させているSQLiteの入れ替えを考えているそうです。(ファイルへのデータの永続化に、高速圧縮ルーチン"Snappy"を使っているのも特徴です)昔、mixiでTTやKTを開発した方が今はgoogleに入社していますが、特にこれにはタッチしていないようですが、速度比較にはKTが使わています)

基本的に高速性をうたっているため、memcachedのファイル永続化をしているのがほとんどですが、なにせファイルベースだと、1ファイルのサイズの大きさにDBの大きさが制約されてしまう制限ができてしまいます。(だから速いんですが)

RDBMSだとデータベース管理者がどうしても必要になります。(ログの整理とか、バックアップなど時間のかかる手間がかかります)一方、NoSQLは手間がかからないかといえば、基本的にバックアップはマシンを増やして、そちらにコピーを常時作るという考え方なので、システムをスケールするのにかかる手間がどうかという話になります。ただそれでも、とにかく巨大なDB(TB級)が欲しいとなるとCassandraに行き着くんでしょうか。でも、結局技術の移り変わりが激しいんで、データベース管理者は減らせても、システム開発者は必要になるので、DBを「道具として」簡単に使ってシステム組みたい場合は従来のMySQLみたいなものの方で妥協してしまいますね。

2012年1月1日日曜日

Android emulatorが起動しなくなった?

eclipseでAndroidのプログラム作成の勉強をしていたのですが、あるとき急にeclipseから(emulatorの)実行ができなくなりました。最初はeclipseのキャッシュか何かの調子が悪くなったのかと思い、何度も再起動して、Windowsの再起動までしましたがだめです。以前、動いていたものまでemulatorが起動しても「反応しなくなりました」と言われてダメです。
eclipseのconsoleをみると、以下の様な赤いメッセージがでています。

Bad ram offset XXXXXX(ヘキサのアドレス)

理由がわからず、ぐぐってみたら英語のページに質問と回答がありました。どうもadbのデーモンを再起動すれば治るようです。windowsでやっていたので、コマンドプロンプトをだして、以下のコマンドを実行します。

> adb kill-server
> adb start-server

(当然、SDKへのPATHは通っているとします)ただ、なぜ急にダメになったのかはわかりません。