2010年5月アーカイブ

date('Y-m-d h:m:s')の結果が12時間ずれる!?

date関数を使うと12時間ずれることがあります。

例えば、現在時が"2010-05-29 17:00:00"のとき、
$ php -r "echo date('Y-m-d h:m:s');"  

2010-05-29 05:00:00

落ち着いて!
自分の書いたコードをよく見て!

原因は、"h:m:s"の書き方が間違っているからです。
正しくは "H:m:s" です!

$ php -r "echo date('Y-m-d H:m:s');"  

2010-05-29 17:00:00

あ~よかった。。。
マニュアルをちゃんと読みましょう。
http://jp.php.net/manual/ja/function.date.php

Lime.phpの最新版のソースコードをダウンロードする方法

Limeというのは、PHPで単体テストを書くためのライブラリです。
ライブラリといってもただのクラスファイルで、lime.phpの1ファイルをインクルードするだけですぐ使えます。
「軽量・シンプル・かんたん」が好きなあなたにはぴったりです。

さてこのlime.phpの唯一の難点、それはどこからダウンロードすればいいのか分かりにくいこと。

すばり、場所はここです、ここ!(ver 1.0.9)
↓↓
http://trac.symfony-project.org/browser/tools/lime/tags/RELEASE_1_0_9/lib/lime.php

バージョンを選ぶならこちら
↓↓
http://trac.symfony-project.org/browser/tools/lime/tags

最新の安定版をダウンロードして使いましょう。
2010.5月現在も、安定版の開発は続いているようです。
Screenを起動する際に、下記のようにすればセッションに名前をつけることができます。
screen -S myname
すると、
$ screen -ls

There is a screen on:
  23477.myname(05/28/10 16:21:23)     (Detached)
のように表示してくれます。

Ubuntu9.04にEmacs23.2をソースコードをコンパイルしてインストールする

ソースコードをコンパイルしてインストールします。
ほぼ下記の記事と同じやり方でできました。サンクス!
Emacs 23.1 on CentOS speg03の日記

$ sudo apt-get remove emacs # 既に入っているパッケージをアンインストール
$ wget ftp://ftp.ring.gr.jp/pub/GNU/emacs/emacs-23.2.tar.gz  #ミラーからソースをダウンロード
$ tar xvzf emacs-23.2.tar.gz  # 展開
$ cd emacs-23.2 
$ ./configure --without-x  # Xは使わない
$ make  # コンパイル
$ src/emacs  # 起動して簡単に動作確認
$ sudo make install #

うれしかったこと

UTF8のファイルを編集するときに、文中に「☆」を書いてもエラーにならない!!
Emacs22のときに作った.emacsがそのまま動くか心配だったんですが、今のところちゃんと動いています。

MySQL charとvarcharの違い

char 固定長
varchar 可変長

例えばchar(4)の場合だと、'a'が格納されても'abc'が格納されても4バイト占有する。


http://dev.mysql.com/doc/refman/5.1-olh/ja/char.html
Ubuntu上のMySQLを起動、停止、再起動する方法。
$ sudo /etc/init.d/mysql start    ←起動
$ sudo /etc/init.d/mysql stop     ←停止
$ sudo /etc/init.d/mysql restart  ←再起動

MySQLのINT型の最小値と最大値は、-2147483648~2147483647です。

MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.2 数値タイプ

この数字を覚えるコツをお教えしましょう。
このようなことはやらない方がよい。
ethna add-action FooBar
ethna add-action fooBar
こうする代わりに、下記のようにすべきである。
ethna add-action foobar

理由

ethna add-action FooBar
↓生成する
app/action/FooBar.php
一方、
ethna add-action foo_bar
↓生成する
app/action/Foo/Bar.php
となる。

一見問題なさそうなのだが、実は両者のクラス名が同じなのである。
どちらも、下記のようなクラスを生成する。
class Project_Form_FooBar
class Project_Action_FooBar
同一プロジェクト内で同じクラス名が2つ存在するのが良くないのは言うまでもない。
また、プロジェクト内でクラス名とファイルパスのマッピングルールが統一されてないと、混乱のもとになる。
Ethna(2.5)でアクションファイルを作るときのファイル名の大文字小文字について、 はまってしまったので調べてみた。

この辺をちゃんと理解していなかったのは私だけではないはずだ。

結論を先に言うと、下記の2つは挙動が異なる。
そして前者を使うべきである。
ethna add-action foo_bar
ethna add-action Foo_Bar

理由

ethnaコマンドでadd-actionをしてみればわかる。

$ ./ethna add-action Foo_Bar

file generated [/home/userdqn/project/skel/skel.action.php -> /home/userdqn/project/app/action/Foo/Bar.php]
action script(s) successfully created [/home/userdqn/project/app/action/Foo/Bar.php]

$ ./ethna add-action bar_buz

file generated [/home/userdqn/project/skel/skel.action.php -> /home/userdqn/project/app/action/Bar/Buz.php]
action script(s) successfully created [/home/userdqn/project/app/action/Bar/Buz.php]
一見、どちらもAaa/Bbb.php形式のファイル名が作られるので同じ挙動のように見えるのだが、実は大きな落とし穴がある。
生成されたアクションクラスファイルのperformメソッドを見てみよう。
add-action Foo_Barした場合
function perform()
{
    return 'Foo_Bar';
}
add-action bar_buzした場合
function perform()
{
    return 'bar_buz';
}
returnの文字列形式が異なっていることがわかる。

一方、add-view -t とadd-templateの挙動を確認してみよう。 

add-view -t Foo_Bar または add-template Foo_Bar とすると、
Foo/Bar.tpl
というファイルが生成される。

add-view -t foo_bar または add-template foo_bar とすると、
foo/bar.tpl
というファイルが生成される。
したがって、下記のようなことをすると正しく遷移できない。
//間違ったやり方 その1
ethna add-action Foo_Bar
した後で
ethna add-view -t foo_bar もしくは ethna add-template foo_bar
//間違ったやり方 その2
ethna add-action foo_bar
した後で
ethna add-view -t Foo_Bar もしくは ethna add-template Foo_Bar
結局、正しく遷移させようとするとfoo_barかFoo_Barかどちらかに統一しないといけない。
//正しいやり方 その1
ethna add-action Foo_Bar
ethna add-view -t Foo_Bar もしくは ethna add-template Foo_Bar

//正しいやり方 その2
ethna add-action foo_bar
ethna add-view -t foo_bar もしくは ethna add-template foo_bar

公式サイトを見る限りでは、"add-action foo_bar"が標準のようである。

まとめ

まとめると、下記のようなファイル名になるのがEthnaの公式仕様と思われる

app/action/Foo/Bar.php
app/view/Foo/Bar.php
template/ja_JP/foo/bar.tpl
あーすっきりした。
ファイルを開いときに自分の望まない文字コードになっていて、「このファイル、UTF8で開き直したい!」という場合には下記のようにします。

C-x RET c 文字コード RET M-x revert-buffer

【例】

UTF8で開きなおす
C-x RET c utf-8-unix RET M-x revert-buffer

EUCで開きなおす
C-x RET c euc-jp-unix RET M-x revert-buffer

find -iname *foo*
とやると、
  • FOO.txt
  • foo.txt
  • fOO.txt
  • Foo.txt
などが引っかかるようになります。

CentOS5.4でApacheの初期設定をしていて、/var/www/html/内のファイルを表示させるところまでは簡単にできたんだけど、
VirtualHostで/home/hoge/* 内のファイルを表示させようとするとできない。

2006年から使っていたs225サーバが異常な高付加になっていたので、同じXrea内の新しいサーバに引越ししました。
その結果、嘘みたいにレスポンスが速くなりました。

今のところ大満足です。
ここ数ヶ月、サーバが遅すぎてブログ記事を書く気にならなかったのですが、これからはどんどん記事を投稿していけそうです。

話の経緯

Xreaのs225サーバのレスポンスがすごく遅くいことに気づく。
ブログやWikiのページ遷移に10秒異常かかる状態。

サーバ負荷観測所で負荷を見ると、何とロードアベレージが20以上!これはヤバイ。

カスタマーサポートに問い合わせて改善を要望したが返事なし。

もうXreaを卒業しようと、さくらインターネットや他のVPS業者を検討。

Serversman、Osukiniサーバなどに申し込んでみる。
申し込みが混雑しているらしく、音沙汰なし。

Xrea内の別サーバへ移管することを決心する。


最後の結論にいたるまでが長かった。。。反省。


サーバ移管のやり方

  • サーバ負荷情報を見て、負荷の低いサーバを探す
  • 無料サーバアカウントを新規で申し込む
  • 有料権限をその新規サーバに移管する
  • 旧サーバでDBをダンプする。
  • 新規サーバの管理画面でサーバ間コピーをする
  • ValueDomainのDNS管理画面で、ドメインと紐付くIPアドレスを旧→新サーバのIPアドレスに変更する
  • 新規サーバでドメインウェブの設定をする。(DNSが浸透する前に設定するとエラーが出て設定できないので注意)
  • 新規サーバでDBの復元をする
  • Pukiwikiなどでパーミッションエラーが出たらパーミッションを適切に変更する
  • MovableTypeで管理画面ログインしようとするとエラーが出るので、mt-config.cgiのDB接続情報を変更する(パスワード変更)


気をつけるポイントは下記のとおり。


  • サーバ間コピーは、コピー先のサーバの管理画面から行うこと(逆はできない)
  • サーバ間コピーは、無料→有料へコピーする(逆はできない)
  • サーバ間コピーでは、パーミッションは維持されるが、ファイルによってはオーナーが変わってしまうことがある。(apache → dqneoなどに変更される)。そのため、Pukiwikiでパーミッションエラーが出る。これは、コピー後にパーミッション設定を変更したら解決できた。

なお、旧・新サーバでのアカウント名を同じにしておくと移管が楽なのでオススメです。

参考にしたサイト

Puttyでリモートログインして作業しているときに、突然日本語が入力できなくなった。

そういうときは、Alt+「半角全角」キーを押すと、日本語入力できるようになる。

原因とか仕組みはよくわからない。

人気記事

このアーカイブについて

このページには、2010年5月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年12月です。

次のアーカイブは2010年6月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事