2008年4月26日土曜日

初めてのPostfix設定/操作メモ

主にLAN内での実験用の設定。


  • バージョンの確認方法
    postconf mail_version
  • 設定等の情報を表示
    postconf -n
  • localhost以外からもアクセスできるようにする
  • ドメインがIPのメールを受け入れる
    • main.cfに下記を追加する
      resolve_numeric_domain = yes
    • postfixのバージョンが2.3以降のみ有効
  • LAN内から、ドメイン部分にIPアドレスを指定したメールを受け付けるようにする
    • 例えばサーバのIPアドレスが192.168.1.2の場合、クライアントからの送信先メールアドレスがtest@192.168.1.2で受取れるようにする
    • main.cfを編集する
      # IPアドレスが192.168.1.2で、ドメインがexample.comの場合
      myhostname = 192.168.1.2.example.com
      mydomain = example.com
    • 下記のようなwarningが出るが、受信はできた
      warning: do not list domain [192.168.1.2] in BOTH mydestination and virtual_alias_domains
      warning: do not list domain 192.168.1.2.example.com in BOTH mydestination and virtual_alias_domains
  • メール受信時に、他のプログラムにメールの内容を渡す

OpenCV用の PHPライブラリ 3つ

探したら3つあった。


Linux (CentOS)に OpenCVをインストールする方法

yumでインストールできるらしいが、やり方が分からなかったので地道にやる。
tarの最新版のバージョンはSourceForgeのLinux用tarのDownloadページで確認。

wget http://nchc.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
tar xvzf opencv-1.0.0.tar.gz
cd opencv-1.0.0

# 文字化け解消。viで開いて1137行目の文字化け文字を削除
vi cvaux/include/cvaux.h

# makeにはけっこう時間がかかる。
./configure
make
make install

# ライブラリのパス設定。viで新規ファイルを作り、「/usr/local/lib」とだけ記述して保存。
vi /etc/ld.so.conf.d/opencv.conf
ldconfig

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}


参考:
 OpenCV のインストール < 見やすくて分かりやすい
 共有ライブラリをシステムに認識させるには < ライブラリのパス設定について

Vistaに PostgreSQL 8.2をインストールする方法

Windows Vista Businessに、 PostgreSQL 8.2をインストールする方法のメモ。


参考: vistaにpostgreSQL8.1をインストール - minute


注意点

  • ユーザーを追加する際、コントロールパネルに「ユーザーアカウント」という項目があり紛らわしいので注意。こちらではなく、コンピュータの管理の「ユーザーとグループ」の方からユーザーを追加する。
  • PostgreSQLフォルダのアクセス権限設定は、ユーザーpostgresにフルコントロールを与えた方が良いように感じるが、それだと権限エラーでインストールに失敗する。上記参考記事のとおりにUsersにフルコントロールを与えればインストールに成功する。
  • バッチファイルでmsiexecを実行するやり方ではなぜかエラーになった。

htmlSQLの基本的な使い方

WebスクレイピングのライブラリhtmlSQLの使い方メモ。


スクレイピングの準備

//Snoopyをinclude
include_once("../snoopy.class.php");
//htmlSQLをinclude
include_once("../htmlsql.class.php");

//インスタンス生成(Exampleで使われている"$wsql"という変数名は、昔はWebSQLという名前だった名残り)
$wsql = new htmlsql();


Webページからスクレイピング
if (!$wsql->connect('url', 'http://codedump.jonasjohn.de/')){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 1


ローカルにあるファイルからスクレイピング
if (!$wsql->connect('file', 'demo_data.htm')){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 2


文字列からスクレイピング
(文字列にconnectするというのも変だが。)
if (!$wsql->connect('string', $some_html)){
 print 'Error while connecting: ' . $wsql->error;
 exit;
}
from Example 6


Queryの実行例
if (!$wsql->query('SELECT * FROM a WHERE $class == "nav_item"')){
 print "Query error: " . $wsql->error;
 exit;
}

// show results:
foreach($wsql->fetch_array() as $row){
 print_r($row);
}
from Example 1
他にも下記のメソッドが使える
  • $wsql->fetch_objects(); //オブジェクトとして取り出す
  • $wsql->get_result_count(); //結果の件数を取得する



WHERE句のバリエーション
  • 要素の属性を指定
    • WHERE $class == "nav_item"
    • WHERE $id == "header"
    • WHERE preg_match("/^http:///", $href)
  • 要素のテキストを指定
    • WHERE preg_match("/^array_/i", $text)
  • 複数の条件(orもできる)
    • WHERE preg_match("/^/snippets/i", $href) and preg_match("/^array_/i", $text)
  • WHERE句無しでもOK
  • WHERE句の中身はeval()で実行して判定される。ユーザーの入力値をそのままWHERE句に入れないように注意。(Never trust user input!



取得データ
  • 取得した各要素について、下記のデータが配列に入っている
    • 各属性
    • タグ名(tagname)
    • テキスト(text)



ユーザーエージェントやリファラの変更方法
$wsql->set_user_agent('MyAgentName/0.9');
$wsql->set_referer('http://www.jonasjohn.de/custom/referer/');
from Example 12


その他
  • httpsのWebページへのアクセスはできない
  • htmlSQLの内部でpreg系の関数を使ってるが、preg系はマルチバイトに対応していない。状況によってはうまく動かないかも。その場合は文字コードをUTF-8にして、u修飾子を付ければ回避できそう。


vi設定備忘録






設定方法

  • Linuxユーザーのホームディレクトリにある.vimrc(このファイルが無い場合は新規作成する)に設定内容を書く
  • setの右側は並べて書ける
    • 例: set tabstop=4 nu


設定内容


更新履歴:
2008/12/16 文字コード設定追加

2008年4月18日金曜日

はてなブックマークコメントを表示したい

masuidrive on rails - ブログにはてブのコメントを表示するhatana_bookmark_anywhere.jsが楽しげなのでこのブログにも導入しようとしたが、うまくいかなかった。

誰かウィジェット作ってくれないかな...。

2008年4月16日水曜日

好きなDBの投票結果

次の中で好きなプログラム言語は?の投票結果に続き、このブログの下端で好きなDBのアンケートをとった結果。

  1. MySQL 9 (50%)
  2. PostgreSQL 5 (27%)
  3. Oracle 5 (27%)
  4. SQLite 1 (5%)
  5. DB2 1 (5%)
  6. SQL Server 0 (0%)
  7. その他 3 (16%)

やはりMySQLが人気。

このブログでは比較的PostgreSQLネタが多いのでPostgreSQLはもうちょっと頑張るかと思ったが。

意外なのはOracleの人気が高かったこと。業務アプリではいまだに人気だが、エンジニアにも人気とは。

あとSQL Serverが不人気なのも悲しい。個人的には嫌いじゃないけどなあ。GUIも使いやすいし。SQL文法もANSIに近いし。副問い合わせが中途半端なMySQLに比べればいいと思うけど。

ところで、その他の3票は何だったのかな。

Windowsで GREPできるフリーソフト

Perl互換の正規表現でテキストファイルをGREPするツール。
テキストファイルで開くにはファイルサイズが大きすぎる場合や、大量のテキストファイルから特定の文字列を検索したい場合に便利。

JGREP


GUIが分かりやすく使いやすい。
そのうえ動作が軽い。160MBのファイルをGREPしたら十数秒で終わった。

デフォルトでは、ファイルサイズが10MB以下のファイルだけをGREPする。
ファイルサイズ制限は変更できるが、変更欄に入力できるのが3桁までなので、最大999MBまで。(iniファイル(JGREPを起動すると作成される)を直接変更すればいけるかも?)

また、GREP結果からエディタを起動するにはエディタの登録が必要。いっしょに起動パラメータも入力しなければ登録を完了できない。
Sakuraエディタの場合の起動パラメータは「"%F" -Y=%L」。
その他の主なエディタの起動パラメータは設定ダイアログに書いてある。


via. Windows上でgrepできるフリーソフト「JGREP」 - F.Ko-Jiの「一秒後は未来」

2008年4月9日水曜日

PHPフレームワーク 9つの比較

現時点ではCakePHPが一番良さそう。日本語の情報が多いし、Rails経験者には馴染みやすい。 あとはMapleとrhacoがちょっと面白そうだけど、スタンダードなものを使っておいた方が何かと無難なのできちんと使うには腰がひける。 鳴り物入りで登場したZend_Frameworkは最近は名前も聞かない。でも標準コーディング規約は一見の価値あり。 Piece Fremworkも最近あまり聞かない。

Google Calendar API で日本の祝日データを取得

Google Calendarから日本の祝日データを取得する方法についての調査メモ。



ポイント

  • GDataを使う場合はデベロッパーKEYが必要だが、GDataを使わなくても日本の祝日カレンダーは取得できる。
  • 祝日名と日付を取得したい場合、Projection valueは"full-noattendees"で。(fullより少しだけデータが小さくなる。)
  • 利用規約はGoogleカレンダー利用規約。



日本の祝日カレンダーのID
  • japanese__ja@holiday.calendar.google.com (Googleカレンダーの公式版)
  • japanese@holiday.calendar.google.com (Googleカレンダーのもう1つのID)
  • outid3el0qkcrsuf89fltf7a4qbacgt9@import.calendar.google.com (mozilla.org版)
    • mozilla.orgにあるカレンダーをインポートしたもの
    • 下記の休日に対応していて、最も精度が高い
      • 2008/5/6の振替休日
      • 2009/5/6の振替休日
      • 2012/3/20の春分の日 (Google公式版では3/21になっている)



URLサンプル
http://www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full-noattendees?start-min=2008-01-01&start-max=2008-01-31&max-results=10&alt=json-in-script&callback=callbackHoliday



取得データサンプル
callbackHoliday({
"version":"1.0",
"encoding":"UTF-8",
"feed":{
"xmlns":"http://www.w3.org/2005/Atom",
"xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/",
"xmlns$batch":"http://schemas.google.com/gdata/batch",
"xmlns$gCal":"http://schemas.google.com/gCal/2005",
"xmlns$gd":"http://schemas.google.com/g/2005",
"id":{"$t":"http://www.google.com/calendar/feeds/japanese%40holiday.calendar.google.com/public/full-noattendees"},
"updated":{"$t":"2008-02-13T10:01:04.000Z"},
"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],
"title":{"type":"text","$t":"Japanese Holidays"},
"subtitle":{"type":"text","$t":"Japanese Holidays"},
"link":[
{
"rel":"alternate",
"type":"text/html",
"href":"http://www.google.com/calendar/embed?srcu003djapanese@holiday.calendar.google.com"
},
{
"rel":"http://schemas.google.com/g/2005#feed",
"type":"application/atom+xml",
"href":"http://www.google.com/calendar/feeds/japanese%40holiday.calendar.google.com/public/full-noattendees"
},
{
"rel":"http://schemas.google.com/g/2005#batch",
"type":"application/atom+xml",
"href":"http://www.google.com/calendar/feeds/japanese..."
},
{
"rel":"self",
"type":"application/atom+xml",
"href":"http://www.google.com/calendar/feeds/japanese..."
}
],
"author":[{"name":{"$t":"Holiday Calendars"},"email":{"$t":"doozer.holiday.calendars@gmail.com"}}],
"generator":{"version":"1.0","uri":"http://www.google.com/calendar","$t":"Google Calendar"},
"openSearch$totalResults":{"$t":"2"},
"openSearch$startIndex":{"$t":"1"},
"openSearch$itemsPerPage":{"$t":"10"},
"gCal$timezone":{"value":"Etc/GMT"},

"entry":[
{
"id":{"$t":"http://www.google.com/calendar/feeds/japanese..."},
"published":{"$t":"2006-09-06T04:52:22.000Z"},
"updated":{"$t":"2006-09-14T08:16:28.000Z"},
"category":[{
"scheme":"http://schemas.google.com/g/2005#kind",
"term":"http://schemas.google.com/g/2005#event"
}],
"title":{"type":"text","$t":"成人の日"},
"content":{"type":"text","$t":""},
"link":[
{
"rel":"alternate",
"type":"text/html",
"href":"http://www.google.com/calendar/event?...",
"title":"alternate"
},
{
"rel":"self",
"type":"application/atom+xml",
"href":"http://www.google.com/calendar/feeds/japanese..."
}
],
"author":[{"name":{"$t":"Japanese Holidays"}}],
"gd$recurrence":{"$t":"DTSTART..."},
"gd$eventStatus":{"value":"http://schemas.google.com/g/2005#event.confirmed"},
"gd$transparency":{"value":"http://schemas.google.com/g/2005#event.opaque"},
"gCal$uid":{"value":"24cihigm..."},
"gCal$sequence":{"value":"0"},
"gd$when":[{"startTime":"2008-01-14","endTime":"2008-01-15"}],
"gd$where":[{"valueString":""}]
},
{
"id":{"$t":"http://www.google.com/calendar/feeds/japanese..."},
"published":{"$t":"2006-09-06T04:52:22.000Z"},
"updated":{"$t":"2006-09-14T08:16:28.000Z"},
"category":[{
"scheme":"http://schemas.google.com/g/2005#kind",
"term":"http://schemas.google.com/g/2005#event"
}],
"title":{"type":"text","$t":"元日"},
"content":{"type":"text","$t":""},
"link":[
{
"rel":"alternate",
"type":"text/html",
"href":"http://www.google.com/calendar/event?...",
"title":"alternate"
},
{
"rel":"self",
"type":"application/atom+xml",
"href":"http://www.google.com/calendar/feeds/japanese..."
}
],
"author":[{"name":{"$t":"Japanese Holidays"}}],
"gd$recurrence":{"$t":"DTSTART..."},
"gd$eventStatus":{"value":"http://schemas.google.com/g/2005#event.confirmed"},
"gd$transparency":{"value":"http://schemas.google.com/g/2005#event.opaque"},
"gCal$uid":{"value":"egd5o1dg438h..."},
"gCal$sequence":{"value":"0"},
"gd$when":[{"startTime":"2008-01-01","endTime":"2008-01-02"}],
"gd$where":[{"valueString":""}]
}
]
}
});


参考
 Tam-calendar.js に Google Calendar の祝日データを取り込む « iDeasilo
 API Reference Guide - Google Calendar APIs and Tools - Google Code (本家リファレンス)
 API Reference Guide - Google Calendar APIs and Tools - Google Code (上記の、取得データ内容の指定についての部分)
 Using JSON with Google Data APIs - Google Data APIs - Google Code (JSONPについてなど)
 Google カレンダー利用規約
 Googleカレンダーの「日本の祝日」が間違っている | Google Mania - グーグルの便利な使い方

2008年4月6日日曜日

Flashから 別Windowを開く時にポップアップブロックを回避する方法

参考サイトのメモ。

ActionScript 1.0/2.0 の場合
 プログラマ気分 | 【AS1.0/2.0】Flash から新規ウィンドウを開く際にポップアップブロックを防ぐ

ActionScript 3.0 の場合
 IE、FirefoxでFlashから新規ウィンドウを開く際にポップアップブロックされる件の回避 - 0x集積蔵

肝は wmode="transparent" のようだが、Flash上に入力項目がある場合、wmodeをtransparentに設定した場合、IEでマルチバイト(日本語)入力ができなくなる問題点があるので注意。

あと、上記のとおりに作っても、なぜかポップアップブロックにひっかかる場合がある。(原因不明)

ブログを携帯から見たときにリンクや外部画像を使えるブログサービスの調査

大手のブログサービスにおいて、携帯電話から見た時に次の2点について使えるかどうかの調査。

  1. 外部サイトへのリンク
  2. 外部サーバ上の画像ファイルの表示


デフォルトの設定でどうなるかを調べたので、もしかしたら設定をすれば変えられる部分もあるかもしれない。


リンクも画像も使えるブログ
  • yaplog!
  • JUGEM
  • Blogger
  • Yahoo!ブログ
    • 画像やリンクを書くためにはWiki文法で書く必要あり
  • はてなダイアリー
  • Seesaaブログ
    • 画像はそのまま表示せずにリンクになる
    • リンク内に画像を含む場合、リンク先に遷移できない (画像表示へのリンクになってしまう)
  • エキサイトブログ
    • リンクは直接遷移ではなく、意思確認ページを挟む
    • 意思確認ページから、URLのメール送信が可能
  • ココログ
    • リンクも画像も直接遷移ではなく、意思確認ページを挟む
    • リンク内に画像を含む場合、画像を表示できない


リンクのみ使えるブログ
  • livedoorブログ
    • リンクは直接遷移ではなく、意思確認ページ(巨大な広告あり)を挟む


画像のみ使えるブログ
  • FC2ブログ
    • 画像はそのまま表示せずにリンクになる


リンクも画像も使えないブログ
  • アメーバブログ
  • 楽天ブログ
  • gooブログ
  • nowa


携帯で見たときに外部リンクで意思確認ページのワンクッションを入れたくない場合、yaplog!、JUGEM、Seesaaあたりが良さそう。
Yahoo!は使いづらいし、はてなは癖が強いから。はてなモバイルゲートウェイを活用するならはてなでもいいかも。

Flashでページをめくるライブラリのまとめ

実際に使用する場合は、最新情報やライセンスについて再度確認した方が良い。

Freeで、かつソースをいじらずに動的なコンテンツを表示したいなら、76designのDynamic PgeFliv v2が良さそう。 あと、JavaScriptではjQuery testくらいしか見つけられなかった。 Silverlightでもできるが、現時点では普及していないのでFlashの方が無難か。

2008/09/16追記: Flashでページをめくるライブラリで逆方向にめくる方法もどうぞ。

ブログ アーカイブ

tags