2005年12月29日木曜日

エクセルで先頭の0(ゼロ)を消さないようにする

郵便番号とか電話番号など、先頭がゼロで始まる数字を扱う場合、事前にセルの書式を”文字列”とか”ユーザー定義”にしておかないと、エクセルが勝手に値を整数化してしまって「03→3」とか「0021→21」という具合に変換されてしまう。
これを回避する方法は、
・事前のセル書式指定(前述の通り)
・セルに値を入力する前に、「'」(シングルクォート)を入れる。 例)「'03」
・「="値"」とする 例)「="03"」
覚えておいて損は無いと思います。
それから「="値"」の方法であれば、自分が良く使う「HTMLのテーブルをエクセルで表示させる」場合でも使えます。
下記のサンプルをDLし、まずエクセルでファイルを開き、そして同時にテキストエディタ等でも開いて見比べてみてください。
Download file

mysqldumpでスキーマだけ出力する

スキーマだけ出力し、データ(insert文)は出力したくない、という場合は下記で対応可能。

mysqldump --no-data DBNAME > mysql.dump

InnoDBがDISABLEDになってしまう(InnoDB: Error: log file ./ib_logfile0 is of different size ....)

いま使っているMySQLのバージョンは5.0。InnoDBはバージョン4.0くらいからデフォルトでサポートされるようになっているので、--without-innodbのオプションでインストールしない限りは普通に使える。
が、突然InnoDBが使えなくなってしまった。
mysql> show engines;
とやってみると、InnoDBがDisabledになってる。なぜだろう。
errログを見てみると、
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
と書いてある。どうやら、my.cnfにあるInnoDBのファイルサイズと、実在するファイルサイズで整合性が取れなくなっているらしい。というわけで、
ib_logfile
ibdata
この2つのファイルを削除し、mysqldを再起動したら直った。

2005年12月26日月曜日

JavaScriptで、文字列を動的に変更する(innerText)

aaaa




ソース
<p id="hoge">aaaa</p>
<input type="button" onClick="hoge.innerText='bbbb';" value="文字列を変える">


こうすると、ボタンを押したら文字列「aaaa」の部分が「bbbb」に変わる。ただ、この機能はIE以外のブラウザでサポートしていなかったりするみたいなので注意が必要。

2005年12月24日土曜日

windows版MySQLで、テーブル名を大文字にするには

Windows版のMySQLは、デフォルトでテーブル名等が強制的に小文字にされてしまう。たとえば「TABLE」としたいのに、「table」になってしまうなど。
これを回避するには、my.iniの[mysqld]の項に
lower_case_table_names=0
を入れてやるだけ。MySQL再起動すれば解決です。
この値のデフォルトは、Windows では 1 で、Unix では 0 です。

2005年12月23日金曜日

MRTGを入れた

自宅サーバーに、MRTGを入れてみました。
「mrtg linux インストール」でググってみたら、なんだか面倒そう。しかしここ最近サーバーの調子が悪かったので頑張って入れてみることにした。
http://vine.1-max.net/net-snmp+MRTG.html
このサイトを参考に(というかほぼそのまんま)、インストールを進めたところ、特に何もひっかからずすんなりインストールできました。案ずるより産むがやすし。
今回は、apt-getが大活躍。net-snmp、zlib-devel、libpng-devel、gd-develなどをapt-getでインストールしましたが、とっても楽ちんでした。

MySQL : Error #1364 : Field '%s' doesn't have a default value

ローカルで開発しようと思い、Windowsにapache、php、mysql5.0を入れた。で、アプリを動かしてみたら、エラーが出る。調べてみたらSQLエラーらしい。
Error #1364 : Field '%s' doesn't have a default value
というエラーメッセージが。
insert into TABLE (aaa, bbb) values ('AAA', '');
という具合に、''で空白を挿入しようとするのがダメらしい。普段Linux上でMySQLを使ってるときはこんなエラー出たこと無いのに。。。
ググってみても、それらしきソースは見つからない。そこでmy.iniを見てみると、なんだか見慣れないオプションが設定されている。
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
http://www.limy.org/program/db/mysql/mysql_option.html
↑このサイトによると、「他ベンダーのデータベースやバージョンの違うMySQLとの互換性の為に使用します。詳細は不明です。」とのこと。
とりあえずコメントアウトしてMySQL再起動してみたら、見事解決。。。
一体なんだったんだろう。よくわからないが、とりあえず良かった。

phpからMySQLへ接続するとき「Client does not support authentication protocol requested by server」というエラーが出る

Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client

こんな感じのエラーが出た場合は、

SET PASSWORD FOR root@localhost = OLD_PASSWORD('password_str');

で解決。
パスワード暗号化の互換性で起きる問題らしい。

2005年12月22日木曜日

phpのfsockopen関数でhttpsのサイトへ接続する

fsockopen関数でhttpsのサイトへ接続する場合、phpを --with-openssl のオプションをつけてコンパイルする必要がある。そうすると、phpinfo の Registered PHP Streams の項目に「https」が出てくる。
それをやらずにfsockopenでhttpsサイトにつなごうとすると、「no SSL support in this build」というエラーが出てしまう。
。。。
ウェブでいろいろ調べた結果、このことはわかったのだが、どーーーしてもうまくいかない。何度コンパイルしてもダメ。
なので、
・apacheを止める
・make distcleanする
・再コンパイル
・make&make install
これをやったらうまくいった。結局、半日くらい無駄にしてしまった。。。
phpを再コンパイルする場合は、必ずapacheは止める。更に、それでもダメな場合はいったんmake distcleanしてやる。
phpの再コンパイルで詰まったら、このことを思い出すようにしよう。。。

mysqldumpで文字コード(charset)を指定

mysqldump HOGE_DB --set-charset=ujis > HOGE.sql
という感じで、--set-charset=*** と指定してあげるだけ。

2005年12月21日水曜日

MySQL関数CASTで型変換する

select cast('-0008000' as signed);

-8000
と言う具合に変換できる。
asの後ろにつけられる引数は、以下の通り。
BINARY
CHAR
DATE
DATETIME
SIGNED (INTEGER)
TIME
UNSIGNED (INTEGER)
http://dev.mysql.com/doc/refman/4.1/ja/cast-functions.html

ImageMagickをソースからインストールする

MT用のImageMagick。何度か失敗したが、以下の手順でうまくインストールできた。
# tar zxvf ImageMagick-6.2.5.tar.gz
# cd ImageMagick-6.2.5
# env CPPFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure
# make
# make install
# cd PerlMagick
# perl Makefile.PL
# make
# make install

自分で作る blog ツール

ちょっと気になってる一冊。年末年始に読んでみようかな。

2005年12月20日火曜日

痛恨のサーバーダウン

どうも最近、自宅鯖の調子が悪い。
「うっ!httpの反応がない!」と思ったのに、ポート8080のzopeはサクサク動いてる。apacheがおかしいかな、と思ってmod_perlを外してみたりしてたら、次は家庭内のネットワークがおかしくなったりとトラブル続き。(未だに解決したかどうかすらわからない)
そして更に運の悪いことに、サーバーダウン中にクローラーが巡回していたようで、各検索エンジンの順位が下がってしまった!!
Google:3位→6位
Yahoo:10位→圏外。。
という下がりっぷり。特にYahooが圏外になったのはイタイ。。。_| ̄|○
これまで積み重ねてきたものが一瞬にして吹き飛びました。うぅ。。(;д⊂)
SEO以前に、インフラの安定が大前提ということが、身に染みて分かりました。。。

2005年12月17日土曜日

MySQLでSQL文をコメントアウトする

select
col1,
col2,
/*hoge*/
col3
from
TABLE;
という感じで、コメントアウトしたい部分を/**/で囲うとコメントアウトできる。

2005年12月15日木曜日

LinuxでUSBメモリを使う(お手軽バックアップ)

知り合いの自宅サーバーがクラッシュし、大事なデータがすべて消えて無くなったという話を聞いてからというもの、「バックアップをちゃんと取らなくちゃいけないなぁ」とずっと考えていた。

で、ある日突然「この、買ってはみたものの、ほとんど使ってないUSBメモリを使えばいいのでは?!」と思いつき、さっそく実行してみた。
「USBメモリ Linux」でググってみたら、いくつか参考になりそうなページが出てきた。それらによると、

# mkdir /mnt/usbfm
# mount -t vfat /dev/sda1 /mnt/usbfm/


すればいいとのこと。で、そのままやってみるけど、ダメ。

うーん、なんでだろ。と思いつつ、ls /mnt とやってみたら

/mnt/ClipDrive_______-sda1/

という、見慣れない名前のデバイスがマウントされてる。

/var/log/messages を見てみたら

murasaki.usb[11800]: usb device is added

というログが。なんだかよくわからないけれど、「murasaki」というのが自動でマウントしてくれた様子だ。さっそくUSBメモリにファイルの出し入れをしてみる。さすがUSB。速い。

これですべての準備は整ったので、バックアップ用のコマンドをcronに仕込む。バックアップを取るのはmysqlのdumpデータとpublic_html以下すべてをtar.gzで固めたもの。あわせて70MB弱なのでだいぶ余裕がある(使ってるUSBメモリは128MB)。cronの実行時刻は毎早朝4時にした。

。。。

翌朝起きて、USBメモリを見てみたら、バックアップファイルたちのタイムスタンプがきっちり4時になっていた。よしよし。

USBメモリでのバックアップ、かなりお手軽なのでオススメ。最悪の事態が起こったときでも大切なコンテンツは残るので、枕を高くして寝られますw。

あと、最近はGBクラスのUSBメモリも発売されてるので、画像など容量の大きいファイルのバックアップにも使えるかも。

ちなみにこの記事で使った環境は、

USBメモリ:バッファローのClipDrive 128MB
ハード:IBM NetVista M42 Slim
OS:VineLinux3.2

です。

Smarty Tips

◆ループが10,20,30,40...回目のときだけ特別な表示をする
{foreach from=$list item="list" name="hoge"}
{if $smarty.foreach.hoge.iteration % 10 == 0}
<tr>
<td colspan="3">10の倍数</td>
</tr>
{/if}
<tr>
<td>{$list.email}</td>
<td>{$list.id}</td>
<td>{$list.pass}</td>
</tr>
{/foreach}

2005年12月10日土曜日

phpで改行コードを置換する

str_replaceで置換してやるだけでできます。
CR:
LF:
/* CR+LF -> LF */
$text = str_replace("
", "
", $text);
/* CR -> LF */
$text = str_replace("
", "
", $text);
/* LF -> CR+LF */
$text = str_replace("
",'
',$text);

2005年12月8日木曜日

2005年12月7日水曜日

帰ってきた司馬遼太郎を読む(MSN)

ここしばらく、司馬遼太郎を読むがMSNで17位前後をうろうろしてたんですが、定位置の3位に帰ってきた。
しかも、ただ帰ってきただけじゃなく、「"shiba-ryo.com" から得た他の結果を表示します。」というリンクのおまけがついて帰ってきた。
帰ってきた司馬遼太郎を読む(MSN)
サイト内のインデックスされてるページをずらっと一覧表示してくれるものらしい。ページ数がある一定以上に達するとこのリンクがつく仕組みになってるのかな?

2005年12月5日月曜日

AWSが文字化け

サーバーを新調したら、MTのaws.plモジュールで文字化けするようになってしまった。ググってみたところ、どうやらPerl5.8で発生するエラーらしい。前のサーバーのPerlは古かったから大丈夫だったんだろう。
Perl5.8にはUTF-8フラグがどうのこうの、、、という問題があるみたい。なんだかめんどくさそうだったので、Perlを5.6にダウングレードして解決してしまった。
完全に枯れてると思ってたPerlも、ちょこちょこと細かい改善がされている様子。今後どんな方向に進んでいくんだろう。

2005年12月4日日曜日

自宅サーバー入れ替え完了

自宅サーバーのハード入れ替えが完了した。結構手間取るかな、と思っていたけど、これといって大きなトラブルもなく無事終了。
ちなみに Celeron 500GHz → Pen4 2.2GHz にスペックが上がったので、かなり処理が早くなりました。たとえば、MovableTypeがmod_perlなしでサクサク動くようになった、とか。そのうちメモリも増強してもうちょっとスペック上げようと思ってます。

2005年12月3日土曜日

phpでサイズの大きいファイルをアップする

phpで、ファイルをアップロードするスクリプトを書いた。
で、そのスクリプトで8.5MBのファイルをアップしようとすると途中で止まってしまってうまくいかない。
どうやら、php.iniの、
post_max_size
upload_max_filesize

が影響するようだ。
phpinfo();で見ると、デフォルトでは
post_max_size = 8M
upload_max_filesize = 2M
になってる
で、これをそれぞれ
post_max_size = 10M
upload_max_filesize = 10M
にしたら、うまくいきました。(かなり時間かかるけど)
php.ini変更したら、apacheの再起動も忘れずに。

2005年12月2日金曜日

MySQL5.0をインストール

ここからダウンロード
http://download.softagency.net/MySQL/downloads/mysql/5.0.html
解凍
# tar zxvf mysql-5.0.15.tar.gz
# cd mysql-5.0.15
configure , make , make install
# ./configure --prefix=/usr/local/mysql --with-charset=utf8
# make
# make install
※utf8しか使わないので、--with-charset=utf8にした
# ./script/mysql_install_db
# cp /usr/local/src/mysql-5.0.15/support-files/my-small.cnf /etc/my.cnf
# /usr/local/mysql/bin/mysqld_safe --user=root &
# /usr/local/mysql/bin/mysql --user=root
mysql> SHOW VARIABLES LIKE "char%";
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
 ↑--with-charsetの指定なし
mysql> SHOW VARIABLES LIKE "char%";
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
これまで使っていた4.0では文字コードが統一しておらず、SJIS、EUC、UTF-8の3種類のDBが混在している。これらをすべて5.0に移行するのは大変そうな予感がしたので、SJISとEUCのデータは全部削除。ほとんど使ってないデータだったのでちょうど良かったのかも。今後扱うデータはすべてUTF-8で統一しようと思う。
4.0のデータをdumpして5.0に入れようとするが、どうもうまくいかない。
/usr/local/mysql/bin/mysql -uroot < dump.sql
みたいな感じのことをすると、unknown databaseというエラーが出てしまう。なのでDBは手動で作り、個々にDBを指定してデータを移しかえた。

2005年12月1日木曜日

自宅サーバー二代目を購入

2002年頃から使っている、初代自宅サーバーがやばい。
IBMのPC300というのの新古品をネットショッピングで購入。自分の部屋に、床にそのままおいてある。

で、その初代が大きめの地震のときに、「バタンッ」と倒れてしまった。それ以降「ウィーーーーーンッ」という、かなりアヤシイ音を発するようになった。。

うるさいし、データ吹っ飛んだら怖いし、、、というわけで二代目購入を決意。

さっそくネットで適当なのを見つけた。

購入したのはIBMのNetVista M42 Slim。中古で25,000。黒くてかっこいい。
スペックはPen4の1.9Ghz。Mem256M。メモリはPC133なのでかなり古めだが、あまってるメモリがそのまま使えるので良しとする。

今回はじめて中古PCを買ったが、けっこう汚かった。
ケースの細かいキズはしょうがないが、内部に埃がいっぱい貯まっていた。
中古屋で掃除してくれているものだと思ってたのでちょっと残念だった。

たぶん、下取りして外側だけ雑巾でふいてそのまま出荷してるものと思われる。
そう考えると中古PC販売って相当儲かりそうな気がする。

とりあえず、VineLinux3.2インストール完了。
続いてApacheやMySQL、phpなどをインストール中。
あまり時間がないので少しずつ作業を進めてまずが、なるべく早めに二代目に切り替えようと思ってます。