I don’t like VS2010’s help system.

大过年的说坏话虽然不厚道, 但是实在太不爽了。

  • It hosts in a very unstable application—Internet Explorer. The Dexplorer used by previous VS versions also uses IE, but host a Internet Explorer instance and host in Internet Explorer is definitely different!
  • The navigation style in the help doc is kind like the script-free style MSDN online, yes, it is light-weight but the treeview in the left is gone.
  • The search function is extremely weak, I cannot narrow down the search catagory, If you input a “textbox” in search box, You will find serveral TextBox Constructor listed and you have no idea it is Microsoft.Office.Tools.Excel.Controls.TextBox or Microsoft.Office.Tools.Word.Controls.TextBox or System.Windows.Controls.TextBox or System.Web.UI.MobileControls.textbox…..

为BizTalk SQL Adapter 生成schema

不算文章,随便动动笔,记下这两天试验的一些结果

  • BizTalk 在Visual Studio 里那个Add Sql Adapter Meta Data 功能很不好用,不如直接在BizTalk 建一个SQL Receive Location 然后直接Send 到File,再从Xml File 生成Schema。
  • 如果需要Disassemble 消息,MSDN上 有个不错的WalkThrough。几个关键点如下:
    • Envelope Schema 和 Document Schema Share same namespace。
    • 要为Envelope Schema 设置Body XPath。
    • <Any> Node in Envelope Schema 需要设置属性 namespace ##any and Process Context = Lax
    • Envelope Schema 在Visual Studio里 Validate Instance 是必然会失败的。
    • 不需要Import Document schema to Envelope Schema
    • 不需要创建Customize Pipeline, Building 的XmlReceive Pipeline 就够了
    • BizTalk 里的XmlReceive Pipeline 不需要做任何特殊设置。

 

顺便问问,有人玩这个吗?

Heroes happen {here}

When: Feb 27, 2008

Where: Los Angeles

What: Windows Server SQL Server Visual Studio 三大产品的发布会.

今天去逛了一圈,铺几张照片。

 

DSC02409

就在Lakers 球场边上,我们差不多8点多就到了

DSC02410

注册,很多人

DSC02411

里面人更多

DSC02412

赶着看9点的Keynote,随便对付一下早餐

DSC02413 

KeyNote 会场,理论上是不能照相的。。

DSC02414

NBC’s Tom Brokaw, 演讲云山雾罩,莫测高深。谈论的都是类似温室效应援助非洲之类极为高深di问题,俺开车太累,后来稍微眯了一会。

DSC02417

然后被某人的大嗓门吵醒了。

DSC02420

大Boss,再放一张

演讲效果不错,中间穿插的3个产品的Demo颇有意思,看的入迷就没有拍了。

Writing a simple messenger bot with Live Messenger Add-in SDK

很早就想给 Messenger 写个 Bot玩玩,有一段时间还分析过messenger的协议,不过Messenger这东东每次更新必然升级协议,搞得到后来都没力气跟他玩了。
Live Messenger 算是有了个Add-In SDK, 不过这个Add-in本来不是用来作Bot用的,功能很弱而且限制颇多:

  • Messenger 只能 Load 一个Add-In Dll (这点其实可以绕过去,写一个Add-In ,再自己公开了一个Interface,然后每次Init的时候到一个固定的Folder去动态加载所有实现了这个Interface的Dll)
  • Add-In 能做的事情非常有限,它只能响应Receive Message Event去 Reply message。
  • Add-In 只能Reply Message 给 Message 的Sender,不能发给第3方。
  • Add-In 只能回复1条Message 给Message 的 Sender (Kao,这个是最致命的,很多东东基本上没的玩了)

不过看在至少能Reply Message的份上,凑合着用用把:

首先要Enable Messager 的 Addin功能,缺省情况下,这个Feature是disable的。
改一下注册表,加个DWORD key in HKEY_CURRENT_USER\Software\Microsoft\MSNMessenger\AddInFeatureEnabled
set the value to 1, Restart your messenger, Login and open option window: Add-In tab 就出现了:
image
(有时候你会发现改了注册表Add-In Tab还是没有出来, 如果确定你的Registry没有改错,重装一下Live Messenger应该可以解决问题,还不行的话,请回忆你前半生的所作所为以检查RPWT)
当然,在这里只是Load,要激活Add-In,你还要Turn On它:
image
 
Add-In的开发很容易,简单的引用Messenger Program Folder里的MessengerClient.dll,再创建一个Class实现IMessengerAddIn。IMessengerAddIn 接口实现也很简单,在Initialize里注册一下你的ReplyMessage事件处理函数就行了。
Online SDK里有Sample Code,基本只要照抄。唯一要注意一点的就是编译出的Dll file name 要和你的 实现 IMessengerAddIn 的Class的FullName相同,比如说你的Class叫MyCompany.Testing.MyMessagerAddIn, dll 名字就得叫做MyCompany.Testing.MyMessagerAddIn.dll。
 
对了,给你的Add-In Dll 加上Strong Name 并且Add to GAC, 否则Add-In dll 会Run 在Internet Permission Set,不能读写本地文件,不能访问Database,不能… 基本上除了可以Reply个”Hello World”,你的AddIn啥也干不了。
 
调试也挺痛苦,我刚开始是用VS.Net 直接 Attach msnmsgr.exe 这个进程,然后在Messenger里 Load Addin Dll, 如果你在Compile Add-in dll之后刷新了GAC里Dll 版本的话,Initalize method 上的断点是能起作用的。后来就索性先当这Add-In是个普通的Class Library, 用NUnit 或者直接写个test winform project 来调试了。
 
 
  写Bot的时候在网上乱搜,还找到个好玩东西:AIML in A.L.I.C.E.。嗯,专门用于聊天机器人的ML语言,还有个.Net 实现的解释器。加上个AIML编辑器,应该还是能玩出点花样的。

Biztalk 开发笔记(1)envelope attribute in Schema

    说起来也有快2年没正经写过程序了,最近公司准备往SOA转,也就有机会玩弄一下 Biztalk 2006. 前一段参加了几次Training,有公司内部的,也有外面找的Consultant. 折腾了半天,多少算是有了点谱。

    这两天算是正式开始写第一个程序了,上手很简单,拿来别人写好的Schema,先准备做个Message Mapping,Receive/Send 先都是用的FILE Adapter,反正是怎么简单先怎么来。  有了Schema,其实Mapping很简单,整个一体力活,大多数情况基本上就是鼠标从左边往右边一拖,然后回去从左边往右边一拖,然后回去从左边往右边一拖,然后回去从左边往右边一拖……(顺便发泄一下对functoids的不满:那玩意看起来在Toolbox里满满的一屏,居然没有类似VB Year()/Month() 之类的DatePart Function,这么常用的功能,还得自己写Code 实现,实在令人比较的失望。)

(体力活–这些线都是我拉的…..)

    好,在经过一段时间的体力活之后,把Schema 和 Mapping 都Depoly到Biztalk Server,建好Receiving 和Sending Port,Create 好一个Incoming  Message 的instance file,把它拖到Receiving Port 对应的Folder——恩,命运的齿轮开始转动,文件不见了。(再次发泄一下对biztalk 2006 Schema Editor 的不满:连直接Edit Code 都不让我做,右边就傻傻的放个IE Window显示XML file,所有改动都得在Property Window 完成,真累….)

     跑到Sending Port对应的Folder,望眼欲穿也没等到Mapping之后出来的File,很显然,命运的齿轮卡住了。到HAT (这又是一个令人不满的东西,它除了定义了几个预定义的Query和几个Global parameter,和Sql Query Analysis 或者Sql 2005的Management Studio 基本就没区别,再刻薄点说,Management Studio 的Query Result的显示还比HAT好看的多。)里看看,发现Message 有一条Error Info:

“Finding document specification by message type http://soa.xxxx.com/xxxx/xxxx/xxxx#yyyy  failed. Verify that the schema is deployed properly.”

    显然,提供给Biztalk的Message有些问题,它似乎和我们的Schema不那么match。但是Message是用Schema 文件的,从理论上说不应该有问题。

    然后就是Google;Search KB;Biztalk newsgroup.. 当然,你已经看到了偶的标题,所以你也就知道原因是我开始拿到的Schema里envelope 这个属性被设置成了True,envelope是 Biztalk 的扩展属性,它可以支持Biztalk 接受的一个Message里饱含多个document,在pipeline 就可以 disassembly 成多个message instance, 就像是我们把多份文档放到一个信封里打包送给Biztlak 一样。 但是我现在的这个测试里显然暂时还用不到它。

   可惜你看到的这篇文章晚了点,否则你早就可以跑到MSN告诉我,“小心信封!小心信封!”, 对吧?

Be careful on NULL in Sql Server

 

     昨天在我们的一个程序发现了一个Bug, 程序是给Accounting用的一个Report,但是Accounting的人发现无论如何这个Report抓不出数据,跟进去查了一下,发现查数据的Sql是类似这样的:

   Select * from table_1 where sonumber not in

(select sonumber from table_2

union all

select sonumber from table_3

)

数据在Table_1里是存在的,table_2/3 里也不包含对应的SOnumber,但是Query的结果就是没有数据。再查了一下,发现原因在于Table_2中有些SoNumber的值是Null,而 where [field] not in (null) 这个判断,在Sql 里总是会返回false的 (偶这里的SET ANSI_NULLS 是ON,不过好像偶没见谁用过OFF)

改了一下in里的Select,处理掉NULL值以后Bug Fix

-------------------------------

 潜水N久,俺又回来了。 最近会玩弄一些Biztalk 和 SAP R3互联方面的东西,今天这个算一小泡泡。

Visual Studio Add-Ins Every Developer Should Download Now in MSDN Magazine

文章在这儿

10个AddIn是这些:

TestDriven.NET
GhostDoc
Paster
CodeKeep
PInvoke.NET
VSWindowManager PowerToy
WSContractFirst
VSMouseBindings
CopySourceAsHTML
Cache Visualizer

偶用过的NDoc和NUnit都没被作者看上,替代的是TestDriven.Net 和GhostDoc,俺都没用过…..

VSWindowManager PowerToy以前倒是玩了玩,可惜感觉功能都不匝地,当天就UnInstall了…..

PInvoke.Net 大家都知道,不过用的机会实在不大,真要用PInvoke,到www.pinvoke.net 看看也不麻烦……

FileDiff 算法

   一直对FileDiff 和 VSS里版本比较的算法很好奇,这东西看来简单,仔细想想好像还真有点无从下手的感觉。

前两天Google出一篇Paper;据说现在这些比较工具的使用的算法都是来自于这篇Paper。

     很有趣的说。

最近还在用VB6

比较古老了的说。

VB6的IDE不认识老鼠轮子,这让用惯了VS.Net/Word/IE的偶很不爽,还好,在Knowledge base 里找到了这个。 还是带源码的。


VB6 Form会有一个Menu Editor,你可以在那里面编辑Form上的菜单,但是如果你想要程序在运行时再动态生成菜单,也不是不可以,在这里描述了动态生成菜单的方法。

当然,会有一定的限制:不能生成主菜单;子菜单至少要有一项;最主要的,菜单Click的处理代码要先写好 

 

Hello from Google

    今天在Google上又看到了一个新鲜玩意——Hello。

Google Tools里对它的介绍是”Instant message your pictures to friends “。

下载了一个安装了一下,界面和Picasa 2 灰常相似,安装好以后,在Picasa 2 里看图片的时候也会多一个Hello的Button, 看来Google也深知集成di 重要

如何共享图片因为暂时没有找到人试验,还没有什么概念,不知道Hello是如何做的。如果有人有兴趣,可以装一个和我试验一把,Hello里我的UserName是cnzee。

    Hello的另外一个功能是可以直接上传图片到Blog,安装好以后可以在Friends列表里看到一个BloggerBot的User,应该就是做这个的。不过大概只能上传到http://www.blogger.com 的Blog吧。