April 2012 Newsletter
When a brave man takes a stand, the spines of others are stiffened. –Billy Graham
The more informed we are, the less happy we become because of our tendency to get caught up in constant comparisons. Martin Lindstrom, How To Be Happy Anywhere
Experience does not err. Only your judgments err by expecting from her what is not in her power. –Leonardo Da Vinci
There's a world of difference between truth and facts. Facts can obscure the truth. –Maya Angelou
We would worry less if we praised more. Thanksgiving is the enemy of discontent and dissatisfaction. –Harry Ironside
So much complexity in software comes from trying to make one thing do two things. –Ryan Singer
If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all. –Michelangelo
If you're like me, on each project team that you are a member of, the
value of the daily standup meeting seems to diminish over time. This article looks at some of the common
causes for this problem along with some tips for how to put the meeting back on
track to its purpose.
http://blog.carbonfive.com/2011/10/24/why-your-daily-standup-sucks-and-how-to-fix-it/
This thoughtful and well-reasoned article will help you explain to a
business customer why
their "simple" request really requires more time than they expect or
desire. The author uses the analogy
between a simple table that you might build and one built by a craftsman.
http://www.hiltmon.com/blog/2012/01/11/it-should-only-take-you-a-few-hours-dot-dot-dot/
This author notes that the reason that normal estimation techniques, such as used
in construction, don't work in software development is because each
development project is inventing (creating from scratch) and, accordingly, we
don't have a good basis of comparison to prior work. This results in projects
almost always being late. What ideas
do you have for improving development
estimations?
http://diegobasch.com/why-software-development-estimations-are-regu
This post notes that agile development is oriented toward building things
(think "Working software over comprehensive documentation"). However, it notes that in projects where
discovery and finding new and better ways to do things, it may be useful to
include the validated learning concept from the lean startup movement to shift
the mindset from delivery to discovery.
http://tatiyants.com/building-vs-learning-on-agile-teams/
While the basic premise of this article is around getting started with
agile in small organizations and/or with limited budget, the concepts are just
as valid for any size implementation.
The author says that successful agile adoption is built around three
main concepts: creating awareness,
creating desire (to change/improve), and transferring applied knowledge. One of
the most important ideas behind low-budget implementation is that the tool is not
the process and that you need to determine how to do things before investing in
a tool.
http://tiny-giant-books.com/blog/poor-mans-agile-adoption-how-low-can-you-go/
"Uncle
Bob" Martin's latest book, The
Clean Coder, is one of the best, most-practical books about programming
that I've read in quite some time. This
blogger discusses some of the key points about what professional (mature?)
programmers do from the book.
http://blog.christoffer.me/2011/11/9-things-i-learned-from-reading-clean.html
There is much chatter on the Internet these days that we are in the
so-called "post-PC
era". An IDC analyst claims
that this is really the "PC-plus era", where the regular computer is
still relevant, but needs to be considered in the context of interoperability
with smartphones, tablets, and the like.
http://news.cnet.com/8301-13924_3-57371681-64/ipad-kindle-fire-are-not-post-pc-says-idc-analyst/
Scott Hanselman, who is well-known for his
comprehensive annually-revised developer
tools list, emphasizes that developers and managers need to focus on the
basics of good practice, before trying to move on to the nice-to-have things.
http://www.hanselman.com/blog/MaslowsHierarchyOfNeedsOfSoftwareDevelopment.aspx
From reviewing
some recent government IT projects, the Government Accountability Office
(GAO) found some common traits among the projects that were hallmarks of
success, including senior management support and good engagement with
stakeholders. There really isn't much
surprising in this list, but it never hurts to have a little more information
to back up case for improving processes in your organization.
http://www.networkworld.com/news/2011/112311-gao-best-practices-253417.html
As SasS (software-as-a-service) becomes more commonplace (does anyone remember the application service provider wave of the 1990s?), this technology presents some unique challenges for testing, especially around configuration, security, and the frequent "uncontrolled" roll-out of new platform features.
In this free excerpt from Beautiful Testing, John Cook explains how to go about testing a random number generator. It gives you some good ideas for how to test randomness in an application and to think outside the box for other types of test planning.
http://www.johndcook.com/blog/2010/12/06/how-to-test-a-random-number-generator-2/
A new program aims to provide 1000 internships for non-technical workers by training them in software testing/QA. The idea originated with a dinner conversation between Jon Bon Jovi and GroupMe co-founder Steve Martocci.
http://www.forbes.com/sites/jjcolao/2012/03/07/bon-jovi-teams-up-with-ny-tech-to-create-jobs/
All new technologies spawn their share of unexpected side effects and software is no exception. This list of well-known software failures can be used as inspiration for how to be a more effective tester and more cautious developer.
http://www.devtopics.com/20-famous-software-disasters/
Hacker News readers respond to this question and offer some insightful feedback/comments about the practices of testing, including TDD, unit testing, functional testing, and system testing.
http://news.ycombinator.com/item?id=3702827
In this excerpt from his new book, James Whittaker presents the core principles followed by Google in testing. He does a great job of articulating some key aspects, such as, how testers and developers work closely together and the fact that quality and testing are not the same thing.
http://www.informit.com/articles/article.aspx?p=1836182
Coding standards are popular for most programming languages. But did you ever think about applying those
concepts to your other development assets, such as CSS? This author provides some good suggestions
for making your CSS both readable and functional.
https://github.com/csswizardry/CSS-Guidelines/blob/master/CSS%20Guidelines.md
Once you understand how
web browsers work, one of the best ways to improve application performance
is with caching. This comprehensive tutorial explains the
various options, both client and server side, and the pro and cons of each.
http://www.mnot.net/cache_docs/
One of the key elements of the UNIX philosophy is "Write
programs that do one thing and do it well. Write programs to work together.
Write programs to handle text streams, because that is a universal
interface." Thus, text-wrangling is
one of the things that UNIX/Linux does very well and we should avoid
re-inventing the wheel, when possible.
This comprehensive tutorial introduces to you the standard UNIX text
processing tools, such as sed, awk, grep, and many others.
http://www.ibm.com/developerworks/aix/library/au-unixtext/index.html
Python is a great programming
language with expressive syntax and great built-in capabilities. However, if you are coming from another
language, it can sometimes be difficult to grasp some of the Python
idioms. This excellent web-based
tool allows you to show the code execution step-by-step with annotation of what
Python is actually doing.
http://people.csail.mit.edu/pgbovine/python/
This site probably won't make you a better developer or tester, but,
hopefully, it will make you a better investor.
It documents the principles that Warren Buffett uses based on Q&A sessions
with the "Wizard of Omaha".
When getting started with Git (or really any distributed
version control system), one of the more difficult concepts is that data
"resides" in more than just your local work area and the central
repository. This article includes two
excellent diagrams that make this concept much easier to understand.
http://osteele.com/archives/2008/05/my-git-workflow
While the news about the decline in off-shoring hasn't quite reached the fever pitch of off-shoring trends of the past 10-15 years, this article gives a good overview and explanation of the factors that are causing companies to look at their options more closely.
http://www.techrepublic.com/blog/tech-manager/onshoring-it-services-and-bringing-jobs-back-home/7485
Everyone wants to be great employee, but what sets apart the cream of the crop from the rest of the pack? In this article, the author indicates that high performers show characteristics that boil down to being passionate and idiosyncratic.
http://www.inc.com/jeff-haden/the-8-qualities-of-remarkable-employees.html
This pundit says that top (meaning executive in this context) employees leave companies for the same fundamental reason that workers at all levels do: Top talent leave an organization when they’re badly managed and the organization is confusing and uninspiring.
By now, most people know that multitasking is stressful and ultimately leads to lower productivity overall. This article identifies three organizational/cultural changes and three personal behaviors that can reduce this problem.
http://blogs.hbr.org/schwartz/2012/03/the-magic-of-doing-one-thing-a.html
One of the core principles of Scrum methodology is self-organizing teams. This article explores whether or not organizations take the "no managers" notion too far.
http://management.fortune.cnn.com/2012/03/05/when-nobody-and-everybody-is-the-boss/
Are you a smart person? Most of us like to think of ourselves as above average. In any case, technical people tend to pursue perfection and, according to this author, this has the negative side effect of hurting productivity, because we can become easily distracted by other "interesting" things.
http://sridattalabs.com/2012/02/06/rabbit-holes-being-smart-hurts-prod/
As I get older ("over the hill", if you like!), I'm starting to experience some memory loss. So this article was quite interesting in learning about how our brain creates memory and how those memory then get "lost". And maybe I need to get a little more vitamin B12, since it is apparently a vital nutrient for memory, or perhaps chewing gum makes more sense.
http://www.salon.com/2011/11/20/why_we_forget/singleton/
You may be tempted to skip this article, because it's quite long ("TL;DR"). However, I strongly encourage you to read it. It is an amazing manifesto for why we need to include teaching basic programming skills to all kids, just like we do with the 3 Rs. The author emphasizes how programming helps develop skills like logical thinking and reasoning/critical thinking, as well as, learning how to automate boring, repetitive work. And, if you are interested in this, check out CoderDojo, which is an organization of local programming clubs for kids.
http://www.kernelmag.com/comment/column/1264/coding-for-success/
Most of you who read this newsletter are probably not self-employed or entrepreneurs. However, this article provides some very important concepts about motivation in your work and your personal work style, whether you are working for the man or are the man yourself.
http://www.kalzumeus.com/2011/07/08/business-psychology/
Researchers have devised an algorithm that predicts where a person fits within the organizational hierarchy based on linguistic patterns. The algorithm is based on the same principles that search engines use for measuring relevance of results.
http://www.technologyreview.com/blog/arxiv/27437/
Last month, we had an article about how simply saying "thank you" is a good motivator. On the heals of that, this article emphasizes that managers need to be very specific when giving praise. In particular, they need to tie their praise to specific actions by the employee and explain the value of the action.
http://articles.nydailynews.com/2011-06-16/news/29681654_1_praise-boss-stress
In this interview, former Mozilla CEO John Lilly talks about how he made the transition from technical contributor to manager. As with most good leaders, he gives a lot of credit to how others helped him grow. His story goes a long way in dispelling some of the common myths about introverts.
http://www.fastcompany.com/1762632/telling-the-story-a-qa-on-leadership-with-john-lilly
I'm a big fan of productivity tips and use a couple of the popular ones myself (Pomodoro technique
and using "to do" lists, for example), but this article points out what is hopefully obvious, but probably overlooked: There is no silver bullet for productivity improvement, because it's personal and depends on your own style, organizational environment, etc. So, look for advice and adapt it (think agile!) to your particular situation.http://www.bnet.com/blog/ceo/the-real-secret-to-personal-productivity/7862
We all know the old adage that a picture speaks a thousand words. So here are some pictures that show how much traffic and activity goes over the Internet in a single 24-hour period.
Just days after Deutsche Telekom demonstrated 512Gbps transfer on a single fiber, Chinese carrier ZTE showed an 8 x 216.4Gbps system that provides speeds up to 1.7Tbps over 1000 miles. Not to be outdone, Huawei has prototype platform that has total capacity up to 20Tbps.
Even if you're not a malicious hacker, a decompiler is a useful tool for understanding how your application works, to look at the internals of a third-party library, or just to look at the dependencies of an assembly. JustDecompile is a brand new and completely free .NET decompiler. It supports version 1.1, 2.0, 3.x, and 4.0 of the .NET platform, as well as Silverlight and the .NET Compact edition.
http://www.telerik.com/justdecompile.aspx
QuickRDP is a simple manager for RDP (Windows Terminal Server), Telnet, and SSH connections. It uses native Windows functions for RDP connections and allows you to specify an external application, such as PuTTY (or one of its many variants), to use for Telnet and SSH. You can store user IDs and passwords and it will attempt to automatically log you on to the host upon connection. It can even be extended via Perl scripts.
http://sourceforge.net/projects/quickrdp/
REST Console is an add-on for Google Chrome web browser that will allow you to construct HTTP headers (per RFC2616) in the browser to send to REST APIs for API testing and validation. It includes syntax highlighting, support for both PUT and POST, and auto-complete among many other features.
Z-WAMP is a comprehensive WAMP (Windows/Apache/MySQL/PHP) package that does not require installation. In addition to Apache/MySQL
/PHP, it includes MongoDB, XDebug, MemCached and more. Just unzip the package and run ZWAMP.EXE to have a full-fledged web development environment running on your system.Connecting to remote servers via SFTP is often difficult and inconvenient. (Linux makes it much easier with curlftpfs!) WinSCP is a good option, but if you prefer to have a persistent connection to the remote server, SFTP Net Drive can help. It allows you to map any SFTP host as a regular drive in Windows, so you can have an always-available connection and just drag and drop files your local system and the SFTP host. (Presumably, you could even use your SFTP host as a Git repository similar to this.)
http://www.eldos.com/sftp-net-drive/
In this amazing HTML5 application, the UC Berkeley scientists take you through 14 billion years of time and space. Instead of looking at the history of the universe in dry text, it lets you interactively browse what was happening during certain periods. Read more about the background of the tool here.
http://www.chronozoomproject.org/
Well, maybe this doesn't actually fit into the "fun" category, but it's kind of weird and interesting at the same time. These guys researched whether or not the distribution of letters in a word between the left and right side of the keyboard had any impact on language usage.
http://www.springerlink.com/content/y22087242663u647/fulltext.html
BrowserQuest is an MMO game created entirely in HTML5 (WebSockets
and Canvas) and Javascript. It's described as "a tribute to classic video-games" with "a dangerous world filled with treasures to discover". Check it out and consider contributing to the code if you're interested.https://hacks.mozilla.org/2012/03/browserquest/
Most younger folks probably find it odd that the hjkl keys are used as the "arrow" keys in vi and vim. But the reason for this is actually quite straightforward: One of the first widely used terminals, which Bill Joy used to create vi, actually had arrows on the keys. I remember fondly when my dad brought home an ADM-3A terminal and we hooked it up to his work mainframe using a screaming 300-baud acoustic coupler modem.
http://www.catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys/
I'm not really sure why, but I have a fascination with emulators. This is a very cool one of the GBC written entirely in Javascript and HTML5. The site has a variety of included games (Tetris, Legend of Zelda, Donkey Kong, and Pokemon among others) or you can drop your .gb or .gbc ROM file into the emulator.
http://gamecenter.grantgalitz.org/