個性的な学生たちが、着任したての謎の新任教員の研究室への配属を希望してから、早いもので、もう2年になります。私の最初のぼやきは、「もう少し用心深くてもいいと思いますけどねえ・・・」でした。
学位授与式
千葉工業大学 学位記授与式 – Spherical Image – RICOH THETA
謝恩会
個性的な学生たちが、着任したての謎の新任教員の研究室への配属を希望してから、早いもので、もう2年になります。私の最初のぼやきは、「もう少し用心深くてもいいと思いますけどねえ・・・」でした。
学位授与式
千葉工業大学 学位記授与式 – Spherical Image – RICOH THETA
謝恩会
一昨日2013年5月4日、東京都江東区役所に婚姻届を提出しました。昨年から江東区に住んでいます。日本国憲法によれば、婚姻は「両性の合意のみに基いて成立」するものなので、婚姻届の提出に二人の証人の署名が必要な現行のシステムは、憲法違反なのではないかと思うのですが、そういう文句は言いません。
婚姻後の夫婦の氏は、夫の氏つまり「矢吹」にすることになりました。「氏」の考え方と「姓」の考え方を混在させるのに比べれば、どちらかに統一した社会システムの方がよく、どちらかを選ぶ合理的な理由もないので、現行のままでよいと思います(「夫婦別姓」を唱える前に)。
いろいろとありがとうございました。これからもよろしくお願いします。
10月に結婚式を挙げます。いわゆる披露宴や二次会は行わず、式後即解散の予定です。
拙著『Webアプリケーション構築入門(第2版)』の5.3節「Twitter API」は、以下のような構成になっています。
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を書籍で使うリスクについて、お伝えしました。
メール(taro dot yabuki at unfindable dot net)でも
Twitter(https://twitter.com/yabuki)でも
Facebook(https://www.facebook.com/taro.yabuki)でも
GitHub(https://github.com/taroyabuki)でも
電話(090-9376-****)でも
心は届きます(FAX は持っていません)
2012 年の年賀葉書の発行枚数は約36億枚
重さにして約1万トン
これが私の心です
2013年1月
人の心が、年の初めに届く国(笑)
追記:PHP Fogは2012年12月にサービスを終了するそうなので、後継サービスであるAppFogを試しました。→『Webアプリケーション構築入門』の郵便番号検索システムをAppFog上で動かす方法
ウェブアプリ構築の入門書である拙著『Webアプリケーション構築入門 第2版』のゴールは、Google Mapsを活用する郵便番号検索システムです。サーバ・サイドのプログラミング言語はJavaとPHPのうち、好きな方を選んで読み進められるようになっています。
作成したウェブアプリを公開する方法は人によってさまざまでしょうが、PaaSの無料プランを使うのは魅力的な選択肢です。
Javaで作成したウェブアプリをHerokuというPaaSの上で動かす方法を以前紹介しました。(参照:『Webアプリケーション構築入門』のデータベースアプリケーションをHeroku上で動かす方法)
ここでは、PHPで作成したウェブアプリをPHP FogというPaaSの上で動かす方法を紹介します。
手順は次のようになります(1と2は、PHP Fogを使い始めるときに1回だけやればOKです)。詳しくは、Jumpstartsあたりを参照してください。
git clone URL
git add .
git commit -m 'コメント'
git push
PHP FogではMySQLが使えますが、そのアクセス方法は、拙著で説明したのとは少し違っています。データベースへの接続情報は、環境変数に格納されているので、それを参照しながら接続します。参考までに、データベースに接続するためのコードを書くと、次のようになります。p. 149に掲載されているコードと比較してください。
//データベースに接続 $server = getenv('MYSQL_DB_HOST'); $username = getenv('MYSQL_USERNAME'); $password = getenv('MYSQL_PASSWORD'); $dbname=getenv('MYSQL_DB_NAME'); $db = new PDO("mysql:host=$server;dbname=$dbname", $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
しかし、ここではこのコードは使いません。郵便番号データベースを構築するのが面倒だからです。拙著で紹介したように、テーブルを作成して郵便番号データのCSVファイルをインポートすれば郵便番号データベースを構築できるのですが、郵便番号データベースのためのCSVファイルは比較的大きいため、phpMyAdminでインポートしようとするとタイムアウトしてしまうのです。無料で利用できるデータベースサイズが5MBというのもいまいちです。Herokuのときもそうでしたが、無料の範囲内で遊ぼうとすると、データベース周りがいろいろ面倒です。
タイムアウトしてしまうという問題は、「split -C 500K /tmp/zip.csv
」などとして分割し、「for f in x*; do mv $f $f.csv; done
」として拡張子.csvを付けて、一つずつインポートすれば回避できますが、とても面倒です(Railsに行くのはここではがまんしましょう)。
こんなところで苦労するのはいやなので、Herokuの場合と同様に、SQLiteを組み込んで使うことにします。
ローカルでの実験のために、PHPからSQLiteを使えるようにしておきましょう。
sudo apt-get install php5-sqlite sudo service apache2 restart
データベースファイル(mydb.sqlite)の作り方はHerokuの場合と同じなので省略します(完成したファイルはここにあります)。このファイルを、zips.phpと同じディレクトリに保存します(接続時にパスを指定するなら、別のディレクトリでもかまいません)。
zips.php内のデータベースに接続する部分を次のように修正します。
//データベースに接続 $db = new PDO('sqlite:mydb.sqlite');
Ajaxによって1文字入力するごとに検索結果を更新するようにしたものは、拙著の中では割愛しましたが(Java版とほとんど同じため)、サポートサイトでは掲載しているので参考にしてください。
実行結果は下のようになります。