Archives

Archives / 2008 / December
  • Goodbye PDA, It's Been Nice Knowing Ya

    I'm ditching my PDA (currently a BlackBerry Curve) and my laptop for note taking and going retro.

    For the past few years I've been taking notes in various digital media. Back when I had my Palm, I would do handwritten notes (sometimes trying to fight that silly PalmScript recognizer). When I had a tablet available, I would do the same in OneNote and recently I just fill up OneNote pages with notes and scribbles (all typed in). The biggest issue I have with digital note taking is, while it's fast on data entry, it's horrible in capturing intent and nuances of information.

    Recently I got inspired by a concept Mike Rhodes seems to have earmarked back in 2007 called "sketchnotes". It's the idea of capturing hand-written notes in a book, much like how you would scribble notes in class if you were that sort of person, adding in images and enhancing the notes with fonts and flair. I remember those days as I would use my sketch book for pretty much all notes rather than a traditional lined book (I went to a Vocational Art School so 70% of my classes were art based and thus I had dozens of sketchbooks for use throughout the year).

    Sketchnotes are just like those days of taking notes in art class, except now I use them in corporate meetings, conferences, and impromptu get togethers at user group sessions, code camps, etc. They're much easier to lug around than a laptop (although I usually always have my laptop handy) but the best thing is they're easier to get started (it's like having a solid-state drive) and require no batteries!

    The best part of sketchnotes is that you tend to flow free with the information and really focus on what's being said as you translate it into something more meaningful than just words on a page. Changing fonts is much faster than on the computer (and I can invent fonts on the fly) along with bits of flair (borders, highlighting, shadows, etc.) that punch out a concept. It's a slower process than capturing brain dumps onto OneNote and typing in information, but it lets me be more creative (something I've been lacking in the last few decades) and helps me understand the concepts that were being presented or talked about. It's also like having a whiteboard hovering around with you all the time as I can quickly do a screen mockup as the customer might be describing his/her needs which I can then just turn around and show to them "Do you mean something like this?". Fast feedback cycle, I like that.

    Here's an image from my current sketchnotebook (taken from the ALT.NET Open Spaces Conference in Calgary a few months ago):

    The image is from my CrackBerry so not very clear. I'll be creating a new Flickr pool and uploading higher quality images as I get them scanned.

    My weapons of choice are the unlined large size (5"x9") Moleskin plain soft notebook and a black Uni-Ball Vision Micro Roller Pen. The Uni-Ball bleeds ever so slightly to get that "homemade" effect (something that's missed in digital) and lets me be free with the note taking, not worring about erasing (since you can't do it anyway). Moleskine rocks and while they're more pricier than other books, they hold up under stress (and come with a cardboard holder in case I have some handout to stash).

    Yes kids, you can do something like this with OneNote and a tablet PC but a) I don't always have a tablet PC b) I find my OneNote notes turn into a graveyard of information that's always being sorted and never being used and c) I still need batteries to run OneNote (not to mention an OS that takes a few minutes to boot up). I'm not saying abandon your tablets and Moleskine is king (not that anyone would listen to me anywho). I use this as an alternative and like it, but YMMV.

    Anyways while it might not be a new concept for you, it's something I've been trying to get into lately and now I'm comfortable doing on a regular basis. It took a few false starts and weeks of practice to get back to scribing (and my hand still cramps up from time to time as I have to switch back and forth between paper and keyboard). Sometimes the notes are pure chicken scratch and I have a hard time deciphering them but it's the imagery and little things that make it work for me. They say a picture is worth a thousand words and I believe it. I feel like a giddy school girl again, scribbling images madly that remind me of School House Rock (and we *all* know how cool SHR is).

    So goodbye digital input, it's been nice. Hand writing is back for me and it's here to stay. Maybe give it a try yourself?

  • The Anti-Architect

    I'll come out of the closet for a moment as I become a little more jaded in life and bitter this holiday season. I'm an Anti-Architect. I'm all for software architecture as the alternative is let some guy who read "Teach Yourself SharePoint Programming in 24 Hours" unleash onto an Enterprise solution and then have some high priced consultant come in and clean up the mess (or the guy that created the mess *was* a high priced consultant and now you need an even higher one to fix the problem) but while I'm an Architmatech in some sense of the word, I'm also a developer at heart and a creator in essence. I'm a little bit Country, I'm a little bit Rock and Roll.

    I was looking over some of the dated material on Microsoft's Architecture Certification Program and found their role definitions here. One of the issues with the IT world is that MSFT publishes some white paper, document, or scans a napkin and IT managers flock to it like flies on dung, spouting as the Gospel and Word and declaring that everyone follow it blindly. If Microsoft wrote it, it must be right. Right? Maybe. Some stuff they get right, others they're way off base.

    Here are my top 10 reasons into what makes an Anti-Architect (for lack of a better term)

    1. Live, breathe, and eat technology through knowledge and experience every day. Just because you're labelled an "Architect" (big or small "A") get coding! Keep your wits about you with modern development approaches and open the door to new stuff.
    2. Don't make key technical decisons on a project when you don't know the day to day operations of system internals. Things change and the world doesn't sit around waiting for you to catch up. Keep sharp and be real about what is happening.
    3. I'm a propenent of minimalism and like to keep things as simple as possible. Playing buzzword bingo with your client just cause unnessary headaches for developers. Put your developer shoes on when talking architecture and think, what would I do in this situation?
    4. Negotiation is your key asset and skill. Use it wisely and strike a balance between technical complexities and business needs and decisions. You're no good to a team if you're sitting in an ivory tower spouting words of wisdom that favour the nerd in you. Don't be proud of the technological terror you're about to create.
    5. Perspective is prime and the world is a prism. Looking at things with blinders on just makes limited decisions and paints a team into a corner. Be open to suggestions from everyone and weigh those ideas against the goal. It's like the symbol of Justice (no, not THAT Justice) with the blindfold on. Any idea is possible until it's validated against the constraints that you might face. And even if there are constraints driving you down a path, stop for a moment and do a sanity check to see if the path is really forcing you to make decisions or you're the one paving the road.
    6. There is grand design and there is reality, and never the twain shall meet. Going back to simplicity and the YAGNI principle, try not to force some design pattern down everyone's throat. Keep repeating to yourself simple; change; stable and guide your decisions against them.
    7. Don't become the Bus Factor. If you get hit by a bus, can the system continue? Spread the knowledge and wealth and be transparent in decisons. While you might be positioned as the authoritive decison maker, input from the team is invaluable and needed to sustain the life of any software system.
    8. Design by committee doesn't work, but neither does the dictatorship model. Be the guiding driver behind decisions as you've apparently got the knowledge but don't decide in a vacuum. Key architectural decisions should be vetted with the team so not only you can be aware of scenarios you didn't think of, but the team is involved in the game.
    9. Filling out documentation for documentation sake is for the birds. My principle is to document what you need at the appropriate time of communication. If you have to present an idea to the team in order to understand it, that's when it might become concrete (whiteboard, Visio, code, etc.). Don't covet the world's knowledge in your head.
    10. Know your limitations and relegate to your peers when you're out of your league. Not everyone knows everything (unless your name is Scott Hanselman) so making decisions on say a SharePoint installation when you don't know SharePoint is just wrong. I call this the Life Preserver clause. Don't be afraid to call out to the lifeboat and have them toss you help when you need it.

    These are some ideas around being what I call an Anti-Architect. Use them as you see fit, YMMV.

  • WPF Application Quality Guide, Revision 4 Released

    Microsoft has put together another version (this is rev 4) of their WPF Application Quality Guide, a fairly complete set of tasks and ideas around writing good quality apps using the Windows Presentation Framework.
     
    http://windowsclient.net/wpf/white-papers/wpf-app-quality-guide.aspx
     
    A few things to note:

    • I don't subscribe to the sample tests they provide and think they're a bit of a joke so squint your eyes when you read the guide. For example, according to ECMA-355 standards, a new operation can never fail yet they do silly things like Assert.IsNotNull(p) on the Person object. Awesome!
    • I would never name a test PersonConstructorTest1 and hope you don't think this is a recommendation.
    • The PersonConstructorTest2 is invalid as the assert will never get called. Again, this is not a best practice or even a guide on writing unit tests. It's supposed to show you concepts around it, but we're big boys and girls now and know better than this.
    • While it's considered a "guide" they mention "best practices" but don't call it that. I don't see any difference between "guide" and "best practice" and again, don't agree with some examples in this guide so you should apply some kind of nerd-filter to it in order to make it work for you and go read a real book on writing unit tests.

    Overall it's a good place to start when looking for resources on writing WPF apps and has some great links on real "Best Practices" for designers and developers. Check it out.

    (thanks to Greg and The Oren Machine for comments that I've incorporated into this post)

  • To Everything There Is A Season

    Where do I begin? There's so much stuff in my head I'm pretty much going to explode and leave little gray bits of matter all over my cubicle this morning.

    Free Range

    First off, I'm now a Free Range Chicken. As the economy slumps and oil hits a new low, living in an Oil and Gas city has it's merits but it also has it's drawbacks. With a whack of new projects being cut from Petro Canada's budget my major client right now has to let me go. They've given me by the end of the year to finish up work which is super cool of them, rather than being led out of the office last week. Of course the next couple of weeks I'm doing a massive brain dump to the internal developer wiki to make sure everyone is up to speed on where things are and how we've been doing things. It's been an awesome road here as I started a couple of years ago with them doing taxonomy and SharePoint setup but then the last couple of years it's been primarily focused on Agile (mostly Scrum with some Kanban lately) mentoring and setup. The teams are focused now with everyone writing unit tests and practicing TDD; projects being generated initially from TreeSurgeon; Subversion over TFS for a source control system; and a whack of other new stuff that I'm proud to have been a key initiator of. Looking back it's almost draconian in how things were being done (no tests, VSS; old-style code-behind web sites with [ack] SQL statements in code, etc.).

    While I am a Scrum/Agile practitioner coach and mentor and all-around SharePoint guy I considered a few other ideas for a new career:

    • Internet Mime. Mimes creep me out in person. I think if one came up to me I would probably punch him in the throat "just 'cause" but an Internet Mime! That's da bomb. I could post pictures of me doing Running Man or Geek in a Box and instructions as to how to become an Internet Mime yourself. Just not sure if the business model is valid at this point.
    • Personal Facebook Assistant. How often do you visit Facebook only to be annoyed by the latest Vampire vs. Werewolves invitations? Hire me and I'll perform the following duties for you daily:
      • Log onto your Facebook account and accept any invites you have to fill up your profile with loads of spam.
      • Grow your personal social network with people you hardly know. 
      • Post messages on strangers walls promoting your own website or service.
      • Participate in random message boards and say thought-provoking stuff like "Facebook sucks" and "I'm really a guy"
    • Link Junkie. Rather than you surfing the internet to find nuggets of info I'm sure your boss would appreciate if you paid me to do it for you. I'll comb the Internet for interesting things based on keywords you send me. Heck, if you don't know of any keywords you want I'll make some up for you. Consider me your personal Google appliance and I'll give you the best of the web without the bytes to download it.

    In any case, I'm out and about and hungry like a wolf. Ring me if you're interested.

    TechDays

    TechDays kicks off this week in Calgary at the Round-up Centre. I'll be doing two sessions on WPF with the details below. Hope to see you there!

    Building Differentiated UI Applications Using WPF

    The Patterns & Practices Smart Client Software Factory includes a set of guidance for developing composite smart client applications in WinForms. With the release of WPF, there is a need for bringing the Composite Client scenario to the framework. This includes supporting a new Differentiated UX experience. The "Acropolis" incubation project, which has now been folded into an upcoming platform release, is the future, but what is the answer for customers adopting WPF today? Come to this session and find out about new Composite WPF (CWPF) client guidance that Patterns & Practices are developing jointly with the UIFX team. We get in the driver’s seat and take CWPF out on the road to see what she's made of. We dive into demos, check out the new APIs, and talk about the features.

    The Best of Both Worlds: WPF in WinForms and Vice Versa

    While Windows Presentation Foundation (WPF) is a compelling new framework for building rich UI applications, a wholesale adoption of WPF is not always the best solution for current application development. You may have an existing investment in Windows Forms controls that you don't want to give up or a complex application that you just want to add some new visual features to. This session shows you how to leverage existing investments in capabilities in Windows Forms while taking maximum advantage of what WPF has to offer. Learn how to embed WPF controls in Windows Forms apps, Windows Forms controls in WPF apps, and see how the designer supports you for developing these hybrids. Also, learn how to best architect your UI applications to take advantage of these capabilities.

    Terrarium

    Terrarium is kicking up a few dozen notches. I had a great discussion with Eric Zinda last week on the phone about the origins of Terrarium and challenges the team had. Remember, this stuff was created back in the 1.x days (well, prior to the public release) so web services were new, code access security was virtually unknown (even to the Terrarium team) and here these guys were flinging .NET assemblies across the wire to run on a remote system. Overall, as I've said in presentations on Terrarium, it's a kick-butt demo app like no other. Web Services; Code Access Security; DirectX Client and WinForms integration; Peer to Peer networking. If you look at any n-tier LOB application today it probably doesn't contain half the features baked into Terrarium. Really. While it's connned a "game", it's a distributed n-tier application that has some pretty impressive stats on performance (at one point, most of Microsoft was running it internally as screen savers all slamming the server with little or no effect).

    In any case, work has begun on WPF clients and new WinForms 2.0 clients. Web Services are being looked at to be overhauled to become WCF services (and eventually tie into the "cloud" via .NET 4.0 relay services). The 2.1 Vista and server fix is in QA. The user wiki is growing with new content on a regular basis (feel free to toss your own in, it's a wiki eh). There's a Facebook group to talk about it swap ideas, stories, or bugs (if you're into that social thing) and some other happenings that I can't go public with yet but you'll see them in the new year.

    Overall it's picking up steam and I hope you'll give it a looksee and feel free to poke, prod, question, and contribute!

    Tree Surgeon

    No, I haven't abandoned my little Tree Surgeon buddy. In fact we're motoring ahead with 3.5 and looking at a few things to help aid in development. MEF is huge and I'm grateful we have awesome dudes out there like Glen Block pushing this stuff. The P&P group has been phenomenal the past couple of years (yes guys, I forgive you for Enterprise Library and the Database Application Block). Prism kicks butt and MEF is very cool. Not only the fact that it'll be included in the next framework release, but for a project like Tree Surgeon (where I've been toying with a Plugin architecture for awhile now) it fits like a glove. It took me watching Scott Hanselman's BabySmash for the Masses screencast from PDC08 to really "get" MEF but now that I do I'm looking at hooking it into Tree Surgeon. This should open up a lot of new possiblies for adding in or modifying how Tree Surgeon generates it's solutions. If you need more capabilties or even an entire directory structure change, it'll be just a plugin away.

    SharePoint Forums and Knowledge Base Web Parts

    The SharePoint monkey on my back that I can't seem to shake. I haven't done a proper release for over a year on my web parts and the SharePoint 2007 compatibility still isn't there. My bad. Need to get this done so trying to wrap up a nice Christmas package for all you little SharePoint geeks out there. Hopefully SantaBil will make the deadline of December 25th he's set for himself.

  • This is what happens when you let kernel geeks design the UI

    image

    Stumbled across “Tiny Footprint” mode of the Task Manager today while I’m tracking down a nasty hijacker Smitfraud-C malware bot on my Jenn’s machine.

    Thought for a minute I was in a different program or OS or something wrong was going on. Turns out if you double-click on the area outside the tabs on Task Manager it throws a hissy fit and jumps into what Microsoft dubs “Tiny Footprint” mode.

    I don’t know what disturbs me more, the fact that this “mode” exists and is not very known, or that they have a KB article on it in case users “accidentally” get themselves into it.