<?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>MatSays : ramblings of a grumpy developer-designer-teacher &#187; IMD402 Server Side Scripting</title>
	<atom:link href="http://www.matsays.com/category/ailv/imd402/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matsays.com</link>
	<description>ramblings of a grumpy developer - designer - teacher &#124; my art institute of las vegas web design blog</description>
	<lastBuildDate>Wed, 23 Jun 2010 15:56:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fast CMS Deployment with jQuery and Web Services</title>
		<link>http://www.matsays.com/misc/tricks/fast-cms-deployment-with-jquery-and-web-services/</link>
		<comments>http://www.matsays.com/misc/tricks/fast-cms-deployment-with-jquery-and-web-services/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 06:03:58 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[IMD223 Advanced Scripting]]></category>
		<category><![CDATA[IMD322 Dynamic Design]]></category>
		<category><![CDATA[IMD325 UCD I]]></category>
		<category><![CDATA[IMD335 UCD II]]></category>
		<category><![CDATA[IMD345 UCD III]]></category>
		<category><![CDATA[IMD375 Databases]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[IMD414 Dynamic Design]]></category>
		<category><![CDATA[INF400 Web Security]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dam]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=1178</guid>
		<description><![CDATA[This week we&#8217;ve been working on a quick digital asset manager for the upcoming Wimbledon.  Last year, Delta Tre produced a massive, well designed system to handle the metadata and media transfer between the UK and the partners in the US.  They had months to build it.  This year we had 2 [...]]]></description>
			<content:encoded><![CDATA[<p>This week we&#8217;ve been working on a quick digital asset manager for the upcoming Wimbledon.  Last year, Delta Tre produced a massive, well designed system to handle the metadata and media transfer between the UK and the partners in the US.  They had months to build it.  This year we had 2 weeks.  Granted we had some experience with the system from last year and that we&#8217;ve been toying with our own Director and VWAP systems, but we decided that in the interest of time (10 business days) and resources (2 developers) that we&#8217;d take a different approach.</p>
<p>Rather than take a traditional page-design approach, we architected the database and interaction to be slim and exchangeable.  First, the database was managed by use of two .NET-based Web Services written in C# that ingested via POST marking transaction success with 32-character IDs, output via XML and with multi-purpose edit functions using switches and variable inputs.  Next, the authentication was built on a combination Basic and session-based approach using ASP &#8211; quick and efficient and easy to modularize should the system need to be moved to another platform.  Finally, the front-end was built on a single HTML page with jQuery and jQuery UI to support the large number of Ajax exchanges and interactive features.</p>
<p>The result is a clean, easy to use, transportable DAM-CMS capable of complex transactions (multi-tiered, synchronous updates), hooks to a Silverlight-based rough cut editor from Southworks, and most of all, easy and quick to modify without affecting the production environment.  By deploying a single jQuery-based controller separate from the parser and presentation components, new objects could be introduced to the interface based on a modifiable, dynamic XML document at login (or pushed in real-time, even after the user had logged in).</p>
<p><img class="aligncenter size-large wp-image-1179" title="Screen capture of development interface" src="http://www.matsays.com/wp-content/uploads/2010/06/Picture-2-600x341.png" alt="" width="600" height="341" /></p>
<p>Some of the things we learned seem pretty silly but in fact were critical to the project completing in such a short amount of time.</p>
<p>First, segregate all the processes &#8211; by constructing the database, the web services, and the interface separate from each other, different developers could rapidly deploy all of it and mesh together quickly at stop-points each day.  Chandler and I (with a big assist from Srini and Mio) were able to work independently and merge as he completed parts of the web service, or make changes as parts of the interface came together.  Likewise, during testing, changes to the interface and sequence could be done in real-time and re-tested within minutes instead of having to go back to the drawing board.  This was eased by the fact that issues could be easily attributable and divisible to interface or back-end, and handled separately.</p>
<p><img class="alignright size-full wp-image-1180" title="Modal window in RCE-CMS" src="http://www.matsays.com/wp-content/uploads/2010/06/Picture-3-e1276495120982.png" alt="" width="350" height="180" align="right"/>Second, it&#8217;s the little things that make a difference.  Providing small visual cues &#8211; update notifications at the top of the page that disappear, Ajax loader starburts, highlighted labels and input boxes &#8211; all give the user information, information that helps them get through difficult or tedious and complex processes (for example, in creating a VOD asset, a user had options that might require upwards of 50 different pieces of information &#8211; eliminating unnecessary components on the screen made it easier to get through).</p>
<p>Finally, architect it but be flexible.  Changes happen, and while developers and project managers all try to keep scope creep from happening, we all know that in the real world, so does feature change.  It is unrealistic to assume that projects will get started 6 months before the deadline.  It is also unrealistic to assume that, in such a project with a short deadline, that you&#8217;ll remember to include everything.  Likewise, it&#8217;s also unrealistic to assume that during the process you&#8217;ll realize that the planned interface will work &#8211; prototyping is great but it takes time and testing that you may not always have.  Being able to be flexible by following a basic interface design, using modular builders (in jQuery UI or other framework) and XML-based instruction sets, and providing error catching systems in both the front-end as well as the web services makes the project continue to move, even when not all the parts are correct.</p>
<p><a href="http://www.matsays.com/wp-content/uploads/2010/06/Picture-4.png"><img class="aligncenter size-large wp-image-1181" title="Silverlight Rough Cut Editor interface by Ezeqiual Jadib at Southworks" src="http://www.matsays.com/wp-content/uploads/2010/06/Picture-4-600x359.png" alt="" width="600" height="359" /></a></p>
<p>In the end, we had a lot of hiccups and it didn&#8217;t go as smoothly as we&#8217;d hoped but it did get done and delivered on-time.  The client goes to training in 9 hours and there will likely be another round of changes, but that we were able to post a full-featured DAM CMS in such a short amount of time gives us new methods and targets for the future.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Ffast-cms-deployment-with-jquery-and-web-services%2F', 'Fast+CMS+Deployment+with+jQuery+and+Web+Services')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/fast-cms-deployment-with-jquery-and-web-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Save MySQL from the Dark Side</title>
		<link>http://www.matsays.com/soapbox/save-mysql-from-the-dark-side/</link>
		<comments>http://www.matsays.com/soapbox/save-mysql-from-the-dark-side/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 22:03:32 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD375 Databases]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Internet News]]></category>
		<category><![CDATA[Soapbox]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=786</guid>
		<description><![CDATA[[thanks Mark R for passing this on...verbatim from the source site]
If Oracle buys MySQL as part of Sun, database customers will pay the bill.
In April 2009, Oracle announced that it had agreed to acquire Sun. Since Sun had acquired MySQL the previous year, this would mean that Oracle, the market leader for closed source databases, would get to own [...]]]></description>
			<content:encoded><![CDATA[<p>[thanks Mark R for passing this on...verbatim from the <a href="http://www.helpmysql.org/en/theissue/customerspaythebill">source site</a>]</p>
<h2 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 28px; PADDING-BOTTOM: 5px; MARGIN: 1px 0px 15px; COLOR: #245182; LINE-HEIGHT: 40px; PADDING-TOP: 0px; FONT-STYLE: italic; FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif">If Oracle buys MySQL as part of Sun, database customers will pay the bill.</h2>
<p style="MARGIN: 15px 0px">In April 2009, Oracle <a style="COLOR: #245182; TEXT-DECORATION: underline" href="http://www.oracle.com/us/corporate/press/018363">announced</a> that it had agreed to acquire Sun. Since Sun <a style="COLOR: #245182; TEXT-DECORATION: underline" href="http://www.mysql.com/news-and-events/sun-to-acquire-mysql.html">had acquired MySQL</a> the previous year, this would mean that Oracle, the market leader for closed source databases, would get to own MySQL, the most popular open source database.</p>
<p style="MARGIN: 15px 0px">If Oracle acquired MySQL on that basis, it would have as much control over MySQL as money can possibly buy over an open source project. In fact, for most open source projects (such as Linux or Apache) there isn&#8217;t any comparable way for a competitor to buy even one tenth as much influence. But MySQL&#8217;s success has always depended on the company behind it that develops, sells and promotes it. That company (initially MySQL AB, then Sun) has always owned the important intellectual property rights (IPRs), most notably the trademark, copyright and (so far only for defensive purposes) patents. It has used the IPRs to produce income and has reinvested a large part of those revenues in development, getting not only bigger but also better with time.</p>
<p style="margin: 15px 0px; text-align: center;"><img class="aligncenter" title="banner-sign-en" src="http://www.matsays.com/wp-content/uploads/2010/01/banner-sign-en.png" alt="banner-sign-en" width="340" height="240" /></p>
<p style="MARGIN: 15px 0px">If those IPRs fall into the hands of MySQL&#8217;s primary competitor, then MySQL immediately ceases to be an alternative to Oracle&#8217;s own high-priced products. So far, customers had the choice to use MySQL in new projects instead of Oracle&#8217;s products. Some large companies even migrated (switched) from Oracle to MySQL for existing software solutions. And every one could credibly threaten Oracle&#8217;s salespeople with using MySQL unless a major discount was granted. If Oracle owns MySQL, it will only laugh when customers try this. Getting rid of this problem is easily worth one billion dollars a year to Oracle, if not more.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fsoapbox%2Fsave-mysql-from-the-dark-side%2F', 'Save+MySQL+from+the+Dark+Side')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/soapbox/save-mysql-from-the-dark-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spark it up!</title>
		<link>http://www.matsays.com/misc/spark-it-up/</link>
		<comments>http://www.matsays.com/misc/spark-it-up/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 14:42:08 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Internet News]]></category>
		<category><![CDATA[Soapbox]]></category>
		<category><![CDATA[Toolbox]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[small business]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[student]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=720</guid>
		<description><![CDATA[Last year it was DreamSpark, now it&#8217;s WebsiteSpark!
For my students and UNLV colleagues: if you had never heard of the DreamSpark program, you should jump on it.  A program launched in 2008 by MSFT (don&#8217;t groan) can get you free software.  Yes, free.  Yes, I&#8217;ve gotten some of it.  In a blatant (and conducive) attempt to move budding [...]]]></description>
			<content:encoded><![CDATA[<p>Last year it was DreamSpark, now it&#8217;s WebsiteSpark!</p>
<p><strong><em>For my students and UNLV colleagues:</em></strong> if you had never heard of the <a title="DreamSpark" href="https://www.dreamspark.com/default.aspx">DreamSpark</a> program, you should jump on it.  A program launched in 2008 by MSFT (don&#8217;t groan) can get you free software.  Yes, free.  Yes, I&#8217;ve gotten some of it.  In a blatant (and conducive) attempt to move budding developers and IT staffers to the Redmond dark side, they&#8217;re offering Visual Studio (2005 &amp; 2008), Windows Server 2008, Expression Studio and more for free.  So while the university&#8217;s alliance program is broken and paltry, you could have just headed straight to the source and gotten legit, keyed copies.</p>
<p><img class="size-full wp-image-721 alignnone" title="dreamspark" src="http://www.matsays.com/wp-content/uploads/2009/09/dreamspark.png" alt="dreamspark" width="500" height="252" /></p>
<p><em><strong>Now the new stuff:</strong></em> just released by MSFT &#8211; <a title="WebsiteSpark" href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a>.  Like it&#8217;s older brother, the new program is aimed at small companies &#8211; no more than 10 employees &#8211; and offers:</p>
<ul>
<li>3 Visual Studio licenses</li>
<li>1 Expression Studio 2 or 3 license</li>
<li>2 Expression Web licenses</li>
<li>3 users license for WinServer 2008 and SQLServer 2008</li>
<li>4 processor license for self-hosting WinServer 2008 and SQLServer 2008</li>
</ul>
<p>That&#8217;s a buttload of very expensive stuff for nothing.  The caveat is that you must launch a new web app (that&#8217;s app boys and girls, not a paltry PHP site) and if you hit it big, you have to exit the program and pay a $100 fee.  That&#8217;s peanuts compared to the value.  Or you could go to a bunch of MSFT seminars and collect copies but that takes a lot of time and snoozing through 4 hours of demos.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Fspark-it-up%2F', 'Spark+it+up%21')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/spark-it-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress under attack, upgrade your blog now</title>
		<link>http://www.matsays.com/ailv/imd402/wordpress-under-attack-upgrade-your-blog-now/</link>
		<comments>http://www.matsays.com/ailv/imd402/wordpress-under-attack-upgrade-your-blog-now/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 16:01:47 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[IMD335 UCD II]]></category>
		<category><![CDATA[IMD345 UCD III]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[INF400 Web Security]]></category>
		<category><![CDATA[Internet News]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[backdoor]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[virus]]></category>
		<category><![CDATA[vulnerability]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[worm]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=682</guid>
		<description><![CDATA[[by Jay Hathaway at DownloadSquad via Mashable]
Several sites are reporting that a major attack on Wordpress blogs started yesterday. The latest version of Wordpress, 2.8.4, is not vulnerable to this particular worm, so upgrading now could save you a lot of headaches. The worm creates a new, hidden administrator account on your blog, allowing whoever&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>[by Jay Hathaway at <a href="http://www.downloadsquad.com/2009/09/06/wordpress-under-attack-upgrade-your-blog-now/">DownloadSquad</a> via Mashable]</p>
<p>Several sites are reporting that a major attack on Wordpress blogs started yesterday. The latest version of Wordpress, 2.8.4, is not vulnerable to this particular worm, so upgrading now could save you a lot of headaches. The worm creates a new, hidden administrator account on your blog, allowing whoever&#8217;s behind this thing to access the guts of your blog, databases and all.</p>
<p>How do you know if your site has been affected? Lorelle on Wordpress offers two possible ways to find out:</p>
<blockquote><p><em>There are strange additions to the pretty permalinks, such as</em><br />
<tt>example.com/category/post-title/%&amp;(%7B$%7Beval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)&amp;%/</tt><em>.<br />
The keywords are &#8220;eval&#8221; and &#8220;base64_decode.&#8221;</em></p>
<p><em>The second clue is that a &#8220;back door&#8221; was created by a &#8220;hidden&#8221; Administrator. Check your site users for <strong>&#8220;Administrator (2)&#8221;</strong> or a name you do not recognize.</em></p></blockquote>
<p>Wordpress has acknowledged the attacks and encouraged users to upgrade their sites. Wordpress.com users aren&#8217;t affected, as the whole system has already been updated to 2.8.4. If you&#8217;ve already been afflicted by the attack, start on the steps in Wordpress&#8217; FAQ.</p>
<p><em>I&#8217;ve already done the upgrade and it is the same, painless upgrade as usual.  Just be sure (especially if you&#8217;re using FireFTP) that you set the transfer options to Automatic Mode (Tools &gt; Options &gt; Downloads/Uploads : top fieldset).</em></p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Failv%2Fimd402%2Fwordpress-under-attack-upgrade-your-blog-now%2F', 'Wordpress+under+attack%2C+upgrade+your+blog+now')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/ailv/imd402/wordpress-under-attack-upgrade-your-blog-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Future of Micropayments</title>
		<link>http://www.matsays.com/soapbox/future-of-micropayments/</link>
		<comments>http://www.matsays.com/soapbox/future-of-micropayments/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 14:59:45 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[IMD325 UCD I]]></category>
		<category><![CDATA[IMD335 UCD II]]></category>
		<category><![CDATA[IMD345 UCD III]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Soapbox]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[micropayment]]></category>
		<category><![CDATA[redbox]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=640</guid>
		<description><![CDATA[Last night I was responding to Answers on LinkedIn and came across a question in e-Commerce that asked What&#8217;s your view of the outlook for micropayment solutions in digital media?
For those who don&#8217;t know, a micropayment solution describes a system whereby the product being bought is a significantly small amount (something like $2 or less, [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I was responding to Answers on LinkedIn and came across a question in e-Commerce that asked <a href="http://www.linkedin.com/answers/technology/information-technology/telecommunications/TCH_ITS_TCI/528920-145094?browseIdx=2&amp;sik=1250173272725&amp;goback=%2Eanh_80018%2Eahp%2Each_TCH*4ECM">What&#8217;s your view of the outlook for micropayment solutions in digital media?</a></p>
<p>For those who don&#8217;t know, a micropayment solution describes a system whereby the product being bought is a significantly small amount (something like $2 or less, so basically iTunes music would be one), and is usually coupled by either a pre-pay or a carting/aggregation system. Some day-to-day examples that have succeeded outside of iTunes would be something like pre-paid transit passes in NYC which remove one fee for each use. In the UK, there&#8217;s <a title="sQuid Prepaid Cash Cards" href="http://www.squidcard">sQuid</a> which is a similar service but can be used for many types of transactions. In Japan, the phones are tied directly to bank accounts for vending machine purchases.</p>
<p>Having worked on a number of e-Commerce back-ends for varying clients, this has always been an issue that perplexed me. On the one hand, consumers all know that at some point, to access content or acquire goods, that a payment needs to be made. On the flip side, content is so easily accessed for free on the Web (whether legally or quasi-legally) that consumers have started to become used to getting it for free. So how do we impose payment systems that allow for micro-purchasing? The example scenario is for, say, news. Several news providers have already started charging for access to news (which in reality is no different than buying a newspaper) and several others are moving in that direction, but is the subscription model working? Or perhaps will we see a pay-per-content-item system emerge? <span id="more-640"></span></p>
<p>Either way, the system itself is the culprit. In my somewhat out-of-the-box opinion, there needs to be a new model altogether. Imposing traditional payment schemes simply hasn&#8217;t worked for the micro-payment world (though I could argue that <a title="redbox" href="http://www.redbox.com/">RedBox</a> might actually be a close-to-perfect model but its also partly the targeting). Pre-pay, post-pay-aggregation, bank cards, none seem to work really well, and most of the systems that have emerged with promising outlooks later died untimely deaths (as pointed out by one of the Answer respondents).</p>
<p>Anyway here was my response&#8230;</p>
<blockquote><p>I think that we still haven&#8217;t tapped the right balance in micropayment solutions that is able to satisfy the needs of the providers and the consumers. There is too little transparency and too little fluidity in the process, and we have (as a development and developer-provider community) dwelled to much on protecting the value of our content and not offering alternatives to letting customers acquire it (mind you, I am a rabid advocate of DRM solutions, so don&#8217;t think that I am not in support of content protection, it&#8217;s just that we tend to either do it with an iron fist or not at all).</p>
<p>I think customers are more than willing, in the end, to pay for services but the system itself needs an overhaul, likely one we haven&#8217;t come up with yet. In the same way that Amazon capitalizes on long-tail marketing, we need to look way outside of how we do things now in order to create environments where the provider and consumer of media services can co-exist. To that end, while there are several successful vendors of such products I don&#8217;t think anyone is a leader right now because I think the market will shortly turn itself over.</p>
<p>I do know, from my own experiences, that changes in digital asset management is the starting point for the vendors, but from a standpoint of providing explicitly heuristic access to content, not just providing massive libraries and letting the users hunt for it. A Pandora type experience with a flowing payment process (mixed pay for right to use and pay for use on a very micro level) is something I envision as an evolution. Providers are going to have to work together instead of living in silos of licensed content and use intelligent agents to disperse desired media.</p>
<p><small>Clarification posted 9 hours later</small><br />
[reference to responses made later] those are some really great points. I agree that the current state of micro-payments is in waning death mode but argue that a re-thinking of the approach and process (and yes, the interminable fee structures that traditional money systems place on the products) can revolutionize the system. iTunes is a successful venture for every reason stated in several responses, but after raising the price point past the $1 mark, it&#8217;s beginning to lose its lustre and it&#8217;s debatable if it&#8217;s a true micro-payment system anyway (it&#8217;s really just a shopping cart for smaller products like the 99¢ store). When I think of micro-payment, I there&#8217;s two traditional approaches but they are still both pre-pay or cart-and-pay systems; the evolution I see would be be much more superfluous than that.</p></blockquote>
<p>Several years ago, a good friend and myself came up with the idea of sending barcode images to cellphones via MMS as a means of ticketing for events, most notably nightclubs with VIP access (and two years later we see Fandango using scanned bar-code &#8220;ticket at home&#8221; systems that are pretty much the same but not digitized), but the system itself was paid for using micro-transaction on account (in other words, the transaction itself was attributable to the benefiting business, which could then be passed on in hard form to the customer if the business desired).</p>
<p>Like this, what outlandish ideas can you come up with that can revolutionize how payment models work?</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fsoapbox%2Ffuture-of-micropayments%2F', 'Future+of+Micropayments')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/soapbox/future-of-micropayments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The UX of CMS</title>
		<link>http://www.matsays.com/misc/the-ux-of-cms-wimbledonlive-cms/</link>
		<comments>http://www.matsays.com/misc/the-ux-of-cms-wimbledonlive-cms/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 07:32:52 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[IMD223 Advanced Scripting]]></category>
		<category><![CDATA[IMD322 Dynamic Design]]></category>
		<category><![CDATA[IMD325 UCD I]]></category>
		<category><![CDATA[IMD335 UCD II]]></category>
		<category><![CDATA[IMD345 UCD III]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[IMD414 Dynamic Design]]></category>
		<category><![CDATA[INF340 Web Design Concepts]]></category>
		<category><![CDATA[Soapbox]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Toolbox]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[hci]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.matsays.com/?p=626</guid>
		<description><![CDATA[Part of the reason I love WordPress as much as I do is simply that the total user experience of using the admin tools just makes it that much better than most CMS packages.  While I still think there are a lot of areas that can use improvement, I have rarely ever used a [...]]]></description>
			<content:encoded><![CDATA[<p>Part of the reason I love WordPress as much as I do is simply that the total user experience of using the admin tools just makes it that much better than most CMS packages.  While I still think there are a lot of areas that can use improvement, I have rarely ever used a CMS that made it quite as easy to manage and publish content.</p>
<p>While is why I am extremely proud of the evolution of the CMS that I designed and built for the Wimbledon Live player (see <a href="http://www.matsays.com/misc/wimbledon-live-smooth-stream-silverlight/">this post</a>).  </p>
<p><img src="/images/wcms1.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p><span id="more-626"></span>To understand the complexity behind designing the UX it&#8217;s important to understand the nature of the data and the critical effect of the workflow.  First, video was being supplied from six sources, some to us using Saviant direct to our servers, some we pulled via FTP, and then of course the live streams (some HD and some SD).  Then there were multiple parties&#8230;NBC (as the news reporter) needed editorial control over metadata, while iStream&#8217;s Managed Webcasting team needed to control the timeline over when items went to publication.  My team, RnCS (Research &#038; Creative Services) needed to insure that everything was tested before going live so we needed to throw the whole thing through a staging server before hitting a production server that then fed a cluster of edge servers on Akamai&#8217;s network.</p>
<p><img src="/images/wcms2.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p>So we structured it in several parts.  First we put automated bots to determine when new assets had been dropped, specifically seeking out XML files that held the initial metadata, and dropped that into the CMS DB.  Once there, the appropriate parties were notified by email (or in my case as PM, by SMS) &#8211; to update metadata, insert images, begin video transcoding, etc.  Through the entire process, we designed screens to make it as easy as possible to follow the flow of assets, provide enough ability to each staff person so that overlaps in duties existed but that checkpoints assured data integrity throughout.</p>
<p><img src="/images/wcms3.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p>The grid above, for example shows the visual layout of the thumbnails that would appear in the cover-flow style playlist inside the player.  Deep linking was provided so editorial users could create pointers on the MSNBC/NBCSports sites.  Drag and drop allowed us to reorder objects to maximize the visibility of prominent players.</p>
<p><img src="/images/wcms4.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p>Each level of user had various modal windows to insert data.  Even imagery was uploaded first to the staging, processed for size and then sent to production.</p>
<p><img src="/images/wcms5.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p>Because of the nature of edge servers, we also had to purge the cache after any update, so we provided a three-section grouping that allowed us to send the feed XMLs to production and clear the cache in one shot.  And to make THAT process even easier, we built it so that it was accessibly by mobile phone so even if I was in transit, I could still update the CMS in a timely fashion.</p>
<p><img src="/images/wcms6.png" border="0" alt="Screen shot of Wimbledon Live CMS"/></p>
<p>Finally, the live streams had the ability to be toggled on and off so that the matrix of available feeds, particularly the Smooth HD stream, was optimized and prioritized.  To be sure, there was still much room for improvement but given that the whole CMS was built in 6 days and now, five days into Wimbledon, has eased us into a steady, smooth workflow, speaks volumes for making it easy to use, intuitive (for example, the color designations on the player match the ones in the CMS, big text and extensive micro-transaction Ajax created an interactive environment), and overall a good experience.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Fthe-ux-of-cms-wimbledonlive-cms%2F', 'The+UX+of+CMS')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/the-ux-of-cms-wimbledonlive-cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whadya Know and Wheredya Fit?</title>
		<link>http://www.matsays.com/misc/resources/whadya-know-and-wheredya-fit/</link>
		<comments>http://www.matsays.com/misc/resources/whadya-know-and-wheredya-fit/#comments</comments>
		<pubDate>Sat, 26 Jul 2008 06:56:11 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD223 Advanced Scripting]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/?p=445</guid>
		<description><![CDATA[Ever wondered how your skillset stacks up in the scope of all programming languages?  I&#8217;ve presented this before in PHP class just to illustrate the popularity (as a result of the usability and easy learning curve) of the language but as my own work has drifted into several others, it&#8217;s always interested me where my [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mobimeet.com/wp-content/uploads/2008/07/tpci_trends.png"></a>Ever wondered how your skillset stacks up in the scope of all programming languages?  I&#8217;ve presented this before in PHP class just to illustrate the popularity (as a result of the usability and easy learning curve) of the language but as my own work has drifted into several others, it&#8217;s always interested me where my skills stand.  In any case, TIOBE is a Dutch company specializing in assessing and tracking the quality of software.  They produce the <a title="TIOBE Index" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">TIOBE Index</a> a monthly updated list of how languages stack up to each other.  Below is shown the current trend graph and the top 10 languages as of July 2008.</p>
<p style="text-align: center;"><a title="TIOBE Index" href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"><img class="alignnone size-full wp-image-446 aligncenter" title="tpci_trends" src="http://www.mobimeet.com/wp-content/uploads/2008/07/tpci_trends.png" alt="" width="500" height="375" border="0" /></a><br/><small><br />
TIOBE Index, July 2008 by TIOBE bv</small></p>
<table id="Table2" class="TpciTable" align="center" style="border: solid 1px #777;">
<tbody>
<tr>
<th colspan="2" align="center" valign="bottom">Position</th>
<th rowspan="2" align="center" valign="bottom">Delta</th>
<th rowspan="2" align="center" valign="bottom">Language</th>
<th rowspan="2" align="center" valign="bottom">Ratings<br />
Jul 2008</th>
<th rowspan="2" align="center" valign="bottom">Delta<br />
Jul 2007</th>
<th rowspan="2" align="center" valign="bottom">Status</th>
</tr>
<tr>
<th align="center" valign="bottom">Jul 2008</th>
<th align="center" valign="bottom">Jul 2007</th>
</tr>
<tr height="25">
<td align="center">1</td>
<td align="center">1</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/Java.html">Java</a></td>
<td align="center">21.345%</td>
<td align="center">+0.33%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">2</td>
<td align="center">2</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/C.html">C</a></td>
<td align="center">15.945%</td>
<td align="center">-0.42%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">3</td>
<td align="center">3</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/C__.html">C++</a></td>
<td align="center">10.693%</td>
<td align="center">+0.19%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">4</td>
<td align="center">4</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/(Visual)_Basic.html">(Visual) Basic</a></td>
<td align="center">10.447%</td>
<td align="center">+0.72%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">5</td>
<td align="center">5</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/PHP.html">PHP</a></td>
<td align="center">9.525%</td>
<td align="center">+0.87%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">6</td>
<td align="center">6</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/Perl.html">Perl</a></td>
<td align="center">5.131%</td>
<td align="center">-0.20%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">7</td>
<td align="center">8</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Up.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/Python.html">Python</a></td>
<td align="center">4.973%</td>
<td align="center">+1.95%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">8</td>
<td align="center">7</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Down.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/C_.html">C#</a></td>
<td align="center">4.000%</td>
<td align="center">+0.29%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">9</td>
<td align="center">9</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/JavaScript.html">JavaScript</a></td>
<td align="center">2.757%</td>
<td align="center">+0.24%</td>
<td align="left">  A</td>
</tr>
<tr height="25">
<td align="center">10</td>
<td align="center">10</td>
<td align="center"><img src="http://www.tiobe.com/tiobe_index/images/Same.gif" border="0" alt="" /></td>
<td><a href="http://www.tiobe.com/content/paperinfo/tpci/Ruby.html">Ruby</a></td>
<td align="center">2.735%</td>
<td align="center">+0.64%</td>
<td align="left">  A</td>
</tr>
</tbody>
</table>
<p>(For my students) In case you&#8217;re wondering why HTML is not included in this list, the definition used by the index is:</p>
<blockquote><p>A language is considered a programming language if it is Turing complete. As a consequence, HTML and XML are not considered programming languages. This also holds for data query language SQL. SQL is not a programming language because it is, for instance, impossible to write an infinite loop in it. On the other hand, SQL extensions PL/SQL and Transact-SQL are programming languages. ASP and ASP.NET are also not programming languages because they make use of other languages such as JavaScript and VBScript or .NET compatible languages. The same is true for frameworks such as Ruby on Rails, ColdFusion, Cocoa, and technologies such as AJAX. Finally, we have also excluded assembly languages, although Turing complete, because they have a very different nature.</p></blockquote>
<p>And finally, for those of you in my weekend classes&#8230;yes, it&#8217;s 2 hours after class and yes, I am still up.  Good night.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Fresources%2Fwhadya-know-and-wheredya-fit%2F', 'Whadya+Know+and+Wheredya+Fit%3F')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/resources/whadya-know-and-wheredya-fit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consummate PHP Function List</title>
		<link>http://www.matsays.com/misc/tricks/consummate-php-function-list/</link>
		<comments>http://www.matsays.com/misc/tricks/consummate-php-function-list/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 06:26:42 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/?p=387</guid>
		<description><![CDATA[This is a previously published post at the request of some of my prior students.  I am republishing it in the hopes that some of you on break might actually pick it up but I may have to make some amendments shortly.  In any case, it is my consummate list of 63 PHP functions that [...]]]></description>
			<content:encoded><![CDATA[<p>This is a previously published post at the request of some of my prior students.  I am republishing it in the hopes that some of you on break might actually pick it up but I may have to make some amendments shortly.  In any case, it is my consummate list of 63 PHP functions that your should know (excluding some basic gdlib stuff) to survive as a web developer.  And I mean inside and out.<span id="more-387"></span></p>
<table border="0">
<tbody>
<tr>
<td width="33%" valign="top"><strong>STRING FUNCTIONS</strong><br />
crypt<br />
echo<br />
explode<br />
implode<br />
join<br />
trim<br />
number_format<br />
print<br />
printf<br />
str_replace<br />
strip_tags<br />
stripos<br />
strlen<br />
strstr<br />
strtolower<br />
strtoupper<br />
substr<br />
ucfirst<br />
ucwords</p>
<p><strong>DATE/TIME FUNCTIONS</strong><br />
date<br />
localtime<br />
mktime<br />
strtotime<br />
time</td>
<td width="33%" valign="top"><strong>ARRAY FUNCTIONS</strong><br />
array_pop<br />
array_push<br />
array_search<br />
array_splice<br />
array<br />
asort<br />
count<br />
each<br />
key<br />
krsort<br />
ksort<br />
rsort<br />
sizeof<br />
sort<br />
usort</p>
<p><strong>MYSQL FUNCTIONS</strong><br />
mysql_connect<br />
mysql_close<br />
mysql_error<br />
mysql_fetch_array<br />
mysql_query<br />
mysql_select_db</td>
<td width="33%" valign="top"><strong>MATH FUNCTIONS</strong><br />
floor<br />
is_nan<br />
max<br />
min<br />
mt_rand<br />
pow<br />
rand</p>
<p><strong>REGEX FUNCTIONS</strong><br />
ereg_replace<br />
ereg<br />
eregi_replace<br />
eregi<br />
split<br />
spliti</p>
<p><strong>MISCELLANEOUS FUNCTIONS</strong><br />
constant<br />
define<br />
die<br />
exit<br />
phpinfo</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Fconsummate-php-function-list%2F', 'Consummate+PHP+Function+List')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/consummate-php-function-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EasyPHP &#8211; Found It</title>
		<link>http://www.matsays.com/misc/tricks/easyphp-found-it/</link>
		<comments>http://www.matsays.com/misc/tricks/easyphp-found-it/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 19:04:41 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD322 Dynamic Design]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/tricks/easyphp-found-it</guid>
		<description><![CDATA[Earlier in the quarter I mentioned finding a PHP emulator so you would not have to send your files to a server for testing and I finally found it (again).  Go to easyphp.org and download the Windows version.  This will install a local version of Apache (web server), PHP and MySQL onto your computer.  You [...]]]></description>
			<content:encoded><![CDATA[<p><img border="0" align="left" width="226" src="http://www.easyphp.org/images_easyphp/top_title.gif" alt="EasyPHP" height="40" style="margin: 0px 5px 5px 0px" />Earlier in the quarter I mentioned finding a PHP emulator so you would not have to send your files to a server for testing and I finally found it (again).  Go to <a href="http://www.easyphp.org/" title="EasyPHP">easyphp.org</a> and download the Windows version.  This will install a local version of Apache (web server), PHP and MySQL onto your computer.  You may have to modify the configuration (my recommendation is that if you are running IIS locally to change IIS to port 81 and leave EasyPHP as 80).</p>
<p>Please note that this is a beta build and not intended for production use.</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Feasyphp-found-it%2F', 'EasyPHP+%26%238211%3B+Found+It')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/easyphp-found-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gearing up for Winter 2008 Quarter</title>
		<link>http://www.matsays.com/misc/tricks/gearing-up-for-winter-2008-quarter/</link>
		<comments>http://www.matsays.com/misc/tricks/gearing-up-for-winter-2008-quarter/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 07:01:32 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD302 Net Broadcasting]]></category>
		<category><![CDATA[IMD325 UCD I]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/tricks/gearing-up-for-winter-2008-quarter</guid>
		<description><![CDATA[Well, classes are only 11 days away so I hope you&#8217;re all getting in your rest &#8211; we got a lot to do this quarter.
First, lots going on with iStreamPlanet, our Silverlight development and other technology advancements.  For those of you who are able to, head on out to CES &#8211; it looks like this [...]]]></description>
			<content:encoded><![CDATA[<p>Well, classes are only 11 days away so I hope you&#8217;re all getting in your rest &#8211; we got a <span style="text-decoration: underline;">lot</span> to do this quarter.</p>
<p>First, lots going on with iStreamPlanet, our Silverlight development and other technology advancements.  For those of you who are able to, head on out to CES &#8211; it looks like this will be a pretty good show this year.  And if you have a chance to head to Mix08 &#8211; there will be some really cool things to see there too.  In any case, the contractors didn&#8217;t finish our new office build-out so me and the team are stuck in temporary office space &#8211; no thanks to Wynn practically pushing us out the door from the office I&#8217;ve been residing in the last 5 years.</p>
<p>Second, I know a lot of you use and have gotten comfortable with Firebug.  <a title="Web Developer Firefox plugin" href="http://chrispederick.com/work/web-developer/">Here&#8217;s a similar plugin</a> I found that you should also get.  It allows you to do a lot of those user variations that you might not otherwise account for &#8211; exact screen resolutions, Javascript on/off, etc.</p>
<p>Finally, I admit, I use cheat sheets.  It&#8217;s bad enough trying to remember markups, commands, syntax, functions, and methods for 1 or 2 languages, what about 5 or more languages that a web developer typically has to know (and if you have no idea what I&#8217;m talking about, see below)?  UK-based Internet dude Dave Child, who writes good, poignant articles and blogs about a ton of topics, has a great set of free (yes, FREE &#8211; and if you use them you should send him a note and thank him for saving you a few bucks after all the tuition you&#8217;ve paid) cheat sheets in PDF format for download.  I recommend grabbing them (at least the list below) as soon as you can &#8211; with the Web, you never know when something&#8217;s going to disappear.  <a title="Cheat Sheets by Dave Child" href="http://www.ilovejackdaniels.com/cheat-sheets/">Check out the list and links here</a>.</p>
<p>And as far as the list of languages you should know as a web developer (and this rant is aimed directly at my students) &#8230;</p>
<ol>
<li>HTML/XHTML (<em>and you should know the difference</em>)</li>
<li>CSS (<em>and be current and know the hacks</em>)</li>
<li>Javascript &amp; Javascript prototyping</li>
<li>ASP Classic (<em>sorry guys, I still think it&#8217;s a good fundamental language</em>)</li>
<li>SQL (<em>for MySQL</em>)</li>
<li>PHP (<em>both functional and object based</em>)</li>
<li>XML (<em>and variants of it, plus XSL</em>)</li>
<li>ActionScripting</li>
<li><em>And if you really want to get ahead, you need to learn at least one of the following to stay ahead of the curve in the next few years:</em> ASP.NET, JSP, Ruby on Rails, or C#</li>
</ol>
<p>And no, AJAX is <span style="text-decoration: underline;">not</span> a language as many of you still think &#8211; if you thought it was&#8230;GO LOOK IT UP!</p>
<p><strong><em>See you in class &#8230; don&#8217;t be late!</em></strong></p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Fgearing-up-for-winter-2008-quarter%2F', 'Gearing+up+for+Winter+2008+Quarter')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/gearing-up-for-winter-2008-quarter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Performing the Luhn-10</title>
		<link>http://www.matsays.com/misc/tricks/performing-the-luhn-10/</link>
		<comments>http://www.matsays.com/misc/tricks/performing-the-luhn-10/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 17:08:51 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[IMD345 UCD III]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/tricks/performing-the-luhn-10</guid>
		<description><![CDATA[The Luhn-10 algorithm is widely known formula for generating accepted credit card numbers. This doesn’t mean that EVERY generated number will exist, it is simply a system of being able to check if a number is even accurate or not.
The reason we do a “Luhn-10 check” on an entered credit card is to verify that [...]]]></description>
			<content:encoded><![CDATA[<p>The Luhn-10 algorithm is widely known formula for generating accepted credit card numbers. This doesn’t mean that EVERY generated number will exist, it is simply a system of being able to check if a number is even accurate or not.</p>
<p>The reason we do a “Luhn-10 check” on an entered credit card is to verify that the user did not enter invalid information before it gets sent to the credit card processor. Why? Because a transaction request, whether it’s valid or not, costs the site owner money! Every request is charged a base transaction fee (and this varies depending on the size of the company, the volume of transactions and many other factors; my company for example, has a transaction fee of 12 cents*). So in other words, we want to make sure that if we’re about to get charged that fee, we’d better make sure ourselves that we have as accurate a number as possible.</p>
<p align="center"><img src="http://www.mobimeet.com/wp-content/uploads/2007/12/logo_ccamex.gif" alt="logo_ccamex.gif" /><img src="http://www.mobimeet.com/wp-content/uploads/2007/12/logo_ccdiscover.gif" alt="logo_ccdiscover.gif" /><img src="http://www.mobimeet.com/wp-content/uploads/2007/12/logo_ccmc.gif" alt="logo_ccmc.gif" /><img src="http://www.mobimeet.com/wp-content/uploads/2007/12/logo_ccvisa.gif" alt="logo_ccvisa.gif" /></p>
<p><span id="more-260"></span>Luhn-10 (which used to be known as Mod10) was developed by an engineer at IBM in the 1960’s. The basic premise is that a homogenous formula, when applied to a string of numbers, will always yield the same result. In the case of Luhn-10, the result is 0. For this example, use the Visa card:</p>
<p align="center"><span style="font-size: 16pt">4563 9601 2200 1999 </span></p>
<p><strong>Step 1:</strong> Reverse the number. Beginning with the (new) first number of the whole sequence, multiple every odd digit by 1 and every even digit by 2:</p>
<table border="0" cellPadding="0" cellSpacing="0" style="border-collapse: collapse" class="MsoTableGrid">
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">6</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">3</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">6</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">5</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">4</p>
</td>
</tr>
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">X2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x1</span></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">x2</span></p>
</td>
</tr>
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>9</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>18</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>9</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>2</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>0</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>0</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>2</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>4</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>1</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>0</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>6</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>18</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>3</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>12</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>5</strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong>8</strong></p>
</td>
</tr>
</table>
<p><strong>Step 2:</strong> For all of the results that are greater than 9, add the two digits in the result:</p>
<table border="0" cellPadding="0" cellSpacing="0" style="border-collapse: collapse" class="MsoTableGrid">
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">18</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">4</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">6</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">18</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">3</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">12</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">5</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">8</p>
</td>
</tr>
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1+8</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">9</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">4</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">0</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">6</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1+8</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">3</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">1+2</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">5</p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center">8</p>
</td>
</tr>
<tr>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">9</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">9</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">9</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">2</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">0</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">0</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">2</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.65pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">4</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">1</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">0</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">6</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">9</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">3</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">3</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">5</span></strong></p>
</td>
<td width="37" vAlign="top" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0in; width: 27.7pt; padding-top: 0in; background-color: transparent; border: #ece9d8">
<p align="center"><strong><span style="font-size: 10pt; color: red; font-family: 'Trebuchet MS'">8</span></strong></p>
</td>
</tr>
</table>
<p><strong>Step 3:</strong> Sum those numbers:</p>
<p align="center">9+9+9+2+0+0+2+4+1+0+6+9+3+3+5+8 = <strong>70</strong></p>
<p><strong>Step 4:</strong> Modulus the sum (this is why it used to be called Mod10). In arithmetic, the modulus is the remainder after a number is divided by a specified number:</p>
<p align="center"><strong>70 = 0 mod 10</strong></p>
<p>All major credit card providers use the Luhn-10 system (Visa, Mastercard, American Express, Discover, Diner’s Club, Carte Blanche and JCB). There is currently an alternate system that uses a 1 instead of a 0 as the modulus but they are not widely accepted cards. Note that there are several card numbers that are widely accepted as test card numbers and are always overlooked. The most common one is 4111111111111111 (and is therefore never considered to be a real credit car number). Also note that credit card numbers can have 13, 15, or 16 digits</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Fperforming-the-luhn-10%2F', 'Performing+the+Luhn-10')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/performing-the-luhn-10/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sorting XML-based Multi-Dimensional Data in ActionScript</title>
		<link>http://www.matsays.com/misc/tricks/sorting-multi-dimensional-data-in-actionscript/</link>
		<comments>http://www.matsays.com/misc/tricks/sorting-multi-dimensional-data-in-actionscript/#comments</comments>
		<pubDate>Fri, 01 Jun 2007 16:30:46 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD223 Advanced Scripting]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/tricks/sorting-multi-dimensional-data-in-actionscript</guid>
		<description><![CDATA[A question came up today about sorting matrices of data in ActionScript.  The resolution was rather simple but I&#8217;ve heard through the grapevine that [students] might have some utility for this, so here it is.  And since we&#8217;re at it, let&#8217;s also add in the idea that the data is being fed from an external [...]]]></description>
			<content:encoded><![CDATA[<p>A question came up today about sorting matrices of data in ActionScript.  The resolution was rather simple but I&#8217;ve heard through the grapevine that [students] might have some utility for this, so here it is.  And since we&#8217;re at it, let&#8217;s also add in the idea that the data is being fed from an external XML document.</p>
<p>Here&#8217;s the scenario that we faced.  iStreamPlanet produces a software application that is run during live poker tournaments which places an overlay on top of the encoded video similar to poker tournaments you might see on TV.  The actual system uses an interface built in C++ that writes an XML file as it is updated, which in turn is read by a Flash component layer and then drawn into the video card (the result is something that looks like the image below).</p>
<p style="text-align: center"><img src="http://www.mobimeet.com/wp-content/uploads/2007/06/wsopcaesers.jpg" alt="WSOP Tournament at Caesar’s Palace broadcast live by iStreamPlanet" /></p>
<p><span id="more-101"></span>For those of you who have been through any of the scripting classes, by now you should recognize that this needs a multi-dimensional array to work best.  Don&#8217;t be scared off by multi-dimensional arrays &#8211; think of them as just Excel spreadsheets.  So if you have a spreadsheet that looks something like this:</p>
<table>
<tr bgColor="#cccccc">
<td style="text-align: center; border: #777 1px solid">&nbsp;</td>
<td style="text-align: center; border: #777 1px solid"><strong>A</strong></td>
<td style="text-align: center; border: #777 1px solid"><strong>B</strong></td>
<td style="text-align: center; border: #777 1px solid"><strong>C</strong></td>
<td style="text-align: center; border: #777 1px solid"><strong>D</strong></td>
</tr>
<tr>
<td style="background-color: #ccc; text-align: center; border: #777 1px solid"><strong>1</strong></td>
<td style="text-align: center; border: #777 1px solid">Hat</td>
<td style="text-align: center; border: #777 1px solid">Cat</td>
<td style="text-align: center; border: #777 1px solid">Rat</td>
<td style="text-align: center; border: #777 1px solid">Sat</td>
</tr>
<tr>
<td style="background-color: #ccc; text-align: center; border: #777 1px solid"><strong>2</strong></td>
<td style="text-align: center; border: #777 1px solid">Bar</td>
<td style="text-align: center; border: #777 1px solid">Car</td>
<td style="text-align: center; border: #777 1px solid">War</td>
<td style="text-align: center; border: #777 1px solid">Par</td>
</tr>
</table>
<p>Then the your array would have been written as:</p>
<table>
<tr bgColor="#cccccc">
<td style="border: #777 1px solid; padding: 10px"><tt>var myArray = new Array();<br />
myArray[0][0] = "Hat";<br />
myArray[0][1] = "Cat";<br />
myArray[0][2] = "Rat";<br />
myArray[0][3] = "Sat";<br />
myArray[1][0] = "Bar";<br />
myArray[1][1] = "Car";<br />
myArray[1][2] = "War";<br />
myArray[1][3] = "Par";</tt></td>
</tr>
</table>
<p>Download the materials here: <a href="http://www.mobimeet.com/wp-content/uploads/2007/06/mdarraysortfromxml.zip" title="Multi-Dimensional Array Sorting from XML Data in ActionScript (ZIP)">Multi-Dimensional Array Sorting from XML Data in ActionScript (ZIP)</a></p>
<p>In the course of adding components to the application, we needed to output the current chip counts of each player and present them in order of most to least chips.  Of course, our XML ordering was based on the C# output which was not sorted and also contained string data where we needed to sort numerically.</p>
<table>
<tr bgColor="#cccccc">
<td style="border: #777 1px solid; padding: 10px"><tt>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;PlayersData&gt;<br />
  &lt;Title&gt;President Poker&lt;/Title&gt;<br />
  &lt;GameOver&gt;FALSE&lt;/GameOver&gt;<br />
  &lt;DisplayMode&gt;0&lt;/DisplayMode&gt;<br />
  &lt;PlayersChipCount&gt;<br />
    &lt;Player ID="1" Name="George Bush"&gt;$454&lt;/Player&gt;<br />
    &lt;Player ID="2" Name="George Washington"&gt;$545,445&lt;/Player&gt;<br />
    &lt;Player ID="3" Name="Ronald Reagan"&gt;$454,545&lt;/Player&gt;<br />
    &lt;Player ID="4" Name="Bill Clinton"&gt;$54,545&lt;/Player&gt;<br />
    &lt;Player ID="5" Name="John F. Kennedy"&gt;$787&lt;/Player&gt;<br />
    &lt;Player ID="6" Name="Richard Nixon"&gt;$4,554&lt;/Player&gt;<br />
    &lt;Player ID="7" Name="Theodore Roosevelt"&gt;$15,616&lt;/Player&gt;<br />
    &lt;Player ID="8" Name="Abraham Lincoln"&gt;$564,564&lt;/Player&gt;<br />
    &lt;Player ID="9" Name="James Madison"&gt;$5,451&lt;/Player&gt;<br />
  &lt;/PlayersChipCount&gt;<br />
  &lt;!-- data removed here --&gt;</tt><tt><br />
&lt;PlayersData&gt;</tt></td>
</tr>
</table>
<p>First, we read the XML.  To do this you&#8217;ll need to open a socket:</p>
<table>
<tr bgColor="#eeeeff">
<td style="border: #777 1px solid; padding: 10px"><tt>xmlData = new XML();<br />
xmlData.ignoreWhite = true;<br />
xmlData.load("Data.xml");</tt></td>
</tr>
</table>
<p>Next, we created a function that broke up the data and put it into the array.</p>
<table>
<tr bgColor="#eeeeff">
<td style="border: #777 1px solid; padding: 10px"><tt>xmlData.onLoad = readCart;<br />
</tt><tt><br />
function readCart(success){<br />
  if (!success){<br />
    trace("Error: CANNOT LOAD XML DATA");<br />
    break;<br />
  }else{<br />
    trace("XML read successfully");<br />
    for (i = 0; i &lt; this.childNodes.length; i++){<br />
      if (this.childNodes[i].nodeValue == null &amp;&amp; this.childNodes[i].nodeName == "PlayersData"){<br />
        topLevel = this.childNodes[i];<br />
      }<br />
    }<br />
  }//function continues below</tt></td>
</tr>
</table>
<p>At this point we need to consider how to sort the data.  Remember that our original spec required that the output be sorted in descending chip count order.  But notice that the XML data that has symbols in it.  If you know a bit about programming, you&#8217;ll know that sorting is done based on the operating system preference.  In this case using a normal sort() function, Player 7 (Roosevelt) with $15,616 chips would be first&#8230;</p>
<table align="center" width="90%">
<tr bgColor="#cccccc">
<td colSpan="2" style="text-align: center; border: #777 1px solid"><strong>Unparsed Sort</strong></td>
<td colSpan="2" style="text-align: center; border: #777 1px solid"><strong>Correct Sort</strong></td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Roosevelt</td>
<td style="text-align: center; border: #777 1px solid">$15,616</td>
<td style="text-align: center; border: #777 1px solid">Lincoln</td>
<td style="text-align: center; border: #777 1px solid">$564,564</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Bush</td>
<td style="text-align: center; border: #777 1px solid">$454</td>
<td style="text-align: center; border: #777 1px solid">Washington</td>
<td style="text-align: center; border: #777 1px solid">$545,445</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Reagan</td>
<td style="text-align: center; border: #777 1px solid">$454,545</td>
<td style="text-align: center; border: #777 1px solid">Reagan</td>
<td style="text-align: center; border: #777 1px solid">$454,545</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Nixon</td>
<td style="text-align: center; border: #777 1px solid">$4,554</td>
<td style="text-align: center; border: #777 1px solid">Clinton</td>
<td style="text-align: center; border: #777 1px solid">$54,545</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Madison</td>
<td style="text-align: center; border: #777 1px solid">$5,451</td>
<td style="text-align: center; border: #777 1px solid">Roosevelt</td>
<td style="text-align: center; border: #777 1px solid">$15,616</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Washington</td>
<td style="text-align: center; border: #777 1px solid">$545,445</td>
<td style="text-align: center; border: #777 1px solid">Madison</td>
<td style="text-align: center; border: #777 1px solid">$5,451</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Clinton</td>
<td style="text-align: center; border: #777 1px solid">$54,545</td>
<td style="text-align: center; border: #777 1px solid">Nixon</td>
<td style="text-align: center; border: #777 1px solid">$4,554</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Lincoln</td>
<td style="text-align: center; border: #777 1px solid">$564,564</td>
<td style="text-align: center; border: #777 1px solid">Kennedy</td>
<td style="text-align: center; border: #777 1px solid">$787</td>
</tr>
<tr>
<td style="text-align: center; border: #777 1px solid">Kennedy</td>
<td style="text-align: center; border: #777 1px solid">$787</td>
<td style="text-align: center; border: #777 1px solid">Bush</td>
<td style="text-align: center; border: #777 1px solid">$454</td>
</tr>
</table>
<p>While ActionScript does have conversion capabilities, the problem in this scenario is that the symbols will not allow conversion to a numeric.  So let&#8217;s create a function that will &#8220;convert&#8221; the formatted field into a number.</p>
<table>
<tr bgColor="#eeffee">
<td style="border: #777 1px solid; padding: 10px"><tt>function replace(origStr,searchStr) {<br />
  var tempStr = "";<br />
  var startIndex = 0;<br />
  for (c = 0;c &lt; origStr.length;c++) {<br />
    thischar = origStr.substr(c,1);<br />
    if ( thischar != searchStr ) {<br />
      tempStr += thischar;<br />
    }<br />
  }<br />
  return tempStr;<br />
}</tt></td>
</tr>
</table>
<p>Using the conversion function (and note, you can use this function &#8211; albeit very simplistic &#8211; to do pretty much any type of string replacement), now we can finish off the original function.</p>
<table>
<tr bgColor="#eeeeff">
<td style="border: #777 1px solid; padding: 10px"><tt>  //create empty array container<br />
  var dat:Array = Array();  //loop through array data<br />
  for (i = 0; i &lt;= 4; i++){<br />
    //create empty array for internal data<br />
    var dat2:Array = Array();<br />
    //extract node data<br />
    var playID   = topLevel.childNodes[3].childNodes[i].attributes.ID;<br />
    var playName  = topLevel.childNodes[3].childNodes[i].attributes.Name;<br />
    var playChip  = topLevel.childNodes[3].childNodes[i].childNodes[0];<br />
</tt><tt><br />
    //set data into internal array<br />
    //not sequence of functions (inside out):<br />
    // 1. set playChip to a string - node data is being held as an object<br />
    // 2. replace $ with a blank (see function)<br />
    // 3. replace , with a blank (see function)<br />
    // 4. set value as a numeric<br />
    dat2[0]   = Number(replace(replace(playChip.toString(),"$"),","));<br />
    dat2[1]   = playID;<br />
    dat2[2]   = playName;<br />
    dat2[3]   = playChip;<br />
</tt><tt><br />
    //set internal array into external array<br />
    //this creates a multi-dimensional array<br />
    dat[i] = dat2;<br />
  }</tt><tt>  //sort on index 0 with Numeric descending<br />
  dat.sortOn([0],2|16);//trace output<br />
  for (i = 0; i &lt;= 4; i++) {<br />
    trace(i+". "+dat[i][3]+" "+dat[i][2]+" at "+dat[i][4]+" each");<br />
  }<br />
}</tt></td>
</tr>
</table>
<p>Now test the movie (Ctrl+Enter) and check out the chip counts.</p>
<p>Incidentally, if you&#8217;re a poker buff, check out how this actually looks on screen by watching the World Series of Poker at <a href="http://www.worldseriesofpoker.com/">http://www.worldseriesofpoker.com/</a></p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fmisc%2Ftricks%2Fsorting-multi-dimensional-data-in-actionscript%2F', 'Sorting+XML-based+Multi-Dimensional+Data+in+ActionScript')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/misc/tricks/sorting-multi-dimensional-data-in-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fantastic article on being a software developer</title>
		<link>http://www.matsays.com/soapbox/fantastic-article-on-being-a-software-developer/</link>
		<comments>http://www.matsays.com/soapbox/fantastic-article-on-being-a-software-developer/#comments</comments>
		<pubDate>Sat, 24 Mar 2007 17:59:01 +0000</pubDate>
		<dc:creator>Mat</dc:creator>
				<category><![CDATA[Good Resources]]></category>
		<category><![CDATA[IMD223 Advanced Scripting]]></category>
		<category><![CDATA[IMD325 UCD I]]></category>
		<category><![CDATA[IMD402 Server Side Scripting]]></category>
		<category><![CDATA[Soapbox]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://www.mobimeet.com/soapbox/fantastic-article-on-being-a-software-developer</guid>
		<description><![CDATA[Here&#8217;s a fantastic article &#8211; &#8220;Top ten things ten years of professional software development has taught me&#8220;.  Read it.  And you should also check out his inspiration &#8230; &#8220;Michael McDonough’s Top Ten Things They Never Taught Me in Design School&#8220;.  Great stuff &#8230;

addthis_pub = 'mobimeet';

]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a fantastic article &#8211; &#8220;<a rel="bookmark" target="_blank" href="http://www.taylor.se/blog/2007/03/22/top-ten-things-ten-years-of-professional-software-development-has-taught-me/" title="Top ten things ten years of professional software development has taught me"><font color="#666666">Top ten things ten years of professional software development has taught me</font></a>&#8220;.  Read it.  And you should also check out his inspiration &#8230; &#8220;<a target="_blank" href="http://www.designobserver.com/archives/000121.html" title="Michael McDonough’s Top Ten Things They Never Taught Me in Design School">Michael McDonough’s Top Ten Things They Never Taught Me in Design School</a>&#8220;.  Great stuff &#8230;</p>
<script type="text/javascript">
addthis_pub = 'mobimeet';
</script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', 'http%3A%2F%2Fwww.matsays.com%2Fsoapbox%2Ffantastic-article-on-being-a-software-developer%2F', 'Fantastic+article+on+being+a+software+developer')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://www.matsays.com/images/addthis-plusred.png" width="28" height="16" border="0" alt="Share this post on digg, del.icio.us, facebook, blah blah blah" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
]]></content:encoded>
			<wfw:commentRss>http://www.matsays.com/soapbox/fantastic-article-on-being-a-software-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
