06 Feb 2012
Symfony Blog
Symfony 2.0.10 released
Symfony 2.0.10 has just been released:
-
Twig has been updated to 1.6.0 (which fixes a bug when using Assetic in the production environment);
-
Doctrine has been updated to their latest minor versions;
-
And as always, some minor bugs has been fixed.
The CHANGELOG has all the details about the changes done in this release and you can also have a look at the full diff.
If you are starting a new project, you can get the Symfony Standard Edition distribution on the download page.
If you already have a project based on the Symfony Standard Edition 2.0.x, you can easily upgrade to 2.0.10 by getting the new deps and deps.lock files.
Then, run the vendors script (it also clears your cache):
$ ./bin/vendors install
Remember that the Symfony2 Components are also available as standalone libraries. You can get them via their dedicated read-only repositories on Github (https://github.com/symfony/Finder for instance), install them via PEAR (pear install symfony2/Finder), or even install them via Composer.
06 Feb 2012 11:35am GMT
share.ez.no > All forums (topics and replies)
Multilingual object relations search problem
Hello,
I'm working on a multilingual website where I have a content class "Profile" that contains object relations attribute, so the relation will be between "Profile" and "Speciality".
Most of the objects are created in two languages, English and Arabic.
Now, in the perfect world when I try search for a "Speciality" in either languages I would get results for all profiles that have relation with that speciality. But in the real wold this doesn't happen.
What happens is I get results only for Profile objects that where created initially with the same language I'm searching in. For example:
I created the object Abdallah in Arabic, and it is related to Web Development (has two translations).
Now when I search for "Web Development" in Arabic, Abdallah shows up. But when I search for "Web Development" in English Abdallah doesn't show up.
And even worse, even I translate Abdallah into English it won't show up as well if I searched for "Web Development" in English.
Bottom line, searching for related objects returns results only from the initial language of the other related objects!
I'm using eZp 4.4 without eZFind.
Is that a normal behavior? Is there any fix or workaround for this?
Thanks in advance,
Abdallah
06 Feb 2012 10:15am GMT
Symfony Blog
A week of symfony #266 (30 January -> 5 February 2012)
This week, Symfony2 master branch committed a ton of fixes, tweaks and refactorizations related to Form and Validation components. In addition, Symfony2 official repository achieved a very remarkable milestone: 1,000 forks.
Development mailing list
Symfony2 development highlights
- a676598, 57cc531: [Form] added class LazyChoiceList
- 307f17d: [FrameworkBundle] code factorization in TraceableEventDispatcher
- 5aa5987: [Form] fixed form children are always validated in group Default
- dbd3a1b: [Security] allowed unsetting parentAcl on MutableAclInterface
- 1678a3d: [Validator] fixed Validator::validateValue() propagates empty validation root instead of the provided value
- 1dd302c: [Validator] fixed ConstraintViolationList::__toString() to not include dots in the output if the root is empty
- f904a9e: [Validator] fixed GraphWalker does not add constraint violation if error message is empty
- a103c28: [Validator] the Collection constraint adds 'missing' and 'extra' errors to the individual fields now
- de253dd: [Form] added read_only and disabled attributes
- fe85bbd: [Validator] simplified ExecutionContext::addViolation() and added ExecutionContext::addViolationAt()
- a30a679: [Validator] made ExecutionContext immutable and introduced new class GlobalExecutionContext
- 9153f0e: [Validator] deprecated ConstraintValidator methods setMessage(), getMessageTemplate() and getMessageParameters()
- 3c28ab7, c373d5b: [Routing] no prefix is required to override imported RouteCollections
- e9b4c58: [Console] enable process isolantion in shell
- 7cecb4e: [Form] added support for parent of FormBuilder
- 2e4ebe4: [Validator] renamed methods addViolationAtRelativePath() and getAbsolutePropertyPath() in ExecutionContext
- 7837f50: [Form] added FormUtil::singularify()
- 49d1464: [Form] implemented MergeCollectionListener which calls addXxx() and removeXxx() in your model if found
- 9b0245b: [Form] made prefix of adder and remover method configurable
- 9a4e22e: [Form] disallowed infinity in NumberToLocalizedStringTransformer
- d208f4e: [Form] made it possible to use models with only either addXxx() or removeXxx()
- b393774: [Form] used direct method access in MergeCollectionListener instead of Reflection to avoid problems when using class hierarchies
- 02f61ad: [Form] renamed choice and collection options 'adder_prefix' and 'remover_prefix' to 'add_method' and 'remove_method' and allowed to specify full method names
- 8dc40e4, 4847d3a: [FrameworkBundle] added config:dump-reference console command
58939f1, 9757958, 2f8ad93, fa32885: added configuration docs for TwigBundle(reverted)- bd461e2: [Form] forms now don't create empty objects anymore if they are completely empty and not required. The empty data for these forms is null
- 0753cee: [Form] fixed read_only attribute for expanded fields
- a1b6d4c: [DependencyInjection] added a failing testcase for escaped % in array parameters
- 048fc2f: [Form] fixed broken MoneyType test for JPY
- 8e13095, a7b48c0: [DependencyInjection] fixed the unescaping of parameters to handle arrays
Repository summary: 3,869 watchers (#1 in PHP, #28 overall) and 1000 forks (#1 in PHP, #11 overall).
Updated plugins
- apostrophe:
- fixed bug that caused page forms not to work
- refactored getEmbedCode() so it doesn't instantiate embed services twice and doesn't crash if the service URL is bogus and the width and height aren't known
- don't cache non-200 OK responses, it leads to SEO problems
- refactored nonrecursive version of aFiles::rmRf
- apostropheBlog:
- fix for XSS attack
They talked about us
- symfony range filter
- Silex: getting your project structure right
- Doctrine Sluggable and Transliteration
- Créez votre propre framework ... avec les composants Symfony2 (partie 10)
- Silex and MongoDB simply
- Loading Yaml Fixtures in Symfony2 and Doctrine2
- Une semaine symfonique #265 - du 23 au 29 janvier 2012
- Servicios REST usando Silex micro-framework 2/2
- Créez votre propre framework ... avec les composants Symfony2 (partie 11)
- Silex: set up your project for testing with PHPUnit
- Security - symfony 2 Tutorial - webdev's Blog
- symfonyでバッチ処理
- Symfony Plugin #1: Act As Sortable
- Dynamic embedded forms in symfony
- Reset database before phpunit tests in Symfony2
- Symfony 1.4 Doctrine 1.2 MS SQL Server
- Symfony 2 auf dem Mac einrichten
- [symfony] HTMLタグを含む文字列をエスケープせずに出力する
- Symfony2 ExtJS generator - Uigen - (1. update) - type recognition
- How to reduce admin generator query in Symfony 1.4
- Symfony build model error: Unable to return affix for unknown CreoleType
- Login en Symfony sin usar sfGuardPlugin
- Form choice filter auto sort by name
- symfonyはじめました-symfonyのインストール
- Autenticazione con Facebook in applicazioni Symfony
- Symfony including extra libraries or classes
- Symfony 2 vs Code Igniter
- PHPメンターズ -> Symfonyで複雑なバリデーションを行う方法
06 Feb 2012 9:24am GMT
share.ez.no > All forums (topics and replies)
Re: How to redirect /x to /defaultsiteaccess/x
Then you are stuck with rewrite rules IMO :)
06 Feb 2012 9:08am GMT
Re: How to redirect /x to /defaultsiteaccess/x
Thanks. In my case, I would like to show the default siteaccess so RemoveSiteAccessIfDefaultAccess is set to disabled (default value). In fact without the rewrite rules, it seems to me that ezurl operator does not always include the fre siteaccess when a page is displayed without /fre (even if RemoveSiteAccessIfDefaultAccess=disabled). So some pages were accessible from 2 URLs www.domain.org/fre/x and www.domain.org/x. I would like to avoid this and always display fre siteaccess.
Mathieu
06 Feb 2012 8:55am GMT
Django community aggregator: Community blog posts
Apple lion reinstall experience and surprise
06 Feb 2012 2:12am GMT
05 Feb 2012
Django community aggregator: Community blog posts
Configuring application settings for a Django project
I am currently working on a new project where I need application specific settings that a non-Django admin user can edit without editing a file. In this particular case, there is a "schedule" app, and I wanted to give a user the ability to add / remove timezones for that particular schedule. Besides that the setting application had meet the following requirements:
work with MongoDB or make it easy to create a backend to store settings
be...
05 Feb 2012 5:32pm GMT
03 Feb 2012
Django community aggregator: Community blog posts
Release 0.6.5
We just released LFS 0.6.5. This is a yet another bugfix release.
Changes
- Bugfix: added csrftoken for rating mails (Maciej Wi?niowski)
- Bugfix: fixed ImageWithThumbsField (Maciej Wi?niowski)
- Updated romanian translations (olimpiu)
- Updated polish translations (Maciej Wi?niowski)
News:
- We have setup a GitHub mirror of LFS.
- The docs are running on our own domain now (still hosted on RTD) and have a new layout: http://docs.getlfs.com/
Information
You can find more information and help on following locations:
03 Feb 2012 11:50pm GMT
31 Jan 2012
Planet TurboGears
Alessandro Molina: Mastering the TurboGears EasyCrudRestController
One of the key features of TurboGears2 is the great CRUD extension. Mastering the CRUD extension can really make the difference between spending hours or just a few minutes on writing a web app prototype or even a full application.
The CRUD extension provides two main features, the CrudRestController which is meant to help creating totally custom CRUDs and the EasyCrudRestController which provides a quick and easy way to create CRUD interfaces.
I'll focus on the EasyCrudRestController as it is the easiest and more productive one, moving forward to the CrudRestController is quite straightforward after you feel confident with the Easy one.
The target will be to create, in no more than 40 lines of controller code, a full featured photo gallery application with:
- Multiple Albums
- Uploads with Thumbnails Generation
- Authenticated Access, only users in group "photos" will be able to manage photos
- Contextual Management, manage photos of one album at time instead of having all photos mixed together in a generic management section
If you don't already know how to create a new TurboGears project, start by giving a look at TurboGears Installation for The Impatient guide. Just remember to add tgext.datahelpers to dependencies inside your project setup.py before running the setup.py develop command.
I'll start by providing a Gallery and Photo model. To store the images I'll use tgext.datahelpers to avoid having to manage the attachments. Using datahelpers also provides the advantage of having thumbnails support for free.
from tgext.datahelpers.fields import Attachment, AttachedImage class Gallery(DeclarativeBase): __tablename__ = 'galleries' uid = Column(Integer, autoincrement=True, primary_key=True) name = Column(Unicode(100), nullable=False) class Photo(DeclarativeBase): __tablename__ = 'photos' uid = Column(Integer, autoincrement=True, primary_key=True) name = Column(Unicode(100), nullable=False) description = Column(Unicode(2048), nullable=False) image = Column(Attachment(AttachedImage)) author_id = Column(Integer, ForeignKey(model.User.user_id))) author = relation(app_model.User, backref=backref('photos')) gallery_id = Column(Integer, ForeignKey(Gallery.uid)) gallery = relation(Gallery, backref=backref('photos', cascade='all, delete-orphan'))
Now to be able to start using our galleries we will have to provide a place where to view them and a gallery management controller to create and manage them. Viewing them should be quite straightforward, I'll just retrieve the galleries from the database inside my index method and render them. To access a single gallery I'll rely on the datahelpers SQLAEntityConverter which will retrieve the gallery for us ensuring it exists and is valid. For the management part I'll create an EasyCrudRestController mounted as /manage_galleries
from tgext.crud import EasyCrudRestController class GalleriesController(EasyCrudRestController): allow_only = predicates.in_group('photos') title = "Manage Galleries" model = model.Gallery __form_options__ = { '__hide_fields__' : ['uid'], '__omit_fields__' : ['photos'] } class RootController(BaseController): manage_galleries = GalleriesController(DBSession) @expose('photos.templates.index') def index(self, *args, **kw): galleries = DBSession.query(Gallery).order_by(Gallery.uid.desc()).all() return dict(galleries=galleries) @expose('photos.templates.gallery') @validate(dict(gallery=SQLAEntityConverter(Gallery)), error_handler=index) def gallery(self, gallery): return dict(gallery=gallery)
Logging in with an user inside the photos group and accessing the /manage_galleries url we will be able to create a new gallery and manage the existing ones.
To configure how the crud controller forms should appear and behave the __form_options__ property of the EasyCrudRestController can be used. This property relies on the same options as Sprox FormBase and customizes both the Edit and Add forms.
The next part is probably to be able to upload some photos inside our newly created galleries. To perform this we will create a new EasyCrudRestController for gallery photos management.
from tgext.crud import EasyCrudRestController from tw.forms import FileField from tw.forms.validators import FieldStorageUploadConverter from webhelpers import html class PhotosController(EasyCrudRestController): allow_only = predicates.in_group('photos') title = "Manage Photos" model = model.Photo keep_params = ['gallery'] __form_options__ = { '__hide_fields__' : ['uid', 'author', 'gallery'], '__field_widget_types__' : {'image':FileField}, '__field_validator_types__' : {'image':FieldStorageUploadConverter}, '__field_widget_args__' : {'author':{'default':lambda:request.identity['user'].user_id}} } __table_options__ = { '__omit_fields__' : ['uid', 'author_id', 'gallery_id', 'gallery'], '__xml_fields__' : ['image'], 'image': lambda filler,row: html.literal('‹img src="%s"/›' % row.image.thumb_url) }
Mounting this inside the RootController as manage_photos = PhotosController(DBSession) it will be possible to upload new photos inside any gallery. To manage the photos inside the first gallery for example we will have to access /manage_photos?gallery=1url.
Each parameter passed to the EasyCrudRestController is used to filter the entries to show inside the management table and the keep_params option provides a way to keep the filter around. This makes possible to edit the photos of only one gallery at the time instead of having all the photos mixed together. Also when a new photo is created it will be created in the current gallery.
The PhotosController got more customization than the GalleriesController, through the __field_widget_types__ and __field_validator_types__ options we force the image field to be a file field and using the __field_widget_args__ we ensure that the newly uploaded photos have the current user as the author.
__table_options__ provide a way to customize the management table. The available options are the same as the Sprox TableBase and Sprox TableFiller objects. in this case we hide the indexes of the rows on the database and the gallery itself, as we are managing the photos of a specific gallery we probably don't need to know which galleries the photos belong to. Using the __xml_fields__ we also specify that the image field provides HTML and so doesn't have to be escaped. The image entry forces the table to show the image thumbnail for the image column of the table instead of printing the AttachedImage.__repr__ as it would by default.
At first sight it might sound a bit complex, but once you start feeling confident, the CRUD extension makes possible to create entire applications in just a bunch of code lines. With just a few lines of code we created a photo gallery with multiple albums support and we can now focus on the index and gallery templates to make the gallery as pleasant as possible for our visitors.
The complete implementation of the photo gallery is available as a pluggable application on bitbucket, feel free to use it in your TurboGears projects.
31 Jan 2012 8:22pm GMT
30 Jan 2012
Symfony Blog
A week of symfony #265 (23->29 January 2012)
This week, time, logger and Doctrine collectors were tweaked and refactored. Meanwhile, the Form component fixed lots of bugs, specially with the improvements of ChoiceListInterface and its implementations.
Development mailing list
Symfony2 development highlights
- 3b260d2: refactored the collector to separate the loggers per connection
- e37783f: [DoctrineBridge] refactored the query sanitization in the collector
- 2a998e0: [FrameworkBundle] handle disabled csrf protection in the PHP templating form helper
- 3a1699a: handle disabled csrf protection in the Twig FormExtension
- 87b16e7: [Form] greatly improved ChoiceListInterface and all of its implementations (EntityChoiceList was adapted, the methods getEntities(), getEntitiesByByKeys(), getIdentifier() and getIdentifierValues() were removed/made private. Instead of the first two you can use getChoices() and getChoicesByValues(), for the latter two no replacement exists. ArrayChoiceList was replaced by SimpleChoiceList. PaddedChoiceList, MonthChoiceList and TimezoneChoiceList were removed. Their functionality was merged into DateType, TimeType and TimezoneType)
- e1fc5a5: [Form] restricted form names to specific characters to fix generation of HTML IDs and to avoid problems with property paths
- f533ef0: [Form] added ChoiceView class for passing choice-related data to the view
- 43e0db5: [DomCrawler] add support for multivalued form fields
- 399af27: [Form] implemented checks to assert that values and indices generated in choice lists match their requirements
- ed9c348: [Security] Authentication(Success|Failure)Handler can now return null
- 2dd4bf1, c3f637b: [Form] support for PATCH method in forms
- d4300b9, b879397: [WebProfilerBundle] tweak the time view
- a52c675: [WebProfilerBundle] improved the logger panel
- 7f96c8a: [HttpKernel] prevent php script execution in cached ESI pages using HttpCache
- c3f0ec7: [DoctrineBundle] made DoctrineBundle fowards compatible with Doctrine 2.2
Repository summary: 3,830 watchers (#1 in PHP, #27 overall) and 983 forks (#1 in PHP, #11 overall).
Updated plugins
- dcReloadedFormExtra:
- added a uniquenes checker widget that checks the uniqueness of a value using an Ajax callback
- sfSyncContent:
- created default parameters for sync content to be frontend dev FROM prod@production
- apostrophe:
- added an app.yml option to return email links in a different format that allows apostrophe.unobfuscateEmailInline to be called outside of the a_js spool
- all unlink() and rmdir() calls in the product now invoke aFiles::unlink() and aFiles::rmdir(), providing a capability to override these methods
- the aFiles class has been refactored into a BaseaFiles? class and an empty aFiles subclass, allowing convenient overrides
- a_button helper now accepts a single array of options as an alternative to the full list of parameters
- slideshows are allowed to have the crossfade transition now even if they have no height specified
- fixed event bug in menutoggle script and added jQuery 1.7 to the plugin
- annotation of multiple media items works again
- apostropheBlog:
- added a 'first' class to the first pager in the blog index
They talked about us
- deSymfony 2012 inicia su call for papers
- Create your own framework ... on top of the Symfony2 Components (part 11)
- Une semaine symfonique #264 - du 16 au 22 janvier 2012
- symfony forward through LAN
- Use virtuals forms with Symfony2
- Create your own framework ... on top of the Symfony2 Components (part 12)
- sqlite w środowisku developerskim w symfony i symfony2
- Load fixtures with Symfony2 and YAML files
- Onde encontrar Bundles para o Symfony2
- Notes: Symfony 2 (一)
- Nazwa.pl, PostgreSQL i Symfony
- Recording 'Last Activity' for Users in Symfony2 + FOSUserBundle
- Get started with Symfony in Amazon Cloud
- symfony schema.yml の覚書
- Symfony YAML MySQL Workbench Plugin
- Symfony 1.4 Admin Generator - Aktuelles Objekt in Partial
- Uso de sfWidgetFormJQueryDate (datepicker) en Symfony
- Symfony meets APC (Alternative PHP Cache)
- Сайт за масла - голямото предизвикателство решено със Symfony
30 Jan 2012 4:19pm GMT
DevZone
Press Release Roundup – Zend Server on OSX and phpcloud.com
Here at Zend we get a lot of good press for our products. We don't want to turn DevZone into just a feed for those that write cool things about us, but some of these are helpful if you are considering using our products. So instead of flooding your feed with individual articles about how great the products are, occasionally we'll post a roundup. That way they won't get in your way, but there are here when you need them.
30 Jan 2012 2:37pm GMT
27 Jan 2012
DevZone
Using ClamAV with Zend Framework
Want to check your file uploads with ClamAV? We've got a link to a tutorial to show you how.
27 Jan 2012 2:50pm GMT
25 Jan 2012
CI News
Pancake App
Three days ago I received my copy of Inc magazine. I was scanning through it and low and behold there is a 1/4 page blurb about Pancake App! Phil is a leader within the CodeIgniter community and a member of the Reactor Team so I was very excited to see this. After doing some research I found that we have never done a showcase on Pancake App so this entry is to make that right. Congratulations to Phil, Lee, Bruno and Adam! You guys deserve the recognition that Inc. Magazine is bringing you.
Tell us a little about Phil and Lee.
Lee Tengum is a PHP developer with a keen eye for design. I am a long-time CodeIgniter user and contributor who also likes to build distributed applications. We make a good team, as I couldn't design a website to save my life and I have plenty of experience building backend systems.
How did you two come to work together?
We've been working together on various projects for years now after we crossed paths on the CodeIgniter forums back in 2007. Lee built a very simple CMS which I ended up buying and that CMS became the great grandaddy of PyroCMS. Since then there have been a few client projects we've worked on and while Lee is a talented programmer we generally split the work as Lee on UI and myself on the main development. About a year ago Lee started building a simple internal application to collect payments from a difficult client.
After showing it to a few different people they were interested and wanted more features added in, which was when Lee decided to migrate the code to CodeIgniter and get more people involved. Throughout Pancakes lifetime it has had contributions from several prominent CodeIgniter developers and the team currently consists of Lee, Bruno De Barros, Adam Jackett and myself.
What can you tell us about the app in general?
I like to describe PancakeApp as a freelancers sidekick. PancakeApp handles the full project life-cycle from Proposal to Payment. You can draft Proposals and send them to your client, who can then accept or reject until an iteration is agreed on, all from within the app. That saves a lot of PDF emailing! With the Proposal agreed upon you can make a Project, add Milestones and Tasks and even track time against each task. You can generate invoices based on the Projects which automatically take all your tasks and tracked time into consideration, so your Project is instantly turned into line items and totals. You can of course also create invoices from scratch. The invoices are sent to the client who then has multiple options of paying based on what you've enabled in the settings, so you can take money via PayPal, Authorize.net, Bank Transfer or even accept cash; instructions will be listed on the invoice.
You might be thinking of a hosted service that sounds similar too, but PancakeApp is not a hosted service. It's a single payment to download the software and then it's all yours to go on your own server. No worries about other companies having your client details, no monthly fees, just one payment.
There is one last thing that makes PancakeApp awesome: Auto-updating. If you turn this feature on in the control panel, PancakeApp will upgrade in the background as soon as we release a new version. You don't need to keep logging into your FTP server to replace files or worry about running an upgrade script, we send out a HTTP notification to installations to grab the new files and CodeIgniter Migrations take care of the database changes.
I know you are on the Reactor team but when building something major like this you can build it using anything. So what was your major consideration in using CodeIgniter for this?
The most obvious answer would be that both me and Lee know the framework well and have been using it a long time, but the main reason is that CodeIgniter is currently the most simple and most portable framework around. While some frameworks undergo large rewrites to implement the very latest PHP 5.3 features, CodeIgniter maintains backwards compatibility for older servers meaning it is perfect for distributed applications in two ways: 1) We won't have to re-write PancakeApp in a year, it has already gone from 1.7.x to 2.1.0 without a hitch, but also 2) it will work on PHP 5.1.6 servers. While as developers we have probably all upgraded any servers in our control to PHP 5.3 and are trying to convince our clients to upgrade theirs, when you release a distributed application like PancakeApp it has to work in as many places as possible and CodeIgniter makes that incredibly simple. After-all if we used a PHP 5.3-only framework and 30% of servers are still on PHP 5.2, we've just reduced our target market by 30%!
What is next on the plate for pancake app? Any additional functionality you can tell us about?
There are some brilliant features coming for PancakeApp at the moment. We've just finished up some improvements to User Management and Permissions meaning that you can add plenty of users with varying levels of access, and there are plans to improve the existing REST API even more to allow for more integration with other services.
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?
The API is something I really wish I'd focused on more at the start. It is a well-known developer habbit to build an application or website then add the API in as more of an after-thought. While we are happy to have an API if we'd build it first and used it as a core for the system (much like Twitter does for example) then we'd have been able to make it much more powerful and have web features and API features keep up with each other without duplication of effort.
A positive lesson we learned was open, honest, personal customer support. While PancakeApp was still in its first year we had a few users on Twitter and in various forums make some complaints that certain features were not included. While some developers would take a defensive position, we admitted there was room for improvement and engaged them in conversation. Those users who complained all now have a PancakeApp license and have become some of our best evangelists. It's thanks to users like this that PancakeApp has started to spread and we even got quite a big mention in Inc Magazine this month!*
25 Jan 2012 4:56pm GMT
20 Jan 2012
CI News
ZoomShift
What can you tell us about the team that built ZoomShift?
Zoomshift is a rather young 4-person team composed of 2 developers, a designer, and a sales and content person. Our team is very tight knit and incredibly passionate about entrepreneurship and technology. We are strong believers in lean methodology and are constantly searching for new technologies to set our product apart. We all agree that we can't see ourselves doing anything else. We love what we do and have a strong passion for entrepreneurship.

What can you tell us about the site in general? What are the goals of the site and the main audience?
The idea for ZoomShift was born from experience working in the service industry. From serving tables to selling tickets we realized first-hand that employee scheduling can be an absolute nightmare for many organizations. After doing some research we were unable to find a solution that was intuitive, affordable, and truly simplified the scheduling process. In turn, we decided to build ZoomShift with the goal of making scheduling simple for both employees and managers. Our vision for ZoomShift has always been very focused with the mentality that less is more. We focus on the core functionality of online employee scheduling and purposefully leave out all of the extra features that many other solutions provide.
Currently, we have customers ranging from restaurants and hotels to volunteer organizations and small medical clinics. ZoomShift is not designed to fit one specific industry, but rather it is intended to work for any organization that needs to schedule employees hourly. We love that our customers are other small businesses and from their feedback we are constantly finding new ways to make scheduling even simpler.
What was your major consideration in using CodeIgniter?
Choosing CodeIgniter was an easy decision for us. We wanted a lightweight and flexible framework that was relatively easy to learn. From a development perspective we didn't want to be confined, and we knew that we would be needing to extend the framework quite a bit. CodeIgniter offered us a solid foundation in MVC that we could then comfortably build on top of. Also, it was incredibly important to us that the framework was well documented. The documentation was evidence to us that CodeIgniter was polished and built with care. We clearly made the right decision with CodeIgniter. It's simple, not bloated, and suitable for the pro down to the novice.
What is next on the plate for ZoomShift? Any additional functionality.
Mobile is next. We have been waiting to pull the trigger on mobile development for a few months now. We really wanted to dial in the core feature set of the application before turning our focus to mobile. Now that we have a steady customer base and have validated our core features it is time to push onto mobile. While the current application runs smoothly on mobile browsers we want to offer our customers a native application for iOS and Android.
Do you have any other information you'd like to share with the community?
Build a strong team. It is the team behind a product that makes it great, and an idea is only worth something if you have the team to execute it. Finding a group of talented individuals that share a passion is incredibly powerful. Do what you love, talk about what you love, and go where other people are doing what you love. If you immerse yourself and reach out to others you will naturally build relationships with people that think like you do. These relationships will be a source of energy and inspiration as well as an incredible source of knowledge. Do what you love and make friends.
20 Jan 2012 8:47pm GMT
11 Jan 2012
DevZone
Zend Developer Pulse
There's a new survey series worth checking out called the Zend Developer Pulse™. Zend is taking the pulse of developers regarding technology and career topics. Findings from the first survey, conducted online in Q4 2011, are available in a summary report. Zend received over 3,000 responses in 48 hours. Not bad. Take a peek at the report, and send your feedback to Zend.
11 Jan 2012 3:48pm GMT
31 Dec 2011
Planet TurboGears
Mengu Kagan: 2011 At A Glance
I can call 2011 quite a good year on my behalf however when I look at things I've done, I feel I've done much less than I could. Here is a list of what I have done in 2011.
Things I've Done in 2011
-
Executed an idea we had with my brother, http://compector.com.
-
Built the start-up above with Ruby on Rails so I became more familiar with Ruby world.
-
I have made the switch to PostgreSQL from MySQL.
-
Got a job in one of Turkey's top web sites where we deal with thousands of concurrent users...
31 Dec 2011 7:07pm GMT
21 Dec 2011
Planet TurboGears
Mengu Kagan: Subqueries With SQLAlchemy
I have been developing the new version of www.osesturkiye.com for the Turkish version of the show called "The Voice". It's already built with TurboGears, mako and SQLAlchemy. In the new version we have a gallery and many photos in it. My SQLAlchemy model is like this:
class GalleryPhoto(DeclarativeBase):
__tablename__ = 'gallery_photo'
id = Column(Integer, primary_key=True)
photo_image = Column(UnicodeText)
photo_description = Column(UnicodeText)
dateline = Column(DateTime, default=datetime.now)
The problem I have is, in the photo detail page I will display "Previous" and "Next" links. I can implement this with two ways..
21 Dec 2011 8:28pm GMT
20 Dec 2011
CI News
CPA Site Solutions touts CI
CPA Site Solutions just put out this Press Release that touts CodeIgniter. They used it to create their new email marketing system.
And I quote:
"We evaluated several frameworks for PHP web application development. Many of them could have worked, but they really tried to lock you in to their way of doing things," explains Bob Rayl, Chief Technology Officer at CPA Site Solutions. "They did not offer the flexibility we need to accomplish some of the heavily proprietary functionality we bundle into our systems."
As part of the original article they also state that CI helped cut their development time.
If you have used CodeIgniter for a project that you think deserves a mention email Marcus
20 Dec 2011 1:00pm GMT
30 Nov 2011
News
Granite Horizon to Showcase Cloud-Based Version of eZ Publish at Gilbane
Granite Horizon LLC and eZ Systems AS today announced Granite Horizon in the Cloud to be showcased at The Gilbane Conference in Boston.
30 Nov 2011 12:55pm GMT
Granite Horizon to Showcase Cloud-Based Version of eZ Publish at Gilbane
Granite Horizon LLC and eZ Systems AS today announced Granite Horizon in the Cloud to be showcased at The Gilbane Conference in Boston.
30 Nov 2011 12:55pm GMT
Granite Horizon to Showcase Cloud-Based Version of eZ Publish at Gilbane
Granite Horizon LLC and eZ Systems AS today announced Granite Horizon in the Cloud to be showcased at The Gilbane Conference in Boston.
30 Nov 2011 12:55pm GMT
22 Nov 2011
News
eZ Systems Unveils New Tools to Make Websites More Adaptable, Mobile-Ready and Easier to Search
Skien, Norway - November 22, 2011 - eZ Systems AS, the award winning Open Source Web Content Management Platform provider, today announced the release of its newest update, version 4.6, titled Annapurna. Users can benefit from enhanced extensibility, simplified content access and App readiness.
22 Nov 2011 12:43pm GMT
eZ Systems Unveils New Tools to Make Websites More Adaptable, Mobile-Ready and Easier to Search
Skien, Norway - November 22, 2011 - eZ Systems AS, the award winning Open Source Web Content Management Platform provider, today announced the release of its newest update, version 4.6, titled Annapurna. Users can benefit from enhanced extensibility, simplified content access and App readiness.
22 Nov 2011 12:43pm GMT
eZ Systems Unveils New Tools to Make Websites More Adaptable, Mobile-Ready and Easier to Search
Skien, Norway - November 22, 2011 - eZ Systems AS, the award winning Open Source Web Content Management Platform provider, today announced the release of its newest update, version 4.6, titled Annapurna. Users can benefit from enhanced extensibility, simplified content access and App readiness.
22 Nov 2011 12:43pm GMT
21 Nov 2011
News
eZ Systems Welcomes Inclusion in the 2011 Magic Quadrant for Web Content Management
Skien, Norway, November 21, 2011 - eZ Systems AS, the creator of the award winning Open Source Web Content Management Platform, eZ Publish, today announced it has been included by Gartner, Inc. in the "Magic Quadrant for Web Content Management,"* based on an evaluation of the company's ability to execute and its completeness of vision.
21 Nov 2011 2:15am GMT
eZ Systems Welcomes Inclusion in the 2011 Magic Quadrant for Web Content Management
Skien, Norway, November 21, 2011 - eZ Systems AS, the creator of the award winning Open Source Web Content Management Platform, eZ Publish, today announced it has been included by Gartner, Inc. in the "Magic Quadrant for Web Content Management,"* based on an evaluation of the company's ability to execute and its completeness of vision.
21 Nov 2011 2:15am GMT
eZ Systems Welcomes Inclusion in the 2011 Magic Quadrant for Web Content Management
Skien, Norway, November 21, 2011 - eZ Systems AS, the creator of the award winning Open Source Web Content Management Platform, eZ Publish, today announced it has been included by Gartner, Inc. in the "Magic Quadrant for Web Content Management,"* based on an evaluation of the company's ability to execute and its completeness of vision.
21 Nov 2011 2:15am GMT
09 Nov 2011
Planet 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
Planet 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
Planet 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
13 Oct 2011
share.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
16 Aug 2011
share.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
share.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
cakebaker
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
cakebaker
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
cakebaker
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
WithCake.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



