关于需求沟通那些年那些事

zhang 发表于 web开发, 梁言坤语 分类,标签:
0

负责设计的同事,很容易就搞了几个界面效果,发给客户看,客户还算满意,顺便还夸了我们几句,不过提议要绿色的。农业局吗,绿色的能表现农业,可以理解。

改了一套绿色的,送过去。人家不满意,提了几个意见。改了又送过去,又不满意;又改,还不满意。美工郁闷了,开始嘟囔,“为什么一开始挺满意,越做反而意 见越多,我这么多天,是不是白干了?客户整个就是没事儿找茬,他要做什么,我就做什么,还是不满意。肯定是觉得我们做得太快了,我们应该拖一拖,让他们觉 得这个工作很难做。”

工作速度越来越慢。客户也越来越不满意,眼看这活儿要黄。

趁工作间隙,我说,“我给你说说咋回事儿,你看对不?

“农业局要绿色的,这个可以理解,但是他要绿的,你就给他绿的,绿也有很多种啊。

春天的嫩绿,夏天的深绿,秋天的灰绿,冬天的墨绿,客户要哪一种呢?

“或许,他们要的只是春天的感觉,要的是生机盎然,而不是绿,姹紫嫣红都是春,绿不并是关键。只不过,客户不知道如何表达罢了。第一次客户只看到一个粗略 的架构,他们并不是满意了,而是相信我们会进一步精化界面,我们不应该放松心态,而应该心存感激。可是后来的设计思路与他们想的并不一样,就着急了,也觉 得我们辜负了他们的信任,态度开始不友好。所以,现在最好调整思路,不要沿着客户的描述惟命是从,而应该认真分析客户言语背后的真正意图。关于春天的思 路,你试试吧,说不定可以哩。”
阅读全文 »

apache 优化配置几条建议

admin 发表于 Apache 分类,标签:
0
  1. 1.控制MaxClients的设置,以避免服务器产生太多的子进程而发生交换。
    进程间的数据交换会占用很大内存,数据交换产生的滞后使用户总感觉”不够快”,所以用户就可能去按”停止”和”刷新”,从而带来更大的负载。一般建议小网站将MaxClients设置为12~24。
  2. 2.选择更好的硬件,CPU、内存、硬盘等等
    这句很鸡肋啦,如果有更多的银子,谁不愿意换更好的呢?^_^
  3. 3.定期更新操作系统,打上系统补丁;如果你的操作系统支持sendfile()系统调用,则务必安装带有此功能的版本或补丁
    在支持sendfile的系统中,Apache2可以更快地发送静态内容而且占用较少的CPU时间。
  4. 4.HostnameLookups设置为off
    尽量较少DNS查询的次数。如果你使用了任何”Allow from domain”或”Deny from domain”指令(也就是domain使用的是主机名而不是IP地址),则代价是要进行两次DNS查询(一次正向和一次反向,以确认没有作假)。所以, 为了得到最高的性能,应该避免使用这些指令(不用域名而用IP地址也是可以的)。
  5. 5.为Directory加上FollowSymLinks
    如果网站空间中没有使用 Options FollowSymLinks ,Apache就必须执行额外的系统调用以验证符号连接。例如:在请求”/index.html”时,Apache将对”/www”、”/www /htdocs”、”/www/htdocs/index.html”执行lstat()调用。而且lstat()的执行结果不被缓存,因此对每一个请求 都要执行一次。
  6. 6.将AllowOverride设置为None
    对于使用虚拟主机的朋友可能会觉得不方便,这样设置将会使.htaccess中的设置失效,如果实在需要,并且在有条件的情况下,请在conf配置文件中直接写入rewrite规则
  7. 7.禁用内容协商
    尽管在实践中,内容协商的好处大于性能的损失,如果你很在意那一点点的性能损失,则可以禁止使用内容协商。但是仍然有个方法可以提高服务器的速度,就是不要使用通配符。
  8. 8.MaxRequestsPerChild设置为非0以防止内存泄漏 阅读全文 »

新浪SAE如何绑定自定义的域名

admin 发表于 web开发 分类,标签: ,
12

新浪sae平台(http://sae.sina.com.cn)发展已几年,现在已算比较成熟。现在常可以看到一些用户已将自己的博客架在sae平台来跑,这样一方面省去自己去买服务器的费用,另一方面还可以提高网站的速度。不过sae平台不会像咱们的服务器有那么多的权限给你使用,你没有FTP权限,也不能去登录,像一些比较危险的函数也是被禁用的,像PHP中常用的curl等『不过你可以使用file_get_content来替换curl』,当然这样之所以禁用这些是为了SAE的服务器的安全。

如果你想搭一个网站但是自己没有服务器资源抑或自己的网站访问速度巨慢无比时,你可以尝试将自己的网站转到SAE平台上。特别是上个月SAE发布平台支持绑定自定义的域名。
如果你是运行的是一个商业性的网站,不建议你将网站迁移到SAE平台上去,因为如果SAE平台发生了问题了,你去定位和处理这个问题要花费相对较长的时间,而你的用户可能就因为这个时间太长而慢慢远离你而去。

下面我们主要来说明下如何使用SAE绑定自己的域名:
1. 申请一个SAE账户。
2. 登录后创建一个应用,像wordpress博客,团购等应用可以在“应用仓库”中直接安装。如果用户的应用是自己的开发的,可以将应用按照SAE的规范来安装,详见:http://sae.sina.com.cn/?m=devcenter&catId=230
3. 至此你已安装完自己的应用,可以通过如xxx.sinaapp.com进行访问自己的应用。
4. 这一步我们将实现将个人或公司的域名绑定到xxx.sinaapp.com,实现访问个人或公司的域名就可以看到如同直接访问xxx.sinaapp.com一样的。 阅读全文 »

Nginx源码学习

admin 发表于 web开发 分类,
2

源码包解压之后,根目录下有几个子目录和几个文件,最重要的子目录是auto和src,最重要的文件是configure脚本,不同于绝大多数的开源代码,nginx的configure脚本是作者手工编写的,没有使用autoconf之类的工具去自动生成,configure脚本会引用auto目录下面的脚本文件来干活。根据不同的用途,auto目录下面的脚本各司其职,有检查编译器版本的,有检查操作系统版本的,有检查标准库版本的,有检查模块依赖情况的,有关于安装的,有关于初始化的,有关于多线程检查的等等。configure作为一个总驱动,调用这些脚本去生成版本信息头文件、默认被包含的模块的声明代码和Makefile文件,版本信息头文件(ngx_auto_config.h,ngx_auto_headers.h)和默认被包含的模块的声明代码(ngx_modules.c)被放置在新创建的objs目录下。要注意的是,这几个生成的文件和src下面的源代码一样重要,对于理解源码是不可忽略的重要部分。

src是源码存放的目录,configure创建的objs/src目录是用来存放生成的.o文件的,注意区分一下。

src按照功能特性划分为几个部分,对应着是几个不同的子目录。

src/core存放着主干部分、基础数据结构和基础设施的源码,main函数在src/core/nginx.c中,这是分析源码的一个很好的起点。core module的源码 也是Nginx服务的入口

src/event存放着事件驱动模型和相关模块的源码。对自身事件逻辑的封装。

src/http存放着http server和相关模块的源码。nginx作为web/http server运行时的核心模块。

src/mail存放着邮件代理和相关模块的源码。nginx作为imap/pop3/smtp proxy server运行的核心模块。

src/misc存放着C++兼容性测试和google perftools模块的源码。一些utils 定义一些test和profiler的一些外围模块的逻辑。

src/os存放着依赖于操作系统实现的源码,nginx启动过程中最重要的master和workers创建代码就在这个目录下,多少让人觉得有点意外。对各个平台抽象逻辑的封装。 阅读全文 »

开发人员成长中的问题

liangkun 发表于 梁言坤语 分类,
3

回想从最初开始负责丁香园技术团队到现在,团队规模已经增加了几倍,有人离职,也有更多的人加入。团队一大,自然有些问题会浮现出来。比如最近在和团队同事聊天或是面试面谈的时候,经常会听到类似的话「觉得现在的工作没什么挑战」或是「感觉学不到东西」,以前偶尔听到团队同事这样的反馈,还是挺让我着急的,我第一直觉是很惭愧,公司或是团队给同事提供的资源和机会太少了,于是,不停的争取资源或是尽量改进,但是最后我逐渐发现,这样还是不能完全解决问题,这并非是问题的根源,因为一方面有人说没挑战 ,一方面是一堆老大难问题很久得不到解决。觉得「没挑战」和「没成长」其实是很多人会有的心态,尤其是刚参加工作没几年的容易形成这样习惯上的认知。
我以前写过一篇 工程师在创业团队的技术挑战 ,说了一下我对技术上的「挑战」的看法,现在趁着有点空闲,再谈谈谈创业团队中的成员的「挑战」以及「成长」的问题。{请注意,这只是一篇随笔,我无意去讨论什么管理之类的废话,也不奢望就这么几个字能解决所有问题,对少数人起到一个提醒的作用就足够了}
一般觉得工作没什么挑战的,原因可能无外乎几个: 要么认为自己的能力足够高了,不屑于再做「简单」的事情; 要么认为自己是在做「重复」的工作;要么,觉得没接触到新东西;也很有可能只是各种借口或是「心态」的体现。
实际上,任何团队中都没有「简单」的事情,只有做得好或是做不好的事情。什么是简单? 给产品写一段文字说明够简单么?写一封 EDM 够简单么? 如果仔细推敲的话,会看到绝大多数文案都是糟糕的一塌糊涂,那么为什么不用更高的标准要求以下自己呢?既然能力够高了,为什么你说的「简单」的事情还做不好呢?所谓眼高手低,不就是说这种情况么? 如果小事情做到比别人好,那么大一点的事情团队就会更加放心的给你去做。否则的话,换了是你,你也不会将重要的任务交给连小事情都做不好的人吧? 阅读全文 »

PHP的垃圾回收机制

zhang 发表于 PHP 分类,标签:
6

每一种计算机语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,php也不例外,但是在面向对象编程(OOP)编程中,有些对象需要显式的销毁;防止程序执行内存溢出。


一、PHP 垃圾回收机制(Garbage Collector 简称GC)
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP的GC垃圾处理机制,防止内存溢出。
当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.

二、__destruct /unset
__destruct() 析构函数,是在垃圾对象被回收时执行。
unset 销毁的是指向对象的变量,而不是这个对象。

三、 Session 与 GC
由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下,session.gc_probability=1, session.gc_divisor =100也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).
GC的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除。
但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

那么这个时候怎么解决呢?
1. 修改session.save_path,或使用session_save_path()让每个站点的session保存到一个专用目录,
2. 提供GC的启动率,自然,GC的启动率提高,系统的性能也会相应减低,不推荐。
3. 在代码中判断当前session的生存时间,利用session_destroy()删除. 阅读全文 »

vgmodify

guojca 发表于 HP-UX 分类,
3

修改卷组参数
在创建卷组时,会设置卷组的某些特性。使用 vgmodify 命令可以调整某些卷组参数,而不必
删除并重新创建卷组,也不必移动数据。vgmodify 命令允许您修改 1.0 版卷组和 2.x 版卷组的
不同参数。
对于 1.0 版卷组,可以使用 vgmodify 执行下列操作:
• 检测和处理物理卷大小更改。
• 修改每个物理卷可分配的最大物理盘区数。
• 修改每个卷组可包含的最大物理卷数。
• 修改卷组可包含的最大逻辑卷数。
• 将磁盘类型从可引导磁盘更改为非引导磁盘(反之亦然)。
• 处理物理卷 LUN 扩展。
• 准备物理卷以进行 LUN 缩减。 阅读全文 »

Linux 下批量建立目录

zhang 发表于 Linux 分类,标签:
4

先看看示例吧:

[wind@windphp test]$ mkdir {1..9}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9
[wind@windphp test]$ mkdir {a..z}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t

首先是建立1-9的9个目录, 然后是是a-z的26个目录, 这里的范围是可以自定的, 当然了, 范围要合理, 比如字母范围如果是双数就不行了哦.

如果是乱序的, 就麻烦点了. 如下:

[wind@windphp test]$ mkdir {a,1,5}
[wind@windphp test]$ ls
1  5  a

PHP框架自动加载类的实现

zhang 发表于 PHP 分类,标签:
3

PHP框架 如果包含一般文件较少的情况会用手动包含要使用的类文件
当要包含大量类文件的时候,这样就会显得麻烦,就可以使用自动包含类。

类文件:test.php

class Test
{
    public function __construct()
   {
       echo __CLASS__.__FUNCTION__;
    }
 }

1.手动包含:

    require_once('test.php');
    $test = new Test();

2.使用__autoload()自动包含:

    // 这样实例化一个类的时候,将会自动包含同名的类文件
    // 需要重载__autoload方法,自定义包含类文件的路径
    function __autoload($classname)
    {
        $class_file = strtolower($classname).".php";
        if (file_exists($class_file)){
            require_once($class_file);
       }
    }
    $test = new Test();

阅读全文 »

前腾讯员工离职三个月开发出 app store排名第一应用疯狂猎鸟的总结

admin 发表于 web开发 分类,
8

光荣与梦想 — 疯狂猎鸟项目小结

半年前我离开了腾讯,加入了豪腾嘉科。
至今难以忘记在离开腾讯前,以前的leader用一高一低两个手给我比划的手势,告诉我,我现在是在多么高的位置(意指腾讯),要去的创业公司是多么低的 位置,告诉我,你现在一时决定这么掉下去,也许永远就再也回不去那么高的位置了。但是我还是决定出来了,原因在以前的一篇总结中 有较为详细的描述,那时,我能够谈的最多的就是梦想,很感谢那时候大家的支持,而今天,我要谈的,还有光荣!现在看来,这个决定实在是太正确了。因为,假 如我没有出来,按在腾讯的原计划,我还是在为一个无聊的纸牌游戏做着更多无聊的更新,而我出来后,在豪腾嘉科组建了自己的新团队,开发出了一款新的 iPad游戏“疯狂猎鸟”,从2011年9月28日开始,“疯狂猎鸟”在iPad App Store中国区总榜排名持续第一长达一周!iphone版本上架两天后,即到达iphone app store中国区总榜第二名。 阅读全文 »