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

<channel>
	<title>/dev/random &#187; Programming</title>
	<atom:link href="http://mcdevzone.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://mcdevzone.com</link>
	<description>iPhone &#38; Macintosh Development</description>
	<lastBuildDate>Mon, 30 Aug 2010 02:52:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Game Level Design</title>
		<link>http://mcdevzone.com/2010/08/02/game-level-design/</link>
		<comments>http://mcdevzone.com/2010/08/02/game-level-design/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 02:17:53 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[removr]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=6121</guid>
		<description><![CDATA[One thing I learned from writing Removr is that designing level maps is a lot more challenging than writing code. There are tools like debuggers &#038; unit tests to verify code, but the only way to test a game level is by playing it repeatedly. You can&#8217;t verify that a level map is &#8216;correct&#8217; &#8211; <a href='http://mcdevzone.com/2010/08/02/game-level-design/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>One thing I learned from writing Removr is that designing level maps is a lot more challenging than writing code. There are tools like debuggers &#038; unit tests to verify code, but the only way to test a game level is by playing it repeatedly. </p>
<p>You can&#8217;t verify that a level map is &#8216;correct&#8217; &#8211; it&#8217;s largely subjective and involves more art than science. A game level needs to be visually appealing and needs to be challenging enough to maintain interest while still being possible to win.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/08/02/game-level-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying to sneak one past Apple hurts everyone.</title>
		<link>http://mcdevzone.com/2010/07/21/trying-to-sneak-one-past-apple-hurts-everyone/</link>
		<comments>http://mcdevzone.com/2010/07/21/trying-to-sneak-one-past-apple-hurts-everyone/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 04:00:22 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[removr]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=6097</guid>
		<description><![CDATA[Yesterday Apple approved an innocent-looking flashlight app which contained a hidden tethering feature. Needless to say, as soon as Apple found out about it, they pulled the app. I&#8217;ll admit, it was a brilliant feature and I bought the app while it was still available. If you weren&#8217;t lucky enough to get Handy Light, iProxy <a href='http://mcdevzone.com/2010/07/21/trying-to-sneak-one-past-apple-hurts-everyone/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Yesterday Apple approved an innocent-looking <a href="http://appshopper.com/blog/2010/07/20/handy-light-tethering-app-camouflaged-as-flashlight/">flashlight app</a> which contained a hidden tethering feature. Needless to say, as soon as Apple found out about it, they pulled the app. </p>
<p>I&#8217;ll admit, it was a brilliant feature and I bought the app while it was still available. If you weren&#8217;t lucky enough to get Handy Light, <a href="http://wiki.github.com/tcurdt/iProxy/">iProxy</a> is available at github, which will do exactly the same thing without masquerading as a flashlight app.</p>
<p>As a result of this deception, Apple seems to be a lot more cautious and taking more time to review apps, as reported by several developers on Twitter and the iPhone SDK mailing list. I only submitted Removr yesterday, but it&#8217;s still &#8220;waiting for review&#8221; 24 hours later. Most of the time it was less than an hour waiting for review before it changed to &#8220;In Review&#8221;.</p>
<p>During beta testing, I had a feature in Removr which checked my server for updated level maps. I was doing very careful version &#038; timestamp checking and could either run SQL code to insert or modify levels or replace the entire level database. I removed that feature for the release version because I was afraid Apple would reject it if they discovered it.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/07/21/trying-to-sneak-one-past-apple-hurts-everyone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I chose SQLite instead of Core Data</title>
		<link>http://mcdevzone.com/2010/06/19/why-i-chose-sqlite-instead-of-core-data/</link>
		<comments>http://mcdevzone.com/2010/06/19/why-i-chose-sqlite-instead-of-core-data/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 03:36:45 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[removr]]></category>
		<category><![CDATA[cocoa]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=6017</guid>
		<description><![CDATA[A lot has been written about the relative benefits of Core Data or SQLite in an iPhone app. In most cases, Core Data is easier and has some performance benefits, but the data store is difficult to create &#038; modify from outside of your application. SQLite, on the other hand, has some excellent tools like <a href='http://mcdevzone.com/2010/06/19/why-i-chose-sqlite-instead-of-core-data/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>A lot has been <a href="http://maniacdev.com/2009/09/iphone-sqlite-vs-core-data-–-which-to-choose/">written</a> about the relative benefits of Core Data or SQLite in an iPhone app. In most cases, Core Data is easier and has some performance benefits, but the data store is difficult to create &#038; modify from outside of your application. SQLite, on the other hand, has some excellent tools like <a href="http://www.sqlabs.com/sqlitemanager.php">SQLiteManager</a> for creating &#038; editing data. Therefore, if you have a large amount of pre-loaded data that you want to be able to edit easily, SQLite makes more sense.</p>
<p>This is exactly the case with Removr. Game levels are defined by an object that specifies the background image and a bitmap of the layout of pieces on the screen. Although Core Data could easily fetch the object as needed in Removr, it would be very difficult for an external level editor to create those objects and update the persistent store. </p>
<p>My level object happens to be very simple and can easily be mapped to a database structure.</p>
<pre>
// Level.h
@interface Level : NSObject {
    NSData * _map;
    NSString * _background;
    NSNumber * _index;
}

@property (nonatomic, retain) NSData * map;
@property (nonatomic, retain) NSString * background;
@property (nonatomic, retain) NSNumber * index;

@end

// Level.m
#import "Level.h"

@implementation Level
@synthesize map = _map, background = _background, index = _index;

- (void)dealloc
{
    self.map = nil;
    self.background = nil;
    self.index = nil;
    [super dealloc];
}
@end
</pre>
<p>The corresponding database structure looks like this:</p>
<pre>
CREATE TABLE levels (
	ix integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
	background text,
	map blob NOT NULL
);
</pre>
<p>Fetching the objects from sqlite takes more code than using Core Data but isn&#8217;t too difficult. I need to deal with two different SQLite3 objects for the database connection and the prepared query. Rather than interpreting the SQL query every time you execute it, you will prepare the query once and execute it as many times as you want.</p>
<p>A good introduction to the SQLite3 C interface is available <a href="http://www.sqlite.org/cintro.html">here</a>.</p>
<p>Here is my level manager. My init method opens the database connection and prepares the query that will be used later. Note that the query includes a &#8216;?&#8217; for variable substitution.</p>
<p>The GetLevel method is where the interesting stuff happens. The function sqlite3_bind_int() tells it which level number we&#8217;re looking for and sqlite3_step() actually executes the query. In this case, I&#8217;m only interested in a single row, but in many cases it will be called repeatedly as long as it returns SQLITE_ROW. I then use the sqlite3_column functions to extract data from the result row and populate my Level object. Finally, calling sqlite3_reset() will allow the prepared statement to be reused. </p>
<pre>
// LevelManager.h
@interface LevelManager : NSObject {

    NSString *_dbpath;

    sqlite3 * db;
    sqlite3_stmt * query;
}

@property (retain,nonatomic) NSString *dbpath;

@end

// LevelManager.m
#import "LevelManager.h"
#import "Level.m"

@implementation LevelManager

@synthesize dbpath = _dbpath;

- (id) init
{
    if ((self = [super init])) {
        self.dbpath = [[NSBundle mainBundle] pathForResource:@"levels" ofType:@"sqlite3"];
        sqlite3_open([self.dbpath UTF8String] , &#038;db);

		// this query will be used to obtain a level from the database.
		// The '?' will be replaced with the level number when we perform the query
        sqlite3_prepare_v2(db, "SELECT * FROM levels WHERE ix=?", -1, &#038;query, NULL);

    }
    return self;
}

- (void)dealloc
{
    sqlite3_finalize(query);
    sqlite3_close(db);

    self.dbpath = nil;

    [super dealloc];
}

- (Level*)GetLevel: (int)number
{
    Level *lvl = nil;

	// specify the level number we want for the query
    sqlite3_bind_int(query, 1, number);

	// request a row from the query result
    if (sqlite3_step(query) == SQLITE_ROW) {
        void *blob;
        int nbytes;

		// first, create a new level object
        lvl = [[Level alloc] init];

		// integer columns are easy
        lvl.index = [NSNumber numberWithInt: sqlite3_column_int(query, 0)];

		// string columns are a bit more complex since we need to convert a C string to a NSString
        lvl.background = [NSString stringWithCString:(char*)sqlite3_column_text(query, 1)
                                                                 encoding:NSUTF8StringEncoding];

		// BLOB columns require two calls to obtain the actual data and the length
        blob = (void*)sqlite3_column_blob(query,2);
        nbytes = sqlite3_column_bytes(query,2);

		// we use the bytes &#038; length to create a NSData
        if (blob &#038;&#038; (nbytes > 0)) {
            lvl.map = [NSData dataWithBytes:blob length:nbytes];
        }
    }

	// get ready to reuse the query
    sqlite3_reset(query);

	// we should return an autoreleased object
    return [lvl autorelease];
}

@end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/06/19/why-i-chose-sqlite-instead-of-core-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quick and easy image caching for UITableViews</title>
		<link>http://mcdevzone.com/2010/05/31/quick-and-easy-image-caching-for-uitableviews/</link>
		<comments>http://mcdevzone.com/2010/05/31/quick-and-easy-image-caching-for-uitableviews/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 02:14:09 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[cocoa]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5988</guid>
		<description><![CDATA[PicSlide uses a table that lets you choose a picture to play with. For each picture it shows a thumbnail. When the thumbnails are loaded from the application&#8217;s resources, you don&#8217;t have to be too concerned with image loading time.However, when I load those thumbnails from the web, as I do now with the Magic <a href='http://mcdevzone.com/2010/05/31/quick-and-easy-image-caching-for-uitableviews/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>PicSlide uses a table that lets you choose a picture to play with. For each picture it shows a thumbnail. When the thumbnails are loaded from the application&#8217;s resources, you don&#8217;t have to be too concerned with image loading time.However, when I load those thumbnails from the web, as I do now with the Magic Panda, scrolling the table can become extremely slow.</p>
<p>Previously, I was loading the thumbnail directly from my table data source&#8217;s cellForRowAtIndexPath: method.</p>
<p><code>
<pre>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"tvCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"tvCell" owner:self options:nil];
        cell = tvCell;
        self.tvCell = nil;
    }
    NSString *url = [picUrls objectAtIndex: indexPath.row];
    UIImageView *img = (UIImageView*)[cell viewWithTag: 2];
    img.image = [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString: url]]];
}
</pre>
<p></code></p>
<p>If you don&#8217;t have too many rows, a NSMutableDictionary makes a quick &#038; easy image cache. I simply added one method to implement image caching:</p>
<p><code>
<pre>
NSMutableDictonary *imageCache;

- (UIImage *)getCachedImage: (NSString*)url
{
    UIImage* theImage = [imageCache objectForKey:url];
    if ((nil != theImage) &#038;&#038; [theImage isKindOfClass:[UIImage class]]) {
        return theImage;
    }
    else {
        theImage = [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString: url]]];
        [imageCache setObject:theImage forKey:url];
        return theImage;
    }
}
</pre>
<p></code></p>
<p>When I load my table, I now call getCachedImage rather than fetching the image directly.<br />
<code>
<pre>
    img.image = [self getCachedImage: url];
</pre>
<p></code></p>
<p>The result can be seen below:</p>
<div align=center>
<object type="application/futuresplash" width="480" height="385"><param name="movie" value="http://www.youtube.com/v/tGHs8BZD_5A&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/futuresplash" width="480" height="385" src="http://www.youtube.com/v/tGHs8BZD_5A&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object>
</div></p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/05/31/quick-and-easy-image-caching-for-uitableviews/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yazzem API is live</title>
		<link>http://mcdevzone.com/2010/02/27/yazzem-api-is-live/</link>
		<comments>http://mcdevzone.com/2010/02/27/yazzem-api-is-live/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 05:48:48 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5471</guid>
		<description><![CDATA[If you haven&#8217;t heard of Yazzem, it&#8217;s a site similar to Twitter which lets you start topics about anything you want. Unlike Twitter, Yazzem is conversation oriented. You create or join a topic and add comments to the thread. Topics &#038; comments are limited to 200 characters, making them more like a tweet and much <a href='http://mcdevzone.com/2010/02/27/yazzem-api-is-live/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t heard of <a href="http://www.yazzem.com/">Yazzem</a>, it&#8217;s a site similar to Twitter which lets you start topics about anything you want. Unlike Twitter, Yazzem is conversation oriented. You create or join a topic and add comments to the thread. Topics &#038; comments are limited to 200 characters, making them more like a tweet and much easier to use and more lightweight than a traditional forum. Yazzem was founded by Dustin Snider and Zachary Collins, both 15, and was acquired by Teens In Tech Networks (which I&#8217;m the CTO of).</p>
<p>The Yazzem team has been working on an API which will allow developers to build applications that interact with Yazzem. It will be featured at the <a href="http://hackerdojo.pbworks.com/API-Hackathon">Hacker dojo API hackathon</a> tomorrow.</p>
<p>Read the Yazzem team&#8217;s API announcement <a href="http://blog.yazzem.com/2010/02/26/yazzem-api-is-live/">here</a>. The API is documented at <a href="http://api.yazzem.com/">api.yazzem.com</a>. </p>
<p>For Mac &#038; iPhone developers, I&#8217;ve created a Cocoa wrapper class with both Mac &#038; iPhone demo applications, available at <a href="http://github.com/mike3k/Cocoa-Yazzem">http://github.com/mike3k/Cocoa-Yazzem</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/02/27/yazzem-api-is-live/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Time to drop 2.x support.</title>
		<link>http://mcdevzone.com/2010/02/22/time-to-drop-2-x-support/</link>
		<comments>http://mcdevzone.com/2010/02/22/time-to-drop-2-x-support/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 15:17:34 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[icanhascheezburger]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5453</guid>
		<description><![CDATA[Pocket Gamer reports that Apple is no longer charging for the 3.x firmware upgrades for iPod Touch. This means that developers can now safely drop support for firmware 2.x and move forward. I was already planning to make I Can Has Cheezburger 2.0 require firmware 3.x, since Three20 requires it. This makes my decision a <a href='http://mcdevzone.com/2010/02/22/time-to-drop-2-x-support/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Pocket Gamer <a href="http://www.pocketgamer.co.uk/r/iPhone/Apple+iPhone+30+software/news.asp?c=18486">reports</a> that Apple is no longer charging for the 3.x firmware upgrades for iPod Touch. This means that developers can now safely drop support for firmware 2.x and move forward.</p>
<p>I was already planning to make I Can Has Cheezburger 2.0 require firmware 3.x, since Three20 requires it. This makes my decision a lot easier.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/02/22/time-to-drop-2-x-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make web apps act more native</title>
		<link>http://mcdevzone.com/2010/02/21/make-web-apps-act-more-native/</link>
		<comments>http://mcdevzone.com/2010/02/21/make-web-apps-act-more-native/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 05:51:52 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5446</guid>
		<description><![CDATA[With a simple trick you can make a web-based app look and act more native on an iPhone or iPod Touch. Adding the following tags to your &#60;HEAD> will make your application open in full screen and hide Safari&#8217;s toolbars. In addition, if you add it to your home screen, it will appear to open <a href='http://mcdevzone.com/2010/02/21/make-web-apps-act-more-native/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>With a simple trick you can make a web-based app look and act more native on an iPhone or iPod Touch.</p>
<p>Adding the following tags to your &lt;HEAD> will make your application open in full screen and hide Safari&#8217;s toolbars. In addition, if you add it to your home screen, it will appear to open without Safari and no page will be added to Safari.<br />
<code>
<pre>
&lt;meta name="viewport" id="viewport" content="width=device-width,user-scalable=no,minimum-scale=1.0,maximum-scale=1.0" />
&lt;meta name="apple-mobile-web-app-capable" content="yes" />
&lt;meta name="apple-mobile-web-app-status-bar-style" content="black" />
</pre>
<p></code><br />
The following tags, which should also be added to &lt;HEAD>, will provide an icon for the home screen and a splash screen to be displayed when it opens.<br />
<code>
<pre>
&lt;link rel="apple-touch-icon" href="http://example.com/webclip.png" />
&lt;link rel="apple-touch-startup-image" href="http://example.com/startup.png" />
</pre>
<p></code><br />
The first application I&#8217;ve seen which uses this trick is <a href="http://feedafever.com/">Fever</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2010/02/21/make-web-apps-act-more-native/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ICHC Update</title>
		<link>http://mcdevzone.com/2009/12/24/ichc-update/</link>
		<comments>http://mcdevzone.com/2009/12/24/ichc-update/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 20:25:40 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[icanhascheezburger]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5194</guid>
		<description><![CDATA[Good news: there will be an ICanHasCheezburger app update sometime after the holidays. This isn&#8217;t the fabled Three20 based version 2.0, but a minor update which simply changes the feed URL. However, by doing so, it should fix most of the crashes. Our application uses a &#8216;scraped&#8217; feed generated from the site content rather than <a href='http://mcdevzone.com/2009/12/24/ichc-update/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Good news: there will be an ICanHasCheezburger app update sometime after the holidays. This isn&#8217;t the fabled Three20 based version 2.0, but a minor update which simply changes the feed URL. However, by doing so, it should fix most of the crashes.</p>
<p>Our application uses a &#8216;scraped&#8217; feed generated from the site content rather than the site&#8217;s own RSS feed. We do this because the standard RSS feed only has a limited number of items and must be loaded in its entirety.  By scraping the site, we can create multiple pages with unlimited items, which load a lot faster since it only loads 10 or fewer items at a time.</p>
<p>The feed scraper was originally developed by the folks at ICHC for their dashboard widget. I later modified it to support all of their sites and change the output from JSON to simplified XML. Unfortunately that feed scraper has a major flaw. It uses regex pattern matching to parse the HTML, which is a <a href="http://www.codinghorror.com/blog/archives/001311.html">Very Bad Thing</a>. The script can easily get confused by changes to the site and often produces invalid data. It also hasn&#8217;t included videos since a format change at the site broke it.</p>
<p>Last night I started hacking at it with PHP&#8217;s XML parser and DOM commands and came up with a much more robust script that uses element classes to identify valid items and to avoid outputting bad data that could crash the application. I&#8217;m also hosting it on my own server at DreamHost, so I can easily fix it myself instead of having to go back and forth for fixes as we do now.</p>
<p>Unfortunately a few Viddler movies still won&#8217;t play, since they must be explicitly enabled for downloading on the site.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2009/12/24/ichc-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lack of Manpower May Kill VLC For Mac</title>
		<link>http://mcdevzone.com/2009/12/16/lack-of-manpower-may-kill-vlc-for-mac/</link>
		<comments>http://mcdevzone.com/2009/12/16/lack-of-manpower-may-kill-vlc-for-mac/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 04:22:09 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=5181</guid>
		<description><![CDATA[Via Slashdot: plasmacutter writes &#8220;The Video Lan dev team has recently come forward with a notice that the number of active developers for the project&#8217;s MacOS X releases has dropped to zero, prompting a halt in the release schedule. There is now a disturbing possibility that support for Mac will be dropped as of 1.1.0. <a href='http://mcdevzone.com/2009/12/16/lack-of-manpower-may-kill-vlc-for-mac/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://rss.slashdot.org/~r/slashdot/eqWf/~3/fHC3aOF6GQI/Lack-of-Manpower-May-Kill-VLC-For-Mac">Slashdot</a>:<br />
<blockquote>plasmacutter writes &#8220;The Video Lan dev team has recently come forward with a notice that the number of active developers for the project&#8217;s MacOS X releases has dropped to zero, prompting a halt in the release schedule. There is now a disturbing possibility that support for Mac will be dropped as of 1.1.0. As the most versatile and user-friendly solution for bridging the video compatibility gap between OS X and windows, this will be a terrible loss for the mac community. There is still hope, however, if the right volunteers come forward.&#8221;
</p>
</blockquote>
<p>VLC is one of my favorite applications, so I&#8217;d hate to see it die. Unfortunately I have too many other things going to take on another project, especially an unpaid one, or I would get involved.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2009/12/16/lack-of-manpower-may-kill-vlc-for-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ICHC Crashes</title>
		<link>http://mcdevzone.com/2009/09/09/ichc-crashes/</link>
		<comments>http://mcdevzone.com/2009/09/09/ichc-crashes/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 03:12:20 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[icanhascheezburger]]></category>

		<guid isPermaLink="false">http://mcdevzone.com/?p=4970</guid>
		<description><![CDATA[I&#8217;ve been receiving a lot of reports of ICHC crashing recently. I&#8217;ve never been able to duplicate any of those crashes myself, but from looking at the crash logs available in iTunes Connect I have an idea of what&#8217;s crashing them. The crashes seem to occur when restoring the last viewed item results in an <a href='http://mcdevzone.com/2009/09/09/ichc-crashes/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been receiving a lot of reports of ICHC crashing recently. I&#8217;ve never been able to duplicate any of those crashes myself, but from looking at the crash logs available in iTunes Connect I have an idea of what&#8217;s crashing them.</p>
<p>The crashes seem to occur when restoring the last viewed item results in an index out of range. We use a scraped feed (which is hosted on one of ICHC&#8217;s servers) that returns pages of 10 items each, to reduce the load time. I&#8217;ve seen a few instances where items, usually videos, are missing from the scraped feed, and in that case it returns a page of fewer than 10 items. If you happen to have been viewing item 10 the last time you quit and the next time you end up with only 9 items, it will crash.</p>
<p>I&#8217;ve put in some error handling for that case, but if you&#8217;re experiencing that crash, I&#8217;d like to have you test it before I submit the update, so email me your device ID and I&#8217;ll add you to my beta list. Note that Apple can take several weeks to approve an update, so even if I submit it right away, it may be a while before the update becomes available.</p>
<p>This will be the last update to this version. I&#8217;m doing a major rewrite for version 2.0 using Three20, the framework used in the FaceBook app. This will be a free upgrade. </p>
<p>Before I do much on v2.0, I&#8217;m finishing a new application I plan to release first. More about that in the next few weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://mcdevzone.com/2009/09/09/ichc-crashes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
