ワイルドなワイルドカード処理

週末、仕事上の知人と酒を飲みました。プログラマの鉄板ネタとして「最近見たヒドいコード」という話題がありますが、そういえばとそこで話したネタをここにも書いておきます。

よくある社内業務のWebアプリを思い浮かべてください。自分が処理する事案を検索するために、例えば案件番号を入力できるとしましょう。そして、案件番号にはワイルドカードが使えるとします。例えば、「ABC*」と入力すると「ABCA90」と「ABCD70」が表示されるけど、「ABEF30」は表示されないとか、そういう奴です。よくありますよね。

で、この画面がすごく遅い。別段他に難しい処理をしているわけではなく、ワイルドカードを指定すると遅い。ちゃんとワイルドカード処理をすると結構大変なので、前方一致だけ(つまり、案件番号の先頭が何かということしかワイルドカードで指定できない)でいいよという話だったんですが、もしかしていろいろとやっちゃってるんでしょうか。

担当者に聞いてみると、「いや、タンバリンさん、いろいろとか無理です。前方一致で精一杯」という回答。えー?

前方一致の処理は単純です。入力された文字列をS1、比較対象の文字列をS2とすると

  1. S1の末端から「*」を取り除く
  2. S1の1文字目とS2の1文字目を比較する
  3. S2の2文字目とS3の2文字目を比較する。これをS1の最後の文字まで繰り返す

JavaだとstartsWith()というようなメソッドがありますから、1文字ずつ比較する必要すらないです。んー、何がそんなに難しいのか。

というわけで、コードの中を見てびっくり。こんな処理になっていました。

  1. 文字列の集合SGを用意する
  2. SGに「*」を加える
  3. S2の1文字目と「*」を連結してできた文字列をSGに加える
  4. S2の1文字目と2文字目と「*」を連結してできた文字列をSGに加える。これをS2の最後の文字まで繰り返す
  5. S1がSGに含まれるかチェックする

斬新です。そしてワイルドです。そして確かに前方一致だけじゃなかったらすごく難しそう。「『ABCDE』にマッチするワイルドカードの集合」を取得する・・・?えーっと、そもそも、その集合って有限かな。「*」が連続してはいけないというルールがあれば、有限になるか。うーん・・・

驚きに満ちた職場からお伝えしました。現場からは以上です。

| | Comments (0) | TrackBack (0)
|

表現を圧しようとするものを、私は許さない

また、大変に残念な動きが出ております。

ヤフーの若いエンジニアが、ジェンダーについてセンシティブな話題を扱いそこねたとして怒られています。

「女性エンジニア少ない問題」を解決するために、機械学習で男性エンジニアを女性に変換する

まず、断言しておきますが、彼の講演にはまったく問題になるところはありません。単に、周囲の読解力に問題があるだけです。その詳細についてはtwitterに連投しちゃったのでここでは割愛します。気になるなら下の発言以降のツイートを見てくんさい。

ここで言っておきたいのは、twitterなどの公の場で、こういう発言をしてはいけないという2つの点についてです。彼の講演自体ではなく、彼についての批判で目に余るものがあったためです。

まず、1つ目。常識的なことを言いますよ。

あなたが、あるいは誰かが不快になるからという理由だけで、誰かを罰しようとしてはいけません。

不快な発言と問題ある発言は違います。多くの問題のある発言は不快でもあるので、ごっちゃにしてしまううっかりな人が多いようです。また、企業や政治家が「誰かを不快にしたり、傷つけてしまったのなら謝罪したい」ということをいうので、不快にしたり感情的に傷つけたりすることが罪であるような捉え方をしているおっちょこちょいな人もいるようです。

しかし、ある特定の個人・団体・集団に対する侮辱や、差別的な発言のような明らかな問題のある発言と、下品で不愉快な言動は区別されるべきです。どちらを批判することも、不快感を表明することも、それはもちろんかまいません。

しかし、発言を封じようとしたり、刑事的や社会的な罰を与えようとしたり、発言者の正当な権利を侵害しようとしたり、それを希望するようなことを言ってはいけません。それでは、その発言の方が問題のある発言です。それは言論の自由や、思想・信条の自由という基本的人権を奪うことだからです。

今回の例で言えば、彼から今後の講演の機会を奪おうとしたり、彼を失職させようとするような発言は、断固として許されるべきではありません。そのような発言をしたものは、深く反省して欲しいと思います。もちろん、「そんな奴はtwitterを止めろ」なんていいませんけどね。

2つ目。小学生に言うようなことを言いますよ。

誰かの言動のちょっとした齟齬や不整合をあげつらったり、悪意や思い込みを持って意図を曲げて批判したりしてはいけません。

要するに、よく知りもしない他人の言動なんだから思いっきり「良く解釈して」あげるべきです。あげ足を取ったり、推測で批判したり、議論の中心ではないことで全体を評価したりしてはいけません。

今回のことで言えば、例えば「女性エンジニアは男性エンジニアのやる気を出すためにいるんじゃねーよ」という批判ですが、彼はそんなこと言ってません。「いや、こういう論旨の組み立てなんだからそういうことになるだろう」と言われるかもしれませんが、それはあなたの読解力の問題、あるいはユーモアというものの仕組みを理解していない故の誤解です。

そもそも、言ってもないことを批判してはいけません。彼は、「女性エンジニアがいると、男性エンジニアはやる気が出る」と言っているだけです。男性エンジニア全員かと言われればそうではないでしょうが、少なくとも男性エンジニアである彼のやる気はでるのでしょう(ちなみに私もでます)から、この文章は事実です(もちろん、一人の判例をもって逆の文を事実と認めることもできます。論理的に不完全な文だからしょうがない)。「女性エンジニアがいないと、やる気がでない」とも言っていますが、これは「女性エンジニアがいないと、(いる場合に比べて)やる気がでない」と言っているとすれば、これは最初の事実から論理的に導かれることに過ぎません。

これを「女性エンジニアがいないと、やる気が出ない(から、女性エンジニアは男性エンジニアのやる気を出すように振る舞うべきだ)」とか、「女性エンジニアがいないと、やる気がでない(から、女性エンジニアはその目的のために必要だ)」とか解釈するのは、無理のある推論とまでは言いませんが、あくまで推論です。仮にそう思ったとしても、「まあ、彼のことをよく知っているわけでもないし、そういう意図じゃなかったかもしれないし」と思うのが正しい大人です。彼自身や、周囲の同僚が「そういう風に解釈する人もいるかもしれないよ」と言ってあげるのは良いことですが、そうじゃない人がこの点について批判するのは不適当です。それは完全にマナー違反です。

ただし、個人的な解釈によって不快に感じた人が不快感をフィードバックすることは良いことだと思います。「そういう言い方をされると、ちっとイラっとするな」というリアクションはアリです。ただし、それだってこの彼をできるだけ傷つけないように行われるべきです。だって、そうでしょう。彼によって傷つけられた人が、なぜ彼を傷つけるようなリアクションを返すのか。「講演の記事を読みました。難しくてちゃんとは理解できなかったのですが、そんなことができるのかと感銘を受けました。ただ、・・・」と礼儀正しく伝えるべきです。礼を失してると感じられた、プライドを傷つけられたと思った人が、相手に対して礼を失したアクションをとったら台無しです。これもごっちゃにする人がいるのですが、感想であっても感情のままにぶつけてはいけないのです。「個人の感想」と「感情的な反応」は別です。

まとめます。まず、問題のある発言(事実でない・特定の個人を侮辱している・差別的な内容を含む)ではないものを断罪してはいけません。批評・批判することはかまいません。ただし、発言した内容ではないこと、例えば拡大解釈や推論を論拠に批評・批判してはいけません。そして、いかなる場合にも個人の感想を表明することは自由ですが、相手に伝えるのであればマナーを守るべきだし、twitterのような公共の場では、それは相手に伝わるのだという前提に立つべきです。

最後に。なぜこんなことを書いているかと言えば、表現者の抱える負担を下げることが、結果的に社会を良くすると思っているからです。このように脇が甘いだけで本質的に一切の問題がない表現が世の中にでないようにすることを私は望みません。誰しもが発信できる時代だからこそ、我々は発信においては慎重でなくてはならないし、受け取るときには寛容でなくてはなりません。発信できる情報を持っている人は、どんどん発信しましょう。それがIT革命の素晴らしい点です。その際に、いささかのユーモアを含ませることは、とても素晴らしいことです。ユーモアは本質的に他者を傷つける表現と無縁ではあり得ませんが、それを上手に送ったり受け取ったりできてこその大人です。

そして、このように問題のない表現の細かな点をつついて萎縮させることにより、そもそも批評や批判を相手にしないような厚顔の輩の発言だけが世の中に出回り、世にフェイクニュースが蔓延り、世の中が少しずつ悪くなっていく。そのような動きを私は望みません。この世が自由と寛容と礼節の行き届いた良い世界になっていくことを望みます。長寿と繁栄を。

| | Comments (0) | TrackBack (0)
|

トヨタのル・マン優勝の意義

ついにトヨタがル・マンの優勝を果たしました。

それも2台出走して1Lap差の1-2での勝利。 3位のレベリオンには30分以上の差をつけていました。 ですから少々のトラブルなら問題ない状態だったものの、 ほぼ一度もガレージへ車を入れることなく走りきりました。 ペナルティはなんかいろいろとありましたけどね。

さて、今回はライバルがいなかったトヨタ。 あんまりモータースポーツに親しんでない方だと 「なんだ、勝って当たり前じゃないか」と言うかもしれません。 しかし、ル・マンをよく知る人なら、全然当たり前じゃないことは 身にしみてわかっているはず。

去年のル・マンの後、私はこんなことをつぶやきました。

それを踏まえて、今年のリベリオンがもし去年走っていたら・・・。 トラブルに泣いたポルシェやトヨタを押さえて優勝していたかもです。 そのぐらいの力はリベリオンにはあったのです。 (むしろ、新車で2戦目の状態でトヨタから10週程度の遅れでゴールさせた レベリオンはすごい。他のLMP1チームはぐだぐだなところも多かったですからね)

速度差のあるマシンが争うル・マンでは 常にクラッシュの危険はありますし、ちょっとしたトラブルでも ガレージに入れれば1時間ぐらいのロスは容易に起こりうる。 ノーミスで24時間走ることは、トヨタにとってもまったく簡単なことではありません。 もちろん、ライバルがいない状態ではギリギリの攻めたマシンは 不要です。安全マージンは大きめにしているでしょう。 そうだとしても、「勝って当たり前」のプレッシャーは大きかったはず。

特に、今回はモナコ+インディ+ル・マンのトリプルクラウンを目論む、 世界最高のドライバー、フェルナンド・アロンソが乗っています。 アロンソの夢をしょうもないマシントラブルで潰してしまったら・・・。 全世界のファンはF1で不遇を託っているアロンソの夢を応援したいと思っていますから、 それも大きなプレッシャーだったことでしょう。

しかし、それ以上に今年のル・マンには「トヨタに勝って欲しい」という 大きな空気があったようです。 勝って当たり前でいいじゃないか。今年はトヨタに獲らせてやろう。 そういう感じです。それがレギュレーションにも現れているし、 国際放送の中継からもそういうメッセージを感じました。

2016年の「No Power!!」を知っている。だから、トヨタが勝つにふさわしい マシンを作ることができて、勝つにふさわしいレースができることを知っている。 WECのシリーズチャンピオンも獲っている。勝てない理由はない。 フォルクスワーゲンを襲った燃費スキャンダルのことを思えば、 アウディやポルシェが撤退してしまったことはしょうがないのかもしれない。 ライバルがいないル・マンは価値がないとして、トヨタが撤退してしまっても 誰も攻めることはできない。 「ポルシェに勝った」「アウディに勝った」。そう言えないル・マンに 失望し、多額の予算が必要な活動をやめてしまっても、文句は言えない。

しかし、トヨタは残りました。たとえ、ライバルがいなくてもル・マンに勝ちたいと 表明することは、ル・マンというレースそれ自体に価値をおいているということです。ル・マンの伝統や権威を尊敬しているということです。そりゃ、ル・マンを愛する人たちはうれしいでしょうね。なので、今年ぐらいはトヨタに勝って欲しい。ル・マンウィナーの序列にトヨタを加えてあげたい。ま、来年以降のことは知らんけどな、と思っていても無理はないでしょう。

というわけで、みんながハラハラしながら見つめる中、勝って当然のレースをちゃんと勝った。そして、ポルシェがいなくなった後のル・マンをちゃんと支えて、最初のうちはまったく関わらせてもらえなかった将来のレギュレーションに関する議論にちゃんと加わり、世界有数の自動車メーカーであり、レースを愛する企業であるとちゃんと世界に認めてもらったというのは、日本にとって、ものすごく大きいことです。コンペティションに打ち勝ったという意味での価値は確かに落ちちゃったかもしれないけども、この1勝の持つ価値はもっと大きいものだということを、モータースポーツに詳しくない人にも、知ってもらいたいと思います。

・・・とはいえ、2000年代初頭のアウディみたいにライバル不在でずーっと連勝になっちゃうのも望んでることではないでしょうし、とはいえ、今の恐ろしく素晴らしいエネルギー効率を誇るハイブリッド技術を止めちゃってただの内燃機関のレースにしてしまうことはちょっと残念すぎるし、でもハイブリッドで戦いを挑んできそうなライバルもいないし・・・というわけでなかなか頭が痛いところではありますね。ハイパーカーという新しいレギュレーションの検討は進んでいるようですが、テクノロジーとレーシングの両面で興味深いレギュレーションができることを祈ってます。

| | Comments (0) | TrackBack (0)
|

«Oculus Go