关于Phonegap启动一直弹窗的问题

July 11th, 2012 by 施 常亮 | Permalink

在一次开发phonegap应用时,遇到一很纠结的问题:
问题现象是应用启动后一直弹窗,还是个死循环。
结果这个问题google了一下午又是翻墙,又是越狱的。
最后,找到原因是我错误的把android版本的cordova-1.8.1.js用到了IOS中,换成IOS版本的就好了。
写在这里给遇到这个问题的人们一个借鉴。

Phonegap 1.8.1 插件开发

July 11th, 2012 by 施 常亮 | Permalink

最近因为工作需要在使用Phonegap开发收益应用,在开发过程中需要开发一个自己的插件。
google一通,然后自己尝试写了个demo下面视具体步骤。
以下的步骤是建立在已按照Phonegap的向导创建了工程模版的基础上完成的。
Read the rest of this entry »

回归自我

July 4th, 2012 by 施 常亮 | Permalink

认为这样是一种成就;
认为这样是自己的事业;
认为这样是即将的希望;
认为这样是实现理想的途径;
Read the rest of this entry »

AS3 API for flex, flash, AIR

April 10th, 2011 by 施 常亮 | Permalink

开发过程中使用API可以节省时间,这里有几十个API,它们可以在Flex, Flash和AIR中使用。
Read the rest of this entry »

Tomcat管理自定义的线程的关闭与启动

December 27th, 2010 by 施 常亮 | Permalink

如果希望在tomcat服务器启动时启动自己定义的线程如webgame的socket监听线程,关闭tomcat服务器是关闭这个线程。我们就需要自定一个Servlet或者是Listener来管理自己的线程。
管理的方式主要是在Servlet的init方法中启动自定义的线程,而在destroy方法中进行关闭。
如果使用Listener来管理的话就需要分别在contextInitialized与contextDestroyed方法中来处理自定义线程的启动与关闭。
下面我们通过具体代码来讲解具体的应用,我的demo使用的是Listener方式管理。
1.自定义一个Listener类。

public class ServerSocketListener implements ServletContextListener {
private ServerMain s;

public void contextInitialized(ServletContextEvent event) {
s = new ServerMain();
s.startServer();
}
//tomcat关闭时,关闭线程,释放端口
public void contextDestroyed(ServletContextEvent event) {
s.stopServer();//停止线程
System.exit(0);//关闭当前的jvm
}
}

2.在web.xml中配置这个监听。

Socket服务随web启动而启动
com.eunut.servlet.ServerSocketListener


就这样就可以通过tomcat的启动与关闭来控制你自定的线程随着应用服务器的操作味儿关闭或启动。

ubuntu下tomcat安装并添加自启动

December 19th, 2010 by 施 常亮 | Permalink

安装个tomcat用了一天的时间这是郁闷,之前的安装总是随着ssh等链接工具的算开而断开,在网上搜索多方法,进行疯狂的实验,结果都是以失败告终,最后跑的老外的网站上逛了一圈,发现了一个操作步骤比较全的处理方法,其实这个方法之前也有试验过,结果是大家转载的过程中,造成有些步骤不是很准确,特此翻译过来做个备份,也希望能给遇到同样问题的人一个帮助。
1.安装Tomcat

使用如下命令下载tomcat linux版本。
wget http://apache.mirrors.timporter.net/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz

使用 ‘tar’ 命令解压压缩包:
tar -xzvf apache-tomcat-6.0.20.tar.gz
执行如下命令将解压出文件移到 /usr/local/ 并命名为tomcat
sudo mv apache-tomcat-6.0.20 /usr/local/tomcat

创建tomcat的自启动文件:
sudo vi /etc/init.d/tomcat
添加如下脚本到tomcat中:
# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun #更改为适当的java_home路径

case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0
If you installed OpenJDK instead of Sun Microsystem’s Java, the export JAVA_HOME line should read:
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
Now make the script executable:
sudo chmod +x /etc/init.d/tomcat
Finally, create symbolic links in the startup folders:
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
到此为止你的tomcat就会随着你的系统启动而启动,关闭而关闭。

在接下来的操作中你就可以使用 start, stop, or restart, 如下:
sudo /etc/init.d/tomcat start
sudo /etc/init.d/tomcat stop
sudo /etc/init.d/tomcat restart
来控制你的tomcat启动/关闭/重启

Ubuntu下MySQL安装小记

December 15th, 2010 by 施 常亮 | Permalink

1、下载

mysql-standard-5.0.27-linux-i686.tar.gz

2、增加mysql用户

groupadd mysql
useradd -g mysql mysql

2、安装配置

tar -zxvf mysql-standard-5.0.27-linux-i686.tar.gz
cp -r mysql-standard-5.0.27-linux-i686 /usr/local/mysql
cd /usr/local/mysql
mkdir etc
cp support-files/my-medium.cnf etc/my.cnf
chown -R root .
chgrp -R mysql .
chown -R mysql data
scripts/mysql_install_db –user=mysql

3、启动mysql

su – mysql
/usr/local/mysql/bin/mysqld_safe &

4、初始化root密码

回车
exit
cd bin
./mysql -uroot
mysql> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpwd’);

5.授权
grant all privileges on *.* to test@”%” Identified by “password”;

6、停止MySQL

./mysqladmin -uroot -p shutdown

7、添加mysql开机启动

把/usr/local/mysql/support-files/my.server 复制到/etc/init.d/mysqld

执行

sudo update-rc.d mysqld defaults

把mysqld加入到服务中,重新启动机器即可

Ubuntu下通过Sun网站提供的自解压包进行手动的安装

December 15th, 2010 by 施 常亮 | Permalink

通过Sun网站提供的自解压包进行手动的安装

这种方式显然有它的好处: 可自由选择JDK版本,能进行灵活的配置。其实JDK的配置是很简单的:能让系统找到JDK所在的目录(JAVA_HOME),以便调用其目录中bin目录下的相关命令脚本。

在此以Ubuntu7.10系统,Sun JDK 6.0 update 4为例说明一下具体的安装方式:

2.1. 从Sun站点下载jdk 6.0.4的Linux自解压文件 jdk-6u4-linux-i586.bin;

2.2. 安装配置

cd /usr/local/lib
sudo cp /home/jdk-6u4-linux-i586.bin ./
sudo chmod +x jdk-6u4-linux-i586.bin
sudo ./jdk-6u4-linux-i586.bin
执行最后一步命令后便在当前目录下多了一个“jdk1.6.0_04“的目录,里面是jdk-6u4-linux-i586.bin解压后JDK的全部文件;
由于Ununtu本身带了gij的JVM实现,所以当你在Terminal输入: “java -version”时会显示:
java version “1.5.0”
gij (GNU libgcj) version 4.2.1 (Ubuntu 4.2.1-5ubuntu5)
的相关信息。也就是系统中有两个JVM实现,而且gij JVM还被其它的Ubuntu工具或软件使用;所以这种情况下就得使用 Debian提供的“update-alternatives“工具来完成程序多版本实现的选择了:
sudo update-alternatives –display java
发现系统只列举了gij JVM;因为jdk6是通过手动解压安装的。
现在输入下面的两行命令:
sudo update-alternatives –install /usr/bin/java java /usr/local/lib/jdk1.6.0_04/bin/java 60
sudo update-alternatives –install /usr/bin/java java /usr/bin/gij-4.2 40
注意1,2行尾的60,40是优先级;现在把JDK6设为了首选;
输入: ls -l /etc/alternatives/java 发现JVM已经指向了jdk6的解压目录:
lrwxrwxrwx 1 root root 35 2008-01-25 17:55 /etc/alternatives/java -> /usr/local/lib/jdk1.6.0_04/bin/java

cd /usr/bin
sudo cp java java.bak
sudo ln -sf /etc/alternatives/java .

现在再执行:
java -version

java version “1.6.0_04”
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

若想变更JVM实现,输入:
sudo update-alternatives –config java
进行配置;

2. 3. 设置环境变量

在/etc/profile中加入如下的内容:

JAVA_HOME=/usr/local/lib/jdk1.6.0_04
JRE_HOME=/usr/local/lib/jdk1.6.0_04/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export JAVA_HOME JRE_HOME CLASSPATH

okey, JDK安装配置完成。

Flex监听Java服务端推送的数据应用DEMO

November 26th, 2010 by 施 常亮 | Permalink

因为需要今天研究了一下Flex接收Java端推送的数据,以前做过相应的配置,但是今天在此操作时发现忘得一干二净。好记性不如烂笔头子,所以还只记下来的说。。。。
第一步:首先,创建一个Java web工程将BlazeDS相关包加到工程中接下来配置services-config.xml文件。

在services-config.xml中添加如下代码:

然后配置messaging-config.xml文件。



true
.


配置方法是在messaging-config.xml中添加如下代码:(代码中配置说明如果有疑问还请大家Google吧。。。哈哈)


0

10

5000



第二步:编写服务端代码。

好的配置信息完毕开始写代码。我们需要创建一个实体类用来同步Flex与Java数据类型。

Tick.java

package com.eunut.vo;
import java.math.BigDecimal;

public class Tick {

private String seqno;

public String getSeqno() {
return seqno;
}

public void setSeqno(String seqno) {
this.seqno = seqno;
}
}

因为是测试DEMO所以只写了一个属性

然后编写一个Servlet

package com.eunut.servlet;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.eunut.vo.Tick;

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;

public class TickCacheServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
private static FeedThread thread;

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

String cmd = req.getParameter("cmd");
if (cmd.equals("start")) {
start();
}
if (cmd.equals("stop")) {
stop();
}
}

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doGet(req, resp);
}

public void destroy() {
super.destroy();
}

public void init() throws ServletException {
super.init();
}

public void start() {
if (thread == null) {
thread = new FeedThread();
thread.start();
}
System.out.println("start!!");
}

public void stop() {
thread.running = false;
thread = null;
}

public static class FeedThread extends Thread {

public boolean running = true;

public void run() {
MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
String clientID = UUIDUtils.createUUID();
int i = 0;
while (running) {
Tick tick = new Tick();
tick.setSeqno(String.valueOf(i));
System.out.println(i);

AsyncMessage msg = new AsyncMessage();
msg.setDestination("tick-data-feed");
msg.setHeader(AsyncMessage.SUBTOPIC_HEADER_NAME, "tick");
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(tick);
msgBroker.routeMessageToService(msg, null);
i++;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
}

第三步:编写客户端代码。

客户端简单请见代码:
Tick.as

package com.eunut
{
[RemoteClass(alias="com.eunut.Tick")]
[Bindable]
public class Tick
{
public function Tick()
{
}
public var seqno:String;

}
}

主应用:


第四步:测试码。

首先运行客户端,点击按钮初始化消费者监听。

然后请求Servlet开启数据生产。方法是请求/TickCacheServlet?cmd=start

OK我们在客户端会看见标签上的数字会不断变大。

先写到这,回家。。。。

一个收集了多种游戏特效的网站

November 24th, 2010 by 施 常亮 | Permalink

发个游戏特效的收集网站

http://www.themysticalforestzone.com/sprites/SFX_items_tutorials/SFX.htm

如果做游戏的朋友正在为游戏特效发愁时不妨到此处看看这些特效,希望能帮到你们。。。