2013年4月24日

Androidのアプリ開発にTFSとAzureを使ってみる(3)

今回も長いです

TFSでのプロジェクト管理の軽いお作法的なことを書いてみます。
前回も長かったですが(ちゃちゃっとやれば数分でできることなのに……)、今回も長くなりそうで。
先にごめんなさいします。

ソースのチェックイン

前回、ソースファイルをTFSに登録するところまでやりました。
ここからはルーチンワーク的な作業になります。
まずはファイルのチェックインから。

チェックインは当然のことながら、「ソース管理」の画面で登録したファイルのみ行われます。
ただ、作業をしていると自然とファイルが追加されていきます。
それについては、既に登録されているディレクトリ下に追加したファイルは自動的にソース管理に追加されるようです。

すでにファイルは登録されているとして。
まずは「チームエクスプローラー」ウインドウの上部にある▼のついた部分があります。
(通常なら「ホーム▼」になっているはず)
その▼部分をクリックするとメニューが開くようになっています。
その中で、「保留中の変更」を選んでください。
下記のようになり、変更・追加したファイルが一覧になって表示されます。

050

あとはコメント欄に変更履歴なんかを書いて、「チェックイン」のボタンを押せばファイルがチェックインされます。
VSSとは違って、特にそのままチェックアウトしなおさずに変更を重ねて行っても大丈夫です。
変更のコンフリクトがあればどのファイルがコンフリクトになっているか知らせてくれますし、マージツールも起動できます。

プロジェクトの設定

▼メニュー内から「設定」を選ぶことでプロジェクトの設定を行うことができます。

051

複数人で編集する際にはこの中の「セキュリティ」「グループメンバーシップ」の設定は必須になってきます。
ユーザーはActiveDirectoryで管理されているものや、動かしているサーバー内のユーザーなどを設定することが可能で、メールアドレスが設定されているとそのまま引っ張ってこれたりもするようです。

この「設定」内の「作業項目のイテレーション」を選ぶと、ブラウザウインドウが新しく開き、イテレーションを設定することができます。
「イテレーション」とはTracなどの「マイルストーン」で、大まかな作業区割りになります。

052

項目をダブルクリックすると設定変更できます。
ここで指定できるのはイテレーション名と期日です。

053

タスクを作ってみる

タスクは「作業および見積り」です。
これはできるだけ細かく入力することをお勧めします。
まずはメイン画面作成のタスクを作ってみます。

▼メニューから「作業項目」を選びます。
すると、チームエクスプローラーのウインドウが以下のように変わりますので、「新しい作業項目」をクリックしてください。
メニューが開きますのでその中から「タスク」を選ぶことで新しいタスクを作ることができます。

056

057

このウインドウの項目を埋めていくことで行わなければいけない項目を作成します。
「状態」や「理由」は最初に作った段階では新規しか選べません。
「イテレータ」は先ほど作成したイテレータを選択することができます。
この中で仕事で使うには意外に重要なのが「最初の見積もり」です。
ここにはとりあえず何時間くらいかかりそうかを入力します。

タスクはいくつも作ることができます。
また、タスクの子供としてタスクを作成することができ、上記のウインドウ内の「実装」や「すべてのリンク」から親子関係を作成することができます。

タスクの子供はプロジェクト内に作成できるもの何でも子供として登録できます。
バグ、要望、チェックイン項目などなど。
また、「添付ファイル」でファイルを添付することもできます。
このようにしてリンク関係を作っていきます。

タスクの一覧を表示する

「チームエクスプローラー」ウインドウで「作業項目」を選んでいると、「クエリ」という欄があります。
これが登録されているタスクやバグを一覧表示する機能になります。
たとえばこの中で「担当タスク」をダブルクリックすると自分が担当者になっているタスクを一覧表示することができます。

058

もちろん、クエリはカスタマイズできます。
クエリ内の各項目で右クリックするとメニューが出てきますので、その中から「クエリの編集」を選ぶことで以下のようなウインドウが表示されます。

059

クエリの中には「マイクエリ」と「共通クエリ」があります。
これらの違いはその上の「お気に入り」と「チームのお気に入り」のどちらに登録できるか、になります。
「マイクエリ」内のクエリは「お気に入り」に、「共通クエリ」はどちらにも登録できるんです。

では、この「お気に入り」と「チームのお気に入り」の違いは、というと、「Web Access」に違いが出てきます。
「チームエクスプローラー」ウインドウ内の▼メニューで「Web Access」を選ぶと、ブラウザが立ち上がってプロジェクトの管理をすることができるんですが、このトップ画面には「チームのお気に入り」に登録されているクエリが表示されます。

「チームのお気に入り」に何も登録されていないときは

060

こんな画面ですが、登録されていると、

061

こんな風に変わります。
これは、開発のメンバーではなく管理のメンバーの場合、開発ツールを入れずにブラウザで進行状況をチェックすることができるようになっているためと思われます。
状況がわかりやすいですね。

バグを登録する

基本的にはタスクの作成と同じですが、こちらは「Web Access」で行ってみましょう。
「チームエクスプローラー」ウインドウの▼メニューから「Web Access」を選びます。
出てきたウインドウの上部、「+バグ」ボタンをクリックするとバグ登録の画面が開きます。

062

「状態」欄は新規しか選べません。
「理由」欄は新規かビルドエラーかを選択することができます。
通常、「ステップの再現」欄に再現方法を、「システム情報」欄に再現したシステムを記入します。

063

ここでの「発見されたビルド」ですが、TFSが行ったビルドが自動的にポップアップされ、入力できるようになっています。
Androidアプリの自動ビルド設定の仕方は次回にでも書こうと思ってるんです。
(というか、本当はそれが書きたかったw)

入力が終わったら、Eclipseに戻って「作業項目」のクエリから「担当のバグ」をダブルクリックして一覧表示してみてください。
下記のような一覧表示のウインドウが開きます。

064

この一覧の各アイテム上で右クリックすればメニューが開きます。
その中から「リンクされた新しい作業項目...」を選ぶことで、このバグにリンクされたタスクなどを新しく作成することができます。

065

ポップアプから「子」を選び、タスクを作成することで、関連づいたタスクを作成することができます。
こうしておくことで「担当のタスク」を見ることでやらなければいけないことの管理ができるようになるわけです。
また、デバッグ担当は開発ツールを入れることなくブラウザでバグを入力することができます。

通知機能

タスクやバグの登録・変更をメールで知らせる機能もあります。
この機能はTFSの管理ツールからメール関連の設定をしておくことが前提になります。

066

左側のツリー項目の「アプリケーション層」をクリックすると、メールの設定を行える部分があります。
ここの「通知の設定」のリンクをクリックするとメールの各種設定を行うウインドウが開きます。

067

ここでメールの送信設定を行っておいて、Eclipseの「チームエクスプローラー」の▼メニューから「設定」を選び、「通知の設定」を行うことでメールでの通知が行われるようになります。

Express版とExpressのつかない版の違い

仕事ではExpressがつかない版のTFSを使用しています。
なので、このBlogを書いてて『あれ?』と思うこともしばしばあって。
とりあえず簡単なところで違いを挙げておきます。

まず、Express版にはグラフを作成してくれる機能がないようです。
下記はExpressが無い版の「Web Access」の画面です。

100

赤いバーで表示されている部分は、予測時間や1日に割り振れる時間などをきっちり入れておくと、時間予測して表示してるのです。
予測時間が想定内であれば緑でバーが描かれるんですが…。
ここでは「予想より実際の時間がかかりすぎや」と怒られているので赤くなっています。
(バグ消化に夢中になって入力忘れてるんですな)

また、その時間予測からバーンダウンチャートを描いてくれます。
これは一定時間ごとにバックグラウンドで計算されているようで、リアルタイムには変わってくれません。
これらの機能のため、予測時間や残存時間の入力が大変重要になってくるのです。

上記のようなアバウトなグラフではなく、もっとキッチリとした画像も生成してくれます。

101

まあ、こんなチャート見せるのは恥ずかしいのですが。
終わりきってませんし(笑)

また、チーム内のタスクやバグを見やすい「ボード」という機能があります。

102

左端がバグやバックログ(Expressに無さそう!)項目で、その右の青い四角が各々タスクになっています。
青い四角の中には残存時間やタスク名、担当者の名前などが表示されていて、誰にどんな作業が残っているか、どの作業中なのか、どれを終わらせているか、どれくらいの時間がかかりそうなのか、等が一目瞭然です。

また、Webインターフェイスにもかかわらず、ドラッグ&ドロップで項目移動やクリックでの入力開始などができたりして。
そこだけでしばらく遊んでしまえるようになってたりします。

最後に

とりあえず、タスクとバグの登録関連をざっと見てみました。
基本的にはこの辺り、ルーチンワークになると思われますので、簡単に登録などができるようになっているのがうれしいです。
また、一覧も比較的簡単にクエリが書けたりしますので、いろいろ凝ったリストも表示することが可能です。

しかし、長くてすみません。
はしょりまくりで書いたつもりなんですが…。
次回はAndroidの自動ビルドをばさっくりと書きたいです。

2013年4月23日

Androidのアプリ開発にTFSとAzureを使ってみる(2)

プロジェクトとコレクション

TFSをAndroidのプロジェクトで使う前にTFSの基本的な考え方を書いておきます。
TFSではソースやタスク(Redmineでいうチケット)、バグなどを束ねているのは「プロジェクト」になるんですが、そのプロジェクトの上位に複数のプロジェクトを束ねる「コレクション」という存在があります。
つまりはこんな感じ。

  • コレクション
    • プロジェクト
      • タスク
      • タスク
      • バグ
    • プロジェクト
      • タスク
      • バグ
    • プロジェクト
  • コレクション
    • プロジェクト

この「コレクション」は「管理コンソール」アプリからしか操作出来ません。
コレクションを作成すると、内部的にはデータベースが作成され、それぞれが別管理になります。
また、Webインターフェイスでも別URLが付加されます。

「プロジェクト」下の各オブジェクト(ソース・タスク・バグ等)はそれぞれが親になったり子になったりのリンク状態を作成することができます。
そして、これらはWebインターフェイスでもEclipseのプラグインでも操作できます。

コレクションを作る

TFSをインストールをすると、DefaultCollectionというコレクションが標準で作成されています。
この下に複数のプロジェクトを作成できるので、個人で使う分には特に新しくコレクションを作成する必要はないんですが、チーム別でコレクションを分けたりしておくと便利になったりします。

まずは「管理コンソール」を立ち上げます。
すると以下の画面っぽくなってるはずなんですね。

020

右上に「コレクションの作成」のリンクがあるのでそれをクリックします。
すると、以下のようにコレクション名と説明の入力を促されるので、最低限コレクション名を入力します。
ここでこのコレクション名ですが、英数字のみで作っておくことを強くお勧めします。

021

あとはもう「次へ」と「検証」「作成」を選んでいけば、最終的に「成功!」とか言われてコレクションの作成が終了します。

028

プロジェクトの作成

さて、主に使うことになるプロジェクト、なんですが。
Eclipseから使っているとここで問題になります。

実は、Eclipse+Team explorer everywhereのみではプロジェクトを作成することができない様なのです。
TFSのWeb解説の「プロジェクトの作成」には以下のように書いてあります。

チーム エクスプローラーのみからチーム プロジェクトを作成できます。

というわけなのですが、Eclipseからは空のコレクションにプロジェクトを追加すること、ができません。
これは、以下の理由のためです。

Eclipseだとプロジェクトを作成するコレクションを選ぶ際に以下のダイアログが表示されます。

030.ng

そして、VisualStudio2012シリーズから同じコレクションを選ぶ画面を出すと、以下の画面が出てきます。

031

ここで違うのは、「チームプロジェクト」の欄がEclipseだと空であるのに対し、VisualStudioからは(選べませんが)「すべて選択」のアイテムがあるのです。
そのため、EclipseだとFinishのボタンが押せません!!VisualStudioからは「接続」のボタンが押せるのです!!
そのため、Eclipseでは空のコレクションに接続できない、ゆえにプロジェクトを作成することができない、という状態になってしまうのでした。
ここはぜひとも直してほしいです>MS

プロジェクトを作成する

仕方ありませんので、とりあえずVisualStudio2012からプロジェクトを作ることにします。
今のところ、無料のVisualStudioシリーズでもプロジェクトは作成できるようですので、そちらから作成します。

「ファイル」メニューの「新しいチームプロジェクト...」を選ぶと、以下のようなダイアログが出ます。
とりあえずプロジェクト名だけつけて「完了」を押せば、いろいろ動いて完了の画面になります。

040

041

これでプロジェクトが作成できました。
Eclipseに戻ってプロジェクトに接続します。

EclipseからTFSのプロジェクトに接続する

Eclipseから「Team foundation serverエクスプローラー」パースペクティブを開くと、以下のようなウインドウが開きます。

042

このなかの「Team Foundation Serverへの接続」を選ぶと、以下のようなウインドウが出ます。
今度はプロジェクトを選択できるようになっていて、「Finish」のボタンも押せるようになっています!

043

接続したいプロジェクトにチェックを入れて「Finish」のボタンを押せば接続し、ソースのチェックインやタスクの作成などが行えるようになります。

ソースディレクトリを指定する

プロジェクトとの接続ができれば、ソースの登録やイテレーション(マイルストーン)の登録ができるようになります。
プロジェクト進行の部分は次回に書くとして(相変わらず画像だけで長くなってしまいましたので…)。
まずは、ソースの登録をば。

接続できれば、チームエクスプローラーのウインドウの中身が以下のように切り替わります。

044

まずはここで「ソース管理エクスプローラー」のリンクを選んでください。
すると、以下のようなウインドウが開きます。

045

ここではまず、「マップされていません」というリンクをクリックしてください。
すると、どのディレクトリと関連付けるか入力するウインドウが開きます。

046

「参照」のボタンを押せばGUIでの選択ができます。
GUIで指定した場合、指定したディレクトリ内のプロジェクト名のディレクトリをマップすることになるようです。
気になるのであれば、テキスト欄の修正は可能なのでworkspaceを指定しなおしましょう。
普通にEclipseからAndroidのApplicationを作成するとworkspace下にソースが作成されるので、そのまま管理することができるようになります。

さっそくAndroidのApplicationを作成しましょう。
…とまあ、その辺の知識はあること前提として(笑)
もうすでにソースコードが上記でマップしたディレクトリ下にあること前提にします。

ソースを登録する

マップが済めばソースを登録します。
「ソース管理」ウインドウに表示されているプロジェクト名を右クリックするとメニューが出てくるので、「項目をフォルダーに追加...」を選びます。
ウインドウが出てディレクトリやファイルを追加できますので、チェックインしたいファイルやディレクトリを追加してください。

048

問題は除外設定でディレクトリの設定ができません。
なので、binやgenを取り除きたい場合は、除外の欄に「*.class;R.java;BuildConfig.java」と設定しておけばほとんどのファイルは除外できます。

とりあえず今回はここまで

な、長いです……。
すみません。
なんか毎回こう書いているような。

次回はプロジェクト管理の基本を書いてみます。

2013年4月20日

Androidのアプリ開発にTFSとAzureを使ってみる(1)

TFSについて

自分の中で今一番のトレンドといえばTFSです。
これは、Visual Studio Team Foundation Serverと言って、MicrosoftにおけるTrac+Subversionのような、ソース管理+プロジェクト管理用のツールです。
5人までならExpressバージョンもあって無料で使えたりします。

で。
自分も最近まで知らなかったのですが、MicrosoftのVisualStudioのバージョン管理、ということでVSSを思い出す方も多いと思いますが。
実はこれは大きな間違いでありまして。
TFSはVSSのバージョンアップ版でもなんでもなく、別プロダクトのようで。

VisualStudioからだけでなく、Eclipseからも接続できたりするんですね。
プロジェクト管理もMS Projectからだけでなくブラウザから使えたりして。
しかも、最近のバージョンアップでGitにも対応したりして。
かなり便利だったりします。

Eclipseからつなげられる、ということで。
実はAndroidのソース管理にも使えたりします。
(Gitも使えるようになっているので、そちら方面から攻めても大丈夫です)
Macからでも大丈夫なようです。
では早速使ってみることにします。

TFSをインストールする

実はTFS Express、2013/04/20現在、先のTFS Expressのリンクからダウンロードすることができません。(謎)
なので、VisualStudioのダウンロードページからダウンロードします。

この真ん中らへんにVisual Studio Team Foundation Server Express 2012という項目がありますので、そこの中のリンクからインストールをします。
ここに書いてあるUpdate 2というバージョンからGitが使えるようになっているようです。
インストールするとSQL Server Expressも同時にインストールされるようです。
(管理のバックエンドにSQL Serverを使用しているらしい。バックアップとかもそちらをバックアップする)

…とここまで書いておいてなんですが、個人ではこのExpressとVisualStudio使って作業するんですが、Eclipseからは仕事場で使っていて、サーバーはExpressじゃないほうのTFSなんですねぇ。
後で書く(予定)のビルド設定とかがちゃんとExpressで使えるかどうかは実はよくわからなかったりします。ゴメンナサイ orz

EclipseにTeam explorer Everywhereをインストールする

さて。
TFSとEclipseで検索すると、MSのエバンジェリストの長沢さんのBlogに行きつきます。
TFSといえば長沢さん、ということで、ここは素直に長沢さんのBlogに従います。

が。
上記の記事は少々古いので。
Eclipseのプラグインの入手先をTeam Explorer Everywhere for Team Foundation Server 2012 with Update 2こっちにします。
(実はこっちにも手順は詳しく書いてあります)

あとのインストールは長沢さんのBlogの通りなので…。
重複して書いても面白くないのでとりあえず今日はこの辺で。
また次回にでも。

2013年4月18日

Android実機でのデバッグ。

久しぶりの更新です。

ある時期極端に忙しくなると、Blogなどほっぽり出してしまいます。
悪い癖です。
その後、時間が空いてもそのままほっておいてしまいます。
いかんです。

Androidの開発中

今はAndroidアプリの開発をやっています。
ホストマシンはWindowsで。
これがまた厄介で、USBドライバなどというものが必要になります。
MacやらLinuxやらがホストならそんなもの要らないのに…。

というわけで、せっかくなのでドライバの設定でも晒しておきます。
対象機種は、

  • REGZA TABLET AT830
  • Sony XPERIA Tablet Z SGP312
  • Kindle Fire
  • docomo dtab

です。

;REGZA AT830
%SingleAdbInterface% = USB_Install, USB\VID_0930&PID_0963
%CompositeAdbInterface% = USB_Install, USB\VID_0930&PID_0963&MI_01

;sony SGP312
%SingleAdbInterface% = USB_Install, USB\VID_0fce&PID_5194
%CompositeAdbInterface% = USB_Install, USB\VID_0fce&PID_5194&MI_01

;kindle fire
%SingleAdbInterface% = USB_Install, USB\VID_1949&PID_0007
%CompositeAdbInterface% = USB_Install, USB\VID_1949&PID_0007&MI_01

;dtab
%SingleAdbInterface% = USB_Install, USB\VID_12D1&PID_360E
%CompositeAdbInterface% = USB_Install, USB\VID_12D1&PID_360E&MI_01

よく見たら


前のエントリーが去年の8月なので…。
毎度のことながら、よく開けるもんだ、と。
すみません。(多分、だれも着いて来てないだろうとは思うが)

2012年8月16日

VisualStudio 2012からSQLAzureにつなげられない

Windows8 RTM出ましたね

さっそくインストールしてみましたが。
デフォルトのテーマ色が変わっていたり、ロック画面の画像がイラストになってたり。
基本的に機能は変わりなさそうですが、完成形に近づいてきた感じですね。
楽しみです。

VisualStudio 2012のサーバーエクスプローラー

サーバーエクスプローラーからSQL Azureに接続に行きたい、と。
さくさく設定して。
いざ、保存!となった時に変なエラーが出てしまいました。

sqlfail02

テスト接続までちゃんと繋がってて、データベースまで見えているのに。
なぜか、エラー。
なんなんでしょう、この「不明なプロパティ PrimaryFilePath」って。

COLLATION

実は、悪さをしているのはCOLLATIONでした。

sqlfail01

少なくとも2012/06の月まではCOLLATIONを選ぶことはできませんでした。
なので、日本語の設定が非常に面倒だったのです。

ところがいつの間にかこれが選べるようになっていて。
画像の通り、Japanese Unicodeなんてのも選べるようになって。
進化してるんだなぁ、と。

思って設定したのが大間違いでした。
なぜかよくわかりませんが、この設定をすると、上記の不明なプロパティ、というエラーが出ます。
デフォルトの「SQL_Latin1_General_CP1_CI_AS」だとちゃんとつながるんです。

RTM

で、最初の話まで戻ってきたりしますが。
Windows8がRTMになりました。
んで、VisualStudio2012も新しくなってます。
じゃ、最新版ではどうなのかというと。

ちゃんと直ってます!

問題なくつながります。
先の不明なプロパティのエラーが出ません。
ちなみにバージョンは
旧:11.0.50706.0 QRELRC
新:11.0.50727.1 RTMREL

というわけで、ちゃんと不具合も直してくださってますので、新しいバージョンにしましょう。

2012年8月9日

Windows8のMetroアプリの国際化

ちょっとばかり過ごしやすく

ここ2,3日、気温も湿度も少々低めで過ごしやすいですね。
(あくまでも個人的局所的感想)
このまま冬並に気温が下がらないかなぁ、とか思ってしまいます。

あいかわらず長くなってしまいました

実は書きたいことはAppBar内のボタンのローカライズ。
忘備録的に。
なのに、Metroアプリ全体のことになってしまったりして。
あいかわらずまとめられないんです。

Metroアプリの国際化

国際化、というか、ローカライズ。
基本的にMetroアプリのローカライズっていうのは、リソースのディレクトリを作ってそこに文字列リソースファイルなり画像なり入れることでローカライズできたりするんです。
実は結構楽ちん。

ml01

こんな感じで、ロケールのディレクトリ作って、そこにファイルを放り込んでおく。
ファイルの内容はこうなってたり。

ml02

ml03

日本語と英語。
相変わらずおバカ系の設定。

xamlファイルで指定する

で、MainPage.xamlにこんな風に書いたりするわけです。

<Page
x:Class="LocalizeTest.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LocalizeTest"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
<TextBlock x:Uid="MainTitle" x:Name="mainTitle" FontSize="50" TextAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Page>

んでおもむろに実行。


ml04


日本語で出てます。
使用言語を英語に変えると……。


ml05


ml06


出ました!
英語になっています。
xamlファイル内のElementで、x:Uidで指定した文字列と、プロパティ名を . でつなげたものを使用する文字列として扱う、という決まりがあります。
なので、xUid=”MainTitle”を指定し、MainTitle.Textが宣言されてた場合、x:Uidが指定してあるElementのTextプロパティがresxファイルで指定してある文字列と置き換えられます。


コード内で読み込む


コード内でリソース内の文字列を読む場合、ResourceLoaderを使用します。
MainPage.xaml.csを以下のように書き換えます。

namespace LocalizeTest
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
ResourceLoader resources = new ResourceLoader();
string txt = resources.GetString("AppName");
mainTitle.Text = txt;
}
}
}

そうして実行してみると。


ml07


このように表示される文字列が変わっています。
ResourceLoader.GetStringによって取得した文字列に置き換えられているんです。


アプリケーション名の国際化


アプリケーション名は簡単です。
appmanifestファイルで指定するので、ここをローカライズが効くように設定すればいいのです。
具体的には上記のようなリソースにしてあるのであれば、表示名の欄を「ms-resource:AppName」とします。


ml08


これで、スタートに並ぶアプリケーション名をローカライズ表示させることができます。


AppBarのボタンの国際化


AppBarのボタンは一筋縄ではいきません。
先のリソース名の設定方法に従い、「AB_Help.AutomationProperties.Name」とかキーを設定しても、「そんなプロパティ知らんよ」とかいわれるんです。
なんだかねぇ。ふぅ。


x:Uid=”AB_Help””の場合、AppBarのボタン名は「AB_Help.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name」でキーを作る必要があります。
長っ。


ml11


ml09


ml10.ng


見にくいかもしれませんが、ボタンの文字が変わってると思います。


あとは画像


あとは画像なんでしょうけど……。
これはもういいでしょう。
resxファイルの代わりに画像ファイルを置いて、サブパスで見るようにすればいいんです。
楽勝です。


結局暑いんですけどー


これ書くのに2時間位かかってますし……。
暑いです。
某スレイヤーズみたくマント羽織ってその中で氷の呪文とかかけたいくらい。
あーうー。

2012年8月8日

SyntaxHighlighterが効いていない

バージョンアップした

SyntaxHighlighterのBrushになぜかBashが無かったので、ついでということでバージョンを上げました。
前のバージョンは多分(覚えていなかった)、2.0.幾つかになると思うのですが。
それを3.0.83に。

すると、なぜだかうまく表示されていない。
pre標準の表示から変わらないのです。

エラーが発生している

なぜかまでは調べていませんが、何やらスクリプトでエラーが起こっています。
今はそこに割く気力が……。

というわけで。
今のところそのままです。
SyntaxHighlighterが表示されていません。
更新するのも面倒くさいので……。

スクリプトの置き場所

SyntaxHighlighterの関連ファイルはAzureのBlob領域に置いています。
Blobはファイルを置いておくにはあまりお金もかからない良い場所なのですが、一旦編集をしようとするととてつもなく面倒くさい場所なのです。
特に、サブパスに置く、とかファイルのMIMEタイプを変えるとか。
それぞれはそれほど難しくはないのですが、いかんせん数が多くて面倒くさいのです。

さてさて。
どうしましょうか。
早く手直しをしたいのですが……。

2012年8月7日

ASP.NET MVC4で多言語化

蒸し暑すぎます

一昨日の天気予報では翌日の湿度が93%。
……。
ほとんど水の中じゃん。

んで明けて昨日。
……。天気予報、やるじゃん。
うだるような暑さでした。ひー。

日本人ですもの

さくっとテストでWebSitesとか使ってページを作ると、ついつい日本語の文字列を書いてWebページを作ってしまいます。
もっと適当でいいならハナモゲラな英語で(漢字変換も面倒くさいので)作ってしまうのですが。
実際に使うときはそれではダメで。

なんだか英語と日本語のページ作れって言われてますよ?
管理面倒っちいんですが。
……とかになってしまわないために、元から多言語化(i18n……でいいんでしたっけ?)しておけば楽なんですよね。
というわけで、主に保身のために多言語化について調べてみました。

……その筋でも有名な方々ばかり。
畏れ多くも参考にさせていただきます。

しかし。
「簡単ですね」とか書かれても、おバカなおいらにはよくわかりません。
結局のところ、どうファイルを配置してどう書けば……?

しかして、実は

実のところはやっぱり簡単なのでした。

先のブチザッキさんのところからリンクされている

ここを参考に。
サンプルに先のAcsTestプロジェクトを多言語化対応させてみます。
つまり、環境はWindows8 + VisualStudio2012です。

まずはまめしば雑記さんのところにあったWeb.Configの設定。

  <system.web>
<globalization culture="auto" uiCulture="auto" />
<!--
<authorization>
<deny users="?" />
</authorization>
-->
<authentication mode="Forms"><forms loginUrl="~/login" timeout="2880" /></authentication>


こんな感じで書いておきます。


次に実際のリソースを作成。


acstest42


こんな配置で。
ディレクトリは「追加」→「新しいフォルダー」で追加、resxは「追加」→「新しい項目」→「アセンブリリソースファイル」で追加です。
ファイル名はja-JPまで含めてちゃんと指定しておきます。


中身はこんな感じ。



acstest40


acstest41


英語と日本語。
上部の「アクセス修飾子」の欄をpublicにして。
テストなのでわかりやすいように。おバカっぽいけど。


ここで、ソリューションエクスプローラーを見ると。
StringResources.resxの左側に開けるよ~、な三角が出ていることに気づきます。、
開けて中を確認し、以下の行に注目します。


                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AcsTest.Resources.Views.Shared.StringResources", typeof(StringResources).Assembly);

なんとなく注目したこの行。
実は、Viewファイル内に書く文字列が記してあります。
先にリンクさせて頂いたブチザッキさん。
これのことをおっしゃってたのです!
おバカなのでこの時点まで理解していませんでした!


というわけで、Viewのファイルはさっきの行を参考に以下のように書くのが正解のようです!


@using AcsTest.Resources.Views.Shared
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@StringResources.MainTitle</h2>

リソースを大量に書かないとダメな場合のためにusingを使って簡略化しておきます。
何やらusingは@{ ~ }の中はダメみたいなので、外出しで。
あとは、resxのファイル名とファイル内の記述子とを . でつないだものを書いておきます。


さて。
テストしてみましょう。
ブラウザの言語を簡単に切り替えられるようにFirefoxにQuickLocaleSwitcherをインストールしておきます。
そして、日本語(ja-JP)で見た時。


acstest43


英語(en-US)で見たとき。


acstest44


無事、切り替わりました!
実は、最初英語で表示されててちょっとあせったのはヒミツです。




階層にしなくていんでね?


実は、これを書いてて最初に配置はあんなに階層にしなくても大丈夫なんでね?
とか思ったんですが。
この方が解りやすいのでこのままにしました。


しかしそれにしても、暑いこと。
今日は湿度はそれほどでもないらしいのですが。
それにしても暑いです。
後でこれを見たときに何書いてるんだ、とか思うんでしょうねー。自分でも。