2011年1月28日

GoogleのCDNを使ってjQueryを読み込む時の注意点

今日、この記事を読んだ。

Easy HTML5 Template
http://www.impressivewebs.com/easy-html5-template/

HTML5についての良記事だ。

コメント欄の中にjQueryの読み込みにGoogleのCDNを使っている部分についてのやり取りがあって、そこが興味深かったのでメモしておこう。

常に最新版を使う様にする為には、マイナーバージョンを指定せずに、

http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js

の様に書いた方が良いのでは? という指摘に対して、

But regarding the versioning, that’s not the best choice, and it’s strongly discouraged. (...) there WILL be breaking changes even within a 1.4.x release. But mostly it’s for the caching. If you use the “1.4″ reference or the “1″ reference, you get zero cache benefit.

(注:かなり意訳)
それは最良の方法ではないし、むしろやらない方がいいと思う。同じ1.4.x系バージョンの中でも互換性の無い変更が行われる事が有り得るからね。でももっと大きな理由は、キャッシュの問題。"1.4"や"1"という表記を使った場合は、せっかくのキャッシュの恩恵を得られなくなってしまうんだ。

と回答している。

え、そうなの? と思ってさらにその下に示されていたリンクを読んでみた。

6,953 reasons why I still let Google host jQuery for me
http://encosia.com/2010/09/15/6953-reasons-why-i-still-let-google-host-jquery-for-me/


Caching and Google's Ajax Libraries API — Cache your jQuery
http://paulirish.com/2009/caching-and-googles-ajax-libraries-api/

これらによると、

「1.4.4」を指定すると取得した内容はブラウザによって1年間キャッシュされるが、
「1.4」または「1」の指定だと、1時間しかキャッシュされない

のだそうだ。


You should never do this in production.

本番環境では決して使うべきではない。

とまで書かれている。

実際にFiddlerを使ってGoogleからのレスポンスヘッダを確認して見た。

「1.4.4」を指定した場合

「1.4」を指定した場合



「1」を指定した場合


確かに、上の記事で指摘されている通りの様だ。

結論:
GoogleのCDNを使ってjQueryを読み込む時は、マイナーバージョンまで指定しよう。










.

「目標の公言は必ずしも目標達成に役立つわけではない」とは思わない

「他人に自分の目標を公言するよりも、黙っているほうが目標達成につながりやすい」という説を紹介している記事があった。

Lifehacker - 目標の公言は、必ずしも目標達成に役立つわけではないらしい
http://www.lifehacker.jp/2010/10/101022keepyourgoals.html

 どうも納得が行かないので個人的に腑に落ちなかった点を書いておきたい。

 この説の理由として、「他人に話してしまうとそれだけで「やった気」になってしまい、その満足感ゆえ、実際に目標を達成しようというモチベーションが上がりづらくなってしまう」という事が挙げられているが、果たして本当にそうだろうか。
 
 自分の体験から言うと「目標を公言しただけでやった気になった」という様な事は今までに一度も無い。むしろ公言する事によって目標とする状態と今現在の自分の状態の間のギャップの存在を公に認めて宣言する事になるので、モチベーションは上がりこそすれ下がる事は無いと思う。

 もしモチベーションが維持出来ずに目標を達成出来なかったのなら、それは公言したかどうかに関わらず、その人の「想い」がその目標にこもっていなかったからではないだろうか。本当に心の底から「こうなりたい」と想う自分を想像してそこから導き出した目標であればその様な事にはならないはずだ。

 2009年に心理学の教授が行ったという実験の結果が引用されているが、たった45分間の実験の結果で、1年~数年という長いスパンで見た場合の効果についても判断出来るとは到底思えない。

 そもそも、目標を公言したくない(出来ない)、という人は、どこかで最初から達成出来なかった場合の逃げ道を用意したいという気持ちがあるのではないだろうか。「絶対に達成するのだ」と思って、実際に達成した後の自分の姿を明確にイメージ出来ている人は、それを他人とシェアする事によってむしろ楽しくなるはずだ。

 自分はこれからも目標を公言してそれを達成して行く人間でありたいと思う。







.

2011年1月25日

前から気になっていた超小型省電力PCを試してみた

消費電力がたったの8Wという超小型PC「FIT-PC2i」を購入した。
標準でNICが2つ付いているので、Firewall用途にぴったりだと思ったからだ。

参考: hkatou Lab - fit-PC2i の導入


メーカー(CompuLab)のWebサイトでオーダーしてから、2週間もしない内に届いた。なんとイスラエルからの発送だったが、梱包状態は完璧だった。

パッケージはこんな感じ。


早速キーボード、ディスプレイ、マウス、CD-ROMドライブを接続した。

DELLの縦置きサーバー機と比べるとその小ささがよく分かる。

とりあえずWindows7をインストール。
何の問題も無く全てのハードウェアが認識された。無線LANもバッチリ。
グラフィック性能は決して高くはないが、通常のGUI操作なら問題は無い。Youtubeでの動画閲覧も試してみたが、ほぼ問題無しだった。ただし高解像度になると少しもたつく。

次はUbuntu10.10デスクトップ版を入れて見る。
こちらも何の問題も無し。無線LANもWindowsと同様にちゃんと認識された。インストール直後の状態だと画面の動きがWindowsよりも若干遅く感じられた。

ちなみにハードディスクは裏側のねじを2つ外せば簡単に取り付けられる。今回は手元に用意していた80GBのHDDを使用した。(SSDにしておけば良かったかも、と後から思ったがこの時点ではなんの不安も感じていなかった。)

さて、今回はFirewallサーバーとして使うのが目的なので、一度全パーティションを削除してから Ubuntu10.04LTSサーバー版を改めてインストールした。サーバー版だからなのか無線LANが認識されなかったが、無線LANを使う予定は無いのでとりあえず気にせず続行。インストール後、2つの有線LANをStaticで設定して、iptablesでパケットフィルタリングを開始。これでFirewallとして動く様になった。後はApacheの設定ファイルをいじってリバースプロキシを有効にして外部に公開するサイトの設定を書き込んだらひとまず完成だ。

ここまで全く問題無く順調に進んだ。素晴らしい。CPUは1.6GHz、メモリは1GBもあるので処理能力的にも余裕だ。ハードディスクからの発熱が直にアルミのケースから伝わって来るので手で触ると結構熱くなっているが、これによって放熱する構造になっているらしいのでまあ大丈夫だろう。

ついでにもう一台買おうかな。。。

と思いながら2晩ほど電源を付けっ放しにしておいた。

その結果、なんと3日目の朝、出社してみるとFIT-PC2iの電源が切れているではないか。「誰か間違えて電源落としたのか、困るなあ。」と思いながら電源ボタンを押すが、は、入らない。


電源を入れてもうんともすんとも言わない。


という訳で、今回買ったFIT-PC2iは3日目にして無用の長物となってしまった。
ああ、これからメーカーのサポートに連絡して状況を説明して返品手続きとか、面倒くさいなあ。

これからの顛末はまたの機会に。^^;

---
追記 (2月8日)
米国支社へ返品してから、約2週間弱で交換品が送られて来ました!
これから再度試してみます。詳細はリベンジ編としてまた別の記事に書きます。











.

2011年1月11日

IIS7.5 + ASP.NETで拡張子htmlのファイルを動的に処理する方法

1. Internet Infomation Service Managerで該当のサイトを選択し、「Handler Mappings」をクリック。


2. *.aspxを「PageHandlerFactory-ISAPI-4.0(または-2.0)」もしくは「PageHandlerFactory-Integrated」にマッピングしている設定の行を探して 「Edit」 をクリックし、「Executable」の内容をコピーしておく。

こんな感じか、もしくは
こんな感じになっているはず。

3. 右側の Actions から「Add Script Map...」もしくは「Add Managed Handler...」をクリックし、*.htmlに対するマッピングを追加する。Executable には上でコピーしておいたものをペーストする。

「Script Map」の場合

「Managed Handler」の場合

4. web.configの設定。

今回は下のページに書いてあった、Global.asax内のイベントで自前で変換する方法を使ったので、web.configの設定は特に無し。

Tip/Trick: Url Rewriting with ASP.NET
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

5. Global.asax.vb内での処理。

Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest
 Dim fullOrigionalpath As String = Request.Url.ToString()
 If fullOrigionalpath.ToLower().EndsWith(".html") Then
  Dim sUrl As String = fullOrigionalpath.Substring(0, fullOrigionalpath.Length - 4) & "aspx" '拡張子をaspxに変更。
  sUrl = sUrl.Substring(sUrl.IndexOf("//") + 2) '最初のhttp://までを除去
  sUrl = sUrl.Substring(sUrl.IndexOf("/")) '次のwww.yourdomainname.comまでを除去
  Context.RewritePath(sUrl)
 End If
End Sub


Private Sub Global_asax_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.BeginRequest
    Dim fullOrigionalpath As String = Request.Url.ToString()
    Dim array() As String = Split(fullOrigionalpath, "?")

    If array(0).ToLower().EndsWith(".html") Then
        Dim sUrl As String = array(0).Substring(0, array(0).Length - 4)
        sUrl &= "aspx"                                      '拡張子をaspxに変更。

        sUrl = sUrl.Substring(sUrl.IndexOf("//") + 2)       '最初のhttp://までを除去
        sUrl = sUrl.Substring(sUrl.IndexOf("/"))            '次のwww.hostname.comまでを除去

        If array.Length > 1 Then
            sUrl &= "?" & array(1)            'クエリーストリングがあれば最後に付加
        End If
 
        Context.RewritePath(sUrl)
    End If
End Sub


以上で取りあえず拡張子.htmlのファイルへのリクエストが.aspxへのリクエストに置き換えられて処理される様になった。


---
追記 1:
BeginRequestハンドラのコードでクエリーストリングがある場合に正しく処理されない問題があったので、上記の様に修正した。


---
追記 2:
「Managed Handler」の場合はIISの管理画面を使わずに web.configの<system.webServer>内の<handlers>タグの中に下記の一行を追加するだけでもOK。

      <add name="HTML is handled by ASP.NET" path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode" />







.

2011年1月7日

IIS6 + ASP.NETで拡張子htmlのファイルを動的に処理する方法

SEO的な理由から、ASP.NETで拡張子htmlのファイルを動的に処理したいという要望があったので、設定して見た。今まで出来るとは知っていたけど実際にやってみた事は無かったので、次回の為にまとめておこう。

ちなみに拡張子をaspxよりもhtmlにした方がSEO的に有利なのかどうかについては、未確認だ。実際のところどうなんだろうか。

1. IISの設定 (IIS6の場合)

Webサイトもしくはアプリケーションのプロパティで「Home Directory」タブ内の「Configuration」を開く。

開いたら、Application extensionsの内、.aspxの設定を開いて確認し、実行パスをコピーしておく。
次に「Add」ボタンを押して追加し、aspxの設定と同じ内容を入力し、拡張子をhtmlに変えて「OK」を押す。
この時に「Verify that file exists」のチェックを外すのを忘れない様に。



2. web.configの設定 (ASP.NET 2.0の場合)

次に、拡張子が.htmlのファイルに対してリクエストが来た場合に実際には.aspxのファイルが呼び出される様に、web.configの <system.web> セクション内に urlMappings の設定を追加する。

 
<system.web>
  (省略)
  <urlMappings enabled="true">
   <add url="~/index.html" mappedUrl="~/index.aspx" />
   <add url="~/detail.html" mappedUrl="~/detail.aspx" />
   <add url="~/about.html" mappedUrl="~/about.aspx" />
   <add url="~/help.html" mappedUrl="~/help.aspx" />
  (など)
  </urlMappings>
</system.web>


この方法の難点は、ワイルドカードや正規表現が使えないので全てのページについてaddタグを個別に設定する必要がある事だ。
IIS7だともっと柔軟に設定出来るらしいが、IIS6ではサードパーティのISAPIフィルタを使わない限りはこれで我慢するしかなさそうだ。


追加の説明はこちら。
[ASP.NET]複雑なURLを別のURLにリマッピングするには?[2.0のみ、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/503aspurlmapping/aspurlmapping.html






.

7インチ超のAndroidタブレットが続々登場

何やら急に7インチ以上のAndroidタブレットがたくさん出て来たみたいで訳が分からなくなりそうだったので、リストにしておこう。
これから買うならやっぱりAndroid3.0搭載のものが良さそう。ちょっと見たところ、仕様的には Eee Pad MeMOとXOOMが一歩抜きん出ている模様。


ASUS 「Eee Pad MeMO」
ASUS、7インチタブレット「Eee Pad MeMO」を発表--携帯電話機能も搭載
Eee Pad MeMO タブレット発表、感圧スタイラス対応&デュアルコアSnapdragon 採用
ASUS EPad: like the EeePad, but with less ecstasy
ASUS Eee Pad MeMo – 7-inch Android Tablet Announced [VIDEO]

MOTOROLA 「XOOM」
MOTOROLA-XOOM 製品情報
Motorola、Android 3.0(Honeycomb)搭載タブレット「Xoom」を発表。2011年第1四半期にリリース
iPadを追撃せよ!モトローラの新タブレットはAndroid3.0マシン

DELL 「Streak 7」
[CES2011]Dell、7インチAndroidタブレット端末「Streak 7」を発表

Samsung 「GALAXY Tab」
Samsung、7インチのAndroidタブレット「GALAXY Tab」発表
Samsung Galaxy Tab 製品情報

AU (Samsung) 「SMT-i9100」
iPadの牙城を崩せるか!?auも7インチAndroidタブレット「SMT-i9100」を発表

NEC 「LifeTouch」
7インチはちょうどいい?NECのAndroidタブレット(LifeTouch)
NECビッグローブが7インチAndroidタブレット『Smartia』を12月6日に発売へ

Camangi 「FM600」
3G通信対応、7インチ液晶のAndroid搭載タブレット端末 (Camangi FM600)
Camangi製品情報


その他にもマイナーなメーカーからもたくさん出ているみたい。
パナソニックも「ビエラタブレット」なるものを開発中とか。

いずれにせよ今年のタブレット市場は楽しくなりそうだ。


---
2/15 追記
これは文章入力には良さそう。ATOKとキーボードでのコピー&ペーストは魅力的。
ATOKも“Ctrl+c”も使えるキーボード付きAndroidポケットノート












.