解惑

解己之惑,解人之惑

作者:cherami (第60页共82页)

令人费解的商品价格

一个到新加坡出差的同事回来给我们带了一盒巧克力,新加坡币是9.9元,折合为人民币大概50左右吧,但是记得超市里面至少卖70多,淘宝上好像是卖69,24粒装的那种方盒子,查了一下关税,好像进口巧克力现在才8.8%的关税,不应该差这么多吧。

另外我住在花木地区,隔着没有多远的三林的物价好像比这边便宜很多,例如基尾虾,花木卖14的时候三林卖11,等三林涨到14的时候,花木又卖17了,前两天老婆再在三林买的时候已经涨到17了,没有想到花木去买的时候,进门的那些摊位都是卖25,里面有一家最便宜21。

不知道这些价格到底是如何定的,难道也是像房价一样吗?

学会懒惰

记得有人说过最好的程序员是最懒的程序员,这个懒并不是真正的懒惰,而是学会高效率、低重复的工作。其实对于大多数程序员而言,都是在一个固定的框框里面写一些看似不同实际相同的代码,那么你有没有想过使用什么方法能够不写那些完全一样或者几乎完全一样的代码呢?很多人可能更多的是复制,特别是在IDE的帮助下,拷贝一个类,它会自动帮你替换一些相关的东西。这个方法是不对的。你的代码中如果存在一段代码重复三次以上的情况,你就要想办法不这样重复了。我常用的有两种,一种就是写工具类,还有就是使用Template method模式,基本上可以解决90%的问题。
另外一点就是写代码能够做的事情不要自己一遍一遍的重复做,例如这次我写的EJB单元测试框架,其实我可以要求大家写单元测试的时候自己发布EJB,只发布自己需要的,但是我可以从项目的配置文件中读取到这些信息,就应该让框架自己来做;Entity Bean的finder方法MockEJB不支持,我提供了基础代码可以自己写Finder的实现,但是80%以上的finder的实现都很简单,就是两三行代码重复一下,换个字符串就可以了,但是我费了很多时间写正则表达式去解析这些finder,只有很少一些SQL使用了比较复杂的语法(288个里面只有34个)。
也有很多人说程序员很苦很累经常要加班,就我而言,我工作五年多来只加班过三个月,而且不是因为写代码,而是因为我一个人要解决40个人遇到的问题,我解决不了的或者解决方案会影响项目进度的我就要发邮件到我们的上游承包商的人,每天必须阅读和回复的邮件超过100封,而且要使用我并不是很好的英语写。而且我从来没有通宵加班过,最晚的一次是到半夜两点,还是陪项目组的人发布,我自己其实并不需要加班。
学会懒惰,学会思考,学会更深入的研究问题,你慢慢的会发现程序员其实不需要加班也可以搞定。

MockEJB测试框架之自动发布EJB后续

本来今天已经完成了框架的大部分功能,写的一些测试用例都可以成功执行,但是自动发布是放在BaseTestCase里面的,感觉不好,就重构了一下,扩展了InitialContext类,覆盖了lookup方法(参数为字符串的那个,我们的代码中都是使用的这个),这样代码看起来更好一些的。另外我们的系统里面使用到了一些类似的机制,我为了产品可以进行单元测试还对一些Factory类进行了简单的修改,让他们返回我为了单元测试而写的实现类。如果使用这个扩展的InitialContext类,应该不需要做那些修改了,试了下,发现不行,因为产品的代码好像和Jboss的某些特性进行绑定了,先做简单的重构,以后再研究产品到底使用了JBoss的哪些特性,能否搞定。
代码如下:
阅读全文

百度特立独行?

昨天晚上看到一个比较有意思的插件:Landing sites,但是它不支持百度,看了下源代码,要支持百度很简单,加一个搜索引擎的定义就行了:
            ‘baidu.com’ => ‘wd’,
然后试了下,结果发现页面上显示的查询的关键字显示为乱码,研究了下,发现百度很奇怪的把URL中的中文使用GB2312编码,而不是现在通用的而且是URL编码标准的UTF-8,例如搜索“mockejb 框架”,谷歌的编码为:mockejb+%E6%A1%86%E6%9E%B6,而百度的编码为:mockejb+%BF%F2%BC%DC
百度是为了特立独行还是想表明自己是支持国家标准的民族企业?
本来想修改代码对百度的进行特殊处理,代码中使用urldecode进行解码,但是没有办法指定解码的编码方式,暂时就那么的了,问题应该不大,虽然我的blog来自百度的搜索很多

2007年4月23日更新:
呵呵,TrackBack真的很有用,到我的一个TrackBack的BLOG,我看了下,他又找到了别人的解决百度的编码问题的blog

谷歌比百度更诚实

试了下谷歌和百度收录我的BLOG的情况,发现谷歌更加的诚实一些,而百度差不多有20倍的夸大。百度的结果中翻到17页的时候,搜索结果就变成186了,而不是原来的4890项。不过谷歌也并非没有缺点,就是太不稳定,昨天好像还收录了205个,今天就变成155了。
不过也许我不应该说百度的坏话,因为很奇怪的是,我现在访问量的15%都是百度过来的,比谷歌还多,谷歌只有不到13%,但是我的这个应该属于技术性的站点,按照以前的讨论,应该是谷歌更有优势。

“谁叫你不幸生在中国”

刚刚看了KESO的三言二拍:世界能有多平?,突然想到了何祚麻的那句“谁叫你不幸生在中国”。在中国,有太多的事情需要我们这些靠打工为生的小人物们担心:

  • 房子太贵买不起,一个月税后拿到的工资不够买郊区一个平方的房子
  • 没有户口,你不知道你交的四金最后是不是只是给国库作了一点可以忽略不计的贡献
  • 不敢结婚,因为买不起房子养不起老婆
  • 不敢要小孩,因为买不起房子,不敢结婚,生了也负担不了昂贵的养育、教育费用
  • 不敢生病,小病小灾的就自己忍忍过几天就好了,大病没有办法了,准备破产
  • 不敢理财,因为股市你玩不过庄家,其它的你不知道里面有什么猫腻
  • 不敢失业,据说失业一个月,你以前交的四金就全部作废要从头交。
  • 。。。

据说明年的大学毕业生有近500万,不知道有多少人找不到工作,不知道现在已经工作的人会有多少又面临强大的危机感。在中国,做任何事情都可能面临强大的竞争,好像骗子特别多,太多的人都在寻找便宜更便宜的东西(除了你的女人可能会寻找更贵更好的东西

matches和find的用法

Matcher类有几个进行匹配的方法,一个是matches,一个是find,前者是将整个输入和表达式进行匹配,而后者只是查找匹配的部分,只要找到匹配的就返回。一个典型的应用就是分析SQL,我们写一个表达式先判断整个SQL是否匹配表达式,如果匹配的话就要进行分析,取出我们想要的部分,但是WHERE条件部分有很多条件,使用group只能取到最后一次匹配的部分(参考以前写的Java正则表达式的性能问题你写的正则表达式有多复杂? ),这个时候就要针对条件再写一个表达式,使用find查找所有的条件了,代码片断如下:
阅读全文

你写的正则表达式有多复杂?

正则表达式的功能是非常强大的,但是要使用好也是不容易的,为了能够解析Entity Bean的Finder中的SQL,我写了可以解析部分SQL的表达式:
一个是可以支持FROM子句中的IN语法的:
SELECT\s+(DISTINCT)?\s*OBJECT\s*\(\s*(\w+)\s*\)\s+FROM\s+(\w+)(?:\s+AS)?\s+\2\s*,\s*IN\s*\(\s*\2\.(\w+)\s*\)\s*(?:\s+AS)?\s*(\w+)\s+
(?:WHERE\s+((?:(AND|OR)?\s*(\2|\5)((?:\.\w+)+)\s*(=|is|<>|>=|>|<|<=)\s*(NOT)?\s*(\??\d+|null|true|false|empty)\s*)*))?
(?:\s*ORDER\s+BY\s+(\2|\5)((?:\.\w+)+)(?:\s*(asc|desc)?))?\s*
阅读全文

对Billmap的几个建议

昨天试用了Billmap,感觉在试用的那几个里面还算不错的,看了网站的联系方式,就加了站长的Gtalk,没有想到早上就收到了站长的邮件说感谢对Billmap的赞美,其实我加他的Gtalk是想给他提几个建议,就写在这里好了:

  • 增加人员功能,就是增加家庭记账的功能,每笔支出是自己还是老婆或者老公支出的
  • 收入或者支出类型的下拉列表可以按照个人的使用频率进行排序或者定制,最好是能自己也可以添加内容
  • 标题和标签旁边可以增加一个列表列出自己最常用的标题和标签,可以参考你有钱。
  • 增加导入功能,可以从CSV格式的文件中导入支出和收入
  • 增加定期支出或者收入功能,例如每个月的工资差不多是固定的,每个月坐地铁花的钱,或者每年的宽带费

另外要说一个BUG,呵呵,浏览支出和收入的时候,那个标题字段会截断内容,但是算法似乎有问题,会把汉字不正确的截断,变成问号。

更新:
Billmap的站长回复邮件了,除了第三项和第四项的常用标题功能外都打算增加了。呵呵,等待好消息。

又被奸商坑了

昨天说电脑坏了去换了个板子,没有想到因为赶时间没有仔细的追究就被坑了。
昨天晚上睡觉的时候就在想会不会被坑了?但是开始我担心的还是他们曾经把我的主板和CPU之类的拿走到别的铺子看过,最担心的是把我的CPU从2500+盒装换成散装,回来查了下,还是盒装的512K的二级缓存,另外就是担心把内存换成杂牌了,看了下,好像没有换。
结果我最不担心的情况发生了,原想我的那个主板是烂得不能再烂的,不可能比那个再差了。早上上网查了下,竟然市面上没有那个Mercury的主板卖,连报价都查不到。
用everst查到的内存的频率显示的是PC3200(200MHZ),这个结果让我很疑惑,按照如下的说法就是DDR400的:
内存频率是指内存的工作频率,例如DDR266的工作频率即为266MHz,根据内存带宽的算法:带宽=总线宽度×一个时钟周期内交换的数据包个数×总线 频率,DDR266的带宽=133×2×8=2128,它的传输带宽为2.1G/s,因此DDR266又俗称为PC2100。同理,DDR333的工作频 率为333MHz,传输带宽为2.7G/s,俗称PC2700;DDR400的工作频率为400MHz,传输带宽为3.2G/s,俗称PC3200。

更早的文章 更新的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑