RSS 2.0 Feed
2005-05 Entries
摘要:请勿向第三方公开你的个人密码Please don't show your password to 3rd party. 一直以来我都持续收到一些加入在线手机社区http://www.sms.ac的邀请,因为我没有手机(要找我的人注意:我醒着的话一般都挂在MSN上),所以总是看过就算。但是今天收到了来自一个不是很熟的朋友的加入这个社区和另外一个社区http://www.bebo.com的邀请,所以上网搜索了一下一些个人BLOG对这两个网站的引用。搜索的结果触目惊心。这些网站显然都要求用户输入邮箱和邮箱的密码,同时使用邮箱中保存的联系人信息来邀请用户的联系人加入。但是,向第三方公开你的密码意味着公开你的全部邮件、联系人的家庭地址、电话等信息。这可能不是你的朋友愿意看到的情形。 密码是私有的,并且从不应该向第三方公开。任何在注册时要求现存密码的服务都是可疑的,特别在询问你的邮箱密码而没有警告用户这样可能造成的危险的情况下。如果某个网站询问你的hotmail账户和密码,那么几乎可以肯定这是个没有和微软合作的网站,因为真正和微软合作的商业网站应该会使用.Net Passport来和微软共享用户注册信息,例如http://www.match.com。 如果你收到了注册某个网站的邀请,首先搜索因特网上对这个网站的引用以确定是否值得向这个网站公开你的个人信息。如果有必要,你可以新建一个电子邮件和密码组合来参与在线社区。 参考http://hownow.brownpau.com/archives/2005/02/spam_from_smsachttp://www.jaffacake.net/BensBlog.nsf/dx/bebo.com---update 顺便说一下,微软发布了Windows XP和Windows 2003的64位版本(Microsoft Windows XP Professional x64 Edition )Windows Server 2003 x64 Editions。...[阅读全文]

posted @ | Feedback (5) | Filed Under [ 安全和管理(Security and Management) 程序人生(Programming on the fly) ]

摘要: 我收到的来自在线地址本服务的邀请现在越来越频繁了。今天我又收到了一封这样的邮件:Add yourself to xxx's address book! Open your invitation This invitation was sent to my email address on behalf of xxxxxx (xxxxxx@hotmail.com) If you do not wish to receive invitations from this Ringo member, click here. To stop receiving invitations from all Ringo members, click here. 在我的上一篇BLOG(Please don't show your password to 3rd party.)中,我提到了一些站点的服务存在风险,因为它们要求用户提供邮箱的密码,而这样可能导致身份冒用——实际上,他们已经用我朋友——其中一些名字我比较陌生,因为我不熟悉一些网友的真实姓名——的名义给我发送了数十封这样的电子邮件,而且看起来我将会持续收到这样的邮件,即使是在我注册之后。尽管一些网站声称我可以通过提供我的电子邮件地址来停止接收他们给我发送的邀请,但是这样的方法显然没有生效——和垃圾邮件中的停止接收链接一样,这仅仅证明这个电子邮箱正在被使用,并且准备好接收更多的垃圾邮件。记得蠕虫病毒么?这种收集邮件地址的方法更加简单,而且可以绕过任何防火墙。我建议收到这样的邮件的人在注册之前看看这篇文章:http://www.anu.edu.au/people/Roger.Clarke/DV/ContactPITs.html ,以了解可能付出的代价。OK,在继续讨论之前,让我们来看看这些网站到底是什么。有多少人在注册之前看过他们的服务条款?要使用他们的服务,你必须同意他们的服务和隐私条款并且提供你的个人信息,例如生日、性别诸如此类。第一眼看上去这些服务条块似乎是完全无害的,除了:http://www.bebo.com/Privacy.jspYou agree that we may use personal information about you to improve our marketing and promotional efforts, to analyze site usage, improve our content and product offerings, and customize the Site's content, layout, and services. These uses improve the Site and better tailor it to meet your......[阅读全文]

posted @ | Feedback (5) | Filed Under [ 安全和管理(Security and Management) 程序人生(Programming on the fly) ]

摘要:程序员在我看来是比较会偷懒的一个群体。为了在开发软件的时候减少人工操作,他们会使用各种各样的软件和语言特性,例如IDE和预处理宏。李建忠在他的BLOG(http://blog.joycode.com/lijianzhong/archive/2005/05/08/50440.aspx)中提到,为了简化声明属性的工作,他的同事自己写了一些小工具来生成需要的代码。在C++托管扩展中,这个工作稍微简单一些,用预处理宏就可以了。 #define   DECLARE_PROPERTY_DOUBLE_PUBLIC(propertyName)\protected:\   double _##propertyName;public:\   __property double get_##propertyName(){ return _##propertyName; }\   __property void set_##propertyName( double new_##propertyName ){ _##propertyName= new_##propertyName; } public __gc __sealed class Vector {public:   // ...   DECLARE_PROPERTY_DOUBLE(x)   DECLARE_PROPERTY_DOUBLE(y)   DECLARE_PROPERTY_DOUBLE(z) }; 当然,如果使用C++/CLI的话,这个工作更加简单: public ref class Vector sealed{ public:    property double x;     property double y;    property double z;}; 我在编程的时候也是个彻底的实用主义者,需要大量重复编写的代码都是尽量用宏实现。例如,我用如下的宏来简化CCmdTarget派生类对IOleCommandTarget类的处理: #define DECLARE_IOLECOMMANDTARGET\    STDMETHOD(QueryStatus)(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [],OLECMDTEXT* pcmdtext);\    STDMETHOD(Exec)(const GUID*,DWORD nCmdID, DWORD nCmdExecOpt,VARIANTARG* pvarargIn, VARIANTARG* pvarargOut); #define IMPLEMENT_IOLECOMMANDTARGET(theClass,localclass)\STDMETHODIMP theClass::X##localclass::Exec(const GUID* pguidCmdGroup,DWORD nCmdID, DWORD nCmdExecOpt,VARIANTARG* pvarargIn, VARIANTARG* pvarargOut)\{\ METHOD_PROLOGUE_EX(theClass, localclass)\ ASSERT_VALID(pThis);\ return pThis->Exec(pguidCmdGroup,nCmdID,nCmdExecOpt,pvarargIn,pvarargOut);\}\STDMETHODIMP theClass::X##localclass::QueryStatus(const GUID* pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[],OLECMDTEXT* pcmdtext)\{\ METHOD_PROLOGUE_EX(theClass, localclass)\ ASSERT_VALID(pThis);\ return pThis->QueryStatus(pguidCmdGroup,cCmds,prgCmds,pcmdtext);\} #define IMPLEMENT_LOCALCLASS_UNKNOWN(theClass,localclass) \STDMETHODIMP_(ULONG) \theClass::X##localclass::AddRef() \{ \ METHOD_PROLOGUE_EX(theClass, localclass) \ ASSERT_VALID(pThis); \ return pThis->ExternalAddRef(); \} \\STDMETHODIMP_(ULONG) \theClass::X##localclass::Release() \{ \ METHOD_PROLOGUE_EX(theClass, localclass) \ ASSERT_VALID(pThis); \ return pThis->ExternalRelease(); \} \STDMETHODIMP theClass::X##localclass::QueryInterface( \REFIID iid, LPVOID* ppvObj) \{ \ METHOD_PROLOGUE_EX(theClass, localclass) \ ASSERT_VALID(pThis); \ return pThis->ExternalQueryInterface(&iid, ppvObj); \}  这样要在CCmdTarget派生类中实现IOleCommandTarget接口的话,只需要编写实现函数就行了: //声明class CScreenCaptureGDI : public CScreenCaptureBase{   DECLARE_OLECOMMANDTARGET……   DECLARE_INTERFACE_MAP()   BEGIN_INTERFACE_PART(OleCommandTarget, IOleCommandTarget)    DECLARE_OLECOMMANDTARGET   ......[阅读全文]

posted @ | Feedback (7) | Filed Under [ 随笔 编译(CodeGen) 文档(Documentation) 语言(Language) C++/CLI/Managed C++ Extension ]