hikkisanの日記 このページをアンテナに追加 RSSフィード

2011-10-21 struts2 + ovalでskipvalidationを使う

| 15:08 | ■を含むブックマーク ■のブックマークコメント

strtus2のデフォルトValidationであるConnvertionパッケージ以下を使用した場合、SkipValidationアノテーションが使える。

が、ovalでは使用できない。(使用できるかも知れませんが、ちょっと調べただけでは分からずじまい)

これに不便を感じ、SkipOvalValidationなるものを作成し使用した。

@SkipOvalValidation

package org.framework.ext.oval.validation;

import static java.lang.annotation.ElementType.METHOD;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target(METHOD)
public @interface SkipOvalValidation {
}

OvalAnnotationValidationInterceptor

package org.framework.ext.oval.validation;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;

import org.apache.struts2.oval.interceptor.OValValidationInterceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.util.AnnotationUtils;

public class OvalAnnValidationInterceptor extends OValValidationInterceptor{

	protected String doIntercept(ActionInvocation invocation) throws Exception {
		if (checkSkipValidation(invocation))
			return invocation.invoke();
		return super.doIntercept(invocation);
	}

	protected boolean checkSkipValidation(ActionInvocation invocation) throws Exception {
		Object action = invocation.getAction();
		if (action != null) {
            Method method = getActionMethod(action.getClass(), invocation.getProxy().getMethod());
            Collection<Method> annotatedMethods = AnnotationUtils.getAnnotatedMethods(action.getClass(), SkipOvalValidation.class);
            if (annotatedMethods.contains(method))
                return true;
            //check if method overwites an annotated method
            Class clazz = action.getClass().getSuperclass();
            while (clazz != null) {
                annotatedMethods = AnnotationUtils.getAnnotatedMethods(clazz,  SkipOvalValidation.class);
                if (annotatedMethods != null) {
                    for (Method annotatedMethod : annotatedMethods) {
                        if (annotatedMethod.getName().equals(method.getName())
                                && Arrays.equals(annotatedMethod.getParameterTypes(), method.getParameterTypes())
                                && Arrays.equals(annotatedMethod.getExceptionTypes(), method.getExceptionTypes()))
                            return true;
                    }
                }
                clazz =  clazz.getSuperclass();
            }
        }
		return false;
	}
	 protected Method getActionMethod(Class actionClass, String methodName) throws NoSuchMethodException {
	        Method method;
	        try {
	            method = actionClass.getMethod(methodName, new Class[0]);
	        } catch (NoSuchMethodException e) {
	            try {
	                String altMethodName = "do" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);
	                method = actionClass.getMethod(altMethodName, new Class[0]);
	            } catch (NoSuchMethodException e1) {
	                // throw the original one
	                throw e;
	            }
	        }
	        return method;
	    }
}

strtus.xml

<package name="ann-oval-default" extends="struts-default">
           <interceptors>
               <interceptor name="annOvalValidation" class="org.framework.ext.oval.validation.OvalAnnValidationInterceptor" />
               <interceptor-stack name="ovalAnnotaionStack">
               	   <interceptor-ref name="autowiring" />
                   <interceptor-ref name="exception"/>
                   <interceptor-ref name="alias"/>
                   <interceptor-ref name="servletConfig"/>
                   <interceptor-ref name="i18n"/>
                   <interceptor-ref name="prepare"/>
                   <interceptor-ref name="chain"/>
                   <interceptor-ref name="debugging"/>
                   <interceptor-ref name="profiling"/>
                   <interceptor-ref name="scopedModelDriven"/>
                   <interceptor-ref name="modelDriven"/>
                   <interceptor-ref name="fileUpload"/>
                   <interceptor-ref name="checkbox"/>
                   <interceptor-ref name="staticParams"/>
                   <interceptor-ref name="actionMappingParams"/>
                   <interceptor-ref name="params">
                       <param name="excludeParams">dojo\..*,^struts\..*</param>
                   </interceptor-ref>
                   <interceptor-ref name="conversionError"/>
                   <interceptor-ref name="annOvalValidation">
                       <param name="excludeMethods">input,back,cancel,browse</param>
                   </interceptor-ref>
                   <interceptor-ref name="workflow">
                       <param name="excludeMethods">input,back,cancel,browse</param>
                   </interceptor-ref>
               </interceptor-stack>
           </interceptors>
    </package>

TestAction

@Namespace("/")
@ParentPackage("ann-oval-default")
@InterceptorRefs({
	@InterceptorRef(value="ovalAnnotaionStack")
})
@Results({
	@Result(name="success" ,  type="dispatcher" , location="success.jsp")
})
public class TestAction extends ActionSupport {
        @NotEmpty
	private String name;
	
	@SkipOvalValidation
	public String sayName() {
		return "success";
	}
	
	public String checkName(){
		return "success";
	}
	
	public String execute() {
		return "success";
	}
}

success.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="windows-31j"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<s:form>
	<s:fielderror></s:fielderror>
          name:<s:input name="name" />
          <s:submit action="input" method="sayname" value="sayname(skip)"></s:submit>
          <s:submit action="input" method="check" value="check"></s:submit>
          </form>
</body>
</html>

見てわかるように、org.apache.struts2.interceptor.validationの中身を少しアレンジしただけ。

struts-ovalプラグイン担当に提案した方がいいのかなぁ。。。

2011-10-08 システムアーキテクトの午後問題(I)は得べし

 システムアーキテクトの午後問題(I)は得べし

| 10:40 |  システムアーキテクトの午後問題(I)は得べしを含むブックマーク  システムアーキテクトの午後問題(I)は得べしのブックマークコメント

次週のシステムアーキテクトの為に昨日からシャカリキに勉強しているが、いま非常に後悔している。


今から来週まで参考書の問題全てを解答出来いからだ。

なぜなら、午後問題(I)に様々な業種のシステムが単純化され、開発の問題として提示されており、各場面(企画、開発、運用、等々)に触れる事が出来るからだ。

これは、ソフトウェアアーキテクトは、改修・新規構築システムを適切にモデリングし、関係者に対しそのモデルに対する回答責任がある。と思っている私のような輩には非常に痛い。*1


そして、もうひとつは、「論文」が思ったより書けないからだ。。。。


*1.試験が終わっても、参考書とけばいいじゃん!って思うかも知れませんが、教科書が嫌いな人にとって問1..Nを解答するのは、リリース日が必要なのです(はははぁ〜。。。)


ソフトウェアアーキテクトが知るべき97のこと

ソフトウェアアーキテクトが知るべき97のこと

2011-08-08 Mysql Access denied for userにはまった このエントリーを含むブックマーク このエントリーのブックマークコメント

RedMineCentOS(Vm)にインストールしようと、Mysql5.5をセットアップ。

RedMindMineのテーブルを作成しようとすると「 Access denied for user 」が出てしまう。。。。

てか、mysql -u user_redmine -p を打ち込んでも「 Access denied for user」が。。。

仕方ないから、/var/lib/mysql以下を全て消して、Mysqlクリーンインストール + サボってた「mysql_secure_installation」を実行。

すると、無事解決!!。Mysqlインストールしたら、とりあえず、

1.my.cnfにutf8を追加

2.mysql_secure_installation

をしておけばいいのか?てか「mysql_secure_installation」はrootユーザのコントロールと匿名ユーザのブロックしか設定しないと思っていただけに、

原因が分からず気持ち悪い。

本当は調べたいけど、忙しいからまあいいや。

2011-07-22 Eclipse3.7(64bit) Indigoを日本語で使う

Eclipse64bitはいい感じ

| 01:56 |  Eclipse64bitはいい感じを含むブックマーク  Eclipse64bitはいい感じのブックマークコメント

最近、Androidのソフトを作るのにはまっています。GPSを使ったアプリ開発とか、モーションセンサーとか面白すぎです。

ただ、画面をプレビュー&開発できるGraphical Layoutのところでメモリーが足りなくてよく落ちてしまう。。。Eclipse 32bitなので、ヒープを1024Mしか確保できるのですが、それではまったく歯がたたないらしい。

なので、win7 64bit力を借り、メモリーいっぱい確保しましょう。という魂胆。

以下のようにしたら、一応何も問題なく動いたので、一応展開します。

*試すのは、自己責任で。

1.以下のサイトからjdk ver6,64bitを落とし、インストール

http://www.oracle.com/technetwork/java/javase/downloads/index.html

2.以下のサイトからEclipse3.7を落とし、解凍

 (私は、Eclipse IDE for Java EE Developers)を選択

http://www.eclipse.org/downloads/

3.Pleiadesから、JREなしのEclipseを落とし、解凍

 (私は、Javaを選択)

http://mergedoc.sourceforge.jp/index.html#/pleiades.html

4. 2.で解凍したEclipseが起動するか確認し、起動したら閉じる。

5. 3.で解凍したEclipseにある「dropins」フォルダを2.で解凍したフォルダに上書きする。

6. 起動できるか確認。

7. 2.で解凍したフォルダにあるeclipse.iniの末尾に「-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar」を入れる。

ちなみに、今回の目的であるメモリー拡大大作戦のため、以下のようにeclipse.iniを編集した。


-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
512m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms1024m
-Xmx2048m
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

8.Eclipseを起動する。

9.今まで使用していたEclipseプラグインインストールするため、ファイル->インポート->インストール->既存インストールからを選ぶ。

10.インポートダイアログの「元のアプリケーションインストール」に今まで使用してたEclipseインストール(展開)フォルダを指定する。

11.一覧が表示されたら、いるものをチェックし、インストールする。

 (ちなみに私は、Androiodの開発系とPython系の開発、javaのテストをインストールGoogle Apps Engineはインストールできなかったため、別途インストールした。)

12.終了。

以上です。画像なしでわかりづらいですね。。面倒なんです。。。ごめんなさい。

某大院生某大院生 2011/08/03 23:14 お陰さまでEclipse3.7(64bit) Indigoを日本語で使うことができるようになりました。
ありがとうございました!

2011-05-18 新世界よりは凄い

 新世界よりは凄い

| 23:12 |  新世界よりは凄いを含むブックマーク  新世界よりは凄いのブックマークコメント


この本は凄い。1000年後の世界は「呪力」をもった超能力者(人間)が支配し、その持つ力は1人1人が核兵器レベルという非現実世界。

それに、人間が持っている支配欲等々の恐ろしさと神に近い存在であり、1000年たってもそれを受け止めるきれない社会システムとその歴史。という非現実的だけど、どこかあり得そうな話が見事に描かれていて、グイグイ引き込まれる。一気読みしそうになるが、所々で考えさられ、迷ってしまう。そして、最後の落ちが本当に恐ろしい。

宮崎はやおのような「アニメ」で映画化してほしい。いや、この世界観を「グロ」無しで描くのは駄目だと思うから無理か。。。

「グロ」が大丈夫な人は絶対にお勧めできる本。読まないと損です。

新世界より(上) (講談社文庫)

新世界より(上) (講談社文庫)

新世界より(中) (講談社文庫)

新世界より(中) (講談社文庫)

新世界より 下

新世界より 下

2011-04-22 さくらVPSのssh設定にはまった このエントリーを含むブックマーク このエントリーのブックマークコメント

さくらVPSsshRSA暗号による公開鍵方式を使いログインしようとしたらエラーでこけた。

/var/log/secureログには「ssh_rsa_verify: RSA modulus too small」とでていた。

Poderosaで768bitのOpenSSH公開鍵を生成しているので、smallと言われても。。。と調査もせずに試しに1024bitで入れなおしてみた。

すると見事にログイン成功!。。。

なぜだろう??

2011-02-26 ソーシャルネットワーク観てきた

 ソーシャルネットワーク観てきた

| 23:38 |  ソーシャルネットワーク観てきたを含むブックマーク  ソーシャルネットワーク観てきたのブックマークコメント

視点がFacebookソーシャルネットワークに向けられておらず、「マーク・ザッカーバーグ」の映画用に誇張された?性格に視点が当てられている。

Facebookのサービスに視点が当てられたものを読みたいときは、以下の本の方がいい。

うえの本の(一部が)面白いと感じた人は以下の本もお勧め

2010-10-10 面白い一局

清水市代女流王将 vs あから2010

| 21:01 | 清水市代女流王将 vs あから2010を含むブックマーク 清水市代女流王将 vs あから2010のブックマークコメント


将棋好きであり、将棋対戦ソフト(弱小)を作った自分にとって、今回の対戦は対戦結果だけを求める一般の方よりも関心を持って観ていました。

関心の対象としては、結果としてどちらが勝つか、どんな手を指しあうかと言った今回だけの関心事も勿論あります。

ただ、今回のような場でのコンピュータ側勝利によって、「将棋に携わる人」、「コンピュータ将棋に携わる人」、「これから両者どちらか、もしくはどちらにも携わろうとする人」への影響とその影響から今後これらの人、これらの人が所属しているコミュニティはどうなるのか?

といったところにもまた面白みがあると感じさせてくれる一局でした。

そんな、へんちくりんな感想を持ったわけですが、「真剣勝負面白かった」の一言に尽きます。今回の対局を用意して下さった関係者、あから2010開発者みなさん、そして清水市代女流王将。本当にお疲れ様でした。これからも面白い一局の提供をお願いします。


Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)

Java将棋のアルゴリズム―アルゴリズムの強化手法を探る (I・O BOOKS)

2010-10-07 Win7 64bitでSSDに移行

Win7 64bitでHDD(120G)→SSD(64G)に移行

| 21:17 | Win7 64bitでHDD(120G)→SSD(64G)に移行を含むブックマーク Win7 64bitでHDD(120G)→SSD(64G)に移行のブックマークコメント

この頃、HDDの調子がおかしいため、思い切ってSSDに移行した。

下記の環境においてフリーソフトのみで移行、および、空き容量を限界まで詰めたパーティション操作を断行した方が見られなかったので、とりあえずまとめておく。

注意!!

OS再起動しなくなる恐れが高い操作なので、初心者にはお勧めできません。また、下記方法で何か問題が起きても責任取れません。自己責任でお願いします.....

■環境

OS:Windows7 Ultimate 64bit

移行元HDD容量:500G Sage

移行元パーティション容量:120G(使用容量:80G)

移行先SSD:64G



■使用ソフト

パーティション編集: MiniTool Partition Wizard Home Edition

HDD移行:EASEUS DISK COPY


■効果

・リコンパイル、起動、補間もっさりEclipseがきびきびEclipseに(笑)

・あらゆるソフトの起動が兆速。

1CPU→2CPUにした時と同じ感動を味わえた(適当)


■移行手順

0.SSDをフォーマット

→60Gとなり、目標値が設定される。

1.ありとあらゆる不要なソフト、データを削除 or 他のHDDに退避する。

  →削除目標が後5G〜10Gぐらいなら、hiberfil.sysとpagefile.sysを削除する(後で戻しましょう)削除方法は

   ・[hiberfil.sys]管理者のコマンドプロンプトで、

>powercfg.exe /hibernate off

・[pagefile.sys]コンピュータを右クリック→プロパティ、左メニューのシステム詳細設定→詳細設定タブのパフォーマンスのところの設定→パフォーマンス→仮想メモリ→数値を変更→保存→再起動

2.デフラグをかける

3.MiniTool Partition Wizard Home EditionからMove/Resizeでサイズを変更(縮小)Applayで反映する。

4.再起動出来るか一応確認

5.EASEUS DISK COPYの入ったCDをトレイに入れ、再起動

6.コピーして終わり


■最後に

SSD最高!!!

あっ、でも環境が3年前ぐらいのものだからRead 260Gしか出ない.悲しい......

2010-09-17 IE9βを入れてみた

IE9βを入れてみた

| 13:15 |  IE9βを入れてみたを含むブックマーク  IE9βを入れてみたのブックマークコメント

IE9を入れ、色々なページにアクセス

うん、速い。Ramdisk CacheのFirefox3.6より速いのでは。それに安定もしている。

JS関係の開発もやりやすくなってるし、これは良い。

IE5時代からIEを試してきたが、9が一番完成度が高いのでは。

ただ、解せないのはページにアクセスした時に出る(かっち)という音がなくなった点。

好きだったのにー...