PHP Frameworks

For those who do not know what a framework is; it is basically a library that allows for rapid, consistent development of applications. It was a tough decision for me to start learning frameworks since we have already have developed our own pseudo framework which for the most part works very well for us and our clients.

Not all frameworks have the same benefits but some of the things that I look for are:

  1. Rapid development – It is important to me to be able to build an application in a matter of days rather than months
  2. Code community – A large community is great so you can rely on others that have likely been through some of the same pain.  Healthy communities tend to share code which can be nice
  3. Built in tools – Some frameworks come with add on tools that can build the classes and effectively make life a whole lot easier
  4. Learning curve – If it takes a long time to learn, then it is likely that it won’t last the test of time; that said it is normal for an advanced programmer to take three months to learn just one framework.
  5. Stability and performance – For me it is important to have a framework that can perform under heavy stress.  Many of our applications see a lot of traffic; its important to us to reduce server costs by writing code in an efficient manor.

Based on my criteria I narrowed my search down to Zend, Yii, CodeIgniter and CakePHP.

I ruled out CakePHP first because it is reported as being slower than the other frameworks and forces me to use a very specific convention.

I’m pretty sure Zend costs money which left me with CodeIgniter and yii.

In the end I picked yii.  It was a tough decision because ci has a larger community as it has been around longer.  Yii is non-specific, free, fast and seems to be gaining some serious ground.  The tools that it comes with are amazing.

For example, I took my existing database structure for a user table and instructed the yii tool called gii to create an MVC structure with full CRUD capability.  The final result was a working user editor that handled 85% of the functionality I wanted and I didn’t write a single line of code; it only took me a few minutes to do and I was very pleased with the result.

If you are interested in building web applications in PHP, I recommend learning yii; its a great way to build well structured, flexible, fast, compatible applications with less effort.

~JCF

Rogers ICS

I installed the Ice Cream Sandwich (ICS) update from Rogers onto my Samsung Galaxy II LTE.  Overall it went well; I never really feel comfortable with firmware updates so I made sure to make a backup with Samsung Kies before I started.  I also backup my phone to google just in case.

I had to restart the update several times until my phone was fully charged… After that it did its thing and rebooted a bunch of times connecting and disconnecting over USB.  Then the wizard finished and my phone started to boot ICS for the first time which was getting me really excited until an error popped up on the screen and said it couldn’t communicate with the processor and froze.  It remained frozen for 10 minutes so I soft reset the phone (hold power for 10 seconds).  At that point it booted to the samsung logo and just sat on the screen for 1 hour doing nothing… several reboots and nothing… My immediate thought was crap I just bricked my phone.

So, I decided to hard reset the device and try to manually execute the firmware (hold power and volume buttons until the samsung logo shows up, then let go of the power button until it buzzes a few times letting you into a secret recovery menu).

My card was empty and nothing was mounted properly.  Data was gone; no firmware update… wtf.

I decided to wipe the phone and factory reset it.  After that… it booted! Amazing… It booted to the initialization screen you get when its a brand new phone.  I had to reenter may gmail account and it asked if I wanted to restore from the cloud… I clicked the hell yeah button and the device proceeded to manually download and install every application that came from the play store (my other apps didn’t come down but I have a copy of those).  After that I restored my backup and my photos and stuff came back.  Everything was pretty much normal from there other than the annoyance of having to layout all of my screens again.

~JCF

UI Benchmarking

Hey, haven’t been posting much lately.  Gotta get on that.

I have been thinking a lot about how to measure the user experience based on different scenarios. I feel this is useful when comparing different situations.  Most of it has to do with the capabilities of the device you are on relative to where you are and what you are doing.

Windows is the predominant OS used in businesses worldwide to handle day to day operations.  I want to measure an applications ability to perform in different scenarios and on different hardware, virtual configurations etc.

THX NM for putting me on to FRAPPS.  The FRAPS utility comes from the gaming community and it allows you to benchmark, record a video, take screenshots although I find other utilities better for most of those things it is free and another way to benchmark a PC.

Keep it under FRAPS.  I have found that FRAPS is a bit buggy or maybe I don’t know how to use it properly but it would startup and show my FPS rating in a little black box.  The tool would start a little timer thingy in the corner. I would start the benchmark capture and it would change to a green color. I could see the if you wanted a visual real time tool to show you what sort of performance the machine is running at that FRAPS does the job. But when I tried to capture benchmarking results with it the tool crashed or wouldn’t capture. I did get it to capture once and it dumped out a bunch of 1k CSV files before stopping. Back to the drawing board.

I could use resource monitor and procexp/procmon to watch a process but it doesn’t really help when measuring how long it takes for data to refresh. The tools don’t really help for measuring the experience of loading an image within an citrix application/remote desktop over a long distance.

~JCF

 

No news is good news

Its been busy with me but I’m still having a blast.  New roles, new family, new experiences.       1MB is working on more new tech for the world to consume.  We have already built a  software integration suite that integrates various ecommerce channels and advertising mediums but we haven’t stopped there.  New features and releases happen daily. I am looking forward to releasing some updated versions of our project management and time keeping software.  We are also working on building new selling channels for our clients and look forward to another solid release by 1MB.  Last month we completed a new statistics module that plugs into our software and can be used to identify trends, deficiencies as well as be used for monitoring.  By looking at techniques to optimize the software we were able to come up with a fantastic tool that can be used for other purposes.

~JCF

WordPress Migration

I recently migrated this site (and about 15 others) to our hosting platform.  It was relatively painless but I don’t think I will do the WordPress site the same way next time.

I took the lazy admins approach to FTP downloading the files; taking a MySQL dump and then installing the same version of WordPress on the new server.  After it was installed I FTP uploaded the files and forcefully updated the database to whatever was on the old host.

Surprisingly this method worked quite well.  Except that a bunch of my hosts had some special characters in them (I guess I should have checked the collation a bit better).  Also, after the upload I couldn’t actually post anything to the blog.  Obviously I fixed it or you wouldn’t be reading this.  I found that I actually had to deactivate and reactivate every single plugin that I have installed on the site; not sure why but it was required but that was all I needed to do.

In the future I will use the import/export tools that are available; I guess being lazy/creative I didn’t even notice those tools were available until it was too late and the DNS had propagated.  Live and learn!

Seems fine now.  Happy blogging!

~JCF

Android Super Sync

I recently acquired a Samsung Galaxy SII LTE phone which has been nice so far. I have a few desktops, a galaxy tablet, some laptops, a blackberry and about 20 email accounts to deal with. I thought it was about time to start consolidating my information for my new phone.

First things first, a gmail account is required to use the Android Market application which I was going to need so that I could download all of the common apps that I use (ebay, twitter, wordpress etc…). So I set up my gmail account and set the device to use the brand new account.

I was playing with it and noticed that it didn’t have any contacts in it; I installed the facebook application for android and commanded the device to synchronize all of my contacts on the phone (none) with my facebook contacts which includes several hundred people. After about 30 seconds I had all of my facebook friends on my phone with pictures and some of them put their email and phone number in there so that was a good start.

Next I wanted to grab my business contacts. I installed the linked in application and synchronized all of my contacts with linked in. In another 30 seconds hundreds of business contacts appeared. Any that had similar properties automatically joined together and I started to notice that the contacts were getting nicely filled out.


The big one for me though is my blackberry device. I have thousands of contacts on there that are synchronized with an exchange server [blackberry enterprise] (not vcard as many home users have). I definitely didn’t want to manually enter them all so I did it in a way cooler way. I installed the google sync application on my BB by pointing the browser to m.google.com/sync — the application installed painlessly and it prompted me for my gmail account that I set up at the beginning. I put it in there and synchronized my BB up to the cloud. Then I went to contacts on my galaxy and instructed the phone to sync with google. About 30 seconds later I had my 1000 phone contacts on the phone which also magically merged with the existing contacts.  Subsequently the calendar synchronized as well so that I won’t miss that dentist appointment.

At this point I am excited because not only do I have all of my contacts on there I also have pictures for everybody and the option to contact them by any of the methods that I have installed.

Since then I have also installed whats app and skype and did something similar. Everything magically glued together into one dynamic contact list. Some of the contact objects are so well defined I have their job titles, email addresses, all of their phone numbers and in some cases even their home address and business address.

I had to join unmatched contacts manually which was only about 50 out of 2000 contacts so I didn’t mind doing that; it also gave me a chance to do some cleanup in there.  The sweet thing is that if I connect with somebody through any platform it will become instantly available as a contact on my smart phone.  If my phone explodes or falls in the ocean I can just replace it and sync everything with the google cloud and my contacts will be instantly restored.

I feel so connected.

~JCF

10 Tips: How To Hire A Great Programmer

You have the next great technology idea and you need a programmer but don’t have a programming background.  What should you do?  The ideal candidate will be able to produce exactly what you are looking for, on time, on budget and keep your application supported in the long run. A lot of start up companies look at hiring in house or even outsourcing over seas instead of approaching a software development company.

There are many reasons why the overseas option is not desirable.  Usually overseas developers come with a plethora of complications.  Complications such as a the language and time zone barrier are at the top of the list.  Usually these companies disappear before the project is completed or immediately afterwards.  If the costs were kept really low during the project the savings are quickly burned up when trying to support an application with no documentation and no programmer.  The worst case is when the programmers that you hire take your project and use it or resell it to others to maximize their ROI.  In my opinion you want to stay away from outsourcing projects over seas.

The next approach is to hire an in-house programmer.  There are many advantages to having a programming team in-house.  Some of the advantages are that you directly control the project as it unfurls and have an accountable employee in the office that can respond to challenges as they arise.  Disadvantages include the increased cost of having to support another FTE (or team); the cost of a full time employee is usually double the cost of hiring a software development company.  Also, it is often difficult to hire good, experienced programmers in house that can produce the results your desire at the rate that you are willing to pay.

I have seen many startup companies requesting programmers to work on their project pro bono for a percentage of the company or a hope of future profits.  In my opinion that is just ugly and as a professional programmer I would much rather get paid for my services as I am producing results.  The best programmers are quite picky when it comes to their projects and usually tend to stick to the development environment that is the most comfortable for them.  The bottom line is that the best people to do the job in an efficient manner usually cost a little bit more and you will get mixed results at the end of the project depending on how much they stand behind their code.

It is important to establish a good working relationship with your programmers so that you get all of the bases covered with the least amount of impact to your company.  One approach that has worked well for us in the past is to receive a direct percentage of the (long term) company profits to develop at a reduced rate and in return fully support the software product when it is completed. Another approach is to provide excellent documentation so that a third party developer can step in, if needed, and rapidly remedy your situation. Regardless of the approach that you choose, these tips should help you find the right candidate.

#1 – Ask for the programmers approach

When you are selecting your programmer candidate you should always ask them how they will solve your particular problem.  Find out what technology will they use and why. This will help you understand how the project will be structured, what sorts of external costs will be required and give you an understanding of how long it will take.

#2 – Develop a support plan at the beginning

Before going down the path of development it is important to understand what sort of ongoing effort will be required to support the application. Find out how far the candidate will stand behind their service and above all make sure you know how things will be fixed when they go wrong.

#3 – Review their portfolio/resume

Give yourself an understanding of what your final product will look like and how it will feel. It is important to see how much experience they are bringing to the table which ultimately will decide how much value the candidate has.

#4 – Don’t get stuck on the design

When reviewing the portfolio, you may notice that the design isn’t what you would prefer.  You have to remember that you are looking for a programmer and not necessarily a designer.  Often you can find a candidate that is proficient in both areas but my experience has been that the best programmers are horrible designers and vice versa.  What you should be evaluating is how the code works.  Look to see if it crashes or how well it scales when under a large load. If they accomplished the task at hand successfully, then it is likely that they will accomplish your task as well.

#5 – Compare their rates to others

Like any sort of service, get quotes.  Before hiring somebody, find out how much it will cost to have the project completed with support from at least 3 different sources.  It can be a time consuming task but it is well worth it and you can use these tips during the evaluation process.

#6 – Know what you want

It can be incredibly frustrating for a programmer to try and guess exactly what their client wants.  Most clients have an idea of what they would like to accomplish but haven’t really thought about all of the complexities behind the idea.  For example your project may incorporate some sort of shipping model.  I choose shipping because it is often one of the most complex components of any eCommerce model.  Many factors come into play such as flat/calculated rates, different carriers, tracking codes, order cancellation, country restrictions, package sizes, multiple items within an order etc.  The bottom line is that you should truly understand what it is you expect to happen when the end user presses that button.  Knowing what you want will allow you to truly convey your project to your programmer and keep your costs down.

#7 – Get it in writing

Before proceeding with a project; both parties need to come to an agreement on how they will deal with payments and a clear understanding of what is included and what is not included.  Consider outlining your project even if you are looking at hiring a full time employee so that you and your candidate have a good understanding of what the project milestones are.

#8 – Ask for a demo

Most programmers will be able to demonstrate software that they have already written. This will give you an idea of what to expect when making your final decision.

#9 – Determine other areas of expertise

Find out if your programmer has other skills and services that could prove useful.  Perhaps your project requires hosting or computer support.  The programmer, or team, can provide value in areas that you didn’t anticipate.  Hey, it doesn’t hurt to ask.

#10 – Have a budget before you start

Before you set out into the world looking for quotes and programmers; make sure you know how your project will be funded.  You don’t have to disclose your budget to your candidate but it is important to know so that you can set your expectations accordingly.

I know it goes without saying, but it would be a bad move to not knock on the door of the 1MB Corporation [www.1mb.ca].  It is, after all, the best way to ensure your project gets done on time and without hidden surprises.

~JCF

jQuery Mission Statement

“jQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. jQuery is designed to change the way that you write JavaScript.”

…and it sure does. Thanks jQuery!

~JCF