《Rework》

rework这本书是近来难得一见的好书,认识字的都应该去读几遍,中文最近也出版了,各大售书网站都可以买到,打完折二十几块钱,非常物有所值,尽管英文版我已经读过,依然忍不住买一本中译本收藏,虽然中译本的名字我觉得很恶俗,这本书和商业思维没有太多的关系,中译本的作者自作聪明的加上这个小标题,有点恶心,另外将rework翻译成“重来”个人觉得也有点欠妥当,还不如不翻译,意思可能会更明确一点。虽然中译本有这样那样的问题,整体来说翻译的不错,不喜欢英文的可以买来看看,鼎力推荐——我本人不会有任何好处 :)

  1. 那来的从错误中学习
  2. 中国人常说的一句话是:失败是成功他妈。作者引用哈佛商学院的报告证明,失败的创业者再次创业并不比从未创业的人成功的概率更高。有一类人非常明白这个道理,他们有个名字叫VC(风险投资人),VC非常喜欢那些已经或者曾经创业并且干得不错的人,换句话说这些人往往能从VC那里以比较小的代价(损失较小的股份或者少费周折)搞到很多很多的钱用于再次创业或者公司发展 。

  3. 何必壮大
  4. 这个观点有点意思,几乎所有的企业家都想将自己企业做大,富士康的员工超过百万,而作者觉得大未必是最优的,我非常认同作者的观点,我身边就有很多的公司每年几个亿的业务却只有10个左右的员工。公司越大责任就越大,不仅要自己赚钱还要照顾好这些员工,是一个有责任的企业家应该做到的,而不是压榨。如果你不能,那么就尽量提高效率,少招几个人吧,与人与己都是好事。

  5. 工作狂
  6. 引用里面的几句话:工作狂实际取得的成就并不比正常人高,他们自诩为完美主义者,但这仅仅代表他们浪费了大量的时间去关注次要的细节,而不是推动下一项任务。真正的英雄是早已想出办法、搞定一切,然后回家了。

  7. Start making Something
  8. 我们身边总有这样的人在叹息“XXX我早就想到了,只是没有下手,如果当初我干了,现在也亿万富翁了”,这个观点很可笑,你大脑中有创意跟你实际去创建这样的事情一点关系也没有,在你人生中最有意义的使你做了什么,而不是你想过什么、说过什么或者计划过什么

  9. 没有时间不是借口
  10. 当你拥有某种极其强烈的渴望时,你就能挤出时间来,不管你身上是否还背负着其他的责任,事实上大部分的渴望不是那么强烈,于是他们总是拿没有时间来做借口进行自我保护。如果我不是这样,我今天已经做出了好几个开源作品了。

=====未完待续======

发表在 Study & Reading | 标签为 | 2 条评论

《从技术走向管理》

对领导

  1. 了解领导的沟通风格。
  2. 别不屑于拍马屁,人人都喜欢听好话,你领导也不例外。
  3. 领导安排的事情要第一优先处理,并及时反馈,如出差的时候到了目的地让领导知道你到了。
  4. 给领导汇报要出选择题,而不是问题!领导喜欢部下反应问题时同时提出过个方案供他选择。
  5. 领导讨厌部下问直接怎么办或只提供一条路没有选择。
  6. 部下说”我以为“,”我知道“,不经请示擅自做主捅了漏子不可收拾,出了问题推卸责任,说”我以为“的词语换成”我错了“。
  7. 他也喜欢部下提供有效的反馈信息是同时提出自己的建议。
  8. 站在领导和公司的角度看问题。
  9. 领导喜欢你能随时报告你的工作进度,不喜欢倚老卖老,埋头做事却什么都不讲。
  10. 领导不喜欢自以为是,自持功高,拉帮结派要挟领导。
  11. 绝对不要猜测领导的想法,因为你无法达到领导的思维层次。
  12. 与领导沟通有错就认,不要辩解,不要犯同样的错误。
  13. 与领导沟通时那上笔纸记录。
  14. 与领导沟通前设想他会有的疑问,提前准备答案。
  15. 让领导的话只说一遍。
  16. 你要绝对相信领导的要求总是合理的,领导说的就算错了也要坚决执行,因为你无法完全清楚领导的全盘计划。
  17. 满足领导的业务需求的同时,你得考虑他的感情需求。
  18. 不要对领导说”应该“,”不应该“,你应该改用”建议“。
  19. 工作需要改进的地方自己提前交代,不要等领导说出来。

对下属

  1. 安排下属做他们擅长的事情。
  2. 向下属解释分派的工作,令他有全面的理解,并引起他对这项工作的兴趣。
  3. 分派工作时给与下属所需的资料,由他来决定处理的方法。
  4. 分派工作时定出完成工作的时间表的工作标准。确定下属完全明白要求。
  5. 关注下属的优点,充分的利用下属的有点而非克服缺点。
  6. 绝对不要试图改变下属的性格与特点。
  7. 在他发错前提前纠正,别等着他都错了才去骂他“你个蠢蛋“。
  8. 不到不得已,绝对不要用上你的职位权利来让下属被迫听你命令,正确的方式是以个人魅力让下属跟你。
  9. 就算下属错了,指出错误也是需要艺术的说法,不能开口就提问题,尽量先说他值得赞赏的地方,然后在说某某地方还需改进…一样以来下属自信心不会受到打击。
  10. 下属的生活问题也是需要多关注关注的,要不然说不一定那天他就跑去跳楼或者跑幼儿园去了。
  11. 定期请下属吃饭,喝了酒心里话才会说出来,才能更好的融合团队。

员工一般非为四种:

  1. “态度好能力差” – 在领导看来,这种更有培养前途,所以这说明态度好的人才容易当官
  2. “能力差态度差” – 这种人建议干掉,但干掉也得要有“艺术”不然又一个跑房顶或者幼儿园去了
  3. “能力好态度差” – 这种用好待遇就行了
  4. “态度好能力好” – 这种就是当官的
  5. 更多的将具有挑战性的事情给下属做,这样他对这个工作抱有更多的兴趣。
  6. 当下面的人闹事不听你的时候,如果你想杀鸡敬候,那么不可干掉闹得最厉害那个(手里面没资本那能那么牛B),也不可干掉闹得最不厉害那个(因为这样其不到效果),一定要选中间的人,而且要随便挑一个,这样这写胆子小的就会担心,谁知道下一个会是谁。
  7. 工作总会有遗憾的,做了主管必然会称呼下属们眼里的“坏人”,要想成为公司喜欢的,你就必须“坏”起来。
  8. 要对下属即将离职意向敏锐察觉,并尽早做出挽回动作(技术人员一般想走了是很明显的,有些请假次数多了,而且理由牵强,有些被是从来不跟你对起干的一下牛起来了),当他来给你提出离职的时候已经无法挽回了。

对工作

  1. 努力工作是基本的,因为公司已经给你发了工资了,想领导喜欢你就得多做工作之外的问题。
  2. 工作改进计划由自己首先提出。
  3. 直言不是好事情,历史就是最好的证明,现在大家知道最多的无非就刘罗锅和魏征,其他的还没出名就非他们老板干掉了。
  4. ”作秀“是必须的,”作秀“多了自然就习惯了(这里的”作秀“不是贬义词)。
  5. 对你的工作要有规划,长期(年),中期(月),短期(周)的规划,还有每日的工作计划。
  6. 80%的时间要花在“重要而不紧急”的事情上面,事情都可以分为:“重要紧急”,“重要不紧急”,”紧急不重要”,”不紧急不重要”,你得站在公司的角度将你的事情划分为这四种状态。
  7. 作为主管,你应该站在公司的立场想问题,而不是依然以一个打工者的心态来看问题,想想如果你是老板你会喜欢那种员工。
  8. 对工作无法作到的,要学会说”不“。
  9. 例行工作你就不要做了,让下属去做。
  10. 你不需要是技术高手,但你需要懂得多。
  11. 培养接班人,一边你临时不在的时候工作也能正常执行。
  12. 让你的接班人在开会时有更多的发言机会,多找机会让他与你一起跟上司汇报。
  13. 不要以感情来决定对事情的看法,你必须公正。

从技术到管理转换是出现的问题
Q:发现时间不够用了? A:分清那些事情可以不做的。
其他

  1. 《亮剑》,跟李云龙学学如何做个好主管。
  2. 《越狱》 如何打造一个无敌的 Team。
  3. ”白金法则“ – 你希望别人怎么对你,你就怎么对别人。(管理中因人而异的管理方法)
  4. ”黄金法则“ – 别人希望你怎么对他,你就怎么对他。(管理中因人而异的管理方法)
  5. 工资是岗位决定的,奖金是绩效决定的。
发表在 Excellence Article | 标签为 , | 一条评论

error while loading shared libraries: libgearman.so.1

当运行 /usr/local/sbin/gearmand -d 时
出现

error while loading shared libraries: libgearman.so.1

运行一下 /sbin/ldconfig -v ,然后再去运行gearman就可以了

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.

发表在 Operating System | 标签为 | 留下评论

Python解析iso8601时间格式获得时间戳

关于iso8601数据交换标准,请参见维基百科的解释,中文版不完全解释,参见为维基百科中文版
常见示例格式如下:

2010-11-21T00:00:00+08:00

真实的案例,请参见美团网的团购API

Python默认安装包中不能对iso8601格式的时间戳,因此先安装这个解析包,下载地址:http://pypi.python.org/pypi/iso8601/
如果你不能在网站上找到对应Python版本的模块,也可以通过输入easy_install iso8601试试,我的是2.6版本,安装成功
解析过程很简单,代码如下:

import time
import iso8601
dt = iso8601.parse_date('2010-11-21T00:00:00+08:00')
timestamp = time.mktime(dt.timetuple())

PS:感谢妖怪帮助我解决解析iso8601时间格式的问题

发表在 Programming | 标签为 | 留下评论

Python中给urllib2设置超时时间

import socket
import urllib2
 
socket.setdefaulttimeout(seconds)
 
open = urllib2.urlopen("http://xxx.xxx.xxx")

urllib2本身是没有办法设置超时时间的,示例中是通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllib2.urlopen()也设置了默认的超时时间

发表在 Programming | 标签为 | 留下评论

python非贪婪、多行匹配正则表达式例子

一些regular的tips:

1 非贪婪flag

>>> re.findall(r”a(\d+?)”, “a23b”)
['2']
>>> re.findall(r”a(\d+)”, “a23b”)
['23']

注意比较这种情况:

>>> re.findall(r”a(\d+)b”, “a23b”)
['23']
>>> re.findall(r”a(\d+?)b”, “a23b”)
['23']

2 如果你要多行匹配,那么加上re.S和re.M标志
re.S:.将会匹配换行符,默认.不会匹配换行符

>>> re.findall(r”a(\d+)b.+a(\d+)b”, “a23b\na34b”)
[]
>>> re.findall(r”a(\d+)b.+a(\d+)b”, “a23b\na34b”, re.S)
[('23', '34')]
>>>

re.M:^$标志将会匹配每一行,默认^和$只会匹配第一行

>>> re.findall(r”^a(\d+)b”, “a23b\na34b”)
['23']
>>> re.findall(r”^a(\d+)b”, “a23b\na34b”, re.M)
['23', '34']

但是,如果没有^标志,

>>> re.findall(r”a(\d+)b”, “a23b\na23b”)
['23', '23']

可见,是无需re.M

发表在 Programming | 标签为 | 留下评论

DedeCMS 5.6版本的Nginx环境伪静态化

Linux环境下dedecms5.6实现伪静态的方法,5.5 5.3应该也适用。
1.首在在后台开启伪静态.

2.然后栏目和文章设置成动态浏览.

设置方法为:在后台系统设置sql里执行以下语句

将所有文档设置为“仅动态浏览”,update dede_archives set ismake=-1

将所有栏目设置为“使用动态页”,update dede_arctype set isdefault=-1

改成1就是静态。动态转换为静态后需要重新生成HTML。

3. nginx设置重写规则. 内容为:

rewrite “^/list-([0-9]+)\.html$” /plus/list.php?tid=$1 last;
rewrite “^/list-([0-9]+)-([0-9]+)-([0-9]+)\.html$” /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 last;
rewrite “^/view-([0-9]+)-1\.html$” /plus/view.php?arcID=$1 last;
rewrite “^/view-([0-9]+)-([0-9]+)\.html$” /plus/view.php?aid=$1&pageno=$2 last;
break;

修改channelunit.func.php文件
原来大约113行:

return $GLOBALS["cfg_plus_dir"].”/view-”.$aid.’-1.html’;

修改为:

return $GLOBALS["cfg_cmsurl"].”/view-”.$aid.’-1.html’;

原来大约166行为:

$reurl = $GLOBALS['cfg_phpurl'].”/list.php?tid=”.$typeid;

修改为:

if($cfg_rewrite == ‘Y’)
{
$reurl = $GLOBALS['cfg_cmsurl'].”/list-{$typeid}.html”;
}
else
{
$reurl = $GLOBALS['cfg_phpurl'].”/list.php?tid=”.$typeid;
}

最胡在数据库中运行如下命令:

update dede_archives set ismake=-1;
update dede_arctype set isdefault=-1;

备注:这样修改首页并没有实现伪静态,这样修改已经满足我的需求了,修改一下模板或者增加点全局的东西,不用全部重新生成一遍,几十万篇文章,全部生成一遍简直就是噩梦

发表在 Excellence Article | 标签为 , , | 一条评论

实时统计搜索引擎抓取

先来看一张图:
tcpdum
这是一个简单的脚本,利用Tcpdump将当前网络包加以分析,把带有rebot标识的agent输出到终端,代码如下:

tcpdump -i eth0 -l -s 0 -w – dst port 80 | strings | grep -i user-agent | egrep -i ‘bot|crawler|slurp|spider’

  • 关于Tcpdump的解释看维基百科
  • eth0是网卡接口,有可能你的不是这个名字,请运行ifconfig命令确认自己的网卡接口名称
  • 这个脚本只是根据User Agent 来识别蜘蛛,如果有不轨者修改了自己的User Agent在访问,也会显示在这里
  • 本脚本的意义不在于显示在终端上好玩,而是可以通过运行后台进程,然后将信息记到log中,再用一些简单的脚本就能大致统计出,各个搜索引擎的抓取次数、频率等
  • 发表在 Operating System | 标签为 | 留下评论

    rsync ssh 无密码增量同步设置

    A:192.168.0.1 (目标/需要同步服务器)
    B:192.168.0.2(备份服务器)

    A:
    yum -y install xinetd
    vi /etc/xinetd.d/rsync
    将“disable = no”
    chkconfig xinetd on
    service xinetd start
    vi /etc/rsyncd.conf
    [site] #name
    path = /var/www/html #copied directory
    hosts allow = 192.168.0.2
    hosts deny = *
    list = true
    uid = root
    gid = root

    在B上的命令:
    # ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
    # ssh root@192.168.0.1 “mkdir .ssh;chmod 0700 .ssh” (需要输入密码)
    # scp ~/.ssh/id_rsa.pub root@192.168.0.1:.ssh/id_rsa.pub (需要输入密码)

    在A上的命令:
    # touch /root/.ssh/authorized_keys2 (如果已经存在这个文件, 跳过这条)
    # cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys2 (将id_rsa.pub的内容追加到 authorized_keys2 中)

    回到B机器:
    # ssh root@192.168.0.1 (不需要密码, 登录成功)

    #vi /etc/rsync_exclude.lst #这里写你排除的目录或文件
    no.txt
    nono.txt

    #rsync -avz –delete –rsh –exclude-from=/etc/rsync_exclude.lst 192.168.0.1::site /home/backup

    #crontab -e

    00 02 * * * rsync -avz –delete –rsh–exclude-from=/etc/rsync_exclude.lst 192.168.0.1::site /home/backup

    发表在 Operating System | 标签为 | 3 条评论

    500 OOPS: cannot change directory错误

    其实这个错误都遇到过好几次了,就是因为默认centos selinux限制了,不过今天居然一时没想起来

    现在再做个记录吧:

    他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:
    500 OOPS: cannot change directory:/home/ftp
    原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。
    //查看SELinux设置
    # getsebool -a|grep ftp
    ftpd_disable_trans –> off
    或者
    ftp_home_dir–>off
    //使用setsebool命令开启
    # setsebool ftpd_disable_trans 1
    或者
    # setsebool ftp_home_dir 1
    //查看当前状态是否是on的状态
    # getsebool -a|grep ftp
    ftpd_disable_trans –> on
    或者
    ftp_home_dir–>on
    //setsebool使用-P参数,无需每次开机都输入这个命令
    # setsebool -P ftpd_disable_trans 1
    或者
    # setsebool -P ftp_home_dir 1
    # service vsftpd restart

    有关selinux的配置

    如关闭,仅仅警告,强制等等 需要编辑/etc/sysconfig/selinux 默认是强制

    或者直接SELINUX=disabled 禁止掉

    不过要服务器重启才生效

    发表在 Excellence Article | 标签为 , | 留下评论