くうと徒然なるままに

ゆるふわ を志向している なごやかです。

CodeRetreat @ 名古屋ギークバー に参加してきたお話

タイトルの通りです。

CodeRetreat は、 45 分のペアプロ を 5セットずつ違う人とやるイベントです。

Code Retreat についてはここ を参照してください。

イベントページ

geekbar.doorkeeper.jp

ペアプロでは、 「コンウェイライフゲーム」を作りました(作ろうとしました) また、プログラムを作るときは、 TDD で作ろうぜ的な感じでした。

Code Retreat の レトロスペクティブ

Keep

Problem

  • 使用した言語が、 C, C# になってしまった
  • TDD の原則に従ったコードを書けなかった

Try

  • 自分が普段触らない言語でチャレンジしてみる
  • コンウェイライフゲームを作りきる
  • TDD の知識を知ってから当日を迎える

記録

1組目

WPF + Prism な環境でチャレンジした WPF のユーザーコントロールの部分でハマって時間を浪費してしまった

2組目

自分が主にコードを書く人になって、進めていた。自分ひとりがどんどん進める感じになってしまった感じだ。 テストファーストでコードを書くことに少し慣れた

3組目

きょんさんからおひるごはんの時間に TDD のやり方についてレクチャーしていただいたので、 それに従って進めていきたかった。 ペアの人は、 C言語Python が書けるということだったので、C言語を選択した。

自分はアドバイスをする感じの立場でした。 C言語でTDDをしようとしました。自分は、C言語でのテストフレームワークを知らなかったので、テストっぽいのを無理やり書いて進めていった。これはこれで、知見がたまる感じ。

4組目

相手は、Dotnet な人らしいので、 Console Application + C# で進めた。 自分がテストコードを書き、相方が実装をするという進め方であった。 ここでなんとなく、きょんさんに教えてもらったTDDのやり方をなんとなく理解していった。

5組目

最後は、きょんさんとあぜちさんとペア?を組んでやった。 いろいろ実践的な知見を得ることが出来た。テストコードの書き方から名前の付け方までいろいろご指摘をいただいた。自分の圧倒的力不足を感じた。。。 途中で、MVVM とかの話もすることができた。言葉に表せないが、大量の知見を得れた。

得られた知識

TDD

TDD で最初に各テストは、ストーリーに沿ったものを書く、仮実装をする 仮実装が通るレベルでテストを細かく書いていく

TDD の1サイクルを1息で回せるぐらいの粒度で作成すると良い

C言語

C言語で TDD をやろうとするのは、つらい

全体的な感想

体力的には、つらいが相当な量の知見を得ることができた。

ツイキャス の OAuth 認証をヘルプするライブラリの V0.1 を Github に公開しました

TwitCasting の API を使うために必要な OAuth 認証を手助けするライブラリを作成しました。

Xamarin, NETFX, ASP.net などから 利用できるように作りました。

動作環境

  • .Net Standard 1.0

機能

現在は、以下の機能が実装されています。個人的に必要最小限が実装されてる感じです。

  • OAuth URL 認証用の URL を生成
  • 認証でリダイレクトされたURLから Access Key を抜き出す

新機能

こんな機能欲しい、とかは、 PR, Issue 送ってください。

github.com

使用例

Auth するためのURLを取得

AuthClient authClient = new AuthClient();
AuthURL.Value = authClient.GetAuthURL(ClientID.Value);

Auth した後のURLから Access Key を取得

AuthClient authClient = new AuthClient();
var AccessKey = authClient.GetAccessTokenFromCallbackURL(AuthURL.Value);

でこれきさん迎撃会にて、 Xamarin と Cognitive Services についてLTをしてきました

でこれきさん迎撃会にて、 Xamarin と Cognitive Services についてLTをしてきました。

開催内容

dico_lequeさんがオンザロードにやってきた! なごやのワイルドカードことdico_lequeさんがオンザロードにジョインしてくれました。 これを機会にみんなで仲良くなりましょう。 dico_lequeさんにおめでとうを言いたい人はぜひ参加してください! 発表者を募集中です! 発表枠

でこれきとは!bydico_leque 江戸時代のソフトウェアづくり(仮)byすのとら ねこでもわかるLens,Prismbyits_out_of_tune センセーショナルな法律の話byりょかさん 未定byこーくん…

詳しくは、こちら

日時

2017/07/05(水) 19:00 - 21:00

参加人数

9 人

当日の役割

LT

資料

connpass.com

当日の様子など

1drv.ms

Xamarin 勉強会を Xamarin 公式サイトに掲載してほしいって投稿した

こんにちは、くぅです。

Xamarin 勉強会を 08/19 に名古屋で主催します。ということで、 Xamarin 公式サイトに乗せてもらいたくて、 Post してみました。

イベントページ

jxug.connpass.com

きっかけ

www.xamarin.com

に乗せてもらいたいなと思って、 Xamarin の公式Twitter アカウントにリプを飛ばしてみました。

すると、 Xamarin の中のひとから返信がありました。

ということで、フォーラムに投稿しました。

実際に掲載してもらえるかは微妙ですが、掲載されたらうれしい!

Connpass イベントページからレポートを自動生成するプログラムを作成しました。

きっかけ

とある理由で 勉強会を主宰するたびに、イベントレポートを毎回提出しなければいけなくなったため、 自動生成してくれるプログラムを作成しました。 怠惰 は大事。

使い方

  1. Connpass の URL を張り付ける
  2. 自動生成の元になる テンプレートを張り付ける or 既存の md ファイルから読み込む
  3. Translate ボタンをクリックして自動生成してもらう
  4. 自動生成した Markdown をコピーボタン or CTRL A + CTRL C
  5. はてなブログ等に張り付ける

当日の様子をTwitter、撮影した写真から数枚張り付ければ、最低限はできるかな。。。?

一応、次のバージョンでは、Twitterから自動でよさげなツイートを取得できるようにする予定です。

ソースコード

github.com

使い方

起動画面

https://lh3.googleusercontent.com/-M1xZvLtJh_0/WVSa3Vth_aI/AAAAAAAAKbQ/LeSlZKqiWdEsYQrCCyLmEGfMCypV7YpyACHMYCw/s0/2017-06-29_15-14-52.png

Connpass の URL を打ち込んだ画面

https://lh3.googleusercontent.com/-A6v9yEWFfZM/WVSbCbsAAjI/AAAAAAAAKbU/4ppmBqXWUEorOU4l3ltFjpbpmvIytfivQCHMYCw/s0/2017-06-29_15-15-36.png

テンプレートを読み込んだ画面

https://lh3.googleusercontent.com/-5wHOpKARA-s/WVSbPzViOzI/AAAAAAAAKbc/j0tk2RDgetICsWIgUIVzpqSbnAHtufVIACHMYCw/s0/2017-06-29_15-16-30.png

自動生成!

https://lh3.googleusercontent.com/-i8f3esas6sA/WVSbV5KRb2I/AAAAAAAAKbg/wQD3OwX81wI2IMqYxy8ZGo-XHsRCHkZSQCHMYCw/s0/2017-06-29_15-16-54.png

自動生成元テンプレート例

{Title} を開催しました。

# 開催内容

{MeetupDescription}...

詳しくは、[こちら]({MeetupURL})

#日時

{DateAndTime}

# 参加人数

{MemberCount} 人

# 当日の役割

運営・登壇

# 資料
[{TextURL}:embed:cite]

# 当日の様子など

技術的な挑戦

  • Angle Sharp
  • Material Design In XAML
  • RxProgramming in WPF
  • 自作テンプレートエンジン

AngleSharp

Web スクレイピングしてくれるライブラリ

見つけたきっかけ

さくさん先生のツイートを見て、興味を持ったから。今まで、 HTMLAgilityPack を利用していたから。

AngleSharp VS HTMLAgilityPack

AngleSharp の、 CSSSelector でタグを指定できるのは、気持ちよく感じた。ただ、慣れてないからそこの部分は、辛み。

個人的には、 Xamarin で使うことも視野に入れるなら、 AngleSharp を選択する。HTMLAgilityPack では、Xamarin な環境では、 X-PATH という機能が使えないから。AngleSharp の CSSSelector で要素を選ぶ方が良いと感じた。

上の Qiita の記事を見ていても、 AngleSharp は HTMLAgilityPack の上位互換のように感じた。

コード例

var doc = await new HtmlParser().ParseAsync(html);

var title = doc.Title.Replace("connpass", "").Replace("-", "");

var memberCount = doc.QuerySelectorAll(".amount span").Select(element => int.Parse(element.InnerHtml))
    .Aggregate((newValue, oldValue) => newValue + oldValue);

var textUrl = URL + "/presentation/";

var ymd = doc.QuerySelector(".ymd").InnerHtml;
var StartTime = doc.QuerySelector(".hi").InnerHtml;
var EndTime = doc.QuerySelector(".dtend").TextContent.Trim();

var dateAndTime = $"{ymd} {StartTime} - {EndTime}";

var meetupDescription = doc.QuerySelector("#editor_area").TextContent.Replace(" ","").Substring(0,256);

Material Design In XAML

WPF アプリケーションのデザインをよしなにしてくれるライブラリ 凝ったデザインにする場合は別だが、適当なデザインを最小のコストで作る という目的に着目すればかなりできる子

公式Github リポジトリのドキュメントを見ればすぐに導入できる

デザインを適当させたいときは、 Style を弄るだけでできて、最高!

FAB(Floating Action Button) を導入するコード例

https://lh3.googleusercontent.com/-1yaMy7vmSGQ/WVIuQOL4buI/AAAAAAAAKac/3Xir5XOIu_s1D9FOXZIrF1bpuTVPv_xfACHMYCw/s0/2017-06-27_19-06-52.png

<Button Command="{Binding OpenTemplateFileFromLocal}" ToolTip="Open Template File" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Bottom" Style="{DynamicResource MaterialDesignFloatingActionDarkButton}">
            <Viewbox Width="36" Height="36">
                <Canvas Width="24" Height="24">
                    <Path Data="M4,2H20A2,2 0 0,1 22,4V16A2,2 0 0,1 20,18H16L12,22L8,18H4A2,2 0 0,1 2,16V4A2,2 0 0,1 4,2M18,14V12H12.5L10.5,14H18M6,14H8.5L15.35,7.12C15.55,6.93 15.55,6.61 15.35,6.41L13.59,4.65C13.39,4.45 13.07,4.45 12.88,4.65L6,11.53V14Z" Fill="Black" />
                </Canvas>
            </Viewbox>
        </Button>

RxProgramming in WPF

Prism,Reactive Property, Unity といった Rx なプログラミングを 実現するためのライブラリ群を WPF でも使ってみた(今まで Windows Store App, Xamarin といった環境で使用したことはあっても、 WPF で利用したことはなかった。

Prism Template Pack を使えば、すぐに導入できた。先人に感謝

自作テンプレートエンジン

C# でテンプレートエンジンは、どれがいいのかわからなかったので、自作してみました。

自作テンプレートエンジンの仕様

タグを埋め込むと埋め込んだタグが渡したクラスのプロパティを解析して、同じ名前のものが存在したら、そのプロパティの値と置き換わる感じです。

埋め込むタグ例

{Title }

テンプレートエンジンに渡すクラス例 (というか内部で使ってるクラス)

    public class ArticleData
    {
        public string DateAndTime { get; set; } = "";
        public string Title { get; set; } = "";
        public string MemberCount { get; set; } = "";
        public string TextURL { get; set; } = "";
        public string MeetupDescription { get; set; } = "";
        public string MeetupURL { get; set; } = "";
    }

結果

AI を使いこなせ! Cognitive Services 勉強会!

Twitter で教えてもらったことのメモ

String と string

String と string はどちらを使うべきか問題

調査したところ、 string を使うべきらしい。MSDN にコーディングガイドラインによると

stackoverflow.com

一応、 NETFX のソース的には、以下のようなコードが書かれてました。

public sealed class String : IComparable, ICloneable, IConvertible, IComparable<String>, IEnumerable<char>, IEnumerable, IEquatable<String>

ローカル変数は UpperCamel と Camel どちらがいいの問題

ローカルスコープの変数にUpperCamelのものとCamelなものが混在してる

Pascal or Camel らしい

Capitalization Conventions | Microsoft Docs

Array を意味ないのに list にしてる

Arrayを特に意味もないのにListにしてる事は一瞬で思った

これは、単純なコードの消し忘れミス

リテラル直書き禁止か否か

“"はstring.Emptyのほうが リテラルの意味をソースで理解できない場合があるから、僕のとこは一律ダメ… あと、仕様書上、名前が付いていないリテラルソースコードにあるのが許されないとか、変更時に水平展開漏れないかとかまぁ社内の事情。const string EMPTY_STRING = ”“ でも受>け入れOK

速度差はあまりないから、それ以外の部分に気をつけろという話のようですね。 可読性的には、自分のほかの方と同じで、 “” の方が見やすいとおもうので、それで行きたいと思います。

WPF で ファイルピッカーを開いてテキストを読み出す

やり方

WPF にて、 ファイルピッカー を開くためには、 OpenFileDialog というクラスを利用します。

コード

using Microsoft.Win32;
using Reactive.Bindings;
using System.IO;
---
var fileDialog = new OpenFileDialog();
var result = fileDialog.ShowDialog();
if (!result.HasValue || !result.Value) return;
var fileAddress = fileDialog.FileName;
if (!File.Exists(fileAddress)) return;
var fileText = File.ReadAllText(fileAddress);
if (string.IsNullOrWhiteSpace(fileText)) return;
return fileText ;

AI を使いこなせ! Cognitive Services 勉強会! を開催しました。

開催内容

認知機能をWebAPI経由で利用できる“人工知能パーツ”であるCognitiveServicesについての勉強会です。 ■CognitiveServicesとは MicrosoftCognitiveServicesは画像、文章、言語、情報を処理する機能をAPI経由で利用できるサービスです。 CognitiveServicesの一つであるEmotionAPIでは、画像を分析して人間の顔やその表情を数値化し、結果をJSON形式で取得することができます。 日本マイクロソフト株式会社デベロッパーエバンジェリズム統…

詳しくは、こちら

日時

2017/06/24(土) 13:00 - 18:00

参加人数

30 人

当日の役割

運営・登壇

資料

mspjp.connpass.com

当日の様子など