2014-忙碌的一年

2014年的总结已经在电脑里放了一个多月了,一直没放出来,细数下来,从2012年到现在,这是第三次写一年总结。匆匆忙忙的一年,2014年注定着这是一个非常繁忙的一年。首先码一些这一年的流水。 2013年11月,在做了去年的总计《2013》后,去了趟成都,散散心,五天时间匆匆而过,有时间,还是应该导出走走的。

两个程序员的故事

从前,有两家互不知晓的公司,一家叫做“自动会计应用协会”,另外一家叫做“统一计算资本公司”。他们同时决定开发一种提供相同功能的程序。 “自动”雇佣了一位分析程序员,艾伦,来解决这个问题。 而“统一”决定试一下新来的初级程序员查尔斯,看看他是否有真本事。

为什么说2015年将是微服务架构元年?

编者按:微服务架构(MSA)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

造成IT项目失败的五个原因

1. 技术与商业需求相悖 酷炫前沿技术不一定就是最适合,虽然新技术看上去很美。但是时刻紧记的一点应是如何以最小的代价获取最大的商业收益。因此,要先想明白“为什么”和“是什么”,然后才是“如何做”。 2. 急于求成 在明确项目范围前,人们往往会更倾向于尝试先做。这份自信或许来自过去成功的经验和认为技术能够摆平任何困难。这不但是个代价高昂的举措,而且会影响需求分析和造成80/20问题的出现(当80%的需求满足时,20%“有就更好”的需求往往会成为决定成败与否的关键因素)。

大型网站架构改进历程:存储的瓶颈(五)

摘要:什么是大型网站,从网站的技术角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123网站就是了。 【编者按】本文转自博客园的 夏天的森林,在看这篇之前,大家可以移步看 大型网站架构改进历程:存储的瓶颈(一)、(二)、(三)、(四)。 上文里我遗留了两个问题,一个问题是数据库做了水平拆分以后,如果我们对主键的设计采取一种均匀分布的策略,那么它对于被水平拆分出的表后续的查询操作将有何种影响,第二个问题就是水平拆分的扩容问题。这两个问题在深入下去,本系列就越来越技术化了,可能最终很多朋 […]

大型网站架构改进历程:存储的瓶颈(四)

摘要:什么是大型网站,从网站的技术角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123网站就是了。 【编者按】本文转自博客园的 夏天的森林,在看这篇之前,大家可以移步看 大型网站架构改进历程:存储的瓶颈(一)、(二)、(三)。 如果数据库需要进行水平拆分,这其实是一件很开心的事情,因为它代表公司的业务正在迅猛的增长,对于开发人员而言那就是有不尽的项目可以做,虽然会感觉很忙,但是人过的充实,心里也踏实。

大型网站架构改进历程:存储的瓶颈(三)

摘要:什么是大型网站,从网站的技术角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123网站就是了。 【编者按】本文转自博客园的 夏天的森林,在看这篇之前,大家可以移步看 大型网站架构改进历程:存储的瓶颈(一)、大型网站架构改进历程:存储的瓶颈(二)。 存储的瓶颈写到现在就要进入到深水区了,如果我们所做的网站已经到了做数据库垂直拆分和水平拆分的阶段,那么此时我们所面临的技术难度的挑战也会大大增强。

大型网站架构改进历程:存储的瓶颈(二)

【编者按】本文转自博客园的夏天的森林,在上一篇中,作者介绍了大型网站的定义、存储瓶颈及如何解决读写分离等问题。而本篇着重详解存储瓶颈及解决之道。大家一起来看下。 503错误 在上篇,我讲到某些网站在高并发下会报出503错误,503错误的含义是指网站服务端暂时无法提供服务,503还表达了网站服务端现在有问题,但是以后可能会提供正常的服务,对http协议熟悉的人都知道,5开头的响应码表达了服务端出现了问题,在我们开发测试时候最为常见的是500错误,500代表的含义是服务端程序出现了错误导致网站无法正常提供服务,500通常是服务端异常和错误所致,如果生产系统里发现了500错误,那么只能说明网站存在逻 […]

大型网站架构改进历程:存储的瓶颈(一)

摘要:什么是大型网站,从网站的技术角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标,如果按这些标准那么像hao123网站就是了。 前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出全部听到的知识,今天我换了个思路是回味这次培训,这个思路就是通过本人目前的经验和技术水平来思考下大型网站技术演进的过程。

如何保持积极的心态

创造你的生活应该是你能做的一件最有影响力的事情。你可以身处在某个情况下看到积极的一面,在同样情况下,你也可以选择去看消极的一面。通常情况下,你所意识到的正在发生的事情是透过你脑子中的想法体现出来的。 积极的想法能够创造出更多的可能。如果你想把关系搞得更好,在你的职业生涯中更加成功或者找到能带给你宁静和安逸的幸福,那么试着去注意你生活中的积极,正确的一面是一个不错的开始。 而另一方面,消极的想法只会让你觉得不满,沮丧和挫败感。你把它想的太糟糕,他就会变得太糟糕。学着去改变你消极的想法会让你沮丧的生活变得充满自信。

全网日志嗅探平台Splunk,也许我们也能把他应用于软件测试当中

面对企业内部海量的设备及软件应用,有太多太多的东西需要监控,这个时候您需要一个平台去帮助您监控一切。Splunk支持主流交换机,系统core dump日志等,当然如果您是自定义的应用或者业务日志,那么如何去解析各式各样的日志呢?别担心,强悍的正则表达式,当然也包括强悍的你。同时多少需要我们规范一下日志的格式。

盘点2014年科技界六大技术失败

谷歌眼镜 尽管我们每天都能从报纸上看到有科学家取得了一些突破,但其实,绝大多数技术都以失败告终,主要原因在于这些技术达不到应用规模,这就使它们缺少与人类生活的相关性,从而导致失败。技术失败的原因当然无法预测,否则,这项技术或许早就被扼杀在摇篮中。

selenium webdriver学习 21 – Selenium Grid深入学习

应网友要求写一个用Selenium Grid控制多系统多浏览器并行执行test case的例子。 因为我这里有两台机子,我打算这样演示: 一台机子启动一个作为主点节的hub 和 一个作为次节点的hub(系统windows 浏览器为ie) ip为:192.168.40.24 另一台机子启动两个次节点hub,一个次节点浏览器为firefox,另一个浏览器为chrome (系统为windows),ip为:192.168.40.67

selenium webdriver学习 19 – 我们的构建文件CrazyFunBuild (译)

WebDriver 是一个庞大的工程。如果我们试着把所有的东西都放在一个单独的构建文件里,它最终会变得难于管理。我们知道会这样。因为我们已经尝试过了。所以我们把单独的 Rakefile 分成一系列 build.desc 文件。它们描述构建的一部分。 让我们看一个 build.desc 文件。这是测试主要的 build.desc 部分:

selenium webdriver学习 18 – 构建webdriver

准备环境 对所有版本的webdriver: Java JDK 5或以上(如果没有安装从oracle的网站上下载) 源代码(如果没有,导出源代码,可参考:selenium webdriver学习(十七)) 另外,interntetExplorerDriver需要一些额外的组件并且只能构建在windows系统上。 Visual Studio 2010 Professional及以上 “msbuild”需要加入到PATH路径 构建基于Rake,一个著名的Ruby构建工具。我们提供你在构建此项目的所有gems,虽然这并不是推荐以这种方式来构建。绑定JRuby jar,通过“go […]

selenium webdriver学习 16 – 用selenium webdriver实现selenium RC中的类似的方法

最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法。目前封装了一个ActionDriverHelper类,来实现RC中Selenium.java和 DefaultSelenium.java中的方法。有一些方法还没有实现,写的方法大多没有经过测试,仅供参考。代码如下:

selenium webdriver学习 15 – 如何处理FirefoxProfile

这一节主要涉及 selenium webdriver处理Firefox profile的一些知识。 什么是Firefox profile 要了解Firefox profile请访问这里(http://support.mozilla.org/zh-CN/kb/%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6),它详细解绍了Firefox proflie。在Firefox里,如何管理Firefox profile 请访问这里(http://support.mozilla.org/zh-CN/kb/%E7%AE%A1%E7%90%86%E7 […]

selenium webdriver学习 13 – 如何利用Actions类模拟鼠标和键盘的操作

如何把一个元素拖放到另一个元素里面的时候,用到了一个Actions类。这一节主要分析一下这个Actions类。 这个actions类,主要定义了一些模拟用户的鼠标mouse,键盘keyboard操作。对于这些操作,使用perform()方法进行执行。 actions类可以完成单一的操作,也可以完成几个操作的组合。 单一的操作 单一的操作是指鼠标和键盘的一个操作。如鼠标左键按下、弹起或输入一个字符串等。 前面涉及到鼠标键盘操作的一些方法,都可以使用actions类中的方法实现,比如:click,sendkeys。

selenium webdriver学习 11 – 怎么等待页面元素加载完成

web的自动化测试中,我们经常会遇到这样一种情况:当我们的程序执行时需要页面某个元素,而此时这个元素还未加载完成,这时我们的程序就会报错。怎么办?等待。等待元素出现后再进行对这个元素的操作。 在selenium-webdriver中我们用两种方式进行等待:明确的等待和隐性的等待。 明确的等待 明确的等待是指在 代码进行下一步操作之前等待某一个条件的发生。最不好的情况是使用Thread.sleep()去设置一段确认的时间去等待。但为什么说最不好呢?因为一 个元素的加载时间有长有短,你在设置sleep的时间之前要自己把握长短,太短容易超时,太长浪费时间。selenium webdriver提供了一 […]

selenium webdriver学习 10 – 怎么把一个元素拖放到另一个元素里面

Q群里有时候会有人问,selenium webdriver怎么实现把一个元素拖放到另一个元素里面。这一节总一下元素的拖放。 下面这个页面是一个演示拖放元素的页面,你可以把左右页面中的条目拖放到右边的div框中。 http://koyoz.com/demo/html/drag-drop/drag-drop.html 现在来看看selenium webdriver是怎么实现drag and drop的吧。let‘s go!