Archive for November 2007

如何实现改变JTable中的曾选中过的cell的背景

 
2006/5/14
扩展一个JTable,增加一个List记录每次点击选择的cell,将其index记录.然后用一个Renderer,如果cell被选择过,则修改背景颜色为红色.使用时候先实例化一个MyTable,在setCellRenderer.
public class MyTable extends JTable {
private ArrayList selected;
public MyTable() {
super();
selected = new ArrayList();
}
//将选中的cell列,行数记录
public void addSelected(Point p){
if(selected.contains(p)){
selected.remove(p);
}else{
selected.add(p);
}
}
//某个cell是否被记录过
public boolean hasSelected(int row, int column) {
return selected.contains(new Point(row,column));
}
}
实现一个renderer,当cell的index在记录历史中,则修改其背景
public class MyRenderer extends DefaultTableCellRenderer{
public MyRenderer(){
super();
setHorizontalAlignment(SwingConstants.CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
MyTable mt = (MyTable)table;
if(isSelected){
mt.addSelected(new Point(row,column));
}
if(mt.hasSelected(row,column)){
this.setBackground(Color.RED);
}else{
this.setBackground(Color.WHITE);
}
return [...]

最近在用的软件

Gmail Mobile
如果要在手机上使用Gmail,要用这个.另外一个Mail For Exchange,如果要接收来自exchange的邮件就要用这个.
Prism
Mozilla的新玩意(新名字老玩意),可以把web应用做成桌面shortcut(”桌面化”–新词).如果你经常用诸如gmail,googledoc,googlereader,googleearth,flickr,youtube或其他一些web应用….可以试试
Y’z Dock
可以在xp/vista上带给你mac风格的dock.这里有很多docklet下载
Faststone Capture
Shareware,是我见过最贴心的截图工具,但有portable version…
Wordpress
就是这个blog
google输入法
其实一直都是紫光的粉丝,只是一次次受打击(先是词库莫名其妙变小,一些很寻常的词居然也会找不到,后来又是莫名其妙的认为我是大舌头,- -比如我打dashetou,她会给我大色头).本来想用搜狗输入法,虽然名字很难听,可是在往没有中文支持的xp上安装时候变成乱码.最终选了这个.反正我也不在乎google和sohu的字库问题.而且用到现在觉得还不错.

写商业计划书之前要做的10件事

翻译-写商业计划书之前要做的10件事
原文
撰写计划书之前最好研究一下计划书应该包含哪些部分.
1.研究所有相关章节
开始写之前,确定你已经理解必要的章节,不同章节的目的和计划书的目标. Business Plan Pro(r)
2005之类的软件会帮助你确保不会漏掉任何章节.但如果你选择自己写,可以参考这两个网站:www.bplans.co.uk和www.businessplanhelp.co.uk,他们会帮助你全面了解每个必要的组成部分,写出令人信服的商业计划.
2.决定法律结构
尽管大多数的企业关注于”创意”或者”想法” — 这是可以理解的,但是日常执行和后勤也是不可忽视的.例如,在做贸易的时候,你要决定是单一供货商,合伙制还是有限公司.决定之前,列出当地的会计师和业务关系或者通过网站(www.startups.co.uk)研究不同选择的特点.类似的,诸如了解你的增值税义务(原文:VAT obligation),注册商标或公司名,以及起草员工合同都需要被考虑到.
3.掌握数据
无论你是否喜欢统计数据,深入地了解会影响到你业务的数据是你成功至关重要的因素,尤其是在计划阶段.开始阶段了解以下这些非常重要:
.你的启动成本
.你的盈亏平衡点
.你的资金需求
.你的之后几个月的现金流预测
免费的计算器可以帮助你计算这些数据.强烈建议你通过一个基本会计打包(原文:basic account package)建立你的业务.QuickBooks(r)
(www.intuit.co.uk) 或 Sage(r) (www.sage.co.uk)会提供这样的服务.
4.获取行业分析数据
尽管你拥有独一无二的地方,但是仍然有很多与你相似的公司存在,作一些市场调研会帮助你更好的了解你的目标市场.
所有的公司被英国政府使用标准工业划分系统(SIC)分为不同的类别;先找到你所在的类别并找到你的SIC编码.这会帮你搜索到你竞争对手和其他业界参与者的有关资料.然后通过类似Cobweb
(www.cobwebinfo.com)的数据源寻找更多的数据资料.Cobweb提供大量的商业档案资料.这会让你获得外部的视角来分析业界其他类似公司.
5.研究市场
当准备投放广告时,不如先使用www.overture.com的关键字助手看看哪些与你的业务或服务有关的关键字被搜索的最多.这会帮助你有效的投放广告或确定一个URL或者使用搜索引擎优化来优化你的网站.你也可以通过输入这些关键字到搜索引擎来找到你的竞争对手.
6.慎重评估需求水平
与估计成本不同,最难预测的事情是你的产品或提供的服务的需求水平.通常的规则是保守地估计可能的需求和使用相似取代方法.
即便是一个新的独一无二的创意也应该用相似取代来估计,而不是凭空编造数据或说自己没有可以比较的数据.一个经典例子,最近伦敦旅游发展项目的昙花一现.一个最主要的问题就是游客的数量远远低于预先估计的数量,因此入不敷出.如果负责人事先研究过英国最主要的吸引游客的地方,他们就会找到潜在游客的上限数量.由于估计的游客数量高过这个上限,这个疯狂的优化假设造成最终的失败 — 成本和收益远不成比例.
7.进入市场策略
由于竞争的激烈,企业家要慎重选择如何进入市场或如果打动客户的芳心.大多数新的公司会考虑为他们的新品牌采用多渠道进入的策略,但是这样做不仅仅成本巨大,而且比单一渠道昂贵许多.互联网营销是一个很吸引人的策略,因为营销成本容易跟踪.此外,找到当前相似市场的供应商所处的位置也可以告诉我们哪些市场活动是最有效的.当然,这些是建立在正确的数据上的.
8.雇用合适的人
除了财务方面的估计,执行力强并可以信赖的人是潜在投资者要研究的.无论企业家和创建人的技能水平如何,他常常是需要协助的.尽管很多非核心的活动是可以外包的,某些部门,例如销售,还是需要随时关注的.你应该列出所有的必要技能,把他们放到模型里定价,发现缺口并合适的候选人.
9.定义并明确客户获得的好处
许多企业家无法清楚的说出他们的所做的事能够带来的好处.因此,”电梯行销”这个词被引入到现代词汇来解决这个问题.–所谓的电梯行销是,你的创意,以及支持他的商业模型,公司方案,市场策略和竞争手段需要你在一段电梯升降的过程中表达出来.
这个简单的方法目的是让企业家用心地思考在描述他的产品或服务时如何使用语言的艺术.同时也是提醒他们要以客户为中心并确保他们集中精力描述这些”好处”.
10.找一个导师
许多的创业者会妄想他们的创意会被别人偷走,并在开始前表现的很不理性.通常,创意都是严密的保护并且只在知己讨论.但是这些”知己”(一般是家人或朋友) 通常很难提出足够具有挑战性的问题因为一来他们不愿意冒犯你,二来他们缺少相关的经验或足够的判断力去严格地分析这个新的风险.正因如此,有重大缺陷的创意可以在还没有“关键时候掉链子”的时候被及时纠正,从而可以正常地发展。强烈建议创业者在早期找一个独立的导师帮你审视你的创意。这些人可以帮你在向投资人或者银行展示之前“敲打”你的创意。最后,形成鲜明对比的是,一些创业者觉得投入越多越好,他们参加每一个商业计划竞赛来获得独立的反馈而不是获奖。

精通技术一定就是一个好的程序员???

19:44 2006-10-10 精通技术一定就是一个好的程序员. 这句话是完全错误.”好的” – 这种东西本身就是一个很模糊的概念.就算是真的大家对”好的”这个标准一样了,对”程序员”的定义又不一样.对”精通”的定义也未必一样.”程序员”的定义取决于,通常情况下,”程序员”应该具备的素质,而这些”素质”本身又存在的定义理解上的差别.因为bull shit终归还是不同的人来看的.而”精通”的概念就更不要说了,我是从来没有弄清楚过,很多时候这样的词是需要context的,可是这里的context也是含糊的–>
所以呢,唉,..
不要觉得我在玩弄概念,其实很多情况下我们是被概念玩弄,想想经常可以看到论坛或者日志的回复都是一些不知所云的家伙,要么是根本没有用大脑,要么就是没有搞清楚出发点在哪里.
这是tm扯到哪里去了.又说胡话了.
一般说”精通技术一定就是一个好的程序员.”这句话的时候,context还是确定的,所以还没有到无法讨论的地步.不过确实是”完全错误”的.首先我不会去贬低钻研技术的同志们,毕竟人个有志.所以如果有逻辑不是很清晰的同志们不要认为我在说”精通技术就一定不是一个好的程序员”或者”好的程序员不需要精通技术”.
程序员是搞技术的,当然要精通技术咯.可是要是埋头钻研技术期望做一个好程序员,那就错了.错的不靠谱.软件的主要参与者是人,好的程序员显然不是单单技术.做什么事情终归还是和其他人一起做,协作.技术高了可以抵掉一部分协作,比如如果你的效率是其他人的10倍,你当然没有必要去沟通去浪费时间去plan,document,kt…, 虽然可以这样的做,但从时间角度也是存在协作的,你的东西存在以后被别人看到,维护的可能.如果你觉得”这个我不管”,”不是我的事情”,那你不只是做不好程序员,而且是个不负责任的人(这样的人最危险),做什么事情都恐怕都不是”好的”. –这样的人”好的”定义和我不一样, 请滚.
所以对技术不要盲目崇拜,我们遇到的问题通常并不是仅仅技术一维.
这些话送给我自己,如果有人觉得有道理,那满好,如果觉得是狗p,抱歉浪费了您的时间.
这是很久之前写在msnspace里的,重新放到这里给自己…

s60上的iphone主题

s60知道吧?
iphone知道吧?
主题知道吧?
iphone-352_3tlju24u.sis
或者这里:http://mosh.nokia.com/content/3746B2586FD6DAB0E040050AEE042851

e61i新玩法 – Mobile Web Server

在e61i上搭建自己的mobile网站,然后可以用PC在任何地方连接你的e61i.可以方便的共享,只是似乎速度比较慢.
1.下载 MobileWebServer 下载
2.如果已经有装S60的Python,要先删除.然后再安装 MobileWebServer
3.需要注册一个用户,然后email验证.同时提供一个二级域名,如: zhangv.mymobilesite.net
4.用e61i连接网络,启动MobileWebServer,用之前注册的用户登录
这样就可以通过Internet访问你的手机的共享资源了.截图看这里.当然需要先登录. 你可以通过设置启动guest.如果你总是时刻都在线而又有很多有趣的东西共享给其他人.这是个不错的选择.或者你喜欢用一个web的界面来操作你的e61i,比如你把手机丢在家里而手机的webserver是启动的,那你照样可以在办公室里通过你的e61i发送短信,共享文件,查看通讯录…更牛x的是可以创建一个手机的blog,当朋友访问你的手机site的时候可以随时看到你的最新动态.
未知的问题:
1.安全性还不知道,可能现在使用无线的用户不多吧
2.在手机上运行这个webserver是不是会占用太多的资源

最近在读的书

<<少即是多>> Seth Godin
虽然这本书很”畅销书”,因为里面的152个妙想大多数都颇有启发性,至少对我. 另外很重要的一点就是他们都很短小,很适合现在大多数”沉迷”快餐文化的可怜人(包括我).
<<中国人的精神>> 辜鸿铭
认识你自己
<<丑陋的中国人>> 柏杨
第二遍,时刻提醒自己
<<5分钟和陌生人成为朋友>>
发现自己在社交方面有点问题,有点像宅男方向发展

Playin’ with E61i

邮件(Email)

Mail For Exchange ->用于Exchange邮件
GmailMobile -> 收Gmail的客户端
BlackBerry Connect ->没用过还
可以通过配置imap来收gmail邮件。似乎更好

无线(WIFI,WLAN)

Fring ->可以通过skype,msn,googletalk,ICQ,twitter或sip服务进行语音通话
Gizmo ->费用不详

软件(Software)

ScreenSnap ->屏幕截取
Google Maps Mobile ->google地图手机版
Opera Mini ->Opera网络浏览器,还是觉得e61i自己的浏览器好用一点.有备无患.用Gmail有问题,而且速度慢
FaceWarp ->变脸,比较好玩
DivxPlayer ->视频播放器
CorePlayer ->我觉得比divx播放器好一点,不过对我来说都差不多,因为并不常用
掌上书院 ->看书的,可以收藏,添加书签,在线下载…支持图片
QReader ->更好地看书软件,速度快使用方便,界面清爽,只是不支持图片
Handy Clock ->强大的时间管理工具,包括世界时钟,世界地图,我主要用闹钟
Handy Profile ->情景模式管理,定时,自定义切换规则
Handy Taskman ->任务管理
AgileMessenger ->all in one的im工具,支持yahoo,msn,googletalk
F-Secure ->防火墙,有备无患
MobyExplorer -> 文件管理器,同时支持ftp
Resco Photo Viewer ->图片管理
Putty -> e61i连接ssh
iSkoot ->e61i上的skype客户端,通过一个本地的网关来连接skype,应该是只支付本地电话费.香港可以,目前不确定国内是否支持.到mosh下载
smart2go ->地图下载,不需要网络连接(不同于googlemap).下载了上海和北京的地图却看不到详细的街道名.
MGtalk ->开源的jabber/googletalk客户端,虽然界面不是很美观,但是因为不像fring那样的proxy client,所以要安全一些.同时还有gmail提醒功能.
Talkonaut [...]

AOP与OOP

(最初发布在JavaResearch.org,现在整理好放到自己的地方.)
作者:Narayanan A.R. June 15, 2005
翻译:ZhangV 2005-06-28
原文出自:DevX.com
原文链接:http://www.devx.com/Java/Article/28422/0/page/1
首先你要明确的一点,AOP和OOP是两种不同的认识事物的角度,并不是说有了AOP就不要用OOP.AOP所关注的是传统OOP不能优雅解决的问 题.(程序员通常都是完美主义者,当解决某个问题不优雅的时候,那就意味着不完美.)下面将就一个简单的例子来说明他们到底如何的不同.
作为一个使用OOP多年的人来说,当我听说AOP可以解决一些OOP一直都不能优雅地解决的问题时,我觉得应该去探个究竟了.对两种技术的比较最能给我们实际应用提供见解.这里我设计了一个例子:一个OOP应用,其中某些方面适合使用AOP.
本文展示了一个简单的例子.一开始介绍了问题域,然后分别给出传统OOP的解决方法与结合了AOP解决方法.后者使用了 JDK5.0,JUnit,和 AspectWerkz.最后我会说明如何编写代码.读完本文后,我希望你能知道AOP到底是什么,用来解决什么样的问题.
问题域描述
一个软件公司雇佣一个程序员,指定给他一个业务部门并要求他随时向经理报告.当团队成员完成他们的目标时,经理会给他们相应的奖金.公司所需要的方案必须能够增加一个新的雇员并给当前的员工增加奖金.为了方便,我们用CSV文件存储数据.

图1 解决方案模型
类Manager(经理)继承自类Employee,包含一个额外的属性,Managing Project.一个部门可能包含很多员工.多个部门构成了公司.暂不考虑公司这样的一个类,因为它在问题域之外.
解决方案设计
以下流程图描述了解决方案设计.

图2 对象之间的交互(增加一个新的员工,指派给他一个部门和经理)
出于简单的考虑,本文只关注必需的细节.你也可以深入代码得到你想要的其他信息.
下载
EmployeeServiceTestCase, 一个JUnit测试用例,模拟一个最终用户,创建新员工记录,指派部门和经理.它获取所有可用的部门和经理数据并显示在图形界面上.为了实例化域对象 BusinessUnit和Manager,获得的记录将传递给工厂类.之后,通过给EmployeeService传递一个引用来创建一个 Employee对象.这个服务类使用EmployeeFactory创建对象,并把这个对象传给EmployeeRepository 来进行持久化操作.
应用程序中需要面向哪些”Aspect”
到目前为止,对模型和设计的讨论还限于一个较抽象的层面.现在,我转向这个应用的其他方面 – 这对理解AOP的价值至关重要.
操作所需的资源
<pre lang=”java”>
public static Set findAllBusinessUnits() throws RepositoryException {
Set businessUnits = new HashSet();
try {
FileReader businessUnitFile = null;
BufferedReader bufferedBusinessUnitFile = null;
try {
businessUnitFile = new FileReader(FILE_NAME);
bufferedBusinessUnitFile = new BufferedReader(businessUnitFile);
String businessUnitRecord;
while((businessUnitRecord = bufferedBusinessUnitFile.readLine()) != null) {
BusinessUnit businessUnit = BusinessUnitFactory.createBusinessUnit(businessUnitRecord);
businessUnits.add(businessUnit);
}
} finally {
if(bufferedBusinessUnitFile != [...]

啥是Spring

(最初发布在JavaResearch.org,现在整理好放到自己的地方.)
有人说spring aop+ spring ioc, 才~~~是spring
简单一点,是一个容器. 什么容器,容纳什么?是对象,或者说bean的容器.
那为什么叫轻量级容器呢?相对于EJB container,使用spring不需要写符合容器规范的代码,即容器不会”侵入”了你的代码.
这 个容器会提供你的应用(程序)中用到的所有对象,并对这些对象进行统一的生命周期管理和组装.在通常的开发中,我们在需要某个对象的时候只是 new MyObject(). 在Java中,这样没有什么不好,因为gc会打理好”善后”工作,是系统级的. 而用spring,在需要某个对象 时,只要向容器请求相应的对象,spring会找到并准备好这些对象并提供给你.她也会打理好”善后”工作,但是是在应用级的.
另一方面,spring还会帮助你打理对象之间的依赖关系.
比如原来的做法:
class A{
}
class B{
A a ;
public B(){ a = new A();}
}
而使用spring的做法
class A{
}
class B{
A a;
public B(){}
void setA(A a){this.a=a}
A getA(){return this.a}
}
(希望你不要单纯地认为spring会写很多代码)
但 从前一个方面,你可能觉得spring只是一个对象容器.从这里你就应该看出,spring是bean容器,因为spring需要你的类符合bean规 范:相应于每一个成员域,都需要提供setter和getter方法.spring要使用这些方法来注入依赖关系,也就是 dependence injection, 或者inversion of control. 我个人觉得还是di更容易理解,直到现在我还是要考虑 怎么去向别人很好的解释ioc.控制反转(倒转),我的理解是就如同上面的两个例子里看到的,依赖(控制)不在体现在代码逻辑里(如第一个例子),而是在 配置文件里,而在代码中我们只提供注入点(也就是setter和getter).
希望我对IoC的概念的讲解能够给你一些启发.
你 可能要问了,为什么我要这样做呢?原来的做法有什么不妥的地方么?没有什么不妥,只是两种理念而已,没有绝对的好还是不好,但我还是给你我的解释–我理 解的IoC的好处,希望有所帮助.通常在程序设计的时候,我们在需要某些功能时,会相应的去设计一些方法,然后根据OO去将方法和一成员变量组成一个类. 实际上,我们最终设计出的程序是:一组类的实例互相交互完成某个特定的任务.
除了一些核心的业务方法,以外我们还要做组装对象的工作.比如我有了 一个工厂,里面有很多机器,机器在开动时要装配相应的模具.那么在工厂的生产过程中, 首先我要有工厂,机器,模具这样三个类.然后我的”动作”有:装 配,开机.通常的做法我们要做装配,然后再去开机.而用spring,我们只是专注于开机.这样我们就把装配这个动作抽离出了核心的”生产过程”.当某些 机器改变了装配模具时,不在需要修改核心业务代码.这就是解耦.如:
public class Production{
public static void main(String[] args){
Factory [...]