MS Architecture Journal Reader

by bsatrom November 29, 2007 17:11

 

The Microsoft Architecture Journal has been one of my favorite print periodicals lately. The articles are top-notch, relevant and very well-written. If you don't have a subscription, I would highly recommend it, even if you're not in an MS shop. Yes, there is a Microsoft bent, but there are also some gems that, I feel, have been universally relevant.

 

I noticed in Simon Guest's blog this morning, that Microsoft has released an Architecture Journal Reader that provides digital access to all thirteen issues of the journal, with search, favorites, annotation, etc. I've already downloaded it and It will be nice to have all of that information closer at hand. You can download a beta of the reader here, and go check out Simon's post here.

 

Tags: , , ,

random

Tell me where your SOA Hurts...

by bsatrom November 15, 2007 18:11

 

...and I'll charge you an arm and a leg to make it better. Looks like IBM is starting up a dysfunctional SOA practice. Not surprising really. Consider this quote: "Some organizations may not be happy with their service oriented architectures (SOAs). They may have "unhealthy" SOAs as a consequence of partnering with inexperienced system integrators. They may have proprietary SOA technology in the mix, and it may be difficult to scale operations."

 

They will probably make a killing since no one agrees on what SOA really means and all IBM has to do is figure out what you think it is, then convince a few key executives that that's the wrong idea, thus rendering them instantly unhappy. It was bad enough when selling the buzzword ruled the day, but selling the band-aid will be worse, I fear. This, my friends, is why we never should have let our executives hear "SOA" in the first place. 

 

Here's a question: what happens if an organization worked with IBM as their Systems integrator in the first place and is now unhappy with what they got? Would IBM ride in to rescue that organization too? <unrealistic>Maybe for the sake of good-will and a case-study, they'd do it for free.</unrealistic> I wonder how IBM would sell that engagement? Probably by blaming your internal management.

 

I can't help but think that this is a case of selling me poison, then following that up by telling me I have a deadly poison in my system and that you just so happen to have the antidote. Not that I am calling SOA poison in any way. Conceptually, it's just the opposite.

 

Maybe I'm overreacting or being too negative here. Any one care to chime in with excitement about this announcement?

 

Technorati Tags: , , ,

Tags: , , ,

architecture

Gartner Architecture Summits

by bsatrom November 13, 2007 23:11

 

From December 3-7, Gartner will be holding two back-to-back summits on Application Architecture, Development and Integration and Enterprise Architecture at the Rio in Last Vegas. It looks to be a informative week with some valuable sessions and insight. Todd Biske will be there in two panel discussions and I am looking forward to both of those, along with a number of others currently on the agenda.

 

Aside from the sessions, I've found that I gain the most value from these events when I have a chance to interact with other attendees. Are any other folks reading this planning to attend? If so, drop me a line in the comment section or via email at bsatrom at gmail dot com and we can try to connect during the week. I am always looking to gain the perspective of others in the opportunities and challenges that my EA group faces, as well as hear about the exciting and innovative things that other enterprises are doing. Hope to see you there!

 

Tags: , , , , ,

Using Technology to Fight Poverty: OLPC and Give 1 Get 1

by bsatrom November 11, 2007 23:11

 

In my last post, I spoke briefly about posting from time to time on the topic of technology that plays a role in fighting poverty. I figured that a good place to start with would be the One Laptop Per Child (OLPC) program, probably the most notable example of such. There's not much I can say about this highly-publicized program that hasn't already been said or written elsewhere, so I'll just share a couple of resources I have come across recently.

 

For starters, Ivan Krstic, the Director of Security Architecture for OLPC gave a great talk on the technical ins and outs of the XO Laptop at Google back in April. You can check it out here. It's an hour long, but worth a watch. (Thanks for Phil for pointing this out to me).

 

Of course, the biggest news in the XO Laptop department is the Give 1 Get 1 Program, which officially begins at 6 AM Eastern tomorrow. (BTW, the OLPC news site is a great resource for exactly that) The gist of the program is this: You pay $399 for two XO Laptops. You get one and the other is sent to a child in a developing country. T-Mobile has jumped into this promotion by throwing in a year of free T-Mobile Hot Spot access for the donor and EA is graciously donating the original Sim City to be included on all of the laptops.

 

Professionally, I am interested in Give 1 Get 1 because it seems to have potential to enhance the 1-to-1 model of child sponsorship that Compassion has held to for over 50 years. Imagine the impact of a sponsor purchasing one of these laptops, then designating that the other be delivered as a gift to his or her child. I don't know if this is possible, probable or neither at this point, but I have contacted Ivan Krstic to ask and I am at least looking forward to hearing a bit more on OLPCs future plans for partnering with international non-profits that have similar goals to OLPC.

 

If you haven't seen or read much about the program yet, I would encourage you to go check it out. The work that OLPC is doing is pretty amazing on several fronts: they are pushing the hardware and software envelope, all while providing affordable technology with the goal of improving education and peer learning. I, for one, am excited to continue to watch the program and its impact evolve.

 

Tags: , , , ,

Using Technology to Fight Poverty

by bsatrom November 08, 2007 06:11

 I haven't blogged much about technology as it relates to eliminating global poverty, mainly because it's hard for me to do so without talking about the organization for which I work. As has been discussed in the past by Todd Biske, James McGovern and others, corporate bloggers have to be careful to separate our own opinions and stances from those of our organization. Thus, it makes it tricky to talk much about our employers in much detail.

However, I think that putting a gag on myself regarding all issues related to global poverty is a bit extreme. Furthermore, I think that I'm in a reasonable position as an Enterprise Architect working for a non-profit that serves nearly one million children in poverty around the world to try to bring to bear a technology and EA perspective that is shaped by using those tools in that fight against poverty.

I think it's a perspective that is needed, mainly because some people that I encounter in the EA space are surprised to hear that my organization has any kind of IT organization, much less one with an Enterprise Architecture group. I believe a common assumption is that when the main concern is the bottom line and profit, innovative and mature IT is acceptable, if not vital. The unspoken subtext, of course, is that non-profits have no business dealing with (too much) technology strategy and innovation because we do not deal in profit or competitive advantage (I actually think we do deal in competitive advantage, just not in the way you might think... more on that another day). However, a robust and healthy IT organization that is fully aligned to its business is even more important in the non-profit world, simply because the stakes are higher. Not in terms of profits and jobs, but in terms of lives and quality of life. And I honestly don't think that I am dramatizing the issue here, though please chime in if you think I am. I am quite passionate about the subject and might need a cooler head from time to time.

I enjoy the fact that James McGovern increasingly uses his blog to raise our awareness about poverty and to influence others to give to worthy causes. My desire is to add a dimension to my own blog that takes a step beyond "knowing" and "giving" to what we are "doing" with technology in the name of wiping out poverty around the globe. And not just in my organization, either. I think that there are many organizations and individuals out there doing amazing things with technology where the benefit is not a  personal bonus or a shareholder dividend; it is a child who can read and write, a mother who can start a business to feed her family, or a saved life.

Thus, I plan to, from time to time, post articles, links and thoughts under the banner of "Using Technology to Fight Poverty." I might even, on occasion, discuss the work my organization is doing because I am sure that there are those out there interested in where we are going with technology. Furthermore, we know that there are thousands of brilliant people involved in technology that already support our cause and would be interested in knowing what more they can do to help us. However, please keep in mind that anything I discuss around these topics is and always will be solely my opinion and may or may not reflect the opinion of my employer. That actually goes for anything on my blog, but it bears repeating.

 So, keep and eye out for some more posts with this heading. This should be fun...

Tags: , , ,

Oslo - Microsoft's Strategy for Composite Applications

by bsatrom November 06, 2007 04:11

Last week, Jean-Jacques Dubray published an article on InfoQ regarding Microsoft's recent announcement of Oslo, a strategy designed to "...take composite applications to the mainstream." Rather than revolving around a single product, Oslo sets strategic direction for Visual Studio, BizTalk, the .Net Framework, Microsoft System Center and a new product called BizTalk Services. On a side note: Arnon Rotem-Gal-Oz hopes that this final project's association with BizTalk is more about branding than actual product similarity, a sentiment I share.

After posting this article, Jean-Jacques sent me an email and asked me to share some of my thoughts on Olso for a follow-up article to be published at InfoQ. I sent my thoughts along on Friday, but thought that I would post them here as well.

When we developed a long-term strategy for Composite Applications at my organization, it was obvious that while Microsoft technologies would have a major role to play in many areas of our future-state architecture, there were several vital pieces missing in the Microsoft stack that we would likely need to find elsewhere. I've always felt that we weren't alone in that sentiment, and the Oslo announcement suggests that Microsoft is also well aware of the gaps in their current offerings. While products like Dynamics CRM and MOSS 2007 offer composition scenarios which I regularly point to as examples of end-user and/ or business analyst composition, Microsoft has long been missing the technologies to unify these experiences under a common framework. Though missing in the products themselves, the Composite Applications vision is one that I have seen preached by Microsoft Architects and blogger's like Mike Walker and others who seem to have a good grasp on the long-term potential of composite applications. The good news about the Oslo announcement is that those individuals are no  longer in the minority. With Oslo, I believe Microsoft has unveiled merely the beginning of a unification strategy that enables composite applications. I believe that this bodes well for clients and non-clients of Microsoft alike.

That being said, There are two reasons why I'm a bit skeptical about the Oslo announcement: For starters, I believe that Microsoft's stated vision for Composite Applications is too narrow. While the Software + Services and SOA visions are needed, I believe that the end goal of any Composite Applications strategy should be to gradually enable composition up the stack toward the end-user. This is done first by providing a SOA which enables true service and process composition, then by extending those principles to developers of customer applications, business analysts and, ultimately, end users. Oslo speaks well to the former, but the latter is auspiciously missing. I actually don't believe that such a goal is absent in the halls of Microsoft, but I do believe that it hasn't permeated across the organization and thus, isn't given a place in the conversation yet.


The second reason I am hesitant to praise Microsoft for the Oslo vision is because their announcement is related to technologies which are anywhere from 1 year to 3 years or more away from release. Most of the tool updates are two releases away. Microsoft is correct when they say in their press releases that 21st century business is moving faster than IT can deliver, but that statement is true today. Organizations need solutions today, not announcements of solutions coming tomorrow. My organization, for example, cannot wait for a repository to manage models, metadata and services (one of the gaps we knew about in our strategy) when our ability to manage all three is already beyond our control. I honestly believe that Microsoft's vision for Oslo is a good one, but they are just now announcing plans to provide functionality that most organizations already know they need, which puts them at a disadvantage with those organizations. I can see a day in my company where many of the pieces in the Oslo stack make their way into our architecture, but today we need to keep moving. Of course, the good news is that when SOA and composite applications are done right, vendor lock-in is reduced and organizations can focus on delivering for the business today instead of waiting for the remaining puzzle pieces to fall in place tomorrow.

The Fifth Beatle of Composite Application Developers

by bsatrom November 06, 2007 01:11

 

Back in September, I published a couple of excerpts from an internal paper I wrote on Composite Applications (you can read them here, here and here). At the end of my second post, (which I probably should have broken up into 2-3 posts at least) I discussed the four types of Application Composers. If you missed that section, (which would be proof that I should have broken them up) here's a recap:

 

1) Business Service Developers - These are IT developers focused on providing value-added common business services to all customer solutions teams. Their technical depth is high and a CAF targeted at these users would be similar to what is provided by SOA today.

 

2) Customer Solution Developers - These are IT developers focused on creating customer-centric solutions by leveraging software infrastructure. Their technical depth is moderate to high and a CAF targeted at these users would need to abstract away service creation and assembly.

 

3) Business Analysts - These are customer consultants focused on helping customers determine which business needs are best met with technology. Their technical depth is moderate and a CAF targeted at these users would draw many features from current BPM platforms.

 

4) End Users - These are the users of the solutions created by customer solutions teams. Their technical depth is low and a CAF targeted at these users would need to abstract away nearly all of the technical aspects of application creation and should provide very intuitive context- and metadata-driven methods for application assembly and customization.

 

While these still make sense to me, I think I completely missed number five on this list. It's a bit of a wildcard, and it may not apply to every organization, but I think it will apply to more and more organization in the coming years. Here it is:

 

5) External Developers - These are developers who reside outside of one's own IT organization, but who have development expertise that they wish to leverage to create value-added services that benefit your organization. Their primary interest is in consuming available organizational data and recombining this data with external data or services to create new composites not offered or envisioned by the organization itself.

 

Now I think that the reason I missed this was because I was thinking internal only when laying out a strategy for Composite Applications in my organization. However, my fearless leader and I have been talking at length about creating a framework by which certain subsets of our information (the right information, of course) could be made available to anyone with the wherewithal to create useful services that we never thought of. Thus, our framework for Composite Applications now has another persona to enable.

 

So what do you think? Is this a valid addition, or did I have it encompassed in another one of the four? Furthermore, is just one more enough? That fifth category encompasses a ton of people, so do I need another for the technically savvy end user who doesn't write code, but who screams at creating inventive Yahoo! Pipes applications. I suspect that #4 could represent this individual with a slight modification, but what do you think?

 

Tags: ,

architecture

Using Windows Workflow Foundation to SMS-Enable MOSS

by bsatrom November 01, 2007 01:10

 

For the past couple of weeks, I have been doing an in-depth look at various mobile communication technologies (SMS, EMS, MMS, etc.) for the purposes of incorporating these technologies into our existing strategies. While the scenarios vary, most of the use-cases driving us to SMS et al. revolve around information delivery in areas where Internet connectivity is problematic, yet cell phones abound. It sounds counter-intuitive maybe, but in many regions (like Africa for example), it's far easier to put up a cell tower than it is to lay cable of any kind. Thus, mobile technology can be found in many places where land lines and Internet access cannot.

 

Being the agenda-pusher that I am, I can't pass up an opportunity to integrate this technology study with work I have already done and am doing. Since my biggest interest right now is in the Composite Applications space, I wanted to use one of the demos in this study to prove out (to some degree) the composition argument I have been making both in this blog and internally. Thus, I created a demo scenario for this study that sends a 1-way, application-originated SMS Text Message through an SMS Gateway (Clickatell in this case) to a mobile subscriber when a particular field on a list in MOSS is changed. Now, this scenario isn't rocket science, nor is it earth-shattering. What it is, however, is me taking my own medicine. If I'm going to preach the Composite Applications gospel, I'd better try it on for size myself. Here's how I implemented the scenario:

 

I started by creating a stand-alone custom activity in Windows Workflow Foundation. The code, with some key details removed, is included below. Note: In order use this yourself, you'll need access to an SMS Gateway (like Clickatell, which is used here) and access to their HTTP API, if they have one. Not the only way to send a text message, I know, but SS7 Gateways can provide guaranteed message delivery to the subscriber.

using System;
using System.ComponentModel;
using System.IO;
using System.Net;
using System.Text;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;

namespace MyCompany.Workflow.Messaging.Activities
{
    public class SendSMSActivity : Activity
    {
        public static DependencyProperty NumberProperty = 
            DependencyProperty.Register("Number", typeof(System.String), 
            typeof(SendSMSActivity));
        public static DependencyProperty MessageProperty = 
            DependencyProperty.Register("Message", typeof(System.String), 
            typeof(SendSMSActivity));
        
        [DesignerSerializationVisibilityAttribute
            (DesignerSerializationVisibility.Visible)]
        [BrowsableAttribute(true)]
        [DescriptionAttribute("Destination number of SMS message")]
        [CategoryAttribute("SendSMSActivity Number Property")]
        public string Number
        {
            get
            {
                return ((string)(base.GetValue(SendSMSActivity.NumberProperty)));
            }
            set
            {
                base.SetValue(SendSMSActivity.NumberProperty, value);
            }
        }

        [DesignerSerializationVisibilityAttribute
            (DesignerSerializationVisibility.Visible)]
        [BrowsableAttribute(true)]
        [DescriptionAttribute("Text of SMS message")]
        [CategoryAttribute("SendSMSActivity Message Property")]
        public string Message
        {
            get
            {
                return ((string)(base.GetValue(SendSMSActivity.MessageProperty)));
            }
            set
            {
                base.SetValue(SendSMSActivity.MessageProperty, value);
            }
        }
        
        protected override ActivityExecutionStatus 
            Execute(ActivityExecutionContext context)
        {
            string response;
            
            try
            {
                // Send the SMS Message
                response = SendSMS(Number, Message);
            }
            catch (Exception e)
            {
                response = e.Message;
            }

            // Raise the PageFinished event back to the host
            messageSentEvent(null, new MessageSentEventArgs(response));
                     
            // Notify the runtime that the activity has finished
            return ActivityExecutionStatus.Closed;
        }

        public delegate void MessageSentEventHandler(object sender, 
            MessageSentEventArgs e);

        private event MessageSentEventHandler messageSentEvent;
        public event MessageSentEventHandler MessageSent
        {
            add
            {
                messageSentEvent += value;
            }
            remove
            {
                messageSentEvent -= value;
            }
        }

        public string SendSMS(string number, string text)
        {
            WebClient apiRequest = new WebClient();
            apiRequest.Credentials = CredentialCache.DefaultCredentials;

            //Add a user agent header in case the requested URI contains a query
            apiRequest.Headers.Add("user-agent", 
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 2.0.50727;)");

            //Add the SMS details to the apiRequest object
            apiRequest.QueryString.Add("user", "xxxxx");
            apiRequest.QueryString.Add("password", "xxxxx");
            apiRequest.QueryString.Add("api_id", "xxxxx");
            apiRequest.QueryString.Add("to", number);
            apiRequest.QueryString.Add("text", text);

            string baseURI = "http://api.clickatell.com/http/sendmsg";

            Stream responseStream = apiRequest.OpenRead(baseURI);
            StreamReader reader = new StreamReader(responseStream);
            string responseCode = reader.ReadToEnd();

            //Clean up in-memory objects
            reader.Close();
            responseStream.Close();

            return (responseCode);
        }
    }

    public class MessageSentEventArgs
    {
        private string response;
        public string Response
        {
            get { return response; }
        }

        public MessageSentEventArgs(string response)
        {
            this.response = response;
        }
    }
}

Like I said, nothing earth-shattering. However (and I won't go into the details of WF here as there are plenty of good resources that do that) the end-result is a stand-alone Workflow Foundation Activity which encapsulates the business logic for distributing an SMS Text Message via our Gateway provider and which can be hosted in any application that provides the WF runtime. This Activity can easily be dropped into a container Sequential or State-Machine Workflow project (as I did when testing this activity on my machine), or it can be deployed to MOSS as a stand-alone activity which can be included in a Workflow built using SharePoint Designer. Two scenarios with different composers, both using the same asset. That's the vision of Composite Applications. (As an aside, with the recent Oslo announcement, I imagine that we're not far from a day where that same activity could be also be reused in BizTalk and Microsoft CRM, among others).

 

So what do those scenarios look like? For the developer adding a custom activity to a WF Workflow, it's a simple matter of dragging the activity from the Toolbox to the designer, then binding to the DependencyProperties (Number and Message in this case) and creating an event-handler to receive the event raised by the activity (in this case, sendSMSActivity_MessageSent). See the image below for an example:

 

CustomWFActivityInVS

For an individual slinging SharePoint Designer, the experience is different, but also quite powerful. However, The first step I must take as an activity developer is to deploy said activity to the MOSS server. This requires deploying the Activity assembly to the GAC on the MOSS server, adding said assembly as a safe control in the web.config file, and adding the Activity to the WSS.actions file (or a new .actions file in the same directory, which is probably a better idea), which SharePoint designer uses to load up the list of available workflow actions. All of this can be done via a feature in SharePoint (I know that the first two can and I think that the last can, so feel free to comment if I am incorrect). Here is the code for the WSS.ACTIONS file (Added in the <Actions> section):

<Action Name="Send an SMS Text Message"
  ClassName="MyCompany.Workflow.Messaging.Activities.SendSMSActivity"
  Assembly="MyCompany.Workflow.Messaging.Activities, Version=1.0.0.0, 
    Culture=neutral, PublicKeyToken=fe2315b70tbc147c"
  AppliesTo="all"
  Category="Messaging Actions">
  <RuleDesigner Sentence="Send %1 to number %2">
    <FieldBind Field="Message" Text="this message" DesignerType="TextBox" Id="1"/>
    <FieldBind Field="Number" Text="this number" DesignerType="TextBox" Id="2"/>
  </RuleDesigner>
  <Parameters>
    <Parameter Name="Number" Type="System.String, mscorlib" Direction="In" />
    <Parameter Name="Message" Type="System.String, mscorlib" Direction="In" />
  </Parameters>
</Action>

Once that entry has been added, the activity is ready to be included in an SP Designer workflow. In this example, I bound the workflow to a custom list created in a demo site, set a condition to check the value of a key field, then added the "Send SMS Message" activity and configured its inputs. In this case, the message is constructed from existing information in the list and the destination number is determined by looking up the mobile phone of a user in another list. An image of the Workflow Designer Wizard in SP Designer can be seen below:

 

WFActivityInSharePointDesigner

If the workflow validates, we're in business and the activity will run each time a list item is added or updated and the field in question isn't blank. Here is the Workflows application page, as seen from MOSS itself:

 

WFPageInMOSS

In addition, that activity is now available to include in any workflow where sending an SMS notification is a requirement. You be the judge if this is a blessing or a curse... In either case my hope is that this post illustrates the power of composition. And MOSS is just an example in this case, not the end-all for composition by any means. What important in any composition scenario is a platform and technologies that provide the ability to create reusable assets and then reuse those assets across tiers and containers.

 

Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen | Modified by Mooglegiant

About me

I am the Chief Architect for Thought Ascent, President of IASA Austin, and a software developer interested in agile, architecture, craftsmanship, ddd and a variety of other topics. Join me as I explore them here.