CubicLouve

Spring_MTの技術ブログです。https://github.com/SpringMT (http://spring-mt.tumblr.com/ からの移転)

CNDT2019振り返り

スライド順とか気にせずにまとめていく Kubernetes に Audit log を求めるのは間違っているだろうか? speakerdeck.com Falcoの連携はよさそう。 今、stackdriver loggingでむりやりやっているところをうまくFalcoにまとめていきたい Kubernetes に Falco を…

CloudNative Days Tokyo 2019 で「Deep Environment Parity 環境の一致について」というタイトルで発表しました

CloudNative Days Tokyo 2019 で「Deep Environment Parity 環境の一致について」というタイトルで発表しました。 運営の皆様、発表する機会をいただき本当にありがとうございました! また、スタッフ、スポンサーの皆様お疲れ様でした! 発表資料は以下です…

Kubernetes The Hard Wayを和訳しました

会社でKubernetesワイワイ会なるものを毎週やっていて、その活動の一環で個人的に翻訳していた Kubernetes The Hard Way をみんなでやってみたところ好評だったので公開するとこにしました! springmt.github.io 原著者の Kelsey Hightower (@kelseyhightowe…

Google Cloud Buildでkanikoを使ったときにハマったこと

GCP

先日のリリースを見て、早速自分の環境でもkanikoを使ってみることにしました。 cloud.google.com 結果、Railsのプロジェクトで、Docker imageのビルド時間はキャッシュが効いている場合はそうでない場合に比べて半分くらいになりました。 まあ、ビルド時間…

JapanContainerDays v18.12で「1人でできる
Docker Kubernetes(GKE)を
使った新規サービス立ち上げ」というタイトルでRailsアプリをGKE上で運用した事例の紹介をしました

JapanContainerDays v18.12 で「1人でできる Docker Kubernetes(GKE)を 使った新規サービス立ち上げ」というタイトルでRailsアプリをGKE上で運用した事例の紹介をしました。 運営の皆様、発表する機会をいただき本当にありがとうございました! また、スタッ…

【Fixed】 docker official rubyの中で、2.5.1-stretch、2.5-stretch、2-stretch、stretch、2.5.1、2.5、2、latest のtagが付いているイメージにおいて、OSがdebian stretchではなくdebian jessie でビルドされていた

期間 2018/6/6 10時頃 (JST) 〜 2018/6/7 3:00頃 (JST) 対象 docker official rubyの中で、2.5.1-stretch 、 2.5-stretch 、 2-stretch 、 stretch 、 2.5.1 、 2.5 、 2 、 latest のtagがついているイメージ https://hub.docker.com/r/_/ruby/ 状態 OSがde…

Rubyのお気持ちを読む

Rubyのお気持ちが分からないことがたまにありますよね。 このスクリプトで最終的になにが表示されるでしょうか。 class A attr_accessor :foo def bar foo = baz(foo) foo end def baz(v) v end end a = A.new a.foo = 1 p a.bar # ここで表示される値は? 答…

Macで自分のRubyのプロセスのrssを調べるには

bugs.ruby-lang.org このチケットをみていて、Macで同じことをどうやるか?を考えてみました。 Macには/procがありません。 % ruby -rzlib -e'END{puts File.readlines("/proc/self/status").grep(/RSS/)}' -e'd=Zlib.gzip("data"); 100_000.times{Zlib.gunz…

Array#samplesの実装を追う(途中)

candidates = [ 'hoge', 'foo', 'bar', 'Sring_MT' ] puts candidates.sample のようなスクリプトでなぜか自分がよく当たるような気もしたので、Array#sampleの実装を追ってみた。 instance method Array#sample (Ruby 2.4.0) source メソッド定義場所はここ…

Google SpreadsheetのJOINみたいなことがしたかったのでgoでコマンド作った

今まで改行された標準出力から、grepのOR検索するための条件を作るためにperlでゴニョゴニョしてました。 (他にもいい方法あるかな。。。) % echo "test\ntest\ntest" | perl -e 'my @list; while (my $m = <>) {chomp($m); push @list, $m}; print join("\\…

slack APIで自分がjoinしているチャンネル一覧取得

token取得 api.slack.com レガシーなのでいつdisableになるかわからないですが。。。。 id取得 curl -s -XPOST 'https://slack.com/api/users.list?token=#{自分のToken}&pretty=1' | jq -r '.members[]|"\(.id) \(.profile.email)"' | grep '登録しているメ…

tmpwatchについて

よく忘れるので、整理しておく。 tmpwatchコマンド コマンドは/usr/sbin/配下にあります。 使い方は下記の通り。 $ tmpwatch [option] [hours] [dirs] dirsの指定にはワイルドカード(*)が使えます。 基本的に空dir、ファイル、シンボリックリンクを削除する…

MySQLに数百万件のテストデータを作る方法

お手軽にMySQLにダミーデータを作る方法です。 INSERT INTO hoge SELECT * FROM hoge; を繰り返す スキーマ gist.github.com (プライマリキーなしというありあえないテーブルで試しています。。。) 結果 gist.github.com 1280000 rows作るのに1分かからない…

bundlerを使っていて、'/' is not writable. Bundler will use '/tmp/bundrer/home/unknown/' as your home directory temporarily.` と出たときの対応

daemontools経由等で、デーモンのプロセスを立ち上げるときに、プロセス内でbundle exec hogeなどのコマンドを実行すると、 '/' is not writable. Bundler will use '/tmp/bundrer/home/unknown/' as your home directory temporarily. のようなwarningメッ…

MAC(メッセージ認証コード)とは

MAC(Message Authentication Code メッセージ認証コード)について、整理してみました。 (MACアドレスのMACはMedia Access Controlの頭文字なので同じ文字面ですが全然意味が違いますね。) MACは自分に届いたメッセージが送信者が意図した通り(改竄されてない…

Macでクラッシュレポートを見る

Mac

MacでC++書いててSEGVとかを起こしたときのクラッシュレポートの置き場所をいつも忘れるのでメモ /Users/:user/Library/Logs/DiagnosticReports /Library/Logs/DiagnosticReports この配下にある.crashを見る

stackprofの原理

stackprofがどうやってプロファイルを行っているかを追ってみます。 プロファイルするコードは下記を使います。 stackprof/sample.rb at master · tmm1/stackprof · GitHub 自分用のメモなので、間違い等があるのはご容赦ください。。(随時ブラッシュアップ…

BazelでC++をビルドする

以前Bazelの入門の記事をかきましたが、今回はC++をビルドする環境を作成してみます。 spring-mt.hatenablog.com 下記のチュートリアル通りにやっていきます。 Build Tutorial - C++ - Bazel まずはexampleをcloneしてやっていくのですが、前回やった残りの…

Q4MのConditional Subscriptionのベンチマーク

Q4MのConditional Subscriptionを使う前にベンチマークを取ってみました。 Q4M - Tutorial マシン Model Name: MacBook Pro Model Identifier: MacBookPro13,2 Processor Name: Intel Core i5 Processor Speed: 2.9 GHz Number of Processors: 1 Total Numbe…

Bazel入門

Bazelとは Googleが内部で利用していたビルドツールのオープンソース版として提供されているものです。 Bazel - a fast, scalable, multi-language and extensible build system" - Bazel FAQ - Bazel ビルドやテストの高速化を目指して作られています。 C++…

ログについてのまとめ

ログとは 時系列順になっているデータのこと。 全てが過去に発生する。 データログ - Wikipedia ログ取得の目的 記録・履歴(点) 事象単体が意味を持つ場合に、時刻を含めてそのときの状況のデータを記録する 例 エラーログ クラッシュログ 変化量を捉える(線…

Ruby2.4に上げたら"ArgumentError: key must be %d bytes" のエラーが出るようになったことの調査と暗号化の復習

Rubyの2.4以上から、共通鍵暗号を扱うOpenSSL::Cipherにおいて、暗号化鍵と初期化ベクトル(IV)を設定する際に、指定した暗号化方式の鍵長のビット数を超えて指定した場合、ArgumentErrorを返すようになりました。 irb(main):001:0> require 'openssl' => tru…

壊れたgzipを調べたときのメモ

壊れたgzipがあり、展開できないと言われて調査したときにどうやったかのメモ gzipとは www.gzip.org www.futomi.com zcatで展開できるところまでしてみる zcatは破損した位置までのデータを修復できる。 展開できたデータの最後を確認して修復する。 バイナ…

CloudWatch Alarms の Treats Missing Dataの意味

よくわからかなかったので整理 docs.aws.amazon.com configure(コンソール) configure(api) 意味 英文 Missing missing 過去に遡ってデータを見に行く the alarm looks back farther in time to find additional data points Good notBreaching 欠落データポ…

AWSを触り直したときに参考にした記事

www.slideshare.net recipe.kc-cloud.jp www.server-memo.net qiita.com qiita.com

特定のJSONの圧縮効率を調べてみる(snappy、gzip、xz、lz4、zstd)

snappyが入っているのは察してほしい データの詳細は後で書く。(これも察して欲しい。だいぶ偏ったデータではある) これから詳細をちゃんと書くが、一旦ここにおく マシンスペック iMac使っています。 % system_profiler SPHardwareDataType Hardware: Hardw…

デーモンとは

メモ書き程度に デーモン 語源は悪魔のデーモンではなく、守護神のほうらしい。 デーモン (ソフトウェア) - Wikipedia まあ、それはそれとして デーモン(daemon)は長時間動き続けるプロセスのことです。 APUEのデーモンより ファイルモード作成時マスクをuma…

2016年おせち料理

3年連続のおせち作りです。 買い出しは12/22から開始しています。 完成品はこちら 重箱はここのを買いました。 かまぼこ、酢だこは既成品です。 買い物 クリスマス前に済ませておきましょう。 直前になると高くなったり、高級なものしか出回らなくなるので気…

gdbを使ってRuby 2.4.0のライブプロセスの情報を取得してみる

Ruby 2.4.0 リリース 2.4.0がリリースされたので、 spring-mt.hatenablog.com と同じことをやってみようかと思います。 準備 AWSのamazon Linux上で試しています。 # cat /etc/system-release Amazon Linux AMI release 2016.09 gccは 4.8.3、 gdbは7.6.1を…

Objective-Cのintとlongの最大値は同じという記事をみて

驚愕の事実。Objective-Cのintとlongの最大値は同じだった。 | 三度の飯とエレクトロン を見て試してみました。 #import <Foundation/NSObject.h> #import <stdio.h> int main(void) { int i = INT_MAX; NSLog(@"int i: %d", i); i++; NSLog(@"int i: %d", i); long l = (long)INT_MAX; NSLog</stdio.h></foundation/nsobject.h>…