@ledsun blog

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

日記を書く

きっかけ 「スーパーエンジニアへの道」の「第七章 自分自身への気づきを高める方法」に「日誌をつける」と書いてありました。 スーパーエンジニアになりたいので、仕方なく日記を書き始めました。 ブログとは違い人に見せないつもりで書いています。 ですの…

Legacy on Rails

最近古いバージョンのRailsに触ることが多かったので、二度と使わないで済むことを祈りつつ、得た知見をメモします。 Ruby 2.4 と PostgreSQL と Rails 3.2 Rails 3.2 と PostgreSQL とRuby 2.4で rake db:create だけコケるおもしろ現象に出会いました。 ht…

Homebrewをインストールし直す

Homebrewの再インストール GitHub - Homebrew/install: Homebrew (un)installer を見て /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.c…

「論理的思考の放棄」をパクる

「論理的思考の放棄」とは 論理的思考の放棄 - 登 大遊 (Daiyuu Nobori) の個人日記 がバズっていたので読みました。 世の中のスーパープログラマーは1日で1万行のプログラム書くことができるようです。 その手法として「論理的思考の放棄」が挙げられていま…

React on Ruby on Railsの素振り

Ruby on RailsとReactの連携の仕方がイマイチ理解できていないので、簡単なアプリケーションを作って勉強します。 4月生まれのホットな動画を見つけたのでこちらを参考にします。 www.youtube.com 動画でなくテキストがお好みの人は、GitHub - zayneio/open-…

プログラマにできるとよさそうなこと

十行程度のプログラムが読めること プログラミング言語の文法を知っている 分岐とループを追いかけることができる 変数の状態変化を追いかけることができる 関数呼び出しを追いかけることができる 十行程度のプログラムを複数回書いたことがある プログラム…

チーム開発で気をつけていること

この日記は同僚が読んでいないことを前提に書いています。もし読んでしまった同僚の方は絶対に感想を伝えないでください。 日に二度のオンラインミーティング 4月に在宅勤務が始まって以降、一日2回zoomを使って開発チームでオンラインミーティングをしてい…

一度moveしたオブジェクトは移動先のRactorが死んでも帰ってこない

moveしたオブジェクトを参照するとRactor::MovedError 次のRubyスクリプトがあります。 dead = Ractor.new {} dead.send STDIN, move: true STDIN.gets RactorにSTDINをmoveしてから、STDINを使います。 するとRactor::MovedErrorが起きます。 ~ ruby dead_a…

RailsConf 2020のKent Beckのトークを見た

koicさん*1を真似ました。 Software design is an exercise in human relationships 我々、プログラマは次のような段階を経て、コミットの粒度を工夫していきます。 巨大な1つの塊 構造の変更(リファクタリング)と機能の変更に分ける 構造の変更(リファク…

sjisの文章をShift_JISとして読むとEncoding::UndefinedConversionError

Rubyの話です。 ‘Ⅸ’(ローマ数字の9) を含むsjisの文章をShift_JISとして読むとエラーが起きます。sjisとして読むとエラーが起きません。 たとえば、 'Ⅸ'.encode('sjis', 'utf-8').encode('utf-8', 'Shift_JIS') はエラーが起きて 'Ⅸ'.encode('sjis', 'utf-…

イベントハンドラーAの処理があるときはイベントハンドラーBの処理を止めたいです

ブラウザのJavaScriptの話です。 イベントハンドラーAの処理があるときはイベントハンドラーBの処理を止めたいです。 イベントハンドラーAは新しいNodeを作って選択します。 イベントハンドラーBは選択を解除します。 期待する動作は、新しいNodeができて選…

rbenvでのバージョン指定が効かなくなりました

~ rbenv version 2.5.5 (set by /Users/shigerunakajima/pubannotation/.ruby-version) ~ ruby --version ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin18] ruby のバージョンが上がっている。パスが上書きされたのでしょうか? ~ echo $P…

gem install libxml-ruby -v '3.1.0' に失敗します

Building native extensions. This could take a while... ERROR: Error installing libxml-ruby: ERROR: Failed to build gem native extension. current directory: /Users/shigerunakajima/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/libxml-ruby-3…

切符を通したときだけ通れる改札口Ractor

前回、Ractor.selectでtakeとrecvを両方待てることがわかりました。 これを使って切符を通したときだけ通れる改札口を作ります。 完成形 キーボード入力を待つRactor = Ractor.new { loop { Ractor.yield gets.chomp } } 改札口Ractor = Ractor.new(キーボー…

Ractor.recvの代わりにRactor.selectする

RactorはsendされたメッセージをRactor.recvで受け取ります。 Ractor.selectでも受け取れます。 例えば、次の例です。 r = Ractor.new do # message = Ractor.recv と同じ _, message = Ractor.select self p "Hello #{message}!" end r.send 'World' r.take…

歌うRactor

Ractorで歌ってみましょう。 歌う部分はRactorは関係ありません。出落ちです。 Ractor内で、spawnしたプロセスをメインスレッドでkillできるか確認します。 非同期なspawn関数をRactor内で実行する必要があるのかは知りません。 完成形 LYRICS =<

Ractor間のメッセージ送受信 Pull型とPush型

やることは前回と同じです。Ractorの構成を組み替えてみました。 Pull型とPush型 Ractorのメッセージ送受信にはPull型とPush型があります。 前回、メインスレッド(?)でRactorインスタンスをselectしてイベントを待ちました。Pull型です。 Pull型 今回、描…

Ractorを使ったTUIプログラムの一歩

前回のユーザー入力とクロックを両方待つプログラムを少し改造します。 Enter以外の入力を受け取る カーソルを移動せずに書き換える 後者はRactorは関係ないです。 Enter以外の入力を受け取る 任意の1文字を受け取るためにSTDIN.getchを使いたいです。 STDIN…

Ractorを試す 改訂版

macOS で https://github.com/ko1/ruby/tree/ractor のソースコードをビルドする方法を改善しました。 インストール先 コンパイルしたRubyをmake installしたら「PCの環境が壊れるかも」とビビっていたところ、 id:hanachin さんに ./configure --prefix="$H…

Ractorをつかうプログラムの練習 2つのイベントを待つ

Ractorをつかって、ユーザー入力とクロックを両方待つプログラムを書いてみます。 練習中であり、Ractorを使ったイケているソースコードではありません。 次のプログラムを実装します。 1秒毎にカウントアップします。 ユーザーがEnterキーを押したらカウン…

Ractorを使ってプログラムを書く練習    

注意:Ractorならではとか、計算効率の良さとか考えていません。 1から10までを足す # 最終結果送り先のRactor CR = Ractor.current r = Ractor.new { CR << Ractor.recv } 1.upto(10) do |i| # 数を足すRactorを作ってポインタを置き換える r = Ractor.new(…

Ractorを試す

Ruby3 さみっと online - connpass を見ていました。 Ractorの発表を見て使ってみたくなったので環境を整えてみます。 ビルドする https://github.com/ko1/ruby/tree/ractor のソースコードをビルドします。 git clone git@github.com:ko1/ruby.git ractor c…

自宅作業環境の整備

新型コロナウイルスの影響で在宅勤務しています。 3月3日から、少しずつ作業環境を整備しています。 ノイズキャンセリングヘッドホン オフィス作業時代に、作業集中用に使っていたものをそのまま使っています。 オンラインミーティングしている相手の声が聞…

RubyMineのターミナルが壊れた話

RubyMineのターミナルのシェルがおかしいです。 パスから/usr/local/binが消えてしまった。rbenvが動かせません rbenvが動かせません。 シェルにはfish-shellを使っています。 fish-shellの起動時に、次のエラーメッセージが出ます。 ~/.config/fish/config.…

Rubyのコンパイルに挑戦した記録

OpenSSLがみつからない GithubのREADMEに従って git clone git@github.com:ruby/ruby.git して ./configure make make check すると、次のような警告メッセージがでました。 *** Following extensions are not compiled: openssl: Could not be configured. …

2019年のふりかえりと2020の目標

全体的に 私事に掛かるリソースが増えたので、残されたリソースでどうやりくりしたものか工夫した一年でした。 認知度 認知度に関しては、自分の能力以上に認知度が上がっても辛そうなので、一番最初にあきらめました。 その結果が、登壇数0です。 認知度を…

SameSite cookieについての勉強メモ

発端 Google Chromeの開発コンソールを有効にして、Webアプリケーションを開発しているときに次のような警告メッセージが表示されました。 これは一体どういう意味で、何に注意すればいいのでしょうか? Google Chromeの表示する警告 A cookie associated wi…

RSpecでSharedExamplesを使ったときのエラー表示の現状

RSpecで、SharedExamplesを使うと、失敗したテストの行番号の代わりに [1:2:2:3:1] みたいなのが表示されて、どのテストを見ればいいのかわかりにくくなるのが辛いです。 2015年からInclude line numbers as well as index in output · Issue #2119 · rspec/…

今週の作業メモ

JavaScripting runコマンドのバグ https://github.com/workshopper/javascripting/issues/218 javascripting run hogohoge.jsを実行するとたしかに[object Object]が表示されます。 javascriptingではrunコマンドは使っていません。 https://github.com/work…

今週の作業メモ

spring Rails 5.2.3でrails consoleを実行すると、プロンプトが出る前で止まります。 ~ bundle exec rails --version Rails 5.2.3 ~ bundle exec rails c ^CTraceback (most recent call last): 15: from bin/rails:3:in `<main>' 14: from bin/rails:3:in `load' </main>…