iframeのloadイベント 【書き直し】

今月の初めに書いた投稿が、完全に勘違いだったので、削除して改めて書き直し。

jQuery(1.7.2)でiframeを動的に生成して、そのloadイベントを書いてたときに、どうしても理解できないことが一つあります。
たぶん、僕が無知なだけかもしれませんが・・・

// <a id="test" href="http://somewhere.url/">iframeにリンク先をロードさせる</a>
// というような、HTMLがあって、

;(function($)
  {
    $('a#test').click(function(ev)
                      {
                        ev.preventDefault();
                        ev.stopPropagation();
                                          
                        //クリックされたアンカータグのhref属性を保存。
                        var href = this.href;
                        
                        //デバッグ用のカウンタ
                        var count = 1

                        //iframeを生成して、そこに読み込ませます。
                        var $iframe = $(document.createElement('iframe')).appendTo(document.body);
                        
                        //onloadイベントでチェック
                        $iframe.load(function()
                                    {
                                      console.log([count++,this.src]);
                                    });

                        //普通に読み込むと、ログには [1,'http://somewhere.url/'] が表示されます。
                        $iframe.attr('src',href);
                        
                        //window.setTimeout(function(){$iframe.attr('src',href);},100);
                        //しかし、IEやFireFoxだとsetTimeoutメソッドで強制的に非同期で読み込ませると、
                        //ログには・・・
                        //---------------------------
                        //[1,'']
                        //[2,'http://somewhere.url/']
                        //---------------------------
                        //と表示され、2回コールされています。
                        //しかし、safariやchromeなどのwebkit系のブラウザでは1回しかコールされません。
                      });
  })(jQuery);

単純にsrc属性を設定してロードした場合だと、どのブラウザでも1回しかコールされない。
だけど、setTimeoutを使用してロードを遅延(非同期)実行させると、IE/Mozilla系ブラウザは2回コールされる。
ただ、タイムアウトミリ秒を1とか10とかのようにすると1回しかコールされないときもある。

よく分からない。そういうものなの???

メモプリ

ソニーのCybershot RX-100を買った時のポイントと前からあったポイントで、前からちょっと気になってたカシオのmemopriをゲット。店頭で実際にみてみると、結構大きい。僕がネットや雑誌なんかで見て想像してた大きさより、ちょっと・・・いや、かなり大きく感じた。
スマホからBluetoothで入力できる機種とどっちか迷ったんだけど・・・どうせなら、全部入りのバージョンも作ってほしかったな・・・。

で、スマホ用のバージョンは、どういうわけか、Android専用。iPhone用のアプリがないとさ。今ひとつ感上昇。
僕のもってるiPhoneじゃプリントでけへん、というわけで、ちょっと大きいけど、T10タイプをチョイス。

CASIO memopri

ちょうどエネループが4本余ってたんで、エネループで使用中。机におくとちょっと邪魔になるけど、便利は、便利です。
クリアファイルのラベルや、付箋がわりに重宝してます(^^)

が、もうちょっと改善してほしい点が・・・。

手書きできる横幅が狭すぎる。
2回に分けてプリントしようと思ったけど、一度プリントすると必ず紙送りされてしまう。プリントが終了しても紙送りをしない設定があれば・・・と思うんですが・・・そんなことを思うのは僕だけ???
手書きじゃなくて、ラベルとか、USB接続してPCからだと横幅関係なくプリントできるのにね・・・。

Bluetooth機能をつけて、Bluetoothキーボードで入力させてほしい
はじめにも書いたけど、少々高くなってもいいから、Bluetoothも積んでほしい。

ま、あくまで電子文房具のジャンルなんで、高機能過ぎても売れないのかな。

サーバーサイドにHTMLビュー出力は要らない?

最近 jQuery Mobile のフレームワークを使って、今まで作ったWebアプリ(かっこよく言えば・・・ですがw)をスマートフォン向けに手を加えています。
jQuery Mobile をかじり立ての頃は、なんとなく、最終的に結果を吐き出すHTMLテンプレート部分をスマートフォン用に用意すればいいだろう?、なんて簡単に考えていたんですが・・・、それは甘い考えだったようです(ーー;;;

なんというか、極端に考えれば簡単なWebアプリなら、サーバーサイドでHTMLビューを作成してクライアントにHTML出力を返す、というような工程はハッキリ言って要らないんじゃない? と。サーバーサイドのプログラムを単にJSON形式を返す、簡単にいえばREST形式のウェブAPI仕様にしてしまえば、HTMLビューは、クライアントサイドのJavascript(ECMA Script)で全部任せることができる。

クライアントサイドJavascriptにHTMLビューの作成を任せてしまえば、サーバーサイド側の実装が簡潔になるし、メンテもラクになる。今時のクライアントマシン(モバイル端末を含めて)は例えエントリ向けであっても性能が無駄に?性能が向上しているので、スペック的なパフォーマンスは考えなくていい。

サーバーサイドのプログラム(PHPであれ、PerlのCGIであれ)は、単にデーターベース情報の出し入れを仲介するだけ、と割り切ってしまえば・・・とか思いましたが・・・クライアント側にJavascript実行環境が無ければ、全く機能しないことになる。そういう作り方が、はたして良いのか悪いのか。

どの程度までクライアントサイドにHTMLビューを任せればいいのか、そのバランスがなんとも悩みどころ。。。というか、サーバーサイドでHTMLビューの作成がどうしても必要なケースって僕が作る用途では少ない気がする。円グラフや棒グラフなんかも、HTML5で描けちゃうし。

それに、なんと言っても、DOM + jQuery の方がHTMLを組み立て易いし、はるかに簡単!
結局、僕の中では、Webアプリはクライアントとデータ(データーベースとかクラウド上の何かしらのデータ)をくっつけるグルーみたいなもん、という認識に変わりつつある。jQuery Mobile は、そのきっかけになった気がする。


HTMLビューを単にjQuery Mobile用のHTMLに書き換えただけのプログラム(CGI/Perl)。スマホならページナビゲーションは、「次のXX件を読み込む」でAjaxとかで続きを読み込むのが普通かな。

TortoiseSVN 1.7.7でクライアント認証が失敗する

アップデートされた、というダイアログが出たので、アップデートしてみると、
commitもupdateも、認証に失敗して何もできなくなってしまった。

サーバーは、SSL(Apache)+クライアント認証で使ってて、 TortoiseSVN 1.7.6のときはフツーに使えてたんだけど・・・1.7.7にしたら認証が効かなくなった。

保存されている認証データをクリアし、%APPDATA%Subversionauthsvn.ssl.serverも削除、レジストリのHKLMSoftwareTigris.orgServersサーバー名ssl-client-cert-file のエントリもクリアして試してみたけど、駄目(ーー;;;

しょうがないので、1.7.6に戻したら・・・今度は言語が日本語にならず・・・もう散々(^^;;;

一旦、アンインストールして、%ProgramFiles%TortoiseSVNフォルダを削除して1.7.6をインストールしなおしてやっとこさ元通りに・・・。

やっぱりバージョンアップしたからって、すぐにアップデートすると痛い目見ますね・・・。とほほ。
これって何か特別な設定が必要になったんでしょうかね??? 単なるバグならすぐ治るからいいけど・・・。

最近 ネットでの情報がGit に関連するものが多くなってて気になってはいるんですが・・・個人でやるにはいまいち大袈裟なんですよねぇ。。。流行りものは、やはり手を付けておくべきなんでしょうか(^^;

jQuery Mobile は簡単だけど・・・

スマートフォン全盛ですね。こないだ、グーグルマップの地図を見ながら歩いていたら電柱にぶつかって恥ずかしい思いをしたことは内緒です(^^;; 便利です。

便利なので、少し前にjQuery Mobileのオライリー本を買ってHTMLを入力しつつ勉強しているのですが・・・正直めんどくさい。
なんかこう、jQuery Mobile UI の ビルダー みたいな、ソフトないのかなぁ? と思って探したら、Webサービスでそういうサイトがあるにはあるんですが有料でしかも英語だからよくわからん。

やっぱり今度出る Adobeの CS6 の DreamWeaver ぐらいしか選択肢ないのかな。。。
バージョンアップしたいけど、CS4 WebStandardからだと、10万円超。
使いたいのはDreamWeaverとFireWorksだけなので、単品で買うと、計9万円。
FireWorksだけ買って、Dreamweaverは年契約月額2200円プランにするとだと、初期コストは安くつくけど、トータルで考えると割高。でもこれってサブスクリプションバージョンとリテール版を一つのPCにインストールして使えるのかな・・・。

サブスクリプションの価格が高すぎるんだよなぁ。。。

というようなグチはともかく、、、
iPhone用になんか作ってみよう・・・というわけで、ちょっと前にテレビでやってた映画で見た、プレイフェア暗号を表示させるものをつくってみた。

暗号計算部分は、簡単にできると思ったけど、ほぼなんの工夫もなく適当に作ったので本当に合ってるかどうかの検証はしていないけど、まぁいいや(^_^;;;

プレイフェア暗号 with jQuery Mobile
(スマホ用。ブラウザでも見れるけどかなり間抜けな表示になる)

HTMLを手入力するのは正直ホント面倒だけど、CSSの編集とかボタンの画像の配置だとか、HTML入力以上に厄介な作業がゼロなので、javascriptのコーディングに集中できる、という点で、デザイナー向けというより、プログラマーやコーダ-にとっては非常にありがたいライブラリなんじゃないかと思いますね。

あとは・・・フリーのUI ビルダーなツールが欲しい。そのうち、テーマローラーみたく、本家サイトで公開してくれるのかも・・・という淡い期待をしてまつ。