by agate - Published: 2008-04-25 [6:50 上午] - Category: 学习方法

学习软件的人一直需要根据多种需要学习各种各样的知识,量之多、面之广,是很必要的!但是随着我们年龄的增长,岁月的推移,很多知识渐渐被我们淡忘了。也许是我们不常用的东西,这也是大部分人不在意的地方,似乎大家都觉得不常用的忘了也无妨,要用的时候再去 google 一下也是不错的选择!

当然,google 这个优秀的搜索引擎在知识爆炸式发展的现今社会的确给我们查找资料带来飞跃的效率,但是它搜到并不直接是我们需要的答案。这些所谓的不常用的东西在我们未来某时使用的时候必然是急需的时候,如果在 google 上浪费时间重新筛选和学习想必不是上策吧!

在我的老师指点下,我学习了他的一些十分优秀的学习积累手段,总结一句话“建立自己的知识库” 。但是如何建立符合自身的知识库相信每个人都有自己的心得,我没有啥资格评价,但是效果如何相信不是每一个人都一样。经过和老师的交谈,和我的实际使用发现老师的这种学习知识库的不断迭代建立是十分有效的!

首先,先听一下这种学习积累手段的具体操作步骤:

1. 建立一个学习目录,名字好听些呵呵。
2. 根据你的学习种类,建立相应的子目录,比如java、xml、javascript ……
3. 在相应的子目录中再建立相应的子目录,依次迭代式添加。
4. 在对应的目录中建立可以快速构建的HelloWorld程序代码,或者常用代码段。

呵呵,是不是看了似乎很简单? 错了!并不是简简单单字面上如此,除了方法之外你还需要足够的毅力去维持一种长久具有“寻求”目标之心和“总结”目标之心的状态!这是最难最难的,常常我们都回在某些问题解决之后觉得:“呀”好简单,下回就这么做;到下回的时候忘记了,又会说这个我之前有经验,google一下很快就出来了!殊不知自己一直在做一个无用的迭代。要是平时有良好的学习积累手段,良好地了解自己进行整理的学习目录,那么我们就可以迅速地找到并解决自己面临的曾经出现过的,甚至是没出现过的【当然,你积累了这些】问题!

并且推荐大家使用版本控制软件【比如svn/cvs】对你的学习知识库进行版本控制,以免哪一次的“异想天开”把你辛辛苦苦记录下的东西付之一炬……

最后一句话来总结:但你攻克一个难题的时候,不要觉得你会了,拿起笔记下它!

Tags: [ ] - Comments: View Comments
by agate - Published: 2008-04-20 [11:06 上午] - Category: 未分类

做程序的没有个Linux情节也总会有一个苹果情节吧~一直独树一帜的麦金塔电脑,那些形形色色的优秀软件!Unix的强大shell编程能力!和Windows一样强大的UI介面!还有比这个跟牛的结合体吗?有?有比它更美丽的外形吗?

不单单是电脑,IPod | IPhone 都是Apple公司的强劲产品!喜爱他的工艺美学,就像喜欢sony一样!没有道理,就是喜欢!就爱屋及乌地喜欢上了他的Ad音乐~

1.Flathead 【The Fratellis】
2.Jerk it out 【Caesars Palace】
3.Feel good inc 【Gorillaz】
4.Technologic 【Daft Punk】
5.Love train 【Wolf Mother】
6.Cubicle 【Rinocerose】
7.Vertigo 【U2】
8.Hey Mama (老款iPod剪影人广告)
9.Rich Girl (2005百事iTunes广告)
10.I Fought The Law (2004百事iTunes广告)
11.Are You Gonna Be My Girl (老款iPod剪影人广告)
12.Saturday Night (老款iPod剪影人广告)
13.Technologic(iPod剪影人广告)【重复
14.Walkie-Talkie Man (最经典iPod广告歌曲)
15.Mi Swing Es Tropical(iPod剪影人广告)
16.RitmoTrop(iPod剪影人广告)
17.Inside Your Head
18.Wonderful Night 【Fatboy Slim】apple的广告歌曲
19.Dani California【RED HOT CHILLI PEPPERS】
20.are you gonna be my girl 【jet】
21.one two three four【feist】ipod nano 07最新广告歌曲
22.New Soul【Yael Naim】苹果新款超薄笔记本电脑MacBook Air的广告曲

Updating...

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-04-19 [2:44 下午] - Category: 程序编码

今天再配置hibernate的hbm配置文件的时候使用了one-to-one的关系,主对象使用cascade="all"属性,子对象使用constrained="true"属性。出乎我意料的是在使用hbm2ddl的自动数据库生成功能后发现:子表竟然没有主表的id字段,而主表也没有子表的id字段……为什么呢?那两个对象是如何找到对方的呢?我纳闷了……

呵呵,其实是我配置错了!主表负责生成id,子表有一个外键引用主表的主键,这样就建立了关系【主表子表都有一致的主键值】。但是我竟然在hbm中配置了两个主键生成器……傻了~~~

这个问题是解决了!了解了hibernate中的one-to-one的实现本质,但是我又出现了问题了:要是两个表都要有自己的主键生成器呢?两者可以独立存在,即:存在 (1,0) - to - (1,0) 这样的关联方式~上面那种方式是无法实现这种方式的呀!!!

通过老师的指点,得知需要配置 many-to-one 的属性
<many-to-one name="group" unique="true" column="group_id" fetch="join"/>
特别是这个unique="true"【指明是否该字段具有惟一约束:true具有唯一约束、false不具有唯一约束】就等同于等同于one-to-one了,只是这种是使用额外的一个字段,配置外键,这样就可以实现两个表不同外键的一一对应了!

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-04-14 [9:07 下午] - Category: 系统操作

Replacer is an easy to use system file replacer for Windows 2000 and XP. It safely replaces protected or in-use system files.

This is the description on the Replacer's WebSite. Here is the download link for the stable version.

There is two way to use this bat tool.

1. double click the file "Replacer.bat". and follow the tips to replace you system file.

2. use the text script file.
replace file is:
;; ReplacerScript
xxxxx.xxx, yyyyy.yyy
---------------------
restore file is:
;; ReplacerScript
xxxxx.xxx,Restore

more use information please check out the website.

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-04-08 [2:12 下午] - Category: 程序编码

最近使用struts1.x进行项目开发,发现虽然struts2的设计让功能更为强大,但是struts1.x的开发更好定制!完全servlet体系的扩展,虽然有耦合的嫌疑吧,但是让很多从Servlet/JSP开发转移过来的朋友大概会有很大的亲切感。
以下是我得出的Struts1 + Spring + Hibernate整合开发的一些建议:

1.所有页面都用struts来转发!不能直接访问到资源页面。把所有资源页面放在WEB-INF\pages下

2.虽然很多文档中似乎可以不用在struts-config.xml中以plugin的方式启用spring托管【在web.xml中声明监听器】,但是加载spring框架方式使用struts-plugin的这种老式的方式保守。

3.对此!我们的action的type通通改成org.springframework.web.struts.DelegatingActionProxy这个代理类!交给spring动态获取这个action实例!
对此必须设定对应action的bean配置,此bean的并非配置id标示属性,改为配置name属性其值为struts的action的path值。

4.使用ActionForm的validate方法来验证表单数据的合法性。用代码来控制,不使用xml配置。

5.显示页面部分,我们统一使用el表达式+struts标签形式!不使用scriptlet的脚本形式,保证页面的高可读性!

其他:有可能我们要使用到spring提供的open-session-view的过滤器,来处理持久层的东西,那么我们不得不吧spring的托管放在web.xml中因为这个过滤器要用到那个监听器……注意,事实证明这样是更为优秀的整合手段,可以放心使用!

还有的当然就是我们的编码问题咯!这是一个十分冗长的问题,需要时间来研究【特别是tomcat】的具体运作问题!接下来我会写一个文章来参数这个问题的

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2008-04-07 [10:03 下午] - Category: 感想, 程序编码

其实也没有什么,内行的人觉得这个是小Case吧。呵呵,这里我不是想说具体的方法,主要是一个感想:
<map
  name="propertyName"
  table="table_name"
  lazy="true|false"
  inverse="true|false"
  cascade="all|none|save-update|delete|all-delete-orphan"
  sort="unsorted|natural|comparatorClass"
  order-by="column_name asc|desc"
  ... 其他属性
>

  <key ... />
  <map-key ... />
  <element ... />
</map>

很多人首先想到的是sort,而且sort已经给出了排序的实现,我们只管天上属性方可。可是我们大多程序员是从学 SQL 转到 Hibernate 这个 ORM 的持久层框架上来的,旧有的观念还是喜欢“order by xxxx desc”。不是说自己怀旧,我发现很多朋友都有这个习惯。所以,一般来说还是建议使用 order-by="column_name asc|desc" 这个属性进行对应表字段的排序配置。在一些特殊时候,我也不建议使用 sort 所自带的属性,建议根据需要来具体实现 java.util.Comparator 这个接口来具体实现自定义排序。

Tags: [ , ] - Comments: View Comments
by agate - Published: 2008-04-06 [4:38 下午] - Category: 程序编码

今天郁闷了2个小时,不停地试验,就是没成功……(试验什么呢?)就是这个,用HQL来查出一个List,条件是某个字段为空。

两个领域类:

public class User {
	private String username;
	private Group group;
	// ------------- setter
	// ------------- getter
}
public class Group {
	private String groupName;
	private List<user> users;
	// ------------- setter
	// ------------- getter
}

让你查数据库中所有group为空的(即加入组的)所有用户。
Read more...

Tags: [ , , , ] - Comments: View Comments
by agate - Published: 2008-04-04 [11:04 下午] - Category: 历程

今天晚上服务器迁移到新的主机上了,顺便把 WordPress 升级到了 2.5 感觉一个字 “爽”。好清爽的控制界面,更加人性化的菜单布置……我太爱你啦!

- Comments: View Comments
by agate - Published: 2008-04-03 [11:01 上午] - Category: 程序编码

原来还是自己的问题……首先自我检讨一下,常常总是自以为是用自己的思维方式想问题。呵呵,这个真的是打开眼界啊!原来 OGNL 这个玩意有如此大的魔力,难怪 Struts2 使用他哈!厉害……

说道上回写的那个中文问题,本来是以为是转换成什么 Unicode 编码方式了,其实不然,只不过 Struts2 的 OGNL 有点低智商,只认 '' 符号里的西欧字符为字符串,其他的字符出现就会抛个 FormatException 异常……比较罕见,但是这个也使我研究了一小下 OGNL 的“真才实学”。

发现 Struts2 中
<s:if test="#user.sex == 'male' "> ... </s:if>
是可以的

<s:if test="#user.sex == '男' "> ... </s:if>
是不行的,必须改成
<s:if test="#user.sex == '男'.toString() "> ... </s:if>

发现牛逼在何处了吧…… OGNL 竟然除了属性的调用,还可以调用方法。像上面这样使用的话,中文的 OGNL 比较就基本没有问题了。

by agate - Published: 2008-04-02 [9:48 下午] - Category: 历程, 程序编码

最近一直使用struts2进行项目开发,因为之前就是用的webwork进行学习的,可是一直没有使用到页面逻辑的 if 标签。谁知今天用来比较一个String是否等于一个String的时候出现了问题。

这里先对自己不扎实的OGNL知识表示惭愧,我现学现卖地使用了包括EL格式的${},以及参见的${}和#{}以及直接输入属性的方式都无法识别,可是在我使用输出型标签<s:property/>时竟是完好显示的……

百思不得其解。忽然想到Struts2的Ajax是使用Dojo的,这个框架对于除西欧字符以外的所有字符都是使用Unicode的方式进行编码的(所有的字符都要编程类似 'ऩ' 的格式)。莫非……我马上在action端把属性的值进行了url转换,并写了一个测试用的jsp模板页面,里头也对应的把对比的字符串使用url格式的字符串代替了,结果真的通过了……我的妈呀!不会这么弱吧,这个框架的标签功能岂能这样啊!

没法,只好正规点使用其他标签来替代这种页面标签逻辑的方法。打算努力学几天OGNL和“白痴”的Struts2的标签,知道了结果陆续文章跟进……

补充后续探讨:
《续:Struts2的OGNL的中文识别》

Tags: [ , , , , , ] - Comments: View Comments