There's an echo in my head

日々のメモ。

capistrano-pending v0.2.0をリリースした

https://rubygems.org/gems/capistrano-pending/versions/0.2.0 Capistranoのプラグイン方式がv3.7から大きく変わって:scm変数が非推奨になり、さらにv4.0からは消されるらしく、その対応のため。といってもいただいたPRの挙動を確認しただけだけど。 github…

launchdで動かしてるmemcachedのログを取る

homebrewでインストールしてるのでlaunchdに読ませてるplistは~/Library/LaunchAgents/homebrew.mxcl.memcached.plistにある。 下記にコメントしたあたりをよしなに記載する。 <plist version="1.0"> <dict> <key>Label…</key></dict></plist>

`ps -ef | grep [f]oo`というやつ

調べては忘れるのでメモ。 grep [f]ooって結局grep fooと同じなのになんだこれはと思ってたけど、psはgrep自身のプロセスも返してくる(ことがある)ので、 ps -ef | grep foo だと foo を探しているうちに grep foo というプロセス自身にマッチしてしまう p…

innobackupex --move-backでファイルの移動

xtrabackupからファイルを復元するとき、ネットの記事とかPerconaの記事とかを見ると--copy-backを目にすることが多いんだけど、コピーするほどのディスク領域などない…!という場合には--move-backを使えばいい。 innobackupex --move-back /path/to/BACKUP…

capistrano-rubotyというgemを書いた

capistranoでrubotyをデプロイするのをよしなに助けてくれるgemを書いた。 github.com デーモン化とPIDファイルの書き出しに対応したruboty v1.3.0が必要になるので要注意。

rubotyをデーモンとして動かす

Herokuで動かしてたりdockerでデプロイしてたりするとあまり旨味はないのかもしれないけど、普通にcapistranoでデプロイして動かしたいようなときもあるのでやってみた。 下記のスクリプトを例えばyour_ruboty/lib/daemonize.rbみたいな場所に置いておく。 #…

routes.rbでワイルドカードに引っ掛けたパスを別のサブドメインにリダイレクトする

http://aerial.st/archive/...に来たアクセスを一律にhttp://archive.aerial.st/archive/...にリダイレクトするようにした。 Rails.application.routes.draw do # (snip) get "archive/*path", to: redirect(subdomain: "archive", path: "/archive/%{path}"…

acts_like?でduck typing

1年ぐらい前に社内ブログにメモしてた内容をまんま転載。 はて、これはduck typingなのか? 概要 Object#acts_like?を使うとクラスの異なるオブジェクトが同じ振る舞いをするかどうかの判定が手軽にできるようになる。 具体例 ActiveSupportではTimeとDateTi…

knife-soloでControlMasterが煩わしかったのでなんとかした

knife-solo v0.5.0から 最初はrootでknife solo bootstrap my.host.jp -x rootする 続けてそのときに作ったユーザsome_userでknife solo cook my.host.jp -x some_userする としたときにエラーが発生するようになった。 原因はknife-solo v0.5.0でSSHのContr…

パイプした内容をopenコマンドの引数に渡すopipeというコマンドを作った

github.com grepして見つけたファイルをパイプしてそのままAtomで開きたいと思って作ってみた。 $ git grep -l Neko | opipe -a Atom でもよくよく考えてみたら $ atom $(git grep -l Neko) でいけるわよね…。 追記 xargsさん— 高度に発達した技術的な問題 (…

りんごジャムの作り方

用意するもの りんご 2個 グラニュー糖 80cc 作り方 りんごの皮を剥いて八等分して芯をとり、さらに5mm弱の間隔で刻む。 鍋にりんごとグラニュー糖を入れて弱〜中火で煮ながら果肉を潰していく。 あらかた潰して若干の粘り気が出てきてもうめんどくせえなっ…

OS X 10.11 El Capitanでnokogiriをインストールする

$ brew install libxml2 libxslt libiconv $ gem install nokogiri -- --use-system-libraries bundlerでインストールするときのためにも設定しておく。 $ bundle config build.nokogiri --use-system-libraries なお前提として、公式サイトのインストール方…

OS X 10.11 El Capitanでeventmachineをインストールする

OS XがOpenSSLの共有ライブラリを含めなくなった(のかな?)ために、homebrew等でインストールしてその場所をオプションで指定する必要があった。 github.com $ gem install eventmachine -- --with-cppflags=-I$(brew --prefix openssl)/include bundlerで…

pipeの途中でエラーが起きたタイミングでエラーを返す

パイプを繋げたときの返り値は最後のコマンドの返り値になる。 例えば stat = system "a | b |c" としたとき、途中でaやbがエラーになっても返り値statはfalseにならずcの返り値であるtrueになる。 cがエラーに成った時にはfalseになる。*1 これだとパイプの…

El CapitanでSIMBLを有効にする

osx

How to Install SafariStand on El Capitanから勝手に抜粋。 1 Macを再起動し、「ジャーン!」となったらCommand+Rをあるていど押し続けてリカバリモードで起動する 一度押しただけでは切り替わらなかった タイミングの判定がわりと細かい 2 メニューからTer…

手動でRailsのビューをレンダリングする

バッチで生成しておきたいとかそういうときに。 class FooController < AbstractController::Base include AbstractController::Rendering include AbstractController::Translation include AbstractController::AssetPaths include ActionView::Layouts se…

Railsのジェネレータを自作する

よく忘れるので。細かい話は他の記事にお任せして、テンプレートからファイルを作れるところまで。 0. こんなのを作りたいとかんがえる 抽象クラスFigureのサブクラスをapp/modelsに作るようなジェネレータがほしい。 クラス名は引数で指定したい こんな感じ…

Capistranoで今処理しようとしているhostの属するroleを判定する

host.rolesを叩くと、role(のSymbol)のSetが返ってくる。 task :foo do on release_roles :all do |host| host.roles #=> #<Set: {:web, :app, :db}> end end git_strategyの中でもcontextを通して同じことができる。 set :git_strategy, MyGitStrategy module MyGitStrategy def r</set:>…

レプリケーションのパスワードはmaster.infoに書かれている

MySQLでレプリケーションする際にCHANGE MASTER TOで設定したパスワードは、データディレクトリ下のmaster.infoファイルに書かれている。

一定時間だけS3のオブジェクトにアクセスできるURLを生成する

aws

プライベートなバケットなんだけど、特定のURLを知ってる人だけがダウンロードするのを許可したいというときに使うやつ。 aws-sdk-rubyのv1だとAWS::S3Object#url_forで生成できたらしいんだけど、v2ではやり方が変わってるとのことなので試しにv2でやってみ…

Mac OSXでMariaDBをソースからビルドする

Mac OSX 10.9.5 MavericksでMariaDB 10.0.13をビルドした。 wget http://archive.mariadb.org//mariadb-10.0.13/source/mariadb-10.0.13.tar.gz tar zxf mariadb-10.0.13.tar.gz cd mariadb -10.0.13 cmake . \ -DCMAKE_INSTALL_PREFIX=$HOME/opt/mariadb/10…

mysqlのスローログの出力をオンラインで停止、再開する

停止: mysql> SET GLOBAL slow_query_log = 0; 再開: mysql> SET GLOBAL slow_query_log = 1; 現状: mysql> show variables like "slow_query_%"; mysqldumpしたデータをインポートしていたらことごとくスローログに積もり積もっていって慌てて停止したとい…

/dev/twitterでTwitterと通信するようなのを作る

cat /dev/twitterで最新のツイートを取得したり、echo ねむい > /dev/twitterでツイートしたりするのが欲しくなったので試してみてる。 ロードマップとしては次のような感じ。 Linuxカーネルモジュールのキャラクタデバイスとして/dev/twitterを作る HTTPで…

tipsはQiitaに書こう、そうしよう

http://qiita.com/ikm あまり使ってこなかったけど、編集リクエストあるしシンタックスハイライトも見慣れてるしでそっちのほうが便利かと思った次第。 こっちはなんか妄想とかそういうやつに使おう。

chromedriverをインストールしてくれるchromedriver_helperをGoで書いた

go

a2ikm/chromedriver_helper やることはおおまかに2つで、 $ chromedriver_helper installで最新のバージョンを~/.chromedriver-helper/chromedriverにインストールする chromedriver_helper.BinaryPath()でインストールされているバイナリのパスを返す 詳し…

polymorphic_pathを使って定型のリンクを手軽に作る

管理画面にTwitter Bootstrapを使ってボタンっぽいリンクを作っていると、 link_to t(:new), new_user_path, class: "btn btn-success" みたいなコードがビューにあふれてきてつらい。 なので、 new_link_to User としたら同じリンクを生成するようなヘルパ…

scaffoldするときのコントローラのテンプレートをカスタマイズする

[小ネタ]RailsのScaffoldテンプレートを上書きするススメの勝手に追補的な記事。 コントローラのテンプレートはrailties/lib/rails/generators/rails/scaffold_controller/templates/controller.rbあたりから#{Rails.root}/lib/templates/rails/scaffold_con…

素のオブジェクトをfields_forに使う

例えばモデル的にGraph has_many Entityだけど、GraphはActiveRecordを使う一方でEntityには素のオブジェクトを使いたい場合。データストアが異なるとか。 class Graph < ActiveRecord::Base after_save :save_entities def entities @entities ||= [] # TOD…

reactのチュートリアルを触ってみた

ここ最近ほとんどフロントエンドを触ってなかったのでFacebookのreactのチュートリアルを試しに触ってみた。 a2ikm/react-tutorial コンポーネントってそういうことかー JSX、最初は違和感あったけど、記述量が減るし慣れれば気にならなくなる 規模が大きく…

sorceryを使ったログインのテストをするときはupdate_attributesを使うこと

sorcery v0.9.0からソルトの生成とパスワードの暗号化の処理がbefore_saveからbefore_validationに移された。この影響で、テストのためにログインパスワードを上書きするときにupdate_attributeを使っているとログインできずにテストが落ちるようになった。 …

Ruby 2.2.0でsafe_yamlを使うときはv1.0.4以上が必要

Ruby 2.2.0を使っていて次のようなエラーが起きたらsafe_yaml(webmockなどが依存)がv1.0.4未満になっていないか確認、なっていたらv1.0.4以上に上げる。 NoMethodError: undefined method `tagged_classes' for Psych:Module NoMethodError: undefined met…

結城浩「新版暗号技術入門 秘密の国のアリス」を読んでる

新版暗号技術入門 秘密の国のアリス作者: 結城浩出版社/メーカー: ソフトバンククリエイティブ発売日: 2008/11/22メディア: 単行本購入: 46人 クリック: 720回この商品を含むブログ (81件) を見る すごくわかりやすいし面白い。 共通鍵暗号 事前に共有してお…

OSXでmysqlが"Too many open files in system”を起こした時の対処

10.7あたりからパーティションを切っていると頻発するようになっていて、最近ようやく対処方法が分かった。 3つのファイルに次のような設定をしたのちMacを再起動する。 /etc/sysctl.conf: kern.maxfiles=20480 kern.maxfilesperproc=18000 /etc/launchd.con…

GuardでEnterを打ったときに全プラグインが実行されないようにする

gem

$HOME/.guardrcもしくはGuardfileと同じディレクトリの.guardrcに次のように追記する。 Pry.commands.delete(/^$/) 全プラグインを実行するにはaやallを入力すればよい。

IAMでEC2を起動、停止できるカスタムポリシーを作る

ポリシージェネレータをいじったり手でいじったりして、特定のタグを持つインスタンスの起動、停止ができるカスタムポリシーを作った。 // ※ 実際はJSONなのでコメントは記入できません { "Version": "2012-10-17", "Statement": [ // EC2のインスタンスに対…

ec2ssh 3.xでも2.xと同じフォーマットでHostを出力する

ec2

mirakui/ec2sshの2.x系ではHostの末尾がregionだったのに対して、3.x系ではAZに変わっていた。 # 2.x Host tag-name.ap-northeast-1 HostName ec2-54-NNN-NNN-NNN.ap-northeast-1.compute.amazonaws.com # 3.x Host tag-name.ap-northeast-1a HostName ec2-5…

PTY.spawnで外部コマンドを実行する

以前Open3.popen3で外部コマンドの出力を随時受け取って表示するということをやったけど、それでは不便な場面が出てきた。 というのも、例えばgrepでマッチした部分を色付けしたものを得ようとしてもOpen3.popen3で受け取ることはできない。これはgrepが出力…

knife-soloをJSONファイルを作らずに走らせる

--json-attributes <json>もしくは-j <json>オプションを使えばnodes/*.jsonを作らなくても走らせることができた。 $ knife solo cook myserver.01 -j '{"hostname":"myserver.01"}' みたいな感じ。 さすがにJSONを長々と書くのは不便なので、基本となるロールをroles/*.</json></json>…

Herokuのcedar14スタックにlibjpeg.so.62が入っていなかったのでbuildpackを作った

a2ikm/heroku-buildpack-libjpeg62 · GitHub そのときの手順はbuild.shにまとめてある。 やってることはIJGのfilesからjpegsrc.v6b.tar.gz(62だけど6b)から落として来てビルドしてる。 ポイントは次の2点: ./configureのオプションとして.so(動的にリンク…

Route53のレコードをRoadworkerとCircleCIを使ってPull Requestベースで管理する

手元でRoute53のレコードを管理したいんだけど、Roadworkerを使ってRoutefileがPull Requestでマージされたときに自動で行われるようになれば、コメント付きの履歴がとれつつ実際の状態とリポジトリ上のファイルとの一貫性がとれていいのかなと思ってやって…

SingleXLSXというgemをリリースした

Ruby標準のCSVライブラリのように、一枚のシートだけからなるXLSXファイルを読み書きするためのもの。 a2ikm/single_xlsx http://rubygems.org/gems/single_xlsx 使い方 読み 配列の配列で取得する。 Name Age Einstein 76 Feynman 69 SingleXLSX.read("path…

Rails 4.1ではモジュール配下のクラス名をunderscoeするときにacronymの設定を考慮してくれない

ActiveSupport::Inflector.underscore does not respect acronym inflections within a module · Issue #17193 · rails/rails · GitHub の件。 具体的な影響としてはたとえば次のように、SKUという単語をacronymとして設定しても、namespaceでモジュールを切…

knife-soloを手軽に並列に走らせるためのpaknife gemをとりあえずリリースした

とりあえず動くようになったのでv0.0.7と中途半端だけどリリースした。rubygems.orgもしくはGitHubを参照。 概要 次のようにノードを複数指定するとそれらに対して並列にknife soloコマンドを実行する。 $ paknife solo cook node1 node2 node3 同時実行数 …

外部コマンド実行時の標準出力、標準エラーを随時受け取る

Rubyで外部コマンドを実行する手段はいろいろあるけど、そのほとんどは実行し終わったときにまとめて標準出力等を得ることになる。時間がかかるコマンドを実行しつつその出力を随時受け取りたい場合にはOpen3.popen3を使う。 require "open3" Open3.popen3("…

lsyncdとawscliでS3にファイルを同期する

こんな感じ。 s3sync = { maxProcesses = 1, onStartup = "aws s3 sync ^source ^target", onCreate = "[ -f ^source^pathname ] && aws s3 cp ^source^pathname ^target^pathname || true", onModify = "[ -f ^source^pathname ] && aws s3 cp ^source^path…

zshでknife-soloのノード名の補完をするようにした

nodes/*.jsonから補完するように、oh-my-zshのknifeプラグインに書き足してみた。 https://github.com/a2ikm/oh-my-zsh/blob/bd07b185b7e15c201ec00e25487e38b5c3ca9bf6/plugins/knife/_knife 最初はWEB+DB PRESS Vol.83の特集を読んで一から書いてみようか…

homebrewのcurl-ca-bundleパッケージが無くなってた

新しく届いたMacの環境を構築しようとししたら無くなってた → Remove curl-ca-bundle by jacknagel · Pull Request #28658 · Homebrew/homebrew · GitHub 代わりにopensslパッケージが証明書を入れるようになったので、そっちを使うようにした。 export SSL_…

jbuilderで`child!`しなかったときに空の配列を返す

child!を使うと配列の要素としてハッシュを差し込むことができる。 json.users do json.child! do json.name "James F. Cameron" end end #=> { "users": [{ "name": "James F. Cameron" }] } しかしブロックの中でchild!が呼ばれないと、そこは勝手に空のハ…

Capistrano3のタスクの中からエラーを投げる

capistrano-pending gemでREVISIONファイルが無いときにエラーで終わらせたくてCapistranoのコードを読んでみたら、次のようにしてた: if test "[ -f #{current_path}/REVISION ]" # ファイルが存在した場合の処理 else error "REVISION file doesn't exist"…

homebrewで入れたnginxをlaunchctlで80番ポートで起動する

$ sudo su - # ln -s /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/homebrew.mxcl.nginx.plist # launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist LaunchDaemonsとLaunchAgentsの使い分けってどうなってる…

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。