忍者ブログ
(過ぎたことは忘れちまえ)つらつら書くなり
カレンダー
05 2025/06 07
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
プロフィール
HN:
lenguasydialectos
性別:
男性
ブログ内検索
[1] [2] [3]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

最近web系のプログラミングにはまっていて、googleAPIをさんざんいじくっていたのだが、yahooにも色々とおもしろい機能があるようなのでいじってみることにした。
あまり知られていないことだが、検索エンジンの裏では文章の構文解析を行っており、どれがどの単語と関連性が高いのか、などを判定して正確な検索結果を出すということに日夜腐心している御仁たちがいるわけだ。
 
そういう人たちが作り上げた機能の一部を一般向けに公開しているということなので、ためしに簡単なアプリをflashで作ってみた。前のようにjavascriptを使ってHTML主体で作ることができれば良かったのだが、javascriptのxmlHttpRequestは同一ドメイン内のデータしか読み書きできないので、そういった制限が割と少ないflashで作ることに。
 
解析自体はAPIのおかげでかなり簡単で、自分のyahooAPIのIDと解析したい文字列をWEB用にエンコードして指定のアドレスに送ってやるだけでいい。そうするとXML形式で解析結果が送られてくるので、自分で好きなように組み替えて使うことができる。
 
ところが、このXMLはactionscriptのxmlパース機能が直接適用できないようになっていて、そこに結構苦労してしまった。独自のnamespaceを定義してある為、actionscriptのコード内で、どんなタグをこれから解析しますよ、ということをいちいち書いておかないといけない。
 
つまり
Function xmlData_Loaded(e:event){
              var xmlDoc:xml=new xml(e.target.data);
              var aElement:XMLList=xmlDoc.elements(‘something’);
              //ここでXMLデータから直接要素を取り出すつもり。
              for(var i:uint=0;i<aElement.length;i++)someTextBox.appendText(aElement[i]);
}
では全く動かず、あらかじめ使う要素を指定してやる必要がある。
つまり、
var nSpace:Namespace=new Namespace(“urn:yahoo:jp:jlp”);
//使用する名前空間を指定
var somethings:QName=new QName(nSpace,”something”);
//名前空間内で定義されているタグの名前も指定。
 
Public function xmlData_Loaded(e:event){
              var xmlDoc:XML=new XML(e.target.data);
              var someElements:XMLList=xmlDoc.descendants(somethings);
              //このように上で明示したタグを使って子要素を取り出す
              Var i:uint=0;
              while(someElements[i]!=null){
                        someTextBox.appendText(someElements[i]);
                        //ここで適当にテキストボックスに出力してやる。
                        i++;
              }
             return;
}
のように、NamespaceとQNameを使ってどんなタグを使うかを明示する必要がある。
 
出来たのがこれ。
 

下のテキストボックスに適当に日本語文を入力して、ボタンをクリック。タブは使えません。
PR
最近、自宅でネット接続環境を利用する機会が増えたのだが、居間にあるパソコンは共用なので自由に使えないのがもどかしかった。
自分専用のネット回線を引こうかとも思ったのだが、コストを考えて、無線LANを構築することにした。最近の製品はよく出来ているし、ネットにも情報があふれているので、そんなに難しいことではない。
 
ただ、はじめてやることなので、わかりづらいこともあり、結局設定を終えるのに2日かかった。PCを接続するだけなら付属のソフトを使えば半自動でやってくれるのだが、セキュリティの設定などをしたい場合、手動でやらなければならない。というのも、もともと使っていたモデムにルーターの機能が付いているので、LAN接続の設定を一度終了すると、リセットしないとモデムの設定画面にアクセスできないからだ(自分のPCに接続されているハードウェアではなく、プロバイダのLANの一部になってしまう為、手元のPCから接続できなくなる)。
このことを理解するのに一日かかったので、2日目にようやく設定画面を呼び出すことができた。
 
付属のソフトはとにかくすべての設定をデフォルトのままにしてしまうので、セキュリティを考えた場合、ちょっと問題がある。パスワードやユーザーネームなどが丸わかりになってしまうので、無線LANにアクセスし放題になってしまう。
しかし一度変更したのでほぼ問題はないと思うし、結構ハードウェアの勉強にもなった。
 
これでいつでも自室でネットがつかえる!
WEBアプリのデバッグもこれでサクサク進むだろう。
この間わからなかったGoogleAPIの問題が解決したので覚書。

結局どういうことだったのかというと、ある特定の関数内で定義されたひとつの変数を使用して、無名関数を設定したインスタンスをforループ内でGMapのイベントリスナーに登録しても、最後の一つ以外はアクセス不能とみなされて削除(たぶんガーベッジコレクション)されてしまう。

つまり、
function createSomething(g_Map){
  var something;
    for(i=0;i<10;i++){
    something= new kind_of_thing(function(){do_something();});
    g_Map.addListener(something);
  //ここでまとめてグーグルマップにインスタンスを登録しようとする。
    }
  return;
}
はダメで、
function getSomething(){
  return new kind_of_thing(function(){do_something();});
}

function addSomethingToGMap(g_Map){
  for(i=0;i<10;i++){
    g_Map.addListener(getSomething());
  }
  return;
}
のように、関数を分割して、
リスナー登録関数に直接インスタンスを渡さないと機能しない。
らしい。(ようするにポインタの機能はないってこと)

解決してみれば何のことはない、記述の曖昧さが招いた単純ミスだった。
スペイン語まとめサイトを作るにあたって、
グーグルマップなどを使ってみたかったので、
googlecodeを色々と見てみたのだが、
なかなか難しい。

javascriptだとデバッグが難しいので、すごく時間がかかるし、
ネットに接続している時間も短いのでなかなか進まない。

とりあえず地図を表示して、マーカーを表示するところまで作ったのだが、
マーカーをクリックすると詳細が見られるようにしようとしたら、
不可解な挙動をして、エラーになってしまった。

サンプルのまねをして修正してみたが、全く動かない、
というかメモリ上の変数がどこかへ消えてしまっている?感じだ。
javascriptなんて5年ぶりくらいにいじるので忘れてしまった。
また本でも買ってこないといかんなぁ。

正確にはバネでつながった吊り橋のようなもの。
物理現象のプログラミングの中でも単純なほうだが、バネをプログラミングしてみた。
十字キーの上下でバネ係数の上下
左右で物体の重さの上下ができます。

動かしてみるとなかなか面白い。
バネ係数をあげすぎると伸びた分より戻る力が大きくなって、
どこかへ吹き飛んでしまいますのでご注意。

wonderflというサイトを前に紹介したけど、
そこで公開されているプログラムは結構すごいものが多くて、
自分が作ったものを公開するのがちょっと恥ずかしい感じがするので、
ブログでひっそりと公開してみます。

まぁ見るのは数人だと思うけど。

この動きの再現には二次元ベクトルを使っています。
自分がつながっているオブジェクト(隣の物体ね)毎に、
隣と自分の位置の差にばね係数をかけたものを求め、
それらすべての合計に摩擦係数を掛けると、
フレーム毎の方向ベクトルが求められる。
文章にするとめんどくさいね。

最近wonderflっていうサイト(とそれを作った会社)が面白い。
http://wonderfl.kayac.com
ネット上でactionscriptを書くと、flashに変換してくれるサービス。
無料だし、他の人が書いたコードも見られるし、
自力自習の文系人間としては、すばらしいサンプルの宝庫といえる。

もちろんすばらしくないサンプルもあるが,,,

というわけで最近は夜な夜なフラッシュ作りに励んでいます。
まだ他人に見せられるようなものはできていませんが、
一寸面白いものが出来たらここでも公開してゆこうと思います。

あとこのサイトのすばらしい所は、
素人にもコンピュータープログラミングの内幕を垣間見られる事。
普段は決して目にする事の無いプログラムのコードを見ると、
世の中のgeekどもがどれだけの精進をして
コンピューターを制御しているのかがわかります。
もう少しプログラミングに感謝してみましょう!

といっても、何時の世も自分の手を汚して働く者たちには冷たいんだよね,,,

いや、他人にとっては別に同でもいいことですが、
一寸前に作っていたものに手を加えてみたので、
備忘録としてかいておきます。



炎シミュレータの発展版として、花火シミュレータを作ろうと
思っているのだが、ナカナカ難しい。
このナイアガラ風のもので、既にパーティクルが1000を超えている。
しかも余り綺麗じゃない。
炎のテクスチャをもう少しまともなものに変えよう。
もう少し効率の良い方法がないかどうか、調べないといけない。



打ち上げ花火風のもの、処理があらくて、
線の継ぎ目が見えてしまっているのはご愛嬌。
これでも作るのに一時間くらいは掛かった。

真ん中に小さく見えている「16」は、
FPS「Frame Per Second」で、一秒間に何回画面を更新しているか、
をあらわしている。

人間の目は結構凄く、FPSが30位でもかくかくして見える。
50程度までゆくと、滑らかな動きに見える。
因みに、テレビ等は50や60に設定されている。

16と言うのはお話にならないくらいの遅い速度なので、
改善しないといけないが、これのパーティクルは5000くらいあるので、
どうやって減らそうか、思案中である。
処理を単純化しようと思って、
むやみにパーティクルを使いすぎなのかも知れない。
うむー。
最近機械(コンピュータ)ばかりいじっているのだが、
どうにも避けて通れないものが出てきた。

力学,,,

高校で文系コースだったので、
ほとんどやった記憶なし。

大学でも地磁気とか重力の講義は受けたけど、
力学自体はなぁ。ほとんど手付かず。

いや、今までどおりのソフトを作るだけなら、
別に力学なんて必要ないし、
実際問題として、そんなこと必死に勉強する価値があるのか、
自分でもよく分からない。

しかし、好奇心を殺すようなまねは余りしたくない。
あれもしたいこれもしたいじゃ、
何も出来ずに終わる可能性が大なんだけど。
これは今までもやっていたことをさらに発展させるため。
だとすればやらない手はない。

と思ったのだが、これが結構ややこしい。
計算自体はそれほど難しくないのだが、説明文が難しい。
なんというか、暗黙の了解事項のようなものが有って、
全体の意味をつかむのが難しい。

たとえば、

問題:
「箱を1500N(ニュートン)の力で、
押したとき、摩擦抵抗力が50Nである。
2m押したときの仕事量はいくらか。」

俺:
一メートルうごかすのに必要な力はいくらですか?
(答えを見たら、どうも1500Nで1m動くらしい。
でもそんなことはどこにも書いてないじゃないか)

Nと言うのは、一メートル物を動かすときの力と決まっているらしい。
本を何度も読み返しての類推だが。明示的に書いてないよ。
どうももっと他の教科書も必要らしい。
先は長い。

Ps:wikiで調べてみた。
ニュートン:1kgの質量を持つ物体に1m/s二乗の加速度を生じさせる力

すると、つまり1500ニュートンなら、1kgの物を、
秒速1500メートルにまで加速すると言うことになりますね。
どれだけ動くかに関係するのは、
どれだけ摩擦があるかと言うことだけか,,
なるほど。
忍者ブログ [PR]