sudo -s

Tags: OpenBSD

Shell:~ >: id
uid=1000(Py3k) gid=0(wheel) groups=0(wheel),  5(operator), 20(staff),  597(_kqemu)
Shell:~ >: sudo -s
obsd# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest), 597(_kqemu)
obsd#

No Comments 2009-06-04 22:29:27 by No.0023

BSD Release: Jibbed 5.0

Tags: NetBSD

NetBSD developer Zafer Aydogan has announced the release of Jibbed 5.0, a live CD based on NetBSD 5.0. An announcement went out a few days ago, but now it has been updated to include information about new features: "Here we go again the with a new version of the NetBSD live CD. This time it's version 5.0, built from the finest NetBSD-5 sources. As usual, the live CD contains the latest packages from pkgsrc and three new packages: AbiWord and two fantastic games - Wormux and Crack Attack!. As always it contains X.Org from base and the Xfce window manager. Jibbed is a bootable live CD based on the NetBSD operating system that works directly from a CD without touching a hard drive. It provides automatic hardware detection and supports many graphics cards, sound cards and USB devices. It also features features a rescue environment for NetBSD." Visit the project's home page to read the brief release announcement. Download (MD5): jibbed-5.0-i386-LiveCD.iso (489MB), jibbed-5.0-amd64-LiveCD.iso (530MB).

 

Jibbed是非安装型的自启动运行光盘,它基于NetBSD。它创建自HEAD分支最新的NetBSD源码,光盘上提供的第三方软件都是最新版本,这包括来自wip-pkgsrc的测试软件包。

No Comments 2009-05-14 11:04:03 by No.0023

BSD Release: BSDanywhere 4.5

Tags: OpenBSD

Stephan Rickauer has announced the release of BSDanywhere 4.5, a live CD consisting of a base OpenBSD system plus a graphical desktop (Enlightenment 17): "We are pleased to announce the immediate availability of BSDanywhere 4.5 - Enlightenment at your fingertips. Here's a quick summary of the changes since 4.4: Upgrade base system to OpenBSD 4.5 and packages accordingly, please see the OpenBSD site for a list of changes since 4.4; contains official, standard, unmodified OpenBSD kernel - previously, we had to ship a slightly modified version of the OpenBSD kernel to make the boot off CD media less cumbersome, but thanks to OpenBSD developer Kenneth Westerback, this has been improved in OpenBSD 4.5; last but not least, we have great new artwork, provided graciously by Tim Saueressig." Here is the complete release announcement. Download (SHA256): bsdanywhere45-i386.iso (628MB), bsdanywhere45-amd64.iso (699MB).

 

BSDanywhere是基于OpenBSD的自启动运行光盘镜像。它包含了整个OpenBSD基础系统(不含编译器),并带有一份图形桌面、一套非典型 的软件收藏、自动硬件检测,以及对很多显示卡、声卡、SCSI、USB设备及其他外设的支持。BSDanywhere可以作为一份教学UNIX系统,一套 修复环境,或者是硬件测试平台来使用。

No Comments 2009-05-06 22:35:39 by No.0023

My DAL Util CLass

Tags: Java

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.RowSet;
import javax.sql.rowset.CachedRowSet;

import com.sun.rowset.CachedRowSetImpl;

public class DALUtils {
    /*
     * Data Access Layer Util Class.
     */
    public static RowSet query(Connection conn, String sql) {       
        try {
            ResultSet rset = null;
            Statement stmt = conn.createStatement();
            rset = stmt.executeQuery(sql);
            CachedRowSet crs = new CachedRowSetImpl();
            crs.populate(rset);
            stmt.close();
            return crs;
        } catch (SQLException ex) {ex.printStackTrace();}
        return null;
    }
   
    public static int exec(Connection conn, String sql) {       
        try {
            int rt = 0;
            Statement stmt = conn.createStatement();
            rt = stmt.executeUpdate(sql);
            stmt.close();
            return rt;
        } catch (SQLException ex) {ex.printStackTrace();}
        return 0;
    }

    public static List<Object> resultSetToList(ResultSet rs, String className) {
        List<Object> list = new ArrayList<Object>();
        try {
            ResultSetMetaData meta = rs.getMetaData(); 
            Object obj = null; 
            while (rs.next()) { 
                obj = Class.forName(className).newInstance(); 
                for(int i = 1; i <= meta.getColumnCount(); i++)  { 
                    String colName = meta.getColumnName(i);
                    String methodName = "set" + new String(colName.charAt(0)+"").toUpperCase() + colName.substring(1);
                    Object value = rs.getObject(i); 
                    Method method = obj.getClass().getMethod(methodName, value.getClass()); 
                    method.invoke(obj, value); 
                } 
                list.add(obj); 
            } 
        } catch(Exception ex) {ex.printStackTrace();}
        return list;
    }
   
    public static List<Map<String, Object>> resultSetToList(ResultSet rset) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
       
        try {
            ResultSetMetaData meta = rset.getMetaData(); 
            while (rset.next()) { 
                Map<String, Object> m = new HashMap<String, Object>(); 
                for(int i = 1; i <= meta.getColumnCount(); i++)                   
                    m.put(meta.getColumnName(i), rset.getObject(i));
                list.add(m); 
            } 
        } catch(SQLException ex) {ex.printStackTrace();}
        return list;
    }
   
    public static List<String> getColumnLabelList(ResultSet rset) {
        List<String> list = new ArrayList<String>();
        try {
            ResultSetMetaData meta = rset.getMetaData(); 
            for (int i = 1; i <= meta.getColumnCount(); i++)
                list.add(meta.getColumnLabel(i));
        } catch(SQLException ex) {ex.printStackTrace();}
        return list;
    }
   
    public static int getTableMaxCount(Connection conn, String tableName) {
       
        int cnt = 0;
        String sql = "select count(*) from " + tableName;
        try {
            Statement stmt = null;
            stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while(rset.next()) {
                cnt = rset.getInt(1);
            }
            stmt.close();
        } catch (SQLException ex) {ex.printStackTrace(); }
        return cnt;
    }
   
    public static Map<String, Integer> getPagerData(Connection conn, String tableName, int pageSize, int pageCnt) {
        int maxCnt = getTableMaxCount(conn, tableName);
        int totalPageCnt = (maxCnt + pageSize -1) / pageSize;
//        int pageCnt = 1;
//        if (page != null && page.length() > 0) pageCnt = Integer.valueOf(page);
        if (pageCnt > totalPageCnt) pageCnt = totalPageCnt;
        if (pageCnt <= 0) pageCnt = 1;
        int offset = (pageCnt -1) * pageSize;
       
        Map<String, Integer> m = new HashMap<String, Integer>();
        m.put("maxCnt", maxCnt);
        m.put("pageCnt", pageCnt);
        m.put("totalPageCnt", totalPageCnt);
        m.put("offset", offset);
        m.put("pageSize", pageSize);
        return m;
    }
   
    public static String getTableData(Connection conn, String sql) {
        /*
         *  return table head and body
         */
        StringBuffer sb = new StringBuffer();
        if (sql.toUpperCase().contains("SELECT"))
            sql = "select * from (" + sql + ") a limit 0, 1000";
       
        RowSet rs = query(conn, sql);
        sb.append("<thead>");
        sb.append("<tr>");
        List<String> LabelList = getColumnLabelList(rs);
        for (String s: LabelList) {
            sb.append("<th>");
            sb.append(s);
            sb.append("</th>");
        }
        sb.append("</tr>");
        sb.append("</thead>");
       
        List<Map<String, Object>> dataList = resultSetToList(rs);
        sb.append("<tbody>");       
        for(Map<String, Object> m: dataList) {
            sb.append("<tr>");
            for (String s: LabelList) {
                sb.append("<td>");
                sb.append(m.get(s).toString());
                sb.append("&nbsp;</td>");
            }
            sb.append("</tr>");
        }
        sb.append("<tbody>");
       
        return sb.toString();
    }
   
    public static String getTableData(Connection conn, String tableName, Map<String, Integer> pagerData) {
        int offset = pagerData.get("offset");
        int pageSize = pagerData.get("pageSize");   
        String sql = "select * from " + tableName + " limit " + offset + ", " + pageSize;
       
        return getTableData(conn, sql);
    }
   
    public static void main(String args[]) {
        Connection conn = null;
        RowSet rs = query(conn, "select * from plantMapping");
        resultSetToList(rs, "");
    }
   
}

No Comments 2009-03-20 22:45:01 by No.0023

必备的 Java 参考资源列表

Tags: Java

from http://www.ibm.com/developerworks/cn/java/j-javaresources.html?S_TACT=105AGX52&S_CMP=NL&ca=dnl-cn-03052009&open&cm_mmc=4962-_-n-_-vrm_newsletter-_-10104_107179&cmibm_em=dm:0:14308375

自 Java 平台从 1995 年作为一个整体引入编程社区开始,它的发展已经远远超出了早期 Java 专家和推介者所设想的“applet 无处不在”这一远景。相反,Java 世界出现了 Swing、与 servlet 结合,从而发展为 J2EE、出现了 EJB、超越了 Spring 和 Hibernate、添加了泛型,变得越来越具有动态性,然后实现了函数化,在我撰写本文时,Java 继续朝着各种有趣的方向发展。

这使得没有一直跟随学习这门语言的 Java 程序员感到有点吃力。

作为一名演讲人、博客作者、顾问和导师,经常有一些初、中级 Java 程序员向我询问相关参考资源,以便帮助他们掌握这个广泛的、复杂的、看似永无止境的语言。几年前,我发表了一个 推荐读物列表 专门解答这个问题,但最近,developerWorks 的 Java 编辑让我整理一份更完整的参考资源列表,而不仅仅包括书籍 &mdash; 考虑到资源列表现在已经增长到了预期消费者即使花费十年的时间阅读也仍然不得要领的地步,这是一个很好的提议。

为了保证客观性和避免不利的影响,我决定给出各种参考资源的博客空间(blogosphere):Web 站点、研讨会、书籍、博客、工具,以及任何 Java 开发人员可能感兴趣或对他们有用的内容,帮助他们从庞大的参考资源中找到自己需要的内容。

这份列表得到了很多人的响应(在此我要感谢所有的回复者)。

在开始之前,需要解释一点:这些参考资源不一定是 Java 世界中最流行、最强大或最有影响的资源 &mdash; 这份 列表可能完全不同(尽管我怀疑其中也会出现很多相同的资源);但每个希望获得成功的 Java 开发人员都应该将这些参考资源保存在浏览器、书架或备忘录中。与任何此类型的列表一样,人们总会争论哪些内容本来应当包含进去但却没有出现在列表中,或本 不该有的内容却出现在列表中。

现在开始正式介绍这些参考资源。

Web 站点和开发人员 Web 门户

网络无疑改变了共享资源和出版的本质(对我也是一样:您正在网络上阅读这篇文章),因此,从每位 Java 开发人员都应该关注的关键 Web 站点和开发人员门户上的关键 Java 参考资源入手似乎比较合理。

在 许多情况下,Web 站点和/或开发人员门户的价值不仅仅在于其中提供的参考资源或文章,还包括围绕该门户或站点的社区。静态 Web 页面和下载文件的时代已经一去不复返了,取而代之的是更“积极” 的论坛、主题文章和交互式讨论,讨论者不仅包括频繁访问该站点并组成社区的开发人员,还包括社区成员和门户所有者。随着技术的发展,开发人员也必须跟上技 术的步伐,同时,门户也要不断发展,以满足社区不断变化的需求;与社区保持开放的关系是实现活跃门户的关键因素。

Web 站点列表(带有 URL):

  • java.sun.com
    这是 JDK 的发源地,通常是 Java 开发人员下载 JDK 和文档副本的首要站点。除此之外,该站点还是查找有关整个 Java 平台的信息的好来源,包括一段非常详细的 JVM 介绍(Hotspot),它极其深入地描述了 JVM 的细节。

  • java.net
    Java.NET 站点汇集了开源项目、文档、博客、wiki、新闻和其他社区资源等各种内容。它是 Java 技术的主要信息来源,不过提供的信息似乎过于繁杂。不过尽管如此,浏览项目列表也会找到一些真正有用的东西,如 FEST-Swing 项目,它旨在创建一个用于构建 Swing 应用程序的“方便接口”,大大简化了单元测试的创建。

  • InfoQ
    由 Floyd Marinescu 创建,他是 The ServerSide 的名誉主编,InfoQ 与这里列出的许多其他参考资源的区别是,它是技术中立的,不仅包括 Java 代码,还包括 .NET 和 Ruby,并提供了大量灵活的方法和见解。尽管 InfoQ 上的评论社区并没有 TheServerSide 上的社区那么庞大和多样化,但是该社区中的讨论通常更加温和,而不会过于激烈。

  • TheServerSide
    通常称为“the Slashdot of Java”,TheServerSide 是第一个公开质询、热烈讨论和积极研究企业 Java 主题的地方。有关轻量级容器(以 Spring 为代表)的一些最初理念就是从这里诞生的,这里产生了许多 Java 社区中的“思想领导者”。尽管最近的激烈争论有时会带有主观色彩,但 TSS 将始终是许多 Java 内容的发源地,这些内容构成了我们现在所拥有的 Java 系统;同样,从 TSS 总是可以了解各种 Java 技术的历史。

  • DZone
    DZone 最初是一个面向 Java 开发人员的资源站点,但最近它扩展到了其他技术领域。包括 .NET 和 Ruby,以及其他几个主题“专区”。这样,不仅 Java 开发人员可以利用它来专门研究 Java 专区,还会有一些跨平台的内容,聪明的开发人员可以充分利用这一点。

  • developerWorks Java 技术专区
    如果您正在阅读本文,那么您已经找到了 dw。为了解释清楚,我必须强调除本文外,我曾在该站点发表过其他一些文章,但我可以诚实地说,dw 是一个有关 Java 编码和 JVM 的文章和资源的优秀来源。特别注意,请务必查看 Java 理论与实践,这是一个由 Brian Goetz 撰写的长期系列,其中包含一个共分三部分的 JVM 垃圾收集器系列文章,它以一种浅显易懂的方式介绍了 GC 的核心概念。

  • IBM alphaWorks
    alphaWorks 是 developerWorks 的姊妹站点,IBM 研究人员和员工在此提供他们认为会确定未来主流的工具和技术。alphaWorks 提供了十二种不同的类别,从而为 Java 开发人员提供了机会来尝试各种非常超前的工具、语言、库和其他项目 &mdash; 它们正处于研究阶段。注意,许多项目是为了证明一个特殊的研究点,然后就会停止,使项目保持在当前的效率状态。警告:有 些项目不是开源的,而有些项目不包含源代码。但相当数量的 alphaWorks 项目最终会成为主流,要么成为受 IBM 支持的产品,要么作为可从一些 IBM 开放源码位置下载的可用工具。无论如何,只要关注 alphaWorks,就可以了解 Java 发展的方向以及方式。

  • OnJava
    OnJava 是一个独立运行的站点,用于跟踪活动、记录会议、提供各种有关企业 Java 的观点。事实上,这里提供的大部分信息也可以在别处找到,不过这一点对于几乎所有开发人员门户(包括上面提到的)都是一样的,想了解 Java 的各种开发的开发人员只需打开该站点上的 文章列表,然后逐一阅读。

  • Artima
    Artima 由 Bill Venners 创建,目前已经发展成一个巨大的汇集了文章、博客和访谈的站点,它不是完全侧重于 Java 开发,并且其中还包括了 Java 著作方面的权威(查看 Bill Joy 自 Java 5 出版后,对 Java 语言复杂性的怀疑,以及他用于证明所担心问题的经典示例 &mdash; Enum<>)。该站点非常值得您访问。

注意,对于上面大部分站点,为充分利用站点/门户,需要进行某种形式的注册。在撰写本文时,所有文章基本上都是免费的,只需要一个用户名/密码登录,以便 它们能惟一识别访问者,还需要提供电子邮件地址,以便定期发送主题新闻资讯或电子邮件(据我所知,所有站点将允许您不提供电子邮箱,但我还未这样做过,因 为我发现新闻咨询会不时告诉我一些有趣的、我还不知道的信息,收件箱中的这些邮件是很有用的)。

博客(Weblog)

Blog 使开发人员可以轻松地表达想法、概念、理念、论点并围绕技术展开思想讨论,并了解特定技术领域中非常有影响力的“思想领袖”。此外,博客可以通过提要阅读 器在本地使用,提要阅读器将文章/条目下载到本地,以便在脱机时也可以使用。事实上,博客已经变得非常普遍,以至于出现了专门的设备(如 Amazon Kindle)来轻松获取开发人员所需要的信息。

关键在于从几百万个博客中找到感兴趣的内容。每位开发人员都有他自己的选择,哪些需要阅读,哪些不需要,但有些博客是最基本的,包括:

注意(大多数)博客内容都属于个人观点;在这里分享的一些观点可能在以后被证明是错误的 &mdash; 永远不要只根据博客条目中的信息来对产品下结论。但如果要使思维过程突破常规,博客将是一种增强技能的强大资源。

包和/或库

跟踪 Java 生态系统中的所有库和包是一项繁杂的工作,并且 Java 开发人员很容易就会忽略这项工作。结果,开发人员常常发现自己正在编写的内容其实已经存在于平台内(只要他们浏览一下就会发现这一点)。

下面列出了“每位 Java 开发人员至少应该知道其存在(最好知道如何使用)的十大 Java 包”:

  • java.lang.reflect
    许多 Java 库和工具都依赖于 Reflection 包,所以了解它成为了一项必要要求(如果在使用时不理解它,会因为安全策略或其他类型的基础设施不匹配问题而导致失败)。与 Reflection 结合使用的还有 Java 5 注释和 java.lang.annotation

  • javax.script
    Java 系统一直在强调动态语言,了解如何从 Java 代码内部使用脚本语言可以使开发人员扩展他们的系统,而不用经历昂贵的编译-链接-运行-测试环节。

  • javax.management java.lang.management
    该管理包也称为 Java 管理扩展(Java Management Extensions,JMX),是一种监视 Java 应用程序运行的强大工具;因此,开发人员应该熟悉和习惯使用 JMX,以便构建实际上可以被系统管理员使用的软件。不要忘记查看随 JDK 一起发布的 jconsole 工具,它演示了一种应用程序健康状况指示板,同时演示了可以构建的内容,它本身就是一个很有用的工具(密切关注构建 jconsole 插件来在 jconsole 内启用脚本支持的脚本 demo,它是任何合格的系统管理员都应该掌握的一个强大工具)。

  • java.util.concurrent.*
    并发性是开发人员在未来十年内将要面临的最大问题,Java 开发人员用来修复并发性 bug 的主要武器就是此包及其子包中的类( .atomic .locks )。学习使用它将与学习编写类一样(甚至更)重要。了解它,使用它,并喜欢上它。

  • java.util
    java.util 中的类同样重要。它们被频繁引用,特别是 Collections 类,所以 java.util.* 应该像 java.lang 那样自动导入。

  • java.beans
    JavaBeans 无疑是整个 Java 生态系统中都要使用的核心元素之一,使用商业含义不是很明显的名称“POJO”(普通的旧 Java 对象)。POJO 仍然基于 JavaBeans 代码、API 和规范,因此花一点时间了解 java.beans 中的类可以帮助编写更好的 POJO。

  • java.util.logging
    诊断和审计日志迅速成为跟踪运行程序执行的强大工具,不管是出于调试目的,还是出于管理和监视目的。我的忠告是:学习使用这个包和其开源的姊妹包 log4j

  • java.security.*
    Java 安全 API、策略机制和权限类是使 Java 环境成为安全计算平台的核心部分,但只有开发人员知道如何利用这个包。避开加密 API &mdash; 在详细了解每个对您有用的选项后再使用它们。它们不难使用,但要获取加密权限(意味着没有大的缺陷)需要花费几年的时间,有大量来自其他加密专家的相关评 论。首先使用其他机制,如 SSL/TLS 和 GuardedObject/SignedObject/SecureObject 类。

  • javax.xml.parsers.* javax.xml.bind javax.xml.transform.*
    XML 逐渐出现在 Java 开发人员的视野中,能够解析(直接解析或通过对象-XML 库)和转换它(使用 XSLT)是开发人员必须拥有的一项重要技能。

  • javax.sound.*
    这不是一项必需的技能,但知道如何偶尔弹出声音效果可以使原本乏味的代码充满生气。此外,在没有直接可用的显示时,还可以用声音来向系统提供信号和反馈。 除此之外,让抛出栈跟踪的机器发出恐怖电影里的尖叫,这样用户可以知道刚刚发生了不好的事情,从而增加了一些刺激的乐趣。

当然,还有许多其他(位于 JDK 内部和外部)的包值得学习,但掌握以上这些就足以使您很好地处理大多数项目,更不用说应付大多数工作面试。

研讨会

研 讨会继续在 Java 开发人员的培训中扮演着主要角色,特别是那些还没有获得足够的认可,尚未成为大型培训公司培训课程的主题。研讨会也是开发人员结识其他具备各种技能和职责 的开发人员的绝好机会,使与会者有机会做一些非常过瘾的(并且是完全必要的)事情:发泄对工作环境的不满。

参加研讨会也会产生一种有用的副作用(如果积极管理,可以为研讨会锦上添花):与会者可以建立开发人员小组。通 过可在世界范围内使用的电子邮件、邮件列表(如 GoogleGroups 或 Yahoo Groups)和许多其他轻量级 groupware 通信工具,了解参加研讨会的人员的信息比以前更加容易。这些通过午餐和晚宴建立起来的友谊可以持续一生,并且随着时间流逝愈加有益,特别是在评估新技术时 更是如此。

让一位有着 30 年经验的与会者、演讲者、组织者(不是我,是我的一位朋友)的话为您提供指引:“技术新手参加研讨会是为了通过期间举办的各种会议获取知识,资深人士参加研讨会是为了宴会和结识朋友。宴会帮助您结识朋友,他们可以帮助您提升自己的职业”。

研讨会包括:

  • No Fluff, Just Stuff
    这是一个我特别热衷的研讨会,不仅仅因为我是那里的定期演讲者,而且还因为十大 JavaOne 2007 演讲者中有 7 个人都是 NoFluffJustStuff(目前的或以前的)演讲者。Java 开发人员不会发现比这里更加关注技术主题的讨论,而且也不会找到比它价格更合理、召开位置更便利的会议:您的家乡(北美大陆每年有 30 多场会议 &mdash; 范围跨越欧洲和亚洲,这样,您便有机会驱车去参加 NFJS 大会,而不用花几千美元飞到一个遥远的城市并且住在旅馆中)。同样,本文中推荐的许多书籍都是由出席 NoFluff 研讨会的专家编写的,这一点也就不足为奇了,而且 NFJS 的组织者们一直在不遗余力地查找有关各种 Java 和 Agile Development 主题的“重要资源”。

  • JavaOne
    这是一个规模宏大且非常客观的会议,并且一直在旧金山(在这个地方举行有利也有弊,具体取决于您公司的出差预算情况)举行,不过世界上还没有哪一个会议能像 JavaOne 这样把这么多关键 Java 推动者聚集到一个地方。

  • JAOO
    为了不冷落我们的欧洲 Java 同胞,每年在丹麦奥尔胡斯举行一次 JAOO 会议,该研讨会已经举办了将近二十年,并且没有任何衰落的迹象。JAOO 不仅吸引了一些顶尖的演讲者和作家,而且作为一个跨技术的研讨会,在技术方面具有很好的包容性,也就是说,与会者早上可以出席 Java 研讨会,午餐时与一些 C++ 开发人员交谈,下午了解 Microsoft 的 &reg; Silverlight 的最新发展成果(或任何别的新事物),晚上则与 Smalltalker 喝喝啤酒。如果您想增长见识,JAOO 或它的姊妹会议 QCon(在 InfoQ 工作人员的协力支持下召开)将是一个不错的起点。对那些居住在“澳大利亚或新西兰” 的 Java 同胞,今年(2008)在布里斯班和悉尼首次召开了 JAOO;所有迹象表明,在未来几年来内,将会在这里再次举行 JAOO。

  • Devoxx
    该研讨会是以前的 JavaPolis,在比利时安特卫普这一飞速发展的城市举行,参加这一研讨会是遇见欧洲同行的绝好途径(而且还可以品尝到上等的比利时啤酒)。演讲者都 是该领域的首席专家,他们将集中讨论一些尖端技术。该研讨会也提供了优秀的平台和许多机会让您与开发人员同行进行交流。

  • Jazoon
    Jazoon 是一个相对较新的研讨会,2007 年在苏黎世(瑞士)召开。因为参与者名单上有 Martin Odersky(Scala 的创建者)、Neal Gafter 和 Simon Phipps(Sun 的首席开放源码执行官)之类的名字,所以 Jazoon 有望吸引大量演讲者。Jazoon 完全侧重于 Java 主题并在欧洲的中心召开,它有望成为欧洲 Java 同胞们的一项重要日程。

还有其他一些研讨会,目标受众也各不相同,但以上列举的研讨会是直接针对 Java 开发人员的。那些希望扩大自己视野的开发人员应该考虑参加“其他” 技术研讨会,如在世界各地举办的各种 Perl、Python、Ruby 甚至 .NET 会议;接受新的观念有时需要研究一组全新的问题。

书籍

对开发人员而言,没有哪一种资源能比价格便宜的传统书籍更容易获取。只需要去当地的书店(如果您住在边远地区,可通过 Web 浏览器查找 Amazon 来购买书籍),就可以找到大量珍贵的技术知识和经验……只要您肯在大量资源中仔细寻找。

这些书籍假设读者已经有了 Java 语言和工具集的应用知识;Java 入门书籍非常普遍,而且大多数讨论的是相同的基本内容。选择书籍需要一定的技巧,要考虑作者的写作风格,有时甚至要考虑随书光盘中是否包含了练习的参考答案(如果包含了练习的话)。

掌握了基本知识后,考虑阅读以下书籍:

  • Effective Java(第 2 版),Joshua Bloch
    每位 Java 开发人员的书架上必备的第一本书,必须定期翻阅、随时查看。

  • Java Concurrency in Practice ,Brian Goetz
    每位 Java 开发人员书架上必备的第二本书,因为每位 Java 人员(不管他们愿意与否)都会操纵多线程环境的内部。

  • Better, Faster, Lighter Java ,Justin Gehtland 和 Bruce Tate
    这一小巧的册子被许多 Java 开发人员当作攻下以 Spring 为首的“轻量级容器” 环境的“利器”,填补了大多数大型 EJB 服务器(如 WebSphere 或其他事务处理中间件)留下的空白。作者还介绍了基于 POJO 的开发周期,指出了该理念的优点和缺点,以及如何采取更轻量级的方法构建企业应用程序,使用了 Spring 和 Hibernate 这类不会降低生成系统的功能和能力的工具。

  • Effective Enterprise Java ,Ted Neward(我)
    提供 75 种方法来确保企业 Java 应用程序(不管它们是用 Spring、EJB、Web 服务,还是其他技术实现)不会出现问题。就像 Effective Java 不是针对初级 Java 程序员一样,Effective Enterprise Java 同样也不是针对刚开始学习“企业 Java” 基础知识的开发人员。

  • Release It! ,Michael Nygard
    任何打算编写针对生产服务器的软件的人都应该阅读本书 &mdash; 它深入探讨了生产环境中可能出现的错误,以及如何处理潜在的故障,要么恢复故障,要么完全避免故障。

  • Inside the Java 2 Virtual Machine ,Bill Venners 或 Component Development for the Java Platform ,Stuart Halloway
    Java 开发人员一旦学习 Java 这门语言后,迟早要了解底层平台 &mdash; Java 虚拟机本身,这意味着垃圾收集以及 Reference 对象、ClassLoader、线程和监视器等主题将成为接下来探讨的重点领域。两本书中的任何一本(或两本)都是非常有用的指南。但是这两本书都有一个 很大的缺陷:它们的出版时间比较早。Inside 是 Java 1.2 期间出版的,此后不久便出版了 Component-Based。幸运的是,大多数 Java 虚拟机自那时起一直没有发生什么变化,所以如果读者遇到除 JDK 1.2 以外的问题时,可以暂时放下本书并继续研究下一主题。

  • Martin Fowler 撰写的 Patterns of Enterprise Application Architecture 、Gregor Hohpe 和 Bobby Woolf 撰写的 Enterprise Integration Patterns
    说到设计方法和理念,这两本书都是典范,同样假定大部分读者都阅读过由 Gamma、Helm、Johnson 和 VlissidesBoth 合著的经典书籍 Design Patterns。模式书籍通常为开发人员提供了一些基本的概念构建块进行调整和组合,从而创建更健壮的设计,这些构建块在单独使用时就不怎么有效。

  • Java Power Tools ,John Smart
    很多人推荐这本书,它详细介绍了 Java 生态系统中各种可用的工具。Smart 还提供了关于本书的培训课程(Java Power Tools Bootcamp),但大多数开发人员获取信息的最简单方式还是通过 dead-tree 版本。

  • The Pragmatic Programmer ,Andy Hunt 和 Dave Thomas
    每个程序员应该人手一册,不管他实际使用的语言或平台是什么。本书适合有经验的读者和从事多年编程工作的程序员。本书可与 Fred Brooks 的经典著作 The Mythical Man-Month 媲美。

  • The Productive Programmer ,Neal Ford
    这本最近出版的书籍与 Pragmatic Programmer 一样经典,它主要讨论各种技巧和技能,程序员可以借助这些技巧和技能提高他们的效率,获得比 IDE 更高的生产力。

  • The Pragmatic Starter Kit
    本套件由 Pragmatic Unit Testing (with JUnit)Pragmatic Project AutomationPragmatic Source Control (with Subversion) 组成。每本书都清晰、针对性地讨论了各个主题的核心内容,它们直接深入主题,没有涉及其他无关内容。例如,Project Automation 是阅读 Ant in Action 的“开胃书”,但同时也讨论了什么是优秀的构建流程以及构建它们的原因。

  • Ant in Action(第 2 版),Erik Hatcher 和 Steve Loughran
    Ant 是面向 Java 平台的优秀构建实用程序(参阅后面的工具内容了解更多详细信息),本书是目前为止介绍强大 Ant 功能的最佳读物。在学习如何使用 Ant 时,Ant in Action 还演示了单元测试、持续集成和生产部署实践,这一切都是从实际 Java 开发人员的日常实践的角度出发的。

工具

正如盖房子不仅仅是“抡起锤子在板上钉钉子” 一样,Java 开发也不仅仅是“掌握 IDE 并开始编写代码”。好的 IDE 当然能为编写 Java 代码出力不少,但其他的工具也可以提供与 IDE 相等的(也许更好的)价值。

排名不分先后……

  • IDE
    当然,工具讨论首先从 IDE 开始。在避开商业限制方面,Eclipse 和 NetBeans 都是开源且免费的,因而提供了吸引人的“第一步”。

  • 单元测试
    掀起单元测试革命的工具是 JUnit,但其他几个工具也得到普及,包括 TestNG,自然还有 JUnitPerf 等等。

  • 持续集成
    持续集成服务器不断检查不受源控制的代码,执行构建,对它运行单元测试,并通常通过电子邮件向开发人员报告所有构建故障。有几个开源版本可用,但有一个已经得到了广泛关注,即 Hudson,它是一个拥有大量插件和具有高可扩展性的持续集成服务器,它源自 CruiseControl ,它正是因为这一点而声名斐赫。

  • 静态分析
    FindBugs 是一个运行 Java 代码的开放源码静态分析工具,执行 n 向深度分析来找出所有可能的代码路径,并基于一组可扩展规则报告找到的各种错误和警告。FindBugs 由 William Pugh 开发(这位 William Pugh 还发现了 Java 内存模型中的 bug),其最值得炫耀的地方是它能够分析 Java 代码来查找并发 bug,每位程序员都会为之欢呼。

  • 网络包跟踪
    WireShark (以前一般称为 Ethereal)使程序员可以查看网络上传播的内容,让他们有机会检查正在网络上传播的内容是否合适,而那些 合适的内容(比如敏感信息和明文密码)没有出现在网路上。

  • 虚拟化
    类似 VMWare、Xen、VirtualBox 或 VirtualPC 之类的虚拟化工具(或者更准确地称之为平台)使程序员能够创建与生产机器将运行的环境相同的环境,而不失去主机 PC 环境的生产力。它还提供了一种便利方法来在本地尝试“处于试验阶段的” 软件,而不必让处于生产状态的机器冒险。如果不是完全的开源项目,大多数虚拟化工具都提供有某种免费选项。

您不必感到惊讶,这些工具中的其中一些是商业工具;如果一个工具一个星期平均能帮您节约一个小时的时间,您需要多长时间就可以收回购买该工具的资金呢?如 果管理人员不认同这个观点的话,那么仔细计算使用某一工具节省的时间(假设是开发人员的时间,或者是产品诊断或执行时间)后,管理员终会发现,他们在这些 工具上的吝啬是一件得不偿失的愚蠢事。

向贡献者致谢
感谢所有访问我的博客(blogs.tedneward.com)的读者,他们从百忙中抽出时间来向我推荐应该包含在此列表中的参考资源;他们(当然不是 所有人)包括 Greg Ostrovich、Ryan Slobojan、Hamlet D'Arcy(他认为自己是个外星人,正在为 IT 打工来赚钱修复他的宇宙飞船,从而返回自己的星球)、Pierre Marc-Larocque、Prashant Rane、Marc Stock、Eric Kerwin、Morten Anderson、Alex,以及 Yvonne Miller、Rahul Raj、Brian Sletten 和 Neal Ford。

未来趋势展望

当 然,Java 开发人员花所有时间来学习当前的技术并不是一件好事,学习完后,新的技术又接踵而至,使学过的所有内容一下子都变得过时了。随时关注“未来发展趋势” 同样重要,惟有这样,当公司 CTO 突然在电梯里问您“我最近听到的函数式语言是怎么一回事,我们需要对此进行研究吗?” 时,您才会给出连贯合理的答复。

排名不分先后,一些围绕 Java 平台的“未来趋势” 包括:

  • 动态语言
    Groovy 和 JRuby 之类的语言衍生出了其他一些值得研究的项目,如 Clojure 和 Fan,试验表明,低强度类型的环境能提供更好的生产力和更多的选项。这并非鼓励您放弃 Java 语言,不过,最好的效果总是来自强强联合。

  • 函数式语言
    其兴起源于 Scala,由于函数语言一般支持复合函数并缺少共享状态,因此提供了隐式并发性的优点(尽管有时它的语法很难让人接受)。Jaskell 是一个 Haskell-on-JVM 实现,同样,Clojure 也适合在这里使用,您可以想象生产环境中的软件事务内存是什么样子。

  • Java 中的闭包
    添加闭包支持(也称为 lambda 或匿名方法)将简化部分 Java 编码工作,对是否在 Java 7 发行版中包含此支持进行过热烈的讨论。社区对此问题的讨论深度不一,因此 Java 程序员有必要花点时间研究这个问题,并看看讨论的所有内容。

  • DaVinci 机器
    JVM 的一个新版本对其他语言(比如上面提到的动态语言和函数式语言)更友好,这最终可能会也可能不会使它进入主流 JVM 发行版。随时关注这一点有助于理解在当前 JVM 上运行动态/脚本语言的利弊。

  • 用户界面开发
    在 Flash/Flex、Silverlight 和 JavaFX 的支持下,Web 浏览器得到了显著的(并且几乎是惊人的)改变。这还不考虑 Java 领域中的新服务器端 Web 框架和 Google Web 工具包(Google Web Toolkit,GWT)之类的特例。用户界面一直是、而且以后将继续是一个吸引人的亮点。了解一到两个(更不必说 Swing 或 SWT 之类的“富客户端” 库)库将对构建比 HTML 页面更具交互性的内容大有裨益。

记住,与任何和“未来” 相关的事物一样,现在讨论的内容可能最终证明是错误的方向、昙花一现的事物、对行业的一种影响,也可能是下一个重大事件;保持开放的思维,同时也要保持适当的怀疑。

结束语

请随意补充此列表 &mdash; 最终会得到一份更完善的参考资源列表。因为 Java 世界在不断发展,不断变化和成长,所以列表的内容会随时间而改变。这是一件好事;如果我们必须使用 1995 年时期的 Java 环境,我们早就转向其他技术了。

积极参与到 Java 世界中来:贡献补丁、增强,如果没有合适的贡献,就构建自己的工具。也许您的项目 5 年以内会一直出现在这个列表中。

 

参考资料

 

关于作者

Ted Neward 的照片

Ted Neward 是 ThoughtWorks 的一名顾问,ThoughtWorks 是一家在全球提供咨询服务的公司,他还是 Neward & Associates 的主管,负责有关 Java、.NET 和 XML 服务和其他平台的咨询、指导、培训和推介。他现在居住在华盛顿西雅图附近。

 

1 Comment 2009-03-06 21:05:27 by No.0023

OpenBSD 4.5 Pre-Orders Online

Tags: OpenBSD

OpenBSD 4.5 cover

Pre-orders are now being accepted for OpenBSD 4.5, scheduled for release on May 1st, 2009.

The developers bring us an amazing amount of cool new stuff (Accelerated video drivers, OpenSSH 5.2, LDoms Virtualization, pflow(4) NetFlow export interface, aucat(8) audio server capability and lots more). There are over 5500 ports and packages for easy installation.

Of course, t-shirts and posters are available too. Order your set NOW! (International, Europe)

No Comments 2009-03-06 15:37:22 by No.0023

跟香港政府学做预算

Tags: others


日前,香港政府财政司司长 曾俊华 在立法会宣读了《2009 至 2010 年度政府财政预算案》。虽然这几天香港诸媒体对于该预算案各有褒贬,但是在我们内地民众看来,该预算案的制作技术、展现方式以及所体现的诚意,令人叹为观止。

香港政府财政司为了让公众方便地获取预算案相关信息,颇动了一番脑筋,费了一番折腾。繁、英、简三种文字的网站 http://www.budget.gov.hk/ 专为公布预算而设。该网站中详细罗列了预算案演辞、预算案重点、预算案全文、网上广播、新闻稿、图片集等多种格式的文件,任何人都可以从该网站上自由下载,全方位地了解预算案相关的各项细节。为了让青少年市民充分理解预算案内容,财政司还特意制作了图文并茂的漫画版:
香港政府2009至2010年度财政预算案漫画版



除了表现形式、技术手段之外,政府各部门预算编制之详尽,也是很让人叹服的。以知识产权署预算为 例,其中的《管制人员报告》部分列出了各纲领下 2007 年财政拨款实际使用情况、2008 年预算修订情况,以及 2009 年预算。还在各项纲领预算后面详细交代该纲领各项宗旨,以及各项指标在 2007 年、2008 年的实际发生数字和 2009 年预算数字。各纲领末尾附有“2009 至 2010 年度需要特别留意的事项”,罗列了除上述指标之外与该纲领有关的工作事项。接下来是该署的三年财政拨款与人手编制分析图表。最后是三年财务(含 2009 年预算)账目及按分目列出的开支详情。通过这样一份内容丰富、数据翔实的预算案,民众就可以充分了解所纳税款究竟用在了哪里,为什么要这样用。

无论如何,香港政府在预算编制和公开方面的专业精神令人钦佩,值得学习。

 

from http://feedproxy.google.com/~r/hutuworm/~3/1fL-2gNOBkk/blog-post.html

No Comments 2009-03-05 21:46:10 by No.0023

sap rfc with python

Tags: Python, SAP

1. download rfcsdk on sap.com, download saprfc for python on http://pypi.python.org/pypi/saprfc/0.07

2. install rfcsdk and saprfc with docs

 

#! /usr/bin/env python

import pprint
import saprfc

conn = saprfc.conn(ashost='hostname', sysnr='00', client='220', lang='EN', user='xxxxx', passwd='xxxxx')
conn.connect()

print "am I connected: ", conn.is_connected()
print "sysinfo is: "
pprint.pprint(conn.sapinfo())

iface = conn.discover("RFC_READ_TABLE")
iface.query_table.setValue("TRDIR")
iface.ROWCOUNT.setValue(10)
iface.OPTIONS.setValue(["NAME LIKE 'SAPL%RFC%'"])

conn.callrfc(iface)

print "NO. PROGS: ", iface.DATA.rowCount()
#print "PROGS DATA: "
#pprint.pprint(iface.DATA.value)

# get the SAP Data Dictionary structure for TRDIR
str = conn.structure("TRDIR")

# various ways for iterating over the results in an
#  interface table
for x in iface.data.value:
  print "Doing: " + str.toHash(x)['NAME']

#print "PROGS HASH ROWS: "
#for i in iface.DATA.hashRows():
#       print "next row: ", i

conn.close()

No Comments 2009-03-05 10:10:42 by No.0023

install Python 3.0 on AIX

Tags: Python, AIX

shell:~/python-3.0.1/bin >: python3.0
Python 3.0.1 (r301:69556, Feb 27 2009, 21:48:14)
[GCC 4.0.0] on aix5
Type "help", "copyright", "credits" or "license" for more information.
>>>
shell:~/python-3.0.1/bin >:

how to install:
shell:~/tmp/Python-3.0.1 >: configure --prefix=$u/python-3.0.1 --with-gcc
shell:~/tmp/Python-3.0.1 >: make
shell:~/tmp/Python-3.0.1 >: make install

No Comments 2009-02-27 22:04:56 by No.0023

50个实用的JavaScript工具

Tags: Ajax, javascript

 

JavaScript是一个功能强大的客户端脚本语言,许多现代化的网站和Web应用程序都会使用到它。JavaScript可以增强用户的体验,并提供丰富的互动式组件和功能。虽然它的语法相当简单,但是对开发者来说还是很有难度的,因为它要运行在Web浏览器中。

以下是我们为你推荐的50个相关工具:

JavaScript/AJAX编辑工具

  • jQuery UI
    jQuery UI是jquery官方推出的配合jquery使用的用户界面组件集合!包含了许多的界面操作功能,如我们常用的表格排序,拖拽,TAB选项卡,滚动条,相册浏览,日历控件,对话框等JS插件…



     

  • Google Web Toolkit
    Google 推出的一个开发Ajax 应用的框架,它支持用Java 开发和调试Ajax 应用。我们可以既充分利用Java语言的开发优势降低Ajax应用开发的难度,加快Ajax应用的开发速度,为Ajax的大规模应用创造可能,又可以充分 发挥Ajax技术的优势,创建更加动态和交互性更好的Web应用程序,提升用户的浏览体验。
  • Jx
    是一个JavaScript库,用于创建MooTools框架顶部的图形用户界面,有许多例子以及API文档在这里 http://jxlib.org/。



     

  • Freestyle Webtop Toolkit
    可以帮你减少复杂性和时间的消耗,让你专注于编程逻辑和用户界面设计或其他的处理(跨浏览器的兼容和DHTML和Ajax的开发)。



     

  • Script#
    是一个Ajax和JavaScript编辑工具,可以让开发者用C#进行编写。还允许.NET开发人员充分的发挥已学的知识,同时还为.NET框架提供强大的工具。



     

  • Aptana Jaxer
    号称世界上第一个真正的Ajax服务器,由Aptana提供的一个最新产品。它使用Jaxer的服务端Java脚本API操作对象和数据库,支持FTP、SMTP、HTTP等常用协议。Jaxer集成了许多非常流行的JavaScript库,如 jQuery, DojoExt JS
  • JS Regex Generator
    JS Regex Generator可以帮助JavaScript开发人员编写与字符串文字想匹配的正则表达式。经常用来检验文本的格式,如输入的日期或电子邮件格式是否正确。



     

  • WaveMaker
    WaveMaker是一个Web应用程序WYSIWYG构建工具。它能够创建基于Dojo Ajax widget,Spring与Hibernate的应用程序。这里有 Demo Applications



     

文档工具

  • JSDoc Toolkit
    是一个把js描述格式化成文档的工具。开发者只需按JsDoc的规范写好注释就可以很方便导出文档。
  • jGrouseDoc
    是一个开源项目,它可以将开发者的code comments使用类似于Javadoc的格式进行管理。



     

 

JavaScript调试工具

  • Firebug
    它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。 Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。另外有一个Firebug lite版本,可以通过javascript调用,包含在页面中,从而在其他非Firefox浏览器中使用。



     

  • Venkman JavaScript Debugger
    基于Mozilla的浏览器(如firefox)的一个功能强大的JavaScript调试环境。提供了一系列有用的功能和选项,如代码分析或检查脚本的性能。



     

  • Drosera
    为Safari准备的一个很好的调试工具。



     

  • Opera Dragonfly
    Opera Dragonfly其实就是类似Firebug那样的网站/网路应用程式开发工具,可以调试JavaScript、检查CSS和DOM、查看错误,是网站开发人员的好工具,支持PC和移动电话。
  • NitobiBug
    这是一个基于浏览器的JavaScript对象记录和检查工具-类似的Firebug。可运行在不同的浏览器(的IE6 + , Safari浏览器,opera,火狐)提供一致的和强大的工具,丰富了Ajax应用程序。
  • DebugBar
    是一款Internet Explorer插件。它可以用于检查DOM,HTTP,Javascript及HTML代码合法性等 ...



     

  • Internet Explorer Developer Toolbar
    同样也是类似于Firebug,由微软发布。该产品让开发人员能够深入探索和理解Web页面,帮助开发者更好地创建Web应用。

JavaScript的测试和验证工具

  • Test - JavaScriptMVC
    一个JavaScriptMVC组件,可以轻松的为JavaScript代码创建自动化单元测试。它可以让你有效的测试DOM时间(如表单提交),从而减少开发时间。



     

  • JsUnit
    是一个流行的JavaScript单元测试框架,还有一个类似的支持Java的单元测试框架被称为JUnit。允许你编写测试案例并提供工具来自动执行代码。
  • JSLint
    是一个JavaScript验证工具,可以扫描JavaScript源代码来查找问题。一旦发现问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。



     

  • Crosscheck
    是一个开源的JavaScript测试框架,不在Web浏览器中也可以进行测试。
  • YUI Test
    它 是由Yahoo! UI Library开发的一个JavaScriptMVC测试插件,能够让你模范大部分DOM动作,比如写,拖拽,比如模范AJAX响应,并且能够使用断言 (assertions)。它能够象函数一样运行,并且能够在不同的console窗口进行集成测试。



     

  • J3Unit
    是 JavaScript单元测试领域的新兵。这一特别的库所提供的超越于JSUnit的功能在于,它能直接与服务器端的测试套件(如 JUnit或Jetty)溶合。对JavaScript开发者来说,这可能是极其有用的,因为他们能够同时为他们的客户端和服务器端代码快速地遍历所有的 测试用例。
  • Regular Expression Tool
    Regular Expression Tool是一个在线工具,可以用来测试你的正则表达式,使用这个工具很方便。



     

  • JavaScript Regular Expression Tester
    另一个脱离Web浏览器的正则表达式测试工具。



     

  • JSLitmus
    JSLitmus是一个轻量级的工具,用于javascript的性能测试



     

安全工具

  • AttackAPI
    AttackAPI是一个基于Web的攻击构造库,它可以结合PHP、JavaScript及其他客户端和服务器端技术进行使用。
  • jsfuzzer
    它是一个fuzzing工具,帮助你使用JavaScript编写/测试attack vectors。

新的替代JavaScript和Ajax的开发框架

  • Clean AJAX
    Clean一个开源的Ajax引擎,一组简化AJAX开发的高级接口。此处Clean还集成两个开源项目Google AJAXSLT:为Clean添加XSLT支持。Paul Johnstone(JavaScript实现MD5与SHA1算法的开源项目):为Clean添加对安全AJAX请求的支持。



     

  • SAJAX
    是一款被封装的ajax工具,非常方便与后台的交互,对XMLHttpRequest对象进行了封装,可以实现对服务器的异步请求,简化操作。



     

  • JavaScriptMVC
    JavaScriptMVC 是一个功能强大的 JavaScript framework. 也是一个很棒的JavaScript测试框架,它同样能提高开发的速度。JavaScriptMVC应用了模型-视图-控制器架构模式,把业务逻辑和表示 分离,使得代码更加模块化。
  • qooxdoo
    是一个功能强大基于JavaScript GUI工包,它让你可以用JavaScript来开发类似于VB/Delphi风格的具有Ajax功能的web2.0应用程序。qooxdoo具有客户端 浏览器检测功能,具有浏览器抽象层,可以无差别的创建跨浏览器的Web应用程序,它提供方便的调试接口,具有事件管理、聚焦管理、定时器、边框和对象属性 等特征。它提供一组窗体组件并扩展了布局,它还提供跨平台的png图形透明支持功能。此外,qooxdoo提供一个原子组件,你可以在其基础上开发你自己 的组件。



     

  • SimpleJS
    SimpleJS是一个简单,轻量的,但很特别的JavaScript框架。它提供了Ajax函数和动态效果。

图像处理

  • Reflection.js
    是一个能够给图片加倒影效果的JavaScript库。



     

  • typeface.js
    提供了一个字体的解决方案,你能使用任何字体显示,不管客户端是否安装了这种字体,即使不使用Flash(sIFR使用Flash)。
  • CanvasGraph.js
    它是一个简单的JavaScript库,让你使用HTML的canvas元素创造bar,line和pie。



     

  • flot
    Flot是Ole Laursen开发的基于JQuery的纯JavaScript实现的绘图库,Flot使用起来非常简单,绘图效果相当绚丽,而且还支持一些图片的操作功能。



     

  • JavaScript Diagram Builder
    是一个跨浏览器的javascript库,他可以帮助你创建坐标图或图表的,你只需要引用diagram.js在你的html头即可。



     

  • The Dojo Charting Engine
    创建数据的可视化组件。

实用的工具和JavaScript脚本

  • Processing.js
    Processing可视化语言移植至Javascript,这是Javascript成为Flash竞争对手的第一步。
  • AJAX Libraries API
    Google 把一些非常流行的JavaScript 框架放到Google 的服务器上。这样大家来说可以充分利用Google 的服务器资源。
  • DamnIT
    DamnIT是一个错误报告服务,它可以帮你追踪错误以及您Web应用程序的不足。
  • ie7-js
    是一个JavaScript库,解决IE与W3C标准的冲突的JS库。
  • Lazy loader
    是用javascript写的jquery插件,它可以延迟加载页面里面的图片。在用户浏览视界(页面中可见部分)以外的图片之前,它将不会被加载。

JavaScript代码优化和简化工具

  • JS Minifier
    一个基于Web的小工具,用来缩小你的JavaScript代码。



     

  • JSMIN
    JSMin 是一个javascript脚本压缩工具,首先去除脚本中不必要的注释以及空白字符,通常可以将js脚本压缩到原文件一半大小。
  • YUI Compressor
    是一款非常强大JS混淆和压缩工具,目前很多Javascript Framework都使用YUI Compressor进行代码分发。
  • Scriptalizer
    是一个有用的在线工具,减少HTTP请求。



     

  • ShrinkSafe
    文件压缩工具
  • SlickSpeed Selectors Test
    用于ajax框架css选择方法速度的对比。


 

 



来自:smashingmagazine

No Comments 2009-02-20 23:37:26 by No.0023


共有文章156篇 第(1/16)页 首页 上一页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 下一页 末页