Webアプリを創る

Umbraco 4.5.1 が公開されています

2010年7月26日

ASP.NET のオープンソースのCMSである Umbraco の バージョン 4.5.1 が公開され、CodePlex のページからダウンロードできるようになっています。先月に公開された 4.5 のバグフィックス版で、仮想ディレクトリ関係のバグも解消されたようです。そういうことで、このホームページの本体も、4.0.4 から 4.5.1 にバージョンアップする作業をしようと思っています。

このついでに、Umbraco のことを少し宣伝しておきます。以前に、MIcrosoft の ASP.NET のウェブサイトUmbraco で作成されることを紹介しましたが、ASP.NET のウェブサイトのフッターに下の図のように Powered by Umbraco の表示がされ Umbraco で作成されているというのがはっきりわかるようになりました。
image 
また、Visual Studio のオンラインテンプレートには、Umbraco UserControl と Umbraco Custom DataType のテンプレートが登録されているので、ASP.NET で、Umbraco を拡張する時には便利です。

image

最後に、Umbraco の次期メジャーバージョンである Umbraco 5 は、ASP.NET MVC のアプリケーションとして開発される予定だそうです。Umbraco の使いやすさに加えて、Microsoft のチームが ASP.NET MVC で開発中の Orchard CMS の成果を組み込んで、パワーアップしていってほしいと思っています。過去の例としては、DotNetNuke が、ASP.NET のサンプルアプリケーションである IBuySpy Workshop をもとにして開発され、現在では、ASP.NET の CMS としては最も有名なものになりました 。Umbraco は、ウェブサイトの作成者を引きつける力があるソフトだと思うので今後に大きな期待を持っています。

ExpressWeb でASP.NET アプリのインストールに注意!

2010年7月22日

この件につては、2011年10月12日に修正が完了済だそうです。

Windows レンタルサーバー ExpressWeb は、 ディスク容量 30GB、マルチドメイン/サブドメイン無制限、メールアドレス無制限で、ASP.NET 4.0に対応し、信頼レベル (trust level)も Full Trust で、SQL Server のデータベースも3個提供されデータ領域が300MBあり、それでいて、年額3150円の超お得なレンタルサーバーです。

ExpressWeb で DotNetNuke、Umbraco、N2CMS 等の ASP.NET アプリケーションをインストールして、うまく動作しなかったという経験はありませんか。自分も悪戦苦闘してしまいました。悪戦苦闘の結果、ASP.NET のアプリケーションを動作させる場合に注意しないといけないポイントが2点あるということがわかりました。初心者には非常にわかりづらい問題点なので、長時間悩んだ末に放置している人もいるのではないかと思ってメモを公開します。この問題点がわかってからは、ASP.NET のアプリケーションも快調に動作するようになりました。ExpressWeb は、日本では非常に少ない Windows レンタルサーバーで、海外のホスティングと比較しても十分にお得なレンタルサーバなので、このメモを参考にして、有効に活用する人が増えてほしいと思っています。なお、この問題は、WordPress 等のPHP で作成されているアプリケーションには無関係です。

1.machineKey の設定が必要
・現象及び原因

突然「アプリケーションでサーバー エラーが発生しました。」というメッセージがでるランタイムエラーが発生します。customErrors の mode を “Off” にすると、「Web Farm またはクラスタによってホストされている場合、<machineKey> 構成が同一の validationKey および検証アルゴリズムを指定していることを確認してください。」というエラーメッセージが出るので原因がわかります。そして、http://webboar.com/ で自分の Domain を調べて理由は納得しました。同一 IP アドレスを約 35000 ドメインが使っていました。machine.config で対応できるのであれば、個々のアプリケーションでいちいち設定しなくてもいいようにしてほしいものです。(2010/1/5追加 サイト毎に machineKey を設定した方が、セキュリティ的に望ましいようなので、各サイトのルートディレクトリのweb.configで以下のように、<machineKey>タグを設定するようにします。)

・対応策

<machineKey>タグを以下のように web.config ファイルの <system.web> タグに記述してやれば解消します。なお、<machineKey>タグは、http://aspnetresources.com/tools/keycreator.aspx で作成することができます。

<system.web>

<machineKey validationKey="xxxx" decryptionKey="xxxx" validation="SHA1" decryption="AES" />
</system.web>

2.Web.config の Handler セクションが削除されることがある
・現象及び原因

統合モードの場合に影響があります。といっても、ASP.NET 2.0 の統合モードが現在のASP.NETのアプリケーションの主流だし、ExpressWebでもデフォルトの設定です。「アプリケーションギャラリー」からアプリケーションをインストールした場合と下の図のように「Web サイトプロパティ」や 「仮想ディレクトリプロパティ」で、「ホームフォルダー」、「エクステンション」、「カスタムエラー」等のタブ(すべて確認したわけではありませんがほとんどのタブです)で「更新」ボタンをクリックした場合に発生します。

image

上の操作をすると、Web.config ファイルで、system.weServer セクションの handlers セクション(下の図の赤枠で囲んだ部分)が削除されてしまいます。このため、アプリケーションによっては、404 エラーが発生したり、javascript が正常に動作しなくなったりします。アプリケーションギャラリーからインストールすれば、正常に動作するものだと思い込みがちですが、アプリケーションのそれも一部だけが正常に動作しないので、結構いやらしいエラーです。これは、DotNetPanel のバグかそれの設定ミスだと思うので早くなおしてほしいと思っています。(2010/1/5 最近テストをするとかなり改善されていました。追加 アプリケーションギャラリーを利用したインストールは正常に動作するようになっています。また、バグが発生するケースはかなり少なくなっていますが、ルートディレクトリの場合は削除されるケースがあります。Web.config ファイルは必ずバックアップしておくようにしましょう。)

image

・対応策

Web.config に <handlers>セクションを追加します。<handlers>セクションの内容はアプリケーションによってことなるので、自分でインストールした場合は、インストール完了後にweb.config をバックアップしておくようにします。また、アプリケーションギャラリーからインストールした場合は、Web Platform Installer を使って該当ファイルをダウンロードするか、ローカルでインストールして、Web.config ファイルを取得し <handlers> セクションの内容を確認して追加するのが確実です。

ASP.NET で TinyMCE を導入

2010年7月21日

ASP.NET で TinyMCE をインストールしてみました。設定は簡単で動作も良好だったので、インストールの手順を紹介しておきます。

ASP.NET で使用できる HTML エディターには、TinyMCE 以外に、ASP.NET AJAX Control Toolkit に含まれる HTMLEditorFreeTextBoxCKEditor という選択肢があるのですが、HTMLEditor は機能が少なく処理がやや重いし、FreeTextBox は無料版では表作成及びxhtml の機能がサポートされていません。CKEditor については、FCKEditor の時代には、mojoPortal で使っていたこともあり結構気に入っていたのですが、CKEditor になってから日本語の入力でトラブルが発生するので使うのを止めました。今回再度試してみたのですが、日本語の変換が異常に遅くなる、入力したところの前の部分が消えたりカーソルの位置が別の所に移動するという現象が発生して、デフォルトの設定では利用できる状態でないと感じました。(2010/8/14 修正 CKEditor 3.3.2 では改善され使用上の問題はありません。)そういうことで、TinyMCE の組み込みに挑戦しました。

TinyMCE は、Javascript で作られており、Textarea を認識して動作するため、ASP.NETのページでも、PHPのページでもインストールの方法は基本的に同じになります。

1.TinyMCE の取得等

(1) TinyMCE のダウンロードのページから、Development package (Main package でも構わないのですが) をダウンロードします。

(2) ダウンロードした zip ファイルを解凍します。

(3) Visual Studio または Visual Web Developer Express を起動します。

(4) 新規でWeb アプリケーションかWeb サイトを作成します。既存のがあればそれを利用することもできます。

(5) (2) で解凍したファイルを tinymce 以下を作成した Web アプリケーションのルートフォルダーにコピーします。TinyMCE の動作に必要なのは、tinymce\jscripts\tiny_mce フォルダーにあるファイルだけなのでtiny_mce フォルダーのみをコピーしても問題なく動作します。その場合は、以下を適宜読み替えてください。

(6) ソリューション エクスプローラで、「すべてのファイルを表示」ボタンをクリックすると以下の図のように表示されると思います。tinymce\jscripts\tiny_mce フォルダーを選択し、右クリックして、「プロジェクトに含める」をクリックして、TinyMce で公開に必要なファイルをプロジェクトに含めておきます。

image

2.基本の設定

最初は、基本の設定をして、TinyMCE を動作させてみます。head 要素に、以下の赤字の部分を追加します。上の一行は、TinyMCE の Javascript ファイルである tiny_mce.js を使用するという宣言をします。それ以降の部分で、tinyMCE の設定を tinyMCE.init で行います。ここでは、mode を textareas に設定しただけの最小限の設定しなっています。

<head runat=”server”>
<title>TinyMCEの導入</title>
<script type=”text/javascript” src=”./tinymce/jscripts/tiny_mce/tiny_mce.js”>
</script>
<script type=”text/javascript”>
tinyMCE.init({
mode: ‘textareas’
});
</script>

</head>

head 要素の設定が終わったら、TinyMCE を実際に動作させるテキストボックスを作成してやります。ツールボックスで TextBox を選択して適当な場所にドラッグ・ドロップし、プロパティで TextMode を MultiLine に変更します。ソースモードでは、以下のような一行が追加されます。

<asp:TextBox ID=”TextBox1″ runat=”server” TextMode=”MultiLine” Height=”400px” Width=”600px”></asp:TextBox>

以上で、Web アプリケーションを開始すると、以下の図のように、テキストボックスの下側にボタンの数は少ないのですが TinyMCE のパネルが表示されれば TinyMCE 設定は成功です。これで TinyMCE は正常に動作しています。結構簡単でしょう。

tinymce02

3.HttpRequestValidationException への対応

画面に送信ボタンを追加すれば、TinyMCE で編集した結果は、TextBox1.Text で簡単に取得できるのですが、実際に実行してみると以下の図のように、「説明: 要求の検証により、危険性のあるクライアント入力値が検出されました。要求の処理は中止されました。この値は、クロス サイト スクリプト攻撃などのアプリケーションのセキュリティ問題を引き起こす可能性があります。ページ ディレクティブか、 構成セクションの validateRequest=false を設定することによって要求の検証を無効にできます。しかしこの場合、アプリケーションですべての入力を明示的に確認することをお勧めします。 」というエラーが発生します。
image

この解決策は、以下の二通りの方法があるので、好みの方法を選択してください。

(1) 要求の検証を無効にする

エラーの説明にあるように、ディレクティブに ValidateRequest=”false” を追加します。具体的には、aspx ファイルの先頭にある

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” %>

を以下のように変更します。

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default.aspx.cs” Inherits=”_Default” ValidateRequest=”false” %>

ASP.NET 4.0 では、さらに Web.config ファイルの system.web セクションに以下の一行を追加します。

<system.web>

<httpRuntime requestValidationMode=”2.0″ />
</system.web>

(2) HTML エンコードしたものを送信する

tinyMCE.init に以下のような一行を追加して、encoding を xml に変更し、TinyMCE で編集したHTML をエンコードしてサーバーに返すようにします。

tinyMCE.init({

encoding: ‘xml’,

});

サーバー側で以下のように、HtmlDecode すると元のHTMLソースに戻すことができるので、そのデータを使って保存等の処理をします。ここで少し不思議な動作と思うのですが、何も処理をしない状況で送信をするとテキストボックスにHTMLをエンコードしたもの即ちソースが表示されるようになります。それで、以下のように、テキストボックスにデコードしたデータを代入してやると正常に表示されます。テキストボックスに初期データを設定する場合もエンコードせずに代入します。

protected void Button1_Click(object sender, EventArgs e)
{
string s = HttpUtility.HtmlDecode(TextBox1.Text);
TextBox1.Text = s;
}

4.日本語パックの導入

TinyMCE の言語パックのページで、日本語を選択して言語パックをダウンロードします。次に、言語パックを解凍後、/tinymce/jscripts/tiny_mce/ フォルダーにコピーします。すると、例えば langs フォルダーには、en.js に加えて ja.js が追加されます。追加したファイルもプロジェクトに含めておきます。それから tinyMCE.init に以下のような一行を追加して日本語の指定をしてやります。

tinyMCE.init({

language : ‘ja’,

});

5.全機能の設定

2では基本機能のみの設定でしたが、ここでは全機能を設定してみます。TinyMCE の Examples のページからソースコードをコピーして貼り付けます。開始をすると、以下の図のように見慣れたTinyMCEの編集画面が表示され、エディターが動作します。

image

参考までに関係部分のソースを貼り付けておきます。

<script type=”text/javascript” src=”./tinymce/jscripts/tiny_mce/tiny_mce.js”></script>
<script type=”text/javascript”>
tinyMCE.init({
mode: ‘textareas’,
language: ‘ja’,
theme: “advanced”,
plugins: “safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,imagemanager,filemanager”,
// Theme options
theme_advanced_buttons1: “save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect”,
theme_advanced_buttons2: “cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor”,
theme_advanced_buttons3: “tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen”,
theme_advanced_buttons4: “insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage”,
theme_advanced_toolbar_location: “top”,
theme_advanced_toolbar_align: “left”,
theme_advanced_statusbar_location: “bottom”,
theme_advanced_resizing: true,
// Example content CSS (should be your site CSS)
content_css: “css/example.css”,
// Drop lists for link/image/media/template dialogs
template_external_list_url: “js/template_list.js”,
external_link_list_url: “js/link_list.js”,
external_image_list_url: “js/image_list.js”,
media_external_list_url: “js/media_list.js”,

// Replace values for the template plugin
template_replace_values: {
username: “Some User”,
staffid: “991234″
}
});
</script>

6.設定の調整

これでTinyMCE はそれなりに動作し、実用にも使えないことはありません。しかし、上のソースには、image list のようにインストールしていないものも含まれています。また、ボタンで不要なものを削除したり、エディタの細かな調整作業が必要になります。実務ではこのあたりで結構時間が掛かるように思います。時間ができれば、調整作業についてもメモをしたいと思います。

TinyMCE のマニュアル http://wiki.moxiecode.com/index.php/TinyMCE:Index

mojoPortal が 2.3.4.8 にバージョンアップ

2010年7月20日

mojoPortal が 2.3.4.8 にバージョンアップしています。バージョンアップの概要については以下のようなものです。

データベース関係の整備

SqlAzure が MS SQL に統合され、その関係で、MS SQL 2000 のサポートが終了しています。先日のWebMatrix Beta で遊んでみましたで紹介した SQL Server Compact 4.0 (SQL CE 4.0) が新たにサポートされています。手軽に moJoportal を使いたいという人は SQL CE 版を使ってみてください。

カレンダーツールの更新

カレンダーツール(Date Picker)が jQuery の新しいものに変更されています。

Intel D510MO + AOpen S110 自宅サーバー その後2

2010年7月19日

4月の中旬に自宅サーバを Intel D510MO マザー + AOpen S110 ケース + Windows 7 Pro に変更して約3ヶ月が経過しました。最近、気になったことを少しメモしておきます。

1.消費電力・発熱について

image これから、一年で最も暑い時期になりますが、最近 ATOM の温度を確認したところ、5月の時点と比べると10度ぐらい上昇していました。どのぐらいの温度まで大丈夫なのかが気になり、D510 のスペックを調べてみました。TJUNCTION が100度ということで、まだかなり差があるので安心しました。

ついでに消費電力について調べて見ました。データシートでのD510 の Max TDP は13Wです。サーバー全体としての消費電力を正確に測定するには、ワットチェッカーが必要なのですが、ワットチェッカーを持っていないので、ホームページで消費電力を測定した事例を調べることにしました。おおよそ 35~40Wのようです。消費電力を40W、電力料金を1kWhにつき23円とすると月額で約660円になります。まあ、妥当なところで、ATOM は自宅サーバー用には最適のCPUです。

2.自宅サーバー?共用サーバー?VPS?

どれを使うのがいいのかということですが、自宅サーバーも共用サーバーもVPSも最近はかなりコストが下がってきて自由に使えるようになりました。そういう時代だからこそ、自分の趣味にあったものを選択すればいいのではないかと思っています。ソフトやハードを自由にいじりたいのであれば自宅サーバーを選択すれいいし、ホームページを持ちたいだけというのであれば、とりあえずGoogle Site でホームページを作ってみればいいし、ウェブサイトが成長して信頼性が重要になったときには、VPS を検討すればいいと思っています。以下にそれぞれのメリットを書いておきます。

自宅サーバー 設定を自由にすることができ、デバッグがやりやすい。
容量や負荷に対する制限が少ない。
共用サーバー ハードウェアを管理する必要がない。
比較的低価格である。
WordPress 等のブログやCMS等のアプリケーションを自由にインストールし設定をすることができる。
Google App Engine 無料(制限あり)で利用できる。
Python、Java でプログラムが可能。
cron を利用したり、制限の範囲内であればバッチ処理も可能。
Google Site、Blogger
Office Live Small Business
無料(制限あり)で利用できる。
サイト構築ソフトが提供されるので、すぐにウェブサイトの構築を始めることができる。
VPS ハードウェアを管理する必要がない。
安定性が高い。