我最喜欢的电台是什么?当然是北京FM91.5轻松调频啦。 What’s you…

我最喜欢的电台是什么?
当然是北京FM91.5轻松调频啦。
What’s your favorite radio station?
It’s definitely Beijing FM 91.5 EasyFM

在iPhone上我可以订阅EasyFM的一些Podcast,还可以通过WunderRadio收听在线的版本。iPod nano可以收到,AIWA的收音机可以受到,家里现在有个大收音机解决了信号不好的问题。That’s so cool!

I subscribed some podcast from EasyFM, and I also listen EasyFM online by WunderRadio on my iPhone. I can receive EasyFM radio through my wife’s iPod nano, a old portable AIWA FM radio reciever and a advanced big radio receiver at home ,it fixed the bad signal issue. Sweet!

Inception

盗梦空间 Inception

道姆·柯布(莱昂纳多·迪卡普里奥 Leonardo DiCaprio 饰)与同事阿瑟(约瑟夫·戈登-莱维特 Joseph Gordon-Levitt 饰)和纳什(卢卡斯·哈斯 Lukas Haas 饰)在一次针对日本能源大亨齐藤(渡边谦 饰)的盗梦行动中失败,反被齐藤利用。齐藤威逼利诱因遭通缉而流亡海外的柯布帮他拆分他竞争对手的公司,采取极端措施在其唯一继承人罗伯特·费希尔(希里安·墨菲 Cillian Murphy 饰)的深层潜意识中种下放弃家族公司、自立门户的想法。为了重返美国,柯布偷偷求助于父亲迈尔斯(迈克尔·凯恩 Michael Caine 饰),吸收了年轻的梦境设计师艾里阿德妮(艾伦·佩吉 Ellen Page 饰)、梦境演员艾姆斯(汤姆·哈迪 Tom Hardy 饰)和药剂师约瑟夫(迪利普·劳 Dileep Rao 饰)加入行动。在一层层递进的梦境中,柯布不仅要对付费希尔潜意识的本能反抗,还必须直面已逝妻子梅尔(玛丽昂·歌迪亚 Marion Cotillard 饰)的处处破坏,实际情况远比预想危险得多…… 

我仅借上这么个引子,是说我的老婆和我的故事。

这段时间老婆睡眠不好,经常有噩梦,甚至有时半夜会哭醒。我最为丈夫当然要细心开导。我这个人很信任心理暗示的作用,所以就希望通过心里暗示的方法让老婆给自己植入一个想法,客服噩梦带来的麻烦。

老婆最近的噩梦有两种主题(这个其实是我老婆的隐私,不过说来无妨):

  • 梦到小的时候上课老师让回答问题,被刁难,或者考试有难题做不出来,非常着急和委屈。
  • 梦到长相可怕的人吓唬她

因为老婆对我总是很信任,并且觉得我很聪明,所以我就想以此作为基础让她对自己有心理暗示。主题就是这样:“无论何时Tin都会在我身边帮助我的。” 结果还真的不错,老婆后面一周的睡眠恢复了很多:

  • 第一种梦境她会梦到我告诉她如何回答,然后进很自豪了。考题的时候她会梦到我回家给她讲题。这些场景就基本上不会成为噩梦了,而是一种有压力但是最后会缓解的场景。而且这个时候她基本上会意识到自己在做梦了。
  • 第二种情况因为她基本上都能梦到我在身边,所以很少梦到遇到长相恐怖的人的梦境了。

我还满心欢喜这Inception植入的不错。但是,电影里面就说过,一个看似聪明的Inception总是会被做梦者潜意识的保护所破坏,最终的结果就是通过另外一个梦把做梦者带回原来相似的困境中,也就是噩梦。我们尝试的这个心理暗示,最后果真还是被另外一个梦弄得失效了,而且这次又把我亲爱的老婆吓醒了,对她的打击似乎比上次还要严重。所以这已经在警告我不要尝试通过暗示的方式让Inception影响你的梦,这种Lucid dream其实更真实也就更可怕。

我老婆梦到了什么呢?简单来说就是她梦到她非常信任的我出了问题。她梦见我变得非常落魄和消瘦,但是依然甜蜜的迎接她回家,这个场景让她很难受。其实这就是对我们尝试暗示给自己的东西的一个反驳,因为每次用了很强烈的意识说我是保证她的梦安全的人,但是如果我出了问题,那么这个梦就崩溃了。

我现在真的很后悔自己干预她的梦。而且也许我们要通过调节睡眠节奏的方式来减少做噩梦的情况了。现在观察的结果就是白天睡眠过多或者睡前喝水太多容易引发这种强烈的梦。所以我们准备从这方面解决问题。不能再尝试通过暗示的方式来做了,那样最后我们两个都心疼了。

这篇blog献给我亲爱的老婆

最简单的说,最有用的是这篇教程《Debian上安装l2tpd/IPSec VPN…

最简单的说,最有用的是这篇教程《Debian上安装l2tpd/IPSec VPN服务》
在Linode的Ubuntu 9.04 (jaunty)上面安装L2TP,由于参考了apple4.us的这篇文章《如何在 Debian / Ubuntu 服务器上架设 L2TP / IPSec VPN》,所以没有配置成功,主要原因是ubuntu上面的openswan版本和这个配置不相符,强行配置是会失败的,照猫画虎难度很大(而且我现在用的jaunty的openswan根本就配不通)。
主要卡在sudo ipsec vierify上的两个disable上面:
Checking for RSA private key (/etc/ipsec.secrets) [DISABLED]
ipsec showhostkey: no default key in “/etc/ipsec.secrets”

Opportunistic Encryption Support [DISABLED]
后面的这个Opportunistic Encryption因为oe=off这个配置不对,所以总是提示很多问题。
后来经过了很多无助的搜索才发现了这篇《l2tp vpn搭建总结(linode ubuntu)》,解释了这个不要紧:

其中需要注意两项:Checking for RSA private key和Opportunistic Encryption Support,第一项其实你大可不必管他,disable或者ok都行。如果你实在要解决,可以:

ipsec newhostkey –file /root/tmpkey
cat /root/tmpkey >> /etc/ipsec.secrets
rm /root/tmpkey

然后,疑问都解决了发现没有仔细阅读《Debian上安装l2tpd/IPSec VPN服务》,人家说

如果客户端连接显示“server did not respond”,通常说明openswan的版本不对,Debian Lenny自带的版本貌似有些问题。在命令行运行如下命令,即可安装openswan-2.6.24:

sudo aptitude install libgmp3-dev gawk flex bison
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar xf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs
sudo make install
sudo apt-get remove openswan
sudo /etc/init.d/ipsec restart

卸载openswan并自己编了新的版本后果然就OK了。注意调试的时候应该看/var/log/syslog和/var/log/auth.log。

登root的时候发现: You have new mail in /var/ma…

登root的时候发现:
You have new mail in /var/mail/root
原来是有很多root邮件没有传递,查了一下可以这样做,修改/etc/aliases:
root: your.gmail.account@gmail.com
然后sudo postalias /etc/aliases就好了,root邮件就会被传递到你的gmail邮箱。当然我的情况是在ubuntu下使用postfix,否则修改的位置略有不同,谷歌一下。

昨天调试服务器上的L2TP,sudo -i了一下,发现root根目录有好多好多的…

昨天调试服务器上的L2TP,sudo -i了一下,发现root根目录有好多好多的wp-cron留下的垃圾文件,原来是我的crontab写的有问题:

*/5 * * * * /usr/bin/wget http://www.ermiao.com/wp-cron.php?doing_wp_cron >> /home/public_html/ermiao.com/log/wp-cron.log 2 >> /home/public_html/ermiao.com/log/wp-cron.err

因为默认情况下wget会把文件下载到home目录下,而且它还会自动重命名,结果文件越来越多……

解决方法就是增加下载后删除的参数,并且让它quiet运行。

*/5 * * * * /usr/bin/wget -q --delete-after http://www.ermiao.com/wp-cron.php?doing_wp_cron >> /home/public_html/ermiao.com/log/wp-cron.log 2 >> /home/public_html/ermiao.com/log/wp-cron.err

OpenParty的新网站的Django项目使用了South这个migratio…

OpenParty的新网站的Django项目使用了South这个migration工具。可是刚才增加了一个Model以后却无论如何都无法生成这个migration。

./manage.py schemamigration core --auto

上面这个命令每次都提示:

Nothing seems to have changed.

很郁闷。试验了看是否是South或者Django的版本问题,都升级到最新版依然有这个问题。看了google groups里面也没有人报有这个问题。于是仔细搜索问题的来源,最终发现是这个原因:

class Meta:
app_label = 'core'

上次我们Team重构项目的时候去掉了项目的openparty前缀,使用相对路径import,结果造成”core”项目实际上是存在”apps.core”下面的。所以,需要用Meta类告诉Django实际上对应的app名称。结绳记事。

Leopard下如何让你的sudo不需要输密码

在Snow Leopard的Terminal里面用sudo的时候总是需要输入密码,而在单位的FreeBSD服务器上则不需要。我觉得从安全角度来说这个密码用处不大,有了反而会浪费时间。

搜索了一下,发现要这样做

修改/etc/sudoers文件(记得sudo vi它,存的时候要w!),去掉这一行前面的#号:

%wheel ALL=(ALL) NOPASSWD: ALL

然后执行下面命令,记得将your_username替换为你的用户名:

sudo dscl . append /Groups/wheel GroupMembership your_username

从此就不需要在sudo的时候输入密码了。

Cassandra的一致性级别

翻译Cassandra文档中的一段。

写一致性级别Write

ZERO
不保证一致。写操作在后台异步执行。除非CASSANDRA-685 修正,否则当太多写错作排队的时候,buffer会膨胀,后果很坏。
ANY
(需要0.6的Cassandra)保证至少写入到1个节点中,包括示意(hinted)的接收者。
ONE
保证写操作在回复客户端前至少已经进入1个节点的commit log和memory table。
QUORUM
保证写操作在回复客户端前至少被写入到 (<复制因数> / 2 + 1)个节点中。
ALL
保证写操作在回复客户端前已经被写入到 <复制因数> 个节点中。任何节点如果没有响应,则操作失败。

读一致性级别别Read

ZERO
不支持,因为没有意义。
ANY
不支持,应该使用ONE来代替。
ONE
将会返回第一个有响应结果的节点返回的数据。在使用ConsistencyLevel.ONE的时候,一致性检查永远是在后台线程中来修复一致性问题。这意味着如果开始的读取得到了旧数据时后续的调用可以返回正确的数据(这叫做读取修复 read repair)
QUORUM
查询所有的节点,一但绝大多数复制节点返回了结果,返回具有最新的时间戳的纪录。其余复制节点的结果会在后台进行检查。
ALL
查询所有的节点,一但所有复制节点返回了结果,返回具有最新的时间戳的纪录。任何节点如果没有响应,则操作失败。

The Perfect Is the Enemy of the Good

The perfect is the enemy of the good. The best is the enemy of the good. – Voltaire

Nothing is perfect and waiting for the perfect moment or killing yourself trying to ensure that every thing your hand touches is done perfectly is a sure way to not get anything done at all.

Getting caught up in the idea that your desk, work bench, house, or office must be in perfect shape for you to really get stuff done can just as easily result in getting nothing done. Learn to recognize what’s good enough.

Perfectionism kills me.

回复一位敬佩的前端工程师kejun的一篇博文,更好的标注UI规格 我能理解作为前…

回复一位敬佩的前端工程师kejun的一篇博文,更好的标注UI规格

我能理解作为前端工程师为什么希望这样标注,但是这些标注的实用价值很低,原因如下:

  1. 这些标注都是“文档”,或者说“契约”。过度详细的契约对产品的实现没有帮助。敏捷宣言里面说可用的软件重于完备的文档。
  2. 之所以会产生这些文档,沟通是问题。如果前端和Graphical designer不在一个团队,就会希望通过契约解决沟通问题,这样只能让沟通更低效。而且在这篇文章中所说的标注的方式的区别,是因为Graphical designer和前端工程师的“语言“不通,解决方法就是更加紧密的坐在一起工作,但是指望两个人用同样的思想沟通是不现实的。
  3. 精确到像素的设计(Hifi prototype)真的应该精确到像素么?敏捷软件开发是迭代的。产品应该可以持续的release,每个release前都有验收和验证,对于像素级别的精确如果在验收的时候能够发现,说明这个精确到像素的设计是有意义的,那么我们才需要花更多的时间去优化它。否则它也许是可以忍受的。所以,预先设计的过程中的精确到像素的约定不如退而求神似,这样对迭代也更加有利。