<?xml version="1.0" encoding="UTF-8"?><rss><channel>
<title>Ubergeek.tv: Games, Geek, Awesome Sauce</title> // the title of the feed
<description>Games, Geeks, Awesome Sauce</description> // small description
<link>http://ubergeek.tv</link><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=150</link> 
<title>Missing files</title> 
<description>Awesome missing stuff is back.<br/><br/>&lt;p&gt;Apologies all, I was on hiatus for a while as I biked across the country. During this period the computer that redirected cache.ubergeek.tv to my ip stopped working. This caused animations and things to stop working. I had added the dns entry but for some reason it still didn't work. Now that I'm back home it was obvious: I didn't add the alias to Apache! :O uber indeed.
&lt;/p&gt;&lt;p&gt;
Things should be working better now!&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=149</link> 
<title>Flex Conditional Compilation Tweak</title> 
<description>A little tweak to help make compilation more straightforward.<br/><br/>&lt;p&gt;
One of the more interesting Flex compiler features is &lt;a href=&quot;http://livedocs.adobe.com/flex/3/html/help.html?content=compilers_21.html&quot;&gt;conditional compilation.&lt;/a&gt; This has been a real boon for us in development on a larger project because we're using it to conditionally include fake testing data in an offline mode, or to use online services. The docs talk about using 'debugging' and 'release' variables to conditionally include things. The code they give looks like this:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;compiler&amp;gt;
    &amp;lt;define&amp;gt;
        &amp;lt;name&amp;gt;CONFIG::debugging&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
    &amp;lt;/define&amp;gt;
    &amp;lt;define&amp;gt;
        &amp;lt;name&amp;gt;CONFIG::release&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
    &amp;lt;/define&amp;gt;
&amp;lt;/compiler&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
But why would I want to update two variables for something that is mutually exclusive? In my use case I want to include one thing, and if that's false, include the other thing. More importantly I don't want to introduce errors into the system. Conditional compilation only includes when something is true. BUT I've found a good workaround:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;compiler&amp;gt;
    &amp;lt;define&amp;gt;
        &amp;lt;name&amp;gt;CONFIG::debugging&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;
    &amp;lt;/define&amp;gt;
    &amp;lt;define&amp;gt;
        &amp;lt;name&amp;gt;CONFIG::release&amp;lt;/name&amp;gt;
        &amp;lt;value&amp;gt;!CONFIG::debugging&amp;lt;/value&amp;gt;
    &amp;lt;/define&amp;gt;
&amp;lt;/compiler&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
And then you can do something similar to what they have in the docs:
&lt;/p&gt;
&lt;pre&gt;
package default{

	CONFIG::debugging
	public class MyClass{
		...
	}
	CONFIG::release
	public class MyClass{
		...
	}
}
&lt;/pre&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=145</link> 
<title>Bringing Flash to the iPhone?</title> 
<description>What is a realistic approach for bringing Flash to the iPhone?<br/><br/>&lt;p&gt;
So Adobe has decided to publicly talk about (&lt;a href=&quot;http://madowney.com/blog/2008/03/19/flash-on-the-iphone/&quot;&gt;again?&lt;/a&gt;) the news that they &lt;a href=&quot;http://www.flashmagazine.com/news/detail/flash_for_the_iphone_confirmed_at_fotb/&quot;&gt;are working on a flash port&lt;/a&gt; to the iphone. While this is a great idea, I definitely would agree with Steve that it won't run very well on the ARM processor. But lets pretend we're Adobe, and look at what's involved with making flash work on the iPhone.
&lt;/p&gt;
&lt;h3&gt;The Pros: &lt;/h3&gt;
&lt;h4&gt;Its only one phone.&lt;/h4&gt;
&lt;p&gt;
Compared to writing Flash for a pc, Adobe only needs to concern themselves with one system. This means they can perform optimizations that would probably cause them compatibility issues otherwise.
&lt;/p&gt;
&lt;h4&gt;Video Support is ARM-Friendly&lt;/h4&gt;
&lt;p&gt;
When Macromedia/Adobe chose On2's video tech, one of their considerations was &lt;a href=&quot;http://www.kaourantin.net/2005/08/quest-for-new-video-codec-in-flash-8.html&quot;&gt;portability&lt;/a&gt;.This means that we can assume quality video playback support, which should give most people warm fuzzies.
&lt;/p&gt;
&lt;h4&gt;The processor isn't slow&lt;/h4&gt;
&lt;p&gt;
&lt;a href=&quot;http://furbo.org/2007/08/21/what-the-iphone-specs-dont-tell-you/&quot;&gt;Looking at the specs&lt;/a&gt; of the iphone shows that its no slowpoke. Let's assume 400mhz. What can we do with 400Mhz on a very specific platform? A lot!
&lt;/p&gt;
&lt;h4&gt;Flash only draws what it needs&lt;/h4&gt;
&lt;p&gt;
Let's also look at this in the context of 'screen real estate'. The iPhone has a 480x320 pixel screen. Say you're viewing a flash movie on a web page. How much of the web page is going to be this movie? Let's assume that the flash is 25% of the screen. That's 120x80. Flash is optimized for drawing only what is necessary, and in most flash movies, this is the most cpu-intensive activity.
&lt;/p&gt;
&lt;p&gt;
So as a user resizes the screen, the flash will only need to draw whatever is necessary to fill the screen. If Safari for iPhone can report to the Flash Player the actual screen size, then the Flash Player can only draw what is needed, and sip the CPU as daintily as it can.
&lt;/p&gt;
&lt;p&gt;
What happens when the flash player fills the screen? Good question. I'll assume that the Flash Player will be an openGL accelerated surface within Safari. And this surface will be layered within Safari. Generally speaking, this is a sub-optimal way to use opengl. What you really want is to have Flash be unfettered with other views being composited on it. This is similar to having a wmode of 'window' on a pc. The flash does its thing, and the browser is almost completely out of the picture. This would be a tough trick to do, but if you could somehow transition out of Safari, and into 'just' flash, then you could get the power where you need it most.
&lt;/p&gt;
&lt;h3&gt;And the Cons&lt;/h3&gt;
&lt;p&gt;
But daintily sipping CPUs is not what the Flash Player is known for. In fact it can easily bring a computer to its knees if used wrongly. What are the major hurdles to overcome?
&lt;/p&gt;
&lt;h4&gt;The Great Unknown&lt;/h4&gt;
&lt;p&gt;
With a web page, browsers have their hands full. There is limitless possibilities in a web page. With flash, there are limitless possibilities, but these also need to be displayed 30 times a second. Regardless of how awesome the developers at Adobe are, they are not going to be able to make everything work at an acceptable speed. What about maybe only displaying every 30th frame? Nope, it can't work that way.
&lt;/p&gt;
&lt;p&gt;
Perhaps Safari will by default display a flash image, requiring activation before display. This is a pretty safe bet, as I'm sure Apple doesn't want Safari to be perceived as slow.
&lt;/p&gt;
&lt;h4&gt;RAM&lt;/h4&gt;
&lt;p&gt;The Flash Player uses a lot of ram. A LOT. The iPhone has 128MB of ram. And most of that will not be made available to Flash. If there is one place that Adobe developers will lose sleep and hair, it will be attempting to get Flash to work with practically no RAM. This seems to me the biggest hurdle, but I'm very interested to hear if anyone else has other ideas.
&lt;/p&gt;
&lt;p&gt;
It seems almost impossible for Flash to be able to operate on such a small footprint. The flash player will be writing memory to the drive faster than it can allocate it. Features such as BitmapData are so memory intensive that they could possibly be cut.
&lt;/p&gt;
&lt;h3&gt;So which version?&lt;/h3&gt;
&lt;p&gt;
With such rigid requirements, how possible is it that we can see a fully compatible release that mirrors a version on the pc? One that would get Big Steve's signoff?
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Flash 7 - If the Wii can do it, so can the iPhone :)&lt;/li&gt;
&lt;li&gt;Flash 8 - A possibility, but the BitmapData object makes things a bit hairy.&lt;/li&gt;
&lt;li&gt;Flash 9 - BitmapData, and supporting TWO virtual machines (for backwards compatibility). Not likely.&lt;/li&gt;
&lt;li&gt;Flash 10 - I've got an app idea for the iphone called Snowballs in Hell.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
No, I'd bet money that if flash came to the iPhone, it would not be any existing release. This sounds crazy, I know, because the point of flash is that it works so consistently across platforms. As the mobile market becomes increasingly relevant Adobe needs to be more of a player. 
&lt;/p&gt;
&lt;p&gt;
And &lt;a href=&quot;http://www.adobe.com/products/flashlite/&quot;&gt;Flash Lite&lt;/a&gt; hasn't really taken off as it should. Flash Lite is also specific to mobile, with the expectation that mobile would be 'its own thing'. But what's happened is that the 'normal' web is being put on phones, and so Flash Lite isn't an ideal candidate. Unless you're *screaming* for MIDI support.
&lt;/p&gt;
&lt;p&gt;
Instead it would be a new version that would have a sub-set of features. The important bits for video playback, but perhaps not everything you would expect.  There would be no need for re-compilation of swfs. It would throw an exception if users used any part of the API that did not exist. Most swfs would load and it would be immediately obvious if they used any 'hardcore' features that didn't make the cut. Let's call it 'Flash 9.5'.
&lt;/p&gt;
&lt;p&gt;
Regardless, we're at the mercy of two pretty secretive companies. We'll just have to wait and see.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=144</link> 
<title>jEdit OS X startup issue.</title> 
<description>Newest OS X Java update breaks jEdit and many other java apps.<br/><br/>&lt;p&gt;
The other day I was upgrading my java, and suddenly the program I probably use the most every day, &lt;a href=&quot;http://jedit.org&quot;&gt;jEdit&lt;/a&gt; suddenly stopped working. After a couple painful days I've gotten it back to 100%. After following &lt;a href=&quot;http://discussions.apple.com/thread.jspa?messageID=8182624&quot;&gt;this support thread&lt;/a&gt; and checking out &lt;a href=&quot;http://renderfast.com/2008/09/26/java-for-mac-update-2-leaves-some-java-apps-broken/&quot;&gt;this blog entry&lt;/a&gt; I've found that the following will probably work for you:
&lt;/p&gt;
&lt;pre&gt;
rm /Applications/jEdit.app/Contents/MacOS/jedit
cp /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub /Applications/jEdit.app/Contents/MacOS/jedit
&lt;/pre&gt;
&lt;p&gt;
If you have jEdit installed in the default location this should work as expected. A similar method should work with other java programs that have stopped functioning with the new update.
&lt;/p&gt;
&lt;p&gt;
The basic problem has to do with symlinks to the latest java application stub. It used to be that you could symlink to the stub, so that you could use whatever was installed on the user's system. Now it seems that there are some problems with the launcher looking for files in the wrong directory, and using the actual stub instead of a symlink is required.
&lt;/p&gt;
&lt;p&gt;
Hope this gets you moving quickly. Thanks to Doug Letterman and 'sbd76' for finding this solution.
&lt;/p&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=143</link> 
<title>Variiable Length Table Cells on the iPhone</title> 
<description>Want to display long pieces of text in a table on the iphone? Here's how.<br/><br/>&lt;h4&gt;Overview&lt;/h4&gt;
&lt;p&gt;
I've been trying out iPhone development, getting to know the model. Development is quite different, and I will not pretend to be an expert. But I've compiled a couple nuggets out there on the forums into something coherently useful.
&lt;/p&gt;&lt;p&gt;
One of the challenges I found was that I wanted to dynamically layout text that could be very long. I wanted this text to be available in a table view. The help files explain how to use the UITableViewCell class. There are also tutorials on the web that contain information on subclassing and creating subviews. So this entry will assume that you are familiar with the basics of UITableViewCell and can create a subview.
&lt;/p&gt;
&lt;h4&gt;Setting up our UIViewController&lt;/h4&gt;
&lt;p&gt;
First we must set up our UIViewController to delegate the correct methods for UITableViewDataSource and UITableViewDelegate. Most importantly is the heightForRowAtIndexPath() and cellForRowAtIndexPath()
&lt;/p&gt;&lt;p&gt;
&lt;pre&gt;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
	NSString *text;
	CGSize s;
	UIFont *f;
	text = [self getTextForIndexPath:indexPath];
	f = [UIFont systemFontOfSize:14];
	s = [self GetSizeOfText:text withFont: f];
	return s.height +11;
}

&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;
This function calls two custom functions: getTextForIndexPath() and getSizeOfText(). getTextForIndexPath() gets an NSString of the text used for this row and section. I then pass this to a GetSizeOfText() which is explained below. Finally I fudge it with 11px of space. Why 11 pixels? There is 5px on top and bottom of padding, and then 1 extra pixel for the outline on the bottom. Hey, I'm not proud of this code....baby steps.
&lt;/p&gt;&lt;pre&gt;

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	
	static NSString *identifier = @&quot;MyCell&quot;;
	
	DetailViewCell *cell = (DetailViewCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
	if (cell == nil) {
		cell = [[[DetailViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier] autorelease];
	}

	NSString *cellText = [self getTextForIndexPath:indexPath];
	
	[cell setData:cellText];
	
	return cell;
}
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
This code is very similar to the normal code in cellForRowAtIndexPath(). I include it here for completeness. What we're doing is basically initialising the UITableViewCell for use in drawing the cell. If we have an existing cell, let's reuse it. We then pass the data to the cell using the getTextForIndexPath() function used earlier to also measure the text.&lt;/p&gt;
&lt;p&gt;
Its important to understand that you cannot assume a correlation between your UITableViewCell and the data within. In other words, the iPhone attempts to efficiently re-use views, and so as it redraws, the data you put in there could be stale. cellForRowAtIndexPath() is your place to initialize your cell with data before it gets drawn.
&lt;/p&gt;
&lt;pre&gt;
- (CGSize)GetSizeOfText:(NSString *)text withFont:(UIFont *)font
{
	return [text sizeWithFont: font constrainedToSize:CGSizeMake(280, 500)];
}

&lt;/pre&gt;
I've also added a utility function GetSizeOfText() which returns the size of the text with the font you've specified. One of the curiosities of Cocoa: the string &lt;i&gt;primitive&lt;/i&gt; object tells you the bounds of the string if you give it a font and a bounding rectangle (CGRect). I would've never looked there. This is one of those 'delegation idiosynchracies' that occur, since delegates can be placed on whatever you like.
&lt;/p&gt;
&lt;pre&gt;
- (void)viewWillAppear:(BOOL)animated
{
	self.title = @&quot;Details&quot;;
	[tblView reloadData];
	
}
&lt;/pre&gt;
&lt;p&gt;
Another important function to override is the viewWillAppear() delegate. If your view is controlled by a NavigationController (which is pretty likely), it could be that your view will draw correctly the first time, but not reload the data and redraw on a subsequent view.
&lt;/p&gt;&lt;p&gt;
For example you create a list of news items. You click on an item and go to a subscreen displaying the item's details. You click back and go to another option, yet the view does not redraw. NavigationController's already drawn the view, so it just displays it without updating it. What you want to do is trigger a redraw by overriding the viewWillAppear() delegate and reloading the table view's data via [tblView reloadData];.
&lt;/p&gt;
&lt;h4&gt;Subclassing our UITableViewCell&lt;/h4&gt;
&lt;p&gt;
Ok, so now we have our ViewController set up correctly to report the heights of our variable length cells based upon the text and font we are using. Now we need to create our subclass of UITableViewCell. We'll use the same method used in similar tutorials:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Subclass UITableViewCell&lt;/li&gt;
&lt;li&gt;Add subviews to the UITableViewCell's contentView&lt;/li&gt;
&lt;li&gt;Override layoutSubviews &lt;/li&gt;
&lt;li&gt;Initialize data into our view&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Subclass UITableViewCell and add subviews&lt;/h4&gt;
&lt;pre&gt;
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
	if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
		// Initialization code
		// we need a view to place our labels on.
		UIView *myContentView = self.contentView;
		
		//init font.
		UIFont *font = [UIFont systemFontOfSize:14];
		
		// init the label
		self.label = [[UILabel alloc] initWithFrame:CGRectZero];
		self.label.backgroundColor = [UIColor whiteColor];
		self.label.font = font;
		self.label.numberOfLines = 0;
		
		[myContentView addSubview:self.label];
		[self.label release];
		
	}
	return self;
}
&lt;/pre&gt;
&lt;p&gt;
Here we grab out contentView from the superclass, and then add a label as a subview.
&lt;/p&gt;
&lt;h4&gt;Override layoutSubviews&lt;/h4&gt;
&lt;pre&gt;
-(void)layoutSubviews {
	[super layoutSubviews];
	
	//get the cell size.
	CGRect contentRect = self.contentView.bounds;
	
	if(!self.editing){
		CGFloat boundsX = contentRect.origin.x;
		CGRect frame;
		
		NSString *text = self.label.text;
		UIFont *font = self.label.font;
		CGSize constraint = CGSizeMake(280,500);
		CGSize size = [text sizeWithFont:font constrainedToSize:constraint];
		
		frame = CGRectMake(boundsX + 10, 0, 280, size.height + 10);
		
		self.label.frame = frame;
		
	}
}
&lt;/pre&gt;
&lt;p&gt;
What we do here is resize the UILabel to fit within the contentView accurately. You may have noticed that we are doing something similar to GetSizeOfText() within the view controller. In fact its practically duplicate code. We get the size of the text, and then add 10px to the x origin. The 10px amount is because of the rounded rectangle styling of the table. 280px is a good width, there is a 20px margin on each side of the table cell. The height is based upon the CGSize returned from sizeWithFont(). Another 10px is added for styling.
&lt;/p&gt;
&lt;h4&gt;Initialize data into our view&lt;/h4&gt;
&lt;pre&gt;
-(void)setData:(NSString *)text {
	self.label.text = text;
}
&lt;/pre&gt;
&lt;p&gt;For these purposes there was no need for any model or data objects within our UITableViewCell. Instead I just set the label's text directly.
&lt;/p&gt;
&lt;h4&gt;Areas for improvement&lt;/h4&gt;
&lt;p&gt;
I'm sure there are some savvy Obj-C programmers out there who can easily pick out some coding flaws here. There is code duplication between the view controller and the view cell. There could be memory leaks. Styling info is hardcoded. But hey, if you want to create a variable length cell, then I hope this code can be useful to you!
&lt;/p&gt;
&lt;h4&gt;DetailViewCell&lt;/h4&gt;
&lt;pre&gt;
#import &lt;UIKit/UIKit.h&gt;


@interface DetailViewCell : UITableViewCell {
	UILabel *label;
}


// gets the data from another class
-(void)setData:(NSString *)text;

@property (nonatomic, retain) UILabel *label;

@end



#import &quot;DetailViewCell.h&quot;


@implementation DetailViewCell

@synthesize label;


- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
	if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
		// Initialization code
		// we need a view to place our labels on.
		UIView *myContentView = self.contentView;
		
		//init font.
		UIFont *font = [UIFont systemFontOfSize:14];
		
		// init the label
		self.label = [[UILabel alloc] initWithFrame:CGRectZero];
		self.label.backgroundColor = [UIColor whiteColor];
		self.label.font = font;
		self.label.numberOfLines = 0;
		
		[myContentView addSubview:self.label];
		[self.label release];
		
	}
	return self;
}

-(void)setData:(NSString *)text {
	self.label.text = text;
}

-(void)layoutSubviews {
	[super layoutSubviews];
	
	//get the cell size.
	CGRect contentRect = self.contentView.bounds;
	
	if(!self.editing){
		CGFloat boundsX = contentRect.origin.x;
		CGRect frame;
		
		NSString *text = self.label.text;
		UIFont *font = self.label.font;
		CGSize constraint = CGSizeMake(280,500);
		CGSize size = [text sizeWithFont:font constrainedToSize:constraint];
		
		frame = CGRectMake(boundsX + 10, 0, 280, size.height + 10);
		
		self.label.frame = frame;
		
	}
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

	[super setSelected:selected animated:animated];

	// Configure the view for the selected state
}


- (void)dealloc {
	[label dealloc];
	[super dealloc];
}


@end

&lt;/pre&gt;
&lt;h4&gt;FeedItemController&lt;/h4&gt;
&lt;pre&gt;
#import &lt;UIKit/UIKit.h&gt;



@interface FeedItemController : UIViewController &lt;UINavigationBarDelegate, UITableViewDataSource, UITableViewDelegate&gt;
{
	IBOutlet UITableView *tblView;
	NSDictionary *currentStory;
	UILabel		*textView;
	
}

-(NSString *) testFunction;
- (CGSize)GetSizeOfText:(NSString *)text withFont:(UIFont *)font;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSString *)getTextForIndexPath:(NSIndexPath *)indexPath;

@property (nonatomic, retain) UITableView *tblView;
@property (nonatomic, retain) NSDictionary *currentStory;
@property (nonatomic, retain) UILabel *textView;


@end



#import &quot;FeedItemController.h&quot;
#import &quot;DetailViewCell.h&quot;
#import &quot;UIKit/UITableView.h&quot;
#import &lt;UIKit/UIView.h&gt;

@implementation FeedItemController

@synthesize tblView, currentStory, textView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
	if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
		// Initialization code
		NSLog(@&quot;currentStory initWithNibName %@&quot;, [currentStory objectForKey:@&quot;summary&quot;]);
	}
	return self;
}

- (void)awakeFromNib
{	
	self.title = @&quot;Details&quot;;
	NSLog(@&quot;currentStory awakeFromNib %@&quot;, [currentStory objectForKey:@&quot;summary&quot;]);
}

// Implement loadView if you want to create a view hierarchy programmatically
- (void)loadView {
	NSLog(@&quot;currentStory loadView %@&quot;, [currentStory objectForKey:@&quot;summary&quot;]);
	//newsSummary.text = @&quot;Interesting&quot;;
}
 

 //If you need to do additional setup after loading the view, override viewDidLoad.
- (void)viewDidLoad {
	NSLog(@&quot;currentStory viewDidLoad %@&quot;, [currentStory objectForKey:@&quot;summary&quot;]);

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	
	static NSString *identifier = @&quot;MyCell&quot;;
	
	DetailViewCell *cell = (DetailViewCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
	if (cell == nil) {
		cell = [[[DetailViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier] autorelease];
	}
	    
    
	NSString *cellText = [self getTextForIndexPath:indexPath];
	
	//NSLog(@&quot;Setting text to %@&quot;, cellText);
	[cell setData:cellText];
	
	return cell;
}

- (NSString *)getTextForIndexPath:(NSIndexPath *)indexPath
{
	switch(indexPath.section){
		case 0:
			switch (indexPath.row){
				case 0:
					return [currentStory objectForKey:@&quot;title&quot;];
					break;
				case 1:
					return [currentStory objectForKey:@&quot;date&quot;];
					break;
			}
			break;                                                                             
		case 1:
			return [currentStory objectForKey:@&quot;summary&quot;];
			break;
		case 2:
			return @&quot;View in Safari&quot;;
			break;
			
	}
	return @&quot;&quot;;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
	NSString *text;
	CGSize s;
	UIFont *f;
	text = [self getTextForIndexPath:indexPath];
	f = [UIFont systemFontOfSize:14];
	s = [self GetSizeOfText:text withFont: f];
	//NSLog(@&quot;Width: %f Height: %f&quot;, s.width, s.height);
	return s.height +11;
}

- (NSString *)testFunction;
{
	return @&quot;hi&quot;;
}

- (CGSize)GetSizeOfText:(NSString *)text withFont:(UIFont *)font
{
	return [text sizeWithFont: font constrainedToSize:CGSizeMake(280, 500)];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
	//boy i need to learn how to use arrays :P
	switch (section) {
		case 0:
			return @&quot;Name and Date&quot;;
			break;
		case 1:
			return @&quot;Details&quot;;
		default:
			return @&quot;&quot;;
			break;
	}
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
	return 3;
}

-(NSInteger)tableView:(UITableView *)tblView numberOfRowsInSection:(NSInteger)section {
	
	//Every cell is going to have two rows.
	switch (section) {
		case 0:
			return 2;
			break;
		case 1:
			return 1;
		default:
			return 1;
			break;
	}
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	// Navigation logic
	if(indexPath.row == 0 &amp;&amp; indexPath.section == 2){
		 NSString * storyLink = [currentStory objectForKey: @&quot;link&quot;];
		 
		 // clean up the link - get rid of spaces, returns, and tabs...
		 storyLink = [storyLink stringByReplacingOccurrencesOfString:@&quot; &quot; withString:@&quot;&quot;];
		 storyLink = [storyLink stringByReplacingOccurrencesOfString:@&quot;\n&quot; withString:@&quot;&quot;];
		 storyLink = [storyLink stringByReplacingOccurrencesOfString:@&quot;	&quot; withString:@&quot;&quot;];
		 
		// NSLog(@&quot;link: %@&quot;, storyLink);
		 // open in Safari
		 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:storyLink]];
	}
}


#pragma mark UIViewController delegates

- (void)viewWillAppear:(BOOL)animated
{
	//NSLog(@&quot;currentStory viewWillAppear %@&quot;, [currentStory objectForKey:@&quot;summary&quot;]);
	//newsSummary.text = [currentStory objectForKey:@&quot;summary&quot;];
	self.title = @&quot;Details&quot;;
	[tblView reloadData];
	
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
	// Return YES for supported orientations
	return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
	[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
	// Release anything that's not essential, such as cached data
}



- (void)dealloc {
	[currentStory release];
	[tblView release];
	[super dealloc];
}




@end
&lt;/pre&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=141</link> 
<title>Macbook Air Overheating and Core Shutdown</title> 
<description>How do we stop core shutdown and improve performance?<br/><br/>&lt;p&gt;
It turns out that my &lt;a href=&quot;http://ubergeek.tv/article.php?pid=129&quot; &gt;original glowing review&lt;/a&gt; of the &lt;a href=&quot;http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore.woa/wa/RSLID?nnmm=browse&amp;node=home/shop_mac/family/macbook_air&amp;sf=wHF2F2PHCCCX72KDY&quot;&gt; Macbook Air &lt;/a&gt; was a bit premature. To say I have buyer's remorse is an understatement.
&lt;/p&gt;&lt;p&gt;
After spending some time using my Macbook Air I noticed that as time went on, the laptop seemed to slow down. Simultaneously I noticed that the machine would get hot. I was originally very happy with how cool the machine ran. Over time though it started getting noticably warmer.
&lt;/p&gt;&lt;p&gt;
I did some &lt;a href=&quot;http://www.google.com/search?q=macbok+air+overheating&quot;&gt;Googling&lt;/a&gt;, and sure enough, I was not alone. As soon as the machine gets pretty hot, it goes from being a 1.8Ghz Intel Core Duo to a 1Ghz(due to throttling) Core Uno.  Its infuriatingly easy to reproduce, too:
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Open up Activity Monitor to watch it happen.&lt;/li&gt;
&lt;li&gt;Go to &lt;a href=&quot;http://www.hulu.com/&quot;&gt;Hulu.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Watch a &lt;a href=&quot;http://www.hulu.com/watch/18810/30-rock-sandwich-day&quot;&gt;video&lt;/a&gt; fullscreen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
5-6 minutes in you will see your second core shut off. &lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=1445521&amp;tstart=0&quot;&gt;Even at the Apple Store.&lt;/a&gt; It will be rather obvious this has happened, as the video will get very choppy. This is a very easily reproducible demo which doesn't illustrate real-world performance issues. Trust me tho, these issues are very real.
&lt;/p&gt;&lt;p&gt;
The &lt;a href=&quot;http://plasmadesign.wordpress.com/2008/04/02/macbook-air-core-shutdown/&quot;&gt;proposed&lt;/a&gt;  &lt;a href=&quot;http://paulstamatiou.com/2008/05/11/putting-an-end-to-macbook-air-core-shutdown&quot;&gt; solution&lt;/a&gt; revolves around a utility called &lt;a href=&quot;http://coolbook.se/CoolBook.html&quot;&gt;CoolBook&lt;/a&gt;. After buying the program and installing it I can vouch that it does exactly that. CoolBook deactivates the Apple/Intel SpeedStep driver, and installs its own custom cpu power driver. This custom driver will not shut down your second core.
&lt;/p&gt;&lt;p&gt;
But first a quick note on the current generation of processors. Gone are the days when CPUs had one speed and one core. As computers get faster, they run hotter. And its been a challenge for engineers to work out how to get faster chips to the masses without melting your lap.
&lt;/p&gt;&lt;p&gt;
Enter technologies such as SpeedStep and PowerNow. Not only do these chips focus on efficiency, they can offer a higher top speed, which looks good to the marketing department. Yes, your 2.2Ghz Macbook Pro isn't actually able to sustain 2.2Ghz for long periods of time. As soon as it gets hot, it will throttle back to 1.2Ghz or so in order to stay cool. So in reality its more of a 1.2Ghz chip that can sustain 2Ghz for short periods of time. 
&lt;/p&gt;&lt;p&gt;
The point of CoolBook is to allow you more fine-grained control over these CPU power features. It also provides the ability to send the processor less electricity so that it extends battery life and reduces heat.
&lt;/p&gt;&lt;p&gt;
But I'm not happy to slow down my computer in order to keep it from crapping out. I want to actually use my computer to do stuff. Important stuff, like Hulu. By default CoolBook will improve the performance simply by deactivating SpeedStep. But if you increase the speed settings, you can get the advertised performance at the expense of high heat output. 
&lt;/p&gt;&lt;p&gt;
For the 'adapter' settings in CoolBook I removed all entries but one: &quot;1800Mhz / 1.0000V&quot;. This has the effect of making sure that your processor will be at max speed at all times necessary. It will still throttle down to 1.2Ghz when idle, but it will not throttle down under heavy load. Needless to say this is not a good idea. The maker of CoolBook, Magnus Lundholm, specifically says you should not do this, and had this to say when I asked him to elaborate:
&lt;/p&gt;&lt;p&gt;
'An Apple MacBook is not designed to run at full speed for longer periods of time. It must lower the performance after a while, otherwise it will overheat.
The MBP is better, and the &quot;Penryns&quot; should work better as well. My previous C2D MB couldn't run CPUTest for that many minutes before stepping down.'
&lt;/p&gt;&lt;p&gt;
So cautionary tale kids...pegging your 1.8Ghz CPU can very possibly damage your machine. Since I'm going to do something similar this week, I'll let you know how it pans out. According to Magnus, use the temp limit feature and multiple settings to keep you Mac from overheating, similar to the default settings.
&lt;/p&gt;&lt;p&gt;
As a last note, Magnus, while not having seen the core shutdown himself, seemed skeptical that this was the issue:
&lt;/p&gt;&lt;p&gt;
'I don't think the shutting down of one core is the reason for the choppiness, one core is more than enough for the UI. Instead I think the clock modulation is changed, or the execution is halted when the temperature reaches over a certain level. This can happen to the MB and MBP as well.'
&lt;/p&gt;&lt;p&gt;
I can see the results of my core shutting down are correlated to performance and stuttering. But I am not an expert in CPU power management software. According to Magnus its not the core shutdown, but the throttling of the cpu. I can say that regardless of the cause, using CoolBook has made my Air usable under heavy load.
&lt;/p&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=140</link> 
<title>Automatically create a CD image with Ant</title> 
<description>Using the powers of Ant and mkisofs, CD image creation is easy.<br/><br/>&lt;p&gt;
When you're building an application its great to be able to automate as much of the process as possible. Partially because it saves you time, but also because its reproducible and consistent. Ant is my build tool of choice, mainly because its very mature and is language/platform agnostic.
&lt;/p&gt;
&lt;p&gt;
So earlier this week I had a dilemma. I thought it would be enough to create a zip of the files for an application that needed to be burned to cd. Turns out that this caused some confusion for a couple reasons. First: All burning software is not equal. For some reason my autorun.inf was not working when others burned my zip. Second: there was no consistent naming of the disc. What I needed was to distribute a burnable disk image (an .iso file), not a zip.
&lt;p&gt;
I was already using Ant to create the various build targets. Could I get Ant to also build an iso image for me? Once I had installed a program called mkisofs, this was very straightforward:
&lt;/p&gt;
&lt;pre style='color:#000000;background:#ffffff;'&gt;&lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;target&lt;/span&gt; &lt;span style='color:#274796; '&gt;name&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;createiso&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt; &lt;span style='color:#274796; '&gt;depends&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;distribute&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;&gt;&lt;/span&gt;
    &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;exec&lt;/span&gt; &lt;span style='color:#274796; '&gt;dir&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;Work/Deploy&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt; &lt;span style='color:#274796; '&gt;executable&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;mkisofs&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;&gt;&lt;/span&gt;
        &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;arg&lt;/span&gt; &lt;span style='color:#274796; '&gt;line&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;-o my_disc.iso&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;/&gt;&lt;/span&gt;
        &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;arg&lt;/span&gt; &lt;span style='color:#274796; '&gt;line&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;-J&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;/&gt;&lt;/span&gt;
        &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;arg&lt;/span&gt; &lt;span style='color:#274796; '&gt;line&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;-R&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;/&gt;&lt;/span&gt;
        &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;arg&lt;/span&gt; &lt;span style='color:#274796; '&gt;line&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;-V My_Disc_Name&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;/&gt;&lt;/span&gt;
        &lt;span style='color:#a65700; '&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;arg&lt;/span&gt; &lt;span style='color:#274796; '&gt;line&lt;/span&gt;&lt;span style='color:#808030; '&gt;=&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;dist&lt;/span&gt;&lt;span style='color:#0000e6; '&gt;&quot;&lt;/span&gt;&lt;span style='color:#a65700; '&gt;/&gt;&lt;/span&gt;
    &lt;span style='color:#a65700; '&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;exec&lt;/span&gt;&lt;span style='color:#a65700; '&gt;&gt;&lt;/span&gt;
&lt;span style='color:#a65700; '&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#5f5035; '&gt;target&lt;/span&gt;&lt;span style='color:#a65700; '&gt;&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
And that's it! If you were to run this in a shell it would look like:
&lt;pre&gt;
mkisofs -o my_disc.iso -J -R -V My_Disc_Name dist
&lt;/pre&gt;
This basically calls the mkisofs program, and creates a burnable image of your folder. The -R and -J options will keep the filenames consistent with what you see. The -V sets the name of the cd. The 'dist' is the name of the folder that I'm turning into an iso.
&lt;/p&gt;
&lt;p&gt;
Because mkisofs isn't part of Ant or most systems you'll need to grab a copy for yourself.
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Mac: &lt;a href=&quot;http://lonestar.utsa.edu/llee/applescript/dvdimager.html&quot;&gt;Download Disk Imager.&lt;/a&gt; Right-click and choose 'Show Package Contents'. Inside Content/Resources you will find a mkisofs binary. :) &lt;/li&gt;
	&lt;li&gt;Win: This is available from &lt;a href=&quot;http://cygwin.com/&quot;&gt;Cygwin.&lt;/a&gt; &lt;/li&gt;
	&lt;li&gt;Linux: apt-get install mkisofs (if its not already installed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I'm developing this app on a Mac, and when committing to the server this ant script is run on the server, rebuilding the iso every time i commit. Couldn't be easier!
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=138</link> 
<title>Flash Player 10 Beta Release</title> 
<description>Impressions of Adobe's new Flash beta.<br/><br/>&lt;p&gt;
Adobe has just released the &lt;a href=&quot;http://labs.adobe.com/technologies/flashplayer10/&quot;&gt;Flash Player 10 release&lt;/a&gt;. Having looked at the various blogs, there is a lot to get excited about. The sheer &lt;a href=&quot;http://labs.adobe.com/technologies/flashplayer10/releasenotes.html&quot;&gt;list of features on the release notes&lt;/a&gt; is staggering. Where to start? We've got:
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
	&lt;li&gt;3D primitives.&lt;/li&gt;
	&lt;li&gt;Sound generation.&lt;/li&gt;
	&lt;li&gt;Shaders.&lt;/li&gt;
	&lt;li&gt;GPU Offloading.&lt;/li&gt;
	&lt;li&gt;Better File Reference&lt;/li&gt;
	&lt;li&gt;Much, much more.&lt;/li&gt;
	&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
Two of Adobe's Flash Player blogs, &lt;a href=&quot;http://www.kaourantin.net/2008/05/adobe-is-making-some-noise-part-1.html&quot;&gt;kaourantin&lt;/a&gt; and &lt;a href=&quot;http://blogs.adobe.com/penguin.swf/&quot;&gt;penguinSWF&lt;/a&gt;, have been quiet as of late. And suddenly we know why. I'm sure they were heads down working hard. They've both opened up to let us know where they're at, and given us &lt;a href=&quot;http://labs.adobe.com/technologies/flashplayer10/&quot;&gt;this beautiful beta.&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
I'm also impressed to see that Adobe is using its resources to make sure there is a Linux beta of this release also. Mike Melanson is one tough developer: not only does he brave the slings and arrows of zealot comments, he's also able to get FP10 to perform better than 9 on his &lt;a href=&quot;http://en.wikipedia.org/wiki/ASUS_Eee_PC&quot;&gt;Asus EEE PC.&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
Sound generation is a huge boon to developers. While sound support wasn't ever bad, it was never very good. Now we have much more control over sound playback and generation. I get the feeling this is about as low level as can be made, since we are even getting the ability to choose a performance trade-off. Alas, we are unable to capture microphone output, but considering the sheer list of features in this release, I'm not complaining (yet).
&lt;/p&gt;&lt;p&gt;
Have you ever wanted to know what you're uploading? Wouldn't it be great to be able to look at the file before you upload it? Or maybe you don't need to upload it. Yes, now you can prompt a user for a file, and spit them back a file without requiring any server interaction. My main request that I hope was fixed in this version tho is that when you upload to a server that you can get the response.
&lt;/p&gt;&lt;p&gt;
If you download the beta, maybe you'll notice a green square in the upper left corner on some demos(which I haven't seen yet). This square tells you that the pixels are being drawn by the GPU instead of the CPU. This compositing speed gives you more power in the CPU to do more. And hopefully will make my Macbook Air run cooler.
&lt;/p&gt;&lt;p&gt;
The &lt;a href=&quot;http://labs.adobe.com/technologies/flashplayer10/demos/index.html&quot;&gt;demo on Adobe's site&lt;/a&gt; shows off the power of the new 3D primitive. So how does this compare to current 3D technologies in Flash, such as &lt;a href=&quot;http://away3d.com/&quot;&gt;Away3D&lt;/a&gt; and &lt;a href=&quot;http://blog.papervision3d.org/&quot;&gt;Papervision&lt;/a&gt;? The main difference I notice is that texture transformations are stunning. The bitmaps look smooth and clear, compared to sometimes very jaggy textures in FP9.
&lt;/p&gt;&lt;p&gt;
All in all this demo is fantastic. &lt;a href=&quot;http://www.gskinner.com/blog/archives/2008/05/building_the_fl.html&quot;&gt;Kudos to Grant Skinner&lt;/a&gt;. I can't wait to see the things people will cook up. Oh and I might have a trick or two up my sleeve myself.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=139</link> 
<title>Flash 10 Demo Direct Links</title> 
<description>Direct links to Flash 10 demos.<br/><br/>&lt;p&gt;
Here are links to the demo source within the Flash 10 Beta swf. A cross-domain issue is effecting the ability to download them from the demo:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/Native3D_Sample.zip&quot;&gt;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/Native3D_Sample.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/NewTextEngine_Sample.zip&quot;&gt;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/NewTextEngine_Sample.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/IK_Sample.zip&quot;&gt;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/IK_Sample.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/PixelBender_Sample.zip&quot;&gt;http://download.macromedia.com/pub/labs/flashplayer10/sampleSource/PixelBender_Sample.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=137</link> 
<title>Bad design in Flash CS3</title> 
<description>Dealing with automatic declaration of stage instances in flash.<br/><br/>&lt;p&gt;
Its unusual how you can work with a technology for a very long time, have no problems with it, and then suddenly come across a major mindbender. I've been using AS3 for years now, and never had an issue with this, probably because I stay away from the timeline.
&lt;/p&gt;
&lt;p&gt;
I wanted to use inheritance to create a simple AlertBase for a project. It turns out that inheritance with symbols on the timeline is a big compiler explosion:
&lt;/p&gt;
&lt;pre&gt;
1152: A conflict exists with inherited definition AlertBase.okButton in namespace public.
&lt;/pre&gt;
&lt;p&gt;
&lt;a href=&quot;http://ubergeek.tv/inheritance_declare_problem.zip&quot;&gt;Check out some source examples here.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
It turns out that there is a little hidden checkbox that should, in my opinion, be off by default. In Publish Settings-&gt;Flash-&gt;ActionScript 3 Settings, there is a checkbox labeled 'Automatically declare stage instances.'.
&lt;/p&gt;
&lt;p&gt;
This means that Flash will declare variables in your classes for all items on the stage. This would be great if it worked as expected, but from the example fla you can see that extending classes quickly breaks this functionality.
&lt;/p&gt;
&lt;p&gt;
This is an unusual problem as it really forks AS3 code that extends symbols: code with the box checked, and code without. I've been using Papervision, and they are in the 'unchecked' camp, which is how I found out there is a difference.
&lt;/p&gt;
&lt;p&gt;
I would recommend that this checkbox is unchecked on every fla you work on. You shouldn't allow flash to write code for you if it cannot accurately reflect your intentions. You should also do your best to inform your team that this is the best practice. From an industry perspective, I'm unable to determine if this is a best practice. I believe strongly that it should be, and hope that others will agree and pass on this opinion.
&lt;/p&gt;

</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=136</link> 
<title>Dealing with 'svn: MERGE request failed'</title> 
<description>Some knowledge nuggets for those weird server errors.<br/><br/>&lt;p&gt;
We just had a strange issue with one of our subversion repositories. It only happens when using Apache and committing. The error message is less than helpful:
&lt;/p&gt;
&lt;pre&gt;
svn: MERGE request failed on '/svn/repo/trunk'
svn: MERGE of '/svn/repo/trunk': 200 OK (https://ourdomain.com)
&lt;/pre&gt;
&lt;p&gt;
So the '200 OK' message means that the commit occured ok on the server, but it didn't on the client. Therefore you'll have to execute an update command locally to sync back up. Pretty annoying.
&lt;/p&gt;
&lt;p&gt;
If you search Google for 'MERGE request failed' you get a lot of questions and not a lot of answers, so hopefully this will help someone out. Our problem turned out to be our &lt;b&gt;post-commit hook.&lt;/b&gt; We have a couple wget calls inside it that notify a couple servers of commits, and they were getting stalled because of a self-signed security certificate and dying out. Totally unrelated problem, but easily diagnosable: rename your post-commit hook and see if that fixes it.
&lt;/p&gt;
&lt;p&gt;
An aside, that will help you in diagnosing, too: TortoiseSVN and other guis don't necessarily give you all the error output. If your post-commit hook is spitting out errors, you should commit via the command line, as that may give you more information. This also means that if you're migrating from svn:// to https:// like we are, make sure that your post-commits are ok, and that your certificates are valid!
&lt;/p&gt;
&lt;p&gt;
Post-commit hooks don't run like normal scripts, too. In order to run them similar to how Subversion will run them, use the following command:
&lt;pre&gt;
env - ./post-commit /var/svn/$REPO $REV
&lt;/pre&gt;
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=135</link> 
<title>Innovative Interfaces on Linux</title> 
<description>Where are interfaces in Linux going today?<br/><br/>&lt;p&gt;This was an interesting post on wired about Adobe's foray into AIR on Linux:&lt;br/&gt;
&lt;a href=&quot;http://blog.wired.com/monkeybites/2008/03/adobe-releases.html&quot;&gt;http://blog.wired.com/monkeybites/2008/03/adobe-releases.html&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;
Well, I'm a Flex/AIR programmer, and have used Adobe products and Linux for a very long time now. I can understand what they're getting at, tho, somewhere inside that spin. Adobe is the company best poised to take advantage of rich internet applications because they have a great cross-platform lightweight framework and ubiquity. Java is great for certain things, but sucks at media, which is where a lot of app focus is right now. Adobe's Photoshop Express, Buzzword, and other 'light' applications with high usability are popular, and provide a good user experience.
&lt;/p&gt;&lt;p&gt;
Is that great user experience rarer on Linux? Hmmm...I'm going to have to agree. I don't use Linux because its easy to use, its not. But a solid command-line toolchain is sometimes the best tool for the job. While bash is cool, the aforementioned focus on media-based apps doesn't necessarily benefit from a super-awesome cli.
&lt;/p&gt;&lt;p&gt;
What I think the author misses out on most is great open source apps is their lack of a corporate basis, hence, less hoops like advertising and user registration/tracking. There is an emphasis on openness and interoperability, and this is where the web got the idea, not the other way around. So its very ironic that there are innovative ideas on the web but not on Linux, when a lot of those innovative ideas I'm betting have some foundation in Linux.
&lt;/p&gt;&lt;p&gt;
Also I want to make some taxonomical distinctions between various design concepts:
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Usability is the key feature of an interface.&lt;/li&gt;
&lt;li&gt;Having a graphical user interface does not mean you have usability.&lt;/li&gt;
&lt;li&gt;Having a 'good-looking' interface does not mean you have usability.&lt;/li&gt;
&lt;li&gt;Innovation does not mean you have usability.&lt;/li&gt;
&lt;li&gt;How abstracted you are away from the internal details of an application does not determine usability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
But:
&lt;ul&gt;
&lt;li&gt;A good-looking interface is a feature of good usability.&lt;/li&gt;
&lt;li&gt;The choices of what to abstract from the user determines usability.&lt;/li&gt;
&lt;li&gt;Using common paradigms and metaphors determine usability.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
So I think where Linux drops the ball is that most program designers are 'scratching an itch'. They do not put any effort into user experience because they equate things like 'graphical user interface' with 'good user experience' and call it a day. And so you have a lot of programs that one person, or one type of person, can navigate efficiently, and most cannot fathom.
&lt;/p&gt;&lt;p&gt;
But that is the nature of open source. You see all of it, the failures alongside the triumphs. There are some well-designed interfaces such as Gnome, Konqueror's File Explorer, Firefox/Thunderbird, and Amarok. And, unlike many pay-for products, they will stay usable until the sun dies out.
&lt;/p&gt;


</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=134</link> 
<title>Silverlight, Fixes, and Upgrades!</title> 
<description>Finally sat down and spent some time on this site.<br/><br/>&lt;p&gt;
*sigh* I need to take more time out to make this site better. I really want to redesign it. All you html coders should look at my medusa code, it will turn you to stone. :)
&lt;/p&gt;&lt;p&gt;
So I've put up some new content and fixed a couple things that weren't working. A list:
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;article.php?pid=48&quot;&gt;Geeks In Love&lt;/a&gt; has been upgraded to the &lt;b&gt;full version&lt;/b&gt; since Bitpass went defunct. See the whole thing now!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;article.php?pid=132&quot;&gt;Robochris and Jim vs. The Zombies&lt;/a&gt; has been added! This is something my friend made for me, and a great piece of work the world needs to see!!! &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;article.php?pid=130&quot;&gt;My impressions of Silverlight&lt;/a&gt; have been added to the site.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;article.php?pid=131&quot;&gt;I F****ing Hate Your Ringtone&lt;/a&gt; musical rant is back up!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;article.php?pid=74&quot;&gt;Henchfig's Codeblurbs&lt;/a&gt; is back up, but sending/loading of blurbs is at the moment broken.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A couple behind the scenes fixes should improve loading times, and fix links within the front page's blog.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=129</link> 
<title>A Week With My Macbook Air</title> 
<description>My impression of the Macbook Air after using it for a week.<br/><br/>&lt;p&gt;
Last week I received my &lt;a href=&quot;http://www.apple.com/macbookair/&quot;&gt;Macbook Air&lt;/a&gt;, and enjoy showing it off. I have had a lot of comments and interest, and the machine is a &lt;a href=&quot;http://www.ifixit.com/Guide/First-Look/Mac/MacBook-Air&quot;&gt;remarkedly different design than most&lt;/a&gt;, even in the ultraportable laptop market. I wanted to share my experience, partially out of the enjoyment of my purchase, but also to help people decide what works for them.
&lt;/p&gt;
&lt;a href=&quot;macbook_air_review/macbook_at_work.jpg&quot;&gt;&lt;img src=&quot;macbook_air_review/macbook_at_work_small.jpg&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
The Air, hard at work.&lt;br/&gt;
&lt;br/&gt;
&lt;a href=&quot;macbook_air_review/macbook_at_work2.jpg&quot;&gt;&lt;img src=&quot;macbook_air_review/macbook_at_work2_small.jpg&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
A more close-up shot.&lt;br/&gt;
&lt;br/&gt;
&lt;a href=&quot;macbook_air_review/macbook_xo.jpg&quot;&gt;&lt;img src=&quot;macbook_air_review/macbook_xo_small.jpg&quot;/&gt;&lt;/a&gt;&lt;br/&gt;
No, its not a toy. THAT's a toy.&lt;br/&gt;
&lt;h2&gt;
Using It
&lt;/h2&gt;
So, really, its thin. Did I mention this? You really can file the edge down and decapitate someone. Seriously. But here's the deal....its actually not that thin. It is...but it isn't. They use some serious optical trickery to make it look ridiculously thin. This does not detract from the fact that it is small and a feat of engineering. So can such a thin machine actually DO useful stuff?
&lt;/p&gt;&lt;p&gt;
Well, duh. I'm 'upgrading' from a Macbook Pro. I never really wanted a Macbook Pro. I was waiting for a tablet/smaller version to come out. But I gave up and bought one. And three months later they bring out the Air. Bastards.
&lt;/p&gt;&lt;p&gt;
So coming from a &lt;a href=&quot;http://www.apple.com/macbookpro/&quot;&gt;Macbook Pro&lt;/a&gt;, how's the performance from a day-to-day perspective? Well...exactly the same. Yep, I have yet to notice a single point at which my MBA is deficient. Perhaps its because I don't encode video, or play 3d-heavy games on it. But I do push it, kinda. So here's what I usually have running at the same time:
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Flash CS3&lt;/li&gt;&lt;li&gt;
Photoshop CS3&lt;/li&gt;&lt;li&gt;
jEdit&lt;/li&gt;&lt;li&gt;
Terminal (running vim/svn/wget etc)&lt;/li&gt;&lt;li&gt;
&lt;a href=&quot;http://cogx.org/&quot;&gt;Cog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
Adium&lt;/li&gt;&lt;li&gt;
Skype&lt;/li&gt;&lt;li&gt;
Firefox
&lt;/li&gt;
&lt;/ul&gt;
And then I'm running Windows XP inside OS X using VMWare Fusion, and also running:
&lt;ul&gt;
&lt;li&gt;
Microsoft Blend&lt;/li&gt;&lt;li&gt;
Microsoft Expression Design&lt;/li&gt;&lt;li&gt;
Visual Studio&lt;/li&gt;&lt;li&gt;
Firefox (again)&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
So running all these programs...at the same time...with an imperceptible performance difference between Macbook Air and Pro. I guess I'm not a real power user. Or incredibly unperceptive. Perhaps I need to decode some DNA and break some encryption. Perhaps the NSA can give my computer some wiretapping to do to slow it down.
&lt;/p&gt;&lt;p&gt;
So...how can such a light, thin machine have everything I need? Shouldn't I be pissed off that it has one usb port? And no DVD drive in the machine? And no user-replacable battery? Isn't the monitor too small? Doesn't the keyboard blow?
&lt;/p&gt;&lt;p&gt;
Nah.
&lt;/p&gt;&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;
USB: Invest in a hub. Cheap, and effective.&lt;br/&gt;&lt;br/&gt;
&lt;img src=&quot;macbook_air_review/hub.jpg&quot;/&gt;&lt;br/&gt;&lt;br/&gt;
&lt;/li&gt;&lt;li&gt;
DVD Drive: Buy the Superdrive. They should've packaged it with the machine, true. I keep it in the 'tech' drawer for the 5 times a year I need it.&lt;br/&gt;&lt;br/&gt;
&lt;img src=&quot;macbook_air_review/superdrive.jpg&quot;/&gt;&lt;br/&gt;&lt;br/&gt;

&lt;/li&gt;&lt;li&gt;
Battery: I was trained when I was young on how to use a Philips screwdriver.&lt;/li&gt;&lt;li&gt;
Monitor: Its 160 x 100 px smaller in resolution smaller than my Macbook. Big whoop.&lt;/li&gt;&lt;li&gt;
Keyboard: Here's the funny thing: I like this keyboard waaay better than the Macbook Pro. The black keys give the contrast needed to make the illumination feature actually useful. Sizewise its the same.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
In addition to these features, you can see Apple's engineers refining their designs further. The aluminum chassis provides such fantastic cooling that its cooler than my Macbook Pro, and also slightly quieter. And yes, I shelled out for the Solid State disk. I throw it in my backpack and bicycle home without worrying about my data. The lack of a hard drive and the LED backlight makes the laptop much tougher than most, so I really do use a manila envelope as my case. Why bother with the added bulk? Speaking of bulk, the power supply is even smaller. And the thin incline means typing is more relaxed, your arms rest relaxed on your desk instead of rising to meet the laptop.
&lt;/p&gt;&lt;p&gt;
So GAWD why don't I just MARRY Steve Jobs? Well, I would think about it...if it weren't for one REALLY annoying thing (besides the fact he has a penis). Yes, there is one doozy of a problem with the machine. If I'm going to shell out monstrous piles of cash, I want things to Just Work. And this certainly did not.
&lt;/p&gt;&lt;p&gt;
This is my monitor's DVI Plug(notice the pins on the right, apologies for bad photography):&lt;br/&gt;
&lt;img src=&quot;macbook_air_review/dvi_female.jpg&quot;/&gt;

&lt;/p&gt;&lt;p&gt;

This is macintosh's micro-DVI connector's end looks like (notice the lack of pin holes on the right):&lt;br/&gt;
&lt;img src=&quot;macbook_air_review/mini-dvi.jpg&quot;/&gt;

&lt;/p&gt;&lt;p&gt;

This is what it looks like after I put a soldering gun and X-Acto to it:&lt;br/&gt;
&lt;img src=&quot;macbook_air_review/micro-dvi_after.jpg&quot;/&gt;
&lt;/p&gt;&lt;p&gt;

I couldn't really write this review until I had solved this rather large problem. And I didn't even know how to fix it. So first I figured out that there isn't just one kind of DVI plug. Nope, there are freaking FIVE. So the Macbook Air supports two of the five connectors, DVI-D Single Link, and DVI-D Dual Link.
&lt;/p&gt;&lt;p&gt;

See when the makers of DVI came up with the Digital Visual Interface, they thought 'Hey, let's add extra pins on the back so that people can run a normal analog signal alongside the digital one.' Great idea, but somewhere along the line they made it optional to support those extra pins. Which means my expensive specialty monitor doesn't fit the micro-DVI plug. I used the VGA connector for a week, with minor image ghosting, but after 10 minutes of burning plastic (and accompanying headaches) things are good again.

&lt;/p&gt;&lt;p&gt;
The funny thing was that there isn't anything behind the plastic on that side of the plug. Just empty space. The long flat pin doesn't actually go into anything. Go figure.
&lt;/p&gt;


&lt;h2&gt;
The Perception
&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.dell.com/content/products/category.aspx/xpsnb?c=us&amp;cs=19&amp;l=en&amp;s=dhs&quot;&gt;I hate big laptops.&lt;/a&gt; They annoy the crap out of me. I cannot wait for the day when I can swallow a laptop and have it reside in my intestinal tract, and I won't need to think about it. My favorite computer of all time is the &lt;a href=&quot; http://www.acersupport.com/notebook/html/tmc110_tabletpc.html&quot;&gt;Acer Travelmate C110&lt;/a&gt;. Its 10 inch display is tiny. It weighs 3.2lbs. Its awesome. But alas, planned obsolescence has grabbed hold, and my once mighty mini has gone the way of the dodo. I bought another off eBay used, and I've thrown &lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;Ubuntu&lt;/a&gt; on it, and its snappy and a great travel/home/grandma machine, but not a workhorse like it used to be.
&lt;/p&gt;&lt;p&gt;

'But not a workhorse'- I say that again because this is probably the most cliche phrase when it comes to ultraportables. And why is that? While there have definitely been ultraportables that are pretty wimpy, that's not to say that they all are. Even so, how many people are really maxing out their machine? Conventional wisdom says ultraportables can't be your main machine. Because you need...what? A bigger keyboard? A bigger monitor? I chalk this one up to &lt;a href=&quot;http://www.penny-arcade.com/comic/2001/11/28&quot;&gt;Bigger is Better&lt;/a&gt; mentality. I implore you, get rid of your 'kitchen sink' laptop. You can surf Youtube on a &lt;a href=&quot;http://www.newegg.com/Product/Product.aspx?Item=N82E16834220244&quot;&gt;800mhz 10&quot; laptop&lt;/a&gt;, and on the plus side it won't burn your leg.
&lt;/p&gt;&lt;p&gt;

My neighbor looked at the Air and asked if they make a bigger version. My girlfriend heard on NPR that they were saying that its a great 'second laptop' but not a primary machine. My linux homies wanted to pry it open (alas we could not get a good screwdriver). Overall people are amazed at the size and format, but wonder how something so thin could be useful. It really is a beautiful looking machine. And if you are concerned about aesthetic as much as function, then this is the only machine for you.
&lt;/p&gt;

&lt;h2&gt;Features This, Features That.&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&quot;http://ptech.allthingsd.com/20080221/price-may-be-steep-but-thin-thinkpad-has-abundant-features/&quot;&gt; Features, features, features.&lt;/a&gt;The Macbook Air is a fantastic piece of work. I heartily disagree with most reviews that its missing important features. For me the feature of elegant simplicity outweighs having a bazillion plugs, etc. I would rather say that these extra 'features' are unnecessary, and only beautify the Technical Specifications page of manufacturer's websites. My desk on the other hand, is beautified by the sublime and minimal beauty of the Macbook Air.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=128</link> 
<title>Not as quiet as you'd think.</title> 
<description>I'm still working away.<br/><br/>&lt;p&gt;
Well, its been a while since I've posted on my personal site anything new. I've been working hard as I've gotten a 'real' job for the time being. I thought I'd point you to &lt;a href=&quot;http://zomgforeelz.blogspot.com/&quot; target=&quot;_blank&quot; &gt;my blog at my company&lt;/a&gt;, so you can see what's going on there. Just to give you an idea of what I've been doing: I'm currently Director of Interactive over at Terralever. Right now that means I'm in charge of making about 7 games, 2 flex applications, and numerous flash bits for websites and promotions. I'm staying busy :)
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=127</link> 
<title>Flex and Subversion Problems</title> 
<description>Making Flex and Subversion play nice.<br/><br/>&lt;p&gt;
Flex has a tendency to indiscriminately copy over entire folder structures when you export. You may find that this will wreak absolute havoc with your Subversion checkout. You can diagnose this problem by doing the following:
&lt;/p&gt;&lt;p&gt;
If the folder suddenly has files and subversion folders that don't match with what was there before, you can right-click on the folder and choose 'properties'. Then go to the Subversion properties tab, and see if the url is the correct url for that folder or not.
&lt;/p&gt;&lt;p&gt;
To fix the problem:
&lt;ul&gt;
&lt;li&gt;Delete the folder's contents, including the .svn folder.&lt;/li&gt;
&lt;li&gt;In Flex choose Project-&gt;Properties. Under Flex Compiler uncheck 'Copy non-embedded files to output directory'.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
Most importantly, the flex generated 'html-templates' folder should &lt;b&gt;never&lt;/b&gt; be put under version control. This folder is copied to your bin directory every time you compile (lame!!). That means to Subversion, your bin directory suddenly becomes your html-templates folder, because you're copying the settings in the '.svn' folder into the bin directory.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=126</link> 
<title>FisixEngine alpha 0.5 is out!</title> 
<description>Lots of fun with bouncing sprites.<br/><br/>&lt;p&gt;
The &lt;a href=&quot;http://fisixengine.com/&quot; target=&quot;_blank&quot;&gt;FisixEngine&lt;/a&gt; is a great ActionScript 3 engine for developing games and simulations using particles, constraints, and surfaces. The alpha 0.5 has been released, but I've been playing with it for the past month or two, and its a really solid alpha. Its quite easy to get started, and you can check out some of the tutorials over on the &lt;a href=&quot;http://wiki.fisixengine.com/&quot; target=&quot;_blank&quot;&gt;wiki&lt;/a&gt; to help you get started.
&lt;/p&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=125</link> 
<title>AS3, a new job, and Games</title> 
<description>A mega-update!<br/><br/>&lt;p&gt;
Hello, hello!
&lt;/p&gt;&lt;p&gt;
Its been a while since I've updated, and I felt that I should sort of pop up out of my hole and say hi! Lots of stuff going on...where to start?
&lt;/p&gt;&lt;p&gt;
I've been working writing tutorials for a &lt;a href=&quot;http://fisixengine.com&quot; target=&quot;_blank&quot;&gt;very cool physics engine&lt;/a&gt; written in ActionsScript 3. Check it out. A release is imminent. Really fun stuff. You can expect a game on this site soon. After I'm done training for my 67-mile bike race, I should have more energy to devote to the project.
&lt;/p&gt;&lt;p&gt;
I'll be writing more technical stuff on a new blog for my new job. I'm now running the interactive division of &lt;a href=&quot;http://terralever.com&quot; target=&quot;_blank&quot;&gt;Terralever&lt;/a&gt;, a great company, full of amazing people. We've just finished re-vamping &lt;a href=&quot;http://redbullsoapboxusa.com/game.aspx&quot; target=&quot;_blank&quot;&gt;this game for Red Bull&lt;/a&gt;, and I must say its looking mighty fine (no I didn't animate it).
&lt;/p&gt;&lt;p&gt;
Did you notice that there was a sudden dearth of useful tips for flash? If you did, go get yourself a cookie. That's because AS3 is out, and so I've been spending a lot of time playing with it. So I think I'll be posting a big old tip about e4x and namespaces, as I'm sure this will be very useful info shortly. Flex is an amazing product. I'm quite happy with the new AS3.
&lt;/p&gt;&lt;p&gt;
So a quick tip with xml and as3: calling toString() on a node with no subnodes will not display anything. You must call toXMLString() to get the full text of the node. Wish someone told that to us :P.
&lt;/p&gt;

</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=124</link> 
<title>Flash Tip of the Day</title> 
<description>Unexpected issues when extending MovieClip.<br/><br/>&lt;p&gt;
Have you ever created a MovieClip class and put a couple functions on the timeline...just to find that the code just stopped working? Or perhaps you put a stop() action in a constructor and watched things blew up. Well, these are a couple of the many weird behaviors that can keep you scratching your head for a while. We'll start out with an easy one: What happens when you use 'new' with a MovieClip?
&lt;/p&gt;&lt;pre&gt;
var foo = new MovieClip();
trace(foo); // it exists
trace(foo._x); // undefined
trace(MovieClip(foo)); // returns [Object object]
&lt;/pre&gt;&lt;p&gt;
So new is obviously not an option with MovieClip. As you can see though, the object will evaluate as a valid MovieClip. I'm unsure about what exactly is happening, but it looks as though the MovieClip has an object constructor called, but the initialization of properties must be tied to the graphics initialization, and does not happen(please email me if you have details).
&lt;/p&gt;&lt;p&gt;
But how do we stop this from being allowed with our classes? Simple, use the 'private' keyword on the constructor for all classes that extend MovieClip, and you'll get a very useful compiler error telling you that you're doing something dumb (hopefully by accident).
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=123</link> 
<title>Sabino Canyon Flood Pictures</title> 
<description>My favorite cycling destination in Tucson is gone. -_-;<br/><br/>&lt;p&gt;
I finally figured out that I can email myself pictures off my phone. I hate Verizon, they crippled my phone so that I can't just Bluetooth them off.
&lt;/p&gt;&lt;p&gt;
Anyway, just recently here in Tucson, we've received a lot of rain. Like, a LOT of rain. And so now my favorite cycling route, Sabino Canyon, has now been pretty much watched off the face of the earth. So what happened? &lt;a href=&quot;http://www.azstarnet.com/news/141817.php&quot; target=&quot;_blank&quot;&gt; Massive, unexpected flooding.&lt;/a&gt; 
&lt;/p&gt;&lt;p&gt;
Since Sabino Canyon is such a favorite spot among the Tucson tribe, I've gotten a lot of interest in the photos that I've taken of the devastation. Pictures are definitely louder than words here.
&lt;/p&gt;
&lt;table width=&quot;400&quot; valign=&quot;top&quot;  cellpadding=&quot;20&quot;&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/boulder.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/boulder_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
How it got there, I don't know.
&lt;/p&gt;
&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/rest_area.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/rest_area_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
This used to be the end of the trail with little copper sculptures, landscapes, and a restroom. I'm sort of glad that nasty restroom is gone. :P
&lt;/p&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/fallen_tree.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/fallen_tree_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
This is almost 2 miles in. This is a lot of water for the canyon.
&lt;/p&gt;

&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/landslide.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/landslide_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
There is a road underneath there. Really.
&lt;/p&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/landslide2.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/landslide2_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
To the leftyou can see the rockslide barrier. Never really meant for boulders.
&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/pocked_pavement.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/pocked_pavement_thumb.jpg&quot; width=&quot;128&quot; height=&quot;102&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
Somehow the water got underneath the pavement and tried to push rocks through it.
&lt;/p&gt;&lt;/td&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;a href=&quot;sabino/buried_cactus.jpg&quot; target=&quot;_top&quot;&gt;&lt;img src=&quot;sabino/buried_cactus_thumb.jpg&quot; width=&quot;128&quot; height=&quot;96&quot; /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;p&gt;
I wonder how tall that cactus really is....
&lt;/p&gt;&lt;/td&gt;&lt;td valign=&quot;top&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/table&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=122</link> 
<title>Flash Tip of the Day</title> 
<description>How casting works in AS2<br/><br/>&lt;p&gt;
There is a belief that casting doesn't do anything at run-time, and you'll see that occasionally on forums or message boards. This has led to a belief that there is no run-time type checking in flash. This is not the case. There is just very bad run-time type checking in AS2.
&lt;/p&gt;&lt;p&gt;
In AS1, there is no run-time type checking. The AS1 compiler simply checks syntax, and does not guarantee types of objects. AS2's compiler checks both at compile-time, and at runtime. An AS2 class at runtime is a Function object, like any other function. If you use the 'new' keyword, it will create a new instance of the class. But if you use it like a function and pass it an argument, ex: var foo = MyClass(arg);, The constructor function will instead check to see if the parameter is an instance of class MyClass, and if not return null.
&lt;/p&gt;&lt;p&gt;
The upshot of this is that you can use casting not only for the purpose of casting, but also as a replacement for instanceof....MOST of the time. I never liked instanceof anyway, because of its weird syntax.
&lt;/p&gt;&lt;p&gt;
The up-upshot of that remark about MOST of the time is that casting isn't really casting when dealing with primitive types. So this works as you'd probably expect:
&lt;/p&gt;&lt;pre&gt;
var foo:Str = new Str();
if(Str(foo)){
	trace(&quot;foo!&quot;); 
}
//outputs 'foo!'
&lt;/pre&gt;&lt;p&gt;
But this also traces foo, not necessarily what you'd expect:
&lt;/p&gt;&lt;pre&gt;
var foo:Str = new Str();
if(String(foo)){
	trace(&quot;foo!&quot;);
}
&lt;/pre&gt;&lt;p&gt;
Because String is a primitive, along with Boolean, Array, and Number, they never cast, but &lt;i&gt;convert&lt;/i&gt;. So it would make sense that (like instanceof) you don't want to use cast with primitives, whether you're just checking for type, or actually casting.
&lt;/p&gt;&lt;p&gt;
&lt;a href=&quot;http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001211.html&quot; target=&quot;_blank&quot;&gt;Check out the Macrodobe docs on casting.&lt;/a&gt;
&lt;/p&gt;&lt;p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=121</link> 
<title>Flash Tip of the Day</title> 
<description>Use typing and casting for stricter type checking.<br/><br/>&lt;p&gt;
For many, this may not be much of a tip, but for others it can make their life a lot easier. When writing code in ActionScript 2, the compiler allows you to more strictly control what is an allowed and what is not allowed in a call. For instance:
&lt;/p&gt;&lt;pre&gt;
var foo = new Str();
var bar:String = foo;
&lt;/pre&gt;&lt;p&gt;
What we're doing is creating foo, an instance of Str, then setting bar equal to foo. bar expects a String, but is given Str, yet this compiles fine. This is sloppy code, and due to the similar class names, an easy mistake to make. Change the code to this:
&lt;/p&gt;&lt;pre&gt;
var foo:Str = new Str();
var bar:String = foo;
&lt;/pre&gt;&lt;p&gt;
And we get a compile time error:
&lt;/p&gt;&lt;pre&gt;
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in assignment statement: found Str where String is required.
     var bar:String = foo;

Total ActionScript Errors: 1 	 Reported Errors: 1
&lt;/pre&gt;&lt;p&gt;
Stronger type checking obviously makes finding bugs easier. But what if you extend MovieClip with a class called MyMovieClip with extra functions?
&lt;/p&gt;&lt;pre&gt;
//make an instance of MyMovieClip
var clip:MovieClip = attachMovie(&quot;MyMovieClip&quot;,&quot;__mc&quot;,1);
clip.myFunction();  // our special function on MyMovieClip
&lt;/pre&gt;&lt;p&gt;
MovieClip is dynamically typed for backwards compatibility, so you could type:
&lt;/p&gt;&lt;pre&gt;
clip.myFuntcion();
&lt;/pre&gt;&lt;p&gt;
And it won't catch the error. The compiler doesn't check any variables of MovieClip, even though clip is an instance of MyMovieClip. But you can get type checking by typing to your class MyMovieClip
&lt;/p&gt;&lt;pre&gt;
//make an instance of MyMovieClip and CAST it
var clip:MyMovieClip = MyMovieClip( attachMovie(&quot;MyMovieClip&quot;,&quot;__mc&quot;,1) );
clip.myFunction();  // our special function on MyMovieClip
&lt;/pre&gt;&lt;p&gt;
The compiler now checks to make sure all methods called on the instance are valid function names. This is a much improved coding practice, as you must explicitly specify all used variables.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=120</link> 
<title>Flash Tip of the Day</title> 
<description>Don't use the DataGrid.<br/><br/>&lt;p&gt;
The Macromedia Flash DataGrid is the epitomy of what is wrong with Flash application development. It is a half-broken, confusing mess of a component. The code for it is an opaque maze of inheritance and decoration. And the most troublesome aspect is that it will work for you for a very long time...and then as soon as a revision or request comes through requiring a new feature, that feature you depend on will not work.
&lt;/p&gt;&lt;p&gt;
Its also very sad to think that there is no real alternative. If you need to display a large recordset of some sort, the only other option is to roll your own. And unfortunately, this is not an easy task. Alas, I wish I could fix some of the many problems with the DataGrid: resizing issues, selection issues, general graphical errors, but is it worth it?
&lt;/p&gt;&lt;p&gt;
This is more of a rant than a tip, but the tip is this: Don't use the DataGrid. It is tempting. It is shiny. It'll make your life easier for the whole of an afternoon. But after that, your time is spent fruitlessly attempting to understand and fix the internals of a component gone bad.
&lt;/p&gt;&lt;p&gt;
While I am talking about the DataGrid, the main problem isn't necessarily inside the DataGrid class, but actually spread out among its inheritance chain: DataGrid &amp;gt; List &amp;gt; ScrollSelectList &amp;gt; ScrollView &amp;gt; View &amp;gt; UIComponent &amp;gt; UIObject plus decorations from EventDispatcher, DataSelector/DataProvider and composed of SelectableRows, DataGridColumns, DataProviders and CellRenderers. So before you decide that you want to use DataGrid, chances are you will have to learn in-depth about the above listed classes.
&lt;/p&gt;&lt;p&gt;
Don't do it. Instead, I implore you (don't think I've implored anyone before), make your own datagrid, and share it. And I'll do the same. And maybe together through openness and diversity we can improve the Flash Landscape beyond v2 component hacks and punch the monkey ads, by having REAL components that WORK.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=119</link> 
<title>Flash Tip of the Day</title> 
<description>Use scrollRect instead of setMask for rectangular masking when possible.<br/><br/>&lt;p&gt;
Probably 90% of the masking I do is rectangular. And I do a lot of masking. In fact, probably too much. Better safe than sorry, tho. And so up until yesterday, I'd been using my own tv.ubergeek.geom.Rect class to draw a rectangular movieClip, then calling setMask() on it. Not so anymore. The flash 8 scrollRect feature is really good.
&lt;/p&gt;&lt;p&gt;
After a frustrating couple hours attempting to improve the scrolling speed of a super slow TextField in a mask, I finally made the breakthrough I was looking for. Now the breakthrough isn't using scrollRect, because using it is easy. The breakthrough is that &lt;a href=&quot;http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00002513.html#wp373328&quot; target=&quot;_top&quot;&gt;Macrodobe's documentation&lt;/a&gt; on how to use scrollRect effectively is WRONG.
&lt;/p&gt;&lt;p&gt;
First, for those who don't know: scrollRect is a property of MovieClip that performs fast pixel copying of a rectangular subsection of a MovieClip. It effectively masks a movieclip to the Rectangle. And in order to get the fast pixel copying, you need to set cacheAsBitmap to true.
&lt;/p&gt;&lt;p&gt;
&lt;b&gt;[UPDATE Aug 11,2006: &lt;/b&gt;&lt;a href=&quot;http://newmedia.cdws.ucf.edu/b2evolution/index.php?blog=6&amp;title=scrollrect_mystery_crash&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1&quot; target=&quot;_top&quot;&gt;scrollRect will crash flash if you draw into the clip using the drawing API.&lt;/a&gt; Buyer beware. ]&lt;br/&gt;
When using scrollRect, do not modify the _x and _y of your contents to scroll it around. Modify the x and y of your Rectangle, then set scrollRect equal to your rectangle. As long as cacheAsBitmap is set to true, you'll see that big speed increase.
&lt;/p&gt;&lt;p&gt;
And here is the fixed example from Macrodobe's docs:
&lt;/p&gt;&lt;p&gt;
&lt;pre&gt;
import flash.geom.Rectangle;
var container:MovieClip = setUpContainer();
var window:Rectangle = new Rectangle(0, 0, 100, 40);
container.scrollRect = window;
container.cacheAsBitmap = true;

function setUpContainer():MovieClip {
    var mc:MovieClip = this.createEmptyMovieClip(&quot;container&quot;, this.getNextHighestDepth());
    mc._x = 50;
    mc._y = 50;
    mc.opaqueBackground = 0xCCCCCC;
    
    var content:MovieClip = mc.createEmptyMovieClip(&quot;content&quot;, mc.getNextHighestDepth());
    var colors:Array = [0xFF0000, 0x0000FF];
    var alphas:Array = [100, 100];
    var ratios:Array = [0, 0xFF];
    var matrix:Object = {a:150, b:0, c:0, d:0, e:150, f:0, g:150, h:150, i:1};
    content.beginGradientFill(&quot;linear&quot;, colors, alphas, ratios, matrix);
    content.lineTo(300, 0);
    content.lineTo(300, 300);
    content.lineTo(0, 300);
    content.lineTo(0, 0);
    content.endFill();
    content._rotation = -90;
    
    mc.onEnterFrame = function() {
		window.y -= 1;
		container.scrollRect = window;
    }
    
    return mc;
}
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
Notice that the cacheAsBitmap is set to true. Also we decrement the window.y property instead of incrementing content._y. Lastly we must set our scrollRect property to the newly modified window Rectangle.
&lt;/p&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=118</link> 
<title>Flash Tip of the Day</title> 
<description>The Art of the Proxy<br/><br/>&lt;p&gt;
If there was a Top 10 Flash Tips, this would be #1. Use Proxies (aka Delegates) to keep code off the timeline, and in your class. Proxies are the single most important object type to maintaining and keeping your code sane.
&lt;/p&gt;
&lt;p&gt;
So here's the ultimate beginner's mistake: You've got a movie clip. Inside the movie clip are three buttons and another movie clip. You put actions on your main movie clip. You put actions on the buttons. You put actions on  the internal movie clip. Everything works great.
&lt;/p&gt;
&lt;p&gt;
You have to make some revisions on the flash. You put two of the three buttons in a graphic. The internal movie clip needs to be wrapped in another movie clip to throw a drop shadow on it.
&lt;/p&gt;
&lt;p&gt;
And now you've got code everywhere. This is bad. Proxies are good.
&lt;/p&gt;
&lt;p&gt;
I recommend using&lt;a href=&quot;http://www.person13.com/articles/proxy/Proxy.htm&quot; target=&quot;_blank&quot;&gt; Joey Lott's Proxy class.&lt;/a&gt; It works with Mtasc. You may also use Macromedia's mx.utils.Delegate.
&lt;/p&gt;
&lt;p&gt;Instead of putting your actionscript everywhere, lets create a class and encapsulate all these rollover functions, etc, in one class. We need to:
&lt;ul&gt;
&lt;li&gt;Create the class, and link it to the movieclip.&lt;/li&gt;
&lt;li&gt;Give instance names to all clips you'll be attaching code too.&lt;/li&gt;
&lt;li&gt;Create references to the important clips inside your class&lt;/li&gt;
&lt;li&gt;Create proxies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;pre&gt;
import ascb.util.Proxy;

class MyMovie extends MovieClip{
	
	private var clip1:MovieClip;
	private var buttonA:Button,buttonB:Button, buttonC:Button;
	private var clip2:MovieClip;
	
	private function MyMovie(){

		//create references to the buttons/clips that are important.
		buttonA = clip1.buttonA;
		clip2 = clip1.clip2;
		buttonB = clip2.buttonB;
		buttonC = clip2.buttonC;
		
		//add functions to our buttons and clip.
		buttonA.onRollOver = Proxy.create(this, buttonRollOver,&quot;label1&quot;);
		buttonB.onRollOver = Proxy.create(this, buttonRollOver,&quot;label2&quot;);
		buttonC.onRollOver = Proxy.create(this, goAway);
		
		clip2.onEnterFrame = Proxy.create(this,clip2EnterFrame);	
	}
	
	//called by buttonA or buttonB when they are rolled over. The proxy passes a string to the function so we 
	//can do something different depending on the button.
	private function buttonRollOver(label:String){
		clip1.gotoAndStop(label);
	}
	
	private function clip2EnterFrame(){
		clip2._x += 1;
	}
	
	private function goAway(){
		clip2.gotoAndPlay(&quot;goAway&quot;);
	}
	
}
&lt;/pre&gt;
&lt;p&gt;
We've got a bunch of buttons and movieclips doing different things in different places in the hierarchy, yet our code is kept in the same place. Working with proxies also keeps your scope consistent, so that you are always working with the scope of the class, and not the scope of your clips.
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=117</link> 
<title>Flash Tip of the Day</title> 
<description>Know your configuration directory well.<br/><br/>&lt;p&gt;
Find this directory on your system and bookmark it NOW:&lt;br/&gt;
C:\Documents and Settings\&amp;gt;YOUR USER NAME&amp;lt;\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration
&lt;/p&gt;
&lt;p&gt;
This is the directory which contains all the macromedia class files, object files, and other useful information. There are a lot of directories that do very useful things. Here are the highlights:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Classes:&lt;/b&gt; This contains two important things: classes and aso files. Any classes installed via the Extension Manager (such as the zigo tweening classes) are here. Macromedia's own classes are also here in the 'mx' folder. If you are curious how the classes work, and want to fix an issue, throw a couple trace statements into your MM class file and see what it returns.&lt;br/&gt;
&lt;br/&gt;
Also kept here are the aso files. ActionScript Object files are what .as files are compiled into. Then those files are compiled into swfs. If a class hasn't changed, it won't be re-compiled into an aso, thus saving precious time. Also, this is the directory that is deleted when you choose 'Delete ASO files' from the menu.
&lt;p&gt;
&lt;b&gt;Commands:&lt;/b&gt; If you put a jsfl file into this directory, it shows up in your 'Commands' menu. &lt;a href=&quot;http://www.flashextensibility.com/&quot; target=&quot;_top&quot;&gt;Download (or make) some extensions&lt;/a&gt; and put them in here.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Components:&lt;/b&gt;Throw an fla in here to add it as a component. Modify/play with an existing component here.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;HTML: &lt;/b&gt;This directory contains templates for creating html files. Adding an html file here will add a new option to the dropdown in Publish Settings -&gt; HTML. &lt;a href=&quot;http://ubergeek.tv/article.php?pid=111&quot; target=&quot;_top&quot;&gt;Here's a template I made to handle the new ActiveX issue with flash.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;WindowSWF:&lt;/b&gt; Adding an .swf file to this directory will allow it to be accessible as a window in flash. Unfortunately this is not as useful as you might think, as I've had problems keeping X-Ray and the LuminicBox Logger. They seem to consume large amounts of memory over time, and the only way to close and reset is to close flash itself. But if you have a swf that you'd like to have in the flash interface, you can add it here!
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001049.html&quot; target=&quot;_top&quot;&gt;And check out Adobe's site for more information&lt;/a&gt;
&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=116</link> 
<title>Flash Tip of the Day</title> 
<description>Construct urls for swfs in different folders than html.<br/><br/>&lt;p&gt;
If your swf and the html page that displays it are in different folders, the swf will not try to load from its location, but from the location of the html page. In order to determine the location of the swf, use:
&lt;/p&gt;
&lt;pre&gt;
_global.swfFolder = _level0._url.substring(0,_level0._url.lastIndexOf(&quot;/&quot;)) + &quot;/&quot;;

this.loadMovie(_global.swfFolder + &quot;image.jpg&quot;);
xml.load(_global.swfFolder + &quot;menu.xml&quot;);

&lt;/pre&gt;
&lt;p&gt;
A lot of times development starts without much thought about whether the html and swf will reside in the same directory. It is generally assumed it will be. But a lot of times there are a lot of pages in different folders that will load the same swf. It is a really good idea to plan ahead and always use a variable to construct an absolute url so that you can globally modify the location where your swf will load its data/images/etc. The flexibility it gives you can save you a lot of re-tooling later on.
&lt;/p&gt;
</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=115</link> 
<title>Flash Tip of the Day</title> 
<description>Extending static classes is a bad idea.<br/><br/>&lt;p&gt;
If you find yourself wanting to extend a static class, stop before you go too far and instead use a Singleton.
&lt;/p&gt;&lt;p&gt;
Extending classes with static methods and variables isn't very straightforward in flash. Inheritance does not work as expected. There is no concept of a superclass within a static function. So extending static classes doesn't really extend anything. For instance:
&lt;/p&gt;
&lt;pre&gt;
class BaseStyle extends Object{

private static var textColor:String = &quot;#FF0000&quot;;

private static function init(){
      trace(&quot;textColor:&quot;+textColor);
}

}
class MyStyle extends Foo{
private static var textColor:String = &quot;#00FFFF&quot;;

//calling init will return 00FFFF instead of FF0000! Crap!
}
&lt;/pre&gt;
&lt;p&gt;
How do we get around this? Simple, don't use static classes at all, &lt;a href=&quot;http://en.wikipedia.org/wiki/Singleton_pattern&quot; target=&quot;_top&quot;&gt;instead use a Singleton.&lt;/a&gt;
&lt;/p&gt;
&lt;pre&gt;
class BaseStyle extends Object{
   private static var _instance:A;

   private static var textColor:String = &quot;#FF0000&quot;;

   public function getInstance():BaseStyle{
      if(!_instance){
           _instance = new BaseStyle();
       }
      return _instance;
   }

   //declare functions as normal
   public funciton init(){
      trace(&quot;textColor:&quot;+textColor);
   }
 }
&lt;/pre&gt;
&lt;p&gt;
But we're not out of the woods yet, because while a singleton simplifies things, you still need to override the singleton's instance/getter:
&lt;/p&gt;
&lt;pre&gt;
class MyStyle extends BaseStyle{
   private static var _instance:MyStyle;

   private static var textColor:String = &quot;#FF0000&quot;;

   public function getInstance():MyStyle{
      if(!_instance){
           _instance = new MyStyle();
      }
      return _instance;
   }

   //declare functions as normal
   //init will function correctly.
 }
&lt;/pre&gt;
&lt;p&gt;
 While in the first example you would call MyStyle.init(). 

In the Singleton example the equivalent call is MyStyle.getInstance().init().


&lt;/p&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=114</link> 
<title>Flash Tip of the Day</title> 
<description>The __Packages hack.<br/><br/>&lt;p&gt;If you find yourself creating a lot of empty movie clips in your library just so you can attach classes to them, you can do this in pure code. In your class add this:&lt;/p&gt;
&lt;pre&gt;
static var id = (id=&quot;__Packages.myPackage.myClass&quot;)+(Object.registerClass(id,myPackage.myClass)?&quot;&quot;:&quot;&quot;);
&lt;/pre&gt;
&lt;p&gt;
This will create a variable called 'id' in your class which you can then use to link your class as a MovieClip on the stage:
&lt;/p&gt;
&lt;pre&gt;
import myPackage.myClass;
attachMovie(myClass.id,&quot;_thing&quot;,1);
&lt;/pre&gt;</description> </item><item> // begins the item
<link>http://ubergeek.tv/article.php?pid=113</link> 
<title>Flash Tip of the Day</title> 
<description>Label.autoSize does not work.<br/><br/>&lt;p&gt;
If you need to align a Macromedia Label component, don't use:
&lt;/p&gt;
&lt;pre&gt;
Label.autoSize = &quot;center&quot;;
&lt;/pre&gt;
&lt;p&gt;The documentation is wrong. Use:&lt;/p&gt;

&lt;pre&gt;
Label.setStyle(&quot;textAlign&quot;,&quot;center&quot;);
&lt;/pre&gt;</description> </item></channel></rss>