Tuesday, November 06, 2012

複数のホストのcrontabに対して定期的に実行するコマンドの追加を行う


echo -e "192.168.0.2\n192.168.0.3\n192.168.0.4" | xargs -I{} ssh root@{} -p 55555 "/usr/bin/crontab -l | sed '\$s/$/\n0 \* \* \* \* /path/to/command/exec.sh' | crontab -"
みたいな感じで。

Wednesday, September 05, 2012

死にかけのマシンからWindows7をP2Vで取り出す

何回もフリーズされるわけですよ、Windows7マシンさんが。
その症状が出る前に、まずLANポートの挙動が怪しくなって、通信ができてないように見受けられまして、
余ってたNICカードさして凌いでいたんですが、そしたらフリーズし始めまして。
どこかのデバイスが故障しているのかなぁと思ってポイポイ外しながら様子を見ていたんですが、特に異常なし。
メモリテストやらチェックディスクやらを実行しても、これまた異常なし。

いや、わからないですけどマザボ?電源?
あれこれ立ち上げて負荷をかけながら作業し始めるとフリーズするわけでして。


一応このマシンに死なれても、開発は続行できる状況ではあります。
ありますが、効率が落ちるんですよね、私の場合はこのマシンに入っているOneNoteをいつも片手に作業してますので。
あと開発しているものはWebアプリなのでIEのテストを行いたいのですが、テストできる環境が一つ死んでしまうと少しめんどいなと。

なのでどうしようかと考えたところ、P2Vやりますか、と。
VMware Fusionはあるので、最初VMware FusionのPC移行機能を使ったんですけど、あともう少しで完了というところでエラーが発生。
VMware vCenter Converter Standaloneを使えばできるかもねんみたいなメッセージが出たので、
これを使えば今回の問題は乗り越えられそうかな、と期待。

8時間後に、98%の段階まできてエラーで終了。
ログを見てみたら、

「\\.\vstor2-mntapi10-shared-うんたらくんたら\$Reconfig$」を作成できません。

というメッセージ。
何か解決方法ないのだろうかと思ったら下記のページにそれっぽいことが書いてありました。
http://virtualcitizen.org/2011/01/07/vcenter-converter-task-failed-reconfig/

ここのサイトには「マシンの構成」を再度実行して、それには13分かかったけどうまく行ったよと書いてありましたが、
マシンの構成で何をどうやったんだと疑問は残りました。

とにかく何かやればうまくいくんだろうそうだろうと思い、当てずっぽうでいじってみました。
「ターゲットでシステムの復元のチェックポイントを削除」と「ターゲット仮想マシンの再構成」にチェックが入った状態でして、
このうち「ターゲットでシステムの復元のチェックポイントの削除」のチェックを外すと、無事変換が完了しました。

あとは仮想マシンフォルダにコピーして、フォルダ名の末尾に.vmwarevmを追加(これは不要だったかもしれませんが)。
フォルダをVMware Fusionの仮想マシンライブラリにドロップして追加が完了。
Fusion4を使っているのですが、Windows7でユニティが使えない様子なのが少し残念ですが、とりあえず当面はこれで作業できそうです。

Monday, June 11, 2012

MacOSでの現在非使用中メモリ

VMware FusionでVistaを立ち上げて作業して終了させると、
MacOSでの現在非使用中メモリが3GBオーバーでなんじゃこりゃあ!状態。

この現在非使用中メモリというのは、終了させたアプリケーションが使用していた内容で、
また同じアプリケーションが立ち上がったときに再利用するためのものみたいですね。
これによってアプリケーションの起動の高速化をはかると。
(参考:http://support.apple.com/kb/HT1342?viewlocale=ja_JP
https://discussionsjapan.apple.com/thread/10050098?start=0&tstart=0

それによって8GB全部食尽されて結果的に動きがもっさりしてきているので、
何か本末転倒じゃねって気がしないでもないですが、
とりあえずこの非使用中メモリを解放したい。

ということで、crontabに下記の内容を記載しました。

1 */1 * * * du -sx / >& /dev/null & sleep 5 && kill $!
0 3 * * * /usr/sbin/diskutil repairPermissions /

(参考:http://office-ikason.com/devblog/archives/120
duコマンドで容量計算を行うと非使用中メモリが解放される事が有るらしい、というのと、
diskutilで権限の修復を行うと非使用中メモリが解放されるらしいということで、
上記のコマンドを定期的に実行するようにしました。
diskutilは割と時間がかかる処理なので、一日に深夜帯に一回だけ実行します。

実際に、diskutilで非使用中メモリが解放される効果を実感することができました。
duコマンドでは私はまだ試せていないのですが、
上記のページではきちんと結果が出ているとのこと。

めでたしめでたし。

Tuesday, May 29, 2012

DropQuest2012

謎解きしてDropboxの容量1GBアップさせようぜってことでやっておきました。
ただし私はズルをして純粋に楽しんでなかったり(おい)

攻略を載せてらっしゃるサイト:
http://samulife.com/iPhone/2012-dropbox-quest

英語だしナーと思いつつも、時々内容をがんばって読もうとして、
あ〜、ちゃんと遊んだら楽しそうですネ!
と雰囲気だけ楽しみました。

いやしかしながらDropboxのWebインターフェース中にも
謎解きのための仕掛けが組み込まれていて、
作成者サイドも結構楽しみながら作ったんじゃないかなぁと想像していました。
だったらちゃんと遊びなさいよって話ですけど、
まぁ、それはまた、時間があったら、ですね

Thursday, May 24, 2012

PHPとJavaScriptのソース間でのロジックの共有

PHPがサーバサイドでJavaScriptがクライアントサイドだから、
まぁするとしたらJavaScriptからAjaxでパラメータを投げてPHPで処理して結果を返す、
みたいな流れがいいんだと思います。

でも短時間で何十回もそのロジックを使いたいときはどうするのか、
HTTPリクエスト出しすぎて超重いんですけどみたいな状態になるようであれば、
上記の方法はあまりとりたくありません。
(というかだいたい上記の方法で事足りて、ここであげてるようなケースは
極々稀じゃないのかとは思いますが)

PHPのコードをなんとかJavaScriptのコードまで変換できたらなぁとか思って、
Hiphop-phpでC++へ変換して、llvm-gccを使ってコンパイルして
llvm-disで逆アセしてemscriptenでJavaScriptに変換とか考えましたけど、
llvm-gccのバージョンが4.2、Hiphop-phpが要求するGCCのバージョンは4.3以上
ということで、試す間もなく挫折しました。
というかHiphop-phpで実行モジュール作る時に、色々なライブラリをリンクしてる時点で
JavaScriptのコードにまで変換させるのは無理じゃねっていう。

あれこれ考えてみたところ、Luaでコードを書いて、
PHP側ではPECLのLuaモジュールを使ってLuaのコードを呼び出す、
JavaScript用にはlua2js(https://github.com/mherkender/lua.js)を使って
LuaのコードをJavaScriptに変換して使う、
っていうやり方でいいかなという結論にしました。

ただPHP側にしろJavaScript側にしろ、Luaの関数等を呼び出すときの記述が
若干長ったらしいで、記述するめんどくささを緩和できるラッパークラスのような何かを
作る事が出来たらいいなと思っています。

Sunday, May 20, 2012

カリー化と部分適用

カリー化と部分適用の違いのメモ。
三つの変数を取って値を返す関数fを

f: X,Y,Z → V

として、カリー化や部分適用した後の関数をgとしたときに、
それぞれgは下記のようになる、と。

  • カリー化
    • g: X → (Y → (Z → V))
  • 部分適用(Yを固定する場合)
    • g: X, Z → V

fをカリー化したgだったら、Vを得るまでに、引数Xを一つ与えて返り値として関数を得て、その関数に次の引数Yを与えて…と、一つの引数をとる関数をチェーンした形で呼び出すようになる。部分適用みたいに引数が固定された状態にはならない。gを呼び出してVを得るまでに、X、Y、Zの三つの値を決めなければならない。

fに部分適用を施したgだったら、fのいくつかの引数の値が固定されて、fに比べてgは引数の数が減る。カリー化したgみたいに関数をチェーンして呼びだすなんて出来ない。gを呼び出してVを得るまでにはXとZの二つの値を決めなければならない。


部分適用は日頃ばんばん使いまくってるけど、カリー化はどういうケースで使うんだろう。
カリー化すると部分適用しやすくなるとか、"複数の引数をとる関数を、一つの引数のみを取る複数の関数のラムダ計算などの単純な理論的モデルと見なして研究できるようになる"とのこと(参考: http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96)なので、カリー化は理論寄りのツールであって、単にコードを書く場合は「ここでこの関数をカリー化して」なんていう場面はあまりないのかも。
(カリー化するとこんな風にすっきり書ける、っていうテクニックがもしかしたらあるのかもしれないけど。)

だもんで、prototype.jsのFunction#curryはあまり適当ではないと感じる(部分適用のメソッド名はpartiallyApplyとかになるのかな)。
けどまぁcurryって書く方に慣れちゃってるし、タイプ数も少ないし、curryでいいnうわなにをするやめくぁwせdrftgyふじこlp;「’」

Tuesday, April 03, 2012

MacOSX10.7.3でw3mを使うとSegmentation Fault

mac portsで入れたw3mでalc先生を開くとSegmentation Faultが出て、
どうしたもんかと思ってたら解決策がここに書いてありました。
https://trac.macports.org/ticket/30710

以下引用。
% port installed w3m
The following ports are currently installed:
  w3m @0.5.3_0 (active)
% sudo port -f deactivate boehmgc
% sudo port install boehmgc-devel
% w3m http://www.nytimes.com
boehmgcじゃなくてboehmgc-devel入れればOKということで。

Monday, March 05, 2012

色々なサービスを走らせつつもSELinuxを有効化にしたい

SELinuxをenforcingにしてると、LDAP(slapd)がこけてmysqldが起動できなくて、
それにつられてほかのプログラムも起動しなくて…
という状態でした。
SELinuxがらみの設定をどうのこうのすればいいんだろうとは思いつつも、
SELinuxとLDAPでぐぐってもよくわからず。

どうしようかと思ってたら、こちらのサイトを参考にして、
audit.logからTEファイルを作り、
SELinuxのモジュールを作ることで事なきを得ました。

audit.logの内容をそのままぶち込んでたら、
せっかくSELinuxが色々制限をかけてくれてるのに
ゆるゆるな設定へなっていってしまうので、
一応audit.logの内容を選別してから作りました。

まだまだTEファイル等の内容もきちんと理解していないので、
オライリーのSELinux本にリトライしてみようかなと思ったりしています。