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

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

Feedback

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?

    Concordion Tips for Effective Specifications and Tests

    I found a well-written set of tips on Concordion's website about how to structure the relationship between specifications, test fixtures, and the domain code being tested.

    Concordion - Hints and Tips
    http://www.concordion.org/Technique.html

    It offers good advice including "smells" and better alternative ways to solve problems. Even if you never use Concordion, it's always good to find a well-articulated treatment of a topic. This definitely qualifies.

    Here's a sample of the solid advice:

    Tips

    • Write specifications, not scripts
    • Specifications should be stable
    • Evolve a domain-specific language
    • Isolate behaviours
    • Think "Given-When-Then"

    Common Smells

    • Existing specifications are often changed
    • Lots of "execute" commands
    • Complicated instrumentation
    • Complicated fixture code
    • Examples all have the same structure

    Concordion appears to be a FitNesse-style wiki-test harness combination system. It is implemented in Java, but there is a .NET port called (shocking), "Concordion.NET".

    You can learn more about Concordion's main functionality here:
    http://www.concordion.org/

    Concordion.NET is hosted on Launchpad:
    https://launchpad.net/concordion-net

    Jeffrey Cameron maintains the .NET port and offers several blog posts about how to get started.

    Your First Concordion.Net Project by Jeffrey Cameron

    Further Research

    I plan to read more about Concordion and similar tools (including FitNesse's .NET-based spin-offs like fitSharp in hopes of finding a system that can allow collaborative editing of test cases and help me collect metrics about changes in test results over time (correlated with code changes and business decisions). If you know of any good options, please comment.

    Using LINQPad with LINQ-to-Excel

    I've been really enjoying the free LINQPad app
    http://www.linqpad.net/

    ...in conjunction with LINQ-to-Excel
    http://code.google.com/p/linqtoexcel/

    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();
    script.Dump();
    // copy the script to the clipboard to avoid whitespace "standardization" of the Dump() output
    Clipboard.SetText(script);
    

    Result:

    -- Customer Type Data
    INSERT INTO Sales.CustomerTypes (CustomerTypeId, CustomerType)
    SELECT
      [CustomerTypeId] = 1
      , [CustomerType] = 'Enterprise';
    
    INSERT INTO Sales.CustomerTypes (CustomerTypeId, CustomerType)
    SELECT
      [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 Amazon.com:

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

    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.

    and

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

    and

    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 Delicious.com, 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.

    Feedback

    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.

    Quote: Necessity's Grandchildren = New Necessities

    "Necessity first mothered invention. Now invention has little ones of her own, and they look just like grandma."

    Source: 

    Elwyn Brooks "E. B." White (1899–1985)

    Quote: Analyzing Humor is Like Dissecting Frogs

    "Humor can be dissected as a frog can, but the thing dies in the process and the innards are discouraging to any but the pure scientific mind."

    Source: 

    Elwyn Brooks "E. B." White (1899–1985)

    Reference: 

    <a href='http://www.quotationspage.com/quotes/E._B._White/' target='_blank'>Quotations by E. B. White on QuotationsPage.com

    Combine Your YouTube Subscriptions into One Feed with Google Reader

    Quick tip: Here's how I successfully created a combined feed from my YouTube subscriptions.

    YouTube does not seem to offer a direct export of your subscription feeds as an OPML file that you could import somewhere else, but it does provide RSS feeds for tags and users. See YouTube's RSS feed information.

    Here's how you can create a single feed out of multiple tag and user feeds:

    1. Add the tag/user feeds to Google Reader. Example:
      feed://www.youtube.com/rss/tag/yourtag.rss
      

      Note: In the above example, substitute your desired tag for "yourtag".

    2. Assign the feeds to a new folder, like "YouTube Channel".
    3. In your Google Reader account settings, under Folders and Tags, make the folder public.
    4. Click the View Public Page link.
    5. The public page will contain a link to the Atom feed that you can add to any aggregator.

    Example

    See my example YouTube Channel page to get a feel for what it looks like.

    Feedback

    If you like this tip or have ways to improve on it, leave a comment to let me know.

    Give a Goat for Christmas?! - World Vision Gift Catalog

    World Vision has a great way to give to others in need: their gift catalog. One of the most popular items is a goat!

    According to World Vision, a goat can provide the following benefits:
    World Vision Goat: World Vision Goat

    A goat nourishes a family with protein-rich milk, cheese, and yogurt, and can offer a much-needed income boost by providing offspring and extra dairy products for sale at the market. It even provides fertilizer that can dramatically increase crop yields!

    There are plenty of other items you can donate toward:

    Exploring the Gift Catalog

    The site is well-organized. You can browse donatable items by category or by cost.

    Categories include:

    Cost levels include:

    Honor Someone with Your Gift

    When you complete the donation process online, you can dedicate your gift in honor of someone. The person you choose can be notified of your gift in their honor:

    During check out, you will have the option of sending them a beautiful card by mail, e-mail or print from home!

    Some donatable items come with a gift, such as a plush toy goat, to give to someone as a reminder of the gift you made on their behalf.

    Conclusion

    This holiday season, consider the option of giving to others in a way that you might not normally imagine. World Vision and other organizations offer great opportunities to make a difference in someone's life!

    Bust Merchants that Require Minimum Credit Card Purchases

    Have you ever been told by a merchant, "Sorry, you have to spend at least $X in order to use a credit card?" If that angers you like it does me, there is something you can do about it. In fact, Visa and MasterCard both prohibit participating merchants from setting minimum purchase requirements as a condition for acceptance of payment.

    Here are FAQs from both companies with their policy:

    • Visa's FAQ - look for the item labeled "Minimum Purchase."

    Visa merchants are not permitted to establish minimum transaction amounts, even on sale items. They also are not permitted to charge you a fee when you want to use your Visa card.

    Q: Can a merchant charge me a fee to use my MasterCard card? Can a merchant require a minimum purchase amount to use my MasterCard card?
    A: The answer to the first question is almost never; the answer to the second question is not ever.

    and...

    Another MasterCard acceptance rule prohibits merchants that accept MasterCard cards from establishing any minimum amount below which the merchant won't accept payment via MasterCard card.

    Fighting Back: File a Complaint

    If a merchant tells you a minimum purchase is required, let them know that you are aware of Visa's & MasterCard's policy, and that you are willing to file a complaint if they insist on a minimum amount. If the merchant persists in their demand, you can file a complaint online with MasterCard or, if your card is from Visa, notify the bank that issued your Visa, and the bank will assist you in the complaint process.

    MasterCard's online merchant complaint form actually includes four types of violations:

    1. "In order to make a MasterCard purchase, the merchant/retailer required a minimum or maximum amount."
    2. "The merchant/retailer is adding a charge for using your MasterCard card."
    3. "The merchant/retailer required identification."
    4. "A merchant/retailer displaying the MasterCard decal in their window refused to accept my MasterCard card."

    I found the "identification requirement" violation to be puzzling. I need to research the reasoning behind that one. I've been asked for ID before, and it didn't bother me. Sometimes requiring ID can prevent unauthorized use of your card. That seems good.

    My Plan of Attack

    I plan to make a printed card (business card size) with a copy of Visa's & MasterCard's policy on it so I can carry a copy or two in my wallet as ammunition in the argument. I'll post it here for others to use when I'm done.

    Be Firm But Nice

    If you encounter a merchant who gets nasty when confronted (quite likely), try to be calm, and be willing to walk away from your purchase if they are uncooperative. I'll try to remember this advice myself too.

    Feedback

    Do you have any horror stories about this situation? Have you won any victories by countering the merchant's demands? Let me know what you think.

    Earth911.com Search Offers Local Recycling & Disposal Options

    I'm not on the extreme end of environmental activism, but I do feel guilty throwing useful stuff away, and I do want to dispose of hazardous materials responsibly.  So to all of you that already knew about Earth911.com, I'm late to the party.  But I'm sure I'm not alone, so I want to pass on the information.

    Earth911.com logo

    Earth911.com offers great information on recycling, safe disposal, and environmental responsibility, but that's not its most compelling feature in my book.  It has a search by material type and location to pinpoint recycling agencies and companies in you local area!  It is very well done, and even includes some interactive map features.

    Here is a list of categories that Earth911.com handles:

    • Paper
    • Metal
    • Hazardous
    • Plastic
    • Glass
    • Electronics
    • Automotive
    • Household
    • Garden
    • Construction

    I found this site while looking up more information on the 1 (800) CLEANUP phone number.  It turns out that Earth911.com has taken over for the former 1800cleanup.org site.

    Keep in mind that some recycling agencies only serve residents of their covered areas, but it's absolutely worth investigating to see if there are recycling options in your area.  Plus, the wealth of information and articles about responsible consumption and recycling is worth the visit.

    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.

    Thoughts?

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

    A case of "Facebook App-jacking"

    The publisher/developer of the "Have You Ever..." and "Would You Rather..." Facebook application just sent me a message informing me that the name (and purpose) of the applications has been changed--to "SpeedDate (Formerly Have You Ever...)" and "SpeedDate (Formerly Would You Rather...)", respectively.

    SpeedDate?? What?? That's not what I signed up for. No thanks--your app has been removed from my profile!

    That's the result when you "hijack" a Facebook app. See ya later!

    Life Hack Experiment: Build a public To Watch video list

    I'm going to try a life hack experiment. I've found some interesting videos on MSDN Channel 9 that I would like to watch, like this one about Windows PowerShell. But, I don't have the time to watch them all right now. So I'm going to post them by using the Silverlight embedding feature of the Silverlight video player they use to batch them up and review later. And, as an added benefit, anyone that is interested can check out the collection too.

    This technique can apply to more than just Microsoft videos. Certainly, YouTube or UStream.TV could benefit from this approach.

    I'll be sure to tag the post with an appropriate topic-oriented tag, but I may also include a media-oriented tag like "Video" or "Video to Watch" so I can navigate them using my Drupal blog's taxonomy features.

    So, without further ado, here is the embedded video about PowerShell:

    Enjoy!

    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:
    http://www.twitter.com/favorites/username.rss

    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:
    http://www.twitter.com/favorites/xagronaut.rss

    You can follow my Twitter postings here:
    http://www.twitter.com/xagronaut

    Feedback

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

    McD's Coffee Sabotage!

    McD's Coffee Sabotage!

    McDonald's coffee cup shows evidence of tampering! My pants show evidence of stains!

    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.

    Syndicate content