Archive for March 2008
Magento 1.0 Released! Open Source eCommerce Evolved

Varien, one of the most important eCommerce development and consulting firms in the world, has taken eCommerce to a completely different level with the latest release of Magento 1.0. An amazing, flexible, modular and scalable open-source eCommerce solution, powered by one of the most popular systems on the web today, the Zend Framework.
Congratulations to Varien and the development team! This application will definitively change the way we make business on-line.
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, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his renowned Object Mentor seminars: techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control.
The topics covered include
- Understanding the mechanics of software change: adding features, fixing bugs, improving design, optimizing performance
- Getting legacy code into a test harness
- Writing tests that protect you against introducing new problems
- Techniques that can be used with any language or platform—with examples in Java, C++, C, and C#
- Accurately identifying where code changes need to be made
- Coping with legacy systems that aren’t object-oriented
- Handling applications that don’t seem to have any structure
The book also includes a catalogue of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.
More about Michael Feathers.
Articles he wrote:
Emergent optimization in test-driven design (PDF)
The humble dialog box (PDF)
The self-shunt unit testing pattern (PDF)
Good software takes ten years (get used to it).
Failure to understand the ten-year rule leads to crucial business mistakes.
Joel Spolsky wrote:
“So, it takes a long time to write a good program, but when it’s done, it’s done. Oh sure, you can crank out a new version every year or two, trying to get the upgrade revenues, but eventually people will ask: Why fix what ain’t broken?”
Rapid Software Development and Collaboration

Get free workspaces with unlimited team size and integrated tools like wiki, discussion, alerts, chat, Subversion and Trac.
Team
The Team page gives you an easy way to invite new team members and manage permissions for existing users. Spaces can be public, or private and visible only to team members. Team permissions are integrated with Trac, Subversion, and other tools.
Trac / SVN
Manage your releases with Trac, the popular open source ticketing system. Link it to your code in Subversion, the industry standard SCM system, or Mercurial, the distributed alternative. Use Trac to browse your changesets.
Tickets
The Tickets tool integrates tickets for features, bugs, and tasks into an Assembla space. It is a more integrated alternative to the external Trac ticket list.
Scrum
Collects a daily report in the stand-up meeting format: “What I did”, “What I will do”, and “Roadblocks / What I need”.
Visit Assembla.com
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 have different states and are part of an interconnected network of objects.
Pádraic Brady, one of the Zend Framework developers, wrote a nice article about Zend_Di:
“Dependency Injection is both the ultimate bane and blessing in PHP programming. If you’re an experienced object oriented programmer, chances are you already know what the term means, and why it’s an all-consuming obsession. If you don’t, then here’s an overview.”
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 is another request for the same URL, it can use the response that it has, instead of asking the origin server for it again.
There are two main reasons that Web caches are used:
- To reduce latency: Because the request is satisfied from the cache (which is closer to the client) instead of the origin server, it takes less time for it to get the representation and display it. This makes the Web seem more responsive.
- To reduce network traffic: Because representations are reused, it reduces the amount of bandwidth used by a client. This saves money if the client is paying for traffic, and keeps their bandwidth requirements lower and more manageable.
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 warned potential XP users to think carefully before picking and choosing among individual components.
The New Methodology: Developed by Martin Fowler, this approach emphasizes adaptation over prediction, people over practices, with an additional emphasis on what works in the real world.
The Crystal family of methodologies (sometimes called “the Crystals): Developed by Alistair Cockburn, who believes that different kinds of projects require different kinds of methodologies. He looks into this variation along two axes: the number of people in the project, and the consequences of errors. Each methodology fits into a different part of the grid, so a 40-person project that can lose discretionary money has a different methodology from a six-person, life-critical project.
SCRUM: Developed by Ken Schwaber and Jeff Sutherland, this methodology focuses on the idea that defined and repeatable processes only work for defined and repeatable problems, with defined and repeatable people in defined and repeatable environments. The process divides a project into iterations (called “sprints”) of 30 days. Before developers begin a sprint, they define the functionality required for it, and then leave the team to deliver it. The point is to stabilize the requirements during the sprint.
The Dynamic System Development Method (DSDM): Developed in the UK. in the mid-1990s, DSDM has the best-supported training and documentation of any agile process in Europe, Highsmith said. Its principles include active user involvement, frequent delivery, team decision-making, integrated testing throughout the project life cycle, and reversible changes in development.
Lean Development: Highsmith said that Bob Charette’s approach was the most strategic-oriented lightweight process, and the least known. It is derived from the principles of Lean Production, Taiichi Ohno’s revolutionary restructuring of the Japanese automobile manufacturing process, Highsmith said. Lean Development practices subvert traditional methodologies’ view of change as risk, to be controlled with restrictive management. This method welcomes change as an opportunity to practice “risk entrepreneurship.”
Adaptive Software Development (ASD): Developed by Highsmith himself, at the heart of ASD are three non-linear, overlapping phases: speculation, collaboration, and learning. Highsmith views planning as a paradox in an adaptive environment, since outcomes are naturally unpredictable. In traditional planning, deviations from plans are mistakes that should be corrected. In an adaptive environment, deviations guide developers towards the correct solution.
So, which one do you use?
6 Ways to Increase Your Confidence As You Code
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 them out and tell me if I’ve missed anything:
20. SimpleFeed
http://www.mediawiki.org/wiki/Extension:SimpleFeed
This extension outputs the contents of an RSS feed. It is very customisable and no output format is forced on the user. As a result, no editing of the PHP source is required as everything is done in the wiki page. This extension uses the SimplePie PHP feed-parsing library.
http://www.mediawiki.org/wiki/Extension:FlashMP3
FlashMP3 embeds a simple Flash-player for playback of mp3-files. It is based on the great Audio Player WordPress plugin by 1pixelout. It can handle multiple local and/or remote files in one player and multiple players on each site. The appearance of the player is highly customizable.
18. VideoFlash
http://www.mediawiki.org/wiki/Extension:VideoFlash
VideoFlash is an extension that displays videos from Youtube, GoogleVideo, Dailymotion, Sevenload, Revver and similar services based on FLV video format.
17. Tasks
http://www.mediawiki.org/wiki/Extension:Tasks_Extension
This extension provides the ability to create tasks on any page of your MediaWiki. Tasks may have severity, priority, status, and owner properties set. Also included is a highly configurable Special page for aggregateing tasks on your site by various criteria. All tasks are stored in MySQL, so the Special page is extremely fast.
http://www.mediawiki.org/wiki/Extension:ContactPage
The ContactPage extension implements a contact form for visitors. It creates a special page Special:Contact, which is similar to Special:Emailuser, but it has a fixed recipient, and can be used anonymously.
15. Preloader
http://www.mediawiki.org/wiki/Extension:Preloader
The Preloader extension allows the creation of boilerplate text which will be inserted into the edit form when creating new pages. Different boilerplate text can be specified for different namespaces.
14. Data
http://www.mediawiki.org/wiki/Extension:Data
Enables getting and setting of data in the articles. Data is described by item/key/value triplets, where ‘item’ is typically the name of the article, ‘key’ the name of the data, and ‘value’ the actual data.
13. Nuke
http://www.mediawiki.org/wiki/Extension:Nuke
Gives sysops the ability to mass delete pages.
12. RenameUser
http://www.mediawiki.org/wiki/Extension:Renameuser
Special page allows user accounts to be renamed.
11. CheckUser
http://www.mediawiki.org/wiki/Extension:CheckUser
CheckUser is an extension that allows a user to check which IPs are used by a given username and which usernames are used by a given IP, without having to run queries directly against the database by hand. The extension is running live on all Wikimedia wikis.
10. WikiChat
http://www.mediawiki.org/wiki/Extension:Chat
Adds a Chat tab to every wiki Article that switches to an embedded chatroom with the same name as the article title. It can be configured to have only one chatroom for all articles, rather than one chatroom per article (the default).
Develop, debug and deploy PHP applications within the Visual Studio IDE
VS.Php is a Php integrated development environment based on Visual Studio. With VS.Php you can design, develop, debug and deploy Php applications within the Visual Studio IDE. VS.Php key features are around providing rich Php and Smarty editing capabilities as well as its ability to debug Php scripts locally as well as remotely.
VS.Php offers a set of productivity features designed to improve productivity. The new 2.4 release offers many improvements around debugging and deployment of remote projects.
Features
PHP Debugger
VS.Php supports debugging Php scripts locally and remotely including scripts hosted in non-Windows servers. It uses DBG for its debugging capabilities. VS.Php also lets you debug client side JavaScript in the same debug session. This feature lets you debug AJAX-type rich applications.
Intellisense
VS.Php supports intellisense of Php4 and Php5 scripts. It has comprehensive support including the Php built-in modules and PEAR classes. VS.Php 2.0 add support for array intellisense.
Deployment
VS.Php allows you to easily deploy your project to a remote server using standard protocols such as Ftp, Sftp, Ftp/S and Smb.
Class browser
The class browser lets you view all the functions, constants and classes defined in your project. VS.Php will parse all the files in your.
Code outlining
The editor provides a rich automatic outlining support that lets you organize your code more efficiently. VS.Php understands PEAR-style regions as well as .Net-style user regions.
Goto Definition
Anytime you want to quickly find where a method, function, variable or constant is defined, you can right click on it and VS.Php will find where it is define and move your cursor there even if it is on a separate file.
Source code control
VS.Php provides support for source code control by leveraging the Visual Studio framework. That means that any source code control plug-in for Visual Studio will work with VS.Php.
