pockestrap

Programmer's memo

Ruby

Roppongi.rb#10 で「Self-hosting Whitespace」というタイトルでLTをした

タイトル通り、Roppongi.rb#10 でSelf-hosting WhitespaceというタイトルでLTをしました。ディープな話題ですが楽しんでもらえたようでよかったです。 roppongirb.connpass.com speakerdeck.com docs.google.com この記事では、発表の際に話せなかったことや…

Rubyでメソッドのインライン展開をする

Rubyでメソッドのインライン展開をするRinlineというgemを作って、RubyちこくKaigiで発表した。 github.com speakerdeck.com docs.google.com 見るならSpeakerdeckよりもGoogle slidesの方がオススメ。オリジナルデータだし、URLがリンクになっている。 この…

Ruby Puzzle その2

その1はこちら pocke.hatenablog.com 解答、ヒント、解説などは充分な余白を開けた上で表示するので、安心して読んでください。 問題 class String def to_proc puts self -> { self } end end ->(&b){b.()}.(&("Hello world" * 42)) このRubyプログラムに1…

Ruby Puzzle その1

解答、ヒント、解説などは充分な余白を開けた上で表示するので、安心して読んでください。 問題 gist.github.com このRubyプログラムに1文字追加して、"Hello world\n"を出力するプログラムにしなさい。 なお、例外などで異常終了するものは正答とはみなしま…

Itamaeのテストを壊してしまっていた話

本日、Itamae v1.10.4がリリースされました。 Itamae v1.10.4 released! thanks @p_ck_ !https://t.co/rcUOukG0Ag— うなすけ (@yu_suke1994) May 10, 2019 このリリースには私のPull Requestがいくつか含まれています。 この記事ではそのうちの1つのPull Req…

RubyをWhitespaceにトランスパイルする

前回までのお話 pocke.hatenablog.com Whitespaceというプログラミング言語があります。 Whitespaceは空白文字だけで構成されたプログラミング言語です。 空白文字だけで構成されているので、当然Whitespaceでプログラムを記述するのは大変です。 そこで、Ru…

WhitespaceをRubyに埋め込む

Whitespaceというプログラミング言語があります。 この言語はスペースとタブと改行文字だけで構成された言語です。 たとえばHello, world!を出力するプログラムは次のようになります。 gist.github.com このWhitespaceをRubyで実装してみました。Akazaという…

Rubyでoverloadをする

Rubyは言語仕様としてはoverloadを提供していませんが、ライブラリを使うことでoverloadできます。 github.com 使い方 まずgemをインストールします。 $ gem install overloader クラスにOverloaderモジュールをextendし、overloadメソッドを呼び出すことでo…

最近querlyに投げたpull request 2019-04

ここ最近querlyにいくつかPRを投げる機会があったので、ブログにまとめてみる。 Add documentation for as syntax #60 github.com これはドキュメントの更新である。 使いたい機能がドキュメントに書かれていなかったので追加した。 querlyにはinterpolation…

遅延評価とRSpecとActive Record

仕事をしていて面白いコードを見たので紹介する。 次のコードについて話す。適当に書いているし、適宜コードも書き換えているので、間違っていたら適当に補完して読んで欲しい。 # app/models/user.rb class User < ApplicationRecord scope :admin, -> { wh…

Cuculus.vimを作った

github.com なにこれ Rubyのdef-endなどの対応を%でジャンプするためのVimプラグイン。Parser gemを使っているので、Parser gemが正確にパースできるコードであれば正確な位置にジャンプできる。 動機 vim-jpのSlack1でmatchup.vimがうまく動かないという話…

RuboCopの次のバージョンから、.rubocop.ymlの重複エントリが警告されます

RuboCopの次のバージョンから、.rubocop.ymlの重複エントリが警告されます。Pull Requestはこちら。 github.com Problem RuboCopでは、.rubocop.ymlに重複したエントリがあることが原因であるIssueが度々上がってきていました。 例えば#6728などです。これは…

毎日新鮮なRubyを使う

rbenv global trunkしていても気が向いた時にしかRubyをビルドしていなかったので、trunkと言いつつ結構古いRubyが動いていることが多かった。 そのため毎日Rubyをビルドして、trunkとしてインストールするようにした。 環境 Arch Linux systemdが動いている…

arpry: どこでもpryでActive Record

Rails Console、便利ですよね。これさえあればデータの表示や簡単なデータの修正、作成などが簡単にできてしまいます。 ところがそんな便利なRails Consoleにも1つ大きな欠点があります。Rails ConsoleはRailsでしか使えません。 当然です。ですが、不便です…

.travis.yml内のRubyのバージョンを更新するPull Requestを作る

こんにちは。Ruby 2.6が先日リリースされましたね。 Rubyの新しいバージョンがリリースされると、その度に.travis.ymlに書かれているRubyのバージョンを上げる作業をしている方は多いと思います。 今回はその作業を楽にするツールを作ったので紹介いたします…

refineをしてるモジュールをFiddleを使わずに取り出してみた

元ネタ: qiita.com require 'objspace' class C using Module.new { refine(C) { def hi puts "hi" end } } end def reachable?(from:, to:) ObjectSpace.reachable_objects_from(from).include?(to) end def rob(klass) modules = ObjectSpace.each_object(…

Elegant collaboration of Vim and Ruby (VimConf 2018 CFP; rejected)

Abstract Ruby is an elegant programming language. However, Vim's Ruby interface was not elegant unfortunately. But we can find elegant collaboration of Vim and Ruby "now" (note: "now" is Nov. 24th, 2018)! I talk the elegant of the collabor…

RubyKaigi 2018 Proposal: A parser based syntax highlighter

accepted. rubykaigi.org Title A parser based syntax highlighter Abstract It has an elegant syntax that is natural to read and easy to write. https://www.ruby-lang.org/en/ Definitely. The syntax is elegant. But it is too complex sometimes. …

ruby-2.5.0 みたいなaliasを生やす

for v in $(rbenv versions | ruby -ple '$_ = $_[/[* ]+(\S+)/, 1]'); do alias "ruby-${v}=RBENV_VERSION=${v} ruby" done $ ruby-<tab> external command ruby-build ruby-parse ruby-rewrite alias ruby-2.3.1 ruby-2.4.2 ruby-2.5.0-rc1 ruby-system ruby-2.</tab>…

I18nはユニークではない

I18nはユニークではない。grepしてみよう。 $ grep -E '^i.{18}n$' /usr/share/dict/words institutionalisation institutionalization internationalisation internationalization 4件引っかかった。このうち2つはsとzの違いなので無視するにしても、I18nに…

rubocop-rspecでもCop Generatorが動くようにした

github.com github.com TL;DR rubocop-rspecにCopを追加する時も、rake new_cop[RSpec/NewCopName]でCopの雛形を作ることができるようになった。 Cop Generatorとは RuboCopにはrake new_cop[Style/FooBar]などとすると新規Copのテンプレートを作れてしまう…

Clean Code for Railsを読んだ

booth.pm 神速さんの同人誌がゲリラ物販されていたから頂いてきた。 pic.twitter.com/JXNwyL0SF9— Pocke(ぽっけ) SW-1309-2807-5790 (@p_ck_) 2017年12月9日 RailsDM 2017の時にいただいた @sinsoku_listy さんのClean Code for Railsを読み終わった。RSpec…

WEB+DB PRESS vol.102からRubyの連載を担当します

こんにちは。id:Pockeです。 12月23日1に発売されるWEB+DB PRESSのVol.102から、Rubyの連載2を担当いたします。 何を書くのか Rubyの連載ということで、もちろんRubyの記事を書きます。 Rubyを使う上での基礎となる技術について書いていきたいと思っています…

RuboCop 0.52.0 のCHANGELOGを読む

RuboCop のバージョン 0.52.0 がリリースされました。 https://github.com/bbatsov/rubocop/releases/tag/v0.52.0 めんどいので駆け足で。 TL;DR 追加されたCop Style/StringHashKeys Style/RandomWithOffset Lint/ShadowedArgument Lint/MissingCopEnableDi…

Rails Developers Meetupに行った

2017/12/09にRails Developers Meetupに行ってきました。 railsdm.github.io techplay.jp 発表の全体的な印象 まず、Docker関係の発表が多かったように思えます。 Docker Developers Meetupだった Professional Rails on ECS (rails developer meetup 2017) …

`Style/EmptyBlockParameter`(と`Style/EmptyLambdaParameter`)を作った

github.com Style/EmptyBlockParameterとStyle/EmptyLambdaParameterというRuboCopのCopをだいぶ前に追加した。後者はおまけ なにこれ Rubyでは、ブロック引数が存在しない場合でもバー(|)を書くことが出来る。 foo.do_something do foobar end # 上の式とこ…

Style/EvalWithLocation Copを作った

github.com github.com rubocop-jpのissuesにあげたものを、実装してみました。 このCopが対象とする問題 eval族1のメソッドには、コードの位置情報を渡すことが出来ます。 この位置情報は主に例外が上がった際のバックトレースの表示に役立ちます。 https:/…

rubocop-jp/issues を作った。

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

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" - "**/…

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://…