-
An A-Z Guide to Being an Architect
-
Building Scalable Development Environments
-
Use-Case Analysis: Getting from use cases to code
The first in a two-part series that appeared in The Rational Edge, this article presents a case study that analyses the requirements captured in use cases and transforms them into implementable representations that can be directly coded. An excellent article written by Gary Evans. Getting from use cases to code: Part 1: Use-Case Analysis Getting…
-
Working Effectively with Legacy Code
Is your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts. In the book Working Effectively with Legacy Code,…
-
Dependency Injection and the Zend Framework
A couple of months ago I wrote a Dependency Injection component for the Zend Framework. It’s a simple solution to a complex problem: removing hidden dependencies and injecting mocked objects. The component has evolved quite a bit since I first created it, and it’s now part of a bigger system, where objects are persistent, can…
-
How Web Caches Work
What’s a Web Cache? Why do people use them? A Web cache sits between one or more Web servers (also known as origin servers) and a client or many clients, and watches requests come by, saving copies of the responses, like HTML pages, images and files (collectively known as representations), for itself. Then, if there…
-
Agile Development Methodologies
Agile development methodologies have been around for a while now, and the list of them is long. It includes: Extreme Programmin (XP): Developed by Kent Beck, Ward Cunningham, and Ron Jeffries, XP is probably the best-known lightweight methodology. With its roots in the Smalltalk community, it is a relatively complex system of practices, and Highsmith…
-
20 MediaWiki Extensions You Should Be Using
MediaWiki is a great PHP-based Wiki application that is used to power many sites, including Wikipedia itself. One of MediaWiki strengths is how easy it is to extend with its plug-in architecture. The following is a list of 20 extensions that should make your life easier and save you a fair bit of time. Check…
-
Issue Tracker extension for MediaWiki
MediaWiki is definitely one of the most widely used and best known Wikis out there, it powers Wikipedia.com, but I’m sure you already knew that. I’ve been using it at work to record and document all our internal systems and projects. It’s a great tool, it allows developers and projects managers to collaborate, provide and…
-
Software Development AntiPatterns
An AntiPattern is a pattern that tells how to go from a problem to a bad solution. For example: The Blob Procedural-style design leads to one object with a lion’s share of the responsibilities, while most other objects only hold data or execute simple processes. The solution includes refactoring the design to distribute responsibilities more…
-
A step-by-step guide to Object Oriented Programming
-
Implementing the Delegation Pattern Using Reflection
Times arise where a class (One) is supposed to do everything another class (Two) does and more. The preliminary temptation would be for class One to extend class Two , and thereby inheriting all of its functionality. However, there are times when this is the wrong thing to do, either because there isn’t a clear…
-
The History of Programming Languages
For 50 years, computer programmers have been writing code. New technologies continue to emerge, develop, and mature at a rapid pace. Now there are more than 2,500 documented programming languages! O’Reilly has produced a poster called History of Programming Languages (PDF: 701K), which plots over 50 programming languages on a multi-layered, color-coded timeline.
-
Registry Pattern, good or bad?
-
Polymorphism
The subject of polymorphism is probably the most important in OOP. Using classes and inheritance makes it easy to describe a real-life situation as opposed to just a collection of functions and data. They also make it much easier to grow projects by reusing code mainly via inheritance. Also, to write robust and extensible code,…
