2022-08-28

Pythonは流行り過ぎか?

Webで見かけた「プログラミング言語はファッションか、流行でしか技術を見ない人々」という記事の中に次のような文がありました。

プログラミング言語でいうと「ここ数年、記事でPythonを持ち上げすぎではないか」と感じている。


「持ち上げすぎ」と表現するかどうかは別にして、書籍でも、Web上の記事でも、Pythonの話題が多いとは思っていました。

 

ウィキペディアによるとPythonが登場したのは1991年との事ですが、Perlが1987年に、Rubyが1995年に登場しています。ほぼ同時期と言えると思います。1990年代から2000年代初め頃までは、Perlが全盛だったような気がします。その頃でもPythonを利用しているユーザがいなかった訳ではありませんが、好きな人がいない訳ではないマイナーな言語という位置づけだった気がします。それに比べると、Perlは皆が使っているメジャーな言語という感じでした。ところが今や、Perlには見る影もなく、猫も杓子もPythonという有様です。

 

Pythonに限らず、何か特定のプログラム言語であるとか特定の技術などが流行の最先端になるのは昔からよくあります。流行にのってしまえば、雑誌でも特集が組まれたり、続々と新規に書籍が出版されたり、Web上に記事が溢れたりしますので、入門しようとする初心者が列をなすことになります。

 

記憶がおぼろげですが、Perlが話題になり始めた頃に今はなきUNIX magazineで「Perlは、シェル、sed、awkなどを寄せ集めたような言語だ」と指摘した記事を読んだような気がします。Web上で「#019 私とプログラミング言語(後編)」という記事を見つけましたが、同様の事を指摘しています。その当時は「Perl、最高!これがあれば、もう他には何もいらないよね!」みたいな言われ方をしていたのに、いつの間にやら「Perl?それ何?やっぱりPythonでしょ!」みたいに世間ではなっているのは、いったいどうしたことでしょう。

2022-08-21

シェルスクリプトに「dry run」機能を持たせる方法

ちょっと複雑な機能を持つシェルスクリプトを作成する場合、いきなり実行させて大失敗になるのは問題です。場合によっては、スクリプト自身を書き換えてデバッグ情報を出力させて動作を確認し、うまくいくことが確認されたら、デバッグ情報を出力している箇所を削除したりコメントアウトしたりして対処するという方法が考えられます。しかしこの方法では、デバッグするたびにスクリプトの書き換えを伴うので、デバッグに関係ない箇所まで書き換えてしまう可能性があり、あまりスマートではありません。

 

シェルスクリプトでデバッグをおこなう際のテクニックはいろいろあり、Webを検索すれば「シェルスクリプトのデバッグ」のような情報がみつかります。ここで注意しておきたいのは、何度実行しても差し支えないようなコマンドなら気にする事もないのですが、システムに永続的な影響を及ぼすようなコマンド(ファイルを作成したり、削除したりするなど)を実行する場合は、気軽に何度も実行できないという事です。どのようなコマンドが実行されようとしているのかを確認する仕組みが必要になります。このような機能を「dry run」と呼ぶことがあります。


例えば、単純な例にはなりますが、foobarコマンドを実行しようとするスクリプトがあるとしましょう。このコマンドを実行してしまうとシステムに永続的な変更が加えられてしまうので、デバッグ中に気軽に実行するわけにはいきません。しかし思わぬバグが潜んでいるかもしれませんから、シェルスクリプトの中で本当にfoobarコマンドを呼び出しているのか確認しておきたいところです。このような場合に手っ取り早い方法は、コマンドの前にechoをつけておくことです。「foobar」ではなく「echo foobar」としておけば、コマンドが実行されてしまうことは防げます。


デバッグが済み、シェルスクリプトが完成したと「思った」ら、そのechoを削除すれば万々歳かもしれません。ところが不運なことに、思わぬバグが発見され、再びechoを入れなければならない事態に陥ったとしましょう。デバッグが済めば再びechoを削除できますが、もう今後一切バグが発見されないという保証はありません。その度にechoを入れたり外したりするのは、あまり良い方法ではありません。

 

このような問題を解決する方法として、変数名はなんでも良いのですが、「DRYRUN=echo」のような定義をすることです。そして「echo foobar」とする代わりに「$DRYRUN foobar」とするのです。もし変数が定義されていなければ、$DRYRUNは空ですから、「$DRYRUN foobar」は「foobar」になります。もし変数が定義されていれば、「$DRYRUN foobar」は「echo foobar」になります。こうすることで、変数定義をするか否かだけに注意すればよいので、スクリプトを書き換える際の手間が減ります。さらに変数定義をシェルスクリプトの外部からコントロールしたり、他の方法もありますが、うまく制御することで、シェルスクリプトの書き換え自体を無くすことも可能です。


上述したテクニックがあれば万事解決かと言うと、実はそうでもありません。例えば、awkやsedで、もしくはpythonでも何でも良いのですが、コマンド列を生成し、それをシェルに渡すことで何らかの処理をおこなう場合、単純に「DRYRUN=echo」という定義があっても、あまり役に立たないのです。

 

具体的に、つぎのような場合を考えましょう。パイプの前段のawkで何らかのコマンド列を生成し、それを後段のシェルで実行させようとしています。

awk '何らかのawkスクリプト' | sh

 

ここでawkの処理が万全なら良いのですが、もし不具合があったとすると、いきなりシェルで実行させるのは憚られます。そこで確認のために、以下のようにしたいところです。

awk '何らかのawkスクリプト' | cat

 

もし問題ない事が確認できたら、catをshに変更して、実際に実行をするというのが意図です。しかしそのためにシェルスクリプトを書き換えるのは、スマートではないわけです。この問題を解決するために「DRYRUN=cat」と定義してみましょう。そしてシェルスクリプトでは次のように記述します。こうすることで、もしDRYRUNという変数が定義されていれば「${DRYRUN:-sh}」はcatになります。もしDRYRUNという変数が定義されていなければ、「${DRYRUN:-sh}」はshになります。これで問題は解決できそうな気がします。若干アクロバット的かもしれませんが。

 awk '何らかのawkスクリプト' | ${DRYRUN:-sh}

 

ここで最初の問題に戻ります。「DRYRUN=echo」だった筈の定義を「DRYRUN=cat」に変更してしまった訳ですから、「$DRYRUN foobar」が「echo foobar」ではなく「cat foobar」になってしまいます。これでは最初の問題が解決できません。ここで変数名を別にするという解決策もあるかもしれませんが、アクロバット的ですが、「${DRYRUN:+echo} foobar」でも良いのではないかと思います。こうすればDRYRUNという変数の中身が何であろうと、「echo foobar」になってくれます。

2022-08-15

日本人の名前における「ロシア人の名前と愛称」

ロシア語では、『入門者および初級者のためのロシア語文法ハンドブック四訂版』によると、「遠慮の要らない間柄の人(家族、友人など)に対しては、愛称で呼ぶのが一般的である」ようです。例えば「Александр」(アレクサンドル)なら「Саша」(サーシャ)になるようです。


何故「アレクサンドル」の愛称が「サーシャ」になるのか謎なのですが、それは良いとして、日本人の場合はどうなるのでしょうか。厳密には「日本人にはロシア人のような愛称はありません」という事で済む話だと思います。しかしロシア人からすると、「親しくなったからには愛称で呼ばないと落ち着かない」という感覚もあるのではないかと思います。もしかすると、「愛称がないんだったら、俺がつけてやるよ」みたいな有難迷惑なことを言い出すロシア人だっているんじゃないかと思います。

 

日本人の名前が、いったいどのようなロシア的な愛称になるのか、興味津々です。

日本人の名前とロシア語における格変化

NHKラジオ第2で放送されている「まいにちロシア語」の2022年5月30日の第22課では、ロシア語の名詞・代名詞における格変化を解説しています。テキストの「ミニトピック」でも次のように書かれていますが、日本人の名前がロシア語で格変化するとどうなるのか気になります。

日本語を母語とする皆さんにとっては、人の名前が変化してしまうのは驚きかもしれません。


例えば女性の名前「Нина」は、次のように格変化するようです。

  1. 【主格】Нина
  2. 【対格】Нину
  3. 【生格】Нины
  4. 【与格】Нине
  5. 【造格】Ниной
  6. 【前置格】Нине


このような格変化を、例えば日本人男性「太郎(Taro)」とか日本人女性「綾香(Ayaka)」は、どのようになるんでしょうか。格変化した名前は、日本人の感覚からすると、自分の名前とは感じられないような気がします。

摂氏と華氏

日本では温度単位が摂氏を使います。世界的にも温度を摂氏を用いる国が多いと思いますが、アメリカなどでは華氏を使います。両者は、変換式で換算できるので、測定値をどのように表現するのかというだけの問題とも言えます。

 

日常生活で温度が関わるのは、気温や体温を表現する場合が多いと思います。例えば、日本の夏では、25℃以上を夏日、30℃以上を真夏日、35℃以上を猛暑日と呼んでいます。また冬期であれば、氷点下になるかならないかが、日常の会話でよく言及されます。もし日本で華氏を使っているとしたら、夏日は77℉以上、真夏日は86℉以上、猛暑日は95°F以上ということになります。77℉とか86℉とか、中途半端な数値だなぁと感じます。

 

また体温としては、日本では37℃で平熱か否かを区分していますが、華氏にすると98.6℉という、これまた中途半端な数値になってしまいます。37℃という値に大きな意味があるわけではないと思いますが、日本が華氏を採用していたら、98(=36.67℃)では低いでしょうし、99℉(=37.22℃)が妥当かとは思いますが、切りが悪いからいっそのこと100℉(=37.78℃)ならばスッキリしそうです。

 

 同様に気温でも、0℃というのは32℉ですが、現実問題として0℃前後の小数点以下の値が変化したところで、体感が大きく変わるわけでもありません。そうであれば、30℉(=-1.11℃)や35℉(=1.67℃)で区切っても、日常生活の話題としては大同小異ではないかと思います。

GNUSの日本語マニュアル

ふだんのメールを読むのにはFreeBSD上のemacsGNUSを利用しています。以前はWanderlustを利用していましたが、数年前にGNUSに変更しました。GNUS自体は、かなり前にネットニュースを読んでいた頃に利用したことがあります。しかし新しいバージョンのGNUSになってからは利用していなかったので、使いこなすには難がありました。

 

GNUSの公式サイトには詳細なマニュアルが置いてあるのですが、英文しかないので、読んだ方が良いと思いつつも、二の足を踏んでいました。ところが日本語訳されたマニュアルが存在していることが、ひょんなことから気づきました。GNUSのマニュアルは500頁弱ほどもある大部なものなので、英語で読むのは辛く、日本語訳があると助かります。

 

実は、メール送信は、GNUSでも出来るはずなのですが、設定がうまくいかず、Mewを使っています。日本語訳のマニュアルを熟読して、なんとかGNUSでメール送信ができる環境を作りたいと思っています。


カーラー

カーリングをする人のことを「カーラー」と呼ぶようです。ゴルフをする人は「ゴルファー」と呼ばれますし、ボーリングをする人なら「ボーラー」です。もっとも、「カーリング(の)プレーヤー」とか「ボーリング(の)プレーヤー」と呼ばれることが無い訳ではありません。しかし野球では「ベースボーラー」とは言いませんし、テニスでも「テニサー」 とは言わないと思います。

 

これらの競技は外国由来ですが、日本由来の剣道とか弓道などは、間違っても「剣道ヤー」とか「弓道ヤー」と呼ばれることはないでしょう。外国由来の「フェンシング」や「アーチェリー」が何と呼ぶのか気になるところです。


あらゆるスポーツは「何々のプレーヤー」と呼べると思いますが、一部に「何々ヤー」と呼べる例外があるように思います。何故かという問いには、そういう習慣だからという答えしかないのかもしれません。

土用の丑の日

2022年夏の丑の日は、丁丑の7月23日(土)と己丑の8月4日(木)でした。土用の丑の日には鰻を食べると暑い夏を乗り切れるとまことしやかに言われていますが、バレンタインデーのチョコレートのように単なる商業キャンペーンに過ぎないのではないかとも思えます。


Webには「なぜ、土用に「う」がつく食べ物がいいのか」という記事があります。土用には「鰻」に限らず、「『う』のつく食べ物」が勧められていると記事には書かれています。記事中では、牛、鰻、瓜、梅干し、うどんが例示されています。これらは、「『う』がつく食べ物」というよりは「『う』で始まる食べ物」なのではないだろうかという気がします。


「『う』がつく食べ物」であれば、「納豆(なっと『う』)」とか「豆腐(と『う』ふ)」だって「う」がついています。土用に鰻を食べるのが商業キャンペーンにすぎないと考えるのであれば、「納豆では駄目なのか」と疑問を呈することがナンセンスなのかもしれません。

superstore

The Japan Times Alphaで連載されている「Odds & Ends」の2022年7月のテーマは「Japanese English」でした。2022年7月15日号に掲載された第3回目のタイトルは「Konbini, supa, depato」でした。近年では、魚屋、八百屋、肉屋のような小規模なお店をみかけることは殆どなくなり、スーパーマーケットが一般的です。そのスーパーも、小規模なものもありますが、全国展開している大規模なものが増えてきているような気がします。

 

本文には次のような記述がありました。

 When I was youner, there were only "grocery stores" or "grocers." Then the stores got bigger, much bigger. They became supermarkets. Supermarkets these days are even bigger; they sell everything. They has gotten a new name, "superstore."

 

時代を経ると、食料品店→スーパーマーケット→スーパーストアと大規模化してきたと書かれています。日本では「スーパーマーケット」を「スーパー」と略しますが、これはJapanese Englishだから、これを英会話中で"super"と言っても通じないよと指摘されるところです。


しかし日本では、規模が大きかろうと小さかろうとスーパーマーケットはスーパーマーケットで言い方を変えないのですが、アメリカでは大規模なものは「スーパーストア」と呼ぶ傾向があるようです。想像するところでは、日本に比べるとアメリカは何でも規模が大きくて、スーパーマーケットであっても、日本のそれに比べると大規模なのではないかと思います。そうであれば、アメリカにあるといういう「スーパーストア」というものは、どれほど大規模なのか、いちど体験してみたい気がします。

2022-08-07

3Blue1BrownJapan

YouTubeで「なんで球の表面積って円の面積の4倍なの?」という作品を見つけました。とても興味深い内容でした。どうやら「3Blue1Brown」というチャンネルがあり、東京大学の有志が本家から公式にライセンスを得て日本語版を作っているようです。


本家は2015年から活動しているようですが、日本語版は2020年に始まったらしく、公開されている動画は10本くらいしかありません。今後の活動に期待していますが、面白いチャンネルを見つけて、嬉しく思っているところです。

食事が体重に影響を及ぼすのは何時?

一般に、太り気味の人が体重を減らそうとすると、食事を制限しようと考えることが多いと思います。そうすることに異論があるかもしれませんし、現実には食事制限が三日坊主になるとか、うまくいかないことが多いかもしれません。そうであったとしても、食事で取り入れるカロリー量と身体が消費する分の差がプラスになれば、身体に蓄積されれていく分が増えていくでしょうし、体重も増えていくのではないかと思います。

 

それでは食事を減らすと、翌日にはもう体重が減っているのでしょうか。もう何年間も(毎日ではありませんが、週に何度かのペースで)体重を測定し続けているのですが、測定された体重は変動しているのが確認できています。増えていることもあり、減っていることもあります。そこで一喜一憂せずに、移動平均を求めると、体重が増加傾向なのか、安定的なのか、減りつつあるのかというトレンドが見えてきます。

 

このトレンドを見る限りでは、日々の食事が少しくらい多くても少なくても、日々の体重測定には違いがでるかもしれませんが、トレンドには影響を与えていないような気がします。むしろ最近食べ過ぎている気がするので量を控えめにしようと決意してから、トレンドが変わるまでは、数か月くらいかかっているように感じます。

 

体重の変化は、食事の量だけではなく、活動量とか、基礎代謝とか、いろいろな要因が関係するでしょう。体重が減少傾向にあるとしても、それが食事を控えめにした結果だとは断言はできないと思います。とは言え、食事を控えめにしている効果がないとも思えませんし、その効果が出るまでにはある程度の期間を要するだろうとも思います。

 

食事が体重に影響するのに要する期間は、いったいどれくらいなのでしょうか?

『アンナ・カレーニナ』と終了ステータス

ロシア文学で『戦争と平和』というとトルストイの作品として有名ですが、彼は『アンナ・カレーニナ』という作品も書いています。まだ読んだことはないのですが、この作品の書き出しは、とても有名らしいです。

Все счастливыые семьи рохожи друг на друга, уаждая несчастливая семья несчастлива по-своему.

この日本語訳は、「幸福な家庭はみな似かよっているが、不幸な家庭はそれぞれ不幸の形が違っている」となるそうです。これを読んで、UNIXの終了ステータスを連想しました。

 

Advanced Bash-Scripting Guide」の「Chapter 6. Exit and Exit Status」には次のように書かれています。つまり、「成功したコマンドはみな似かよっているが、成功しなかったコマンドはそれぞれ失敗の形が違っている」ということです。

A successful command returns a 0, while an unsuccessful one returns a non-zero value that usually may be interpreted as an error code.

 

UNIXと文学作品が繋がるとは、思いもよりませんでした。

2022-08-04

シチーにまつわる諺

2022年4月から放送大学で受講していた「初歩のロシア語('22)」は、7月末に単位認定試験を受け、一区切りがつきました。45分間の授業が15回だったので、ようやくロシア語がどのようなものなのかが分かりかけてきたところです。同時に聴き始めたNHKの「まいにちロシア語」は、入門編15分間が週3回あり、それが半年間続くので、こちらは9月末まで続けるつもりです。

 

「初歩のロシア語('22)」の講師だった沼野恭子先生の著書を書店でみかけたので購入してみました。ちくま文庫の『ロシア文学の食卓』ですが、10年ほど前に日本放送出版協会から出ていたものに若干手を入れたもののようです。ロシア料理というとボルシチとかピロシキをよく耳にします。ロシア文学作品にあらわれるロシア料理を前菜からデザートや飲み物にいたるまで紹介しており、ロシア料理を知るためにも、ロシア文学を知るためにも、とても良いと思います。

 

シチー」という人気のあるロシア料理があるそうで、その人気のほどを示した諺があるそうです。著者は次のように書いています。

なにしろ「実の父親にはそのうちうんざりするが、シチーはぜったい飽きがこない」という親不孝な諺まであるほどである。


シチーが如何に人気のあるロシア料理なのかをあらわすには、これ以上の諺はないのではないかと感じました。