水曜日, 11月 07, 2012
Google Chromeの機能
URLバーに chrome://chrome-urls/ を打ち込んでもよいし、Chromeウェブストアの「Service Pages for Google Chrome」を入れてもよし。便利。
金曜日, 5月 11, 2012
MS SQL Server 2008 R2 Expressのインストールでつまづいた
Windows XP SP3 (32bit)での話。
事前に「.NET Framework 4」やら「Windowsインストーラ4.5」やら「Windows PowerShell 1.0」のインストールが必要。
管理ツール -> 「ローカルセキュリティポリシー」 -> 「ローカルポリシー」 -> 「ユーザ権利の割り当て」の「プログラムのデバッグ」に「NETWORK SERVICE」やら「LOCAL SERVICE」やらデータベース管理者を追加した。
また同じく「ローカルセキュリティポリシー」の「サービスとしてログオン」から古いバージョンのSQL Serverのユーザを削除した。
インストールが失敗した場合、再インストールの前に「プログラムの追加と削除」でインストールしたインスタンスを削除する必要あり。
厄介なこった。
(参考)
http://awoni.net/fc/sql-server-2008-express/
http://d.hatena.ne.jp/haradago/20100211/p1
事前に「.NET Framework 4」やら「Windowsインストーラ4.5」やら「Windows PowerShell 1.0」のインストールが必要。
管理ツール -> 「ローカルセキュリティポリシー」 -> 「ローカルポリシー」 -> 「ユーザ権利の割り当て」の「プログラムのデバッグ」に「NETWORK SERVICE」やら「LOCAL SERVICE」やらデータベース管理者を追加した。
また同じく「ローカルセキュリティポリシー」の「サービスとしてログオン」から古いバージョンのSQL Serverのユーザを削除した。
インストールが失敗した場合、再インストールの前に「プログラムの追加と削除」でインストールしたインスタンスを削除する必要あり。
厄介なこった。
(参考)
http://awoni.net/fc/sql-server-2008-express/
http://d.hatena.ne.jp/haradago/20100211/p1
金曜日, 4月 13, 2012
木曜日, 4月 12, 2012
IE + SSL + Flash (HTTPレスポンスヘッダーの怪)
Apacheの設定ファイルに
<LocationMatch "/var/www/html/private/.*\.(html|swf|gif|jpg|png)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</LocationMatch>
<LocationMatch "/var/www/html/private/.*\.(html|swf|gif|jpg|png)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</LocationMatch>
とか書いて特定のディレクトリのファイルがキャッシュされないようにしている場合
IEでhttps接続するとFlashが再生されないことがある。
原因は
Header set Pragma no-cache
らしい。要注意。
水曜日, 4月 11, 2012
JavaScript: FlashPlayerバージョン確認
var flashPlayerVer = (function() {
var flashVer = 0,
plugin,
verParts,
flashOCX;
if (navigator.plugins
&& navigator.mimeTypes['application/x-shockwave-flash']) {
plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
if (plugin) {
verParts = plugin.description.split(" ");
flashVer = verParts[2].replace('.', ',') + ',' + verParts[3].substring(1);
}
}
else {
flashOCX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7").GetVariable("$version");
if (flashOCX) {
flashVer = (flashOCX.split(" "))[1];
}
}
return flashVer;
})();
var flashVer = 0,
plugin,
verParts,
flashOCX;
if (navigator.plugins
&& navigator.mimeTypes['application/x-shockwave-flash']) {
plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
if (plugin) {
verParts = plugin.description.split(" ");
flashVer = verParts[2].replace('.', ',') + ',' + verParts[3].substring(1);
}
}
else {
flashOCX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7").GetVariable("$version");
if (flashOCX) {
flashVer = (flashOCX.split(" "))[1];
}
}
return flashVer;
})();
木曜日, 2月 23, 2012
Perl: Linux -> SQLServer 画像ファイル格納
LinuxマシンからWindowsマシンのSQL ServerにはFreeTDSとunixODBCで接続できるようになっている前提。
データベース接続にはDBIとDBD::ODBCを使う。
DBD::Sybaseではプレースホルダーが使えない(?)のでDBD::ODBCしかないが、動きが怪しい。
レコードが存在する場合にupdateしようとしたがうまくいかない。
そこで、レコードが存在する場合deleteしてinsertすることにしたが、これも同一接続内ではうまくいかない。
仕方ないので、select、deleteで一旦切断し、insert用に再度接続するようにした。
以下サンプル。
#!/usr/bin/perl --
use MIME::Parser;
use DBI;
use warnings;
use strict;
my $dbname = 'hoge';
my $user_id = "";
my $item_id = '10';
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $entity;
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$entity = $parser->parse(\*STDIN) or die;
alarm 0;
};
alarm 0;
if ($@) { exit; }
my $from = $entity->head->get('from');
if ($from =~ /<(.+?\@.+?)>/) {
$from = $1;
}
$user_id = _check_from($dbname, $from);
if ($user_id ne "" and $entity->is_multipart) {
_save_attached_file($entity, $dbname, $user_id, $item_id);
}
exit;
sub _connect_db($$$$) {
my $db_host = shift;
my $db_name = shift;
my $db_user = shift;
my $db_passwd = shift;
my $data_source = "dbi:ODBC:"
. "server=" . $db_host . ";"
. "database=" . $db_name;
my $dbh = DBI->connect($data_source, $db_user, $db_passwd)
or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
return $dbh;
}
sub _check_from($$) {
my $dbname = shift;
my $from = shift;
my $user_id = "";
my $db_server = 'windows-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id"
. " FROM users WITH (NOLOCK)"
. " WHERE email = '$from'";
my $sth = $dbh->prepare($stmt)
or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
while (my $row = $sth->fetchrow_arrayref) {
($user_id) = @$row;
}
$sth->finish;
$dbh->disconnect;
return $user_id;
}
sub _save_attached_file($$$$) {
my $entity = shift;
my $dbname = shift;
my $user_id = shift;
my $item_id = shift;
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i) ?
$entity->parts($i) :
$entity->parts($i)->parts($i);
my $content_type = $part_entity->head->mime_type;
if ($content_type =~ /\/(html|plain|alternative)/) {
next;
}
my $attachment = $part_entity->bodyhandle->as_string;
my $filename = $part_entity->head->recommended_filename;
my $db_server = 'earth-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id FROM files WITH(NOLOCK)"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
my $result_user_id = "";
while (my $row = $sth->fetchrow_arrayref) {
($result_user_id) = @$row;
}
$sth->finish;
if ($result_user_id) {
$stmt = "DELETE FROM files"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
}
$dbh->disconnect;
$dbh = _connect_db($db_server, $db_name, $db_user, $db_passwd);
$stmt = "INSERT INTO files ("
. "user_id,"
. "item_id,"
. "content_type,"
. "content,"
. "filename,"
. "date"
. ") VALUES ("
. "'$user_id',"
. "'$item_id',"
. "'$content_type',"
. "?,"
. "'$filename',"
. "GETDATE()"
. ")";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->bind_param( 1, $attachment, DBI::SQL_LONGVARBINARY );
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
$dbh->disconnect;
last;
}
}
__END__
データベース接続にはDBIとDBD::ODBCを使う。
DBD::Sybaseではプレースホルダーが使えない(?)のでDBD::ODBCしかないが、動きが怪しい。
レコードが存在する場合にupdateしようとしたがうまくいかない。
そこで、レコードが存在する場合deleteしてinsertすることにしたが、これも同一接続内ではうまくいかない。
仕方ないので、select、deleteで一旦切断し、insert用に再度接続するようにした。
以下サンプル。
#!/usr/bin/perl --
use MIME::Parser;
use DBI;
use warnings;
use strict;
my $dbname = 'hoge';
my $user_id = "";
my $item_id = '10';
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $entity;
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$entity = $parser->parse(\*STDIN) or die;
alarm 0;
};
alarm 0;
if ($@) { exit; }
my $from = $entity->head->get('from');
if ($from =~ /<(.+?\@.+?)>/) {
$from = $1;
}
$user_id = _check_from($dbname, $from);
if ($user_id ne "" and $entity->is_multipart) {
_save_attached_file($entity, $dbname, $user_id, $item_id);
}
exit;
sub _connect_db($$$$) {
my $db_host = shift;
my $db_name = shift;
my $db_user = shift;
my $db_passwd = shift;
my $data_source = "dbi:ODBC:"
. "server=" . $db_host . ";"
. "database=" . $db_name;
my $dbh = DBI->connect($data_source, $db_user, $db_passwd)
or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
return $dbh;
}
sub _check_from($$) {
my $dbname = shift;
my $from = shift;
my $user_id = "";
my $db_server = 'windows-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id"
. " FROM users WITH (NOLOCK)"
. " WHERE email = '$from'";
my $sth = $dbh->prepare($stmt)
or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
while (my $row = $sth->fetchrow_arrayref) {
($user_id) = @$row;
}
$sth->finish;
$dbh->disconnect;
return $user_id;
}
sub _save_attached_file($$$$) {
my $entity = shift;
my $dbname = shift;
my $user_id = shift;
my $item_id = shift;
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i) ?
$entity->parts($i) :
$entity->parts($i)->parts($i);
my $content_type = $part_entity->head->mime_type;
if ($content_type =~ /\/(html|plain|alternative)/) {
next;
}
my $attachment = $part_entity->bodyhandle->as_string;
my $filename = $part_entity->head->recommended_filename;
my $db_server = 'earth-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id FROM files WITH(NOLOCK)"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
my $result_user_id = "";
while (my $row = $sth->fetchrow_arrayref) {
($result_user_id) = @$row;
}
$sth->finish;
if ($result_user_id) {
$stmt = "DELETE FROM files"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
}
$dbh->disconnect;
$dbh = _connect_db($db_server, $db_name, $db_user, $db_passwd);
$stmt = "INSERT INTO files ("
. "user_id,"
. "item_id,"
. "content_type,"
. "content,"
. "filename,"
. "date"
. ") VALUES ("
. "'$user_id',"
. "'$item_id',"
. "'$content_type',"
. "?,"
. "'$filename',"
. "GETDATE()"
. ")";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->bind_param( 1, $attachment, DBI::SQL_LONGVARBINARY );
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
$dbh->disconnect;
last;
}
}
__END__
水曜日, 1月 04, 2012
登録:
投稿 (Atom)