20101130

长见识

长见识

柳校长讲话,讲教育。
我坐第一排,困的时候看刘老师在那儿批C语言学生的报告。
一向对计算机系学生的报告心存偏见,就拿来看。

声明一:柳校长的讲话重要而啥啥。我困的原因可能是病理性的,只要不是我讲,
五分钟准睡着,不可控。

本着挑刺的心态读实验报告,当然不会放过每个暇疵。
实验目的、实验步骤、实验结果一如既往的缺少。
不过我挑的是另一个毛病,代码里,函数的声明放在了main函数之中。

我指出。
刘老师说,这是允许的。并补充道:这是声明,不是定义。

是的,C函数中不允许嵌套定义,但是我没有想到可以放个声明。
以前见的代码都是声明在最前,或者干脆定义也在最前。

我回家做了个实验,如下:

--------------------------
int main()
{
int foobar();
foobar();
return 0;
}

int foobar()
{
printf("test");
}

--------------------------

结果真的编译通过了。
长见识了。

我一想,然后我把
int foobar();
放在了
foobar();
之后。

即调用在先,声明在后。

结果也通过了。

这说明:不必声明?
我注释了
int foobar();

变成了这样:
--------------------------
int main()
{
foobar();
return 0;
}

int foobar()
{
printf("test");
}
--------------------------

结果依然能编译通过!

这说明:不必声明?

我就把这事放下了。

事前查了下,非官方的手册,在函数内的声明是允许的。其益处在于,可以局部
的声明函数,避免污染symbol空间。

今天坐校车,又见到了刘老师。
请教。

刘老师说:只有函数类型(返回值类型)是int型的,才可以不声明直接调用。

替换法告诉我们,一次只换一个部件。
当然……偶而也有同时出现两个知识点都不知道的时候啊。

又长见识了一次。

总结。

见识1. 函数可以在函数内声明。作用域在函数内。

见识2. int型函数可以不声明直接调用。

不过,作为代码规范,反对以上两条见识应用在项目中。

20101129

git pull all shell (故障定位经验)

git pull all shell (故障定位技术)
** git pull all shell
CLOCK: [2010-11-29 周一 00:00]--[2010-11-29 周一 01:12] => 1:12
*** 问题:更换了tortoisegit的key文件,命令行失败,要求口令。
*** 命令行报告需要口令。这说明privatekey错误。但是 git config -l 显示一切正常。
*** home目录下的key文件错误。以下是诊断的依据。git命令行使用了ssh,而tortoiesgit使用了putty
: $ ssh -v git@222.168.37.231
: OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
: ... 省略 ...
: debug1: Trying private key: /c/Users/ibm/.ssh/identity
: debug1: Offering public key: /c/Users/ibm/.ssh/id_rsa
: debug1: Authentications that can continue: publickey,gssapi-with-mic,password
: debug1: Trying private key: /c/Users/ibm/.ssh/id_dsa
: debug1: Next authentication method: password
: git@222.168.37.231's password:
*** 解决
**** 找到HOME目录
: $ echo $HOME
: /c/Users/ibm
**** 更换 id_rsa, id_rsa.pub 文件
***** puttygen -> Load an existing private key file -> Load,
读入tortoiesgit用的putty格式私钥
***** conversions -> Export OpenSSH key,保存到HOME目录下,名为id_rsa。
**** 9月4日,因为同一原因花了不少时间,且写了日志。唉。

20101125

老猫去看病

老猫去看病

老猫的名字就叫老猫,还在他吃幼猫猫粮的时候就是这个名字。如今九岁了,考
虑到野猫的平均寿命是三岁,已经成为货真价实的老猫了。

老猫前一段时间病了。屁股出血,涂在腿上的毛和地板上,很是恐怖。而且渐渐
开始绝食,后来滴水不进了。

我考虑到了各种可能。

吃了什么利器?家里没有。食物中毒?除了猫粮,他什么也不吃。虽然最近换了
新的猫粮,但又买了他喜欢的换回来。肠子出毛病了?……

我想起来几年前的小龟比尔・盖茨。它跟随我很多年,最后水污染埋在了大树下
面,还给它点了根香纪念。现在想想也许是因为蓝藻也说不定。

老猫毕竟是很大年龄了,要考虑各种可能性。接受建议去医院。

准备行动的那在上午老猫病得更重了,眼睛也很无神,屁股一碰就尖叫。必须得
去医院了。

其时,二猫正生着病,反复发烧,一直咳嗽。其时,妈下午的火车到达。其时,
单位下午召开所有教师必须参加的会议。

但是,我决定还是老猫重要。

查医院地址,电话咨询,准备纸盒子,打车出发。中午出发前我睡了一会,准备
迎接各种可能。猫妈准备了两三千元,说"应该够了"。我强开玩笑,"如果两
三千还不行,就不治啦。他也值不了那么多钱。"

老猫是2001年20元买的。而且也不是我花的钱,只是寄存在我这里。当时我百般
不乐意,规定猫不许上床,不能进卧室睡觉等等诸多条款。

最后,所有的禁止性条款都废除了,而且,我拒绝归还这只脾气很差的猫。从此,
我们开始了不懈地斗争。其间互有胜负。

下出租车的时候,我又开玩笑,"又一只猫钱出去了。"二十五元车费。如果算
上返回,那么,又多出一只猫。

如果算上他每个月的消费,已经可以买很多只猫了。各种很乖的,听话的,会爬
裤腿的,会蹭人的。甚至,能带出去溜的猫也能买得起了。

上楼。等医生上班。挂号。听一个女生絮絮叨叨讲她家的狗怎么着了凉。交费,
差点踩一只藏獒的尾巴上,它阴沉地看着我,被主人拽到一个角落里呜呜地示威。

医生开始检查老猫。

这家伙在家里很威风的,不仅这几天不让碰屁股,平时那也是难得允许抱一下,
百般挣扎和反抗才得亲近。在医院里,老猫完全呆住一样,摸屁股就摸屁股,掀
尾巴就掀尾巴,捅肚子就捅肚子。估计如果穿衣服的话,一定会配合地撩起来。

我想说"老猫,你不是挺有能耐的么",但是似乎一个字也没有说。

终于,医生说:"好象是屁股旁边有伤口。"

老大夫很瘦,一直抽烟,整个屋子里都弥漫着旱烟那种非常强烈的味。不过此刻,
他的皱纹看着也有几分可爱。

"也没有锋利的地方啊,从高处掉下来摔的?"

"老猫啊,你岁数大了,可不能再DESE了啊。"

洗肠,因为几天不排便了,猫还算老实。洗伤口,把烂了的腔打开引流,这家伙
在某个瞬间咬了我三四口,一排浅口子。然后被戴了伊里莎白圈,一直以为是防
舔伤口,没想到还能防咬人。我终于有机会说,"老猫,你不是挺有能耐的么。
你怎么不咬啊。"

后来又一次试图咬我,咔嚓一声咬在圈上。哈哈。

几天以后,老猫开始慢慢有了精神。每天上药、头几天打针,都可以开始顽抗了。

老猫,你又开始抢肝吃了,又开始到处散布猫毛让我鼻子不舒服了。所以我又开
始想你价值二十元,想那些没有买到的更可爱更听话的小猫们。

即使你那么便宜,即使能用你换很多听话可爱的小猫,可是,它们又怎么能让我
气愤让我与之不停地斗争。那些,又怎么能比上你的万分之一。

老猫,请永远活下去吧,陪伴我――我们还有很多事没有分出高下呢。

20101117

调度的力量zz

调度的力量zz

Magicloud 写道 "200+行的内核补丁被Linus Torvalds称赞为"a killer feature"。
补丁的作者是Mike Galbrai,他刚刚发布了第三个修正版。该补丁为内核的调度器加入了224行代码,同时去除9行代码,起作用的代码总共233行。补丁的用途是设计自动为每个TTY创建任务组,降低延迟改进桌面交互性能。Mike完成的测试发现,最大延迟下降10倍以上,桌面的平均延迟下降60倍。Phoronix的测试显示,在Core
i7 970机器上编译内核时,同时播放的1080p《大雄兔》视频仍然很流畅。该补丁预计将合并到Linux 2.6.38中。
视频演示:一,二(YouTube)

20101115

学习就是一件要耐的住寂寞放的下欲望舍的得享乐的事 zz

学习就是一件要耐的住寂寞放的下欲望舍的得享乐的事 zz

2010-09-24 21:44:20
寂寞。
一个人早起晚睡不难,但在一群晚起早睡的人中早起晚睡不简单。
没人陪你占座,没人陪你背书,没人陪你写作。学习就是孤独的。
食堂,寝室,教室,你就只能去这三个地方

厕所你都要算好时间再去

没人经常短信你,没人经常鼓励你,没人一直关注你
不管是打雷下雨下雹子还是刀子。都要早起前行去学习,你的伙伴会贪睡不去,但不可以是你。

你的同桌室友饭友学友各种友都可以中途打断他们的计划,你不可以!你要学习
你一个人背着书包跑来跑去,你以为很傻很土很幼稚吗?

别人笑,是羡慕,你笑,是自信。


欲望。
想睡懒觉,想看电影,想吃大餐。但是他们都是花时间的事,占用学习时间的事。
可以放假,可以休息。
可要是每天多睡2小时,一年就多睡掉30.4天,一个月没了。每天看两集电视,又是一个月没了。
你还惭愧啊?

享乐。
她去看演唱会了,他去唱K了,他们去开房了。
都和我无关,因为我要学习。

他们打游戏,他们蜜月旅游,

都和我无关,因为我要学习。
钟南山也坚持运动打篮球,每天都跑步。但是人家大年三十上午还在搞研究。
没资本还不学习,

没背景还不学习,

智商不够还不学习

你好意思一把年纪了还吃爸妈的么。你有touch nano shuffle iPhone macbook,是你挣的么?

你穿Burberry喷Dior拎Prada,你儿子用什么?
你爸给你买房买车,你付得起物管,付得起年检么?

你穿什么,用什么,开什么,住什么,什么都不算

你读什么,看什么,想什么,做什么,什么都重要

教室前排的姐姐在你来之前就在那GRE,你走了,从寝室出来打水,她还在GRE。她GRE她GRE她GRE,你连六级的 分都刷不高

周末你多睡一个小时,到教室,自己的位子都被人占了,你还好意思说,同学,对不起,这是我的位子?

为了多睡一下,你丢掉了自己的位子,值吗?


你智商不高,情商不高,各种商不高;你背景不够,资本不够,各种不够;你还不学习?

你高中傻乎乎的把自己家的全套钥匙送给女朋友,你以为很浪漫很抒情很温柔很韩剧?

你不学习,你连一个钥匙串都买不起

你追求加内特詹姆斯科比麦蒂邓肯霍华德......

你不学习,连一张季前赛门票都买不起

你想去荷兰,想去普林斯顿,想去各种地方

你不学习,你就继续想吧.

你想去美国念研究生,欲在一个新的起点新的高度开始自己新的人生

你不学习,你连资格都没有

你羡慕周围同学拿到几千的奖学金

你不学习,你永远与领奖台无缘

别人花言巧语追女朋友,别人周末上街大包小包,别人假期飞来飞去

都不关我事,我要学习

别人逃课,兼职,游戏,

都不关我的事,我要学习

你说我没智商,没背景,没资本

没关系,我要学习

你说我固执,老套,OUT

没关系,我要学习


所以,学习就是一件要耐的住寂寞放的下欲望舍的得享乐的事。
你好意思那么懒那么不守时那么吃那么玩那么�哩叭嗦不看书么!!!
你好意思穿着各种签名在校园里面游荡,你好意思整天插U盾上淘宝?

你要学习,你要学习,你要学习!

(摘自网络,拿来自勉。)

20101109

Emacs补全利器:auto-complete+gccsense zz

 Emacs补全利器:auto-complete+gccsense zz

看起来很美,可是"UNIX-like system that can build GCC is required. Currently Windows is not supported, but in the future, it will be supported by combining with MinGW."

 

via Emacs中文网 by ahei on 11/7/10

作者: Menglong Tan

1 前言

搜索引擎上关于emacs代码补全的文章一大堆,大多讲的是cedet、semantic、ctags之类的。我自己也尝试过一些"主流"的组合,奈何都不来感啊。用得最长的也就auto-complete了,但是用的也仅仅是它自带的buffer内内容的补全,基本不涉及语义的补全。偶然发现了gccsense这个东西,简单配置了下,比较满意。有图有真相

Emacs gccsense


我绑定的补全键到M+/,这样,遇到要补全的地方,按下M+/就出现了补全菜单,旁边是提示。

2 简介

auto-complete提供一个补全的前端,通过不同的后端,支持ctags等。
gccsense是补全的后端,能提供符合语义的补全。因为它是直接利用gcc的代码,使用了编译器内在的分析器。它是一个独立的程序,目前通过插件可以被用到emacs和vim的补全上。因为是用的gcc的代码,理论上可以补全所有gcc支持的语言。
auto-complete和gccsense是一家出的。

3 安装

3.1 配置auto-complete

下载:http://cx4a.org/software/auto-complete/
配置.emacs,我的auto-complete在/mydoc/lib/emacs-plugins/下

; auto complete (add-to-list 'load-path "/mydoc/lib/emacs-plugins/auto-complete")   (require 'auto-complete-config)   (add-to-list 'ac-dictionary-directories "/mydoc/lib/emacs-plugins/auto-complete/ac-dict")   (ac-config-default)

3.2 配置gcc-code-assist

gcc-code-assist就是在gcc代码基础上改的,主要用来从代码中提取补全信息

  1. 下载:http://cx4a.org/software/gccsense/#Downloads
    编译安装之前,准备好环境,debian系统如下:
    sudo apt-get install build-essential libgmp3-dev libmpfr-dev flex ruby rubygems libsqlite3-ruby

    其它系统,如freebsd、macos请自行参考用户手册。

  2. 配置安装:
    $ tar xvjf gcc-code-assist-*.tar.bz2   $ cd gcc-code-assist-*   $ ./configure --program-suffix=-code-assist --enable-languages=c,c++ --disable-bootstrap --disable-multilib   $ make # -j2   $ sudo make install

    安装成功之后执行下,如果有正常输出,就说明安装成功:

    $ gcc-code-assist --version   $ g++-code-assist --version

3.3 安装配置gccsense

gccsense这个包包含一些辅助函数,以及编辑器的插件

  1. 解压缩之后,执行:
    $ cd gccsense-* $ sudo cp bin/* /usr/local/bin/
  2. 执行一下命令,确保安装成功:
    $ gccrec --version  $ autopch --version
  3. emacs的插件文件为etc/gccsense.el,放到插件目录然后,在.emacs里面加入
    (require 'gccsense)

    即可。
    由于我的gccsense.el放到了。/mydoc/lib/emacs-plugins/c下,并且把auto-complete的补全命令绑定到了M+/上,所以这部分配置如下:

    (add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")   (require 'gccsense)   (global-set-key "\257" (quote ac-complete-gccsense))

    ok,搞定。

4 主要模块介绍

在介绍使用前,简单介绍下几个主要模块的作用

  • gcc-code-assist
    gcc4.4代码基础上改的那位,用来从被补全代码中分析出补全信息
  • gccrec
    编译一个文件,往往要加上编译参数的,比如自定义的include地址。但是编辑器在补全的时候,是不知道这些的,硬生生地调用gcc-code-assist来"模拟编译",参数补全造成的错误会扰乱补全信息的获取。
    gccrec就是为了解决这个问题,在使用编辑器补全之前,需要执行一次gccrec,它会将编译参数信息存到~/.gccrec这个sqlite3的数据库中。具体用法参见下一节的示例。
  • autopch
    用来启用预编译头,来提高速度。
    autopch的相关部分请各位看官自行参考用户手册吧,后面的示例代码简单,不需要这个东西。

5 实例

  1. 准备一个测试cpp文件,test.cpp:
    #include <string>   using namespace std;   int main()   {       string s; }
  2. 使用gccrec记录编译命令
    gccrec g++-code-assist test.cpp

    这里可以认为g++-code-assist就是g++,参数一样的,比如-I -l之类的。

  3. 用emacs打开test.cpp,享受补全吧
    在string s;后面接着输入s.,然后按M-x ac-complete-gccsense,就可以利用auto-complete和它的gccsense后端来补全了。

6 附录

这里贴上我的emacs相关部分的配置文件。
我把补全的命令绑定到了M-/上面,
gccsense.el放到了/mydoc/lib/emacs-plugins/c/下面,所以这样写:

(add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")   (require 'gccsense)   (global-set-key "\257" (quote ac-complete-gccsense))

7 参考

分享家:Addthis中国

 
 

Things you can do from here:

 
 



--
Sincerely,
YANG Guifu
School of Computer Science and Information Technology
Northeast Normal University
Changchun, P.R.China
----
杨贵福
无不大工。

20101108

引体向上

引体向上

记得当年引体向上一直优秀来着,最近又试了一次。

大半夜的,给隐形眼镜去蛋白质的时候,发现没有生理盐水了。去买。

回到家楼下发现,没带钥匙和手机。

话说N年前的时候,一个门洞的邻居们要装楼下的防盗门。一楼的老太太说,要装
就装没有对讲的,不然不交钱。有对讲的对她没用,嫌贵。我住五楼,态度是要
么就装带对讲的,要么不交钱。

而且我想好了,如果装了防盗门没我的钥匙,我一定会把门砸了。

结果没装成。相信不是因为我的意见,而是因为大家都与老太太的意见相左。

这次暖房子工程,说是政府出一部分钱。结果防盗门关的时候特别重不说,没有
对讲,只对讲的位置上有个方形缺口。

根本没人征求我的意见,除了收钱和补收钱的时候。

本来以为没事,没想到出来匆忙,穿了没有腰带的裤子,没带钥匙。

更可怕的是没带电话。

午夜,砸门是不合适的。尽管一楼住的还是那位老太太。

中间找超市的小姑娘借了个电话打,她很担心的样子。此处略去不表,反正是失
败的尝试。

说到正题了。我准备爬雨达从一楼半进去。

雨达,就是一楼的门上面的那个部位,探出来一块。不知谁家在上面晾了些大葱。

眯着眼睛――因为戴的框架眼镜,视力有限――换各种角度看来半天,在楼道灯
光的映衬下,确定雨达上的窗户里面没插,有条缝。

第一次尝试。尽力踮脚,手尖刚能碰到。跳起抠住边缘,引体向上。探头看了看,
没有玻璃叉子啥的致命异物。有大葱若干,影响不大。

准备第二次的时候,先引体,然后这么蹬下墙,或者那么在墙边蹭一下,然后右
小臂上去,然后左小臂,或者腹部……

第二次尝试。前面都顺利,右小臂上去以后,左侧刚用力,发现坏了。

我忘了前一天受了伤。也是大半夜,心情郁闷,出去暴走伊通河岸。看中了一块
假山,就冲上去爬。石头又凉,屋檐的设计也……算了,我承认是我老了不中用,
或者年轻太冲动。反正最后把左肋骨在石头上磕了一下,当时听到咔嚓一声。好
在没断。

不过引体向上时一用力,感觉到有点疼。心想,下次吧,下次做些准备。

第三次,先让自己激动起来,心PENGPENG跳。然后起跳,引体。完了。这是所有
以后失败尝试的开始。从那以后,小臂都没有上得了平台。

后来我搬了台自行车。但是发现也没啥用。它能帮助前半段步骤,但是我需要帮
助的恰是身体悬空以后,那时已经踩不到车子了。而且向下一看,吓我一身冷汗。
如果一悠的时候失了手,可就被自行车接着了,那家伙张牙舞爪的。好不容易才
又安全踩在车横梁上,松了一口气。

然后车子搬到门的另一侧,想借助排水管……

后来我悲哀地发现,此前一直把电影和网上跑酷的视频当了现实,把自己投射上
去了。原来这么一蹬那么一踩如此之难。更加之前一天伤了肋骨,决定以后只用
静力不敢使冲劲了。

只好一边尝试各种爬法,一边感觉到汗水开始干下去,在夜里挺冷的贴在身上。

当看到楼道里的灯依次从上向下亮起,最后楼门洞开,我知道,得救了。

后记是当天就发现两腕酸疼,原来需要锻炼的是腕力。第二天第三天下腹部至上
腹部肌肉紧张酸疼(注:我续连一百个仰卧起坐的时候,第二天也没有这么明显
的感觉),腹肌也要用这么多,可是万万没有想到。

这个故事告诉我们:

一、要坚持原则,没有对讲系统的防盗门坚决不能同意安装;

二、要永远穿有腰带的裤子,这样可以随时把钥匙带在身上;

三、手机很重要,不仅要24小时开机,更重要的是随身携带;

四、岁数大了,少扯淡。

20101103

无IP的打印服务器解决方案 zz

无IP的打印服务器解决方案 zz

刘香玉的日志

刘香玉的主页 » TA的所有日志 » 查看日志
打印机服务器不能上外网,可以实现局域网内打印机共享吗?

已有 5 次阅读 17小时前
今天试验了一下,可以。
具体情形是这样的:
校园里每台电脑都需要在iNode软件上输入自己的帐号、密码,自动获取IP上网。但是,办公室里几个同事都只有一个帐号供自己用,没有多余的帐号供给装打印机的电脑(暂称打印机服务器),所以打印机服务器不能上网浏览校内外的主页。
虽然这些电脑都连着同一个路由器,构成一个小局域网,但是由于iNode软件的限制,不能给每台电脑分配192.168.X.X这样的固定IP,必须保持网络属性中IP地址是空白。所以,传统的用IP查找电脑、实现打印机共享的办法也用不了。

那么最终怎么实现打印机服务器不能上网浏览网页,却能让其他电脑共享它的打印机呢?
呵呵,其实挺简单,用工作组就可以了。
就是说,这些连在一个路由器或者HUB上的电脑,都在一个工作组上,通过网上邻居"查看工作组计算机"能找到彼此,就可以了。

设为同一工作组的具体步骤:
首先,确保这些连在一个路由器或Hub上的电脑的工作组名称都和打印机服务器的一致。(我的电脑>属性>计算机名>工作组>更改,重启)
第二,所有电脑都在"本地链接"属性那里安装了两个协议:"网络的文件和打印机共享"、"NWLink IPX/SPX/NetBIOS
Compatible Transpor..."。
第三,所有电脑开机,在网上邻居里点"查看工作组计算机",等一会儿就应该可以看到各机。至此同一工作组设置完毕。
然后把打印机服务器上的打印机属性设为共享,当别的电脑在工作组中看到服务器时,点开双击打印机图标即可。

不知遇到类似情形的朋友有多少,先记下来供参考吧。。