Covered topics: life in general, personal productivity, life hacks, organization, software development, technology, etc.

Season of Joy, Chapter 2 - Adoption!

Three years ago, we began our journey together as husband and wife. Now, we want to write the next chapter by adding to our family through adoption.

You can help make our dream come true. Your gift puts us one step closer to welcoming a new child into our lives.

The average cost of adoption in Ohio is $24,000, but the joy that a child brings is impossible to measure.

We're inviting you to share in this adventure. Give a gift that will last a lifetime. We are truly grateful for your support.

Six Degrees of Dev'n - How Graph Databases Can Save Your Bacon

CodeMash 2016 presentation slides

Here are my CodeMash slides about graph databases and Neo4j:

Six Degrees of Dev'n - How Graph Databases Can Save Your Bacon

If you'd like to find out more about Neo4j, visit and download the Community Edition for your chosen platform.

Hosted solutions

I don't get any kickbacks from them, but I did meet the folks from GraphStory at the CodeMash 2015 and 2016 conferences, and they put together some impressive demos, such as the real-time Twitter mention analysis visualizations. You can find out more about signing up for trial accounts on their website and click on the "Free Trial" link here.

The Promise of a Pencil - its message will change you

Ok, I know I tend to rave about topics I'm interested in, but here is a book that I suspect will fall in the category of *personally life changing* for me.

Adam Braun founded Pencils of Promise organization ( at age 24 with just $25. POP seeks to build schools that provide primary education for students that wouldn't otherwise be able to receive it because of the extreme poverty they endure.

Pencils of Promise partners with local communities, matching their support, funds, and oversight with commitments by local village families of materials and labor to build needed classrooms.

As detailed in "The Promise of a Pencil: How an Ordinary Person Can Create Extraordinary Change," Adam Braun tells his personal story of what inspired him to take on such a task, an effort that has now resulted in the construction of over 300 schools worldwide since 2009, serving more than 33,000 students.

If you've ever thought about whether one person's efforts matter, or what it takes to start monumental change, this is an amazing story that will inspire you.

You can find book on Audible here:
The Promise of a Pencil: How an Ordinary Person Can Create Extraordinary Change

Amazon Kindle:
The Promise of a Pencil: How an Ordinary Person Can Create Extraordinary Change

Paperback (
The Promise of a Pencil: How an Ordinary Person Can Create Extraordinary Change

Truly astounding.

What Makes the Ideal Company?

Back in 2000, I created a document with various lines of thinking about my career development, including what I would look for in a future employer. I ran across it recently, and I recognized a particular section called "The Ideal Company" that I thought might be worth sharing.

Here were my thoughts then.

The Ideal Company

    The Ideal Company…
  • Is organized
  • Is vision-driven
  • Acknowledges the value of talented, committed professionals
  • Is willing to invest in its human resources
  • Employs talented professionals that cause me to grow
  • Treats employees as human beings and not machines
  • Believes in a methodology, standards, and ongoing process improvement
  • Is willing to try new things
  • Is strong and mature
  • Is principle-centered and “fits” closely with my own personal values
  • Has an identity that does not fluctuate with every pass of the wind
  • Has a name that is recognizable and reputable


How about your definition of an ideal company? What makes you excited? What are your expectations?

Have your expectations changed over time? Why?

Making Ideas Happen: Dreamers, Doers, and Incrementalists

In Making Ideas Happen by Scott Belsky, he identifies 3 types of "creatives": Dreamers, Doers, and Incrementalists.

  • Dreamers generate tons of ideas but have a difficult time taking action.
  • Doers are great at taking action, but aren't always full of ideas.
  • Incrementalists can switch between Dreaming and Doing, but often they have so many irons in the fire, that they don't take any single idea to full potential.
  • Belsky suggests that partnering with someone of a different "creative type" can actually help move ideas forward into reality.

    • Dreamer + Doer
    • Dreamer + Incrementalist
    • Doer + Incrementalist

    All are effective combinations. In fact, it's even suggested that you partner with multiple people of differing types to achieve a more comprehensive set of results.

    I'm largely a Dreamer in my personal life. I have a smattering of the other two, but Dreaming is probably the more dominant.

    Which one are you? Have you successfully partnered with someone of a different type with a successful outcome? Have you ever found that pairing with someone having similar tendencies left gaps in other areas?

    Using LINQPad with LINQ-to-Excel

    I've been really enjoying the free LINQPad app conjunction with LINQ-to-Excel

    Here's a video tutorial on how to use LINQ-to-Excel:

    LINQ-to-Excel took some figuring out, but it enables compelling new LINQ integration scenarios like SQL scripts built from spreadsheets. I used formulas on multiple worksheets to build INSERT statements from tabular data and used LINQPad w/ LINQ-to-Excel to extract them into a master script.

    LINQPad script:

    var excelQuery = new ExcelQueryFactory(@"C:\Data\MySpreadsheet.xlsx");
    var insertStatementDictionary = new Dictionary();
    var allStatements = new StringBuilder();
    foreach(var worksheetName in excelQuery.GetWorksheetNames().Where (name => name.EndsWith(" Data")))
    	var dataRows =
    		from dataRow in excelQuery.WorksheetRangeNoHeader("N8", "W8", worksheetName)
    		select dataRow;
    	var key = "-- " + worksheetName;
    	foreach(var dataRow in dataRows)
    		var cellList = dataRow.ToList();
    		var insertStatements =
    			from cell in cellList
    			let statement = string.Format("{0}", cell.Value).Replace("N/A", string.Empty).Trim()
    			where statement.Length > 0
    			let wrappedStatement = statement
    				// wrap SELECT column list with one column per line
    				.Replace(" SELECT [", "\nSELECT\n\t[").Replace(", [", "\n\t, [")
    			select wrappedStatement;
    		var combinedInsertStatements =
    			"\n\n" + key + "\n" + 
    			string.Join("\n\n", insertStatements.ToArray());
    		insertStatementDictionary.Add(key, combinedInsertStatements);
    // create an alphabetically-sorted script using the Dictionary and a StringBuilder
    insertStatementDictionary.OrderBy(sd => sd.Key).Select(kvp => kvp.Value).ToList().ForEach(st => allStatements.Append(st));
    var script = allStatements.ToString();
    // copy the script to the clipboard to avoid whitespace "standardization" of the Dump() output


    -- Customer Type Data
    INSERT INTO Sales.CustomerTypes (CustomerTypeId, CustomerType)
      [CustomerTypeId] = 1
      , [CustomerType] = 'Enterprise';
    INSERT INTO Sales.CustomerTypes (CustomerTypeId, CustomerType)
      [CustomerTypeId] = 2
      , [CustomerType] = 'Personal';

    Both tools are free.

    If you want "Intellisense" (a.k.a., "auto-complete") in the LINQPad tool, you have to pay for it (~$40, sometimes on sale for <$30). For that price you can activate LINQPad auto-complete on 3 physical machines and 3 virtual machines. I paid for the auto-complete license, and it has been worth it.

    Plus, sample code from two popular LINQ books (C# 4.0 in a Nutshell and LINQ in Action) is directly downloadable into the LINQPad tool and is extremely educational.

    You can find both books on

    Pandora Builds a Great Movie Soundtrack

    I just started using the Pandora music service today. I like it so far, especially the "Modern Movie Composer Station" I created. I started with John Williams (too many to list), then added Danny Elfman (Batman). For good measure, I also added the following:

    The combination above makes for a great listen. I highly recommend it!

    If you would like to listen to the resulting Pandora station, check out Modern Movie Composer Radio.

    Note: Composer links are from WikiPedia; individual movie soundtrack links go to

    The Role of a Maven

    When I first read the description of a "maven" in Malcolm Gladwell's book, The Tipping Point, I instantly identified with the characteristics (in my words): a kind of person that collects information, details or knowledge of topics of interest, and naturally offers it to anyone that is interested. In other words, usually a sort of expert in a given topic area, but especially one who wants to share their expertise.

    Gladwell points to the maven as one of three types of people that are essential to the viral spreading of any idea. Mavens tend to rave to others about their topics of passion, but always providing lots of meaningful details in the process.

    A few years ago (circa 1998), when I was writing my "governing values" (a Franklin Covey concept from Hyrum W. Smith's 10 Natural Laws of Successful Time and Life Management), I wrote these statements, that are still meaningful today and still reflect a core part of my personality:

    I develop a lifestyle that solves problems.


    I try new things. I brainstorm often. I impact other people with ideas and solutions to problems.


    I stockpile ideas that are useful and helpful.
    I share my wealth of knowledge with others in ways that improve the way they live.

    I find myself naturally drawn to share my knowledge with other people. Maybe it's a source of selfish pride, but I get great satisfaction out of introducing someone to new information that changes their perspective or helps them accomplish a goal!

    Exercising the Maven Role

    I had the opportunity to act in the role of maven with some friends of mine yesterday. I was guiding them through many of the products, tools, and services related social networking, "new media," and collaboration. We talked about wikis, Facebook, social bookmarking on, document collaboration using Google Docs & Spreadsheets, and using RSS to build custom information feeds--all to achieve a shared goal. It was exciting and envigorating!

    "True" Consultants as Mavens?

    In some ways, I think a true consultant (in any field), is at least, to some degree, a maven. In modern consulting, especially in staff augmentation "body shops," this is no longer the norm; however, true professionals and, for that matter, craftsmen have this trait.

    Bloggers as Mavens?

    Some bloggers (but definitely not all) take on the role of maven when they publish helpful information around their topics of interest and expertise. This is one of the major things that drew me to blogging when I first started (circa 2002), and it continues to motivate me to blog and reading the blogs of others.

    I would venture to say that the blogs that I read are largely all by mavens. It is a major source of the information that I also choose to pass along to others.

    Keep in mind, however, that being a blogger does not automatically qualify you as a maven. Describing what your cat ate for breakfast or other such drivel does not count.

    Additional Resources

    If you would like to read more about the meaning and usage of the term "maven," WikiPedia has some great information about mavens.


    Do you think it is arrogant to consider oneself a maven? Have you met any individuals you consider to be mavens? Have you seen or heard the term applied to people in regards to a particular subject?

    Leave a comment and let me know what you think.

    SafeGet() extension method for C#

    Nulls Are Like Evil Trolls

    I hate all of the extra code you have to write to protect your code from Null Reference exceptions, but it's totally necessary at some level. The question is, "How often do you need to write the same code over and over?"

    I included this code in a project today (it seemed useful):

        internal static class Utility
            public static TResult SafeGet<T, TResult>(this T instance, Func<T, TResult> nonNullFunction, Func<TResult> nullFunction) where T : class
                if (instance != null && nonNullFunction != null)
                    return nonNullFunction(instance);
                else if (instance == null && nullFunction != null)
                    return nullFunction();
                    // in all other cases, return the default for the type of TResult
                return default(TResult);
            public static TResult SafeGet<T, TResult>(this T instance, Func<T, TResult> nonNullFunction) where T : class
                if (instance != null && nonNullFunction != null)
                    return nonNullFunction(instance);
                    // in all other cases, return the default for the type of TResult
                return default(TResult);

    It changes code like this:

    int x = (myObjThatMightBeNull != null) ? myObjThatMightBeNull.PropertyINeed : 5; // 5 is default when myObjectThatMightBeNull actuall *IS* null

    To code like this:

    int x = myObjThatMightBeNull.SafeGet(o => o.PropertyINeed, () => 5); // 5 is default when myObjectThatMightBeNull actuall *IS* null

    Or code like this:

    int x = myObjThatMightBeNull.SafeGet(o => o.PropertyINeed); // takes default for int (0)

    After some discussion with my colleague, Johannes Setiabudi, it was debatable as to the relative value of the new extension method compared to the old technique. I'm still forming my opinion. On the one hand, the "SafeGet" communicates the intent of the code. On the other hand, the lambda syntax may be less understandable to those unfamiliar with it.


    Leave your comments if you have ideas that might work or ways to improve the code.

    Introducing Knowtons - Particles of Knowledge

    Evidently, Google has recently released a new service called Knols. It defines a "knol" as a unit of knowledge. The Knols service has similarities to a wiki, but some significant differences, too.

    I prefer a term of my own creation: "knowton" (rhymes with "proton"). You can think of it as a particle (or yes, unit) of knowledge, or something knowable.

    What is the essence of a knowton?

    • It is something describable or expressible.
    • It is usually something nameable or identifiable.

    What are some characteristics of knowtons?

    • They can be related to other knowtons
    • They can often be broken down into other knowtons

    Examples of knowtons:

    • words
    • people
    • places
    • things
    • concepts

    A knowton is something you could ask a question about:

    • "What is 'that'?"
    • "Who is 'that'?"
    • "Where is 'that'?"
    • "What does 'that' mean?"

    Information devices that contain knowtons include (but are certainly not limited to):

    • glossaries or dictionaries
    • indexes
    • newspapers
    • encyclopedias
    • wiki pages
    • credits in a movie
    • books
    • high school yearbooks (people)
    • phonebooks (people and businesses)
    • web pages
    • radio and television programs
    • or basically, any source of information with identifiable units of "askability"

    When expressed in electronic systems, a knowton can have attributes:

    • identifiers
      • numbers or codes
      • names
      • aliases
      • URIs
    • description
    • location
      • Example: geocoding (latitude and longitude)
      • URLs (similar to URIs)

    Challenge: Spread the Meme!

    What do you think? Do you like the term "knowton?"

    If you think the term "knowton" is cool, usable, or meaningful, try using it in a conversation today, and see what kind of questions or reactions you get.

    Life Hack: Subscribe to Your Own Twitter Favorites to Consolidate an Inbox

    Twitter's "Real" Value?

    A lot of the value I get out of Twitter is the "microblogging" aspect in which people post a quick link to a useful or meaningful or funny web page. Sure, Twitter can help you stay up to date on those you "follow," but it's also a great data mining tool. In the same way blogs allow you to plug into the brains of interesting people, Twitter allows you a micro version of this technique. In some ways, Twitter has some advantages over blog reading/writing:

    • Twitter limits your post to 140 characters, so you have to be concise. This might (not guaranteed) cause you to keep your message to just the bare essentials--there's no room for fluff!
    • Twitter forces the writer to be concise, so reading a Twitter "micro blog" post is quick and easy.

    Time to Consolidate Those Inboxes!

    As GTD creator David Allen recommends, I'm constantly striving to consolidate my inboxes (having as many as I need and as few as I can get away with). Rather than subscribe to a ton of email newsletters and clutter that inbox, I prefer to let Google Reader take care of the information I want to keep up with.

    Twitter, in effect, is just one more inbox to deal with. It's yet another stream of incoming data that you must process. As with any inbox, an honest evaluation of its value and how it might be consolidated should be made.

    The Problem: I Can't Read That Right Now...

    If you follow very many people on Twitter, the amount of traffic that streams by your consciousness is mind-boggling. There's not enough time to read all of the "tweets," let alone all of the pages they point to.

    The Answer: ...But I Can Save It For Later

    As pointed out in a comment by Morten Skogly, you can access the favorites of any user as an RSS feed. This can be useful for really tapping into someone's brain. Instead of hearing all of the noise they put out, you can use them as a filter by monitoring what they value.

    Just use the following pattern for an RSS feed of a Twitter user's favorites:

    Substitute the actual name of the user for "username" in the link above.

    Taken a step further, you can subscribe to your own favorites using the same technique. This allows you to quickly tag something in Twitter as a favorite, while using Google Reader (or other news aggregator) as your "command center" for all things RSS! So tag your favorite tweets using the star, and it will show up for your later review in Google Reader.

    Here Are My Favorites

    My Twitter favorites RSS feed can be found here:

    You can follow my Twitter postings here:


    Do you have any life hacks using RSS and Twitter? Let me know! Just leave a comment!

    Hacking Google Calendar Using jQuery

    I did a pretty cool hack using jQuery yesterday. It took me a couple of hours, but I finally figured out how to make it work.

    CompanionLink Task Synchronization Gone Awry

    I use a product from CompanionLink Software to synchonrize my Outlook 2007 calendar with Google Calendar. I recently upgraded my version of CompanionLink for Google Calendar to CompanionLink for Google, which includes new synchronization features for Outlook Contacts and Tasks, as well as support for Google Apps.

    The Outlook Task synchronization "feature" caused me a lot of grief by uploading all of my tasks (including completed ones for the past several years) into my calendar as events. In addition, any tasks that did not have a due date were added as events on the day that I first tried the sync feature. In other words, I had hundreds of tasks loaded as events for April 13th, 2008.

    I was not happy. Needless to say, I immediately deactivated the task synchronization portion of the application and stuck with calendar only. Unfortunately, I was left with the task of cleaning the "task events" out of my Google Calendar. The problem is that there's no quick way to do this in Google Calendar's interface. Keeps the Landfills Not-So-Full

    Call it a personal flaw, but...

    I Hate Throwing Usable Items Away!

    My wife recently asked me to throw away a lamp. The lamp is missing a shade, but apart from that its only fault is not having a place in our current décor. I couldn't bring myself to toss out a perfectly good item. However, because I try to keep the amount of unwanted junk from accumulating, I don't often have enough critical mass of stuff to hold a meaningful yard sale. So what do you do with unwanted stuff without throwing it away or selling it on eBay or in a garage sale?

    Here's an option that you might find useful... Helps Match You With "Takers" For Your Stuff (as in "free"+"recycle") is a great movement that helps people give usable items away instead of sending them to a landfill. is organized around local groups of people whose common interest is finding a good home for useful items instead of throwing them away. In short, if you're looking to get rid of an item that someone might want, but you just don't know how to find the right person--who would want a lamp without a shade?? can help. logo
    Just post an item to an email list for your geographic area and wait. If it catches someone's eye, they will post a response, and the two of you can make arrangements to meet and transfer the item. There's one main rule: the item must be absolutely free. No selling is allowed. (There are some other rules about allowable items and proper group etiquette, but it's basically very simple.)

    Plus, if you're looking for an item, you can always post a request, and someone else in the group might just have what you're looking for and be willing to part with it--you never know, you might just find it!

    To learn more and find a group in your area, check out their website:

    DeVry alumni pig roast

    DeVry alumni pig roast

    Nothing New on Under The Sun

    Well, I was cleaning out my Google Reader account, looking to eliminate feeds that are not being updated or are no longer relevant to my "sphere of concern." During the process, I reviewed the Under The Sun feed. Under The Sun's title is based on the scripture in Ecclesiastes that states (paraphrasing), "There is nothing new under the sun." Well, guess what? Nothing new has been posted at Under the Sun since last year (2007). Oh, the irony!

    Needless to say, I'm removing the feed, but I am sad to see it go, just because it represents part of my blogging past that has, well, passed.

    So, if you're reading this post, just try to appreciate the humor rather than looking for some deeper meaning. I promise I'll post more meaningful content in the future. No, really, I promise.

    Evolution in personal organization

    Over the course of my academic and professional careers, I have been forced, out of the pain of disorganization, to get "organized."

    The Amateur Academic Years

    In high school and college, this usually meant a trip to the office supply store and a set of new folders or a binder or both. I would resolve to keep better track of my assignments by writing them down in a consistent way, and I would stay on top of them by reviewing it often. But it never stuck.

    Paper Goes Prime Time

    Shortly after I started my professional career, I learned of the Franklin Planner (now the Franklin Covey Planner) from a colleague. Its impact on my organization habits was compelling. I now had a central place for tracking just about anything, and a method for taking notes and indexing them. The prescribed daily period of "Planning & Solitude" both forced me and enabled me to stay on top of the tasks and notes I had entered into the system. What's more, the consistent form factor (5.5"x8.5" 7-ring paper) allowed me to collect a long-running archive that I could reference at any time. Not that I did it that often, but occasionally, it proved critical in finding contact information or directions I had long since purged from my active set that I carried with me.

    Still, it was strictly paper-based, so it had its disadvantages. It had no backup and it required being with you all the time so nothing would slip through the cracks. (Franklin Covey did, however, offer a small notepad version called the Satellite that was about the size of a checkbook and could be carried with you. The paper was punched to fit a classic binder just like the full-size paper, so it easily integrated back into the system.)

    The Digital Transition

    Eventually I acquired a Palm III and Franklin Covey planner binder that would accommodate both the Palm and the classic paper. I still use this binder today, although I currently fill its PDA slot with a Palm Zire 72s.
    I won't bore you with all of the phases in between other than to say that I tried an iPAQ for a while, I have struggled to keep Outlook in sync with whatever PDA I was currently operating, and now things like
    Google Calendar have entered the picture.

    More Change on the Horizon

    All of this has been to say that, yet again, I feel as though my habits, techniques, and tools for organization is about to change. Along with my more recent adoption of GTD (Getting Things Done) as my planning method, I've been contemplating using Remember The Milk as my primary task manager. (Its lack of Outlook synchronization--until now--has made it a non-starter for me. I must have desktop/PDA synchronization to make it work.)

    None of these changes have happened in a vacuum, nor could they. I've even learned some things about the difference between tools and techniques (what you do with or without your tools).

    Should I take the Smart Phone Plunge?

    In the face of an impending phone upgrade, I'm forced to consider another possible change--do I retire my Palm and go for an advanced phone/PDA with a data plan? I hate the idea of having my PDA be tied to a particular wireless carrier, but having an increased level of integration for my personal information is compelling.

    Just as Merlin Mann of proposed in his post about choosing a new phone, I think I should prepare for the phone (and PDA?) upgrade by making a list of all of the features that it must have to support even my current organization methods. I'll probably post more on that later.


    Do you have any thoughts on the ups and downs of digital organization? Tell me what you think.

    Google Reader bookmarklets (using jQuery)

    I've always been annoyed that Google Reader chops off the names of my RSS feed folders in the left-hand navigation pane. At the very least, they should give you a horizontal scrollbar. And all of these titles with "..." in them to save space are also annoying.

    Here's what I did to fix that (requires running the jQuery bookmarklet first):

    • Prerequisite: Append jQuery to current page
    • <a href='javascript:void(function(){$("#sub-tree").css("overflow", "auto");$("#sub-tree-item-0-main").css("width","500px");}());'>GReader Tree Scroll - adds a horizontal scrollbar to the list of folders/feeds.



    Both bookmarklets above use jQuery to make the magic happen, so you'll need to run the "Append jQuery to current page" bookmarklet before you run either of the above bookmarklets.

    Tell me what you think!

    Whiteboarding the future

    Whiteboarding the future

    Chris Slee, the founder of the company that I work for, Allen, Williams and Hughes Company (AWH), is shown whiteboarding tasks for the project we're both working on.

    The project will use the Microsoft .NET 3.5 Framework and CSLA.NET 3.5. We're also making use of CodeSmith to do code generation.

    AWH is a 12-year old company that specializes in consulting using Microsoft technologies. We also produce and market an enterprise-class content management system, called GeoDocs.

    Add jQuery to any web page by using a bookmarklet!

    I had an inspiration today: I can create a bookmarklet to append a reference to the jQuery library to any page! And, by using Firebug, I can execute custom jQuery code against a page in the console tab.

    Here's the bookmarklet code: Append jQuery to current page

    Simply right-click the hyperlink above and add it as a Favorite (IE) or a Bookmark (Firefox, Mozilla). Make sure you add it to your Favorites-->Links folder in IE, or your Bookmarks Toolbar in Firefox. This way you can click the toolbar to execute the bookmarklet's code.

    Here's what the code looks like (in long form):

        // create a new script element in the DOM
        var jQscript=document.createElement('script');
        // use the latest version of the jQuery core library
        // append the new script element to the DOM

    The latest version of jQuery (core) can be found at:


    Once you have appended the latest version of the jQuery library, you can use "$" syntax to access elements of the current page's DOM. You can use all of the selection, filtering, CSS modification, attribute modification, and other features that jQuery allows! It helps to have a "console" interface for executing custom Javascript, like the console in Firebug.

    Note: To use some advanced UI features of jQuery, you'll also need to "attach" some optional jQuery add-on libraries (like sorting and drag-and-drop). You can experiment with the best way to do that.

    Possible uses

    Using this technique, you can...

    • change the the styling of elements
    • show or hide elements
    • use your imagination! (I'll probably invent and post more uses for this technique later.)


    What do you think? Do you have any ideas for using this technique?

    Syndicate content