2012第52周三阴雨
今天上午准备在虚拟机搭建环境失败,两次装系统没有成功后没有继续尝试,然后是修改了需求规格中评审提出的问题;中午看到了一生目标清单提示我自己注意锻炼身体可多参加几次马拉松活动;下午修改了基线一个隐藏很久的bug,然后是帮同事测试解决一个问题,支持江西两个项目的问题,晚上主要是写总结和技术工作报告。现在看blog并摘录相关文章如下:
买了史蒂夫先生的《Unix环境高级编程》《网络编程卷1》《卷2》会尽量抽时间翻一下。对ARM体系结构这块有了一些简单的认识。这里应该特别感谢一本书,是杜春雷老师写的《ARM体系结构与编程》。
回顾自己这五个月所学的知识,也就是以下几部份:
- C/C++编程语言
- TCP/IP协议,掌握socket网络编程。
- Mysql、sqlite数据库编程
- QT图形开发技术。
- 嵌入式系统移植,包括Boot loader、Linux内核、文件系统、应用程序。
- 了解ARM体系结构以及Linux设备驱动开发
五个月期间,个人或者带领小组也完成一些嵌入式小项目:
- Linux下C模拟售票系统
- 基于Linux下Framebuffer电子相册+libmad音频播放
- 基于Qt+unix socket的Linux下局域网聊天软件
- 基于ARM手持点菜器+Qt+Mysql的酒店管理系统
- 基于V4L2接口的ARM平台下USB摄像头远程监控系统
加上之前给厦门和深圳两个公司建设的网站,这就是2012年的计算机项目收获。
下面是这一年学习的不足之处:
- 对于算法和数据结构方面做的不够好
- 学习面依然比较广,不是太专一,希望找到工作以后能够认真对待自己的职业。
- 学习ARM相关以及嵌入式系统时,只是对需要用的做了解,没有去完全了解相关部分知识
- 看书时不是特别细致,有些毛糙,偶尔会漏掉一些细节问题
总结这段时间找工作接连碰壁的原因,客观也好,主观也好,仔细想想,大概就是以下几点:
- 客观方面:太原IT环境的确不如北上广热门,所以下一步计划元旦之后到北京或者其他IT热门城市看有没有机会
- 年底找工作不好找,找实习工作貌似更难找
- 主观方面,我对于就业的要求有些偏执,一直总想找嵌入式的工作,放弃了很多VC++的相关的工作机会。
总结2012年,规划2013年,希望自己在新的一年里能够找到一份安稳的实习工作,摆正心态,努力学习专业知识,锻炼社会能力。
据业内人士介绍,机房的 IT 硬件会产生大量集中的热量,同时对温度和湿度的变化极其敏感。温度和湿度的轻微浮动,就可能导致系统发生严重问题,轻则系统产生无用信息,重则系统停机。 正常情况下,机房空调都会配有监控预警系统,同时机房也会配置备用空调以防备出现故障。
产品方面,Nubia Z5 采用 5 吋 1080P(1920×1080 像素)的 OGS 单玻璃全贴合屏,像素密度为 441ppi。采用 2.67mm 窄边设计,机身厚度为 7.6mm,重量仅为 126g。
在配置方面,Nubia Z5 采用高通 APQ8064 四核处理器,主频 1.5GHz。2GB 的 RAM,并且搭载一颗 3000mAh 的不可拆卸电池。另外该机采用堆栈式感光元件的 1300 万像素主摄像头,F2.2 大光圈设计。
1. 掌握移动技术
开发者应该能开发支持多种设备同时访问的网站,包括智能电话 —— iOS 、Android、Windows Phone 和黑莓等。作为一个开发者,你不能忽略大量的移动用户,因此你必须学习响应式网站开发和移动 UI 工具包。
2. 敏捷方法论
开发者应该意识到敏捷开发的重要性。敏捷大致就是一系列能够帮助你日常项目管理的规则,不同于一般的项目管理规则,敏捷开发是在慢慢地影响着开 发者的工作和交流方式。你必须认识到瀑布模型已经将近过时了。如果你希望能够获得更好的软件质量,敏捷开发是一种可选的开发方式,使用敏捷开发你可以很容 易的在你的软件中实现任何需求更改。
3. 单元测试
谈到单元测试,你可以找到大量的工具和框架供你使用。 赶快去学它(如果你还不会的话)因为他在接下来的一年中会对你非常有用。
4. 云计算
云计算已经成为企业日常运作不可或缺的一部分。计算让业务流程变得更见容易,让客户更加便捷。这个在 2013 年是一个高需求的行业。
5. HTML5
HTML5 是最受欢迎的工具,而且不断的在发展。在 HTML5 全面繁荣之前,你应该准备开始 HTML5 的知识储备。如果你想成为下一代应用的开发者,必须学习 HTML5。移动设备也完全支持 HTML5,因此你在学习 HTML5 的同时也是在学习移动开发。
6. Python 或者 Ruby
PHP 经过漫长的发展已经成为佼佼者,不过好消息是 Python 和 Ruby 已经在开发行业找到了自己的方式。 Ruby+Rails 和 Python+Django 都是非常牛逼的 Web 开发框架。Python 和 Ruby 虽然不能完美的满足各种各样的项目,但是他们可以作为一个额外技能。此外,他们可以在很多其他项目中提供一些帮助。因此,确保你可以花点时间去学习这些技 能。
7. CSS3
HTML5 和 CSS3 越来越流行,使用 HTML5 和 CSS3 你可以开发语义连贯的网站。CSS3 有很多很棒的特性,例如可下载的自定义字体 (font-face) 、RGBA 色彩、色彩梯度、多背景、透明、变换等等。
8、响应式页面设计
由于移动设备对互联网的的使用日益增长,响应式 web 设计正在成为最重要的设计技巧之一,每个开发者都应当对它有所了解。你应能设计出响应式的页面来匹配不同的分辨率,当然还有不同的屏幕尺寸。作为一个开发 者,你需要有能力设计出适用于任何任何浏览器及设备的网站。
9. JavaScript and jQuery
现在,JavaScript 是非常重要的,台式机和平板电脑的发展,特别是在 Windows 8 的发布。随着 HTML5 和 Javascript 相结合的,你可以真正运用到在 web 开发中。如果你正在使用 HTML5,除了 JavaScript,jQuery 是一个必须知道的技巧。你的基本目的应该是掌握不至一种单一的编程语言。
10. 基于位置的计算
目前,绝大多数的移动设备都集成了 GPS ,这也是为什么 foursquare 和 facebook check-in 这样的应用会火。也就是说人们喜欢基于位置的应用。所以多学习一些基于地理位置的编程,它将是 2013 年的流行元素。
2013做物联网和工业自动化。
【年度盛宴】期待已久的2012年度最佳 jQuery 插件揭晓
推荐阅读:《2011年度最佳 jQuery 插件》。
Arctext.js 是基于 Lettering.js 的文字旋转插件,根据设置的旋转半径准确计算每个字母的旋转弧度并均匀分布。
虽然 CSS3 也能够实现字符旋转效果,但是要让安排每个字母都沿着弯曲路径排布相当的复杂,Arctext.js 则可以轻松实现。
正如它的口号所说:Parallax has never been easier,的确,它能帮助轻松的实现网页视差滚动效果。
这款 jQuery 插件能够给页面添加漂亮的过渡(transition)效果,类似于书本或者杂志。
主要特色
- ✓ 支持运行于 iPad 和 iPhone;
- ✓ 简单,美观和强大的 API 接口;
- ✓ 可以通过 Ajax 动态加载页面;
- ✓ 纯 HTML5/CSS3 呈现页面内容;
- ✓ 提供两种漂亮的过渡(transition)效果;
- ✓ 借助 turn.html4.js,可以在 IE8 等低版本浏览器工作。
FlexSlider 是一款轻量的响应式 jQuery 内容滚动插件,能够帮助你在项目轻松的创建漂亮的内容滚动效果。
这款插件也是 2011 年度最佳 jQuery 插件,今年被 WooThemes 收购并发布了2.0版本,因此继续入选 2012 年度榜单。
主要特色
- ✓ 简单的,语义化的标签;
- ✓ 支持所有主流的浏览器;
- ✓ 水平/垂直滑动和淡入淡出动画;
- ✓ 支持多个滑块,回调 API,以及更多;
- ✓ 触摸滑动支持硬件加速;
- ✓ 能够自定义导航选项。
- ✓ 兼容最新版本的 jQuery。
Hammer.js 是一个基于 jQuery,在网页中实现多点触摸 JavaScript 库。
支持 Tap、Double Tap、Drag、Hold、Swipe 和 Transform 六种触摸手势。
iPicture 是一款用于制作交互式照片效果的 jQuery 插件,可以在图片上添加额外的文本注释、视频和链接等等。
实现超平滑的 CSS3 transformations(变换)和 transitions(过渡效果)的 jQuery 插件。
一款用于制作大号,加粗的响应式(Responsive)头条标题的 jQuery 插件。
框架层面:
以前富客户端RIA的应用可能会用 flash/flex或是silverlight,现在可以使用js来完成大部分的功能,因此js作为一门前端的支撑语言也不仅仅是进行的简单的编码,越来越多框架性的东西出现了。越来越多的开发模式转变为后端只是吐json的数据源,而前端做所有UI的事情。
- MVC
MVC实现职责分离是很好的, Javascript的MVC框架现在很多,http://www.infoq.com/cn/news/2012/05/js-mvc-framework。 每一个框架其实都有其特点的,但是前端的MVC框架会和后端的有些不同的。比如前端的MVC框架可能会做一些M和V元素的双向绑定,对于后端来说往往是单向的比较多。通过引入MVC框架我们可以让同一个页面做很多事情,通过一个不刷新的页面实现一个应用程序的根基,还可以很清晰地进行MVC的分离并且突出 M的概念,这是没有框架所办不到的。
- 通讯
对于一个比较复杂的页面可能会有比较多的Javascript模块,对于 比较复杂的通讯,如果把模块模块之间进行强耦合直接调用其它模块的函数的话是不利于可维护性的,我觉得可以引入发布订阅机制,每一个模块做了什么修改把信 息发布出去,关心这个信息的人订阅这个信息,并且在回调函数里面做相应的操作就可以了。可以使用Amplifyjs作为发布订阅的框架。
- 模板
如果是大块的html拼接的话,数据和html甚至是css混合在一起,那么代码的可维护程度非常差。此时可以考虑使用一些模板引擎来分离数据和表现,比如Twitter hoganjs。由于很多模板引擎,比如大胡子引擎不仅仅是针对前端的,后端语言也有相应的引擎,因此甚至可以把模板放在文本文件中,前端后端共同使用一 套模板引擎,也就是说现在的代码偏向于服务端渲染的那么就在后端使用模板,如果要以后改为客户端渲染了这套模板可以直接被前端使用。
- 类库
除了框架之外还有很多类库,比如jquery,underscore,linq.js(linq to javascript),jscex(wind)反正后端有啥现在前端也有啥,脚本能做的事情真的比 想象的要多的多。
依赖
可以使用Requirejs、Commonjs之类的组件来管理脚本之间的依赖,好处很多的,我们的模块只需要写清楚需要依赖什 么,Requirejs自然会帮我们按照一定的次序加载进来,这样我们既不用担心顺序问题也不用担心组件的版本号问题。基于Requirejs它具有丰富 的配置,即使是我们进行了静态资源合并也完全能处理,只要通过配置把组件配置到相同的服务端生成的一个路径上即可,不过以前在做的时候发现它会自动加 上.js 扩展名,不过完全可以通过改Requirejs源代码解决。在架构上我的观点是既然使用开源的东西,遇到问题了就不要去怕改源代码。我们一定不能停留在框 架的使用者,定制框架甚至向作者贡献自己的代码没有这么难。
设计层面:
- 职责分离的理念
虽然我们都知道CSS样式、JS行为以及HTML结构。个人觉得只有HTML是必须的,也就是说如果一个页面没有样式没有脚本的话它应该是一个清晰 的页面,可以大致表现出页面需要表现的内容,只不过样子比较难看,并且也是交互的。如果说很多功能是ajax实现的话那么就把交互工作转到服务端实现服务 端的渲染。多了样式只是布局上样子上更好看,多了脚本只是交互性上更友好,不需要刷新页面,但是少了也不代表这个网站就是废物了,现在有很多理念其实目的 是一样的。如果达不到这个境界至少我们要很明确的让css、js和html履行自己的职责,不要把过多的事情赋予不相关的组件。比如尽量不要在html中 包含操作性的脚本代码,而是应该直接在脚本中选择dom元素进行操作,尽量不要在脚本中包含大段的html代码而是应该从模板读取然后把数据填充进去,也 尽量不要在html代码中包含大量内嵌的样式而是应该通过选择器选择进行样式赋值。
- 分层和目录结构
对于一个比较复杂的大型的项目,合理规划目录结构也是很重要的,后端有分层的概念其实前端完全也可以有分层的概念,有表现层、业务逻辑层和模型层,然后是下面的数据访问ajax层,当然还会有常量的 文件,
合并和拆分的平衡
很多时候架构上的东西就是一种权衡,如果有固定的标准的话也就不需要架构师了,怎么规划通用的东西合成一个文件,框架的文件单独,而每一个页面都有自己独特的脚本和 样式,也是一种学问。
性能层面:
- 性能检测
诸如YSlow和PageSpeed等工具可以分析出前端的性能问题,我们可以做到的就是在我们的可控范围之内尽量减少用户域名解析数量,减少用户下载的数据量,增加并发等等。其实说白了,我们就是 清理管道使得管道更大,或者增加更多的管道,或者就是尽量让管道之内的水少一点了,这样就可以更顺畅。
- 性能分析
现在有一些工具可以对Javascript的性能甚至是DOM解析的情况进行细致的分析,比如dynaTrace AJAX Edition,通过这样的工具我们可以分析我们的脚本代码以及页面布局是否合理,从开发的角度来全面了解和优化我们的前端代码。了给用户的机制体验最好还是对客户端的性能消耗有所优化。
致诸位新程序员:来自Chuck Jazdzewski慈父般的忠告
记住这几句话,学无止境。(Never stop learning.)沟通至关重要。(Communication is critical.)履行承诺,胜过交付。(Under promise, over deliver.)"我错了。"("I was wrong.")要是代码未经测试,那它就无法正常运行。(If it is not tested it doesn't work.)编程不是你的工作,发布产品才是。(Programming isn't your job, shipping is.)
不断学习:阅读、参加会议、订阅期刊、上课。无论做什么都是为了让你不断学习,要充分重视学习。了解你可以 找到的每种语言。尽你所能去花时间了解任何新的框架、算法、技术、模型、范式。每当往你的工具箱中多添一件工具,都会有助于你更轻松地解决接下来的编程问 题。去拜师,即比你强得多的人,然后学会他们可以传授给你的一切。学无止境。
学会沟通:我经常开玩笑说,作为程序员你能学到的最重要的技能是,如何在白板上画长方形。沟通对于程序员的 工作可谓至关重要。与买家、客户、用户、同事、老板、副总裁、首席执行官、董事会成员、风险投资人等各种各样的人沟通,这些沟通在你职业生涯中的某些时候 会变得很重要。学会如何在公共场合下讲话。学会如何用英文写作。学会如何与他人有效沟通。学会如何心平气和地说服他人,而不要大喊大叫、火冒三丈、抑或惊 慌失措。学会如何在演说时不讲行话。这样有助于别人明白你在做什么。学会把事物分解为简单明了的片断。学会借助比喻及象征去沟通。学会沟通。
做到可预测:要弄清楚你能以多快的速度惬意编程。要一直等到你明白了某项任务,然后才能预测出你会用多久完 成此任务。要将意想不到的情况计算在内。要为假期及休息时间作安排。学会适应你的预测。我会把某项任务分解成若干子任务,并且每个子任务耗时不超过 3 天(通常都不足 1 天),而在此之前我不会认为自己对此问题有了充分认识,因此也就不去预测完成任务会用多久。请遵照这条规则生活,履行承诺,胜过交付。最好是只用 10 天就交付你承诺需 15 天完成的工作,而不是用 10 天才交付你承诺仅需 5 天的工作。人们依赖于你的预测,而进度安排及计划也会围绕着你的预测去组织。尽你所能把预测做到最好,并确保你可以惬意地完成它们,否则你会被要求去履行 那些令你难受的预测。你起初并不善于此道;就要请更有经验的前辈与你一起去弥补、核实你的预测。学着变得更好。做到可预测;因为别人在指望着你。
承认自己的错误:你会犯许多错。你如何处理自己所犯的错正是他人如何评价你的依据。学会如何说"我错了。" 要是你低估了自己完成某事所用时长,一旦你清楚了这一点就及时告诉大家。要是你弄坏了某个版本,就修复它。要是你弄出了 bug,就搞定它。不要否认错误,不要为错误找借口,不要琢磨如何隐藏错误,不要把错误归咎于别人,为改正错误做点儿实事儿。要为自己的错误负责,否则你 将重蹈覆辙。
决不让烂代码从你的办公桌上溜走:作为程序员,你的工作就是编写可工作的代码,因此当你不确定代码符合此标 准时,决不让代码从你的办公桌上溜走。一旦让问题代码从你的办公桌上溜走,与溜走之前相比,那样做不仅会令你难堪,而且要找出问题也会更昂贵、更困难。学会爱上单元测试。学会爱上代码覆盖率。学会测试自己的代码胜过付钱给别人去测试代码。在你签入代码后又找到了 bug,应该为此觉得难为情。要是买家找到了 bug,应该觉得特别难为情。不要指望别人为你找出 bug,要靠你自己去找出并修复 bug。不要期盼代码能正常运行。要测试代码,不要估计代码能正常运行;要测试代码,不要抱有任何侥幸心理。就是要测试代码。如果你尚未测试代码,那么代 码就无法正常运行;对此你可能心知肚明。不过,即使你用心测试,有些 bug 还是会从你眼皮底下溜走。虽然你还会犯错,但是要尽你所能不犯错。
尽管编程很有趣,不过发布产品才是你的工作:编程很有趣。那是探索的喜悦,那是创造的喜悦;那是成就的喜 悦,那是学习的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有同事为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在 媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。可是,发布产品并无乐趣可言。我经常说起,发布一款产 品感觉不错,就像某人不再打你时的那种感觉。你的工作就是完成产品,修复 bug,然后发布。要是需要改 bug,就改 bug。要是需要写文档,就写文档。要是需要测试代码,就测试代码。所有这一切都是发布产品的一部分。编程不会给你带来报酬,唯有发布产品才会给你带来报 酬。把你的活儿干漂亮。
记住这几句话,
● 学无止境。(Never stop learning.)
● 沟通至关重要。(Communication is critical.)
● 履行承诺,胜过交付。(Under promise, over deliver.)
● "我错了。"("I was wrong.")
● 要是代码未经测试,那它就无法正常运行。(If it is not tested it doesn't work.)
● 编程不是你的工作,发布产品才是。(Programming isn't your job, shipping is.)
关于作者:huck Jazdzewski 曾在 Borland 公司担任 Delphi 首席架构师、首席科学家,与 Delphi 兼 .NET 之父 Anders Hejlsberg 并肩作战。于 2004 年从 Borland 公司离职,加入微软。
Chuck 大学一毕业就加入了 Borland 公司,而且已在公司工作了将近 13 年。他与妻子 Kristin,还有三个娃 Jonathan(男孩)、Joseph(男孩)及 Rebekah(女孩)一起生活在加利福尼亚州的索克尔。
此外,以上内容出自 2002 年 Borland 公司大会上对演讲者 Chuck Jazdzewski 的简介。由此便可推断,Chuck 是在 1989 年加入的 Borland 公司,假设Chuck 大学毕业时 22 岁,那么 Chuck 的出生年份大约是 1967 年。而文本发布于 2006 年,这时 Chuck 大概 39 岁,正值不惑之年。
正所谓"知易行难",路是自己一步一个脚印走出来的,祝大家一路走好……