Henkilön zdh profiili丁丁乐ValokuvatBlogiLuettelotLisää ![]() | Ohje |
丁丁乐写给自己,同时也欢迎大家看 30.4.2009 岱庙夜景360岱庙夜景360 岱庙属全国重点文物保护单位,又称东岳庙或泰山庙。位于泰安市区北,泰山南麓。其南北长406米,东西宽237米,总面积9.6万平方米,是泰山最大、最完整的古建筑群,为道教神府,是历代帝王举行封禅大典和祭祀泰山神的地方。
F5.6, 1/2sec, iso400. 正阳门
F4.8, 32sec, iso100 岱庙坊
F5.6, 32sec, iso100 岱庙东南角楼
F2.8, 4sec, iso400 岱庙北门 29.3.2009 状态转换使用笔记1. 绘制状态转换图,先把正常情况的图画出来,再补充特殊情况的Case。 2. 状态具有入口函数,即一进入这种状态就要执行的函数(Entry);还有出口函数,即通过此函数进入下一种状态(Exit or Transition)。有时没有入口函数,而是完成一个动作进入下一个状态,即只有出口。 3. 每种状态的必要条件: 多于一个的入口,或者出口,且二者必须都有; 在此状态下有一个或者多个action (条件判断或者动作作者设置下一个Timer) 要做,或者有多种输入要响应动作,action完成后会进入下一个状态; 4. 反复要调用的函数等,往往需要状态转换:例如 Timer,反复进入的消息处理等。 5. 状态转换函数是不需要check它的先前状态的,只需要关心它如何进入下一个状态。 6. 找到有意义的状态,建立对应的类。某些状态是无意义的,不需要建立相应的类。 7. 一个状态至少有自己特有的入口函数或者不同的出口函数,否则和别的状态重合。 8. 如果某种状态只有一个入口,一个出口,则是一种顺序流程,此状态也许是不需要的。 9. 在某种状态下,一般要持续一段时间,瞬间的状态往往意义不大。 10. 简单的分支可以使用if else 来解决,从而合并一些状态。 11. 需要在简单清晰的状态转换和避免过多类似状态之间权衡。 12. 如果把所有的状态合并为一个,则是一种庞杂的分支结构,回到了面向过程的老路上。 13. 状态要权衡好粒度。 22.12.2008 世界顶级精英们的人生哲学!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.大学期间一定要多去图书馆多去自习室。很多书你现在不读,一辈子就再也没有机会去读了。虽然不是每本书看了都一定有用,但 是,因为你不知道究竟哪本书以后会有用,所以只好多看书,并且抛弃那些过于XXXXX.尽管每次网到鱼的不过是一个网眼,但要想捕
到鱼,就必须要编织一张网。
28.养成个人风格,找出你所喜欢的,不论是衣着或是爱好,哪怕是与众不同的小习惯也好。没有个性的人无法踏入社会的顶层。 29.学会授权他人,许多人不肯或不能这样做,因此始终被钉在从属的职位上。授权他人是成功的一半,一个事无巨细,不能将工作授 权别人的人,注定会遇到极大的障碍。
30.长相出众最好,如果长得不好,就让自己有才气,如果才气也没有,那就要经常微笑。气质是首要,你的形象价值100万美元。 32.远离搬弄是非、挑拨离间之人,手段高的,用小人以驱驰,能力高的,还小人以颜色,品德高的,待小人以宽容,血压高的,怕只 有被小人气死的份儿了,宁得罪十个君子,也不要得罪一个小人。对社会的简单形容就是:全是人、全是人、全是人——但社会肯定会
分出层次,只有一个办法,那就是竞争,你必须努力,必须使自己成为社会的强者,强者才能拥有一切,而不是金钱可以买到一切,否
则结局就是被压在社会的底层 9.12.2008 “数字签名”和“数字证书”数据加密。
A利用B的公钥加密数据,B用自己的私钥解秘,从而保证只有B能看到A的信息。
内容认证,即“数字签名”。
A发出的信息包括:内容+加密摘要+公钥,其中加密摘要是从内容算出摘要,再用私钥加密得到的。 B根据内容算出摘要,在根据加密摘要和公钥还原摘要,二者一样验证通过。从而认为内容没有被第三方篡改。 发布者身份认证,即“数字证书”。
发布者在权威第三方(CA)申请帐号,CA则为此发布者保存一个私钥,发布者会得到:发布者信息+加密信息摘要,其中加密信息摘要是通过发布者信息算出摘要,再用私钥加密得到的。 应用使用者(用户)执行程序时,会利用预存在系统上的公钥来验证证书,从而验证程序发布者是CA认可的机构。 实际应用中,后二者往往合在一起,除了认证身份,还保证内容。
verisign应该就是把后二者合二为一,用私钥进行签名和添加数字证书。 SSL应该三者都可以保证。 18.11.2008 Python使用笔记一、动态性
1. Python可以动态的增加(addattr())或者删除(delattr())一个自定义类或者其对象的属性(包括变量和函数),也可以用属性名来查到对于得属性(setattr())。甚至可以使用lamda把一个存在的函数动态绑定到一个类中成为其成员函数。 2. 任何一个变量,不管是自定义类型还是系统定义类型,都是对象。甚至函数也是对象,有自己的属性。 3. 一段代码实际也是一个Python对象,不管这段代码是函数,模块,还是类。 4. Python没有接口类,也没有变量类型(弱类型),调用函数时只需要对象具有此方法即可,不需要像C++那样是继承自同样的父类。 5. Python是与生俱来的彻底的动态绑定,具有动态判断类型属性的机制;而C++是一种语言机制,其面向对象是基于编译时类型识别的(强类型)。 二、继承性
1. 由于接口类已经没有必要,所以Python里类的继承概念已经没有C++那么意义重大了,只有以下两点意义: 可以继承父类的所有函数和变量; 在脚本语言中,类有利于程序的模块化和结构化。 三、一些语言机制 1. Python依靠缩进来确定分支,有一定的方便性,使程序更加清晰和美观。但是如果缩进有笔误,很难发现,尤其是分支比较多的情况下。 2. 如果一个变量不小心在某处赋予其他值,甚至不同类型的对象,后面会有奇怪的现象出现,而且不容易被发现。所以如果有一种静态代码分析软件,会非常有用。 3. Python没有引用,基本类型不能作为参数被传出,这一点比C++要不方便。 4. 如果想要传出参数,不能使用基本类型,而要使用自定义类型。就像C++的指针形参,对它直接赋值改变不了它的值,但是可以改动它所指向的内存位置。 5. 如下代码 a={1:2,3:4} b=a 则b是和a指向同一对象的变量,而不是新的一个对象。 使用Python开发网站笔记一、界面部分
实际这部分和Python无关。 1. 凡是界面都是html实现的,凡是界面中的逻辑都是javascript实现的。 2. 网页的行为主要是:初始化,交互动作,提交处理。 3. 网页变化实现: Url实现整个网页的变化,可以传递参数。 Javascript对现有的控件进行操作。 Ajax实现局部的网页更新。 4. 下拉菜单,可以使用一个ajax动态网页实现。产生下拉菜单,实际就是调用了一个新的网页。 二、逻辑部分 1. python作为逻辑层,连接了db和ui 2. 尽量把逻辑放到Python中处理,而不是网页的JavaScript中。 Python处理逻辑很方便,但是Python生成网页这种方式不是很方便。 虽然python要同时动态生成html和javascript,但是如果需要动态生成JavaScript脚本,会大大增加复杂度。 3. 参数传递 利用python动态生成可以协同工作的网页,通常使用?para=1来传参数,这也是不同网页的唯一传递参数的方式。 Python是可以向网页传入参数的,但是网页不可能向Python直接传回参数,只能采用req的方式。 只有调用新的网页的时候,才使用?para=1传参数,而调用新的python函数可以使用req来传递参数。 4. 先思考一下在界面层次怎么实现,再考虑python如何生成它们。 5. Python函数类型:除了库函数,Apache接口函数,生成html的函数,生成javascript的函数,访问数据库的函数... 6. check权限有两道关,一道是界面不出现用户做不了的操作,一道是如果偶然做了这种改动,在改数据库以前再一次check。 7. 网页的访问 1). Python 截获访问,获得req所有参数,和db数据结合,生成网页,以及链接地址。 2). 新的链接地址又被Python截获,同上获得req并与db结合,还有可能去更新db,最后生成网页返回。 三、数据部分 1. 数据存在形式 同一数据可能有4种存在形式,并且在4种形式中转换,其中一些转换是单向的。 db库中数据<---(SQL)--->python数据类型---(python动态生成Javascript)--->Javascript数据类型 /|\ | | (Form) (python动态生成html) (Javascript) | | | | \|/ \|/ html界面数据<----------------------------------------------- 2. 数据更新不成功,可能是SQL语句不对,也有可能是Table设定不对,比如约束条件或者unique等不对。 3.11.2008 Sender + Observer和Cosumer + ProviderObserver要处理Sender的要求,是Provider;Sender调用Observer的具体功能,是Cosumer。 1.11.2008 模型转换过程当我们面对一个问题时,往往经过如下的转换过程来得到最终有效的代码:
现实问题-物理模型-数学模型-类模型(设计模式)-code 其中数学模型是关键,它反映了问题的本质,采用函数化问题是一个常用的方法。 以下是一个例子。
现实问题 & 物理模型: 从不同数据源得到first_name(fn), last_name(ln), display_name(dn)等。 有的数据源是只提供fn和ln(dn需要我们算出),有的只提供dn(fn和ln需要算出),有的则都提供(相 互转换方法需要我们算出)。
数学模型: fn, ln和dn是可以相互转换的,他们的转换函数用F1()和F2()表示。 dn=F1(fn, ln) (fn, ln)=F2(dn) F1()和F2()是两个互为反向的函数,并且可以配对使用。 如果我们想得到它们所有的信息,并对它们进行一些操作,则需要如下两种操作函数: Op1(fn, ln, F1) Op2(dn, F2) 使用哪种操作函数,取决于数据源给我们提供了(fn, ln)还是dn。 类模型(设计模式): 不同的数据源的F1和F2是不同的,所以这里要采用策略模式来表达转换函数: Class ConvertName1 {F1(); F2();} Class ConvertName2 {F1(); F2();} 它们继承自一个基类ConvertName,提供F1()和F2()接口。 而两种操作函数则为: Op1(fn, ln, ConvertName*) Op2(dn, ConvertName*) Code: 略 5.9.2008 14年 今天是9月5日,看起来没有什么特别之处,却是我来天津14年的纪念日。
14年前的今天,我和两位老乡和其中一位老乡的哥哥四人一块搭乘火车来到了天津,去天津大学报到。那种绿皮绿座的火车,现在已经很少见了。乘坐一夜的硬座,会让人十分的疲倦。下了火车,等待我的是从北京赶到天津接我的父亲,和天津大学的接送车。谁知道,真正等待我的,是在这里度过的接近一半的有生之年。 14年纪念日,看起来也没有什么特别,但对我来说,是7+7的年头,7年上学,7年工作,算是个吉祥的年头。
4年的大学,有身在外地的孤独,专业面前的彷徨,还有老乡会里的哥们,宿舍里的奇怪气氛,也有获得500美刀奖学金的喜悦,保送研究生的幸运。 3年的研究生,经历的是考六级的艰难,课题的不确定,写论文的辛苦,编软件的兴奋,最后一切得以一一化解,以优秀论文顺利毕业,还收获了爱情。 6年的ITC工作,体验了职场的打拼,走进了婚姻的殿堂,面对的还有生活的艰辛。 1年的VST工作,依然的coding,和未知的未来。 14年是不短的日子,转瞬即逝。19岁到33岁被压缩到了这一段时空之中,还是我,却不太清楚自己到底是什么岁数。当年一块来天津的四个人中已经有一位不在人世,恍恍惚惚不大敢相信这样的事实,但许许多多的事却一件件的映射到这一时刻的大脑当中。
特写此文纪念一下这个特殊的日子。 20.7.2008 设计过程需求->流程设计->从流程中抽取功能函数并罗列->子功能的拆分合并->子功能的系统化层次化和形式美化->功能的实现。(流程->功能)
UI的设计可以使用同样的流程。(流程->UI) 设计不只是从粗到细的,还有从零乱到有序。 |
|
|||
|
|