見出し画像

[Ruby]モールス信号学習支援Gem作成した話と、とある文字列でビープ音鳴らす話

おはようございます。こんにちは。こんばんは。おやすみなさい。
CAMPFIRE エンジニアのOguressiveです。

CAMPFIRE Advent Calendar 2024 の 19 日目のエントリーです。

今回は表題の通り、モールス信号を簡易的に学べるGemを作った話と、とある文字列でビープ音を鳴らす話について記載いたします。

先日2024年12月12日に参加した地域RubyコミュニティOmotesando.rb × Roppongi.rbのイベントの懇親会LTでお話しした内容と同じになります。

SpeakerDeckにもスライドは下記の通りアップしておりますので、サクッと読まれたい方はこちらを参考にいただければと思います。


とある文字列でビープ音鳴らす話

Rubyを改めて見直していた際に面白い文字列に出会いました。
その文字列とは "\a" です。
aはアラートの略のようでして、
ターミナルでirbなどを開き puts "\a" と打つと、ビープ音が鳴ります。

なぜビープ音が鳴るのか調べてみると、、Rubyのparse.yファイルで
"a"が \007 と 8進数に変換されており、ASCIIの7番を意味していました。

case 'a':	/* alarm(bell) */
  return '\007';

https://github.com/ruby/ruby/blob/master/parse.y#L8124-L8125

ASCIIの7番は何を表すのでしょうか。

出典:https://so-zou.jp/software/tech/programming/tech/character-code/ascii-code.htm

Control CharactersのBELへ変換されています。また、エスケープシーケンスは \a となっています。
つまり、そもそもASCIIの7番はアラートを出力するために割り当てられた番号のようです。

他の言語でも同じ現象が起きそうなので、
試しにpythonでも print("\a") と打ってみました。ビープ音鳴りました。

新鮮で面白かったので、何回も鳴らしてみることにしました。

気づき

スクリプトで337拍子を鳴らしていた際に気づきました。

「モールス信号みたいだな、、」と。

でも私はモールス信号についてコナン君が使っているところしかみたことありません。

早速Youtubeで探してみました。

かっこいいですね。。。

ふと学んでみたくなったので、サクッとWebで調べてみました。
モールス信号とは何か、文字と符号の関係に関する記述などたくさん情報を得られました。
ただ、調べた時は検索力が乏しかったためか、
学びつつ簡単に試しながら勉強できるいいツールがその時はすぐに見つけられませんでした。(おそらくあると思います)

そこでせっかくなので、モールス信号を学習して音声再生などもできるものをRubyのgemで作ってみることにしました。

モールス信号学習支援Gem"Morsby"を作成してみました

モールスとrubyをかけて、Morsby というgemを作ってみました。
LTでも発表したものなのですが、実はLT参加を決めたのが3日前でして、それからLTのネタ探しを始め、仕事終わりで開発した部分もありかなり簡易的に作られております。

ただ、取り急ぎ自分がそこそこ学習できるくらいのものは作れました。

gemの概要

Morsbyは、モールス信号の学習・活用を支援するツールです。 英字(A-Z)、数字(0-9)、記号(?)、Q符号、CW略語、和文モールスまで対応。

学習モードで基礎を固めたり、クイズで理解度を確認したり、文字列を即座にモールス信号へ変換したりできます。 また、英語表示(--lang en)や、プロモード(--pro)による高速再生にも対応しています。

gemの使い方

`morsby -learn` : 学習モード
基礎、Q符号、CW略号、ランダムクイズ(符号=>文字、音声=>文字)
`morsby "xxxx"` : モールス信号を音声出力するモード(文字列→音声)
`morsby "xxxx" -- pro` : 高速再生用のオプション
`morsby -learn -- lang en` : 英語対応用のオプション

使用例

morsby "Rubyist"
morsby --pro "HELLO RUBYIST"
morsby -learn
morsby -learn --lang en
morsby -learn --pro
morsby -learn --pro --lang en

せっかくなので皆さんにいくつかご紹介いたします。

前提:モールス信号では、短音と長音を組み合わせて一つの文字として出力します。ツー・トン や トン・トン・トン のような形です。表現できる文字としては、アルファベット、数字、記号、和文など様々です。アルファベットを組み合わせて略号を示すこともあります。(例:OM・・・Old Manの略で男性オペレーターに親しみを込めて言葉)

...    ---    ...   => ???

--.    --    .-.    ..-    -...    -.--    ..    …    -   => ???

いかがでしょうか???

…(ただの点です)

…(ただの点です)

…(ただの点です)


正解

1つ目は、、SOSです!
トン・トン・トン ツー・ツー・ツー トン・トン・トン と単調に表せるのでこちらは覚えやすいですね!

2つ目は、、GM RUBYISTになります。
GMはGoodmorningの略号でして、RUBYISTはプログラミング言語Rubyを愛用する方達のことです。「おはよう!Rubyist!」ということです。

クイズはこれで終わりになりますが、実に面白かったですね!!!

先ほどご紹介させていただいたYoutubeのような「モールス信号での交信」、、いつかやってみたいなと思っています。
そのためにはアマチュア無線技士など取らないといけないようですが、、

今回のエントリーは以上になります。

長文駄文お読みいただきありがとうございました!

CAMPFIREはエンジニアを募集中です!

気になる方は下記もぜひチェックしてみてください!

▼カジュアル面談のご案内
CAMPFIREは、これから更に社会に影響を及ぼす大きな変化を起こそうとしています。想像を超える大きな挑戦をしたい方、仕事を通してワクワクしたい方をお待ちしております。まずは採用ページやカジュアル面談を通してCAMPFIREの今を深く知り、ご興味おもちいただけると嬉しいです。

▼採用ページはこちら

▼カジュアル面談はこちら

#CAMPFIRE
#キャンプファイヤー
#CAMPFIRE Advent Calendar 2024


いいなと思ったら応援しよう!