<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ref="http://purl.org/rss/1.0/modules/reference/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://purl.org/rss/1.0/">
	<channel rdf:about="http://www.teratechnologies.net/stevekamerman/rss.rdf">
		<title>Steve Kamerman&#039;s Blog</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php</link>
		<description><![CDATA[When did I transform from a Linux Guru into a Programmer????]]></description>
		<items>
			<rdf:Seq>
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080710-203456" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080618-112602" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080617-052816" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080326-163521" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080215-065225" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080110-093749" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070924-154417" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070914-013838" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070824-145713" />
				<rdf:li resource="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070514-231616" />
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080710-203456">
		<title>FreeBSD watch command is not GNU/Linux watch command</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080710-203456</link>
		<description><![CDATA[Having done Linux administration for over 10 years now, I use the watch command almost every day.  On Linux, watch will run a command every couple seconds.  It&#039;s particularly nice for watching files change:<br /><br /><code><br /># watch ls -lah<br /></code><br /><br />This example will keep showing the output of ls -lah every 2 seconds.<br /><br />About a year ago I switched a couple servers over to FreeBSD 6.1 because of it&#039;s security features and more stable development model.  For the last year I&#039;ve been occasionally using the watch command on FreeBSD and getting an annoying error like this:<br /><br /><code><br />[root@devel /backup]# watch ls -lah<br />watch: fatal: bad device name<br /></code><br /><br />Today it finally occured to me to look at the manpage:<br /><br /><code><br />WATCH(8)                FreeBSD System Manager&#039;s Manual               WATCH(8)<br /><br />NAME<br />     watch -- snoop on another tty line<br /><br />SYNOPSIS<br />     watch  -cinotW -f snpdev tty<br /><br />DESCRIPTION<br />     The watch utility allows the user to examine all data coming through a<br />     specified tty using the snp(4) device.  If the snp(4) device is not<br />     available, watch will attempt to load the module (snp).  The watch util-<br />     ity writes to standard output.<br /></code><br /><br />It hardly looks like the watch I know!  It turns out that FreeBSD has a different use for watch - snooping on other consoles.  On FreeBSD, the GNU watch (like on Linux) is called <b>gnu-watch</b>.  If you don&#039;t want to install it, you can easily whip up a poor-man&#039;s replacement:<br /><br /><code><br />#!/usr/local/bin/bash<br />while [ 1 -lt 2 ]<br />do<br />clear<br />date<br />echo ------------------------------------<br />eval $@<br />sleep 2<br />done<br /></code><br /><br />TIP: To replace the default &#039;watch&#039; with this script, save the above script as <b>/root/watch</b>, then make it executable, <b>chmod +x /root/watch</b> and alias it in your shell, <b>alias watch=&#039;/root/watch&#039;</b>.  You can save this alias permenantly with the bash shell by adding it to ~/.bash_profile .<br /><br />Here&#039;s a sample output from the poor-man&#039;s watch:<br /><code><br />Thu Jul 10 22:09:27 EDT 2008<br />------------------------------------<br />total 17113832<br />drwxr-xr-x   3 root  wheel   512B Jul 10 21:03 .<br />drwxr-xr-x  21 root  wheel   512B Jul 10 18:25 ..<br />-rw-r--r--   1 root  wheel    97M Jul 10 15:41 archive1.tar<br />-rw-r--r--   1 root  wheel    40M Jul 10 15:41 archive1.tar.bz2<br />-rw-r--r--   1 root  wheel   308M Jul 10 17:19 archive2.tar<br />-rw-r--r--   1 root  wheel    93M Jul 10 17:19 archive2.tar.bz2<br />-rw-r--r--   1 root  wheel   600M Jul 10 17:13 archive2a.tar<br />-rw-r--r--   1 root  wheel   192M Jul 10 17:13 archive2a.tar.bz2<br />-rw-r--r--   1 root  wheel   3.3G Jul 10 19:09 archive2b.tar<br />-rw-r--r--   1 root  wheel   1.4G Jul 10 19:09 archive2b.tar.bz2<br />-rw-r--r--   1 root  wheel   5.4G Jul 10 19:33 archive2c.tar<br />-rw-------   1 root  wheel   1.9G Jul 10 22:09 archive2c.tar.bz2<br />-rw-r--r--   1 root  wheel   2.1G Jul 10 17:44 archive2d.tar<br />-rw-r--r--   1 root  wheel   886M Jul 10 16:08 archive3.tar<br />drwxr-xr-x   2 root  wheel   512B Jul 10 19:44 scripts<br /></code>]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080618-112602">
		<title>Dreamweaver crashes every day</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080618-112602</link>
		<description><![CDATA[I use Adobe Creative Suite 3 (CS3) Web Premium every day, Flash, Fireworks, Photoshop, but most of all Dreamweaver.  I consider Dreamweaver CS3 to be the best HTML/CSS visual editor available and a it&#039;s a very handy FTP client as well.  It also serves as a nice text editor with syntax highlighting for PHP (although PDT for Eclipse is MUCH better).  My problem is that it crashes on me almost every day with this really annoying error: <b>Runtime Error!  This application has requested the Runtime to terminate it in an unusual way.</b>  Here&#039;s what it looks like:<br /><br /><img src="images/dreamweaver_crash.jpg" width="476" height="257" border="0" alt="" /> <br /><br />This error makes my blood boil!  I&#039;ve done everything to try it including, but not limited to:<br /><br /><h3>Delete the configuration Files</h3><br />This seems to give me the most success.  Dreamweaver stores a file cache and some non-site related settings in <b>C:\Users\[your username]\AppData\Roaming\Adobe\Dreamweaver 9\Configuration</b>.  If you delete or rename this directory then Dreamweaver will recreate it when it starts up.<br /><br /><h3>Delete the Dreamweaver Windows Prefetch file</h3><br />When a program starts up, Windows trys to optimize the startup process by creating a &quot;cache&quot; type file in <b>C:\windows\Prefetch</b>.  Next time the program opens it uses this file to speed up the process.  You can safely delete everything in the Prefetch folder.  Doing this helped me get Dreamweaver working yesterday.<br /><br /><h3>Get rid of Logitech SetPoint</h3><br />Someone on an Adobe forum said this worked for them - I haven&#039;t had much success<br /><br /><h3>Restart computer with only essential processes enabled</h3><br />Also from Adobe, this seems to have no impact on my computer - it still crashes.<br /><br /><h3>Maybe it&#039;s the 8KB file bug???</h3><br />According to many people on Adobe&#039;s forum, if you a working on a file that is exactly 8,192 bytes (8KB) Dreamweaver will crash.  Well, my files are taking up 8,192K because the block size on my disk pushes 7+K files up to 8,192 (look at &quot;size on disk&quot;), but I put a huge HTML comment at the end of the file to push it past 10K and it didn&#039;t help.<br /><br /><h3>Doing the exact same thing every time will make Dreamweaver crash every time</h3><br />Here&#039;s my most effective solution as of this morning: once Dreamweaver crashes, you can&#039;t do the exact same thing when you reopen it or it will just keep crashing.  I was trying to add a 4x3 table to a document and everytime I did Insert-&gt;Table-&gt;OK it immediately crashed (I did this 10+ times while changing other Windows stuff).  Then I went to show my business partner and instead of adding a table, I went to a different Site and changed some code around, then when back to the original site and BAM!  it works fine now!  What the <b>HECK</b> is going on here?<br /><br /><h3>Final thoughts</h3><br />You know, I&#039;ve been working with Linux and open source software for over 10 years, and I finally break down and by a $2,000+ software package - I expect it to work!  If it doesn&#039;t work I expect that I can get support to make it work (and not that &quot;please restart your computer then uninstall/reinstall&quot; BS)!  Come on Adobe!!!  If I charge my clients &gt;$100/hr and I have to fight with Dreamweaver for 1 hr per day, where&#039;s my $36,500 from Adobe for the last year?<br /><br />P.S. I think the problem is related to MS Visual Studio 2005&#039;s runtime update and Vista or something.]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080617-052816">
		<title>Bidirectional LocalConnections in Actionscript 3 (Flex 2 / Flex 3 / Flash CS3)</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080617-052816</link>
		<description><![CDATA[Although I use AMFPHP RemoteObjects with the Cairngorm Framework everyday, I never had a need for a simple LocalConnection.  LocalConnections let you communicate between running SWFs, the only problem is that they are unidirectional.  SWF A can make a new LocalConnection to SWF B and invoke it&#039;s methods, but SWF B can&#039;t contact SWF A.  The way to get around this is to make another LocalConnection back from SWF B to SWF A.  Trying to wrap my head around receiving and sending connections was starting to make me angry!  They are annoyingly misleading - the receiving SWF needs to .connect() to a named connection, whereas the sending SWF doesn&#039;t - it just calls .send() with the same named connection.  I figured I could do the world a favor and abstract this confusion for you.<br /><br />Here is the result (demonstrated with a Flex SWF and a Flash SWF):<br /><br />
<script src="/Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<h3>Flex  SWF<br />
    <script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','300','height','300','src','/steve_blog_content/BiDirLocalConnection/LCTest_flex','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','/steve_blog_content/BiDirLocalConnection/LCTest_flex' ); //end AC code
    </script>
  <noscript>
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="300">
    <param name="movie" value="/steve_blog_content/BiDirLocalConnection/LCTest_flex.swf" />
    <param name="quality" value="high" />
    <embed src="/steve_blog_content/BiDirLocalConnection/LCTest_flex.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="300"></embed>
  </object>
  </noscript>
</h3>
<h3>Flash SWF<br />
  <script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','300','height','300','src','/steve_blog_content/BiDirLocalConnection/LCTest_flash','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','/steve_blog_content/BiDirLocalConnection/LCTest_flash' ); //end AC code
    </script>
  <noscript>
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="300" height="300">
    <param name="movie" value="/steve_blog_content/BiDirLocalConnection/LCTest_flash.swf" />
    <param name="quality" value="high" />
    <embed src="/steve_blog_content/BiDirLocalConnection/LCTest_flash.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="300" height="300"></embed>
  </object>
  </noscript>
</h3>
 <br /><br />In both the Flex MXML and the Flash FLA, I am including my BiDirLocalConnection class and it does all the hard work for me.<br /><br />To make this bidirectional concept easier to handle, I introduced something called <b>Roles</b>.  There are two roles available to your SWFs: <b>Master</b> and <b>Slave</b>.  You must pick one of these roles when you instantiate the BiDirLocalConnection Object.  If you have more than one running SWF in a given Role you will get an error on the newest one.<br /><br />Here&#039;s an example of how to use the class in Flex:<br /><br /><code><br />import net.teratechnologies.common.BiDirLocalConnection;<br /><br />private var connection:BiDirLocalConnection;<br /><br />private function init():void{<br />    connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_MASTER,this);<br />    connection.connect();<br />}<br /></code><br /><br />The constructor takes three arguments (the third is optional):<br /><code><br />BiDirLocalConnection(role:String,callbackScope:Object,connectionBaseName:String=&quot;BiDirConnection&quot;)<br /></code><br /><br />- <b>role:</b> The role of this SWF (ROLE_MASTER or ROLE_SLAVE)<br />- <b>callbackScope:</b> When a SWF connects to this one and tries to invoke a method (call a function), where should it look to find the method?  Normally you specify <b>this</b> so the remote SWF has access to the functions in your current scope.<br />- <b>connectionBaseName:</b> This optional argument is only required if you have more than one BiDirLocalConnection at the same time.  You can use any string here and it will serve as the prefix for the two LocalConnection connectionNames that are used.<br /><br />Here is the complete code from the <b>Slave</b> in Flash CS3 as seen above.  There are three things on the stage: TextArea (<b>receiveText</b>), TextInput (<b>sendText</b>) and a Button (<b>sendButton</b>):<br /><code><br />import net.teratechnologies.common.BiDirLocalConnection;<br />			<br />var connection:BiDirLocalConnection;<br /><br />function init():void{<br />	sendButton.addEventListener(MouseEvent.CLICK,send);<br />	connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_SLAVE,this);<br />	connection.connect();<br />}<br />function send(e:Event):void{<br />	connection.send(&#039;showText&#039;,sendText.text);<br />}<br />function showText(t:String):void{<br />	receiveText.text = &quot;Received: &quot;+t+&quot;\n&quot;+receiveText.text;<br />}<br /><br />init();<br />stop();<br /></code><br /><br />Now here is the complete code for the Flex MXML file:<br /><code><br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;vertical&quot; creationComplete=&quot;init()&quot;&gt;<br />	&lt;mx:Script&gt;<br />		&lt;![CDATA[<br />			import net.teratechnologies.common.BiDirLocalConnection;<br />			<br />			private var connection:BiDirLocalConnection;<br />			<br />			private function init():void{<br />				sendButton.addEventListener(MouseEvent.CLICK,send);<br />				connection = new BiDirLocalConnection(BiDirLocalConnection.ROLE_MASTER,this);<br />				connection.connect();<br />			}<br />			private function send(e:Event):void{<br />				connection.send(&#039;showText&#039;,sendText.text);<br />			}<br />			public function showText(t:String):void{<br />				receiveText.text = &quot;Received: &quot;+t+&quot;\n&quot;+receiveText.text;<br />			}<br />			<br />		]]&gt;<br />	&lt;/mx:Script&gt;<br />	&lt;mx:Panel width=&quot;100%&quot; height=&quot;100%&quot; layout=&quot;absolute&quot; title=&quot;Flex 2/3&quot;&gt;<br />		&lt;mx:TextArea id=&quot;receiveText&quot; right=&quot;10&quot; bottom=&quot;39&quot; left=&quot;10&quot; top=&quot;10.&quot;/&gt;<br />		&lt;mx:TextInput id=&quot;sendText&quot; left=&quot;10&quot; right=&quot;72&quot; bottom=&quot;10&quot;/&gt;<br />		&lt;mx:Button label=&quot;Send&quot; id=&quot;sendButton&quot; right=&quot;10&quot; bottom=&quot;10&quot;/&gt;<br />	&lt;/mx:Panel&gt;<br />	<br />&lt;/mx:Application&gt;<br /></code><br /><br />It really is quite simple, the SWFs are calling each other&#039;s &quot;showText&quot; functions with the text of the TextInput box as an argument.  You can pass as many arguments as you want to connection.send(), and they don&#039;t need to be simple Strings.<br /><br />Finally, here is the ActionScript Code for the BiDirLocalConnection class itself:<br /><br /><code><br />package net.teratechnologies.common {<br />	import flash.net.LocalConnection;<br />	<br />	public class BiDirLocalConnection{<br />		<br />		public static const ROLE_MASTER:String = &quot;master&quot;;<br />		public static const ROLE_SLAVE:String = &quot;slave&quot;;<br />		<br />		private var txConnName:String;<br />		private var rxConnName:String;<br />		private var txLC:LocalConnection = new LocalConnection();<br />		private var rxLC:LocalConnection = new LocalConnection();<br />		private var callbackScope:Object;<br />		<br />		public function BiDirLocalConnection(role:String,callbackScope:Object,connectionBaseName:String=&quot;BiDirConnection&quot;){<br />			if(role == ROLE_MASTER){<br />				txConnName = connectionBaseName + &quot;_TX&quot;;<br />				rxConnName = connectionBaseName + &quot;_RX&quot;;<br />			}else{<br />				rxConnName = connectionBaseName + &quot;_TX&quot;;<br />				txConnName = connectionBaseName + &quot;_RX&quot;;<br />			}<br />			this.callbackScope = callbackScope;<br />		}<br />		public function connect():void{<br />			trace(rxConnName);<br />			rxLC.connect(rxConnName);<br />			rxLC.client = callbackScope;<br />		}<br />		public function send(methodName:String,...rest):void{<br />			txLC.send(txConnName,methodName,rest);<br />		}<br />	}<br />}<br /></code><br /><br /> <a href="http://www.teratechnologies.net/steve_blog_content/BiDirLocalConnection/LCTest.zip" >You can also download the Flex 2/3 file, Flash FLA and Class file in a ZIP file.</a> ]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080326-163521">
		<title>Deleting tons of files in Linux (Argument list too long)</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080326-163521</link>
		<description><![CDATA[Quick Linux Tip:<br /><br />If you&#039;re trying to delete a very large number of files at one time (I deleted a directory with 485,000+ today), you will probably run into this error:<br /><br /><code><br />/bin/rm: Argument list too long.<br /></code><br /><br />The problem is that when you type something like &quot;rm -rf *&quot;, the &quot;*&quot; is replaced with a list of every matching file, like &quot;rm -rf file1 file2 file3 file4&quot; and so on.  There is a reletively small buffer of memory allocated to storing this list of arguments and if it is filled up, the shell will not execute the program.<br /><br />To get around this problem, a lot of people will use the find command to find every file and pass them one-by-one to the &quot;rm&quot; command like this:<br /><br /><code><br />find . -type f -exec rm -v {} \;<br /></code><br /><br />My problem is that I needed to delete 500,000 files and it was taking <b>way too long</b>.<br /><br />I stumbled upon a much faster way of deleting files - the &quot;find&quot; command has a &quot;-delete&quot; flag built right in!  Here&#039;s what I ended up using:<br /><br /><code><br />find . -type f -delete<br /></code><br /><br />Using this method, I was deleting files at a rate of about 2000 files/second - much faster!<br /><br />You can also show the filenames as you&#039;re deleting them:<br /><br /><code><br />find . -type d -print -delete<br /></code><br /><br />...or even show how many files will be deleted, then time how long it takes to delete them:<br /><br /><code><br />root@devel# ls -1 | wc -l &amp;&amp; time find . -type f -delete<br />8532<br /><br />real    0m3.660s<br />user    0m0.036s<br />sys     0m0.552s<br /></code>]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080215-065225">
		<title>osCommerce Webmaster’s Guide to Selling Online</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080215-065225</link>
		<description><![CDATA[<img src="images/osCommerceimage.2.jpg" width="125" height="159" border="0" alt="" /><br />If you&#039;re selling products online with osCommerce, check out the new book <b><a href="http://www.packtpub.com/osCommerce-Webmasters-Guide-to-Selling-Online/book" target="_blank" >osCommerce Webmaster&#039;s Guide to Selling Online</a></b>.  Most notably, this book focuses on increasing your sales and profits through SEO, Marketing, Design, Selling Strategies and more.<br /><br />I will be evaluating this book in the near future and writing a full review, so check back later to find out more information on the osCommerce Webmaster&#039;s Guide to Selling Online!]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080110-093749">
		<title>Flex 2 DataGrid ItemRenderers are re-used! Warning!!!</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry080110-093749</link>
		<description><![CDATA[After battling with Flex 2&#039;s DataGrid ItemRenderer for a few hours, I have finally figured out how they <b>really</b> work.<br /><br /><h3>The Scenario</h3><br />Let&#039;s say you want to have a DataGrid with a thumbnail in one of the cells.  To do this you would assign the DataGridColumn an ItemRenderer.  Here&#039;s a quick and dirty MXML ItemRenderer that will work:<br /><br /><code><br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;mx:HBox xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; width=&quot;100%&quot; height=&quot;100%&quot; verticalScrollPolicy=&quot;off&quot; horizontalScrollPolicy=&quot;off&quot;&gt;<br />  &lt;mx:Image id=&quot;thumbnail&quot; width=&quot;25&quot; height=&quot;25&quot;/&gt;<br />&lt;/HBox&gt;<br /></code><br /><br />Now, when the DataGrid goes to render the cell the first time, it instantiates the ItemRenderer and sets the &quot;data&quot; property to the data of the current row in the DataGrid.  Let&#039;s say you have a property called &quot;thumb_src&quot; in the data.  You could just bind the image&#039;s source property to &quot;data.thumb_src&quot; and you probably wouldn&#039;t have any problems, but if you wanted to do anything to the data before you use it you will run into trouble. <b>The problem is that DataGrids only create as many ItemRenderers as are visible in the grid</b>, so if you have 1000 rows in your DataGrid but you can only see 10, only 10 ItemRenderers will be created (more will be created on demand if you resize the DataGrid).  Once a cell is scrolled off the top of the grid it is reused at the bottom (and visa-versa).  When the ItemRenderer is reused, the DataGrid sets the data property with the new data and that&#039;s it - <b>it is not destroyed re-instantiated</b>.<br /><br /><h3>The Problem</h3><br />All this becomes a major problem when you use the creationComplete event to setup some stuff on your renderer, since this event is only fired once - then renderer will be used  and re-used to display the data from many different cells.  When this problem occurs, you will see data in the ItemRenderer cells being thrown around seemingly at random when you scroll the DataGrid - it will probably drive you crazy!<br /><br /><h3>The Solution</h3><br />You need to setup / clear <b>everything</b> in the renderer when the data property is set.  The easiest way to do this is to override the Container&#039;s &quot;data&quot; setter function like this:<br /><br /><code><br />public override function set data(value:Object):void{<br />  // This will fire off the FlexEvent.DATA_CHANGE Event<br />  super.data = value;<br />  // if the value is null this cell is empty<br />  if(value == null){<br />    // clear all the controls<br />    return;<br />  }<br />  // set the controls with this data<br />}<br /></code><br /><br />You could also add an event listener for FlexEvent.DATA_CHANGE, which is fired off by the Container superclass.<br /><br />Here&#039;s a <a href="http://devel.teratechnologies.net/steve_examples/Flex_DataGridProblem/DataGridTest.html" target="_blank" >great example</a> that I made that shows the problem.  You can right click on the application and hit &quot;View Source&quot; to see the code, or <a href="http://devel.teratechnologies.net/steve_examples/Flex_DataGridProblem/srcview/index.html" target="_blank" >go there directly</a>.]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070924-154417">
		<title>My desk gets another monitor :D</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070924-154417</link>
		<description><![CDATA[So the other day my 20.1&quot; Widescreen Viewsonic monitor started acting funny and turning off on me (this is my 2nd one that has died), so I replaced it with a 22&quot; Widescreen Xbrite and the new monitor rocks!  I figured I would send the Viewsonic back <b>again</b> and have it replaced <b>again</b>, but I thought I would give it another shot as-is first.  It seems to run fine unless I leave it on for 12-24 hours at a time so I decided to take it to my office.<br /><br />Since I already have 2x 17&quot; Flat Panels at my office, I was going to need another video card to support more than 2. After a little researching on the net, I jumped on <a href="http://www.newegg.com/" target="_blank" >Newegg.com</a> and found myself a couple dual-head PCI video cards to throw in with my ATI Radeon X1650 PCIe.  I got 2 because the only Radeon series for under $100 were either 1xDVI+1xVGA or 2xDVI Low Profile.  I got one of each.  The first one I received was a <a href="http://www.newegg.com/Product/Product.asp?Item=N82E16814129042" target="_blank" >VisionTek Radeon 7000 64MB PCI ($34.99)</a>.  I installed the card and plugged in my 20.1&quot; Viewsonic and turned on the computer - no joy.  I installed the drivers and prayed it wouldn&#039;t mess up my X1650.  Drivers installed no problem, but still no display.  Restarted - no display.  Now I could see the other card and the monitors in the dislpay properties, but when I &quot;attached&quot; them they didn&#039;t do anything.  I restarted it again and went into the BIOS and changed <b>Init Display First</b> from <b>PCIe</b> to <b>PCI Card</b>.  I saved the changes and booted into windows - whalah! 3 monitors - all playing nicely :).  The computer seems like it&#039;s going to die when it starts up because everything slows down to a crawl for a little while, but then it works as expected.  This 3-monitor setup seems very efficient to me.  I&#039;ll have to report back after I&#039;ve used it for a while.<br /><br /><a href="http://devel.teratechnologies.net/images/Tri-Monitors.jpg" target="_blank" ><img src="http://devel.teratechnologies.net/images/Tri-Monitors_small.jpg" width="240" height="180" border="0" alt="" id="img_float_left" /></a><br /><br /><br /><br /><b>My Setup</b><br />ATI Radeon X1650 PCIe 512MB Dual Head (2x DVI)<br />ATI Radeon 7000 PCI 64MB Dual Head (1x DVI, 1x VGA)<br />2x Dell 17&quot; Flat Panels<br />1x Viewsonic 20.1&quot; Widescreen Flat Panel<br /><br /><br /><br />]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070914-013838">
		<title>NVIDIA SLI Zone Giveaway</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070914-013838</link>
		<description><![CDATA[I happened to be browsing around tonight and noticed that NVIDIA has been giving away 1 prize per day for a year!  Here&#039;s the catch - you need to visit the site every 7 days to see if you won or your prize will go to the next guy!  Stupid!  To make matters worse, only way to see if you won is to use this annoying marquee on their site!<br /><br /><a href="http://www.slizone.com/object/slizone_sli_giveaway.html" target="_blank" >http://www.slizone.com/object/slizone_sli_giveaway.html</a><br /><br />So naturally I decided to make everyone&#039;s life a little easier and pumped out a handly little Flex2 app that shows who won for the last week.  It is updated in real time since I&#039;m just grabbing the winners off the same RSS feed that&#039;s feeding the NVIDIA website.  Check it out - it&#039;s cool, it&#039;s Flex, and it might just save your butt!<br /><br /><a href="http://devel.teratechnologies.net/nvidia_winners/" target="_blank" >http://devel.teratechnologies.net/nvidia_winners/</a>]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070824-145713">
		<title>ubuntu 64 with desktop effects!</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070824-145713</link>
		<description><![CDATA[I recently installed ubuntu 7.10 (feisty fawn) on my Compaq R3000.  Since this laptop has an AMD Athlon 64 (3500+), I decided to use the AMD64 version of ubuntu.  I was able to get it installed and running well without much fussing.  There were 3 main things I wanted to accomplish that did not immediately work:<br /><br />Install Flash Player 9<br />Install NVidia Drivers and use GLX Desktop Effects<br />Configure and use the internal wireless card<br /><br />I was able to get Flash Player 9 working with nspluginwrapper - this package allows you to install 32-bit Mozilla plugins on a 64-bit version of FireFox.<br /><br />I got the wireless card working with the bcm43xx package.<br /><br />I might write more detailed instructions on getting the last two things working later, but I just got the NVidia 64-bit drivers working today so I will go into more detail about them.<br /><br /><b>Installing the 64-bit NVidia drivers</b><br />I read about this great NVidia installation script called <i>Envy</i> in Linux Journal today.<br />Go to <a href="http://albertomilone.com/nvidia_scripts1.html" target="_blank" >http://albertomilone.com/nvidia_scripts1.html</a> and download the deb file (currently envy_0.9.7-0ubuntu8_all.deb).<br />Run the file to install Envy.<br /><br />After Envy is installed, run it from your GUI by going to a terminal and typing &quot;sudo envy -g&quot; (-g == graphical)<br /><br />The installer will download 60+ packages and install them for you, including the NVidia driver for your computer/configuration.<br /><br />When it is done you will need to restart your computer.<br /><br /><b>Enabling Desktop Effects</b><br />When it comes back up you should be able to enable the desktop effects by going to &quot;System&quot;=&gt;&quot;Preferences&quot;=&gt;&quot;Desktop Effects&quot; and enabling the options you want.<br /><br />If you have the same bad luck that I did, you will notice that the desktop effects will have made your title bar and other window decorations disappear.  Although I&#039;m not sure what causes this problem, here&#039;s how I fixed it:<br /><br />sudo nano /etc/X11/xorg.conf<br /><br />Find the &quot;Device&quot; section and add:<br />    Option &quot;AddARGBVisuals&quot; &quot;True&quot;<br />    Option &quot;AddARGBGLXVisuals&quot; &quot;True&quot;<br />    Option &quot;NoLogo&quot; &quot;True&quot;<br /><br />Find the &quot;Screen&quot; section and make sure the default depth is 24:<br />    DefaultDepth    24<br /><br />Now restart your computer and you should be good to go!<br /><br /><b>My /etc/X11/xorg.conf for reference</b><br /># /etc/X11/xorg.conf (xorg X Window System server configuration file)<br />#<br /># This file was generated by dexconf, the Debian X Configuration tool, using<br /># values from the debconf database.<br />#<br /># Edit this file with caution, and see the xorg.conf(5) manual page.<br /># (Type &quot;man xorg.conf&quot; at the shell prompt.)<br />#<br /># This file is automatically updated on xserver-xorg package upgrades *only*<br /># if it has not been modified since the last upgrade of the xserver-xorg<br /># package.<br />#<br /># If you have edited this file but would like it to be automatically updated<br /># again, run the following command:<br />#   sudo dpkg-reconfigure -phigh xserver-xorg<br /><br />Section &quot;ServerLayout&quot;<br />    Identifier     &quot;Default Layout&quot;<br />    Screen         &quot;Default Screen&quot; 0 0<br />    InputDevice    &quot;Generic Keyboard&quot;<br />    InputDevice    &quot;Configured Mouse&quot;<br />    InputDevice    &quot;stylus&quot; &quot;SendCoreEvents&quot;<br />    InputDevice    &quot;cursor&quot; &quot;SendCoreEvents&quot;<br />    InputDevice    &quot;eraser&quot; &quot;SendCoreEvents&quot;<br />    InputDevice    &quot;Synaptics Touchpad&quot;<br />EndSection<br /><br />Section &quot;Files&quot;<br /><br />	# path to defoma fonts<br />    FontPath        &quot;/usr/share/fonts/X11/misc&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/cyrillic&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/100dpi/:unscaled&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/75dpi/:unscaled&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/Type1&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/100dpi&quot;<br />    FontPath        &quot;/usr/share/fonts/X11/75dpi&quot;<br />    FontPath        &quot;/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType&quot;<br />EndSection<br /><br />Section &quot;Module&quot;<br />    Load           &quot;i2c&quot;<br />    Load           &quot;bitmap&quot;<br />    Load           &quot;ddc&quot;<br />    Load           &quot;extmod&quot;<br />    Load           &quot;freetype&quot;<br />    Load           &quot;glx&quot;<br />    Load           &quot;int10&quot;<br />    Load           &quot;vbe&quot;<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;Generic Keyboard&quot;<br />    Driver         &quot;kbd&quot;<br />    Option         &quot;CoreKeyboard&quot;<br />    Option         &quot;XkbRules&quot; &quot;xorg&quot;<br />    Option         &quot;XkbModel&quot; &quot;pc105&quot;<br />    Option         &quot;XkbLayout&quot; &quot;us&quot;<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;Configured Mouse&quot;<br />    Driver         &quot;mouse&quot;<br />    Option         &quot;CorePointer&quot;<br />    Option         &quot;Device&quot; &quot;/dev/input/mice&quot;<br />    Option         &quot;Protocol&quot; &quot;ExplorerPS/2&quot;<br />    Option         &quot;ZAxisMapping&quot; &quot;4 5&quot;<br />    Option         &quot;Emulate3Buttons&quot; &quot;true&quot;<br />    Option         &quot;Buttons&quot; &quot;7&quot;<br />    Option         &quot;ButtonMapping&quot; &quot;1 2 3 6 7&quot;<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;Synaptics Touchpad&quot;<br />    Driver         &quot;synaptics&quot;<br />    Option         &quot;SendCoreEvents&quot; &quot;true&quot;<br />    Option         &quot;Device&quot; &quot;/dev/psaux&quot;<br />    Option         &quot;Protocol&quot; &quot;auto-dev&quot;<br />    Option         &quot;HorizScrollDelta&quot; &quot;0&quot;<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;stylus&quot;<br />    Driver         &quot;wacom&quot;<br />    Option         &quot;Device&quot; &quot;/dev/input/wacom&quot;<br />    Option         &quot;Type&quot; &quot;stylus&quot;<br />    Option         &quot;ForceDevice&quot; &quot;ISDV4&quot;		# Tablet PC ONLY<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;eraser&quot;<br />    Driver         &quot;wacom&quot;<br />    Option         &quot;Device&quot; &quot;/dev/input/wacom&quot;<br />    Option         &quot;Type&quot; &quot;eraser&quot;<br />    Option         &quot;ForceDevice&quot; &quot;ISDV4&quot;		# Tablet PC ONLY<br />EndSection<br /><br />Section &quot;InputDevice&quot;<br />    Identifier     &quot;cursor&quot;<br />    Driver         &quot;wacom&quot;<br />    Option         &quot;Device&quot; &quot;/dev/input/wacom&quot;<br />    Option         &quot;Type&quot; &quot;cursor&quot;<br />    Option         &quot;ForceDevice&quot; &quot;ISDV4&quot;		# Tablet PC ONLY<br />EndSection<br /><br />Section &quot;Monitor&quot;<br />    Identifier     &quot;Generic Monitor&quot;<br />    HorizSync       28.0 - 64.0<br />    VertRefresh     43.0 - 60.0<br />    Option         &quot;DPMS&quot;<br />EndSection<br /><br />Section &quot;Device&quot;<br />    Identifier     &quot;nVidia Corporation NV17 [GeForce4 420 Go 32M]&quot;<br />    Driver         &quot;nvidia&quot;<br />    Option &quot;AddARGBVisuals&quot; &quot;True&quot;<br />    Option &quot;AddARGBGLXVisuals&quot; &quot;True&quot;<br />    Option &quot;NoLogo&quot; &quot;True&quot;<br />EndSection<br /><br />Section &quot;Screen&quot;<br />    Identifier     &quot;Default Screen&quot;<br />    Device         &quot;nVidia Corporation NV17 [GeForce4 420 Go 32M]&quot;<br />    Monitor        &quot;Generic Monitor&quot;<br />    DefaultDepth    24<br />    SubSection     &quot;Display&quot;<br />        Depth       1<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />    SubSection     &quot;Display&quot;<br />        Depth       4<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />    SubSection     &quot;Display&quot;<br />        Depth       8<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />    SubSection     &quot;Display&quot;<br />        Depth       15<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />    SubSection     &quot;Display&quot;<br />        Depth       16<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />    SubSection     &quot;Display&quot;<br />        Depth       24<br />        Modes      &quot;1280x800&quot;<br />    EndSubSection<br />EndSection<br /><br />Section &quot;Extensions&quot;<br />    Option         &quot;Composite&quot; &quot;Enable&quot;<br />EndSection<br />]]></description>
	</item>
	<item rdf:about="http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070514-231616">
		<title>Tera-WURFL Goes Stable!</title>
		<link>http://www.teratechnologies.net/stevekamerman/index.php?entry=entry070514-231616</link>
		<description><![CDATA[Thanks to everyone who helped me test Beta 1.4.5RC1 - this pre-release was the stepping stone to version Stable 1.5.0.<br />I was lucky to get some help testing 1.4.5RC1 from a client that gets very high traffic. After upgrading from 1.4.4 to 1.4.5RC1, his server&#039;s mysqld process went from 20-40% down to 6%!<br /><br />Here&#039;s a quote from him:<br />&quot;The system gets over 2 million WAP hits per day ... The impact on the server is definitely significant. Before this, mysqld was using between 20% and 40% of the CPU, and now it&#039;s down to 6% or less. Load average on the box was averaging 3.84 before, and now it&#039;s averaging 2.72.&quot; <br /><br />I actually released &quot;Stable 1.5.0&quot; a few weeks ago and since released &quot;Stable 1.5.1&quot; but apparently I never applied the changes to the main Tera-WURFL.com site so you wouldn&#039;t have seen 1.5.1 in the downloads section.  It&#039;s up now so check it out!  It features a very high speed caching system that caches the entire device capabilities tree for top performance.<br /><br />I&#039;m currently looking for suggestions for new features and improvements that I can include in future releases of Tera-WURFL.  If you have something you&#039;d like to see please let me know!<br /><br />To download Tera-WURFL visit <a href="http://www.tera-wurfl.com/" target="_blank" >http://www.tera-wurfl.com/</a>.]]></description>
	</item>
</rdf:RDF>
