Archive for 'Reviews'

Commercial cocos2d Code

So we’re pretty big fans of cocos2d around here as you’ve no doubt noticed, but today is a special day cocos2d-wise; it’s the two-year anniversary of our very first post about it! And the library certainly has been remarkably successful by any metric you’d care to measure, but for our anniversary post, let’s talk about commercial offerings for it, that being a particularly striking metric of success of an open source project. Practically unheard of, in fact.

But before we begin, lead developer Ricardo Quesada supports himself selling two projects -

Sapus Tongue Source Code

Complete source to the Sapus Tongue and Sapus Tongue Lite games on the App Store.

LevelSVG

A level editor for platform/labyrinth type games which parses SVG files created by Inkscape into a Box2D world. Samples of what you can do can be seen in LevelSVG Mini Games on the App Store.

Now, we could say some obvious stuff about how best practices for a library would come from the guy who wrote it, or we could mention how insanely responsive Messr. Quesada is to support questions, but let’s not bother with that because the important point’s rather simpler; if you’re making a buck off his work, buying these projects is the very least it’s decent to do. Or if you can’t afford that straight off, at least donate directly here.

Now that you’ve done that — you have, haven’t you? — let’s take a look at two commercial offerings that have sprung up, which we’ve gone and spent some C$250 on just so that we can report on them to you, Dear Reader, because we love you so much.

First off, there’s this fellow @gaminghorror who has set up a site learn-cocos2d.com and is writing a book on it; worthwhile endeavours the both of them you’d think, but in the interests of full disclosure there appears a certain chilliness in relations evidenced, seems there’s a perception that the code he’s selling and we’re about to review competes with the projects mentioned above. Well, we trust our feelings on your correct priorities are quite clear already, so if he’s offering something else useful we don’t really think there ought to be a problem here, diversity and proliferation are good, yes? Speaking out of total ignorance of whatever the actual history there is and just guessing from those links, we hasten to clarify.

Any-ways, on to that source code he’s selling; it’s called Line-Drawing Game Starterkit, it’s US$179 through, well, today, and then up to US$299. As you can guess from the name, it demonstrates a certain wildly popular genre of iDevice game,

linedrawinggame.jpg

and you can check it out for free on your iPhone or on your iPad in the App Store, or read the online documentation. As for us, we installed it, and that went smoothly, defining an Xcode source tree for the cocos2d distribution of your choice is it really, and compiling the iPad target against yesterday’s v0.99.5-beta cocos2d latest almost went smoothly except for a 4.0-only flag in CocosDenshion; we’ll assume that’s their oversight not making it 3.2 compatible for iPad, not something to hold against this project, and yes it up and ran just like the demo. Code is quite clearly written and decently documented, flipping through it and running clang only found a few things stylistically different from our preferred practices and nothing that qualifies as a serious issue.

So yeah, if you’re planning on a Flight Control knockoff, we’d say it’s definitely a fine investment. Otherwise, it’s a decent example of how to structure a project in iPhone and iPad targeting versions, but not overly compelling for the price is our initial impression.

Price, on the other hand, is definitely the selling point of our second product, The iPhone Game Kit; $49 right now, $99 on September 1st. And in this case, it’s marketed as

… a complete, full-featured walkthrough to making your first video game on an iPhone, iPod Touch, or iPad. Even if you don’t have any experience at all, the Game Kit will guide you through your first lines of code and teach you everything you need to know to get your game going…

which does indeed appear to place it in direct contention with Ricardo Quesada’s offerings, and thus some skepticism of motivation is not unwarranted. But hey, you can always look at it as people who are brought into the platform by this might go on to purchase the other offerings later which are indeed somewhat intimidating to the novice no doubt; so we’re not going to rush to any judgement that there’s no redeeming value here. Besides, we dig the old school RPG thing and that’s what his demo ‘Quexlor’ is,

quexlorlite.jpg

you can download it free as a universal iPhone/iPad version from the App Store to check out.

This download comes with a pretty basic “Publishing Guide” as well as “The Book”, a 127-page walkthrough of development, the Quexlor source, and using the Tiled map editor. And quite good indeed that one is, certainly quite a bit better than any other introductory level documentation we’ve seen anywhere. Moving on to the source code, this one includes its own distribution of cocos2d 0.99.4 so we just open the project and run it on a phone, yep works fine. Although ‘Build and Analyze’ comes up with 16 errors all of which look valid, more than a little sloppy there, tsk tsk. Flipping through it, the code looks decent quality but not as self-documenting as we like, loops like for(id o in ra) are the kind of thing we give our minions some choicely sarcastic observations on the value of maintainability as the highest metric of coding quality to aspire to when we catch them at it, but at least it is commented thoroughly. To the point where maintaining the comments would take significant effort actually which we’d say is rather overdoing it as your code should be adequately readable on its own, but hey it is aimed at beginners.

Soooo … whilst we’re not impressed enough to give this kit a wholehearted recommendation, [UPDATE: Well, yes we are as of version 3.0 now] and marketing it as “including” free content from other people both cocos2d and the game’s graphics is somewhat misleading (although granted he does provide attribution, just not prominently) it definitely is a good faith effort with significant value especially in the guidebook; hey, if we ever get around to writing That Great Turn Based RPG that we idly toss the idea of around every so often, we’ll definitely take this project as our starting point. And yes, if you know nothing about writing games and you want to start with cocos2d, it probably is pretty much the best thing out there for you.

So there you go, we figure both these options are good faith efforts and are likely a net benefit to the platform; somewhat more questionably in the second case, but it’s definitely appropriate for someone who needs a more gentle introduction than jumping into LevelSVG or the like straight off, and then they might go on to buy the more advanced stuff later. So you could argue that. Or, hey, just do what we do and buy everything! Sure, sure, some people say money can’t buy happiness … they just don’t know where to shop.

UPDATE:

Thanks to our Gracious Commenter formotion, here’s Jump Up another paid option to check out … although at first glance it doesn’t seem to offer any overly compelling purchase case.

Continue Reading →
14

Ride Buddy beta

Public service announcement time: So, you ever had a problem missing your stop on public transit? Well, apparently the good folk that we worked with in previous incarnations and have now reconstituted themselves as the intriguingly-named 14 Oranges do … or at least they think you might … because as their debut iPhone product they’ve decided there should be an app for that:

RideBuddy2.jpg

Ride Buddy is a simple iPhone app that helps you make sure you never miss another bus or train stop again. If you are travelling in a unfamiliar city, onboard a bus where the foggy windows make it hard to tell where you are, on a crowded train, or simply wanting to sleep on your way to work, Ride Buddy can help you make sure you don’t miss your stop.

Yeah, we could actually have used that on our Japan/Korea trip last winter, since once you get away from the Shinkansen unilingual navigation is … challenging. Particularly, we remember with a mild shudder, in Nagasaki. But that’s another story altogether…

Any-ways, if this sounds like something you could use, the beta is now open,

We are now accepting names for the Ride Buddy Beta app which will be coming out soon. To qualify, you need to ride public transit (bus, subway, train, metro, monorail, ferry) on a frequent basis and have an iPhone 3G, 3GS, or if you are lucky 4 and using iPhone OS 3.0 or higher. If you are interested, e-mail us at support@14oranges.com, with your name, where you live (City and Country), and also let us know what type of transit you will be using.

so sign up, and spread the word!

Continue Reading →
0

Cypress Expansion Board Kit

Ooooh, this is really really nifty: Ever had any desire to do an iPhone hardware accessory? Well, looks like doing so just got a lot easier:

CY8CKIT-023.jpg

The easy-to-use PSoC-based development platform enables highly-integrated modular design of functions such as capacitive touch-sensing, LCD segment drive and much more for traditional iPhone and iPod accessories such as audio docks and speakers, chargers and automotive products. The platform also opens up a new realm of accessories that can leverage the 480 x 320 touchscreen display and many other features of the iPhone and iPod touch for a myriad of markets and applications, including health and wellness, point-of-sale, RFID, and diagnostics and instrumentation tools. Details on the new kit and a video demonstration are available at www.cypress.com/go/cy8ckit-023

Almost enough to make us wish we knew anything about hardware design!

h/t: MacSurfer!

Continue Reading →
2

Review: LifeGoals

Something a little out of the ordinary today: by request, we’re doing a review of the LifeGoals iPhone app from Reefwing Software. Mainly because, well hey we were asked and we’re an agreeable sort of troll, but also it was an opportunity for a little introspection and pontificating that we don’t do very much of and it’s good to on occasion, the unexamined life is not worth living and all that.

To break it down to its simplest, the idea of goal setting is to eliminate unproductive activity and develop productive activity through prioritization and autosuggestion. If you prefer those principles wrapped up in mystical nonsense, then you’ll enjoy books like The Secret. (Thanks, Mom! Great present! We love you, really!) But as most of you Dear Readers no doubt like us would prefer your self-help quota to be approached more in the nature of an engineering problem, we’ll direct you to what was and still is based on our browsing around this last week the best book ever on this subject:

Seriously, if you haven’t read it you should. If there’s any better primer on psychological success anywhere, we certainly are not aware of it. And you really do need to get the basic principles down so that tools to reinforce it, like the LifeGoals app we’re going to get around to talking about sooner or later, are going to be of any use whatsoever. In the meantime, the online help at Reefwing’s website is a pretty decent introduction.

Now, about those tools. We’re not big on rigid organization in anything, and especially not in goal setting. You’ve heard the “no battle plan survives contact with the enemy” aphorism? Or, to expand on that, perhaps you’ve heard Eisenhower’s quote on the Normandy invasion, “The plans were useless, but the planning was indispensable”? That’s pretty much the way we see it. Achieving your goals isn’t about laying out a rigid timetable and sticking to it, which is pretty much guaranteed to fail, it’s about having your Plan A, and Plan B, and Plan C, and on down the line, all ready so that whenever something serendipitous — or negatively serendipitous, whatever the word is for that — comes your way you have a range of possible actions already thought out and prepared. And in the worst case, you end up with what you’ve no doubt seen in large organizations attempting to manage projects what we can call “TPS Syndrome” — that uselessly wasting time on the superficial trappings of process managment becomes a substitute for, you know, actually managing the process. And we’re instinctively inclined to suspect any tool designed for management, whether of software development or life goals, of being an open invitation to fall into that trap.

Now, on the tactical level, a tool to organize immediate tasks has great value. But even there, we’d never found a piece of software worth the trouble of using until last fall, where you may recall our gushing paean to the near-perfection of Cultured Code’s Things task manager. And yes, we still pretty much stand by that, we are relying on it completely, as a matter of fact we’ve started to push long term goals into it, making it pretty close to competition to what LifeGoals is intended to be. Sooo, is there any place for it? Well, let’s — finally! — start to actually take a look at the application.

So it starts up, and there’s a pretty comprehensive list of categories one would set goals in: “Artistic”, “Attitude”, “Career”, … blahblahblah. Well, we’re a troll. There’s really only one thing that qualifies as an overriding goal in our life, and it would be summed up nicely as “finish mosttraveledpeople.com“:

According to our members, the world is made up of 871 countries, territories, autonomous regions, enclaves, geographically separated island groups, and major states and provinces. To visit all 871 would be to go everywhere.

Now that’s a goal worthy of a troll, indeed. And at 202 out of those 871 (23.19%) we’re not doing too badly, but some more formalization is quite possibly in order. So we go to the ‘Travel’ section, create a ‘Finish mosttraveledpeople.com!’ goal, and add a couple tasks towards that goal that we had in mind for the nearish future. And a third rather larger task.

traveltasks.png

That all goes smoothly, the editing process is well thought out. But well, there isn’t much room for LifeGoals to display its prioritization and balancing features if that’s the only thing we track. So let’s add something else. Well, as it happens there is something that could help with; we definitely do tend to spend more time at the computer than is optimal for peak health, so there’s a bit more troll around then we’d ideally like there to be, if you get our drift. Not enough for us to be bothered enough to actually pay attention more than sporadically to actually doing something about it … but that’s pretty much the whole point here, isn’t it? So, let’s add an appropriate goal and a couple achievable daily tasks towards it in the ‘Health’ section:

healthtasks.png

… and whoa, we run smack into the problem that there appears to be no way to set recurring daily tasks. Hmmmm. Well, perhaps we are thinking less strategically than the tool is really intended to be aimed at, but you’d think there ought to be some way to do that, wouldn’t you? So we dig around a bit, and heh, look at this on the Reefwing blog:

… Two obvious mistakes (in retrospect) was ability to edit/add categories and repeating tasks. Rest assured that I am continuing to improve and develop Life Goals…

… Yes repeating tasks will be added. This has been one of the most requested features…

Not just us that wants to use it as a task manager then! Arguably, just putting those tasks as daily tasks in Things would be a lot more sensible anyways … but we can see that putting in a comprehensive set of goals could be of use in filling out the prioritization matrix a bit. And it is pretty cute. Actually, we’re kinda amused how it splits our entries between pretty much trivial and off the chart.

prioritization.png

Yep, it’s very pretty. That goes for the rest of the application too — very nicely designed and intuitively laid out and apparently well programmed, you can pretty much take all that for granted by our lack of observation that it’s not. But is it actually worth the effort to use? Hmmm-mmm-mmm. Well, if you actually need help balancing your various long term goals, why yes we can see this would be an excellent tool. If your strategic directions are pretty much set (that would be a politer way of saying “as one-dimensional as we are”) and you’re only really interested in some help with tactical management, not so much … and at the moment the lack of repeating tasks is a pretty hard block to that, although as mentioned above it looks like that lack will be remedied.

So, there you have our thoughts. If this sounds like something you figure could help you out — click away!

XPilot

Continue Reading →
1

Review: Wifi Body Scale

And today something we don’t get to do nearly enough around here; play with a new toy! Specifically, soon as we found out that there was such a thing as a wifi-enabled weight scale with an iPhone app — no, seriously, a wifi-enabled weight scale, with an iPhone app, you read that right –

wifiscale.jpg

– well hey, we just had to order that sucker immediately. So you get it in a couple days, the Withings people are good with their shipping, and — ooh! It’s shiny! — snap in the batteries and connect it up with the USB cable and go to their website, and it downloads a little native application that fixes your shiny new scale all up for you:

updatingscale.png

There’s just something intrinsically hilarious about a dialog that reads “Restarting the scale…” isn’t there now? Ah, the marvelous cognitive dissonance of our increasingly wired world. Oops, we mean, “wireless”, because the included USB cable mentioned above is only for the initial setup apparently, once you’ve sorted it out with the target wifi network apparently you don’t need it again. Surfing around the web we saw some complaints from people who claimed it wasn’t so good at connecting, but certainly we haven’t had any trouble getting started; found a place for it, hopped on, waited a few seconds for the little fat-measuring bar to dance across, and yeppers by the time we got back to the computer there it was on their web dashboard. You can even have it tweet every measurement, if you’re like extra narcissistic or something; but we figure that for pretty much everybody in the world except ourselves knowing the exact fat content of a troll would be way way into the TMI category.

And, of course, the defensible motivation for getting this shiny toy was to check out the iPhone app integration,

iphonescale.png

which is quite nicely done indeed. About the same information as in the web browser interface, but very dextrously adapted to the iPhone, particularly the very natural feeling way they use swiping and orientation changing to get the various graphs displayed. Nice job all around, and worth taking a gander at if you’re designing any kind of horizontally charted data displaying application, we’d say.

XPilot

So there you go. If you’re really obsessed about tracking your weight/fat composition comprehensively, or if you just dig cool toys, we quite thoroughly recommend picking one of these up! At least judging by our exactly one weighing so far; but hey, how cool is it to say “there’s an app for that” about your weight scale?

Continue Reading →
0

Code: Appirater

Here’s another option to deal with the problem of negative review bias in the App Store by asking your frequent users to post for you: Appirater!

Now every time the user launches your app, Appirater will see if they’ve used the app for 30 days and launched it at least 15 times. If they have, they’ll be asked to rate the app, and then be taken to your app’s review page in the App Store. If you release a new version of your app, Appirater will again wait until the new version has been used 15 times for 30 days and then prompt the user again for another review. Optionally, you can adjust the days to wait and the launch number…

So that looks like a rather simpler alternative to the previously mentioned L0SolicitReview for accomplishing your begging. Code is here on github; enjoy!

h/t: iPhoneSDK!

UPDATES:

UrbanApps / UAAppReviewManager: New Library For Getting More App Reviews Featuring Dynamic Prompts, Localization And More

Continue Reading →
0

New releases

Looks like October’s a big deadline date all around: we’ve got a veritable plethora (ok, three) of new releases that all came to our attention today!

SCM CLIENT:

Zennaware Cornerstone which we’d already designated the best SCM client EVAR jumps to version 1.5, with a laundry list of new features and interface improvements — go click and read it yourself, it’s very long indeed — but we’d like to note that we particularly appreciate how the 22 working copies it’s tracking for us (yes, it’s been busy around here since we first started using it…) which were taking just enough seconds to synchronize at startup to border on mildly annoying, are now instant. Yes, instant. FSEvents rock. If you’re using any other SVN client, you really should check Cornerstone out. If there’s any reason left to use any other Mac client, we sure can’t see what it could conceivably be.

DEBUGGING/VIDEO MAKING TOOL:

Vimov iSimulate which we’d concluded was pretty darn handy for hooking up the Simulator and device input is now version 1.1, and get this, they’ve added screen streaming:

While your application is running on the iPhone Simulator, whether it is a UIKit-based application or an OpenGL game, iSimulate will stream it as a video to your iPhone or iPod Touch in realtime, so that you can more easily move your fingers across the screen, and accurately touch the buttons and controls.

We actually hadn’t found lacking that as much of a problem as you’d think — but hey it’s great to have! Also adds orientation change notification and customizable touch indicators. So yep, for the $32 it’s up to know, we’d call that a pretty compelling addition to your bag of development tricks, yep.

OPENGL PROFILING TOOL:

Graphic Remedy’s gDEBugger which we’d sized up as vital if you do low level OpenGL is now officially released and up to speed with SDK 3.1 and OpenGL ES 2.0, at an introductory $550 price. Still a bit pricey, we grant you … but hey if you are doing any hardcore OpenGL work, there’s just no other way to get this kind of information and it’s going to pay for itself right quick.

Why, it’s just like Christmas with all these new toys to play with!

Continue Reading →
0

Review: Things

OK, this isn’t a “review” really, just a flat out recommendation — buy Things for the Mac and Things for the iPhone, they’ll improve your life.

As you can probably imagine even if you’re not one, being a freelance contractor, and particularly a freelance contract iPhone programmer, involves juggling a vast array of conflicting projects, usually running at least three levels of interrupt deep. And although over the years we’ve dabbled at many, many forms of online and offline organization, most popularly these days some kind of derivation of the GTD™ cult (which if you’re part of, check out this collection) they’ve all ended up in short order being either too unwieldy to be actually useful, too structure-imposing to actually match the real world, or too consumed on process as a substitute for actual achievement … and we end up actually using the good ol’ Stuff To Do piece of scrap paper tucked under the keyboard.

Until now!

We’d been noticing rave reviews of the simplicty of Things popping up all over the web (just check the product pages above on the right for lots of examples, a particularly good one here) but the goodies list here was the one that finally roused us enough to figure hey, if the desktop and iPhone versions actually worked well together, this could finally be one that was worth the effort to get into. And shocked, shocked we were to find that it not only had a learning curve approximating zero, it was actually less overhead than paper. Six days into running it now, and it’s completely taken over running our life, as it works just the way we do … but easier. Amazing, that.

The only thing that comes close to a flaw is that we’d like to see MobileMe (or whatever) sync so that our various computers, iPhones, and iPods could all share state through the cloud with complete transparency. But hey, even without that, it’s still the best — nay, the first and the only — personal task-management software that actually helps us manage tasks as opposed to having us fiddle with managing tasks. Matter of fact, it’s pretty much verging on killer app status for the iPhone platform, that’s how good we think it is … and if your life is anywhere near as unavoidably unstructured as ours, we’re pretty sure that you’ll agree!

XPilot

Continue Reading →
4

More Accessory Development

Here’s a few more handy links for hardware accessory development outside the official program to go along with the headphone connector modem we mentioned earlier:

iPhone/iTouch Serial Port Tutorial

Dock Connector Breakout Board

A Portable User-Space Bluetooth Stack

Let us know if there’s any other happy hacking stuff floating around we could list here!

h/t: iphonesdk!

Continue Reading →
0

Review: iSimulate

So you may recall a little while back we mentioned the various options out there for integrating input from the device into your simulator-running application, and today we’re going to delve into just how well the paid option, Vimov‘s iSimulate, actually works — since they were trusting silly kind enough to provide us with a review copy. Let’s see how that works out for them, shall we?

First off, we’re going to try it out with an accelerometer-controlled cocos2d game that we’re going to be working on soon as things slow down a bit around here — so look for that around the year 2015! Ho ho! — but has the accelerometer input working, so makes a solid test.

Having installed iSimulate.app on our device, we start it running, then download the SDK and read the instructions:

1. Add the iSimulate library file named “libisimulate.a” to your Xcode project…

Drag, click, done.

2. Add the CoreLocation framework to your project…

Click, scroll, drag, click, done.

3. Add to “Other Linker Flags” the value “-ObjC”…

Hmmm, that’s an interesting request. And what is that option, exactly? Ah, so that’s what it is. That explains how they do this without any source changes, then. Any-hoo, we do all our configuration in .xcconfig files, so we’ll just edit the base one for this project to

OTHER_LDFLAGS = $(inherited) -ObjC $(TW_CONFIGURATION_OTHER_LDFLAGS)

4. Oh, wait … there is no 4.

Alrighty then. So we run the app, and lookee there, immediately up shows our computer on the device (You remember from above we started it running before downloading the SDK, yes?):

iSimulate_connect.png

Tap that, and in scrolls the active view:

iSimulate_active.png

Very pretty, yes. Now, your immediate reaction is that makes it impossible to use the thing to actually manipulate a touch interface, since you can’t see what you’re touching. But they’ve addressed that in a surprisingly effective fashion; translucent dots appear on the simulator at the points where your fingers are touching, as in this screenshot of three fingers touching, one directly over the’Menu’ button:

iSimulate_multitouch.png

Turns out surprisingly workable, too, if not the most precise.

And speaking of precision … just how precisely does the response in the simulator reflect the actual device input? Hmmmm … well, it’s not absolutely perfect, we definitely noticed a tendency to overshoot the ball’s acceleration on the play sceen. But it is somewhere between “very good indeed” and “excellent”. As well, our test subject here has extremely twitchy response (by design) so we’re inclined to believe that the input lag here is as good as you can reasonably expect anything going over Wifi to be.

We proceeded to try various combinations of stopping and restarting the device app and the simulator app to see if we could manage to confuse it, and nope; managed to detect/connect/reconnect with casual aplomb.

So it works great for an OpenGL game.

For part 2, we were going to try it out with the multitouch resize ‘Fit Pose’ overlay feature of Poses Volume 1 … but somehow it managed to escape us that iSimulate would, in fact, not make the simulator magically have a camera. And that didn’t occur to us until we’d taken the 30 seconds to go through Steps 1-3 to add it to the project and run it, of course. Oops. So while we were there anyways, we tried it out with the swipe navigation gestures in the full screen gallery, and it worked just as expected on those; and since those work, and we can see the pinch/zoom dots rolling around, we’re quite sure if we bothered to enable the transmogrification in those instances the multitouch would work as well as the single touch does.

However, there was one failure we noticed; whilst tapping on an individual table cell works as expected, it did not seem to recognize a swipe to scroll the table. Which, had we bothered reading to the bottom of the documentation page, we would have seen documented:

Due to technical restrictions, iSimulate does not send touch events for the following UIKit objects (as well as any object based on them): Keyboard, UIScrollView (including MKMapView), UIPickerView and UITableView. All of the other UIKit objects receive all touch events. There are no limitations on OpenGL-based applications.

Hmmm. Wonder what’s up with that? Well, you can always just use the computer’s devices to provide those inputs, so that’s just a mild inconvenience. Although it would be interesting to know exactly what these “technical restrictions” would be, curious trolls that we are.

So! What’s the verdict? Pretty much unqualified recommendation, that’s what the verdict is. As you can see above, integration with our test products took longer to liveblog about than it took to actually perform; there was no mucking with the source whatsoever, just adding a couple libraries and a linker flag; the application found risible our best efforts to confuse it; and although it’s not absolutely faithful to how the device reacts natively, it’s very close indeed and probably as good as you can reasonably expect given that there’s a Wifi connection in between. For the $16 it’s priced at as we write this, by the time it saves you half a dozen install cycles it’ll have paid for itself quite handily.

And we haven’t even touched here on the other big benefit of having this around: that when it comes time to make screencasts of your finished product, they’re going to be much more helpful when made off the simulator with this assistance rather than pointing a video camera at your hand blocking the screen like most of the blurry demo videos you see around. See the samples here for how well that works out; those little gray dots really do make the video quite more informative, indeed.

Convinced? Of course you are. And you know what to do now!

iSimulate

Continue Reading →
2
Page 3 of 5 12345