ばったログ

3回に1回くらいはやったことをアウトプットしていく

『カイゼン・ジャーニー』一人旅の中間報告

今年の8月に『カイゼン・ジャーニー』を読んだ際、著者の市谷さんに返信いただいたので Twitterの方で感想をかるーくまとめていた。

振り返りの振り返りを兼ねて、この4ヶ月ほどの活動まとめてみる。

私はこんなことをやっている人

  • SE歴5年程、コード書いてるのは3年半くらい
  • 社外のスクラム開発のチームに4か月ほどいた経験あり
    • スクラムが「理解が容易だが習得は困難である」ことを知っている
  • 現在はウォータフォール型の開発、進捗はWBSで管理
    • 実装中心だがタスクの粒度が大きめなので、自分でも進捗を管理することにした

■現在取り組んでいること↓

※カッコ内はスクラムでの用語に当たりそうなものを書いています

ひとり朝会(デイリースクラム)

以下の3点セットが書かれたメモを確認後、業務を開始

  • 昨日やったこと
  • 今日やること
  • 困っていること

朝会用の資料を前日の業務終了時に準備することで、セーブポイントを作成
翌日、ロードすることでスムーズに作業に復帰
と言うイメージで実行中。
困っていることは、週末の振り返り時にカイゼンしたりチームに相談(できれば)して早めに解消を心がけている。

ひとりタスクマネジメント(スプリントプランニング?)

WBS上の1つのタスクが完了し次のタスクに取り掛かるタイミングで実施。
タスクはだいたい 0.5人日から3人日で粒度もまちまち。
タスクとして扱うには大きく 分厚く 重くそして大雑把過ぎることが往往にしてあるので最初は分割作業を実施する。

現在は(語感も良いので)以下の3つの工程を何度か繰り返して適度な大きさに分割後、作業に取り掛かってている。

タスクの理解

仕様書、設計書などを確認し、作業完了までの流れをイメージ

タスクの分解

大きくても4時間以内に完了できるくらいに分解

タスクの再構築 再定義

設計書から読み取れなかった

  • 実装しないといけない部分
  • 実装しなくていい部分

を設計者に確認


この作業を経て受け入れ条件(Acceptance Criteria)と完了の定義(Definition Of Done)が明確になった、適度な大きさのタスクができるように心がける

実装(スプリント実施)

タスクがそのまま備忘録となるので、上から順番に粛々と作業。
ちなみに、レビュー指摘や設計変更などの割り込み作業が入った場合は
Trello(後述)のタスクとして起票して後回し。(スイッチングコストを意識)

ひとりレビュー(スプリントレビュー)

レビュー依頼を投げるという工程がない・・ので
設計者とズレがありそうなところなどの動作を確認してもらう。

(この辺は、一番カイゼンしたい部分だが時間とチームの協力が不可欠な部分)

ひとり振り返り(スプリントレトロスペクティブ)

週末プライベート(個人での学習など)な振り返りのついでに、仕事の方の振り返りも実施。


やっていることの一連の流れをまとめてみると、WBSのタスク1つひとつを短いスプリントのようにして日々の仕事をこなしている感じ?
今の所は、まずまずの成果が出ております。

■あとがき/反省点

  • まとめ部分での触れたが、WBSのタスク1つひとつが短いスプリントのような感じになっている
    • 毎回せっせとバックログを作成している?
    • 受け入れ条件などが整ったバックログとして詰めたいので、もっともっと仕様を教えてくれ!となる
      • (あれ、やっぱり仕様をわかっている人が作った方が早いんじゃry)
    • 自分 VS タスク な環境を生きる
  • 他の人の動きがわからないので、全体朝会なり定時ミーティングなりスプリントレビューなりやりたい
  • 振り返りがうまくできているかはやはり不安(一人なので)
  • タスクにかかる時間nの見積もりはしていない(そもそもすでに見積もられている)
  • うまく行けば、第二弾の報告もやる予定。

一人で続けるのも少々つらみがあるので
生存戦略としてのぼっちスクラム」とか「スクラム界のソリスト」を自称していこうかと模索中。

おまけ:使用ツール

Trello

タスク管理ツール 管理のしやすさを優先してWBS上の1タスクをTrello上のカード1枚に対応させカードのチェックリストでタスクの分解を行なっている。
設計の仕様策定中のため一部保留などWaitingと言うよりPendingなタスクが増えているのが最近の悩みどころ。

BoostNote

プログラマのメモ帳とも呼ばれているメモアプリ
何度目かの振り返りでググる時間を減らそうと言うカイゼンの一環で導入
よく使うコードなどをストックするようにしたり
エラーが出たら、スクショと対処法を書き残したりなど色々模索中

Toggl

見積もりはとりあえず保留にしたが、タスクにかかった時間は計測しておきたいと考えたので利用を開始。
chroem拡張を導入することで可能となるTrelloとの連携がGood
最近はプライベートでの時間管理に最近効果を発揮している。

[読書メモ][技術書典5]『絶対に挫折させないアプリ開発 はじめてのLaravel』を挫折せずに読んだメモ

最近PHPを勉強し始めたのですが、一緒にフレームワークも勉強してしまおう!と思っていたところに良さそうな本があったのでその読書メモ

【ダウンロード版】絶対に挫折させないアプリ開発 はじめてのLaravel - plumsa - BOOTH a0ec82c4-cfcc-4827-a937-40583dee6339_base_resized.jpg

対象の読者

  • Progateやドットインストール、入門書等でPHPの基礎を習得している人
  • Laravel を始めてみたが、公式チュートリアルをはじめとするネットの情報源がよく理解できない人
  • 公式サイトなどの説明をみて開発環境を自力で構築できる人
    • 環境構築の参考になるサイトの紹介はありますが、「XXXからインストーラーをダウンロードして...」といった手取り足取りな説明はない
    • (私はHomesteadで環境を作り、設定ファイルなどは適宜読み替えて写経などを行いました)

目次

第 1 章 はじめに
第 2 章 Laravel とは何か
第 3 章 アプリ開発のフローを考える
第 4 章 PHP 開発の準備をする
第 5 章 はじめての PHP 開発 〜TODO アプリを作ろう〜
第 6 章 Laravel 開発の準備をする
第 7 章 はじめての Laravel 開発 〜もう一度 TODO アプリを作ろう〜
第 8 章 2 度目の Laravel 開発 〜さらにもう一度 TODO アプリを作ろう〜
第 9 章 本書を読み終えた後に広がる世界

よかったところ

Laravelチュートリアルが詳しい解説付きで学べる

TODOアプリを3回作ることでコードや実装の比較ができる

  • 5章と7章では素PHPとLaravelを利用した場合の実装の比較
  • 7章と8章ではルーティング部分に偏った処理を「役割分担」を念頭に置いてリファクタリング
  • 設計についても意識でき、Laravel をより実践的に活用しようと思ったときの土台となる

勉強や開発を行う際の情報源が紹介されている

  • 手取り足取りは教えないが道は示す、というスタンス
  • 公式サイトや参考サイト、コミュニティが多数紹介されている

次にやること

  • PHP7系の文法の習得
  • Laravelチュートリアルの続き
  • 『体系的に学ぶ 安全なWebアプリケーションの作り方』
    • そもそもこの本のサンプルコードがPHPで書かれていたのも、学習のきっかけ

紹介されていたサイトなど(一部抜粋)

公式サイト

参考サイト

コミュニ二ティ

TDD+モブプログラミングでワイワイする会 その16に参加してきました

TDD+モブプログラミングでワイワイする会 その16 - connpass

Agile Japan 2018の基調講演(沖繩サテライトに参加していました)を聴いてモブプログラミングに興味を持ったので、参加した時のメモ。

外では琉大祭でガヤガヤの中、こちらのイベントには14人も集まってワイワイしてました。
ちなみに近くでポケモンGO研究会?の出し物をやっていました。

(↓当日のスライドではないが、内容はほぼ同じようだったのでなので引用)

このサイクルでドライバーを交代するルール
テンポよく交代できるし、TDDのお作法に乗っ取って"筋トレ"してほしいとのこと。

モブプログラミング1回目

  • 言語はRuby/RSPec お題はFizzBuzz
  • いきなり実装ではなくFizzBuzzに必要なことをTODOリストにまとめる(これがテストケースの元となる)
  • だいたい以下の流れでドライバーを交代して、ワイワイとモブプログラミングを行った
    • ①Red→Green:テストが通った!と皆で拍手して称え合う
    • ②Green→リファクタリング:ナビゲーター同士で相談。テストを通るためだけに書かれたコードからイケてる感じになるようにコードをリファクタリング
    • ③テスト追加→Red:皆で(大げさに)がっかりする。急いでGreenにしなきゃとドライバー交代。①に戻る
  • 実装はだいたいわかっているだけに、なかなかテストケースを書けなかったのがもどかしかった
  • テストのコメント部分についてはどんなことを書けばいいのかナビゲーター役の時に色々検索した
  • 参考:【Ruby on Rails】RSpecのdescribe/context/itの意味を理解した件

1回目終了後はコードレビューしたり、RSpecのテストコメントには何を書くべきかというプチ講座が開催されていました。

モブプログラミング2回目

  • 人生初のHaskell お題はFizzBuzzPlus(31 など 3が含まれている場合にも Fizz になる)
  • Haskelが使える方がいたので、途中からHaskell講座が始まり、関数型プログラミングがちょっとわかった(ような気がした)

2回目も、知っているお題 x 知らない言語 だといい感じに盛り上がりました。

わかったこと

  • モブプログラミング面白い
    • ドライバーは「有機キーボード」
    • ナビゲーターは「司令塔」。意見を出し合ったり、手が空いてる人が先回りして文法を調べたりしながらコードをより良いものにしていく
  • テスト駆動 は テスト手法 じゃない 開発手法 だ!
    • 分析技法であり、設計技法であり、実際には開発のすべてのアクティビティを構造化する技法
  • ボブおじさん(Robert C Martin)ってすげー!
  • TDDでテストを書く筋トレしよう
    • まずはテストファースト書きで習慣を身につける
    • 業務に取り入れる場合はまずは、コード実装後で良いのでテスト書くようにする
      • テストの無いコードはレガシーコード

次にやること

  • テスト駆動開発』(新訳)を読む
    • スライドにも登場しており、お勧めされていた
    • 「付録C」にはTDDをとりまくここ 20 年の動きについてよくまとまっている(らしい)

でもまずはIPAの試験が控えてるので、そっちを頑張る。

[勉強会メモ]Python関連勉強会参加メモ2つ

まずはこちら
PythonBeginner沖縄 (1年ぶり復活!「機械学習ビギナー向けコース」) - connpass
当初は7月開催予定だったが8月に延期
当日も台風14号(ヤギ)が接近中だったが、無事開催された。

勉強会用資料

勉強会の内容

機械学習ビギナー向けコースと銘打ちつつも
「参加者の皆にはまだまだ早い(講師・談)」ということで、今回は入門準備編。

  • 前半
    Jupyter notebookの使い方やNumPy,Pandasの使い方をささっと
    この辺はざっくりだったので、jupyter notebookは使い方覚えておいてよかった。

  • 後半
    5人くらいのチームに別れて、横浜市の公開データを利用してのデータ解析実習。
    Pandasもちょっと予習してきたのだが、分析用コードが全然書けなかった(無念)。
    チーム内にコードをかける方がいたので、そちらはお任せしてアイディアの取りまとめとか資料作成の方で頑張ることに。
    公開データを活用したビジネスの提案と分析用データを準備し、発表を無事終えることができた。

感想

Pythonの文法やツールやライブラリの使い方を事前に予習していたが
いざ演習となると全然コードが書けなかった。
まだまだ機械学習の入り口にも辿りつけていない感じなので、
次回はもっと予習してから参加したい。


もう一つがこちら
PyData.Okinawa Meetup #36 OpenCVでとことん画像処理 - connpass

勉強会用資料

勉強会の内容

機械学習に限らず、画像を取り扱う際によく使われるOpenCVの使い方について。
ピクセルがどう値を持っているのかの説明から、領域分割までをコードを動かしながらの実習

感想

jupyter notebook 形式のファイルがそのまま講義資料になっていたので
コードと結果がすぐに見られるし、ちょっと数直や引数いじるだけで
色々試せるのがよかった。
ちなみに、上記の資料リンク内の資料のnotebookを順番に動かすだけでも勉強になります。

終わりに

Pythonは独学でやってるので、今後も勉強会等に参加していきたい。

VB6のコードリーディングのためにやったあれこれ(2018年版)

VB6で書かれたコードを読む必要があったので頑張ってみた記録

前提

サクラエディタ

シンタックスハイライトが効いているのでなんとか読めるが
コメントアウトされたコードの残骸が多く辛い。

関数にぴょんぴょん飛びたいのでctagでタグジャンプを試したがうまく行かなかった。
最終的にはgrepのちから技で解決。

Visual Studio Code

もうちょっと現代風な感じでコードを見てみたかったので試した。

やはりと言うかなんというか、先駆者を発見したので全力で乗っかる
VSCodeのシンタックスハイライトと拡張子の関連付け - 頭ん中

プロジェクトフォルダごと取り込んで
串刺し検索するとそこそこいい感じにはなった。

Visual Studio + (拡張)

VisualStudio でソースコード変換系(VB6→VB.NET)の記事が多く引っかかるが
おもしろい拡張が見つかったのでご紹介

Visual Studio のMarketplace から以下の拡張を入れることで
VB6のプロジェクトのまま Visual Studio で開くことができる

この拡張を入れることによってできることは意訳すると
だいたいこんな感じ

できる/使える

できない/使えない

  • 定義へジャンプ
  • フォーム デザイナ 画面
  • Visual Studio 単体でのコンパイル
    (ただし、VB6開発環境がインストールされている場合はPath指定してコンパイルできる様子、未検証)

定義へジャンプができないのがおしい
でも、コードがめちゃくちゃ長いと関数単位で閉じる機能だけでも便利かもしれない。

おまけ

これのサクラエディタ版か Mery版あたりのやつがあれば便利かもしれない
VB6のソースを Javaっぽく変換する秀丸マクロ

ブロッキングチェーンを勉強しています。

仮想通貨とか分散型台帳技術の方が検索で引っかかるけど
それとはちょっと違う話。

What is "ブロッキングチェーン"?

SQLServer でちょいちょい起こるロック待ちの連鎖のこと。
SQLServer の ロック思想上、ロック待ちは必ず発生するのでそれ自体は問題ない。 が、長いこと リソースをロックされているといろいろ困る、というかすごい困ってる。

すべてはロック思想の違いによる

このあたりの挙動は同じく商用DBである Oracle と比べると理解しやすい。

以下、いろいろ参考記事
* DBMSのロック・分離戦略と同時実行制御 - マイクロソフト系技術情報 Wiki
多バージョン法とロック法の項目を参照

READ COMMITTED   ・・・   COMMIT 済みのデータだけを読み取る
SQL Server および Oracle のデフォルト設定

トランザクション分離レベルが"Read Commited"の場合 例えば、あるテーブルに対してデータ更新中のときにデータ参照を行うと

SQLServer の場合 データ更新中?てことはコミットが済んだらそいつが最新データか。よっしゃちょっと待っとくわー
Oracleの場合 データ更新中?まぁでも既にコミット済みのあるじゃん、もらってくよー

といった感じの動きになる。

まとめ

snapshot オプションを ONにするとOracleぽい挙動になるとか 最近のSQLServer だとインメモリでよろしくできるらしい。
でも、ほいほいオプション変えたりバージョン上げたりは難しいので
更新系のトランザクションを短くするとか
ロックタイムアウト値を設定するなどでがんばるしかない。頑張る。