2017-10-08 log
PHP 7 Up and Running: Scalar Typehints
declare(strict_types=1); setisValid(bool $valid) { } setIsValid('aaaaaa'); -> Fatal Error
setisValid(bool $valid) { } setIsValid('aaaaaa'); -> it works
2017-10-07 log
JSON Server使いこなし 第1回 モックサーバーの起動とリソース処理
JSON Server使いこなし - モックサーバーの起動とリソース処理 | CodeGrid
GitHub - codegrid/2017-json-server
JSONを用意するだけでAPIのモックサーバーが用意できるなんて便利
JSON Server使いこなし 第2回 クエリの指定とリソースパスの変更
きちんと学ぶユーザーインターフェース 第1回 タブUI:効果と副作用
きちんと学ぶユーザーインターフェース 第2回 タブUI:情報をまとめる 1
きちんと学ぶユーザーインターフェース 第3回 タブUI:情報をまとめる 2
きちんと学ぶユーザーインターフェース 第4回 タブUI:デザインする 1
きちんと学ぶユーザーインターフェース 第5回 タブUI:デザインする 2
きちんと学ぶユーザーインターフェース 第6回 タブUI:実装されることへの考慮
ES2015標準のデータ構造 第1回 Map
MapにArrayのfilterやmapを使用したい例 奇数の要素だけを取得して再度Mapに変換
const oddMap2 = new Map( [...someMap].filter(([key, value]) => value % 2 !== 0) );
ES2015標準のデータ構造 第2回 Set
const source2 = [1, 2, 3, 42]; const source3 = [3, 42, 4, 5]; const union = [...new Set([...source2, ...source3])]; // [1, 2, 3, 42, 4, 5]
ES2015標準のデータ構造 第3回 WeakMapとWeakSet
おすすめライブラリつまみ食い 第2回 Underscore.js:メソッド
おすすめライブラリつまみ食い 第3回 Underscore.js:Functions
おすすめライブラリつまみ食い 第4回 RequireJS:基本
おすすめライブラリつまみ食い 第6回 Isotope
おすすめライブラリつまみ食い 第7回 jQuery throttle/debounce
おすすめライブラリつまみ食い 第8回 Highcharts
おすすめライブラリつまみ食い 第9回 is.js
おすすめライブラリつまみ食い 第10回 axios
おすすめライブラリつまみ食い 第11回 Highstock:導入と日本語向け設定
https://github.com/codegrid/2016-highstock/blob/gh-pages/01/demo_highstock02.html
2017-10-06 log
EPISODE 31 Sorting Posts By Tags
$route->add('/posts/tags/{tag}', 'TagsController@index')
TagsController function index(\App\Tag $tag) { $posts = $tag->posts; return view('posts.index', compact('posts')); }
class Tag extends model { public function getRouteKeyName() { return 'name'; // $route->add('/posts/tags/{tag}', 'TagsController@index') -> 普通idの値で取得するが、nameで取得できるようになる }
EPISODE 32 Eventing
効率的なWebアプリケーションの作り方 5章~11章
4章までのオブジェクト指向設計の応用で5章以降も解説してほしかった。Symfonyアプリの解説になってしまって個人的には残念。
php-rentacar/src/Acme/RentacarBundle at master · fivestar/php-rentacar · GitHub
CodeGrid Babelの手ほどき- 第1回Babelとは
ES6構文をES5に変換
Babelの手ほどき - Babelとは | CodeGrid
CodeGrid Babelの手ほどき- 第2回 さまざまな環境で使う
babelのpolyfill -> ES6の構文ではなく、新APIをES5に変換
Babelの手ほどき - さまざまな環境で使う | CodeGrid
おすすめライブラリつまみ食い 第1回 Moment.js
おすすめライブラリつまみ食い - Moment.js | CodeGrid
TestCafe入門 第1回 TestCafeとは
TestCafe入門 - TestCafeとは | CodeGrid
WebDriverを使用しないE2Eテストフレームワーク 導入が容易 かなりよさそう テスト記述例 https://github.com/codegrid/2017-testcafe/blob/master/01/test.js
TestCafe入門 第2回 テストの基本
デバッグ機能が素敵
TestCafe入門 第3回 実践的なテストのために
リモート機能が素敵。Parallel上のIEブラウザでもテストができそう。
2017−10−06 log
EPISODE 29 Session Handling and Flash Messaging
session()->flash('message', 'hello world'); $request->session('message', 'default message here'); $request->session(['message', 'set value to message key']);
EPISODE 30 Tags and Pivot Tables
posts + tags => belongsToMany
class Post extends Model { public function tags() { return $this->belongsToMany(\App\Model\Tag::class); } } $post = \App\Model\Post::find(1); $tag = \App\Model\Tag::find(1); $post->tags()->attach($tag); $post->tags()->detach($tag);
効率的なWebアプリケーションの作り方 1章~4章
- 2章
- 抽象と実装
役割を持たせたいメソッドを定義。この時点でどんな中身かは気にしない。その役割をプラグラミングに落とし込んだものを実装。役割を持たせるものを定義するのを抽象。
- 抽象とインターフェース
抽象が定義されていることを保証するために用意されている仕組みがインターフェース
2-2-1の説明が重要 分かりやすい!
メソッドの実装は何も考慮しなくてよい。中でどのようなフィールドを持って、外部にリクエストしてデータを取ってくるようなどのような処理をしようが、何の役割を担ってくれるかだけを気にすれば良い。プラグラミング的に考えると、何を引数にとって、何を返してくれるかという抽象的な点についてのみを気にすれば良い。役割を担ってくれた側の状態や振る舞いなどを隠蔽することを(その結果を?)カプセル化と言う。
- アクセサのメリット、カプセル化のメリット 説明が分かりやすい!
変更する箇所が狭められる
メンタルモデル
ドメインにどのようなオブジェクトが存在し、どのようにオブジェクトが作用するかを考えてアプリケーションを設計するか
- インターフェースを中心に設計する
実装と抽象を分離することがオブジェクト指向で開発するコツ。
- 継承
継承を使った際に注意することは、継承基の親クラスの振る舞いを維持しているかどうか。親に対してできる処理は子でも行える必要がある。この決まりを守らないと、メソッド呼び出しに失敗したり、おかしな条件分岐があちこちに記述されているなどの問題につながる
- 委譲
抽象を再利用したい場合は継承を、実装を再利用したい場合は委譲を
- オブジェクト指向設計原則
- オープン・クローズドの原則 説明分かりやすい!
- 実装に依存しないで、抽象に依存する