Maven 添加一个本地jar包

在pom.xml添加:

  <dependency>
    <groupId>cn.vifix</groupId>
    <artifactId>maven-test</artifactId>
    <version>0.0.1</version>
    <systemPath>${basedir}/lib/mt.jar</systemPath>
    <scope>system</scope>
  </dependency>

即可达成目标。

不过这是一种临时性质的方案,maven进行编译时会警告未来这种方式可能会过期,更好的方式还是搭建一下自己的本地仓库来解决本地jar包的问题。

2011-11-15补充

发现这种方式确实不是很好的一种方式,在进行maven的package打包操作的时候,这种system scope的包是不会被打包进去的,还是老老实实的用本地仓库吧

Rhino: Javascript for Java

rhino50

好几天没更新了,过去的一周里忙着补作业(一个学期根本没上课,自然作业也就……),半夜送室友去120(室友哮喘发作),下周则要开始考试,整个人也有点疲劳也没时间顾及这儿 orz

那么今次要介绍的东西是Mozilla旗下的一个名为Rhino的项目,纯Java实现的Javascript解释器,很适合希望在自己的Java程序中内嵌Scripting功能的同学。当然了,也可以用它在J2EE中实现用Javascript作为后台语言的功能。

官方网站为:http://www.mozilla.org/rhino/

PS: Mozilla旗下还有一个更知名的C写的Spider Monkey,被广泛应用于Mozilla的产品中,比如Firefox的Javascript引擎就是它,官方网站为:http://www.mozilla.org/js/spidermonkey/

下面是一个简单的执行js文件的示例代码。

Read the rest of this entry >>

Google App Engine中datastore的Key

google_appengine

Google App Engine使用了一种与关系数据库完全不同的数据库,称为分布式键-值数据库(Key-Value-Database),所有的”条目”,都是一个对象。这种数据库拥有代码简单,开发效率高,高并发访问效率等特性,但同时也有不支持模糊查询等缺点。

在使用上,键-值数据库和之前熟悉的MySQL等所有的关系数据库都有点不太一样,因此在开发vxtodo时走了一些弯路,比如这个等同于关系数据库的”主键”的问题就让我奇怪了很久(当然,对于这种的键-值数据库中,是否能以主键来称呼应该值得商榷),刚才终于摸索清楚了,记录下来。

Google App Engine的datastore的每个条目的唯一的键是自动生成的,无需人工干预。因为一开始并不清楚这一点,所以定义”表”的结构时找不到类似于自动索引的功能,结果开始写vxtodo时我用的是时间戳 + 用户名邮箱地址然后Hash再取绝对值出来的一个唯一值的诡异方法,虽然也能用,但是毕竟不够优雅(这样的Hash值实在是太长了)。仔细翻阅文档后,终于把ID/Name部分给看明白了。

Read the rest of this entry >>

Java中的支持重试,有限任务数量线程池

threadpooldemo_output

昨天学校网络没有续费没法上网,晚上找事情干,就翻着O’Reilly的《Java线程》(第三版)看了一些内容然后写的实验性质的代码,主要是对于Konachan的线程池代码很不满意而写的。

这些代码主要包括:

  1. 三个线程复用的线程池(利用ThreadPoolExecutor)
  2. 通过判断线程池现有的活动线程数量限制ThreadPoolExecutor执行新任务
  3. 如果执行出错,可以自动重试(这里的“任务”有80%的成功率)
  4. 利用Hashtable<Integer, String>来记录“任务”的运行状态,如果不在Hashtable中,表示任务已经结束
  5. 每个“任务”耗时0到10000毫秒(利用Thread.sleep模拟)

然而这个实现也让人觉得不够优雅,也许自己实现一个RejectedExecutionHandler接口的类,然后绑定为ThreadPoolExecutor的弹出策略才是王道吧。另外,觉得应该还需要自己还要再写一个队列。

完整的代码(Eclipse工程在文末):

Read the rest of this entry >>

Konachan

konachan

这个是在下蓄谋已久的软件了,期间考虑过Javascript,PHP,Python等语言来编写,最终还是选择了Java,就当对Swing和Java多线程的练习吧~

功能是自动抓取类似于konachan.com这类用了danbooru这种图库系统的网站的图片,适合像我这种又懒又宅的家伙使用 orz

很久没有写桌面应用程序了,又是并不是十分熟悉的Java,所以有些代码写的很渣,不过还好总算能用 orz

总共花了四天多的时间,代码量大概也就700行吧(没有仔细统计),感兴趣的下载去试试看吧,就是这样~待更完善些会附上Java源代码的……

下载请移步主页

Java实现图像的高斯模糊滤镜

gaussianblurfiltertest

继续研究那本《Java动画、图形和极富客户端效果开发》,下午到现在搞的东西,高斯模糊滤镜,其原理(高斯分布)可以用一个矩阵方程来表示:

gaussian-formula

这个公式中,u是一个像素到中心的水平距离,v是一个像素到中心的垂直距离,σ(sigma)是标准偏差。标准偏差可以设置为任意的数,但是设置成半径的1/3会生成好的结果

看来要补充些线性代数的知识了 orz

我的高数课本都已经卖给二手书收购站了啊! orzorzorz

那么滤镜核心部分的代码见内页,测试用的代码部分就不贴了,感兴趣的点击文后的压缩包看源代码(Eclipse工程)&可执行JAR吧。

Read the rest of this entry >>

Swing绘制渐变按钮

昨天从图书馆借了一本《Java动画、图形和极富客户端效果开发》,作者为Sun公司的Java SE组客户端架构师,看了几页感觉获益匪浅。内容涉及Swing的渲染原理,一些图像的滤镜实现算法(例如方框模糊和高斯模糊),以及特效(比如类似OSX的倒影风格)的原理,都十分有意义,对接下来的图形研究很有帮助,若能精读此书,相信都可以写一个简单的图像处理软件出来了。

尝试了里面提到一个十分简单的渐变按钮,效果不错,代码如下:

Read the rest of this entry >>

网易的自由软件镜像

netnoease

http://mirrors.163.com/

看到zwxclear君在豆瓣上的推荐知道的站点,网易为开源软件和自由软件准备的镜像。

包括了ubuntu, debian , fedora等Linux发行版,还有FreeBSD和OpenBSD,以及Eclipse的安装包。

除此之外,还有ubuntu和debian的APT源,国内使用APT除cn99外的新选择(别的速度都不快)~

适合ubuntu 8.04的/etc/apt/sources.list:

deb http://mirrors.163.com/ubuntu/ hardy main universe restricted multiverse
deb http://mirrors.163.com/ubuntu/ hardy-security universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ hardy-updates universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ hardy-proposed universe main multiverse restricted
deb http://mirrors.163.com/ubuntu/ hardy-backports universe main multiverse restricted

总之,网易Good Job!

Read the rest of this entry >>

jMonkey Engine

jme-logo

今天仍然继续的在寻找Java的3D开发相关的物体的时候发现的好东西:

jME(jMonkey Engine)是一个高性能开源的Java 3D引擎,主要是为了填补Java这方面的空白而设计,通过使用一个抽象层,jME支持任意的绘制系统。目前支持LWJGL,JOGL的支持也将在近期加入。BSD证书,几乎是完全自由的使用。

Java平台下可以选择的3D图形API有很多,根据封装层次可以将其分为以下两种:

  • Java bindings to OpenGL
  • Scene graph APIs

其中属于Java bindings to OpenGL的有:GL4JavaLWJGLJOGL等。
属于Sence Graph APIs的有:JMonkey Engine(JME)、Sun官方的Java 3D等。

JME和Java 3D具有类似的场景结构,开发者必须以树状方式组织自己的场景。JME有一套很好的优化机制,这使得它得运行速度要比Java 3D快很多。JME主要由Render系统、Material系统、GUI系统、Texture和图片解码器、文件解码器、Scene插件(主要是地形系统)、粒子系统、日志、物理系统、光照系统等构成。可以说JME是一个功能齐全,性能卓越的3D图形引擎。

从特性看来,JME比Java 3D丰富得多(虽然也有我个人对Java 3D的了解不够深入的原因),再加上有更好的性能,接下去的3D研究应该会放弃Java 3D而转移到这个JME上面来。内建的特效和粒子系统也可以直接用,而不是整那个证书不太方便的Genesis FX了。

Read the rest of this entry >>

Java3D粒子系统和特效系统——Genesis FX

genesisfx

在搜索Java3D的天空实现方案时发现的东西,很可惜,并不是开放源代码的产物,不过有免费的个人版(但是不能对Genesis FX二次发布的License还是很困扰的)。

不过不管怎样,第一感还是挺不错的,没有几行代码就可以实现云雾,火焰,血迹等之前我根本不知道该怎么动手才好的特效。看其自带的Example貌似碰撞检测之类的也都包含在里面了。

不过因为Java 3D本身就很冷门的原因,这个东西的中文资料可以说完全没有,看来接下去是一个慢慢啃文档的过程。

Genesis FX官方网站

FlyingGuns —— 一个运用了Genesis Fx的二次开发框架,本身貌似也已经可以玩了的样子。(话说许可证的问题呢,被无视了么…… orz)

Page 1 of 212