2008年5月31日土曜日

Fedora9で外部サーバからFTPでファイルがダウンロードできない

自社のローカルにあるFedora7で、外部サーバにあるバックアップファイルを定期的にダウンロード
していたのですが、Fedora9に変えたところ定期的にダウンロードできなくなっていました。

原因はiptableでした。
-------------------------
【解決方法】
/etc/sysconfig/iptables-configの
IPTABLES_MODULES=""
となっている所を変更
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

/etc/sysconfig/iptableに下記を追加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

iptablesを再起動
/etc/rc.d/init.d/iptables restart

以上の設定により外部のFTPサーバからファイルをダウンロードすることができるようになりました。

2008年5月29日木曜日

鶏カツ丼

先日、飲み会でぢどり亭に行きました。

もう少し何か食べたいと思いメニューを見たら「鶏カツ丼」がありました。
そしてその下に「鶏カツ丼のうえ」なるものが。

これだ!と思い「鶏カツ丼のうえ」を注文。
しばらくして「鶏カツ丼のうえ」が来てびっくり。
・・・なんとご飯がありません。

あくまで「うえ」であって「上」ではありません。
上ロースとかの「上」と勘違いしてました。

ちゃんと考えればわかりそうですが、酔っていたからということにしておこうw

2008年5月28日水曜日

SQLで年度別のデータカウントを取得する

仕事で年度別のデータカウントを取得しなければならなかったので、できるだけプログラム(PHP)で処理をしなくていいようにSQLを考えてみた。

※MySQLのみ想定しています。Postgresの場合はpdateの型とdate_formatをto_char(pdate, 'YYYY-04-01 00:00:00')とすれば良いかと。動作保障はできませんので悪しからず。MySQL5.0.45での動作は確認済。

------------------------------------------------------------
年度はX年4月1日~(X+1)年3月31日とする。
例: 2008年4月1日~2009年3月31日は2008年度、 2008年3月31日は2007年度

テスト用テーブル:test
id, pdate(DATETIME型)
1,2008-03-31 00:00:00
2,2008-04-02 00:00:00
3,2007-10-21 00:00:00
4,2007-04-02 00:00:00
5,2007-03-31 00:00:00
6,2006-04-01 00:00:00

上記の年度はそれぞれ 2007, 2008, 2007, 2007, 2006, 2006 となるはず。

【SQL】
SELECT pdate , count(pdate) as yearly_cnt FROM (
SELECT extract(YEAR FROM pdate)-1 as pdate, id FROM test WHERE pdate <>
UNION
SELECT extract(YEAR FROM pdate) as pdate, id FROM test WHERE pdate >= date_format(pdate, '%Y-04-01 00:00:00')
) as tmp_tbl GROUP BY pdate

【実行結果】
pdate yearly_cnt
2006 2
2007 3
2008 1

2008年5月27日火曜日

Smartyでimplodeを利用する。

Smartyのテンプレート内でimplodeを利用するには下記の様に記述します。
{","|implode:$aryData}

$aryDataが array("A", "B", "C"); となっているとすると、上記コードは
A,B,C と表示されます。

ちなみにimplodeのマニュアルによると「歴史的な理由により、引数をどちら の順番でも受けつけることが可能」とあるので、
{$aryDataimplode:","}
としても同じ結果が得られるはず。

しかしながら結果は
Array

{$aryData|implode:","}
とするとOK

・・・なぜ?

ちなみにSmartyのVersionは 2.6.17です。

2008年5月26日月曜日

Virtual PC 2007で動作しているFedora7の時間がおかしくなるのを自動的に直す

私は現在開発でVirtual PCにFedora7をインストールして、apache, php, MySQLを動作させています。

Virtual PCを利用しているとよく「状態の保存」を利用するのですが、その場合、復帰させると時刻が進まないままになってしまっています。

時間に関係するような処理をしていると、実際の時間とずれているので困ることがあります。
自動的に時間を修正させることでその問題に対処します。

ntpdateコマンドを定期的に実行することで実現させます。
ntpサーバはNICTのntpサーバを利用します。
※自身が利用しているプロパイダでntpサーバを利用できないかをまず調べて、  利用できるならそちらを利用する方が良いと思います。
 OCNASAHIネットはntpサーバがあるようです。

# crontab -e
@reboot /usr/sbin/ntpdate ntp.nict.jp
0 * * * * /usr/sbin/ntpdate ntp.nict.jp

上記により起動時と毎時0分にntpサーバとの時刻同期が実行されます。

しかしながら、一度時刻同期をしてしまうと「状態保存」「シャットダウン」をしない限りはさほどずれは問題にならないので、毎時間実行するのは無駄のような気がします。
1日10時間起動してても単純計算で10回程度ですが、多くの人が一つのntpサーバに問い合わせるとサーバへの負荷とトラフィックの増加を招きます。
できる限りそういう事態は避けたいところ。

調べてみるとWindowsTimeサービスなるものがあるらしいのでそれにチャレンジしてみる予定。

2008年5月25日日曜日

Virtual PC 2007にFedora9をインストール

マシン構成
 OS : Windows Vista Ultimate
 CPU: Core2 Duo E6850
 Memory:4G

Fedora9をここからダウンロード。

Mirror選択が面倒な人はここ。→ Fedora-9-i386-DVD.iso

インストール時のオプションは
vesa i8042.noloop psmouse.proto=imps clock=pit noapic nolapic vga=786

インストール後に起動しようとすると「回復できないプロセッサエラー」が1回発生したあと起動できる。
その後、起動時に必ず「回復できないプロセッサエラー」→「リセット」が起こる。

noreplace-pravirt

をオプションに追加することで「回復できないプロセッサエラー」が発生することなく起動可能。