Tried Mailbox for iPhone but ultimately switched to the Gmail app

I was an early adopter for the Mailbox app for iPhone (http://www.mailboxapp.com/). By early adopter I mean that I had my name in the queue before most folks so I was able to start using it almost right away when it was released in the app store.

There are a few great things that I loved about the Mailbox app, but that’s the problem. There were only a few great things…and that was it. I use Gmail for personal email, my small business and my day job (Google Apps for the latter two). I use labels extensively for grouping and keeping me on task. I have my day job setup in a manner that my email system works as a ticketing type system (I’m in IT) and Mailbox didn’t really meet my needs for that. The only real feature that can’t be had elsewhere is the ability to put an email on ice for a set period of time.

I had tried using the native Gmail app when it was first released in the iOS app store, but it was horrible. It was just a wrapper for their web interface (and to some degree it still is), had support for only one Google account, etc. I tried it again and I’m loving the experience! I get the same level of usability on my iPhone AND iPad that I get on my desktop. That’s something that no third-party email client will be able to beat IMO.

Mailbox is iPhone only and I spend quite a bit of time on my iPad for this sort of thing. Having a seamless experience across all platforms is spectacular. The wow factor of Mailbox wore off much quicker than I imagined it would and that’s ok, because I found something way better! Who would have thought that Google would have the best email experience on a iOS device? Obviously that only applies if you use Gmail exclusively, but that’s ok with my setup.

Fear

I have a fear…a fear that my methods of providing for my family and for myself will become irrelevant. I’m sure I’m not in the minority, especially during these difficult times…but it certainly doesn’t sway existence of my irrational fear.

My primary source of income and well-being for myself and my family is currently in the hands of a mid-size privately held company. I am the head of IT for said company with ~150 employees which has both risks and rewards. It is my responsibility to research and ultimately adopt new technologies to progress the company forward making it leaner and more efficient throughout.

Growing up:

I grew up in the 1980’s, and while technology advanced during the 80’s and 90’s, it did so at a fairly manageable pace. I started my career in the early 2000’s (I graduated high school in 2000) and decided to forego attending college and instead focus on building my career. That’s not to say that I didn’t have any sort of training. My senior year of high school was spent taking a condensed customized tract for the subjects I was most interested in at a vocational school. I took proctored tests at a local community college and obtained certifications from Novell (at the time, Novell was still a competitor) and CompTIA. Through the 2000’s however, technology seemed to blossom and offer completely new paths that took on all new fields of their own (the mobile industry for example such as the iPod and iPhone). In this new decade we’re already branching into what will eventually be huge fields of their own (e.g. 3D printing). It’s enough to make one person mad (read: crazy) trying to keep up with it all. This is especially true if it is your job to vet new technologies and deploy the ones that are found pertinent to your industry.

College:

I believe that a college education isn’t required for everyone…it certainly wasn’t required on my part to be successful. The best a college education offers (my opinion…take it with a grain of salt since I never went) is to give one social skills and the tolerance to work and keep learning, eventually turning ideas into reality. Geeks like me could care less about social skills for the most part. That isn’t to say that I’m not social when I need to be, it’s just that I do perfectly fine confined to my computer for hours or days on end. It keeps me happy because this is my place.

My career choice (IT) also dictates that in order to keep my job, I must always be absorbing new content. That is, I need to always be evolving my brain to adapt to new technologies and how those may be applicable to my peers and ultimately the customer. This isn’t a big problem for me as I (generally) love what I do. Now that I’m in my 30’s however, I’m starting to gain fear that love simply will not be enough to maintain the status quo. My answer is currently to direct myself to getting a granular college education, but on my own time. I’m currently taking a HarvardX computer science course which should be complete in April (or before then if I can get it completed early). Upon completion (and a passing grade of course), I will receive a certificate from Harvard’s new HarvardX online education branch. It’s free for me to attend except for the time and work involved of course.

The problem with college is that almost all employers require it on paper. That piece of paper is more than likely the biggest stumbling block for landing on the desk of the person who could change your life forever. That isn’t to say that some companies look past this (luckily for me my two biggest employers after high school chose to disregard my lack of college credentials). Once you have a decade with a company in a certain position, this requirement should diminish but that’s not what requirement sections on job openings lead one to believe. My hope is that my self-taught and granular college courses taken online will be enough to stand-up against a younger me vying for my job.

Specialties:

My love is for pretty much anything in the computer and electronics industry. My problem is that because of the growth of those industries and the technologies within, it’s simply too much for one person to reasonably keep up with. I do not want to be a specialist, I want to be everything and I’m ultimately scared that it will lead me to irrelevancy. As more technologies advance and spread out, the less I know about all of them until I ultimately know almost nothing about anything. IT employees for large companies are accustomed to focusing on and mastering say MSSQL, Exchange, Objective-C, data center network hardware, etc. Unfortunately my job dictates that I need to not only keep email flowing to employees, but also man the network hardware and configuration within as well as develop and continually maintain in-house programs written in Objective-C, PHP with a MySQL database. There isn’t one piece of technology that comes into this company that I don’t vet before hand and configure and maintain for the long-haul.

My answer to coping with this expansion has simply been to offload some of what used to remain in-house to outside sources like Google (Google Apps for replacing MS Office/Exchange/Sharepoint) and even going with a managed firewall service rather than maintain it myself. I’m slowly coping with the fact that I simply can’t be an expert on our firewall model while also being an expert at something completely different. Most of this stuff is a configure and forget technology…except when its not. When it breaks months after you initially configured it and your enter organization is waiting for you to fix it, you quickly realize that being an expert at everything was probably not the best choice…but you traverse through it and ultimately prevail. My fear is that one day I simply won’t be able to prevail.

In it for the long-haul:

I can retire in 35-40 more years. Yep, 35-40 more years of technological advances. Just think of how far technology has advanced in the last 35-40 years and put that on a linear scale with exponential growth…now add the next 35-40 years. That curve (essentially a straight line on the Y-axis toward the right-side) scares the jeebers out of me! How is one supposed to prepare for such growth and expectation? Keeping up with this stuff in the 90’s was one thing, but keeping up with it in this decade is something completely different. Can I really uphold this until retirement? Can anyone?

My thoughts on religion…

I typically keep to myself when it comes to religion…it’s very much like politics as everyone has their own slant or view and if you don’t believe what they believe then you’re viewed as in need of help or “prayer” to guide you to the “right” answer.

Christians base their entire reasoning on a single man and his followers that existed over two thousand years ago…fine, not a problem with that. I base my reasoning that the world is round not based on actually seeing it in person but based on pictures that I’ve seen and what I’ve been told by scientists so both science and religion is largely based on the recounts and expertise of others either in person or in written word.

This is where things begin to clash a little…when science meets religion and it seems like in today’s world you have to choose one or the other, not both because each has so many polar opposite views that it is largely impossible to mesh them together. That is, unless you take the Bible for what it is which is simply a huge book of parables.

Let’s take the story of Noah’s Ark. It’s an outlandish story by all scientific accounts. In fact, it has been proven many times over that there simply isn’t enough water on Earth to cover the entire planet, even if you melted all of the ice in the polar regions. What is more believable is a regional Noah’s Ark where a community flooded. Obviously this doesn’t give the same ‘wow’ factor that the Biblical Noah’s Ark story gives though.

I think humanity gives into the notion that someone else is in control of their entire lives and the world around them. “It’s horrible that someone has cancer but it’s ok because God will heal them if we pray over them long enough.” If you truly believe in prayer then why even bother with modern medicine? If God can part the Red Sea or wipe the Earth clean with a master flood, then why wouldn’t God be able to heal a simple thing like cancer? The Church has become very good at validating things we do by interpretation, but only if it is beneficial to their cause.

Many will say that in order to be a true Christian that you must believe the Bible as literal fact or at the very least believe it as it is recounted for by the Church through interpretation. I can’t and I don’t believe that God literally created humans or animals or even the Earth magically. I don’t believe in the great flood or the parting of the red sea. I don’t believe in Adam and Eve or the crazy stories of Revelation but most of all, and this is a total shocker for most, I don’t believe in the resurrection which means I don’t believe in anything that relies on it occurring.

Perhaps the craziest thing of them all…I do believe in God, maybe just not your God. I believe in a God that planned so well that everything we do is for a specific reason and was meant to happen. I believe in a God that created the Earth and the animals and people that lived on it, but also a God that was able to make all of that happen billions of years in advance. I believe in a God that allows for many Earths and possibly even parallel universes. I believe in a God that created dinosaurs after what seems like an eternity of evolution only to have the slate wiped clean by a giant space rock. I believe in a God that allowed cancer because it pushes us further in science and understanding of what was created and so that we can all be reminded that our time here is short and that we should live it to the fullest. My God created science and IS science. My God is the universe around me and you will never take my God away.

I am not a Christian, but I do believe in God. I go to church most Sundays because I enjoy the music and the applicability of some sermons to my life, but not in the context that it applies to those around me. I enjoy helping those in need but only when there is little to no pressure that by helping you’re also giving yourself up to the push of the Church to believe what they believe.

Everyone has their beliefs, even if you have no belief (that is a belief). What makes your belief more accurate than mine? You could say because your way is the right way or that Jesus said so, but in the end that is your belief. You will end up gaining folks who end up believing what you say, and that’s fine because that’s what will make them happy. But when you try to push your beliefs on those who have a strong beliefs otherwise, you push away many even though you may gain some in the process. The Church believes that this is furthering the fruits of Heaven and that is also fine, but let those of us who strongly believe differently be different.

I have absolutely no qualms with those who truly believe in their God, whoever that may be to them. Ultimately I think we all have the same God, it’s just how you see it.

It’s ok with me if you tell me that by writing this post I’m going to hell because in the end, I know that isn’t true because that isn’t what I believe. I believe it so strongly that it never crosses my mind. I’m here on this amazing planet that is our only known location for the existence of life in the entire universe and I intend to enjoy its fruits (and also take care of it) and the fruits of those who inhabit it.

Set forth and make sure that everyone has something to believe in, but don’t push your personal beliefs onto someone else unless they’re willing to let you in.

After several thousand orders processed and v2 deployed…

There were a few issues with the first version of my mobile order picking software, mostly revolving around my initial choice of avoiding using a real database and instead using a text file(s) as a database. With v2 I chose to completely revamp my mobile software suite and go with a MySQL database. This meant architecting several tables and attempting to predict what I would want to use in the future to extrapolate said data.

I chose to revamp the entire suite to use MySQL so I needed a database to keep a log of bin location changes, all order information, restock ‘to-do’ list items, and a user database. For my mobile order picking system I completely rewrote the code I had to read information from our core ERP database and place it into my own MySQL database for manipulation. This allows me to only store the information I need and in the manner I wish to store it for easy access.

Without going over the details of exactly how I’m doing what I’m doing (I wish to keep some things a secret anyway since it is my code), I’ll explain what gets displayed and how it is an improvement over the first version.

I’m now able to display individuals items and component items that make up a kit in-line and according to bin location. This makes picking items for an order extremely efficient since everything is in order of physical location. I also show additional bin locations for component items now. Component items are one of the most complex things I’ve worked with since you must first find out what items belong in a kit, extrapolate it, get information for the individual component items (e.g. quantity available, locations, etc) and then merge it into the master item array for that order. Maybe this is easily done for others, but I had a difficult time with it but in the end I prevailed! I also show what kit # each component item is a part of and of course do the math so that the correct quantity is picked (e.g. if someone orders three of the same kit with two items where one item has a quantity of one and the other item has a quantity of 4).

I’m also keeping track of whether or not we’re out of something on the shelf when it says we have it in the computer. This shouldn’t happen I know, but it does so I allow the user on the floor to make the needed adjustment and offer a quantity change report for such changes.

Something that I feel is really neat (but very simple to add) is that the remaining items to pick is always at the top of the screen now. This way the order puller is always reminded of how many items are left before the order is complete, which I automatically mark as soon as the last item is picked.

There are many little enhancements and additions to my program like auto time-stamping when the order was scanned and when the last item from the order was picked which is useful for some analytics that I’ll get to below.

The restock list also got a complete revamp and is now multi-user and has three modes when scanning an item. The first scan will add it to the list, the second scan will mark it in red and scanning again will remove it from the list since that is the step that the restocker would have restocked the shelf.

Since I’m using MySQL now, I can extrapolate all kinds of data from it to do some really cool things. To do this I needed to come up with an authentication system requiring managers to login since I don’t want just anyone to have access to such information. I’m using the same user database that I use for other parts of the suite…I just give access to the admin panel to mangers’ login. Once logged in I have the ability to access order picking records for all orders picked or just an individual picker for example. I added pagination to this since there are so many records (and for database load reasons obviously). Bin location change records can also be accessed from this system.

The thing that I’m most proud of is my latest addition however. I’ve been working on this for the last couple of days and I think it will prove to be really helpful! Managers can now see performance analytics for order pickers and salespersons. I use the Google chart API to display the data extrapolated from the MySQL database. This allows a manager to quickly gauge the performance of an employee which happens to be the number of items that that employee can process in any given hour for the last 30 working business days. Here’s what that chart looks like:

It’s pretty easy to see who may be slacking off or what adjustments are needed. Granted that different users may have slightly different roles and can only be compared to others in a similar grouping, but this allows a manager to do this and it’s the first time such thing has been possible in our environment.

Going forward I hope to add to this suite based on input from users and managers but within reason. I am the IT department for a mid-sized company. There are no other full-time employees that I can delegate tasks to and that’s ok because I love what I do, but it also means that I have limited resources to be able to handle all that needs handling. This is one reason I’m very excited about SaaS as it allows me to offload some tasks like email server upkeep so that I can spend more time on projects like this one.

I’m certainly not a master programmer and probably not a master at any one thing, but what I am is confident that I can excel at being the IT department for ~160 employees with around 120 workstations with all the infrastructure in between. I love making IT easier for folks while at the same time giving them better tools to do their jobs better and from the place they feel most comfortable. I find it truly awesome that I can jump on my Mac at home or Starbucks and do probably 90% of what I can do in my physical office. The other 10% would be infrastructure failures which are rare due to the nature of such infrastructure and the redundancy built-in. Having automatic fail-overs for nearly all servers and a large percentage of user’s workstations (e.g. thin clients) makes this entirely possible.

Thank you technology for evolving at a fast enough pace to keep me on my feet and eager for the next day!

Company mobile project – launch day!

While it hasn’t been my only project, it has been a major side project of mine for most of 2012 thus far. The mobile project for my day job should be going live today in that more than a couple employees will start using these devices for order pulling and inventory management.

I’ve included a couple of screenshots in the past, but the project has evolved and thus some applications changed slightly (added features for example) so I’ve included a gallery of most applications below. Not all screens are shown, but it gives you an idea of why my application suite does. Not in the gallery is the order pulling application which has largely remained unchanged from the screenshot in my first post, though I have resolved several bugs that came up in rare occurrences and added a few minor enhancements.

I’m not really doing anything too fancy here. The only time I write back to our main database is for bin location changes, but that is immensely helpful for those who use it. To change the first bin location in our ERP system, for example, would require that the change be made in three different windows. This would also require the inventory manager (or whomever) to write down the part number and new bin location(s). With my device the change can be made on the spot (made even quicker if the user scans the barcode for the part) and have the bin changed in all needed parts of the database instantly. Doing this just a few times saves a drastic amount of time.

I’ve also coded a custom to-do list which is used for stock management. If the inventory manager sees that an item in our primary bin location is getting low, he/she can scan the item’s barcode and have it added to the list. It will let them know where to go to get additional stock (additional bin locations to pull from) and when the item is rescanned will mark it as ‘done’.

The device itself has been ruggedized with a heavily padded industrial case. We’re working on concrete here so I want to take every precaution that I can to ensure these devices stay in good condition. We also have holsters and laniards for those who work in a risky area or use the devices on forklifts for example.

I’m really pleased with everything overall. I’ve learned a great deal through this project and I’m proud to say that I was able to pull the hardware together to work with several software languages (PHP, Javascript and Objective-C). I’m far, FAR, from a ninja, but I’m certainly proud of my work. I’m a little sad that the bulk of this project is over. Sure, I will continue to enhance the applications and possibly write applications for other uses in our environment, but what I’ve written is the most needed for what we do and thus is the bulk of what is useful for employees.

A warning for all Drobo users

I have a 2nd generation Drobo at home with approximately 1.2TB of data stored across all four drives that are installed. I’ve been using this setup for a couple of years now and it has worked out great! I have the drive connected via Firewire to my Mac Pro and while it doesn’t break any speed records for data transfer, it is sufficient for offloading storage and keeping it safe. FWIW, I also backup all of my data off-site via CrashPlan, but given that I have a 30/5 Internet connection, the speed of backing up and restoring large amounts of data is a horrible experience.

Last week I had one of my drives go bad and thus received the red light on that drive’s bay and a notice on my Mac to replace the drive. I replaced it with a known good drive of equal size, but one that had previously been used in another Drobo. Immediately after I replaced the drive the Drobo started rebuilding, or at least that’s what I thought. The “rebuild” turned to all of my drive bays flashing red along with my Mac Pro no longer being able to access any data on my Drobo.

I posted this to Twitter and Drobo was kind enough to respond and asked me to submit a support ticket even though my Drobo was well outside the warranty period. After submitting the logs from my Drobo Dashboard I was told that since the replacement drive that I inserted into the failed drive bay had previously been used in another Drobo unit that I would either have to get a new drive that hadn’t been used in a Drobo before or completely wipe my Drobo unit and start over. According to Drobo support, there is no way to wipe a Drobo “pack ID” from a drive, not even by doing a complete format on the drive. Removing the new drive from the Drobo reverted the three remaining drive bays to green so the Drobo is usable again, but the 4th bay is currently useless.

This is absurd! I’m not about to wipe my Drobo and have to restore the stuff from a backup (I don’t have enough local storage on my Mac Pro to handle this since I only have a 240GB SSD in that system). I’m also not about to buy a new drive when I have one that works perfectly fine.

I’ve always been one to advocate the use of Drobo’s products under most circumstances (they’re still horrible for things like ESXi IMO) but this event will certainly change the way I recommend their product line in the future.

Going cable free

A month ago I made the decision to begin the process of dropping our services from Time Warner Cable and replace them with modern alternatives. Our overall TWC bill for phone, television and Internet was a approximately $204 each month. Yes, this is higher than most cable bills but here is what we got for that price:

  • Unlimited national phone service with extended features like voicemail to email
  • 50/5 Internet connection (50Mbit down and 5Mbit up) with no monthly cap
  • The extended digital tv service with all channels except for paid networks (e.g. HBO, Showtime, Cinemax, and the special sports channels)
  • 2 DVR’s that networked together so you can record up to 4 shows simultaneously and watch them from either DVR

The package above is the Signature Home service which also comes with your own special customer service number to call with no call queue and in most cases same day in-home tech service (from my experience). Prior to having Signature Home I was paying approximately $130/month and that only included 1 DVR, 15/1 Internet connection and no home phone service. When you look at it this way, $204/month isn’t such a bad deal after all for what you receive in return. Well, it isn’t a bad deal compared to other offerings from TWC.

Total yearly costs end up being roughly $2500 for TWC services. We don’t watch the news, almost never watch live TV or have the TV on just to have it on and almost never use our home phone. 50Mbit down from the Interwebs is also particularly hard to achieve. TWC offers a 30/5 package which suited my needs a little better. We use power line ethernet in our home and end up getting an average of ~30Mbit between the switches I have setup. The extra 20Mbit down was getting lost except for devices connected directly to our router. 30Mbit down is plenty fast to stream full HD over the net so that was the obvious choice to downgrade.

TWC phone service ends up being approximately $40 when purchased independently from TWC. We were paying $40 for maybe an hour a month of phone talk time? Cell phone coverage stinks in our neighborhood and the AT&T Microcell is also a poor product and unreliable so we had to keep some sort of home line around. Hello Ooma! I bought the Ooma device for $200 and we’ll pay $120/year for Ooma Premium so we can have services like voicemail to email. I can even do things TWC couldn’t, like assign custom caller ID names to numbers, make my own telemarketer blacklist, use a community telemarketer blacklist and even have a text message sent to my phone if 911 is dialed from our home number. Ooma ends up being 25% of what TWC’s phone service is…and I get more features.

The hardest part is dropping cable TV. We don’t watch live TV, local news or sports, so this was much easier for us to accomplish than the regular Joe. I compiled all of our shows with their costs and what services we would get them from in a spreadsheet.

Here is a link to that spreadsheet: http://bit.ly/AcAGn5

Since I had a package deal with TWC, it is hard to isolate precise costs for each package, but the savings ends up being approximately $1800/year the best I can figure. This being all of the above changes. I also get the added benefit of owning the shows that I purchase from iTunes. I could save a few more bucks in some cases by opting for Amazon Video but I’m pretty committed to Apple as a provider of hardware, software and media as a package deal and don’t want to deviate from that too much.

A follow-up to my in-house ERP integrated web app…

I had mentioned in my previous post that I was using a third-party app from the iTunes App Store to interface between my web application and the Linea Pro 4 scanner. A couple of days ago IPCMobile gave me access to the SDK and yesterday I spent the day writing a simple iOS application using that SDK.

What I created was something much like the SwipeTrack application that was being used previously but I took out some features we didn’t need and even added a couple of my own that I thought would be useful. The application is basically a UIWebView with a UIToolbar. I have a Settings.Bundle that gives the Linea’s firmware version, serial number, etc. and a place to put the default URL that UIWebView uses when loading the app (obviously this would point to the aforementioned web app).

I added an activity monitor for web traffic so that the user knows that the server is still gathering the required info and displaying it on the screen. This is helpful for large orders where lots of SQL queries are made for example. I also streamlined things by only including what we needed and thus the application loads very fast.

The best part of this is that I no longer have to purchase the app for each device at $50/each. We’re still waiting on IPCMobile to get backorders of their industrial rubber case for the scanners so we still only have two Linea Pro 4’s…one actively used all day every day for pulling orders and the one I use for development.

I’ve definitely had a lot of fun making these apps and they have most certainly enriched my abilities and creativity. Even with having applications in the iTunes App Store and in an ad-hoc environment, I’m not sure that I could dub myself a real programmer. I still have to do research on things in all of the languages used (PHP, Javascript, Objective-C), but it’s a nice thought to know that something that was created from scratch is now being used to increase the productivity and accuracy of a medium-sized company.

In-house programming insights…

When I was 12 I began flipping through my first real programming book (BASIC doesn’t count): Teach Yourself C in 21 Days. Without a doubt I can say that I did not learn C in 21 days. I wouldn’t really pick up programming again until I was 28 and I couldn’t expect myself to remember anything that I had read regarding C when I was 12.

When I came back to programming at 28 I went for the platform that I love, iOS. I released two apps in the Apple app store in 2011. One a nightstand/weather app that I developed after a couple of years of not being able to find what I wanted from another developer (imagine that considering all of the apps in the app store these days!) and the other a tipping calculator that was really just something to keep my mind challenged.

I’ve sold several hundred copies of my nightstand app since it was introduced in mid-2011 and while that hasn’t made me rich or an acquisition target for Google, it does pay for my $99/annual Apple developer’s fee and part of my Starbucks habit.

Before I went on Christmas vacation for my day job I decided to start on a new project that took some of my newly found knowledge and apply it to something that could help the company be more efficient and ultimately help reduce errors and keep costs down.

I looked into doing this with Objective-C, but the database that we use doesn’t have a driver with any SDK available for iOS that I could find. It does support ODBC though, which made making this a web app the best solution.

The first step was giving me a connection to the database to work with of course. This ended up being a Windows 7 virtual machine (I converted our physical servers and lots of desktops over to vSphere in 2011) running IIS, PHP and the client for our database engine with the ODBC connections in place.

My place of work manufactures thousands of automotive parts and we just moved to a ODBC/SQL based ERP solution in 2011 to help increase our efficiency and enhance our processes going forward. In 2011 I deployed location-wide wifi by way of ~20 access points. That’s another feat in and of itself since you have to deal with channel interference between the AP’s and contend with other interferences around. This gives us the framework to move around between office/manufacturing/warehouse locations without so much as a hiccup in connectivity to our back-end resources.

I looked into a third-party solution with Motorola handheld computer/scanners that integrated directly with our ERP system, but because I’m so adamant about iOS and web based technologies driving the future of computing (even in the workplace), I decided that it would be a waste of money and resources to implement such a solution. The cost was astronomical and I set myself on a path to see if I could come up with a self-programmed alternative solution.

My first solution was the simpler of the two that I had on my plate. Inventory look-up. Since we have so many parts and locations, it becomes an issue in locating where a certain item is and more so checking the quantity that is on hand at any given time during the day. Traditionally we have workstations placed throughout to do these lookups which require a constant back and forth when looking up items. We could use laptops, but it adds heft and bulk that is over the top IMO.

Using a combination of PHP, HTML and Javascript, I was able to create a simple web app to do this lookup. It makes sure the part number entered or scanned exists in our system and if it does it displays the locations where that item exist and the total quantity on hand:

My next ask would bring a level of complexity that required me to really learn some more advanced PHP skills while I made the program. This is really my first real dealings with PHP to create a complete application, so my knowledge was fairly minimal when I started the project. To create my next application which would create an order picking system would test my endurance.

Several things were needed for order pullers using the application. For the above inventory lookup solution and this one I chose to go with the latest 4th generation iPod Touch. This would be coupled the Linea Pro 4 2D scanner from Infinite Peripherals. This is the same barcode scanning case that Apple uses in their stores. I also needed a way for my web app to talk to the Linea Pro 4. SwipeTrack Solutions has a program that does this so that’s what I ended up going with.

The application itself had a host of its own requirements. The order number, order date, salesperson, item # to be pulled, quantity to be pulled, quantity currently available in our warehouse(s) and where the item is located in our warehouse(s).

In addition, the puller would need to know that an item had already been pulled and have it automatically crossed off of the list so to speak. To do this part of the application I had to decide if I wanted to go with a flat file or a database. In the end I chose that a flat file was the easiest method to implement and has the easiest upkeep for what I’m using it for.

When a puller scans the barcode of the order’s picking ticket or enters it manually, the order is brought up on the device and lists all of the items and their quantity with location(s) in order of location to make their pulling as efficient as possible. The puller scans a barcode (2D Data Matrix type is what I went with) at the item’s location or on the item itself and physically pulls the item and places it into his or her cart. If the wrong item is scanned the puller is presented with an error and must manually continue the pulling process. This eliminates errors of the wrong item being pulled for the customer.

If the right item is scanned then the item number is appended to a file that has the order number as the file name. If the order doesn’t exist and the first item from the order was scanned, the order file is created and thus tells the program that the order is in the process of being pulled and places a notification at the top of the web app of that.

On each refresh of the page (happens each time an item is scanned, right or wrong) the application checks to see if an item in the order exists in the order file that was created. If it exists then that of course means that the item was pulled (because it was scanned) and I have it turn a different color and place a *P* (for pulled) beside of the item number. On each refresh the puller is taken back to the same spot on the order that he was at previously…this way he or she doesn’t have to scroll down the page to find where they left off. This is helpful on very large orders.

Here is what the end result looks like for an example order:

It’s simple on the surface, but I ran into several issues that I had to overcome. There are arrays within arrays which confused me to no end, but eventually I came up with a solution. I’m pulling from fairly complex SQL queries with joins, ordering, etc which also baffled me in the beginning. I’ve learned a lot about writing SQL queries over the last couple of weeks which I’ll no doubt reap benefits from for years to come.

We’re in the testing stages and have one puller using the app full-time now. It dazzles me to no end that something that I created, from scratch, has been worthwhile enough for the company to request a dozen or so of these things eventually after the test phase is over. At the same time, it is a scary thought to know that something that was created in spare time will end up being an essential part of doing business and will no doubt add another level of stress to my already growing levels.

Being the lone IT person for a medium sized company is daunting. I’m given freedom to do projects like this one, implement things like virtual machines and thin clients and other goodies, but in the end I have to support those technologies and it is forever becoming more challenging to keep up with.

I am always up for a good challenge however. Stuff like this makes me want to come back day after day, especially when others pronounce their appreciation for such hard work.