November 2007 Newsletter
Observe constantly that all things take place by change, and accustom thyself to consider that the nature of the Universe loves nothing so much as to change the things which are, and to make new things like them. –Marcus Aurelius
The disease of jealously is so malignant that it converts all it takes into its own nourishment. –Joseph Addsion
Truth has no special time of its own. Its hour is now—always. –Albert Schweitzer
We are all inventors, each sailing out on a voyage of discovery, guided each by a private chart, of which there is no duplicate. The world is all gates, all opportunities. –Ralph Waldo Emerson
The right time is any time that one is still so lucky as to have. –Henry James
Real difficulties can be overcome; it is only the imaginary ones that are unconquerable. –Theodore N. Vail
Nothing can stop the man with the right mental attitude from achieving his goal; nothing on earth can help the man with the wrong mental attitude. –Thomas Jefferson
Your mind understands what you have been taught; your heart, what is true. –Unknown
Developers typically detest schedules and do everything to avoid making them. There are two common reasons: schedule estimating is difficult and most people don't think that the schedule is realistic anyway. This article suggests an iterative technique that uses historical data, such as from timesheets, to give a probability of meeting the planned implementation date.
Most enterprise software development attempts to separate the "business logic" portion of the application from the persistence and "generic" functionality. This author says that this paradigm completely misses the point, since any application is mostly about the specific business rules. The extensive comment thread is enlightening, as well.
This years survey of the companies that make best use of IT shows that energy companies are wresting away the top spots from the perennial winners in the financial services sector.
A new report from MIT Sloan Management Review concludes that enterprise software applications, like ERP and CRM, are too complex to deliver on their promises. While not offering any concrete solutions, the report also indicates that SOA and software-as-a-service models are not sufficiently scalable to offer a solution. Instead, it recommends that IT and business executives work together to find answers.
Steve McConnell offers his perspective and insights on using agile software development methods. His key emphasis is that particular methodologies should not be the focus. Each organization and project needs to do what is right for their situation.
OpenUP is a combination of the rigor and "high ceremony" of RUP and agile techniques by trying to balance the advantages of each. This article gives a good summary overview of the methodology, with a focus on the tools included with Eclipse platform.
Poor requirements definition is the leading cause of project failure. This article emphasizes the importance of capturing requirements in the style of "what" (e.g., use cases) instead of the "how" that developers are more comfortable with.
Successful enterprise architecture is more closely related to
anthropology than technology.
This article emphasizes that everyone involved in a software development project needs to understand the goal to be accomplished and that each piece of work (e.g., section of code written) needs to be confirmed to be in line with the goal.
Agile development expert Scott Ambler emphasizes that agile is not about "breaking all the rules", but rather requires some great discipline. He outlines 5 particular areas: regular delivery, quality, active stakeholder involvement, scalability, and teamwork.
This is an excellent tutorial on how to create a functional specification document for a web or application development effort. It defines a great framework for the process and discusses the appropriate content and structure of the document.
Another cogent, balanced, and insightful look at the complexities and intricacies of software development as compared to traditional engineering disciplines. The article uses the example of the development of the open-source Chandler application and the various trade-offs necessary in any large-scale development effort.
Service-oriented architecture (SOA) is often bandied about as the panacea for all enterprise development problems. Here are ten high-level concepts that are key to understanding what SOA is and what it can really do.
Sometimes the sub-culture of agile development seems like a bunch of disjoint concepts. This article explores the agile environment and tries to draw some common boundaries around it.
In this interview, UML creator Grady Booch talks about the moral dimensions of software development. How do you answer the question of: "I can do this, but should I?"
This retrospective of the FBI's failed Virtual Case File project highlights some of the common factors that contribute to failure of a development project. The upshot of the project is that development groups need to be amenable and adaptable to change.
This author suggests and alternative approach to UML and "heavy text" methods of documenting application requirements. His approach focuses on five diagrams: process flow diagram, logical data model, screen map/screen layouts, system architecture diagram, and software object model. Each of these can be adapted to an iterative approach in keeping with agile principles.
These articles give a good overview of some of the various agile development methodologies. It includes a nice tabular comparison of the strengths and weakness of the methods to help you choose the one that best fits your environment and organization culture.
Pick an apple from the tree to see answers to common questions in software testing. Categories include testing basics, testing tools, how-tos on various testing types, and more.
James Whittaker, now at Microsoft, has launched a software testing portal on the MSDN site. It provides Q&A and interaction with skilled testers from Microsoft, forums and discussions, and blogs from some of the preeminent names in testing.
This developer debunks the myth that preparing unit tests takes away valuable time from a project. He makes a good argument for how test-driven development saves time in the long run.
Some tongue-in-cheek definitions of common terms in the vernacular of software testing. Reminds me of the time that a project manager asked me if I was "smoking crack" in the resolution to one of my tickets.
Planning and keeping track of test execution is one of the cornerstones of successful software testing. This articles gives some pointers about how to accomplish this.
This classic article gives some good background information on how FP arithmetic works, why it is important to application developers, and some of the pitfalls to watch out for.
This mini-glossary of database terms will help those who are just getting started with databases to understand some of the esoterica.
In a supplement to an article (featured in the ??? 2007 newsletter), this tutorial extends the SQL join explanations beyond the Venn diagram representations to simple, relevant examples using actual SQL syntax.
Inheritance is one of the grand triumvirate of principles (along with polymorphism and encapsulation/information-hiding) in object-oriented programming. However, inheritance is implemented different in each language. This article explores the inheritance model and details in Java.
Even in this day and age of Java and dynamic languages, there is still a lot of use for "classical" languages like C++. This free, downloadable book is intended for complete beginners in C++, but not strictly in an academic setting. It focuses on practical examples of how C++ can be used to solve real-world problems.
From this site you can download the entire second edition (from 2004) of this excellent book about wireless networking for Windows and Macintosh. While it doesn't include information about recent wireless advances like WPA or 802.11n, it is still quite relevant.
This site provides tutorials and explanations concerning object-oriented design methodology, with an emphasis on design patterns. It includes good overviews of standard patterns in three categories: creational, behavioral, and structural.
This site presents the collected notes that a programmer created in the process of learning Ruby himself. They are comprehensive and will really help you get started in understanding Ruby.
Ever get mixed up about whether to use affect or effect? Or maybe their, there, or they're? Confusing Words comes to the rescue. It gives you key information to help remember the use and context for these daunting words.
Rather than focusing on one particular version control system, this article provides a logical motivation for using version control and then explains the generic concepts a good version control approach.
New converts to Unix and Linux are often baffled by the structure of the file system. And it is difficult to know where files of various types do and should go. This article explains in a very comprehensive, but concise way the history of the file system structure and the purposes of the various standard directories.
Want to bring the benefits of tabbed web browsing to your Unix/Linux command prompt? Then the GNU screen utility is just what you need. This excellent, comprehensive tutorial helps you learn the basics as well as some of the key power features.
Software development pundit Steve Yegge offers his personal tips on creating a better resume for technical professionals. Most of the ideas are simple, but can have a significant impact on the effectiveness of your resume.
Want to spice up (pun intented!) your writing a little bit? This great article gives you some Latin words that have been fully adopted into English, along with the literal meanings for many commonly used Latin phrases.
Productivity expert Tony Schwartz says that working longer hours is not the solution to improving results. He offers some practical suggestions to increasing your productivity.
E-mail is probably the most common method of communication in the modern world. Here are some tips on how to use it effectively.
This author praises the trial-and-error process for making new discoveries. He emphasizes that great breakthroughs are rarely made by academics, but rather by down-in-the-trenches tinkerers.
Many people (and I'm one of the worst!) are chronic procrastinators. Here are some helpful tips for how to break out of the procrastination funk.
Business pundit Penelope Trunk recommends dispensing with these work-related things: the "Reply All" button, vending machines, fundraising solicitations, office parties, and, my favorite, voice mail.
Businesses now spend 20% of IT budge on security functions. This is up from 12% in 2004 and 15% in 2005. And the proportion of spending on security is expected to continue to increase.
Want to improve your job security, both current and future. This article outlines five key areas: Stop blowing it on the small stuff, Lose without losing control, Outsource-proof yourself, Be a technology asset, and Be the whole package.
In the proud tradition of anti-patterns, this excellent post gives some practical tips for reducing procrastination and improving productivity.
At some point in their careers, most technical professionals are faced with the question of whether they should move into management. Pundit Paul Glen discusses the reasons why and why not.
Young people entering the workforce today have grown up with and take for granted technology. But fewer of them are interested in IT and other technology careers.
As e-mail becomes entirely ubiquitous, it becomes easier to fire off a missive than to talk directly to others. This article warns against the lack of non-word context in e-mail communication and recommends always using some verbal or (preferably) face-to-face follow up.
Need another reason to be a great boss? New research shows that abusive bosses result in slacking off and poorer work quality by their subordinates.
While primarily intended for hiring organizations, this list is also great for job seekers themselves, as it gives some insight into the hiring process and suggestions for how to make the most of your search.
Typical expenses for looking for a new job, such as employment agency fees, postage, toll telephone calls, and many more, are usually tax deductible. Don't forget these important deductions!
No one likes being around sourpusses all the time. Here are some practical and achievable tips for how to become an optimistic person. These are very relevant in light of new research showing that middle-class people are happier than the wealthy and discoveries of the portions of the brain responsible for optimism.
60-hour work weeks are common, if not typical, in the IT world. But there are ways to bring your work and family life back into balance.
One of the common transitions from a technical to a managerial role is to move into project management. But how do you know if you cut out for project management? Here are some traits that indicate that this role might not be for you.
Leadership guru Warren Bennis says that the single most important trait of leaders is character. He defines character as the core values and principles that define a person in all situations.
Americans believe that business leaders are uninspired. Only 10% of workers look forward to going to work. This article discusses the characteristics of great leaders. The key components revolve around outlook: enthusiasm, optimism, and encouragement.
Internet pioneers Larry Roberts and Len Bosack continue their crusade to bolster the underpinnings of the Internet and avoid it's failure due the load from VOIP and streaming media.
Telecom pundit asks the question about how individual and company online behavior would change if unlimited bandwidth were a reality.
This detailed report looks at how
government regulation and competition are affecting the availability of
broadband Internet service in the
Google's anticipated foray into mobile phone service is intended to loosen the carriers' control over their mobile phone networks in an effort to bring the dynamics of the PC-oriented Internet to the mobile Internet hoping that it can beat competitors in an open environment. Instead of trying to compete directly with Apple's iPhone, the gPhone will focus more delivering existing Google services in an untethered manner.
GanttPV is an excellent project management application alternative to MS Project. It uses the simple task grid metaphor with a Gantt chart view of task list, including dependencies, if any. One of GanttPV's greatest feature is that all commands are scripts (sort of like "macros"), so you can write your own automation of the tool, if you want. The scripts are written in the standard Python language.
AeroFoil is a simple background utility for Vista that enables the Aero GUI effects (Vista's shiny new translucent effects) when your laptop is running on AC power and then turns Aero off to save power when your laptop is running on battery.
SQuirreL SQL is a free, cross-platform, Java-based universal SQL client. It works with any database which provides JDBC drivers (most database systems do!) and even includes an ODBC-to-JDBC conversion interface to use existing Windows ODBC connections directly. It features most any function that you can think of for database browsing and editing, including browsing/examining database objects, such as table structures, indexes, etc., ad hoc SQL query development with command and name completion, and much more.
This is a free mind map drawing tool. In addition to basic mind maps, it includes shapes for simple flow charts and brainstorming diagrams. Mind maps can be printed or exported as image files.
If you write blog posts or other online articles that include sections of codes, it can be difficult to format your code sections. Quick Highlighter solves this problem. Simply paste in your code, select the appropriate programming language, and let it generate HTML for you. Many languages are supported, including C, C++, C#, PHP, Perl, Python, PL/SQL, Java, and many more.
RightLoad allows you to upload files to your web site, blog, or other online storage area simply by right-clicking on the files. You can even specify the target directory on the host. After uploading the files, RightLoad generates a list of links to the uploaded files that you can paste into your blog post or site HTML file.
Text Mining Tool will extract the textual portions of documents in PDF, MS Word DOC, RTF, CHM (MS HTML Help), and standard HTML files without needing the native application. It comes both GUI and command line (console) versions to allow batch extraction.
Jarminator is a tool for enumerating and examining classes in Java Jar files. It can combine classes from multiple Jars and includes ability to filter for only particular classes. It will also show duplicate class names from multiple Jars to help resolve conflicts.
Cream is a front-end for the excellent Vim text editor (which itself is a GUI version of the classic vi editor). Cream adds some handy functions to Vim that make it an excellent all-purpose editor with standard GUI features, including standard menus, tabbed window interface for editing multiple documents, unlimited undo/redo, printing only selected lines, block indent/unindent, and much more.
SharpKeys is a handy utility to apply a registry hack to remap keys on your keyboard. You can even remap a key to nothing, which essentially disables it. It works with multimedia keyboards that have the extra keys, as well as standard keyboards.
By default, the NTFS file system updates the Last Access time stamp whenever a file is accessed. In most cases, users don't care when a file was last accessed, so you can (slightly) improve performance by disabling the update of this value. To do so, launch the Registry Editor (Start | Run à regedit). Navigate to the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem key and add a new DWORD value named NtfsDisableLastAccessUpdate. Set this new value to 1 and restart your system for the change to take affect.
Many programs will leave portions of their code in memory after terminating so that they can be re-used without re-loading if needed by future applications. Of course, this puts a burden on the system and makes less memory available to other applications. You can create a desktop shortcut to force Windows to unload these unused applications. Right-click on the desktop and select New à Shortcut. In the Create Shortcut window, enter %windir%\system32\rundll32.exe advapi32.dll,ProcessIdleTasks and press Next. In the Select a Title for the Program window, enter a descriptive name like Clear Memory and press Finish. Right-click on the new desktop shortcut and choose Properties. In the Properties window, select the Shortcut key field and enter the desired shortcut key combination, such as <Ctrl>+<Shift>+M and press OK. Now just double-click the shortcut or use the shortcut key combination to free memory when necessary or desired.
If you want to quickly compose a new e-mail message, but don't want to lift your hands from the keyboard to bring MS Outlook to the foreground, you can create a shortcut that will open a new message window and then assign a shortcut key combination to it. First, just create a new desktop shortcut: Right-click on the desktop and select New à Shortcut. In the Create Shortcut window, browse for the Outlook application executable (OUTLOOK.EXE) and then append /c ipm.note to the command line and press Next. In the Select a Title for the Program window, enter a descriptive name like Create New E-mail Message and press Finish. Right-click on the new desktop shortcut and choose Properties. In the Properties window, select the Shortcut key field and enter the desired shortcut key combination, such as <Ctrl>+<Shift>+N and press OK. Now, when you want create a new e-mail message, just press the shortcut key combination. You can adapt this technique to create other Outlook items by replacing ipm.note on the command line with one of the following:
"Sticky Note" - ipm.stickynote
Task - ipm.task
Contact - ipm.contact
Appointment - ipm.appointment
See this article in MS Knowledge Base for a complete list of Outlook command line parameters and options.
This site explores the ages old relationship between math and art. It features galleries of mathematically inspired artwork and more.
Getting too much work done? Not enough distractions or intrusions during your day? Well, the Bureau of Workplace Interruptions can help. Just fill in your e-mail address, phone number, and/or location and they'll schedule an ad hoc interruption! Of course, it's all just for fun!
Ever design mazes on a sheet of paper as a kid? This online tool will create them for you. You can control the dimensions (number of cells) and cell size as well as the complexity (what they call "anfractuosity" - never heard of that word!). In addition, you can have the tool solve the maze and watch as it traverses the path looking for the solution. One of the neatest things is that the mazes are rendered entirely in HTML and CSS (no image files).
Free Rice is a vocabulary game by which international aid agencies donate 10 grains of rice to hungry people for each correct answer that you submit. Play as little or as much as you want and help others while you learn. What a great idea! And don't forget to visit The Hunger Site everyday, too!
Afraid of something, but just not sure what the official name is? Phobia Guide to the rescue! My favorite is nephophobia: fear of clouds. Not that I've got that, mind you!
Ever visited a place that you always wished you could go back to? Well, this won't get you there, but maybe it's the next best thing. This site is a directory of webcams from around the world. Check out your favorites from one place or look for new and interesting places to "virtually visit".
I've always been fascinated by juggling, even though I'm not sure that I have the coordination to do it. This site provides free juggling lessons via animations and video. To see an introductory lesson without signing up, check here.