15 Jan 2020

feedSymfony Blog

The Symfony 5 Book: An Update

The Fast Track Cover

As announced in October, I wrote a book about Symfony 5 at the end of last year. If you were not aware, the book is titled "Symfony5: The Fast Track". You can find more details about the content of the book and in some updates I have posted during the Kickstarter campaign.

Now that the first batch of paper books (more than 650) have been sent to the Kickstarter backers, we have been hard at work to prepare the next steps.

If you missed the Kickstarter campaign, don't worry. You will soon be able to buy the paper book online. If you want to receive a notification by email when it becomes available, fill-in the pre-order form.

One of the goals with the new book was to have some stable content that we could translate into many languages. This is happening as we speak.

The Fast Track Translations

As of today, more than 180 translators are working on translating the book in 24 languages. If you want to join the effort, send me an email and tell me which language team you want to join (it can be an existing language or a new one).

The first translation teams are almost ready. It means that the book will be soon available in French, Polish, German, and Italian. Again, fill-in the pre-order form if you want to be notified when your favorite language is available.

I am also working on open-sourcing the book. There is still a lot of work to do as we don't have translations enabled anymore on symfony.com. The idea is to have a dedicated section/website for the book. The first chapters should be available (in English and in some other languages) sometimes in February if everything goes according to the plan.


Be trained by Symfony experts - 2020-01-20 Lille - 2020-01-20 Clichy - 2020-01-20 Lille

15 Jan 2020 6:18am GMT

14 Jan 2020

feedSymfony Blog

SymfonyLive Lille 2020 is next month!

SymfonyLive Lille 2020 Conference Logo

We're super pleased to announce the second edition of the SymfonyLive Lille, a French conference about Symfony organized in the North of France.


L'an dernier s'est tenu avec succès la première édition du SymfonyLive Lille avec la communauté locale de Symfony. Nous avons le plaisir de vous retrouver le mois prochain pour la deuxième édition de la conférence. Vous faites partie de la communauté Symfony et vous êtes dans la région lilloise le 28 février ? Alors rejoignez-nous pour la conférence SymfonyLive Lille 2020 à l'Auberge Stéphane Hessel.

Le Call for Papers est ouvert jusqu'au 20 janvier 2020. Si vous n'avez pas encore soumis de proposition de sujet, il vous reste quelques jours pour proposer vos idées. Et si vous n'avez jamais pris la parole sur scène, notre programme de mentoring pour speakers est là pour vous aider. Nous pouvons vous aider à élaborer vos slides et vous faire répéter votre conférence avant le grand jour. Soumettez vos idées de sujets et devenez speaker de la conférence !

Une journée de formations pré-conférence est organisée le jeudi 27 février. Plusieurs formations sont proposées :

Retrouvez le détail des formations sur le site de la conférence.

Le nombre de places à la conférence et aux formations est limité, prenez vite votre billet avant que l'événement ne soit complet. Inscrivez-vous dès maintenant !


Be trained by Symfony experts - 2020-01-20 Lille - 2020-01-20 Clichy - 2020-01-20 Lille

14 Jan 2020 10:18am GMT

12 Jan 2020

feedSymfony Blog

A Week of Symfony #680 (6-12 January 2020)

This week, Symfony development activity went back to normal after the holiday season. The upcoming Symfony 5.1 version merged lots of new features, including a form theme for Foundation 6, an easier way to create single command console apps, a new way to configure router's request context, a new binary to lint YAML files, a hostname validator and support for the safe HTTP preference.

Symfony development highlights

This week, 67 pull requests were merged (60 in code and 7 in docs) and 47 issues were closed (40 in code and 7 in docs). Excluding merges, 37 authors made 2,032 additions and 395 deletions. See details for code and docs.

3.4 changelog:

4.3 changelog:

4.4 changelog:

5.0 changelog:

Master changelog:

Symfony Local Server

Symfony Local Server, the best way to run Symfony applications on your local machine, released its new 4.12.0, 4.12.1, 4.12.2 and 4.12.3 versions with the following changes:

Newest issues and pull requests

They talked about us

Upcoming Symfony Events

Call to Action


Be trained by Symfony experts - 2020-01-20 Lille - 2020-01-20 Clichy - 2020-01-20 Lille

12 Jan 2020 9:30am 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

10 Nov 2011

feedDjango community aggregator: Community blog posts

Radius limited searching with the ORM

A handy abstraction inside GeoDjango is the D object. It converts from more units than you knew existed into other units. (complete list) We'll be using it quite a bit as we do various queries. >>> from django.contrib.gis.measure import D … Continue reading

10 Nov 2011 12:00pm GMT

feedshare.ez.no > All forums (topics and replies)

Re: ezoe : Not found error in customTags popup

Hello Franck,

I'm sorry I have not yet encountered this problem before.

What version of eZ Pubish are you using?

What version of ezoe are you using?

If you have a set of reproducible instructions to recreate the issue using the latest community build available you may wish to consider filing an issue on http://issues.ez.no/ezoe

I hope this helps ...

Cheers,

Heath

10 Nov 2011 2:44am GMT

Re: Single login through different SiteAccess (using sub-domains)

Edit your site.ini like that :

[Session]
SessionNameHandler=custom
SessionNamePerSiteAccess=disabled

Set a common cookie_domain for all your sub domains! To do that you can edit your apache virtual_host and add that line into it :

php_value session.cookie_domain ".mysite.com"

Thanks Yannick, it was really useful, but I needed to isolate groups of siteaccess under the same domain, it's possible using site.ini / [Session] / SessionNamePrefix. You just have to set the same value for each siteaccess you want to share the session.

Example :

I have siteaccesses siteA, siteB, siteC, siteD and siteE. I want siteA, site B and siteC to share a session, and siteD and siteE to share another session.

In

[Session]
SessionNameHandler=custom
SessionNamePerSiteAccess=disabled
SessionNamePrefix=fooPrefix

In

[Session]
SessionNameHandler=custom
SessionNamePerSiteAccess=disabled
SessionNamePrefix=barPrefix

10 Nov 2011 2:14am GMT

Re: user ans rules

Hello Amine,

I took a few minutes and wrote a custom owsimpleoperator template operator function on your behalf.
When you use this you should be able to do so without touching the code.

This solution provides you a new custom template operator named 'member_of_role' which you would use like this ... (note this is a simple static example you will want to use dynamic values instead of course.

{def $userID=10
        $roleID=1
        $isMemberOfRole=$userID|member_of_role( $roleID )}
 
{if $isMemberOfRole}
 
Success! This userID {$userID} is a member of this roleID {$roleID} ...
 
{else}
 
Failure! This userID {$userID} is *not* a member of this roleID {$roleID} ...
 
{/if}

The custom 'member_of_role' operator accepts UserID and RoleID (Both required) and fetches the user, user roles, iterates over user roles and compares RoleID param till it finds a match and returns true, false if no match is found / etc.

This operator uses builtin / core eZ Publish PHP class methods for the very best in terms of reliability and stability.

share.ez.no is terrible to use when trying to paste pre formated (whitespace, no tabs, plain text) source code within the ezoe custom plugin input which has been written outside of ezoe and pasted in.

This off and on is a real problem with this site. It's no wonder so few folks post source code within the forums these days ... So I have posted my example solution source code in a pastebin instead, http://ezpublish.pastebin.ca/2093464

Please let me know how this solution works for you.

One final note: This code can also be called statically within custom PHP code without making any changes.

Here is an example PHP call of the function which powers the operator: ''

Please remember to clear cache and regenerate autoloads be for using this solution within eZ Publish!

I hope this helps ...

Cheers,

Heath

Edit: I found some extra time later in the evening and tested the operator in templates and it worked perfectly (as well as via PHP directly). Best wishes!

10 Nov 2011 1:34am GMT

09 Nov 2011

feedDjango community aggregator: Community blog posts

How Yipit Deploys Django

If you're managing your own servers, and you don't use a tool like Chef, you're crazy. It's just that simple. We've been using Chef here at Yipit for about 6 months, and when I think about provisioning a new server with our old load book, I cringe. There were some pretty high upfront costs to learning read more »

09 Nov 2011 9:27pm GMT

Coming to DC?

Coming to DC?

09 Nov 2011 8:07pm GMT

feedPlanet Zope.org

Updated MiniPlanet, now with meta-feed

My MiniPlanet Zope product has been working steady and stable for some years, when suddenly a user request came along. Would it be possible to get a feed of all the items in a miniplanet? With this update it became possible. MiniPlanet is an old-styl...

09 Nov 2011 9:41am GMT

07 Nov 2011

feedPlanet Zope.org

Welcome to Betabug Sirius

It has been quite some time that I announced_ that I'd be working as a freelancer. Lots of stuff had to be done in that time, but finally things are ready. I've founded my own little company and set up a small website: Welcome to Betabug Sirius!

07 Nov 2011 9:26am GMT

03 Nov 2011

feedPlanet Zope.org

Assertion helper for zope.testbrowser and unittest

zope.testbrowser is a valuable tool for integration tests. Historically, the Zope community used to write quite a lot of doctests, but we at gocept have found them to be rather clumsy and too often yielding neither good tests nor good documentation. That's why we don't use doctest much anymore, and prefer plain unittest.TestCases instead. However, doctest has one very nice feature, ellipsis matching, that is really helpful for checking HTML output, since you can only make assertions about the parts that interest you. For example, given this kind of page:

>>> print browser.contents
<html>
  <head>
    <title>Simple Page</title>
  </head>
  <body>
    <h1>Simple Page</h1>
  </body>
</html>

If all you're interested in is that the <h1> is rendered properly, you can simply say:

>>> print browser.contents
<...<h1>Simple Page</h1>...

We've now ported this functionality to unittest, as assertEllipsis, in gocept.testing. Some examples:

self.assertEllipsis('...bar...', 'foo bar qux')
# -> nothing happens

self.assertEllipsis('foo', 'bar')
# -> AssertionError: Differences (ndiff with -expected +actual):
     - foo
     + bar

self.assertNotEllipsis('foo', 'foo')
# -> AssertionError: "Value unexpectedly matches expression 'foo'."

To use it, inherit from gocept.testing.assertion.Ellipsis in addition to unittest.TestCase.


03 Nov 2011 7:19am 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

01 Nov 2011

feedNews

eZ Systems takes over High-Tech Gruenderfonds

Successful exit for German IT technology and now one of the services offered by eZ Systems.

With the acquisition of the German high-technology start-up, YOOCHOOSE, the Norwegian company eZ Systems AS is expanding its content management system, eZ Publish Enterprise, with one of the world's leading recommendation engines. YOOCHOOSE was founded in 2009 by Dr. Uwe Alkemper and Michael Friedmann, and convinced High-Tech Gruenderfonds to provide seed financing at an early stage. Behind YOOCHOOSE - a spin-off company from Deutsche Telekom Laboratories in Berlin - lies a high-performance, patented recommendation system, which enables companies to significantly increase their revenues on the Internet using personalized recommendations.

01 Nov 2011 1:07pm GMT

26 Oct 2011

feedNews

eZ Delivers Analytics Optimizing Customer Experience

Through the acquisition of odoscope, eZ extends the powerful eZ Publish content management platform with behavior analysis optimizing the end-customer engagement.

26 Oct 2011 6:53am GMT

23 Oct 2011

feedPlanet TurboGears

Cliff Wells: FreeSWITCH on Scientific Linux 6.1

SL 6.1 (and I assume RHEL and CentOS 6.1 as well) has introduced an issue for building and running FreeSWITCH. Apparently a lot of stuff now relies on dynamically linking to libnss3. libnss3, in turn, depends on libnspr4.so, which depends on libplds4.so. Seemingly, this should not be an issue (stuff depends on chained shared objects all over the place), but somehow it is.

What happens is first you can't compile FreeSWITCH. You get complaints about unresolved symbols in /usr/lib64/libnss3.so. The solution is to run the following commands:

yum install nspr-devel
env LIBS="-lnss3 -lnspr4 -lplds4" ./configure
make && make install

This will get you a compiled version of FreeSWITCH. However, when you actually run it, you'll find that several modules won't load at runtime (including the ODBC driver, should you happen to be using it). The solution for this is similar. Assuming you are using an init script to launch FreeSWITCH, you can add the following line to the top of /etc/init.d/freeswitch:

export LD_PRELOAD="/usr/lib64/libnss3.so /usr/lib64/libnspr4.so /usr/lib64/libplds4.so"

Voila. Everything works. Hopefully the FreeSWITCH devs get on RHEL6 support soon, but meanwhile this should get you by.

23 Oct 2011 3:27pm GMT

20 Oct 2011

feedNews

New Cockpit Available for Better Productivity

eZ Content Cockpit is the latest extension from the eZ Market that offers a cohesive website overview to facilitate better editing and maintenance of dynamic content.

20 Oct 2011 7:43am GMT

18 Oct 2011

feedPlanet TurboGears

Michael Pedersen: Request For Ideas for Hiring Pond

So, a favor to ask of people: I'm working on a web application to help people manage their resumes. As I've gotten further in, I've realized I don't have an actual todo list for it. So, since I'm making this to be used by others, I'll ask everybody here:

What would you want to see? Currently, I've added enough code to allow the program to output something very close to my online resume ( http://www.icelus.org/ ). Next up, I have the following features on my todo list already:




What else would you all want to see in order to make you want to use this?

18 Oct 2011 8:44pm GMT

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

13 Oct 2011

feedshare.ez.no > Articles and Tutorials

Building native mobile applications with the eZ Publish REST API

eZ Publish is a Web Content Management System that provides a platform to publish content via any channel. Its powerful presentation engine enables you to create websites and pages that display your content in a variety of renderings. Its powerful API directly and simply integrates your content with any web-enabled application on any device, such as the iPad, iPhone, or an Android device, without ever interfering with, or impacting the platform itself.

At the end of this tutorial, you will have learnt the basics of mobile application development for both iOS and Android platforms, consuming content from eZ Publish. CMS-side adjustments for the mobile channel will be acquired too. This cheatsheet will help you leverage the multichannel capabilities of eZ Publish, and its REST API in future projects, in a more systematic fashion.

13 Oct 2011 2:21pm 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

04 Oct 2011

feedPlanet TurboGears

Alessandro Molina: TurboGears2 Performance Improvements

As recently some effort has been involved in improving the performances of TurboGears2, I was curious to see how much things improved. As usually, the test isn't really reliable in any way and was just for fun.

All the graphs report the request/sec the application has been able to perform on my computer with only 1 concurrent client. So higher is better.

Here is the comparison between TG2.0 and TG2dev (will be 2.1.4)

I also compared various setups with different template engines on TG2dev

The comparison happened on an application similar to the quickstarted one.
Actually as there is no database involved in this application the template engine impacts a lot and so was a good benchmark for the template engines themselves.

04 Oct 2011 3:35pm 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

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

16 Aug 2011

feedshare.ez.no > Articles and Tutorials

Image Maps in ezwebin Banners

Beginners guide for learning how to use image maps in the ezwebin extension.

16 Aug 2011 12:40pm GMT

07 Jul 2011

feedshare.ez.no > Articles and Tutorials

Building mobile browser and hybrid applications with eZ Publish

eZ Publish is a Web Content Management System that provides a platform to publish content via any channel. Its powerful presentation engine enables you to create websites and pages that display your content in a variety of renderings. Its powerful API directly and simply integrates your content with any web-enabled application on any device, such as the iPad, iPhone, or an Android device, without ever interfering with, or impacting the platform itself.

At the end of this tutorial, you will have learnt the basics of mobile application development for both iOS and Android platforms, consuming content from eZ Publish. CMS-side adjustments for the mobile channel will be acquired too. This cheatsheet will help you leverage the multichannel capabilities of eZ Publish, and its REST API in future projects, in a more systematic fashion.

07 Jul 2011 1:29pm 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

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

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