memo/20221012
created 2000-10-12 modified 2022-10-12
男性は年を取ると、ダジャレが好きになる、と言われる。
ダジャレ って何?
言葉の音素が少しだけ異なる言葉を並べると、少し楽しい気分になる。
少しだけ音素が異なる複数の言葉を言って、自分や、聞くものを楽しい気分にさせるものを、ダジャレと呼ぶ。
余談だが音楽の作詞家が韻を踏むのも、基本的には同じ効果を狙うものである。
ワタシも年をとって、ダジャレがとても好きになった。あたかもワタシの脳内に、学習済みのニューロン回路が構築されたような気分で、自分でそれを「ダジャレエンジン」と呼んでいる。
以下は本日の ダジャレエンジン の活動レポートである。
ワタシがツイッターでフォローさせて頂いている、面白いヒトたちのうち ある方が
「寒さに弱い」
とだけツイートされていた。それを見て
- プロフィール文を怪獣カードの説明風に記載することで、サブカルチャー好きに向けて緩やかなおかしみを誘う方法 が存在する
と、想起した。
それは置いておいて。
5ちゃんねる(旧2ちゃんねる)では「荒らしに構うのも荒らしだ」などと言うわけですが、これをきちんと実践できないヒトも、ことも、ままある。
それである時
あらしにかまうのもあらし ちらしにかわうそとあざらし からしにあまいものあわないし
などと書き込んでみた所、その後ピタリと荒らし議論が収まった。本当のところはわからないが、多分この書き込みの「効能機序」はこうだ。
- 5ちゃんねらーはダジャレが好き
- だれかが「うまいことを言う」と、それに付け足して「もっとうまいことを言いたい」気分になる
- 「荒らしに構うな!」などと高圧的に発言するより、だじゃれを言って 2の句を継ぎたい と思わせると
- 考えているうちに馬鹿らしくなって、次の話に移る
- 結果として、荒らしも 荒らしに構う荒らしも 冷静になって本題に戻る
ダジャレも、ネット世界の平和と、無駄なサーバ負荷による無駄なCO2発生を削減する事に、貢献するのである。(本当かよ)
はて
それで本日のワタシの脳内のダジャレエンジンが、次のオラクル文(神託文)をぺろっと吐いてきた。
それが「おかわり の はじまり」である。
- 「終わりの始まりって 時々見かける文言だけど、おわり と おかわり って似てるようで違うね」
- 「おかわり の はじまり」って無いの?
なお、日本語話者には自明だろうが、おかわり とは、主食である米を碗一杯ぶん食べた後、もう一杯食べようと、追加の米を碗に入れることである。
APIの切り口を オープンとクローズなど2点ではなく、 おわり と はじまり と おかわり の3つの観点で抽出する手法 に関する考察
コンピュータシステムの開発者は、大きなものを 小さなものの集合で作る。つまり、大きな問題を小さな問題に分割して、一つひとつ やっつけていくのだ。
分割したものを 機能ブロック などと呼ぶ。古い言葉なので嫌われるし、自分も嫌いだった時期があって、一時期は用語「クラス」や「オブジェクト」が台頭・席巻したが、最近ワタシは用語「機能ブロック」を見直している。
分割する 機能ブロック 間のインタフェース境界を、効率よく発見したい。発見とは、ある機能ブロックの実装者が、利用側機能ブロックの実装者に対し提供する関数(インタフェース)群を、抽出し検討し試作し、利用側に仮公開し修正し本公開する過程のうち、抽出する工程を指す。一般的には オープン と クローズ の対など、資源を使う前後に 2つの API を呼ぶことを発想し出発点とするが、このような「複数インタフェースをどう用意するか」には、確立された方法論はなくて、「やっているうちになんとなく身につく」方法によって、我々プログラマ達は身につけてきた。
でも良いとされる観点にはいくつか特徴があるとわかっていて
- well defined である
- 直交する
- 対になる操作が用意されている
- 現実世界のモノに対する「例え」が良い
などがある。
ここに、新しい発想を追加したい。
複数の機能ブロックを2D図上に配置して、互いの境界を一本の自由曲線で描き、境界の上にいくつかの「インタフェース関数」を設ける、イメージに対し、
複数の機能ブロックを3D図上に配置して、互いの境界を連続の点からなる自由面とするのである。
なぜ境界上にインタフェースを置く(想像上の)方法を取るのかというと、これは「複数のインタフェースが不完全な重複をおこしている」状況、つまり「直交しないインタフェース群」を定義してしてしまうという失敗をしないため、である。
しかしこの「直交しない」概念は、果たして 現状で我々が認識しているものだけで正当なのだろうか? という投げかけが、本件の重要な論点である。
- オープンとクローズ
- 確保と解放
など、多くの「対になる」インタフェース関数の作り方が提唱され、我々の知見となっているのだが、その構成数は 2 だけなのだろうか?という話だ。
直線が2点でユニークに決まるが、平面が3点からユニークに決まるように、「直交しない」ように見えた概念も、少し検討の次元を上げると実は「直交していた」と気づくかもしれない。
ということで:
次の課題は、
「ある機能ブロックが持つインタフェース関数のうち、オープンとクローズ、のような、本体機能を使う前後に使うもので、かつ 2つではなく 3つのAPIからなり、上手に定義されているな、とプログラマ連中に思わせるようなものには、どんなものが存在するか?」
を探し、列挙すること。
経験は以下。
- ある機能ブロックが、主機能「検索する」に対し 副機能「トランザクション機能」を隠蔽しており
- オープン と クローズ のAPI を提供していたが
- ここに 再オープン を追加したら 上手くいったことがあった。
再オープンは
- クローズして、即座に再びオープンすることで、実行権を保持したまま そこまでの操作を1つのトランザクションとして閉じる
ものであり、
- 利用側に、トランザクションの概念を隠蔽したままに保つことができた
ので 機能追加として成功例だった。
コレを
- はじまり (資源の利用権を確保すると同時に、トランザクションを開始する)
- おわり (資源の利用権を解放すると同時に、トランザクションを閉じる)
- おかわり (資源の利用権を持ったまま トランザクションのコミットを行う)
の例として記憶したい。
いや... もしかしたら2つの資源を同時に確保・解放させようとして混乱しただけかもしれないけど、ファサード パターン (洗濯機のおまかせ一発ボタンみたいに、かんたん操作を提供する 折衝的なクラスを提供することで、もっと重大な問題である 資源の二重解放 や 解放漏れ を防ぐ) なんてのもあるよね。だから間違いではなかったと思いたい。
そして他にも何かあるのでは。と。
【* 日々のメモ】
ところで、戯れにこのエントリーを DeepL で英訳してみようとしたが、諦めた。ダジャレは 言語の音素が少しだけ違う ことに依存するので、他言語に翻訳するのが難しい。
あらしにかまうのもあらし ちらしにかわうそとあざらし からしにあまいものあわないし
Ah Ra Shi Ni Ka Ma Uoo No Mo Ah Ra Shi Chi Ra Shi Ni Ka Wa Uoo So To Ah Za Ra Shi Ka Ra Shi Ni Ah Ma Eee Mo No Ah Wa Na Eee Shi
If you mess with the trolls, you're also a troll. There's an otter and a seal on the flyer. Spicy and Sweet don't mix.