公司环境好坏,决定程序员水平高低?

千万不要惹程序员不开心,否则吃亏是你自己

千万不要惹程序员不开心,否则吃亏是你自己

是什么造就了最优秀的程序员?丰富的工作经验、优厚的待遇,还是多年的实践?答案都是否定的。

在科技界,有一个奇怪的现象:来自同一家公司的程序员的水平相差无几。为什么会是这样?因为最重要的因素是程序员所处环境的舒适程度,这一点决定了他们的水平高低。

为了验证这种看法是否正确,美国软件工程专家汤姆•德马克(Tom DeMarco)和蒂莫西•李斯特(Timothy Lister)设计了一个名为“编码战争游戏”(Coding War Games)的研究。这项研究旨在确认最好的程序员和最差的程序员有哪些共同特征。

超过600名程序员参加了研究,他们来自92家公司,每个人都要设计、编码和测试一个程序,他们不仅要在上班时间完成编程,工作环境也与以前不变。此外,每名参与者都要与一名来自本公司的同事配对,但二人独立工作,相互间没有任何的交流——这也是“编码战争游戏”研究的一个重要特点。

研究结果表明,不同程序员的水平有着天壤之别:最好的是最差的10倍,顶尖程序员的水平是平均值的2.5倍。

当德马克和李斯特试图揭开程序员水平差距如此之大的谜团时,他们发现工作经验、待遇和完成这项工作所需要的时间等因素,都与之没有太大关联。

例如,拥有10年经验的程序员并不比只有2年经验的程序员优秀。一半能力处于平均值以上的程序员的收入还比另一半能力处于平均值以下的程序员少了10%——即便前者的水平是后者的两倍。相对于那些在编程中出现多处错误的程序员,没有出现任何错误的程序员完成测试的时间即便没有超过他们,但也没有少很多。

至于程序员之间的水平为何相差如此之大,这仍然是个迷,但有一个线索颇令人感兴趣:来自同一家公司的程序员的水平都差不多,即便他们不在一起工作。这是因为顶尖程序员所在的公司,会给予他们最大的隐私权和私人空间,同时让他们完全可以支配自己的物理环境,不受任何打扰。

62%最优秀的程序员说,公司十分尊重他们的隐私权,而表现最差的程序员中只有19%的人这样说。在表现最差的程序员中,76%的人说他们经常无缘无故被打扰,而在最优秀的程序员中,只有38%的人这样说。

本文编译自bakadesuyo。

(清辰)

来源: 新浪科技

我的一个同学的网赚经历

  我有个大学同学,关系很好,这几天他来大连办事借宿我家,喝酒的时候聊了聊他最近在倒腾的东西,这位同学在大学期间包括目前都属于会做系统的阶段,并不是IT人士更不是圈内人,他跟我讲的这些东西都是纯实战的网赚,让我有点哭笑不得,估计也会让一些所谓“网络营销”的人哭笑不得。

淘宝客

这个同学最开始是从淘宝客入手的,我接触的淘宝客大多数思路有几种:1、站群;2、批量发广告(如:QQ空间、BBS);3、竞价。他说他做淘宝客申请了几十个店铺每个店铺采集很多宝贝数据,然后把描述写的生动一些把淘宝客的链接转换一下放到描述里,他这个方式每天以千元以上的收入再增加,并且没有被淘宝冻结并成功提现,因为我也对淘宝客稍微有一些了解,我最初以为他在吹牛,于是提问。

问:你怎么申请那么多店铺的?
答:我买了很多现成的实名支付宝然后通过一个什么考试考试完成以后就可以上架商品,只不过没有店铺。

问:你淘宝店信誉哪来的?
答:我办了消保,信誉是用捷易通之类的软件刷的,还被封了一个店说我信誉提高太快。(1个月3钻,这个后面说)

问:你淘宝店的流量是哪来的?
答:微信摇一摇。(这个后面说,很神奇)

问:转化率你怎么弄?
答:最开始是所有链接对同一个店铺,转化率低,后来我改成单品对单品了,效果很好。

经过我问了几个问题发现,他的确是用淘宝店做淘宝客并且效果很好,但是据他说目前这个方法已经被淘宝全面封杀,他做的时候是注册N多个淘宝客帐号,N多个店铺并且都是新店,这么做就是不怕封,封了可以再开,有做淘宝客的同学可以尝试一下。

并且他加了几个群,在网赚的同事用屏幕录像专家录制视频,视频399元/份、收徒弟一个月2000元大概他收了有10几个徒弟,卖了几十份教程,在这个过程中还出售一些东西,比如淘宝宝贝数据,我问他为什么不卖程序,他说程序是他买的没法卖,但是卖他用程序采集来的数据很赚钱,1分钱/条,1万条起卖。

更神奇的是我问到他提升信誉的方式,我说“是找人刷信誉吗?” 他说“那么刷信誉速度慢而且太贵了”他用的方式是捷易通类的软件,然后把所有商品价格都比目前淘宝上同类充值产品少一毛两毛的,这样按价格排行他一般都在第一,信誉提升很快1个月的时候3钻很轻松,他说这一个月大概赔钱不到1000元,如此算来不到1000元3钻而且是真实成交还是比较靠谱的而且成本低,但是有一间店铺被淘宝封了说他信誉提升太快,其实可以申诉但是需要一个商品一个商品申诉,他嫌麻烦放弃那个店了。

至于捷易通的挂机方式,他跟我提到了一个名词“VPS”他说太买了一个VPS用VPS挂机,这样可以挂很多个,当时让我很汗颜就是我身边做IT的同事都有很多人不知道VPS是什么他竟然如此轻易的就说出来并且加以利用,他还注册了域名买了主机上传了一个源码(他说码源被我纠正了)就是可以转换淘宝客链接变成非淘宝客链接并且还能返利的链接,然后还有几个CPA的网站,就类似网页游戏和神马美女注册手机号之类的(这个更神奇后面说)。

CPA

后来他又说他做了个网站,每天赚不到100元,太少了,因为像我这样建站很多年的人知道每天几十元的收入已经很多了,我问他是什么站他又蹦出了一个名词“CPA”我问他怎么做的,他就详细的给我讲了他做CPA的神奇过程。

  他当时有4台电脑,每台电脑安装android模拟器和一个多开程序,平均每台电脑运行3个微信、算上VPS一共是6台电脑,一共是18个微信,然后头像用的是电影《舌蛇》里面的女主角的生活照,签名写的“暑假好无聊吖,QQ123123,只交朋友不谈感情,非诚勿扰”然后他又在淘宝还是什么地方买了一个用按键精灵写的脚本,拼命的摇一摇,他说1个小时就有1万多条验证消息,当时都不敢点开,一点开QQ马上掉线。

他说这么做转化率太低了,那么多人,用手机注册网站的每天就几十元收入,他要想个办法,于是乎他把QQ签名改成了他淘宝店的网址,把流量引入淘宝店,但是至于卖什么商品他说一定要满足大众需求的,因为加我的人大多数是想入非非的色狼,于是乎他又找到了另一个网赚的方法。

卖电子书

想不到吧,他在网上下载了好几G的电子书,我昨天看他邮箱,神马《泡妞秘籍》《怎么把她哄上床》《床上功夫三百六十式》《伟哥配方》这些书太多了就不一一列举了大概都是这种书,其实没什么内容,书里面讲的凡是个成年人都懂,他把这些书上架淘宝店,通过摇一摇引到QQ上,通过QQ引到淘宝店上,其中伟哥配方卖399元,其他的卖110元。

  我问他“有人买吗?”他说“每天10几单”我问他为什么有人买?他说“淘宝上其他同类电子书最贵的才10几块钱,我感觉太便宜了没啥意思,就放110元,399元,没想到买的人还挺多,可能就是便宜没好货的心理吧”然后他最近准备把所有书价格都提到399元,销售思路大概就是一年不开糊、开糊吃一年那种思路。

他跟我喝酒时候聊的网赚还有很多,都是实战型比较好的,这里就不一一分享了,我这个同学现在已经对IT行业充满热情了,已经准备去北京学软件开发还是软件测试来的,其实我感觉这个人更适合营销方向的工作,因为没有IT从业经验我也没法给他介绍工作,经过这顿酒我着实对这位同学充满了敬佩,对互联网和软件一点不懂的人竟然把网赚弄的如此easy,其实网络营销、网赚本来就不是什么难得东西,只是有些时候被某青某绿的弄的神神秘秘、深奥无比。

文章来源:毕扬的博客

工信部召开整治虚假备案提高网站备案信息准确率行动会议

2012年8月20日,工业信息化部电信管理局召开“整治虚假备案提高网站备案信息准确率专项行动电视电话会议”,会议部署了下一阶段专项行动工作任务,提出了有关工作要求。

部电信管理局、国家计算机网络应急技术处理协调中心、中国互联网协会及三家基础电信企业的领导和代表参加了北京主会场的会议,各省、自治区、直辖市通信管理局、基础企业省分公司及相关单位在各地分会场参与了会议。

会议指出,此次专项行动的主要目标是集中整治虚假备案,提升网站备案信息准确性,为党的“十八大”做好网络信息安全保障,在互联网行业管理和网络信息管理 工作中发挥基础性作用。会议明确专项行动为期五个月、持续到年底,分为动员部署、自查自纠、监督检查和总结提高四个阶段推进和落实,包括核实清理虚假备 案、清理未备案接入行为、清理违规接入黑名单网站等二十余项工作任务。通过本次专项行动的开展,一方面进一步规范接入服务市场,净化网站备案环境;另一方 面倡导接入服务企业加强自律、依法经营,网站主办者提高守法意识,依法办网。

会议要求,各相关单位在时间紧、任务重、标准高的情况下,充分认识到本次专项行动的重要性、紧迫性,增强工作责任感、使命感,根据本方案内容,明确一把手 负责制,细化工作、责任到人,在部统一指导下,有计划、有重点的推进和落实各项工作任务,营造良好的互联网网络环境,迎接党的“十八大”胜利召开。

来源: 中国计算机安全

百度大规模反制360:双方趁夜上演攻防战

用户在360浏览器中使用360综合搜索时,点击来自百度相关服务,会被直接带至“网页快照”页面。

新浪科技讯 8月28日晚间消息,百度今晚悄然对360搜索业务展开反制,用户通过360综合搜索访问百度知道、百科、贴吧等服务时,将会强行跳转至百度首页。这也是360本月中旬发力搜索服务以来,百度首次展开相应的反制行动。

已经承平太久的互联网搜索行业,今晚悄然展开攻防暗战。交锋的双方则是行业老大百度,以及近日在搜索业务上风头正劲的360。

这场意料之中的较量,开始于今晚9时左右,百度选择这个时刻开始在小范围进行测试:用户通过360综合搜索访问百度知道、百科、贴吧等服务时,将会强行跳转至百度首页。不过在一段时间内,不同的浏览器下使用这一服务,百度处理的方式略有差异。

根据新浪科技得到的反馈,在Firefox、360浏览器以及IE中,百度均采取上述强行跳转的策略。而谷歌Chrome浏览器似乎并未受到影响。更进一步,是在360综合搜索中默认为百度的新闻、图片、MP3、地图等服务中,进行任何搜索都会跳转至百度首页。

360随后展开对攻,用户在360浏览器中使用360综合搜索时,点击来自百度相关服务的搜索结果,会被直接带至“网页快照”页面。根据新浪科技测试的一个关键词,相应的“网页快照”上清晰的提示,这个页面是360存储于傍晚六时。

双方的攻防的涉及面积越来越大,百度知道、百科、贴吧等分别占据百度整体流量超过10%以上的重要服务,都对来自360综合搜索的请求采取限制措施。

一个小时之后,360浏览器逐渐改变了提供百度网页快照的对策。

本月中旬,360悄然推出综合搜索业务。来自Hitwise的数据显示,在360浏览器、网址导航等产品的推动下,360综合搜索的流量份额快速攀升至10%左右;与此同时,360还在搜索结果中有意降低百度相关服务的权重,而此前百度仅有轻微回应。

至截稿时,百度今晚股价上涨近3%,而360股价下跌超过5%。而百度和360官方均未针对今晚的事件作出回应。(孟鸿)

Purported “iPhone 5” housing examined in hands-on video

By:  | Jun 7th, 2012 at 08:00AM

Apple iPhone 5 Case Video

A hands-on video of what is claimed to be the external housing for Apple’s next-generation iPhone has been published on YouTube. Cell phone parts retailer ETradeSupply managed to procure what it says is the unibody aluminum case Apple will use on what it refers to as the “iPhone 5,” which BGR expects to launch this fall. The iPhone casing appears identical to the housing that appeared in a number of leaked photos published by various websites last week. Visible in the video are a new, smaller port for a redesigned dock connector, a relocated headphone jack, new speaker grills and a taller design that will reportedly be home to a larger 4.08-inch display. The case appears to be significantly thinner than the housing found on the current iPhone 4S and iPhone 4, and the unit will supposedly make use of a new smaller SIM card. The full hands-on video can be seen below.

新形态的媒体力量

 来源: 极客公园从 Blogger 引发的自媒体浪潮,到 Twitter 为首的实时社交网络,互联网时代的到来,让新的媒体形态层出不穷。独立自媒体日渐流行、而传统媒体却似乎开始缓慢衰败。然而归根结底,媒体进化的目标依然是为了让信息能更有效、更迅速地传播到需要它的地方。社会化网络是否是媒体未来的必然方向?移动互联网、富媒体的进化会为未来的媒体带来什么?所谓的“新媒体”和传统媒体未来会有什么样的前景?

本期活动邀请到新媒体领域的优秀实践者们,与我们分享了他们在新形态媒体方面的尝试和思考。以下是嘉宾在现场的一些精彩观点:

安替 – 微博化时代的信息和权力

在 BBS 时代,信息地方分权、信息精英向上流动的特点,让其扮演了网络科举的作用,保持了一个社会的流动性。如果你是一个网络屌丝,但是你的确能写得一手好文章,在 BBS 年代,你很容易能进入中央级、南方媒体,或是北京的、上海的媒体,这个渠道是非常通畅的。这导致了中国的媒体社会、互联网社会是高度重合的,没有出现网络社会、媒体社会的区分。在中国,好的媒体记者都是网友、都是微博用户。

微博时代,我们有 3.5 亿网民,但四大微博服务器全部在北京,地方政府干涉微博内容,必须通过北京/中央监管部门、中央级PR公司、微博公司。微博时代是信息管理中央集权、信息权威高度中央化的时代。大 V 、新浪、中央政府之间是恩宠式的侍从关系,大 V 和微博的繁荣是对中央政府有利的。但微博对地方政府是个噩耗,因为他没有任何的方法救济自己,所以微博推动社会进步在地方政府这一级非常非常明显,他被迫透明化。

微博审查导致网民在信息多元情况下缺乏行动能力,更加愤怒犬儒:你每天得到的东西越来越多,看到的丑闻越来越多,你越来越愤怒,但是你不能行动,所以你会越来越犬儒。这导致社会进入一个中央可控的高度不稳定,微博时代成为一个中央级的媒体的时代。

方三文 – 从 i 美股到雪球

传统的媒体特点包括:第一、提供给用户的主要是信息的获取;第二、信息是由职业人生产的;第三、大家获取的信息是共性的。如果有一天这个东西发生了变化:一、内容的生产者变了,由职业的人生产内容变成了像在座的每一个人一样,用户生产内容;二、用户获取内容的方式变了,每个人看到自己的页面是不一样的;三、用户最主要的体验除了获取信息之外,还在跟其他用户互动,在生产内容;那么这个东西还是媒体吗?

“用户生产内容”(UGC)对传统的媒体的生产方式和链条是一个非常大的颠覆。UGC 的价值是非常动态的,一方面 UGC 内容的价值是高度个性化的,很可能这个内容对你很有用,但对他是垃圾;第二、UGC 的价值是变化的,用户最开始发的一个分享内容价值也许不是那么高,但通过其他用户参与讨论、不停的补充信息,这个东西变得非常有价值;第三、UGC 是碎片化的,作为一个网站,对这些信息内容要有积极重构利用的能力,才能从沙里面淘出金子来。

在微博、推特上生产的内容会像流水一样流走。但是对我们来说,雪球的用户生产了很多碎片化的内容,我们现在正在去重组这些内容,将其变成结构化、更有价值的东西。比如说你打开新东方的页面,关于其 VIE 的内容全部结构化在那里,用户可以基于这些内容,做出对这个公司的判断。

黄龙中 – 爱范儿微观新媒体

社交平台在快方面有先天的优势,而新媒体与互联网媒体很大的一个区别是,他天生就是与社交媒体绑定在一起的,我们认为其应该是一个独立的媒体。新媒体行业的从业人员会天生就对这个平台保持高度的关注,敏锐度非常高,他们会觉得,快的东西,是可以在这样一个社交平台上来发布的。

晚上 9—11 点应该算是传统媒体的一个低谷,实际上他们在排版,准备第二天报纸。但对互联网媒体来说,这应该算他的流量高峰期,因为很多人在一对多的看新闻,新媒体、或者说移动媒体、社交媒体上的东西出来之后,这个点应该算是一个互动的高峰期,只要你有好的话题。

微信是一个超级入口,想象一下如果你的手机直接开机直接进入微信的话,你有多少事情在里面是不能直接完成的?现在大概有 30%不可以,我们认为这个比例应该会越来越小。微信的用户是时刻在线的,媒体信息可以实时的到达一个真正在线的人,这是一个革命性的东西。

薛蛮子 – 新形态的媒体力量

只要你有过人之能,不在于你的背景,只要你在某个行业、某个专业有所长,能写出好文章,在微博上自然就会得到足够的关注。

在微博上看到的都是信息,很多都不是知识,更没有分析。因此时间一长,在深度阅读上、在成体系的内容上会存在问题。

媒体可能是一种组织形态,确保有一群人能相对持续稳定的生产质量相对不错的内容。单凭个人、自媒体可能会有一个问题:很容易干掉。

今后社交化的商业、社交化的广告都会有巨大的改变,手机带来的影响可能是最大的。手机对广告业有巨大的冲击作用,而手机对支付带来的便捷也是不可小觑的。我个人认为,移动互联网大潮最收益的就是电子商务。

对于新的媒体形态来说,不要一想就变成是看天下似的,其实在很多细分的领域,在你的圈子里,你会有机会。细分领域实际上是最被忽视的,是最可以深挖的东西,把一个事做到极致就很好了。

所有的媒体,包括微博也好,都有一个相当的纠错的作用。绝大多数老百姓是有他们的常识的,微博因此具有一定的自洁机制,当一个信息充分传播的时候,谣言、错误就会很容易被抛出来了。(文:极客公园

福建境内访问百度搜索出现Google香港页面

来源: 站长之家

站长之家8月23日晚间消息,23日晚多位网友微博称访问百度搜索时自动跳转至Google香港地址,网友惊呼“七夕夜,百度与Google终于在一起了”。

据站长之家了解,自23日晚19时30分左右起,有福建厦门地区的网友在访问百度搜索引擎时发现,原本应该出现百度首页的页面却出现了Google香港的内容。

微博上多名福建省电信用户发博称访问百度跳转至Google香港(站长之家配图)

随后,这一现象被福建省内的泉州、福州、龙岩等多个电信用户发现,并第一时间通过微博发布,有部分网友则在访问百度时出现了Google的404错误页。

根据观察,大部分网站使用的DNS地址多为福建电信DNS,218.85.152.99与218.85.157.99,网友戏称,打开百度变谷歌,牛郎织女共七夕。

网友提供的访问百度跳转至Google错误提示页截图

除福建境内的多数电信用户访问百度会出现Google香港网页以外,经站长之家记者测试与调查发现,其他地区用户暂无此现象,截至23日晚9时10分左右,福建用户访问百度均恢复正常。

目前尚不确定福建电信DNS是否遭劫持。

相约七夕 为爱点灯

哈佛开发DNA硬盘:1立方毫米存储704TB数据

来源: 新浪科技

新浪科技讯 北京时间8月21日早间消息,早期的研究已经可以把DNA做成电路或小工厂,但从没见过将DNA当做存储介质的。哈佛大学的研究人员却将这一梦想变成了现实。

这个由乔治·切齐(George Church)、瑟里拉姆·库苏里(Sriram Kosuri)和高原(Yuan Gao,音译)领导的团队可以将96比特数据存储到DNA链中。具体方法则是为腺嘌呤、鸟嘌呤、胞嘧啶和胸腺嘧啶分别赋予二进制值,随后通过微流体芯片对基因序列进行合成,从而使该序列的位置与相关数据集相匹配。

这项技术表面看起来似乎没有什么了不起,但用微观物质存储宏观数据却会达到意想不到的效果:1立方毫米即可存储704TB的数据,相当于数百个硬盘的容量。虽然这一成果令人振奋,但流程还很缓慢,因此不能存储对时效性要求较高的数据。另外,DNA中的细胞可能会破坏DNA链,所以不适合数据传输。

但无论如何,如此大的数据密度还是有望备份全人类的知识。不过,多数人的想法可能更加实际——什么时候能用可以承受的价格买到一块有机硬盘?(书聿)

CEO做什么其实是在传达一个信号

 来源: 36氪

站长之家Chinaz.com 配图

编者按:我们很荣幸请到百姓网创始人、CEO王建硕作为36氪的特约作者,王建硕写了十年博客,他的很多文章对创业者非常有启发,以后大家将可以在36氪上看到他的文章。这是他的博客,这里是他的新浪微博。今天晚上在大学街的意大利煎饼果子铺,我们几个人在聊Facebook的高管在做什么。几个细节引起了我的注意。CEO Zuck每年还是要Checkin一行代码的(显然这是一个象征性的动作),COO Sandberg每天都自己盯着解决几个用户的问题。这个小动作其实大有值得借鉴的地方。每个人做任何事情其实都有至少两部分的力量:一部分,我做完了这件事情;第二部分,我向其他人发送了一个信号,说明了些什么。在自己一个人干活的时候,前者或许更重要,而当一个领导者,后者的比重越来越大,甚至变成最重要的部分。

如果CEO在写代码,哪怕只是一行,这明确的传达了一个信号。显然一家公司不会因为一个人写的一行代码有实质性的变化,但这个信号是如此明确,就是技术对于这个公司是重要的。这种态度是组织需要的。

COO把头埋下来,每天哪怕只解决一个问题,这也是一个信号。显然在上万的问题中一个是如此渺小以至于不会有任何实质影响,但这个明确的信号是,我在乎用户。这个信号会被组织放大,变成整个组织的行为。

为什么这个信号如此重要呢?

第一个原因应该就是“认可”。人都需要被认可,自己写的代码,自己帮用户解决的问题,或者自己和用户的一个电话,内心里都希望有人可以认可。当公司里有人,尤其是CEO,愿意花时间去看一段代码,或者看一个问题,或者听一段电话,其实最重要的信号就是,这个工作很重要。没有人愿意感觉到自己的工作对于公司的成功没有贡献。这种认可可以通过一个小小的行动达到。上次和康俊会所的一个按摩师聊天,他说他们的最高奖励就是他们大老板会给获奖者亲自按脚一个小时。这是一个按脚出身的淳朴的CEO对这份工作的认可,其他人都能感知道。这也就是为什么很多做得很成功的企业都是创始人就是这个行业里出来的原因。一个蛋糕师虽然不比MBA更懂管理,但他开的面包店更懂得做面包的自豪感。

第二个原因是“抽样“。一旦CEO开始听电话,审核用户问题解决的纪录,或者看或写代码,这方面的工作就会暴露在CEO的眼下。这其实是一种敦促。虽然谁都知道自己做的部分被看到的可能性其实不大,但只要CEO在做这件事情,又有谁能确定自己的工作不被“抽到”呢?不做这件事情,可能性是零;做了,可能性就有了。人是感性动物,不区分可能性的大小的,而仅仅区分有或者没有这种可能性。这可能就解释了为什么没有人会去买不可能中奖的彩票却对哪怕可能性再小的彩票感兴趣,或者解释了为什么一个几千万人的城市里哪怕一起凶杀案会让所有人不安。一旦有了这种可能性,大家个工作状态的确会有改变。

在领导团队的时候,领导者可以用上百种细微的方式在散发着各种信号。这些细小的信号组成了一个团队只可意会不可言传的气质。传达什么信号,其实就是由这一件件小事情完成的。

文章来源:36氪

谷歌推出人体浏览器展示3D人体模型(图)

作者:书聿 | 出处:新浪科技

谷歌人体浏览器其实相当于一款针对人体推出的谷歌地球(Google Earth),可以对人体模型进行3D浏览。WebGL尚未进入主流浏览器,但是谷歌Chrome测试版、Safari和火狐都支持该技术。

谷歌人体浏览器

谷歌人体浏览器

  北京时间12月17日上午消息,谷歌刚刚推出了一款名为谷歌人体浏览器(Google Body Brower)实验项目,可以浏览3D人体模型。

谷歌人体浏览器其实相当于一款针对人体推出的谷歌地球(Google Earth),可以对人体模型进行3D浏览。

谷歌在WebGL Camp环境中展示了这款应用。WebGL是一种跨平台的低级3D图形API(应用编程接口),无需任何插件,即可将3D图形引入万维网。由于使用了HTML5 Canvas元素,因此不需要借助Flash、Java或其他图形插件来运行。

如果使用支持该技术的浏览器访问bodybrowser.googlelabs.com,便可以获得一个人体解剖学3D模型,还可以放大、缩小、旋转甚至搜索。

WebGL尚未进入主流浏览器,但是谷歌Chrome测试版、Safari和火狐都支持该技术。

使用兼容浏览器访问人体浏览器的主页时,便会看到一个人体模型,可以对皮肤、肌肉、组织和骨骼系统等多个视图层进行调节。当用户输入一个器官或骨骼名称时,还可以直接切换到对应的视图,并进行放大处理。用户可以自行启动或关闭标签,而且该应用还支持多点触控,因此可以通过多点触控板和多点触控鼠标进行操作。

业内人士认为,该应用不仅对于医疗行业有所帮助,相关学科的老师和学生也可以从中受益。(书聿)

Jquery瀑布流插件

瀑布流布局在目前貌似很火爆,具体的分析、原理、用到的知识等等可以看看以下几位牛人写的东西。

瀑布流布局浅析

浅谈个人在瀑布流网页的实现中遇到的问题和解决方法

折腾:瀑布流布局(基于多栏列表流体布局实现)

javascript 瀑布流各大瀑布流简析与建议

因为自己用jquery比较多,便萌生了把瀑布流做成插件的想法,图片就借用迅雷UED上的那些美图吧。

先看看Demo

把代码放出来吧

;(function($){
   var
   //参数
   setting={
      column_width:204,//列宽
       column_className:'waterfall_column',//列的类名
       column_space:10,//列间距
       cell_selector:'.cell',//要排列的砖块的选择器,限定在瀑布流的容器内
       img_selector:'img',//要加载的图片的选择器
       auto_imgHeight:true,//是否需要自动计算图片的高度
       fadein:true,//是否渐显载入
       fadein_speed:600,//渐显速率,单位毫秒
       insert_type:1, //砖块插入方式,1为插入最短那列,2为按序轮流插入
       getResource:function(index){ }  //获取动态资源函数,必须返回一个砖块元素集合,传入参数为加载的次数
   },
   //
   waterfall=$.waterfall={},
   $container=null;//容器
   waterfall.load_index=0, //加载次数
   $.fn.extend({
       waterfall:function(opt){
          opt=opt||{}; 
              setting=$.extend(setting,opt);
          $container=waterfall.$container=$(this);
          waterfall.$columns=creatColumn();
          render($(this).find(setting.cell_selector).detach(),false); //重排已存在元素时强制不渐显
          waterfall._scrollTimer2=null;
          $(window).bind('scroll',function(){
             clearTimeout(waterfall._scrollTimer2);
             waterfall._scrollTimer2=setTimeout(onScroll,300);
          });
          waterfall._scrollTimer3=null;
          $(window).bind('resize',function(){
             clearTimeout(waterfall._scrollTimer3);
             waterfall._scrollTimer3=setTimeout(onResize,300);
          });
       }
   });
   function creatColumn(){//创建列
           waterfall.column_num=calculateColumns();//列数
      //循环创建列
      var html='';
      for(var i=0;i<waterfall.column_num;i++){
         html+='<divjs plain" style="border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-bottom-right-radius: 0px !important; border-bottom-left-radius: 0px !important; background-image: none !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: initial !important; border-top-width: 0px !important; border-right-width: 0px !important; border-bottom-width: 0px !important; border-left-width: 0px !important; border-style: initial !important; border-color: initial !important; border-image: initial !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 2em !important; margin-top: 0px !important; margin-right: 0px !important; margin-bottom: 0px !important; margin-left: 0px !important; outline-width: 0px !important; outline-style: initial !important; outline-color: initial !important; overflow-x: visible !important; overflow-y: visible !important; padding-top: 0px !important; padding-right: 0px !important; padding-bottom: 0px !important; padding-left: 0px !important; position: static !important; right: auto !important; text-align: left !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; font-family: 'Courier New', Consolas, 'Bitstream Vera Sans Mono', Courier, monospace !important; font-weight: normal !important; font-style: normal !important; font-size: 12px !important; min-height: inherit !important; white-space: pre-wrap; color: rgb(0, 0, 0) !important; background-position: initial initial !important; background-repeat: initial initial !important; ">+setting.column_className+'" style="width:'+setting.column_width+'px; display:inline-block; *display:inline;zoom:1; margin-left:'+setting.column_space/2+'px;margin-right:'+setting.column_space/2+'px; vertical-align:top; overflow:hidden"></div>';
      }
      $container.prepend(html);//插入列
      return $('.'+setting.column_className,$container);//列集合
   }
   function calculateColumns(){//计算需要的列数
           var num=Math.floor(($container.innerWidth())/(setting.column_width+setting.column_space));
      if(num<1){ num=1; } //保证至少有一列
      return num;
   }
   function render(elements,fadein){//渲染元素
      if(!$(elements).length) return;//没有元素
      var $columns = waterfall.$columns;
      $(elements).each(function(i){                                    
          if(!setting.auto_imgHeight||setting.insert_type==2){//如果给出了图片高度,或者是按顺序插入,则不必等图片加载完就能计算列的高度了
             if(setting.insert_type==1){
                insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
             }else if(setting.insert_type==2){
                insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素  
             }
             return true;//continue
          }                    
          if($(this)[0].nodeName.toLowerCase()=='img'||$(this).find(setting.img_selector).length>0){//本身是图片或含有图片
              var image=new Image;
              var src=$(this)[0].nodeName.toLowerCase()=='img'?$(this).attr('src'):$(this).find(setting.img_selector).attr('src');
              image.onload=function(){//图片加载后才能自动计算出尺寸
                  image.onreadystatechange=null;
                  if(setting.insert_type==1){
                     insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
                  }else if(setting.insert_type==2){
                     insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素 
                  }
                  image=null;
              }
              image.onreadystatechange=function(){//处理IE等浏览器的缓存问题:图片缓存后不会再触发onload事件
                  if(image.readyState == "complete"){
                     image.onload=null;
                     if(setting.insert_type==1){
                        insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
                     }else if(setting.insert_type==2){
                        insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素  
                     }
                     image=null;
                  }
              }
              image.src=src;
          }else{//不用考虑图片加载
              if(setting.insert_type==1){
                 insert($(elements).eq(i),setting.fadein&&fadein);//插入元素
              }else if(setting.insert_type==2){
                 insert2($(elements).eq(i),i,setting.fadein&&fadein);//插入元素 
              }
          }                    
      });
   }
   function public_render(elem){//异步数据渲染接口函数      
       render(elem,true);
   }
   function insert($element,fadein){//把元素插入最短列
      if(fadein){//渐显
         $element.css('opacity',0).appendTo(waterfall.$columns.eq(calculateLowest())).fadeTo(setting.fadein_speed,1);
      }else{//不渐显
         $element.appendTo(waterfall.$columns.eq(calculateLowest()));
      }
   }
   function insert2($element,i,fadein){//按序轮流插入元素
      if(fadein){//渐显
         $element.css('opacity',0).appendTo(waterfall.$columns.eq(i%waterfall.column_num)).fadeTo(setting.fadein_speed,1);
      }else{//不渐显
         $element.appendTo(waterfall.$columns.eq(i%waterfall.column_num));
      }
   }
   function calculateLowest(){//计算最短的那列的索引
      var min=waterfall.$columns.eq(0).outerHeight(),min_key=0;
      waterfall.$columns.each(function(i){                        
         if($(this).outerHeight()<min){
            min=$(this).outerHeight();
            min_key=i;
         }                            
      });
      return min_key;
   }
   function getElements(){//获取资源
      $.waterfall.load_index++;
      return setting.getResource($.waterfall.load_index,public_render);
   }
   waterfall._scrollTimer=null;//延迟滚动加载计时器
   function onScroll(){//滚动加载
      clearTimeout(waterfall._scrollTimer);
      waterfall._scrollTimer=setTimeout(function(){
          var $lowest_column=waterfall.$columns.eq(calculateLowest());//最短列
          var bottom=$lowest_column.offset().top+$lowest_column.outerHeight();//最短列底部距离浏览器窗口顶部的距离
          var scrollTop=document.documentElement.scrollTop||document.body.scrollTop||0;//滚动条距离
          var windowHeight=document.documentElement.clientHeight||document.body.clientHeight||0;//窗口高度
          if(scrollTop>=bottom-windowHeight){
             render(getElements(),true);
          }
      },100);
   }
   function onResize(){//窗口缩放时重新排列
      if(calculateColumns()==waterfall.column_num) return; //列数未改变,不需要重排
      var $cells=waterfall.$container.find(setting.cell_selector);
      waterfall.$columns.remove();
      waterfall.$columns=creatColumn();
      render($cells,false); //重排已有元素时强制不渐显
   }
})(jQuery);

貌似把代码贴进来格式有点乱了,哎先不管了。上面的代码要是看不清可以在demo页直接查看源文件。

插件使用方法:

1
$(selector).waterfall(opt); //其中selector为瀑布流容器的选择器,opt为配置参数对象

所需的html结构:html结构可以就是一个空容器元素,如<div id=”container”></div>,里面的砖块元素通过动态加载进来。当然也可以预先放一些砖块进去,如demo页中的

<div id="container">
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_000.jpg" /><p>00</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_001.jpg" /><p>01</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_002.jpg" /><p>02</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_003.jpg" /><p>03</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_004.jpg" /><p>04</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_005.jpg" /><p>05</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_006.jpg" /><p>06</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_007.jpg" /><p>07</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_008.jpg" /><p>08</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_009.jpg" /><p>09</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_010.jpg" /><p>10</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_011.jpg" /><p>11</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_012.jpg" /><p>12</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_013.jpg" /><p>13</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_014.jpg" /><p>14</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_015.jpg" /><p>15</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_016.jpg" /><p>16</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_017.jpg" /><p>17</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_018.jpg" /><p>18</p></div>
    <div class="cell"><img src="http://cued.xunlei.com/demos/publ/img/P_019.jpg" /><p>19</p></div>
</div>

下面详细说下配置参数对象opt的各属性的作用及其默认值。

column_width:204  //瀑布流是由列组成的,该参数规定了每列的宽度,该参数会直接影响到瀑布流的列数

column_className:’waterfall_column’   //列的类名,便于自定义样式

column_space:10    //列与列之间的间距

cell_selector:’.cell’   //要排列的砖块的选择器,限定在瀑布流的容器内,即插件是通过这个选择器来获取砖块元素的,并且是在瀑布流的容器内来查找这个选择器匹配的元素。

img_selector:’img’  //要加载的图片的选择器。如果你的瀑布流要加载的砖块元素的主题内容是大小不固定的图片,则该参数就是这些图片的选择器,插件需要获取这些图片来进行计算。

auto_imgHeight:true  //是否需要自动计算图片的高度,如果图片的大小是固定的,则把该参数设为false吧

fadein:true  //是否渐显载入

fadein_speed:600  //渐显速率,单位毫秒

insert_type:1  //砖块插入方式,1为插入最短那列,2为按序轮流插入

getResource:function(index,render){ } //获取动态资源函数,必须返回一个砖块元素集合,传入的第一个参数index为已加载的次数,第二个参数为渲染函数,它可以接受一个砖头元素集合作为参数,如果是使用ajax加载数据,则得到数据后要手动调用该函数来进行渲染 。每次到达瀑布流底部时会自动触发该函数来加载更多资源。

 

吐槽时间:

瀑布流加载的内容一般都宽度相同,高度不同的图片,如果能预先知道图片的高度,那就简单多了,但如果不能,则必须等到图片加载后才能计算出图片的高度,这是瀑布流最烦人的地方,也正是因为这样,如果是那些不知道高度的图片,则插入的顺序可能会有些混乱,而且每次刷新顺序都不同,因为每张图片加载完成的先后顺序并不是固定的,也许这次这个快一点,下次那个快一点。所以如果图片高度事先不知道,则整个砖块的高度也会不知道,必须等砖块里的图片加载完成后才能算出砖块的高度。如果是这样但又想保证砖块的插入顺序,则建议使用按顺序轮流插入的方式插入砖块,即把insert_type参数设为2。因为是插件,所以要考虑使用简便,但使用起来越简便,插件内部就会越复杂,漏洞、bug也会增多,所以我会继续完善这个插件。

本插件支持IE6+、chrome、firefox、opera、safari等主流浏览器。

来源:http://www.cnblogs.com/2050/archive/2012/05/03/2480702.html

你必须非常努力,才能看起来毫不费力

心理悦读:

有一群人,他们积极自律,每天按计划行事,有条不紊;他们不张扬,把自己当成最卑微的小草,等待着人生开出花朵的那天。

他们早晨5点多起来健身,你在睡觉;7点开始享受丰盛的早餐,蛋白质维生素淀粉粗纤维样样俱全,为新的一天起了一个好头,当他们收拾妥当准备开始一整天的工作时,你还在睡觉;

他们用上午的高效时间完成了一个又一个任务,甚至发现的新的商机,发现了有可能给人生带来改观的机遇,当午餐时间临近,他们伸了伸腰,准备稍作休息,此时你终于起床。

他们的午餐不铺张浪费,却营养全面,他们有选择的进食,因为清楚的知道自己想要的是什么,而你也在起床之后但觉到了饿意,你早早的洗了把脸,甚至连牙都没刷,打开冰箱,拿出了昨晚跟朋友high过之后带回来的薯条以及可乐;

午睡之后,他们重新积极的投入工作,而你也终于吃饱喝足,坐在了电脑前。是的,你的一天开始了。

晚上回到家里,他们也打开了电脑,也许是为了完成白天没来得及做完的工作,也许是因为前两天刚报了一个网络课堂,此时你还沉浸在dota中,你发的贴子还不够有人气,你发现空老师又更新微薄了,电视剧里男女猪脚还没有最后在一起,作恶多端的女二号还没有得到应有的报应。

终 于,22点到了,他们停下了工作,或许去满满的书架上拿下了一本书,或许拿起了自己心爱的乐器打算练练手,或许已经上床睡觉。当然,睡之前他们会想一想, 自己在这一天都做了什么,有什么收获,又有什么教训。最后,他们又重新提醒了一下自己那个埋在内心深处的梦想,然后满意的睡去了。

此时的你还在等待升级,还在顶贴子,还在刷微薄,还在为了男一号女一号哭哭啼啼,你的一天才刚刚开始精彩。后半夜,你隐约感到了困意,依依不舍的关掉了电脑,身上已经很臭,你却懒得去洗一个澡。你走向了乱糟糟的床,钻进了肮脏的被窝,掏出了手机——是的,爪机党伤不起。

你隐约知道自己的身边有那么一群“他们”,可是你却没有办法实实在在的感受到他们的存在。直到有一天,你和“他/她”终于浪漫的相见了——

他 /她是老总,你是普通的打工仔;他/她是主任,你是弱爆了的小职员;他/她游历各国,念着你想念的大学,拍着你想拍的照片,过着你想过的生活,他/她各种 恣意的小清新,而你,是的,我知道你恨小清新,可是这又有什么关系?事实已经如此,你就是那个电脑荧光照射下的SB。

如果你再不改变的话 !

robots妙用,开启伪静态后禁止搜索引擎抓取动态页面

我的应用:

由于在正式环境中有个测试环境(主要是为了update更新准确性,减低直接部署到正式环境BUG风险)

在网站根目录下

测试环境:

echo -e “User-agent: *\nDisallow: /” >/data0/app/apache2-test/htdocs/lbs/robots.txt

正式环境:

echo -e “User-agent: *\nDisallow: /api/\nDisallow: /trd\\nDisallow: /test/\nAllow: /”>/data0/app/apache2/htdocs/lbs/robots.txt

robots妙用,开启伪静态后禁止搜索引擎抓取动态页面!

说之前还是先分析下静态、伪静态、动态的不同点

动态、静态、伪静态

静态网址:纯静态HTML文档,能使用filetype:htm 查询到的网页。

伪静态网址:使用 Rewrite 将动态网址进行重写,使动态网址看起来像静态网址。

现在很多的后台,充分考虑到SEO,支持URL的重写,链接中带关键词,且链接清晰明了。

动态网址:内容存于数据库中,根据要求显示内容,URL中以 ? # & 显示不同的参数,如:news.php?lang=cn&class=1&id=2。动态网址的会话标识(sid)和查询(query)参数,容易造成大量相同页面,有时蜘蛛进入了会进入死循环,出不来。所以到现在为止,蜘蛛还是不太喜欢动态的。

robots指令

在开启伪静态后,打开网址是显示的静态页面,google这样的搜索引擎,在抓取你网站的页面时,同样会抓取网站的静态页面和动态页面,这样会造成抓取大量内容重复的页面(我的网站就存在重复抓取,网址是http://www.hyledlighting.com)。

现在,我们可以只接在robots.txt文件里写入规则,禁止搜索引擎来抓取动态页面,动态页面都有一个共同的特征,就是在链接里会带有“?”这个问号的符号,具体的robots指令规则看下面:

User-agent: *
Disallow: /*?*

如果想只接接指定搜索引擎抓取指定类型文件,如html格式的静态页面,其规则看下面:

User-agent: *
Allow: .html$
Disallow: /

如果要禁止搜索引擎抓取你网站的所有页面,可以写入以下规则:

User-agent: *
Disallow: /

对于robots.txt文件的路径,应该在你网站的根目录中,写入规则有一个简便的捷径,登陆google网站管理员工具,只接在里面写入规则后,生成robots.txt文件即可。

以上主要是针对伪静态网站禁止抓取动态页面,robots.txt文件中的配置规则很多,具体可以查阅相关资料。