新年のごあいさつ & 2018年のふりかえり by @masaru_b_cl

あけましておめでとうございます。本年もよろしくお願いいたします。

さて、この2年くらい書いてなかったのですが、色々ありましたので久しぶりにふりかえりをしておこうかなーと思います。

1月

書評 | テスト駆動開発(オーム社)

テスト駆動開発が@t_wadaの手により復活したので、その書評を遅まきながら書きました。

さらに1年以上経つのですが、今度2月9日に再販記念のTDDBCを長岡で久々に開きますので、ぜひおいでください!

「TDDBC 長岡 2019-02」を2019/2/9(土)に開催します! #tddbc | DevelopersIO

3月

第55回 長岡IT開発者勉強会に参加しました

第55回勉強会(2018/03/17) – 長岡 IT開発者 勉強会(NDS)

テーマ「入門・初心者向け」ということでしたので、新しい世界の学び方というタイトルで私も発表してきました。これまで新入社員研修などで培った「学ぶ」ということへの知見をまとめることができて、自分でもよかったです。

5月

書評 | Adaptive Code (C#実践開発手法 第2版) 

監訳者の@tnagasawaが募集していたレビュアーに応募して当選したので、書評を書きました。

この本のコードはC#ですが、アジャイル開発プロセスの1つである「Scrum(スクラム)」の説明や、最も有名なオブジェクト指向設計原則「SOLID」について丁寧に解説しているので、他の言語をメインとする方にもおすすめです。

バッチプログラミング入門 by C#

新入社員研修用に新たに書いたテキストです。.NETのコンソールアプリの開発手順って案外まとまった情報が無いので、結局自分で書くことになっちゃいました。

車窓からのTDD by C#

新入社員研修用に新たに書いたテキストその2。TDDを研修に取り入れるに当たって、写経用に「車窓からのTDD – オブジェクト倶楽部」をなぞるやり方についてまとめました。

6月

Windowsフォームによる業務プログラミングチュートリアル

新入社員研修用に新たに書いたテキストその3。「アプリを作ろう! Visual C#入門 Visual C# 2017対応」のような入門書の次に身につけるべきことである、PDSやフォーム間の依存関係などを解説したテキストが見つからなかったので書きました。

このテキスト自体は2年ほど前に社内では使っていたのですが、せっかくなので社内向けの内容をデトックスして公開することにしました。

システム開発者のためのネットワーク入門

新入社員研修用に新たに書いたテキストその4。例によって、「ちょうどいい」感じの量でネットワークについての最低限の知識やコマンドが学べるテキストがなかったので書きました。

7月

docs.microsoft.com の ja-jp へフィードバックして改善された話

Microsoft Docsの日本語訳について誤りがあるというのが、twitterでちょっとバズってたので、せっかくなのでフィードバックして直してもらった顛末です。

MS Docsに限らず、日本語ドキュメントはメンテナンスが行き届いていないことが結構あります。間違いを見つけたら悪態をついているだけでなく、気軽にフィードバックして貢献することで、ちょっとだけ世界が良くなるのでおすすめです。

9月

クラスメソッド事業開発部にジョインした@masaru_b_clこと高野 将です

色々思うところがあり、自分の身を置く環境を変えようと数年来考えてきたのですが、ついにそれが実りました。

これまでの環境とはだいぶ違うので大変なことも多いですが、なんとかやっています。

なお、クラスメソッドではブログを書くことを推奨しているので、以後のブログは会社ブログであるDevelopers.IOに書いています。

元WindowsユーザーのVimmerでVSCoderが、入社1週間でMacにインストール・設定したものまとめ

会社ブログの第一弾です。私はこれまでMacを触ったこともなかったので、色々設定したことを備忘録としてまとめました。

近年はVimやGitについてくるターミナル環境のGit Bashでの操作に慣れていたこともあり、案外すんなりと使えるようになったのはよかったです。

NDSのポッドキャスト「NDS FM」の第5回に出演しました

7/7に開催された長岡 IT開発者 勉強会(NDS) 第56回勉強会にて@dictavからアナウンスのあった、NDSの公式ポッドキャストNDS FMに出演し、私のコミュニティ遍歴やNDSとの出会いと今まで、新入社員研修や転職についてお話ししました。

NDS FM#005: 私とコミュニティ活動とNDS

私自身もRebuild.fmajitofmなど、結構ポッドキャストを聞くのは好きな方ですので、NDS FMは非常に良い試みだと思っています。今後も機会があればちょくちょく出演していこうと思います。

10月

あらゆる「学習・教育」がテーマの第57回 長岡IT開発者勉強会に参加しました&私も新入社員研修の作り方について発表してきました

第57回勉強会(2018/09/29) – 長岡 IT開発者 勉強会(NDS)

テーマが「学習・教育」だったので、このタイミングしかないと思って私も「新入社員研修の作り方」について発表してきました。数年やってきた知見をまとめて発表する場が持てて、非常によかったです。

何故教えるのか、何を教えるのか、どうやって教えるのか 〜 「新入社員研修の作り方〜完全版〜」のプレゼンを実況中継風に再現

その発表をブログエントリとしてまとめました。超頑張ってまとめた割に、反応が薄くてちょっと残念でしたが、必要としている人に長く届き続けるものになれば良いなと思います。

11月

NDSFM 第9回「NDS第57回勉強会振り返り会」に出演しました

さらにふりかえりを行なったNDS FMにも出演しました。

NDS FM#009: NDS第57回勉強会振り返り会

12月

最強のMarkdown編集環境を模索する

仕事でよくMarkdownを書くので、その知見をまとめました。

日経 xTECHにGitHub入門記事を執筆しました

久々のWINGSプロジェクトの仕事で、GitHubの入門記事を執筆しました。

初めてのGitHub | 日経 xTECH(クロステック)

この記事は、雑誌「日経SYSTEMS」の2019年1月号に「インサイト 『今から間に合う GitHub超入門』」としても掲載されます。

日経SYSTEMS 2019年1月号 | 日経 xTECH(クロステック)

まとめ

昨年は環境を変えたこともあり、.NET系から離れてました。そのせいもあり、コードでのアウトプットがほぼないのが少し気になりますね。ただ、どうやら私はコードを書いていないと死んでしまう人種ではないようなので、また気分が乗ったら自分のペースでやっていこうかなーと。

コード以外のアウトプットは、これまで自分の中に溜まっていた知見を出したものが多かった感じですね。正直ある程度出し切った感じはあるので、現職でのインプットを元に、また違う視点でのアウトプットを増やしていけるよう頑張ります。

あと、アウトプットの形として、新たにポッドキャストが増えたのはよかったですね。@dictav++

今年の抱負

当面は現職の業務をこなしつつ、業務ドメインやマイクロサービスなどの知見をアウトプットしていければと思います。あと、コードも感を失わない程度には書いていきたいですね。

とはいえ、1年は長いので、状況が変わったらそれなりにフットワーク軽くやってく所存です。

あと、既に述べたように2月に久々のTDDBC開催を予定しているので、このイベントの成功も頑張ります!

Sponsored Post Learn from the experts: Create a successful blog with our brand new courseThe WordPress.com Blog

WordPress.com is excited to announce our newest offering: a course just for beginning bloggers where you’ll learn everything you need to know about blogging from the most trusted experts in the industry. We have helped millions of blogs get up and running, we know what works, and we want you to to know everything we know. This course provides all the fundamental skills and inspiration you need to get your blog started, an interactive community forum, and content updated annually.

docs.microsoft.com の ja-jp へフィードバックして改善された話

TL;DR;

本文

ちょっと前に話題になってたこれら

関連です。

このフィードバックは最終的に改善されることになりました。

それを受け、直ったというページを見たら、まだ違和感が……

要はMSの日本語ドキュメントガイドラインにも書いてある、いわゆる「半角文字」と「全角文字」の間にスペースがないというわけです。

というわけで、改めてフィードバックしたのがこちら

続くコメントを見てもらうとわかるのですが、最初はほかのチケットと同じとみなされ、即クローズされてしまいました。

https://github.com/dotnet/docs.ja-jp/issues/140#issuecomment-408531738

しかしその後、別の担当者の方から「同じではなく、対応すべき指摘である」というコメントと共に再オープンされました。

https://github.com/dotnet/docs.ja-jp/issues/140#issuecomment-408611899

そして、今日無事対応したという連絡がありました。

https://github.com/dotnet/docs.ja-jp/issues/140#issuecomment-408998722

2018/7/31 10:00現在はまだdocs側は直っていないようですが、じきに直るでしょう。

まとめ

ちゃんとプロセス含めて改善されているようなので、どんどんフィードバックしましょう ╭( ・ㅂ・)و̑ グッ

おまけ

このフィードバックについて対応されたなーと思った後に、@megascusさんのツイートを発見

まとめたよ!

追記

その後確認したら、更新された!と思ったら……

pre.png

なぜだーーーーーーっ!

というわけで即座に再コメント。

https://github.com/dotnet/docs.ja-jp/issues/140#issuecomment-409138735

はてさてどうなることやら。

追記のおまけ

@matarilloさんのこれが当たってるんじゃないだろうか……

追記の追記

直ってた!チケットもクローズされた!

post

書評 | Adaptive Code (C#実践開発手法 第2版) by @masaru_b_cl

監訳者の長沢智治氏(@tnagasawa)より献本御礼。

https://shop.nikkeibp.co.jp/front/commodity/0000/P53540/

本書は以前書評を書いた「C#実践開発手法」の第2版です。

新刊『Adaptive Code 〜 C#実践開発手法 第2版』 – 長沢智治のブログ
https://nagasawa.blog/entry/adaptive-code-second-edition-japanese

本書の特徴は何といっても「C#」がタイトルからなくなったことです。初版の書評で、私は次のように書きました。

「C#ならでは」というものも、それほど多くはないという印象でした。この点については少し残念でした。

しかし、本書ではC#かどうかは重要ではなく、いかに「適応力のある(≒Adaptive)」なコードを書くかに主眼があることがより明確になりました。これは非常に素晴らしいことです。

本エントリでは、初版から変わったところを中心に、私が思ったことを紹介します。

レガシーコード改善がより実践的に

本書は初版では一緒の章になっていた「テスト」と「リファクタリング」が別々の章になりました。これにより、元の「Adaptive」でないレガシーコードの改善の手順が、より実践的になりました。

特に良いと思ったのは、最初に「仕様化テスト」を用意するところです。しかも、テスティングフレームワークを使うのではなく、ただのコンソールアプリでよいという割り切りが素晴らしいです。

テスティングフレームワークを使うと、どうしても入出力ファイルの扱いで制約を受けて、うまくテストすることができないことがあります。それを、対象コードをそのまま動かすことで、とにかく変更前後の結果が同じかどうかを比較できるようにすることが、何よりも大事だというメッセージと受け取りました。

テストが手厚い

前述のように「テスト」と「リファクタリング」が分かれたことにより、「テスト」についてより包括的に書かれています。初版ではほぼ「ユニットテスト」しか扱っていませんでしたが、より大きなテストアンチパターン、「テスト駆動開発」と「テストファースト開発」の違いなど、かなり情報が増えており、とても良いと思いました。

Code ContractとUnity(DIコンテナの方)はちょっと……

初版から「契約による設計」を強制するツールとして第9章に「Code Contracts」が出てきます。ただ、正直最新のVSに対応していませんし、製品としても今はあまりメンテナンスされていない印象ですので、ちょっとなーと思いました。

また、Unityを使ったDI(依存性の注入)についても、今は「Unity」といったらゲーム開発ツールの方を先に思い浮かべてしまいますし、.NET Coreに標準でDIの仕組みが入ったこともあり、ちょっと古い感じはあります。


初版の書評でも述べた通り、本書は初心者がSOLID原則などを学ぶのにも適しています。タイトルからC#もなくなりましたし、他の言語を扱っている人にもぜひ読んでもらいたいと思います。

それでは、最後に恐らく間違いを見つけたので、そちらも紹介しておきます。

「第9章 リスコフの置換原則」のp.299 リスト9-30は、p.297の図9-6と見比べてみると、IEntityRepository<TEntity>の型引数にoutキーワードが足りません。おそらく正しくは、IEntityRepository<out TEntity>の間違いだと思います。

第55回 長岡IT開発者勉強会に参加しました #nds55

第55回勉強会(2017/03/17) – 長岡 IT開発者 勉強会(NDS)
http://nagaoka.techtalk.jp/no55

テーマ「入門・初心者向け」

毎年恒例の春企画、新社会人・新入生に向けた入門者向けのテーマで発表お願いします。(まだ3月ですが)
特定のテーマにおける入門的なテーマでもOKです。もちろんテーマ外の発表も歓迎です。

に参加、発表してきました。

テックトーク

pythonはじめの一歩(コードとかではなく) by @civic

NDS主催のcivicさんの発表です。Python環境のハマらない作り方についてでした。

https://docs.google.com/presentation/d/1K6a1fBdQyD51k4EJrZyRsGsw5N1ftaTN7zn7TrqRm_A

Pythonは触る機会が今のところないのですが、Windowsは公式インストーラーがお勧めということですので、触る必要が出てきたらそうしようと思います。

個人的に面白かったのは、pythonのライブラリなどのパッケージ管理は、プロジェクト単位ではなく「仮想環境」単位ということでした。ほかのツールは、プロジェクトフォルダーの下に必要なモジュールを置くことが多く、なるほど文化の違いとは面白いものだ、と。

あわせて読みたい

長岡IT開発者勉強会 #nds55 に参加・運営してきました | civic site
https://www.civic-apps.com/2018/03/18/nds55/

プロジェクトマネジメント入門 by hiro_ishibashi

ProjMのいしばしさんによる入門でした。

この一言に集約される気がしますね。

Docker for Mac/Windows ではじめる Kubernetes by @hayajo

はてなのはやじょさんのセッション。

個人的にはDockerはさわりはやってますが、その先は全く使ってないのでちょいとついてくのつらかったんですが、研修とかでAPサーバー・DBサーバーのセットをえいやって配るのに便利そうだなーと思いました。これは懇親会で直接聞いたら、そういう用途もよくあるということだったので、理解ずれて無くて安心。

なお、「Kubernetes」の発音は、はてなでは「クバネテス」が多数派だそうです。

はじめてのソフトウェアテスト技法 ー 同値分割・境界値分析編 by @kasacchiful

笠原さんのテスト入門第二弾。テスト技法の初歩的なところを説明していただきました。

「同値分割」の時に使えるツールに「同値図」というのが出てきて、これまで私はツリーでやってきたのでいい情報でした。連続値の分析には数直線、離散値には同値図が向いているとのこと。

質問で出た、「境界値自体が外部からの入力になる場合はどうしたらよいですか?」はとっても良い質問で、「ドメイン分割」や「デシジョンテーブル」で戦うという話でした(私もそう思います)。

きっとこれ、「現在の日時で~」みたいなのでも同じこと言えそうな感じですね。隠れた入力値をいかに割り出せるかがポイントでしょう。

アウトプットのすゝめ 〜春のエモを添えて〜 by @shinpei0213

猫型さんによるエモーショナルなセッション。

とにかく「やらなければ、はじまらない……」ということで、アウトプットするとこんなにいいことがあるよっていう熱い思いをぶつけてくださいました。

んで、おそらくぶつけられてる対象なんだと↓から読み取りましたので頑張る。

フリーランスで割と長くリモートでやってる僕が気をつけていること by @nemuzuka

片桐さんのリモートワークにまつわるあれこれでした。積極的にアピールすることや、全部残すとかがポイントなんですが、結局リモート関係なくやった方が職場環境よくなることがたくさんでした。あと、リモートワーク可能かどうかは組織による部分もかなり大きいとのこと。たしかに。

今後なにかしらそういう時が来たら全力で参考にさせてもらいたいと思います。

あわせて読みたい

長岡IT開発者勉強会(NDS)の第55回勉強会に参加してきた #nds55 – nemuzukaの「明日から本気出す」
http://nemuzuka.hatenablog.com/entry/2018/03/19/232308

Amazon Neptuneに入門してみる by @yuw27b

某大学の研究室勤務というWatanabeさんによる、AWSのマネージドグラフDBサービス「Neptune」の紹介でした。

昨年もNeo4jなどのグラフDBについて紹介してくださったのですが、商用で使い物になるグラフDBはあんまりなくて、今後本命になるかもしれないということでした。今のところ、まだプレビュー段階で、ごく一部のリージョンでしか使えませんし実践投入できないそうなのですが、ハマるところはありそうなので早くプレビュー取れるとよいですね。

質疑応答では、「プロパティグラフ」、「RDF」のどちらがどんな用途に向いているか、といった質問があり、「プロパティグラフ」はパス解析などができるが組み合わせ爆発に注意、「RDF」は問い合わせに使うSPARQLの都合でパス解析はできないのでノードの偏りなどの解析向きということでした。

新しい世界の学び方 by @masaru_b_cl

私のセッションで、テックな話題はいっぱいあるだろうからということで、誰でも使える「学び方」の紹介でした。

セッションで取り上げた「ラーニング・パターン」は実際とっても有用なので、個人・チームでぜひ読んでほしいです。

質疑では「何が原理原則かわからない問題」について聞かれ、「わかる」という感じだったのですが、そのあたりは有識者が手を差し伸べるのが一番早かろうといった旨を答え、公開したスライドにもちょっち反映させました。

アイコンフォントを手作りしよう by @gatabutsu

やまざきさんによる「ライブ・アイコンフォント作成」も含んだ面白いセッションでした。「長岡市の形をしたアイコンが欲しい」という無茶ぶりに、見つけた地図からアイコンフォントをフォトショップ、イラストレーターなどを駆使して何とかした話を紹介してくださいました。

なかなかにニッチな仕事ですが、手持ちの武器で何とかする姿は正直かっこよかったです。

LT

数年ぶりにJSを使った件 by @gonchan93

WSHでJScriptやることになったらprototypeとESとの違いにハマった話でした。

滅ぼしたい気持ちはわかるが、無理だ。

Blazor(.NETのWeb Assembly対応したSPAフレームワーク)について by @AILight

C# で Single Page Web Application が書ける Blazor が凄かった件 – Qiita
https://qiita.com/jsakamoto/items/20d4893f6c8cdb0356f6

でもちょっと話題になったBlazorについて。

「System.dllをGETしてる……!?」と皆さんから驚きの声が上がりました。

実際WebフロントエンドはXamarinもカバーできていない領域なので、.NETのWebフロントエンド開発の(来ないかもしれないけど)未来を感じます。

Azure開発の感想 by ToruAbe

初めて開発にAzureとVSTSとVSとC#使ってみた感想でした。

また一人VSの魅力に取りつかれてしまったか……

ながおか技術教育支援機構についてのお知らせ by masarunagai

かれこれ15年くらいやってる、小中学生向けにプログラミングを教える非営利団体の紹介から、タイトルの機構を立ち上げるというアナウンスでした。

昨年RoboCupで優勝した高専生はそのプログラミングイベントのOBだそうで、小さいうちから「楽しむ」ことを一番にやってきたといういいお話でした。

初めてを楽しもうよ by @84taka0310

今年度取り組んできた初めてのことの紹介。

各地のイベントにとりあえず飛び込んでみる行動力は素晴らしいです!

はじめてのAWS認定資格取得 by @kasacchiful

会社の都合でAWS認定資格を取ることになった顛末。

キオスク端末試験は地雷で、日本だと秋葉原会場が良いとのこと、承知。

懇親会

久々にお会いするメンツと主にお話ししてました。

  • はてなのはやじょさんのTLが超楽しそう
  • Rで始まるWebフレームワークの功罪
  • #rebuildfmで聞いたところだ!
  • インフラ勉強会が超面白い
  • 新潟価格と京都価格と東京価格

みたいなとりとめのないことを話しながら、楽しいひと時でした。

 

最後に

NDSは今回のトークセッションでもわかるように、非常に多様な話を気軽にできる場です。

ぜひ参加して、「あなたの」体験を話してみてください!

書評 | テスト駆動開発(オーム社)

https://www.ohmsha.co.jp/book/9784274217883/

本書は、残念ながら絶版になってしまった「テスト駆動開発入門(ピアソン・エデュケーション)」を、日本におけるTDDの第一人者である和田卓人氏(@t_wada)が訳しなおしたものです。

しかし、本書はただ訳が新しくなっただけではありません。

  • サンプルコードの強化
    • 言語とテスティングフレームワークが執筆時の最新バージョンに!
    • サンプルコードの変更箇所がわかりやすく明示されるように!
    • TODOリストも箇条書きでわかりやすく!
    • 各章の最後にその省のサンプルコード全掲示!
  • 付録C「訳者解説:テスト駆動開発の現在」
    • 原著が出版されてからこれまでのTDDの経緯を和田さんが書き下ろし

といった特徴があります。この辺りは、和田さんのエントリや、ajito.fmの和田さん登場回などでも詳しく説明されていますので、そちらをどうぞ。

このエントリでは、これらのことを踏まえつつ、私が読んで思ったことを書いていきます。

訳註が最高!

本書を読んでいて、地味に素晴らしいと思ったのは、「訳註」の存在でした。

色々な人が本書のレビューを書いていますが、訳注に触れたものはあまりありませんでした。しかし、この訳註こそ、陰ながら読者を支える非常に重要な役割を果たしていると思います。

例えば、

  • 初出する用語について補足する
  • コードを変更してテストを実行した際の挙動を補足する
    (「ここで実行すると○○と××が失敗するが、□□を実施して実行すると成功するようになる」)
  • 過去のバージョンを対象とした記述について現在はどうであるのか補足する

といったケースがいくつも追加されています。これがあることで、読者は書籍を写経しながら読み進めながらも、迷いなくより現実にあった形を知ることができるようになっています。

おそらく、この訳註は本書の執筆中に著者、レビュアー、編集者とで何度も調整されたものでしょう。関係者の努力にただただ感謝するばかりです。

参考文献も最高!

本書は「テスト駆動開発」という「開発手法」を解説していることもあり、「設計原則」、「パターン」、「テスト手法」、「開発プロセス」など、多くのことを扱っています。そのため、それぞれについてより深く扱っている各種の書籍を、本書の「参考文献」から知ることができます。

また、より素晴らしいことに、前著出版後に改版されているものについても、しっかりと照会されています。本書の参考文献から、さらにたどっていくことで、膨大な先人の知識、ノウハウが得られることでしょう(このあたりは、TDDBCのクロージングセッションなどで、和田さんがよく言っていますね)。

全部書いてある!

前著を読んでからだいぶ経ち、久しぶりに本書を読んだのですが、それでもTDDに関する内容が全部書いてあることに驚かされました。

既にTDDを実践していたり前著を持っている人でも、本書の第Ⅲ部―中でも「第25章 テスト駆動開発のパターン」、「第26章 レッドバーのパターン」、「第27章 テスティングのパターン」、「第28章 グリーンバーのパターン」、「第29章 xUnitのパターン」、「第32章 TDDを身につける」―は読み返してみると、新たな発見や気付きが得られると思います。

 

本書は、昨今では当たり前になりつつある「テストを書く」というスキルを身に付けるのに、最初の一冊として非常に優れていると思います。ぜひ、書籍を手に取り、できれば和田さんも進めているように「写経」しながら読み進め、開発者として使える「武器」を増やしてほしいと思います。

Niigata.NET 3.0を開催しました #ngtnet

Niigata.NET 3.0 テックトーク+ハンズオン & .NET開発お悩み相談室 – connpass
https://ngtnet.connpass.com/event/69634/

先週土曜の11/18に通算4回目となるNiigata.NETの勉強会を開催してきました。

今年は
「アプリを作ろう! Visual C#入門」という本を書きました
のエントリで書いた通り、本を書いていたため、勉強会開催にかけるリソースが足りず、結局昨年の
Niigata.NET 2.1を開催しました #ngtnet
からちょうど1年ぶりの開催になってしまいました。

今回のテーマは、前回に引き続きテックトーク+ハンズオンです。

プログラミング初級講座 C#編 – 反復 by @AILight

最初は恒例の@AILightさんによるC#のセッションです。「変数」、「分岐」に引き続き、今回は「反復」がテーマでした。

「反復」というと、私は次のようなものをイメージしていました。

  • for使うな
  • 基本はwhile
  • 原則foreach

もちろんこのことも触れられていましたが、今回のセッションで心に残ったのは次の3つでした。

反復は「前処理」、「後処理」とパックで行う

反復というとfor、while、foreachといった「ループ」本体に目が行きがちですが、実際に反復処理を行うときは、前処理の後にループ本体、そしてループが終わったら後処理がほぼ必ずあります。したがって、この前後の処理もループの構文の直前、直後にまとめて記載しておくことが重要とのこと。こうすることで、反復処理全体を簡単に移動させることができますし、なによりループ内部で使っているものが近くにあるので、コードが追いやすく、変なこともしにくいという効果があるそうです。

私自身もほぼ何の気なしにそのように書いてはいましたが、改めてそう言われるとなるほどなとうなりました。

ループ+switchで状態を変更させて処理を行える

パズル感があり、あんまり現在は進められる方法ではありませんが、次のようにループとswitchを組み合わせて、状態遷移で処理を行うというテクニックがあるそうです。

var state = 0;
for (; ;) // 無限ループ(かわいい)
{
  switch (state)
  {
    case 0:
      Console.WriteLine("Header");
      state = 1;
      break;
    case 1:
      if (!recordExists)
      {
        state = 2;
        break;
      }
      Console.WriteLine("record");
      break;
    case 2:
      if (recordExists)
      {
        state = 0;
      }
      else
      {
        state = 3;
        break;
      }
      Console.WriteLine("Footer");
      break;
    case 3:
      Console.WriteLine("Summary");
      state = 4;
      break;
  }
  // state = 4
  break; // ループ終了
}

まず使うこともないでしょうが、いざというときの「腕力」として覚えておこうと思いました。

コレクションの要素とindexを同時に使うときはSelect((element, index) => …)を使う

反復処理を行うとき、コレクションの要素とindexを同時に扱いたいケースがたまにあります。

そんな時私はこれまで、次のようにループの外でindex用変数を宣言してやっていました。

var index = 0;
foreach (var element in collection)
{
    Console.WriteLine($"element: {element}, index: {index}");
 index++;
}

しかし、LINQの要素とindexを取るSelectメソッドを使ってからforeachすることで、ループの外での変数宣言が不要になるとのこと。

foreach (var item in collection.Select((element, index) => new { element, index }))
{
    Console.WriteLine($"element: {item.element}, index: {item.index}");
}

構文自体は知っていましたが、これまでそんなに使っていなかったので、今後は積極的に使っていこうと思います。

アプリ開発ハンズオン by @masaru_b_cl

「アプリを作ろう! Visual C#入門」のじゃんけんアプリをネタに、本を見ないでやってみようというハンズオンをしました。資料はこちら。

当日はラウンド制まではたどり着かず、代替全員があいこならもう一回勝負するというところまで出来たら時間切れになりました。

参加者の皆さんの様子を見ていると、普段仕事で作成するアプリと違い、ゲームは「状態」を強く意識しないといけなかったり、画像をリソースを使って扱ったりしないといけないため、案外手こずっているようでした。

そんななか、何とかは私は著者の面目を守り、スライドの説明後に超速でコーディングして何とか一つの実例コードを書き上げることができました。セッションの最後では、そのコードをもとに開設&コードレビュー会を行いました。

その際説明させてもらったのは、次のような内容です。

  • コントロールのプロパティ直接扱っちゃダメ、絶対!
    • いったん変数に受ける
    • これによりメソッド切り出しが容易になる
    • さらに他の型に追い出すことも容易になる
  • 勝敗判定は次のような感じでやると良い
    • まずグー、チョキ、パーを0,1,2でも列挙型でもよいので一段抽象化する
      • PictureBoxコントロールのImageプロパティで判断してはいけない
    • 判定は次の順
      • プレイヤーと敵の手が一緒ならあいこでreturn
      • 愚直に勝ちパターン3つをor判定
        • プレイヤー:グー && 敵:チョキ
          or プレイヤー:チョキ && 敵:パー
          or プレイヤー:パー && 敵:グー
      • 勝ちでなければ負け
  • グー、チョキ、パーの画像は何らかのテーブルで管理
    • グー、チョキ、パーを指定すると取れる
    • 例では配列を使った
      • 列挙型をキーとするDictionaryだと実行時例外が起きなくてよいのではというアドバイスあり

あと、書籍では実装しなかったのですが、じゃんけんを始めた後、敵の手が次々とランダムに変わりルーレット状になるようにも実装しました。これにはTimerコンポーネントを追加し、次の要領でやりました。

  • スタートボタンが押されたらプレイヤーの手を消してからタイマー開始(Enabled = true)
  • タイマーのTickイベントハンドラーで敵の手をランダムに表示
  • プレイヤーが手を選んだらタイマー停止(Enabled = false)
  • あいこならプレイヤーの手を消してからまたタイマー開始
  • 勝ちか負けなら手を選べなくしてスタートボタンを押されるまで待機

やってみるまでは、非常に簡単なアプリなのでどれだけ盛り上がるかちょっと不安だったのですが、実際にはそれぞれの人でやり方やプログラミングスタイルが異なったり、持っている知識レベルに差があるため、手が止まってしまう箇所がいろいろあって都度アドバイスして直してもらったりと、結構充実した時間となりました。また別テーマでハンズオンをやってみるのもよいなと思えた貴重な時間となりました。(ハッカソンもできたらやりたい)

.NET開発相談室

アプリハンズオンが思いのほか楽しく時間を延ばしてやってもらったので、今回は.NET相談室は取りやめにしました。ただ、次やるときは事前に相談したいことを出してもらってからやるようにしようかなと思いました。

懇親会

次のような濃密な議論ができた時間でした(しれっと

次回に向けて

開催ペースが落ちてしまったので、何とか年2回ペースをキープしたいところです。ひとまず5月くらいを目途に、またやっていこうと思います。

あわせて読みたい

第53回 長岡IT開発者勉強会に参加しました #nds53

第53回勉強会(2017/09/30)「○○プラットフォームについて」 – 長岡 IT開発者 勉強会(NDS)
http://nagaoka.techtalk.jp/no53

に参加してきました。今回のテーマは「〇〇プラットフォームについて」(テーマ外のスピーチでも大丈夫)でした。

テックトーク

WebプラットフォームとしてのWordPress by nomeshi

WordPressはこのblogでwordpress.comを使ってるくらいで実際に現場でどのように使われているか知らなかったのですが、やはり相当のシェアがあるんですねぇ。

セッションではプラグインの使い方や次世代の記事エディターとしてGutenbergが紹介されました。Gutenbergはwordpress.comにも来て欲しい。

デモでは、自作プラグインとして猫画像を表示するものを見せていただきました。詳細はこちらをどうぞ。

WordPressのGutenbergに自作のブロックを追加する(実用性は無し) – Qiita
https://qiita.com/shin1kt/items/8e797074b3fff18f8234

IoTプラットフォーム・工作でスーヴィード(低温調理) by @civic

低温調理器を買うと高いので自作した話です。すでにv1はあったのですが、温度を見て単純にスイッチをON/OFFするだけのため、温度の揺らぎがあるので、それを是正するためにあれこれした話でした。

質疑応答の中で「自作電子工作機器は危険が怖い」というのに対し、「電流のヒューズじゃなくて温度ヒューズ(高温になると電流遮断)を使うといい」というアドバイスがあって、NDS最高かよってなりました。知見はあるところにはあるもんですね。

「音楽制作プラットフォームの話」か「GUI app on ブラウザプラットフォームの話どっちか」改め「音楽理論」by しんぺい a.k.a. 猫型蓄音機

NDSはプログラミングなどのテック菜花氏以外に天気とか地形などの教養を学べるセッションもOKなのが特徴ですが、最近なかったのでブッコんできたとのこと。

とある周波数の音を区別しやすく名前を付けている(例:44HzがA(ラ))とか、音階(スケール)、調性の話から始まり、和音(和声)の種類、仕組みや不安な音、安心な音など、わかりやすく説明してくださいました。

このセッションのパワーワードは「音楽はデザインパターン」でした。プログラマー各位は向いていると思うということなので、各位やっていきましょう!

なお、猫型さんが作曲した曲や歌は、SoundCloudで聞けるそうです。

(おお、wordpress.com、SoundCloudも埋め込めるのか)

Terraformで構築するマルチクラウドプラットフォームインフラストラクチャ by hayajo

越後の誇るインフラスペシャリストであるはやじょさんのセッション。

「Infrastructure as Code」を体現するHashiCorpのツール「Terraform」の紹介でした。名前は聞いたことがあったのですが、どんなものかは知らなかったのですよね。

基本的なコンフィグファイルの書き方に合わせて、様々なサービス、製品(AWSとかAzureとかをはじめとしたクラウドサービスや、ChefやDocker、GitHubなど)に対するプロバイダーを使ってインフラを表現することで、実行計画を見たり、構築したり、マイグレーションしたり、まとめて破棄したりと、確かに便利そうでした。

とはいえ、自動化ツールはなんでもそうですが、再実行すればするほどリターンが大きいものなので、簡単なものはWebコンソールからポチポチの方が速かったりすることもあるそう。この辺はバランスですね。

C#で始める、Windows プラットフォーム 開発効率向上化プロジェクト by AILight

これまで仕事で取り組んだ「共通化」の話を惜しげもなくしてくださいました。

共通化というとよくあるのはライブラリレベルを思い浮かべますが、そうではなく「販売管理システム」のデータモデルから共通化し、10年かけて練り上げ、負債ではなく資産として成長させてきたという話でした。

このあたり、正直いわゆる「直ユーザー」相手に仕事をしていないと、案件ごとに使う技術がそろえられないのでまず無理なのですが、それでも非常に「正しい」と思える話でした。

あと、驚いたのは、サードパーティのコンポーネントを排するため、帳票コンポーネントも自作しているということ。入力コントロールやグリッドコントロールくらいなら私も作りましたが、さすがに帳票までやろうとは思えませんでした。完全に頭おかしい(ほめ言葉)。

イベントログとの付き合い方 by gonchan93

最後はWindowsのイベントログの紹介。

WindowsのイベントログはテキストベースではなくバイナリでがっつりOSの仕組み使って書き出すので、少し扱いにくい部分もありますが、ログファイルの置き場所とか考えなくてよいのは強いです。テキストベースでエクスポートしようと思えば、JScript等を使ったWSHやPowerShell、C#などのプログラムで結構お手軽にできますし。

ただ、標準のビューアーだけはもうちょっと軽くならんかなぁ……

LT

私含めいろいろと。私はというと、

https://takanosho.wordpress.com/2017/08/09/publishing-making-app-for-vcsharp/

で紹介したように本を書いたので、その紹介を行いました。レビュアーを募ったらほとんど手が上がらなくて泣きそうでしたが、最終的に2名の方に引き取っていただけました。改めて御礼申し上げます。上がってくるレビューを心待ちにしております。

まとめ

毎度のことながら、NDSはこの「ごった煮感」がたまりません。最近通常セッションのスピーカーをやってないので、またネタ仕込んで登壇したいところです。

そして、次は12/2(土)に開催予定とのこと。その日の懇親会は毎年恒例NDB(新潟・長岡 IT開発者 忘年会)も開催ということで、しっかりYAuth通して参加したいと思います。

みなさんも楽しい勉強会ですので、ぜひおいでください。

「アプリを作ろう! Visual C#入門」という本を書きました

アプリを作ろう!  Visual C#入門 Visual C# 2017対応
https://www.amazon.co.jp/dp/4822253554/

サポートページ
http://ec.nikkeibp.co.jp/item/books/P53550.html

本書は無償で入手できるVisual Studio Community 2017でVisual C# 2017を使用して、プログラミングの楽しさが体験できる入門書です。
開発経験がなくても、全9章を順番に学習することで、プログラミングや開発環境の基礎知識、画面のデザイン、コードの書き方、エラーが起きたときの対処方法などを理解できます。
章ごとに短いトピックで区切られているので、自分のペースで学べます。PCスクールなどの教材としても適しています。

という本を執筆し、この度出版する運びとなりました。

企画自体は1年半近く前からありまして、最初はVS2015向けに書く予定でした。しかし、VS2017のBetaが出てき手タイミング変更を余儀なくされ、年末から再スタートしました。

本書の特徴は何といってもまさに「入門」のための書籍であるということです。

例えば、敢えてC#の言語機能を詳しく説明することはせず、サンプルアプリで使う機能に絞って都度説明するようにしています。初学者のには一度に覚えることはなるべく少なくしてあげないと、混乱してしまうためです。

また、本書の構成で一番気を使ったのが、「どの章でやめても、動かして遊べる」ことでした。初心者向けの教育で何より大事なのは、小さなステップで成功体験を積ませることだと私は思っています。したがって、「今やっている章と次の章をやらないと、そもそもプログラムが動かない」というのは、絶対に避けなければいけません。

そういったことを念頭に置き練った構成が、「各章ごとにアプリがパワーアップしていく」というものです。これにより、初心者でも飽きずに、少しずつ動かして動作を確認しながら進めることもできますし、アプリは少しずつ作って成長させていくものだということも教えられるのではないかと考えています。

すでに述べた通り、本書はC#の機能を網羅することを目的とはしていません。言い換えれば、本書はあくまで「1冊目」としての位置付けだということです。プログラミングは膨大な知識とスキルが必要であり、これは1冊の本を読んだだけでは身につくことはまずないでしょう。むしろ1冊で収めようとすることで情報過多になり、かえってわかりにくくなることだってあると思います。そこで、本書でなんとなく「プログラミングというもの」やIDEの使い方を身に着け、次に網羅系のテキストでより深堀して学ぶというのがお勧めです。

身近にWindowsを使っていてプログラミングを始めたいという人がいるようであれば、ぜひ本書を手に取ってみてください。