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年8月19日月曜日
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が立ち上がっちゃう子が居るわけで、
コーディングだってスクリプトで出来ちゃうし、、、
世の中どうなってしまうんでしょうねぇ?
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 ユーザーとグループのフォルダを必要としたりで、消せないフォルダを作ってしまったりもして大変だった。
今はそんな苦労も無く普通に動かせる。
最早必須。
お勧めします。
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だとちょっとビットレートが高いと再生きつい。
かなり低めに設定してやらないとだめかもしんない。
うちのネットワーク構成は以下のような感じである。
光回線-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まで作れるようにしておいたほうがいいかもしんないなぁ
そして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もよく知らんのだけど)
こちらを参考に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
まぁ大き過ぎると思うんで、もうちょっとサイズはしぼってもいいかもしれない。
そのときには、ファイル名の日本語が化ける事があって、
アップロード自体が失敗する事もあった。
ファイル名の先頭に半角の"-"をつけたり半角の"+"をつけたりすると、
アップロードが出来るとかいう訳のわからん状況だったのだが、
最近どうなっているのかと本家サイトを見てみたら、
かなり進化しちゃってるようではないですか?
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
まぁ大き過ぎると思うんで、もうちょっとサイズはしぼってもいいかもしれない。
2012年11月13日火曜日
Garmin etrex 30を購入しました
まずは、VLGothicを入れてみた。
次にメニューを日本語化しようとして、Garminのサイトに行き、日本語版ファームを解凍し、
Japanese.gttを入手。
gttはxmlでグロッサリが記述されている。
utf-8でBOMつき、改行コードはCRLF、しかもなぜかアトリビュートは777だった。
喜び勇んで、そのままetrex 30に入れたのだが、動かなかった。
やっぱ日本語版 etrex 30J とは何か違うのか?
etrex30内部のSpanish.gttを見ると、項目が増えているように見える。
これらも入れてやらないと動かないってことだろうか?
こういうときに自分が使うのはperlだ。(Python でもいいと思うけど)
今回はxmlを使うので、cpan使ってXML::DOMとかXML::XPathを入れた。
(ちなみにmacでやってる。)
etrex 30に入っていたSpanish.gtt(別にGerman.gttでもいいんだけど)に対して、
etrex 30J用のファームを解凍して手に入れたJapanese.gttを当てていこうと、
以下のようにコーディング
【使い方】
入手したJapanese.gttはJapanese.gtt.orgへ変更しておく
./conv.pl > Japanese.gtt
とやってリダイレクトする
【注意】
お約束だけど、個人責任でよろしく
できあがったものはutf-8だけど、BOMなし、改行コードはLFのみになる。
アトリビュートは手動で変更したが、必要かどうかわからない。
--- conv.pl ---
---- end ----
【ぼやき】
なんか巷のサイトを見ると、xmlをファイルから読み込むのに面倒くさい事してたり、
getElementsByTagNameでXPathも使わずに読み込んでたり、
どうも自分の感性と違う使い方をしてらっしゃる。
今回入手したGarmin のXMLもひどいもんだ。
こんな感じになってるんだけど
<str>
<tag>TXT_NANTARA</tag>
<txt>なんたら</txt>
</str>
<str>
<tag>TXT_KANTARA</tag>
<txt>かんたら</txt>
</str>
自分ならこうする
<str id="TXT_NANTARA">なんたら</str>
<str id="TXT_KANTARA">かんたら</str>
理由は上記スクリプトの中の文句を見れば、わかってもらえると思う。
次にメニューを日本語化しようとして、Garminのサイトに行き、日本語版ファームを解凍し、
Japanese.gttを入手。
gttはxmlでグロッサリが記述されている。
utf-8でBOMつき、改行コードはCRLF、しかもなぜかアトリビュートは777だった。
喜び勇んで、そのままetrex 30に入れたのだが、動かなかった。
やっぱ日本語版 etrex 30J とは何か違うのか?
etrex30内部のSpanish.gttを見ると、項目が増えているように見える。
これらも入れてやらないと動かないってことだろうか?
こういうときに自分が使うのはperlだ。(Python でもいいと思うけど)
今回はxmlを使うので、cpan使ってXML::DOMとかXML::XPathを入れた。
(ちなみにmacでやってる。)
etrex 30に入っていたSpanish.gtt(別にGerman.gttでもいいんだけど)に対して、
etrex 30J用のファームを解凍して手に入れたJapanese.gttを当てていこうと、
以下のようにコーディング
【使い方】
入手したJapanese.gttはJapanese.gtt.orgへ変更しておく
./conv.pl > Japanese.gtt
とやってリダイレクトする
【注意】
お約束だけど、個人責任でよろしく
できあがったものはutf-8だけど、BOMなし、改行コードはLFのみになる。
アトリビュートは手動で変更したが、必要かどうかわからない。
--- conv.pl ---
#!/usr/bin/perl
use utf8;
use XML::DOM;
use XML::DOM::XPath;
my $parser = new XML::DOM::Parser;
my $jDoc = $parser->parsefile("Japanese.gtt.org");
my $sDoc = $parser->parsefile("Spanish.gtt");
my $jTags;
#日本語からtagとstrの組を覚える
foreach $node($jDoc->findnodes("//gtt/str/*")){
$tag = $node->getTagName;
if($tag =~ /tag/){
$tagvalue = $node->getFirstChild->getNodeValue();
# print "$tagvalue\n";
}
# Garmin さん、XMLなのに順番に依存する作りは良くないよ
if($tag =~ /txt/){
$txtvalue = $node->getFirstChild->getNodeValue();
$jTags{$tagvalue} = $txtvalue;
# print "$txtvalue\n";
}
}
#スパニッシュのヘッダを書き換える
foreach $node($sDoc->findnodes("//gtt/hdr/*")){
$tag = $node->getTagName;
if ($tag =~ /lang/){
$node->getFirstChild->setNodeValue("Japanese");
}
if ($tag =~ /desc/){
$node->getFirstChild->setNodeValue("Japanese");
}
if ($tag =~ /cpage/){
$node->getFirstChild->setNodeValue("Japanese");
}
}
#スパニッシュのtagを読んで、Japaneseのstrを吐き出す
foreach $node($sDoc->findnodes("//gtt/str/*")){
$tag = $node->getTagName;
if ($tag =~/tag/){
$tagvalue = $node->getFirstChild->getNodeValue();
# print "$tagvalue\n";
}
if ($tag =~/txt/){
$txtvalue = $node->getFirstChild->getNodeValue();
if($jTags{$tagvalue} ne ""){
$txtvalue = $jTags{$tagvalue};
}
$node->getFirstChild->setNodeValue($txtvalue);
# print "$txtvalue\n";
}
}
print $sDoc->toString();
---- end ----
【ぼやき】
なんか巷のサイトを見ると、xmlをファイルから読み込むのに面倒くさい事してたり、
getElementsByTagNameでXPathも使わずに読み込んでたり、
どうも自分の感性と違う使い方をしてらっしゃる。
今回入手したGarmin のXMLもひどいもんだ。
こんな感じになってるんだけど
<str>
<tag>TXT_NANTARA</tag>
<txt>なんたら</txt>
</str>
<str>
<tag>TXT_KANTARA</tag>
<txt>かんたら</txt>
</str>
自分ならこうする
<str id="TXT_NANTARA">なんたら</str>
<str id="TXT_KANTARA">かんたら</str>
理由は上記スクリプトの中の文句を見れば、わかってもらえると思う。
2012年9月10日月曜日
iPhone/iPad用バーコード表示プログラム
以前Twitterのiphone_dev_jpで誰かが聞いていたので、作ってみた
iPhone/iPadでバーコードを表示するプログラム
作成にあたり、こちらを参考にしました。
iPhone/iPadでバーコードを表示するプログラム
エラーチェックは単純なチェックしかしてません。
最後尾はCheckDigitなので計算で出すようにしています。
番号も表示するようにしましたが、高さが短いと文字が小さくなりすぎると予想します。
その場合は、フォントの最小サイズを考慮するなどで対処するのがよろしいでしょう。
番号も表示するようにしましたが、高さが短いと文字が小さくなりすぎると予想します。
その場合は、フォントの最小サイズを考慮するなどで対処するのがよろしいでしょう。
作成にあたり、こちらを参考にしました。
2012年9月6日木曜日
SetWindowLong with GWL_HWNDPARENT
Windowsにおいてウインドウには親、子、オーナーが居る(もっと居るけど)
SetParentを使うと、親をセットできる。
SetParentすると、親の領域内で子のウインドウはクリッピングされる。
Zオーダーを静的に維持したいということをよく聞いたりする。
CのオーナーをB
BのオーナーをAとすると、
A→B→CというZオーダーは維持される。
通常オーナーを設定出来るのはCreateWindowExの第八引数にインスタンスを指定したときだけだ。
昔のVBでは frm.Show(vbModeless,Me) とかすると、オーナー指定でウインドウを開く事が出来る。
ところで、オーナーを後から付け替える方法として、大昔から以下のようなAPI呼び出しが使われてきた。
SetWindowLong(hWnd,GWL_HWNDPARENT,parent);
これをやると、後からオーナーの付け替えが出来る。(SPY++で確かめた)
しかし、MSDNによると、これはやってはいけないことらしいのだ。
「親の付け替えを行いたい場合、SetParentを使え」と書いてある。
そして「オーナーを付け変えるAPIはWindowsには無い」ことになっている。
つまり、SetWindowLongにGWL_HWNDPARENTを指定するのは、
サポート外の使い方という事になり、
「オーナー指定はウインドウ作成時に限る」というのが正しい解釈である。
オーナーを付け変えることによる副作用が何かあるのかもしれない。
なんだかわからないけど、使わない方がいいだろう。
SetParentを使うと、親をセットできる。
SetParentすると、親の領域内で子のウインドウはクリッピングされる。
Zオーダーを静的に維持したいということをよく聞いたりする。
CのオーナーをB
BのオーナーをAとすると、
A→B→CというZオーダーは維持される。
通常オーナーを設定出来るのはCreateWindowExの第八引数にインスタンスを指定したときだけだ。
昔のVBでは frm.Show(vbModeless,Me) とかすると、オーナー指定でウインドウを開く事が出来る。
ところで、オーナーを後から付け替える方法として、大昔から以下のようなAPI呼び出しが使われてきた。
SetWindowLong(hWnd,GWL_HWNDPARENT,parent);
これをやると、後からオーナーの付け替えが出来る。(SPY++で確かめた)
しかし、MSDNによると、これはやってはいけないことらしいのだ。
「親の付け替えを行いたい場合、SetParentを使え」と書いてある。
そして「オーナーを付け変えるAPIはWindowsには無い」ことになっている。
つまり、SetWindowLongにGWL_HWNDPARENTを指定するのは、
サポート外の使い方という事になり、
「オーナー指定はウインドウ作成時に限る」というのが正しい解釈である。
オーナーを付け変えることによる副作用が何かあるのかもしれない。
なんだかわからないけど、使わない方がいいだろう。
2012年8月27日月曜日
PAD型電子デバイス
人間はアルゴリズムを考えるべきで、機械的作業は一切行うべきではない。
例えば数独を解く行為は時間の浪費でしかない。
それはゲームをするよりも酷い作業だ。
数独を解くアルゴリズムを考えるのが人間の行うべき作業である。
考える行為は創作活動であり、数独を解く事も漫画を読むことと同様、
ただの暇つぶしであり消費行為でしかない。
さて、ここから本題である。
PAD型電子デバイスは、ただの消費端末になるべきではない。
書き込めるノートであり教科書であり、思考をまとめる道具であり、
いつでもどこでも使える物になるべきである。
と、言うことで、
自分が望むPAD型電子デバイスの姿は以下。
・最低1ヶ月切れないバッテリー。
・指ではなくペンで書け、消しゴムで消せる。
・100m防水、防塵、防弾、酸やアルカリに対して腐食しない。
・-30℃~60℃まで正常に動作する
・成層圏から落としても壊れない。
・たとえ壊れてもメモリーは保持、復旧可能。
これが出来ないということは、
極地でも砂漠でも深海に沈んでいても1000年前の記録さえ復帰できる(可能性がある)紙にも劣るということだ。
そんな物(PAD型電子デバイス)は、本来作る意味さえ無い。
ちょっと大げさな要求仕様だが、
そういう物が作れて、ようやく創作活動に使うにあたり、
必要充分なデバイス足り得る。(まぁ大げさだけど)
これまで、人間の記憶も行為も、すべて時の彼方に消え去ってきた。
個体の寿命はせいぜい60年から70年だ。
出来ることはとても少ない。
しかし、今、人間は互いに積極的に討論する場を得、
第三者の評価も得られ、その行為も未だかつてない正確さで残せるという時代になった。
ここから人間は進化をし始めるのではないかと期待している。
(もうくだらない歴史を繰り替えして欲しくは無い。)
電子化、そしてその操作端末は、これからの人間の進化に必須だが、
今、実現可能な最良と思われる電子デバイスは作られていない。
みな、ジョブズやGoogleの発想に負けない、自分の思い描く最良の電子デバイスを創造してみて欲しい。
すぐに、PAD型にこだわる必要さえない事に気がつくだろう。
自分は、創造を忘れた評論家とは話す口を持たないが、
創造をする人たちとは積極的に話をしたいと思う。
例えば数独を解く行為は時間の浪費でしかない。
それはゲームをするよりも酷い作業だ。
数独を解くアルゴリズムを考えるのが人間の行うべき作業である。
考える行為は創作活動であり、数独を解く事も漫画を読むことと同様、
ただの暇つぶしであり消費行為でしかない。
さて、ここから本題である。
PAD型電子デバイスは、ただの消費端末になるべきではない。
書き込めるノートであり教科書であり、思考をまとめる道具であり、
いつでもどこでも使える物になるべきである。
と、言うことで、
自分が望むPAD型電子デバイスの姿は以下。
・最低1ヶ月切れないバッテリー。
・指ではなくペンで書け、消しゴムで消せる。
・100m防水、防塵、防弾、酸やアルカリに対して腐食しない。
・-30℃~60℃まで正常に動作する
・成層圏から落としても壊れない。
・たとえ壊れてもメモリーは保持、復旧可能。
これが出来ないということは、
極地でも砂漠でも深海に沈んでいても1000年前の記録さえ復帰できる(可能性がある)紙にも劣るということだ。
そんな物(PAD型電子デバイス)は、本来作る意味さえ無い。
ちょっと大げさな要求仕様だが、
そういう物が作れて、ようやく創作活動に使うにあたり、
必要充分なデバイス足り得る。(まぁ大げさだけど)
これまで、人間の記憶も行為も、すべて時の彼方に消え去ってきた。
個体の寿命はせいぜい60年から70年だ。
出来ることはとても少ない。
しかし、今、人間は互いに積極的に討論する場を得、
第三者の評価も得られ、その行為も未だかつてない正確さで残せるという時代になった。
ここから人間は進化をし始めるのではないかと期待している。
(もうくだらない歴史を繰り替えして欲しくは無い。)
電子化、そしてその操作端末は、これからの人間の進化に必須だが、
今、実現可能な最良と思われる電子デバイスは作られていない。
みな、ジョブズやGoogleの発想に負けない、自分の思い描く最良の電子デバイスを創造してみて欲しい。
すぐに、PAD型にこだわる必要さえない事に気がつくだろう。
創造をする人たちとは積極的に話をしたいと思う。
登録:
投稿 (Atom)
-
どうも書かなくてはならないネタが出来てしまった。 マルチスレッドには欠かせないSleep(0)についてだ。 自分はSleep(0)を多用していた。 MSDNの記述 によると 「中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは自らに割り当てられている...
-
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-bindi...
