勤劳而默默无闻的开发机

办公室有台开发机,是2008年公司创立时,朋友给攒的PC装了当时的FreeBSD7.2系统,这台机器伴随我们团队从创立走到今天,一直默默无闻的工作着,6年时间里除了坏过一次电源风扇,一直工作着从未关机,团队的几个人几乎每天从早到晚都在利用这台机器保存代码和进行各种产品和功能测试,有时候看到它就像看着老朋友一样,既亲切又心疼,只可惜我们过去几年一直没有一个项目真正获得成功,要不然这台开发机真可谓是劳苦功高! 最近我们新项目启动,因为诸多因素,决定使用云主机来做开发机,于是要把开发环境和代码等移植到云主机上,这就意味着老朋友终于要退休了,想着还有点心酸,不过即便不作为主要的开发机了,这台机器依然将在办公室陪伴我们,做一些临时的功能测试和内部软件服务,这些年在技术平台和系统方面付出的心血真是不少了,多少次奔波于机房和多少个不眠夜,这两天迁移的时候,才真的体会到团队这些年真的付出了不少,希望这次开发环境的搭建和整体服务器迁移将是我们团队最后一次。

Continue Reading →

发布个竞彩足球预测软件测试版本

前些日子碰巧得到个有经验的朋友指点,研究了一番竞彩足球,实战几番后,萌发了用数学的方法了尽可能的提高选择投注命中率,经过前一段的测试验证,已经有了比较满意的算法结果,这两天把android的客户单弄了个屌丝版本发布出来,欢迎对足彩有兴趣的朋友下载交流!说不定你会发现找到了新的投资理财机会,哈哈! 安装APK下载地址: http://www.toplee.com/caipiao.apk iphone的版本过些时间也会发布一个出来,尽请期待!

Continue Reading →

谷歌地图升级到5.4版

现在用的手机是android2.2版的三星i9000,ROM自带的谷歌地图是4.5版,但官方早就升级到了5.4版,中间有性能和功能的大幅提升,可是尝试了若干方法安装升级都没有成功,如果用市场直接升级会得到“应用程序未安装”的错误提示,用adb手动安装,会得到 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 错误提示,另外还尝试了用RE获取root权限后后删除/system/app/Maps.apk后安装或者升级,依然不能成功,其实之前编译测试 apk文件的时候,遇到 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误其实是因为 AndroidManifest.xml 文件中android:sharedUserId=”android.uid.system”设置项所指,可是这事儿现在没法弄,官方的Google maps的apk文件打开后里面的AndroidManifest.xml文件不能这样修改搞定。 崩溃之余想到个方法可以一试,就是把系统原来的4.5版 /system/app/Maps.apk拷贝到手机的另外地方,然后通过RE删除掉原来的文件后,在手机上点击Maps.apk文件安装一份新的4.5版谷歌地图,这样安装出来的文件就成为了第三方应用程序的模式,于是再进入设置->应用程序里面删掉刚安装的4.5版程序,然后再次通过adb命令安装最新5.4版的Maps.apk,结果成功了! C:\Users\michael\Documents\Wandoujia\Download\App adb install -r “Maps.apk” 335 KB/s (6297067 bytes in…

Continue Reading →

TP-Link WN321G无线网卡在FreeBSD下配置

默认情况下,FreeBSD7.2以上(我测试是这样)内核默认都支持这款无线网卡的驱动,这款网卡的芯片是 Ralink RT2573 ,可以说运气不错,一直扔着闲置没用。 启动的时候,或者插入USB口的时候,大概能看到如下内容,表示驱动已经加载: rum0: on uhub4 rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528 rum0: Ethernet address: 00:14:78:76:ff:59 rum0:…

Continue Reading →

感谢哥们帮忙,联想3110打印机在win7下能用了

很老的打印机了,很少用,但是扔了又是浪费,这次差点被扔了,因为在win7下一直找不到驱动程序可用,今天得到网上一哥们的帮助,神奇的搞定了,废物利用的感觉是不错的。 参考网址: http://support1.lenovo.com.cn/lenovo/wsi/Modules/Driverdownload.aspx?SearchType=1&LogicType=0&MachineId=8681&SN=&IsBackPage=false&IsSeachOne=true&typename=%E8%81%94%E6%83%B33518%E5%BD%A9%E8%89%B2%E5%96%B7%E5%A2%A8%E6%89%93%E5%8D%B0%E6%9C%BA

Continue Reading →

提高Bugzilla提交和修改bug时发送mail的效率

转载请注明出处:[Michael`s blog] http://www.toplee.com/blog/1399.html 经常我们会遇到bugzilla里面提交和修改bug的时候反应非常的慢,其实问题大部分是出在提交的时候发送邮件的处理上,解决的思路两种:提高发信速度或者让发信变成异步的操作。 我这里使用的是异步发邮件的方法来提高处理效率,这需要配置两个方面的内容,一个是在bugzilla管理界面的email设置中,有个use_mailer_queue设置项需要设置为“on”,表示将使用后台的队列方式发送邮件,另外一个就是用在后台配置好 jobqueue 的服务。 在服务器上bugzilla目录下,有个 jobqueue.pl文件,该文件用来处理bugzilla的一些后台任务,使用帮助可以参照bugzilla文档里面的说明,我们这里可以直接运行 jobqueue.pl start 来启动该服务,文档里面还会告知你如何配置成系统自动启动的服务,操作都非常简单。 对于详细的配置和更多的讲解可以和我单独讨论,这里不多讲解,我这里主要是讲解处理问题的思路。 另外,我们使用的是利用Gmail来发邮件,使用Gmail发邮件还有比较复杂一点的配置,需要配置SMTP::TSL发送模块,网上有不少文档专门讲解。

Continue Reading →

面向对象设计模式的核心法则

有本经典的书叫《设计模式》,讲了经典的21种设计模式,建议大家都看看。 1. 单一职责 就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。如果你多于一个动机去改变一个类,那么这个类就具有多于一个的职责。 2. 开放封闭 软件实体(类,模块,函数等)应该可以扩展,但是不可修改。也就是说,对于扩展是开放的,对于更改是封闭的。 如此设计,面对需求的改变可以保持相对的稳定,从而使系统可以在第一个版本以后不断的推出新的版本。 无论模块是多么的’封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。 等到变化发生时立即采取行动。 在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。 我们希望的是在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。 开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都可以的进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。 3. 依赖倒转 高层模块不应该依赖底层模块。两个都应该依赖抽象。 抽象不应该依赖细节,细节应该依赖抽象。…

Continue Reading →