CubicLouve

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

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の出し方を追記しました 追記 2017/08/13 stackprofの原理をまとめました。 spring-mt.hatenablog.com rubykaigi 2014終わりましたね。 スタッフの皆様、本当にお疲れ様でした。 で、3日目のkeynoteを聞いて、stackprofは使いこな…

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…