2007年12月30日日曜日

CentOSにphpPgAdminをインストール

CentOS 5にインストールしたメモ。
Apache、PHPとPostgreSQLは事前にインストール済み。


phpPgAdminをダウンロード

wget http://downloads.sourceforge.net/phppgadmin/phpPgAdmin-4.1.3.tar.gz?download

解凍
tar -zxf phpPgAdmin-4.1.3.tar.gz

ディレクトリ名をアクセスしやすいものに変える
mv phpPgAdmin-4.1.3 pg

Webブラウザでアクセスしてみる (pgが/var/www/htmlにある場合)
http://ドメイン/pg/
ログイン画面が表示される。何もしなくても日本語で表示された。


ログインしようとするとエラーになった。
原因は、デフォルトではサーバ側でログインに使われるのがUnix Socketになること。
(今回はpostgresの設定をTCP接続のみパスワード指定でログインできる設定にしていた。)

phpPgAdminの設定ファイル(conf/config.inc.php)の該当行を変更。
// Hostname or IP address for server.  Use '' for UNIX domain socket.
// use 'localhost' for TCP/IP connection on this computer

$conf['servers'][0]['host'] = ''; //-> '127.0.0.1'に変更
これでログインできるようになった。
他にもいろいろ設定ができるので、必要に応じて変える。


ログインするとpgAdminIIIと同じように左側にツリーが表示される。
ツリーをクリックするとWebページの遷移なしで、ツリーが展開していく。phpMyAdminに比べて洗練されたUIだ。


データをCSVにエクスポートしたりインポートしたりもできて意外に便利そう。


参考:
 phpPgAdmin :: Download (本家ダウンロードページ)
 phpPgAdminの導入


(2010/04/07 追記)
SELinuxが有効だと、403 Forbiddenになることがある。
その場合は、「 /usr/sbin/setsebool -P httpd_can_network_connect_db on 」する。
参考:CentOS5.4でSELinux有効時にPHPでPostgresに接続できなかった - おきらく日記
それでも駄目なら、/var/www/htmlでgzを解凍する。(ユーザーのhomeディレクトリで解凍するとSELinux的にApacheが触っちゃダメなモノになる?)

また、デフォルトではpostgresやrootではphpPgAdminにログインできない。
参考:phpPgAdminにログインできないときの解決法 | tool | 『Weblogy』

CentOSに phpMyAdminをインストール

ダウンロード (直URLにした方がよい?)

wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.3-all-languages.tar.gz?download

解凍
tar -xzvf phpMyAdmin-2.11.3-all-languages.tar.gz

移動して使いやすいディレクトリ名に変更
mv phpMyAdmin-2.11.3-all-languages /var/www/html/my
cd $_

サンプルを元に設定ファイルを編集
cp config.sample.inc.php config.inc.php
vi $_
$cfg['blowfish_secret']に値をセットすればとりあえず使える。

ログインページ

テーブル情報のページ


参考:
 phpMyAdmin 2.7.0-pl2 - ドキュメント (本家)
 phpMyAdmin > Downloads | MySQL Database Administration Tool | www.phpmyadmin.net

Linuxでの PostgreSQLの初期操作

PostgreSQLインストール済みの状態から。


デーモンのステータスを確認。動いてなければstartさせる。

/etc/init.d/postgresql status
/etc/init.d/postgresql start

OSのユーザーをpostgresに切り替える。これにより、DBへのログインユーザーとしてOSのユーザーと同じpostgresが使われて、パスワードを入力しなくてもpsql等が使える。
OSのユーザーをpostgresに切り替えるためには、いったんrootになってからpostgresになる。(OSのユーザーpostgresのパスワードがわからないので。)
su -
su - postgres

既存のDB(postgres)以外のDBを使うなら、DBを作る。
createdb DB名

必要ならDBのユーザーも作る。
createuser ユーザー名

psqlでDBに接続する。
psql DB名

あとはpsqlで進めていく。


設定を変えるには、/var/lib/pgsql/dataにある、postgresql.confとpg_hba.confを書き換えてpostgresを再起動する。


参考:
 postgreSQL基本操作 : マロンくん.NET
 psql (本家マニュアル)
 PostgreSQLデータベースのコマンド
 phpPgAdminの導入
 pg_hba.confファイル (本家マニュアル)

AviSynthの基本的なスクリプト例

スクリプト例で使っている用語の説明

  • clip・・・DireceShowSource()等により取得した動画(または映像や音声)。
  • path・・・動画等のファイルパス。絶対パスでも相対パスでも可。ダブルクォートで囲う。バックスラッシュの変わりにスラッシュは使えない。
    (例:"C:videovideo1.mpg")


スクリプトの基本事項
  • その時点で最後に取得したclipはlastという変数に入っている。
  • returnを省略すると、最後に取得したclipが再生される。FFmpegに渡す場合等は下記のようにreturnが必要?
    return last
  • 関数の引数は必須のもの以外は省略が可能。省略した場合はデフォルト値が使われる。clipを省略するとたいていの場合はlastが使われる。引数を渡す時には下記のように引数名を指定できる。これにより、途中の引数を省略しつつ後ろの引数を渡すことが出来る。
    # 引数名がwidthの場合の例
    fnc(width = 320)


動画や音声をファイルから取得する DirectShowSource()
DirectShowSource(path)
Windows Media Playerが再生できる動画や音声なら、これで取得できる。
AviSource()は手持ちの動画では使えなかった。


動画を結合する + or ++ or Dissolve()
clip + clip
または
clip ++ clip
または
Dissolve(clip, clip, 30)
+でも++でも結合できるが、+は元々同じ動画(長い動画をいくつかに分割した場合等)を結合する場合、++はそれ以外の動画を結合する場合に使うらしい。
+と++はそれぞれAlignedSpliceとUnalignedSpliceと同じ役割を果たす。
Dissolve()の場合、1つ目の動画の最後と2つ目の動画の最初がオーバーラップする。オーバーラップする時間は第3引数で指定するフレーム数によって決まる。


動画を時間軸で部分的に抜き出す Trim()
Trim(clip, 0, 300)
数字は開始フレームと終了フレーム。30fps(1秒間に30コマ)の場合、上記だと0秒目から10秒目までとなる。


動画を表示部位で部分的に抜き出す Crop()
Crop(clip, 170, 10, -170, -10)
または
Crop(clip, 170, 10, 300, 300)
上記の1つ目の例では左、上、右、下のトリミングするピクセル数を指定している。
2つ目の例では、左、上のトリミングするピクセル数と、出力の幅、高さを指定している。


動画に音声を合成する AudioDub()
AudioDub(clip_video, clip_audio)
動画の元々の音声は無くなる。
動画より音声の方が長い場合も動画の長さは変わらない。


2つの音声を混ぜる MixAudio()
bgm = ResampleAudio(clip_bgm, 48000) # サンプリングレートを合わせる
audio = MixAudio(clip_video, bgm, 0.7)
AudioDub(video, audio)
上記のスクリプトでは、混ぜ合わせた音声をさらに動画に合成している → 動画の元々の音声に、BGMが加わっている。
動画の音声のサンプリングレートが48KHzだったので、BGMもそれに合わせたサンプリングレートに変換している。
MixAudio()の第3引数は第1引数のclipの音声の割合。上記の場合は第1引数のclipが70%、第2引数のclipが30%になり、BGMは小さめな音になる。
割合を指定しないと同じ割合(0.5ずつ)になる。


動画にテロップを入れる Subtitle()
Subtitle(clip, "テキスト", font = "MS Pゴシック", size = 30, text_color = $FFFFFF, align = 1)
日本語のテキストの場合はfont指定が必要。
表示場所を決めるalignの数字はテンキーの配置と同じ。


フェイドアウト Fadeout2()
Fadeout2(clip, 30)
数字はフェイドアウト時間のフレーム数。Fadeout2()の他にFadeout()とFadeout0()があるが、Fadeout2を使っておけば問題無い?


動画を90度回転する TurnLeft() or TurnRight()
TurnLeft(clip)
または
TurnRight(clip)
携帯電話で向きを間違えて録画してしまった場合などに役立ちそう。
回転すると縦横比がおかしくなる(横長になる)気がする。


動画を逆から再生する Reverse()
Reverse(clip)
動画の逆回転。
試してみたが見られるレベルでは無かった。無圧縮のAVIなら上手く逆回転させられるのかもしれない。

Safariの正規表現リテラルでユニコードエスケープが使えないバグ

Safari 2.0.4で発生したバグ。Safari 3ではこのバグは修正済みと思われる。(WindowsのSafari 3.0.4 (beta)では正常に動作した。)


問題点:
下記のように、正規表現リテラル内にユニコードエスケープで書いた場合に、マッチするはずの正規表現に正常にマッチしないという。

"カタカナ".match(/^[u30a1-u30f6u30fc]*$/)

ユニコードエスケープ自体が使えないわけではなくて、正規表現リテラル内でのみユニコードエスケープが使えないという現象。


回避策:
正規表現リテラルではなく、正規表現オブジェクトを渡す。
"カタカナ".match(new RegExp("^[u30a1-u30f6u30fc]*$"))

内部的には同じ動きになるのかと思ったが、どうやら違うらしい。



参考:
 Safari 2.0.4 Fails on Unicode Escape Sequences in Regular Expressions
 赤福プラス + Safari patch > パッチの内容

2007年12月27日木曜日

Railsよりお薦め!Rubyのフレームワーク Merb (Mongrel + Erb) をインストール

Merbに出会った。使ってみた。

Merb (Mongrel + Erb) は MVC ベースな Ruby の Web フレームワークである。簡単に言うと、軽量な ActionPack クローンである。

Merbのインストール
ヽ( ・∀・)ノくまくまー(2007-09-17) (優しいMerbの育て方)の手順に従ってインストール。
現在のMerbのバージョンは0.5.0。
gemでのインストール時にいくつか質問されたが適当にRubyの最新を選択。
するとrake installのところでエラー。
エラーメッセージに従って、ruby2rubyとjson_pureをgemでインストールすると、rake installできた。
Merb Docs - File: READMEを見ると依存するモジュールがいくつか変わったようだ。)

Merbを起動してブラウザからアクセスするがサーバが見つからない。
config/merb.ymlの:hostをブラウザのURL欄に入力するIPアドレスに変えてからMerb再起動。無事アクセスできた。(Hello Merb!)


Viewテンプレートを使う
ヽ( ・∀・)ノくまくまー(2007-09-19) (優しいMerbの育て方)に従ってViewテンプレートを使ってみる。
index.rhtmlを作ってアクセスしようとするとテンプレートが見つからないというエラー。
エラーメッセージによるとテンプレートのファイル名は"[アクション名].html.*"でないと駄目?(Rails2に合わせた?)
ファイル名をindex.html.erbにしたら表示できた。日本語も普通に表示できた。

Viewテンプレートに書くべきなのはbodyタグの内側だけで、それ以外(html要素の開始・終了タグ、head要素、body要素の開始タグ・終了タグ)はapp/views/layout/application.html.erbに書かれている。
application.html.erbはデフォルトのレイアウトで、controllerごとにレイアウトを分けるならapp/views/layout/<controller>.html.erbを作る。
ちなみに、Viewテンプレートを使わない場合は、自分で書いたもの以外は出力されない。(レイアウトは適用されない。)


ActiveRecordを使う
config/dependencies.rbのuse_ormのうち、activerecordのコメントアウトを外す。
merb_activerecordをインストール。
gem install merb_activerecord
config内のdatabase.sample.ymlを元にdatabase.ymlを作り、DB接続設定を書く。
:development: &defaults
:adapter: mysql
:database: database_name
:username: user_name
:password: password
:host: localhost
:socket: /var/lib/mysql/mysql.sock
:encoding: utf8
文字コード指定はRailsと同様に。これで日本語もDBから取得できた。


POSTしたデータを受け取る
Railsと同様に<input name="foo[bar]" />を、params[:foo][:bar]で受け取ることができる。


デーモンとして起動する
Merbをデーモンとして起動できる。
merb -d
しかし"merb -k all"や"merb -K all"では停止できなかった。
デーモンとして起動しているとactionの変更が反映されないので、開発中は逐次起動する使い方のようだ。


使ってみた印象
Railsよりシンプルで良さそう。ファイル名とかもシンプルだし。
RailsがActiveRecordからJavaScriptまで風呂敷に包んではいどうぞお手軽ですよーなブラックボックスなのに対して、Merbはそれらを電子ブロックのように外付けモジュールにして本体は身軽にしているイメージ?結局やることはそれほど変わらないが、シンプルな方が上に薄いカスタマイズレイヤーを被せるときに楽だ。
ruby2rubyを使っているところをみると、controllerとviewを実行時に実行用のrubyスクリプトとして再編成している?

ところで、Merb | Looking for a better framework? を見ると、"gem install merb --include-dependencies" だけでインストールできるみたいに書いてある(?)


参考: Merb Docs - File: README (本家マニュアル)

Rails 2.0.2 でMySQLを使う

Railsは2.0.1まではデフォルトのDBがMySQLだったが、2.0.2からデフォルトのDBがSQLiteになった。
2.0.2でプロジェクトを作成すると、デフォルトのdatabase.ymlの内容がSQLite用のものになる。

これまで通りMySQLを使いたい場合はプロジェクト作成時にDBを指定する。

rails -d mysql プロジェクト名

database.ymlには文字コードやsocketもデフォルトで記述されるようになった。
些細なことだがちょっと便利だ。
development:
adapter: mysql
encoding: utf8
database: プロジェクト名_development
username: root
password:
socket: /var/lib/mysql/mysql.sock


参考: WEB2MEMO =PHP、Ajax、JAVA、Flex2、Ruby、Rails等のメモ= RailsでDBを指定する(Ruby on Rails)

CentOSで Rails 2.0.2 / SQLiteを使ってみる

Rails2.0になって少し仕様が変わったらしいのでメモを残しておく。
Rails 2.0のscaffoldを使ってみた - idesaku blogを参考に。(できるだけそのまま実行。)

2.0.2ではデフォルトのDBがSQLiteなので、SQLiteを使う場合のプロジェクト作成はDB指定無しでOK。

rails trial

SQLiteならdatabase.ymlの編集が要らない。これは試しに使うには楽だ。
cd trial
ruby script/generate scaffold person name:string age:integer

ここまでは順調。
rake db:migrate
エラー発生。
(in /tmp/rails_app/trial)
rake aborted!
no such file to load -- sqlite3
gemでsqlite3-rubyをインストール。(参考:【実践】RoR とAIRでデスクトップアプリを作る 4 - kajilog
gem install sqlite3-ruby
sqlite-ruby 1.2.1を選択すると「make: *** `sqlite3_api_wrap.o' に必要なターゲット `ruby.h' を make するルールがありません.」というエラーになる。
sqlite-ruby 1.2.0ならインストールできるが、これはmigrateができない。

調べた結果、sqlite-develをインストールするらしい。(参考: gem install sqlite3-ruby でエラー発生 (技術メモ)
("sqlite3-devel"でなくてよいのか?)
yum install sqlite-devel

これでsqlite-ruby 1.2.1がインストールできるようになった。migrateも無事にできた。


補足: SQliteにコマンドラインからアクセス
sqlite3のパラメータとして、アクセスしたいSQLiteのデータファイルのパスを渡す。
sqlite3 db/development.sqlite3
SQLiteから抜けるには[Ctrl + D]、または".exit"。

でもきちんと使うならSQLiteはきつい。Query BrowserのあるMySQLを使うだろう。


参考: sqlite: SQLite データベースと会話するプログラム

2007年12月26日水曜日

YUI 2.4.1 リリース

CSS関連(base, fonts, grids & reset)については、2.4.0から変更無し。

2007年12月16日日曜日

RSS/AtomフィードのXMLの作り方メモ

とりあえず、必要最小限の要素だけを作る方法のメモ。


RSS1.0
シンプルなRSSの全体に、Dublin Coreモジュールのdateを加える。
各itemのdescriptionにはエスケープしたhtmlを入れられる。

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xml:lang="ja">

 <channel rdf:about="http://example.com/rss1.rdf">
  <title>RSS1.0 Test</title>
  <link>http://example.com</link>
  <description>RSS1.0のテスト</description>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://example.com/page1"/>
    <rdf:li rdf:resource="http://example.com/page2"/>
   </rdf:Seq>
  </items>
 </channel>

 <item rdf:about="http://example.com/page1">
  <title>ページ1</title>
  <link>http://example.com/page1</link>
  <description>1つ目のページ</description>
  <dc:date>2007-01-01T00:00:00+09:00</dc:date>
 </item>

 <item rdf:about="http://example.com/page2">
  <title>ページ2</title>
  <link>http://example.com/page2</link>
  <description>2つ目のページ</description>
  <dc:date>2007-01-02T03:04:05+09:00</dc:date>
 </item>
</rdf:RDF>


RSS2.0
▽PHP4でRSS配信プログラム xmlファイルの作成からlastBuildDateを削除し、各itemにdescriptionを追加する。
(lastBuildDateはあったほうがよい?)
docs要素はなくてもいいが、せっかくなので付けておく?
他のフィードと違い、日付はRFC2822形式(例:Sun, 05 Nov 2006 16:53:33 +0900)。
フィード自体のURLを示す箇所が無い。
各itemのdescriptionにはエスケープしたhtmlを入れられる。
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
 <channel>

  <title>RSS2.0 Test</title>
  <link>http://example.com</link>
  <description>RSS2.0のテスト</description>
  <language>ja</language>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>

  <item>
   <title>ページ1</title>
   <link>http://example.com/page1</link>
   <description>1つ目のページ</description>
   <pubDate>Mon, 01 Jan 2007 00:00:00 +0900</pubDate>
  </item>

  <item>
   <title>ページ2</title>
   <link>http://example.com/page2</link>
   <description>2つ目のページ</description>
   <pubDate>Tue, 02 Jan 2007 03:04:05 +0900</pubDate>
  </item>

 </channel>
</rss>


Atom0.3
2章 Atomフォーマット - The Atom Syndication Formatの"Atomフォーマットの構成"からフィード全体の日時(modefied)を削除し、各entryにsummaryを追加する。
xml:lang属性もfeed要素あたりに付けておく。
Atom1.0とは違い、フィード全体のidは必須ではない。
フィード自体のURLを示す箇所が無い。
各entryの2つの日時(issued、modefied)は必須。
各entryのidについてはAtom1.0と同様。
ベタなテキストでなくhtmlを入れたいなら、summaryの代わりにcontent要素を使う。
<?xml version="1.0" encoding="utf-8" ?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="ja">

 <title>Atom feed 0.3 Test</title>
 <link rel="alternate" type="text/html" href="http://example.com"/>
 <author>
  <name>ぼく</name>
 </author>

 <entry>
  <title>ページ1</title>
  <link rel="alternate" type="text/html" href="http://example.com/page1"/>
  <id>http://example.com/page1</id>
  <modified>2007-01-02T00:00:00+09:00</modified>
  <issued>2007-01-01T00:00:00+09:00</issued>
  <summary>1つ目のページ</summary>
 </entry>

 <entry>
  <title>ページ2</title>
  <link rel="alternate" type="text/html" href="http://example.com/page2"/>
  <id>http://example.com/page2</id>
  <modified>2007-01-02T03:04:05+09:00</modified>
  <issued>2007-01-02T03:04:05+09:00</issued>
  <summary>2つ目のページ</summary>
 </entry>

</feed>



Atom1.0
簡単なAtomフィード文書を元にする。
xml:lang属性もfeed要素あたりに付けておく。
feedおよび各entryのid要素は"永久的で完全に一意的な識別子"なので、手軽に済ますならfeedやentryを一意に示すURLでよいと思う。
パーマリンクは一意と言えないという意見もある。それが理由かは分からないがAtomの基本的なフィードの例ではurlのtagスキームを、簡単なAtomフィード文書のサンプルではurnを使っている。)
feed全体のupdated日時が必須。
linkでrel属性を指定しないとrel="alternate"とみなされる。
summaryとcontentについてはAtom0.3と同様。
フィードリーダーによってはAtom1.0は対応していないので注意が必要。(他のフィードと併用するなど。)
<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">

 <title>Atom feed 1.0 Test</title>
 <link href="http://example.com"/>
 <link rel="self" href="http://example.com/atom1.xml"/>
 <author>
  <name>ぼく</name>
 </author>
 <updated>2007-12-12T14:20:37+09:00</updated>
 <id>http://example.com/atom1.xml</id>

 <entry>
  <title>ページ1</title>
  <link href="http://example.com/page1"/>
  <summary>1つ目のページ</summary>
  <updated>2007-01-01T00:00:00+09:00</updated>
  <id>http://example.com/page1</id>
 </entry>

 <entry>
  <title>ページ2</title>
  <link href="http://example.com/page2"/>
  <summary>2つ目のページ</summary>
  <updated>2007-01-02T03:04:05+09:00</updated>
  <id>http://example.com/page2</id>
 </entry>

</feed>



補足:日付のタイムゾーンについて
フィードリーダーによっては、タイムゾーンが正しく読めない? UTC (例:2005-11-16T02:27Z)で配信する?


関連記事: RSS/Atomフィードを生成したりSitemapを作成するPHPライブラリ


参考:
RSS1.0
 RSS(RDF Site Summary)によるサイト情報の要約と公開 (RSS1.0についての解説)
 RDF Site Summary (RSS) 1.0 (RSS1.0仕様書の和訳)
RSS2.0
 RSS 2.0 Notes (RSS2.0仕様書を元にした解説)
 RSS 2.0 Specification 日本語訳 - futomi's CGI Cafe (RSS2.0仕様書の和訳)
 ホームページ作成 / Yaskey Diary (RSS2.0のシンプルな例)
Atom0.3
 2章 Atomフォーマット - The Atom Syndication Format (Atom0.3仕様書の和訳)
Atom1.0
 Atom - RSS改訂の試み (Atom1.0についての解説)
 RFC 4287 The Atom Syndication Format 日本語訳 - futomi's CGI Cafe (Atom1.0仕様書の和訳)
 An overview of the Atom 1.0 Syndication Format (Atom1.0の解説)
その他
 Web標準の日時の形式 | Web::Blogoscope (日付形式について)
 RSS1.0とRSS2.0 - fox.tech - by fox_b (RSS仕様の分裂について)

RSS/Atomフィードの Content-Type

下記のそれぞれのContent-Type(MIME Type)でフィードリーダーが動作するか実験。

  • application/xml
  • application/rdf+xml
  • application/rss+xml
  • application/atom+xml


実験に使ったフィードリーダーは下記の4つ。
  • Firefox2
  • IE7
  • Google Reader
  • goo RSSリーダー(V3.6)


結果: 全て動作した。

2007年12月15日土曜日

文字コード指定の大文字小文字

XML宣言(<?xml version="1.0" encoding="Shift_JIS" ?>)のencodingや、HTMLのmetaタグ(<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">)のcharset等で使われる文字コード名は、大文字・小文字のどちらを使っても問題ない、と決められている。

However, no distinction is made between use of upper and lower case letters.

ただし、それを利用するアプリケーションが大文字・小文字のどちらでも正しく動くかどうかは、そのアプリケーション次第なので、IANAで決められている表記に合わせた方が無難だと思われる。

Rubyの Dateと Timeと DateTimeの比較

RubyのTimeクラスとDateクラス、DateTimeクラスの比較。
Timeクラスはtime.rbを読み込まなかった場合で比較。


Time

  • 日付と時間を扱う
  • 組み込みクラス(requireしなくても使える)
  • 現在日時で生成するには、Time.now
  • 日時を指定して生成するには、Time.gm(...) or Time.utc(...) or Time.local(...) or Time.mktime(...)
  • 文字列に変換すると、C言語のctime()に準じた形式になる (例:Tue Dec 11 15:25:35 +0900 2007 )

Date
  • 日付を扱う
  • 使うには require "date" する必要がある
  • 現在日付で生成するには、Date.today
  • 日付を指定して生成するには、Date.new(...)
  • 文字列に変換すると、ISO8601形式になる (例:2007-12-11 )

DateTime
  • 日付と時間を扱う
  • Dateクラスのサブクラス。使うには require "date" する必要がある
  • 現在日時で生成するには、DateTime.now
  • 日時を指定して生成するには、DateTime.new(...)
  • 文字列に変換すると、ISO8601形式になる (例:2007-12-11T15:31:30+0900 )


補足
  • 日時を表す文字列から日時情報を取り出すには、ParseDate::parsedate()が使える。(日付だけならDate.strptime()でもできる。)
    require "parsedate"
    p ParseDate::parsedate("Tue 18, Dec 2007 15:52:30 +0900")
    #=> [2007, 12, 18, 15, 52, 30, "+0900", 2]
  • DateTimeクラスでタイムゾーンを指定するには、Rationalクラスを使う。Ratinalの第1引数にタイムゾーンの時間差、第2引数には24を指定する。
    require "date"

    # 生成時に指定する場合

    d = DateTime.new(2007, 12, 18, 15, 57, 30, Rational(9, 24))
    print d #=> 2007-12-18T15:57:30+0900

    # 後から指定する場合
    d2 = d.new_offset(Rational(-5, 24))
    print d2 #=> 2007-12-18T15:57:30-0500
  • 標準添付のtime.rbを読み込む(require "time")と、いろいろ便利なメソッドが使える。
    require "time"

    # 日時の文字列をパース
    t = Time.parse("2007-12-11T18:21+09:00")

    # RFC2822形式で出力
    print t.rfc2822 #=> Tue, 11 Dec 2007 18:21:00 +0900

    # ISO8601形式で出力
    print t.iso8601 #=> 2007-12-11T18:21:00+09:00



参考
 逆引きRuby - 日付と時刻
 日付の表記に関するノート
 DateTimeにタイムゾーンを設定する。 - こせきの技術日記
 Rubyで日付・時間を操作 - I sort my thought...

AdSenseクリック時のリダイレクト

AdSenseをクリックしたらどんな遷移を辿るか?
試しにをクリックしてFirefoxアドオンのLiveHTTPHeadersで観察してみた。
(最近よく参考にした某ソフトのまとめWikiのAdSenseで。)


クリック

http://pagead2.googlesyndication.com/pagead/iclk?...(略)
↓ "HTTP/1.x 302 Found"
http://pagead2.googlesyndication.com/pagead/adclick?...(略)
↓ "HTTP/1.x 302 Found"
http://ad.jp.doubleclick.net/clk...(略)
↓ "HTTP/1.x 302 Moved Temporarily"
広告主のページ


間にDoublecilckを経由していた。
(全てのAdSenseがこれと同じ遷移をたどるかどうかは分からない。)

2007年12月11日火曜日

YUI CSS 2.4.0の変更箇所

YUI Library CSS Tools 2.4.0の、2.3.1から変更があった箇所の洗い出し。
影響がありそうなのは、テキストボックスのwidthくらいか。


reset.css

  • 全体の背景色とフォントカラーを指定する要素が、bodyからhtmlに変わった
    #2.3.1
    body{
     color:#000;
     background:#FFF;
    }
    #2.4.0
    html{
     color:#000;
     background:#FFF;
    }
  • sup、sub要素のline-height指定が無くなった
    #2.3.1
    sup,sub{
     line-height:-1px;
     vertical-align:text-top;
    }
    sub{
     vertical-align:text-bottom;
    }
    #2.4.0
    sup{
     vertical-align:text-top;
    }
    sub{
     vertical-align:text-bottom;
    }
  • legend要素の文字色を追加 (IEのみデフォルトが青色であることへの対処)
    legend{
     color:#000;
    }

base.css
  • pre要素のmargin-bottomの追加
    #2.3.1
    p,fieldset,table{
     margin-bottom:1em;
    }
    #2.4.0
    p,fieldset,table,pre{
     margin-bottom:1em;
    }
  • テキスト入力系要素の幅指定の追加
    input[type=text],input[type=password],textarea{
     width:12.25em;
     *width:11.9em;
    }

fonts.css
  • bodyのline-heightの拡大
    #2.3.1
    body {
     font:13px/1.22 arial,helvetica,clean,sans-serif;
     *font-size:small;
     *font:x-small;
    }
    #2.4.0
    body {
     font:13px/1.231 arial,helvetica,clean,sans-serif;
     *font-size:small;
     *font:x-small;
    }
  • monospace系要素のline-heightの微調整
    #2.3.1
    pre,code,kbd,samp,tt{
     font-family:monospace;
     *font-size:108%;
     line-height:99%;
    }
    #2.4.0
    pre,code,kbd,samp,tt{
     font-family:monospace;
     *font-size:108%;
     line-height:100%;
    }

grids.css
  • 変更無し

ちょっと変わった URI スキーム

URIスキーム一覧を見ていたら意外なスキームがいろいろあった。


aaa: Diameter Protocol
 Authentication, Authorization and Accounting の略らしい。
 "aaa:bbb.cc"なんて楽しげ。

shttp: Secure Hypertext Transfer Protocol
 見間違いかと思ったが、httpsの普及により使われなくなったプロトコルらしい。

fax: fax
tel:と同じ感覚なんだろうけど、送信できるのか?

tv: TV Broadcasts
 これは今なら使われても不思議じゃない。

2007年12月7日金曜日

Firefoxでの上の画像と下の画像のすき間を無くす方法

Webページで画像を縦に並べて表示した場合、IEでは問題ないがFirefoxでは間にすき間が空いてしまうことがある。

<div>
<img src="fx.png" alt="test" /><br />
<img src="fx.png" alt="test" />
</div>


このすき間を無くすには、スタイルシートで"line-height:0"を指定すればよい。
<div style="line-height:0;">
<img src="fx.png" alt="test" /><br />
<img src="fx.png" alt="test" />
</div>




テキストも表示している場合はline-heightの指定場所など工夫が必要かも。

XMailのSpam対策強化

XMailCFGの最新版2.29がリリースされ、アンチスパム機能が強化された。
特に、「メッセージボディに日本語(2バイト文字)が含まれないメッセージをスパムとみなすオプション」が手軽で有効と思われる。
ただし、スパム対策が強化されたことにより、これまで正常に送受信できていたメールがスパム扱いになる可能性もあるので設定の調整が必要。

また、2.29には「スパムアドレスの管理」「スパムホストの管理」を更新できないというバグがある。
更新しようとするとページが見つからないエラーになる。(2.29ではスパム関連のCGIのファイル名が変わったが、formのPOST先のファイル名が2.28の頃のままになっている。)
XMailCFGの更新は割りと頻繁なので、年内にも修正版がリリースされるのではないだろうか。(推測)

2007年12月6日木曜日

コマンドプロンプトで繰り返し処理

Windowsのコマンドプロンプトでのループ処理の書き方。

コマンドプロンプトのfor文はファイル・ディレクトリのセットに対しての繰り返し処理がメインだが、オプション(/l)を指定すれば単純なループにも使える。

for /l %変数 in (開始,ステップ,終了) do コマンド [コマンドパラメータ]

例:1~10までの数字についての処理 (またはある処理を10回繰り返す)
for /l %%A in (1, 1, 10) do (
 rem 繰り返す処理
 echo %%A
)


また、for文を活用すればコマンドプロンプトで文字列を置換することもできる。


ただし、繰り返し処理の中で変数をsetしたい場合はsetコマンドの遅延展開が問題になる。
この場合はgotoとif文を使ってループを組み立てたほうが無難。スマートではないが。
set num=1
:loop1
 rem 繰り返す処理
 echo %num%
 set /a num=%num%+1
if not %num% == 11 goto loop1

コマンドプロンプトでは数値の計算はsetを使うので、ループの中で計算を使う場合は後者の方法を選択することになる。

例:0.1~1.0を表示する
set num=1
:loop1
set /a sho=%num% / 10
set /a amari=%num% %% 10
echo %sho%.%amari%
set /a num=%num% + 1
if not %num% == 11 goto loop1

Windows版 Safari 3 beta (3.0.4) の日本語設定

デフォルトでは日本語が文字化けしていた。
日本語を読み書きするには下記の設定をする。

  1. メニューから、「Edit」→「Preferences」→「Apperance」を選択
  2. 「Default Encoding」を「Unicode (UTF-8)」等の日本語対応の文字コードにする
  3. 「Standard font」は日本語対応のフォントにする

※3は不要かも。

2007年12月1日土曜日

GFE (Google Front End) とは

BloggerやGoogle DocsのHTTP Responseは、Webサーバとして"GFE"が使われていることを示している。この"GFE"とは"Google Front End"の略で、GoogleがカスタマイズしたApacheらしい。

Apacheのシェアが落ち込んだのは、Googleが自社サーバを独自に手を加えたGoogle風Apache「Google Front End」サーバに切り替えたためだ。AJAXとサーバ側Javaをフル活用するGoogle Front Endは、ページの読み込みが高速化されている。

上記の記事によると、他にもGoogleはUbuntuをカスタマイズした"Goobuntu"を使っているらしい。本家版gOS

YUI Base CSS 2.3.1 リリース

Yahoo! UI LibraryのBase CSSが2.3.1になった。
内容は2.3.0と同じ。YUI Library CSS Toolsの他のCSS(Reset、Fonts、Girds)とバージョンを合わせただけみたい。

メールアドレスのドメイン部分の最大文字数

PostPetメールアカウントでは21文字以上になるので注意。30文字くらいまで許したほうが無難。

ブログ アーカイブ

tags