<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A04GQ3w9cCp7ImA9WhJaEEs.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121</id><updated>2012-09-30T22:38:42.268-07:00</updated><category term="software installation" /><category term="logging" /><category term="flash" /><category term="pyamf" /><category term="processing" /><category term="weborb for .net" /><category term="cli" /><category term="coda" /><category term="documentation" /><category term="swc" /><category term="amf3" /><category term="3d" /><category term="adobe panini" /><category term="development" /><category term="as3" /><category term="remoteobject" /><category term="cairngormevents" /><category term="events" /><category term="api" /><category term="sparkskin" /><category term="appcelerator" /><category term="data access layer" /><category term="c#" /><category term="stackoverflow" /><category term="firefox" /><category term="swiz" /><category term="activepython" /><category term="fxg" /><category term="code assist" /><category term="git" /><category term="flash builder burrito" /><category term="nginx" /><category term="flash catalyst" /><category term="cakephp" /><category term="email" /><category term="flex tutorials" /><category term="gskinner.com" /><category term="flexevents" /><category term=".net" /><category term="weborb" /><category term="actionscript" /><category term="mediatemple" /><category term="linq" /><category term="tween library" /><category term="weborb installation" /><category term="django-amf-gateway" /><category term="rpc" /><category term="mysql" /><category term="authentication" /><category term="service declarations" /><category term="jdk" /><category term="flash framework" /><category term="robotlegs" /><category term="adobe site of the day" /><category term="command pattern" /><category term="web projects" /><category term="codeigniter" /><category term="httphandlers" /><category term="crossdomain" /><category term="textmate" /><category term="django" /><category term="Plesk" /><category term="flex" /><category term="virtual-python" /><category term="as3 design patterns" /><category term="crud" /><category term="rest" /><category term="miva" /><category term="flickr" /><category term="google code" /><category term="server admin" /><category term="passing variables into flex from swf" /><category term="mac" /><category term="swf" /><category term="design" /><category term="asp.net" /><category term="ria" /><category term="magento" /><category term="apppuncher" /><category term="asdocr" /><category term="site redesign" /><category term="dal" /><category term="jython" /><category term="error" /><category term="uri" /><category term="open-source" /><category term="ide" /><category term="examples" /><category term="mate" /><category term="asdoc" /><category term="subversion" /><category term="svn" /><category term="elixir" /><category term="flash professional" /><category term="php5" /><category term="universalmind" /><category term="PIL" /><category term="google app engine" /><category term="dv" /><category term="tweensy" /><category term="helios" /><category term="phpstorm" /><category term="design patterns" /><category term="MVC" /><category term="flash fx" /><category term="javascript" /><category term="pc vs mac" /><category term="debugging" /><category term="django-flashpolicies" /><category term="workflow" /><category term="flex 3" /><category term="ECM" /><category term="hostmysite" /><category term="eclipse builder" /><category term="web development" /><category term="cairngorm" /><category term="flex sdk 4.1" /><category term="tooltips" /><category term="tomcat" /><category term="Alfresco" /><category term="ports" /><category term="weborb deployment" /><category term="cairngorm extensions" /><category term="osx" /><category term="Fireworks" /><category term="cs4" /><category term="Catalyst" /><category term="adobe air" /><category term="servicecapture" /><category term="ephenry.com" /><category term="n-tier" /><category term="gateway" /><category term="SQLAlchemy" /><category term="python" /><category term="cms" /><category term="easy_install" /><category term="wsgi" /><category term="ecommerce" /><category term="animation" /><category term="spark" /><category term="remoting" /><category term="charles" /><category term="ms project" /><category term="http requests" /><category term="firewall" /><category term="virtualenv" /><category term="Adobe CS5" /><category term="data binding" /><category term="apache" /><category term="dry" /><category term="visual studio 2008" /><category term="mylyn" /><category term="silverlight" /><category term="php" /><category term="wdmf" /><category term="programming" /><category term="MAMP" /><category term="sqlite" /><category term="oop" /><category term="flex ecommerce" /><category term="Java" /><category term="entpoint" /><category term="django helper" /><category term="publishing" /><category term="mxml" /><category term="jquery" /><category term="galileo" /><category term="sql" /><category term="skin" /><category term="unix" /><category term="custom classes" /><category term="orm" /><category term="poetry" /><category term="flash builder 4" /><category term="symfony" /><category term="gef tools" /><category term="aptana" /><category term="netcat" /><category term="medicine" /><title>Web 2.0 Manufactory</title><subtitle type="html">Web development with Adobe Flash, Flex, PHP, Python, mySQL and beer.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://webmanufactory.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>107</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Web20Manufactory" /><feedburner:info uri="web20manufactory" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A04GQ3wyeyp7ImA9WhJaEEs.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-3778747293971052265</id><published>2012-09-30T22:38:00.002-07:00</published><updated>2012-09-30T22:38:42.293-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-30T22:38:42.293-07:00</app:edited><title /><content type="html">Had a look at several methods to add binaries to shared servers. &lt;a href="http://dren.ch/git-on-godaddy/"&gt;This one&lt;/a&gt; is the best I encountered.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/kyE-3lVx3Y4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/3778747293971052265/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=3778747293971052265" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3778747293971052265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3778747293971052265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/kyE-3lVx3Y4/had-look-at-several-methods-to-add.html" title="" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2012/09/had-look-at-several-methods-to-add.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QFRH86fyp7ImA9WhRTGEg.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-1589570573102063129</id><published>2011-11-09T08:15:00.000-08:00</published><updated>2011-11-09T08:15:15.117-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T08:15:15.117-08:00</app:edited><title>Installing Ant on Mac OS X</title><content type="html">I'm installing Ant to be available in Terminal. This way I can set up workflows to compile as3 projects with mxmlc.&lt;br /&gt;
&lt;br /&gt;
This &lt;a href="http://www.asceticmonk.com/blog/?p=388"&gt;tutorial&lt;/a&gt; is useful for getting Ant installed, provided you have sudo privileges.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/Y3dBsKgX67w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/1589570573102063129/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=1589570573102063129" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1589570573102063129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1589570573102063129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/Y3dBsKgX67w/installing-ant-on-mac-os-x.html" title="Installing Ant on Mac OS X" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/11/installing-ant-on-mac-os-x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEERHw4fyp7ImA9WhdWFUw.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-3470878011467782602</id><published>2011-09-08T13:26:00.000-07:00</published><updated>2011-09-08T13:26:45.237-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T13:26:45.237-07:00</app:edited><title>Telnet LAN Primer</title><content type="html">Dialog of a telnet session on the LAN.&lt;br /&gt;
&lt;br /&gt;
The Nodes:&lt;br /&gt;
Ubuntu Linux Box&lt;br /&gt;
MacBook OS X&lt;br /&gt;
&lt;br /&gt;
The Protocol:&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Telnet"&gt;Telnet&lt;/a&gt; from the TCP/IP suite&lt;br /&gt;
&lt;br /&gt;
Network Addresses:&lt;br /&gt;
Ubuntu on static IP 192.168.1.xx&lt;br /&gt;
MacBook on DHCP, currently assigned to 192.168.1.101&lt;br /&gt;
&lt;br /&gt;
Prerequisites:&lt;br /&gt;
Available default port of 23&lt;br /&gt;
Client must be running Telnet daemon&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Test port 23 on MacBook from Ubuntu Terminal window using nmap:&lt;/li&gt;
&lt;br /&gt;
&lt;pre&gt;jason@thecube:/etc/bind$ nmap -p 23 192.168.1.101
Starting Nmap 5.21 ( http://nmap.org ) at 2011-09-08 16:04 EDT
Nmap scan report for 192.168.1.101
Host is up (0.084s latency).
PORT   STATE  SERVICE
23/tcp closed telnet

Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds&lt;/pre&gt;
&lt;br /&gt;
Port is closed because no Telent service is running. Run Telnet service on Mac:
&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;macbook:sudo launchctl load -w /System/Library/LaunchDaemons/telnet.plist

&lt;/pre&gt;
Scan again:&lt;br /&gt;&lt;br /&gt;
&lt;pre&gt;jason@thecube~$ /etc/bind$ nmap -p 23 192.168.1.101

Starting Nmap 5.21 ( http://nmap.org ) at 2011-09-08 16:15 EDT
Nmap scan report for 192.168.1.101
Host is up (0.052s latency).
PORT   STATE SERVICE
23/tcp open  telnet

Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds&lt;/pre&gt;
&lt;br /&gt;Prerequisites met.
&lt;br /&gt;&lt;br /&gt;
&lt;li&gt;Establish telnet connection:&lt;/li&gt;
&lt;br /&gt;
&lt;pre&gt;jason@thecube:~$ telnet 192.168.1.101
Trying 192.168.1.101...
Connected to 192.168.1.101.
Escape character is '^]'.

Darwin/BSD (macbook.local) (ttys001)

login:mylogin
password:
Last login: Wed Jul 27 21:54:24 on console

&lt;/pre&gt;
&lt;li&gt;Success. Logout. End telnet connection.&lt;/li&gt;
&lt;br /&gt;
&lt;pre&gt;macbook:sudo launchctl unload -w /System/Library/LaunchDaemons/telnet.plist
&lt;/pre&gt;
&lt;/ol&gt;
A final word: Best not to use telnet as the data sent is unencrypted. Consider instead using SSH on a nonstandard port for comprehensive security.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/PWoO2ngF1Ds" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/3470878011467782602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=3470878011467782602" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3470878011467782602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3470878011467782602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/PWoO2ngF1Ds/telnet-lan-primer.html" title="Telnet LAN Primer" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/09/telnet-lan-primer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcERXsyeip7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-4607021850466790227</id><published>2011-09-07T08:46:00.000-07:00</published><updated>2011-09-08T11:20:04.592-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T11:20:04.592-07:00</app:edited><title>DNS on Ubuntu</title><content type="html">I've been configuring DNS services under Linux to streamline my intranet browsing and addressing. In particular, I did this to resolve my intranet addresses sans IP so that I can e.g. type 'production' into Chrome and it takes me to my internal 192.168.1.xx address automagically. Then I can view the http output from my Ubuntu Apache box from a laptop across the room via domain name. Sometimes it's the little conveniences that count.&lt;br /&gt;
&lt;br /&gt;
I thought I'd summarize the circumstances to do this procedure, as doing so organically takes some serious site hopping to synthesize the elements. It's not a particularly memorable mix, and it's as much for me as anyone else. A cheat sheet of sorts, and here are the broadly-defined tasks:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Select a Linux box on your system to be a dedicated DNS server (I'll call it the DNSbox)&lt;/li&gt;
&lt;li&gt;Give DNSbox a static ip&amp;nbsp;&lt;/li&gt;
&lt;li&gt;apt-get install bind9 DNS service on DNSbox&amp;nbsp;&lt;/li&gt;
&lt;li&gt;configure bind9 on DNSbox&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Divert DNS queries from router to DNSbox&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Test using CLI utilities ( dig and nslookup ) as well as the bind9 log

Hopefully that will get you through the woods.&lt;/li&gt;
&lt;/ol&gt;
Here in greater detail, the steps:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;I used a Ubuntu box set up as my intranet fileserver. As I begin to use more ultraportable and SSD devices, the fileserver will take on a greater storage role for my media and development files. The Ubuntu box is connected to my Linksys WRT45 (I'll call it the router), which in turn is served by my ISP. At the start of this procedure, the router had DNS IPs pointing to &lt;a href="http://dns.comcast.net/dns-ip-addresses2.php"&gt;Comcast's DNS servers&lt;/a&gt;: 75,75,75,75 and 75,75,76,76.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Give your Linux box a static ip. Edit /etc/network/interfaces, here is a &lt;a href="http://codesnippets.joyent.com/posts/show/319"&gt;good example&lt;/a&gt; of how to structure the interfaces text file. Chances are your network connection is eth0, so set inet static and give an address outside of the DHCP range on the router.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ubuntuforums.org/showthread.php?t=236093"&gt;Install&lt;/a&gt; bind9.&lt;/li&gt;
&lt;li&gt;Configure bind #1: Enable logging&lt;br /&gt;First thing is a real time saver, which is to enable bind to output logs.&amp;nbsp;Syntax errors in your bind configuration files will cause it to fail silently. You can monitor this in the log.&lt;br /&gt;Add the following to the bind config file at /etc/bind/named.conf:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;logging {
        channel "logfile" {
                file "/var/log/named/named.log" versions 5 size 5m;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category "default" { "logfile"; };
        category "general" { "logfile"; };
        category "update" { "logfile"; };
        category "queries" { "logfile"; };
};
&lt;/pre&gt;
&lt;br /&gt;Be sure that /var/log/named/named.log exists and is accessible by i.e. owned by bind. Test it with a quick:&lt;br /&gt;&lt;br /&gt;
&lt;pre&gt;sudo /etc/init.d/bind9 restart&lt;/pre&gt;
&lt;br /&gt;Ensure you see stopped and started dialog in the log file. Keep plugging until you have success.&lt;br /&gt;&lt;br /&gt;Configure bind #2: Add DNS forwarders.&amp;nbsp;Add this to /etc/bind/named.conf.options:&lt;br /&gt;
&lt;pre&gt;options {
...
forwarders {
*Put auxiliary DNS IP 1 here*;
...&amp;nbsp;
*Put auxiliary DNS IP n here*;
};
...
};
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Divert DNS queries from router to DNSbox #1&lt;br /&gt;Visit your router's web-based config and set DNS IP to the static IP of your DNSbox.&lt;br /&gt;&lt;br /&gt;Divert DNS queries #2&lt;br /&gt;Declare your nameserver on the DNSbox. Visit /etc/resolv.conf. I simply commented out (#) all lines and added:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;nameserver 192.168.1.xx   &amp;lt;- ( the static ip set in step 2 above )

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Test using CLI utilities dig and nslookup&lt;/li&gt;
&lt;/ol&gt;
Appendix A: Helpful Linux commands for DNS&lt;br /&gt;
&lt;pre&gt;sudo /etc/init.d/networking restart
sudo /etc/init.d/bind9 restart
nslookup
dig&lt;/pre&gt;
&lt;br /&gt;
Appendix B: Useful locations for DNS&lt;br /&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;pre&gt;# config files for use with bind&lt;/pre&gt;
&lt;pre&gt;/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options # holds forwarders among others
/var/log/named/named.log # declared in named.conf
&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;pre&gt;
&lt;/pre&gt;
&lt;pre&gt;# config files for use with networking&lt;/pre&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;/etc/resolv.conf 

&lt;/pre&gt;
Appendix C:&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/JYxjTYf-558" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/4607021850466790227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=4607021850466790227" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4607021850466790227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4607021850466790227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/JYxjTYf-558/dns-on-ubuntu.html" title="DNS on Ubuntu" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/09/dns-on-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ADSH05fSp7ImA9WhdREk8.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-8687138329101187431</id><published>2011-08-01T13:16:00.000-07:00</published><updated>2011-08-01T13:16:19.325-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T13:16:19.325-07:00</app:edited><title>File Sharing Using AFP and Netatalk</title><content type="html">Here's how things look at the Linux/Mac meet and greet:&lt;br /&gt;
&lt;br /&gt;
Mac, may I introduce Linux.&lt;br /&gt;
Apple Filing Protocol, meet &lt;a href="https://wiki.archlinux.org/index.php/Netatalk"&gt;Netatalk&lt;/a&gt;.&lt;br /&gt;
Bonjour, this is &lt;a href="http://avahi.org/"&gt;Avahi&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
They are, in short, Apple services and their open source counterparts.&lt;br /&gt;
&lt;br /&gt;
My process of setting up an &lt;a href="http://en.wikipedia.org/wiki/Home_theater_PC"&gt;HTPC&lt;/a&gt; did not involve purchasing a mini mac, rather I repurposed my trusty and well-worn Cube PC as a newly reformatted 500GB Ubuntu 11.04 file server.&lt;br /&gt;
&lt;br /&gt;
For seamless file serving, the UCube now utilizes Avahi and Netatalk to provide intersection to my LAN. When you gather crumbs of info to make your own similar setup, I recommend you use a succinct, updated guide such as &lt;a href="http://sidikahawa.blogspot.com/2010/03/setting-up-time-machine-server-on-my.html"&gt;Sidi Kahawa's&lt;/a&gt;. Though hundreds of responses exist on the &lt;a href="http://www.kremalicious.com/2008/06/ubuntu-as-mac-file-server-and-time-machine-volume/"&gt;older stalwart&lt;/a&gt; of this process, most of them have been fully addressed. It's close to turnkey at this point.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/flXDQfThJX4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/8687138329101187431/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=8687138329101187431" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8687138329101187431?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8687138329101187431?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/flXDQfThJX4/file-sharing-using-afp-and-netatalk.html" title="File Sharing Using AFP and Netatalk" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/08/file-sharing-using-afp-and-netatalk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNSHwzeSp7ImA9Wx9aGEo.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-6388247534089869909</id><published>2011-03-11T12:43:00.000-08:00</published><updated>2011-03-11T12:43:19.281-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-11T12:43:19.281-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><title>SVN on Eclipse using JavaHL</title><content type="html">If you're finding that Subversion is not working with Eclipse due to an error such as:&lt;br /&gt;
&lt;blockquote&gt;unable to load default svn client&lt;/blockquote&gt;Visit Collabnet and download the latest Universal Subversion Binaries. I searched for a direct link to get software using the Eclipse software utility, but found nothing as useful as the repository on Collabnet. Unfortunately you have to register first, but it's a quick form.&lt;br /&gt;
&lt;br /&gt;
After you install the binaries, you should be able to verify that JavaHL is working by visiting Eclipse&amp;gt;Preferences&amp;gt;Team&amp;gt;SVN, on the drop-down for SVN interface client.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/OfJyM3-3pJQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/6388247534089869909/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=6388247534089869909" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/6388247534089869909?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/6388247534089869909?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/OfJyM3-3pJQ/svn-on-eclipse-using-javahl.html" title="SVN on Eclipse using JavaHL" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/03/svn-on-eclipse-using-javahl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcHQ3ozfip7ImA9Wx9aEE0.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-5638413179534339494</id><published>2011-03-01T09:40:00.000-08:00</published><updated>2011-03-01T09:53:52.486-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-01T09:53:52.486-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="php5" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="oop" /><title>References and Cloning examples</title><content type="html">A very interesting example of the subtleties of cloning and referencing variables. Particularly noteworthy is the manner in which the references can be exploited to show ambiguous behavior.  See the following example from php.net.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.php.net/manual/en/language.oop5.cloning.php#91323"&gt;Object cloning with php5&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/AyQ_RVMwxNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/5638413179534339494/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=5638413179534339494" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/5638413179534339494?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/5638413179534339494?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/AyQ_RVMwxNI/references-and-cloning-lastfm-example.html" title="References and Cloning examples" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/03/references-and-cloning-lastfm-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDQHY8eyp7ImA9Wx9bF04.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-2034876475719822791</id><published>2011-02-25T08:51:00.000-08:00</published><updated>2011-02-26T08:26:11.873-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-26T08:26:11.873-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Pointers in Python resemble variable assignments in PHP5</title><content type="html">I encountered the PHP5 clone operator '=&amp;amp;' and a very &lt;a href="http://www.php.net/manual/en/language.references.pass.php#78799"&gt;good illustration of its use&lt;/a&gt;.  Incidentally, PHP5 variable assignment resembles the use of &lt;a href="http://docs.python.org/release/2.5.2/lib/ctypes-pointers.html"&gt;pointers in Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In short, a variable assignment in PHP is a reference to the assignment object. If an object ( $pointer = object ) is reassigned ( object = 'foo'; ), the pointer will reference the OLD object ( $pointer = object ).  If however you clone the object ( $clone =&amp;amp; object), when the object is reassigned, ( object = 'foo' ), clone will change as well ( $clone = 'foo' ).&lt;br /&gt;&lt;br /&gt;Cloning, then, is making the variable operand synonymous with its counterpart, rather than a reference to the counterpart. There are some particularly enlightening &lt;a href="http://php.net/manual/en/language.references.pass.php"&gt;examples&lt;/a&gt; of 'clone' aka '=&amp;amp;' on &lt;a href="http://php.net/"&gt;php.net&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/OfohU62AEL4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/2034876475719822791/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=2034876475719822791" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2034876475719822791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2034876475719822791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/OfohU62AEL4/pointers-in-python-is-variable.html" title="Pointers in Python resemble variable assignments in PHP5" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/pointers-in-python-is-variable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAEQno8eSp7ImA9Wx9bFkk.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-3461488782185351338</id><published>2011-02-25T06:02:00.000-08:00</published><updated>2011-02-25T07:28:23.471-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-25T07:28:23.471-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="MAMP" /><category scheme="http://www.blogger.com/atom/ns#" term="php5" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><title>Integrating MAMP PHP and Eclipse PDT for CakePHP Debugging</title><content type="html">There are a few steps necessary to get Eclipse PDT, MAMP, and a CakePHP app synchronized for debugging. Summarily, after adding the Zend Debugger to Eclipse, the php initialization file in MAMP must be modified so it can respond to Eclipse.  MAMP is not pre-configured for use with Zend Debugger, so you must edit the php.ini file for MAMP. Find the location of this file in the phpinfo tab of MAMP (near the bottom in the screenshot):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZFg0ENMmSng/TWezzAuJSII/AAAAAAAABwI/fXmJSeBQvXM/s1600/Picture+1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://3.bp.blogspot.com/-ZFg0ENMmSng/TWezzAuJSII/AAAAAAAABwI/fXmJSeBQvXM/s320/Picture+1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Open this in a text editor such as vim, and you will find this info near the bottom (italicized configuration info added at this step):&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;[xdebug]&lt;br /&gt;
;zend_extension="/Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"&lt;br /&gt;
&lt;br /&gt;
[Zend]&lt;br /&gt;
&lt;i&gt;zend_extension="/Applications/MAMP/Library/modules/zend/ZendDebugger.so"&lt;br /&gt;
zend_debugger.allow_hosts=127.0.0.1&lt;br /&gt;
; zend_debugger.expose_remotely=always&lt;/i&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Now that you have detailed the location of ZendDebugger.so, you need to actually add a copy of the file in that location.  Go ahead and put a copy of ZendDebugger.co (which either you have already downloaded into your Eclipse plugin filesystem, or you can download it as part of the Zend Debugger package ) into this directory.  Incidentally, ZendDebugger.co can be where ever you like, so long as the path in php.ini resolves to it.&lt;br /&gt;
&lt;br /&gt;
Comment out any references to zend in php.ini, other than the ones in italics above. In addition, comment out xdebug references if they are not already commented out.&lt;br /&gt;
&lt;br /&gt;
Finally, restart MAMP and look for this confirmation in your restarted phpinfo():&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TQfnBRxUoLI/TWfKic5TIII/AAAAAAAABwQ/Fpu5K-HxDJY/s1600/Picture+4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://4.bp.blogspot.com/-TQfnBRxUoLI/TWfKic5TIII/AAAAAAAABwQ/Fpu5K-HxDJY/s320/Picture+4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If debugging in Eclipse succeeds, the debugger will halt at the first instruction. Be sure to step through a few instructions (F5) to ensure it is working properly.  Here is a thoughtful and concise &lt;a href="http://jladevelopment.com/debug-php-with-eclipse-and-mamp"&gt;external resource to follow&lt;/a&gt; as a further guideline.&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;br /&gt;
Incidentally, CakePHP:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
As stated above, this guide will help you get debugging to work with CakePHP.  That part of the process entails a further step.  Once you are in Eclipse debugging a CakePHP project, you may find the debugger prompts you to resolve the location of core php files as it steps through them.  This will happen, for instance, when you debug CakePHP apps you have created by using the cake bake CLI prompt.&lt;br /&gt;
&lt;br /&gt;
To resolve these prompts, simply make sure the following conditions are met:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Your CakePHP app is in a project folder in Eclipse ( it has to be! )&lt;/li&gt;
&lt;li&gt;Your CakePHP core library is in a project folder in Eclipse. This way, the files are available to the IDE so Eclipse can step through them in a debug process.&lt;/li&gt;
&lt;/ol&gt;This is a unique requirement of CakePHP. Since you are building from an external core library and debugging involves the core, it has to be in the IDE.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/zw3O6y_fkmM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/3461488782185351338/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=3461488782185351338" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3461488782185351338?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3461488782185351338?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/zw3O6y_fkmM/integrating-mamp-php-and-eclipse-pdt.html" title="Integrating MAMP PHP and Eclipse PDT for CakePHP Debugging" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-ZFg0ENMmSng/TWezzAuJSII/AAAAAAAABwI/fXmJSeBQvXM/s72-c/Picture+1.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/integrating-mamp-php-and-eclipse-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UDSXYzeip7ImA9Wx9bFEQ.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-4571604242369711792</id><published>2011-02-23T11:57:00.000-08:00</published><updated>2011-02-23T12:01:18.882-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-23T12:01:18.882-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><title>CakePHP / Eclipse Project Integration</title><content type="html">Creating projects in Eclipse that work with CakeBake is a multi-step process consisting of:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Initiate a new PHP Project in Eclipse, e.g. php_project&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;enable JavaScript code checkbox&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Create your initial database so you can input the settings in step 3. &lt;/li&gt;
&lt;li&gt;In Terminal, run cake bake /path/to/php_project&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;add database settings if you have them&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.fischerlaender.net/web-20/mac-os-x-trouble-with-mamp-mysql"&gt;heed this info&lt;/a&gt; if you are using MAMP and the database does not resolve&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Use &lt;a href="http://www.eclipse.org/egit/"&gt;eGit&lt;/a&gt; or SVN in Eclipse to bring in any &lt;a href="http://josediazgonzalez.com/2010/08/16/cakephp-plugins-a-biblical-retelling/"&gt;plugins&lt;/a&gt; you may need&lt;/li&gt;
&lt;li&gt;Configure Run &amp;gt; External Tools &amp;gt; External Tools Configurations to run further operation such as&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;cake bake model&lt;/li&gt;
&lt;li&gt;cake bake view &lt;/li&gt;
&lt;li&gt;cake bake controller&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;You can also simply use Terminal to invoke interactive cake commands. Refresh Eclipse to see subsequent filesystem changes.&lt;/li&gt;
&lt;/ol&gt;See &lt;a href="http://webmanufactory.blogspot.com/2011/02/cakephp-cake-bake-is-awesome.html"&gt;this earlier integration post&lt;/a&gt; for more background.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/iqQVGiH-Gp4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/4571604242369711792/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=4571604242369711792" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4571604242369711792?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4571604242369711792?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/iqQVGiH-Gp4/cakephp-eclipse-project-integration.html" title="CakePHP / Eclipse Project Integration" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>3</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/cakephp-eclipse-project-integration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICRH4-fCp7ImA9Wx9bFEQ.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-7193006947483621439</id><published>2011-02-22T10:55:00.000-08:00</published><updated>2011-02-23T14:19:25.054-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-23T14:19:25.054-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="authentication" /><title>Authorization in CakePHP</title><content type="html">From the &lt;a href="http://book.cakephp.org/"&gt;Cake Book 1.3&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;User authentication systems are a common part of many web applications. In CakePHP there are several systems for authenticating users, each of which provides different options. At its core the authentication component will check to see if a user has an account with a site. If they do, the component will give access to that user to the complete site.&lt;/blockquote&gt; In short, authentication is a turnkey option in CakePHP.  All you need to do to enable it is open and edit your app controller at site_name/app/app_controller.php, adding:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var $components = array('Auth');&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This single line will implicitly password-protect your entire site. For explicit, group-or-user-based password protection, add to Auth the ACL:&lt;br /&gt;&lt;blockquote&gt;This component can be combined with the ACL (access control lists) component to create more complex levels of access within a site. The ACL Component, for example, could allow you to grant one user access to public site areas, while granting another user access to protected administrative portions of the site.&lt;br /&gt;&lt;br /&gt;CakePHP's AuthComponent can be used to create such a system easily and quickly. &lt;/blockquote&gt;Finally, don't forget to run by the fridge for a cold can of PBR, 'cause you're going to  want to celebrate the ease of this authentication framework.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/OLppLLrPQyg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/7193006947483621439/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=7193006947483621439" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7193006947483621439?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7193006947483621439?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/OLppLLrPQyg/authorization-in-cakephp.html" title="Authorization in CakePHP" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>3</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/authorization-in-cakephp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcARH0-fCp7ImA9Wx9bFE4.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-6875990690149939166</id><published>2011-02-17T12:47:00.000-08:00</published><updated>2011-02-22T20:40:45.354-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-22T20:40:45.354-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="MAMP" /><category scheme="http://www.blogger.com/atom/ns#" term="cli" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><title>CakePHP Cake Bake is Awesome</title><content type="html">After taking CakePHP's Cake Bake CLI for a spin, I find myself exclaiming aloud:&lt;br /&gt;&lt;blockquote&gt;This is good cake.&lt;/blockquote&gt;Following loads of exploration in IDEs and PHP MVC options, I have CakePHP running on Eclipse, served by MAMP Apache and MySQL, and debug enabled by PDT. Incidentally, &lt;a href="http://bakery.cakephp.org/articles/rynop/2010/11/11/howto_setup_eclipse_3_6_to_get_the_most_out_of_cakephp_1_3_development"&gt;this how-to&lt;/a&gt; on CakePHP/Eclipse integration from power-user &lt;a href="http://rynop.com/"&gt;rynop&lt;/a&gt; is invaulable.&lt;br /&gt;&lt;br /&gt;View along with me as I run through a friendly interactive prompt called Cake Bake from within the Eclipse console.  This will summarily build out the underpinnings of my entire site structure - model, view and controller - along with push-button validation (!!):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-J9igHYQQcxI/TV2HrTQjq7I/AAAAAAAABvg/4HAGwNlkvjI/s1600/Picture+18.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-J9igHYQQcxI/TV2HrTQjq7I/AAAAAAAABvg/4HAGwNlkvjI/s320/Picture+18.jpg" border="0" height="200" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Note: working CakePHP install in Eclipse. Menu is Run &amp;gt; External Tools &amp;gt; Cake bake&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-I2F0cc3kEd0/TV2IH6gD83I/AAAAAAAABvk/0tBqtLTwSH8/s1600/Picture+20.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-I2F0cc3kEd0/TV2IH6gD83I/AAAAAAAABvk/0tBqtLTwSH8/s320/Picture+20.jpg" border="0" height="200" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Says the interactive shell script:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;code&gt;---------------------------------------------------------------&lt;br /&gt;Interactive Bake Shell&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;[D]atabase Configuration&lt;br /&gt;[M]odel&lt;br /&gt;[V]iew&lt;br /&gt;[C]ontroller&lt;br /&gt;[P]roject&lt;br /&gt;[F]ixture&lt;br /&gt;[T]est case&lt;br /&gt;[Q]uit&lt;br /&gt;What would you like to Bake? (D/M/V/C/P/F/T/Q) &lt;/code&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;I can has cake - so simple!&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rU2pSFjTaIE/TV2IoyBEZoI/AAAAAAAABvo/4LbfrWTpz6w/s1600/Picture+21.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://3.bp.blogspot.com/-rU2pSFjTaIE/TV2IoyBEZoI/AAAAAAAABvo/4LbfrWTpz6w/s320/Picture+21.jpg" border="0" height="200" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Select validation options from the list&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-gNU3LNeJEfk/TV2I1wqTnEI/AAAAAAAABvs/A-tMFC7huXk/s1600/Picture+23.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-gNU3LNeJEfk/TV2I1wqTnEI/AAAAAAAABvs/A-tMFC7huXk/s320/Picture+23.jpg" border="0" height="200" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Look okay? *nods and pops open a beer*&lt;/div&gt;&lt;br /&gt;So good! I will detail further on this. Gotta drink my beer now...&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/ZVhTv_uoEyA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/6875990690149939166/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=6875990690149939166" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/6875990690149939166?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/6875990690149939166?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/ZVhTv_uoEyA/cakephp-cake-bake-is-awesome.html" title="CakePHP Cake Bake is Awesome" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-J9igHYQQcxI/TV2HrTQjq7I/AAAAAAAABvg/4HAGwNlkvjI/s72-c/Picture+18.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/cakephp-cake-bake-is-awesome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ENRXo9eSp7ImA9Wx9UGUg.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-9214587017277670909</id><published>2011-02-16T12:25:00.000-08:00</published><updated>2011-02-17T06:08:14.461-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-17T06:08:14.461-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ide" /><category scheme="http://www.blogger.com/atom/ns#" term="MAMP" /><category scheme="http://www.blogger.com/atom/ns#" term="phpstorm" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="textmate" /><title>Zend Debugger for PDT</title><content type="html">If you are attempting to debug in PHP, PDT is your answer.  Listed in Software Updates as the Zend Debugger Feature, it can be plugged into your Eclipse build via the following address:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://downloads.zend.com/pdt"&gt;http://downloads.zend.com/pdt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's free and it works seamlessly in conjunction with MAMP. When you run it, debug dialog is displayed in the panels in the Eclipse IDE. Objects can be halted via breakpoints for inspection.&lt;br /&gt;&lt;br /&gt;Something else that is not free but I'm evaluating in response to upward trending: &lt;a href="http://www.jetbrains.com/phpstorm/"&gt;JetBrains PHPStorm IDE&lt;/a&gt;. On initial inspection, seems to offer the same web tools as Eclipse offers.&lt;br /&gt;&lt;br /&gt;As a potential mid-weight candidate between TextMate and Eclipse, it could bust the whole thing wide open. After all, informative and easy's all I'm asking for, doesn't matter who provides it. Open source development is fine, but it tends to force platform specialization on the end user. I don't mind paying to avoid that.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/Z9Z7Otk0fto" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/9214587017277670909/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=9214587017277670909" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/9214587017277670909?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/9214587017277670909?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/Z9Z7Otk0fto/zend-debugger-for-pdt.html" title="Zend Debugger for PDT" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/zend-debugger-for-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HRX45eCp7ImA9Wx9UGEo.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-7259678086155125566</id><published>2011-02-16T09:47:00.000-08:00</published><updated>2011-02-16T09:53:54.020-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T09:53:54.020-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ide" /><category scheme="http://www.blogger.com/atom/ns#" term="aptana" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><title>Eclipse IDE with Aptana</title><content type="html">I had recently set up Aptana on Eclipse to test out HTML5/JS/CSS/PHP integrated development. Among the options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WTP&lt;/li&gt;&lt;li&gt;Aptana Stand-alone&lt;/li&gt;&lt;li&gt;Aptana Plug in&lt;/li&gt;&lt;li&gt;JSEclipse&lt;/li&gt;&lt;/ul&gt;I have tested them all, starting with Aptana.  At the time, the plug-in server they offer was down, so I moved on.  The other options were found lacking in particulars previously detailed.  Now the plug-in service is back online, so I revisited it. The verdict: In hindsight, I'm glad it was down so I could see what other options are available. Now that it is working, I can thoroughly endorse this solution.  Here's why:&lt;br /&gt;&lt;br /&gt;Full AC functionality:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-WdYiW9LnfG0/TVwLSTk2R4I/AAAAAAAABvQ/MmdXw5lKQiA/s1600/Picture+10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-WdYiW9LnfG0/TVwLSTk2R4I/AAAAAAAABvQ/MmdXw5lKQiA/s320/Picture+10.jpg" border="0" height="207" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Enable third-party js libraries:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sshQn_U9kdI/TVwLtDL7HWI/AAAAAAAABvU/p7_ltJ63VzA/s1600/Picture+11.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://4.bp.blogspot.com/-sshQn_U9kdI/TVwLtDL7HWI/AAAAAAAABvU/p7_ltJ63VzA/s320/Picture+11.jpg" border="0" height="320" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Predictive incorporation of project libraries:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7QQ9tDv7kDo/TVwMHodyEuI/AAAAAAAABvY/g9NQZ21Bamg/s1600/Picture+12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-7QQ9tDv7kDo/TVwMHodyEuI/AAAAAAAABvY/g9NQZ21Bamg/s320/Picture+12.jpg" border="0" height="200" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Rails, Python, and PHP Debug support:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7u2DtoMyF6c/TVwMwITxr2I/AAAAAAAABvc/JuhkBB5xuGQ/s1600/Picture+13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img src="http://1.bp.blogspot.com/-7u2DtoMyF6c/TVwMwITxr2I/AAAAAAAABvc/JuhkBB5xuGQ/s320/Picture+13.jpg" border="0" height="264" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I will see about PHP frameworks with unit testing next. Ah the comforts of a comprehensive IDE.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/HFRUQet7KxE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/7259678086155125566/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=7259678086155125566" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7259678086155125566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7259678086155125566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/HFRUQet7KxE/eclipse-ide-with-aptana.html" title="Eclipse IDE with Aptana" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-WdYiW9LnfG0/TVwLSTk2R4I/AAAAAAAABvQ/MmdXw5lKQiA/s72-c/Picture+10.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/eclipse-ide-with-aptana.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08FSX0_eCp7ImA9Wx9UGUg.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-4556721008705147519</id><published>2011-02-16T07:47:00.000-08:00</published><updated>2011-02-17T06:10:18.340-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-17T06:10:18.340-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ide" /><category scheme="http://www.blogger.com/atom/ns#" term="aptana" /><category scheme="http://www.blogger.com/atom/ns#" term="code assist" /><category scheme="http://www.blogger.com/atom/ns#" term="helios" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="appcelerator" /><title>Eclipse IDE Part 2</title><content type="html">To summarize the posts before this one, I have been exhaustively demoing IDEs for standards-based Web 2.0 site development.  My prerequisites, assuming these items can be met in the vendor community, are the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Content Assist for multiple languages (JS, PHP, Python)&lt;/li&gt;&lt;li&gt;functional debug perspective for PHP and Python&lt;/li&gt;&lt;li&gt;ability to add 3rd party and custom libraries to CA&lt;/li&gt;&lt;li&gt;integrated repo management&lt;/li&gt;&lt;li&gt;integrated file management&lt;/li&gt;&lt;li&gt;launch run/debug perspective from IDE&lt;/li&gt;&lt;/ul&gt;I've tested out the latest Eclipse release, Helios, which I use for AS3, under several configurations, including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eclipse Helios EE IDE, which includes the WTP and JSDT&lt;/li&gt;&lt;li&gt;Aptana plugin for Eclipse&lt;/li&gt;&lt;li&gt;JSEclipse&lt;/li&gt;&lt;/ul&gt;Collectively and individually, the results were less than ideal. At worst, I had a good editor environment with Aptana for CSS and HTML but no luck with JavaScript CA in Aptana.  I did not have success with JSEclipse.&lt;br /&gt;&lt;br /&gt;At best, Helios EE IDE provides CA only upon demand (ctrl+space), even when the preferences are set to insert CA automatically without delay.  JQuery can be integrated, there is a process &lt;a href="http://2tbsp.com/node/107"&gt;detailed here&lt;/a&gt;. I found the procedure to work though it leaves no provision to include further 3rd party JS.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/VwPj1ueVYnI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/4556721008705147519/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=4556721008705147519" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4556721008705147519?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4556721008705147519?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/VwPj1ueVYnI/appcelerator-demo.html" title="Eclipse IDE Part 2" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/appcelerator-demo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEDR3o4fip7ImA9Wx9UGEo.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-2593058352043681433</id><published>2011-02-15T12:27:00.000-08:00</published><updated>2011-02-16T09:51:16.436-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-16T09:51:16.436-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="aptana" /><category scheme="http://www.blogger.com/atom/ns#" term="coda" /><category scheme="http://www.blogger.com/atom/ns#" term="cli" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="textmate" /><category scheme="http://www.blogger.com/atom/ns#" term="appcelerator" /><title>Eclipse updates pt 1</title><content type="html">This day has allowed me to explore the capabilities of Eclipse as a standards-based SDK. Perhaps not news to those who already use it for such, but since I use Flash Builder almost exclusively for Flash-based development, this is fresh territory. This further exploration came about as the result of a recent back-end dev project where the IDE options played out as either:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TextMate&lt;/li&gt;&lt;li&gt;vi on the Terminal CLI&lt;/li&gt;&lt;li&gt;Coda&lt;/li&gt;&lt;/ul&gt;I haven't delved into Coda, though I have a good amount of exposure on the other two. Let me state for the record that I endorse the viability and value of TextMate as an IDE. Now, clarifications duly stated, I would like an IDE that provides:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;managing repositories such as svn and git&lt;/li&gt;&lt;li&gt;code lookup and completion for JavaScript, including 3rd party libraries&lt;/li&gt;&lt;li&gt;code lookup and completion for PHP&lt;/li&gt;&lt;li&gt;bracket pairing assistance that is broadside-of-a-barn obvious&lt;/li&gt;&lt;li&gt;local file, folder and directory management&lt;/li&gt;&lt;li&gt;quick access to function and property definitions (cmd-click seeking) &lt;/li&gt;&lt;li&gt;optionally, FTP management&lt;/li&gt;&lt;/ul&gt;I'd be happy to address which of these are addressed to my satisfaction in the above-listed IDEs, but for now I will summarily say none of them hit all the targets. That could be due to my own habits - perhaps blinders on my part - I would love nothing more than to be further educated on this.  Beyond that, some of the newer PHP frameworks at large (CodeIgniter, CakePHP, Symfony) boast unit testing, and I would prefer an IDE with debugging breakpoints and object inspection so I can see what fury my code hath wrought in the runtime.&lt;br /&gt;&lt;br /&gt;Thus far, I have done the following to spec up Eclipse:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Update to Eclipse Helios 3.6&lt;/li&gt;&lt;li&gt;Install PHP and JavaScript language packs for Eclipse &lt;/li&gt;&lt;li&gt;Install eGit for Helios (tested and working)&lt;/li&gt;&lt;li&gt;Install Aptana (see mild apprehension*)&lt;/li&gt;&lt;li&gt;Install Eclipse Web Tools&lt;/li&gt;&lt;/ol&gt;*Aptana bills itself as:&lt;br /&gt;&lt;blockquote&gt;a set of application development tools for Web 2.0 and ajax for use with programming languages such as JavaScript, Ruby, PHP and Python. &lt;/blockquote&gt;They had a big buzz out of the gate as a premium solution vendor to the open-source community.  By late 2009 their revenue stream was lacking to the point of significant downscaling and they have consequently reduced their support and development staff.  Their current 2.x release is bemoaned as unpredictable, buggy and meretricious, resulting in retrograde support for the deprecated 1.5 version package. Furthermore, Aptana was aquired less than a month ago by  an outfit called Appcelerator.  In short, Aptana has a legacy of step-child treatment.&lt;br /&gt;&lt;br /&gt;Thus my concern with installing and testing out Aptana. Since it is one of only two commonly-employed means of third-party javascript code completion, I went ahead with it. Installing Aptana is the first step. Following success with that, its proprietary set of plug-ins allows jQuery to work with it. I succeeded with the first part, but unfortunately their plug-in service has proven to be &lt;a href="http://twitpic.com/406ov5"&gt;currently offline&lt;/a&gt;. On to the next option: Eclipse Web Tools.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/6a_zcvGLAlI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/2593058352043681433/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=2593058352043681433" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2593058352043681433?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2593058352043681433?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/6a_zcvGLAlI/eclipse-updates-pt-1.html" title="Eclipse updates pt 1" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/eclipse-updates-pt-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMNR348cCp7ImA9Wx9UF0U.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-4872200296976581712</id><published>2011-02-15T08:00:00.000-08:00</published><updated>2011-02-15T08:31:36.078-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-15T08:31:36.078-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="flash builder 4" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="helios" /><category scheme="http://www.blogger.com/atom/ns#" term="galileo" /><category scheme="http://www.blogger.com/atom/ns#" term="unix" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="textmate" /><category scheme="http://www.blogger.com/atom/ns#" term="mylyn" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><title>Eclipse Galileo 3.5 to Helios 3.6</title><content type="html">I did Windows for a long time. And I'm still ok with it (though I stopped upgrading at XP SP2). Just the same, I'm all in with Mac for the past couple of years.  The wherefore comes down to OS X, and more specifically, Unix. Can't beat having an underlying layer of open source OS!&lt;br /&gt;&lt;br /&gt;I'm upgrading &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; today.  I had announced with &lt;a href="http://webmanufactory.blogspot.com/2009/06/eclipse-galileo-drops.html"&gt;great fanfare&lt;/a&gt; the coming of Eclipse Galileo, but Helios found me focused on other things, so I'm stepping up the SDK to 3.6 now. On the Windows/Mac front, I prefer the small install and configuration footprint of unix apps vs the windows registry.  Power Windows users may opine otherwise, but I find the modularity of apps on the mac to be quite painless.&lt;br /&gt;&lt;br /&gt;That said, I'm opting not for a clean install of Eclipse 3.6, but rather an upgrade from 3.5 using the software updates dialog. A little background, I use both &lt;a href="http://www.adobe.com/products/flashbuilder/"&gt;Flash Builder&lt;/a&gt; and Eclipse on my MacBook, the former for AS3 and Eclipse for JS, PHP, Python, basically 'everything else'.  I have added &lt;a href="http://www.eclipse.org/subversive/"&gt;Subversive SVN&lt;/a&gt; to FB and it works great, and with the possible exception of &lt;a href="http://www.eclipse.org/mylyn/"&gt;mylyn&lt;/a&gt; in the future, I plan to keep FB in quarantine. (update: broke my own rule there, I added &lt;a href="http://www.eclipse.org/egit/"&gt;eGit&lt;/a&gt; to FB and it is flawless.)&lt;br /&gt;&lt;br /&gt;This is just a safety, as I have had issues with other FB installs going off the rails when too many open-source libraries are added to the SDK. It can be a real train wreck when this happens, especially if you're facing a killer deadline. For the record, any deficiencies with Eclipse as a platform are simply the small and acceptable dark side to a robust and maverick developer community.  So I keep FB static and use Eclipse as my test lab.&lt;br /&gt;&lt;br /&gt;As for the SDK upgrade, it worked great. Here is &lt;a href="http://wiki.eclipse.org/FAQ_How_do_I_upgrade_Eclipse%3F"&gt;a simple FAQ from Eclipse&lt;/a&gt; to follow. When the dialog presents you with a list of available upgrades, choose only those listed as 3.6. Better not to upgrade too many things all at once.&lt;br /&gt;&lt;br /&gt;This is part of a larger operation which I will also post about. Namely, getting a JS/PHP/Git environment up and running within the Eclipse SDK. I've worked with &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; thus far and will sing its charms, however, I've used Eclipse long enough to love what it does, so developing in a fully Integrated DE is my goal.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/IMPxG5POAHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/4872200296976581712/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=4872200296976581712" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4872200296976581712?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/4872200296976581712?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/IMPxG5POAHc/eclipse-galileo-35-to-helios-36.html" title="Eclipse Galileo 3.5 to Helios 3.6" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/eclipse-galileo-35-to-helios-36.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAMSH44eCp7ImA9Wx9UE0g.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-3539259830746834088</id><published>2011-02-10T07:59:00.000-08:00</published><updated>2011-02-10T08:03:09.030-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-10T08:03:09.030-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="flash framework" /><category scheme="http://www.blogger.com/atom/ns#" term="php5" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="codeigniter" /><title>MVC PHP CakePHP vs Symfony</title><content type="html">Yet more to consider:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1242060/symfony-vs-cakephp"&gt;http://stackoverflow.com/questions/1242060/symfony-vs-cakephp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.symfony-project.org/"&gt;Symfony&lt;/a&gt; is another contender.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/E3yDft7PV54" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/3539259830746834088/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=3539259830746834088" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3539259830746834088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/3539259830746834088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/E3yDft7PV54/mvc-php-cakephp-vs-symfony.html" title="MVC PHP CakePHP vs Symfony" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/mvc-php-cakephp-vs-symfony.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYHQHoyeSp7ImA9Wx9UE0o.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-8800794953048037096</id><published>2011-02-10T07:44:00.000-08:00</published><updated>2011-02-10T13:08:51.491-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-10T13:08:51.491-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="stackoverflow" /><category scheme="http://www.blogger.com/atom/ns#" term="cakephp" /><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="flash framework" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>MVC PHP Frameworks Evaluated</title><content type="html">PHP frameworks are my current focus, particularly &lt;a href="http://codeigniter.com/"&gt;CodeIgniter&lt;/a&gt;. I have extensive experience with AS MVC frameworks, e.g. &lt;a href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm"&gt;Cairngorm&lt;/a&gt;, &lt;a href="http://www.robotlegs.org/"&gt;RobotLegs&lt;/a&gt;, and &lt;a href="http://mate.asfusion.com/"&gt;Mate&lt;/a&gt;. Following a recent project, my thoughts on PHP frameworks are starting to crystallize.  Here incidentally is IMO one of the best summaries on CI from the community at large, reposted courtesy of &lt;a href="http://stackoverflow.com/users/68382/action"&gt;Action&lt;/a&gt; on &lt;a href="http://stackoverflow.com/questions/548923/cakephp-vs-codeigniter"&gt;this stackoverflow post&lt;/a&gt; :&lt;br /&gt;&lt;div class="post-text"&gt;&lt;blockquote&gt;CodeIgniter is, without a doubt, the most well-documented and   approachable PHP MVC framework out there. CakePHP's documentation is   also very good, but the learning curve is slightly higher.&lt;ul&gt;&lt;li&gt;CodeIgniter's models are optional and serve no function other  than code separation. There's no integrated CRUD and its "Active Record"  class is really just an alternative SQL syntax. It also doesn't support  table associations. So, you will be building many large queries  essentially from scratch. CakePHP's models are far more advanced and  similar to those in Ruby on Rails. It supports table associations, has  integrated CRUD, and behaviors. In addition, CakePHP has command line  tools (Bake) that allow you to generate all the code for basic CRUD  operations. Tweak a few things here and there and you've got a working  prototype in minutes.&lt;/li&gt;&lt;li&gt;CodeIgniter lacks some essential libraries that are needed in  most applications (i.e. Authentication and ACL). You will need to rely  on 3rd party libraries in many of your applications. CakePHP has  integrated Auth and ACL, but both frameworks integrate with 3rd party  libraries easily.&lt;/li&gt;&lt;li&gt;Since CodeIgniter lacks much of the automation that CakePHP  brings, there are no strict conventions to follow (this can be viewed as  good or bad). This makes CodeIgniter a more flexible framework.  Furthermore, its lack of features and automation do give it an advantage  when it comes to speed. CodeIgniter is one of the fastest PHP MVC  frameworks out there. That said, the framework is rarely the bottleneck  in your in application...and you should be choosing a framework based on  productivity, not its execution speed. &lt;/li&gt;&lt;li&gt;Both frameworks have large and helpful communities. CodeIgniter  has their official forums and an IRC channel. CakePHP has a google group  and an active IRC channel. CakePHP is currently the most popular PHP  MVC framework with the largest community behind it. &lt;/li&gt;&lt;/ul&gt;In conclusion, if you want a fast, flexible, well-documented  framework, and don't mind writing extra code and relying on 3rd party  libraries, go with CodeIgniter. If you want a powerful, feature-rich  framework that does most of the heavy lifting through automation, and  you don't mind having to follow strict conventions, go with CakePHP.&lt;/blockquote&gt;&lt;/div&gt;As you can see, it is a comparison of CI with another framework, &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;, which is now on my shortlist to test out. Here is a Google Trends search of the relative trendiness of these two open-source frameworks (update: now three OS frameworks with symfony).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/trends?q=codeigniter%2C+cakephp%2C+symfony&amp;amp;ctab=0&amp;amp;geo=all&amp;amp;date=all&amp;amp;sort=0"&gt;http://www.google.com/trends?q=codeigniter%2C+cakephp%2C+symfony&amp;amp;ctab=0&amp;amp;geo=all&amp;amp;date=all&amp;amp;sort=0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CakePHP has an earlier footprint. Next, I will examine CakePHP support of php5. I'm curious to know of any more advanced, more OO and generally more hurricane-nestled-in-a-typhoon-wrapped-in-a-tornado PHP frameworks out there. I would prefer a stricter MVC pattern with a higher degree of decoupling.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/ouMp6kJCniw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/8800794953048037096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=8800794953048037096" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8800794953048037096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8800794953048037096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/ouMp6kJCniw/mvc-php-frameworks-evaluated.html" title="MVC PHP Frameworks Evaluated" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2011/02/mvc-php-frameworks-evaluated.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIERng8eip7ImA9Wx9SGUw.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-8738313006665872233</id><published>2010-12-09T09:05:00.000-08:00</published><updated>2010-12-09T10:15:07.672-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-09T10:15:07.672-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="as3" /><category scheme="http://www.blogger.com/atom/ns#" term="as3 design patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="flash framework" /><category scheme="http://www.blogger.com/atom/ns#" term="command pattern" /><category scheme="http://www.blogger.com/atom/ns#" term="design patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="flash professional" /><title>AS3 Command Pattern for Rapid Asset Development</title><content type="html">You know those little modular swf projects where you just program in some basic functionality in lieu of using the timeline? Well, I have had a few of those lately, so I made a little module manager.&lt;br /&gt;&lt;br /&gt;It's based upon a  &lt;a href="http://active.tutsplus.com/tutorials/workflow/thinking-in-commands-part-2-of-2/"&gt;useful tutorial&lt;/a&gt; I ran across and tweaked a bit. I created a google code repository to host the result, called &lt;a href="http://code.google.com/p/as3minimalcommandpattern/"&gt;as3minimalcommandpattern&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://jasonschell.com/animalfarmdemo/"&gt;this demo&lt;/a&gt; which uses only this library.  All the code from the demo is pasted below ( the demo can be found with source in the &lt;a href="http://code.google.com/p/as3minimalcommandpattern/source/browse/#svn/trunk/examples/animalFarmDemo"&gt;repository&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The demo consists of the document class and as many 'scenes' as are required for the project. A scene in this sense  is simply a way to encapsulate an intro-outro sequence. It's good for doing the monotonous work for you so you can focus on integrating advanced features.&lt;br /&gt;&lt;p&gt;Document Class:&lt;/p&gt;  &lt;pre&gt;package&lt;br /&gt;{&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.SceneManager;&lt;br /&gt;import flash.display.MovieClip;&lt;br /&gt;import scenes.*;&lt;br /&gt;&lt;br /&gt;public class Main extends MovieClip&lt;br /&gt;{&lt;br /&gt;public function Main()&lt;br /&gt;{&lt;br /&gt;  var sceneManager:SceneManager = new SceneManager();&lt;br /&gt;  sceneManager.setScene(new IntroScene(this));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;IntroScene (Setup the UI):&lt;/p&gt;  &lt;pre&gt;package scenes&lt;br /&gt;{&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.greensock.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.scenes.*;&lt;br /&gt;import com.greensock.plugins.*;&lt;br /&gt;import fl.transitions.easing.Strong;&lt;br /&gt;&lt;br /&gt;public class IntroScene extends AbstractScene implements IScene&lt;br /&gt;{&lt;br /&gt;public function IntroScene(c:Object) {&lt;br /&gt;&lt;br /&gt;  TweenPlugin.activate([AutoAlphaPlugin]);&lt;br /&gt;  super(c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createIntroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand( 0.1,&lt;br /&gt;      new TweenMaxTo  ( c.backgroundMC, 0.1, { blurFilter:{blurX:20, blurY:20} } ),&lt;br /&gt;      new TweenMaxTo  ( c.backgroundMC, 0.4, { autoAlpha:1, blurFilter:{blurX:0, blurY:0} } ),&lt;br /&gt;      new ParallelCommand( 0,&lt;br /&gt;          new TweenMaxTo( [c.uiTopBanner, c.uiBottomBanner, c.buttonPrevious, c.buttonNext], 0.2, { autoAlpha:1 } ),&lt;br /&gt;          new TweenMaxFrom( [c.uiTopBanner, c.uiBottomBanner, c.buttonPrevious, c.buttonNext], 0.3, { y:500, easing:Strong.easeOut } )&lt;br /&gt;      ),&lt;br /&gt;      new TweenMaxTo  ( [c.appTitle, c.clickForSoundText], 0.2, { autoAlpha:1 } )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function onSceneSet():void {&lt;br /&gt;  sceneManager.setScene( new Scene01(c) );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Scene01 (Intro-Outro Sheep):&lt;/p&gt;  &lt;pre&gt;package scenes&lt;br /&gt;{&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.events.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.greensock.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.utils.SetProperties;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.scenes.*;&lt;br /&gt;&lt;br /&gt;import fl.transitions.easing.Strong;&lt;br /&gt;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.*;&lt;br /&gt;&lt;br /&gt;public class Scene01 extends AbstractScene implements IScene&lt;br /&gt;{&lt;br /&gt;public function Scene01(c:Object)&lt;br /&gt;{&lt;br /&gt;  super(c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createIntroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new TweenMaxTo  ( c.sheepTitle, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo  ( c.sheepMC, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo  ( c.bodyCopyBG, 0.2, { height:231, width:470, autoAlpha:1, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo  ( c.sheepBodyCopy, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new SetProperties ( [c.buttonPrevious, c.buttonNext, c.sheepMC, c.horseMC, c.pigMC], {buttonMode:true, useHandCursor:true} ),&lt;br /&gt;      new AddEventListener( c.sheepMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new AddEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious ),&lt;br /&gt;      new AddEventListener( c.buttonNext, MouseEvent.MOUSE_DOWN, handleNext )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createOutroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new RemoveEventListener( c.sheepMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new RemoveEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious ),&lt;br /&gt;      new RemoveEventListener( c.buttonNext, MouseEvent.MOUSE_DOWN, handleNext ),&lt;br /&gt;      new TweenMaxTo  ( c.sheepBodyCopy,  0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo  ( c.bodyCopyBG, 0.1, { height:0, width:0, autoAlpha:0, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo  ( c.sheepMC,        0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo  ( c.sheepTitle,     0.1, { autoAlpha:0 } )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function onSceneSet():void&lt;br /&gt;{&lt;br /&gt;  //TODO: implement function&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* CUSTOM METHODS */&lt;br /&gt;private function handlePrevious(e:MouseEvent):void&lt;br /&gt;{&lt;br /&gt;  trace ("Already At Beginning");&lt;br /&gt;  //sceneManager.setScene( new IntroScene( c ) );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function handleNext(e:MouseEvent):void&lt;br /&gt;{&lt;br /&gt;  sceneManager.setScene( new Scene02 ( c ) );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function playNoise(e:MouseEvent):void{&lt;br /&gt;  var soundChannel:SoundChannel = new SoundChannel();&lt;br /&gt;  soundChannel = new SheepNoise().play();&lt;br /&gt;}&lt;br /&gt;/* END CUSTOM METHODS */&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Scene02 (Intro-Outro Horse):&lt;/p&gt;  &lt;pre&gt;package scenes&lt;br /&gt;{&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.events.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.greensock.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.scenes.*;&lt;br /&gt;&lt;br /&gt;import fl.transitions.easing.Strong;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.*;&lt;br /&gt;&lt;br /&gt;public class Scene02 extends AbstractScene implements IScene&lt;br /&gt;{&lt;br /&gt;public function Scene02(c:Object)&lt;br /&gt;{&lt;br /&gt;  super(c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createIntroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new TweenMaxTo( c.horseTitle, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo( c.horseMC, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo  ( c.bodyCopyBG, 0.2, { height:231, width:470, autoAlpha:1, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo( c.horseBodyCopy, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new AddEventListener( c.horseMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new AddEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious ),&lt;br /&gt;      new AddEventListener( c.buttonNext, MouseEvent.MOUSE_DOWN, handleNext )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createOutroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new RemoveEventListener( c.horseMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new RemoveEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious ),&lt;br /&gt;      new RemoveEventListener( c.buttonNext, MouseEvent.MOUSE_DOWN, handleNext ),&lt;br /&gt;      new TweenMaxTo  ( c.horseBodyCopy, 0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo  ( c.bodyCopyBG, 0.1, { height:0, width:0, autoAlpha:0, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo  ( c.horseMC, 0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo  ( c.horseTitle, 0.1, { autoAlpha:0 } )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function onSceneSet():void&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* CUSTOM METHODS */&lt;br /&gt;private function handlePrevious(e:MouseEvent):void&lt;br /&gt;{&lt;br /&gt;  sceneManager.setScene( new Scene01 ( c ) );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function handleNext(e:MouseEvent):void&lt;br /&gt;{&lt;br /&gt;  sceneManager.setScene( new Scene03 ( c ) );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function playNoise(e:MouseEvent):void{&lt;br /&gt;  var soundChannel:SoundChannel = new SoundChannel();&lt;br /&gt;  soundChannel = new HorseNoise().play();&lt;br /&gt;}&lt;br /&gt;/* END CUSTOM METHODS */&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;p&gt;Scene03 (Intro-Outro Pig):&lt;/p&gt;  &lt;pre&gt;package scenes&lt;br /&gt;{&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.events.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.commands.greensock.*;&lt;br /&gt;import com.bluediesel.utils.managers.scenemanager.scenes.*;&lt;br /&gt;&lt;br /&gt;import fl.transitions.easing.Strong;&lt;br /&gt;import flash.events.MouseEvent;&lt;br /&gt;import flash.media.*;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Scene03 extends AbstractScene implements IScene&lt;br /&gt;{&lt;br /&gt;public function Scene03(c:Object)&lt;br /&gt;{&lt;br /&gt;  super(c);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createIntroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new TweenMaxTo( c.pigTitle, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo( c.pigMC, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new TweenMaxTo  ( c.bodyCopyBG, 0.2, { height:231, width:470, autoAlpha:1, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo( c.pigBodyCopy, 0.2, { autoAlpha:1 } ),&lt;br /&gt;      new AddEventListener( c.pigMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new AddEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;override public function createOutroCommand():Command&lt;br /&gt;{&lt;br /&gt;  return new SerialCommand(0,&lt;br /&gt;      new RemoveEventListener( c.pigMC, MouseEvent.MOUSE_DOWN, playNoise ),&lt;br /&gt;      new RemoveEventListener( c.buttonPrevious, MouseEvent.MOUSE_DOWN, handlePrevious ),&lt;br /&gt;      new TweenMaxTo( c.pigBodyCopy, 0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo( c.bodyCopyBG, 0.1, { height:0, width:0, autoAlpha:0, easing:Strong.easeOut } ),&lt;br /&gt;      new TweenMaxTo( c.pigMC, 0.1, { autoAlpha:0 } ),&lt;br /&gt;      new TweenMaxTo( c.pigTitle, 0.1, { autoAlpha:0 } )&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* CUSTOM METHODS */&lt;br /&gt;private function handlePrevious(e:MouseEvent):void&lt;br /&gt;{&lt;br /&gt;  sceneManager.setScene( new Scene02 ( c ) );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function playNoise(e:MouseEvent):void{&lt;br /&gt;  var soundChannel:SoundChannel = new SoundChannel();&lt;br /&gt;  soundChannel = new PigNoise().play();&lt;br /&gt;}&lt;br /&gt;/* END CUSTOM METHODS */&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;If you notice the repeating signature of a Scene class, the timeline functionality is controlled by createIntroCommand and createOutroCommand. Below those functions are any custom methods that the scene needs. There are ways this could be further packaged up, like an external class that contains all the helper functions. For now, this is a way to build a quick linear module or application without resorting to the timeline or to a more intensive solution such as a fully-fledged framework.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/L8mkaQZpEPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/8738313006665872233/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=8738313006665872233" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8738313006665872233?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/8738313006665872233?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/L8mkaQZpEPA/as3-command-pattern-for-rapid-asset.html" title="AS3 Command Pattern for Rapid Asset Development" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/12/as3-command-pattern-for-rapid-asset.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcDQH86fip7ImA9Wx9REU0.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-7453741088557459912</id><published>2010-12-08T12:47:00.000-08:00</published><updated>2010-12-11T14:37:51.116-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-11T14:37:51.116-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash builder 4" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="flex sdk 4.1" /><category scheme="http://www.blogger.com/atom/ns#" term="eclipse builder" /><category scheme="http://www.blogger.com/atom/ns#" term="svn" /><category scheme="http://www.blogger.com/atom/ns#" term="flash professional" /><category scheme="http://www.blogger.com/atom/ns#" term="flash builder burrito" /><title>A Morsel on Flash Professional Projects in Flash Builder</title><content type="html">Flash Builder is so very great to use.  Such a time saver for the stuff I work on, especially in conjunction with subversion.  Having a repository view of a remote SVN server, being able to update and commit, not to mention the ease of 'diffing' in the Eclipse SDK. Best thing ever.&lt;br /&gt;
&lt;br /&gt;
Lock down FB and SVN and you will find varying project types to choose from: Flex Project, Flex Library Project, or Flash Professional Project.  Please join me in considering the  good and bad of the Flash Professional Project.&lt;br /&gt;
&lt;br /&gt;
Here are the things I like and don't like about managing a Flash Professional Project from FB.&lt;br /&gt;
&lt;br /&gt;
The Likes:&lt;br /&gt;
&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;The .project configuration file&lt;/li&gt;
&lt;li&gt;can be saved to SVN, so you can open all your resources quickly at later date&lt;/li&gt;
&lt;li&gt;allows you to select .as files from within Flash Pro and have them open in FB for a better coding experience ( still better even thoughh Flash Pro now completes code)&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;The Dislikes:&lt;br /&gt;
&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;The .project configuration file&lt;/li&gt;
&lt;li&gt;because collaborators with whom you share the Flash Professional Project, since the .project file is generally only usable in one particular configuration, will find it distracting&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Two environments (FB and Flash Pro) means 2x the path configuration. Yes, you have to path to libraries and swcs twice. Once in FB, and once in Flash Pro.&lt;/li&gt;
&lt;li&gt;Frequent quickly appearing and then disappearing phantom publishing panels, due to the need for FB to remain synchronized with Flash Builder. I'm on Mac and this is one of the more disturbing issues.&lt;/li&gt;
&lt;li&gt;The fact that you must create and save a .FLA as a precursor to starting a new Flash Professional Project, then associate the .FLA with the new Project, and then add the new document class back to the  .FLA.  Far better to have the .FLA generated through FB and configured according to initial project values.&lt;/li&gt;
&lt;/ul&gt;Seems like the nays have it this time.  I find it works better to use subclipse to manage FLAs without converting them into Flash Professional Projects. The only tiny caveat to this approach is that you must open the associated .as files directly from FB rather than via Flash Pro.&lt;br /&gt;
&lt;br /&gt;
It remains to be seen what Flash Builder "Burrito" adds to this mix.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/h8jJ56psga4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/7453741088557459912/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=7453741088557459912" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7453741088557459912?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/7453741088557459912?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/h8jJ56psga4/morsel-on-flash-professional-projects.html" title="A Morsel on Flash Professional Projects in Flash Builder" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/12/morsel-on-flash-professional-projects.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBQHs7fCp7ImA9Wx9SGE4.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-1730958515142258816</id><published>2010-12-08T09:32:00.000-08:00</published><updated>2010-12-08T09:40:51.504-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T09:40:51.504-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="asdoc" /><category scheme="http://www.blogger.com/atom/ns#" term="documentation" /><category scheme="http://www.blogger.com/atom/ns#" term="gskinner.com" /><category scheme="http://www.blogger.com/atom/ns#" term="asdocr" /><category scheme="http://www.blogger.com/atom/ns#" term="adobe air" /><title>ASDocr to generate ASDoc HTML documentation</title><content type="html">Rather than use the &lt;a href="http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_1.html"&gt;command line tool ASDoc&lt;/a&gt; that ships with the &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+SDK"&gt;Flex SDK&lt;/a&gt;, I'm trying out &lt;a href="http://gskinner.com/blog/archives/2010/01/asdocr_simple_a.html"&gt;ASDocr&lt;/a&gt; released on the Grant Skinner's site, &lt;a href="http://www.gskinner.com/"&gt;gskinner.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's handy, just be sure to &lt;a href="http://get.adobe.com/air/"&gt;update your Air&lt;/a&gt; to the latest 2.x version (presently 2.5.1) and be sure also to grab the &lt;a href="http://www.gskinner.com/blog/archives/2010/05/asdocr_update_f_1.html"&gt;latest ASDocr&lt;/a&gt;, as several are linked from gskinner.com&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/hxTkZtOzLdQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/1730958515142258816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=1730958515142258816" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1730958515142258816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1730958515142258816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/hxTkZtOzLdQ/asdocr-to-generate-asdoc-html.html" title="ASDocr to generate ASDoc HTML documentation" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/12/asdocr-to-generate-asdoc-html.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIHRHs8cSp7ImA9Wx9SGE4.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-2476104857660431324</id><published>2010-11-10T07:07:00.000-08:00</published><updated>2010-12-08T12:02:15.579-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T12:02:15.579-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Adobe CS5" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><category scheme="http://www.blogger.com/atom/ns#" term="adobe panini" /><title>Practical Explorations of Catalyst Workflow, Pt 2</title><content type="html">dFurther into Catalyst, here are some details on its workflow implementation:&lt;br /&gt;&lt;br /&gt;Catalyst is procedurally similar to IDE-driven Flash Development. In particular:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Imported objects are cut and pasted without regard to underlying code in the process of assembling and producing usable components&lt;/li&gt;&lt;li&gt;Graphics in Catalyst are nameless and instance-less and may well be duplicated many times in random fashion in the process of assembling components, resulting in a code-behind of untold and unmanaged complexity (until the developer gets a hold if it, that is)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Much like Flash circa v3, you can paint yourself into a corner if your work process is too design-centric. You must have an architectural view of what you are creating and scale it in anticipation of the final structured product. If you do not start with this view, unless it is a very simple project, you may get into a jam.&lt;/li&gt;&lt;li&gt;While Catalyst is a presentation tool, development and usability duties fall within its boundaries as well.  One example is the need to create transparent hit-areas for buttons; this is a matter of function, not display.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Following on this, Catalyst in its current 1.0 state is more hybrid tool than design platform.  The workflow role that it encapsulates is akin to that of a Flash web designer in a pure IDE environment.&lt;br /&gt;&lt;br /&gt;The user must have an awareness of the developers' needs as well as graphical manipulation and timeline skills. A team member utilizing Catalyst would need equal measures of feedback from both dev and creative teams to be effective. Furthermore, upon the Catalyst user is placed the expectation  of creating hierarchical, logical structures almost entirely from the mouse and clipboard.&lt;br /&gt;&lt;br /&gt;As version 2.0 aka Panini moves to release, it will be interesting to see what's next.&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/TOIYDU-B3co" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/2476104857660431324/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=2476104857660431324" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2476104857660431324?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2476104857660431324?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/TOIYDU-B3co/practical-explorations-of-catalyst.html" title="Practical Explorations of Catalyst Workflow, Pt 2" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/11/practical-explorations-of-catalyst.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMBQHo9eCp7ImA9Wx5aEk4.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-1912199709877912058</id><published>2010-11-08T06:56:00.000-08:00</published><updated>2010-11-08T09:14:11.460-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-08T09:14:11.460-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Adobe CS5" /><category scheme="http://www.blogger.com/atom/ns#" term="flash builder 4" /><category scheme="http://www.blogger.com/atom/ns#" term="workflow" /><title>Flash Catalyst and Flash Builder workflow</title><content type="html">More workflow explorations incorporating Adobe Flash Catalyst.  Among the hopeful tests and discoveries, a stark word of caution is a rare gem.  Here is one from &lt;a href="http://www.adobe.com/devnet/flashcatalyst/articles/flashbuilder_flashcatalyst_workflows.html"&gt;an article authored by Adobe's Andrew Shorten&lt;/a&gt; (italics mine):&lt;br /&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;It is not possible to re-open a Flex project in Flash Catalyst once you've imported it into Flash Builder.&lt;/span&gt; (The product teams will investigate this option for a future release, but it will not be available in the first release of Flash Catalyst.) To overcome this limitation, consider the other workflows in this article, in particular workflow 3, which extends the approach used here to support iterative development.&lt;/blockquote&gt;Workflow 3 incidentally outlines the use of  'Compare Project With Version' &gt; [previous version] as a means of reconciling different code versions.  This represents great hardship in a round-trip and, in light of just how different the versions would be, is IMO not a viable solution.&lt;br /&gt;&lt;br /&gt;Further on this, a detailed &lt;a href="http://www.judahfrangipane.com/blog/2010/09/03/flash-catalyst-jailbreak-for-flex-developers/"&gt;blog entry regarding 'catalyst jailbreak for flex developers'&lt;/a&gt; is exploratory and non-committal in tone as it explores Catalyst integration.  Here is a further obstacle to a Catalyst workflow that extends from a different angle on the quote above:&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;An important note: There isn't a place to set the ID on Flash Catalyst components. When a designer converts artwork to a component and then exports a custom component with multiple text inputs, say a registration form, none of those text inputs contain ID's.&lt;/blockquote&gt;And further:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;...when the design changes and it does, the one way Flash Catalyst generated code has no knowledge of your so called ID's. The design has changed and all or nearly all the components are anonymous again. So the developer has to manually find and add the ID to each text input, radio button, button, each time the design is updated etc.&lt;br /&gt;&lt;/blockquote&gt;While there are workarounds, there is not yet a clean workflow to utilize.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.adobe.com/technologies/flashcatalyst_panini/"&gt;Flash Catalyst Panini&lt;/a&gt;, you are up next.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;         &lt;a name="articlecontentAdobe_numberedheader_2" style="visibility: hidden;"&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/xAzo2TJxKV4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/1912199709877912058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=1912199709877912058" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1912199709877912058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/1912199709877912058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/xAzo2TJxKV4/flash-catalyst-and-flash-builder.html" title="Flash Catalyst and Flash Builder workflow" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/11/flash-catalyst-and-flash-builder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NRHs-fip7ImA9Wx5aFE8.&quot;"><id>tag:blogger.com,1999:blog-123701348316397121.post-2622550515270046055</id><published>2010-11-05T12:12:00.000-07:00</published><updated>2010-11-10T14:09:55.556-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T14:09:55.556-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash builder 4" /><category scheme="http://www.blogger.com/atom/ns#" term="flex sdk 4.1" /><category scheme="http://www.blogger.com/atom/ns#" term="spark" /><category scheme="http://www.blogger.com/atom/ns#" term="sparkskin" /><category scheme="http://www.blogger.com/atom/ns#" term="skin" /><title>Flash Builder 4 Workflow from Catalyst to Flex</title><content type="html">Skin vs SparkSkin Classes in the Flash Builder 4.1 SDK&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Seems the difference between the two is that SparkSkin adds some extensions that would likely not be used in the creation of a custom Spark Skin.  Therefore, you can pretty much just use the Skin class if you are developing a custom implementation.&lt;br /&gt;&lt;br /&gt;Here are a couple of resources with limited info on the topic:&lt;br /&gt;&lt;a href="http://forums.adobe.com/thread/465734?tstart=0"&gt;http://forums.adobe.com/thread/465734?tstart=0&lt;/a&gt;&lt;br /&gt;&lt;a href="http://unitedmindset.com/jonbcampos/2010/06/02/the-difference-between-skin-and-sparkskin/"&gt;http://unitedmindset.com/jonbcampos/2010/06/02/the-difference-between-skin-and-sparkskin/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/Web20Manufactory/~4/3YYPSWPSfVg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://webmanufactory.blogspot.com/feeds/2622550515270046055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=123701348316397121&amp;postID=2622550515270046055" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2622550515270046055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/123701348316397121/posts/default/2622550515270046055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Web20Manufactory/~3/3YYPSWPSfVg/flash-builder-4-workflow-from-catalyst.html" title="Flash Builder 4 Workflow from Catalyst to Flex" /><author><name>jasonthewolf</name><uri>http://www.blogger.com/profile/16796409501570164080</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_C7kbT1nuRRc/TS4MQ5cPyaI/AAAAAAAABuI/4Pf1iSLEkJI/S220/DSC01469.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://webmanufactory.blogspot.com/2010/11/flash-builder-4-workflow-from-catalyst.html</feedburner:origLink></entry></feed>
