むろほしの資料 @BuriKaigi2017 in Toyama ドキドキライブコーディング!!

むろほしの資料 @BuriKaigi2017 in Toyama ドキドキライブコーディング!!

2017/01/28(土)に開催された「BuriKaigi2017 in Toyama」
のセッション「 ドキドキライブコーディング!!」
のむろほし(@RyotaMurohoshi)の分の資料です。

F46c97bb74758d481531990654933050?s=128

RyotaMurohoshi

February 05, 2017
Tweet

Transcript

  1. むろほしの資料 2017/01/28(土) BuriKaigi2017 in Toyama C# 大好き MVP による、C# ドキドキ・ライブコーディング!!

    @RyotaMurohoshi
  2. 第1パート C#の好きなところ

  3. 過去との互換性を大切にしながら 進化し続けるところ

  4. いろいろな環境でうごくところ

  5. 第二パート オセロの作戦紹介

  6. むろほし の 作戦

  7. その前に

  8. プログラマーにとって 大切なこと

  9. 上司 or お客様 「◦◦な機能が欲しいんだけど」

  10. ◦◦な機能をつくることが ベストな解とは限らない

  11. 愚直に実装するだけでなく 柔軟な発想で 根本的な問題の解決を!

  12. では お題の確認

  13. 4人打ち変則オセロ

  14. 次のC#ファイルを各自実装

  15. public class PlayerAILight : IPlayer { private Board _Board; private

    Board.Piece _Piece; public void Initialize(Board board, Board.Piece piece) { _Board = board; _Piece = piece; } public Task<Point> GetPointAsync() { return Task<Point>.Run(() => GetPoint()); } private Point GetPoint() { var pointList = _Board.GetTakePointList(); return pointList.First(); } }
  16. None
  17. なるほど!

  18. Boardを使って 打つPointを決めるのか!

  19. AI?アルゴリズム? 定石?評価関数?深さ優先探索?幅優先探索?計算量?時間内に終わる?

  20. あれれ~!

  21. よく見ると…

  22. public class Board { public Piece[,] GetBoardData() { return _BoardData;

    } … }
  23. 石の情報が がら空きだ!

  24. _BoardData 書き換えちゃえばいいじゃん!

  25. 作戦1 Boardの内部状態をまるっと書き換えて あと一手で、完全勝利するようにしちゃう

  26. ×「いいアルゴリズムを作る」 ◦「オセロで勝つ」

  27. やったね! 柔軟な発想で完全勝利!

  28. 何かおかしい

  29. 敵は「あの」 北陸 C# MVPのお三方

  30. 絶対何かやってくる!

  31. 仮に同じことをやられたら コードの実行順序的に 上書きされてしまうorz

  32. いつ書き換えるの!?

  33. 作戦2 開始ボタンがクリックされたタイミングで Boardを書き換える!

  34. Taskとかリフレクションを活用!

  35. 「ドキドキ、C#ライブコーディング」

  36. おさらい

  37. ×「いいアルゴリズムを作る」 ◦「オセロで勝つ」

  38. 愚直に実装するだけでなく 柔軟な発想で 根本的な問題の解決を!

  39. 柔軟な発想と C#の言語機能を使って 勝利を目指す!

  40. まぁ、リスクもあるけど あと、もっとえぐいことされそう

  41. 以上 むろほし の 作戦