MVP Community Camp 2014 - Tohoku(エフスタ!!SENDAI 2)で発表しました #MVPComCamp
Windows Azure と Xamarin で作るマルチプラットフォームアプリケーション という題目で話しました。スライドはSlideShareに上げました。 モバイルサービスとXamarinの両方の話しだったので、時間が足りないところもありました。 Windows Azure モバイルサービスの日本リージョン展開のため、VOTEお願いします!
Windows Azure と Xamarin で作るマルチプラットフォームアプリケーション という題目で話しました。スライドはSlideShareに上げました。 モバイルサービスとXamarinの両方の話しだったので、時間が足りないところもありました。 Windows Azure モバイルサービスの日本リージョン展開のため、VOTEお願いします!
デブサミ2014、講演関連資料まとめ 初めてデブサミに参加しました。良い話しばかりで「ためになるな〜」と思いました。でも、それで終わっちゃいけない。なぜなら、デブサミの開催概要にはこう書いてあります。 デブサミ第1章(2003~2012)は共感を大きなテーマにおいて開催してましたが、デブサミ第2章(2013~)は、Action!をテーマに開催していきます! … (中略) … Action!をシェアすることが、受講者の皆様やプロジェクトチームのAction!を促し、結果、社会を善にする鍵になると信じて! ということで自分自身のActionは、「 MBaaSを中心としたアプリのコードを書く。そのフィードバックを記事にする。」です。 その考えに至った理由を次に書いていきます。 焦点はモバイルアプリ開発とクロスプラットフォーム 次のセッションをうけました。 【13-D-1】JavaからJavaScriptへ!HTML5適用から見えた次世代業務アプリケーション 【13-C-2】iOS/Android/Windowsストア・アプリのハイブリッド開発における限界と可能性 【13-C-4】iOSにAndroid、百花繚乱モバイル開発環境を比較する 【13-C-6】XamarinとVisual Studioでまとめて作るiOS/Android/Windowsアプリ 理由は2点あって、1点目はモバイルアプリ開発をするにあたって、クロスプラットフォームどうするんだというところでした。 というのも、仕事でもちょこちょこ Android と iOS をやってますが、大体両方やりたいというところが多い。加えて最近は Windows 8 タブレットの案件もチラホラでてきたり。 で、今までクロスプラットフォームどうしてたかというと、大体 WebView でやって、オフライン使いたいという場合はローカルにHTML 保存したり、HTML5 のアプリケーションキャッシュつかったりという感じ。 でも、センサー使ったりしたい場合はHTMLだけだと詰まるので Phone Gap やら Cordova やったけど、面倒くさい。そもそも WebView 以外の選択肢は無いか考えていた。 2点目は、アーキテクチャどうするんだというところ。ここからは全部イメージなので間違ってるところもあると思いますが、今までのアーキテクチャは大体こんな感じ。サーバー側で全部やっちゃう。 f:id:nnasaki:20140214141406p:plain んで、最近のアプリはこんな感じ。Viewをクライアント側に持ってくる。 f:id:nnasaki:20140214141553p:plain さらにこれからは次のような感じになると思う。サーバー側の実装は無くなり、MBaaSに置き換わる。すべてのロジックはクライアント側に集約される。 f:id:nnasaki:20140214141811p:plain そうすると、次のようにクロスプラットフォームの場合それぞれコード書くのか?という問題が出てくる。 f:id:nnasaki:20140214141909p:plain その解として Xamarin を使用したクロスプラットフォーム開発を勧めたい。 f:id:nnasaki:20140214141957p:plain 今のところ、本当にこんなキレイに出来るかわからないけど、コードを書いて実証していきたい。 サーバーサイドの実装は、MBaaS を使用すれば本当にゼロになるかというと今のところは難しい気がしている。でも、どんどん楽になっているのは確かで、NIFTY Cloud mobile backendはプッシュ通知だけでなく、会員管理・位置情報・データストアのAPIをそろえている。「【13-B-6】mobile backend活用事例から見る「これからのスマホアプリ開発とクラウドの展望」」を聞きたかったんだけど Xamarin とかぶってしまったので、 Xamarin を優先した。 まとめると、Xamarin で上記アーキテクチャが実現できるかどうかコードを書くことと、これからも MBaaS の情報は追っていきたい。 中村洋さんのセッション 【13-A-5】成功と失敗の狭間に横たわる2つのマネジメント 中村さんはDevLOVE関西に所属しており、DevLOVE仙台としてどんな話しをされるか気になったので聞いてみた。 ハッとしたことは次のドラッカー風エクササイズ。 `ドラッカー風エクササイズ 1:自分は何が得意なのか? 2:自分はどうやって貢献するつもりか? 3:自分が大切に思う価値はなにか? 4:チームメンバーは自分にどんな成果を期待してると思うか? アジャイルサムライ P34より ` そういえばアジャイルサムライに書いてあったなと読み返したりしていた。中村さんが何故会社を辞めてフリーになったかという話しもあり、「少しでも現場をよくしたい」というのは私も同じで共感できました。 ...
この投稿は One ASP.NET Advent Calendar 2013 24日目の記事です。前日は neuecc さんでした。 Classic ASP(VBScriptで動くアレです)と ASP.NET の混在しているサイトを普段扱ってます。未だに Classic ASP 使っている人はほとんどいないと思うのですが、10年以上保守しているサイトでそこそこ規模が大きいため現在に至っている感じです。VBScript は本当に辛いのでどうにかしたいんですが、作り直す予算も無いしどうしようも無い。 さて、愚痴はこの辺にしておいて、今日は ASP.NET を .NET Framework 3.5 で使用したときの注意すべき TIPS を3つご紹介します。Web Forms の話です。 1.マスターページを使うとIDが変わる 問題 例えば次のようなチェックボックスを含むページがあります。 <asp:Button ID="changeCheckButton" runat="server" Text="チェックボックス切り替え" /> このページをブラウザで確認すると、通常は次のようになります。 <input type="submit" name="changeCheckButton" value="チェックボックス切り替え" id="changeCheckButton" /> ところがマスターページを指定して、ブラウザで確認すると次のようにIDが変わります。 <input type="submit" name="ctl00$ContentPlaceHolder1$changeCheckButton" value="チェックボックス切り替え" id="ctl00_ContentPlaceHolder1_changeCheckButton" /> 問題の例 例えばチェックボックスの切り替えをするボタンとして、jQuery で次のように書いたとします。 するとIDが変わっているので、チェックボックスが切り替わりません。 jQuery(function () { $('#changeCheckButton').on('click', function () { $('input:checkbox').prop('checked', function (i, val) { return !val; //各チェックボックスのチェック状態を反転します。 }); return false; }); }); 問題のサンプルページ http://ac2013-dotnet35.azurewebsites.net/masterpage/before.aspx 対処 ポストバックの処理が必要なければ、 <asp:Button> から <input> に変更してあげればIDは変わりません。ただポストバックの処理がどうしても必要なときは、jQuery 側で後方一致するように書いてあげましょう ...
f:id:nnasaki:20131220033106g:plain この投稿は DevLOVE Advent Calendar 2013 12月20日の記事です。 前日は tchikuba さんでした。 タイトルはホッテントリメーカーから作りました。皆さんとてもエネルギッシュで前向きな記事が多い中、ちょっと息抜きな感じで見ていただければと思います。 自己紹介 DevLOVE仙台 のスタッフをしています。仕事はいわゆる SIer です。c# が好きです。でも、 VB.NET ばくはつしろと思ってます。最近は Windows Azure モバイル・サービス をみんなに勧めてまして、BuildInsider にて iOSアプリを5分で作ろう! という記事を書いています。 何故、頑張りすぎないか? 「現場」のため。自分のため。健康のためです。あれ、理由が3つあるけど気にしない。 例えば、がんばるあなたがプロジェクトを殺す という話があります。みんなに頼りにされている彼。彼無しでは「現場」が回らない。もちろん彼もそう認識している。でも彼は体調を壊してしまう。「現場」も壊れてしまう。すぐに読めますので一度読んでみてください。 **これが怪談なのは、誰も悪意を持っていないところだ。彼はプロジェクトを助けるために働き、皆もそれに感謝した。結果、プロジェクトが破綻に近づいた。 また、DevLove仙台では次のスライドにて、ソフトウェア開発データ白書を元に、開発の91%は受託開発でレガシーであるという話をしました。 Devlove仙台20130309 レガシープロジェクト脱出大作戦 ** from Yamamoto Masaki このスライドで言いたかったことは、どうしようも無い「現場」からは逃げるしかない。ということです。逃げ出すために前振りとして、勉強やアウトプットするべきと書きました。 その「現場」はあなたの300人月を捧げる価値があるか? @papanda さんの言葉によく出てくるのが「一生涯ソフトウェア開発たかだか300人月」です。人生はとても短い。 もちろん、「現場」から逃げるだけが正解じゃ無いと思います。私はパッションが重要だと考えています。 たとえば、「ファイナルファンタジーXIV:新生エオルゼア」。これが何故「新生」かというと旧版があまりにも酷く作り直したから*1。旧版は簡単に言うと企画は日本でやって、オフショア開発したらつまらないゲームが出来上がり、大コケしてしまった結果、旧版のプロデューサーは更迭されてしまいました。 その後、今のプロデューサーに変更後、彼のパッションによってオフショア開発のプログラムは全面的に書き換えられ、まったくの別物である「新生」となりました。先日リリースされて150万アカウントを超す大ヒットとなりました。 このようにパッションあふれる「現場」のメンバー、もしくはリーダーとなれるのであれば、逃げたりせず踏ん張りどころだと思います。 逆に、もし、あなたの「現場」にそのようなパッションは存在せず、ただただ現状を呪う言葉しか出てこないのであれば、その「現場」から逃げることは選択肢の一つとして選んで良いと思います。 まとめ 「一生涯ソフトウェア開発たかだか300人月」です。大事なことなので2回言いました。 今の「現場」で頑張りすぎていませんか?情熱を注げない「現場」に対して孤軍奮闘していないでしょうか?行動経済学に保有効果というものがあります。 保有効果とは、自分が所有するものに高い価値を感じ、手放すことに抵抗を感じさせる効果のことです。 人間は一度手にしたものは手放しにくい生き物です*2。あなたが壊れてしまう前に「現場」から逃げ出すことも考えてみてください。 と、つらつらと偉そうに書いてみましたが、これは自戒でもありますw 頼りにされるとやっぱり頑張っちゃうよね。でもほどほどにね。今日は金曜日だし忘年会でも行って、ストレス発散しましょう。 明日は kurobara さんです。よろしくお願いします。 *1:旧版については、ニコニコ大百科:ファイナルファンタジーXIV(旧版)に詳しく載っています。 *2:ウォーターサーバーとかレンタルモップが1週間無料とかやっているのは、この保有効果を狙っているから。無料期間が終了し、引き取りに来られると手放したくないと思ってしまい、そのまま継続してしまうことがある。
この投稿は Windows Azure Advent Calendar 2013 の19日目の記事です。 前日は shosuz さんの Windows Azure Mobile Services 高度な設定について でした。 Windows Azure モバイル・サービス はその名の通り、モバイルアプリケーションを開発するにあたって非常に便利なサービスです。 稚拙ながら BuildInsider にて iOSアプリを5分で作ろう! という記事を書いています。 本当に5分で作れます。先日JAZUG仙台にて実演しました。無料で試せますので、是非皆様試していただければと思います。 さて、今回はモバイル・サービスのパフォーマンス監視ということで、New Relic を紹介したいと思います。 New Relic とは レスポンスタイム 等の統計を収集して、New Relic のサイトにて見やすく表示してくれるサービスです。モバイル・サービスだけでは無く、.NET アプリケーション や、Ruby, Node.js 等の様々な言語に対応しています。 インストール方法 Use New Relic to monitor Mobile Servicesを参考に設定していきます。残念ながら今は英語のみのようですので、見出しに沿って補足していきます。 Windows Azure ストア から New Relic を契約する(Sign up for New Relic using the Windows Azure Store) Windows Azure ポータル から Windows Azure ストア を表示し、 New Relic を追加します。 f:id:nnasaki:20131217034155p:plain f:id:nnasaki:20131217034407p:plain f:id:nnasaki:20131217034722p:plain f:id:nnasaki:20131217035054p:plain アドオンに表示されるようになります。 ...
この投稿は IntelliJ IDEA Advent Calendar 2013 の12日目の記事です。 前日は Vexus2 さんの IntelliJ IDEAのプラグインを作ろう! でした。 某いまいさんに洗脳影響をうけて、IntelliJ を去年あたりから使い始めています。 さて、突然ですが皆さん、プログラム用フォント Ricty をご存じでしょうか? 主に次の特徴があり、プログラマーが視認しやすい文字になっております。 半濁音(パピプペポ)と濁音(バビブベボ)が大きく表示される 記号等に独自の改良がされている 百聞は一見にしかずということで、次のスクリーンショットをごらんください。 f:id:nnasaki:20131212065856p:plain このように Mac では、とても見やすいフォントとなっています。 ですが、Windows では次のスクリーンショットのように、全角文字が途切れた表示になってしまいます。 f:id:nnasaki:20131212065918p:plain しかし! MacType というソフトを使用することで、次のスクリーンショットのように綺麗に表示することができます! f:id:nnasaki:20131212065936p:plain 私が導入した手順は以下の通りです。 Ricty フォントを生成する。私はRictyフォントをWindowsで生成する(2012年7月03日版)を見ながら生成しました。バッチを叩いて15分ぐらいかかった気がします。 MacTypeを導入する。https://code.google.com/p/mactype/downloads/list からインストールします。 MacType を設定する。スタートメニューから「MacType Tray」を開いて、ウイザード右上の独立モードを選択します。 MacType のプロファイルを設定する。私の設定は「FT Opt」です。ちょっとぼやける感じもしますが、なんとなく Mac ぽくなります。 それでは皆さん、良い IntelliJ + Ricty ライフを! 明日は gd_yasu さんです。
募集ページ #tddbc Togetterまとめ 昨年は主催しましたが、今回はTAとして参加しました。一応名目上は今年の主催者である @135yshr さんの補助をするという立場だったけど、ほとんどなんもしていない。 結論からいえば、開催して本当に良かったなと思う。皆さんにも楽しんでいただけたようで嬉しい。昨年の悪い点は今回で大分改善出来たかなと思いました。 お題が良かった 昨年は自動販売機でしたが、若干作りにくい印象がありました。一見するとこの問題は誰もが使ったことがあるものなのでとても作りやすいように見えますが、お金を投入した状態を保持する「状態」を扱うテストが必要だったり、お釣りや商品を排出するという「出力」をどう扱うか悩んだり、なにより自動販売機という豊富な機能がイメージとしてあるので、先のことまで考えて壮大な設計を最初から考えてしまい、TDDの肝である「1つずつ少しずつ」が出来ないことがありました。 なので今年はTDDのお題として有名な「Range」に @i_takehiro さんがアレンジを加えて「整数の区間」というのを作りました。 今は課題8まで見られますが、当日は課題1・課題2と小出しにしていくことで、参加者が「1つずつ少しずつ」を実践できるようにしました。 ただ、「ジョウタンテン」とか「クカン」とか「カタンテン」とか数学的な要素が若干強いので、課題1の途中までをペアプロデモを行うことと、用語集を用意して参加者の人が概念を理解できるように配慮しました。 TDDBC はテスト駆動開発を「体験する場」なので、今回はその体験が最良となるように最適化を行い、結果成功したと言えるのかなと思います。 お弁当良かった 昨年はペア決め後はお弁当は特に用意せず、自由行動としていました。その結果、各ペア間の溝が埋まり切らなかったかなと感じていました。 今年はお弁当を用意して、お昼時間もペアの方と過ごしていただくようにしました。また、アイスブレイクと手書きのポジションペーパーを用意してお互いの親睦を深めていただくようにしました。ここらへんは、今年の主催者である @135yshr さんの手腕のおかげだと思います。 会場良かった 昨年は貸し会議室を借りたんですが、プロジェクターの色味がおかしかったり、会場費のせいで収支が悪化してしまいました。 今年はデータコム株式会社様のご協力でとても良い会場を無償で提供していただき、大変助かりました。 レビュー良かった @i_takehiro さんのマサカリが冴えまくってて、手が上がるたびに会場全体がカイジばりに「ザワザワ」してました。こんなレビューワが自分のプロジェクトにいると怖い心強いなぁと思いました。 懇親会良かった データコム株式会社様の会場をそのままお借りしてビアバッシュを行いました。昨年の懇親会参加はほぼTAだけとなってしまいましたが、今年はビアバッシュで懇親会費を抑えたおかげか参加者もほぼ全員でした。 懇親会の中で前日にLT希望書を募ったのにもかかわらず、飛び入りを含めると7人ぐらい発表されまして、居酒屋でただしゃべるよりもとても内容が濃かったと思いました。 まとめ 去年良くなかった点が今年はカイゼンできたというのが本当に良かった。来年もまた開催できるよう、運営側としてお手伝いしていければと思っています。 EXCERPT: 募集ページ #tddbc Togetterまとめ 昨年は主催しましたが、今回はTAとして参加しました。一応名目上は今年の主催者である @135yshr さんの補助をするという立場だったけど、ほとんどなんもしていない。 結論からいえば、開催して本当に良かったなと思う。皆さんにも楽しんでいただけたようで嬉しい。昨年の悪い点は今回で大分改善出来たかなと思いました。 お題が良かった 昨年は自動販売機でしたが、若干作りにくい印象がありました。一見するとこの問題は誰もが使ったことがあるものなのでとても作りやすいように見えますが、お金を投入した状態を保持する「状態」を扱うテストが必要だったり、お釣りや商品…
モバイルサービスのサーバーロジックのテストをしようとした場合、モバイルサービスのモジュールは公開されていないのでローカル環境でテストが出来ない。 なのでモック使おうと思ってもそんなのは公開されておらず、絶望しつつなんとなくBuild 2013 のセッションを眺めてたら、 Going Live and Beyond with Windows Azure Mobile Services | Build 2013 | Channel 9で zumock というので出来るらしいと紹介されてた。んでも、ぐぐっても見当たらない。 セッションの発表者である @paulbatum さんに twitter で聞いてみたら、今バケーション中だからもう少し待っててとのこと。こんな風に簡単に聞ける時代は本当にスゴイ。 ということで、そのうちモバイルサービスでも TDD ができそうですので、公開され次第 blog か 記事(ステマ)で紹介したいと思います。
前回はTime Capsuleで快適になったと書きましたが、1点だけ共有フォルダが Windows から参照できず困ってました。 Time Capsule の共有設定が、装置パスワードになっていたので、アカウントに切り替えたらなんとファイルが空っぽに見えてしまい超焦りました! 慌てて装置パスワードに戻したら復元してくれて、ヤレヤレという感じでしばらく放置してました。 で、今朝共有フォルダをみたら、「Shared」と「Users」という見慣れないフォルダが出来ていました。 もしやと思って「Shared」にファイルを突っ込んで、再度アカウントに切り替えたところ無事にファイルも表示され、WIndows からも見られました! まとめると、Time Capsule のファイルを Windows から見るためには「アカウント」に設定する必要があります。もし、デフォルトの「装置パスワード」から変更する場合は、「Shared」というフォルダにファイルを移動させる必要があります。 これで、Windows のバックアップも Time Capsule に突っ込めるので本当に良くなったわー。
AirMac Time Capsuleを買いました。今回買った理由は3点。 auひかりを利用していてHGW内蔵無線LAN親機機能使用料というのが毎月400円とられているので、節約したかった。 どうせ無線LANルーター買うなら、802.11acに対応しているのが良い。 以前から Time Machine のバックアップに苦しめられていた(Bitcasa に TimeMachine でバックアップはうまくいかなかったとかまたまた外付け HDD の Time Machine パーティションが壊れた)ので、NAS の機能が欲しかった。 Time Capsule のUSBに、今まで使用していた外付けHDDを接続。これだけで普通にNASとして使える。Time Machine の機能はもちろん内蔵のHDDへ。 今までの苦労は何だったんだろうっていう感じ。外付けHDDの煩わしいUSB接続や電源のオンオフも不要で常時つけっぱなし。サスペンドから復帰時のマウントエラーもなし。やっぱりAppleは純正に限りますなぁ。