Luke's profileLukePhotosBlogLists Tools Help

Blog


    March 23

    所有购买了正版Rad Studio、Delphi或C++Builder2009的客户,可以上网免费的下载TMS Smooth Controls Pack

    我们现在已经将这套组件放到了公司的网站上,大家可以登陆网址 http://cc.embarcadero.com/item/26725 进行下载,请注意,你必须使用激活过正版产品的用户名进行登陆才可以下载。关于这套组件的详细介绍,请查看网址http://www.tmssoftware.com/site/advsmoothcontrols.asp

    我看了一下,一套非常绚丽的界面组件。

    贴几个图片上来给大家看看。

    TAdvSmoothGaugeTAdvSmoothTabPagerTAdvSmoothStatusIndicatorTAdvSmoothCalendarTAdvSmoothImageListBoxTAdvSmoothListBox

    TAdvSmoothPanel

    July 23

    在Dreamhost上设置GMail和各种Google服务的方式

    本站的主机是放在美国的DreamHost服务器上的。

    速度总的来说还是可以接受的,个人比较喜欢的是DreamHost的管理功能,或者叫控制面板的功能非常强大,而且支持SSH登陆。使得这个主机供应商在同类价格的各个服务商之中,功能最完整,对RoR的支持也是最好的(现在已经支持到Rails 2.02了)。

    另外很多辅助的功能也比较让人喜欢,比如邮件系统、SVN等等。我已经给本站设置了一个SVN的服务器,供开源项目使用。

    但也有不尽如人意的地方,比如邮件系统中的WebMail模式,不支持中文,使用Outlook或其他邮件客户端,首发中文邮件都没有任何问题,但是在WebMail页面上就死活不行。另外,办公相关的功能也不够完整。

    几个月之前就发现了DreamHost可以整合Google的邮件和办公相关功能,当时很是激动了一把。赶快进行尝试,当设置了Google邮件系统代替DreamHost本身的邮件系统之后,使用直接使用 http://mail.codegear-cn.com 即可登陆GMail网站,并使用GMail进行邮件首发处理,如果设置了其他的相关办公功能,则可以通过 http://start.codegear-cn.com 访问自设的Google门户网页,通过 http://docs.codegear-cn.com 即可访问google文档站,通过 http://calendar.codegaer-cn.com 即可访问google的日历网站。

    其中文档网站的功能是可以让大家上传并共享自己的文档,而且可以在这些文档中进行全文检索。如果一个团队可以将所有的日常文档都上传到文档站上,那么就再也不用担心文档共享与交流的问题了。如果你需要查找一些特定的内容,也可以直接在团队共享的文档中进行搜索。这对于经常需要进行文本作业、方案作业的团队来说,绝对是一个巨大的帮助。

    日历站,可以帮助大家设置日历、约会、定时提醒等功能。这种功能其实很多软件都提供的。但是要想在团队内部共享这些东西就比较麻烦了。目前比较成熟的方式就是使用微软的Exchange Server或者IBM的Lotus Domino服务器。当然了,Yahoo和很多其他网站也提供相应的功能,但是这种直接由网站提供的日志功能共享的时候比较麻烦。毕竟那是在一个门户网站上,门户网站上所有的客户在共享日历的时候都是站在平等的位置上的。google的日历站就没有这个问题了,我们通常都是只对本域内部的用户进行共享,很少需要将日历发布到全世界。

    另外,如果大家懒得自己做网页的话,也可以通过使用 http://sites.google.com/a/codegear-cn.com 网站,来让google替你完成相应的功能。

    一切都是那么的美好,但是当设置完成之后,却发现,所有这些域名都不可以访问。上网一查才知道,原来这些域名属于是某种转译域名,国内的网管是不允许这种域名的。

    一切的梦想成空。

    上周到加拿大去出差,在加拿大这些域名都是可以访问的,而且也记录了转译以后的域名。大家可以通过直接访问这些转译的域名来访问这些服务。虽然麻烦了一些但总的来说还是可以接受的。

    起始页:http://partnerpage.google.com/codegear-cn.com

    邮件页面: http://mail.google.com/a/codegear-cn.com

    文档页面:http://docs.google.com/a/codegear-cn.com

    日历页面:http://calendar.google.com/a/codegear-cn.com

    自助站点页面:http://sites.google.com/a/codegear-cn.com

    大家可以自己设置一下试试。

    February 21

    Blackfish SQL 数据库管理系统在嵌入式系统中的应用

    1 BlackFish SQL是一个什么样的产品

    BlackFish SQL是CodeGear公司最新推出的一种在管理代码平台上运行的支持SQL标准的、高效的小型数据库产品。

    1.1 支持标准的SQL-92

    BlackFish SQL支持各种数据库方面的国际标准,其中包括最基础的SQL-92。它同时还具备很多大型、企业级数据库才具备的功能,比如支持存储过程(Store Procedure)、触发器(Trigger)、用户自定义函数(User Define Function)、在线交易处理(OLTP)。同时支持使用管理语言(比如Java、C#、Delphi、Basic)直接编写存储过程、触发器和用户自定义函数。

    1.2 支持Unicode

    目前,很多应用或设备都要求能够在不同的语言环境下进行发售和部署。比如同时在中国大陆、香港、台湾、日本、韩国等亚洲国家所使用的编码系统都是这些国家自己设置的,是不相同的。举个例子,我们大陆使用的字符集编码方式是GB2312,这个字符集中包含了英文、简体中文、繁体中文、日文等字符。台湾使用的是Big5字符集,其中也包含了这些字符。但是同样的一个字符在不同的字符集中所对应的却是不同的编码。这就导致了同样一段文字在不同的字符集下显示出来的结果完全不同的现象。为了应对越来越国际化的应用需求,国际软件界普遍认识到,应该有一种字符集能够统一的支持目前人类所使用的所有字符,这就是Unicode。目前比较新的数据库产品都支持将数据保存为Unicode格式。

    Blackfish SQL支持现在主流的Unicode编码集,同时支持进行Unicode分类、检索、查询以及排序。

    1.3 具有很多大型数据库所提供的功能

    BlackFish SQL具备很多大型数据库才拥有的功能。这个产品既能支持嵌入式设备,也能支持大型服务器。

    这些特性包括:支持64位CPU、多核CPU和均衡多CPU并行处理(SMP,多个相同的CPU同时处理)。

    同时支持本地链接、远程链接以及嵌入程序内部的运行方式。

    1.4 完备的可靠性和非常高的性能

    数据库的可靠性主要体现在数据库本身的数据安全性方面。普遍的做法是对数据进行备份,然后在出现问题的时候进行恢复。

    而备份技术从总体上可以分为离线备份和在线备份,其差异在于:离线备份进行的时候,必须中止数据库服务器的使用,停止所有的数据服务,停止响应所有的数据请求;而在线备份则恰恰相反,在进行备份的时候,允许数据库服务器继续为各种应用提供不间断的数据服务,持续的响应各种数据请求。这就是说,离线备份只能在数据库服务器不工作的时候才能进行,而在线备份可以随之进行。BlackFish SQL所采用的就是在线备份技术。

    当然,在线备份技术也不是完美的。虽然在线备份的时候,数据库服务器可以继续提供服务,但是由于在线备份对于数据库服务器的压力很大,进行一次完整的在线备份,往往意味着数据库服务器的响应速度会在备份完成之前的这一段时间里面变慢。为了解决这个问题,BlackFish SQL特地加入了一个最新的技术——增量备份。增量备份的工作方式就是,只进行一次完整的备份,然后每隔一段时间,将这一段时间数据库所发生的变化备份作为一个数据更新增量,备份到原来的那个完整备份上面去。这样一来,BlackFish SQL就可以极大的缩短每一次备份所需要的时间,最终达到让客户可以在不知不觉中完成日常的数据备份工作。

    1.5 BlackFish SQL具有极高的运行速度

    BlackFish SQL具有非常高的使用性能,这个产品可以以三种方式运行:作为系统的一个服务、作为系统上的一个独立运行的应用、嵌入到特定的应用程序里面。其中将BlackFish嵌入到特定的应用程序里面的方式,从物理上来看就相当于这个应用程序可以通过BlackFish所提供的功能模块,直接访问数据文件。这无疑是最具效率的一种数据访问方式,因为使用这种方式进行数据访问的过程中没有任何通常数据库服务器提供服务时所需要的中间过程,而这些诸如网络通讯、权限认定等中间过程在整个数据请求的周期中所占的比例是非常高的。

    1.6 部署成本非常低廉,而且可以做到零维护

    很多数据库产品需要安装,并在运行的过程中需要进行复杂配置,但是BlackFish不需要这些。这个产品在使用之前不需要任何安装过程,只要将所需要的文件复制到需要运行的系统中即可,而且如果采用嵌入应用程序的运行方式,需要复制的文件只有一个。

    BlackFish SQL只需要在系统中占用1M空间即可运行,而不是像某些大型数据库那样需要几百M甚至上G的空间才可以运行,其所占资源非常有限。

    BlackFish SQL可以做到完全的零维护,一但程序开始运行,即不再需要任何维护。

    2 对嵌入式系统目前开发状况的简单分析

    2.1 多语言、多平台开发

    目前同时维持多种语言或平台进行系统开发的现象在嵌入式开发的过程中还是非常普遍。这就意味着系统开发团队中会有很多不同的程序员,他们熟悉不同的开发语言和应用或开发平台,并使用这些语言或平台构筑嵌入系统的不同部分。

    这些程序之间基本上是无法进行沟通和交互的。

    他们按照自己所使用的开发技术分成一个个小群体。

    信息和技术会保持在这些小团体甚至是个人手里,一旦这些团体或个人流失,这部分的技术也就流失了。

    掌握不同关键技术的程序员成为团队内的不稳定因素,由于使用的是不同的开发技术,最终可能导致开发团队中每一个人都掌握一些关键技术。应用在被设计之后,就会被分配给不同的人,进行不同的技术开发,他们之间的职位完全没有可替代性。其中任何一个人员的流失都会造成整个项目的失败。

    项目的升级、管理成本都非常的大。

    这些不同的应用之间基本上无法进行信息共享和协同工作,他们只能独立的完成各自的功能。

    这些应用中的C/C++的应用要在每次更换硬件或操作系统平台的时候重新编制、编译。这对于嵌入式系统的供应商来说,也是一个非常沉重的负担。

    2.2 通过数据文件来满足数据处理的要求

    这种方式的优点在于速度快、占用的空间最小,但是更新维护会变得异常麻烦。伴随着数据复杂程度的上升,维护的复杂程度也会相应的成几何级数上升。这种方式无法适应复杂的应用,只能支持那种只有极少量数据处理的场合。而且,由于使用了数据文件的方式,数据的备份、同步、灾难恢复都需要自己编程处理,这是非常麻烦的。而且,在多个应用都需要对数据进行操作的时候,就必须考虑到锁闭的问题。有些更新动作必须要将数据锁闭,然后再更新之后再解锁,否则的话就有可能造成数据信息的混乱。这些东西都需要程序员自己处理,而且这些代码会分散在不同的应用程序代码里面,一旦要修改非常繁琐。

    3 嵌入式系统开发中新的需求与挑战

    3.1 单一语言、单一平台开发

    依赖比较强劲的虚拟机技术,可以彻底摆脱特定硬件环境的束缚。每次更换硬件平台之后不需要对原来的应用进行修改即可直接使用。所有的应用都是用一种技术开发出来的,程序员之间比较统一沟通,而且关键技术不会掌握在极少数人手里。

    程序员招募和培训的成本极大的降低,每一个程序员的角色不再是不可替代的。他们相互之间的可替代性,比原来使用多语言、多平台进行开发的时期极大的提高了。

    此外,网上有大量的开源代码可以直接使用,极大的降低了新功能开发的成本。

    3.2 通过更强大的数据处理能力,实现更多的增值业务

    以前功能比较简单的时候,添加功能的主要工作是编制新代码,各种功能是由一大堆相互独立的源代码堆砌而成的。现在,基本功能达到之后,添加新功能的主要工作就不再是编制代码,而是将现有的功能组合起来,加入更多的具有管理性、协调性、交互性的增值性质的功能。这些功能的运转,主要依赖于复杂的数据逻辑支撑。

    未来,在管理性和交互性功能被普遍接受之后,新增的功能对于复杂业务逻辑的要求会越来越高。

    4 嵌入式系统对数据处理的要求

    随着客户对于嵌入式系统所能提供的功能提出了越来越高的要求,嵌入式系统越来越多的采用支持SQL标准的数据库产品来进行数据的处理。

    它具有以下优点:

    l 可以直接使用标准的SQL语句来处理数据的写入和查询,不需要为每一种数据格式编写单独的数据处理模块。 而且,数据库服务器能够将更新交易、更新锁闭、数据备份、灾难恢复等功能从应用程序中统一的分离出来。

    l 数据维护成本和数据复杂度基本无关,不管是十种还是一千种格式的数据,对于这些数据的具体操作程序来说,并没有太大的区别。

    l 可以支撑更复杂的应用。

    由于嵌入式系统的特殊性,并不是所有的数据库产品都适用于嵌入式应用。下面,让我们来分析一下嵌入式应用对于数据库产品的具体需求。

    4.1 最重要的就是可靠性

    嵌入式系统有一个最大的特征,就是分发数量巨大。绝大部分的嵌入式系统,其销售或分发的数量都是非常巨大的。

    其结果就是,这些设备被售出之后,一旦出现软件质量问题,就是一个巨大的灾难。软件故障和硬件故障有着本质的区别:硬件的设计缺陷一般在出品前都会被检测出来,所以出现在客户面前的硬件故障一般都是个别的设备缺陷,数量不会太大。同一个批次的产品中的软件是完全一样的,一旦其中出现问题,那么这一个批次的所有产品就都有问题。所以这就要求,嵌入式系统使用的数据库产品具备最大的可靠性。而且,一旦出现了问题,最好有一定的自我恢复能力。

    4.2 平台无关性

    嵌入式系统的硬件环境一般是非常复杂的,每一个批次之间都有可能存在差异。这就要求应用于嵌入式系统的数据库产品必须做到与硬件或操作系统平台无关。最好是运行于虚拟机上,并且最好能够支持目前所有主流的虚拟机平台。

    4.3 在低端硬件平台上,达到比较高的性能

    嵌入式系统由于其体积和成本的限制,其硬件性能一般情况下不会太高。所以这也就要求应用于嵌入式系统的数据库产品在低端硬件平台上的运行性能必须比较高。

    4.4 低廉的部署成本和绝对的零维护

    嵌入式系统中的存储空间一般都比较小,这也就要求嵌入式系统中应用的数据库产品所占用的空间必须在嵌入式系统允许的范围内。而且,对于售出的嵌入式系统产品进行大规模的召回维修或者上门维修都不太现实,所以必须要求在这上面使用的数据库产品可以做到绝对的零维护。

    4.5 支持SQL标准

    为了能够应用大量的网络开源代码或程序员现有的经验,所以要求,数据库产品必须兼容SQL标准。

    4.6 支持Unicode

    为了能够进行国际化销售和分发,所以要求数据库产品必须能够很好的支持Unicode存储、排序、检索和查询。

    4.7 同时支持嵌入式系统、普通桌面系统和服务器系统

    很多情况下,我们都需要通过分发数据文件对嵌入式系统进行升级或功能调整。如果一种数据库产品只能支持嵌入式系统而无法在普通的桌面系统或者服务器系统上运行,那么,所有需要分发或者回收的数据文件都必须在嵌入式系统或嵌入式系统的仿真系统中进行处理,这将是一个非常繁琐的事情。最好能够使用同一种数据库产品,在数据维护人员的桌面系统或服务器系统上运行起来,并加载分离出来的嵌入式系统中的数据文件,进行数据的检测和维护。

    4.8 数据库文件比较容易进行分离和同步

    数据库中的数据文件应该能够进行比较方便的分离和同步,这样的话,通过各种网络对嵌入式设备进行远程的升级或维护就成为了可能,而且这个过程也可以变得更加的人性化。比如用户在自己的系统中进行了一定的特殊配置,那么在升级的时候,系统应该能够将用户自己所作的设置加以保留,并在此基础上将升级的数据注入到数据库之中。

    5 BlackFish SQL对于嵌入式系统的支持

    5.1 支持在线增量备份

    BlackFish SQL支持在线增量备份技术。这项技术使得BlackFish能够经常性的将客户对数据库的修改和更新备份到比较安全的地方。而且这个过程不会给客户带来任何不便。有了对数据的备份,即使数据库信息有什么损害,应用也可以进行无缝的灾难恢复,绝对不会造成由于数据库的原因而导致必须派遣维护人员上门维修或者设备、系统的返厂维修。

    BlackFish SQL作为一种商业产品能够提供完整的文档和技术支持服务,绝非一般的开源或免费产品所能比拟。

    5.2 在虚拟机上运行,与平台完全无关

    BlackFish SQL支持目前流行最广泛的虚拟机平台。这个产品既支持Java平台,同时也支持微软的.NET平台,可以运行于目前已知的绝大部分的嵌入式系统之中。

    5.3 使用In-process方式运行,基本上可以达到与直接操作数据文件相近的执行效率

    BlackFish SQL支持直接嵌入到应用中的运行方式,就是将BlackFish的各种功能直接作为一个外加模块嵌入到应用程序之中。应用程序通过这种方式来调用BlackFish服务,其工作流程上和直接调用数据文件是一致的。

    5.4 不需要维护和安装

    驱动数据库所需的额外文件只有一个,所需的额外存储空间也就是1M左右,绝对不会给嵌入式系统造成过多的存储和维护压力。

    5.5 支持SQL-92

    BlackFish SQL支持标准的SQL-92以及更新锁闭、更新交易处理、存储过程、触发器、用户自定义函数等数据库标准。

    5.6 支持Unicode

    BlackFish SQL支持使用Unicode进行数据的存储、排序、检索、查询。

    5.7 同时支持嵌入式系统、标准32位CPU、64位CPU、多核CPU和SMP

    BlackFish SQL不但能够运行于嵌入式系统,同时也能运行于普通的桌面系统和各种大型的服务器系统。嵌入式系统的开发商完全可以开发一个运行于Web服务器的大型应用,让客户在网页上自助的配置他们喜欢的设定,然后直接将这些设置通过BlackFish SQL数据库服务器写入分离的数据文件中,然后再将其下载同步到客户的嵌入式系统之中去。也可以发布一个运行于普通桌面平台的问题程序,使得客户可以通过标准的PC对其所拥有的嵌入式系统进行简单的维护。

    5.8 数据库文件可以自由的分离,并在其它地方进行挂接

    BlackFish SQL的数据文件,不需要任何配置,就可以直接挂接到服务器中进行使用。也可以非常方便的将其从服务器中分离出来进行迁移,极大的简化了嵌入式系统的维护和升级过程。

    6 总结

    客户对于嵌入式系统的功能性要求越来越高,嵌入式系统中软件的复杂度越来越大。为了应对这个变化,嵌入式系统的应用对于复杂数据处理的要求越来越高,而且,嵌入式系统的开发也正在向着单一语言、单一平台的方向发展。

    BlackFish SQL是一款专为嵌入式系统设计的、非常适合于嵌入式系统应用的、支持SQL标准的、支持Unicode的高效数据库产品。

    February 17

    在dreamhost上部署Ruby on Rails应用的步骤

    现在发现,将RoR发布到Dreamhost上实在是太简单了。
    首先,要有SSH权限,如果没有,那就免谈了。我在这里假设大家有SSH权限,而且有Web Panel的权限。
    第一步,登录 https://panel.dreamhost.com ,选择Domain Manager,点击你需要部署RoR的域名进行设定。
    a)将目录设置为 XXXX/public 。RoR默认的启动目录就在这里 XXXX是你RoR项目的目录。
    b)点选上 FastCGI 。
    第二步,登录SSH。
    c:\>telnet www.XXXX.com 或者是 开始->运行->telnet www.XXXX.com。
    这里www.XXXX.com是你申请,且已经绑定到Dreamhost里面的任意一个域名。
    然后找到你要创建RoR应用的目录的父目录。比如你要将RoR建立在 /home/username/XXXX目录下,那么就到 /home/username 目录下,这个目录是你登录以后默认的目录。
    运行 rails XXXX
    RoR框架建立好了,切忌不要将自己的创建的RoR应用直接上传。在Dreamhost里面建立的RoR框架,其很多内部配置信息已经按照Dreamhost的要求进行过修改了。
    然后就可以按照相对应的目录将RoR应用上传上去了,当然了上传的时候要小心,不要覆盖public目录里的东西。另外,config目录里面,覆盖database.yml和routes.rb这两个文件,其它的最好先不动。
    每次更新的时候都要注意不要将不该覆盖掉的文件覆盖掉。如果不慎做了这样的事情,可以再用rails命令生成一个新的框架,然后将相应的文件覆盖回来。
    然后,需要处理的就是 修改 config/environment.rb 。我每次都是直接使用vi进行修改。
    将 # ENV['RAILS_ENV'] ||= 'production' 前面的“#”去掉,将程序的运行状态从默认的“development”转到“production”。
    并将你在environment.rb中作的其他设置添加进去,比如邮件设置。
    最后要注意的是,将public目录下的index.html删掉,否则的话,你在routes.rb里面做的主页设置是不会起作用的。
    另外还有说很重要的一点,如果你发现你的某些更新没有在网页上显示出来,这种情况,有可能必须要重新启动Web服务器。
    大家可以在SSH里面执行 killall dispatch.fcgi。
    一切ok,现在我们就可以在Dreamhost的廉价空间上展示我们的RoR编程技术了。
    祝大家玩的开心。

    February 07

    欢迎参加2008年度的Delphi需求大调查

    http://video.codegear.com/survey/2008DelphiSurvey_SimplifiedChinese.html 

    上面是简体中文调查表的地址。由于这个调查表是我在过年放假期间翻译的,而且长度非常的可观。所以里面有一些错误,请大家千万谅解。用一句小品里的话,请领会精神,看在本人过年还要加班的份上,请大家一定要原谅我。

    请大家积极踊跃的参加,完全不记名,不要有更多的顾虑。

    我们CodeGear的各项资源都是非常稀缺的,特别是人力资源。所以如果希望CodeGear更重视中国地区的要求,请千万要多找些人来,认真填写这份调查问卷。

     

    另外,本人的网站被封闭了,可能要一周以后才能开通。

    主要原因是,我的网站是构建在国外的出租空间上。由于没有必要独立购买一个大的租赁空间,所以就通过代理,很多人合租了一个空间。年前,这个代理的一台服务器被中国政府屏蔽了,为了害怕更大的损失,这个家伙直接关闭了他代办的全部300多个网站,要求我们去申请ICP备案,等备案通过之后再予以开放。

    我不知道这个事情应该说是谁的责任或者问题。总之比较郁闷,过完年再努力争取尽快开放网站。

    January 31

    最近的Blog会在我自己的网站上发布

    最近的Blog主要都会在我自己的网站上发表,http://ss.lukefan.com.cn/?1 欢迎大家访问我自己的空间。虽然管理水平上肯定和微软相去甚远,但是空间巨大100G。可以无限制的上传附件,爽死了。

    January 15

    我要被RoR的cache折磨死了

    将网站进行迁移之后,运行的结果却总是不对。

    反复调整了多天之后总算发现了问题所在。由于原先的网站一直是以开发模式运行的,所以其中的caches_page语句一直都没有产生作用。这次将状态换成了production,完蛋了。每次只要是cache了一次之后,RoR就会在public目录里面保存一个同样文件名的html文件,比如cache了index之后,public目录里就会有一个index.html,cache了demo/list之后,public目录里面就会有一个demo目录,里面有一个list.html文件。如果我们cache了demo/show/1,那末我们就会得到/public/demo/show/1.html,下次将直接调用这些html文件,不再访问RoR程序。如果修改了代码,这些html文件不删除的话,那么修改的部分将不会显示出来。

    本来是一种非常棒的技术,但是我却遇到了很多的问题。首先,计数器不工作了,网页中除了JavaScript的部分所有的动态信息都不工作了。然后,当我取消了对整页的cache,改为对页面中比较相对静态的部分进行cache之后,浏览器只显示出了被cache的那部分信息。实在是让人无法忍受。

    最终删除了所有的cache处理,毕竟我的网站访问量不高,这点处理要求应该还是应付的过来的。

    January 14

    在Dreamhost中进行网站搬迁的痛苦历程

    由于上一个空间已经快要到期了。所以就去询问续费问题。却被告知由于购买的是优惠网站所以,续费必须交一百多美金,于是就去注册了一个新的Dreamhost空间。这次直接注册了100G,然后我就按照网站的说明开始了迁移。

    第一步,移动数据。

    先使用telnet上到旧空间上,然后,使用tar命令将网站打包。

    tar -cvf xxx.tar xxx

    然后使用ftp指令将tar包传到新空间上。

    ftp

    ftp>open www.xxx.com.cn

    Name:

    Password:

    ftp>put xxx.tar

    ftp>exit

    然后再开一个telnet,链接新的站点。建立好目录之后,将tar包移进去,然后 tar -xvf xxx.tar 展开。

    重新设置域名的时候发生了问题。首先我给dreamhost的support写信,要求移动站点。对方回信说,你的新空间是使用一个优惠代码购买的,所以不能移动。当时把我急坏了。

    我后来先将旧空间上的域名删除了。然后强行添加,发现还是不行。但是我发现域名还是没有被取消,还可以访问到以前的内容。然后等了12小时之后,Dreamhost的DNS刷新时间到了。好了,再访问旧域名的时候,发现已经访问不能访问了。然后再给dreamhost的support写信确认,对方确认说域名已经被从他们的列表中删除了。

    然后在新空间里面添加域名 ......一切ok。实在是太激动人心了。

    我们不能享受无缝迁移,但是也能够迁移,就是麻烦一点。呵呵,穷人穷办法。

    January 02

    最新创建的3rdRail试用序列号

    SN: A2AD-K23KSV-FKQ4CL-MBDA

    下载地址:

    http://cc.codegear.com/free/3rdrail

    有兴趣的朋友可以试试。

    新年快乐

    马上就要过年了,今天录制了一个新的视频。作为对于新年的祝贺。

    《程序员快乐的源泉》

    请有情趣的朋友点击上面的链接观看。

    December 19

    Delphi for Win32应用通过REST访问RoR网站的视频例子已经上传

    REST是一种非常简单的网络信息交换协议,简单到几乎什么都不剩。为什么这么说呢?因为REST完全是使用的HTTP协议在工作,比起复杂的SOAP来,REST只剩下简单的GET和POST了,剩下的就全都是XML了。

    如果大家希望了解更多的REST的相关信息请到Google上去搜索。虽然很新,但是这方面的论述还是不少的,我这里就不重新论证了。
    RoR虽然也支持SOAP协议,但是RoR是铁杆的REST的支持者,RoR内部的参数传递都是使用的REST协议。所以使用RoR实现REST是再简单不过的事情了,即使实现给大家看,也实在是没有什么值得炫耀和详细讲解的地方。实在是太简单了。而且很多地方实际上是已经默认实现了的,根本不需要自己再去画蛇添足。

    作为老牌的开发工具,Delphi也要跟上这个最新的流行趋势,并且争取在REST上面焕发新春,大家千万不要觉得Delphi处理新技术是一件非常痛苦的事情。恰恰相反,使用Delphi来开发REST的客户端,是非常轻松惬意的事情,这主要得益于Delphi自带的功能强大的HTTP控件和极强的XML处理能力。在配合上Delphi强大的客户端界面表述能力,我们完全可以实现一个基于互联网的;多服务器协同服务的;具有完全自由、完全不受限制的用户交互体验的;甚至是操作底层硬件、操作系统的综合应用。

    我们的思想再一次的得到了解放,原来我们需要在丰富的表现力和丰富的互联网资源之间进行取舍,我们必须选择IE或FireFox,现在不需要了,我们完全可以开发基于技术互联网协议的,自制信息发布和处理程序,而再不需要局限在浏览器和HTML了。
    天地无限宽广,请大家尽情翱翔。

    按兴趣的朋友请点击:我的网站

    December 18

    网页上的Ajax操作一定要适量,不要过分的依赖这种技术

    Web应用就是Web应用,虽然有了Ajax之后确实交互能力强了,但是如果太多的交互,那么结果只有两个。必须下载非常多的东西到客户端(JS或Flash)、非常频繁的服务器交互造成服务器负荷过重。
    而且很多程序你在本机调试的时候是可以正常运行的,但是真正上传到服务器之后就不行了。我已经遇到好多次了。主要的原因在于“非同步”上,我们知道Ajax使用的是非同步技术,也就是说当你向服务器发出请求的时候,不等待服务器的回应。那么如果服务器反应比较慢或者网速不是很快的情况下,客户很可能会在没有看到服务器反应的情况下就有点击了其它的东西。而这个时候,客户端可能会连续的接到很多服务器发回的响应,而且这些相应完全是无须的,也就是说你不确定你最先收到和最后收到的哪一个应该是现在需要显示的。
    比如我网页上的新闻模块中的过滤功能 http://www.lukefan.com.cn/news/news_page
    本来那上面是没有过滤按钮的,在我机器上开发的时候,完全可以在点击了复选框之后直接进行过滤,但是上传到网站之后,发现不行。最后只好改成了现在的这个丑模样。
    所以Ajax最好不要相应太多的必须及时回复的请求,最好不要返回太多的信息。
    虽然我们经常在做例子的时候演示回传图片,但是如果在正常的外网上,这个例子会报超时错误的。
    VCL for the Web在StandAlong方式运行的时候允许选择出口速度,大家最好在发布应用之前先在56k上试一下是否可以通过。

    个人网站版面全面更新

    我用了一个小时挑选背景,用了半个小时裁剪画片,用了五分钟修改代码,用了十分钟上传。完成了版面的更新。总的来说,裁剪画片还是比较简单的。当然,修改代码更简单。

    希望大家可以推荐一些好的画片来,要PSD格式的。我好经常的修改一下版面。

    希望这次修改的版面大家喜欢。

    http://www.lukefan.com.cn

    December 10

    参加Softcon2007归来

    感觉实在是很累,连续两周,参加了两场软件开发相关的研讨会,分别是CSDN主办的SD2.0大会和中科软组织的Softcom2007。我不想对两个会议的水平和层次进行比较。唯一希望双方主办方注意的是,下次请不要将时间安排得这么近,会累死人的。

    在Softcom2007大会上,我上午在大会场学习的时候,有一位讲演人居然告诉我们,只要程序员自身的素质比较高,做出来的软件就可以不用进行测试。还举了例子,说一个人平时好好学习,考试的时候飞快的完成试卷,然后不检查就交卷了。另外一个人平时不好好学习,到考试的时候,一遍又一遍的检查,但是最后的成绩还是不如前面那个人。并根据这个例子得出了前面那个恐怖的结论。听到这里,我实在是听不下去了,闪人。在楼下我们的展台上继续等待到下午3点,好进行我的讲演。我感觉Softcom2007大会有一点是做得不错的,那就是中午的饭不错,五洲大酒店和国际会议中心确实是经常进行大型国际化会议的地方,准备的自助餐很对我的胃口(本人是一个纯粹的肉食动物)。我为下午的讲演预备的非常多的内容,但是,实在是太多了,以至于我基本上讲完PPT就没有时间了,后面关于3rdRail的Demo实在是没有时间Show了,只能给大家Show一个简单的结果。非常遗憾,这个时候如果是换作李维大师来讲的话,那该多好啊,当然,李大师渊博的学识,丰富的经验都是咱学不来的,仅仅是他比一般人快两到三倍语速就让人羡慕不已。

    年底之前,应该没有太多事情了,我准备将这两次的讲演合并已经录成录像,然后发到网上,将会场上的遗憾补回来。

    请大家关注本人的网站 http://www.lukefan.com.cn

    笑话一则,与大家分享

    [最新哈佛营销案例]

    一男赶集卖猪,天黑遇雨,二十头猪未卖成,到一农家借宿。少妇说:家里只一人不便。男:求你了大妹子,给猪一头。女:好吧,但家只有一床。男:我也到床上睡,再给猪一头。女:同意。半夜男商女,我到你上面睡,女不肯。男:给猪两头。女允,要求上去不能动。少顷,男忍不住,央求动一下,女不肯。男:动一下给猪两头。女同意。男动了八次停下,女问为何不动?男说猪没了。女小声说:要不我给你猪……天亮后,男吹着口哨赶20头猪赶集去了......

    哈佛评论:要发现用户潜在需求,前期必须引导、培养用户需求,因此产生的投入是符合发展规律的。我们一定要充分掌握这个送猪定律!

    December 04

    SD2.0大会上,听众给照的照片

     sd2.0

    这位仁兄虽然不是很喜欢我的演讲,但是座位非常靠前,所以他照的照片非常清晰。他认为我讲演中的商业成分过重,没有办法,买什么吆喝什么。不过说心里话,我还是很热爱Borland以及现在CodeGear的各种开发工具产品的,所以比较幸运的是,至少不用说违心的话。

    感谢 wtmgsn 朋友,给我照的这么棒的照片,我都没有这么近距离看过自己讲课的样子,多么淳朴憨厚的一个胖子啊。请务必相信我说的每一句话都是真的。纯粹是开个玩笑,不要骂人。

    使用ADO.NET 2.0访问Interbase和其它DBX驱动的数据库

     

    首先需要找到AdoDbxClient.dll这个关键的assambly,这个文件应该会在不久之后随着Interbase的补丁包发布到网站上去的,如果你没有这个文件,可以在Rad Studio里面找到 Borland.Data.AdoDbxClient.dll应该也是一样的。

    然后在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG 目下的 machine.config 中加上下面两段中的一个。

    <add name="InterBase ADO.NET 2.0 Data Provider" invariant="Borland.Data.AdoDbxClient" description=".Net Framework Data Provider for InterBase" type="Borland.Data.TAdoDbxProviderFactory, Borland.Data.AdoDbxClient, Version=11.0.5000.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b"/>

    <add name="AdoDbx Data Provider" invariant="Borland.Data.AdoDbxClient" description=".Net Framework Data Provider for dbExpress Drivers" type="Borland.Data.TAdoDbxProviderFactory, Borland.Data.AdoDbxClient, Version=11.0.5000.0, Culture=neutral, PublicKeyToken=91d62ebb5b0d1b1b"/>

    然后就可以开始试验了

    首先使用Delphi.NET,你不需要手工的添加任何 Reference ,然后通过下面的这段代码加以实现。

    var
      conn: DbConnection;
      comm: DbCommand;
      reader: DbDataReader;
      sl: TStringList;
    begin
      conn := DbProviderFactories.GetFactory('Borland.Data.AdoDbxClient').CreateConnection;
      conn.ConnectionString := 'DriverName=Interbase;Database=C:\gdb\products.ib;'
        + 'RoleName=RoleName;User_Name=sysdba;Password=masterkey;SQLDialect=3;'
        + 'MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory,'
        + 'Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Culture=neutral,'
        + 'PublicKeyToken=91d62ebb5b0d1b1b;GetDriverFunc=getSQLDriverINTERBASE;'
        + 'LibraryName=dbxint30.dll;VendorLib=GDS32.DLL';
      conn.Open;
      comm := conn.CreateCommand;
      comm.CommandText := 'select * from products';
      comm.CommandType := CommandType.Text;
      reader := comm.ExecuteReader;
      sl := TStringList.Create;
      while reader.Read do
      begin
        sl.Add(reader.GetString(1));
      end;
      ShowMessage(sl.Text);
      reader.Free;
      comm.Free;
      conn.Close;
    end;

    如果你使用VS.NET2005则首先需要使用 Add Reference 添加 AdoDbxClient.dll, 然后通过下面的代码来实现。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Borland.Data;
    using Borland.Vcl;
    using Borland.Data.Units;
    using System.Data.SqlClient;
    using System.Data.Common;

    namespace ADODataGrid
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                ReadData(getConnection());
            }

            public DbConnection getConnection()
            {
               // DbProviderFactory factory = DbProviderFactories.GetFactory
                 //            ("Borland.Data.AdoDbxClient");
                DbConnection c = new TAdoDbxConnection();
                //DbConnection c = factory.CreateConnection();
                c.ConnectionString = "DriverName=Interbase;Database=C:\\Borland\\InterBase\\examples\\database\\employee.gdb;RoleName=RoleName;"

    +"User_Name=sysdba;Password=masterkey;SQLDialect=3;"

    +"MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory,"

    +"Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Culture=neutral,"

    +"PublicKeyToken=91d62ebb5b0d1b1b;GetDriverFunc=getSQLDriverINTERBASE;LibraryName=dbxint30.dll;"

    +"VendorLib=GDS32.DLL";
                return c;
            }

            public void ReadData(DbConnection conn)
            {
                string sql = "select * from employee";
                DbCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                conn.Open();
                DbDataReader myreader = cmd.ExecuteReader();
                dataGridView1.DataSource = myreader;
                DataSet ds = new DataSet();
                DataTable dt = new DataTable("employee");
                ds.Tables.Add(dt);
                ds.Load(myreader, LoadOption.PreserveChanges, ds.Tables[0]);
                dataGridView1.DataSource = ds.Tables[0];
                myreader.Close();
            } } }

    November 30

    参加CSDN组织的SD2.o大会归来

    DSC01397

    我昨天(11月29日)参加了由CSDN组织的软件开发2.0大会,这是我在会场展示区中我们的展台旁边,与两位合作伙伴MM的合影。怎么样MM很漂亮吧,我也很茁壮吧。哈哈。

    我穿的是大会统一发的衬衫,居然也有我能穿进去的号码,不容易啊。两位MM身上的T-Shirt和帽子,都是我们公司专门为合作伙伴印制的,大会结束之后也许还有剩余(但是我不能保证),请喜欢的朋友在论坛(http://bbs.lukefan.com.cn)上告诉我你们需要的Size,如果剩余中还有你们的Size,我会快递给你们,所有收到T-Shirt或者帽子的朋友,我对你们的要求只有一个,贴一张穿着T-Shirt或者带着帽子的照片在论坛里面。我会在大家把照片都贴上来之后将这些照片统一贴到Blog上来的。另外,由于这批衣服是澳大利亚在中国定制的,所以Size普遍偏大,我只能穿XXL得,上面的MM穿的是S的,不过考虑到我们程序员普遍的体重都比较大,所以我专门订了两件XXXL的,如果有对自己的体型非常有信心的朋友,也可以来试试,我估计这两件肯定能够剩下。作为参考,我告诉大家一个个人隐私,我本人身高基本合格1米77,体重基本达标,超过100公斤,多于的部分自己也不太确定,但是只能穿两个X的,不知道是不是有程序员朋友可以给我一个惊喜。不过即使你们领到了超大size的T-Shirt,也没有关系,至少照一张照片和大家分享一下,至于下一次你是否再穿就看你自己的决定了,当然我希望下次我到你们那里去办活动的时候,如果天气允许的话,你们可以把它穿戴出来。帽子是不分号的,不过本身数量比较少。

    DSC01415 右面这张照片上身着西装正在发表演讲的超级大帅哥就是我们CodeGear的CEO,Jim Douglas先生,作为当天上午在全体大会上发表演讲的最帅的一位CEO,大会特别照顾,别人的演讲都是20分钟,只有我们的Jim讲了40分钟,台下很多听众在中间离席去租同声传译的机器,造成这种现象的原因我估计有三个:首先、当然是我们的帅哥CEO的演讲非常吸引人,非常有号召力,我们公司的品牌和产品非常的深入人心,大家一定要亲耳听一听CodeGear的CEO的现场演讲,这也是Borland和CodeGear成立以来,第一次有CEO到中国,并在公众面前发表演讲;再者、应该是因为我们的CEO实在是太重视中国市场了,作为第一个在中国程序员面前发表演讲的CodeGear CEO,他实在是有太多的话要说,他准备了太多的内容,即使有比其他演讲人多一倍的时间,他的语速还是非常的快,使得很多原来勉强可以听懂的朋友,发现自己的英语水平在这位心情激动的美国帅哥面前还是不太够用;最后、租同传机需要200元的押金,很多程序员兄弟在交了昂贵的票价之后再承担起来就有些困难了,所以没有在开始的时候去租。总之,老板的讲演非常成功,他讲的很过瘾,大家听得也很过瘾。在四十分钟的时间中,他用考英语专业8级听力时的1.5倍语速,将CodeGear会在未来的软件开发与应用变革中站在一个什么样的领导位置,并起到一个什么样的不可替代的作用,以及CodeGear未来的发展方向很好的向大家进行了阐述。当然,我想唯一美中不足的就是时间还是不太够用,如果能够给Jim更多时间的话,那就更完美了。

    在下午的分会场专题技术研讨和交流活动中,我再接再厉,在规定的1小时交流时间之外,再继续占用后面讲师的时间和大家进行着热烈的交流。DSC01421

    前面那么很小的基本上看不出是哪一个的人就是本人,幸亏我身高和体重基本上都达标了,否则的话就会被热情的程序员们所淹没了。这个大厅本身可以容纳150个人,但是在我演讲的过程中,CSDN不得不向里面再加了超过50张的座椅,并且还有一些人不得不站着参加我的研讨会。据CSDN的人说,在我的交流会进行的过程中,另外有两个同时进行的交流会,会场内门可罗雀,真是十分的抱歉啊。我已经很久没有做过这么过瘾的研讨会了,我讲的非常过瘾,我相信下面听的朋友应该也相当过瘾,就是时间太短了,我都没有时间给大家做Demo了。本来CSDN的人应该在还有十分钟的时候提醒我的,我也准备给大家作10分钟的Demo。但是他们现场负责会场进程的几个工作人员也和我以及其他的参加研讨会的朋友一样忘记了时间,直到我已经超时了以后,有下一位讲师提醒,他们才想起来给我举牌子,告诉我还可以再讲五分钟。我当时大吃一惊,然后当场质问他们为什么不在还剩10分钟的时候提醒我呢?我很气愤,所以,我在得到提醒之后又讲了五分钟,然后又给现场的朋友们做了十分钟的Demo,哈哈,又赚便宜了。DSC01431

    这是从我会场前面拍摄的照片,很壮观吧。很遗憾李维大师没有来参加我们的活动,主要是因为他太太生病了,他需要在台湾陪同治疗,请让我们在这里一起预祝李维大师的太太能够早日康复。

    本来分工的是李维大师的讲演偏重于Ruby on Rails和我们的最新开发工具3rdRail的,而我的介绍则是以最新发布的开发工具产品Rad Studio 2007和最新嵌入式数据库产品BlackFish为重点的。但是由于李维大师的缺席,很多朋友就没有机会了解到我们的最新RoR开发工具3rdRail的强大功能了,这是在是非常的遗憾,不过我会在下周六(12月8日)下午举办的《Softcon2008》大会上将这一课补上。希望对这一部分感兴趣的朋友,能够届时参加。

    另外如果有人对于我们最新的嵌入式数据库产品BlackFish感兴趣的话,可以参加下周三(12月5日)中午12:00在网上举办的在线研讨会,具体参加办法,可以请大家浏览我的个人讨论组(http://bbs.lukefan.com.cn)来了解,我会在这个研讨会上和大家演示如何使用Delphi来编制BlackFish的存储过程和用户自定义函数。并且会在线上交流会后的一周将该交流会的内容录制成录像,放置到我的个人网站(http://www.lukefan.com.cn)上去,上面已经有我录制的很多视频演示,欢迎大家去观看。

    这次的活动非常的成功,除了Jim和我都感觉演讲时间不太够用之外,非常完美。希望下周六的活动还能有这么多热情的朋友支持,Jim明天(12月1日)就要回美国了,相信他能够通过这次短暂的中国之旅,感受到中国程序员对于CodeGear得热爱。希望我们能够更多的看到CodeGear的高层直接来和中国的程序员进行互动和交流。下周的《Softcon 2007》大会上,会有我们亚太区的老板Malcolm Groves发表演讲,希望大家继续支持,让他看到我们中国程序员的热情。

    November 28

    我们将参加一年一度的《2007中国软件技术大会》

    地点在国际会议中心(亚运村)时间是在12月8日和9日。
    我们公司亚太地区的老板Malcolm会在12月8日上午的大会上发表演讲,我会在当天下午的一个分会场上做一个小时的现场技术交流,有兴趣的朋友可以参加。
    这次的会议应该也是要买票的,不过考虑到没有食宿的问题所以应该不会像前面的CSDN大会那么贵。
    预知详情,请点击:《2007中国软件技术大会》