Jerry's blog

How to write a Reader-Writer Lock

This is homework of my operating system course. Understanding the basic principle of Reader-Writer lock is not difficult. It is Rust that causes me to spend days working on it. Reader-Writer Lock......

伦理学(道德哲学)

伦理学是哲学的一个分支,主要研究的是人的道德行为。比如在特定的情况下,什么样的行为和选择是正确还是错误。 伦理学的三种分类 元伦理学(meta ethics): 伦理学研究的是伦理学本身。什么是对的?什么是错的?当我们在说对和错的时候,我们究竟想表达什么?元伦理学并不研究具体问题,比如你是不是该杀死那个胖子。 规范伦理学(normative ethics): 规范伦理学研究的是道德......

Complete and Sound

Complete and Sound我总觉得自己脑子有问题,有些知识点怎么都记不住。就算是恍然大悟,过些天竟然还能忘掉。比如上面的complete和sound,我就是怎么都记不住,气都气死了。Stackexchange有个问题,问的是算法中的complete和sound有什么区别,连接在这里。 如果一个算法是sound的,那么这个算法的输出一定是正确的(这里并没有说说算法一定会终止)。比如,......

RSA

密码学是一个天才辈出的领域。这学期修了密码学,很抱歉,我基本没有听懂。偶尔还会翘翘课。不过张老师在最后一节课的总结中,回顾了整个学期的课,讲了一些有意思的topic,竟然勾起了我对密码学的兴趣… 在加密领域中,非对称加密思想毋庸置疑是个革命性的idea。RSA是第一个实现非对称加密的算法,非常值得研究一下。 现在有两个人,Alice和Bob。如果使用RAS,Alice和Bob的通信过程大致......

Elon Musk传记

刚准备出阅览室的时候,我莫名其妙地回了一下头,仿佛有什么东西在一直等着我回头一样。原来是Elon Musk的传记。我之前在极客公园上看了几篇连载,本来还想看看书的,结果忘了。恰巧图书馆有,省的我买了。 大概花了两个星期看完了。每天去图书馆,我都忍不住从书包里掏出来看看。有一次,应该是上午,看论文都快看睡着了,掏出Elon的故事看几眼,瞬间睡意全无,鸡血满满。Elon的故事(奋斗史)应该可以......

《黑客与画家》

《黑客与画家》是一本石破天惊的奇书,下面是我从书中摘录的一些非常有意思的观点。 黑客搞懂“计算理论”的重要性和画家搞懂颜料化学成分的必要性差不多。 大学和实验室强迫黑客成为科学家,企业强迫黑客成为工程师。 黑客从事的工作和数学完全不想关。 要是你很爱编程,你就不可避免地会开发自己的项目。 黑客可以通过观看优秀的程序学会编程,不是看它的执行结果,而是看它的源代码。 坚持一丝不苟,就能取得优秀......

SICP-solution-1.6

这个问题问:如果用new-if替换if的话,原来的计算平方根程序会发生什么情况?我刚开始没想明白,后来看网上的提示忽然懂了。lisp是应用序求值语言,比如函数调用的过程中,参数是表达式的形式,则必须把表达式的值计算出来。这样是为了防止重复计算。但有一种情况比较特殊:if。看下面的程序:(define (p) (p)) 如果调用p这个函数的话,则会永远递归下去。(if (= 9 9) 0 (p......

Efficient Reading of Papers in Science and Technology

翻译原文:http://www.cs.columbia.edu/~hgs/netbib/efficientReading.pdf 为什么要阅读?在开始阅读一篇论文之前,脑子里先想想为什么要干这件事。你想从中得到什么呢?这个问题的答案决定着你如何阅读论文。如果你只想知道这篇论文的概述,那么简要的浏览就够了。如果你打算把这篇论文的内容展示给别人,那你得好好挖了,直到你把这篇论文的观点都弄明白......

Return-to-libc

本文简要总结网上的一篇博客 http://www.ibm.com/developerworks/cn/linux/1402_liumei_rilattack/ DEP与Return-to-libc攻击缓冲区溢出通常需要将shellcode注入到堆栈中,然后覆盖函数的返回地址,指向shellcode,执行恶意代码。这种攻击方式可以概括为先写后执行。数据执行保护策略(Data Executi......

shellcode开发

shellcode开发是一件非常麻烦的事情,programmer必须要掌握汇编语言。网上搜集到的shellcode都是机器码,要想在本机调试运行,我们可以使用下面简单的代码来装载:char shellcode[]= "...." //十六进制的机器码// 如果shellcode调用了其它的库,这里得include进来void main() { __asm { ......