2010-12-29

【MySQL】同一マシン上の異なるデータベース間でのテーブルコピーの方法

レンタルサーバーなどで複数のデータベースが作成できるMySQLを使用している場合、
 「データベース1つ作成ごとに課金」
という方式を取っている業者もあります(たとえばKagoyaとか)。

経済事情などでデータベースを1つに統合したいときもありますよね?
でもmysqldump等のMySQL附属ツールでは文字化けしてエクスポートが失敗することがよくあります(phpMyAdminでも失敗することがある)。
自分は携帯サイトを運営しているので、エクスポート時に「絵文字」やらが文字化けしてしまうことがものすごく多いです。

そういった方のために参考までに自分でやってうまくいった方法を紹介します。ただ他の環境でうまくいくかはよく分かりません。試せる環境がないので。

---
◆前提
1)同じサーバマシン内でデータベースを複数使用していること。
2)phpMyAdminを使用していること

◆手順
△テーブルの「構造のみ」をエクスポート
1)「phpMyAdmin」にログインして「移動したいテーブル」で「エクスポート」をクリック。
2)「構造」にチェックが入っているか確認する。
3)AUTO_INCREMENTを使用しているのであれば「AUTO_INCREMENT値を追加」もチェックする。
4)あわせて「データ」にチェックが入ってないかを確認する。
5)エクスポートを実行する。以下エクスポートした「構造SQL」を単に「構造」という。

△エクスポートした「構造」を「移動したいデータベース」で実行する
1)「phpMyAdmin」で移動したいデータベースに「SQL」または「インポート」で「構造」を実行する。
2)テーブルが作成されればOK。

△データを移動する
1)データを移動する方法は「SQL」でスクリプトを作る。
2)例としては

INSERT INTO dest_table1 SELECT * FROM src_db.src_table1;
INSERT INTO dest_table2 SELECT * FROM src_db.src_table2;
INSERT INTO dest_table3 SELECT * FROM src_db.src_table3;
INSERT INTO dest_table4 SELECT * FROM src_db.src_table4;
※destは移動先。srcは移動元

という風なSQLを「移動先データベース」で実行すればOKです。

---
データが文字化けせず移動されたか確認して終了です。
参考になれば幸いです。

2010-12-22

【Amazon】AWSを使ってすばやい表示をするサイトを作る

表題の通り、AmazonのWebAPIであるAWS(名前がころころ変わるからこれでいいのか分からないw)を使ってすばやい表示のサイトを作った時のメモ。

まず、ページを表示するたびにAPIへ接続しデータを取得するようなサイトは表示が「遅い」し、ページビュー数が増えてくるとAPI提供側から規制が掛かったりする。
そこで、すばやくするためにはどうしたらよいかを考えた。

考えた結果、以下の2つを目標とすることにした。
・表示を早くする
・APIへのアクセスを低減する


という2つの目的を同時に実現するために以下のことをした。

---
1.自サイトを置いているサーバにAPIの結果をキャッシュとして保持し、それをファイルに保存しておく

2.APIへアクセスする時のURLはほぼ一意(ユニーク)なので、URLをmd5やsha1等でハッシュした結果をキャッシュのファイル名とした

3.APIのデータはXMLで返されるので、キャッシュに保存するのは「XMLをパースした結果のシリアライズされたもの」とする。読み込み時にアンシリアライズすればデータ取得が容易になる
---

1.で保存したキャッシュが「存在するならばAPIへはアクセスしない」というプログラムにすれば「APIアクセス低減」と「表示の高速化」が実現する。
しかし、APIで返されるデータは日々更新されるので、いつかは古いデータとなってしまう。これを回避するには「キャッシュを更新」する必要がある。
しかし、更新間隔を狭めて頻繁にAPIにアクセスするようなプログラムにすると結局「遅い」し「規制に掛かる」可能性がある。
この問題には以下のように対処した

---
1.個々の商品詳細データは「ほぼ更新されない」という「前提にした」(実際は価格などが更新される)ので、キャッシュの更新はしないこととした

2.商品一覧データは売れ筋が上に来る(APIで異なる指定が可能だが)ので、サイト構成上重要だから1週間で更新されるようにした

3.更新自体はプログラムがキャッシュへアクセスするときに「ファイル作成日付を確認し」1週間より前なら「APIへアクセスしデータを取得する」、とした
---

これでもAPIが規制に掛かってしまってエラーが返されたら、それは保存せずに従前のキャッシュを返すようにもした。
これで表示に大体1ページ数秒掛かっていたのが、1秒以内で表示されるようになった。


---
データベースが使えるならそちらのほうがプログラムが簡単かもしれない。データベースに全てのデータを突っ込んでおけばメンドウはないかもしれないし。
自分はデータベースを使用する方がメンドウだ、と作ったときは感じたのでそうしたけどね。

あと、この方法は小規模のそれほどページビューが多くないサイトを想定してます。具体的には1日1万ページビューくらい。
なので、もっと大規模なサイトならそれにあわせたものにしないとだめでしょう。

2010-12-21

【Web】JavaScriptのデバッグプリント

JavaScriptでプログラムを作る機会があったので、そのとき知った小技をメモ。
そのとき作ったサイト:MHP3rdスキル逆引きサービス

・コンソールにデバッグプリントする方法
Firefoxしか使えないけど、結構便利なデバッグプリントの方法。
→デバッグプリントとは、変数の中身を何らかの方法で出力し内容を確かめること、というような意味。
普通はメッセージボックスを使って変数の中身を出しているけど、いちいちメッセージボックスを閉じるのがメンドイよね?
そこで、

----
console.log( 何らかの変数 );
----

と書くとFirefoxのJavaScriptコンソールに書き出せる。

JavaScriptにはデバッグ用の機能が少ないから微妙にめんどくさいね。
PHPみたいな「var_dump」や「print_r」みたいなものがほしいよ。

2010-12-15

【ブログ】BloggerにPHPからメールで投稿する方法

翌日発売するマンガやラノベのデータを自動でBloggerに投稿するシステムを開発して運用しています。
プログラミング言語はPHPを使っているのですが、ちょっとめんどくさかったのでメモを残しておきます。

基本的にPHPでメールを送信するには「mb_send_mail」という関数で送信します。また、日本語メールは一般的にJISコードが使用されています。
ですが、Bloggerのメール投稿は日本語エンコードがUTF-8なので、メールもUTFエンコードに変換して送らなければなりません。

例としては、

----
mb_language( 'uni' );
mb_internal_encoding( 'UTF-8' );

$to = 'xxxx@xxxx.jp';
$subject = 'ブログタイトル';
$body = 'ブログ本文';

mb_send_mail( $to, $subject, $text );
exit();
----

といったプログラムになると思います。
ですが、これだけではBloggerに投稿した際に文字化けを起こしてしまいます。

そこで、改良版として以下のようにしています。

----
mb_language( 'uni' );
mb_internal_encoding( 'UTF-8' );

$to = 'xxxx@xxxx.jp';
$subject = 'ブログタイトル';
$body = 'ブログ本文';
$from = 'From: xxxx@xxxxx.jp' . "\r\n";
$from .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";

mb_send_mail( $to, $subject, $text, $from );
exit();
----

$from変数には、Fromヘッダだけではなくて他のいろんなメールヘッダを挿入することができます。
例の通り、「Content-Type」ヘッダを追加してcharset属性でもUTF-8を指定しています。これで文字化けなく投稿することが出来ました。
注意する点は、$fromに挿入するヘッダの各行ごとに「\r\n」を末尾へ挿入することぐらいでしょうか。

ちなみに、メールで投稿するブログ本文にもHTMLタグを挿入することができ、投稿してから編集する必要はありません。
ですが、「ラベル」と呼ばれるBloogerのタグをメール投稿に付加することが出来ないので、これは投稿してから編集する必要がありますね。

2010-12-07

【資格】宅建・マン管・管業を受験した感想的なもの

今年の宅地建物取引主任者試験、マンション管理士試験と管理業務主任者試験が12月5日で終了しました。
自分の結果としては
・宅地建物取引主任者 : 43点で合格
・マンション管理士 : 34点
・管理業務主任者 : 44点
となりました。
やはりマンション管理士は合格率7~8%だけあって難しかったですね。今回は多分合格できないでしょう。来年受けるかどうかはまだ未定です。
宅建、管業については予想以上に出来ました。宅建は合格していますし、管業も「マークミス」が無ければおそらく合格でしょう。
上の資格3つを取ることを「三冠」とネット上では言うらしいですw
今のところ自分は「ニ冠」は達成できたかも、と思っております。

んで、タイトルの通り感想などを書いていきたいと思います。

・宅建について
試験の難易度的には民法「難しい」、宅建業法「簡単」だった気がしますね。
宅建業法の簡単さは驚きました。何せ初受験の自分でも20問全問正解でしたしね。
合格基準点(ボーダー)が今回36点でした。宅建試験史上2回目の高得点な基準です。
いろんなテキストにも「35点取れればほぼ合格です」と書いてあって「70%の得点が出来ればいいのか」と自分も思っていました。
ですが、70%を超える得点を取らねばならないこともある、ということをこれから気にしなければならないのでしょう。
何というかこれから受験をする方は気の毒に思いますが、自分はホントに「今年取れてよかった」と思ってますwwww

・マン管について
試験の難易度的には、民法「難しい」、マンション関連法令「普通」、建築・設備「知らない」って感じでしたw
問題の最初に民法の問題(10問程度)が配置されているのですが、そこで30分も使ってしまい、焦ってしまって誤答が多くなってしまいました。
見直しの時間も十分とれず、見直しすればあと2~3問程度確実に取れるようなケアレスミスが何個か残ってしまいました。悔しいです。
50問で構成される国家試験の中では最高峰の難しさではあるようです。大変でした。

・管業について
試験の難易度的には民法「普通」、マンション関連法令「簡単」、建築・設備「消去法で何とかなる」といった感じでした。
この試験の問題の特徴としては、選択肢を4~6個並べて「正しいもの(誤っているもの)はいくつか」という形で出題される「個数問題」というのが多いことです。選択肢自体は「簡単」なのですがそれらを「全て知っているかどうか」はまた別の問題で、解くのが大変な問題です。
こういった個数問題が増えることは今後も予想されていて、いろんな資格学校の方が言っている通り「今後も試験の難化が予想される」とおっしゃられてます。
自己採点ではよい点数だったのですが、「マークミス」が無いことを願うのみです。

・試験会場について
試験会場が「宅建・マン管」が一緒で高校を使用したものでした。「管業」は大学が会場でした。
どちらも、JRの駅からすぐ(高校のほうは徒歩1分、大学の方は「駅がくっついている」ところだったw)なのでよかったです。
基本的に11時~11時半ころに試験室へ入れるのですが、自分は大体10時半ころに会場入りして勉強の最終確認して、トイレをすまします。
試験室に入っても、試験が始まる前に2~3回トイレに行くようにしてますw

・勉強量について
上の3つの試験合わせて、5冊程度のテキストと10冊程度の問題集を使いました。
問題集は最低でも10回繰り返しています。2~4回で知識が定着します。
その後は解けない部分をテキストやネットで補強し、それをテキストなりノートにまとめるようにしました。
自分が気をつけたのは「まとめたら終り」ではなく、「問題集を1回全て解いたら、まとめたテキスト(ノート)を一度全部読み返す」ようにしたことですね。
毎回新しいことに気づくのでやはり10回は繰り返したほうがいいでしょう。

今回はこんなところです。

2010-12-03

【資格】宅建主任者試験合格

このブログでも2回ほど取り上げているけど、10月に受験した宅建主任者試験にこのほど合格いたしました。
12月1日に合格発表で3日に合格証書が届きました。合格証書はA4くらいの紙で結構ペラペラだったですw
ちなみに合格証書の他には、主任者登録手続きの手引きなどが入ってました。宅建主任者になるには「登録」して「主任者証を発行」してもらわなければならないんですよね。
まぁ、今のところ登録するつもりは無いです。不動産業やってるわけじゃないので。

今回の合格点は36点で合格率は15.2%です。
50点満点なので72%の得点をしないとダメだったようですね。かなり高い合格点だったといえるでしょう。
合格率も去年よりは下がっているようです。宅建試験で36点の合格点は2002年以来2回目でした。

ちなみに直近10年の合格点と合格率は以下の通り。
 2000年(平成12年)30/15.4%
 2001年(平成13年)34/15.3%
 2002年(平成14年)36/17.3%
 2003年(平成15年)35/15.3%
 2004年(平成16年)32/15.9%
 2005年(平成17年)33/17.3%
 2006年(平成18年)34/17.1%
 2007年(平成19年)35/17.3%
 2008年(平成20年)33/16.2%
 2009年(平成21年)33/17.9%
 2010年(平成22年)36/15.2%

久しぶりに国家試験に合格しました。以前に合格したのは確か、情報処理技術者試験のソフトウェア開発技術者試験だった気がします。この名前の試験もなくなっちゃいましたけどね。法律系の試験は初めての受験で始めての合格でした。
次は「管理業務主任者試験」を受験します(これを書いている翌々日試験日です)。この試験が終わればヒト段落。少し休みたいですねw

ZenBack

WebMoney ぷちカンパ