コミケ告知

サークル活動の詳細は circle タグの記事へ。
2015年5月22日金曜日

通信のBack pressureを「背圧」とする誤訳をやめよう

ここ半年ほど、ネットワーク系の記事やスライド等において、英語のback pressure背圧と訳すケースをいくつか見かけています。それは誤訳であるということの主張をしつつ、そのついでに経緯も追ってみます。

日本語の「背圧」

参考: 背圧 - Wikipedia

Google検索でも、現時点ではこの意味で使用されたものがリストアップされます。技術系の日本語Wikipedia記事は、大半が劣化翻訳で使い物になりませんが、この背圧の記事は詳細度はともかく、何を指しているかは正しいように見えます。

日本語の「背圧」は、物理学的な意味での圧力を指すものとして、長い間使われてきました。

英語の「Back Pressure」

参考: Back pressure - Wikipedia, the free encyclopedia

エンジン関係の用法の他に、情報工学における用法(Back pressure in information technology)も記載されています。この部分が追記されたのは2011年のようです。ネットワークスイッチでバッファ溢れを防ぐ方式である、程度の簡潔な記述です。

元来のBack Pressure

Ethernetで半二重(half-duplex)通信を行う際に使われた制御方式が由来です。Ethernetなんて前世紀からありますから、もちろん日本で使われてないわけがありません。ではこの用法はどこへ行ったのかというと…
カタカナに訳されました。経緯や当時の是非はともかく、今や「バックプレッシャー」は広く定着しています。

英語のBack Pressureの変化

さきのWikipedia(en)の説明では、日本語のバックプレッシャー説明記事にあるような、半二重方式に限定した話は記載されていません。受信側が送信制御を行う方式全般のことを指しているような説明です。

英語圏かつはるかに昔の話であるので、当初はどういう意味あいだったのか、すぐに調べることはできません。軽く検索してみると、2000年発行のComputer Networks Super Reviewという書籍が引っかかり、ここでは半二重のFlow Control方式であるback pressureと、全二重で同等のことを実現するPAUSEフレームは別物として説明されています。Flow Controlという概念の中に、back pressureとIEEE802..3xのPAUSEフレームがある、という感じです。

しかしこれがいつのまにか、Back puressure=受信側が送信制御を行う方式全般 を指すように変化していったようです。
  • (2011) IBM Converged Switch B32
    • "the Pause mechanism does not have the ability to selectively back pressure data sources (中略) so it is disruptive to all traffic on the link"
    • 適当訳:Pause方式は、データを選別してback pressureをかけることはできないので、リンク上の全トラフィックが影響を受けます
    • 参考:Google Bookによる該当部分の表示
  • (2011)(PDF) Flow Control and Network Performance - Dell technical paper
    • "Ingress back pressure enables per switch management of an oversubscribed port through the use of PAUSE flow control at the source port"
    • 適当訳: 入力ポートのback pressure機能は、PAUSE方式のflow controlを使うことで、入力側の合計帯域の方が大きいポートのマネジメントを可能にします

最近のBack Pressure

多少拡大解釈されることがあったとはいえ、ネットワーク下層というニッチ分野で細々と使われているback pressureでしたが、昨今急に目にする機会が増えました。これは、無限長のコレクションとして扱われるStreamの普及によるものと思われます。
特にネットワーク越しに扱う場合において、ネットワークスイッチと同様に「処理能力<入力量」となると溢れて死んでしまう問題が出てきて、対処としても同様に送信側の制御を行う必要が出てきました。そこで、用語も同様にback pressureとなるのは自然なことです。

最後の記事、"Yes, I know that "backpressure" isn't a proper word." とあるので、いつのまにかこの言葉は拡大解釈されてる!という意見・議論はあったのでしょう。しかしとにかく、stream周りでback pressureが、受信側から後方(=送信側)に流量制御のための信号を送信する制御全般を指す用語として、用いられつつあります。
(余談: Reactive Streamは、Reactiveという語の使い方についても物議をかもしていたような…)


日本では…

インターネット上の用語は、今検索しても、ほとんどが半二重を指すものです。上位にマイクロソフトの文章(原文は英語)があったり、最初に紹介した圧力系のback pressureを指すものもあります。
ただ、インターネットの用語辞典はたいして更新されなくても、現場での「バックプレッシャー」の使い方は、英語での用途に近い使い方もあったように思いますが、既にそっちの前線(前職)を離れて4年も経つと記憶が定かではありません…

本題

情報工学系のback pressureを邦訳ではどうすべきか。これは、多少の差異はあるものの、カタカナでバックプレッシャーとすべきです。
若干元来の解釈と異なりますが、醤油ラーメンと味噌ラーメンくらいの違いであり、全く違う分野で使われている背圧という用語を充てるよりは適切でしょう。違和感は感じるかもしれませんが、通信界隈の人間であれば、使われているシチュエーションから「Flow Controlかな?」と想像することは容易です。
逆に日本語の「背圧」の方は、別の意味を指している日本語に対して新しい意味を被せるわけですから、混乱を生みます。検索しても意味が出てこないので、「このモジュールは背圧制御を行います」などと言われて調べた人が困ってしまいます。


似たような例を以前、とある邦訳書で見た事があります。



ガベージコレクション(GC)をゴミ集めとしても、英単語として一切の誤りはありませんが、どう思いますか?back pressureから背圧に訳すのは、これと同じではないでしょうか。

(余談2: この本を見るまでは、オ○イリーは高品質な技術書を出す信頼性の高い出版社だと信じていました)
2015年4月16日木曜日

IntelliJをインストールしたら最優先ですべきたった1つのこと

フォントを変えるとかホワイトスペースの設定をするとかは、Intellijでなくともテキストエディタ系であれば必ずすることであって…最重要なのは、

  • Ctrl+Yのショートカットを潰すこと

なんと、Ctrl+YがRedoではないだけでなく、「一行消す」という恐ろしい機能に割り振られているのです…!今後どうなるのかわかりませんが、現在の14.x系ではそうなっています。これはつらい。




確かにRedoがCtrl+Shift+Zな操作系はあるけれども、Ctrl+Yに対してこういう潰し方をするのは、若干悪意を感じます。
2015年4月15日水曜日

fluentdで出力tagを書き換えるのに苦労した話

とても久しぶりにfluentdを使ってみることにしました。目的は、ローカルで集めたものをinfluxdbに飛ばすこと。後々はキューを挟むかもしれないけど、とりあえずは直接。あとは、ついでにCPUやらメモリやらの情報も飛ばそうと。既に実現例のたくさんある話の合わせ技です。


flutendが各ノードで扱うデータの流れは、大まかに2種類。
  • アプリの統計情報→fluentd→influxdb
  • dstat→fluentd(→dstat情報の整形)→influxdb
influxdbへの出力は、fluent-plugin-influxdb
dstatからの入力は、fluent-plugin-dstat

dstatの入力を、influxdbに流すために整形(というより要素ごとに分解)する必要がありますが、やることはそれくらいのはずです。

タグの整形をどうすべきか

さて、しかしその整形を気に入った形にしようとしたら、妙に時間を取られてしまいました。プラグインで自由に拡張できるfluentdであり、選択肢はすぐにいくつも見つかったのですが…
書き換えたらそこで仕事を終了して、またmatchの方に回すものが大半です。プリミティブな処理をチェーンしていく思想はわかりますが、今回やらなければならないのはそうではなく。
influxdbに出したいものは influx.* というタグで整理して <match influx> でひっかけて、この中にinfluxdbプラグインの設定を書いています。このinfluxdbプラグイン、タグ名がそのままinfluxdbのseriesとして使われるため、influx.dstat.node1.memory みたいな名前になってしまいます。influxdbに入れるデータにinfluxって付けたくないじゃろ…

結局、これを fluent-plugin-forest で実現しました。

ただ remove_prefix したいだけなのに大袈裟な気がします。何かもっといい方法はあるんでしょうか?
2015年4月8日水曜日

mvしてln -sするシェル関数を用意した

ファイルを移動して、移動先から元の位置にシンボリックリンクを張りたい。そんな場面がたまにあります。ぴったり合う物をすぐには見つけられなかったので、シェルスクリプトの練習も兼ねて作りました。

  • 書式はmvと同じ
  • b, f, vオプションだけ受け付けてmvに渡す
作成にあたり、以下の情報を参考にしました。
こんな単純なものが今まで作られていないわけが無いと思うので、検索に使うmv・ln・移動・シンボリックあたりの単語で余計なものが引っかかりすぎているだけのような気はしますが…。
(これは惜しかった → linux - Bash: move file/directory and create a link of it - Stack Overflow)
2015年2月26日木曜日

MacType使用時の環境変数不具合

Windowsで綺麗なフォントを使うためのフリーソフトのひとつに、MacTypeがあります。
オープンソースっぽいところに置かれていてライセンスも記載されているものの、ソースは公開されていないという若干怪しいソフトです。セキュリティ系の怪しい挙動はまだ報告されてはいないようですが、どうも環境変数周りでバグを抱えている模様。

Windowsにはシステム環境変数とユーザー環境変数があります。

参考:.Windowsのシステム環境変数とユーザ環境変数

そしてPATHは本来ユーザー側で指定したところにも通るはずですが、なぜかMacTypeがそれを壊してしまうようです。ユーザー環境変数で指定したところにあるプログラムが起動できず、あちこちで不具合を起こすことがあります。起きる環境と起きない環境がありますが。

もし発生した場合、MacTypeの常駐プログラム(MacTray)の設定にある「Windows開始時に起動」を外すことで、これを回避できています。

なぜかユーザー側の環境変数PATHが消されて、システム環境変数PATHが「元々指定していたシステムPATH:MacTypeのバイナリへのパス」に置き換わっているので、MacTypeが勝手にPATHをいじる過程で何かが起きているのではないかと思われます。
2014年12月31日水曜日

C87 お疲れ様でした

サークル浜風もっこす の2014年は終了しました。
西館まで足を運んでくださった皆様、ありがとうございました。

既刊の1+2の方が13:40頃に在庫切れてしまいました。新刊と比べるとあまり出ないだろうという予測でしたが、意外と初めて来てくださる方がたくさんいて、思ったより数が出ました。ありがたいことですが、その後にゆっくり来てくださった方には申し訳ありませんでした。新刊はたくさん刷ったので、無事最後まで持ちました。

Network Maniacsというタイトルなのに、Vol.3は1や2に比べたらライトな感じにしました。どのくらいの本が受けるかよくわからなかったので試行錯誤の途中でありますが、ちょっとライトにしすぎたかなーというのが反省&何度かいただいたご意見でした。次以降の参考にさせていただきます。

また、ご意見ご感想は常にお待ちしております。奥付にあるメールアドレスか、あるいはTwitterの方へ。監視頻度の都合、Twitterに飛ばしていただけると助かります。

当初出そうとしていた艦これ本は、普通に攻略本っぽいものがコピー本で20p超えたところまで作った挙句に、どうもいまいちまとまらなくて没にしてしまいました。分量も増えるし、前回のオフセ本に書いたような確率論的なものと合わせて、オフセ本で形にしたいですね。どこか艦これオンリーを狙いたいところ。

Vol.3のURL

新刊(vol.3)内に記載したURLは以下のひとつだけでしたので、独立記事にせずここに書いてしまいます。
netem: http://www.linuxfoundation.org/collaborate/workgroups/networking/netem

余談

サークルスペースで話していて、BSDの黒悪魔本なるものをお勧めされました。業務でLinuxかつカーネルまでは手を入れない範囲で頑張る都合、Linux以外のネットワークスタックの知識はさっぱりでしたが、mbufのメモリ管理にはskbよりすごいところが色々あるとのこと。
興味を持ったものの、どうもぐぐるとすごい値段がついているようで困っています。どなたか貸していただけないでしょうか…。あるいは、勉強会(もくもく会等)の集まりで、その場で借りてその場で読んで帰りに返す感じでも。
2014年12月23日火曜日

Cygwin環境下でElixirを使うときのバッドノウハウ

Windows上でCygwinを使いつつ、Windows用にインストールされたコマンドラインアプリケーションを使うと、ヒストリーを辿る動作が上手く動作しないことがあります。↑を押したらカーソル位置が上に移動してしまうなど。各種言語のREPLやDBの管理ツールで起こります。そんなときにはrlwrapを使うと、安直にまともな挙動を得ることができます。
rlwrap -A iex.bat

ここで今rlwrapを紹介したいわけではなくて、rlwrapを使ったときのバッドノウハウ。
elixirはwindows用の実行ファイル(iex.bat)を用意してくれますが、こいつをrlwrapで包むと、なぜか上手くCtrl+Cが伝わらなくて、erl.exeがゾンビの如く残ってしまいます。

対処は、 :erlang.halt で終了すること。

若干面倒ではありますが、そう頻繁に終了起動を繰り返すようなものではないので、実用的に問題ない範囲内かなと。