pockestrap

Programmer's memo

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

keycast.vimをつくった

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

8割働く

前回までのお話 pocke.hatenablog.com 転職して5ヶ月程が経った。 現職では労働時間を普通の8割程度まで減らして働いている。 労働時間を減らして働いていることについてよく質問されるので、どんな感じに働いているかを記事にすることにした。 勤務形態 正…

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

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

ThinkPad X1 ExtremeにArch Linuxをインストールする

備忘録 前回までのお話をだいたいそのままやっている。 https://pocke.hatenablog.com/entry/2016/06/18/180914 wifi Wifiに接続 wifi-menu SSH server を起動 SSH server を起動して、外からSSHしてインストール出来るようにする。 コマンドのコピペが効く…

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で構築するのに便利な気がしま…

:terminal を使ってDenite.nvimのシンプルな代替Vimプラグインを作った

Problem Denite.nvim という便利なVimプラグインがあります。 Deniteの解説は他に譲りますが、私は主にファイル名のインクリメンタルサーチや、git grepに使っていました。 github.com Uniteの頃からとても便利に使っていたのですが、DeniteはPythonに依存し…

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…

10連休

10連休でできたこと、できなかったことを書く。 英語でもだいたい同じような記事を書いた。 til.hatenablog.com やったこと プログラミング RubyKaigiでRubyVM::ASTをみんな楽しそうに使っているのを見て、遊びたくなって色々やっていた。 このへんが成果物…

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…