2016 年 1 月 12 日でサポート終了となるバージョンの Internet Explorer でアクセスすると、その旨をひかえめに教えてくれるバーを表示するスクリプト

昨年の 8 月にアナウンスされ、すでに多くの方がご存じのとおり、来年 (2016) の 1 月 12 日からは、Internet Explorer のサポートポリシーが変更され、その Windows で動作する最も高いバージョンの Internet Explorer しかサポートされなくなります。 (※タイトルのサポート終了日付が間違っておりましたので修正しました。どうもすみません) 具体的には以下の組み合わせのものだけがサポートされるようになります。 Windows Internet Explorer 延長サポート終了 Windows Vista SP2 Internet Explorer 9 2017年 4 月 11 日 Windows Server 2008 SP2 Windows 7 SP1 Internet Explorer 11 2020年 1 月 14 日 Windows Server 2008 R2 SP1 Windows Server…

2

[実用HTML5API]ローカル ストレージへの画像のキャッシュ方法

最近、HTML5 API を使用した機能実装のサンプルを書く機会が増えてきたので、たまったところから数回に別けて書いていこうと思います。 さて今回のネタは、画像を Web ブラウザーの Window オブジェクトが提供する DOM ストレージのローカルストレージに保存する (キャッシュ) 方法についてです。   画像ファイルをキャッシュすることの利点 Web コンテンツでは以前から、写真などのビジュアルなコンテンツはもちろん、文字では表現の難しい内容の説明、あるいはページを装飾の目的で画像が使用されてきました。 時代は進み、回線の速度が向上してくると、コンテンツのリッチ化が進み、それに比例するように使用される画像の量は増える傾向にあります。 また、最近では高精細ディスプレイの普及、画面サイズの大型化などにより、画像のクォリティも高いものが使用されるケースが増えてきています。 しかしながら、回線の速度は常に高い状態を保障されているわけではないため、回線の状態、アプリケーションの構造によっては、画面の読み込みに時間がかかり、なかなか使用できないなど、ストレスを感じることもあるでしょう。 画像ファイルを Web クライアントのローカルストレージに保存し、これを <img> タグから参照させることで、画像の読み込みにかかる時間を軽減させることができます。   ローカルストレージとは? Web ブラウザーの提供する DOM ストレージの一つで、セッション別のデータまたはドメイン固有のデータを名前/値ペアとしてクライアントに保存できます。 詳しくは、以下のドキュメントをご参照ください。   DOM ストレージの概要 http://msdn.microsoft.com/ja-jp/library/cc197062(v=VS.85).aspx   ローカルストレージに画像データを保存する方法 DOM ストレージが提供するセッションストレージ、ローカルストレージが保存できるのはテキスト形式のデータのみで、画像のようなバイナリーデータは、そのまま保存することができません。 バイナリーデータをテキストデータに変換する方法として Web で一般的に使用されているのが、Base 64 エンコードです。 Base 64 でエンコードした画像データであれば、以下のように <img> タグの src 属性に指定することができます。 <img id="Img1"         alt=""…

0

IIS7.x での共有 Web ホスティングのためのサンプルアプリケーションVer2

以前このブログでも紹介させていただいたのですが Windows Server 2008 に搭載されている IIS 7.x を使用すると、IIS Manager for Remote Administration ( IIS 管理ツール) を使用して簡単な Web ホスティングサービスをすぐに開始することができます。 分かり易くいうと、自分のサーバーの IIS 上に作成した Web サイトを貸し出すことができる ( 正しくは、”管理させることができる” ) のです。 “貸し出された” 側、つまり ユーザーは、自分のマシンの IIS 管理ツールを使用して、インターネット越しに自分に割り当てられた Web サイトを管理/運用することができます。 (※ポートの設定が必要ですが) もちろん ユーザーは FTP を使用してコンテンツのアップロードが可能ですし、ASP.NET、PHP アプリケーションの配置/実行も行えます。また自分の Web サイト独自のユーザーを作成して、ディレクトリにアクセス権を設定したりということも可能です。 非常に便利で強力な機能なのですが、貸し出すサイトが多いと、Web サイトの作成や、共有に関わる設定などなかなか手間がかかります。 そこで以前、これらの処理を自動で行うサンプルアプリケーションを公開したのですが、今回はそのバージョンアップ版です。 以下は、このアプリケーションが行う処理の順番と機能を示しており、新たに追加された機能は青字の部分になります。 インターネット インフォメーション サービスマネージャーユーザー(※以下、"IIS 管理ユーザー") を作成 Web サイト用の物理フォルダを作成 Web サイト用の物理フォルダにディスククォータ…

0

IIS7 の機能を拡張してみる-指定した言葉の出力禁止

IIS7 は ASP.NET とのパイプライン (リクエストを受けてからレスポンスを返すまでの処理) の統合により、パイプラインにかかわる処理を .NET のマネージコードで記述することができます。 リクエストのハンドリング方法については、既に機能を紹介していますので、今回はレスポンスはハンドリングし、その中のコンテンツを書き換える方法について紹介させていただきます。 この "コンテンツの内容を書き換える = 出力を行う" という処理は本来ハンドラで行う処理ですが、今回はモジュールを使用したものを紹介します。 そのため紹介さていただきますサンプルコードは、既にハンドラが設定されているページ、つまりは、*.aspx や *.php 等の、サーバーサイドで何らかの処理を行うページでしか動作しません。 それなのに、なぜあえてモジュールとして実装したかというと、ええ、….じつは私の勘違いでモジュールとして作ってしまったからです、はい(恥) 以前、php アプリケーション内のリンクを、フレンドリな短い URL に書き換えるというモジュールを作成したこともあり、"ASP.NET 以外のページでも動作 = 静的なファイルでも動作" と短絡的に考えていたのですが、今回モジュールを作り終えてテストしたところ、静的なファイルでは動作しないこと&理由が判明したしだいです。(すみません)   今回のサンプルの機能 のっけから非常に残念な感じの今回のサンプルなのですが、どういった機能を実装したかというと、レスポンス内のコンテンツから任意の言葉を伏字にするという機能です。 この機能を使用すると、任意に指定したワード (言葉) がコンテンツに含まれていた場合、代替えのキャラクタで置き換えてくれるため、サイトの訪問者の目に触れさせたくない言葉をブロックすることができます。 人によっては "そんな機能が本当に必要か? 必要なのか??" と考えられるかもしれません。 しかしどうでしょう、 たとえば、取引先の社の Web サイトを覗いたときに、そのコンテンツ内に公序良俗に反する言葉や、差別用語や、社会通念上許されざる言葉が平然と使用されていたとしたら、今後その会社と深いリレーションを築きたいと思うでしょうか? また、いくら仲の良い友人からのメールであっても、幼児の三大爆笑ワードである "ば〇、う〇こ、ちん〇ん" といったような、下品な言葉が毎回多用されていたりしたら、その人の品性と精神的健康状態について強い疑問を持たざるを得ないでしょう。 さらに"言葉" には、理解した瞬間に著しく相手の気分を害するものもあります。しかもそれは、人間の肉体に備わった機能ではブロックすることはできません。 たとえば、今、このドキュメントをお読みいただいているわけですが、ご自身の肉眼に実際に写っているものは、じつは "文字" でも "言葉" でなく、モニタ上に並んだ映像素子の点滅でしかありません。 モニタに表示された光のパターンを脳が文字と認識し、文字の並びから文としての解釈が行われ、私の言葉が"再生" (処理が実行) されているのです。 この一連の処理は、人間の読解における基本的な処理ですが、基本的であるがゆえにその一連の処理は無条件に実行され、解釈される内容の良し悪しにかかわらず、その実行は防ぎようがないのです。…

0

IIS7 の機能を拡張してみる-レスポンスヘッダー内のサーバー名の改ざん

Web サーバーが返す HTTP レスポンス内 のヘッダー Server には、Web サーバーの名前が含まれています。 以下は、実際に IIS 7.5 が返すレスポンスヘッダー中の Server の値です。 Server: Microsoft-IIS/7.5 この情報は、インターネットでどのような Web サーバーが使用されているかの調査等に利用されていますが、管理者の方からは、セキュリティの観点からこの情報を隠蔽、あるいは削除したいというご要望を受けることがあります。 残念ながら、IIS 7 の標準の機能では、この機能は提供されておりません。(※) (※) IIS 管理ツールにある [HTTP 応答ヘッダー] の機能を使用してカスタムヘッダーの追加/削除などは可能です しかし、先日の記事でご紹介したように、.NET を使用して IIS の機能を拡張することでその機能を実装することができます。 この処理に使用する コードの量は非常に少なくシンプルであり、コンパイルも不要かつ、配置も容易ということで、驚くほど簡単にその機能を実装することが可能です。 セキュリティを強化するため、使用している Web サーバーが Microsoft 社の Internet Information Server 7 であることを世間の目からひた隠しに覆い隠す、という行為は、セキュリティの向上という観点から理解できますが、しかし、これは、あくまでも私一個人の心情の問題にすぎないのですが、日々仕事で IIS にかかわる者としては少々複雑な気分にならざるをえません。 たとえばもし、お子さんから "同級生に見られたくないから授業参観に来ないで"とか、あるいは恋人から "人に見られなくないから離れて歩いて" とか言われたらどうでしょう? この悲惨な心情たるや、あえてここで語るまでもないでしょう。 しかし、心ある人であればあるほど、無理をしてまで、その残酷な要求に笑顔で応えてしまうものなのです。 私が本日ここで、レスポンスヘッダーから IIS の名前を消すサンプルコードを紹介させていただくのも、もしかしたらそういう理由なのかもしれませんね。…

2

IIS7 の機能を拡張してみる-Hot Link (直リン) 禁止モジュール

IIS7 はパイプラインの変更により、.NET を使用してその機能を拡張することができます。 .NET を使用した IIS 7 の機能拡張については、詳しいセッションを過去に何度か行ったことがあるのですが、この機能に関しての記事をあまり見かけないので書いておきます。 .NET を使用した IIS 7 の拡張方法は大別すると、以下の方向性に大別されます。 リクエスト、レスポンスの応答処理 IIS 7 に対する操作 IIS 管理ツールの拡張 今回は リクエスト、レスポンスの応答処理 の中の、リクエストを処理を使用して Hot Link を禁止する方法をご紹介しましょう。 ちなみに Hot Link とは、Web サイトで公開しているコンテンツを、他の Web サイトが直接リンクして使用する行為です。"直リン" などと短縮して呼ばれることもあります。 "コンテンツへの直接のリンク" ということで、"Web に公開しているものに直接リンクしてなにが悪い?" と、疑問に思われる方もいらっしゃることてしょう。 たとえば、自分の Web サイトで、お宝画像、もとい、ユーザーから需要のある画像等を公開し、そのページに貼ったバナーのアフィリエイトで収益を上げているとしましょう。 ところが、他の Web サイトが、自分のサイトで公開している画像を <img> タグなどを使用して、さもその Web サイトが提供しているように公開していたらどうでしょう? "非常に腹立たしい"、のはもちろんなのですが、なんといっても他所のサイトの訪問者は、バナーの貼ってある自分のサイトのページにはアクセスしませんので、アフィリエイトが機能せず、経済的な損失も生じることになります。 そういった場合には、Hot Link をしている Web サイトに対して注意、警告する必要が出てくるわけですが、運営者が気弱だったり、相手が道徳心に欠けるような ならず者 だったりすると、たいがいの場合、泣き寝入りすることになります。…

0

Web サイト共有サービスでの DB 機能提供の実装

以前のブログの記事で公開しました IIS7.x での共有 Web ホスティングのためのサンプルアプリケーション について、以下の機能を追加する予定でおります。 1. ディスククォータの制御 2. ファイルスクリーン機能の実装 3. データベースとデータベースの管理ユーザー作成 1 と 2  の機能については、すでにこのブログでサンプルとしてコードをご紹介しましたが、今回は 3 の "データベースとデータベースの管理ユーザー作成" 機能について書きます。   この機能の目的 "IIS の共有 Web ホスティングサービスと、データベースが何の関係が?" と、思われるかもしれませんが、はい、実は機能的にはまったく何の関係もございません。 この機能を実装する意図は、共有サービスを利用する管理ユーザーに、ある程度自由に使用できるデータベースの機能を提供することです。 たとえば、Web サイトには静的なコンテンツだけでなく、アプリケーションも配置されることが多々ありますが、それらアプリケーションの多くはデータベースを使用します。 それらデータベースの作成を、セキュリティとリソースの配分をコントローラブルに行えるようにすることが今回の実装の目的です。 ということで、今回のサンプルコードは以下の要件で作成しています。 ターゲットとなるのは SQL Server (MySQL はよく知らないので) ユーザーアカウントを作成し、指定されたデータベースのみアクセス権(db_ower)を与える データベースはユーザーが DL 可能とするためファイル形式で作成する データベースのサイズ(初期/増分/最大)を指定可能とする 以上の要件を踏まえて書いてみたのが以下の SQL 文です。 –データベースを作成 CREATE DATABASE contoso ON (NAME = contoso_dat,   FILENAME…

0

おまけ:NTFS クォータエントリを設定するコード

現在、Tech days 2010 の準備と並行して、IIS TechCenter 向けに和訳された IIS.NET ドキュメントの監修作業を行っています。 そこで WMI でなく、DiskQuotaTypeLibrary (dskquota.dll) を使用したサンプルコードの載ったページを見つけたので、一足早く紹介させていただきます。 ココです↓ 『Provisioning Sample in C#』 http://learn.iis.net/page.aspx/285/provisioning-sample-in-c/ ただ一つ、非常に残念なことには、ここに掲載されているクォータのサンプルコード、AddUserDiskQuota メソッドは動作しません…Orz。 なぜなら DiskQuotaControlClass のインスタンスを取得するのに使用している GetDiskQuotaControl メソッドは DiskQuotaTypeLibrary に無いからです。 この GetDiskQuotaControl メソッドがこの地球上にどこかに本当に存在するか否かは別として、以下のようにインスタンスを取得するように記述しなおすことで、このサンプルコードは正常に動作するようになります。 DiskQuotaControlClass diskQuotaCtrl = GetDiskQuotaControl(diskVolume); ↓ 以下のように変更 DiskQuotaControlClass diskQuotaCtrl = new DiskQuotaControlClass(); diskQuotaCtrl.Initialize(diskVolume, true); 修正した AddUserDiskQuota メソッドの全体のコードは以下の通りです。 using DiskQuotaTypeLibrary; //windows\system32\dskquota.dll を参照設定 public static bool AddUserDiskQuota(string…

0

IIS7 Web サイト共有ホスティングのためのプロビジョニング用サンプルコード

前回のブログに書いた通り、ホスティング事業者様向けのイベントに向けて、エンドユーザーに IIS7 の Web サイトを管理させるためのプロビジョニング用を作成しています。 セットアップ用のコンテンツはまだ書いていませんが、コードができたのでご紹介しましょう。 このコードは以下の処理を行うためのものです。 1. IIS マネージャーユーザーアカウントを作成 2. Web サイト用の物理フォルダを作成 3. Web (HTTP) サイトを作成 4. 作成した Web サイトに FTP をバインド 5. 作成した Web サイトの [IIS マネージャーのアクセス許可] に作成したIIS マネージャーユーザーアカウントを登録 この一連の処理が完了すると、エンドユーザーは、IIS マネージャーを使用して、指定した自分の Web サイトに、指定した IIS マネージャーユーザーアカウント情報でログインし、Web サイトの管理を行えるようになります。 またコンテンツの更新などは FTP を使用して行えます。 もちろん、サーバー側でしっかり設定しておけば、ユーザーに任意で ASP.NET や、PHP のアプリケーションを実行させることが可能です。 これらの処理を完全に行わせるのは、プログラミングのコードだけではなくて、サーバーの設定も必要ですが、今回は前述の 5 つの機能を実行するサンプルコードのみをご紹介します。 なお、サンプルはクラスライブラリのものですので、そのままでは実行できませんので、適宜アプリケーションに組み込み、管理者アカウントで実行してみてください。 サンプル(C#) : IishostingHepler クラスの定義 using System;…

0

vhd をドライブとしてマウントするには?

私、職種としてはデベロッパーエバンジェリストのはずなのですが、なぜか普段の業務では ASP.NET よりも Windows Server、IIS の話をすることが多いです。(というかほとんどそればかり話しています。) そんなわけで、私の二台あるノート PC の一台には Windows Server 2008 (64bit) がインストールしてあり、その Hyper-V 上ではいくつかの OS が動作するようになっています。 この Hyper-V は、仮想化された OS でも物理マシンにインストールされているのとほとんど変わらないパフォーマンスで動作するので非常に重宝していますが、少々不便を感じていることがありました。 それは、あたりまえのことなのですが、仮想マシンが動作していないと、仮想マシンにディスクにアクセスできないということです。 ちょっとしたファイルをコピーする場合でも、いちいち仮想マシンを起動する必要があり、また、他の仮想マシンが動作していると物理的なリソースの関係で起動できないこともありました。 そんなときにちょうど "vhd もドライブとしてマウントできる" ツールを発見。 Gizumo Dive http://arainia.com/software/gizmo/overview.php?nID=4 早速 Web サイトにアクセスしてみると、64 bit OS にも対応しているということで期待してインストールしてみましたが、私の Windows Server 2008 R2 (64 bit) 環境ではドライバがンストールされず動作しませんでした。 しかし人間というものは不思議なもので、期待したことが出来ないとなると"なんとかしてやろう"、という気になるもので、MSDN ライブラリの中から API を探し出してツールを作成してみました、 作成したと言っても前出ツールのような独自のドライバーを持った高等なものではなくて、Hyper-V のサービスが持っている Virtualization WMI Class の…

1