NaCl非公式ブログ

C#でデッドロックするアプリをデバッグする

こんにちは。NaCl松江本社の原です。Ruby案件が多い弊社ですが、時にはそれ以外の言語を扱うこともあります。今回はC#の話を。

Visual Studioでは「プロセスにアタッチ」という機能を使うとexeとして起動したあとでもデバッガを起動してスレッド一覧を見たりできるのですが、その手順がなかなかわからなかったので、メモとして書き残しておきます。

...続きを読む

Hashの値の省略記法

NaClの前田です。 Ruby Advent Calendar 2021の20日目の記事です。昨日は@getty104さんでした。

今回はRuby 3.1にするっと入ってしまったHashの値の省略記法を紹介します。

...続きを読む

2021年度夏季オンラインインターンシップ

NaClの岸野です。 新型コロナウイルスの影響で、昨年度はインターンシップは開催できず、今年度はオンラインでのインターンシップを開催しました。

...続きを読む

Rails 6のコネクションプールの無効化

NaClの前田です。

諸般の事情でRailsのコネクションプールを無効化したかったのですが、Rails 6では既存のgemやモンキーパッチでは動作しなかったため、古いモンキーパッチをベースにRails 6用のモンキーパッチを作成しました。

...続きを読む

parser gemでRubyプログラムのバグを探す

お久しぶりです。NaCl松江本社のyharaです。みなさんはRubyのparser gemやast gemを使ったことがあるでしょうか?いずれも使い方次第で強力な武器になるライブラリですが、ネットにあまり情報がないかと思います。最近仕事で使う機会があったので、せっかくなので使い方を解説します。

ある日、開発中のRailsアプリに以下のような感じのコードを見つけました。

  ...
    @data1[:attr1].zero? || @data2.header.code="123" || @data3.code == "456"
  ...

どこがおかしいか分かったでしょうか?

...続きを読む

10年物・1万行のJavaScriptをモダン化した話

こんにちは。NaCl 松江本社のyharaです。今回はBiwaSchemeのリファクタリングをした話を書きます。

BiwaSchemeは私が開発しているScheme処理系で、JavaScriptで書かれていてブラウザおよびNode.js上で動作します。BiwaSchemeの開発を始めたのはまだ学生だった2007年頃で、修論のため(=卒業のため)に必要というのが主な動機でした。

それから10年以上が経ち、JavaScriptを取り巻く環境も大きく変わりました。それに伴い、BiwaSchemeのコードベースも時代に合わない記述が増えてきました。

最も大きなものは、src/library/r6rs_lib.jsを囲む巨大なwith文です。

...続きを読む

ISUCON9の本戦に参加してきました

NaCl 松江本社のyharaです。こんにちは。Webアプリケーションの高速化技術を競うコンテスト「ISUCON」の本戦に弊社メンバー(@sada4 @yhara @shugomaeda)で参加してきたので、簡単ですが参加記を書こうと思います。

ネームプレート

結果は予選の15位から少し上がって13位でした。Go言語での参加チームが多いということで優勝もGoになるのかと思いきや、Rubyを使用した白金動物園チームが優勝でしたね。

以下では、今後ISUCON本戦に参加するチームのために、予選と本戦の違いなどを書いていこうと思います。

...続きを読む

ISUCON9の予選をRubyで通過しました

NaCl 松江本社のyharaです。こんにちは。Webアプリケーションの高速化技術を競うコンテスト「ISUCON」に弊社メンバーで参加し、予選を突破して本戦に出場できることが決定したので、簡単ですが参加記を書こうと思います。

15位のチーム「yarunee」が我々です。最終スコアは11,160 イスコインでした。この記事によると予選突破チームのほとんどはGo言語を使用していたようですが、弊チームは一番使い慣れている言語ということでRubyで参加しました。

ISUCONとは

ISUCONは2011年から行われているコンテストで、課題となるアプリケーションが与えられ、それを(挙動を大きく変えない範囲で)最も性能が出るよう改造できたチームが優勝、というイベントです。

今回はAlibaba Cloudのクーポンが参加者に付与されて、そこにインスタンスを立てて作業するという流れでした。対象となるアプリは本番の朝にイメージファイルという形で提供されました。

...続きを読む

dRubyでemacsclient的なものを作る

NaClの前田です。

今年はdRuby 20周年です。というわけで、dRubyを使ってTextbringerのためのemacsclient的なものを作ってみたので紹介します。

...続きを読む

gsubのラッパーは書けるか

NaClの前田です。

社内のコードレビュー会で、Railsで h(s).gsub(/.../) { ... } のようなコードを書いた時にブロック内で $1 が参照できなくてハマったという話が出ました。

hメソッドが返すのは実はStringオブジェクトではなくてActiveSupport::SafeBufferオブジェクトなのですが、 $1 のような特殊変数はローカル変数同様にメソッドを抜けると参照できなくなってしまうので、SafeBufferのように単純なgsubのラッパーを書いても参照できません。

実践的にはStringに変換してからgsubを呼べばよいのですが、「$1 などが参照できるgsubのラッパーは本当に書けないのか?」というのが今回のテーマです。

...続きを読む