久しぶりにmixiアプリの事を調査したよ。

多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど
ぐぐってもわからなかったので。。

iframeで外部ページを埋め込めるか?

mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。

つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて
さらにその中で別ドメインなコンテンツを表示できるのか?

結論としてはできる。 ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。

iframeの中にfacebookアプリを埋め込んだりもできたよ。
でもmixiアプリ上で認証させるのは多分規約違反。

iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな?

どうでしょう?

Flashから外部コンテンツとの通信

OpenSocialのFlash埋め込みAPIを使って、配置したSWFから
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。

これもできる。相手のサーバから拒否されてなければ。

JavaScriptはXHRを使えないから(ひょっとして使える?)、makeRequestするわけだけど
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。

makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。

Posted in actionscript3.0, javascript at 11月 19th, 2009. No Comments.

最近人にプログラミングを教えるというような事があって、「オブジェクトの正体」を理解してもらおうという目的から いろんなリテラルをinstanceofにかけていました(FireFox3のFireBugで)。

  1. [1,2,3] instanceof Object // => true
  2. { a:0, b:1} instanceof Object // => true


こんな感じで。 しかし文字リテラルの挙動が期待と違っていました。

  1. "a" instanceof Object // => trueかと思いきやfalse
  2. "a" instanceof String // => trueかと思いきやfalse


ちょっと待ってほしい。 文字リテラルも文字列クラスのインスタンスですよー、なんて解説をしようと思ってたのに これじゃぁ、文字リテラルはStringオブジェクトじゃないという事になってしまう。

事実として

  1. "hoge".sub("o","a") // => "hage"


というコードが実行できるのだから、文字列リテラルがStringオブジェクトじゃないと話が合わない。だってsubメソッドはStringのインスタンスメソッドじゃないか!

結論

答えはここにありました。

Literals - MDC(文字列リテラル)

String Object - MDC #文字列リテラルは String オブジェクトとは別物

文字列リテラルの値でなら、String オブジェクトのどんなメソッドでも呼び出すことができます。JavaScript が自動的に文字列リテラルを一時的な String オブジェクトに変換し、メソッドを呼び出し、その一時的な String オブジェクトを破棄するのです。String.length プロパティを文字列リテラルで使うこともできます。

という事なんですって。

つまり、文字列リテラルの状態では確かにStringのインスタンスではないけれど、メソッドを呼び出す時はJavaScriptがStringオブジェクトに変換していると。なるほど。

ちなみにこのエントリーの内容はMozilla FireFoxでしか試していませんし、Mozillaのサイトでしか結論を見つけていませんので、他のブラウザでどうなのかは一切調べてませんので悪しからず。誰か暇な人は調べてトラバください。

Posted in javascript, 日記 at 10月 14th, 2008. No Comments.

ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの 埋め込まれているページのURLを取得する方法。

  1. import flash.external.*;
  2. var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));


ExternalInterface.callの1番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが

  1. ExternalInterface.call("myMethod","args1","args2");


は単純に以下のようなJSが実行されているものと考えられるので

  1. eval("myMethod").apply(window,["args1","args2"]);


まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。

Posted in actionscript2.0, actionscript3.0, flash, javascript at 8月 30th, 2008. No Comments.

prototype.jsで関数のスコープを任意のオブジェクトに委譲する Function.bindメソッドはイベントのコールバック関数なんかで使うのにすこぶる便利なんだけど jQueryには意外とそれっぽい機能がないように思う。 ので応急処置として以下のコードを書いておく。

  1. jQuery.scope = function(target,func){ return function() { func.apply(target,arguments);}};


こう使います。

  1. $.ajax({
  2.   url:'hoge.xml',
  3.   complete: $.scope(this,handleComplete)
  4. });
  5. function handleComplete(data,status){ ... }


スコープを渡さないで実行すると、コールバックのスコープはイベント自身なんだけど クラス内で$.ajaxを使いたい場合なんかは不都合ですんで。

時間があれば、さくっとプラグインにしておきたいけど プラグインにするほどのコード量じゃないし、 プラグインは別ファイル化するのが一般的だから、いちいち面倒くさいし。

ちなみに、これはActionScriptでいうところの mx.utils.Delegate.createと全く同じ機能ですね。

Posted in ajax, javascript, jquery at 2月 21st, 2008. 3 Comments.

ソースコードが公開されたfastladderをさっそくインストールしてみた。 http://code.google.com/p/fastladder/ 環境はMac 10.5 INSTALL.txtを読むのが一番だよ。

SVNからチェックアウト

  1. % svn checkout http://fastladder.googlecode.com/svn/trunk/ fastladder-read-only


必要なライブラリをgemでインストール

  1. $ sudo gem install rails --version 2.0.2 -y
  2. $ sudo gem install rfeedfinder
  3. $ sudo gem install feed-normalizer
  4. $ sudo gem install opml
  5. $ sudo gem install mongrel
  6. $ sudo gem install sqlite3-ruby


libfreeimage-3.10.0.dylibをlib以下に移動

  1. cp freeimage-darwin/libfreeimage-3.10.0.dylib fastladder/lib/


DBを初期化

  1. cd falstladder/
  2. % rake db:create:all
  3. % rake db:migrate


サーバを起動

  1. script/server


確認

http://127.0.0.1:3000

Posted in javascript, mac, ruby on rails, 日記 at 2月 7th, 2008. No Comments.

jQueryでホットキーを処理するメモ

どの入力フォームにもフォーカスしていない場合 nとpで特定の処理を実行するサンプル

  1. $(this).keypress(
  2.   function(e)
  3.   {
  4.     if( $.inArray(e.target,$('input')) <0 )
  5.     {
  6.       if( e.which==112 )
  7.       {
  8.         hoge();
  9.       }
  10.       else if( e.which==110 )
  11.       {
  12.         foo();
  13.       }
  14.     }
  15.   }
  16. )


Posted in javascript, jquery, 日記 at 2月 1st, 2008. No Comments.

http://www.schillmania.com/projects/soundmanager2/

このFLV版を作るのは結構容易いだろうなぁと思った。 最近特に何もしてないし 比較的FLVとExternalInterfaceは得意だから作ってみようかなぁと。

AS3.0でFLVを再生するくらいのスクリプトなら、5分もあれば書ける。ていうか書けた。

基本的なUIをHTML側にやらせて、 それをFlashに以上するだけだから

  1. flv = new FlvJS();
  2. $('flvplayer').apendChild(flv);
  3. flv.play('hoge.flv');


てなJSを書いたら ExternalInterface経由で、そのままNetStreamに委譲すればいいわけだ。 あと基本的なイベントのコールバックも受け取れるようにすれば。

そういうのは、eyevioで何回も設計実装してるから作れるぞ。 むしろそのまま採用して欲しいくらいだぞ。

ま、問題は作る時間があるかって話だね。ははは。

Posted in actionscript3.0, javascript, 日記 at 6月 20th, 2007. No Comments.

久々のエントリーです。

最近はまったく忙しくて、全然勉強する時間もありゃしません。

弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて それに触発されて、自分もいろいろ書いてみて、社内でシェアしたものをうpします。

まるごとJavaScriptを見ていて、クロージャっていいよね。という気分だったので クロージャをおさらいしてみました。 Read More...

Posted in javascript, programing, 日記 at 3月 16th, 2007. No Comments.

Canvasの存在を知った時に、とりあえず作ってみたサンプルが そのままデスクトップに放置してあったので公開してみます。

サンプルはここです。

忙しくて全然手を付けられないや。

Canvasを使ったグラフライブラリはいくつかあるけど グラフ以外にCanvasの良い利用法って何かねぇ・・・。 全然思いつかないや。 Read More...

Posted in actionscript3.0, flash, javascript, 日記 at 2月 9th, 2007. No Comments.

また新しいJavaScriptフレームワークの登場らしい。

結構いいなぁと思うんだが、すでに選択が難しいよね。

http://docs.mootools.net/files/Core/Moo-js.html

Posted in ajax, javascript, programing at 1月 31st, 2007. No Comments.