@Konboi memo

主に技術に関してつらつらと。

goma っていうmarkdown preview tool を書いてみた

はじめに golangの練習がてらにmarkdownをブラウザでプレビューするやつを作ってみました。 Konboi/goma 使い方は goma --path path/for/README.md してブラウザで localhost:5858 にアクセスすれば大丈夫なはずです。 作る前の目標として対象の markdown ファ…

golang でファイルを取得する

io/ioutil を使う file, err := ioutil.ReadFile(path) こんな感じで引数は byte

# goalng でコマンドライン入力を受け取る

flagを使うのがいいらしい var ip = flag.Int("flagname", 1234, "help message for flagname") こんな感じで使う flag.XXX の XXX には受け取りたい型を指定する 引数は大体の場合3つある flag.Int を例に出すと 1つ目は 引数の名前 2つ目は デフォルトの値…

ISUCON4 予選に参加して惨敗しました。

結果がでましたが、やはりダメでした。 反省を込めて、やったことをまとめておきます。 9/27 1日目に同期の@tkuchikiと先輩の@hilotterの2人とチーム 「流れ弾」として参加してきました。 事前準備 事前準備としては、マシン1台だからDBの負荷がかかる系だよねとか…

Golangでjsonのレスポンスを入れ子にする

はじめに jsonのレスポンスだと { status: 200, results: { message: “ok” } } というようなレスポンスをよく見る。 それをGoでどうすればいいのか調べたのでそれのメモ。 jsonのレスポンスを入れ子にする type Ping struct { Status int `json:"status"` Resu…

Golangでredirectのテストをしようとしたら嵌った

はじめに post以外のメソッドでアクセスしてきた場合は `/‘へリダイレクトするURLに対してきちんとリダイレクトするかのテストを書こうとしたら嵌った 嵌った func TestRedirectHandler(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(redirect…

GolangでレスポンスにJSONで返す

はじめに railsとかだと render json: HASH とかでよしなにjson形式にして返してくれるんですが、 goだと結構嵌ったのでメモ。 今回はサンプルで /pingにアクセスすると { status: 200, result: “ok” } というjsonを返す例を作ってみたいと思います。 jsonで返…

GoでHTTPのリクエストメソッドを取得する

Getのときは〇〇で Postの時は××したいみたいなのよくある そんなときは http.Request の Method を使えば取得できる func postHandler(w http.ResponseWriter, r *http.Request) { log.Printf(r.Method) } 下記がアクセスしたときのlog 2014/09/21 16:18:59…

Furlを使ってjsonをpostしようとしたら嵌った

嵌ったコード use Furl; … my $furl = Furl->new; my $args = { höge => ‘fuga’, piyp => ‘puyo’ }; $furl->post( $url, [], $args ); 解決したコード use Furl; use JSON::XS; … my $furl = Furl->new; my $args = { höge => ‘fuga’, piyp => ‘puyo’ }; $fu…

【読了】海賊とよばれた男

読んだ 海賊とよばれた男(上) (講談社文庫)作者: 百田尚樹出版社/メーカー: 講談社発売日: 2014/07/15メディア: 文庫この商品を含むブログ (7件) を見る 海賊とよばれた男 上作者: 百田尚樹出版社/メーカー: 講談社発売日: 2012/07/12メディア: 単行本購入: …

最近モヤモヤしてること

現在、ゲームの運用を担当している。 そのゲームで、新しい施策の前にはチームのメンバーで リリースできるかどうか、おもしろいかどうかみんなでプレイしながらチェックする そのときに不具合がないかどうかを見るのは簡単なのだけれど 想定してるユーザーは〇…

本番サーバーに ro_mysql コマンドを作っておくと捗る

はじめに ユーザーさんからのお問い合わせだったり、ディレクターからのお願いだったりで、 本番サーバーのDBでクエリを叩くのは少なくないと思います。 特別に用がある場合以外は、レプリケーション先のサーバーに接続しに行くと思いますが、 もし、指定したHost…

通信の帯域制限をかけてアプリをチェックする

はじめに テザリングを多用する方々は月末になると帯域制限に苦しむことになると思います。 そのような環境でもアプリを使用できるようにするのは、ユーザーの体験的にもビジネス的にも大事な事だと思います。 ということで開発環境、本番環境でそれぞれ帯域制限…

YAPC::Asia 2014 に参加しました

はじめに、YAPC::Asia運営の皆様お疲れ様でした。 おかげで、本当に楽しい時間を過ごす事ができました!! トークはもちろんのこと、懇親会やHUBで話させて頂いた著名エンジニアの方々、 別の道を歩んでる同期のメンバーの現状を聞いて自分も頑張らねばと思ってす…

Team Geek を読んだ

前から読もう読もうとは思っていたけど、読めてなかった。 朝起きて昨日が給料日ってのもあってAmazonのページ開いたら、今注文したら今日届くって言われて半信半疑で注文してみたら、ホント届いてAmazonすげーなってなりながら読んだ。 Team Geek ―Googleのギー…

smartchr.elやっぱり便利

便利。 詳しい使い方はこちらから smartchr.el を使って生産性を上げる 少し前まではCaskでインストールできなかったんですが、 Can’t install smartchr.el 本家の方にp-r出して取り込まれているので、是非Caskを使っている人もお使いください。 Fixed file head…

homebrewを指定のディレクトリにインストールする

homebrewはMacを使う人ならなくてはならない便利なソフトウェアです。 ただ、homebrewのデフォルトのインストールディレクトリは /usr/local 以下で管理権限を持たないユーザーだとインストールするのが面倒です。 そんな時のためにディレクトリを指定してイン…

Emacsでtagを使う

はじめに rebuild.fm聞いてたら自分の設定見直すか!! ってなったので、 コード追うの楽にしいし、重い腰を上げてtagを使って見ることにしました。 tag ファイルを作る ctags -e -R . -e オプションでemacsに対応したTAGファイルを作成する。 -e オプションがな…

Jenkinsのプロジェクトを増やしたらテストがこけるようになってつらかった。

はじめに ※Jenkinsが悪いわけじゃないです。 現在携わっているプロジェクトではテストの際に Test::mysqld を使用して並列にテストを回してました。 ただ、マスターデータのテストと機能系のテストが t/ にまとまっていて、マスターデータのテストだけをチェック…

tig のインストール

tig とは 一言で言うとgit log が綺麗に見れるツールです。 (もちろん、それだけではありませんが) はじめに Macだと brew install tig でインストールできると思います。 今回はソースからインストールする必要があったのでインストールします。 ダウンロード …

emacsclientで立ち上げたemacsだと日本語入力ができなくてこまっていた

開発環境では emacs を emacs —daemon で起動しておき emacsclient hoge.txt で起動していた。 起動が早くて快適だが、1つだけ問題が… こんな感じで表題の通り日本語の入力ができてなかった。 色々知らべてみると emacsclient -nw hoe.txt とやると日本語入力で…

nginxにカスタムヘッダーのレスポンスを表示する

タイトルのようなことがやりたかった時に色々調べたでそれのメモ。 アプリは仮に下記のようなコードがあったとする require 'sinatra' get '/' do status 200 headers \ “X-Unchi-Status" => ‘BuriBuri’ body "hello" end GETでアクセスしてきたとき ステータ…

rerunが便利

sinatraとかのrackアプリを作ってる時に編集したら自動で再起動して欲しいときがよくある。 plackup コマンドはデフォルトで-rの再起動オプションが付いていて最高!! しかし! rackupはついていない。 なのでそんなときにオススメなのがrerun。 gem install r…

bitbucket で hook の response body で返ってくるJSON形成で嵌った。

自分だけ再現するなら致し方無い。 他の人もこれで嵌っていたなら参考にどうぞ はじめに 個人でPrivateで使っているbitbucketで、意味は無いがcommitしたらircにlogを流すようにしたかった。 設定 ⇒ フック ⇒ POST から POSTしたいURLを入力する 自分は個人VPS…

sinatra で response body の JSONをparseする

JSON.parse(resposen.body.read) readを付けなくて、parse出来ずに嵌ったのでメモ。 Sinatra: Up and Running作者: Alan Harris,Konstantin Haase出版社/メーカー: O'Reilly Media発売日: 2011/11/21メディア: Kindle版この商品を含むブログを見る

expand-regionが動かない

困った。 expand-region が動かなくて困っている。 設定も特に変な事はしてない。 ... はず (require 'expand-region) (global-set-key (kbd "C-\'") 'er/expand-region) こんな感じの設定ファイル。 C-@は複数のキーを一変に打つのがつらくてC-'に変えている。 …

CentOS6 の git バージョンをあげる

はじめに 最近emacsを使い始めたのはいいけれどmagitがつかえない症状にはまっていた。 調べたらgit のバージョンをあげればいけるらしい あげよう!! アンインストール gi のバージョンが古いってことなのでアンインストール $ sudo yum remove git $ sudo …

magit がつかえなくてこまった

magit がつかえなくてこまった M-x magit-status と打っても Git repository: file/path と出てきて/project/root/dirctory を指定しても yes としても Wrong type argument: stringp, nil と出るばかり…orz magit-process を見ると 129 git --no-pager -c c…

centosでcaskを使ってsmartchr.elを入れるまで色々大変だった。

追記 本家にp-r済みなのでsmartchr.elは問題なくインストールできると思います。 はじめに 最近 いろんな人が cask を使ってemacsのlispを管理してるらしいので、 自分もやってみた。 が、色々嵌ったのでメモしておく。 前提条件 vagrant + chef で環境構築してい…

Dist::Makerを使ってひな形を作ってみる。

はじめに rails new みたいなのを perl でやろうとしたら今もModule::Setupで作ったflavorをセットアップしてやるのが一般的なのかな??— こんぼい。 (@Konboi) 2014, 5月 18 @Konboi Amon2なんかは、独自で雛形作成機構を持ってるけど、自分独自のやつ作り…

merge済みのbranchを消す

git

mergeしたけど消してないみたいなbranchが結構あってうざかったので消した git br -r --merged | grep -v 'master' | awk -F "/" '{print $2 "/" $3}' | xargs -n 1 -I % git push origin :% awk便利。

gitの現在のbranch名だけを取得する

git

git branch だとディレクトリにあるbranch全部が取得できる。 が、 今回は現在のbranch名のみを取得したかった。 git rev-parse --abbrev-ref HEAD これでいける。 よい。 参考URL すがブロ GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)作…

Brewfileでhomebrewでインストールするものを管理する

開発環境は vagrant x chef で構築してるからぶっ壊れてもすぐに構築できるんだけど、 やっぱり母機のmac側もなんだかんだ使うのですぐに必要なもの入ったほうがいいなってことで、 今更ながら Brewfile で管理するようにしてみた。 既に homebrew でインストー…

grep -{数字} オプションが便利だった。

ログをみるときとか、該当の文字列を探すときとかお世話になる grep コマンド。 このオプションをしる前までは、該当の行はすぐわかるんだけど、その前後数行もみたいんだよね... ってことがよくありましたが。 が、 この grep -10 とか - + 数字 のオプションをつ…

標準出力を出力しつつファイルにも出力する

移植してるgemで表題のことを実現したかった。 色々調べてみたけど、実現したいことをするにはだいぶ古いきじだけれとこちらのページが参考になった。 def std_out log_fh = self.log_fh std_out = Object.new std_out.instance_eval{@ofile=log_fh} class <

perlのモジュールをrubyに移植してみた

移植したモジュール 移植したもPerlのモジュールはScript::Ichigeki になります。 こちらのモジュールの使い方は Script::Ichigeki - 相手は死ぬ こちらの記事を参考にしていただければと思います。 記事内の言葉を抜粋すると クリティカルな一発スクリプト(ゲ…

awkで"(ダブルコーテーションマーク)を使って嵌った。

ps aux | grep hoge | awk "{$1}" とかのコマンド打っても反映されなくて?!ってなってた。 ps aux | grep hoge | awk '{$1}' でいけた。 シングルコーテーション使ってこう。

Time::Piece::Plus でunix timeから time piece オブジェクトを作る

CORE::timeとかから取得した値を使って Time::Peace::Plus のオブジェクトをつくろうとした時に嵌ったのでめも。 localtime->strptime($unix_time, “%s”); 最初試した方法。 いけたけど、 tim zone が JSTにならなくて ?! ってなった。 use Time::Pease::Plus;…

$0 と __FILE__ の違いについて調べてみた。

gemとかの require されるファイル側でどこから呼ばれてるのか知りたかったので調べてみた。 caller メソッドとかで特定もできなくはなさそうだったけど、 $0 のほうが一般的っぽかった。 $0 とよくgemとかで見かける __FILE__って何が違うのか調べてみた。 ざっ…

classのinitializeの引数でハッシュを渡したい時はどうするのがベストなんだろう?

hoge1 = Hoge.new puts hoge1.hoge puts hoge1.foo hoge2 = Hoge.new({hoge: 'hoge2'}) puts hoge2.hoge puts hoge2.foo hoge3 = Hoge.new({foo: 'foo2'}) puts hoge3.hoge puts hoge3.foo hoge3 = Hoge.new({hoge: 'hoge2',foo: 'foo2'}) puts hoge3.hoge p…

今更ながらatter_reader,writer,accesor の復習

class Hoge attr_reader :read attr_writer :write attr_accessor :access def initialize(read, write, access) @read = read @write = write @access = access end def access_update @access = @write end end hoge = Hoge.new('read', 'write', 'access'…

インストールしてあるgemの一覧をだしてGemfileにまとめる。

gem list --local | awk '{print $1}' | xargs -I% -n 1 echo gem \"%\" >> Gemfile こうすれば、インストールされてるgemの一覧をGemfileにしてくれるので、以降したPCでbundlerをインストール後に bunlde installすればいい感じになるはず。 ※ この方法は OSX…

grepで正規表現を使う

grep -e ^fuga -e オプションを与えて上げれば正規表現使えるようになる 複数の条件を付けたい場合は grep -e ^hoge -e ^fuga で与えて上げればよい。 chefのレシピ書いてるとこういうコマンドの勉強になってよい。 [改訂第4版] UNIXコマンドポケットリファレ…

gitでremoteのブランチが更新されない

git br -r うつと origin/hoge origin/fuga origin/foo って出てくるから git push origin :foo って打っても削除できない。 githubで確認したら既にブランチが削除されてた。 どうしたらいいのかなーと思って調べてみたら、 remote branch の情報を更新してな…

libsslがないって怒られたので openssl-develをインストールした。

npm -U ngx_openresty-1.4.3.3-1.el6.x86_64.rpm を打つと libssl がないって怒られる。 sudo yum search libssl しても見つからない... さて、困ったなと思って調べてみたら openssl-devel をインストールすると入ってくれるらしい。 ということで sudo yum in…

アクセスログからどこからのアクセスが多いのかを調べる

cat access.log | awk '{print $1}' | sort -n | uniq -c | sort -n するとこんな感じで表示される。 他のももっとちゃんと調べていきたい。

リモートブランチの削除方法

branch切ったはいいがどうやって削除するのか分からなかったので git push origin :want_to_delte_branch_name これだけでいける。 こわい。

.capをruby modeで開きたい

capistranoが3系になってタスク用のファイルの拡張子が.capになった。 .capファイル開くとインデントとか全然してくれないので、どうしたものかと思ってしらべたら ~/.vimrc に au BufNewFile,BufRead *.cap setf ruby を追記したらいけた ついでだから au Buf…

メモリもりもり食うunicornのプロセスを殺す

ps aufxx | grep unicorn | grep -v grep | grep -v master | awk -v OFS=, '{if ( $4 > 10 ) print $2}' | xargs -n 1 kill メモリを10%以上使用しているunicronのプロセスをkillする。 時々アラートきてたけど、今はいい感じ。

Omniauth で callback先ののホストを設定する

railsで複数の認証を扱うなら omniauth が有名。 今日、理由はわからないけどcallbackのホストが違うところ言ってしまいまじ ( ゚д゚)ハッ ?! ってなってどうしよどうしよって焦った。 が下記の方法でとりあえず、解決できた # config/initialize/omniauth.rb OmniAu…