ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示
ラベル 勉強会 の投稿を表示しています。 すべての投稿を表示

2020年8月2日日曜日

久しぶりにオートマトンを勉強した

ソフトウェア工学輪読会


という勉強会を社内でやってます。
ソフトウェア工学という本を持ち回りで読んでいくのですが、その6回目を僕が担当しました。
内容はオートマトンとソフトウェアです。

大学2年生で「オートマトンと言語処理」という講義を取って以来です。
そのときは音声と言語処理に傾いた授業で、のちに「コンパイラや正規表現でオートマトンが使われているらしい」程度の知識を得ました。

改めて勉強してみると興味深い分野です。
オートマトン(状態遷移図)を書き起こすとソフトウェアが何をするのかが具体的になります。
さらに興味深いことに、数学的に考えることが可能であるということです。様々な拡張や表現を増やしていける余地があります。

というわけで、当日の発表スライドです。


輪読会で出た話


「Web系システムの中でオートマトンが活用できる事例はありますか?」という質問がありました。
輪読回ではメルカリ アッテの例を取り上げていました。内容を要約すると「多くの状態が存在し遷移先が多岐に渡るため、テスタビリティとメンテナビリティを向上するためにオートマトンを導入した」例です。ここまでオートマトンが使われているコードを見たことがないので、理論とソフトウェアとの繋がりを身近に感じました。(高山さん、ありがとうございました)


「状態遷移図書く場面ってなんだろう?」という話もありました。
テストエンジニアリングの観点で、権限周りを状態遷移図で描くとテストしやすくなります。
下の記事を読んでいると、権限周りだけでなく画面のテストにおいても使えそうだと思いました。 (カルバートさん、ありがとうございました)


今後


「動的に変わっていく振る舞い」はオートマトンや状態遷移図で表現できることがわかりました。
輪読会で出たオートマトンを実装する話の他に、FluxやReduxのように状態を管理するフレームワークを使う例もあります。今後はこの仕組みについて実装しつつ理解したいと思いました。

2018年5月14日月曜日

TDD+モブプログラミング会に参加してきた

5/13(日)のtddyyx(てぃーでぃーでぃーわいわいかい)に参加してきました。
10分くらい遅刻しましたが、心理的安全性が保たれた素晴らしい会でした。ごめんなさい。


何をしたのか


tddyyxでは、テスト駆動開発モブプログラミングで問題を解決します。
  • テスト駆動開発は、間違いを恐れず言うと、テストを書いてからプログラミングする開発方法です。
    • テストに通らないコード(Red) -> 通るけどリファクタリングする必要があるコード(Green) -> 通るし綺麗なコード(Blue)の順に実装していく。
  • モブプログラミングは、間違いを恐れず言うと、一つの問題についてチーム全員で解決していくプログラミング方法です。
    • 作業分担は効率が良くなるように見えるけど、後に作業集約することを考慮すると良くないかもしれない。
    • モブプログラミングは作業分担しないため進みが遅いように見えるけど、全員が共通したコンテキストで動くので最終的には効率が良いかもしれない。
    • モブプログラミングはドライバー(コードを書く人)とナビゲーター(周りで調べたり知恵を出したりする人)に別れて作業する。ただし、コーディング時はモニターは同じものを見る。
    • 問題の一部でも解決したら「やったー!」と言う(重要)。
  • 問題というのは、FizzBuzzやLeapYear(うるう年)のようなプログラミングするとよく出てくるお題のことです。

今回は前半を3チームに分かれて別々の問題を解きました。後半は自由にチームを組んで好きな問題を解きました。

前半戦


@y0taさん、@hirarinさん、@ie_tetrahymenaさんと一緒に100Doorsを解きました。使用したのはCyber-dojoです。言語は参加者みんな初めてのR。

  • 仕様からのタスク分け -> テスト書く -> 実装する -> 動く -> 「ヤッター!!」 -> 以下テストから繰り返す。
以下学び
  • タスク分けに設計の話と混ざるとハマりそうなので避ける。
  • Rの文法が風変わりで楽しい。配列が作れない、三項演算子ができない等等。
  • ネストが3つ以上あると気分が悪い。できるだけ2つまでにする方法を考える。
  • 関数の挙動に注意。副作用の話。
  • 定期的におこる「ヤッター!!」はモチベの回復になる。楽しい。
  • コーディングに自信がなくても学び合うことでカバー可能。(メンバーの人柄によるかも)
    • 自信がない、わからない、と正直に声をあげることが重要だと思う。
  • お菓子大切。喜久福美味しかったです。

後半戦


ごめんなさい、一緒にコーディングしたのに名前を忘れました...。後半はLeapYearをやりました。前半戦と同様にCyber-dojoを使用しました。時間が少なかったので言語はみんな大好きPython。

以下学び
  • 文化の違いをどう解決するか。チームによって問題へのアプローチ(僕たちの場合はタスク分けから先)が違っていたので、最初にどうやってきたのかをお互いに聞くべきだった。
  • 地味にPython忘れている。悔しい。
  • 「ヤッター!!」は重要。

おわり

以上、楽しいコーディングイベントでした。
モブプログラミングはモブ+プログラミングなのでプログラミングではない別の作業でも活用ができる。モブの考え方は原始的だけど、作業が複雑になっていたり知識や経験がない状態からスタートアップする方法として頭においておくのが良さそうです。

あと、けん玉が少し上達してよかったです。

モブけん玉の様子




2018年3月8日木曜日

YAPC::Okinawa2018に参加してきました。

はじめに

YAPC::Okinawa 2018 に参加してきました。会場のOISTは琉大から北に約1時間程度みたいで、朝9時に琉大を出たら10時のセッションに遅刻しました。

YAPCのような言語系(?)カンファレンスは初めてです。学会とは違い、運営・参加者全員の情熱が全面に出ている雰囲気を感じました。(学会は静かな情熱がぶつかり合っている感じがします)

「ブログに書くまでがイベント」らしいので、未来の自分に向けて聞いてきたセッションをまとめておきます。


セッションまとめ

GraphQL をプロダクション導入した結果 @bird_tummy

REST APIに変わるかも?ということで聴講しました。
セキュリティ的に難がありそうですが、JSONと比べて読みやすそうな構成だったかなと思いました。とりあえず、MutationとQueryを覚えました。


全部Perlが教えてくれたこと @k_nishijima

起業家ジム・クラークを読みたくなりました。
「ペイ・フォワード」の考え方、好きです。
もくもく会はコミュニティになるのかな?と思ったけど、交流があればコミュニティになれそうですね。

正規表現と曖昧性、マッチングの難しさについて(だったかな?) @sinya8282

スライド見つかんない。
正規表現エンジンの弱点の話でした。バックトラック(vM)法は拡張性が高く、魔改造できるけど、22の壁(?)があるとか。
文脈自由文法は、自然言語処理とオートマトンの講義を思い出して懐かしんでました。


Perlを中心としたワンライナーあれこれ @teckl

ワンライナーについては普段からやりたいと思っていて、Shell Scriptではパイプとxargs、sedを使って頑張っていました。しかし、Shell Scriptに環境依存があるのはまあまあ辛いところです。いろいろスライドで紹介していただいたので使ってみようかと思います。


WordPress運用を支えるPerl @xtetsuji

スライド見つかんない。

ド直球にやばそうなアイスブレイクでした。
「枯れたところに飛び込む」のは嫌いじゃないです。横井軍平を思い出しました。


ノンプログラマーのプログラミング活用法 / The Non-Programmer's Programming Techniques @note103

僕の中では一押しでした。編集者がプログラミング知識を持つとこうなるのか〜と夢が広がりました。
gitを使えるようになったら、どうなるんだろうかとワクワクしました。

Perlで作られたLINE NEWS(だったかな?) @nipotan

LINE NEWSってPerlで作られてるんだ、って素直に思っちゃいました。0.5秒と目標づけたのはすごく具体的で良い感じがしました。ところでPerlでやるひty(以下検閲済み)


Perl in Merkari(だったかな?) @kazeburo

トイルの撲滅、初めて聞きました。SRE本に興味を持ちました。アジャイル開発では自動化をどんどん進める感じだったので、自分自身の方向性は間違ってないんだなと思いました(?)。Googleとかは数百万行のテストがあるらしいので、いちいち手動テストしてられないですよね。


新卒Rubyistが1ヶ月でPerlmongerになった @_serinuntius

LTの発表でした。本当にドラを鳴らすんですね。「とりあえず1ヶ月書いてみろ」はいいですね。覚えるテクニックが受験勉強的なゴリゴリな感じで楽しかったです。

おわりに

Togetterも公開されたみたいですね。

次は5~6月あたりで開催地は東京らしいです。その頃には東京にいるのでラッキーですね。
次回はPerlを使ってるレベルで参加していたらいいな〜と未来の自分にプレッシャーをかけておこう。登壇できたらいいなーとか思っておこう。


最後に、運営のみなさま、開催お疲れ様でした。お土産ありがとうございますm(_ _)m

2016年4月1日金曜日

go langを勉強してみる(1)

「並列処理できる言語ないかなー。Cばっかりだし、他のがいいよー」とか思ってたら、学内でgo lang勉強会が開かれてたので参加してみた。

やってたこと

goは講義でも聞いたけど、触るのは初めて。
勉強会では、ツアーをして構文に慣れることから始めました。

触ってみての感想

変な感じの言語だなー、と。僕はCとRubyを主に使ってたので入りは楽でした。
どんな感じで変かというと、
  • 型宣言が変(型宣言が後にくる)
  • return文が変(最初に宣言するパターンとreturnに明示するパターン)
  • for文とif文に()がなくて変(これカッコを入れるとエラーなんだぜ?)
  • 構造体pointerが変(たまに変な挙動が)


でも、便利なものもあって
  • 型推論が便利(:=が便利)
  • deferが便利(遅延して実行してくれるのは何かに役立ちそう)
  • sliceが便利(初めての概念)

今回はできなかった並列分散のgo routin(?)は今度やってみます。