CORGRIMM

Tech LLC

Mobile App Development

Reliability == Success

When working in the software development field, it doesn't take long to find out how small your world is. Due to the smallness of this world, it is important to be aware of what your reputation is. If you know me at all, you know that I am not one to toot my own horn. Recently, however, when talking to recruiters and colleagues I have heard some words get thrown around like "Pro", "Hustler", "Senior", "A-team" and even "Rockstar." I have also been a part of a few conversations where the people involved have said that it is really hard to find good developers because there are so many that just aren't reliable. They will start a project and just fall off the face of the map. Whether it is due to finding a better project, personal life problems or a nervous breakdown, who knows. This got me to asking myself "Is reliability all it takes to be successful? Is the bar really set that low?"

Now, first let me define what my idea of being successful is. It doesn't really have anything to do with how much money you make. It has more to deal with your reputation. Do people enjoy working with you? Would they give you a recommendation? Are you the person that someone thinks of when they hear about an open position that you would be a fit for? Would people want to help you out if you were to fall on hard times? If you answer yes to most or all of these questions, you should consider yourself successful. In a lot of cases, people that answer yes to all of these questions tend to find themselves with more opportunities. That, in turn, can lead to higher pay.

Once I started thinking about the question that I asked myself above, I reflected on my past jobs. I focused on the ones where I considered myself successful. The first one that came to mind was my summer job during high school and college. I worked for the Parks Department in my hometown. It was a popular summer job for people in that age group and it was actually difficult to get unless you knew somebody. My sister worked there so she vouched for me. I worked there for a few years and eventually found myself driving the "Big Mower" that was used for the nice baseball and soccer fields. In my last year, my boss told me "You are my best employee, bar none." He said that I was the first person to drive the big mower for an entire summer and not seriously break it. I had gone two summers without breaking it. It wasn't that I did an exceptional job at mowing. I frequently got stuck in the mud and I scalped and rutted the hell out of some of those fields. I just showed up on time, got my route done, and didn't break anything (serious).

After I graduated college, I landed a job writing exams for a company that produces training for software developers. It was my job to watch the videos and come up with questions for the review tests that make sure the student was paying attention. It started as a contract position to tide me over until I found a full-time developer position. I watched the videos and wrote the questions. A lot of the time they were taken word for word from the slides shown in the videos. Yet, I still received many kudos emails for getting them done and on time. The company liked me so much that they ended up hiring me full time to do QA for their courseware exercises. I eventually ended up doing in-house tech support, customer support, phone system administration and network administration. See what I mean about leading to other opportunities?

Since I have become an Android Developer, I have found myself with a fair amount of opportunities.  Almost all of them have come from recommendations by other people that I have worked with. I don't consider myself a Guru or an Evangelist. I write code. It's not the most elegant or inspiring code but it does what it is supposed to do. I show up to meetings, report my progress and report problems early. I have found success because I show up on time, I am responsive and I get my work done.

After reflecting on my past experience, I have come to the conclusion that in order to be successful, you just need to be reliable. Be there on time, be available and get your work done. You don't necessarily need to do it well, just get it done. If you know that you can't or won't do something, don't agree to do it. Employers want to be able to depend on you, know what you are doing and predict what you are going to do. Having to keep tabs on you, replace you or fix your work is a waste of everyone's time.  A lot of times, that wasted time seems to hold more value than the final product. So, if you want to be successful, show up, communicate what you are doing and get it done. If you want to be VERY successful do your work well.

 

What Computer Should I Buy?

Since I will be moving into the consulting world shortly, I have been tasked again with buying a new machine. This is always a fun time because I get to see what is new and important with all the new computers on the market. It also reminds me of all the times someone has approached me and asked what computer they should buy. Personally I don't think that there is any one machine or brand that stands out. It depends on what you want in your computer. If you are dead set on buying an Apple, a lot of choices have already been made for you. If you are open and think "Hey, I am going to go to XYZ store and try out a few to see what they are like", you will most likely find a tag that has things like CPU, RAM, HDD, SSD, and GPU specified on it. At this point you think you are over your head so you ask for help from one of the guys wearing a polo, who often times doesn't know much more than you. This is my take on buying a new computer.

A computer operates like you do when taking a test

One of the easiest ways to visualize how a computer works is by relating it to yourself. In general, think of your computer as your brain. The CPU (Central Processing Unit) is the part of your brain that, more or less, does the thinking. The RAM (Random Access Memory) is your memory. The hard drive is your backpack full of books. For the majority of people looking to buy a computer, these three things are the most important. When it comes to the innards anyway...

The CPU (Central Processing Unit)

I stated that the CPU is the equivalent to the part of your brain that does the thinking. Basically when you want your computer to do something, the task is completed by the CPU. When it comes to the number associated with the CPU, it is usually not that important unless you are doing things that take a lot of computing power. Usually this falls under media encoding. What has become more important lately is the number of cores in the GPU. Each core allows the GPU to do a task. When you have a single core, all your tasks get lined up and are completed one at a time. When you have multiple cores, each core can take a task and do the work at the same time. So naturally, the more cores the better.

The RAM (Random Access Memory)

Think of the RAM as being your memory. When you are studying for a test, you are basically putting all the information that you are looking at into your brains RAM. The amount that you can fit in that memory is important because the more that you remember, the faster you can recall information and you will not need to look it up (which takes time). When you are looking at purchasing a computer the more available RAM, the better.

The Disk Space (HDD vs SSD)

The hard drive is the same as the backpack full of books that you carry. This is important for a couple of reasons. The hard drive as most people see it is the place to put your files. It is also used when there is no more room in your memory. Think about when you are taking an open-book test. You read the question and if you know the answer (it is in memory), you answer it pretty quickly. If you don't know the answer, you go to your text book and proceed to look up the information. This is how a computer works too. This brings up an important point about speed. Obviously, looking it up in the book is going to take A LOT longer than if you know the answer. That is why it is important to have as much memory as possible.

We are currently in a pretty big transition from HDD (Hard disk drives) to SSD (Solid State Drives). What you need to know is that SSD is WAY faster than HDD. HDD is a hard metal disk that holds the information and is read pretty similarly to how a record player reads a record. SSD is pretty much the same as a giant memory card. In order to wrap your head around the speed difference think about this. When you are looking up the answer to a question on the test, an SSD would be like Googling the question; while an HDD would be like trying to find the answer in a library full of books. It is that much faster. I would recommend getting an SSD over HDD if you can afford the extra cost.

Conclusion

So when someone asks me what kind of computer they should buy, I suggest that brand is not super important. The important things are get as many CPU cores as you can, As much memory as you can, and an SSD if you can swing the extra cost. Then you should have a pretty speedy machine that will be useful for a couple years... hopefully.

Here are some other tips that I would suggest if you are trying to save a couple bucks and are not afraid of voiding your warranty and using a screwdriver:

1. You can save money by getting a machine with less RAM and upgrading it at a later date. There are a lot of videos online that can show you how to do it.

2. You can buy a smaller SSD for your internal hard drive and buy an external HDD for file storage.

3. If you are set on getting an Apple, the refurbished store is the way to go. You get an almost brand new machine with a one year warranty and you can save hundreds of dollars.

 

My Intro to QONQR

When I was working at Magenic in 2010, a co-worker showed me a web/location-based game called QONQR. I thought it was a pretty cool concept and the plans that they had on their site made it sound even better. It was described as a cross between Foursquare and the board game RISK. That is a very accurate description. I played for a few weeks and got to a pretty high level until I started to lose interest. I wasn't very big on mobile games that required a web browser. I was also getting busy with the birth of my son and learning in the ins and outs of Android development.

I kind of lost track of QONQR when I left Magenic for an Android developer position at space150. I worked there for about six months and then something made me think of QONQR again. I went to their site and saw that there was no longer a web client. Instead there was a Windows Phone and iOS client. I was let down by the fact that there was no Android version. Since I did not have a Windows Phone or iOS device, I couldn't see what the new game was all about.  Then an idea struck me. I went to their site and hit the contact button. I quickly wrote up an email stating some information about myself and how I was a fan of the web version of the game. I offered up my services as an Android developer to help get the Android version out to the public. Since I was still new to the mobile development world, I thought any experience that I could get would be beneficial. I sent the email with high hopes and low expectations. Five days later I received an email from the CEO, Scott Davis, saying that he would like to set up a time to meet.

I met Scott over a cup of coffee and we talked about QONQR and where it is going. I was surprised at how down to Earth and accessible he was for a CEO. He asked me what I am looking to do and he decided that I should talk with their CTO and Android Developer, Donn Felker. After a phone interview with Donn, I was brought on to help with the Android version.  I had a few conference calls with Donn to go over the current codebase for the Android app and quickly realized that this was on a whole new level compared to the apps that I had previously written. It was a little intimidating but I felt that I could wrap my head around it.

I spent some time wading through the code for the Android version and even wrote some code for it, when Scott called me and said that he would like concentrate efforts on the iOS version of the app and get it up to speed with the Windows Phone app. I was still pretty green with iOS, but the current version was pretty extensive and I felt that I could learn a lot just from investigating the existing code. This was the start of the bulk of my iOS experience...

 

Padiddle!

It always bugged me when I would see a car that had a light out and there was no way to successfully get a message to them. I have often wondered how long it has taken to figure out that I have a brake light out, once I found out. So I wanted to make a point based game that would also serve as a way to let other driver's know when stuff is broken on their car.

I had also just learned about the service Parse.com that would make creating and managing a back end for you app very easy. I thought it would be a good time to try this out since there were a lot of things that I would need it for like cloud based storage and push notifications. Parse also became useful for user management since it allowed you to create native users as well as link to your Facebook account.

I implemented a scoring system that gives you points if you submit a report and you gain extra points if the user that the report is referring to confirms it. This also provided a venue for submitting compliments, as well as, complaints. The score you had determined the car avatar that was associated with your account

This game/app was met with mixed results. Many people thought that it would be dangerous because it entices players to use it while driving. I spent a long time trying to figure out a way to prevent the user from using the app while driving. I added many warnings throughout the app stating that it is a bad idea to use it while driving. I tried to use the accelerometer to determine acceleration and deceleration of being in a car but I was not successful. I ended up using the GPS to determine your current speed and if you car at more than 10 mph, it pops a warning and closes the app. Thing think the obtrusiveness of this would have been the downfall of the app.

I haven't done any advertising of this app so it really hasn't had the visibility to go anywhere.

 

PiraText

Piratext was an idea that I had to keep text messages secure and to learn how to work with encryption. There were many encryption based texting apps already in the Play Store but they were all cumbersome and ugly. There were too many clicks needed to send a text. I wanted something that was as close to regular texting as possible. I had visions of kids in highschool being able to text without worrying about teacher or parents reading their messages.

As you can tell this is when I started my gray-scale and red styling.

The functionality is pretty simple, you log in to the app with a password and you are presented with your current conversations. You can also start new conversations with anyone in your phonebook. You would need to agree on an encryption key with the person you are texting with. After that, it is just like regular text messaging. The encryption process is all invisible. You don't have to push a button to encrypt your message before sending, like most of the other apps.

This app was a fun exercise but never really went anywhere.

Guide To Confession

I started Guide to Confession around the time that the popular Confession app by http://www.littleiapps.com came out for iOS and was getting a lot of press. I saw that there was no Android version of the app, so I thought I would fill that niche. My wife was also going through the process of converting to Catholicism, so it seemed relevant in my life at the time. Before I started on my own app, I had contacted them to see if they were planning on releasing an Android version. I got no response.

This was more or less another database driven app. It was my first attempt at making an app visually appealing. I learned a lot about custom buttons and state drawables.

A few days after I released this app, I got notice from Google that there had been a complaint filed against my app and they were determining if it should be taken down. I also received an email from LittleiApps saying that I stole their app and that the screens and material were identical. They stated that they had gotten specific permission from the Archdiocese where they are and that it was immoral that I did not do the same. They said they were investigating my app and would possibly pursue legal action. I was new at this whole thing so I immediately took my app down and sent them an email stating that I hadn't even downloaded and used their app because I didn't have an iPhone. Therefore, I did not even know what was in their app. A couple of days later, I received another email from them stating that they determined that all the information given in my app was open source and that I had done nothing wrong. I never heard anything from Google.

This is still my most profitable app.

 

Trophy Tracker

Trophy Tracker was an idea that I had to keep location and weather information for any fish or game that you may encounter in the field. The premise was when you catch a fish or spot/take a game animal, you could whip out your phone, launch the app push a couple buttons and then come back later to fill out the less time sensitive data.

The way it worked was you would launch the app, it would locate you, you then press the button for which animal you would like to catalog and it would pre-load fields for weather and location data. You could then add more details about the animal or just save it to the database and come back later to add additional info. Building this app was humbling. Here I learned how to drain a full battery in less than 5 minutes. Not only is it important to learn how to use the GPS, but remember to turn it off in the right places.

This was also my first encounter with JSON. I learned all about the standard Android parser. Now I definitely prefer JSON over XML when it comes to data returned from a service call.

This app was useful if you hunted or fished in an area that has consistent cell signal. If you are out in the boonies, it will be difficult for your phone to get the proper weather information from the internet.

Garage Life

 Garage Life was the first app put out by Corgrimm Tech. I thought it would be a good idea to start with. It is a basic no network, database driven app. You can add your vehicles and keep track of the maintenance logs. Garage Life was a good way to learn the ins and outs of how an app is supposed to work with a database.

Another fun feature that I added to this app is the ability to send fuel reports to the popular mileage tracking site, Fuelly.com. At the time that I developed the app (and I believe currently) there was no public API for this site. I also was not a very big fan of using mobile web for something that should be a simple and fast thing. One thing Fuelly has is the ability to send updates via SMS message. I created a form that would allow you to enter your fuel fill information and press Save. In the setings, you could set it so that your phone would automatically send an SMS to the Fuelly servers or you could have a separate button for sending. There is a little bit of setup on your Fuelly account in order to recognize SMS messages from your phone.

I had fun building this app and still use it today.