March 2007 - Posts

SOA and Updates

Andres and Udi are having a discussion about disconnected applications that has overflowed into the topic of service oriented architecture. 

"Now, we need to send those changes to the server, together, because I want them executed in a single transaction. I cannot have a service called 'ModifyOrderCustomerInformation', another 'AddALineToOrder' and 'DeleteLineFromOrder'. I need an 'UpdateOrder' service. You can use a diffgram to do it, or you could build your own change-serialization mechanism.

So, I really don't see how you can build an application the way he suggests. It's very nice from the 'service' point of view, but it's very difficult from the client point of view. The only way I see is to map the UI to the service interface, so the user can 'Change Address' or 'Update Marital Status' as different operations in the UI layer, but I can't let the user 'Modify the Customer'. It's a lot of work, and I seriously doubt that the users will like it." [1]

Here's the thing: if you application is a smart client application and it can work disconnected, then you probably want to be using a service oriented architecture. Andres rightly points out that you don't want 5 different methods for updating an order. Although you technically could do it that way, you probably don't want to be ignoring the transactional context of the conversation or locking tables for significant time periods.

The bottom line is that service oriented architecture is a very different model. When designing your service, you have to look at the tasks that are being performed, not the DB operations. In a traditional application, you might have CreateCustomer, CreateOrder and CreateLineItem methods. Your shopping card would call those three methods and wrap the thing in a transaction and everything works as expected. However, the service oriented approach asks the question, "What is the task that is being performed?" Although technically the user is creating an order and line items and a record for themselves, that is not the task they are performing. The task they are performing is placing an order. So, your service oriented architecture would have a single message called "PlaceOrder" which contains all the information required to place an order. That method returns to the user information regarding whether the order was placed succesfully, not whether each line item was created.

Now, what happens if you want to modify that order? The question I would ask first is, "Why would you do that?" Who is going to be modifying the order? Probably not the user, since they can't modify their own order after it is placed. Maybe a customer service person needs to correct some information such as the shipping address. In that case, we provide a service called "CorrectShippingAddress," not a service called "UpdateShippingAddress." Why? Because the task is correcting a shipping address. The DB operation that happens might be an update, but that's not the task. Is this more work? Slightly. The backend will still have all the update methods you are used to using, so you're not writing a bunch of extra code in the DB. However, this approach is far more powerful. One reason why is that now you have an operation defined and you can control everything about that operation. You know when the call comes in through that method that you have a customer service rep trying to update an order and can build in logic based off of that. A generic update method might have 5-6 different uses, which all contain different conditions for whether or not the operation is valid.

Additionally, this type of service oriented operation allows you to only expose the properties of your data that this specific operation uses. This makes your service a lot easier for 3rd parties to deal with. They know exactly what they need to pass in to your service instead of having 20 fields from your entity, only 5 of which they actually use for this operation.

So, I have to disagree with Andres and agree with Udi. It actually isn't a lot more work. It takes a bit more thinking and planning at the service tier, but your data tier won't look any different than it always has. If your development team has more than 1 person, the UI tier should actually be easier to code, since less knowledge is required of the internals of your application and the calls will end up looking a lot like the forms they are creating. Of course, this all assumes that you actually code your UI tier, instead of just binding everything to grids. If you just databind everything to some 3rd party super grid control, then this will complicate things... but hopefully you put a bit more thought into your UI instead of just slapping it together with the latest snazzy grid.

[1] http://weblogs.asp.net/aaguiar/archive/2007/03/30/re-disconnected-problems-and-solutions.aspx

Microsoft Deepfish: Goodbye Crappy Mobile IE

Very slick technology coming out of live labs lately. The latest is Deepfish: 

"Sorry to quash the irrational exuberance of suspected Zune and Halo 3 announcements, but this one is still big and you're getting it early. There’s a new web browser in town for Windows Mobile fans that goes by the name Deepfish. It runs technology borrowed from Sea Dragon, the imaging engine behind Photosynth.

It’s free and you won’t have to wait for an update to be pushed out through your cellular carrier to get it, you can download it now. "

[1] http://www.on10.net/Blogs/larry/exclusive-video-new-mobile-web-browser--deepfish/

Posted by Jesse Ezell with 1 comment(s)
Filed under: , ,

Articulate Guru Awards

We just announced the winners of our first Guru awards at Articulate. Head over and take a look:

http://www.articulate.com/blog/announcing-the-winners-of-the-articulate-guru-awards-2007/

These examples are pretty amazing considering that our tools enable people with zero knowledge of Flash to create complex and beautiful Flash based training with tools tools that they already know how to use, like PowerPoint. Previously, this would have required expert Flash designers and countless hours.

If you are looking to create overviews of your software, demos, or tutorials, you can do some pretty amazing things without much effort. For example, check out our Articulate Online tutorial's section:

http://www.articulate.com/products/ao-tutorials.php

Zero flash dev when into these slick tutorials. You should really head over and play with some of our trials, it's some pretty amazing software. Great training can aid in making the experience that people have with your software top notch.

 

Who's The Best?

"I have analyzed the vulnerability disclosures and fixes for Windows Vista and examined the results in the context of its predecessor, Windows XP, along with several other modern workstation operating systems including Red Hat, Ubuntu, Novell and Apple products to try and answer that question.

For the full details, or to print the report, you can download the report.

For those that only want the executive summary, here is a key chart that shows the publicly disclosed vulnerabilities during the first 90 days of availability, broken down by vulns fixed and vulns unfixed.  Many have commented on previous studies that you can't get a full picture by just looking at issues fixed, so I worked to include disclosed, but unfixed issues to try and present a more comprehensive view .

First 90 Days of Vulnerabilities - Windows, Linux and Mac

The results of the analysis show that Windows Vista has an improved security vulnerability profile over its predecessor and a significantly better profile relative to comparable modern competitive operating systems. "

[1] http://blogs.csoonline.com/windows_vista_90_day_vulnerability_report

Posted by Jesse Ezell with no comments
Filed under: ,

My First Vista BSOD

If you are installing vista after installing Daemon tools (in my case, I was upgrading the factory home edition to ultimate from MSDN ISO) and you start getting a blue screen after crcdisk.sys loads, the problem is most likely a file installed by Daemon tools. To solve the problem, launch the recovery console at boot menu, open a command prompt, and delete <WINDOWS>\System32\Drivers\sptd.sys and restart and the install should continue without bluescreening.

To anyone from MS that reads this post, please fix this in those installation updates that get downloaded to save everyone who doesn't read this post lots of blood, sweat, and tears.

Posted by Jesse Ezell with 7 comment(s)
Filed under: ,

Marc on Apollo

"When will Adobe/Macromedia learn? Why would someone want to lock themselves into a proprietary, closed platform - like Apollo? Unfortunately none of the (so-called) analyst, experts out there plugging Adobe - has brought this up yet. I’m not sure why they think that desktop based apps - connected to the Internet - are so new or different - or why locking yourself into an Adobe platform is smart, but both Scoble and Arrington seem to love it. One could argue that by enabling developers to easily connect media, web and the desktop together - that they’ll be able to get further faster - but would someone please mention to these poor schmucks who swallow this pitch that if you’re hopelessly locked into a proprieary platform - that the owner of the platform (Google, Microsoft, Adobe, MySpace) can do ANYTHING they want - at any time and discard you as fast as - well as fast as Macromedia ripped of Laszlo. So if history is any guidance, the ONE company who you’d NEVER trust - as far as you can throw them - is exactly the people shoveling you this Apollo crap. What open standards does Apollo support (besides http, HML and tcp/ip?) How could it have been done better - open? How many young companies have they already ripped off, stolen their IP or made promsies to - which they’ll break? I can’t believe nobody is calling them on this atrocity of a platform? Well I am. Everything Macromedia ever did to try and provide an integrated platform for developers - has failed. Why do you think Jeremy Allaire had to leave Macromedia to go do Brightcove? Well anyway - the platform sucks, stay away from it. But it gives me an excuse to use one of my favorite acronyms - YACP"

http://blog.broadbandmechanics.com/2007/03/yet-another-closed-platform

I think Marc has a valid point... not really about platform openness, doesn't mean much if the platform itself sucks, but about Macromedia failing horribly every time they try to create a dev platform. If I'm going to force everyone to install an update to view my site, it's a no brainer, I'm going to go with WPF or WPF/E, not Apollo.

WPF/E Faster than Flash?

Been busy launching a new product for the last few months (http://www.articulate.com/products/articulate-online.php), but getting some time to hit the blogs and noticed this tidbit: 

"Here are results I got testing with 16 balls on my Pentium M 1.7 laptop:

BrowserDHTMLFlexFlex (caching)WPF/eWPF
IE 6.05661908499
Firefox 2.0.0.1555260-90*58-
Opera 9.019450100--

The unexpected is that WPF/e is faster than Flash despite the fact that it’s been in the market for years. I haven’t had a chance to test on Mac yet and tested with IE 7.0 on different machine (it seemed relatively slower but can’t actually compare). "

[1] http://metalinkltd.com/?p=93

Posted by Jesse Ezell with 10 comment(s)
Filed under: , ,
More Posts