2012年5月4日金曜日

U+200BとU+200C

ZeroWatchの修正が早速来ていました。

ZeroWatch修正、設定の追加やチューニングなど - ニコニコ動画開発者ブログ

やはりコメント入力については要望が多かったようで、「常にコメント入力フォームをプレーヤー下に表示」 というオプションが追加されていました。


改行の入力もできるようになっていました(Ctrl+「.」)。しかしおそらく想定されていたとは言え、開発なさっている方々はGWだというのに大変ですね・・・UIを一新するという試み自体はいいことだなと思うので、フィードバックを活かしながらさらに改良を進めてくださることを期待したいです。
ちなみに新たな入力フォームでAlt+「160」(U+00A0)単独での入力はエラーになりました。まぁそんなことしてるのは自分だけかもしれませんが。
追記:
その後Alt+「160」(U+00A0)単独で入力できることを確認しています。プレーヤーの修正と関係あるのか、この時はコメント自体が弾かれただけだったのかはわかりません。

さて前々回の日記の中で、U+200C(ゼロ幅文字)を使ってフォント変化文字の隣接による影響を無効にする例を紹介しました。これについて、「U+200B(同じくゼロ幅)じゃダメなのか?」というツッコミをいただきました。
ゼロ幅文字と言えばなぜかU+200Cをいつも使っていたので、考えたこともありませんでした。今さらながら確かめてみました(オワニン開さんご指摘ありがとうございました)。

今度はGulim化で見てみます。SimSun化でも同じはずです。


上図の「a」をゼロ幅文字に置き換えてみます。
コードポイントU+200Xの並びには、5つのゼロ幅文字があります:

  • U+200B    Zero Width Space
  • U+200C    Zero Width Non-Joiner
  • U+200D    Zero Width Joiner
  • U+200E    Left-To-Right Mark
  • U+200F    Right-To-Left Mark

それぞれ別の名前がついているのは機能の違いを示していますが、ここでそのことは関係ないと思われます。下図が実際に置き換えてみたところ:


U+200Bだけダメですねwこれは知りませんでした。
U+200Bと他とは何が違うんでしょうか。少なくともコードページの定義には違いがありました。

Unicode cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257 cp1258
200B - - - - - - - - -
200C - - - - - - 9D - -
200D - - - - - - 9E - -
200E - - - - - FD FD - -
200F - - - - - FE FE - -

1255はヘブライ語・1256はアラビア語です。U+200Bだけどちらにも定義がありません。
なおCJKコードページにはいずれの文字も定義はありません。

自分が勝手に言ってることですが、ニコニコプレーヤーの既定のフォントはArialであり、ArialがサポートするWindowsコードページに定義がある文字はそのままArialで表示されていると思われます。

Code Pages Supported by Windows - MSDN

Arial - Version 5.05 - Microsoft typography

そしてArialで表示されている文字は、冒頭の図の「a」のように隣接の影響を無効にします。U+200Bだけダメなのは、そういうことじゃないのかなと思いました。

じゃあU+200Bのフォントはなんなのか・・・は、長くなるので割愛します。調べてみたものの特定はできませんでした。さしあたり実用的な意味では上の結果だけわかればいいですよね^^;

本題とまったく関係ないんですけど、この件を調べてておもしろいものを見ました。
Windows 7でarialbd.ttf(Arialの太字)を無効にしたところ、英字が斜体になりました。


Arialが太字らしいことはわかってたのでどうなるんだろと思ったのですが、こういう挙動をとるとは。

2012年5月1日火曜日

ZeroWatchで見てみた

事前の告知通り、ニコニコは今日からプレミアム会員のみを対象に新バージョンZeroがリリースされました。
新しい動画視聴ページ・ZeroWatchは、ずいぶん大胆に変えたなーという印象です。動画に集中しやすいようなシンプルなデザインや話題の「ニコる」機能など、いろいろ考えられてるなとは思いました。
まだ公開されたばかりでこれから仕様の変更や修正はいろいろあるんでしょうが、とりあえずコメント機能に限って気づいたこと。

コメント入力欄が画面の中に表示されるのは賛否ありそうです。いや、否が圧倒的・・・?


他のコメントの中に自分もコメントする、みたいな一体感を狙ったんでしょうか。だとしたらアイディアはいいかなと思いましたが、正直不自然だし使いづらいw
それと改行の入力(Alt+「10」およびCtrl+「.」)は現時点ではできませんでした。ただCtrl+「.」というコマンドも後からわざわざ追加されたものなので、いずれは実装されるのかもしれないですね。Alt+「160」(U+00A0)は入力できました。

5/4追記:
上の件については、「常にコメント入力フォームをプレーヤー下に表示」というオプションが追加されました。 また改行の入力も実装されました。

前回の日記でも書いたように、コメントのサイズはやはり既存のプレーヤーをズーム125%にした状態と同じように見えます(いつもFirefoxで見てますが、これはChromeでやりました)。上下のズレ方も少し見た限りでは同じようでした。
下図は、いわゆる二重リサイズ・big10行(上下固定)のコメント表示を比較しているところです。
※既存のプレーヤーの画面は4:3です。そのことはここでは特に関係ありません。
 

全く同じかはわかりませんが、ズームした時と似たようなズレ方をしてました。
また、下図はshita smallのコメントを積み上げてみたところ。既存のプレーヤーだと17文字目は入り切らずに弾幕モードで浮いてしまいますが、Zeroでは入り切ってしまいました。


これは既存のプレーヤーを125%にしても同様でした。ふだんそんなことしないので知りませんでしたがw

と言う訳で、これまでのCA全体がぐっちゃぐちゃになるような事態ではないみたいです。しかしコメントによっては上のようなズレで影響を受けます・・・まあ、これは今までもあったことですけど。自分自身、今のモニターではプレーヤーが小さすぎるのでいつもズームして見てます。近眼だし。

それよりこのプレーヤー、新機能が追加されてるだけにたぶん重いです。つい最近それなりのスペックのPCに換えたばかりで個人的にはそれほど感じません。でも動画を見てると、「重い」というコメントを見かけます。これだけデザインを一新してしまった以上、改善されるとしても限界があるかもしれません。
改行や弾幕など再生への負荷が高そうなコメントは、これまで以上に配慮が必要とされるのかなと思いました。

2012年4月28日土曜日

意図せず明朝化

今朝ニコニコ超会議の生放送を見たら、プレーヤーがZero仕様になっていました。
生放送なので動画視聴プレーヤーの仕様とはまた違うでしょうが、いろいろ気になる点はありました。一つだけ、画面サイズが大きくなってコメントのサイズはどうなってるんだろう?

下図は視聴者の方が実際に投稿していたコメントと、ブラウザのズームを125%にして既存のプレーヤーで自分が同じコメントをしたもの(黄枠で囲まれた方)を比較したところです。


重ねると完全に一致。これを見た限りでは、単にズームしたのと同じことなのかなぁと思いました。

報道によればZeroはまず5月1日にプレミアム会員のみ対象にリリース、以前の仕様変更の時と同じように旧モード(現在は原宿)に戻すこともできるようです。

ニコニコ動画は5月1日に「niconico」に進化 - AV Watch

上の記事だとID数2725万人のうちプレミアム会員162万人とあります。プレミアムにする人は視聴の頻度が高いでしょうから、この数字で一般:プレミアムのリアルな比率は測れないでしょうが・・・まぁ新旧両モードが併存してるうちに、ゆっくり調べてみたいなーと思います。

さて、この件とは全然別の話です。
先日ニコニコチャンネルでアニメを見てたら、気になるコメントがありました。


 「あ」を見てわかる通り、画面全体で明朝化(フォントの連れ回し)が発生してるわけではありません。他のコメントがなんともないのに、「前後の~」のコメントだけが明朝化(SimSun化)してました。
不思議に思って調べたら、「繋(U+7E4B)」が異体字(U+7E6B)になっていました。U+7E4Bであればこのようなことは起こりません。


MS Pゴシックにはどちらもあるのですが、CJKコードページの定義の有無が異なりました。

Unicode 字形 CP932 CP936 CP949 CP950
U+7E4B 8C71 BF8E - -
U+7E6B - C04D CDA8 C3B4

U+7E6Bの方はCP932にだけ定義が無く、SimSun化文字として働くようです。
それにしてもこのコメントをした方はなんで異体字を使ったんだろう?と思ったら、 変換ではどちらも出てくるんですね。下図の左はGoogle日本語入力、右はMS-IME2010です。


それでこういうことが起きたのかなぁ?おもしろいなーと思いました。
そう言えば、こういうコメントも見たことがありました。


斜めの矢印記号ってSimSun化文字なんですよね。上の話と同様、CP932にだけ定義がありません。

Unicode 字形 CP932 CP936 CP949 CP950
U+2196 - A849 A2D8 A1F8
U+2197 - A84A A2D6 A1F9
U+2198 - A84B A2D9 A1FB
U+2199 - A84C A2D7 A1FA

SimSun化を回避したい場合、矢印記号が後ろにあるなら簡単です。矢印との間に半角英数字(Arial)をはさんで隣接しないようにすればいいので、ゼロ幅文字を使えば解決できます。


矢印記号が前にある場合は、先頭に「ゴシック化文字」が必要になってしまいます。


っていうか、なんで後ろにある場合は隣接しないようにしただけで明朝化を回避できるのか?
個人的に(プレーヤーの仕様変更とかよりw) 気になるのはこのことです。これが「フォント変化」という現象の本質ではないかなと思うからです。そもそも「フォント変化」という表現自体、適切ではないのかもしれない。おいおい考えていきたいです。

2012年4月19日木曜日

あらためてMingLiUについて(3)

ニコニコプレーヤーの画面がでかくなるという話で、具体的なサイズが公表されていました。

【事前告知】新バージョンZeroに伴う変更 - ニコニコインフォ

当然コメントの表示にも影響あるでしょうが、実物が来ないことにはわかりようがないですね。
リリースされたら、またいろいろ調べてみるのが楽しみです。

さて前回の続きです。XPではMingLiU(PMingLiU)にならないMingLiU化をどう扱うか?
実際そこまで考えるのかという話ですが、まあフォント変化の挙動を見る実験です。

ArialやMS Pゴシックで表示されたままでは、MingLiUと見た目が違うだけでなくコメントの幅まで変わってしまいます。代わりにSimSunにすれば見た目も似せた上で幅も同じにできるでしょう(下図)。
図ではMingLiU化文字にU+02CD、SimSun化文字にU+2506をそれぞれ使っています。


XPの場合、先頭のフォント変化文字とは別のフォント変化をコメントの途中から発生させることができます。例えば先頭がSimSun化でも、途中にGulim化文字を置けばそこからGulimに変わります。一方Vista以降では途中にGulim化文字を置いても変わりません。この違いを利用します。

ただし(2)で書いたように、XP上のMingLiU化文字は(たぶん)CP950に定義がある文字に隣接しなければ豆腐になります。下図はU+2506を2文字目に入れてみたところです。U+2506はCP936にしか定義がありません。


これではU+02CDの幅が縮んでしまい意味がありません。そこでさらに2文字目へCP950に定義がある漢字を入れてみます。


XPでは、これに隣接することでU+02CDがMingLiUの字形で表示されます。またその効果で漢字はゴシックで表示されますが、7のMingLiUと幅は同じです。
そしてXPの特性により、3文字目のU+2506以降はSimSunに変わります。U+2506はCP950に定義が無いため、U+02CDの効果が及ばないのだろうと思います。これで7とXPの幅全体が同じになりました。

2文字目が漢字である必要はありません。CP950に定義があり、かつMingLiUと同じ幅で表示されればいいわけです。下図はCP950に定義があるU+FE52にしてみたところです。


後はフォント変化に利用したこれらの文字を隠してごまかしたいところ。3文字もあるとなかなか厳しいです。


例の方法で画面の外に出してしまえば、まだ実用性があるかなと思います。


ところで本題からそれますが・・・
上の例はWindows 8だとまた別の問題が発生します。 U+2506が縮んでしまうのです。後ろに漢字やひらがなが来ると字形が変わるようです。


旧ブログで、これはSegoe UI Symbolではないかという話を延々と書きました。 PMingLiUのフォントリンクは7も8CPも同じで、なぜこんな現象が起きるのか今のところ謎です。
文字によって起きたり起きなかったりで、下図はU+2506をU+3016に替えて比較したところです。U+3016はU+2506と同じくCP936にだけ定義があるSimSun化文字です。


8はまだベータ版の段階ですから、あまり考えてもしょうがないのかもしれません。ただSegoe UIは8のUIフォントとしてフィーチャーされているので、とても気になっています。

2013/4/13ご質問用の画像追加:



2012年4月11日水曜日

Excel 2010×2003:「リンクされた図」の不具合

「リンクされた図」(旧「図のリンク貼り付け」)でなんかおかしかったので。

セル範囲をコピーして図オブジェクトとして貼り付けるのには、いくつかパターンがあります。下図はセルA1からB5をコピーして4種類のパターンで貼り付けてみたところです。


「カメラ」ってどれだけ知られてるんだろうか。機能としては「リンクされた図」と同じだと思います。
さて、この4つのオブジェクトを少し拡大します。


そしてシートごとコピーしてみたところ:


「リンクされた図」と「カメラ」が元のサイズに戻っています。
いや、実は元のサイズより微妙に縮んでるんですが・・・なんでこんなことが起きるんだろう。

試したら2003でも2007でもこんなことは起きませんでした。2010特有の挙動みたいです。ググってもこんなことを言ってる方は見つけられませんでした。ただ他にも2010だけで不具合の出るケースはあるようです:

Excel2007でリンク貼り付けした表をExcel2010で開くとリンク貼り付けした表がつぶれてしまう。 - Microsoft Answers

まぁでも図のリンク貼り付けってあんまり使われてないんでしょうか。 便利で好きなんですけど。

2012年4月9日月曜日

Excel 2010×2003:FormatConditionsで不具合

VBAからセルに条件付き書式を設定した時の話です。
以下のようなコードでした。説明のため単純にしてありますが、実際はセルによって条件付き書式の内容を変えるという処理でした。そのためセル範囲まとめてではなく、こんな形になってました。

For i = 1 To 10
    Sheet1.Cells(i, "A").FormatConditions.Add Type:=xlExpression, _
        Formula1:="=C" & CStr(i) & "> 0"
    Sheet1.Cells(i, "A").FormatConditions(1).Interior.ColorIndex = 45
Next

Excel 2010で実行した場合、特に問題ないように見えます:


ところが2003で実行するとおかしな結果になりました:


オレンジにならないセルA6の条件付き書式を確認してみました:


なぜかC11を参照しています。 A列を上から見たところ、C1、C3、C5、C7、C9、C11・・・と参照先が1行おきになっていました。
なんでだかはわかりませんがセル位置を相対参照にしていたことが問題なようです。Formula1のところで$をつけるかR1C1形式で絶対参照にすれば、2010と同じ実行結果になりました。

ちなみに相対参照のままの時、実行時にアクティブセルがA1以外だと参照先がさらにズレました。むしろ不具合というならこっちかもしれませんけど、今さら2003の仕様にツッコんでもなーと思ったのでこれ以上は調べませんでしたwとにかく絶対参照にしておけば問題ないみたいでした。

2012年4月4日水曜日

あらためてMingLiUについて(2)

Windows XP上のニコニコプレーヤーでは、MingLiU(PMingLiU)が表示できないわけではありません。旧ブログの時に、フォントリンクへArialを追加してリンク先に表示させたいフォントを設定するという実験をしました。この方法でなら、MingLiUも表示させることはできます。
しかしCJKフォント変化の挙動では、なぜかMingLiUだけが表示されません。フォント変化が起きないのではなく、起きているにもかかわらずArialやMS Pゴシックなど他のフォントで表示されます。7・Vistaとは字形だけでなく文字幅まで異なってしまいます。このことがコメントに利用する際ネックになると思います。

まずMingLiU化文字自体がどう表示されるか見てみます。

(1)に掲げた一覧の通り、知る限りでMingLiU化文字はU+02CD・U+2027・U+2574の三つしかありません。実はこの他にも私用領域になら多数あり(おそらくU+E865からU+F848の範囲全部?)、最初にMingLiU化を教えていただいたのもU+EF04という文字でした。しかし私用領域ということは環境によって何が表示されるか予想できず、あえて使う必要もないのかなと思います。


さてXPの表示です。各MingLiU化文字は、単独の状態および「あ」に隣接した状態では豆腐です。三番目の図は間に全角スペースをはさみました。こうすると字形が表示されています。
MingLiU化文字に隣接した「あ」(U+3042)と全角スペース(U+3000)の違いは、コードページ950での定義の有無ではないかと考えています。

Unicode CP932 CP936 CP949 CP950
U+3000 8140 A1A1 A1A1 A140
U+3042 82A0 A4A2 AAA2 -

コードページ950に定義がある文字に隣接すれば、字形が表示されるのではないかということです。ただしこれはU+3000以降の話で、それより前のコードポイントの文字では何に隣接させてもどうも豆腐のままみたいです(全部確かめたわけじゃないですが)。XPのこの挙動においては、隣接する文字がCJK文字と判別された時に変化が起きるように思います。その判別が具体的に何によるものかは今のところわかりません。

豆腐はArialの字形だと思います。Arialにこの3文字はいずれもグリフが無いため、全部豆腐なのでしょう。一方全角スペースに隣接して字形が表示された方は、調べたところMicrosoft Sans Serifでした。Microsoft Sans Serifにもこの3文字は無いのですが、フォントリンクが使われていました。


リンク先のフォントのグリフの有無は以下の通りです。

フォント名 02CD 2027 2574
MS UI Gothic -
SimSun - - -
Gulim - - -
PMingLiU

つまりU+2027・U+2574はMS UI Gothic、U+02CDはPMingLiUで表示されていると考えられます。リンク先からそれぞれ削除して確認してみました。MS UI Gothicを削除後:


U+2027・U+2574が全角の字形に変わりました。PMingLiUで表示されるようになったのでしょう。さらにPMingLiUも削除後:


3文字とも豆腐になりました。この太字で細長い字形はMicrosoft Sans Serifの豆腐だと思います。なぜここでMicrosoft Sans Serifなのかはわからないのですが、XPではSimSunでグリフの代替が行われる時にも同じ挙動があります。そういう役割のフォントなんでしょうか。

ともかく、これでU+02CDだけが7と同じPMingLiUで表示されていることがわかりました。MS UI GothicのU+2027・U+2574はPMingLiUより文字幅が縮んでしまうので、7・Vistaとコメント幅を同一にするならU+02CDを使うしかなさそうです。

ではMingLiU化文字をXP上で実際どう使ったらいいんだろうという話は、次で書きたいと思います。