2013年10月26日土曜日

今更Sleepについて書く事になろうとは・・・

どうも書かなくてはならないネタが出来てしまった。
マルチスレッドには欠かせないSleep(0)についてだ。
自分はSleep(0)を多用していた。
MSDNの記述によると
「中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは自らに割り当てられているタイムスライスの残りの部分を放棄します。」
という事なのだ。
つまり、「ここまででいいや」って時にSleep(0)を挟むと、他のスレッドが起動し始めるということだ。
これによって、OS全体の動きがスムーズになるはずなのだ。
Sleep(1)として1を入れる人も居るが、1についてはMSDNのどこにも記述が無い。

ところが・・・
最近作ったプログラムで、Sleep(0)を使ったところ、CPUの使用率が100%になってしまった。しかも単純なループで・・・
調べてみると、INTELの記述があった。
ちなみに日本語参考訳もある。
「Sleep(0) の呼び出しは、命令パスがかなり長く、約 1,000 サイクルも消費する ring3 から ring 0 への遷移があるり、プロセッサーは、この “スリープループ” が有効な作業を行っていると思い込む。さらに、無駄なエネルギー消費が起きてしまう。」

Core2やAMD64あたりのCPUでは普通にSleep(0)で動いていた筈なんだが・・・

そこで、INTELの推奨している方法は、_mm_pause() を使う事だ。
_mm_pause() はSSE2命令をサポートしていないシステムではnopになるらしい。 

INTELのサイトではサンプルが提供されているが古いシステムでnopになったら、あれだとCPUパワーを他のアプリに割り振ることが出来ないので駄目じゃないのかと思う。

最後に、INTELの記述に笑った
「我々は、数年にわたって調査と測定を行うことで、これらの問題に対処することができました。」

本当に数年かかったよ!

2013年9月10日火曜日

ajaxplorer Version 5.0.3 - 2013-09-02

現在会社で使ってるドメインキングのレンタルサーバには空きがあるので、
ajaxplorerをセットアップしている。

以前レンタルサーバのPHPバージョンが古かったため、
仕方なく4.xx系のajaxplorerを使っていたのだが、
こないだちょっと気が向いて調べてみたら、いつの間にかPHPが5系になっているのに気がついた。

おいおい、いつからだよ、、、

そしたらajaxplorerも5系にしたいよねぇ?
ということでやってみた。

FTPでajaxplorerのフォルダごと書き込み権限くっつけて、
WEBブラウザからajaxplorerにadminでログインし、設定からUpgradeを選択した。
するといくつかのパッチが当たりますけどいいですか?と出る。
続行すると、何の苦もなくアップグレード完了

FTPで後から見てみるとなにやらやばそげなファイルのパーミッションはきっちり変わってる。
良く出来てるなぁ

インターフェースに関してははっきり言って以前の方がセンスあったように思う。
気がついた問題点としては、MBCSのフォルダを作成すると、フォルダ名が空状態になってしまっている。
作成自体はできているようなので、リフレッシュすると出てくる。
i18n問題が残ってると使う気がめっきり減ってしまうので、後で報告しとこうと思う。

2013年8月19日月曜日

fon2303 developer firmware

http://blog.fonosfera.org の情報を元に、2012/12/13に出た fon 2303 用 2.3.7.0 developer firmware をインストールした。

こないだ2.3.7.0 beta 3をインストールした時点ですでにstableリリースが出ていたようなのだが、なんで気がつかなかったんだろう?

気を取り直して、いつも通りWEBインターフェースから入れようとしたら出来なかった。
しかたないので、sshで接続してimageを直接入れる事にした。

mac から Terminal開いて以下のように入力

ssh root@192.168.xx.xx
パスワード入れて、接続したら続きを入力

cd /tmp
wget http://download.fonosfera.org/2.3.7.0_Paco/FON2303_2.3.7.0_DEV.img
mtd -r write /tmp/FON2303_2.3.7.0_DEV.img image

意味はよくわからんが、mtdてのはフラッシュするコマンドのようだ。

しばらくすると、fonの再起動かかってデフォルト状態のfonが立ち上がる。
初期設定から言語を日本語にしたり色々やり直し、minidlnaもインストールしなおして、うちは2重ルーターで使っていたが今回は面倒くさいのでbridgeにして、、、あ、つながらなくなった。仕方ないので電源抜いて再起動、、、などなどやってきちんとdlnaも動いて今まで通りになった。

2013年7月4日木曜日

beagle bone black

ラズベリーパイが流行っているようなので、違う方を買ってみた。
beagle bone black
http://www.itmedia.co.jp/news/articles/1307/01/news115.html

Cloud9 IDEで色々いじっているうちに、IDEが立ち上がらなくなってしまった。
SDカードで最新にしてなかったので、やってみようとしたのだが、
イメージサイズが3Gくらいあって、手持ちの2GマイクロSDには書き込めなかった。

cloud9の立ち上げに失敗してるんだろうなと思って、
GateOneSSHClientで見てみたら以下を発見

/lib/systemd/system/cloud9.service
cat してみたら以下のラインがあった。
ExecStart=/usr/bin/node4 /usr/share/cloud9/bin/cloud9.js -l 0.0.0.0 -w /var/lib/cloud9 -p 3000
これをコマンドラインから打ち込んだ。
/usr/bin/node4 /usr/share/cloud9/bin/cloud9.js -l 0.0.0.0 -w /var/lib/cloud9 -p 3000

/var/lib/cloud9が無い!とか言われるので、フォルダを作成し、再度実行したところ立ち上がってくれた。

うーん、なんで消えちゃったんだろう?
しかしまぁこれ、、、JavaScriptで、PWM制御とかのコーディング出来ちゃうよ?
もうあれです。
自分でボード作ったりFPGAとかしたりする時代じゃないんじゃないのかと・・・
だってここに5000円で1GHzのLinuxが立ち上がっちゃう子が居るわけで、
コーディングだってスクリプトで出来ちゃうし、、、
世の中どうなってしまうんでしょうねぇ?

2013年6月12日水曜日

ajaxplorer5

ドメインキング借りてるのだが、
ajaxplorerはPHP5.3以降を必要とするので動かなかった。
仕方なくajaxplorer 4.2.3に戻して使っている。
結構前からajaxplorerを使っているのだが、
iPhoneのクライアントもあってこのWEBツールはとても良いと感じている。

最初の頃は文字化けをしたり、
PHPのセッションテンプレートフォルダを作るのにapache ユーザーとグループのフォルダを必要としたりで、消せないフォルダを作ってしまったりもして大変だった。

今はそんな苦労も無く普通に動かせる。
最早必須。
お勧めします。

2013年4月15日月曜日

Vulkano Lava

実は結構前にVulkano Lava を購入していた。
うちのネットワーク構成は以下のような感じである。

光回線-A t e r m B L 1 9 0 H W-Fonera 2.0n-Vulkano、その他PC

 ※Atermには一台だけFAX用のハードウェアがつながっている。

つまり全パケットはFoneraを介している。
アドレスは以下のような感じになってる。
光回線-(Global Address)Aterm(192.168.a.b)
                   -(192.168.a.c)Fon2.0n(192.168.d.e)-(192.168.d.f)Vulkano

まぁ、よくある二重ルータ状態です。

外からVulkanoを使うため、
(1)Atermに静的ルーティングを設定
宛先IPアドレスは192.168.a.c/24
ゲートウェイは192.168.d.eを設定
※保存すると、宛先IPアドレスは192.168.a.0/24になる(?)

(2)Fon2.0nのポートフォワーディング
設定→ファイアウォール→ポートフォワーディングで
tcp 49177 192.168.d.f
tcp+udp 56123 192.168.d.f
※ターゲットポートは空

(3)Vulkanoから普通にネットワークの設定をしてあげる。

これで、iPhoneやiPad等を使って外から自宅のVulkanoにつなぐことができる。

ちなみに自分は自宅のblu-rayデッキにつなげている。
帰り損ねてビジネスホテルなんてときに、自宅の録画を再生して見ている。

vulkanoのリモコン操作はお世辞にも使い勝手のいいものではないが、
必要充分かなぁと思っている。

fonでつくったDLNAにはm4vでいろいろ入っているが、
それもvulkanoやPS3なんかで再生できる。
笑っちゃうのが、vulkanoはカタカナの伸ばし棒が表示できないらしいw
でも日本語もぎりぎり表示できる。
あと、PS3だと余裕で再生できるのに、Vulkanoだとちょっとビットレートが高いと再生きつい。
かなり低めに設定してやらないとだめかもしんない。



2013年3月30日土曜日

fon2.0n + 2.3.0.7 Beta3 + mindlna(MediaTombから乗り換え)

つい先日(多分3月14日)fon2.0n の開発ファームウェア、2.3.0.7のBeta3が出たらしいので入れてみた。
そしてmediatombを入れ直してみたところ、ダッシュボード→MediaTomb→Installが出来ない
あれ?
新しいmediatombがあるかと探してみたが、
それどころが以前のmediatombさえ見つからなくなってしまっている。
まぁLuaが変わったとか書いてあったのでそのあたりが原因なのだろう。
この際、お手軽なminidlnaに乗り換えてみようかと思ってやってみた。
minidlnaのtgzを落としてきてFON Router GUIから入れるまでは出来た。
各種フォルダが出来上がっているのも確認し、動画を入れてさて見てみようかと思ったところ、あれ、PS3から接続出来ない。
仕方ないので、fonのダッシュボードからminidlnaをQuickRestart、これでPS3から見れるようになった。
minidlnaのが定期的に更新されてるし、お手軽なようなので、
今後はクロスコンパイル環境も作って自分でtgzまで作れるようにしておいたほうがいいかもしんないなぁ

2013年2月12日火曜日

Ogre on iPad mini

http://www.ogre3d.org/tikiwiki/tiki-index.php?page=ogreOnIphoneFast
こちらを参考にiPad mini で Ogre を動かしてみた。

ただ動かしただけなのでOgreはよくわかりません。
http://www.youtube.com/watch?v=9p0hFdP4O7k

ちなみにOgreSDKのビルドを色々試みたんだけど、Boost関連で失敗しつづけ動かない。
(Boostもちゃんと使えるようにしておけばよかった・・・)

Ogre Templates for XCODE4 をインストールして、
後は普通にビルド・・・とはいかず、
最初のリンクに書かれている通り、libパスの先頭にスラッシュを入れる。
あと、boostのパスが通ってなかったので、そこだけ通して動かした。

とりあえず、60フレームで頭は表示出来てる。
OgreはOpenGLなんかの薄いラッパーになっているようなので、
ゲームに使うにはUnityよりもいいような気がする。
(まぁUnityもよく知らんのだけど)

2013年1月8日火曜日

ajaxplorerを入れてみた

以前、ajaxplorerをドメインキングのサーバに入れた事があるのだが、
そのときには、ファイル名の日本語が化ける事があって、
アップロード自体が失敗する事もあった。
ファイル名の先頭に半角の"-"をつけたり半角の"+"をつけたりすると、
アップロードが出来るとかいう訳のわからん状況だったのだが、
最近どうなっているのかと本家サイトを見てみたら、
かなり進化しちゃってるようではないですか?
http://ajaxplorer.info
なんとiOSクライアントもある。

ajaxplorerとは、
WEB上でエクスプローラーライクな操作で、ファイルのアップロード、ダウンロードが出来、ユーザーとロールも作れるので、このユーザーはこのロールでここまでしかアクセス出来ないようにするとかカスタマイズも出来る。

ようするにWEB上にドライブがあるような使い方が出来、ユーザ毎のアクセス権も設定出来る。
ここまで出来てしまったら、ガンガン使いますよ

DropBoxみたいに自動的にSyncするとか高等なことは出来ないけど、
普通に共有フォルダがあると考えればとても良い。
しかも容量はドメインキングのMプランだったら、
色々設定した残り容量だけでも40GB以上は使えるはず。

最新のajaxplorerは文字化け問題も無く、特に何をする事もなく普通にインストール手順に従ってインストールすればきっと動かせるでしょう。
唯一、PHPのアップロードサイズに制限があるので、
ajaxplorerのベースフォルダにある.htaccessを編集して、
自分は以下のように追記した。

php_value memory_limit 512M
php_value post_max_size 512M
php_value upload_max_filesize 512M
php_value max_input_time 800
php_value max_execution_time 800
まぁ大き過ぎると思うんで、もうちょっとサイズはしぼってもいいかもしれない。