2021年7月30日 星期五

City Takeover - Android Game

City Takeover
Welcome to the City Takeover, is a free and easy game for everyone. No more boring like the usual tower defense games. Enjoy to challenge different level. Goal of City Takeover is to takeover all buildings in the city. Features: ● Challenging levels. ● Easy & Fun to play. ● Pause it whenever you want. ● Well-designed challenging levels ● Auto-save, continue playing where you left off. Why City Takeover: ● Train your brain. ● You can play City Takeover offline. ● Improves focus, attention and concentration.


2010年3月11日 星期四

Direct Web Remoting(DWR)简介

DWR可以在Web Application上直接处理XMLHttpRequest,因此你可以在 有的架构下利用DWR来产生Ajax的
效果。而且DWR非常简单,只要再web.xml加入DRW的Servlet并新增一个dwr.xml的设定档。就可以直接在Client端
利用Javascript直接唿叫Server端的Java方法。
以下建构一个简单的例子,在Client端输入一串字串,Servler端在收到这一个字串后,回传Client端输入的字串并回传
Server端目前系统时间。


1. 下载dwr.jar档。


2. 在web.xml加入DRW的Servlet。
<servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>
            org.directwebremoting.servlet.DwrServlet
    </servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>


3. 在WEB-INF下新增一个dwr.xml的设定档。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
    <allow>
        <create creator="new" javascript="AjFuns">
            <param name="class" value="tw.nicky.dwr.AjaxFunctions"/>
       </create>
    </allow>
</dwr>



4. 建立AjaxFunctions.class(此类别就是用户端要唿叫的类别)
package tw.nicky.dwr;
import java.util.Date;
public class AjaxFunctions {
    public String getEchoTime(String msg) {
        String result = "";
        result = result + "your input: "+msg+" ";
        result = result + "server time: "+new Date();
        return result;
    }
}




5.最后建立呈现在用户端的网页()
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>dwr_example</title>
        <script type='text/javascript' src='dwr/interface/AjFuns.js'></script>
        <script type='text/javascript' src='dwr/engine.js'></script>
        <script type='text/javascript'>
            function getEchoTime(){
                var msg = document.getElementById("msg").value;
                AjFuns.getEchoTime(msg,function(ret){
                    document.getElementById("results").innerHTML = ret;
                });

            }
        </script>
    </head>
    <body>
        <input type="text" id="msg">
        <input type="button" value="确定" onClick="getEchoTime()">
        <div id="results">
        </div>
    </body>
</html>


Java keytool 基本指令介绍

1. 匯入凭证到keystore
      keytool –import –alias xxx –file xxx.cer –keystore .keystore

2. 查询keystore的内容
      keytool –list –v –keystore .keystore

3. 删除keystore内的其中一个凭证
      keytool –delete –alias xxx –keystore .keystore

4. 产生金錀对(RSA为非对称加密的演算法)
      keytool -genkey -alias xxx -keyalg RSA -keystore .keystore

5. 产生凭证申请档
      keytool -certreq -alias xxx -file certreq.txt -keystore .keystore

6. 查询PKCS12类型keystore的内容
      keytool –list –v –keystore .keystore -storetype pkcs12

7. 建立一个含有私钥的keystore
      keytool -genkey -alias keyAlias -keyalg RSA -keystore keystore.jks

8. 修改keystore的密码
      keytool -storepasswd -new newPassword -keystore keystore.jks


Direct Web Remoting(DWR) - Reverse Ajax

1. 要使用DWR Reverse Ajax需先指定参数activeReverseAjaxEnabled为true。

<servlet>
   <servlet-name>dwr-invoker</servlet-name>
   <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
   <init-param>
     <param-name>debug</param-name>
     <param-value>true</param-value>
   </init-param>
   <init-param>
     <param-name>activeReverseAjaxEnabled</param-name>
     <param-value>true</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>

2. 在要使用DWR Reverse Ajax的页面(reverseAjax.jsp)加入以下设定。

<!-- DWR相关的Javascript -->
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<!-- 页面载入时,即建立ReverseAjax连线 -->
<body onload="dwr.engine.setActiveReverseAjax(true);">
<!-- 从Server push回来的内容 -->
<span id="show"></span>


3. 触发要回传资料给Client端的Servlet。

ServerContext wctx = ServerContextFactory.get(this.getServletContext());
//取得要触发的页面
Collection sessions = wctx.getScriptSessionsByPage("/reverseAjax.jsp");
Util utilAll = new Util(sessions);
//设定回传的内容,并指定放到DOM的哪个id内
utilAll.setValue("show", "这是Server回传的资料");


Java Base64 Encode & Decode(编码和解码)

1. 下载所需的Jar档。(这里我们是使用Apache的commons-codec套件)

2. import org.apache.commons.codec.binary.Base64;

3. 使用Base64 Class进行编码与解码
Base64 base64 = new Base64();
//使用Base64进行字串编码
String encodeString = new String(base64.encode("This is source string.".getBytes()));
//输出结果将为"VGhpcyBpcyBzb3VyY2Ugc3RyaW5nLg=="
System.out.println(encodeString);
//使用Base64进行字串解码
String decodeString = new String(base64.decode(encodeString.getBytes()));
//输出结果将为"This is source string."
System.out.println(decodeString);


Java keytool 基本指令介绍

1. 匯入凭证到keystore
      keytool –import –alias xxx –file xxx.cer –keystore .keystore

2. 查询keystore的内容
      keytool –list –v –keystore .keystore

3. 删除keystore内的其中一个凭证
      keytool –delete –alias xxx –keystore .keystore

4. 产生金錀对(RSA为非对称加密的演算法)
      keytool -genkey -alias xxx -keyalg RSA -keystore .keystore

5. 产生凭证申请档
      keytool -certreq -alias xxx -file certreq.txt -keystore .keystore

6. 查询PKCS12类型keystore的内容
      keytool –list –v –keystore .keystore -storetype pkcs12

7. 建立一个含有私钥的keystore
      keytool -genkey -alias keyAlias -keyalg RSA -keystore keystore.jks

8. 修改keystore的密码
      keytool -storepasswd -new newPassword -keystore keystore.jks


Java - 使用iText输出pdf档(一) Hello world范例

1. 下载iText Jar档

2. Hello world范例。
FileOutputStream fos = new FileOutputStream(new File("C:/Hello world.pdf"));
//建立一个Document物件,并设定页面大小及左、右、上、下的边界
Document document = new Document(PageSize.A4, 10, 20, 30, 40);
//设定要输出的Stream
PdfWriter.getInstance(document, fos);
document.open();
//设定作者
document.addAuthor("Author");
//设定建立者
document.addCreator("createor");
//设定主题
document.addSubject("subject");
//设定标题
document.addTitle("title");
//设定建立时间(为当下时间)
document.addCreationDate();

document.add(new Phrase("Hello world\n"));

document.close();