読者です 読者をやめる 読者になる 読者になる

CubicLouve

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

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>…

gdbを使ってRuby(2.3.3)のライブプロセスの情報を取得する

Rubyのプロセスに対して、非破壊的に中をのぞいてみたいことが時々ありますよね???(詰まっているプロセスとか) 今回、gdbを使ってライブプロセスにアタッチして調べてみました。 準備 今回はAWSのamazon Linux上で試しています。 # cat /etc/system-relea…

unboundを使って、iPhone、Androidの名前解決をよしなにやる

開発現場において、本来とは違うIPアドレスを返して確認するということをよくやると思います。 PCで確認できるページであれば、ローカルPCの /etc/hostsを書き換えてチェックするという手法が一般的かと思います。 ただし、iPhoneやAndroidで同じようなこと…

MySQL 5.6から導入されたoptimizer_traceを使ってみる

きっかけは下のブログ rkmathi.hatenablog.com 実際に使われるindexはSQLオプティマイザがコスト計算した結果で変わると思われる。 http://dbstudy.info/files/20120310/mysql_costcalc.pdf コスト計算の結果は、MySQL 5.6から導入されたoptimizer_traceを使…

SideCIの自動rubocop PRが羨ましかったので、自分で作った

blog-ja.sideci.com これを見て。 SideCIはGitHub Enterpriseに対応していない(2016/02/13現在)ので、自分で作った。 github.com サーバー上げて、githubのweb hookに仕込むだけでPRを送ったら、自動的にrubocopで自動修正した内容を別PRにして送ってくれま…

MySQL 5.6でロックの状態を詳細に見たい場合

innodb_lock_monitorを有効にする 有効にする場合 CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB; そして、 SHOW ENGINE INNODB STATUS; と打てば、TRANSACTIONSのセクションの中に、ロックの詳細情報が入るようになる。 終わったら、テーブルを…

2015年おせち料理

2014年に引き続きおせち作りました。 買い出しは一週間前から開始しています。 完成品はこちら なると、かまぼこ、栗きんとん、酢だこは既成品です。 松前漬け スルメイカ 3枚 昆布 スルメと同量くらい 人参 1/2本 たれ 酒 300cc 醤油(関東濃い口) 150cc み…

nginxのconfの内容をdumpする

nginxのconfですが、includeとか大量にしていると、うっかり上書きされててハマったことないですか? 自分は最近ドハマりして、イラッとして、confをdumpできるようにならなかと調べてみました。 で、最新のnginxのソースcloneして読んでたらもうあるじゃん…

workerの枯渇状況が分かるrack-server_statusというgemを書いています

unicornのwokerのbusy数とidle数の比率がわからなくて、うっかりworkerが枯渇して大変なことになったので、workerの状況を返すエンドポイントを追加するrackミドルウェアを書いています。 SpringMT/rack-server_statusgithub.com ぶっちゃけkazeburoさんのPl…

サーバーの状態やMySQLの状態の指標のまとめ

指標に関していつもググってばっかりいたので、まとめてみました。 ツッコミ大歓迎。 CPU usage name detail User ユーザ空間(アプリケーション)でCPUが使われた時間の割合 Nice 優先度を変更された(nice値が変更された)プロセスにより、ユーザ空間でCPUが使…

unix domain socketのstatus

cat /proc/net/unixの中身 項目 説明 例 Num カーネルのテーブルスロット ffff8800798ec0c0 RefCount ソケットを使用しているユーザー数 00000002 Protocol いまのところいつも 0 Flags ソケット の状態を保持しているカーネル内部のフラグ Type always '1' …

sinatraで設定したパス一覧を取得する

メモ こんな感じでスクリプトを書いた。 require 'rack' require 'sinatra' class Sinatra::Base private class << self attr_reader :original_routes # なぜかsuperが呼べない... def route(verb, path, options = {}, &block) @original_routes ||= {} (@…

railsで特定のモデルに対してbelongs_toで参照先を設定しているモデルを取り出す

まあ、いろいろ調べる必要がありまして。。。 ざっくりとこんな感じでとれた。 # production環境では要らないが、development環境では必要かと Dir.glob(File.expand_path('./app/models/*.rb', Rails.root)).each do |f| require f end # 定数を全部取得 co…

rubyで局所的にパッチを当てる方法を模索中

下記のようなコードで、Cクラスの中だけで何とかAクラスに対するパッチを当てたい。 class A def self.foo p 'foo' end def bar p 'bar' end end module ExtendFoo refine A.singleton_class do def foo p 'extend foo' end end refine A do def bar p 'exte…

railsアプリでstackprofを使ってボトルネックを探す + JSON::Schema(2.2.1)の高速化

railsアプリが遅いって言われたので、久しぶりにrubyでisuconしてみました。 railsアプリでstackprofを使ったプロファイリング まず、自分がいつもやってる方法なのですが、config.ruにstackprofの設定を仕込みます。 stackprofはrackミドルウェアとして差し…

Webサイトに必要なfaviconが21個になっていたらしいのでrack-favicon_allっての書いた

Webサイトに必要なfaviconが21個になっていた - IT探検記 Webサイトに必要なfaviconが21個になっていた - IT探検記 どうもWebサイトに必要なfaviconが21個もあるらしい。 で@bayashiが 増殖中の favicon を Plack::Middleware ひとつで配信する - @bayashi D…

SSL/TLSのシーケンスまとめ

TCP 3-way handshakeの復習 - CubicLouve TCP 3-way handshakeの復習 - CubicLouve 上記を踏まえた上でSSL/TLSのシーケンスをtcpdumpとwiresharkで追ってみました。 まだ理解しきれていない部分があるので直すかも。 clientのコードはこちらから。 SpringMT/…

TCP 3-way handshakeの復習

3 way handshakeのおさらい tcpdump の見方を勉強を見ながら自分でもやってみた。 ほとんど、上記のブログのままやってます。 clientとserverはこちらを使っています。 SpringMT/socket_test SpringMT/socket_test · GitHub コネクション開始 1. SYN クライ…

福岡でおすすめのモツ鍋のお店

おすすめ もつ幸 もつ幸 (呉服町/もつ鍋) もつ幸 (もつこう) - 呉服町/もつ鍋 [食べログ] 美味しかった 博多 表邸 博多 表邸 (薬院大通/魚介料理・海鮮料理) 博多 表邸 (はかた ひょうてい) - 薬院大通/魚介料理・海鮮料理 [食べログ] 刺身、イカとかも…

2014年の振り返り

軽く振り返ってみる 1月 〜 3月 このときはまだ色々何をするか悩んでいた時期。 1月はまだperl書いてた。 2月位からunityを触り始めた。 初めてクライアント側の開発して、色々刺激になった。 (IDE使ってみたり、初めて静的型付け言語使ったりとかとか) 4月 …

一年後のキミへ

身欠きにしんを29日に買って仕込んでおけ! それだけだ! 以下はただ2014年のおせち料理のメモ 年末まとまった時間がとれたので、おせち料理を自作してみた。 30日に買い出しを行った。 完成品はこちら 松前漬け スルメイカ 3枚 昆布 スルメと同量くらい 人…

Faradayでnet/httpのアダプターを使っている場合のHTTPリクエスト/レスポンスを見る

忘れそうなのでメモっておく。 require 'faraday' module FaradayDebug def net_http_connection(env) http = super http.set_debug_output $stderr http end end module Faraday class Adapter class NetHttp prepend FaradayDebug end end end これを書い…

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(@"long l: %ld", l); l++; NSLog(@"long l: %ld", l); long long ll = (lo</stdio.h></foundation/nsobject.h>…

JavaのJSONObjectのgetIntとoptInt

JavaのJSONObjectのgetIntとoptInt import org.json.JSONException; import org.json.JSONObject; public class HelloWorld { public static void main(String... args) { String json = "{\"screen_name\":\"katty0324\",\"age\":\"\"}"; JSONObject jsonOb…

Web API The Good Partsを読んだ

APIばっかり最近作っているので、Web API The Good Partsを早速買って読んだ。 これからAPIを作ろうとしている人、現在作っている人達の机に一冊あっても良いと思う。 これまで、TLや色々なところで議論されてきたWeb APIのクライアント側とサーバー側の"お…

macで共有ライブラリの依存関係を調べる

mysql2 gem を mysql5.6 の libmysqlclient.a と static link したい話 を読んでいて、macでも共有ライブラリの依存関係調べようとしたら、 zsh: command not found: ldd lddの代わりにotoolコマンドを使う。 % otool -L .rbenv/versions/2.1.2/lib/ruby/gem…

isucon4本戦に参加して惨敗してまいりました。 #isucon

1回でもいいから良い報告をしてみたいものです。 とりあえず、今は勢いで書く。 後で追記していく。 お題 今回は動画広告配信システムのチューニングでした。 いろいろやったけど 結局クライアント側のキャッシュ全然思いつかなかった。。。。 思いの丈を …

lldbでrubyのデバッグ初級編

スーパールーキーに教わってたことのメモ putsメソッドはrb_f_putsを呼んでいるので、そこでbreakpoitを仕込んでbacktrace取る。 % lldb `rbenv which ruby` (lldb) target create "/opt/boxen/rbenv/versions/2.1.2/bin/ruby" Current executable set to '/…

実行中のプロセスの環境変数を確認する

RACK_ENVとかを見たかったので。 Linux環境ならこれでOK。 % cat /proc/プロセスID/environ せやな。。。

MacOSでLD_PRELOADを実現するには

c

LD_PRELOAD試そうとおもったらMacでうまくいかず。。。 MacにはLD_PRELOAD自体はなく、LD_PRELOAD相当のDYLD_INSERT_LIBRARIESがあるそうなのでそれを試してみる。 元の実行ファイル(hello.c) #include <stdio.h> int main() { puts("hello world!!"); return 0; } こ</stdio.h>…

isucon 2014予選に参加しました

大分遅れたエントリになってしまいました。。。 今年もisuconに参加してきました! ISUCON4 予選 チームメンバーは去年と同じ、@sonots, @niku4iで参加しました。 チーム名はGoMiamiです。 結果は、去年に引き続き予選突破できました!! ISUCON4 本戦出場者…

bundler-noreleaseってgemを書いた

rubykaigi2014でも紹介されていましたが、社内向けgem向けにrake releaseを潰したかったので、bundler-noreleaseというgemを書きました。 rubygems bundler-norelease | RubyGems.org | your community gem host github SpringMT/bundler-norelease SpringMT…

HTMを試す

rubykaigi一日目の発表でHTMを使ったパフォーマンス向上の試みが発表されていたので試してみました。 RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby through Hardware Transactional Memory RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby thro…

stackprofを使ってみる

2014/09/21 FlameGraphの出し方を追記しました rubykaigi 2014終わりましたね。 スタッフの皆様、本当にお疲れ様でした。 で、3日目のkeynoteを聞いて、stackprofは使いこなせんとあかんものやと思って、早速試してみました。 RubyKaigi 2014 | Ruby 2.1 in …

Ruby vs Rubinius vs GobiesVM

I benchmark GobiesVM compared with Ruby and rubinius. Rubykaigi2014で紹介されていたGobiesVMを使って、ベンチ取ってみた。 brucehsu/GobiesVM brucehsu/GobiesVM · GitHub Machine Specs % system_profiler SPHardwareDataType Hardware: Hardware Over…

rubykaigi2014 一日目(途中までのメモ)

メモ程度に RubyKaigi 2014 | Building the Ruby interpreter -- What is easy and what is difficult? Ruby Interpreterの責務はクオリティを高めることと考えている。 信頼性、高パフォーマンス、消費リソースが少ない、互換性、拡張性 これらの品質はそれ…

TSXのチェック

rubykaigi2014一日目のEliminating Giant VM Lock in Ruby through Hardware Transactional Memoryを聞いて、とりあえずコンパイルだけでもしておこうかと思って、TSXに対応しているか調べてみた。 % sysctl machdep.cpu.brand_string machdep.cpu.brand_str…

オブジェクトファイルのシンボルテーブル確認にreadelfコマンドを使う

シンボルテーブルを確認しようとして、おもむろにnmコマンド打ったら、シンボルでてこなかった。 # nm /usr/lib64/hoge.so nm: /usr/lib64/hoge.so: no symbols んな訳あるかって思ったら、elf形式だった。 # file /usr/lib64/hoge.so /usr/lib64/hoge.so: E…

android アプリのdebugをonにする

androidアプリの調査をするために、debugがoffになっているアプリをonにしたときのメモです。 debugをonにすると、monitorとかを使ったメモリの調査とかがかなりしやすくなります。 あ、これは自己責任でやってくださいね。 あと、Macで作業しています。 apk…

rspecを2.14.1から3.0.0に上げた時のメモ

追記 : transpecについて少し追記しました railsアプリで使っていたrspecを2.14.1から3.0.0にあげたら色々落ちたので、それを直したメモ。 まず、 bundle exec rails generate rspec:install して、spec/spec_helper.rbと.rspecを上書きした。 で、新たにspe…

railsでSSL

アプリ側で特に何も設定してないけど、https化されてるなあって思ったら、 X-Forwarded-Proto: https がrequest headerに入ってた。 忘れそうなのでメモ

iPhoneのネットワークアクセスをキャプチャする

メモ程度に残しておく iOS 5以降には remote virtual interface (RVI) が用意されている。下記参照 Technical Q&A QA1176 今回はそれを使用する。 やり方 MacにiPhoneをUSBでつなぐ iTunes開いて、iPhoneの情報からシリアル番号の上にカーソル合わせて、UDID…

codemodを使って一括置換

mac

Facebookのリポジトリにcodemodという一括置換ツールがあります。 facebook/codemod 結構便利なのでよく使っているのですが、周りであんまり使っている人を見ないので紹介しようと思います。 インストール repositoryからcloneして持ってきてもよいです。 ho…

use strict: use warnings; を忘れない

どうもperl書いてて、use strict: use warnings;を書かない人がいるらしい。。。。。 vimはファイル作成時に、指定したファイルから雛形が自動的にできるSkeletonAuってのがある。 SkeletonAu使って.pmとか作ったら、skelton呼び出して書けるようにしておく…

rails4.1のmigrationでundefined method `add_column_options!'ってでたら

rails4.1でmigration走らせたら、 % bundle exec rake db:migrate == 20140501144914 AddColumnsForHoge: migrating ========================== -- change_column(:foo, :bar, :integer, {:unsigned=>true, :limit=>8, :null=>true}) rake aborted! Standar…