2008年8月28日木曜日

MySQLをオンラインでバックアップ

MySQL5.0以降の話。(MySQL 4.1 リファレンスマニュアルには記述が無いが、MySQL 5.0 Reference Manualには記述があるので。)

InnoDBではテーブルのロック("--lock-all-tables" 省略形は-x)をせずにmysqldumpでオンラインバックアップができるらしい。
参考:MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム(ページの一番下の方)


使用例

mysqldump -u USER_NAME -pPASSOWRD -A --single-transaction > /path/to/backup/dir/mysqldump.sql

"-p"とパスワードの間にはスペースを入れない。
"-A"は"--all-databases"の省略形。
"--single-transaction"はテーブルのREAD ONLYなロック?アプリケーションをブロックしないで済むようだ。 InnoDBのみ有効。
--single-transaction
このオプションはサーバからデータをダンプする前にBEGIN SQLステートメントを発行します。InnoDBといったトランザクションテーブルに対してのみ便利です。なぜなら、アプリケーションをブロックせずに、BEGINが発行された当時のデータベースの状態をダンプするからです。
このオプションを使用しているときは、一定の状態でダンプされるのはInnoDBテーブルのみだということを留意してください。例えば、このオプションを使用中にダンプされたMyISAMやMEMORYテーブルは状態が変化する可能性があります。

mysqldumpの出力はSQL。データベース・テーブル等のCREATE文やデータのINSERT文等が書いてある。
そのままSQLを実行すればリストアできる(はず)。

mysqldumpを使ったバックアップ・リストアは、データ量が多い場合には時間がかかるらしいので注意。

2008年8月15日金曜日

PHPで出力する文字列をまとめて変換する

ob_start()を使うと、出力する文字列をまとめてfunctionに渡すことができる。

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

この関数は出力のバッファリングをオンにします。出力のバッファリングを有効にすると、(ヘッダ以外の) スクリプトからの出力は実際には行われず、代わりに内部バッファに保存されます。

$output_callbackにはコールバックするfunction名を文字列として指定する。

ob_end_flush()等をしなければ、バッファにたまった文字列はPHPスクリプトの終了時にコールバックのfunctionに渡される。
なので、出力全体を変換したい場合は明示的にob_end_flush()する必要はない。

コールバックのfunctionにはバッファにたまった文字列が渡される。
コールバックのfunctionが戻り値として文字列を返すと、その文字列が出力される。

//例
ob_start('zenkaku2hankaku');

function zenkaku2hankaku($str) {
  return mb_convert_kana($str, 'ask');
}
なので、mb_output_handlerのように、文字列としてデータを受け取り戻り値も文字列の標準関数だと使いやすい。

また、ob_start()は重ねて実行できる。
出力バッファはスタッカブルであり、このため、他の ob_start() がアクティブの間に ob_start() をコールすることが可能です。この場合、ob_end_flush() を適切な回数コールするようにしてください。複数の出力コールバック関数がアクティブの場合、ネストした順番で逐次連続的に出力がフィルタ処理されます。

2回以上ob_start()を実行した場合、ob_start()を実行した順と逆の順番にコールバックのfunctionが呼ばれる。
<?php
ob_start('test2');
ob_start('test1');

echo '1st';

function test1($s) {
  return str_replace('1st', '2nd', $s);
}
function test2($s) {
  return str_replace('2nd', '3rd', $s);
}

// => "3rd"が出力される

YUI Grid.css用の XHTML 1.0 テンプレート

YUI: CSS Grid Builderで作ったHTMLの冒頭部分をXHTML 1.0 Strictにしたもの。

横幅は950pxでカラム分割無し、文字コードはUTF-8の場合。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>TITLE</title>
<!-- Keywordsはもう要らないと思う
<meta name="Keywords" content="FOO,BAR" />
-->
<meta name="Description" content="DESCRIPTION" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" href="some.css" />
<!-- フィードの記述は種類による -->
<link rel="alternate" type="application/rss+xml" title="FEED TITLE" href="http://www.example.com/feed.xml" />

<!-- スタイルシートは別ファイル化を推奨 -->
<style type="text/css"> /* ... */ </style> </head>
<body>
<!-- ここのidとclassは横幅等で変わる。YUI Grid Builderで調べるのが楽。 -->
<div id="doc2" class="yui-t7">
<div id="hd">
HEADER

</div><!-- #hd -->
<div id="bd">
<div class="yui-g">
MAIN
</div><!-- .yui-g -->
</div><!-- #bd -->
<div id="ft">
FOOTER
</div><!-- #ft -->
</div><!-- #doc/[2-4]?/ -->
<!-- charsetはhtml本体と同じなら不要 -->
<script type="text/javascript" src="some.js" charset="UTF-8"></script>
<!-- JavaScriptも別ファイル化を推奨 -->
<script type="text/javascript">
//<![CDATA[
...
//]>
</script>
</body>
</html>

2008/12/22 変更:JavaScriptのHTMLコメント化をCDATAに変更

htmlでボタンに表示する文字列を途中で改行する方法

htmlフォームのボタン系input要素はvalue属性の値をボタン上に表示するが、その表示する文字列を途中で改行する方法。 下記のように改行したい箇所に、改行コードの実体参照である「&#13;&#10;」を入れる。

<input type="button" value="この後で &#13;&#10; 改行してね" />
Windows版Safariでは、改行はするがボタンの高さが1行分なので半分見えなくなってしまった...。 もしかするとWindows以外では表示が崩れる?(改行コードも違うし。) 素直にbutton要素とか使った方がいいかも。
<button>この条件で<br />絞り込む</button>
ただしbutton要素だと、submitボタンとかresetボタンを作るにはJavaScriptで動きを付けないといけなくなるが。type属性でsubmitボタンにしたりresetボタンにしたりできるみたい。(2009/06/16 修正)

参考:
 改行コード(HTML, Java, URL & エスケープシーケンス)
 GAC なぜなにGAC->HTML

ホテル予約サイトの地図機能の比較

主に日本国内のホテル予約について。

  • るるぶトラベル
    • トップページのメイン部分にJavaScriptの日本地図。そこから詳細な地図にドリルダウンしていく
    • スクロール地図を選ぶと、真ん中にMapionの地図がある構成になる
      • 左側に絞込み条件、真ん中に地図、右側に地図範囲内のホテル一覧
      • Mapionの地図上のピンをクリックすると、地図の下に簡単なホテル情報を表示する
    • UIとしてよくできている
  • 楽天トラベル
    • 地図は独自の地図のドリルダウン
  • フォートラベル
    • 地図は独自地図のドリルダウン
  • 日本旅行
    • 国内宿泊予約では、ページ上部に地図・カレンダー・条件などの絞込みがあり、下側にホテル一覧がある
    • 地図は独自のJavaScript
    • 地図で地区を選ぶとリロードされ、メイン部分に範囲内のホテル一覧が表示される
  • まっぷるnet
  • 宿ぷらざ
    • 地図は独自地図のドリルダウン
  • yoyaQ.com
    • 価格.com系
    • 地図はGoogle Maps(都道府県の絞込みまではFlash)
  • J-reserve
    • 外国人向けの日本のホテルの予約サイト
    • 地図は独自のドリルダウン(全国/地方の2段階)
  • 東京ビジネスホテル予約.biz
    • 地図とホテル一覧をAjaxで表示
    • 地図はGoogle Maps
    • 予約まではできない

2008年8月14日木曜日

Delicious Bookmarksからデータが消えて PCがフリーズする問題の解決方法(追記:解決した!)

FirefoxのアドオンにDelicious Bookmarksというものがある。ショートカットからDeliciousへのPOSTができたりBookmarkをツールバーに表示したりと非常に便利なのだが、バージョンが2.0.95に上がったら壊れてしまった。(ローカルデータが認識できなくなりSyncを繰り返す。CPU負荷も高く、PCが固まる。)

しばらくこのアドオンを無効にしていたが、先ほどこの問題の解決策を見つけた。

It seems that 2.0.95 causes some trouble, but after I delete delicious.rdf file in my firefox profile directory, it seems works well. This is suggested at the forum in yahoo group described above. Worth to try, I guess, if you in trouble.
from Delicious Bookmarks のレビュー :: Firefox Add-ons
(※2008/8/13のXoraさんのレビュー)
Firefoxのプロファイルにあるファイル「delicious.rdf」を削除したら直るとのこと。
試しにやってみたら、確かに直った気がする。しばらく様子を見てみよう。(※追記あり!)

しかしXolaさんも書いているとおり、"And of course we still need a fix release."
Fixした時に今回の解決策(delicious.rdfを2.0.95に合った形にした)のせいでまたインストールし直しとかにならなければよいが。


追記:しばらくしてFirefoxを再起動したら、またSyncし始めちゃったよー

追追記(2008/08/21):
Delicious Bookmarks のレビュー :: Firefox Add-onsの"Work-around for 2.0.95 problems"をやったら解決した。
1) Log out of delicious.
2) Uninstall delicious addon 2.0.95.
3) Quit firefox
4a) Delete this file for XP: C:\Documents and Settings\\Application Data\Mozilla\Firefox\Profiles\.default\delicious.rdf
or
4b) Delete this file for vista: C:\Users\\AppData\Roaming\Mozilla\Firefox\Profiles\.default\delicious.rdf
5) Restart firefox and install delicious addon version 2.0.64

2.0.64は2つ前のバージョン。1つ前までは試してみたが、2つ前まで戻さなくちゃいけないとは。
今のところこれで以前のように動いている。
Deliciousからの新バージョンについての反応がまだ無いところを見ると、よほど深刻な問題なのか?!

追追追記(2008/08/22): 1つのPCでは解決したが、1つのPCではフリーズっぽくなる...HELP!

2008年8月12日火曜日

Google Msps ストリートビュー

我が家もばっちり映ってた。家の前に雪があるけど、何月頃に撮ったのかな?

2008年8月1日金曜日

del.icio.usが delicious.comに変わってた

普段、Firefoxのアドオン使ってるからdel.icio.usのサイトが変わってるのに気づかなかった。もうdel.icio.usではなく、deliciousなんだね。

機能的にはソートとかがちょっと増えたぐらい。レスポンスは早くなった気がしないでもない。
一番変わったのは見た目。とても見やすくなった。今まであまりにもテキスト表現に頼ってたのが良く分かる。やっぱり色とか線とかの表現力は大きい。

ブログ アーカイブ

tags