Saturday, December 31, 2011

说说网络电视

电视是很多人的生活的一部分,尽管人们越来越多的把时间花在上网,打游戏,当我们闲暇而且衣食无忧时,很多人还是喜欢坐在沙发上,看看春节晚会,看看穿越的连续剧,看看八卦的非诚勿扰,看看良莠混杂的达人秀,尤其家里有老人的喜欢看养生堂或中国戏剧。在多伦多看电视,有线电视基本被Rogers垄断了,30元上下只能看basic节目,有两个中文台,其中一个还是本来就是无线广播的,还时常播印度,阿拉伯语等节目,即使是中文节目也是以广东话为主,而且没什么娱乐节目。
几年前为了看免费电视,有些人买了破解的卫星接收机,与节目提供商进行魔高一尺,道高一丈的竞赛,尽管有众多高手助阵,怎奈解铃的玩不过系铃的,商家每次升级,破解至少要数月后才会出现在网上,而且越来越难破解了,另一方面,节目源有限,而且卫星信号是单向的,不能点播,所以大家逐渐放弃了这种费时费力的免费。
在互联网遍布的今天,电视节目已不再只是广播和有线电视(cable),众多的所谓流媒体(stream)给我们提供了更多的选择,而且很多是free的,甚至没有恼人的广告插入,这里就给大家介绍一下我所知道的一些选择。首先声明,我不是任何厂商的代理,也没有给别人做广告的兴致,一下提到一些商家产品,仅供参考。
Apple和Google都出了TV Box,实际就是机顶盒,与麒麟电视机顶盒没什么两样。好处是节目源很多,坏处是要付月费。类似的还有NetFlix和Hulu等,你甚至不需要另买机顶盒,可以用xbox, Wii或Playstation观看流节目,NetFlix的basic节目在加拿大的月费是7.99加税,远比Rogers便宜。那么有没有不要月费的呢?答案是有!那就是媒体播放器(mediaPlayer)。
在北美比较流行的有PBO(Patriot Box Office),WD(Western Digital) TV Media, ACRyan PlayOn!, Asus O!Play等,价格在40~100元左右。如果有机会回中国,你可以从中国带一个回来,可供选择的机型是大把大把地,参见hdfan的高清播放机选购知识—附110余款播放机配置

主流媒体播放器的解码芯片主要来自RealTek或Sigma。采用RealTek芯片的机型更为国人喜欢,主要因其支持几乎全部编码,包括RMVB。而Sigma芯片不支持RMVB。我们下载的很多电影和电视剧都是RMVB格式的,所以采用RealTek芯片的媒体播放器是首选。PBO和ACRyan PlayOn!都是采用早期的RealTek 1073芯片,其解码功能基本满足看各种影视的需要,价格适中。如在多伦多一年前TigerDirect PBO售价$89.99,有$45的Rebate,所以连税下来大概$55。右图是PBO的外观,实际尺寸比一外置光驱还小。

PBO的功能和特点包括:

  • 支持各种显示分辨率和制式,PAL/NTSC,SD,720p HD(50/60Hz),Full HD 1080p(50/60Hz)
  • 支持常用的各种Audio/Video压缩编码,如MKV,RMVB,Dolby Digital and DTS,MP4(MPEG4)
  • 可以用来放MP3音乐,显示Jpeg照片,支持SlideShow
  • 2.5" SATA Enclosure,可以内置一个Laptop用的硬盘
  • Supports USB Storage Devices
  • 支持Network Streaming, UPnP, File Transfer, P2P Download Management,物超所值。
媒体播放器通常采用Linux操作系统,但通常你不需要任何越狱就已拥有root权限。但北美买来的播放器小盒子,通常需要一些软件的patch和升级,才能较方便地观看中文节目。有兴趣上网一搜便会得到无数结果。特别是中文网站hdfan和mitbbs.com未名空间有很多资源和相关讨论。流行的中文影视平台包括HaoIMS,hdpfans在线,V.S.T在线影视,BesTV在线资源等。而这些平台除提供了几十个电视频道的实时和点播节目,还提供优酷网、土豆网、奇艺网、迅雷看看、乐视网、PPTV、酷6、搜狐高清、腾讯视频等视频流媒体。有些流媒体网站不允许北美用户用计算机观看的节目,却允许用媒体播放器观看。左图是hdfans的截图。有空我也会总结一下PBO的改动方法。
如果没有媒体播放器,或者你喜欢用计算机看节目,你还是有很多选择,如上面提到的流媒体大多允许从计算机上在线观看,有的需要安装一些专门的播放软件以支持类似P2P的加速,如BeTV和好易网络电视(http://www.haoetv.com)。以前我介绍过的BeTV(http://www.ibetv.com/),可以用来看很多中文电视节目,涵盖中港台,特别有Discovery Channel探索频道,国家地理,CNN,BBC,欧洲足球,HBO(不错的电影频道,还没广告)和彭博财经(Bloomberg)等国际频道,而且速度非常之不错(可惜Cartoon Network频道不见了)。几个月前BeTV开始需要登陆了。注册帐户并不进行email验证,所以你完全可以注册个无用的email,记住地址和登陆密码即可。
此外特别值得一提的是YouTube(熟称油管)。感谢众多的网友,很多中文的电视节目被搬上YouTube,从影视剧到各种综艺节目,特别的短片等等,应有尽有。不但可以从计算机上看,还可以从Xbox(需要golden membership),Wii和媒体播放器上看,当然也可以从智能手机和各种Tablet上观看,而且新一带Smart TV基本都支持YouTube。把你喜爱的节目加到Favorite或 Watch later的list中,就可很容易的从xbox等设备上播放。
现在各式Tablet也越来越普及。你也可以安装PPS/PPTv(支持Android和Apple的IOS),上厕所都可以捧着看。
告别Rogers和Bell吧!

Saturday, December 17, 2011

读书要用eInk,比较一下Kindle, Nook和Kobo

Update@2012年6月29日:Google刚刚在Google I/O上宣布了7寸的Nexus,今天Cnet发了篇比较:Nexus 7 vs. Kindle Fire vs. Nook Tablet: Battle of the $199 tablets。有兴趣看一看吧。
Update@2012年1月31日:更新了Kindle四代与Kindle Touch,有兴趣看一看吧。
我的孩子很喜欢读书,圣诞节要到了,eReader有很多促销,很想给孩子买一个作为礼物。当然读书也可以用Tablet如Apple IPad2,Anroid tablet,包括新近刚上市的Amazon的Kindle Fire, Barnes & Noble的Nook Color,和Kobo Vox,甚至Playbook或TouchPad。Tablet的种类繁多,功能多样,但若主要是用来读书,我认为还是选用Eink的eReader。

e-ink的eReader与tablet的主要区别是:e-ink的eReader只支持黑白灰度显示,即没有颜色,而且其屏幕刷新速度较慢,不适合显示动态画面,也不适合看影像照片等。e-ink这一源于MIT的技术完全不同于LCD液晶显示,除了超级省电(因为不需要背光),最大优势是其观感非常接近真实的书,如左图所示,看起来很舒适,利于孩子保护视力。
CNet有篇文章讨论Kindle vs. Nook vs. iPad,并且有链接到多个不同的评测讨论。如果你不能决定eReader和Tablet那个更符合你的实际需要,可以好好读读。
如果你prefer tablet,网上有很多评测,包括Apple Ipad2, Android tablet(如Samsung Galaxy Tab),HP TouchPad,RIM Playbook,可以参见http://reviews.cnet.com/tablets/http://www.tabletpccomparison.net/等。eReader通常采用6~7英寸的尺寸,便于手持,又不像手机屏那么小而不便阅读。彩色的eReader基本就是小号的tablet,如果感兴趣,可参见计算机世界杂志关于Kindle Fire, Nook Color,和Kobo Vox的评测(见下图)

Update@Feb 9, 2012: CNet "Kindle Fire vs. Nook Tablet: How to choose".
而采用e-ink技术的主流3个eReader正是由制造上述3产品的同样三公司研发的Kindle,Nook和Kobo。Sony的e-ink eReader也很不错,但由于其价格,书库资源等原因,算不上主流产品,就不讨论了。所以主要讨论Kindle 3,Nook Simple Touch和Kobo E-Reader Touch。网站businessinsider有一篇图文并茂的评测,链接在这里。有图有真相,很不错,只是有些观点俺不能苟同。
比如作者不喜欢touch screen,认为容易误触发翻页。认为Kobu的边框太窄,机身太薄,不易手持。但对我来说,eReader很小,通常放在手掌中,小巧轻便是有点而不是问题,触摸屏很方便,特别是读书并不需要经常敲字,所以Kindle的键盘并不实用,反倒不必要地增加机体个头。作者字里行间都很推崇Kindle,我认为不够客观公正。有一点需要提到的是文中所论及的Kindle 3是Kindle Keyboard,即所谓的第三代Kindle,后来Amazon也出了款无键盘的第四代Kindle和一款支持触摸屏的Kindle Touch。
这三种eReader都是采用同样的e-ink技术(eInk pearl),采用600x800的6寸屏。具体的技术细节可参见wikipedia的网页。书的资源是很重要的一个因素。Kindel支持PDF,不过不支持ePub格式。Kobo则相正反,支持ePUB,不过不支持PDF。Nook支持的最好,PDF和ePub都支持。虽然EPUB和PDF之间的转换并不难,但毕竟有点麻烦。像我这样的用户并不介意Amazon或Barnes&Noble谁有最大的书库,因为我不会经常花钱去网上购书的。Kobo书库有50万 eBook和180万免费eBook;Amazon Kindle书库有100万eBook和100万免费电子书。Barnes and Noble的Nook书库有100万eBook和100万free eBooks。总体来说Amazon的书资源更多,其社区更活跃内容更丰富。Kindle的用户可以免费借阅图书馆的书,具体细节参见"How to get free library books on your Kindle"。Kobo在提供很多免费图书基础上,从明年1月将允许近期购买Kobo的用户每月免费下载一本书。另外,Amazon还提供在PC,iPhone和WebOS上阅读电子书的程序。Kindle 3不支持浏览本机上的html文件(旧Kindle 2代支持)。Amazon还提供一种email服务,可以在线转换JPG,BMP,PNG,HTML和Word DOC格式。
这三种eReader都支持wireless无线联网。此外Kindle和Nook有些型号同时支持3G网和Wi-Fi。3G也就是cell phone的3G网络,而且是免费的,用户不用像3G手机那样按流量付费,但3G版eReader本身的价格会比Wi-Fi only的贵50美元左右。Amazon的某些Kindle提供所谓的"special off",也就是有广告插入,可以比non-ad的同型号便宜25~50美元。Kindle 3G在美国是连接到AT&T的3G网,好像在加拿大没有出售,所以不知在加拿大能否连到Rogers或Bell的网。Kobo虽然没有3G型号,但其在加拿大的市场占有率甚至超过了Kindle,而Nook在加拿大占有率很低,一方面可能是价格因素,另一方面我猜想就是加拿大没有或不支持3G eReader。3G网络不只可以用来下载书,还可用来上网。根据Amazon的网站所述,Kindle提供3个试用功能:
1) 采用WebKit的网络浏览器,可以通过3G连接Kindle Store和wikipedia。其它网页只支持Wi-Fi连接。
2) 朗诵功能,也就是text-to-speech。不知道能读中文否?
3) 播放MP3和Podcasts。MP3音乐是读书时做背景音乐。
听说还可以check email,查看电子地图,打VoIP的电话,不知有人试过没。
它们都有2~4GB的容量,不过Kindle没有SD插槽,而Nook和Kobo支持MicroSD,所以可扩展up to 32GB。 三种eReader的电池续航能力都不错,在关闭Wi-Fi的情况下,Kindle和Nook可使用2个月,Kobo可持续使用一个月。 此外,Kindle Touch号称是唯一可以支持text-to-speech和audiobooks,能播放MP3和AAC音频文件的eReader。当前Amazon网站3G Touch(右图)带广告是$149,无广告$189。
这里是3个wikipedia的link: KindleNookKobo

Thursday, December 15, 2011

说说HP的WebOS,兼三谈RIM/QNX

12月初有人在文学城上讨论如何在TouchPad上装Android,我便建议大家等两星期,因HP很快会就WebOS何去何从作出决定,引起了别人的嘲讽,曰:两星期以后又能怎样呢。APPs滚滚而来吗?有点不爽。
而后12月9日,终于看到HP宣布决定WebOS开源,也就是说像Android一样,任何厂商都可开发其软硬件。虽然HP比不上Google财大气粗,而且起步晚,但WebOS源于Palm,同样是类Linux系统,同时也可以把Android的Java VM移植过来,就可运行Android APPs,前途不可限量,说不定APP的确可以滚滚而来。开源比license好,OEM们用起来就无后顾之忧。前提是HP能把开源进行到底。

再说说同病相怜的RIM的QNX,也是处在非常困难的境地。今天RIM的股票盘后跌了8~10%,主要是因为第四季度财报预期不好,而且新一代手机的发行也推迟到2012年后期。好消息是第三季度盈利超出预期一点,并且RIM声明Playbook BBX OS 2.0会如期明年2月推出。但看来大家并不看好Playbook,因为RIM的特长是手机的email服务,而Playbook目前又不支持email。上图来自NPD显示了五年来美国的智能手机(smartphone)市场份额的变化。因Nokia的主要市场是欧洲和亚洲,这里看不出其大量缩水。2006年时Motorola还没完全走下坡路,但其在智能手机方面作为不大,正如图中所示,当时主要是RIM的BlackBerry,微软的WinMobile和Palm的天下。Palm就是今天WebOS的前身。这几年来,后来居上的iOS和Android把这三家当时的主流OS逼得节节败退,但他们还都没有倒下。这对用户是个好消息,只有竞争才会给用户带来实惠。另一方面,正如我所坚信的,RIM不会很快倒下。股票暴跌,大量裁员,用户出走,产品延迟,负面因素很多。但与当年的AMD不同,RIM没有放弃正确的发展方向,而且还在盈利。不要重病用猛药,不要断臂求生,如Nokia放弃Symbian,是因Symbian缺乏生命力,尽管诺基亚也进行了开源,也难免寿终正寝,所以我个人认为Nokia转向Windows Phone是明智之举。仁者见仁,智者见智。

与IT斗,其乐无穷

现在很多公司无论与IT相关或无关,几乎都会有个IT部门,包括政府医院或银行。IT除了为大家服务,如装个计算机,装个软件,设置email或设置账号,此外IT还负责单位的网络安全,防木马病毒钓鱼DoS,于是防病毒软件和防火墙成了标准配置,而且普通用户没有权限改变配置。有的计算机甚至没有访问HTTP网站的权限。安全是得到一定的保障,不过代价总是有的。特别对我来说,经常要做build,公司防病毒软件用的是McAfee,它的on-access scan一下就把build的时间拖长一倍。好在McAfee的On-Access Scan有个设置项,允许用户把一些文件路径加到一个列表从而排除在scan的list,于是我把几乎所以的path都加进去,当然没有把Windows等系统路径加进去,防毒之心不可无。
几天前,突然发现开发的硬件不能ping我的host 笔记本电脑,而从我的笔记本电脑telnet to target没问题。由于其间的连接是ethernet over USB,网络抓包软件不管用,很难分辨问题出于哪个部分,比如target的软件或硬件,USB driver,网络设置,通过交叉测试比对,疑点集中到我的笔记本电脑的防火墙。公司的计算机在登陆到公司的domain后,并不使用Windows Firewall,而是用McAfee的Host Intrusion Prevention Firewall。我检查了McAfee的目录更新日期,发现IT刚刚在一天前Push升级了HIP,从7.0升到8.0,以前安装软件时添加的extra rule都失效了。而且任何新rule和policy都需密码才能设置,显然IT不会把密码告诉我的。没有admin权限又无法停止HIP service,怎么办?偶然发现HIP service depends on 另一个McAfee Firewall Core service,这个 Core Servie运行C:\Program Files\Common Files\McAfee\SystemCore\mfefire.exe,这个service没有起来不会引起IT的注意,而且这个可执行文件并没有被系统lock,改个名,重启,done。当然也可以进安全模式改名,不过有点麻烦。
公司提供了一台新的高性能的计算机,专门用来build,就是编译程序,但是HTTP的port 80被block了。可有时在build时需要登录到公司网络快速查找一些信息,不得矣要用另一台计算机上网再把信息传过来,或者Remote login到build计算机然后从主机copy paste。总之,不方便。用proxy sever吧,一来不安全,二来IT的policy肯定不允许,而且很容易被IT发现,可能会给自己找麻烦。好在公司提供好多Linux Station,供多用户登录。于是用Putty创建SSH tunnel到一台Linux主机,设置IE和Firefox使用socket。从build计算机到Linux主机是SSH加密的,没法跟踪,而从Linux发出的HTTP request也无法跟踪。不但解决了上网问题,甚至上班时间炒股都不用担心引起领导注意。当然俺上班时间一般都在努力工作。
有人打电话问我,Windows Task Manager只显示process的列表,其它tab都不见了,再解决不了只好问IT了。碰到这种怪问题,最好去google search 了,很快在微软网页找到答案,原来是进入所谓的"Small Footprint Mode"。只要“double-click on the border”就可以变来变去的。网页上回复的人中有个家伙竟被折磨了一年多。所以有些generic问题,最好问IT之前先search一下。有些问题就是IT也不明就里。
IT是在其位,谋其政,要保证公司网络的安全和可靠,同时为人民大众服务。我们要支持IT的工作,每当他们为我们解决问题,要不忘感谢。也不要事事全赖IT,很多事情只要Google一下便可轻易解决,不必劳师动众。IT不是万能的上帝,很多问题他们也不可能几分钟内解决。理解万岁!

Wednesday, November 30, 2011

再谈RIM/QNX

最近在Rolia网上有些人总称RIM的Playbook是垃圾。提起Playbook可以支持Android APP,有人质疑Playbook成为另一个Android。我觉得有必要客观地看待Playbook。

之前我已写过一篇关于QNX的文章,介绍一下RIM QNX。这里,再发表些个人意见。QNX已经有30年的历史了,这30年计算机技术日新月异,大浪淘沙,很多操作系统都成为过眼烟云,最近倒下的是Symbian。WindowsCE也不久矣,取而代之的Windows 8是完全不同的design。 作为Micro Kernel,文件操作,显示驱动,存储控制都是进程,而不是kernel的一部分。一旦任何一个进程出现异常,系统内核都可kill掉失败进程并继续运作。这是Linux/Android/Windows/IOS都作不到的。QNX没有广泛的流行起来是因它更适合作为一个实时操作系统RTOS, 而过去几十年的发展主要是围绕着x86体系的桌面操作系统,基于历史原因,主要是被微软的Windows把持。但将来的发展趋势正在改变,嵌入式系统正在占领市场,赢得越来越多的用户。如果RIM能把QNX变成开源,以赢得广大的开发群体,就可大有作为。
兼容Android并不必要变成Android。当年Steve Job为了获得微软的支持,不得已让MAC PC可以运行Microsoft的Office软件。QNX有自己的特色,没有必要屈身成为另一个Android。 RIM是需要很多改变,但客观的讲,下一代Playbook的表现一定不错。 APP的希缺是Playbook的主要问题,一旦Android虚拟机发行了,这个问题就会改善很多。而且一旦有了用户群,就会带动其App的开发。 最近所以Playbook从16G model到64G全线降价300元左右。既是Playbook的销售情况所迫,降价也是一个策略,后果很难说。你可知道现在哪一个tablet占据第二的市场占有率(IPAD第一)?=> 是HP的Touchpad,而不是哪一款Android。微软在推销XBOX初期也是赔本赚吆喝,每卖出一个console要赔126美元,在XBOX销售的第一年因此赔了40亿美元,而后有很一段时间因Wii和PlayStation激烈竞争,过了三年微软也未能扭亏为盈。
没有特色才最可怕,看看PC兼容机之间的残酷竞争就知道未来Android产品的下场如何,只能养大下一个微软式的公司Google,而制造商之间只好搏命拼杀,拼硬件成本,因为软件,UI,APP都是一样的,都来自Google。要知道硬件的盈利已经很薄了,这样下去对OEM们很不利。
摔倒不可怕,还可以站起来。想当年Apple在Jobs回归后,卧薪尝胆,洗心革面,才有了今天的傲视群雄。RIM的众多企业用户群还在,若能将QNX发扬光大,必有一番作为。
果粉们可以看看文学城的关于果粉十大不靠谱观点;安卓迷们也可看看关于专家对Android一统天下的担忧。流氓不可怕,就怕流氓有文化。人云亦云,随波逐流,没有主见,就会蒙蔽自己的眼睛。群众的眼睛不是雪亮的,真理是掌握在少数人手中,不管你信不信,反正我信。

Thursday, November 10, 2011

Windows 7的固态硬盘(SSD)优化

SSD是英文Solid State Drive的缩写,中文译作固态硬盘或电子硬盘,目前越来越多地在计算机和便携电子设备中使用。SSD是基于电子芯片,通常用闪存(Flash)芯片。闪存芯片细分也有很多类,如NAND, NOR, MovieNand, iNand, eMMC。大家常用的SD卡就是Nand闪存芯片封装在塑料壳内。
SSD有众多下显而易见的优点,可以替代传统硬盘,只是价格上还不具优势。其优点是:具有低功耗、无噪音、抗震动、低热量的特点,不仅使得数据能更加安全地得到保存,而且也延长了靠电池供电的便携设备的连续运转时间。例如韩国三星半导体公司(SAMSUNG Semiconductor)于2006年3月推出的容量为32GB的固态硬盘,采用了和常规微硬盘相同的1.8英寸规格。其耗电量只有常规硬盘的5%,写入速度是常规硬盘的1.5倍,读取速度是常规硬盘的3倍,并且没有任何噪音。今天刚看到的: Corsair刚刚宣布配备Marvell公司SATA3性能Pro系列的6Gb / s固态硬盘这些2.5英寸SSD可以达到515 MB/s的读取和440 MB/s的写入速度如果你有兴趣280美元128GB版本,而530美元256GB容量对于玩电脑游戏,或运行大量计算,或经常编译大量程序的用户来说,目前的计算机CPU速度都很快,内存也足够多,显卡的性能也不错,通常瓶颈就在硬盘上。我经常用GNU的compiler编译大量程序,我的Laptop换了SSD后,其编译速度不亚于Core i7的Desktop PC。
目前SSD的最大问题仍然是成本和写入次数。随着SSD逐渐普及,工艺不断改进,芯片的集成度不断提高,其成本正逐步下降。而闪存的写入次数通常在1万到一百万次,对普通用户来说,SSD的寿命足以使用到更新换代的时刻到来。相比之下,其售价的下降还很缓慢。
SSD大部分被制作成与常规硬盘相同的外形,例如常见的1.8英寸、2.5英寸或3.5英寸规格,并采用了相互兼容的接口;但有些固态硬碟也使用 PCI Express 或是 Express Card接口,以提高传输的速度或减小体积。
由于SSD具有与传统硬盘显著不同的特性,所以在Windows操作系统中,有很多设置可更好地发挥SSD的优越性。下文译自 Computing.net by Tom's Guide,原文Solid State Drive (SSD) Tweaks for Windows 7。为了方便理解,我添加了一些术语的解释和一些网页连接。
By: tecmo34
December 19, 2010
这个HOWTO是提供用于优化Windows 7的SSD设置。建议这些调整的前后测试你的SSD的性能,看看它们的performance是否有所改善。我建议使用AS SSD Benchmark检测你的SSD的性能。
警告!读者需要充分了解这些建议的调整可能发生的任何损害。这些只是建议,以提高SSD的性能,如果你的SSD运作正常,你并不需做这些设置。
  1. SATA控制器设置为AHCI(Advanced Host Controller Interface)模式
    在安装过程中,你要确保你的BIOS设置为AHCI,以启用SATA控制器的AHCI(关于AHCI,请参见Intel的介绍)。 启用AHCI才能利用SSD内置的TRIM功能(参见wikipedia的TRIM介绍)。
    如果您已经把SSD安装在IDE模式下的操作系统,而你的BIOS支持AHCI,最好切换为AHCI,可按照微软此文所述步骤:http://support.microsoft.com/kb/922976。
  2. 验证TRIM是否启用,确认TRIM命令正在从Windows发送到SSD。
    如何验证TRIM是启用
    • 在开始菜单的搜索框中,键入“cmd”;
    • 右击CMD程序,并选择以管理员身份运行;
    • 在命令行中输入“fsutil behavior query DisableDeleteNotify”。
    • 如果DisableDeleteNotify = 0, TRIM已启用。
    • 如果DisableDeleteNotify = 1, TRIM未启用。
  3. 禁用系统还原(Disable System Restore)
    随着时间的推移,启用系统会逐渐降低SSD的效率,从而使TRIM很难发挥作用。建议禁用系统还原功能,并可以保留宝贵的SSD存储空间。
    如何禁用:
    • 右键单击我的电脑(My Computer),选择属性(Properties);
    • 选择“系统保护”(System Protection);
    • 选择“配置”(Configure);
    • 选择“关闭系统还原”(Turn Off System Restore)
  4. 禁用驱动器索引(Disable Drive Indexing)
    SSD的访问时间很短(最多为​​0.1毫秒),没有必要像普通的硬盘那样需要启用Drive Indexing来提高响应时间。
    如何禁用:
    • 进入我的电脑(My Computer);
    • 右键点击你的SSD,并选择“属性”(Properties);
    • 取消勾选框标有“允许启用内容索引的文件属性”("Allow files to have contents indexed in addition to file properties")。
    • 一个弹出的画面可能会出现,说明有错误应用属性(an error applying attributes),这是正常的,你应该选择“全部忽略”,并继续。
  5. 禁用驱动器的定时碎片整理(Drive Defragmentation Schedule)
    根据预设,启用TRIM后,Windows 7应该自动禁用碎片整理。如果没有,你需要禁用此功能,因为defraging你的SSD不是一件好事!!
    如何禁用:
    • 进入我的电脑(My Computer);
    • 右键点击你的SSD,并选择“工具”(Tools)选项卡;
    • 选择框立即重组(Defragment Now);
    • 选择框配置计划(Configure Schedule);
    • 取消"按计划运行"(Run on a Schedule)
  6. 禁用页面文件(PageFile)
    这并不提高SSD的性能,但可为你夺回SSD上的3至4 GB的宝贵空间。此外,如果你的内存小于4GB,或你的程序需要大量内存,则不建议你做这一步。
    如何禁用:
    • 右击我的电脑(My Computer);
    • 选择“属性”(Properties);
    • 选择“高级系统设置”(Advanced System Settings);
    • 选择“性能”(Performance)选项卡和“高级”(Advanced)选项卡;
    • 选择改变虚拟内存(Change box for virtural memory);
    • 取消勾选自动管理所有驱动器页面文件大小(Automatically Manage Page File Size For All Drives);
    • 选择无分页文件(No Paging File),并单击该设置框(Set);
    • 选择yes允许并重新启动
  7. 禁用休眠
    禁用休眠状态将为你夺回SSD宝贵的存储空间2 GB。此外,作为固态硬盘,由于它的快速加载时间,休眠没有提供多少好处。
    如何禁用:
    • 在开始菜单的搜索框(start menu search box)中,键入“cmd”;
    • 右击CMD程序,并选择以管理员身份运行(Run as Adminstrator);
    • 在命令行中键入“powercfg -h off”。
    • 一旦完成,将返回命令提示符。
  8. 禁用预取(Prefetch)和超取(Superfetch)的
    如何禁用:
    • 运行Regedit
    • 进入"HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters"
    • 右键单击EnablePrefetcher和EnableSuperfetch;
    • 选择修改这些值从1(或3)更改为0,
    • 重新启动。
  9. 禁用Windows Write-Cache Buffer Flusing
    这是Intel SSD不建议,因为它可能有负面影响。推荐调整前后检查性能,以确定效果。
    如何禁用:
    • 右击我的电脑(My Computer)并选择属性;
    • 选择“设备管理器”(Device Manager);
    • 选择磁盘驱动器(Disk Drives);
    • 右击SSD和选择“属性”(Properties);
    • 根据政策选项卡,取消选中启用写入缓存在设备上。
  10. 禁用Windows搜索和Superfetch的
    如何禁用:
    • 按Winkey +“R”运行的对话;
    • 输入“services.msc”并回车;
    • 滚动了解SuperFetch,右击并选择“属性”;
    • 在下拉菜单中,选择“禁用”,然后选择确定;
    • 滚动到Windows搜索,右击并选择“属性”;
    • 点击停止框,比使用下拉菜单,选择“禁用”,然后选择确定
  11. 禁用ClearPageFileAtShutdown和LargeSystemCache
    如何禁用:
    • 运行Regedit
    • 选择"HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SessionManager\Memory Management"
    • 右键单击ClearPageFileAtShutdown和LargeSystemCache;
    • 选择修改这些改变的值从1到0,
    • 重新启动
  12. 调整电源设置
    调整电源设置
    • 进入控制面板(Control Panel);
    • 选择“系统和安全”(System and Security)
    • 选择“电源选项”(Power Options),点击下拉Show Additional Plans
    • 选择高性能(High Performance),点击应用(Apply);
    • 高性能(High Performance),单击“更改计划设置(Change Plan Settings);
    • 单击“更改高级电源设置(Change Advanced Power Settings);
    • 点击下拉选项的硬盘(hard disk);
    • 更改为0分钟后关闭硬盘(never)
    • 选择“确定”;
    • 选择保存设置。
Copied from Computing.net by Tom's Guide,原文Solid State Drive (SSD) Tweaks for Windows 7
By: tecmo34
December 19, 2010

This HowTo is to provide the common tweaks used to optimize your new SSD for Windows 7. I would recommend checking the performance of your SSD before and after these tweaks to see how they impact your performance. I recommend using AS SSD Benchmark to check your performance.
Warning! The reader takes full responsibiity for any damage that may occur to their PC or hardware by follwing these recommended tweaks. These are just recommendations to improve the performance of the SSD but are not required if your SSD is functioning correctly.
Step 1. SATA Controller set to AHCI Mode:
  • During the installation process, you want to ensure your BIOS are set to AHCI for the SATA controller to enable AHCI. AHCI is needed for native TRIM support utilized by a SSD.
  • If you have already installed the OS in IDE mode, it is recommened to switch to AHCI after completing the steps listed in this Windows Article: http://support.microsoft.com/kb/922976, if your BIOS support AHCI.
Step 2. Verify TRIM is Enabled
Verifing TRIM will confirm that the TRIM commands are being sent from Windows to the SSD.
How to Verify TRIM is Enabled
    • In the start menu search box, type" cmd";
    • Right click the cmd program and select Run as Adminstrator; and
    • In the command line type "fsutil behavior query DisableDeleteNotify".
      • if DisableDeleteNotify = 0 TRIM is Enabled.
      • If DisableDeleteNotify = 1 TRIM is Disabled.
When typing in the command window, don't include " " when typing.

Step 3. Disable System Restore
System Restore on a SSD can degrade the SSD performance over time and make it very difficult for TRIM to work. It is recommended to disable System Restore to prevent this and to regain valuable SSD storage sapce.
How to Disable:
    • Right click on My Computer and select Properties;
    • Select System Protection;
    • Select Configure; and
    • Select Turn Off System Restore.

Step 4. Disable Drive Indexing
With the access times of a SSD (0.1 ms for most), there is no need to index the drive for quicker response times, like with a standard hard drive.
How to Disable:
    • Go into My Computer;
    • Right click your SSD and select Properties; and
    • Un-check the box marked "Allow files to have contents indexed in addition to file properties".
    • A popup screen may appear, stating there is an error applying attributes, this is normal and you should select "Ignore All" and continue.

Step 5. Disable Drive Defragmentation Schedule
By default, Windows 7 should automatically disable defrag by default as part of the TRIM requirements. In case it doesn't, you'll want to disable this feature, as defraging your SSD is not a good thing!!
How to Disable:
    • Go into My Computer;
    • Right click your SSD and select Tools tab;
    • Select the box Defragment Now;
    • Select the box Configure Schedule; and
    • Un-check the the Run on a Schedule Box.


Step 6. Disable PageFile
This does not improve the performance of the SSD but does get you back 3 to 4 GB of valuable space on your SSD. Also, it is not recommend for users with less than 4GB of Memory or doing without watching your RAM usages prior to implementing.
How to Disable:
    • Right click My Computer;
    • Select Properties;
    • Select Advanced System Settings;
    • Select the Performance tab and Advanced tab;
    • Select the Change box for virtural memory;
    • Un-check Automatically Manage Page File Size For All Drives;
    • Select No Paging File and click the set box; and
    •  Select Yes to allow and restart.

Step 7. Disable Hibernation
Disabling hibernation will return 2 GB of valuable storage space to your SSD. Also, it provides no real benefit to a SSD due to it's quick load times.
How to Disable:
    • In the start menu search box, type" cmd";
    • Right click the cmd program and select Run as Adminstrator; and
    • In the command line type "powercfg -h off".
    • Once completed, the command prompt returns.
When typing in the command window, don't include " " when typing.

Step 8. Disable Prefetch and Superfetch
How to Disable:
    • Type Regedit into the Start Menu;

    • Select the file path; "HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters"
    • Right click on both EnablePrefetcher and EnableSuperfetch;
    • Select modify on each of these to change the value from 1 (or 3) to 0, and
    • Restart.

Step 9. Disable Windows Write-Cache Buffer Flusing
This is not recommended for Intel SSD, as it has a negative effect on their performance. It is recommend to check performance before and after this tweak to determine if has a negative or postive effect.
How to Disable:
    • Right click My Computer and select Properties;
    • Select Device Manager;
    • Select Disk Drives;
    • Right click the SSD and select Properties; and
    • Under the Polices tab, uncheck the Enable write caching on the device.

Step 10. Disable Windows Search and Superfetch
How to Disable:
    • Press Winkey + 'R' for Run Dialogue;
    • Type "services.msc" and press Enter;
    • Scroll to Superfetch, right click and select Properties;
    • In the drop down menu, select Disabled and select Ok;
    • Scroll to Windows Search, right click and select Properties;
    • Click the Stop box, than use the drop down menu, select Disable and select Ok.

Step 11. Disable ClearPageFileAtShutdown and LargeSystemCache.
How to Disable:
    • Type Regedit into the Start Menu;

    • Select the file path; "HKEY_LOCAL_MACHINE\CurrentControlSet\Control\SessionManager\Memory Management"
    • Right click on both ClearPageFileAtShutdown and LargeSystemCache;
    • Select modify on each of these to change the value from 1 to 0, and
    • Restart.

Step 12. Adjusting the Power Settings
Adjusting the Power Settings
    • Go to Control Panel;
    • Select System and Security'
    • Select Power Options and Click the drop down for Show Additional Plans;
    • Select the High Performance bubble to apply it;
    • Click Change Plan Settings for High Performance;
    • Click Change Advanced Power Settings;
    • Click the hard disk drop down option;
    • Change Turn off hard disk after to 0 minutes (Never)
    • Select OK; and
    • Select Save Settings.


Tuesday, October 4, 2011

Wireless 无线网设置与安全(之一)

好来物的电影拍得很好看,电影票和DVD也卖得很贵。既然网上可以轻尔易举的免费下载,何乐而不为?2010年《拆弹部队》(英文名:Hurt Locker)获得了第82届奥斯卡颁奖包括最佳影片、最佳导演在内的六项大奖。于是大家各显神通,下载copy。不成想,近来拍摄此电影的电影公司Voltage Pictures大举诉讼,提起24583起诉讼。对于全部诉案Voltage Pictures都有IP地址可以追踪,然后要求ISP网络运行商提供用户的个人信息。其中只有2278个IP地址Voltage Pictures还未从ISP商那获得用户信息。尽管9月底Voltage Pictures自愿撤诉90%,还有超过2300诉案正在处理中。至于2万多起的撤诉因是自愿行为,即未经审理,理论上Voltage Pictures还可以从新提起诉讼。诉案还波及了加拿大。有30个加拿大用户也遭起诉。下图是Voltage Pictures列出的来至Bell Canada的IP。
由于Voltage Pictures联合了Dunlap, Grubb和Weaver law firm,著名的美国版权保护组织,很多被告选择了破财消灾,但无具体数字可知有多少案例厅外和解,有人透露少则也要千刀以上。
那么,网上下载在美国加拿大这些所谓的民主自由国家犯法吗?Voltage Pictures是怎么获得这些IP的?为什么有的人即未上传,也未下载,却被Voltage Pictures起诉了呢?
根据法律,未经授权许可下载或复制有版权资料文档下载违法,上传同样违法,哪怕没有盈利的目的(想当雷锋也不行)。不过对于普通的下载,版权拥有者很难监视或取证下载情况,因为必须取得下载服务器的拥有者的配合去获取下载的log文件,而且此log文件还必须有下载者的IP记录和文档下载记录(一般服务器不会log这些信息,过于庞大,浪费存储空间,又没有意义)。不过出于隐私保护的原因,如果没有法院的批准,通常没有任何组织可以要求服务器的主人提供这些资料。而法院要先有嫌疑证据才会发出申请令。因此,单纯的下载很难引发诉案。不过上传和BT下载就不同了。版权拥有者如在一文件服务器上发现非法拷贝,就可向法院申请法令去要求服务器拥有者提供上传者的资料。同样,如果用BT下载,由于BT的机制,所有的BT的client下载客户端一定要在tracker服务器上注册(这就是为什么BT软件可以显示下载资源),才能利用BT的P2P机制。
根据BitTorrent协议,文件发布者会根据要发布的文件生成提供一个.torrent文件,即种子文件,也简称为“种子”。种子文件本质上是文本文件,包含Tracker信息和文件信息两部分。Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的Bencode规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。下载者要下载文件内容,需要先得到相应的种子文件,然后使用BT客户端软件进行下载。下载时,BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已经有的块,然后交换对方所没有的数据。此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。版权拥有者只要用程序不停查询Tracker服务器就可获得BT下载者的IP地址,然后要求法院发出法令给ISP商,令其提供相应IP地址的用户信息。所以BT下载就可能惹火上身。所以建议大家尽量不要用BT下载电影,哪怕是中国的电影,说不定哪天中国的电影公司学会与世界接轨,告到这来。
尽管普通用户都是从ISP那得到动态IP地址,这个IP地址通常不会变的,因为ISP的DHCP server通常会cache你的MAC地址,并在一定时间内锁定一个IP给你。除非你的Modem很长时间离线,DHCP不会把这个IP assign给别的用户。即使你的IP会变,DHCP server也可能有log记录下IP的变更和用户ID。所以逃不掉的。如想了解更多BT侵权方面的消息,可参见TorrentFreak网站
最倒霉的是有些人并没有下载,IP却出现在黑名单上,难道他们真的被冤枉了吗?可能冤而不枉,因为他们的无线网的密码很可能被破解了。越来越多的人开始使用无线网路由器(wireless router),很多人根本就不加密,很多人还在用WEP,很多人的WPA密钥很容易被猜到。感兴趣的朋友,google一下Aircrack-ng,或看看中文网站http://blog.ibeini.com/archives/365.html。对于WEP加密,用Aircrag-ng,不需要太多专业知识,基本两分钟内即可破解。

Tuesday, September 27, 2011

IT 风云 之一: 风起云涌

Update: 在写本文时,在网上找到一个网站:赛伯时空,讲述或摘录了很多IT历史故事,省了我很多事,也丰富了我的见识,有兴趣的去看看,很不错。
科技的发展是日新月异,也缔造了无数的传奇,如咱们春秋战国的历史般让人眼花缭乱。不知最近可有人记述过,今天刚好看到新闻说Julius Blank过世了,就从他开始聊一聊很多年轻一代都不大知道的仙童半导体公司(Fairchild Semiconductor Corporation),因为Julius Blank正是仙童的创始人之一。仙童半导体公司曾经是世界上最大、最富创新精神和最令人振奋的半导体生产企业,为硅谷的成长奠定了坚实的基础。

1957年Blank和Victor Grinich, Jean Hoerni, Eugene Kleiner, Jay Last, Gordon Moore, Robert Noyce, and Sheldon Roberts被称作Traitorous Eight(八叛逆),一同从William Bradford Shockley(不要说你没听说过Shockley,被誉为晶体管之父,1947年与他人合作发明了晶体管,中文常译作威廉·肖克利)创建的Shockley Semiconductor Laboratory实验室辞职(据说是因Shockley太固执己见,独断专行),接受纽约的“仙童摄影器材公司”(Fairchild Camera and Instrument,投资商的主人是Sherman Fairchild,这就是仙童名字的由来)的资助而成立了仙童半导体公司。在Blank的领导下,仙童首创用硅(silicon)做基板(substrate)并制造出第一个可商业化大量生产的集成电路(第一个集成电路是由TI制造并申请了专利),而硅可以从沙子中提炼。右图来自wikipedia.org。1958年仙童的Jean Hoerni开创了planar的晶体管制造工艺,使晶体管制造变得容易和廉价,最终成为业界的唯一选择。第一个用这种工艺制造出来的2N697被以$150的价格卖给了IBM。1963年,仙童开始研发集成运算放大器,并于1964年和1968年先后推出µA702,µA709和大名鼎鼎的µA741。用过集成运放做设计的人几乎没有不知道µA741,90年代中期我在中国航天部门工作时,电路设计中还在大量使用。
八叛逆的名字可能很多人都不是很熟,他们也被称作Fairchild Eight或Shockley Eight。八叛逆的大部分并未止于仙童,而是后来因各种原因纷纷离开仙童创建了很多新的公司。其中两人你可能知道,Gordon Moore(摩尔定律总听说过吧) and Robert Noyce,正是Intel的创始人。本来,由于Noyce的杰出贡献,1966年他被提升为VP并成为事实上的部门领导者。尽管仙童半导体部门坐落在加利福尼亚的Mountain View和Palo Alto,部门总裁John Carter却常年留在纽约州的Syossett。Carter只是每年到加利福尼亚走马观花来一次,可他却把半导体部门的盈利大吧用来购买和补贴新的产业,而很多这些新产业根本不盈利。这造成了半导体部门很多人的不满。同时,到1967年,很多新的startup公司也给仙童带来了激烈的竞争。当年仙童出现了成立十年来的首次亏损,所以董事会要Carter卖掉其它不盈利的产业,可Carter却以辞职来回应。Noyce本应顺理成章地成为继任者,可Sherman领导的董事会却一直试图找个新的人选。倍感冷落的Noyce决定出走,同时带走了当时仙童R&D的主管Moore,由此他们成立了Intel公司,主要投资者包括八叛逆中的另外五人。他们俩已经是八叛逆中最后两个离开仙童的了。此后Sherman Fairchild从Motorola请来Lester Hogan做CEO,而Hogan很快把一百多Motorola的经理们(这个Motorola来的团队被称作Hogan's Heroes)全挖到仙童替代整个原来的管理层,此事还引起Motorola对仙童的法律诉讼。当时IT的日新月异的发展已经吸引很多仙童人离职,自创公司或加盟别的startup,而Hogan的这一举动更带来了仙童大量人才的出走。这些仙童子凭着仙童的经验和人脉关系,带着仙童人的开创精神,成立了越来越多的科技企业公司。他们和他们成立的公司被称作Fairchildren。Walter Jeremiah Sanders III是他们中间的一个,被称作硅谷的创始人,曾是仙童半导体公司销售部主任,他正是被Hogan从Motorola带到仙童的经理之一。1969年,当仙童的几个工程师决定创建一个新公司时,他们邀请Sanders同行,Sanders答应了,但前提条件是由他做CEO,虽然有些争论,但最终Sanders得到了他想要的,Advanced Micro Devices (AMD)就这样诞生了(Motorola的人也经常戏称AMD为Another Motorola Division)。正是在仙童经历使Sanders懂得,要想让员工同心协力,必须让员工受惠于企业的发展,所以Sanders第一个采用Stock option来激励员工。
正是仙童为硅谷孕育了成千上万的技术人才和管理人才,它被称为电子、电脑业界的“西点军校”,是名符其实的“人才摇篮”。正如苹果公司乔布斯形象比喻的那样:“仙童半导体公司就象个成熟了的蒲公英,你一吹它,这种创业精神的种子就随风四处飘扬了。一批又一批精英人才从这里出走和创业,书写了硅谷一段辉煌的历史;然而,正因为人才的大量流失,也造成了这家公司历经坎坷的商海沉浮。
以下英文内容及图片转自Engadget


The Manhattan-born Blank (pictured third from left, above) began his engineering career in 1952, when he joined AT&T's Western Electric plant in New Jersey. As a member of the engineering group at the plant, Blank helped create phone technology that allowed users to dial long-distance numbers without going through an operator. It was also at Western Electric where he met fellow engineer Eugene Kleiner. In 1956, Blank and Kleiner left AT&T to work at the lab of Nobel Prize-winning physicist William B. Shockley, but departed just one year later (amid to start Fairchild, alongside a group of six other computer scientists that included future Intel Corporation founders Robert Noyce and Gordon Moore. At their new labs, Blank and his peers developed an inexpensive method for manufacturing silicon chips, earning them $1.5 million in capital from a single investor. As the only two with any manufacturing experience, Blank and Kleiner were charged with bringing the dream to fruition -- a task that required them to build the chips from scratch, beginning with the machinery for growing silicon crystals. They succeeded, of course, and in 1969, Blank left Fairchild to start Xicor, a tech firm that Intersil would later buy for $529 million, in 2004. But his legacy will forever be linked to those early days at Fairchild, where, as Blank described in a 2008 interview, he and his colleagues were able to experience the unique thrill of "building something from nothing."
在赛伯时空看到这个也很不错:http://www.cst21.com.cn/1/fsc.htm

Monday, September 26, 2011

IT 风云 之二: 收购 吞并

没空多写,感兴趣自己Google: 2001~2011 billion dollar以上的收购

Aug 30, 2011 Intel's $1.4 billion Infineon mobile chips
Aug 18, 2011 HP buy Autonomy for 10~11b
Aug 15, 2011 Google Motorola 12.5b
Jun 23, 2011 Electronic Arts To Acquire PopCap For $1 B
Jun 14, 2011 Ericsson to acquire Telcordia for $1.15 b
May 25, 2011 Qualcomm Completes $3.1 Billion Acquisition of Atheros Communications
May 10, 2011 Microsoft Skype 8.5b
Apr 5, 2011 TI 6.5b buy National Semi
Mar 28, 2011 eBay To Acquire GSI Commerce for $2.4 B
Mar 20, 2011 AT&T to acquire T-Mobile for 39b
Jan 27, 2011 Verizon will acquire Terremark for $1.4b
Nov 22, 2010 Attachmate acquires Novell for $2.2 b http://news.cnet.com/8301-30685_3-20023535-264.html
Sep 20, 2010 IBM to Acquire Netezza for $1.7 B
Sep 13, 2010 HP acquires ArcSight for $1.5B
Sep 2, 2010 HP acquire 3PAR 2.07b or $2.35b?(Dell also wants 3PAR with 1.15 on Aug 16, 2010)
Aug 30, 2010 Cisco Moves to Acquire Skype for US$ 5 B
Aug 19, 2010 Intel to acquire McAfee for $7.68 billion
Jul 6, 2010 EMC buy Greenplum $3b?
May 24, 2010 IBM to Acquire AT&T Sterling for $1.4 B
May 20, 2010 Symantec to Acquire VeriSign for $1.3 B
Apr 28, 2010 HP acquire Palm 1.2b
Feb 10, 2010 Micron To Acquire Numonyx For $1.27 B
Nov 11, 2009 HP acquire 3com 2.7b
Sep 21, 2009 Dell to Acquire Perot Systems for $3.9 B
Jul 29, 2009 IBM to Acquire SPSS for $1.2 B
Apr 20, 2009 Oracle Sun 7.4b
Jun 5, 2008 Verizon Wireless To Acquire Alltel For $28.1 B
Jan 16, 2008 Sun to acquire MySQL for $1 bi
Oct 1, 2007 Nokia to acquire Navteq for $8.1 B
Jul 24, 2007 AMD buy ATI 5.4b
Jul 23, 2007 HP to acquire Opsware for $1.6 b
May 18, 2007 Microsoft To Acquire Online Marketing Firm aQuantive For $6 B, 1 day after WPP Acquires 24/7 Real Media for $649m
Oct 9, 2006 Google to acquire YouTube for $1.65 b
Jun 29, 2006 EMC to buy RSA for $2.1 b
Dec 13, 2004 Oracle buy PeopleSoft 10.3b
Oct 14, 2003 EMC to Acquire Documentum for $1.7 B
Sep 3, 2001 HP announced to buy Compaq, and completed the merge in May 2002 with 25b.

http://www.businessinsider.com/apple-spent-26-billion-for-the-nortel-patents-2011-7 : Apple Spent $2.6 Billion For The Nortel Patents
April Fool's Day joke last Friday: "NetApp to Acquire EMC for $9.5 Billion
Microsoft to Purchase Nokia for $19 Billion? Another rumor?

Tuesday, September 20, 2011

Broadcom关掉大多伦多地区的DTV部门

今天(Sep 19, 2011)对大多数人只不过是平常的一天,可对DTV的近百员工来说却是黑暗的一天,尽管很多人预感到这最终的结局。很多人呈是三朝元老,从ATI到AMD到Broadcom,鼎盛时期呈有超过500员工,拥有很多video方面的IP。因AMD的没落,原本谈妥192 million 卖给Broadcom,可在交割期,又被Broadcom再砍一刀最终以165 million 成交。很快就听说11个VP被砍掉9个。而今天,更是整个部门关掉,几乎所有人都未来得及收拾自己的私人物品(据说会被通知在指定时间来取)。看来加拿大对IT高科技产业真的缺点什么,以至从Nortel,ATI到RIM,一个个倒下。

Monday, September 12, 2011

介绍一下RIM QNX

上文说到我很看好RIM的QNX,是因工作原因接触很多。QNX有着远比Android悠久的历史,是一个很成熟的所谓微核(MicroKernel)操作系统,广泛地应用于嵌入式系统(RTOS),被移植到PowerPC, x86 family, MIPS, SH-4和ARM(StrongARM and XScale CPUs),凭借其高可靠性、小巧、配置灵活,提供标准POSIX接口,方便移植应用程序,QNX被用在超过200个型号的汽车上。QNX还提供了很好的开发环境, 它的编译系统是基于GNU,对ARM处理器有很好的支持;它的IDE是基于Eclipse,做JAVA的和Android开发一定都很熟悉,QNX做了很多扩展,使得其功能很强大,不只是编程的利器,而且是调试的好帮手。如截图所示,IDE提供很方便的profiling和kernel log,极大地方便了系统程序员调试performance,debug多核多进程和多线程问题。
RIM也是直到2010年四月才收购的QNX,而PlayBook可能是第一个RIM采用QNX的产品。早在RIM收购QNX前,QNX就已经是很成熟的产品了。RIM近来丢失了不少市场份额,一方面是由于来自Apple和Android的激烈竞争,一方面是RIM没有很好的定位自己的产品,加之前一段时间的服务器down机问题给RIM的声誉也带来很坏影响。RIM还推迟了下一代操作系统BBX(也就是QNX+UI)的推出,同时许诺的支持Android APP的Java虚拟机的release也尚有时日。就我个人来看,这只是黎明前的黑暗。RIM不可能退出Smart Phone市场,RIM的新产品是跟Qualcomm进行紧密地合作。两家公司都不喜欢张扬,但新的手机和Playbook是基于Qualcomm的MSM8960,其多媒体支持,CPU性能,通讯能力(3G/4G)等都是其它产品没法比的。目前市面上Tablet多用nVidia的Tegra GPU, 但即使是其最新的Tegra3也远逊色于高通的MSM8960,更何况MSM8960还整合了LTE/CDMA/GSM modem。新产品要明年一季度推出,到那时才可见RIM的这一搏能否咸鱼翻身。
RIM和QNX都是基于加拿大Ontario的公司。所以现在对RIM来说最重要的是需要改变企业文化,所以RIM很需要被收购。另一方面,以我所见,MicroKernel是一个很有发展的Architecture Design,Qualcomm的BMP也是基于MicroKernel的L4。问题是需要推广应用,特别是当今竞争激烈,开放的环境才会提供更多的发展空间,所以我给RIM和QNX的建议就是OpenSource开源。如果微软收购了RIM,很可能会把QNX卖掉,我敢说Qualcomm一定会跳出来把QNX买下来。Android的发展势头很猛,但不会一统天下,同样Apple的IOS也做不到。HP虽然决定停止继续开发WebOS的硬件产品,但HP同时宣布不会放弃WebOS,所以很可能会采用授权的方式供第三方使用。已有传闻HTC可能会收购WebOS。

Saturday, September 10, 2011

谁该收购谁之我见

Update@Sep 15,2011. Now Google has added a further 1,023 patents from IBM in a bid to protect its Android operating system and its Open Handset Alliance partners that load it onto their devices. Link is here。RIM的收益减少58%,离被收购不远了。
最近四年,屁股没动地方,公司就换了仨,第一次是公司被收购了,第二次是部门被第二个公司卖给第三家公司,因为我们不是核心产业。好在第三家公司还不错。三家企业还都算高科技,当然都是IT,颜色从红变绿再变蓝。自觉得对IT业收购小有心得。如果算得准,股票上就可小捞一把,可惜总是人算不如天算,我算的不如CEO算的。 最近IT界又盛刮收购风,单单今年就有数起大手笔收购:Google $12.5 billion 收购Motorola Mobile,HP $10 billion 收购Autonomy,Microsoft $8.5 billion 收购Skype,Qualcomm $3.1 billion 收购 Atheros,eBay $2.4 billion 收购 GSI Commerce, Intel $1.4 billion 收购 Infineon mobile chips。如果算上AT&T $39 billion 收购 T-Mobile,更加让我想起一句歌词:这个世界变化快。
早在2007年春甚至2006年,IT界盛传Intel和AMD会分别收购nVidia和ATI,普遍认为AMD会并购nVidia,Intel会并购ATI,因为AMD与nVidia合作更多于与ATI合作,而Intel与ATI走的更近。可出人意料的是AMD最终收购了ATI,Intel独自搞起Larrabee project-用16个甚至更多个mini x86 核做GPU。当时ATI在与nVidia激烈的竞争中正处于下风,所以我猜想ATI的要价可能远比nVidia底,另一方面也阻击了Intel收购ATI的可能。谁也没想到这次大手笔收购使AMD伤了元气,又赶上Barselona芯片出了bug,从此一蹶不振,股价由20几元直落到一元多才开始反弹,如今也不过6元多。而Intel却不断发力,先后发布了很多款新的高性能低功耗的CPU,工艺从45nm到32nm,然后到28nm,令AMD望尘莫及。可怜我的AMD股票套在二十多元至今还没舍得割(虱子多了不咬,债多了不愁,俺极少炒)。
在AMD不景气的时候,又有很多rumor到处飘传,IBM,Samsung,Apple,Oracle,Dell,HP,中东的财团甚至Qualcomm会收购AMD。当时AMD最缺的就是钱。中国很有钱,也很想发展包括CPU在内电子产业(听说国龙芯吧,还有丢人现眼的汉芯一号),可是美国政府肯定不让卖,就连Samsung和中东这些美国的友邦,美国政府也未必肯把掌握CPU核心技术的AMD拱手转卖(出钱买股权可以)。IBM,Apple,Oracle,Dell,HP和Qualcomm也都是财大气粗的主,除Dell之外也都喜欢大把钞票收购吞并,其中几家更是有成billion的cash存在银行,而AMD的市值仅5、6个billion(最低时甚至不足2个billion),为何至今无人收购AMD呢?难道大家都惧怕与Intel斗?后来终于找到一个比较可信的说法:大家可能都知道AMD与Intel有协议关于x86兼容芯片的研制和制造。如果AMD换了强大的东主,Intel就可能动用法律武器来阻止威胁。Intel需要的是一个垂而不死的AMD,即不会被人以反垄断的名义分拆,也不用担心有朝一日AMD会形成技术威胁。这样,我的AMD股票就只好被继续套住了。
年初时,Nokia决定放弃经营多年的Symbian,也不打算继续与Intel合作Meego,转而投向微软怀抱,准备集中全力开发Windows Phone 7智能手机。面对Apple和Google的Android的激烈竞争,Nokia正不断失去市场分额,日子很不好过。微软的处境也不咋样,操作系统方面面临openSource和Mac OS的强力竞争,Windows CE更是快被挤出市场,不过倒是还有50多个billion的cash还在银行放着,所以市场传闻Microsoft很可能会大手笔收购Nokia,后者的市值现今不过20几个billion。此间,尽管Android的势头很好,Google却很不爽,因为Apple,Oracle和Microsoft都在诉Google或Android产品的制造商专利侵权。事实上这类专利侵权诉讼有很多猫腻,已经完全失去了知识产权保护的本意,而变成公司间恶意竞争和讨价还价的工具和筹码,如Apple与Nokia, Apple与HTC之间,Microsoft与Motorola之间,Nokia与Qualcomm之间,Apple与Samsung之间,都是在互相诉讼,法院上动辄索赔几个billion, 或请ITC封杀对手的产品。最高兴的就是那些layer们,乐此不彼。可怜象Nokia,HTC和Motorola这些在2G、3G和4G打磨了十几年进行了巨额资金投入的手机商们却拿Apple这个初入手机行业两年的新贵却无可奈何。最惨的就是IT巨头Google,直至8月初,它被授权和正申请的手机方面的专利仅区区317项。当文学城发布“Google收购Motorola-----天使还是魔鬼”我呈评论说Google更应收购RIM时,有人跟帖说RIM的技术落后了,可能很多人并不知道RIM和Nokia分别拥有手机方面最多和第二多的专利,分别是3134和2655项。

几个月前Microsoft更是联手Apple,RIM,Sony, Ericsson和EMC用4.5 billion团购了Nortel的6000个遗留专利而把Google挡在门外。而Google最初想用900 million来买下这些专利。可以想像当今年七一Nortel宣布这个消息时,Google是多么的愤懑。在Google12.5个billion收购Motorola Mobile之前,Microsoft同样想收购Motorola,要么没有beat Google的出价,要么因Skype已经花了8.5 billion,一时不便再出手,要么就如猜想的准备收购Nokia甚至RIM。那么Google还可能收购RIM吗?这种可能性还是存在的,原因如下:
1)Google收购Motorola是为了专利,而不是为了自己造Android手机,就像批发商不会跟分销商抢生意一样,所以过后不久Google很可能把Motorola的生产部门剥离出去。
2)RIM收购的QNX有着类似Linux的血统,有着成熟的开发和应用,并且RIM已经在开发VM来运行Android的应用程序。
3)RIM有很多经验丰富的Java程序员
4)RIM有很多企业服务支持,也有很多用户特别是企业用户
这里有篇文章谈了十点Google应该收购RIM的理由:http://crackberry.com/10-reasons-why-google-will-buy-research-motion
因为部分同样的理由,Microsoft甚至Apple也可能收购RIM,特别是RIM的股价相比一两年前已低了很多。
我想这就是为什么Google收购Motorola后,为什么RIM和Nokia的股价涨了很多的原因。

小程序汇报多伦多油价

程序员的好处就是可以编程序。在加拿大做程序员的华人有很多做QA的,可能听说过AutoIT,本人虽然不是QA,却也用AutoIT编过很多script。AutoIT虽然不是OpenSource(呈经是,而且和HotKey有很多渊源,以后有机会再介绍),但确实是100% freeware,不必担心Adware、病毒、木马或后门。可以从此处下载:http://www.autoitscript.com 很多加拿大人特别是多伦多的都知道两个关于油价的网站(俺不是做广告的,只是油商实在太黑):
http://tomorrowsgaspricetoday.com
http://www.torontogasprices.com
第一个网站通常每天下午四点半后会公布预估的明天的油价。第二个网站是由网友们发布的各油站实时油价。大多加油站现在都follow第一个网站的预估价,所以各油站差价不大,不值得为便宜几毛钱跑到很远的油站去加油。问题是有时一忙就忘了回家前check油价,所以我就用Task Scheduler定时运行一个程序返回明日油价。这个AutoIT script程序如下:
#include <ie.au3>
$oIE = _IECreate("http://tomorrowsgaspricetoday.com/toronto-gas-prices.html?city=133",0,0,1,1)
$sHtml = _IEBodyReadHTML($oIE)
$money =StringRegExp($sHtml, "class=predication_gasoline_litre_pro_01>([\d\.]*)", 3)
$trend =StringRegExp($sHtml, "images/gas_arrow_(\w+).gif", 1)
_IEQuit($oIE)
$text="Hi, the gas price is going " & $trend[0] & " " & $money[1] & "cents to " & $money[0] & " cents"
msgbox(0, "Tomorrow Gas Price", $text)
如果想来点有趣的,可以让程序说话,只需在msgbox之前加两句:
$o_speech = ObjCreate ("SAPI.SpVoice")
$o_speech.Speak ('<rate speed="-2"><pitch middle="-10">' & $text & '</pitch></rate>', 8)
你可以调整speed和pitch来改变声调。Toronto的城市编号是133,其它城市需修改程序。
编译好的可执行程序上载到fileserve: File name: gas.zip
File size:314.8 KB

Tuesday, February 15, 2011

推荐BETV网上free看电视,包括中文和英文

更新@Aug 2, 2012: 以下信息有些过时了。BETV几个月前变化很多,请参见另一博文:说说网络电视
文学城上有人推荐的,速度效果都不错,除进入和退出时有一广告页,此外没发现什么垃圾。官方网站:http://mybe.tv/
包括凤凰卫视中文台,凤凰卫视资讯台,Cartoon Network,Discovery Channel,国家地里,东森新闻,东森戏剧,中央1,2,5,10,11,少儿,北京卫视,湖南卫视,NBA,HBO等。
尽管其网页和软件提供注册,实际并无必要,而且登陆总是失败。官方网站提供了一个常见问题网页:http://mybe.tv/faq/faq.html。
其server可能不太稳定,初次安装运行时,可能无法显示节目列表。上面FAQ link提到的解决方案并不适用,因为其UI界面并未提供任何菜单。在线升级也无法解决问题。换个时间运行可能就好了。

Saturday, February 12, 2011

虚拟机上跑Mac OS 10.6.6

看很多人讨论Mac OS,手痒,就上网找了找,终于成功在笔记本电脑上安装。下面介绍一下经验。
前提条件:CPU必须支持硬件Virtualization。如果不确信你的计算机支持硬件虚拟,可以下载运行GRC的SecurAble(下载链接),或下载Intel的Processor Identification Utility,下载链接。另外,还要确保cmos/bios设置里virtualization被enable了。不同PC叫法不同,如AMD-V,Intel-VT,VT-x,Virtualisation Technology,Hardware Virtualisation。在BIOS里改过后,一定要做一次冷启动。否则你会得到:"Virtualisation is enabled but locked out" message。

需下载:
1.经Hazard改写的Snow Leopards 10.6.6 ISO image。参见:http://leohazard.com/download.html,此网页提供一下载链接 Snow Leopard 10.6.6 SSE2/SSE3 Intel Only by Hazard Sharing sites,其link网址是:http://www.mediafire.com/?yll2f9wdpvf0111。这个下载并非OS X的ISO文件,而是一个zipped文本文件即网盘下载列表,提供5个server(4 of them work for me),共4.37G,用了不到1小时并行下载完毕(9个rar文件,释放成一个ISO文件)。
2.snowy_VM.zip,下载链接zshare,含虚拟机设置文件,和一特殊ISO文件用来boot虚拟机。
3.VMPlayer,可以从VMWare网站free下载,若有VM workstation当然更好。Virtual BOX上安装也可以,过程类似。

步骤:
1.把snowy_VM.zip释放到适当的folder里。双击Snowy_VM\Mac OS X Server 10.6 (experimental).vmwarevm\Mac OS X Server 10.6 (experimental).vmx。
2.VMPlayer会启动虚拟机并提示no Operating System。选择Change CD/DVD setting,选load ISO文件,并load Hazard的Snow Leopards ISO image。Reset虚拟机。
3.安装开始了,继续直到左下角出现customize选项,选customize。check以下4项:Chameleon_RC5, Chameleon_Options/Ethernet_BuiltIn and Graphics_Enabler, and patches/USBFix,然后继续。安装要进行十几分钟。
4.安装完重启动后,虚拟机会又提示no Operation System。再次选Change CD/DVD setting,选load ISO文件,并load snowy_VM的darwin_snow.iso,并reset虚拟机。
5.启动后会显示loading DVD,按ESC并按h键以从硬盘启动。此处比较tricky,此过程可能要重复近十次,虚拟机才会正常启动。
6.一旦Mac OS正常load后,选择connect CD/DVD,按提示安装VMWare tools,就大功告成。

代价:每次启动都需要load darwin_snow.iso。

参考:recruitmentmod的video guide,我就是follow这个guide做的,不过老兄的伦敦音俺有时听不懂。


recruitmentmod还有个FAQ在此。其中提到:
Is this technically legal?

It does break Apple's EULA. However you will not be using this for everyday or large scale work. It also depends on how you want to interpret the law on jailbreaking and anti competitive competition which is legal in some countries

其它reference:
http://www.osx86project.org/
http://leohazard.com/download.html
http://mac.pcbeta.com/index.php (中文苹果电脑论坛)

Sunday, February 6, 2011

推荐几个Firefox的Addon之一

我喜欢Firefox的一个很重要的原因是众多功能丰富的Addon。前文提到过Kid Mode Addon,这里再介绍几个我认为应该推荐的AddOn。

1.Delicious:一统江湖的书签。经常上网的人,通常需要保存很多favorite网址,可越来越多的网址,管理起来很不方便。特别是,在公司和家里,通常使用不同的计算机,在公司或别人的计算机上看到个好网站,怎样才能方便的同步到自己的Favorite文件夹哪?Bookmarks的软件和Addon有很多,在我来看,由Yahoo提供的Delicious是个绝佳选择。用户需要在Delicious网站注册账号,之后所有用户bookmark的网址都会在Delicious的server的数据库上记录在案(所以如果你concern隐私,就请掠过)。用户打开任何一台计算机,都可登陆账号查看bookmark的网址,而且可以查阅别人推荐的或热门的网址。作为Firefox的Addon,Delicious被很好的集成进Firefox浏览器,可以方便的查阅搜索所有bookmark的网址。一旦从FireFox登陆到你的Delicious账户,都会自动更新所有的bookmark setting,并且保留在Firefox的系统目录里。此后,即使未登陆Delicious,用户也可access这些存在本地的bookmarks。Delicious还为IE,Chrome和Opera等提供插件,方便用户从这些浏览器使用delicious的服务。

2.FireFox Sync:在不同计算机上同步Firefox,包括Favorite site(地址簿),浏览history,账号密码设置等。像Delicious一样,这种centralized的服务需要注册账号,而且这个有更严重的privacy问题。所以这个Addon的review由最初的5星降到现在的2星。举个例子,我的公司用Laptop和家里孩子用的Laptop都login同一Firefox Sync账户,我可以实时知道孩子访问过哪些网站,反之,孩子也知道我去过哪里。他bookmark的网址同时会出现在我的地址簿里,不管我喜欢与否。

3.No Script:Script的杀手,主要用来block Java,JavaScript,Silverlight和Flash等。相信每个人都遇到过,当你click一个链接打开某个网页,可能一个广告网页同时自动打开了,或者一个Flash浮动在你正查看的网页上,非常anoying,你不小心点了这个flash还会把你带到其他的垃圾网站。No Script可以阻止这些恼人的popup或floating的Flash,避免不必要的下载,使你的web surfing更加轻松顺畅。No Script可轻松的滤除包括本blog的Google Ad。参见右图:上半部是IE浏览截图;下半部是FireFox with No Script或AdBlock enabled,可以看到Google的广告被滤掉了。当然,有些网站要求必须enable Java/JavaScript,包括一些银行提供的Online banking,在这种情况下,你可把这些网站加到No Script的trust list里。如果你认为配置这些很烦琐,那么你可选用下一个AddOn=〉AdBlock

4.Adblock Plus:基于订阅的已知广告链接过滤列表,如Fanboy's list,滤除广告链接。这些订阅
的列表会自动更新,不断加入最新被report的广告链接。一旦你选好filter后,你就不用费心去设置那些网站应该被block。这个插件把你浏览的html网页中所有对广告网站的请求都滤除掉,又不影响运行必要的script,如上图所示,Ad content被block后,网页上也不会出现难看的天窗。filter是可以定制的,可以很方便地加入你认为应该被block的网站。这是我认为一个必备的AddOn。

5.Download Helper:可下载很多网站的流媒体,并提供媒体文件格式转换,支持YouTube,MySpace,Google videos, DailyMotion, Porkolt, iFilm, DreamHost,及很多其它网站。不足之处是你可能必须打开YouTube的网页才能使用该AddOn,而不是直接从链接到YouTube的网页上使用。在链接的网页上,AddOn的Icon(图中蓝圈所示)不会出现。

Wednesday, February 2, 2011

Firefox的Kid Mode Add-on

上一篇blog列出用C#写的程序用来控制小孩子玩计算机,idea主要是从UI Automation project如white和软件AutoIT来的。如果你做QA工作,你可能会很熟悉这些软件和开源程序。包括HotKey,这些free的东西可以做很多事情,你还可以编写自己的代码来灵活地扩展功能,不必花很多钱去买QTP或LoadRunner。
限制小孩子上网有很多不同的方法,通常家里都有router,而现代的router通常可以设置Internet connect时段,设置可以针对特定IP或MAC地址,并且router的URL filter设置可以通过关键字滤除一些不适合小孩的网站。问题是如果你要和孩子share计算机,你就要经常把schedule改来改去,很麻烦。所以你可以给孩子和自己创建不同的login账户,只在孩子的login启动上文的程序。另外你可以修改程序,增加更多程序的监控,并插入一些quiz用来奖惩计算机时间。
FireFox提供很多非常好的Add-on,最近由一个"Kid Mode",就是专门针对8岁以下的下孩子提供的寓教于乐的界面。可直接从FireFox search Add-on或用Link here


这个Add-on的basic version是free的,premium version不是free的。它提供了很多小game帮助小孩提高算术阅读等技巧,并提供时间限制。在review中,有人担心privacy,仁者见仁,智者见智。以下引用其网页原文介绍:This award-winning app by Zoodles puts Firefox into Kid Mode and gives kids 8 and under hundreds of fun, educational games and activities that they can easily navigate all by themselves! We customize every child's playground to their age and skill level, so the games change as they grow. The interface is easy to use for kids of all ages, even those who can’t read or type!
Additional free features include:
✓ An Art Studio where your child can be creative!
✓ Beautifully illustrated storybooks that can be read and recorded by family members
✓ A Video Mail center where family members can exchange video messages and keep in touch!
For parents who want more control over their kids' Zoodles experience, they can go to http://www.Zoodles.com/parent to promote subjects, block unwanted games, or add in their own favorites. Zoodles Kid Mode is always free, but parents who want these additional parental controls must subscribe to a paid Premium membership which also includes violence filtering and detailed activity reports on what their kids have been playing and learning on Zoodles.

Saturday, January 29, 2011

限制小孩子看计算机的时间的小程序

家里计算机有好几台了,连孩子也有自己的计算机了。孩子自己会上you-tube看动画片。我在router上限制了孩子上网的时间,可上不了网时孩子就看硬盘上的电影或看CD。想了想,决定编个小程序来控制孩子用计算机的时间。是用c#编的,设定的限制是:每天上网30分钟,看电影30分钟,时间到后自动关掉网络浏览器或播放器,目前只支持IE和FireFox,Windows MediaPlayer和Mediaplayer Classic。暂时只能对付涉世未深的小孩子(还不懂调task manager和注册表编辑器)。不然还要结合policy。把编译好的可执行文件放到startup group,这样就可在windows启动后自动运行了。编译好的可执行文件+源程序(fileserve)下载。源程序如下:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;
using Microsoft.Win32;

namespace Cat
{
    public struct SYSTEMTIME
    {
          public ushort wYear;
          public ushort wMonth;
          public ushort wDayOfWeek;
          public ushort wDay;
          public ushort wHour;
          public ushort wMinute;
          public ushort wSecond;
          public ushort wMilliseconds;
    }

    class KidControl : Form
    {
        public const int INET_TIME = 60*30;     //30min
        public const int PLAYER_TIME = 60*30;   //30min
        public const int REST_TIME = 60*15;     //15min
        public const int TIMER_INTERVAL = 10;     //10 seconds

        private int tInet, tPlayer, tOther, tRest, date;
        public Button button1;
        private Timer time = new Timer();

        [DllImport("Kernel32.dll")]
        public static extern void GetLocalTime(ref SYSTEMTIME pst);
        [DllImport("User32.dll")]
        public static extern Int32 SetFocus(int hWnd);
        [DllImport("User32.dll")]
        public static extern Int32 FindWindow(String lpClassName, String lpWindowName);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern Int32 FindWindowEx(int hWndParent, int hWndChildAfter, String lpClassName, String lpWindowName);
        [DllImport("User32.dll")]
        public static extern Int32 SetForegroundWindow(int hWnd);
        [DllImport("User32.dll")]
        public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
        [DllImport("User32.dll")]
        public static extern int SendNotifyMessage(int hWnd, int Msg, int wParam, int lParam);
        [DllImport("User32.dll")]
        public static extern Boolean PostMessage(int hWnd, int Msg, int wParam, int lParam);
        [DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,int dwExtraInfo);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int MapVirtualKey(int uCode, int uMapType);
 
        public void updateReg(int flag)  //flag-0:for read and 1 for write
        {
            RegistryKey regkey;
            string subKey = "Software\\Mousedog\\cat";
            SYSTEMTIME pST = new SYSTEMTIME();

            try
            {
                GetLocalTime(ref pST);
                regkey = Registry.CurrentUser.CreateSubKey(subKey);
                if (flag == 0)
                {
                    date = (int)regkey.GetValue("lastAccessDate", 0);
                    if ((date == 0) //first time run, no registry was set
                      || (date != pST.wDay)) // a new day
                    {
                        tInet = INET_TIME;
                        tPlayer = PLAYER_TIME;
                        tRest = REST_TIME;
                        date = pST.wDay;
                        regkey.SetValue("lastAccessDate", date);
                        regkey.SetValue("inetTimeLeft", tInet);
                        regkey.SetValue("playerTimeLeft", tPlayer);
                        regkey.SetValue("restTimeLeft", tRest);
                    }
                    else
                    {
                        date = (int)regkey.GetValue("lastAccessDate");
                        tInet = (int)regkey.GetValue("inetTimeLeft");
                        tPlayer = (int)regkey.GetValue("playerTimeLeft");
                        tRest = (int)regkey.GetValue("restTimeLeft");
                    }
                }
                else
                {
                    regkey.SetValue("lastAccessDate", date);
                    regkey.SetValue("inetTimeLeft", tInet);
                    regkey.SetValue("playerTimeLeft", tPlayer);
                    regkey.SetValue("restTimeLeft", tRest);
                }
                regkey.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void InitializeMyTimer()
        {
            // Set the interval for the timer.
            time.Interval = 500;
            // Connect the Tick event of the timer to its event handler.
            time.Tick += new EventHandler(timerHandler);
            // Start the timer.
            time.Start();
        }

        private void timerHandler(object sender, EventArgs e)
        {
            int hWnd1=0, hWnd2=0;

            time.Stop();
            if (this.time.Interval == 500)
            {
                this.Visible = false; //hide the form
                this.time.Interval = 1000 * TIMER_INTERVAL;
            }

            if (tRest <= 0)
            {
                button1.Text = "You'd better to take a rest !";
                this.Visible = true;
                tRest = REST_TIME;
            }
            else tRest -= TIMER_INTERVAL;

            hWnd1 = FindWindow("MozillaUIWindowClass", null);
            hWnd2 = FindWindow("IEFrame", null);
            if((hWnd1!=0) || (hWnd2!=0))
            {
                if (tInet == 60)
                {
                    button1.Text = "Internet Browser would be closed in 1 minute !";
                    this.Visible = true;
                }
                if (tInet <= 0)
                {
                    if (hWnd2 != 0) PostMessage(hWnd2, 0x10, 0, 0);
                    if (hWnd1 != 0)
                    {
                        PostMessage(hWnd1, 0x10, 0, 0);
                        System.Threading.Thread.Sleep(500); //give a little time to wait the confirm dialog popup
                        hWnd1 = FindWindow("MozillaDialogClass", "Quit Firefox");
                        if (hWnd1 != 0) //firefox quit confirm dialog
                        {
                            SetForegroundWindow(hWnd1);
                            keybd_event(0xd, (byte)MapVirtualKey(0xd, 0), 0, 0); //MAPVK_VK_TO_VSC=0 for vk-to-scan_code
                            System.Threading.Thread.Sleep(300); //simulate delay
                            keybd_event(0xd, (byte)MapVirtualKey(0xd, 0), 2, 0); //KEYEVENTF_KEYUP=2
                        }
                    }
                    tInet = 0;
                    button1.Text = "You have run out of time for browsering internet for today";
                    this.Visible = true;
                }
                else tInet -= TIMER_INTERVAL;
            }

            hWnd1 = FindWindow("MediaPlayerClassicW", null);
            hWnd2 = FindWindow("WMPlayerApp", null);
            if((hWnd1!=0) || (hWnd2!=0))
            {
                if (tPlayer == 60)
                {
                    button1.Text = "Movie player would be closed in 1 minute !";
                    this.Visible = true;
                }
                if (tPlayer <= 0)
                {
                    if (hWnd1 != 0) PostMessage(hWnd1, 0x10, 0, 0); //send WM_CLOSE
                    if (hWnd2 != 0) PostMessage(hWnd2, 0x10, 0, 0);
                    button1.Text = "You have run out of time for watching movies for today";
                    this.Visible = true;
                }
                else tPlayer -= TIMER_INTERVAL;
            }
          
            updateReg(1); //write back to reg
            time.Start();
        }

        public KidControl()
        {
            this.Text = "Be a Good Kid !";
            InitializeMyTimer();
            updateReg(0);

            button1 = new Button();
            button1.Size = new Size(160, 40);
            button1.Location = new Point(10, 10);
            button1.Text = "";
            this.Controls.Add(button1);
            button1.Click += new EventHandler(button1_Click);
       }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Visible = false;
        }

        [STAThread]
        static void Main(string[] args)
        {
            Application.Run(new KidControl());
        }
    }
}