# Saturday, February 26, 2011

Boise Code Camp 2011

Shopping List App I had a great time presenting Windows Azure at the Boise Code Camp today. This is a great venue and I'm enjoying the awesome talks.

Adam Cogan kicked off the event with his keynote and I'm winding down with Glenn Block in his REST talk.

You can download my Azure presentation. Inside the zip file, you'll find my slide deck, helpful nuggets and the sample Shopping App solution I used to demonstrate some features of Windows Azure.

I've also created a short list of helpful Azure links that relate to some of my Azure speaking points. I hope you enjoyed the event as much as I did!

#    Comments [0] |
# Thursday, September 17, 2009

Trust, but Verify

Greg Hughes, one of the rock stars I had the pleasure of working with on a gig has a nice phrase that he likes to whip out from time to time: trust, but verify.

Greg didn't coin the term. Wikipedia says Ronald Regan used it and others before him. The term indicates you should trust what people are doing or saying, but verify it nonetheless. I had one such opportunity recently and I'm sorry to say that I failed miserably.

The check-engine light went on in my car last Friday. I took it to a repair shop early Saturday morning and left it there. They called back in a couple of hours with an estimate to fix this, that, and the other thing. I winced, but said sure, go ahead. This is over the phone, mind you.

They called back a few hours after that and said there's one more thing. I asked for the total, winced again, and said sure, go ahead. Again, on the phone. This time, the part was offsite and the delivery truck couldn't arrive until Monday. No worries, we had the spare car thing worked out.

I get a call on Monday. The truck arrived, but not the part; weird. Apologies were offered by the repair shop, but I say, no problem, I’ll get the car on Tuesday.

Tuesday arrives and I get a call in the late afternoon. The car is ready, please come and get it. I was in a meeting, so I learned this by listening to the voice-mail the kind man left on my phone. I leave work, pick up the H-man from daycare, drive home to get the wife and drive over to the dealership.

We're less than a mile from the repair shop when I notice I have another voice-mail from them. In this one, the kind man explains that they close at 6pm, but I have until 8pm to pick up the car before the gates close. He explained that I can call him back and pay over the phone if I plan on picking up the car between 6pm and 8pm tonight. He also says the amount on the call. It's two times the amount he quoted me on Saturday. I'm instantly furious.

I park and walk into the repair shop, the service desk directs me to the cashier. The cashier grabs my file and asks for the 2X amount. I respond politely with "I can't pay that amount". She furrows her brow, understandably at 15 minutes to closing time, and returns with the service desk representative.

I ask for the amount he quoted me over the phone and he points to the 2X amount. Again, with all the politeness I can muster, as if I'm speaking to my grandma, I ask if he quoted me the 1X amount. He scratches his head and explains, it's all right there. His document identifies who called, when they called, who they talked to, and the amount of the estimate.

I'm baffled and I begin to doubt myself. But I'm also resilient and tell myself that if the man estimated 2X for the repairs, I surely would have declined and pursued other options. It's an old car and we're thinking of trading it soon. I was very sure, even now, that I asked him for the full amount. I was also sure that he never said anything resembling 2X in response to my question about the full amount. Under no circumstances could 1X be mistaken for 2X, even on a bad phone connection.

He explains that he'll have to get the manager, so he's off and I stand around for a few minutes perusing the repair sheets he left on the desk. It's all right there on the documents, how could two parties be so far apart on an essential matter?

A large burly man in a nice looking suit emerges from the back offices, introduces himself and asks me about my problem. I explain the situation and he takes it all in. Then he turns to the service representative and repeats what I said. Then he turns to me and repeats what the service manager said. Then, he repeated what the service manager said two more times, then he repeated what I said one more time followed by repeating what the service manager said and ending with a finale of "in all of my 20 years here...", you get the idea.

Those of you who have met me will know that I have a pretty good face for these types of things. I'm not too pretty, it's hard to tell what I'm thinking if I don’t let you and the whiskers don't hurt either. Plus, for whatever reason, I decided to wear a nice button-down blue shirt and dockers today. I looked professional and not like some punkass kid trying to skip out on part of the bill. Plus, I sincerely felt that I was right.

In any case, 2X is a lot of money to screw up.

The manager explains that the documents with the who-what-when-and-how-much are legal documents in the state of Oregon. I don't bite. I'm not in any mood to debate the matter. My position is clear and so is his. No quick, witty comment or sly argument from me is going to win him over. My only rebuttal is that estimates over the phone are inherently prone to these types of mistakes. He picks up on this nibble of an argument and thoroughly explains that in all his years, they've never had a problem like this. Again, I refuse to argue the point. It's futile to do so. 

So, he explains that he has to go to the general manager of the repair shop. Again, I’m left alone near the cashier's desk. This time for about 15 minutes, the standard time one would sit in an office of a car dealership, waiting to see if the manager would accept your offer on the car. The old wear-you-down trick.

In the mean time, I think about what to do. I really do like jury duty. It's a lot of fun. I wonder of small claims court would be as much fun. There's the anxiety of getting over the problem, the possibility of losing my first case (I was a business law major until I took my first computer science course in college) and just the general hassle. Plus, I'm beginning to doubt myself. Did that guy really tell me the full amount on the phone and I just wasn't paying attention? I decided that they would offer to split the difference and I'd accept it.

Damn!

So, the manager returns, right on time. He repeats what I told him; then he repeats what the service representative said one more time. Finally, the manager then says the general manager offered to split the cost with me. I asked if he was offering me 1.5X and I’m corrected. The general manager is offering it and the manager is merely saying it to me.

Whatever.

I put up the stop hand and said, I think this is the best solution for both of us. The manager knows to stop selling when the sale is over, so he turns to the cashier and firmly states that this customer is going to only pay 1.5X of the amount on the bill.

I'm relieved that the issue resolved, yet still disappointed that it happened at all. I'm out 0.5X, but I do have a few extra repairs on the car. Upon further review, I think some of the repairs are a little suspect. For example, my car is perfect on oil. It doesn't burn oil and my drive way is void of any oil spots. Why didn't I think of that when the guy said the oil pan gasket was leaking on the phone? Arrrgg!!

This is when Greg's term "trust, but verify" really became clear to me. My super smart wife pointed out that I could have asked him to e-mail me the estimate. I also could have asked him to call me back and leave the full estimate as a voice-mail on my phone if they were email-impaired. The amount of money is large enough and use of my car is important enough that I really should have been more diligent. I should have verified the estimate instead of just trusting what I heard on the phone.

Rats. Well, they say the awesome people can tell you all about their mistakes and the incompetent never see their own mistakes. Here's one more thing on the pile that I can learn from. I'm going to be riding the "trust, but verify" horse into the ground for the next couple of weeks. Apologies, in advance, to all my teammates.

I don't explain the identity of the repair shop or the amount here because you're going to trust, but verify next time right? So, in that case, it doesn't matter who I dealt with.

#    Comments [0] |
# Monday, November 05, 2007

Interwoven TeamSite 6.7.1

By some cruel trick of nature, I've been surrounded by web content management systems for the past several years. I've written several (who hasn't?) and stood up instances of DotNetNuke, Windows SharePoint 2007, and now Interwoven TeamSite.

I'm told Interwoven has been around for 14 years and they're currently on version 6.7.1 of their TeamSite product. This offering includes features for enterprise content management (ECM) and the assorted adjacent technologies that simply must accompany ECM in a large scale deployment. Since the beginning, their product has included version control and workflow features. I'll describe a few core parts of Interwoven TeamSite here.

Source Control Repository

First off, developers will get a quick leg up if they simply know that TeamSite includes a source control repository. It works like any other. You can get the latest source, edit something, check it back in, compare versions, label a snapshot of the repository as well as branching. There. You're farther ahead than I was when I got my first explanation, about two years ago.

Standards based developers can relish in the fact that they have carte blanche control over the HTML and CSS sent down the wire to the browser. I'm talking about the production site here, not the administration pages used to interact with TeamSite. Nearly everything you'll do with TeamSite is done through a browser, providing that browser is IE or Firefox. Sorry Safari, this car is just a two seater. Again, browser support for the production site you're building is up to you - just talking about the TeamSite administration pages here. You'll continue editing specific files in your favorite tool, such as Visual Studio, Photoshop or TextMate. So once you get the subtle nuances of this source control system in you're brain, the challenge is to build a compelling web site using the same tools you have now; no silver bullets here.

Its also worth noting that this is only a source control repository; not a web development platform. You'll still need IIS, Apache, or some other web server technology to host your site. Interwoven TeamSite is mature enough that it supports Windows, Unix and Linux environments and several popular databases such as SQL Server and Oracle; just what you'd expect from an enterprise content management system.

FormsPublisher

Interwoven's TeamSite product includes a feature called FormsPublisher. This is useful for scenarios where an information worker needs to contribute to the web site, but lack HTML and CSS skills. This type of user can complete a form, let the system validate it, and then press a button to have the system generate the equivalent HTML page. The form can include validation, business logic, database queries or anything else you can dream up. While an HTML expert would prefer their favorite text editor and complete control to the HTML page. An information worker without HTML skills can now edit an existing page, based on an customized form. Now the challenge shifts to having the information worker select the appropriate form to build the page.

A developer configures a set of files and folders to support this process. At a high level, there are three parts in motion. The Data Capture Template (DCT) is an XML file that describes how TeamSite should present the form to the information worker. A Data Content Record (DCR) is an XML file that contains an instance of a form completed by an information worker. You launch TeamSite, click File, New Form Entry and select the form you want to complete. Next, the given form appears in the browser. The fields of the form are defined by the DCT. After you click the Save button, the field values are serialized into a DCR file. These files are organized in a collection of folders on the TeamSite server; one folder per form. Each folder has a conventional set of child folders to hold the DCR files as well as the presentation template file(s), These are the files with the .tpl file extension.

A presentation template converts a DCR into something else. Most of the time, at least for me, that something else will be an HTML page. Imagine a single DCR file that contains both public and private information for a company; perhaps the DCR contains public information about a single product as well as private information for their tech support staff. The DCR file can be send around via workflow for approval and the finally be ran through both sets of presentation templates which results in two different HTML files - one file is deployed to the public and the other file is kept on the Intranet. Both files are assured of having the appropriate content via the approval process and the presentation templates apply the correct branding and layout. This model supports a good workflow model as well as good separation of design from content. Its just one example of using the FormsPublisher in the enterprise.

Since DCR files are just XML, it's relatively painless to import legacy data into TeamSite. These imported XML files map to a given DCT, then they're translated into HTML pages via a presentation template. For example, if you have the last 15 years of press releases on the legacy system, you can import the existing information with some batch processes and stand up a new TeamSite server pretty quick.

Workflow

A workflow describes an automated business process. It can instruct an author to perform an edit or add a new file to the site and manage the process of approvals, taking a snapshot of the system for archival purposes and finally deployment. When a task such as "Edit Content" or "Review Content" becomes active, an e-mail can notify the appropriate party. When the work is completed, the assigned person just pushes it through the hole. Reviewers can click "Accept" or "Reject" after previewing the changes, they don't need to know the next appropriate step in the process - its automated. The system tracks the state and flow of information of the activities throughout the lifecycle according to the established business rules approved by the given company rather than based on how the given employee feels that particular day.

TeamSite has always included a workflow mechanism, but I can only imagine how difficult it was to develop them in the past. This latest version includes a Windows client application that supports drag-and-drop editing of workflow designs. You can work locally with workflows saved to your desktop in an offline mode, but you will eventually need to save the workflow up to the TeamSite server via commands in the tool. Workflows are serialized into XML files in the background, but its rare to look at the raw information. The workflow designer application helps you do the things you would expect such as setting up a series of tasks linked by arrows; some might be conditional based on human interaction or automated entirely by Perl scripts, Java classes or some other business logic.

Its interesting that Interwoven prides itself on a large number of supported platforms for the server product, but the Workflow designer client requires the Windows operating system. As I understand it, some (or all) of the workflow client application was recently purchased from another company. My hunch is the client application is written in C++ based on the look and feel as well as the OS requirement. Its a little clunky but it gets the job done; I sure wouldn't want to hand code all of the XML it generates.

Conclusion

Overall, I'm happy with my experiences thus far with TeamSite. The documentation is rich, it has a thriving online developer community, and the paradigm isn't too hard to grasp. At one point, I started getting bogged down with the massive about of XML configuration files and customization points. After sleeping on it (and a stiff cup-o-coffee) I realized that any other enterprise level application has a similar amount of customization. Since TeamSite embraces a litany of platforms, it makes sense that they don't (or haven't) invested a lot in slick little Windows GUI programs for configuration needs. Why build a server GUI tools when Windows is only one of your supported OS platforms? On the other hand, they could build a few more web based administration forms to get around some of these XML file updates. Once I started tallying up how many configuration pages I go through for Windows SharePoint, I stopped feeling like I was building my own box and installing Linux and started thinking about the broader ideas and why I was configuring the system instead of how - perhaps it just semantics, but I felt better.

#    Comments [0] |
# Wednesday, July 18, 2007

Google Reader Keyboard Shortcuts

I've been using Google Reader for a while now and I love it. Its very quick to launch with my SlickRun shortcut of "gr" and it manages my current list of 96 RSS subscriptions very well.

In fact, I recently figured out that this application is perhaps one of the worst web applications to use with the mouse. The mouse is such an impediment to reading several posts efficiently. I launch Google Reader several times a day and its common for me to have nearly 50 unread posts from over 30 RSS subscriptions at any given perusal session.

Here are the Google Reader keyboard shortcuts I use on a regular basis.

  1. Click the "Show Updated" hyperlink in the left column to show only the RSS subscriptions with unread posts
  2. Click the first RSS subscription link of the list in the left column (getting in the mood)
  3. Click the first unread post of the list if the right column (tee it up)
  4. Press space bar to traverse multi-page posts and advance to the next unread post for a given RSS subscription
  5. When all the posts are read for a given RSS subscription, press Shift+N to advance the highlight to the next RSS subscription of the list in the left column
  6. Press Shift+O (this is my Oh face) to open the list of the new highlighted RSS subscription
  7. Press the space bar to traverse this new feed like the previous RSS subscription

 

 googlereader

To Summarize:

Space Bar Scroll through a long post, then skip to next post when the last line of current post is visible
Shift + N Highlight the next RSS subscription in the left column
Shift + O Open the list of posts for the highlighted RSS subscription

 There are a bunch of other keyboard shortcuts for Google Reader. These are the ones I use the most.

#    Comments [0] |
# Monday, May 21, 2007

2007 PDX Code Camp

Here's the link to my slide deck and code that I presented at the Portland Code Camp. Organizing this content and presenting it was a ton of fun and great way to dive into WCF and CardSpace. My laptop had some problems chatting with the projector (guess it wasn't using WS-* protocols) so my backup plan of toting my own projector around all day proved worthwhile. I did have to run a bit and scraped a message level encryption demo and all of the OpenID demo due to time constraints. :(

Jason Mauer recorded the session though, so I'm curious to see how well it looks from the tripod.

Now I'm on the east coast and 8:30am comes a little earlier in the morning here than it does on the west coast. Its the first break in the Master WCF class with Brian Noyes and we've already had one Carl Franklin siting. Booya!! I'm hoping I can get a tour of Pwop Studios sometime this week while I'm in New London.

#    Comments [0] |
# Friday, May 04, 2007

Windows Communication Foundation

 I'm gearing up for my week-long excursion to New London, Connecticut in late May for some Windows Communication Foundation training at Carl Franklin's house. This is going to be awesome. Brian Noyse is teaching it. Here's a nifty fact from Brian's profile:

Brian got started with programming to stimulate his brain while flying F-14 Tomcats in the Navy, graduating from Top Gun and U.S. Naval Test Pilot School.

In preparation for the class, I selected WCF Step by Step by John Sharp from MS Press. This is a solid book that nicely augments the podcast with MLB that I've easily listened to over twenty times. Its so cool to pick up new things every time I listen to it on my Treo.

I've been listening to Carl and Richard's podcasts for a while now - literally years I suppose. I heard that Carl is moving his public ILT training over to Mark Dunn's place in Atlanta to make space for more podcast studios. So this sounded like one of the last opportunities to catch a flight to the east coast, albeit the nearby Radisson, for good reason.

Now that its early May and MLB's book is out, I suspect I'll head over to Powell's someday soon pick up a copy of Learning WCF: A Hands On Guide. I have a layover in Chicago and only so much battery life. Have you ever tried to find an outlet at O'Hare to recharge? WTF!?!?!?!

#    Comments [0] |
# Sunday, April 29, 2007

Silverlight Cram Session

Silverlight Samples In Action For no particular reason, I decided to make this weekend a Silverlight Cram Session. Two of my fellow developers are on a plane (and perhaps have already started the party) at MIX07.

From everything that's been said in the prior two weeks, I expect some pretty sweet announcments at MIX. My friend, Erik, is also getting ramped up on Silverlight. He presented at Innotech and is giving v2 at the PDX Code Camp.

So, I downloaded the Feb 2007 Silverlight SDK and the Feb 2007 CTP Sample Pack. For some odd reason, I feel that they are already obsolete. However, they served their purpose quite well. The WPF/E Quickstart that comes with the SDK rocks - you should just block out some time and go through it. The author of this content did an spectacular job of explaining new technology in a way that just worked. I can't recall anything that was more well written. Its just brilliant.

I bit it off in 30 minute chunks and devoured the entire Quickstart samples on Saturday afternoon. I started writing each example manually, and then by the middle, I succumbed to the clip-board inheritence methodology.

It's weird to think back to Friday when I had just a conceptual idea of what WPF and Silverlight does from various podcasts on Channel9, Hanselminutes, DotNetRocks and DNRTV. Now, after doing it for several hours, I get it.

Sweet.

This is one of the biggest reasons to love my job; and boy, do I. Good stuff like this gives you the will to come back for more, day after day, week after week.

I'm still in a mode where NotePad2 or VS.Net 2005 is my best friend for XAML. Perhaps I'll shed that kinship and move on to Expressions later. For now, I'll just bask in the glory of learning something new and wondering how I can implement various types of media experiences with lines, rectangles, elipsi (pural?), polygons, polylines, and paths.

#    Comments [0] |
# Sunday, April 01, 2007

Writing Custom Code Snippets

I was chatting with my pal Kelly at work last week about code snippets. This weekend, I had a pile of dirty dishes to clean, so I fired up my laptop and downloaded the archived DotNetRocks interview with Michael Palermo on code snippets. Before I knew it, the dishes were clean and I had refresher on code snippets!

I took a look at Palermo's site, www.gotcodesnippets.com. I was looking for some snippets I'd could install. I downloaded one that creates a property whose value is stored in the ASP.Net viewstate. I do that technique quite a bit, so it'll be fun to hit ctrl+k+x to run that snippet.

Next, I was interested in writing one by myself, just to see what it was like. I had downloaded the ternary code snippet, but I wasn't to warm and fuzzy about it. The snippet ought to have given me the opportunity to type in the variables using the special code snippet mode before reverting back to standard mode in Visual Studio. So, I grabbed their code, made a few changes and now creates a line of code with a ternary operator in it - just how I like. Here' the snippet that I dropped into my snippet folder.

Folder: \My Documents\Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets

ternary.snippet XML File:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
   <CodeSnippet Format="1.0.0">
      <Header>
         <Title>Ternary</Title>
         <Shortcut>ter</Shortcut>
         <Description>Custom code snippet for ternary operator</Description>
         <Author>andrewdothay</Author>
         <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
         </SnippetTypes>
      </Header>
      <Snippet>
         <Declarations>
             <Literal>
                 <ID>result</ID>
                 <ToolTip>Replace with the field or property that will recieve the value</ToolTip>
                 <Default>result</Default>
             </Literal>
             <Literal>
                 <ID>expression</ID>
                 <ToolTip>Replace with the expression to compare</ToolTip>
                 <Default>expression</Default>
             </Literal>
             <Literal>
                 <ID>trueValue</ID>
                 <ToolTip>Replace with the value if the expression is true</ToolTip>
                 <Default>trueValue</Default>
             </Literal>
             <Literal>
                 <ID>falseValue</ID>
                 <ToolTip>Replace with the value if the expression is false</ToolTip>
                 <Default>falseValue</Default>
             </Literal>
         </Declarations>
         <Code Language="csharp">
            <![CDATA[ $result$ = ( $expression$ ) ? $trueValue$ : $falseValue$;$end$]]>
         </Code>
      </Snippet>
   </CodeSnippet>
</CodeSnippets>

This snippet uses four variables. The <Code> element contains placeholders for the line that will be emitted by the code snippet. The "$" symbol surrounds the variable so its easily identifiable by the snippet engine. When Visual Studio is in the special mode, I can tab between the variable fields to enter the value, then hit tab+tab to switch back to normal view after I've entered in the customizations. Sweet!

>>>>>>>>>>>>>>>>

I just found this four minute screencast on Channel 9 too! She does an excellent job of showing one up close.

#    Comments [0] |

C# Operators

I recently became aware of the "??" operator in C#. I guess it doesn't have a real name like the ternary operator that I've long been a fan of using. I'll call it the WTF operator until I learn a better (more popular) name. Let's take a look at the "What The #$@#%@#" operator in action:

public int PageTabId
{
   get { return Convert.ToInt32(Request.QueryString["PageTabId"] ?? "-1"); }
}

Per the MSDN reference, the WTF operator inspects the value on the left side of the "??". If it's null, the value on the right is returned. If its not null, the value on the left is returned. Its a lot like IsNull in T-SQL. The code example above is just a simple helper property for an ASP.Net page. The property looks for a querystring value. If its there, the value is cast as an integer and returned to the caller. If its not in the querystring, the default integer value of -1 is returned.

I've been using the ternary operator for a while. Here's the same property as above, but uses the ternary operator instead. Its more verbose than WTF, but still one line of code.

public int PageTabId
{
   get 
   { 
      return Request.QueryString["PageTabId"] != null 
         ? Convert.ToInt32( Request.QueryString["PageTabId"] ) : -1; 
   }
}

I love writing WTF all over my code!

#    Comments [0] |

Developer, Meet Server

I watched episodes #1 and #2 of the Developer, Meet Server series on Channel 9. Jason Olson is a phenomenal presenter. There are so many switches to flip in the Vista, Longhorn and WCF stack that it can make your head spin. Jason explains the technology really well so the act of shoving more knowledge in my head is less painless.

The first episode explained how Vista can take advantage of Transactional NTFS (TxF). The concept is really simple but the operating system has to make some incredible leaps to provide this feature. TxF provides full ACID support for writing files to disk. Jason mentions this scenario that benefits from TxF support in the video:

You write a large file to disk and write meta data of the file to SQL Server. This TxF technology can increase your confidence that the database and the document are always in sync.

We've database transactions for a while - seems odd that its taking so long to do this at a file level... easy for me to say I suppose. In the video it sounded like Jason and some pals wrote a managed wrapper that does deep dive into unmanaged code for us. He said that perhaps later on it'll be more tightly integrated into the platform if the community likes it.

The second episode elaborates on TxF by using WCF. A smart client app makes a transactional WCF call to the server. The server uses the TxF service to create a file on the server's hard drive. Later, the client issues a commit and the file is visible to Windows Explorer, you and me.

I wonder what happens to files that never get committed - ala a long running transaction. They have to be taking up file space. Jason says not even Windows Explorer knows about them, but they have to exist somewhere. What if they overflow? Is there a way to clean house? If the poop is invisible, does it still stink?

#    Comments [1] |
# Monday, March 05, 2007

Filtering Stored Procedures

I was lucky to learn SQL early in my career. It was in a DB2 environment; in order to call the database, my assembly language program called out to a COBOL program to make the actual database query. Whoo-yah!! 

I transferred my skills to SQL 6.5, SQL 7 and SQL 2000 along the way and gotten pretty good at using the technology; I can hold my own with most database challenges. I've been a little pokey about learning the new features in SQL 2005 - the "use it until you run into a problem" worked well enough for the lightweight stuff I've been working on so far. I've set my sights on bringing my skills up to par with my understanding of the previous products. Geesh! I don't have a SQL Server category on my blog yet; I guess that sums up the past few years.

Today, I'm using a database with *many* stored procedures in it. I only want to view/peek inside my own. So, there's this great feature in SQL Server Management Studio to apply a filter. Once its set, only the stored prcedures matching the given criteria are visible. Right click on the Stored Procedures folder and select the "Filter" item in the context menu. Then, set your filter choices. It rocks!

#    Comments [0] |
# Thursday, February 15, 2007

CardSpace & the Laws of Identity

I attended the Software Association of Oregon (SAO) event today. The Development Special Interest Group (DEV SIG) hosted a discussion about Microsoft CardSpace, the open source framework of OpenID, and basic identity management.

Stuart Celarier walked the audience through Kim Cameron's paper called The Laws of Identity that articulate seven desired aspects of a good identity system.

Microsoft CardSpace was formerly named "InfoCard". This is a joint effort to implement the identity metasystem defined by the laws of identity. CardSpace is the "identity selector" for Windows. It needs IE7 and Microsoft .Net Framework 3.0 to operate. It implements the WS-* specifications in this service.

OSIS - Open Source Identity System: This is an open source group that's involved in the identity space.

Stuart also showed a demo of a system he's been working on. It logs a user into Wachovia banking site using CardSpace.  Scott Kveton of JANRAIN presented OpenID to the SAO DEV SIG group. OpenID hopes to solve the problem of having too many usernames and passwords.

  • Single Signon for the web
  • Simple, light-weight
  • Easy to use, easy to deploy
  • Open development process
  • Decentralized

Your OpenID is a URL: http://kveton.myopenid.com/

  • OpenID comes from the blogosphere
  • Biggest problem with identity; namespace
  • OpenID solves this by using DNS
  • Your identity is a destination
  • You have a unique endpoint on the web

Scott Kveton explained how sites enabled with OpenID enable users to authenticate. Visitors type in their OpenID, and the browser redirects to your OpenID provider. The visitor makes the appropriate decision and the browser redirects back the website.

Scott's site is http://scott.kveton.com

Last week Bill Gates announced support for OpenID. AOL announced support for OpenID this morning. More companies are about to make similar announcments. Here's some interesting stats on adoption:

  • 12-15 million users with OpenIDs.
  • 1000+ OpenID enabled sites
  • 10-15 new OpenID enabled sites each day
  • 7% grown each week with new sites

Kveton also brought up "Microformats" - a way to describe data in an HTML format (contact info, social network, calendar). These can be embedded on pages. There are some interesting ways to use OpenID with these technologies:

  • OpenID + iCal
  • OpenID + hCards
  • OpenID + Social Networking (XFN, FOAP or FOAF?)
  • OpenId + Reputation (jyte.com)

OpenID Predictions from Kveton:

  • 7500 sites supporting OpenID
  • 100 million users with OpenID
  • Big players adopt OpenID

OpenID.net has a ton of info.

Scott Hanselman explained how he enabled OpenID on his blog. Hte added two HTML <link> tags to his website. Simon Willison has an OpenID enabled blog. A visitor can click Sign in with OpenID. The OpenID logo lives inside the textbox. Scott entered his OpenID in the textbox on Simon's site. Using a web service, Simon's blog discovered Hanselman's OpenID provider, then it redirected the browser to Scott's OpenID provider.

Scott's website indicates the OpenID provider is www.myopenid.com

The OpenID provider prompts Scott to authenticate. After a successful login, the browser redirects back to Simon's page and recogizes Scott Hanselman. This is how Simon doesn't need to keep track of usernames and passwords for his blog; a huge benefit.

Stuart helped explain the difference between self-insued cards and managed cards: Business Cards from Kinko's versus a card issued from Visa.

Scott Hanselman displayed a different identity selector using Firefox on Windows. The page contains an HTML <object> tag of type "application/x-informationCard". It wasn't as pretty as the CardSpace in IE7 and .Net 3.0, but it had the same behavior.

There was some last minute discusson on "I-Name", an XRI technology (extensible resource identifier). It sounds like its still being baked.

2idi relays comments on Scott's blog. They will issue an I-Name. =kveton is Scott's I-Name. They have an DNS resolver where visitors may enter xri://=scott.hanselman/photo to redirect to his Flickr account.

#    Comments [0] |
# Sunday, December 31, 2006

Rogaine Is Not For Me

I just made my first trip to Costco Wholesale Corporation yesterday with The Wife. She's been going with her lady friends for quite a while and I've managed to dodge the bullet up until yesterday.

It was an enjoyable outing and my buddy Marc turned me on to the deal for a hotdog or polish sausage and a soda pop for $1.50 after making your purchases. Quite a deal! They even have these little boxes with a crank on one side. You hold your dog on the other side, turn the crank and either onions or relish come out the other side! Brilliant!!

So, I was meandering down an isle of wholesale goods with other shoppers when I laid eyes on the Rogaine.

Now, I've always said that when it comes time, I'll give it the ol' buzz cut instead of the comb-over, swirl over, or other means of denial. But this was Costco Wholesale Corporation and it was cheap! Like $10.00 cheap! Why pass up an opportunity for imortality?!?!

So on a lark, I was about to chuck a box in the cart until The Wife reads the side of the package and says "This isn't for you, dear." Turns out this Rogaine is for balding around the crown of your noggin' and not for the exceedingly high forehead, like mine. Alas, it'll be the clippers for me before too long. I wonder if I'd make a good Mr. Clean head like Doug Purdy or King Kong Bundy? It's not too smooth, but I do have a lot of "character" bumps.

#    Comments [0] |
# Monday, November 27, 2006

Command Spy

I saw this post on Jeff Atwood's blog about a new tool from SlickEdit, the makers of SlickRun; easily the most frequently used program on my laptop day-in and day-out.

The Command Spy
Whenever you click on a menu item or toolbar button in Visual Studio, you are executing what is known as a "command". Unfortunately, it's almost impossible to tell what command is linked to which menu items or toolbar buttons. The Command Spy monitors command execution and allows you to see exactly what commands you've run, how many times you've run them and what key bindings are used to invoke those commands. The main purpose of this tool is to allow you to learn what commands are bound to which keystrokes, so that you can work faster within the IDE.

I installed Command Spy over the Thanksgiving holiday. It totally rocks! Just run the VS.Net add-in while you're coding for a couple of hours and then take a look at your metrics. Command Spy will tell you how many times you've run a command without using the short-cut keystrokes. Its a great way to improve on your productivity.

#    Comments [2] |

Using Microsoft Outlook 2007 as an RSS Reader

I started using the RSS reader in Microsoft Outlook 2007.

I was using SharpReader for as long as I've ever had an RSS reader and subscribed to feeds. I really like having just one application running for my communications and work items (email, tasks, calendar, RSS feeds...). Its super easy to add a feed when you're visiting a web page too. I used folders quite a bit in SharpReader to categorize feeds, but I'm trying the "one big folder" approach for now in Outlook.

Sometimes, I got lazy and didn't open SharpReader on my laptop for a while. The posts would get way out of control. Sure, I could add it to my Start Up programs, but one of my quirks is to keep that list short, if not empty. Some weeks I even tell SQL Server to not startup automatically. Perhaps that's one of the old carry overs from living too long with too little RAM on a weak laptop.

Outlook 2007 as an RSS reader is nice, but I miss some of the basics, like identifying the URL to a blog I've already subscribed to. There's probably a way to display that information easily in Outlook, but I haven't discovered it yet.

To date, the most frustrating thing has been refreshing feeds. It gets joined at the hip with my email send/receive request. So, when someone comes by my desk in a general freak-out mode and asks how to solve a problem raised in a recent e-mail, I click on Send/Receive if I haven't gotten it yet. Now, thanks to the additional RSS feeds, I have to wait much longer as everything is updated. There must be a way to decouple these requests from each other in Outlook.

Overall, I'm very happy with the switch so far.

#    Comments [2] |
# Wednesday, November 01, 2006

Essential WIndows Workflow Foundation

I saw this link on Don Box's blog about a new Workflow book coming out. Since I'm considering WF, I'm going to take his advice and get the book.

This is a nice parlay for me after a session at the recent Seattle Code Camp. I sat in on a Windows Workflow Foundation talk by Paul Mehner, the South Sound .Net User Group Leader in Olympia, WA.

I could tell this guy is a professional trainer; he had a thorough understanding of Windows Workflow Foundation, solid content and a ton of energy. Not a sleepy eye in the whole audience!

#    Comments [0] |
# Monday, October 30, 2006

Seattle Code Camp 2

The Seattle Code Camp 2 was a great weekend. It was held at Digipen, the world's first video game university. Its a cool office, and judging by all of the labs, the auditorium, and extensive media clippings framed on the wall, its a fantastic place to learn 2D and 3D animation, game programming, art and anything else related to game development. Jason Mauer did a great job of pulling everything together. I'd love to help out and organize the next Portland or Seattle gathering.

My presentation on DotNetNuke and web content management went well; I think its got some legs. Here's the zip file of my presentation and the code I was talking about. This was the first time I've presented this material and it went fairly well. I really believe in the concepts that I've been whittling on and DNN has just been the delivery vehicle of the moment. I think it'd be a lot of fun to take this one on the road and hit up a couple of code camps in other cities. I wonder what The Wife would think of that?

One of my favorite presentors last weekend was Bill Vaughn. He's with Beta V, and a prolific author; he's written a couple of SQL Server books recently. I took advantage of the opportunity to learn quite a bit about SQL Server 2005 Compact Edition and Reporting Services from him.

The XNA team was also on hand to present some brand new material. The new beta is due very soon, if its not out already. Charles Cox was on hand (a Digipen graduate) to give a great demo on building a XBox 360 game with C#.

#    Comments [0] |
# Sunday, October 15, 2006

Presenting at Seattle Code Camp

I was accepted to speak at the next Code Camp, the weekend of Oct 28th, in Seattle! Hooray!! I thought for a little bit on (A) what would be a fun topic and (2) what do I have to say about said fun topic. I finally settled on talking about something I do on a daily basis: balancing the needs of the web designer, leveraging sufficient power of a great platform (read that as using the base class libraries and everything else given to me), along with the needs of the client and the overall budget.

Our designers at Pop Art are top shelf. They've come up with some fantastic ideas for sites. They're on the leading edge of what's possible with today's browsers and giving consideration to the downlevel browser folk.

Given that, they have some high demands on the HTML emitted by anything on the server. It absolutely, positively must be W3C compliant. It doesn't matter if its HTML 4.01 Transitional, or HTML 1.0 Strict; so long as it conforms to the given specification. Gone are the days of using menu server controls that emitted glorious reams of <table>, <tr> and <td> tags. Enough for you to knit a small blanket. Amen for the CSS Control Adapters.

The designers have a lot to say on usability too. There are just some things that developers will step right over like a country boy; where as the country boy's college roommate visiting for the weekend will stop, stare, point, hold their nose and give it a wide birth.

Enter DotNetNuke. Out-of-the-box, DNN is a developers playground. They know there's so much capability under the hood that they're (and I'm generalizing here) too busy envisioning what they're going to build next instead of rethinking the user interface that a client would need to maintain a site. That seems like small potatoes next to the glorious reams of code we can write.

So, I've settled on presenting the issues, challenges, arguments, counter-points and three-point-takedowns that we've had to address over the past 18 months with DNN. That would be a little too gloomy, so the remaining 67% of the discussion will contain some solutions that bridge the gap and keep the web site looking beautiful long after it launches. My presentation is in no way the rule; simply my experiences in dealing with this issue since I came to Pop Art in 2002. As with most things, I'm sure they are lots of ways to handle them, and I'm as open minded as the next guy; providing the next guy is sans jerk.

A basic introduction of DotNetNuke would be better served by a different session, but people who've never downloaded the bits from www.dotnetnuke.com will still get a reasonable insight into the problem sets and ways to deal with them.

My basic fear is probably the same as any other presenter who ever presented in all of presentation-land: getting slotted in the same time slot as ScottGu or anyone else in the rock star line up. What a problem to have!!   :)

#    Comments [0] |
# Tuesday, October 03, 2006

Seattle Code Camp

Jason Mauer's blog let me know that Seattle Code Camp is coming up at the end of the month! Ack!

I'm thinking about heading up with my buddy Kelly. I told myself at the Portland Code camp, I said "Self," that's what I call myself, "you should present at the next code camp." Well, this is the next one, but its right around the corner!

I could do the DotNetNuke presentation, but seeing as how they just incorporated combined with their proximity to Seattle, there's a good probability that a DNN big shot will be there doing a far better show than I could. I was very impressed at the last Portland Code Camp at the quality of the "simple" talks. Things that you should already know, but are fun and refreshing to go over again. For example, the Subversion discussion was really well attended and you always end up learning some new trick or insight. I love that.

I'll put my thinking hat on and see what I come up with.

#    Comments [0] |
# Monday, July 24, 2006
# Monday, July 03, 2006

Hey deja vu...did you see that cat?

I just realized today that I learned that trick about overriding span tags that wrap a custom server control about eight months ago, and probably another time before that. Is it age, stupidity, or just having to learn an entirely new technology every couple of years doing this to me?

Back then, I was writing a custom web part for a client's SharePoint installation. As you may or may not know, writing controls for versions earlier than SharePoint 2007 can be quite a bear, and these were no exception. That control was emitting tags that I didn't bake in, and I learned the technique back then too.

Any who, it was sure fun to re-live (and re-learn) that experience all over again. Yay.

Hey, careful with those sparklers. Happy Fourth!

#    Comments [0] |
# Sunday, July 02, 2006

Want to learn VS.Net 2005? Then ask a graphic designer for help.

Per Tag Formatting options

We employ the use of sIFR on a regular basis. Its great at showing cool fonts without resorting to a massive effort of managing image text files, plus they're search engine friendly.

We encountered a problem the other day where sIFR was displaying a space character to the left of the text. It wasn't horrible, but still undesireable. Upon examination of the xHTML source, the markup looked like this:

<h1>
   Upcoming Events</h1>

That was the default formatting behavior of VS.Net 2005. My normal M.O. is to type or paste in the xHTML content, press CTRL+E+D (the chord that equates to the menu bar command of Edit, Advanced, Format Document). This command formats both xHTML content and C# code, whatever you're doing in VS.Net; a nice time saver.

In the back of my mind, I recall seeing something on Google Groups or a web site where someone asked if the formatting template was editable, and I thought the response was negative. It would be nice to edit that template, but it is what it is, and perhaps in a future version. Well, the template that VS.Net applies isn't exactly how I would format the code if I was doing it manually, but it was pretty close, so that didn't bother me much at all.

Enter: The problem with sIFR displaying the first space before the "U" in Upcoming Events.

There was no reason sIFR should be displaying this space. The only way we saw to fix it was delete the opening spaces so the xHTML looked like this:

<h1>Upcoming Events</h1>

Easy enough to do for one instance, but we're talking about a lot of pages here.

Justin Garrity from the Design Team asked the obvious question, "Can you modify the formating template?" I answered, "Nope, it is what it is. Where are the interns?"

Justin wasn't satisfied with that answer and proceeded to tackle the problem with a tanacity that suggested he was actually an undercover expert in Visual Studio.Net 2005 and perhaps also certified in deep sea welding.

The converstation went somewhat like this:

Justin said "Hey, uh, can you bring up that options window?" I said "Sure" and clicked Tools, Options. Then he said, "Uh.. yeah, can you click expand Text Editor, HTML and click the Format item?" I was getting nervous. I hadn't delved into this section of VS.Net too far, and it seemed oddly appropriate for exactly what we were looking for. My suspicions about Justin where beginning to rise.

"Hey Andrew, can you click the Tag Specific Options button? Yeah, now expand the Client HTML Tags item. Now click the New Tag button and create a rule for the H1 tag. Its not in the rule set by default. Edit the Per Tag Formatting options section and set the Line Breaks item to the value of Before and After..."

And there we go. The auto format command of ctrl+E+D works like a champ. Rather than solve the sIFR problem, we changed the rules and away we go.

Now, what else is Justin going to show us about VS.Net 2005?

#    Comments [0] |
# Saturday, July 01, 2006

Built To Spec? You Jerks!!!

Developer ToolbarWell, just where did the time go? My last post was about 23 days ago. Ack!

So, I installed Internet Explorer 7 Beta 3 today. It looks pretty much the same as the last beta, as in good.

In the checklist page for IE7, you'll find the Developer Toolbar. Under the menu item named "Misc", you'll see a link to the W3C specifications for XHTML and CSS.

What are they thinking? Do they know that people are more likely to author web content according to established specifications if they put these items in the toolbar? There's a validation button too!

These types of enhancements just might be the thing to help Internet Explorer take hold in the market and become the number one browser in the world!

So, I've decided that its high time I learn more about CSS. I've been using it regularly for several years but I've never ventured too far into the positioning stuff. I have most of the normal css instructions memorized. The real trick is learning how to use them in Windows IE & Firefox, plus Mac Firefox and Safari. That's about the extent that we care to travel.

When I first started at Pop Art, I was all about the latest CSS commands, but I was quickly reeled back in by the requirement to support Netscape 4. Mr. <table>, please say hello to spacer.gif. Ack!! Just like a fine wine, we've aged a bit and it's time to get on to the better stuff.

I've been reading Stylin' with CSS by Charles Wyke-Smith. It's a pretty good read and not to thick. It was recommended to me by Ryan Parr, our resident CSS expert in the Design department. I have two other books that are waiting on desks after I finish this one.

But after loading up the Developer Toolbar in IE7, I think I need to read the CSS specification on the W3C site too. After all, it is the spec. That's what all these books are actually writing about. I wonder if the spec has any good stories in it...

#    Comments [0] |
# Thursday, May 18, 2006

Small Fish, Big Pond

dnn creative magazineWe've been making some great progress on DNN customizations, skins and implementations. I know there's a large community of DNN enthusiasts out there. Last weekend, I came across this web site, http://dnncreative.com.

Its a great resource for one of the items we enjoy, creativity and CSS on DNN. I signed up and paid my fee to get the member only content. There's a large collection of screen casts that explain the details of CSS in the DNN environment. They're currently on Issue #9. Each issue is chop full of great DNN information. The content is spot on for what we like to do. It's a real gem.

There's great content on here for people just getting started with DNN as well as advanced info for CSS specialists. A great job by some blokes across the pond.

Sometimes I really enjoy starting at the beginning, and this is one of those times. I settle down in my chair with a snack, and watch all the videos from the very beginning, no matter how basic. For one thing, it helps me keep fresh on how to explain DNN to other folks. Plus, le Wife will be out of town for a bit. That means I can plug my laptop into the big screen projection system in my basement, and watch to some great content in the confort of my home media center; uninterrupted.

#    Comments [0] |
# Monday, May 01, 2006

Code Snippets

I've been meaning to learn more about the VS.Net 2005 details, so after a nicely grilled steak and a glass of wine, I set myself down to read the MSDN library on the topic of Code Snippets.

Code Snippets are one of the great new features in VS.Net 2005. They provide a method for a programmer to quickly insert snippets of code by typing just a few keystrokes.

An examination of the code over the course of several projects will reveal a set of patterns: classes, properties, event handlers, constructors and methods. Just a few characters vary in these patterns.

private int _name;

public int Name
{
   get { return _name; }
   set { _name = value; }
}

The preceding lines of code provide an example of the pattern inherent in a property. The values "_name" and "Name" represent the private and public values accessible to the class. Code Snippets allow you to produce this code with a minimal amount of keystrokes.

To produce the property show above:

Move your cursor to an appropriate position the class
Press Control+K, Control+X to bring up the Code Snippets Intellisense Context Menu
Type "prop" and press the Tab key

This will result in the following code:

The cursor starts at the first green section, which defaults to the integer data type. Entering the new data type will overwrite the characters "int". After the actual datatype is entered, pressing the Tab key will advance the cursor to the next green section, which defaults to "myVar". Entering the actual value here will overwrite the characters on line 19, line 23 and line 24 simultaneously. This is where you should see the value of code snippets. While C# is slightly more cryptic than VB.Net, there is still a great deal of value to be gained by using a tool like Code Snippets.

There are similar snippets for classes, interfaces and many other patterns. There are over 50 snippets by default. Custom snippets can also be created.

Anywhere a pattern exists in code, a solid case can be made for using Code Snippets. Imagine a class that has over 20 properties. The economy of scale becomes obvious.

Code Snippets are great, but its just the start. 3rd party vendors like Developer Express have built great tools like CodeRush, which represent the next level up in productivity. If you have a great deal of code that could be automatically generated, tools like CodeSmith represent the 3rd level. If you stand to gain a huge advantage from code generation, you can author your own code generator using Microsoft.Net classes. That's right; code that writes code. I just blew your mind.

#    Comments [0] |
# Friday, April 14, 2006

Query Excel from ADO.Net

So I'm writing this little program that calls web services from BaseCamp. I'm creating some functionality that exports milestone lists to Microsoft Excel. Anyone who is particularly fond of Excel can then make any necessary edits, then upload the changes back into BaseCamp.

There's not much to the Excel query, so long as you know what your doing. This post helped quite a bit with the necessary code to issue select queries on Excel documents.

Right now I'm importing and exporting in ASP.Net using the wizard control to step through the process. I'm thinking this could also be a reasonable Visual Studio Tools for Office (VSTO) project too. Ahhh, its only Friday night, and I've got all weekend to tinker. Yay!

 

#    Comments [0] |
# Thursday, April 13, 2006

Confusion and Misinformation

We had a bit of a false alarm starting about 30 hours ago. Microsoft is releasing an update through their normal means that will alter the way Flash and similar ActiveX technologies render in Internet Explorer. Its due to legal action; but that part of the issue is not relevant here. The facts, as I believe them to be today at 1:35pm, Pacific are as follows:

  • Microsoft announced the intended action in December, 2005.
  • On February 10, 2006, Microsoft made a preview of the update, indexed as 912945, so ISVs and corporations could test the behavior. It was not included in the Windows Automatic Updates feature. Windows users would only have this patch installed if they manually installed it, or their system administrator pushed it onto their machine.
  • On April 11, 2006, Microsoft released a patch, indexed as 912812, that cancels (reverts) the ActiveX behavior change made in 912945. This release, 912812, was distributed up by the Windows Automatic Update feature as a High Priority update.
  • The June, 2006 update cycle will include a patch that will perminently change the behavior of the ActiveX controls, like 912945 exhibits. This patch will likely be distributed by the Windows Automatic Update feature as a High Priority update.

The false alarm started when a rumor started that Microsoft had released the June patch early. We mistakenly assumed that 912812 was the behavior altering patch that would destroy some websites due to the lack of preparation on our part.

I'm reminded of a saying that my friend's dad says: "I thought I was wrong once, and that was when I thought I was wrong."

It never really sat well with me when I heard the rumor. There are corporations that spend millions of dollars with Microsoft, and they probably have significant interests at stake here. I couldn't account for the apparent no-warning deployment of a significant behavior change. Especially when they said the deployment would be in June. It didn't follow the historical pattern of my experiences with Microsoft.

I read the 912812 article over and over. About the tenth or fifteenth time, it finally struck me. By the time my eyes got to the meat of the article, they were so glazed over that I had been skipping the most imporant facts. The rumors had brainwashed me and I was reading what I wanted to see, not was was printed on the document.

This text is the important part:

Microsoft is releasing a Compatibility Patch on April 11, 2006. As soon as it is deployed, the Compatibility Patch will temporarily return Internet Explorer to the previous functionality for handling ActiveX controls. This Compatibility Patch will function until an Internet Explorer update is released as part of the June update cycle, at which time the changes to the way Internet Explorer handles ActiveX controls will be permanent.

So that's pretty clear. The 4/11 patch, 912812, is the compatibility patch and it returns the previous functionality for a short time. It should have been written better. Its still hard to decifier without a good mental picture of the issues.

Now, to be clear, I could be wrong and I will continue some cross checking, but this is what I believe at this moment.

#    Comments [0] |
# Monday, April 10, 2006

ASP.Net 2.0 Out-Of-The-Box

Over the weekend, I was playing in a sandbox, working out some ideas for our client, PICA.

I was really impressed with all of the out-of-the-box functionality available in ASP.Net 2.0, specifically these:

  • Personalization
  • Membership
  • Menu Control
  • Security Trimming
  • Two Way Data Binding

I was able to build a full app, albeit wanting of some CSS love, in about four hours time.

The site shows a few pages of content. It lists some events that were created in a password protected part of the site. The events can be added to a cart and "bought" by a user by clicking a dynamic link to PayPal. The user's cart is persisted via cookies if they come back later. The user's cart is also migrated to a persistant data source if they decide to authenticate. The menu of the site uses the asp.net menu control and it has a nice "Security Trimming" feature that omits any items in the site map that the given user doesn't have access to view.

These features really let me focus on the core business problem, rather than getting bogged down by plumbing and implementation details. The number of new features in ASP.Net 2.0 is huge and a little overwhelming, but I'm starting to wrap my arms around it, after months of reading. I really dig it.

 

#    Comments [0] |
# Tuesday, April 04, 2006

Professional ASP.Net

So I picked up a copy of Professional ASP.Net a few weeks ago and I'm really digging it. Wrox Press has usually done a great job of explaining new technologies and ideas to me, and this book is no exception. I've been reading chapters in my own preferred order, starting with databinding and moving into profiling and membership.

At the end of each chapter my grin just keeps getting wider. I can't believe all of the features that we have available in ASP.Net 2.0, like creating a membership system in about 10 minutes, perhaps in 60 seconds if I study hard enough.

For example, ASP.Net has several authorization and authentication controls that can be dragged onto a webpage from the toolbar. One control contains a prebuilt set of fields to enable a user to register for an account. Another control enables a user to login to the site, another control for resetting a forgotten password, and a couple others. Each control handles all of the internal business logic and database access. It even creates the appropriate database tables. It's a true out-of-the-box situation, AND they're all skinable which lets me pass the buck to our great CSS folks.

Since version 1.0, ASP.Net has been moving in a direction that handles so much of the internal plumbing that most systems need which lets me focus on the real business problem of the day. I love it!

#    Comments [0] |
# Friday, March 10, 2006

Generics versus Object Arrays

The .Net programmers on my team were debating the concepts of how a generic class is better than an object array.
#    Comments [0] |
# Thursday, March 02, 2006

KBAlertz.com Rocks!


I subscribe to a free service from the KBAlertz.com site. You register for the topics that interest you, and they'll send you batches of alerts from Microsoft that are applicable to your work. Today I saw this:

Users who are explicitly denied access to an ASP.NET Web application are still allowed access

http://www.kbalertz.com/Feedback_910610.aspx

Wow, that one will grab your attention eh? It turns out that SharePoint installed on the same server is the cause and a simple fix exists. This is a great service to have, especially in my niche, where I'm expected to know these types of gotchas.

The service isn't just about programming, check out the KBAlertz.com site and see the categories that apply to your work. Its a great way to separate the wheat from the chaffe. An RSS feed might provide similar behavior, but maybe not as granular.

#    Comments [0] |
# Tuesday, February 14, 2006

MSDN Event

A few of us went to a local MSDN event today. A well known .net rock star, Rory Blyth, was on display and evangelizing the Visual Studio Tools for Office (VSTO), mobile development and some teasers from Avalon.

I was most impressed with VSTO for its immediate use. I can imagine a couple of things that would be really sweet in Excel and some managed code. The second session on mobile development really interested Holly & Kelly. I bet a nice prototype app for my boss that displayed a calculation of total project revenue and percentage complete on his new Treo 700w.

The last bomb was Avalon. The release name for this is Windows Presentation Foundation (WPF). It includes extensive use of XAML. That little nugget is going to make a shift in the industry. The output from the framework is outstanding. It will likely change web app production as well as smart client production. There are a few vector based designer tools that will probably make sense to people who use illustrator; but not me. It seems like they're really making an effort to solve that problem a a designer going way out on the edge and a programmer having to reel them in on what is possible. Basically, Microsoft is giving the designer a tool to go as far as they like, and the programmer just ties a long rope to them and holds on for dear life. The integration battles should really be subdued after this product releases in late 2006.

#    Comments [0] |
# Monday, February 13, 2006

2006 Strategic Offsite

Hey, we just got back from the 2006 Strategic Offsite. The company had some good thoughts, big ideas and best of all, a great plan for 2006. As required by all great plans, here's a video montage. A big thanks to L.B. and Frank for lending their wisdom over the two day event.

 

#    Comments [0] |
# Tuesday, January 31, 2006

Web 2.0 and What It Means To You

Hey, I got the January post in just in time (that's JIT) to you programmers.

So, like a lot of things, the importance of Web 2.0 depends on who you are. If you're new to the term of Web 2.0, I've included some important links that help frame the conversation below. Its a difficult term to define. Some of the best I've seen define it as an attitude or thought process. They utilize the most compelling features of the latest software: the web as a service, exposing data that was once isoloated in a silo, enabling the network to comprehend data as well as you do, and applications that improve simply by having more people use them.

Here are a few brief scenarios of people who may or may not know the Web 2.0 stick came up and knocked 'em in the head.

Chuckie the 14 year old music enthusiast
Come on, Chuckie doesn't know what this is!?!? He was his rock and he wants it now. Its tough being a teen! Services like Napster and blogs are great for exposing people to ideas, concepts and points of view. Chuckie has over 200 people in his Instant Messenger list and he interacts with them every night after school.

Shawndell the housewife and online consumer
Websites like Amazon expose their data for others to consume and build upon. The plethora of services spawned by Amazon’s web service contributes to a rich market place of products and services available. Where else can you read up and compare the iRobot Roomba 4210?

Mystie the hardcore C# web application programmer
Well, it means Mystie has a good job for a while. No matter which Web 2.0 camp you're in, computer-centric or people-centric, you have to admit its not easy to build systems that run quickly, without errors and get better the more people use them. Mystie also has to get on her horse and start learning a ton of new technologies: AJAX, Web Services, Avalon, Indigo, and WinFX.

Alphonzo the designer
Zo’s realm of possibilities just got bigger; Photoshop is just the start. He’s thinking about interactivity, how to represent dynamic information that he’ll never see, like a movie review, instant message, or aggregated blog posts. A few years ago, he was greatly limited by how much could be accomplished in the project lifecycle. The frameworks that have sprung up in the past year have reduced the barriers to really cool applications.

There have been some great posts about this new word. I've aggregated some of them here. I've included the links to the website and some excerpts from the postings. I encourage you to follow those links and keep up on the conversation. Its sure to have some insightful nuggets beyond what I've posted here. They respresent a wide range of opinions and viewpoints on the definition and significance of Web 2.0.


http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html

The concept of "Web 2.0" began with a conference brainstorming session between O'Reilly and MediaLive International. Dale Dougherty, web pioneer and O'Reilly VP, noted that far from having "crashed", the web was more important than ever, with exciting new applications and sites popping up with surprising regularity. What's more, the companies that had survived the collapse seemed to have some things in common. Could it be that the dot-com collapse marked some kind of turning point for the web, such that a call to action such as "Web 2.0" might make sense? We agreed that it did, and so the Web 2.0 Conference was born.

In our initial brainstorming, we formulated our sense of Web 2.0 by example:

Web 1.0 --> Web 2.0

DoubleClick --> Google
AdSense Ofoto --> Flickr
Akamai --> BitTorrent
mp3.com --> Napster
Britannica Online --> Wikipedia
personal websites --> blogging
evite --> upcoming.org and EVDB
domain name speculation --> search engine optimization
page views --> cost per click
screen scraping --> web services
publishing --> participation
content management systems --> wikis
directories (taxonomy) --> tagging ("folksonomy")
stickiness --> syndication

What we believe to be the core competencies of Web 2.0 companies:

  • Services, not packaged software, with cost-effective scalability
  • Control over unique, hard-to-recreate data sources that get richer as more people use them
  • Trusting users as co-developers
  • Harnessing collective intelligence
  • Leveraging the long tail through customer self-service
  • Software above the level of a single device
  • Lightweight user interfaces, development models, AND business models

The next time a company claims that it's "Web 2.0," test their features against the list above. The more points they score, the more they are worthy of the name. Remember, though, that excellence in one area may be more telling than some small steps in all seven.

http://radar.oreilly.com/archives/2005/10/web_20_compact_definition.html

  • Web 2.0 is the network as platform, spanning all connected devices; Web 2.0 applications are those that make the most of the intrinsic advantages of that platform: delivering software as a continually-updated service that gets better the more people use it, consuming and remixing data from multiple sources, including individual users, while providing their own data and services in a form that allows remixing by others, creating network effects through an "architecture of participation," and going beyond the page metaphor of Web 1.0 to deliver rich user experiences.
  • That's a great definition, though it also seems that many people pushing various web technologies (AJAX) seem to think that's a Web 2.0 thing even though its been around for years. Your definition is the most accurate for what I'd consider the "true" Web 2.0 applications (del.icio.us, Upcoming, etc.) Posted by: Ben Bangert at October 2, 2005 10:05 AM
  • Web 2.0 is definitely about people -- I believe that the central principle of success in web 2.0 applications is harnessing the collective intelligence of users -- and in my talks, I've often pointed to "the mechanical Turk, a 19th century chess playing automaton with a man hidden inside, as a metaphor for modern web applications, with programmers hidden inside them, performing their daily tasks. (See also my debate with Dave Stutz about how even these web applications harden over time.) I believe that time will show that Web 2.0 started out with exactly the opposite of Dan's formulation: "Web 1.0 was about connecting computers and making technology more efficient for computers. Web 2.0 is about connecting people, and making technology for efficient for people.”

http://radar.oreilly.com/archives/2005/08/not_20.html

Tim Bray writes: I just wanted to say how much I’ve come to dislike this “Web 2.0” faux-meme. It’s not only vacuous marketing hype, it can’t possibly be right. In terms of qualitative changes of everyone’s experience of the Web, the first happened when Google hit its stride and suddenly search was useful for, and used by, everyone every day. The second—syndication and blogging turning the Web from a library into an event stream—is in the middle of happening. So a lot of us are already on 3.0. Anyhow, I think Usenet might have been the real 1.0. But most times, the whole thing still feels like a shaky early beta to me.

  • While being completely right in the details (we are quite arguably on 3.0 or even 8.0 if we're thinking about the internet compared to other software versioning), Tim is completely wrong about the big picture. Memes are almost always "marketing hype" -- bumper stickers is a better way to say it -- but they tend to catch on only if they capture some bit of the zeitgeist. The reason that the term "Web 2.0" has been bandied about so much since Dale Dougherty came up with it a year and a half ago in a conference planning session (leading to our Web 2.0 Conference) is because it does capture the widespread sense that there's something qualitatively different about today's web.
  • More immediately, Web 2.0 is the era when people have come to realize that it's not the software that enables the web that matters so much as the services that are delivered over the web.
  • You have to remember that every revolution occurs in stages, and often isn't recognized till long after the new world is in place. The PC revolution began in the early 80s, and most of the key PC companies and technology innovations were founded in that decade, but it wasn't till the mid-90s that the new shape of the computer industry was clear to everyone.
  • Perhaps I'm biased, because O'Reilly was the source and has been one of the biggest promoters of the Web 2.0 meme, but I think it captures exactly where we are at this moment: a widespread awakening to the fact that the game has changed.
  • There might be a better name (I tried "internet operating system" on for size starting back in 2000), but the fact that Web 2.0 has caught on says that it's as good a term as any. While the patterns that constitute Web 2.0 are far from completely understood, there's a kind of intuitive recognition of sites that are expressing the new model.
  • I guess it's the old debate between language purists, and language pragmatists. The right words are the ones people actually use, and this word is catching on.
  • Obviously I can't disagree with your definition of Web 2.0, with O'Reilly being the source... But what shifted my opinion of the meme from "hot air" to "something useful" was Ian Davis' suggestion that Web 2.0 is an attitude not a technology.

http://www.nik.com.au/archives/2005/10/26/what-web-20-means-for-business/

  • Tim O'Reilly, who describes Web 2.0 as an "architecture of participation"
  • Jeff Bezos said "Web 1.0 was all about making the web easier for users to understand, Web2.0 is all about making the web easier for computers to understand".
  • Web 2.0 is all about making software, web applications and a web service easier to inter-operate.
  • AJAX is about making the web experience for a user as easy if not better than the desktop experience.
  • Flickr and Gmail are not Web 2.0 applications – Web 2.0 applications have nothing to do with using Javascript, CSS, XHTML, using Web 2.0 colors and fonts but rather how the application presents itself to other applications
  • The great Web2.0 applications will be those that take care of a small niche, and do it very well. A great Web 2.0 application becomes a module in a bigger broader solution while at the same time being an application that the user can also make use of independently.
    • Google maps
    • Google Maps Mania, a blog showcasing integration work. o As an analogy, it is like using standard libraries when developing applications – there is no need to write your own components when they are readily available.
    • The core competency at Amazon is their massive catalog and the breadth of metadata available with each article within the catalog. Amazon are adapting to Web 2.0 and are opening up their application as a web service. This service becomes a back-end component to other offerings that have added value in their own way.
    • Salesforce.com realizes that they are never going to be able to extend their application to suit every requirement of every customer. Their approach is to open up their CRM and allow others to develop interfaces that are able to speak to it.
    • If today you are designing a web application for Web 2.0, think not about how the user will see it. Do not attempt to implement a solution that does everything, and do not attempt 'one size fits all' solutions. A Web 2.0 business should rather think more about how they can take and application and work with other solutions, specifically piggy-backing off of large base providers such as Salesforce. This approach provides maximum value to your customer or user and allows a Web2.0 company to focus on one core competency and to be the best at it.
#    Comments [0] |
# Tuesday, November 08, 2005

How to open a door

Hey, I figured out how to open a door!

  1. Approach the door (see figure A)
  2. Enter the secret code
  3. Wait for the buzzing sound
  4. Place hand on door knob
  5. Do not twist the door knob
  6. Push the door closed, then open the door (see figure B)

 

Figure A

 

Figure B

#    Comments [0] |
# Saturday, November 05, 2005

AJAX and Telerik's r.a.d. Callback product

AJAX - Asynchronous Javascript and XML I had a great time working with some AJAX controls on Friday. Telerik has a product named r.a.d. Callback that implements AJAX and extends its other products nicely.
#    Comments [0] |
# Wednesday, August 24, 2005

Back To School

Polishing off the academic method of learning in your career growth.
#    Comments [0] |