2010年4月11日星期日
从properties到dsl:知识描述的变迁
想做变更,无非就是将易变项抽提出来给用户控制,把剩下的不变项保留在bin包里面,抽提出来的部分,纯文本的配置文件自然就成了最佳选择。当然,代码中需要做必要的变更,于是,程序也自然变成了两部分:负责管理功能模块/配置文件的框架,和执行具体业务的应用逻辑。整个程序的执行模式就变成了框架按照配置文件的描述,将应用逻辑组合成完整逻辑。最典型的就是诸如数据库配置或者功能模块是否启用。
很快的,这成为了新一代柔性应用程序的大趋势,但是用户对柔性的需求越来越高,配置文件需要描述的信息也越来越多,一开始,也许仅仅是简单表述一下在“状态A下执行模块甲”,渐渐的演进成“当角色1在状态A时,执行模块甲,乙,丙,否则,……”,简单的线性文件开始不够用,描述能力强大的xml成为了第一选择。
xml,xml,xml,从spring的applicationContext.xml到各mvc框架再到web容器的web.xml,处处都是xml的身影,更有诸如EOS普元之类试图包罗万象的框架,然而,随着越来越多的功能被挪进xml,xml也变的愈发臃肿,我们在xml中定义类,组装类,初始化类,给类增加横切点,控制类实例,等等,等等,xml渐渐成了第二编程语言。
然而,作为一个结构描述语言,xml从头到脚都没有期望成为一个编程语言的替代品,基于结构而非语义的meta约束,严格的层层嵌套格式。指望让xml成为拥有流程控制/局部变量的动态编程语言的替代品实在是强人所难。但是,xml纯文本的假象蒙蔽了很多人,无数人仍然乐而不疲的付出艰苦卓绝的努力,把xml几乎扩充成了一个完备图灵机,然后再配置上无数华丽的GUI,冠以“可视化编程”的美名,试图让用户在拖拖拽拽之间就能“设计程序”。
幸好,随着编译技术的突飞猛进,实现一门程序语言的成本越来越低,于是,我们有了DSL。
DSL,领域特定语言,不再是properties中的简单key-value对,也不是层层嵌套的xml,而是程序员喜闻乐见的,有变量有函数,有流程控制有循环,没准还有递归的编程语言,当然,不是C/CPP/Java/C#这种工业级语言,而更可能是诸如“设置流程=A”之类的专用语言,弱类型约束,函数作为first-class对象。它比xml强大,因为它的语法结构远比xml复杂,它拥有自描述能力,因为它的关键词完全可以面向具体业务量身定制。
多年以来,让软件能够模块化的组装,是无数程序员的梦想,从CORBA,到Dll,OCX,再到COM/DCOM,EJB,乃至最新的SOA,每个缩写都代表了软件模块化的一次努力。伴随着诸如Ruby,Govvry等动态语言崭露头角,DSL也成为了当红炸子鸡,用工业级语言编写模块,用动态语言或者DSL作为胶粘剂或者业务描述,是向这一终极目标迈出的一大步。
且慢,在欢呼之前,先让我们转头看一下身后,看一下老而弥坚的UNIX,我们就会惊讶的发现,如果你把每个UNIX程序当做一个模块,把Shell脚本作为胶粘剂,我们其实已经拥有了全部的关键元素,这就是UNIX的智慧,虽然现在已是2010年,我们仍然能从几十年前的UNIX中寻得灵感
2010年1月30日星期六
风声渐紧
想换成ssh,突然发现myentunnel的下载主站也连不上
看来新一轮关门行动又在进行中了
淘宝上vpn的买卖依然红活,仿佛这只是一轮新的优胜劣汰
店家依然在商品名上张扬着标上“穿墙”二字
有了市场经济的大手加入之后,墙与穿墙的永恒斗争格局似乎有所变化
如果说TOR被封是1:0的话,那么vpn/ssh生意的兴起大概就是把比分扳平了
不过长远来看,我是不看好市场的力量,在中国,市场之手永远是被捆在权力之蹄上起舞的。只能寄希望于不可知的未来了
大洋彼岸,希拉里宣布全力支持网络自由运动,标志着一向只在灰色地带出现的各类穿网工具正式走向聚光灯。这场技术与权力的对抗会如何收场?这场大战会不会最后以两败俱伤的白名单作结?
2010年1月7日星期四
2009年1月6日星期二
设计模式,面向对象,和其他
唔,面对这个问题我总是不知该如何回答,说懂么?好像除了个把模式外我实在是说不上多少模式的名称,更不用说画个UML图云云了,到现在为止好像我唯一能彻底领悟的只有工厂那一系模式外带上那个万恶的singleton,代理模式?肯定用过,但是不知道准确定义,委托模式?似乎也用过但是也不知道定义,适配器?好像也在代码中写过,不过同样,也不知道定义……
那么,到底什么是设计模式?到底什么是面向对象?怎样才算是懂了呢?
设计模式是什么?说穿了,它就是一套编码经验/代码套路的集合,用来解决某一类型的问题,那么,怎样才能算“懂”设计模式呢?把那个套路背下来么?那是注定无用的,那么,怎样算懂呢?至少,得在项目中用过,拿这套模式解决过问题,估计才能叫做懂吧,那么接下来一个问题就是:你在实际项目中到底用过哪些呢?
一个没用过?其实这不可能,只要你承担过建模的重任,只要你追求过代码的可重用性,可变性,那么,完全没用过任何一种设计模式是不太可能的,真正的问题在于:你会用,但是,你很少会知道你写出的代码到底算是哪种模式。特别是对于那些有很多变种的模式来说,想要弄清楚自己的代码究竟属于哪一种确实不是一件简单的事情。很可能出现的场景就是,你在看了GoF之后,才恍然发现:哦,我在某某项目中搭的那个框架就是啥啥模式啊
好吧,回到开头,如果你发现你处于这种情况,你到底算不算懂设计模式呢?
2008年12月20日星期六
IT玩具之超小笔电
终于还是没能挡住诱惑,抢在停产之时,下手买了一个epc901,算是圆了一个念想,唔,用下来总算是不负我望,对的起这笔银子
901的性能种种不必多说,到处都能查到,由于种种原因,双a(唔,发现我已经习惯了这个对岸的叫法了)已经停产这款笔电,9寸atom本也就成了绝响。大家都奔着10寸杀将了过去,唔,必须说9寸本子的键盘确实是小了那么一点点,以至于打字的准确度低了不少,唉,不过,看在价格(2800不到)和固态硬盘(10寸本一概是普通hd的)的面子上,还是忍受了,毕竟,打字的机会对我来说不算很多,而且,也不是没法用么。
抛掉这个缺点外,这个本子还是很不错的,en,mui-touch版相当的好用,基本用不着那个特意买的蓝牙耗子,当然,有还是最好了。原配的linux到底不算好用,还是倒成了xp,反正我手上有正版的xp home。电池那是相当的耐用,6芯电池真不是盖的,可劲的用,带出去一大圈也不用担心电池消耗。管够。
现在很多时候,想起来查个啥东西就拿过来打开,上网,反正有无线路由,无所不能,用完了盖子一合完事,也不用担心电池消耗。方便啊。果然完美诠释netbook概念。
如果说有什么不爽的,大概就是另外买的那个td网卡,信号那叫一个糟糕,如果能连上去的话倒还不错,但是连不上去的场合也不少,虽然号称是GSM双模,不过经常发现手机能正常online的时候它不吭声。而且,不知道是不是无线网卡的毛病,耗电那是相当的厉害,幸好这是6芯电池,这要是3芯电池怕是撑不过一个钟头。唉,如果上网没啥大需求的话,还是蓝牙挂手机来的方便啊,就是手机电池比较受累了。
还有啥缺点吗?有,功能键驱动会莫名停止,已经重装过一遍了,mui-touch也曾经时灵时不灵,不过换到最新驱动后好像还算稳定,现在就是需要为它找个合适的包了,en,然后就可以自在的把它和相机一块拎出去,唔欧,听上去真是完美的驴儿组合。唯一希望的就是那块该死的td网卡能争气一点。

