Reasons to use PureMVC over Cairngorm.
#1 IMO if your gonna use Cairngorm your better off just going ahead and skipping every framework concept and just making classes with static (global) variables. That's what it feels like to me anyway lol.
#2 Makes it too easy for you to be sloppy. Accessing your model locator everywhere in your app can get ugly fast. PureMVC has a very structured but flexible way to code. Once you get comfortable with PureMVC, you will be able to get up to speed in other projects coded with PureMVC much quicker than Cairngorm coded projects.
#3 If your just starting to try to learn Cairngorm and find it confusing, it's cause you can't make sense of something that doesn't make sense!
#4 It's difficult to make a modular program in Cairngorm. Since the controller/models are singletons only one instance can exist (thus only one instance of the application). There are ways to get it to work, but you're gonna have to think outside the box for that..
PureMVC Multicore provides a framework for creating modular applications right out of the box.
#5 PureMVC utilities. The PureMVC community has added more capabilities on top of the PureMVC framework such as Undo/Redo (works great BTW), Pipes, etc.
#6 Scalability. It just gets way too messy trying to make a complex Cairngorm application. It can especially happen if you're just beginning at it or have been coding lazily. Because coding in PureMVC is much more structured, you won't be held back in the late game.
#7 PureMVC is fun to program in. Cairngorm is a nightmare :P
#8 Views can actually be reused in PureMVC. It's hard to do this in Cairngorm with all the views accessing directly to the global variables in the models. The reason PureMVC can decouple the view from the model is it has something called Mediators which take care of displaying and interaction in the views.
#9 Cairngorm is Adobe's official framework, and Adobe has been pissing me off lately with all the bugs I keep running into :P
p.s. Sorry for the long rant :P
Monday, May 11, 2009
Friday, May 1, 2009
HSlider as scrubber bar showing percent downloaded
If you are making a simple video component with VideoDisplay and want
to use the HSlider as the scrubber bar, you might run into the problem
of trying to display the % of the video that has been downloaded.
We can use HSlider's showHighlightTrack property for that. But
first we have to figure out how we can set it programmatically.
Heres how:
When you instantiate the HSliderProgress make sure to set
showHighlightTrack="true".
Also, as you get your video net_status updated just bind the
bytesLoaded/bytesTotal to the progress property.
Also one nice thing is that you can style it the way you'd normally style HSlider with Flex skinning.
to use the HSlider as the scrubber bar, you might run into the problem
of trying to display the % of the video that has been downloaded.
We can use HSlider's showHighlightTrack property for that. But
first we have to figure out how we can set it programmatically.
Heres how:
package com.flexas3.components
{
import mx.controls.HSlider;
import mx.core.Container;
import mx.core.IFlexDisplayObject;
import mx.core.mx_internal;
import mx.styles.ISimpleStyleClient;
use namespace mx_internal;
public class HSliderProgress extends HSlider
{
[Bindable]
private var _progress:Number = 0;
public function get progress():Number {
return _progress;
}
// 0-1
public function set progress(o:Number):void {
if (o < 0) o = 0;
if (o > 1) o = 1;
_progress = o;
}
/**
* @private
*/
override mx_internal function drawTrackHighlight():void
{
var track:IFlexDisplayObject = innerSlider.getChildAt(0) as IFlexDisplayObject;
var highlightTrack:IFlexDisplayObject = innerSlider.getChildAt(1) as IFlexDisplayObject;
if (track && highlightTrack)
{
var xPos:Number;
var tWidth:Number;
xPos = track.x;
// minus xPos is the right side offset
tWidth = track.width*progress;
//trace('track.width', track.width, 'tWidth', tWidth);
highlightTrack.move(xPos, track.y + 1);
highlightTrack.setActualSize(tWidth > 0 ? tWidth : 0, highlightTrack.height);
}
}
}
}
When you instantiate the HSliderProgress make sure to set
showHighlightTrack="true".
Also, as you get your video net_status updated just bind the
bytesLoaded/bytesTotal to the progress property.
Also one nice thing is that you can style it the way you'd normally style HSlider with Flex skinning.
Labels:
downloaded,
Flex,
HSlider,
percent,
progress,
scrubber,
showHighlightTrack,
VideoDisplay
Monday, January 19, 2009
Getting Zend Debugger to work with XAMPP Leopard with Zend Studio
1] Copy the Zend Debugger PHP Extension from Zend Studio to your webserver's PHP extension dir.
2] edit XAMPP's php.ini to include the extension (#sudo mate /Applications/xampp/etc/php.ini)
#cp '/Applications/Zend/Zend Studio for Eclipse - 6.1.0/plugins/org.zend.php.debug.debugger.macosx_5.2.14.v20080602/resources/php5/ZendDebugger.so' /Applications/xampp/xamppfiles/lib/php/php5/extensions/no-debug-non-zts-20060613/ZendDebugger.so
2] edit XAMPP's php.ini to include the extension (#sudo mate /Applications/xampp/etc/php.ini)
;extension=ZendDebugger.so
zend_extension=/Applications/xampp/xamppfiles/lib/php/php5/extensions/no-debug-non-zts-20060613/ZendDebugger.so
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always
Sunday, January 18, 2009
Getting started with Unit Testing in your Zend Framework application Leopard
Hello, this guide is for someone who has no idea how to get started writing unit tests inside the Zend Framework application. I don't claim this to be the right way to do it, but its a step in the right direction for me.
Here are the steps I used in Leopard.
First install PEAR:
press enter, choose option 1 the prefix directory as "/usr/local" this will install the pear executable to /usr/local/bin/ and the PEAR files to /usr/local/PEAR
After the install finishes try typing:
If it doesn't work, the install failed or the $PATH variable doesn't include the /usr/local/bin dir.
Next, install PHPUnit using pear:
If it gives you any warnings about folder permissions you might have to do something like #sudo chmod 777 the temp dir or wherever its complaining about.
Once pear installs PHPUnit try running it in the commandline
It should run ok. If you get any warnings you will have to look at your php config file.
If your php.ini isnt located in /etc/php.ini you'll have to create a symbolic link as such. For example, I develop using XAMPP so my php config is in /Applications/xampp/etc/php.ini.
Next edit /etc/php.ini to make sure the include_path to PHPUnit is correct
Mine looks something like this.
include_path = ".:/php/includes:/usr/local/PEAR:/usr/local/PEAR/PHPUnit"
Try running PHPUnit again in the command line.
If it doesn't give any warnings, move on to step 2.
Your Zend project structure should look something like this:
This file is to test the IndexController.
Open the terminal and navigate to the folder where you created AllTests.php
Hope this started you off okay. Goodluck!
P.S.
Leopard's included PHP does not have PDO_Mysql included by default.
In your Zend_Config_Ini you can use mysqli instead.
Example /application/config/app.ini
Step 1] Install pear and PHPUnit
Here are the steps I used in Leopard.
First install PEAR:
#cd /tmp
#curl http://pear.php.net/go-pear > go-pear.php
#sudo php -q go-pear.php
press enter, choose option 1 the prefix directory as "/usr/local" this will install the pear executable to /usr/local/bin/ and the PEAR files to /usr/local/PEAR
After the install finishes try typing:
#pear
If it doesn't work, the install failed or the $PATH variable doesn't include the /usr/local/bin dir.
Next, install PHPUnit using pear:
#sudo pear channel-discover pear.phpunit.de
#sudo pear install phpunit/PHPUnit
If it gives you any warnings about folder permissions you might have to do something like #sudo chmod 777 the temp dir or wherever its complaining about.
Once pear installs PHPUnit try running it in the commandline
#phpunit
It should run ok. If you get any warnings you will have to look at your php config file.
If your php.ini isnt located in /etc/php.ini you'll have to create a symbolic link as such. For example, I develop using XAMPP so my php config is in /Applications/xampp/etc/php.ini.
#ln -s /Applications/xampp/etc/php.ini /etc/php.ini
Next edit /etc/php.ini to make sure the include_path to PHPUnit is correct
#sudo mate /etc/php.ini
Mine looks something like this.
include_path = ".:/php/includes:/usr/local/PEAR:/usr/local/PEAR/PHPUnit"
Try running PHPUnit again in the command line.
#phpunit
If it doesn't give any warnings, move on to step 2.
Step 2] Create the /tests and /tests/myapp folders.
Your Zend project structure should look something like this:
/myapp/
/myapp/application/
/myapp/application/controllers/
/myapp/application/models/
/myapp/application/views/
/myapp/application/views/scripts/
/myapp/library/
/myapp/library/Zend/
/myapp/tests/
/myapp/tests/myapp/
Step 3] Create the /myapp/application/controllers/IndexControllerTest.php file
This file is to test the IndexController.
class MyApp_public_IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->bootstrap = APPLICATION_PATH . '/bootstrap.php';
parent::setUp();
}
/**
* Tests FooController->barAction()
*/
public function testIndexAction()
{
// TODO Auto-generated FooControllerTest->testBarAction()
$this->dispatch ( '/index/index' );
$this->assertController ( 'index' );
$this->assertAction ( 'index' );
}
}
Step 4] Create the /myapp/tests/myapp/AllTests.php file
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application/'));
set_include_path(
APPLICATION_PATH.'/../library'
. PATH_SEPARATOR . get_include_path()
);
if (!defined('PHPUnit_MAIN_METHOD')) {
define('PHPUnit_MAIN_METHOD', 'MyApp_AllTests::main');
}
require_once('Zend/Test/PHPUnit/ControllerTestCase.php');
require_once APPLICATION_PATH . 'controllers/IndexControllerTest.php';
class MyApp_AllTests
{
public static function main()
{
PHPUnit_TextUI_TestRunner::run(self::suite());
}
public static function suite()
{
$suite = new PHPUnit_Framework_TestSuite('All Tests - MyApp');
$suite->addTestSuite('MyApp_public_IndexControllerTest');
return $suite;
}
}
if (PHPUnit_MAIN_METHOD == 'MyApp_AllTests::main')
{
MyApp_AllTests::main();
}
Step 5] Run AllTests.php
Open the terminal and navigate to the folder where you created AllTests.php
#cd XYZ/myapp/tests/myapp/
#phpunit AllTests.php
PHPUnit 3.3.10 by Sebastian Bergmann.
.
Time: 0 seconds
OK (1 test, 2 assertions)
Hope this started you off okay. Goodluck!
P.S.
Leopard's included PHP does not have PDO_Mysql included by default.
In your Zend_Config_Ini you can use mysqli instead.
Example /application/config/app.ini
[production]
webhost = www.awebsite.com
database.adapter = pdo_mysql
database.params.host = localhost
database.params.username = auser
database.params.password = apassword
database.params.dbname = adatabase
[development : production]
[testing : production]
database.params.dbname = adatabase
#leopard's compiled php doesn't have PDO_MYSQL
database.adapter = mysqli
Thursday, January 15, 2009
Setting up Trac with Plesk
If your running a Plesk server and want to get trac running with mod_python, heres what I did to get them running nicely.
This tutorial assumes you have already installed Subversion, Trac, and that running your Trac daemon was successful.
This tutorial assumes you have already installed Subversion, Trac, and that running your Trac daemon was successful.
Setup the trac subdomain in plesk:
1] Create a subdomain 'trac'
2] important: make sure python is unchecked->DISABLED (wierd i know!)
Creating a new project:#trac-admin /disk1/trac/mynewproject initenv
#mkdir /disk1/trac/mynewproject/.egg-cache
#chmod 777 /disk1/trac/mynewproject/.egg-cache
#chmod -R 777 /disk1/trac/mynewproject/db
#chmod -R 777 /disk1/trac/mynewproject/attachments
Adding a new user:#htpasswd /disk1/trac/.htpasswd mynewusername
Editing user permissions:
http://trac.edgewall.org/wiki/TracPermissions
If there are no trac admins yet, you must create one in the shell
an example:#trac-admin /disk1/trac/myproject permission remove anonymous BROWSER_VIEW
#trac-admin /disk1/trac/myproject permission add auser TRAC_ADMIN
Editing trac vhost file:
Please note the PythonPath, your may be different. try typing #find -name trac to find the folder thats similar to mine.
#emacs /var/www/vhosts/yourdomain.com/subdomains/trac/conf/vhost.conf for the new location
example:<location "/mynewproject">
# SetHandler mod_python
SetHandler python-program
# PythonDebug on
PythonPath "['/usr/lib/python2.4/site-packages/'] + sys.path"
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /disk1/trac/mynewproject
PythonOption TracUriRoot /mynewproject
</location>
<location "/mynewproject/login">
AuthType Basic
AuthName "WillInteractive Trac Server"
AuthUserFile /disk1/trac/.htpasswd
Require valid-user
</location>
Restart your apache server#service httpd restart
Next try to access it in your browser at:
http://yourdomain.com/mynewproject
Monday, January 12, 2009
Improving performance in your Flex Applications
Do you understand a day in the life of a Flex component (creation, initialization, invalidation/validation)? Have you heard of how Flex components have to run around this "elastic racetrack" (code execute/render) and how Flex components are structured to run optimally around this racetrack?
When extending a Flex component you need to know these things in order for your component to achieve the best performance possible.
Check out this Adobe Max presentation titled "Creating New Components in Flex 3" by Deepa Subramaniam (you wont be disappointed :P):
http://tv.adobe.com/#vi+f15384v1002
When extending a Flex component you need to know these things in order for your component to achieve the best performance possible.
Check out this Adobe Max presentation titled "Creating New Components in Flex 3" by Deepa Subramaniam (you wont be disappointed :P):
http://tv.adobe.com/#vi+f15384v1002
Wednesday, September 17, 2008
Setup Eclipse PDT a PHP IDE with Zend Debugger easily!
So, Dreamweaver was a good editor, but if you have a big PHP project, you will need some more firepower. I decided to install Eclipse PDT a PHP IDE with the Zend Debugger. I used WAMP as my webserver and firefox as my external browser.
I haven't used it yet but I have a feeling it will help speed up development :)
Here are the steps:
Step 1] Download and install Eclipse PDT 1.0.3 (Release) (example: C:\Program Files\PDT\)
http://download.eclipse.org/tools/pdt/downloads/release.php?release=R20080603
Step 2] Download and install WAMP or any server with PHP.
http://www.wampserver.com/en/download.php
Step 3] Download and install Zend Debugger (put the ZendDebugger.dll in your C:\wamp\php\ folder)
http://downloads.zend.com/pdt/server-debugger/
Put the dummy.php in your PHP project's webroot.
Step 4] open up C:\wamp\php\php.ini
change: implicit_flush = Off to implicit_flush = On
change: output_buffering=4096 to output_buffering = Off
at the bottom append:
[Zend]
zend_extension_ts = "C:\wamp\php\ZendDebugger.dll"
zend_debugger.allow_hosts=127.0.0.1/32, 192.168.0.0/255.255.0.0
zend_debugger.expose_remotely=always
Step 5] Install Subclipse by opening PDT goto Help->Find and Install Updates(optional)
Add remote server with URL: http://subclipse.tigris.org/
--------- Extra steps to start debugging with firefox (optional, sorry its a little rough, but these are just general steps) ------------
Step 1] Start PDT, goto Window->Preferences->General->Web Browser, select use external web browser, select firefox
Step 2] Make a new project, make a new file called index.php, right click on the file, goto run as, open run as dialog.
Step 3] Point WAMP to the new project (ex: http://helloworld)
Step 4] Go back to PDT, under PHP Web Page, create new. Under Name: write in Test index.php. Under Server Bugger use: Zend Debugger. On PHP server, make a new one pointing to http://helloworld Under file, manually type in index.php. URL should be left at auto generate.
Step 5] Goto the common tab, check Debug and Run under 'display in favorites menu'. Click apply settings.
Step 6] Edit index.php to do something like echo 'hello world';
Step 7] At the top toolbar if you click the debug arrow you should see test index.php in your favorites, click it. Firefox should popup while PDT is connected to the zend debugger.
I haven't used it yet but I have a feeling it will help speed up development :)
Here are the steps:
Step 1] Download and install Eclipse PDT 1.0.3 (Release) (example: C:\Program Files\PDT\)
http://download.eclipse.org/tools/pdt/downloads/release.php?release=R20080603
Step 2] Download and install WAMP or any server with PHP.
http://www.wampserver.com/en/download.php
Step 3] Download and install Zend Debugger (put the ZendDebugger.dll in your C:\wamp\php\ folder)
http://downloads.zend.com/pdt/server-debugger/
Put the dummy.php in your PHP project's webroot.
Step 4] open up C:\wamp\php\php.ini
change: implicit_flush = Off to implicit_flush = On
change: output_buffering=4096 to output_buffering = Off
at the bottom append:
[Zend]
zend_extension_ts = "C:\wamp\php\ZendDebugger.dll"
zend_debugger.allow_hosts=127.0.0.1/32, 192.168.0.0/255.255.0.0
zend_debugger.expose_remotely=always
Step 5] Install Subclipse by opening PDT goto Help->Find and Install Updates(optional)
Add remote server with URL: http://subclipse.tigris.org/
--------- Extra steps to start debugging with firefox (optional, sorry its a little rough, but these are just general steps) ------------
Step 1] Start PDT, goto Window->Preferences->General->Web Browser, select use external web browser, select firefox
Step 2] Make a new project, make a new file called index.php, right click on the file, goto run as, open run as dialog.
Step 3] Point WAMP to the new project (ex: http://helloworld)
Step 4] Go back to PDT, under PHP Web Page, create new. Under Name: write in Test index.php. Under Server Bugger use: Zend Debugger. On PHP server, make a new one pointing to http://helloworld Under file, manually type in index.php. URL should be left at auto generate.
Step 5] Goto the common tab, check Debug and Run under 'display in favorites menu'. Click apply settings.
Step 6] Edit index.php to do something like echo 'hello world';
Step 7] At the top toolbar if you click the debug arrow you should see test index.php in your favorites, click it. Firefox should popup while PDT is connected to the zend debugger.
Subscribe to:
Posts (Atom)