荣荣&函函的宝宝的家
  • 亲爱的老板:程序员的10分钟就是3个小时

    2012-02-07

    国外程序员艾德·韦斯曼(Ed Weissman )从业32年。某天老板告诉他产品有个问题,10分钟可以修复问题,谁知结果一干就是3个小时。本文就是艾德记录下的过程。

     

    10:48

    老板:嗨,艾德,苏在底特律说,“产品历史屏幕”上经常出现错误的发票号码(Invoice Part Number)。你能帮我们搞定这个问题么?

    艾德: 我现在在忙其他事。你到我的任务队列中提交一个ticket吧。

    老板: 这事10分钟就够了。

    艾德: 你确信么?

    老板: 嗯,确定。我一会开个网络会议。苏会演示给你看,然后你有空的时候再仔细看看。

    艾德: 好的。

    老板: 嗯。去你的 Outlook 中查收(会议)邀请吧。 Read More »

    作者:Xueron | 分类目录:技术网摘 | 标签:
  • Dear Boss: For a programmer, 10 minutes = 3 hours

    2012-02-07

    Dear Boss: For a programmer, 10 minutes = 3 hours

    http://edweissman.com/dear-boss-for-a-programmer-10-minutes-3-hours

     

    10:48

    Boss: Hey Ed, Sue in Detroit says that sometimes, the wrong Invoice Part Number is showing up on the Product History Screen. Can you help us figure this out.

    Ed: I’m busy with something else at the moment. Put the ticket in my queue.

    Boss: This will only take 10 minutes.

    Ed: Are you sure about that?

    Boss: Yes. I’ll just set up a web conference. Sue can show you right away, then you can look into it when you have time.

    Ed: OK.

    Boss: Great. Check your Outlook for an invite.

    Read More »

    作者:Xueron | 分类目录:技术网摘 | 标签:
  • 呼叫转移设置

    2012-02-01

    鬼手机没发现有设置呼叫转移的地方,找到设置方法,记录哈子~
    1、无条件转移
    设置:*72 + 被转号码(区号+固号,手机前不加0) 接通键 。取消:*720接通键
    2、关机无应答(并存)转移
    设置:*92+ 被转号码(区号+固号,手机前不加0) 。取消:*920接通键
    3、遇忙转移
    设置: *9+ 被转号码(区号+固号,手机前不加0) 。取消: *900接通键
    4、呼叫等待
    开通:*74 接通键 。取消:*740 接通键

     

    作者:Xueron | 分类目录:技术随笔 | 标签:
  • 软件开发的“三重门”

    2012-01-31

    出处:http://coolshell.cn/articles/6526.html

    自从上次写了“程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了。而春节前有人问我,是做底层技术,还是做业务。这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章。

    前言

    这篇文章必然是通过我的个人经历来写的。所以,我先说说个人经历吧。我的经历基本分成三个阶段。

    第一阶段:我 刚毕业时在家乡的某银行工作,做些银行的业务系统,还搞些网络,电子邮件系统,OA什么的,因为大四的时候在老师的公司里实习,银行里的人际关系太复杂, 而且技术都包给了产商,所以在银行的每一天都觉得不能适应里面的工作环境。两年后离职,单位分的房也不要了,直接去了上海,在上海呆了两年,本来想做互联 网的,但是泡沫来了,最终去了一家做系统集成的国企公司还是继续做银行业务。这四年来,主要解决的都是一些业务上的问题,银行里的会计业务,OA业务,国 际业务,中间对公业务都非常地复杂,而且因为当时的软件开发相当的不规模,所以基本上是在一种比较混乱的状态下度过的,而银行方面又很强势,所以,这段时 间主要是做业务。所以,技术上主要是积累了如何使用那些技术。C+/Java, Windows编程,Unix编程,网络编程主要是这段时间学的,看了太多的书(我大学课程里没有C++和Java,也没有Windows/Unix和网 络编程,所以,只能拼命地看书和自学)。

    第二阶段:然后,我来了北京,到了一家做分布式计算系统的公 司,整天和一个高性能技术高可用性的企业级的集群式的软件产品打交道(这家公司去年被IBM收购了),在这家公司把Windows/Unix和网络编程有 了更深入的了解,对我长进比较大的是明白了怎么做一个性能高,可用性高的集群式的系统,天天和底层打交道,干了4年多。然后去了一家金融信息公司,这家金 融公司主要做全球的金融信息数据处理,而我主要还是做核心数据发布系统的性能调优的项目,金融数据的实时性要求的高,数据量非常地大,高可用性要求得高, 得想尽一切办法省网络带宽,增加系统性能,还要保持高的可用性,不当机,不丢包。又干了4年多,去的时候从国外接过来两个系统,其性能单机每秒可处理 120K message,我走的时候,我和团队把其优化到了每秒1.4M messages 的吞吐,另一个系统,从接手时的100k message/s优化到了500k message/s。这八年多的时候,全是在和这些高计算高性能的项目打交量,几乎没有什么业务,都是纯技术,积累到了很多和性能有关的高并发高计算系统 架构级的知识。

     

    第三阶段:两 年前来到了现在的做电子商务的互联网公司Amazon,还是在做一个数据处理量很大的业务系统,因为要干的是要把电子商务全球化的东西。但是,因为电子商 务的特殊性,必需要去兼顾业务的特点,而且在Amazon,耳读目染了很多有趣的业务难题,比如,库存计划,配送优化,等等。虽然很多东西还不明白,但发 现,用技术来解决业务难题真是太有意思了。

    我的这三个阶段,第一个阶段花了4年,第二个阶段花了8年,第三阶段刚刚开始2年不到,有时候我也去别的公司讲课,所以,我很有幸经历了中国软件开发的进化过程。我的经历就是中国软件行业进程的一个缩影,而我把这三个阶段称为——软件开发的三重门。它们分别是:

    • 业务功能
    • 业务性能
    • 业务智能

    之所以加上“业务”二字,是因为我以为计算机是一个工具,其用来解决实际问题,所以,什么都离不开业务,就算是性能优化也一样,通过之前那篇“12306.cn的性能优化”中的“业务分析”段落,我们可以知道业务的不同,系统的难度和解决方法就可以不同。所以,我们总是用技术在解决业务问题。业务的形态对软件的开发有决定性的作用

    下面让我具体描述一下。

    一重门:业务功能

    这 是软件开发的第一重门,也就是掌握可以实现业务功能的技术。通常分成三块:语言+系统+数据处理。在这个阶段,主要是能掌握各种技术,比如:开发用的各种 工具(如:IDE,XUnit,Debugger,等),各种代码库和框架(如:C++的STL,ACE,Boost,等,Java的 Spring,Hibernate等),各种系统知识(如:Windows API,Unix/Linux API,TCP/IP,Socket,多线程多进程间的同步、互斥,并发安全,还包括Web平台,移动平台,等等),还需要掌握数据处理的知识(如:数据 结构,基本算法,数据库设计,数据库引擎 ,SQL等)。

    这个阶段主要是把这些不同的技术组织成可以实现业务功能的解决方案。重点是能掌握和使用技术。很多流程和方法论的东西基本上就在这一重门里。这重门主要解决的是实现问题

    二重门:业务性能

    业务的功能搞定了以后,就是业务的性能问题了。搞定功能并不难,搞定性能是有点技术含量的事。有句话不是那么说的吗——每个人都可以搞一个网站出来,但不是每个人都能搞出能支持百万级访问量的网站。但是,我看到很多技术团队或是工程师脱离了业务,只单纯地搞性能,比如:单台服务器支持10万个TCP链接的并发,等等。这些东西虽然在技术上有点意思,但是没有业务的环境,也只能是自娱自乐了。

    我们可以看到一些企业开始注重这个问题了,性能问题也是最近被大家讨论得最多的问题,京东商场的性能问题,12306的性能问题,等等。

    当然,所谓性能不并单单指系统的吞吐力,还指系统运行时的总体性能,比如,系统安全性能,系统的Accessbility的性能,系统的扩展性性能,等等,就像是前些天中“Web开发中需要注意的问题”一文中谈到的那些事一样。这表明着你对系统的全面和深入的了解。

    在 这个阶段,需要对业务模型,数据流,业务流,系统架构,算法,和各种技术有深入的了解,要了解到本质上来。比如,在第一重门中,我们只需同要知 道,Java有同步关键字,在这一重门中,我们还要知道同步或互斥对性能的巨大伤害性,在第一重门中,我们只需要知道STL中的智能指针或是STL的用 法,这一重门中,我们还要知道智能指针中的refcnt的同步加锁对性能的损害,还需要知道STL中容器的size()方法在某些时候是性能很差的。在第 一重门中,我们需要知道hash表的效率,在这一重门中,我们还需要知道hash表的碰撞问题

    最重要的是,在这重门重点是软件的设计问题。你需要有足够多的经验能比较不同设计方案的优缺点,比如TCP和UDP,同步和异步,epoll和select,push和pull,水平扩展的各种方案…… 还记得本站的那篇“程序员的谎谬之言还是至理名言”,广度是你深度的副产品。所以,这重门是看你的技术视野有多深有多广。

    三重门:业务智能

    这 重门可能是最难的一重门了,如果你能进到这重门里,你应该是科学家级的程序员了。让你有智能的业务,这个事可能是顶级的技术难题了。第一和第二重门都不算 难,这重门是最难的。参看Amazon的个性化推荐系统,或是Google搜索引擎的结果个性化推荐等等(比如我输入“黑天鹅”关键字,你怎么知道我要找 的是动物,电影,还是本书?怎么让搜索出来的结果排名即公正又可个性?),你就知道,用技术来解决这种类似的问题难度可想而知,不然就不会出现如 Hadoop之类的技术了。

    我再举两个这重门里的业务方面的例子。

    • 一个例子是关于库存计划的,需要像天气预报一样 预测未来的销售量从而决定库存,所以,最简单的做法是,监测各个商品的销售统计,然后看一下最近的销售趋势,还要看一下往年的销售趋势(因为某些节假日会 是一个高峰期),还要分析一下大众的喜好变化,比如,在某影评网站上的某电影的热度其会告诉我哪个电影的DVD要滞销了,得打折卖,哪个电影的DVD要畅 销了,得多进货了。还可能需要监控新闻评论,比如某权威人士推荐了某个商品,那么我得赶快进货了。等等。这完全就是一门科学。
    • 还有一个例子是配送问题。我有一辆卡车要处理我仓库和配送站间的物流问题,我需要找到一条最经济的路线来在有限的时间内处理最多的物流。这个不是最短路径问题,这是个计划统筹学的东西。也是一门科学。

    还有近期“方韩之争”里有很多人来分析文章相似度的技术,这些东西都属于三重门里的东西。

    到了这重门里,可能技术反而不是重要的了,而是数学模型。这重门里主要是业务模型,数据模型和算法问题。这些东西和你的业务模型密切相关。能解决这样的问题,是真正的大牛。对于我来说,可能是高山仰止了。

    后记

    通过上面的说明,我们可以看到下面这些东西,

    • 一重门像是开垦荒地,二重门像是扩大生产,三重门像是精耕细作。
    • 一重门(业务实现)里聚集着大量的劳动密集型的企业,劳动密集型的企业通常都需要流程和方法论。敏捷过程改进这类的东西只在一重门里。
    • 二重门和三重门里只有少数不多的技术型的公司。这类的公司通常非常注重技术,并且是企业文化是工程师的文化。
    • 三重门里可以产生的创新和那些可以用来改变世界的技术。
    • 国内现在的情况是,一重门优化阶段 + 二重门的学习阶段。三重门里似乎还没有什么见术。不过,我看到一些公司已在尝试三重门的东西了。
    • 作为技术人员的你,如果你想跟上时代,让自己有价值的话,你至少要达到二重门。
    • 因 为国内的技术环境等不良因素,导致大量的程序员在一重门的时候就已经失去信心,或被大浪淘沙淘掉了,所以,二重门里的程序员比较少了,但是随着年轻的一代 和技术的日趋成熟,也会慢慢多起来的,我现在已经看到这个趋势了。而三重门里的程序员成了稀缺的大熊猫。因为大量的二重门程序员干到那个时候都转管理了。

    我的这些言论不一定对,但希望能让大家有启发,有所思考。

    :本来这篇文章的标题想取成“程序员要解决的三种问题”, 但是因为过年都在关注 “方韩之争”,所以,干脆取成了这个名字。你可以认为我比较调皮,也可以认为我爱ZB,还可以认为我标题党,反正,请随意理解。(这篇文章是我的自己写 的,没有代笔,因为你一定会在这篇文章中看到属于我的用五笔打出来的错别字,当然,我无法自证,哈哈)

    转载时请注明作者和出处,请勿用于商业用途

    作者:Xueron | 分类目录:技术网摘 | 标签:
  • 4G演进路线

    2012-01-30

    G网4G演进路线:GSM->GPRS->EDGE->WCDMA->UMTS->HSPA->HSPA+->LTE->LTE_ADVANCE

    GSM->GPRS->EDGE->TD_SCDMA->TD_HSPA->TD_LTE

    C网4G演进路线:CDMA->CDMA2000 1x->EVDO Rel.0->EVDO Rel.A->EVDO Rel.B->LTE

    作者:Xueron | 分类目录:技术网摘 | 标签:
  • Linux 做网关,下面的机器VPN连不上服务器的问题

    2011-11-18

    一直纠结这个问题,很是奇怪,今天才google到,原来gre协议的报文在穿透nat的时候有问题,需要加上特定的模块。
    在linux2.4以前的年代,需要为内核打上补丁,2.6年代的好像自带了相关功能:

    加载如下几个,每次重启都要搞,最好放到rc.local里面去咯 :)

    ip_gre
    ip_nat_pptp
    ip_conntrack_pptp

     

    作者:Xueron | 分类目录:技术 | 标签:
  • squid 代理服务器的安装配置

    2011-11-16

    在公司一直给大家用Apache的代理功能给大家代理上网,用mysql做口令认证服务。但是由于Apache同时还要服务好多系统其他应用,用作代理性能确实比较一般。所以我今天就尝试使用比较专业的代理服务器squid。

    一向比较喜欢从源码编译安装的,不过最近偷懒了,yum用的习惯了,直接yum安装了一个squid。

    yum install squid

    搞定之后,开始简单的配置。

    默认只允许localhost使用的,编辑 /etc/squid/squid.conf,做简单的修改就可以使用了:

    acl localnet  src 172.16.0.0/12  <-- 加上一个本地网络范围
    ......
    http_access allow localnet       <-- 允许本地网络使用
    http_access deny all
    ......
    visible_hostname dev.xueron.com  <-- 加上这个,不然没有配一个有用的主机名的话,启动会报错滴
    

    启动squid,

    /etc/init.d/squid start
    

    就可以在浏览器里面开始使用啦,默认端口是3128。

    我是计划使用squid的pam_auth模块,通过pam_mysql实现使用mysql进行认证的。首先安装一下pam_mysql,从sourceforge上下载pam_mysql源码,编译,安装:

    tar zxf pam_mysql-0.7RC1.tar.gz
    cd pam_mysql-0.7RC1
    ./configure --prefix=/usr --with-mysql=/usr/bin/mysql_config \
      --with-openssl --with-pam=/usr --with-cyrus-sasl=/usr \
      --with-pam-mods-dir=/lib/security
    make
    make install
    

    然后修改squid的pam配置 /etc/pam.d/squid:

    #%PAM-1.0
    #auth                   include         system-auth
    #account                include         system-auth
    auth    required pam_mysql.so user=root passwd=root db=zentao host=localhost table=zt_user usercolumn=account passwdcolumn=password crypt=3
    account required pam_mysql.so user=root passwd=root db=zentao host=localhost table=zt_user usercolumn=account passwdcolumn=password crypt=3
    

    具体参数的使用方法,可以参看pam_mysql源码包里面的README,这里crypt=3是指我的密码加密方式是md5的。

    OK,接着修改 squid.conf :

    # 认证相关配置
    auth_param basic program /usr/lib/squid/pam_auth -o
    auth_param basic children 10
    auth_param basic realm dev.jsptpd.com
    auth_param basic credentialsttl 2 hours
    
    ......
    
    acl password-pam proxy_auth REQUIRED   <-- 这里加一个认证用户的acl
    acl localnet  src 172.16.0.0/12
    
    ......
    
    http_access allow password-pam         <-- 仅通过认证的用户可以访问,其他都deny掉了
    #http_access allow localhost
    #http_access allow localhost
    #http_access allow localnet
    http_access deny all
    
    ......
    

    重启squid,再次使用浏览器,就会弹出认证框,提示输入用户名和密码了。

    作者:Xueron | 分类目录:技术 | 标签:
  • Xapian 和 Lucene

    2007-12-19

    Xapian 和 Lucene的对比,摘自[python-chinese]
    http://python.cn/pipermail/python-chinese/2007-January/034445.html

    谢谢 Robert 的指路. 很同意社区活跃度应该是比较大的分别, 一些周边的小工具, lucene看起来比较多, 短期开发的可以省不少事,
    两者核心效能可以想象不会差太远, 而且可能更多的是看自身的应用.

    On 1/10/07, Robert Chen <search.pythoner at gmail.com> wrote:
    >
    > 没用过Xapian,但据我所知,Xapian
    > 的历史要比Lucene悠久,而且在它背后有很多IR检索领域的专家,所以成熟度,稳定性应该不比Lucene差。
    >
    > 在功能方面,Xapian与Lucene应该不相上下,一般的索引建立,多种Query类型支持,Query解析,多文档格式支持都不在话下。
    >
    > 至于差别方面,可能最大的在于社区的活跃度,显然,Lucene的文档(中文文档)要比Xapian丰富一些,当然,这些不是太大的问题。
    > 另外一个显著的差别在于Lucene是基于向量空间模型的检索模型,而Xapian
    > 基于的是概率模型,当然这些模型的差别可能只是搞学术的需要关注的,实际应用中,检索结果差别应该不大。至于检索的效率,对于站内搜索而言,一般都可以胜任。
    >
    > 对于Python而言,Xapian通过SWIG可以支持Python,倒是Lucene的PyLucene,不知道其效率如何 :)
    >
    > 希望这些信息对你有帮助 :)
    >
    > On 1/9/07, ra do <rhapsodelico at gmail.com> wrote:
    > >
    > >  Re Liming_Do & 头太晕 : 用open source 的, 想尽量避免用旁枝的, 所以pylucene / Clucene
    > > 暂不考虑
    > >
    > > Re Zhang Yunfeng : 请问 MoinMoin 你是指哪个 project , 有url吗 ?
    > >
    > > 或者我应该转问,  有没有人比较过lucene 跟xapian ? 各自的利弊是什么
    > >
    > >  On 1/9/07, 头太晕 <torrycn at gmail.com> wrote:
    > >
    > > > pyLucene不是一样用吗?
    > > >
    > > > 2007/1/9, Zhang Yunfeng <zeroslug at 163.com>:
    > > > >
    > > > > “ra do” < rhapsodelico at gmail.com> writes:
    > > > >
    > > > > > 最近在弄一个站内搜索, 在 lucene 跟 xapian 中选, lucene 支持好像好点, 周边的小工具也多,
    > > > > 但本人不太想掺和 java 那摊事 ,
    > > > > > xapian 是c++ 的, 但不知是个否一成熟的project, scalability 跟稳定性不知如何.  正犹豫中,
    > > > > 所以想问问有用过 xapian
    > > > > > 作为网站搜索的后台的吗 ? 如果有用, 又是如何跟python 对接的 ?
    > > > >
    > > > > MoinMoin正在开发的新版本好像是使用xapian作搜索引擎

    作者:Xueron | 分类目录:技术 | 标签:
  • vi 里面的backspace

    2007-12-17

    同事问vi里面如何将backspace设置成删除。一直没有注意这个配置项。上次在debian里面用的vi也是不能用backspace删除的,只是没有去想怎么搞的。

    今天google了一下,原来有个兼容性的配置项可以解决这个问题:http://www.host01.com/onlinebook/os/lfs66.1/chapter06/vim.html

    6.23.2. 配置 Vim

    在默认情况下, vim 是以与 vi 兼容的模式运行,这可能对使用过其它文本编辑器的人来说感到陌生。有些人可能喜欢这种模式,但是我们强烈建议使用 vim 模式运行 vim。下面的配置文件明确的设置了 “nocompatible” 模式(也可以改用“compatible”模式),这是必要的,因为如果要改变或覆盖其它设置,必须要在这个设置之后。

    set nocompatible
    set backspace=2

    set nocompatible 将使 vim 以比默认的 vi 兼容模式功能更强的方式运行。你可以去掉 “no” 来保持默认的 vi 模式。set backspace=2 让退格键能跨行、自动缩进、插入。syntax on 打开了 vim 的语法高亮功能。最后,带有 set background=dark 的 if 语句纠正了 vim 对于终端背景颜色的猜测。对于那些使用黑色背景的用户这是一个较好的配色方案。

    使用下面的命令可以得到其它可以使用的选项的说明文档:

    vim -c ‘:options’

     

    作者:Xueron | 分类目录:技术 | 标签:
  • 我的一毛钱!Perl 数据类型的玩笑!

    2007-10-23
    # perl -e '$num = "147.2"; $num = 100 * (sprintf "%.2f", $num); print sprintf "%d", $num / 10; print "n"'
    1471
    # perl -e '$num = "147.2"; $num = 100 * (sprintf "%.2f", $num); print sprintf "%.0f", $num / 10; print "n"'
    1472
    
    作者:Xueron | 分类目录:技术 | 标签: