15 Dec 2019

feedSymfony Blog

A Week of Symfony #676 (9-15 December 2019)

This week, the upcoming Symfony 5.1 version added MongoDB support for the Lock component, exception pages enabled the "dark theme" and the MicroKernelTrait was improved to make it easier to use and configure.

Symfony development highlights

This week, 74 pull requests were merged (38 in code and 36 in docs) and 54 issues were closed (34 in code and 20 in docs). Excluding merges, 31 authors made 1,421 additions and 752 deletions. See details for code and docs.

3.4 changelog:

4.3 changelog:

4.4 changelog:

Master changelog:

Symfony Local Server

Symfony Local Server, the best way to run Symfony applications on your local machine, released its new 4.11.3 version with the following changes:

Newest issues and pull requests

They talked about us

Upcoming Symfony Events

Call to Action


Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

15 Dec 2019 9:27am GMT

12 Dec 2019

feedSymfony Blog

Symfony Type Declarations, Return Types and PHPUnit Compatibility

If you follow the Living on the Edge category of this blog, you'll find all the latest and greatest new features of each Symfony version. Big and small features that help you create your projects while having the best possible developer experience.

However, this is only part of the development activity needed to create and maintain Symfony. In this blog post we'll mention some changes that required hundreds of hours of work but remained invisible because they are not part of a shiny new feature.

Added PHP Type Declarations

PHP type declarations (or "type hints") add information about the data types of the function and method arguments. Symfony code didn't have type declarations yet because, according to the Symfony Release Process, we cannot add the latest PHP features right away and we need to wait until certain Symfony versions are released to make those changes.

Symfony 5.0 was the perfect moment to add these type declarations to our entire code base. This was a painstaking process because, even if some work could be automated, each change had to be reviewed manually.

The reason is that it's not only about removing PHPdoc comments and adding the types to the method arguments. You also need to check the rest of the code to look for data type castings. For example:

1
2
3
4
5
6
7
8
-/**
- * @param bool|null $enabled
- */
-public function setStrictRequirements($enabled)
+public function setStrictRequirements(?bool $enabled)
{
-    $this->strictRequirements = null === $enabled ? null : (bool) $enabled;
+    $this->strictRequirements = $enabled;

Check out the Pull Request #32179 to get an idea of the size of this change. Tens of thousands of lines were changed in thousands of files and tens of hours were spent reviewing and merging everything.

Thanks to @jschaedl, @Simperfit, @Tobion, @Matts, @smoench, @vudaltsov, @julien57, @azjezz, @tigitz, @andreia, @thomasbisignani, @lyrixx, @xabbuh for contributing these changes. Special thanks to @derrabus for coordinating the work and to @nicolas-grekas for doing the actual merge and conflict solving.

Added PHP Return Types

PHP return types allow functions and methods to specify the data type of their returned values. We considered adding these return types in Symfony 5.0 but we finally didn't do it because of two reasons:

  • The burden this would put on the community is immense, because third-party libraries and bundles should also be updated to be compatible with this new Symfony code that includes return types. In other words, Symfony should be the last to add these return types, not the first one.
  • Given the complexity and flexibility of Symfony's code base, we'd need return type covariance, which is only available in PHP 7.4 (Symfony 5.x requires PHP 7.2).

In any case, we have a plan to add these return types in Symfony 6.0. Check out the Pull Request #33236 to see the clever trick used to add these return types automatically thanks to the DebugClassLoader. Special thanks to @fancyweb for fixing all current return types defined in PHPdoc comments (see Pull Request #30323).

Added Compatibility with All PHP and PHPUnit Versions

The last recent feature that required an insane amount of work but developers take it for granted is the PHPUnit Bridge compatibility with all PHP versions from 5.5 to 7.4 and all PHPUnit versions from 4.8 to 8.0.

As mentioned in the New in Symfony 4.4: PHPUnit Polyfills blog post, we added lots of polyfills to make most of PHPUnit features available regardless of the PHPUnit version used in your application. This is needed for Symfony's own testing but will also help those applications that must keep a broad compatibility with legacy PHP and PHPUnit versions.

Check out the Pull Request #32844 to see the tens of related pull requests that were needed to achieve this. Special thanks to @jderusse who did most of the work related to this feature.


Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

12 Dec 2019 7:32am GMT

11 Dec 2019

feedSymfony Blog

New in Symfony 4.4: WebProfiler Improvements

Mailer Integration

Fabien Potencier

Contributed by
Fabien Potencier
in #32912.

The new Symfony Mailer was introduced in Symfony 4.3. In Symfony 4.4 we improved and polished it, including the integration with the profiler. The debug toolbar now displays the number of messages sent. If you click on it, you'll see the full message details in the new profiler panel:

The new Mailer web profiler panel in Symfony 4.4

Clear Ajax Requests

Matts

Contributed by
Matts
in #31876.

When making too many Ajax requests or keeping a page open for too long, the debug toolbar gets crowded with a long list of Ajax requests. In Symfony 4.4, you can click on the new Clear link to delete all the existing Ajax requests so you can see the new requests more clearly:

The new Clear link in the list of Ajax requests in the Symfony 4.4 web debug toolbar

Auto-Select the Best Panel for Ajax Requests

Thomas Calvet

Contributed by
Thomas Calvet
in #33783.

When you click on any element of the debug toolbar, you are redirected to its related panel (request, forms, logs, database, etc.) However, for Ajax requests we only display a link to its profile, so you cannot select the first panel displayed.

In Symfony 4.4, we made this link smarter to redirect to the most important panel for each request. For example, if the Ajax request resulted in an exception, you are redirected to the exception panel; if you dumped some information in the Ajax request, you are redirected to the dump panel; etc.

It's a small change, but it will save you some clicks and will improve your developer experience.

Compress Profiler Files

Nicolas Grekas

Contributed by
Nicolas Grekas
in #33698.

The data collected for each request is stored in an array structure before serializing and storing it the var/cache/ directory of your project. This data is not deleted automatically, so it can grow up pretty quickly.

In Symfony 4.4, if your system allows it, we compress the data automatically before saving it to disk. For a typical profile, the disk space usage decreases from 150 KB to 15 KB (for each profile).

HttpClient Integration

Timothée Barray Jérémy Romey

Contributed by Timothée Barray and Jérémy Romey in #33015.

The HttpClient component was also introduced in Symfony 4.3. In Symfony 4.4, besides several tweaks and improvements, we've added profiler integration for it. The debug toolbar now displays the number of HTTP requests and if you click on that, you'll see the full details of all requests:

The new HttpClient web profiler panel in Symfony 4.4

Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

11 Dec 2019 12:25pm GMT

10 Dec 2019

feedSymfony Blog

New in Symfony 4.4: Form Improvements

Disabling Validation when Submitting Forms

Thomas Calvet

Contributed by
Thomas Calvet
in #33609.

The formnovalidate HTML attribute (defined only for image and input[type=submit] elements) allows to disable client-side validation when submitting a form.

In Symfony 4.4, submit buttons (SubmitType) define a new validate boolean option to enable/disable this validation:

1
2
3
4
5
6
7
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
// ...

$builder->add('save', SubmitType::class);
$builder->add('save-as-draft', SubmitType::class, [
    'validate' => false,
]);

Added Support for Alpha-3 Codes

creiner

Contributed by
creiner
in #33791.

The CountryType form field uses Alpha-2 codes by default to refer to each country (e.g. bw = Botswana, sg = Singapore, etc.) In Symfony 4.4, we added a new alpha3 option to it so you can use ISO 3166-1 alpha-3 codes too (e.g. bwa = Botswana, sgp = Singapore):

1
2
3
4
5
6
use Symfony\Component\Form\Extension\Core\Type\CountryType;
// ...

$builder->add('country', CountryType::class, [
    'alpha3' => true,
]);

Related to this, in the Pull Request #32988, Terje Bråten added support for Alpha-3 codes in the Intl component:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
use Symfony\Component\Intl\Languages;
use Symfony\Component\Intl\Countries;

$languages = Languages::getAlpha3Names();
$isValidLanguage = Languages::alpha3CodeExists($alpha3Code);
$alpha3Code = Languages::getAlpha3Code($alpha2Code);

$countries = Countries::getAlpha3Names();
$isValidCountry = Countries::alpha3CodeExists($alpha3Code);
$alpha3Code = Countries::getAlpha3Code($alpha2Code);

Show Preferred Choices Twice

Sébastien Alfaiate Christian Flothmann

Contributed by Sébastien Alfaiate and Christian Flothmann in #32658.

The preferred_choices option of the ChoiceType form field allows to display some choices at the top of the list (e.g. to display first the most popular shipping countries in your store).

Although this option is handy for most users, others are confused because the preferred choices are no longer displayed in the full list of choices. That's why starting from Symfony 4.4, preferred choices are displayed twice: at the top of the choice list and at their original location if they weren't preferred.

Automatic Accept Attribute

Rémy Lescallier

Contributed by
Rémy Lescallier
in #32587.

In Symfony 4.4, when you define the mimeTypes option in a File constraint applied to a FileType form field, the value of the mimeTypes option is also used in the accept attribute of the related <input type="file"/> HTML element.

This behavior is applied only when using form type guessing and when the field doesn't define its own accept value.

Getting the Form Name in Tests

Dmitriy Simushev

Contributed by
Dmitriy Simushev
in #31959.

When testing forms in functional tests, it's common to use some code like the following, which hardcodes the form name (my_form[...] in this example):

1
2
3
4
5
6
7
8
$client = static::createClient();
$crawler = $client->request('GET', '/sign-up');
$formButton = $crawler->selectButton('submit');
$form = $formButton->form([
    'my_form[name]'     => '...',
    'my_form[password]' => '...',
    // ...
]);

In Symfony 4.4, we added a getName() method so you can get the form name instead of hardcoding it:

1
2
3
4
5
6
7
// ...
$form = $formButton->form();
$formName = $form->getName();
$client->submit($form, [
    $formName.'[name]'    => '...',
    $formName.'[password]' => '...',
]);

Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

10 Dec 2019 9:44am GMT

09 Dec 2019

feedSymfony Blog

New in Symfony 4.4: ErrorHandler Component

Yonel Ceruto

Contributed by
Yonel Ceruto
in #31065.

The Debug component was released in 2013 to provide three important features to Symfony applications:

You just had to add Debug::enable(); in your code (for example in the front controller when the debug kernel option was set) to enable all these features that improve your development experience.

In Symfony 4.4 we've introduced a new component called ErrorHandler which replaces the Debug component and provides the same features in a more modern and powerful way.

The main issue of the previous DebugBundle is that you needed to install the TwigBundle too in order to 1) get exceptions in the same non-HTML format of the request and 2) get the advanced HTML error pages. This was not only cumbersome but also confusing for API-only applications that don't use Twig.

The new ErrorHandler component always generates exceptions in the same format as the request and it doesn't require using Twig. This introduces some changes which are explained in the Symfony 4.4 UPGRADE guide.

The most important change is that you can no longer customize error pages for non-HTML formats using Twig templates (e.g. templates/bundles/TwigBundle/Exception/error403.json.twig). When the request format is JSON, XML, ATOM or TXT, exception pages follow the RFC 7807 standard and have the following structure (the following example only shows the JSON structure):

1
2
3
4
5
{
    "title": "Not Found",
    "status": 404,
    "detail": "Sorry, the page you are looking for could not be found"
}

If you want to override this content, you must add the Serializer component to your project and create a custom normalizer as explained in the docs.

The other important change is related to the error page preview feature. Although this feature keeps working as before, some files have changed their location, so you need to make the following changes in your project configuration:

1
2
3
4
5
6
- # config/routes/dev/twig.yaml
+ # config/routes/dev/framework.yaml
_errors:
-     resource: '@TwigBundle/Resources/config/routing/errors.xml'
+     resource: '@FrameworkBundle/Resources/config/routing/errors.xml'
    prefix:   /_error

In summary, the new ErrorHandler component keeps all the great features of the Debug component but removes the Twig dependency and makes Symfony exceptions compliant with modern standards.


Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

09 Dec 2019 10:35am GMT

08 Dec 2019

feedSymfony Blog

A Week of Symfony #675 (2-8 December 2019)

This week, development activity focused on fixing the bugs reported for the recent Symfony 4.4 and 5.0 versions. We also improved the Slugger to make it more portable and added support for autowiring PHP 7.4 typed properties. Lastly, the videos of SymfonyCon 2019 Amsterdam conference were published.

Symfony development highlights

This week, 60 pull requests were merged (42 in code and 18 in docs) and 82 issues were closed (66 in code and 16 in docs). Excluding merges, 31 authors made 1,870 additions and 238 deletions. See details for code and docs.

3.4 changelog:

4.3 changelog:

4.4 changelog:

5.0 changelog:

Master changelog:

Newest issues and pull requests

They talked about us

Upcoming Symfony Events

Call to Action


Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

08 Dec 2019 9:21am GMT

06 Dec 2019

feedSymfony Blog

SymfonyCon Amsterdam 2019 was a blast!

SymfonyCon Amsterdam 2019 was a great success!

The Symfony community met two weeks ago in Amsterdam, Netherlands, for the international Symfony conference from November 19th to 23rd in the great Beurs Van Berlage monument. We were super pleased to welcome more than 1600 people, more than 30 speakers and our amazing sponsors. This yearly gathering took place several days ago in the wonderful city of Amsterdam, where we could already feel the magic atmosphere of Christmas. Meeting the PHP Community was like a big family reunion at holiday season. We were so happy to see you all and hope you had a great time there with us!

Let's wrap up this International Symfony gathering starting with the pre-conference workshops!

We had the great pleasure to welcome 150+ people to the pre-conference workshops. A big shout out to our fantastic trainers for sharing their knowledge during the pre-conference workshop days: Kévin Dunglas, Julien Pauli, Nicolas Grekas, Ryan Weaver, Titouan Galopin, Christopher Hertel, Tobias Nyholm, Łukasz Chruściel, Jérôme Vieilledent and their awesome assistants! We had several awesome workshops offered on November 19th and 20th among them: Getting ready for Symfony 5, Create an eCommerce website with Sylius, Practical Forms with Symfony, Building API-driven apps with API Platform, Practical Doctrine ORM within Symfony apps, Knowing your state machines - Symfony Workflow, Practical Design Patterns with Symfony, Writing Modern JavaScript with Symfony & Webpack Encore, Profiling Symfony & PHP apps. It was a good way for all the workshop trainees to enhance their knowledge and experience before the conference. Attending a pre-conference workshop is a great way to learn new skills, best practices and more. This year all our workshops were sold out, we hope that you learned a lot during the classes!

November 21st and 22nd: the conference days!

For 2 days, more than 35 speakers were on stage to present their talks and share their experience with everyone. The event was divided into 4 different tracks (Advanced, Beginner, PHP and Unconference). The attendees had to choose between 3 or 4 topics per hour (including the ones from the Unconference area), and sometimes the choice was not easy! The conference started with Fabien Potencier's Keynote and the release live of Symfony 5.
We ended the first day with the core team round table before we got to share a perfect moment altogether during the conference social event downtown Amsterdam.

On the second day, the conference started with Sebastian Bergmann's Keynote about "PHPUnit Best practices". The closing Keynote was about "A year of Symfony", Zan Baldwin and Nicolas Grekas took us on a Symfony trip over what happened in the Symfony ecosystem the last 12 months. It was time to realize how many great achievements has been made during the last year, it's always a good reminder!

If you attended the conference, you can still rate the speakers and/or leave a feedback about their talks on our Feedback App. You can also give your opinion about the conference here. It will help us improve the next editions.

All the talks of the conference (except the talks from the Unconference track) were recorded. You'll be able to watch them all online. They are already available to everyone on SymfonyCasts, for the conference attendees they are available there for free! They'll also be on Symfony YouTube channel later in the year as well (free for everyone)!

November 23rd: the Hackday to end smoothly the conference!

This year's hackday was very impressive, a lot of people attended the hackday and more than 160 contributions were made.The hackday was also a way to learn how to contribute to Symfony and a lot of the attendees enjoyed a workshop on how to contribute to Symfony by Ryan Weaver. Thank you to all the attendees who took the time to attend the hackday!

To finish, we'd like to give a big thank you to our sponsors:

Diamond Sponsor: SensioLabs

Platinum Sponsor: Smile

Gold Sponsors: Blackfire, Speakap, Les-Tilleuls.coop, Netgen Layouts, SymfonyCloud

Silver Sponsor: Ingewikkeld, JetBrains, Medicore, Shopware, XIP, EZ

Bronze Sponsors: Trisoft

Community Sponsors: StickerMule, SymfonyCasts

Lanyard Sponsor: Blackfire

Thank you again to all the attendees, the speakers (you are stunning!) and the sponsors. See you all next year in SymfonyCon Disneyland Paris 2020, on December 3-4. The website is already online, you can register today and secure your place for next year!

The SymfonyCon team


Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

06 Dec 2019 2:34pm GMT

New in Symfony 4.4: Console Improvements

The Console component is one of the most popular and mature Symfony components. Even if some developers consider it already feature-complete, in each new Symfony version we add some small new features to it.

Make it mandatory to return the command exit status

Jan Schädlich

Contributed by
Jan Schädlich
in #33775.

The exit status is a number passed to the parent process (or caller) when a process or command has finished executing its task. A 0 exit status means that the command run successfully and any other number means some error.

However, in Symfony commands it's common to not return this exit status. In fact, it's common to not return anything from the execute() command:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// src/Command/CreateUserCommand.php
namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CreateUserCommand extends Command
{
    protected static $defaultName = 'app:create-user';

    // ...

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // ...
    }
}

In Symfony 4.4 we've deprecated this behavior and you are encouraged to return an integer with the exit status of your command:

1
2
3
4
5
6
protected function execute(InputInterface $input, OutputInterface $output)
{
    // ...

    return 0;
}

Returning the exit status is mandatory in Symfony 5, so better start adding those returns in your commands so you are ready to upgrade.

Configure the trimming of answers

Hamza Amrouche

Contributed by
Hamza Amrouche
in #31626.

When using the Question Helper to ask questions in the console, the answer input by the user is trimmed automatically. Although this is the most common behavior by far, in some edge-cases this is not desirable.

In Symfony 4.4, we've added a new setTrimmable() method so you can change the default behavior:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
use Symfony\Component\Console\Question\Question;

public function execute(InputInterface $input, OutputInterface $output)
{
    $helper = $this->getHelper('question');

    $question = new Question('What is the secret code?');
    $question->setTrimmable(false);
    // ...
}

If the user inputs ' abc 1234 ', that's exactly the value you'll get, instead of the default abc 1234 value.

A standard way of disabling ANSI color escape codes

Jordi Boggiano

Contributed by
Jordi Boggiano in #34252.

Symfony commands use lots of ANSI escape codes to add color to their output. Although most people like that, some people prefer to disable this feature completely. Since day one, Symfony has allowed to disable this by adding the --no-ansi option when executing a command.

However, the problem is that each project, tool and library defines a different way of disabling ANSI codes. That's why the no-color.org project has proposed to use the NO_COLOR env var as the standard way of disabling ANSI codes in every piece of software.

In Symfony 4.4 we added support for this env var (but we kept the --no-ansi option too) so you can now disable ANSI codes by running your commands like this:

1
$ NO_COLOR=1 php bin/console app:my-command

Be trained by Symfony experts - 2019-12-16 Lyon - 2019-12-16 Lille - 2020-01-13 Clichy

06 Dec 2019 11:39am GMT

11 Nov 2011

feedCI News

Reportula

What can you tell us about the team that built reportula.org?

The Team that made reportula.org is just one person. Pedro Oliveira, started Reportula when he needed a clean and fast web application that reported the Bacula Backups software of the company he works for. He has decided to open the project, and let it grow to full web application that is able to manage the Bacula Backups.

Reportula Website Screen Shot

What can you tell us about the site in general? What are the goals of the site and the main audience?

Reportula is a php based web program that provides you a summarized output of jobs that have already run. It obtains its information from the Bacula's database. Aside from a nice graphical display, it provides summaries of your jobs, as well as graphs of job usage. This is a fairly high level bacula management tool.

The main goals were to create a web reporting tool for the bacula backups system, as I got further into the project it developed into something more than that. Right know it calculates average of bacula backups, it has time line history of backups. Imagine this scenario for example, if you use the crontab feature of reportula, you can see in time by how much data your backups infrastructure is growing.

Example. in 2011.05.01 if backups infrastructure stores 500 Tera bytes, in 2011.12.30 it stores 510 terabytes. This is very handy for us because with this feature you can predict the storage needs of your backups for the future.

What was your major consideration in using CodeIgniter for this?

I chose codeigniter because I needed an easy, fast, and supported PHP development framework. I found that with Codeigniter I could achieve that. This project was made in less than month.

Another nice thing about Codeigniter is that you don't have to "re-invent the wheel". Codeigniter has most of the thing that you need for an application already developed. All you have to do is connect the blocks which is very easy.

What is next on the plate for reportula.org? Any additional functionality you can tell us about?

On the plate for Reportula is user registrations, acls, and managing Bacula Backups like "bconsole".

Do you have any other information you'd like to share with the community? Tips from this project you'd like to share? Lessons you've learned?

First of all i think that Codeigniter is one of the best frameworks on the internet. I've tried them all (Cake, Yii, Symfony, Zend) they are all too complicated, too big, with lots of features and slow. They all had one problem BIG, STEEP LEARNING CURVE.

Codeigniter has less features than the others but you start making an application in less than 30 minutes. And what it does it does well! Even if you think you need a big framework after starting with codeigniter it cames to you that you don't need another framework to develop some applications. The lessons I learned are don't re-invent the wheel, Codeigniter does it and does it well, the community are nice, and always had support on the forum.

11 Nov 2011 10:19pm GMT

02 Nov 2011

feedCI News

GoCart

Every week we hear of really awesome places that CodeIgniter is being used. I want to start sharing those with the community-at-large. I will start by posting them here under a new Showcase Category with the hopes that any future revisions of CI.com will have a section for stuff like this. You guys and gals make some really cool stuff and deserve a platform to show it off.

So without further ado…

This showcase is an interview with Kyle Roseborrough about GoCart

What can you tell us about the GoCart team?

We have a pair of PHP developers who knew there was a better way to build a shipping cart. Noah (lead developer) has 6 years experience in PHP development and 4 years in CodeIgniter. Gabe has about 10 years experience in web application development. Kyle has been working in UI and management for 10 years.
GoCart Website Screen Shot

What can we tell about the site in general?

GoCartdv.com was built to showcase GoCart and offer some basic information on the system.

What are the goals of the site and the main audience?

The main audience is CodeIgniter developers who are wanting a simple, scalable, CodeIgniter shopping cart. The goal is to get people involved in development to improve the cart and allow it to fully embody the goal of the project. To be easy to customize for developers and easy to use for end users/customers

What was your major consideration in using CodeIgniter for this?

CodeIgniter has great documentation and is easy to learn. We build lot of custom projects on CodeIgniter and it only made sense for us to build our cart on it. When looking for commerce solutions, we never found a suitable solution built on CodeIgniter so we decided to set out to do it on our own.

What is next on the plate for GoCart?

We really want GoCart to foster a great community of people contributing back to the roadmap and path the project will take. We want the focus to remain the same though "Easy to Customize, Easy to Use". It would be great if we could get enough people using.

Any additional functionality you can tell us about?

Well, not really. GoCart is intended to be a shopping cart, plain and simple. It does have some basic page and banner management and a whole slew of cart related features, but ultimately it's an ecommerce platform.

Do you have any other information you'd like to share with the community?

We built GoCart to be simple and scalable. As time goes on, we want the software to become easier and easier to use. We want GoCart to be scalable and to be able to work with new platforms as they come out. We feel that CodeIgniter and the CodeIgniter community is a huge benefit here. It enables developers to tie into a whole plethora of libraries, helpers and applications easily and support each other in the endeavor to make CodeIgniter better. Essentially, what's good for CodeIgniter is good for GoCart.

Tips from this project you'd like to share?

If you really want something, do it yourself. If it doesn't happen then you probably don't want it as bad as you think.

Lessons you've learned?

- Not every idea is a good one. Generally you need someone else around to discuss ideas and methods with. Collaboration is the best way to build a good application.
- No one knows what the next trend will be. Having a scalable platform that will adjust to a new set of tools and user demands is very important.


If you have a project that you would like to see in our showcase email me

02 Nov 2011 7:31pm GMT

18 Oct 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 2.0.0beta1 Released!

The Zend Framework community is pleased to announce the immediate availability of Zend Framework 2.0.0beta1. Packages and installation instructions are available at: http://packages.zendframework.com/

18 Oct 2011 7:44am GMT

05 Oct 2011

feedCI News

New User Guide in Development

We are happy to announce today that the user guide has had some significant improvements, and the first commit of these changes were just pushed today.

As many of you likely heard at CICON 2011, the Reactor team has had an internal project going on for some time to move the user guide to Sphinx. In addition to handling the tedium of generating page and document tables of contents, or maintaining internal links and references, the documentation is now easier to write, as you can simply focus on the content instead of markup and presentation. Don't forget syntax highlighting of PHP, HTML, CSS, and JavaScript in code samples. Based on ReStructured Text, it's also more human readable in a text editor than HTML is, which is likely where you spend most of your time. As an added benefit, Sphinx can output HTML, PDF, and even EPUB formats all from the same source files. We will likely be taking advantage of that at a later date.

But we didn't stop there, we also enlisted the thunderous powers of EllisLab's Chief Creative Officer, James Mathias for a style redesign. They are clean, easy to read, and beautiful.

Setting up your dev environment to work with Sphinx (if you want to render and output locally) is very easy, and takes about five minutes. For those that want to geek out, we have added a readme file to the user guide source folder so the step by step instructions are available right from GitHub.

Today marks the first commit with the new user guide to the unreleased develop branch, so you may encounter some bumps. Most notably are the code blocks, which pandoc lost our line breaks on, and some navigation issues as we experiment with different table of contents presentation and depth. We'll be cleaning these up prior to the next release (much is as simple as some line breaks and tabs), but feel free to pitch in and submit some pull requests if you see anything out of whack.

And lastly, for the first time ever, we have live nightly builds of documentation for the develop branch available at the CodeIgniter web site. Enjoy!

05 Oct 2011 7:23pm GMT

29 Sep 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.11 Released

The Zend Framework team announces the immediate availability of Zend Framework's ALL ONES 1.11.11 release, the eleventh maintenance release in the 1.11 series. 1.11.11 includes around 30 bug fixes and may be downloaded from the Zend Framework site .

29 Sep 2011 7:52pm GMT

21 Sep 2011

feedCI News

Upcoming Site Downtime

The EllisLab family of sites (ExpressionEngine.com, CodeIgniter.com, MojoMotor.com, and EllisLab.com) will be down for scheduled maintenance on Thursday, September 22, 2011 beginning at approximately 10-11pm Eastern and lasting a number of hours. Access to critical resources such as the store, your product downloads, and documentation will be unaffected.

21 Sep 2011 4:17pm GMT

feedDevZone - Items tagged as: Zend Framework

Announcing September's Zend Framework Bug Hunt Days

For those who haven't put the recurring event in their calendar, the Zend Framework Monthly Bug-hunt is here again! This Thursday, Friday and Saturday (the 22nd, 23rd and 24th of September), 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.

21 Sep 2011 3:07pm GMT

06 Sep 2011

feedCI News

Contribution Guide

CodeIgniter is a community driven project and accepts contributions of code and documentation from the community. These contributions are made in the form of Issues or Pull Requests on the EllisLab CodeIgniter repository on GitHub.

Issues are a quick way to point out a bug. If you find a bug or documentation error in CodeIgniter then please check a few things first:

Reporting issues is helpful but an even better approach is to send a Pull Request, which is done by "Forking" the main repository and committing to your own copy. This will require you to use the version control system called Git.

Guidelines

Before we look into how, here are the guidelines. If your Pull Requests fail to pass these guidelines it will be declined and you will need to re-submit when you've made the changes. This might sound a bit tough, but it is required for us to maintain quality of the code-base.

PHP Style: All code must meet the Style Guide, which is essentially the Allman indent style, underscores and readable operators. This makes certain that all code is the same format as the existing code and means it will be as readable as possible.

Documentation: If you change anything that requires a change to documentation then you will need to add it. New classes, methods, parameters, changing default values, etc are all things that will require a change to documentation. The change-log must also be updated for every change. Also PHPDoc blocks must be maintained.

Compatibility: CodeIgniter is compatible with PHP 5.1.6 so all code supplied must stick to this requirement. If PHP 5.2 or 5.3 functions or features are used then there must be a fallback for PHP 5.1.6.

Branching: CodeIgniter uses the Git-Flow branching model which requires all pull requests to be sent to the "develop" branch. This is where the next planned version will be developed. The "master" branch will always contain the latest stable version and is kept clean so a "hotfix" (e.g: an emergency security patch) can be applied to master to create a new version, without worrying about other features holding it up. For this reason all commits need to be made to "develop" and any sent to "master" will be closed automatically. If you have multiple changes to submit, please place all changes into their own branch on your fork.

One thing at a time: A pull request should only contain one change. That does not mean only one commit, but one change - however many commits it took. The reason for this is that if you change X and Y but send a pull request for both at the same time, we might really want X but disagree with Y, meaning we cannot merge the request. Using the Git-Flow branching model you can create new branches for both of these features and send two requests.

How-to Guide

There are two ways to make changes, the easy way and the hard way. Either way you will need to create a GitHub account.

Easy way

GitHub allows in-line editing of files for making simple typo changes and quick-fixes. This is not the best way as you are unable to test the code works. If you do this you could be introducing syntax errors, etc, but for a Git-phobic user this is good for a quick-fix.

Hard way

The best way to contribute is to "clone" your fork of CodeIgniter to your development area. That sounds like some jargon, but "forking" on GitHub means "making a copy of that repo to your account" and "cloning" means "copying that code to your environment so you can work on it".

  1. Set up Git (Windows, Mac & Linux)
  2. Go to the CodeIgniter repo
  3. Fork it
  4. Clone your CodeIgniter repo: git@github.com:<your-name>/CodeIgniter.git
  5. Checkout the "develop" branch At this point you are ready to start making changes. Fix existing bugs on the Issue tracker after taking a look to see nobody else is working on them.
  6. Commit the files
  7. Push your develop branch to your fork
  8. Send a pull request http://help.github.com/send-pull-requests/

The Reactor Engineers will now be alerted about the change and at least one of the team will respond. If your change fails to meet the guidelines it will be bounced, or feedback will be provided to help you improve it.

Once the Reactor Engineer handling your pull request is happy with it they will post it to the internal EllisLab discussion area to be double checked by the other Engineers and EllisLab developers. If nobody has a problem with the change then it will be merged into develop and will be part of the next release.

Keeping your fork up-to-date

Unlike systems like Subversion, Git can have multiple remotes. A remote is the name for a URL of a Git repository. By default your fork will have a remote named "origin" which points to your fork, but you can add another remote named "codeigniter" which points to git://github.com/EllisLab/CodeIgniter.git. This is a read-only remote but you can pull from this develop branch to update your own.

If you are using command-line you can do the following:

git remote add codeigniter git://github.com/EllisLab/CodeIgniter.git

git pull codeigniter develop

git push origin develop

Now your fork is up to date. This should be done regularly, or before you send a pull request at least.

[Editor's note: This article will be added to the User Guide]

06 Sep 2011 1:36pm GMT

31 Aug 2011

feedCI News

Amazing Progress Report & Addition of IRC to CodeIgniter.com

In less than two weeks since the announcement was made at CICON that CodeIgniter was moving to GitHub, we've seen some incredible results from the change. Already CodeIgniter is the 10th most watched PHP project at GitHub (currently 758), with 42 open pull requests, 53 merged pull requests, 170 forks, and 41 individual contributors. Incredible!

Behind the scenes, the Reactor engineers and the EllisLab team are regularly conversing about potential changes, and working jointly on larger more sprawling projects like converting the userguide to Sphinx, and getting things ready for the inclusion of Sparks.

We also noticed what seemed to be a spike in activity on the #CodeIgniter Freenode IRC channel, so we've decided to make it more prominent to encourage its continued use. You'll now notice an IRC tab in the main navigation, letting you access the #CodeIgniter IRC channel right here at CodeIgniter.com.

Join in the discussions, and if you haven't already, start watching the CodeIgniter repo at GitHub, contributing, and even just commenting on people's requests or engaging in peer code review. With our community's energy, I think we might even eclipse some of the larger PHP projects at GitHub! You all are awesome, and we thank you.

31 Aug 2011 8:29pm GMT

27 Aug 2011

feedCI News

CICON2011 Recap

Phil Sturgeon has settled in after last weekend's very successful CICON, and relates his take on the biggest news items: GitHub, git-flow, no more "Core" branch, Sparks, and (drum roll) the community! Read the full article on Phil's blog.

27 Aug 2011 12:43pm GMT

25 Aug 2011

feedCI News

Converting from Mercurial to Git

If you've been maintaining a Mercurial fork of the CodeIgniter repo, we've written up a how-to demonstrating migration of that repository to Git. You can always just clone anew from GitHub, but if you migrate your Hg repository, you will not lose any of your change set history when switching. Read the step-by-step instructions along with some additional resources at the EllisLab blog.

25 Aug 2011 2:27pm GMT

23 Aug 2011

feedDevZone - Items tagged as: Zend Framework

Announcing the August 2011 Zend Framework Bug-Hunt

For those who haven't put the recurring event in their calendar, the Zend Framework Monthly Bug-hunt is here again! This Thursday, Friday and Saturday (the 25th, 26th and 27th of August), 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.

23 Aug 2011 1:44pm GMT

20 Aug 2011

feedCI News

GitHub, Reactor, and v2.0.3

If you are following CICON 2011 today, then you no doubt already heard from the Reactor team: CodeIgniter is now using Git for source control, and has moved its home to GitHub. Also, CodeIgniter "Core" is not longer being publicly maintained. CodeIgniter "Reactor" is CodeIgniter, so we are dropping that suffix. In short: CodeIgniter is the framework, and Reactor is our community driven development program.

Lastly, version 2.0.3 was released today, download it here or from the release tag at GitHub.

For full details of our switch to Git, head over to the EllisLab blog.

20 Aug 2011 4:03pm GMT

03 Aug 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.10 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.11.10, our tenth maintenance release in the 1.11 series. 1.11.10 includes more than 50 bug fixes and may be downloaded from the Zend Framework site .

03 Aug 2011 9:03pm GMT

26 Jul 2011

feedDevZone - Items tagged as: Zend Framework

Announcing July's Zend Framework Bug Hunt Days

For those who haven't put the recurring event in their calendar, the Zend Framework Monthly Bug-hunt is here again! This Thursday, Friday and Saturday (the 28th, 29th and 30th of July), 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.

26 Jul 2011 6:45pm GMT

14 Jul 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.9 Released

A number of potential BC issues were identified in the 1.11 series, and specifically in the 1.11.8 release, and as such, the Zend Framework team is releasing version 1.11.9 just one week following 1.11.8. It is available for immediate download: http://framework.zend.com/download/latest

14 Jul 2011 5:15pm GMT

07 Jul 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.8 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.11.8, our eighth maintenance release in the 1.11 series. 1.11.8 includes around 40 bug fixes and may be downloaded from the Zend Framework site .

07 Jul 2011 4:04pm GMT

29 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Juozas Kaziukėnas discusses the future of PHP frameworks

Juozas "Joe" Kaziukėnas recently wrote a post on his blog that discusses the current and future state of the PHP framework landscape. This one is going to take a little explaining, have a seat and I'll get the flip chart.

29 Jun 2011 12:00pm GMT

28 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Pádraic Brady is now summarizing the Zend Framework Contributors Mailing-List

Zend Framework community member Pádraic Brady has started his own summaries of the Zend Framework Contributors mailing-list. Click on inside, I've got the URL laying around here somewhere.

28 Jun 2011 4:48pm GMT

17 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Announcing June's Zend Framework Bug Hunt Days

For those who haven't put the reoccurring event in their calendar, this announcement is for you: the Zend Framework Monthly Bug-hunt is here again! Next Thursday, Friday and Saturday (the 23rd, 24th and 25th of June), 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.

17 Jun 2011 4:37pm GMT

14 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 2.0.0dev3 Release

The Zend Framework team is pleased to announce the third development release of Zend Framework 2.0, 2.0.0dev3. It is immediately downloadable from the Zend Framework servers: zip package tar.gz package NOTE! This release is not considered of production quality, and is released solely to provide a development snapshot for purposes of testing and research. Use at your own risk.

14 Jun 2011 9:21pm GMT

08 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Getting an OAuth Access Token from the Command Line

OAuth is great - there's no need to save users' passwords, it's - in theory - a consistent way to interact with other services, and it's hopefully something that your users are familiar and comfortable using. But if you're not just interacting with your users' accounts - for example, your application uses a single account on a service to broadcast messages, or analyze data - getting or renewing the access token can be painful.

08 Jun 2011 9:20pm GMT

02 Jun 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.7 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.11.7, our seventh maintenance release in the 1.11 series. 1.11.7 includes more than 20 bug fixes and may be downloaded from the Zend Framework site .

02 Jun 2011 3:25pm GMT

27 May 2011

feedCI News

Jeffrey Way Talks CodeIgniter

Yesterday Jeffrey Way, Editor of Nettuts+ did a video tutorial on Easy Authentication using CodeIgniter. As part of the tutorial he takes you through the process of building an authentication system with CodeIgniter and how to restrict access to certain parts of your website to only those who've logged in.

27 May 2011 4:29pm GMT

25 May 2011

feedCI News

Giving Back

Today we have an announcement that we are very excited about. If you take a look around you will notice some ad spots have appeared in various locations around the CodeIgniter site. Our hope is that by adding some ads to CodeIgniter.com we can give back to the community in a number of ways. Capitalizing on the traffic will allow us to sponsor more events, invest in more hours coding and generally give back more to this awesome community. And we've also tried to make several of the ad spots more economical so that many of you can capitalize on them to promote the products or services that you are offering using CodeIgniter.

We are using the Buy Sell Ad Network to manage the ads. Those of you running ads on your sites are probably familiar with them. We chose BSA as it was a very simple process to get the ads online. But we wanted to make sure that whatever system we used allowed us to manage the content that appears on the site. BSA allows you to have complete control over the ads that appear here and we will be doing out best to make sure that they fit within the intent of this community.

I would also like to thank the Reactor Team for their feedback as part of this decision. Your contributions to this community are many and we thank you for that.

25 May 2011 7:01pm GMT

feedDevZone - Items tagged as: Zend Framework

Announcing the May 2011 Zend Framework Bug-Hunt

For those who haven't put the reoccurring event in their calendar, this announcement is for you: Zend Framework Monthly Bug-hunt is here again! Tomorrow , Friday and Saturday of May (the 26th , 27th and 28th 2011 ), 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.

25 May 2011 3:27pm GMT

06 May 2011

feedDevZone - Items tagged as: Zend Framework

Zend Framework 1.11.6 and 1.10.9 Released

The Zend Framework team announces the immediate availability of Zend Framework 1.11.6, our sixth maintenance release in the 1.11 series, and a simultaneous release of 1.10.9, a security fix release. 1.11.6 includes more than 60 bug fixes and may be downloaded from the Zend Framework site .

06 May 2011 5:37pm GMT

21 Apr 2011

feedCI News

Press Release: CICON

For immediate release

Tickets On Sale For CICON2011: The First US CodeIgniter Conference

If you've been waiting for a chance to meet other CodeIgniter developers or experience great CI talks masterclasses then the wait is over! Tickets are now on sale for CodeIgniter Con 2011 US and are available via Eventbrite. They are currently going at Early-Bird rates so act quickly to get your discounted ticket before the offer runs out.

CICON2011 US is the first CodeIgniter-only conference in the United States, and will be taking place at New Work City in lower Manhattan, New York, on August 20-21 2011. Speakers including Zach Kitzmiller, Eric Barnes, Greg Aker, John Crepezzi, Dan Horrgian, and Kenny Katzgrau will be presenting and conducting masterclasses on topics for developers new to CodeIgniter and advanced CI developers looking to gain new skills and knowledge. For a developing list of what's in store, check out the programme.

For anyone still not entirely sure if they should come, check out this promo video put together by CICON2011 showcasing some of the top members of the CodeIgniter community talking about discovering and using CI, including Rick Ellis(!), Derek Allard, Pascal Kriete, Greg Aker, Phil Sturgeon, Kenny Katzgrau and Eric Barnes.

Contact:
Adam Fairholm
954-871-3112

21 Apr 2011 10:47pm GMT

07 Apr 2011

feedCI News

CodeIgniter 2.0.2 Released

An update to both CodeIgniter Reactor and CodeIgniter Core (v 2.0.1) was released today. This is a security maintenance release and is a recommended update for all sites. The security fix patches a small vulnerability in the cross site scripting filter. We also took the opportunity to iterate on some of our other filtering code. As a result, the Security library is now a core component.

Please make sure you follow the upgrade instructions. Core users can grab the 2.0.1 tag on BitBucket. For core, please follow the upgrade instructions bundled with the download.

We're working on making these small maintenance releases easier to manage. We'll have more information about that soon.

07 Apr 2011 10:33pm GMT

06 Apr 2011

feedcakebaker

Bash autocompletion for Git

One thing I often wished to have when using Git was the ability to autocomplete Git commands and branch names. As I had to learn this week from Markus Prinz' article A few of my Git tricks, tips and workflows, Git comes with an autocompletion script for the Bash shell. But to use the autocompletion, […]

06 Apr 2011 8:36am GMT

01 Apr 2011

feedcakebaker

Array iteration with JavaScript

Till recently I always used a for-loop when I had to iterate over an array in JavaScript. For example: var myArray = [1, 2, 3, 4]; for (var i = 0; i < myArray.length; i++) { console.log(myArray[i]); } However, with ECMAScript 5 the Array object itself got some methods for iteration purposes. With those methods […]

01 Apr 2011 2:51pm GMT

07 Mar 2011

feedCI News

Reactor Engineer Opening

If you follow the Reactor team, you probably already know that the venerable Ed Finkler had to resign from his position due to personal time constraints. That means that we have an opening, so if you feel that you qualify, please email the following:

  1. CodeIgniter Username
  2. Link to your site profile, e.g. http://codeigniter.com/forums/member/18457/
  3. Three of your biggest contributions to CodeIgniter (can be code, a particular bit of feedback, etc.)
  4. A brief paragraph stating why you think you should be considered.

You can also nominate someone else by emailing the above information on their behalf. In that case, please also include your CodeIgniter Username and link to your site profile along with your nominee's.

If you submitted an application the first time around, please just send a brief email indicating that you are still interested. We received a number of great applications, but we do need to ensure that the interest and time commitments have not changed.

Thanks Ed for the time you were able to give to the Reactor project, EllisLab and the community appreciate it!

07 Mar 2011 4:20pm GMT

10 Feb 2011

feedCI News

System Maintenance, Saturday, February 12

The EllisLab family of sites will undergo a maintenance window Saturday, February 12, starting at 8pm US Pacific Time (GMT -8). Downtime should be brief, but the maintenance window is scheduled to be concluded by 11pm.

During this time, if you require access to our online documentation or software downloads, I'd like to remind you that they are available at BitBucket. There you can download a zip file, fork or clone your own local copy. If you have not used BitBucket before, you can sign up for free here.

10 Feb 2011 8:09pm GMT

10 Jan 2011

feedcakebaker

2-legged vs. 3-legged OAuth

From emails I receive it seems like there is a bit of confusion about what the terms 2-legged OAuth and 3-legged OAuth mean. I hope I can clear up this confusion with this article (and don't contribute more to the confusion…). In short, they describe two different usage scenarios of OAuth involving two respectively three […]

10 Jan 2011 5:30pm GMT

08 Dec 2010

feedcakebaker

Bugfix release v2010-12-08 of the OpenID component

There is a new bugfix release of the OpenID component available: https://github.com/cakebaker/openid-component/downloads. This release fixes a bug in the isOpenIDResponse() method. So far this method only recognized OpenID responses from a GET request. But as I had to learn, there are OpenID providers (e.g. Hyves) responding with a POST request… So, if you use the […]

08 Dec 2010 3:53pm GMT

04 Dec 2010

feedcakebaker

Navigation with the “j” and “k” keys

If you are using Vim you already know the meaning of the "j" and "k" keys: they navigate one line downwards resp. upwards. Some websites like The Big Picture adopted this functionality to provide an easy way to navigate, in the case of The Big Picture to jump from photo to photo. As I wanted […]

04 Dec 2010 9:33am GMT

19 Sep 2010

feedcakebaker

Cucumber: Switching from Webrat to Capybara

My current testing tool of choice is Cucumber. Cucumber itself integrates well with other tools. One of those tools is Webrat, which allows you to access your application without a browser and to perform actions like clicking on a link or filling out forms. It works fine with Rails 2.3.x, but not with Rails 3 […]

19 Sep 2010 2:24pm GMT

19 Jul 2010

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

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

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

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

04 Mar 2010

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