mysql.exeでUTF-8を使う

拙著『Webアプリケーション』では、Windowsのコマンドプロンプトでmysql.exeを対話的に使うときは、「mysql -uユーザ名 -pパスワード --default-character-set=cp932」のようにして、文字コードをcp932にすることを推奨しています。理由は2つあります。

  1. コマンドプロンプトでUTF-8を利用するのが面倒(特にWindows XPで)
  2. MySQL 5.5以前のmysql.exeにはUTF-8に関するバグがある

第1の問題は完全には解決されていません。日本語環境のコマンドプロンプトのデフォルトの文字コードはcp932ですが、プロパティでフォントをMS ゴシックに変更してから「chcp 65001」とすると、UTF-8で日本語を利用できます(変更してからプロパティを開いてはいけません)。面倒です。Windows XPではさらに作業が必要だったのですが、XP自体がそろそろ終わりなのでまあいいでしょう。(MS ゴシック以外のフォントを使いたい場合は先に一手間必要です。「コマンドプロンプト フォント 変更」などで探してください。)

第2の問題はMySQL 5.6で解決されました(XAMPPなら1.8.3以降)。

というわけで、前準備(フォントの変更)がバッドノウハウではありますが、p.100の脚註11とp.188の「WindowsのコマンドプロンプトではCP932(Windows-31J)しか使えない」という記述は昔話になりました。

コマンドプロンプトでUTF-8を使っている様子を以下に掲載します(設定ファイルはデフォルトのまま、「--default-character-set=utf8」や「SET NAMES utf8;」は無くても大丈夫です)。

C:\>chcp 65001
Active code page: 65001

C:\>mysql -uroot test
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 77
Server version: 5.6.14 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | latin1                         |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | latin1                         |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> CREATE TABLE t (name TEXT) CHARSET=utf8;
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT t(name) VALUES ('안녕하세요');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM t;
+-----------------+
| name            |
+-----------------+
| 안녕하세요      |
+-----------------+
1 row in set (0.00 sec)

きれいに表示されないという問題が残っていますね。

OAuth認証でTwitterを利用するWebアプリケーション(PHP PECL/oauthの場合)

以前、OAuth認証でTwitterを利用するWebアプリケーション(PHP twitteroauthの場合)をいう記事を書いたのですが、状況がいろいろ変わってきたので、PECL/oauthを使う方法を紹介します。

TwitterのAPIが変わっても、Twitter専用ライブラリがそれに対応するとは限らないので、汎用のOAuthライブラリを使っておいた方がいいかもしれない、という話です。

PECL/oauthを導入してから先に進んでください(参考:PECL/oauthの導入方法)。

アプリの登録

Twitterにアプリを登録し、Consumer KeyとConsumer Secretを取得します。

アプリを一度許可したユーザが確認画面をスキップできるように、つまり「oauth/authorize」ではなく「oauth/authenticate」を使いたい場合は、下のように、「Allow this applicetion…」を有効にしてください。

OAuth認証してつぶやく

3つのファイルに分けて説明します(RSSリーダーではコードが表示されないかもしれません)。

  1. twitter-oauth-start.php: OAuth認証開始
  2. twitter-oauth-end.php: OAuth認証完了
  3. twitter-oauth-post.php: つぶやき投稿

あとで1つのファイルにまとめます。

OAuth認証開始(twitter-oauth-start.php)

「Consumer Key」と「Consumer Secret」、callbackUrlは環境に合わせて書き換えてください。

実験時には、「$oauth->disableSSLChecks();」としておいてもいいでしょう。XAMPPでは、何もしないと「Peer certificate cannot be authenticated with given CA certificates」というエラーになります。Ubuntuでは、自動的に「/etc/ssl/certs/ca-certificates.crt」が読み込まれます。

OAuth認証完了(twitter-oauth-end.php)

つぶやき投稿(twitter-oauth-post.php)

ログアウト

ブラウザを再起動すればはじめに戻りますが、次のようなtwitter-oauth-logout.phpを作っておいてもいいでしょう。

1つのファイルでつぶやく

OAuth認証をしてつぶやく処理を1つのファイルにまとめると次のようになります。

Twitter APIのパブリックタイムラインが亡くなっていました

拙著『Webアプリケーション構築入門(第2版)』の5.3節「Twitter API」は、以下のような構成になっています。

  • XMLの処理(Java)
  • JSONの処理
    • PHP
    • JavaScript
  • コラム:JSONP

Twitter APIの大部分は、OAuthと呼ばれる認証が必要なのですが、この節の目的はHTTP通信でよく使われるXML形式とJSON形式のデータの処理方法を紹介することだったので、認証の不要なパブリックタイムライン https://dev.twitter.com/docs/api/1/get/statuses/public_timeline を採用していました。

教育的には便利なこのAPIが、先日廃止されてしまったため、5.3節のほとんどのコードが動かなくなっていました。ほとんどすべてのサンプルが動く形で提供されていることを一つのウリにしている書籍で、これはいけません。

というわけで、JSON処理の部分だけ,動くように修正しました。(XML処理の部分はあきらめます。)

https://github.com/taroyabuki/webbook2/tree/master/src/05

第三者のWeb APIを書籍で使うリスクについて、お伝えしました。

漢字字形の問題点

4887152582野﨑邦臣『漢字字形の問題点』(天来書院, 2013)によれば、

現在、諸橋大漢和をはじめ殆どの漢和辞典・漢字表が「奇・寄・崎」を正体字とし、「竒・・﨑」等を俗字や異体字としている。が、それは筆写体の変遷を知らない、または知っていても無視している学者の一方的見解と私は考える。漢字の字形は筆写体と活字体の両面から研究しなければならない。

Yahoo! 知恵袋の回答の、『どちらかと言えば、「崎」が主流でした』というのとは異なる研究成果が披露されている。

拙著『Webアプリケーション構築入門』でも触れたように、JIS規格では同じ文字と見なされ包摂されている「吉」と「𠮷」や「高」と「髙」と違い、「﨑」は「崎」とは別の字としてJISには登録されているので(「吉」と「𠮷」、「高」と「髙」、「崎」と「﨑」はいずれもUnicodeでは区別できる)、そのまま使ってもいいように思うのだが、この記事のように、「崎」と書いてから「崎は大の部分が立」のような説明をするのは、第3水準漢字に対応していない端末を考慮してというよりは、マスメディアの申し合わせによるところが大きいのだろう。

いずれにしても、「崎は大の部分が立」を素直に受け取って横棒が1本多い文字を想像する必要はない。

4764106191共同通信社『記者ハンドブック 新聞用字用語集 』(共同通信社, 第12版, 2010)によれば、常用漢字表(異体字を除く)・人名用漢字・表外漢字字体表に載っているものを使うのが原則なのだが、「﨑」はそのいずれにも載っていない。『漢字字形の問題点』によれば、平成2年の法務省民事局長通達の「氏又は名に用いる文字」の別表に載っているらしい。

それはともかく、『漢字字形の問題点』は力作。「『康煕字典 東大本』が原刻本であることが、版木の割れ目の後から判断できる」とか。

天来書院のウェブサイトにサンプルがある。

大きいGoogle Mapsが見たかったので、タブレットをたくさん買いました

コンセプトはこんな感じです。

タブレットを並べるとこんな感じになります(結局のところ、普段使っているディスプレイのほうが大きいGoogle Mapsが見られるのですが)。

お試しサイトとソースコードをあとで公開します。

追記:お試しサイト1 (AppFog)・お試しサイト2 (Heroku)を公開しました。

追記:コードはここからたどれます。

お約束ですが、Google Mapsをプログラムで操作する方法を基本的なところから学びたいという場合は、拙著『Webアプリケーション構築入門』を参照してください。