• In Defense of CSS Grid Frameworks

    CSS grid frameworks seem to have a pretty tarnished image as far as philosophical topics in front-end web development go. One quick search will reap a plethora of blog posts and articles on the topic. If you have a limited amount of time to get caught up on the controversy, I recommend that you read this, this, this, and finally, this.

    For those of us who don’t really have the time or resources to take the plunge with a framework so as to form our own opinions, we usually pick the safer option: not using a grid framework. That's pretty much the only option I've picked in the past, but it's proven to be a sub-optimal one since I always end up creating a grid or a set of grids depending on number of layout templates for the site. What's more is that these share common characteristics (such as column count, gutter width, etc.) that I eventually abstract out under semantic class names (e.g. features_sidebar, main_content, etc.); dare I say, I end up creating a framework for layout? There are a slew of problems related to maintenance and extensibility with the approach of adding layout attributes in these semantic classes, but I'll spare you the details. Suffice to say, I've marked up enough sites over the years to remain frustrated with the approach of carefully building a layout from scratch purely because it’s a matter of pride. I'm with Ranae on this one.

    Some developers treat it as a matter of personal pride to carefully build every layout from scratch — even if it means they're doing the same repetitive tasks over and over again. For my part, I treat it as a matter of pride to find ways to work smarter and be home in time for dinner.

    Lately, I've had the opportunity to mark up a couple of small sites using a pretty popular framework, 960.gs, and a lesser known one, 1kbgrid. They're very lightweight (well, 1kb is obviously minuscule) and do one thing and only one thing really well: grid layout. In fact, if I were ever to abstract out the layout framework for my sites, I'd probably end up with something pretty close to either of these frameworks. Needless to say, I'm quickly becoming a fan of simple, elegant frameworks like 960 and 1kb especially in light of MIX Online's future needs, and the semantic trade-offs are starting to seem well worth what we get back in maintainability, consistency and clarity. I'd argue that the "grid_4" or "column" are pretty semantic class names, and a difference of opinion there is really just, well, semantics, but let's not start a bar brawl over that just yet. Click on the screenshot below to be taken to a little one-page site I built as the front for my personal domain, Rainypixels, and then view source. The code validates and meets my acceptance bar as far as semantics are concerned. If you have a different opinion on that, I'd love to hear it.

    Rainypixels : Nishant Kothary's Petting Zoo for Pixels

    We're going to be launching a new issue here pretty soon, and we recently made a decision to decouple our lab sites from the core MIX Online experience. Right now are labs are just individual pages within the MIX Online chrome and that presents some challenges as our labs get bigger and start warranting multi-page sites. Decoupling, however, introduces the converse problem: we now have to build a fully functional, potentially visually unique web site every time we launch a new lab, and this site needs to feel like it's a part of the MIX Online family. One way to help draw the dotted line between future labs and MIX Online is consistent layout, and nothing shouts consistent like a decent implementation of a 12 or 16-column grid. Another thing we care about is that whoever is marking up the site is using consistent, clean and cross-browser friendly layout code. After all, we all roll up our sleeves on each other's work all the time. Frameworks like 960 and 1kb give us both and take the guesswork out of the layout process (possibly the most painful part of any web development exercise fondly known as Fire-the-designer-who-came-up-with-that-ridiculous-layout).

    Having said all of this, I'm still not entirely sold (most likely because of the self-induced habitual superstition on the topic). I am, however, having tremendous difficulty coming up with reasons to hold off on dissolving my irrational fear of CSS grid frameworks. Would love to hear you argue either side (as you may point out something that'll save us some major heartbreak years from now). Leave a comment, or contact us on twitter.

  • Creating A Tree Map Data Visualization Out of 200,000 Tweets About Iran

    I let The Archivist (a Twitter data mining application from the Mix Online experiements) loose on the term Iran and it has run for the last five days. At this point, I now have an archive of around ~200,000 tweets about Iran. So, then, the question becomes,  what to do with all that data? After all, data is only interesting if you can do something with it.

    Tim came up with an idea: what if we created a tree map that showed who the top 100 people were who tweeted the most about this topic. That way, you could quickly get a sense of who the people were most active on this topic. So with some guidance from Hans (who built a tree map control for the Descry project) and an assist on my LINQ query* from Joshua, I quickly put together the following infographic (click on it to see a larger version):

    iranviz_sm[1]

    So, of the 200,000 tweets about Iran, the person in the upper left has tweeted most about Iran and then the data distributes itself from there.  From here, you can imagine a lot of possibilities – different pivots on the data, drilling down, etc.

    We just put this together this morning – not sure where it is going but am curious to hear if people find this interesting. Let us know and be sure to follow us on Twitter for the latest updates from MIX Online.

    *Here’s the LINQ query by the way – the crux being the sub select that pulls the avatar out of the grouping:

                
    var items = (from tweet in tweets
                group tweet by tweet.Username into grp
                orderby grp.Count() descending
                select new TreeMapItem
                {
                    Size = grp.Count(),
                    Label = grp.Key,
                    PanelItemType = typeof(CustomTreeMapItem),
                    Tag = (from subtweet in grp 
    			select subtweet).First().Image
                    
                }).Take(100)
                ;
    
    
  • Designing a Twitter Tree-Map

    I worked with irhetoric on many applications, one of which is The Archivist – a WPF Windows Application used to archive and export searches on Twitter. He and I have been both using The Archivist to save Tweets about Iran, and the recent problems around the election there.  As the use of Twitter has been advertised so heavily in the news, we thought it an interesting focus for this experiement, as we could “capture history,” as well as pull an amazing dataset of information that could be of great importance.  So far, we each have over 200,000 Tweets saved in xml files.

    With so much information, what could we do with it?  I asked irhetoric what the possibilities were regarding how much information we could pull from this data: location? Username?  Friends?  Almost anything is possible.

    Mix Online published the Descry Prototype back in January of this year.  The project centered around data-visualization and, specifically, infographics.  I thought that I might be able to contribute to this project by building some myself.

    I started in Photoshop, and produced some comps:

    dataviz_most_followed_1

    In this first example, the idea behind increasing the size of the avatars of the users who are “most-followed” is to be able to, at a glance, see who the most “influential” people are. If someone is highly followed, it stands to reason they reach the broadest audience, therefore making sense to reach out to those users first.

    Placing these avatars on a timeline, as well, you can see the more active parts of the day. We’re also considering the potential of adding a third vertical axis that would deliniate the number of Tweets a user has sent.  If someone Tweets a lot, but is not very influential, that would be different than someone who was very influential and Tweets a lot. Also, someone who is very influential but doesn’t Tweet much, might just be a celebrity or high-profile user. Again, this user has very different value than one who provides lots of good information, and is very influential.

    dataviz_geo_2

    Now, all of those numbers above are totally made up … lorem ipsum, if you will.  The idea, though, of placing the “hotspots” from where people are Tweeting, I thought was interesting, especially if we bind that to time, so we could see the influence of Twitter, and how it affects global communication.

    dataviz_bargraph

    I designed this bar graph to demonstrate the volume of Tweets over time.  The pink graph represents the Twitter-search: “Iran” and the blue bars represent the Twitter-search: “northkorea”.  Again, all data is fake here, and that’s why I needed irhetoric to help me with the data.  

    Irhetoric was able to take some of the code that our MIX Online team member, Hans Hugli, wrote for Descry. He took his Tweets and created a basic tree-map visualization based on the number of Tweets associated with a user.  He took the top 100 Twitter users, and displayed their avatars, usernames, and number of Tweets.

    I'm looking forward to developing these ideas, and hope that anyone interested in implementing these data-visualizations should absolutely feel free. We hope you'll let us know were we can find your project. Be sure to download The Archivist to download, save, and export Tweets you care about. Leave a comment below and follow us on Twitter @MIXOnline!

  • Designing the pdc09 Experience

    It’s June and we’ve been deep in the planning and Creative Design for the Microsoft PDC09 conference to be held in Los Angeles this November. Working with an incredible team, as the “Creative Director” for the conference, I’m intimately engaged in helping guide the aesthetic and user-experience of the conference itself.

    Since 1991, the Professional Developers Conference (PDC) has been Microsoft’s premier gathering of leading-edge developers and architects. Attend the PDC to understand the future of the Microsoft platform and to exchange ideas with fellow professionals. You’ll learn about upcoming products, meet Microsoft’s leaders and top engineers, write some code, and be inspired! Unplug for a few days and think about the future.

    I’ve worked for Microsoft for years, but also have deep experience on the Agency side, working for clients on projects similar to this … user-research, creative exploration, styleguide, website wireframes, visual comps, markup.  But now I find myself on the client-side, sometimes having to force myself to quell the desire to “just get in there and do it myself.” 

    We’ve engaged the Creative Agency, WorkTank, to help with the creation of the styleguide, website architecture, and front-end build, as well as producing all the necessary marketing and collateral materials to help support the conference and the conference attendees.

    In this and forthcoming series of Opinions, it’s my goal to give attendees and those interested in building experiences like this large conference, as well as an online experience which features live streaming video, archived video, social-networking, and mobile.  Throughout the lead-up and through the conference itself, I’ll try and provide insights into “the sausage-making” of an event like this, specifically geared toward the designers (but, of course, hopefully appealing to everybody.)

    One of the things we’re going to be focusing on is the session-browsing experience.  We found that at PDC08 and MIX09 both, finding and viewing sessions was less-than-intuitive.  We’re spending particular attention to this aspect, and hope to greatly improve the experience.

    session browser pdc

    session browser mix

    Working on an event site like this is a particularly interesting series of problems, specifically centered around the fact we have two very specific demographics we’re trying to accommodate.  Firstly, we’re trying to attract the “elite developers of the world” to the event, to join the conversation, learn, and collaborate.  Before the conference we need to provide them with the information they need and *a reason to come.*  Sometimes this is particularly difficult as we need to keep some announcements behind the curtain until the event – the very announcements that would attract developers to an event like this.

    Additionally, we need to provide this group an easy way to find sessions they’d like to attend, create a schedule of sessions they’re interested in, update them with new conference-related information.  Often this information is not actually available until sometimes fairly close to the event, presenting another challenge.

    And with one team focused on the website, we also will be concurrently working on developing the actual conference experience, which includes everything from staging and signage to t-shirts, swag-bags, and everything that goes in them.  Sometimes working with the agency on these items is a refreshing break from the bits and pixels of working on the web-experience.  While working in print can be frustrating at times, it’s nice to change media from time-to-time.

    The second “customer” we’re trying to reach is the developer that may not be able to actually attend the event, but still wants to experience the conference as if they had been there.  We still need to provide the “virtual attendee” an intuitive way to browse the sessions, but for these attendees, the online-experience becomes even more crucial.  We do our best to provide live-streaming of the keynotes, 24-hour turnaround for the on-demand sessions, and various ways for download and sharing of the sessions, including a “download all” option, so you can see everything.

    mix09 live home

    So, as you can see from the above, there’s already a considerable amount of thought going into the event, and we’re just getting started.  We welcome your feedback and ideas on how we can make the PDC09 experience the best for everyone, both at the event and online.

    Have you attended a PDC before?  What was your experience?  Let us know and be sure to follow us on Twitter for the latest updates from MIX Online.

     

    PDC09
    Since 1991, the Professional Developers Conference (PDC) has been Microsoft’s premier gathering of leading-edge developers and architects. Attend the PDC to understand the future of the Microsoft platform and to exchange ideas with fellow professionals. You’ll learn about upcoming products, meet Microsoft’s leaders and top engineers, write some code, and be inspired! Unplug for a few days and think about the future.
    Tuesday, November 17, 2009 through November 20, 2009
    Los Angeles Convention Center
    1201 South Figueroa Street
    Los Angeles, CA 90015  USA
  • Welcome to the Webtop: Wiki-OS

    Wiki-OS is a pretty interesting project I came across.  They have created an in-browser environment where one can build, compile, execute and share .NET applications.  Sound trippy? It is!  They call it a webtop -- web meets the desktop. Here's how they describe themselves:

    WIKI-OS.org is to software what Wikipedia is to knowledge: it is the world's only open-source user-generated web OS where anyone can contribute right away like a wiki. It allows launching rich-client applications directly inside the web browser without installation. It allows viewing and modifying the source code of any application by clicking the Edit button.

    WIKI-OS.org includes an online Visual-Studio-like IDE to collaboratively develop C#/XAML/WPF .NET 3.0 applications. For the first time ever, the users of an application can modify the application directly from its user interface (patent-pending technology by Userware-Solutions), and, when someone makes a change to the source code, the application gets instantly updated on everyone's computer.

    WIKI-OS.org encourages developers from all over the world to join their forces to build a place where every single connected person in the world can have free, instant, and unlimited access to the best open-source software applications.

    Their "OS" includes notepad, a file browser, a XAML Designer, a code editor and some other utilities, as well as a bunch of nifty samples.  Any application that you run can also be "edited" which means seeing the source code for that project.  They also have this notion of friendly URLs, allowing you to link directly to one of their applications or an application you build.  For example, here's a link directly to their version of Notepad: https://www.wiki-os.org/NotepadProject/Notepad

     

    The code editor is pretty nice, with color coding, code snippets, find/replace, property panes, events panes and even the ability to reference other people's projects, so that you can componentize applications.  (For example, their IDE reuses the XAML designer application, which they also provide standalone.) 

    Speaking of the XAML designer, I was also impressed with that. They support drag/drop XAML creation of most of the basic control (buttons, checkbox, etc.) as well as most of the layout controls (grid, canvas, etc.). Their design surface supports nesting controls in other controls.  And there is also a property pane and events pane for the XAML itself.

    They even have a database layer, so that you can store/access information on their server from applications you build.

    I spent some time playing with it and was impressed with the performance and general ease of use of the application.  Plus, the spirit of the project is right on, bringing the "view source" mentality to rich-client applications running in the browser.  I have always thought that XBAPs have a wealth of untapped potential; Wiki-os is a great example of what XBAPs can make possible inside the browser.

  • Join us at Web Design World 2009 in Seattle

    One of the cool aspects of being on the MIX Online team is that we get to participate and speak at several conferences. Members of our team have made appearances at various conferences over the past year including FOWA, An Event Apart, SxSW, Web 2.0 Expo, SIGGRAPH 2008, MIX09, PDC08, Google IO and Web Design World (Boston). I'm sure I'm forgetting a few. The upcoming year will likely be a little tougher because of the economy and inevitable budget cuts, but the good news is that we're lucky enough to have a couple of great events right here in Seattle. One that recently took place, An Event Apart, and one that's coming up, Web Design World.

    Web Design World was a pioneer in the events space for web design and development (first one was held over a decade ago!) They have one of the more interesting about pages as far as conferences go, so if you want a little more history, check it out. They've stuck with their early vision of setting designers and developers with good presentation chops loose on stage. It's a simple recipe but it works wonders; the result being a conference with a line-up of fantastic speakers and sessions without the ambient noise you often find at conferences. I'm not going to name names, but many of the web designers who are now "household names" got their start at Web Design World.

    We had the opportunity to speak at their Boston event last December where we also got to meet some of the conference organizers. Turns out that we share a lot in common, so when we heard they were going to be doing their next event right here, we jumped at the opportunity to get involved. None of us our speaking this year, but we'll be in attendence and we're also sponsoring the WDW MIX(er) on Day 2 at the Tap House Grill. We love being ambushed, so don't hesitate to say hello.

    Oh, and before I forget, go register! We're offering an exclusive discount code to help you out in these rough times below. You have no excuses now.

    Web Design World 2009 Seattle: July 20 - 22 The Web design conference for the here and now. More than 20 practical, no-fluff sessions and workshops on today's design and business challenges: CSS, JavaScript, community building, e-commerce, graphics, typography, Photoshop, and more. Learn from the best and network with your peers. Save $395 by registering with this promo code WDWMS to get the 3-day all access Passport Package for only $1,000.
    Red Lion Hotel
    1415 Fifth Avenue
    Seattle, Washington 98101  United States

    If you're planning on attending, let us know via twitter.

  • Sex, Evolution, and User Ratings

    peacock A few days ago during a design discussion, our team was forced to grapple with that age-old community-design question: 5-star user ratings for content, or a "likes" feature? When allowing users to provide feedback on your content, is it best to use a range of values, or give a "thumbs-up" (and maybe a thumbs-down)?

    User ratings help foster participation and engagement, and help the best content filter to the top. But, as Derek Powazek has been saying since at least 2003 in his talks about community, whenever you create a user feedback system, you create a game. And people will game the system.

    The typical community designer, when faced with the fact that people will game feedback systems, focuses on incentives. What are the incentives for people to provide feedback in the first place, and how is that feedback used within the system? What incentives can you give in order to get better quality feedback? How do you "reward" people with "social capital" or "whuffie"? Can you create a feedback loop that shows hot items rising to the top, to encourage people to "vote"? These approaches have their merits, but I think that this is the wrong way to look at the problem, and just creates more trouble down the road.

    As my teammate Nishant observed during our discussions, you don't need to bribe people to get them to express approval or disapproval of one another. People love to judge one another, even if it comes at a high personal cost. This is one of the most enduring and unique aspects of human nature. The real challenge for a community designer is to align the rating system with this definitive human characteristic, and to avoid any incentives which distort people's inborn desire to provide feedback.

    The best book I have found on this topic is "Comeuppance: Costly Signaling, Altruistic Punishment, and Other Biological Components of Fiction", by William Flesch on Harvard University Press. It masquerades as a book about evolutionary biology and literature, but it's really about community design. The author starts by enumerating a set of extremely powerful and innate urges that motivate all humans:

    1. People love to reward those who do good, even at high personal cost. This is called "strong reciprocation"
    2. People love to punish those who do bad, even at high personal cost. This is called "altruistic punishment" (altruistic, because it is not done out of individual self-interest)
    3. The reward and punishment needs to be observed and understood by others. It cannot happen in a vacuum.
    4. This impulse extends through multiple levels. We watch how people punish and reward one another, and are motivated to respond. We are motivated to reward the "altruistic punishers" and "strong reciprocators", even at high personal cost. And we are motivated to punish those who do not reciprocate or punish as they should.
    5. Over a lifetime, we form opinions about people based on a *history* of how they have responded to such situations. Reputation is a narrative that we hold regarding someone's history of strong reciprocity and altruistic punishment.

    These facts about human nature are self-evident, and therefore don't really need an explanation, since they are true. However, the author uses evolutionary biology to provide one explanation for why this is true.

    In species where the creatures "choose" or "select" their mates, sexual selection is often driven by something called "costly signaling". A costly signal is an evolutionary characteristic that ironically works *against* the creature's self-interest, and makes him less likely to survive. The classic example is the peacock's feather display, which makes him more vulnerable to predators and diseases, but is irresistible to the female. By choosing the peacock with the grandest feathers, the peahen is choosing a mate who is *so* genetically superior that he can survive *despite* the impediment of an impractical pile of tail feathers. Stay with me, because this is where things get really interesting for community design:

    1. Costly signals must be easily observable and quickly identifiable. The peahen needs to be able to judge the peacock's mating potential by watching him.
    2. Costly signals must be very difficult to fake. Otherwise, you end up with mimicry, and everyone wearing the same designer jeans and pheromone-laced perfume. The only way to know that a signal is honest, and not faked, is if that signal is costly.
    3. Costly signals, and the responses to them, are not conscious or calculated. They are closely linked to, and as primal as, the sexual reproduction instinct.

    In this framework of evolutionary biology, altruistic punishment and strong reciprocation are the human equivalents of the peacock's feathers. They are driven by primal emotional impulses that often act against our own individual self-interest, are acted out publicly to be observed by potential mates, and are extraordinarily expensive to maintain biologically. The human urge to rate content on message boards is as closely related to our survival instinct as is a peacock's urge to fan his feathers and strut.

    So, what does this say about community design? Here's my take:

    1. Make your rating system as natural and visceral as possible. Nobody watches a mugger on the street, and remarks to his friends, "On a scale of 1-5, I rate that mugger a NEGATIVE 10, bro!". Stick with "likes".
    2. Don't put too much emphasis on aggregating, tabulating, or averaging people's feedback. Voting is too abstract and disconnected from the way human nature works. You can quietly mine the community's behavior for your own purposes, but don't put it in people's faces.
    3. Encourage content that is personal and judgeable. When people have a chance to judge another human being, they will. So make sure that they see the face and personality behind the content, and avoid being too passive.
    4. Make sure that the act of rating is public and personal. Ideally, the rating will be attached to the reputation of both the person who wrote the content, and the person who did the rating. You should be able to look at a person's profile and see who he rewarded (and punished). You should be able to look at an author's profile and see who rewarded them or punished them.
    5. Don't worry if it takes some effort. People often think of "likes" as being superior simply because people get instant gratification. I even wrote a whitepaper arguing this point back in 2000. But I think this is probably wrong. In fact, you could probably add a CAPTCHA or similar "expensive" step to your rating system and get better engagement. Costly signals are supposed to be costly, and people are already highly motivated to judge one another. It's not as if you're trying to entice them to do something unnatural, so don't worry if they need to work for it.

    So, what do you think? Do you prefer "likes", a 5-star rating, or something entirely different? You can reply in the comments section here, or let me know via twitter.

  • Benefits of Card Sorting

    A few of us on the MIX Online team are busy at work collaborating with other teams to host the PDC09 in Los Angeles this November. Part of that is creating the PDC09 website. We're working with Worktank, and recently began the process of working out the information architecture of the site, in addition to the creative aesthetic. Recently, there were about 6 of us in one of the more smelly of the conference rooms here in building 24 on the Microsoft campus.  Between Worktank and Microsoft employees, we had project managers, marketing managers, Directors, and a few designers ... a diverse group with interests vested in some very different issues. Some of us were focused primarily on driving awareness and registration, while others were focused on delivering a live-streaming event to remote viewers around the world.  Still others were focusing on the technology to be used to support the decisions we were making, and others helping to guide the process of deciding the content structure of this potentially robust and content-rich site.

    During the initial exercise in working out the I.A. for the PDC09 site, we used the process of "card sorting." It had been a while since I had gone through that exercise, and remembered how very useful it can be. For the un-initiated, the wikipedia definition states:

    Card sorting is a simple technique in usability design where a group of subject experts or "users", however inexperienced with design, are guided to generate a category tree or folksonomy. It is a useful approach for designing workflows, menu structure, or web site navigation paths. Card sorting has a characteristically low-tech approach. The concepts are first identified and written onto simple index cards or Post-it notes. The user group then arranges these to represent the groups or structures they are familiar with.

    In particular, I found this exercise useful in abstracting the structure of the PDC09 site. By looking at cards and sorting them by priority rather than looking at a screen and "envisioning navigation," we were able to really discover what content was important, what the hierarchy of that importance was, and make decisions on the navigational system and content structure in a much more "data-driven" manner. By abstracting what we *feel* from what we *think,* our decisions make much more logical sense.

    Card sorting from boxesandarrows.com

    Card sorting from boxesandarrows.com

    Card-sorting also was particularly useful in providing a common language between the design professionals and the other stake-holders. By taking the pixels off the screen we provided something tangible that people could actually move around to help express their thoughts and opinions.  Also, by making it easier for people to communicate, the process of coming to conclusions and making decisions was much more direct.  Everyone likes shorter meetings that get stuff done, right?

    Finally, the exercise helped us define our core audience. In the case of the PDC09 planning, we really established concretely the two audiences we had to consider: the event-attendee and the remote-viewer. Due to the fact that the cards were so easily manipulated, we were able to think through multiple scenarios on-the-fly and better understand how the different audiences would approach the architecture of the site.  For instance, something like travel and location information might be very important for the event-attendee, but to the person viewing sessions from home or work, that information is about worthless.  How do we ensure that the information is easily findable, but unobtrusive?  Where does it make the most sense to put this information?  Under registration, or under About The Conference, for example?

    By having a system for all the stake-holders to be able to quickly run through scenarios, more easily think through the problem in a common language, and better express their opinions, the exercise of card sorting made a lot of sense.  Now, really, it doesn't necessarily make sense to go through the whole process for every site.  However, for complex sites, or those sites with many stake-holders trying to ensure success, card sorting can be a very useful tool. There's a great article by Donna Spencer that goes into more detail on the process and some of the benefits and drawbacks to the nuanced methods.

    So, have *you* ever used card sorting to work out the structure of a site, develop navigation, or solve another sort of problem?  What's been your experience?  Did you find the process useful or just another pointless exercise that kept you from just gettin' to work?  Tell us your story by commenting below, and be sure to follow us on Twitter at @mixonline.

  • On Deployment: ClickOnce & The Client Profile Configuration Designer

    I recently engineered the deployment of two client applications, Glimmer and The Archivist. Both are WPF applications that required the .NET Framework 3.5, which is not installed by default on Windows XP or Windows Vista. (It is on Windows 7 – rad! – yet another feather in the cap for Windows 7, which I am using as my dev machine quite happily, BTW.) So, I needed deployment strategies for getting not only my application on the machines but also the .NET Framework 3.5.  I took different approaches for each application, which I will discuss below.

    For The Archivist, I used ClickOnce.  I did everything through the Visual Studio publish features, which work great -- gotta love wizards. I’ve always been a big fan of ClickOnce. I used it for Flotzam and also for many of the other prototypes I’ve written.  My favorite feature of ClickOnce is the auto-update feature. The application always phones home when the user starts it to make sure it has the latest version and, if they don’t, prompts the user to upgrade. This makes it trivial to push out new features -- and the rare bug fix :).

    The one thing I did above and beyond what Visual Studio generates is to roll my own HTML page instead of the publish.htm that the wizard generates.   When the user clicks the Install Now link, I fire off a javascript which I took from the Windows SDK and slightly modified. The script  looks at the USER AGENT string to detect if the user has the .NET Framework or not. If they don’t, I send them off to a setup.exe which will do the installation. If they do, I send them to the .application file. If you are interested in this script, you can see it if you view source on The Archivist homepage.

    For Glimmer, I couldn’t use ClickOnce because of Glimmer’s plug-in model. (Here’s a good discussion of ClickOnce vs. MSI if you are interested.) So, for Glimmer, I used Visual Studio to create an .MSI and then used the new Client Profile Configuration Designer 103-2[1] to create a setup program that installed both .NET 3.5 and Glimmer in one fell swoop.  This is a great tool that made it easy to create a slick looking set-up program with a good user experience.  They’ve got a bunch of good documentation up on WindowsClient.net as well as a video that walks through using the tool.  If you are doing any deployment of WPF applications and you can’t use ClickOnce, I’d highly recommend using this tool.  And the folks who built it are very responsive as far as feedback and help. 

    If you installed either Glimmer or The Archivist, I’d be curious about how the experience was, especially if you didn’t have .NET 3.5 on your machine. 

  • Have You Ever Felt Burned Out?

    I logged into Facebook this morning to find a new issue of A List Apart through their Facebook app. A guy by the name of Scott Boms wrote one of the articles in the issue; it's about how we, as an industry, are very prone to stress-related burn outs. It's appropriately titled Burnout, and I highly recommend you read it. He pretty much had me at the opening paragraph -

    Web professionals are often expected to be "always on" - always working, absorbing information, and honing new skills. Unless our work and personal lives are carefully balanced, however, the physical and mental effects of an "always on" life can be debilitating.

    Scott articulates the "what" and "how" of a burnout pointing to some established research. And, as we've come to expect from A List Apart publications, the article also offers up some great remedies for preventing burnouts. As someone who's been through a couple of burnouts, I can tell you from experience that his remedies are spot-on. Peek into the discussion area for the article and you'll find some more practical remedies. The article alludes to a type of burnout that’s caused by your employer/workplace. In other words, burnouts caused by working in a dysfunctional environment; these are very difficult because you don't have much control over how they manifest. However, I suspect that a good number of burnouts in this industry are completely self-induced, especially for folks who are lucky enough to find themselves doing something they love to do in their free time (guilty as charged). While most, if not all, remedies mentioned in the article would still go a long way in fighting symptoms of a self-induced burnout, in my experience they'll never truly fix the source of the issue (i.e. your own personality) and consequently, you'll be prone to relapses.

    If you think that your personality is bringing on a burnout, then what you really need to be working on is reprogramming your personality. Here are a few tips that you can try in addition to those provided in Scott’s article:

    • Acknowledge the Issue

      OK, so Scott talks about this, but I want to stress on it. The source of self-induced burnouts is your own addictive personality, so you need to fix yourself. If you find yourself pulling your mobile device out of your pocket every couple of minutes to refresh your inbox or to glance at the twitter stream, you have issues. You're addicted, and addictions generally have negative consequences. The most sustainable way I've found to fix personality issues around susceptibility to addictions is to truly acknowledge that you're addicted and that you want to do something about it. Once you've truly acknowledged the issue, the other remedies have the potential of permanently fixing self-induced burnouts.
    • Work 9 to 5

      Scott talks about how it’s becoming impossible to do the 9 to 5 thing these days, but I tend to agree with one of the comments that succumbing to that attitude is one of the root causes of burnouts. The good news is that if you're suffering or on path to a self-induced burnout, then putting a 9 to 5 boundary in place is completely your call. You have no excuses to not enforce it. By putting the boundary in place, you're going to force yourself to make time for yourself, your friends, family and hobbies. At first you may not do anything with this "free time", and that's OK.
    • Be Consistent

      Don’t cheat. Beating burnout is like going to rehab (OK, never been to one, but from what I hear, it sounds a lot like it) – you need to cut off your supply, cold turkey, and then consistently work within the framework of your remedies till you're reprogrammed. It will happen, slowly, but surely. Just do yourself a favor and don't cheat yourself. Not even once.

    Having said all this, there is a silver lining here best captured by a Def Leppard lyric, "It's better to burn out, than fade away." So, what's your take? Have you ever had a burnout? Why? How’d you get out of it? Got some tips for us?

WE HAVE OPINIONS, and this is where we let them loose. We're not afraid to share our opinions, and expect the same from you.

We’d love to hear your feedback. Want to contribute? Write us.