pockestrap

Programmer's memo

Programming

ruby-signatureにテストファイルのジェネレータを追加した

ruby-signatureとは github.com Ruby 3に向けて、Rubyの型定義ファイル周りを提供するプロジェクトです。 https://speakerdeck.com/soutaro/ruby-hack-challenge-holiday-number-8 このスライドも参考になるでしょう。 この記事では組み込みライブラリの型定…

RuboCopで型情報を利用した解析を試している

3行 RuboCopで「この変数はString」とかの情報を含めて解析させられないか試している まだPoCだけど、なんとなくは動いている https://github.com/pocke/rubocop-typed を見て 何をしているの rubocop-typed というプロジェクトで、RuboCopで今までできてい…

RuboCop Rake をリリースしました

github.com これはなに RuboCop Rakeは、Rake関連のファイルに対してのCopを集めたRuboCopプラグインです。 実はリリースは少し前からしていたのですが、晴れてRuboCop HQ下に移動した1のでリリース記事を書いてみました。 Cops 現在、RuboCop Rakeは3つのCo…

大阪Ruby会議02で、「Suppress Warnings」というタイトルで登壇しました

docs.google.com speakerdeck.com speakerdeckよりもGoogle Slideの方が埋め込んだGIF動画が動くのでオススメです。 regional.rubykaigi.org 大阪Ruby会議02でSuppress Warningsというタイトルで登壇させていただきました。 登壇してから気がついたことや、…

String#gsub! は String#gsub よりも遅い

ruby-jp1のSlackで話していて面白かったのでまとめ。 Slack上の発言 RubyのString#gsub!はString#gsubの破壊的バージョンで、置換結果でレシーバを上書きする。 当然gsub!の方が新しいStringオブジェクトを生成しないので速いと思っていたら、どうやらそんな…

Ruby 2.6でunicornがrestartしない

あるRailsアプリケーションで使用しているRubyを2.5から2.6に上げたところ、unicornがrestartしてくれなくてハマった。 その時の問題と解決方法をメモ。 エラー内容 restartに失敗しているunicornのerror logを見てみると、次のようなエラーが出力されていた…

RuboCopのカスタムCop gemを作るためのジェネレータを作った

github.com これはなに RuboCopのカスタムCop gemを作るためのジェネレータです。 rubocop-rspecなどのgemを作る時のひな型を生成します。 使い方 まず、gem installします。 $ gem install custom_cops_generator そして、custom_cops_generatorコマンドを…

大阪Ruby会議02 CFP: Suppress Warnings

regional.rubykaigi.org rubykansai.doorkeeper.jp このCFPは大阪Ruby会議02に採択されました。 発表の題目 Suppress warnings 発表の概要 Rubyを-wオプション付きで実行したことはありますか? このオプションをつけてRubyを実行すると、様々なRubyの警告が…

次のRubyプログラムの出力はなにか。

元ネタ: https://twitter.com/p_ck_/status/1164901123666272262 問題 次のRubyプログラムを実行した時の出力を、次の4つから選べ。 case when p, q = 1, 2 p 3 else p 4 end p p p q 選択肢1 3 1 2 選択肢2 3 nil 1 選択肢3 4 1 2 選択肢4 3 nil 2 答えと解…

OvtoにPureComponentを実装した

github.com Ovtoとは github.com Rubyで書かれたフロントエンドのフレームワーク。 Hyperappをベースにしていて、VDOMを使っている。 https://magazine.rubyist.net/articles/0059/0059-Ovto.html とかを読むのが良いと思います。 PureComponentとは Reactと…

banner (1) をベースに、Vim scriptでbannerを出すプログラム vanner を実装した

Hello, Vanner! github.com 実装の動機 keycast.vim というプラグインを紹介した(keycast.vimをつくった - pockestrap)ところ、macOSでうまく動かないという報告をもらいました。 調べてみると、keycast.vimが依存しているbannerコマンドの挙動がプラットフ…

keycast.vimをつくった

Vimで入力した文字を表示するためのプラグイン、keycast.vimを作った。 github.com screencast 仕組み 入力されたキーをbannerコマンドで大きくして、popup windowに表示している。 キーの入力 最初、Vimでキーの入力を監視する方法が見つからなくて苦労した…

Naming/RescuedExceptionsVariableName copが壊れていたから直した

github.com Naming/RescuedExceptionsVariableNameとは rubocop.readthedocs.io RuboCopのCopで、rescue節で例外をキャプチャした時の変数名を統一するためのCop。 デフォルトではeに統一される。1 例 # good begin rescue StandardError => e end # bad beg…

Ruby Puzzle その3

その1はこちら pocke.hatenablog.com その2はこちら pocke.hatenablog.com 解答、ヒント、解説などは充分な余白を開けた上で表示するので、安心して読んでください。 問題 mobile.twitter.com 1 || true || puts("Hello world") || 1 このRubyプログラムに1…

AURからパッケージをインストールするItamaeのresourceを作った

github.com AUR (Arch User Repository)からパッケージをインストールするItamaeのresourceを作りました。 Usage 次のように書くとrbenvパッケージをAURからインストールします。 aur_package "rbenv" Arch Linuxの環境をItamaeで構築するのに便利な気がしま…

Meguro.rb#27 でFizzbuzzだけできるRuby to JavaScriptコンパイラを書いた

github.com Meguro.rb#27のLTで、ライブコーディングでFizzbuzzができるRuby to JavaScriptコンパイラを書きました。 ライブコーディングだけをしたので、資料は↑のGitHubリポジトリのみです。 このコンパイラを使うと、次のFizzbuzzのコードがJavaScriptの…

Vimでカーソル位置のRubyVM::AST::Nodeを表示する

quickrunを使って、RubyVM::ASTを使ってパースしたASTからカーソル下のノードをサッと表示できるようにしてみた pic.twitter.com/EkpYdP669j— Pocke(ぽっけ) SW-1309-2807-5790 (@p_ck_) May 27, 2019 次のコードをprint-focused-ast.rbとして適当なところに…

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という…

遅延評価と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などです。これは…

arpry: どこでもpryでActive Record

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

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

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

Update commit status on GitHub manually

Today, I published a simple command line tool to update commit status on GitHub. It is named git-update-commit-status. github.com Installation It requires Go 1.11 or higher. $ export GO111MODULE=on $ go get -u github.com/pocke/git-update-c…