@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Ruby

rspe-parametarizedでFizzBuzzのテストコードを書くと?

GitHub - tomykaira/rspec-parameterized: RSpec::Parameterized supports simple parameterized test syntax in rspec.を使ってみます。 require 'rspec-parameterized' require './fizzbuzz' describe 'FizzBuzz' do using RSpec::Parameterized::TableSyn…

DRYな気持ちでRSpecでFizzBuzzのテストコードを書くと?

素直な気持ちで書くとexpect(fizzbuzz 1).to eq '1'に似た文がたくさん出てきます。 DRYにしたくなったので、テストデータをテーブルで定義してグルグルっとアサーションを回します。 require './fizzbuzz' describe 'FizzBuzz' do it do [ [0, ''], [1, '1'…

素直な気持ちでRSpecでFizzBuzzのテストコードを書くと?

「1から100までの数に対して3で割り切れる数はFIZZ、5で割り切れる数はBUZZ、 3でも5でも割り切れる数はFIZZBUZZと表示する。それ以外の数は数字のまま表示する。」 describe 'FizzBuzz' do context '数が1より小さいとき' do it { expect(fizzbuzz 0).to eq…

実行時間を測るRubyの関数

チューニングするときボトルネックを探したいです。 ボトルネックの候補となる処理を実行したときにどれぐらいの時間が掛かかるのか計測したいです。 次の関数を作りました。 def elapsed_time_of(message = '') starting = Process.clock_gettime(Process::…

処理時間計測用のRubyスクリプト

ある関数をチューニングするために、つぎのような計測用のスクリプトを作成しました。 require 'benchmark' annotations_collection = JSON.parse File.read(ARGV[0]) annotations_collection.each { _1.deep_symbolize_keys! } project = Project.find_by(i…

Gemのテンプレートを作るコマンド

bundle initじゃなくて何でしたっけ? www.engineyard.com bundle gem heynow 全部デフォルトで作成すると次のようなファイルができました。 ►ls -R heynow/ heynow/: Gemfile README.md Rakefile bin heynow.gemspec lib sig heynow/bin: console setup hey…

tengu_p Railsエディション

def tengu_p(*args) args.each.with_index(1) { |msg, i| Rails.logger.debug '👺' * i + msg.inspect } end アプリケーション実行時もデバッグプリントできるように、Rails.loggerを使います。。

tengu_p

blog.magnolia.tech 実際、便利です。 自動テストの実行中にデバッグプリントすると、出力結果を探すのが大変です。 制御文字を使わなくても赤色で表示されるので、出力結果が簡単に見つかって便利です。 でも、毎回次のように書くのは面倒です。 特にIMEを…

LeetCodeをやってみた

解いてみた問題は次の2つです。 https://leetcode.com/problems/two-sum/ https://leetcode.com/problems/design-hashset/ 速く動くプログラムを書くために、データ構造とかアルゴリズムを考える力を求められる感じです。 今の時点の僕は「これを求めてなか…

Ruby 2.5にはBundlerが含まれない

最近、Rubyをはじめた人からRuby 2.5*1の環境で次のエラーが出たという相談を受けました。 rbenv: bundle: command not found The `bundle' command exists in these Ruby versions: 2.7.5 3.0.3 エラーメッセージ通りbundleコマンドがないので、gem install…

RubyZip 3.0 is coming!

Rails 6.1の、特にテストのあるアプリケーションをbundleすると次のような警告がでます。 Post-install message from rubyzip: RubyZip 3.0 is coming! ********************** The public API of some Rubyzip classes has been modernized to use named pa…

RubyのパターンマッチでFizzBuzz

rustでFizzBuzz - @ledsun blog で、rustのパターンマッチングを使ったFizzBuzzを書いたので、rubyでもパターンマッチ*1でFizzBuzzが書けそうな気がしてきました。 (1..30).each do case _1 in i if i % 15 == 0 p 'FizzBuzz' in i if i % 5 == 0 p 'Buzz' i…

I won't let you pay me for my open source

world.hey.com めっちゃ長かったです。 すごく雑に言うと「OSSは癒やし。お金をもらってしまうと癒やしが仕事に変わってしまう」な内容のようです。 本当はDHH自身の体験を織り交ぜた、もっといい話なんですが、僕の理解力と表現力でフィルターするとそんな…

WSLでRailsを動かす時に躓いたこと

WSLっていうかUbuntuだと思います。 結論からいうと libsqlite3-dev libffi-dev を入れておきましょう。 libsqlite3-dev gem install rails -v 7.0.0.alpha2してrails newすると次のエラーがでます。 An error occurred while installing sqlite3 (1.4.2), a…

Ruby 3.1 Preview 1を試す

今年のクリスマスにリリースが予定されているRuby 3.1のPrview 1がリリースされました。 rbenv + ruby-buildを使って動かして見ます。 ruby-buildを更新します。 ledsun@MSI:~►cd .rbenv/plugins/ruby-build/ ledsun@MSI:~/.r/p/ruby-build►git pull remote:…

RailsをセキュリティチェックするGem

www.youtube.com で、紹介されているなかで brakeman bundler-audit を、試してみました。 どちらも使うのはめちゃ簡単です。 Gemfileに次のような記述を追加します。 group :development do gem 'brakeman' gem 'bundler-audit' end あとは bundle bundle e…

Rails 5.0.7.2とMinitest 5.14.4で --verbose オプションをつけるとエラーがおきる

minitestをつかったRailsアプリケーションを5.0にアップデートするときに不思議な現象に出会いました。 bin/rails test は通るのに bin/rails test —verbose でエラーになる 不思議・・・です。 ~ bin/rails test Run options: --seed 4913 # Running: .....…

Rails 4.2のtest-unitに苦戦する

Railsのバージョンを上げようと思って、3年ぶりくらいにRails 4.2のアプリケーションに触りました。 テストコードがあるのですが、test-unitです。 この組み合わせを触るのが久しぶりなので苦戦しました。 コミットログを見る限り、3年前に自分でテストコー…

名探偵、Rails 6.0のDNSリバイディング攻撃対策を探すの巻

前提条件 マイクロサービスをdocker composeで動かしていました。 Ruby on RailsでできたAPIサーバーのRailsのバージョンを6.1.4.1に上げました。 するとAPIサーバーは 403 Forbidden を返すようになりました。 奇妙なことに、ホストOSからリクエストを送る…

kaigion_rails_newにてライトニングトークをしました

kaigionrails.doorkeeper.jp 話の背景は Rails 7 はユニバーサルJavaScriptモジュールの夢を叶えるか? - @ledsun blog です。 内容 www.youtube.com 文字だとこんな感じです。 書きおこしではないです。 練習中に作ったトークスクリプトままです。 細部は違…

Separation of positional and keyword arguments in Ruby 3.0に対応した

SPARQL::Client.new endpoint_url, endpoint_options のようにオプションのハッシュを渡している場所に、**をつけて次のように直しました。 SPARQL::Client.new endpoint_url, **endpoint_options このコンストラクタの実装は次の通りです。 https://github.…

Rails 7はESモジュールをどう扱うのか?

www.youtube.com の手順で作成したRailsアプリケーションの動作を見てみましょう。 このRailsアプリケーションの http://localhost:3000/posts のHTML、特にheadタグを見ます。 Post一覧画面のheadタグ なかでも気になるのは次の行です。 <script type="module">import "applicatio</script>…

Sprocketから要らなくなった機能を削減したPropshaft

"Propshaft is an asset pipeline library for Rails. It's built for era where bundling assets to save on HTTP connections is no longer urgent, where JS and CSS is either compiled by dedicated Node.js bundlers or served directly to the browse…

プログラミング言語Rubyを修正する方法

RubyのDateからTimeへ移行する道程、いまここ - @ledsun blog で、RubyのTimeにパッチを投げると取り込まれやすそうだということがわかりました。 どうのような手順で、Rubyの修正、パッチの提出をすれば良いのでしょうか? Kaigi on Rails new と言う去年の…

Rails 7 のActiveStrageはデフォルトではImageMagickの代わりにlibvipsを使う

Rails 7 αを試して、エラーで躓いているところ - @ledsun blogでCould not open library 'libvips.42.dylib': dlopen(libvips.42.dylib, 5): image not foundというメッセージを含むエラーが起きたので、ググったところ次のissueが見つかりました。 github.c…

Rails 7 αを試して、エラーで躓いているところ

www.youtube.com を真似て素振りしていきます。 rails new showtell 最初は--devオプションをつけて、ローカルに入っているRailsがインストールされて失敗しました。 cd showtell bin/rails g scaffold post title:string content:text bin/rails action_tex…

Rails 7 ではアプリケーション作成時にBulma(CSSフレームワーク)のインストールもできるようになりそう(なった)

github.com 最初はBulmaはNode.jsを使ってコンパイルしないからとクローズされました。 カスタマイズする際はsassを使ってコンパイルするので再オープンされました。 CSSフレームワークインストール用のGemがRails本体から分かれたからなのか、結構柔軟に取…

RubyのDateからTimeへ移行する道程、いまここ

RubyKaigiでRubyの改善のために、次の協力が求められていました。 youtu.be RubyのDateライブラリーのメンテナンスが行われていません。 Dateと同じ機能がほとんどTimeで提供されています。 strptime, parseなどはDateの機能が残っています。 この機能をTime…

nbodyのチューニング

benchmarksgame-team.pages.debian.net のスクリプトをチューニングします。 特に知見はないので、思いついた色々なパターンを試して、雰囲気を掴んでみましょう。 ソースコードはURLのみ載せます。 変更前 https://github.com/ledsun/nbody/blob/main/hoge.…

Ruby 3.0のJITの特性

Ruby 3.0のJITのすごさを体験する - @ledsun blogのスクリプトは引数で計算回数を指定することができます。 5000万回計算するとJITありはなしの2倍近い速度になりました。 施行回数を減らすとどうなるでしょうか? ~ time ruby hoge.rb 500 -0.169075164 -0.…