Google IMEでWindows 7でもUnicode 6の絵文字を入力する
こんにちは。
ブログを続けて書くのはなかなか難しいですが、考えたこと、発見したことのメモだけにでもなればいいなと思っています。
Windows 7 + Google IMEでも絵文字を使いたい!
Twitterをやっているとたまーにこんな感じのかわいい絵文字が流れてきませんか?
(画像はweb版TweetDeckでの閲覧時)
最近は絵文字を活用したネタツイートも多いですね
(画像はweb公式での閲覧時)
この絵文字の入力、モバイル(Android 4.2 + Google IME)から・Windows 8+Google IMEからだと簡単に行えることを確認しています。
たとえば「あいす」と入力して変換すればアイスの絵文字🍦が表示されるなど。
ただし、これはずっと私が困っていたことでもあるのですが、Windows 7+Google IMEでは絵文字の変換がそのままではできないのです。
ちょっとした設定変更でできるようになることを今日知ってとても感動したので、その設定を以下で説明します!
まずIMEをGoogle IMEにした状態で言語バー内のスパナアイコンをクリックし、表示されたメニューから「プロパティ」をクリックします
設定ウィンドウが開きますので「辞書」タブを選択し、下部のチェックボックスの「Unicode 6 絵文字変換」にチェックを入れてください!
これでWindows 7+Google IMEでも絵文字入力し放題です!
というかWindows 7ではこの機能がGoogle IME導入時にデフォルトでOFFに、Windows 8ではONになっていると考えるべきですね。
どうして使えるの?
どうしてWindows 7ではデフォルトで入力OFFなのか。そもそもこの絵文字はなんなの?どうしてTwitterで使われるようになってきたの…?ずっと疑問に思っていました。黙って使えるけれど、どうして使えるのかわからない。調べたら意外と大変でした。が、この変化が、どういう流れで起こったのかまとめられているところもない気がしたので、色々不正確な気もしますが以下にまとめました。適宜参考した資料を置いてますので、真偽の程が気になる方は検証いただければと思います。ちなみにもう以下にあらたなお役立ちTipsなどはありません。Twitterで絵文字が使いやすい"理由"まで気になる方は、自分といっしょにいろいろ考えていただく意味で読んでいただければな、と思います。
絵文字が使いづらかった理由と、使いやすくなりそうなこれから
まず、そもそもどうして絵文字はTwitter上でほとんど使われてこなかったのでしょうか。いやむしろ、今までweb上で絵文字が使われることが少なかったはずです。ある意味絵文字の代替としてAAや顔文字があったはずです。どうして急に使われるようになったのでしょうか。これは以下の記事でなんとなくわかりました。
非常に長いので簡単に言いますと、今までのいわゆる携帯の絵文字はキャリア間で共通しない文字コードにそっていたので、環境の違いですぐ文字化けして見られなくなるものだったのです。それは同キャリア間のメール程度なら問題なかったでしょうが、様々な環境の人が閲覧するweb上ではほとんど共通して見られるものではなかったのですね。そんな携帯絵文字を、様々な環境で共通して用いる文字コード規格の一つであるUnicodeの中で新たにきっちり定めましょう、という動きがあったということですね。Unicodeはすでに利用されていた文字コード規格ですが、絵文字が追加されたのはそのバージョン6からとのことです。
ここでUnicodeってなんぞや、文字コードって知らないよって人のために以下。分かってる人はさらに次の段落へ。
Unicodeは文字コードの一種です。文字コードというのはバイト列(コンピュータ上での01のデータ)をどのような文字として解釈するかの対応規則です。対応規則なので、たとえばUnicodeで作成されたテキストファイルを、Shift_JISという別の文字コードで解釈して開こうとすると文字の対応が本来意図したものとはちぐはぐになったり、そもそも元の文字コードで使えるバイト列が、後から開くときの文字コードで使えないバイト列であったりします。これが文字化けです。なので文字コードが大切になるのは、文字のデータを2箇所以上でやりとりするときです。まあでもこのインターネット時代、文字をやりとりしない場面のほうが珍しいですね。その上で何が大事か、というと、やりとりする場所すべてでデータを共通した文字コードで解釈すること、さらにいえばそのデータの文字コードに「対応」していることが重要です。Unicodeで送るよーと言っても、Unicodeなにそれおいしいの?という相手がいたらお話しにならないのです。
文字コードに対応しているもの、そうでないもの
もう1回言うことになりますが、実はさきほど挙げた絵文字はUnicodeのバージョン6以降追加されたものなのです。つまり、ある時からUnicodeという対応表に、バイト列0Aはケーキの絵文字、BCはアイスの絵文字…というような新たな対応が追加されたわけです。しかし、いくら対応表にそう決めても、上記で述べたとおり、実際のプログラムや表示するためのフォントが対応していない場合は意味がないのです。
Unicodeのバージョン 6は2010年10月に制定された比較的新しい文字コードです。文字コードが新しく、対応している環境とそうでない環境が入り交じっている場合は、簡単に絵文字を入力できても、受け取る側で対応していないため閲覧できないため意味がない、という状況がありえます。だからGoogle IMEで有効/無効のオプションがあったのですね。
そしてちょこっと調べたところ、どうやらOS標準フォントにおいて、Windows 8の方がWindows 7より、このUnicode 6絵文字への対応度を上げたようなのです(参考:
Windows 8 DP:Unicode 6.0の追加文字を表示させてみた ( その他インターネット ) - 513号室(保管庫) - Yahoo!ブログ )。Google IME入力オプションが、Win7ではデフォルトでOFF, Win8ではデフォルトでON、という状況は上記のOSレベル対応状況に合わせたのかな…と、不確かながらもこの事が分かった今では思います。実際、今でもWin7機では変換するときに変換候補では絵文字が表示されないんですよね。入力先を見れば表示されているんですが…
Twitter側の対応
前述しましたが、実際のプログラムや表示するためのフォントが対応していなければ、いくら文字コードに規格化されても、表示できません。そう、Twitterで絵文字がたくさん使われるようになったのは「Twitter側でUnicode 6の絵文字に対応し、OS側などで対応していない環境でも共通して閲覧できるようにした」という実はとっても重要なイベントがあったからなのです!
Unicodeで標準化されたのでガラケー時代のような「違うキャリアの絵文字が表示されない」という事態はなくなったとはいえ、各社の絵文字は当然それ ぞれ著作権があって別物なんです。AppleはAppleで、GoogleはGoogleで、それぞれ1つずつ自前で作っているわけです。なので「絵文字 表示に対応する」ということは表示する絵文字素材を1つ作らなくてはいけないということ。
対応する絵文字素材を作る、ということはすなわちフォント素材から作るということですが、これは思ったより地道な印象で驚きました!
Twitterで絵文字が使いやすくなるまで
今まで絵文字は環境の違いですぐ文字化けしてしまうため、様々な環境からアクセスされるweb上では使用を嫌われていたフシがありました。Unicode 6で追加されたことで規格として定められたものの、そのUnicode 6自体に対応していない環境も存在していました。そこでさらに、Twitter側が対応することで、Unicode 6に対応していない環境でもTwitter上ではみんなが共通して絵文字でのコミュニケーションが可能となった…と考えるとなかなか長い道のりですが、その発展によってTwitterに、インターネット上の文字コミュニケーション自体に、新しい形ができたようにも思えますから、すごいことだなーと思います!
さらに、規格として定められ、それに一つのサービスが対応したのでみんなが見ることができるようになった、という技術的側面は大きいと思いますが、Twitter上では、絵文字は文字化けするから…という心理障壁が取り払われている感覚がするのも、絵文字コミュニケーションの拡大への寄与は大きいと思います。これはどこが発祥かもわかりませんが、Twitter公式も絵文字対応Tweetを絵文字つきでしていますから、そこからネタを愛する(?)ユーザーに取り上げられたのかなあ、と思います。
😃 パソコンサイト (http://t.co/xt8ONincxT) でアップデートがあり絵文字が表示されるようになりました。ツイートに絵文字を付けるのはモバイル端末のみで可能です。#emojiparty 🎉🌸🎤🍻☺️
— Twitterサポート (@TwitterHelpJP) April 2, 2014
まとめ
なんだか自分の知らぬところで結構大きな変化が来てた、という感じです。また、文字コード界隈は闇だなという気持ちがいっそう強くなりました()
絵文字が使えるようになるまで、各所で行われた努力に感謝しつつ楽しいTwitterライフを送りたいですね!
【C++】メンバ変数のstd::arrayの宣言時初期化で躓いた
STLちゃんと使ってますかー?
自分は結構std::array使います。
というか基本、C言語の人が生配列使いたいなーって思うところが全部std::arrayに置き換わる感じです。
今日もこんな感じでテーブルをstd::arrayで作って、色々と計算に使ったりしました。
(もちろん、テーブルの大きさは例として小さくしてありますが…)
#include<iostream> #include<array> int main() { //配列と同じ形の初期化が使える //int table[3] = {1, 2, 3}; const std::array<int, 3> table = { 1, 2, 3 }; //便利なメンバ関数や、イテレータなどの利用が可能 for (int i = 0; i < table.size(); ++i) { std::cout << table[i] << "|"; } std::cout << '\n'; }
コメントにも書いたとおり、生配列の記法+便利(というかCが不自由すぎ)な機能があるのでナイスです。
さて、今日はたくさんテーブルを作って計算してたのですが
その内の一つの処理が少し複雑だったので、std::arrayはクラスに持たせて複雑な処理はそこにまとめ、main内はすっきり書けるようにしたいなあと思いました。
ちゃちゃっとこんな感じで…
#include<iostream> #include<array> class Table { public: Table(){} //std::arrayの要素を出力 void print() { for (size_t i = 0; i < m_data.size(); ++i) { std::cout << m_data[i] << "|"; } std::cout << '\n'; } private: const std::array<int, 3> m_data = { 1, 2, 3 };//コンパイルエラー }; int main() { Table tbl; tbl.print(); }
え?動かない、というかコンパイルが通らないというのが今日の困り事でした。
ちなみにかなりコンパイラとか環境によって違う案件のようなので書いておくと、環境は
Microsoft Visual Studio Express 2013 for Windows Desktop
update 4
って感じです。
色々調べたら思ったよりも沼という感じだったので、結論から言うと下記のコードは動きます。
#include<iostream> #include<array> class Table { public: Table(){} void print() { for (size_t i = 0; i < m_data.size(); ++i) { std::cout << m_data[i] << "|"; } std::cout << '\n'; } private: //コンパイルエラー …(1) //const std::array<int, 3> m_data = { 1, 2, 3 }; //コンパイルエラー …(2) //const std::array<int, 3> m_data = {{ 1, 2, 3 }}; //コンパイル…は通るが構文エラー表示 …(3) //const std::array<int, 3> m_data = std::array < int, 3 > { 1, 2, 3 }; //OK …(4) const std::array<int, 3> m_data = std::array < int, 3 > {{ 1, 2, 3 }}; }; int main() { Table tbl; tbl.print(); }
コメントで色々試してみたりしたものを置いておきました。エラー内容やコンパイルOKかどうかが変わります。
そもそも(1)と(2)のm_data={~}型の初期化は使えません。
(1)か(2)のとき、C2797のコンパイルエラーが出ます。
これについての説明は以下です。
コンパイラ エラー C2797
この書き方が実装されてないみたいです。実装されていないなら仕方がないです。
下の方に記述がありますが、明示的にコンストラクタを呼び出して初期化、という感じで解決するようです。
じゃあ(3)の
const std::array<int, 3> m_data = std::array < int, 3 > { 1, 2, 3 }
で解決、と思いますよね
ところが、さっきの(1)および(3)ではC2797の他にもう一つエラーが出ます。
"IntelliSense: このサブオブジェクト初期化子では中かっこを省略できません"
というものです。
面白いのは(?)このエラーはコンパイルエラーにはならないところです。
(1)はコンパイルエラー、(3)はコンパイルは通り、プログラムが問題なく動くのです。
ということはコンパイルを妨げるのはC2797だけ、ということです。
中括弧が1重だと、中かっこを省略できません~のエラーが出ます。
この中かっこが1重か2重か?ってのが色々面白そうです。
実はC++11の仕様書(参考:N3337)的にはstd::array<N, T>は
std::array<N,T> = {initializer-list};
の形で初期化できるもの、と書いてあるので
(メンバ変数内宣言時の初期化とは言え)1重でエラー出すのはどうなんだ?
と思ったりもしないのですが、集成体(aggregate)の初期化時の中かっこの省略が、メンバ変数の宣言時初期化だとできないようになってるのかな?とか色々思いました。
ってこと考えてると†闇†が深くなってくるので、まあVS2013なら(4)でちゃんと動きます。というのが結論です。
ちなみにg++(GCC) 4.9.2では(2)でちゃんと動きますが、(1)はコンパイルが通りませんでした。
wandbox上でclangも試して見ましたが、(1), (2)のコンパイルは通るものの、-Wallオプション付きだとmain内での中かっこ1重の
初期化、および(1)について、警告が出る状態でした。
三者三様ですね。
コンパイラで色々違いが出たり、初期化子リストやaggregate等、調べたら結構勉強になりました。
詳しい所もまた書きたいと思います。
VirtualBoxに入れたUbuntuが重かったのでxubuntu-desktop入れました
早速1ヶ月空けそうになりました。
研究室からVirtualBox上にUbuntu入れてねというお達しがあったので入れました。
VirtualBoxにUbuntu 14.04 LTSをインストールする(準備編) – PC雑記帳
基本はこちら
http://citrras.com/archives/1130
色々設定はこちら(仮想ハードドライブは固定サイズにしたけど!)
Ubuntu VirtualBox その4 - Guest Additionsをインストールする - Ubuntu kledgeb
Guest Additionはこちら、という感じで、
日本語Remix 14.04を入れました。
ところがGuest Additionを入れたのにもかかわらず、
Virtualbox上のUbuntu14.04が遅く感じる時: 水より柔弱
こちらも試した・確認したにもかかわらず、重いのでTwitterでつぶやいてみたところ
デスクトップ環境を変えてみてはどうか、と提案をもらいました。
教えてくれた方がXfce4を使っているということ、Xfce4は割と軽いことで有名だそうなので、入れてみることにしました!
ところがapt-cache search xfce4とすると、xfce4-なんちゃら、ってパッケージがどんどん出てきちゃうんですね。
とりあえずxubuntu-desktopというパッケージを入れればXfce4を確実にインストールできるようだ、ということは分かったのでインストールしました!
確かに結構軽いかもしれないです...
ただ、再起動→ログインとかその他もろもろの処理に時間がかかってるのでそもそものスペック不足が感じられて悲しいですが。
困ったことが1つ。
もともとのUbuntuのデスクトップ環境の方(ログイン時に切り替え可能)も、なんだかXfce4らいくな見た目になってしまったのです…。
なんと一回直したら状況が再現できないというなかなかファンキーなことになってしまったのでスクリーンショットがないのですが、「左のランチャーはそのままに、背景が青いネズミに、ウィンドウのフレームが白」という状態でした。
(Xubuntu - Wikipedia, the free encyclopedia)
ちょうどこの写真に、ランチャーはUbuntuのデフォルトのような感じでした。
Xfce4が軽ければUbuntuデフォルトのは使わないんですが、なんとなく収まりが悪いので直す方法を模索していたところ
デスクトップで右クリ→「背景の変更」
これでテーマをAmbiance, 背景を一番左下にあるものに設定すればOKでした。単純でした…
背景は別のものでいいのですが、ウィンドウの見た目がかなり見辛かったので戻せて良かったです。
ちなみに、後から知ったのですが、xubuntu-desktopはXfce4-なんとか(とかその他色々)、を全部色々まとめた感じのパッケージみたいです。
Xfce4-*を調節しつつ入れたほうがカスタマイズできるみたいです、というかそうしていればUbuntuのデザイン変更もなかったのでは…
参考?:http://askubuntu.com/questions/305646/gui-for-ubuntu-server-xfce-or-xubuntu-desktop
情報が古いかなあ…?
まあ万が一自分と同じドツボにはまってる人がいたらお役立てください(?)
3/14「早稲田情報科学ジュニアアカデミー」3/15「☆女子学生がITの未来にふれる一日☆」にTAとして参加しました!
3/14「早稲田情報科学ジュニアアカデミー」無料体験・説明会
3/15「☆女子学生がITの未来にふれる一日☆」
にTAとして参加しました!
3/15 受講者・スタッフ皆でわいわいお昼中
どちらでも、Siv3Dを使ったプログラミングを小〜高校生の方に体験してもらうというカリキュラムがあり、その中で質問を受け付けたり、特定の動作が実現できなくて困っている子のサポートをしたりしました。
短い時間の中でもどんどんSiv3Dでのプログラミングを吸収していく子どもたちを見て、若いっていいなあ…と思ったりもしましたw
難しい部分が書けて喜んでいる子や、ちょっとヒントを出したところからどんどん想像力をふくらませて作品を作っていく子を見ると、プログラミングを教えるのがとっても楽しくなりますね!
私自身も、会場のマイクロソフト品川本社内を見学させていただいたり、他の講演者の方とお話させていただいたり、実り多い時間を過ごすことができたので、とっても嬉しかったですo(^-^)o