几年前在家门口的一家小饭馆吃饭的时候,我想明白了“为什么所有的服务员都这么糟糕”的问题:老板只愿意为一个服务员的职位出这些钱,而一个服务员好到远不止这些钱的时候,她就不会去干服务员了。当然,引申的还有为什么老板只愿意出这些钱,因为你去吃饭给他带去的利润只值这些,等等。
佐证我这个观点的是去年跟河北某 IDC 托管主机的时候,那个客服很不错,办事很麻利很干净,也试着自己搭站点什么的,偶尔还会问我一些问题,我当时就奇怪这样的人怎么会甘心当客服,果不其然,几个月之后他就辞职了,之后换过两三个客服,不用说,都很糟糕,我还投诉过其中的一个。
后来看到《卧底经济学》的时候,还知道有人做过正统的归纳、论证,提出一个词叫“比较优势”,末了作者还自嘲自己之所以可以靠写经济专栏为生,是因为更牛逼的人虽然可以写经济专栏写得比他更好,但是人家可以靠别的方式挣到更多的钱。
在充分的市场竞争环境下,所有人都会坐到相对于自己来说最正确的位置,我还是喜欢更为简短且粗俗的描述:所有人活该如此。
举个例子,公司和员工个人的利益有很大分歧,如 lifesinger 所说
偶尔去蓝色理想转转,感慨JS版为啥这么多人在重复造轮子?感慨之后又感慨不重复造轮子的话,又怎么能学会JS?对于老板来说,复用性节约money,对于程序员来说,重复造轮子是学习的好途径。
而最近碰到些事情,让我第一次认真琢磨一个以前从来不认为是问题的问题:为什么有人愿意屈就公司的需要而自毁前程。当然,答案也是上面说过的,活该如此。
具体事情没法多说,只是一直做网站的我,从来没细想过,对倭外包、或者对 discuz/uchome 做二次开发的人,会有这么这么多,其实他们才是所谓 IT 行业的主流,而自己实际是被边缘化了的。
在不同角度看这个问题是不一样的,首先事情本身到没到“毁前程”这种程度,以及对“屈就”的定量问题,就像物理性质的“弹性”概念,玻璃也有弹性的,看你跟什么东西比了。
我最大的“屈就”是在 05 年的时候写了几个月的 JavaScript,不过相信真正对 JS 很懂的人不会认为我这句话是冒犯。当时公司的那个客户端,本身界面要经常改动,还要跟网站本身有一些交互,所以我把这部分工作接下来了,软件的 GUI 部分只有一个 IE 窗口控件,除了常见的浮动窗口之类的效果,还要做个进度条效果,而且是很多进度条,总之我在给我自己定目标、找动力。但那总之都不是一个让人愉快的工作,会在各种各样的地方出现所谓的“偶然复杂度”(不知道现学现卖的这个词是否恰当),比方说,当时蹩脚的杀毒软件会让我绘制的 DIV 菜单消失、某个版本的 msn activex 会导致页面出现离奇错误(尽管那页没用到 activex,但是禁用 msn activex 后就一切都好了)、某特定语言的 win 98 下的正则不能用两个 / 而必须用 new RegExp,等等等等,并且当时除了 prototype 刚刚在世界掀起波澜,还没有任何框架,我也只是在学习,也不可能马上用在产品上。等做得差不多了,也有一两个人可以勉强接替我这部分工作的人,我跟经理说,我不想干这个了,假设接替的人胜任不了,界面的变动也只能暂时放放了。
我的理由是基于直觉的:干这个有天花板。前几天还在一次面试的时候解释过这问题:互联网对高水平的 JS/CSS 的需求量太少了,如果全国需要 1000 个能解决 c10k 问题的人,可能相同等级的 JS 程序员也就需要 3 个,显然后者更有竞争难度。
但直到两天前,我在买阮一峰翻译的《软件随想录》时顺便买的一本《Joel 谈优秀软件开发方法》里,重新看到了 Paul Graham 的《伟大的黑客》,我早就忘了作者和文章标题,也忘了是什么时候看到的了,但我记得其中每一段话的要素,下面这两段对我尤其重要,我一直把他作为判断工作的准则之一:
所有这类讨厌的小问题都有一个共同特征,既您从中学不到任何东西。写一个编译器很有趣,那是因为您可以从中学会编译原理。为充满 BUG 的软件编写接口程序您却什么也学不到,因为那些 BUG 是随机的。因此,优秀的黑客会尽量回避那些讨厌的小问题。这不是挑三拣四,更主要的是为了自保——长期面对那样的小问题会使人变得愚蠢。黑客们的做法其实与模特们戒食乳酪的道理是一样的。
我不知道您能否培养出这些品质,但至少可以不去抑制它们。如果您有希望成为一名伟大的黑客,那么我建议您最好做到:一方面,绝不在枯燥的项目上浪费生命(除非不这么做您和家人就会饿死);另一方面,做事必须有始有终、滴水不漏。我所认识的所有伟大黑客似乎都是如此,也许他们根本就没想过还有其他什么选择。
匆匆
作者: 朱自清
燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:现在又到了哪里呢?
我不知道他们给了我多少日子;但我的手确乎是渐渐空虚了。在默默里算着,八千多日子已经从我手中溜去;像针尖上一滴水滴在大海里,我的日子滴在时间的流里,没有声音,也没有影子。我不禁头涔涔而泪潸潸了。
去的尽管去了,来的尽管来着;去来的中间,又怎样地匆匆呢?早上我起来的时候,小屋里射进两三方斜斜的太阳。太阳他有脚啊,轻轻悄悄地挪移了;我也茫茫然跟着旋转。于是——洗手的时候,日子从水盆里过去;吃饭的时候,日子从饭碗里过去;默默时,便从凝然的双眼前过去。我觉察他去的匆匆了,伸出手遮挽时,他又从遮挽着的手边过去,天黑时,我躺在床上,他便伶伶俐俐地从我身上跨过,从我脚边飞去了。等我睁开眼和太阳再见,这算又溜走了一日。我掩着面叹息。但是新来的日子的影儿又开始在叹息里闪过了。
在逃去如飞的日子里,在千门万户的世界里的我能做些什么呢?只有徘徊罢了,只有匆匆罢了;在八千多日的匆匆里,除徘徊外,又剩些什么呢?过去的日子如轻烟,被微风吹散了,如薄雾,被初阳蒸融了;我留着些什么痕迹呢?我何曾留着像游丝样的痕迹呢?我赤裸裸来到这世界,转眼间也将赤裸裸的回去罢?但不能平的,为什么偏要白白走这一遭啊?
你聪明的,告诉我,我们的日子为什么一去不复返呢?
1922年3月28日
来自《牛奶可乐经济学2》作者:(美)弗兰克 著,阊佳 译
出 版 社: 中国人民大学出版社 2009年01月
为什么牛奶装在方盒子里卖,可乐却装在圆瓶子里卖?
几乎所有软性饮料瓶子,不管是玻璃瓶还是铝罐子,都是圆柱形的。可牛奶盒子却似乎都是方的。方形容器能比圆柱形容器更经济地利用货架空间。那么,为什么软性饮料生产商坚持使用圆柱形容器呢?
原因之一可能是,软性饮料大多是直接就着容器喝的,所以,由于圆柱形容器更称手,抵消了它所带来的额外存储成本。而牛奶却不是这样,人们大多不会直接就着盒子喝牛奶。
如果牛奶容器是圆柱形,我们就需要更大的冰箱。
可就算大多数人直接就着盒子喝牛奶,成本效益原则亦显示,它们不大可能装在圆柱形容器里贩卖。不错,方形容器(不管容器里装什么东西)的确能节约货架空间,但牛奶一例中节约的空间,显然比软性饮料一例中来得更划算。超市里大多数软性饮料都是放在开放式货架上的,这种架子便宜,平常也不存在运营成本。但牛奶则需专门装在冰柜里,冰柜很贵,运营成本也高。所以,冰柜里的存储空间相当宝贵,从而提高了用方形容器装牛奶的收益。
为什么硬币上的人像都是侧面像,纸币上的人像却是正面像?
看看口袋里的零钱,你会发现,出现在硬币上的前总统头像都是侧面像,分币上的林肯、杰弗逊,角币上的罗斯福、华盛顿和肯尼迪,全都侧着脸。可在钱包里的纸币上,你却找不到侧面像。1美元纸币上的华盛顿,5美元上的林肯,10美元上的汉密尔顿,20美元上的杰克逊,50美元上的格兰特,还有百元美钞上的富兰克林,皆为正面肖像。除去极少的例外,其他国家的情况也都差不多:硬币上是侧面像,纸币上是正面像。为什么存在这样的差异呢?
简单的说,尽管画家大多偏爱正面肖像,可金属雕版中存在的技术难题,使得人们难以在硬币上画出辨识度高的正面肖像来。硬币上可供作画的空间一般不过4厘米见方,由于精细度不够,很难画出一张能叫人轻易辨识的正面肖像。反之,如果只画侧面像,要认出主体来就容易多了。要在硬币上画出足够精细的正面肖像,技术上办得到,但费用极为可观。同时,随着硬币的流通,精致的细节很快就会磨损掉。
既然侧面像更容易制造和识别,为什么纸币上又弃而不用呢?这是因为,正面肖像的精细和复杂,能防止制造伪钞。
本章的最后两个例子旨在说明,有时候我们必须深入考虑历史源流,才能对产品设计功能做出解释。
为什么有些车的加油孔在司机一侧,有些车却在副驾驶一侧?
租车开最叫人灰心丧气的一个经验是,把车照往常开自家汽车那样停在油泵前,却发现油箱位置在车身另一侧,油枪够不着。其实,汽车制造商只需要把加油孔统一设在汽车某一侧,就能解决这个难题。可为什么他们不这么做呢?
在美国和其他车辆靠右行驶的国家,过街时右转比左转容易。所以,大多数司机会到能右转进站的加油站加油。假设油箱总设在汽车的司机一侧,那么,为了加油,驾驶员必须将车停在油泵的右侧。这样一来,在交通高峰期,所有向右的油泵会挤满车,而大多数朝左的油泵却没人用。
所以,不同车型的加油孔设在不同侧面,意味着有些车能从左边加油。于是司机们就不用排队等着加油了。这种好处(收益),显然比给租来的车加油时偶然停错了方向所带来的成本大得多。
要是加油孔都在司机一侧,加油站肯定会排起长长的车队。
在有些情况下,产品设计不仅要符合产品可能的使用方式,产品希望向用户表达什么样的信息,也会对它有影响。下面两个例子说明,采用某一种形式所传达的信息更容易为人们所吸收,或是其造价更为低廉。
为什么女装的扣子在左边,男装的扣子却总在右边?
针对不同购买群体对服装功能的不同需求,成衣商采用相应的统一标准,这一点并不足为奇。可奇怪的是,女士适用的标准跟男士标准恰恰相反。如果标准完全是随便制定的,那是另一回事。可男士标准明明也很适合于女士。毕竟,全世界90%以上的人(无论男女)都是右撇子,用右手从右边扣扣子要容易多了。那么,为什么女装扣子在左边?
服装问题嘛,历史说了算。
在这个例子当中,好像真的是历史说了算。17世纪扣子最初问世的时候,只有有钱人的外套上才钉扣子。按当时的风俗,男士自己穿衣服,女士则由仆人帮着穿。女士衬衣上的扣子钉在左边,极大地方便了伺候女主人的仆人们(多为右撇子)。男士衬衫的扣子在右边,不仅因为大多数男人们是自己穿衣服,还因为用右手拔出挂在左腰上的剑,不容易被衬衫给兜住。
欢迎拍砖。
<?php
/**
* 多任务并发执行演示.
* @author rains31@gmail.com
* 请在linux的shell里面执行本程序,珍爱生命,远离windows.
*/
//最大并发数,用来保护服务器不被累死
define('MAX_CONCURRENCY', 10);
/**
* 多任务并发类
*/
class MultiTask
{
/**
* 任务池
* @var array $pool
*/
private $pool = array();
/**
* 并发数
* @var int $concurrency
*/
private $concurrency = 1;
/**
* 设置并发数
* @param int $concurrency
*/
public function setConcurrency($concurrency = 1)
{
if($concurrency>=1 && $concurrency<=MAX_CONCURRENCY)
{
$this->concurrency = $concurrency;
}
}
/**
* 添加一个新任务. 如果任务池满了,就先消化一个任务池内的任务.
* @param Task $new_task
* @return bool
*/
public function addTask(Task $new_task)
{
$pool = &$this->pool;
$status = $new_task->status();
if($this->isFull())
{
$this->doWork();
}
$pool[] = $new_task;
echo "new task {$status['command']}\r\n";
return true;
}
/**
* 消化一个任务池内的任务,本方法是本程序的核心所在
* @return bool
*/
private function doWork()
{
$pool = &$this->pool;
while($this->notEmpty())
{
foreach($pool as $tid=>$task)
{
$status = $task->status();
if($task->isRunning())
{
if($task->isTimeout())
{
echo "task:$tid:{$status['command']} timeout, force closed!\r\n";
$task->terminate();
unset($pool[$tid]);
return false;
}
echo "checking task:$tid:{$status['command']}:".intval($status['excute_time'])."\r\n";
}
else
{
echo "task:$tid:{$status['command']} finished!\r\n";
cm4.2.3+的rom自带usb网络共享的功能.win7和linux上面都能认出来.但是xp上只认出一个找不到驱动的android phone设备.
从国外某论坛找到了xp下的驱动,分享给大家.
点击下载:
http://rains.cn/dl.php?file=g1net.zip
上次从郝同学那里得来一个叫dnsmasq的好东东。兴奋的设置好了之后,dig一下,看着0ms的dns相应时间,真的很爽哦。
可是用着用着,发现上不了网了。域名无法解析。查看一下
cat /etc/resolv.conf
# Generated by dhcpcd
# /etc/resolv.conf.head can replace this line
nameserver 192.168.1.1
# /etc/resolv.conf.tail can replace this line
发现不是当初设置的127.0.0.1,而是被dhcpcd给覆盖了。
怒!
上网搜搜看,有人chattr +i 来解决,我觉得那样过于血腥,不是我们这些文明人该做的事。
既然是dhcpcd搞的鬼,找它这个肇事者应该没错。
我呼唤了另一个男人来做刽子手,严刑拷打之下,dhcpcd不再嘴硬,全招了。
man dhcpcd.conf
以下是供词节选
nohook
Don't run this hook . Matches full name, or prefixed with
2 numbers optionally ending with .sh.
So to stop dhcpcd from touching your DNS or MTU settings you
would do:-
nohook resolv.conf, mtu
秘籍:用”/“可以搜索文档中的关键词,比如"resolv.conf"
招了之后就好办了,修改/etc/dhcpcd.conf
nohook 那行后面加上一个resolv.conf
再重启,它就乖乖的了。
今天在群里...
-----------------------------------分割线--------------------------------------
知心人(44267002) 10:17:12
一二三四五,上山逗老虎。摇摇老虎头,吃穿不用愁;摸摸老虎腿,月月加薪水;拍拍老虎背,存款翻十倍;亲亲老虎嘴,生活好滋味。祝大家虎年快乐
深海|囧(285186998) 15:22:04
亲老虎嘴,摇老虎头,摸老虎腿,拍老虎背
哥都不敢,郁闷
这个猪头有点帅 15:22:53
因为你忘记了
define('老虎', '老婆');
-----------------------------------分割线--------------------------------------
幸好我家这只老虎现在很温柔。:)
常用的卡主要有下面几种
第一种是带有磁条的卡,比如银行卡。磁条多数是黑色。就像磁带那种颜色。
通过自身的磁性物质来记录信息,这种卡怕强磁场,磁面怕磨损,弯折对其损害不大。
就算断裂,用胶条粘起来就可以正常使用。
第二种是卡内部带有线圈和芯片的卡,比如公交一卡通。
它在读卡机的变化的磁场下感应出电磁波来告诉读卡机自己内部的信息。
这种卡不怕强磁场,它怕硬物挤压,怕弯折,怕迅速变化且变化强烈的磁场。
里面密密麻麻的线圈一断基本就没法用了,假如人品好,断点接触比较紧密,扭动断处偶尔
接通还可以用,如果是芯片损毁那就彻底没法用了。
第三种是纯芯片的,比如电卡,手机sim卡,也是怕硬物,不怕强磁场。跟第二种类似。但
是它芯片裸露在外面,所以怕静电或电压高出它承受能力的非静电。
第四种是根据卡上打的孔的位置来识别数据。这种卡只要孔别被糊住,别强烈的变形,多强
的磁场多强的电都不怕。
欢迎补充~
插上之后选择网络共享(通过USB),然后
ifconfig -a
发现一个新的网络设备usb0
ifconfig usb0 up
dhcpcd usb0
获取到了ip,然后就能连上网了。