Up to Newsletter Index

June 2015 Newsletter


Quotable Quotes


Happiness and virtue rest upon each other; the best are not only the happiest, but the happiest are usually the best.  –Edward Bulwer-Lytton


Controlling complexity is the essence of computer programming.  –Brian Kernighan


I define connection as the energy that exists between people when they feel seen, heard, and valued; when they can give and receive without judgment; and when they derive sustenance and strength from the relationship.  –Brené Brown


Unless a capacity for thinking be accompanied by a capacity for action, a superior mind exists in torture.  –Benedetto Croce


Character and personal finance are the only investments that are worth anything. –Walt Whitman


The most powerful human forces are found in the meeting of the face and the gaze. Only there do we exist for one another. In the gaze of the other, we become, and in our own gaze others become. It is there, too, that we can be destroyed. Being unseen is devastating, and so is not seeing.  –Karl Ove Knausgaard, “Anders Breivik’s Inexplicable Crime”


Isn’t it funny how day by day nothing changes but, when we look back everything is different?  –C.S. Lewis


The real fun of life is this perpetual testing to realize how far out you can go with any potentialities.  –Richard P. Feynman


Return to top


Software Development Process and Methodology

Article: Toolkits for the Mind

If you’ve studied a foreign (human) language, you probably had your teacher tell you that you’ve become fluent in the language, when you are able to think in that language (versus mentally translating between your native language and the new one).  This article posits that the same principle applies for programming languages and, therefore, choice of language is an important factor in how fast you can develop and the quality of your code.  Likewise, it’s important that developers think about thinking and how their thought processes (and biases!) are enhanced or impeded by their language.



Article: We Need Planning; Do We Need Estimation?

One of my favorite quotes is from Dwight Eisenhower:  “In preparing for battle I have always found that plans are useless, but planning is indispensable.” Regardless of your development methodology, you must do planning at various levels, such as sprint planning, release planning, platform roadmaps, and the like.  In this article, the author addresses the role of estimation in the process.  The bottom line is that prioritization of work (i.e., working on the most important things first) is more important than estimation.



Article:  The Failure of Agile

Andy Hunt, co-author of The Pragmatic Programmer and one of the original signatories of the Agile Manifesto, discusses some of the ways that he believes the potential benefits of agile methodologies have failed to meet expectations.  He says that fundamental problem is that, when adopting agile, organizations start by using a few of the underlying rules, but when they mature they fail to go back apply the other, more difficult, rules.  This causes teams to become fixated on the “rules” and avoid the fundamental principle of “inspect and adapt”.  He proposes an evidence-based remedy that he calls GROWS:  GRowing Real-World Oriented Working Systems.



Article: Why the way we look at technical debt is wrong

Somewhat regularly, we have featured articles about how the common model of technical debt is not always very effective.  This article goes a bit further to suggest that technical debt should really be defined as anything that prevents your ability to deliver what the user/customer needs with due speed.  In other words, your architectural focus should be on areas that make changing or extending difficult.



Article: On being overwhelmed with our fast paced industry

Do you feel like much of the new technology has flown by leaving you flat footed?  I do quite often.  This influential web designer provides some perspective on the whole pace of change conundrum and offers the sage advice that we just need to continue working and look for which technologies meet our needs.



Article: Agile planning – the 5 scopes

Many times, especially when starting out with agile methodologies, we think, “Yay! No more planning and project plans!”  But this is certainly not true.  The key is that planning is simply different in agile processes (and still very important).  This article looks at five levels of scope and the planning tactics that go with each.



Article: The Swamp

This brief article offers a great analogy about those parts of a project, whether they are features, customizations, regulatory compliance, etc., that suck teams in and kill projects, because of their complexity.  The author especially warns small organizations to avoid these and use third-party tools or services to deal with complex problems that have already been solved.



Return to top


Software Testing & Quality

Article:  7 things to look for when testing with agility

As we’ve mentioned before, agile methodologies require a change in mindset and, frequently, the impact is most significant for testers.  Here are some great tips for how to work effectively with an agile team, especially if you, as the tester, join the team later in the project.



Article:  6 Struggles Only a Tester Will Understand

As a tester, do you ever feel like no one understands what you do?  Well, cheer up, friend!  This author knows just what you mean.  He addresses a half-dozen things that you’ll probably identify with.  And don’t suffer in silence; share your strivings with other testers and even some of your developer friends!



Article: Good Test, Bad Test

Test-driven development (TDD) is one of the valuable tools to help develop high-quality code and (especially) to avoid unintended consequences of changes and new development.  However, one of the difficulties that many people face when getting started with TDD is what constitutes a “good” test (and conversely a “bad” one).  This article explores the traits of good and bad tests and provides some salient examples (in Python) of them.



Article: Europe's largest defense project might have a 'quality' problem

A recent crash of an Airbus A400M military transport in Spain during a training flight has resulted in Airbus issuing a warning that a software defect in the “Engine Control Unit” (ECU) may cause the engines to shut down if they are given contradictory instructions.  Airbus has confirmed that the software defect is indeed the cause of the crash, but that it was a configuration problem.



Article: Why Good Developers Write Bad Code: An Observational Case Study of the Impacts of Organizational Factors on Software Quality

Most of us know that software development is as much a social undertaking as it is a technical process.  This research article considers how organizational factors contribute to software quality (or lack thereof!).  The main takeaway from the article is that communication and especially conflicting information is one of the biggest influences which reduce the quality of the end product.


Return to top



Tutorial:  Defanging the OutOfMemoryError

What strikes fear in the hearts of Java programmers?  Well, one thing that certainly does is the dreaded OutOfMemoryError.  This tutorial covers a broad cross-section of causes and techniques for debugging the error, as well as improving memory management generally.



Reference:  I Broke Git

If you use Git, at one time or another, you are bound to do something and immediately have that sinking feeling that you shouldn’t have.  Mistakes are part of life.  This reference will help you recover from common Git mistakes.



Tutorial: Elliptic Curve Cryptography: a gentle introduction

This four-part tutorial series introduces the concepts of elliptic curve cryptography (ECC), which is (currently) the most powerful technique for cryptographic key generation, upon which most of the infrastructure of the Internet is based. ECC is generally difficult mathematically (for example, the same principles were used by Andrew Weil to prove Fermat’s Last Theorem), but this tutorial aims to make it approachable for even those with minimal math background.



Article: Demystified CQRS… and why it should be a fundamental principle of application design

With the rise of distributed systems, the CAP theorem has become more than just an interesting academic footnote and its implications loom large for many organizations.  This author provides a good explanation of CQRS (Command Query Responsibility Segregation) and how it can help you mitigate some of the problems around eventual consistency.



Reference: How to name things: the hardest problem in programming

One of the most difficult aspects of programming, especially in new projects, is defining meaningful names for entities.  While you want to avoid meaningless names, you also don’t want to use names that are too specific and cause problems with refactoring or extension later.  This article discusses how using techniques of novelists for character naming can help you solve this problem.



Tutorial: What is Garbage Collection?

Automatic freeing of application memory that is no longer in use, known colloquially as “garbage collection”, is an important function in modern programming languages.  It was one of the original features that made Java so appealing compared to other languages.  But what is it and how does it work?  This brief tutorial explains the concepts and reviews some of the popular garbage collection algorithms/heuristics.



Reference: 9 Anti-Patterns Every Programmer Should Be Aware Of

Sometimes you might fall into a bad programming practice without evening knowing it.  Thus, it’s almost always useful to simply know that certain things are out there.  This article is one of those cases:  It covers some of the common, yet subtle practices that are easy to fall into that you should try to avoid.



Return to top


Career Development/Miscellaneous

Article: 7 Easy Ways to Support Colleagues With Mental Illness

According to US National Institutes of Mental Health (NIMH), almost 20% of adults will suffer from some sort of mental illness in a given year, with one in 17 suffering from a chronic serious mental illness such as schizophrenia, bipolar disorder, or major depression.  Coming from a family with a long history of mental illness (which is frequently generational/hereditary), these tips are very helpful in support co-workers who may be going through a difficult time.



Article: Coding is probably the easiest part of being a software engineer

As most of us have learned (often through the school of hard knocks!), development is much more than writing code.  (One developer even claims it’s got nothing to do with computers!)  This essay provides a good assessment of various non-coding skills that are important, especially for those with aspirations to move into management or technical leadership roles.



Article:  Millennials want a work-life balance. Their bosses just don’t get why.

With wage stagnation and many folks working long hours, a new study of 10000 millennial generation workers from eight countries finds that they put a premium on work-life balance.  However, since most of those in the management ranks are baby boomers, who have difficulty understanding the millennials, this sometimes leads to conflict about priorities.



Article: Oblique Strategies: Prompts for Programmers

Everyone knows that no set of aphorisms is going to correct all of the problems that we face in building applications.  However, sometimes you just need a little nudge to get you moving in the right direction (or moving at all, for that matter!).  This excellent list patterned after other lists to help artists and writers to break through mental blocks provides some great ideas to consider.



Article: Is Software Engineering Really Engineering?

One of the perennial topics in the technology world is whether programming (or more formally “software engineering”) should be considered a true engineering discipline.  In this article, the author dispels the common myth that programming does not constitute “engineering”, because there is no physical entity created.  He claims that, in fact, this premise is actually one of the weakest for claiming that programming is not engineering.



Article: LinkedIn Founder Reid Hoffman on the biggest lie employers tell employees

In his new book, The Alliance, Reid Hoffman says that the biggest lie propagated by employers is that the organization is like a family in an attempt to gain loyalty.  He goes on to say that employees reciprocate in kind during hiring by saying that they plan to stay for a long time.



Article: The Devil’s in the Details: The Case for a Low Information Diet

How much time do you spend “consuming” information?  We all know that big data is everywhere and, as producers of the technology that enables this technology, we are often voracious consumers of data, as well.  This author, borrowing concepts from the “slow food” movement, suggests that we need to have a “balanced” diet of information and provides some ideas for reducing your intake.



Return to top


Telecommunications/Networking Industry

Article: The long life of a quick ‘fix’

For most of us, BGP (border gateway protocol) is simply a fact of life in the landscape of the Internet infrastructure.  But it actually started out 25 years ago as a ‘patch’ of sorts, according to co-creator Yakov Rekhter, when security issues were much less of a concern.



Return to top


Useful Utilities

httpdiff (Free – Cross-platform – 96kB)

Written in Go for inherent cross-platform support, httpdiff is a simple command-line tool that performs the same HTTP request against two servers and differences the responses.  It supports ignoring specific header fields/options and specifying the HTTP method to use.  Very useful for troubleshooting esoteric issues when doing web development.



Class in a Jar (Free – Cross-platform/Java – 56kB)

As you may guess from the name, this tiny GUI utility allows you to search Java Jar files for specific class names.  You can specify particular set of Jars or entire directories (including sub-directories) and search with wild cards or regular expressions.  Very handy for learning new libraries.



Password Store (Free – Cross-platform/Bash Shell Script – 53kB)

You would think that after this long, we’d have solved the problem of keeping up with so many passwords.  Anyway, until that Holy Grail has been found, we need to use tools like this one.  It’s a small, simple shell/command prompt utility that stores your account passwords in encrypted format and supports password recovery questions.  Some of the great features include sending the password to the clipboard with expiration time, password generation using pwgen, storing the passwords in a Git repository, and migration scripts for many popular password management tools.  Packages are available for many Linux platforms and Mac OS X.



retrolambda (Free – Cross-platform/Java – 168kB)

Lambda expressions were introduced in Java 8.  If you’ve had a chance to try them, you may have wished that you could use them in your legacy Java applications.  Retrolambda is a backport of the lambda expressions, method references and try-with-resources statements (and limited support for default methods and static methods on interfaces) on Java 7, 6, and 5 by modifying the Java 8 compiled bytecode to run on the older JVMs.


mintr (Free – Linux/Mac OS X/Cygwin – 52kB)

Here’s a simple graphical tool to use to monitor your Unix/Linux server characteristics.  You can think of it as a GUI for htop.  It’s a simple Node.JS application that simply calls the standard built-in Unix/Linux command line tools periodically, stores the data, and shows it graphically, using the Chart.js library.  You can easily extend it to monitor other characteristics.



jDependency (Free – Cross-platform/Java – 1.3MB)

This tool is both a Java GUI tool and package to show dependencies in your Java packages and applications.  You can show the dependencies as a tree structure or a block diagram.



Return to top


Just For Fun

It’s BASIC: Arnold Spielberg and the Birth of Personal Computing

Did you know that Steven Spielberg’s father had a central role in the popularization of the BASIC programming language?  Well, neither did I!  Read on to learn about how he designed one of the early commercial mainframes, the GE-225.



Backwards Brain Bicycle

Just in case you don’t think that you have cognitive bias, check out this excellent video.  Could you ride a bicycle that turns the front wheel in the opposite direction of the handlebars?  Sounds easy, but it took this guy 8 months to learn how to do it (and then he could ride a regular bicycle), but his 6-year-old son learned it in 2 weeks.



"U Tr?": A Glossary of Abbreviations Used by Early-20th-Century Telegraph Operators

Many of us probably think of the use of substantial abbreviation as something brought about by text messaging.  But even more than a century ago, telegraph operators had their own codified shorthand.


Vulnerability Name Generator

Let’s see…  Just in the past couple of years, we’ve had Shellshock, VENOM, Heartbleed, and POODLE among other significant vulnerabilities.  What will be the next zero-day threat discovered?  Who knows? But with this tool, you’ll be prepared to come up with a cool name for it!




When you really want to make a point or grab the attention of your site visitors, look no further than SHOUTCLOUD.  I’m sure you’re asking yourself why you wouldn’t simply use your languages libraries for converting text to uppercase.  C’mon!  This is the microservices generation.  Get with the times!



China millionaire beams down to Star Trek office park

I guess this is what you do in China when you get super-wealthy.  Nevertheless, it is a pretty cool design.


Floppy Orgel

We’ve seen a variety of musical renditions using the venerable floppy disk drive, but this one takes the concept to a whole new level.  It’s an organ (German “orgel”) made with 49 these devices connected to a keyboard with MIDI controller.  Wow!



Business Town

In the inimitable style of Richard Scarry, this site tries to document the jobs of the 21st century knowledge economy.  My favorite is the “Teenage Billionaire CEO”.



Return to top