Azure Service Fabric の SDK が公開されていた

Visual Studio 2015 RCが必須です。 Service Fabric Documentation | Azure Set up your Service Fabric development environment ちょっとだけ雑感 Choosing a framework Reliable Actors APIs と Reliable Services APIs のどちらかを選択する。 Azure Service Fabric Actors Overview Actor の 並行性 がこんな感じ。 f:id:nnasaki:20150430141336p:plain Getting Started with Microsoft Azure Service Fabric Reliable Actors Hello, World サンプルコードがこんな感じ。先ほどの図の通り、だいぶ非同期満載です。 namespace HelloWorld { public class HelloWorld : Actor, IHelloWorld { public Task<string> SayHello(string greeting) { return Task.FromResult("You said: '" + greeting + "', I say: Hello Actors!"); } } } Overview of the Service Fabric Reliable Service Programming Model ステートレスかステートフルかを選ぶ ...

April 30, 2015 · nnasaki

Global Azure Boot Camp 2015 in Japan にて発表しました

Global Azure Boot Camp 2015 in Japan - Japan Azure User Group | Doorkeeper Azure Web Apps とAzure Mobile Apps について発表しました。 JAZUG青森、福島で話したモバイルサービスを Mobile Apps にアップグレードさせました。 ** Azure Web Apps とAzure Mobile Apps ** from 誠樹 山本 補足:Mobile Apps のバックエンドについて 懇親会で聞かれたので簡単な図を用意しました。 f:id:nnasaki:20150426111251p:plain Mobile Apps のバックエンドは、ASP.NET Web API がベースとなっていて、Mobile Apps 用のラッパーにMicrosoft.Azure.Mobile.Server.TableController があります。MVC6 からは MVC とWeb API のコントローラーが統合するのでアップデートされるかなぁという不安はちょっとあります。 IQueryable で、 OData 指向なのはどうなんだろうなぁーと思ってます。(see ref. neue cc - LINQ to BigQuery - C#による型付きDSLとLINQPadによるDumpと可視化) あと、実際使うとcors設定とか、標準だと50件までしか取って来れないとか、そのまま使うとちょこちょこハマると思います。 後日談 時差の関係で Global Azure Boot Camp 2015 の世界中のなかでおそらく一番最初に発表だろうということで、大変緊張しました。 ...

April 26, 2015 · nnasaki

Azure Logic App で Twitter のログを取得して Web API を叩く

Azure Logic App を使用すると、お絵かきする感じでアプリが作れます。 今回は Twitter で Azure が含まれるログを取得したら、自作の Web API を叩くということをやってみます。 Azure Logic App を作成する プレビューポータル(新しいポータル)からのみ作成できます。 f:id:nnasaki:20150325142129p:plain Triggers and actions を追加する 作成したら次の箇所をクリックして、ワークスペース(?)を開く f:id:nnasaki:20150325142256p:plain 「Twitter Connector」 を選択する。無い場合は右下の Marketplace から作成出来ます。注意点として、同じ resource group の App のみ選択できます。Authorize して、Twitter アカウントと認証する。 f:id:nnasaki:20150325142710p:plain Twitter Connector のキーワードに「Azure」を入力する 「New Tweet」を選択する f:id:nnasaki:20150325142907p:plain Keyword に 「azure」を入力して保存 f:id:nnasaki:20150325143033p:plain Web API を用意する 今回は Java で Spring Boot を使用してみました。 詳細は省きますがコードはこんな感じです。Spring Initializrから Web だけチェックしてダウンロードしたものにコピペしてあげれば動くと思います。 package demo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.Optional; @SpringBootApplication @RestController public class DemoApplication { private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class); @RequestMapping("/") @ResponseBody String home(@RequestParam(value = "tweet") Optional<String> tweet) { if (tweet.isPresent() == false) return "tweet is null"; logger.info("tweet are " + tweet.get()); return "tweet echo that " + tweet.get(); } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } これで、gradlew bootrunをすると Tomcat が立ち上がります。 http://localhost:8080/?tweet=aaaaと呼び出せば、aaaaが返ります。 ...

March 25, 2015 · nnasaki

Azure Mobile Apps と Mobile Services の違いについて

Azure App Service がリリースされました! これは今まで Web Sites や Mobile Services などに分かれていたプラットフォームを統合して、よりアプリを作りやすく、使いやすくしたものになります。詳細はNo1のブチザッキを読んでいただけるとより理解できると思います。 Azure App Service | ブチザッキ ScottGu’s Blog - Announcing the new Azure App Service さて、 Mobile Services 使いとして気になるのは Mobile Apps です。現在は Public Preview なため、 Mobile Services と比べて足りないところがあります。 azure mobile app の Quickstart に Android Studio が無い… pic.twitter.com/us1kCa1K4i— YAMAMOTO Masaki (@nnasaki) 2015, 3月 24 mobile app、 node.js backend 選べないから iOS アプリ作るためには Windows と Visual Studio 必須か。 swift も選べない。 pic.twitter.com/v4tlFiYBk1— YAMAMOTO Masaki (@nnasaki) 2015, 3月 24 GA するまでに Quickstart は追加されると思いますが、 JavaScript は難しいかもしれません。なぜなら、 Azure App Service and its impact on existing Azure services の Mobile Apps をみると次のように記載されています。 ...

March 25, 2015 · nnasaki

Microsoft Azure Mobile Services(モバイルサービス) で '__createdAt' を取得する方法

大人気となっている id:garicchi の Azure と 機械学習 と IoT を組み合わせた記事を楽しくよませていただきました。 Azure Machine LearningとIoTを駆使して室温予測システムを構築してみた - がりらぼ その中で、 Azure Mobile ServicesのJavascriptバックエンドでデータ挿入時に時間を含めたい - がりらぼ **MobileServicesはデータ挿入時に自動で__createdAtというカラムが追加されるはずなのですが何故かスクリプトから参照できなかったので自前でタイムスタンプを入れることにしました。 とあったのですが、多分出来るはずと思って調べてみました。 問題 Microsoft Azure Mobile Services(モバイルサービス) のサーバースクリプト(Javascrip バックエンド) で ‘createdAt’, ‘**updateAt’, ‘**version’, ‘**deleted’ のシステムプロパティが取得できない。 例えばこんなカスタムAPIを作成して、全件取得したいのに ‘__createdAt’ が表示されない。 サンプルコード exports.get = function(request, response) { var myTable = request.service.tables.getTable('TodoItem'); myTable.read({ success: function(results) { response.send(statusCodes.OK, results); }, error: function(err) { response.send(statusCodes.INTERNAL_SERVER_ERROR, err); } }); }; 取得結果 ブラウザかなんかで https://hogehoge.azure-mobile.net/api/fugafuga を GET する。 [ {"id":"32ADB4B1-D515-4666-AAA7-57466FCEC261","text":"なんかのテキスト","complete":false}, ... 省略 ] 解決方法 success の前に systemProperties: ['__createdAt', '__updatedAt'], を入れる。全部のシステムプロパティが欲しければ systemProperties: ['*'], ...

March 4, 2015 · nnasaki

IntelliJ の Terminal で文字化けした場合の対処法

IntelliJ で最近開発をしていて、 gradle プラグインがあまりよろしくない挙動をするので、 Terminal を使用して ./gradlew clean build && java -jar launcher/build/libs/launcher-0.1.0.jar こんな感じで実行している。 問題 ところが、 Mac の Terminal ではうまくいくのに、 IntelliJ の Terminal では次のエラーが発生して起動しないことがあった。 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘sqlSessionFactory’ defined in class path resource [/MyBatisConfig.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.sql.DataSource]: : Error creating bean with name ‘dataSource’ defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSourceInitializer’: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 6 of resource URL [file:../database/src/main/resources/data.sql]: INSERT INTO STEP_OPTIONS(value,label) VALUES (‘00’,’������������’), (‘01’,’���������������������������������������������’), (‘99’,’���������’); nested exception is org.h2.jdbc.JdbcSQLException: 列 “LABEL VARCHAR(15) NOT NULL COMMENT STRINGDECODE(’\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd’)” の値が長過ぎます: “STRINGDECODE(’\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd… (45)” ...

February 7, 2015 · nnasaki

会社からコミュニティへの越境

このエントリーは『 DevLOVE Advent Calendar 2014 「越境」 - DevLOVE | Doorkeeper 』の2015年1月15日の記事です。前日は遊さんの『 自分の「越境」を見つめなおす 』です。 さて、年始に昨年末で退職したという記事を書いてから2週間が過ぎようとしています。 2014年振り返り。会社辞めました。 - 世界のやまさ 前半は自分がなぜ転職するに至ったかを書いていきます。タイトルの越境については後半で書きます。 転職に至った理由 一言で言えば、プログラマとしてのキャリアを続けたかったから。もっともっと学ぶことは続けたいし、新しい技術を使いたい。便利になること。今まで出来なかったことが出来るようになること。これほど面白い仕事は他に無いと思っています。 どうして転職しなければ続けられなかったかという理由はこうです。 SIerでプログラマを続けるには限界だと思った プログラマの働く業界は労働集約型の業界と、知識集約型の業界に分かれると考えています。詳細はきしださんのブログ記事を見てください。 日経ソフトウエア 2014年 09月号 の 「特集2 プログラミングで生きる道」がさらに読みやすいと思いますので、ご興味のある方は一読すると良いと思います。 [ 日経ソフトウエア 2014年 09月号 ](http://www.amazon.co.jp/exec/obidos/ASIN/B00LI7YSXY/nnasaki-22/)[日経ソフトウエア 2014年 09月号](http://www.amazon.co.jp/exec/obidos/ASIN/B00LI7YSXY/nnasaki-22/)- 作者: 日経ソフトウエア- 出版社/メーカー: 日経BP社- 発売日: 2014/07/24- メディア: 雑誌- この商品を含むブログ (1件) を見る 私の働いていた会社はいわゆるSIerで労働集約型の業界でした。いかに人を集めて、人件費をどれだけ安く抑えるかが問題の世界です。したがって、私のように35歳付近のプログラマは人件費が高くなるので使いにくくなってきます。 また、それと同時にこのぐらいの年齢になると会社が求める「技術レンジ」の上限に達します。「技術レンジ」とは会社が必要とする技術力の上限と下限です。** 上限を超えてしまった人間は会社から見れば、オーバースペックです。自分としては学ぶことが少なくなる。会社と自分間がWin-Winでは無くなります。 つまりSIerに必要なプログラマというのは、そこそこ出来て安い人間なわけで、飛び抜けて技術力が高い人間は不要なわけです。なので、第二新卒あたりの中途採用が盛んなのかなと思います。教育不要で安い労働力が手に入りやすいので。 マネージャーにならなければ給料が上がらない 人件費が高くなったプログラマーは使いにくいので、マネージャー(管理)側にジョブチェンジしなければなりません。 マネージャーへのジョブチェンジを拒んだ場合は、給料が頭打ちとなります。なぜならプログラマが一人で稼ぐよりマネージャーが3人のプログラマを管理するほうが稼げるからです。このとき管理対象は有限である社内の人間より、無限と思われる社外の人間(パートナー)を扱った方がスケールアウトしやすくなります。ここでn次請け構造が形成されます。 このようにSIerでプログラマにこだわる場合は給料が上がらないため、現実を受け入れる(どうせこんなもんだろうと自分に言い聞かせる)か、会社を去る。このどちらかを選択する必要があります。そして、私のように現実を受け入れられない人は会社に残らないため、会社の平均給与もあがらない。という結果になります。 安い労働力だけが欲しい会社にとっては良い仕組みなのかもしれません。このような会社の見分け方は、毎年新卒を大量に採用している。離職率が高い。平均年齢が若い。といった情報から推測できるとは思います。 会社からコミュニティへの越境 さて、転職の経緯を今まで書きましたが本題です。 私が考える会社とコミュニティの関係はこうです。 f:id:nnasaki:20150113034404p:plain 複数の会社が縦割りで存在しているなか、それぞれの会社の人と人を繋ぐ横の役割がコミュニティです。 そして、従来は会社に人が所属するという意識でしたが、今は人が会社に所属する時代と考えるようになりました。 つまりA社の○○さんではなく、○○さんがいるA社**となりつつある。 皆さんが転職するにあたって、会社を選択するときは、会社の会社概要・社長からのメッセージ・財務状況などで決断しますか?知りあいがいるからとか、コミュニティで活躍している○○さんがいるからとか、特定の人がいるから選択しているのではないでしょうか? 今回私が転職する際は、一般的な転職サイトで転職してしまうと、同じような会社に転職してしまい、同じジレンマを抱えてしまうのではないかと考えました。 そこで、今回は転職サイトもエージェントも一切使いませんでした。コミュニティで知り合った方々に相談して転職を決断しました。 このように私の中でコミュニティの存在が会社よりも多きくなっています。今まで会社で出来なかった事がコミュニティなら出来ることもあります。例えば、今回のように転職の相談は会社の人とはしづらいですが、コミュニティの人とならわりと気軽に出来ます。 まとめ 私が会社からコミュニティに越境していくという話をしました。もし、会社で悶々としている人がいましたら、コミュニティにぜひ顔を出してみてください。今後仙台では次のイベントを予定しています。 ウェブデザイン・ウェブ開発に必要なこと(DevLOVE仙台-DevLOVE関西連携企画) - DevLOVE仙台 | Doorkeeper 2015 MVP ComCamp 東北会場 - connpass 明日は papanda さんです。2回目ということでどのようなお話が出るか楽しみです。 ...

January 15, 2015 · nnasaki

2015年の目標

元旦から日にちが経ってしまいましたが、今年の目標は Github の Longest Streak を更新することです。Longest Streak とは Github に表示されるこんなやつです。 f:id:nnasaki:20150106155732p:plain 昨年は見ての通り、スカスカで見るも無惨な感じでした。 ここが毎日緑色で埋まるようにしたい。 しばらくお仕事は Github のプライベートリポジトリになるので、とりあえず毎日コミットを続けたい。残念ながら皆さんから見える部分は相変わらずスカスカになってしまうので、Public なコミットを増やしていくのが今後の課題かなぁ。

January 6, 2015 · nnasaki

2014年振り返り。会社辞めました。

あけましておめでとうございます。元旦に誕生日を迎えて、いわゆるプログラマー定年まであと1年となりました。 2014年12月31日で退職しました まず最初にタイトルの通り2014年12月31日で退職しました。なぜ辞めたかというのは、DevLOVE Advent Calendar 2014 「越境」 という 2015/1/1 04:41(JST) 時点であと 2431人 参加できる頭のおかしい Advent Calendar で、 詳細を書きたいと思います。よくある うらみつらみ を書く気は毛頭ありません。 今後は特に就職先もなく、個人事業主として働きます。当分のお仕事はなんとかなりそうなんですが、6月頃からはまだ不透明なのでなんとかせねばなーと思っています。 時系列で振り返り 2014/2 デブサミ2014に参加しました 2014/2/7 「納品のない受託開発」を語る会 - DevLOVE仙台 | Doorkeeper 開催 2014/3/22 MVP Community Camp 2014 Windows Azure と Xamarin で作るマルチプラットフォームアプリケーション MVP Community Camp 2014 - Tohoku(エフスタ!!SENDAI 2)で発表しました 2014/3 - 6 Windows Azureモバイルサービスで始めるスマホアプリ開発:連載|gihyo.jp … 技術評論社 3月から6月は技術評論社様にて連載させていただきました。なので勉強会の登壇はこの間少なめになってますね。リブランド前でしたねぇ。 2014/5/17 泥臭い受託開発を語り合う(DevLOVE関西×DevLOVE仙台コラボ企画) - DevLOVE仙台 | Doorkeeper JAWSUG仙台・会津・山形・沖縄!四大会場 地球最大の決戦 with JAZUG仙台 Microsoft Azure Web SiteでWordPress を5分でデプロイする話しをしてきた DevLove仙台を開催しつつ、後半はこちらに参加という無謀なことしてたな。1000RPSぐらいまでは簡単に捌けるので、ワールドビジネスサテライト砲も安心安心。 ...

January 1, 2015 · nnasaki

ASP.NET MVC5 実践プログラミングを読みました

[ ASP.NET MVC 5実践プログラミング ](http://www.amazon.co.jp/exec/obidos/ASIN/4798041793/hatena-blog-22/)[ASP.NET MVC 5実践プログラミング](http://www.amazon.co.jp/exec/obidos/ASIN/4798041793/hatena-blog-22/)- 作者: 山田祥寛- 出版社/メーカー: 秀和システム- 発売日: 2014/09- メディア: 単行本- この商品を含むブログ (1件) を見る 全部で500ページ超あります。ですが、単純なリファレンスではなく随所に著者の配慮がちりばめられており、「何故そうするか?」「こうするべき」という点も言及されている感じで、そんなに読みにくいとは感じませんでした。また、翻訳ではなく日本人の書き下ろしという点も読みやすさに一役買っていると思われます。 本書は ASP.NET MVC にフォーカスしていますが、 One ASP.NET の全体像にも触れており、最近の ASP.NET について知りたい方にもオススメできます。 ASP.NET Web API については本書の範囲外と断りはありながらも、Chapter 8 の応用編にちょっとだけでてきます。 順番が前後してしまいましたが、応用編以降は初心者の人が次のステップを目指すために読んでも良いと思いました。中級者以上の人にも役立つ感じで、私もなるほどと思うところが多々ありました。 特に、Chapter 9 の単体テストで DB を扱う場合や、Chapter 10 の ASP.NET Identity については他の書籍には書かれていないので、日本語で一番まとまっている情報だと思われます。 ASP.NET Identity の歴史的背景は本書にも書かれていますが、詳しくは .NET最新技術「ASP.NET Identity」とは? - Build Insider を参照していただくと、より理解が深まると思います。 ASP.NET MVC の書籍は他にも プログラミングMicrosoft ASP.NET MVC 第3版ASP.NET MVC 5 対応版 (マイクロソフト公式解説書) があり、前の版数と比較した感じですと個人的には本書籍のほうが読みやすいと感じました。ですが、あくまでも ASP.NET MVC に焦点を絞った解説本ですので、他のASP.NET 技術を知りたい、例えば SignalR をもっと知りたい場合は プログラミング ASP.NET SignalR (マイクロソフト公式解説書) を読んだ方が良いです。 ASP.NET って、WinForms みたいにフォームを貼り付けて、ダブルクリックでイベントにロジック書くやつでしょ?というイメージしかない人は、一度本書を手にとって読んでいただけると良いと思います。 ...

November 2, 2014 · nnasaki