Con_HumiのDEV_LOG

開発メモやガジェットのことをつらつらと.

builderscon 2017 に参加しました!

8/3(金)~5(土) に開催された builderscon tokyo 2017 に参加しました。

builderscon.io

会社のスポンサー枠のチケットを利用させて頂き、初めての参加でした。 会社には大感謝です。

builderscon とは?

buildersconは「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです。 buildersconではトークに関して技術的な制約はありません、特定のプログラミング言語や技術スタックによるくくりも設けません。 引用:builderscon - Discover Something New

という、技術のさまざまな話題を扱うカンファレンスです。 YAPC Asia という Perl その他のカンファレンスの運営スタッフの方が運営されているとの事。

当記事以外にも沢山の方が参加エントリーを書いているのでそちらもご覧下さい。

Feedback - Blogs: builderscon tokyo 2017 - builderscon

感想(結論を先に)

builderscon は初参加でしたが、さまざまな分野・レイヤーのセッションがあり、 とても楽しめました。

さらに、イベントホールで提供されるコーヒーやジュース、ランチセッションの お弁当など飲食物がどれも美味しかったのが印象的でした。 豪華な朝食も提供されていたらしいのですが残念ながら朝食には間に合わなかったので 次回は絶対に早起きして朝食も食べたい!

また、他のエンジニアの方の努力の成果を聞いていろいろと高まったので、 業務に使えそうなもの/そうでないもの区別なく、幅広い分野の技術と触れ合って 楽しめたらいいなと思います。

このブログも放置気味なので活用していきたい気持ちです。

今年はスポンサー枠での参加でしたが、次回はチケットを買って参加したいなと 思いました。個人スポンサー特典の大切りしゃもじ?がチョー魅力的でした。

まとめると、
とても楽しく刺激的でまた行きたいと思ったのでまた参加します!

よろしくお願いいたします。

以下、参加セッションメモ覚書き

0日目(前夜祭)

確か内容拡散ダメだったので書けないですが、さまざまな会社のプロダクトのヤバイ話やスゴイ話を聞けました! 「わかるわかるー!!」や、「スゴーい!!!」って感じでした。

1日目

初めてのMySQLチューニング -データベースは怖くない!-

  • 資料など
    builderscon.io
  • mySQL チューニングの話
  • my.cnf 編
    • デフォルトダメ!ゼッタイ!
    • mysqltuner を使うといろいろ警告してくれる github.com
    • テーブル毎にファイルを分ける
      • ファイルアクセスが速くなる? ⇒ my.cnf に設定を書く & ダンプ・リストア
        • 仕組み的に速くならないのでは?という指摘あり。
    • 仮説・診断・設定・計測 が大切
    • チューニングは継続!
  • レプリケーション

  • 不要レコードは設計⇒退避⇒削除

  • mysql5.6 以上からは GTID が使える!

マイクロチームでの高速な新規開発を支える開発・分析基盤

  • 資料など
    builderscon.io

  • 開発スピードが速いとモック作っても意味ないことも

  • やる・やらないのきりわけが明確だとぶれないし必要最低限のものを最短の期間で作る事に近づく
    • 要件を見直して理由含めて明確にする事が大事
  • Infrastructure as Code を極力実施
  • CircleCI便利 早い
  • マイクロサービスやりすぎ良くないらしい
    • 細かく分けすぎると大変になる。
  • 可視化は redash 、redshift にデータをぶっこんでいる。
    • エンジニアではない方がRe:dashで SQL書いて実行してガシガシ分析している
      • スゴイ
  • iOSだとpush通知の許諾がされにくいが Android だと許諾率がよい
  • アプリやデバイスからのログの入り口 ⇒ AWS:kinesis
  • データで確信が持てない施策は極力許さない
    • ペルソナを想定した仮説検証より、ログから取れる数字を使った仮説検証
      • ペルソナは宝くじのようなもの、ログから取れる数字は統計的な値として使える。
  • 開発段階で最小限に機能を絞る
    • 新機能はABテストをやって、リテンションに効果のあるもの「だけ」残す
      ↑リテンションは、アプリを再度使ってくれる事
  • ユーザーが少ない段階では、母数が少なくても有効な分析だけを実施
    • むやみにさまざまな分析を行わず、手法の特製を知った上でやる

Haskellを使おう

Kubernetesのクラスタ1つに開発と本番運用に必要な環境を詰め込んだらコスパが良くなった話

  • 資料など
    builderscon.io

  • 初心者向け

  • 開発者の労力含めて安くなる話
  • 開発・本番・運用すべてk8sで実装
  • 設定をテンプレート化して外部から変数など取り込めるようにする ⇒ ksonnet
  • Ingress ← これが面白い感じだった。
    • URL のルーティング
    • リバースプロキシを簡単に構築
    • Let’s Encrypt とかと簡単に連携
    • gce-ingress-controller / nginx-ingress-controller
    • nginx-ingress-controller
      • 出来上がるものは nginx のリバースプロキシ
    • Ingress でk8sクラスタのサービスを利用する時にOAuth認証とかも出来る。
  • GitHub は無償で Organization が作れて OAuth2 のプロバイダとして利用できる
  • nginx がアクセスを全部受けていろいろルーティングする 良しなにやってくれる
  • Q&A
    • kube-lego を使おうと思ったわけは?
      • あまり比較していない
    • ECS や Docker Swarm との違いは?
      • 他のを使った事ないです
    • Kubernetes の導入前と導入後で開発コストがどのように変わったか?
      • Kubernetes を導入すると同時にマイクロサービスアーキテクチャに 変えたので効率は上がった
      • 金銭的には、GCEのプリエンプティブなノードを組み込む事ができ、 上手く使うとVM単価が8割ほど安くなる
    • Kubernetes の リソースとリミットの知見について
      • 試行錯誤中だが、正しく設定しないとメモリが溢れてVMが落ちる

2日目

ここまで出来るmruby

  • 資料など
    builderscon.io
  • 軽い
  • mruby-clicli コマンドが使える
  • 組み込み先にファイルシステムがない場合もあるのでmrbgem はコンパイルされて 1バイナリに組み込まれる
  • mruby の開発は ruby or C
    • 計算コストが低くてさらっとかけるところは ruby で書く
    • 計算コストの高い処理を実装したり、システムコールAPIを叩くところはC
  • mruby-mrbgem-template
    • mruby 開発を色々便利に書ける
  • mruby で LL のもう一歩先へ
  • mruby と自分のソースコードを一緒にガシガシデバッグしていく
    • gdb をつかう ctag とか gtag をちゃんと書いてねー
  • SEGV
    • mruby やる前は諦めてたが、mruby やったら解決できる!
  • 社内で開発するOSSあると良さそう!
  • mrbgem されていないライブラリがたくさんあって著名なコントリビュータになれる!
  • FastCertificate
    • アクセスした時点でSSL証明書を Let’s Encrypt で取得してSSL通信できるようにする。
    • エンドポイントをRedisにもたせてあればそれを使うしなければLet’s Encryptする
  • 負荷制御の自動化
  • LOLIPOP のコンテナサービス
    • コンテナが定期的に再起動
      • 良くもならないし悪くもならないのはメリット
  • madam 便利かも json で ipvsadm の設定を入れられる
  • middleware + mruby = 強い!

小さく始めて育てるコンパイラ

  • 資料など
    builderscon.io
  • 言語の処理系を作った事がある人が会場に沢山いて皆さんスゴイ
  • 自分は電卓もまともに作った事が無い感じだったので、高度すぎました…
  • ソースコードの解釈とかスゴイ難しそうだけど面白そうだなーと思いました。
  • まずは電卓作るところからはじめてみようかな…

OSSで始めるセキュリティログ収集

  • 資料など builderscon.io

  • セキュリティリスク・侵入への気づき方は外部からの指摘は多い

  • 操作ログどうする?
    • audit が良さそう
  • audit はどう取るか?
    • go-audit
      • Slack 製 json で出る
    • osquery 良さそう
      • sql で OS の中身を選択できる
  • osquery 使うと監査ログ取れるし、これサーバーだけでなくMacとか社用PCに入れても良いのではと思いました。
  • ログイン履歴から多要素認証できるの良さそう
  • 守りつつも運用負荷を軽くしたり多様性を広げる形のセキュリティすごい
  • セキュリティ担当者に聴きに来てほしい感じだった。

OSS貢献超入門

  • 資料など builderscon.io
  • まずは好きなリポジトリをウォッチ
  • ライセンスとかOSSの決まりごとはパッチとかイシュー投げてから考えようぜ!
  • ソースコードやドキュメントを追いかけることをやっていく。
    • マイナス検索
      • Qiita とか StackOverFlow 抜かしてみる
    • 正直ボク(講師)にしか参考にならなかったけどすごく参考になる本
      • 「熱血アセンブラ入門」
        Amazon CAPTCHA
      • わからなくても読み進めてみることが大事。
      • 時間を見つけて読むことが大事。
    • リポジトリをウォッチしていく
  • contribute の仕方は contribute xxx でググる!またはcontributeページを読む

docker-compose を使ってpythonの実行環境を作るメモ

しばらく更新していなかったので使い方を忘れていますが、 作業メモの投稿です。

はじめに

下記の内容は執筆時点のものです。 内容に謝りや勘違いが含まれる可能性が高いので、まさかりお待ちしております。 語尾がだ・である調ですが、作業メモということでご容赦いただければと思います。

前提環境

  • OS: Ubuntu 16.04
  • Docker: 17.03.0-ce
  • docker-compose: 1.11.2

やりたかったこと

  • Python の実行環境をコンテナに押し込みたかった。
    • virtualenv とか pyenv とかを導入するのが面倒だった。

やったこと

下記の docker-compose.yml と Dockerfile を用意した。

  • docker-compose.yml
version: "2"
services:
    python:
        build: .
        volumes:
            - "./:/usr/src/app"
        ports:
            - "8500:5000"
        command: [python, hello-flask.py]
  • Dockerfile
FROM python:3.6-onbuild
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

使い方

  • コンテナを立てっぱなしにする時
    • docker-compose up -d --force-recreate --build
  • コンテナ内で作業したい時 or ソースコードを編集しながら動作確認やデバッグをしたい時
    • docker-compose run -p 5000:5000 python /bin/bash

便利だったこと

python:X.X.-onbuild

  • python 公式イメージのうち、 onbuild というやつを使うと requirements.txt を読み込んで依存ライブラリをコンテナ何にインストールしてくれて、さらに Dockerfile と同じディレクトリのファイルをコンテナ内(/usr/src/app)にコピーしてくれる(神)

何で困ったのか

公式イメージの ONBUILD の命令を実行するためには docker-compose ファイルに image コンテキストとして記述するのではダメっぽい(imege なので build 不要って言われる) ので、1行 Dockerfile を作って build コンテキストに記述することで build 可能になり、ONBUILD の命令が実行されるようになった。

参考

画面遷移図とblockdiag

画面遷移図作ってみた話

ご無沙汰しております.

以前の記事

起床時間ログアプリ構想 - Con_HumiのDEV_LOG

で書いた起床時間ログアプリの構想を実現すべく,
とりあえずで画面遷移図のような物を作ってみました.
f:id:Con_Humi:20150313175438p:plain

とりあえず,こんなかんじかな?

ホーム画面に「起きた!」ボタンがあって,
それを押すと現在時刻を登録する雰囲気です.

ただ,ログイン失敗画面はポップアップにしたほうがいい気もします.

blockdiag使ってみた話

上の画像の作成には,blockdiag

ブロック図生成ツール blockdiag — blockdiag 1.0 ドキュメント

というツールを使いました.
Pythonで作られたツールで,pipで一発.

ホットに開発されてる感じで,
ブロック図の他にシーケンス図やアクティビティ図,
ネットワーク図も生成できるみたいです.

プログラムライクに書けるのがいい感じです.
使い方をもっと覚えればいろいろ出来そうかなと思います.

興味があったら使ってみてください.

MacBookProにCordovaの開発環境をインストール

先日,起床時間の記録アプリの構想を書きましたが,
やっぱり自分宛てメールで起床時間を記録していくのはとても不便なので,
アプリを開発してみようと思います.

開発環境整備で時間を取られる人の話

で,今の携帯電話はAndroidなので,Androidアプリを開発してもいいと思うのですが,
せっかくMacBookを使っているので,iOSにも対応したハイブリッドアプリを
やってみたいなと思いました.
(←いつも開発環境整備に時間がかかって肝心のコードがなかなか書き始まらない)

就活の時に自己アピールでMonaca IDEを使って開発した記憶があるので,
今回もMonacaを使ってもいいのですが,なんとなく自分のPC内に開発環境を
整備したかったので,そのインストールを行ったメモです.

Monaca - HTML5ハイブリッドアプリ開発プラットフォーム

Cordovaを選んだ話

Monacaで使ったPhoneGapというスマホの機能にアクセスする
ライブラリのオープンソース版であるCordovaを使った開発環境を導入しようと思います.
(昨年中に僕がMonacaを使った時はPhoneGapだったような気がするんですが,
今見たらMonacaでもCordovaを使っているのですね.)

Apache Cordova
↑これですね

いんすとろーる

Cordovaの開発環境をMacに構築する - 生きるか死ぬか、人生を賭けたアプリ開発日記

take5さんの記事を参考にさせていただき作業しました.
ありがとうございます!

大前提として,HomeBrewと言うMacOSのパッケージマネージャ的な何かが必要です.
なくても出来ると思いますが,何かと便利なのでインストールしておきましょう.

take5さんの記事にしたがって作業すればインストールできます.
Evernoteに保存しておこう!

iOSでエミュレートしてみました.

f:id:Con_Humi:20150130232445p:plain

Androidアプリを実機デバッグしたいときは,

$ cordova emulate android --device

を実行すると,実機でデバッグ出来ます.
僕はGenymotionというAndroidシステムのエミュレータを使っているのですが,
実機と同じようにAndroidSDKに認識されるので,これで動きます.

f:id:Con_Humi:20150130232339p:plain

すごーい.

マスタリングTCP/IP買ってもうた

楽天で期間限定ポイントが1500ポイントくらいあったので,
何か買わなきゃということで,マスタリングTCP/IPを買ってみました.

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

入門編なので,本当に基本的なことが多いのですが,
図が多くてわかりやすい解説で,読み進めやすいです.

まだ少ししか読めていませんが,春休みを使って読破したいと思います.

積み本が増えてる......勉強しなきゃ....

起床時間ログアプリ構想

朝早く起きたい

4月から会社員としての新生活を控えているわけで,
そしたら早く起きないといけないです.いや,早く起きたい!
いまの生活を振り返ると,10時過ぎに毎日起床していて,
寝るのは12時だったり1時だったり2時だったり.

睡眠時間を計算すると,7〜10時間は睡眠をしているはずです.
でも昼間眠かったりします.
朝早くから授業があって8時ころに起きた日のほうが眠くない気もして,
もしかして寝過ぎが原因で眠いのかな?と思ったりします.

睡眠時間のログを取ろう

まず,どうしたら早く起きれるかなと思った時に,
4月から同期になる方が起床時間の記録を取って公開しているのを思い出し,
自分もやってみたくなりました.

で,一昨日あたりから毎朝の起床時間のログを撮っています.

メモで!

ログを取るアプリを作りたい

今のところ毎日の起床時間を自分宛てにメールしたりメモに書いたりして
記録しているのですが,................面倒くさい!

というわけで,ぽちっとボタンを押すだけで,
起床時間を記録してくれるアプリが欲しいなーと思ったわけです.

睡眠ログを取るサービスはすでにあって

ねむログ★睡眠記録

とかとか.

ですが,データを自分でCSVか何かで引っ張って弄りたいのですが,
どうやらそういう機能は無さそう.

で,せっかくWEBアプリ勉強しようとしているので,
どうせだったら作ってみようかなと考えています.

仕様とか

アプリの事を妄想します.
* ぽちっとボタンを押すと,起床(できたら就寝)時間をデータベースに登録
* 起床時間をグラフ表示!
こんなもんでしょうか?
Monaca+バックエンドサービスを弄ったことがあるので,
それを使おうか,自分で一から作ろうか迷っています.
もし自分で一からやるなら,ちょうど少しかじっているPython+djangoとかでやってみたいなーとか.

以上,アプリ妄想でした.

Vagrantの環境をバックアップ/復元しようと思う

こんにちは.
開発環境をVirtualBox上に構築してVagrantで管理しようとしているCon_Humiです.

ある程度環境が構築できたら,その時点の環境をバックアップしておくことで,
困ったときに以前の環境に戻れるようにしておくと泣くことが少なくなります.

そこで,その方法を調べたのでメモしておきます.

現在の環境をバックアップする

もしゲストマシンが動いているときは

$ vagrant halt

で停止します.
そして,

$ vagrant package --output=backupXXXXXXXX.box

backupXXXXXXXX.boxファイルとしてバックアップすることが出来ます.

追記:1/18
--outputオプションをつけるとなんかエラーが出ました.

$ vagrant package

↑のようにオプション無しで実行すれば成功したので,原因調査中です.
オプション無しで実行した場合,package.boxと言うファイルが出力されます.
:追記終わり

こまめにバックアップしておけば,
困ったときに直前の環境に戻すことが出来そうです.

バックアップファイルから環境を復元する

まず,バックアップとして保存したboxファイルをvagrantに登録します.

$ vagrant add BOXNAME backupXXXXXXXX.box

もし以前と同じディレクトリとリンクさせたいときは,

$ cp Vagrantfile Vagrantfile.bak

などでVagrantfileを退避しておいて,

$ vagrant destroy

して現在のゲストマシンを削除.

$ vagrant init BOXNAME

でバックアップしたboxファイルからゲストマシンを作成します.

$ mv Vagrantfile.bak Vagrantfile

などでVagrantfileを上書すれば以前の設定も引き継がれます.(たぶん)

開発環境つかって開発しないと.........頑張ります.