$ ffmpeg -i hoge.wmv -b 968k hoge.mp4
このようにコマンドを実行する。
-i: 入力ファイルパス
-b: ビットレート(指定しない場合200k)
変換前の動画のビットレートが200kbpsを超えている場合、それを適切に指定しないと画像が粗くなってしまう。必要以上に大きい値を指定するとファイルサイズが無駄に大きくなってしまう。
水曜日, 5月 15, 2013
金曜日, 1月 18, 2013
メールのMIMEマルチパートの文字列をバイナリファイルに変換
メールの添付ファイル部分、例えば
を実行する。
--DC_BOUND_PRE_<1358488463.00267343d988>
Content-Type: application/pdf; name="201301181454.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="201301181454.pdf"
こんな行から
--DC_BOUND_PRE_<1358488463.00267343d988>--
こんな行までを仮にhoge.txtとして保存する。WindowsならCygwinのコンソールで
perl -MMIME::Base64 -ne 'print decode_base64($_)' < hoge.txt > 201301181454.pdfを実行する。
水曜日, 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
月曜日, 9月 26, 2011
火曜日, 8月 16, 2011
金曜日, 3月 25, 2011
金曜日, 2月 25, 2011
木曜日, 11月 18, 2010
木曜日, 9月 09, 2010
RootKit Hunterのインストール(CentOS)
CentOS 5.5にRootKit Hunterをインストールする。
rpmbuildコマンドがなければ、はじめにインストールする。
$ su
Password:
# yum install rpm-build
rkhunterのソースコードをダウンロードし、RPMパッケージを作成する。
# wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.3.6/rkhunter-1.3.6.tar.gz/download
# rpmbuild -ta rkhunter-1.3.6.tar.gz
作成されたRPMパッケージをインストールする。
# cd /usr/src/redhat/RPMS/noarch
# rpm -ivh rkhunter-1.3.6-1.noarch.rpm
rkhunterの使いかたは
# rkhunter -c
以上
rpmbuildコマンドがなければ、はじめにインストールする。
$ su
Password:
# yum install rpm-build
rkhunterのソースコードをダウンロードし、RPMパッケージを作成する。
# wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.3.6/rkhunter-1.3.6.tar.gz/download
# rpmbuild -ta rkhunter-1.3.6.tar.gz
作成されたRPMパッケージをインストールする。
# cd /usr/src/redhat/RPMS/noarch
# rpm -ivh rkhunter-1.3.6-1.noarch.rpm
rkhunterの使いかたは
# rkhunter -c
以上
月曜日, 9月 06, 2010
登録:
投稿 (Atom)