pockestrap

Web Programmer's memo

Programming

rubocop-jp/issues を作った。

vim-jp/issues のパクリです。 https://t.co/V6MpMfF3q7 前々から作りたいと思っていた rubocop-jp を作りました。英語でバグ報告とかつらいよーという人のためのアレです。ついでにそのへんの興味ありそうな人を雑にorgに招待しました— Pocke(ぽっけ) SW-13…

exit status が0である間コマンドを繰り返す

id:sinsoku さんのツイートを見て思いついた。 for n in {1..10}; do rspec spec/foo_spec.rb || break; doneそして、稀に落ちるテストが再現するのを待つ— 神速@リリカルエンジニア (@sinsoku_listy) 2017年11月7日 zshのrepeat便利なんだけど、exit status…

RuboCopのCop数を数える方法

$ rubocop --show-cops | head # Available cops (374) + config for /tmp/tmp.osgxetgoX3: # Department 'Bundler' (3): Bundler/DuplicatedGem: Description: Checks for duplicate gem entries in Gemfile. Enabled: true Include: - "**/Gemfile" - "**/…

stderrが出たらexit 1する

コマンドがstderrを出力したらexit 1をするようなコマンドがほしかったから作った。 github.com 何故必要か 「警告をstderrに出すけど、警告があっても常にexit statusが0のコマンド」をCI上で使っていて、警告が出た場合はCIを落としたかった。 Installatio…

RuboCop 0.51.0 のCHANGELOGを読む

RuboCop のバージョン 0.51.0 がリリースされました。 https://github.com/bbatsov/rubocop/releases/tag/v0.51.0 CHANGELOG から変更を見ていこうと思います。 破壊的変更 古い Ruby のサポート終了 https://github.com/bbatsov/rubocop/pull/4789 https://…

parser gemのコミット権をもらった

github.com ここ最近parser gemにいくつかPull-Requestを投げていたら、コミット権をもらった。 Fix performance regression for a string that contains a very long line by pocke · Pull Request #364 · whitequark/parser · GitHub Add `require 'date'`…

学生LT #4 で、Ruby Quiz という LT をした。

タイトルのとおりです。 student-lt.connpass.com speakerdeck.com 何を話したか Ruby のちょっと面白い構文について、クイズ形式で紹介をしました。 (時間が限られていたので、実際にクイズをしたわけではないです…) 前に Meguro.rb で話した Rubyがむずか…

require を忘れる

Ruby のコードをちょっと試したい時、requireを煩わしく感じることがあります。 例えば素数が小さい順に10個欲しくなった時、Rubyist は Ruby でワンライナーを書くでしょう。 $ ruby -e 'require "prime"; require "pp"; pp Prime.take(10)' [2, 3, 5, 7, 1…

🍚🅱🚨🚵🎼😬🐦🛐🌘📵🆒🏫✌🎷🍤🐠👨⁉🆒🇷

github.com 生きていると、絵文字が欲しくなる時がある。例えば、ブログのタイトルに迷った時。 そういう時に、サッと絵文字を提案してくれるコマンドがあったら便利ではないだろうか? その願いを叶えてくれるのが、emo コマンドだ。 このコマンドは、go ge…

RubyKaigi 2017 で Lint について話します。

RubyKaigi 2017 で Lint について話します。 rubykaigi.org Lint とは Lint というのは、バグになりうるコードを自動で検出プログラムです。 なにを話すのか Ruby のための Lint を、どう実装するかについて話します。 Lint が検出するコードの例を一つ紹介…

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

RuboCop の Collaborator になりました

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

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するよ…

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…

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 に書いてあるけど、その背景とかの補足…

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

タイトルのようなバグと戦うためのツールを作成した。 この記事はその宣伝である。 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…