CatCoding

当前 18,共 26 页

A mini Scheme interpreter written in Go

Scheme-Brained Hare 在我学 Go 的时候开始了一个自己的业余小项目,就是这个GoScheme,打算用 Go 来写一个 Scheme 解释器,因为重写轮子是学习新东西的好手段。 现在基本完成了,当然只是一些基本的语法支持,没有宏。 我只是用这个项目来熟悉 Go 的语法,Go 来做 ......

最近在用 Go

最近一直在用 Go 做开发,我们打算整一套和 Rails 对应的 Go 开发框架。一些代码在我们的Github 小组里有。这里的几个项目都用到了代码生成的方法,生成 Go 文件,最后的整个 web 程序被编译成一个可执行文件。 我们正在用一个项目来验证这个想法。其中: 1. xuanwu(玄武) ......

Visualize Git Projects with Ubigraph

一个比较大的项目一般都由一群人协作开发,开发人员可能活动于各个模块之间。前两天突然想起如果把一个工程的所有 commit 数据提取出来,然后按时间顺序动态演示出来可能会比较好玩。从这个过程中我们可以看到一个项目是如何进化的,各个开发者到底在折腾哪些模块。比如这是一个多个开发者参与的一个项目展示图,其 ......

Heartbleed 简单分析

这几天不断听到一个词“心血漏洞”,近年来影响最严重的互联网漏洞。今天小小地研究了一把,顺便把引起一些思考记录下来。 到底是什么样的代码 有一些 C 语言和开发经验的朋友看看这个Fix就能了解些具体细节了。 在网络传输中有一个叫做心跳的概念,简单来讲就是客户端发送一个简单的心跳包给服务端,服务端又返 ......

另一本魔法书:EOPL

概述 很多学习计算机的同学都知道有一本号称魔法书的经典教材叫作《SICP》,《计算机程序的构造和解释》,MIT 的计算机入门课程用的教程。这本书内容广泛而深邃,从出版几十年来影响了很多程序员。今天介绍另外一本我认为也是魔法书的教材,叫做《Essential of Programming Langu ......

关于随机数

随机数代表着不确定性,其在计算机中广泛使用,比如用作加密的 key、密码的生成、模拟,扑克游戏中,还有一些经典的算法 (比如Monte Carlo) 依赖随机数的产生。以下是一些随机数相关的问题简单总结。 随机数产生,真随机数和伪随机数生成器 随机数的产生是一个很有趣的问题。我们希望只通过计算机来 ......

LeetCode: anagrams

LeetCode 这个题目想出来一个好办法,题目的意思是输入一组字符串,把他们按照 Anagrams 归组出来, Anagrams 的意思是字母相同,排列不同的两个字符串。 比如: aabc baac cbaa 这些都是 anagrams 的。如果两个字符串是满足这种关系的,那么把字符串排序后的结 ......

正则表达式匹配和 NFA/DFA

正则表达式匹配是一个经典问题,这里有一个问题。 实现 isMatch,其中。表示任意一个字符,*表示 0 个或者任一个前面的字符: isMatch("aa","a") → false isMatch("aa","aa& ......

Kernel analysis: Defunct Process

我发现带着问题去看内核代码比较容易理解。如果一个父进程显示的设置 SIGCHLD 为 Ignore,子进程将自己清理自己。 #include <signal.h> #include <unistd.h> #include <stdlib.h> #include & ......

拓扑排序

最近在看一些图算法,发现拓扑排序频繁出现,这里写一下自己的一些总结。 拓扑排序是对于有向无环图而言的 (DAG),就是对于这个图所有的点 (V1, V2, … Vn) 找到一个点序列使得任意边 (u, v),u 出现在 v 的前面。很容易证明,如果一个有向图中有环那么不存在拓扑排序。 现实中的问题 ......