Up to Newsletter Index

May 2015 Newsletter


Quotable Quotes


I'm just a plow hand in Arkansas, but I have learned how to hold a team together. How to lift some men up, how to calm down others, until finally they've got one heartbeat together, a team. There are just three things I'd ever say. If anything goes bad, I did it. If anything goes semi-good, then we did it. If anything goes real good, then you did it. That's all it takes to get people to win football games for you.  –Paul “Bear” Bryant


If I find too many people adopting a certain idea I'd probably think it's wrong.  –Donald Knuth


Knowledge always desires increase; it is like fire, which must first be kindled by some external agent, but which will afterwards propagate itself.  –Samuel Johnson


Creativity is not just for artists. It's for businesspeople looking for a new way to close a sale; it's for engineers trying to solve a problem; it's for parents who want their children to see the world in more than one way.  –Twyla Tharp


Genius is perseverance in disguise. –Mike Newlin


No pleasure lasts long unless there is variety in it. –Publilius Syrus, Moral Sayings


A programmer should be able to find a bug, market an application, refactor a spike, lead a team, architect an application, hack a kernel, schedule a project, build a database, route a network, give a reference, implement user stories, analyze user stories, work in a team, work alone, use patterns, innovate, write documentation, have a real life, create a cool website, email efficiently, resign gracefully, admit ignorance, and keep on learning. Specialization is for recruiters.  –Peter Merel, Specialization is for Insects, with apologies to Robert A. Heinlein


Return to top


Software Development Process and Methodology

Article:  Why Apache Solr search is on the rise and why it's going solo

The CEO of Lucidworks, which provides many commits to Apache Solr search engine platform, says that more than 1/3 of users are now using Solr as a NoSQL key-value store, separate and apart from its “regular” use as full-text indexing tool.  If you haven’t committed to NoSQL platform, but already use Solr, you may want to look at it to fill that need.



Article:  On the Origins of Motivation at Work

What do you think that the manager’s main job is?  Certainly, answers will vary, but fundamentally it’s to get work done through other people.  This excellent article talks about how one of the key shifts in work has been from extrinsic to intrinsic motivation and what that means for knowledge workers.  Some of the ideas may surprise you.



Article: How Do Your Estimates Provide Value?

Most of us are aware of the huge debate in the agile community about whether or not estimation is important or necessary.  Regardless of your position, effort estimation is a fact of life in most organizations.  This article is a good discussion about estimation, which focuses on the purpose of doing it in your particular situation.



Article: Why Self-Organizing is So Hard

By now, you’ve heard about Zappo’s big experiment with eliminating a management hierarchy.  And, if you’ve worked with agile methodologies, you are likely familiar with the concept of self-organizing teams.  This article discusses some of the difficulties with trying to implement such a culture, either on small teams or entire organizations.



Article: Scala Scales Up TIOBE Index

While Java jumped backed to the top of the list in the latest TIOBE index, the biggest mover on the list is Scala.  Among the reasons cited for its rise are its inherent support for web development using Scala.js and a perception that functional programming is becoming mainstream, especially with the advent of the reactive paradigm.



Article:  Lessons Learned in Software Development

This developer condenses his best practices down to a dense, yet succinct list of nearly two dozen maxims for development.  It really is a great list of principles for any developer, especially those who may be new to the field.



Article:  Programmer productivity starts with requirements, not tools

Surely the latest gee-whiz tools are the path to better developer productivity, right?  This author says that having good requirements is the best way to get good results from programmers.  He emphasizes that the key element is good requirements, which he defines as those that are agreed upon by business and developers and have been repeated deconstructed to the appropriate level.



Article: The Daily Stand-up is an Antipattern

Perhaps the title of this article is link bait and a better title might be “The Daily Stand-up As Practiced is an Antipattern”, but the author makes some valid points.  He says that the way most group do stand-ups violates the first tenet of Agile Manifesto (Individuals and interactions over processes and tools), because it becomes a type of “ceremony”, rather than a way to foster communication and engagement.  He goes on to offer some ideas for getting stand-ups back to what they were intended for.



Return to top


Software Testing & Quality

Presentation:  Lessons Learnt Integrating Test into the Agile Lifecycle

Everyone knows that agile development practices continue to evolve and change.  This presentation focuses on the importance and value of ensuring that even when an agile team does not have traditional testers that the test competencies, including test management, are covered effectively.  Perhaps the best way to accomplish this is to have a tester as the scrum master.



Article:  How Heartbleed could've been found

This developer provides a detailed explanation of how “fuzzing” could have found the infamous Heartbleed bug in the OpenSSL package.  Furthermore, he discusses some of the reasons that the bug stayed hidden for so long.  It’s an interesting perspective on the importance of knowledge in testing.



Article:  Code Inflation

This article provides a historical perspective on how code quality and reliability is affected by increased size and complexity.  He looks at a number of Unix utilities and explores how exponential increases in size (measured in bytes in the executable) do not track closely with increases in features or functionality.



Article: Just Say No to More End-to-End Tests

Surely recommending less testing is blasphemy in the testing world, right?  Well, this author provides some strong evidence for why more testing sounds good in theory, but often doesn’t work in practice.  The main point is that testing needs to be done at the level appropriate to finding the critical problems so that a tight report-fix-re-test loop can be maintained.



Article: Toyota's killer firmware: Bad design and its consequences

Although the dust has mostly settled in Toyota’s high-profile sudden acceleration debacle, it’s never too late to learn a lesson or two from it.  This article emphasizes that the underlying cause of the problem was not poor implementation, but bad design and a culture that failed to challenge the bad assumptions.  Asking “Are we building it right?” doesn’t matter much, if you haven’t affirmatively answered “Are we building the right thing?”



Article:  Quality is line one: 8 characteristics of good software code

Just like no one sets out to fail, nobody wants to write bad or poor quality code.  As this article emphasizes, quality must be emphasized from the beginning of a project (i.e., in the requirements!) and built into your process.



Return to top



Tutorial: Understanding Explain in PostgreSQL

Most modern RDBMS platforms provide tools to “explain” the execution plan (how the DBMS will get the results requested) of a SQL query.  But understanding the “explain” may seem mysterious if you aren’t familiar with it.  This tutorial goes into a lot of detail about how it works in PostgreSQL.  Similar concepts apply to most other popular DBMS systems.



Reference:  Software Architecture Patterns

This brief (55 pages total) book helps you understand the common application architecture patterns and gives advice on when the patterns are appropriate to use.  The book covers five specific architecture approaches:  layered architecture, event-driven architecture, microkernel architecture, microservices architecture, and space-based architecture.



Tutorial: Dependency Injection, Inversion of Control & The Dependency Inversion Principle

Raise your hand if you think dependency injection (DI) and inversion of control (IoC) are the same thing.  Well, I did (or, at least, I often used them interchangeably)!  This excellent article clearly explains what each is, how they are different, and how they work together.  When you understand them in context, their importance and utility in building SOLID applications makes much more sense.



Reference: Frequently Forgotten Fundamental Facts about Software Engineering

This article has probably been included in the newsletter before (but I couldn’t find it!), but it’s one of those classics that is good to read again from time to time.  Even though these principles are “small”, they are good benchmarks to follow for building good applications. Notably, he debunks the myth of the 10x programmer.



Tutorial:  How to Read Source Code

I hope that you don’t take offense at me including this article.  Certainly, most readers of this newsletter already know how to read source code.  But, remember that everyone was a beginner once.  And since we probably spending significantly more time reading others’ code than writing new code, the efficiency gains of having a good workflow for reading and understanding code can be substantial.  This article has great suggestions not only about the mechanics of trudging through code, but of the proper mindset.



Tutorial:  flexbox in 5 minutes

The introduction of the CSS Flexible Box (a.k.a. “flexbox”) layout module has been one of the most significant advancements in web page layout since the arrival of CSS itself.  This interactive tutorial will guide you through the main properties and let you change the properties to see what the impact is to the layout.



Return to top


Career Development/Miscellaneous

Article: Do Not Learn Frameworks. Learn the Architecture.

This article is very likely to be controversial.  Nevertheless, I think that the author makes some good points and it’s always a good idea to consider carefully why you choose the tools that you use.  Certainly, frameworks provide value in terms of providing patterns and in abstraction of some complexity.  However, the author’s main point is that users of the frameworks still need to have a reasonable understanding of the underlying platform to use the framework effectively.



Article: 5 Productivity Myths You Should Stop Believing

In some circles, productivity (or the pursuit of improving it) almost reaches the level of a religion.  And there’s nothing wrong with improving your productivity.  But you need to make sure that the practices you adopt really help.  This article debunks some of the common myths, such as those around multitasking and not planning.



Article:  50 Years of Moore’s Law

It’s been a half-century since Gordon Moore suggested his principle that the number of transistors on ICs doubles every 18 – 24 months.  And despite many predictions of its imminent demise (and some that now say it won’t make it another decade!  Or maybe it will…), it has stood the test of time.  Here’s a look back and how technology has changed in just that short time.



Article: A culture that attracts quality candidates

Most people know that job satisfaction is about much more than just salary.  The organizational culture plays a big role in both attracting and keeping great workers.  This article explores building a work culture that makes people want to come and stay.



Visualization: What people around the world value the most

To me, maps are the ultimate in visualization techniques.  This interesting one takes the data from the OECD Better Life Index and shows the most valued principle by country.  Some rather unexpected results from my perspective.



Article:  The book no one would publish

Here’s a good example of why you should press on, even if the face of disappointment, when you are passionate about your ideas.  Dr. Suess’ first book was rejected by 27 publishers before a chance meeting with a college friend got him published.



Article:  What is a “Software Architect” and should they write code?

Perhaps I’m in a bit of a feisty (love that word!) mood this month, since I’ve got quite a few articles that tend toward the controversial side.  Anyway, despite the controversial nature of this article, the key point that the author brings up is the importance of ensuring that the business owner of your system understands the role of the IT architect.  Even if the specific definition of “architect” is a bit (or a lot) nebulous in your organization, be sure to make it clear what his/her role is on your project (which is great advice for everyone’s role!).



Return to top


Useful Utilities

Disk Drill (Free – Windows – 15.6MB)

If you’ve ever gotten that sinking feeling when you deleted a file that you didn’t intend to, then check out Disk Drill.  It’s an intuitive file recovery utility that is completely free.  It works with all media types (hard disk, USB flash drive, SSD, etc.) and supports a variety of file systems, including FAT, NTFS, HFS (Mac OS X), and Ext2/3/4 (Linux).  It can even restore lost drive partitions.


Mono16 (Free – Cross-platform – 1.9MB)

Most developers are always on the lookout for a nice monospaced font for programming.  In that vein, I present Mono16, which is intended to look good at 16pt size, even on low-resolution displays.  In addition, it has bold punctuation, big operator symbols, and easy differentiation of commonly confused symbols.  And it comes in three styles:  loose, normal, and tight.



gdrive (Free – Linux/Mac OS X/Windows – 6.2MB)

Google Drive is a great way to store and share files.  But if you are command prompt/shell veteran, you may pine for a command-line interface (CLI) for it.  Look no further, since gdrive is just what you need. Most all Google Drive functions are supported, including uploading, downloading, generating download URL, share/unshare, and even giving uploaded files a title.  Binaries are available for all platforms.



Effective Java (Free – Cross-platform/Java – 8.3MB)

Effective Java is a simple Java static analysis tool (written in Clojure!) that checks your code to determine if it conforms to the standards in the Effective Java book, as well as several other standards.  It supports three modes:  as a standard Java linter for your entire codebase/project, running it directly against a class, or even interactively.  Read more about it here.



Tabula (Free – Cross-platform/Java – 36MB)

Have you ever had to deal with a PDF file that contained embedded tabular data?  Manually cutting and pasting this data is a big pain.  Tabula rescues you from this chore.  It can extract data tables from PDF documents into CSV or Microsoft Excel spreadsheets easily with an intuitive UI.  It’s used by many organizations for freeing public data from PDFs, so it has great support.



Return to top


Just For Fun

King James Programming

What happens with your mash up the King James Bible, Structure and Interpretation of Computer Programs, and Why's Poignant Guide to Ruby using a Markov chain?  King James Programming that’s what!  Some very interesting turns of phrase are output by this tool.



In the Game of Thrones, you either live or you…code?

This humorous send-up considers what programming languages are represented by various characters from Game of Thrones.  Although I don’t understand why Tyrion isn’t on the list?


Startup Generator

Want to start your own business, but you just can’t come up with a great idea?  Startup Generator is just the ticket!  It will generate a beautiful landing page with a branding line and short description of your value proposition.  All you have to do is get your Series A financing!  And if this doesn’t suit your fancy, maybe you just want to remake your favorite site in your own image.


Blue Fountain Media 404 Page

Ah…  The dreaded bane of web surfing:  the 404 page.  Well, on this site, not finding what you want leads to a little fun diversion of playing Pacman.



The Adventures of Medieval Bunny:  The Killer Rabbit

If you’ve seen Monty Python and the Holy Grail, you probably remember the scene where Lancelot is attacked by a killer bunny.  Well, it turns out that this motif actually existed in medieval illuminated literature.  I guess maybe there really isn’t anything new under the sun!  (And, perhaps, I found this so amusing because “There are some who call me... Tim.” )



Lego Large Hadron Collider Models

These are all kinds of win!  Who doesn’t want to build little models of the device that might make our home planet disappear?  Complete instructions for each of the models are provided.  Is there anything that you can’t build with Legos?!



Return to top