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 neo4j.com 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 (http://pencilsofpromise.org/) 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 (Amazon.com):
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

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?

    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.

    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.

    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.

    Syndicate content