pockestrap

Programmer's memo

CircleCIの実行を速くした

先週仕事でやったのをメモします。 CI力が低いので、記事を公開することでツッコミをもらうのが目的です。 モチベーション 弊社ではCIの実行が1回あたり20分ほどかかっています。 これはわりとストレスなので速くしたいです。幸いにも削れそうなところが2つ…

Rails/UniqueValidationWithoutIndex copを追加した

rubocop-rails にRails/UniqueValidationWithoutIndex copを追加しました。 rubocop-railsの次期リリース(おそらくv2.5.0)から利用できます。 github.com これはなに Rails/UniqueValidationWithoutIndex copは、RDBMSのunique indexがついていないカラムに…

私にPull Requestとレビューを見せてください

TL;DR RuboCopプラグインの開発の為にPull Requestを見たいです 仕事としてでもそうでなくても構いません TwitterやGitHub Issueやメール( kuwabara (at) pocke(dot)me )までご連絡お待ちしています 背景 現在私はRuboCop Typed (仮)というRuboCopプラグイン…

RubotyでSKIコンビネータ計算する

RubotyはRubyで書かれたチャットボットフレームワークです。 github.com RubotyはRubyでプラグインを実装して拡張できます。つまりRubyでできることはRubotyでできます。便利ですね。 ということでRubotyでSKIコンビネータ計算をしてみました。 しかし、Ruby…

Rubyで型情報を使ってオーバーロードをする

以前Rubyでoverloadをするという記事を書きました。 この記事で紹介しているoverloader gemを使うとRubyでオーバーロードができるようになります。 overloader gemは今まで引数の数の違いでしかオーバーロードを定義できませんでしたが、v0.2.0で型情報を使…

毎日日記を書く技術

最近、 https://commits.hatenablog.com で毎日日記を書いている。 この毎日というのは一日も欠かさずという意味で、実際日記を書き始めた2019-12-17から一日も欠かさずに続けている。1 これを続けるために2つ工夫していることがあるので紹介したい。1つは仕…

2019年に作ったGitHubリポジトリ

年末なので、今年GitHubに作ったリポジトリを振り返ってみます。 このリストは次の記事のコードを使って生成しました。 pocke.hatenablog.com リポジトリたち 今年は31個のリポジトリを作りました。 下に行くほど新しいリポジトリです https://github.com/po…

Kernel.#systemの型はむずかしい

adventar.org この記事は ruby-signature advent calendar 23日目の記事です。 今日が祝日じゃないと今月に入ってから知りました。 私はruby-signatureにKernel.#systemメソッドの型を修正するPRを出しました。 https://github.com/ruby/ruby-signature/pull…

rubocop-rubycwとは

github.com TL;DR ruby -cw をRuboCopのインターフェイスで扱うためのgem ruby -cwとは rubyのコマンドラインオプション。 -cを付けると、Rubyはコードを実行せず、構文のチェックのみを行う。 -c check syntax only -wを付けると、Rubyは見つけた警告をすべ…

今年GitHubに作ったリポジトリを振り返ってみませんか?

gist.github.com 上のRubyプログラムを適当に保存して実行すると、あなたが今年作ったリポジトリの一覧が表示されます。 # 私の例 $ ruby this-year-repos.rb https://github.com/pocke/ika2.vim https://github.com/pocke/chuu https://github.com/pocke/re…

なにもできない

静的解析 RuboCopのコードを書けるから、ASTをトラバースするコードを書くのは慣れているけどそれだけ。 電卓以上のパーサを書いたことがない。 型システムも何もわからない。TypeScriptでプログラムを書くことはできるけど、TypeScriptがどうやって型を解析…

平成Ruby会議01 で、Regression test for RuboCopというタイトルで発表しました。

heiseirb.github.io Proposalはこちら pocke.hatenablog.com ついつい本番だと早口になってしまうので、3分ぐらい余らせてしまった。余った時用のコンテンツを用意しておくのが良いのかなあ。 knuさんとkoicさんの発表がそれぞれOSSのいい話という感じで良か…

CfP Advent Calendarを作った

CfP Advent Calendar って何? adventar.org カンファレンスなどのCfP (Call for Proposals)に投稿したProposalをシェアするAdvent Calendarです。 たんにProposalを投稿するだけです。もちろんProposalの背景なども合わせて書いていただいても構いません。 …

平成Ruby会議01 CfP

この記事はCfPアドベントカレンダー1日目の記事です。 adventar.org heiseirb.github.io このトークはacceptされました。12月14日に話します。 発表タイトル(※本情報は当選時にLPに掲載されます) Regression Test for RuboCop 発表の概要(※本情報は審査にの…

Find who you'd like to sponsor on GitHub

I'm exiting with GitHub Sponsors. But it is not easy to find who enables GitHub Sponsors. So I created a program that finds users who enable GitHub Sponsors from my following. Usage Download the following code as gh-sponsors.rb. https://gi…

鹿児島Ruby会議01に参加した

k-ruby.github.io 先日行われた鹿児島Ruby会議01に登壇者として参加してきました。 私は「ruby-jp」というタイトルで、ruby-jpというコミュニティ1について発表してきました。 speakerdeck.com 発表後にたくさん声をかけてもらえたし、ruby-jpのslackにもた…

rurema organization に招待された

ruremaとはRuby Reference Manualの略(これには最近気がついた)で、Rubyの公式リファレンスマニュアルをなんやかんやしているプロジェクトです。 github.com 今日このプロジェクトのメンバーに招待されました。できることをコツコツやっていこうと思います。…

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 答えと解…

Ruby界隈の大統一Slackワークスペースがほしい

TL;DR https://join.slack.com/t/ruby-jp/shared_invite/enQtNzE1NDg1ODE2MDM2LTE1NTc2Y2M0ZThlNzdmOWEyZjYwZjdhZDAwNjNhMGE0NDJiODcwMTNkZWRjOTgyMzNkZjEyMmQ1ZWYyNzkzYzk に入るといい感じになってほしい このブログの内容は私個人の意見であってこのSlack…

Ruby 2.7では require 'stringio' が必要になりそう

github.com 今まではrubygemsがrequire 'stringio'をしていたけど、高速化のためにlazy loadingするようにして起動時に読み込まないようになった模様。 結構な数のプログラムが壊れそう(実際壊れた)。1 $ ruby -v -e 'p require "stringio"' ruby 2.7.0dev (…

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コマンドの挙動がプラットフ…