2010 年 2 月 15 日 | カテゴリー: LAMP奮闘記, Linux, 徒然なるままに…

以前から、自分が尊敬している方のブログ等々で紹介されており、「いつか読みたいな~」と思っていた書籍を某巨大書店にて発見したので遂に購入しました。

発売は今から約10年前とコンピュータの世界では遥かなる昔にあたるのですが、書かれている内容は今でも全く色褪せず、様々な示唆に富んでいます。

UNIXという考え方

曰く「Small is beautiful」。1つのプログラムには1つのことをうまくやらせる。小さなプログラムを上手く組み合わせて、梃子の効果で大きな機能を実現する。

自分が書くコードはそういう概念をしっかり実現出来ているかな??まだまだだなぁ…。道は険しく果てしないなぁ…。と、自分の無力さを痛感させられる一面も持ち合わせていますが、それでも先人の叡智の息吹がそこかしこに感じられる良書だと感じます。

最近、「特定の分野に特化したCMS」というものを友人と一緒に作り始めたのですが、その実装を考えるうえで非常に良いタイミングで読了したものだと思います。ページ数もそんなに多くないので、UNIX系のOS(つまりLinux)を触る方は是非是非一度手に取って、その思想・哲学に触れてみてはいかがでしょうか。

個人的に一番印象に残っている(記憶で書きますので実際の文章どおりではないですが!!)のは「普通は銃で足を打ち抜かない為に、いかに銃に触れさせないかを考える。ところがUNIXは、銃に弾を込めて尚且つ銃口を足元に向けて銃を渡す」という表現でした。これは、普段足を打ち抜きまくっている人ほど共感出来る表現ではないでしょうか^^

そのリスクと共に与えられる「完全な自由」。これこそUNIX(Linux)の最大の魅力ではなかろうか、と様々な思いを巡らせつつ、再びコードの海へと飛び込むのでした。

今日はここまで。

2010 年 2 月 3 日 | カテゴリー: LAMP奮闘記, PHP, まぎれもなくただのメモ

PHPはやはり便利だなぁ、と痛感したついでにメモ。

先日の郵便番号データですが、日本郵便さんのHPで毎月初めに差分データを公開してくださっています。

削除対象データと追加対象データがそれぞれ別CSVとしてDLできますが、そのファイル名は以下のような感じです。

  • 削除データファイル名・・・DEL_yymm.CSV
  • 追加データファイル名・・・ADD_yymm.CSV

この差分データをPHPスクリプトでSQLiteに反映させてしまおう、と考えてコードを書いてみたのですが、検証でいきなりつまづきました><

上記のデータは「毎月月初」に「前月分」として公開されるので、例えば今月(2010/02)では、ファイル名は以下になります。

  • 削除データファイル名・・・DEL_1001.CSV
  • 追加データファイル名・・・ADD_1001.CSV

まずは、このファイルの存在チェックを行おうと書いたコードはコチラです。

$str = date('ym');
$addFile = sprintf('ADD_%s.CSV', $str);
$delFile = sprintf('DEL_%s.CSV', $str);

で、この変数をvar_dump()などしてみると、2月なので当然こうなります。

var_dump($addFile, $delFile);
string(12) "ADD_1002.CSV"
string(12) "DEL_1002.CSV"

う~ん、これでは希望するファイルの存在チェックは出来ないですね。date()関数の第2引数にはtimestampを渡せるので、自前で現在からn日前のtimestampを計算して渡してやらないとダメかな??などと考えたのですが、そこはPHP。さすがPHP。

strtotime()関数の引数として「予約キー」というのを指定してやれば、相当柔軟にtimestampが求められるみたいです。

今回のケースではこれでOK。

$str = date('ym', strtotime('-1 month'));

ちなみに公式マニュアルの例によると、以下のような指定が可能みたいです。

<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

相当柔軟で実に便利ですね!!

以下のエントリも参考にさせていただきました^^

【PHP】 date()で簡単に1ヵ月後や1ヶ月前の日付を簡単に出力する

2010 年 1 月 28 日 | カテゴリー: LAMP奮闘記, Linux, まぎれもなくただのメモ

年頭最初の月から「月に2桁エントリ」という目標が崩れてしまいそうですが…。

最近ちょこちょこ触り始めたSQLiteですが、想像以上にしっかりしたデータベースのようで、今のところ「こんな事は出来るのかな??」という希望は全て実現出来ています。

アレコレ触ると当然やりたくなってくるのが「データのインポート」。という事で、以下CSVデータをインポートする際の手順です。

今回は郵便番号関連のデータが格納されたCSVデータ(カンマ区切り)を取り込みたかったので、zipcode.dbというファイルに以下のようなテーブルを作ってみました。

CREATE TABLE zipcode (

ZipCode TEXT NOT NULL,

Prefecture TEXT NOT NULL,

City TEXT NOT NULL,

Address TEXT NOT NULL);

こんな構造のテーブルならDBを利用する意味はあるのか??というのは置いといて、sqlite3コマンドで以下のように実行します。

;; SQLiteにはユーザーの概念が無いそうです
$ sqlite3 zipcode.db

;; 現在のステータスを確認します
sqlite> .show
 echo: off
 explain: off
 headers: off
 mode: list
 nullvalue: ""
 output: stdout
 separator: "|"
 width:

;; インポート時の区切り文字を変更しておきます
sqlite> .separator ,

;; インポートを実行します
sqlite> .import /path/to/file TABLE_NAME

これだけでインポート完了です。楽チンです。

「.help」コマンドでヘルプが表示されますが、「.~」で色々な設定や表示が出来るようですね。

ちょっとしたアプリケーションのデータ管理方法として、役立つような気がします。

…と、ここまでやって「郵便番号はユニークなデータではない」という事を知った(異なる町名で同じ郵便番号が存在する)のですが、それはまた別のお話という事で。

今日はここまで。

2010 年 1 月 22 日 | カテゴリー: 徒然なるままに…

久しぶりの更新なのに、単なるミーハーエントリです。

個人的に、OSSという文化のイコン(象徴)であると思っているWebブラウザ「Firefox」の最新バージョンが、本日未明にリリースされました!!

新しい機能としては、ワンクリックでテーマの変更が可能になったり、javascript(余談ですがjQueryはスゴイですね!!jQueryのお陰で、苦手だったjavascriptに取り組めそうです)の実行速度がさらに改善されていたり、と様々ありますが、詳細はこれからどんどん様々な記事やブログで言及されていくと思われますので割愛(逃避??)いたします。

OSSとFirefoxを愛するユーザーの皆様は、是非灯(ともしび)を灯しましょう!!

Firefox 3.6をダウンロード・・・http://mozilla.jp/firefox/

Firefox3.6の灯・・・http://tomoshibi.mozilla.jp/

2010 年 1 月 9 日 | カテゴリー: LAMP奮闘記, MySQL, まぎれもなくただのメモ

MySQLのMLにて知ったのですが、素敵なハックだったので勝手にご紹介。

mysqlクライアントを利用してデータベースに接続すると、通常は以下のようになります。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.1.37-1ubuntu5 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

気軽にrootでログインしてしまう事の是非は置きまして、このプロンプトの「mysql>」の表示が、my.cnfに設定を記述する事でカスタマイズ可能だそうです。

/etc/mysql/my.cnf(Fedoraなら/etc/my.cnf)内の[mysql]セクションに以下を追記します。

[mysql]
prompt=[\d]> \

これで、再度ログインしてみると以下のように「mysql」の代わりにDB名が表示されるようになります。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 46
Server version: 5.1.37-1ubuntu5 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

[(none)]> USE information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
[information_schema]>

これだとどのデータベースを操作中か一目瞭然なので、誤操作防止に役立ちそうですね。他にも色々と柔軟にカスタマイズ出来るようです^^

普段はphpMyAdminのSQLウインドウからSQLを発行する事が多いのですが、早速Ubuntu/Fedoraに設定してみようと思います。