mysql中的datetime 与 timestamp

MMAP 与 SHR

一直不太清楚Linux top命令中的SHR字段究竟都包含了些什么,前些天了解了一下MMAP,今天猜想MMAP申请的内存应该会算到SHR头上的吧,下面写了一个脚本测试了一下:

 

代码写的比较差,不过只是为了说明问题而已,没有太多时间来写这些东西,这里仅仅记录一下,有时间再整理。

匿名的mmap:

 

区别于上面的代码的部分:
1. 不需要再打开一个fd
2. mmap调用时使用 MAP_ANONYMOUS 这个flag,有了这个flag,就会忽略fd参数,但是也有的实现依然要求fd参数为-1

 

mmap中lock到内存的部分好像也不是绝对的lock: https://blog.csdn.net/lotluck/article/details/81632071

ecshop模板引擎学习

ecshop模板引擎比较简单,相对于smarty要轻量多了,她的实现不到1500行的代码,一个文件搞定。
参考ecshop模板引擎的文档时,里面提到了 {if $num is odd} 的语法,觉得这个语法不错,就尝试了一下,结果失败,查看了一下模板引擎的代码,发现该语法不知道什么时候已经没有了,出于好奇,简单看了一下语法解析的实现,可以通过简单的hack来添加该语法。
在cls_template.php 的 _compile_if_tag 函数中添加如下分支:

 
  1. <?php
  2.                 case ‘is’:
  3.                     $token = ‘%’;
  4.                     $i++;
  5.                     if($tokens[$i] == ‘odd’) {
  6.                         $tokens[$i] = ‘2 == 0’;
  7.                     }else if($tokens[$i] == ‘even’) {
  8.                         $tokens[$i] = ‘2 == 1’;
  9.                     }else {
  10.                         throw new exception("is odd or is even");
  11.                     }
  12.                     break;
  13. ?>

当然,这里只共学习之用,随便hack别人的代码是不好的。

关于unix的历史(点滴)

要想学好linux就要了解unix,聊了解unix就要了解unix的历史,否则很多名词不知道啥意思; 今天从mmap开始,出现了System V(http://baike.baidu.com/view/1503404.htm);
System V, 曾经也被称为 AT&T System V,是Unix操作系统众多版本中的一支。 又一次遇到了AT&T, 以前遇到就当没看见,这次就了解一下吧; 发现这个100多年历史的公司最初居然是贝尔创建的,而所谓的“贝尔实验室”也是这个公司的一个机构,难怪很多计算机方面的东西总要和AT&T最终老跟扯上一些关系。

system-v: http://baike.baidu.com/view/1503404.htm
关于unix: http://baike.baidu.com/view/8095.htm
关于AT&T: http://baike.baidu.com/view/259956.htm

tar:从压缩包中解压出指定文件

如果你下载了一个压缩包,虽然本身不是很大,但是解压后会很大;可是你并不会去看里面所有的文件,而是只看具体的某一个或几个文件而已,这时你的磁盘空间有很有限,于是你很想只解压指定的文件,于是下面命令就可以用上了。
1. tar -ztf xx.tar.gz | grep file_you_want_to_get
看看你要解压的文件的具体路径,假设为 path/to/file

2. tar -zxf xx.tar.gz path/to/file
然后,你要的file就放到了path/to 目录下了

例如:
>tar -ztf glibc-2.9.tar.gz | grep ldconfig.c
glibc-2.9/elf/ldconfig.c

>tar -zxf glibc-2.9.tar.gz glibc-2.9/elf/ldconfig.c

关于PHP的memcache模块的get、delete方法的patch

patch原因:

解决get、delete方法无法区分连接失败和not found的问题

patch内容

本次修改是在memcache-2.2.6 的基础上修改的,我把她修改版本号为 2.2.6.1来使用了,

patch 文件:

patch说明

修改的地方如下:

1. 添加参数检查(memcache.c), 在 ZEND_DECLARE_MODULE_GLOBALS(memcache) 下面添加:


 

2. 修改memcache_get、memcache_delete函数的定义:


 

3. 修改memcache_get 函数的实现:


 

4. 修改delete函数的实现:


 

这里的error_flag 是新添加的可选参数,与改变量相关的地方都是新添加的

 

测试脚本:

 

 

遗留问题

===========================
如果没有第一部分的修改,貌似也是可以的,但是下面三段脚本是值得思考的:


 

 

关于PHP的memcache模块的delete方法的修改(2)

前面有篇文章(http://phpor.net/blog/post/883/)提到了PHP 的memcache模块的delete方法的问题,并且做了一些修改,但是,那篇文章也提到,那种修改办法也有很大的缺点,这里给出一种比较好一些的方式。

修改memcache_delete函数如下:

 

测试:

 

输出结果:
should no found:        no found
should ok:      OK
should connect error:   connect error
should key error:       Key in unvalidate
it can work without flag argument, that’s ok
====================================================

本次所学
1. 关于参数的传递,可以直接解析成内部类型,也可以直接使用zval类型
2. 关于引用传参这里做的不太对,且看后面的文章

VIM NERD_tree 的小小hack

如果你在看这篇文章,大概你也在使用VIM写代码了。如果你使用了NERD_tree这个插件,可能你会用到BookMark的功能,如果还不知道,可以先看一下NERD_tree的文档。
如果你为自己的项目的根目录建立了一个BookMark,则下次进入项目的时候就不需要先打开项目目录,然后再一点一点地找到自己想看到的文件,例如,我建立了一个叫Test的项目,首先启动vim,然后执行命令 :BookMarkToRoot Test  ; 这样就直接到了我的项目目录了;
但是有一点很不痛快的是,现在使用:pwd 来查看当前目录的话,并不是项目的目录,于是查看了一下NERD_tree.vim,做了如下修改:

添加了红方框标出的一行,就可以了;

这样的话,在项目所在的目录执行一些命令也比较方便,例如一些svn的命令。

另外,当你打开树目录时,在目录树窗口中使用 "B" 命令可以打开可关闭你设置过的标签,很方便哦~