Spiga

强烈推荐一个JSF备忘卡片

Read this document on Scribd: JSF Online Card


这个flash是使用http://www.scribd.com在线把PDF转换过来的,此外http://pdfmenot.com也不错,不需要注册,不过品质可能没有scridb好。

怎么能拿孩子的未来开玩笑?永别了,三鹿!

三鹿终于承认了自己的罪过,开始召回奶粉了,不过那么多孩子的健康问题怎么处理?以后大家谁还敢喝三鹿的奶粉呢?——作为一个已为人父的人,我想到这件事也是心有余悸,什么事情都可以马虎,唯独生命有关的事不能,尤其是和孩子生命攸关的事。幸亏我们家孩子喝的是惠氏,不过谁家的孩子不是宝贝呢,可怜那些幼小的还在吃奶的受害的小朋友!

三鹿把责任推卸给奶农,据说公安机关已开始抓捕添加有害物质的不法奶农了,这种做法更使人感到厌恶,我倒觉得三鹿还不如主动承担所有责任,马上对那些受害的消费者进行援救和补偿。

看看聪明的网友们提出的质疑:

又在找替罪羊。难道你们三鹿没有质检,我给你石灰水,你也收??700吨啊,这可不是小数字,难道你们没质检。

1.三聚氰胺不溶于水,其实看上去三聚氰胺就是一塑料粉末,要在液态奶里面掺进不溶于水的三聚氰胺技术上几乎不可能(“三聚氰胺是一种三嗪类含氮杂环有机化合物,微溶于水,呈弱碱性。”“溶解度在每100g水中为0.1g以下的,称为微溶。”)。2.奶粉生产过程中要对液态奶进行喷雾干燥,如果液态奶里面含有不可溶的三聚氰胺成分的话,就会堵塞喷头,三鹿生产线都会完蛋。3.假如真的奶农掺了三聚氰胺,那么三鹿的所有奶粉都出问题才是,事实上,只有三鹿最便宜的婴儿奶粉出了问题,其他奶粉并没有出问题,这说明三聚氰胺不是来自奶源,而是来自用来替代奶蛋白的大豆蛋白。4.今年5月份三聚氰胺的出厂价格是每吨11000元,合每公斤11元,鲜奶收购价格是每公斤2.8元.奶农赔本也要给你毒牛奶啊?

PS:上面对三聚氰胺的的物理化学特性的描述我没有去考证,感兴趣的话大家可以自己去核对。

河北的优秀企业本来就少,这次又完了一个,而且是彻底的完蛋了,bye-bye了三鹿,看来以后只能在无关紧要的产品上支持国货了。

对个人而言,现在生活虽然富裕了,不愁温饱甚至天天吃肉,不过却更加不安全了——除了奶粉,还有激素超标的鸡腿、含有甲醛的酒、红心鸭蛋、致癌的牙膏……要命的是都是质检合格的产品。现在看来美国人来参加奥运会自带食品倒不是人家太矫情,而是确实有必要。

突然想到另外一个问题,如果三鹿完了,最起码大不如前了,厂里那些普通的工人们可能日子就没那么好过了,要知道在石家庄能在三鹿上班应该还是很好的工作奥。现在有名的产品靠不住,想靠一家有名的企业吃个安心饭也未必能靠得住了。

赋上一个传说中的接龙贴,看看各地的网友是如何协作的,呵呵,就连加拿大的网友也参与进来了:
网易广东惠州网友(116.17.*.*) 的原贴:

三鹿说是奶农的责任
网易广东惠州网友(116.17.*.*) 的原贴:

奶农说是奶牛的责任
网易北京网友(210.74.*.*) 的原贴:

奶牛说是草的责任
网易河南濮阳网友(222.136.*.*) 的原贴:

草说是肥料的责任
网易广东深圳网友(59.40.*.*) 的原贴:

肥料说是厕所的责任
网易内蒙古呼伦贝尔网友(58.18.*.*) 的原贴:

厕所说是屁眼的责任。
网易湖北黄石网友(61.184.*.*) 的原贴:

屁眼说是肠子的责任。
网易海南网友(59.49.*.*) 的原贴:

肠子说是国足的责任
网易广西南宁网友(222.216.*.*) 的原贴:

国足说是哑聋的责任
网易广东佛山顺德网友 [sam701] 的原贴:

亚龙说是中国足球的责任
网易陕西西安网友(210.74.*.*) 的原贴:

中国足球说是国脚的责任.
网易山东潍坊网友(124.134.*.*) 的原贴:

国脚说是足球的责任
网易广东茂名高州网友(125.94.*.*) 的原贴:

足球说是生产商的责任!!
网易广东网友 [sandy_star] 的原贴:

生产商说是皮革供应商的责任
网易辽宁营口网友(60.23.*.*) 的原贴:

皮革供应商说是牛的责任
网易湖南岳阳网友(124.229.*.*) 的原贴:

牛说是草的责任
网易北京网友(203.86.*.*) 的原贴:

草说是肥料的责任。
网易北京丰台网友(221.219.*.*) 的原贴:

肥料说地球的责任
网易黑龙江鹤岗网友(222.32.*.*) 的原贴:

地球说是空气的责任
网易江西新余网友(117.42.*.*) 的原贴:

空气说是WY的责任。
网易上海奉贤网友(221.239.*.*) 的原贴:

WY说是三鹿的责任
网易山东青岛网友(124.129.*.*) 的原贴:

WY说是妓者的责任
网易加拿大网友(24.108.*.*) 的原贴:

妓者说是圆珠笔的责任。
网易北京网友(61.50.*.*) 的原贴:

圆珠笔说是纸的责任
网易上海松江网友(61.172.*.*) 的原贴:

纸说是树的责任
网易江苏南京网友(117.88.*.*) 的原贴:

树说是土的责任...又回去了,转吧!
网易安徽芜湖网友(218.22.*.*) 的原贴:

土说是肥料的责任

Spring Web Flow快速上手

下载spring2.5.5spring web flow2.0.3

新建一个工程,在WEB-INF/lib目录下添加如下的jar文件:

  • commons-logging.jar
  • ognl-2.6.11.jar
  • org.springframework.binding-2.0.3.RELEASE.jar
  • org.springframework.faces-2.0.3.RELEASE.jar
  • org.springframework.js-2.0.3.RELEASE.jar
  • org.springframework.webflow-2.0.3.RELEASE.jar
  • spring.jar
  • spring-webmvc.jar


然后需要配置一下web.xml,加上SpringMVC的支持,配置很简单,不多加解释了,下面是代码:


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  6. id="WebApp_ID" version="2.5">
  7. <display-name>helloswf</display-name>
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <param-value>/WEB-INF/simple-servlet.xml</param-value>
  11. </context-param>
  12. <servlet>
  13. <servlet-name>simple</servlet-name>
  14. <servlet-class>
  15. org.springframework.web.servlet.DispatcherServlet
  16. </servlet-class>
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>
  19. <servlet-mapping>
  20. <servlet-name>simple</servlet-name>
  21. <url-pattern>*.html</url-pattern>
  22. </servlet-mapping>
  23. <welcome-file-list>
  24. <welcome-file>index.jsp</welcome-file>
  25. </welcome-file-list>
  26. </web-app>


配置simple-servlet.xml这个spring的上下文定义文件:


  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:webflow="http://www.springframework.org/schema/webflow-config"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  7. http://www.springframework.org/schema/webflow-config
  8. http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd">
  9. <bean id="publicUrlMappings"
  10. class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  11. <property name="mappings">
  12. <value>/helloWorld.html=helloWorldHandler</value>
  13. </property>
  14. </bean>
  15. <bean id="helloWorldHandler"
  16. class="org.springframework.webflow.mvc.servlet.AbstractFlowHandler" />
  17. <bean
  18. class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
  19. <property name="flowExecutor" ref="flowExecutor"/>
  20. </bean>
  21. <!-- Spring Web Flow Configuration -->
  22. <webflow:flow-executor id="flowExecutor"
  23. flow-registry="flowRegistry" />
  24. <webflow:flow-registry id="flowRegistry">
  25. <webflow:flow-location path="/WEB-INF/flows/helloWorld.xml" />
  26. </webflow:flow-registry>
  27. </beans>
  • 通过SimpleUrlHandlerMapping这个URL映射器将/helloWorld.html这个URL交给org.springframework.webflow.mvc.servlet.AbstractFlowHandler去处理。

  • 定义flowRegistryflowExecutorFlowHandlerAdapter,并在flowRegistry中注册/WEB-INF/flows/helloWorld.xml这个流程定义文件。


下面是/WEB-INF/flows/helloWorld.xml这个文件的内容:


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <flow xmlns="http://www.springframework.org/schema/webflow"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/webflow
  5. http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
  6. <view-state id="hello">
  7. <transition on="*" to="helloWorld" />
  8. </view-state>
  9. <end-state id="helloWorld" view="helloWorld.jsp" />
  10. </flow>


这个流程中使用了两个视图,hellohelloWorld,我们在/WEB-INF/flows/这个目录下新建这两个文件。


hello.jsp:

  1. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html>
  5. <head>
  6. <title>Welcome to Spring Web Flow</title>
  7. </head>
  8. <body>
  9. <h1>Welcome to Spring Web Flow</h1>
  10. <form:form id="start">
  11. <input type="submit" name="_eventId" value="Click to say hello!" />
  12. </form:form>
  13. </body>
  14. </html>
helloWorld.jsp:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html>
  4. <head>
  5. <title>Welcome to Spring Web Flow</title>
  6. </head>
  7. <body>
  8. <h1>Hello, Web Flow!</h1>
  9. </body>
  10. </html>

注意:在hello.jsp中一定要使用spring的form标签。如果使用html的form标签,要使用下面的写法:

  1. <form id="start" action="${flowExecutionUrl}" method="post">

好了,启动tomcat,然后再浏览器中输入:http://localhost:8080/helloswf/helloWorld.html测试一下吧。

推荐几个学习GWT的资源

Google Web Toolkit非常的棒!看看用它开发的GMail就知道了。虽然它有非常多的优点,但我觉得最突出的有两个,一是可以用Java的而不是JavaScript开发Ajax富客户端程序,对于那些Java程序员,尤其是喜欢Swing或SWT开发的Java程序员,那真是太爽了;二是它高效的运行性能,InfoQ中的一篇文章详细讲解了这个优点。

现在GWT已经发布了1.5版本,官方网站还提供了一个非常棒的教程,强烈推荐。《Google Web Toolkit Application》这本书也很不错,我觉得比《GWT in Action》要好,虽然都是讲的GWT1.4的版本,不过对GWT的学习非常有帮助。

ExtJS有一个Ext GWT项目可以用GWT开发炫丽的Ext界面,不过是GPL协议开源的,也就是说商业应用是要收费的,幸好还不太贵。使用Ext GWT对速度影响还是比较大的,但它提供了很多漂亮好用的Widget,如果打算做局域网内的应用的话还是可以考虑的。

说到开发工具,我首推Instantiations GWT Designer,SWT Designer也是出自这个厂家,他们做的实在是太棒了,不信可以看看他们的视频演示。可惜这个工具也是收费的,不过他们提供免费的试用(有期限限制),如果手头不是很充裕又想长期使用的话可能要想想其它的办法了。

今天看到一个使用GWT Designer的很好的教程,Getting started with GWT and the GWT Designer by Instantiations(第一篇,第二篇),打算有时间把它翻译过来。

还有一些GWT的扩展项目,比如拖拽的、画图的等等,以后再慢慢了解。

GWT在国外其实还是很火的,比如我最近又看到JBoss就在用Ext GWT为JBPM重新改写了控制台,希望GWT在国内也能有好的发展。

Dojo1.2通过Flash实现了一个多文件上传组件

在Dojo1.2中将增加一个多文件上传组件,这个组件通过在页面上增加一个隐藏的Flash文件来增加一些以前HTML的uploadfile组件说没有的功能。



他不但使得使用ajax方式上传多个文件变得更加容易,而且带来了很多的好处:

  • 以在客户端就过滤文件的类型和大小了
  • 可以任意设计上传的界面了——以前普通的HTML的uploadfile中想改变按钮的样式都比较困难
  • 更多的扩展控制,提供了onChange、onProgress、onComplete、onError 等事件,可以通过添加自己的监听方法进行更多的控制
更多的消息请见Ajaxian的报道Dojo Multifile Uploader with Flash,详细的用法请见Dojo背后支撑公司SitePen的博客文章The Dojo Toolkit Multi-file Uploader,他们还提供了一个示例。下面是一段样例代码:


  1. var uploader = new dojox.form.FileInputFlash({

  2. uploadUrl:"http.localHost/FileUpload.php",

  3. button:myButton,

  4. uploadOnChange: false,

  5. selectMultipleFiles: true,

  6. fileMask: ["All Images", "*.jpg;*.jpeg;*.gif;*.png"],

  7. degradable: true

  8. });



这个组件将包含在Dojo1.2中,按计划Dojo1.2将会在本月发布。你可以个下载nightly builds提前体验一下。

Google Chrome发布——界面简洁,速度惊人!

google今天终于发布了自己的浏览器,这款被命名为chrome的软件尽管还是beta版,但自早上发布以来好评自身便不绝于耳。最直观的优点莫过于简洁友好的界面和惊人的速度——其实我觉得这体现了google的一贯的指导原则,对比一下gmail和其它的邮箱就可以看出,它的界面看上去很是平淡绝少华而不实却又极富可操作性,性能和速度更是其它邮箱比不上的。

简单、稳定、高效、安全、开源。

这是chrome的设计主旨,现在看来最起码在简单和高效上已经做得非常不错了,此外,它对标准的支持也是非常不错,浏览了几个常用的几个网站,显示基本上很正常,当然这得益于chrome所使用的内核WebKit,adobe的AIR和apple 的Mac OS X中的safari都使用WebKit作为内核,此外chrome使用的是自己开发的JavaScript V8引擎,所以对JavaScript的解析速度也表现优异,我试着运行了一下ExtJS的demo,感觉非常流畅。

WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,包含了来自KDE项目和苹果公司的一些组件。

速度提高的主要秘诀是使用了多进程的架构,这大概是和IE及FireFox最不同的地方,多进程的方式不但大大提高了速度,还避免了多个标签页之间的相互影响以及整个浏览器的假死现象。Google Chrome漫画书中文版对多进程的结构和内存的使用做了很直观的介绍。


界面的设计也是别具匠心,UCDChina也做了一个Google Chrome 和它的设计 的专题,可以一看。

我现在比较关心的是chrome是否能够提供想FireFox一样的插件体系和一些比较好用的插件,比如FireBug。

GoogleChrome漫画书中文版

用JRuby轻松搞定SOAP RPC调用

最初发表在JavaEye上,搬家了就搬过来了。

1、安装JRuby。今天发现JRuby已经发布了1.0.0RC1版本,可以到http://dist.codehaus.org/jruby/去下 载。正确设置一个系统环境变量JRUBY_HOME指向解压后的目录,并把%JRUBY_HOME%\bin添加到系统环境变量PATH中。新建一个 hello.rb文件:

ruby 代码
  1. puts 'Hello World.'
打开一个CMD窗口,切换到hello.rb所在目录,运行jruby hello.rb,在窗口中看到“Hello World.”了吧?--JRuby就安装好了。

2、安装AXIS。我在http://ws.apache.org/axis/index.html下载了AXIS1.4,解压后吧webapp下的axis目录复制到tomcat的webapp目录下,启动tomcat,
然 后打开浏览器输入网址http://localhost:8080/axis,会看到AXIS的主页面,点击Validation,如果没出现大的错误就 算安装成功了。接下来我们来部署一个web服务。在tomcat的webapp/axis目录下新建一个文件Hello.jws:
java 代码
  1. public class Hello {
  2. public String hello(String name){
  3. return "hello,"+name;
  4. }
  5. }
在浏览器中输入http://localhost:8080/axis/Hello.jws?wsdl,就会看到一个新发布的web服务的wsdl描述。

3、JRuby处理SOAP消息。在hello.rb中写入下面的代码:
ruby 代码
  1. require 'soap/rpc/driver'
  2. server = 'http://localhost:8080/axis/Hello.jws'
  3. InterfaceNS = 'impl'
  4. drv = SOAP::RPC::Driver.new(server, InterfaceNS)
  5. drv.add_method_with_soapaction('hello', InterfaceNS+'#hello', 'translationmode')
  6. puts drv.hello('YanHua')
代码很简洁,其中server、ns和action等信息可以在上面的那个wsdl文件中找到。在命令行运行jruby hello.rb屏幕上会打出“hello,YanHua”的字样,这样,我们就用JRuby轻松的实现了一个web服务的调用。

在Groovy1.0中使用闭包和集合

这是以前的一篇文章,发布在JavaEye上,现在转帖到这里。

1、闭包
闭包是很多动态语言提供的一个很方便的功能,它有点像Java中的内部类,不同的是闭包中只有一个方法,但这个方法可以有任意个参数。

java 代码
  1. def closure = { param -> println("hello ${param}") }
  2. closure.call("world!")
这段代码会输出”hello world”。
  • 闭包用“{}”括起,“->”前面是参数,后面是处理语句,可以使用call调用,也可以在“{}”后直接使用“()”来执行。
  • 闭包可以有多个参数,各个参数用“,”隔开。如果只有一个参数的话可以省略不写,可以使用关键字“it”来代表。
我们可以把上面的例子像下面这样写:
java 代码
  1. closure = { println("hello ${it}") }('world')
或者
java 代码
  1. closure = { param1,param2->
  2. println(param1+param2) }('hello ','world')
上面的几种写法都会输出“hello world”。

2、集合
(1)List
java 代码
  1. def list = [1, 2, 'hello', new java.util.Date()]
  2. assert list.size() == 4
  3. assert list[1]==2
  4. assert list.get(2) == 'hello'
(2)Map
java 代码
  1. def map = ['name':'James', 'location':'London']
  2. assert map.size() == 2
  3. assert map.get('name') == 'James'
  4. assert map['location']=='London'
(3)循环
java 代码
  1. def list = [1, 2, 3]
  2. for (i in list) {
  3. print i
  4. }
  5. println()
  6. list.each{item->
  7. print item
  8. }
  9. println()
  10. ['name':'yanhua','addr':'beijing'].each{println it}
  11. ['name':'yanhua','addr':'beijing'].each{key,value->println "${key} ^_^ ${value}"}
上面的运行的结果如下:
123
123
name=yanhua
addr=beijing
name ^_^ yanhua
addr ^_^ beijing
(4)collect
遍历集合,逐个传递给闭包,处理后的结果返回给对应的项。
java 代码
  1. def value = [1, 2, 3].collect { it * 2 }
  2. assert value == [2, 4, 6]
(5)find
根据闭包断言,返回集合中找到的第一个项目。
java 代码
  1. def value = [1, 2, 3].find { it > 1 }
  2. assert value == 2
(6)findAll
根据闭包断言,返回集合中所有找到的项目。
java 代码
  1. def value = [1, 2, 3].findAll { it > 1 }
  2. assert value == [2, 3]
(7)inject
遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推。
java 代码
  1. def value = [1, 2, 3].inject('counting: ') { str, item -> str + item }
  2. assert value == "counting: 123"
  3. value = [1, 2, 3].inject(0) { count, item -> count + item }
  4. assert value == 6
(8)every
如果集合中所有项目都匹配闭包断言,就返回true,否则返回false。
java 代码
  1. def value = [1, 2, 3].every { it < 5 }
  2. assert value
  3. value = [1, 2, 3].every { item -> item < 3 }
  4. assert ! value
(9)any
如果集合中任何项目匹配闭包断言,就返回true,否则返回false。
java 代码
  1. def value = [1, 2, 3].any { it > 2 }
  2. assert value
  3. value = [1, 2, 3].any { item -> item > 3 }
  4. assert value == false
(10)min/max
返回集合中的最小/最大项目(对象必须可比较)。
java 代码
  1. def value = [9, 4, 2, 10, 5].max()
  2. assert value == 10
  3. value = [9, 4, 2, 10, 5].min()
  4. assert value == 2
  5. value = ['x', 'y', 'a', 'z'].min()
  6. assert value == 'a'
(11)join
连接集合中的值成一个字符串。
java 代码
  1. def value = [1, 2, 3].join('-')
  2. assert value == '1-2-3'

本文参考了http://blog.csdn.net/chenyun2000/archive/2004/09/15/104971.aspx这篇文章,针对Groovy1.0做了一些修改和扩充。

再说说JSF适合在什么样的场合下使用

以前我在JavaEye上发过一篇关于JSF的文章——做JSF很久了,我也说说JSF的缺点——当时的反响还是大的,过了几个月了,根据大家的回复和我对JSF的进一步深入了解,再总结一下。

整体上我的观点还是没有太大变化的,JSF在服务器端保存组件状态的这个特点使得它非常的不REST,也显得十分的笨重,但这种在无状态的HTTP协议上模拟出组件的有状态的做法,确实给开发带来了很多的便利。所以这个问题要辩证的看,对于那些用户数和访问量不大的企业应用,我觉得用JSF开发还是很合适的。另一个问题是JSF的学习曲线和难度,我想说的是千万不要指望那些可视化的IDE工具能显著降低JSF的开发难度,即使这些工具在80%的情况下能显著提高开发效率,但你的团队中还是要有非常熟悉JSF的人——不仅要熟悉生命周期和方方面面的细节,而且要能够合理的扩展框架和自定义组件。而且团队中的成员最好都能有一些OO的功底,如果都用action-based的基于MVC的Web框架(比如Struts、SpringMVC)的思想来开发JSF会非常的别扭,不过说实话,现在大多的WEB程序员似乎都不太熟悉OO,所以要使用JSF必须舍得花点成本培训你的团队成员,这比买那些快速开发工具要划算的多。我记得TSS上 有一篇文章讨论为什么招聘wicket的程序员的广告很少,wicket的fans说我们不一定要招聘使用过wicket程序员,我们只要招聘那些懂OO的程序员就一定能做好wicket了。我想对于JSF这个说法也是适用的。

所以我认为JSF适合那些经常做访问量不是很大业务可能比较复杂的内部应用的,一个有志于技术积累和稳定团队建设的公司使用。

具体的优缺点就不再详细说了,可以看看我上面提到的文章尤其是大家的评论。

体验Oracle Database 10g Express Edition

前些天试用普元的EOS,它的开发工具竟然不支持MySql和其他的一些轻量级的数据库,无奈装了一个Oracle Database 10g Express Edition,它提供了一个非常容易使用的基于浏览器的控制台,也提供了非常详细友好的教程,不过,一些高级的操作还是需要使用命令行的,下面是使用过程中的一些心得。

安装完成后会在windows中注册好几个服务,其中OracleServiceXE和OracleXETNSListener默认会自动启动。默认的数据库名叫XE,express版的oracle数据库只能建立一个数据库,且最大为4G。假如我们用jdbc来连接(这里使用ojdbc14.jar),可以这样写:

oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:XE

虽然只能建立一个数据库,不过我们可以建立多个表空间,可惜,可视化的控制台并没有提供创建表空间的快捷方式,所以只能使用命令来完成了:



  1. create tablespace YHSP

  2. datafile 'D:\ORACLE10EX\ORADATA\XE\YHSP.DBF' size 100M

  3. autoextend on next 20M maxsize unlimited logging

  4. extent management local autoallocate

  5. segment space management auto;

关键选项的说明如下:
  • DATAFILE: 表空间数据文件存放路径
  • SIZE: 起初设置为200M
  • UNIFORM: 指定区尺寸为128k,如不指定,区尺寸默认为64k
  • 空间名称MOF_TEMP与 数据文件名称 MOF_TEMP.dbf 不要求相同,可随意命名.
  • AUTOEXTEND ON/OFF 表示启动/停止自动扩展表空间
  • alter database datafile ' D:\oracle\product\10.2.0\oradata\orcl\MOF_TEMP.dbf ' resize 500m; //手动修改数据文件大小为500M
如果要删除表空间,可执行下面的语句:

  1. DROP TABLESPACE YHSP INCLUDING CONTENTS AND DATAFILES;


创建了表空间后,可以在图形化管理中看到新加的表空间,也可以使用如下语句看到所有的表空间:


  1. select * from v$tablespace;


这里假定刚刚创建的这个表空间的id是17。

这时新建的用户的默认表空间还是user,如果想改变这个新用户的表空间,可以在管理后台修改表user$中这个用户的datats字段为表空间的id,或执行以下sql命令:


  1. update user$ set datats#=17 where name='UserName'


注意system用户没有操作user$表的权限,要执行以上的操作必须要以sys用户登录。

几年前Oracle Database 10g Express Edition刚刚发布时我也试用过,印象中好像不能在Windows 2000 Server中安装,为此我还专门安装了Windows XP。

如果是想学习和联系Oracle的话,个人电脑上安装一个Express版还是不错的选择。

美化了一下blogger,很满意,以后就在此安家了!

我是一个不折不扣的gfans,一项服务只要是google有的,我基本上不会用别人家的了。google的博客——blogger——我也是非常的喜欢,可是确有一个致命的问题,那就是经常被伟大英武的GFW封杀,总告诉你的朋友自己的博客地址还要教人家如何“爬墙”吧,只能自己使用代理访问一下,这也颇具讽刺意味。

封了又解,解了又封,这么来回多次,这一次大概有数月没有再封了,所以我有有些蠢蠢欲动,真正使用blogger打造自己的地盘了。

我不喜欢花里胡哨的,博客不就是给人看的吗,所以首先要简洁明了,对阅读者的眼睛友好,当然,也要美观。blogger默认的模板是够简洁的但我觉得不太漂亮,不过blogger的扩展性非常强,你可以使用第三方的模板,而且还可以再做一些修改以符合自己的口味。推荐一个专门提供blogger模板的网站——http://btemplates.com——我当前的这个就是那里下载的。

现在blogger的widget也比以前丰富了很多,我先把饭否和Google Reader的共享加上来,再把宝贝儿子的相册加进来,呵呵,好看多了。

可是我是一个程序员,经常会张贴一些代码,可惜blogger的编辑器不支持代码高亮的功能,恰好今天开到了一片文章基于 dp.SyntaxHighlighter 写的代码着色工具,马上下载了这个工具使用一下,非常的棒。我首先把highlight.css中的样式表放在HTML模板中,然后就用上面的那个工具生成HTML代码插入到博客中来了。下面秀一下代码高亮吧。



  1. public int indexOf(Object o) {

  2. if (o == null) {

  3. for (int i = 0; i < size; i++)

  4. if (elementData[i]==null)

  5. return i;

  6. } else {

  7. for (int i = 0; i < size; i++)

  8. if (o.equals(elementData[i]))

  9. return i;

  10. }

  11. return -1;

  12. }


syntaxhighlighter这个项目也是非常值得推荐的。

以后争取每天能写一篇博客,主要是以技术为主当然不只限于技术。