30 Jul 2010

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.10.7 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.10.7, our seventh maintenance release in the 1.10 series. This release includes around 60 bug fixes. For those uses of Zend_Service_Twitter , please ensure you upgrade to 1.10.6 or 1.10.7 ASAP. These releases introduce a change in the Zend_Service_TWitter API that enforces the use of OAuth by default when using methods that require authentication. The change was introduced to help prepare Zend Framework users for the Twitter OAuthcalypse in mid-August. (If you cannot upgrade, there are other ways to integrate Zend_Oauth with Zend_Service_Twitter .)

30 Jul 2010 5:52pm GMT

25 Jul 2010

feedsymfony Project Blog

A week of symfony #186 (19->25 July 2010)

Symfony2 routing management was completely revamped this week with new loaders, methods, and configuration. These new loaders were also added to the Dependency Injection component. In addition, Doctrine bundle fixed several bugs and the internationalization component was added.

Development mailing list

Development highlights

Symfony 2.X branch:

...and many other changes

Development digest: 115 changesets, 12 bugs reported, 1 bug fixed, 1 enhancement suggested, 2 documentation defects reported, and 4 documentation edits.

Documentation

New developers for hire

Plugins

New symfony powered websites

They talked about us


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

25 Jul 2010 8:50pm GMT

23 Jul 2010

feedDevZone - Items tagged as: Zend Framework

Twice the Amount of Bugs and Twice the Amount of Winners!

Zend Framework has recently wrapped up it's July 2010 Bug Hunt with some fantastic results. Collectively, we closed 50 issues in 3 days. That's nearly twice what we have seen in recent months- a trend we hope continues into the coming months!

23 Jul 2010 6:33pm GMT

22 Jul 2010

feedsymfony Project Blog

Symfony in the health industry

Enovation was engaged by one of his long term clients in the Health education sector to aid and enable them in designing a solution for the management of curricular activities. The college had an immediate requirement to replace an existing expensive, commercial online database, with a bespoke system which could better manage their curriculum and student rotations within training hospitals. The project was quite large, and the clock was ticking; it was time to learn a new framework, and fast!

The heart of the project was to create an easy-to-use interface to allow the client to manage their database. We needed to provide all of the standard CRUD operations for each table, and add some new actions, such as batch editing and CSV import & export. The application would be secure, and various degrees of access and interactivity would be defined by role. Other, custom designed modules were also required.

The project presented several challenges - initially two large databases had to be merged and normalised to create a new schema. Also, the client's requirements were in constant flux, so the schema would have to be easy to edit as requirements were defined and refined. Thanks to YAML, changes to the schema were quick and easy.

The Admin Generator played an indispensable role: new modules could be quickly created on demand, then easily configured, secured and extended. We extended the Admin Generator itself and added our custom actions to make life even easier. And all we had to do to implement any changes made to the schema was rebuild our models; refactoring was a dream!

Symfony was ideal for our requirements in this project. It allowed us to get the project off the ground very quickly. It allowed us to deal with many changes and new requirements elegantly. Extending functionality, integrating custom code or creating custom solutions using the core API was easy. Most importantly, answers to questions were easily found in the excellent, extensive documentation and API reference. On every level we found symfony to be powerful, flexible and well-thought out; we can't wait to use it again!

This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

22 Jul 2010 8:00am GMT

19 Jul 2010

feedCI News

CodeIgniter Con 2010

There are remarkable things happening within the CodeIgniter community. One of these is the community run conference, CICON!

CodeIgniter Con 2010 is the first all-CodeIgniter conference and is being run in the UK. The conference will be a two-day event on the 14th and 15th of August, which will give you a great chance to meet fellow developers, pick up some new tricks and share your experience with others. The first day will be a series of talks from well-known speakers who have been using CodeIgniter for years in different ways. The second day will be a workshop / master-class day which will be of as much interest to new users as the more experienced users.

In order to get people as involved as possible, they are offering a "Buy a Day 1 ticket and get a Day 2 ticket free" special.

If you've ever wanted to rub elbows with a who's who of the CodeIgniter community, don't miss this chance.

http://cicon2010.com/

19 Jul 2010 4:10pm GMT

feedcakebaker

Bugfix release for the OpenID component & an example application

Last week I received a mail from a user of the OpenID component in which he described that it wasn't possible to login with OpenIDs from claimID and Blogger. After some debugging I found the reason for this problem: a bug in the isOpenIDResponse() method. The method only recognized responses from providers using OpenID 2.0, [...]

19 Jul 2010 2:23pm GMT

feedDevZone - Items tagged as: Zend Framework

Edge Side Includes without Varnish

Development on websites when the product will run on a Varnish'ed' production environment can be a pain in the ass. The xml tag that can be used to define Edge Side Includes can't be parsed by a standard browser. While developing you often look at a half rendered website implementation. This is something you really don't want!

19 Jul 2010 1:36pm GMT

18 Jul 2010

feedsymfony Project Blog

A week of symfony #185 (12->18 July 2010)

Dependency Injection, one of the key components of Symfony2, was heavily refactored during this week. Meanwhile, four new blogs joined to the hundreds of sites that blog regularly about symfony.

Development mailing list

Development highlights

Symfony 2.X branch:

...and many other changes

Development digest: 78 changesets, 15 bugs reported, 25 bugs fixed, 2 enhancements suggested, 1 enhancement closed, 2 documentation defects reported, 1 documentation defect fixed, and 15 documentation edits.

Documentation

New Job Postings

New developers for hire

New symfony bloggers

Plugins

New symfony powered websites

They talked about us


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

18 Jul 2010 8:55pm GMT

16 Jul 2010

feedDevZone - Items tagged as: Zend Framework

Zend_Log timestamp filter

For one of my recent project, which is using Zend_Log component of the Zend Framework, I had a demand in which I needed to be able to filter log events based on the time they occurred. As out of the box, Zend_Log component does not have such filter, I decided to create one that will fulfill my demands.

16 Jul 2010 2:00pm GMT

15 Jul 2010

feedDevZone - Items tagged as: Zend Framework

Varnish Edge Side Includes

Varnish's Edge Side Includes are a powerful tool that give developers a lot of flexibility. Bas de Nooijer has written an interesting blog post on how to control them from within your Zend Framework application.

15 Jul 2010 2:00pm GMT

14 Jul 2010

feedcakebaker

Grouping “constants” with JavaScript

A while ago I wrote about how you can group related constants in PHP5 by using a constants class: class MyConstants { const AA = 'value'; const BB = 'another value'; } echo MyConstants::AA; // output: value Now, while experimenting with JavaScript (or more precisely with Node.js) I got some constants in my code I [...]

14 Jul 2010 2:10pm GMT

13 Jul 2010

feedsymfony Project Blog

Resolutionfinder.org - Building a frontend within 15 man days

The resolutionfinder.org database aims to facilitate access to UN agreements with the purpose of improving the process of implementation. Within just 15 man days a team of 3 developers put together an easy to navigate frontend that encompassed the entire breadth of data that was collected by a volunteer team of graduate students and young professionals from all over Europe over the course of two years. The resulting application was one of the highlights at the "UN-connecting the World" conference held in Geneva in late May 2010, where the application was launched as a useable concept and technology show case that will form the basis for future developments.

The rapid development of the application was only possible due to the powerful out of the box features of the popular symfony PHP framework with tight integration to Lucene and Solr via the sfSolrPlugin.

Customer Overview

The idea behind resolutionfinder.org was to create an instrument that facilitates access to UN agreements with the purpose of improving the process of implementation. Unlike other databases available at the moment, resolutionfinder.org not only compiles documents, but it also extracts clauses relevant for implementation and provides the evolution of documents and clauses. Right now, the database contains a substantial amount of information in four thematic areas: Clean Drinking Water, Malaria, Small Arms and Light Weapons and Women and Education.

The development of resolutionfinder.org has been supported in the past two years by the World Federation of United Nations Associations (WFUNA) and especially by the United Nations Association of Germany (DGVN). The project is currently in negotiations for a partnership with the International Security Network (ISN).

Key Search features of symfony

Challenges

Since resolutionfinder.org is an entirely volunteer effort that currently does not have an IT budget and is mostly comprised of experts in the domain of UN research and not application development, the available development resources were slim. It became clear that even with development time and hosting sponsored by the Liip AG of Switzerland, there would effectively be only 15 man days that could be dedicated to the development of the frontend. Especially as in parallel there was still work going on with migrating the excel sheets containing the last 2 years of research into the relational database.

The goal was to provide full text search capabilities with facet based filtering, displaying of documents and their containing clauses including their historical development. Users should also be able to register in order to bookmark and comment on clauses and documents. Furthermore as many aspects of the complex database schema should be administerable from the admin tool to ensure that issues in the data that was imported from the old excel sheets could be fixed by the researchers themselves without requiring interventions by the development team.

Solutions

The team already had an existing database schema and a symfony based administration tool which was to handle the excel sheet import. Due to the use of the Doctrine ORM and sfSolrPlugin loading the data into Solr was fully automated through just a small configuration file, which mapped properties and methods in the data model to fields in Solr. As a result after importing an excel sheet it was automatically available in Solr for searching without any additional code. The same configuration file also generated the main Solr configuration files. The Doctrine model classes also made it possible to hook in important denormalization logic in order to ensure that the complex relations between documents and clauses could be read out of the database with minimal overhead.

Finally sfSolrPlugin bundled a fully working Solr installation using Jetty as the servlet container including administrative scripts for Solr. Within just one day a test data set was imported into Solr and the first tests on text searches were implemented giving confidence to the entire team that the target was indeed possible. This meant that there was also zero time wasted having to install and configure Solr on each of the developers machines. Within just a few days an entire facet based filtering system was integrated that enabled users to click to reduce the result set along several dimensions without having to manually trigger a page reload. Via the native highlighting capabilities the user gets visual indication of why the given document is relevant. Additionally the results are color coded to give the users a better idea of the relative legal value of the document.

In parallel the admin tool was build up by using the admin generator. With just a few adjustments to the configuration files and the use of several sfFormExtra form widgets and the sfAdminDashPlugin UI theme, the admin tool provided editing capabilities for the bulk of the imported data.

User management and registration, including email verification an password recovery, were essentially provided out of the box by the sfDoctrineGuardPlugin and sfDoctrineApplyPlugin. As a result only a few lines needed to be added to the configuration and some optimization to the provided templates as done. Using the vjCommentPlugin also quickly added commenting to the site. Due to the integrated deployment tools it was easy to quickly deploy new versions of the code to enable the team of researchers to review the state of the development and provide feedback on the UI. All the while Doctrine migrations, which in most cases can be generated automatically by simply comparing the existing models classes with an updated schema definition file, take the pain out of managing data migration.

"The entire team was surprised how much was possible in such a short timeframe, even leaving time for additional polish where we expected to have to make due with an application that would just be a raw tech demo which would have been dependent on the imagination of users rather than showing a concrete version that is already useable for end users." Lukas Smith, resolutionfinder.org

Future developments

Over the next couple of months, the main focus is to improve the quality of the database and in the long run to extend it up to the point when it includes all thematic areas on the UN agenda. In this regard, research is ongoing for IT solutions in order to make the database universal in a more efficient way. Especially data mining tools to automate the parsing of PDF and HTML based UN documents into the database. Further work is also planned to enable different types of searches that focus more on chronological aspects or certain UN organisations or member states. Finally the admin tools will be improved to ease administrative workflows to enable not only content editing, but to also make it feasible to enter new documents and clauses inside the admin tool, rather than employing the excel sheet importer. This will require using the advanced form embedding capabilities provided by the symfony form system to load additional related forms via AJAX.

Software

This case study was provided by a user of the symfony framework and published with the permission of all parties involved. Are you interested in having your case study published on the symfony blog? Feel free to contact our Community Manager Stefan Koopmanschap (stefan.koopmanschap - at - symfony-project - dot - com).


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

13 Jul 2010 8:00am GMT

12 Jul 2010

feedCI News

CodeIgniter 1.7.2 Security Patch

A fix has been implemented for a security flaw in CodeIgniter 1.7.2. You may obtain the fix either by downloading a fresh copy of CodeIgniter, or downloading this standalone patch. All applications using the File Upload class should install the patch to ensure that their application is not subject to a vulnerability.

While fixing this bug, we took the opportunity to make an improvement to the Upload class's ability to allow a file name override. Previously, you needed to do a little dance in your controller to remove the extension from the file name if you were starting from user input; neither could you override the file extension. Now when using the "file_name" config override, you will supply the full file name, including the extension, truly overriding the file name provided by the client user agent.

After applying the patch, you will need to adjust your code accordingly if you are using the 'file_name' override in the Upload class. While we are not in the habit of making code changes within a version that has the potential to break compatibility, this change was necessary as part of the security fix.

If you are using CodeIgniter from the Mercurial repository at BitBucket, please make sure you pull the latest files. Version 1.7.2 has been branched and retagged to include this fix.

We'd like to thank CodeIgniter user alexaholic for bringing this to our attention. Security is always a top priority for our products, and we make ourselves available to be directly contacted for any security concerns.

12 Jul 2010 10:23pm GMT

feedDevZone - Items tagged as: Zend Framework

Announcing July's ZF Bug Hunting Days & Previous Winners

Yep, it's the third week of the month- you know what that means: Zend Framework Monthly Bughut! This Thursday, Friday and Saturday of July (the 15th, 16th and 17th 2010), we'll be hosting our monthly bug hunt. For those of you unfamiliar with the event, each month, we organize the community to help reduce the number of open issues reported against the framework.

12 Jul 2010 9:15pm GMT

11 Jul 2010

feedsymfony Project Blog

A week of symfony #184 (5->11 July 2010)

Symfony2 suffered this week a huge internal refactoring: two of the main namespaces were renamed (Symfony\Framework to Symfony\Bundle and Symfony\Foundation to Symfony\Framework) and a new HttpFoundation component was introduced. Meanwhile, Symfony2 documentation continued growing and totalizes 30 brief documents and guides.

Development mailing list

Development highlights

Symfony 2.X branch:

...and many other changes

Development digest: 87 changesets, 28 bugs reported, 8 bugs fixed, 3 enhancements suggested, 3 enhancements closed, 4 documentation defects reported, and 11 documentation edits.

Documentation

New Job Postings

New developers for hire

New symfony bloggers

Plugins

New symfony powered websites

They talked about us


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

11 Jul 2010 7:30pm GMT

09 Jul 2010

feedDevZone - Items tagged as: Zend Framework

ACRONYM or MixedCasing in Zend Framework 2? You decide!

One complaint we've heard often of ZF users is confusion over how acronyms are represented in class names. As an example, many suggest that "Zend_PDF" is more semantically correct and easier to remember than "Zend_Pdf". On the other side of the coin, many developers feel that our MixedCasing or Titlecasing of acronyms is a simple, easily learned rule that makes typing easier.

09 Jul 2010 8:20pm GMT

06 Jul 2010

feedsymfony Project Blog

Symfony2 Documentation

As you might have noticed, the Symfony2 documentation grows every single day. Since the Symfony2 Live Conference, I regularly publish new documents for Symfony2, like the best practices to follow for Symfony2 bundles.

I think it's now time for the community to provide feedback on the Symfony2 documentation on several topics:

Early feedback is the best way to influence the way Symfony2 will look like. So, take a day or two to read the documentation, test the framework on some simple examples, and give feedback.


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

06 Jul 2010 7:17am GMT

05 Jul 2010

feedsymfony Project Blog

A week of symfony #183 (28 June -> 4 July 2010)

After the great success of the first Symfony2 online conference, this week the development activity has been focused on its code refactorization. Dependency Injection has been completely refactored, and unit tests, the routing resources and some Foundation files have been reorganized.

Development mailing list

Development highlights

Symfony 1.X branch:

Symfony 2.X branch:

...and many other changes

Development digest: 87 changesets, 20 bugs reported, 5 bugs fixed, 3 enhancements suggested, 1 enhancement closed, 4 documentation defects reported, and 1 documentation edit.

Documentation

Plugins

New symfony powered websites

They talked about us


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

05 Jul 2010 8:10am GMT

29 Jun 2010

feedsymfony Project Blog

Security Release: symfony 1.3.6 and 1.4.6

New releases for symfony 1.3 and 1.4 have been packaged sooner than expected to address a security vulnerability reported yesterday. It is strongly recommended that all applications running symfony 1.3 and 1.4 upgrade to this latest release immediately.

The Security Fix

One of the enhancements added to symfony 1.3 and 1.4 was the ability to cache rendered templates even when the current URL includes GET parameters (i.e. /feed?page=2). These parameters are used to create a unique cache key, which is then used to generate the directory structure where the cache files are stored.

These incoming parameters were not being properly cleaned, resulting the potential for directory traversal. For example, the response for /feed?page=.. would be stored higher in the cache's directory structure than intended. The extent of the vulnerability depends on how each deployment's file permissions are configured and only applies to applications with the cache setting enabled in settings.yml.

To see the changeset checkout r30031.

How to Upgrade

If you've checked out a copy of the tag from Subversion you can switch to the latest version:

// symfony 1.3
$ svn switch http://svn.symfony-project.com/tags/RELEASE_1_3_6

// symfony 1.4
$ svn switch http://svn.symfony-project.com/tags/RELEASE_1_4_6

If you are using the PEAR package you can update using the pear command:

// symfony 1.3
$ pear upgrade symfony/symfony-1.3.6

// symfony 1.4
$ pear upgrade symfony/symfony-1.4.6

How to Report Security Issues

As we've stated in the past, please report security-related issues to security [at] symfony-project [dot] com rather than posting them directly to Trac. This will give the core team the opportunity to review and address the issue before word gets out.


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

29 Jun 2010 5:50pm GMT

27 Jun 2010

feedsymfony Project Blog

A week of symfony #182 (21->27 June 2010)

The Symfony2 Online Conference gathered this week hundreds of symfony developers. The introduction of a brand new form framework and its validation component was the first big announcement of the conference. In addition, Symfony2 unveiled its killer feature, a built-in HTTP accelerator that greatly improves the performance of Symfony2 applications. Lastly, the 30,000th changeset of symfony 1.x branch repository was committed this week.

Development mailing list

Development highlights

Symfony 1.X branch:

Symfony 2.X branch:

...and many other changes

Development digest: 85 changesets, 21 bugs reported, 6 bugs fixed, 6 enhancements suggested, 1 enhancement closed, 1 documentation defect reported, and 10 documentation edits.

Documentation

New Job Postings

New symfony bloggers

Plugins

New symfony powered websites

They talked about us


Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

27 Jun 2010 7:40pm GMT

24 Jun 2010

feedsymfony Project Blog

Symfony2 Online Conference

Yesterday and the day before, Sensio Labs organized the first Symfony2 online conference. It was a great success with more than 350 attendees (from over 35 different countries), and a dozen hubs around the world. Thankfully, the platform worked fine.

For those who did not attend the conference, the slides are available now:

News of the Symfony2 World
View more presentations from Fabien Potencier.
Unit and Functional Testing with Symfony2
View more presentations from Fabien Potencier.
Symfony2 and Doctrine2 Integration
View more presentations from Jonathan Wage.
Symfony2 meets propel 1.5
View more presentations from Francois Zaninotto.
The new form framework
View more presentations from bschussek.
Caching on the Edge with Symfony2
View more presentations from Fabien Potencier.

Be trained by symfony experts - Aug 10 Online - Aug 25 Paris - Sep 07 Online - Sep 22 Paris - Oct 05 Online

24 Jun 2010 1:07pm GMT

22 Jun 2010

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.10.6 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.10.6, our sixth maintenance release in the 1.10 series. This release includes more than 30 bug fixes. You may download it from the Zend Framework site .

22 Jun 2010 6:22pm GMT

21 Jun 2010

feedDevZone - Items tagged as: Zend Framework

Zend Config tree solution

The best part of my favorite PHP framework, Zend framework is Zend_Config. With Zend Config you can run you web application with more power full configuration that any one can change your application setting for use. Read more information about Zend Config at Zend framework manual for Zend Config. But in most web application you may have many configuration file with special format such as INI , XML or PHP . Also some of configuration is for one part of your application and may you put in special folders.

21 Jun 2010 4:40pm GMT

17 Jun 2010

feedDevZone - Items tagged as: Zend Framework

Zend Framework Tutorial Series: Part 2 – Debugging your application

Continuing with the tutorial series, we will see how to debug the application we created in the #1 series of the tutorials. In case you missed it, in our first tutorial, we have seen how to structure and code a brand new ZF application to use modules (you can also view that article here ) Debugging include easy to use methods of printing data on the screen, including ZFDebug Toolbar in order to manage all errors and queries, using the logger to log messages to Firebug, using a simple debug function that will place debug messages in your ZFDebug Toolbar, in a special Debug panel, using a redirect debug function in order to see what is happening during your requests, using redirect in a Controller plugin.

17 Jun 2010 8:57pm GMT

07 Jun 2010

feedDevZone - Items tagged as: Zend Framework

Zend Framework Module Based Application

In this first article of the series, we will discuss about the best way (in my opinion) to structure your Zend Application in order to have maximum flexibility but also a good defined structure of the classes/files. These will be a series of tutorials which are meant to show you or guide you through developing a complex application with Zend Framework 1.10. The series consists of the following parts: a) Setting up a module based application b) Setting up helper plugins, methods & debugging with ZFDebug c) Setting up a login page and signup page with captcha d) Setting up OpenID to login/create account e) Setting up an API to create/login an account f) Improving performance implementing Zend Cache

07 Jun 2010 9:10pm GMT

04 Jun 2010

feedDevZone - Items tagged as: Zend Framework

Chris Hartjes' Blog: Testing Controllers Hiding Behind Zend_Auth

On his blog today Chris Hartjes has a new post about testing your Zend Framework application's functionality that lives behind a Zend_Auth authentication.

04 Jun 2010 7:01pm GMT

26 May 2010

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.10.5 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.10.5, our fifth maintenance release in the 1.10 series. This release includes around 60 bug fixes, many due to the bug hunt days held last week . You may download it from the Zend Framework site .

26 May 2010 8:02pm GMT

25 May 2010

feedDevZone - Items tagged as: Zend Framework

Web Builder Zone: Zend_Test for Acceptance TDD

On the Web Builder Zone (of DZone ) Giorgio Sironi has posted an article looking at the Zend_Test component of the Zend Framework and how to use it for acceptance test-driven development .

25 May 2010 10:20pm GMT

PHPBuilder.com: Managing Zend Framework Layouts

On PHPBuilder.com there's a new tutorial on layouts in Zend Framework applications. The tools the framework gives you makes things much simpler when it comes to changing layouts and updating the general structure of your site.

25 May 2010 6:14pm GMT

19 May 2010

feedcakebaker

OpenID component v2010-05-19 released

As mentioned in the title, I released a new version of the OpenID component today. It's a maintenance release: the only change is an update of the bundled PHP OpenID library from version 2.1.2 to 2.2.2. With this change you no longer have to patch the OpenID library if you are working with PHP 5.3. [...]

19 May 2010 7:51am GMT

18 May 2010

feedDevZone - Items tagged as: Zend Framework

Announcing May's ZF Bug Hunting Days

It's that time of the month again! Thursday and Friday, 20-21 May 2010, Zend Framework will host its monthly bug hunt. For those of you unfamiliar with the event, each month, we organize the community to help reduce the number of open issues reported against the framework. Past events have netted over a 100 issues closed in just two days. We'd like to see that kind of momentum in this week's bug hunt. Whether they are big bugs or small bugs, remember: all bugs worthy of being squashed.

18 May 2010 2:24am GMT

08 May 2010

feedcakebaker

Sassy CSS

Those who follow me on Twitter probably know about my love-hate relationship with CSS. To ease the pain of working with CSS I switched to Compass, a stylesheet authoring framework. With Compass, you write the stylesheets in Sass (Syntactically Awesome Stylesheets) instead of CSS. Sass is basically CSS without brackets and semicolons, as you can [...]

08 May 2010 1:13pm GMT

20 Apr 2010

feedcakebaker

Speed up your tests with Hydra

Nowadays most computers come with more than one processor. And so it makes sense to use the additional processing power to speed up your tests by distributing them across the available processors. One tool that helps with this is Hydra. It allows you to distribute tests across multiple processors and machines, and currently supports the [...]

20 Apr 2010 2:52pm GMT

13 Apr 2010

feedcakebaker

Support for Google Apps OpenIDs

In a recent comment John mentioned that the OpenID component doesn't work with Google Apps OpenIDs. And he was right. The reason it didn't work is that Google introduced it's own OpenID discovery protocol as they faced challenges not addressed by the current version (2.0) of the OpenID standard. And this means such OpenIDs are [...]

13 Apr 2010 3:13pm GMT

02 Apr 2010

feedcakebaker

let()’s write slightly cleaner specs

When writing specs for your code, you often have to do some initialization. With RSpec I do this initialization in a "before" block as shown in the following example: describe BlogPost do before do @blog_post = BlogPost.create :title => 'Hello' end it "does something" do @blog_post.should ... end it "does something else" do @blog_post.should ... [...]

02 Apr 2010 9:08am GMT

11 Mar 2010

feedCI News

EllisLab moves to Mercurial, Assembla, BitBucket; CodeIgniter 2.0 Baking

EllisLab today announces changes to our internal development processes, including dropping Subversion in favor of Mercurial and adopting Assembla as our agile software development management tool. Along with these changes, CodeIgniter 2.0 pre-release code is in development, and is now hosted at the Mercurial-focused social coding site BitBucket.

At EllisLab we make ExpressionEngine, the CMS for web professionals, and CodeIgniter, the only PHP framework to receive praise from Rasmus Lerdorf, the creator of PHP. We're based out of Bend, Oregon, but only two staff members live there. The rest are scattered roughly from West to East in Portland, Missouri, Illinois, Toronto, North Carolina, Ireland, the UK, Germany, and Austria. In addition to very little face to face interaction with one another, our developers have to deal with as much as a 9 hour difference from other team members. So we've adopted and continue to adopt methodologies and technologies to bridge those gaps and enable us to be as productive as if we were all in the same building, working the same hours.

Version Control

One no-brainer, and I hope most of you are using it as well, is version control. Since 2005, we've been using Subversion, and it has performed admirably, particularly during the majority of ExpressionEngine's life when there were only two Sith developers working on a project. The first year that Subversion was in use, we even shared a single user and did not use commit messages. That works fine when you can read the rest of your team's minds, and you aren't using version control for revisioning, but merely for convenient file sharing.

But Subversion comes with a lot of baggage, some of which becomes heavier in proportion to the distance between team members, and as both your projects and team increase in size. Commits and diffs become laborious on even the fastest of networks. The size of the repository balloons if you try to use basic features of branches and tagging. Renaming and moving files is a pain, and can jam up your fellows' repositories. And don't even think about working independently and merging.

These and other issues led us to examine dozens of version control systems (VCSes) to find the right fit for our team. We looked at Git first, whose growth can be largely attributed to the popularity of GitHub, then Bazaar, darcs, Monotone, Perforce, BitKeeper, and so on. But after weeks of research and test use, we settled comfortably into Mercurial.

Now before the Git readers get their pitchforks ready and head for the comments, let me be clear that we are not at odds. Both are great distributed version control systems (DVCSes), have nearly identical features, and have a common enemy: Subversion. So our switch to Mercurial means that Git users win too - joining a growing army against centralized version control. It just happens to be that a few of the divergent features swing slightly towards Mercurial for our specific needs, but above all, our team enjoyed using Mercurial more than Git. Not that we didn't enjoy Git, we just enjoyed Mercurial more, and why is hard to quantify but there was obviously no reason to fight it. We're here to write code and create great applications; the more that our use of any VCS can fade into the background to accomplish that goal, the better.

Scrum

When your development team grows beyond two people, the mind meld dissolves, the ability to know at any given moment what the rest of the team is doing, and how well they are doing it dissipates. Cowboy coding's ability to be effective diminishes. So a little over a year ago, we began looking at various agile software development methods, and decided to try out Scrum. It's been a tremendous success.

To bring Scrum to a team spread across the world, we've been using technology to create a virtual office. Google Docs for shared spreadsheets to track our Sprints and burndown charts. Planning Poker to help us plan Sprints. Neither tool ever felt like a perfect match for us, though. Whether it's the clumsy manner in which product backlog items are stored and moved to a new spreadsheet to create Sprints, or not having the hour estimation card that we really wanted to play - resulting in a lot of "I estimated 16 hours but I really mean 12" - these tools were getting us by, but were not the most effective.

Enter Assembla, a tool we came across in our search for a new VCS. Assembla is the perfect blend of what our developers and our product owners need for project management, and that mix is remarkably difficult to find. It gives developers the ability to use any VCS they like, including those on your own servers, fully integrated with a ticketing system that is built from the ground up for agile software development. Product owners are given a visual ticket organizer to effortlessly create Sprints from categorized backlogs. Add to that a Scrum tool to make standing meetings less intrusive to the varied working hours of our distributed team, and it's near perfection.

Assembla is the product that is saving us from having to write our own agile software management tool. We've moved all of our software projects into Assembla. This is a tool anyone working in a team should check out.

This is a behind the scenes change of course so it may seem inconsequential, but all of our users will benefit. Like Mercurial, this logistical portion of our virtual office can just do what it's meant to do and thus fade into the background, letting us focus on getting things done instead of on processes.

CodeIgniter

Of our communities, CodeIgniter benefits the most directly from these changes. The adoption of a new VCS and new internal development tools allows us to not only be more effective in CodeIgniter's development, but also enables us to give you more and to interact more directly with you.

Starting today, CodeIgniter 2.0 is baking, and I'm thrilled to announce that with Subversion gone, in-development code is available publicly on its new home: BitBucket.

After adopting Mercurial, joining BitBucket was a perfect fit for our open source projects. It has a beautiful source code browser and will make watching code changes a breeze with its graphical changeset viewer and RSS/Atom feeds.

It also comes with a rich social layer, quick access to tagged versions, along with forking and patch queue management for advanced users. Do you find yourself making the same modifications to CodeIgniter before beginning a project? BitBucket and Mercurial can help you do that and share it with others with ease, using any version in the upstream repository.

We're really excited to watch CodeIgniter's growth accelerate due to these changes. A discussion of CodeIgniter 2.0's features and direction will be forthcoming, so be looking for that in the future in the news section of CodeIgniter.com. What are you waiting for? Go sign up at BitBucket and become a zealot, following the CodeIgniter project!

Discuss this story

11 Mar 2010 4:00pm GMT

04 Mar 2010

feedCI News

EECI2010 Full Ticket Giveaway

The ExpressionEngine and CodeIgniter Conference (EECI2010) in May is the CodeIgniter and ExpressionEngine event to go to this year. We want you to join the fun, so we're giving away a full conference ticket to the year's biggest event. Read the full details and how to enter at the ExpressionEngine blog.

Read details for the EECI2010 Full Ticket Giveaway

04 Mar 2010 8:48pm GMT

feedWithCake.com Companies Hiring

qpLogic Europe

We can use immediately an experienced Cake developer for assisting us with developing a multi-lingual application that needs some Jake/Joomla (css) integration. We have continuously Cake projects and prefer to work with a team of individual developers in multiple time zones. Please show me that you are experienced, affordable and have at least 24 hours available per week (40 is better ;-).

04 Mar 2010 11:54am GMT

23 Feb 2010

feedCI News

EllisLab @ SXSW 2010 and You

Over the course of the last few years we have gradually changed our approach to SXSW, preferring to move toward a small-group discussion format.

This is a great move for EllisLab and for the community; there is an immeasurable value to this discourse. This year we are excited to continue with this format and to add to it; this year, you, through the services at UserVoice, will have the opportunity to choose where we meet and what we discuss.

Read the full details on the ExpressionEngine blog (direct link to entry). Of particular note for CodeIgniter users, we will will be offering private Lunch with EllisLab events to exceptional contributors to the community, including those who run CodeIgniter community sites. This is your opportunity to tell us what we can do to support your endeavor while enjoying a meal on our tab.

(Note: user your CodeIgniter.com account to log in to the ExpressionEngine.com forums)

23 Feb 2010 7:34pm GMT

04 Feb 2010

feedCI News

Subversion Server Change

Our Subversion repositories have moved. Please update your repositories or check out new ones from the new location: http://svn.ellislab.com/CodeIgniter/trunk

As always, information about our Subversion repositories can be found on the download page and installation instructions.

04 Feb 2010 4:28pm GMT

17 Jan 2010

feedcakebaker

Rails 3 and Passenger

This weekend the RailsBridge people have organized a bugmash with the motto "Do One Thing for Rails 3″, and so I took the opportunity to experiment a bit with the coming Rails 3. After following the instructions for creating a new Rails 3 app (using the -database=mysql parameter for the "rails" command) I noticed that [...]

17 Jan 2010 9:46am GMT

31 Dec 2009

feedcakebaker

Accepting the Google OpenID with PHP OpenID

If you are using the PHP OpenID library (which is also used by my OpenID component for CakePHP), it is possible that you get an "Invalid OpenID" error when you try to login with the Google OpenID (https://www.google.com/accounts/o8/id), or any other OpenID that uses "https". In this case, the following steps might help to fix [...]

31 Dec 2009 4:45pm GMT

12 Dec 2009

feedcakebaker

Attribute Exchange support for the OpenID component

The OpenID Attribute Exchange specification (or AX for short) has been around for quite a while, though I ignored it so far because at the time it was introduced (almost) no OpenID provider supported it. However, after Yahoo! announced they support Attribute Exchange, and someone recently mentioned it in a mail, it was time for [...]

12 Dec 2009 5:30pm GMT

06 Dec 2009

feedCI News

CodeIgniter Community Chieftain Jamie Rumbelow

We're happy to announce the next CodeIgniter Community Chieftain, Jamie Rumbelow! This invitation only volunteer program focuses on identifying stellar examples from the community, and letting them utilize their strengths to help maintain the community and act as a liaison when needed to EllisLab.

Jamie will be taking the reigns from our first Community Chieftain, Michael Wales. Thanks Mike for your year and a half of volunteer service, and welcome aboard, Jamie!

06 Dec 2009 6:49pm GMT

11 Sep 2009

feedCI News

CodeIgniter v1.7.2 Released

EllisLab is pleased to release CodeIgniter version 1.7.2 for ready download. What's new? Among other changes:

Version 1.7.2 has been baking in the subversion for quite some time, and has been compatible with PHP 5.3.0 since late July, but many users understandably haven't been running from the in-development version. While I'd have liked to have had time to add a few more "big ticket" items to this release, making it 1.8, time is a cruel mistress. Many of our users develop on Macs, and OS X Snow Leopard ships with PHP 5.3.0, so we felt is was more important to push out this stable maintenance release instead of waiting for an even later date - it's been almost seven months since a refresh, afterall. But there are still a few good surprises, and welcome changes. Enjoy!

11 Sep 2009 3:03pm GMT

11 Feb 2009

feedCI News

CodeIgniter 1.7.1 Released

CodeIgniter Version 1.7.1 has been released. This version contains many new features and enhancements, as well as nearly three dozen bug fixes. It also includes a critical security update for applications using the new Form Validation library with field arrays. For a list of all changes please see the Change Log.

If you are currently running CodeIgniter please read the update instructions.

Note: If your browser does not display the 1.7.1 user guide please clear your cache and reload the page.

11 Feb 2009 1:24am GMT

23 Oct 2008

feedCI News

CodeIgniter 1.7.0 Released

CodeIgniter Version 1.7 has been released. This version contains a number of new features and enhancements, as well as many small improvements and bug fixes. For a list of all changes please see the Change Log.

If you are currently running CodeIgniter please read the update instructions.

Note: If your browser does not display the 1.7 user guide please clear your cache and reload the page.

23 Oct 2008 11:48pm GMT

15 Aug 2008

feedCI News

CodeIgniter Community Voice - HOWTO: Set up a CodeIgniter project in Subversion

EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.

This week, our Community Voice author is Bruce Alderson, known on the forums as madmaxx, who has written a wonderful guide on how he uses subversion with CodeIgniter. Bruce is an elder web monkey and systems programmer. He totally digs the craft of building software, making cool stuff, and causing people to laugh so hard liquids are forced from their nose. He's currently the Chief Monkey at Discovery Software and author of the not-at-all famous robotpony.ca. (Go read the one about shaving your yak)


After working with CodeIgniter for a few months (and WordPress for a few years), I've settled on a way to set up web projects that works well for development, deployment, and source control. Note that this style of layout only works on systems like Mac and Linux that have useful symlinks.

First, the folder layout

some-domain.com/
app/
config/
controllers/
(
etc)
public/
.
htaccess -> ../site-extras/.htaccess
favicon
.ico -> ../site-extras/favicon.ico
js
/ -> ../site-extras/js
images
/ -> ../site-extras/images
system
/
application/ -> ../../app/
site-extras/
js/
images/
.
htaccess

The layout favours a vhost setup, and splits your code and resources out of the CodeIgniter sources. Splitting your stuff from the CodeIgniter stuff lets you link your Subversion repository to theirs, so that you can keep it in sync with their development.

How it's done

  1. Set up your source tree (not including the symlinks or CodeIgniter source) and add to your Subversion repo.
  2. Add a svn link to CodeIgniter's repo (via svn propedit svn:externals, with public http://dev.ellislab.com/svn/CodeIgniter/tags/v1.6.2/) and run a svn update to grab the framework. See the Subversion docs for details.
  3. Copy the CI application folder to the site root (as app), remove the .svn folders, symlink to application, and add it to your local svn repo.
  4. Symlink the other site-extras to the public webserver root, and configure your local machine (and public webserver) to point to this root for the domain's virtual host setup.
  5. Alternatively, you can modify the $application_path to point to ../public/app/ (I'm not sure which is better yet). See the CodeIgniter docs on apps for more details.

You now have a CodeIgnitor project ready for development. You can keep up-to-date with CodeIgniter updates, deploy easily, and get at your code without wading through extra levels of hierarchy.


Discuss this article

15 Aug 2008 11:49am GMT

31 Jul 2008

feedCI News

CodeIgniter Community Voice - Generating PDF files using CodeIgniter

EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.

This week, our Community Voice author is Chris Monnat, known on the forums as mrtopher, who writes a helpful step by step guide to generating PDF files from CodeIgniter. Chris is a full time web application developer and part time entrepreneur. In addition to building web sites for the medical industry during the day, at night Chris also runs his own development company Left of Center Communications. He recently started a personal blog at http://www.chrismonnat.com where he keeps a record of his exploits and discusses, among other things, CodeIgniter.


PDF files rock! Some of the programs used to view them could use some work, but the file format itself is real handy. As a programmer I have found PDF's to be most helpful when generating reports that need to be printable. I know we are all supposed to be doing our part to make our offices "greener" and use less resources like paper. But some things just need to be printed (especially when your talking about the financial and legal industries).

When generating reports in PDF format you suddenly have a lot more control over layout and design than you do with plain old HTML and CSS (although much progress is being made with print style sheets). You can create some really nice reports on the fly that your users can view, save for later or e-mail to their co-workers for review. In this post I will show you how I generate PDF reports using CodeIgniter.

Quick Note

There are a number of PHP libraries out there for generating PDF files (like FPDF, Panda and dompdf) but the best one I have come across is the R&OS pdf class. I was first introduced to it from the PHP Anthology first edition by Harry Fuecks. I have tried other PDF libraries (some PHP 5 specific and some not) and none of them have been able to provide me with the same control or ease of use that the R&OS class has which is why I'm using it for this tutorial.

Getting Started

Before we start, lets get everyone to the same place so you can follow along as we go. I've prepared a .zip file containing everything you'll need to follow along. The archive includes CI 1.6.3 along with all the code and libraries we will discuss in this tutorial. Simply download the archive, unzip it on your web server and follow along.

I have done all the work of downloading the code library and putting the files in their right place for you, but I wanted to mention where things were for the detail oriented among you. There are 2 files that are necessary in order to use the R&OS library: class.ezpdf.php and class.pdf.php. Those two files have been placed in the application/library folder. R&OS also requires some font files in order to function and they have been placed at the root of the .zip file in a folder called fonts.

You do have to make a minor modification to the class.ezpdf.php file so that it will work properly within CI. First I renamed the file to cezpdf.php, which makes it easier to load using the CI loader. Then you have to modify the include statement on line 3 to:

include_once(APPPATH . 'libraries/class.pdf.php');

This will keep PHP from saying that it can't find included file. Once those modifications are made the R&OS class is ready to use with CI.

In the archive, I have also made a controller called tutorial.php and a helper called pdf_helper.php both in their respective directories. With the background info. out of the way, lets get our hands dirty with a real simple example.

Hello World

function hello_world()
{
$this
->load->library('cezpdf');

$this->cezpdf->ezText('Hello World', 12, array('justification' => 'center'));
$this->cezpdf->ezSetDy(-10);

$content = 'The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax quiz prog.
Junk MTV quiz graced by fox whelps. Bawds jog, flick quartz, vex nymphs.'
;

$this->cezpdf->ezText($content, 10);

$this->cezpdf->ezStream();
}

The above code produces a PDF file like this.

In the above, first thing we do is load the R&OS library for use. Next we use the ezText() function to create a title for our document. This function takes the text it will display as the first argument, the size of that text and an optional array of additional configuration options. In this instance we pass along a justification option of center. That will center our title at the top of our document.

After the title we insert some extra white space using the ezSetDy() function. After the whites pace we put the rest of the content for the document in a variable called $content and add it to our document using the ezText() function again. Finally, we create our document using the ezStream() function which actually creates the document and sends it to the users which prompts them to view/download the generated PDF document.

Handling Tabular Data

When your dealing with business reports the odds are good that you will need to generate reports with tables to display tabular data. From my experience with other PDF libraries, this is not an easy task. But with the R&OS library it's about as hard as creating an array.

function tables()
{
$this
->load->library('cezpdf');

$db_data[] = array('name' => 'Jon Doe', 'phone' => '111-222-3333', 'email' => 'jdoe@someplace.com');
$db_data[] = array('name' => 'Jane Doe', 'phone' => '222-333-4444', 'email' => 'jane.doe@something.com');
$db_data[] = array('name' => 'Jon Smith', 'phone' => '333-444-5555', 'email' => 'jsmith@someplacepsecial.com');

$col_names = array(
'name' => 'Name',
'phone' => 'Phone Number',
'email' => 'E-mail Address'
);

$this->cezpdf->ezTable($table_data, $col_names, 'Contact List', array('width'=>550));
$this->cezpdf->ezStream();
}

The above code should produce a PDF file like this.

In the above code I create an array of data called $db_data. I put this together so that it imitates a typical database result set because that's usually where you will be getting your data from. Below my data array I have created a $col_names array that associates the data elements in the $db_data array with a column title for the table. This is where the R&OS gets the title to display at the top of each table column. Once I have the data and column titles I create the table by calling the ezTable() function. This function takes the data array, an associative array for column names, the title for the table and an optional array of configuration options. There are a number of options that can be configured through that last optional array, but I'm not going to go into them in this tutorial.

Headers and Footers

Most reports in a corporate setting come with some kind of standard header and/or footer. They can include anything from the date/time generated, the user who generated them, to page numbers and the like. Headers and footers are handy to have, but unfortunately there isn't a real good way to add them to printable reports generated in HTML and CSS. There's one more reason to use the portable document format when creating printable reports.

The process of adding headers and footers to a PDF using the R&OS library is the slightest bit complicated. There are a lot of lines of code just to accomplish it, that's why I have created a helper file. Since the code is in a helper function, you just need load the helper and call the function whenever you need to add headers/footers to a PDF.

function prep_pdf($orientation = 'portrait')
{
$CI
= & get_instance();

$CI->cezpdf->selectFont(base_url() . '/fonts');

$all = $CI->cezpdf->openObject();
$CI->cezpdf->saveState();
$CI->cezpdf->setStrokeColor(0,0,0,1);
if(
$orientation == 'portrait') {
$CI
->cezpdf->ezSetMargins(50,70,50,50);
$CI->cezpdf->ezStartPageNumbers(500,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,578,40);
$CI->cezpdf->addText(50,32,8,'Printed on ' . date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.christophermonnat.com');
}
else {
$CI
->cezpdf->ezStartPageNumbers(750,28,8,'','{PAGENUM}',1);
$CI->cezpdf->line(20,40,800,40);
$CI->cezpdf->addText(50,32,8,'Printed on '.date('m/d/Y h:i:s a'));
$CI->cezpdf->addText(50,22,8,'CI PDF Tutorial - http://www.christophermonnat.com');
}
$CI
->cezpdf->restoreState();
$CI->cezpdf->closeObject();
$CI->cezpdf->addObject($all,'all');
}

An example of how I use this helper is provided in the headers() function of the tutorial.php controller. That code produces a PDF file like this.

The above code is the prep_pdf() function located in the pdf_helper.php file. This function does all the hard work of creating a footer for my PDF reports for me. All I have to do is load the helper in my controller and call the function. Since the reports could be portrait or landscape I have also included the ability to pass the orientation to the function and the code will modify the document margins accordingly.

I'm not going to go into a lot of detail about the above code because this tutorial could become very long. But the general idea is that I'm using the R&OS library to modify the margins of the document I'm creating, add page numbers and text to the very bottom of the document. R&OS has some functions that makes this easy like ezStartPageNumbers() and line(). Once all that is done I can add any kind of content to the document back in my controller and then just call ezStream() to generate the final document.

Wrap Up

I barely scratched the surface of what you can do with the R&OS PDF library in this tutorial. I encourage you to spend some quality time with the readme.pdf documentation file that comes with the library when you download it. That file goes over all the functions and their options in great detail.

So there you have it, generating PDF files with CodeIgniter and the R&OS library. If this method doesn't quite do it for you, there are a few helpful articles on the CodeIgniter wiki, like this one and this one, which walk you through some additional options. Whatever solution you choose I hope this tutorial has helped to introduce you to some of the options you have at your disposal for creating PDF reports with CodeIgniter.

Discuss this article

31 Jul 2008 4:33pm GMT

21 Jul 2008

feedCI News

CodeIgniter Community Voice - Lee’s Lost Bet

EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.

This week, our Community Voice author is Lee Tengum, who discusses how CodeIgniter has cost him over $8,800 in beer and soft drinks. Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.


It all started with an idea at 4 a.m. on a Tuesday morning that brought us to CodeIgniter.
We were neck deep in a deadline and sinking fast. We knew we needed help.
After puling some strings that bought some time we quit work for a week - well, client work at least. There were our own issues to solve.

We had amassed a team of roughly 14 at this point and had no way to efficiently manage who was doing what for how much and how long; in fact we were often surprised by code submissions.
That's a sad place to be.

We had been building in the 'flavor of the weak' when it came to frameworks and often chose whatever the contractor was fluent in to save time (which != saved money).

Not only were we not communicating, but we were reinventing the wheel for every project. Have I mentioned how sad of a place that is to be?

Back to 4 a.m.

Doug is one of my closest friends, and a trusted peer. He suggested we should develop a contractor management system and that we should build it all on CodeIgniter. At this time I hadn't seen sleep in nearly a day, consumed almost seven liters of coffee, the "development tub" was empty and we were trying to finish a RoR project that a contractor bailed on. I didn't want to hear about another &^%in framework, I just wanted this to be done.

Thankfully my friend couldn't understand the word "no" and kept pressing. He went on about how anyone with knowledge of PHP can build with this, its development cycle and the community that was forming around it. I still wasn't convinced but he assured me this would be the last time we changed frameworks and proposed a friendly bet.

I hate that I love gambling. I don't have a problem, per say, but I always lose. The problem is that my pride drives me to bet anyways. Besides I relished the opportunity to prove him wrong.

So the bet was laid. We would build the contractor management system in CI and all client projects for one month with CI. At the end of that month if I wanted to go back to another framework and could justify it rationally with solid points then he would keep the Development Tub full for a full year (a cost of roughly $100/week). If we stayed with Code Igniter I would the one stocking the tub for the next year and I would also have accept his offer to buy into my company and become a partner.

On Wednesday morning we filled the tub (again not a problem… really) and set out to build our app. We outlined what we wanted, mapped it out on the whiteboard, set up a Basecamp project for it, defined our milestones and set Saturday as launch day.

The tub… The tub… again

Beer? Check.
Monster energy drinks? Check.
Coffee? Check.
M&M Peanuts? Check.
Babysitter? Check. (We're parents…)
Pizza? Maybe.
Basecamp set up? Check.
SVN Server? Check.

While I depleted the tub and read the user guide, Doug was getting down to business. By the time I'd figured out how I was going to tackle my portion of the build he'd built the user authentication as well as the management section. Doug was already adding features to our "Wish List" in Basecamp and checking off milestones. Roughly 9 hrs into our project we started completing items on the wish list, which had never happened before. The wish list had never become a checklist before a deadline and I was starting to worry.

In the wee hours of Thursday morning we headed home to sleep. The following day we sent login details to our contractors and set up a basecamp project to log bugs. We fixed the stupid little ones that we missed and made changes on the fly. By the end of the day I had a huge overview of our team of contractors and a vision of things to come. I never did see the 48 hr Milestone reminder emails from Basecamp… again I was seeing a change.

By the end of the month we had more than a few client sites built on CI. We also had a process for development laid out and the term Rapid Development was taking on meaning with me. I was happy, the clients were happy and we had a team we could manage… and then reality sunk in.

I hate losing, even more so I hate losing to people I like winning against. I lost the bet. Though I gained a valuable business partner, a managed team, profitability and a kick ass framework to build it upon… I am forever filling the tub.

And with ExpressionEngine 2 built on CI (Which we are using extensively for client sites now), the tub has gained a lifetime sponsor. Me.

That app was build on 1.4.0 on September 20th 2006 and since then we have revised many things including our checklist:

Beer? Check.
M&M Peanuts? Check.
Basecamp set up? Check.
SVN Server? Check.

See the difference? We don't live at the office any more. CodeIgniter gave us the freedom to build around our needs and wants and it gave us the structure we needed to become more efficient. Just don't bet against CI, it has cost me $8800 and counting…. weekly.

ABOUT LEE

Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.

Discuss this article

21 Jul 2008 8:33pm GMT

17 Jul 2008

feedCI News

CodeIgniter Community Chieftain Michael Wales

We're happy to announce a new program for exceptional members of the CodeIgniter community, CodeIgniter Community Chieftains. As the community grows, the EllisLab development team often does not have the time that we would like to interact with the community in various ways, but it's always been a key part of our success. So as the need arises, we have created this program to help keep the wheels greased so to speak, making sure that our forums, wiki, and bug tracker are handling the needs of the community and are properly moderated.

This is an invitation only program as the aforementioned link explains, and we're proud to bring Michael Wales on board as our first CodeIgniter Community Chieftain. Most will need no introduction to Michael as you have likely already encountered him or some of his contributions in the community. Welcome aboard, Michael!

17 Jul 2008 7:33pm GMT

08 Jul 2008

feedCI News

CodeIgniter Brazil

Hermes Alves has launched a CodeIgniter resource in Portuguese, located at codeigniter.com.br. The site includes a discussion forum, mailing-list, and a few other resources. Kudos Hermes!

08 Jul 2008 6:08pm GMT