Ruby
Async::WebSocket gemの素振り その8 - @ledsun blogにてRubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れると良さそうなことがわかりました。 やってみましょう。 require 'socket' require 'protocol/websocket/headers' server = TCPSer…
Async::WebSocket gemの素振り その7 - @ledsun blog で残された最後のAsync::WebSocket依存::Async::WebSocket::Connection.callを取り除きます。 require "protocol/http/body/readable" require 'protocol/websocket/framer' require 'protocol/websocket…
Async::WebSocket gemの素振り その6 - @ledsun blogでAsync::HTTP::Body::Hijack.wrapを使うようになりました。 今回はAsync::HTTP::Body::Hijack.wrapを展開します。 require "protocol/http/body/readable" require "protocol/http/body/writable" requir…
Async::WebSocket gemの素振り その5 - @ledsun blog で::Async::WebSocket::Response.forが気になりました。 ::Async::WebSocket::Response.forのソースコードです。 def self.for(request, headers = nil, **options, &body) if request.version =~ /http\…
Async::WebSocket gemの素振り その4 - @ledsun blog でブロック呼び出しの入れ子が増えてしまったので、再度展開します。 理解しやすくするため、エラー処理も消します。 require 'async/websocket/response' require 'async/websocket/connection' require…
Async::WebSocket gemの素振り その3 - @ledsun blog にて、ブロック呼び出しが入れ子になっていたのを解消しました。 次にAsync::WebSocket::Adapters::HTTP.openを展開します。 require 'async/websocket/response' require 'async/websocket/connection' …
Async::WebSocket gemの素振り その2 - @ledsun blog でAsync::WebSocketのプリミティブな使い方をしてみたものの、ブロックの動きがイマイチ上手く追えません。 もっとシンプルになるようにWebSocketサーバーを改造します。 require 'async/websocket/adapt…
Async::WebSocket gemの使い方がどうにもイメージできません。 Async::WebSocket gemの素振り - @ledsun blog より、もう少しプリミティブな使い方をしてみます。 準備 bundle init bundle add falcon async-websocket サーバー require 'async/websocket/ad…
自分のWebSocketの理解が曖昧な気がしてきました。 RubyでシンプルなWebSocketサーバーをゼロからつくってみたを読みながら実装したら理解が深まるかと読み始めました。 するとTCPソケットの理解が怪しい気がしてきます。 そこでclass TCPServer (Ruby 3.3 …
ruby.wasm用のコードを書いている最中に、Rubyのrefinementsを使ってrespond_to?メソッドが定義できない現象に出会いました。 念のため以下の最小コードで試してみます。 class Hoge < BasicObject; end module Fuga refine Hoge do define_method(:respond_…
最近、会社で地域勉強会 第3回 町田 SE meet up ~ベテランエンジニアのLT会~ - Machida.rb | Doorkeeperをやってます。 そこでライトニングトークという体で20分ほどしゃべりました。 デモしてたら発表時間が長くなっちゃったのですが、オチはライトニン…
Rubyで作られたプレゼンテーションツールにRabbitがあります。 GUI部分がGTKを使って作られています。 Windowsで動かすのはすこし面倒な印象があり避けていました。 いまならWSLgがあるため、WSL上で動くGUI付きのアプリケーションを無設定で動かせます。 と…
RubyではほとんどのクラスはObjectクラスを継承しています。 極まれにObjectクラスの機能が多すぎることがあります。 そういうときはBasicObjectを継承します。 しかし、Objectの一部の便利なメソッドだけは使いたい。 そういうわがままな要望があります。 …
ruby.wasmからのWebSocket - @ledsun blog にてruby.wasmからJavaScriptのWebSocket.sendを直接呼び出せませんでした。 Rubyから他言語のオブジェクトのメソッドを呼び出す先輩にはGitHub - mrkn/pycall.rb: Calling Python functions from the Ruby languag…
2000年代後半にRubyistの間で「ブラウザでRubyが書ければいいのに」という冗談がありました。当時はDartもありませんでした。ブラウザに任意のプログラミング言語が組み込まれるアイデアが一般的ではありませでした。Google Chromeの中の人であれば、技術的…
脳内でイメージするRactorの絵です。 Ractorを最初に知ったときは右のイメージを持ちました。 Threadの中に複数のRactorがあるイメージです。 RubyKaigi 2023でMaNyの発表を聞いて、間違いに気がつきました。 左に更新しました。 今日、Ractorの話をしながら…
Day 3 Ruby Committers and the World Rubyコミッターの皆さんの写真 shopifyさんは35人エンジニアがいて 8人がインフラ(?)チームで 4人がコミッターだそうです。 エンジニア数の少なさにびっくりします。 自社が40人くらいなことと比較して考えると、レ…
Day 2 Leveraging Falcon and Rails for Real-Time Interactivity Samuel Williams さんの非同期に関する発表です。 具体的にはAsyncやFalconの話です。 GitHub - socketry/flappy-bird を動かす話です。 動くソースコードが公開されています。 git clone gi…
Day 0 移動日でした。 生憎の雨でしたが、ホテルから那覇港船客待合所まで歩いて行きました。 夜の那覇はブレード・ランナーっぽさがあります。 埠頭近くのステーキ屋さんを遠くから撮った写真 永和システムマネージメントさん提供のクルージングに参加しま…
RubyKaigiで自分よりすごい技術者、技術に真剣に取り組んで深い洞察を得ている技術者を、目の当たりにすると、自分の慢心に気がつきます。 会社では、それなりに上位の技術者です。色々な技術を少しずつ取り組んでは素早く判断をしている日々です。それはそ…
RubyKaigi2024 0日目です。 夕方那覇に着いて、散策中に見つけたお店たちです。 愛魚人(あいうぉんちゅう) Ocean Boo 煙人(えんじん) 写真の向きがおかしいです。
TextAEの修正をしようとしたときに、ふと「JavaScriptで書くのダルいな、Rubyなら…」という思いを抱きました。 具体的にどの文法という話ではないし、難しい修正でもなくて、機能変更前の機械的なリファクタリングです。 TextAEもJavaScriptも長いこと触って…
ruby.wasmでオートロードする - @ledsun blog でModule#const_missingをつかってオートローダーを書いてみました。 Module#const_missingのAPIで、汎用的なオートローダーを書くのは少し難しそうなことがわかりました。 難しそうですが、どれくらい難しいの…
Rubyでテトリスを実装する その8 - @ledsun blog の続きです。 すべてのテトリミノを実装しリファクタリングしました。 github.com CLIバージョンはひとまず完成です。
Rubyでテトリスを実装する その7 - @ledsun blog の続きです。 今回は 行を消すロジックの修正 T字形テトリミノの追加 デバッグ表示の追加 です。 行を消すロジックの修正 より宣言的にならないか工夫してみました。 https://github.com/ledsun/tetoris/blob…
Rubyでテトリスを実装する その6 - @ledsun blog の続きです。 今回は、ライン消しです。 https://github.com/ledsun/tetoris/commit/fb4fd5d11f58d7353d4501124290574206a98dbf がコミットです。 行単位の処理が増えたので、FieldクラスからRowクラスを分離…
Rubyでテトリスを実装する その5 - @ledsun blog の続きです。 左右キー下キーでテトリミノを移動出来るようにしました。 https://github.com/ledsun/tetoris/commit/bda62edefc2d13cdb6c93c242fc97b2729526313 が、コミットです。 実装は簡単でした。 落下…
Rubyでテトリスを実装する その3 - @ledsun blog の続きです。 今回はテトリミノの種類を増やします。 同時に、テトリミノが着地したときに新しいテトリミノを追加します。 着地しとテトリミノと新しいテトリミノが衝突する判定も必要なので、それもいれます…
Rubyでテトリスを動かす その2 - @ledsun blog の続きです。 前回、I字型テトリミノが落ちてくるようになりました。 今回は、上キーの入力でテトリミノを回転します。 変更は https://github.com/ledsun/tetoris/commit/f93310b1254d2b53f8ca27ac0a15a373b95…
Rubyでテトリスを動かす その1 - @ledsun blog の続きです。 前回、枠を表示しました。 今回は、I字型テトリミノを表示して落下させます。 https://github.com/ledsun/tetoris/commit/9000667616f82486fe55c20e2c42b9c29e41bf34 の1コミットにまとめてありま…