Category Archives: Software Enhancements

For Custom Software Development, visit our new site.

We’ve just finished updating our company web site.  The new site is 100% responsive (i.e., it resizes to fit whatever device you’re using). We’ve spent quite a bit of time striving to make it look more professional and to better describe what we’re all about.
Visit the site if you’re interested in custom software development services.

The Perils of a Neglected Schedule

And One Possible Remedy

Has this ever happened to you?

You arrive at your office an hour early–determined to get in front of the demands of your job.  You check today’s schedule and make a mental note: “don’t forget to attend that important meeting at 2pm!”

Then, as more employees arrive, the pace at your office grows more hectic. A coworker drops by, asking for help with a project she’s working on. A lengthy phone call temporarily derails your train of thought.

And the morning races past.

You work through the lunch hour-so engrossed in the flurry of activity that you lose track of time. At 1:30pm, you’re summoned to help put out another fire.

Finally, it’s time to leave for your 2pm meeting. But you’re so caught up in the urgency of the immediate that it has slipped your mind entirely. You miss the meeting.

The Trouble with a Neglected Schedule

Maybe your life is so well-organized that this never happens to you. Mine sure isn’t.

In fact, this very scenario has played out in my professional life more often than I’d care to admit. Oh, I’ve read several time-management books-and vowed to implement every suggestion they offer. But then, another urgent crisis drowns out the ticking of my schedule clock, and I fall short on my commitments once again.

The problem isn’t with my schedule. It clearly identifies every meeting, every appointment, and every upcoming conference call. The problem is that often I neglect my schedule. I don’t give it the attention it deserves.  But what to do about schedule neglect?

Many time-management books advise you to shut down your e-mail program, so that inbound messages don’t distract you. Thus far, I haven’t figured out how to close Outlook and still see appointment reminders. Even when Outlook is open, that reminder dialog appears to play hide-and-seek, ducking behind other windows.

If only my schedule were able to call out to me, “Dave, come back! Look at me! You’ve got some important items on your docket!” If it could do this, I would have a better grasp of where I’m at, and where I need to be next.

One Solution

That’s why recently, I decided to devise a way for my schedule to seek me out. Several minutes before each meeting, my schedule actually calls me on the phone, giving a verbal reminder of each appointment. I won’t bore you with the programming details. But here’s a brief explanation of how it works (after the software has been configured to work with your schedule).

The process is simple. Just open your e-mail program, and create a typical appointment:

After setting the date and time, set a reminder as you normally would.

There’s just one difference: in the textbox below, type the word Cue: followed by 1 or 2. This cues the phone system to dial either your primary or secondary number (eg, office phone/cell phone).

With the new logic in place, my phone delivers a recorded message at just the right time: “This is a friendly reminder that you have an appointment 5 minutes from now.” And out from the fog, back to reality I come.

So here’s my question for you: Would you find this useful at your office? Do you think people might even be willing to pay for a service like this? For me, a reminder service that ties directly into my schedule is a priceless asset.

To paraphrase JFK, “Ask not how often you should check your schedule. Ask how often your schedule should check in with you.”

I’d welcome your feedback.

 

RFID for Dummies–a Simple Explanation

What is RFID?

RFID stands for Radio Frequency IDentification.  You’ve probably heard about it before.  One Wisconsin company recently made headlines when it announced plans to embed RFID devices under the skin of its employees.   But what exactly does that mean?  And how does it work?  In short, it’s a technology that’s useful for keeping track of persons, pets and things.RFID for Dummies snapshot of RFID tags

How does it work?  Here’s a simplified analogy:  Suppose you fill several beer (or soda) bottles with differing levels of water.  When you blow across the mouth of the bottles, each one makes a unique sound, depending on how much water it contains.

RFID works in much the same way.  Think of an RFID device as one of the bottles.  But we don’t blow on it to generate sound waves.  Instead, we use an RFID reader which “blows” an electronic signal across the device.  Just as each bottle makes a unique sound, each RFID chip responds with a unique radio wave signature.  Store these signatures in a database, and voila!  You’ve got a system that can track millions of items.

RFID devices come in a huge array of shapes and sizes.  Tiny grain-sized units that can be injected under the skin of your favorite pet.  Larger devices may come equipped with batteries (AKA Active tags)–enabling them to generate much stronger signals.  (Active tags can be very useful for tracking tools, rental equipment, and so forth.)

The Benefits

You might ask, “Why not just use barcodes?”  Oftentimes you can.   But realize that you’ll need a clear line of sight to bounce a laser beam off each barcode.  If you need to scan a box of parts, you’ll have to open the box and manually scan each barcode.

Here’s where RFID offers a big advantage. With the right scanner and software, you can scan multiple RFID tags simultaneously.  This allows you to collect data faster–without opening or disturbing the outer packaging.

Another advantage of RFID tags: durability.  Barcodes are usually printed on paper and can easily tear or smudge.  On the other hand, most RFID tags are embedded inside a plastic housing. This makes them impervious to moisture and moderate heat. In fact, many uniform and cleaning companies sew RFID tags into the hem of uniforms.  This helps to track items through hundreds of wash and dry cycles.

Here at I/O Technologies Inc., we utilize RFID badges and readers in our FastPunch! timeclock software.  FastPunch! allows employees to clock in and out by simply waving an RFID badge in front of a reader.

If you’re contemplating a project that involves tracking inventory, tools, vehicles, or people, RFID makes a lot of sense.   Contact us to discuss the pros and cons of RFID, and how you might opt to incorporate it in your next project.

One-Time update for Odolog users.

 We’re pleased to announce that effective immediately, users of the free Odolog application can download an update which will make all future updates completely automatic.

Previously, if you needed to update your version of Odolog, the only way to do it was by reinstalling Odolog from scratch.

Starting now, we have incorporated the ability to update Odolog automatically.

Do I need this update?

Here’s a quick way to find out if you already have the newest version. While running Odolog, choose Help … About.

If you see version 1.2.68 (or higher), you already have the latest version and don’t need to install this one-time update.

If your version is not 1.2.68 or higher, it would be a good idea to perform this special update. Why? Because in the future, any time we deploy an bug fix or enhancement update, it will install itself automatically.

To install this special update, please follow these eight easy steps:

  1. Back up your data. Although we don’t expect this update to interfere with your data files—it’s better to be safe than sorry. It’s always better to have too many backups–than not enough.
    To back up your data, choose File … Backup Data Files from the main menu. This will create a Zip file containing any data you’ve entered since you first started using Odolog.
  2. Re-download OdoLog and install over the top of your existing installation.
  3. Right-click the shortcut you use to launch Odolog … and choose Properties from the menu that appears …
  4. Click Open File Location on the next dialog.
    IMPORTANT: do not replace the Odolog.exe file in the folder that appears (see screenshot below)!!

    In other words: don’t overwrite the file that has a red IO logo. (FYI, this is a small launcher app, which we use to launch the actual Odolog application.) DO NOT replace it.

    Let me say this again: You do not want to replace the odolog launcher file that has a red IO logo.

  5. Instead, double-click the Resource Folder to open it
  6. Then double-click the Odolog folder inside the Resource Folder.
  7. Inside this folder, you’ll find another file called odolog.exe. This is the one you want to replace.Replace the odolog.exe that you find inside the Odolog folder (which is a subfolder of the Resource folder) by copying/pasting the new Odolog.exe from the Zip file you downloaded into this folder. If prompted: yes, you want to overwrite the existing file.

  8. Finally, close all open windows, and re-launch Odolog. When you choose Help … About, you should see version 1.2.68 (or higher)

What happens next?

In the future, whenever we release a new version of Odolog, you will see a dialog–asking whether you want to install the latest update.
(You’ll see it when you’re exiting Odolog.) Once you agree to install the update, it’ll be deployed automatically. The next time you launch Odolog, you’ll have the latest and greatest version.

One Final Note:

Odolog is free, and we don’t have any plans to start charging for it. But if these instructions seem overwhelming and you’d like us to deploy the one-time update for you, we’ll be happy to help.
We’ll need to charge a one-time flat fee of $9.99 to cover our expenses. (On average it should take less than 10 minutes for us to connect up and deploy this update.)

If you have any questions or concerns in this regard, please feel free to contact me.

How a Flight Notification Board Almost Gave Me A Heart Attack

Late Friday afternoon I was sitting in the business center at the Baton Rouge airport, waiting for a flight to Atlanta.  It was originally scheduled to depart at 5:25pm.  I kept one eye on the flight status board, just in case my flight might get delayed.

Wouldn’t you know it?  The board reported that the flight was delayed.  No problem–I should still make my connection in Atlanta.  So I settled in and continued working on my laptop.

Then, a little later, I looked up and was shocked to see that the flight was now scheduled to depart 4 minutes earlier than originally scheduled!  Here’s a photo… Note the line for the flight to Atlanta:

heart_attack_time

If that information was accurate, it was already well past boarding time!   So I made a mad dash to the gate–praying that I could still get on  the plane.  But when I arrived at the gate, people were still sitting in their chairs.  Boarding hadn’t begun yet.  And the gate signage continued to indicate that the flight was delayed:

but_at_the_counter

Note to Delta–if you need help fixing that software, just let us know!

Making Cold Calling More Productive

Love it or hate it, one thing is clear: stick with it long enough, and cold calling will generate leads.

And what could be easier? All you need is a phone, a list, and a little time. Moderately thick skin won’t hurt, either.

The process itself is fairly straightforward:

  1. Assemble a list of prospects who meet your target demographic
  2. Pick up the phone and dial
  3. Recite your script
  4. Schedule follow-up appointments
  5. Wash, rinse and repeat until your schedule is full

And here’s one surefire way to improve the odds in your favor: keep track of your efforts.

Keeping track means more than tallying the number of calls you’ve made and appointments scheduled. Your goal is to identify:

  • the best day(s) of the week to make your calls.
  • the best time of day
  • the most effective script

Over time, as patterns emerge, you can tailor your scripts and schedule to make calls when they’re most likely to produce optimum results.

While you could log your efforts using pencil and paper, a spreadsheet will probably enable you to crunch the numbers faster. But wouldn’t it be nice to standardize and automate the process even more? That’s why recently, I’ve begun writing a desktop application that integrates directly with our PBX.

Here’s a screenshot of what the main form looks like …

For me, this application offers even more time-saving advantages. First, it automatically dials the numbers, so I don’t waste time punching out individual digits on my phone’s keypad. Secondly, it logs the call date, time and duration (see them at the bottom of the form?). So it’s impossible for me to forget to log my calls. Most importantly, I can run SQL queries against the data I’ve captured, to generate reports and graphs that spell out what’s working, and what isn’t.

So what do you think? What features would make this application even more useful?

I’d welcome your feedback about this application.

Just because someone fancies him/herself a competent programmer does not make it so!

While updating an application we inherited recently, Jeremy (one of our programmers) emailed me this example.  (This happens to be Visual FoxPro code, but we often encounter similar programming in Visual Basic, C++, and PHP code we inherit…)

This is really a circuitous way of performing a simple function.

This is really a circuitous way of performing a simple function.

“OK, Dave,” you’re probably saying–what’s so bad about it?  Well, a few observations come to mind:

1) Even with the comment above this code block, it’s difficult to understand what in the world the programmer was attempting to do.  There are much better ways to strip embedded spaces from fields.

2) The code uses single-letter variable names.  Suppose the program bombs, returning an error  message such as:  “Variable N not found.”  Guess how many times the letter ‘N’ occurs in this program?  How long will it take to find the specific ‘N’ being referenced?   Better:  use Hungarian notation.  For example:  lnX = AT(‘ ‘, … etc).   It’ll be a whole lot easier finding lnX in the code than trying to locate the specific instance of ‘N’ that caused the error.

3)  This code will write and rewrite strings to the database up to 20 times per record–when a single write per record would suffice.

4) This logic, spanning nine lines of code, creates a nested looping structure.  Nine lines will be much more difficult to maintain (and debug) than what’s needed.

So, how would we recommend changing the coding above?  How about a single line of code: 

UPDATE <table> SET ponumb=STRTRAN(ponumb,’ ‘) WHERE AT(‘ ‘,ALLTRIM(ponumb)) > 0

An added bonus:  this logic will only write to the database when a PO number actually contains embedded spaces.  The fewer times our code updates the database, the better.

Positive Feedback

Yesterday, a visitor to our website named Adam downloaded a copy of Contact! — our free contact manager software. But recent updates we made had introduced a problem with the installer.  This was the kind of problem that that wasn’t easily uncovered during beta testing.

When Adam called it to our attention, we updated the logic to address his issue.

I thought I’d share his response …

Subject:RE: Email verification for Contact
Date:2015-11-24 16:50
From:“Adam”
To:<dmartin@iotechno.com>
Hiya Dave 

The new download has resolved the issue.
Thank you very much for your prompt response and resolution of my issue with
your software.
It's nice to find a company that is prepared to take the time to resolve an
issue with their product instead of just ignoring the request. Even more so
when you consider the fact that your product is a free one.
Hats off to you Sir.

Kind Regards
Ajay (Adam)

What’s YOUR programming philosophy?

We met with a prospective client recently, who asked me, “What is your programming philosophy–do you prefer Waterfall or Agile?”

If you’re unfamiliar with the terms, here’s a brief overview:

Waterfall Software Development

The waterfall approach to software development breaks the overall project into several distinct phases:

Requirements
 Design
  Build
   Test
    Deploy

For Waterfall to work, developers can move on to the next phase only when its preceding phase has been completed and reviewed. We can’t swim upstream, and there are no fish ladders available.

The Waterfall Challenge.
The biggest problem with this approach is that clients seldom have a firm grasp on exactly what their requirements are. If requirements are unclear, the project will never get past the requirements-gathering phase.

But if a client insists on moving forward without completing each phase, software developers will likely end up throwing portions of the code away, as the project scope changes later on.

Agile Software Development

Several years ago, to address the limitations of the Waterfall approach, a group of seventeen software developers met to discuss alternatives. They published the following Manifesto for Agile Software Development:

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions    over    Processes and tools

Working software    over    Comprehensive documentation

Customer collaboration    over    Contract negotiation

Responding to change    over    Following a plan

That is, while there is value in the items on the right, we value the items on the left more.

Kent Beck   James Grenning   Robert C. Martin
Mike Beedle   Jim Highsmith   Steve Mellor
Arie van Bennekum   Andrew Hun   Ken Schwaber
Alistair Cockburn   Ron Jeffries   Jeff Sutherland
Ward Cunningham   Jon Kern   Dave Thomas
Martin Fowler   Brian Marick

© 2001, the above authors. This declaration may be freely copied in any form, but only in its entirety through this notice.

Agile software development offers an appealing alternative to Waterfall. Rather than scoping out a massive project and trying to address every possible detail, it breaks development down into bite-size chunks. As each new chunk is finished and tested, it moves into production immediately. This approach is known for its ability to deliver working software to customers faster. Then, as end users begin working with the new features, they often provide valuable feedback to drive future development.

Some of the best software we’ve written was developed using the Agile approach; we met with our customer to identify an overall goal, then wrote self-contained modules which performed specific functions fairly quickly.

The Agile Challenge.
But there’s a potential tradeoff. Developing software without an overall project design is akin to building a house without a blueprint. Unless project stakeholders pay close attention to the overall project evolution, the final result can end up looking like the cobbled-together effort that was used to put it together.

Oh, and then there’s one other small (almost trivial) issue: cost. Agile tends to be a pay-as-you-go approach. As a result, Agile projects can end up costing considerably more than anticipated.

Don’t get me wrong–if your company’s goal is quality software written quickly, then Agile makes a lot of sense. Just realize that if you’re working within a fixed budget, you may end up with less functionality than you envisioned. I.e., you may run out of budgeted funds before the evolving goals for your project all come to fruition.

You’ve probably noticed that I haven’t really answered the question. Why? Because I won’t be writing the check for your software project. More important than asking, “What’s I/O Technologies’ development philosophy?” is the question, “What is YOUR development philosophy?” If you need software quickly and don’t have all the details fleshed out, then Agile is the way to go. On the other hand, if you are faced with a fixed, not-to-exceed budget and can put together a well-defined project specification, then let the water fall!

Recent updates to vbsroster.com

Several churches I’ve talked with recently say they’d like to use vbsroster.com, but it doesn’t fit their situation because they don’t host a Vacation Bible School–(at least not using the VBS nomenclature). Instead, their churches offer soccer camps.

To address this need, we’re adding the ability to switch the theme from VBS to Soccer Camp. The same student, parent and emergency contact forms will be presented to parents, but the photos will have a soccer theme.

In addition, we’ve also added additional customization capability, including:

  • Color selectors to change the header/footer color, as well as the title font color
  • Home page editing capability
  • Ability to link back to their church website (or another site).

Next on the docket: install an SSL certificate and move from beta into production.

Looks like our May 1 target is still on track!