“黄沙中,飞舞着我们的先王,他们在空中俯视着子民们对蓝色的向往。” 火之章 霜之章 [最新更新:9月15日]

你在这里看到的是一位.NET程序员的执着及其信仰的效率世界观。我们行走在消逝中,但我们都有希望,都有传承。

解析带有命名空间的XML ,2008-10-03,条评论

今天要实现一个Feed解析模块,遇到一些问题,把这些开发过程遇到的解决方案记录下来。

不管是ATOM还是RSS,它们的节点普遍带有命名空间,所以就不能够像一般的XML那样解析了,要不然会产生找不到节点对象的错误。下面以ATOM作为例子。

通过XmlNamespaceManager类来进行命名空间的操作。例如:

XmlDocument m_dom = new XmlDocument();

m_dom.Load("FEED地址");

m_manager = new XmlNamespaceManagerm_dom.NameTable);

m_manager.AddNamespace(“kvspas”,http://www.w3.org/2005/Atom);

以后用Xpath的时候,就要使用:XmlNode node = m_dom.SelectSingleNode("//kvspas:title", m_manager);

如果文档中存在带有冒号的节点,你又要选择它的话,那么这么解决:m_manager.AddNamespace("openSearch", http://a9.com/-/spec/opensearch/1.1/);

需要注意一点:括号中的标签不能够乱写,要严格遵守文档中的定义,如果不是在根节点定义有,就是在子节点定义有,总之,定义方案肯定在这两个地方之一。否则,就不是合格的XML文档了。

32

选择的时候:m_dom.SelectSingleNode("//openSearch:totalResults", m_manager);

参考文章:
IBM开发者社区:使用 XPath 定位 XML 文档中特定的部分
MSDN:XmlNode..::.SelectSingleNode 方法 (String, XmlNamespaceManager)
MSDN:使用 XPath 导航选择节点

iffeed开始运作 ,2008-10-27,条评论

iffeed 是一款读取 Rss 和 Atom 的免费客户端软件,运行于 net 2.0平台,支持目前互联网上所有的Feed。可以通过网站地址:www.iffeed.cn下载。通过它,你可以实时关注多个朋友的空间、博客的更新信息。

目前可以保证支持的feed:
QQ空间、新浪博客、搜狐博客、网易博客、博客园、Msn空间、百度空间、博客堂、中国博客网
博客堂、CSDN博客、博客网、博客大巴(Blogbus)、Blogger(Blogspot)、Wordpress
Z-Blog、WordPress、feedsky、feedburner
只要是标准feed,肯定可以完整支持。

近期.Net开发收获经验 ,2008-12-23,条评论

这个月MCTS在向我招手,以及重做从前的那些宝贵资源,总结了一些近期的经验。这还要感谢那块坏硬盘。

这些都是一些细节上的强化认识,从前也不是不知道,知识觉得可有可无,现在终于觉悟了。
  1. 强化了接口和抽象类的认识,更多的时候还是用接口来构造多态的声明比较好。即使是抽象类,也应该基于接口。
  2. SQLCE的语法有点怪异,使用前应该衡量利弊。
  3. WEB.CONFIG在该使用的时候还是要使用的。
  4. ASCX的用处很大,可以构造清晰的大型架构。
  5. ASCX中使用Response.Write是不对的(会把内容输出到HTML页面的最上端),应该重写Render方法,通过HtmlTextWriter来输出内容。
  6. 尽量避免在代码中硬编码常量。
  7. 在ADO.NET中合理的使用using可以省略很多步骤(开发Kvspas.Data心得,减少了DataReader的构造代码行数)。
  8. DataReader一定要关闭。
  9. 通过继承和实现IDisponsable接口,可以在自己的组件中定义可显式声明回收资源的过程。

使用GoogleAppsEngine-Cache来提升应用程序性能 ,2008-11-21,条评论

在ASP和ASP.NET中,我们可以把一些常用的,但是并不经常修改的数据保存在Application或者静态变量中,这样就减少了数据库查询次数,从而提升整体性能。但是在GoogleAppsEngine中,目前还找不到Application这种东西,而静态变量也并不具备全局静态缓存的能力。但是有一个相对的东西,就是memcache。

SQL SERVER Compact 部署时的一些注意事项记录 ,2008-10-24,条评论

SQL SERVER Compact是个好东西,作为一个桌面式数据库,它取代了MSDE,并且在性能上和稳定性上接近SQL SERVER,和SQL SERVER能够实现同步数据交换。在很多应用上完全可以取代ACCESS。为这个数据库作部署的时候,有两种办法,一是安装服务包,二是采用ClickOnce实现“绿色文件安装”。前者显然不太现实,以为一提到下载和安装,立即就少了50%的客户,现实就是这样残酷,所以这里只说后者。

回忆孔先生 ,2008-12-25,条评论

听人家背地里谈论,孔乙己原来也读过书,还是NVP和NCSE,但终于没有进学,又不会营生;于是愈过愈穷,弄到将要讨饭了。幸而写得一手漂亮的代码,运 行起来很快很强大,便接一些私活,换一碗饭吃。可惜他又有一样坏脾气,便是摆着看过几本书的架子愤世嫉俗。坐不到几天,便在同事的代码里面挑刺,说这段不 符合什么规矩原则,那段没有实现接口……搞得团队很紧张,经常延误工时。如是几次,叫他做事的人也没有了。孔乙己没有法,便免不了偶然做些入侵银行主机的 事。

同理  ----- 这篇文章还是发表在博客园上
和.net相关的文章我一般都是发在那边

glutDisplayFunc函数在c++中的一些使用问题 ,2008-11-02,条评论

glutDisplayFunc是用来注册回调函数的,在常见的教程中,都是以C代码来作为使用指南,但是在现实的开发中经常需要在C++环境中工作,这就带来了一个问题:在class中使用传统的办法直接输入一个函数名进去作为参数是不行的,会有错误提示,提示什么我忘了,反正就是行不通。

我上网找了下解决办法,在一个国外站点上查到在class中必须这么做:

class opengl
{

  public:
    static void run();//必须声明为静态函数
    void func()
    {
        glutDisplayFunc(run);//对象成员函数中使用静态成员函数
    }
}

根据客户端操作系统类型和CLR信息来判断.netframework的支持情况 ,2008-11-06,条评论

我们常在给客户下载某个程序的时候,需要首先获知客户是否已经安装有CLR,现在最普遍的是判断是否安装有CLR2.0,下面是我在做某个软件下载的时候用到的一段算法,按照现实情况,支持到2011年没有问题。下面发出来,大家共勉。

最低要求是WINDOWS5.0,也就是WINDOWS2000,9X系列可以无视掉。最高判断出WINDOWS7。

GoogleAppsEngine数据存储中的中文编码支持问题 ,2008-11-15,条评论

因为python并不会像JAVA和.NET那样原生支持多国语言编码,它的内部仅仅是ascII码,所以在开发的时候给我们这些以多字节编码文字为母语的程序员带来了些麻烦。解决这个问题可谓是披星戴月废寝忘食,本来这个东西就没有多少支持文档,废话不多说,下面是总结了的一些办法:

GoogleAppsEngine中GQL里出现中文字符串时的解决方案 ,2008-11-18,条评论

在上一篇文章《GoogleAppsEngine数据存储中的中文编码支持问题》中提到过储存数据的时候的一下编码问题,这里有必要再补充一下,搜索数据的时候遇到的编码问题更多。而且错误隐藏得更深。

Google Apps Engine 支持HTTPS连接了。 ,2008-10-18,条评论

今天早上打开电脑,事情做得快完了,无聊时想去AppsEngine论坛看看有没有什么新消息,正巧碰上谷歌工程师发布说:支持HTTPS连接了。仅限于*.appspot.com,自绑定域名的目前还不能支持(这是一个小遗憾)。以后可以构建更加安全的数据连接了。在这个基础之上,构建基于客户端软件的WEB服务都可以无需担心数据安全问题了。

需要注意一点,SDK开发工具包必需升级到1.1.5,否则不能识别这个新添加的secure标签,就会提示“google apps engine unexpected attribute 'secure'”
开发工具包下载地址

具体的原文信息可以看这里:HTTPS Support for appspot.com

google apps engine(GAE)对HTTPS和SSL的支持有望解决一些中心企业对敏感信息安全的需求。例如搭建WEB服务和身份认证。

cg运行时和opengl的一些编译问题 ,2008-11-01,条评论

昨天必须解决cg和opengl的客户端系统兼容性问题,终于搞到今天凌晨时解决了。

和那篇 《SQL SERVER Compact 部署时的一些注意事项记录》的原理一样,通过ClickOnece技术,我们需要在*.exe程序所在目录部署一些Dll。分别有两种模式,OPENGL和D3D:

Google Apps Engine 修复传送错误 ,2008-10-11,条评论

使用appcfg的时候,有时候因为网络原因,或者传送过程中不小心关掉程序,极有可能你就再也不能往这个app传送东西了,老是说要你 rollback ,可是appcfg里面又没有这个参数。这个问题把人困扰死了,而且目前又很难找到相关的帮助信息。 今天硬着头皮一定要解决这个问题,终于花了一个通宵知道怎么做了。命令如下: appcfg.py -verbose --no_cookies --email=abc@gmail.com --passin rollback dirdir 红字部分不要修改,绿字改成你的Google帐号,蓝字改成你要指定的本地文件夹路径。 然后就可以重新使用了。还真是麻烦,为什么它自己就不会修复,偏偏要用户去指定呢,求解。
另外要注意一个因素:某些地方的网络运营商屏蔽了googleapps的地址,这种情况下是不能直接上传的,推荐把DNS设置到OPEN DNS就可以了。如果OPEN DNS也被屏蔽了,那么就另外找一个能够用的DNS。

Google Apps Engine 内置数据类型总结 ,2008-10-16,条评论

GAE内置的数据库不同于我们常用的SQL家族,它直接存储对象,可以说是属于面向对象级的。

目前还缺少丰富的文档资源,为此我总结一些数据类型,供各位参考:

iffeed更新至1.01,b ,2008-12-20,条评论

iffeed更新至1.01,b,解决了64位Vista和64位Windows7、64位Windows2008的兼容性问题。
解决了旧的推荐内容没有得到及时更新的问题。

iffeed是一款免费的feed读取客户端。运行于.NetFramework2.0平台。
从这里可以进入官方网站

今天终于体会到接口的好处了。 ,2008-09-05,条评论

今天在遗留系统中发现一个比较严重的BUG,需要修改的东西涉及到两个类,总共超过200行左右的代码,别小看才有200行,这两个类中又包含有私有类,算法非常复杂,但是这次我的修改很轻松。几乎不费什么力气。10分钟就完成了。并且一次性通过。

因为在原先的系统中,客户端程序是通过抽象工厂模式调用接口来间接使用这两个类的。之前,我虽然从来没有体会过设计模式的好处,但是自从学习了设计模式后,还是老实地在复杂算法的地方使用上了。这就又说到很久很久以前,曾经有一个系统混乱得连我自己都看不懂(是我设计的,也能够良好运行,但是最后还是放弃了),丧失了面向对象的设计初衷:代码复用。

今天的甜头,体会到了这么一个告诫:前人的经验一定要好好参照。即使是在不明原因的情况下,就是死搬都要搬过来,就如同独孤求败的五把剑,从无到有,再从有到无,要是一开始就想拿木剑,或者不想拿剑,那只有死路一条,做事还是少玩些个性比较好,踏实第一。

正如古人有云:
看山是山,看水是水;
看山不是山,看水不是水;
看山还是山,看水还是水。

visualc++6中“main.c line 494”问题的解决方案 ,2008-12-12,条评论

今天有个荆手的问题赶工,64位系统下面完全不认win32的dll,搞了半天,居然发现问题是出在visual c++2008的编译器问题 ,换2005也一样,再换到VC6就行了,但是在VC6的release编译中又遇到另一个问题

引用标准C函数库时发生“无效的库格式 已忽略库”的解决方案 ,2008-11-05,条评论

这个问题发生得非常蹊跷,从前测试好的两个范例文件(当时记录得明明白白,绝对没有错误),简单得不能再简单的例子,测试两个int相加等于多少,封装成dll,然后在别的程序中引用。今天终于要用到这种解决方案了,于是照猫画虎,第一遍编译运行,成功。第二遍编译运行失败,提示“无效的库格式 已忽略库”,其中唯一的修改只是把函数名从test修改成render,居然有这种低级错误?那就不改了,再把函数名换回去吧。我日!换回去也不行了。

给.Net程序员和WEB程序员的一些工作行为建议。 ,2008-12-06,条评论

这篇文章我发布在博客园上面,感兴趣的朋友可以通过这个链接来阅读
  • kvspas