Dreamhost はデフォルトで Subversion をサポートしていますが、もちろん Git も使えます。詳しくは こちらの公式 Wiki (英語) を参照してください(公式サポート外とはいえ丁寧に解説されています)。

さて、Git に大量のファイルを入れていると、サーバーサイドの Git プロセスが重くなり Dreamhost のリソース上限にヒットしてしまい、巡回プログラムに Kill されるケースが増えてきます。

Yikes! One of your processes (git, pid 4323) was just killed because your
processes are, as a whole, consuming too much memory. If you believe you've
received this message in error, please contact Support.
Killed

この問題の対処方法として、サーバーサイトで下記のような設定を行い、リソースの消費を制限することで問題を回避できました。今では 公式 Wiki にも書いてありますね。

git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m"
git config --global pack.threads "1"
git config --global core.packedGitWindowSize "1m"
git config --global core.packedGitLimit "100m"

VPS プランを導入するのも勿体無いし… という場合などにお試しくださいまし。

僕は当初、この問題への対処法がわからず、Unity 関連のソースファイルは Bitbucket に移動してしまったんですが、もっとよく Wiki を読んでいれば回避できたようです。

スキーマレスの Azure Table Storage では、文字列のContainsを使ったQueryはサポートしないようですね。(ただし StartsWith は CompareTo を応用することで使えるらしい…)

Linq to Azure Table では普通に書けるので、ダメもとで下記のコードを試してみたのですが、500 Error が返されるため、ちょっと調べてみました。

var query = from t in this.CreateQuery(EntitySetName)
            where (t.PartitionKey== ProductTable.PartitionKey) && t.Tags.Contains(tag)
            select t;

return query.ToList();

MSDNを漁ってみると、下記のような投稿が見つかりました。
LINQ SubString Query Using Azure Table Storage…

また下記のBlog記事を見るように提案されています。
Implementing a Simple Word Search Using Azure Table Storage

結局のところ、部分文字列の検索に関しては、自前でインデクス化したテーブルを別途作ってやるのが早道のようですね。確かに理にかなっています。

今回の(僕の)用途では、タグ付けされたアイテムを抽出するだけですから、アイテムの登録・更新時に、検索用テーブルにアイテムを登録してやることで実装したいと思います。

英語の記事ですが、ASP.NET MVC で多言語対応するための、素晴らしい記事です。

ASP.NET MVC 2 Localization complete guide

まさに完全ガイドですね。

ASP.NET MVC のローカライゼーション手法については、ローテクな雰囲気を感じますが、いかにも MVC っぽくて良いのかもしれません。

着手しているプロジェクトでは、運営コストの観点から、ASP.NET MVC は REST API の提供と、管理者サイトUIのみで使われる予定なので、今回は、この記事の出番は少ないかも。

今回は、ASP.NET MVC 2 が自動生成する View (Webフォーム) にて、各項目のラベル表示を変更する方法について調べてみました。

まず、View を追加するまでの方法については、MSDN の下記の記事が参考になりました。
10 行でズバリ !! ASP.NET MVC におけるデータの取得から画面表示までの流れ (C#)

上記を参考にしつつ、Azure Table ストレージに作ったテーブルに、TableServiceEntity の派生クラスを挿入するコードまでは、簡単に書く事ができました。

でも、このままだと、下記のように、変数名がそのまま表示されちゃうんですよね。

image image
こんなコードが自動生成される。 こんな感じで 変数名 が表示される。

 

解決方法としては… なんかググったら下記のプレゼンテーションがヒットしました。 (^_^;
ASP.NET MVC 2 ~新機能の紹介~
上記は 技術ひろば.net 様が公開して下さっているようです。ありがとうございました。

要するに LabelFor() の処理では 、Windows Form の PropertyGrid と同様、System.ComponentModel 名前空間にある DisplayName 属性の値を表示しているんですね。

using System.ComponentModel;
  :
[DisplayName("画像 (サムネ)")]
public string ImageSmall { get; set; }          // 画像(小)
[DisplayName("画像 (詳細)")]
public string ImageLarge { get; set; }          // 画像(大)

という訳で、表示対象のクラス定義にて、上記のように DisplayName 属性を加えてやったところ、無事に下記のような表示になりました。簡単ですねぇ。

image

通常の用途なら、このあたりで十分かもしれません。めでたし、めでたし。

ただ、多言語対応を考慮すると、下記のように DisplayAttribute の派生クラスを自前で定義するほうが良いかもしれませんね。 -> Localization of DisplayNameAttribute

さて次回は、この調子で多言語対応について調べてみたいと思います。

最近、個人的に Windows Azure で動作するサービスを書いてます。

やっぱ Azure で書くなら MVC だよね~、という訳で、これから幾つか備忘録的なポストをしていく予定です。正直、MVC も Windows Azure も実戦は初めてなんですが。

まずは、Azure 向けの開発で参考になった記事をまとめてみます。

業務システムでWindows Azureを使うための42の覚え書き
とても良記事でした。実際にサービスを稼働させる上で考慮すべきポイントが簡潔にまとまっていてすごく参考になりました。 PowerShell の専用コマンドレットを使って Windows Azure のDeployment を制御するという辺りが特に実用的でした。

PowerShell で始める Windows Azure アプリケーション管理
課金体系を考えると、Windows Azure のアプリケーション管理は切実な問題です。(現在の課金方法では、サーバーにアプリを配置しているだけで課金される)
この記事では、PowerShell を使って、開発マシンから適切に Windows Azure を管理する手法が詳細に説明されており、とても参考になりました。

コードで学ぶ Windows Azure アプリケーション開発入門
実際の開発方法については、こちらの連載が参考になりました。下位の概念についても丁寧に解説されているため、理解が深まりました。

Windows Azure ストレージによるアプリケーション エンジンの強化
実際に各種ストレージを実装する際に、とても参考になりました。この記事では Queue と Table について簡潔に解説されています。着手しているプロジェクトでは SQL は使いたくなかったので、この記事だけで用が足りてしまいました。

とりあえず、以上です。

これ意外にも、MSDN を筆頭に、とても実践的な資料が沢山公開されていますね。
書店では、さっぱり関連書籍を見かけませんが、オンライン資料は非常に充実していて驚きました。

そろそろ旬の技術、という事でしょうかね~。

従来、ドラッグ&ドロップでListBoxのアイテムの並び順を変えるのは、少々めんどうでしたが、Silverlight3 の対応により、とても簡単に行えるようになったようです。

image

そもそも、WPF/Silverlight の ListBox は、単純な文字列から複雑なコントロール群まで、なんでも格納できるというパワフルなものですが、ここに数行のコードを追加するだけで、ドラッグ&ドロップなんかも簡単に実装できるんですね。

ポイント

  1. 格納したいオブジェクト群を 「ObservableCollection」 というリストに格納します。
    • ObservableCollection commandList = new ObservableCollection();
  2. その ObservableCollection を ListBox.ItemSource にセット。
    • this.CommandListBox.ItemsSource = this.commandList;
  3. XAMLで下記の太字部分を追加してやります。


 

     
         
             
                 
             

         

     

 

ネタ元

http://www.xdevsoftware.com/blog/post/Reorderlist-with-Silverlight-3-Drag-and-Drop-Listbox-.aspx

余談になりますが、上記の XAML では として を定義していますが、この StackPanel の Vertical を Horizontal にするだけで、横方向の ListBox も作れてしまいます。

このあたりの柔軟さが、XAML の魅力ですね。

以前から興味があったので、Visual Studio 2008 と Blend 2.5 のプレビュー版(ベータ版で無料)を使って、ちょっとしたゲームっぽいアプリを書き始めました。

Blend 2.5 に関しては、まだプレビュー版というだけあって、かなりラフな出来栄えですね(生成されたソースコードのコメント部分が文字化けしていたりします)。

ただ、基本的に 2.0 の機能は踏襲しているようなので、今のところ致命的なバグには遭遇していません。

さて。とりあえずWPF+Blend について、気づいたことをまとめてみました。
これから学んでいくべきポイントをずらずらと・・・

  • まだわからないこと
    • 画像などのリソース管理は、Visual Studioのプロジェクトに任せた方がいいのだろうか…。Deployのサポートが受けられるとか、楽といえば楽なんだけど、柔軟性の面で少し心配。
  • わかったこと
    • XAMLでカスタムのGUIエレメントを定義したい場合は、UserControlで作るってことでいいみたい。
    • デフォルトで子アイテムをクリッピングしてくれない。
      …これってメリットあるのかな?まぁ、勝手にクリッピングするより、しないほうが自由度が高いか。ともあれ、別途クリッピング領域を設定してやる必要がある。
  • 使えそうなこと
    • プログラマブルにエレメントを配置するにはCanvasというのが使えそう。
  • だめそうなこと
    • XAMLレベルで(XAMLで作成した)UserControlを派生して使うことができない。 .NET 3.5 でも未対応。う~ん、まじですか。
    • Visual Studio と Blender を同時に起動して作業していると、ソリューションを書き換える系の操作でデータロスが発生する。(変更点をマージしてくれない)
    • べつにWPFだからってD&D処理が楽に書けるようになった訳ではない。http://forums.msdn.microsoft.com/en-US/wpf/thread/52ab73d7-242e-4074-8950-8d6ad0bf92f4/

いつもは技術書とか買うんだけど、あんまり良さそうなのが見つからなかったので、WEBから情報を得ながら、細々とやっております。

まだまだ道のりは長そうです。

image最近、TrendCatcher の Google Desktop 版のリニューアル作業中です。

Google Desktop Gadget API については、ドキュメントの情報不足や誤りが原因で、時間が取られることが多いのが難点です。

今日の学習内容についてまとめると・・・

続きを読む