UDPを受け入れる

開発:それでUDPを使った高速データ転送の件ですが。

社長:あれについては我社はかなり本気モードです。

基盤:公開されてるサーバへのアップロードはまだ良いとして、ダウンロードのために自分ちの玄関に穴を開けとくのは嫌ですね。

開発:そもそも受信してから、これは妙なところから来たパケットだなとかアプリケーション層で判定するのも今ひとつ。

基盤:DOS攻撃とかやられたら嫌ですね。

開発:なので、ルータレベルで、オンデマンドに特定のソースアドレスからだけを通すようにしたい。データ転送を始める前に、指定したアドレスからのUDPだけを受け取るように設定して、受信が完了したら速攻で閉じる。

基盤:iptablesをいじれば一瞬でしょうね。

社長:うちにあるルータですと、設定を変えると90秒間リブートでネットから遮断されます。

一同:(笑)

基盤:UnixでやればOSのルータ機能で簡単にできるわけです。性能的にも50MB/sの単純中継ならラズパイで足りるかもと。

開発:でもネットの口は2つ必要なんじゃないですか?

基盤:いえ、たとえばUDPは全開にして、全部ラズパイに投げる、で良いかと。

社長:開発のしやすさから言うと、ふつうにiMacでやればいいんじゃないですかね。

基盤:現状、あのへっぽこルータが生活線をささえてますから、できれば実験は別の回線にしたいですね。もうひとつ、プロバイダと契約するんですかね?

開発:今入っているV6プラスというやつ、使えるポート番号がトビトビのスカスカなのもなんですね。

基盤:4096ポートごとに15ポートですね。要するにIPマスカレードと言うかNAPTをやってるんですかね?

社長:ライトセールがV6使えないらしいのは痛いですね。ひとつくらいEC2を入れてもいいのかなと。

基盤:EC2は無料使用キャンペーンばりばりですしねw

開発:クラウドのファイアウォールではねた場合には通信料金は免除してくれそうな気もするんですよね。VMまで到達してから拒否した場合にはおそらく、課金されてしまう。

基盤:まあ、ファイアウォールの設定はブラウザでやっているわけで、HTTPのメッセージの仕様がわかれば自動でできますね。ただ、ライトセールでも数秒はかかってしまいますが。

開発:管理者の認証もしないといけないから、ブラウザで認証を通して、あとはそのブラウザに対してメッセージで指令するって感じですかね。

社長:そういえば、ブラウザ改造祭りやってたのもずいぶん昔のような気がします。

開発:まあ結局、ブラウザよりシェルのほうが断然面白いです。なにせゼロから好きなように作れますし、実装は簡単だし。

基盤:ブラウザも、Goのパッケージレベルに部品化して、shellで組み合わせればいいんじゃないですかね。

社長:うちはだいたい3日間の短期スプリントで切り替えてきましたが、GShellは1週間になりますね。

開発:ブラウザに対してちょっかいかけたり、その他もろもろ当社のインフラやアプリを統括するのもこのシェルになると思います。

社長:ついに出発点に立てた感じはしています。

-- 2020-0811 SatoxITS

続々々々GShell

社長:帰りました(;゚∀゚;)ハァハァ

基盤:ただいま社内室温34.9度に達しております(;゚∀゚;)ハァハァ

開発;まあでも、扇風機の風が当たってればなんてことはないですけどね。神様がくれた気化熱に感謝です。

社長:外はもう日差しといい何といい、違う惑星に来てしまったかのようでした。

基盤:普通にあづまのゥエルシァですけどね。

開発:空気の温度を写真にとらえるのは難しいですね。

社長:それで今日はかき氷を買ってきましたよ。やわらか赤城しぐれ「いちご」じゃ~ん。

開発:すでにかなり柔らかくなってますね。食べごろと言いますか。しゃぐ。

基盤:みるみる間に解けていきますね。しゃぶ。

社長:既にかき氷を飲んでる状態になりました。じゅるじゅる…。

基盤:ただいま室温35.0度に達しました。

社長:思うに、身体の内側から冷やすのが、最も効率的なんではないかと思うのです。これ以上直接的な方法はないですよね。

開発:扇風機で気化熱方式は良いと思いますが、汗をかかないといけないので、それはそれで気持ちは良くない。なら、シャツの外側に水を垂らして蒸散させるようなやつがあると良いかと。

基盤:単にミストでも良いような。ベランダに。

社長:いや以前住んでたとこで、日光直射のベランダにある室外機が加熱しすぎて動かなくなった時、ガーデニング用のシャワーを霧状にして当てたら効果がありました。今の状況はかなり違いますが、やってみると面白そうです。今日ボーリングの試合に行くついでにホーマックで探してきます。

開発:やりすぎてお隣さんに迷惑がかからないようにしないと。

* * *

基盤:それで、先日8/2の脱エアコン声明の際に見てた気象庁のページで、この一ヶ月のデータをダウンロードしたらこういうことになってました。

開発:やはり30度を超えると世界が変わりますね。

社長:気温が下がらないので建物が冷却しないというのも問題じゃないですかね。

開発:やはり建物全体に地下水を循環させる計画ですね。

社長:ついでにミストも出しちゃう。

基盤:どっちにしろ入居率100%だから、いまいち工夫するモチベーションが無いかもですが。それで、最高だけじゃなくて最低と平均もグラフにするとこうなります。

開発:なるほど、さがるのはちゃんと下がってるんですね。

社長:確かに、朝はちゃんと涼しい感じがします。

基盤:といいますか、舘野?だかどこかの観測所の値ではなくて、当社のこの部屋の室温の変動を知る必要があります。

開発:そだね。ラズパイでやろうという計画でした。

経理:買い置きのカップ麺の蓋がみなさんぶっくりとしているのが気になります。

開発:パスカルの原理ですね。

社長:それだけ気密性が高いってことじゃないですかね。

基盤:だけど、中と外が同じ温度なら、ふくらむのは変じゃないですか?

社長:まだ賞味期限内ですし…

開発:なんでミリバールじゃなきゃいけないのかがどうも。ヘクトなんて単位よりミリのほうが正統ですよね。デシリットルだのCCだのって撲滅したくせに。

* * *

開発:さて、GShell のほうですが、たぶんリスナーを設定してやれば、やりたいことように出来ます。

社長:単にTCPのacceptまでは自分でやって、そっから先をhttpパッケージに投げるって感じにできないんですかね。ソケットを渡すとか。

開発:そうですよね。まあ、並列性の管理とかもhttpパッケージでやりたいんじゃないですかね。

社長:というか、単に自分でacceptして、リクエストのヘッダを解釈して、応答を書き出して閉じる。それだけですからね。われわれのような用途にはそれで十分です。流石にGoみたいに6行じゃ書けないですが、50行で十分に書けますよ。

開発:それはそうと、まずHTTP から受け取った文字列を、端末から受け取った文字列と同じように実行してみます。こんな感じ。

基盤:普通に実行できますね。

開発:まあ、system()関数実行しているのと大して変わらないですからね。で、問題はHTTPですし、それぞれのリクエストは単発で他とはコンテクストを共有していなということです。順序も無い。

社長:複数のユーザが並列に使う場合にはセッション管理が必須ですね。

開発:まあ、そういう使い方をするようになりましたら。各人が実際に、ttyからログインしたのと同じ状態をもたせるんでしょうね。

基盤:ユーザ側とTCPが物理的に切れてもGShellはログイン継続状態で残っているので便利ですね。永久不滅のログインみたいな。

社長:コマンドヒストリがすごいことになりそうです。

開発:CLI版の仮想マシンとして生き続けるshellは面白いと思います。

開発:それでちょっとおもしろかったのは、Chromeからやった時に、URLのバーからリクエスト文字列を入れるわけですが、途中まで入れたところで勝手にリクエストとして出したりするということです。大変よろしく無いと思います。

社長:GoにはTelnetサーバパッケージとかないんですかね?

基盤:標準のパッケージには無いですね。FTPもNFSサーバも。

開発:そのへんは、うちでufs3をGo化するとかして提供する道もありますよね。

* * *

開発:それで、HTTPサーバに制御をとられてはこまるので、これを別の並列タスクにしたいわけです。

社長:GoのスレッドってGoルーチンてやつですか。

基盤:御社の御ルーチンとか。

開発:で、どうするのかと思ったら単に、関数を呼び出す時に go というキーワードを前置きするだけで良いようです。なので早速 go という内部コマンドを足しました。

基盤:楽ちん!

社長:go を実行する前に %T を解釈してしまってますね。

開発:おっと、では%%Tではどうかな?あれ、あそうか、go と sleep と echo の3段階に解釈されるから %%%%Tでないといけない。これでどうでしょう?

基盤:正解。

社長:うーん、バックスラッシュとか%とか、何段階か解釈ムキムキされると、わけがわからなくなりますよね。なんかうまい方法は無いですかね。

開発:まあこの場合は、echo コマンド実行する時にだけ解釈しろよという指示が与えられれば、%T だけで良いはずですね。つまり、将来的に実行するコマンドについては、起動時点とか途中段階では解釈をしないとか。

社長:見た目ダサいかもですが、go { sleep 10 { echo %T } } みたいに明示的に書いたほうが良いのかも。

基盤:というか普通の感覚なら、逐次的に実行するのは go { sleep 10; echo %T } ってしますよね。

開発:いやあ、セミコロンは何かのために温存したいなという気がするんですが。だから go {{sleep 10}{`echo %T}} とか。

社長:すべてカッコだけで済ませてる言語はありますよね(^-^)。たしか閉じカッコを省略する記法がありました。例えばインタラクティブモードの時には行末で全てカッコが閉じたことにするとか。go { sleep 10 { echo %T 改行、で済ませちゃう。

開発:そもそもが、全てのコマンドが find の −exec オプション的なものを持ってたら面白いかなと思いまして。実行した結果とか環境を次のコマンドに渡すのがデフォルトと言うか。

社長:なんかすごい昔に「次に実行するコマンド」みたいな属性を見た記憶があります。まあ、環境を引き継ぐものかどうかは知りませんが。要は順次 exec() して行くみたいな。テールリカージョン的なやつ。

開発:それって、shell的なものがない時代の話じゃないですかね。とか、OSが無くて次々にオーバレイしてくみたいな。

* * *

社長:さてさてそれでは、かき氷と一緒に買ってきたメロンシャビーwをいただきますかね。

経理:結局冷蔵庫を復活させたんですね。

社長:やはり文明の利器。せいぜい月30kWhでしょう。どれどれ。ぱかっ

一同:・・・

基盤:水になってますね。

社長:冷凍庫って機能するまでに時間がかかるんですね・・・

開発:精神的ショックのせいか、変な汗が出てきました。

基盤:ああ、扇風機止まってます。

開発:なんでですかね。切タイマーとか設定してないのに・・・

基盤:全力で7Wしか食わないのにそのうえ自動で勝手に切れるとか意味がわからないですね。省電力アピールなんでしょうか?わたしはあの、洗濯機槽内照明のLEDが10秒で勝手に切れるのが非常にムカつきます。

* * *

社長:ただいま。

基盤:今日はずいぶん早く試合が終わったんですね。

社長:いえ、お盆期間で試合が休みでした。そういえば先週そんな場内アナウンスをしていたような。祝祭日と年末年始とお盆は試合は試合が休みというルールなんです。20年前の開店時から。

開発:まあ、うちは曜日とか祝日とか関係ないから忘れちゃいますよね。

基盤:夏休みだから一般客で混んでるんでしょうね。

社長:まったくガラガラでした。コロナもありますしね。まあ、昔決めたルールが意味無くなってるのに惰性というか見直す事もなく機動性も無いんでしょうね。経営者が現場を認識してないんだと思います。

開発:試合に出る人がその時期休みたいのを考慮してるのかもですが。

社長:それで、久しぶりにカスミに寄って果物を仕入れてきました。待望のスイカです。じゃーん。

基盤:おお!スイカだ。1年ぶり?

開発:やはりスーパーは入り口にある果物売り場が花ですね。ドラッグストアには真似できない。

社長:だもんで、わくわくしてスイカ、桃、プラム、メロン、パイナップル、ぶどう、トマト、とうもろこし、全部仕入れてきました。

基盤:スイカ最高ですね。あま〜い。シャグシャグ。

社長:売れ残りの値引き品ですから、熟成してるかもです。シャグ。ん、あま〜い。

開発:冷蔵庫を復活させておいてよかったですね。ぷっ。

基盤:やはり果物のある生活っていいですね。人間性回復みたいな。

社長:フルーツフルってなもんです。

開発:まあ、続けてるとすぐに当たり前になっちゃうんでしょうけどね。

-- 2020-0811 SatoxITS