local development

[ Local ]

If we are close enough to get in some face to face time, great. Sometimes it's of benefit to do that. Especially at the beginning of a project ...

More »
remote development

{ Remote }

If geography impedes a face to face meeting, no worries. We live in a time when meetings via electronics are a snap ...

More »
web technology

( Technology )

I use modern, industry-standard technologies. Most of my development is done on a LAMP stack ...

More »
modern methodology

« Methodology »

Inexperienced programmers spread Spaghetti code laden with inefficiencies ...

More »
object-oriented programming

[ Object-Oriented Coding ]

Creating software applications typically involves designing how to represent the application data and determining how to implement operations performed on that data ...

View details »

local development

Local Around the corner, across town ...

If we are close enough to get in some face to face time, great.

Sometimes it's of benefit to do that. Especially at the beginning of a project. For example, Project kick-off meetings.

But being next door is not critical.

Once the real work begins, most contact is done electronically anyway: Phone and conference calls, E-mail, Skype, Google Hangouts, desktop sharing, videoconferencing, technologies such as join.me, etc. These are all ways we can stay in constant communication.

If you wish, I will post your application on our local secure Linux server for you to access and monitor progress.


remote development

Remote over the mountains, across the plains, on some lonely, sandy beach ...

If geography impedes a face to face meeting, no worries. We live in a time when meetings via electronics are a snap.

I work equally as well with local or remote projects. I have been doing work for remote clients all over the country for years. Working with remote clients is not too different from working locally.

And, as mentioned, once the real work begins, most contact is done electronically anyway: Phone and conference calls, E-mail, Skype, Google Hangouts, desktop sharing, videoconferencing, technologies such as join.me, etc.

I post your application on our local secure Linux box where you can log in and monitor progress.

Whether we are separated by a street, a rocky mountain range, or an entire continent, I keep your project posted where you can monitor it's progress. From conception to completion you can log in any time for a peek.


state of the art technology

Technology Techie. Nerdy. Crest of the wave, baby!

Most of my projects are developed using Open Source software. Typically I develop to target a LAMP stack. Linux Operating System, Apache Web Server, MySQL database, PHP programming language. However, Apache, MySQL, and PHP are equally at home on a Windows box.

If the project is of significant size, I build the code within a framework such as Laravel. Nearly always I work with Ajax, JQuery, and Boostrap. And of course the client-side code uses HTML5 and CSS3.

I draw from an assortment of javascript libraries for special features. Backbone.js or Angular.js for OOP structure. Highcharts.js, Raphael.js, D3.js, and Snap.svg for charting and svg graphics.


industry standard methodology

Methodology Functional Polymorphism ... huh?

Inexperienced programmers spread Spaghetti code laden with inefficiencies.

There are no shortcuts. It takes time in the saddle. Following proven, Industry-Standard development methodologies results in a responsive, maintainable product.

Not long ago, back in the heyday of Drupal, Wordpress, and phpbb, the style of PHP was mostly procedural, with a typical app consisting of dozens, or even hundreds of PHP files, each of which contained a snaking nest of HTML, PHP, and SQL, used conditional includes for flow control, and was littered with global state.

Some of the wiser folks in the php community knew this was not the right way to do things. This highly-coupled code was hard to test, hard to change, and hard to reuse. The more elegant solutions to these problems took a few years to build, and were spurred by the addition of namespacing to PHP’s OOP model, the race to build MVC frameworks to compete with Ruby on Rails, and the emergence of git and github as the de-facto standards for open source.

Now there’s a new breed of PHP applications and libraries. They represent the current State of the Art in PHP development.

Namespacing and Object-Oriented Programming

Object-oriented programming in PHP has been around since PHP 5.0, but it was not until the addition of namespaces that the PHP community really started taking it seriously. Most importantly, the addition of namespaces made it possible to share code and components without massive rewrites or name collisions.

With the wider adoption of OOP code in PHP, a lot of the bad practices like interspersing HTML, PHP, and SQL have faded, and mature, well-factored patterns and practices have rapidly proliferated. We’ve also ended up with a lot of libraries that are modular and well-tested, thanks in no small part to their object-oriented designs.

Composer

Composer is, hands down, the most influential change in PHP in the past 5 years. It solves the dependency management problem for PHP, eliminating the weird quirks of PEAR, the obvious problems with copy-paste, and providing frictionless integration with git.

Composer is an elegant, well-design solution that supersedes even the de-facto tooling in ruby, python, and java. In short, it’s a best-in-breed dependency management tool. This provided the PHP community the much-needed ability to share, reuse, and improve code, and has contributed to a surge in innovation in PHP projects, components, and libraries.

Combined with git and github, it’s now trivial to incorporate an open source library or 10 into your projects, and also trivial to keep those libraries up to date with new features and bug fixes. This is a huge boon to library authors as well as users, since the more people using your project, the more patches you get, and the positive feedback loop continues.

PHPUnit

A lesson any professional software engineer learns very quickly is that software maintenance costs far more than the initial development. Good test coverage makes your product easy to change and reliably evolve over time. PHPUnit is the best testing tool for PHP, and aside from proving excellent unit test coverage, has helped PHP developers integrate with Selenium for browser-based functional testing.

Combined with Travis CI or Jenkins, you can have continuous integration and testing running on your project with very little effort.

Symfony Components

The first version of the Symfony framework was build using a monolithic MVC architecture and backed by the Doctrine ORM (or optionally Propel). The code quality was very high, but documentation was rather poor and the framework itself was rather complicated.

In Symfony 2, the framework was split into components, each indepdent with a small, purposed scope. For example, the console component makes writing command line tools trivial. The finder component can be used to enumerate and filter files on the filesystem using the familiar foreach idiom. The translation component provides flexible internationalization functionality so your applications can reach users around the world. There are a dozen or so other components that you can use ad-hoc, or together as the Symfony 2 framework.

The components are of the highest quality. They solve common problems in PHP using the best patterns and practices, which means that you can take advantage of heavily tested and well designed code with virtually no effort. The components eliminate boilerplate and make PHP productive and fun to write. Being able to take the components as individual, isolated pieces also makes them much easier to learn.

The Symfony components are being incorporated into numerous other projects, including Drupal, and this is representative of a great shift in the PHP community towards sharing and reusing code to build better products.

PHP Standards Group

The PHP Framework Interop Group is a community collaboration to define common standards for PHP projects. Standards facilitate reusing components between projects, as well as making developer experience more easily transfer between them.

PSR-0 describes how to make your code work with a standard autoloader, such as the one provided by Composer. If you’re not already familiar, autoloading is PHP’s compliment to OOP packaging, and eliminates having to write a bunch of includes and other boiler-plate code to get your application working with various libraries.

PSR-1 and PSR-2 describe coding style, so you can stop arguing about tabs vs. spaces and get back to work. Since dredging through code and verifying that it conforms to the spec is tedious, Fabien Potencier made php-cs-fixer to do it for you. The coding styles outlined in PSR-1 and 2 help you avoid silly bugs, make code more readable, and eliminate compatibilities issues between different PHP configurations.

PSR-3 describes a shared logging interface, incorporating the eight Syslog levels of The Syslog Protocol (RFC 5424): debug, info, notice, warning, error, critical, alert and emergency.

PSR-4 describes a specification for autoloading classes from file paths. It is fully interoperable, and can be used in addition to any other autoloading specification, including PSR-0. This PSR also describes where to place files that will be autoloaded according to the specification.


object-oriented programming

Object-Oriented Coding Why should I care?

Creating software applications typically involves designing how to represent the application data and determining how to implement operations performed on that data. Procedural programs pass data to functions, which perform the necessary operations on the data. Object-oriented software encapsulates data and operations in objects that interact with each other via the object's interface.

Spaghetti code can be caused by several factors, including inexperienced programmers blindly obeying their supervisors' mandates on how to write code and a complex program which has been continuously modified by several people over a long life cycle. Structured programming greatly decreases the incidence of spaghetti code.

How might this concern you ...

Object Oriented Programming provides a clear modular structure for programs which makes it good for defining abstract datatypes where implementation details are hidden and the unit has a clearly defined interface.

OOP makes it easy to maintain and modify existing code as new objects can be created with small differences to existing ones.

OOP provides a good framework for code libraries where supplied software components can be easily adapted and modified by the programmer. This is particularly useful for developing graphical user interfaces.


state of the art technologies

State of the Art Technologies Why you should care.

The term state of the art refers to the highest level of general development, as of a device, technique, or scientific field achieved at a particular time. It also refers to the level of development reached at any particular time as a result of the common methodologies employed.

The State of the Art in PHP

Not long ago, back in the heyday of Drupal, Wordpress, and phpbb, the style of PHP was mostly procedural, with a typical app consisting of dozens, or even hundreds of PHP files, each of which contained a snaking nest of HTML, PHP, and SQL, used conditional includes for flow control, and was littered with global state.

Some of the wiser folks in the php community knew this was not the right way to do things. This highly-coupled code was hard to test, hard to change, and hard to reuse. The more elegant solutions to these problems took a few years to build, and were spurred by the addition of namespacing to PHP’s OOP model, the race to build MVC frameworks to compete with Ruby on Rails, and the emergence of git and github as the de-facto standards for open source.

Now there’s a new breed of PHP applications and libraries. They represent the current State of the Art in PHP development.

Namespacing and Object-Oriented Programming

Object-oriented programming in PHP has been around since PHP 5.0, but it was not until the addition of namespaces that the PHP community really started taking it seriously. Most importantly, the addition of namespaces made it possible to share code and components without massive rewrites or name collisions.

With the wider adoption of OOP code in PHP, a lot of the bad practices like interspersing HTML, PHP, and SQL have faded, and mature, well-factored patterns and practices have rapidly proliferated. We’ve also ended up with a lot of libraries that are modular and well-tested, thanks in no small part to their object-oriented designs.

Composer

Composer is, hands down, the most influential change in PHP in the past 5 years. It solves the dependency management problem for PHP, eliminating the weird quirks of PEAR, the obvious problems with copy-paste, and providing frictionless integration with git.

Composer is an elegant, well-design solution that supersedes even the de-facto tooling in ruby, python, and java. In short, it’s a best-in-breed dependency management tool. This provided the PHP community the much-needed ability to share, reuse, and improve code, and has contributed to a surge in innovation in PHP projects, components, and libraries.

Combined with git and github, it’s now trivial to incorporate an open source library or 10 into your projects, and also trivial to keep those libraries up to date with new features and bug fixes. This is a huge boon to library authors as well as users, since the more people using your project, the more patches you get, and the positive feedback loop continues.

PHPUnit

A lesson any professional software engineer learns very quickly is that software maintenance costs far more than the initial development. Good test coverage makes your product easy to change and reliably evolve over time. PHPUnit is the best testing tool for PHP, and aside from proving excellent unit test coverage, has helped PHP developers integrate with Selenium for browser-based functional testing.

Combined with Travis CI or Jenkins, you can have continuous integration and testing running on your project with very little effort.

Symfony Components

The first version of the Symfony framework was build using a monolithic MVC architecture and backed by the Doctrine ORM (or optionally Propel). The code quality was very high, but documentation was rather poor and the framework itself was rather complicated.

In Symfony 2, the framework was split into components, each indepdent with a small, purposed scope. For example, the console component makes writing command line tools trivial. The finder component can be used to enumerate and filter files on the filesystem using the familiar foreach idiom. The translation component provides flexible internationalization functionality so your applications can reach users around the world. There are a dozen or so other components that you can use ad-hoc, or together as the Symfony 2 framework.

The components are of the highest quality. They solve common problems in PHP using the best patterns and practices, which means that you can take advantage of heavily tested and well designed code with virtually no effort. The components eliminate boilerplate and make PHP productive and fun to write. Being able to take the components as individual, isolated pieces also makes them much easier to learn.

The Symfony components are being incorporated into numerous other projects, including Drupal, and this is representative of a great shift in the PHP community towards sharing and reusing code to build better products.

PHP Standards Group

The PHP Framework Interop Group is a community collaboration to define common standards for PHP projects. Standards facilitate reusing components between projects, as well as making developer experience more easily transfer between them.

PSR-0 describes how to make your code work with a standard autoloader, such as the one provided by Composer. If you’re not already familiar, autoloading is PHP’s compliment to OOP packaging, and eliminates having to write a bunch of includes and other boiler-plate code to get your application working with various libraries.

PSR-1 and PSR-2 describe coding style, so you can stop arguing about tabs vs. spaces and get back to work. Since dredging through code and verifying that it conforms to the spec is tedious, Fabien Potencier made php-cs-fixer to do it for you. The coding styles outlined in PSR-1 and 2 help you avoid silly bugs, make code more readable, and eliminate compatibilities issues between different PHP configurations.

PSR-3 describes a shared logging interface, incorporating the eight Syslog levels of The Syslog Protocol (RFC 5424): debug, info, notice, warning, error, critical, alert and emergency.

PSR-4 describes a specification for autoloading classes from file paths. It is fully interoperable, and can be used in addition to any other autoloading specification, including PSR-0. This PSR also describes where to place files that will be autoloaded according to the specification.


industry-standard methodologies

Industry-Standard Methodologies Why this matters. A Lot

Development methodologies function much like recipe books, laying down guidelines for others to follow or adapt. But, as every cook knows, you can follow all the rules and still make a dog's dinner.

Celebrity chefs may be able to knock up a gourmet meal on a whim and a bottle of claret, but for the rest of us, successful cookery means sticking more or less faithfully to the recipe. The same applies in the world of IT, where methodologies have emerged that aim to ensure that software development projects deliver palatable and predictable results, served up on time and within budget.

Development techniques have changed radically over the past 15 years, moving from lengthy 3GL-based projects based around a waterfall lifecycle, to object-based projects using an iterative approach and lasting weeks or months rather than years. Tried and tested development methodologies have gone through a series of metamorphoses to keep pace with these changes, and new ones have appeared to support the changing requirements of 21st century software building.

But software specialists agree that in the end the important issue is not so much which methodology you use, as having some kind of framework for structuring your project. The early evangelism over a methodology-based approach has given way to a more realistic view, which acknowledges that sometimes you need to adapt your recipe to the ingredients you have to hand and to the preferences of the people who are going to consume the results.

In theory at least, a methodology contributes to successful project completion in three ways. It provides a framework for evaluating the problem the project is intended to address. It provides a roadmap for the project, ensuring that no important stages are left out and that everything is proceeding to schedule. Thirdly, it provides a way of representing aspects of the developing system to system engineers, software developers, user representatives, management and other stakeholders in the project, via standard diagrams that generally form part of the methodology. Using industry standard notations also makes it easier to get newly recruited IT staff up and running quickly, or enable staff to move between different projects without a steep learning curve.