Tuesday, July 31, 2007

REST, JSON, SOAP, integration, and migration

Rest, JSON, SOAP, integration, and migration


REST -- I read the paper. The real thing is what I already know, cgi is the best. Do not try to "improve" it, keep it simple; and make it simpler (not more complex!) by introducing some simple regularity.

XML is not the way to go. It is not simple; so, it must go! JSON is simple, so, it will stay.

With JSON, with simple http (based on tcp/ip) protocol support of get and post, with simple convention (e.g. everything goes into JSON, no need of separate parameters. Just one string for JSON), and JSON parsing (~100 lines simple code -- it can be done and is already done in any and every language easily), then, we have a distributed computing system!


As a result, I do not like SOAP. Yes, it can support JSON. However, you have to handle SOAP. Too complicated.

However, for political reasons, I have to use SOAP, sometimes.

So, I will use both. However, I will use asp's page to implement REST, and the primary work horse.

Direct reasons:

(a) It is much easier to handle the cross-domain thing. M$ insists on no-cross domain. The only way to support it is to use scripttag-callback. M$ web service does not support it.

(b) It also makes using Ext easier.

(c) I can use it in VB3 code (ya, go nuts!), after I use a plain dll that support http and cut/paste json code!!

All three examples shows that REST is so flexible, because it is so simple!!!

Note: cut/paste http calls and Json code is OK, it is not duplicate business logic. This is important, because the same mechanism is for VB6 -- by doing this, we can take out VB3/VB6 code piece by piece. Some people argue that for VB6, you should use a dll. That creates dll registering issue, and unnecessarily makes thing complicated. Non-business logic code duplication is fine. Give me a break -- we need to get things done, while remove old code -- this is the only way!


Long live Json+rest! Cgi forever -- my insight and experience from perl cgi and javascript more than ten years ago are still extremely relevant -- it is amazing, especially in Internet time.

Note that cgi philosophy is directly form unix philosophy: text based, small programs glued with scripting ...

Tuesday, July 24, 2007

thought leader: the reason why YUI is the best architected javascript

It is because of this great man: http://www.crockford.com/


http://video.yahoo.com/video/play?vid=cccd4aa02a3993ab06e56af731346f78.1710507
http://video.yahoo.com/video/play?vid=cccd4aa02a3993ab06e56af731346f78.1027823
http://video.yahoo.com/video/play?vid=cccd4aa02a3993ab06e56af731346f78.992708
http://video.yahoo.com/video/play?vid=630959
http://video.yahoo.com/video/play?vid=cccd4aa02a3993ab06e56af731346f78.2006940
http://developer.yahoo.com/yui/theater/

If you do not read and watch those, you are not doing any serious javascript programming.
------------------------

I obviously underestimated YUI -- its good design is not from Java, but directly from Java's parents -- lisp and C++ communities.

He is obviously a thought leader!

I feel very good about the site, because it says there is only one javascript book, and that is the O'reilly definitive book -- and I read it many years ago, and I believed that that is the only good book for javascript!

Also, now I know, I can follow YUI, because the Java style is just a disguise, I trust YUI will use Ruby style, because crockford definitly knows the essence of Ruby.

http://javascript.crockford.com/tdop/tdop.html -- I do not believe Ruby has this! I would say, who needs Ruby, javascript is the coolest thing! -- at least its JSLINT part of it.

BTW, I am now using firefox as my everyday browser. When I do blog, it gives me spell checking. Very nice. Who needs M$! -- now, I understand the statement, M$ as we know it is already dead! its FUD has no use now. No real adventure investor needs to pay attention to M$ anymore. Ya, it still alive, just like IBM, who cares. M$ is quickly a IBM-2nd.

-------------he pays attention to details also:

All variables should be declared before used. JavaScript does not require this, but doing so makes the program easier to read and makes it easier to detect undeclared variables that may become implied globals.

The var statements should be the first statements in the function body.

It is preferred that each variable be given its own line and comment. They should be listed in alphabetical order.

    var currentEntry; // currently selected table entry
var level; // indentation level
var size; // size of table

JavaScript does not have block scope, so defining variables in blocks can confuse programmers who are experienced with other C family languages. Define all variables at the top of the function.

Use of global variables should be minimized. Implied global variables should never be used.


Using Extjs Grids; YUI: separation of UI and Entity/Facade by using JSON, separation of HTML, CSS, and Javascripts; JQuery: chaining sugar coating

1. The three screencasts are the best (the screen is not clear, and seems that when I play them, they stopped about 80% -- enough though). You can download the source code for the 2nd and 3rd.

http://extjs.com/learn/Screencasts


2. only one written tutorial worth reading:

http://extjs.com/learn/Tutorial:Using_Ext_grid_form_dialog_to_achieve_paging_list%2C_create%2C_edit%2C_delete_function


3. The community is very active. It also has google search with it, very convenient.

At the bottom of the page: http://extjs.com/learn/

I used it to get the info for using it with asp.net ajax extension. Excellent.

4. The time on YUI is definitely worth it – it has similar style with YUI (it grew out of it, so no surprise there). Any deep (architecture ideas etc.) stuff, we need go back to YUI. Among all those javascripts, only YUI has an easy and yet very good structure (because of its java heritage, obviously---- what is it? ---- separation of UI and Entity/Facade by using JSON, separation of HTML, CSS, and Javascripts).
----(also because of its java heritage! -- the dark side of it!) YUI only misses the syntax sugar coating of chaining that JQuery does best; however, Ext has some of it.
----with aptana's intellisense, the long names are fine actually!

5. I am coding my code based on the three examples on 1 and 2 now. The fun begins ;-)

Monday, July 23, 2007

Dump Rico and prototype, use YUI and EXT

Dump Rico and prototype, use YUI and EXT

Rico code base is bad.
Prototype is not as good as JQuery anyway; also, the coding style is really not that important – once you get the JQuery idea.

EXT roots from YUI, but now is independent lib. It has LGPL, which makes it OK for commercial uses. Also, EXT has JQuery style also.

So, the best way? EXT and YUI. Also, YUI can lead you to EXT via the YUI-EXT trail!

EXT has close relation with AIR, which is good for offline etc.

Friday, July 20, 2007

sites that help you to refresh css and html

I am digging into the YUI and prototype-rico.
It is time to give html/css a systematic (re)treatment.
Here a site:

http://www.w3schools.com/css/showit.asp?filename=ex1


I know, there are so many there, and books. However, I do not believe we need books here. Come on, you are a programmer, and it is just html/css! Seriously, books are no good here for the following reasons:
(a) Most books on this are for dummies, or, for academics, either way, bad for programmers.
(b) Online resources are very good – inherently -- you can see it in action.

This site is good, because it is to-the-point (O'Reilly style, if you may).

Other sites (google css reference or css tutorial)

http://htmlhelp.com/reference/css/quick-tutorial.html
http://htmlhelp.com/reference/css/
http://www.css-ref.com/
http://www.html.net/tutorials/css/
http://www.westciv.com/style_master/academy/css_tutorial/

Thursday, July 19, 2007

Stop investing the so-called server side model of Ajax -- when Orcas comes out, even dummies in asp.net world will use javascripts directly

The title explains itself. We all believe that .net stretched VB6-ers. However, nobody notices that asp.net actually created a new low of M$ -- yes, it is even lower than VB6. Think about it, javascript is a designer’s language, now, it is treated as an assembly language.

You may say, GWT is the same thing. Yes, but that is different – it is direct, head on. The “server side ajax” model is not that – it is simply an even-lower-than-VB6 approach.

Again, you may say this is a FUD, or, reversed FUD (since it is used against M$!): do not invest in the server side model of Ajax, when Orcas comes out, you will be nobody other than a dummy-worse-than-vb6er.

a big mistake -- well, IMHO -- on YUI site

On http://developer.yahoo.com/yui/, the "Getting Started" is really confusing.

However, after you download it, and set up the download as a local site, then, in the root index.html, there is this:

>>>>>Check out the examples of YUI in action. We recommend starting with the Event Utility and Dom Collection examples; Event and Dom provide an important foundation for JavaScript developers using YUI. Once you've reviewed those two foundational pieces, go on to explore utilities like Drag and Drop and Animation or UI controls like Button, Calendar and TabView. If you're interested in YUI's CSS components, read through the examples for Reset, Base, Fonts, and Grids in that order.


-----------IMHO, this is gold, why they do not use this in the top level "Getting Started"? ---- big mistake, I would say.

Wednesday, July 18, 2007

JSON and Oracle: who saide javascript is not typed?!

For oracle, you only use four types: varchar2, number, char (because of the padding, it should only be used for "Y" and "N"), and date

JSON make it shorter: string (with""), number (no ""), false and true, no date!

For date, M$ has a cleaver convention: /\Date(12341324)\/ because \/ is not necesasry to escape \, so, it is used here to signal date!
Another way is to use military format (or other ISO format) 2007/07/18. The thing is, there is no way to signal that it is indeed a date, not an ordinary string field.

Tuesday, July 17, 2007

javascript IDE

A logical step of pure ajax: it is time to get a javascript IDE

http://www.aptana.com/
firefox and firebug

Why? it is too awkward to do it in VS.

This is a huge step; but also anticipated: what good can come from M$?!

It has build-in support for all popular Ajax client side javascript frameworks!

Best of all, it is a java app!

By the way, I really enjoy prototype -- its Ruby influence (M$ try to make javascript like a C#, prototype makes it like a Ruby -- way to go!)

Sunday, July 15, 2007

the real business: prototype+rico and Script.aculo.us+behavior+eventselectors

dojo, prototype, Mochikit, Yahoo UI (YUI), or, my own 2K library (from my old O'reilly's javascript cookbook!) and plus web service.

Everything else, e.g., controls, server or client, are just so-called "convenience tools" -- actually, inconvenient tools – I am now even against http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx

I know, in the past weeks, I stepped through many things, silverlight, spring.net, etc. Now, I am only for javascript + webservice + activeX for client-side-printing-serial-port-comm. I am against everything else, including asp.net per se -- who need asp.net anymore!

It does not make sense to use small ad hoc javascripts anymore. It is time to use javascript frameworks/libraries.

After reading http://www.sitepoint.com/article/javascript-library/2
and some research, prototype is the one, because I want some powerful yet simple (once I know the framework) grids!

Another reason: funny thing -- prototype is the ajax choice for Ruby on Rails -- we cannot avoid RR, it is everywhere!

http://www.brandonquintana.com/index.bcq?id=13&page=blog&title=prototype+behaviour+rico+and+scriptaculous

so, prototype+rico+Script.aculo.us+behavior+eventselectors, of course, we need to know how to make it work with the web service support from "asp.net ajax".

http://64bytes.com/archive/2007/05/10/ASP.NET-Web-services--AJAX--prototype.js.aspx -----
http://www.wtfdeveloper.com/Default13.aspx ----------------


http://www.sitepoint.com/article/painless-javascript-prototype/
http://www.prototypejs.org/
http://prototypedoc.com/
http://www.sergiopereira.com/articles/prototype.js.html#Reference

http://script.aculo.us/
http://openrico.org/downloads -----------------------
http://borkweb.com/story/prototype-makes-javascript-painless
http://borkweb.com/story/oooo-eventselectors-for-prototype
http://www.snook.ca/archives/javascript/prototype_disse/

------------------------prototype+rico is large. However, javascript can be cached and compressed. So, I do not believe it is a problem. If you are really concerned, use YUI (there is a new kid, JQuery, however, it does not have grid, you have to use ext; but ext has intentionally ambiguous license for commercial use for in-house development -- for web, in-house-intranet and internet is a thin line anyway).

-----------------------so, YUI is also a choice, worth to explore.

the bread and breath of Ajax -- when with asp.net, of course

ScottGu's blog:

http://weblogs.asp.net/scottgu/archive/2007/07/04/july-4th-links-asp-net-asp-net-ajax-visual-studio-silverlight-and-iis7.aspx

It has link to this ---- this is a wonderful one -- if you use ajax, it is your bread and breath! Hey, this is not my idea, it is directly derived from ScottGu's!

http://dotnetslackers.com/articles/ajax/ASPNETAjaxGridAndPager.aspx

I wasted $40+ -- more about asp.net ajax books

I wasted $40+

I am pragmatic, and I get into action immediately. However, deep in my brain, I am an holistic thinker/learner. As a result, I need books, I am a book worm.

I am a member of Safari. However, they do not have “professional asp.net 2.0 Ajax”. So, I went to Border, and bought one.

It is a waste – I guess, I can count that as a donation to Border – I go there a lot, but not buying enough.

The best: the online doc (and videos, from the official site and the “interface training”, and also, the ScottGu’s blog – he is the man!!, and the forum – however, I am talking about things close to a book, so, let’s be back to the books) – you definitely should not need other books.

However, if you like me, a book worm who cannot have a peace of mind without reading “real books”, then, get O’Reilly’s Programming ASP.NET AJAX.

I learn my lesson, again: you can use M$ technologies, but at least, get books from O’Reilly -- at least some of your book must be from O’Reilly: you need some fresh air!

The book is very good, very hand-on, and it has references of other O’Reilly books – only for this purpose, it is not waste – the online doc does not have that.

The only downside is, it is still a “rough cut”; so, if you are not a member of Safari, perhaps it is not for you yet; or, perhaps there is another way to get it.

I am not a sales person from O’Reilly! To prove it, I will make a complaint: for “rough cut”, you have to pay case by case, book by book (i.e., “rough cut” is not included in the monthly pay), which is fine and fair. As a result, you can get pdf file, instead of being forced to read it online.

Now, I just do not understand what hack it takes so long for them to generate a pdf file – even we assume that I am the first one to order it after it is updated and they do not have a cache. It has been a week now! Then, I tried to find an email address to complain, I cannot find one. I do not like it a single bit! Imperfect world.

Saturday, July 14, 2007

silverlight or ScriptSharp, or both, or, just javascript

The reason I like silverlight is to avoid entity logic (e.g. entity validation). However, it seems scriptsharp can do that also -- it is exactly what I wished about a year ago! Of course, I cannot take the credit at all; it is just very encouraging that you can wish, somebody will realize that for you ;-)

http://www.nikhilk.net/Project.ScriptSharp.aspx

of course, it is even before silverlight, so, I guess we do not have too much hope for that.

The pragmatic approach for me is: (a) No client side logic! Educate users, "deal with it!" (b) if users push back, for those minimum cases, translate C# into validator or directly javascripts.

Rick client? Ya, potentially, and case by case!

---- By the way, I recently found Google Web Toolkit (GWT) uses the same technique, but it is java, of course. However, there is no mentioning of GWT in ScriptSharp, as usual. It is a shame -- nothing new from M$ -- I thought it is too good to be true, some creative ideas from M$, ha!

Monday, July 09, 2007

"Server side Ajax" is just equivalent to dataset (or, stored procedure), they are all dirty words from M$

I suddenly realize that Javascript is literally the java within M$. As a result, typical M$ developers are not good at it; and further, they are not prepared for it.

It is amazing. A few years ago, “do you do some javascript” is a tricky interview question – it is tricky, because if your answer is too good, then, you will not be recruited, because that means you are not a serious programmer, just a javascript web designer. Now, “do you do some javascript” is a real question, it points out whether the asp developer is just yet-another-VB-type, or, a serious programmer. If you know some javascript, it means you know some “low level stuff” – my goodness, asp turns javascript into low level stuff!!

Browsers are OS, ActiveX are device drivers, Javascript is perl: if you do not know javascript, you are nobody in web2 world.

Flash/flex proved that javascript is powerful. The server side approach of Asp Ajax tries to hid it; it is very bad. I hope the client side approach will take off soon. Client side Asp Ajax (i.e., “pure ajax”) plus silverlight – that is the way to go.

This leads to another issue. I believe some M$ people know this also. However, they always have some party line, saying "each way has its niche, bla bla", even some very smart people. So, it is very crucial you know that server side Ajax is just equivalent to dataset (or, stored procedure), they are all dirty words from M$.

Saturday, July 07, 2007

javascript and aop, orcas

http://calculist.blogspot.com/2005/07/aop-in-javascript.html

and:

http://weblogs.asp.net/scottgu/archive/2007/04/24/javascript-intellisense-in-visual-studio-orcas.aspx

Friday, July 06, 2007

Minimum for 8 techniques (i.e., totally bottom-up)

Minimum for the 8 techniques (i.e., if/when it is really a small project)

1. Ad hoc ado wrapper: for logging database access
2. Just use trace or debug, not log4net
3. Just Façade: this is crucial for later anonymous delegate
4. Entity (no dataset): this is crucial.
5. Use "pure Ajax" or "native Ajax" (i.e., use webservice; the page is really just a skeleton -- note: this style makes wpf/silverlight and "native ajax" almost the same!)
---- It is not just web, it is web2!!!!!!!, it is RIA!!!!!
---- Ya, since silverlight is still alpha, most of the time, we cannot affort to go through silverlight-ajax-wpf cycles. Sometimes, I like Ajax more than Silverlight, because Ajax is closer to flash -- it is javascript based. Ya, the real difference between silverlight and ajax is C# and java ;-) –---------- OK, seriously, it is javascript replication of the C# entity classes. Now, it can do the data part automatically (databinding!); for logic (methods) we have to do it manually. As a result, before silverlight, we should keep the logic part minimum: let’s do most of the validation at the façade level, what the hack, users sometimes do not like validate two times, they want it one time! (if we do client side validation, we have to do it more than one time, because client side validation is inevitably not sufficient) – it is a trade-off for users also, why we make it more difficult than necessary!

6. Always very short eventhandlers
7. Standardize page flow calls
8. Wrap new and always virtual

-----------Update: you may say, not big deal. It is a big deal! Now, I cannot use the asp.net 2.0 build in objectdatasource anymore, because of “always new”!

the build-in objectdatasource is a typical M$ brain-dead joke and not really usable anyway, see:

http://vaultofthoughts.net/ObjectDataSourceAWorkingAlternative.aspx

-----------Just to clarify. It seems that we should not do build-in datdabinding for both WPF and ASP, we need to use databinding for silverlight and ajax.

Thursday, July 05, 2007

silverlight databinding

I googled "silverlight databinding", and I found those, amazing:


http://www.netcrucible.com/blog/2007/06/24/streamed-template-processing-for-data-binding-in-silverlight/

http://blogs.msdn.com/webnext/archive/2007/07/03/silverlight-data-binding-with-xml.aspx

Wednesday, July 04, 2007

three analysis questions and eight programming techniques

OK, enough for technology craziness. My pragmatic attitude and “tearing things apart” attitude is taking over now. As I said, I want this blog to be an honest trace record of the journey. The reality is always a result of many forces.

I am backing off from spring-everywhere stand – however, I still believe it could be done; it is just not that, well, pragmatic, that it is everywhere and all the time. Because it could be done, so, from now on, spring will always be my “reference” architecture. ------ a second thought: other than the last one (all virtual), and the wrapping "new" is to prepare the wrapper for Castle or Spring.net, the whole thing is perfect for absorbing CSLA also -- each item can benefit from CSLA, especially I would like to see how CSLA deal with silverlight's databinding (or not, I've just found a link -- I will put it in my next blog). Ya, both CSLA and spring have validation. I know, I am riding the fence now. As I said, I like CSLA a lot -- once it is simplified.

The key for backing off the extreme stand is that it is not about whether it could be done or not, it is about ("cooperative" and "friendly") competition for delivering client-visible business values. Another way to put it, I see those “values” as territories. You must cover the territories as fast as you can. If you do not, somebody else will. Once you put it this way, it is really very clear that it is to both our clients’ and ourselves’ best interests to deliver business values, instead of “architectures”. This is XP tradition also, by the way.

Let’s be back to the reality; let’s reiterate the forest view, the big picture:


A. Process -- always ask three questions:

(1) Application level use cases (or, stories)
(2) Screen level use cases (or, stories)
(3) Ubiquitous glossary, i.e., data schema with example data. Note example data are crucial


B. Technology -- always pragmatic AOP. The bottom line is the AOP rule -- “separation of concerns” (you may say it is also an OOP rule; however, OOP never directly and intuitively says it; also, OOP cannot really do it anyway!). There are several core concerns (not surprisingly, they correspond to my “eight core techniques”; however, I “collapsed” the façade items, and “expanded” entity times – it is understandable, I am now paying more attention to fine-grained AOP – even now, in this blog, I am withdrawing a little bit from an extreme stand I posted in my previous blogs – I know, back and forth, it is me – I want to explore all the extremes), and we must always separate them. Before I list them, you may say that since fine-grained (i.e., entity property level) AOP is so powerful, we can do everything dynamically; why bother those static “separations”. The answer: (i) so that we do not need to use fine-grained AOP everywhere and all the time where/when it is not absolutely necessary; (ii) for fewer bugs. Bugs are done by human minds; human minds can deal with linear and static things with fewer bugs.


(1) adowrapper (can be simple and ad hoc ones, so that we can log data access easily)
(2) log4net logging (wrap it or not; not important; log4net is a small dll)



(3) façade
--Dao: it includes dao, i.e., a dao can be called directly as a façade; as long as more complex logic are in façades, there is no need to separate dao from façade – some may say that it is needed for transaction handling; but the system should be smart enough to figure that out
--command desing pattern: we could use command as façade. However, I tend to use anonymous delegate within façade; as a result, explicit command is not necessary.



(4) entity (M) -------I use MVPC -- I use both P and C: P is for fake C from M$ ;-)
--dataset: note that this entity is the real one, not dataset; actually, dataset should be forever forbidden, except in some extremely isolated, rare, and well-justifiable contexts).
--validation: a simple, almost “ad hoc” validation mechanism (ad hoc “framework”) can be used here.

(5) view (V) Always use silverlight.
--fallback to ajax. Silverlight is good because all entity logic can be done without tranlating into javascript, while for ajax, it is already a headache just for validation logic (only part of entity logic). ------need activeX-javascript to make ajax model closer to desktop's power.
--fallback to WPF when it is really necessary. ClickOnce is not enough. The so-called “30 min. download” is not as easy as it sounds. It is a huge technology tumbling stone. Do whatever is necessary to avoid fat clients. Period.

(6) presenter-in-view’s-code-behind
--databinding is good: it can be thinner with databinding;
--but more difficult: because entity is not dataset, so, databinding must be “custom-class databinding”;
--silverlight needs "manual" databinding: silverlight does not support it; we need to do it by ourselves -- http://www.lhotka.net/weblog/WindowsFormsDataBindingIssueConclusion.aspx , or/and, spring’s web databinding) ----------I've just found a blog, very nice one (see my next blog) (P)

(7) view flow: user control -- always to use user control to wrap the whole page, and a page is used only for flow; at least it should have a standard method call so that it can be easily searchable. (C).



(8) Unit testing everywhere all the time – OK, this is a lie (I am pragmatic; what I really care is that it is doable that it is everywhere and all the time -- as long as we put all logic outside UI, this is done automatically; however, I do not care about actually doing unit testing all the time – give me a break: if it is not likely that it will break, why bother, let QA department deal with it – I am busy to deliver business values!). However, I added one important thing that I obtained from recent technology craziness (the irony is that I put this in my blog long time ago, but I did not really do it systematically):

--Always wrap all “new”: no need for a full fledged abstract factory, just put all those ceateXXX in a class, all createXXX are static. We do not need to switch the kit at runtime. Compile time switching (for testing), we just switch the class. As a result, we can do this in a very simple and ad hoc style. Who said AOP is difficult? Who needs those abstract classes or interfaces! ------For added flexibility (“configure the class” based on where is it!), we want to enter calling class also. We do not enter method name and variable name, we could, but it is too much trouble, and who needs that kind of flexibility anyway (you rewrite the code!) Note that we add class name very easily, we need to do it anyway for logging! -----note that using this approach, we do not need to add the called class in the data member of the calling class. Spring encourages us to do that, so, let’s do it; it does not hurt anything.

--Always use “virtual”: for all methods/properties, unless you really know you want it non-virtual (just like in java, virtual is the default, unless you really need to mark it “final”)

Tuesday, July 03, 2007

The key of silverlight is to enable it to be able to use serial ports, using ActiveX

The key of silverlight is to enable it to be able to use serial ports, using ActiveX.
Note that we also need it to work on ajax without silverlight.

Sunday, July 01, 2007

spring has command pattern based aop also

It is not easy to say it is a good thing or a bad thing, just a note here: spring.net’s DAO stuff is not emit-based (i.e., fine-grained) aop, it is not even IoC based. They are command pattern based.

It is good, because you have all the skill set in case you have to do aop without emit; it is bad, because it is not elegant – emit-aop can handle it much cleaner.

It is inherited from Java spring, which was pre-aop-is-in-age.

XML parsing code runtime step through

We need to be serious about XML. It is part of the sql-code-xml triad.

To deal with XML, “compile time” validation is not enough. You need runtime step through: you need locate the XML parsing code, and when necessary, step through it.

For streaming style, search for XmlReader, reader.Read(),ReadStartElement, reader.NodeType, ReadInt16, ReadInt32, ReadDouble, ReadString, reader.AttributeCount, reader.GetAttribute, XmlNodeType.EntityReference, reader.ResolveEntity();,XmlNodeType.EndEntity, MoveToAttribute, MoveToFirstAttribute, and MoveToNextAttribute, MoveToElement MoveToContent, XmlTextReader, tr.Validation, ValidationEventHandler(ValidationCallback). Note that streaming is not SAX’s push, it is ADO-reader-like pull. The order of the pulling is depth-first (it makes sense; if it were width first, then it is more like XPath/DOM).

For XPath/DOM level, XmlDocument, .Load(, .Compile(, Select(, MoveToNextSelected, .CopySelected(,.Evaluate("sum(

Needless to say, it is important that you need to understand the mapping of the XML and C# code objects; the key is the naming convention.