2009年9月8日火曜日

美人時計をパラパラめくるツール

美人時計(bijin-tokei)の画像を順にパラパラとめくって、一気に全部見ちゃいたい人向けのツールです。
1,440枚もあので、さすがにクリックし疲れます。

時間を変更してください。
  

 
この時間を直接表示するURLはこちら
 




2009年9月7日月曜日

Flash の普及率

Flash Player 9 の国内における普及率は、2009/06 において 98.8%

参考資料(英語)
Adobe Flash Player Version Penetration


98-99%辺りで普及率の伸びが頭打ちになるのは分かるとして、
新バージョン(ver.10)をリリースした後、その普及率が毎月大きく上がってゆくのは、にわかに信じ難い...自動アップデートが期待通り機能しているのからでしょうか。

2009年9月5日土曜日

無料のJava レンタルサーバ

無料のJava ウェブ ホスティングを調査してみた。
Javaの場合、無料で使えるサーバは少ない。

共用サーバで、Java実行プロセスが共用だと、
 ・利用者毎にアプリを独立させることができない
 ・CGIみたいに高負荷なプログラム(プロセス)のみを強制終了できない
 ・Javaのスレッドを監視するフリーウェア等が無い (JMXをベースに自前構築する必要)
 ・誰かがTomcatを再起動しちゃえばみんな道連れ o(´□`*)o

低価格でプライベートJVMのプランも提供されているのに、
借りる方としても、こんな面倒な話は願い下げしたいものだが。。。今回訳あって調べてみた。


■ 無料のウェブサーバ

EatJ (米国) トライアル プラン
http://www.eatj.com
ディスク容量:50MB
プライベートJVM
6時間毎にTomcatがシャットダウンされてしまい、止まったら手動で再起動が必要。無料プランは全くのお試し用です。

FreeWebIndia (インド)
http://www.freewebindia.com
ディスク容量:5MB



他に国内にも、無料のレンタルサーバありましたよ。
システム基盤も貧相なのに、横柄な個人管理者が運用されています。
ttp://www.sousui.jp
ttp://www.hossy.flnet.org

「普通じゃない WEBスペース サービスを提供しています。」 だって
確かにインターネットに提供できるレベルじゃないですね。。



格安のJava レンタルサーバはこちら

2009年9月4日金曜日

格安のJava レンタルサーバ

低価格のJava ウェブ ホスティングも調査してみた。

共用サーバの場合、JVMのプロセスが契約者ごとに独立していないと、Javaアプリに他契約者の影響を受けてしまう。でもプライベートJVMとか、JVMの仮想化とか求めると、低価格では難しいみたいです。


MochaHost (米国) Business Plan +
http://www.mochahost.com
月額:$3.99
共用JVM

Omnicus (米国) Regular Hosting Plan
http://www.omnicus.net
月額:$4

HOST SYST (ブルガリア) Java Hosting Plan
http://hostsyst.com
月額:€5

Javaprovider (米国) Shared JVM Java Hosting Plan
http://javaprovider.net
月額:$5.95
共用JVM


MochaHostが格安ですね、実際の評価は別にして。
あと、これらの費用と別途初期設定料金が必要だったりします。


国内だとここまで安くはないですが、調べてみました。だが国内の低価格 Javaホスティングは、Java・Tomcatのバージョンが古いところがあるので要注意です。
Struts2ならば、Java 5、JSP 2.0、Servlet 2.4 以上が必要です。


株式会社EasyTone White Plan
http://www.easytone.jp
月額:¥500 (恐らく国内最安値)
JRE 1.4.2、Tomcat 5.03

ルナウェブ 共用レンタルサーバー・ヴィーナスプラン
http://lunaw.com
月額:¥790 (ただし年一括払)
JRE 1.5.0、Tomcat 5.5.9


他の国内サーバは ¥1,000を超えます。でもこの価格だといろいろ制約があります。


有限会社アキラ ミニプラン
http://www.akira.ne.jp
月額:¥1,470 (12ヶ月契約の場合)
JRE 1.4.2、Tomcat 4.1.31、Strutsは使用可能らしいが、Struts2は無理。

WISNET Expert-Lightプラン
http://www.wisnet.ne.jp
月額:¥962 (12ヶ月契約の場合)
JSPのみで、Servletには未対応らしい。


どうせ出費できるのなら内容も吟味したいです。


1stレンタルサーバー JAVAレンタルサーバー・レギュラープラン
http://java.1strentalserver.com
月額:¥2,520 (12ヶ月契約の場合)
JVM仮想化


ある程度の出費ができるならば、仮想専用サーバ(VPS)も十分出費の圏内に入るし、
自分で環境構築してしまえば、必要な機能でサーバを用意できる。
ただしroot権限が無いと駄目です。


QuickVPS プランA
http://www.quickvps.net
月額:¥550
root権限付き

日本ラッド情報サービス Osukiniサーバー
http://www.saases.jp
月額:¥980 (ただし6ヶ月一括払)
root権限付き

HOSTING & SECURITY(GMO系) VPSサーバー・10G
http://jp.webk.net
月額:¥980 (12ヶ月契約の場合)
root権限付き


サーバの電気代コストを考えると、自宅にサーバ構築するよりVPSを借りたほうが安いですね。

無料のJava レンタルサーバはこちら

2009年8月26日水曜日

Windowsのサービス・ウィンドウより、サービスを削除する。

Windows管理ツールのサービス・ウィンドウより、サービスを削除したい場合
ウィンドウからではサービスを削除できない。

サービスを削除する場合は、コマンドプロンプトより削除する。

> sc delete [サービス名]

サービス名は、サービス・ウィンドウの、
サービスを右クリックし、プロパティより確認できる。

2009年8月15日土曜日

FireFox における、CSS の ime-mode

FireFox でも、CSS の ime-mode が使えるようになった。
normalという設定は説明によると、ユーザスタイルシートで利用するそうだが、それ以外に利用方法は無いものだろうか...
disabled設定は「かな入力」設定の場合は半角カナになってしまい、password入力で使用することはできないと思われる。

# Firefox 3 の新機能
https://developer.mozilla.org/Ja/CSS:ime-mode

以下お試し入力
かな漢字入力: (ime-mode: active)
直接入力: (ime-mode: inactive)
IME無効: (ime-mode: disabled)
デフォルトの設定: (ime-mode: auto)
通常の状態: (ime-mode: normal)
未設定:

iTextで表を作成する方法

iTextを使用して、XMLに記述したレイアウト情報からPDFを出力してみた。

itext.dtd によると、table要素のdtd定義は、<!ELEMENT table (cell*)> となっているのだが、table要素とcell要素の間に、row要素が無いと正しく動作しないようだ。

Javaソース

import java.io.*;
import javax.xml.parsers.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
import com.lowagie.text.xml.*;

中略

Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
OutputStream out = new FileOutputStream("forxml.pdf");
PdfWriter pdfwriter = PdfWriter.getInstance(doc, out);

BaseFont jfont = BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);
SAXiTextHandler xmlHandler = new SAXiTextHandler(doc, null, jfont);
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
parser.parse(new FileInputStream("itext.xml"), xmlHandler);


XMLファイル

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">
<itext>
<paragraph size="10">
<phrase>iTextサンプル</phrase>
</paragraph>
<table width="100%" widths="25;25;50" columns="3" borderwidth="1.0"
left="true" right="true" top="true" bottom="true">
<row>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">id</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">名前</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">部署</cell>
</row>
<row>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">xxx</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">なまえ</cell>
<cell borderwidth="0.5" left="true" right="true" top="true" bottom="true">xxx部</cell>
</row>
</table>
</itext>

コマンドラインから、Windowsのデータソースを登録する方法

Windowsのユーザ データソースに、コマンドラインから登録するには、odbcconf コマンドが使える。
ただし このコマンドでは、データソースを削除できない。

odbcconf CONFIGDSN "Microsoft Access Driver (*.mdb)" "DSN=テストDS名;Description=DS説明;DBQ=C:\work\testdb.mdb"

odbccp32.cpl コマンドで、ODBC データソース アドミニストレータを開いて実行結果を確認できる。
コマンドではデータソースを削除できないが、ODBCCP32.dllを使えば削除できる。
なんとか自動で削除するには、Windows APIを使ってdllを呼ぶ方法になる。


#include <windows.h>
#define ODBC_ADD_DSN 1 // Add user data source
#define ODBC_CONFIG_DSN 2 // Configure (edit) user data source
#define ODBC_REMOVE_DSN 3 // Remove user data source
#define ODBC_ADD_SYS_DSN 4 // Add system data source
#define ODBC_CONFIG_SYS_DSN 5 // Configure (edit) system data source
#define ODBC_REMOVE_SYS_DSN 6 // Remove system data source

typedef long (*_SQLConfigDataSource)(long, long, char*, char*);

int main(int argc, char* argv[]) {

char driver[] = "Microsoft Access Driver (*.MDB)";
char options[] = "DSN=テストDS名";

HINSTANCE odbcdll = LoadLibrary("ODBCCP32.dll");
FARPROC proc = GetProcAddress(odbcdll, "SQLConfigDataSource");
long result = ((_SQLConfigDataSource)proc) (NULL, ODBC_REMOVE_DSN, driver, options);
FreeLibrary(odbcdll);
return 0;
}

2009年8月14日金曜日

My father is my mother.

「私の父はわがままです。」

駄洒落じゃないか。(#゚Д゚)ノ
日本ジェネリック(株)の入社試験に出題されたらしいが、一体何を期待して出題したのだろう。。

2009年8月13日木曜日

Tomcat6をWindowsのサービスに登録する方法

Tomcatが起動中、ずっとコマンドフロンプトが開いたままだと邪魔なので
Windowsのサービスに登録して、サービスで起動停止したい。

参考資料
http://tomcat.apache.org/tomcat-6.0-doc/windows-service-howto.html#Installing%20services

サービスに登録
%CATALINA_HOME%\bin\service.bat install [service_name]

サービスから削除
%CATALINA_HOME%\bin\service.bat remove [service_name]

デフォルトのサービス名は、tomcat6になる様子


サービス起動
sc start tomcat6

サービス停止
sc stop tomcat6

2009年8月12日水曜日

iBATIS ibatorConfig.xmlのclassPathEntryを相対パスで書く

相対パスで書いても、これだとあまり意味がない気がするが。。。
Eclipseの場合、eclipse.exe から辿って、JDBCドライバのパスを記述する。

.\work\eclipse\eclipse.exe
.\work\workspace\..略..\*.jar の場合、

<classPathEntry location="../workspace/Sample1/WebContent/WEB-INF/lib/mysql-connector-java-5.1.7-bin.jar" />

2009年8月11日火曜日

jasperReports detailセクションのフォントを動的に変更

フォントを動的に変更する場合は、net.sf.jasperreports.engine.JasperReportオブジェクトのgetXxxSectionメソッド等で、任意の要素を抽出してフォントを変更すればよい。

JasperReport report = JasperCompileManager.compileReport("sample.jrxml");
report.getTitle().getElementByKey("target1").setForecolor(Color.red);

この場合のjrxmlファイル記述例

<title>
<band height="10">
<staticText>
<reportElement x="0" y="0" width="100" height="20" key="target1"/>
<textElement/>
<text><![CDATA[Hello, World!]]></text>
</staticText>
</band>
</title>

ただしdetailセクションの繰り返し項目については、この方法だと任意の項目だけフォントを変更することができない。これにはパターンの数だけフォントを定義しておき、条件により使い分けることで対応できる。

この場合のjrxmlファイル記述例

<detail>
<band height="20">
<textField>
<reportElement x="0" y="0" width="20" height="20" forecolor="#000000">
<printWhenExpression><![CDATA[new Boolean($F{color}.equals("black"))]]></printWhenExpression>
</reportElement>
<textElement />
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="0" y="0" width="20" height="20" forecolor="#ff0000">
<printWhenExpression><![CDATA[new Boolean($F{color}.equals("red"))]]></printWhenExpression>
</reportElement>
<textElement><font fontName="Arial"/></textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</detail>

2009年8月10日月曜日

Struts2 アノテーションによるフォーマット

アノテーションでない場合は、Struts2のドキュメントに記載あり。
http://struts.apache.org/2.0.14/docs/type-conversion.html

アノテーションの場合、Actionクラスに記述をする。

@Conversion()
public class SampleAction extends ActionSupport {
private Date tomorrow;

public Date getTomorrow() {
return tomorrow;
}
@TypeConversion(key = "tomorrow", converter = "sample.TimeConverter")
public void setTomorrow(Date tomorrow) {
this.tomorrow = tomorrow;
}
public String execute(){
return SUCCESS;
}
}

使用したConverterは、StrutsTypeConverterを継承して作成したものです。

public class TimeConverter extends StrutsTypeConverter {

@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
return new SimpleDateFormat("HH:mm").parse(arg1[0]);
}
@Override
public String convertToString(Map arg0, Object arg1) {
return new SimpleDateFormat("HH:mm").format(arg1);
}
}

2009年8月2日日曜日

MySQLに、CSEからODBC経由で接続したときに文字化け

MySQL Connector/ODBC 5.1 を使用してCSEから接続した場合、
データベースの文字コードがUTF-8ならば文字化けしてしまう。

データベース側の設定を変更できる状況でないなら、
通常なら以下の対処を行うが、5.1コネクタだと期待通り動作しない。

CSEより、エンコードの設定を確認
show variables like 'char%';

CSEから、エンコードを変更
SET character_set_client = sjis;
SET character_set_connection = sjis;
SET character_set_results = sjis;

もしくは、クライアント側でmy.cnfファイルの設定を行う。
[odbc]
default-character-set=sjis
※Read Options From my.cnf オプションを有効にする


5.1コネクタだと、上記いずれの対応でも解決しない、
MySQL Connector/ODBC 3.51を使用すれば、上記対応は全て有効だし、
そもそも3.51コネクタならば、ODBCデータソース設定画面の
接続オプションでCharacter setの変更も可能である。

2009年8月1日土曜日

Struts2 s:ifタグの条件判定文(OGNL式)がうまくいかない場合

以下の条件判定は正しく解釈されません
<s:if test="%{#session.flag == 'Y'}">


文字列の場合は、通常ダブルクォーテーションが必要ですが、
2文字以上あれば、シングルクォーテーションでも、適当に解釈して文字列にしてくれます。

ただし、1文字の場合は明確にダブルクォーテーションで囲まないと、charになってしまうので、
注意してください。

例:シングルクォーテーション(2文字以上の場合)
<s:if test="%{#session.name == 'mofu'}">

例:ダブルクォーテーション(1文字以上の場合)
<s:if test='%{#session.flag == "Y"}'>
もしくは
<s:if test="%{#session.flag == \"Y\"}">

2009年7月17日金曜日

Jasperreportsの要素を動的に配置する。

エレメントの座標(x,y)を変更することで移動可能であるが、
setXはあるのに、setYが無い!!!

http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JRElement.html#setX(int)

何故こういう状態なのか不明だが、無いものは仕方がない。
縦方向には可能性あるだけ配置しておき、不要な要素は消すことにした。

JasperReport jasperReport = JasperCompileManager.compileReport("sample1.jrxml");
// 横移動する
JRElement element = jasperReport.getDetailSection().getBands()[0].getElementByKey("target1");
element.setX(100);

2009年7月12日日曜日

Dojo ComboBoxのstyleを動的に変更

Dojo ComboBoxのスタイルを動的に変更する方法として、
入力フィールドのスタイルシートを変更するのでは動作しない。
例として、親要素のスタイルシートを変更することで対応可能だ。

JavaScriptコード
function styleChange() {
  var comboBox= document.getElementById("comboBox1");

  // これは駄目
  comboBox.style.borderColor = "red";
  comboBox.style.borderStyle = "double";

  // これで可能
  comboBox.parentNode.parentNode.style.borderColor = "red";
  comboBox.parentNode.parentNode.style.borderStyle = "double";
}

HTMLコード
<select id="comboBox1" dojoType="dijit.form.ComboBox"
autocomplete="false" value="California">
<option selected="selected">California</option>
<option>Illinois</option>
<option>New York</option>
</select>