bluesky's profile天地幻境PhotosBlogListsMore Tools Help

Blues Lee

Occupation
Location
Photo 1 of 8
感谢访问!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.

天地幻境

April 25

原声音乐

前段时间看《叶问》时觉得这音乐好像《七剑》,今天重新翻出《七剑》,突然发现这音乐好像《高达00》。
然后便找到了川井宪次这个名字,果不出所料,三部作品配乐全都是这家伙的杰作,此外还有《攻壳剧场版》。
说起来这是第二个因影视配乐而让我知道的日本人的名字,上一个是菅野洋子。如果算上喜多郎,则是第三个。
相比之下,在国内则难找到一个能与之类比的名字,也许是我太孤陋寡问了吧,毕竟我又不是搞音乐的。
October 26

周末??

已经不能算是真正意思上的周末了,只是,还是要装-装的。

October 13

1/3 回忆录——技术篇

——如果我可以活到70岁的话,那么,我的生命已经走过了1/3的历程。

最近不只一次的被问及要怎样提高编程的能力,老实说我也不知道该如何回答,一来并没有细仔总结过自已学习的经验,二来也不清楚自已的经验有多少是可以适用于他人的。索兴把整个学习的过程罗列出来,也许可以总结出点什么东西来,所以也就有了上面的题目。不过有一点是无用质疑的,那就是兴趣。

第一次与计算机的亲密接触是在初一那年,学校在那年开设了微机课。虽然此前也对计算机有所了解,但只限于电视、报刊上的介绍而已。当时学校的课程基本上就是DOS,WPS等,还有现在最以常使用的五笔输入法。此时的我对计算机编程还是一无所知。

开始接触编程是在初一结束时的暑假,与许多人一样是从最简单的BASIC语言开始的,只不过教我的不是学校的老师,而是在家中坐客的正在读大学的堂姐。从她那里知道了什么是表达式、流程控制等等最基本的东西。接下来便是抱着她留下的BASIC教材,开始了“漫长”的自学生涯。不过条件所限,直到初中毕业,所真正写过的代码,只是一段求解一元二次方程的小程序。记得当时终于把程序调通的时候,是非常小心翼翼的把那10几行代码存到了所拥有的唯一张软盘里,而所使用的第一个IDE,也就是那个非常经典的QBASIC。

初中毕业的那个暑假,堂把她使用过的C语言教材——谭浩强的《C程序设计》第一版——也送给了我,如获至宝的我用了一个月的时间学习了指针之前的内容。高中入学后,又利用零零散散的时间学习完了整本教材。后来,上大学以后学习C语言时用的教材是谭浩强的《C程序设计》第二版,相信许多人都不会对此感到莫生,也有许多人对这这本书抱有很大意见,不过,我还是要很感谢这本书和他的作者,还有送给我这本书的堂姐,因为正是通过他们,我才走到今天这一步的。学过了C语言,接下自然是C++了,还有汇编,VC,OPENGL,WIN32 API,这些都是在高中的这段时间里就打下了基础。而此时的我,依然没有自已的个人PC,一定会有人奇怪,在没有足够练习的情况下,怎么可能学会编程呢?这里就要感谢一本名为《计算机编程技术与维护》杂志了,虽然已经很久没有再买这本杂志了,但在当时的条件下,杂志上面刊出的各种各样的实例代码,成为了帮助我理解C,C++以及学习其它相关编程技术的最重要的手段。同时虽然没有可以调试开发的环境,但是却时常在纸上编写各种各样的代码,算是过过干瘾吧。写的东西也很简单,迷宫算法,文件加密,字符串相似度计算(我自已启的名字),等等等等。现现想想周围的同学看到那一大堆天书一样东西,一定是非常的莫名其妙吧。

我的第一个有点实用价值的程序并不是在计算机开发,而是在文曲星上,利用文曲星的GVBAISC语言,具体是什么已经记不清了,总之当时是在文曲星上写了不下数千行的代码,消耗掉的CR2032电池更是不计其数。这些代码中甚至还包括了RPG游戏引擎,只是限于文曲星内存,实在是很难再装下什么完整的剧情了。这段时间还尝试着直接使用6502汇编来写程序,也算是进行了嵌入式开发了吧;p

高考之后,终于有了台可以写程序的计算机了,尽管只是老爸单位淘汰下来的486,还是被我装上了WIN95,bcc编译器,还有ultraedit。在那个长达三个月的假期里,我用这台古懂机(当时已经是P4的时代了)写了许多稀奇苦怪的东西,比如经典得不能再经典的俄罗斯方块,还有一个简单(或者说是简陋)的RPG游戏引擎。没有IDE,没有调试器,没有网络,编译一次要等上几分钟,就这样用C++洋洋洒洒的写了几千行的代码。现在回想起当时写的代码,真是怎一个烂字了得,不要说结构设计、编码风格这些东西了,连最基本的项目文件的组织都是乱七八糟。

rbrpg1 rpg2 

进入大学的第一年,学校规定大一新生不准装电脑,情况似乎和高中时没有太大的变化。不过有了图书馆,虽然书旧了点,还有就是可以去机房上网了(不用忍受网吧里恶劣的环境了)。不让装电脑的最大的好处就是可以有比较充足时间来看书,除了学校的安排的专业课,这段时间还自学了(也许可以叫预习了)数据结构和JAVA。说到JAVA,学习只用了两周的时间,两个下午看来一本教程,其余的时间整理笔记,原因是有了先前的C/C++的基础,只需要关注对C++不同的地方就可以了,而JAVA那庞大的类库,用的时候再去查JDK文档就好了。而数据结构,学习的并不是通常的C语版,而是C++版,后来还买了一本Advanced C++,内容很不错,只是翻译得太烂,看了好久才看完,不过有点让人说不过去的是,直到现在也没有完整的阅读过C++ primer。闲着没事的时候还是在那台文曲星上写程序,这次目标是可以直接在文曲星运行的简单宏汇编器,只是工程进展到一半时,文曲星挂掉了。假期回家,也还是用那台古懂机写各种各样奇怪的东西,甚还尝试过模仿APPLE上的DOCK程序,不过在只有256色的显示器上,是不可能做到APPLE的效果的。这台老爷机一直用到大三的时候才彻底下岗,最后一个在它上面开发的代码是一个超轻量的GUI框架,显然这是为这台老爷机显身定做的,之后这个框架自然也就没有了用武之地。

到了大二,终于有了台像样的计算机,虽然只是二手的P3,不过应付当时主流的编程技术还是可以的,.NET,JAVA,PYTHON,C51,LINUX …… ……各种各样的东西都或多或少的有所涉猎。后来有了现在用的笔记本,同时也可开始了学生时代的最后一个作品——毕业设计。洋洋洒洒的两万多行代码中,有得意的地方,也是让自已很不满意的地方。首先从软件工程角度过说,这是一个极其失败作品,从需求到设计,在一开始时都没有做过细仔的分析,再加上需求的不断变更,使得到后来的开发过程几乎可以用痛苦两个字来形容。编码方面,最大败笔就是编程风格的不统一,项目中混合了多种库,命名规则也有好几种,甚至连编程范式也是混合了过程化和面向对象,简直就是一个C++程序设计的大展览。而意之处,包括项目整体结构的设计以及代码的灵活性,前者可以说不断重构得到的结果,后者则是被不断变化的需求给逼出来的。

现在毕业了,有了份还算不错的工作,时而回想起过去,觉得过去的这1/3也算是精彩了。相比这下,最让人怀念的反而是那段用文曲星和古懂机写代码的日子,没有任何压力,为的只是得到那份最简单的乐趣。

流水帐就先记到这么多了,也许哪天有心情还可以再弄个情感篇啊,事业篇啊什么的,不过,总觉感得这东西贴出来实在是很自恋的说。

August 12

工作了

开始工作有一个月了,经常被人问到工作了有什么感受,只是,不知道该从何回答,也许最大的感受就是忙得没有时间去考虑有什么感受了吧
June 27

无题

 原本不存在的长发,原本遥远的钢琴,梦中,虚幻的慰藉……

观众,我的位置

观者,不可近视之

众者,非吾一人也

一切原不过如此而已

0144d2504f025b6784352426

April 20

骨头是什么味道的?

一条狗,做梦都希望得到一块骨头
然而,让它头疼问题在于
它不知道骨头是什么味道的
April 15

IronPython 中调用 WIN32 API函数

昨天在GOOGLE里搜了一下,没有找到让人满意的结果,IRONPYTHON的邮件列表里也说,目前为止还没有方便的方法实现这个功能。
不过也不是一点收获没有,在一篇BLOG上找到了C#中动态调用WIN32 API的方法。将作者的代码编译生成DLL后在IRONPYTHON里试着调用了一下,总算是得到了期望中的结果,唯一的问题就是调用的过程多少有些繁锁。
今天试着用对调用的过程进行了下简单的封装,效果看上去还不错,可以用像dll.Get("void Beep(int,int)@kernel32.dll")这样简单一行代码来创建一个调用API的函数对象,用起来应该可以方便不少了吧,只是对正则表达式还不是很会用,只能对那个字符串参数做些限制了,比如不能有太多的空格,参数列表为为空时要用void占位,好像也没有别的了,呵呵

下面是那篇BLOG的网址:
http://www.cnblogs.com/zealic/archive/2007/02/28/658836.html

下面是封装的代码:
 1 import clr
2 import re
3 clr.AddReferenceToFile('Zealic.Windows.dll')
4 from Zealic.Windows import *
5 from operator import *
6
7 class NativeFunc:
8 def __init__(self,method):
9 self.method=method
10 def __call__(self,*arg):
11 return self.method.Invoke(*arg)
12
13 class WinDLL:
14 Library=dict()
15 def GetFunc(self,dll_name,func_name,return_type,param_types):
16 if contains(self.Library,dll_name):
17 dll=self.Library[dll_name]
18 else:
19 dll=DynamicLibrary(dll_name)
20 self.Library[dll_name]=dll
21 func_builder=NativeMethodBuilder()
22 if return_type!=None:
23 func_builder.ReturnType =return_type
24 if len(param_types)>0:
25 func_builder.ParameterLength=len(param_types)
26 index=0
27 for param in param_types:
28 func_builder.SetParameterInfo(index,param)
29 index+=1
30 method=func_builder.MakeMethod(dll,func_name)
31 return NativeFunc(method)
32 def Free(self):
33 for dll in self.Library:
34 self.Library[dll].Free()
35 self.Library.clear()
36 def Get(self,func_name):
37 m=re.search("([a-zA-Z]+) +([a-zA-Z][a-zA-Z0-9_]*) *\\(([a-zA-Z, ]*)\\) *@ *([a-zA-Z0-9_]+\.[a-zA-Z0-9_]+) *",func_name)
38 if m.group(1)=="void":
39 return_type=None
40 else:
41 return_type=eval(m.group(1))
42 if m.group(3)=="void":
43 param_types=list()
44 else:
45 params=m.group(3).split(',')
46 param_types=map(lambda x:eval(x),params)
47 print m.group(4),m.group(2),return_type,param_types
48 return self.GetFunc(m.group(4),m.group(2),return_type,param_types)
49
50
51 if __name__=="__main__":
52 dll=WinDLL()
53 Beep=dll.GetFunc('kernel32.dll','Beep',None,[int,int])
54 Beep(1000,1000)
55 dll.Free()
56 Beep=dll.Get("int Beep(int,int)@kernel32.dll")
57 Beep(1000,1000)
58 dll.Free()
59