header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

2009/05/31 19:32:52 日記 none Comments Tags:
2009/05/31 08:07:46 日記 none Comments

よく使う手なのでメモっておく。意外とやっている人は少ないような気がする方法。

まずバックアップするためのMySQLの専用ユーザーを作成する。間違ってもmysqlのrootのパスワードを設定ファイルに書いたりしてはいけない。(自宅鯖で面倒なときはやるけど、本番システムではありえない)

GRANT SELECT, LOCK TABLES ON wordpress.* TO 'backupuser' IDENTIFIED BY 'foobar';

↑バックアップユーザーを作成。でもアクセス元の制限がないので、下のようにアクセス元を制限しておかないと危険。

GRANT SELECT, LOCK TABLES ON wordpress.* TO 'backupuser'@localhost IDENTIFIED BY 'foobar';

んで、肝なのだが、バックアップ&世代蓄積にlogrotateを使う。/etc/logrotate.d/以下に適当な名前でファイルを作るよ。拡張子も特に気にしなくてよい。

/opt/backup/mysql/*.sql {
    daily
    rotate 30
    size 0
    missingok
    compress
    create 444
    postrotate
        mysqldump -ubackupuser -pfoobar wordpress> /opt/backup/mysql/dump.sql || true
    endscript
}

これ何やっているかというと、毎日前日分のバックアップファイルをローテーションして、それが終わったら当日分のデータベースのバックアップをmysqldumpコマンドを使ってとっているだけ。サイズが0でも日次で強制ローテーション。
注意点としては、postrotateもログファイルが1個もないような場合は動作しないので、初回だけ手でmysqldupコマンドを発行してログを作っておくくらいかな。

なお、強制的にlogrotateを実行させるには

/usr/sbin/logrotate -v /etc/logrotate.d/mysql_backup

みたいに実行すれば良い。

2009/05/31 05:11:42 日記 none Comments Tags:

200905

平均4時32分。GWの休みや土日含めて6時を超えているのが1回だけ。ほとんどが5時前に起床できており、規則正しさ抜群!。
まぁ体が朝方モードに完全に切り替わっていて、夜はその分10時には眠くなっちゃうから偉そうなことは言えないけど、でも朝の方が生産性が高いのは間違いないと思っている。

2009/05/30 06:28:33 日記 none Comments

ということで、個人的には最初から決勝に残る気まんまんだったんだけど、残念ながら、奨励賞。
奨励賞ってサイトに掲載されてない新たに作られた賞で10人選ばれた様子。

[各賞]
・チャンピオン 1名様
・優秀賞(決勝進出者) 4名様
・NEC賞 1名様
・Microsoft賞 1名様
・64ビット賞 1名様
・ヤング奨励賞 1名様
・G.G賞 1名様
・エレガント賞 1名様
・Think IT賞 1名様
・EE Times賞 1名様
・奨励賞    10名様

で、賞品は何??(w

それにしても60個インストールしてこの順位だとすると、上位はコンプリートに近いのか。
もしくはソースコード改修して、SQLServer対応しまくったのか。
まぁ、いくつか実際の提案に使えそうなソフトウェアを見つけられたことが一番の収穫だな。

2009/05/29 11:05:45 wordpress 2 Comments

前のエントリで書いたWordTwitだが動作したよ。

修正ポイントを書いておく。
(1)wordtwit.phpで日本のタイムゾーンが考慮されていない?
wordtwit.phpの288行目あたり。

$cur_time = strtotime( $post->post_date_gmt );

で投稿した時刻を取得して最終更新時刻と比較しているんだけど、こいつがGMTでの日時になっておりタイムゾーンが考慮されていない様子。なので以下のように変更する。

$cur_time = strtotime( $post->post_date );

(2)MySQLのバージョンによってはテーブルが作成されない。
wordtwit_check_table() 関数の中でテーブルの存在チェックをして、無ければ作成しているんだけど、ここで文字コード等の属性を設定してテーブルを作成している。しかし、これができるのはMySQL4.1以降とMySQL5以降のはずで、僕が使っているさくらのレンタルサーバだと、4.0.27のバージョンなのでテーブルが作成されない。
仕方ないので自前で以下のようなクエリを使ってテーブルを作ってやる必要がある。

CREATE TABLE `wp_tweet_urls` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `original` varchar(128) DEFAULT NULL,
  `url` varchar(7) NOT NULL,
  `views` int(11) NOT NULL DEFAULT '0',
  `post_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `url_index` (`url`),
  KEY `original` (`original`),
  KEY `url_index_2` (`url`)
)

意外とはまったなぁ。

2009/05/29 07:03:40 wordpress, 日記 none Comments

タイトルのまんま。こういうこともプラグインで簡単に出来てしまうwordpressって楽でいいね。
WordTwitというプラグインを使う。

使い方も簡単。いつもどおりアーカイブをダウンロードして解凍し、pluginsフォルダにアップロードして有効化。有効化が完了したら設定画面で自分のTwitterのアカウントとパスワードの設定をすれば良い。

#はずなんだけど、うまくPOSTしてくれていないような・・・。

2009/05/29 06:51:25 wordpress none Comments

このブログをiPhone対応してみた。iPhoneでみると以下のように表示される。

e794bbe5838f-004   e794bbe5838f-009

これ実現するためにはWPTouchというwordpressのプラグインを使えば良い。
導入は容易で、上記サイトから最新版をダウンロードしてきて解凍し、wordpressのpluginsディレクトリにアップロードし、有効化するだけ。

なお、WP-Cacheのようなコンテンツをキャッシュするプラグインを利用しているとバッティングしてしまって、キャッシュ切れのあとの初回アクセス時の媒体用のコンテンツが表示されてしまうことになるので注意が必要だ。確か同じような問題に携帯対応のときぶちあたっているのだが、もう面倒なので、一旦WP-Cacheを無効にしてある。

それにしても、中小企業がマルチキャリア対応のWebサイト作るんだったら、やっぱりブログエンジン使うのが一番簡単だよな~、とつくづく思うよ。

2009/05/29 06:12:16 日記 none Comments

Yahoo!アクセス解析をこのブログに入れてみたよ!。まぁ既にGoogleAnalyticsも使っているわけだが。

yahooe382a2e382afe382bbe382b9e8a7a3e69e90

それにしても、アクセス解析の製品群はライフサイクルがやたらと早い。

日本だとここんところOmnitureのサイトカタリストが圧倒的優勢になりつつある状況。ただ、サイトカタリストって使いこなしが難しいんだよね。画面のごちゃごちゃ感とあいまって、PCリテラシの低い人にとっては画面自体の敷居がかなり高い。

そういう意味では、このYahoo!アクセス解析みたいに軽量な解析ツールは、さくっと結果見たい人には良いだろうね。

2009/05/28 05:29:22 PHP none Comments

以前にも書いたんだけど、CentOS5系を利用していると、バリデーションのAlphaNumericが動作してくれない。その回答としては、環境に問題あるので、PCREをバージョンアップして、という風に書いたが、これだと、納品後どのサーバに配置するかによって、アプリケーションの動作に差が出てしまう。環境差によって差があるのであれば、それを検証するテスト書かなきゃいけなくなるので、今回は本体を修正して、環境非依存な状態にする方法を紹介する。

libsディレクトリの中にあるvalidation.phpを修正する。

修正前

function alphaNumeric($check) {
    $_this =& Validation::getInstance();
    $_this->__reset();
    $_this->check = $check;

    if (is_array($check)) {
        $_this->_extract($check);
    }

    if (empty($_this->check) && $_this->check != '0') {
        return false;
    }
    $_this->regex = '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/mu';
    return $_this->_check();
}

修正後。$_this->regexのところが普通の正規表現に変わっている。

function alphaNumeric($check) {
    $_this =& Validation::getInstance();
    $_this->__reset();
    $_this->check = $check;

    if (is_array($check)) {
        $_this->_extract($check);
    }

    if (empty($_this->check) && $_this->check != '0') {
        return false;
    }
    $_this->regex = '/^[a-z\d]*$/i';
    return $_this->_check();
}

ちゅーか、なんでPCREつかっているのか分からん。

2009/05/25 07:41:53 PHP none Comments

まだ色々試行錯誤中なんだけど、途中経過としてメモ。

cakephpでSimpleTestを使ったテスト自動化をしているんだけど、コントローラーのテストでは、メソッドにredirectが含まれていると、テストが途中で中断してしまう。(テスト自体がリダイレクトされてしまう)。

絵で説明すると、最初にSImpleTestにアクセスすると、以下のような画面が表示される。これは特に問題ない。

caketest12
んで、メソッドの中にredirectが含まれないやつのテスト結果。これも緑なのでOK。

caketest31
じゃあ、ということで、以下のメソッドについてテストを書く。

function login(){
    if ($this->Auth->user())
    {
        if (!empty($this->data))
        {
            $this->log("ログインしました", LOG_DEBUG);
            $this->User->updateLoginInfo($this->Auth->user('id'));
            $this->redirect($this->Auth->redirect());
        }
        else
        {
            $this->redirect(array('action' => 'index'));
        }
    }
    else
    {
        if (!empty($this->data))
        {
            $this->Session->setFlash($this->Auth->loginError);
        }
    }
}

もう、ふんだんにredirectしちゃってる。まぁloginだから普通なんだけど。
んで、テスト内容的には

  • ログイン完了してたら、「ようこそ××さん」があるはず
  • GETでアクセスしたら、ログイン画面があるはず
  • 誤ったPOSTデータが来たら、ログインエラーのメッセージがあるはず

とかそんな感じになるかと思うのだが、これ、そのままだとテスト出来ない。
例えば、ログインのテストコードは以下のように書いてみる。

$data = array(
    "User" => array(
        "username" => "foo",
        "password" => "bar",
    ),
);
$result = $this->testAction('/users/login', array(
    'data' => $data,
    'fixturize' => true,
    'method' => 'post',
    'return' => 'contents')
);

これは正常ログインするケースなのだが、正しい動作なら、/usrs/loginで正常に認証を完了すると、ログイン後トップページにリダイレクトされて、「ようこそ××さん」とかが出るはず。なので、戻り値の$resultを正規表現でごにょごにょすれば完成のように見えるんだけど、このテストを実行すると、下図のようになる。

caketest22

残念ながら、テスト対象クラスの中のredirect関数で、本当にredirectされちまった。。。

ということで、対応方法を色々考えたのだが、一番手っ取り早い方法を書いておく。それは

runkit(PHPの拡張)

を使う。runkitは

runkitは、PHPの定数や関数、クラス、メソッドを追加・変更・削除したり、独自のスーパーグローバル変数を定義したりできるPHPのエクステンションです。

http://www.phppro.jp/phptips/archives/vol50/1より)
ということで、今ある関数やクラスの挙動を外部から動的に変更できるすぐれものだ。

こいつを使って、例えばこうする。

function setUp() {
    $this->Commodity =& ClassRegistry::init('Commodity');
    $this->User =& ClassRegistry::init('User');
    $this->User->useDbConfig = "test_suite";

    //redirectメソッドを抹消
    runkit_method_redefine("UsersController" , "redirect"  , '$url, $status = null, $exit = true'  , "return true;" );
    $this->Users = new TestUsers();
    $this->Users->constructClasses();
}

これで、UsersControllerのredirectメソッドは単にtrueを返すように挙動が変更され、テストが途中で中断されることもなくなった。
あくまでテストコードなので、これで十分だと思うのだが、どうだろうか?
もっと良い方法があればコメントで教えてほしいなぁと。

 

日記 PHP オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有


ads

読まなきゃモグリ