2022年2月2日水曜日

ジョークコマンド・ミームコマンド : please

ものすごいジョークコマンド(ミームコマンド)を思いついてしまった。

それは、SQLクエリに「please」を使えるようにする、というものである。

(例)
please select * from table1;
please insert into table1 values (...);
please update table1 set ...;
please delete from table1 where ...;
と思ったら、
2021年4月に日本MySQLユーザ会の副代表である坂井 恵さん
に先を越されていた!残念!

1年遅かったか!そしてまさか実装までされているとは!

せっかくなので、転んでもただでは起きずに
・シェルコマンド  →P.S. 2023.1.2 作りました!
・DOSコマンド
・PowerShellコマンド
・…
などのCUIコマンド辺りにも広めるアイデアを書いておこう。。
※GUI版もあり得るといえばあり得るので、ついでに書いておく。

シェルはディストリビューションがたくさんあるので既にあるかどうか分からないが、少なくとも macOS Monterey にはないことを確認。
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin21)
 
DOS/PowerShellはWindows 10にはないことを確認。


なお、SQLのplease句は文頭でも文末でも使えるようだ。これはデータベースエンジンという閉じた世界で文法解釈するためよいが、シェルとなると関連するところが一気に広がるため大変そうである。
(例)
please ls
ls |please
echo `please date`
please please please please please ...
コマンドの機能としては、何もしない、またはコマンド全体には何の作用もしないが、何かしら気の利いたことをしてくれる機能😅

例えば、後続コマンドが「--please」オプションを実装している場合は、「--please」オプションをつけて実行してくれる、など。
「--please」オプションの実装は各コマンド次第ということ。
既に「--please」オプションが別の意味・機能で実装済みの場合は注意が必要。

ヌルコマンド「:」に似ているが、ヌルコマンドはそれ自体が終了コード0を返す1つのコマンドである。つまり
: ls
を実行すると、lsの結果は出力されず、コメントのように使用されるが、pleaseコマンドの場合は、lsの結果の出力及びlsの終了コードを返す。
つまり結果には介在しない。うーん、いかにも危険なコマンドである。

※「気の利いたこと」として、例えば出力に「You are welcome.」を返したり、「fortune」コマンドのようにランダムな気の利いた言葉を返す機能を想定するならば、「結果出力には介在するが、終了コードのは介在しない」機能となる。
※なお、「fortune」コマンドについては、昔、どこの何の環境では覚えていないが、シェル起動時に「その日の言葉」を出してくれていたので覚えているだけで、それが果たして「fortune」コマンドだったのか、それとも別のコマンドだったのかは今では分からない。
その環境のデフォルトrcスクリプトであったのだろう。
please fortune

※よって、pleaseのオプションとして「気の利いたこと」をしてくれる連携コマンドを指定できそう。
please -p fortune
please --partner fortune

ただし、「please」コマンドがSQLのように「自然言語」に寄り添う思想の言語には親和性があるのに対し、シェルコマンドだと自然言語側に寄せれない問題が発生し、人々はそれに直面し困惑することになる。
please -p fortune ls
please --partner fortune ls
ls |please -p fortune
ls |please --partner fortune
echo `please -p fortune date`
echo `please --partner fortune date`
please please -p fortune please please please ...
please please --partner fortune please please please ...
「please」効果が大激減である。そればかりか反対の感情にさえなりかねない状況に陥る。

よってpleaseコマンドにはオプションを持たせないのがとりあえずの対処。
(fortuneと連携したい場合は設定ファイルか何かで連携するしかない。)
please [command ... ]
command : コマンド全般。ただし自然言語系コマンド※だとより親和性がある。
※自然言語系コマンド:please を含め、シェルで自然言語に近いコマンドを構成する/できる言語体系。文脈を構成する場合は、コマンドの前後など文脈としての整合性も求められる。
という、シェルコマンドに自然言語を乗せるという壮大な話になってくるため、話はここら辺までにしておこう。

(please の他にも do/force で、後続コマンドに --force を付与や、can/could you ... などなど。住む世界が違いすぎる。しかしこれまで培われてきたように、異なる世界でもお互いに解釈できる言語技術やプロット技術、変換技術によって繋ぎ合わせることができるのである。変な扉を開かなければ良いが。。。)


。。。
いずれにせよ、混乱とバグとセキュリティ上の脆弱性をもたらしそうである。。

ーーーーー
P.S. 2023.1.2 
というわけで、せっかくなのでshell版(UNIX版)のpleaseコマンドを作成しました^^✌️
shell版と言ってもシェルスクリプトではなくてC言語で作ったバイナリです。(多分シェルスクリプトでもできるかもしれないが。。)


Android Studio Bumblebee にアップデートしたら、Flutterでios版がWarning: CocoaPods not installed.になった場合の対応方法



Android Studio Bumblebee にアップデートしたところ、Flutterでios版を動かそうとするとバージョンアップ前は普通に動いていたのに、以下のエラーが発生した。
Warning: CocoaPods not installed. 
Skipping pod install. CocoaPods is used to retrieve the iOS and macOS platform 
side's plugin code that responds to your plugin usage on the Dart side. 
Without CocoaPods, plugins will not work on iOS or macOS. For more info, 
see https://flutter.dev/platform-plugins 
To install see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.

以下リンクに「ちらっ」と書いてあるのが、根本的な解決法だと思う。


つまり、
> chmod +x /Applications/Android\ Studio.app/Contents/bin/printenv
上記実行した上でAndroid Studioを再起動。再度
> flutter doctor
を実行して、以下のようにCocoaPodsでエラー解消されてばOK
[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.2

/Applications/Android\ Studio.app/Contents/bin を見てみるとprintenvだけownerがadminになっていた。(Bumblebeeより前はどうなっていたのだろう?)(以下は chmod +x 後の状態)
-rwxr-xr-x   1 user_x  admin  152080 Jan 28 07:23 printenv
(2022.2.6 追記)
Bumblebee にPatch 1 が出ていた。
Android Studio Bumblebee | 2021.1.1 Patch 1
そして、Patch 1 更新後に再度/Applications/Android\ Studio.app/Contents/binを見てみると、printenvを含めて、全てadminになっていた^^。
ただし今回はuserにも実行権限(x)が付いているため、ios版も問題なく動作した。
(この記事の問題も含めて対応してくれたっぽい。よかったよかった。)
-rw-r-xr-x   1 user_x  admin  152080 Jan 28 07:23 printenv
↓
-rwxr-xr-x@  1 user_x  admin  152080 Feb  2 10:38 printenv

※余談だが、「About Android Studio」中の「Android Studio Bumblebee | 2021.1.1」とあるが、
本当に2021で合っているのか気になって調べてみたところ、合っていた。
(リリースタイミング(2022年1月)的にちょうど1年前だったので。流石にこんなところをミスる訳がないか。。。)
(ただし、Android Studioの歴史とかに詳しくない人にとっては(私も含め)、変な誤解を招きかねない^^。こういうとこから歴史に興味を持ってもらえれば幸いである。(私が言う事ではないが。))