forget for get

覚えるために忘れる

Laravel EloquentでModelをgetしたときに配列のキーをidにしたい

たとえば、

$channels = Channel::get();
[0]=>"id"=>4,"name"=>"日本テレビ"
[1]=>"id"=>8,"name"=>"フジテレビ"

フジテレビが欲しいときに、

$channels->where('id',8);

としていたのを

$channels[8];

で取れるようにしたい

$channels = Channel::get()->keyBy('id');
[4]=>"id"=>4,"name"=>"日本テレビ"
[8]=>"id"=>8,"name"=>"フジテレビ"

ロリポップでLaravelをSSHを使わずにFTPでアップロードする

ロリポップでLaravelを使いたい

ロリポップでLaravelを使おうと、アプリケーションのディレクトリをそのままFTPでアップロードすると、
vendor配下のファイルが多過ぎて死ぬほど時間がかかる。

SSHを使わずに

SSHが使えると、composerでlaravelをインストールできるけど、
スタンダード未満のプラン(エコノミー、ライト)だとSSHは使えない。

zipをFTPアップロードして解凍する

そこで、アプリケーションのディレクトリをzipで圧縮してFTPでアップロード、
それを解凍しました。

解凍はphpからunzipコマンドを実行。
以下のようなファイルを作って、ブラウザからアクセス。

unzip.php

<?php
    $zipfile = "laravel.zip";
    return shell_exec("unzip $zipfile");

解凍が終わったら、念のためunzip.phpは削除しておく。

phpからコマンド使えるなら、unzipじゃなくて、composerでlaravelをインストールできるのでは、、

GitExtensionsをインストールして日本語化

githubからインストーラをダウンロードしてインストール

Downloadsの項目から最新バージョンのダウンロードページへ行く。

Windowsなら.msiを選べばいい。

github.com

 

日本語化する

上記ダウンロードページからSource code(zip)をダウンロードする。

GitUI/Translation/配下にある

Japanese.Plugins.xlf
Japanese.gif
Japanese.xlf

をGitExtensionsのインストール先のTranslation配下に置く。

 

GitExtensionsを起動して、

ツール(tools)→settings→外観(appearance)で

言語(language)をJapaneseにする。

 

 

 

Chainer初心者向け入門

Chainerビギナーズハンズオンに行ってきました。

chainer.connpass.com

 

ディープラーニングフレームワークChainerを使ってみるハンズオン。
GoogleColaboratoryという無料で使えるオンライン環境でサクッと試せました。

2時間ちょっとで画像判定ができるようになりました。

 

以下の動画とスライドで追体験できるので、ディープラーニングに触れてみたい方はぜひ。

youtube ライブ配信

スライド

www.slideshare.net

 notebook

 https://chainer-colab-notebook.readthedocs.io/ja/latest/notebook/hands_on/chainer/begginers_hands_on/00_How_to_use_chainer_on_colaboratory.html

 

 

 

Cookpad Tech Kitchen #20 クックパッドのマイクロサービスプラットフォーム現状

Cookpad Tech Kitchen #20 クックパッドのマイクロサービスプラットフォーム現状

cookpad.connpass.com

 こちらのイベントに参加してきました。

場所は恵比寿ガーデンプレイス
11月だというのに、クリスマスツリーが!

f:id:lightwill:20181129213137j:plain

 

小野大器「サービスメッシュの構築と運用」

サービスメッシュって概念も初めて聞いたのですが、
Istio,envoy,Prometheus,Grafanaなど初めて聞くツールがたくさん出てきました。
スライドが英語で書かれているし、ほぼほぼ何言ってるか理解できず、
単語だけ拾って後でググろうと思って聞いてました。

クックパッドブログに今回の内容と同じようなものがありました。

Service Mesh and Cookpad - クックパッド開発者ブログ

 

岩間 雄太 「gRPC in Cookpad

マイクロサービスではRESTよりRPC
Protocol Buffers サービスのインターフェース定義 IDLで記述
RubyでgRPCだとgrpc gem
→CPUを使いきれない、Graceful Shutdownがない
→自作でgriffin
今後はカナリアリリースとかできるようにしたい

関係ないけど、以下の記事も参考になるかと。

REST APIの設計で消耗している感じたときのgRPC入門 - Qiita

 

鈴木 康平「Amazon ECS の安定運用のために」

hako(自作ツール)でデプロイ
オンデマンドとスポットは1:4くらい
スポットインスタンスの方が安い
Fargateは起動が遅い→起動したままのWebならいいけど、バッチジョブだとつらい
自前のオートスケール

コンテナのログはfluentd→S3→Athena AWS Glueで目次更新
CloudWatch Logsだとログが膨大だとリアルタイムで入りきらない、S3に比べて高価

モニタリングはcAdvisorでメトリクス取得
Prometheus→Grafana

 

QA

マイクロサービス化するタイミングは?
組織が大きくなってきたら、コミュニケーションコストが高くなってきたら。
2000人とかなら有効。
あるいは200人とかでも将来2000人目指すならやってもいい。
マイクロサービス化するにはコストがかかるので、コミュニケーションコストとの兼ね合いで判断。

 

懇親会

f:id:lightwill:20181129213321j:plain

さすがクックパッドさん、おいしい料理でした。

 

感想

内容がハイレベル過ぎてなかなかついていけなかったですが、良い刺激を受けました。
私もシアトルで登壇できるエンジニアになりたいものです。。

LaravelのSeederで関連テーブルの値を入れてダミーデータを作成

最初に関連テーブルの全データを取得しておいて、
ダミーデータ作成時に、取得しておいた全データからランダムにデータを取得して利用する。

$users = App\User::select('id','name')->get();
$factory->define(App\Post::class, function ($faker) use ($users) {
    $user = $users->random();
    return [
        'user_id' => $user->id,
        'user_name' => $user->name,
        'title' => $faker->sentence,
        'body' => $faker->paragraph,
        'post_datetime' => $faker->dateTimeThisMonth
    ];
});

 

・以下、ダメなパターン
1つのダミーデータ作るためにUser全検索が毎回されるのは無駄で時間がかかるのでボツ

$factory->define(App\Post::class, function ($faker) {
    return [
        'user_id' => App\User::all(['id'])->random(),
        'user_name' => App\User::all(['name'])->random(),
        'title' => $faker->sentence,
        'body' => $faker->paragraph
    ];
});

澤円さん(マイクロソフト エヴァンジェリスト)のプレゼン術

第3回CodeIQ感謝祭「春のエンジニアまつり」での
マイクロソフトエヴァンジェリスト・澤円さんのプレゼン術の講演内容を
まとめました。

概要

・ビジョン
・核
・話術
why、what、how

ビジョン

プレゼン後、聴衆にどうなってほしいか
相手を行動させる。
未来を描け

ビジョンが最も大事!

プレゼン後聴衆がワンセンテンスで内容を説明できるもの。
他の人にどうしても教えたくなってしまうもの

シンプルであること
冗長な表現は避ける
数字を強調
詳細は添付資料で

アクションの明確化

スライド1枚にテーマ1つ説明3つ
アニメーションは控えめに、
視点誘導のために使う。
色使いもシンプルに(色の意味も意識する)

文字を閉じ込める
画面は広すぎるので詰め込まない

改行の位置もとても大事

イメージがつながる画像を使う
セキュリティ→鍵とか盾とか

最後に
トドメの印象付け
時間調整
途中参加の人にも伝わる

 

話術

口癖を意識する
動画撮影して確認する
バリエーションを増やす

アイスブレイク

堂々と見せるテクニック
話す速度よりもゆっくりと歩く
手の動きで大きく見せる