pockestrap

Web Programmer's memo

AOJ 0506 をゴルフした

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0506 久しぶりにゴルフをやりたくなったのでやった。AOJの仕様上、コードを短くしても自分の他の解答より実行時間が速くなければランキングにのらない様で、悲しかったのでブログ記事にした。 な…

$ sl | twice # => Run SL twice!

github.com なにこれ 標準出力をリピートするコマンドです。 Installation $ go get github.com/pocke/twice Usage $ echo -n 'hoge' | twice # => hogehoge $ sl | twice # => Run SL twice! また、オプションで繰り返す回数を指定することが出来ます。 $ s…

コマンドを打ち間違えるとコマンドが走るコマンド

Installation 1. banner コマンドをインストールする パッケージマネージャでインストール出来ると思います。 # Arch Linux の例 $ sudo pacman -S banner 2. flowterm という gem をインストールする。 github.com $ gem install flowterm 3. ~/.zshrc に以…

db/schema.rb のコンフリクトを勝手に解決する git merge driver を作った

解決したい課題 Ruby on Rails を使って開発している方の中で、db/schema.rbがコンフリクトした経験がある方は多いのではないでしょうか? 特にスキーマのバージョンはよくコンフリクトします。 diff --cc db/schema.rb index bdb07db,da150fc..0000000 --- …

RuboCop の Collaborator になりました

こんにちは。 RuboCop の Collaborator になりました。Collaborator とは、GitHub でマージボタンを押せる人です。 Promote @pocke to a Core RuboCop developer · bbatsov/rubocop@468835f · GitHub RuboCop とは Ruby のスタイルを検査/修正したり、バグに…

就活(done)

人間の参考になればと自分の就活についてブログに書こうと時々思うんだけど、高専中退してふらふらしてた人間の就活は参考にならなさそうだなって思って書く気が起きない— Pocke(ぽっけ) (@p_ck_) 2017年6月22日 あまり人の参考になる気はしないのですが、雑…

tmux sessions ❤ peco

peco を使って tmux の session にいい感じにアタッチ出来るようにした。 想定する tmux の使いかた セッションを沢山生やす 私は、だいたい1 git repository 毎に tmux の session を生やしている。 仕事だとメインで 4 git repositories + 色々 の為に tmu…

RuboCop の Lint/UnreachableCode を直した

なにそれ RuboCop には Lint/UnreachableCode という便利 Cop がある。 その名の通り、unreachable な code を検出してくれる。 def foo do_something return do_anything # このコードは絶対に実行されない! end 上記のような絶対に実行されないコードをつ…

RuboCop で `#each` がブロックの戻り値を使わないことを思い出せるようにした

問題 以下のようなコードは、恐らくバグになります。 json = users.each do |user| id = user.id full_name = user.full_name { id: id, full_name: full_name, } end render json: json これはidとfull_nameをもったオブジェクトの配列をjsonでrenderするよ…

Git で Pull-Request を fetch する alias

GitHub で Pull-Request を fetch する為に、以下の特殊なブランチ名を使うことが出来ます。 sinsoku.hatenablog.com $ git fetch origin pull/ID/head # 42番の PR を fetch する $ git fetch origin pull/42/head 毎回これを打つのはめんどくさい、また ch…

Reek 4.7.0 から、Syntax Error の扱いが変わります。

Reek 4.7.0 から、解析対象のファイルに Syntax Error が含まれている場合の挙動が変わります。 TL;DR Syntax Error も、ひとつの警告として検出されます。 歴史 Reek における Syntax Error の扱いは、ここ最近の間に2度変更されています。 ~ v4.5.6 v4.5.6…

Reek の Collaborateur になりました

こんにちは。 先日、Reek の Collaborateur になりました。Collaborateur とは、GitHub でマージボタンを押せる人です。 結構うれしいので、ブログを書きました。 TL;DR ある朝起きたら Reek のコミット権をもらっていた。 Reek とは? github.com Reek は R…

RuboCop 0.49.0 のCHANGELOGを読む

RuboCop のバージョン 0.49.0 がリリースされました。 https://github.com/bbatsov/rubocop/releases/tag/v0.49.0 CHANGELOG から変更を見ていこうと思います。 破壊的変更 Layout Department PR: https://github.com/bbatsov/rubocop/pull/4278 今回のリリ…

Pull-Request を送るために fork したレポジトリを扱うベストプラクティス

GitHub で Pull-Request を送るためにレポジトリを fork すると、オリジナルと同一のレポジトリが自分の管理下に作成されます。 Pull-Request の入門記事では、Pull-Request がマージされた後、この fork したレポジトリをどう扱うべきかを述べている記事は…

StrongJSON の高速化実装、MightyJSON を作っている話

soutaro さんが作っている StrongJSON をより高速に実行する MightyJSON を作っています。 github.com github.com StrongJSON とは StrongJSON とは、JSON の型チェックを行う便利Gemです。 # スキーマ定義 s = StrongJSON.new do let :item, object(id: num…

GitHub で Pull Request を送る際の流れ

これはなに? GitHub で Pull-Request を送る際のオススメの流れ この記事では書かないこと コードの書き方 プロジェクト固有の流儀 クローズドなプロジェクトでの流れ OSS の場合とそこまで変わらないので、参考にはなると思います。 Pull-Request 作成後の…

Ruby用オンラインパーサーのBacon Cannonに、URLのシェア機能を追加しました

Bacon Cannon とは? bacon-cannon.herokuapp.com Ruby 用のオンラインパーサーです。Web上から Ripper 及び Parser gem を使用して Ruby のコードをパースし、AST を眺めることが出来ます。 シェア機能 今回は、この Bacon Cannon にパース結果をシェアする…

Re: 脆弱性を見つけるコードレビュー(OSコマンドインジェクション)

脆弱性を見つけるコードレビュー(OSコマンドインジェクション) - ククログ(2017-04-27) 上記記事の内容が、ミスリーディングを誘う可能性があると思ったので、勝手に補足します。 2017/05/04 追記 元の記事の方に修正をいただきました。 そのため、以下の内…

Gem として提供されているコマンドのベンチマーク

github.com 先程、RuboCop にパフォーマンス改善の Pull-Request を投げました。3%ぐらい速くなります。 この Pull-Request の効果を検証する際に用いたベンチマークの方法が、わりと面白くて便利(自画自賛)だったので、紹介します。 そもそもの問題 Gem で…

Mry を使って RuboCop のアップデートを楽しよう

TL;DR GitHub - pocke/mry: Mry Migrates .Rubocop.Yml Mry を使うと、コマンド一発で非互換にやられた.rubocop.ymlをアップデート出来る 前置き RuboCop のバージョンをご存知でしょうか? 現在(2017/04/24)の RuboCop の最新バージョンは、0.48.1 です。バ…

コマンドの出力結果をコピーするコマンドを作った

TL;DR GitHub - pocke/recc: Record command and output. recc ls -laで、ls -laが実行され、結果がクリップボードにコピーされる。 欲求 私は普段コマンドラインツールの開発をしていることが多いです。 そのため、コマンドラインツールの出力をコピーした…

Rails 5.1 の System test を試した

bacon-cannon.herokuapp.com bacon-cannon で試した。 該当の Pull-Request はこれ。 github.com 環境 Ruby 2.4.1 Ruby on Rails 5.1.0.rc1 Webpacker 1.1 capybara-webkit 1.14.0 Travis CI やったこと Pull-Request に書いてあるけど、その背景とかの補足…

情報処理安全確保支援士試験を受けた

先日、情報処理安全確保支援士試験を受験しました。 この記事では、受験までの学習方法と、実際に受験をした感想を記します。 勉強方法などが受験を考えている方の参考になれば幸いです。 尚、合否は 6/21 まで発表されないため、この記事を書いている時点で…

デバッグのためにコメントアウトして死ぬのをやめたい

タイトルのようなバグと戦うためのツールを作成した。 この記事はその宣伝である。 TL;DR github.com バグとの出会い 先日、おもしろバグに出会った。 Rails を使用しているプロジェクトで、本来必要なbefore_actionがコメントアウトされていた。 # こんなか…

Bacon Cannon のアーキテクチャ

先日、Bacon Cannon というアプリケーションをリリースしました。 bacon-cannon.herokuapp.com 一言で説明すると、Ruby のオンラインパーサーです。アプリケーションについては以下の記事をご覧ください。 pocke.hatenablog.com この記事では、Bacon Cannon …

Ruby 用オンラインパーサーを作っている

Ruby のソースコードを Ripper(1.9 ~ 2.4) or parser gem(1.8 ~ 2.4)を使ってパースした結果を眺められる Web サービスを作った— Pocke (@p_ck_) 2017年4月8日 その名も Bacon Cannon です。こちらからアクセスできます。 https://bacon-cannon.herokuapp.co…

vim-go + gocode でインポートしていないパッケージも補完したい

TL;DR Add let g:go_gocode_unimported_packages = 1 to your .vimrc 欲求 通常、gocode ではインポートしていないパッケージの関数等は補完されない。 例えば、strings.Spと打ってstrings.Split()が補完されるためには、import "strings"が必要である。 git…

lib/hogehoge/version.rb の編集に消耗しない為のツールを作った

github.com Rubygems に gem を公開していると、当然バージョンを上げたくなることがある。 その際に発生するオペレーションの一つとして lib/hogehoge/version.rb を編集する必要がある。 例 class Hogehoge # この数値を上げたい! VERSION = '0.1.0' end …

Heroku で1つの GitHub リポジトリで複数バージョンの Ruby を使う

目的 Heroku を使いたい 同じコードを複数のバージョンの Ruby で実行したい そのためにバージョンの数だけレポジトリを作るとかはやりたくない 解決法 手順1 Gemfileに以下を追記する if v = ENV['CUSTOM_RUBY_VERSION'] ruby v end 手順2 Heroku の管理画…

Battle Conference U30 に参加、登壇してきました

battleconference-u30.connpass.com bcu30.jp 登壇内容 「自分の足を撃たない技術」というタイトルで登壇しました。 資料 qiita.com 内容 実は、私がいいたいことの8割ぐらいは id:sinsoku さんのこのツイートに集約されていると思っています。 各社がレビュ…

IME でも :muscle: みたいに Emoji を入力したい!

やりたいこと :something: を解釈しないサービスでもこの形式で Emoji を入力出来るようにする。 こんな感じ 最高に便利なものが出来たぞ pic.twitter.com/Apbeoc1XPA— Pocke (@p_ck_) 2017年3月5日 やりかた IME のローマ字テーブルを書き換える 環境 Mozc …

Vim からいい感じに tig blame する

TL;DR git blame しない人は読まなくていい。 nnoremap <F3> :silent! !tig blame +<C-r>=line('.')<CR> %<CR>:redraw!<CR> .gvimrc では nnoremap <F3> :silent! !sakura -x 'tig blame +<C-r>=line('.')<CR> %'<CR> sakura は適当なターミナルエミュレータの名前に置き換える。 <F3> は完全に趣味なの</f3></cr></cr></c-r></f3></cr></cr></cr></c-r></f3>…

GitHub の芝でオリジナルTシャツを作れるサービス Shibart に 3D芝機能を追加しました!

今日はプレミアムフライデーですね。いかがお過ごしでしょうか。 本日、Shibart に新機能をリリースしました!3Dの芝です! shibart.pocke.me Shibart とは? Shibart は、GitHubの芝からオリジナルのTシャツなどのグッズを作ることが出来るサービスです。 …

Shibartで作ったグッズが届いた

先日、ShibartというGitHubの芝グラフをTシャツなどのグッズにするサービスをリリースしました。 shibart.pocke.me ブログ記事 pocke.hatenablog.com pocke.hatenablog.com このサービスで作成した商品が届いたので、それの写真などをレポートします。 なお…

🍣🍣🍣 寿司の生態 🍣🍣🍣

寿司の子供 寿司の子供はシャリが一粒しかありません。成長していくにつれてシャリが一粒ずつ増えていき、立派な親寿司へと成長するのです。 寿司の子供は外敵から身を守るため、皿に残った米粒に擬態します。 軍艦巻きの子供は自分の身を守れるようになるま…

プログラムのコードを書き換えずにRubyプログラムをStackprof付きで実行する、stackprof-run というGemを作りました。

github.com こんにちは。 id:Pocke です。 Stackprofを便利に使うGemを作成したので紹介しようと思います。 Stackprof とは 下記参照 github.com Stackprof を使う際の問題点 コマンドラインツールに対してStackprofを使用する際、通常だと以下のようなコー…

Shibart 作成の軌跡

あけましておめでとうございます。 id:Pocke です。 今年の目標は、人の顔を覚えることです。人のことを服の色で覚えてしまうので、この季節はコートを脱ぎ着すると人の判別ができなくなってしまうのを今年こそは直そうと考えています。 昨年末、Shibartとい…

GitHubに芝を生やすだけで満足していませんか? 芝を着るサービス、Shibartをリリースしました!

追記 2016年12月31日 22時40分 2016年12月31日 22時(JST)頃まで、プログラムのバグにより生成される芝が7段ではなく6段になってしまっている不具合がありました。 今後新規に作成されたTシャツなどでは問題なく7段の芝になります。 既にTシャツ等をご購入頂…

Performance/RegexpMatch Cop の概要と実装

こんにちは。id:Pocke です。 先日、RuboCop に Performance/RegexpMatch という Cop が追加されました。 Add new Performance/RegexpMatch cop by pocke · Pull Request #3824 · bbatsov/rubocop このCopは、Ruby 2.4 で追加された match? メソッドに対応す…

MISTEL BAROCCO MD600 を買って2週間程経ちました。

こんにちは。HHKB大好き!ぽっけです。 以前 HHKBサイズの分離キーボード、MISTEL BAROCCO MD600 を買いました!! - pockestrap という記事を書きました。 この記事を書いてからしばらく使ってみて、色々思ったことがあったので続編を書いてみました。 タイ…

tmuxinator の代替ツールを作っている話

github.com ptmux の p は pocke の p です。 何故作っているのか 私はずっとtmuxを使っているのですが、tmuxinatorなどのツールは使わずにいました。 最近、遅ればせながらtmuxinatorへの興味が高まったので試してみたところ、下記の不満点があることが分か…

HHKBサイズの分離キーボード、MISTEL BAROCCO MD600 を買いました!!

先日、HHKBサイズの分離式キーボード MISTEL BAROCCO MD600 が発売されました MiSTEL BAROCCO MD600 分離式 メカニカルキーボード 英語配列 62キー CHERRY 青軸 PBTキーキャップ ブラック MD600-CUSPLGAA1出版社/メーカー: MiSTEL発売日: 2016/10/27メディア…

近況 2016/10

近況です インターンシップ 株式会社mixiで1ヶ月ほどインターンしていました。 業務ではフロントエンド開発環境の改善をしていました。 チームの社員の方々から色々な知見を得られてとても有意義でした。 また、社内にあるカフェでホットチョコミントが飲め…

Firefoxでgithub-greedy-collectorを使う

Google Chrome には、GitHubのレポジトリのページに訪れた際に自動的にgit cloneしてくれるExtensionがあります。 moznion.hatenadiary.com 便利そうなのですが、宗教上の理由でFirefoxを使っているため、このExtensionを使うことが出来ません。 そのため、F…

猫 開発 ご飯

様子 もくもく温泉 開発合宿 #6 - connpass 猫 膝に乗ったもふもふを撫でる幸せ 開発 RuboCopにPR投げた Fix some cops errors when condition is empty brace by pocke · Pull Request #3625 · bbatsov/rubocop 進捗はダメだったがTシャツを作った はい pic…

Cookpad Tech Internship ~ Summer 2016 ~ に参加しました!

Cookpad Tech Internship 2016 – Summer – | クックパッド株式会社 採用情報 真面目な記事はこちら www.wantedly.com 写真で振り返るインターンシップ 太るインターン pic.twitter.com/xEQ7b8s5QE— Pocke (@p_ck_) 2016年8月10日 太るインターン pic.twitter…

go get / ghq get でのアドレス形式の違いから人類を解放した

こんにちは。最近Lintツールにお熱なPockeです。 表題の通り、go getとghq getの際にアドレス形式の違いの悩みから人類を解放しました。 go getとは go getはGo言語で記述されたソフトウェアをダウンロード/インストールする際に使用するコマンドです。 例え…

RSpecでexitを含むコードをテストする

TL;DR expect{subject}.to raise_error SystemExit exitをテストする状況はそもそも筋が悪い 前置き こんにちは。私は最近miというRails用のマイグレーションジェネレータを作っています。 github.com Railsのジェネレータは内部でThorというライブラリを使…

Rails Best Practices を3~4倍ぐらい速くした話、あるいはStackProf入門

github.com TL;DR StackProf でボトルネック検出 String#present?は遅いから使わない。 何度も呼び出される毎回同じ値を返すメソッドをメモ化 上記により3~4倍のパフォーマンス改善 はじめに Rails Best PracticesはRailsに特化したコードメトリックツールで…

Rails 4, 5 両方対応のGemをTravisでテストした話

先日、Railsのマイグレーションファイルをもっと便利に生成するGem、miのバージョン1.0.0をリリースしました。 github.com pocke.hatenablog.com このGemではRailsの4と5両方に対応しており、また4と5では挙動が異なります。 このため4と5両方のバージョンで…