He 的个人资料The Voices of a Distant ...照片日志列表更多 ![]() | 帮助 |
|
2月27日 假假真真 这是一个冗长而无聊的故事。
有聊的人可以直接跳过。
年前。某日。自由港。
与丧丧、BF在自由港k歌,突然丧丧在BF耳边悄悄说了些什么,我顿时生疑,追问之。
丧丧手一挥,义正词严道:这是一个惊天大秘密,我是断然不会告诉你的。
……
三分之一柱香之后,我以丧丧少请我一顿饭的代价换来了这个秘密:NN有男朋友啦~
虽然很为NN同学感到高兴,但是我还是有点怀疑这个消息的真实性,因为没道理丧丧会比我先得到这个消息啊。不过他很快解开了我的疑惑。
某日的数天前。夜黑风高。自动化内耗二人组寝室。
ZK:NN有男朋友了你知道伐
ZK(叹气):你怎么一点都不急啊,还整天安安稳稳对着电脑
ZK:无眠的夜晚你寂寞吗?
……
ZK(叹气):哎,我真羡慕像你这样的,心灵就像吃食的猪一样平静。
丧丧(扯下耳机,愤愤的摔了下鼠标):艹,小师弟是腿啊,害我又挂了。
丧丧(回头):啊?你说什么?
某日的数天后。路遇ZK。
……
瞎扯淡若干。
……
我:NN真有男朋友啦?
ZK:啊,这事不是你那天说的吗?
我:……
很早很早以前的那天
那天是元旦大家聚会,围做一桌。
打扮得花枝招展的NN:你女朋友怎么没来?
我开玩笑道:你打扮得那么好,怎么男朋友没来啊?
Over
总结:我开的玩笑被zk信以为真说给丧丧听,丧丧再高价将此谣言出售与我。
再总结:八卦害人。
再再总结:没有谁的嘴巴是牢靠的……
——————————————————————大树的分割线———————————————————————
大树:老板突然通知,又要去米国了。
我:我艹这么爽啊,去干嘛?
大树:去圆你的梦啊。(此典故参见上一篇八卦:大树与外国妞的故事)
夜里又做了个梦,又梦见了大树与外国妞相遇的那个广场,大树也在那儿,只不过身边妞不见了,有个黑人猛男……
2月22日 Life is a magicNow you looking for the secret. But you won’t find it out cause you’re not really looking. You don’t really want to work it out. You want to be Fooled.
12月18日 出来混,迟早是要还的 但是!这点程度,跟长沙的损友们比起来,まだまだ,你们还嫩着呢。 继续混。 ---------------------------zk的分割线------------------------------- 辛苦的耕耘总会换来收获。zk在实验室勤恳的干活,任劳任怨,甚至连校内的头像都用上了自己的人脸识别技术,实应评为2008年感动4班十大人物之一。 古语有云,有心人,天不负。zk的努力终于打动了上天。某日,zk电话曰有一女生过来,问我有意否。我本着以玩三国杀为主的态度 杀将过去,见着此女,据zk坦白说是考研时认识的,大树小新貌似有印象。 谣言1 自动化某男:我走在路上,不经意瞄见前面一男一女走得很近,那女的还搂着男生的手臂,十分幸福状。我想这对儿还真甜蜜啊,不想走过去突然那男的冲我打招呼吓了我一跳,定睛一看居然是zk!谣言2 神秘人物:三国杀之后我们去四食二楼吃披萨,吃着吃着那女生突然捏了zk一下脸!捏哦!脸哦!想捏小新一样的捏哦!我拿我CS转EE的信誉担保!但当问起两人关系时,zk连连摇头,忙说不是我的类型,不是我的类型。 两个礼拜之后 qq上突然亮起了那个浮雕效果的经过人脸识别技术处理过的可以做出被车碾过表情的脸,突然问了我一个问题,害我差点把嘴里的水喷了一屏幕。 他问:有啥借口能搪塞那个纠缠他的女人?这个礼拜她又说要来交大玩…… 这个问题,本来是很正常的。 可是 为啥要问我呢?!评啥要问我呢?! 难道我脸上写着“这个男人很会扯谎”或者“这个男人经验丰富”吗?! 冷静,冷静。 本故事纯属添油加醋,如有巧合,纯属雷同 ------------------------大树的分割线------------------------------------- 某日,在某广场撞见大树与一外国女子相识相知。 然后我醒了。 若干日后,又在某广场撞见大树,大树介绍道,这是我girl friend,手一指,正是前些天看见的那外国女子!我靠梦竟成真了! 然后我又醒了。 我想,这几天是不是该去图书馆看看梦的解析。 -----------------------------丧丧的分割线----------------------------- 人生就是这样。 你用同一个号码买了二十年的彩票,无意中奖。 当你终于灰心丧气,把最后一张彩票给了朋友,却发现这张中了头彩。 其实,我想说的只是,在我力力和小朋友三人坐在包厢里,被十余华师mm包围时,我们提前四五天通知,当天打了十余次电话不接,专程跑上电院二号楼实验室去找人未果,联谊开始半小时后打电话过来说睡过头了的丧丧的感觉。 --------------------------力力的分割线------------------------------- 没啥好说的。 也就复合而已。 撒花~ ---------------------------情圣们的分割线--------------------------------- 感谢,那些在我迷茫时,殷勤的向我提出各种建议的,有过很多次恋爱经历的,有过数次恋爱经历的,有过一次恋爱经历的和没有过恋爱经历的情圣们。 没有你们,我将寸步难行。 11月19日 gcc和vc编译器在语法上的比较 (zz)gcc编译器的功能强大,支持的语法也非常灵活,给我们在编程时带来了非常大的方便,也给移植代码时带来了一定的难度。
2 switch语法中的case语句:
gcc: case '0' ... '9' vc: case 0: case1:
...
3 寄存器变量的作用范围:
gcc: 可以把register变量声明为全局或局部的 vc: 只能是局部变量 4 有符号和无符号整形:
gcc: 在常量数字后面加LL或ULL,例如: 无符号:0xffffffffffffffffULL 有符号:0xffffffffffffffffLL vc: 在常量数字前加强制转换。例如: 无符号:(uint64_t)0xffffffffffffffff 5 宏变参
gcc: #define AAA(x...) vc: 不支持,在实际中碰到此类问题时只能根据代码分析实际情况将它分解成若干个宏 6 对数组中指定元素的初始化:
gcc: static int array[100] = { [10] = 10, /* array[10] = 10; */ [20] = 20, /* array[20] = 20; */ } 功能:通过这种方法,可在数组的声明当中就初始化指定元素的值,除了arrar[10]和array[20]外,其余元素会自动初始化为默认值,这给我们带来了一种很简捷的办法,这功能是不是很酷? vc: 不支持,只能通过在指定元素前后填充0或另外写一个初始化函数来实现。如初始化函数可以这样写: void init_array() { array[10] = 10; array[20] = 20; } 7 结构体的对齐:
先解释一下如下几个属性关键字的含义: 1 属性 packed: 用于变量和类型,表示变量或结构域时使用最小可能的对齐,用于枚举、结构或联合类型时表示该类型使用最小的内存。 2 属性 aligned:用于变量、结构或联合类型,指定变量、结构域、结构或联合的对齐量,以字节为单位。 3 属性 noreturn:用于函数,表示该函数从不返回。这可以让编译器生成稍微优化的代码,最重要的是可以消除不必要的警告信息比如未初使化的变量。 4 属性 unused:用于函数和变量,表示该函数或变量可能不使用,这个属性可以避免编译器产生警告信息。 如上这些关键字在gcc和vc中都是相对应的,只是使用的方法不一样。注意:vc必须装了service pack补丁后才支持。 gcc:
struct __attribute__((packed)) st_syment { ... } vc: #pragma pack(push,1) struct st_syment { ... } #pragma pack(pop) 表示在这个结构体的元素是按字节对齐的。 gcc: __attribute__((aligned(16)))
vc: __declspec(align(16)) 表示创建此结构体实例时按16字节对齐。 gcc: __attribute((noreturn)) vc: __declspec(noreturn) 表示此函数不需要返回。 8 得到当前函数的返回地址,就是这个函数被调用处的下条指令地址。例如: push edx call _func /* 调用名为func函数 */ pop edx 而在func()函数中又有这样一条语句: void func() { ... retaddr = __builtin_return_address(0); /* 此条语句执行后,retaddr的值应该是上面pop edx指令的地址 */ ... } gcc: retaddr = __builtin_return_address(0)
vc: __asm { mov eax, [ebp+4] } __asm { mov retaddr, eax } 我们知道,cpu执行一条指令时,eip总是指向下一条指令地址的,在调用一个函数前,就会先把eip入栈,以便函数返回后继续执行后面的指令,也就是说,在进入函数之前,栈顶(esp)的值就是eip了,所以我们就可以根据这个思路来解决。在vc编译后生成的汇编代码中,每个函数头部都有这样两条指令: push ebp mov ebp, esp 就是将原来的esp放到ebp中了,加上前面一句push ebp,而压栈的顺序又是由高到低的,所以[ebp+4]就等于函数被调之前的eip。 11月13日 宅男会武术,谁都挡不住(zz)标 题: みくみく地揍扁你zz 发信站: 饮水思源 (2008年11月13日09:37:24 星期四), 站内信件 http://www.acgtalk.com/node/891 11月9日,东京都文京区的某个拳击馆内,一个男人正在拳台边等待着他的对手。如果可 以打败接下来的这个敌人,他将成为“新日本搏击联盟(NJKF)”新设的超次中量级别 冠军。司仪喊出了对方的名字,看起来是要入场了。这个男人微微抬起头,多少想试图 记住那个即将被自己痛揍的对手——就在这时,场馆里响起了《绝对可怜CHILDREN》的 主题曲。他可能没有在半夜看动画片的习惯,也不会没事上ニコニコ打发时间,更加不 会知道之后的那首《みくみくにしてあげる?》意味着什么了。不过,当他看到一个扎着 蓝色双马尾,穿着女装,手里还捏着两棵大葱的猛男手舞足蹈地跳上拳台时,他多少还 是有点受惊。 64秒后,这个连名字都很难查到的男人被初音ミク干脆利落地TKO(Technical Knock Out/裁判判断选手不能继续比赛而宣布比赛结束)掉了。 而那个COS成初音ミク入场的拳手——長島☆自演乙☆雄一郎以九战全胜的战绩成为了NJ KF的首个超次中量级冠军。 这位長島☆自演乙☆雄一郎是何许人也?在他的BLOG里这样自我介绍: 绰号:長島☆自演乙☆雄一郎 性別:男性 生日:1984年7月2日 血液型:A型 出身地:兵庫県 工作:COSPLAY (←这人的事业观真的有点不对头诶) 趣味:格闘技 日本拳法 属性:傲娇,有时会黑化 自我介绍: 动画宅目前格斗技挑战中!不会再让comike狩猎这样的事件发生了!!!www住在兵庫県 西宮市的COSER。 ……中略…… 梦想是在K-1建立COSPLAY应援团席。 ===============分隔线=============== ……COMIKE狩猎碰到这样的对手会被揍到死的吧! 此君前几次出场也都是COS入场,分别是凉宫春日(制服)、朝比奈实玖琉(女仆装)、 泉此方(啦啦队服)、泉此方(冬制服)、凉宫春日(超勇者)以及龙宫礼奈(私服) 。 还有视频,勇士可以进link观看。。。 11月7日 两个小男孩的故事by 垃圾罗
两个小男孩的故事6
从前,有两个小男孩,初中时,男孩A跟男孩B不在一个班,有天放学,他们看见男孩B班上一个老实的同学在学校前的路口被两个不良少年欺负,四周围了很多
人,包括男孩B跟班上的其他同学在内,都忌惮不良少年的嚣张气焰,不敢上前阻止,只能看着老实的同学被打;这时,是男孩A挺身而出,冲到中间隔开他们,保
护那个老实的同学,结果自己狠狠地挨了几拳,哎,男孩A为了显示自己的个人英雄主义,还真是自不量力,不过那次,男孩B小小的心灵被震撼了。
两个小男孩的故事7
从前,有两个小男孩,某晚男孩A跟男孩B在另一个男孩家里玩到深夜,一起回家的路上碰到了一个叫“蔡八黑”的疯子在“打拳”,他俩很傻X的边看边笑觉得很
好玩,谁知“蔡八黑”突然冲过来对着男孩B的屁股踢了一脚,吓得男孩A跟男孩B屁滚尿流,鬼叫着飞似的逃回了家,现在想想,男孩A还真是个瘟神,跟他一起
就是倒霉,如果当时男孩B不幸被“蔡八黑”逮到肢解分尸丢弃荒野的话,估计男孩B做鬼也要诅咒男孩A这个大瘟神。 11月4日 Kiwi! | 有梦就能飞翔 http://www.youtube.com/watch?v=sdUUx5FdySs 那个藏在心底的梦想。 当你我在为生活奔波劳苦时,或许偶尔还能回想起来。 俗人如我,笑一笑,把梦想埋回深处,继续奔波。 傻人如此鸟。 只是嘴上说着“瞧这鸟多傻”的时候,心里突然有一丝感动,羡慕起他的勇气。 当音乐盒声响起,两只稚嫩的翅膀长出,我想,傻鸟的心中一定无憾了。 10月23日 神作·『十二国記』——最喜欢的一段台词私は庆の民に、そんな不羁の民に成って欲しい / 我希望庆的子民能成为这样自己不羁之民 9月22日 开学这点事 张凯与SN的故事
SN:zk,打羽毛球去伐? zk:好啊! SN:太好了,个么你去订场地吧。 zk:…… zk:场子订好了。
SN:太好了,个么有哪些人去啊~ zk:…… 于是,zk就和sn就两个人去打羽毛球了~ -----------------我是分隔符----------------------------- 丧丧和果南的故事 果南刚来报到那天,我跟丧丧帮他把行李搬到他寝室,聊了会儿天,正好遇见果南室友在,自我介绍道“我叫马xx”。 过了一会儿,我跟丧准备回去了。刚出门,丧很腼腆,很神秘的悄声说:“他叫什么?” 我大惊,与丧同寝4年,虽然他与BF常发现在自己的内裤在对方衣橱里,但我一直坚信他是个有着正常取向的好青年。难道与zk短短一年的同居生涯就令他改变如此之大?
话说回来,身为跨世纪的人才,思想上也需要与时俱进,更何况身处在祝胖子口中随便一块板砖扔下去就能砸死几个gay的交大,我决定以包容的心态对待丧。 于是我平静了下心情,镇定的告诉丧:“他叫马xx。” 不料,丧摇了摇头,说:“不,我是问果南叫什么。”
…… -----------------我是分隔符----------------------------- 力力的故事一 前一阵力力淘了个智能手机,很屌。 过了一阵我发现力力又换了个手机,感慨道:“实习赚钱了就是不一样啊。” 力力说,不是,跟实习小老板交换手机玩儿呢。(实习小老板是个单身复旦女) 力力的故事二 前两天,开qq时突然瞄到力力签名改成了“每个女孩都值得人怜惜。” 我想,这酸得比二女一指还令人倒胃口的签名肯定是追女仔用的。 果不其然,力力在第N次放出“我艹再给我一次机会我一定上去搭讪”的豪言之后终于行动了,过程曲折复杂离奇。先是力力去健身房,看见该小mm,有了想法但是再次像打dota用电魂一般ws在了后面。回头在bbs上发了个帖寻人,居然还给这mm的同学看到了给了个校内链接……于是力力要到了qq号,顺利搭讪上了大三的管院小mm,据说还没有感情经验,正准备进一步发展。 在我眼中已然处在牛A到牛C的半途中的力力不忘阶级兄弟,继续鞭策我们: “你们不行啊。你是不急(谁说我不急T.T),zpc就知道嘴上说,一点行动都没有……” 9月17日 javactript关闭窗体,刷新父窗体//关闭,父窗口弹出对话框,子窗口直接关闭
this.Response.Write("<script language=javascript>window.close();</script>"); //关闭,父窗口和子窗口都不弹出对话框,直接关闭 this.Response.Write("<script>"); this.Response.Write("{top.opener =null;top.close();}"); this.Response.Write("</script>"); //弹出窗口刷新当前页面width=200 height=200菜单。菜单栏,工具条,地址栏,状态栏全没有 this.Response.Write("<script language=javascript>window.open (''rows.aspx'',''newwindow'',''width=200,height=200'')</script>"); //弹出窗口刷新当前页面 this.Response.Write("<script language=javascript>window.open(''rows.aspx'')</script>"); this.Response.Write("<script>window.open(''WebForm2.aspx'',''_blank'');</script>"); //弹出提示窗口跳到webform2.aspx页(在一个IE窗口中) this.Response.Write(" <script language=javascript>alert(''注册成 功'');window.window.location.href=''WebForm2.aspx'';</script> "); //关闭当前子窗口,刷新父窗口 this.Response.Write ("<script>window.opener.location.href=window.opener.location.href;window.close ();</script>"); this.Response.Write("<script>window.opener.location.replace (window.opener.document.referrer);window.close();</script>"); //子窗口刷新父窗口 this.Response.Write ("<script>window.opener.location.href=window.opener.location.href;</script>"); this.Response.Write("<script>window.opener.location.href=''WebForm1.aspx'';</script>"); //弹出提示窗口.确定后弹出子窗口(WebForm2.aspx) this.Response.Write("<script language=''javascript''>alert(''发表成功!'');window.open (''WebForm2.aspx'')</script>"); //弹出提示窗口,确定后,刷新父窗口 this.Response.Write("<script>alert(''发表成 功!'');window.opener.location.href=window.opener.location.href;</script>"); //弹出相同的一页 <INPUT type="button" value="Button" onclick="javascript:window.open(window.location.href)"> // Response.Write("parent.mainFrameBottom.location.href=''yourwebform.aspx?temp=" +str+"'';"); <SCRIPT LANGUAGE="javascript"> <!-- window.open (''page.html'', ''newwindow'', ''height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no'') //这句要写成一行 --> </SCRIPT> 参数解释: <SCRIPT LANGUAGE="javascript"> js脚本开始; window.open 弹出新窗口的命令; ''page.html'' 弹出窗口的文件名; ''newwindow'' 弹出窗口的名字(不是文件名),非必须,可用空''''代替; height=100 窗口高度; width=400 窗口宽度; top=0 窗口距离屏幕上方的象素值; left=0 窗口距离屏幕左侧的象素值; toolbar=no 是否显示工具栏,yes为显示; menubar,scrollbars 表示菜单栏和滚动栏。 resizable=no 是否允许改变窗口大小,yes为允许; location=no 是否显示地址栏,yes为允许; status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许; </SCRIPT> js脚本结束 ''newwin'':隐藏菜单栏地址栏工具条 width=50:宽度 height=50:高度 scrollbars=yes/no:滚动条 top=50:窗口距离屏幕上方 left=50:窗口距离屏幕左侧 例:window.open(''detail.aspx?ID="+e.Item.Cells [1].Text+"'',''newwin'',''width=750,height=600,scrollbars=yes,top=50,left=50'');"); this.Response.Write("<Script>window.open (''WebForm2.aspx'','''',''toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=n o,resizable=yes,width=750,height=470,left=80,top=40'');</script>"); 例: this.Response.Write("<script>alert(''发表成 功!'');window.opener.location.href=window.opener.location.href;</script>"); this.Response.Write("<script>"); this.Response.Write("{top.opener =null;top.close();}"); this.Response.Write("</script>"); 例: linkcolumn1.DataNavigateUrlFormatString="javascript:varwin=window.open(''edit_usr.aspx? actid={0}'',''newwin'',''width=750,height=600,scrollbars=yes,top=50,left=50'');window.close()"; this.Response.Write("<Script>window.open (''WebForm7.aspx'','''',''toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=n o,resizable=yes,width=750,height=470,left=80,top=40'');</script>"); 弹出跟你当前的窗口有没有菜单工具栏没有关系,你只要在页面中写一个脚本它就弹出了.比如 <a href=# onclick="window.open(''xxx.aspx'',''窗口名称'',''参数'');">xxxxx</a> 以下列出一些弹出窗口的参数,你可自行设定,参数之间用逗号分隔 可选。字符串--列出对象表并用逗号分开。每一项都有自己的值,他们将被分开(如:"fullscreen=yes, toolbar=yes")。下面是被支持的各种特性。 channelmode = { yes | no | 1 | 0 } 是否在窗口中显示阶梯模式。默认为no。 directories = { yes | no | 1 | 0 } 是否在窗口中显示各种按钮。默认为yes。 fullscreen = { yes | no | 1 | 0 } 是否用全屏方式显示浏览器。默认为no。使用这一特性时需要非常 小心。因为这一属性可能会隐藏浏览器的标题栏和菜单,你必须提供一个按钮或者其他提示来帮助使用者 关闭这一浏览窗口。ALT+F4可以关闭窗口。一个全屏窗口必须使用阶梯(channelmode)模式。 height = number 指定窗口的高度,单位是像素。最小值是100。 left = number 指定窗口距左边框的距离,单位是像素。值必须大于或者等于0。 location = { yes | no | 1 | 0 } 指定是否在窗口中显示地址栏。默认为yes。 menubar = { yes | no | 1 | 0 } 指定是否在窗口中显示菜单栏。默认为yes。 resizable = { yes | no | 1 | 0 } 指定是否在窗口中显示可供用户调整大小的句柄。默认为yes。 scrollbars = { yes | no | 1 | 0 } 指定是否在窗口中显示横向或者纵向滚动条。默认为yes。 status = { yes | no | 1 | 0 } 指定是否在窗口中显示状态栏。默认为yes。 titlebar = { yes | no | 1 | 0 } 指定是否在窗口中显示标题栏。在非调用HTML Application或者一个 对话框的情况下,这一项将被忽略。默认为yes。 toolbar = { yes | no | 1 | 0 } 指定是否在窗口中显示工具栏,包括如前进、后退、停止等按钮。默 认为yes。 top = number 指定窗口顶部的位置,单位是像素。值必须大于或者等于0。 width = number 指定窗口的宽度,单位是像素。最小值是100。 【1、最基本的弹出窗口代码】 <SCRIPT LANGUAGE="javascript"> <!-- window.open (''page.html'') --> </SCRIPT> 因为这是一段javascripts代码,所以它们应该放在<SCRIPT LANGUAGE="javascript">标签和 </script>之间。<!-- 和 -->是对一些版本低的浏览器起作用,在这些老浏览器中不会将标签中的代码作 为文本显示出来。要养成这个好习惯啊。window.open (''page.html'') 用于控制弹出新的窗口page.html ,如果page.html不与主窗口在同一路径下,前面应写明路径,绝对路径(http://)和相对路径(../)均可 。用单引号和双引号都可以,只是不要混用。这一段代码可以加入HTML的任意位置,<head>和</head>之 间可以,<body>间</body>也可以,越前越早执行,尤其是页面代码长,又想使页面早点弹出就尽量往前 放。 【2、经过设置后的弹出窗口】 下面再说一说弹出窗口的设置。只要再往上面的代码中加一点东西就可以了。我们来定制这个弹出的 窗口的外观,尺寸大小,弹出的位置以适应该页面的具体情况。 <SCRIPT LANGUAGE="javascript"> <!-- window.open (''page.html'', ''newwindow'', ''height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no'') //这句要写成一 行 --> </SCRIPT> 参数解释: <SCRIPT LANGUAGE="javascript"> js脚本开始; window.open 弹出新窗口的命令; ''page.html'' 弹出窗口的文件名; ''newwindow'' 弹出窗口的名字(不是文件名),非必须,可用空''''代替; height=100 窗口高度; width=400 窗口宽度; top=0 窗口距离屏幕上方的象素值; left=0 窗口距离屏幕左侧的象素值; toolbar=no 是否显示工具栏,yes为显示; menubar,scrollbars 表示菜单栏和滚动栏。 resizable=no 是否允许改变窗口大小,yes为允许; location=no 是否显示地址栏,yes为允许; status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许; </SCRIPT> js脚本结束 【3、用函数控制弹出窗口】 下面是一个完整的代码。 <html> <head> <script LANGUAGE="javascript"> <!-- function openwin() { window.open ("page.html", "newwindow", "height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") //写成一行 } //--> </script> </head> <body onload="openwin()"> 任意的页面内容... </body> </html> 这里定义了一个函数openwin(),函数内容就是打开一个窗口。在调用它之前没有任何用途。怎么调用 呢? 方法一:<body onload="openwin()"> 浏览器读页面时弹出窗口; 方法二:<body onunload="openwin()"> 浏览器离开页面时弹出窗口; 方法三:用一个连接调用: <a href="#" onclick="openwin()">打开一个窗口</a> 注意:使用的“#”是虚连接。 方法四:用一个按钮调用: <input type="button" onclick="openwin()" value="打开窗口"> 【4、同时弹出2个窗口】 对源代码稍微改动一下: <script LANGUAGE="javascript"> <!-- function openwin() { window.open ("page.html", "newwindow", "height=100, width=100, top=0, left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no, location=n o, status=no")//写成一行 window.open ("page2.html", "newwindow2", "height=100, width=100, top=1 00, left=100,toolbar=no, menubar=no, scrollbars=no, resizable=no, loca tion=no, status=no")//写 成一行 } //--> </script> 为避免弹出的2个窗口覆盖,用top和left控制一下弹出的位置不要相互覆盖即可 。最后用上面说过 的四种方法调用即可。 注意:2个窗口的name(newwindows和newwindow2)不要相同,或者干脆全部为空。 【5、主窗口打开文件1.htm,同时弹出小窗口page.html】 如下代码加入主窗口<head>区: <script language="javascript"> <!-- function openwin() { window.open("page.html","","width=200,height=200") } //--> </script> 加入<body>区: <a href="1.htm" onclick="openwin()">open</a>即可。 【6、弹出的窗口之定时关闭控制】 下面我们再对弹出的窗口进行一些控制,效果就更好了。如果我们再将一小段 代码加入弹出的页面( 注意是加入page.html的HTML中,不是主页面中),让它10秒后自动关闭是不是更酷了? 首先,将如下代码加入page.html文件的<head>区: <script language="javascript"> function closeit() { setTimeout("self.close()",10000) //毫秒 } </script> 然后,再用<body onload="closeit()"> 这一句话代替page.html中原有的<BODY>这一句就可以了。( 这一句话千万不要忘记写啊!这一句的作用是调用关闭窗口的代码,10秒钟后就自行关闭该窗口。) 【7、在弹出窗口中加上一个关闭按钮】 <FORM> <INPUT TYPE=''BUTTON'' VALUE=''关闭'' onClick=''window.close()''> </FORM> 呵呵,现在更加完美了! 【8、内包含的弹出窗口-一个页面两个窗口】 上面的例子都包含两个窗口,一个是主窗口,另一个是弹出的小窗口。通过下面的例子,你可以在一 个页面内完成上面的效果。 <html> <head> <SCRIPT LANGUAGE="javascript"> function openwin() { OpenWindow=window.open("", "newwin", "height=250, width=250,toolbar=no ,scrollbars="+scroll+",menubar=no"); //写成一行 OpenWindow.document.write("<TITLE>例子</TITLE>") OpenWindow.document.write("<BODY BGCOLOR=#ffffff>") OpenWindow.document.write("<h1>Hello!</h1>") OpenWindow.document.write("New window opened!") OpenWindow.document.write("</BODY>") OpenWindow.document.write("</HTML>") OpenWindow.document.close() } </SCRIPT> </head> <body> <a href="#" onclick="openwin()">打开一个窗口</a> <input type="button" onclick="openwin()" value="打开窗口"> </body> </html> 看看OpenWindow.document.write()里面的代码不就是标准的HTML吗?只要按照格式写更多的行即可 。千万注意多一个标签或少一个标签就会出现错误。记得用 OpenWindow.document.close()结束啊。 【9、终极应用--弹出的窗口之Cookie控制】 回想一下,上面的弹出窗口虽然酷,但是有一点小毛病,比如你将上面的脚本放在一个需要频繁经过 的页面里(例如首页),那么每次刷新这个页面,窗口都会弹出一次,我们使用cookie来控制一下就可以了 。 首先,将如下代码加入主页面HTML的<HEAD>区: <script> function openwin(){ window.open("page.html","","width=200,height=200") } function get_cookie(Name) { var search = Name + "=" var returnvalue = ""; if (document.cookie.length > 0) { offset = document.cookie.indexOf(search) if (offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset); if (end == -1) end = document.cookie.length; returnvalue=unescape(document.cookie.substring(offset, end)) } } return returnvalue; } function loadpopup(){ if (get_cookie(''popped'')==''''){ openwin() document.cookie="popped=yes" } } </script> 然后,用<body onload="loadpopup()">(注意不是openwin而是loadpop啊!)替换主页面中原有的 <BODY>这一句即可。你可以试着刷新一下这个页面或重新进入该页面,窗口再也不会弹出了。真正的Pop -Only-Once! 9月9日 FFMpeg框架代码阅读简介
FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码.
TCPMP, VLC, MPlayer等开源播放器都用到了FFmpeg。
FFmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。其中libavcodec用于存放各个encode/decode模块,libavformat用于存放muxer/demuxer模块,libavutil用于存放内存操作等常用模块。
以flash movie的flv文件格式为例, muxer/demuxer的flvenc.c和flvdec.c文件在libavformat目录下,encode/decode的mpegvideo.c和h263de.c在libavcodec目录下。
muxer/demuxer与encoder/decoder定义与初始化
muxer/demuxer和encoder/decoder在FFmpeg中的实现代码里,有许多相同的地方,而二者最大的差别是muxer和demuxer分别是不同的结构AVOutputFormat与AVInputFormat,而encoder和decoder都是用的AVCodec结构。
muxer/demuxer和encoder/decoder在FFmpeg中相同的地方有:
l 二者都是在main()开始的av_register_all()函数内初始化的。
l 二者都是以链表的形式保存在全局变量中的。
muxer/demuxer是分别保存在全局变量AVOutputFormat *first_oformat与AVInputFormat *first_iformat中的。
encoder/decoder都是保存在全局变量AVCodec *first_avcodec中的。
l 二者都用函数指针的方式作为开放的公共接口。
demuxer开放的接口有:
int (*read_probe)(AVProbeData *);
int(*read_header)(struct AVFormatContext *, AVFormatParameters *ap);
int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);
int (*read_close)(struct AVFormatContext *);
int (*read_seek)(struct AVFormatContext *, int stream_index, int64_t timestamp, int flags);
muxer开放的接口有:
int (*write_header)(struct AVFormatContext *);
int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
int (*write_trailer)(struct AVFormatContext *);
encoder/decoder的接口都是一样的,只不过二者分别只实现encoder和decoder函数:
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, uint8_t *buf, int buf_size);
仍以flv文件为例来说明muxer/demuxer的初始化。
在libavformat\allformats.c文件的av_register_all(void)函数中,通过执行
REGISTER_MUXDEMUX(FLV, flv);
将支持flv 格式的flv_muxer与flv_demuxer变量分别注册到全局变量first_oformat与first_iformat链表的最后位置。
其中flv_muxer在libavformat\flvenc.c中定义如下:
AVOutputFormat flv_muxer = {
"flv",
"flv format",
"video/x-flv",
"flv",
sizeof(FLVContext),
#ifdef CONFIG_LIBMP3LAME
CODEC_ID_MP3,
#else // CONFIG_LIBMP3LAME
CODEC_ID_NONE,
CODEC_ID_FLV1,
flv_write_header,
flv_write_packet,
flv_write_trailer,
.codec_tag= (const AVCodecTag*[]){flv_video_codec_ids, flv_audio_codec_ids, 0},
}
AVOutputFormat结构的定义如下:
typedef struct AVOutputFormat {
const char *name;
const char *long_name;
const char *mime_type;
const char *extensions; /**< comma separated filename extensions */
/** size of private data so that it can be allocated in the wrapper */
int priv_data_size;
/* output support */
enum CodecID audio_codec; /**< default audio codec */
enum CodecID video_codec; /**< default video codec */
int (*write_header)(struct AVFormatContext *);
int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
int (*write_trailer)(struct AVFormatContext *);
/** can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */
int flags;
/** currently only used to set pixel format if not YUV420P */
int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *);
int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, AVPacket *in, int flush);
/**
* list of supported codec_id-codec_tag pairs, ordered by "better choice first"
* the arrays are all CODEC_ID_NONE terminated
*/
const struct AVCodecTag **codec_tag;
/* private fields */
struct AVOutputFormat *next;
} AVOutputFormat;
由AVOutputFormat结构的定义可知,flv_muxer变量初始化的第一、第二个成员分别为该muxer的名称与长名称,第三、第四个成员为所对应MIMIE Type和后缀名,第五个成员是所对应的私有结构的大小,第六、第七个成员为所对应的音频编码和视频编码类型ID,接下来就是三个重要的接口函数,该muxer的功能也就是通过调用这三个接口实现的。
flv_demuxer在libavformat\flvdec.c中定义如下, 与flv_muxer类似,在这儿主要也是设置了5个接口函数,其中flv_probe接口用途是测试传入的数据段是否是符合当前文件格式,这个接口在匹配当前demuxer的时候会用到。
AVInputFormat flv_demuxer = {
"flv",
"flv format",
0,
flv_probe,
flv_read_header,
flv_read_packet,
flv_read_close,
flv_read_seek,
.extensions = "flv",
.value = CODEC_ID_FLV1,
};
在上述av_register_all(void)函数中通过执行libavcodec\allcodecs.c文件里的avcodec_register_all(void)函数来初始化全部的encoder/decoder。
因为不是每种编码方式都支持encode和decode,所以有以下三种注册方式:
#define REGISTER_ENCODER(X,x) \
if(ENABLE_##X##_ENCODER) register_avcodec(&x##_encoder)
#define REGISTER_DECODER(X,x) \
if(ENABLE_##X##_DECODER) register_avcodec(&x##_decoder)
#define REGISTER_ENCDEC(X,x)
REGISTER_ENCODER(X,x); REGISTER_DECODER(X,x)
如支持flv的flv_encoder和flv_decoder变量就分别是在libavcodec\mpegvideo.c和libavcodec\h263de.c中创建的。
当前muxer/demuxer的匹配
在FFmpeg的文件转换过程中,首先要做的就是根据传入文件和传出文件的后缀名匹配合适的demuxer和muxer。
匹配上的demuxer和muxer都保存在如下所示,定义在ffmpeg.c里的全局变量file_iformat和file_oformat中:
static AVInputFormat *file_iformat;
static AVOutputFormat *file_oformat;
1. demuxer匹配
在libavformat\utils.c中的static AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max)函数用途是根据传入的probe data数据,依次调用每个demuxer的read_probe接口,来进行该demuxer是否和传入的文件内容匹配的判断。其调用顺序如下:
void parse_options(int argc, char **argv, const OptionDef *options)
static void opt_input_file(const char *filename)
static void opt_input_file(const char *filename)
int av_open_input_file(…… )
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened)
static AVInputFormat *av_probe_input_format2(……)
opt_input_file函数是在保存在const OptionDef options[]数组中,用于void parse_options(int argc, char **argv, const OptionDef *options)中解析argv里的“-i” 参数,也就是输入文件名时调用的。
2. muxer匹配
与demuxer的匹配不同,muxer的匹配是调用guess_format函数,根据main( ) 函数的argv里的输出文件后缀名来进行的。
void parse_options(int argc, char **argv, const OptionDef *options)
void parse_arg_file(const char *filename)
static void opt_output_file(const char *filename)
AVOutputFormat *guess_format(const char *short_name, const char *filename,
const char *mime_type)
当前encoder/decoder的匹配
在main( )函数中除了解析传入参数并初始化demuxer与muxer的parse_options( )函数以外,其他的功能都是在av_encode( )函数里完成的。
在libavcodec\utils.c中有如下二个函数。
AVCodec *avcodec_find_encoder(enum CodecID id)
AVCodec *avcodec_find_decoder(enum CodecID id)
他们的功能就是根据传入的CodecID,找到匹配的encoder和decoder。
在av_encode( )函数的开头,首先初始化各个AVInputStream和AVOutputStream,然后分别调用上述二个函数,并将匹配上的encoder与decoder分别保存在AVInputStream->AVStream *st->AVCodecContext *codec->struct AVCodec *codec与AVOutputStream->AVStream *st->AVCodecContext *codec->struct AVCodec *codec变量中。
其他主要数据结构
1. AVFormatContext
AVFormatContext是FFMpeg格式转换过程中实现输入和输出功能、保存相关数据的主要结构。每一个输入和输出文件,都在如下定义的指针数组全局变量中有对应的实体。
static AVFormatContext *output_files[MAX_FILES];
static AVFormatContext *input_files[MAX_FILES];
对于输入和输出,因为共用的是同一个结构体,所以需要分别对该结构中如下定义的iformat或oformat成员赋值。
struct AVInputFormat *iformat;
struct AVOutputFormat *oformat;
对一个AVFormatContext来说,二个成员不能同时有值,即一个AVFormatContext不能同时含有demuxer和muxer。
在main( )函数开头的parse_options( )函数中找到了匹配的muxer和demuxer之后,根据传入的argv参数,初始化每个输入和输出的AVFormatContext结构,并保存在相应的output_files和input_files指针数组中。
在av_encode( )函数中,output_files和input_files是作为函数参数传入后,在其他地方就没有用到了。
2. AVCodecContext
保存AVCodec指针和与codec相关的数据,如video的width、height,audio的sample rate等。AVCodecContext中的codec_type,codec_id二个变量对于encoder/decoder的匹配来说,最为重要。
enum CodecType codec_type; /* see CODEC_TYPE_xxx */
enum CodecID codec_id; /* see CODEC_ID_xxx */
如上所示,codec_type保存的是CODEC_TYPE_VIDEO,CODEC_TYPE_AUDIO等媒体类型,
codec_id保存的是CODEC_ID_FLV1,CODEC_ID_VP6F等编码方式。
以支持flv格式为例,在前述的av_open_input_file(…… ) 函数中,匹配到正确的AVInputFormat demuxer后,通过av_open_input_stream( )函数中调用AVInputFormat的read_header接口来执行flvdec.c中的flv_read_header( )函数。在flv_read_header( )函数内,根据文件头中的数据,创建相应的视频或音频AVStream,并设置AVStream中AVCodecContext的正确的codec_type值。codec_id值是在解码过程中flv_read_packet( )函数执行时根据每一个packet头中的数据来设置的。
3. AVStream
AVStream结构保存与数据流相关的编解码器,数据段等信息。比较重要的有如下二个成员:
AVCodecContext *codec; /**< codec context */
void *priv_data;
其中codec指针保存的就是上节所述的encoder或decoder结构。priv_data指针保存的是和具体编解码流相关的数据,如下代码所示,在ASF的解码过程中,priv_data保存的就是ASFStream结构的数据。
AVStream *st;
ASFStream *asf_st;
… …
st->priv_data = asf_st;
4. AVInputStream/ AVOutputStream
根据输入和输出流的不同,前述的AVStream结构都是封装在AVInputStream和 AVOutputStream结构中,在av_encode( )函数中使用。
AVInputStream中还保存的有与时间有关的信息。
AVOutputStream中还保存有与音视频同步等相关的信息。
5. AVPacket
AVPacket结构定义如下,其是用于保存读取的packet数据。
typedef struct AVPacket {
int64_t pts; ///< presentation time stamp in time_base units
int64_t dts; ///< decompression time stamp in time_base units
uint8_t *data;
int size;
int stream_index;
int flags;
int duration; ///< presentation duration in time_base units (0 if not available)
void (*destruct)(struct AVPacket *);
void *priv;
int64_t pos; ///< byte position in stream, -1 if unknown
} AVPacket;
在av_encode( )函数中,调用AVInputFormat的(*read_packet)(struct AVFormatContext *, AVPacket *pkt);接口,读取输入文件的一帧数据保存在当前输入AVFormatContext的AVPacket成员中。
av_encode函数主要流程
av_encode( )函数是FFMpeg中最重要的函数,编解码和输出等大部分功能都在此函数内完成,因此有必要详细描述一下这个函数的主要流程。
1. input streams initializing
2. output streams initializing
3. encoders and decoders initializing
4. set meta data information from input file if required.
5. write output files header
6. loop of handling each frame
a. read frame from input file:
b. decode frame data
c. encode new frame data
d. write new frame to output file
7. write output files trailer
8. close each encoder and decoder 8月4日 Not just a bike 半年前同学送我一辆车。
刚给我时前胎挂了,后胎行将就木;后座摇摇欲坠;链条大概长了,每踩一圈都有半圈是松的无法发力;锁锈掉了;后煞从把手上脱落下来,吊在半空中半死不活的样子正如这车本身。
对于白送的车,有太大怨言总是不好的。于是我小修了一下,换了前胎和锁,这车就算能骑了,虽然只有前煞,虽然骑行时左腿完全踩空发不上力,虽然不知骑过哪个坎时后胎就会突然挂掉,此外还得忍受我拼命骑行挥汗如雨时被别人滑行超越的痛苦。
不久前从青岛归来,惊喜的发现奥运将至,这辆车也体验了一把奥运精神超越了自己,变得更破:撑脚锈断了,右脚蹬掉了。不过这也不影响骑行,下车随意一撂就行,也省心。
在几天前一个台风欲走还留,阳光与雨水交替洒在我身上的日子里,我发现本以为仅剩几天寿命却意外的撑过一个学期的后胎的气略微有些不足,于是下车稍微打了点气,便上车准备奔赴实验室。一踩,感觉不对。下车一瞧,后胎上裂开一长长的口子。
据说橡胶轮胎发明之前人们每次骑完自行车骨头都有散架的感觉。介于本人身上除了骨头也不剩啥了,我最终还是决定挽救一下这辆车。
换了后胎、链条、脚蹬和撑脚,加固后座。大修之后,此车焕然一新,您看我一口气超五人,腰也不酸了,气也不喘了,一辆顶过去五辆!
我想,以后我老老实实做人,踏踏实实做事,从此就和这车过着幸福快乐的日子。
于是我今早早早的起床,沐浴更衣,欲以崭新的面貌迎接新的一天。
然后下楼,掏钥匙。
然后发现
车不见了。
天知道被哪个天杀的骑走了。
7月31日 青岛印象 事实上已经归来一礼拜了,一直范懒。 印象一:凉快。从长沙上海两大火炉转过来,那叫一个爽快。 印象二:多雾。每天去青岛广电三十多层的大厦干活,往往站在楼下是看不到楼顶的。看着远处的小山峦,云雾弥漫,颇有点人间仙境的意思,也就不难理解为何蓬莱也在山东了。 印象三:坡多。市区里的道路起起伏伏,用老大的话说就是:“难怪没怎么见人骑自行车。”让俺这只混过平原城市的人对重庆有了进一步的憧憬。 印象四:青岛广电的食堂真不错,10块钱享受自助待遇,当然10块钱也不用咱自个儿掏。肉菜虽然不多但是每天都有不同花样,味道也不错。饭后还有西瓜等甜点。回来学校这么一对比,伙食落差太大让我很是失落。 海鲜么,吃得最多的就是蛤蛎(是这么写没错吧?)其他也就广电徐主任请客时沾光,也没吃到啥稀罕物,倒是尝到了前一阵青岛海上漂的那些海苔,味道一般。 好不容易出差一趟也没啥机会到青岛四处逛逛,跟老大筹划好回上海前一天四处玩玩,结果当天暴雨……第二天倒是阳光灿烂,可惜是一早的飞机…… 6月7日 两个小男孩的故事(5)by 垃圾罗 从前,有两个小男孩,初中时,男孩A跟男孩B不在一个班,每天放学男孩A都会到男孩B的班上等男孩B一起回家,当时男孩A与男孩B班上的女孩E一直传绯闻(注:女孩E住在男孩B家楼下),所以每次男孩A来教室等男孩B(或者真的是等女孩E?)的时候,男孩B和其他知情的小男孩就会一起笑男孩A,笑他每天都来等女孩E,但是男孩A每次都跟着笑笑,装作毫不在意的样子,依旧每天来男孩B的教室等,恩,脸皮有够厚,有种不达目的誓不罢休的“精神”。
by Vic 天地良心,我班的班主任不罗嗦,每天五点就放学了;垃圾罗的班主任每天起码念叨到快六点,我就在他们教室外面傻站着等这帮垃圾,说不定我的存在还能让他们班主任于心不忍于是提早放学,一点都不知恩图报…… 至于E,你是指的xx,还是xx,还是xxx?不会是xxx吧? 两个小男孩的故事(4)by 垃圾罗 从前,有两个小男孩,有一段时间,男孩A和男孩B非常热爱打篮球,但是有一次,男孩A的手臂骨折了,还吊着石膏,他却仍然很固执地经常吵着要男孩B陪他一起打篮球,这是极不爱惜身体的行为,不仅是对自己不负责,更是对父母、对朋友、对其他人的不负责!
by Vic 从初中开始打篮球,因为住在大学里所以初中就开始跟大学生打,感觉打到现在技术也没什么进步…… 5月26日 上海交通大学2007年毕业晚会——诗朗诵《我们毕业了》十一个月了。
大赞。
VOS11 诗朗诵配乐
上海交大2007毕业晚会 06.24 VOS11 诗朗诵
我们毕业了
静场:燃情岁月 大一:GERRN SHANNEL 绿色通道 大二:Serenade To Spring-Secret Garden 大三:tears 大四:adagio-Secret Garden 毕业:Song from A Secret Garden 高潮:燃情岁月 终于,高考最后一门考试结束了。冲出围满家长的校门,你还记得那个夏天吗?2003年6月9日。 终于,声讯电话里报完了最后的总分。在那个凌晨,因为那个不错的分数,爸妈眉开眼笑。你还记得那个夏天吗?2003年6月28日。 终于,拿到了录取通知书,赫然写着上海交通大学。你还记得那个夏天吗?2003年8月。 终于,跨进了向往已久的交大,手里还拎着大包小包。你还记得那个夏天吗?2003年9月11日。 我记得,第一次听说交大,如此古老; 我记得,第一次看见交大,如此现代; 我记得,第一次走进交大,离家好远; 我记得,第一次闲逛交大,女生太少。 03年9月,开始了所有大学里的第一次。 第一次站了座再去吃早饭; 第一次坐五块钱的小黑车; 第一次骑车从好又多满载而归; 第一次经历了声势浩大的社团招新; 第一次想念家乡平凡而又熟悉的一切。 我记得,接到家里的第一个长途,心里默念不哭不哭,眼泪却早已夺眶而出; 欧洲杯如期而至了,和兄弟们挤在东500一起看球,或许更享受的只是那肆无忌惮的喧嚣,以及不更事的单纯; 那天,听说要下一场流星雨,裹着被子抱着席子跑到了楼下,可四年以后想想,能够记起的,或许只是那一晚如此热闹的大草坪; 期末,捧着一堆资料跑到雅憩,为了那场高数考试,将人生的第一个通宵献给了我的大一。 04年8月,军训还是到了。 似乎已然忘记了那些天的汗水,似乎已然不记得那个军用水壶的味道; 经年以后,能够想起的,只是那一起喊出来的军歌嘹亮; 经年以后,能够记得的,只是那一句“同学你怎么了”。 然后, 终于有了自己的ip, 终于在水源注册了第一个id, 终于comic变成了主页, 终于电脑里有了越来越多ftp的资源。 04年12月,闵行下了一场雪,其实和老家比起来,那也算不上什么雪。和他一起在东区大草坪上堆了个雪人,雪人背后刻下了永远不分开。 后来,四级来得悄无声息,词汇手册还没有翻过,历年真题也都还没有做过,于是只能坦然地裸考了四级。 05年5月,分专业的话题开始蔓延,于是第一次想到了分开。 从此以后,是不是意味着再也不能一起坐在教室最后看美女; 是不是意味着选课的时候再也不能一起研究教室与寝室的距离; 是不是意味着再也不能四个人共用一本参考书。 05年9月,带着一声老了的感叹,走到了大三的门口。 20岁,仅仅是一个转身,但仿佛一切都已经远去。 社团学生会的例会早已从我的日程表里被永远删去,再热闹的学生活动也激不起我日子的半点波澜。骑着自行车,穿过青春喧闹的校园,却再也不会驻足观望; 仿佛已经忘记,曾经也那么充满激情地在东区广场为自己的社团摇旗呐喊。 然后, 手里多了一本红宝书, 桌上多了一叠考研资料, 电脑里多了一些公司简介。 最后, 还是要拼命先拿下托福和GRE, 还是先准备着面对一年后的考研, 还是先为了实习而四处奔波吧。 对于选择,我其实还是一脸茫然; 对于未来,我还是那么不确定。 想要坚决果断地下定决心, 只是,打定的主意还是周期性地改变。 每一个人都在做着面对未来的选择,尽管那些看似美好和远大的选择里有着连我们自己也无法察觉的焦虑和茫然。 但,我还是会牵着她的手,一起去光明顶看校庆110周年的焰火; 我还是会陪着兄弟,去菁菁堂里度过世界杯的一个个不眠之夜。 06年9月,又一次的辞旧迎新。 终于我也成了本科生的老大。 但那些彷徨过的,感伤过的,和犹豫过的,也渐渐终于成了曾经的年少轻狂。 如雁过长空,忽然留下些许感叹。 撕下书桌墙上的明星海报,换上一张美国地图; 拍了一张神气的简历照,老板说我长得与众不同; 在博客里记下每次失败的求职,告诉自己是金子总会发光的; 心里盼望着,盼望着终于有一天可以展翅高飞,也或许,默默地希望这一天永远不要到来。 曾经以为世界很美,许下的愿望一定会实现; 直到一封封简历全都石沉大海, 直到考研联盟最后只剩下了我一个人, 直到每一封收到手的心还没有拆开就知道了结果。 我终于知道这个世界不是每个人都可以心想事成。 现在,上课已经不用占座了,因为已经没有课可以上了; 现在,晚上已经不用赶回来,因为好久都不在寝室了; 现在,每天吃一顿散伙饭,饭吃完了,可伙却还没散; 现在,一切都发生了,而一切又都好像没有发生。 我回望长长的来路,奢望那一切都能够重新回来。可当我回头的时候,看到的,是我四年的青春,那些在我记忆中刻画出的最美丽、最深刻的图案。 07年6月, 我毕业了,我毕业了,我毕业了,我毕业了,我毕业了,我毕业了; 我们毕业了。 一切所有发生过的,正在发生的,和还没有发生的,都将成为往事。 每年夏天的校园里,都会上演相聚和离别,可是今年却偏偏轮到了我们自己。 四年以后,在菁菁堂喧闹着的,竟是一场为了告别的聚会。 是的,这是六月,所有美好的都已经美好过了。 回首昨日,那郁郁葱葱的日子就这样散落了一地。就像如今,我们的青春,也就要这样散场。 是的,这是六月,我们留得住记忆,却留不住时光,我们看不到相见,却看得到离别。 我们曾经说好要潇洒从容地离开,但情感就像滴在纸上的浓墨,无法抑制地散溢开来。 如果可以,多想再去紫藤廊里坐坐,多想再和他一起去看看思源湖畔如水的夜色,微风吹来,是若即若离的青涩,这或许是我们最后一段不食人间烟火的爱情了吧。 如果可以,我还想和兄弟们再去南体打一场酣畅淋漓的比赛,然后再去新疆餐厅吃一顿价钱越来越贵、鸡块却越来越少的小盘鸡,那或许会是最后一次我们释放未尽的激情。 如果可以,真的再想去上中下院好好自习一次,那一夜夜彻夜不熄的灯光和小红房子前排起的买夜宵的长队,见证了我们一起疯狂、一起奋斗的简陋青春。 如果可以,今晚再和室友酣战几番八十分。今晚以后,再也不会有人和你抢着晒被子,帮你收衣服,也不再会有四个人用同一把钥匙打开同一扇门。 只是,也许只能走到这里。 以后,应该再也不会住在一个叫做东区的地方了吧; 以后,应该再也不会收到地址是东川路800号的邮件了吧; 以后,应该再也不会报出5474打头的那一串电话号码了吧; 应该再也不会有人在意是不是在12点前能够赶回来了吧。 这里的四年,有一辈子最想要珍惜的朋友; 这里的四年,有携手一起走过的女孩儿; 这里的四年,有传道解惑的恩师; 这里的四年,有母亲般关怀我们的阿姨; 这里的四年,有我一生中最美好的回忆; 这里的四年,有我永远无法忘记的怀念。 只是,只是,我们不得不离开。 有点儿担心,有点儿失落。害怕离开这座坚实的象牙塔,彷徨,对于未来种种的不确定。 也许,明天,就要一个人,一个人去面对世界,一个人开始自己的旅程; 明天,再也不能央求着教授宽限我论文的期限; 明天,必须要面对老板最犀利的语言; 明天,即使挂了科,也不能重修; 明天,必须要为自己的失误承担责任。 告别了, 离开了; 不属于了, 不存在了。 真的,要离开了吗? 真的,都不在了吗? 不,不是的。那四年在生命中刻下的痕,又任谁能够抽走; 不,不是的。那四年在生命中留下的印,又任谁能够改变。 那个共同的名字,是曾经那么自豪的标志; 那个共同的名字,是未来那么坚定的支持。 因为这些,就有了一切值得炫耀的光荣。 因为这些,就有了走到哪里都必须的骄傲。 交大,是我们身后坚定的依靠。 请仰起头骄傲地走,因为你是交大人; 请微笑着勇敢地走,因为交大永远在你身后。 一直在,一直在,一直在!!! 。。。。。。。。。。。。。。。。。。 5月15日 两个小男孩的故事(3)by 垃圾罗 从前,有两个小男孩,男孩A经常邀男孩B和其他两个小男孩到他家去玩各式各样新鲜的游戏棋。因为男孩B和其他两个小男孩玩的少,所以总是输;而男孩A玩的多,所以总是最后大赢家。男孩A就是这样利用玩的多的经验和对游戏规则的熟悉以及在家的主场优势在男孩B和其他两个小男孩的身上获取征服的快感,心机颇重啊。
by Victor 小时的一大乐趣便是下各种各样的游戏棋。有大富翁类的强手棋,还能在棋盘上树起纸质的建筑模型,当然必须为此付出一定钞票。地图上有多个地皮,买下后可建起香格里拉,白云之类的酒店,其中香格里拉是收费最贵最nb的,把它建设完全的花费也是最高的。有炒股棋,根据玩家停留的格子玩家拥有的股票会上涨或下跌。这个游戏需要拿纸笔做大量记录,经常还得拿计算器算钱……可惜的是玩了那么久也没培养出一点理财意识赚个五百万。还有战争棋,玩家手上有许多小棋子,每个都代表一个最小的军事单位,可以防御或进攻。战争时靠掷骰子比大小分胜负,但还要算上将领加成、防御加成和海陆因素等修正。 应该说小时的生活是丰富还是无聊呢……那时有那么多有趣的游戏棋。多年之后,我与妹妹百无聊赖时,突然想起找付游戏棋玩。然而幼时的棋盘早已不知所踪。在大小店铺寻觅毫无所获后,我们回到家中,大眼瞪小眼。 两个小男孩的故事(2)by 垃圾罗 从前,有两个小男孩,男孩A总是喊男孩B和其他两个小男孩去他家玩一个叫“盟军敢死队”的电脑游戏,其实这是个单人操作的游戏,大部分时间都是男孩A一个人在玩,只是偶尔让男孩B和其他两个小男孩玩一下,但是男孩B和其他两个小男孩还是心情激动、手舞足蹈的,当时他们真是“很傻很天真”啊,完全就没想到男孩A就像陈冠希一样狡猾地玩弄着他们的感情。
by Victor …… 我要真是陈冠希就好了。 …… 两个小男孩的故事(1)by 垃圾罗 从前,有两个小男孩,男孩A总是叫男孩B和其他两个小男孩去他家玩一个叫“非洲探险”的类似于大富翁的电脑游戏,选择角色的时候,男孩A和男孩B都想选“赵子龙”,但由于是男孩A家的电脑,所以每次都是男孩A选去了,男孩B只能选择“黄飞鸿”,这说明男孩A仗势欺人,不顾及他人的感受。 by Victor
A是我,B是垃圾罗,沦为路人的“另外两个小男孩”是猴子跟鸽子王。不知有没有人记得那个经典的游戏《非洲探险2》啊,当初不论是和工大的垃圾们还是妹妹alex都打得非常起劲。在家占据主场优势,我便可以有恃无恐的s/l在游戏开始便买下盛产金矿的南非的大部分土地,屯下大量停留卡与任意门等道具从而立于不败之地。猴子每次都选那个拿着个可乐瓶子当宝贝的非洲土人,鸽子王好像喜欢选福尔摩斯……虽然没有一次游戏打到最后分出胜负甚至没有一个人破产而退出游戏,不过对于这帮小P孩来说,不论什么只要能让大家一起开心的消遣一下午就很开心了。 |
|
|