ラベル AJAX の投稿を表示しています。 すべての投稿を表示
ラベル AJAX の投稿を表示しています。 すべての投稿を表示

2007/03/06

BloggerのLabel Feedでエラーが・・。

BetaというかNew Bloggerにはラベル機能があって整理・管理するのに便利なんですが、そのラベル毎にフィードがあるのはご存知でしょうか?

元ネタというか詳しい解説はいつもの如くクリボウさんのページを読んで頂ければと思うのですが、私のこのBlogではラベルフィード機能を使って、記事の下部に「関連のありそうな記事」とかってちょっと間の抜けたLinksを表示しています。

最初は調子良かったのですがレイアウトを修正する為にに何度か自分で試しているとエラーが出ている事がわかりました。


実際にはこの「関連のありそうな記事」は "Bloggerに「関連記事リスト」を。"に書いたように、記事のラベルをLabel FeedをJSONP形式で受け取りその中で日付順の上位5つを現在は表示しています。

Label FeedのURLに関しては上記のクリボウさんのページに"ラベルフィード URL 作成装置"とかも置いてありますのでそちらを参考にしていただくとして、例えばこのBlogで"Blogger"ってラベルのATOM1.0な要約(summary)されたフィードはブラウザにより表示の仕方は変わりますがFirefox2だとこんな感じになります。



上記画像はATOM1.0な形式のフィードに対してFirefoxがスタイル変更をして表示しいますが、ソースはXML形式ですので、これをAJAXな感じでXMLHttpRequestを使って取得して加工し表示って事もありかもしれませんが、フィードのURLが別サイト(www2.blogger.com)になってしまう為、クロスサイトスクリプティング (cross-site scripting) 的なセキュリティー上の問題があり、XMLHttpRequestでは取得する事が出来ません。

ですがBloggerのフィードはJSONそれもCallback指定が可能なJSONPが使えます。Callbackを指定したJSONPなURL<はalt=json-in-scriptとパラメータを指定し、Callbackしてもらう関数名として"callback=任意の関数名"をパラメーターとして指定する形になります。(Javascriptに対してネイティブな形で値を返してくれるので、一手間省けて逆に楽だったりします。)

そのようにして受け取った結果を、今はレイアウトを少し変更しましたので、こんな感じで表示されます。



ですが、これがこんな感じで表示される事があります。



実はこれはJSONPな呼び出しが非同期であり、エラーの検出も困難な為に事前にラベルを列挙して表示しているのです。つまりJSONPな呼び出しが失敗しているんです。

原因はなんだろうとフィードのURLをブラウザで直接開いて見ると、こんなエラー画面が・・・。



別のラベル名で呼び出すとエラーは出ませんが、何度かリロードしてると2~3回でエラーになります。このエラーは暫く時間をおかないと解除されないようで、もしかしたらBloggerの負荷制限なのかとも思っています。

そんな感じで、この件に関してはちょっと情報を漁りつつBloggerに質問してみようかと思います。

Windows VISTAの実環境で使い始めないといけないなぁと思いつつも、勇気と時間がとれなくていまだメインな環境にはインストール出来ない状況です。必要な時間というのは、インストールそのものに必要な時間よりも、その後の設定やトラブルに対処する時間の方です。トラブルってよりも操作方法なり設定が変わった為に出来なくなったり、不具合が出た事に足して対応する時間が惜しいって感じです。以前はそれそのものも楽しめたんですが・・・・・・・・・。

続きを読む・・

2007/03/01

Bloggerに「関連記事リスト」を。

Read Moreな機能は大体片付いたんですが、Documentationがまだ残ってます。やった事は記録に残そうとは心がけているのですが、次なる創作意欲、むしろ誘惑に負けて「関連記事リスト」を記事の後ろに挿入するコードを書いてみました。

この機能は既に稼動中なんですが、例によってデザインセンスが欠如してますから取り敢えず列挙しましたって感じです。ちなみに複数記事が表示されている時は動かないようにしてあります

何をもって関連がある記事とするのかって大きな問題があるのですが、とりあえず記事に設定されたラベルを元に、そのラベルの一致している数が多く、そして更新日時の新しい記事って順序で表示しています。

具体的にはBloggerのFeedをラベル別にGData APIを介して取り込み、それを上記の条件で並べ直して列挙しています。

詳細に関しては、もう少しデザインとか汎用性を高めてから書きたいと思いますが、気になる方はこのページなりJavascriptなファイルなりを参照して下さい。

今一番不安なのは、苦労して車輪を再発明しまくってるだけじゃないかって事・・・・。

続きを読む・・

2007/02/28

Blogger Widgetで「続きを読む」を自動化。-- 2

本来であればBlogger Templateのマニュアルなりを読んでから取り掛かるべきなんでしょうが、いつもの如く現物合わせでやっています・・・。

Blogger TemplateStyle設定を書き加える事で指定したタグ範囲内を、単独で表示する時とその他の場合で表示/表示を切り替える事で実現するのが常道のようで、これは現在のBetaの取れた新しいBloggerの枠組になる以前に使われていた方法の転用的な物です。この辺りに関してはクリボウさんのページが時系列含めて分かりやすいかと思います。

ですが投稿された記事のURLを変数的な形で<A>タグの参照先として指定できないため、ルールを理解した上で記事のURLを推測するか、投稿後に確認したURLを再編集で書き込む必要があります。

そこで前回のPostではJavascriptを使い描画時に「続きを読む」リンクを動的に作成する機能をWidget内に組み込みました。


他に組み込んでいたScriptとの競合でイベントが無限ループに突入してStack over flowが発生というブラクラのような状態になってしまったりとかって問題もありましたが、現在私の環境(テンプレート)では稼動中です。

今は次の段階として他のテンプレートでの動作に関して検証しています。

基本的に私のテンプレートでのDOMは以下のように構成されています。

<DIV class=”post-body”>には記事本文が、続く<DIV class=”post-footer”>以下に記事へのURLとなるLink<a title=”permanent link” class=”timestamp-link”>で記述されています。

これにより現在のコードはこの”timestamp-link”というclass名を含む<a>タグを探してその内容を利用していますが、そもそもclass名は書式指定であり、これに頼る探索では汎用性に欠けるようです。

そこで他のサイトをInspectorで調べて回ったのですが、<a>タグのtitle=”permanent link” 指定はかなりの割合で設定されているようです。


上記のようにpost- body<div>タグに対してpost-footer<p>タグとなっていますが、記事へのリンクは要素 title=”permanent link”とされた<a>タグ内で記述されています。

つまりはpost-body (本文)のタグと同列のclass=”post-footer”で指定されたタグ内から要素 title=”permanent link”とされた<a>タグからURLを取得するようにすると、現状のかなりのテンプレートでも動作するかと思います

現在はこのような変更と合わせてLoad時間を短縮できるようにコードに手を入れています。またCurrentなソース(Javascipt)はここからダウンロードしてください。

続きを読む・・

2007/02/26

Dojo -- JSONPに挑む。 【白帯編】

取り敢えずAjaxなライブラリとして使い始めたDojoですが、使い方というか流儀みたいなのがそれなりに理解出来たような気がするので、次の一歩としてJSON、それもCross Domainな呼び出しをする為にJSONPをと思っています。

JSONPServiceも他所様のサービスではなく自前で提供をと考えていますので、Server側のArchitectureも合わせて考慮する必要があり、PHPというのがPrivateな利用面ではMajorityなんでしょうが、個人的な好みからASP.NETで挑みます。

Sever側からはベタな手法としてRespone.Write()で手作りとかってのもあるんですが、ここはオシャレなLibraryを使ってみたいと思い、今回はJayrockを使ってみました。


JayrockLGPLでライセンスされており、単純な入出力のFormatter/Parserという面の他に、HTTP Handlerを利用したJSON-RPC的な実装も可能なかなり強力なLibraryです。

今回は取り敢えずJSONPな出力をするaspxなページを取り敢えず作ってみました。Jayrockのサンプルから引用したコードを新規のaspx.csに貼り付けた感じですが、JSONPの動作/雰囲気を掴むにはこんなもので十分かと。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using Jayrock.Json;
using Jayrock.Json.Conversion;

public partial class jsonpTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        string callBackFunctionName = null;

        if (Request["callback"] != null)
        {
            callBackFunctionName = Request["callback"];
            Response.Write(callBackFunctionName + "(");
        }

        using (JsonWriter writer = CreateJsonWriter(Response.Output))
        {
            writer.WriteStartObject();              //  {
            writer.WriteMember("Name");             //      "Name" : 
            writer.WriteString("John Doe");         //          "John Doe",
            writer.WriteMember("PermissionToCall"); //      "PermissionToCall" :
            writer.WriteBoolean(true);              //          true,
            writer.WriteMember("PhoneNumbers");     //      "PhoneNumbers" :
            writer.WriteStartArray();               //          [ 
            WritePhoneNumber(writer,                //            { "Location": "Home",
                "Home""555-555-1234");            //              "Number": "555-555-1234" },
            WritePhoneNumber(writer,                //            { "Location": "Work",
                "Work""555-555-9999 Ext. 123");   //              "Number": "555-555-9999 Ext. 123" }
            writer.WriteEndArray();                 //          ]
            writer.WriteEndObject();                //  }
        }

        if (Request["callback"] != null)
            Response.Write(");");
    }

    private  void WritePhoneNumber(JsonWriter writer, string location, string number)
    {
        writer.WriteStartObject();      //  {
        writer.WriteMember("Location"); //      "Location" : 
        writer.WriteString(location);   //          "...", 
        writer.WriteMember("Number");   //      "Number" :
        writer.WriteString(number);     //          "..."
        writer.WriteEndObject();        //  }
    }

    private  JsonWriter CreateJsonWriter(TextWriter writer)
    {
        JsonTextWriter jsonWriter = new JsonTextWriter(writer);
        jsonWriter.PrettyPrint = true;
        return jsonWriter;
    }
}

ちなみにaspxファイルはこんな感じてデフォルトで作成された物から最初の一行以外は全部削ります。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jsonpTest.aspx.cs" Inherits="jsonpTest" %>

そしてクライアントになるhtmlファイルはこんな感じです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <script type="text/javascript" src="../dojo/dojo.js"></script>
    <script type="text/javascript">
        
        dojo.require("dojo.io");
        dojo.require("dojo.io.ScriptSrcIO");
        dojo.require("dojo.json");

        function testJSONP() {
        dojo.io.ScriptSrcTransport.bind({
          url: 'http://ilgvkteq.sv05.fsdotnet.net/ngm/jsonpTest.aspx'
          ,transport: "ScriptSrcTransport"
          ,jsonParamName: "callback"
          ,load: function(type, data, event, req) {
            showResult(data);
            }
        });
        }

        function showResult(result) {
            document.getElementById('output').innerHTML =dojo.json.serialize(result);
        }
    </script>
  </head>
  <body>

    <input type="button" onclick="testJSONP()" value="Test JSONP"/>
    <br /><br /><br />
    <div id="output"></div>

  </body>

</html>

このBloggerPost(記事)にはScriptを埋められないので、動作してる画面はこんな感じ。



ボタンを押すと、



かなり手抜きなテストですが、SeverからのResponseJavascriptObjectとして捕らえられている事とCallBackの指定の仕方が分かるので、白帯編としてはこれで十分かと。

この次は茶帯編として、JSONPで得た結果からGridの描画とかをと思っています。

続きを読む・・

2007/02/07

道場(Dojo)に入門!!

年始から有給使って旅行とか行ってましたが、このたびDojo に入門する事になりました。

AJAXなライブラリなんですが、PHPなりASP.Netを利用できない環境でCMS的な事をやってみようという事でDojoを使ってみる事にしました。

とりあえずフリーなWeb Spaceを借りて試したりしていたのですが、無条件でHTMLに広告を挿入してくるようなサイトなので、ContetnPaneで別ファイルをロードとかするときにちょっと不具合が出たりしています。

なので、Dojoのライブラリに手を入れてみたりしていますが、Dojoってどうやってデバッグとかしてるんだろうとか思いつつ、Alertとか使いながらなんとか必要な機能は追加できました。ContentPaneでLoadする際にはExecuteScriptというロードされる対象のスクリプトを実行する機能があるのですが、Scriptブロックに特定キーワードが含まれている時は、その実行を除外するような感じが出来ました。

本質的にはこんな機能を追加してるぐらいだったら、広告なしのサーバーを借りれば済むのですが、Dojo自体の実装とかを理解するには随分と役立ったかと思います。

コンテンツ自体は他の人との共同で作っていて、私はどっちかといえばフレームワークとか裏側のロジックを作ってる感じなんですが、もうちょっとしたら公開してみようかなとか思っています。

続きを読む・・

2006/12/26

Economical Project

最近ちょっとPrivateで知人に頼まれてDesktopなdotNetアプリケーションをASP.NET化したんですが、追加要望でコツコツと手を入れています。

Hosting場所は私がテスト用に使ってるServerだったりもしますがソースも完全に渡してるんで、もう自分で好きにしてよって感じもしますが、なにやらノせられてプロジェクト(?)は続いております。.NetにしてもC#にしても、私はPGとしての第一線からちょっと離れてしまってたので、調べながらやるのは依頼主と一緒なんですけどね。

今やってて何がダメかっていうと、二人ともデザインセンス無し(笑。 センスも無ければやる気も無しって状態に近いかと。質実剛健といえば聞こえはいいですが、お遊び用のコードなんで例外処理とか抜きまくりだし・・・。

それとテスト用に無償で借りてるHosting ServiceなんでDatabaseも容量は小さく、Transaction log領域なんて寂しい限りです。最大80,000行のレコードを挿入してからQueryで集計処理とかあったんですが、一回は出来ても次から無理ですから。Deleteすら出来はしないみたいな感じで、面倒だから集計処理後にTruncate tableとか入れたりしてました。

結局はこんな集計はデータ作成時にコード上でやれば、テーブルにレコードを挿入する必要ないでしょって事で、コードを大幅書き直し。パフォーマンスも大幅Upでクライアントも大満足みたいな結果は出ましたが。

たまにはこんな激貧Projcetもまた楽しいかと。

続きを読む・・

2006/12/24

You wanna change your behavior, don't you ?

Once upon a time, a company released a scheme for client side HTML which name was DHTML. They also proposed a forward-thinking scheme DHTML Behavior. I thought It was a quite good technical idea, but it has not got around enough.

最近Ajaxなコードを良く書くというか試すのですが、思い出すのはDHTML Behavior。MicrosoftがIE 5.0から組み込んだ機能なんですがあまり流行らずって感じです。今になってGoogleとかで検索しても個人の簡単なページしか見つからないし、MicrosoftのドキュメントもURLが変更になったのか探すのも面倒だったり。以前は日本語のHotWiredのWebMonkeyにも解説とかイカしたSampleとかあったんですが今は見れません。 本家WebMokey には記事がありますが、1998年だったんだと感慨深げに読んでいます。

当時DHTML BehaviorにXML+XSLそしてXMLHTTPRequestを使って業務系なVBで作られたDesktopアプリケーションをいくつかWebなApriに移行したりしてましたが、IE限定とはいえあれは画期的というか開発者というよりGeekなProgramerにはとても心地よいものでした。ページは全てXML記述。各コンポーネントは独自に制定したタグにより記述され、クライアントであるブラウザ(IE)はXMLページを開く事により連鎖的にXSL・CSSを取り込みブラウザ側でTransform。後は今で言うAjaxなアプリケーションとして動作するような仕組みでした。入力に対するValidationやフィールド移動なんかの機能も定義済みで、単一画面であり画面遷移なしで検索結果の表示なんかも当然XMLHTTPで。

そんな感じで個人的にはかなり気に入っていたんですが、予算を付けられずVisualなFormデザイナーとかを作ろうとしている段階でお蔵入りとなりしまた。

今思うと時代が早すぎたのかなぁと。XMLなんて理解する人が少なく、またXSLTによるTransformなんて想像の外だった時代ではありましたし、ブラウザがフロントエンドなアプリケーションの利便性に対する理解も少なかった時代でしたし。

今ならaddEventListenerとか、Prototype.jsのbindAsEventListenerでとかって話もあるんですが、css(Javascriptも埋め込んでしましたが)で定義出来てたDHTML behaviorの方がComponetの定義としてはイカしてたとたんじゃないかと。

でもまぁ時代も流れて技術のトレンドも変わるって事で、Prototype.jsを使いこなすが吉かなぁと思う今日この頃です。でもDHTMLって言葉なんか好きだったんだよね。

続きを読む・・

2006/09/30

Availability

AJAX を使ったUIのサンプルを作って、これを同僚やお客に見せても、あまり良い反応はなかったりして。

特にClient Server Model というか、クライアント側にRichなアプリケーションを使ってる人たちだと、やってる事・出来てる事は当たり前の事が多く、特に感動はないらしい。

まぁ今時のPCでの業務になれたユーザーには、そんな事はあまり望みませんが、開発者なのに無感動というか無感覚な人にはちょっと困る。多分どのような仕組みで動いているのかまったく理解できていないからなんだろうけど、Webベースのアプリケーション開発とかした経験があるらしいけど、特になんのAJAXなUIに特に何の感覚も持てないような似非技術者とは一緒に仕事したくないですね。

なんかWebベースのアプリケーションがどの様に動いているか、ブラウザってどうやって動いて、サーバーやり取りされる情報がどうなっていて、セッションがとかまったく言葉はしってるけど、理解していないみたい。

続きを読む・・

2006/09/23

pronounced "ā-Jacks"

Wikipedia
http://en.wikipedia.org/wiki/AJAX
によると、Ajaxの発音は"ā-Jacks"つまりは エイジャックスとの事。

続きを読む・・

2006/09/13

AJAX, JAVA Applet, ActiveX

AjaxでサーバーからloadされるJavascriptが署名付きでクライアント側で評価出来るになれば良いのに。

これはHTTPSなり使ってればサーバー側の署名から評価はできるんだけど。

匿名の世界での安易にプログラム実行してしまう環境ってのはやっぱりイマイチな気がしないでもない。

いっそサイズとか非可読性を考慮して中間コードにして・・・・とか考えてたら、それってActiveX? Java Applet? とぐるっと思考が一周してしまいました。

ブラウザのみでOK、追加のコンポーネントは一切必要なしってのが、AJAXの良さなんだけどね。

でも何処のページみるのにもJavascript on とかって憂鬱な気が。

暫くはIntranet向けにしかコード書くつもりもないので、仕事的には気にならないが、技術の普及という面では気になる。イントラ向けならACTIVE Xでも JAVA Appletでも良いじゃんとか。まぁExtraに出すからとか、なんとか理由を考えつつ、自分を納得させる。

なんか自身が矛盾していると、内部でひたすらループ。

まぁ比較的に古くて枯れた技術というか手法の組み合わせなんで、あまり深く考えてはいけないでしょうね。

なんとなく、私なりに開発の本流にのせる為の条件を書いて見た。
これはライブラリを含む開発環境で網羅してもらいたい事。

・ブラウザ間の差異を吸収する事。
IEのみとかは無しの方向で。IE, Mozilaは当然として Operaぐらいはなんとかカバーしたい。

・サーバー側の動的なページ作成時における、デザインとコードの分離が可能である事。
デザインとコードの分離を進めてきたのに、ここで後戻りは・・・・・・・・。

・デバッグ機能がある事。
printf 的なのとか log出力なDebugしか出来ないのはもう嫌かも。

こんな感じです。

続きを読む・・

2006/09/10

Javascript Coding

Javascript Coding

JavaScrptはとっても柔軟で面白いけど、個人的に仕事でガリガリ書きたいコードではない。 なんか柔軟すぎるからから、複雑な事やりすぎると周りが付いてきてくれないし。

JavaScriptできますとかいってる人たちも、Classとか知らないってのが普通だったりするんで。 そのレベルのPGが沢山いるのが、IIS+aspな開発関連。まぁPHPも似たような状況だけど。

やりたい事が、やりたいレベルでやれる状況って難しいですねとか思ったり。

最近は暇を見つけるとATLASを弄っています。 AJAXを弄りだしてしまうと、従来のaspなアプリケーションが妙に寂しく感じてしまう。 ちょっと騙されている感じもしないでもないけど。

今は今後のアプリケーションプラットフォームに関して考えている段階なので、 いろいろなliblaryも試してるけど、しっくりこない。 開発環境としてはEclipseで同程度の事出来るようになれば良いのだけどね。

無いなら・必要なら作ればとか思うのだけど、やっぱり時間が無い。 本当にやりたいのはライブラリでもなく開発環境でもないので。

続きを読む・・