Friday, December 31, 2010

On Seven Inches

Tim Bray has a year-end blog post up that's worth a read. In case you don't know, Tim Bray is Google's Android Evangelist. As you might expect from someone who would take that job, he's as enthusiastic about the Android platform as I am about iOS. Although his perspective colors his view (as does mine), his analysis is usually pretty good.

He's got one assertion in this most recent post, however, that doesn't seem to ring true to my ear.
Apple will totally do a 7" device. Anyone who’s spent quality time reading books or playing games on the Galaxy Tab knows; there’s a great big hole in the ecosystem that needs something bigger than a handset but that still fits in one hand and you can use for four hours in a row sitting up. This argument is over.


John Gruber seems similarly skeptical, opining yesterday that:
The problem is that it’s nice, for certain tasks, to be able to hold a tablet in one hand, but you can’t do that with the current iPad. I think Bray’s mistake is assuming that using a 7-inch display is the only way to solve that problem.


The argument is far from over, and it's silly to even make the assertion. I have, within arm's reach, the very 7" tablet Tim refers to - a Samsung Galaxy Tab. I have spent quality time with the Tab, and think I definitely count as part of the set known as "anyone", yet I don't see this glaring hole that Tim thinks is so obvious. Personally, I found the Tab awkward for text reading, though part of that is due to Android's abysmal text rendering engine. The only way the Tab is better than the iPad for reading is that it's lighter and more portable. As for games, I'll admit that the Tab's form factor is pretty much ideal for driving games. All other types of games I've tried, it's either no better or worse than the iPad and, of course, there's no comparison in the selection of available games yet.

The Tab is a 16:9 tablet running Android 2.2. For watching 16:9 video content like movies and HD television shows, the end result is that you get roughly the same size image video as you do on the iPad in a package that's lighter and easier to hold, which sounds like a winner, right? There are downsides, however. The smaller form factor means less room for batteries and thus shorter battery life. The energy requirements for a 7" tablet are not considerably less than those of a 10" device, but there's a lot less room for batteries. As a result, while battery life is almost never an issue on my iPad, it's often one on the Tab. If you've seen the inside of an iPad, you know that most of the heft of the iPad comes from batteries. Apple made the design decision that they'd rather have a slightly heavier device that could run all day long on a single charge with normal usage. Based on sales and reviews, I think it's safe to say that was a good decision.

Batteries are getting more efficient every year, as are processors, so at some point, a 7" device with iPad-like battery life is completely feasible, however when that happens, a 10" device will have even better battery life. But battery life is far from the only downside to this form factor.

With the exception of video, some types of games (e.g. car driving games), and likely a handful of other tasks, the smaller form factor is simply not as good as the iPad for most things you'd want to do. It sits in an uncomfortable middle ground between phone-size devices and 10" tablets like the iPad and the… well, like the iPad. The Tab does nothing considerably better than either an iPhone or an iPad. It's "as good" at a handful of tasks.

What it boils down to is that the main advantage of the 7" form factor is that it's easier to carry around with you and is lighter to hold. I'm just unconvinced that's enough of a reason to make a 7" iPad inevitable.

Personally, If I were going to buy something to fit between my iPhone 4 and my iPad, I'd buy a Kindle, and recent sales numbers seem to indicate that many people are making that choice. The Kindle does less than the Tab, but it's even lighter and it does do something better than the iPad, iPhone, and Tab: it's a better ebook reader. It gets great battery life, it's easy on your eyes, has nice text, it's easy to carry, can be held comfortably in one hand, and it's much, much cheaper.

When Apple introduced the iPad, it looked like it was going to compete, and probably kill, the burgeoning ebook reader market. Instead, it pushed those special-purpose devices into a lower price bracket where they no longer compete directly with the iPad. Looking at how the sales numbers have jumped recently, the iPad may just be the best thing that ever happened to the Kindle. The Kindle and Nook are almost down into the "impulse buy" category, and as a result, they're selling like hotcakes, often to people who already own iPads.

But where does a seven inch tablet fit into the market? What would compel someone who owns an iPad to buy one, or would compel someone to buy one instead of an iPad? There isn't really a huge unmet demand for this product to fill. There's no pressing, burning need that would cause people to buy yet another device. A seven inch tablet has to compete with products that are already on the market and that are well-established. It can't compete with the Kindle on price, size, weight, or as an ebook reader. It's not noticeably cheaper than the iPad, yet has shorter batter life. It doesn't do anything that the iPad or iPhone can't. It's only compelling advantages are that it's lighter and smaller. Well, for a small segment of the market, it has another advantage: it's not from Apple.

The Galaxy Tab has been selling pretty well, but it's got novelty working for it, and it's really the only viable non-Apple tablet on the market right now. That will not be the case for long, however. The way the iPad has sold, you can expect every computer hardware manufacturer to try to claim a piece of the tablet market. Microsoft has already announced that, for them, CES would be about "slates" yet again this year (oh, boy!).

For seven inch tablets to gain traction in the long run, they will have to provide a compelling advantage over the iPad, the iPhone, and the Kindle. If they're not going to compete on price, maybe there's some feature or ability where seven inch tablets can distinguish themselves and establish a long-term foothold, but I haven't thought of it yet, and apparently neither have the current tablet manufacturers like Samsung.

The only way Apple will release a 7" tablet is if they think of some compelling reason for such a product to exist. It's possible that the reason would be price - making a more affordable and smaller iPad available to people who can't afford a $500+ device but want something bigger than an iPod touch. That's not impossible given Apple's drive for competitive pricing in their consumer products the last few years, but it's far from a foregone conclusion.

Thursday, December 30, 2010

My Virtual Girlfriend – Updated Version Now Available!


Upgraded version of My Virtual Girlfriend by WET Productions is now available for iPhone, iPod touch and iPad. This is a 3D dating simulation game that takes male users through all the aspects of a virtual relationship. The new version features more actions and dialogues, improved artwork and game balance. Considering your preferences the matching system offers 3 virtual girls form a broad variety of alternatives. Now it is up to you to pick up one of them for dating.

After a brief introduction, the game begins and the aim is to win the girl over. The goal is accomplished by responding to her dialogues with optional emotions and actions. The touch mechanism is available for more interaction. The girl reacts differently according where and how you touch her. The process is full of adult humor with some sex appeal and real-life experience.

As each girl has her own characteristics, the challenge is to act the way you think will please her. Depending on your actions, you win or lose points. It is easy to identify her mood as it is displayed visually and is apparent in the dialogues, so you have to keep her happy, otherwise she will leave and you will have to start over with a new one.

Features Highlight:
* Hundreds of Beautiful Virtual beauties to choose from
* 20+ progressive levels of gameplay
* Several methods of interactions: Emotes, Actions, Activities and Touch
* Full 3D environments and camera control allow you to zoom in and out

Device Requirements:
* iPhone, iPod touch, and iPad
* Requires iOS 3.0 or later (iOS 4.0 Tested)
* 54.5 MB

Pricing and Availability:
My Virtual Girlfriend 1.15 is available on Apple's App Store for $.99 USD now through December 31st 2010.

For more information click here

New Version of Mabel & Lulu: The Real Life Adventures 2.0 has been released

The new version of Mabel & Lulu: The Real Life Adventures 2.0 has been released by Apphaus Design Inc. for your iPhone, iPod touch and iPad. This original interactive digital picture book series is for children, dog lovers and for anyone who likes to read, laugh and learn at the same time!

The main characters are two dogs that are always ready to play with you-Mabel the Great Dane and her Terrier sister Lulu. Their owner Beth-Anne is always happy, despite the harm the dogs do to her.

The version covers two stories- : Lulu goes on Vacation and Mabel has to GO! In the first story Lulu travels by plane to visit with Beth-Anne's sister, Heather. Here one more character- Bird is introduced, who masses up the plan and teases Lulu through her way. Mabel has to GO! Is about Mabel the Great Dane’s problem- she wants to go pee! Here kids have to find out logical tidy solution.

This new interactive way of reading will involve children a lot, as they can touch, drag and swipe the crazy dogs and help them through their real life adventures. The app features over 100 discoverable touch-based animations to surprise and delight children. Users can enjoy 3 to 5 fun interactions per page.

Features:
* Two original stories in one app
* Over 100 discoverable touch-based animations
* Animation options: Help me Discover/ Discover by Myself
* Reading options: Read to Me / Read to Myself
* Original music - groove to Mabel & Lulu's hip theme song and musical animations from bossa nova to disco

Device Requirements:
* iPhone, iPod touch, and iPad
* Requires iOS 3.2 or later (iOS 4.0 Tested)
                                                                     * 87.9 MB

Pricing and Availability:
The Real Life Adventures of Mabel & Lulu iPad/iPhone versions available on the Apple's App Store, for $2.99 USD.

For more information click here

Magic Symbol – new app to stun your friends!

Announcing that the new app Magic Symbol has been released by Cramzy. You can amaze your friends by this tricking app that reads your thoughts! Magic symbol is based on algorithms, which are not visible to users. With these mathematical formulas, the app guesses the symbol the user is thinking of. It creates the magic effect when first seen and is a perfect thing to trick your friends. Magic Symbol is Compatible with iPhone, iPod touch, and iPad.

The app is based on the magical connection between symbols and numbers, and without touching any secret buttons or areas it truly knows which one is the symbol you are thinking of.  This is very simple- you are asked to think of a number between 10 and 99. Than you have to perform couple of operations and get a new number as a result. The next step is to connect the resulting number to a symbol that you think is the best match. Finally, without any questions and touches Magic Symbol displays the symbol you have thought over! The distinguishing feature of the app is that it never miscounts!

The users are encouraged to decode the trick and find out the way the app works. They can share their experience and emotions via e-mail, Twitter and Facebook, so the internet connection is required only for sharing.

Features:

* It never makes mistake
* Sharing via e-mail, twitter and Facebook
* Available for iPhone, iPod touch  and iPad
* iOS 4.2 optimized
* Retina-display ready
* Gorgeous design and graphics
* Stunning musical background


Device Requirements:
* iPhone, iPod touch, and iPad
* Requires iOS 3.0 or later (iOS 4.0 Tested)
* Universal Application
* 9.4 MB

Pricing and Availability:
Magic Symbol 1.0 is only $0.99 USD and available worldwide exclusively through the App Store in the Entertainment category.

For more information click here

Monday, December 27, 2010

New tracking App for your iPhone - Pro Track 1.0 is available on App Store

New app from SolarSpark Pro Track 1.0 has been released for iPhone iPad and iPod touch. This new app allows users to track and record secretly all the movements and visited locations by anyone who carries an iPhone. Through combination of GPS and Cell Tower tracking data all entries are saved according the date and time, and can easily be inspected by opening the app. Pro Track proceeds invisibly in a background mode and at the same time allows the owner to use all options normally.

With this new app you can spy upon anyone who owns an iPhone for different purposes- either shadow your spouse, kid or even employees to track how they do their job. The idea of Pro Track 1.0 is neutral and ethically accepted as it is tamper-free and provides just an accurate log of someone’s route and location.

The person being shadowed is referred as the target by the Pro Track manual. Before starting to track, it is recommended that the user compares available battery capacity with the required tracking accuracy. The initial setup allows five options for accuracy settings: 3 km (1.8 miles), 1 km (0.6 miles), 100 m (328 feet), 10 m (32 feet), and Best (10 feet). Long tracking can be performed when no GPS function is needed, so the app consumes less power. Log entries are made every 3 km. With so called Region Monitoring the location coordinates are purchased free for the battery, as the system is based on a complex algorithm performing continuous positional triangulations between cell phone towers.

As continuous use of GPS in the background decreases battery life, the GPS system is activated only by choosing extremely accurate data requirements. Otherwise the system runs periodically in order to consume less power. Since the tracking is performed, the full screen log of the location is available on the satellite or local map. The log contains the information about the stop or re-start of Pro Track.

Feature Highlights:
* Secretly track the movements of any iPhone owner
* Five accuracy levels
* Tracking is performed invisibly in the background
* Records a detailed log of date, time, and location
* Ideal for long-term tracking over months, or short-term over hours

Device Requirements:
* iPhone, iPad, or iPod touch
* iOS 4.0 or later
* 1.2 MB

Pricing and Availability:
Pro Track 1.0 is only $1.99 (USD) and available worldwide exclusively through the App Store in the Utilities category.

For more information click here

Friday, December 24, 2010

Liberty Wings is free during the Christmas

Updated version of arcade action game- Liberty Wings is planned to be released by Digital Reality. This new version offers to Apple users a great number of additional features making the game more enjoyable and fun to play such as advanced social networking integration, new maps, enemies and bosses.
The changes in gameplay were made according to players requests. For example it was found out that bombing mode even on easy difficulty was too hard for users so the developer team decided to weaken the enemies on this map and enlarge the armor of the player's plane.

Additionally, for Christmas time Digital Reality offers to their users Liberty Wings game for free! So don’t miss this opportunity and enjoy with this great gameplay for Free!

Device Requirements:
* iPhone, iPod touch, and iPad
* Requires iOS 3.0 or later
* 57.7 MB

Pricing and Availability:
For a limited time, Liberty Wings 1.0 is now free and available worldwide exclusively through the App Store in the Games category.


For more information click here

Wednesday, December 22, 2010

More Animation Curves than You Can Shake a Stick at

Core Animation is awesome. It makes doing a lot of complex, fancy animations downright easy. One of the really nice built-in features of Core Animation is the ability to use animation curves. These curves let you specify whether the animation happens linearly (at the same pace throughout the animation), or whether the animation eases in, eases out, or does both.

When you have to go closer to the metal and use OpenGL ES, you're not so lucky. We don't have animation curves provided for us in OpenGL ES. We have to interpolate ourselves. Fortunately, the math behind animation curves is straightforward. Plus, there are far more curves than just the four Apple offers.

I haven't run across a good library for generating animation curves, so I've decided to release my animation curve functions as public domain (no attribute required, no rights reserved). Here is a graph of all the different animation curves I'm releasing:
Ease.png

Here is the original Numbers.app document that generated the graph, and here is the Xcode project that generated the data. The project also contains all the functions needed to plot these curves.

Apple doesn't document which calculations they use for easing, but my guess is that they're quadratic. I'm not sure, though, since many of the curves yield similar results.

All of the interpolation functions included in the Xcode project above take three inputs and return a GLfloat containing the interpolated value. The first parameter, t, is the percent of the way through the animation you want a value calculated for. This is a clamped float that should be in the range 0.0 to 1.0. Values above 1.0 will be treated as 1.0 and values below 0.0 are treated as 0.0. The second parameter, start, is the value when the animation starts. The third parameter, end, is the final value to be animated toward.

If you want to apply a curve to a CGPoint or Vector3D, you have to call the function multiple times for each component (x/y or x/y/z).

Have fun!

Here are the functions included in the project above:

#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
#include <math.h>

#define BoundsCheck(t, start, end) \
if (t <= 0.f) return start; \
else if (t >= 1.f) return end;


GLfloat LinearInterpolation(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return t * end + (1.f - t) * start;
}

#pragma mark -
#pragma mark Quadratic
GLfloat QuadraticEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return -end * t * (t - 2.f) -1.f;
}

GLfloat QuadraticEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * t * t + start - 1.f;
}

GLfloat QuadraticEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.f;
if (t < 1.f) return end/2.f * t * t + start - 1.f;
t--;
return -end/2.f * (t*(t-2) - 1) + start - 1.f;
}

#pragma mark -
#pragma mark Cubic
GLfloat CubicEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t--;
return end*(t * t * t + 1.f) + start - 1.f;
}

GLfloat CubicEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * t * t * t+ start - 1.f;
}

GLfloat CubicEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.;
if (t < 1.) return end/2 * t * t * t + start - 1.f;
t -= 2;
return end/2*(t * t * t + 2) + start - 1.f;
}

#pragma mark -
#pragma mark Quintic
GLfloat QuarticEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t--;
return -end * (t * t * t * t - 1) + start - 1.f;
}

GLfloat QuarticEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * t * t * t * t + start;
}

GLfloat QuarticEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.f;
if (t < 1.f)
return end/2.f * t * t * t * t + start - 1.f;
t -= 2.f;
return -end/2.f * (t * t * t * t - 2.f) + start - 1.f;
}

#pragma mark -
#pragma mark Quintic
GLfloat QuinticEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t--;
return end * (t * t * t * t * t + 1) + start - 1.f;
}

GLfloat QuinticEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * t * t * t * t * t + start - 1.f;
}

GLfloat QuinticEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.f;
if (t < 1.f)
return end/2 * t * t * t * t * t + start - 1.f;
t -= 2;
return end/2 * ( t * t * t * t * t + 2) + start - 1.f;
}

#pragma mark -
#pragma mark Sinusoidal
GLfloat SinusoidalEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * sinf(t * (M_PI/2)) + start - 1.f;
}

GLfloat SinusoidalEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return -end * cosf(t * (M_PI/2)) + end + start - 1.f;
}

GLfloat SinusoidalEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return -end/2.f * (cosf(M_PI*t) - 1.f) + start - 1.f;
}

#pragma mark -
#pragma mark Exponential
GLfloat ExponentialEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * (-powf(2.f, -10.f * t) + 1.f ) + start - 1.f;
}

GLfloat ExponentialEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return end * powf(2.f, 10.f * (t - 1.f) ) + start - 1.f;
}

GLfloat ExponentialEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.f;
if (t < 1.f)
return end/2.f * powf(2.f, 10.f * (t - 1.f) ) + start - 1.f;
t--;
return end/2.f * ( -powf(2.f, -10.f * t) + 2.f ) + start - 1.f;
}

#pragma mark -
#pragma mark Circular
GLfloat CircularEaseOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t--;
return end * sqrtf(1.f - t * t) + start - 1.f;
}

GLfloat CircularEaseIn(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
return -end * (sqrtf(1.f - t * t) - 1.f) + start - 1.f;
}

GLfloat CircularEaseInOut(GLclampf t, GLfloat start, GLfloat end)
{
BoundsCheck(t, start, end);
t *= 2.f;
if (t < 1.f)
return -end/2.f * (sqrtf(1.f - t * t) - 1.f) + start - 1.f;
t -= 2.f;
return end/2.f * (sqrtf(1.f - t * t) + 1.f) + start - 1.f;
}

First Multiplayer Slot from Viaden Mobile for free

Viaden Mobile is announcing the release of Multiplayer Slots for iPhone, iPod and iPad Casino segment and moreover the app is for FREE. Users can enjoy the gameplay with 2 multiplayer and 1 single modes and can compete with rivals worldwide by participating in global Tournament, or play with friends.

The Tournament lasts for 20 minutes and includes 5 different levels to go through. Players are able to choose the number of rivals (max. 3). The one with highest achievement wins the prize- extra chips for playing further. The amount of chips grows with the number of contestants. Extra options – switching between slot machines are available at high levels making the chance of getting lucky scatter greater.

Private tournaments can be held through choosing Play with Friends mode. The number of rivals is the same – from 1 to 3. With this option users compete against their pals. Number of extra features makes the game close to reality and makes playing process more involving and exciting. For improving the strategy, players are available to spy upon their rivals’ scores. In-game chat is available for more interaction among players.

When choosing single mode, the duration of the tournament can vary between 10 to 60 minutes according to the players’ desire. Users need to increase their initial points to score the victory. All 6 slot machines in high-res Retina graphics are available in this mode.

For the most involved players there are extra 20 achievements available to unlock. Most successful contestants will be listed on the LeaderBoard with the support of the Game Center.


Device Requirements:
* iPhone 3GS, iPhone 4, iPod touch (3rd, 4th Gen), and iPad
* Requires iOS 4.1 or later
* 97.9 MB

Pricing and Availability:
Slots Multiplayer 1.0 is free and available worldwide exclusively through the App Store in the Games category.

For more information click here

Tuesday, December 21, 2010

The Little Grashopper Blog

Well, I'm not sure how I never ran across it before, but Philip Rideout, author of O'Reilly's iPhone 3D (a book I recommended last week), has a hell of a blog for people interested in OpenGL. A lot of the posts are specific to desktop OpenGL (and recent versions of OpenGL at that!), but there's tons of great information that applies to OpenGL ES as well. It's a veritable treasure trove of advanced graphics goodness from a guy who's been doing it for years.

More Math Resources

After posting about the free Linear Algebra book, I was told about another resource for learning math via Twitter. The Khan Academy is a not-for-profit website providing online video courses on a number of topics. They don't just cover math, but they do cover math extensively. They have well over 100 video lessons on linear algebra alone. Definitely a great resource I'm happy to pass along!

Non-Deterministic Problems aka Finding Talent

As programmers, we usually deal with deterministic systems. To state it simplistically, deterministic systems are systems where the same inputs always results in the same output. Unless we intentionally introduce randomness¹ or have a relatively rare kind of bug in our code, the same inputs to our programs will always yield the same output. It could very well be the wrong result if our algorithm is bad, but it should be the same wrong result every time, which is a trait we rely on heavily.

In the real world, most things we encounter are non-deterministic. There are always factors we can't control or measure, and most systems have a human element. We are at the mercy of whim and emotion, and that's hard for a lot of programmers to deal with. Our fellow humans's decisions are decidedly non-deterministic and hard to predict, as are ours (though we usually don't notice this trait quite as much in ourselves).

You may have noticed that I haven't had much time to write lately. I've been exceedingly busy of late, even by my own standards. Although a lot of my time is being spent writing and debugging software, I've also been involved with some very non-deterministic problems as a result of my involvement with some large, complex development projects.

Probably the biggest non-programming problem that I've had to deal with lately, which most of my industry peers and nearly all of our clients are dealing with also, is finding good, experienced, reliable developers to staff projects. In short, there aren't enough experienced mobile software developers to go around. There simply aren't as many developers with multiple successful projects under their belt as there are companies who need the services of such people. I know of one large company that currently has ten open requisitions for mobile developers - five iOS and five Android - and no viable prospects at the moment. I helped one client recently bring aboard a good iOS developer, which took several months, and then I very quickly regretted it, because MartianCraft could really use that developer's services now.

Yet, on the other hand, whenever I blog about just how much work there is right now, I inevitably get several e-mails or comments from developers wanting to know how to find all this work. I make it sound like it's raining work, and they're not getting wet.

Given that, I thought it worth a few minutes to write about both sides of the equation: how to find developers, and how to find work as a developer. This isn't an exhaustive treatment, just a summary of recent observations.

For Developers: Finding Work



Unfortunately, I've got no silver bullet for aspiring developers. Overnight success is often indistinguishable from years of hard work. There are countless issues around getting that are not mobile development-specific that I'm not going to touch, such as a willingness to relocate ("go where the work is").

As with any industry, a large part of finding work is establishing a reputation and getting to know as many people in the industry as you can. Though it's expensive, you really need to go to WWDC, and probably a couple other conferences as well. About half, maybe even more, of MartianCraft work has come directly or indirectly as a result of one of us attending a conference. Conferences are where we meet our peers and where we develop and maintain our relationships with them. You should also attend CocoaHeads and/or NSCoder Night if you have one near you. This is where you can meet and get to know local iOS and Mac developers. On the Android side, there are similar meet-ups that you can attend.

When going to hire or subcontract a developer, most people I know will automatically prefer someone they've met, talked with, and maybe shared a drink with over a stranger, no matter how good the stranger's resume looks. Confidence in someone's ability to get a job done comes more rapidly from personal interaction. Resumes are sterile, but sitting down and working through a tough bug with somebody gives you a real feel for the other person's character and technical chops in a way you can never get from a resume.

At conferences, don't worry about going to every session. Everybody tries to at their first DubDub, but don't. Really. Pace yourself so you can socialize in the evenings. That may sound like bad, or even frivolous advice - as if I'm telling you to play hooky, but the information in the sessions can be found again. Most conferences videotape their sessions, and usually some of the attendees do joint note-taking using SubEthaEdit and make those notes available. But socializing with industry peers is vital if you want to do this full time, especially as an Indie. These are the people who can give you work (and accept work when you're too busy to take on new work yourself), and they are the people who can help you when you're stuck on a gnarly technical problem. These are the people who can give you a different perspective on something you've been staring at for far too long and are the people who can help you become a smarter, better developer.

Though not perfect, the iOS and Mac developer community is incredibly giving and helpful. It's not uncommon for direct competitors to help each other out and consider each other friends. Most of us realize that it's not a zero-sum game, and helping out others in our community usually comes back with interest. Scratch that. Not usually. Always.

Getting ongoing work requires more than being liked by other developers, however. You have to give people a reason to have confidence in your abilities. Creating or contributing to open source projects can show huge (if not immediate) returns. In the early days of iOS, before Core Data was available, my SQLitePersistentObjects project brought me nearly as much recognition as having my name on the cover of iPhone programming books.

Regular blogging is also a huge opportunity. Not only does it give people an idea of the depth of your knowledge, it gives you a chance to learn and improve. I don't think I've posted more than a couple technical blog posts where there wasn't either a correction or improvement sent to me by a reader, and often there were many. Just remember not to get defensive or depressed when it happens. You don't stop making mistakes until you stop living, but if you keep learning, you can avoid making the same mistake too many times. Readers who care enough to point out your mistakes are valuable beyond belief. Tame your ego and cherish them. Nobody's going to think less of you as a developer for occasional mistakes or less-than-perfect code.

But, no matter how much of the above you do, there is one absolute prerequisite to getting work on an ongoing basis: you have to have the technical chops. This is probably the hardest thing to figure out. I've met many great developers who lacked confidence in their abilities and I've met some who've had far too much confidence in them. It's really hard to gauge your own ability and it's almost always sobering to revisit older code you've written. No matter how good you get, there's always room to get better and if you're doing it right, you will. As developers, we're paid as much for our ability to quickly assimilate new knowledge as we are for the things we already know.

Don't worry too much about your whether you have a specific degree, or a college degree at all. You don't have to have a computer science or computer engineering degree to be a good programmer. There are many, many great programmers (including inside Apple) without those degrees and, in fact, without degrees at all. College is one way to get the information and some of the experience you need to be a good programmer, but it's not the only way, and it's possible (though probably not common) to get through school with a CS or CE degree and completely suck. Some of the worst iOS programmers I've encountered have both degrees and programming experience. Objective-C is a bit of a weird beast, and overconfidence is a big problem for experienced developers coming from C++, Java, and C# background. They look at Objective-C, see familiar aspects, and think they know what they're doing, sometimes completely oblivious to the differences between a static, strongly-typed language and a dynamic, weakly-typed one or the differences between a garbage-collected language and a reference-counted one.

In a perfect world, nobody would ever be able to offer their services as an iOS developer without perfectly understanding the rules around memory management. I'm not suggesting you should, but everything else, you could learn on the job, but you have to really grok the way retain counting and memory management work to be a professional iOS developer. You can really fuck up a code base trying to fix EXC_BAD_ACCESS bugs if you don't know what you're doing and can create an awful lot of work for somebody else in the process. You can also get away with an awful lot of leaks if you're developing on the simulator that will cause significant problems later. The stakes get much higher when you're working on the same code at the same time other developers are.

One thing to seriously consider, even if you have a few apps under your belt, is to take a class or workshop. There are some excellent ones out there, including (but certainly not limited to) the Big Nerd Ranch and the Pragmatic Studio. A few thousand dollars may seem like a lot of money, but it's a hell of an investment given the work opportunities available right now. A good workshop will beat into your head the important stuff. They'll strap a firehose of information onto your face and open the spout. They will make your brain hurt, but you will come out knowing memory management and the fundamentals, and that will put you in the running.

Another key skill is debugging. Being able to fix your bugs and those you find in other people's code is vital. Plus, the more bugs you encounter, the more things you know not to do in the future. Want to test yourself? Try downloading this. It's an Xcode project — a modified version of one of the Beginning iPhone 3 Development projects — that has a number of common bugs introduced into it. You should be able to get this to compile clean (no errors or warnings), then be able to navigate into every view in the application without it crashing and with something being displayed on every view. Once you've done that, you should then be able to fix any leaks in the app using Instruments. How long it takes is going to depend on a lot of factors, but I'd say that a typical, experienced, professional iOS developer should be able to fix this in between a half hour and an hour and a half. Regardless of how long it takes, if you can fix them all without help, you've gone a long way down the path to becoming a great developer.

Don't worry if you can't find them all that quickly. The first time you encounter a particular class of bug, it takes more time. Persistence is as important as speed, and debugging this project is a good exercise. Once you see a type of bug once, it's much easier to find and fix it when you encounter it again.

If I find time over the holiday, I might do a screencast showing how to find and fix all the bugs in the project. I can't promise I'll find the time to do that given my current workload, but if I can, I will.

Lastly, if you're looking for full-time iOS or Android employment, or for contract development work, send me your resume. MartianCraft isn't hiring full-time employees at the moment, but we do often need subs, and I know of many, many open requisitions for full-time jobs and I'm always happy to pass resumes along to hiring managers.

For Companies: Finding Mobile Developers



The other side of the equation is, how do you staff a mobile development project right now? Many experienced mobile developers were attracted to the space because it offered them the ability to make a living creating what they want to create. Mobile, and especially iOS development offer opportunities for small teams without a lot of funding to make a decent living. Many of those indie developers are doing exactly what they want to be doing and it's going to be hard, if not impossible, to attract them away from that life, if they're good at what they do.

Hell, many contract developers have app ideas they'd love to be working on themselves. A friend of mine who owns a development shop stated the problem fairly succinctly recently by saying: "We've got several app ideas we'd like to build, but clients keep throwing money at us."

I don't know exactly how many contract iOS developers there are with Objective-C experience that pre-dates the release of the iPhone SDK and/or who have several successful projects under their belt, but it's less than are needed. Big businesses are finally catching on to the importance of mobile and that's making a shallow talent pool even shallower. The situation for Android is similar. Though there are more people who already know the underlying language (Java), the platform has only relatively recently hit critical mass, so there aren't a lot of people who have been involved with successful Android software projects yet compared to the work available, and even less who have successfully shipped multiple Android projects.

In all reality, you're either going to need to offer crazy rates to lure the cream of the crop to your project (and that is no guarantee you're going to get the cream) or you're going to need to invest time and money into developing internal talent. I would advise at least having one really good, experienced tech lead on any decent size project, though. As many App Store success stories can attest, it is absolutely possible to ship good software using only inexperienced developers. But, doing so increases your risk substantially. Having at least one mentor who can guide and help and solve the really icky problems is gold.

In most places, you can train developers more cheaply and more quickly than you can find existing ones, at least if you're looking for full-time employees. It's not a perfect plan - your newly trained people will be learning on the job and making mistakes and may, at times, hit problems that are beyond their ken. But, with the proper training and support, they can handle the bulk of the work, and over time, will gain the experience to handle anything. Of course, you'll have to take steps to keep them from leaving. Arming an employee with a highly marketable skill always incurs a risk of losing that employee.

You can deal with that using contract terms requiring payback of training expenses or other similar ideas, but it's far more effective (albeit harder) to create an environment where people want to work. Job satisfaction is a bigger motivator for many developers than the size of their paycheck, assuming they're making enough to be comfortable and to feel valued. We're one of the few growth industries in this economy, and there's always another paycheck somewhere if you have these skills, so if you're create a hostile environment, no amount of money is going to keep the good people around long term.

There's another option you might be considering: offshoring. Go ahead. I mean, anything I say against the practice is going to seem biased given what I do for a living, and it's true that you can get considerably lower rates by doing it. I've seen shops in other countries offering iOS development services for about what you can make working at Burger King here in the states. And there are actually success stories from offshoring to cheap development body shops. Unfortunately, there are even more horror stories. In the few cases where I've been brought in to fix² projects of this nature, it's always been a waste of time and we ended up just throwing out the old code and starting over. Let me tell you, "start over" is a suggestion that strikes fear into the hearts of project managers.

To put it as fairly as possible: Offshoring increases risk. If you're comfortable with more risk, then it might be a good choice for you. There's a chance you'll come in way under budget and be a hero. Just recognize that there's a larger chance you'll end up six months down the line starting over completely. Any way you cut it, you're likely to have language barriers, cultural differences, and a hard time enforcing accountability. The simple fact of the matter is, even in countries with considerably lower cost of living, opportunities for good mobile developers are legion, so the only way those shops can maintain those excessively low rates is with a constant stream of new, inexperienced bodies. Call me crazy, but it seems to me, that if you're going to have inexperienced bodies working on your project, you'd be better off with ones closer to home that you can train and guide and have some idea of what they're doing.

I'll be blunt. If you're looking to build a team of iOS or Android developers in-house, you've got a tough road ahead of you at the moment. At some point, we'll hit equilibrium and it will get easier, but right now, it's hard. Just as I suggested to aspiring developers, I'd encourage you to get involved with the community. Send somebody, preferably somebody with some authority to hire developers and whose day-to-day job is working with the technology, to conferences, CocoaHeads meetings, and NSCoder Nights, or the Android equivalents (Meetup.com is a good place to find both iOS and Android groups in your area).

I'm always happy to hear from companies that need iOS or Android development resources. I'm thrilled to refer potential employees your way if you're looking for in-house talent, and MartianCraft is always open to talking with with you about your development needs, whether it's for a little strategic consulting and guidance, or to fully staff a development project. And if MartianCraft isn't a good fit for your situation or doesn't have the resources available to do a great job, there's a pretty good chance we know somebody who is and does. If we do, we'll connect you with them.



1 Technically speaking, without external input of some sort, computers are not capable of true randomness, and using a pseudorandom function doesn't make a computer non-deterministic. Pseudorandomness does make the computer pretend to be non-deterministic, though, and you will appear to get different output from the same input on successive runs of the program.
2 The term that we professionals in the industry use to refer to this process is "unfucking". Surprisingly, most dictionaries have not picked up this term yet.

New Version of Action Lists GTD Task Manager has been launched for your iPad

Announcing that a new version of Action Lists- the task manager from Daze End Software has been released for iPad. For those, who are keen on Getting Things Done System, Action Lists has something new to offer- additional flexibility in how they access their tasks, since it can synchronize its data with the web or  with an iPhone running Action Lists. The easy to use interface facilitates managing all non-calendar activities and provides one of the best solutions for planning and tracking tasks. Action Lists includes the same GTD features but in a larger format that suits the iPad screen better.

The new version of this application features popular over-the-air synchronization with Toodledo web service. This enables others to view, modify or complete tasks with you. Besides, users can enter tasks using a full keyboard and the computer, and transfer them back to iPad via Toodledo.

This unique application has function to search task-lists and sort them manually or alphabetically. The consumers can use unlimited level of subproject support. By setting up a 'tickler file' they have ability to hide  future tasks until specified start date and when the start date comes the hidden tasks appear in inbox ready for processing. The application features different language support: English, Spanish, French, German, and Japanese In addition, with Action Lists you can email tasks to friends directly within the app.


Device Requirements:
* Compatible with iPad
* Requires iOS 3.2 or later
* 1.8 MB

Pricing and Availability:
Action Lists 3.0 for iPad is available to be purchased through the App Store at a price of $19.99 USD. For those that would prefer to "try before you buy," a limited version called Action Lists Lite for iPad is available in the App Store for free.

For more information click here

Monday, December 20, 2010

Free Course in Linear Algebra

Computer graphics programming uses linear algebra so heavily, you could basically say it's based on it. Yet, many people — perhaps most — who develop an interest in graphics programming don't have a background in Linear Algebra. At most universities, it is taught as an upper-level (300 or 400) mathematics course, which means that the majority of students who aren't majoring or minoring in math or certain hard sciences, typically don't take them. Even if you have studied it, if you've gone a period of time without using it, you very likely have forgotten it.

Yet, if you want to go beyond a certain level in graphics programming, you need to understand it.

Today, I stumbled across a free course in Linear Algebra, and it looks to be quite good. It's dense but, hey, this is higher math we're talking about here, so there's not much that can be done to simplify it without making it incorrect. But the price is right, the content is good, and what's even better is that the course doesn't assume much in the way of specific prior knowledge.

Make no bones about it, this is hard stuff to learn, but if you've got a reason to learn it (like a drive to create computer graphics), it helps a lot. Linear algebra in the classroom taught in an abstract manner bored me to tears. Having a real reason and being able to do things with it makes it much more rewarding and fun.

TouchRetouch 2.0.1- New Photo Editing App for Apple Users

Announcing that new version of TouchRetouch 2.0.1- has been released by Adva-Soft for your iPhone, iPod touch and iPad.
This photo editing software and a crystal-clear image viewer features a clone stamp tool and direct sharing via social networks. Video tutorials and localized help are available to all users.

This unique photo editing tool facilitates to remove undesired objects from just captured or saved photos, with finger swipes and taps only.

The sophisticated image viewer enhances the quality of the image displayed, no more large pictures appearing blurred in a smaller screen, but displayed very clearly on all mobile devices, thus retaining the original size.

With the app’s clone stamp you can create unique effects, use various brushes, as well as horizontal/vertical image flipping modes. Handy hint viewer is available to check where the changes are taking place and view the full image while the latter editing.

When finished, you can directly share the photo via Flickr, Facebook, Picasa, Twitter or email to your friends. Clear illustrations, tips and documentation can be accessed along with the video and text tutorials for perfect use of this revolutionary product.

TouchRetouch 2.0.1 Features Highlight

* High resolution, in-app video tutorials and localized text instructions
* Powerfull clone stamping
* Handy hint viewer
* Customized application settings
* Unlimited UndoRedo actions
* Smart image background recovery techniques
* Easy to use interface
* Can be used in portrait or landscape mode
* Flickr, Facebook, Picasa, Twitter direct sharing
* Original image resolution
* Sending retouched images via e-mail directly
* iOS 4 multitasking support
* Optimized algorithm for large-scale pictures
* Brilliantly clear image viewer for all iDevices
* Localization in French, Italian, Japanese, Dutch, German and Russian

Device Requirements:
* iPhone, iPod touch and iPad
* Requires iPhone OS 3.1 and later
* 29.2 MB

Pricing and Availability TouchRetouch 2.0.1 is only $0.99 (USD) and available worldwide exclusively through the App Store in the Photography category.


For more information click here