• 初识PostgreSQL

    最近开始了解一下PG的东西,这之前,先来了解一下历史(八卦),同时也拜拜大神Michael Stonebraker

    PG的历史

    关于PostgreSQL的历史,官方和一些参与者现身说法,已经可以”多角度”、”立体”看到比较完整PG历史了。PG的前身Ingres,和System R同是最早关系型数据库践行者。有人用Graphviz绘制的一个关系数据库发展历史,可以看到PG在关系型数据库历史中的地位,以及它对后续Informix、Sybase、SQL Server的巨大影响(大图慎入:RDBMS-timeline 对应的github项目)。

    前身:Ingres

    折腾PG之前都是要拜一拜Michael Stonebraker的。

    1970年,在Codd发表了关系型数据库的论文,1973年,IBM的System R研究小组也发表了关于实现的系列论文之后,Michael Stonebraker开始和学生一起做关系型数据相关的研究并成立了项目Ingres,“Interactive Graphics and Retrieval System”的缩写,原本该项目经费是计划用于地理信息数据库系统的研发(参考)。在当时,Ingres相比System R是一个运行在低端机器的(“low end”,相对于大型机 “big iron” IBM mainframes)产品。到后来,80年代初期,“低端机器”的性能和容量已经开始威胁到“大型机”。这时,Ingres以一个类似BSD的协议发布,很多公司就开始在“低端机器”上基于Ingres发布自己的商业产品。顺势,Michael Stonebraker和一些fellow成立了Ingres Corporation,公司随后出售给 Computer Associates。

    曾经一度,Ingres是和Oracle竞争的产品(“head-to-head“),这两个产品都被认为是当时的硬件无关的关系型数据库产品。甚至在当时,无论从功能、性能、市场份额、价格,很多人都认为Ingres更加优秀(参考)。但从85年开始,Oracle通过更具侵略性的市场策略;再加上当时SQL语言逐渐被更多人开始接受,而Ingres仅支持自己实现了查询语言QUEL,慢慢的Ingres失去自己的市场份额。

    目前Ingres仍然在发展,在这里可以下载到它的最新版。 (more…)

  • limbo

    很早在一篇介绍《时空幻境》(Braid)游戏的文章中提到了Limbo,这次在iPad排行榜再看到这个游戏,果断购买,并在七月份的某个周六通关,期间有好几个地方”卡壳”了很久:经常被困在一个小小的地方,探索了所有可以探索的东东,但是还是找不到出去玄机,反复如此,又不想查攻略认输,心里那个憋屈,玩过类似解谜游戏的人大多能够明白这种心理。侥幸,一次次当我耐心耗费接近极限的时候,总能绝处逢生,找到反复查看仍然被遗忘的线索。也偶尔有几个需要极限操作的地方,retry过若干次后,概率总能帮我挑战成功。

    我眼里的Limbo故事

    在较为顺利的通关后,开始想想这个游戏到底是在讲述一个什么故事:

    故事开始,主人公在深林中醒来,这里充满腐烂、飞虫、和黑暗,就这样,开始我们的探险。在这个世界里,到处都充满了危险,突然袭来的电锯、从天而降的巨石、硕大的怪物蜘蛛、反常的地心引力、还有能够夺走自由行走能力的小虫,通过无数次的挣扎,最后,终于冲破“水面”,逃出了这个世界。 (more…)

  • 在可见的未来预计GFW还会发威很多次,比如每年都有六月四日,还可能有艾未未这样较真的人,社会发展的车轮会不断的羞辱GFW,恼羞成怒之后就会发威。即使除了这些,GFW还会误伤很多网站和基础服务,比如Google Docs、Gmail等等。所以一个稳定的VPN服务就很有必要了。

    翻墙有多方法,如ssh tunnel/goagent/VPN等,各有优缺点,本文*概述*使用VPN自由的访问互联网服务。 (more…)

  • 不想糊里糊涂,所以整理了一下思路。因为财年关系,最近很多朋友私下在讨论薪水、年终奖、加薪、option。窃以为这是一件很让人沮丧、且没必要的事情。

    1. 了解薪水待遇的大趋势是有必要的

    对于很多人,工资通常是家庭收入的主要甚至是唯一来源,高低直接影响着家庭的生活品质。所以对各个公司的薪水体系有个大致的了解,知道怎样的努力会获得怎样的回报,是很有必要的。

    到网上稍加搜索,几家大公司(例如BAT)各个主要层级的薪水待遇都能查到大概的区间,和商品价格一样,薪水高低通常是“个人价值”和“供求关系”的综合反映,通过了解薪水的概要信息,可以让你知道,什么类型的人才、技术是公司比较需要的。如果你在对应层级,偏差太大,那可能需要仔细想想为什么。

    2. 薪资HR的职责

    让薪资和个人贡献成正比,相信这也是很多薪资HR的一个目标(应该是这样吧?)。这一点需要成为整体趋势,要让绝大多数人知道就是这样的。

    3. 打听薪水

    很多公司都是“明文”规定同事之间严禁打听薪水的。不过根据观察,朋友直接通常还是会互相打听。极端一点来说,打听之后就两种心态:“啊!竟然比我工资高!! 凭什么!!! 郁闷!!!!”;“啊!他也就值那么多吧!!”(是的,跟开车差不多)。除非你Top1,否则总有几个人,职位、水平差不多,但工资比你高的,遇到这种情况,多半是要郁闷很久的,关键是郁闷归郁闷,你什么也改变不了。

    “郁闷”可能导致“消极懈怠”,进一步降低工作效率,再进一步导致糟糕“公司业绩”,最后,再导致“薪水下降”,再继续“郁闷”。这是一个很糟糕的恶性循环。

    在知道行业大致薪资的情况下,打听到具体某个人的薪水,除了满足了“好奇心”,还有什么好处吗?(评论回复一下呗) 我感觉是没有的。

    4. 好奇心

    虽然,都明知打听之后,得知”别人”比自己高,只会很郁闷,而且会郁闷很长时间,或者四处抱怨。其他什么都改变不了。但是还是忍不住,这大概是“好奇心”在作怪吧,这里建议,还是把好奇心放到别的地方去吧,放到你的工作中,或者放到别的兴趣爱好上。

    5. 朋友之间打听薪水

    一般,能够成为朋友,都是在某一个或者多个方面有相同的“兴趣爱好”,工资多一点、少一点都完全不会影响这些“兴趣爱好”,所以知道对方薪水不会增强“友谊”(如果成年人的世界还有友谊的话)。相反,知道彼此薪水后反而会有意无意给对方打上标签,这很不好。

    打听薪水,两个人总有一个人偏低的,如果是朋友,何必要让一个人郁闷呢。有人说,共享秘密会增加感情,那让我们共享一些别的秘密吧。

    6. 小结

    基于这些思考,“打听薪水”通常是没有什么收益,坏情绪却很多。所以,给自己定下规矩:不再打听朋友们的薪水,也不再回答朋友的此类问题。

    真正的朋友,也就不要再打听对方的薪水了。我们可以谈谈别的,比如其他人的薪水…

  • mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等。本文介绍一下如何使用mysqladmin extended-status(因为没有”歧义”,所以可以使用ext代替)了解MySQL的运行状态。

    1. 使用-r/-i参数

    使用mysqladmin extended-status命令可以获得所有MySQL性能指标,即show global status的输出,不过,因为多数这些指标都是累计值,如果想了解当前的状态,则需要进行一次差值计算,这就是mysqladmin extended-status的一个额外功能,非常实用。默认的,使用extended-status,看到也是累计值,但是,加上参数-r(–relative),就可以看到各个指标的差值,配合参数-i(–sleep)就可以指定刷新的频率,那么就有如下命令:

    (more…)
  • 随着各种SNS流行,写博客的人也越来越少,就连“博客伴侣”–Google Reader也关停了,写博客作为一个很好的分享和个人积累平台,一直坚持下来了,还将坚持下去。本文介绍自己如何在VPS上搭建自己的博客,这里使用”老派”的LAMP。随着云计算的流行,相信类似需求的人会增多,希望这篇博客能对其他人有点作用。

    1. 选择虚拟主机(VPS)

    这就是一件很烦人(因为穷)的事情。

    如果选择国内主机,则可以考虑阿里云,基础配置单核/512MB/5Mb带宽每年价格大概在650左右,如果放弃独享带宽(个人博客应该无所谓),则可以降价到460块。

    如果是国外主机的话,选择就比较多了,常见的有Linode,内存1GB的每年月1300元左右,因为有日本机房,所以对国外的主机来说,通常Linode速度更快(通常100ms-200ms);Dreamhost的VPS低配,300MB内存,每年约900元左右。常见选择还有Godaddy、budgetvm(便宜)等。

    我选择的是digitalocean,因为便宜,使用1个月了,速度也很稳定。

    digitalocean是最近兴起的极简云主机,号称55秒完成部署。整个购买、使用、付款都非常简洁,最大的特点是便宜,另外SSD硬盘也是一个亮点,经测磁盘性能确实不错,不过因为机房主要在欧美(纽约、旧金山、阿姆斯特丹)离国内都比较远,所以延迟较大,约300ms(ping一下我的博客就知道了,想想每次放我的博客,数据都从纽约过来,也就不觉得慢了)。价格比较便宜,360元每年,512MB内存,20GB磁盘。今年8月,digitalocean获得种子投资3百万美元2012年从TechStars孵化出来。非常喜欢digitalocean的极简原则,别人在把功能做多,他在把功能做少。希望,自己以后的工作也能够是这个样子,现在这份工作是没戏了,不好意思,说多了。

    2. 安装httpd+MySQL+PHP

    博客使用的是WordPress,需要PHP环境运行,这里选择了LAMP。安装非常快捷

    yum install httpd
    yum install mysql
    yum install php
    yum install php-mysql
    service httpd restart
    service mysqld restart or mysqld_safe &

    在MySQL中建好Wordpress需要使用的数据库用户。然后将Wordpress代码放到httpd的web目录中,在通过浏览器访问Wordpress就可以完成其配置。

    3. 配置httpd和MySQL的内存使用

    默认按照通常都能够跑起来,不过,如果按照默认配置跑,512MB很快会爆掉,从而出现OOM:

    Out of memory: Kill process 27968 (mysqld) score 146 or sacrifice child Killed process 27968, UID 27, (mysqld) total-vm:264472kB, anon-rss:73204kB, file-rss:36kB

    3.1 MySQL的配置

    设置50MB的InnoDB缓存空间,用于将Wordpress的内存缓存到内存中:

    innodb_log_buffer_size=30MB

    InnoDB的日志文件设置两组,每组50MB(这是消耗磁盘空间):

    innodb_log_file_size=50M innodb_log_files_in_group=2

    这样MySQL内存使用能够限制在约50MB。

    3.1 httpd的配置

    httpd配置需要特别注意,默认配置内存消耗可能很容易超过512MB的限制。httpd2.2版本,默认情况httpd使用模块置prefork来多线程管理。它的默认配置是:

    <IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000</IfModule>

    这意味httpd最多可以起256个进程处理请求,每个进程约占用35MB(RES),而且只有闲置进程超过20个(MaxSpareServers)才会清理,所以,这个配置下,通常都有20个进程常驻,内存使用就很容易超过512MB了。

    下面是修改后的配置:

    <IfModule prefork.c> StartServers 3 MinSpareServers 2 MaxSpareServers 4 ServerLimit 256 MaxClients 10 MaxRequestsPerChild 100</IfModule>

    这样最大并发是10个进程,当限制进程超过4个的时候,就开始kill。对于我这种低压力个人博客,已经够了。

    最后,通常httpd使用模块prefork或者worker维护多线程,在这篇文章中Apache – prefork vs. worker mode, how to check mode and more,介绍了:(a)如何区分你使用哪个模块;(b)如何配置使用哪个模块;(c)他们的优缺点。

    4. 配置swap

    digitalocean的VPS默认是没有swap,所以内存一旦超出,则会立刻发生OOM。因为digitalocean以ssd为特点,所以直接用其磁盘来做一个swap分区弥补内存补足是非常好的。

    操作参考:Linux Add a Swap File – Howto

    在这自己购买VPS之前,一直蹭用Ningoo的Dreamhost主机,感谢。

    后续还会再考虑测试使用Google App Engine和Amazon AWS。