paulwong

#

演化理解 Android 异步加载图片

     摘要: 在学习"Android异步加载图像小结"这篇文章时, 发现有些地方没写清楚,我就根据我的理解,把这篇文章的代码重写整理了一遍,下面就是我的整理。下面测试使用的layout文件:简单来说就是 LinearLayout 布局,其下放了5个ImageView。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://...  阅读全文

posted @ 2012-05-15 22:27 paulwong 阅读(2022) | 评论 (1)编辑 收藏

struts2的时间格式转换问题

http://jolestar.iteye.com/blog/174444

posted @ 2012-05-13 09:47 paulwong 阅读(367) | 评论 (0)编辑 收藏

浅谈数据库设计技巧(转)

说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装。

  数据库的最初雏形据说源自美国一个奶牛场的记账薄(纸质的,由此可见,数据库并不一定是存储在电脑里的数据^_^),里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)——程序开发中的一个重要分支。

  下面进入正题,首先按我个人所接触过的程序给数据库设计人员的功底分一下类:

  1、没有系统学习过数据结构的程序员。这类程序员的作品往往只是他们的即兴玩具,他们往往习惯只设计有限的几个表,实现某类功能的数据全部塞在一个表中,各表之间几乎毫无关联。网上不少的免费管理软件都是这样的东西,当程序功能有限,数据量不多的时候,其程序运行起来没有什么问题,但是如果用其管理比较重要的数据,风险性非常大。

  2、系统学习过数据结构,但是还没有开发过对程序效率要求比较高的管理软件的程序员。这类人多半刚从学校毕业不久,他们在设计数据库表结构时,严格按照教科书上的规定,死扣E-R图和3NF(别灰心,所有的数据库设计高手都是从这一步开始的)。他们的作品,对于一般的access型轻量级的管理软件,已经够用。但是一旦该系统需要添加新功能,原有的数据库表差不多得进行大换血。

  3、第二类程序员,在经历过数次程序效率的提升,以及功能升级的折腾后,终于升级成为数据库设计的老鸟,第一类程序员眼中的高人。这类程序员可以胜任二十个表以上的中型商业数据管理系统的开发工作。他们知道该在什么样的情况下保留一定的冗余数据来提高程序效率,而且其设计的数据库可拓展性较好,当用户需要添加新功能时,原有数据库表只需做少量修改即可。

  4、在经历过上十个类似数据库管理软件的重复设计后,第三类程序员中坚持下来没有转行,而是希望从中找出“偷懒”窍门的有心人会慢慢觉悟,从而完成量变到质变的转换。他们所设计的数据库表结构有一定的远见,能够预测到未来功能升级所需要的数据,从而预先留下伏笔。这类程序员目前大多晋级成数据挖掘方面的高级软件开发人员。

  5、第三类程序员或第四类程序员,在对现有的各家数据库管理系统的原理和开发都有一定的钻研后,要么在其基础上进行二次开发,要么自行开发一套有自主版权的通用数据库管理系统。

  我个人正处于第三类的末期,所以下面所列出的一些设计技巧只适合第二类和部分第三类数据库设计人员。同时,由于我很少碰到有兴趣在这方面深钻下去的同行,所以文中难免出现错误和遗漏,在此先行声明,欢迎大家指正,不要藏私哦8)

  一、树型关系的数据表

  不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构:

类别表_1(Type_table_1)
名称     类型    约束条件   说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值

  这样的设计短小精悍,完全满足3NF,而且可以满足用户的所有要求。是不是这样就行呢?答案是NO!Why?

  我们来估计一下用户希望如何罗列出这个表的数据的。对用户而言,他当然期望按他所设定的层次关系一次罗列出所有的类别,例如这样:

总类别
  类别1
    类别1.1
      类别1.1.1
    类别1.2
  类别2
    类别2.1
  类别3
    类别3.1
    类别3.2
  ……

  看看为了实现这样的列表显示(树的先序遍历),要对上面的表进行多少次检索?注意,尽管类别1.1.1可能是在类别3.2之后添加的记录,答案仍然是N次。这样的效率对于少量的数据没什么影响,但是日后类型扩充到数十条甚至上百条记录后,单单列一次类型就要检索数十次该表,整个程序的运行效率就不敢恭维了。或许第二类程序员会说,那我再建一个临时数组或临时表,专门保存类型表的先序遍历结果,这样只在第一次运行时检索数十次,再次罗列所有的类型关系时就直接读那个临时数组或临时表就行了。其实,用不着再去分配一块新的内存来保存这些数据,只要对数据表进行一定的扩充,再对添加类型的数量进行一下约束就行了,要完成上面的列表只需一次检索就行了。下面是扩充后的数据表结构:

类别表_2(Type_table_2)
名称     类型    约束条件    说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layer char(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数

  按照这样的表结构,我们来看看上面例子记录在表中的数据是怎样的:
type_id type_name type_father type_layer
1 总类别 0 000000
2 类别1 1 010000
3 类别1.1 2 010100
4 类别1.2 2 010200
5 类别2 1 020000
6 类别2.1 5 020100
7 类别3 1 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
10 类别1.1.1 3 010101
……

  现在按type_layer的大小来检索一下:SELECT * FROM Type_table_2 ORDER BY type_layer
列出记录集如下:

type_id type_name type_father type_layer
1 总类别 0 000000
2 类别1 1 010000
3 类别1.1 2 010100
10 类别1.1.1 3 010101
4 类别1.2 2 010200
5 类别2 1 020000
6 类别2.1 5 020100
7 类别3 1 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
……

  现在列出的记录顺序正好是先序遍历的结果。在控制显示类别的层次时,只要对type_layer字段中的数值进行判断,每2位一组,如大于0则向右移2个空格。当然,我这个例子中设定的限制条件是最多3层,每层最多可设99个子类别,只要按用户的需求情况修改一下type_layer的长度和位数,即可更改限制层数和子类别数。其实,上面的设计不单单只在类别表中用到,网上某些可按树型列表显示的论坛程序大多采用类似的设计。

  或许有人认为,Type_table_2中的type_father字段是冗余数据,可以除去。如果这样,在插入、删除某个类别的时候,就得对type_layer 的内容进行比较繁琐的判定,所以我并没有消去type_father字段,这也正符合数据库设计中适当保留冗余数据的来降低程序复杂度的原则,后面我会举一个故意增加数据冗余的案例。

  二、商品信息表的设计

  假设你是一家百货公司电脑部的开发人员,某天老板要求你为公司开发一套网上电子商务平台,该百货公司有数千种商品出售,不过目前仅打算先在网上销售数十种方便运输的商品,当然,以后可能会陆续在该电子商务平台上增加新的商品出售。现在开始进行该平台数据库的商品信息表的设计。每种出售的商品都会有相同的属性,如商品编号,商品名称,商品所属类别,相关信息,供货厂商,内含件数,库存,进货价,销售价,优惠价。你很快就设计出4个表:商品类型表(Wares_type),供货厂商表(Wares_provider),商品信息表(Wares_info):

商品类型表(Wares_type)
名称     类型    约束条件    说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layer char(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数
供货厂商表(Wares_provider)
名称     类型    约束条件    说明
provider_id int   无重复   供货商标识,主键
provider_name char(100) 不允许为空 供货商名称
商品信息表(Wares_info)
名称     类型    约束条件    说明
wares_id int   无重复   商品标识,主键
wares_name char(100) 不允许为空 商品名称
wares_type   int 不允许为空           商品类型标识,和Wares_type.type_id关联
wares_info char(200) 允许为空 相关信息
provider int 不允许为空 供货厂商标识,和Wares_provider.provider_id关联
setnum int 初始值为1 内含件数,默认为1
stock int 初始值为0 库存,默认为0
buy_price money 不允许为空 进货价
sell_price money 不允许为空 销售价
discount money 不允许为空 优惠价

  你拿着这3个表给老板检查,老板希望能够再添加一个商品图片的字段,不过只有一部分商品有图片。OK,你在商品信息表(Wares_info)中增加了一个haspic的BOOL型字段,然后再建了一个新表——商品图片表(Wares_pic):

商品图片表(Wares_pic)
名称     类型    约束条件    说明
pic_id int   无重复   商品图片标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
pic_address  char(200) 不允许为空           图片存放路径

  程序开发完成后,完全满足老板目前的要求,于是正式启用。一段时间后,老板打算在这套平台上推出新的商品销售,其中,某类商品全部都需添加“长度”的属性。第一轮折腾来了……当然,你按照添加商品图片表的老方法,在商品信息表(Wares_info)中增加了一个haslength的BOOL型字段,又建了一个新表——商品长度表(Wares_length):

商品长度表(Wares_length)
名称     类型    约束条件    说明
length_id int   无重复   商品图片标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
length  char(20) 不允许为空           商品长度说明

  刚刚改完没多久,老板又打算上一批新的商品,这次某类商品全部需要添加“宽度”的属性。你咬了咬牙,又照方抓药,添加了商品宽度表(Wares_width)。又过了一段时间,老板新上的商品中有一些需要添加“高度”的属性,你是不是开始觉得你所设计的数据库按照这种方式增长下去,很快就能变成一个迷宫呢?那么,有没有什么办法遏制这种不可预见性,但却类似重复的数据库膨胀呢?我在阅读《敏捷软件开发:原则、模式与实践》中发现作者举过类似的例子:

7.3 “Copy”程序。其中,我非常赞同敏捷软件开发这个观点:在最初几乎不进行预先设计,但是一旦需求发生变化,此时作为一名追求卓越的程序员,应该从头审查整个架构设计,在此次修改中设计出能够满足日后类似修改的系统架构。下面是我在需要添加“长度”的属性时所提供的修改方案:

  去掉商品信息表(Wares_info)中的haspic字段,添加商品额外属性表(Wares_ex_property)和商品额外信息表(Wares_ex_info)2个表来完成添加新属性的功能。

商品额外属性表(Wares_ex_property)
名称     类型    约束条件    说明
ex_pid int   无重复   商品额外属性标识,主键
p_name char(20) 不允许为空 额外属性名称
商品额外信息表(Wares_ex_info)
名称     类型    约束条件    说明
ex_iid int   无重复   商品额外信息标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
property_id  int 不允许为空           商品额外属性标识,和Wares_ex_property.ex_pid关联
property_value char(200) 不允许为空 商品额外属性值

  在商品额外属性表(Wares_ex_property)中添加2条记录:
ex_pid p_name
1 商品图片
2 商品长度

  再在整个电子商务平台的后台管理功能中追加一项商品额外属性管理的功能,以后添加新的商品时出现新的属性,只需利用该功能往商品额外属性表(Wares_ex_property)中添加一条记录即可。不要害怕变化,被第一颗子弹击中并不是坏事,坏的是被相同轨道飞来的第二颗、第三颗子弹击中。第一颗子弹来得越早,所受的伤越重,之后的抵抗力也越强8)(待续)

  三、多用户及其权限管理的设计

  开发数据库管理类的软件,不可能不考虑多用户和用户权限设置的问题。尽管目前市面上的大、中型的后台数据库系统软件都提供了多用户,以及细至某个数据库内某张表的权限设置的功能,我个人建议:一套成熟的数据库管理软件,还是应该自行设计用户管理这块功能,原因有二:

  1.那些大、中型后台数据库系统软件所提供的多用户及其权限设置都是针对数据库的共有属性,并不一定能完全满足某些特例的需求;

  2.不要过多的依赖后台数据库系统软件的某些特殊功能,多种大、中型后台数据库系统软件之间并不完全兼容。否则一旦日后需要转换数据库平台或后台数据库系统软件版本升级,之前的架构设计很可能无法重用。

  下面看看如何自行设计一套比较灵活的多用户管理模块,即该数据库管理软件的系统管理员可以自行添加新用户,修改已有用户的权限,删除已有用户。首先,分析用户需求,列出该数据库管理软件所有需要实现的功能;然后,根据一定的联系对这些功能进行分类,即把某类用户需使用的功能归为一类;最后开始建表:

  
功能表(Function_table)
名称     类型    约束条件   说明
f_id int   无重复   功能标识,主键
f_name char(20) 不允许为空 功能名称,不允许重复
f_desc char(50) 允许为空 功能描述
用户组表(User_group)
名称     类型    约束条件   说明
group_id int 无重复 用户组标识,主键
group_name char(20) 不允许为空 用户组名称
group_power char(100) 不允许为空 用户组权限表,内容为功能表f_id的集合
用户表(User_table)
名称     类型    约束条件   说明
user_id int 无重复 用户标识,主键
user_name char(20) 无重复 用户名
user_pwd char(20) 不允许为空 用户密码
user_type int 不允许为空 所属用户组标识,和User_group.group_id关联

  采用这种用户组的架构设计,当需要添加新用户时,只需指定新用户所属的用户组;当以后系统需要添加新功能或对旧有功能权限进行修改时,只用操作功能表和用户组表的记录,原有用户的功能即可相应随之变化。当然,这种架构设计把数据库管理软件的功能判定移到了前台,使得前台开发相对复杂一些。但是,当用户数较大(10人以上),或日后软件升级的概率较大时,这个代价是值得的。

  四、简洁的批量m:n设计

  碰到m:n的关系,一般都是建立3个表,m一个,n一个,m:n一个。但是,m:n有时会遇到批量处理的情况,例如到图书馆借书,一般都是允许用户同时借阅n本书,如果要求按批查询借阅记录,即列出某个用户某次借阅的所有书籍,该如何设计呢?让我们建好必须的3个表先:

书籍表(Book_table)
名称     类型    约束条件   说明
book_id int 无重复 书籍标识,主键
book_no char(20) 无重复 书籍编号
book_name char(100) 不允许为空 书籍名称
……
借阅用户表(Renter_table)
名称     类型    约束条件   说明
renter_id int 无重复 用户标识,主键
renter_name char(20) 不允许为空 用户姓名
……
借阅记录表(Rent_log)
名称     类型    约束条件   说明
rent_id int 无重复 借阅记录标识,主键
r_id int 不允许为空 用户标识,和Renter_table.renter_id关联
b_id int 不允许为空 书籍标识,和Book_table.book_id关联
rent_date datetime 不允许为空 借阅时间
……

  为了实现按批查询借阅记录,我们可以再建一个表来保存批量借阅的信息,例如:

批量借阅表(Batch_rent)
名称     类型    约束条件   说明
batch_id int 无重复 批量借阅标识,主键
batch_no int 不允许为空 批量借阅编号,同一批借阅的batch_no相同
rent_id int 不允许为空 借阅记录标识,和Rent_log.rent_id关联
batch_date datetime 不允许为空 批量借阅时间

  这样的设计好吗?我们来看看为了列出某个用户某次借阅的所有书籍,需要如何查询?首先检索批量借阅表(Batch_rent),把符合条件的的所有记录的rent_id字段的数据保存起来,再用这些数据作为查询条件带入到借阅记录表(Rent_log)中去查询。那么,有没有什么办法改进呢?下面给出一种简洁的批量设计方案,不需添加新表,只需修改一下借阅记录表(Rent_log)即可。修改后的记录表(Rent_log)如下:

借阅记录表(Rent_log)
名称     类型    约束条件   说明
rent_id int 无重复 借阅记录标识,主键
r_id int 不允许为空 用户标识,和Renter_table.renter_id关联
b_id int 不允许为空 书籍标识,和Book_table.book_id关联
batch_no int 不允许为空 批量借阅编号,同一批借阅的batch_no相同
rent_date datetime 不允许为空 借阅时间
……

  其中,同一次借阅的batch_no和该批第一条入库的rent_id相同。举例:假设当前最大rent_id是64,接着某用户一次借阅了3本书,则批量插入的3条借阅记录的batch_no都是65。之后另外一个用户租了一套碟,再插入出租记录的rent_id是68。采用这种设计,查询批量借阅的信息时,只需使用一条标准T_SQL的嵌套查询即可。当然,这种设计不符合3NF,但是和上面标准的3NF设计比起来,哪一种更好呢?答案就不用我说了吧。

  五、冗余数据的取舍

  上篇的“树型关系的数据表”中保留了一个冗余字段,这里的例子更进一步——添加了一个冗余表。先看看例子:我原先所在的公司为了解决员工的工作餐,和附近的一家小餐馆联系,每天吃饭记账,费用按人数平摊,月底由公司现金结算,每个人每个月的工作餐费从工资中扣除。当然,每天吃饭的人员和人数都不是固定的,而且,由于每顿工作餐的所点的菜色不同,每顿的花费也不相同。例如,星期一中餐5人花费40元,晚餐2人花费20,星期二中餐6人花费36元,晚餐3人花费18元。为了方便计算每个人每个月的工作餐费,我写了一个简陋的就餐记账管理程序,数据库里有3个表:

员工表(Clerk_table)
名称     类型    约束条件   说明
clerk_id int 无重复 员工标识,主键
clerk_name char(10) 不允许为空 员工姓名
每餐总表(Eatdata1)

名称     类型    约束条件   说明
totle_id int 无重复 每餐总表标识,主键
persons char(100) 不允许为空 就餐员工的员工标识集合
eat_date datetime 不允许为空 就餐日期
eat_type char(1) 不允许为空 就餐类型,用来区分中、晚餐
totle_price money 不允许为空 每餐总花费
persons_num int 不允许为空 就餐人数

就餐计费细表(Eatdata2)
名称     类型    约束条件   说明
id int 无重复 就餐计费细表标识,主键
t_id int 不允许为空 每餐总表标识,和Eatdata1.totle_id关联
c_id int 不允许为空 员工标识标识,和Clerk_table.clerk_id关联
price money 不允许为空 每人每餐花费

  其中,就餐计费细表(Eatdata2)的记录就是把每餐总表(Eatdata1)的一条记录按就餐员工平摊拆开,是个不折不扣的冗余表。当然,也可以把每餐总表(Eatdata1)的部分字段合并到就餐计费细表(Eatdata2)中,这样每餐总表(Eatdata1)就成了冗余表,不过这样所设计出来的就餐计费细表重复数据更多,相比来说还是上面的方案好些。但是,就是就餐计费细表(Eatdata2)这个冗余表,在做每月每人餐费统计的时候,大大简化了编程的复杂度,只用类似这么一条查询语句即可统计出每人每月的寄餐次数和餐费总帐:

SELECT clerk_name AS personname,COUNT(c_id) as eattimes,SUM(price) AS ptprice FROM Eatdata2 JOIN Clerk_tabsle ON (c_id=clerk_id) JOIN eatdata1 ON (totleid=tid) WHERE eat_date>=CONVERT(datetime,'"&the_date&"') AND eat_date  想象一下,如果不用这个冗余表,每次统计每人每月的餐费总帐时会多麻烦,程序效率也够呛。那么,到底什么时候可以增加一定的冗余数据呢?我认为有2个原则:

  1、用户的整体需求。当用户更多的关注于,对数据库的规范记录按一定的算法进行处理后,再列出的数据。如果该算法可以直接利用后台数据库系统的内嵌函数来完成,此时可以适当的增加冗余字段,甚至冗余表来保存这些经过算法处理后的数据。要知道,对于大批量数据的查询,修改或删除,后台数据库系统的效率远远高于我们自己编写的代码。

  2、简化开发的复杂度。现代软件开发,实现同样的功能,方法有很多。尽管不必要求程序员精通绝大部分的开发工具和平台,但是还是需要了解哪种方法搭配哪种开发工具的程序更简洁,效率更高一些。冗余数据的本质就是用空间换时间,尤其是目前硬件的发展远远高于软件,所以适当的冗余是可以接受的。不过我还是在最后再强调一下:不要过多的依赖平台和开发工具的特性来简化开发,这个度要是没把握好的话,后期维护升级会栽大跟头的。

posted @ 2012-05-10 23:02 paulwong 阅读(275) | 评论 (0)编辑 收藏

如何加快win7

1. 窗口转换更快速 Windows 7绚丽的效果的确美观,但漂亮的效果就需要拿速度来交换,因此如果你想要Windows 7中的各个窗口切换得更快速,那关闭窗口最大、最小化的动画效果后,你会发现窗口切换得更快了。

操作方法:首先在Windows 7开始菜单处键入“SystemPropertiesPerformance”,然后找到(Visual Effects)可视化效果标签,去掉其中“Animate windows when minimizing and maximising”选项的勾选点确定就完成了。


2. 减少Windows 7系统启动时间 其实使用过Windows 7系统的用户也许都感受到了它启动速度快了不少,但是如果你认为这速度根本还不能显示出自己多核CPU电脑的优势,那我们可以让它更快一点。

操作方法:首先在开始菜单处找到‘Running’(运行)功能打开,然后在窗口中输入‘msconfig’,接下来将弹出一个设置窗口,找到‘Boot’标签然后选中高级选项‘Advanced options…’。这时又会弹出另一个设置窗口,勾选上‘Number of processors’在下拉菜单中按照自己的电脑配置进行选择,现在双核比较常见,当然也有4核,8核...就这样确定后重启电脑生效。


3. 加快Windows 7关机速度 上面讲了如何加快Windows 7的启动速度,既然启动时间能降低,相对应的关机时间同样能减少。这项修改需要在注册表中进行。

操作方法:还是在系统开始菜单处键入‘regedit’回车打开注册表管理器,然后找到这个键值‘HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl’,鼠标右键点击‘WaitToKillServiceTimeOut’将数值修改到很低,一般默认是12000(代表12秒)这是在关机时Windows等待进程结束的时间,如果你不愿意等待可以把这个时间值改小,任意值都可以,修改完成后也需要重启电脑才能生效。


4. 删除多余的字体 以上的那些修改有些用户可能有点不敢下手,但是这一项操作你绝对不用手软。Windows系统中的字体特别是TrueType默认字体将占用一部分系统资源。你只需保留自己日常所需的字体即可,其余的对你来说没有一点用处。

操作办法:打开控制面板找到字体文件夹,然后可以把自己不需要经常使用的字体都移到另外一个备份起来的临时文件夹中,以便日后你想使用时可以方便找回。如果你觉得自己不会再使用这些字体都不必备份,完全卸载了也可以。总之,你卸载的字体越多空闲出来的系统资源也就越多,Windows 7系统整体性能当然提高。


5. 关闭搜索列表特性 如果你是一个从不丢三落四的人,随时都清楚地知道自己的文件放在何处,那么搜索列表这个特性对你几乎是完全没用的,而且它还会占用你宝贵的系统资源,不如关掉。

操作方法:打开系统的开始菜单键入‘services.msc’,找到‘Windows Search’并右键点击,然后选择‘Disabled’关闭此功能即可。


6. 更快的工具栏 任务栏缩略图预览功能是Windows 7系统新加入的一个超酷的特性,如果你想让任务栏预览显示更快速,还是需要从注册表下手

操作方法:依然在开始菜单中键入‘regedit’命令后回车打开注册表,然后寻找键值‘HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced’,鼠标右键点选高级设置‘Advanced’,再选中‘New DWORD’进入‘ThumbnailLivePreviewHoverTime’数值,右键点选该项选择‘Modify’修改,下面就可以选择十进制计数制,输入一个新值单位为毫秒比如,输入200那就表示0.2秒,总之你可以按照自己想要的速度来设置,确认后也需要重启电脑才会生效。


7. 关闭系统声音 在进行这项操作之前,你还是先想想系统声音对自己来说是否有用,如果确定没有用那我们就动手吧,关闭系统声音同样可以释放一些系统资源。

操作方法:在系统开始菜单处键入‘mmsys.cpl’,点击声音管理(Sounds)标签,然后在声音计划下选择‘No Sounds’选项就能关闭系统声音了。


8. 管理好自己的系统启动项 之前虽然介绍了加速Windows 7启动的方法给大家,可是有一点众所周知,系统的启动项程序越多自然也就越花费时间,同时也占用不少系统资源。因此很多PC用户都利用各种系统优化工具来清理一些不必要随机启动的应用程序。其实很多程序的确没有必要随Windows一起启动,需要使用时你再运行即可。

这里介绍给大家的操作方法不需要借助系统优化工具软件,直接在系统开始菜单处键入‘msconfig’回车马上将弹出一个设置窗口,点击‘startup’标签然后就能在下面的列表中看见自己电脑开机启动项中的所有进程,你不认识的可以不要动,但是像比如一些影音播放软件、下载工具、图像处理工具等是可以自己分辨出来的,如vcomp100.dll程序之类的,将这些程序统统从系统启动项中移除,开机时你将发现速度大大提高,但是不要移除杀毒软件哦!


9. 不使用Aero主题 Windows 7系统中提供的Aero主题也是很占用系统资源的,如果你想要系统速度快一些,那么很有必要不使用该主题

操作方法:鼠标右键点击桌面选择‘Personalise’属性然后选择‘Window Color’标签,然后不要勾选‘Enable Transparency’这项,点击‘Open classic appearance properties for more color options’,接下来随便选择一个标准主题就可以了。


10. 隐藏Windows 7服务项 Windows 7操作系统中的一些服务项会占用过多的内存,如果你又不使用这些服务就白白浪费了系统的资源。但我也不是想让大家禁用这些服务,毕竟某些时候也许你就需要使用到。最好的办法是能够完全明白每一项服务后进行调整设置,这对电脑初级用户来说也许有些难度,建议放弃这项优化,但是高手可以一试。

操作方法:打开Windows 7的控制面板,点击‘Administrative Tools’然后选择‘Services’。右键依次点击每个服务进行设置,这项操作请一定小心进行,最好能多听听Windows的建议。 以上就是我要给大家介绍的十个小方法,你无需全部用上,按照自己的需要有选择的使用同样能够为你的Windows 7系统提速不少,接下来就看你自己的了!
 

posted @ 2012-05-05 12:07 paulwong 阅读(187) | 评论 (0)编辑 收藏

starflow 工作流程

http://code.google.com/p/starflow/

posted @ 2012-05-03 22:38 paulwong 阅读(444) | 评论 (0)编辑 收藏

简单的开源分布式缓存框架架

http://code.google.com/p/xcache-j/

posted @ 2012-05-02 10:24 paulwong 阅读(424) | 评论 (0)编辑 收藏

IOS点餐系统

参考外包网站上的一个点餐系统的部分需求写着练手,主要使用了以下知识:

1. Tabbar Controller与 Navigation Controller的套用
2. TableViewCell 子视图添加UILabel和UIButton等
3. Quartz 2D 绘制自定义视图
4. 手势结合UIView Animation切换视图
5. CoreData 及其数据的初始化方法
6. 使用HTTP Get/Post Request 提交和获取数据
7. UIAlertView上按钮的delegate方法









源码

posted @ 2012-05-01 22:12 paulwong 阅读(702) | 评论 (0)编辑 收藏

Tomcat企业版 Apache TomEE

Apache TomEE 是经过 J2EE 6 认证的 Tomcat 企业版本,Tomcat 是目前市场占有率超过 70% 的Java 应用服务器。

Apache TomEE 是 Apache OpenEJB 的一个子项目,为 Tomcat (7.0.27) 增加了一些 Java EE 的特性,无额外的内存要求,兼容 Tomcat 上的所有应用和工具。

Apache TomEE 可让 Java EE 解决方案开发变得简单和轻松,包含的项目包括:Apache OpenEJB, Apache OpenWebBeans, Apache OpenJPA, Apache MyFaces 等等。

Apache TomEE 包含:
  • CDI - Apache OpenWebBeans
  • EJB - Apache OpenEJB
  • JPA - Apache OpenJPA
  • JSF - Apache MyFaces
  • JSP - Apache Tomcat
  • JSTL - Apache Tomcat
  • JTA - Apache Geronimo Transaction
  • Servlet - Apache Tomcat
  • Javamail - Apache Geronimo JavaMail Bean
  • Validation - Apache Bean Validation

posted @ 2012-05-01 09:36 paulwong 阅读(585) | 评论 (0)编辑 收藏

你现在处于哪一个级别啊

IT领袖:年入过亿(例如任正非、马化腾、李彦宏、丁磊、马云等,包括期权股票以及投资理财等收入。)

IT大哥:年入千万(级别次于以上几位大佬的公司老板,不缺钱,普遍对上一条里的人物羡慕嫉妒恨。)

IT精英:年入百万(各IT公司副总裁级别人物,包括COO、CTO等,大多为职业经理人,赚够前就跑。)

IT人才:年入50万(各IT公司总监级别人物,有房有车,生活压力相对较小)

IT工程师:年入20万(高级经理级别,有房贷,生活压力大)

IT民工:年入10万(经理级别,基本无房,学会装波一,生活压力大)

码农:年入6万到10万(工作三四年,租房,继续混日子)

码奴:年入3万到6万(工作一两年,租房,混日子)

码畜:年入低于3万(刚毕业的,租房,傻乐)

posted @ 2012-04-30 22:35 paulwong 阅读(177) | 评论 (0)编辑 收藏

实战Memcached缓存系统

  1. 实战Memcached缓存系统(1)Memcached基础及示例程序
  2. 实战Memcached缓存系统(2)Memcached Java API基础之MemcachedClient
    内容:以Memcached的Java Spy API为例,讲述基本的客户端使用。
  3. 实战Memcached缓存系统(3)Memcached配置参数初解
    内容:提供Memcached配置的初步解读。
  4. 实战Memcached缓存系统(4)Memcached的CAS协议
    内容:Memcached的CAS协议。
  5. 实战Memcached缓存系统(5)Memcached的CAS程序实例
    内容:Memcached Client使用CAS协议的实例。
  6. 实战Memcached缓存系统(6)Memcached CAS的多线程程序实例
    内容:Memcached Client使用CAS协议的多线程实例。
  7. 实战Memcached缓存系统(7)Memcached的一些基础FAQ
    内容:一些关于Memcached的常见问题和基础知识汇总,不断更新中。
  8. 实战Memcached缓存系统(8)Memcached异步实时读写问题的解决方案SAC

posted @ 2012-04-29 21:42 paulwong 阅读(451) | 评论 (0)编辑 收藏

仅列出标题
共110页: First 上一页 77 78 79 80 81 82 83 84 85 下一页 Last