気軽に Web コンテンツを書くためのエディタ

新年あけましておめでとうございます。 昨年は、Windows 8 リリースに向けての準備に始まり、リリースを終えて一年が終るという、私にとっては本当に Windows 8 一色の一年でした。 Windows 8 は、リリースされたとはいえ、その新しい UI 上で動作する Windows ストア アプリはまだまだ少ない状況ですので、今後も引き続き、Windows ストア アプリの開発に関する情報をお届けしていく予定です。 もちろん、Windows ストア アプリだけでなく Internet Explorer 10 や、たまには IIS8 の情報も出していければ、思っておりますのでご期待ください。   さて、年が明けて第一回めの投稿となる今回のネタですが、Windows 8 には全く関係ない、自作ツールの紹介です。 実は、3 年ほど前まで、外部のブログで、数回の記事にわけてテキスト エディタを開発し、C# と Windows デスク トップアプリケーションの作り方を学ぶ、というのをやっておりました。 そのブログは最終回の直前で、私の業務内容が変わったこともあり、そのまま中断していたのですが、先日そのブログを読んでいたという方から「最終回の記事を書いてほしい」というリクエストがあり、つい一昨日、お正月明けの勢い(?)を借りて最終回の記事を投稿した次第です。 その際に、当時作成したテキストエディタのソースを引っ張りだして来て、Visual Studio 2012 でのコンバートと、細かいコードの調整を行ったのですが、使ってみるとなかなか使い勝手がよく、ちょうど手軽に Web コンテンツを書くツールも欲しかったこともあり、その記事を投稿後に本格的に自分用に機能を追加してみた次第です。 さすが、自分用に作っただけあって、使い勝手はすこぶる良いです(笑) 使い方の紹介と、ソースコードもダウンロード可能としますので、興味のある方はそのまま使うなり改造して使うなりしてみてください。 以降は、このテキスト エディタの機能の紹介になります。 メモ帳との違い テキストの編集機能は メモ帳 とまったく変わるところはありませんが、それ以外でさまざまな変換機能、入力支援機能などが追加されています。 これら機能のほとんどは、このテキストエディタのメニュー [ツール] –…

1

IIS 7 版 mod_info 的なものをサービスとして使用するツール

先日のブログで、IIS 7 用の Apache における mod_info、mod_status 的なモジュール (ハンドラー) について書きました。 先日のブログにも書いたとおり、このモジュールは HTTP リクエストを受けると、その時点のサーバーのリソース使用状況の情報を返し、クライアントが Web ブラウザであれば、その情報を目視することができます。 しかし、実際に送られてくるデータは HTML ではなく XML であり、かつ、SOAP や JSON でもデータを返せるので、アプリケーションはこれをサービスとして使用することができます。 言ってみれば、羊の皮を被った娘、ちがった、狼的な仕様となっているわけですが、そんな 便利な機能もそれを使うクライアントが無くてはただの Web ページと変わりません。 そこで今回は、このモジュールが出力する XML を受け取って表示を行うアプリケーションの作成方法について書きたいと思います。 ステップとしてはこんなとこでしょう。 1. Web サーバーにリクエストを出し、レスポンスを取得する 2. XML を処理する ここからは上記 2 点についての具体的な簡単なコードをご紹介しましょう。あ、.NET で言語は C# ですよ。   Web サーバーにリクエストを出してレスポンスを受け取るには? じつは、いちいち項目を上げるほどでもなく簡単な記述で可能です。 具体的には以下のように記述します。 //リクエストのインスタンスを生成 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(http://mySweetWebServer/iisreswatch/iis.info); //クレデンシャルを指定 request.Credentials =…

0

IIS 7 版 mod_info、mod_status 的なもの

最近、イベントの登壇やらドキュメントの作成やらで、とんとコードを書く機会が無かったのですが、久々にひとつ書くことができました。 今回作成したのは Apache における mod_info や mod_status のようなものです。 作成に至った経緯はほかでもありません。 現在、IIS の師匠、奥主さんと二人で 『インターネット Web サーバー構築ガイドライン (ドラフト版) 』 というのを書いているのですが、その作業中に、奥主さんより、“Apache には動作状況を Web ブラウザから確認できる mod_info や mod_status というのがあるんだけと、IIS にはないみたいだから作って” と依頼されたためです。 そう、IIS7 では “ないものは作ってしまえ” ということが可能なのです。 というわけで、作成することになったのですが、いまさら Apache と同じものを作ってもあんまりクールじゃないなぁってことで、”IIS  における、IIS ユーザーのための、IIS による状態報告ツール” といういうことで IIS の構造に合わせて作成してみました。 また、情報の出力形式についても、人間だけでなく、アプリケーションからも使用できるようにしようということで、コンテンツの出力正式に複数のフォーマットをサポートするようにしました。 具体的には以下のような機能を持っています。   各 IIS オブジェクトのリソース状況のブラウザ表示 IIS 7 の構造に合わせ、”サーバー本体”、”Web サイト”、”アプリケーションプール”、”ワーカープロセス” に分かれて現在の状態が表示されます。またページ内のリンクをクリックすることで、目的のオブジェクトのさらに詳細な情報にアクセスすることができるようになっています。 図 : IIS リソース情報画面 たとえば、ワーカープロセスのページでは、現在処理を行っているリクエストの簡単な内容なども確認することができます。…

1

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.x での共有 Web ホスティングのためのサンプルアプリケーション について、以下の機能を追加予定でいます。 1. ディスククォータの制御 2. ファイルスクリーン機能の実装 3. データベースとデータベースの管理ユーザー作成 今回はファイルスクリーン機能をどのように実装するかについて書きたいと思います。 さて、その前にファイルスクリーンについて簡単に説明しておきましょう。 ファイルスクリーンとは ここで述べるファイルスクリーンとは、ディスクに配置されるファイルを選別 (screening) する機能です。 具体的には、ファイル名や拡張子により、ファイル種別を判別し、コピーを許可するか拒否するか、はたまた監視用にログに記録だけを残すかを指定することができます。 つまり、ユーザーにアップロードしてほしくないファイルがある場合は、コピーされないようにしたり、またはログだけを残して後で、うへへぇ~、とか言いながら (べつに言わなくてもいいですけど) 内容を確認するといったことができるのです。 ところで、アップロードされたくないファイルというのはどういうものがあるでしょう? たとえば、自分が Web サイトの共有サービスを運営していたとして、ユーザーの Web サイトに実行ファイルや、オーディオファイル、動画ファイルが山ほどアップロードされていたら、なんかドキドキしませんでしょうか? 実行ファイルは凶悪なウィルスかもしれませんし、違法コピーされたソフトウェアかもしれません。マルチメディアファイルは著作権やら公序良俗などに反しているかもしれません。 とくにマルチメディアファイルは内容のいかんにかかわらず、プログレッシブダウンロードで配信をされるとネットワークの帯域を圧迫する可能性があります。(※ IIS7.x には、プログレッシブダウンロード時の帯域を制御を可能するビットレートスロットリング モジュールが用意されており、 IIS.NET より入手して使用することができます。『Bit Rate Throttling』:http://www.iis.net/expand/bitratethrottling) そういった場合にファイルスクリーンの機能を使用して、これらのファイルのアップロードを拒否することが可能です。 この機能は、Windows Server 2008 に搭載されている ファイルサーバー リソース マネージャー (FSRM) の機能を使用することで実現することができます。 FSRM を使用した手動でのファイルスクリーンの方法については、お手数ですが以下のリンクの内容をご参照ください。 FSRM – 『ファイルスクリーンの管理』 http://technet.microsoft.com/ja-jp/library/cc732074.aspx FTP 7.5…

0

コードによるディスククォータの設定

先日のブログの記事で、IIS7.x Web サイト共有ホスティングサービスのための、プロビジョニング用のサンプルアプリケーションを公開させていただきましたが、早速アップデートの準備を進めています。 次のアップデートでは、以下の機能の追加を予定しております。 1. ディスククォータの制御2. ファイルスクリーン機能の実装3. データベースとデータベースの管理ユーザー作成 その中から、今回はディスク クォータの制御をどのように実装するかについて書きたいと思います。 Windows Server の 2 種類のクォータ機能 Windows におけるディスク クォータの機能は、Windows 2000 で NTFS ディスク クォータが初めて搭載され、Windows Server 2003 R2 からは、ファイルサーバー リソース マネージャー (FSRM) が提供する、記憶域によるクォータ機能が追加されました。 この二つのクォータの機能の違いはなにかというと、NTFS ディスク クォータは、ユーザーアカウント、セキュリティグループに対しディスクの使用量を制御するのに対し、 FRMS が提供するクォータの機能は、フォルダごと、ドライブごとに、個別に使用量を設定することができます。 ちなみに前者の NTFS ディスククォータは、Windows XP,Vista, 7 などのクライアント OS にも付属していますが、FSRM はサーバー OS のみに付属します。 この 2 つのディスククォータの具体的な使用方法については、以下のドキュメントをご参照ください。 [HOWTO] Windows Server 2003 のディスククォータを使用してディスク容量とディスクの使用を管理する方法』 http://support.microsoft.com/kb/326212/ja (※)…

0