11
Digg
Stumbleupon
Technorati
Delicious

程序员新年要做的10个决定

还剩不到一周的时间,我们将迎来 2012 年。我知道这是老生常谈,但今年你曾经有过什么样重要的经历?很自然的,我们现在正处于为新年许下目标的时候。也许你可能有“真实”生活中的一些目标,但是你的程序员生涯呢?

  1 -学习一种新语言,框架或方法

  我们必须保持学习最新的技术。

  Web 开发唯一不变的是变化。以 NodeJS 为例:两三年前它并不存在,只有很少(如果有的话)的 JavaScript 代码运行于服务器之上。现在,你离不开它。每个 Web 开发人员都希望留在自己的作品里。要做到这一点,我们必须不停学习最新的技术。如果你是一个后端开发,这可能代表着学习 JavaScript 和 Node.js,类似于 Ruby 和 Rails。对于前端开发,则可能意味着真正理解 CSS3 或掌握 HTML5 新的 API。当然,这并不意味着你必须经常使用它,只需要保持自己不断学习。

按照同样的思路,对于重新评估你的工作流程、学习更好的和不同的工具以更快速地完成工作来说,现在是一个很好的时间。

  2 –让你掌握的内容更精深

也要预留一段时间来关注现有的语言和软件。

  当然,保持锋利比学习新的内容有更大意义。它也包括改善你使用日常工具的方式。我知道自己一直坚持使用熟悉的的模式和方法而不是学习在某个特定情形下更佳的方案是不对的。你知道关于 JavaScript设计模式的那些事吗?你对 PHP 的面向对象和面向功能编程是否有扎实的理解?你是否曾经使用过 SQL 连接?你使用的文本编辑器里是否有没有用过的功能?这些都不是新技术,但是如果你不使用它们,它们对你来说就是全新的!也要在关注现有的语言和软件上预留一段时间。

  3 -探索一个新的领域

  这项内容与第一项并不相同。学习一种新的语言、框架,或自己领域里的方法是重要的,甚至对你的日常实践来说可能会有用。但如果你像我一样,你会迷上网络上的每一部分。要尝试探索新的领域。对后台开发来说是深入研究前端开发,而对前端来说是探索可用性或用户体验。如果你喜欢写作,你可能会对内容策略或培养设计灵感感兴趣。在网络上有几十个不同的领域,继续探索!

  4 –参与社区

  把它叫做参与,把它叫做结网,把它叫做任何你想要的。

  该网站极度令人不可思议:我想不出有任何其他的现象,人与人之间相隔那么远,却结下如此深厚的友谊。2012年,你为什么不更多的尝试参与到这个令人惊讶的团体中呢?在 Twitter 上与他们交谈,阅读他们博客的文章和评论,或者通过自己写文章来作为回应;通过 Github 或其他代码共享网站贡献自己的代码。或者加入自由讨论会,用户组和各种会议。把它叫做参与,把它叫做结网,把它叫做任何你想要的,但有一点是肯定的:它会在大多数情况下让你和其他人受益。此外,建设新的重要人际关系,你可能会获得新的转机!

  5 –教导他人

  最有益的评论是伤害你感情的那些。

  你应该认同我们之前的观点,在 2012 年更多的教导他人。为什么呢?它将会带来些什么呢?“教导是最好的学习”?我已经为 Nettuts + 写作了近三年,我可以证明,这种说法是完全正确的。写下一个原理是如何工作的能够迫使你完全理解它,当你尝试教导别人时,你会惊讶对这个话题更了解了多少。最重要的是,当你知道曾经帮助别人学习新的技能时你会有不可思议的感觉。毫无疑问,你将遇到几个反对的声音,例如指出你语法的错误(或只是一些害群之马的评论)。不用有太多的担心;教学是一个学习的过程,你这样做会提高你自己。最有益的评论是伤害你感情的那些。

  6 -更好地照顾自己

  我们是网络的受害者。

  我们作为 Web 开发似乎非常自豪,因为我们献出自己的劳动。我们工作时间超长,弓着腰在黑暗中使用计算机,我们忘记了洗澡或吃饭。我们是网络的受害者,忍受着痛苦来让互联网更加美好。

  听起来很勇敢,但确实不是这样。

  为你的风险考虑,我建议你在 2012 年照顾好自己。除了睡得好,吃得好,确保你的工作场所符合人体工学。按理说,如果你花了生命中的三分之一在办公室,使其尽可能舒适是很有道理的!

  7 –更好的管理自己的时间(以及其他资源)

  也许我并不是指这和 Web 开发人员有很大关系,但尽管如此,几乎每一个“知识工作者”可以做得更好。对于我们里的很多人,尤其是自由职业者来说,你要用你的时间来做的事可能是灯红酒绿和饥肠辘辘之间的差异。记住所有的这些乐趣,以及我向你推荐学习的 Web 新技术了吗?好了,不要让它们的引诱限制你的学习时间。当然互联网越大越会有更多诱惑。我敢肯定,你最近看到了下面的内容,当我这么做时它给了一个暂停。

  在过去的一年里,超过 1 万亿美元的视频在 Youtube 上被观看。

  假设平均 YouTube 视频是 2 – 3 分钟之久,我们正在寻找的东西可以花上一整天的时间。在知识方面我还没有足够精深。

  当然,“只是工作,不要娱乐”,完全按此行事是正确的吗?我不建议你成为客户的一个奴隶或者是不能忍受沉闷的工作狂。我只是说,我们需要更明智的来明确了解我们每小时是如何度过的,并努力的更好利用时间。

  8 –采用更好的编程实践

 过度的文档永远不会是坏事。

  不,我不是在用两个不同的词汇重复同一个决定。这一次,我谈论的做法围绕编码本身的实践。我不能告诉你我有多少次热切地开始了新的项目,然后一个半小时后说,“嗯。。。我要为尝试这个功能创建一个分支。噢,等一下,我忘了开始时初始化 Git。。“确保我记得从一开始就使用代码版本是我在 2012 年还要去面对的工作,它能使你的项目历史更清晰。

  另一个我经常忽略的基本编码实践是注释。我可以变出许多行巧妙的代码,然后在剩下的时间里为其他事情分心。第二周我回到工作里时花了 20 分钟试图弄清楚它。这会困扰你吗?请你给自己帮个忙,为自己和其他人留下有用的注释。文档和注释是同样正确的事情。我最近在学习 Dojo,我发现它的代码文档是无价的。当然,文件的水平将取决于你的项目的公开程度,但是我认为过度的文档永远不会是坏事。

  9 -产生被动收入

  我猜 Nettuts + 的绝大多数读者做客户端的工作,无论是作为一个自由职业者或以其他方式。那么为什么不另外获取一些被动收入呢?Envato(译者注:自由职业者创建的著名公司,旗下有销售类、教程类和博客类的网站)有十个市场,在这里任何具有合适技能的人都可以获利。为ThemeForest(译者注:国外知名设计网站)构建一个主题,为 CodeCanyon 写一个脚本,其潜在价值永无止境。当然,如果你的技能不适合 Envato 市场,或者即便可以,还有其他许多方法可以产生被动收入。例如如果你是一个作家,可以试试 Tuts+ Premium(译者注:一个学习设计、Web 开发技术的网站)。他们一直在寻找充满激情的新教师。

  在市场或个人网站上销售项目是一个聪明的方式,可以被动地获取一些额外的现金,同时你还能做自己享受的事情。

  10 –给自己放个假

  戴上一顶完全不同的帽子…在有些时候

  到目前为止,前面的每一个决定是你可以做的一些事情来改善你作为开发者的技能。我会密切指出,你要成为一个优秀开发者可以做的最好的事情之一就是不要成为一个开发者。。。在有些时候。有时候需要戴上一顶完全不同的帽子。保持甚至和开发毫不相关的一项爱好,而且最好不要涉及电脑。玩某种乐器,阅读,写作,开拓厨艺。不管你做什么,留下一些放松的时间。当你这样做时会发现,编程问题的解决方案往往出现在休息时间。

我曾经用在开车回家路上的思考解决了许多代码问题。

  当然,定时休息是很重要的,还有那些一年几次更长时间的休假。此外扔了那些年度计划!

  你的决定?

  好了,这就是 Web 开发者应做的十项决定的清单。你觉得有哪些不在我的名单上?让我们在评论中来听听这些意见!

  蒋宇捷译自:ten-new-years-resolutions-every-web-developer-should-make

安德鲁伯吉斯于 2011 年 12 月 27 日

 

 


Author: jianyun
十二 28
Digg
Stumbleupon
Technorati
Delicious

FileNet添加和删除文件错误 An error occurred accessing the database

这两天在客户测试环境的FileNet Server遇到错误,不管是调用CE Web Service API的方式还是FileNet Workplace,上传或删除文件都失败,出现了Exception,显示的错误信息是

An error occurred accessing the database.  ErrorCode: 0, Message: ‘enlist: caught Exception’

看错误信息,可能是oracle数据库有什么问题,可是查了很久没查出错误所在。

后来在WebSphere Server的SystemOut.log中看到具体错误信息如下:

WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@57562412. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException
at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java(Compiled Code))
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java(Compiled Code))
at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1896)
at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2608)
at java.lang.Thread.run(Thread.java:571)

有了具体的错误日志后,Google后在IBM的网站上查到原因和解决方案

https://www-304.ibm.com/support/docview.wss?uid=swg21196663

它说原因是Oracle做什么recover操作的时候没权限。

第一种解决方案试了下,给用户加权限,但是我们试了,不知道是什么原因,错误依旧。

所以继续试第二种方案。

1. 停掉WebSphere Application Server

2. 找到 ‘\transaction‘目录,位于<WebSphere Application Server_install_root>\profiles\<PROFILE_NAME>\tranlog\<CELL_NAME>\<NODE_NAME>\<SERVER_NAME>\transaction

3. 删掉 ’\transaction‘目录及其子目录

4. 重启WebSphere Application Server

然后错误就没了。

 


Author: jianyun
十二 28
Digg
Stumbleupon
Technorati
Delicious

Executing Multiple Select Statements for Oracle

使用SQL Server的时候,我们可以传多个Select语句作为CommandText,一次执行,然后通过DataReader的NextResult方法访问多个Select语句返回的结果集,当然也可以用DataAdapter来填充DataSet。

下面的例子就是用一个DBCommand执行多个Select语句的代码片段。

myCommand.CommandText =
	"UPDATE Books SET Price=Price*0.95 “ +
	“SELECT BookName, Price FROM Books " +
	"UPDATE Toys SET Price=Price*0.9 “ +
	“SELECT ToyName, Price FROM Toys ";

SqlDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read()) // process the first result set
{
	Console.WriteLine(dreader.GetString(0) + ": "
		+ dreader.GetSqlMoney(1).ToDouble());
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read()) // process the second result set
{
   Console.WriteLine(dreader.GetString(0) + ": "
     + dreader.GetSqlMoney(1).ToDouble() + "\n");
}

dreader.Close();

 

而当使用Oracle数据库的时候,这样的写法却会报错:ORA-00911: invalid character

这是因为Oracle不支持Multiple Statements的缘故。

如果你真的要这样写多个select语句而不想用存储过程的话,你可以通过anonymous block和ref cursors的方式来实现,同样,通过DataReader的NextResult方法访问多个Select语句返回的结果集。

string strSql = "begin open :refcur1 for select * from emp;" +
"open :refcur2 for select * from dept;" +
"open :refcur3 for select * from salgrade;end;";
myCommand.CommandText = strSql;
myCommand.Parameters.Add("refcur1", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur2", OracleType.Cursor).Direction = ParameterDirection.Output;
myCommand.Parameters.Add("refcur3", OracleType.Cursor).Direction = ParameterDirection.Output;

OracleDataReader dreader = myCommand.ExecuteReader();

while (dreader.Read())
{
    //process the first result set
}

dreader.NextResult(); // Move on to next result set

while (dreader.Read())
{
   //process the second result set
}

dreader.NextResult();

while (dreader.Read())
{
   //process the third result set
}

dreader.Close();

 

 


Author: jianyun
十二 20
Digg
Stumbleupon
Technorati
Delicious

HTML5未来发展的六大趋势

HTML5从根本上改变了开发商开发Web应用的方式,从桌面浏览器到移动应用,这种语言和标准都正在影响并将继续影响着各种操作平台。

在移动领域,大家争论不休的一个问题就是开发Web应用还是原生应用?而随着HTML5标准的发展,两者之间的差异已经逐渐变得模糊,今天各大媒体都争相报道与HTML5有关的东西,那么,HTML5未来的发展趋势到底是什么?

  1) 移动优先

前天,appMobi获选ReadWriterWeb2012最具前途的的公司,作为一家初创公司,这个奖公司首先专注于在移动平台上如何实现HTML5的简单易用和无处不在。

从如今层出不穷的移动应用就知道,在这个智能手机和将平板电脑大爆炸的时代,移动优先已成趋势,不管是开发什么,都以移动为主。

如上文所说,此前一直困扰移动领域的问题就是开发Web应用还是原生应用。而如今,我们看见一些大型企业如《金融时报》在冲着HTM L5进军移动市场过程中,从App Store撤掉iPad原生应用而开发Web应用,同样表现出色。

许多游戏开发商也将在移动Web应用中扮演中重要角色,移动Web应用优先的趋势将会持续到移动设备统治信息处理领域。其实用户根本不在乎你用什么工具开发了什么应用,不管是Web应用还是原生应用,只要好用就可以了。

  2) 游戏开发者领衔“主演”

其实移动游戏开发商是从HTML5获益最多的一方,他们可利用这个平台逃脱付费游戏须向苹果支付的30%提成。在某种程度上,游戏就是移动平台销量最好的应用,也是吸引人们购买移动设备的一个重要因素。

许多游戏开发商都被Facebook或者Zynga推动着发展,而未来的Facebook应用生态系统是基于HTML5的,尽管在HTML 5平台开发出游戏非常困难,但游戏开发商却都愿意那么做。通过PhoneGap及appmobi的XDK将Web应用游戏打包整合到原生应用中也是一种方式,Facebook差不多就这么干的——基于Web应用及浏览器,但却将之打包整合进原生应用。

  3) 响应式设计&自动变化的屏幕尺寸

在HTML5真的改变移动开发平台之前,必须要迈出重要一步,那就是“响应式设计”,也就是屏幕可以根据内容而自动调整大小。

响应式设计最好的一个例子就是今年上线的BostonGlobe.com(观看视频),其屏幕能够根据任何内容而调整尺寸大小,在访问过其开发商Filament Group后才了解到,响应式设计也并非易事,一些基本概念设计必须从头开始,比如处理媒体库的RespondJS,而且处理来自第三方的图片和广告也是恼人的问题。

要想做好响应式设计,就必须洞悉内容与屏幕之间的反馈关系,一家来自硅谷的响应式设计公司ZURB称,其实在过去的16年中,开发商就意识到响应式设计就要完全离开“流”,转而注重内容是如何在网页和移动设备中被处理的,这一过程还在继续,HTML5会让它最终成为可能。

  4 )设备访问

消除Web应用与原生应用界限的最大障碍就是浏览器访问移动设备基本特性的能力,比如照相机,通讯录,日历,加速器等,利用HTML5实现此能力方面,上文中提到的appMobi算是行业翘楚,在感恩节后开源了所有API。Mozilla也一直在努力通过移动浏览器Fennec来将强设备访问能力。

对许多移动开发商来说,提高设备访问能力是HTML5最令人激动的革新,这意味着Web应用能够登陆移动设备而无需做任何PhoneGap式打包,游戏开发商当然最开心,因为某些特性对他们来说是封锁的,比如能整合到游戏中的加速器。

这就开启了另一个可能的世界,比如能与云更好地整合(这有利于应用内购买,消息推送等)并提高游戏可玩性,有了HTML5这个平台,开发商可以不再依赖于Java语言,CSS3,HTML及其它程序语言。

  5) 离线缓存

这个概念相当新潮,离线情况下,app也能照常运作,算是HTML5充满魔力的一面,今年最好的离线缓存例子就是亚马逊Kindle的云阅读器,可以通过Firefox6以上版本,Chrome11以上版本,Safari5以上版本及iOS4以上版本浏览器将内容同步到所有Kindle系列设备,并能记忆用户在kindle图书馆的一切。

亚马逊就这么实现了离线使用Web应用,许多专家人声称原生应用的末日即将到来,因为Web应用的使用变得简单,无摩擦,适用于任何一个平台或者无需平台。当然Mozilla的触角也伸到了这里,实际上,Mozilla想涉足任何一个HTML5能渗透的领域,从Mozilla的移动蓝图,可以了解更多。

  6) 开发工具的成熟

  • 在今年八月份,Brian Fling曾写过一篇博文叫HTML5 Web应用开发剖析,提出了几点建议供从事HTML5应用的开发者参考:
  •   要耐心,HTML5项目可能比开发其他任何项目好是都要长
  •   做好预算,这不像建网站那么简单,可能会耗费你大量资金
  •   找对开发者,你要记住,这对许多经验丰富的专家来说都非常难的事,那么你的团队也会觉得困难,所以一定要找对人,找到正确的方向
  •   要自食其力,你要知道,开发HTML5项目,许多工具都要自制,不是现成的
  •   在技术界,按部就班的教条风格在这里行不通,会花掉许多不必要的资金,在移动领域,没有对与错,只有是否适合,一切以用户体验为重。

在工具方面,除了appMobi提供的工具以外,还有Sencha及Appcelerator提供的框架及IDE供应用开发商们使用,虽然这些工具现在算不上成熟,也不如Android和iOS上的开发商框架及工具那般简单强大,但至少它们在演进,将会变得越来越好用。

  总结

HTML 5的其它功能,如表单和新标准还在快速演进,而随着标准化工作的进行,HTML5有可能变回HTML。HTML5开发领域的领军人物包括Sencha,Adobe,Appcelerator,appMobi及Facebook,亚马逊,Google三大巨头。

不管你是想开发出新型视频应用的开发商如Brightcover还是想开发新型音频应用的开发商如Soundcloud,不论是桌面应用还是移动应用,HTML5都是创新的主旋律。

英文原文:RWW:Top 6 Trends In HTML5 In 2011

 

 


Author: jianyun