Showing posts with label Japanese. Show all posts
Showing posts with label Japanese. Show all posts

2013-10-21

iBus 1.5の思想による問題

iBus 1.5がUbuntu 13.10で採用されてから、あちこちから混乱の声が挙がっている。色々と議論を読んだ結果、ようやく、iBus 1.5の設計思想を理解したように思う。iBusでは、IMは常に有効になっているものなのだ。

IBus 1.5がUbuntu 13.10に投入されるまでの流れと現状 - いくやの斬鉄日記
結局IBus 1.5の何が問題なのだろうか。 - いくやの斬鉄日記

我々は日本語を入力する時、日本語IMEを使う。これは、日本語の文字があまりに多すぎるため、それだけの物理的なキーを用意することが現実的ではないからだ。そのため、キーボードからの入力を、IMEに変換させ、さらに漢字に変換している。

ところで、日本語中に半角英数を混ぜたい場合は、どうするだろうか。例えばこんなふうに、日本語のsentence中にEnglishを混ぜるルー大柴の芸のようなwritingをしたい場合、どうすればいいのか。

この、「日本語のsentence中にEnglishを混ぜるルー大柴の芸のようなwritingをしたい場合」という文字列を入力する場合、どうするだろうか。ここでは、sentence, English, writing(英語で、意味はそれぞれ、文、英語、記述)という半角英字を入力しなければならない。しかし、日本語を入力中は、キーボードの入力を横取りし、かな漢字に変換する、日本語IMEが有効になっている。日本語IMEが有効になっていれば、この3つの英単語を入力しようとすると、使っているローマ字設定にもよろうが、たとえば、「せんてんせ、えんgぃsh、wりちんg」、となってしまう。

多くの日本語IMEでは、文字列の変換中にF9キーを押せば、変換でなく直接入力した状態にしてくれる。しかし、frustrating(いらつくぜ)と入力するのに、そのキーボード上でfrustratingと入力して、結果として画面には、「fるstらちんg」と表示され、そこからF9キーを押してfrustratingにするのは、極めて「fるstらちんg」だ。frustratingという言葉の意味がわからない、英語はほとんど入力しないようなユーザーしか、そのような入力方法は行わないだろう。そもそも、そのようなユーザーが日本語IMEで慣習的に使われているF9キーを知っているかどうかも、疑問である。

ほとんどの日本語IMEには、半角英数モードというものがある。このモードでは、キーボードの入力は、かな漢字に変換されず、そのまま入力され、そのまま確定できる。問題は、この半角英数モードに切り替えるためのショートカットキーは、F9ほど統一されていない。多くの日本語IMEユーザーは、そのようなキーボードショートカットを知らないのではないか。たまたまそのキーボードショートカットを押してしまい、結果として半角英数モードになり、戻し方が分からずに混乱する人の方が多いのではないだろうか。日本語IMEの使われ方というのは実に様々なので、他人がどのように使っているかはわからないのだが、私のように、たまたま半角英数モードにしてしまい、戻し方が分からずに閉口する人のほうが多いのではないだろうか。

半角英数を入力するには、もっと手っ取り早い方法がある。それは、日本語IMEを無効にすることである。こうすれば、IMEはキーボードからの入力を横取りしない。直接に入力できる。

思うに、これまで、多くのJapanese peopleはJapanese languageに英語、というか半角英数を混ぜる時、単に日本語IMEの有効、無効を切り替えて入力していたのではないかと思う。

iBus 1.5の思想は、どうも、この現状を反映していないように思われる。iBus 1.5の思想は、IMEは常に有効になっているもので、IMEとキーボードレイアウトは同一であり、あらかじめよく使うものとして選んだキーボードレイアウトとIMEのリストの中を、ショートカットで順々に切り替えて使うというもののようだ。IMEは単に切り替えるものであり、有効無効にするものではなくなった。ということは、IMEの有効無効の状態を調べたり、設定したりするAPIは、もはやその存在理由を失う。なぜならば、有効、無効という概念がないからだ。

これは、既存の利用慣習とはまったく異なる思想である。

IMEとは、アプリケーションに入力を渡すものであって、その存在は通常、意識されるべきではないものだが、従来、一部のアプリケーションでは、IMEの存在を意識した処理を行っていた。たとえば、Vimは、独自にモードという概念を持っており、そのモードに応じて、IMEの状態を直接入力に変えられると都合がいいので、そのようなプラグインが存在した。iBus 1.5では、IMEの有効無効という概念が、設計上うすれてしまったので、そのような処理がやりにくくなる。

これは一体どうなるのだろうか。iBus 1.5の設計思想は主流になるのだろうか。

従来、英語には、特に賢いIMEは使われてこなかった。英語入力にも、IMEがあれば便利である。例えば、単語の補完や、綴り間違いや、辞書や、よく入力する文章の補完機能など、様々な利用方法が考えられる。実際、プロプライエタリな日本語IMEの中に、英語に不慣れな日本人向けにそのような便利な機能をもった英語入力用IMEを提供しているものもある。しかし、これまで、英語用のIMEは、あまり開発されてこなかった。

最近、この状況は変わりつつある。スマートフォンやタブレットといったコンピューターの流行のせいだ。このようなコンピューターは、タッチパネルを入力装置に採用している。タッチパネルは、一方では機械的なボタンやゴチャゴチャとした入力装置を省き、薄いパネル一枚のコンピューターを実現できたものの、文字入力という点で、かなり劣っている。タッチパネルでは、文字入力は高速には行えない。

ただし、今やコンピューターの処理性能は大幅に上がった。そのため、賢い入力補助が盛んに開発されるようになった。特に、入力速度の遅さとわずらわしさを補うために、英語でも、単語補完や文章補完のIM機能が発達した。

そのような新しいコンピューターの興隆が、従来のIMにも影響を与えていて、思想が変わっているのだろうと思う。

問題は、従来のキーボードハードウェアで入力する我々は、タッチパネルがもたらした新しいIMの思想を、キーボードにおいても受け入れるだろうか。どちらが優れているかはともかく、慣れは大きい。

キーボードユーザーからは、新しい設計思想はiBusは、好まれないのだろう。おそらく、キーボードユーザーは、別の従来の設計思想のIMに流れていくのではないかと思う。

タッチパネルは確かに面白い入力装置ではあるが、私は、近い将来にキーボードがなくなるとは思わない。物理的な音溝を針でガリガリとなぞって振動させるレコードは、周波数をサンプリングしてビット列で表現し、光の反射具合でビット列を読み取って再び振動に戻すCDに取って代わられた。そして今では、ストレージとネットワークの発達により、光学ディスクもその役目を終えようとしている。これは当然のことだ。しかしタッチパネルは、表面が動的に物理的に変形して隆起し、しかも弾力性を持ち、物理的に押し下げ可能なボタンとして遜色なく機能するような、そういう技術が実用化されない限り、キーボードを置き換えることはないだろう。そのようなタッチパネルに物理的感触をもたらす技術は研究中であるが、まだ実用化には程遠い。

とはいうものの、キーボードの地位はまだしばらく揺るがないと宣言するのは、私にとって、かなり勇気がいることである。というのも、歴史を見れば、盤石だと思われていた技術は、すぐに新技術によって駆逐されていくものだからだ。しかし、私はキーボードに関しては、まだ地位は盤石だと宣言する。

もっとしっかりした順序だった文章を書こうと思ったが、どうも取り留めのない意見がだらだらと続いてしまったので、このへんで切り上げる。

2013-09-29

UTF-32 is NOT a fixed-legnth character encoding

Recently, Hacker News guys are discussing about Unicode and its many encoding schemes.

UTF-8 – "The most elegant hack" | Hacker News
UTF-8 Original Proposal | Hacker News

In the comments, many people believes UTF-32 is a fixed-length character encoding. This is not correct. UTF-32 is a fixed-length code point encoding. Character != Code point. Period.

Actually, I'm not good at Unicode or English as you see. But I think it is my duty to enlighten those blind people who still think characters in ASCII.

What is Unicode?

Unicode defines a set of code points which represents glyphs, symbols and other control code. It defines mapping between real glyphs to the numerical values called the code point. In Unicode, single code point does not necessarily represents single character.

For example, Unicode has combining characters. It has more than one way to express the same character. ñ can be expressed in Unicode code point by either U+00F1(LATIN SMALL LETTER N WITH TILDE) or U+006E(LATIN SMALL LETTER N) followed by U+0303(COMBINING TILDE). This way a sequence of Unicode code points semantically represents single character. Japanese has such characters too. Thus, in Unicode, Character != Code point.

Another expample is a feature called Variant Selector or IVS(Ideographic Variation Sequence). This feature is used to represents minor glyph shape differences for semantically the same glyph. CJK kanzis are the typical example of this. It's consist of Unicode code sequence, beginning with ordinary code point for the glyph, followed by U+FE00 to U+FE0F or U+E0100 to U+E01EF. If followed by U+E0100, it's the first variant, U+E01001 for second variant and so on. This is another case where a sequence of code points represents single character. Wikipedia said, additionally, U+180B to U+180D is assigned to specifically for Mongolian glyphs which I don't know much about it.

Now we know that the Unicode is not fixed-length character mapping. We look at the multiple encoding scheme for Unicode. Unicode is a standard for character mapping to the code point and its not the encoding scheme. Encoding of Unicode is defined by multiple way.

UTF-16

UTF-16 is the first encoding scheme for the Unicode code points. It just encode each Unicode code points by 16 bits length integer. A pretty straightforward encoding.

Unicode was initially considered to be 16 bits fixed-length character encoding. "16 bits ought to be enough for all characters" - a stupid assumption by some idiotic western caucasians so called professionals who has no real knowledge of real world glyph history I presume. Anyway This assumption is broken single-handedly by Japanese since I am fairly certain that Japanese has more than 65536 characters. So do Chinese, Taiwanese(although we use mostly same kanzis, there are so many differences evolved in the past so I think it can be considered totally different alphabets by now) and Korean(I've heard their hangeul alphabet system has a few dozen thousand theoretical combinations). And of course many researchers want to include now dead language characters. Plus Japanese cell phone industries independently invented tons of emozi. It never ends.

So, now Unicode has more than 2^16 code points, single code point cannot be encoded in 16 bits anymore.

UTF-16 deal with this problem by using variable-length coding technique called surrogate pair. By surrogate pair, two 16 bits UTF-16 unit sequences represents single code point. Thereby breaking the assumption of 1 unit = 1 code point. Combining with Unicode's combining characters and variant selectors, UTF-16 cannot be considered to the fixed-length encoding in any way.

But, there is one thing good about UTF-16. In Unicode, most essential glyphs we daily use are squeezed to the BMP(Basic Multilingual Plane). It can fit to 16 bits length so it can be encoded in single UTF-16 unit(16 bits). For Japanese at least, most common characters are in this plane, so most Japanese texts can be efficiently encoded by UTF-16.

UTF-32

UTF-32 encodes each Unicode code points by 32 bits length integer. It doesn't have surrogate pair like UTF-16. So you can say that UTF-32 is fixed-length code point encoding scheme.

But as we learned, code point != character in Unicode. Unicode is variable-length mapping of real world characters to the code points. So UTF-32 is also, variable-length character encoding.

But It's easier to handle than UTF-16. Because each single UTF-32 unit guarantees to represent single Unicode code point. Though a bit space inefficient because each code points must be encoded in 32 bits length unit where UTF-16 allows 16 bits encoding for BMP code points.

UTF-8

UTF-8 is a clever hack by... who else? THE fucking Ken Thompson. If you've never heard the name Ken Goddamn Thompson, you are an idiot living in a shack located somewhere in the mountain, and you probably cannot understand the rest of this article so stop reading by now. HE IS JUST THAT FAMOUS. Not knowing his name is a real shame in this world.

UTF-8 encode Unicode code points by one to three sequence of 8 bits length unit. It is a variable-length encoding and most importantly, preserve all of the existing ASCII code as is. So, most existing codes that expects ASCII and doesn't do the clever thing just accept UTF-8 as an ASCII and it just works! This is really important. Nothing is more important than backward compatibility in this world. Existing working code is million times more worth than the theoretically better alternatives somebody comes up today.

And since UTF-16 and UTF-32 are, by definition, variable-length encoding, there is no point prefer these over UTF-8 anyway. Sure, UTF-16 is space efficient when it comes to BMP(UTF-8 requires 24 bits even for BMP encoding), UTF-32's fixed-length code point encoding might comes in handy in some quick and dirty string manipulation, But you have to eventually deal with variable-length coding anyway. So UTF-8 doesn't have much disadvantages over previous two encodings.

And, UTF-16 and UTF-32 has endian issue.

Endian

There are matter of taste, or implementation design choice of how to represents the bytes of data in the lower architecture. By "byte", I mean 8 bits. I don't consider non-8 bits byte architecture here.

Even though modern computer architectures has 32 bits or 64 bits length general purpose registers, the most fundamental unit of processing are still bytes. The arrary of 8 bits length unit of data. How to represent more than 8 bits of integer in architecture is really interesting.

Suppose, we want to represents 16 bits length integer value that is 0xFF00 in hex, or 1111111100000000 in binary. The most straightforward approach is just adapt the usual writing order of left-to-right as higher-to-lower. So 16 bits of memory is filled as 1111111100000000. This is called Big Endian.

But there is another approach. Let's recognize it as 8 bits unit of data, higher 8 bits 11111111 and lower 8 bits 0000000, and represented it as lower-to-higher. So in physical 16 bits of memory is filled as 000000001111111. This is called Little Endian.

As it happens, the most famous architecture in Desktop and Server is x86(now its 64bit enhancement x86-64 or AMD64). This particular architecture choose little endian. It cannot be changed anymore. As we all said, Backward compatibility is so important than human readability or minor confusion. So we have to deal with it.

UTF-16 and UTF-32 each requires 16 bits/32 bits length of integer. and the internal representation of integer maybe Big Endian or Little Endian. This is a real pain if you store text in the storage or send it over the network.

UTF-8 doesn't take any shit from this situation. Because its unit length is 8 bits. That is a byte. Byte representation is historically consistent among many architectures(Ignoring the fact there were weird non-8-bits-byte architectures here).

Minor annoyance of UTF-8 as Japanese

Although UTF-8 is the best practical Unicode encoding scheme and the least bad option for character encoding, as a Japanese, I have a minor annoyance in UTF-8. That is it's space inefficiency, or more like its very variable length coding nature.

In the UTF-8 encoding, most Japanese characters each requires 24 bits or three UTF-8 units. I don't complain the fact that this is 1.5 times inefficient than UTF-16 for BMP so my Japanese text file is 50% bigger. The problem is, in some context, string length is counted by the number of units and maximum number of units are so tight. Like the file system.

Most file systems reserve a fixed amount of bits for the file names. Linux kernel's default file system Ext4, for example, reserve 255 bytes(1 bytes = 8 bits) for a file name. So the length limitation of file name is not counted by the number of characters, but number of bytes. Most GNU/Linux based distros now use UTF-8 as the default character encoding so the character encoding of ext4 is also UTF-8. For people who still think it in ASCII(typical native English speaker), 255 bytes is enough for the file name most of the time. Because, UTF-8 is ASCII compatible and any ASCII characters can be represented by one byte. So for them, 255 bytes equals 255 characters most of the times.

But for us, The Japanese, each Japanese characters requires 3 bytes of data. Because UTF-8 encoded it so. This effectively divide maximum character limitation by three. Somewhere around 80 characters long. And this is a rather strict limitation.

If UTF-8 is the only character encoding that is used in the file system, We can live with that(although a bit annoying). But there are file systems which use different character encodings, notably, NTFS.

NTFS is Microsoft's proprietary file system that format is not disclosed and encumbered by a lot of crappy patents(How could a thing that can be expressed in a pure array of bits, no interaction with the law of physics can be patent is beyond my understanding) so you must avoid using it. The point is, NTFS encode file name by 255 UTF-16 units. This is greatly loosen the limitation of maximum character length for a file name. Because, most Japanese characters fits in BMP so it can be represented by single UTF-16 units. In NTFS, even the Japanese can practically assume 255 units = 255 characters most of the times.

Sometimes, We have to deal with files created by NTFS user. Especially these archive files such as zip. If NTFS user take advantage of longer file name limitation and name a file with 100 Japanese characters, its full file name cannot be used in other file systems. Because 100 Japanese characters requires 300 UTF-8 unites most of the time. Which exceeds the typical file system limitation(255 bytes).

But, this is more like file system design rather than the problem of UTF-8. We have to live with it.

Unicode equivalence - Wikipedia, the free encyclopedia
異体字セレクタ - Wikipedia(Currently, no English Wikipedia entry for this)

2013-03-15

またまた別のGNU/Linux用のIME、libkkc

Features/libkkc - FedoraProject
libkkc / libkkc / wiki / Home — Bitbucket
libkkc - Gitorious

GNU/Linux用の新しいIME。

今GNU/Linux用には、AnthyとMozcという二大IMEがある(SKKユーザー君はお呼びではない)。ただし、Anthyはもう開発されていない。私は使ったことがないのでわからないが、精度も悪いそうだ。MozcはGoogleが開発を主導しており貢献を受け付けない。修正パッチを送るよりも、どこが間違っているのか文章で説明してくれというぐらい、Googleは第三者のパッチは読まず受け入れずという方針を貫いている。またライブラリ用のインターフェースもなく、他のソフトウェアに組み込みにくいそうだ。

そこで、Red Hatが開発中のIMEがlibkkcだ。何とFedora 19ではデフォルトでanthyをlibkkcに置き換える予定らしい。

Fedora 19といえば、コードネームがシュレディンガーの猫で、2013年6月25日にリリースされる予定だ。

どうもUNIX用のIMEというと、どこかの企業や研究機関等がソースコードを公開して自由なソフトウェアとなったが、その後開発が滞り、保守のみされているものが目立つ。思うに、やはりIMEの開発には自然言語処理の専門的な知識が必要とされ、単にプログラミングできるというだけでは開発できないからなのだろう。そのため、iBusとかuimなどといったIMへの対応などはできても、根本的な開発は出来ずにそのままになってしまうのだろう。

Red Hatといえば、今主流のiBusもRed Hatが開発した。libkkcは主流となれるだろうか。

2012-12-18

「殺しても死なない奴だ」という不思議な表現

Alayavijnana comments on Looking for instances of an often used quote that goes something like "I'm not the kind of guy to die, even when killed"

日本語では違和感のない、「殺しても死なない奴だ」という表現は、英語圏では非常に違和感のある表現になるらしい。

「死んでも死にきれない」なども、同様に違和感を感ずるのだろうか。

2012-08-15

文字あたりの情報量

nabokov7; rehash : Twitterの140文字は他言語では何文字くらいか
Twitterは560文字制限!? 同じ文字数に込められる情報量の違い

Twitterの1 Tweetあたりの文字数制限は140文字である。ただし、日本語における140文字制限と、英語における140文字制限では、明らかに日本語のほうが表現できる情報量が多い。これは、日本語のほうが文字の種類が多いからである。

では、どのくらいの違いなのか。単にASCIIとCJK文字の種類だけで比較するわけには行かない。文字の中には、ほとんど使われないものまで含まれているからだ。

情報量の比較は、同じ内容を各国語に翻訳したロゼッタストーン的な文章で比較する。キリスト教の聖書や、すでに著作権の切れた翻訳の多い有名な小説などで比較できる。

とりあえず簡単な比較をしてみたところ、日本語の情報量は、英語の2倍ぐらいで。中国語の情報量は、英語の3倍ぐらいらしい。

残念ながら、昔の中国語しか知らないので、現代中国語の感覚はよくわからないのだが、たしかに中国語は文字数あたりの情報量が多いと感じる。もちろん、使う文字も多いからなのだが。

ただし、各国語で文字数を省略するための技を駆使した場合、どうなるのだろうか。たとえば、英語ならば綴りの一部を省略したり、同じ発音を連想する短い綴りを使ったりできる。日本語ならば、熟語を利用したり、冗長な助詞や助動詞を省いたりできる。中国語にも、似たような技はあるだろう。

2011-12-05

Safari for Windowsの日本語版の使用許諾書がひどい

Safari for Windowsをインストールしようとして、使用許諾書を読んだところ、ひどい誤訳だらけで、何の意味もなしていないことを発見した。

たとえば、以下のような文面がある。

重要な通知: このソフトウェアがマテリアルを複製するための範囲において、使用することができます。

これを素直に解釈すると、ユーザーである私は、このソフトウェアであるSafariを使って、自由にマテリアル(?)を複製して良い、と読める。

さっぱり理解出来ないので、英語版のライセンスを読んだところ、以下のようになっていた。

IMPORTANT NOTE: To the extent that this software may be used to reproduce materials, it is licensed to you only for reproduction of non-copyrighted materials, materials in which you own the copyright, or materials you are authorized or legally permitted to reproduce.

これは分かりやすい。この文章の意図は、「このソフトウェアは、著作物を複製する可能性がある」と警告しているのだ。翻訳では、文章の途中でぶった切ってしまっているので、訳のわからないものになっているのだ。一体どこの馬の骨が、materialをマテリアルと翻訳して、しかも具体的な定義を与えないことが、いいアイディアだと考えたのだろうか。英語におけるmaterialは改めて定義する必要がない法律用語であったとしても、日本語における「マテリアル」は、そうではない。

しかし、最も問題なのは、以下の文章だ。

2.許諾された使用方法およびその制限
A. 本契約の規定に従い、お客様は、一回につき一台のApple商標が付されたコンピュータにAppleソフトウェアを1部インストールし、使用するための限定的な非独占的ライセンスを付与されます。

Apple商標が付されたコンピュータ? それはつまり、Appleが販売しているコンピューターのことであろう。しかし、このAppleソフトウェアは、Safari for Windowsである。私のコンピューターは、Appleが販売しているコンピューターではない。とすると、私はSafariの使用許諾の条件を満たしていないことになる。この条件を満たすユーザーとは、Boot CampでWindowsを使っているユーザーに限定されてしまう。

ちなみに、原文では以下のようになっている。

2. Permitted License Uses and Restrictions.
A. Subject to the terms and conditions of this License you are granted a limited non-exclusive license to install and use one copy of the Apple Software on each computer owned or controlled by you.

Apple商標が付されたコンピューターなどという文面はない。

2011-08-14

日本語に句読点要らぬ

先日通俗三国志の本を得て読み侍りしが句読点なき由いと不審なりとはいへ本来日本語には句読点てふもの存せずまた読むに不都合なしさらば句読点てふもの畢竟無用なり。

2011-07-16

遠州弁で書いてみるに

VIPPERな俺 : まさか方言だとは思わなかった言葉

このスレ読んで、ちょっと遠州弁を書き下してみたくなったんだに。遠州弁と言っても、俺が使ってるのは、旧浅羽町で話されてた言葉だに。今、市町村合併のあおりを受けて、もう隣の袋井市と合併してしまったので、浅羽町という町はなくなってしまったんだに。浅羽町は、田んぼとメロンハウス(メロン栽培のための温室のことだに)しかないド田舎だに。まあ、基本的には、静岡県西部で使われている一般的な方言と、あまり代わりはないと思うに。

まず特徴的なのは、語尾につく助詞だに。よく、ダニ、ダラと言われるけど、これ実は違うと思うに。ダは余計で、本当はニとラだと思うに。というのも、ダニ、ダラというのは、ニやラをとったら、普通にダで終わる日本語になるら? もちろん、ニとラの意味はなくなってしまうけど、言葉としては問題はないら? ダで終われない言葉の場合、ラやニが直接つくことになるに。ただし、それ単体で、「ダニ!(そうだ!)」、「ダラ?(そうでしょう?)」と使うことはあるに。

さて、ニというのは、強意断定という意味だに。意味としては、!をつけるような意味だに。ラというのは、強意疑問だに。なんでもラをつければ、疑問文になるに。これは単純に?ではなくて、強い念押しの、相手に同意を求めるような意味合いを持つ疑問だに。基本的に、この二つさえ覚えておけば、遠州弁は完璧にしゃべれるに。というのも、今の遠州弁話者の間では、もう遠州弁特有の言葉というのは、ほとんど死語になってるからだに。ラジオやテレビ(まだ当時はインターネットなんて主流じゃなかったに)の影響だと思うに。

もうひとつは、間投詞としてのハァだに。これは、「まあ」のような意味を持つに。子供はあんまり使う言葉じゃなかったに。じいさんばあさんが家にいるような子は別だけど。

あと気をつけることとしては、基本的に遠州弁ネイティブは敬語なんて話さないに。まあ、ド田舎だから敬語なんて必要なかったんだら、きっと。俺は、幼稚園の頃関西から引っ越してきたんだけど、母親が電話口に出るときは、必ず「はい、○○でございます」というので、友達から、「お前んちのおばさん、サザエさんだら、バカだら」ってバカにされてたに。今から思えば、どっちがバカかは、明白だら? 片や敬語を使える人間と、敬語の使えない辺土の土人だに。

まあ、それはともかく、せっかくだから、まだ少々は生き残っていた方言特有の単語を紹介するに。といっても、これがおかしな話で、今から紹介する二語は、小学生しか使ってなかった言葉だに。なぜか、中学生になると、みんな、全然使わなくなってたに。

ひとつは、ジーコン。これは、自転車という意味だに。なんでジーコンというのかは、よくわからないに。多分、自転車のチェーンがジーコジーコと鳴るから、ジーコンなんじゃないかと、その当時は考えてたに。

もうひとつは、ズッパ。これは、「すぐに」、という意味だに。ただ、「すぐに」、じゃ、ズッパの速さには足りないと思うに。だから、ここはソッコーと訳すほうがいいと思うに。ソッコーは全国的に知られてる言葉だら? 用例は、以下のような感じだに。

「おい、今日(学校から)帰ったら、俺んち遊びに来いよ」
「おう、ズッパで行くに」

ズッパで行くときは、たいていジーコンを使うに。ド田舎で家離れてるし。

ズッパの語源も不明なんだけど、素早く移動することを、「つっぱしる」というから、そこから来ているんじゃないかとは思うに。だとすると、ヅッパと書いた方がいいんだろうか(ここでは、あまり自身がないから、ラは使えないに)。もっとも、ヅはあまり一般的ではないから、ハァ、ズの方が自然だら。

なんで中学生になると、ズッパとジーコンを使わなくなるのかは、よく分からないに。日本全国に、子供しか使わない方言は、もっとたくさんあるんじゃないかと思うに。そういう言葉は、方言研究からも、漏れているんじゃないかと思うに。そういう言葉が消えてしまう前に、何とかして採集をするべきだと思うに。

ほんで、今京都に住んでるわけやけど、ほんま京都の言葉はわからへんねん。引っ越してきてから一年ぐらいは、ほんま苦労したわ。皆何言うてるか、さっぱり分からへんねやから。しかも、京都と大阪では言葉が違ういいよるねん。何が違うねん、何が。そんなん全然分からんわ。まあ、今はラジオ、テレビ、インターネットなどの普及で、明確な違いはどんどん薄れてきてるんやろうけど。いま書いてるこれも、ほんまの京都弁やないと思うんや。まだ京都に住んでからそんなにたってへんもん。

でもな、京都に住んでからおもたんやけど、古典って、やっぱり当時の都である、京都の発音で読まれてたんやろか。たとえば、今昔物語集には、「早ゥ」ってな言葉が頻出するんや。今の京都弁でも、「はよぅ」とかいうやろ。今の発音は、当時の発音をどのくらい残してるんやろか。

もっとも、この早ゥは、はやくしろという意味では、あまり用いられてへんねやけどな。大抵は、以前に知られていない事実が判明したときに、「早ゥ、○○ナリケル」なんて使ってるんやけど。まあでも、今の一般的な用例がないわけやない。例えば、今昔物語集の巻第二十八 金峰山別當、食毒茸不酔語第十八では、今の別當がなかなか死なないので、役職が空かず、「此ノ別當早ゥ死ネカシ」といって毒キノコを食わせる話があるんや。なかなか人間的な発想で面白いやろ。他にも、弘法大師が栗を煮るのを邪魔した修円僧都と、「互ヒニ死ネ死ネト呪詛シケリ」とあったり、古典にしては珍しく、人間味あふれる本や。読んどかな損やで。

2011-05-20

2011-04-28

Translation is impossible

This is one of planning posts explaining about the situation of Japan and programming. This time, I would like to write about non technical matters. How bad the translation is.

Last time, I explained Why Japanese don't know English. Short answer is: We don't need to because there are enough translations.

So It's all about translation. Is it good? Short answer, No. Long answer, NOOOOOOOOOOOOOOOOO.

I say, translation is enough to be a good programmer. You can't be the best programmer by translation.

The translation, in general, is horrible.

The author of Boost.locale said by using English, It's easy to translate to other languages.

You even do not have to be a professional tanslator with a degree in Lingustics to translate messages from English to your own language.

This is the last thing localization library designer can say.

Translation is a bad idea. Translation is a workaround. It's works as lossy encoding like using 32kbps mp3. It just barely sufficient to grasp the meaning of original text. All non-essential nuances are removed.

Especially, translation between English and Japanese are nightmare.

That's not all. You can't avoid mistranslation.

I'll show you one example. One example that is enough to makes you understand that translation never works. The most infamous mistranslation in the history of computer science. Brace yourself.

There is a book called "The Programming Language C++ 3rd" by Bjarne Stroustrup. Of course, There is a Japanese translated version for this. At 4.4.1 Integer Literals [dcl.int.lit] of this book, there is a sentence:

on a machine on which an int is represented as a two’s complement 16-bit integer

This was translated in Japanese as follows.

2つの補い合う16ビット整数でintを表現するマシンでは

(Literally translated back to English by me.)

on a machine on which two 16-bit integers that are complementing each others represents an int

I'm not joking. I don't make up this. I tried to translate as literal as possible. It's real. It literally says "two 16-bit integers". This set of integers are somehow complementing each others. And it somehow represents an int. Yes this two integers represents an int. not "be represented".

This legendary horribly translated version of his book is still sold even today. You can find it in Japanese local bookstore.

Of course, there are books written by native Japanese. But for some reason, it only covers the basics. So we have to read translation.

This problem can be solved if we all learn English. But that's impossible. I think the reason of that is a good topic for next post.

2011-03-20

Chrome extension: 青空縦書きリーダー

青空縦書きリーダー - Google Chrome extension gallery

青空文庫 縦書き拡張 - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtechをみて、色々と惜しい感じがしたので、自分でも作ってみた。

Google Chromeのエクステンションとして動作する。何か特別なことをする必要はない。青空文庫のXHTML版が、自動的に縦書きになる。

例えば、森鴎外の舞姫とか、夏目漱石の吾輩ハ猫デアル中島敦の山月記などがおすすめだ。

chrome://extensions/のオプションから、フォントの種類や大きさ、マウスホイールの挙動、追加のCSSを変更可能。

ちなみに、この仕組を使えば、青空文庫以外にも、単純なテキストで構成されているサイトなら、縦書き化が可能である。いまは任意のサイトを縦書き化するためのUIを実装していないが、需要があれば実装するつもりだ。

バージョン情報

Version 0.40
パーミッションを変更したため、アップデート後に手動で有効にする必要があります。
ブラウザーアクションを実装。
任意のページを縦書き化が可能。
ただし、Chrome自体のバグのため、ローカルファイルは縦書き化できず。
参考:Issue 76705 - chromium - file:// not working for "permissions" in extensions, but does work for content scripts. - An open-source browser project to help move the web forward. - Google Project Hosting
ルビ表示の切り替えが可能。

Version 0.30
設定の保存方法を変更
以前のバージョンの設定は引き継がれません。

Version 0.21
marginを微調整

Version 0.20
キーボードショートカットのエミュレートをサポート
フォント設定の見直し(複数選択可にした)

Version 0.12
設定をしないと、マウスホイールのエミュレートが効かない問題を修正

webkitにおけるvertical writingは、まだ実装途中であり、正しく動作しません。そのため、このextensionは、将来、互換性を損なう形でアップデートされるか、あるいは放置されているかもしれません。

縦書きtextarea要素

以下は、縦書きのtextarea要素の例である。Windows上のChromeで動く。もちろん、入力できる。是非とも試してもらいたい。

赤いピルを飲むと、不思議の国は続行だ。ウサギの穴がどれだけ深いか見せてやろう。

2011-03-18

否定疑問文:しませんか? はい、します

「勉強を一緒にしませんか?」、「勉強を一緒にやりませんか?」
「はい、します」

日本語は否定疑問文を論理的に答える言語である。ところが、ある外人から、このような例を提示された。「これは、否定疑問文だが、答えるときには、英語と同じく、非論理的に答えているではないか。やはり日本語の論理性とやらにも例外があると見えるな」云々。

はて、確かにこれは、否定疑問文のように思われる。しかし、答えは非論理的になる。これはどういう事だろう。日本語にも、非論理的な例外が存在するのだろうか。

ひとつ思うのは、私はこの、「しませんか?、やりませんか?」という形の疑問文を、否定疑問文のように認識できない。ただたんに、丁寧な表現であるかのように感じている。だから、非論理的に答えているというより、そもそも否定疑問文だとは認識していないのである。

これがもし、「何でお前は勉強を一緒にしないんだ?」という質問であったならば、「いや、やるよ」という答えになる。これは、論理的な答えである。

あるいは、本の虫: 多くない文で結論したように、「せん?」というのは、たんなる念押しの表現なのか。

Chromeがいつの間にか縦書きを実装し始めていた

注意:ここに示したCSSは、実用的な目的には、まだ使ってはならない。何故ならば、-webkitベンダープレフィクスを使っているからである。。これは、webkitの実装がまだ完全ではないことを意味する。

Chrome(というよりもwebkit)がいつの間にか、縦書きを実装し始めていた。つまり、CSS3のwriting-modeプロパティのvertical-rlとvertical-lrをサポートしているのである。まだ、ベンダープレフィクスが必要なので、完全な実装ではないのかもしれないが、少なくとも、ある程度は動くようだ。

例えば、以下の様なマークアップが、

<p style="
writing-mode : vertical-rl ;
-webkit-writing-mode : vertical-rl ; 
font-family : '@MS 明朝' ;
font-size : 16pt ;
height : 30em ;
">
本分
</p>

 ちょう邯鄲かんたんの都に住む紀昌きしょうという男が、天下第一の弓の名人になろうと志を立てた。おのれの師とたのむべき人物を物色するに、当今弓矢をとっては、名手・飛衛ひえいおよぶ者があろうとは思われぬ。百歩をへだてて柳葉りゅうようを射るに百発百中するという達人だそうである。紀昌は遥々はるばる飛衛をたずねてその門に入った。
 飛衛は新入の門人に、まずまたたきせざることを学べと命じた。紀昌は家に帰り、妻の機織台はたおりだいの下にもぐんで、そこに仰向あおむけにひっくり返った。とすれすれに機躡まねきが忙しく上下往来するのをじっと瞬かずに見詰みつめていようという工夫くふうである。理由を知らない妻は大いにおどろいた。第一、みょうな姿勢を妙な角度から良人おっとのぞかれては困るという。いやがる妻を紀昌はしかりつけて、無理に機を織り続けさせた。来る日も来る日もかれはこの可笑おかしな恰好かっこうで、瞬きせざる修練を重ねる。二年ののちには、あわただしく往返する牽挺まねき睫毛まつげかすめても、絶えて瞬くことがなくなった。彼はようやく機の下から匍出はいだす。もはや、鋭利えいりきりの先をもってまぶたかれても、まばたきをせぬまでになっていた。不意にが目に飛入ろうとも、目の前に突然とつぜん灰神楽はいかぐらが立とうとも、彼は決して目をパチつかせない。彼の瞼はもはやそれを閉じるべき筋肉の使用法を忘れ果て、夜、熟睡じゅくすいしている時でも、紀昌の目はカッと大きく見開かれたままである。ついに、彼の目の睫毛と睫毛との間に小さな一ぴき蜘蛛くもをかけるに及んで、彼はようやく自信を得て、師の飛衛にこれを告げた。

このように、見事な縦書きになる。(Windows上のChromeで動作を確認)

ただし、現状のChromeの実装には、いくつか問題がある。まず、通常の横書きのように、word wrapがきかないという問題だ。そのため、上の例では、仕方なくheight propertyを使用している。また、フォントの問題もある。頭に@のつくフォント名は、実際のフォントではなく、Windows独自の機能である。そのため、このマークアップは、Windows以外では動かないだろう。

また、フォントの描画が、何か微妙におかしい。

禁則処理もされていないので、改行が不自然だ。その他、あらゆる日本語の組版の常識が欠けている。

そのため、この縦書きは、まるで画像を貼り付けたようにみえる。何もかもが固定、環境依存で、あまり使いやすくはない。

追記:ルビのせいで、行間がまばらになるという指摘があったので、とりあえず修正した。行間は、CSSのline-heightプロパティで修正可能である。実用的に行間を調節するには、ルビのrt要素のスタイルも調整する必要がある。ブログのようなサイトにおいて、この調整を記事単位で可能にするために、style要素のscoped属性を、早くサポートしてもらいたいものだ。

追記2:現行のChromeでは何故か、vertical-lrがvertical-rlと同じように動く。まだ不完全である。

追記3:縦書きをマルチカラムレイアウトと組み合わせてみた。本の虫: Chromeで、CSSによる縦書きとマルチカラムレイアウトの合わせ技を試す。この縦書き表示に感動した人は、これを見ると、もっと感動できるはずだ。

追記4: 青空文庫を縦書き化できるChrome extensionを作りました。青空縦書きリーダー - Google Chrome extension gallery

CSS Writing Modes Module Level 3

2011-03-06

How Not To Learn Japanese

I've met many forigners studying Japanese language in the Internet. I admire the effort to learn something completely different language like Japanese. But I concern some people studying the Japanese language in totally wrong way. By using Romaji and remembering Kanjis.

The Romaji is a mapping from Japanese kana to latin alphabet. Some people studying Japanese by using Romaji. That is a really bad idea.

They use Japanese like this.

Watashi ha nihongo ga wakaru.

This is as bad as following.

アイ ノー イングリッシュ(I know English)

No Japanese use Romaji for writing Japanese. Sure, Romaji is a one-to-one mapping to/from Kana. But learning Japanese by Romaji is like learning English by Kana or using Caesar ciphered version of alphabet.

If you really want to use Japanese. You must avoid using Romaji. Forgetting the Romaji is even better.

Remembering Kanjis is also a bad idea. It is true if you want to read Japanese text just like natives, you have to understand a few thousands Kanjis. But still, remembering each Kanjis doesn't improve your real Japanese skill.

Kanjis are mostly used in compound form. Remembering each Kanji meanings doesn't help you understanding the compound words.

For example, 名 may be translated to name and 前 may be translated to front. Then what does 名前 means? It means name. We, Japanese, recognize it a single word. We don't recognize it as "name + front".

Also, avoid remembering Kanji meanings by English translation. 名 means なまえ, not a name. "name" is a translation. You must understand it as it is. Not by translation.

To actually learn Kanjis, one must learn from context. Just remembering individual kanjis doesn't improve your practical Japanese skill.

2011-02-21

多くない文

ある日本語を学んでいる外人から、こんな質問を受けた。

本当に日本語は常に否定疑問文を論理的に答えるのか? 例えば、「多くない?」って聞かれたときはどう答えるんだ。

はて、これはどうしたことか。私は今まで、日本語は常に否定疑問文を論理的に答えると考えていた。しかし、「多くない?」という疑問文に対しては、目的物が多くなかった場合、

うん、多くないね。
いや、多くないよ。

と、両方答えることが可能であるし、目的物が、多い場合にも、やはり同様に、二種類の答え方が可能だ。

はて、これはどうしたことだろう。常日頃、「英語はなんて非論理的な言語だ。日本語を見よ」と笑っていたのが、急に恥ずかしくなってきた。

ところが、どうも思うに、「多くない?」という文章は、私の感覚からすると、肯定疑問文にも、否定疑問文にも、受け取れるのだ。事実、英語のように非論理的に答える場合、私は肯定疑問文だと解釈している。とすれば、日本語の否定疑問文における論理性は崩れないことになる。

しかし、なぜ肯定否定の両方の解釈が可能なのだろうか。「多くない!」と言う場合、これは確実に否定である。しかし、疑問文に使ったときは、肯定とも否定とも取れる不思議な印象を受ける。

少し考えた結果、これは、「多く + 無い」ではなく、「多く + な + い」という文法なのではないかと考えた。日本語の文法規則には、色々と諸説あって難しいが、とりあえず手持ちの学研国文法(初版が昭和39年という、かなり古い本である)を引いてみると、果たして、な、い、という助詞が載っていた。

助詞「な」には、三種類あるが、感動、驚嘆の意をあらわす種類であろう。

助詞「い」は、念を押す意を表すとされている。

君の頭は確かかい。

夏目漱石「それから」

父さんが来たを思って、好い気になって泣くない。

島崎藤村「嵐」

島崎藤村の例は、最近は使わないし、どうも今問題の文法とは違うような気がするが、とりあえず、助詞「な + い」という形はあり得る。

つまり、「多くない?」とは、通常の文をイントネーションを上げ調子にして疑問文にする、「多く + 無い ?」と、2個の助詞によって構成される、「多く + ない + い ?」と、両方の解釈が可能であり、それによって、肯定とも否定とも取れる印象をあたえるのだろうと考えた。

しかし、また外人の曰く、「でも、助詞「い」は、単に念を押す程度の意味しか持たないから、省略しても意味が通じるようになるんじゃないか。「多くな」だけで、本当に意味を成すのか?」

そう言われてみれば、どうもこの解釈は怪しい。「多くな?」という文は成立しない事もないだろうが(それってどんな感じ? 例えば多くな?)、やはり、どうも難しい。

どうにもうまい解釈が出てこない。

追記:だいぶ前から一方的にGoogle Readerで購読していた人が、この問題を考えてくれた。

多くない? - M59の記録

「ない」という言葉は、打ち消し、もしくは念押しのどちらの意味にもとれるので、結果として、文章が肯定なのか否定なのか、どちらにも解釈できるという説である。この解釈の方がよさそうだ。

2010-12-12

これは良いニュース

金沢市長選:当選陣営がツイッターで選挙戦 指導を無視し - 毎日jp(毎日新聞)

たぶん、ネット利用が公職選挙法違反に当たるかどうかは、前例がないから誰も分からないんだろう。そんな法律に縛られて今まで選挙期間中はインターネット禁止などという時代錯誤のドブ板選挙をしていたのでは、日本の将来のために害悪である。

本来ならば、とっくの昔に公職選挙法は改正されているべきであるが、いまだに変わっていない。これは、現行の政治家が、特に変える必要はないと考えているためであろう。日本の将来のために害悪である。

2010-11-30

常用漢字表

常用漢字表

まあ、いろいろ紆余曲折があったようだが、(どっかのアホが俺とか糞などという漢字は野蛮であるから含めるべきではないとも主張したと聞いているが)、だいぶマシになったのではないかと思う。

とめ、はね、はらいなどの、表記の些細な違いは、区別する必要がないと明記してあるのもよい。本来、それは些細な違いなのだ。小学校などでは、いまだに教科書体にそって正しいとめはねはらいを書かなければならないなどと教育しているのだろうか。嘆かわしいことだ。

2010-10-12

シカトの語源は花札

「シカト」という言葉がある。意味は「無視」という意味だが、この語源はなかなか面白い。

シカト - 語源由来辞典

花札に由来する言葉で、少なくとも50年の歴史があるらしい。知らなかった。