Web Hosted Bug and Issue Tracking

I’ve never been satisfied with issue tracking software. It essentially boils down to the fact that developers seem to sacrifice a clean design and usable product for features or vice versa – the tools our clients would find usable were never the same tools that the developers and designers could find usable.

This will never be a problem again, thanks to Snowy Evening. Snowy-Evening.com has been in development for almost two years and despite an amazing list of features (all listed on the home page) it has an incredibly clean and very easy to understand design. Our clients have been using it for a year and there are several well known web companies already using it for their projects.

I highly recommend you try a free account at Snowy Evening.

Installing Sphinx Search Server

I’ve always used MySQL fulltext indexes with a match query for keyword searches but I’ve never been happy with the results and lack of configuration choices. The limited nature of word interpretation and the boolean searches were useless when visitors didn’t know how to use search operators. Fulltext indexes require the MyISAM table structure – yet we generally prefer InnoDB because of performance and foreign key constraints.

For a recent project I decided to finally (long overdue, I know) make the the transition to an external search and indexing application called Sphinx.

(more…)

Installing MongoDB on CentOS 5

I’ve recently been exploring alternatives to SQL-based databases, primarily MongoDB.

MongoDB essentially stores records as JSON-encoded values and you interact with those records through the API rather than running any SQL. The following instructions are for getting mongodb installed on CentOS 5, along with the extension necessary for PHP support.

(more…)

PHP5 Class for Hotpads.com XML Feeds

Fresh out of the oven is a PHP 5 class for building real estate listing XML feeds for Hotpads.com. If your application needs to syndicate listing data through the Hotpads service, this class allows you to build the complete output without creating any XML yourself.

The output of this class has been validated and verified by Hotpads so you’re ready to go. Check it out on Github.

Installing Memcached for PHP on CentOS 5

Memcached is a high performance cache system designed to improve the speed of web applications. A common example would be storing the results of database queries that can benefit from having a cache system in place.

Recently we had a web application that provided a long list of items formatted as an HTML ul element in response to an AJAX-style request. Our results and its formatting were the same for all users and they were also going to be called up frequently. We spent time ensuring the code and database structure were as optimized as possible before looking into a cache, but when you have a high ratio of accesses versus changes to the data, using a cache is very smart way to solve the problem.

(more…)

Cleaner Embedded PHP If/Foreach Syntax

In the last decade I’ve seen the wide variety of ways in which PHP has been used to control the output of HTML. Whether you’re using a template system like Smarty or you’re simply using PHP itself as a template language there are many different ways of combining the two.

(more…)

PHP5 Class for Authorize.net AIM API

I recently had the need to integrate a project with the Authorize.net API and I spent some time searching for an existing PHP class/object that would handle it. While I found several, they seemed to be somewhat out of date, not properly maintained, and most importantly – ugly.

I set out write a very clean, well organized class that was specifically designed for PHP5. I’ve published the class on github and would appreciate any patches you wish to submit back.

http://github.com/botskonet/authorize.net

The class is very basic and will handle the transaction beautifully. It’s working great in a current project. While there are always features I would like to add as the projects grow, this is entirely ready for use and testing now.

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.
(more…)

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.
(more…)

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