Couponic "The Bottom Layer of Programmer Hel"
Monday, February 14, 2011
I strongly suggest avoiding purchasing Couponic, Groupon clone software by Uniprogy if you plan on making ANY code changes to it in the future.
I have had the "privilege" of helping some good people set up a Groupon like site for college students. I was brought on as a Yii Framework consultant, little did I know the depths of hell I'd travel while trying to enhance/fix Couponic.
First let me talk about the monster these guys have developed and unleashed on the internet. They've essentially developed a framework on top of Yii Framework, I can only assume that Yii was far too logical with it's MVC/OOP pattern. Their framework contains objects known as "Worklets", these worklets. Worklets are a mixture of logic code and user-interface code and also include url routing changes which are obviously a complete deviation away from what makes Yii Framework so simple, scalable and easy to use.
For a laugh, I was reading their developer guide and found this gem:
Now the script will go through all of the paths below and will render the first file it will be able to find:
themes/classic/views/worklets/base/default/welcome/hello.phpThis is the top priority path: theme -> module -> controller -> worklet name -> view file.protected/modules/base/views/worklets/default/welcome/hello.phpSame as above but it will look in the module rather then theme's view path.module -> controller-> worklet name -> view file.themes/classic/views/worklets/base/default/hello.phptheme -> module -> controller -> view file.protected/modules/base/views/worklets/default/hello.phpmodule -> controller -> view file.themes/classic/views/worklets/base/welcome/hello.phptheme -> module -> worklet name -> view file.protected/modules/base/views/worklets/welcome/hello.phpmodule -> worklet name -> view file.themes/classic/views/worklets/base/hello.phptheme -> module -> view file.protected/modules/base/views/worklets/hello.phpmodule -> view file.themes/classic/views/worklets/hello.phptheme -> view file.protected/views/worklets/hello.phpapplication worklets view path -> view file.
- themes/classic/views/worklets/base/default/welcome/hello.php
This is the top priority path: theme -> module -> controller -> worklet name -> view file.- protected/modules/base/views/worklets/default/welcome/hello.php
Same as above but it will look in the module rather then theme's view path.
module -> controller-> worklet name -> view file.- themes/classic/views/worklets/base/default/hello.php
theme -> module -> controller -> view file.- protected/modules/base/views/worklets/default/hello.php
module -> controller -> view file.- themes/classic/views/worklets/base/welcome/hello.php
theme -> module -> worklet name -> view file.- protected/modules/base/views/worklets/welcome/hello.php
module -> worklet name -> view file.- themes/classic/views/worklets/base/hello.php
theme -> module -> view file.- protected/modules/base/views/worklets/hello.php
module -> view file.- themes/classic/views/worklets/hello.php
theme -> view file.
Why would ANYONE need this many levels of view render override capability???
Why did they build this complex disaster of a mess on top of Yii Framework? Surely there must be reason or at least a benefit to this Worklet framework! The short answer: No. The long answer: Yii is powerful, it provides a very scalable platform for MOST web applications, it does not need another framework on top of it.
Summary: The software was purchased for $200.00 and so far they've easly spent at least $7000.00 to get it to function properly. In other words, it would have probably been cheaper to build this software on top of Yii Framework from scratch to there exact specifications. End of story.
Lessons:
- Research your software solution extensively, there are many hidden costs to off the shelf products.
- Hire a consultant, $1000.00 spent up front may save you $10,000.00 a month in to integration/development.
- If you choose an off the shelf solution, ensure that development is ongoing and that the development team will allow you to pay for enhancements.
- If you choose a custom built solution, ensure that the developers take future enhancements in to consideration while developing the software baseline.
Bing recycles Google search results and denies it! hiybbprqag!
Friday, February 4, 2011
This is a core example of Microsoft's "innovation". Instead of progressing technology and actually competing they just hijack data that Google's finely tuned indexing code had collected.
Read more here:
http://googleblog.blogspot.com/2011/02/microsofts-bing-uses-google-search.html
Usability Updates for MSHI Front Page
My Safe Home Inspection
Sunday, January 30, 2011
We have passed some visual usability updates to the front page of My Safe Home Inspection. The updates were made to help drive people to the content that is most important to them. Most of these changes are due to methodologies learned from the MYM program.

Web Evolved!
WebEvolved
Tuesday, January 18, 2011
Here is a new project I started working on in 2009, with any luck it will be released mid 2011!
ZURB: ClueApp Free Survey
Wednesday, December 29, 2010
Found this nifty web app built by ZURB that generates a survey to help webdesigns learn about what their user-base sees when viewing their page.
Here is one I created for this website: http://www.clueapp.com/32957
To make your own, go here: http://www.clueapp.com/
Multi Email Validator for Yii Framework
Wednesday, December 22, 2010
I made a multi email validator for the Yii Framework.
Download: http://www.yiiframework.com/extension/multi-email-validator/
Usage:
/**
* ShareReportForm class.
*/
class ShareReportForm extends CFormModel
{
public $emails;
/**
* Declares the validation rules.
*/
public function rules()
{
return array(
array('emails', 'required'),
array('emails', 'MultiEmailValidator', 'delimiter'=>';', 'max'=>5),
);
}
/**
* Declares customized attribute labels.
* If not declared here, an attribute would have a label that is
* the same as its name with the first letter in upper case.
*/
public function attributeLabels()
{
return array(
'emails'=>'Email To',
);
}
}
Facebook Extension for Yii Framework
Tuesday, December 21, 2010
The extension supports rendering FBML for login and like buttons as well as more complex markup like the invite friends interface. It is simple to configure and also contains everything it needs to prevent redundant configuration all over your web application.
Configuration Example:
'facebook'=>array(
'class'=>'application.extensions.facebook.FacebookExt',
'name'=>'Facebook App!',
'clientId'=>'',
'clientSecret'=>'',
'afterLoginUrl'=>'user/facebookConnect',
'perms'=>'email,user_birthday',
),
Login Button Example:
Yii::app()->facebook->renderLoginButton();
Comments Section Example:
Yii::app()->facebook->renderComments('yellowShoes');
I'll add this extension to Yii Framework and Google Code sometime around the Holiday.
Received a Google Chrome Notebook today!
Friday, December 17, 2010
I haven't had a chance to power use it yet, but that will change very soon. My initial impression: booted in about 15 seconds, connected to the network with ease, logged in with my existing gmail account and enjoyed watching the entertaining "Getting Started" section. 
This interesting piece of technology deserves a full review, which will be coming soon. In the meantime, read more here.

Image from http://www.pclaunches.com/notebooks/google_cr48_chrome_notebook_launched.php
On a side note: I need to add a few features to this blog:
- Facebook / Google / Twitter OAuth login to allow users to use other credentials to sign in and comment.
- Some minor fixes and visual tweaks, this design is getting a little tiring.
- Search engine optimization (SEO) for entry and resume URLs are absolutely imperative.
Google has Released it's Chrome Store!
Tuesday, December 7, 2010
Google has released it's Chrome Store which allows users to browse and install apps to Chrome itself.
Yii Framework Scalability
Monday, December 6, 2010
I found an excellent real world example of how well Yii Framework scales. Check out this article written by Eric Kennedy.
http://www.yiiframework.com/forum/index.php?/topic/13717-realselfcom-15-million-monthly-visitors/
Here is an earlier PHP Framework Performance Comparison done by Qianq: http://www.yiiframework.com/performance/