法林浩之@jusがお届け!
UNIXエンジニア温故知新UNIXが生まれてから半世紀。脈々とソフトウエアの進化を支えてきた技術は、どのようにして今に至るのか? そこから学べるものとは? 日本UNIXユーザ会「jus」の法林浩之さんが、イベントレポートを中心に「UNIXの今」をお届けします!
法林浩之@jusがお届け!
UNIXエンジニア温故知新UNIXが生まれてから半世紀。脈々とソフトウエアの進化を支えてきた技術は、どのようにして今に至るのか? そこから学べるものとは? 日本UNIXユーザ会「jus」の法林浩之さんが、イベントレポートを中心に「UNIXの今」をお届けします!
今回は、2021年12月に行った「第57回シェル芸勉強会」の模様をお伝えします。
レポートはシェル芸勉強会を主宰している千葉工業大学の上田隆一さんに書いていただきました。
編集注:シェル芸とは
主にUNIX系オペレーティングシステムにおいて「マウスも使わず、ソースコードも残さず、GUIツールを立ち上げる間もなく、あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらせること」
シェル芸勉強会は午前の部があったりなかったりするのですが、今回から何回かは、鳥海さん(@hid_tori)による、「構造化プログラミング入門」が開講することになりました。
今回の第一回は「間違いだらけの構造化プログラミング」というテーマでした。
内容は、「いかに『構造化プログラミング』という言葉が『構造化定理』と(意図的に)混同されておかしなことになっていったか」という話。
そのあと、その混乱の中で一方的に悪者とされたgotoについて、実際に使ってみる実習がありました。
内容は、状態遷移図で描かれたロジックをコードにするというもので、私を含め参加者はC言語や、(gotoの存在する)好きな言語でコードを書いてみました。
Cだとこんな感じ? #シェル芸 pic.twitter.com/zsknRS4tZf
— 上田 隆一 (@ryuichiueda) December 30, 2021
※図: 状態遷移をgotoで実装(バグあり)
その後鳥海さんが、次の2例:
* 整理してgotoのラベルを除去することで可読性が損なわれないという例、
* 処理する順番を無視して機械的に除去する例を示し、
を示し、構造化プログラミングが単純なhoto排斥運動ではないのに、それが曲解されていったという話がありました。
後藤が消された #シェル芸 pic.twitter.com/qR02FOi23H
— ぐれさん (@grethlen) December 30, 2021
参加者からはDiscord経由で、「そもそも状態の概念すら分かってないのに『gotoが〜』とか言う連中がいる」という愚痴のようなコメントがありました(実は言ったのは私ですが)。
また、Twitterでは各自の解釈や、勉強になったというお礼コメントが寄せられました。
そのときの様子は動画かTwitterのまとめをご覧ください。
鳥海さんありがとうございました。次回もお願いいたします。
午後も前回同様YouTubeのライブ配信を使い、リモートで開催しました。
今回出題した問題は、文字に関するものが4問、システムに関するものが2問、数学に関するものが2問でした。文字に関するものを1問取り上げて再掲します。
Q1. 次のファイルから今の元号の数を数えてください。
$ cat reiwa
令和昭和令和大正令和明治大正享保
(略)
令和安政安永弘化慶応令和令和令和
令和平成平成明治宝暦元和正保慶安
これは一見`grep -o 令和 | wc -l`(GNUの`grep`、`wc`の場合)でいいんじゃないかという簡単な問題です。しかし実は、全く同じ「令」に、
bash
$ echo -n 令令 | uniname
character byte UTF-32 encoded as glyph name
0 0 004EE4 E4 BB A4 令 CJK character Nelson 360
1 3 00F9A8 EF A6 A8 令 CJK COMPATIBILITY IDEOGRAPH-F9A8
というように、U+4EE4とU+F9A8という2つの番号が割当たっており、単純に「令和」を検索しても、一方(大抵はU+F9A8の方)が検索から漏れるように罠をしかけました。
当然、オンライン上では最初「数が合わない」と騒ぎになったわけですが、すぐに解析されて答えが出ました。
この問題、非常に細かいことを扱った問題でしたが、文字コードが原因で深刻なバグを生むかもしれないという意味で、取り上げてみました。システムで発生すると怖いですね……。
シェル芸の場合でも、即興であるが故に間違いを起こしやすいので、重要なデータを集計している場合は検算が必須です。
他、文字の問題については、旧字体と新字体の変換、中国語の繁体字、簡体字関係のものを出題しました。
私の解答は`kakasi`コマンドやLinuxの`/usr/share/unicode`内のファイルを使うものを準備していきましたが、参加者からは`trans`や`opencc`、Rubyのgemなどの利用する解答が挙がり、こちらも勉強になりました。
午後の部のあとのLT(long talk)大会では、まずたいちょーさん(@xztaityozx_001)から、「ナーベンシュタイン距離〜グラフを添えて〜」という発表がありました。
「辺」の異体字について、互いのレーベンシュタイン距離(ナーベンシュタイン距離と命名)を定義してシェル芸で算出し、互いの関係をグラフで表すという、相変わらずぶっ飛んでいる内容でした。
閉路が消えて整然としたくちなべの最小全域木。#シェル芸 pic.twitter.com/mjkaYs3Kqz
— 上田 隆一 (@ryuichiueda) December 30, 2021
次に、@sickleaf3さんから、「ひとりで『○○するシェル芸ちゃん』というアドベントカレンダーを完成させた」という、これまた非常に手間のかかったLTがありました。
内容は、「○○する芸能ちゃん」というYouTubeのチャンネルで出題されるクイズを25日分、シェル芸で解いてみたのを紹介するというものでした。
最後には、自分で解決できなかった問題について逆に質問があり、シェル芸勉強会が始まりました。Discord、Twitterからは、4つほど解答がありました。
前回から、配信のテストのために、常連の人に1時間前から集まって雑談をしていただいているんですが、今回は、勉強会の少し前にこんな怪文書sudo新一.mdをバズらせていた@grethlenさんが、マイクテストのために、この怪文章を朗読してくれました。
次回もネタのある方はぜひよろしくお願い致します。
それから、シェル芸勉強会界隈で集まって書いた書籍、「シェル・ワンライナー160本ノック」も、よろしくお願いします!
法林浩之さん(@hourin)
大阪大学大学院修士課程修了後、1992年、ソニーに入社。社内ネットワークの管理などを担当。同時に、日本UNIX ユーザ会の中心メンバーとして勉強会・イベントの運営に携わった。ソニー退社後、インターネット総合研究所を経て、2008年に独立。現在は、フリーランスエンジニアとしての活動と並行して、多彩なITイベントの企画・運営も行っている
NEW!
タグ