-
I love you
#lang racket ;;; 1 构造list 的基本手段: quote和list '(I love you) (quote (I love you)) (list 'I 'love 'you) (list (quote I) (quote love) (quote you)) ;;; 2 用cons 连接单元 (cons 'I (... -
fact
为什么没有如此实现斐波拉契呢?斐波拉契是一个天然的序对。初始是 (0 1),然后 (1 1) (1 2) (2 3) (3 5) (5 8) (8 13) (13 21) (21 34) (34 55) (55 89) 规律是下一个序对的car 是上一个序对的cdr,下一个序对的cdr 是上一个序对的(+ car cdr)。基本... -
call/cc
在晚上搜索了半天的call/cc 的知识。看了半天,并且尝试了半天。才得到一下的结果。 (define (t x y) (sqr (call/cc (lambda (k) (k (+ x y)))))) (t 5 10) 225 在这里的k 相当于这个表达式,也就是sqr 函数,所以k = sqr ,然后(sq... -
the croods
昨晚在南山书城的华夏电影院看了《疯狂原始人》。 晚上10点的场,0点后才回到家。 《疯狂原始人》是一部有亲情,有欢乐的电影。 不管是陪着爱人看,或一家看都是好的。 有条件的话,大家都应该去电影院看看这么一部电影。 亲情,爱情,改变。 -
给0-2岁小朋友的书单
link:给0-2岁小朋友的书单 1: 棕色的熊棕色的熊你在看什么?(美)艾瑞•卡尔/图 语言琅琅上口,图画鲜明。 2: 米米系列 周逸芬/文陈致元/图 切合孩子的成长感受 3: 小熊宝宝绘本系列、噼里啪啦绘本系列 (日)佐佐木洋子 同上,孩子感受成长学习生活 4: 阿力会穿裤子了 (日)西卷茅子图 ... -
kernel_SysRq
最近awesome 更新到了3.5版本,由于未知的原因,有时候可能造成awesome+xorg都不响应了。
以前都是直接按住电源键关机,然后重启,问题倒是没有,但是总归很危险的操作。linux中针对这种情况,可以通过reisub来进行系统重启。
在archlinux中默认关闭了通过reisub 来重启系统的功能。
需要:
echo “1” > /proc/sys/kernel/sysrq
或者:
edit /etc/sysctl.conf and set kernel.sysrq = 1来开启reisub 功能,使系统在不能响应时,可以通过按Alt+SysRq + reisub 重启系统。
link: Keyboard_Shortcuts
-
Garbage Collection 初探
link: Garbage Collection
- 原理
垃圾回收(Garbage Collection, GC)技术的源头可以追溯到1960年Lisp语言。 如今越来越多的高级语言采用垃圾回收技术,尤其是动态语言(Python, Lua)。 当然,最知名的还是Java这个静态类型语言把GC技术带给了广大的程序员, 解放了Memory Leak这个问题。更多GC技术的历史可以查阅参考文献1.
GC是关于内存的垃圾回收,在讨论回收之前,首先要知道内存是怎么分配的。 大多数主流语言或Virtual Machine支持三种最基本的那次分配方式:
静态分配(Static Allocation):静态变量和全局变量的分配方式。自动申请,无需释放。 自动分配(Automatic Allocation):栈中局部变量的分配方式。自动申请,自动释放。 动态分配(Dynamic Allocation):堆中内存的分配方式。手动申请,手动释放。
这里面最容易出问题的地方就是动态分配的内存。如果只有“手动申请(malloc/new),忘记释放(free/delete)”,就会造成Memory Leak。 GC所作的事就是使得动态分配的内存“手动申请,自动释放”,解放程序员的生产力。
根据IBM T.J Watson Research Center的一篇总结性论文A Unified Theorg of Garbage Collection, 垃圾回收算法可以分为两大类:
Reference Counting 引用计数型
Tracing 追踪型 -
心有猛虎
“我心里有猛虎,在细嗅着蔷薇,审视我的心灵吧,亲爱的朋友,你应战栗,因为那里才是你本来的面目。” ——西格夫里•萨松 -
Schemer
最近一段时间在学习Schemer, 使用的方言是Racket。
sicp 读完了前三章,然后也读了其它的几本书,规范也看了,到处搜索了关于schemer 的资料,
以前别人吹读了sicp就是牛人了。直到最近才知道sicp只是基础。
读了sicp的前三章,主要是受王垠的一个blog影响,就只读了前三章,练习大概做了三分之一。
以前别人说的一些数学概念,都只能仰视,但是看了sicp之后,感觉也就那么一回事。
可能以前别人光知道秀名词了,没有把整个数学概念将清楚,或者太愚钝也未必可知。
由于是在vim中写的代码,所以一般会直接!racket %。
但有些sicp中的代码是在racket中不能运行的,可以用mzscheme运行。
在vim中写lisp的一个问题可能是在插入模式下面要向右移动多个括号,然后换行在写。
这个问题开始还不知道如何解决,后来由于用的neocomplcache 插件,所以Ctrl+k 可以满足这种需求。
-
programmer
link:程序员如何保存优秀
1, 小范围的悬着一些有用的技术,透彻的学习它们,拥抱它们,然后不断的扩展这个范围。
2, 理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。
3, 理解各种算法的优点和缺点。
4,了解你的工作领域,关上电脑,去做你的用户们在做的事。
5, 有准备,有愿望,有能力在任何时候投入到各种技术层面中,你必须知道表象下的技术原理,
在“各种技术层面的掌握程度”和“编程能力”上有着密切的联系。6, 发挥你的想象力,永远都要问,“有更好的方法吗?” 跳出常规思维约束,最好的解决方案也许还没有被发现。
7, 优秀的程序员,我优化代码,更优秀程序呀u年,我设计数据,最优秀程序员,他们的不同之处是什么?
8, 正确的构造你的数据,任何的缺陷都将在造成你的代码里无尽的技术债务。
9,正确的命名事物,使用“动词-形容词- 名词”格式来命名程序和函数,变量名要足够长,尽量短,有意义,
如果其他程序员不能够理解你的代码,说明你写的不够清楚,在大多数情况下,
针对下一个程序员而编码要比针对环境而编码重要的多。10, 把分析和编程分离开做,它们不是同类的事物,需要不同类型的劳力资源,需要在完全不同的时间和地点分开做,
如果同时做它们,你一样都做不好,(我喜欢在一天的末尾做不涉及技术分析,而在第二天早上进行编程)11,永远不要图省事走近道,永远不要把相同的代码部署两次,永远不要把一个变量命名成另一个变量名的一部分,
也许你不明白这些规则,也学你要辩解,但如果你是遵守着这样做的,这些规则就会约束你正确的构造你的程序,
图省事的做法是让那些低等级的程序员永远停留在低等级的原因。12, 学习如何测评性能,你会惊奇的发现从中能学到很多之外的知识。
13, 学会区别对待问题细节和问题后果,问题细节不会导致太大的差别,而问题后果能导致世界灭亡,只关注后果。
14,密切关注你的用户/客户/管理人员,帮助他们让清楚他们的“what”,这必帮助他们明白他们的“how”要重要的多。
15,写一个框架,不论你是否打算用它,你将从中学到从其他途径学不到的东西。
16,把你知道的东西教给他人–通过口口交流或通过写作,最终这将成为教育自己的机会。
17, 永远要对你的客户/用户说”yes“,即使你不确定的情况下,90%的情况下,你会最终找到方法实现它,
10%的机会,你将会去向他们道歉,这是重要的个人成长中付出的一点小代价。
18,旋照别人做出神奇事情但却一塌糊涂的代码,重构它,然后丢掉它,并发誓自己永远不要犯他们犯下的相同错误。
(这样的程序你会发现很多)19, 数据永远>理论或观点。通过开发东西来学习数据。
20,有可能的话,开创自己的业务(服务或产品),你将从中学到很多你做雇员永远学不到的只是。