??xml version="1.0" encoding="utf-8" standalone="yes"?>
I’ve been profiling my new K-Means++ implementation for the next LingPipe release on some randomly generated data. It’s basically a stress test for array gets, array sets, and simple multiply-add arithmetic. Many LingPipe modules are like this at run-time: named entity, part-of-speech tagging, language modeling, LM-based classifiers, and much more.
While I was waiting for a run using JDK 1.6 to finish, I installed the following beta release of JDK 7:
> java -version java version "1.7.0-ea" Java(TM) SE Runtime Environment (build 1.7.0-ea-b52) Java HotSpot(TM) 64-Bit Server VM (build 15.0-b03, mixed mode)
You can get it, too:
I believe much of the reason it’s faster is the work of these fellows:
Java’s always suffered relative to C in straight matrix multiplication because Java does range checks on every array access (set or get). With some clever static and run-time analysis, Würthinger et al. are able to eliminate most of the array bounds checks. They show on matrix benchmarks that this one improvement doubles the speed of the LU matrix factorization benchmark in the U.S. National Institute of Standards (NIST) benchmark suite SciMark 2, which like our clustering algorithm, is basically just a stress test for array access and arithmetic.
So far, my tests have only been on a Thinkpad Z61P notebook running Windows Vista (64 bit) with an Intel Core 2 CPU (T2700; 2.0GHz), and 4GB of reasonably zippy memory. I don’t know if the speedups will be as great for other OSes or for 32-bit JDKs.
I’m pretty excited about the new fork-join concurrency, too, as it’s just what we’ll need to parallelize the inner loops without too much work for us or the operating system.
*Update: 2:30 PM, 30 March 2009 JDK 7 is only about 15% faster than Sun’s JDK 6 on my quad Xeons (E5410, 2.33GHz) at work running the same code. I’ll have to check the exact specs on both of my memory buses. The notebook has surprisingly fast memory and the Xeon’s running ECC registered memory that I don’t think is quite as fast.
Update: 11:00 AM, 31 March 2009 Like other matrix algorithms, k-means clustering is extremely front-side-bus sensitive (connection between memory and the CPU), because the bottleneck is often between memory and the CPU’s L2 cache. Memory’s significantly slower than CPU these days.
The Intel dual quad-core Xeon E5410 have 12MB of L2 cache at 2.3GHz, whereas the Thinkpad Z61P has Intel Core 2 Mobile T7200 has only 4MB of L2 cache at 2GHz. The Core 2 has a 667 MHz front-side bus whereas the Xeon reports a 1333 MHz front-side bus (is that just the confusion between spec reporting). I actually don’t know what kind of memory’s in the workstation ?I’ll have to crack it open and look. I’ve got 4GB of RAM in the notebook, but the motherboard can only see 3GB (ithat is, it’s not Windows ?the same thing happened when I installed Ubuntu on the notebook and it’s a known design limitation in many motherboards); I have 16GB of RAM in the workstation and the motherboard can see all of it. But it has two physical chips, each of which share the memory, so the motherboard’s architecture’s very different. There are so many confounding factors that I can’t tease apart what’s speeding up in JDK 7 so much on the notebook.
Anway, go forth and test. If you’re using a machine like my notebook to do number crunching, JDK 7 really is twice as fast as JDK 6 for matrix algorithms.
Groovy是java世界的动态语a
一Q快速开始(gettingStartQ?/span>
安装JDK环境
Groovy需?/span>JDK1.4以上版本的支持。因此在安装groovy旉先要安装JDK?/span>
JDK安装步骤Q?/span>
• 下蝲自己喜欢?/span>JDK版本。(下蝲|址Q?/span>http://java.sun.comQ?/span>
• 下蝲GroovyQ?/span>
Groovy?/span> 下蝲首页截图
点击Download
q入下蝲面
Groovy最新版本:(x)Groovy 1.6-RC-2
我下载的是:(x)Download Windows-Installer: Binary Release 安装版本
q行安装?/span>
讄JAVA_HOME 环境变量. ?/span>Windowsq_里,步骤如下:
(1)打开pȝ"控制面板"
单击"高"选项?/span>
单击"环境变量" 按钮
d一个名UCؓ(f)"JAVA_HOME" 的新的系l环境变量,q且你?/span>Java的安装目录作为它的?/span> (例如Q我的是C:"Program Files"Java"jdk1.6.0Q版本号Q?/span>)
你也可以d %JAVA_HOME%"binC的系l的PATH变量?/span>
(2)叛_我的?sh)脑属?/span>
点击高选项
点击环境变量
点击新徏选项Q?/span>
具体讄
PathQ?/span>
我用?/span>Jdk版本?/span>Jdk1.6
• q行安装文g。(更改安装路径刎ͼ(x)C:"Program Files"Java"jdk1.6.0Q版本号Q)
• 讄JAVA_HOME环境变量Q如我的
• 在系l?/span>path中增加:(x)%JAVA_HOME%"bin
注:(x)对于1.1-rc-1以上版本需?/span>JDK1.5版或更高的版本?/span>
点击自己下蝲?/span>Groovy windows安装版本
安装可以是默认的安装全点M一步(nextQ:(x)
安装完成啦
(Note: as an alternative to setting a system environment variable, you can create yourself a '.bat' or '.cmd' file which sets
the variable. You then need to run that batch file in any console window in which you wish to run Java and double clicking on
.bat' or '.cmd' files containing Java invocation instructions won't work. If you are unsure about what this means, follow
the earlier instructions.)
Note: JDK 1.5 is required for version 1.1-rc-1. In earlier versions of JDK (notably 1.4.2) the compiller throws an exception:
*nested exception is org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoSuchMethodError:
java.lang.String.replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
The method "replace" was introduced in JDK 1.5 and is not supportedin earlier versions. This is also a reason why GRails
framework doesn't run on JRE 1.4
(1)如果你是安装版本Groovy环境变量不需要我们设|,在安装的时候就自动讄好啦?/span>
(2)如果不是Q请自己试Groovy讄如下Q?/span>
讄你的Groovy环境变量
从下载页面下?/span>Groovy安装器或者二q制包,q且跟着介绍q行安装卛_。(当前有一个问题,是?/span>windows下,你的安装路径不能含有I格
Q即Q要其~省的安装\?/span>"c:"Program Files"Groovy" Ҏ(gu)?/span>"c:"Groovy"q样的\径)
或者这?/span>
从站点上得到Groovy发行版的copy,q且copy它到你硬盘上的某个地斏V?/span>
解压~这?/span>groovy包到你硬盘的某个I间Q如我的?/span> C:"dev"groovy-1.0-jsr-06
讄GROOVY_HOME环境变量. ?/span>Windows下,作如下步?/span>:
M新的pȝ环境变量GROOVY_HOME q且DZ?/span>groovy安装的\径( 我的?/span> C:"dev"groovy-1.0-jsr-06)
打开命o(h)行窗口,q且键入"set" 然后打回车,查看你的环境变量讄是否已经正确?/span>
可选的Q你也可以添?/span> %GROOVY_HOME%"bin C?/span>PATH环境变量?/span>
通过双击试着q行groovyConsole.bat。如果它不能工作Q打开一人命令行H口Q将目录改变?/span>bin目录Qƈ且运行它看他q回什么错误信息?/span>
二:(x)q行groovy
Groovy安装Q目?/span>
我们需要点?/span>groovyConsole.bat文gQ?/span>
文g详细内容如下Q?/span>
@if "%DEBUG%" == "" @echo off @rem @rem $Revision: 2770 $ $Date: 2005-08-29 12:49:42 +0200 (Mo, 29. Aug 2005) $ @rem @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal :begin @rem Determine what directory it is in. set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=." "%DIRNAME%"startGroovy.bat" "%DIRNAME%" groovy.ui.Console %* @rem End local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" endlocal |
安装完整无误的话 q行groovyConsole.bat׃(x)启动groovyConsole.exeQ出来一个编辑框?br />
上面的是文本输入框:(x)Ҏ(gu)groovy的语法输入要昄的内容:(x)
下面的是内容输出框:(x)昄上面的内容:(x)
开始运?/span>groovyQ?br />
Hello, World
?/span> groovyConsoleq行H口的顶?/span>,键入println "Hello, World!"
q且键入 <CTRL-R>.
注意Q在控制台窗口中Q即 groovyConsoleH口前面的黑色的那个Q,文体得到打印q且 groovyConsole的下部显C?/span> :
groovy> println "Hello, World!"
null
?/span>"groovy>"开头的行正是控制台处理的文?/span>. "null" 是表辑ּ的?/span>. 因ؓ(f)表达式没有Q何值可以打?/span> Q所?/span>groovyConsole打印?/span>"null"
接下来,再试一些实际的|用下面的字符串来替换控制台里的文本:(x)
123+45*67
或者你喜欢的Q何表辑ּ然后?/span><CTRL-R> (I'm going to stop telling you to hit <CTRL-R>, I think you get the idea). 现在Q?/span> groovyConsole下面打印的值有更多的含?/span>.
Variables
You can assign values to variables for later use. Try the following:x = 1
println x
x = new java.util.Date()
println x
x = -3.1499392
println x
x = false
println x
x = "Hi"
println x
Lists and Maps
The Groovy language has built-in support for two important data types, lists and maps (Lists can be operated as arrays in Java language). Lists are used to store ordered collections of data. For example an integer list of your favorite integers might look like this:myList = [1776, -1, 33, 99, 0, 928734928763]
You can access a given item in the list with square bracket notation (indexes start at 0):
println myList[0]
Should result in this output:
1776
You can get the length of the list with the "size" method:
println myList.size()
Should print out:
6
But generally you shouldn't need the length, because unlike Java, the preferred method to loop over all the elements in an list is to use the "each" method, which is described below in the "Code as Data" section.
Another native data structure is called a map. A map is used to store "associative arrays" or "dictionaries". That is unordered collections of heterogeneous, named data. For example, let's say we wanted to store names with IQ scores we might have:
scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]
Note that each of the values stored in the map is of a different type. Brett's is an integer, Pete's is a string, and Andrew's is a floating point number. We can access the values in a map in two main ways:
println scores["Pete"]
println scores.Pete
Should produce the output:
Did not finish
Did not finish
To add data to a map, the syntax is similar to adding values to an list. For example, if Pete re-took the IQ test and got a 3, we might:
scores["Pete"] = 3
Then later when we get the value back out, it will be 3.
println scores["Pete"]
should print out 3.
Also as an aside, you can create an empty map or an empty list with the following:
emptyMap = [:]
emptyList = []
To make sure the lists are empty, you can run the following lines:
println emptyMap.size()
println emptyList.size()
Should print a size of 0 for the List and the Map.
条g表达?/span>
One of the most important features of any programming language is the ability to execute different code under different conditions. The simplest way to do this is to use the '''if''' construct. For example:amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Good morning")
} else {
println("Good evening")
}
Don't worry too much about the first line, it's just some code to determine whether it is currently before noon or after. The rest of the code executes as follows: first it evaluates the expression in the parentheses, then depending on whether the result is '''true''' or '''false''' it executes the first or the second code block. See the section below on boolean expressions.
Note that the "else" block is not required, but the "then" block is:
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Have another cup of coffee.")
}
Boolean表达?/span>
There is a special data type in most programming languages that is used to represent truth values, '''true''' and '''false'''. The simplest boolean expression are simply those words. Boolean values can be stored in variables, just like any other data type:myBooleanVariable = true
A more complex boolean expression uses one of the boolean operators:
==
!=
>
>=
<
<=
Most of those are probably pretty intuitive. The equality operator is '''==''' to distinguish from the assignment operator '''='''. The opposite of equality is the '''!=''' operator, that is "not equal"
So some examples:
titanicBoxOffice = 1234600000
titanicDirector = "James Cameron"
trueLiesBoxOffice = 219000000
trueLiesDirector = "James Cameron"
returnOfTheKingBoxOffice = 752200000
returnOfTheKingDirector = "Peter Jackson"
theTwoTowersBoxOffice = 581200000
theTwoTowersDirector = "PeterJackson"
titanicBoxOffice > returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= titanicBoxOffice // evaulates to true
titanicBoxOffice > titanicBoxOffice // evaulates to false
titanicBoxOffice + trueLiesBoxOffice < returnOfTheKingBoxOffice + theTwoTowersBoxOffice // evaluates to false
titanicDirector > returnOfTheKingDirector // evaluates to false, because "J" is before "P"
titanicDirector < returnOfTheKingDirector // evaluates to true
titanicDirector >= "James Cameron" // evaluates to true
titanicDirector == "James Cameron" // evaluates to true
Boolean expressions are especially useful when used in conjunction with the '''if''' construct. For example:
if (titanicBoxOffice + trueLiesBoxOffice > returnOfTheKingBoxOffice + theTwoTowersBoxOffice)
{
println(titanicDirector + " is a better director than " + returnOfTheKingDirector)
}
An especially useful test is to test whether a variable or expression is null (has no value). For example let's say we want to see whether a given key is in a map:
suvMap = ["Acura MDX":""$36,700", "Ford Explorer":""$26,845"]
if (suvMap["Hummer H3"] != null)
{
println("A Hummer H3 will set you back "+suvMap["Hummer H3"]);
}
Generally null is used to indicate the lack of a value in some location.
Debugging and Troubleshooting Tips
Print out the class of a variable that you're interested in with myVar.getClass(). Then look up the documentation for that class.
If you're having trouble with a complex expression, pare it down to a simpler expression and evaluate that. Then build up to your more complex expression.
Try restarting the groovyConsole (this will clear out all the variables so you can start over.
Look for the topic you're interested in in the Groovy User Guide
If you are a Java developer
you might want to check on the Differences from Java
also there afew a few Things to remember
Labels parameters
JAX 是d国十分重要的Java技术会(x)议(Java conferenceQ,每一q该l织都会(x)召开?x)?/a>评?strong>最具创新精的目Q评选委员会(x)?a >40个提?/a>目中选择十个候选项?/a>Q许多优U目如Matisse GUI builderQNetBeans的一个插Ӟ用于构徏GUIE序Q、NuxeoQ企业内容理解决Ҏ(gu)Q等都入围候选,最后Groovy赢得?{奖Q这是一个崇高的荣誉Q我们感到非帔R_(d)特别是和许多非常优秀的项目一L(fng)赛。另外该奖项的上一期胜是Spring framework?/p>
q有Q由Dierk König创作出版的畅销?-----《Groovy in Action》,也会(x)作ؓ(f)奖品赠予GroovyC֛Q随后JAX单独设|Groovy主题的会(x)议进行颁奖?strong>q些奖项证明q肯定了Groovy的创Ch(hun)|q说明Groovy在JavaC֛有不的影响?/strong>?
http://groovy.codehaus.org
mxjava
http://www.mxjava.com/blog/
http://www.onjava.com
O'Reilly的Java|站. 每周都有新文?
http://java.sun.com
官方的Java开发者网?- 每周都有新文章发?
http://www.developer.com/java
由Gamelan.com l护的Java技术文章网?
http://www.java.net
Sun公司l护的一个JavaC|站
http://www.builder.com
Cnet的Builder.com|站 - 所有的技术文? 以JavaZ.
http://www.ibm.com/developerworks/java
IBM的Developerworks技术网? q是其中的Java技术主?
http://www.javaworld.com
最早的一个Java站点. 每周更新Java技术文?
http://www.devx.com/java
DevXl护的一个Java技术文章网?
http://www.fawcette.com/javapro
JavaPro在线杂志|站.
http://www.sys-con.com/java
Java Developers Journal的在U杂志网?
http://www.javadesktop.org
位于Java.net的一个Java桌面技术社区网?
http://www.theserverside.com
q是一个讨论所有Java服务器端技术的|站.
http://www.jars.com
提供Java评论服务. 包括各种framework和应用程?
http://www.jguru.com
一个非常棒的采用Q&A形式的Java技术资源社?
http://www.javaranch.com
一个论坛,得到Java问题{案的地方,初学者的好去处?
http://www.ibiblio.org/javafaq/javafaq.html
comp.lang.java的FAQ站点 - 攉了来自comp.lang.java新闻l的问题和答案的分类目录.
http://java.sun.com/docs/books/tutorial/
来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助.
http://www.javablogs.com
互联|上最z跃的一个Java Blog|站.
1.TheServerside.com ?/p>
2.InfoQ.com Floyd Marinescu 在离开 TSS 后另L(fng)Ӟ2006q中最重要推荐?/p>
视野不再局限于Java 而是包括Java,.Net, Ruby ,SOA, AgileҎ(gu){热门话题?/p>
3.JDJ的电(sh)子杂?在JDJ首页的最底处订阅Q文章质量不低于5-7的传l三强?/p>
4.SWik.net 攉了大量OpenSource Project的资源聚合。其中如SpringQ?/p>
Hibernate的更新度非常高,出现什么和Spring有关的blog,article,project都会(x)
马上被聚合?/p>
5.IBM DeveloperWorks 传统、稳定的Java文章来源地?/p>
6.JavaWorld 传统、稳定的Java文章来源地?/p>
7.OnJava 传统、稳定的Java文章来源地?/p>
8.Artima.com cM于TSS而略逊,其中Spotlight 文章值得xQ而Java News?/p>
聚合了所有其他Java站点的大聚合?/p>
9.JavaLobby 站内的Announcements 是大大小Java Project的发布声明区Q?/p>
Trips and Tricks 有很多的Tips?/p>
10. No Fluff Just Stuff 的Blogs 聚合 一直缺一个所有优UJava Blogger?/p>
rss总聚合,NFJSq里勉强一个?br />
Ajaxian一个接q于门户cd的AJAX资源站点Q包括AjaxCZ攉Q博客,论坛和教E等{?/p>
8. DHTML Site
9. Solutoire
10. DevSnippets
2008q国外最佳Web设计/开发技巧、脚本及资源13个可能会(x)让你?#8221;Thank You”的必不可的开源应?/a>
14个免费工兯你了解ؓ(f)什么h们会(x)攑ּ讉K你的|站
20个免费的SEO|站分析工具(已翻译成中文)
11个功能强大甚臛_以替代标准应用程序的Firefox3扩展插g
15个前端开?|页设计师必备的Bookmarklet(已翻译成中文)
30+JavaScript, Ajax & CSS工具提示脚本
40+最热门的wordpressU诀和技?/a>Q?30+ More
_N?0个优U的CSS技术和实例(已翻译成中文)
12UJavascript解决常见览器兼定w题的Ҏ(gu)(已翻译成中文)
63个必不可的Wordpress Hack、教E、帮助文件和手册
20个神奇的Javascipt脚本原型、元素、Widgets、类…
使用CSS为图片添加更多趣味的5U方?/a>(已翻译成中文)
推荐20个关于网站可用性及界面设计的网?/a>(已翻译成中文)
成ؓ(f)Web设计/开发自p业者所要遵循了53个步(60+资源)
Ajax|页势研究Q什么是最好的免费Ajax资源Q?70+最佳Ajax资源)
155个Wordpress资源、教E、插件、主题、Ajax、播?#8230;庞大的WP列表
10个非常棒的Ajax及Javascript实例资源|站(已翻译成中文)
_N?008q最佌计素材资?amp;灉| (已翻译成中文)
10UJavaScriptҎ(gu)实例让你的网站更吸引?/a>
_N?5个国外CSS框架(已翻译成中文)
推荐20个让你学?fn)ƈ_NCSS的网?/a>(已翻译成中文)
65个优U的jQuery资源(教程、手册、电(sh)子书、demo、插?#8230;)
300+Jquery, CSS, MooTools ?JS的导航菜单资?/a>(已翻译成中文)
|页设计必备?0套漂亮图标集(已翻译成中文)
你会(x)用在Wordpress主题或博客中?0ƾ插?/a>
你早晚会(x)用到?30ƾW(wng)ordpress插g-W一部分-W二部分
1?nbsp; Huihoo动力—当之无愧的老大 代表人物Q?/strong>龙辉(Allen)?/span>E勇(Peter)、杨?/span>(Orbat) 代表目Q?/span>JFox{?/span> 官方|站Q?/span>http://www.huihoo.org/ |
|
评:(x)说到java开源,大家不可能不知道HuihooQ?/span>Huihoo曄创造了很多奇迹Q不是Ҏ(gu)团队成员的技术水q是开源理c开源组l的理{都可以说是最的Q?/span>JFox目一直具有生命力Q?/span>huihooq么多年了也一直具有生命力Q?/span>Allen?/span>Peter?/span>Orbat{对q个团队q么多年来的坚持及A(ch)献,要选国内最值得推崇的开源团体,huihoo排在W一位可以说是当之无愧。因此,他们是最可爱的h?br style="font-family: " /> 2?/span>Jdon?/span>高处不胜?/span> 代表人物Q?/span>彭晨?/span>(板桥里h) 代表目Q?/span>jdonframework 官方|站Q?/span>http://www.jdon.com/ 评:(x)作ؓ(f)国内W一个开源框架的发v人,作ؓ(f)国内W一个敢于与国外框架叫板的板桥里人,他曾l带l大家很多很多的ƣ喜及回忆,桥技术水q_造诣q里更不用说了Q他“ 一个开源h的孤独告?#8221;Q有Ҏ(gu)桑,有点心寒Q?/span>jdon今天的现Ӟ是中国对待技术h才的真实写照。无论如何,选中?/span>Java开源界最可爱的hQ板桥当之无愧?br style="font-family: " /> 3?/span>Apusic OperaMasks?/span>谁说开源不赚钱 代表人物Q?/span>袁红岗 张勇 代表目Q?/span>OperaMasks 官方|站Q?/span>http://www.operamasks.org/ 评:(x)1000万h民币的投入,一?#8220;勇敢者的C?#8221;也算是在中国开源界掀起了一阉|L澜,产品发布?x)上那一份䆾合同Q更是让同行的老M有点眼红。除d业因素不_(d)q两?/span>Check out?/span>OperaMasks的代码,也看了示例,表现非常不错Q值得深层ơ的java开发h员学?fn)。老袁深厚的技术功底、老张卖力的全国\演,公司l营战略的成功,OperaMasks能否发展成ؓ(f)一个最能适合中国国情的开源组l,让我们拭目以待?br style="font-family: " /> 4?/span>EasyJF?/span>后生可畏 代表人物Q?/strong>蔡世?/span>(大)、吴嘉俊(stef_wu)、程?/span>(天一) 代表目Q?/span>EasyJWeb 官方|站Q?/span>http://www.easyjf.com/ 评:(x)看了大朋友的一些文章, 看到EasyJF现在的发展,真真实实有一U后生可畏的感叹。他们有自己的专职团队,有网下办公室Q还有硬件设施,q拥有一有Ȁ情、好学的q轻伙子们。虽然要得到中国q认可是很不容易的事情Q但搜烦一下带是发现国内已l有不少|站在用EasyJWeb做开发。因此,最可爱的h当他们莫属,衷心希望他们能成功?br style="font-family: " /> 5?/span>SpringSide?/span>天才团队 代表人物Q?/strong>肖桦(江南白衣)?a style="font-family: " name="cac">陈俊(cac)、田?/span>(差沙) 代表目Q?/span>SpringSide 官方|站Q?/span>http://www.springside.org.cn/ 评:(x)虽然只是站在春天的傍边,但已l带l了整天忙于q逐新技术、新潮流?/span>JavaE序员们很多极具参考h(hun)值的东西。江南白衣同学可以算是一个天才般的h物,技术的d、接受ƈ译释新技术的速度、能力及水^Q可以说是少C的少数。因此,SpringSide可以U得上最h偶像潜质的团队,Java开源界最可爱的hQ他们当之无愧,希望他们能从“傍边”走到“中间”?br style="font-family: " /> 6?/span>BuffaloC?/span>羃是精 代表人物Q?/strong>陈金z?/span>(Michael Chen) 代表目Q?/span> Buffalo 官方|站Q?/span>http://buffalo.sourceforge.net/ 评:(x)作ؓ(f)W一个国人开发的Ajax框架Q作Z个能把一直受java大拿们岐?/span>javascript玩{得如何熟(zhn)的目Q作Z个能几年坚持更新的开源项目,Buffalo是成功的Q?/span>Michael Chen让我们体?x)到国内开源A(ch)献者们执着与坚持。他是不是最可爱的hQ谁是? 7、天乙社?/span>—n受开?/span>动力 代表人物Q?/span>laoer 代表目Q?/strong>天乙开源社?/span> 官方|站Q?/span>http://www.laoer.com/ 评:(x)有多开源项目的产品发布?/span>8.0Q从jsp?/span>struts1?/span>struts2一路走来,一直能跟着新技术的步伐Q不断改q及完善。因此,当之无愧java开源界最可爱的h?br style="font-family: " /> 8?/span>CowNew开?/span>?/span>真有一点牛 代表人物Q?/strong>杨中U?/span> 代表目Q?/span>CowNewSQL 官方|站Q?/span>http://www.cownew.com/ 评:(x)看过杨中U同学的两篇文章Q我觉得他是可爱的。多数据库翻译引?/span>CowNewSQL的h(hun)值将在哪里体玎ͼCowNew能在何时l我们带来更多实用的东西Q值得大家期待。无论如何,他们的进步是有目q?br style="font-family: " /> 9?/span>CommonTemplate?/span>值得期待 代表人物Q?/strong>梁飞(javatar) 代表目Q?/span>CommonTemplate 官方|站Q?/span>http://www.commontemplate.org/ 评:(x)也许很多Z知道q个目Q但他确实是一个很不错的模板引擎,金子L发光?/span>时?/span>。只要坚持,怿有一天梁飞同学会(x)l大家带来更多的惊喜?br style="font-family: " /> 10、恩信—小公司也能开?a href="http://www.tkk7.com/mikezeseler/">mike zeseler 代表人物Q?/strong>刘有?/span> 代表目Q?/strong>恩信开?/span>ERP 官方|站Q?/span>http://www.nseer.com/ 评:(x)听过刘ȝ演讲Q从“捕鱼”?#8220;授之以渔”Q从刘Mpdq作手法Q我觉得恩信可以成ؓ(f)很多q逐开源但又没有上千万资金来投入而d为是否参加开源而徘徊的老M的参考学?fn)的案例。虽然没有技术牛人加盟,虽然q用稍为古老的技术体p,但既然开源了Q总能让我们学到很多东ѝ呵呵,所有最可爱的开源h中,刘ȝ是算是最q长的了Q祝他们开?/span>ERP大卖 |