又到周末了。昨天是感恩节,小编也是听同事说起,才想起这个节日。这几年,平安夜、圣诞节这种洋节日,在国内越来越流行了。今年的圣诞节各位打算怎么庆祝呢?开发频道每周重点推荐,按时带给各位。一周精彩内容不要错过!

头条推荐

技术趣闻:IT行业中说话最不靠谱的商业领袖

如果不喜欢他们的答案,请别担心——过一阵子他们就会改变口风。对于技术这样一个快速发展、瞬息万变的行业来说,要求企业领导者们始终保持一条路走到黑的习惯似乎不太公平。不过感谢互联网的存在,这些曾经高调的言论将永远保存在线并能为我们所轻松找到——其中有一些的转变速度与转变程度实在令人惊叹。……>>详细

用JavaEE7、Websockets和GlassFish4打造聊天室(一)

Java EE 7已经在今年正式发布了,新增加了很多新的功能和特性,如新增或更新了不少的JSR标准。其中特别受到关注的是Websockets。它的一个好处之一是减少了不必要的网络流量。它主要是用于在客户机和服务器之间建立单一的双向连接。这意味着客户只需要发送一个请求到服务端,那么服务端则会进行处理,处理好后则将其返回给客户端,客户端则可以在等待这个时间继续去做其他工作,整个过程是异步的。在本系列教程中,将指导用户如何在JAVA EE 7的容器GlassFish 4中,使用JAVA EE 7中的全新的解析Json API(JSR-353),以及综合运用jQuery和Bootstrap。本文要求读者有一定的HTML 5 Websocket的基础原理知识。

效果图

我们先来看下在完成这个教程后的效果图,如下所示:

阅读全文

不要if else的编程

条件控制是编程中与生俱来的一种结构,但对于我来说,除了给我带来麻烦外,没有发现任何的用处。一次又一次,我不断发现,越少的if语句,越少的 switch语句,越少的循环,就会是越好的代码。通常这其中的原因是程序员用编程语言实现了更好的抽象归纳。他们并不是有意识的避免使用控制结构。但他 们确实做到了这些。

如果是使用一种面向对象编程语言,我们可以用多态(polymorphism)来代替switch。同样的技巧也能用在 if语句上,但如果逻辑太简单,这样做就有点得不偿失。当使用一种有函数式特征的编程语言时,大部分的循环执行任务我们都可以用 map,filter,fold等实现。控制结构最终从代码中消失,这是对代码大有好处的事。

条件控制结构的问题是,它很容易导致你把代码修改的乱七八糟。让我们看看下面一个简单的if语句:

  1. if ... 
  2.     ... 
  3.   else 
  4.     ... 
  5.   end  

代码中所有打省略号的地方都是你可以不断添加代码的地方。这些地方可以访问if外面的变量。这很容易造成高耦合。更糟糕的是,人们会习惯性的在条件 控制里嵌套条件。我见过的最糟糕的代码,里面的嵌套之深的就像是噩梦里的无底洞。我想,条件控制结构的真正问题所在是,它把各种任务混合到了一起。我相 信,你能从某种角度上看出,它是和任务单一编程原则相冲突的。

阅读全文

Yes or No:21天教你学会C++

下面是一个《Teach Yourself  C++ in 21 Days》的流程图,请各位程序员同仁认真领会。如果有必要,你可以查看这个图书以作参照:http://www.china-pub.com/27043

看完上面这个图片,我在想,我学习C++有12年了,好像C++也没有学得特别懂,看到STL和泛型,还是很头大。不过,我应该去考虑研究量子物理 和生物化学,这样,我才能重返98年杀掉还在大学的我,然后达到21天搞定C++的目标。另外,得要特别提醒刚刚开始学习C++的朋友,第21天的时候, 小心被人杀害。呵呵。

当然,上面只是一个恶搞此类图片,学习一门技术,需要你很长的时间,正如图片中的第三图和第四图所示,你需要用十年的时间去不断在尝试,并在错误中总结经验教训,以及在项目开发中通过与别人相互沟通互相学习来历练自己。你才能算得上是真正学会。

阅读全文

Linux编程女神计划招募新的内核级MM实习生

作为FOSS的Linux编程女神计划(Outreach Program for Women)的一部分,这个夏季在Linux基金会工作的实习生们背景不同,水平也高低不等,但是她们至少有一件事情是相同的(除去性别之外),就是她们 可以在自己的履历中添加一项“Linux内核黑客”。

(译注:Outreach Program for Women,OPW此处译作“Linux编程女神计划”带有调侃意味,Just joke,没有恶意。)

OPW-kernel-contributions-9.jpg

针对女性的招募项目在对Linux内核3.12的贡献已经名列前茅。来源:LWN.net

阅读全文

写给开发者:记录日志的10个建议

欢迎在新的一年来到我的博客。在一个巴黎devops maillist上回复了一个关于监控和日志监控之后,我想起了很久以前我的一个博客计划。

尽管在写这篇博文的时候,我是在负责运维工作,不过本文主要是写给开发者的。

对我来说,明白如何记录日志和记录什么,是软件工程师必须明了的最艰巨的任务之一。之所以这么说,是因为这项任务与预测(divination)类 似,你不知道当你要调试的时候需要些什么信息……我希望这10个建议能帮助你更好地在应用程序中记录日志,让运维工程师们受益。:)

1. 你不应自己写log

阅读全文

Java 线程转储

软件维护是一个枯燥而又有挑战性的工作。只要软件功能符合预期,那么这个工作就是好的。设想一个这样的情景,你的电话半夜也一直在响(这不是一个令人愉快的感受,是吧?)

任何软件系统,无论它当初是被设计的多好,也无论它经历了怎样的质量测试,仍然是有可能出现运行时性能问题。原因可能是内部功能限制或者外部环境影响。软 件系统是在某种假定的情景和先入为主的观念之上被建立的。然而,当他们实际运行时,这些假定的情况可能是错误的,由此就会引起系统故障。

企业的J2EE系统通常拥有庞大的用户基数,并且涉及多种系统间的交互,一个常见的运行时问题报告是系统的速度降低或者系统“挂起”。在这样的情形下,常用的故障处理手段就是分析java线程的转储来找到引起系统减速或者挂起的线程。这篇文章就是讨论java的堆栈跟踪信息,匿名线程和怎样读取线程转储的通用方法。

异常和堆栈信息

阅读全文

移动互联网时代 位置服务能否“鱼跃龙门”?

双十一过去两周左右,天猫商城350亿骄人成绩,依然持续火热。幸运的掩盖了高德和天猫并不成功的合作事实。让我们不禁感叹,地图厂商O2O道路依旧艰难。

双十一高德和天猫的合作,是阿里巴巴融资高德地图之后,首次实现高德地图与天猫商城两者业务的直接融合。也意味着高德地图正式成为天猫的一个“分销渠道”,更将在线下商户资源上与天猫形成互补。

想法和实施过程都是好的,只是结果却倍感微凉。

阅读全文

著名豆腐渣软件项目:美国联邦调查局虚拟案件文档系统

本文受《梦断代码》的启发,描述了一个重大失败项目:FBI VCF软件系统的前前后后。文中所提到的时间、观点和时间取材于下列资料:

  • Wikipedia关于FBI VCF软件项目的介绍;
  • 《华盛顿邮报》关于VCF项目的专栏报道《The FBI’s Upgrade That Wasn’t》(2006年8月16日)

 

FBI也做出过豆腐渣软件项目

阅读全文

远程工作两个月的体会

自己开公司,就是自己在定规矩。你自己决定如何使用手头上的钱,如何建立公司的组织结构,以及你在何时何地工作。

默认方案,是在像纽约(我们的所在地)这样的地方拥有一间办公室,按正常上下班时间工作。我和 John 都渴望打破常规,建立一支远程工作的团队。

最近我们体验了两个月,每个人都在不同的地方办公。

阅读全文

10 谷歌如何管理世界上最聪明的工程师?

 

谷歌如何管理世界上最聪明的工程师?

谷歌一直以关注人力资源和管理战略而著称,该公司的一大重要任务就是说服旗下大量工程师服务各自老板和主管经理的管理,并让这些工程师信服这些管理者的价值。

近日,《哈佛商业评论》(Harvard Business Review)刊登的一篇文章就详细解释了谷歌人力资源职员如何回答这一问题——管理者的作用体现在哪里?

阅读全文

11 为什么说面向对象编程和函数式编程都有问题

我不理解为什么人们会对面向对象编程和函数式编程做无休无止的争论。就好象这类问题已经超越了人类智力极限,所以你可以几个世纪的这样讨论下去。经 过这些年对编程语言的研究,我已经清楚的看到了问题的答案,所以,我经常的发现,人们对这些问题做的都是一些抓不住要领、无意义的争论。

简言之,不论是面向对象编程还是函数式编程,如果你走了极端,那都是错误的。面向对象编程的极端是一切都是对象(纯面向对象)。函数式编程的极端是纯函数式编程语言

面向对象编程的问题

面向对象的问题在于它对“对象”的定义,它试图将所有事情就纳入到这个概念里。这种做法极端化后,你就得出来一个一切皆为对象思想。但这种思想是错误的,因为

阅读全文

12 Android、iPhone和Java三个平台一致的加密方法

先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的最让人纠结的要属Java、Android和iPhone三个平台加解密不一致的问 题。因为手机端后台通常是用JAVA开发的Web Service,Android和iPhone客户端调用同样的Web Service接口,为了数据安全考虑,要对数据进行加密。头疼的问题就来了,很难编写出一套加密程序,在3个平台间加解密的结果一致,总不能为 Android和iPhone两个客户端各写一套Web Service接口吧?我相信还会有很多朋友为此困惑,在此分享一套3DES加密程序,能够实现Java、Android和iPhone三个平台加解密一 致。

首先是JAVA端的加密工具类,它同样适用于Android端,无需任何修改,即可保证Java与Android端的加解密一致,并且中文不会乱码。

双击代码全选

  1. package org.liuyq.des3;  
  2.         
  3. import java.security.Key;  
  4.         
  5. import javax.crypto.Cipher;  
  6. import javax.crypto.SecretKeyFactory;  
  7. import javax.crypto.spec.DESedeKeySpec;  
  8. import javax.crypto.spec.IvParameterSpec;  
  9.         
  10. /** 
  11.   * 3DES加密工具类 
  12.   *  
  13.   * @author liufeng  
  14.   * @date 2012-10-11 
  15.   */ 
  16. public class Des3 {  
  17.      // 密钥  
  18.      private final static String secretKey = "liuyunqiang@lx100$#365#$" ;  
  19.      // 向量  
  20.      private final static String iv = "01234567" ;  
  21.      // 加解密统一使用的编码方式  
  22.      private final static String encoding = "utf-8" ;  
  23.         
  24.      /** 
  25.       * 3DES加密 
  26.       *  
  27.       * @param plainText 普通文本 
  28.       * @return 
  29.       * @throws Exception  
  30.       */ 
  31.      public static String encode(String plainText) throws Exception {  
  32.          Key deskey = null ;  
  33.          DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());  
  34.          SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );  
  35.          deskey = keyfactory.generateSecret(spec);  
  36.         
  37.          Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );  
  38.          IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  
  39.          cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);  
  40.          byte [] encryptData = cipher.doFinal(plainText.getBytes(encoding));  
  41.          return Base64.encode(encryptData);  
  42.      }  
  43.         
  44.      /** 
  45.       * 3DES解密 
  46.       *  
  47.       * @param encryptText 加密文本 
  48.       * @return 
  49.       * @throws Exception 
  50.       */ 
  51.      public static String decode(String encryptText) throws Exception {  
  52.          Key deskey = null ;  
  53.          DESedeKeySpec spec = new DESedeKeySpec(secretKey.getBytes());  
  54.          SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );  
  55.          deskey = keyfactory.generateSecret(spec);  
  56.          Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );  
  57.          IvParameterSpec ips = new IvParameterSpec(iv.getBytes());  
  58.          cipher.init(Cipher.DECRYPT_MODE, deskey, ips);  
  59.         
  60.          byte [] decryptData = cipher.doFinal(Base64.decode(encryptText));  
  61.         
  62.          return new String(decryptData, encoding);  
  63.      }  

上面的加密工具类会使用到Base64这个类,该类的源代码如下:

阅读全文

13 15 个华丽的平面风格的登录界面设计

#1: Flat login design for mobile by Calvin Smith

flat login design 1

色彩非常棒,用于移动应用的平面登录界面设计,简单、漂亮。

#2:  Transparent flat login screen by Rich Smith

阅读全文

投    票

本期的推荐内容
这期内容非常喜欢,给力!
内容一般般,还可以。
推荐的内容没有感兴趣的。
推荐的内容很差!
我是打酱油路过的。

专题推荐

离年末越来越近了,不知道各位有没有倦怠的感觉?本周IT界,技术大会开不停!大数据、云计算、Hadoop,这些
Nginx战斗准备 更好的表达“
离年末越来越近了,不知道各位有没有倦怠的感觉?本周IT界,技术大会开不停!大...
怎样尽可能的缩短浏览器上页面渲染的时间?我们可以从多个个方面进行改善。写出高效的css代码、避免使用css
浏览器:渲染 重绘、重排两三
怎样尽可能的缩短浏览器上页面渲染的时间?我们可以从多个个方面进行改善。写出...
这周的头版头条是“双十一”。凌晨12点守在电脑前抢东西的各位,创造了天猫几百亿元的交易量,让叫伙伴们惊
开发频道2013年11月第2周重
这周的头版头条是“双十一”。凌晨12点守在电脑前抢东西的各位,创造了天猫几百...
作为Android开发者,我们大都知道开发最难处无外乎是底层的开发,因为要想改变或实现新的功能技术,必须得
深入剖析Android底层开发技
作为Android开发者,我们大都知道开发最难处无外乎是底层的开发,因为要想改变...

一周排行

留言评论