{Functional} 了解 Y combinator

原文:Deriving the Y combinator 作者:James Coglan 译者:Vayn a.k.a. VT <vayn at vayn dot de> 在开始前:注意,我写这篇的主要动机是强迫自己理解自己所写的东西。如果你领悟到内容之外的什么,请把它当做额外奖励。我将用 JavaScript 实现 Y(),之后给出一个 Ruby 版的。... Continue reading

{Python} Python 3 安装手记

长久以来偶一直徘徊在 Python 2 的世界里,但介于某人的长期感召,偶终于决定尝试 Python 3. 具体点说,就是在 Python 3.2 中运行 Greenlet…… 偶本以为会很轻松的完成任务,没想到在运行程序的时候竟然出现这样的提示—— xxx undefined symbol: PyCObject_FromVoidPtr 这是怎么回事?放狗一搜,找到最靠谱的一条贴子是 Python 3.1.1 with... Continue reading

{Diary} I Love Vim

好像又有很长时间没更新 blog 了,真的是越来越懒了啊哈哈。最近学了不少新东西,也做了一些小作品。好长时间不动笔,都快忘了该怎么良好的组织语言。 Vinergy 以及 p.vim-cn.com Vinergy 是依云(lilydjwg)和我合作开发的一个 Pastebin 程序。 Vinergy 使用了 web.py 框架,web.py 小巧玲珑但功能还是很全的,而且部署起来也很方便。数据库方面,采用了 MongoDB 来储存数据。对于 Pastebin 这样的应用,MongoDB 的快速高效的优点能得到很大的发挥,schemaless... Continue reading

{Diary} "Hackers and Painters" Note 4

12 拒绝平庸 P176-177 只要这位程序员向曲线下方望去,他就肯定知道自己正在看的是一些比较低层次的语言。因为那些语言明显不如 Blub (作者假想的一种语言)强大,缺少他习惯使用的某些功能。但是,当他向曲线上方望去,他不会意识到自己正在看更高层次的语言,而是仅仅觉得自己正在看某些奇怪的语言。他可能认为那些语言也许与 Blub 一样强大,但是加入了不少怪东西。他觉得 Blub 语言已经够用了,不用再考虑那些语言了。这时,他的思维就是已经被 Blub 同化了。 通过归纳法我们就会知道,唯一洞悉所有语言优劣的人必然是懂得最强大的那种语言的人。(这大概是埃里克.雷蒙德所说的 Lisp 语言使你成为一个更好的程序员的意思。) 希望我还没有被哪一种语言同化。 与其说 Lisp 有一种很奇特的语法,还不如说它根本没有语法。一般的源代码程序经过编译器解析会生成解析树。Lisp 的奇特之处就在于,你可以完全写出程序,控制这种解析树,进行任意的存取操作。Lisp... Continue reading

{Diary} "Hackers and Painters" Note 3

7 关注贫富分化 P112-113 你到海外旅行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看他们的财富就行了:建筑、街道、服装、健康。 每个人的技能不同,导致收入不同,这才是贫富分化的主要原因,正如逻辑学的“奥卡姆剃刀”原则所说,简单的解释就是最好的解释。 但为什么基尼系数越大,这个社会就越危险呢,不是应该每个人都安现状吗? 如果可以做选择,到底是生活在一个整体上非常富裕但是我个人相对贫穷的社会,还是生活在一个我个人相对非常富裕但是整体非常贫穷的社会?(Vayn:想起巴西的贫民窟和绑架)我会选择第一个选项。 总的来说,你要避免的是绝对贫穷,而不是相对贫穷。 从人类历史上来看财富当然是不断增加的,但对你所生活的每个时期而言财富的数量却是有限的,你占有的越多别人自然就越少。之前作者所说的财富更像是在原始财富上产生附加值,问题在于原始财富累积是一个缓慢过程。 我觉得本章作者更像是为自己所处的阶级辩护而不是提出有建设性的建议。他一边说富人(当然是有合法收入来源)赚大钱是应该的,这与人的挣钱技能相关,所以贫富分化是应该的。但实际又不想生活在一个真正贫富分化的社会,因为这样的社会非常危险、动荡不安。 当然,作者本身提出的新观点是很有意思的。世界这么大,要是每个人的想法都一样才是最可怕的。 9 设计者的品味 P134-142 把品味说成个人的偏好可以有效杜绝争论,防止人们争执哪一种品味更好。但是问题是,这种说法是不正确的。只要你自己开始动手设计东西,就能明白这一点。 优秀设计的原则是许多学科的共同原则,一再反复地出现。 只要没有错误,每一个数学证明都是永不过时的。所以,数学家哈代才说:“丑陋的数学在世界上无法生存。”……如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已。 以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案。 未来的人不会在乎今天流行的风潮,这一点上几代人是相同的。所以,如果你的作品对今天的人们以及 1500... Continue reading

{Diary} "Hackers and Painters" Note 2

4 良好的坏习惯 P56-57 对于适当的不服从管教,保持宽容不会有太大的坏处,反而很有利于美国的国家优势,它使得美国不仅能聪明人,还能吸引那些很自负的人。黑客永远是自负的。 很自负的人培养出敏锐的感觉,及时发现周围情势的变化,知道怎样才能脱身。 为什么黑客如此在乎公民自由?为什么程序员会比牙医、销售员、园艺师更在乎呢? 公民自由并不仅仅是社会制度的装饰品,或者一种很古老的传统。公民自由使得国家富强。 在我看来,一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方案,而不是采纳最有权势的人提出的方案。专制国家会变成腐败国家,腐败国家会变成贫穷国家,贫穷国家会变成弱小国家。 经济学里有一条拉弗曲线(Laffer curve),认为随着税率的上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加后减小。 这就是为什么黑客感到担忧。 黑客对于公民自由是非常敏感的,因为这对他们至关重要。他们远远地就能感到极权主义的威胁,好比动物能够感知即将来临的暴风雨。 P58-59 人们惊慌失措时采取的措施到头来产生了适得其反的效果。 如果读美国开国元勋的自述,你会发出他们听起来很像黑客。“反抗政府的精神,”杰弗逊写道,“在某些场合是如此珍贵,我希望它永远保持活跃。” 他们提醒我们不要忘记自己从何而来,提醒我们,正是那些不服从管教的人们,才是美国财富与力量的源泉。 那些占据高位、本能地想要约束黑客、强迫黑客服从的人们,请小心你们的要求,因为你们真有可能成为千古罪人。 相较之下,我国是所谓具有五千年文明的国家,除了继承文物和古董,是不是也继承了一些包袱?除去诗词歌赋,除去道德说教,我们还应该从自己的文化中发掘什么? 5 另一条路... Continue reading

{Diary} "Hackers and Painters" Note (1)

保罗•格雷厄姆,《黑客与画家》一书的作者,硅谷创业之父。 保罗•格雷厄姆在康奈尔大学读完本科,然后在哈佛大学获得计算机科学博士学位。1995 年,他创办了 Viaweb,帮助个人用户在网上开店,这是世界上第一个互联网应用程序。1998 年夏天,Yahoo! 公司收购了 Viaweb,收购价约为 5000 万美元。 此后,他架起了个人网站 paulgraham.com,在上面撰写了许许多多关于软件和创业的文章,以深刻的见解和清晰的表达而著称,迅速引起了轰动。2005 年,他身体力行,创建了风险投资公司 Y Combinator,将自己的理论转化为实践,目前已经资助了 80 多家创业公司。 2 黑客与画家 P22-23: 编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该一支铅笔,而不是一支钢笔。... Continue reading

{JxLab} Sudo Robot

Sudo Robot 是构建在 Google App Engine 上的一个机器人程序,添加 [email protected] 到你的 Gtalk 或其它支持 XMPP 协议的聊天软件之后,就可以和 [Sudo Robot] 对话了。 [Sudo Robot] 能够为你提供最新的天气情况,还可以推送包括 Pinboard,... Continue reading

{JxLab} TAPP V2

去年的时候和 @disinfeqt 合作制作了 TAPP,这个软件不是 twitter 的 web 客户端,但可以让你更轻松的查看和展示自己在 twitter 上发布的消息。 TAPP 支持 JSON、RSS和 HTML 这三种格式输出消息。生成类似 Twitter 那种 Badge 或签名图,你可以把它们嵌入 blog... Continue reading

{JxLab} Antidote

之前的文章有提到最近做了一个名叫 Antidote 的应用,一开始纯粹是为了自己管理文章方便做的,但求能用,所以连外观什么的也没弄,基本算是裸奔。 今天晚上花了点时间拾掇了一下,就做个正式发布吧,呵呵。 Antidote/Red 如果你使用 Github 来托管自己的 blog,那么你就应该知道 Jekyll。Jekyll 是一个非常简洁的 blog 软件,Github 就使用它来解析各种文本文档。不过使用 Jekyll 的时间长了,你就会发现创建符合 Jekyll 格式文档的步骤有些繁琐,而且文档的管理也不太方便。 Antidote 就是为了解决这些不大但有点头疼的问题而写些的。... Continue reading

{JxLab} Vim Documentation Chinese Version eBook

“吾辈之内领悟此书者,非英雄即枭雄。”——佚名 Vim 里秘藏了太多的黑魔法,要想掌握这些魔法没有一本称手的 Vim 魔法指南是不行的。在众多指南里最权威的莫过于 Vim Documentation(以下简称 Vimdoc),正所谓“One doc to rule them all”是也。感谢中文 Vim 用户里的先行者将 Vimdoc 译成中文的 Vimcdoc,有了Vimcdoc 就能更好的学习 Vim... Continue reading

{Python} 颜色转换小工具

之前学着写俄罗斯方块的时候参考了很多已有实现,其中有个是用 PyQt 实现的。代码中绘制方块的方法很有意思,它是把方块分成“明边、暗边、主体” 3 个部分。所谓明边、暗边是指在主体颜色的基础上对颜色的亮度进行增减,以产生立体效果。在 Qt 的 QColor 类里有专门的 darker 和 lighter 方法得到明暗变化后的颜色。 我在写 Pytris 的时候也曾想用类似的方法绘制方块(虽然最后没这么做),于是山寨了一下 QColor::darker 和 QColor::lighter。刚开始是想直接从 PyQt... Continue reading

{Python} Django 中 ManyToMany 的关联方法

什么是 ManyToMany? 举个简单的例子,一本书可以有一个或多个作者,而一个作者可以写多本书,那么对于书和作者来说,他们的关系就不是一一对应的,而是多对多(也就是 ManyToMany)。在 Django 的 model 中,有个 ManyToManyField 专门来处理这种关系。 我写了个小应用来的管理 blog 的文章,因此我设计了这样的 model: class Tag(models.Model): name = models.CharField(max_length=30) class... Continue reading

{JxLab} Pytris

我想很多程序员之所以与程序结下不解之缘,最大的原因就是小时候被电子游戏里神奇的声光效果勾起了探索的好奇心,至少我是这样。制作游戏是我一直以来的一个愿望,感谢 Python 让我有了梦想成真的机会。 大名鼎鼎的 Tetris(俄罗斯方块)应该很少有人没玩过吧,经典的七个方块造型和背景音乐可以说无人不晓。而且这个游戏本身设计并不算非常复杂,做为编程练习也非常合适。我花了很长时间学习了 Tetromino (一个 Tetris 游戏的 Python 版)的代码,然后把这个游戏重构了一遍。我把重构之后的游戏取名为 Pytris,即 Python + Tetris。 Tetris 游戏的关键在于方块之间的判断,以及方块在屏幕上位置的计算。states.py 中的 Play 类就是用来实现这些功能的。... Continue reading

{Think} 玄关、重要的事和真正优先的事(Mud Rooms, Red Letters, and Real Priorities)

Insterpaper 的 icon 里隐藏着的一篇文章,这篇文章的主题是关于“优先事项”、“计划事项”、“执行”以及“取舍”。和 Insterpaper 所提供的“read it later” 功能联想起来,似乎有一种禅机在里面。 当你按下 Insterpaper 的 “Later” 按钮时,有没有想过为什么要按下它。这篇文章为什么不值得现在读,应该什么时候读? 你选择将其推后阅读的时候,也就是说你认为现在有更重要的事情做。有意思的问题来了 ——你凭什么这么认为?而且你认为自己有更重要的事情要去做的话,你怎么还没去做,反而有时间去评价一篇文章不值得现在读? 我自知翻译水平有限,欢迎各位指点。 原文:Mud Rooms, Red... Continue reading

{Share} Shorter Link

有段时间没写 blog 了,拿个练手的玩意充数吧……下面这段脚本叫 Shorter,顾名思义就是用来生成短链的。 使用方法呢,你要先保存这段代码,然后去 dlvr.it 申请一个 API Key,替换脚本中的 YOURAPIKEY。dlvr.it 是一个很有趣的网站,它可以自动把你的 blog 文章地址转为短链后分发到 Twitter、Facebook 等等。不过我今天不是介绍 dlvr.it 的,而是利用它的 API 来生成短链。 之所以用... Continue reading

{Diary} Software List

Guake Terminal Wakoopa Cardapio Synapse Exaile conkyExaile doubanfm Gwibber-douban bti Chrome+Elementary weather-indicator Hotot Console Easy DragToGo (fx) NetVideoHunter (fx) Tab... Continue reading

{PHP} 分析 ip4_in_range 函数

在 Leechael 同学那里看到一个很有趣的检查 ip 范围的函数,刚好对这方面不熟,权当学习了。 <?php function ip4_in_range ($ip, $start, $end = null) { if (func_num_args() === 2) { if... Continue reading

{JxLab} TAPP

TAPP(点击下载)是由 disinfeqt 发起的项目。 TAPP 的目标:用最简单的手段展示你的 Twitter,无须过多设置。 TAPP 的界面设计由 disinfeqt 完成,后端代码由 Vayn 完成。 TAPP 的安装共分为两步:一、将 TAPP 上传到服务器;二、设置文件夹权限为 775。结束。 接下来从浏览器来访问 TAPP 安装目录,输入... Continue reading

{Think} Rework Note

Rework 是 37signals 继 Getting Real 之后的第二本书,同上本一样短小精悍的风格,我花了 2 个小时就读完了。 我有一些一般很难找到答案的问题,比如:每天上班学习之余,我还能做什么,怎么做;如果一个上班族既不想辞职又想创业,有什么办法;觉得自己有一堆好点子,但似乎挤不出时间来实现?这些问题在 Rework 都能找到解答。 以下是读书摘抄: 0) 他们说你们应该和 500 强做生意。见鬼去吧。我们的产品卖给 5,000,000 强。 1)... Continue reading

{Think} Benoit Mandelbrot

Z = Z^2 + C "Bottomless wonders spring from simple rules, which are repeated without end." EOF Continue reading

{PHP} PHP Performance PPT

刚看到一篇 Rasmus Lerdorf 最新的有关 PHP 性能的演讲,因为视频是放在 Vimeo 上的就不在文内嵌入了。演讲中说 PHP 一般情况下不会是性能瓶颈,并且以 WordPress 为例进行了一系列性能分析和优化。 很多的调试工具我都是头一回听到,而且全部是运行在 Linux 环境下。这让我就没办法试验了,因为我的笔记本电脑(安装有 Ubuntu)烧了,暂时没环境。不过文中的优化措施和调试工具的使用的确让我大开眼界,我总算知道 Hiphop 是什么了…… 文章的结论值得深思,在这里做以转载: •... Continue reading

{JxLab} 中国的超级防火墙如何让我们更有效率(How China’s Great Firewall Can Make Us More Productive)

原文:How China’s Great Firewall Can Make Us More Productive By Aza Raskin 翻译:Vayn a.k.a. VT <vayn at(not spam) vayn dot... Continue reading

{PHP} PHP 快速分析器(PHP Quick Profiler)

原文:PHP Quick Profiler By Ryan Campbell 翻译:Vayn a.k.a. VT <vayn at(not spam) vayn dot de> 在我们公司,代码审计在制作优质软件的开发进程中是一个不可分割的部分。我们开发 Wufoo 的时候选择了 mentor style... Continue reading

{Jxlab} 良好写作的重要性(The Importance of Writing Well)

原文:The Importance of Writing Well by Chris Campbell 翻译:Vayn a.k.a. VT <vayn at(not spam) vayn dot de> 三年前,当我们刚刚开创 Wufoo 时,如果你问我什么技能是我想像黑客帝国里那样立即下载到大脑以助我们创业成功,我也许会选择某个专业领域的技能,比如高阶... Continue reading

{JS} Head Rush Ajax 笔记

Head Rush Ajax 这本书很适合新手学习,没有大段枯燥的文字,没有过多的难以理解的理论。 下面是我练习中发现的一个小问题,mark之。 在 chapter04 的 Top 5 CD Listings 例子中,可以在 body 标签中加入 onLoad="addOnClickHandlers()" 在页面加载的时候给每个 img 标签添加 onClick... Continue reading

{PHP} 理解和应用PHP中的多态性(Understanding and Applying Polymorphism in PHP)

原文:Understanding and Applying Polymorphism in PHP by Steve Guidetti 译者:Vayn a.k.a. VT <vt at notspam elnode dot com> 教程细节 程序:... Continue reading

{JxLab} Sticky

Sticky(http://sticky.sinaapp.com) 是一个仿真便利贴网站,在这里你可以把思维的火花随手记录下来。 Sticky 的灵感来自 Nettus+ 的一篇教程,非常感谢 Nettus+ 一直以来分享的各类 web design 文章,如果你也想学习有关网络编程的知识,我推荐你访问 Nettus+。 另外还要感谢 V2EX,我对表单设计没什么经验于是就把 V2EX 的设计拿过来山寨了:P 欢迎各位朋友使用 Sticky。 目前 Sticky... Continue reading

{VBS} SAPI.SpVoice

Dim txt,sapi txt="I LOVE YOU" set sapi=CreateObject("SAPI.SpVoice") sapi.Speak txt 来自 Kaisir™ 虽然不研究 Windows 编程,但我还是觉得很赞。也许可以设置计划任务什么的,囧。 EOF Continue reading

{PHP} Project Nowhere Plus FeedCore

Project Nowhere Plus FeedCore 是什么? 简单地说,Project Nowhere Plus FeedCore 是我写的添加了 feed 导入功能的 Nowhere。 如何使用? 登录 Nowhere,在右上角会出现一个新的选项“导入”,点击即可开始导入 feed。 目前支持以下网站的导入: Twitter, Wakoopa,... Continue reading

{PHP} Dictionary Web API

先来个 Google Translate API 自制版 Notice: This class has been out of data since Google Translate uses Ajax. Google Translate™... Continue reading

{PHP} Calculating Relative Path

写一个函数,算出两个文件的相对路径 如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; 计算出$b相对于$a的相对路径应该是 ../../c/d 对于此题的某一种答案,我分析了下,把分析后的代码放在这里供参考: <?php /* function foo13($path, $consult) { if($path[0] == '/')... Continue reading

{PHP} Bitwise Operator

翻看手册的时候发现好玩的东东,用位运算符(bitwise operator)来确定奇偶: 中文版的解释更明白一些。 EOF Continue reading

{CSS} Oldschool

教科书一样的 CSS 代码 :visited:hover 头回见。补习。 EOF Continue reading

{PHP} Prime

基础版: <?php $sum = 2; for ($i = 3; $i < 10000; $i+=2) { $flag = True; for ($j =... Continue reading

{Linux} 配置 SSH Key

我真是越来越懒,现在连登录服务器的密码都懒得打了,有没有什么懒人专用的办法呢?老规矩,先放狗搜一遍~ 狗狗果然搜出一大堆有关 SSH Public Key authentication(authorize?真是记不清啊~)的文章,依葫芦画瓢地实作一遍,成功! 为了不增加垃圾比特,这里就只放 URL 了,一般来说照着第一篇文章就能成功。 SSH 免密碼登入 通用线程: OpenSSH 密钥管理,第 1 部分 3.Generating SSH keys (Linux)... Continue reading

{Ubuntu} GTK Left-handed Cursor

1、在 GNOME-Look.org 下载 Aero Mouse Cursors with Drop Shadow 这套指针中的左手指针。你也可以下载别的主题,我喜欢 Aero 指针。 2、将压缩包解开,复制到 /usr/share/icons 中。 3、打开 /usr/share/icons/default/index.theme 文件,修改 Inherits=XXX 这一行, 把... Continue reading

{JxLab} Project Vaynwords

耗费整整一个晚上,我学习 PHP 以来真正自己动手完成的第一个项目 Project Vaynwords 终于上线了! 我经常用 G1 上英文网站阅读电子书,于是会碰到很多不认识的单词。一般碰到生词的时候我会顺手查一下,不过这样做有个问题——当时知道是什么意思过不了多久就会忘掉。恰巧有次查单词时 Seesmic(android 上的 twitter 客户端)提示有新消息,我就想干脆把单词发到 twitter 上好了,因此就有了单词推~ 除了发单词推我也发别的推文,后来发现这样单词推就不好找了,于是我用 hashtag 把单词推专门标记出来。可是即便如此找单词还是不太方便,而且找到的只有单词,有关单词的内容(音标、发音、解释等)还得再打开 twitter,搜索,复制,打开词典,粘贴,查看。花在这些方面的时间比记单词本身还花时间,未免得不偿失。 所以我就琢磨怎么才能把单词更快的整理出来,并且带有音标、发音、解释、例句。我从平常的习惯出发,最后真让我琢磨出一个点子——用... Continue reading

{PHP} Binary Search

<?php function binary_search() { $key = rand(1, 10000); $arr = range(1, 10000); $low = 0; # 最低位 $high = count($arr)... Continue reading

{MySQL} Cascading Delete

ALTER TABLE foo ADD FOREIGN KEY(bar_id) REFERENCES bar (id) ON DELETE CASCADE; EOF Continue reading

{Linux} 一些命令

自动挂载 NTFS 分区 $ sudo fdisk -l $ sudo mkdir /media/winDisk $ sudo vim /etc/fstab /dev/sda1 /media/winDisk ntfs-3g defaults,locale=zh_CN.UTF-8 0... Continue reading