Do what you want to do

プログラミングとかとか

C#エンジニア養成読本を読んだ

技術評論社から出版されているC#エンジニア養成読本が届いたので読んでみました。

f:id:katoj:20150830221703j:plain

内容

感想

  • 内容的には広く浅くなのでそれぞれについて深い知識を得たい場合は別途専門書を読んだ方が良いと思います。
  • Sansan社が普段どのようなツールを使用して開発をしているかが興味深かったです。
  • CIについては今までやったことないので手始めとしてこの本の通りにやってみようと思います。
  • コミュニケーションツールはあくまでプロジェクトを円滑に進めるための手段であるので無理に使う必要は無いというのが開発現場のリアルな声だと感じました。
    (例えば、2人チームで席が隣同士ならツールを使ってコミュニケーション取るより直接会話した方が良い場合もある)

SharePointでカスケードドロップダウンの実装サンプル

先日Twitterでつぶやいた内容ですがブログにもPOSTしておきます。

SharePointで、例えば組織マスタみたいなものがカスタムリストで作られていて、
それを利用した会社名 > 部 > 課みたいなドロップダウンを実装する場合のJavaScriptのサンプルです。
SPServicesでもカスケードドロップダウンできるんだけど、複合主キーのリストに対応してなさそうなので作りました。

github.com

Wearに簡単な通知を送ってみる

前回はWearのプロジェクトを作成したので今回は簡単な通知をWearに送ってみたいと思います。

mobileモジュールのMainActivityに適当にボタンを貼り付けて、ボタンのonClickで下記メソッドを呼んでみます。

    /**
     * Wearに通知します。
     */
    private void notifyToWear() {
        NotificationCompat.WearableExtender wearableExtender = new NotificationCompat.WearableExtender()
                .setHintShowBackgroundOnly(true);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("通知タイトル")
                .setContentText("通知の内容をつらつらと")
                .setVibrate(new long[] {0, 300}) // 遅延0秒で300ミリ秒間振動する
                .extend(wearableExtender);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
        notificationManager.notify(0, notificationBuilder.build());
    }


結果はこのようにちゃんと通知が来ました。
※もちろんmobileの方にもちゃんと通知が来ます。

f:id:katoj:20150615234555p:plain


タイトルやテキストに加え、Vibrationも実装してみました。
通知自体はこのように簡単に送れますね!

背景画像やアイコンなどもろもろカスタマイズできそうです。

今回は以上です。

Android StudioでWearアプリのプロジェクトを作ってみる

LG Watch Urbaneを手に入れたこともそうですが最近Wearアプリに興味があります。
最近のAndroid開発はAndroid Studioを使用するのが一般的なようですのでAndroid StudioでWearアプリのプロジェクトを作ってみました。
ウィザードに従ってボタンをポチポチするだけですが画面キャプチャ残しておきたいと思います。


1. まずは Android Studioを起動して「Start a new Android Studio project 」をクリック。
f:id:katoj:20150614193522p:plain

2. 次にApplication nameとCompany Domain、Project locationを入力してNextをクリック。
※今回、アプリ名はHelloWear、Company DomainとProject locationはデフォルトのままとしました。
f:id:katoj:20150614193635p:plain

3. Target Android Devicesで「Phone and Tablet」と 「Wear」を選択してNextをクリック。
※Minimum SDKAPI 21としました。
f:id:katoj:20150614194001p:plain

4. Add an activity to Mobileでモバイル用のActivityを選択してNextをクリック。
※今回はBlank Activityにしました。
f:id:katoj:20150614194409p:plain

5. Customize the ActivityはそのままNextをクリック。
f:id:katoj:20150614194523p:plain

6. Add an activity to WearでWear用のActivity選択してNextをクリック。
※今回はBlank Wear Activityにしました。
f:id:katoj:20150614194536p:plain

7. Customize the ActivityはそのままでFinishをクリックするとプロジェクトが作成されます。
f:id:katoj:20150614194546p:plain

8. 作成されたプロジェクトを見るとmobileとは別にちゃんとWearのプロジェクトができているのがわかります。
f:id:katoj:20150614194556p:plain

今回は以上です。

築地で豪華なウニ丼を食べてきた!

GW休みも終盤に差し掛かった5月8日金曜日。築地で豪華なウニ丼を食べてきました!
お店はこちら↓tabelog.com

お店は築地市場駅から徒歩5分くらいのところにあります。
AM11時過ぎ頃に訪問したのですが店内は数名お客さんがいる程度で空いていました。
お店の外の通りは観光の外国の方達で賑わっていましたよ(^^)

こちらのお店で頂いたのが「元祖こぼれウニ丼」。
f:id:katoj:20150510224031j:plain
f:id:katoj:20150510224741j:plain
豪華ですね!
すごい迫力です。
青森のムラサキウニ北方四島のバフンウニがWで載っています!
口の中でとろける味わいで最高です(^^)


ちなみに丼とは別に小鉢のウニも付いてました。
f:id:katoj:20150510224940j:plain
こちらは純粋にウニだけを味わうものでしょうか。

とにかくウニ好きにはたまらないです。
他にもいくら丼など数種類のメニューがあるので
海鮮が好きな人はぜひ一度訪問してみてはいかがでしょうか(^^)

以上。

ASP.NET Web APIのattributeルーティングについて

ASP.NET Web API 2から使えるattributeルーティング

ASP.NET Web API 2からattributeルーティングと呼ばれるルーティング設定が可能になりました。
以前から使えるconvention-basedルーティングと比較しながらまとめてみたいと思います。

convention-basedルーティングってどんなの?

まずはWeb APIのリリース当初から使えるconvention-basedルーティングについて。
Visual StudioでWeb APIのテンプレートからプロジェクトを作成するとWebApiConfigのRegisterメソッド内にこんな感じのコードありますよね。これです。

// これがconvention-basedルーティングの設定
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

じゃあattributeルーティングってどんなの?

対してattributeルーティングでは以下のようにアクションメソッド毎にルーティングの設定を行います。

// これがattributeルーティングの設定
[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }

比較

2つのルーティング設定のメリット・デメリットを比較するとこんな感じです。

ルーティング メリット デメリット
convention-based ルートテンプレートが一箇所で定義可能。ルーティングルールが全てのコントローラーに対して一貫して適用される 一般的なREST APIURIパターンをサポートすることが難しい。例えば/customers/1/ordersのようなURIにしようと思った場合に難しい。
attribute 簡単に/customers/1/ordersのようなURIのルーティングを設定できる 使い方による

あえてattributeルーティングのデメリットを「使い方による」と書いたのは使い方次第でデメリットとなりうる場合があるからです。
例えば、それほどAPIの種類も多くなくURIのパターンも単純な場合(convention-basedで全てのルーティングが事足りる場合)にわざわざattributeルーティングを使用するとメソッド毎にルーティングの設定が必要なため複雑さが多少増してしまうと思います。それでもAPIの多機能化が将来予見される場合には最初からattributeルーティングベースで作るのもありかと思います。
「ベース」と書いたのは実はこの2つのルーティングは混在させる事が可能だからです。うまく組み合わせるといいと思います。

まとめ

attributeルーティングについて超簡単にまとめてみました。
うまく2つのルーティングを使い分けたいですね。
attributeルーティングは他にもパラメータに制約を設けたりと色々設定できます。
attributeルーティングの書き方について詳しく知りたい方はこちらをご覧ください。

今回は以上です。