Submit Search
Upload
Keep yourself up to date
•
Download as PPTX, PDF
•
19 likes
•
23,737 views
信之 岩永
Follow
第1回 業開中心会議 基調講演資料 https://itmedia.smartseminar.jp/public/seminar/view/465
Read less
Read more
Report
Share
Report
Share
1 of 59
Download now
Recommended
An other world awaits you
An other world awaits you
信之 岩永
C# 5.0/VB 11で導入された async/await と、 その背後にある実行インフラ await 演算子の展開結果 await 演算子では解決できなその他の非同期 などについての話。
Ajax 応用
Ajax 応用
Katsuyuki Seino
PHP language update 201211
PHP language update 201211
Moriyoshi Koizumi
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
Takefumi MIYOSHI
Unit test in android
Unit test in android
Tatsuya Maki
Unit test in Android using Robolectric.
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
Hiroshi Nakamura
JavaOne Tokyo 2012での発表スライド
Boost9 session
Boost9 session
freedom404
Java puzzlers 2013 at JavaFesta Japan
Java puzzlers 2013 at JavaFesta Japan
Yoshio Terada
Recommended
An other world awaits you
An other world awaits you
信之 岩永
C# 5.0/VB 11で導入された async/await と、 その背後にある実行インフラ await 演算子の展開結果 await 演算子では解決できなその他の非同期 などについての話。
Ajax 応用
Ajax 応用
Katsuyuki Seino
PHP language update 201211
PHP language update 201211
Moriyoshi Koizumi
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
Takefumi MIYOSHI
Unit test in android
Unit test in android
Tatsuya Maki
Unit test in Android using Robolectric.
Java SE 7 InvokeDynamic in JRuby
Java SE 7 InvokeDynamic in JRuby
Hiroshi Nakamura
JavaOne Tokyo 2012での発表スライド
Boost9 session
Boost9 session
freedom404
Java puzzlers 2013 at JavaFesta Japan
Java puzzlers 2013 at JavaFesta Japan
Yoshio Terada
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
Suguru Oho
BZip2を途中から解凍できるようにした。 それで、並列に解凍とか データの条件抽出とかを色々工夫してみた KLab勉強会#6での発表内容 http://dsas.blog.klab.org/archives/cat_50030786.html
C#6.0の新機能紹介
C#6.0の新機能紹介
Kazunori Hamamoto
C#6.0の新機能初回 Let's play C# !!
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
歌舞伎座.tech#8「C++初心者会」で発表した資料です。
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
スライド「Go一緒にいかが?」の資料2
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
JPCERT Coordination Center
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Yoshio Terada
This is the contents of the Java Puzzlers session at JJUG CCC 2016.
Junit4
Junit4
ichikaz3
Javaセキュアコーディングセミナー東京第2回演習
Javaセキュアコーディングセミナー東京第2回演習
JPCERT Coordination Center
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Clojre Programming 第2章
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
7/12 プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 ユビキタス協創広場 U-cala #pronamaclrhsapporocpp で発表したスライド http://pronama.azurewebsites.net/2014/06/12/pronama-clrh-sapporocpp-at-u-cala/
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
Yuki Higuchi
2012/03/14 に株式会社 PRO&BSC にて行った Android 研修の資料 #3 です。
werkkzeug3のGUI実装
werkkzeug3のGUI実装
Hisanari Otsu
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
David Buck
Java 言語レベルでのロックの振る舞いや使い方を説明する本や記事などの資料はいろいろありますが、JVM 側の内部実装についての説明は殆どありません。 このセッションで、HotSpot のロックの実装を覗いてみます。 HotSpot 側のロックの各種(thin、inflated、biased など)の実装とパフォーマンスの特徴を勉強しましょう。そして、プロファイリングツールを使って自分のシステムのロック利用を監視する例と JVM の設定も軽くカバーします。
Flow.js
Flow.js
uupaa
非同期プログラミングを驚きのシンプルさに ver 1.0.1 and more. http://uupaa.hatenablog.com/entry/2013/03/12/185555 http://uupaa.hatenablog.com/entry/2013/03/14/131556
OpenFlowコントローラ開発支援ツールの提案
OpenFlowコントローラ開発支援ツールの提案
Yutaka Yasuda
コントローラ・プログラミングにおける問題の一つとして、プログラマは自分が書いたコードが実際にどのような転送先制御として反映されたのか直接的に確認する方法がないことがある。 それに対して “このコードは、どのフローに対して、どう作用したのか?” あるいは “このフローは、どのコードによって生成されたのか?” を把握するためのツールを提案する。 第16回IOT研究発表会-情報処理学会で発表したスライドを加筆・修正したもの。
Effective java 勉強会
Effective java 勉強会
Takinami Kei
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
Toshio Ehara
Java初心者勉強会(2015/08/07) ご参加ありがとうございました。
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Hokuriku.NET C# 勉強会「C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~」 https://atnd.org/events/57085 で使用した資料に加筆 1. LINQ to Objects 復習 2. IQueryable<t> 3. 式木 (Expression Tree) 4. 式木メタ プログラミング 5. LINQ プロバイダー
Java電卓勉強会資料
Java電卓勉強会資料
Toshio Ehara
GC in C++0x
GC in C++0x
yak1ex
2010/8/8 CSNagoya GC本読書会#5にて発表
YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
信之 岩永
++C++; (https://ufcpp.net/)の中の人が YouTube チャンネル(https://www.youtube.com/channel/UCY-z_9mau6X-Vr4gk2aWtMQ)でライブ配信をやってる話。
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
Visual Studio Users Community Japan 勉強会 #6 https://vsuc.connpass.com/event/192835/ にて登壇。 C# 9.0/.NET 5.0 世代の大まかな流れと、C# 9.0の主要な機能を紹介します。
More Related Content
What's hot
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
Suguru Oho
BZip2を途中から解凍できるようにした。 それで、並列に解凍とか データの条件抽出とかを色々工夫してみた KLab勉強会#6での発表内容 http://dsas.blog.klab.org/archives/cat_50030786.html
C#6.0の新機能紹介
C#6.0の新機能紹介
Kazunori Hamamoto
C#6.0の新機能初回 Let's play C# !!
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Shintarou Okada
歌舞伎座.tech#8「C++初心者会」で発表した資料です。
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
スライド「Go一緒にいかが?」の資料2
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
JPCERT Coordination Center
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Yoshio Terada
This is the contents of the Java Puzzlers session at JJUG CCC 2016.
Junit4
Junit4
ichikaz3
Javaセキュアコーディングセミナー東京第2回演習
Javaセキュアコーディングセミナー東京第2回演習
JPCERT Coordination Center
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
Clojre Programming 第2章
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Kohsuke Yuasa
7/12 プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 ユビキタス協創広場 U-cala #pronamaclrhsapporocpp で発表したスライド http://pronama.azurewebsites.net/2014/06/12/pronama-clrh-sapporocpp-at-u-cala/
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
Yuki Higuchi
2012/03/14 に株式会社 PRO&BSC にて行った Android 研修の資料 #3 です。
werkkzeug3のGUI実装
werkkzeug3のGUI実装
Hisanari Otsu
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
David Buck
Java 言語レベルでのロックの振る舞いや使い方を説明する本や記事などの資料はいろいろありますが、JVM 側の内部実装についての説明は殆どありません。 このセッションで、HotSpot のロックの実装を覗いてみます。 HotSpot 側のロックの各種(thin、inflated、biased など)の実装とパフォーマンスの特徴を勉強しましょう。そして、プロファイリングツールを使って自分のシステムのロック利用を監視する例と JVM の設定も軽くカバーします。
Flow.js
Flow.js
uupaa
非同期プログラミングを驚きのシンプルさに ver 1.0.1 and more. http://uupaa.hatenablog.com/entry/2013/03/12/185555 http://uupaa.hatenablog.com/entry/2013/03/14/131556
OpenFlowコントローラ開発支援ツールの提案
OpenFlowコントローラ開発支援ツールの提案
Yutaka Yasuda
コントローラ・プログラミングにおける問題の一つとして、プログラマは自分が書いたコードが実際にどのような転送先制御として反映されたのか直接的に確認する方法がないことがある。 それに対して “このコードは、どのフローに対して、どう作用したのか?” あるいは “このフローは、どのコードによって生成されたのか?” を把握するためのツールを提案する。 第16回IOT研究発表会-情報処理学会で発表したスライドを加筆・修正したもの。
Effective java 勉強会
Effective java 勉強会
Takinami Kei
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
Toshio Ehara
Java初心者勉強会(2015/08/07) ご参加ありがとうございました。
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
Hokuriku.NET C# 勉強会「C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~」 https://atnd.org/events/57085 で使用した資料に加筆 1. LINQ to Objects 復習 2. IQueryable<t> 3. 式木 (Expression Tree) 4. 式木メタ プログラミング 5. LINQ プロバイダー
Java電卓勉強会資料
Java電卓勉強会資料
Toshio Ehara
GC in C++0x
GC in C++0x
yak1ex
2010/8/8 CSNagoya GC本読書会#5にて発表
What's hot
(20)
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
C#6.0の新機能紹介
C#6.0の新機能紹介
unique_ptrにポインタ以外のものを持たせるとき
unique_ptrにポインタ以外のものを持たせるとき
Goの文法の実例と解説
Goの文法の実例と解説
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Junit4
Junit4
Javaセキュアコーディングセミナー東京第2回演習
Javaセキュアコーディングセミナー東京第2回演習
Clojure programming-chapter-2
Clojure programming-chapter-2
イマドキC++erのモテカワリソース管理術
イマドキC++erのモテカワリソース管理術
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
werkkzeug3のGUI実装
werkkzeug3のGUI実装
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
Flow.js
Flow.js
OpenFlowコントローラ開発支援ツールの提案
OpenFlowコントローラ開発支援ツールの提案
Effective java 勉強会
Effective java 勉強会
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Java電卓勉強会資料
Java電卓勉強会資料
GC in C++0x
GC in C++0x
More from 信之 岩永
YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
信之 岩永
++C++; (https://ufcpp.net/)の中の人が YouTube チャンネル(https://www.youtube.com/channel/UCY-z_9mau6X-Vr4gk2aWtMQ)でライブ配信をやってる話。
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
信之 岩永
Visual Studio Users Community Japan 勉強会 #6 https://vsuc.connpass.com/event/192835/ にて登壇。 C# 9.0/.NET 5.0 世代の大まかな流れと、C# 9.0の主要な機能を紹介します。
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
信之 岩永
.NETラボ 勉強会 2020年6月 https://dotnetlab.connpass.com/event/177504/presentation/ にて登壇。 概要: 最近、暇を見てはC#コンパイラー(Roslyn)の修正作業をしています。C#は現在、Unicodeサロゲートペアな文字を識別子として受け付けない問題があって、その修正作業をしています。 本日は、自分が修正作業をしている経緯や、C#以外のプログラミング言語を含めて、識別子として使える文字に関する話、ソースコードを眺めていて初めて気付いたくらい自分も知らなかったレアなC#構文について紹介しようかと思います。
Unicode文字列処理
Unicode文字列処理
信之 岩永
https://edge.connpass.com/event/161663/ にて登壇。 今現在、Unicodeという文字規格には13万個以上の文字が収録されています。それぞれの文字には文字のカテゴリー、文字と文字の連結方法、左右どちらから読むかなど、様々な付帯情報も定められています。英語でドキュメントがあり、例えばアラビア語を読めなくてもアラビア文字のレンダリング処理を書ける程度には詳細な仕様が書かれています。 本セッションでは、このUnicodeの仕様の概要と、それをプログラム(主にUnity上でのC#を想定)的に処理する際の注意点などについて説明します。
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
信之 岩永
.NET Conf Tokyo 2019 にて登壇。 https://vsuc.connpass.com/event/146588/ C# 8.0 の新機能のうち、非同期ストリームと呼ばれるもの(await foreach, await と yield の混在)について説明します。 また、非同期ストリームの内部的な仕組みの説明と合わせて、ValueTask や IValueTaskSource など、Task がらみのパフォーマンス改善の歴史を振り返ります。
C# 8.0 null許容参照型
C# 8.0 null許容参照型
信之 岩永
Visual Studio Users Community Japan #1 にて登壇。 https://vsuc.connpass.com/event/143114/ C# 8.0の目玉機能の1つ、null許容参照型について解説。
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
信之 岩永
https://connpass.com/event/122145/ にて登壇。 先日リリースされたVisual Studio 2019には、C# 8.0のプレビュー版が入っています。本日は、プレビューリリースの背景や、プレビュー機能の有効化方法、今現在でも安定して使えそうな機能の紹介などを行います。
async/await のしくみ
async/await のしくみ
信之 岩永
https://connpass.com/event/95696/ 2018/9/15 「Unity 非同期完全に理解した勉強会」にて登壇
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
https://www.microsoft.com/ja-jp/events/decode/2018/ de:code 2018 セッションID: AD19 日本の第一人者が語る! C# の現状と今後への展望 「.NET Core 2.x 時代の C#」
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
わんくま同盟 東京勉強会 #110 にて登壇 http://www.wankuma.com/seminar/20180324tokyo110/
C#言語機能の作り方
C#言語機能の作り方
信之 岩永
https://dotnetfringe-japan.connpass.com/event/35659/ .NET Fringe Japan 2016 にて登壇
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
http://peatix.com/event/311392 にて登壇。 Unity 2017 で、C# 6.0が使えるようになりました。また、Experimental とはいえ、 .NET Framework 4.6 相当の機能が使えるようになりました。 本セッションでは、これまで Unity の制限から C# 3.0(一部4.0)/.NET 3.5しか使ったことのない方々向けに、C# 6.0/.NET 4.6までの差分の中からいくつかお勧めの機能を紹介します。 また、これまでUnity 5.5/.NET 3.5向けに作っていたゲームを、Unity 2017/.NET 4.6に移行した作業について話します。
それっぽく、適当に
それっぽく、適当に
信之 岩永
やっぱこう、具体例とかそれで何ができるとかは目に見えてないと
Modern .NET
Modern .NET
信之 岩永
2015/8/8 C#UG&codeseek勉強会 「Visual Studio 2015リリース記念」 にて発表
.NET Compiler Platform
.NET Compiler Platform
信之 岩永
2015/6/25 C#UG&codeseek 勉強会「2015世代のC#」にて
Deep Dive C# 6.0
Deep Dive C# 6.0
信之 岩永
2015/4/11 dotNetConf 2015 Japan with JXUG https://atnd.org/events/63844 にて登壇。
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
信之 岩永
UnityのためのC#勉強会 2015/3/21 にて発表
Code Contracts in .NET 4
Code Contracts in .NET 4
信之 岩永
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
2014/11/29 第7回 業開中心会議 にて https://itmedia.smartseminar.jp/public/seminar/view/663
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永
2014/11/29 第7回 業開中心会議 にて https://itmedia.smartseminar.jp/public/seminar/view/663
More from 信之 岩永
(20)
YouTube ライブ配信するようになった話
YouTube ライブ配信するようになった話
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
C# コンパイラーの書き換え作業の話
C# コンパイラーの書き換え作業の話
Unicode文字列処理
Unicode文字列処理
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
C# 8.0 null許容参照型
C# 8.0 null許容参照型
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
async/await のしくみ
async/await のしくみ
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
C#言語機能の作り方
C#言語機能の作り方
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
それっぽく、適当に
それっぽく、適当に
Modern .NET
Modern .NET
.NET Compiler Platform
.NET Compiler Platform
Deep Dive C# 6.0
Deep Dive C# 6.0
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
Code Contracts in .NET 4
Code Contracts in .NET 4
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
Keep yourself up to date
1.
Keep yourself up
to date あなたのスキルを最新の状態に保ちましょう!
2.
開催概要※より:
10年前の環境でも動作する伝統的な記述方法で も、最近の実行環境が要求される近代的な記述 方法でも、同じような処理内容を記述できる !? ※ https://itmedia.smartseminar.jp/public/seminar/view/465
3.
できる できるって何だっけ?
理論上はできる 採算度外視ならできる 競争力を持ってできる 改めて聞きますが、 できる?
4.
例えば、非同期処理
async/await (C# 5.0)導入前後 参考: [雑記] 非同期制御フロー※ 導入前(73) 導入後(19) if (this.Check1.IsChecked ?? false) if (this.Check1.IsChecked ?? false) { { Dialog.BeginShowDialog("確認 1", "1つ目の確認作業", result => var result = await Dialog.ShowDialogAsync("確認 1", "1つ目の確認作業"); { if (!result) return false; if (!result) } { onComplete(false); if (this.Check2.IsChecked ?? false) return; { } var result = await Dialog.ShowDialogAsync("確認 2", "2つ目の確認作業"); if (!result) return false; if (this.Check2.IsChecked ?? false) } { Dialog.BeginShowDialog("確認 2", "2つ目の確認作業", result2 => if (this.Check3.IsChecked ?? false) { { if (!result2) var result = await Dialog.ShowDialogAsync("確認 3", "3つ目の確認作業"); { if (!result) return false; onComplete(false); } return; } return true; if (this.Check3.IsChecked ?? false) { Dialog.BeginShowDialog("確認 3", "3つ目の確認作業", result3 => { onComplete(result3); }); } else [参考] 同期版(19) onComplete(true); }); } else if (this.Check3.IsChecked ?? false) { Dialog.BeginShowDialog("確認 3", "3つ目の確認作業", result3 => if (this.Check1.IsChecked ?? false) { { onComplete(result3); var result = Dialog.ShowDialog("確認 1", "1つ目の確認作業"); }); if (!result) return false; } } else onComplete(true); if (this.Check2.IsChecked ?? false) }); { } var result = Dialog.ShowDialog("確認 2", "2つ目の確認作業"); else if (this.Check2.IsChecked ?? false) if (!result) return false; { } Dialog.BeginShowDialog("確認 2", "2つ目の確認作業", result => { if (this.Check3.IsChecked ?? false) if (!result) { { var result = Dialog.ShowDialog("確認 3", "3つ目の確認作業"); onComplete(false); if (!result) return false; ()内は行数 ※ http://ufcpp.net/study/csharp/misc_asyncflow.html return; } } return true; if (this.Check3.IsChecked ?? false) {
5.
例えば、データ処理
LINQ (C# 3.0)導入前後 参考: Road to LINQ※ 導入前(300行以上) 導入後(10数行) private static void コンソール_奇数の二乗_1行1個() private static void 表示(Action<IEnumerable<int>> 表示方法) { { while (true) 表示(表示方法, source => source.Where(x => (x % 2) == 1).Select(x => x * x)); { 表示(表示方法, source => source.Where(x => (x % 2) == 0).Select(x => Math.Abs(x))); int x; 表示(表示方法, source => source.Where(x => x <= 3).Select(x => -x)); if (!int.TryParse(Console.ReadLine(), out x)) break; } if ((x % 2) == 1) { private static void 表示(Action<IEnumerable<int>> 表示方法, Func<IEnumerable<int>, IEnumerable<int>> 加工方法) Console.WriteLine(x * x); { } 表示方法(加工方法(new ConsoleInput())); } 表示方法(加工方法(array)); } 表示方法(加工方法(list)); } private static void 配列_奇数の二乗_1行1個() { private static void 表示1行1個(IEnumerable<int> list) for (int i = 0; i < array.Length; i++) { { foreach (var x in list) var x = array[i]; { if ((x % 2) == 1) Console.WriteLine(x); { } Console.WriteLine(x * x); } } } private static void 表示スペース区切り(IEnumerable<int> list) } { var line = string.Join(" ", list); private static void 連結リスト_奇数の二乗_1行1個() Console.Write(line); { } for (ListNode node = list; node != null; node = node.Next) { private static void 表示コンマ区切り(IEnumerable<int> list) var x = node.Value; { if ((x % 2) == 1) var line = string.Join(",", list); { Console.Write(line); Console.WriteLine(x * x); } } } } private static void コンソール_偶数の絶対値_1行1個() { while (true) { int x; if (!int.TryParse(Console.ReadLine(), out x)) break; if ((x % 2) == 0) { Console.WriteLine(Math.Abs(x)); } } } ()内は行数 private static void 配列_偶数の絶対値_1行1個() { ※ http://www.atmarkit.co.jp/fdotnet/chushin/roadtolinq_01/roadtolinq_01_01.html for (int i = 0; i < array.Length; i++) {
6.
客観評価指標 行数だけ減ればいいってものではないものの コード
メトリックスを計算してみると… LINQ導入前のコード 半減 LINQ導入後のコード この手の指標を無視しているとバグやテスト負担が増加
7.
オーダーの差 LINQの例の本質的な差
掛け算と足し算 導入前 導入後 組み合わせを 1-i-a 2-i-a 3-i-a 1 i a 選べる 1-i-b 2-i-b 3-i-b モジュール化 2 ii b 1-i-c 2-i-c 3-i-c 3 iii c 1-ii-a 2-ii-a 3-ii-a 1-ii-b 2-ii-b 3-ii-b 3軸3種ずつだからこの程度の差ですむ 1-ii-c 2-ii-c 3-ii-c 5軸10種とかだと… 1-iii-a 2-iii-a 3-iii-a 1-iii-b 2-iii-b 3-iii-b 1-iii-c 2-iii-c 3-iii-c
8.
改めて、できる? できるけど
知識のある人が 勉強は必要 かなりの手間をかけて 競争力あるの?
9.
世の中は常に進歩している 来年、今と同じことしてたら評価が下がる
要求の側のハードルは上がる一方 ITで効率化 = 仕事をなくす仕事 無駄な仕事はやめて、クリエイティブな仕事を 「自分たちだけは別」とか思う? 自分の仕事すら、明日には無駄な仕事かも
10.
ハードルは何か 世の中の進歩にはついていかなければいけない
じゃあ、何がハードルになってついていけないか? 覚えても使えないし… 今日のテーマ 既存資産が… どう乗り越える? 安定性に不安が…
11.
覚えても使えないし…
12.
調査報告書 部(室)長 殿
申請日 2013年 1月26日 確認実践日 年 月 日 所属部(室) 基盤技術二部 氏名 岩永信之 印 費用対効果への課題 下記の通り、調査結果を報告いたします お客様の環境がXPで… 更新にかかる費用を考 えると.NET 2.0しか使 えない… (受付・確認欄)
13.
思うところはあるけども… 新しいものをきっちり提案して、きっちり業務効
率化して、お客様のコスト削減するのがプロ! といっても、具体的な数字ベースのメリットが見 えてないとなかなか難しい 「工数が○日減ります」とか 「何年で○円浮きます」とか そんなことない やっぱ使えないし覚えるの無駄…となるのか!?
14.
使えなくても覚えなきゃ なくてもやってた
機能としてなくても、パターンとしてやってた 何で覚えるの? ×「新しいものが出たから覚えなきゃ」 ○「より高度な要求に応えるために覚えなきゃ」
15.
なくてもやってた(先ほどの例) async/await
_state = 1; if (!task1.IsCompleted) C# 5.0なら 展開 { task1.ContinueWith(a); var x = await task1; return; } case 1: var x = task1.Result; LINQ IEnumerable<int> Select( C# 3.0なら IEnumerable<int> source, data.Select(x => x.Name); 自前実装 { Func<int, int> selector) foreach (var x in source) yield return selector(x); } 昔はパターンとして知られていたものが標準に 中身まで知っていれば実装簡単
16.
なくてもやってた(大昔から) C言語でもオブジェクト指向
データ構造中心の設計 仮想メソッド テーブルを自分で書いたり C++でも自動メモリ管理 参照カウント C++テンプレートも元はマクロでやってた Set/Getアクセサー地獄 Add/Removeオブザーバー・パターン地獄。
17.
つまり、何も新しくない かつては
Effective デザイン 入門本 開発本 パターン本 攻撃力 : 227 攻撃力 : 327 攻撃力 : 411 価格 : 1,360 価格 : 3,780 価格 : 4,410 簡単! 基本だけだと まだだ! つらくなってきた! まだ何か足りない! 今は 入門本 かつて • パターンとしてやっていたもの 攻撃力 : 344 • 高度だといわれていたもの 価格 : 2,814 が基礎文法レベルに
18.
なくてもやれる C# 3.0/.NET
3.5しか使えなくて困ったけども… Taskクラスもどき作った データ バインディングもどき作った 車輪の再発明、务化コピーでしかないけど ないよりマシ ない場合の問題を知っている 元々知ってるものは楽に作れる その後、チーム全体の作業効率が向上
19.
改めて、覚えても使えない? どのみち知識としては必要
必要なものが基礎文法・標準ライブラリになっただけ 新機能は学習の足掛かり 古い書き方にはどういう問題があったのか どういうパターンで解決していたのか 必要 昔 Effective デザイン 入門本 開発本 パターン本 今 入門本 必要なものは最初から詰まってる
20.
既存資産が…
21.
調査報告書 部(室)長 殿
申請日 2013年 1月26日 確認実践日 年 月 日 所属部(室) 基盤技術二部 氏名 岩永信之 印 既存資産への依存性 下記の通り、調査結果を報告いたします 既存資産は.NET 2.0で 作られており… いきなり全部を新環境 にできるわけない (受付・確認欄)
22.
新機能導入 システム全体 3.0
3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0 ここを修正したかったら 3.0 3.0 5.0 3.0 3.0 3.0 3.0 3.0 ここだけ新機能導入 すればいいじゃない! 3.0 3.0 3.0 3.0 3.0 3.0 3.0
23.
何でできないの?
この辺 ひっぱったら 全部動くの!
24.
スパゲッティ コード 昔は「ダメなコード」くらいに思ってたけど
経験積めば積むほど味わい深い言葉 一か所引っ張ったら全体が動くの 末代までたたられる そんなもん、修正できるわけない 呪い × ○ 解呪が必要 (疎結合化) • 大きな粒度 • 多い接点 資産には負債もあります
25.
負債 たとえ話「緩い地盤」
上物ばかりのきれいさにとらわれていると…
26.
負債 たとえ話「未来を前借した発展」
つけを払うのはいつか 成長期 高齢社会 わかってても目先の発展 破たんしてからあわてる http://www.ipss.go.jp/ より
27.
たたられないために たたられないための新技術
依存を減らす プログラミング言語・フレームワークはそういう方向で 進化してる 新技術導入 部分修正しやすい 疎結合に作りやすい 疎結合 (依存が少ない)
28.
依存を減らす機能 オブジェクト指向のカプセル化
○ × 外との接点は少なく 不要な依存の危険が 関数型の参照透過性 同じ入力なら 関数 同じ出力に 外に何も依存していない
29.
C#の歴史※ 依存切りの歴史
非同期ゆえの スパゲッティ化回避 データの入力/加工/出力 の分離 C# 5.0 共通型システム C# 4.0 • Async バージョン管理 C# 3.0 • Dynamic • WinRT 言語への依存 • Interop • LINQ バージョン依存 C# 2.0 一枚岩システム • Generics 外部システムとの連携 C# 1.0 • partial • Managed 型とアルゴリズムの分離 自動生成コードの分離 ※ VB 7~11の歴史でもある
30.
フレームワークの進化も サービス指向
細かい粒度のサービスの連携でシステムを作る XAML、データ バインディング、MVVM ViewとModelの分離 自動生成コードの分離 UXデザイナーと開発者の協業
31.
余談 スマホ向けゲームを作ったときの話 「
昔作ったブラウザー ゲームも 最初からサービス指向で作っていれば 今頃スマホ版出てたのにね 」 企画的には同系統作品を 1から作り直し UIは陳腐化激しい 差し替え可能に作らないと 時代に乗り遅れる 資産が資産になってない
32.
改めて、活かせる既存資産 スパゲッティ コードには末代まで呪われる
修正できない 新機能を取り入れる余裕もなくなる 多くの新機能は解呪のための道具 新技術導入 部分修正しやすい 疎結合に作りやすい 疎結合
33.
安定性に不安が…
34.
調査報告書 部(室)長 殿
申請日 2013年 1月26日 確認実践日 年 月 日 所属部(室) 基盤技術二部 氏名 岩永信之 印 品質担保への課題 下記の通り、調査結果を報告いたします ノウハウがたまるまで には時間がかかる たまる前に新しい何か に置き換わるし… (受付・確認欄)
35.
変わる部分変わらない部分 確かに、変化が激しくて安定しない部分はある
ただし… 変わっている部分はどこか 何がどう変わっているのか
36.
変わりやすい部分 同じ.NETでも
不安定 安定 すぐに陳腐化する クライアント Web Web クライアント 基礎 UI UI UI UI データ 通信 データ ワークフロー 認証 通信 基礎 安定 割とどこでも 末永く使える
37.
疎結合 つまるところ、「疎結合」の話に戻る
「サービス指向で作っていれば 今頃…」 ここだけ修正 安定なところだけを使う Portabl Class Library 大きなリリースは時代にそぐわない .NETですらCodePlex公開、NuGet公開
38.
ちなみに、言語レベルは超安定 C#ですら、あれでもかなり保守的
ライブラリの進歩と比べたらどうってことない 「Andersの機嫌がよくないとゴー サイン出ない」 なんて都市伝説も
39.
何が変わってるの? 変わってるのは「時代」 デスクトップ
ブラウザー スマートデバイス • WPF • Silverlight • WinRT 時代に合わせた変化 新技術追わない = 時代の変化追わない 実際の中身はそんなに変わっていない
40.
どう変わってるの? シフトなんてしない
古き良き シフト 新世界 世界 ほぼ連続な進歩 ほぼ連続な進歩 ときどき脱皮
41.
積み重ね 結局、何事も積み重ね こちら側の積み
重ねがない人は こちら側に 行くのも大変 いつ取り組み始めても、勉強すべきことは変わらない
42.
改めて、安定するために 安定な部分を切り分ける
サービス指向 ここだけ修正 Portabl Class Library 言語レベルは安定 不安定なのは時代の方 待ってても安定しない 急な変化はない 結局は積み重ねが必要
43.
どうやってハードル乗り越 える?
44.
ハードル?わかってるよそんなの。 乗り越えろ?
という意見もあるだろうし じゃあどうしようってのが本当のテーマ
45.
やれるのはなぜ こんな絵を出しましたが
新機能導入 ループ 疎結合 ループができているということは…
46.
余裕のある日常/ない日常 日常ループ
日常タスクに必要な量 余裕のある人 MP 余裕のない人 MP 余剰で遊ん学んでる 足りない分を何かで 埋め合わせてる
47.
余裕のある日常/ない日常 日常ループ 余裕のある人
MP 余裕のない人 MP 要求水準も 日々上がる 取り残されていませんか
48.
フィードバック ループ 余裕は余裕を呼ぶ
デスマはデスマを呼ぶ MP 一度でいいから こちら側に来ないといけない MP これがたぶん、一番のテーマ
49.
チーム チームこそ力の源
1人だけに余裕があっても回らない 個人技能よりもプロジェクト進行技能 の方がプロジェクト成否に直結 自分を変えるには環境を変えろ 個人レベルではデスマ側から余裕ある側への脱出は難し い チームとしての取り組み必要
50.
チームに余裕があるから プロジェクトの継続的な成功の中にいるから テスト整備
ペアプロ リファクタリング ライブラリ整備 レビュー 修正しやすい みんなの余裕 みんなの成長 コードの責任を個人に帰属させない 負債解消にどのくらいの時間を使うか、戦略を持つ
51.
ツールに頼る 属人的に進めるのはかなり大変 ツール管理
(今いるチームだと) (希望を言えば…) Redmineで作業項目管理 作業項目管理 gitでソース コード管理 TFSで ソース コード管理 gerritでコード レビュー コード レビュー Jenkinsで自動ビルド 自動ビルド All in Oneなのが楽だし Visual Studio連携が楽だし 今なら自前サーバー不要だし (tfs.visualstudio.com)
52.
Visual Studio ALM
Visual Studioの進化の方向性 Application Lifecycle Management※ 2012 2010 • チーム全体 • 開発チーム ステークホルダーや運用者 2008 との連携性強化 • 個人開発 作業項目管理 つまるところ、 Team Foundation Server (がほぼ完成) ソース コード管理 の強化、VSとの一体化 ※ 開発・運用のライフサイクル全体の統合管理
53.
Visual Studio ALM
プロジェクト状況の可視化 問題の早期発見
54.
Visual Studio ALM
各種コレボレーション 作業項目管理 優先度付け 人的リソース 配分 コード レビュー
55.
Visual Studio ALM
自動ビルド・配置 テスト漏れや配置ミスを減らす ゲート チェックイン ビルドの通らないソース コードのチェックインを認めな い ビルド自体を厳しくすれば、ある程度の品質担保に ビルド後にテストを実行 静的解析ツールを通す
56.
大規模開発でもいけるの? Visual Studioは3500人体制で開発されてる
分割統治 5~10人程度のチームに分かれて開発 可視化やゲート チェックインで全体の品質担保 このためのALM このためのTeam Foundation Server 紙ベース/Excelベース納品してる限り無理じゃないかな
57.
改めて、ハードルを越えるために 余裕は余裕を、デスマはデスマを呼ぶ
フィードバック ループ 何も手を打たないと抜けられない デスマ ループから抜けるためには チームこそ力 言語機能やツールに頼る 言語機能やツールから学ぶ
58.
まとめ(1/2) ハードル
使えなくても覚えなきゃ 新技術から学ぶ 技術の変化は時代の変化 ここだけ修正 既存資産を負債にしないために 疎結合 だからこその新機能 不連続はない あくまで日々の積み重ね
59.
まとめ(2/2)
MP フィードバック ループ MP 余裕は余裕を 新機能 デスマはデスマを ハードルを乗り越える チームで乗り越える 余裕 言語機能やツールに頼る 言語機能やツールから学ぶ
Download now