<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jacob Wright - Flex, AIR, PHP, etc. &#187; Applications</title>
	<atom:link href="http://jacwright.com/blog/category/applications/feed/" rel="self" type="application/rss+xml" />
	<link>http://jacwright.com/blog</link>
	<description>Flex, AIR, PHP, etc.</description>
	<lastBuildDate>Thu, 29 Jul 2010 15:05:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Using AMF as a file format</title>
		<link>http://jacwright.com/blog/248/using-amf-as-a-file-format/</link>
		<comments>http://jacwright.com/blog/248/using-amf-as-a-file-format/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 20:57:40 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://jacwright.com/blog/?p=248</guid>
		<description><![CDATA[Flash is a great platform. You can build applications for the browser, the desktop, and&#8230; well, what else is there? When building applications, especially those with a document-based model such as the Aviary apps, Odosketch, My Canvas, ZenStudio, the apps on acrobat.com, and many others, you need a file format for the document or project. [...]]]></description>
			<content:encoded><![CDATA[<p>Flash is a great platform. You can build applications for the browser, the desktop, and&#8230; well, what else is there?</p>
<p>When building applications, especially those with a document-based model such as the <a href="http://aviary.com/">Aviary</a> apps, <a href="http://sketch.odopod.com/">Odosketch</a>, <a href="http://www.mycanvas.com/">My Canvas</a>, <a href="http://zenstudio.zenprint.com/">ZenStudio</a>, the apps on acrobat.com, and many others, you need a file format for the document or project. Or some way to save it.</p>
<h3>What Not To Do</h3>
<p>You don&#8217;t want to save each item into a table in the database. I know a guy&#8230;who had a dream&#8230;that his friend did this. This guy&#8217;s friend in his dream had a table for each item that needed to be stored with foreign keys etc. When a project needed to be loaded, the server-side script did a ton of queries and created a sometimes-quite-large XML structure that it then sent to the Flash app. When saving, this XML was sent back and parsed back into the database with INSERTS and UPDATES.</p>
<p>That does not scale, and none of that data was needed to be pulled up in reports or anything that you might consider useful and require a database for. It was complex, hard to add features, and slow. That is, it would have been had that guy&#8217;s dream friend been real.</p>
<h3>Warmer, warmer</h3>
<p>Saving document/project files to disk is the way to go. You can store metadata about each project or document in a database if you are storing them server-side. If it is an AIR app, give it a unique extension and the user can double-click on the file to open it. If you are AIR only, you can save your file as a SQLite database file. Pretty sweet option, but doesn&#8217;t work for the browser &#8217;cause Flash can&#8217;t do that. The format could be XML like OpenOffice documents and the new MS Office formats. You would need to parse the files in and out and they could get very large, so you&#8217;d want to compress them anyway.</p>
<h3>Hot, burning, you&#8217;re on fire!</h3>
<p>So, XML might be the most portable format, but hey, that&#8217;s what Import/Export dialogs are for, right? We&#8217;re talking about Save/Save As&#8230; :) Enter our new contender, AMF! AMF isn&#8217;t really new, however I haven&#8217;t heard of many people using it as their file format. The cool thing about using AMF is that after you&#8217;ve prepared your objects for it, you could store (in player 10) pieces of your document on the clipboard for copy/paste from one place to another (even after a page refresh or from AIR to browser!). You can do an auto-save of a document or page to the user&#8217;s SharedObject store.</p>
<h3>Preparation and implementation</h3>
<p>To use AMF as the format for you data you&#8217;ll need to prepare your objects sufficiently. Here are a few rules:</p>
<ul>
<li><em><strong>No</strong></em> required parameters in your constructors. When AMF unserializes it has to create those objects and assign the public properties to it. You&#8217;ll get errors otherwise.</li>
<li>Register your classes using <span style="font-family: Monaco, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: normal; font-size: 11px; ">flash.net.registerClassAlias<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; "> or [RemoteClass(alias="...")]. This will store the registered alias name to map a class to a string for serializing and unserializing.</span></span></li>
<li>Use IExternalizable for more complex items that only need a few properties stored, or for Flash classes that can&#8217;t be stored (e.g. BitmapData). This allows you to get around the constructor parameter issue, but it is more work. :)</li>
<li>Make sure any data you need stored is a public getter/setter or you&#8217;ll have to use IExternalizable. AMF serialization will only store data that is public and read/write. If you think about it, it makes sense.</li>
</ul>
<p>The way to store your document object or project object (or page, or widget, or whatever) to AMF depends on where you are storing it. There are a lot of Flash APIs that use AMF already. If you are storing it to SharedObject, just assign the item to the data property or one of its properties.</p>
<pre>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">SharedObject.getLocal(<span style="color: #990000;">"_myProject"</span>).data.project1 = myProject;
</pre>
<p>To send it from one app to another over LocalConection is just as easy.</p>
<pre>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"><span style="color: #6699cc;">var</span> conn:LocalConnection = <span style="color: #0033ff;">new</span> LocalConnection();
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">conn.send(<span style="color: #990000;">"_connName"</span>, <span style="color: #990000;">"passProject"</span>, myProject);
</pre>
<p>To send it to the server vi Flash Remoting you pass the object as-is the same as with LocalConnection.</p>
<p>If you want to save the project to disk or pass it to the server in a RESTful manner or as a file upload, you&#8217;ll need to serialize it to AMF first. But that is pretty easy. Just remember to compress after you write it and uncompress before you read. This will save a lot of room.</p>
<pre>
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"><span style="color: #6699cc;">var</span> byteArray:ByteArray = <span style="color: #0033ff;">new</span> ByteArray();
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">byteArray.writeObject(myProject);
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">byteArray.compress();
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #009900;">// write the bytearray to file or send to server
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #009900;">// or we can pull it back out making a clone! (save as...)
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">byteArray.position = 0;
<p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;">myProject = byteArray.readObject();
</pre>
<p>Easy cheesy. I will leave it as an exercise to the reader to figure out how to store it to the clipboard for copy/paste.</p>
<p>XML might be an easier format, though more verbose and prone to errors in the creation and parsing. Though it could allow for greater flexibility and accessibility to other programs to read the file.</p>
<p>Let me know if you use AMF for your document/project file storage. I&#8217;d be interested to hear how many people use this method and how well it has worked out for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/248/using-amf-as-a-file-format/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>360 Flex, best developer conference</title>
		<link>http://jacwright.com/blog/132/360-flex-best-developer-conference/</link>
		<comments>http://jacwright.com/blog/132/360-flex-best-developer-conference/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 21:23:50 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jacwright.com/blog/?p=132</guid>
		<description><![CDATA[I just got word I will be speaking at 360 Flex. I&#8217;m really excited. I&#8217;ve had a lot of fun there in the past and the crowd is much more developer centric than other conferences, which makes for more interesting conversations and presentations. I recommend 360 to anyone, but especially to developers. Go register now. [...]]]></description>
			<content:encoded><![CDATA[<p>I just got word I will be speaking at 360 Flex. I&#8217;m really excited. I&#8217;ve had a lot of fun there in the past and the crowd is much more developer centric than other conferences, which makes for more interesting conversations and presentations. I recommend 360 to anyone, but especially to developers. Go <a title="360 Flex Registration" href="http://http://360flex.eventbrite.com/event/211316052">register now</a>.</p>
<p>I&#8217;ll be presenting &#8220;Cloud computing with Flex&#8221;. I&#8217;ll talk about the services available to scale your application, but I want to focus on how you can build an app with zero server-side code. It&#8217;ll be an AIR app that stores its data on the cloud.</p>
<p style="text-align: left;">Here is my badge of honor</p>
<p><img class="size-full wp-image-131 alignleft" title="360flex2" src="http://jacwright.com/blog/wp-content/uploads/2009/02/360flex2.png" alt="360flex2" width="210" height="276" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/132/360-flex-best-developer-conference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Layered Content, 2 Parts</title>
		<link>http://jacwright.com/blog/86/layered-content-2-parts/</link>
		<comments>http://jacwright.com/blog/86/layered-content-2-parts/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 23:41:39 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[Layered Content]]></category>

		<guid isPermaLink="false">http://jacwright.com/blog/?p=86</guid>
		<description><![CDATA[I&#8217;ve had some time between jobs recently and been working on Layered Content. Layered Content is a website management system or web content management system (CMS). I&#8217;ve had a lot of fun over the past two years using it, architecting it, and planning it out. When I started I was determined to make a usable [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had some time between jobs recently and been working on Layered Content. Layered Content is a website management system or web content management system (CMS). I&#8217;ve had a lot of fun over the past two years using it, architecting it, and planning it out. When I started I was determined to make a usable CMS, one that didn&#8217;t require training courses to use, one that wasn&#8217;t too simple that you couldn&#8217;t make the website you wanted. A big challenge, but one I felt needed to finally be addressed by somebody.</p>
<p>There have been a couple versions, the first was completely web-based using Ajax, the second a mix of Ajax and Flex. Both of these versions were browser based. Both of these versions had limitations and issues <em>because</em> they were browser based. Enter <em>final version</em>.</p>
<p>The final version will be in 2 parts, a server part and a client part. The server part will be a RESTful webservice using Atom Publishing Protocol, the same protocol Google uses for its Google App Data services. This allows other applications to hook into the CMS and export data and make changes with the appropriate permissions. It could even allow for mashups. I&#8217;m certainly interested to see what people will do with it.</p>
<p>The client part will be created using Adobe Integrated Runtime (AIR). This multi-platform (i.e. runs on Windows, Mac, and Linux) will give people the benefits of a browser-based admin along with the benefits of the desktop. I&#8217;ll have one browser to deal with and will be able to easily allow in-page editing. The javascript used will be much smaller and easier to deal with since I&#8217;m not worrying about cross-browser compatibility. And I&#8217;ll be able to add features such as drag-and-drop or client-side caching of the data in a local database.</p>
<p>I&#8217;ve almost got the server component done. It will be called Layered Content Server. Layered Content Client will run off of a server instance and together they&#8217;ll make Layered Content, a usable &#8212; as in easy to use while not limiting functionality and features &#8212; CMS.</p>
<p>You can learn more about the architectural decisions behind Layered Content which will allow it to be easier to use and still quite functional at the <a href="http://layeredcontent.org/wiki/index.php/Layered_Content">wiki</a>. I&#8217;ll be asking for help once I get a pre-alpha version out so keep an eye out for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/86/layered-content-2-parts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Working on Cascade</title>
		<link>http://jacwright.com/blog/53/working-on-cascade/</link>
		<comments>http://jacwright.com/blog/53/working-on-cascade/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 15:08:55 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/53/working-on-cascade/</guid>
		<description><![CDATA[So I know I haven&#8217;t written in awhile. I&#8217;ve been busy working on a web content management system (CMS) I hope to get my business off the ground and running. I&#8217;m pretty excited about it. About 49% of the people I talk to about it aren&#8217;t sure what the difference is between Dreamweaver and a [...]]]></description>
			<content:encoded><![CDATA[<p>So I know I haven&#8217;t written in awhile. I&#8217;ve been busy working on a web content management system (CMS) I hope to get my business off the ground and running. I&#8217;m pretty excited about it.</p>
<p>About 49% of the people I talk to about it aren&#8217;t sure what the difference is between Dreamweaver and a web CMS. They&#8217;re the non-web developer people like my family and some of my friends. Another 49% (the web guys) aren&#8217;t sure why I would choose such an established market to make a product for and even after I explain my marketing strategy still scratch their heads over it. They are still nice about it and wish me good luck. They&#8217;ll all see why here soon!<br />
So, I&#8217;ve been sort of waiting around for Cascade (my CMS) to be done and then continue blogging, but that&#8217;s taking too long, so I&#8217;ll keep writing until it&#8217;s done. Then I&#8217;ll be moving my site over to withincode.com and using Cascade to manage it all.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/53/working-on-cascade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seeking Perfection</title>
		<link>http://jacwright.com/blog/51/seeking-perfection/</link>
		<comments>http://jacwright.com/blog/51/seeking-perfection/#comments</comments>
		<pubDate>Mon, 15 May 2006 14:39:49 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/51/seeking-perfection/</guid>
		<description><![CDATA[I find myself always seeking for the perfect code, the perfect library, the perfect system. Is it healthy? My employer might rather a code monkey which will mass produce web applications. Sure, the code would be a pain to maintain, but we would make more money. Or would we? I was contracted by my company [...]]]></description>
			<content:encoded><![CDATA[<p>I find myself always seeking for the perfect code, the perfect library, the perfect system. Is it healthy? My employer might rather a code monkey which will mass produce web applications. Sure, the code would be a pain to maintain, but we would make more money. Or would we?</p>
<p>I was contracted by my company for awhile to one of their clients. While I was there I started making my own JavaScript tree menu in my spare time. The developers I worked with asked why I would do something like that. There are already a handful of tree menus free for download on the web. I was doing it because, one, I thought it would be fun (they thought I was crazy), and two, none of the tree menus gave the functionality I sought. I ended up making a tree menu that is really nice, has a context menu, and works well with Ajax. I have used it in several projects.</p>
<p>I also started building a PHP framework around that time. Pherret was created in my spare time (another &#8220;painful&#8221; project my coworkers said) because I thought it would be fun and because I didn&#8217;t like what was already out there? Arras Template, which became part of Pherret, is a unique and fun templating system. And finally I put together my own JavaScript Ajax library, borrowing some from others like Prototype.</p>
<p>Not being content to use others&#8217; code, others&#8217; frameworks, and others&#8217; hard work is my downfall.</p>
<p>Or is it? I am now the expert at my company in JavaScript. I know the inner workings of what a framework needs to deal with. I know what a template system needs to be able to do, and some of how to do it. I have gone from knowing very little about programming (just 2 years ago) to being a well-versed and well-rounded developer. The drive that has me writing things that have already been done, or even just the drive that has me developing in my spare time instead of just in the workplace is what has made me valuable as a developer. I suppose we call the type a &#8220;hacker&#8221;. The person who loves to get their hands into code as a hobby.</p>
<p>I&#8217;m glad I&#8217;m a hacker. I program in a way that my code becomes better and better, day after day. My applications become better layed out. Better organized. Easier to maintain.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/51/seeking-perfection/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Writing (Beta)</title>
		<link>http://jacwright.com/blog/52/writing-beta/</link>
		<comments>http://jacwright.com/blog/52/writing-beta/#comments</comments>
		<pubDate>Wed, 10 May 2006 17:17:22 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/52/writing-beta/</guid>
		<description><![CDATA[MyStickies has had a great launch. It has been pretty successful. Quite a few users have a hard time setting it up, but once that is done, they enjoy using it. As of the time of this writing 17,982 accounts were created, 119,400 notes have been placed, 31,108 notes are currently sitting on pages accross [...]]]></description>
			<content:encoded><![CDATA[<p>MyStickies has had a great launch.  It has been pretty successful.  Quite a few users have a hard time setting it up, but once that is done, they enjoy using it.  As of the time of this writing 17,982 accounts were created, 119,400 notes have been placed, 31,108 notes are currently sitting on pages accross the web and we are getting between 50 and 100 new users each day. MyStickies started off with a &#8220;Beta&#8221; tag on it, but went public without the beta label though it probably should have kept it.  Unicode support was broken, usability was lacking, and databases had moments of down-time.</p>
<p>Why did we remove the beta label? Because Jason Fried said we shouldn&#8217;t. First was a <a title="For beta or for worse?" href="http://www.37signals.com/svn/archives/000690.php">blog post</a> from 37 Signals. They noticed how many new Ajax applications were releasing with the &#8220;beta&#8221; label. Then in TechCrunch&#8217;s article &#8220;<a title="Don't Blow Your Beta" href="http://www.techcrunch.com/2006/01/09/dont-blow-your-beta/">Don&#8217;t Blow Your Beta</a>&#8221; he left this comment:</p>
<p style="margin-left: 40px">&#8220;There’s a better way not to blow your beta: don’t launch one at all. Public betas are rediculous. If your product is public, it’s not a beta, it’s a release. Take responsibility for your product. “Beta” only passes the buck to your customers — outsourcing your pain to them.</p>
<p style="margin-left: 40px">&#8220;Get over Beta already.&#8221;</p>
<p>And then Ajaxian released the article &#8220;<a title="The Importance of a Good Beta" href="http://ajaxian.com/archives/the-importance-of-a-good-beta">The Importance of a Good Beta</a>&#8221; and added to the above quote from Jason.</p>
<p>What&#8217;s wrong with beta? Nothing. Might not be a good idea to charge for a beta product. I don&#8217;t think 37 Signals should release BaseCamp or other commercial products with a beta label and charge their customers for it. But that doesn&#8217;t mean a free public beta is a bad thing. It is actually a very good thing to be able to get customer feedback early, have users test accross a large variety of platforms, OS&#8217;s, and machines, and rethink the goals of the product <span style="font-style: italic">before </span>all the cleanup work has been done.</p>
<p>If there is nothing wrong with a free beta, why did we change it? We didn&#8217;t want people to think we were not taking responsibility for it. We wanted MyStickies to be successful, and we thought people would listen to Jason and not use it if it said &#8220;Beta&#8221; on it. Were we right? Don&#8217;t know. People seem to use Gmail even though it has Beta on it&#8217;s logo.</p>
<p>It all comes down to the power of writing. The 37 Signals team has some very good writers and even emphasize that you need <a title="Hiring Tip" href="http://www.37signals.com/svn/archives2/hiring_tip.php">good writers</a> to be successful. They have a massive following of people who read their blog and swear by what they write. I would bet most of their products successes are because of their great writing. Marketing themselves on the web. In order to be a have read blog, to generate a hype, to drive a web-application to be successful, good writing is important, maybe essential. My writing needs improvement for sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/52/writing-beta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash Project Timer</title>
		<link>http://jacwright.com/blog/48/flash-project-timer/</link>
		<comments>http://jacwright.com/blog/48/flash-project-timer/#comments</comments>
		<pubDate>Tue, 29 Nov 2005 16:42:49 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/?p=48</guid>
		<description><![CDATA[A project timer is something I have been needing. I have trouble keeping track of hours for projects I have. I usually don&#8217;t worry about time traking for my personal projects, which is good because if I thought about all the time I&#8217;ve spent (wasted), I might take up a new hobby. But for contract [...]]]></description>
			<content:encoded><![CDATA[<p>A project timer is something I have been needing.  I have trouble keeping track of hours for projects I have.  I usually don&#8217;t worry about time traking for my personal projects, which is good because if I thought about all the time I&#8217;ve spent (wasted), I might take up a new hobby.  But for contract work and for projects at mediaRAIN, I need to keep track of time I spend on each project.  I always forget to write something down at the end of the day, and usually can&#8217;t remember how long I&#8217;ve spent anyway.</p>
<p>So, I made a project timer.  It actually is built in Macromedia Flash, and made into a nice executable using mProjector.  I have yet to start using it for my projects, but it seems to be working pretty well.  I thought I would share it in case anyone else needed something like this.  It only works on Windows right now, but mProjector can make executables for Mac, so I&#8217;ll look at doing a Mac version soon.</p>
<p>I used to have a screenshot of the app here.  However, it&#8217;s flash, so why don&#8217;t I just put the swf up?  Pretty small, unobtrusive, and hopefully usable.</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="200" height="120" accesskey="T" tabindex="1" title="Project Timer"><param name="movie" value="/images/timer.swf" /><param name="quality" value="high" /><embed src="/images/timer.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="200" height="120"></embed></object></p>
<p>To use, click on the world icon, enter in a new project, hit enter, and then click the green play button to start timing.  You can add as many projects as needed and choose them from the drop down that appears when you click the world icon.  The timer also minimizes to the system tray.  You can make it stay on top of all applications from the right click menu, as well as close it down from there.  It doesn&#8217;t use the registry or create any files of it&#8217;s own.  It only uses the Flash SharedObject (which is basically a cookie for Flash).  Also, if it works the way it should, you can look at a projects total time, the time for the current day, current week, current month, or even a custom time period.  When you click custom, it will ask you for a start day.  You can also put in an end day by adding a dash and another full date (e.g. &#8220;14/11/2005-18/11/2005&#8243;).</p>
<p>You may download the following:<br />
<a href="/downloads/flash_timer-mac-0.1.zip">flash_timer-mac-0.1.zip</a><br />
<a href="/downloads/flash_timer-win-0.1.zip">flash_timer-win-0.1.zip</a></p>
<p>Hope it helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/48/flash-project-timer/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Tutorial? How About a Project!</title>
		<link>http://jacwright.com/blog/42/ecommerce-project/</link>
		<comments>http://jacwright.com/blog/42/ecommerce-project/#comments</comments>
		<pubDate>Fri, 30 Sep 2005 13:26:06 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Object Oriented Programming]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/?p=42</guid>
		<description><![CDATA[In writing the articles on object oriented programming I have stuck with theory.  After all, it is not language specific and takes less space to say what there is to say.  However, I have been asked by serveral to provide a tutorial or include examples on object oriented code.  Well, I've decided to do almost that.]]></description>
			<content:encoded><![CDATA[<p>In writing the articles on object oriented programming I have stuck with theory.  After all, it is not language specific and takes less space to say what there is to say.  However, I have been asked by serveral to provide a tutorial or include examples on object oriented code.  Well, I&#8217;ve decided to do something more.  My good friend Andrew Branch has pointed out many times before that we learn better when we do things ourselves.  And so, in that spirit, we will start a new full-fledged project together.  I will write along as we develope it about how we should try to do things, so we can more fully understand object oriented principles.  And we can all write the code for it.</p>
<h3>The Project</h3>
<p>Going back to my roots, I learned to program by hacking on <a href="http://www.oscommerce.com/" title="osCommerce, Open Source Online Shop E-Commerce Solutions">osCommerce</a> code.  I wanted to make my own ecommerce site and run my own buisness.  It was then that I discovered how enjoyable programming was and stuck with that instead.  The problem with osCommerce is, however, that it is very procedural.  It has SQL queries inline with the HTML on it&#8217;s pages.  It uses functions to output pixel images.  It requires a lot of hacking to modify.  It is an adequate example of what you might call &#8220;spaghetti code.&#8221;</p>
<h3>ooCommerce</h3>
<p>We will be starting a new open source project that will implement all the features of osCommerce, but in a better way.  And hopefully, since this will be more extensable, we can add many new features.  We can call this project ooCommerce for object oriented ecommerce.  I have already purchased the domains oocomerce.com, .net, and .org so that we may, eventually, have our own site for it.  And I have submitted it to Sourceforge for pending approval.  The benchmark of features we will be aiming for is listed on <a href="http://www.oscommerce.com/solutions">osCommerce&#8217;s site</a>.  And, because we are going full out object oriented, we will be using PHP 5.  I am sorry if you were hoping for PHP 4, but in order to teach better OOP principles, and because PHP 4 is such a hack in terms of OOP, that&#8217;s what we need to use.</p>
<p>I hope ooCommerce will be, if nothing else, a great learning experience.  Instead of a little pointless tutorial on saying &#8220;hello world&#8221; in an object oriented manner, we will actually create a full-featured system as our tutorial, implementing all that we&#8217;ve learned previously.  We will look at planning this project out next week, so stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/42/ecommerce-project/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mint, Stat&#8217;s and Design</title>
		<link>http://jacwright.com/blog/39/mint-stats-and-design/</link>
		<comments>http://jacwright.com/blog/39/mint-stats-and-design/#comments</comments>
		<pubDate>Wed, 14 Sep 2005 20:01:22 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/39/mint-stats-and-design/</guid>
		<description><![CDATA[<a href="http://www.haveamint.com/">Mint</a> is a new product recently released to track the statistics on your website.  It has gotten much attention from several areas, and I thought it would be worth it to check it out.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.haveamint.com/">Mint</a> is a new product recently released to track the statistics on your website.  It has gotten much attention from several areas, and I thought it would be worth it to check it out.</p>
<p>I am currently using <a href="http://www.statcounter.com/">StatCounter.com</a> to track the traffic to my site.  It is really useful when you use their paid service which keeps track of more than the last 100 visits to your site (the free version cap).  It lets you view all the regular stats as well as &#8220;drill down&#8221; to see the actual path a single visitor took through your site.  But, it is a monthly subscription service, which means potenially hundreds of dollars a year, even though it&#8217;s not much each month.</p>
<p>Mint is a one-time site liscence fee of $30.  So I felt it would be a good investment over the monthly fees of StatCounter.  What sums up my thoughts upon using Mint is this: a regular stat tracker was given a <em>great</em> design and some cool javascript effects to make things easier to use.  It looks wonderful, but it lacks much.  Things such as tracking return visitors, displaying charts and graphs of the data, and being able to drill down to see individual users and their paths are things that really make a web stat tracker useful.  A good user interface is important as well.</p>
<p>One bonus to Mint is it can be extendable with plugins or &#8220;pepper&#8221; as it&#8217;s called for marketing.  Although, I&#8217;m not sure if extras will be sold by other developers, release for free even though the original is a paid product, or both.  I should make it easier for the maker of mint to deploy new features anyway.</p>
<p>Overall, I enjoy Mint, and it&#8217;s price is much more favorable than the recurring price of StatCounter.  I will stick with it and create some nice graphs of the data for my personal use (whenever I get spare time).  Perhaps sell it as a plugin or something.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/39/mint-stats-and-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dreamweaver and CSS Still Don&#8217;t Play Nice</title>
		<link>http://jacwright.com/blog/38/dreamweaver-and-css-still-dont-play-nice/</link>
		<comments>http://jacwright.com/blog/38/dreamweaver-and-css-still-dont-play-nice/#comments</comments>
		<pubDate>Tue, 13 Sep 2005 17:01:47 +0000</pubDate>
		<dc:creator>Jacob Wright</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.jacwright.com/blog/38/dreamweaver-and-css-still-dont-play-nice/</guid>
		<description><![CDATA[After hearing about the new CSS based workflow of Dreamweaver 8, which came out yesterday evening, I had high hopes that the rendering engine for CSS and HTML would have been improved.  Disappointingly, this wasn't the case.  Why don't they try using the rendering engines for Firefox, Safari, and even IE.  The first two are now completely open for use and the latter would be smart to include even if there is a liscencing fee.]]></description>
			<content:encoded><![CDATA[<p>After hearing about the new CSS based workflow of Dreamweaver 8, which came out yesterday evening, I had high hopes that the rendering engine for CSS and HTML would have been improved.  Disappointingly, this wasn&#8217;t the case.  Why don&#8217;t they try using the rendering engines for Firefox, Safari, and even IE.  The first two are now completely open for use and the latter would be smart to include even if there is a liscencing fee.</p>
<p>mediaRAIN, my employer, uses <a href="http://www.macromedia.com/software/studio/" title="Studio">Macromedia Studio</a> because we specialize in Flash products.  However, we do many HTML/PHP projects as well.  Dreamweaver has always been a favorite of mine with it&#8217;s HTML highlighting, code completion, and easy-to-use interface.  I find myself more productive with Dreamweaver than with notepad.  However, it would be really nice to use the <acronym title="What You See Is What You Get">WYSIWYG</acronym> (Design View) to see my CSS styling as I create it rather than saving and viewing in the browser.  There is no point in a <acronym title="What You See Is What You Get">WYSIWYG</acronym> if what you see isn&#8217;t really what you get.</p>
<p>To be fair, there are some really nice features with the new edition of Dreamweaver.  There is code collapsing (which can collapse a selected section of code as well as an element).  They&#8217;ve fixed the built in FTP client to work in the background.  There is a more usable CSS panel which will show you all the styles applied to the currently selected element, even inherited ones.  Their code completion is reworked and is a bit nicer.  And you can turn on and off the underlining of invalid code (which actually doesn&#8217;t seem to work).</p>
<p>My hope would be, in the future (near future would be nice), that Dreamweaver would add the ability of changing the <acronym title="What You See Is What You Get">WYSIWYG</acronym> rendering engine to one of the three or four major browsers so that you can accuratly see what your CSS looks like in that browser.  Either that, or fix their current renderer to properly display floating elements, absolutly positioned elements, and the correct box model.</p>
]]></content:encoded>
			<wfw:commentRss>http://jacwright.com/blog/38/dreamweaver-and-css-still-dont-play-nice/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
