forget for get

覚えるために忘れる

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つ
アニメーションは控えめに、
視点誘導のために使う。
色使いもシンプルに(色の意味も意識する)

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

改行の位置もとても大事

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

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

 

話術

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

アイスブレイク

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

 

git diffでワード、エクセル、パワーポイントの差分を見る

Apache TikaでOfficeファイルのテキスト差分を見る

gitでWord, Excel, PowerPointなどのOfficeファイルを管理していると、
変更があっても、どこが変更されたのかわからず、確認が面倒。

Apache Tikaを使うと、Word, Excel, PowerPointなどからテキストを抽出し、
その差分を表示することができます。

(追記)WinMergeプラグインを使った方が簡単

WinMergeでワード、エクセル、パワーポイントの差分を見る - forget for get

インストール手順(Windows

http://archive.apache.org/dist/tika/

からtika-app-1.17.jarをダウンロード。

 

任意の場所に配置(C:\Program Files\Git\bin)

 

インストール手順(Mac

brew install tika

 

gitの設定

プロジェクト直下のgitの設定ファイルを追加・編集
.git/info/attributes

*.pptx diff=tika
*.docx diff=tika
*.xlsx diff=tika

.git/config

[diff "tika"]
  binary = true
  textconv = java -Dfile.encoding=UTF-8 -jar 'C:\\Program Files\\Git\\bin\\tika-app-1.17.jar' -t

これで、Git ExtensionsやSourceTreeでもワード、エクセル、パワーポイントのテキスト差分を確認できるようになります。
Apache Tika便利!

 ※javaをインストールしてなかったらjavaをインストールしてください。

Windows10+Vagrant+VirtualBoxでrsyncが失敗する

ちょっと前まで動いてたWindows10+Vagrant+VirtualBoxの開発環境が、急に動かなくなった。

vagrant upしたら以下のようなエラーが、、

==> default: Rsyncing folder: /cygdrive/d/vagrant/cent6/ => /vagrant
There was an error when attempting to rsync a synced folder.
Please inspect the error message below for more info.

Host path: /cygdrive/d/vagrant/cent6/
Guest path: /vagrant
Command: "rsync" "--verbose" "--archive" "--delete" "-z" "--copy-links" "--chmod=ugo=rwX" "--no-perms" "--no-owner" "--no-group" "--rsync-path" "sudo rsync" "-e" "ssh -p 2222 -o LogLevel=FATAL -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i 'D:/vagrant/cent6/.vagrant/machines/default/virtualbox/private_key'" "--exclude" ".vagrant/" "/cygdrive/d/vagrant/cent6/" "vagrant@127.0.0.1:/vagrant"
Error: This rsync lacks old-style --compress due to its external zlib. Try -zz.
Continuing without compression.

 

cygdriveってパスになってるけど、Cygwinを入れた覚えはないのだが、、

ググってStackOverFlowとか見たけどなかなか解決策にはたどり着けず、

vagrant,virtualboxの最新版をインストールし直したり、

Windowsのアップデートもしたけど、解決せず、、

 

最終的に以下の記述で治りました。

config.vm.synced_folder "./", "/vagrant", type: "virtualbox"
config.vm.synced_folder "./vmshare", "/vmshare", create: true, type:"virtualbox"

2行目の設定はもともとあったのだけど、1行目の設定もデフォルトの設定の上書きとして必要みたい。。

 

 

monthly.jsを使って俺の嫁リストにカレンダー表示機能を追加

monthly.jsを使って俺の嫁リストにカレンダー表示機能を追加してみました。

 

↓こんな感じ。

新垣結衣カレンダー

 

年末年始、本屋さんとかでカレンダーを見かけることも多くて、

ふと、好きな画像でカレンダー作れたらいいなと思って、

キーワードからgoogle画像検索でひっかかった画像を表示するサイト「俺の嫁リスト」があったので、

そこにカレンダー表示機能をつけてみたらそれっぽいのができると思って、作業開始。

 

カレンダー表示するjQueryプラグインとして、fullcalendar.jsを使ったことがあったので、今回も使おうと思ったのですが、レスポンシブ対応してないようなので、

レスポンシブ対応しているmonthly.jsを使いました。

 

githubhttps://github.com/kthornbloom/Monthly

デモ:http://kthornbloom.com/monthly/

 

Quick Startに書いてある通りでほぼ完成。

<link rel="stylesheet" href="css/monthly.css">
<div class="monthly" id="mycalendar"></div>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/monthly.js"></script>
<script type="text/javascript">
    $(window).load( function() {
        $('#mycalendar').monthly();
    });
</script>

 

月の切り替えで画像を入れ替えるために、

.monthly-prev、.monthly-next、.monthly-resetのクリックイベントを拾うくらい。

.monthly-resetのクリックイベントだけ拾えなかったのですが、

monthly.jsでクリックイベントがキャンセルされていたので、コメントアウトして対処しました。

//event.stopPropagation();