2009年12月21日 22:29

すべてのリクエストをトップにリダイレクトさせるhtaccessの設定

ドキュメントルートの .htaccess に以下を書く。無限ループにしないために、トップページへのアクセスはリダイレクトさせない。
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/$
RewriteRule ^.*$ / [R]
タグ:Apache Linux
カテゴリ:テック
2009/12/21 Mon 22:29 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年12月01日 22:26

Beanshellの実行をJavaから強制的に中断させる方法はないものだろうか?

以前Rhinoで探ったのと同じことをBeanshellで探したのだが、全然見つからず。

http://osdir.com/ml/java.beanshell.user/2005-02/msg00024.html
このページによるとなさそうだ。情報が古いのだが。API探しても見つからず。ここに書いてあるとおり、非推奨でいやなのだが Thread#stop() しかなさそう。

そもそもなぜ Thread#stop() が非推奨メソッドになっているのかと言えば、synchronized ブロック内でスレッドがストップしてしまった場合に、整合性のない状態のまま処理を終えてしまうのがいけないからだ。でも、スクリプトの実行で synchronized 相当を使わず、どこでも異常終了しうると考えておけば、問題ないのでは。しかもちゃんと finally ブロックは実行されるそうではないか。Rhinoのスクリプト実行を中断する方法でも、スクリプト中のどこで終了するかわからない、ということを想定しておかなければならないのは同じ。

こういう限定的な状況では、Thread#stop() は使ってもいい、ということか。
タグ:java Beanshel
カテゴリ:テック
2009/12/01 Tue 22:26 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年11月29日 15:46

特定の日に更新したファイルの一覧を表示するコマンド

例えば、24日前〜23日前に更新したファイルの一覧を表示したい場合、
find / -mtime -24 -mtime +22 -ls | less
この場合、ちょうど24日前の現在時刻よりも最近で、23日前の現在時刻よりも古い時間または23日前の現在時刻ちょうどに更新されたファイルをリスト表示する。"+22"とする必要あり。
タグ:Linux
カテゴリ:テック
2009/11/29 Sun 15:46 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年11月01日 15:49

Refererを飛ばさずにリンクする方法

Refererを飛ばさず、リンク元のページのURLを漏洩させずに外部にリンクさせる方法を模索した結果、以下の方法で成功した。

まずリンク元からジャンプ専用のページにリンクする。ジャンプ専用ページに
<script type="text/javascript">
document.write('<meta http-equiv="refresh" content="0;url=http://..../">');
のように書く。ジャンプ専用ページから瞬時に外部にページ遷移する。その際、リファラは空になる。外部ページに遷移してからブラウザの戻るでジャンプ専用ページには行かずにリンク元ページまで戻ってくれる。

と思ったら、これは Firefox 3.5 での動きで、Google Chrome 4.0 ではRefererを飛ばしていた。いろいろ試行錯誤した結果、以下の方法で Google Chrome でも同じ動きとなった。

ジャンプ専用ページを作るところまでは上記と同じで、ジャンプ専用ページに
<iframe name="f" width="1" height="1"></iframe>
<script type="text/javascript">
w = window.open("", "f");
h = "<s" + "cript type=\"text/javascript\">\n";
h = h + "window.open(\"http://..../\", \"_top\");\n";
h = h + "</s" + "cript>";
w.document.write(h);
w.document.close();
</script>
のように書く。iframeの中に親フレームから直接スクリプトを書き込み、そのスクリプトは、親フレームで外部リンク先を開く処理をする。

しかし、この方法は今度は Firefox 3.5 でRefererを送っていた。両方を満たす方法が見つからなかったので、ブラウザを判別して上記2つを使い分ければ、リンク元のページのURLを漏洩させずに外部にリンクさせることができそうだ。

いずれの方法もIE6,7,8,Operaでは未検証。

↓ここは参考になったがブラウザの情報が古かった。
http://www.teria.com/~koseki/memo/referrer/
http://qootas.org/blog/archives/2004/11/referrer.html
カテゴリ:テック
2009/11/01 Sun 15:49 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年10月18日 11:20

SeesaaブログがTwitterと連携

SeesaaブログがTwitterと連携するようになったらしい。ブログ投稿時にTwitterにも投稿。実験エントリ。
カテゴリ:テック
2009/10/18 Sun 11:20 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年10月14日 20:39

PEAR の XML_Unserializer

PEAR の XML_Unserializer で各種実験。

属性の取得。
require_once 'XML/Unserializer.php';

$data = <<
<aaa bbb="value1">
</aaa>
EOD;

$unserializer = new XML_Unserializer(array(
));
$unserializer->unserialize($data, false);
$result = $unserializer->getUnserializedData();

var_export($result);
''



属性を取得するためのオプションを追加。
require_once 'XML/Unserializer.php';

$data = <<<EOD
<?xml version="1.0" encoding="utf-8" ?>
<aaa bbb="value1">
</aaa>
EOD;

$unserializer = new XML_Unserializer(array(
	'parseAttributes' => true,
));
$unserializer->unserialize($data, false);
$result = $unserializer->getUnserializedData();

var_export($result);
array (
  'bbb' => 'value1',
)



属性と子要素がかぶっていた場合の実験。
require_once 'XML/Unserializer.php';

$data = <<<EOD
<?xml version="1.0" encoding="utf-8" ?>
<aaa bbb="value1">
	<bbb>value2</bbb>
</aaa>
EOD;

$unserializer = new XML_Unserializer(array(
	'parseAttributes' => true,
));
$unserializer->unserialize($data, false);
$result = $unserializer->getUnserializedData();

var_export($result);
array (
  'bbb' => 'value2',
)

属性は無視され、子要素のみが取得できる。



同じタグの子要素が複数ある場合の実験。
require_once 'XML/Unserializer.php';

$data = <<<EOD
<?xml version="1.0" encoding="utf-8" ?>
<aaa>
	<bbb>value1</bbb>
	<bbb>value2</bbb>
</aaa>
EOD;

$unserializer = new XML_Unserializer(array(
));
$unserializer->unserialize($data, false);
$result = $unserializer->getUnserializedData();

var_export($result);
array (
  'bbb' =>
  array (
    0 => 'value1',
    1 => 'value2',
  ),
)

配列になってしまう。1つの場合と2つ以上の場合とで配列になるかどうかが変わってしまうので、いちいち条件判定をしなくてはいけない。が、そのためのオプションがあった。
require_once 'XML/Unserializer.php';

$data = <<<EOD
<?xml version="1.0" encoding="utf-8" ?>
<aaa>
	<bbb>value1</bbb>
</aaa>
EOD;

$unserializer = new XML_Unserializer(array(
	'forceEnum' => array('bbb'),
));
$unserializer->unserialize($data, false);
$result = $unserializer->getUnserializedData();

var_export($result);
array (
  'bbb' =>
  array (
    0 => 'value1',
  ),
)


このブログエントリでGoogleのSyntaxHighlighterを使ってソースを表示しようとしたら、なぜか勝手に一部ソースコードを書き換えられていた。<<<EODの部分が原因のようだが。なので、やめた。

2009/11/01追記
<&lt; に書き換えればいい話だったので、SyntaxHighlighter復活。
タグ:PHP
カテゴリ:テック
2009/10/14 Wed 20:39 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年08月27日 23:35

Google App Engine の不可解なエラー

次にはまったエラーは、
No source code is available for type '...'

パッケージcom.xxx.yyy.clientcom.xxx.yyy.server があるとして、共通で使うクラスをそのどちらでもなく、com.xxx.yyy.share においたら、このエラーが発生した。com.xxx.yyy においてもだめである。

そのクラスを com.xxx.yyy.clientパッケージの中に移動させたら、なぜか、エラーが解消した。

参考
http://groups.google.co.jp/group/Google-Web-Toolkit/browse_thread/thread/36d292c62cb95302?fwc=1
タグ:java gwt GAE google
カテゴリ:テック
2009/08/27 Thu 23:35 | Comment(2) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年08月25日 22:34

はじめての Google App Engine

Google App Engine を初めて触ってみた。言語はJava。GWTも初めて触った。すごい。

しかし、IsSerializable ではまった。

IsSerializable を実装して、フィールドにプリミティブ型と String しか入れてないのに、RemoteService で利用しようとすると、
Type '...' was not serializable and has no concrete serializable subtypes
と出てしまう。

解決するには、デフォルトコンストラクタを作ればよいらしい。引数ありのコンストラクタのみだと、直列化できないらしい。

http://groups.google.co.jp/group/Google-Web-Toolkit/browse_thread/thread/7ae3d0fadaf0b648#fe6786b264fcc27c

直列化可能な型
・プリミティブ型:char, byte, short, int, long, boolean, float, double
・プリミティブ型のラッパークラス:Character, Byte, Short, Integer, Long, Boolean, Float, DoubleString, Date
IsSerializable を実装したユーザー定義クラス
・直列化可能な型の配列または Collection
http://www.ibm.com/developerworks/jp/opensource/library/os-ad-gwt2/#d
http://www.atmarkit.co.jp/fwcr/rensai/googlewebtoolkit03/01.html
タグ:java gwt GAE google
カテゴリ:テック
2009/08/25 Tue 22:34 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年08月25日 00:44

ディレクトリの中にあるすべての .svn ディレクトリを消す方法

svnコマンドでエクスポートすればいいのかもしれないが、svnコマンドがない場合などで、強引に消す方法。
find . -name .svn
find . -name .svn -exec rm -rf {} \;

1行目のコマンドは .svnディレクトリのリストを見る方法。
2行目のコマンドはそれらを削除する方法。
タグ:Linux
カテゴリ:テック
2009/08/25 Tue 00:44 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする

2009年08月23日 19:09

ディレクトリの中にあるすべてのディレクトリ・ファイルのパーミッションを変更する方法

サブディレクトリも含め、現在のディレクトリの中にあるすべてのディレクトリをリストアップする。
find . -type d -exec ls -ald {} \;

サブディレクトリも含め、現在のディレクトリの中にあるすべてのファイル(ディレクトリを除く)をリストアップする。
find . -type f -exec ls -al {} \;

サブディレクトリも含め、現在のディレクトリの中にあるすべてのディレクトリのパーミッションを777にしながら表示する。
find . -type d -exec chmod 777 {} \; -exec ls -ald {} \;

サブディレクトリも含め、現在のディレクトリの中にあるすべてのファイル(ディレクトリを除く)のパーミッションを666にしながら表示する。
find . -type f -exec chmod 666 {} \; -exec ls -al {} \;
タグ:Linux
カテゴリ:テック
2009/08/23 Sun 19:09 | Comment(0) | TrackBack(0) | テック | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。