Monday, November 05, 2007

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.

Monday, November 05, 2007 10:29:32 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Wednesday, July 18, 2007

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.

Wednesday, July 18, 2007 8:57:20 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, May 21, 2007

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.

Monday, May 21, 2007 5:51:25 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, May 04, 2007

 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!?!?!?!

Friday, May 04, 2007 9:19:45 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Sunday, April 29, 2007

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.

Sunday, April 29, 2007 8:58:24 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Sunday, April 01, 2007

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.

Sunday, April 01, 2007 3:51:09 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 

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!

Sunday, April 01, 2007 3:29:02 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 

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?

Sunday, April 01, 2007 2:27:05 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [1]  | 
 Monday, March 05, 2007

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!

Monday, March 05, 2007 10:28:20 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, February 15, 2007

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.

Thursday, February 15, 2007 4:47:54 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Sunday, December 31, 2006

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.

Sunday, December 31, 2006 3:36:16 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, November 27, 2006

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.

Monday, November 27, 2006 10:48:29 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [2]  | 

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.

Monday, November 27, 2006 10:39:22 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [2]  | 
 Wednesday, November 01, 2006

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!

Wednesday, November 01, 2006 10:14:52 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, October 30, 2006

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#.

Monday, October 30, 2006 2:11:59 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Sunday, October 15, 2006

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!!   :)

Sunday, October 15, 2006 7:35:33 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, October 03, 2006

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.

fun | learning | popart | events
Tuesday, October 03, 2006 2:42:21 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, July 24, 2006
Learning about CSS positioning.
Monday, July 24, 2006 5:10:56 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
Back to basics with Subversion
Monday, July 24, 2006 7:18:21 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, July 03, 2006

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!

Monday, July 03, 2006 7:21:10 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Sunday, July 02, 2006

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?

Sunday, July 02, 2006 8:47:38 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Saturday, July 01, 2006

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...

Saturday, July 01, 2006 1:45:28 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, May 18, 2006

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.

Thursday, May 18, 2006 9:50:26 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, May 01, 2006

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.

Monday, May 01, 2006 8:02:51 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, April 14, 2006

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!

 

Friday, April 14, 2006 8:51:40 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, April 13, 2006

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.

Thursday, April 13, 2006 12:48:20 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, April 10, 2006

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.

 

Monday, April 10, 2006 2:15:14 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, April 04, 2006

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!

Tuesday, April 04, 2006 8:01:09 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  |