reCaptchaの提示画像に戸惑う

reCaptchaがこんな画像を提示してきた。

2つの単語を入力させる仕組みのはずだが…

I heard reCaptcha indicates 2 `WORDS’

めずらしいもんみたな?、と。

左側は `-’ (ハイフン)だと思うが、果たして?

試したところ、ちゃんと通った。


LINQ to XMLでATOMを読む

ハマった。

LINQ to XMLのサンプルコードとしてRSSフィードリーダが作られていたので、ではそのコードでATOMフィードを読んでみようとしてみると、フィードの内容が一切取り出せない。

おかしいなぁ、と2日間情報を探し回ったあげく、ようやっと「MSの想定する処理方法」のひとつが見つかった。

RSSのコードのまま取り出せなかった理由は、ATOMフィードがデフォルトネームスペースを設定しているためだった。LINQはXPathを理解するのだが、XPathの仕様としてXML要素を取り出す際には、デフォルトネームスペース内の要素でさえ、いちいちネームスペースを指定せねばならない様子。

結果、LINQ to XMLでは次のようなコードになる。

  XDocument doc = XDocument.Load(@"http://satoshi.blogs.com/life/atom.xml");
  XNamespace nsDef = "http://www.w3.org/2005/Atom";

  var feeds = from feed in doc.Descendants(nsDef + "entry")
              select new {
                Title = feed.Element(nsDef + "title").Value,
                Summary = feed.Element(nsDef + "summary").Value
              };
  foreach (var feed in feeds) {
    Debug.WriteLine(string.Format("{0}\n\t{1}", feed.Title, feed.Summary));
  }

もしくは、

  XDocument doc = XDocument.Load(@"http://satoshi.blogs.com/life/atom.xml");

  var feeds = from feed in doc.Descendants("{http://www.w3.org/2005/Atom}entry")
              select new {
                Title = feed.Element("{http://www.w3.org/2005/Atom}title").Value,
                Summary = feed.Element("{http://www.w3.org/2005/Atom}summary").Value
              };
  foreach (var feed in feeds) {
    Debug.WriteLine(string.Format("{0}\n\t{1}", feed.Title, feed.Summary));
  }

要素指定部分で毎度ネームスペースを指定するのは手間がかかるので別解が欲しいところだが、今のところは見つからない。


Silverlightアプリケーションのデバッグ

Visual Studio 8.0 β2からSilverlightアプリケーションをする方法として一番簡単なものは、Silverlightプロジェクトをアクティブにしてデバッグ実行すること。Silverlightアプリケーション作成ウィザードで生成されたテストページをてブラウザがローカルファイルとして読み込み、ブラウザとデバッガが通信してデバッグできる。

しかし、BrowserHttpWebRequestクラスで通信しようとすると問題が起きる。クロスサイトスプリクティング防止のため、ローカルファイルとして読み込まれたページから同クラスを用いた通信はできないよう制限されているので、正常ロジックを通すことができない。

そこで、テストページをローカルファイルとしてではなくHTTP通信経路で取得するようにして、そのページをデバッガで追うための手順をwebで探した。

ところが本家の手順を踏んでもまっさらなページが表示されるだけでデバッグできない。他の情報を当たってもテキトーな方法を書いたものしかみつからない(“ここ”など)。困ってるのは自分だけなのなぁ、と試行錯誤と情報の断片の掻き集めとを続けて、ようやくそれらしい方法がわかった。

使用したもの

(以下は http://silverlight.org/GetStarted/ からリンクが張られている)

  • Visual Studio 2008 β2
  • Silverlight 1.1 Alpha Refresh
  • Microsoft ASP.NET Futures (July 2007)
  • Microsoft Silverlight Tools Alpha Refresh for Visual Studio (July 2007)

デバッグ手順

  1. Visual StudioでSilverlightプロジェクトを含むソリューションを開く

  2. ソリューションエクスプローラで、ソリューション項目を右クリックして、[Add][New Project...]を選択

  3. ASP.Net AJAX Features Web Applicationプロジェクトを作成

  4. ソリューションエクスプローラで、作成した ASP.NET プロジェクト項目を右クリックして、コンテキストメニューから Add Silverlight Link を選択

  5. 確認ダイアログで OK をクリック

  6. default.aspx をダブルクリックしてコードをエディタに表示させる

  7. <body>開始タグに続けて次のコードを追加

        <asp:Xaml runat="server" XamlUrl="~/Page.xaml" Width="640" Height="640" />
    
  8. ASP.NET プロジェクト項目で右クリックし、Properties をクリック

  9. Webページで、Specific Port を選択し、適当なポート(22000)を指定して通信ポートを固定

  10. Silverlightアプリケーションの通信部分のコードに記述したURLをテスト用に書き換える。(http://example.com/data.xml -> http://localhost:22000/data.xml)

  11. ASP.NET プロジェクト項目で右クリックし、Set as Startup Project をクリック

  12. default.aspx を右クリックして、Set as Start Page をクリック

  13. F5でデバッガ起動。Silverlight デバッグを有効にしたいかどうか確認されたら、Yes をクリック

これでSilverlightアプリケーションのコードをデバッガで追えるようになっているはず。


Silverlight 1.0RC/1.1 Alpha Refreshはインストール不可

Silverlight 1.1 Alpha はインストールできたのに、Refresh版がインストールできない。

Silverlight 1.1 Alpha Refresh Install Error

Silverlight 1.1 Alpha Refresh shows simple description for the installation error

なぜなのだろうとSilverlightのフォーラムで聞いてみたら、CPUがSSE(高速描画)命令セットを実装してないからだ、とのこと。

げべん。

CPU買い直しですか?
とすると、マザーボードもメモリもあわせて買わないかんとですか?


Force to append lang-code to feed links

I think rss feeds should always have language code, no matter what the Gengo setting is.

So, I made a patch.

[before]
http://wp.reedom.com/feed
[after]
http://wp.reedom.com/feed/ja/
Index: gengo.php
===================================================================
--- gengo.php   (revision 106)
+++ gengo.php   (working copy)
@@ -175,7 +175,7 @@
                                add_filter('year_link', array(& $this,'append_links'));
                                add_filter('month_link', array(& $this,'append_links'));
                                add_filter('day_link', array(& $this,'append_links'));
-                               add_filter('feed_link', array(& $this,'append_links'));
+                               add_filter('feed_link', array(& $this,'append_feed_links'));
                                add_filter('post_comments_feed_link', array(& $this,'post_comments_feed_link'));

                                // SQL control.
@@ -654,6 +654,12 @@
                return $this->append_link_language($link, $this->viewable_code_string);
        }

+       // Append language codes to other links.
+       function append_feed_links($link) {
+        $this->forced_append = true;
+               return $this->append_link_language($link, $this->viewable_code_string);
+       }
+
        // Called from wp_list_pages.
        function get_pages($pages, $arguments) {
          global $wpdb;
@@ -730,7 +736,8 @@
        function post_comments_feed_link($url) {
          global $post;
          if (get_option('permalink_structure')) $url = preg_replace("|/$post->code/$|", '/', $url);
-               return $this->append_link_language($url, $post->code);
+      $this->forced_append = true;
+      return $this->append_link_language($url, $post->code, false);
        }

        // Define the language query variable.

 


Feedのパーマリンクには必ず言語コードを付加させる

Gengoのパーマリンク設定に関係なく、フィード(RSS)リンクには言語コードを必ず含ませたいと思い、パッチ作成。

[前]
http://wp.reedom.com/feed
[後]
http://wp.reedom.com/feed/ja/
Index: gengo.php
===================================================================
--- gengo.php   (revision 106)
+++ gengo.php   (working copy)
@@ -175,7 +175,7 @@
                                add_filter('year_link', array(& $this,'append_links'));
                                add_filter('month_link', array(& $this,'append_links'));
                                add_filter('day_link', array(& $this,'append_links'));
-                               add_filter('feed_link', array(& $this,'append_links'));
+                               add_filter('feed_link', array(& $this,'append_feed_links'));
                                add_filter('post_comments_feed_link', array(& $this,'post_comments_feed_link'));

                                // SQL control.
@@ -654,6 +654,12 @@
                return $this->append_link_language($link, $this->viewable_code_string);
        }

+       // Append language codes to other links.
+       function append_feed_links($link) {
+        $this->forced_append = true;
+               return $this->append_link_language($link, $this->viewable_code_string);
+       }
+
        // Called from wp_list_pages.
        function get_pages($pages, $arguments) {
          global $wpdb;
@@ -730,7 +736,8 @@
        function post_comments_feed_link($url) {
          global $post;
          if (get_option('permalink_structure')) $url = preg_replace("|/$post->code/$|", '/', $url);
-               return $this->append_link_language($url, $post->code);
+      $this->forced_append = true;
+      return $this->append_link_language($url, $post->code, false);
        }

        // Define the language query variable.

 


Redirect loop

Days before I experienced redirect loops when I tested the `tag search’ feature of SimpleTagging. I thought `Gengo should be worked something wrong.’ then I looked around Gengo’s setting pages and found that disabling `”Gengo should append language codes to permalinks automatically.’ feature could hide the problem.

Till today, I’ve killed off bugs in Gengo I’ve seen. I’ve got some knowledge of Gengo.

And finally I found `the solution’ to the issue.

open `Gengo Exclusions' page in admin panel, 
add "/tag" to `Exclusions' box.

Oh, yeah, the exact way is provided by the author.


Drain HoleをGengoと共存させる

ダウンロードリンクを貼り付けるのに便利な Drain Hole

Gengo環境下でインストールすると get_currentuserinfo()関数は未定義 といったエラーが出るのでパッチ当て。

Index: drain-hole.php
===================================================================
--- drain-hole.php      (revision 105)
+++ drain-hole.php      (working copy)
@@ -57,6 +57,13 @@

        function DrainholePlugin ()
        {
+               $this->add_action ('init');
+               $this->add_filter ('redirection_first');
+               $this->add_action ('plugins_loaded');
+    }
+
+    function init()
+    {
                $this->register_plugin ('drain-hole', __FILE__);

                if (is_admin ())
@@ -78,9 +85,6 @@
                        $this->add_filter ('the_content');
                        $this->add_filter ('the_excerpt', 'the_content');
                }
-
-               $this->add_filter ('redirection_first');
-               $this->add_action ('plugins_loaded');
        }

 

パッチファイルのダウンロード »
1 Comment more...

IronRubyインストール

John Lam on Software: A first look at IronRubyを参考にIronRubyをインストール。

  1. IronRuby-Pre-Alpha1.zipをダウンロードして適当なところに展開

  2. .NET Framework 2.0 Redistributableをインストール

  3. IronRubyのビルドスクリプトBuild.cmdの中身を見る。

    %frameworkdir%\%frameworkversion%\msbuild.exe
      /p:Configuration=Release /t:Rebuild IronRuby.sln
    
  4. .NET Framework 2.0 Redistributableによって MSBuild.exe がどこにインストールされたか、エクスプローラで検索

  5. 見つかった場所を環境変数に設定し、ビルド

    CD C:\src\IronRuby-Pre-Alpha1
    SET frameworkdir=C:\WINDOWS\Microsoft.NET\Framework
    SET frameworkversion=v2.0.50727
    build
    

リダイレクトループ

以前、SimpleTaggingのタグ検索機能を使ったらリダイレクトループに陥ったことがあり、その時は Gengo との相性が悪いと判断して Gengo設定の「パーマリンクに言語コードを追加する」を無効にして逃げた。

今日まで Gengo のバグ取りをしてきて、ようやく回避方法を見つけられた。

  • 管理画面の Gengo の「除外URL」設定で、「任意フィルター」欄に “/tag”を追加

なんだ、回避機能が標準で用意されてたんじゃん。


Copyright © 1996-2010 During The Prime Hacking Hours. All rights reserved.
iDream theme by Templates Next | Powered by WordPress