And now we grow…

We are happy to announce Brandon Kirby is joining Twelve Foot Guru. Brandon brings his wide-ranging background in Java-based enterprise architecture and integration, web and mobile development and database design to the team and looks forward to helping our clients achieve their goals.

Stratix: Procheck II

It’s always interesting when a client comes back to you asking for an update on an old project. It’s a great opportunity to examine older code and see if your assumptions and planning have left you with a system that is easy to modify and update.

The updated Procheck software,. Now with full device setup and testing.

The updated Procheck software,. Now with full device setup and testing.

Procheck was originally built to allow QC technicians to record test data and configuration options for electronics gear. Each piece of gear had it’s own custom set of requirements and testing setup based on the company making the purchase and the type of equipment. This called for a huge amount of flexibility in the system. Admins where able to setup the unique tests and options for each piece of equipment as well as link to documentation the tech might require. All of this was wrapped up in a tag-able, searchable system with reporting. Stratix was very pleased with the results and the system saw a ton of usage. After a time, someone asked the question, “wouldn’t it be great if the system itself ran the tests and gathered the data?” Enter Todd Schroedel of Stratix. Todd wrote a series of PERL scripts that would run tests on Android and iOS devices to query, test and configure a device based on data in the Procheck system. Our job was then to integrate his scripts so they could talk to the rest of the Procheck system. The end result is a system that can query, set up and test multiple devices at once, detecting any failures and reporting them back to the technician for further testing, all at the touch of a button. This saves tremendous time and greatly decreases the potential for any data entry errors. The new system also allowed techs to run much larger batches of devices, which significantly cuts down the staging time for any given order.

From Todd: “I am not sure where to start. These guys were great to work with. With minimum specs they not only met our expectations, but they also added some features that really made difference. There code was always delivered on a timely basis, and within budget. They spent several hours helping us trouble shoot an environmental issue, that had nothing to do with their code. I would highly recommend 12foot guru for your next project.


So this just happened…

We just received copies of our book translated into Japanese. This has pretty much made our week here at the office. I even checked and sure enough, we are on Amazon Japan. The book itself is really lovely and despite being a paperback, it has a dust jacket over the cover. The paper quality is really nice and the chapters are laid out in such a way that you can see where they begin and end even when the book is closed.

Just some very nice design work.


Cover tunes and coding rewrites

Buried among the never ending assortment of hobbies that I seem to collect, is music. My undergrad degree is music engineering. I have a record collection that spans over a thousand pieces of vinyl (and not the apparel kind youngling). I also play bass and guitar. A lot of my worldview and philosophy has been shaped by music. As such, I can tell you that one of the hardest things to do well is to cover someone else’s songs.

Not only is it nigh unto impossible to grasp where the musician is really coming from when they wrote the song, there are simply physical differences between them and you; hand size, speed, knowledge and dexterity. Additionally, there’s no way to truly understand how they got to where they where when they wrote the song in the first place. Did they learn blues first? Did they start out on piano and switch to guitar? Are they self taught or did they spend 15 years studying with Andreas Segovia? What was in their head and in their hands when they wrote the piece?

As crazy as this may sound, code is just like that. All code is informed by the life, the experiences and the idiosyncrasies of the coder. It is, for all intents and purposes the coder’s song.

This leads us to an interesting fact: When you encounter someone else’s code, you are exploring the mind of the coder as well as the code itself. This might seem a pointless observation, where it not for the fact that at some point in your career as a programmer, you will need to modify or replace someone else’s code… You will need to cover someone else’s song.

There are typically two schools of thought in this regard:

a: I will do the minimum modification necessary to make the old code work (even if I have no clue what the rest of this code does).

b: This previous coder was obviously a genetic defective and I will replace what was they have done with my own symphony of utter brilliance and move on.

I think that both of these approaches are flawed and actually detrimental to growth as a programmer. I would argue that the more you understand the previous programmer, the better the overall project result will be and the more you will grow as a coder.

Part of this belief comes from doing this since 1996. As such, I have a wealth of my own code to look back at and critique. Looking at your own code after 10+ years is a humbling experience. There are things I did back then that made perfect sense at the time and yet now they make me cringe. Despite this misspent youth, I am also faced with the simple fact that what I wrote back then worked. Maybe it wasn’t memory efficient and maybe there is a better way to do it, but it worked.

When you are dealing with someone else’s code, the prior considerations, conditions and history are even more ephemeral. It’s not just a question of what was the coder’s background, skillset and experience. What did the client originally request? Did they explain that request clearly? Did the client change their mind half way through the project?

Getting into the mindset of the previous coder can help you figure out how they organized things. It can also help you discover features or restrictions the client may have glossed over. Learn as much as you can before fiddling about in someone else’s code. The sanity you save, may be your own.

Clients in the Modern Age

business_male_female_usersOne of the things our friends find hardest to believe about our work is the fact that Bryan and I have never met more than a handful of our clients in person. The vast majority of our clients are out of state and our publisher is actually in another country.

However, this does not mean that our clients are faceless people, with no relationship beyond a set of requirements and a paycheck. They are very much individuals with their own goals, personalities and specialties. The more you know about your clients, the easier your life is going to be. It’s safe to say that every successful project we have been involved with, started with good communication.

While coders have a large impact on the success of a project, clients can make or break a project in any number of ways. The communication between coder and client is absolutely critical, more so when the two parties are separated by timezones. It’s incredibly difficult to manage expectations and communicate the status and gotchas that creep into any coding project.

Most coders tend to think of this type of communication only in terms of educating the client, but the education has to flow both ways. The coder has to understand the restraints the client is under. Is it time? money? are they trying to deliver the project for their own insane client? Projects can get really hairy really quickly and a reasonable, communicative client is worth their weight in gold when a project starts to tailspin.

We have been working with Undici Design out of New York for several months now and I can safely say that these are the kind of clients I enjoy having. The project itself was a re-write of an existing code base which could charitably be described as “less than deluxe.” The code itself was nightmarish, but Catherine and Mark at Undici were an absolute joy to work with. They communicated expectations well and tempered them based on the feedback we gave. They were flexible, clear and fun to talk with.

Getting this endorsement from them absolutely made our day.

“We hired Twelve Foot Guru to finish an unusually complex inventory management application that was built in ExtJS and PHP. This not only required a detailed knowledge of ExtJS and PHP but the flexibility and intelligence to dive into another programmers code, figure out the methodology behind it, repair it, and improve it. There is nothing more difficult than completing someone else’s project. On all levels, our experience has been and continues to be excellent. Twelve Foot Guru’s temperament provides the right mix of doing what we request and pushing us to consider different approaches where they believed it would improve the overall result of the product. They are easy to communicate with and always understood our requirements. With phase one (taking the application out of BETA) almost completed, Twelve Foot Guru has exceeded all of our expectations by staying on time and on budget.”

Mark Deutsch
Owner at Undici Design

CoderFaire 2013 Notes

This page lists all of the links from our “Sencha Touch: Build an App in an Hour” presentation at Atlanta CoderFaire 2013:

You can download our demo app, TaskMaster, from GitHub.

Creating Mobile Apps with Sencha Touch 2 by John Earl Clark and Bryan P. Johnson (Amazon | Packt Publishing)

Sencha, the makers of:

  •  Sencha Touch Create mobile applications for iOS, Android, Blackberry and Windows phone.
  • Sencha Cmd is a command line tool that will generate a basic application framework and much more. Documentation for using Sencha Cmd with Sencha Touch and ExtJS. Download Sencha Cmd for Mac, Windows and Linux.
  • ExtJS Create rich web applications with cross platform support for all major browsers.
  • Sencha Architect A visual editor that works with both Sencha Touch and ExtJS
  • allows you to store your data in a remote system and leverage social logins via Facebook and Twitter
  • The Desktop Packager turns your code into a desktop application

Sencha Touch 2.2 Docs

Sencha Touch 2.2 Guides

Sencha Touch 2.2 Videos Docs

SASS & Compass Tutorials

SASS Website

Compass Website

You like us… You really like us.

prize_winnerAs programmers, we work on a wide range of projects, some good and some less than good. We have recently been doing some work for Park City Group and we have very much enjoyed working with them. We received an endorsement from them today and it is very nice to know that the feeling is mutual:

“Bryan and John were very flexible in our engagement, and worked with us on every facet of our project. This flexibility was a key factor for our project, as we needed to have quite a bit of hand-holding to get things rolling. Once the project got its legs, they continued to be of high value in mentoring and best-practices. We have continued to renew our investment and relationship with the folks at 12ftguru for several contracts now. They are professional, and very friendly to work with.”

Jim Eckels
Director, SC Development at Park City Group

Stratix: Process Management System


Part of the technician view for the application

The Stratix Process Management System is designed to track electronic devices through a staging process. Each device is pulled from inventory, setup according to the needs of a specific customer and run through a QC checklist to see if there are any potential problems with the unit. The system tracks data for each unit and the results for all testing. Time spent on testing and setup is also tracked to determine if there are any bottlenecks in the process.

The data is then logged for reports and searchable by the technicians.

Administrators can setup different requirements and testing scenarios per company and per item. This allows Stratix to uniquely tailor a device for a company in a consistent fashion.

From the client, Heather Honerkamp:

“Twelve Foot Guru built a database to “go paperless” and archive data and quality records for custom IT mobility implementations and life-cycle management. In less than 6 months, we took a fuzzy idea through the full software development life cycle and eventually recovered 2 hours of waste per technician. What they were able to accomplish was amazing and the final product got rave reviews from end users and management for its simplicity and features. I found Beej and John a pleasure to work with. Having gone through many software implementations previously, I was overwhelmed with their ability to take my “sketch” and turn it into something wonderful. I give their communication skills high marks. I would ask for X and get exactly what I wanted, and sometimes even better. They delivered a tremendous value to us at a critical time and were a pleasure to work with. I highly recommend Twelve Foot Guru and would welcome the opportunity to partner again.”

Collaboration Is Your Friend

One of the old saws in writing is to “write what you know.” As coders we often create projects in isolation, coding up our ideas and taking about 10 minutes to staple some sort of interface on top of it.  We don’t always write what we know.

Bringing in some outside help and perspective can take an average project and make it something really interesting. This weeks bit of interesting is courtesy of Aaron Karp, Web Ninja and part time Thermo Nuclear Super Rock Star.

Aaron dropped by the pink motel and pitched in on a mobile application project we have been working on. The application is strongly text based and my initial efforts at design where clashing horribly with Apple’s pretty glossy candy interface (see image 1).

image 1: My initial version. The text just kind of sits there doing nothing.

As you can see, my version is kind of boring. Without any images the text just sits there and looks dull and uninviting. The list looks very much like every other list in an iPad or iPhone.

This is where a good designer comes in. Aaron has a different perspective from me. He see’s fonts as a visual element rather than simply a text element. He also comes from a windows phone background which gives him a different sensibility when it comes to mobile applications. While Apple is pretty amazing when it comes to design and mobile products, I have to say that the new Windows 7 Mango phone interface is insanely pretty. It also has a strongly typography based aesthetic, which is what I was looking for on this project.

image 2: Aaron's first draft. We are still tweaking the designs and such but it's already so much better than what I had.

Aaron delivered in a huge way (see image 2).

His design is way more professional than anything I would have come up with. He also had some great feedback on the flow of the application. The text is artfully arranged and much more visually interesting. If we use a bit of transparency here and there, we can also do some really cool things with backgrounds. We are still hashing out some of the layout and functionality, but I really like where this is going.

Stay tuned for updates where we will actually talk about what this app does.

Isn’t more always better?

As programmers (and as clients) we have this notion that being able to customize and configure to suit personal preference is the key to eternal happiness. Everyone is looking for something just a little different, so the more we can tweak and modify, the better. We all want the site to look a certain way and behave a certain way, don’t we?

It’s one of the main reasons we love using WordPress. With a nearly limitless ability to tweak, configure and augment, WordPress can be used in an amazing number of ways. Unfortunately for most WordPress users, WordPress developers tend to concentrate on the site design and leave the admin interface as-is. Most don’t even realize that, like the front end, the backend of WordPress can be customized as well.

Before you roll a site out to a client, think about what they really need. Think about what they are going to want to do every day as opposed to the pieces they will never touch or only use once.

A hundred options are really just ninety-nine places for the client to get lost while looking for the one thing they need to do.

Think of it this way, which of these do you think your customer will be happier using: