这下子,我的rss应该没有什么大问题了。明天把解决方法写出来。
2004-02-29
目前rss文件在IE无法查看的问题已经得到解决
发表者tiny @ 时间 2/29/2004 11:43:00 下午 | 0 条评论
我自己的Rss终于做好了,测试中
Tinyfool的开发日记
http://www.tinydust.net/diaryrss.asp
Tinyfool的随想录
http://www.tinydust.net/sxlrss.asp
目前这两个文件在IE上面查看都有问题,这个问题我正在考虑中...
发表者tiny @ 时间 2/29/2004 05:43:00 下午 | 0 条评论
我的xml学习历程
记不清楚什么时候开始Xml就是一个非常火热的概念了。我第一看到关于Xml的一些介绍,我第一个念头就是这个技术应该会在Web技术里面占有非常重要的地位,我也意识到我心目中打算做的网站所需要解决的很多技术问题,都可以用Xml那样实现。但是,后来很久很久,我的精力都没有办法放在Web上面,我慢慢的看到Xml在各个方面开始起作用,但是一直也没有开始学习。
前天一个朋友,让我帮她看看她的作业,她在英国学习计算机科学,那个作业就是一个Xslt的应用。我看了看,对Xslt的概念越来越感兴趣,于是那天晚上,我去W3c的Xslt标准那里进行学习,受益非浅,很顺利的就把她的作业搞定的。他们的作业很不错,几乎所有的Xslt元素都需要使用,才能做出来。
今天,我开始尝试把Xslt运用在我自己的网站里面,现在已经进行了很多的实验,基本上实验结果我基本上很满意。之前我想过的Atom.xml和rss之间的转换,我也有了思路,一会儿就进行代码的编写。
后面的日子,如果有时间,我会考虑,把我的学习笔记写出来,或者把W3C的Xslt标准翻译出来。
发表者tiny @ 时间 2/29/2004 03:12:00 下午 | 0 条评论
2004-02-27
刚刚得到的MSN Messenger Protocol
发表者tiny @ 时间 2/27/2004 12:56:00 下午 | 0 条评论
2004-02-23
正式开始求职,哪位朋友有合适的职位信息,请联系我,谢谢
发表者tiny @ 时间 2/23/2004 12:34:00 下午 | 0 条评论
2004-02-22
从弹吉他说起――程序员成长最危险的时刻[转载]
从一个新朋友的Blog转来:我的.NET生活
原文链接:从弹吉他说起――程序员成长最危险的时刻
从弹吉他说起――程序员成长最危险的时刻
从高中开始算到今日,我弹吉他已经有八年了。这期间经历的乐队,参加的演出,写的歌曲,真的都已经记不清楚。我只知道当自己选择了软件开发之后,花在弹吉他上的时间越来越少,几年时间内一直在吃过去的老底,再也没认真、正式地练过琴,甚至有段时间都想把这种爱好放弃了。我想自己可能遇到一个瓶颈了吧。
前天晚上我在MSN上和开心聊天时说,自己感到不知该做点什么了,技术上不知该如何突破,找不到下一个应该学习的方向,甚至找不到开发的热情。我想自己可能遇到一个瓶颈了吧。
记得去年在CSDN上看到一篇题为《程序员成长最危险的时刻》的帖子,里面有一段给我留下的印象特别深,我把它引用在下面:
其实程序员成长最危险的时刻不是在你什么都不懂的时候,而是在你懂了一些的时候。开始的时候,你觉得什么都不懂,于是你天天看书,通宵编程。后来你懂了c了,算法数据结构操作系统在学校也学了,用VC 写程序时你边看MSDN边用MFC,觉得感觉还不错;你用Delphi甚至做了一个个像模像样数据库的项目了。至于COM,你懂了一点点,说起来头头是到,虽然没用过。标准C++嘛,你在大学学过基本的C++,工作时用VC,什么继承,虚函数,const,引用,模板你也都用过了。你也听说过设计模式,用过最简单的单件模式什么的,虽然还有很多你不懂的。有的时候你觉得操作系统很有意思,你还写过些多线程的控制系统的东西。可是现在你反倒觉得你什么都不会了,看这别人用VC 写的大系统,你觉得很写的很好,可是你不知道怎样达到那样的水平。你觉得你有很多的东西都不懂,可是你不知道怎么学得更好,有的时候你对编程序都快没激情了,于是你也跟我一样到了程序员成长最危险的时刻。有些朋友觉得已经可以混到饭吃了,就不再努力,这样就危险了!
在CSDN论坛的汪洋大海中,这是一篇再普通不过的帖子了,然而却是这篇普通的帖子给了我最大的冲击,里面的每句话都仿佛在描述一个过去的我。比如说弹吉他,我曾在大学里以两年的时间和无数次翘课为代价苦练了小林克己的那套教材,在演出时能轻松弹一些诸如Hotel California的曲子,然而后来我却没有继续练下去,多年来站在原来的水平无法前进,甚至技艺渐趋倒退;至于软件开发的情形也大体相似。当我对.NET一无所知的时候拼命地看书写代码,到CSDN上去问问题找答案,后来考下了MCAD/MCSD.NET,又做了几个或大或小的项目,自己感觉对.NET (特别是ASP.NET/XML/C#)掌握得已经很不错了,于是就开始松懈起来,开始止步不前。到了后来,我甚至不愿去CSDN问问题,有了疑问后便去查MS KB,查不到就去Google,再找不到就捡一个自己会的解决方案代替了。如此一来,技术长进也就真的遥不可及了。
OK,从现在开始以这篇文章为警示,放弃一切负担,重拾热情,像初学者一样认认真真地去学。如果您在自己的身上也发现了同样的问题,那么就让我们共勉吧。:)
发表者tiny @ 时间 2/22/2004 08:30:00 下午 | 0 条评论
2004-02-17
关于在BCB里面动态调用TXMLDocument
由于做EasyNews我开始使用TXMLDocument,但是很遗憾的是,出现了一些莫名其妙的错误。基本代码如下:
//这里没有写错,TXMLDocument的构建函数就是这么定义的
//很奇怪的做法,一般来说T打头的都是VCL类,需要一个宿主
//但是这个类不需要宿主
TXMLDocument* MyXml=new TXMLDocument("");
try
{
MyXml->LoadFromFile("test.xml");
}
catch(...)
{
MyXml->DocumentElement=MyXml->CreateElement(
"Test","http://www.tinydust.net/easynews");
}
具体错误是,只要我的test.xml文件不存在或者不是合法的xml文件的时候,MyXml->CreateElement的运行也是错误的。这个错误很奇怪,我百思不得其解,开始认为可能是LoadFromFile失败以后,对MyXml对象的状态做了改变,比如关闭解析等等,但是却找不到判断这个状态和修改这个状态的函数。
我用Google搜索了一下,网上的代码都没有捕捉这个错误,没话说,现在的例程都是这样的,只要功能能实现,错误处理等等都被省略了,这样做出来的程序能可靠么?
最后,我在Borland的新闻组里面的Bcb->Xml部分找到了答案,Remy Lebeau (TeamB)说,不应该建立TXMLDocument的动态实例,而应该使用IXMLDocument接口,NewXMLDocument函数可以返回一个IXMLDocument接口实例。另外,不要手工释放IXMLDocument接口的实例,因为IXMLDocument接口的实例存会自动释放。
所以,我原来的程序被改成了:
_di_IXMLDocument MyXML;
try
{
MyXML=LoadXMLDocument("test.xml");
}
catch(...)
{
MyXML=NewXMLDocument();
MyXML->DocumentElement=MyXML->CreateElement(
"Test","http://www.tinydust.net/easynews");
}
新的代码很稳定,没有出现任何问题,问题很容易就解决了,不过在找到这个文章前,我几乎浪费了一天去寻找原因,真是郁闷。谢谢Remy Lebeau (TeamB),不过话说回来,为什么BCB的文档里面不告诉我们呢,郁闷。
寻找资料的副产品:
Borland的历史
Borland人物
关于TeamB
发表者tiny @ 时间 2/17/2004 01:53:00 上午 | 2 条评论
2004-02-16
正在开发的东西-EasyNews
问题的起源是Yayv说的,打算做一个Rss Reader,我当时觉得这个东西用处不大,而且到处都可以找到,所以就没有想做。
后来,blogger推出了Atom,但是目前更加流行的是Rss,所以我打算做一个Atom和Rss的转换器。可是,因为时间的原因半个月以来一直也没有开始写。这次我打算Rss Reader和Atom/Rss转换器一起写。
昨天,我给Rss Reader定的名字是EasyNews,用BCB开发,XML组件采用TXMLDocument。Atom/Rss转换器打算用Asp写,计划在EasyNews完成以后开始写。
今天开始正式开发,可惜在使用TXMLDocument的时候发现Borland给的文档完全不够,现在一个很小的问题,我已经花了很多时间在寻找资料,;(。
下面是EasyNews的开发画面,界面风格是模仿Outlook Express的。

发表者tiny @ 时间 2/16/2004 07:10:00 下午 | 0 条评论
2004-02-15
凌晨和火炬瞎聊有感
和火炬聊到某人说自己会相面,我说“把相面的本领用算法描述出来,然后配合大型计算机,做安全保卫简直无敌啊!看到某人可能是杀手,就进行跟踪,多爽,那么刺杀事件肯定能少很多”
今天早晨,我突然想起来,霹雳天使二好像就是类似的故事,说是某公司掌握所有的通讯卫星,然后配合一个语音识别软件,就可以知道某一个人所在的位置。
抛去隐私保护等等,纯粹谈技术,真是令人神往。
对了想起来MOP里面的一个贴子,应该是转贴的。说是老美的情报部门一直都监听中国的全部手机,但是全部都监听数据保存和检索几乎是不可能完成的任务,所以利用巨型计算机,进行敏感词语过滤,听到敏感词语以后才进行录音,并送至数据库保存。于是,贴子的作者为了保证我们国家的军事计划不被美国人截获,建议每个人打电话的时候,把“你好、喂、再见”等等,都改成“准备发射、浮出水面、布什、本拉登”等等可能会被监视的词语,这样呢,美国人的情报库里面就有无数的垃圾信息,给他们的筛选工作带来巨大的麻烦,而且可以从另一个侧面让自己的声音存入历史。
这个贴子里面的故事估计只是杜撰,我现在不太相信,美国的技术能达到这个水平。需要的海量存储、计算速度等等,都是太容易得到的。但是,众所周知,美国的FBI有一个叫做“食肉动物”的系统,这个系统安装在所有的美国ISP上面,随时随地的监视来往的Email和其他的信息,对敏感的信息进行保存和筛选。
所以贴子里面的故事,在不久的将来,就将是我们面对的事实了,真是不知道该说什么好。
相应的,大家应该都知道,目前国内的电信部门也对Email和其他的信息内容进行筛选,只是目前刚刚起步。这也许能够叫做国家机器强奸所有人民的通信权。但是这不是中国独有的现象,老美才是这么做的鼻祖。
发表者tiny @ 时间 2/15/2004 09:25:00 上午 | 0 条评论
刚刚看到的一个好文章
发表者tiny @ 时间 2/15/2004 03:33:00 上午 | 0 条评论
2004-02-14
关于BCB的类命名规则
我的一个朋友看过我的blog 学习C++虚函数的习作 以后,说:“你真有意思,在BCB里面用VC的风格编程。”
我说:“有么?”我以为他说的是缩进风格。
他说:“BCB的类名都是用T打头的。你却用C打头,这不是明显的VC风格么?”
“哦,也不是的。我记得只有基于VCL的类才需要用T打头,一般的类还是应该用C打头的。或者象AnsiString这样根本没有前缀。因为VCL的类只能动态创建,所以在命名风格上有所区别,可以方便使用。”
他说:“那我就不知道了。”
但是,我一直想不起来这个规范是从哪里看到的。今天我看《C++ Builder 5程序设计大全》的时候,我又看到了这个部分,所以记录下来。
发表者tiny @ 时间 2/14/2004 09:24:00 上午 | 0 条评论
2004-02-09
找到一篇关于图片旋转的文章
发表者tiny @ 时间 2/09/2004 01:51:00 上午 | 0 条评论
2004-02-08
Yayv的推荐,把任务栏放在左边或者右边
今天和Yayv聊天的时候,他说现在把任务栏放在右边,而且还说很方便。我说那样肯定不好,因为我从来都是习惯把任务栏按默认方式放在下面。然后到了Yayv的办公室,看了看他的演示,还不错。
回来以后,我把我的任务栏放在了左边,挺不错的。暂时这么试验一下,看看是不是真的好用。
这样的好处是任务切换很方便,可以看到更多的任务的标题;坏处是大家的习惯好像都不是这样的。
截图如下:

发表者tiny @ 时间 2/08/2004 10:41:00 下午 | 0 条评论
2004-02-06
一些值得看的书和站点
《设计模式》 这本书的电子版我有,正在仔细的研读。读书计划包括实现书中的那个例子图文编辑器。
《Inside VCL(深入核心――VCL架构剖析) 》 据说本书很好,偶的一个朋友huoju也说看《MFC深入浅出》和这本书都是了解FrameWork的最好途径,而且还答应给我弄一本,现在这里大感谢了。
下面部分引用自Password的blog,我的另一个朋友
极限编程论坛(CN)介绍极限编程的应用,当然其概念是少不了的。
台湾的“点空间”关于23个GoF设计模式的例子只有C和smallTalk,但这里提供了delphi的实现,值得一看
透明空间感谢tiny的推荐,很不错。
这些站点上有许多友情链接,都是很不错的资源。对于像我一样,想花大力气提高一下自己的设计功底倒是可以一看。
发表者tiny @ 时间 2/06/2004 09:31:00 上午 | 0 条评论
2004-02-05
今天又拉了一个兄弟进入bloger的行列
发表者tiny @ 时间 2/05/2004 09:47:00 下午 | 0 条评论
2004-02-04
学习C++虚函数的习作
程序是用BCB写的,用一个Image的Canvas来作为图文编辑器的基础。
代码和EXE下载
edittor.zip
截图如下:

程序的核心是下面的两个文章,里面包括了5个类CEditor,CSuperEditor,CUnit,CCharUnit,CPicUnit。
editor.h
#ifndef _EDITOR_H
#define _EDITOR_H
#include
#include
#include
using namespace std;
class CUnit
{
public:
virtual GetWidth()=0;
virtual GetHeight()=0;
virtual void Draw(int x,int y)=0;
TCanvas* Canvas;
};
class CEditor
{
public:
virtual void Paint()=0;
};
class CSuperEditor:CEditor
{
public:
virtual void Paint();
void AddUnit(CUnit* Unit);
TCanvas* Canvas;
private:
vectorUnits;
};
class CCharUnit:CUnit
{
public:
virtual GetWidth();
virtual GetHeight();
virtual void Draw(int x,int y);
void SetWord(unsigned char word);
unsigned char GetWord();
CCharUnit()
{
Canvas=NULL;
}
private:
unsigned char Word;
};
class CPicUnit:CUnit
{
public:
virtual GetWidth();
virtual GetHeight();
virtual void Draw(int x,int y);
int GetWord();
TImageList *ImageList;
CPicUnit()
{
ImageList=NULL;
Canvas=NULL;
}
void SetIndex(int index);
private:
int Index;
};
#endif
editor.cpp
#include "Editor.h"
void CSuperEditor::Paint()
{
int w=0;
if(Canvas==NULL)return;
Canvas->Pen->Color=clBlue;
vector::iterator i=Units.begin();
Canvas->TextOutA(0,0,"");
while(i!=Units.end())
{
(*i)->Draw(w,0);
w+=(*i)->GetWidth();
i++;
}
}
void CSuperEditor::AddUnit(CUnit* Unit)
{
Units.push_back(Unit);
Unit->Canvas=Canvas;
}
CCharUnit::GetWidth()
{
return 8;
}
CCharUnit::GetHeight()
{
return 8;
}
void CCharUnit:: SetWord(unsigned char word)
{
Word=word;
}
void CCharUnit::Draw(int x,int y)
{
if(Canvas==NULL)return;
char s[]=" ";
s[0]=Word;
Canvas->TextOutA(x,y,s);
}
CPicUnit::GetWidth()
{
return 16;
}
CPicUnit::GetHeight()
{
return 16;
}
void CPicUnit::Draw(int x,int y)
{
if(Canvas==NULL)return;
if(ImageList==NULL)return;
ImageList->Draw(Canvas,x,y,Index,true);
}
void CPicUnit::SetIndex(int index)
{
Index=index;
}
发表者tiny @ 时间 2/04/2004 09:36:00 下午 | 0 条评论
2004-02-02
Symbian OS开发日记(Object lifetimes and cleanup)
注释:因为C++ and machine architecture、Object orientation
basics这两个章节主要讲的是C++的编程方法,所以在我的文档里面,这些部分被CANCEL了。
Overview
不管是在堆栈还是堆,对象都有自己的生命期,具体如下:
1、给对象分配内存[堆栈或者堆]
2、初始化:也就是给对象所在的内存赋值
3、使用对象
4、清除:释放对象使用的各种资源
5、释放对象所占的内存[从堆栈或者堆]
对象的生存期是一个基础概念。在某些操作系统,它是可以忽略的,因为程序中止的时候,堆栈和堆都会被销毁。但是在Symbian平台,程序往往需要能运行数个月。这就是为什么对象在生命期结束的时候就必须马上清除所有内存是那么重要的原因,不管它们分配在堆栈还是堆,不管它们生命期的结束是因为正常处理还是因为错误。
Lifetimes in C
从略
Lifetimes in C++
从略
Lifetimes in the Symbian platform
Symbian的堆栈上的对象的生命期和标准C++的很象。但是堆上面的对象的生命期的控制和标准C++非常不同,参看下面的代码:
void FooL()
{
CS* s=new (Eleave) CS; // allocate and check 分配并且检查
CleanupStack::PushL(s); // push, just in case 入栈
s->ConstructL(p1,p2); // finish constructing - might leave 完成构建 可以会产生leave
s->UseL(p3,p4); // use - might leave 使用 可能会产生leave
CleanupStack::PopAndDestroy(); //
destruct, de-allocate 析构,清除内存
}
这个代码展示了四件重要的事儿:
- 所有的基于堆的类的名字都必须用C开头:实际上它们都继承自一个唯一的基类CBase,这基类提供了简化清除过程的功能。
- “清除堆栈”用来保存对象的引用:如果由于内存耗尽或者其他错误造成leave发生,清除堆栈里面的对象会弹出并且摧毁。在这种情况下,压入在清除堆栈的CBase*对象,可以通过调用它们的C++析构器来摧毁。CBase类有一个虚拟的析构器(CBase::~CBase)是这个行为成为可能。
- 任何可能产生leave的函数的名字都必须用L结尾。当你看到一个函数可能leave的话,你必须问问如果leave会怎么样,如果不的话又会发生什么。操作系统提供了所有程序的底层结构来支持对象在发生leave的时候释放空间,而不需要给程序员更多负担。
- new(ELeave)是new操作符的重载,在分配内存的时候将会leave。它不会返回null指针。
两件其他的事情值得注意:
- 由于清除堆栈本身的每个堆栈帧也是需要内存分配的,所以压栈(push)也是可能会leave的。PushL()这个函数名也说明了这点。清除堆栈保证在调用
CleanupStack::PushL()之前有剩余的空间,所以对象引用总是能成功的保存在清除堆栈里。如果在分配下一个堆栈帧发生leave,对象会弹出而且摧毁。 - C++构建器一定不能产生leave。对于那些构建过程需要资源分配的,或者任何操作可能失败的堆想来说,必须把构建器的代码分成,不会产生leave的构建器和另外可能会产生leave的初始化函数,通常这个初始化函数叫做
ConstructL()。
清除堆栈、CBase、两部分构建器都属于操作系统的核心。清除堆栈编程有很少的规则,学习它们是相对容易的。参看“清除堆栈基础”来得到更多的信息。
发表者tiny @ 时间 2/02/2004 10:50:00 下午 | 0 条评论
2004-02-01
今天翻译了一点gba的文档
因为一些词语的细节我还在考虑,所以暂时没有更新网站上面的文档。
发表者tiny @ 时间 2/01/2004 10:08:00 下午 | 0 条评论
今天发现blogger.com开始支持atom了
大家都知道blogger.com有免费服务和收费服务(blogger pro),我使用的就是blogger.com的免费服务。而免费的blogger.com最被诟病的就是不提供rss。
但是刚才在我修改我的blog的设定的时候,我突然发现多了一项site feed,我还以为是blogger.com开始支持rss,后来才发现是开始支持atom。atom这个东西之前隐约听说过,好像是和rss差不多的东西,于是我就把这个atom.xml往FeedDemon里面加,但是失败了,加了以后,根本看不到我的blog做的更新。在blogger.com的文档里我确实没有发现说FeedDemon支持atom。
那么这个东西怎么用呢?我在google里面搜索看到了很多文章,才发现atom是一个2003年12月12日才正式出台的标准,那么支持它的新闻阅读器当然少了。blogger.com的文档里面提到了4个支持atom的新闻阅读器,分别是NewsMonster, NewzCrawler, NewsGator,BottomFeeder。我试用了一下newzcrawler的最新版本,果然可以使用atom,但是我的朋友virushuo说这个软件的中文支持不好。
关于atom的信息,可以参考Bloging NCCU。
我目前的考虑是做一个atom和rss相互转换的工具,这样我的blog也可以提供rss功能了。
发表者tiny @ 时间 2/01/2004 03:06:00 上午 | 1 条评论
微尘程序员网站正式恢复正常
硬盘已经安装好了,以后一切都会正常的。
发表者tiny @ 时间 2/01/2004 12:55:00 上午 | 0 条评论

