2004-06-28

星期日买了一台IPAQ1940

详情,请看我的另一个Blog:

给大家Show一Show我刚买的IPAQ1940



2004-06-26

《Tiny的微软MDC大会报导》之流水账+模糊的照片

首先要感谢CSDN的韩大哥和刘小姐,这次能有机会参加MDC大会,全仗两位的帮忙。


题目叫做报导就比较寒了,Tiny没有好的数码相机,不能第一时间把信息发z大家,但是我想程序员和媒体关注的东西也许并不相同,一个简单的例证就是,下午讲座的时候媒体寥寥无几,但是上午开幕的时候媒体席可坐满了记者。所以就尝试用程序员的眼光给大家报告一下MDC大会的见闻。希望能让没有参加这次大会的朋友,有所收获,^_^


25日一大早,我就和同事出来了,但是看错了地图,所以找了很久都没有找到地方,幸亏打电话问了刘小姐,我才能按时到达会场(够白痴的吧?)。


主会场很大,人也很多,我们到的时候已经没有多少空座了,后来我们找了一个中间靠后的位置,虽然有点远,但是基本上还能看得清楚。



首先,是微软的大中华区总裁陈永正,念了简单的一个开幕词。然后就是张亚勤博士的主题演讲。然后是摩托罗拉的一个主题演讲,接下来是多普达的总裁的演讲。然后就是微软挑战赛的颁奖。这时候上午的的活动结束。


下午有8场专题演讲,分别在两个分会场举行。Tiny和同事选择的是:


ASP.NET移动控制"Whidbey"
使用移动Web服务
使用Pocket OutLook object model(Poom)开发联系、日历、任务等方面应用
Intel移动设备的解决方案
Windows Mobile上的游戏-现状和未来


因为分了两个会场,所以只能听到一半,有点遗憾,后续报导,Tiny会谈一谈听这些演讲的体会。



最后是照片,没有数码相机,用7650拍的,很不清楚,大家忍着看吧!


大会正式开始


2004mdc001


张博士演讲中的演示


一款叫做links的高尔夫游戏,工作人员在展示该游戏在pc和ppc相同的界面,操作方法,外观和声音



帝国时代,几乎人人都知道的游戏吧?效果还称,可惜投影看不清楚,我的照相机也是问题啊




演示pc版的联众和ppc版本的联众联机对战。不过pc版的联众始终不能登陆,寒



来自美国的微软专家,来演示怎么在.net环境下,vb编程用ppc来调用一个webservice


微软移动开发挑战赛颁奖,值得一提的是还有位女程序员获奖




中午微软提供的午餐



排队来吃饭的参会人员,人山人海




2004-06-24

如何得到IE收藏夹的位置

因为我打算做一个插件,用来在不同的地方同步我的IE收藏夹,所以,我就遇到一个问题,如何才能找到IE收藏夹的位置。

有人立刻就说我白痴了,收藏夹的位置不就是“C:\Documents and Settings\Administrator\Favorites”,问题当然不那么简单,同一台PC的不同用户有着不同的IE收藏家,不同操作系统的用户收藏夹位置也不相同,那我们看看怎么才能编程找到它呢?

寻找的方式很简单,一是在Regedit里面搜索"Favorites",一个是在MSDN里面搜索"Favorites",结果都很不错。

在Regedit里面的搜索,我发现了下面一项:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

这个项目完全超额完成了我的任务,有兴趣的可以去看看。

MSDN这边也是硕果累累,成果如下:

Shell Helper API(可以用来操作收藏夹的内容和导入导出)

http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/external/external.asp

Netscape Bookmark File Format(Mozilla和Firefox应该用的就是这个格式)

http://msdn.microsoft.com/workshop/browser/external/overview/bookmark_file_format.asp



寒到绝对零度的一篇文章《BCB6.0是垃圾的二十条理由》

CSDN的BLOG开张了,这真是一件盛事儿。这两天我都在关注CSDN的BLOG,某种程度上讲,这样的形势确实好于以前的文档中心,但是有些地方也有点不好,这姑且不论。今天我在CSDN的BLOG乱翻的时候看到一篇让我寒到了绝对零度的文章,给读者引用如下,顺便谈谈Tiny的看法。

下面的引用部分来自★漂亮狗窝★(引文用绿色表示,Tiny观点用红色表示。)。

BCB6.0是垃圾的二十条理由


我用的BCB6.0和windows2000 都是公司配的正版,我也有多年的开发经验。
Tiny没这好运气,Tiny一直用盗版用的BCB6.0和windows2000,开发经验不算长,从BCB3开始用起的。

1. IDE经常出现非法操作,有时重起动还会出错,需要重装BCB。
Tiny也遇到过非法操作,但是很少,而且没有重起了还存在的问题,当然你删掉一些重要文件的话,是有可能造成必须重装的境地。

2. 自动完成和智能提示功能超慢,慢到可以去泡一杯咖啡。
在很多情况下,确实比Vc的相同功能慢多了,不过你可以问问Vc的开发组,加上一个代码自动生成的,自动修改的,GUI窗体设计器以后,Vc还会不会那么快。不要用Vc的对话框编辑器来糊弄我,我见过世面的。

3. 上面两个功能经常导致出错信息,最底下那相信息框动不动就弹出来。
那是因为你的使用不当,代码正确的时候,怎么会有错误提示,这其实是智能,只是你用不好罢了。

4. VCL库里BUG无数,随便写个程序,用自带的内存检查工具一查就有内存泄露。
没发现,请确信你知道某些控件的调用规则和相应c++语法。

5. 编译链接时经常莫明奇妙出错,再编一次就好了,有时需要编好几遍。
代码正确前提下,没有出现过。

6. 无论如何改动编译选项,无法在调试中设置断点。
笑谈。

7. 编译、链接速度超慢,让人无法忍受。
内存是主要因素,还有机器配置,在一个适当的机器配置上,你会知道到底谁快的。

8. C++的类库居然是PASCAL源代码。
你是打算赞叹么?库怎么写不行?按照你的思路,微软的COM是最大的垃圾,我甚至看不出来,那些东西是用什么语言写的。

9. 单步跟踪时死机,或出错。
绝对没有过,代码错误除外,但是也能捕获。

10. 编辑器功能太少,没有宏,也没有自定义键盘。
自定义功能够强大了,不够的话人家留了接口了自己写程序扩展啊,再不够,不要告诉我,你不会用别的编辑器来编辑。

11. IDE本身不仅占内存巨大,还有内存泄露,长时间使用后内存不足。
占内存确实不小。

12. 多个工程一起编译时不会检测哪个工程需要重编译,导致运行混乱。
多半是你自己的配置不正确。

13. 既使一个小改动,也需要把整个工程重编译一遍,增量编译功能巨次,实同虚设。
不恰当的工程文件和H引用关系造成的吧?自己检讨自己先吧!

14. 没有增量链接功能。
增量链接好像是没有。

15. 没有编辑继续功能。
好像是没有。

16. 使用VCL编译出来的windows程序效率极低,且文件尺寸巨大。
动态静态的编译选项,你会选么?效率问题,从来没有遇到过。

17. 调试时的内存、反汇编查看功能非常难用。
没感觉。

18. 对于大工程的管理相当困难,工程越大,问题越多。
最大的程序2万行,太大的没做过,没感觉。另外工程太大了,是不是说明结构不对啊?

19. 启动和退出超慢,经常无法响应。
慢点而已,不至于。

20. 附带的工具一个比一个次,你看一下那个和spy++类似的工具就知道了。
不如Vc丰富,但是都还不错,可惜的是,有些东西因为BCB的高度自动化,而被Borland刻意弱化了,比如资源编辑。


Tiny的题外话:

比较开发工具还有语言,经常是最无聊的事情,因为怎么都没有标准答案,而且可以吵得天翻地覆,我本不想参与,但是确实不忍看到自己喜欢的BCB被人扁的一无是处。另外作者发这样的东西,好像是因为某种和技术无关的争吵,这让我感到很遗憾,BCB像是被迁怒的对象,可怜的无言的家伙。



2004-06-20

强烈建议所有做网站的朋友都去看一下的网站

Css Zen Garden是一个展示css能达到的最佳效果的舞台。

这个网站的作者,建立一个令人惊叹的网站,他设计了一个机制,网站的所有页面都按照某种标准来编写,然后每个网友都可以根据这个网站的架构来写css,并且提交。现在这个网站已经有了很多由网友制作的风格,很多都是非常惊人惊叹的。

另外,某种角度上来说,更重要的是作者用一个真实的令人信服的案例告诉我们,数据和样式分离的网页设计方式也可以完成各种最炫的最好的设计。

下面是这个网站的一些css风格:


Css Zen Garden
Css Zen Garden
Css Zen Garden
Css Zen Garden
Css Zen Garden
Css Zen Garden
Css Zen Garden


Css Zen Garden的网址是:http://www.csszengarden.com/
繁体中文版:http://www.csszengarden.com/tr/chinese/

这个网站不仅可以作为一种风格的展示,给我们得到一些启示一些灵感,而且因为这里每个作品都提供了源代码(确实不能不提供),所以也是一个学习的好园地。仔细研究过这些css以后,你肯定能够变成一个网站设计高手。



2004-06-19

Gmail抽奖正式结束

下面是发给获奖者的邀请信的部分内容:

很高兴的通知你,你参加微尘程序员网站的gmail申请抽奖,获胜,得到了一个申请gmail的机会。

本次抽奖报名人数为20人,因为gmail有多给了我四个机会,所以,得奖共有5人。
分别是xp,wuqide,changjg,lyg和wawuta。因为现在gmail放宽了申请份额,所以你可能已经有了gmail邮箱,那么既然幸运属于你,你有权利随意处置这个邀请机会,邀请你的一个朋友或者直接不去理会这个机会,都可以。

另外,谢谢,你一直对tiny的网站的关注,请持续关注http://www.tinydust.net/,谢谢


我目前的gmail邀请机会彻底用尽,如果有,我会按照申请顺序把所有没有获奖的朋友邀请了。但是如果没有这样的机会了,也只好说抱歉了。



2004-06-16

一个小小的里程碑--Tiny写的第一个IE插件

下面是它的截图,因为还没有完全实现,我用红色把名字掩盖了,呵呵,不好意思丢脸啊。


基本实现很简单。第一步是看MSDN上面的例子,然后利用BCB对Win平台开发的完美支持,把这个例子进行了一些删减,移植到了BCB上。

然后,我做了一系列的测试,根据例子和MSDN的说明,基本上了解了插件实现需要的借口还有注册表信息等等。

然后,晚上回到家里,开始尝试在这个代码上加上BCB的Form,很容易就成功了,这样,我就可以利用BCB的RAD特性了,舒服。

^_^

想开发IE插件的朋友,请看我的前面的blog提到的资料:
关于IE插件编程的一些资料
进行这样的开发需要的基础包括,DLL、COM、基本的C++思想和语法和对WinApi的一些基本了解。



2004-06-14

[转]关于“自动编程软件”的一些问答

http://www.pconline.com.cn/news/gjyj/0406/391866.html
这条消息提及了所谓“自动编程软件”。《互联网周刊》记者吴小姐就此问题跟火炬,tiny进行了一些讨论。

因为tiny的观点和火炬的基本类同,感觉火炬在这方面的理解更加的深刻和清楚,所以就不丢脸的把自己的讨论发言贴出来了,下面内容转自火炬的blog
原文链接:http://dev.codelphi.com/virushuo/archive/2004/06/14/14544.aspx
W代表吴小姐,H代表火炬。

W: 这个消息是否可信?

H: 可信。

W: 我想知道他们的技术是不是现在最牛的。

H: 我不认为这是所谓的“自动编程软件”,这个定义本身就是模糊不清的。这类的技术思路倒是并不陌生。从原文的描述中可以看出,所谓“自动编程”,其实只是一种从业务模型中快速生成程序代码的技术。其实目前的开发工具所提供的类似的功能也并不少。他们所提到的这种软件大概是更为完善的接近“用户语言”的方式描述业务模型,这样的技术在中国也有人研究,目前在这个领域作出一定成果的是的是justep(www.justep.com)。

W: JUSTEP跟CARE做的是一样的东西吗?

H: 不一样,不过我认为思路应该比较类似。

W: 是在自动编程软件这个行业里国内最大的?

H: 我不同意所谓“自动编程软件”这个说法。

W: 那么在你看来,CARE那个到底是怎样一种技术?

H: 什么叫做自动?什么叫做编程?用模型来表述业务逻辑,你说这个叫不叫编程?当然也叫。只不过是更高层次的抽象,并非直接写代码而已。这类工具只是提供更接近用户的语言,让用户可以完成程序员的部分工作而已。
所谓编程,就是是把你所需要的事情告诉计算机的过程。这个过程需要用特定的语言,这个就叫做程序设计语言。部分环节可以不需要程序员干预完成,这个说法是 没有问题的。其实对于高级语言,和机器码相比,早就有部分领域由计算机代替了程序员的工作。
最早的程序设计语言是穿孔带。那时候需要人工再纸上打孔。现在呢,使用高级语言设计程序,然后用编译器生成本地机器代码或虚拟机代码。这是后,编译器就代替了“手工编为机器码“这个过程中的所需要的程序员工作。所以说“自动编程软件”这个概念本身就是模糊而荒谬的。只能说,这种系统提供了更高的抽象层次而已。

W: 那么我们关于自动化的设想是完全没有来由的吗?

H: 自动化的设想,只是自动完成某些工作。并非自动完成所有的工作。justep的东西也一样,他们提供了非常高的抽象层次。比如说,可以用用户语言来工作或是进行所谓的“编程”工作。这时候,需要的程序员工作变得非常的少。但,这并非自动编程语言。

W: 比如程序设计这方面,程序员是不可能退场的?

H: 退场的只是某些人。但一些人退场,必定会出现更高层次的人。

W: 你所谓的“抽象”是不是可以理解为智能?你所说的那种“抽象”可以高到什么程度?更高层次的人指什么人?

H: 比如说: 我们编写一个用户验证模块的时候,需要编写安全模型,然后登陆入口,验证的过程,等等。但,在业务建模系统中,可能这个就叫做“用户登录”。那么,只要懂得业务逻辑的用户,不需要知道技术细节,他们把这个“用户登录”拖过来放在这里,这个平台就自动替他们生成一个可运行的用户登录程序。其它的如此类推。
用户是在使用用户语言来工作,而并非程序员语言。当然,这个过程也并非“无需程序员”的 。某些复杂的情形仍然需要程序员参与。只不过,这种需要大大降低了而已。

W: 那么再回到那家美国公司,他们开发的那种软件,能称的上是尖端技术吗?有发展前景吗 ?

H: 我不认为能够称为尖端技术。发展前景当然有。

W: 某些复杂的情形仍然需要程序员参与”这种情形是不是正在变得越来越少?

H: 是的,会越来越少。这就是我说的抽象层次。

W: 请简要的说说编译器。

H: 这里我们先做一个定义:越利于人类理解的语言,则抽象层次越高。越利于计算机理解的语言,则抽象层次越低。简单点说,就是人类越好理解的东西,计算机越难理解。反之亦然。编译器是这两者之间的桥梁。把抽象层次高的语言翻译成抽象层次低的语言。在这个编译器的帮助下,过去很多程序员的人工工作现在由计算机自动完成了。学习程序设计也不用先去学习晦涩的机器语言或是汇编语言了。

W: 那么依你看,将来在编程方面,可以在多大程度上实现“自动化”?

H: 这个很难预料。技术的发展是一日千里的。但是有一些事情很难改变。比如说,系统的结构一定需要有经验的专业人员处理。建筑行业是个很好的例子。建筑业已经发展了几个世纪,非常成熟。但是建筑设计师,结构设计师仍然不是随便什么人都能做的。
这个行业的变化大部分发生在:大型搅拌机替代了大部分混合泥沙的工人,卡车等运输设备替代了大部分搬运工。

W: 也就是说,CARE现在在做的东西其实也就是类似建筑工地上的搅拌机或者卡车?

H: 如果说现在程序员还是搬运工的话,care确实造出了了一辆卡车。

W: 你怎么看这个行业的前景?

H: 我认为,这个行业始终需要提高更高的抽象,因为我们面对的世界非常复杂。用接近机器的语言描述世界很困难,而是用更贴近人类的语言则简单的多。
10年前我们只能开发出字符界面的程序。但现在大家都用上图形界面的系统了。

W: 这个提高有没有个极限?

H: 这个提高我看是没有尽头的。正如人类的科学没有尽头。
也许一些工具能取代现在的人,但是不能取代将来的人。随着抽象程度的提高,生产力的发展,人的能力也在不断的提高和发展。现在的中学生的知识甚至有可能比1000年前的哲学家更加丰富一些。
所谓的“自动编程工具”(其实就是更高抽象层次的工具)能帮助我们完成更复杂的需求。

W: 这个复杂性体现在哪儿?

H: 复杂性首先体现在巨大的信息量。然后体现在行业的丰富和不同。就是说,每个行业所要处理的都是包含巨大信息量的工作。现在的信息化程度还远远不够。而行业还是在不断增加的。
比如,过去,大家觉得字符界面下的工具够用了。但是,其实远远不够。现在软件都有图形界面了,这些软件使用简单,培训容易,也更不容易出错误。这就是更复杂的需求。
其次,没有卡车的时代,只是靠人力搬运,那时候管好人就行了。现在呢,有了卡车,就需要创造交通规则,需要创造修理工,需要开采石油和能源......方便的背后带来了更大的复杂性。

W: 程序员现在的状况怎么样呢?“自动编程软件”的出现是否会导致程序员失业?

H: 对于特指编码人员的“程序员”来说,这个大概是他们听到这个消息之后最为关系的话题。
最开始我们说过,40年前的程序员是用串孔带工作的。他们需要非常了解计算机的结构,所谓程序只是控制一系列电路开关的过程。他们要想好按照什么顺序去处理这些开关得通断,然后用穿孔带来表达,最后让机器执行。这种方法显然对人要求非常高。这是非常难掌握的方法。后来,出现了汇编语言,这是后,开始有比较简单的助记符出现,程序员虽然还要了解机器结构,但是难度已经大大降低了。后来出现了C,出现了面向对象,现在出现了虚拟机等等,这些一点点提高了抽象层次,也降低了对最低编码人员的要求。
但是,更高要求的职业也出现了。最早是没有所谓的 架构设计师的。因为那时候的程序写起来很难,也不可能写出来太大型的程序。自然也不需要架构设计。
所以说,随着抽象程度的提高,一定会有一部分人失业。但一定也会创造更多的职业。比如说刚刚说的系统分析员,架构师,这些就是随着抽象层次提高被创造出来的职业。
继续用刚才那个卡车的例子。比起没有卡车的年代,现在搬运工这个职业需求少了,但是创造了司机这个职业。

W: 可是,高层次的职业毕竟需要的人少。

H: 需要的人少这个问题,我想要从更高的高度看。刚才说了,所面对问题的复杂程度是不断增加的。卡车出了创造了司机,还创造了制造业,交通,道路,桥梁,能源等等许多行业的提高,对于社会整体来说,所需要的劳动力并没有减少。具体到软件这个行业:就算有了相对自动化的工具,但开发这些工具同样需要程序员。完善这些工具同样需要。当工具完善到可以处理更复杂的情况的时候,对使用这些工具的人需求也会大大增加。对于整个IT行业来说,人员的需求量始终是增加的。虽然再开发工具的辅助下,现在1个普通程序员的工作所创造出来的代码质量和数量远远超过30年前的10个做同样工作的科学家的成果。但IT行业总体的需求还是在增加。我们可以看到一个现象,就是IT/软件公司越来越多,越来越大,而不是越来越少或是越来越小。所以,高抽象层次的开发工具带来的并非程序员的失业,而是IT行业的整体上升。

W: 不妨说,那些从工地上淘汰下来的搬运工,必须学开车或者别的什么……

H: 当然,具体到个人,如果不学习,不思考,肯定会落后,会失业。这个并非IT行业专有。任何行业都是如此的。


(完)



2004-06-13

今天测试了一下微软语音识别系统,感觉还可以

  今天下午,我很意外地发现我的机器里面控制面板里面居然有一个微软语音识别系统的配置图标。但是我发现我并不能在任何软件使用这个输入方法,我感到很奇怪,我不记得我安装过这个系统,那么它是哪里来的?后来我才发现了我的电脑上安装了OutLookXP,经过测试这个语音识别原来是OfficeXp系统内置的。
  经过了很多次的语音识别系统学习,目前我感觉这个系统的识别效果,基本上还是令人满意的。尤其是进行比较连贯的语音输入的时候。很多的词,在单独念的时候识别效果很差,但是,你把这些识别效果很差的词放在一个连贯的有意义的长句中的时候,识别效果会大大地提高。而且这个系统可以比较正确地,或者说比较智能的分清楚句子中的“的”和“地”。由于我的机器配置太低,所以识别速度相当慢,严重影响了我的输入速度,但是看来比较低的配置并没有影响识别的准确率。对比几年前使用过的IBM的语音识别系统,我发现微软的语音识别系统单个词语的识别能力可能还不如当年的IBM语音识别系统,但是一旦把词语放在句子中,这个识别系统的准确率很大的提高。在这个问题上面,微软的解决方式比IBM的讨巧得多,而且效果也好一些。(不过最新版的IBM语音识别系统,我没有玩过)
  虽然,现在看来这个系统还不是很完善,但是基本上可以满足我的一些需求了。 出于懒惰的原因,我以后将会非常频繁地使用这个系统。毕竟用键盘打字实在是太累了。

注释:上文大部分内容是用这个系统输入的。这个系统应该是微软中国研究院做的,希望他们能有更好的成果出来,呵呵。



2004-06-10

关于IE插件编程的一些资料

  这两天,打算做一个IE插件,但是资料真不好找,问了一些朋友,他们也不清楚。结果我再csdn的论坛里面搜索到了一些有用的信息,地址收录如下:

工作要没了 各位哥哥姐姐帮忙 做一个网络插件 急!!!

如何用c#制作ie插件?请给个方向或思路!

Office2000下内部COM插件的编程实现

How to add a button to the IE Toolbar

Creating Custom Explorer Bars, Tool Bands, and Desk Bands

以下是6月14日更新的:
vckbase.com的赵湘宁个人专栏

这位老兄的专栏,有大量和IE插件编程有关系的文章,很值得一看,上面提到的那篇MSDN的文章也被他翻译了。



2004-06-09

今天又有了三次邀请别人进入Gmail的机会

真是很有意思!

本blog的读者可以发信给我:tinyfool@gmail.com,或者在这里留言,留下你的email地址,有一个机会是你们中的一个人的。不过只有一个机会是你们的,那两个我已经用掉了。我会随机抽取一个,发送邀请的。

截止时间是6月19日,目前已经收到了一些信件,绝对随机抽取,机会均等,^_^。

各位亲爱的读者:

为了提高你得到gmail的几率,你也可以参加我的朋友火炬组织的同类型抽奖。他的抽奖截止时间是6月18日。
地址如下:http://dev.codelphi.com/virushuo/archive/2004/06/12/14399.aspx



2004-06-08

最近blogger.com是怎么了?有人知道么?

  最近我发现blogger.com非常难登陆,这严重影响了我发布blog,每天都要花很大的力气才能发出我的blog。有人知道是怎么回事儿么?是blogger.com本身最近的负载问题?还是政府开始屏蔽它?还是其他的原因???



一个简单的字符串分割函数

思路来自一竿残照@金棣.net。具体来源参看:今天先发布一个分割字符串的函数

代码如下:

int GetSubString(char * SrcStr,char *FinlStr,int Index=0,char *Spliter=",");
int GetSubString(char * SrcStr,char *FinlStr,int Index,char *Spliter)
{
TStringList *sl=new TStringList();
sl->Text=AnsiReplaceStr(SrcStr,Spliter,"\r\n");
try
{
strcpy(FinlStr,sl->Strings[Index].c_str());
}
catch(...)
{
strcpy(FinlStr,"");
delete sl;
return 0;
}
delete sl;
return 1;
}



2004-06-07

看到师兄陈继东的文章上了《程序员杂志》,祝贺他

  今天下午买了《程序员》杂志的第6期,看到一篇文章《数据库发展史》,作者是陈继东。我一看就乐了,原来是陈师兄。大学的时候和陈师兄一直在一个办公室里面玩电脑,那时候他就专注数据库,很久没见到了,不知道他怎么样了,呵呵。

  下面是陈师兄的网站,研究数据库方面的朋友,可以去看看。

  超越--数据库编程