2008年11月22日土曜日

久々にGAEのSDK更新

GAEのSDK1.1.6が出ました。
(日本語のダウンロードページは相変わらず1.1.0のままですので気をつけましょう)

久々ですね。1.1.2~1.1.5までは2~3週間でバージョンアップしてましたが、今回は1ヶ月半以上。
完成度が高くなってきてあんまり直す内容もないのかな、、、と思いきや、今回も割と盛りだくさんな内容。

でも自分の使ってるAPIにはあまり関係がないようだ。
というかそれ以前に、最近はPush It!の開発・テストのメインは、GAE本番サーバの開発専用ドメインだったりするので、SDKの擬似Webサーバ(dev_appserver.py)の改修はあまり関係なかったりもする。

ま、でも一応入れますけどね。
(appcfg.pyの改修は関係ありますし)

☆☆☆☆☆☆☆☆☆☆ 宣伝 ☆☆☆☆☆☆☆☆☆☆☆
インターネット越しに共有可能でありつつ、オフラインでも使える付箋紙ソフト、
Push It!をぜひとも使ってみてください。

2008年11月20日木曜日

CSSでDIV要素の行の高さを揃えよう

以前のエントリCSSのシブい技にて、CSSを使って横並びのDIV要素の高さを揃えようって話を書いたんだが、しばらくしてみて不具合発覚。

同一ページ内のリンクをクリックしてジャンプすると、上の方の内容が隠れてしまうのです。
これはやっぱり見えないけどこっそり存在しているpadding領域のせいなのかな?

う~ん、今度こそJavaScriptですか~?と思っていたところ検索してみると、CSSを使った別の方法が見つかりました。

複数カラムの高さをそろえるクロスブラウザなCSS | CREAMU

というやつで、簡単に言うと、DIV要素を重ねて、列の幅のぶんだけずらしていく方法(はみでたところはやっぱり隠すんだけど)。

前よりこっちの方がマニアック度は低いかもしれない。
だが、widthとかleft/rightの値に何を設定すれば良いか、すぐに頭の中で算出できない自分がいました。
でもとりあえず同一ページ内リンクでもくずれなくなったし、FireFox/Chrome/IEどれ使ってもちゃんと同じように表示されたし(ついでにmargin/paddingとwidthの同時指定によるIEのバグにも引っかからなくしたし。これはまたいつか書こう)、言うことなし。

しかしいろんな方法があるもんだねぇ。。。
昔ながらのtable使ったレイアウトの方が100倍楽だよな~。。。

2008年11月19日水曜日

AJAXで取り込んだHTMLのtable要素が表示されない件

タイトルの通り、Push It!において、AJAXで取り込んだHTMLの中にtable要素が含まれる場合にIEだとどーーーーーーーしても表示されない件で悩み続けて1週間。

ようやく解決方法が分かりました。

table要素とtr要素の間にtbody要素が必須、なみたいだ。
AJAXでない普通のHTMLだと、tbodyはオプションなのだが、なぜかAJAXだと厳密にその辺を要求するらしい。IEだけは。まだIE6でしかテストしてないけどIE7でも同じだろうな。
もちろんtbodyはあってもいい存在なので、FireFoxやChromeでもtbodyがあっても問題ない。よって、ブラウザ別にコードを分ける必要はなくて常にtbodyは入れておいて良い。

いやしかし、、、長かった。ここに至る道は、ほんとに。
どうやって検索しても見つからないんだもんな~。これって常識?
XML(もしくはJSON)を取り込んでそれを表に整形する、とかは見つかるんだけどね。別に自分はそんなにAJAXで取り込んだデータをあれやこれやと使いまわす気もなかったのでまんまHTMLを取り込んでそれをそのまま表示させていたのだけど、どうしてもだめならXMLで取り込んで整形して表示しようとも思ったりした。
そこまで思いつめてたのだ(ま、そっちの方がスマートなのは重々承知してますが・・・)。
いや、でも、ほんと、なんで見つからないんだろ。。。

☆☆☆☆☆☆ 宣伝 ☆☆☆☆☆☆
AIR版とブラウザ版(FireFox/Chrome/IEの動作を保証・・・するつもりでがんばってます。表示はしょぼいけど)の2種類のIFでいろんなニーズにお答えするオンライン&オフライン付箋紙Push It!をどうぞよろしく。もちろん無償です。

2008年11月17日月曜日

「AIRのCookieの扱い」のその後

「AIRのCookieの扱い」
のエントリで書いたとおり、AIRがURLRequest等を使ってHTTPアクセスした場合のCookieはWindowsの場合はIEのCookieとして(Macの場合はSafariか?)保存される。

従って、AIRアプリからnavigateToURL関数でブラウザを開いた時、通常使うブラウザがIEでない場合Cookieが引き継がれないので、Cookieに認証情報を持たせていた場合、開いたブラウザの方で再度ログイン操作をユーザに強いることになって不便、という話を書いた。

で、しょうがないから以下のようにしてみた。
(1) AIRクライアントは、自分の使ってるCookieを知ってるので、navigateToURLを実行する時にクエリの一部としてCookieを持たせてやる。
(2) サーバ側にはそのクエリをCookieとして設定してやるページを特別に用意する。
(3) ブラウザは最初に(2)のページにアクセスしCookieが設定され、その後目的のページにリダイレクトする(そのように(2)を作っておく)。
(正しくはちょっと違うやり方を取ったけど、詳細は伏せておこう。大枠はこんな感じだ)

Cookieをクエリとして送るのはセキュリティ的にどうなのという気もしないではないが、そもそもCookie自体、毎HTTPアクセス毎に飛んでるわけで、それを見られたらセッションをのっとられることには変わりはない。そう考えると、ま、いっか、と思う。

どなたか反論があればお願いしまっす。

(2009.11追記)
補足が「AIRでCookieで」にあります。

☆☆☆☆☆☆☆ 宣伝です ☆☆☆☆☆☆☆
そんなことをしながらちょっとずつですが着実に使いやすくなりつつある付箋紙ソフト、Push It!をぜひ使ってみてください。
オンラインでもオフラインでも使えて知り合いと共有もできてWindowsでもMacでも使える付箋紙ソフトです。
興味がある人は右上のリンクから。

2008年11月15日土曜日

BloggerとAdSense

見て分かる通りこのブログはGoogleの提供するブログサービスであるBloggerを使ってます。
Bloggerはレイアウトを割と自由に設定できて、コンテンツの周りに自分の好きな部品を追加できたりします。

自分で作った部品でももちろんOKなんですが、Bloggerが用意してくれてる部品をはっつけるのももちろんアリです。

で、そんな用意された部品の中にAdSenseてーのがありまして、このページの右のエリアにある通りなんですが、ま、広告です。ページ表示回数やクリック回数によってブログの管理者に収益が発生する仕組みです。

で、さてさて一方そのAdSenseですが、当然こちらにも管理するためのページがございまして、自分が持っててAdSenseを貼り付けてあるページで、どのくらい表示されたか、クリックされたかがわかるようになってるんです。

が。

どうにもこうにもBloggerで表示されたはずのAdSenseが集計されていないような気がする。
AdSenseにはチャネルという名でサイトを管理してるのですが(厳密にはちょっと違うのかな?)、このブログのチャネルの集計を見てもデータがないとかぬかしおる。

そんなこんなで気になって調べてみると、
Bloggerで追加した広告をAdSenceでチャンネル管理できないのですか?
こんなページが見つかりました。

結論としては、チャネル別統計とサマリーの差分がどうやらBloggerで設定したAdSenseの結果のようだ。そしてカスタムチャネルでは集計されず、URLチャネルだとOKらしい。なるほど。。。

しかしそれじゃあ細かい分析ができんので、URLチャネルを使うか、AdSenseをBloggerの用意した部品ではなくHTML/JavaScriptコード貼り付けにすると行けそう。ということでそれぞれでトライ中。

しかし、部品を用意するのはいいけどその辺りまでちゃんと手を延ばして欲しいなあ。。。
どうもGoogleは新しいサービスをばんばん出すのはいいけど、その後のフォローがいまいちな感じがするのは自分だけか。
もはやMSやYahoo!も超えて業界を代表する企業になりつつあるのだから、そのあたりキッチリしてもらわないとね。そこらのベンチャーとは違うんだよ。

日本語を含むURLとChrome

ここを見にくるような人にとっては常識なのかも知れないが、URLはASCII文字列で構成しないといけないらしい。

UTF-8ですらなく、ASCIIなのだ。
これは歴史的なものもあるだろうし、そういうブラウザが世に出回ってしまっているから今更変えにくいのもあるのだろう。

なので、基本的に日本語をURLに乗せたいとなったら、サーバ側がデコーディングできる文字エンコード(Shift_JISとかUTF-8とか)にした上で、URLエンコード(っていうのかな?)、つまりASCII外の文字は%49%2a%45%acみたいな感じにしてやるべし、なのだそうだ(ASCII内でも?とか&とか%とかエスケープする必要のある文字もあるけど)。

で、そんなエンコードをしたURLをaタグのhrefの部分に指定してやると、ま、それをクリックしたらそのページに飛びますわな。で、ブラウザのロケーションエリアには当然そのページのURLが出ますわな。

・・・おや???こ、これは日本語だよな・・・。

そう。%エンコードしたはずのUTF-8文字列が日本語で表示されてるでないの。
え?ええぇ!?

とりあえず試した範囲ではFireFoxとChromeがこんな動作をする。IEはどうだか。

まあ、分かりやすくて良いではないか。。。
と、思いきや、そのURLをコピペして友達に教えたいってことがあったりしますよね。
なのでコピペして例えばメールにはっつけるとしますよね。すると、

・FireFoxは元の%エンコード形式のURLになる
・Chromeは表示した日本語そのまんまがペーストされる

なるほど、FireFoxすばらしい。この形式なら他のブラウザで開いてもちゃんと開けるはずだ。
しかし、Chromeよ。日本語にデコードしてしまったら、そのURLにはASCII文字でないものが含まれてしまうので、その辺をよきに計らってくれるブラウザでないと「そんなもんはない」と怒られてしまうではないか。
実際、FireFox→ChromeはOKだったが、Chrome→FireFoxはNGだった。そしてChrome→ChromeはOKだった。てめー自分だけ良けりゃいいのかよ。

それに、メーラーなどがURLを自動認識してクリックできるようになってたりする機能があるよね。
ああいうのって大体ASCII文字の連続してる部分だけを取り出すから日本語が含まれてると、それをURLとは認識してくれないのよね。

というわけで、URLの深遠に一歩近づきつつ、Chromeこのやろと思ったそんな一日であった。

☆☆☆☆☆宣伝です☆☆☆☆☆
そんな初心者なんだかマニアックなんだか良く分からない自分の作った「Push It! インターネット付箋紙」公開中です(右上のリンクからGO)。オンラインでもオフラインでも使える付箋紙です。

2008年11月12日水曜日

ふがー!

11/12 12:50現在。GAEの管理コンソール(http://appengine.google.com/)が開けません。
ついでにソースのアップロードもできません。

そしてなんのアナウンスも出てません。

頼むよ、、、こっちは少ない時間やりくりして開発進めてんだからさあ。

と思ったら12:53。アクセスできるようになりました。

2008年11月2日日曜日

とりあえず公開

ここのブログで今までぶちぶち言ってきたGAEとAIRを使い、インターネットにデータを保存することによって実現した「どこでも付箋紙ソフト(でもオフラインでも使えるぞ)」、Push It!を公開します。

Push It! インターネット付箋紙

まだベータ版ですが、興味があったら使ってみてください。
(サイトになんの説明もないので、ちと戸惑うかも知れませんが、ま、色々いじってみてください)

機能も少しずつ増やしていきますので、ご愛顧ください。
あ、大事なことを言い忘れた。IEだとまだうまく動かないところがあります。

☆11/20追記。
AJAXで取り込んだHTMLのtable要素が表示されない件
で書いたようにIEでもちゃんと動作するようになりました。IEユーザの方もご利用ください。