@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Railsガイド日本語訳への貢献

雑談会 - @ledsun blog で 昔使ってたDelayed::Jobがなくなっていた と書いたら次のような情報を頂きました。 ちなみに、Railsガイドの英語版を見ると、Delayed::Jobの記載はありますね~https://t.co/mSD6s4Gz5N— thinkAmi (@thinkAmi) August 14, 2022 修…

並列プログラムの作り方

並列プログラムの作り方作者:Carriero,Nicholas,Gelernter,David共立出版Amazon 咳さんがどこかですすめてたのを見て2018年に買った本です。 4年の熟成を経て、読んでみました。 原著は1990年発行なので、30年前の本です。 大学の教科書向けの本です。 教科…

雑談会

今年の4月から社内のslackでハドルを使って、週一で30分の(技術的なテーマで)雑談をしています。 今回は僕が司会の回だったので、ActiveJobのバックエンドについて質問しました。 スレッドワーカーのSidekiqで並列化できるわけもなく - @ledsun blog でSid…

スレッドワーカーのSidekiqで並列化できるわけもなく

処理を並列化したらデータベースアクセス速度が低下した謎 - @ledsun blog で「SidekiqのジョブをつかってCPUバウンドな処理を並列化したのに速度低下しておかしい。」みたいなことを書きました。 冷静に考えたら並列化されてません。 RubyのスレッドにはGlo…

京都大学OCWの国際経営史

お知らせ|京都大学OCW で閉鎖になることを知りました。 そもそも公開されていることも知りませんでした。 せっかくなので何か見てみようと思って一番最近公開されていた国際経営史という講義を見てみました。 ocw.kyoto-u.ac.jp いまあつい経営者のイーロン…

処理を並列化したらデータベースアクセス速度が低下した謎

ActiveJobとSidekiqで実装されたとある非同期処理を高速化しようと試みています。 入力ファイルからデータを読み取ってDBへ保存する処理です。 事前処理がそれなりにあるのでCPUバウンドな処理とI/Oバウンドな処理が半々ぐらいです。 CPUバウンドな処理は並…

thorのワーニング

現象 あるRailsアプリケーションのRailsのバージョンを6.1.5にアップグレードしたところ、rails consoleを実行すると次のようなthor gemのワーニングがでるようになりました。 ledsun@MSI:~/pubannotation►bin/rails c Deprecation warning: Expected string…

MSXって何が良かったの?

ツイッターでつぶやいたらいろいろなご意見が寄せられました。 まとめておきます。 ・ゲーム機感覚のカートリッジ・テレビに繋がる=安価・機体の選択肢豊富とかかなぁ。友達が持ってたけどゲーム機になってたな。 https://t.co/r4sXTcaIN0— さけいくら (@sa…

イエメン ハイミ イエメニア ナチュラル

酸味系のナッツみたいな香りがすごいコーヒーでした。 イエメン ハイミ イエメニア ナチュラル - @ledsun blog によると半年前にも似たような感想を抱いていました。 よほど、印象的な味と香りのようです。 【メール便・配達日時指定不可】 7月のおすすめ豆…

WezTerm

Windows Terminalに不満はないです。 俺は新しいツールも使いこなせるんだ、という欲望を満たすために wezterm - Wez's Terminal Emulator を使っています。 Windowsにはwingetでインストールできました。 6月27日にインストールを試したときは上手く行きま…

activerecord-importを速くつかう

速度を計測する簡単なスクリプトが手に入りました。 計測しやすくするために、よりシンプルに変更します。 class User < ApplicationRecord class << self def benchmark_bulk_insert # create data instances = [] 1_000.times { instances << new(name: 'n…

ActiveRecordのバルクインサート比較 その2

Railsコンソールで実行するとログが出てきて面白いです。 読みやすくするためにデータ件数を3件、試行回数を1回にして実行します。 user system total real sql TRANSACTION (0.1ms) begin transaction (0.2ms) INSERT INTO users (name, created_at, update…

ActiveRecordのバルクインサート比較 その1

手始めにRails6で追加されたinsert_allとimport(とその他)のパフォーマンス検証 - Qiita を追証します。 次のように検証用のRailsアプリケーションを用意します。 bundle exec rails new . bulk_insert -MCAJT bin/rails g user name:string bin/rails db:pr…

Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been depre

bundleコマンドを実行したら表題の警告が出ました。 ledsun@MSI:~/activerecord-bulk-insert►bundle Bundler 2.3.7 is running, but your lockfile was generated with 2.2.22. Installing Bundler 2.2.22 and restarting using that version. Fetching gem …

PostgreSQLのインデックスが肥大化するとInsertがおそくなる

先月末からJSONファイルからDBに一括取り込みする処理の高速化をしています。 activerecord-importを使っていたので、つぎの方法を試しました。 activerecord-importに渡すデータ生成のチューニング ActiveRecordインスタンスからハッシュに変更 ActiveRecor…

stackprofileを使って時間の掛かる処理を特定する

入力されたJSONファイルをパースしてDBに取り込む処理をチューニングしています。 ボトルネックはDBへの取り込みだと予想しています。 本当でしょうか? GitHub - tmm1/stackprof: a sampling call-stack profiler for ruby 2.2+を使って確認してみます。 次…

メモリ使用量計測用のRubyスクリプト

とある関数をチューニングしています。 処理時間計測用のRubyスクリプト - @ledsun blogを作って計測しています。 一向に速くなりません。 メモリ使用量を計測することにしました。 次のスクリプトを作りました。 require 'memory_profiler' file = 'tmp/upl…

複数プログラミング言語をいっぺんに実行するスクリプトをMakefileで書く

C#とJavaScriptとRubyのプログラミングを比較するためにGitHub - ledsun/enumerable: C#とJavaScriptとRubyのコレクション操作を比較するためのリポジトリです。を作りました。 動作確認のために、全部のプログラムをバーンと実行するスクリプトが欲しいです…

C#とJavaScriptとRubyのコレクション操作

大抵のプログラミング言語でコレクション(列挙できる何か)をメソッドチェーンで操作できます。 プログラミング言語ごとに、ちょっとずつちがうので整理してみようと思います。 僕の馴染みのあるC#、JavaScript、Rubyでそれぞれ書いてみます。 お題 お題は…

activerecord-importのチューニング(失敗編)

データベースへのデータ取り込みを速くしたいです。 すでにactiverecord-importを使っているので、これが速くできると嬉しいです。 GitHub - zdennis/activerecord-import: A library for bulk insertion of data into your database using ActiveRecord. Th…

Marp

ソースコードを含んだ短いプレゼンテーションを作る必要がありました。 社内で使っている人がいてVisual Studio Code+Markdownでキレイなプレゼンスライドを手軽に作成できる「Marp」【レビュー】 - 窓の杜でも見かけたのでMarp: Markdown Presentation Eco…

社内向けにパラメタライズドテストの話をしました

speakerdeck.com 自分がパラメタライズドテストの存在を知ったのは #TestingFrameworkMeeting に参加しました(1) - テスティングフレームワークの歴史 - @ledsun blog の頃だと思います。 読み返してみても一文字も出てこないので、記憶違いかもしれませ…

C#でFizzBuzz

C# FizzBuzz Switch Solution - Stack Overflow のみたことないタイプのパターンマッチングを参考にしました。 static string FizzBuzz(int number) { return number switch { < 1 or > 100 => "", _ => (number % 3, number % 5) switch { (0, 0) => "FIZZB…

snapを使ってdotnetコマンドをインストールする

Snap を使用して Linux に .NET をインストールする - .NET | Microsoft Docs の手順でインストールしてみます。 $ sudo snap install dotnet-sdk --classic --channel=6.0 [sudo] password for ledsun: $ dotnet-sdk (6.0/stable) 6.0.301 from Microsoft .…

WSLのUbuntu 20.04にPHPのcomposerをインストールする

comporserのインストール curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php php /tmp/composer-setup.php 実行したディレクトリにcomposer.pharができます。 php ~/composer.phar installとかphp ~/composer.phar updateで実行できま…

WSLのUbuntu 20.04にPHP 8.1をインストールする

PHPの環境設定の仕方がよくわかっていません。 たぶん普通のUbuntuにPHPをインストールする手順と同じだと思います。 sudo apt install phpするとPHP 7.4が入りました。 ledsun@MSI:~►php --version PHP 7.4.3 (cli) (built: Jun 13 2022 13:43:30) ( NTS ) …

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…

Ubuntuに英単語辞書をいれた

Wordleの答えをgrepする効率をあげるためにUbuntuに英単語辞書を入れました。 sudo apt install wamerican で /usr/share/dict 配下に英単語が記載されたファイルがインストールされました。 次のように現在わかっている条件を満たす単語を検索します。 leds…