1 / 3
Caption Text
2 / 3
Caption Two
3 / 3
Caption Three margin testing

Saturday, December 11, 2010

最佳Android游戏推荐

http://www.williamlong.info/archives/2445.html
-月光博客

 Google Android智能手机平台自从发布后空前成功,有众多的应用软件,同时也吸引了越来越多的用户和开发者加入其阵营,其流行和普及的程度已经逼近苹果的iPhone手机平台。

  相对于iPhone手机来说,Android手机具有较高的性价比,但做为一部智能手机,游戏性也绝不容忽视的卖点之一,相对于iPhone上海量的优质游戏来说,Android平台上的游戏资源较为贫瘠,主流游戏大部分移植自iPhone,原生游戏很少。

  然而,随着不少游戏厂商将iPhone游戏不断的移植到Android,使得Android平台上也慢慢地涌现出了一批非常优秀的游戏。而目前推荐机制也不太健全,例如一些媒体竟然评选Robo Defense和Abduction 2这样的游戏为最佳游戏实在令人大跌眼镜,今天,我就为大家推荐十几款我觉得最出色的Android游戏,供大家参考。

最佳Android游戏推荐

  动作类

  愤怒的小鸟(Angry Birds)

  《愤怒的小鸟》无疑是今年十分成功的手机游戏作品之一,多平台的移植、好玩的角色、简单的操作、有趣的游戏模式让这款游戏获得了无数的荣誉。《愤怒的小鸟》从iPhone移植到Android后免费向Android用户提供。

愤怒的小鸟(Angry Birds)

  游戏的内容很简单,玩家们需要将小鸟弹射出去,操作弹弓进行射击,把小猪们全都消灭就行了。游戏中小鸟的形态各异,有加速的、有分身的、有下蛋的、有爆炸的,关卡十分丰富,可玩性很高。

愤怒的小鸟(Angry Birds)

  愤怒的小鸟季节版(Angry Birds Season)

  愤怒的小鸟季节版(Angry Birds Season)加入了新的雪地地图,以及之前并未发放的万圣节地图,这是款独立游戏,也就是说可以和原版共存,安装后会有不同的图标。

愤怒的小鸟季节版(Angry Birds Season)

  水果忍者(Fruit Ninja)

  水果忍者(Fruit Ninja)也是一款非常有创意的iPhone移植游戏,玩法简单,用手指代替忍者刀,把空中的水果切碎,屏幕上会不断跳出各种水果——西瓜,凤梨,猕猴桃,草莓,蓝莓,香蕉,苹果等等,在它们掉落之前要快速的全部砍掉,除了水果,还会有大炸弹不时地冒出来,要是不小心切到了,那就Game Over了。

水果忍者(Fruit Ninja)

  相对于iPhone版来说,Fruit Ninja Android版本,运行不是很流畅,体验不如 iPhone 版,这个游戏掌握一定技巧之后还是挺容易高分的。

  怪物大战野猪男(MiniGore)

  怪物大战野猪男(MiniGore)是从iPhone移植到Android系统的一款射击生存类游戏,拥有方块脑袋的人物配上类似油墨的画面,整体效果显得卡通,玩家需要控制方脑袋的主角在丛林中穿行,消灭四周来犯的长毛怪。

怪物大战野猪男(MiniGore)

  这款游戏的操作手感相当不错,控制灵敏,不过,对于某些没有多点触控功能的Android手机来说,操作体验会受到影响。

  益智休闲类

  蒙特祖玛的宝藏2(Treasures of Montezuma 2)

  Montezuma 2(蒙特祖玛2),移植自iPhone的消除类游戏的新秀,采用了古老的美洲文明为背景,华丽的动画效果和流畅的操作感表现突出,我个人感觉比知名的Popcap的钻石迷情好玩多了,虽然是一款消除类游戏,但具有道具和魔法,使得游戏的可玩性方面都改进了不少,关卡的设置也给玩家带来更大的乐趣。

蒙特祖玛的宝藏2(Treasures of Montezuma 2)

  小羊快跑(SheepRun)

  小羊快跑[SheepRun]是具有挑战性以物理为基础的益智游戏,忍者水果的开发商开发的游戏,故事讲述绵羊家族现在处于危险境地,大灰狼在后面追赶,他们需要快跑并利用智慧去穿越各种障碍,最终返回家园。

小羊快跑(SheepRun)

  扔纸团(Paper Toss)

  Paper Toss是个非常简单的小游戏,就算现在电脑这么普及,在办公室内还是有不少事项是需要用纸笔完成的,有时写的不好,或是被老板责骂心情烦燥,这是就会狠狠的把纸团揉成一团,发泄一下,然后往垃圾筒像投篮一样投去,要是投了一个空心,心情就会好很多。

扔纸团(Paper Toss)

  Paper Toss就是这样的一款办公室舒压游戏,游戏玩法很简单,场景不仅设计在办公室里,而且还遍布地下室、洗手间等等,你要做的就是把纸屑投进垃圾筒里,另外这些场景中还有电风扇,吹着强度不一的风,在出手时必须算好角度,纸屑才能准确的进到筒里。

扔纸团(Paper Toss)

  我的纸飞机2(My Paper Plane 2)

  我的纸飞机2(My Paper Plane 2)是一款用重力感应操控的竞速游戏,画面简单清爽,重力控制,一关比一关难度大,会出现障碍物增加难度,玩家的纸飞机的飞行轨迹取决于风向和我们的操控,是款很有挑战性的游戏。

我的纸飞机2(My Paper Plane 2)

  智力切割(Slice Slice)

  Slice Slice是一款不仅仅靠华丽的界面取胜,很类似iPhone游戏Slice It,非常好玩,很锻炼智力,可以说是一款比较耐玩的Android游戏,游戏中会给出各种形状的几何图形,玩家需要将不同形状的多边形切割成尽量均匀的几份,注意,笔画的次数是有限的。

智力切割(Slice Slice)

  迷宫滚球(Labyrinth)

  Labyrinth是一款控制钢球平衡的迷宫类游戏,游戏根据手机内置的重力加速计制作而成,玩家将手机横向平行举起,来通过手机的倾斜度调节屏幕中钢球的滚动方向和位置,穿过迷宫达到终点,在Labyrinth里的地图非常多,设计的也非常经典。

迷宫滚球(Labyrinth)

  涂鸦跳跃(Doodle Jump)

  移植自iPhone的经典游戏涂鸦跳跃(Doodle Jump)是一个富有趣味的技巧性游戏,在游戏中你要让涂鸦弹簧小怪物不停地往上跳跃,在跳跃中要小心破碎的平台、移动的蓝色平台、黑洞、不明飞行物和坏人,途中有快速上升的火箭和竹蜻蜓。

涂鸦跳跃(Doodle Jump)

  模拟吉他(Solo)

  Solo一款音色很棒的模拟吉他软件。曾经在网上火爆一时的韩国手机吉他女所用的软件就是这款,在那段"Android女"视频中,她利用Android手机的音乐应用软件演奏吉他,同时演唱了美国当红女歌手蕾哈娜的歌曲《Take A Bow》这个软件的声音很棒。

模拟吉他(Solo)

  手指保龄球(iBowl)

  iBowl是一款移植iPhone上的保龄球游戏,利用重力感应装置控制,触摸屏幕控制保龄球的方向。按住BOWL键,向前甩动你的手机就可以了。此游戏被成为"手机杀手",不少同学在玩这个游戏的时候都不慎把手机甩出去了,并且这款游戏的后面有一个很雷人的故事,名字叫《京城地铁甩手男》,相信在网站上能找到。

手指保龄球(iBowl)

  会说话的汤姆猫(Talking Tom Cat)

  移植自iPhone的游戏,汤姆是一只宠物猫,可以在玩家触摸时作出反应,并且用滑稽的声音完整地复述我们对它说的话。玩家可以抚摸他,用手指戳他,用拳轻打他,或捉他的尾巴。

会说话的汤姆猫(Talking Tom Cat)

  塔防类

  丧尸围城(Grave Defense)

  丧尸围城(Grave Defense)是一款非常精美的塔防游戏,故事背景是核原料辐射整个地球后,人类所能够躲藏的最后一处藏身之地也遭到突变僵尸的攻击,游戏画面非常精细。

丧尸围城(Grave Defense)

  枪之荣耀(Guns n Glory)

  枪之荣耀(Guns n Glory)是美国西部牛仔风格的枪战塔防类游戏,游戏的操作和传统的塔防游戏大致相同,攻击单位包括枪手、炸弹投掷手、印第安火弓箭手、大炮和机枪等等,hiapk网友将其进行了汉化。

枪之荣耀(Guns n Glory)

  总的来说,目前Android游戏整体不如iPhone游戏,大部分好玩的Android游戏都是移植自iPhone,Android游戏面对iPhone的这种弱势状态,估计在很长一段时间都难以改变。

  如同先前提供的"常用Android手机软件应用"一样,为了方便大家使用,我这里提供了这以上所有应用程序的apk文件打包下载,将其复制到你的手机SD卡中,即可使用文件浏览器等工具进行安装使用。

  点击下载:最佳Android游戏推荐

Thursday, December 9, 2010

Google Hosts列表

http://blog.williamlong.info/2009/12/google-hosts.html
月光微博客

  Google Hosts列表接近完全恢复版,把下面的内容添加到C:\Windows\System32\drivers\etc\hosts文件中即可,由于使用的IP未必为最优,所以速度可能变慢。有问题的清补充或更正。

#Search
74.125.39.99 www.google.com
74.125.39.103 www.google.com
74.125.39.104 www.google.com
74.125.39.105 www.l.google.com

#Images
74.125.39.99 images.google.com
74.125.39.103 images.google.com
74.125.39.104 images.google.com
74.125.39.105 images.google.com
74.125.39.106 images.google.com
74.125.39.147 images.google.com
74.125.77.99 tbn0.google.com
74.125.77.99 tbn1.google.com
74.125.77.103 tbn2.google.com
74.125.77.104 tbn3.google.com
74.125.77.105 tbn4.google.com
74.125.77.106 tbn5.google.com
74.125.77.147 tbn6.google.com

#Shopping
74.125.39.99 base0.googlehosted.com
74.125.39.103 base1.googlehosted.com
74.125.39.104 base2.googlehosted.com
74.125.39.105 base3.googlehosted.com
74.125.39.106 base4.googlehosted.com
74.125.39.147 base5.googlehosted.com

#Books
74.125.39.100 books.google.com
74.125.39.101 books.google.com
74.125.39.102 books.google.com
74.125.39.113 books.google.com
74.125.39.138 books.google.com
74.125.39.139 books.google.com
74.125.39.100 bks0.books.google.com
74.125.39.100 bks1.books.google.com
74.125.39.101 bks2.books.google.com
74.125.39.102 bks3.books.google.com
74.125.39.113 bks4.books.google.com
74.125.39.138 bks5.books.google.com
74.125.39.139 bks6.books.google.com
74.125.39.113 bks7.books.google.com
74.125.39.138 bks8.books.google.com
74.125.39.139 bks9.books.google.com

#Video
74.125.39.100 video.google.com
74.125.39.101 video.google.com
74.125.39.102 video.google.com
74.125.39.113 video.google.com
74.125.39.138 video.google.com
74.125.39.139 video.google.com
74.125.39.100 0.gvt0.com
74.125.39.101 1.gvt0.com
74.125.39.102 2.gvt0.com
74.125.39.113 3.gvt0.com
74.125.39.138 4.gvt0.com
74.125.39.139 5.gvt0.com

#Mail(POP3/SMTP)
209.85.147.109 pop.gmail.com
209.85.147.109 smtp.gmail.com

#WebMail
64.233.189.18 mail.google.com
64.233.189.19 mail.google.com
64.233.189.83 mail.google.com
64.233.189.18 www.gmail.com
64.233.189.19 www.gmail.com
64.233.189.83 www.gmail.com
64.233.189.19 googlemail.l.google.com

#Docs
64.233.189.101 writely-china.l.google.com
64.233.189.101 writely.l.google.com
64.233.189.102 docs.google.com
64.233.189.101 docs.google.com
64.233.189.100 docs.google.com

#Map
64.233.189.104 map.google.com
64.233.189.99 map.google.com
64.233.189.147 map.google.com
64.233.189.104 maps.google.com
64.233.189.99 maps.google.com
64.233.189.147 maps.google.com
64.233.189.99 maps.gstatic.com
203.208.39.93 khm.google.com
203.208.39.91 mt0.google.com
203.208.39.93 mt1.google.com
203.208.39.91 mt2.google.com
203.208.39.91 mt.l.google.com
64.233.189.99 maps.l.google.com

#Scholar
64.233.189.99 scholar.google.com
64.233.189.104 scholar.google.com
64.233.189.147 scholar.google.com
64.233.189.104 scholar.l.google.com

#Group
64.233.189.102 groups.google.com
64.233.189.100 groups.google.com
64.233.189.101 groups.google.com
64.233.189.101 groups.l.google.com

#Picasa
74.125.39.147 picasa.google.com
74.125.39.91 photos.google.com
74.125.39.91 picasaweb.google.com
74.125.39.93 picasaweb.google.com
74.125.39.136 picasaweb.google.com
74.125.39.190 picasaweb.google.com
74.125.39.91 lh0.ggpht.com
74.125.39.93 lh1.ggpht.com
74.125.39.136 lh2.ggpht.com
74.125.39.190 lh3.ggpht.com
74.125.39.91 lh4.ggpht.com
74.125.39.93 lh5.ggpht.com
74.125.39.136 lh6.ggpht.com
74.125.39.190 lh7.ggpht.com

#Translate
74.125.39.100 translate.google.com
74.125.39.101 translate.google.com
74.125.39.102 translate.google.com
74.125.39.113 translate.google.com
74.125.39.138 translate.google.com
74.125.39.139 translate.google.com

#Reader
74.125.39.99 reader.google.com
74.125.39.103 reader.google.com
74.125.39.104 reader.google.com
74.125.39.105 reader.google.com
74.125.39.106 reader.google.com

#Sites
64.233.161.9 sites.google.com
74.125.53.9 sites.google.com
74.125.39.102 sites.google.com
74.125.39.139 sites.google.com
74.125.45.9 sites.google.com
74.125.39.139 sites.google.com

#Code
74.125.53.9 code.google.com
74.125.45.9 code.google.com
64.233.161.9 code.google.com
74.125.39.102 code.google.com
209.85.137.9 code.google.com
74.125.39.139 code.l.google.com

#Labs
74.125.39.141 www.googlelabs.com
74.125.39.141 appspot.l.google.com
74.125.39.100 labs.google.com
74.125.39.101 labs.google.com
74.125.39.102 labs.google.com
74.125.39.113 labs.google.com
74.125.39.138 labs.google.com
74.125.39.139 labs.google.com

#Knol
74.125.39.100 knol.google.com
74.125.39.101 knol.google.com
74.125.39.102 knol.google.com
74.125.39.113 knol.google.com
74.125.39.138 knol.google.com
74.125.39.139 knol.google.com

#Sketchup
74.125.39.99 sketchup.google.com
74.125.39.103 sketchup.google.com
74.125.39.104 sketchup.google.com
74.125.39.105 sketchup.google.com
74.125.39.106 sketchup.google.com

#Pack
74.125.39.99 pack.google.com
74.125.39.103 pack.google.com
74.125.39.104 pack.google.com
74.125.39.105 pack.google.com
74.125.39.106 pack.google.com

#News
74.125.39.99 news.google.com
74.125.39.103 news.google.com
74.125.39.104 news.google.com
74.125.39.105 news.google.com
74.125.39.106 news.google.com
74.125.39.147 news.google.com
74.125.39.99 nt0.ggpht.com
74.125.39.103 nt1.ggpht.com
74.125.39.104 nt2.ggpht.com
74.125.39.105 nt3.ggpht.com
74.125.39.106 nt4.ggpht.com
74.125.39.147 nt5.ggpht.com

#Calendar
74.125.39.100 calendar.google.com
74.125.39.101 calendar.google.com
74.125.39.102 calendar.google.com
74.125.39.113 calendar.google.com
74.125.39.138 calendar.google.com
74.125.39.139 calendar.google.com

#Blogger
74.125.39.191 www.blogger.com
74.125.39.191 blogger.l.google.com
74.125.39.191 blogger.google.com

#Orkut
74.125.47.85 www.orkut.com
74.125.47.86 www.orkut.com
74.125.47.85 orkut.google.com
74.125.47.86 orkut.l.google.com

#Youtube
74.125.39.100 www.youtube.com
74.125.39.101 www.youtube.com
74.125.39.102 www.youtube.com
74.125.39.113 www.youtube.com

#Toolbar
74.125.39.100 toolbar.google.com
74.125.39.101 toolbar.google.com
74.125.39.102 toolbar.google.com
74.125.39.113 toolbar.google.com

#Apps
74.125.39.99 apps.google.com
74.125.39.103 apps.google.com
74.125.39.104 apps.google.com
74.125.39.115 apps.google.com

#Chrome
74.125.39.99 chrome.google.com
74.125.39.103 chrome.google.com
74.125.39.104 chrome.google.com
74.125.39.115 chrome.google.com

#Finance
74.125.39.99 finance.google.com
74.125.39.103 finance.google.com
74.125.39.104 finance.google.com
74.125.39.115 finance.google.com

#Desktop
74.125.39.99 desktop.google.com
74.125.39.103 desktop.google.com
74.125.39.104 desktop.google.com
74.125.39.115 desktop.google.com

#Ajax
74.125.53.9 ajax.googleapis.com
74.125.45.9 ajax.googleapis.com
64.233.161.9 ajax.googleapis.com
209.85.137.9 ajax.googleapis.com
72.14.203.9 googleapis-ajax.l.google.com

#Modules
74.125.39.132 1.ig.gmodules.com
74.125.39.132 2.ig.gmodules.com
74.125.39.132 3.ig.gmodules.com
74.125.39.132 4.ig.gmodules.com
74.125.39.132 5.ig.gmodules.com
74.125.39.132 6.ig.gmodules.com

#Misc
64.233.189.101 id.google.com
64.233.189.102 id.google.com
64.233.189.100 id.google.com
64.233.189.100 id.l.google.com
74.125.39.132 skins.gmodules.com
74.125.39.132 googlehosted.l.google.com
74.125.39.132 img0.gmodules.com
74.125.39.99 blogsearch.google.com
74.125.39.99 www2.l.google.com
74.125.39.99 www.gstatic.com
74.125.39.100 www3.l.google.com
74.125.39.99 buttons.googlesyndication.com


Friday, November 26, 2010

明星软件工程师的10种特质(英汉)

http://www.jobbole.com/entry.php/344
 - 职场博客 - 伯乐在线
[发表人]:   [发表时间]:2010-11-24 05:10 PM

  如今,每家公司都似乎成了科技公司。从软件创业公司到投机性投资公司、制药巨头和媒体巨头,它们都越来越多地加入到软件业务行列。

明星软件工程师的10大特质   伯乐在线-职场博客

  代码质量不仅成为了一个必需品,更成为了一个竞争优势。因为众多公司围绕软件而竞争,开发软件的人——软件工程师正显得越发重要。但是,你该如何发现那种百里挑一的程序员呢?在本文中,我们简明扼要地列出了明星开发人员的10种特质。
  • 1. 热爱编程
  • 2. 完成事情
  • 3. 持续重构代码
  • 4. 使用设计模式
  • 5. 编写测试
  • 6. 善用现有代码
  • 7. 专注可用性
  • 8. 编写可维护的代码
  • 9. 能用任何语言编程
  • 10. 知晓基本的计算机科学

  1. 热爱编程

  编程是一种为了满足兴趣而心甘情愿去做的劳动(Programming is a labor of love)。和其他任何职业一样,唯有真正的热情,才能完成真正的伟大事情。这里有个误解,认为编写代码是机械化并纯科学性的。事实上,最优秀的软件工程师是工匠,他们能把能量、独创性和创造力融入到每一行代码中。伟大的工程师知道何时该把代码雕琢至完美,知道何时把大型系统像拼图一样组装到一块。热爱编程的工程师从构建软件中获得满足,就好比一位作曲家在完成一部交响乐后而欣喜若狂。正是兴奋感和成就感,才造就了喜爱编程的明星工程师。


  2. 完成事情

  有很多技术人员只谈论软件而不编写代码(只说不做型)。而伟大软件工程师会真正去编码,这也是他们最为重要的品质之一。他们是实际做事的人。聪明人都知道,解决问题的最佳途径是直面问题,而不是花上数周来设计复杂又不必要的架构和函数库。优秀工程师应当会问:解决手头问题的最简单方法是什么?最近的软件开发方法——敏捷实践,正是专注那个。它的思想是,把复杂的项目拆分为短小的迭代,每个迭代只关注一小部分的增量功能。因为每个迭代对应的编码只需要数周,所以功能易于管理并简单。


  3. 持续重构代码

  编码很像雕刻。要像艺术家一样不断完善自己的作品,软件工程师也要通过可能的最佳方式来持续完善自己的代码,以达到目标。重新塑造代码的原则称为"重构",Martin Fowler在他的创意书中有相应描述。重构背后的原始思想是:改善代码而不改变其功能,移动调整部分代码以确保系统不腐,还有确保系统完成基于当前需求该完成的事。持续重构可以让开发人员解决另一个著名的问题——"黑盒遗留代码"(这个问题基本无人想触及)。

  几十年的软件开发文化要求我们,不应该去改变正常工作的东西。然而,随着时间推移,问题是我们成为了老旧代码的奴隶,老旧代码变得不稳定和不兼容。而重构正好可以改变这一状况,因为我们是代码的主人,不是它的奴隶。重构在工程师和代码之间建立起持续的"对话",并带来所有权、确定性、自信心和系统的稳定性。

  千万不要成为老旧代码的奴隶。如果代码是他人所写,或许你可以轻易推脱责任。但大多数时候,那些代码是自己所写,要拿得起放得下,旧代码该埋时,就把它埋了!


  4. 使用设计模式

  自从所谓的"四人帮"(Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides)发表他们的著作——《设计模式》后,全世界的软件工程师一直都在讨论模式。在我们所处世界,不管是自然界还是人类行为,模式无处不在。软件工程自然也不例外。模式就是不断重现的跨语言跨系统的场景和机制。一位优秀的工程师通常能识别并利用模式,而不是受制于模式。工程师不应(强制)让系统去适应某种模式,而需发现在系统中使用模式的时机(恰当使用模式)。在使用模式来确保正确性时,应借鉴利用前人的智慧结晶,使用以前能正当解决特定工程问题的方法。但请切记:模式不是万灵药;不要为了使用设计模式而使用设计模式。


  5. 编写测试

  曾有段时间,软件工程师们认为测试不值得他们去做。然而,如果你不做测试,你怎么能确保代码就能正常工作呢?敏捷实践中的"单元测试"已获得普遍认可,因为它注重编写测试来反映代码是否有效。随着系统增大,测试也随之增大。有经验的工程师知道并了解测试的价值所在,因为测试的目的就是创建一个能正常运作的系统。优秀的工程师通常会确保出现过一次的Bug不会再出现第二次。但优秀的工程师也知道,不应该浪费时间写那些琐碎或多余的测试,而需要专注测试各个组件中的核心部分。


  6. 善用现有代码 

  "重新发明轮子"一直是软件行业中的巨大问题之一。从发明新语言到从写函数库,忽视并重写那些已经存在并已能工作的奇怪驱动力,已经造成大量软件开发的失败案例。一位明星工程师会专注三种基本类型的重用:第一,内部基础架构的重用,相应代码是他自己或同事编写的;第二,使用第三方的函数库,比如JDK。最后,研究使用某些大型网络服务商提供的相应服务,比如Amazon。总之,正确善用现有的代码,使得软件工程师能真正专注于最为重要的事情上——应用程序本身。


  7. 专注可用性 

  优秀的工程师通常都专注于用户。无论用户是企业还是个人,无论是为消费型的软件公司还是投资银行,需要关注的都是可用性。用户如何和系统交互?系统是否提供一种简单、直接和平稳的操作体验?有种说法,因为软件工程师是技术人员,他/她和"用户如何与系统交互"没有关联,这种说法严重错误。优秀工程师努力工作是为了什么?不正是让系统简单并易于使用。他们无时无刻都会想到用户,不会尝试去发明那些令人费解,只有极客才能理解并欣赏的东西。

  有些时候,一些软件工程师过于投入,反而忘记所编写的程序/软件,是供他人使用,不是做给自己看的"艺术品"。所以,在软件开发过程中,一直要把"用户"放在心中。


  8. 编写可维护的代码

  软件开发界的另外一个小秘密是:编写优秀代码和糟糕代码所花费的时间是一样多。一位训练有素的工程师,他/她会从第一行代码开始就考虑可维护性和代码的演化。没有任何理由编写"丑陋"的代码、长达数页的函数,或是稀奇古怪的变量名。优秀的工程师编写代码会遵循命名惯例,代码编写紧凑、简单和不过度炫耀聪明。代码的每一行,都应恰如其分地展现出其原有目的。在给不便理解的代码(块)合理注释时,别忘了命名规则。清晰明了的函数名和变量名可以让代码不言而明。

  在编码时,有些程序员会有这种心态:过一会儿再来修改或完善某部分代码或某条语句。但谁知这一"过一会"竟然是"一天"、"一周"、"一个月"或"一年",甚至以后根本就没机会再回头修改。所以,尽量别妥协写出暂时堪用的代码。否则,不仅不会节省开发时间,也可以阻碍整个进程。当然也不利于后续维护人员的工作。


  9. 能用任何语言编程

  优秀的软件工程师活血有自己一门特别钟爱的编程语言,但从不会执迷于当中。如今已有很多优秀的编程语言,也就是说,如果你只会使用其中一门语言,说明你缺乏多样性。你可以用Java、C#或C++编写任何现代软件,可以用PHP、Perl或Ruby编写任何网站的后台。简而言之,编程所用语言,远远没有语言相应的函数库重要。优秀的工程师能够认知到这一点,并愿意去学习新语言、新函数库和构建系统的新方法。


  10. 知晓基本的计算机科学知识

  最后,但肯定不是优秀工程师最不重要的特质就是:扎实的基础。优秀的工程师或许并没有计算机科学的学位,但他/她必须知道基础——数据结构和算法。如果不知道哈希表,或者不知道链表和数组之间的差别,你如何构建一款大型的软件?。这些都是每位从事软件开发的开发人员应当知道的。算法也同样重要,从二分查找到各种排序,到图形遍历,一位明星工程师必须知道并内在消化这些基础东西。因为这些基础就是你在构建任何现代软件中做抉择时的必备品。


  结束语

  以上就是区分伟大软件工程师的诸多特质。其中讨论的"热情",是非常重要的。代码重用、设计模式、基础数据结构和算法都是必须知道的,而敏捷实践中的重构和单元测试则有助于工程师应对复杂的软件。尤为重要的是,明星工程师相信简洁和常识。也正是这些信念,帮助他们成功构建当今世界所需的看似不可能又错综复杂的系统。

  引用网上看到的一段话:对于知识,要求知若渴;对于自己,要虚怀若谷。保持开放的心态,保持孩童般的好奇心看待新鲜事物。当今世界,日新月异,不仅要从书中获取知识,更要尽可能从其他途径来学习经验和知识,在求知过程中,《请谨记5件事,做一名快速的学习者》。

  如果你觉得一位明星软件工程师还应具备其他特质,请在评论或微博中和大家分享讨论。

--------------------------------

Top 10 Traits of a Rockstar Software Engineer

Every company is a tech company these days. From software startups to hedge funds to pharmaceutical giants to big media, they're all increasingly in the business of software. Quality code has become not only a necessity, but a competitive differentiator. And as companies compete around software, the people who can make it happen - software engineers - are becoming increasingly important. But how do you spot the 'cream of the crop' programmers? In this post we outline the top ten traits of a rockstar developer.

We've written here before about the future of software development, in which a few smart developers can leverage libraries and web services to build large-scale systems of unprecedented complexity. It only takes a couple of smart engineers to create quality software of immense value, and below is a list of the top ten qualities you should look for when hiring a developer:

  1. Loves To Code
  2. Gets Things Done
  3. Continuously Refactors Code
  4. Uses Design Patterns
  5. Writes Tests
  6. Leverages Existing Code
  7. Focuses on Usability
  8. Writes Maintainable Code
  9. Can Code in Any Language
  10. Knows Basic Computer Science

1. Loves To Code

Programming is a labor of love. Like any occupation, truly great things are achieved only with passion. It is a common misconception that writing code is mechanical and purely scientific. In truth, the best software engineers are craftsman, bringing energy, ingenuity, and creativity to every line of code. Great engineers know when a small piece of code is shaping up perfectly and when the pieces of a large system start to fit together like a puzzle. Engineers who love to code derive pleasure from building software in much the same way a composer might feel ecstatic about finishing a symphony. It is that feeling of excitement and accomplishment that makes rockstar engineers love to code.

2. Gets Things Done

There are plenty of technical people out there who talk about software instead writing it. One of the most important traits of a great software engineer is that they actually code. They actually get things done. Smart people know that the best way to solve problems is go straight at them. Instead of spending weeks designing complex, unnecessary infrastructure and libraries, a good engineer should ask: What is the simplest path to solving the problem at hand? The recent methodologies for building software, called  Agile practices, focus on just that. The idea is to break complex projects into short iterations, each of which focuses on a small set of incremental features. Because each iteration takes just a few weeks to code, the features are manageable and simple. Teams that follow agile practices never create infrastructure for its own sake, instead they are focused on addressing a simple set of requirements. The secret is that when this approach is applied iteratively, a rich, complex piece of software arises naturally.

3. Continuously Refactors Code

Coding is very much like sculpting. Just like an artist is constantly perfecting his masterpiece, an engineer continuously reshapes his code to meet requirements in the best possible way. The discipline of reshaping code is known as refactoring and was formally described by Martin Fowler in his seminal book. The original idea behind refactoring was to improve code without changing what it does, moving pieces of the software around to ensure that the system is free of rot and also does what it is supposed to do based on current requirements. Continuous refactoring allows developers to solve another well-known problem - black box legacy code that no one wants to touch. For decades engineering culture dictated that you should not change the things that work. The issue, though, is that over time you become a slave to the old code, which grows unstable and incompatible. Refactoring changes that, because instead of the code owning you, you own the code. Refactoring establishes ongoing dialogue between the engineer and the code and leads to ownership, certainty, confidence, and stability in the system.

4. Uses Design Patterns

Ever since the so called Gang of Four published their famous Design Patterns book, world-class engineers have been talking about patterns. Patterns are ubiquitous in our world - both in nature and all human endeavors; software engineering is no exception. Patterns are recurrent scenarios and mechanisms that live across languages and systems. A good engineer always recognizes and leverages patterns, but is not driven by them. Instead of trying to fit the system into a set of patterns, the engineer recognizes opportunities in which to apply patterns. Applying a pattern ensures correctness since it leverages existing know-how: a method for solving a particular engineering problem that has worked before.

5. Writes Tests

Long gone are the days when engineers thought of testing as beneath them. After all, how can you be certain that your code is actually working if you never test it? An agile practice called Unit Testing has recently gained popularity because it focuses on writing tests to mirror the code. As the system grows, the body of tests grows with it, providing proof that the code actually works. Experienced engineers know and understand the value of tests, because their goal is to create a working system. Good engineers will always write a test once a bug has been exposed to make sure it does not come back again. But a good engineer also knows not to waste time writing trivial or redundant tests, instead focusing on testing the essential parts of each component.

6. Leverages Existing Code

Reinventing the wheel has always been one of the biggest problems in the software industry. From inventing new languages to rewriting libraries, the strange drive to ignore and redo what is already there and already works has been the cause of a lot of software failures. A rockstar engineer will focus on three essential kinds of reuse. First of all, the reuse of internal infrastructure, the code that he and his peers have written. Secondly, the use of third party libraries, for example, in Java, the libraries that are part of JDK or popular libraries provided by the Apache Foundation. And finally, a good engineer would look to leverage web-scale web service, like the ones offered by Amazon. Correct leveraging of existing infrastructure allows rockstar engineers to focus on what is most essential - the application itself.

7. Focuses on Usability

Good engineers always focus on the users. Whether the user is a business or an individual, whether the engineer works for a consumer software company or an investment bank, the focus is on working, usable software. How will users interact with the system? Does it provide a simple, intuitive, and smooth experience? The notion that because a software engineer is a techie, he or she thus can not relate to how other people interact with the system is deeply flawed. Good engineers work hard to make the system simple and usable. They think about customers all the time and do not try to invent convoluted stuff that can only be understood and appreciated by geeks.

8. Writes Maintainable Code

The other secret of good engineers is that it takes the same amount of time to write good code as it does to write bad code. A disciplined engineer thinks about the maintainability and evolution of the code from its first line. There is never any reason to write ugly code, a method that spawns multiple pages, or code with cryptic variable names. Rockstars write code which follows naming conventions, code which is compact, simple and not overly clever. Each line of code serves its purpose and resides in the right place. The bits that are difficult to understand are commented, but otherwise naming conventions are clear. Expressive names for methods and variables can make the code self-explanatory.

9. Can Code in Any Language

A good engineer might have a favorite programming language but is never religious about it. There are many great programming languages these days and to say that you only can code in one of them is to demonstrate a lack of versatility. In Java, C#, or C++ you can write any modern software. You can code the back end of any web site in PHP, in Perl, or in Ruby. At the end of the day, the language does not matter as much as the libraries that come with it. A good engineer knows that and is willing and able to learn new languages, new libraries and new ways of building systems.

10. Knows Basic Computer Science

The last, but certainly not the least trait of a great engineer is a solid foundation. A good engineer might not have a degree in computer science but must know the basics - data structures and algorithms. How can you build large scale software without knowing what a hashtable is? Or the difference between a linked list and an array? These are the basics that everyone should know. And the algorithms are just as important - from binary search to different sorts to graph traversals, a rockstar engineer must know and internalize the basics. These foundations are necessary to make the right design decisions when building any modern piece of software.

Conclusion

There are many traits that distinguish great software engineers. Among the ones we discussed, passion is certainly very important. Knowing the basics like code reuse, design patterns, fundamental data structures, and algorithms is necessary, while agile practices of refactoring and unit testing help engineers iteratively evolve complex software. Most importantly, rockstar engineers believe in simplicity and common sense. It is these beliefs that help them succeed in building the seemingly impossible, complex software systems that are necessary in today's world.

Let us know what other traits you think a rockstar software engineer should have, in the comments below.


Thursday, November 25, 2010

220V to 110V - Converter or Transformer?

http://www.laptoptravel.com/Article.aspx?ID=339

Converters and transformers are electric conversion products that enable safe operation of electric devices in foreign countries. Electric devices that are designed for use with 110V systems require foreign 220V current to be "stepped-down." Devices that are designed for use with 220V systems require foreign 110V current to be "stepped-up."
The choice between a converter or a transformer depends on several things.

First, is your device an electric appliance with a high power heating element or mechanical motor such as a hair dryer or iron? If you are using an electric appliance, you need a converter. Or is your device electronic, using electronic chips or circuits, such as a computer, printer or VCR? If you are using an electronic device, you need a transformer. When in doubt about the type of device, use a transformer. Both electric appliances and electronic devices work with a transformer, but only electric appliances work with a converter.

Second, is your use continuous and long-term or is it sporadic and short term? Transformers are designed for long term, continuous use. Converters are designed to operate for only an hour or two at a time.

What's the difference between a converter and a transformer? It lies in how the device converts voltage current. AC power is supplied in alternating bursts that are in a shape called a "sine wave." To reduce 220V to 110V, for example, a converter chops off the sine waves in half whereas a transformer alters the length of the sine waves. This is a critical difference because electronic devices require a full sine wave for operation thus can operate only with a transformer. Electric appliances function with either a full or a half sine wave so can be operated with either a converter or a transformer.

The converter's short-term use and "chopping" off of sine waves are relatively simple and compact functions. The transformer's continuous use and alteration of sine waves are relatively sophisticated functions and require more space. As a result, transformers are generally larger, heavier and much more expensive than converters. Thus if you are going to travel with an electronic device you should purchase one that is dual voltage if it is available.

Most converters and transformers that are available to the consumer do not alter or convert the "cycles," shown as "Hz" on most devices. Although cycle differences may not cause a problem with many devices, they do with some. See our Cycles / Hz Tech Note for further explanation.

Rainmeter is a fully customizable resource monitor for Windows


Rainmeter is a fully customizable resource monitor that allows you to monitor vital system information including memory usage, disk usage and utilization, network traffic, uptime and many other details. You can also choose to monitor weather conditions, RSS feeds, Twitter activity, Gmail and various other online resources. Rainmeter is highly customizable and can be configured to display as much or as little information as you want, however it requires you to tinker with .ini files and tons of individual settings, so it may not be for everyone.

What is Rainmeter?

Rainmeter is an application which will allow you to place what are called "Skins" on your desktop. These skins can measure and display a wide variety of information. Some examples of things you can display are:

  • System Information - CPU, RAM, Network, Drive Space, you name it...
  • Launchers and Docks - Be creative and create your own RocketDock or launcher
  • Music and more - Interfaces for WinAmp, iTunes, and more
  • Web-based content - Weather, GMail inbox, RSS feeds. Just about anything you can parse from the web

Skins are fully customizable by you. They are primarily just .ini text files with simple commands that say "Measure this, and display it here looking like this". We will get into customizing skins more later, but you can use all your creativity and very simple Rainmeter statements to really make your desktop your own!

What isn't Rainmeter?

  • Rainmeter is not WindowBlinds(tm). It does not have any ability to change in any way your Start Menu, Taskbar, Notification Area (artist formerly known as System Tray) or any other Windows elements.
  • Rainmeter does not manage your Desktop Background (Wallpaper). All those cool skins you see on DeviantArt or Customize.org may or may not come with the displayed wallpaper in the download, but in any case it is up to you to load them with the normal Windows routines. Rainmeter is not Display Fusion.

Installing

Download the latest release or beta version from Rainmeter.net. You may download and run the installer (.exe) version or manually install with the "portable" (.zip) version.

Rainmeter is fully Windows Vista / Windows 7 compatible. The file which Rainmeter uses to keep track of the skins you have loaded and how they are configured (Rainmeter.ini) is now in your "Application Data" folder, and all Rainmeter "skins" are stored in your "My Documents" folder. This means that you do not have to run Rainmeter as an "Administrator" or worry about conflicts with UAC (User Account Control).

Rainmeter automatically installs the suite of skins "Enigma" by Kaelri as well as the "RainBrowser" skin manager and "RainThemes" themes manager by JSMorley.

Default file locations:

The Program:
Windows XP: C:\Program Files\Rainmeter
Windows Vista & Win7: C:\Program Files\Rainmeter

Your "Skin" files
Windows XP: C:\Documents and Settings\YourName\My Documents\Rainmeter\Skins
Windows Vista & Win7: C:\Users\YourName\My Documents\Rainmeter\Skins

Rainmeter.ini and your "Themes"
Windows XP: C:\Documents and Settings\YourName\Application Data\Rainmeter
Windows Vista & Win7: C:\Users\YourName\Appdata\Roaming\Rainmeter

More information on installing Rainmeter is available in the Rainmeter Manual at Rainmeter Installation

Rainmeter Terminology - An Overview

Let's talk a bit about how the terminology for the various components of Rainmeter should be referred to. Truth be known, there is no one perfect way, as different folks using Rainmeter for any length of time have evolved their own ways of referring to things, and there is no "set in concrete glossary" for Rainmeter. However it does help, especially when asking for help on the forums, to have a common understanding of what things mean.

The organization is defined by these somewhat hierarchical terms:

->Suite
-->Config
--->Skin
---->Variant

Suite
A set of configs, normally in a single folder and many subfolders under \Skins, which have a single author and a common theme or style.

Config
A folder, which may or may not have subfolders, under \Skins which contains one or more skins.

The only real difference between a "suite" and a "config" is that normally a suite is by one author, has a common style, and may include shared variables or even a tool to help user set attributes common to all the skins in the suite. A config is a folder of skins. It's how Rainmeter organizes things on the context menu.

Skin
The contents of a single folder, which has one or more .ini "skin" files. For all practical purposes, when you say "skin" you generally mean "a .ini file".

Variant
As only one .ini file per folder can be loaded by Rainmeter at a time, a folder containing two or more .ini files is considered one "skin", with some number of "variants". An example is a clock config folder with "Clock12Hr.ini" and "Clock24hr.ini" where loading one unloads the other automatically.

What about Themes?
"Themes" are not a part of the Rainmeter application proper, but are a term used by the addon application RainThemes, which is installed as a part of the Rainmeter installation. What RainThemes does is allow you to save your current Rainmeter setup; the skins, their locations and settings, and even your current wallpaper, in a text file (really just a copy of Rainmeter.ini) which can be loaded if you want to get back to a particular setup on your system. A "Theme" does not actually contain the skins or in fact any files at all, it is just a way to tell your copy of Rainmeter to put things back to a saved state.

Saturday, November 20, 2010

The Top 10 Free Zen Cart Modules

http://www.numinix.com/blog/2010/10/23/the-top-10-free-zen-cart-modules/

Oct 23,2010
BY NUMINIX » click here for full post

If you are new to the world of Zen Cart or just looking for ways to improve your website as cheaply as possible, there are a number of free modules that will greatly improve performance, conversions, and customer satisfaction from the default Zen Cart platform.

This top 10 list is in no way an exhaustive list and is based solely on my experience as a web developer of Zen Cart websites and modules.  It should be noted that every Zen Cart store is different and therefore has different needs.  Therefore, this list is focusing on general modules that most stores will find useful.

And so the list begins:

1. Google Base Feeder

Author: Numinix
Download
http://www.numinix.com/zen-cart-modules/marketing/google-base-feeder
What does this module do?

It automatically creates a feed of all of your products and submits them to Google Product Search where customers can find the products and go to your website to complete the purchase.
Why is this one of the best mods?

FREE HIGHLY RELEVANT TRAFFIC!  This is the next best thing to regular organic traffic as it sends potential customers directly from Google search results to the product they are looking to buy.  Best of all, once you set up the module and configure a cron job to automatically create the feed, you can set Google to automatically crawl the feed on a set interval.  In other words, once you set this up, it just keeps on generating free relevant traffic day after day.  Every store should be using this module from day one of launching their store.

2. Recover Cart Sales

Author: Various
Downloadhttp://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=100
What does this module do?

It creates an admin page where you can see all of the customer accounts that have items in their cart but have not yet completed a purchase. The admin can then select each of the customer's and send them a follow up email to find out why the customer did not complete the purchase and possibly complete the sale.  It includes a nice little report so that you can review all of the abandoned shopping carts that were successfully recovered.
Why is this one of the best mods?

This module plays a number of very vital roles.  Firstly, it let's you know how many customers are completing the registration process but not completing the checkout.  A high number of abandoned carts relative to your websites traffic could point to another problem than just a customer changing their mind.  Which brings us to the second reason this module is so vital, it allows you to gain valuable feedback from customers who didn't complete their order.  If they respond to the recover cart email they may provide valuable information for fixing problems on your website or improving the customer experience on your website.  And of course, the most obvious advantage of this module is that it can help you retain sales that you normally would have lost.  I recommend including a coupon code with the email as it will increase the likelihood that the customer will return or respond with feedback.

3. Mailbeez Aftersale Email Module

Author: MailBeez
Downloadhttp://www.mailbeez.com/
What does this module do?

It creates a framework that executes a daily cron job to send out emails automatically to customers who have previously completed a purchase.  It supports many sub-modules including the Winback Customer Reactivation module that automatically sends an email to customers after X number of days since their last purchase.
Why is this one of the best mods?

It allows you to stay in constant contact with your customers.  Every customer who orders will be sent an email after a pre-defined time has passed since their order.  For example, you could set the module to send the customer a come back offer and with a coupon code 60 days after their last purchase.  I've seen this email marketing system on major ecommerce websites and it is very effective.

4. Sitemaps XML

Author: Andrew Berezin
Downloadhttp://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=544
What does this module do?

It creates an XML sitemap for easy indexing by search engines and automatically pings the major search engines (Google, Yahoo!, MSN, Live, and Ask) to let them know an updated version of the sitemap is ready for download.  The module runs on a daily cron job so that you never have to worry about it once you set it up.  The sitemap includes products, categories, EZ pages, reviews, and testimonials.
Why is this one of the best mods?

This is really a no brainer.  Anything that helps search engines better index your website is a good thing.  The fact this module runs on its own makes it even better.  Make sure to add sitemapindex.xml to your robots.txt file so that all of the other search engines will easily find the site maps when they are crawling your website.

5. Simple Google Analytics

Author: Econcepts
Downloadhttp://www.zencartoptimization.com/downloads/
What does this module do?

It adds the Google Analytics tracking code quickly and easily to your Zen Cart store so that data can be collected and reviewed in Google Analytics.  If you don't know what Google Analytics is, you have been missing out on one of the most important tools in web development.  Learn more about Google Analytics from Google.
Why is this one of the best mods?

Knowing how your Zen Cart store is performing page by page, customer to customer, day to day, month to month, ok you get the point.  This module connects you to Google Analytics where you can analyze all of the important data you need to make important business and marketing decisions.  Are you spending too much on a banner advertisement compared to the sales generated?  What is your top performing landing page?  Are people having problems on a certain page in your checkout process?  What is your conversion rate?  These are the simple questions that Google Analytics can answer quickly and accurately.

6. Fast and Easy Checkout

Author: Numinix
Downloadhttp://www.numinix.com/zen-cart-modules/checkout/fast-and-easy-checkout-for-zen-cart
What does this module do?

Our most popular contribution to Zen Cart revamps the simple checkout system built into Zen Cart by combining multiple pages into a single checkout page.  This mod uses JavaScript to reload the page when the customer makes selections to shipping, uses a coupon code, etc. and displays the updated order total on the refreshed screen.  It also has a one page checkout feature where the confirmation screen is skipped and the payment is processed.
Why is this one of the best mods?

Simplifying the checkout for the customer by reducing the number of clicks and pages increases the likelihood that the customer will complete their purchase.  This module comes with many other features like changing/adding an address from right within the checkout, a checkout without account option, and the ability to accept an alternate shipping address during the registration process.  All of these features were created with the goal of increasing conversion rates, and that's exactly what this module achieves.

7. CSS JS Loader

Author: Rubik Integration
Downloadhttp://blog.rubikintegration.com/2009/08/08/zencart-css-javascript-loader-released/
What does this module do?

This module adds the ability to load stylesheets and JavaScript files based on rules, in a defined order, and on specific pages without having to copy the file into each individual Zen Cart page folder.   The mod also includes a minify option for compressing scripts and stylesheets.
Why is this one of the best mods?

Zen Cart mods that use this system for loading files benefit from better control and less duplicate loading of files. Combine this with the minify option and you will drastically decrease the number of objects that are downloaded on each page of the store. This means that pages load faster for the customer and there is less load on the server to serve multiple CSS and JavaScript files as it serves these files in a single "minified" file.  This is a great optimization tool that every website should be using.

8. Simple SEO URLs

Author: Rubik Integration
Downloadhttp://simple-seo-url.com/
What does this module do?

This is a search engine friendly URL rewriter.  It takes the default PHP URLs and rewrites them using product, category, and page names.
Why is this one of the best mods?

Rewriting URLs using words instead of parameters and numbers increases keyword density for search engines, thus the reason they are called SEO URLs, and also makes URLs easier to read and remember by non-robot visitors like you and me.  The great thing about this module compared to other options is that this module is free and open source.  You can drop this mod into your website at any time and not worry about losing backlinks to your website because all of the PHP URLs will automatically forward to the new SEF URLs.

9. Image Handler 2

Author: Various
Downloadhttp://www.zen-cart.com/index.php?main_page=product_contrib_info&products_id=117
What does this module do?

It resizes and compresses images on the fly and then caches the created images for quick retrieval.
Why is this one of the best mods?

This mod will not only drastically decrease the load on your server for serving images, it will also take away the tedious work of creating each size image and optimizing the image quality.  Adding additional images to your products is also easy through the admin interface.  Configure the module to use Image Magick for the best quality and compression.

10. Store Credit and Reward Points

Author: Numinix and Rubik Integration
Downloadhttp://www.numinix.com/zen-cart-modules/taxes-order-totals/store-credit-and-rewards-points
What does this module do?

This module is a rewrite of the original Store Credit module with an optional reward points feature.  Store owners can give customers store credit to be used during the checkout against purchases just like cash.  Reward points can be awarded on eligible purchases and credited to the customer's store credit account.  Store owners can set different ratios for rewards based on category and even restrict rewards from being used or collected in specific categories.  For an order to be eligible for reward points, the store owner can set rules such as a specific order status that must be met (i.e. Delivered) and a timeframe that must pass before the order is eligible (i.e. 30 days or your return policy).  Orders that are cancelled or removed are automatically removed from the pending rewards or debited from the customer's store credit account.  This module works best on ZC 1.3.9 where bugs to the PayPal payment modules have been corrected.
Why is this one of the best mods?

Not only does this module offer store owners an alternative refund method, it also gives customers incentives for continuing to shop in your store and collect reward points.  Best of all, once you setup the reward points system and set it on a cron job for awarding the store credit, the module will run automatically in the background of your website!

And those are our top ten picks for free modules for Zen Cart that any store type can use. If you'd like to add to this list, please comment below and I will even consider extending the list to the top 20 Zen Cart modules.  Be sure to include how you use the module and your reasoning for why all stores should be using it.  Thanks for reading.

Featured Post

Windows和Ubuntu双系统完全独立的安装方法

http://www.ubuntuhome.com/windows-and-ubuntu-install.html  | Ubuntu Home Posted by Snow on 2012/06/25 安装Windows和Ubuntu双系统时,很多人喜欢先安装windows,然...