@fugaco

難解プログラミング言語

新入社員が技術研修をする時期になると、自分が勉強していた頃を思い出しますね(私は会社の研修ではなく大学で勉強しましたが)。先日「バブルソート」という言葉を久々に聞きました。隣同士くるくるするソートですよね。C言語の研修でソートプログラムを書いていたみたいです。

会社のメイン製品がC系でできているので、新入社員はC言語の取得が必須なんですが、私は中途採用なので実務でC言語を使ったことがありません。でもC言語のあの厳格な感じは割りと好きです。「図書館では静かにしなさい」と言われているような気分になります。笑

厳格(?)なプログラミング言語といえば、Brainf**k(**はuc)を思い出したのですが、知っていますか?8種類の文字しか使わない言語です。それぞれ、ポインターを動かしたり、加算減算、入出力、ループの命令になっています。

「Hello World」はこう書きます。

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.


このような難解プログラミング言語にはまった時期があったんですよ。書いたりはしませんでしたが、発案者はよく考えるものですよね。以下は私が気に入っていたプログラミング言語です。


シェイクスピア

コードがシェークスピアの演劇のように見える言語です。登場人物に代入した値を、「Speak your mind」で出力します。めっちゃ冗長です。「Hello World」はこう書きます。

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.

                   Act I: Hamlet's insults and flattery.
                   Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]
Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as
stupid as the difference between a handsome rich brave hero and thyself!
Speak your mind!
You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!
You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!
[Exit Romeo]
                   Scene II: The praising of Juliet.
[Enter Juliet]
Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!
[Exit Juliet]
                   Scene III: The praising of Ophelia.
[Enter Ophelia]
Hamlet:
Thou art as lovely as the product of a large rural town and my amazing
bottomless embroidered purse. Speak thy mind!
Thou art as loving as the product of the bluest clearest sweetest sky
and the sum of a squirrel and a white horse. Thou art as beautiful as
the difference between Juliet and thyself. Speak thy mind!
[Exeunt Ophelia and Hamlet]

                   Act II: Behind Hamlet's back.
                   Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]
Romeo:
Speak your mind. You are as worried as the sum of yourself and the
difference between my small smooth hamster and my nose. Speak your
mind!
Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the
difference between the square of the difference between my little pony
and your big hairy hound and the cube of your sorry little
codpiece. Speak your mind!
[Exit Romeo]
                   Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small
furry animal and a leech. Speak your mind!
Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the
difference between a mistletoe and an oozing infected blister! Speak
your mind!
[Exeunt]


Piet

文字ではなく色を組み合わせて記述する言語(?)です。「Hello World」はこう書きます。



こっちのプログラムは「Piet」と出力するんですが、これを待ち受け画像にしていた時期もありました。





Whitespace

空白文字(スペース、タブ、改行)で記述する言語です。真っ白なメモのあぶり出し(みかんの汁で紙に書いた文字を、火であぶって浮き出させるやつ)みたいで、少年心をくすぐられる言語ですよね。





難解プログラミング言語は実用言語ではありませんが、少しでも触ってみると、また別の視点からプログラミングについて考えられるようになるかもしれませんよね。

英会話練習アプリ「Supika」とか

日常的に英語での読み書きリスニングはしていても、スピーキングとなるとなかなか機会がありませんよね。スカイプでやる英会話なんかが最近は多いですが、私は家で一人になれる時間がゼロですし、まとまった時間もほとんど取れません。なので、例え30分足らずでも、スカイプで話し続けるというのは難しいと思うんです。それから、生身の人間相手はちょっと…と最初は敬遠してしまう人もいますよね。そんな人におすすめなもの少しだけ紹介したいと思います。



生身の人間相手が難しいなら、コンピュータと寂しく話すしかないんですが、最近の音声アプリは高性能ですよね。


Supiki
http://supiki.com/



英会話の練習アプリです。ある女性の仕事先や恋愛の話を中心に展開するショートビデオを見た後に、関係する会話に参加します。こちらの発言によって相手の返答が変わるので、いろいろと返事を変えてみると面白いです。

例えば店員さんにコーヒーをかけられてしまって、「すみません、大丈夫ですか?」と言われる回があるんですが、テンパってると「It's okay.」くらいしか言えないこともありますよね。日本語でも、車に当てられてテンパって「大丈夫です」って言っちゃいますし。このアプリでなら、「大丈夫じゃないです!見てくださいこれ!びしょ濡れです!」なんて練習もできますし、そうするとその後の展開も少し変わります。

最初の方の回は基本的に「Yes/No」や「どっちが~」で応えられる簡単な質問が多いですが、「Yes, I do.」だけを答えるのではなくて、「Yes, I do. It's xxxxx. How about you?」などと会話に肉付けできるようになるといいと思います。どんな言い回しがあるのかは、他の人がどういう会話をしているかを聞くことができます。

まだ前半しかやっていませんが、レベルはやさしめだと思います。子供の声が入ってしまうので、ときどき聞き取りエラーを返されてしまい、なかなか進まないときもあります・・


google翻訳

Lang-8でロシア語の勉強をしているときに、google翻訳の音声入力機能で自分の発音チェックをするといいと教えてもらいました。英語以外にも、ロシア語、フランス語、ドイツ語、各種中国語、などなど多くの言語で音声入力ができました。フィンランド語は非対応だったかな?日本語の翻訳性能は悪いので、あくまで、しゃべった言葉がきちんと認識されているかどうかのチェックに使うといいと思います。ちなみにロシア語の発音チェックでは、英語に訳すようにしています。英語の翻訳なら、割とマシです。ハラショー。


Siri

iPhoneやiPadに入っている、音声ガイダンスです。私は充電節約のためにOFFにしていますが、日本語以外のSiriとも会話できるので、試してみると面白いと思います。ただ、日本語以外のSiriは、結構反応が遅かったです。ウェブで何か調べてるんですかね?



なんか大して目新しくない情報ですみませんが、google翻訳もSiriも、私にとっては盲点だったので載せてみました。Supikiのようなアプリ、他にもあったら教えてください。もう少しビジネス寄りだといいかなあ。

翻訳を少し経験しました

少し前の話ですが、翻訳関係のプロジェクトがあったので、翻訳の勉強をしました。語学は好きですが、翻訳は初めての領域です。よく言われることですが、英語ができることと翻訳ができることは別物ですよね。

プロの翻訳者が、「日本語ができても小説は書けないのはみんな知っているのに、英語ができれば翻訳もできると軽んじられている」と言っていました。これって、プログラミングができても、ソフトウェア製品を作れないのと似ているかもしれません。(普通に動くものは作れるでしょうが、製品としての欠陥があるかもしれないということです。)


翻訳には3分野あるようです。
  1. 文芸翻訳・・・小説などの翻訳
  2. 映像翻訳・・・映画やゲームの翻訳
  3. 産業翻訳・・・ビジネス上の翻訳(技術翻訳ともいう)

翻訳と言うと(1)文芸翻訳や(2)映像翻訳をイメージすることが多いですが、(3)産業翻訳が業界の9割ほどを占めているようです。(3)産業翻訳にはメールの翻訳、マニュアルの翻訳、契約書の翻訳、などなどビジネス上で必要なあらゆる翻訳があり、その分野も医療、IT、特許、製造、などなど多岐に渡っていました。

今回私が関わったのはIT系の(3)産業翻訳ですが、IT系の仕事は量が多く参入しやすい反面、質より量を求められ、賃金は下降傾向にあるそうです。若い人や元SEが多いとか。なるほど。


参考までに、私が読んだ本を一部紹介します。
うちの市の図書館は本当に品ぞろえが悪いので、買うはめになることが多いんですが、借りた本の方が買った本よりも有用だったりすると、ちょっと切ないです。





他には、Apple、Windows、Googleなどのライティングルール、シカゴマニュアル、日系企業のドキュメントなどなどを参考にしました。


例文を調べるのには、Google検索のほか、コーパスを使いました。Google検索だと、用法として間違っている文章でも検索に引っかかってしまいますが、コーパスならばニュース記事などが元になっているので、信頼性が高めです。また、「動詞+teeth」というような品詞を指定した検索もできるので、「teeth」を目的語に取る動詞には、どのような言い回しがあるのか調べたりもできます。

アメリカ英語のコーパス
http://corpus.byu.edu/coca/

こんな感じ。

corpus.png


コーパスなんて今回初めて知りました。他にも翻訳を通じて、いろいろと新しいことを勉強することができたので、またいつか役に立つといいと思います。

英単語の漫画 (3) - click

ソフトウェア開発者にはとても身近な単語「click」ですが、「異性にビビビッと来る」なーんて意味もあるんですよ。 

そんなclickが漫画になっていたので紹介します。

 

-----

http://www.ecenglish.com/learnenglish/lessons/word-day-click

 

click idiom

この漫画は click に複数の意味があることをベースにしています。

名詞の click は、短くてはっきりとした音です。

"The door closed with a click."

"Turn the handle until you hear a click."

口語英語では、click は突然何かを理解したり思い出したりしたときの状況を表すのに使います。

"When she started talking about Boston, it suddenly clicked where I had met her before."

"I had to read the report a couple of times before it clicked."

seat belt とは、乗り物や飛行機で移動するときに体の回りに締めて、事故が起こったときに体をシートに固定するためのものです。(訳注:日本人なら説明されなくても分かりきってますよね。笑)


-----


一応漫画の台詞の意味を書いておきます。 

「どうやってシートベルトを締めたらいいか分からなかったんです。でも突然ピンと来たんです。」 

頭の中で何か(it)がひらめく(click)様子と、シートベルトがカチッと言う(click)様子を掛けた漫画でした。 

ソフトウェアのローカライズにおける12カ条

少し昔の記事ですが、ざっと訳してみました。
英語で開発している前提なので、日本語で開発している私たちとは少し条件が異なりますが、参考になると思います。


Twelve Commandments Of Software Localization
http://coding.smashingmagazine.com/2012/07/18/12-commandments-software-localization/


-----

あなたは新しいウェブサイトを社内発表し、大好評を得ました。デザインは新鮮で、コードにはバグがなく、いつでもリリースできる予定でした。そのとき、ある社員が言いました。「このサイトは日本語でも動きますか?」

あなたは何と答えていいか分からず、汗だくになりました。このサイトは英語で作っていて、他の言語は後からリリースしようと思っていました。とにかく他の言語にも対応させなければなりません。リリース日が過ぎ、その後二ヶ月はバグの修正に追われ、しかもバグの半分を見落としていたことに気づきました。

ローカライズすると、アプリはどんな言語にも対応できる準備ができます。しかも、最初からローカライズしておいた方がより簡単です。以下の12の簡単なルールに従えば、世界中のどこでも動かせるようになりますよ。



1. すべての文字列をリソース化すること


ローカライズの最初のステップでは、ユーザーが目にする文字列をコードから抜き出し、リソースファイルに記述します。例えば、タイトル、製品名、エラーメッセージ、画像の中の言葉など、ユーザーが見るかもしれないすべての文字列です。

大抵のリソースファイルでは、それぞれの文字列に名前を付け、その文字列に別々の翻訳語を設定できるようにします。多くの言語は、次ようなプロパティファイルを使っています。

name = Username


もしくは、次のような .pot ファイルや、

msgid "Username"
msgstr "Nom d'utilisateur"


XLIFFファイルを使います。

<trans-unit id="1">
 <source xml:lang="en">Username</source>
 <target xml:lang="fr">Nom d'utilisateur</target>
</trans-unit>


ライブラリはリソースファイルを読み込み、ロケールと言われる言語と国の組み合わせを元に、適切な文字列を特定します。
文字列をリソースファイルに別にして置いておけば、アプリでサポートするロケールごとにそのファイルを翻訳者たちに送り、翻訳してもらうことができます。



2. 文字列は絶対につなげないこと


ある文字列を別の文字列とつなげると、ほとんどの場合ローカライズ上のバグになります。例えば色などの修飾語句でよく起こります。
ある文房具ストアで、鉛筆、ペン、用紙などを扱っていると仮定しましょう。利用客は買いたい物を選び、色を選択します。そしてショッピングカートで「red pencil」「blue pen」などと表示するために、次のような関数を使うかもしれません。

function getDescription() {
    var color = getColor();
    var item = getItem();

    return color + " " + item;
}


このコードは、色が先に来る英語では正常に動きますが、フランス語ではおかしくなります。フランス語では、「red pencil」は「crayon rouge」に、「blue pen」は「styloencre bleue」と訳されるからです。フランス語(だけではありませんが)では、修飾語句が修飾される語の後に来ます。単純に文字列をつないでいる getDescription 関数では、フランス語のような言語には決して対応することができません。

これを解決するには、パラメータ化された文字列を使い、品名と色の順番を言語によって変えるようにするのです。次のようにリソースの文字列を定義します。

itemDescription = {0} {1}


十分には見えないかもしれませんが、これできちんと翻訳ができます。これを新しい getDescription 関数で使ってみましょう。

function getDescription() {
    var color = getColor();
    var item = getItem();

    return getLocalizedString('itemDescription', color, item);
}


このように、翻訳者が簡単に語順を変更できるようになります。

itemDescription = {1} {0}


この getLocalizedString 関数は、itemDescription というリソース文字列名とは別に、color、item というパラメータを取り、そのリソース文字列にあるプレースホルダをパラメータで置き換えます。

このメソッドは、テキストを含む文字列でも使用できます。

invalidUser = The username {0} is already taken. Please choose another one.

({0}というユーザー名はすでに使われています。別の名前を選択してください。)



3. 句読点はすべてリソースファイルに記述すること


句読点は後から付け加えた方が絶対にいいと思うかもしれません。そうすれば同じ文字列を使いまわせて、例えば、ラベル用にコロンを付けたり、ツールチップ用に何も付けなかったりできます。しかしこれも、文字列結合の悪い例です。

WordPress の PHP を使った簡単なログインフォームを考えてみましょう。

<form>
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="text" name="password"></p>
</form>


他の言語でも動くように、文字列をローカライズします。WordPress では、__(アンダースコア2つ)という関数で簡単にローカライズできます。

<form>
<p><?php echo(__('Username', 'my-plugin')) ?>: <input type="text" name="username"></p>
<p><?php echo(__('Password', 'my-plugin')) ?>: <input type="text" name="password"></p>
</form>


どこがバグか分かりますか?ここでも文字列をつなげてしまっています。ラベルの後ろのコロンがローカライズされていません。これはフランス語などでは間違った表記です。フランス語では、コロンの前後にスペースが必要です。句読点は文字列の一部なので、リソースファイルに記述します。

<form>
<p><?php echo(__('Username:', 'my-plugin')) ?> <input type="text" name="username"></p>
<p><?php echo(__('Password:', 'my-plugin')) ?> <input type="text" name="password"></p>
</form>


これならば、英語では Username: となり、フランス語では Nom d'utilisateur : とできます。


続きを読む "ソフトウェアのローカライズにおける12カ条"

1/35  | 次のページ »