薄いブログ

技術の雑多なことを書く場所

kaniko が何をしているか, 何ができるか

TL;DR kaniko を理解してない限りコンテナから出してはいけない. kaniko を使っていればmulti stage buildだろうとCIのcacheについて余計なことを考えなくてよい (Dockerfileの書き方はcacheを意識して) kaniko とは github.com kanikoはGoogleが作っている…

CIにおけるMulti-stage Buildsのcache

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナの継続的 docker buildの改善について書きたいと思います. CIにおけるMulti-stage Builds Multi-stage Buildsについては以下の記事を参照すると良いと思います. docs.docker.com…

GoでASTと戯れる

GoでAST(Abstract Syntax Tree)を使ってソースコードを解析, 生成を行うに際してライブラリを作ったりしたので紹介したいと思います. AST Goは標準で go/ast でASTを扱うことができます. 便利なものもありますし詳しく記述されているのでgo/astのgodocを見る…

Docker Imageを小さくするために

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナの継続的 docker buildの改善について書きたいと思います. Docker Imageを小さくするために CIにおけるdocker build改善活動の一環でなぜdocker imageを小さくするのか. それは…

ちゃんと理解するdocker build cache

CIの時間を短くする活動を行っており, 特にその一部のアプリケーションコンテナの継続的 docker buildの改善について書きたいと思います. TL;DR dockerd の内部でイメージの子についての情報を持っている イメージ自体は親の情報しか持ってない cache対象の…

monorepoのdocker buildにおけるdockerignore

表題の通りなのですが, monorepoにおけるdocker buildの話です. build contextの話 まずこの問題を認識する上で必要なのがbuild contextの理解です. docs.docker.com Best practiceでも触れられている通り, build contextの概念は非常に重要です. When you i…

orisano/targd の話

github.com 上のツールを作ったので紹介します. 背景 Docker buildを高速に, そして小さいイメージを作るためにMulti-stage buildsを日々活用しています. コンテナベースのCIを使っていたり, アプリケーションをコンテナ前提で作っているとCIでDocker build…

orisano/minid の話

github.com 上のツールを作ったので紹介の記事です. 背景 僕はアプリケーションエンジニアとしてDockerfileをそこそこ書くことがあるのですが, 巷にあふれるDockerfileがRUN一つにまとめられているのがずっと不思議に思っていました. 見栄えも悪いし, これっ…

kubeletの負荷が問題になった話 (google/cadvisor)

orisano.hatenablog.com の続編です. 上の記事では以下の図の左側について書きましたが今回は右側についてです. google/cadvisorの高速化 上の図は非常に見づらいですが, 右側にgoogle/cadvisorというのが見えると思います. github.com google/cadvisorとい…

kubeletの負荷が問題になった話 (prometheus/common)

ある日, 同僚からkubeletのCPU負荷が高くて困っていると相談されたときの話です. 実際に監視しているそのkubeletのCPU使用率は高いことを確認し, 問題が起きているインスタンスの調査をはじめました. kubernetes/server.go at master · kubernetes/kubernete…

Socket.IOとGoの話

speakerdeck.com goでsocket.ioのclientを実装した話です. 背景 socket.io を使ったアプリケーションに負荷試験をしたいというのがありました. go で書きたいという気持ちとよく考えたら socket.io のことあまり知らないなという気持ちから実装してみようと…

go-swaggerを速くした話

orisano.hatenablog.com orisano.hatenablog.com github.com go-swaggerのgenerate serverを速くした話をします. 上の2つの記事であげたPRでgo-swaggerのコード生成を速くしました. 上の2つの記事ではどこが遅いか明らかになった状態からのことを書きまし…

go-openapi/swagを速くした話

github.com GitHub - go-openapi/swag: goodie bag in use in the go-openapi projects を速くしたときの話をしたいと思います. go-openapi/swag はgo-openapi と go-swagger のヘルパー関数が入っているライブラリです. 調査の結果, regexp.MustCompileが重…

go-openapi/loadsを速くした話

github.com GitHub - go-openapi/loads: openapi specification object model の速度を改善したときの話をしたいと思います. go-openapi/loadsはgoでopenapiのschemaを読み込むためのライブラリです. 調査の結果json.Unmarshalが重く,このライブラリのAnalyz…

PythonでUnicodeDecodeError/UnicodeEncodeErrorが出たときの原因調査法

Python2を使っているマルチバイト圏の人間なら一度は遭遇したことがあるであろうUnicodeDecodeError. スタックトレースに出る情報は UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) こういう出力で正…

Wiener's Attack を実装した

はじめに RSA暗号運用でやってはいけない n のこと #ssmjp from sonickun このスライドをみてそういえばWiener’s Attack実装したこと無いなと思ったので勉強がてら実装してみました. 元論文はCryptanalysis of Short RSA Secret Exponentsで 理論についての…

二辺連結成分分解

ゆらふなさんの記事を見て実装してみようと思ったので記事を書きました。 この記事ではlowlinkを使った方法でやっています。 * 2017年9月30日追記 * 二重辺と表記していましたが二辺と表現するほうが適切と判断したので変更しました. それに付随して定義など…

ICPC国内予選2016参加記

6/24(金)にあったICPC国内予選2016にICT48(@orisano,@ringoh72,@DeEn_queue)として出場しました。 結果は4完32位と去年より順位は下がってしまいとても悲しかったです。 大会前日 前日に今年用のライブラリを作ってないことに気が付き、去年のライブラリをベ…

Git Challengeに参加してきました

3/5に開催されたmixiさん主催のgit challengeというイベントに参加してきました。 参加したきっかけ @imishinist(たいさん)から「参加しないのですか???????」と煽られたのもありますが、 gitは頻繁に使うものの全然使いこなせてない感があり、そろそ…

AOJ 0568 Pasta

AOJ0568をErlangで解いてみたのでBlogを書きます。 問題の概要については省略します。 前回と同様に JOI 2011-2012 予選 問題・採点用入力 から正答することを確認しています。 -module(aoj0568). -export([main/0]). main() -> {N, K} = get_pair(), Fixed …

AOJ 0595 Schedule

何を今更と思う方もいると思いますが、AOJ0595をErlangで解いた(未確認)ので記事を書くことにしました。 追記(4:35) JOI 2013-2014 予選 問題文・採点用入出力・解説の入出力例に対してすべて正解していました。 Erlangを書くのが非常に久しぶりだったので…

第26回高専プロコン競技部門 反省会場

この記事はICT Advent Calendar 2015の7日目として書かれました。 はじめに ブログの更新は1年ぶりになります、@orisanoです。 去年のICT Advent Calendarぶりの投稿になります。 今年はいろんなイベントや大会に参加しましたし、残り短いですがまだまだ参加…

AOJ watch toolsの話

AOJ watch toolsの話 この記事はICT Advent Calendarの15日目として書かれました。 前置き どうもこんばんわ、@orisanoです。Advent Calendarで何を書こうと悩んでいましたが、 今年作ったものがあるじゃないかと気づいたのでそれを記事することにしました。…

宿題 0b1 #kagapra0715

AOJ 0569 21:31~22:24外側からラベリングして建物のセルに到達した回数を求めれば良い。 後は6近傍の時の移動が出来ればラベリングするだけ。 外側に番兵を置く実装をすると非常に楽。 僕は6近傍の時の移動ができなかったので時間がかかりました。 53分 http…

毎年恒例の年明けたから書いたコード

あけましておめでとうございます。@orisanoです。毎年恒例(1年ぶり2回目)の年明けたから書いたコードを適当に晒しておきます。去年とちょっとネタがかぶってるので来年から本気出します。 説明はしません。見たらわかると思います。http://ideone.com/0ty1OW…

僕がコードゴルフを始めたキッカケ

こんばんわ。@orisanoです。 この記事はICT Advent Calenderの20日目の記事です。 毎度毎度のことですが、 今日は僕が比較的時間を費やしている趣味である。 コードゴルフについて語りたいと思います。 始めたきっかけ 始めたきっかけはえむきょうじゅでした…

アドレスから添字を求めるのがめんどくさい

どうも、@orisanoです。今日は、bsearchという関数を使ってて思ったのですが、 ポインタから添字を求めるのってちょっとだけめんどくさいなって思いました。 ので、ソースコードを書いて、忘備録的にあげようかなと思った次第です。 以下コード typedef unsi…

渦巻き生成ってめんどくさい

どうも、72日ぶりの更新の@orisanoです。渦巻き生成っていざコードに落とそうと思うとめんどくさいって思いました。 (ICPCのD問題を見た感想)なので、てきとーに関数を作っておけばいいと思ったので作りました(てきとー可読性もひったくれも無いコード。 int…

Erlangでフィボナッチ数列求めるやつを書いてみた。

1週間ぶりくらいの更新になります。Orisanoです。最近Erlangと戦っています。 Sortを書いてみたの方はちょっと時間かかっちゃって更新できないので、 何気なく書いたフィボナッチ数列を求める記事で間を持たせたいと思います。 fib(0) -> 0; fib(1) -> 1; fi…

ErlangでいろんなSortを書いてみる part1

2ヶ月ぶりの更新になります。最近Haskellで様々なソートを 実装してみたというブログ記事を読みました。自分がやったことある関数型言語って何があったかなと 思い出してみると、そういえば 「Erlang」 があったなとふと思い出しました。それで僕もErlangで…