RubyKaigi 2023に参加してきた

RubyKaigi 2023に参加してきた」と一言で言えないくらい大変な期間だった……

この期間、わしがどう過ごしていたのか、未来の自分が読むかもしれないし、せっかくなので、時系列でバーっと振り返っていく。感想というより、yancyaからはどう見えていたかという事のdumpみたいな感じになりそう。ちなみに、すごく長いぞ。

# 4/20 RubyKaigi 2023 Day: -20

Rubyist めぐり vol.2 ゲスト:鳥井雪さんというイベントに参加していた。RubyKaigi 2023とは直接関係はないんだけど、RubyKaigi 2023に参加するRubyistが沢山参加しているイベントだったので、メインコンテンツが終わった後の酒盛りで「RubyKaigi楽しみだね」とか言いながら盛り上がっていた。そこで「ところで、yancyaは松本にはどうやって行くの?」という話になって、自分なりの旅程(後述)を説明したところ、Rubyisのの一人から「じゃあ5/9の昼には松本にいるって事だよね。蕎麦屋行こうよ。13:00に予約しとくよ」と誘われたので「おねしゃっす!」と了承した。

# 5/9 RubyKaigi 2023 Day: -1

松本へ向かう。

この日の足はリードEX(110ccの小型自動二輪車)。小型自動二輪車なので自動車専用道路を通れず、すべて下道で向かう必要がある。

当初、以下のようなスケジュールを組んでいた。

## 予定

05:30 出発

07:30 道の駅はにゅう

09:00 道の駅ららん藤岡

11:30 道の駅マルメロの駅ながと

12:30 松本到着

13:00 蕎麦屋さん到着

## 実績

実際には以下のようになってしまった。

05:50 出発

08:25 道の駅はにゅう

10:00 道の駅ららん藤岡

13:30 松本到着

13:50 蕎麦屋さん到着

出る時刻が遅れてしまった上に、計画通りに道の駅を通過できずに、結局松本に到着した時刻が1時間遅れくらいになってしまって申し訳ない……

道中で遅れることが確定した旨を連絡して、予約を1時間ズラして貰ったので、店に迷惑がかかってしまったかもしれないのが心苦しい。

## さようなら松本

15:50 無事(?)に蕎麦屋さんについたので、2人のRubyistと一緒に蕎麦を食べ、満足したのであずさ44号で東京へ帰りましたとさ。

めでたしめでたし……

## 秋葉原へ

19:00 東京に戻ってきたので、RubyKaigi 2023 Welcome Drinkupという、RubyKaigi 2023への参加者が集まるAsakusa.rbのDrink Upに参加した。つい最近出版された訳本『研鑽Rubyプログラミング』の原著作者Jeremy Evansさんがいらっしゃったので、PDF版にサインを頂いた。Kindle Scribe、PDFに簡単にサインを貰うことができて便利だった。

# 5/10

## Rubyists on Rails

クックパッド株式会社の提供で、08:00新宿駅発あずさ5号の1号車を貸し切ってRubyistみんなで松本へゆこうという、Rubyists on Railsに参加した。抽選になっていたので、わしが無理な旅程で申し込むのは憚られるなぁと思っていたけど、どうやら希望者は全員乗れそうな雰囲気が出ていたので申し込ませて頂いた。

なぜDay: -1にわざわざ東京へ戻ってきたのかと言えば、Asakusa.rbのDrinkupに参加するためと、このRubyists on Railsに参加するためだった。帰りはバイクで帰ってきたかったので、前日にバイクを松本に置きに行く必要があった。こうすれば全ての欲が満たせるので、それを実行したまで……

というわけで、無事に10:37に松本に到着した。

## やんちゃハウス2023チェックイン

やんちゃハウスというRubyKaigi会期中限定のシェアハウスの運営を始めて久しい。

今年も、やんちゃハウス2023を運営していて、古民家一棟貸し切りの宿を取っていた。

13:30 松本城の近くで蕎麦を食べたり、色々をやっていたところ、本来のチェックイン時刻よりも早くチェックインできるという連絡が貰えたので、ひとまずチェックインした。チェックインが早まってくれる宿、好きすぎる……

## 松本城

14:00 恐らく、今回の松本の滞在中、松本城を存分に観光できるタイミングは今しか無いと感じたので、松本城の周りをウロウロしたり、天守閣へ登ったりという基本的な観光を済ませた。松本城の天守閣、階段が急すぎて楽しかった…… 城って、別に普段から住むために作られてるわけじゃないんだなって事がよく分かった。

## KeebKaigi 2023

15:30 KeebKaigi 2023というイベントに参加した。これに参加するために午前と午後の2便あったRubyists on Railsの午前の便に申し込んだのだった。

『研鑽Rubyプログラミング』の訳者の角谷さんがいたので、Kindle Scribeの中のPDFにサインを頂いて、パーフェクト研鑽Rubyプログラミングに進化した。RubyKaigiの会期中は原著者のサインがないと訳者のサインを貰えないというルールだった。

参加中に書いたメモから、各セッションについて書き綴っておく。

当日の様子は全てYouTubeに上がっているので、わしの感想を読んで気になったり「???」ってなったトークは↓から見るとよい。

### Me, Keyboard, and RubyKaigi 2023

2023年5月10日〜14日の松本の主だったと言ってもいいのでは。魔王さんのセッション。今まで設計してきたキーボードのコンセプトなどを説明していた気がする。

『無限の可能性』という1U PCBは1枚につきキーソケット1つのLED付き基板で、手配線で複数を連結させることで様々な配置のキーボードを作れる”可能性”が出てくる面白い製品。適当な球体とかにホットボンドで『無限の可能性』を配置して配線すれば、球状のキーボードとかも出来てしまうのか?(使いやすいかは別として)

わしは魔王さんのSilver Bullet Requiemというキットを購入して組み立てた事があるんだけど、とにかくキーボードを光らせると楽しい、という情熱が感じられる楽しい製品なんだよなぁ。

カラーバリエーションを沢山作ったりすると販売管理とかが大変、みたいな設計・製造・販売を行う立場の悩みみたいなのも聞けて新鮮だった。

### Building the Perfect Custom Keyboard

カスタムキーボードって、自作キーボードの事だと思ってたんだけど、そうではないということが分かった。

禅宗の「冷暖自知」という言葉を引用して、自分で体験したことしか”分かる”ことは出来ないという事を示してくれた。

キーボードをカスタムするにあたってのパラメーターのそれぞれについて、とにかく試して体験していくしかなく、その取り組みを通じて自分にとっての最高のキーボードを探していこうな、という話だった気がする。

### Sema-Pitches “狭ピッチ”トーク

自作キーボードに関してのLT。わしも応募したんだけど落選したので、指をくわえて見ていた。

#### OLEDに癒しを求めてみた(仮)

キーボードに乗ったOLEDに絵とかを出すのにFontを自作して組み込んだりした話をしていた。

わしの自作キーボードにもOLEDディスプレイついてるので、PRK_firmwareで絵が出せるようにしたい。

#### Do PRK_FIRMWARE Dream of MIDI implementation?

キーボードといえば電子楽器。MIDIデバイスとしての自キーという話をしていた。

自作キーボードと電子楽器、両方好きになったんだけど時間が限られてるので、クロスオーバーさせて同時に楽しめるようにした、みたいな事を言ってたのが良かった。

#### The story of repairing my junk keyboard with The kinT keyboard controller

高額なキーボードを入手する為、フリマアプリでジャンクを買ってきて修理したら動いたといういい話。

#### My First DIY Keyboard

始めて自作キーボードを作ったけど、なんもわからんかったけど、コミュニティが助けてくれたといういい話。

後半は延々と”自キーあるある”を言ってた。

#### Why are number keys important?

40キーを2回打鍵(1600パターン)する事によって漢字1文字を表現できる入力方式T-Codeを自キーで動かせるようにしたいという話。

「数字キーが無いと漢字が打てないじゃないか」って言ってた。No number keys, No doreams.

#### A software-focused tale on DIY keyboards by a non-enthusiast

自作キーボードはソフトウェアで弄れるのが楽しい。

キーボードの中にゲームを実装したデモなどを見ていた。

#### Introduction to Typing Practice

タッチタイピングの練習についての話をしていた。

ピアノにおけるhanon(やってれば上達する鉄板)相当の存在が要るよねという。

#### I would like to be obsessed with ”self-made keyboards”

自分の作ったキーボードに名前を付けてかわいがっている話を聞いていた。

#### Keyboard design for newbies.

キーボードって高くね?って話をしていた

#### How to start RP2040

RP2040、基板に直接実装することもできるんですよ。という同人誌を発行しているのでよろしくね、という話を聞いていた。

LTなのに時間が余って質問を受け付けていたので「基板に直接実装するにはリフローが必要だと思うんですが、その辺の人には無理では?」という質問をしたら「RP2040が実装済みの状態で納品されるように基板の製造を発注できるんですよ〜」とのこと。なるほど……

#### DIY Keyboard: Endgame

iPadで使うキーボード、純正のキーボードのトラックパッドだけを生かしたまま自キーを使うための治具を作った話を聞いていた。

「やればわかる。やらなければわからん」

### The Hitchhiker’s Guide to the Self made Keyboard community

っぽいタイトルだった気がするけど、自作キーボード関連の国内コミュニティを洗いざらい紹介してくれていた気がする。気がする。

### Crafting the Endgame Keyboard

今までどんなキーボードを設計してきたか、それらの設計に影響を与えた元ネタの紹介など。

設計図のCADデータがOSSとして公開されていると、それを元に新たな設計が出来て素晴らしいというような話だった気がする。

### Pointing Device On The Partner Half

汎用キーボードfirmware作者の考え方について。

トラックボールとかマウスとかタッチパッドがついてるキーボードがあるらしい(?)ので、I²C、SPI, ADC(アナログデジタルコンバーター?)が使えるようにしてMouseクラスを実装したというような話だった気がする。これがリリースされたらOLEDディスプレイの制御も出来るようになるはずなので各位頑張ってねトノコト。わしのSilver Bullet RequiemにもOLEDディスプレイが付いてて、なんも表示出来てないので、表示出来るようにしたい(2回目)

I²Cってなんなのか分からなかったのでググったら少し分かった気がするけど、実際に弄ってみないと何も分からんだろうなぁ。

Anchor(USBケーブルが繋がってる方)とPartner(そうでない方)の両方にポインティングデバイスが付いているキーボードがある(???)らしいので、それに対応しないといけないけど、そのためにはUARTというプロトコルで半二重通信を実装する必要がありそう、みたいな話をしてた(気がする)

### Initial-V, Final Stage!

BMWのシフトノブを使って自作キーボード(?)を作る話……?

シフトノブがネイティブに持っている機能を生かすために、それが使っているCANプロトコルを扱う為の仕組みを作ったり、ハウジングを作ったり、途中でリフロー炉が必要になったのでジャンクを組み合わせて作ったけど結構高かったとか、自作っていう業界は自分の思うとおりに、なんでもやり放題なんだなぁという事が分かるいい話だった…… 良すぎた……

## Drinkup for KeebKaigi 2023

20:30 KeebKaigi 2023の打ち上げに参加した。

英語の発表で聞き取り切れてなかったトークについて補足して貰ったりして有意義だった。キーボードという1トピックにフォーカスして集まった人達の飲み会だったのでめっちゃ楽しかった。

## やんちゃハウス2023参加者集合

23:00 やんちゃハウス2023の参加者が続々と松本に到着して、チェックインしてきた。

ハウスに戻った時刻が遅かったので既に寝ている人とかもいた。参加予定の人が全員揃っていたかどうかは布団から見えている頭の数を数えてだいたい合っていたのでヨシ!おやすみ!

# 5/11

## 運動

08:30 RubyKaigi 2023の会場まつもと市民芸術館の屋上で、けん玉や軽い運動を行った。これは会期中の3日間にわたって毎日行う事になる。

## RubyKaigi 2023 Day: 1

### Matz

10:30 「Rubyの名前、もしかしたらTishになっていたかもしれない」って話、前にも聞いたけど、それを聞くたびにTishKaigiがあるとしたら四国中央市でやるしかないよなって思ってしまう(製紙工場で有名な地域なので)。

### ランチ

11:30 会場で配られていた信州名物の「山賊焼」弁当を貰って、屋上で食べていた。食べ終わった後にボーっとしていたら、けん玉仲間のRubyistが来たので一緒にけん玉の練習をして過ごしていた。けん玉はいいぞ。

### The future vision of Ruby Parser

13:30 大パーサー時代に幕開けになる演説。「探せ!全てをそこに置いてきた!(ドン!」って感じのトークで、それに中てられたRubyist達がこぞってパーサーの海へ船出することになった。

LRパーサー、それを捨てるなんてとんでもない、まだまだポテンシャルあるよ。今後、それを証明していくから覚悟して、という話だった気がする。

### Develop chrome extension with ruby.wasm

14:10 RubyKaigi 2022で一世を風靡したruby.wasmを使ってChromeの拡張を作る話を聞いていた。VFSでバンドルした状態でビルドすればgemが使えるんだけど、めんどいので使われてなさそう。もっと気軽に使われてほしい。Chrome拡張は複数のファイルに渡って拡張の定義を書く必要があるけど、unloosenというフレームワークを作ったので、ブロック内でRubyを書くだけで拡張として動いて便利だよ。remote requireもできるからVFSにgemを含める必要も無くて簡単だからやってみてね。みたいな話を聞いていた気がする。

### UTF-8 coming to mruby/c

14:50 mruby/cは文字列をバイト列として扱っているので、UTF-8として解釈して扱いたい時に困る。ので、扱えるようなモードを作ってみたという話を聞いていた気がする。そもそもUTF-8って何?という所から説明してくれていて、実はよく分かっていないという人でもスッと聞ける良い発表だったと思う。

### おやつ休憩

15:20 スポンサーブースを冷やかしに行ったりしていた気がする。

### Power up your REPL life with types

16:00 irbに型のサポートを導入するgemを作った話を聞いていた。型が反映されると、irbで出てくるメソッドの候補が多すぎる問題が抑制されて便利。このRubyKaigi中にirbに標準で取り込まれる事になったっぽくてすごい。

### LT

16:40 LTを見ていた。RubyKaigiでLT見るの久しぶり。

#### Building Ruby Native Extention using Ruby

なんかRubyスクリプトをコンパイルしたバイナリを動かせるようにしてた気がする。

#### RBS meets LLMs – Type inference using LLM

LLMで型を求めてた気がする。

#### Customize your Vim/Neovim directly with Ruby

VimをRubyで拡張していた。VimはVimScriptで弄るもの、という常識を覆したという事?

#### mruby VM

mrubyとCRubyとでVMの種類が違うという事を説明していた。mrubyはレジスター、CRubyはスタック。この説明、mrubyが世に出てすぐくらいの頃に頻繁に聞いていたので懐かしかった。

#### Natsukantou the XML translator

Natsukantouというgemを使って翻訳サービス的な各サービスを同じように扱えるようにしたっぽい?

#### BINGO!

こういう娯楽用のツールを自作するの、わしも好きなんだけど、話を聞いてると思ったより重厚長大な実装になっていて、やはり社長ともなると本気度が違うなって思った……

#### Adding custom rule for Rubocop in the 2 month of employment

RubyKaigiで「Bookwalkerで働きたい」とか言ってたら隣に中の人がいてスッと転職できてしまった。とりあえずRubocopでバーンと一貫性のあるルールを適用してやったぜ。みたいな話だった気がする。『研鑽Rubyプログラミング』に出てきた「哲人」そのものじゃん。って思って聞いてた。

#### Unexplored Region – parse.y –

parse.yを題材にした落語みたいな感じだった。なんか、映像配信のアーカイブが出たら何度も見返したいって思うくらい面白かった。

#### Ultra-fast test-driven development

テストの実行が遅いからTDDやらないって言われたからカッとなって超速くして言い訳できなくした。みたいないい話だった気がする。

#### Optimizing Ruby’s Memory Layout: Variable Width Allocation

RubyのGCの効率が上がったっぽい話だった気がする。

#### Dividing and Managing: The Cops Squad of RuboCop RSpec Dept

CapybaraとかFactoryBotとか使ってないのにRubocopを入れるとついてくるのが邪魔、みたいなユーザーのためにそれらを別のgemとして切り出した、みたいな話だった気がする。

#### Serverless IdP for small team

RubyKaigiチームくらいの小規模チームでGoogleとかMSとかのIdPを使うのは大げさすぎ。This is 最高にちょうど良いgemあるよ(というか作った)。みたいな話を聞いていた気がする。

## Official Party

18:30 松本で一番凄そうなホテルVuena Vistaのホールで行われたパーティーに参加した。

めっちゃいいかんじの日本酒が積んであったので、適量を摂取した。

色んな人と話をしていたら、あっという間に終わって追い出されてしまったのが残念だった。6時間くらいやってほしい。

RubyKaigiの最上位スポンサー枠ことRubyスポンサーのMNTSQさんの人と話してたら、今後、めちゃくちゃやりがいのありそうな仕事が山積みっぽかったので、色んなRubyistが採用できたらいいですねって思った。

# 5/12

## 運動

08:30 前日の運動の様子を聞きつけた人が何人か来てくれて、みんなで運動をして楽しかったです(小並感)。

## RubyKaigi 2023 Day: 2

### Learn Ractor

09:40 Ractorを使う時にはオブジェクトが無駄にコピーされないように既にある配列とかからインデックスで値を参照するようなループに直すと有利になるという事がありうる。

Concurrency is everyware.って言ってたのが良かった。割と並列処理が刺さる場面はあるので、今後は使えそうなところにはRactorを使っていくようにした方がアプリが速くなるので(速い方が嬉しいアプリなら)嬉しいだろうなと思った(それはそう)。

### Implementing “++” operator, stepping into parse.y

10:20 めっちゃ面白かった。parse.yを弄ってRubyの変数に++演算子を実装してみるまでの試行錯誤のストーリー。この機能があったら良いのになという感じで実装を進めていくうちに、”あったら良いのに今まで無かった理由”みたいなものにぶち当たって、それが「言語デザイン上の判断」みたいなものだったのは壮観だった。「ここが世界の果てか」みたいな冒険記を読んでる感じで良かった。

### Fix SQL N+1 queries with RuboCop

11:00 SQL好きとしては楽しみだったセッション。RubocopにSQLの性能に影響する”良くない書き方”を是正させるためにコード中のSQLをパースまでするのが凄かった。Rubocopと連携させるためには単にASTが得られれば良いだけでなく、それぞれのトークンがどういう位置関係で記述されていたかまで持っておく必要があるという部分は大変そうすぎた。RubyでSQLをパースしてASTを得るgemにgdaというのがあるようなんだけど、割とドキュメントが厳しいトノコト。

### ランチ

11:30 なんかTwitterでいいかんじの店を予約してくれる人が現れたので乗らせて頂いた。

割と高い店だったけど、初日に配られたバウチャーが使える店だったので助かった。

https://twitter.com/IwakuraDev/status/1656689073686466561

### Revisiting TypeProf – IDE support as a primary feature

13:30 Rubyに型が入っても、そんなに使われないのは何故か。それは速度不足でした。というわけで、IDEで使っても違和感が無いくらい処理速度を向上させるためにバーンと作り直しました。という話だった気がする。

### Ruby Implementation of QUIC: Progress and Challenges

14:10 QUICをPythonからRubyに移植してみたという話。とりあえず1対1移植は行ったので、これからどんどんRubyっぽくしていくぞ、という感じだった。英語での発表だったけど、めっちゃスラスラと喋っていて、これは一朝一夕ではないなという迫力を感じた…… 凄かった……

### Hacking and profiling Ruby for performance

14:50 Goばかりが勝っているISUCONでも、Rubyで勝てるという事を示していた。ボトルネックを探すための可視化ツールとか、しっかりしてるなぁという感じだった。

### おやつタイム

15:20 配られていたリンゴジュースを飲んだりしていた気がする

### Eliminating ReDoS with Ruby 3.2

16:00 backtrack型のエンジンの説明とか、Ruby 3.2でReDoS(正規表現を狙ったDoS)をどのように軽減させているかについて説明していた気がする。あくまで軽減なので、リスクが完全になくなったわけではないけど、比較的安心出来るようになったようでよかった。

### Optimizing YJIT’s Performance, from Inception to Production

16:40 これから取り組もうとしている課題について、ちゃんと計測していて偉い。しっかりしているという感じだった。

## Leaner Drinkup at RubyKaigi 2023

めっちゃ雰囲気のある隠れ家的な飲み屋のバルコニーでRubyist達と色んな話が出来て楽しかった。ルービックキューブとか光るスナップボールを出して遊んでいた。

# 5/13

## 運動

08:30 前日、前々日の運動の様子を聞きつけた人が何人か来てくれて、みんなで運動をして楽しかったです(小並感)。

## RubyKaigi 2023 Day: 3

### Ruby Committers and The World

09:40 Rubyのコミッターが壇上で折り重なっていて、これからのRubyについて議論しているのを眺める恒例のイベントを見ていた。

### Build Your Own SQLite3

11:00 RP2040でSQLite3を動かそうとするとき、永続化するためのストレージとしてSDカードを使おうとしても、OSが無いので普通は無理。そこで、本来SQLite3を使おうとする側であるRuby側でファイルシステムを代替してSDカード内にSQLite3のdbファイルを保存することが出来るようにしたという話を見ていた。えーすご……

### お昼休み

会場で配っていた釜飯かなんかを持って屋上に上がって食べた。朝の運動で一緒になった人とトレーニングやアマチュア無線の話をしていた。

### Ruby vs Kickboxer – the state of MRuby, JRuby and CRuby

13:30 キックボクシングの練習をするための器具をRubyで自作した話と様々なRuby実装についての話を見ていた。デモが楽しげだったし、ナレーションがプロっぽくて聞いててワクワクした。

### Load gem from browser

14:10 ruby.wasmを使っていると、gemが使いたくても、ビルド時に含めないと行けなくて使いにくいのが辛い。そこで、実行時にロード出来るようにしようとしているという話を聞いていた気がする。そろそろ意識がもうろうとしてきている。

### Ruby JIT Hacking Guide

14:50 RJITという新しいJITの実装について。コンパイル後のバイナリが機械語としてどうなることを想定しているのかという事まで解説していてヤバかった…… 本当にコンピューターを端から端まで使い切りたいと思ったら、ここまでやらないとダメなんだなって事を見せつけられていた。

### Let’s write RBS!

16:00 RBSで型を足していけば足していく程、普段の開発が楽になるけど、じゃあ具体的にどうやったらいいのという疑問に答えるセッションだった。

### Parsing RBS

16:40 完成していないコードに対しても型の恩恵がもたらされるようにしないといけないが、それは大変という話を聞いていた気がする。

## After Party

松本つなぐ横丁を貸し切りにして飲み会をやっていた。松本つなぐ横丁は最近歌舞伎町とかで良く見る派手に光る飲み屋のフードコートみたいな業態で、松本は最先端だなって思った。

## RubyMusicMixin 2023

昨年に引き続きライブハウスを貸し切ってDJをやるというイベントに参加していた。20:00〜26:00という親切な時間設定が嬉しい。26:00までとか誰が残るんだよって思ってたけど、色んな人と存分に話し込んでいたら26:00になるのはあっという間だった。

# 5/14

連日06:30くらいに起きてたけど、この日は流石に08:00くらいまで寝てた気がする。

## やんちゃハウス2023チェックアウト

10:00 4泊5日にわたる宿泊もあっという間に終わってしまい、忘れ物のチェックなどを行って無事にチェックアウトした。

今回のやんちゃハウスはわし含めて10名で宿泊したけど、半分くらいは新規の人だったので、新鮮な回だった。夜、寝る前の2時間くらい雑談するタイミングがあったんだけど、ベテランのRubyistが新人のRubyistに今までの情報処理業界の出来事とかを教える会みたいになってて良かった。新しく入ってきた人はキャッチアップすることが多くて大変だよねというような話をしていた。以下はその時のトピックがSlackにメモられていたものからの抜粋。楽しそうさが伝わるだろうか。

浸透いうな

グローバルipあるある

さくらのvpsを22でたててみよう

吊るしのMac

サテラビュー

ディスクシステムの系譜

秋葉原

・紙風船

・スーパーポテト

岡崎市立中央図書館事件

兵庫県アラートループ事件

ウイルス罪

コインハイブ事件

こんにちはこんにちは

ttl

dns スピニング

認証ブートストラップ問題

ピンニング

だめもじ

iso2020?

shift jis

ドカポンキングダム

LINEつよいunicode

サロゲートペア

リガチャ

リガチャは活版印刷時代の話

コンピュータコンポネント、数珠つなぎ

南京錠いうな

ゼロトラストネットワーク

グループ会社

ドンだー

三店方式

神奈川県警

参加者のみなさん、チェックインからチェックアウトまで、ずっとniceなRubyistだったため、何ごともなく無事にやんちゃハウス2023を終えられました。ありがとうございました。という感じだった。

## ツーリング.rb

RubyMusicMixin 2023で会ったRubyistも関東地方から小型自動二輪で松本まで来ていて「明後日の雨ヤバそうだから、明日には帰ってしまおうかと思ってるけど、一緒に帰らん?」って誘われたので、それもいいかという事で帰ってしまうことにした。Rubyist on Trailsというハイキングイベントが雨でバスツアーに変更されたためキャンセルしたところだったので、ちょうどよかった。

10:00 松本城の駐車場で合流して中山道から東京へ向かう。

10:00 松本城の駐車場で合流して中山道から東京へ向かう。

16:55 『道の駅はにゅう』で解散した。ここからは各々の家に別々に帰る。

19:00 帰宅。長い旅の終わり。

# 5/18 振り返り

手を動かして振り返る RubyKaigi 2023(https://cookpad.connpass.com/event/282436/)というイベントに参加していた。

ほぼパーサーの話という感じになっており、どうやらパーサーは構文だけでなくRubyKaigiも食うらしいという事が分かった。

# そしてRubyKaigi2024へ

RubyKaigi 2024(https://rubykaigi.org/2024)は2024年5月15日〜17日までの3日間、沖縄県那覇市で行われるらしい。

今のところ参加するつもりなので、楽しみ。

## どうやって行くの

暫定ながら、以下のような旅程を想定しているけど、まだまだ時間はあるのでじっくりと検討したい。

5/10 17:00 出発

5/10 22:00 横須賀着(80km)

5/10 23:00 東京九州フェリー横須賀発

5/11 21:00 新門司港着

5/11 23:30 佐賀市着(110km)

5/12 08:00 佐賀市発

5/12 15:00 水俣市着(165km)

5/13 08:00 水俣市発

5/13 18:00 フェリー 鹿児島発

5/14 19:00 フェリー 那覇着

5/15 RubyKaigi 2024 Day: 1

5/16 RubyKaigi 2024 Day: 2

5/17 RubyKaigi 2024 Day: 3

5/18 一回休み

5/19 07:00 フェリー 那覇発

5/20 09:00 フェリー 鹿児島着

5/20 17:00 延岡市着(196km)

5/21 08:00 延岡市発

5/21 11:00 佐賀関港着(100km)

5/21 13:00 国道九四フェリー

5/21 14:00 三崎港着

5/21 18:00 四万十市着(134km)

5/22 08:00 四万十市発

5/22 13:00 室戸市着(187km)

5/23 06:00 室戸市発

5/23 10:00 徳島港着(122km)

5/23 11:20 オーシャン東九フェリー

5/24 05:30 東京港着

5/24 06:30 帰宅(25km)

ザッと書いてみたものの、2週間の旅……?これ、いくらなんもで無理では……という気もしている……

無理せず、鹿児島まで飛行機で行って、往路はフェリー、復路は那覇から直接飛行機で帰るという風にする可能性も高い……

# 総括

今回のRubyKaigiはパーサー会議とも言われるほどパーサーの話題で持ちきりだったので、わしもなんかパーサーに絡めて何かやりたいなと思って、わしは何に興味関心があるんだっけというのを思い出してみたところ、数年前にSQLQLという思想を公開した事があったんだった。SQLQLというのはWEBサーバーとかのエンドポイントにデータの集合を要求する際のクエリにSQLを使ったら分かりやすくて便利なんじゃないかという考え方で、以前公開した記事では、その実装にSQLの共通表式を使う事でリクエストした主体毎に異なるレスポンスが返せるようになるのではというコンセプトを考案していた。SQLQLはエンドユーザーに自由にSQLインジェクションをさせるようなものなので、いったん、リクエストで送られてきたSQLをパースして、安全なSQLに組み立て直して実際のDBへのクエリに組み込む必要がある。じゃあ、そのパースをどうしたらいいんだろうね、というところで手が止まっていて、まぁ、別に、待っていればいつか誰かがこのコンセプトに近いモノをリリースしてくれるだろうから、その時を楽しみにしていよう、などと考えながら6年が経とうとしている…… SQLQL向けのSQLのパーサーが作れたらSQLQLのPoCが作れるようになるので、まずはそういうところからやってみたいと思わされるRubyKaigiだった。

カテゴリー: 未分類 | コメントする

RubyKaigi 2022 に参加してきた

RubyKaigi 2022

抜粋してトークの感想を列挙していく。フル参加していたはずなのに数が少ない理由はあとで述べる……

Ruby meets WebAssembly

今まで、Opal とかを使って Ruby で書いたコードを JavaScript に変換してブラウザ上で動かす、みたいなものは存在したけど、CRuby そのものがブラウザ上で動くという信じられない偉業について、その実現方法を解説してくれた講演だった。初日の最初のトークがこれなの、めっちゃすごいなって思った。後述する Code Puzzle も、この WebAssembly が使われていて、わしにとって今回の RubyKaigi を象徴するトークだった。

Making *MaNy* threads on Ruby

「あっちの言語では出来てることが、なんで Ruby では出来ないんだっけ?」みたいな感じで出来ない理由を列挙していって、それら一つ一つについて解決の糸口を探っていくと、だんだん「なんかできそうな気がしてきた」ってなってくる様子を見て、問題解決かくあるべしという気がしたし、憧れを持った。Ruby のすごいところの1つとして、Ruby ならではの機能とか改善をやりつつ、他言語の利点も強力に吸収していくところがあると思っていて、それが現れてるトークだった。

TRICK 2022 (Returns)

なんというか、言葉にならない感動が得られるコマだった…… やんちゃには芸術はわからぬ、であるにも関わらず、あれほど感動させられてしまう事に驚きを感じた……

Packet analysis with mruby on Wireshark – dRuby as example

Wireshark を Ruby で使いたいけど Lua とかでしか使えないので mruby が使えるようにした。という話なんだけど、やりたいことが明白で、とにかく自分がやるしか実現する方法がないし、やれば実現しそうだしやるしかない、という、営みのお手本みたいなトークで、見習いたいなと思った。

The Better RuboCop World to enjoy Ruby

人間と Ruby と、という感じの、とても考えさせられる良いトークだった。RuboCop がとても便利なツールである反面、人間との関係性を設計した上で使わないと、ある人間の人生にとっての Ruby という存在を歪めかねない一面をもっており、仕事でのことならそれが許されるのだろうか、もっとよく出来ないか、など色々と考えた。

Fast data processing with Ruby and Apache Arrow

普段、仕事で DWH を使っているので、Data Processing を Ruby でやるということに興味はあるものの、使っている DWH が BigQuery なので、Apache Arrow と関わる事がなくて寂しい。BigQuery と Ruby との間で Apache Arrow を使って何か得するような事が見つかったら何かをしたいと常々思っている事を再確認したトークだった。

Cookpad Code Puzzle for RubyKaigi 2022

スポンサーのクックパッドから提供されていた Ruby のパズルが面白すぎた…… RubyKaigi の会期中であるにもかかわらず、トークを聴く集中が途切れて、気がついたらパズルに取り組んでいる自分がいた…… Web Assembly の CRuby がブラウザ上で動いており、その上で課題を解いていくという、この RubyKaigi にピッタリのエンタメだった。

標準では func10 までが出題されており、エクストラステージとして func20 まで出題されていたが、ギリギリ会期中に func20 まで解くことができた。ただ、途中、何問かは出題意図を掴みきれないまま嘘回答で乗り切っており、会期が終わってから他の参加者と相談しながら正規の解き方を探った。でも、それもまた楽しかった。

どういう解き方をしたのか、Gists にまとめてあるので、興味のある人は見てもらったらよい。func10 までは公式の解説がでているけど、func20 までの解説は来週になるらしいので、それまでの間に自力で解きたい人は、ここで読むのをやめて、後日また見に来て欲しい。

# You can call `func1`
p func1(0) #=> 1
p func1(1) #=> 2
p func1(2) #=> 3
# Can you tell how `func1` is defined?
# Hint: def func1(n) = n + ???
# Define `answer1` that works like `func1`
def answer1(n)
n.succ
end
view raw answer01.rb hosted with ❤ by GitHub
# Congrats! You've solved the first puzzle!
# Next, challenge func2!
p func2("Hello") # => ??? (press "Run Ruby" to see output)
p func2("world") # => ???
def answer2(str)
str.upcase
end
view raw answer02.rb hosted with ❤ by GitHub
# Next, challenge func3!
p func3(1)
p func3(2)
p func3(3)
def answer3(n)
n.succ.times.to_a
end
view raw answer03.rb hosted with ❤ by GitHub
# Still want to play?
# You may want to try func4
# This call raises an error!
# Try to find a correct way to call it.
func4{9}
def answer4(&f)
f[] + 42
end
view raw answer04.rb hosted with ❤ by GitHub
p func5(0)
p func5(1)
p func5(2)
p func5(0,2)
def answer5(a, b=1)
a + b
end
# Hint: Check the parameters
view raw answer05.rb hosted with ❤ by GitHub
def answer6(n)
case
when n < 10 then n
else
n2 = eval(n.to_s.chars.join('+'))
n2 < 10 ? eval(n2.to_s.chars.join('+')) : answer6(n2)
end
end
0.upto(1000) do |n|
func, ans = func6(n), answer6(n)
puts "#{func == ans ? 'OK' : '—-NG'} n: #{n}, func: #{func}, ans: #{ans}"
end
view raw answer06.rb hosted with ❤ by GitHub
p func7(0)
p func7(1)
p func7(2)
# Hint: Try to pass non-Integer!
def answer7(n)
n.succ
end
view raw answer07.rb hosted with ❤ by GitHub
# Hint: %b
def answer8(n)
sprintf("%b", n).chars.select{|c| c == '1'}.size
end
1.upto(1000) do |n|
f = func8(n)
a = answer8(n)
p [n, f, a]
end
view raw answer08.rb hosted with ❤ by GitHub
# Can you tell what string is replaced?
# Hint: Pass a spy (or mock) object to func9
class Hoge
def gsub(a, b)
p [a, b]
end
end
def answer9(s)
s.gsub("u-g0t-me", "yikes")
end
((%w[foo bar baz])+[Hoge.new]).each do |c|
res = func9(c)
p [c, res]
end
view raw answer09.rb hosted with ❤ by GitHub
def answer10(reset=false)
if reset
@counter = nil
end
@counter ||= -1
@counter += 1
end
p func10(true)
p answer10(true)
view raw answer10.rb hosted with ❤ by GitHub
def answer11(o)
o.hash
end
view raw answer11.rb hosted with ❤ by GitHub
def answer12(n)
n.
to_s.
chars.
sort.
chunk_while{|i,j| i==j}.
to_a.
map(&:size).
reduce(:*)
end
view raw answer12.rb hosted with ❤ by GitHub
TABLE = Encoding.list.map{|e|e.to_s[0..1]}
def answer13(n)
TABLE[n]
end
view raw answer13.rb hosted with ❤ by GitHub
def answer14(n)
case n.to_s
when '0' then 'Z' # Zero
when '10' then 'T' # Ten
when '1000' then 'T' # Thousand
when /^(2|3)/ then 'T' # Two, Twenty Three, Thirty
when /^(4|5)/ then 'F' # Four, Five, Forty, Fifty
when /^(6|7)/ then 'S' # Six, Seven, Sixty, Seventy
when /^8/ then 'E' # Eight, Eighty
when /^9/ then 'N' # Nine, Ninety
when '11' then 'E' # Eleven
when '12' then 'T' # Twelve
when '13' then 'T' # Thirteen
when '14' then 'F' # Fourteen
when '15' then 'F' # Fifteen
when '16' then 'S' # Sixteen
when '17' then 'S' # Seventeen
when '18' then 'E' # Eighteen
when '19' then 'N' # Nineteen
when /^1/ then 'O' # One
end
end
0.upto(1000) do |i|
f, a = func14(i), answer14(i)
next if f == a
p [i, f, a, f == a]
end
view raw answer14.rb hosted with ❤ by GitHub
TABLE = Object.constants.sort.map{ |s| s[0..1] }
def answer15(n)
TABLE[n]
end
view raw answer15.rb hosted with ❤ by GitHub
def answer16(&f)
return false if f.parameters.empty?
f.call do
true
end
end
view raw answer16.rb hosted with ❤ by GitHub
def answer17(msg)
JS.eval("alert('#{msg}')")
end
view raw answer17.rb hosted with ❤ by GitHub
def answer18(s)
a = s.scan(/\d+/)
b = s.scan(/[^\d]+/)
pair = s.match?(/^\d/) ? [a,b] : [b,a]
pair.reduce(:zip).flatten.compact.map { |s|
case s
when /\d+/
s.to_i
else
s.split(//)
end
}.flatten
end
view raw answer18.rb hosted with ❤ by GitHub
def polandnize(ast)
case ast
in String => s
return s
in ['value', Integer]
return ast
else
# do nothing
end
case ast.children
in [Array, nil, node]
polandnize(node)
in [Integer => n]
['value', n]
in [node1, operator, node2]
[operator.to_s, node1, node2].map { |n| polandnize(n) }
in [next_ast, nil]
polandnize(next_ast)
end
end
def answer19(a)
ast = RubyVM::AbstractSyntaxTree.parse(a.map(&:to_s).join)
polandnize(ast)
end
view raw answer19.rb hosted with ❤ by GitHub
def solve(input)
case input
in ["value", Integer => n]
["value", n]
in [String => op, ["value", Integer => a], ["value", Integer => b]]
solve(["value", eval("#{a} #{op} #{b}")])
in [String => op, Array => a, Array => b]
solve([op, solve(a), solve(b)])
in [String => op, ["value", Integer] => a, Array => b]
solve([op, a, solve(b)])
in [String => op, Array => a, ["value", Integer] => b]
solve([op, solve(a), b])
in [String => op, ["value", Integer] => a, ["value", Integer] => b]
solve([op, solve(a), solve(b)])
end
end
def answer20(input)
solve(input)[1]
end
view raw answer20.rb hosted with ❤ by GitHub

Ruby Music Mixin 2022

RubyKaigi の最終日の夜、ピクシブ社のRuby Music Mixinというイベントに参加させて貰った。結構前から、ライブハウスで色んな音楽を聴くのが好きだったんだけど、ここ2、3年は色々あって遠ざかっており、このイベントで久しぶりに良い気持ちになって嬉しかった。盆踊りサークルモッシュみたいな謎な集団行動が発生する感じ、とても懐かしかったです。

https://twitter.com/yuiseki_/status/1568560828353478656?s=21&t=stJefABncrUJS35ERIeePw

行き帰り

今回、どうやって三重県津市まで行って帰って来るか、非常に悩んだ。というのも、地図を見ていると名古屋の南あたりに、いかにもショートカット出来そうな湾があって、調べてみると実際に伊勢湾フェリーというフェリーが運航されていて、とても楽しそうだったからだ。

伊勢湾フェリーを使うとなると、新幹線を中途半端な駅で降りないといけないし、港まで行く渥美半島の鉄道はすべて各駅停車で大変そうすぎる。伊勢湾フェリーの仕様を見ていると、バイクや車を積むことが出来るとある。わしは原付二種のスクーターを所持しているので、スクーターで行けばスクーターごと向こう岸に渡ることができて便利そう。これは機運なのでは?と思った。

ここまで書いていて、それは嘘だなぁって思う。結局、要するに、面白そうだったので原付二種のスクーターで三重まで行って帰ってきた。詳細は Twitter のハッシュタグにまとまっているので、興味のある人はのぞいてみてほしい。 やんちゃの旅

行きは、9/6 の 13:00 に家を出て、湯河原の Airbnb の宿で一泊。翌朝 9/7 の 07:00 くらいに出発して、19:00 くらいに三重の宿に着いた。帰りは 9/11 の 07:00 くらいに宿を出て、23:45 くらいに家に着いた。いわゆる強行軍というやつだ。

道中、一番辛かったのは一部のバイパス道の途中が自動車専用道路に指定されているせいで、125cc 以下の車両は強制的に下ろされてしまい、信号待ちのキツイ道を延々と走らされるという事に現地で気づいたことだった。イイカンジで流れている道の途中で「ここから先は遠慮してくれるか?」って看板が出て下ろされて、降りたところに「9km先でまた合流させてあげるから頑張ってねw」って看板が出てるのを見たときの感情はしばらくのあいだ忘れられないだろう。

行きはまだしも、帰りを1日でやりきろうとしたのは失敗だった。神奈川に入ってから家までの道中、かなりの疲労感があったし、危険だった。かといって中途半端なところで臨時で宿を取るという決断もできず、最初から富士市とか御殿場市で一泊する予定にすべきだったなという反省がある。

自動 二輪車でフェリーに乗ったのは初めてだったけど、とても楽しかったので、総じて成功ではある。次回、似たようなことをやることになったときには、今回の反省を活かして、イイカンジにやっていきたいと思った。

やんちゃハウス

2017 年から、やんちゃハウスという、RubyKaigi 期間限定のシェアハウスを主催しているんだけど、今回、3年ぶりにやんちゃハウスを実施した。やんちゃハウス2022は色々な事を加味して、3LDKの家をAirbnbで借りて3人でシェアするというスカスカ構成にした。今までのやんちゃハウスでは家にある布団の数だけRubyistを詰め込んでワイワイやる、というスタイルだったので家を借りる費用を頭数で薄めることが出来るメリットがあったが、今回は四泊25,000円くらいになってしまい、下手すると普通のビジネスホテルの方が安かった可能性すらある。

そこまでして、どうしてやんちゃハウスを実施したのかというと、一回中断してしまうと、再開するハードルが上がるだろうから、という理由だった。種火程度でも残っていれば、またあの頃のやんちゃハウスが戻ってくるかもしれないし、あるいは未来の違う形のやんちゃハウスが現れるかもしれない。それらの可能性が潰えないように、こじんまりでも実施したというのが今回のやんちゃハウスだった。

ところで、やんちゃハウス2023について。RubyKaigi 2023 は松本で開催されると予告されたわけだけど、これは 2020 のリベンジであり、やんちゃハウス2020のリベンジでもある。なので2020の時に借りようとしていた家にはオファーを出していて、少しずつ準備は進んでいる。もう次の話が進んでいるんだなぁ。

あと、年内に RubyWorld Conference 2022 というイベントが島根県松江市で行われる事になっていて、こちらで『やんちゃWorldハウス2022』というのをやろうかという話が進んでいる。マジか、という感じ。今後、募集開始するとしても1枠しか残ってないので、もしも強い興味を持っている人がいたら、公募が始まる前にネジ込みに来て欲しい。

まとめ

こころもち
カテゴリー: 未分類 | コメントする

RubyKaigi 2019 へ参加してきた

0 日目

永和システムマネジメントのクルーズに参加した。
ウィスキーをロックで頼んだらコップになみなみとウィスキーを注がれたのが面白かった

1 日目

The Year of Concurrency

matz
このあとのトーク群の予習をするのに良いセッションだった
Ruby 3 が去年より具現化しているということを感じた

Ruby 3 Progress Report

Matz & the Ruby Core Team
前から思ってたけど、記号とか予約語を「地上げする」っていう表現が好き過ぎる

Terminal Editors For Ruby Core Toolchain

@aycabta

irb に multiline editor を入れる話。
この人は、超巨大な yak shaving をコツコツやっている人で、本当に尊敬に値する。
この取り組みはもっと知られるべきだと思う。というか、Ruby 2.7 が出たらみんなが知ることになって、その時のみんなの驚く顔が楽しみというのがある。

Pragmatic Monadic Programing in Ruby

joker1007
Pure な Ruby だけを用いて、Ruby にモナドの機能を顕現させる降霊術を披露していて、控えめに言って黒ミサだった。
Asakusa.rb の隣の席で Joker さんが準備をしているとき、ずっとうんうん唸りながら黒魔術を練っていたのを見ていたけど、どうやら思い描いていたような発表が出来たようで、良かった。

Compiling Ruby to idiomatic code in static languages

聴いてたけどよく分からなかったす

Pattern matching – New feature in Ruby 2.7

パターンマッチ、もっともっと先の話になるかと思っていたら、すぐ目の前まできていて、マジか〜ってなった
case hoge in [_, String => a] end みたいな AS パターンとか、Ruby でこういう風になるとは思ってなかったので意外だった(まだ確定はしてないけど)

Official Party

中洲川端商店街をジャックして酒を飲みまくるという異常な催しだった
食べ物の列が凄くてありつけなかった分、たくさんの酒を飲んだ

2日目

All bugfixes are incompatibilities

様々なパッチをバックポートをし続けるにあたっての判断基準がしっかりあって、安心感がすごかった
途中、わしが報告したバグのチケットのスクショが出てきて、うおっ!ってなった

Better CSV processing with Ruby 2.6

秒速さん、めっちゃ楽しそうだった
CSV には伸びしろが沢山あった(ある)んだな

Ovto: Frontend web framework for Rubyists

流石にちょっと使ってみたくなるくらい凄かった
ちょっとした早押しクイズアプリくらいなら、これで書いても何も問題無いのでは

RubyData Workshop

Red Data Tools の人達がみんな楽しそうで良かった

The fastest way to bootstrap Ruby on Rails

コンテナという概念に縛られず、プロセスを自在に操って管理していくという部分がしっかりしていてすごいなと思った

What is Domain Specific Language?

どのようなメタプロを用いれば、どのような内部 DSL が実現できるか、ということを聞いていた

Lightning Talks

全部面白かったんだけど、The TracePoint Bomb! を見た瞬間に全部吹き飛んでしまって、頭痛くなるまで笑った

コード懇親会

@hanachin_ さん達と一緒に Redmine のソースコードを動かしたり読んだりしていたら、なんかみんなテストが通らないという現象に遭遇して調べていた

3日目

Ruby Committers vs the World

みなさん、今の Ruby より、未来の Ruby に目を向けているなと感じた
識者同士の議論を見ていると、わしには思いも寄らない観点が沢山出てきて勉強になる

Running Ruby On The Apple II

まさか assembly で Ruby(nruby) の実装をやってくるとは思ってなくて、とにかく凄すぎるという感想しか無い
現代までのコンピューターの発展が早すぎて、レガシーなコンピューターは、すぐギャグになってしまう

Play with local vars

滅茶苦茶面白かった
ローカル変数へのバインド方法クイズ、正規表現の名前付きキャプチャを知ってたのに出てこなくて悔しかった
Vim で発表されてたんだけど、めちゃくちゃな速度でライブコーディングしてて、わしもちゃんと開発環境にこだわらないと、いつまで経っても効率が出ないなと思った

The send-pop optimisation

明らかに不要な処理を省いて手数を減らしていく、しかも自動で、という取り組みを、再帰的に発生する yak shaving をこなしながら進めていく偉大な話だった

途中で分からなくなって呟いてたら教えて貰った

def hoge(x)
  x.times do |i|
    return 0
  end
end

p hoge(42) #=> 0

def hoge(x)
  x.times &-> (i) do
    return 0
  end
end

p hoge(42) #=> 42

def hoge(x)
  f = -> (i) do
    return 0
  end

  x.times(&f)
end

p hoge(42) #=> 42

def hoge(x)
  f = Proc.new do |i|
    return 0
  end

  x.times(&f)
end

p hoge(42) #=> 0

lambda と Proc の違い、引数の扱いの違いしか覚えてなかったけど、メソッドを抜けるかどうかというのもあるのか……

Optimization Techniques Used by the Benchmark Winners

とにかく最適化への執着がすごくて、freeze が出来るならしないと気が済まないみたいなのから始まり、しまいには謎の(謎では無いが)数字を使ったコードが出てきて、これで速くなるのは分かるな?って言われても、分かるけど分からなかった……
3日目の最後のセッションだったわけだけど、もうめちゃくちゃ眠くて、意識が飛びそうになるんだけど、数分に一回、衝撃的なスライドが出てきて強制的に覚醒させられる、みたいなのを繰り返して死ぬかと思った。

アフターパーティー

arm TresureData の提供で、良い感じのクラブを貸し切りにして楽しんだ
ウィスキーをロックで頼んだらコップになみなみとウィスキーを注がれたのが面白かった

やんちゃハウス

やんちゃハウスについては思うところがあるので、別のエントリで詳しく書くつもり

まとめ

Ruby 3 が顕現しそうという実感が出てきてワクワクする RubyKaigi だった

カテゴリー: 未分類 | コメントする

RubyKaigi 2018 に参加してきた

なんだ

RubyKaigi 2018 に参加してきた。

毎日飲み歩いたり牛タンを食べたりするためだけに行ったわけではないので、聞いた講演についてのメモを書いておく

1日目

Matz

keynote

ことわざをテーマにして話が進んでいった

「名は体を表す」からの `Object#then` の流れが鉄板すぎて笑ったw

アーロン

Analyzing and Reducing Ruby Memory Usage

アーロンの発表は、いつも自分の仕事の中で見つけた問題点について真面目に計測、調査を行って、根本的な原因までたどり着いてパッチを書くという事をしていて、本当にすごい。尊敬している

自分で書いたパッチと同じ内容が5年前にポストされていたのを見つけて、そちらをマージしたという落ちには笑ったけど、冷静に考えてみると、それはすごい事だぞという感じだった

joker & moris

Hijacking Ruby Syntax in Ruby

息がぴったりの Asakusa.rb の二人の発表を見た

この二人は他の言語にも詳しくて、すぐに「あの言語にあるあれ、Ruby にあれば便利なのにな」とか言って作り始めるし、Ruby の隅から隅まで使って動くところまで実現してしまうのがすごい

この内容でも、まだ中級編らしいので、2019 にどうなってしまうのか、いまから楽しみという感じだ

Piotr さん

TTY – Ruby alchemist’s secret potion

これ、結構すごくて、コマンドラインツールを WEB アプリケーションとかデスクトップアプリケーションみたいなものに見立てて、MVC みたいな考え方をコマンドラインツールに適用したフレームワークを作った、みたいな話だったと記憶してる

バルク転送のプログレスバーを同時に複数本 AA でシェルに表示するデモとか、見応えがあった

そのっつさん

Fast Numerical Computing and Deep Learning in Ruby with Cumo

CUDA を Ruby から使うための Cumo というライブラリを作っている話を聞いた

Numo の 75 倍、速くしましたって言ってて、すごく便利そうだなと思いましたまる

GPU のメモリーを欲しいだけ適宜切り出すための BFC という仕組みを再実装しているとか、そういう話だった気がする。こういう作れば出来そうだったから作ったら出来ましたみたいなやつ、すごい

iwao さん

Exploring Internal Ruby Through C Extensions

Ruby の C Extension を書くためのチュートリアルみたいな内容から、Ruby の内部についての話を聞いた

Ruby の組み込みライブラリとかは良く出来ているので、速度を求めて C 拡張を書いても、大抵太刀打ちできないという話をしていた。振り返ってみると、これが最終日のこくぶんさんの話の落ちの伏線になっていて面白い

LT

だいたい面白かったんだけど、最後に usa さんが赤いツノをつけて出てきて Ruby が毎年死ぬという話をした印象が強烈で、ほぼそれしか覚えてない

2日目

すとうさん

My way with Ruby

すとうさんプロダクトの博覧会という感じの話を聞いていた

必要なものを作り続けていたら、めっちゃたくさんできてた、みたいなの、本当にすごい

すとうさんから生まれる自由ソフトウェアが、確実に社会を豊かにしていて、尊敬する

Kirk さん

It’s Rubies All The Way Down

これ、なんか、ほとんど分からなかった……

ささださん

Guild Prototype

Ruby 3 に提案されている並列処理をサポートする仕組みの話を聞いていた

guild 間のメッセージング、現状の感じだと治安を維持したまま書く自信がない気がする…… 受け取るべきでないものを受け取ったり、してしまいそう……

これで書いたコードをどうやってテストしていけばいいのか、いまいちイメージが湧かなくて困る……

せきさん

extend your own programming language

Ruby で作る Ruby、についての話

この本、一通り写経しただけで、改造とかはしなかったので、わしもなんか変な機能を入れたりして楽しんでみたいなと思った

soutaro さん

Ruby Programming with Type Checking

Steep という型管理のシステムについて

型の scaffold みたいなので型定義をゴソっと作ってくれるんだけど、だいたい any 型な中、`hoge?: boolean` みたいに ? がついてたら boolean をとりあえず候補にしてくれるのがちょっと賢いと思った

udzura さん

コンテナ技術、プロセス制御技術を駆使して、1つのサーバーに何万ものサービスを収容して運用していくための研究についての話を聞いていた

未来のコンピューティング環境について、かなり先を見据えて取り組んでるんだなという感じだった

まめさん

Type Profiler: An analysis to guess type signatures

`1..` みたいな終端を指定しない range を作った話を聞いていた

なるほど、えんどうれすレンジ……

コミッターたち

Ruby Committers vs the World

わいわいしていた。`Object#then` どうなってしまうの……

3日目

Benoit さん

Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby

めっちゃ NES(OptCarrot) を動かしてた

NES が起動してから、数秒間は 10fps くらいしか出てないのに、JIT が効いてくると 200fps くらいまでブーストされて笑った

定数からなる処理をするようなコードがどんどんシンプルになって、最終的に定数になるのがすごかった

ITOYANAGI さん

IRB Reboot: Modernize Implementation and Features

IRB を良くする話を聞いていた

英語の発表だったけど、わしにとっては大変聞き取りやすい英語でよかった(RubyKaigi 2018 で聞いた中で一番聞き取りやすかった)し、導入から本題へのつなぎも最高に面白くて、話すのが異常にうまいなと思った

REPL の中で、文や式が続いてるのか、終わってるのかを判定したり、今、何レベルのネストなのか、というのを知るのは地味に大変というような話だった

ITOYANAGI さんのすごいところは、みんなが「ここのダメな部分は、もう、こういうもんだから仕方ないね」みたいな感じになってるところについて「いやいや、やればいいだけだから」みたいな感じでゴンゴン修正して改良を実現してしまうところで、めっちゃすごいなと思っていつも見てる

こくぶんさん

The Method JIT Compiler for Ruby 2.6

こくぶんさんの JIT への取り組み方、すでに Ruby の中にあるものはあるだけ有効活用しながら、本当にやらないといけないことにだけ注力して結果を出していてすごいなと思う

GC を気にしながら C 実装を追加するより、JIT が効いた Ruby クラスを使う方が速かった、つまり C langage is dead. って落ちは本当に最高だった

Shugo さん

Build your own tools

shugo さんプロダクトの博覧会というような話だった

そして自由ソフトウェア

ようちゃん

How to get the dark power from ISeq

ようちゃんはいつも新しいことにチャレンジしていてすごい

オブジェクトとして組み上げた ISeq を実行するデモ、良く考えるとすごいなと思った

デモが成功した時に最初に拍手したの、わしわし

TRICK

人外魔境という感じの発表会だった

優勝の「予約語だけで書いてエラーにならず、かつなにもしない」みたいな虚無のプログラム、発想がすごすぎて笑った

FINAL とは言ってたけど、もしまたやるなら、エントリーだけでもしたいなという気持ちになった

やんちゃハウス

2017 の広島に引き続き、Airbnb で家を借りて、9 人でシェアして4泊していた。みなさんの予想に反して、毎日 03:00 には就寝していたし、だいたい、全員毎日朝一の講演には間に合っていたようだ

会場からも仙台駅からも遠かったので、居住者以外のお客さんは1名しか来られなかったけど、それはそれでよかったんじゃないかなという気がする

様々な条件が整えば、来年も実施しようかなとは思っているので、気になる人は情報をチェックしてほしい

まとめ

最近 TypeScript を使っていて、型+エディタの機能の良さというのは分かっているつもりだったんだけど、本質的な型の議論について、実のところ全然意味がわかってないんじゃないかと言う気がしているので、ちょっと近いうちに型について語れるくらいになろうという気持ちになった。型について語らないと

カテゴリー: 未分類 | コメントする

ISUCON7 に参加してきた

結論

  • tagomoris さん、joker1007 さんと共に、意気揚々と参加したものの、敗退した
  • モリスさんのレポート -> ISUCON7予選で敗退した – たごもりすメモ
  • joker さんのレポート -> 如何にしてAsakusaから来た面々はISUCON7の予選に敗北したのか – joker1007’s diary
  • yancya がやっていたこと

  • DB のインデックスのチェック
  • 各 SQL の EXPLAIN をチェック
  • MySQL の設定見直し
  • アプリケーション内の N+1 クエリの解消
  • 結局、あんまりコミットできていなくて、N+1 も解消漏れがあったのを最後の方で気づいて着手したものの、書き終わったのは Time up 後だった

    競技中の様子

  • 配られたサーバーへ ssh で接続しに行くときに、全員で一気に繋ぎに行って、何回か認証ミスったら ban されてしまって、めっちゃワタワタしてた。予め GitHub のチーム用リポジトリの Wiki に公開鍵を集めて「最初の接続はシュッとノータイムでやっちゃおうね」って言ってただけに、ここで出鼻をくじかれて手に汗をかき始めた
  • ほぼ初手で「画像を DB に BLOB で入れてんのは無理でしょ」となって、モリスさんが「画像は Nginx でいいかんじに配信するようにするので任せて」といってサッと実現していた(が、この時の作業方法が敗因になるとは、このとき誰も思わなかったのであった)
  • joker さんは「未読管理は RDB じゃなくて Redis でしょうね。任せろ」という感じで未読管理部分の引きはがしをバリバリやっていた
  • わしは一通りインデックスのチェックをしていたけど、結局インデックスが足りなかったのは基本的には2箇所くらいだったので、ぺぺっとインデックスを足したりしていた。そのあと、N+1 クエリを解消する為に「なんでも1SQLでやろうとするマン」をやっていた
  • 敗因

    モリスさんとジョーカーさんの blog の方に詳細に書いてあるけど、アイコンへのリクエストに対して適切に(適切に、とは) 304 を返せなくて回線が詰まってしまったため、ベンチマーカーの負荷レベルが上がりきらなくて、スコアも上がらなかったという事。最終的にスコアは 90,000 〜 110,000 くらいにとどまった

    反省

    手が遅かった

    振り返ってみると、わしがやってたことって遅くとも最初の3〜4時間で終えてないといけないくらいの量だったので、単純に手が遅いなと思った。他のメンバーのコミットで手元の環境が動かなくなってしまったりしてハマったりしてたけど、なんか場がピリピリしてたので気軽に「助けて」と言いづらかったのが結構辛かった

    WEB の事に疎かった

    競技が終わって、他のチームから画像の件について「こういうことだったんだよ」って言われれば「あー」とはなるんだけど、普段、そんなにタイトな WEB サービスを運営していないので、そういうことに自ら気づくという力が本当に無いなと実感した

    やんちゃが足りなかった

    なんかベンチマークを実行するときに「負荷をかけるサーバーを3つの中からいくつでも選択して下さい」って書いてあるのを見て「ということはロードバランサーとかでアクセスするのかな」と思ったんだけど、特に他のメンバーにその話題を振ったりしなかった。なんか忙しそうだったし。結果論でしか無いけど、もしこんな感じの雑談をしていたら「ロードバランサーね、うーん、あー、CDN!?」みたいになったかもしれない

    画像を各サーバーに配るときの話をしていたとき「rsync とかでやるのかな」と思ったんだけど言ってなくて、もし言ってたら「あー、timestamp あー」ってなったかもしれない

    ベンチマークの実行が結構サクサクできて快適だったし、何の用も無いのに適当にバンバン実行して、たまにふざけてサーバーを1つだけ選択してベンチを流してみたりしてみれば良かった。これも結果論だけど、もしも1サーバーだけを対象に実行していたら、画像ファイルが1種類につき1ファイルしかないので、304 をモリモリ返す事が出来て、3台の時よりもスコアが上がったかもしれない。そこで「あー?あー!」って気づけたかもしれなかった

    チームに誘われたとき「普段 Asakusa.rb で一緒だし、慣れたメンバーで作業するのが良いんだよ。だから来て」と言われて参加したのに、実際競技が始まったら、借りてきた猫のようになってしまって「少しでも、わしができる SQL について貢献しよう」みたいな感じで小さくまとまってしまった。6時間経過時点くらいで「ここらで30分くらいビール休憩しようぜー」とか言えれば、何かが変わったかもしれないとか、色々考えてしまう

    思ったことをバンバン口に出していくことが必要だったと、悔やんでも悔やみきれない。これは開発現場に限らず、今までの人生、いろんな局面を振り返ってきて、散々身に染みてきたことのはずだったのに生かせていなくて辛い。「思ったことをバンバン口に出していく」これをさらに心に刻む yancya であった

    しめくくり

    ISUCON 運営の皆様、大変勉強になりました。良い機会をつくって頂き、ありがとうございました

    tagomoris さん、joker1007 さん、大変楽しい会に誘って頂き、ありがとうございました。楽しかったし、勉強になりました

    カテゴリー: 未分類 | コメントする

    大江戸Ruby会議06の早押しクイズのツールを作った

    概要

    大江戸Ruby会議06の「フルタイムコミッター大戦」という企画のために、早押しクイズアプリを作ったという話です。淡々と小学生の日記みたいな感じで綴っていきます

    コードはここにありますので、興味があれば読んでみてください。結構小さく作れました

    経緯

    3/14 の Asakusa.rb のミートアップで、なんかガチャガチャやってる人がいたので、のぞいて見たら、早押しクイズのギミックを作ろうとして苦労してるようでした(コメント欄で Amazon Dash と Action Cable を使って作ろうとしている様子がうかがえる)

    ただ、なんか Dash ボタンは遅延がひどくて(1〜10秒)「こりゃダメだね〜」って感じでした

    スイッチ

    そこで「Dash ボタンもナウいですが、多分、これもまだナウいですね」って感じで、Nintendo Switch を取り出して、まず一時間くらい動作確認をしました

    Nintendo Switch の両側についている着脱可能なコントローラー「Joy-Con」は、それぞれを Bluetooth 接続で PC に Gamepad として接続できるという話を聞いたことがあったので、試してみることにしました

    横にあるペアリングボタンを長押しすると、Mac の bluetooth 管理ウィンドウに Joy-con(R) みたいな名前で出てきたので、あとは「ペアリング」ボタンを押すだけでペアリングできました

    Gamepad API

    Joy-Con を Gamepad として接続できたまでは良いけど、こっから、例えば各ボタンをキーボードのキーに割り当てるアプリとかを使って割り当てた上で、その状態を前提に早押しアプリを作るのは面倒くさそうです

    そこで色々悪あがき的にググって見つけたのが Gamepad APIでした。

    これこそ、まさに「顧客の求めていたもの」という感じの API だと思ったので、早速 Chrome を開いて、コンソールで`navigator.getGamepads()` を叩いてみました。すると、ちゃんと [Gamepad, null, null, null] みたいな Array が返ってきましたので「うおー、すごい。これはいける感」という感じでテンションが上がりました

    requestAnimationFrame で Gamepad API を呼びまくれば、Gamepad として認識してるデバイスのボタンやスティックの状態を取得できるというものなので、Joy-Con に限らず、Gamepad ならなんでも使えます

    誰が作るの

    気がつくと 22:00 を回っていたので「そろそろ帰ります〜」と言って帰ろうとしたんですが、ふと気になって「あの〜、この Joy-Con 使った早押しアプリ、実現できそうなのは分かったけど、誰が作るんですかね」って言ったら「さぁ〜、誰ですかねぇ(チラッチラッ」って感じだったので「あ、はい」という感じでした

    「リポジトリがあるならプッシュしていくんで」って言ったら、秒で「(ガチャガチャガチャ!)作りました!owner にしておきましたよ!」って言われて、すごく早いなと思いました(小並感

    最初の進捗

    帰宅して、早速作り始めましたが、それっぽいものは本当にすぐにできました

    翌日には、ほぼ早押しの形になっているようです

    GitHub ID を入力したらシュッと GitHub アイコンが出てくるようにしたら面白いかなと思って、そういう風にしました

    新たな要件

    他のメンバーと相談していると、ソラシティ(大江戸Ruby会議06の会場)のネットワークの状況があてにならないとのことで、アイコンの取得についてはインターネットを使わなくてもできるようにした方が良さそうということになり、これが最初の issueとなりました

    ローカルの index.html を開いて起動するというコンセプトだったので、色々制約があり、結果的にすごい力技で解決しました

    issue/2

    「ジャストアイディアです」って普通に使ってる人を初めて見て笑いました

    得点の管理は簡単だったのでシュッと出来ました

    音のある世界

    会場のスピーカーにつなぐ事ができそうとのことだったので、SE も追加することにしました

    早速、Garageband を使って適当な SE を作って PR にしてみました

    すると「クイズといえばウルトラクイズですよね〜、ウルトラクイズっぽい音が出たらな〜」みたいなコメントが来て「で〜す〜よ〜ね〜」という感じになりました

    その後の様子です

    結果的には結構近い仕上がりになったと自負しています

    とりあえず、誰かに見せたい

    本番は2日後ですが、当日参加しない人に見せて自慢したくなったので、姫乃たまさんのイベントに行って、そこで飲んでいた人たちに見せびらかそうとしました

    するとどうでしょう。なんと Joy-Con がペアリングできない

    Mac の Bluetooth 管理画面を見ると、大量の Bluetooth デバイスの名前がズラっと並んでいて「あっ、これは多分混線的なやつだ」と思って、ちょっとよけたところでペアリングして、こと無きを得ました

    その場にいた人たちには結構ウケたので、これはいけるぞという気持ちになれました

    そして本番へ

    フルタイムコミッター大戦の直前、嫌な予感がしていた

    しかし尿意が訪れていたので、ピューっとトイレに行ってサッと帰ってきた

    すると、案の定、演台の前でわちゃわちゃしているメンバーたち曰く「ペアリングができない」

    二日前に通った道だわー、かーっ、通ったわー

    慌てず、サッと Mac と Joy-Con を外に持っていって、みんなで一つ一つペアリングして戻ってきました

    そして始まるフルタイムコミッター大戦

    フルタイムコミッター大戦、早押しクイズをやるとしか聞いてなかったけど、どう見ても超次元な早押しクイズになってて死ぬほど楽しかった

    Asakusa.rb

    なんか楽しいイベントがちょくちょく発生して楽しいので、東京の東側の人はもちろん、そうでない人にも、いろんな人に訪れてほしいコミュニティです。Asakusa.rb いいよ Asakusa.rb

    カテゴリー: イベント | コメントする

    Wake on LAN の思い出

    これは、自宅サーバの思い出 Advent Calendar 2016 19 日目の記事

    例によって、使い古した自作デスクトップパソコンに Linux をインストールして、自宅サーバーとして運用していた時期がある

    当時、パソコンは自宅では自作 PC、外では ThinkPad という感じで生活していた

    ThinkPad には PHS を付けて出先でもインターネットに繋がるようにしていたが、出先でも自宅の ADSL 回線と PC を使った作業をしたくなることがあった

    そんな時、役に立ったのは、Wake on LAN という仕組みだった。Wake on LAN は自宅サーバーに SSH で接続して、Wake on LAN スクリプトを実行すると、自宅の LAN 中にマジックパケットがブロードキャストされ、あらかじめ設定を仕込んでおいたデスクトップ PC が起動するというような仕組みだ

    Wake on LAN を知った時はとても感動して、意味もなく出先から何度も起動と終了を繰り返したりしていたものだ

    そして、今思い返すと、出先からデスクトップ PC にリモートデスクトップで接続して、一体どんな作業をしていたのか、全く思い出せない。実は必要なかったのではないか

    という思い出を自宅サーバの思い出 Advent Calendar 2016という企画を見て思い出したが、今の自宅で試してみようとしたところ、「所有パソコンが全て WiFi 接続なので誰も Wake できない」という現実と向き合い、思い出は思い出なんだなという感傷に浸った昨日の誕生日であった

    カテゴリー: パソコン | コメントする

    JAM Akihabara

    この記事はメイド Advent Calendar 2016 の 18 日目の記事です

    実は、わしはメイド喫茶にそんなに詳しくなくて、唯一 JAM Akihabara という店にだけ通っています

    初めて JAM に行ったのはいつだったか、過去の日記を漁っていたら記録が出てきました。ちょうど 12 年前、2004 年 12 月 19 日の 02:30(深夜営業)でした。当時、ThinkPad X31 PHJ を買ったばかりで、意味もなく、外出先でパソコンをいじりたい盛りだったので、ちょうどいいスペースを探していたのでした。そして 12 年経った今も大して変わっておらず、JAM で MacBook Pro をいじっているのでした

    (当時の写真)ThinkPad とリラックマ

    ここから、なぜ 12 年間も JAM に通い続けたのかという理由を延々と書く予定だったんですが、WiFi が使えてパソコンしやすいから、以外の理由があんまり出てこなくて困ってます

    まぁ、メイドが「ニャンコロピー♫(もっと追加注文しろコラ)」みたいな感じで絡んできて作業の邪魔になる、という事が全く無いのがありがたいです。※他のメイド喫茶の悪いイメージを元に書いています

    あ、すごい偶然なんですけど、今日、わしの誕生日です。毎年、みなさまのおかげで生かされております。毎度どうもありがとうございます

    カテゴリー: 未分類 | コメントする

    RubyKaigi 2016 に行ってきたの

    ガーっと RubyKaigi 2016 を振り返っていく

    セッション

    Ruby3 Typing

    「絶対に型を書きたくないでござる」について

    流行に流されず、Ruby らしい型のありかたを模索して、後悔の無いようにしたいという気概を感じた

    dRuby in the last century.

    なんか途中からハンズオンっぽい感じになって、久しぶりに dRuby 触った

    やっぱり dRuby って神がかったソフトウェアだなって再確認した

    Welcome to haconiwa – the (m)Ruby on Container

    英語での発表だったの、凄かった。

    matsumotory さんの事好き過ぎでは

    A proposal of new concurrency model for Ruby 3

    Thread より間違えにくい Guild についての説明

    オブジェクトへのアクセス権をやり取りしながら処理を進めていくみたいなやつ

    Isomorphic web programming in Ruby

    Ruby でサーバーもフロントエンドも書いちゃうぞというやつのライブコーディング

    Vim によるライブコーディング、本当に凄かったので後で聞いてみたら、かなりの練習を要していて、直前まで時間内に収まるように内容を削ったりしていたらしい。

    「電気グルーヴみたいに、ピエール瀧みたいな奴に喋らせれば、ライブコーディング側はコーディングに集中出来るかもね?」って言ったら「じゃあお前がピエール瀧やれ」って言われた

    Unifying Fixnum and Bignum into Integer

    2.4.0-preview1 で試したら、本当に

    1.class #=> Integer

    1.is_a?(Bignum) #=> true

    になってた

    Fearlessly Refactoring Legacy Ruby

    旧実装と新実装の振る舞いを比較しながら、キチンと差異が無いようにリファクタリングしていく術を紹介していて「あっ、あっ」って感じで身が引き締まります感が出た

    How to create bindings 2016

    こちらもライブコーディングという感じに bindings を実際に作ってみて説明するスタイルの講演だった

    「えっ?えっ?」という感じで2行くらいしか書いてない Ruby プログラムが C ライブラリの bindings として動いていて、会場中がザワザワしてた

    Exploring Big Data with rubygems.org Download Data

    BigQuery と聞いて、どんなもんじゃろと思って聴講した

    BigQuery の GitHub open data、そういやそんなのもあったなと思って、打ち上げの LT(後述)のネタに使わせてもらった

    Modern Black Mages Fighting in the Real World

    とにかく、強敵が現れる度に、さらに凶悪な黒魔術を編んでいく活動についての紹介

    「何よりも強い何かが必要」のところでテンションがマックスになったw

    最後には黒魔術を正当化する良い話で締まった

    Optimizing Ruby

    「部分的に 400 倍速くなりました」で、つかみはバッチリ

    ひとまず最適化を施して実行して、最適化が意味なくなるような再定義があったら実行し直せばいいという感じ

    話を聞いていると、まだまだ伸びしろがありそうな気がしてきて、本当に Ruby3×3 に向かっているんだなという感じだった

    Dive into CRuby

    「VC++ 2015 で隠されてしまった構造体、でも必要だから仕方なく機械語を頑張って読んで特定した」的な、昔の鬼女スレの人達みたいな事を言ってて怖かった

    pid2line.rb っていうツールが、なんか凄そうだから凄そうって感じだったけど、後から解説してくれているブログを読んで、多少分かった。

    すでに実行してしまっているプログラムの状態を調べられるとか、夢みたいに便利で凄い

    できごと

    アフターパーティーで LT やった

    応募者多数、会場の撤収時刻厳守、日本語分からない人多数、という状況につき「日本語での LT は後回し&3分間でよろw」という条件になってしまった

    超早回しで発表したものの、何人かは楽しんでくれたみたいなので良かった

    発表資料はこちら

    川の治安問題

    アフターパーティーの後「いつものメンバーで2次会行っても、せっかく京都まで来た甲斐が無いよな」と思って、1度離脱して面白そうな集まりが発生するのを待ってた

    祇園の辺りをパトロールしながら Twitter を見ていたら、面白そうなオーラを放つツイートを発見したのでいt(日記はここで途切れている)

    とにかく酷かった

    ふりかえり

    色んな人と話をしたり、LT 準備を通じてコードやテキストをゴリゴリ書いたり、まぁ充実した5日間だった。

    細かい事だけど、毎晩色んな人と飲み歩くのは良いとして、翌朝以降に誰かと会ったときに「昨晩誰と飲んで何時に帰った」みたいな話ばかりするのは時間がもったいないのでやめたい。だって、カンファレンスのときに毎晩飲み歩くのは当たり前なので「実は風呂入って歯みがきして寝たんですよw」って言ってるようなもんでしょ

    カテゴリー: 未分類 | コメントする

    yancya の糖質制限日記

    この日記は糖質制限 Advent Calendar 2015の18日目の記事です

    最初にしくじった話

    夏頃、思い立って炭水化物を全く取らないってのをやってみた

    どんどん体調が悪くなって、ふらふらして倒れそうになって、命の危険を感じた

    結局このあと、滅茶苦茶暴飲暴食した

    というわけでいきなり無計画に無理な感じではじめると危なそうという事がわかった

    あとから成功した話

    とりあえず、無理なくやるにはどうしたら良いか、かみさんが考えて下記のような運用をしてくれた

    (1)朝食は普通に食べる

    (2)昼食(お弁当)はご飯を半分にする

    (3)夕飯は白米抜き

    これは結構功を奏して、腹回りの脂肪がモリモリ減っていって、11 月の健康診断では腹囲はメタボ域を外れ、BMI も 22 になった

    ただ、これには毎日退勤の後に虎ノ門から秋葉原まで5kmのウォーキングをしていた効果も大きいと思われる

    油断してリバウンドした話

    健康診断が終わった後、調子に乗ってラーメンとかスイーツとか食べまくってしまって今にいたる(3kg 増)

    「食欲の秋」とか言って自制心が無くなると、ろくなことにならない

    まとめ

    警察の指導に従って、極力糖質を抜きつつ、チートデイで対応するというのを一度やってみないと「糖質制限やったことある」とは言えない気がしてきた

    わしのやってたのは糖質制限ではなかったのではないだろうか

    以上

    12 月 18 日

    今日はわしの誕生日なんですが、毎年「ウィッシュリストに入れてるからには読めよ」などと言いながら難しい本を送りつけて下さる方が続出しております。ほんと勘弁して欲しいですね

    カテゴリー: 未分類 | コメントする