Posts filed under 'Programming'
I have created two DSL projects on codeplex.com.
Agile Planner: A This tool is for agile project teams, who currently are using sticky notes on the wall. With this tool stories, backlog and iterations are managed in a graphic designer, saved as files within visual studio projects and can be exported to images, reports and etc.
SharePoint Services Site Top Navigation DSL: A DSL tool that models top navigation of WSS sites with a code generator that generates PowerShell scripts to create the navigation bar.
All successed with visual studio integrated mode (deploy as vspackages). All stucked with isolated mode (deploy as a stand alone application). It took me 2-3 day each to do DSL model. Now more than a week passed, I still did not finish a shell.
I wish I can host DSL designer directly, because it is really difficult to customize Visual Studio Isolated Shell. I explained in MSDN forum thread Re: Can we host DSL designer in a custom host application?
As using VS isolated shall for DSL, my first difficulty is to organize/hide the out-of-the-box packages, editors, templates. After copied the pkgundef file from the story board designer, web site template is gone, but something like “connect to database”, “class view”, “code definition window” are still there. Those GUIDs are pretty hard to manage.
Second difficulty is to deal with solution-project-file concept in VS. To implement custom project like in the story board designer is not easy. Actually I just want simple File | New, Open, Save …, not to use solution and project at all.
I thought maybe I can hide all out-of-box menus and supply my own menus. Then it comes to the thrid difficulty, which is to customize menus. VSCT is much better then CTC, but it requires editing XML file and matching GUIDs, IDs in code. Compare using visual studio cutomize ribbon and task pane for Word and Excel, how hard it is.
One day, customization of visual studio will become as easy as customization of Office applications. I believe that. But it will still face the requirement of integrating DSL designer with LOB applications. DSL has possible wider usage outside of development(code generation) world. DSL designer is expected to appear in custom applications, SharePoint sites and Office applications. For example, if the DSL designer is hosted in Word, our BA can then use the story board designer while writing the documents.
So please MSFT, consider unleashing the potentials of DSL. Follow the workflow designer brother, free the DSL designer to outside of VS shell.
IMHO, DSL itself can be a great product, not just a visual studio extension.
March 9th, 2008
I have uploaded two articles to codeproject.com.
Presentation Model in Action
Presentation Model in SharePoint
In the second article, because I wanted it to be focused on Presentation Model itself, one peice omitted which is using SharePoint Designer 2007 to create a new aspx page.

To do so, the code needs to be in aspx and created the file, web.config needs to be modified to allow compilation on the page.
<pageparserpath VirtualPath= “/Customer4.aspx” CompilationMode=”Always” AllowServerSideScript=”True” AllowUnsafeControls=”True” />
February 10th, 2008
Refers to an operation that produces the same results no matter how many times it is performed. For example, if a request to delete a file is successfully completed for one program, all subsequent requests to delete that file from other programs would return the same success confirmation message if the delete function were idempotent. In a function that is not idempotent, an error would be returned for the second and subsequent requests indicating that the file was not there, and that error condition might cause the program to halt. If all that were desired was to ensure a certain file was deleted, an idempotent delete function would return the same success result no matter how many times it was executed for the same file.
January 21st, 2008
Story began when I was customizing some wordpress templates on my vista powered PC. I was curious what kind of PHP source code is behind the “the_content” tag, so that I tried to type word “the_content” in the windows explorer’s search box. This search did not appear to work. No file found.
This triggered a long journey digging into how to search the text in php files.
Method 1: Use Visual Studio, Edit | Find in files … (27 files found)
Method 2: Use FINDSTR in command prompt.
>findstr /si the_content *.php
Method 3: Use PowerShell
> dir . *.php -r | select-string the_content | group-object Path | select-object Name, @{Expression={$_.Group | foreach {$_.LineNumber} }; Name=”Line Numbers”}, Count | format-list (c.f. this post)
Had so much fun learning PowerShell. :) Spent a lot time on this.
However, why Vista cannot search? The answer is the php files’ index options was “Indexing Properies”, but should be ”Indexing Properties and File Contents” in Control Panel - Classic View - Indexing Options - Advanced - File Types.
Finally also learnt that Vista search is word based, not character based. And maybe Vista search tokenized “the_content” same as “the content”, because the files have “the content” showed up, when searching “the_content”.
What a weekend, just like the comedy channel said, Time Well Wasted
January 20th, 2008
Remebered the first Flash tutorial I saw was to morph/transform a rectangle into a circle. But This simple task cannot be done in Expression Blend 1.
Now with Expression Blend 2 preview, it is possible. This feature is called “Vertex Animation”.
Wait, I actually morphed a circle to rectangle, by converting circle into path on key frame 1 and editing the path to rectangle on key frame 2. It is not exactly same as the “Tweening: shape, Blend: Angular ” in Flash
How about morph text?
How about doing things like in the beginning Flash tutorials?
December 27th, 2007
MFC is the C++ wrapper to Windows API. It was a great help when moving from DOS to Windows where the Windows API required a new mind set.
Now it’s WPF age, WFP/XAML is another big mind set change. Acropolis came to help this time. Its wizard askes something like “Do you want SDI or MDI?” and “Do you want menu bar, tool bar and status bar?”. They are famous questions in MFC wizard.
December 6th, 2007
Just saw a demo of ASP.NET MVC by Jeffrey Palermo on DevTeach Vancouver. The demo used StructureMap to construct the controller DI/IoC way, but actually key point of this framework is the “URL routing handler” that maps URL request to controller class’ method. The mapping is configurable and has intelligence to map automatically by parameter.
It somehow reminds me ISAPI Extension. In Delphi, it was as easy as adding a WebAction component, set path then code in the OnAction event which usually calls methods in another controller class…
The second key point is the “RenderView” method from base class Controller. It invokes aspx as a template engine. The result is that view state, server side event are no more available.
To me, ASP.NET MVC is as same as Web Client Software Factory that I will not jump on immediately.
November 30th, 2007
Attended Jeremy D. Miller’s session about design patterns for WinForms where I finally learnt the differences between supervising controller and passive view.
As myself being a fan of “Presentation Model” and data binding, especially two-way data binding, I am glad to know from Jeremy that “Presentation Model is another name for the Model/View/ViewModel pattern being promoted by some of the WPF team at Microsoft.” from his presentation of his blog post.
Update on 12/5/2007: Acropolis, the WPF client application framework is really using the presentation model explained in this video presentation.
November 30th, 2007
Before, my guidance to developers is to avoid post and try always GET.
This rule now changed. All because of the UpdatePanel which essentially dose partial page updates.
Started to like post back because only post back, not GET will work with UpdatePanel.
June 26th, 2007
Too many debates are there about SOAP vs. REST, contract first vs. code first.
But here is my real life experience during developing WB Editor when it needs to connect web services through those famous RESTful style APIs.
First, the API documents usually have no schema definitions other than request and response XML examples. Examples are good for human to read. But after reading, where is the code that I can work with? I have to write code to parse those XML! - This is a pain. If there was schema, machine could generate client code stubs automatically. The nice “Add web reference” way.
Second, maybe the web service providers realized the issue mentioned above. Usually there are client libraries are also available, such as libraries for Java, for .NET, for PHP, for Python and for Javascript …. If using libraries, what is the differece between them to those C libraries ages ago? As long as the the library black box can talk to the server no needs to bother whether underneath it is HTTP, whether it is XML or binary.
I cannot imagine if in my company, when I publishing tones of web services to other departments or clients, I have to also deliver client libraries, for Java, for .NET ….
Tags: WB Editor, SOAP, REST, API, schema, Add web reference, web services
June 8th, 2007
No needs to rename every control from something like textBox1 to txtTitle
, because no more code like:
txtTitle.Text = article.Title;
article.Title = txtTitle.Text;
How much time can we save if there are 20 controls on the screen?
May 20th, 2007
Google AJAXSLT is an implementation of XSL-T in JavaScript, intended for use in fat web pages, which are nowadays referred to as AJAX applications. Because XSL-T uses XPath, it is also an implementation of XPath that can be used independently of XSL-T.
Selenium Core uses AJAXSLT’s XPath function to locate element on plain html. Selenium IDE can generate the XPath very much same as Solvent.
Here is a sample to extracting data from a web page using XPath using AJAXSLT.
<html><head>
<title>XPath-Test</title>
<script language=”JavaScript” type=”text/javascript” src=”xpath/misc.js”></script>
<script language=”JavaScript” type=”text/javascript” src=”xpath/dom.js”></script>
<script language=”JavaScript” type=”text/javascript” src=”xpath/xpath.js”></script>
<script language=”JavaScript” type=”text/javascript”>
function findElementUsingFullXPath(xpath, inDocument) {
var context = new ExprContext(inDocument);
var xpathObj = xpathParse(xpath);
var xpathResult = xpathObj.evaluate(context);
if (xpathResult && xpathResult.value) {
return xpathResult.value[0];
}
return null;
};
function start() {
alert(findElementUsingFullXPath(“//*[.='b']“, window.document).innerHTML);
}
</script>
</head>
<body onload=”start()”>
<div><p>aaaaa</p>test<div>bb</div><a>b</a></div>
</body>
</html>
May 16th, 2007
One of the Mix07 presentation mentioned VBx along the Ruby and Python. I realized immediately it must be something interesting.
While searching related staff, I also found this diagram.
May 6th, 2007
Most popular blog servers/engines such as WordPress, Drupal, Neclues and etc. are using RDS (Really Simple Discovery) to help client software like WB Editor to find the services that can be used to retrieve, modified and delete the blog posts.
Those blog servers/engines are also generating RDF (Resource Description Framework) for each blog post to give more information about the post, e.g. track back url. But not enough. I am looking for,
- RDF extension that describes the blog service API lisk WSDL dose for SOAP, so that WB Editor can generate dynamically proxies to the service.
- RDF extension that describes which HTML elements can WB Editor extract data from and then send to the blog service.
Here are some interesting references:
May 6th, 2007

August 17th, 2006
Smart Client Software Factory team is recommending the “Model View Presenter” pattern. They have created Guidance Package for using this pattern.
From my experience, the “Presentation Model” pattern is better. When I asked if SC-SF can also include Guidance Package for PM, it looks like people may think MVP is more suitable for unit tests than PM. Read this thread.
To me, PM is even easier for unit testing, because it is less coupled.

I have refactored the CAB Smart Part Quick Start project to use MVP and PM patterns and have also created unit test projects for comparison.
Source Code:
They can be added to the CAB Smart Part Quick Start solution.
June 14th, 2006
In my previous post, I refactored CAB Smart Part Quick Start project to use Presentation Model. This time I refactored the project to use Model View Presenter. Note: the Presenter class is borrowed from Smart Client Software Factory, SC-SF.
Download: Source for PM, Source for MVP
They can be added to Smart Part QuickStart Solution for comparison.
The difference is that in MVP the presenter uses the interfaces to push data into the views. That presenter refers to views. In PM, views pull data from the presentation model. Views refer to pm via interface. The pm implements the interfaces. Personally,
I prefer PM to MVP. I successfully used the PM pattern in several projects.
My thougths are,
What esstentially MVP and PM do is to take the state and behavior of the presentation out of view. The views are dumb. They do nothing other than data binding and bypass user inputs.
But in MVP, although it splits one “autonomous View” into two parts, actually presenter and view are logically one thing, physically two class. When adding a new view, a new presenter is required.
In PM, it is a decoupled structure. Presentation model has no idea about view(s). It just holds the state and raise events. Adding new views needs no changes to the PM. View can also choose to connect different presentation model.
The Smart Client Software Factory recommand MVP over PM, “The rationale behind MVP as implemented in SC-SF is to encourage unit testing …” Read this thread.
So, I created two projects for the two patterns. Next I will try to unit tests for them to see.
May 19th, 2006
Composite UI Application Block (CAB) is really a powerful framework for smart client applications. It comes with samples implementing the Model View Control (MVC) pattern and the Model View Presenter (MVP) pattern. There is actually a third pattern called Presentation Model. See the pictures from http://jgoodies.com/articles/patterns-and-binding.pdf.
As described in Martin Fowler’s article (MVP, PM), the presenter in MVP has no state and the views need to provide interface allow presenter to manipulate them. The Presentation Model holds and synchronizes the state, but no need to create view interfaces.
Choice between MVP and PM, as per Martin Fowler’s article:
This decision would be strongly influenced by a decent framework that supports such synchronization. If you have such a thing then Presentation Model seems the better choice.
Compare to MVC or MVP, I prefer using the Presentation Model, because it has a centralized place to store state/data and centralized event source to notify views to update themselves. The CAB’s Event Broker is perfect for notification. So I modified the Smart Part Quick Start Project to become the ”Presentation Model” pattern. Here is the Source code.
What have I done?
- Refactor to extract interface ICustomerListView and ICustomerDetailView from the views*.
- Added CustomerPresentationModel class that implements the above two interfaces.
- Define the CustomerPresentationModel class as Service. **
- Inject the CustomerPresentationModel instances into views using service dependency injection. ***
- Published events CustomerSelected events CustomerCommentsSelected from the CustomerPresentationModel class.
- Subscribed the above events in BrowseCustomerWorkItem and ViewCustomerWorkItem
* Extract interface from the views sound very much similar to MVP, isn’t it? The difference is that in MVP, the presenter uses the interfaces to push data into the views, means that presenter refers to views. In PM, the controller implements the interface. The views pull data from the controller, means that views refer to controller. The “refer to” is a very good case of using depedency injection.
**
[Service]
public class CustomerPresentationModel: ICustomerDetailView, ICustomerListView
{
}
***
public partial class CustomerListView : TitledSmartPart
{
private ICustomerListView controller = null;
[ServiceDependency(Required = true, Type = typeof(CustomerPresentationModel))]
public ICustomerListView Controller
{
set { controller = value; }
}
….
}
Tags: smart client Composite UI Application Block MVC Model View Presenter Presentation Model injection
May 15th, 2006
ç»§ç» VSLive Toronto çš„åŽç»æ•…事。 上次记录了 SQL/e,这次是关于 Daniel Cazzulino çš„å‘言 《Microsoft p&p ObjectBuilder》。å¬å®Œè¿™ä¸ªæ¼”讲å‘现最近周围的事情还都å‘生了些关è”。
首先是日å‰ä¹°äº†æœ¬ä¹¦ 《Head Up Design Patternsã€‹ã€‚å®ƒçš„ç¬¬ä¸€ç« å°±ä»¥ä¸€ä¸ªå¼•äººå…¥èƒœçš„æ•…äº‹ä»‹ç»äº†è®¾è®¡æ¨¡å¼çš„ Strategy Pattern。这个模å¼çš„好处多多,但是负作用是会产生了很多相互关è”的类。如何按照åˆç†åœ°åˆ›å»ºè¿™äº›ç±»ï¼Œå¹¶æŠŠå®ƒä»¬ç»„和起æ¥ã€‚这就引出了å¦å¤–一个è¯é¢˜ Inversion of Control / Dependency Injection。
è¿™å‡ å¤©å¸®å¥³å„¿å¤ä¹ 准备ä¹ç†è€ƒè¯•,还碰到了 Interval Inversion / Triad Inversion,æžå¾—我就很头æ˜ã€‚Dependency Injection 好åƒè¿˜å¥½ç†è§£äº›ã€‚
Daniel Cazzulino 讲的 ObjectBuilder 就是一个具有 dependency injection 功能的轻é‡çº§å¯¹è±¡å®¹å™¨*。 ObjectBuilder 是 ï¼ï¼³ patterns & practices Composite UI Application Block ä»¥åŠ Enterprise Library çš„æ ¸å¿ƒéƒ¨åˆ†ã€‚
这就åˆå¼•到了 CAB - Composite UI Application Block。也是ä¸ä¹…å‰ WB Editor 3.0 的设计已ç»å¼€å§‹äº†ã€‚鉴于 2.0 ç‰ˆæœ¬ä¸ RAD æµæ¯’太深**,决定应该采用个好的系统结构,æ£åœ¨çŠ¹è±«ï¼Œæ˜¯å¦ç”¨è¿™ç¯‡ Implement a Microsoft Word-like Object Model for Your .NET Framework Application æ–‡ç« ä»‹ç»çš„æ–¹æ³•呢,还是用 CAB。
ç»è¿‡è†å¬ Daniel Cazzulino 的讲解,ä¸ä½†äº†è§£äº† OB çš„åŠŸèƒ½ï¼Œè¿˜äº†è§£äº†å…¶å†…éƒ¨çš„ä¸€äº›æœºåˆ¶ã€‚å› æ¤å†³å®šè¿›ä¸€æ¥å¦ä¹ 了一下 CAB Hands on Lab。于是得到结论就是 WB Editor 3.0 将采用 CAB。
Daniel Cazzulino 还讲了个有用的内容,Guidance Automation Toolkit / GAT,值得å†ç”¨ä¸€ç¯‡ç¬”记介ç»ã€‚
* è½»é‡çº§å¯¹è±¡å®¹å™¨å’Œ ** RAD æµæ¯’也å¯ä»¥è®²äº›æ•…事。
Tags: VSLive ObjectBuilder Strategy Pattern Inversion of Control Dependency Injection Composite UI Application Block CAB RAD
May 14th, 2006
在 VSLive Toronto 上è§åˆ°ä¸¤ä¸ªäººç‰©ï¼ŒSteve Lasker å’Œ Daniel Cazzulino
Steve Lasker 介ç»äº†ä½¿ç”¨ SQL Server Everywhere çš„ Occasionally Connected Systems。 SQL Server Everywhere(SQL/e) 何须人也?原æ¥2-4å¹´å‰åš Pocket PC 程åºå°±ç›¸è¯†ï¼Œé‚£æ—¶å®ƒå« SQL Server CEï¼ŒåŽæ¥åˆå« SQL Server Mobile。 Visual Studio 2005 带的 SQL Server Mobile 被é™åˆ¶åªèƒ½è¿è¡Œåœ¨ Tablet PC 上。SQL/e 就是解除了这个é™åˆ¶çš„版本。SQL/e å› æ¤èƒ½è¿è¡Œåœ¨å°å¼ Windows 上。
SQL/e 计划在 2006年下åŠå¹´å‘布。 Steve 演示了目å‰å¦‚何在 VS 2005 ä¸è¯•验开å‘的和å¯ä»¥é€šè¿‡ ClickOnce 安装的办法。
这就解决了一个版本 WB Editor 的数æ®åº“选择问题。 æœ¬æ¥æ£åœ¨çŠ¹è±«æ˜¯å¦åº”该用 SQL Server 2005 Express (SQL/x)。这个家伙 55Mï¼Œè¿˜éœ€è¦ Admin 用户æƒé™æ‰èƒ½å®‰è£…。 比较 SQL/x å’Œ SQL/e,SQL/e æ‰ 1.4M。看æ¥SQL/e æ›´åŠ é€‚åˆ WB Editor 3.0。
Daniel Cazzulino 讲的内容也很有用,将会在下一篇笔记内介ç»ã€‚
May 8th, 2006
Previous Posts