RubyでWebSocketクライアントを書く その3 - @ledsun blog までの諸諸の調査をまとめます。 このライブラリの目的はdRubyのTCPトランスポートを置き換えるために、TCPSocket、TCPServerのインターフェースに近い形で、WebSocketを扱う事です。 require 'sock…
RubyでWebSocketクライアントを書く その2 - @ledsun blog でWebSocketコネクションが確立できました。 今回はWebSocketを使ってサーバーとメッセージを送受信します。 #!/usr/bin/env ruby # frozen_string_literal: true require "erb" require "socket" r…
比較のためのコマンド。Windows 11上のWSLで実行しました。 time rake npm:ruby-head-wasm-wasi 比較対象 システムモデル Prestige 15 A11SB プロセッサ 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz、2995 Mhz、4 個のコア、8 個のロジカル プロセッサ …
RubyでWebSocketクライアントを書く - @ledsun blog で、ソケットからレスポンス文字列を読み出すところまで実装しました。 今回はレスポンス文字列に含まれているaccept digestを検証します。 module WANDS class HTTPResponse attr_reader :header def par…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その6 - @ledsun blog でWebSocketサーバーが作れました。 今度はWebSocketクライアントを作成します。 #!/usr/bin/env ruby # frozen_string_literal: true require "erb" require "asy…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その5 - @ledsun blog で機能するようになりました。 リファクタリングします。 TCPServerっぽいインターフェースにします。 まずはWebSocketクラス。 確立されたWebSocketコネクション…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その4 - @ledsun blog で、HTTPリクエスト文字列、HTTPレスポンス文字列の処理をWEBrickで行うことにしました。 今回はWebSocketのFrameの読み書きをprotocol-websocketを使って行います…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その3 - @ledsun blog ではWEBrickを使ってHTTPレスポンス文字列を作成しました。 今度は protocol-websocket を使ってHTTPレスポンス文字列を作成します。 require 'socket' require 'w…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その2 - @ledsun blog でリクエスト文字列の解析をWEBrickに置き換えました。 今度はレスポンス文字列の作成にWEBrick::HTTPResponseを使います。 require 'socket' require 'webrick' r…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その1 - @ledsun blog ではaccept_nonceの計算にprotocol-websocketを利用しました。 今度はヘッダの解析に使います。 Async::WebSocket gemの素振り その8 - @ledsun blogでは、HTTPリ…
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…
RubyでWebSocketサーバー - @ledsun blogで作ったWebSocketサーバーにRuby in the browserからリクエストを送信してみましょう。 <html> <head> <title>WebSocket Client</title> <script src="https://cdn.jsdelivr.net/npm/@ruby/[email protected]/dist/browser.script.iife.js"></script> </head> <body> <script type="text/ruby"> requ…</body></html>
RubyでEchoサーバー - @ledsun blog の経験を踏まえまして、改めて RubyでシンプルなWebSocketサーバーをゼロからつくってみたに取りくみます。 TCPサーバーの部分の理解が進みます。 HTTPで使ったTCPコネクションをそのままつかって、送受信データをWebSock…
自分の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付きのアプリケーションを無設定で動かせます。 と…
BLANKEY JET CITYと言うバンドの音源が配信されるようになりました。 あらためて聞き直しました。 再発見があったので、メモしておきます。 www.youtube.com 配信されているのにYouTube動画なのは、こちらの動画の方がアルバム収録音源より後述するベース音…
最近ruby.wasmのテストが失敗します。 ビルドはできてテストの実行時にエラーがおきます。 自分の環境だけかと思ったらGitHub Actionsでも失敗しています。 例えば Nightly release · ruby/ruby.wasm@8da2029 · GitHub です。 rake npm:ruby-head-wasm-wasi:…
RubyではほとんどのクラスはObjectクラスを継承しています。 極まれにObjectクラスの機能が多すぎることがあります。 そういうときはBasicObjectを継承します。 しかし、Objectの一部の便利なメソッドだけは使いたい。 そういうわがままな要望があります。 …
ruby.wasmからのWebSocket - @ledsun blog では、faye-websocket-rubyを使いました。 このWebSocketサーバーを GitHub - socketry/async-websocket: Asynchronous WebSocket client and server, supporting HTTP/1 and HTTP/2 for Ruby. に変えてみましょう…
ruby.wasmからのWebSocket - @ledsun blog にてruby.wasmからJavaScriptのWebSocket.sendを直接呼び出せませんでした。 Rubyから他言語のオブジェクトのメソッドを呼び出す先輩にはGitHub - mrkn/pycall.rb: Calling Python functions from the Ruby languag…
ActiveRecordで動的に生成されるsendメソッドとObject#sendは衝突したらどうなるのか?という話です。 結論は、つかえます。 実際に試してみます。 Railsアプリケーションを準備します。 rbenv local 3.3.4 bundle init bundle add rails bundle exec rails …