@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…

国家公務員法改正案に関するメモ

国家公務員法改正案が廃案になるそうなので、どういう話だったのかメモを集めておきます。 法案 衆法 第196回国会 30 国家公務員法等の一部を改正する法律案 議案というのがパッチで、要項がdescriptionみたいです。 第201回 通常国会|内閣官房ホームペ…

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日から、少しずつ作業環境を整備しています。 ノイズキャンセリングヘッドホン オフィス作業時代に、作業集中用に使っていたものをそのまま使っています。 オンラインミーティングしている相手の声が聞…

新型コロナウイルスの患者数を予測する

東京都 新型コロナウイルス陽性患者発表詳細 - データセット - 東京都オープンデータカタログサイト から患者の情報を取ってきます。 グーグルスプレッドシートをつかってグラフを書きます。 新型コロナウイルスの患者数推移 24〜28日がほぼ直線になっている…

新型コロナウイルスの患者数増加ペースが指数関数的増加を少し下回る

3月27日が40人増加で、指数関数的増加を少し下回っています。 指数関数的増加をしていたら累計で400人台前半、28日には400人を超えている見込みでした。 少し希望が見えて来ました。 なるべく家族以外との接触を控えて、増加ペースの鈍化に協力していきたい…

新型コロナウイルスの勢い衰えず

感染者数は、3/22に勢いが衰えたかと思いきや、見事な指数関数的増加中。この先1〜2週間では収まらなさそうです。 東京都の新型コロナウイルス「COVID-19」感染者数推移 データとグラフで見る「新型コロナウイルス」感染状況(国内版)|日テレNEWS24 より

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です。 認知度を…