Announcing the Freelancer Education Program

In addition to my full time work here at Botsko.net I’ve been teaching various web development courses with the local community college.

The courses are designed to teach the concepts as well as how to use them in a real world project, but for those looking for a career in freelancing, there’s a harsh transition from learning inside the safety of class to doing it for real. If you don’t yet have a portfolio, getting real work is difficult unless you donate your time.

I’ve considered offering some form of internship program for several years but the typical candidate can’t afford to spend time learning rather than earning.

I believe that the new Freelancer Education Program will be a perfect middle ground.

Throughout the year I’ll select a few interested students who are able to work part time on small projects that fit their area of study. These projects will come from real clients and will be perfect for giving the students an actual project to continue their education.

By using the established portfolio and skill sets of Botsko.net to attract the clients and guide the students on the projects, I’ll be allowing them to safely gain real world experience while ensuring that customers of Botsko.net receive a quality service and are pleased with the end result.

Customers may receive discounted rates for taking part in this program and the students will receive compensation for some of their time.

If you’re a student interested in this program, I’d like to see you in any of my next classes with Portland Community College so that I can get to know you better, and we can both determine what your goals are. You’ll need to have your own laptop and be able to spend some time at our Beaverton office for each project.

If you’re customer with a small project or portions of a larger project that you think might be a good fit for a student, please contact me. I’m initially seeking small work involving web design, HTML, CSS, JavaScript, and Wordpress. In the future we’ll also be seeking PHP work.

In the next few weeks I’ll likely announce the first student and I’ll be sure to keep writing about how the program is working out.

Published by Michael Botsko on 3/1/2010 | Categories: Freelancer Education Program

Incompatibility between find and saveAll in CakePHP

In a recent project I wanted to create a separate form for each record from a table using the form helper in CakePHP. After following the instructions found on the net I noticed that there was one big glaring problem.
Continue reading this post…

Published by Michael Botsko on 2/25/2010 | Categories: CakePHP

Installing Git on Mac OS X Snow Leapord

Git is an amazing source control system, and is even better when used with GitHub.com. Installing git on Mac is pretty simple.
Continue reading this post…

Published by Michael Botsko on 2/18/2010 | Categories: Git, Mac

Magic Mouse

I was planning on getting a magic mouse for my office machine sometime in 2010, but my parents got one for me for the holidays. It finally arrived and I’ve had some time to play with it. Here are some briefs thoughts and comments.
Continue reading this post…

Published by Michael Botsko on 1/18/2010 | Categories: Mac

Fastspring.com Ecommerce PHP Class

I’ve recently done some work with the Fastspring.com ecommerce website. It’s essentially similar to the flow of a paypal purchase – companies create pages with products and Fastspring acts as the checkout process doing the user information/payment processing work for you.
Continue reading this post…

Published by Michael Botsko on 1/18/2010 | Categories: PHP

Download Old CakePHP Versions

I’m not really a fan of CakePHP, but I work with it often and understand it well. I recently had a project where a previous developer modified random cakephp library files directly, thus making it difficult for me to upgrade the framework.
Continue reading this post…

Published by Michael Botsko on 1/8/2010 | Categories: CakePHP, PHP

Announcing Peregrine – a PHP Security Class

Today I release a new php caging class for improved security – Peregrine.

I’ve always been impressed by the idea of a “variable cage” in programming. It’s an additional method of protecting your incoming variables and making sure that you only accept what you’re expecting.

If you’re not familiar with a cage, think of it as a class that copies any (usually incoming) data into an object while destroying the original “unclean” data. At this point you must access this data through the “cage”, which provides a whole bunch of ways to filter out what you don’t want.

So an incoming variable (through a GET/POST request for example) may only need to be a integer. You may use a method that returns or checks for integers, and either removes non-integer characters or returns false.

This provides an excellent wall against any malicious attackers, and really helps you define data validation more accurately within your projects.

There are some others out there, and some are very good. However, none worked as well or were as cleanly coded as I would have liked, so I’ve been working on Peregrine.

It’s hosted at github so you’re welcome to fork it and contribute back any fixes or feature requests you would like.

To learn how to use it, please read the documentation provided with the code and look through the class itself.

http://github.com/botskonet/Peregrine

Published by Michael Botsko on 12/30/2009 | Categories: PHP, Software

MySquibbles.com Offline

Almost four years ago I launched MySquibbles.com – a community for parents and teachers to find and share links their children enjoy. It was a great idea and would have been extremely useful, but it failed for several reasons.

Primarily, it wasn’t enough to draw visitors. Parents tend to frequent sites that have parenting information from articles and advice, to links to great deals. Without offering that content as well, Squibbles wasn’t a place you would go because kids are not online that often until they’re older.

The other problem was that the average parent going online with their kids is a target audience that’s very difficult to market to. They typically only learn about things through other parents, school materials, or parenting magazines. Without any time to market or promote the website, it was left online only to serve as a good portfolio piece.

I’ve recently moved servers and during the transition, I made the decision to take the website offline. I’ve kept everything in the event that I want to restore it at some point, but for now it’s no longer needed.

Published by Michael Botsko on 12/30/2009 | Categories: Random Thoughts

Transitioning MySQL Field to Foreign Key

When working with MySQL databases it’s often necessary to convert a regular field into one that refers to a second table using a foreign key. The process for this requires several steps:

  1. Insert distinct column values into new secondary table.
  2. Replace (update) existing table fields with proper foreign key for the related record in the secondary table.

This process can be time consuming if attempted manually. Luckily, MySQL 4.1+ allows for subqueries as well as the INSERT… SELECT… syntax.
Continue reading this post…

Published by Michael Botsko on 12/30/2009 | Categories: MySQL

Version Numbers Using git tag, git describe

I’ve spent the past year doing all of my development using the Git version control system. It’s far better than than subversion and has made my job as project manager/developer/commit manager much easier.

However, since it does not use revision numbers like subversion it’s more difficult to include as build numbers or version numbers. I wanted some automated way to identify the build in some way other than a non-incremental SHA1-hash. The only solution I’ve been able to find (without using any external software) is as follows.

The workflow to make this process work as expected would involve the following:

  • Prepare master for a new release. Create a new branch for the release and tag it with 1.0.
  • Make a single commit on master (necessary to separate the history) and re-tag with something for the next revision, like 1.1-alpha.
  • Tags on branch continue with 1.0-1, 1.0-2, etc. Tags on master continue with 1.1-alpha-1, 1.1-alpha-2, etc.

What’s problematic with this is the requirement to both tag and branch each time you want a release. You also need to add in a extra commit before re-tagging master so there’s an unwanted extra step.
Continue reading this post…

Published by Michael Botsko on 12/30/2009 | Categories: Git