できるXFD
できるXFD
2015/07/11 CI勉強会 - #vshtc
お前だれやねん?
自己紹介
![筆者近影](/presentations/2015-07-11-i-can-xfd/image/oukan.png)
三浦 一仁 (みうら かずひと)
- 通称 : みうみう、「なんで来たん?」氏
- Twitter : @kazuhito_m
- github : kazuhito-m
- 老害度 : 37歳、独身、意識低い系
- 職業 : プログラマ(SIer、ビジネスアプリ属)
- 好きなもの : 自動化、「継続的なんちゃら」
- CI/CDとか大好物
-
「楽する」ためには「苦労は厭わない」
そもそも論
CIは何のため?
- アプリを「リリース可能」な”健全なカタチ”に保つためのもの
- 期待と違うものに変遷してしまったら即知らせ、即対処「させる」ためのもの
CI導入後の効果には 二段階ある
- 道具を入れて「とりあえず回る」「気づけるようにする 」
- チームが即対応したり異常がおこらないようにする等「正常に保つ意識」をする
参考 : よく似た話「自動化の浸透プロセス」
しかし現実は…
両方の段階に「超えられない壁」的なトラップがある
- CI自体の導入がない・そんな意識も知識も無い
- それゆるされるのはn年生までだよね〜
- 「そんな(恵まれた)現場など無い!」
- 標準化の人や大規模の人がんばってw
- コケてても気付かない or 無視する
なんでなんや!
- 「人間が意識してないと気づけない仕組み」だから?
- 「気付いても無視できる」状況だから?
もうちょっと深掘ると…
「正常状態に戻す」を人にやって頂くには…
- 「やりたい」という「意欲」を作る
- 「やらなしゃーない」という「枷」を作る
「前向きでポジティブな嫌がらせ」 が必要では?
- 気づかせる
- -> 人間の五感(視覚,聴覚,触角,嗅覚,味覚)に訴えるもの
- 無視させない
- -> 「やらなしゃーない」「やらないと俺が困る」を作る
だから…
少し戻って…
「超えられない壁」のふたつ目、
の特効薬が
「XFD」
なのではないかな?
ちなみに…
「気付かせる」については別資料参照
でも「世の(現場)大半がそう」じゃない
XFDが
になってないとあかん。
だが普及してない…なぜだ!
敷居が高い?
ggrと…
とかでてくる。
さらに…
本日登壇予定でした 原田 騎郎 さんの言葉
「Software Engineer / Hardware Engineer という区別は近いうちに無くなります。
ソフトウェアを触れないハードウェアエンジニアはだいぶしんどくなりそうです。」
※疾病にて療養中。お早い回復・復帰をお祈り申し上げます。
それはわかります…でも!
「どこにでも当たり前にある(コモディティ化)」のために「普及」がさせたい…
だから、できる限り「ハードルを下げ」たい…
俺思うに
でないとあたりまえ=普及せんのではないか?
ハッカソンに冷や水ぶっかけるようなこと言ってますけどw
そこで!
こんなXFDなら…
- サラリーマンの金で片付けれる
- ギョームプログラマでも出来る
- プログラミングで何とかする
- 極力何も作らない
- 現場にスケーリング(撒く)できる
世の「あたりまえ」なくらい普及できるんでは?
コンセプト
-
No !
- No ハンダゴテ!
- No 電子基盤
- No 特殊なでっかいサーバ
-
Yes !
からの〜
一例として「CI/CDサーバ自体をXFDにする」をご紹介します。
ここからは、特に指定がなければ
- CI/CDを近所のPCサーバで
- OSは基本Linux(Ubuntu)
でやってると前提してください。
本日持って帰ってもらうもの
視覚に訴える
要は…
- USBのハブで「ポートごとの電源制御」
- USBバスパワーで
- 「つないだ途端にONになる機構」 があるものは、着けたり消したりコントロールできる
- USB電源で動くパトランプがある
と、言うのを「簡単なコマンドで」行う。 -> 多くの人ができる
プログラム的な準備
動きと解説は以下の動画
USBパトランプ回す
実用するには…
- Jenkinsに “Post build task” プラグインを入れる
- ジョブの「ビルド後の処理」に “Post build task” を追加し、「スクリプト」のとこに、スクリプトを書く
具体的なスクリプト例
#!/bin/bash
function switch_usb_buspower() {
/usr/local/bin/hub-ctrl -h 1 -P 1 -p ${1}
}
function poweron_by_interval() {
switch_usb_buspower 1
sleep 5
switch_usb_buspower 0
}
# JenkinsJob(自身ジョブ)結果取得
RESULT=`curl ${BUILD_URL}api/xml | perl -le '$_=<>;print [/<result>(.+?)</]->[0]'`
# 判定
if [[ ${RESULT} != "SUCCESS" ]]; then
poweron_by_interval &
fi
デモ
※Jenkinsからパトランプ回す例
応用編
- USB電源のやつなら…
- 例えば
- コケたらお茶を沸かす
- コケたら光る
- コケたらブザーが成る
- 朝っぱらからエレクトリカルパレード
- お昼になったらなんかチャイムが鳴る
- へそで茶を沸かす
うはっw夢がひろがりんぐww
聴覚に訴える
音声ファイル再生して知らせる
- 音楽を再生できるようにする
“aplay”など「音源再生系」コマンド入れる
sudo apt-get install alsa-tools # ubuntu/debianの場合
- sudo出来るユーザでaplay打つ
音声合成で人で知らせる
- 音声合成を「日本語で」できるようにする
git clone https://github.com/kazuhito-m/dockers.git
cd ./dockers/scripts/openjtalk_install
./setup.sh
- コマンドに文字送り込んで「日本語を話させる」
デモ
※Jenkinsから日本語を喋らせる例
統合 & 応用編
PC一つをまるごとXFD
- 小さなPCに、先ほどまでの要領で「XFDの一式」を載せる
- CI/CDサーバから叩かせる
というようなアプローチ。
具体的には…
RaspberyPIによる
「ポータブルXFD」
- RaspberryPIを使って「部屋内のスキなところにXFD」
- USB無線LAN積み「どこにおいてもいい」サーバ
- 音声は「ミニスピーカー」で
- HUBに足りない電力は「アシスト用電源」から
- 実は…完成出来てない
本日紹介した機器のお買い求め
※ RaspeeryPI でなくとも
- PC
- Jenkins
- USB-HUB(SUGOI-HUB)
- パトライト
総じて問題だったり課題だったり
- 機器の相性や電圧
- RaspberryPI等「遠隔機器」にした場合
- 実行手段をどうするか
- Jenkinsを積んで「Jenkins to Jenkins」でJobキック?
- RESTや「簡易なwebアプリ」を作ってコマンドキック?
- プロビジョニングっつーか構成管理ってーか
- 物理を扱っている以上「自動構築」が限定的になりそう
まとめ
- スゴイのは「SUGOIーHUB」!!(感想)
- 皆様も楽しい「USBバスパワー操り」ライフを♪
以上
ご清聴、ありがとうございました。
XFDアイディアソンへの誘い
どんなんします?
- 誰に何を狙うのか
- 三浦は「メンバーに『放置できない』状態を作りたい」を狙った
- どんな手段で狙うのか
- 技術じゃなくて「目で」「耳で」「痛みで」など
- ブレインストーミングのように「実現手段はある程度忘れて」「こんなんやったらいけるで!」
- ここは「自分を全開で開放して」「人生で引っかかったもの投入して」かまいません。
- それ以上行けるなら…
- 実現手段も込みで
例えば…
三浦さんの場合
- 誰に何を狙うのか
- 最近、音楽流そうが、パトランプ回そうが、サーバがしゃべろうが、無視させれるので「もう逃げ場が無いもの」がほしい
- どんな手段で狙うのか
- 名指しで捕まえたい
- 周りが「ちょw三浦やろ! ビルドこかしたんw」とかって話題になれば勝ち!
- 止めないと苦痛が伴う
+ ビルドが成功するまで「電気が走る」とか「BB弾が俺を狙う」とか
例えば…
三浦さんの場合
- 実現手段も込みで
- 名指しで捕まえたい
- 最後のコミットに含まれたユーザ名を「力いっぱい皮肉を込めて」喋らせる
- 「このうち誰かはわかりませんけど…この中に犯人は居る…んじゃないですかねぇ?w」
- 止めないと苦痛が伴う
- USBマシンガン(BB弾打つやつ)で「最後のコミットに含まれたメンバー」に撃ち放ち続ける
blog comments powered by