views:

1748

answers:

25

I am wondering why this framework (QCodo) is almost forgotten and totally unpopular.

I've started using it a few years ago and it is the only thing that keeps me with PHP. Yeah ... its development is stuck (that's why there is now more active branch Qcubed) but it is still very good piece of software.

Its main advantages:

  • Event driven (something like asp.net) no spaghetti code
  • Powerful code generation
  • good ORM
  • follows DRY
  • very simple AJAX support
  • is fun to write

Since then I wanted to be trendy and checked Django but I cannot write normal request-based web application (it just doesn't feel right).

Don't believe? chess.com is written with it and surely there are plenty others.

My 2 questions are:

  1. Have you heard of it (PHP people)?
  2. If you are using it what is your opinion about it (show us examples of your work)

Thanks

+32  A: 

I've used PHP a lot for many years and never heard of it.

Greg
+2  A: 

I've been doing PHP work on and off for about 3 years and have never heard of it. Ask anyone to name a PHP frameworks and you're gonna get the usual suspects: Code Igniter, Cake, Zend, etc.

Guess QCodo devs need to work on their marketing a bit!

Steve Claridge
They have no marketing at all :). I think the community wasn't big enough to gain momentum.
Pawel
+4  A: 

No, I'd never heard of it.

The main ones I've heard of are Zend, CakePHP, Symfony, Code Igniter, and one or two other ones I can't recall the names of right off the bat.

R. Bemrose
A: 

Never heard of it.
Been doing PHP on and off 4+ years

+1  A: 

While I have heard of it (Qcodo... not this fork) I never looked into using it. There are tons of frameworks and only so much need. PR and mindshare are hugely important in such a situation and Qcodo never really had either. Now that I am settled on a handful I have no time, nor inclination, to start learning a new framework.

gaoshan88
+17  A: 
  1. The creator(s) of Qcodo never really promoted the framework, and thus, didn't generate a large following. I believe they created it mostly for their own use, but also offered it up to others. It is awesome if you are looking for a code-generating framework. It does have a learning curve. So to get the most use of it, it's best to spend time studying the examples.

  2. Qcodo has really had no active development for well over a year and there doesn't appear to be much chance that development will continue on Qcodo anytime soon. Qcodo appears to be dying a slow death.

  3. Qcubed, a branch of Qcodo, is under active development and has been since Nov 2008. It was created by users of Qcodo who got frustrated with the lack of Qcodo progress. If you are just getting started, start here and not with Qcodo. But use Qcodo forums to search for problems/questions you may have.

Qcodo and Qcubed are fantastic frameworks. Don't discount or underestimate them just because you've not heard of them.

geneN
Do you believe the smallness of a community can be overcome?
Angela
Qcodo is back, updated with bug fixes/improvements, and the forum is active again. The community is growing, but the level of expertise to contribute to the core remains a good bit higher than other frameworks. However, you don't have to be an expert to reap the benefits of Qcodo. The examples are up-to-date and solid. Beginners should take a look there.
geneN
+5  A: 

Qcubed and Qcodo are used by us in 3 projects and these ones are the cleanest and easiest to maintain projects we ever had! This is great stuff and easy to understand. Just go into the code you won't need much manuals.

Qcubed community is much stronger at the moment so you might want to check in Qcodo forum for your answers on basic problems, but post on the Qcubed forum.

We will continue to stay with this fantastic product and community!

Regards, tronics

http://www.twitter.com/qcodo

We've been having some challenges and not getting any response on the forums...where do you tend to hang out and read postings?
Angela
A: 

http://www.piranhamethod.com/2009/04/09/qcodoqcubed/

I have heard of it and I love it.

+1  A: 

I've been using QCodo since beta 2, and am now a core contributer of QCubed, so yes, I've heard of it.

What initially drew me to the framework was the code generation. I came from asp.net, and codesmith, and was very pleased to find a framework that gave me both the event-driven approach of asp.net and the code generation of codesmith.

I also love that it's all pure OO PHP, which means I don't have to learn a new language to develop my PHP app, and customizing any aspect of the framework that doesn't behave like I want is simple.

All of this has resulted in us being able to produce an easy to maintain and robust Learning Management System that we have sold to and host for numerous Fortune 500 companies.

There are some downsides, such as the runtime overhead of an ORM approach, but the readability and clean layout of the code results in the ability to more easily streamline other aspects of the application, and significantly reduces both development time, and the number of bugs produced.

Since QCubed is a community driven project, anyone is able to submit tickets, suggest improvements or discuss changes, it's very clear where the project is going, and very open to constructive feedback.

In defense of some of the negative things said here, I will simply point out that tickets for most of the supposed "problems" simply have never been created. And I would encourage anyone that does encounter any of them to please create a ticket for us to look at at http://qcu.be.

VexedPanda
A: 

I also came from a dotNet / Codesmith environment. When I picked up a project that wanted to translate a dotNet site to PHP I looked for a framework that could best emulate the way the original application's logic was set up. What I found was either bloated frameworks or frameworks that did not completely fulfill the projects requirements.

I accidentally found QCodo while researching using the MyGeneration tool for PHP code generation. I have not looked back since. The ease of use, ability to quickly build complex applications and the true OO approach QCodo now QCubed uses makes it the best framework for my purposes.

A: 

I've been using QCodo, ZCodo and now QCubed for quite a while now.

I actually picked it as a replacement for CakePHP, which at the time of my need, wasn't mature enough to do the things I wanted.

I'm super happy with it as a framework; it abstracts things just enough, but not too much that you lose sight of the programming.

I plan on using it for any development project I'm responsible for in the future, and I'm looking forward to QCubed being the best community maintained framework for PHP5 out there.

+7  A: 

Emulating ASP.NET or Wicket in PHP is not a good thing to do. Moreover, the code style does not look good to me.

$this->btnSavePage = new QButton($this);
$this->btnSavePage->Text = "Save";
$this->btnSavePage->Visible = false;

$this->btnCancelEdit = new QButton($this);
$this->btnCancelEdit->Text = "Cancel";
$this->btnCancelEdit->Visible = false;

Hungarian notation? OMG. I need to create a big object to create a button? Heavy weight to me.

pcdinh
+1 , I don't see the point of emulating ASP.NET in PHP. The event-driven approach has always seemed to be better for windows app , not request/response model of the web imo.
Rick J
I agree with the rest, but what's wrong with hungarian notation when used properly, as seems to have been in this case?
Pekka
Hungarian notation has a really bad reputation because of one Windows programmer who understood Charles Simonyi's use of type as literally variable type, which is not good at all when hordes of IDEs today can tell you that very quickly. He mean type as in the purpose of the variable: http://www.joelonsoftware.com/articles/Wrong.htmlHungarian notation as Joel explains it is invaluable. While it may look a little weird an unreadable, once you get used to it you can't live without it.
iconiK
+2  A: 

I've been using QCodo for 2 years and now I'm with QCubed.

This is the nice way to develop and maintain web applications, as well as, the easiest way to deploy code and test it. Remember that QCubed is now growing in acceptance and it's good for all QCodo's Community.

I think that frameworks can save a lot of development time but it many cases it's not recommended for all yours web developments.

Felix Guerrero
+4  A: 

Yes, we do use it at Chess.com and overall have been very happy with it. It can get problematic trying to figure out how/where to store all those QFormStates when you're getting well over a million pageviews a day. Every page view is its own QFormState! We solved this by putting all of them into memcache! It does have a bit of a learning curve, but once you know it, you never really need documentation any more. I actually have moved away from using QQ entirely, and use all custom sql in our ORM files. QQ is just not powerful enough to do heavily optimized queries and highly tuned queries is more important than database abstraction. After all, the site needs to function and be fast. Here is one example ORM static method in our User class to load a random user from the database (we used to use this to show a random "user spotlight" on our members page). Notice how it uses the slave database, not our master (custom built function). It also uses memcache so that the randomized user only changes every 10 minutes (600s).

public static function LoadRandom($blnAvatarRequired = true, $blnForce = false) {
  $strCacheKey = MyMemcache::QueryToKey("User->LoadRandom()");
  if($blnForce || false === ($objUser = MyMemcache::G()->GetQuery($strCacheKey))) {
    $objDatabase = QApplication::GetSlaveDbConnection();

    $DaysAgo = new QDateTime(QDateTime::Now);
    $DaysAgo->AddDays(-10); //make sure this is an active member

    // Setup the SQL Query
    $strAvatarReq = $blnAvatarRequired ? ' and u.has_avatar':'';
    $strQuery = "
      select
        u.*
      from
        user u
      where
        u.is_enabled=1 and
        u.create_date > '$DaysAgo'
        $strAvatarReq
      order by
        rand()
      limit
        1
    ";

    // Perform the Query and Instantiate the Result
    $objDbResult = $objDatabase->Query($strQuery);
    $objUser = User::InstantiateDbRow($objDbResult->GetNextRow());
    MyMemcache::G()->SetQuery($strCacheKey, $objUser, null, 600);
  }

  return $objUser;
}
Jay
Thank you for the example it is very useful how you manage so much traffic
Pawel
+2  A: 

I started to use it two years ago. The pro:

  1. code generation from the database
  2. ORM object oriented
  3. simple use of ajax

Cons:

  1. qcubed community is not so skilled to carry on a project with new good ideas
  2. the new code is not at the level of Mike Ho.
  3. bugs in the state of qforms, the forms of qcodo/qcubed.
  4. is not popular.
  5. they do not want to go ahead and use DSL and forward engineering.
  6. the forms only works with js enabled.
  7. is written in PHP.
  8. new plugin system poorly designed.

At the moment, Grails seems to be the best framework, very DSL oriented, with the possibility to use any existing Java code, good template library, possibility to use different js frameworks, built on Hibernate and Spring. With Grails is possible to write simple web app or financial application.

I hope not to use PHP in the future, but since I know Qcubed/Qcodo I will use it if it will be necessary. For newbies, I reccomend Symfony, bigger community, mre plugins, feature rich, it has a more secure future.

Updates:

  • No database migrations, no way to track database schema changes
  • No schema reflecting which tables are generated
  • It is not designed to real TDD, it is not easy to test models, controllers and views. They just added a testing framework to an unfriendly testing web framework
  • QForms still bugged and can loose status when using several controls and trigger Ajax error and blocking the application.
  • The ORM is very boring to use in the long term (lots of chatty/redundant code) and cannot be tested with a tool like Rails console, in the end it takes less time to use pure SQL and test it with phpMyAdmin.
  • Bugs in the ORM too, sometimes I get a string when I decleared the field as interger (code-generated queries).
  • There is not a front controller and a routing system and the framework is inside the public path! The plug-ins are installed in the public path too!
  • Strange directory structure not similar to other MVC frameworks and they thing that the M stands for ORM only instead of model.
  • not link_to tag like Rails or Symfony and many other tags.
  • Over complex metacontrols that are useful to waste time only.
  • Framework focused in scaffolding when in Rails it is not used a lot since most of the developers use a user centric design instead of data centric one.
  • The views are full of object->render and JS and custom controls are a pain to be customized, and instead of staying inside a template are inside a class with logic session .. everything.
  • It does not work with PHP 5.3 (not tested but should be resolved) and on Quercus.
  • Rails/Grails has ton of plugin doing everything.

I could continue but I think you get the idea. Just learn Rails or Grails for few months then let me know what you think.

I am moving my Qcodo project to Rails and I have a wonderful environment, nice community and most of the innovation in the web is around Ruby and Rails. Rails has been voted several times as best web development tool and is the only one that can substitue Java or .net

rtacconi
rtacconi is a troll from qcubed forums.
Alex
Alex, try to answer with some concrete concept, read and update your knowledge. The problem of most members of the Qcubed community is that they do not what I am talking about. Mike Ho also said that he does not know how DDD is. Read infoq, Martin Fowlser's blog, Rails, Grails, Spring Framework... amd more.What I am saying is correct, 100%, I can give references, if you want.
rtacconi
Hi, what was your experience doing the migration from Qcodo to Rails. Any tips and suggestions. I think we may need to go that way.
Angela
I will publish a long post in my blog... probably won't be 100% exhaustive but I hope helpful. You can use SQL views to refactor your table following Rails conventions or customize your model, I am using views, so I can improve older tables. I integrated the session by using PHPSESSID and querying the PHP app to get the session, then I create the session in Rails. I have the same HTML templates, so the user does not see the difference. I am using Watir for acceptance testing of PHP and Ruby (programmed in Ruby). In my post I will cover even the other testing. I will post it here.
rtacconi
I saw your blog and only saw this: "I will stop using Qcodo and Qcubed as web framework and moving my current project, a corporate intranet, to Ruby on Rails." Can you elaborate both the reasons as well as how you did it? How painful was it?
Angela
How I am moving from Qcubed to Rails: http://riccardotacconi.blogspot.com/2010/01/migration-from-php-to-rails.html
rtacconi
A: 

The quick reason is that popularity and success do not generally go with what's technically best. I'm sure any techie can come up with numerous examples. There are numerous things that can promote mediocre solutions, like marketing, first-mover advantage, being a touch better in some area that catches people's attention, being used in some high-profile application, or just plain luck.

The other reason is that what appears technically best to you may not appear so to somebody who's doing something different.

David Thornley
A: 
  1. qcubed community is not so skilled to carry on a project with new good ideas

Nonsense

  1. the new code is not at the level of Mike Ho.

Nonsense

  1. bugs in the state of qforms, the forms of qcodo/qcubed.

??

  1. is not popular.

So what

  1. they do not want to go ahead and use DSL and forward engineering.

Your point? Every framework that doesn't want to go your route is wrong? I for one would not want the suggestions you have made

  1. the forms only works with js enabled.

You have to be kidding right? If users don't have JS enabled, then they're in the stone age...

  1. is written in PHP.

No comment

  1. new plugin system poorly designed.

Based on what do you say that? I would say nonsense to this as well

Clearly there is some hidden agenda with this poster...I've also had a close look at Symphony - and I would go with QCubed over Symphony every single time. For big apps or small

KS9
that poster is just a troll from the qcubed forums - he contributed nothing, and kept whining that noone listened to him when he had nothing to offer other than "this sucks".
Alex
rtacconi
+1  A: 

I have used QCodo/QCubed for 1.5 years now. Started with my own framework, which at some point seemed messy. That's when I started looking for a more mature framework. Luckily I found QCodo. Since then I have never even considered looking for something else. The framework is so flexible and powerful, that you can do everything you want with it.

I had almost no experience with event-driven architecture. So, the beginning was somewhat hard, cause there was few documentation available. But community itself is very active and you probably get answer to your newbie questions in 1-2 days (sometimes even in hours). But currently the documentation level is way better and community is even more active :)

Nothing I can complain about. And if I have some problems/suggestions, I will try to discuss those with core developers. Whining about stuff without constructive discussion is lame imho.

I have used QCodo/QCubed for 3-4 successful projects now. The more I use it, the more I like it :) And also, I'm trying to help developing even better framework whenever I have spare time. And I can say, that I have had more than 10 people, who I have convinced to start using QC now ;) And I hope there will be many more.

QCubed totally rocks!

(how can I gain reputation? I cannot vote down, it needs 100 reputation.. I just registered here)

Ago
Where do you hang out on forums to review ans answer questions. Been having challenges with qcodo and only 2 responses. But it seems more people are around than we thought.
Angela
A: 

This Swim Log uses it mySwimLog

A: 

I think that QCubed is great and mainly because of the way you can use Ajax (you dont have to write Jscript and you dont have to use jQuery).

One very useful document: http://www.qcodo.com/demos/QcodoClassLibrary.pdf

Rhal
A: 
  1. I never heard about it.
  2. I didn't used it.
powtac
Why the -1 I answered all the questions. :)
powtac
A: 

I chose QCodo 4 years ago to develop our product. I've never regretted - now we're 3 developpers on the thing, and any non-OOP solution wouldn't work. We have installed almost 50 customers with it - on Apache, IIS, my SQL and SQLServer platforms, Linux or W2003. F The design is brilliant, code-generation is great, and it's really easy to develop, extend, and maintain. I can't read any other code now...

Yes, marketing is quite poor, and the project used to depend just on the creator (Mike Ho). All of it moved to Git recently, and marketing should be better soon. And, now Mike Ho is back !!!

FredT
A: 

I have used it in few projects involving Flash remoting but I only use the ORM in the framework as I don't really like EDP stuffs like .NET. The flow doesn't seems right at all for stateless web. It's great if the ORM can be released as a separate component.

darkredz
+1  A: 

well, thanks for the detailed info.
So I still think that ORM globally sucks and does not scale - and as said not powerful enough to do heavily optimized queries and highly tuned queries.
So what is the point about database abstraction? SQL is a standard, I want to write SQL myself for my queries ;-)
Maybe adding large scale feature will help, like memcached integration etc.
same, for JS use JQuery, do not reinvent the wheel.

Nadir
A: 

Really good framework. I'm using it now for 5 years no problem community's good and its getting a lot better right now.

Just try it !

kentpachi