韩国济州岛4日游

公司年底 outing,济州岛 4 日游(12/2-12/5)。济州岛对国人不需要签证,从杭州坐飞机去不到2个小时,绝对是旅游胜地。济州岛在韩国算乡下,但其依靠旅游业,硬生生的把 GDP 带上去了,听导游说一洗碗工月工资都能达到一万二,加个班一万八没问题。没去过的同学有机会一定要去体验一次,这里不仅仅有欧巴、化妆品,自然风景更是让人流连忘返,PM 2.5 基本都在 20 以内,你还等什么呢。

阅读全文

我为什么一周内连跑 2 个马拉松

我微信里的朋友应该都知道,上周(2016/11/06)与大上周(2016/10/30)我分别跑了杭州与上海的马拉松,第一场上海站完成了人生首个半马,第二场杭州站完成了人生首个全马(42.195KM),现趁着腿还有一些酸痛,回顾下当初为什么要参加马拉松,以及在跑全马最后十公里时那种全身酸痛到最后看到终点线并穿过时的心情,最后分享些注意事项给初次跑马拉松的同学。

阅读全文

Socket 编程实战

Socket 在英文中的含义为“(连接两个物品的)凹槽”,像the eye socket,意为“眼窝”,此外还有“插座”的意思。在计算机科学中,socket 通常是指一个连接的两个端点,这里的连接可以是同一机器上的,像unix domain socket,也可以是不同机器上的,像network socket

阅读全文

Python2 中的编码问题

先来看一个异常信息:

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 51-52: ordinal not in range(128)

阅读全文

编程语言中的变量作用域与闭包

如果你写过 javascript,应该听说过变量提升(hoisting),如果你自诩“Life is short, I use Python”,那么多多少少会用过globalnonlocal这两个关键字。无论新手还是老手,遇到这些时都会觉得很别扭,稍不留神就会出现意想不到的 bug,如果你仔细观察就会发现,它们其实是一个问题:变量作用域的问题。

阅读全文

SICP 第五章总结

经过第四章元语言抽象的洗礼,我们已经能够深谙编译器内部的原理,核心就是eval-apply循环,只是说基于这个核心可以有各种延伸,像延迟求值、amb 不定选择求值、逻辑求值等等,有了这层的理解,我们应该能够透过各种花哨的语法糖,看出其本质来,像 Node.js 中的 Promise、 Python 中的 coroutine,都是 continuation 的一种应用而已。

阅读全文

SICP 第四章总结

本书的前三章分别讨论了数据抽象过程抽象模块化三种程序设计的技术,这些都是编程的问题,一直采用的是 Scheme 作为编程语言。如果遇到的问题更复杂,或者需要解决某领域的大量问题,有可能发现现实可用的语言(Lisp,或其他)都不够满意或不够方便,因此第四章主要就是讲述如何设计和实现一门新语言。

阅读全文

python, ruby, javascript 浅析

最近一直在看红宝石(ruby)语言,到现在为止,算是对其设计有一些了解。作为一动态语言,ruby 经常会拿来与 python 对比,确实这两门语言在语法层面、实现层面有很多共同的地方,但是它们也在很多设计理念上存在重要差异,通过对比这些相同点、异同点,更加有助于理解这两门语言。同时,Node.js、React Native 的出现,将 javascript 这门“前端”语言推向了全栈,同样作为一门动态语言,javascript 与 ruby、python 在很多概念上也存在很多相同点、异同点。

阅读全文

如何实现一个没有名字的递归函数

递归 作为计算机科学中很重要的一个概念,应用范围非常广泛。比较重要的数据结构,像树、图,本身就是递归定义的。
比较常见的递归算法有阶乘斐波那契数等,它们都是在定义函数的同时又引用本身,对于初学者来说也比较好理解,但是如果你对编程语言,特别是函数式语言,有所研究,可能就会有下面的疑问:

阅读全文

2015 年终总结

今天,已经是 2016 年的第八天了。时间总是这样,当我们身处其中时觉得很漫长,但是过后看看,也没觉得什么。
2015 年是毕业后正式工作的第一年,地点从上海转到了杭州,2014 年终总结时做的那些计划,貌似也没能全部实现。
这篇文章主要回忆 2015 年中那些印象深刻的事与人,同时展望美好的 2016。

阅读全文