2008年6月アーカイブ
以前にもブログで書いたRubyでHTMLファイル作成ですが、さらに改良しExcelの1行を1つのHTMLファイルに変換するプログラムを書きました。さらに、前回同様HTMLテンプレート機能も使用しています。Excelデータはタブ区切りテキストにします。
※プログラムはクリエイティブコモンズです。
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
※プログラムはクリエイティブコモンズです。
#!/usr/bin/ruby -Ks
require 'erb'
require 'yaml'
include ERB::Util
$KCODE = 's'
class CreateHtml
def initialize
@config = YAML.load_file("config.yaml")
@erb = ERB.new(File.read(@config[:template]), nil, "-")
end
def generate
objs = input
for obj in objs do
output(obj)
end
end
def input
objs = Array.new
count = 0
open(@config[:data]).each{|input|
if count == 0
@headers = input.split
count = 1
next
end
h = Hash.new
arr = input.split
@headers.size.times{|i|
h.store(@headers[i], arr[i])
}
objs.push(h)
}
return objs
end
def output(o)
open(@config[:output]+"/"+o['id']+".html", "w"){ |output|
output.write(@erb.result(binding()))
}
end
end
obj = CreateHtml.new
obj.generate
YAMLも使ってみました。詳細は以下を参照。
config.yamlは以下の通り。
:template: template.rhtml :data: data.txt :output: output
data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。
あるディレクトリにあるログファイルのなかからエラー情報を抜き出し、指定したメールに送信するというプログラムを書きました。cron登録して毎日エラーチェックしています。サーバの都合上、Perl5.8.0でCPANは使用できず。Linux、EUC環境でログファイルはShift-JISという環境で動作しています。メールはsendmailを使用しています。
1度チェックしたファイルはbackupディレクトリに移動し、2度はチェックしないようになっています。
ソースはクリエイティブコモンズでお願いします。
1度チェックしたファイルはbackupディレクトリに移動し、2度はチェックしないようになっています。
ソースはクリエイティブコモンズでお願いします。
#!/usr/bin/perl
use strict;
use File::Copy;
require "mimew.pl";
require "jcode.pl";
my $ERROR_DIR = '/var/log/error';
my $BACK_UP = '/var/log/error/backup';
opendir(DIR, $ERROR_DIR) or die;
foreach (readdir(DIR)){
my $file = $_;
my $error = "";
next if $file =~ /^\./ ;
next if $file =~ /backup/ ;
open(FILE, $ERROR_DIR."/".$file ) or die;
foreach (){
$error .= $_ unless $_ =~ /,0,0,/;
}
close(FILE);
print $file."\n";
jcode::convert(\$error, 'euc', 'sjis');
if ( length($error) > 1 ){
sendmail($file, $error)
}
move $ERROR_DIR."/".$file, $BACK_UP."/".$file or die "move Error. $!";
}
closedir(DIR);
sub sendmail(){
my @arg = @_;
my $sendmail = '/usr/lib/sendmail';
my $to = "to\@example.com";
my $from = "from\@example.com";
my $subject = @arg[0];
my $body = @arg[1];
jcode::convert(\$body,'jis', 'euc');
jcode::convert(\$subject,'jis', 'euc');
$subject = mimeencode($subject);
open(MAIL,"| $sendmail -t");
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "\n";
print MAIL "$body\n";
close(MAIL);
}
昔、使っていたBloggerを復活しようと自サーバにFTP経由でパブリッシュしようとしたら、以下エラーが発生しました。
FTPサーバに問題があるかといろいろ試しました。
参考サイト
java.net.ConnectException: Connection timed out
FTPサーバに問題があるかといろいろ試しました。
- Windowsからは正常にアクセスできる
- ファイアーウォールでIP、ポート指定が入っているわけではない
- 別のサーバにはFTPパブリッシュできる
# vi /etc/vsftpd/vsftpd.conf # diff vsftpd.conf vsftpd.conf.org < pasv_promiscuous=YES < pasv_min_port=50000 < pasv_max_port=50050 # service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ]上記の設定で正常にパブリッシュできるようになりました。ファイアーウォールのポリシーは50000から50050まで許可しました。
参考サイト
UTF-8のファイルをサーバの都合上、全てEUC-JPに変換したくなりました。しかし、探してみるとぴったりのフリーソフトがない。個別ファイルを文字コード変換できるソフトはたくさんあるのですが、一括変換だとコマンドプロンプトで行わなければいけない等何かと不便です。
そこで見つけたのがKanjiTranslatorです。
イメージしていた通りでフォルダドラッグで中のファイルが全て文字コード変換できます。以外とこのような便利なフリーソフトはないんですね。もし他にもある場合は教えてください。
参考サイト
そこで見つけたのがKanjiTranslatorです。
イメージしていた通りでフォルダドラッグで中のファイルが全て文字コード変換できます。以外とこのような便利なフリーソフトはないんですね。もし他にもある場合は教えてください。
参考サイト
サーバがクラッシュしてしまい、復旧した際に画像が足りなくて困ってしまった。どこかにバッグアップがあると思うのだが、探せない。2年くらい前のサイトだ。
どうしようか考えてしまいたが、Webページなのでインターネット上にキャッシュがあるのではと思いました。はじめにGoogleのキャッシュを見ましたが、やはり最新情報に更新されてしまっており画像がない状態。
そこで、Internet Archiveで探してみました。画像がなくなっていることが多いのですが、探してみると見つかりました!本当に便利なサービスです。無事画像をアップし元の状態に戻りました。(ソースコードはバージョン管理していたのですが、画像まで管理していなかったために今回のような事態になってしまいました)。
確か非営利団体で行っているんですよね。「WayBack Machine」というデータベースにインデックスされているようです。Alexaからデータを寄贈してもらっているんですね。興味のある方は以下参考サイトをどうぞ。
参考サイト
どうしようか考えてしまいたが、Webページなのでインターネット上にキャッシュがあるのではと思いました。はじめにGoogleのキャッシュを見ましたが、やはり最新情報に更新されてしまっており画像がない状態。
そこで、Internet Archiveで探してみました。画像がなくなっていることが多いのですが、探してみると見つかりました!本当に便利なサービスです。無事画像をアップし元の状態に戻りました。(ソースコードはバージョン管理していたのですが、画像まで管理していなかったために今回のような事態になってしまいました)。
確か非営利団体で行っているんですよね。「WayBack Machine」というデータベースにインデックスされているようです。Alexaからデータを寄贈してもらっているんですね。興味のある方は以下参考サイトをどうぞ。
参考サイト
Linuxのコマンドラインで以下を覚えておくとコマンドを打つのが早くなります。
覚書として残しておきます。
覚書として残しておきます。
| 前のコマンド | [Ctrl]+[P] |
| 次のコマンド | [Ctrl]+[N] |
| インクリメンタルサーチ | [Ctrl]+[R] |
| 行頭に移動 | [Ctrl]+[A] |
| 行末に移動 | [Ctrl]+[E] |
| 1文字左に移動 | [Ctrl]+[B] |
| 1文字右に移動 | [Ctrl]+[F] |
| 1単語左に移動 | [ESC]+[B] |
| 1単語右に移動 | [ESC]+[F] |
| 1文字削除 | [Ctrl]+[D]、[Ctrl]+[H] |
以前に作ったRubyクローラーを改造して、検索フォームに自動で値を設定するプログラムをつくりました。その際にテキストフィールドのnameにハイフンがあり値の設定にはまったので解決方法を記載します。
以下ですとエラーとなります。 ※keyword-fieldにハイフンが入っているためです。
実は以下のように['keyword-field']とすればOK。簡単です。いろいろ検索したのですが、解決策が探せなかったので、記載してみました。
以下ですとエラーとなります。 ※keyword-fieldにハイフンが入っているためです。
page = @agent.get('http://example.com')
search_form = page.forms.with.action('http://example.com/search.html').first
search_form.keyword-field = keyword
実は以下のように['keyword-field']とすればOK。簡単です。いろいろ検索したのですが、解決策が探せなかったので、記載してみました。
page = @agent.get('http://example.com')
search_form = page.forms.with.action('http://example.com/search.html').first
search_form['keyword-field'] = keyword
最近、仕事からちょっとだけ早く帰れるようになったので、前から気になっていたサービスをブログ設定することにしました。
まずは、「あわせて読みたい」と「feed meter」です。
「あわせて読みたい」はブログに画像をはるだけで自分のブログを呼んでいる読者が他にどんなブログを呼んでいるかがわかるサービス。導入もすごく簡単でとても面白いサービスです。
以下の画像をサイドメニューに貼ってみました。約1?2日で集計が完了するようです。どんな集計結果ができる楽しみです。
もう1つは「feet meter」こちらはサイトの人気度と更新頻度をわかりやすく画像であらわしています。
どちらも設定に必要なのはURLのみ。導入の「簡単さ」と意外な「発見」がある面白さ、それを支える「技術」は流石だなぁと感じました。他にもないかな、こういうサービス。
ロジックがどのようになっているのかを考えてみても面白そうです。
まずは、「あわせて読みたい」と「feed meter」です。
「あわせて読みたい」はブログに画像をはるだけで自分のブログを呼んでいる読者が他にどんなブログを呼んでいるかがわかるサービス。導入もすごく簡単でとても面白いサービスです。
以下の画像をサイドメニューに貼ってみました。約1?2日で集計が完了するようです。どんな集計結果ができる楽しみです。
もう1つは「feet meter」こちらはサイトの人気度と更新頻度をわかりやすく画像であらわしています。
どちらも設定に必要なのはURLのみ。導入の「簡単さ」と意外な「発見」がある面白さ、それを支える「技術」は流石だなぁと感じました。他にもないかな、こういうサービス。
ロジックがどのようになっているのかを考えてみても面白そうです。
前回、lighttpdでバーチャルホストの設定をしたので、ついでにHikiをインストールすることにしました。HikiはwikiクローンでRubyで作られており非常に使いやすいです。
かなり、インストールに手間取ってしまったので、インストール方法をまとめておきます。
例として、hiki.example.comというサブドメインでの設定とします。
1) Hikiサイトより、最新ソースをダウンロードする
2) ダウンロードしたファイルをサーバにアップして解凍する
3) 解凍したファイルのdataディレクトリを公開側でない場所へ移動する
4) hikiconf.rb.sampleをhikiconf.rbに書き換えて@data_pathを設定する
5) lighttpd.confにバーチャルドメインを設定する
6) サーバ(lighttpd)を再起動すればOK
順調に起動するとおもったら、アクセスすると以下のエラーが大分はまってしまいました。
hiki error permission denied data//cache
原因は、dataファイルのパーミッションのせいでした。
(はじめスラッシュが2回続いていることが原因かと思ったのですが、全く関係ありませんでした。)
「/www/hiki/data」のオーナーをlighttpdにし、さらにchmod -R og+w dataとしました。
そしたらパーミッションエラーは表示されず正常に動作しました。
かなり、インストールに手間取ってしまったので、インストール方法をまとめておきます。
例として、hiki.example.comというサブドメインでの設定とします。
1) Hikiサイトより、最新ソースをダウンロードする
2) ダウンロードしたファイルをサーバにアップして解凍する
$ tar xvzf hiki-0.8.7.tar.gz $ mv hiki-0.8.7.tar.gz /www/example.com/hiki
3) 解凍したファイルのdataディレクトリを公開側でない場所へ移動する
$ cp -r /www/example.com/public/hiki/data /www/hiki
4) hikiconf.rb.sampleをhikiconf.rbに書き換えて@data_pathを設定する
$ mv /www/example.com/hiki/hikiconf.rb.sample /www/example.com/hiki/hikiconf.rb $vi /www/example.com/hiki/hikiconf.rb @data_path = '/www/hiki/data'
5) lighttpd.confにバーチャルドメインを設定する
$HTTP["host"] == "hiki.example.com" {
var.servername = "hiki.example.com"
accesslog.filename = "var.servername + "/access.log"
server.errorlog = "var.servername + "/error.log"
server.document-root = "/www/example.com/hiki"
index-file.names = ( "hiki.cgi" )
url.access-deny = ( "hikiconf.rb" )
cgi.assign = ( ".cgi" => "" )
6) サーバ(lighttpd)を再起動すればOK
# service lighttpd restart
順調に起動するとおもったら、アクセスすると以下のエラーが大分はまってしまいました。
hiki error permission denied data//cache
原因は、dataファイルのパーミッションのせいでした。
(はじめスラッシュが2回続いていることが原因かと思ったのですが、全く関係ありませんでした。)
「/www/hiki/data」のオーナーをlighttpdにし、さらにchmod -R og+w dataとしました。
そしたらパーミッションエラーは表示されず正常に動作しました。

