跳至主要内容

博文

近期关注的编辑器

最近装了个Ruby,顺便也用了用它自带的一个编辑器 SciTE 。虽然UI看起来有点质朴,不过功能还是挺不错的。 同事推荐 Notepad++ ,据说也是一个免费的开源工具,运行在Windows上的速度很快。看了一下官方主页,这个工具使用了Win32 API和STL来编写,因此运行速度很快,而且编译出来的二进制代码比较小。 后来发现,这两个编辑器都是基于 Scintilla 组件所编写的。这是一个很不错的editing component,支持Win32和GTK+。

MySQL JDBC 连接超时问题

MySQL提供的JDBC驱动程序Connector/J在8小时之后会自动超时断开,这样会影响到连接池或是其它直接访问JDBC的程序(如JSP、Servlet等)。 有一种解决方法是在连接URL中设置autoReconnect参数,或是在连接池中处理connection的state。 第二种解决方案主要是依赖于SQLException中可以获得的SQLState,是在Java代码中捕获异常并在try-catch中尝试re-connect。MySQL实现中,"08S01"表示的是在处理query的时候遇到了网络连接问题,而40001表示的是遇到了死锁。 try { // ... } catch (SQLException sqlEx) { // // The two SQL states that are 'retry-able' are 08S01 // for a communications error, and 40001 for deadlock. // // Only retry if the error was due to a stale connection, // communications problem or deadlock // String sqlState = sqlEx.getSQLState(); if ("08S01".equals(sqlState) || "40001".equals(sqlState)) { retryCount--; } else { retryCount = 0; } } 参考资料: http://forums.mysql.com/read.php?39,112048,112146#msg-112146 http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem-24-4-5-3-4 http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-pr...

Java Obfuscator

不做JavaME的Java程序员一般可能不会去对自己的class文件做混淆处理。做JavaME的大部分都知道Proguard、RetroGuard等用于obfuscate的工具。去年我的Ant Build Script中就已经添加了对于Proguard的支持,不过这次为了做WB2这个游戏,又有几个地方需要调整。 1) 类太多,足足有接近30个class file。 这对于ME程序而言,太多了。Proguard又不太争气,我只好找了以前做Flynn时候用过的JAX再压榨一下。JAX是IBM很早以前在alphaWork上发布的一个混淆器,后来被集成到了WSDD (Websphere Device Developer)中,作为SmartLink组件,就再也没法下到了。 我手头用的JAX版本6.3只能支持JDK1.2 -_-||| 没办法,尝试了诸多方法之后,勉强还是可以用。以下命令可以执行JAX以GUI方式启动: # java -classpath $JAX_HOME/jax63.zip com.ibm.jax.GUI 不过Ant集成的task最好还是在命令行里运行,简洁又清爽: # java -classpath $JAX_HOME/jax63.zip com.ibm.jax.Batch 后来有个朋友给了我一个私房版本,是用JDK5.0重新编译过的JAX,不用替换JVM就能运行,而且META-INF里面也制定了MainClass为Batch,真棒! 折腾了足足两个钟头之后,将JAX加入了ant build: <target name="merge" if="flag.should.jaxmerge" description="Try to merge some classes using JAX"> <java jar="${lib}/${jax.jar}" fork="true"> <arg value="lib/${jax.conf}" /> </java> <delete dir="${classes}"/> <mkdir dir="...

Python IDE List

今天收到的来自comp.lang.python的讨论列表中,又看到了一个家伙询问使用哪种IDE比较合适。在社区中,这种讨论无疑又会引发editor war... Anyway,这不是重点,刚好有位兄台给了一个list,列举了绝大多数可用的Python IDE,觉得比较全,就摘抄过来。 Name Platform Notes ActiveGrid Linux/Windows/Mac Full featured, free (Apache licensed) IDE bundled with wxPython, features projects, scintilla, and debugging Anjuta Unix + GNOME Cross-language IDE; syntax coloring & folding for Python. BlackAdder Windows/Linux Commercial with all the features of IDLE, support for Ruby, and Qt GUI editor. BoaConstructor Python + wxPython RAD GUI building IDE, similar to Delphi. Code Crusader Linux x86 Commercial IDE with support to 30 other languages. CodeForge Unix Commercial cross-language IDE; nice multi-user project manager. DrPython Python + wxPython Simple, clean editing environment for Python intended primarily for use in schools. Eclipse Java + SWT See EclipsePythonI...

JVM suspend Thread

KJava的JVM实现有很多,Motorola在早期的V系列和Tripple里面用的好像是差不多的,后来有一部分使用了Linux+Java的实现,SonyEricsson的JVM是自己的平台,而Nokia的S40和S60系列也都各自用了一套。 Sun的规范虽然说明了正常情况下JVM应当实现的API,以及事件处理的顺序,但是并没有规定JVM应当如何处理一些特殊的情况——例如,startApp和pauseApp。最典型的例子就是手机对于下列情况的处理: incoming call 来电,一般的手机都会在来电的时候调用Canvas的hideNotify()方法,并在来电结束后提示用户是否继续程序,如果是,则调用Canvas的showNotify()方法继续。在这种情况下,有的startApp和pauseApp()的调用不是每个机型都实现的,甚至有的手机连hideNotify()和showNotify()都不实现。 receiving a message 根据我的经验,绝大多数手机都不会暂停应用程序的执行,可能有铃声或是图标闪动之类的提示。 power-save mode 节能模式的一个特征就是:如果用户在一段时间内没有对手机进行操作,那么手机就会降低能耗——例如,关闭背景灯,或是关闭屏幕。有的手机在这种情况下也会让JVM挂起正在执行的线程。 今天遇到了一个bug,就是由于power-save mode引起的——Motorola的E680/A780在进入节能模式之后会将MIDlet的线程挂起,而一般的游戏程序都会在主线程的run()中计算tick所花费的时间(可以计算FPS或是帮助计时)。由于线程挂起之前计算了一个时间,线程恢复执行之后获得了另一个时间,二者之间的差值非常大,这种情况下,应当作为例外处理,而不能当作正常值。

Exadel Open Source

Eclipse一直是偶钟爱的Java IDE,EclipseMe是开发JavaME所使用的插件,虽然有一些瑕疵,但总的来说它还是很顺手的。在开发JavaEE的项目时,曾经一度使用MyEclipse,不过由于这个工具是需要购买license的,所以总觉得不是很合适。后来有人推荐了 Exadel 给我,用了几个版本,基本上扩展性还是不错的。如今这个IDE貌似被JBoss开源了—— Exadel and Red Hat are Partnering to Open Source Exadel Studio Pro as Red Hat Developer Studio .

电信的烂ADSL

最近网络一致不灵光,断线频繁。这也就算了,微软的Live Space居然也来凑热闹,总也无法登录进去,真是见鬼了。 跑到M$的windows live β官方页面看见一则《安民告示》,大意是说他们确信自己的服务器没有问题,问题发生在“某些网络”。的确,在公司用网通的时候一点问题都没有,晚上在家一上电信的烂ADSL就出事情了…… 闲时跑了两个命令看看next hop和dns的运转,贴出来留个记录: C:\>tracert www.sina.com.cn Tracing route to jupiter.sina.com.cn [61.172.201.194] over a maximum of 30 hops: 1 1 ms 1 ms 2 407 ms 745 ms * 218.1.60.217 3 535 ms 392 ms 361 ms 218.1.60.129 4 517 ms 314 ms 288 ms 218.1.2.61 5 495 ms 473 ms 407 ms 218.1.1.61 6 466 ms 411 ms 330 ms 218.1.1.134 7 327 ms 357 ms 305 ms 61.152.87.154 8 * 821 ms 683 ms 222.72.243.242 9 542 ms 434 ms 273 ms 61.172.201.194 Trace complete. C:\>nslookup gmail.google.com Server: ns-pxb.online.sh.cn Address: 202.96.209.6 Non-authoritative answer: Name: gmail.l.google.com Address: 72.14.223.107 Aliases: gmail.google.com