確定申告をe-taxでやっていますが、必要なのが住基カードを読ませるためのICカードリーダー。
住民基本台帳カードには、接触型と非接触型がありますが、ある自治体で手持ちの接触型専用リーダーが使えるかどうか調べようとして一苦労したのでメモ。
そこの自治体、発行しているカードの種類を書いてないんですよ…
それに個人でカードがどうこうというのを書いてる方も見当たらず。
さらに調べてみたところ、公的個人認証サービス都道府県協議会の公的個人認証サービスポータルサイトに、自治体ごとの対応ICカードリーダー一覧があるのを発見。
とりあえず接触型リーダーも使えるような記載だったので一安心。引っ越ししても買い換えずにすみそうです。
2012年01月29日
2012年01月18日
cronでJavaアプリが上手く動かない(リソースバンドルが読まれてないっぽい)
cronでJavaアプリを起動してバッチ処理させようとして、上手く動かない(リソースバンドルが読まれてないっぽい)という現象に遭遇しました。
リソースバンドルの呼び出し方としてはまあごく普通にこんな感じ。
hogehoge_ja.propertiesというリソースをWEB-INF/classesに置き、クラスパスとか設定していたのですが、どうやっても読んでくれない。起動用スクリプトでcdしてカレントディレクトリを設定したりしていたので、そこにhogehoge_ja.propertiesへのシンボリックリンクを置いたりしたのですが、全然ダメ。
結局直せたのですが、バッチの起動用スクリプトの中で、LANGを設定していないのが原因でした。
の1行をスクリプトに挿入することで、hogehoge_ja.propertiesを読んでくれました。
英語版のリソースファイルを探しに行ってたんですね…
リソースバンドルの呼び出し方としてはまあごく普通にこんな感じ。
ResourceBundle rb = ResourceBundle.getBundle("hogehoge");
String URL = rb.getString("URL");
hogehoge_ja.propertiesというリソースをWEB-INF/classesに置き、クラスパスとか設定していたのですが、どうやっても読んでくれない。起動用スクリプトでcdしてカレントディレクトリを設定したりしていたので、そこにhogehoge_ja.propertiesへのシンボリックリンクを置いたりしたのですが、全然ダメ。
結局直せたのですが、バッチの起動用スクリプトの中で、LANGを設定していないのが原因でした。
export LANG=ja_JP.UTF-8
の1行をスクリプトに挿入することで、hogehoge_ja.propertiesを読んでくれました。
英語版のリソースファイルを探しに行ってたんですね…
IPアドレスから位置情報を推定したい
IPアドレスとかWi-Fiアクセスポイントか、そういった各種情報から位置情報を推定する仕組みがすでにいくつかあるわけですが、こういうデータを「買わずに何とか作れないか」という話になったときに、どうやったら推定していけるんだろう、と考えてみました。
まあ、もとになるデータが無いときは直球しかないので、「サイト利用者に現在位置を入力してもらう」ということになると思います。
この場合、場所を入力してもらう必然性が必要です。
たとえば、回線速度とかの測定サイトだと、地域ランキングを機能に持つことで、郵便番号とか市町村とかを入れてもらいやすくする。
天気情報を表示しますよというデスクトップツールとか作って、地名を設定してもらってもいい。(このとき、すぐに送信しなくても、そのIPアドレスから地域IDを含むクエリが飛ぶわけで、あとからいくらでも集計できる。設定時にはむしろ何も報告しない方がいい)
通販、IPアドレスと送り先。
購入した商品のユーザー登録、IPと設置場所情報。
ぐるなび系というか地域情報系、おおざっぱな位置の把握が限界かなあ。会社で探すとして、会社のまわりばっかりとは限らない。(ターミナル周辺とかで探すことの方が多いよね?)。
あとはクーポン「リアル店舗系」は地域がモロに反映されそうだけど、こちらもサンプルが少ないうちはおおざっぱな地域把握が限界か。
店舗検索系は、地域の指定操作は自然だけど、どのくらい「地元」を探すのかが分からない。他地域のような気がするが、業種業態によるか。マッサージとか病院は地元?コンビニはどっか外出先?銀行は?
。。。あー、めんどくさいから「ホントに必要なら買えば?」ということになりそうな気がしてきた。そういう話が出たら、そういうことにしよう。
ちなみに、動的割当のIPに対して、逆引きを地名を含む名前にしているISPとかもあるので、そういうのも使えると思うけど、どれぐらいメンテナンスされてるかが分からないと頼るのは怖いな。
まあ、もとになるデータが無いときは直球しかないので、「サイト利用者に現在位置を入力してもらう」ということになると思います。
この場合、場所を入力してもらう必然性が必要です。
たとえば、回線速度とかの測定サイトだと、地域ランキングを機能に持つことで、郵便番号とか市町村とかを入れてもらいやすくする。
天気情報を表示しますよというデスクトップツールとか作って、地名を設定してもらってもいい。(このとき、すぐに送信しなくても、そのIPアドレスから地域IDを含むクエリが飛ぶわけで、あとからいくらでも集計できる。設定時にはむしろ何も報告しない方がいい)
通販、IPアドレスと送り先。
購入した商品のユーザー登録、IPと設置場所情報。
ぐるなび系というか地域情報系、おおざっぱな位置の把握が限界かなあ。会社で探すとして、会社のまわりばっかりとは限らない。(ターミナル周辺とかで探すことの方が多いよね?)。
あとはクーポン「リアル店舗系」は地域がモロに反映されそうだけど、こちらもサンプルが少ないうちはおおざっぱな地域把握が限界か。
店舗検索系は、地域の指定操作は自然だけど、どのくらい「地元」を探すのかが分からない。他地域のような気がするが、業種業態によるか。マッサージとか病院は地元?コンビニはどっか外出先?銀行は?
。。。あー、めんどくさいから「ホントに必要なら買えば?」ということになりそうな気がしてきた。そういう話が出たら、そういうことにしよう。
ちなみに、動的割当のIPに対して、逆引きを地名を含む名前にしているISPとかもあるので、そういうのも使えると思うけど、どれぐらいメンテナンスされてるかが分からないと頼るのは怖いな。
2011年12月14日
ソフトウェアの「作る」か「持ってくるか」問題
ミドルウェアとかライブラリとかソフトって「外部のを使う、より、自分で作る」という時期があって、そこからしばらくすると「自分で作るより、外から持ってきて使う」に変わるのが一般的だと思うんだけど、それってどんなタイミングなんだろう。
対象プラットフォームでのまともな実装がない時期(OS/2用ブラウザとしてIBMがWebExplorer作った、みたいな時期)だと当然作らないといけないし、逆に今からUnity対抗のゲーム開発用ソフトを作り始めるのは不合理っぽい。
これって、いつ潮目が変わるんだろう。それでも作っちゃう人は何が見えてる( or 見えてない)んだろう。それがパターン化できると「もう作るなよ」と説得しやすくなりそうだし、あるいは、見えてる人が「それでも作るんだよ、勝てるよ」と言いやすくなるかも知れない。
続きを読む
対象プラットフォームでのまともな実装がない時期(OS/2用ブラウザとしてIBMがWebExplorer作った、みたいな時期)だと当然作らないといけないし、逆に今からUnity対抗のゲーム開発用ソフトを作り始めるのは不合理っぽい。
これって、いつ潮目が変わるんだろう。それでも作っちゃう人は何が見えてる( or 見えてない)んだろう。それがパターン化できると「もう作るなよ」と説得しやすくなりそうだし、あるいは、見えてる人が「それでも作るんだよ、勝てるよ」と言いやすくなるかも知れない。
続きを読む
2011年12月08日
コアダンプ
DBのダンプ操作について調べてて、「メモリを吐き出すのはコアダンプっていうんですよー」と書いてるページがあって、ふと思い出した。
UNIX系のOSはプログラムが特定のシグナルで終了するときに、coreというファイルを作ってそこに終了時点でのメモリ等の内容を保存するわけですが、日本だと、コアダンプする、と呼ばれて、まるで「コアダンプ」という動詞があるような感じになってます。
でも、動詞はあくまで dump.
英語で「コアダンプする」というときには " It dumps core." となります。
ダンプされたコアファイルを指す名詞句は "core dump"でいいみたいです。
これ、「コア」メモリという磁石を使ったRAMを使っていた時代に、実行時の状態(メモリとか)をプリントアウトの形でダンプ(投げ下ろす、という一般動詞)させてたときの表現の名残なんですね。プログラムが異常終了すると、いきなり小型冷蔵庫みたいなサイズのプリンターが、ガーガー動き始めるわけです。ディスクが、紙よりもずっと高価だった時代です。
UNIX系のOSはプログラムが特定のシグナルで終了するときに、coreというファイルを作ってそこに終了時点でのメモリ等の内容を保存するわけですが、日本だと、コアダンプする、と呼ばれて、まるで「コアダンプ」という動詞があるような感じになってます。
でも、動詞はあくまで dump.
英語で「コアダンプする」というときには " It dumps core." となります。
ダンプされたコアファイルを指す名詞句は "core dump"でいいみたいです。
これ、「コア」メモリという磁石を使ったRAMを使っていた時代に、実行時の状態(メモリとか)をプリントアウトの形でダンプ(投げ下ろす、という一般動詞)させてたときの表現の名残なんですね。プログラムが異常終了すると、いきなり小型冷蔵庫みたいなサイズのプリンターが、ガーガー動き始めるわけです。ディスクが、紙よりもずっと高価だった時代です。
2011年12月02日
mod_jkのインストール
mod_jkは、ApacheとTomcatを連携させるコネクタです。
久しぶりにインストールしようとしたら、すっかり忘れていたので、備忘録として。
・mod_jkのソースを入手する
配布元はこちら。http://tomcat.apache.org/connectors-doc/
最新のソースをwgetで取ってきて解凍すればOK。
・コンパイルする
# cd 展開したアーカイブのディレクトリ
# cd native
# ./configure --with-apxs
さらのサーバーだと、configureで開発環境が足りないとか言われますので、
# yum install gcc gcc-c++
を実行。(もしかするとhttpd-develも要るかも)
あとはmake。
問題なくビルドできたら、apache-2.0ディレクトリにあるmod_jk.soを、/etc/httpd/modulesにコピー。
# cp -p apache-2.0/mod_jk.so /etc/httpd/modules
こんな感じ。
久しぶりにインストールしようとしたら、すっかり忘れていたので、備忘録として。
・mod_jkのソースを入手する
配布元はこちら。http://tomcat.apache.org/connectors-doc/
最新のソースをwgetで取ってきて解凍すればOK。
・コンパイルする
# cd 展開したアーカイブのディレクトリ
# cd native
# ./configure --with-apxs
さらのサーバーだと、configureで開発環境が足りないとか言われますので、
# yum install gcc gcc-c++
を実行。(もしかするとhttpd-develも要るかも)
あとはmake。
問題なくビルドできたら、apache-2.0ディレクトリにあるmod_jk.soを、/etc/httpd/modulesにコピー。
# cp -p apache-2.0/mod_jk.so /etc/httpd/modules
こんな感じ。
2011年10月20日
CentOS5系にPHP 5.2をyumで入れる
CentOS5系を使っていて、WordPressを動かそうとしたらPHP5.1じゃ動かないよ、と言われて5.2系をyumから入れたいな、とぐるっと見回したら、こちらのエントリがよさそうでしたので、参考にさせていただきました。
http://d.hatena.ne.jp/youhey/20110330/1301488692
dev.centos.org、という開発用リポジトリがあったんですね。
上記のように追加のリポジトリを設定して、そこを使用するよう以下の感じで“update php”とすればOK。
うん、おっけ。
http://d.hatena.ne.jp/youhey/20110330/1301488692
dev.centos.org、という開発用リポジトリがあったんですね。
[root@host ~]# cat /etc/yum.repos.d/CentOS-Testing.repo
[centos5-testing]
name=CentOS-5 Testing
baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/
enabled=0
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
priority=1
上記のように追加のリポジトリを設定して、そこを使用するよう以下の感じで“update php”とすればOK。
# yum --enablerepo=centos5-testing update php
Loaded plugins: downloadonly, fastestmirror, priorities
Loading mirror speeds from cached hostfile
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* rpmforge: apt.sw.be
* updates: rsync.atworks.co.jp
Excluding Packages in global exclude list
Finished
286 packages excluded due to repository priority protections
Setting up Update Process
Resolving Dependencies
--> Running transaction check
--> Processing Dependency: php = 5.1.6-27.el5_5.3 for package: php-devel
---> Package php.x86_64 0:5.2.10-1.el5.centos set to be updated
--> Processing Dependency: php-cli = 5.2.10-1.el5.centos for package: php
--> Processing Dependency: php-common = 5.2.10-1.el5.centos for package: php
--> Running transaction check
---> Package php-cli.x86_64 0:5.2.10-1.el5.centos set to be updated
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-pdo
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-mbstring
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-mysql
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-gd
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-xml
--> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-ncurses
---> Package php-common.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-devel.x86_64 0:5.2.10-1.el5.centos set to be updated
--> Running transaction check
---> Package php-gd.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-mbstring.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-mysql.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-ncurses.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-pdo.x86_64 0:5.2.10-1.el5.centos set to be updated
---> Package php-xml.x86_64 0:5.2.10-1.el5.centos set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
(中略)
Complete!
# php --version
PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
#
うん、おっけ。
2011年09月01日
PHPでウェブバグというかビーコン画像を出力したい
メモ。
サイトに来た人をトラッキングする仕掛けを作るときによく使うウェブバグ(1x1の透過画像)を、PHPからどうやって出そうか調べてたら、まさに答えそのものを書いているサイトがありました。素敵。
「php plus MySQL」さんのところで紹介されていた、下記のやりかたでビシっとうまくいきました。
<?php
header("Content-type: image/gif");
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
?>
こちらのページでは、ほかの出力方法なども紹介されてますのでぜひ。
http://php.birdlab.com/tips/1
サイトに来た人をトラッキングする仕掛けを作るときによく使うウェブバグ(1x1の透過画像)を、PHPからどうやって出そうか調べてたら、まさに答えそのものを書いているサイトがありました。素敵。
「php plus MySQL」さんのところで紹介されていた、下記のやりかたでビシっとうまくいきました。
<?php
header("Content-type: image/gif");
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
?>
こちらのページでは、ほかの出力方法なども紹介されてますのでぜひ。
http://php.birdlab.com/tips/1
2011年08月31日
クエリAという条件で得られた結果と、クエリBという条件で得られた結果を、UNION ALLして、さらにsumする
MySQLで、クエリAという条件で得られた結果と、クエリBという条件で得られた結果を、UNION ALLして、さらにsumする必要があり、その書き方のメモ。
再現実験用に、テーブルを使わないクエリとして記載。
union allでつないで、それを括弧でくるんで、それを「as hogehoge」で名前を付けてやる、という流れ。
mysql> select sum(a) from (select 1 as a union all select 2 as a) as uni;
+--------+
| sum(a) |
+--------+
| 3 |
+--------+
1 row in set (0.00 sec)
こちらを参考にさせていただきました。
http://ameblo.jp/udzura/entry-10122301087.html
再現実験用に、テーブルを使わないクエリとして記載。
union allでつないで、それを括弧でくるんで、それを「as hogehoge」で名前を付けてやる、という流れ。
mysql> select sum(a) from (select 1 as a union all select 2 as a) as uni;
+--------+
| sum(a) |
+--------+
| 3 |
+--------+
1 row in set (0.00 sec)
こちらを参考にさせていただきました。
http://ameblo.jp/udzura/entry-10122301087.html
2011年08月04日
Perlで「半角文字が入ってない」チェックをする
全角文字しか受け付けません、というシステムにデータを渡す必要があり、半角文字が含まれないことを確認するためにこんなPerlコードを書いてみた。
contains_hankakuは、半角プリンタブル文字が含まれるかどうかをチェックするコード。全角しか受け付けない、のチェックには不十分なのだけど、手入力ミスを弾くならこんな感じか。
zenkaku_onlyは、より厳密に全角限定を確認するコード。EUCにして「0xA1 - 0xFE」しか出てこないことを確認するようにしている。
------------------------
#!/usr/bin/perl
use Jcode;
my $invalid = "(あ)";
my $valid = "(あ)";
if ( &contains_hankaku($invalid) ) {print "invalidには半角がある\n";}
if ( &contains_hankaku($valid) ) {print "validには半角がある\n";}
if ( &only_zenkaku($invalid) ) {print "invalidは全角オンリーだ\n";}
if ( &only_zenkaku($valid) ) {print "validは全角オンリーだ\n";}
exit(0);
## EUCに変換してからチェック。半角プリンタブルコードはEUC全角には出てこない
sub contains_hankaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x20-\x7e]/) == undef) {return 0;}
else {return 1;}
}
## EUC全角の、0xA1 - 0xFEの間しか出てこないことを確認
sub only_zenkaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x0-\xA0]/) == undef && ($euc =~ /\xFF/) == undef) {return 1;}
else {return 0;}
}
contains_hankakuは、半角プリンタブル文字が含まれるかどうかをチェックするコード。全角しか受け付けない、のチェックには不十分なのだけど、手入力ミスを弾くならこんな感じか。
zenkaku_onlyは、より厳密に全角限定を確認するコード。EUCにして「0xA1 - 0xFE」しか出てこないことを確認するようにしている。
------------------------
#!/usr/bin/perl
use Jcode;
my $invalid = "(あ)";
my $valid = "(あ)";
if ( &contains_hankaku($invalid) ) {print "invalidには半角がある\n";}
if ( &contains_hankaku($valid) ) {print "validには半角がある\n";}
if ( &only_zenkaku($invalid) ) {print "invalidは全角オンリーだ\n";}
if ( &only_zenkaku($valid) ) {print "validは全角オンリーだ\n";}
exit(0);
## EUCに変換してからチェック。半角プリンタブルコードはEUC全角には出てこない
sub contains_hankaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x20-\x7e]/) == undef) {return 0;}
else {return 1;}
}
## EUC全角の、0xA1 - 0xFEの間しか出てこないことを確認
sub only_zenkaku
{
my $str = shift;
my $euc = jcode($str)->euc;
if ( ($euc =~ /[\x0-\xA0]/) == undef && ($euc =~ /\xFF/) == undef) {return 1;}
else {return 0;}
}
2011年06月29日
PT2で録画したTSファイルをDVDに焼いた
PT2で録画したTSファイルをDVDに焼くにあたって、検索でよく出てくる方法がうまくいかなかったのでメモ。
あちこちで勧められてたDVD Flickは、うちではダメでした。Phenom X4 905eでは、1時間のTSの変換に数時間かかり、しかも映像・音声の変換まで進んでさあ書き込み、という時点でなぜかエラーで書き込めないという現象が発生してしまいました。
困って、さらに探したら、TMPGEnc Authoring Works 4にたどり着きました。体験版を使って、ほとんど何も考えずにDVDに焼けます。非互換設定をしたときの警告など、とてもありがたいです。
あちこちで勧められてたDVD Flickは、うちではダメでした。Phenom X4 905eでは、1時間のTSの変換に数時間かかり、しかも映像・音声の変換まで進んでさあ書き込み、という時点でなぜかエラーで書き込めないという現象が発生してしまいました。
困って、さらに探したら、TMPGEnc Authoring Works 4にたどり着きました。体験版を使って、ほとんど何も考えずにDVDに焼けます。非互換設定をしたときの警告など、とてもありがたいです。
2011年06月02日
SQLiteをPerl CGIでDBD経由でアクセスしたときのハマリ
自分はすぐ忘れるのでメモ。
SQLiteをPerl CGIでDBD経由でアクセスしたときのハマリ。
SQLiteでDBが開けないエラーが起きていた。
DBファイルそのものの書き込み権限は666とか777にしてたけど、ディレクトリにも書き込み権下が必要だった。ディレクトリに、apacheでも書き込めるよう設定したら、無事書けるようになった。
あと、原因追及に時間がかかったのが、RaiseErrorを1にしてもエラーが報告されないという現象。
当初、
{
RaiseError => 1,
PrintError => 1,
AutoCommit => 1,
}
という設定にしていたら、DBに書けないのにエラーが報告されないし止まらない。
{
RaiseError => 1,
PrintError => 0,
AutoCommit => 1,
}
としなければいけなかった。PrintErrorは、警告を出して【止まらない】」というのがキモらしい。
SQLiteをPerl CGIでDBD経由でアクセスしたときのハマリ。
SQLiteでDBが開けないエラーが起きていた。
DBファイルそのものの書き込み権限は666とか777にしてたけど、ディレクトリにも書き込み権下が必要だった。ディレクトリに、apacheでも書き込めるよう設定したら、無事書けるようになった。
あと、原因追及に時間がかかったのが、RaiseErrorを1にしてもエラーが報告されないという現象。
当初、
{
RaiseError => 1,
PrintError => 1,
AutoCommit => 1,
}
という設定にしていたら、DBに書けないのにエラーが報告されないし止まらない。
{
RaiseError => 1,
PrintError => 0,
AutoCommit => 1,
}
としなければいけなかった。PrintErrorは、警告を出して【止まらない】」というのがキモらしい。
2011年05月31日
自宅メインPCをAMD E-350にダウングレードした
我が家は東京電力管内なので、節電に協力するため自宅メインPCをAMD E-350にダウングレードしてみた。(単に「いまどきの一体型MBはイケてるのか?」を確認してみたかっただけ、というのは内緒だ)
CPUは、AMD PhenomII x4 905e(TDP 65W)から、AMD E-350(TDP 18W)へ。
グラボは、RADEON HD 5870から、RADEON HD 3870へ。
グラボを交換したのはピーク電力の抑制狙い。
E-350については、4gamer.netで「フレームレートに現れないもっさり感」と表現されていたけど、確かにその感じはある。
うちで特に気になったのは、「Plants vs. Zombies」。ロード前半がものすごくもっさりしていたのと、ゲームプレイ中のキャラクタアニメーションがカクカクしてたのが違和感。
あわせて確認した「Fallout3」は普通に動いてたので、余計に「なんでこんな軽そうなゲームが引っかかるの?」という感じでした。
うむ。戻したい(えー

こちらがAMD PhenomII x4 905eとRADEON HD 5870。

こちらはAMD E-350とRADEON HD 3870。
CPUは、AMD PhenomII x4 905e(TDP 65W)から、AMD E-350(TDP 18W)へ。
グラボは、RADEON HD 5870から、RADEON HD 3870へ。
グラボを交換したのはピーク電力の抑制狙い。
E-350については、4gamer.netで「フレームレートに現れないもっさり感」と表現されていたけど、確かにその感じはある。
うちで特に気になったのは、「Plants vs. Zombies」。ロード前半がものすごくもっさりしていたのと、ゲームプレイ中のキャラクタアニメーションがカクカクしてたのが違和感。
あわせて確認した「Fallout3」は普通に動いてたので、余計に「なんでこんな軽そうなゲームが引っかかるの?」という感じでした。
うむ。戻したい(えー

こちらがAMD PhenomII x4 905eとRADEON HD 5870。

こちらはAMD E-350とRADEON HD 3870。
2011年02月08日
ケータイの「301 サイトが移動しました」対策
今日、すごく疲れたので忘れないうちにメモ。
携帯電話向けサイトで、「301サイトが移動しました」画面が出ないようにする対策。
www.example.com/content/m
というページを作ったと思ってください。
・ディレクトリの後ろに/をつければ警告出ないよ
というのが定番ですが、URL末尾のスラッシュなしでQRコードを印刷してしまっていて、もう回収不能という状況になったときに切り抜けた方法。
手順1:.htaccessが使えるようにApacheを設定した上で、
手順2:/contentディレクトリに下記内容の.htaccessを作成。
手順3:/contentに、mという名前(拡張子なし)で実コンテンツが出るようなCGIを設置。CGIであれば、このとき忘れず「chmod a+x m」として実行属性をつけること。
以上です。
URL末尾のスラッシュがないと、ApacheはDirectoryモジュールが働いてスラッシュ有りのURLに301でリダイレクトし、その上でコンテンツ出力が走ります。このため、まず301リダイレクトの時点で携帯電話に警告画面が出てしまうわけですね。(スラッシュを末尾につければ「301サイトが〜」を抑制できる理由はまさにこれです)
上記のような手順によって、ディレクトリで無く実体ファイル(CGIとかコンテンツとか)をその名前で置けば、Directoryモジュールは働かないので301リダイレクトはおこなわれず、警告も回避できるというわけです。
携帯電話向けサイトで、「301サイトが移動しました」画面が出ないようにする対策。
www.example.com/content/m
というページを作ったと思ってください。
・ディレクトリの後ろに/をつければ警告出ないよ
というのが定番ですが、URL末尾のスラッシュなしでQRコードを印刷してしまっていて、もう回収不能という状況になったときに切り抜けた方法。
手順1:.htaccessが使えるようにApacheを設定した上で、
手順2:/contentディレクトリに下記内容の.htaccessを作成。
<Files m>
ForceType cgi-script
</Files>
手順3:/contentに、mという名前(拡張子なし)で実コンテンツが出るようなCGIを設置。CGIであれば、このとき忘れず「chmod a+x m」として実行属性をつけること。
以上です。
URL末尾のスラッシュがないと、ApacheはDirectoryモジュールが働いてスラッシュ有りのURLに301でリダイレクトし、その上でコンテンツ出力が走ります。このため、まず301リダイレクトの時点で携帯電話に警告画面が出てしまうわけですね。(スラッシュを末尾につければ「301サイトが〜」を抑制できる理由はまさにこれです)
上記のような手順によって、ディレクトリで無く実体ファイル(CGIとかコンテンツとか)をその名前で置けば、Directoryモジュールは働かないので301リダイレクトはおこなわれず、警告も回避できるというわけです。
2010年10月14日
RESTfulなURL体系のサイトで検索機能をもたせるときのスクリプト構成
自分用備忘録。
RESTfulなURL体系のサイトで検索機能をもたせるときに、HTMLとJSをどう作るか。
テキストボックスを作ります。
テキストボックスに入れた単語を、指定のパス以下にURLエンコードして展開します
テキストボックスでEnterキーを押す、もしくはsearchボタンを押すと検索のURLに移動
(KeyPressイベントを使わないのはIEとmozillaで動作が違うから)
以下、サンプルソース。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>
<script language="JavaScript">
<!--
function doSearch()
{
a=document.search.keyword.value;
coded = encodeURIComponent (a);
if(a.length>0) {
document.location='/search/' + coded;
return false;
}else{
return false;
}
}
//-->
</script>
</script>
<form name="search" onSubmit="return doSearch()">
<input name="keyword" type="text" />
<input type="button" value="search" onClick="doSearch()"/>
</form>
</body>
</html>
RESTfulなURL体系のサイトで検索機能をもたせるときに、HTMLとJSをどう作るか。
テキストボックスを作ります。
テキストボックスに入れた単語を、指定のパス以下にURLエンコードして展開します
テキストボックスでEnterキーを押す、もしくはsearchボタンを押すと検索のURLに移動
(KeyPressイベントを使わないのはIEとmozillaで動作が違うから)
以下、サンプルソース。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>
<script language="JavaScript">
<!--
function doSearch()
{
a=document.search.keyword.value;
coded = encodeURIComponent (a);
if(a.length>0) {
document.location='/search/' + coded;
return false;
}else{
return false;
}
}
//-->
</script>
</script>
<form name="search" onSubmit="return doSearch()">
<input name="keyword" type="text" />
<input type="button" value="search" onClick="doSearch()"/>
</form>
</body>
</html>
2010年08月24日
Silverlightでパラパラアニメーション、素材のY軸にオフセットを設定するには
Silverlightでキャラ表示をパラパラアニメで動かそうと思って変なところで苦戦したのでメモ。
まず、パラパラアニメを動かすにあたっては、プログラム主体のSilverlightの勉強 その4 XAMLでパラパラアニメ(Tari Lari Run)が非常に参考になりました。というかほぼそのまんまいけちゃうぐらい。
が、Silverlight初心者の自分が躓いたのは「キャラチップを、左右だけじゃなくて前後アニメも含めて1枚画像にしたい」というケース。たとえば、こちらのチップのような画像ファイルです。縦方向に32ピクセルずつオフセットできれば、1枚の画像のまま、前に歩いたり、右に歩いたりするのを切り替えられるわけです。
で、Tari Lari RunさんのサンプルでImage要素にCanvas.Top属性をつけたりとかいろいろ試したのですが、どうもうまくいかない。
ようやく気がついたのが、Imageを直接オフセットさせるのではなく、いったんCanvasでくくって、そのCanvas要素をオフセットさせるという方法。
修正前:
修正後:(↓の設定でY軸に64ピクセルずれるようになる)
これで大きな画像の任意の一部分を切り出して使うことができるようになりました。
まず、パラパラアニメを動かすにあたっては、プログラム主体のSilverlightの勉強 その4 XAMLでパラパラアニメ(Tari Lari Run)が非常に参考になりました。というかほぼそのまんまいけちゃうぐらい。
が、Silverlight初心者の自分が躓いたのは「キャラチップを、左右だけじゃなくて前後アニメも含めて1枚画像にしたい」というケース。たとえば、こちらのチップのような画像ファイルです。縦方向に32ピクセルずつオフセットできれば、1枚の画像のまま、前に歩いたり、右に歩いたりするのを切り替えられるわけです。
で、Tari Lari RunさんのサンプルでImage要素にCanvas.Top属性をつけたりとかいろいろ試したのですが、どうもうまくいかない。
ようやく気がついたのが、Imageを直接オフセットさせるのではなく、いったんCanvasでくくって、そのCanvas要素をオフセットさせるという方法。
修正前:
修正後:(↓の設定でY軸に64ピクセルずれるようになる)
これで大きな画像の任意の一部分を切り出して使うことができるようになりました。
2010年06月03日
在席状態がわかる「人感センサー SENSOR-HM/ECO」買った
Windows7の「センサーAPI」に対応したアイ・オー・データ機器「WinSensor」SENSOR-HM/ECO
を購入。
おもしろい!
どうもまだ開発用機器レベルらしく、受注生産品扱いだったり、ソフトが同梱されてなくてIOデータのサイトからシリアル番号を入力してダウンロードしたりしないといけない。
でも、ものとしてはほぼ問題なく動くみたい。

ダウンロードしたファイルを実行するとデスクトップにフォルダが作られ、必要なソフトが解凍されるので、ドライバとソフトをインストールして接続すると使えるようになります。
ちなみに64bit版と32bit版が同梱されてるので、どっちのエディションでもおっけー。
ディスプレイオフを離席から5秒、PCサスペンドを離席から1分にしてみましたが、ディスプレイオフはもうちょっと短くしてもいいかも。
センサーの指向性はけっこう強めで、横に移動したりするとあっさり離席と認識します。正面に設置しておくのがよさそう。
マニュアルによると、認識する距離は最大で約120cmとのこと。机の上に設置する分には十分な距離でしょう。個人情報を扱う端末など、オペレーターが離れたらすみやかにロック状態にしたいような端末には便利そうなデバイスですね。
標準のアプリは省電力用を想定したアプリなので、ディスプレイをオフにするだけで、2秒離席ですぐパスワードロック、というわけにはいきませんが、サンプルコードはついてきますので、スクリーンセーバーを起動する独自アプリを作るとかいろいろ手はあるんじゃないでしょうか。ちなみに開発環境はこんなだそうです。ふつうですね。


というわけで、省電力っていいよねー、と衝動買いしたわけですが、よく考えたら、こいつの購入費用(約6000円)を、節約した電気代で取り返せる日はずいぶん先のような気がしますw
おもしろい!
どうもまだ開発用機器レベルらしく、受注生産品扱いだったり、ソフトが同梱されてなくてIOデータのサイトからシリアル番号を入力してダウンロードしたりしないといけない。
でも、ものとしてはほぼ問題なく動くみたい。
ダウンロードしたファイルを実行するとデスクトップにフォルダが作られ、必要なソフトが解凍されるので、ドライバとソフトをインストールして接続すると使えるようになります。
ちなみに64bit版と32bit版が同梱されてるので、どっちのエディションでもおっけー。
ディスプレイオフを離席から5秒、PCサスペンドを離席から1分にしてみましたが、ディスプレイオフはもうちょっと短くしてもいいかも。
センサーの指向性はけっこう強めで、横に移動したりするとあっさり離席と認識します。正面に設置しておくのがよさそう。
マニュアルによると、認識する距離は最大で約120cmとのこと。机の上に設置する分には十分な距離でしょう。個人情報を扱う端末など、オペレーターが離れたらすみやかにロック状態にしたいような端末には便利そうなデバイスですね。
標準のアプリは省電力用を想定したアプリなので、ディスプレイをオフにするだけで、2秒離席ですぐパスワードロック、というわけにはいきませんが、サンプルコードはついてきますので、スクリーンセーバーを起動する独自アプリを作るとかいろいろ手はあるんじゃないでしょうか。ちなみに開発環境はこんなだそうです。ふつうですね。
主な開発ツール:
日本語版 Microsoft Visual Studio 2008 Profssional 2008 Service Pack 1
Windows Software Development Kit for Windows 7 and Windows Server 2008 R2 (x86)(English)
Windows Driver Kit for Windows 7 and Windows Server 2008 R2 (x86, x64, ia64)(English)


というわけで、省電力っていいよねー、と衝動買いしたわけですが、よく考えたら、こいつの購入費用(約6000円)を、節約した電気代で取り返せる日はずいぶん先のような気がしますw
2010年01月01日
【メモ】Windows7 64bitがブルースクリーンしまくる対応
PCをWindows7 64bitにしたのはいいけど、メモリを4GBにして以来ときどきブルースクリーンで落ちるようになったので対応をメモ。
CPU:Athlon X2 4600
M/B:ASUS A8N-SLI Deluxe
メモリモジュール: 適当に買った1GB×4枚
現象としては、ブルースクリーンで吐くコードがどうも一定しない(50とかC4とか)ので、メモリ周りがあやしいと推定。
STEP1: memtest86+ で動作確認
とりあえず1周はエラーなく完了
STEP2: BIOSの設定でMemory Remapを変更 ←今ここ
BIOSのCPUタブのDRAM Configurationを確認。RemappingオプションがHW、SWともオンになっていたので、両方ともオフにしてみた。オフにするとOSから見えるメモリ量が3GBに減った。ブルースクリーン対策として効果があるのかは不明。
というわけで、この状態でしばらく様子を見ることにします。
それにしても、64bitOSなら搭載したメモリが全部使えると思っていたのだけど、無条件ってわけじゃないんだなあ。難しい。
CPU:Athlon X2 4600
M/B:ASUS A8N-SLI Deluxe
メモリモジュール: 適当に買った1GB×4枚
現象としては、ブルースクリーンで吐くコードがどうも一定しない(50とかC4とか)ので、メモリ周りがあやしいと推定。
STEP1: memtest86+ で動作確認
とりあえず1周はエラーなく完了
STEP2: BIOSの設定でMemory Remapを変更 ←今ここ
BIOSのCPUタブのDRAM Configurationを確認。RemappingオプションがHW、SWともオンになっていたので、両方ともオフにしてみた。オフにするとOSから見えるメモリ量が3GBに減った。ブルースクリーン対策として効果があるのかは不明。
というわけで、この状態でしばらく様子を見ることにします。
それにしても、64bitOSなら搭載したメモリが全部使えると思っていたのだけど、無条件ってわけじゃないんだなあ。難しい。
2009年10月21日
Windows7発売直前でアキバがざわついて・・・なかった
仕事で移動の途中、秋葉原に立ち寄ったのですが、10月22日のWindows7発売(今夜は深夜販売イベントですね!)に向けてざわついてるかなー、と期待をしたのですが、ぱっと見、いつもどおりの秋葉原でした。
ただ、ショップのレジを見てる分には、「深夜販売に参加しますか?」「はい」てなやりとりがあったりと、DSP版の予約販売はけっこう好調っぽい。
自作支援キャラ窓辺ななみ ちゃんがtwitterでがんばってるのですが、ななみちゃんの今夜〜明朝のテンションを個人的には楽しみにしています :-)
ただ、ショップのレジを見てる分には、「深夜販売に参加しますか?」「はい」てなやりとりがあったりと、DSP版の予約販売はけっこう好調っぽい。
自作支援キャラ窓辺ななみ ちゃんがtwitterでがんばってるのですが、ななみちゃんの今夜〜明朝のテンションを個人的には楽しみにしています :-)
2009年09月17日
TDDを理解するためのまとめ@Logic Dice
テスト駆動開発の使い方で、なんとなく「ログイン処理のテスト」「位置情報の通知テスト」のような大くくりなテストばかり作っていて、「ユニットテストってもっと小さいところのテストのことらしいんだけどなー」とか思ってた。けど、開発はちゃんと進むしコードの質の担保もある程度できてるので、なんとなくこれでいいのかなあ、という感じだった。
こういうふうに、ほかにも同じようなスタイルの人がいて、きちんと文章にまとめているのを見ると安心する。まあ、ユーティリティクラスはメソッド単位のテストとか作った方がいいよ、ということらしいけど、開発を駆動するという意味ではシナリオベースの方が駆動する感はある。
TDDを理解するためのまとめ@Logic Dice
こういうふうに、ほかにも同じようなスタイルの人がいて、きちんと文章にまとめているのを見ると安心する。まあ、ユーティリティクラスはメソッド単位のテストとか作った方がいいよ、ということらしいけど、開発を駆動するという意味ではシナリオベースの方が駆動する感はある。
TDDを理解するためのまとめ@Logic Dice
この様なシンプルな記述があるとき、そのテストを見たクラスの利用者は、そのクラスの使い方を知ることができます。そう、つまりこれはクラスの使用方法を記述したマニュアルになるのです。
このシナリオから、全てのメソッドのスケルトンを自動生成することは、自分にとってはすごく自然です。最低限必要な公開すべきインタフェースを決定し、その実装を行うのですから。
逆に、このシナリオに記述できないような公開インタフェースがあれば、ほぼ間違いなくそれは公開の必要がありません。
この時点で、最低限度のテスト(シナリオテスト)が作成されます。スケルトンの自動生成直後はこれが(ほぼ)間違いなくREDです。*2
この後に実装を行い、それをGREENにします。ここまでが、シナリオテストの役目です。