<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>X Forward</title>
    <link>http://newsite.xforward.com/index.php</link>
    <description>X Forward // RSS // Tales of a Code Pirate</description>
    <dc:language>en</dc:language>
    <dc:creator>brett@xforward.com</dc:creator>
    <dc:rights>Copyright 2010</dc:rights>
    <dc:date>2010-02-02T17:22:27-07:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Making your (Facebook Dev) life easier.</title>
      <link>http://xforward.com/index.php/blog/entry/making-your-facebook-dev-life-easier/</link>
      <guid>http://xforward.com/index.php/blog/entry/making-your-facebook-dev-life-easier/#When:17:22:27Z</guid>
      <description>I know from experience that using the Facebook API can be an exercise in confusion. That&#8217;s why I created this easy to use PHP Facebook Utility class.I hope this little bit of code helps at least a few of you Facebook app developers out there. Check out the full description of the code in the lab right here: PHP Facebook Utility.

That&#8217;s all, short and sweet.</description>
      <dc:subject></dc:subject>
      <dc:date>2010-02-02T17:22:27-07:00</dc:date>
    </item>

    <item>
      <title>Momentile Props and Shout&#45;out to Yours Truly</title>
      <link>http://xforward.com/index.php/blog/entry/momentile-props-and-shout-out-to-yours-truly/</link>
      <guid>http://xforward.com/index.php/blog/entry/momentile-props-and-shout-out-to-yours-truly/#When:16:44:20Z</guid>
      <description>This came through my inbox a couple weeks ago, and since I&#8217;m so diligent about posting entries, I&#8217;m finally writing about it.

Everyone loves to know that their work is appreciated. And if you are a fellow code monkey like me, you know that praise comes along about as frequently as a  solar eclipse. So, you can imagine how delighted I was to see that Fred Sessoms wrote such a glowing review of Momentile.com, and even mentioned my work and Word Press contributions by name. If you&#8217;ve got a few minutes I encourage you to read it, and make a humble developer happy.

Now it&#8217;s back to the code mines, I&#8217;ve hit a vein of game code that is proving to produce an in ordinate amount of awesomenesss.

&#45;Brett</description>
      <dc:subject></dc:subject>
      <dc:date>2010-01-05T16:44:20-07:00</dc:date>
    </item>

    <item>
      <title>PostMaster Users and Fans: READ THIS!</title>
      <link>http://xforward.com/index.php/blog/entry/postmaster-users-and-fans-read-this/</link>
      <guid>http://xforward.com/index.php/blog/entry/postmaster-users-and-fans-read-this/#When:00:37:30Z</guid>
      <description>First, I&#8217;d like to thank all of you who use the PostMaster plugin, it does mean a lot to me to know that it is being so widely used. Now for the bad news. I am _not_ currently supporting the plugin, sorry. I know many of you have emailed me or contacted me through this very website, and I have not responded. Please consider this my response. PostMaster requests are just being logged for future reference, if/when I get time to look at them.

I&#8217;ve just got too much on my plate with freelance work, Momentile (which I suggest you sign up for, just hit me up for an invite code), and a pregnant wife to be able to put any meaningful time into the plugin. I apologize, but that&#8217;s just how it&#8217;s going to have to be for a while. If you&#8217;d like me to keep working on PostMaster, sign up for  Momentile and get all your friends on it, make it super popular. Then I won&#8217;t have to do freelance work, thus freeing up my time to work on PostMaster, its win friggin&#8217; win!

&#45;Brett</description>
      <dc:subject></dc:subject>
      <dc:date>2009-11-03T00:37:30-07:00</dc:date>
    </item>

    <item>
      <title>Android for iPhone Developers &#45; Part 2</title>
      <link>http://xforward.com/index.php/blog/entry/android-for-iphone-developers-part-2/</link>
      <guid>http://xforward.com/index.php/blog/entry/android-for-iphone-developers-part-2/#When:21:52:13Z</guid>
      <description>Dive into the world of Android user interface creation. This is Part 2 in the Android for iPhone Developer series.

No Interface Builder, No Problem
Android does not provide a graphical user interface design application like Interface Builder. But don&#8217;t worry, you won&#8217;t be writing your UIs programatically. Android uses XML&#45;based layout files to define interfaces.

It may not be as slick as using Interface Builder, but layout files are very powerful and pretty easy to use. Think of them as NIB files that you edit manually.

Let&#8217;s look at a simple layout file right now. In your project expand the &#8220;res&#8221; folder, then the &#8220;layout&#8221; folder and double&#45;click the main.xml file. 

Before we get into the layout file, I want you to note the directory hierarchy we just traversed. This hierarchy must be maintained. That means don&#8217;t pull the layouts directory out of the res directory, or don&#8217;t put layout files in the drawable directory. Trust me on this one, just leave the directories like they are.

OK, on to the layout (you may have to click on the &#8220;main.xml&#8221; tab at the bottom of the  pane to view the actual XML).&amp;nbsp; The first thing you&#8217;ll note is the tag named &#8220;LinearLayout&#8221;. Your layouts will always start with a tag similar to this one. It defines the type of layout manager the system will use internally to organize any UI elements you put into it. I&#8217;m going to leave it up to you to read about all the different kinds of layouts available, but I will briefly explain the LinearLayout.

Since you don&#8217;t have drag&#45;and&#45;drop functionality to define exactly where each UI element should be placed, the layouts use pre&#45;defined algorithms to do figure out where elements should be drawn. Our LinearLayout here uses a simple concept to decide where to draw your elements. It draws them in the order they are defined in the layout XML from top to bottom (or if you&#8217;ve defined the layout as horizontal, from left to right). That&#8217;s it. The LinearLayout just starts stacking your UI elements on top of each other. Now let&#8217;s look at a simple UI element, the TextView.

You should see a TextView tag as a child of the LinearLayout. Think of a TextView as a UILabel, its just an easy way to draw text to the screen. Notice the 2 attributes: android:layout_width and android:layout_height. These are common to all UI elements and they define how the width and height of the element should be drawn. The 2 values being used are fill_parent and wrap_content, these are the 2 most common values for layout_width and layout_height.

The fill_parent value is pretty self&#45;explanatory. It tells the layout to draw the element the same width as the parent, which in this case happens to be the layout itself which is taking up the entire screen (as defined in the layout tag layout_width and layout_height attributes). The wrap_content value is also simple to understand. It simply makes the width or height the correct value to only just encase the content. So, if your text is only 15 pixels tall the height will be set to match this.

That&#8217;s the basics of laying out a UI. I know this example is trivial, but there is knowledge to be gained from it. It&#8217;s easier to see concepts and understand them when there&#8217;s not a lot of noise around them.

You may be saying to yourself, &#8220;Well that&#8217;s all fine and good, I can put a text view in a layout and display it, but how do I get a pointer to it so I can manipulate it in code?&#8221;. Patience, grasshopper, that is in the next section.


Getting Pointers to UI Elements in Code
You&#8217;re used to using the IBOutlet descriptor when defining instance variables in your UIViewController so you can hook them up to their corresponding UI elements in Interface Builder. Well, we don&#8217;t have that mechanism in Android, but getting pointers to UI elements is really simple, and its done in code.

But before we can start getting handles to UI elements, they need to be instantiated. Since they live in a layout, we need to get the layout instantiated, then all of its elements will come alive. You know how you can load UIViewControllers programatically with NIB files using the initWithNibName method? Good, because there&#8217;s basically a straight analog for it in Android. Let&#8217;s see it in action, expand the &#8220;src&#8221; directory in the project pane, then expand the package (in my case it&#8217;s called com.xforward.samples, but yours will be named whatever you put in the initial dialog to create the project. Now double&#45;click the activity java file, mine is called MainActivity.java, but yours will be named whatever you put in as the activity name in the initial dialog that we used to create the project.

Not much in there, right? That&#8217;s fine, we only want to see the line with the call to setContentView(R.layout.main), because that&#8217;s our initWithNibName analog. The setContentView() method is inherited from the Activity super class and does exactly what its name implies. It takes a layout resource ID as a parameter, as you can see the layout ID is stored in a class called &#8220;R&#8221;. I&#8217;m not going to get into the details of how this class is created or any of that stuff, just know that it is automatically generated off of the resource files in your project&#8217;s res directory. Think of the R class as your application&#8217;s bundle, it&#8217;s how you get programatic access to your applications resources.

This would be a good time to point out that we are looking at a method called onCreate(). This method is one of many that are called as various events occur that concern your activity. You simply override the ones your interested in. This particular method is one you&#8217;ll always want to override because without it, your activity will have no view to control. The onCreate() method is similar to a UIViewController&#8217;s initWithNibName method, except you are not passed the name of the resource file to load (your are actually passed a Bundle object that represents the state of your application, but that&#8217;s beyond the scope of this article). That may be a bit confusing so think of it like this: when you create a new activity, override the onCreate() method so you can define the activity&#8217;s view.

Let me stop for a minute. You may have noticed that I draw 2 parallels to the initWithNibName method; setContentView() and onCreate(). Allow me to clear up any ambiguities caused by this: setContentView() is called by the activity to load the view for *itself*, onCreate() is called by the system to let the activity know that it has been created and should do something, sort of like viewDidLoad but no view has been loaded yet. If you&#8217;re still scratching your head, think of it like this: onCreate() and setContentView() work together to complete the tasks of initWithNibName and viewDidLoad. onCreate() informs your activity that it should load it&#8217;s view and perform any additional initialization, and setContentView() simply loads the view from a resource and associates it with your activity&#8217;s view.

Now that we&#8217;ve got our view all loaded up, let&#8217;s get a handle on a UI element object. If you look at the resource file in res/layout/main.xml, you&#8217;ll see that it has one element inside the layout tag. This tag defines a TextView object (remember this is basically a UILabel), and if we want access to it in our code (say, to change the text it is displaying based on the state of the application) we need a handle for it. Let&#8217;s do that now.

The first thing we need to do is give our TextView element an ID so we&#8217;ll have a way to ask for it when we want it. Go to the res/layout/main.xml file and add the following attribute to the TextView tag:

android:id=&#8221;@+id/myTextView&#8221;

Don&#8217;t worry about the weird syntax, just know that&#8217;s how you have to do it. This attribute assigns an ID to this element, now we&#8217;ll be able to access it via the R class.

 Back in our activity class, define a new instance variable of type TextView and call it myTextView. Now, go to your activity&#8217;s onCreate() method and add the following line *after* the call to setContentView().

myTextView = (TextView)findViewById(R.id.myTextView);

Bam! Now you&#8217;ve got a reference to the TextView in the layout. Just for fun, let&#8217;s change the text of our TextView. Add the following line:

myTextView.setText(&#8220;This is *my* TextView!&#8221;);

FYI: The best place to find out about available UI elements is in the android.widgets package (http://developer.android.com/reference/android/widget/package&#45;summary.html). 
Now all we need to do is compile and run our little sample application and admire our handiwork.

Coming soon: Part 3 &#45; Compilation, Simulation, and on Device testing</description>
      <dc:subject></dc:subject>
      <dc:date>2009-04-27T21:52:13-07:00</dc:date>
    </item>

    <item>
      <title>Android for iPhone Developers &#45; Part 1</title>
      <link>http://xforward.com/index.php/blog/entry/android-for-iphone-developers-part-1/</link>
      <guid>http://xforward.com/index.php/blog/entry/android-for-iphone-developers-part-1/#When:21:46:14Z</guid>
      <description>Familiar with iPhone application development? Want get your learn on with Android? Then this article is for you.Android Development for iPhone Developers

Learning a new development platform can be a time&#45;consuming and frustrating experience. Especially after you&#8217;ve invested so much time learning one platform, just to have a new pop up. We all know the troubles, not every platform vendor has the same idea of how certain fundamental architectural concepts should be implemented, namely MVC (model&#45;view&#45;controller). And often times the documentation is either sparse, or so vast that you don&#8217;t know where to start.

That is why I am writing this article. To help you recycle as much of your learned iPhone knowledge into building Android applications. Thus, this article is intended for developers who have a firm grasp of the iPhone development platform and its key concepts. It will also help if you have at least a small familiarity with Java fundamentals like packages and such (if you&#8217;ve never used Java before, don&#8217;t worry, keep reading you should be able to keep up).

If you have developed applications for the iPhone OS, then you are familiar with how Apple has chosen to implement MVC, and what classes and interfaces they provide with the SDK. So you&#8217;re probably comfortable with how views are managed by the system and how to perform expensive tasks using timers, delegate callbacks, and sometimes threads. But will this knowledge carry over to the Android world? Or will you have to start from scratch all over again?

Hopefully, the concepts I outline in this writing will allow you to recycle a significant amount of your iPhone development knowledge so you can spend more time building your application, and less time building &#8220;hello world&#8221;.


The IDE
This is a good place to start. There&#8217;s a big difference in development environments for Android and iPhone. The most obvious and glaring one is that Android is a Java&#45;based platform. So, you can kiss XCode and Interface Builder goodbye and give Eclipse a big hug hello (OK, that was corny, but you get my point).

Eclipse is the recommended IDE for building Android applications (recommended by Google, and myself). You&#8217;ll be happy to know that Eclipse runs on OS X flawlessly, so you won&#8217;t need to dig up a Windows PC to do your Android development.

Getting it all set up is not very difficult, and I&#8217;m not going to outline the process of downloading, installing, and configuring it. I trust that if you&#8217;re reading this article that you know how to do that (installation instructions can be found here: http://developer.android.com/sdk/1.1_r1/installing.html). So, on to the basics.

The Starting Line
You need to start somewhere, so the best place is with a really simple application. Actually, I&#8217;m going to use an empty Android application, as created by the Android Eclipse plugin, to explain key concepts. So, let&#8217;s make one.

Launch Eclipse, then go to File&#45;&gt;New&#45;&gt;Project and select &#8220;Android Project&#8221;. Enter a project name, package name, activity name, and optionally an application name (the project name will be used as the application name if this is left blank). Before you click &#8220;Finish&#8221;, let me explain what these fields are.

Project Name: Pretty self&#45;explanatory, this is the name of the project as it will appear in the left hand pane.

Package Name: If you&#8217;re familiar with Java packages, skip to the next item. If not, here&#8217;s a real simple explanation. In Java every class must exist in a package. A package is really just a directory hierarchy where you&#8217;re source code will be stored. So, a package named foo.bar.baz is really just a directory structure of foo/bar/baz. And any classes in that package would be in the last node of that tree. The most common and accepted naming convention for packages is the reverse domain name. You know the appID you created in the iPhone developer portal? Well the package name should be basically the same. For example, my android projects use com.xforward.android.ApplicationName as their base package.

Activity Name: This should be completely new to you. What the heck is an Activity? Think of it as a UIViewController. Without a subclass of UIViewController your iPhone app isn&#8217;t going to do much, right? It&#8217;s where all the logic that controls your view lives, getting data from the model and bubbling it up to the view. That&#8217;s what an Activity is, it&#8217;s a view controller. This particular field wants to know the name of your main Activity, the Activity (or view controller) that will be the first instantiated and shown to the user when the application is started.

Application name: This is the visible name of your application. It will be shown under the application icon in the OS.

Now click &#8220;Finish&#8221;. Not so bad right? Good. On to more good stuff.

AndroidManifest.xml WTF is that?
This is a very important part of every Android application. And by very important, I mean *very* important, as in your application is basically useless without it. So what is it&#8217;s purpose?

I struggled to find an analog for this file to the iPhone world and there really isn&#8217;t one. It&#8217;s kind of like an info.plist, but it&#8217;s a lot more than that. This is going to have to be one of those &#8220;from scratch&#8221; things you&#8217;ll have to learn. But don&#8217;t worry, the basics are easy to understand.

The AndroidManifest.xml file describes your application to the OS. It tells it about your root package so it can find classes to load, it tells it about your application icon and name, it tells it what class to launch when the icon is clicked, and a whole lot more. Let&#8217;s look at our sample one. Double&#45;click on the AndroidManifest.xml, by default you&#8217;ll see the overview view, but we need to look at the actual XML so click on the &#8220;AndroidManifest.xml&#8221; tab at the bottom of the pane.
Find the &#8220;application&#8221; tag and take note of its attributes and child elements. The 2 attributes of the application tag define the application name and icon as will be displayed by the OS. The child element named &#8220;activity&#8221; is a little more interesting.

The activity tag declares an activity that will be used by the application. In this case our sample app only has one activity, the main activity. You can see that the name attribute is actually the class name of your activity (complete with leading &#8220;.&#8221;). Now look at the intent&#45;filter child elements of the activity. We&#8217;re not going to get into intents right now, but just know that this particular intent defines our activity as the main activity that should be created on application launch.

What else goes in here? There&#8217;s quite a bit of stuff that goes into the AndroidManifest.xml file, but in the spirit of getting you up and running quickly, let&#8217;s just hit the 2 major ones.

More activities! I&#8217;d wager that most of your iPhone applications have more than one subclass of UIViewController, well the same is with android apps and activities. Say you application has a main menu view(controlled by your main activity), and a settings view. You&#8217;d want the settings view to be controlled by a different activity than the one that controls the main menu view, so you create a subclass of Activity. But that&#8217;s not all, in order for you to be able to use that second settings activity, you have to declare it in the AndroidManifest.xml file. If you don&#8217;t, you&#8217;ll get a runtime exception when you try to start the activity.

Declaring a new activity is easy, the most basic way is like so:



That&#8217;s it! Now you&#8217;ll be able to use that activity in your application.

The second item I&#8217;ll describe that goes into the AndroidManifest.xml file is permissions. There are 2 basic kinds of permissions: permission your application needs, and permissions your application allows. The former is pretty straightforward, if you application needs access to a resource, for example the camera, you&#8217;d declare that need here. The latter is a little more complicated, but not much. Basically your application can define its own set of permissions to be enforced on other applications that wish to use pieces of your application. Say you have an application that calculates pi to 1 million places, you could expose the method through permissions and other applications you write can now take advantage of this functionality.

In practice, you&#8217;ll probably be using the first kind of permission more frequently so here&#8217;s an example of what a permission declaration looks like:

&amp;nbsp;

The above tag allows your application to access the network (I would wager that&#8217;s fairly important).

OK, let your brain digest all of this new information regarding the AndroidManifest.xml file, then we&#8217;ll move on to another fundamental: making the user interface.
Part 2 &#45; Creating a User Interface

&amp;nbsp;</description>
      <dc:subject></dc:subject>
      <dc:date>2009-04-27T21:46:14-07:00</dc:date>
    </item>

    <item>
      <title>New articles in the Lab!</title>
      <link>http://xforward.com/index.php/blog/entry/new-articles-in-the-lab/</link>
      <guid>http://xforward.com/index.php/blog/entry/new-articles-in-the-lab/#When:17:22:13Z</guid>
      <description>The first 2 parts in a series on Android development from an iPhone developer&#8217;s perspective.New platforms can be tough to deal with at times. There is usually a steep learning curve you must overcome in order to be able to start building *real* projects on the platform. My aim with this series is to flatten that learning curve as much as possible by using well known iPhone development paradigms and drawing parallels to the Android universe.

These articles are aimed at developers who are already familiar with the iPhone OS platform and want to expand their skill sets by jumping into Android development. The first 2 parts focus on getting setup and making a user interface, respectively. I invite all of you to get your learn on in the Labs.</description>
      <dc:subject></dc:subject>
      <dc:date>2009-04-27T17:22:13-07:00</dc:date>
    </item>

    <item>
      <title>Lifting Anchor and Unfurling the Sails</title>
      <link>http://xforward.com/index.php/blog/entry/lifting-anchor-and-unfurling-the-sails/</link>
      <guid>http://xforward.com/index.php/blog/entry/lifting-anchor-and-unfurling-the-sails/#When:17:59:09Z</guid>
      <description>I am embarking on a new adventure in life: sailing the seas of freelance.Today it is official. I am leaving my beloved Kick Start Mobile for the uncharted seas of freelance.

There are too many factors that have prompted this decision to list here, but one of them is undeniable: my need to create.

Not so long ago (although it feels like a lifetime ago), I had a nice well&#45;paying job making mobile applications at a cool company where everyone was friends with one another. I was able to work how I wanted to work, on projects that I actually wanted to work on. Every day was satisfying, I tackled new and exciting challenges while blazing a trail in the fledgling mobile application field. It sounds ideal, and it was. But as the company grew and was purchased (twice), things began to change, as they tend to do. Eventually, the spark was gone, traded for a cushy mesh office chair and a nice window office on the 12th floor. Without daily challenges and the hope of working with new technology, I made the decision to leave. With a couple of friends, I started a new company to make mobile applications, kick ass, and take names.

For the next 2 years everything was just as I dreamed it would be. We were lean and mean, pumping out applications faster than I had thought possible: 13 applications for the Celltop platform in 12 months. Then, without getting into all the details, things beyond our control caused the company&#8217;s focus to change. I tried to be optimistic and retain my passion, but in the end it just wasn&#8217;t what I wanted. The days of endless ideas and constant creation were over, and I was once again faced with a difficult choice.

Which brings us to the present, I&#8217;ve made my choice to leave. It&#8217;s bittersweet to be sure, but I am confident that the right decision was made. I need to be able to create to be happy, and that&#8217;s what it all really comes down to: cutting out all of the bullshit and getting back to what I know in my heart to be: a code monkey. 

My anchor is up, and the course set to the life of a freelancer, a hired gun, a code mercenary. The waters are rough, but the horizon is endless. Yo ho!</description>
      <dc:subject></dc:subject>
      <dc:date>2009-02-19T17:59:09-07:00</dc:date>
    </item>

    <item>
      <title>PostMaster 2.1.0 is ready for download!</title>
      <link>http://xforward.com/index.php/blog/entry/postmaster-2.1.0-is-ready-for-download/</link>
      <guid>http://xforward.com/index.php/blog/entry/postmaster-2.1.0-is-ready-for-download/#When:03:10:53Z</guid>
      <description>Finally! It&#8217;s been a little while, but I finally found a few slices of time to finish the latest iteration of PostMaster. Check out what&#8217;s new!*UPDATE* 
It is not clearly defined in the readme.txt, but your host must be running PHP5 for this plugin to work. Please see the comments below for more info. Sorry about the confusion.

It seems like it&#8217;s been ages since I&#8217;ve release a new version of PostMaster. I&#8217;d like to thank all of you who sent in bugs and worked with me to get this release out, thanks for being so patient.

So what&#8217;s new in 2.1.0?
First of all the message processor is much more robust, I&#8217;ve improved support for multipart messages so garbled messages and missing images should be a thing of the past.
Secondly, I added support for multiple image attachments. That means you can attach as many images as you want and they&#8217;ll all be extracted and embedded into the post. And to control how multiple images are embedded a new template has been added, the image template. Each image attachment will be loaded into the image template, and then loaded into the image post template.

I&#8217;m sure that 2.1.0 is not bullet proof, but it should be much more reliable than 2.0. Why don&#8217;t you download it and find out?

Download PostMaster 2.1.0</description>
      <dc:subject></dc:subject>
      <dc:date>2009-02-18T03:10:53-07:00</dc:date>
    </item>

    <item>
      <title>PostMaster 2.1.0 Recall</title>
      <link>http://xforward.com/index.php/blog/entry/postmaster-2.1.0-recall/</link>
      <guid>http://xforward.com/index.php/blog/entry/postmaster-2.1.0-recall/#When:22:28:03Z</guid>
      <description>I&#8217;m recalling any 2.1.0 pre&#45;release versions I have given out.Turns out that some of the pre&#45;release versions of the 2.1.0 release contain debug code that cause it not to work. I apologize for the inconvenience, things just got a little hectic and I must have committed changes that shouldn&#8217;t have been.

That being said, I&#8217;m still working on the new release when I have any spare time. Which is to say I&#8217;m working on it very little since my spare time is about an hour a week. I know I always say this, but hold tight and it shall be delivered.

Stay rad.</description>
      <dc:subject></dc:subject>
      <dc:date>2009-02-12T22:28:03-07:00</dc:date>
    </item>

    <item>
      <title>New site. New outlook.</title>
      <link>http://xforward.com/index.php/blog/entry/new_site_new_outlook/</link>
      <guid>http://xforward.com/index.php/blog/entry/new_site_new_outlook/#When:17:43:51Z</guid>
      <description>Out with the old and in with the new!This new site you see before you is important in more ways than one. Not only is it pretty, clean and easy to use, it is my way of introducing X Forward into the world of freelance development.
That&#8217;s right, X Forward has now entered into the ranks of the hired gun. Take a look at the portfolio and the lab to see why you should use X Forward for your development needs. Let me also state that I will continue to work on my open source projects as much as time permits. I also plan on adding free code snippets pertaining to various technologies (I&#8217;ve got a doozie for getting double&#45;tap zooming to work in iPhone apps).

So, seekers of high&#45;quality software development, look no further for you have found X Forward.

The design is by Hold Fast Creative, probably one of the best design firms out there on the interwebs.</description>
      <dc:subject></dc:subject>
      <dc:date>2009-02-05T17:43:51-07:00</dc:date>
    </item>

    
    </channel>
</rss>