Java开发者所使用的Java语言已经很成熟且高度进化,目前常常要面临的问题是何时写新代码——是追随每个人都在讨论的新的热门技术,还是坚持使用经过考验证明可靠的库?
事实上,由于很大一部分的Java应用程序是以盈利为目的的,以至于我们很难分辨出传闻中的新框架的实际使用量。对于社区用户和贡献者围绕的框架,这是决定它继续成功和持续发展的最大因素之一。
我们决定通过分析托管在世界上最大的开放仓库——GitHub的Java项目的数据来看看Java开发者到底使用的是哪些库。
在我们前一篇文章中介绍了我们在GitHub研究出的结果:JavaScript、Ruby、java前100个库。现在让我们挖掘数据,特别是java。
今天打开OSChina主页,页面先是变模糊,然后弹出对话框愚弄了用户一下,一个很有意思的愚人节礼物^_^
其中可以让网页变模糊的代码已经共享了,转来与大家分享
01 |
<![if !IE]> |
02 |
<script> |
03 |
/* |
04 |
* by moli |
05 |
*/ |
06 |
$(document).ready(function(){ |
07 |
if(document.cookie.indexOf("lu=") == -1 ){ |
08 |
// 延时2秒 |
09 |
setTimeout("jQuery.mxblur.interID = setInterval('jQuery.mxblur.begin()', 5)", 1500); |
10 |
} |
11 |
}); |
12 |
13 |
$.mxblur = { |
14 |
interID : null, |
15 |
num: 0.01, |
16 |
begin : function() { |
17 |
jQuery.mxblur.blur( jQuery.mxblur.num ); |
18 |
if(jQuery.mxblur.num > 3) { |
19 |
jQuery.mxblur.num = 0; |
20 |
if(confirm("少年!是不是代码写多了?眼睛模糊了?")) { |
21 |
alert("太累啦,就该歇歇啦,愚人节快乐:)"); |
22 |
clearInterval(jQuery.mxblur.interID ); |
23 |
jQuery.mxblur.blur(0); |
24 |
document.cookie = "lu=lu"; |
25 |
} |
26 |
} |
27 |
jQuery.mxblur.num = jQuery.mxblur.num + 1 /100; |
28 |
}, |
29 |
blur : function() { |
30 |
$("body").css("-webkit-filter","blur("+$.mxblur.num+"px)"); |
31 |
$("body").css("-moz-filter","blur("+$.mxblur.num+"px)"); |
32 |
$("body").css("-o-filter","blur("+$.mxblur.num+"px)"); |
33 |
$("body").css("-ms-filter","blur("+$.mxblur.num+"px)"); |
34 |
$("body").css("filter","blur("+$.mxblur.num+"px)"); |
35 |
$("body").css("filter","url(blur.svg#"+ $.mxblur.num.toFixed(1) +")"); |
36 |
} |
37 |
} |
38 |
</script> |
39 |
<![endif]> |
众所周知,万达是中国最大的商业地产公司,万达老板王健林是中国首富,过去几年一直都是顺风顺水。不过,老冀觉得,万达即将面临“成长的烦恼”:随着中国人口红利的消失,房地产行业的增长将会放缓。因此,我们看到最近几年万达开始发力文化产业,不仅在各地的万达广场中大规模兴建万达影院,还以26亿美元收购了美国第二大影院院线AMC。此外,万达还准备建设一大批文化主题广场。老冀认为,万达之所以这么做,都是为了在房地产之外再造一个未来的支柱产业。
在此之前,万达集团已经涉足零售业,成立了万达百货,但是做得并不好。万达的年会报告披露,2013年万达百货的收入是154.9亿元,只完成了计划的91%,这还是下调之后的计划。目前,万达百货仍持续亏损。
目前,万达集团旗下有商业地产、酒店、文化旅游和百货四大产业,商业地产仍然占大头,是典型的“收租模式”:万达在城市核心地带找好一块地,盖好房子然后找商家来租,万达每年收租金。这种“收租模式”不接触最终消费者,也不怎么关心商家的经营状况,反正这家走了再找另一家就是了。
而万达未来重点发展的几大产业的商业模式则与商业地产有着很大的不同,无论是酒店、主题公园、电影院线还是百货,其实都需要持续经营消费者。可是,怎样才能将这几块新业务串起来,形成合力呢?互联网也许是个很好的工具。老冀认为,这也许才是王健林执意要做电商的理由,至于说是因为跟马云打赌才做的,恐怕更多的是个烟雾弹。
万达电商从2012年5月开始组建,万达也亮出了土豪本色,花了200万年薪招总经理,100万年薪招高管。据说,几乎所有知名的电商高管都被万达的猎头骚扰过一遍,以至于没接到万达电话的,都不好意思说自己是搞电商的。
2012年12月,曾担任谷歌总部电子商务技术部经理、阿里巴巴国际交易技术资深总监的龚义涛就任那个年薪200万的万达电商总经理。此外,一大批来自阿里、谷歌等互联网公司的高管纷纷加盟万达电商。
问题是这波人都没做过线下业务,对万达独特的商业模式也是不甚了解。老冀觉得,未来实物经济与虚拟经济肯定会结合得越来越紧密。因此,互联网人一定要谦虚谨慎,杜绝“互联网沙文主义”,不要觉得动动鼠标、倒腾点流量就能搞定一切。
而实际上,这波互联网人就是犯了这个错误。他们提了很多套方案,不过都是些建个网站、做个移动App这样的纯互联网思路,当然一一被英明的王老板给否决了。一直折腾到2013年八九月份,他们仍然没有拿出一个适合万达的电商方案。结果,军人出身的王老板一生气,干脆派上了自己的“近卫军”,让万达IT部门接管了万达电商。据老冀了解,此后这波互联网人大多离开了万达。
在房地产行业,万达的IT系统是公认做得最好的,王老板只需要坐在办公室里动动鼠标,万达的所有大事小情就能够尽收眼里。因此,万达的IT部门是很强的,有着400多人的团队,万达集团的CIO朱战备也是很厉害的。老冀见过朱总几次,感觉他是个对公司业务和IT系统都很精通的人才,而且绝对务实。由于朱总过去曾经在外资企业上海贝尔阿尔卡特担任过CIO,喝过洋墨水,那些高大上的国外IT厂商想用些似是而非的新概念去忽悠他,绝对没门!在这里老冀也给传统企业的老板提个建议:当你准备开拓新业务的时候,与其从外边找不太靠谱的职业经理人,倒不如从内部找靠谱的部下。如果感觉CIO很靠谱,直接用CIO去做新业务肯定没错,因为这个CIO必然是既了解公司的业务,又熟悉互联网的大趋势,还懂一些技术,做新业务最合适。
务实的朱总带着一帮人开始重新研究万达的电商要怎么搞,结论很快就出来了:万达做B2C电商肯定没戏!一个是做B2C需要巨大的投入,而且由于天猫和京东已经建立起了遥遥领先的优势,你肯定赶不上。事实也是如此,苏宁在B2C上的决心不可谓不大,投入的资源不可谓不多,但是到了2013年年底一盘点,苏宁易购与京东的差距反而有拉大的趋势。
万达电商的新团队接着分析,如果不做B2C,万达又能做什么呢?这个还得看万达有什么。目前万达在全国有85家万达广场,2014年开到120家,2015年140家。每家万达广场每年的访问人数有2000万,一年就有超过20亿人次的流量,绝对能够赶超国内任何一家中型B2C电商的流量!而且,这些线下流量的客单价、转化率要比线上的B2C电商高得多:你既然决定去万达广场,总是要买点东西或者看个电影、唱个卡拉OK吧?哪一样不得花银子?
于是,他们得到的下一个结论就是万达不做B2C,要做O2O。具体怎么做呢?他们想了个办法,就是建立大会员体系。所谓“大会员”,就是这个会员资格在全国所有的万达广场、万达酒店、万达文化园区内都是通用的,而且要在万达广场的所有门店中都是通用的。消费者在“万达系”的任何一个商家消费都能够获得积分,积分也是通用的,能够直接拿到万达广场的3万多商家中消费。目前,万达已经在全国20多家万达广场中做“大会员”试点,鼓励消费者办理会员卡,并计划将其推广到全国所有的万达广场。万达计划在两年之内,将万达广场的消费者转化成一亿名万达会员。有了这一亿名会员,万达才算是真正掌握住了自己的客户。
如果“大会员”进展顺利的话,万达同时就可以玩“大数据了”。例如,能够根据会员每次来万达广场的消费情况,给这些会员进行归类,打上标签。此后,万达也就能够经营会员了,例如帮助商家筛选消费者,做个性化营销。例如,我是万达广场中一家卖礼品的商家,情人节想搞个促销活动,就可以通过万达电商的后台,挑选出一批25-30岁的单身男女,然后根据他们所处的地理位置,有针对性地向他们推送促销信息。
有了“大会员”和“大数据”,万达其实已经能够帮商家干很多事情了。例如,过去商家搞促销,必须雇人到万达广场门口发纸质优惠券,发出1万份能回收800份就不错了,还得贴上近1万元的制作成本。有了“大会员”和“大数据”之后,商家就可以直接从后台的数据库中挑选出适合的消费者,通过短信或微信等各种渠道做精准营销,成本也要低很多。
有了“大会员”和“大数据”,万达还能够将商圈拓展到万达广场之外。例如,在万达广场周围的小商户中设置能刷万达会员卡的POS机,给这些小商户带来新的流量,也给会员提供了更多的便利。
有了“大会员”和“大数据”,万达就可以跟第三方商家打交道了。例如,万达可以跟银行信用卡中心、航空公司、连锁加油站等商家合作,他们每年发的卡里面都有大量的积分花不出去,就可以跟万达会员卡谈个兑换比例,让他们的会员到万达广场来消费。
这就是万达的O2O,能够做到扬长避短。老冀认为,同样是两个“O”,万达看重的还是线下的那个“O”。至于线上的那个“O”,无论是自家的万汇网、万汇App,还是第三方的微信、团购,只是给线下的“O”提供导流的作用。大家觉得,万达的O2O是不是比苏宁硬桥硬马地直接做B2C更可行一些?
不过,想法可行,并不代表一定就能做起来。作为消费者,我已经有了优衣库、沃尔玛的卡,为什么还要办万达会员卡?作为商家,如果客户都去刷万达会员卡了,我获取新客户的收益还抵不上支出,我为什么要接纳万达会员卡?另外,如果我手中已经有了很大的客户数据,我为什么要与万达共享?这些利益上的问题,都需要万达设计出一套很好的商业模式来解决。
要做成“大会员”和“大数据”不是那么容易的,既需要成熟的会员营销方法论,还需要可用的CRM软件,更需要懂得会员营销的运营团队,万达需要的是一整套解决方案。为了尽快找到这套解决方案,万达一方面广招贤才,另一方面则找了4家“外脑”IBM、西门子利多富、甲骨文、雅座来招标,让外部专家来说说到底应该怎么搞。出于意料的是,3家“高大上”的外企却没能赢得万达的欢心,反倒是雅座在线这家本土的小公司赢得了万达的信任。在这里,老冀不禁要为万达捏一把汗:虽然雅座在连锁餐饮企业的会员营销方面做得很不错,也有一套成熟的解决方案,但是毕竟从来没有做过这么复杂的商业广场项目,万达也真敢赌!
总之,万达的O2O看起来可行,但是要真正见到成效,恐怕也不是一年两年的事情,作为老板的王健林恐怕还需要多点耐心。
新浪科技讯 北京时间3月20日早间消息,谷歌(1199.25, -12.01, -0.99%)CEO拉里·佩奇(Larry Page)周三在温哥华举行的TED大会上表示,虽然隐私问题值得重视,但不应该因噎废食,不假思索地一味保护隐私。
佩奇起初迟迟不肯公布自己的喉咙究竟出了什么问题,但当他对外公布实情后,立刻收到了数以千计与他有类似情况的人的回复,这也让他意识到开放的价值。他甚至认为,如果人们能将自己的病例匿名分享到网上,今年大约会有10万人的生命得到拯救。
他在TED大会上说:“我很担心互联网隐私,我们对待此事的态度与对待病例类似,我们正在不加区分地把婴儿和洗澡水一起倒掉。我们并没有考虑,将正确的信息,通过正确的方式,与正确的人分享之后,所得到的巨大利益。”
诚然,隐私问题十分重要。“世界变了,如果你拿着手机,它就知道你在那里。”佩奇说,“关于你的信息已经大幅增多。人们询问不同的问题的确在情理之中。而我认为,我们应该做的就是为他们提供选择,向他们展示哪些数据会被收集,并告知他们搜索历史和定位数据。我们对Chrome的隐身浏览模式感到振奋,并且在通过更多方式实现这种服务。但我们只是为人们提供了更多选择,让他们知道事情的进展。”
佩奇一直在强调人工智能和上网的好处,他同时也在批评美国政府的监视行为。“棱镜门”泄密者爱德华·斯诺登(Edward Snowden)周二也通过远程视频参与了TED,谷歌联合创始人谢尔盖·布林(Sergey Brin)还借助视频会议与他合影。
“没有安全就没有隐私。”佩奇说,“如果我们必须要预防用户受到政府的监视,那就没有民主可言。我们应该知道,这些监视活动的目的、方法和原因,但政府却将这一切保密。我认为我们应该就此展开辩论,否则便无法建立有序的民主制度。
Nginx的优点
部署nginx最关键的好处就是能够高性能高效的处理高并发。同时,还有更多有意思的好处。
最近几年,web架构拥抱解耦的理念并且将应用层设施从web服务器中分离。虽然现在仅仅是将原先基于LAMP(Linux, Apache, MySQL, PHP, Python or Perl)所构建的网站,变为基于LEMP(E表示Engine x)的。但是,越来越多的实践是将web服务器推入基础设施的边缘,并且用不同的方法整合这些相同或更新的应用和数据库工具集。
Nginx很适合做这些工作。他提供了必要的关键功能用于方便将下列功能从应用层剥离到更高效的边缘web服务器层:并发、长连接处理、SSL,静态内容、压缩和缓存、连接和请求限速,以及HTTP媒体流等。Nginx同时也允许直接整合memcached、Redis或者其他的NoSQL解决方案,增强为处理大规模并发用户的性能。
随着现代编程语言和开发包广泛使用,越来越多的公司改变了应用开发和部署的方式。Nginx已经成为这些改变范例之中的最重要的部件之一,并且已经帮助许多公司在预算内快速启动和开发他们的web服务。
Nginx开发始于2002年,2004年基于2-clause BSD授权正式对外发布。自发布起,Nginx用户就在不断增长,并且贡献提议,提交bug报告、建议和评测报告,这极大的帮助和促进了整个社区的发展。
Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows。Nginx有自己的函数库,并且除了zlib、PCRE和OpenSSL之外,标准模块只使用系统C库函数。而且,如果不需要或者考虑到潜在的授权冲突,可以不使用这些第三方库。
谈谈关于Windows版本nginx。当nignx在Windows环境下工作时,Windows版本的nginx更像是概念验证版本,而不是全功能移植。这是由于目前nginx和Windows内核架构之间交互的某些限制导致。Windows版本ngnix已知的问题包括:低并发连接数、性能降低、不支持缓存和带宽策略。未来Windows版本的nginx的功能会更接近主流版本。
Nginx架构综览
传统基于进程或线程的模型使用单独的进程或线程处理并发连接,因而会阻塞于网络或I/O操作。根据不同的应用,就内存和CPU而言,这是非常低效的。派生进程或线程需要准备新的运行环境,包括在内存上分配堆和栈、生成一个新的运行上下文。创建这些东西还需要额外的CPU时间,而且过度的上下文切换引起的线程抖动最终会导致性能低下。所有这些复杂性在如Apache web服务器的老架构上一览无遗。在提供丰富的通用应用功能和优化服务器资源使用之间需要做一个权衡。
最早的时候,nginx希望为动态增长的网站获得更好的性能,并且密集高效的使用服务器资源,所以其使用了另外一个模型。受不断发展的在不同操作系统上开发基于事件模型的技术驱动,最终一个模块化,事件驱动,异步,单线程,非阻塞架构成为nginx代码的基础。
Nginx大量使用多路复用和事件通知,并且给不同的进程分配不同的任务。数量有限的工作进程(Worker)使用高效的单线程循环处理连接。每个worker进程每秒可以处理数千个并发连接、请求。
代码结构
Nginx worker的代码包含核心和功能模块。核心负责维护一个紧凑的事件处理循环,并且在请求处理的每个阶段执行对应的模块代码段。模块完成了大部分展现和应用层功能。包括从网络和存储设备读取、写入,转换内容,进行输出过滤,SSI(server-side include)处理,或者如果启用代理则转发请求给后端服务器。
nginx模块化的架构允许开发者扩展web服务器的功能,而不需要修改nginx核心。Nginx模块可分为:核心、事件模块,阶段处理器,协议、变量处理器,过滤器,上游和负载均衡器等。目前,nginx不支持动态加载模块,即模块代码是和nginx核心代码一起编译的。模块动态加载和ABI已经计划在将来的某个版本开发。更多关于不同模块角色的详细信息可在14.4章找到。
Nginx在Linux、Solaris和BSD系统上使用kqueue、epoll和event ports等技术,通过事件通知机制来处理网络连接和内容获取,包括接受、处理和管理连接,并且大大增强了磁盘IO性能。目的在于尽可能的提供操作系统建议的手段,用于从网络进出流量,磁盘操作,套接字读取和写入,超时等事件中及时异步地获取反馈。Nginx为每个基于Unix的操作系统大量优化了这些多路复用和高级I/O操作的方法。
图14.1展示了nginx架构的高层设计。
图 14.1 nginx架构图
工作进程模型
前面提到过,nginx不为每个连接派生进程或线程,而是由worker进程通过监听共享套接字接受新请求,并且使用高效的循环来处理数千个连接。Nginx不使用仲裁器或分发器来分发连接,这个工作由操作系统内核机制完成。监听套接字在启动时就完成初始化,worker进程通过这些套接字接受、读取请求和输出响应。
事件处理循环是nginx worker代码中最复杂的部分,它包含复杂的内部调用,并且严重依赖异步任务处理的思想。异步操作通过模块化、事件通知、大量回调函数以及微调定时器等实现。总的来说,基本原则就是尽可能做到非阻塞。Nginx worker进程唯一会被阻塞的情形是磁盘性能不足。
由于nginx不为每个连接派生进程或线程,所以内存使用在大多数情况下是很节约并且高效的。同时由于不用频繁的生成和销毁进程或线程,所以nginx也很节省CPU时间。Nginx所做的就是检查网络和存储的状态,初始化新连接并添加到主循环,异步处理直到请求结束才从主循环中释放并删除。兼具精心设计的系统调用和诸如内存池等支持接口的精确实现,nginx在极端负载的情况下通常能做到中低CPU使用率。
nginx派生多个worker进程处理连接,所以能够很好的利用多核CPU。通常一个单独的worker进程使用一个处理器核,这样能完全利用多核体系结构,并且避免线程抖动和锁。在一个单线程的worker进程内部不存在资源匮乏,并且资源控制机制是隔离的。这个模型也允许在物理存储设备之间进行扩展,提高磁盘利用率以避免磁盘I/O导致的阻塞。将工作负载分布到多个worker进程上最终能使服务器资源被更高效的利用。
针对某些磁盘使用和CPU负载的模式,nginx worker进程数应该进行调整。这里的规则比较基本,系统管理员应根据负载多尝试几种配置。通常推荐:如果负载模式是CPU密集型,例如处理大量TCP/IP协议,使用SSL,或者压缩数据等,nginx worker进程应该和CPU核心数相匹配;如果是磁盘密集型,例如从存储中提供多种内容服务,或者是大量的代理服务,worker的进程数应该是1.5到2倍的CPU核心数。一些工程师基于独立存储单元的数目来决定worker进程数,虽然这个方法的有效性取决于磁盘存储配置的类型,。
Nginx开发者在下个版本中要解决的一个主要问题是怎么避免磁盘I/O引起的阻塞。目前,如果没有足够的存储性能为一个worker进程的磁盘操作提供服务,这个进程就会阻塞在磁盘读写操作上。一些机制和配置指令用于缓解这个磁盘I/O阻塞的场景,最显著的是sendfile和AIO指令,这通常可以降低许多磁盘利用率。应该根据数据集(data set),可用内存数,以及底层存储架构等来规划安装nginx。
当前的worker模型的另一个问题是对嵌入脚本的支持有限。举例来说,标准的nginx发布版只支持Perl作为嵌入脚本语言。这个原因很简单:嵌入脚本很可能会在任何操作上阻塞或者异常退出,这两个行为都会导致worker进程挂住而同时影响数千个连接。将脚本更简单,更可靠地嵌入nginx,并且更适合广泛应用的工作已经列入计划。
随着计算机的发展、互联网及移动互联的兴起,开源软件在操作系统、数据库、Web服务器、移动操作系统等各个方面已经成为主流。开源软件,无处不在。
如果你是一个程序员,想证明自己的实力,你可以在GitHub上分享代码,可以在Stack Overflow和Quora这样的网站上解答编程问题,也可以在博客中记录自己的想法和建议。但是,现在缺少一个网站来聚集所有的这些活动——至少根据 Coderwall的说法是这样。Coderwall是Y Combinator最近孵化的初创公司中的一家,它想成为聚集所有这些活动的网站,成为开发者的在线信誉系统。Coderwall于2012年02月29日上线。
京东商城也开始了开源战略,这是其推出的开源项目推荐: