MondayブラウザのPHPセッションの引き継ぎメインで使っている開発用のPCではそれまでお仕事の都合でIEを8にアップグレードしていなかったのですが、ちょいと区切りがついたこともあって、IEを8にアップグレードしました。なんだかとてもいろんな機能が増えて便利になったものだと感心していたのですが、1つだけ「えー!」とビックリしたことがあります。いうか、IE8だけではなくて、FirefoxやGoogleChromeでも同じ仕様だったのですが、これまでIEでメインの検証をして、後は表示検証くらいしかしていなかったので、IE8になってようやく気が付いたのです。いうのが、PHPセッションの引き継ぎについて、です。これは、結構基本的なことなのですが、IEを使っていた人には結構大きな変更ということなのでは、と思うのです。実験用のページとして、ポストしたデータをPHPのセッションに保存するスクリプトを埋め込んだページを作成して、その動作を実験してみました。(実験ページはここ)。説明すると次のようになります。IE6,IE7の場合IE6やIE7では、新規に開いたウインドウ(元のウインドウのチャイルドではなく)では、セッションは引き継がれませんでした。target=_blankやjavascriptのwindow.openで開かれたものや、メニューコマンドの「新規ウインドウ」で開かれたものにはひきつぐのですが、スタートメニューやショートカットから新規に開いたウインドウではセッションはひきつがれません。IE8,Firefox,GoogleChromeの場合IE6やIE7に対してIE8などでは、新規に開いたウインドウでもセッションは引き継がれます。IE8ではそのために「新規セッション」という新しい独立したインスタンスをつくるコマンドもあります。IEも他のブラウザとセキュリティ面で足並みをそろえたのか、と思いますが、よく知っておかないと痛い目にあうかも、、と思い、さらにいろいろしらべてみました。インスタンス(ウインドウ)が1つも残っていない状態ではどうもセッションもリセットされるようで、最後のウインドウを閉じた後で新しいウインドウを開くとセッションは引き継がれません。そのセッションのページ以外のページを表示していたり、一度もそのセッションのページを開いたことのないウインドウでも、そのブラウザのウインドウが1つでも残っている場合は、新規ウインドウにセッションが引き継がれます。最初に開いたウインドウで、そのセッションのページを一度も表示していなくても、別に起動したウインドウでセッションを開始すると、最初のウインドウにもセッションはひきつがれています。(セッションの逆流?)ちなみに、IEコンポーネントを使っていると思われる、VisualStudioで作成したBrowserコンポーネントを使用したアプリケーションでは、動作は違うようです。(そのアプリを起動していても、IEのインスタンスがなくなるとセッションは引き継がれませんでした)まあ、だからなんだと言われてもこまるのですが、自分ではセッションが切れていると思ったウインドウでセッションが維持されたままだったので、ちょっとびっくりして、どうなってるんだ?と思っただけなのですが、ちょっと気をつけておかないといけないな、と思ったので、まとめておきました。Thursdayいまさらですが、XMLのお勉強(2)いや、まったく仕様書ばかりは斜め読みはダメなもんです。マニュアルなんかもたいがいは斜め読みでことたりるのですが、特にあまり慣れていないものだとしっかり確認しながら読まないとダメってことですね。いうのは、先日ふと思いつきから使おうと思っていたXMLのエンティティの件ですが、いろいろ調べた結果、思うように使えないことがわかりました。XMLにはエンティティという使い方があります。DTDというXMLを定義するところで、設定してやると、テキストを置換してくれるのです。WORLD!」に書き換えてくれるのです。中の人にはなぜこれが「!」ときたかと言うと、ゲームサイトや、製品管理システムなどで、インターフェイスのフォームをエンティティで書いておけば、DTDを外部ファイルとして読み込ませるだけで、その中身を置換できるからです。これまで、PHPでテンプレートを読み込んで文字列置換をしてはき出す、というのをやっていたのが、データはデータだけのファイル、スクリプトはスクリプトだけ、インターフェイスはインターフェイスだけ、とファイルを分けることができる!と思ったのです。先日の「いまさらですが、XMLのお勉強」で書いたインチキHTMLはXMLの書き方として間違っていたのですが、そもそも、HTMLとして使うXML(このことをXHTMLというらしい)には、独自のエンティティ宣言は書き込めそうにありません。使ってDTDを指定していて、この公開識別子を使ったDTDの場合、内部エンティティを別途設定することはできなようなのです。内部エンティティとして書き足す場合は、XML本文に書き足さないといけないので、本来目指していたような使い道もできませんでしたが。中の人はなんとなくCSSの定義のように、どんどん定義していけば、後から付け足されるくらいにおもっていたのですが、どうもXMLではそういう使い方はできないようです。いうものの、置くが深そうなXMLです。何かと役立つ技術が埋もれていそうなので、本のほうも斜め読みではなく、きっちり読もうと思います。図書館の返却期限が近づいていますので、じっくり読んでもいられないのですが。Tuesdayいまさらですが、XMLのお勉強XMLの勉強といえば、なんだかとってもいまさらな感じですが、わけあって簡単なカルテのDBの設計をすることになり、いろいろ調べてみると、医療系のデータベースではXMLの規格化がすすんでいるようで、ついでにXMLをちゃんと勉強してみようと思ったのです。それで図書館で本を借りてきて読んだのですが、最初に読んだのはXMLの超入門で、なんとなく知っていることが多かったのですが、次に読んだ「標準XML完全解説」という本には、その名のとおり、詳しく解説されていました。XMLについての詳しい講義は他のサイトにゆずるとして、本の中でちょっと気になったのが、エンティティの表記についてです。than=小なりの意味)と書いたりしますが、これがエンティティです。エンティティにはいろいろあって、記号類をあらわすものから、文字そのものを数字で表したりと、実は結構便利な使い方ができるものなのです。ところが、xmlではそのエンティティを定義できるようなのです。negi!に置換してくれるそうなのです。ここまで読んで、「あ、そうだ。HTMLもXMLだから・・・」と思って、実験してみました。「&amp;negi;」とかかれています。#F00;padding:10px;width:300px;">&negi;</div></body></html>(※このソースは間違っています。詳細はその2をどうぞ)ところが、HTMLではうまくエンティティを置換してくれませんでした。実は本のほうもまだ途中だし、なんせ斜め読みなんで、そんなの使えないのはあたりまえ、とかどこかに書いてあったかもしれないのですが、PHPなどでダイナミックページを書いたりする時に、このエンティティによる置換は結構便利なんじゃないかなーと思ったのです。読み進んで研究してみます。コードを書くときに、ajaxをつかうとxmlhttpオブジェクトを使いますが、これまでサーバがはき出す物はテキストだけで、データがある時も、%%_SP_%%とかでくぎっておいて、split("%%_SP_%%")でちぎって、添え字付き変数で使う、みたいなことをやっていましたが、XMLではき出せば、もっと便利な使い方ができそうな感じです。(もっとも、JSONのほうがより便利なのでしょうが)ゲームサイトをつくったりする時、仕様をオープンにして、サードパティ製のツールなどが登場してサイトをもりあげてくれることを想定するなら、XMLでデータをはき出せる仕様ってのはなかなか魅力的です。いうこともあって、XMLをまじめに勉強しようと思っています。Tuesday海外ドラマロケ地めぐり@GoogleMaps実にしょうもないものをつくってしましました。今日、WOWOWで「MEDIUM」の放送があったのですが、舞台となっているフェニックスってどこ?と、ふと思ったのです。第4シーズンになるまで、なんとなく、としか思っていなかったのですが、調べてみてびっくり。南のほうにあったんですね。なんだかフィラデルフィアとこんがらがっているのか、もっと北の方だと思っていました。そこで、ロケ地、というか、海外ドラマの舞台となっている街がどこにあるのか、googleMAPで探してみました。ついでに、GoogleMapのAPIも使って、サイト内に地図表示もすることに。Cityのキャリーのアパートなどが表示されているんですね。したロケ地巡りになりました。詳しくでていたのはそれくらいで、後はおおよその位置しかわかりませんが。地図のマーカーをクリックしてみてください。簡単なドラマの感想と、詳しいマップへのリンクが張ってあります。ニューヨークやシカゴは複数あるので拡大してみてください。この地図、正しく表示されているでしょうか?実は、このMAP表示には、少々問題がありました。GoogleMapをサイト内に埋め込むには、ドメイン毎に申請したKEYが必要になります。ところが、ねぎうぉっちはサイトとブログが別々のドメインにあるため(ねぎうぉっち本体は独自ドメイン、ブログはjugem)になっているので、ドメインが違います。ねぎうぉっちの本体は、ブログのatomを読み込んでページ内に再表記しているのです。そこで、とりあえずどちらでも正しく表示されるかな、と思って、IFRAMEにしてみることしました。(この原稿を書いている段階では正しく表示されるか不明)うまくいくでしょうか?さて、ここで、同じように、世界ツアーをしてみたい人のために、htmlのヒントウインドウを表示するscriptを紹介もかねて、海外ドラママップのhtmlを掲載しておきます。最初はこんなにたくさんリンクするつもりではなかったので、プロシージャにすればよかったのですが、コピーして変更、コピーして変更のほうが早かったので、汚いスクリプトですみません。style='font-size:12px;color:#666'>登場人物もかなり入れ替わりましたがあまりにも長く見ているので自分も医者になったような気分にさせてくれるドラマです。ダルフール問題など取り上げられていて勉強にもなりました。height:310px"></div></body></html>インディジョーンズやララクロフトの冒険の足取りをGoogleMapでおいかけてみるのも、楽しいかもしれませんね。Mondayアクセスビンゴの改良と、アクセス数のキモはブログの更新だ!のまき開設から3週間くらい立とうとしているねぎうぉっちですが、アクセス数の変化にはおもしろい動きがあります。Googleアナリティクスでその動きをみていると、こんな感じです。右肩あがりにはならないものですね。そんな中、かつてのリファラ(どこからねぎうぉっちに飛んできたか)のグラフと今日時点のグラフを比べてみますと、(ひだりがちょっと昔、みぎが今)こんな感じになっていて、参照サイトの数がどんどん増えてきています。参照サイトってのは、ブログやサイトのリンクから飛んできたヨ、ということです。実はびっくりしたことがあって、それは、前にねぎぶろでとりあげた、「スターウォーズアンカット」に関することなのですが、友達の一人が、「スターウォーズアンカットでぐぐったら、ねぎうぉっちが一番上にでてきたよ」と教えてくれたのです。ブログは記事を更新すると、検索サイトにpingをうつので、検索キーワードにひっかかるのがはやいのかなーと。今、話題のキーワードをうまく記事にしているブログは、検索エンジンの上位にのる可能性が高い、ということです。(まあ、スターウォーズアンカットが今話題なのかは別として、ですが)ちなみに、昨日は、広瀬香美さんのついったーのことについても記事にしていますが、試しにこちらでも検索してみましたが、これはひっかかりませんでした。(検索結果に載ろうとねらって記事にしたわけではありませんよ)ニュース系のブログはこういった意味では、検索サイトの上位に表示される可能性も高いのでしょうか。ジャストなニュースだと、ソースのほうがヒットするので、まさにスターウォーズのようにちょっとマニアの間では、みたいなネタがいいのかもしれません。ブログやサイトの目的が何かにもよるのですが、単に集客したいのか、その後の何かをさせたいのかにもよるので、あまりサイトと関連のない無意味な話題を記事にしても意味はないのかなーとか思ったりもします。前に、住宅展示場のイベントに係わる機会があって、その時にお話をきいたところによると、ハウスメーカーさんにも、「とにかく人を集めて欲しい。100人来れば1人は買ってもらうことができる」というメーカーさんもいらっしゃれば、「たくさん集まらなくてもいいので、家を建てようと思っている人に集まって欲しい」というメーカーさんもいらっしゃるようです。なんだか、サイトの集客にも言えることかもしれませんね。」と、以前大々的に銘打って紹介したアクセスビンゴでしたが、少々間違っていました。アクセスした時間でビンゴをする、という機能から、2カ所以上めくれている人は、2回以上訪れてくれた人だ!と思っていたのですが、これが少々間違っていたところです。2カ所以上めくれている人が2回以上訪れてくれた人、というのは間違いなのですが、実は、毎日同じ時間に見てくれている人、というのは、1カ所しかめくれていなくても、やはり再来訪者なのです。いうことで、アクセスビンゴの機能を少々変更して、ページを見てくれた回数をカウントすることにしました。なんどもリロードするのをカウントしてもいけないので、ビンゴのデータの最終更新時間が1時間以上前のアクセスのみ数えることにしました。それでページのトップ部分にアクセス数も表示して、ネギの成長とあわせて、サイトのアクセス数の成長もみなさんに楽しんでもらえればと思っています。中の人も他人のサイトのアクセスカウンタがアップするのを楽しみにしたりはしていないので、みなさんの楽しみにはならないとは思いますが。サイトにこんな機能をつけてくれってのを募集してみて、サイトづくりに自分も参加している感をもっと出せばいいのかしらん。Sundayブログ制作を楽チンにしてくれるフリーアプリいまごろになってツイッターとか言ってると後乗りみたいでなんだか恥ずかしい感じなのですが、どうも広瀬香美さんの「ヒウィッヒヒー」の記事が昨日今日とどこにいってももちきりなので、これまで使っていた個人的なツイッターのアカウントに加えて、ねぎ専用のツイッターアカウントもつくってみました。http://twitter.com/negiwatchご存じない方に説明すると、ツイッターというのは、ブログとチャットの中間みたいな存在で、1行づつ「つぶやき」を書き込むとフォローしている人のタイムラインにそのつぶやきが表示される、というシステムです。いいながらも、中の人もぜんぜん活用していないので、説明する立場でもないのですが。PHPでも、どうも、中の人がついた側は劣勢になるという感じなので、今回は早々にツイッターにも手を出しておこうと思ったわけです。これまたなんとか、APIやらを使ってねぎうぉっちにその機能をとりこんでやろうとたくらんでいうるのですが、その件に関しては時間がなくてそこまでいたらなかったのでまた次回に譲るとして、今回は、ちょっと便利なブログ制作応援ツールの紹介です。このツイッターのページのキャプチャなど、これまではブラウザをalt+printscreenでキャプチャしてPhotoshopで縮小したりしていたのですが、Photoshopは重いので「もっと簡単ないいアプリないかなー」と探していると、たいへん便利なソフトに出会いました。CrenaHtml2jpgというソフトなのですが、何が便利かって、ブラウザで表示するとながーくなるページも、まとめてキャプチャしてくれるのです。キャプチャした画像は指定したサイズに縮小してくれるので、たいへん便利です。ここにあるので、興味ある方はぜひ覗いてみてください。http://www.vector.co.jp/soft/cmt/win95/art/se370966.htmlこれを使うと、ねぎうぉっちだって、こんなふうにながーくキャプチャできるのです。1つが縮小専用というソフトです。何をしてくれるかといおうと、デジカメの画像をこれまた指定したサイズに縮小してくれるのです。それも、ドロップするだけで。今日の農家の人々の映像ですが、サムネイルをつくってくれるのは、ブログのサイトの機能ですが、表示画像を横幅400ピクセルに縮小してくれるのは、この縮小専用なのです。デジカメ画像の横幅は3000ドット以上あります。これもたいへん便利です。ここからDLできます。http://www.vector.co.jp/soft/win95/art/se153674.htmlということで、これらのフリーソフトのおかげで、だいたいブログの1つの記事を画像加工も含めて30分くらいで書き上げることができるようになりました。作者のみなさんに感謝。MondayYouTubeの埋め込みでメニューを消すねぎうぉっちの記録を始めてはやいもので、もう2週間。記録した画像もたまってきました。表示切り替えパネルでこれをパチパチ切り替えて、成長の度合いを見ることも出来るのですが、どうせなら、これを動画にしてサイトに貼り付けてやろうなどという気を起こしてしまいました。日曜の夜、もうちょっとゆっくりしたかったのですが、ビンゴもできてちょっぴり勢いづいているのかも。動画のほうは、あれこれ凝った効果をつけてみたりもしたのですが、やっぱりシンプルなのが一番、ということで、1枚(実1時間相当)を1フレームにして、ねぎの成長部分をアップにする、それだけにしました。(結果としてなんだか手抜きみたいですが、いろいろ試してみてこれが一番よかったのですヨ。ホントに)1日分が24フレームなので、1秒にはちょっと足りないのですが、まあ、だいたい1日が1秒ということで、つくった動画こちら。それで、これをトップページ(といってもサイト全体で1頁しかないのですが)に貼り付けることにしました。YouTubeのタグを貼り付けておしまい、と思いきや、意外な問題にぶちあたりました。それがメニュー表示です。再生ボタンと位置スライダー。大切な機能ですが、「意味もなく(ほぼ)一頁主義」のねぎうぉっちにとって、ページ上のスペースは限られていて非常に重要なのです。普段つかわないものは見せない主義。Flashでオーサリングして、中にFLVを埋め込むときは、マウスオーバーした時だけコントロールを表示する、というのがあるのだから、youtubeにもあるだろうと思ったのですが、APIのページにも残念ながら見つかりませんでした。埋め込みプレーヤーのパラメータhttp://code.google.com/intl/ja/apis/youtube/player_parameters.html(隠しコマンドなども検索してみましたが上手く見つけられませんでした)そこで、ないなら自分でなんとかしよう、ということで、スタイルシートで解決することにしました。/object></div></div>動画のサイズにdivを切り取って、それをposition:absoluteにして他の要素に影響させないようにします。それでいて、overflow:hiddenではみ出した部分(つまりメニュー)を表示しないようにしますが、マウスがのっかってきた時はheightを拡張して、マウスが出て行ったらheightを元にもどす。これでばっちりでのはず。テストもうまくいきました。(動作はねぎうぉっちに見に行ってみてください。右上の小さい動画部分です)スクリプトをタグの中に埋め込むのを嫌う方もいらっしゃるので、その場合は、scriptタグ部分に関数として書き出せばよいかと思います。タグに埋め込むと、getElemetByIdでオブジェクトを探さなくても、クリックした自分自身にアクセスするのなら、thisで簡単です。(VBだとcallerって呼び出し方がありますね)ということで、動画の埋め込みも準備完了。あ、オートプレイにしたいけど、muteせずにやるのもなんだか失礼な感じがするので、これはまた今度。javascriptからyoutube画像の操作もできるそうです。IEではうまく動作しましたが、FireFoxではダメでした。firefoxでは、overflow:hiddenでflashオブジェクトをクロップ(切り抜き)できないようです。はさむことで解決しました。日本語サイトでは、ここにあります。http://maglog.jp/lightbox/Article456566.htmlここではtransparentに設定されています。ブラウザチェックをはさんでいます。z-indexがきかなくなることもあわせて書かれています。(確かに、ねぎうぉっちもでz-indexは効いてないので、できごとコメント(上に表示したいdiv)を表示するときは、ビデオとアマゾンのバナーはhiddenにしています)調べてみると、このwmodeの設定にはいろいろ問題がありそうです。フラッシュのボタンが押せなくなるとか、firefoxが落ちるとか。macではダメでした。