Jan 28, 2008

鱼丸++

今天做鱼丸了,从六点半到八点半共花了两个多小时,基本照着网上的说明做的,基本算成功。虽然有点累,不过蛮有成就感哦,比我老爸做的好吃呢!

第一步是去皮,把刀竖着切下,但不要切透鱼皮,然后贴着皮行刀,把肉分开。这是我爸教的,要想直接削皮是挺难的。
第二步是刮肉,我的理解就是把鱼骨鱼肉分开,先用刀背把肉打松了再刮,用刀锋的话会把鱼骨搞断,去起来麻烦。
第三步是剁泥,网上有的说要用刀背剁,试着觉得斩不透,还是用刀锋剁的,剁成泥状,有点粘刀。时不时用手拌下,有剩下的鱼刺筋络顺手去掉。
第四步就是搅拌了,先把盐、姜粉、料酒和水调和,今天我鱼和水差不多是一比一的比例,很嫩,但韧性不大足。不知道是打得不透还是水放多了的缘故。先打个蛋清,然后加水顺一个方向搅匀,觉得上劲了再些加水打。最后加一勺淀粉增加点粘度使之容易成形。
第五步挤丸和第六步水煮和下面的说明都一样了。我这次挤出的鱼丸放水里是浮的,而且一点都不相互粘连。

关键所在是去骨剁泥和搅拌,挺花时间。有人也说要加肥肉,加这个那个的,我觉得都不是关键,关键是要舍得花功夫。我们有时候太注重方法了,认为事情没有做好是方法不对,其实很多情况下是功夫没有下足。就像学英语,方法就一个字,背。

总之,我们要做好鱼丸一定要做到调制鱼茸六不伤、六不缺(水、盐、油、蛋、粉、味);搅打好的鱼糁色白、滋润、细嫩、光滑、无杂质;氽煮时掌握好火候,就一定能做出高质量的鱼丸来

Jan 27, 2008

踏雪



好久没见过这么大的雪了。

下午带着相机出去拍些雪景。还是前年夏天了,那时老带着相机出去拍拍风景,一人五点多就起了,骑车到森林公园,宜园,拍完一圈回家吃早饭。那时蛮自在的,不过今天走出来总觉得有些冷清的。心境不同了吧。有人在堆雪人,我看看,走过。

绵绵的雪,踏着和昨天的触感明显不同,雪薄薄的时候踏着比较结实硬朗,厚厚的就松绵绵的了。踩着不着力。分析了下,可能是刚下的时候雪落在地表上,边化边结,比较密实。后来下的呢,直接堆雪上,一点没化自然就松了。呵呵,学工科的,就是没情调。

拍了十来张吧,雪地里挺亮的,也拍不出啥质感,就是白白的一片。走到水杉林里,好美,完完整整的雪,不忍心踏。时不时积在树梢的雪唰地落下,打在绵绵的雪地里,一片静寂。打开相机,没电。懊恼。前面平常的风景拍了十来张,到真正美的地方却拍不了。发了会呆。继续走。除了白,只有墨绿,深褐。如果能发现一点红色,该会很惊喜吧,环顾,还是一片洁白。

雪,不像雨那般粘粘的让人不舒服,蛮大气。况且雪和血同音,白与红,冷与热,多美的巧合。步步谨慎,还是滑了下,一点都不疼。爬起来,看看印在雪地的人形,嘻嘻,蛮有意思。回家。

Jan 21, 2008

The C Puzzle Book (C语言解惑)读书笔记

每年在火车回家坐火车都是一种折磨,不过这次运气不错,一来认识了两个聊得来的朋友,二来带了一本《The C Puzzle Book》,翻翻看看,隔了一年多没碰C,有些问题是实实在在地不会,有些问题是自己粗心得挺搞笑。

Chapter 1 操作符
a. z+=-x ++ + ++y ==> z+=-(x++) + (++y)
but, x+++++y ==> x++ ++ +y 无意义
b.~01 == 1…10 != 10 ^_^
c. ~x|x == 111.. 1 恒等于 -1
d.y = -8; y >>= 3 y并不一定为-1,有些计算机右移时不保留操作数的符号位
e. z += x z+= (xf. z>=y>=z ^_^
简简单单的符号优先级问题本来以为背熟了表就差不多,可还是错了上面几个,蛮郁闷。

Chapter2 基本类型
a. define PRINT(format,x) Printf(#x " = %" #format "\n", x)
PRINT (d,"5") ?
显然打印的是指针地址,不过刚看时笨得没发现
int x= -2, unsigned int ux = -2 PRINT(o,x) PRINT(o,ux) ?
无论带符号还是无符号,-2都是那串01
b. 3.(注意后面那个.) …………
c. c语言中,即使运算发生了溢出,结果仍将是合法的数值。
主要是向上向下转型的问题,结合运算符优先级,挺容易搞混的。细节,细节!

Chapter3 头文件
#define PR (fmt, val) printf(#val " = %" #fmt "\t", (val))
#define NL putchat('\n')
#define PRINT1 (f,x1) PR(f,x1), NL
#define PEINR2 (f,x1,x2) PR(f,x1), PRINT1(f,x2), NL
... ...
一层一层往下套吧。。

Chapter4 控制流
a.if也能短路的哦
b.if( x=y ); x=3 看见那个分号了没?呵呵
c.while( y<10 ){x=y++; z=++y;} y++了两次哦,大意大意。

Chapter5 编程风格

半年黑白

半年,不快不慢地过去了。

走出考场,木木的,说不上啥感觉。

反正是考得不好。想打电话,试了一个电话机,坏了;又试了一个,也坏了。

回宿舍,泡面,开机。

找工,大概花了八个钟,中英文简历都搞好了。

态度决定一切。

踏踏实实找工,就像我考研前想的那样,技术上虽然荒废了大半年,但精神上,已够韧了。考研不管结果如何,认了,不会去试第二次。

认真做技术,认真找工,认真待人,认真待己。

我没有败,也不会败。拐了个弯,又到了原来的路上。

我还是我,只是更看清了自己。必须要踏实,踏实!

目标:每天锻炼,每天学习,每周写周记,看书做笔记。

Aug 13, 2007

南京之行


总得来说,南京还是个不错的地方。历史感很强,但过于压抑,承载了太多的沧桑。
可能也是这个原因,南京更显出了一种久经沧桑后的平淡。

Jul 19, 2007

考研

开始准备考研了,蒸发一段时间。
选择考研对我而言机会成本高了些,不算是理智行为。特别又跨专业挤了个大热门--金融工程,风险太大,收益又不大确定,准备得也晚了些。
计算机我也很喜欢,但我不是一个努力的人,没啥钻研的决心,在一个领域呆久了滋长的只是惰性。就算我本科就读的金融,到现在还是会转专业的。
文科比较浮躁,我是个浮躁的人,所以想学下文科体验生活。我算不上是个风险厌恶的人,觉得风险犹如生活的调剂,生活中的选择就像是投骰子,我有时像一个纯粹的赌徒。
一月前差不多还在编程、赶作业、准备考试,现在却彻彻底底地把计算机扔了,扔得毫不心疼。因为计算机已经给了我很多,至少它可以让我放心地全力以赴地做出高风险的决定,选个不错的金融专业,如果失败,继续做计算机至少还能生活下去。我不会进行第二次尝试。
没有什么能算是毕生的事业,人只能选择当前看似比较好走,有趣的路。因为没有地图,你不会知道这条或那天路通往何处,所以永远不可能有最佳选择,即使走的是最佳的路径,你也无法确认它的确是最佳的。
一连串偶然事件使我觉得考研是老天的安排,很多细微的因素似乎在暗暗驱使我向着一个目的地前行。成功也好,失败也罢,听天由命,生活指引着我走上了考研的路,结果也已经注定,现在要做的不过是去发现这个结果。

Jun 7, 2007

基于socket的简单语音聊天软件

基于socket的简单语音聊天软件是分布式的作业之一。下文摘抄了概要设计和详细设计的开头部分。

背景
软件名称:Xchat
开发者:04 双语 许一尊 200433099266
开发平台:JDK 1.5 + Eclipse3.3M6
本软件只采用了基本的Java sound API,即javax.sound中的内容,没有使用JMF和开源代码。

参考资料
《分布式计算原理与应用》
Java API
Java Sound Resources http://www.jsresources.org/apps/am.html

需求
1. 基于基本的Client/Server模式,实现一个text画板,提供一个多人的chat空间。在此模式下,每个人发出的message都通过server的中心控制,由server组播(multicast)给一个chat组的其他会话人。
2. 语音的录取、打包、传输、播放,从而将text chat空间变成了voice chat空间。
3. 通过server的中心控制实现会话的记录和交互式回放。

设计思路
客户端设计参考MVC模式,由一个核心控制模块处理语音发送接收、聊天信息和控制信号的发送接收、音频点播及界面的显示更新。
文本消息和控制信息合二为一,格式为:用户名>>>命令>>>参数
语聊信号通过建立音频管线截取语音包,直接广播到所以客户端,由客户端各自播放。客户端接收到控制信息时,提取出其中的用户名、命令和参数,如果该命令针对所有客户端,则执行该命令;如该命令针对特定用户,只有当用户检测到控制信息中的用户名项为其自身时才发生相应。
音频点播实现是由客户端通过有连接socket发送请求,服务器受到后发送确认信号,将文件以流的方式发送至客户端播放。

特殊性说明
由于只使用基本Java sound API,Java音频的一下局限性觉得了本系统一些特殊的设计:
首先,java平台的音频播放性能有限,当一次写入的数据过小是,声音容易出现断续的现象,而一次截取的包过大时,又会导致较大的延时。所以,必须在音频质量和声音延时上做出选择。最终的权衡结果是以1/4秒为单位截取声音,总的延时为0.5秒+网络延时,在局域网中,网络延时可以忽略不计,所以总的延时在0.5秒左右,可以接受。
其次,Java音频由于其性能问题,不能提供良好的混音效果,所以如两人同时发言,接收到声音的断续现象较为严重,如果多人同时发言,网络条件下4个音源的混音效果根本不能接受,所以本软件设定同一时间只能由一人发言,由一系列控制信号来达到所以客户端的同步。
其三,java保存音频文件方法较为单一,虽然可以通过InputStream保存成音频文件,但要预先制定音频文件的大小,这显然是不可实现的;所以唯一的办法就是在音频采集是直接保存成音频文件,在一次发言结束后上传到服务器,由于java本身没有音频合并的方法,所以音频文件的保存是以发言为单位的,点播时自然也只能以发言为单位。

系统结构
客户端


客户端设计参考MVC模式,由一个核心控制模块处理语音发送接收、聊天信息和控制信号的发送接收、音频点播及界面的显示更新。

服务器端

服务器端以一个控制中心为核心,处理客户端传来的消息和控制信号,执行相应操作并返回控制信号。

类图
客户端

a. 客户端以ClientAction为中心,该类处理界面相应并调用相应模块。由于ClientFram(界面类)的类中元素过于繁杂,在此图中已删除此类。
b. SocketMessageManager是文本消息处理的中心,建立messageSendThread和PacketReceivingThread处理消息包的发送和接收,受到消息包并提取其中信息后,将其交与ClientAction处理。
c. SoundCapture处理音频的截取和广播;SoundPlayer负责接收音频包并播放。
d. SoundRecoder负责讲语音保存在临时文件中,SoundSendThread负责发送该音频文件。
e. SoundRequestHelper与SoundRequest负责音频点播。

服务器端

a.服务器端以ChatServer为中心,处理客户端传来的消息和控制信号,并执行相应操作。
b.MessageServerThread负责调用RecervingThread,RecervingThread接收文本消息包并分离出其中的控制信号,交由ChatServer处理。
c.MulticastSendingThread负责相客户端广播聊天消息和控制信号。
d.SoundSaveServerThread负责处理客户端的保存聊天音频文件的请求,建立AudioSaveThread保存文件。
e.SoundRequestServerThread负责监听客户端的聊天记录点播请求,受到请求后,新建AudioPlayThread处理相应请求。

Mar 31, 2007

清明

今天党团活动去了黄花岗。很多墓碑,有无名无姓的烈士也有声势显赫的将军,他们都长眠于此。公园绿草茵茵,很多老年人舞着扇子,小孩嬉笑,很和谐。烈士们想看到的也许就是这场景吧。
民国时期的建筑,朴素,并不高大,但在肃穆中透着大气。看看中山纪念堂,中山陵,也都是这感觉。再看看各地的大学,也是喜欢年代旧些的建筑。觉得新的一些大楼,虽然精巧,却流于浮华。再过个一百年,那些新建的大楼也应该陈旧了吧,那时他们剩下的,也许只有陈旧和年代,而没有历史和沧桑。国家还没有真正富强,年青一代需要努力。社会风气浮华,有些人只追求着感官的快乐或沉溺与小资情怀;不该这样的,我今年已大三,可还常常浪费时间。虽然个人是卑微的,多一个少一个对这社会好像并没什么影响,但这不是沉默的借口。身边有很多努力的同学,应该向他们学习。虽然不是每个人都能成为精英,但每个人都应该负责任。古人所说“修身、齐家、治国、平天下”,很有道理,心中要装着亲人,装着天下,努力,尽管卑微,对这个社会也还是有用的。

Mar 28, 2007

非对称

对称是美的,而不对称是永恒的。正是这种种非对称,创造着生命中的悲欢和这个世界的混乱和魅力。
打过RPG游戏的都知道,在对称中创造非对称正是游戏的精华所在,比如星际魔兽,乍看游戏中的每个种族都是均衡的,并没有明显的相生相克,可在比赛中选手们却有意识地创造着不均衡,在己方兵种有绝对优势时,胜利来的往往容易些;不过初期的优势并不意味着永远的优势,比赛在不断地变化,双方的策略也在不断地变化,当一个非对称的情势发展到极致时,也正是最易赢得比赛或输掉比赛的时候。没有永远的阳光灿烂,也没有永远的阴雨绵绵,今天在变,明天的变化也许更大,人不能永远地等待,把期待放在明天,放在一个难以琢磨的时刻。
想到面前的道路,也是个混乱而难以选择的情形。

在困难的选择中打破均衡,使生命的天平慢慢向自己的目标倾斜,在灵动中创造机会,在变化中求得发展,也许正是我们所该做的。反省自身,我之所爱和在?-----生活;生命短暂,有太多值得尝试,生活中有足够的素材值得我去接触消化理解感悟和升华。生活中的快乐来源于爱和感恩;来源于进取和帮助他人;这也正是我所追求的。一介书生,身无分文而心忧天下----看似有些土,在这滚滚红尘中显得不和潮流而迂腐,可些小的欲望太容易满足,物质的追求又没有满足的底线,生活的意义,除了在生活中找寻,又在何处?人活着,还是要为社会做些事的。

回到非对称这个话题,生活为何累人?因为人们太在乎均衡,太难放下。全面发展堪称完美的人自然存在,可他们似乎只是我们仰望的对象,从小到大,就算在身边,也总有些人,我永远无法超越,越想超越却发现离得越远。因为你永远不知道那些人下一步要做什么,因为你只是抱着竞争的心态。放弃竞争,选择合作,这才是道路的开始。以竞争的心态看人,难免将别人和自己相比,有过之则沾沾自喜,不及之则心有不甘;千方百计的借口,怨天尤人的抱怨。以合作的心态拥抱社会,改变自己,使自己变成大环境下不可或缺的一块积木;环境变了,便改变自身,以保证团体的完整;所以,我不同意“磨练”这个说法,社会不是磨刀石,不是打磨人的场所;人不应该是木头,而应该是橡皮泥或气球,改变自己甚至扩充自己来适合这个社会。

现在工作为什么难找,因为很多毕业生太相似了,如同是个球,只有大小之异没有形状之分,质地不软不硬,不想改变又自视甚高。这应该是教育模式和社会心理共同作用的结果,对孩子而言,从小和人比成绩当小干部,而家长呢,太在乎,将孩子作为炫耀的资本,人家小孩学钢琴,学画画,成绩好,外语强;人家小孩上大学,赚大钱。。。。于是中国就多了这么多难以就业的大学生,同时也有这么多技工岗位难觅良才。大学生虚度光阴自然不对,但全心学习也非良策;人有不同,有人强于综合而疏于钻研;有人贵在速度而疏于严密;不是每个人有适合科研,也不是每个人有强于研发;职务无分高贱,只有适合与否;人和人之间所需的是互相尊重,而不是相互攀比。创造非对称是要有一定决心的,它在带来机遇的同时也滋生了风险,不过人不能因为害怕风险而选择平庸;不能因为畏惧失败而甘愿放弃;不能因为路途艰辛而畏首畏尾;更不能因为前途的不确定而选择逃避。我们要的只是适合自己的道路,要的是决心、勇气、和坚持。

Mar 17, 2007

大三下

开学三周。
还是这么过,游戏打得太多了,颓废,想想也没啥好玩的,就是一遍遍重复呗,说到底也没啥变化,为啥有时候就会想玩呢?
以后做什么能,有时也会想这问题,但想法总是变,就像Dota中的变形精灵,力量或敏捷。
力量--敏捷,可能这也是现在摆在面前的路。
力量型的血会多些,譬如考研,死不了,不过移动慢些,攻击力低些。敏捷型的血少,但快,灵动,不过一次次的死就难翻身了。
Or智力加敏捷?
四年内就能知道我是否走对了路,三十岁前,不怕,三十岁后,不悔。

Feb 28, 2007

比较郁闷的事

头疼,快一个星期看不了书了,原本考GRE还是有那么点希望的,这下开心了,反正没啥希望了,不过考还是要考的,不然也对不起我考证狂的封号啊。
原先就是小小的头疼,平时也有过,一会儿就能好的,可那天被词有点狂,小头疼变成了剧头疼,就睡了一下午的觉,老妈十分地不放心,我就捉摸着可能是这两天在床上看书,是不是脖子拧了,没想这么一想,脖子果然开始不爽,而且又是活络油又是理疗的,一点不见好。隔天和女朋友约会,在香肩上枕了一会,倒不疼了,可老妈不放心,第二天就去医院看了看,专家门诊,专家看了会,问我又没鼻炎啥的,一串问题,俺没啥啊,应该也就是脖子拧着了,回家呆会就好了。又过了一天,鼻子好像又有点不舒服了,莫非是专家所说的鼻炎?靠,这次这么都是倒果为因了?不想了,再想下去估计我就得感冒了,这心里想啥就得啥啊?
今天不管了,不管怎样也得看书了,整整看了四天电视,这心里难受得,还是背单词爽,就看书喽,不过好像一看就不怎么头疼了,又一次验证了那句话啊,死猪不怕开水烫,我的哲学啊,咋就忘了呢,再苦再累,就当自己是二百五,多愁善感,疑神疑鬼,会越来越糟。假期过得差不多了,进了学院得好好干,快毕业了,不爽,不爽。