White Death
 
        首先今天是个喜庆的日子,人们都在迎接这新的一年的到来,今天成功的希望再接再厉,再创辉煌,今年失利的希望新的一年有个新的开始,一切重新来过;但今天也是一个悲伤的日子,著名作家史铁生于今天(准确说是12月31日)凌晨3点46分离开人世,PQ说记得我以前老是跟她提前史铁生,我不记得了,有一年没有看书(非专业书)了,但是我仍然记得史铁生对生命的诠释:“死是一件无须乎着急去做的事,是一件无论怎样耽搁也不会错过了的事,一个必然会降临的节日。”。如今他的这个节日日降临了,只是,我觉得有一丝遗憾,终究没有跨过2010这个坷儿,好似魔咒一般...
        其次就是先回首过去了呗,总结一句话,2010就是一个很大很大的茶几,接下来大家都懂的:
2010年关键词:ACM,世博会,上海,搬校区,实验室,纠结,悲剧~
2010串烧:一开始,照旧是学期末的各种忙碌,大程+论文+复习,然后是回家,对了,因为逻辑大程,迟回家了几天,然后停水停电+教超早下班,各种无语,2010第一悲剧...然后回家前还去了一趟北京,姨哥带我吃的正宗重庆火锅,很给力,怀念很久了!然后回家,记得那个春节不是很爽,好像爸妈还经常吵架,最后年夜饭吃的剩菜,看晚会也很凄凉,具体不清楚了,总之留下不好的印象,2010第二悲剧...然后大二下学期几乎只干了一件事:ZOJ刷题,那时候情绪很高涨,每天上课下课吃饭睡觉脑子里都想的是算法和题解,还经常劳累过度,佩服自己那时候的状态!最后校赛省赛成绩还好,虽然主要功劳是猛犸和UFO的,ym!接下来的新手上路,第一场出师不利,导致最终被刷...其实,当时对暑期集训,心里是很矛盾的,想参加,因为可以见识到各种大牛,融入他们的圈子;又不想参加,因为我最喜欢的是自学,不喜欢和人们讨论,而且自己心里清楚那次是不可能进入最终校队的,所以2010第三悲剧,小小的悲剧,不是很郁闷的...然后就是短学期,Linux,第一次接触Linux,感觉很新鲜,很好玩,现在也觉得很不错,但是因为各种不便,没事还是很少去的...接下来可以算是2010为数不多的一次开心吧,父母从家里过来,直接飞上海,我从杭州自己去上海,那次感觉很好:1.第一次去上海,还是自己去的,而且去了后自己买了回程票、订了宾馆、去机场接了爸妈;2. 和爸妈一起旅游,可以整天整天地呆在一起,平时在家也没有这待遇,而且,旅馆比较小,所以三个人挤在一起看电视剧,真温馨;3. 爸妈到了杭州,虽然当时对这块不熟悉,很是不方便,但是至今到了韩国料理9号那里都会想起他们的...然后一起回家,第一次不是自己坐飞机回家,真happy~...短暂的假期,30天一晃而过,呆在家里,爸爸妈妈不吵架,每天很开心,最幸福的一个月~...返校的时候,因为高速公路大雾封掉了,于是从二级路爬过去后,误机了...第N悲剧了吧,这也预示了接下来的一个学期的茶几性质...太原呆了一天,在那破GPS的指导下在太原转悠了一天,晚上在宾馆呆了一天,第二天飞回杭州...悲剧正式开始,玉泉这里好破好破,什么有学术氛围,连个自习室都没有!于是想找个长期实验室呆,结果意识到那不是我目前想要的,于是把第一个项目做完后就撤了...后面整天碌碌无为的,及其郁闷,于是十一国庆又回了趟家,先又去北京玩了半天,吃了正宗的海碗居老北京炸酱面,很给力~然后家里呆了几天,又滚回来了...这个学期学了很多东西,但是精通的那是一个都没有啊...前几天做C#大程,各种不用,用了一个礼拜做完了,结果发现要求理解错了,需要重做...计算理论翘了很多课,结果现在各种不会,论文也不知道该怎么办...不想写了,越写越郁闷...
      2011年了,新的一年,并不能改变什么...
       唉!!!!
 
        操作系统实验课,老师明确说了考试考fork()和exec族函数,我一直以为自己理解的比较透彻,结果昨天小quiz,考了一道非常简单的题,虽然我做对了,但是我竟然有所犹豫,所以需要巩固一下,刚刚进行了一些实验,发现理解的更进一步了。首先,上个简单的例子:

int main()
{
   int p1,p2;
  
   printf("Once or Twice %d\n",getpid());         // 1
   p1 = fork();
   if(p1 == 0)
   {
      printf("This is the child process \n");
      execl("/bin/ls","ls","-a",NULL);
      printf("Will it be displayed????? \n");            //2
   }
   else
   {
       wait(p1);
       printf("This is the parent \n");
   }
   printf("The end\n");           //3
   return 0;
}


        我发现,1,3都只会显示一次,而2永远不显示,但是讲蓝色高亮的那行execl去掉,2就会显示1次了,而3会显示2次了。说明fork()新创建的子进制只执行从fork开始后面的进程内容(注意,是“只执行”,而不是“只复制”,我们后面会看到),而exec族函数调用后会将所有的进程都覆盖,也就是说不保留父进程的任何信息,相当于脱胎换骨了,所以在那个if里面execl后面写任何代码都不会被执行的。同理,3处的代码,子进程也不好去执行了。
      然后这里就想到一个好玩的程序,如果是在for循环里面调用fork()呢,如下:
int main()
{
    int i,pid1;
    for (i=0; i < 3; i++ )
   {
      pid1 = fork();
      if (pid1 == 0) {
        printf("This is child process! \n");
        //return 0; 
      } else {
        wait(pid1);
        printf("This is parent process!\n");
      }
   }
   return 0;
}
     如果你执行一下这段程序,你就会发现,咦?不应该是显示3对么?怎么这么多?
于是,为了看得清楚:
int main()
{
  int i,pid1;
  for (i=0; i < 3; i++ )
   {
      pid1 = fork();
  
      if (pid1 == 0) {
        printf("This is child process! %d \n",i);
        //return 0; 
      } else {
        wait(pid1);
        printf("This is parent process! %d\n",i);
      }
   }
   return 0;
}

    于是,我们得到如下结果:
Picture
      为什么这么诡异呢?看到0,1,2,2,1...于是我知道了,再第一次循环的时候,子进程并非只复制父进程fork()后面的内容,而且复制了父进程的所有内容,只是它只是从fork()后面执行而已(相当于CS:IP为fork()后一条指令的地址!)
     于是这个例子就不难理解了,i = 0时,那个child开始循环,注意,这里child保存了父进程的所有内容,包括i,所以child执行i = 1,接着 i =2,结束后,开始parent 2(注意:虽然child改变了i,但是这里执行的是copy on write,即在子进程修改前,父进程先另外copy一份i保存起来),parent1(还原child1相对的那个i)....整个过程就像是递归调用似的...
     这样就把fork剖析地更清楚了:每当父进程fork一个子进程时,其实就是将子进程弄个指针过来,指向父进程的内存块,但是,保留了CS:IP,即当前进程的入口地址,然后安装父进程的内存内容进行执行...当需要改变某一内容时,父进程会另外保存这个内容,即copy on write...
 
本文转载自Matrix大牛博客,原地址:Hit here
     这里我们来看:用正则表达式判断数的整除性。例如,下面这个表达式可以匹配01串S当且仅当S是一个可以被3整除的二进制数。

     ^1((10*1)|(01*0))*10*$

     如果你不信的话,不妨把下面这段代码粘贴进浏览器的地址栏,然后回车运行一下:

      javascript:alert(/^1((10*1)|(01*0))*10*$/.test("1000000100"))

     被test的是516的二进制表达。516可以被3整除,因此程序返回true。你可以自己把1000000100换成其它的二进制数试试。
     但是呢,从这个正则表达式里我们竟看不出任何端倪。奇怪了,为什么这个正则表达式可以用于判断整除性?能被3整除的二进制数究竟有何规律?

      其实,能被3整除的二进制数并没有什么明显的规律。这个正则表达式的求法可以说是相当暴力的。这一切的谜底很简单——判断一个数的整除性能轻易地用有限状态自动机实现,而有限状态自动机又可以翻译成正则表达式。

Picture
      
       注意到,一个二进制数后面加一个“0”相当于该数乘以2,一个二进制数后面加一个“1”相当于该数乘2加1。设定三个状态,分别叫做0、1和2,它们表示当前的数除以3所得的余数。如果对于某个i和j,有i*2≡j (mod 3),就加一条路径i→j,路径上标一个字符“0”;如果i*2+1≡j (mod 3),则在路径i→j上标记“1”。状态0既是我们的初始状态,也是我们的最终状态。我们的自动机就做好了。现在,假如二进制数10010走进来了。从状态0出发,机器首先读到一个“1”,于是当前位置挪到状态1,表明目前该数模3余1;然后,系统读了一个“0”,我们紧跟着走到状态2,表明二进制数“10”被3除余2;下一步,我们回到状态1,表明“100”除以3余1;再往后,我们得知“1001”能被3整除。最后呢,我们读到一个0,“1001”的两倍当然还是能被3整除,我们依旧停留在原位。我们得到结论:二进制数10010能被3整除。
      有限状态自动机是可以转化为正则表达式的。上面的这个自动机转化起来非常容易。我们可以先试着用自然语言叙述一下。首先,每个二进制数第一位必然为“1”。到达状态1后,我们可以随意地、任意多次地在状态1周围绕圈圈,最终回到状态1。临近末尾,我们再读到一个“1”返回状态0,这之后随便读多少个“0”都可以了。现在问题分解为:我们又如何用正则表达式表述“从状态1出发随意地走最终回到状态1”呢?在本例中,这是很好描述的:它可以是字符串“1000..001”和“0111..110”的任意组合。把这些东西用正则表达式写出来,就是我们刚才那个神秘的式子:1((10*1)|(01*0))*10* 。
       从原理上说,我们可以这种方法求出任意进制下用于任意数的整除性判断的正则表达式。只不过,它们所对应的自动机都更加复杂,从而得出一长串令人眼花缭乱的表达式。本文开头我把1((10*1)|(01*0))*10*的来源作为一个有趣的问题提出来,因为这个式子恰好不长,让人很难想到这背后藏有一个普适的暴力算法。

 
         今天晚上在文三路的一个小餐馆吃饭的时候,有个穿着简陋、背着行囊的老大爷一直站在门外,隔着玻璃窗盯着打饭的 地方的菜和饭,眼神很可怜,这时外面走过去一个年轻小伙,差不多也就30岁左右,应该是上班族,走过去频频回头,然后又返回来,给那个老大爷开门,请他进 去,老大爷看了店内很整洁,不敢进去,劝了很久,把行囊放在门外进去了...然后那个小伙跟老大爷比划了一会儿(看起来像是哑语,可能老大爷是聋哑 人?..),然后给了那个老大爷50元就离开了,我们当时正好吃完了,目睹了这一幕,出去后发现那个小伙好像去等公交了...自己等公交却出手这么大 方...我感觉人间自有真情在,心里暖暖的...
       寒冷的冬天,很温馨的画面,心里很暖很暖...最后我看到那位老人慢慢地过去排队打饭了,可是眼神里透露出了一丝的不安...可能他觉得自己不属于那里,就像我们老师说的,农村人到了城市,看到干净的店铺都不敢进去,就是这个道理...
       为什么人和人总是有这么大的差别,当我埋怨这个不好吃,那个不想吃的时候,周围还有很多这样没钱吃饭的人,或者有钱了也不敢进去吃饭的人..

       不过,回来在网上和三姨已经高中同学说了这事,三姨说太假了,我说亲眼看到的,然后才信。高中同学更狠,说那个老大爷是骗子,或者那个小伙是他的儿子,但是不孝,给了50元打发走...还说我太幼稚了..

不过,我还是宁愿相信这个社会没有那么险恶,宁愿相信好人还是有很多很多的...55555....
 
1.去别人家里,不要坐在人家的床上 。
2.在酒桌上与别人碰杯,自己的杯子一定要低于对方的,特别是对方是长辈或领导 。
3.晴带雨伞,饱带干粮—未雨绸缪总是好的。
4. 如果问别人话,别人不回答你,不要死着脸皮不停的问。
5. 吃饭的时候尽量不要发出声音。

6. 捡东西或者穿鞋时候要蹲下去,不要弯腰撅屁股。
7. 别人批评你的时候,即使他是错的,也不要先辨驳,等大家都平静下来再解释 。
8.做事情要适可而止,无论是狂吃喜欢的食物还是闹脾气 。
9.到朋友家吃完饭,要主动帮忙洗碗清理桌子—–主人做饭已经很辛苦了,不能事后还让主人清理。
10.生活中会遇见各式各样的人,你不可能与每个人都合拍,但是有一点是四海皆准的:你如何对待别人,别人也会如何对待你 。
11.待客不得不大,持家不得不小 。
12.把拳头收回来是为了更有力的还击
13.人活在这个世上,首先要学会一个 “忍”字。
14.任何时候对任何人不要轻易告诉对方你的秘密 。
15.钱不是靠攒的,会花才会赚 。
16.学无止境,不仅仅是学书本知识,更要学会怎么待人处事,社会远比你想象的要复杂 。
17.不要跟同事议论上司或其他同事的是非,你的无心之言很可能成为别人打击你的证据。
18.做事情,做好了是你的本分,做的不好就是你失职 。
19.只有错买,没有错卖。不要只顾着贪小便宜。
20.有时候孤单是正常的,不要害怕,要自己调剂
21.有真正的朋友,但不知你有没有福气遇到。不管有没有遇到,都不要否认它。不要算计别人,尤其不要算计自己喜欢的人。对自己喜欢的人,不要使用手段去得到 。
22.最勇敢的事情是认清了生活的真相之后依旧热爱生活。不要害怕欺骗,但要知道世界上存在欺骗 。
23.借钱的时候,心里要有个底,就是要想着这个钱是回不来的。所以借出去的钱永远要在自己能承受的损失范围之内。可以承受的数字以内,即使回不来,也是心里早准备好的。自己不能承受损失的数目,就不能借。
24.最好的朋友之间,除非他穷的吃不了饭了,否则最好不要有经济往来。许多可贵的友谊都败坏在钱上。
25.君子可寓意于物,但不可留意于物 。
26.出门在外能忍则忍,退一步海阔天空。
27.擦桌子的时候要往自己的方向抹 。
28.打电话接电话第一句话一定要是 喂,您好;挂电话的时候等别人先挂。
29.一次不忠 百次不容。
30.不随地吐痰扔东西,如果没有垃圾箱,就拎回家扔垃圾筒里。
31.多看书对心灵有益,你会看到一个更广阔的世界 。
32.是你去适应社会,不是社会来适应你。
33.不要让别人知道自己的真实想法,要笑在人前笑, 要哭一个人躲起来哭。
34.走路手不要插在口袋里。
35.简单的事情复杂做,复杂的事情简单做 。
36.机会只留给有准备的人,天上不会掉馅饼。
37.不管什么条件下,仔细刷牙,特别是晚上 。
38.早上一定要吃早餐,没有早餐喝杯水也一定要 。
39.少说别人是非,把自己管牢 。
40.你是无价之宝 。
41.女生,和男孩子出去要自己买单 。
42.要对自己的行为负责,不要怨天由人,在做之前要想想应不应该,出了事要学会自己解决 。
43.要想人前显贵,必先人后受罪
 
       突然发现明天已经是第6周了,就剩3周了,一个学期过得好快啊。回顾这一个学期,发现自己好像什么也没做似的,除了郁闷。寝室跟图书馆一样,开始觉得挺好的,可以安心学习,结果,就像大家说的“这样会疯了的”,越来越发现自己行为异常,一连几天一句话都没说过...经常怀念紫金港,但是回去却发现找不到那种感觉,原来我怀念的不是紫金港,而是紫金港的那种生活,怀念我熟悉的朋友都在那里,怀念每天可以呆在那里;然后就是经常想家,大一大二都这么频繁地想家,可能是因为那时我在那里有个一个新的家了吧?...
        今天又突然地郁闷,其实从昨天就开始了,各种不爽,其实也都没什么,就是发自内心的郁闷。记得看过那个帖子,说“如果你一天早上几点几点出去自习,一直忙到晚上,然后睡觉,肯定不会郁闷之类的”,我发现我没有那种所谓“学霸”的境界,当我心情不好的时候,肯定不能把事情做好的,哪怕是明天就要截止了的事情。
       昨天的六级很悲剧,估计还没有上次高呢;今天的比赛很郁闷,题型很诡异,密码破译出来了,还有一堆陷阱,搞得我很早就已经放弃了...
      晚上忍受不了10米VPN的速度,换了50米的,然后就后悔了,很不稳定,虽然有时很快,但是慢的时候QQ音乐都更新不出来,百度都连不上,真悲剧~另外,为了测试网速,破戒玩了一盘CF,ping真小啊,才20左右,太爽了,直接拿下了MVP~

----------------------------------------时间分割线----------------------------------------------
 
      明天开始第6周了,选课、大程都需要在接下来两周完结了吧...又到一个将ACM放下的季节了,等把usaco的1.3做完结以及把“双调欧几里得旅行商问题”的题目做完(悲剧啊,这个很早就学了,但是一道题也没做),就开始调用一个中断吧...
     另外,看了一下考试,首先是操作系统实验和计算机安全、计算理论和操作系统原理,而这里面,操作系统实验还是需要好好复习的,短学期学的都忘光了;计算机安全一直认真听课,所以可以等到第8周复习;计算理论很悲剧,这几天就开始看吧,唉...;操作系统原理每次都是3节课听2节,需要把落下的都补回先;...还有就是边做汇编大程和C#大程边复习它们吧(其实可以说是预习了,>_<)...
       等到寒假,只有2个任务:学车、学网络(他们说,21世纪的人要学会开车、学会上网,于是我专心去学如何开车和“如何”上网...)...
      另外,今天中午吃饭,不知不觉走神了,想到了很多小时候的事情,想爸爸妈妈姐姐,5555555555~

 
       起先头疼,好几个小时后,竟然习惯了。然后突然想起周三心理学老师讲的一个实验了:
一个心理学家做了一个实验,戴上一副特殊的眼镜(这个眼镜的作用是将你看的图像上下左右颠倒)。于是他看到人们都是倒着走路,楼房、汽车都是倒着的,甚至都不敢向前走一步,因为他看到的下面是天空。但是,这个心理学家戴着这副眼镜生活了一个月,慢慢地竟然习惯了这个世界,这里说的习惯是指,他看到的图像已经是正立的了,更准确地说是他脑子形成的图像是正立的了。然后当他拿下眼镜后发现会不适用,又会感觉世界是倒着的。
        上课时候听的时候没有很注意,现在想想,觉得这是一项很伟大的实验,它证明了眼镜看到的不一定是真的。长期以来,我们经常说一句话叫,眼见为实,这下好了,眼见也不一定为实了。是啊,我们太相信眼睛了,其实我们不能这么相信它,因为它真的不可信,随便举个例子(随处可见的例子):
Picture
       比如上面这张图片,根本没有转动,但是你会认为转动,眼镜为实么?后来又写了一些,但是网速慢,发布不出去,再

 
        昨天看天气预报,说杭州大雪,心里就想“又能嘲笑一番所谓的大雪了”。早上3、4节课,室友把我叫醒来(昨晚编译内核,到3点半,最后还是没有完成,就把电脑扔下去让它自己慢慢编译了...所以闹钟肯定直接被我按掉了),其实我很不想去,但是我想看一下所谓的大雪,就穿戴好出去了,果然很大,但是路面一点儿也没有堆积,于是我又从心里嘲笑“嘿,还是不行,没有集起来的效果”...3节课后,从曹西出来,人们被震惊了,自行车根本没法骑了:
Picture
       于是,我默默地用手机将QQ状态改为:“每年杭州的雪都会被我们北方的同学们嘲笑一番,今年一下子这么给力~”。并且为之前的嘲笑道歉,滴水穿石,永远不要看不起任何人,包括管杭州天气的老天爷。不过,这天气真的很神奇啊,南方比北方先下雪,而且还是这么大的。于是就一路拍照一路到食堂了。中午回去换了一身装备,下午又被那个没空调且窗户坏了的破教室冻得要死,于是下午回来继续换装备,装备是王道啊~!到西溪从PQ那里取回上次一起买的大衣,黄金装备,哇咔咔,穿着很舒服的。就是PQ说可爱,Conan说帅气,我也不知道了-_-#~
        晚上和Conan一起从西溪走回来,一路说,一路玩,Conan说这雪让他“有一种回家了的感觉”,我也觉得,我们一起回忆中学上早自习时看到世界一夜之间变得一片白的惊讶、回忆一步一步吱呀吱呀地踩着雪去上学的愉快、回忆晚上回家看到由于发射灯光而一闪一闪的雪花...仿佛时空扭曲,沈阳和怀仁没有了区别,好像是一起上的中学。原来2个异常相同的回忆在一起交织,竟然会有一种如此真实的错觉...
      还有,一起回忆了当在上大学前没有见过雪的YTY看到雪后的欣喜,以及对于很多雪景现象(比如下雪了天就很亮)的惊讶,当然还有我们的鄙视。记忆中,每年在第一场的雪的时候,TY总是要拉人去西湖看雪景,今年下午也是,只是不知道拉的是谁(用Conan的话,号称是“一个男生”..),今天我一天的课...
     晚上TY自己提前骑车回去了,我和Conan由于先去超市买了吃的,所以拖了很久。我说TY肯定以为我们丢了,Conan说,是的,一直在等我们。我伤感地说:“我回不去了,在等你...”。Conan说:“TY一直在等你,只是你不回去...”。突然很感动,和Conan、TY一起生活了2年,都是欢乐的回忆,貌似我看到了暑假时我去上海那一天早上,Conan上课前,站在我床头不肯离去,是啊,那是最后一次我睡在3042了,最后一次属于3042了~
     不过, 我很高兴,我的第一批室友,留下的都是美好的回忆~而且,现在我们还经常联系,其实那次“白堤夜惊魂”(说的有点儿恐怖了,其实就是骑车到西湖了,结果车胎爆了,于是抬回来了)也是美好的回忆。
    另外,今天(12月16号),也是一个特殊的日子。突然感觉我的大学还是很充实的,收获了知识、友情和爱情。
    最后再来一张雪景,家乡里雪多,树少;这里树多,雪少。然后这次很给力,有树有雪有湖:
Picture
     今天深刻体会到一件事情:

       人只珍惜以下两件事情:
       1.   得不到的或者很难得到的
       2.   失去了的或者即将失去的