User:Shiguowang/sandbox

Install Ubuntu
http://www.acsu.buffalo.edu/~charngda/elf.html

Memory Distribution
/boot 500M /swap 2G /    40G /home all of the rest

Install VNC
http://www.wincold.com/archives/154.html sudo apt-get install vnc4server

An Overview of Brackets' Code Architecture

difference between .bashrc and .bash_profile
bashrc article

Good articles for learning git
understand git pictures help you understand git source code

How to implement SHA1 algorithm
这是SHA1算法实现方面最好的中文介绍文章，没有之一. 中间介绍了如何优化的技巧：

1. 循环展开，把for展开能加快运行速度.

2. SHA1在实现的时候需要把16个32位的bulk扩展成为80个32为的bulk，较快的做法是在运行的时候进行展开，这样可以减少访问内存次数，而不是初始化时即完成，idea of expanding during the round function.

3. 缓冲区开多大？我最开始实现的想法是直接开一个缓冲区把所有输入数据保存下来，然后在末尾补1和0，因为不把输入读进来怎么往后面补？那缓冲区开多大合适，毕竟SHA1可以对2的60次幂bit的数据加密，算法太难以实现了. 但SHA1作者Ronald L. Rivest和Jeffrey Ullman（算法导论作者）是算法设计“大师”，他们已经考虑到了这个问题，所以在设计的时候他们是以512位作为处理单元的，这样缓冲区开这么大就可以了. 这个问题也是为什么加密算法都是以“块”来实现的原因. 一块块处理，最后发现需要补位了，简单的补位就可以了.

4. 计算机是否支持unaligned 32-bit memory loads对程序的运行速度是有影响的（不过这个作者说没影响Danil，我也认为他的实验之所以没影响是cache的原因），git的实现中也利用了这个技巧，而且我们也能从源码的宏定义中知道哪些机器支持unaligned内存访问.

5. 记住了(n << value | n >> sizeof(n) - value)是n循环左移value位，自己拿笔试试.

6. 用“64-bit big-endian integer”来保存数据有多少位，毕竟SHA1可以对长度为2的60次幂bit的数据加密. 但是我们如何保存一个64位数？使用两个两个unsigned int即可sizeHi和sizeLo，一旦sizeLo由于进位变成0，则sizeHi加1. 不过Barry的代码明显更加巧妙.

下面的代码是开源版本控制工具git实现的SHA1算法，在git中使用这个算法判断版本控制的文件是否有变动，可见SHA1算法对git的重要性，第一个是没优化前的代码，可以参考wiki百科查看算法是如何实现的algorithm wiki define. a primitive implementation source of primitive 第二个版本是优化后的，我最初看的是这个版本，压根看不懂. 头文件 具体实现

下面的是Steve Reid实现的另一版本，可以参考，这一版本和git的版本都参考了SSLeay的实现，SSLeay作者Paul. sha 下面的链接是Linus他们对SHA1实现的讨论 讨论1 讨论2

这篇文章是我最初参考的中文blog，有点小毛病，实际上在处理字符串时至少补位8位，1bit是没法加的. wiki

C++
define a template class in a h file and implement in another file

emacs
1.show line number: M-x linum-mode 2.show paren: M-x show-paren-mode 3.阅读模式 view-mode

2.emacs中文网上关于gdb在emacs下使用的文章

3.stackflow上关于窗口标号以及切换的资源

4.Chinaunix上关于emacs配置的基本概念

emacs of Intel work

(custom-set-variables '(auto-save-file-name-transforms '((".*" "~/.emacs.d/autosaves/\\1" t)))  '(backup-directory-alist '((".*". "~/.emacs.d/backups/"))))
 * Put autosave files (ie #foo#) and backup files (ie foo~) in ~/.emacs.d/.

(make-directory "~/.emacs.d/autosaves/" t)
 * create the autosave dir if necessary, since emacs won't.

(defun copy-line (&optional arg) "Save current line into Kill-Ring without mark the line" (interactive "P") (let ((beg (line-beginning-position))       (end (line-end-position arg))) (copy-region-as-kill beg end)) )

(defun copy-word (&optional arg) "Copy words at point" (interactive "P") (let ((beg (progn (if (looking-back "[a-zA-Z0-9]" 1) (backward-word 1)) (point)))       (end (progn (forward-word arg) (point)))) (copy-region-as-kill beg end)) )

(defun copy-paragraph (&optional arg) "Copy paragraphes at point" (interactive "P") (Let ((Beg (progn (backward-paragraph 1) (point)))       (end (progn (forward-paragraph arg) (point)))) (copy-region-as-kill beg end)) )

How to NS3's LOG
NS3LOG

Algorithm
Keith schwarz is a Stanford professor, we can reference a few algorithm implementation from it

Standford ACM material

optimism
If you have a list which is too long, you can use hash function to divide into a few shorter ones, this may speed.

hacker
keeganNelson Elhage

Net Simulation
Mat's bolg about network engineer is cooladdress

Linux kernel
This page is a good article for writing Linux kernel module,