2012年10 月月 发布的文章

持续集成原则

持续集成原则
  1. 所有的开发人员需要在本地机器上做本地构建,然后再提交的版本控制库中,从而确保他们的变更不会导致持续集成失败。
  2. 开发人员每天至少向版本控制库中提交一次代码。 
  3. 开发人员每天至少需要从版本控制库中更新一次代码到本地机器。 
  4. 需要有专门的集成服务器来执行集成构建,每天要执行多次构建。 
  5. 每次构建都要100%通过。 
  6. 每次构建都可以生成可发布的产品。 
  7. 修复失败的构建是优先级最高的事情。

持续集成要素

  1.统一的代码库
  2.自动构建 
  3.自动测试 
  4.每个人每天都要向代码库主干提交代码 
  5.每次代码递交后都会在持续集成服务器上触发一次构建 
  6.保证快速构建 
  7.模拟生产环境的自动测试 
  8.每个人都可以很容易的获取最新可执行的应用程序 
  9.每个人都清楚正在发生的状况 
  10.自动化的部署

持续集成的定义

  集成软件的过程不是新问题,如果项目开发的规模比较小,比如一个人的项目,如果它对外部系统的依赖很小,那么软件集成不是问题,但是随着软件项目复杂度的增加(即使增加一个人),就会对集成和确保软件组件能够在一起工作提出了更多的要求-要早集成,常集成。早集成,频繁的集成帮助项目在早期发现项目风险和质量问题,如果到后期才发现这些问题,解决问题代价很大,很有可能导致项目延期或者项目失败。
持续集成的定义
  大师Martin Fowler对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
持续集成价值
1.减少风险
  一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷,了解软件的健康状况,减少假定。
2.减少重复过程
  减少重复的过程可以节省时间、费用和工作量。说起来简单,做起来难。这些浪费时间的重复劳动可能在我们的项目活动的任何一个环节发生,包括代码编译、数据库集成、测试、审查、部署及反馈。通过自动化的持续集成可以将这些重复的动作都变成自动化的,无需太多人工干预,让人们的时间更多的投入到动脑筋的、更高价值的事情上。
3.任何时间、任何地点生成可部署的软件
  持续集成可以让您在任何时间发布可以部署的软件。从外界来看,这是持续集成最明显的好处,我们可以对改进软件品质和减少风险说起来滔滔不绝,但对于客户来说,可以部署的软件产品是最实际的资产。利用持续集成,您可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成。如果出现问题,项目成员马上就会被通知到,问题会第一时间被修复。不采用持续集成的情况下,这些问题有可能到交付前的集成测试的时候才发现,有可能会导致延迟发布产品,而在急于修复这些缺陷的时候又有可能引入新的缺陷,最终可能导致项目失败。
4.增强项目的可见性
  持续集成让我们能够注意到趋势并进行有效的决策。如果没有真实或最新的数据提供支持,项目就会遇到麻烦,每个人都会提出他最好的猜测。通常,项目成员通过手工收集这些信息,增加了负担,也很耗时。持续集成可以带来两点积极效果: 
  (1)有效决策:持续集成系统为项目构建状态和品质指标提供了及时的信息,有些持续集成系统可以报告功能完成度和缺陷率。 
  (2)注意到趋势:由于经常集成,我们可以看到一些趋势,如构建成功或失败、总体品质以及其它的项目信息。
5.建立团队对开发产品的信心
  持续集成可以建立开发团队对开发产品的信心,因为他们清楚的知道每一次构建的结果,他们知道他们对软件的改动造成了哪些影响,结果怎么样。

Jenkins介绍

  Jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用于监控秩序重复的工作,包括:
  1、持续的软件版本发布/测试项目。
  2、监控外部调用执行的工作。

为什么开发者不要调用jdk中sun公司的jar包

不要引用sun开头的jar包
The java.*, javax.* and org.* packages documented in the Java 2 Platform Standard Edition API Specification make up the official, supported, public interface.
If a Java program directly calls only API in these packages, it will operate on all Java-compatible platforms, regardless of the underlying OS platform.
The sun.* packages are not part of the supported, public interface.
A Java program that directly calls into sun.* packages is not guaranteed to work on all Java-compatible platforms. In fact, such a program is not guaranteed to work even in future versions on the same platform.
Each company that implements the Java platform will do so in their own private way. The classes in sun.* are present in the SDK to support the Sun implementation of the Java platform: the sun.* classes are what make the Java platform classes work “under the covers” for the Sun Java 2 SDK. These classes will not in general be present on another vendor’s Java platform. If your Java program asks for a class “sun.package.Foo” by name, it may fail with ClassNotFoundError, and you will have lost a major advantage of developing in Java.
Technically, nothing prevents your program from calling into sun.* by name. From one release to another, these classes may be removed, or they may be moved from one package to another, and it’s fairly likely that their interface (method names and signatures) will change. (From the Sun point of view, since we are committed to maintaining the Java platform, we need to be able to change sun.* to refine and enhance the platform.) In this case, even if you are willing to run only on the Sun implementation, you run the risk of a new version of the implementation breaking your program.
In general, writing java programs that rely on sun.* is risky: they are not portable, and are not supported.
http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html

JNLP介绍

一JNLP介绍:
  在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。
  Java Network Launching Protocol (JNLP,java网络加载协议) 承诺改变这个现状。通过JCP(Java Community Process)的JSR-56的开发, JNLP解决了很多先前用java开发针对客户端的功能的问题。一个JNLP客户端是一个应用程序或者说服务,它可以从宿主于网络的资源中加载应用程序。如果你使用JNLP打包一个应用程序,那么一个JNLP客户端能够:
  o 为该应用探测,安装并且使用正确版本的JRE(java运行时环境)
  o 从浏览器或者桌面加载应用程序
  o 当新版本的应用出现时自动下载最新的版本。
  o 为了加速启动速度在本机缓存应用程序需要的类
  o 可以作为applet或者应用程序运行
  o 在必要的情况下下载原始的库
  o 以安全的方式使用诸如文件系统这样的本机资源
  o 自动定位和加载外部依赖资源
  二JNLP文件的具体说明  
  
  
  
  
  
  
  HelloWorld
  Lively Corporation
  HelloWorld Test Example for WebStart.
  
  
  
  
  
  
  
  
  

  
  
  
  
  
  

  
  
  

  三 JNLP部署应用
  (1)编写相关应用,打包成一系列jar;
  (2)根据jnlp文件说明修改相应的jnlp内容,修改相应的url和jar;
  (3)部署jnlp文件和jar到相应的web容器;
  (4)编写访问网页,即可使用该应用〔亦可下载jnlp文件使用jws运行应用〕;
  四 补充
  如果jar需要访问本地文件资源,需要为你的jar文件签名
  先在命令行用keytool产生一个keystore文件.
  keytool -genkey -keystore you.keystore –alias youApp
  命令行用jarsigner签名,当然这时候需要生成keystore时的密码
  jarsigner -keystore you.keystore appTest.jar youApp
  重新部署即可

mysql问题记录

[Err] 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
[Err] /*Data for the table `bodycontent` */
insert into `bodycontent`(`BODYCONTENTID`,`BODY`,`CONTENTID`) values (98305,'{note:title=Installing Plugins}nnThe plugins featured on this page are not installed out-of-the-box. To install them, please refer to our documentation on +[installing plugins|http://confluence.atlassian.com/x/loBQ]+.nn{note}’,32776),(98306,'{section}n{column:width=1px}n{panel}n{gallery:columns=2|include=RefinedWiki.jpg,ThemeBuilder.png|sort=name}n\\{_}Click to enlarge{_}\\n{panel}n{column}n{column}nYou have +[a number of options|http://confluence.atlassian.com/display/CONFHOST/Skinning+Confluence]+ for completely customising the look and feel of Confluence. Below, we’ve highlighted the most popular options for skinning Confluence for use as a corporate intranet.nnh5. RefinedWiki Original ThemennRefinedWikis Original Theme is a plugin which gives Confluence a whole new design and makes it easier for your company to collaborate and share documents.nnWatch the video >>:n{widget:url=http://app.episodic.com/shows/13/episodes/pskcvfyj8x1p}nnn(i) [*Learn more*|https://plugins.atlassian.com/plugin/details/15231]nnh5. ThemeBuildernnIf you are looking to build your own theme, the Theme Builder plugin allows you to add and customise logo banners, menu-driven navigation, style sheets, footers and more…nn(i) [*Learn more*|http://www.adaptavist.com/display/ADAPTAVIST/Builder]n{column}n{section}’,32788),(98307,'{excerpt}n{section}n{column:width=1px}n{panel}n[!_Balsamiq – Demonstration Space – Extranet.jpg|width=403,height=308!|http://www.youtube.com/watch?v=e7htdJCvkeQ]n{panel}n{column}n{column}nEver heard the saying _’a picture is worth a thousand words’_? Using the +[Balsamiq Mockups Plugin|https://plugins.atlassian.com/plugin/details/256]+ you can create and visualise mockups of diagrams for proposed layouts of website content, new features, and much more, right within Confluence.nnh5. How can you use it?nn* Our ‘Development Team’ uses Balsamiq to mockup new features for our products. The Balsamiq Mockup below eventuated in the new Image Browser that shipped in Confluence 3.1.n* Our ‘Marketing Team’ use Balsamiq to create mockups of pages for our website in Confluence. The mockups are then given to our ‘Web Team’ to implement.n\\nnh5. How to add a Mockup to an existing pagenn# *Hover your cursor* over the _Add_ menu on any Confluence pagen# *Select* *{_}UI Mockup{_}*n# *Use the Balsamiq Web-based editor* to complete your mockupn# Once you’ve completed your mockup, *select* *{_}Save and Close{_}* *from the* *{_}Mockup{_}* *menu in the top-left of the Balsamiq editor*nnnh5. Import Existing MockupsnnYou can [+reuse a whole bunch of Mockups+|http://mockupstogo.net/] that have been contributed by the community.n{column}n{section}n{excerpt}nn(!) The Gliffy and Balsamiq plugins are pre-installed with Confluence Hosted Evaluations.’,32785),(98308,'{include:_Installing Plugins}n—-n{anchor:top}n{section}nn{column}n{panel}nnh5. Manage Tasksn_Focus on getting things done_n\\n[!TaskDock.png|border=1,width=200,height=150!|#tsk]n[*{+}Learn how >>+*|#tsk]nn{panel}n{column}nn{column}n{panel}nnh5. Skin & Theme Your Intranetn_Customise Confluence_n\\n[!IntranetTheme.png|border=1,width=200,height=150!|#the]n[*{+}Learn how >>+*|#the]nnn{panel}n{column}nn{column}n{panel}nnh5. Smartphone Applicationsn_Confluence on your mobile device_n\\n[!mini_confluence_1.png|border=1,width=200,height=150!|#mob]n[*{+}Learn how >>+*|#mob]nnn{panel}n{column}nn{column}n{panel}nnh5. Other Cool Pluginsn_Diagrams and Mockups_n\\n[!Gliffy.png|border=1,width=200,height=150!|#oth]n[*{+}Learn how >>+*|#oth]nnn{panel}n{column}n{section}n—-n{anchor:tsk}nnh1. Manage tasks and get everyone involvedn{include:_TaskDock}n[_Back to top_|#top]nnnn{anchor:the}nnh1. Skin and theme your intranetn{include:_Themes}n[_Back to top_|#top]nnn{anchor:mob}nnh1. Set up Confluence on your mobile devicen{include:_Mo
[Msg] Finished – Unsuccessfully
————————————————–
[Err] 2006 – MySQL server has gone away
[Err] /*Data for the table `bodycontent` */
insert into `bodycontent`(`BODYCONTENTID`,`BODY`,`CONTENTID`) values (98305,'{note:title=Installing Plugins}nnThe plugins featured on this page are not installed out-of-the-box. To install them, please refer to our documentation on +[installing plugins|http://confluence.atlassian.com/x/loBQ]+.nn{note}’,32776),(98306,'{section}n{column:width=1px}n{panel}n{gallery:columns=2|include=RefinedWiki.jpg,ThemeBuilder.png|sort=name}n\\{_}Click to enlarge{_}\\n{panel}n{column}n{column}nYou have +[a number of options|http://confluence.atlassian.com/display/CONFHOST/Skinning+Confluence]+ for completely customising the look and feel of Confluence. Below, we’ve highlighted the most popular options for skinning Confluence for use as a corporate intranet.nnh5. RefinedWiki Original ThemennRefinedWikis Original Theme is a plugin which gives Confluence a whole new design and makes it easier for your company to collaborate and share documents.nnWatch the video >>:n{widget:url=http://app.episodic.com/shows/13/episodes/pskcvfyj8x1p}nnn(i) [*Learn more*|https://plugins.atlassian.com/plugin/details/15231]nnh5. ThemeBuildernnIf you are looking to build your own theme, the Theme Builder plugin allows you to add and customise logo banners, menu-driven navigation, style sheets, footers and more…nn(i) [*Learn more*|http://www.adaptavist.com/display/ADAPTAVIST/Builder]n{column}n{section}’,32788),(98307,'{excerpt}n{section}n{column:width=1px}n{panel}n[!_Balsamiq – Demonstration Space – Extranet.jpg|width=403,height=308!|http://www.youtube.com/watch?v=e7htdJCvkeQ]n{panel}n{column}n{column}nEver heard the saying _’a picture is worth a thousand words’_? Using the +[Balsamiq Mockups Plugin|https://plugins.atlassian.com/plugin/details/256]+ you can create and visualise mockups of diagrams for proposed layouts of website content, new features, and much more, right within Confluence.nnh5. How can you use it?nn* Our ‘Development Team’ uses Balsamiq to mockup new features for our products. The Balsamiq Mockup below eventuated in the new Image Browser that shipped in Confluence 3.1.n* Our ‘Marketing Team’ use Balsamiq to create mockups of pages for our website in Confluence. The mockups are then given to our ‘Web Team’ to implement.n\\nnh5. How to add a Mockup to an existing pagenn# *Hover your cursor* over the _Add_ menu on any Confluence pagen# *Select* *{_}UI Mockup{_}*n# *Use the Balsamiq Web-based editor* to complete your mockupn# Once you’ve completed your mockup, *select* *{_}Save and Close{_}* *from the* *{_}Mockup{_}* *menu in the top-left of the Balsamiq editor*nnnh5. Import Existing MockupsnnYou can [+reuse a whole bunch of Mockups+|http://mockupstogo.net/] that have been contributed by the community.n{column}n{section}n{excerpt}nn(!) The Gliffy and Balsamiq plugins are pre-installed with Confluence Hosted Evaluations.’,32785),(98308,'{include:_Installing Plugins}n—-n{anchor:top}n{section}nn{column}n{panel}nnh5. Manage Tasksn_Focus on getting things done_n\\n[!TaskDock.png|border=1,width=200,height=150!|#tsk]n[*{+}Learn how >>+*|#tsk]nn{panel}n{column}nn{column}n{panel}nnh5. Skin & Theme Your Intranetn_Customise Confluence_n\\n[!IntranetTheme.png|border=1,width=200,height=150!|#the]n[*{+}Learn how >>+*|#the]nnn{panel}n{column}nn{column}n{panel}nnh5. Smartphone Applicationsn_Confluence on your mobile device_n\\n[!mini_confluence_1.png|border=1,width=200,height=150!|#mob]n[*{+}Learn how >>+*|#mob]nnn{panel}n{column}nn{column}n{panel}nnh5. Other Cool Pluginsn_Diagrams and Mockups_n\\n[!Gliffy.png|border=1,width=200,height=150!|#oth]n[*{+}Learn how >>+*|#oth]nnn{panel}n{column}n{section}n—-n{anchor:tsk}nnh1. Manage tasks and get everyone involvedn{include:_TaskDock}n[_Back to top_|#top]nnnn{anchor:the}nnh1. Skin and theme your intranetn{include:_Themes}n[_Back to top_|#top]nnn{anchor:mob}nnh1. Set up Confluence on your mobile devicen{include:_Mo
[Msg] Finished – Unsuccessfully
————————————————–
百度相关问题就行

伟大的程序员是怎样炼成的

•只做正确的事
对于软件这一行的人,我们有个很大的挑战,就是如何能够用正确方法的做事情。什么是正确的方法,这依赖于你在做什么和做给谁。而究竟所谓 “正确的方法”里都包括了什么内容,这并不是重点,重点是你是否能坚持按照这种方式做事。初级程序员在这个问题是通常不能做到坚持,而资历较深的程序员却 能始终坚持原则。 也许会有一个“非常紧急”的项目,或者这个项目很特殊,不能按常规过程开发。这只是个假象。 好的程序员知道即使在任何情况和环境下都要坚持做正确的事情。 如果说按正确的方式开发将导致不能按时完成任务,那么,他们就会知道,这个项目是不能按时完工的。 不要妥协,工程质量是你作为一个优秀程序员的唯一终极证明。 确保你所有的代码都是在正确的方法下100%正确的写出的。要按一个优秀的程序员的标准来要求自己。
•甘愿受苦
听起来很傻,但却是真的,优秀的程序员都乐于承担工作上给他们带来的痛苦。 你说出一个伟大的程序员,我都能告诉你,在他或她的职业生涯里,各个阶段,都曾有花好几天时间去解决一个问题的经历。 优秀的程序员品味着困难给他们带来的挑战,这让他们日以继夜,他们明白,问题必须要解决掉。
不太优秀的程序员就不一样了,他们在刚刚碰到有麻烦的迹象时就先想到要寻求帮助。 在问题面前,他们习惯于去寻求帮助,而不是自己去努力解决这个问题。 他们最喜欢的一句话是:“帮我看看这个问题”。 伟大的程序员的第一反应是我要自己解决这个问题。解决问题是种技能,是优秀的程序员非常看重的一种技能。
好的程序员是通过痛苦的磨练才成为伟大的程序员的。 痛苦的磨练是说当你对这个问题实在无能为力时才去请求外援。 求助就意味着认输, 所有尽量减少这种处境的发生。 甘愿受苦。和问题做不懈的斗争。这就是你要学会的。
注意: 我并不是说你不能寻求他人的帮助。我说的是,你首先要尝试自己去完成任务,如果你不能完成,再寻求帮助。 不要在自己没有努力过前就轻易的求助。你经常会发现,当你知道了解决方法后,你才认识到,你用自己的力量本也能解决这个问题的。
•学无止境
如果有人敢声称他不需要再学任何新的知识,我是绝对不愿意和他共事的。 在有些行业,你也许很多年不学新的东西也能干的很好,但软件技术革新的如此之快,你不能不时刻关注。 你的老板是由于你有某些技能才花钱雇你的,如果你的技能已经落伍、过期了,那你也就没有价值了。 想成为一名伟大的程序员,你首先要承认你不是无所不知,你必须每天都要努力的寻找、学习新的知识。
在你现在的公司里或组织里寻找能让你学习、让你钦佩的人。在复杂的问题上征求他们的意见,看看他们是怎么思考的。 向他们介绍你的解决思路,请他们给予批评指点。 如果在你的周围你不能找出一个能作为你的导师的人,这要么是你还没有认真的寻找,要么是你留在了一个不该留的公司里。 如果你在现在的工作上不能学习进步,那是到了你该换个工作的时候了。
要阅读网上的博客。关注一些研讨会。与其他程序员交流。伟大的程序员从不停止学习。
•分享知识
有一些程序员认为,他们的唯一价值所在就是他们所拥有的知识,于是,分享出他们的知识就会让他们的价值降低。 这是大错特错了。让你有价值的不是你的知识,而是如何运用你的知识给公司创造价值。 难道还会有比分享知识给他人更能给公司创造价值的方法吗?
我曾经面试过一家公司,知识不共享、相互保密、相互提防的理念在这家公司里根深蒂固。 在这样的环境里,员工之间形成了一种恶性竞争的关系,这直接导致了勾心斗角和诬陷中伤的产生。 我可不想在这样的公司里工作。如果每个人都对自己知道的事情讳莫如深,那你什么都学不到。
伟大的程序员希望他人也能知道自己所掌握的知识。他们并不担心会因此而失去优势,因为他们相信大家都会这样做。 伟大的程序员乐意看到他们的同伴成长、成功。 一个公司,它应该被一群喜欢知识共享的人组成,就像人们在运动场上,让团队的每个对员都强大起来,整个团队才会强大。
•伸出援助之手
伟大的程序员从来不会说“这不关我的事”。他们总是愿意伸出援助之手。他们经常在做自己的工作之余,去帮助那些编程新手。 如果有件任务必须按时完成,而又没有其他人能胜任,伟大的程序员会主动承担起这项任务。 他们从来不嘲笑来请求帮助的人,即使问题是那么的小、那么无意义、无价值。 伟大的程序员重视他们的团队,愿意为团队做任何的事情。 不管是要去写1,000行的代码,还是去编辑一个图片,伟大的程序员都会立即站出来帮助完成。
•十年磨一剑
伟大的程序员不是天生的,是后天炼成的。他们是本文上面提到的那些因素造就的,加上还要通过努力的工作。 如果你是刚刚意识到这些,那还不晚,你仍然有充分的时间来成为一个伟大的程序员。耐心是关键。伟大的程序员不是在旦夕之间就可以成就的。有些人可能要花上 数年,有些人则需要十几年。 没有人为你写血泪史。 好的公司当发现你有成为伟大程序员的潜质时,会帮助你,为你提供舞台。而你会通过你的努力工作、让你的团队进步来证明自己。要坚定,要自律,通往伟大程序 员的道路会很长。

什么是程序员的优秀品质

优秀程序员应当具备的品质:
语言和工具(Languages and Tools):
任何程序员/开发者需要具备的第一个技能就是,能够用编程语言工作并会使用与之相关的主要开发工具,包括:工具、IDEs, web 框架, messaging APIs。
程序设计方法(Programming Paradigm):
举例来说,很好地理解面向对象,这对使用强制式语言(Imperative Language也称过程式语言)写出可维护的代码至关重要。在企业开发中你会遇到各种不同的问题,理解多种程序设计方法并知道何时使用,将使这些问题迎刃而解。
领域专长的知识(Domain Specific Knowledge):
如果想编写系统来解决特定领域内的问题,那么拥有该领域的专长知识将非常重要。
尽管许多这样的知识是由项目的商业分析员(Business Analyst)来获悉,但如果开发者也能获取,那么跟用户的交流将会更加容易,而且更能够理解他们的专业词汇。
人际关系(People Skills):
软件开发中最重要的技能之一就是能够与其他开发者一起高效工作——同事、质量/商业分析员(Quality/Business Analysts),客户,用户,很多很多……如果你能够很好地处理这些关系,那么成功的大路也离你不远矣。
解决问题(Problem Solving):
有能力解决那些没有明显解决方法的问题,这一点在软件开发中很重要。当把你的应用配置到JBoss或者通过一个测试找到一个棘手bug的时候,理智地编程将成为调试一个类路径(class path)问题。
沟通能力(Good Communication skills):
在软件世界中,人们通常认为好的沟通能力就是流利地说话,事实上这远不是。这指的是:你能够多么有效地与其他人交流。作为一名优秀的开发者,你应当能够很好地表达你的想法,很好地听,以及很好地掌控你与他人沟通的过程。
读书(Read Books):
读大量书将了解很多不同的技术,读书使你对一种技术有了快速、直接的视角。通常你应当选择知名学者的书,他们推崇实践和用技术解决问题的多种方法。在这个过程中,你将学到很多并逐渐形成自己的方法。没准哪天你也就能出书了呢。
实践、实践再实践(Practice, Practice and Practice):
许多开发者拥有大量理论知识,他们饱览书籍和技术资料。然而,怎样运用这些知识却让他们望而却步。这是因为他们缺乏实践。你工作的效率和效力只能通过你实践中编写代码来获得。唯一能使你成为优秀开发者的方法就是实践、实践再实践。
遵循范例和最好的实践(Follow Patterns and Best Practices):
范例和实践反映了技术指导、常见技术问题和基于真实事件的实践。学习的过程是循序渐进的,但是一劳永逸。这会节省你非常多的时间和精力,让你的工作更加有效。遵循一本“代码编程指南”(Code Design Guideline),经常使用代码分析工具将检测和分析你的代码。
讨论/小组沟通(Discussion/Newsgroup):
参加开发社区会提高你的领导能力以及贡献感,二者都是成功的必需品。在社区内参加一场含量较高的技术讨论将使你充满成就感,而且会增长你的知识,因为其中的智者会查看和评点你的解决方法,你也会查看和评点他们的。而且这个过程教会你接纳并感激别人的建议。如果她/他做出了积极的贡献,不要忘了赞扬和鼓励(’pat someone on the back’)。
网络和数据库知识(Knowledge of Networking and Databases):
有人也许不赞成这点,但是一个优秀的开发者应当知道网络和数据库的基本东西。而且在思考解决方法的时候,不要忘记将二者考虑在内。拥有二者的知识,能够帮你写出更好的代码并节省你很多时间。
博客、写文章(Blog/ Write Articles):
我们中有谁能够记住每件事?我不能,所以我把他们记下来。当我需要的时候,可以回头翻阅参考。除此之外,我可以借此从读者那里获得反馈,让我对同样的问题收获更多的方法。我已经获悉了许多与我工作有关的反馈,虽然有好有坏,但我会一一验证,这个过程也让我受益匪浅。
KISS:
不要想歪了,这里的KISS不是你想的那样,是指让应用/方法直短、简单(Keep Implementations/Approaches Short and Simple的简写)。不要使用行话来让事情更加复杂,因为人们很难理解它们。最好的方法是简化你的设计并避免过度设计(over-engineering)的东西。
像测试者一样思考(Think as a Tester):
开发者和测试者,来自两个不同阵营的两类人群,随时准备同彼此较量。我发现二者的合作将产生非常好的结果。既不会损害开发者的利益也不会损害测试者的利益。实际上,长期来看,像测试者一样思考有利于减少你代码的bug,而且会形成很好的编程习惯和思维。
坚持一致是游戏规则(Consistency is the name of the game):
你是否经常跳槽或者被你的薪水所打击?如果是,那么静坐下来放松下并重新规划。好好想想不要让你的决定天马行空,为了不断向前,你需要一个坚实的决定并坚持不懈。
参加技术研讨会/大事件(Attend technology seminars and events)
如果你所在的城市有技术研讨会,一定要抽出时间参加。大部分的研讨会是免费的,而且会提供新技术的重要信息。
万家通吃还是一门独大?(Jack of all or Master of One?):
嗯……这个问题不好回答。在现在的环境下,你必须掌握一种以上的技术。尽管这不容易,但是好的开发者还是能够做到。其中的关键就在于适应性:如果你精于某种技术,那么给以机会你将较容易地在短期内掌握一种新技术。你不妨试试,多掌握一种技术可以让你在使用中对比、选择。
停止抱怨(Stop complaining):
是否软件没有做成,是否测试人员给你检查出一堆bug?许多开发者的本能反应是抵制情绪进而非常抵制这种情况。由于这种情绪是自然反应未经控制,所以它不可取。静心分析为什么软件失败、为什么有如此多bug,这是一个学习的经历将使你未来的工作受益良多。
最后,请记住你不是要永远做个程序员。所以一旦你自我满足并觉得自己是个优秀的程序员,你就得重新规划你自己(re-program yourself)。扩展你的兴趣。开发只是这个过程的一部分,了解用户和商业实际上是一种艺术,每个人应当以此为目标并努力掌握它。

Hadoop的作用

Hadoop作为大数据存储及计算领域的一颗明星,目前已经得到越来越广泛的应用。下面主要分析了Hadoop的一些典型应用场景,并对其进行了深入分析,主要包括下面几个方面:
日志处理: Hadoop擅长这个
并行计算
ETL: 每个人几乎都在做ETL(Extract-Transform-Load)工作 Netezza关于使用Hadoop做ETL任务的看法)
使用HBase做数据分析: 用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
机器学习: 比如Apache Mahout项目
Hadoop是什么?
是google的核心算法MapReduce的一个开源实现。用于海量数据的并行处理。 hadoop的核心主要包含:HDFS和MapReduce, HDFS是分布式文件系统,用于分布式存储海量数据。 MapReduce是分布式数据处理模型,本质是并行处理。
多少数据算海量数据?
个人认为,TB(1024GB)级别往上就可以算海量数据。
谁在使用hadoop?
N多大型互联网公司,这里列的比较全:
http://wiki.apache.org/hadoop/PoweredBy
在国内,包括中国移动、百度、网易、淘宝、腾讯、金山和华为等众多公司都在研究和使用它
用它来做什么?
海量数据处理。。。似乎有点虚,用hadoop的地方:
1、最简单的,做个数据备份/文件归档的地方,这利用了hadoop海量数据的存储能力
2、数据仓库/数据挖掘:分析web日志,分析用户的行为(如:用户使用搜索时,在搜索结果中点击第2页的概率有多大)
3、搜索引擎:设计hadoop的初衷,就是为了快速建立索引。
4、云计算:据说,中国移动的大云,就是基于hadoop的
5、研究:hadoop的本质就是分布式计算,又是开源的。有很多思想值得借鉴。