ばったログ

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

[読書メモ][技術書典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 だとインメモリでよろしくできるらしい。
でも、ほいほいオプション変えたりバージョン上げたりは難しいので
更新系のトランザクションを短くするとか
ロックタイムアウト値を設定するなどでがんばるしかない。頑張る。