builderscon2017 8/4(金)
概要
- 8/4(金) 10:30~
- 慶応大学 日吉キャンパス 協生館2F
- builderscon - 知らなかった、を聞く
buildersconは「知らなかった、を聞く」をテーマとした技術を愛する全てのギーク達のお祭りです。
感想
- 朝ごはん置いてあるのがテーブル席なので手を伸ばしにくかった
- LinuxConの通路に飯が置いてあって適当に食べられるの楽で良かった
- ストレージ・ネットワーク・OSSと多岐にわたるジャンルを扱うセッションだった
- 実際に運用されているサービスの裏側的な話も多かったので実用的だと思った
- LTは実用的な話はあまりなかったがネタとして色々面白かった
- DWHのトレンドもクラウドに移行している風潮も有り、オンプレ・クラウド・ハイブリッドや、それらに対して外部のサポートをどの程度得るかなど選択肢は増えており知識を貯めていかないと厳しいと感じた
- 研究テーマでもあるOSSについては、eXtremely Distributed Software Developmentというものを知ることが出来た
- 下記セッションを選ばなかったのを少し公開している
セッション聴講記録
Opening
- YAPC::Asia TOkyo直系カンファレンス
- 経験の共有による他分野のコラボが目的
- 多岐にわたる知識の集約
- Discover somethins new
- Announcemnet
- Sponsor / Lunch Session / Best Speaker / Blogs(feedback)
B オンプレクラウドを組み合わせて作るビックデータ基盤の作り方 11:00~11:30
- リクルートライフスタイル @nii_yan / yu-yamada(gh)
- エンジニアがビジネスにどんどん突っ込んでる社風
- 分析基盤
- 300人ぐらいが分析基盤利用
- pythonとかRとか各自好きなもので分析。非エンジニアもtableau使って。
- 独自ETLフレームワーク(YAML + SQL)開発
- データのやり取り. embulkライク.
- 数千テーブルあるのでどこにデータがあるのか分かりづらい
- Meta情報管理Web(METAL KING)
- 毎日データベースの定義ファイルを収集
- カラムに対するコメントなども管理
- 社員の入れ替わりが激しいが、これにより属人性をなくしている
- リアルタイムデータはfluentd + kafka
- DWHとは?
- 列指向が多い。
- 処理はだいたい追加のみ。更新削除しない。
- DWHの検討
- DWH比較
- まとめ
- データレイク構造でデータは1箇所に集約して、エンジンは用途に合わせて選ぶようにするのが良い
- メタデータ管理は可視性の権限管理はできている?
- データベース単位での権限管理はできている
- テーブル単位ではデータを送ってないので、やっていない。出来るとは思う。
- メタデータ管理でサービスのデータ構造が変わった時に、その情報はどう管理している
- 日次で収集しているので1日遅れで最新者が見れる
- 1年前のデータと突き合わせたいというときは?
- 実データは管理しておらず、メタ情報だけ管理しているのでできない
B OSS開発を仕事にする技術 11:30~12:00
- ChatWork
- OSS開発を趣味でしたい?業務でしたい? => 比率1:2ぐらい
- モチベーション
- 良いもの作りたい
- 楽したい
- コードで認められたい
- 開発を楽しみたい
- やること
- 無理な目標を立てる
- 巨人の方に乗る
- 気をつけること
- やったこと
- 大変だったこと
- OSSのやり方についてのテンプレートがない
- XDSDが近かった(http://www.xdsd.org/XDSD-WhitePaper.pdf)
- “オープンソースソフトウェアの育て方”
- 具体的な話
A マイクロチームでの高速な新規開発を支える開発・分析基盤 13:20-14:20
- Gunosy, @timakin
- 新規事業: LUCRA
- Go/Swift iOSアプリ
- 新規事業は3か月で。人もいない。
- Party Callot
- 分析基盤に併せて実装機能を選択
- 検索やお気に入りは後回し。記事が見られて、その効果を測定できることのほうが大事。
- 中で使っているものの話中で使っているものの話
- アーキ
- iOS
- 分析基盤
- 運用・開発問わずRe:dashで開発してる
- 営業でも開発よりも効率的なSQL書ける
- 主要KPI
- 根拠なくユーザーの好みを規定しない。仮説検証が絶対。
- メンバ3人全員がフルスタックだったのか?
- 実際書けちゃうもの。気合でフルスタックになった。
- 分析に力をいれてたが、実際必要だったのか?
- Gunosyのポリシーで「数字は神」
- ペルソナもいいが、やはり主観が入りユーザー目線が語れない
- 撤退基準(データを捨てる基準)はあるか?
- 7days retensionを見て、キャンペーンを切り捨てたりする
- まずA/Bテストで切り捨てるので、本番に行ったら邪魔にならない限り消さない
- ユーザーをグルーピング(パーソナライズ)してクラスタ化してるか?クラスタ化してるならどうやってる?
- パーソナライズは検討中
- ユーザーのセグメント内で人数の増減があったりすると、少数に振り回されることがあるのでは?
- 既存プロダクトで有効だった分析手法を活用する
- 今まで、そこで困ったことは無かった
- プロダクトの進化によってデータの持つ意味が変わっていったりして難しいのではないか?ノウハウはあるか?
A Anatomy of DDoS - Builderscon Tokyo 2017 14:30-15:30
- cloudflare @SuzanneAldrich
- Evolution of DDoS
- 2012 - 300Gbps
- 2013 - 400Gbps - NTP reflection
- 2016 - 1Tbps - IoT
- Botnet
- OSIモデル
- Application Layer Attack
- IPアドレスやuser-agentが予測できない
- Protocol Attack
- 対策
- Blackhole Routes
- RateLimiting
- Filtering L7 requests with rule
- UDP flood attack
- SYN flood
- DNS flood
A RDBアンチパターン リファクタリング 15:40~16:40
事前挙手
寿命: データベース > アプリケーション
- => データベースリファクタリング(和訳版は絶版)
- データは生き物。日々変わる。
- マジカルな初期設計の上に天才が仕様追加をすると、それ以上仕様追加できない状態になる
- データベースの不吉な臭い
- 依存関係の高いマルチDBアプリのリファクタリングについて
- サービス停止の壁 -> 政治と技術で解決する
- 移行中は過去の状態を保持する -> backupやレプリケーション
- 一度作ったDBは消せない
- DBの肥大化と共に問題は大きくなる
- RDBの知識は寿命が長い
- 現状、Mongo/Postgresマルチ。Postgresに統合したい
- PostgresのJSON型に移行するのは一つの手
- FDW使えばPostgresのテーブルのようにmongoを参照できる。参照系だけでなく、更新系もカバーしてくれる。
- カラム変更中のパフォーマンス確認時に注意すべき指標は?
- merkerel使えば、はてなのプロダクトで気にしている指標は確認できる
- MySQLでは見るべき指標はたくさんあるが、中でも気にすべきものは?
- 時と場合による
- テスト。アプリケーションを通したテストはやっているが、DBを直接テストするというものはあるか?
- 3つほどある。ストアドプロシージャ、データの中身、
- そのテストを実行するのはプロダクションDB?
- 投入前、後どちらも考えられる。時と場合による
A LT 16:50~17:50
QRコード
raspi + aws iotロガー
- serverlessで座標ロガー
- 1月7円
- DynamoDB -> CSVエクスポート -> GoogleMap読み込みでUIおk
「できる!!!Validation!!!」言及・参考情報
- 欺瞞に満ちたこの世界ではValidationなんてでいないのでは
- Validationやろうとする -> 死ぬ
カンファレンスアプリ
アイドルフェスのタイムテーブル
アドテクやってるエンジニアだけど、どうしても伝えたいことがある。
- 「多重影分身広告」「老眼殺し広告」
- アドテクやってるけどうざい広告多い。
- 広告を良くしていきたい
名札とベストスピーカー
- バリアブル印刷
- パラメータ毎のQRコードを印刷できる
我輩が作ったものを淡々と
Node8.3.0について // Speaker Deck
- Node.js v8.3.0が8月中にリリース
- V8エンジンが v5.8 -> v6.0 に
- turbofunによる再低下
正規表現の変形で作る独自記法Wiki Parser - 橋本商会 - Scrapbox
JSON-LD schema.org
MS Azure
- MS Auzreの簡単な説明
- Azureに関するアンケートの結果 => https://onedrive.live.com/view.aspx?resid=D6440F2C021205C7!54874&ithint=file%2cxlsx&app=Excel&authkey=!AOqQHoi3FrPkpLY
その他、釣行していないセッションの資料
- DeepLearningによるアイドル顔識別を支える技術 / 2017-08-04 builderscon tokyo // Speaker Deck
- 横山光輝三国志 全文検索システム - Google スライド
- ブラウザ拡張のクロスブラウザ対応についてどう向き合っているか #builderscon // Speaker Deck
- Building high performance push notification server in Go // Speaker Deck
- Goで実装する軽量マークアップ言語パーサー / Gohn: parser written in Go // Speaker Deck
- Building high performance push notification server in Go // Speaker Deck
- 真のコンポーネント粒度を求めて // Speaker Deck
- 複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ // Speaker Deck
- Haskellを使おう // Speaker Deck
matterpoll-emoji for poll on Mattermost
This entry translated Qiita Entry for English learning.
What is matterpoll-emoji
?
I released the API named matterpoll-emoji
for Mattermost’s Custom Slash Command that post the message about poll.
kaakaa/matterpoll-emoji: Poll server for Mattermost
After creating poll command, you post the follow command.
/poll `What do you gys wanna grab for lunch?` :pizza: :sushi: :fried_shrimp: :spaghetti: :apple:
Then, matterpoll-emoji
posts the message about poll.
I tested matterpoll-emoji
on Mattermost version 3.7.
Usage
- Clone matterpoll-emoji
- Set your mm settings to config.json
- Run matterpoll-emoji server
- Create custom slash command on Mattermost
- Run slash command
See README.md for details.
Existing Problems
- Default one vote
- Mattermost Reaction needs one vote at least
- Recommended set bot user to matterpoll-emoji
- Mattermost API v3 based
- Mattermost released new API Version 4 (early beta release)
matterpoll-emoji
is based on API v3. API v3 will be supported until Sep. 16 2017
Mattermost Slash Command
The post started /
become “Slash Command” on Mattermost.
When typing /
on input box, then displayed the list of built-in command.
Custom Slash Command
User create new Slash Command from Integrations > Slash Commands
menu.
Setting Enable Custom Slash Commands
to true on System Console is needed.
Request Parameters
Custom Slash Command send the follow parameters to server specified on Request URL
in Custome Slash Command settings.
Creating Integrations with Commands
- Your integration should have a function for receiving HTTP POSTs or GETs from Mattermost that look like this example:
Content-Length: 244 User-Agent: Go 1.1 package http Host: localhost:5000 Accept: application/json Content-Type: application/x-www-form-urlencoded channel_id=cniah6qa73bjjjan6mzn11f4ie& channel_name=town-square& command=/somecommand& response_url=not+supported+yet& team_domain=someteam& team_id=rdc9bgriktyx9p4kowh3dmgqyc& text=hello+world& token=xr3j5x3p4pfk7kk6ck7b4e6ghh& user_id=c3a4cqe3dfy6dgopqt8ai3hydh& user_name=somename
mattepoll-emoji
parse the request parameters by golang url
package after combining dummy url.
poll_request.go#18
Response Parameters
Requested server sends the follow response to Mattermost server.
Creating Integrations with Commands
- If you want your integration to post a message back to the same channel, it can respond to the HTTP POST request from Mattermost with a JSON response body similar to this example:
{ "response_type": "in_channel", "text": "This is some response text.", "username": "robot", "icon_url": "https://www.mattermost.org/wp-content/uploads/2016/04/icon.png" }
If setting in_channel
to response_type
, then the server post the normal post to Lattermost. If setting ephemeral
, then posting the post like system message.
You set text
field the message that you wanna post.
username
and icon_url
is optional value.
That fields overrides name
and icon
of the post respectively.
Golang Driver
The server that is sent a request from Slash Command response a JSON, but that JSON cannot create any reactions to the post.
So matterpoll-emoji
use Golang Driver for creating the post and the reaction to it.
Golang Driver
has APIs about posts, users, channels and so on in model.Client
struct.
matterpoll-emoji
uses APIs about login
, post
and reaction
here.
AWS re:Invent 2016 Serverless Follow Up行ってきた
久しぶりの参加レポ。
【大幅増枠!】AWS re:Invent 2016 Serverless Follow Up - connpass
途中で「資料は公開される」と言ってました(全てとは言ってなかったけど、たぶん全て公開されるでしょう)
公開されました。 aws-serverless.connpass.com
所感
- API GatewayとMarketplaceの連携によるAPIのマネタイズは面白そう。最初のAPI提供者としてdocomoをひっぱてこれるの流石
- AI系は眉唾なので奥手になってるけど、今回発表されたAI系サービス(Lex, Polly, Rekognition)には騙されても良いぐらい面白そうだった
LambdaのC#対応でAzure Functionsを、X-RayではTwitterのzipkinを、と競合への対策だったり追従だったりをスピーディーにやってるなぁ
メモ
会場:目黒・アルコタワーアネックス 14F
What's new with Serverless @Keisuke69
- Serverlessの機能が充実してきた
- Serverless App のCI/CD
- 相談が多かった
serverless(Lambda) follow up
Lambdaに環境変数が設定できるようになった
Serverless Application Model(SAM)
- CloudFoundationのエクステンション
- Lambdaベースアプリケーションをパッケージ&デプロイ可能に
- Yaml形式で定義
- Serverless CI/CD pipeline
- CodeCommit -> CodeBuild(new) -> CloudFormation
- ICYMI
- CloudWatchの新機能
- メトリクスでのパーセンタイル解析が可能に
- AWS X-Rayとのインテグレーション
- 今は不可能。そろそろ可能になる。
- ファンクションとサービスの依存関係を可視化
- 非同期呼び出しの滞留時間とリトライを確認(zipkin的なもの?)
- Lamba追加機能
- AWS Step Function
- ファンクション・ワークフローのGUI化と高機能化
- 待ち合わせや3回以上の試行が可能に
- Lambda Bot and Amazon Lex
- Snowball Edge
- オンプレからAWSへのシンプル・セキュアな移行(物理)
- Greengrass
- Lambda@Edge(Preview)
- 「Labmda Everywhere」
API Gateway follow up
- バイナリサポート
- APIドキュメンテーション
- Swaggerインポート/エクスポート
- Marketplaceとのインテグレーション <= ***
- Developer Portalの生成
serverless エコシステム
- datadogはLambdaの監視が無料
- ログ連携に関する問い合わせが多いため、logglyとの連携なども対応
- OSS
Introducing C# in AWS Lambda
- 資料は後程公開されるらしい
- AWS Functionsへの対抗かな
- .Net 開発者へもサーバーレスの道が開けた
- .Net Frameworkでなく、.Net Coreに対応
- 様々なAPIが提供されている
その他、使い方の説明(メソッドシグニチャやファンクションの登録方法)
デモ
- VisualStudioプロジェクトテンプレート取得
- 現在提供されているテンプレートは、空のテンプレートかDynamo / Kinesis / S3を使ったシンプルプロジェクト
- NuGetパッケージの取得でエラーになるが、「復元」を押せば正常になる
- Visual StudioからLambdaファンクションの発行も可能(Webを開かなくても良い)
- S3でイベント発行 -> Labmda起動 -> CloudWatch LogsでLambda起動イベントを確認
Introducing Amazon Lex, Amazon Polly and Amazon Rekognition
- AIサービス3つ
Rekognition
- DeepLearningベースの画像認識サービス
- 物体・シーン・顔分析・顔比較・顔認識
- 物体シーン
- 画像内のオブジェクトの位置をJSON形式で返してくれる
- 物体から写真の撮られた状況も推測してくれる「LivingRoom」「indoor」
- 顔分析
- EmotionなどもJSONデータとして返す
- 顔認識
- 他の3つはステートレスだが、これはステートフル。IndexFaceを登録する。
- US-east / US-west / アイルランドリージョンのみで利用可能
- マネジメントコンソール上で手動デモ可能
Polly
- Text to Speech as a Service
- 日本語もサポート
- SSML(Speech Synthesis Markup Language)サポート
- 部分的なボリューム・ピッチの指定などが可能
- Lexicons
- 単語やフレーズの発音をカスタマイズ可能
- 記号の読みなどを指定できる
Lex
- 音声をテキストを使った対話型インタフェース
- Alexaと同等のDeepLearning技術を使用
- Versioning / Aliasのサポート
- AIを過去の履歴に戻せる
- Mobile Hubによるコネクタ
- スマホのインターフェースとしてのLexBot
- Lexで認識した情報をLambdaに渡して処理できる
Amazon Pinpoint - ユーザーをエンゲージしよう @shimy_net
- リアルタイムモバイルユーザーエンゲージメントの実現
- 1ユーザー獲得するのに$2.14かかるという調査結果
- キャンペーン・広告を打つ -> 効果測定難しい
モバイルユーザーのターゲッティングやプッシュ通知、イベントの効果測定などを一括で可能
デモ
Introduction to AWS X-Ray
- 伝統的なデバッグプロセスは本番アプリやサービス指向、MSA、サーバーレスで構築されたアプリには適していない
- サービス間連携の調査、異なるフォーマットのログの集約・分析などが大変
サービスコールグラフの可視化
- 集めたデータから自動で生成
- 各サービスで処理にかかった時間も合わせて表示
- パフォーマンスボトルネックの特定(zipkinライク)
- デモ
サーバーレスなどでサービスを跨ったサービスに効果がある
- もちろん普通のアプリでも使える
プレビュー期間は無料
「SpeakerDeckは読み込みが遅いために無言ブクマ率が多くなるのではないか」に関する考察
TL;DR
そんなこと無さそうでした。
はじめに
気になる記事を開く。
SpeakerDeckだな。
慣れた手つきでスライドページを進める。
「・・・やはりな」
10ページも捲らない時点で、次のページが開けなくなる。
画面のタッチパネルは反応している。
いつものことだ。
しばらく待てば次のページも開けるようにもなるのだが、通勤電車の時間は長くない。
貴重な時間を割いて同じページばかり見ていてもしょうがない。
「やれやれ。」
手持無沙汰を解消するためにコメントページを開く。
・・・何かがおかしい。
ブクマ数は400を越えているのに人気コメントの1位が2スター・・だと?
奇妙だ。
体感的に400ブクマも付くエントリの人気コメントは★22★
のように、スター数が数字で表されるのが普通だ。
もしや・・・
SpeakerDeckは"はてブアプリ"で閲覧し辛いがために後で読む
的に無言ブクマが多くなるのではないか
検証
はてなブックマークエントリー情報取得API - Hatena Developer Centerを使ってブクマのコメント率を計算。
https://gist.github.com/kaakaa/06f7c2d5d84bb03c492f81451570f08f
検証の対象は、下記の検索結果からブクマ数が多いエントリ上位10個をピックアップ。
(検証対象が10個だと少ないけどURLを手で拾ってくるのが面倒なので・・)
- www.slideshare.net
- speakerdeck.com
- 「はてな」で検索
結果
実際にコメント率をカウントした結果。
コメント率はコメント有りブクマ数 / (コメント有りブクマ数 + コメント無しブクマ数)
で計算。
(コメント有りブクマ数 + コメント無しブクマ数
の結果が、はてブAPIの返すブクマ数と一致しないのは何故?)
==== Slideshare Stats ==== [0.06875 0.13523809523809524 0.10790464240903387 0.18369987063389392 0.3411949685534591 0.171523178807 947 0.08357771260997067 0.16194331983805668 0.09930139720558882 0.07058823529411765] Ave: 0.14237214205901627 ==== SpeakerDeck Stats ==== [0.08148148148148149 0.10771704180064309 0.12548015364916773 0.09612141652613827 0.0974188176519567 0. 14553990610328638 0.12313003452243959 0.08122941822173436 0.13358302122347065 0.13089267803410232] Ave: 0.11225939692144207 ==== 「はてな」 Stats ==== [0.08807134894091416 0.13563501849568435 0.1425891181988743 0.14016172506738545 0.12359550561797752 0. 09342915811088295 0.5948275862068966 0.09535452322738386 0.11131221719457013 0.0596102407336645] Ave: 0.15845864417942337
単純に平均だけ見るとSpeakerDeckのコメント率が低いように見える。
が、Slideshareの最大コメント率が34.1%
、「はてな」の最大コメント率が59.4%
と異常値が混じっている。
この2つ。
はてなブックマーク - 上司が信用できない会社の内部統制 - slideshare
はてなブックマーク - ユーザーの反応に「完全に狼狽した」 はてなブックマーク、リニューアルの意図と背景 (1/2) - ITmedia ニュース
なので、最大値と最小値を除去した形で平均をとってみた。
==== Slideshare(Median) Stats ==== [0.07058823529411765 0.08357771260997067 0.09930139720558882 0.10790464240903387 0.13523809523809524 0 .16194331983805668 0.171523178807947 0.18369987063389392] Ave: 0.12672205650458798 ==== SpeakerDeck(Median) Stats ==== [0.08148148148148149 0.09612141652613827 0.0974188176519567 0.10771704180064309 0.12313003452243959 0. 12548015364916773 0.13089267803410232 0.13358302122347065] Ave: 0.111978080611175 ==== 「はてな」(Median) Stats ==== [0.08807134894091416 0.09342915811088295 0.09535452322738386 0.11131221719457013 0.12359550561797752 0 .13563501849568435 0.14016172506738545 0.1425891181988743] Ave: 0.11626857685670909
まぁ、取り立てて述べることもなく。
結論
よく分からない
Gradleがビルド結果解析サービス Gradle.com を開始していた
Gradle.comって何?
追記:名前が変わってGradle Cloud Servicesになってました。
Gradle Inc.が提供しているSaaSです(2016/6/14現在ベータ版)。
私が初めてGradle.com
の言葉を知ったのは、下記のニュース記事だったかと思います。
Gradle Grabs $4.2 Million To Expand Commercial Company Around Open Source Build System
その頃は、まだ実体もなかったため「GradleがCIサービス始めるのか〜TravisとかCircleCIとかあるし大変だろうな〜」と思ってましたが、どうやら違うようです。
Gradle.comはビルドログを解析し、可視化するサービスのようです。
Gradle.comで見れる情報はは Build Receipt
と呼ばれる下記のような情報のことです。
- いつビルドが行われたか
- エラー情報
- 各ビルドタスクの所要時間
- ビルドが実行された環境の情報
現在は、ベータ版としてサービスを利用可能であり、かつサンプルも公開されているため、実際に見てみると分かるかと思います。
なんのために?
公式アナウンスは下記のとおりとなっています。
Gradle.com makes it possible to see what’s going on in your project, how it changes over time, and shows you how to make your software better, faster, and more reliable. For the initial release, you can upload your builds to Gradle.com, and see what we call a Build Receipt: a set of useful metadata about your build that enables you to: * Look under the hood at build tasks to optimize performance * Debug a failed build with a stack trace * Get help with ability to share your build output * See information about the build environment
簡単に言うと、ビルドログの解析を肩代わりし、ビルド結果の共有をしやすくしてくれるサービスのようです。
どうやって?
Gradleプラグインcom.gradle.build-receipt
を追加し、実行時コマンドにオプション -Dreceipt
を追加してビルドを実行すれば良いようです。
plugins { id 'com.gradle.build-receipt' version '1.2' } buildReceiptLicense { agreementUrl = 'https://gradle.com/terms-of-service' agree = 'yes' }
Agreementをビルドスクリプト内に書かせてるのが独特ですね。
Agreementを記述しないで実行すると、下記エラーが発生しました。
The Gradle.com Build Receipt license agreement has not been agreed to. A Build Receipt cannot be submitted to Gradle.com without agreement to the license. To agree to the license, include the following in your root project's configuration: buildReceiptLicense { agreementUrl = 'https://gradle.com/terms-of-service'; agree = 'yes' } For more information, please see https://gradle.com/help/plugin-license. Alternatively, if you are using Gradle Enterprise, specify the server location. For more information, please see https://gradle.com/help/plugin-enterprise-config.
実行コマンドは下記。
gradle build -Dreceipt
Run your Build内の「What will happen when I do this?」のリンクにあるように、ビルドに関する情報をgradle.comに送信しています。
ただ、ソースコードの内容や認証情報などはcaptureしないと明記されています。
ビルドが成功すると、ログの最後にBuild Receipt
のURLが出力されます。
kaakaa@kabu:~/build/pants$ ./gradlew build -Dreceipt :compileJava Download https://repo1.maven.org/maven2/org/slf4j/slf4j-parent/1.7.21/slf4j-parent-1.7.21.pom Download https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar :processResources UP-TO-DATE :classes :jar :assemble :compileTestJava :processTestResources UP-TO-DATE :testClasses :test :check :build BUILD SUCCESSFUL Total time: 6.188 secs Publishing build information... https://gradle.com/r/xxxxxxxxxxxxx
出力されたリンクをブラウザで開くと、認証画面が出てきました。
メールアドレスを入力すると、入力したメールアドレスにリンクが書かれたメールが飛び、そのリンクから自分のBuild Receipt
を確認することができます。
(グローバルIPまで見えちゃうんだなぁ・・・)
感想
Build Receipt
で見れる情報は、基本的にビルドログから分かる情報なので過度に期待するものではないと思います。
ただ、チームで開発している場合、ビルド実行時の環境情報も取得できるので、ビルドエラーが発生したときの解析に役立ちそうだと思いました。
「何もいじってないのにビルド通らなくなった・・・」 -> 「ビルドレシート見せてみ?」
手を加えるのも、プラグインとAgreementを記述するだけなので負担も少ないです。
おわりに
Gradle Inc.のようなビルドスクリプトを提供する組織にとって、実際にどのようなビルドが行われているかは今後のプロダクトの方向性を決定するためにも重要な情報になるはずです。
ただ、ビルド結果を解析するためにCIサービスを提供するとなると、ビルドを実行するためのマシンリソースを潤沢に用意しておかねばならなくなり、相当大きな負担が生じるはずです。 そこで、ビルドログを解析するだけのサービスであれば、基本的にはテキストデータのみなので用意すべきマシンリソースは少なく済むはずです。
「ビルド」というものに注目すべきプロジェクトとしては、目の付け所がさすがだという印象を受けました。
jade4jでbootstrapのgridが上手く書けない
neuland/jade4j: a jade implementation written in Java
jade4j、というかインデントで構造を表すテンプレートエンジンで、下記みたいなHTMLを出力したいんだけどやりかたが分からない。
<div class="row"> <div class="col-md-4">余市</div> <div class="col-md-4">角</div> <div class-"col-md-4">響</div> </div> <div class="row"> <div class="col-md-4">ボウモア</div> <div class="col-md-4">ラフロイグ</div> <div class="col-md-4">アードベッグ</div> </div>
余市、角、響・・・などの文字はリストで渡されているものとする。
なんのことは無いbootstrap的なGridレイアウト。
ただ、3要素ごとにrow
クラスのdiv
タグを出力したいだけ。
each w,i in whiskeys if i % 3 == 0 .row .col-md-4 #{w}
とかって書くと、row
とcol-md-4
が同じインデントで出力されてしまうので、row
の意味が無くなってしまう。
と書いてる内にgrid
を検索ワードに含めて調べれば良いことに気づき、調べてみると下記リンク。
html - Jade each iteration modulus for responsive Twitter Bootstrap - Stack Overflow
これだと、3の倍数のリストを渡すようにすれば良いということらしいが、ビューとコントローラーの暗黙的な結合度が高くなるので気持ち悪いなぁ…。
jadeと同じくインデントで階層を表すhamlで調べてみた。
haml - How to create a helper for build grids in Ruby On Rails - Stack Overflow
Rubyにはeach_sliceなるメソッドがあるのね…。
今使ってるのはJava・・・。
実装しようとしたけど上手く出来なそうなので、一旦寝かしておこう。
docker rmを楽に実行したかった
docker rm
の引数にコンテナID渡すのが面倒。
なので、peco使ってインタラクティブにコンテナID選択できるよう下記のaliasを設定した。 peco で Docker の container ID を楽に選択する alias - Qiita
だけど、普通にdocker rm `P`
とかで実行しようと、alias実行で取ってきたコンテナIDをコマンドで実行しようとしてしまうのでうまく行かない。
kaakaa@kaakaa-System-Product-Name:~$ docker rm `P` 138a67d406ca: コマンドが見つかりません docker: "rm" requires a minimum of 1 argument. See 'docker rm --help'. Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...] Remove one or more containers
ちょっと悲しいけど docker rm `echo P`
することでzsh上なら動くようになった。
ただ、自分のbash環境だと上みたいなエラー・・・。
これで良いのか感が拭えない。