Archive for 'Software'

PhotoScrollerNetwork

Now this looks worth a serious look if you need to drop a downloadable photo gallery in somewhere — and who doesn’t?

Apple’s PhotoScroller sample code for iOS looks to many as a perfect starting place to display a scrolling list of photos that can each be zoomed significantly. It uses a CATiledLayer as a backing store so it does not have to load whole images into memory.

That said, after you see the three pretty jpeg images in the project, you lift up the covers and find approx 800 pre-tiles png files – its the pretiling of the jpegs that makes this project work.

Why, yes. Yes, we had noticed that.

So, I’ve taken that project and greatly enhanced it:

https://github.com/dhoerl/PhotoScrollerNetwork

And enhanced how? For instance,

- blazingly fast tile rendering – visually much much faster than Apple’s code (which uses png files in the file system)

- you supply a single jpeg file or URL and this code does all the tiling for you, quickly and painlessly

- provides the means to process very large images for use in a zoomable scrollview

- is backed by a CATiledLayer so that only those tiles needed for display consume memory

- each zoom level has one dedicated temp file rearranged into tiles for rapid tile access & rendering

- demonstrates how to use concurrent NSOperations to fetch several large images from the web or to process local image files

- the incremental approach uses mmap, only maps small parts of the image at a time, and does its processing as the image downloads and can thus handle very large images

That’s a pretty handy set of features for your large image display needs, isn’t it now?

UPDATE:

If that’s a little overpowered, you might want to check out MWPhotoBrowser — A simple iOS photo browser

Continue Reading →
1

Resource Checking: Cong

Here’s a handy tool for running over your OS X apps to look for resource issues — Cong:

What is Cong?

To check for leaks, you use leaks or Instruments. To check for obvious (or less obvious) bugs, you use gcc and LLVM options, or you use the Build and Analyze feature of Xcode. To check that your code works, you test it. But what do you use to check the resources of the bundle of your application? Say hello to Cong.

Checking what is obvious to stop being oblivious

Cong checks multiple points and details that can seem obvious but which are not always known by everyone. Your application may be running fine, may have won Awards and still be not perfect. For instance, did you know that there is a limited set of characters allowed for a bundle identifier and that ‘_’ (underscore) is not one of them? Did you know that the recommended encoding for .strings files is UTF-16? Did you know that the CFBundleGetInfoString key is deprecated for Info.plist files?

Looks handy, yep. So we ran it over our last OS X release, and …

Screen shot 2011-02-13 at 11.57.22 PM.png

… and so it actually is handy. Fancy that. OK, straight into our regular toolchest that one goes!

h/t: xcode-users!

Continue Reading →
1

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

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

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

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

I Am Rich

In case you haven’t heard, there was an application put up at the App Store — briefly, before Apple pulled it — called “I Am Rich”. It did, well, nothing really, just display a picture … for $999.99.

Yeah, funny joke, ha-ha. But would you believe, eight people actually bought it??

But Apple couldn’t pull it down before curious aristocrats — eight of them — had purchased it. Six people from the United States, one from Germany and one from France dropped a grand for the gem in the first 24 hours it was available, Heinrich said. That’s $5,600 in revenue for Heinrich and $2,400 for Apple, which collects 30% of each sale for “store upkeep.”

And, allegedly, six of those eight are satisfied.

“I’ve got e-mails from customers telling me that they really love the app,” adding that they had “no trouble spending the money,” he said.

Well, we find it rather hard to dredge up any flattering words for the programming achievement — but as a piece of performance art, this little brouhaha certainly is a milestone, indeed. Massive amounts of generated angst flooded across the spectrum from totalitarian demands for Apple to censor “junk” apps all the way over to libertarian defenses of the caveat emptor principle by way of musings on the buying process and calls for Apple to be more transparent with its app-pulling process, as apparently there’s been no communication to the developer as to on exactly what grounds they justified pulling the app. And, indeed, as the app does not fall under any of the various categories of nefarious functionality — hard to do when you actually have no functionality, certainly — there is no obvious justification in the agreement for denying distribution, as “expensive joke” appears nowhere. Yes, we checked.

In any case, we find it hard to get behind the calls for censorship, not just on libertarian principle but because the outrage seems selectively applied. If it annoys you that somebody can buy a $999.99 app for an iPhone that does nothing much, how come we don’t see you getting at least as upset that somebody can buy a $14,990 case for that same iPhone that does nothing more than a $14.99 model? Logically that should merit another order and a magnitude of a half of outrage, right?

No, we think the allegedly offended people are just putting on a front to cover up what they’re actually thinking, which is probably about the same as us:

$5,600?? $5,600!! WHY DIDN’T I THINK OF THAT FIRST???!???!!!!!

Continue Reading →
0

SVN Smackdown! Cornerstone v. Versions

Like the rest of the world, we use Subversion for revision control here at Trollwerks by choice, and for the last few years we’ve been using svnX as our client. However, it’s getting a little long in the tooth now, so when it balked at reading the repositories of a project we’d been meaning to get back to for a while, we figured we’d take a look at two new native Mac clients that everyone’s getting all excited about and see if they merited switching to: the 1.02.59 release version of Zennaware Cornerstone

(more…)

Continue Reading →
20

Issue tracking: Lighthouse Keeper

So, now that our first native iPhone app is off to beta testing (and that took quite long enough, didn’t it?) time to sort out what we’re going to do to formalize the issue tracking here at Trollwerks, which in the programming frenzy since our April inception has been … transcriptive, shall we say? … before any external issues become arisen.

We’re not really looking for much in the way of process here (at the moment, anyways) only personal organization, so our feature checklist is, oh look at that, empty. Unless you count ‘as low overhead as possible’ as a feature. But it’s more of a philosophy, really. One we strive to in every area of life, actually; after all, the one and only resource that’s truly finite is time. But we digress. (Oh, the irony!) So, getting back on track, what would low overhead imply for Our Perfect Issue Tracker?

First off, it implies no ongoing cost without clearly compelling justification. So we take your FogBugz and your JIRA and your whatever commercial offerings, and we summarily eliminate all of those, since there is no clearly compelling justification on the horizon.

Second off, it implies that we’re not going to be setting up and managing our own server if at all possible, because that’s a hassle. We’ve tried both local and remote setups of that at various places, and at the very best it’s been only intermittently annoying. So we take your Bugzilla and your Mantis and your whatever open source offerings, and we summarily eliminate all of those. Are we Linux geeks? We think not!

So that reduces our problem space immensely … since it gets rid of all widely used alternatives. Hmmm. Well, let’s look at it the other way then, what do we like in an issue tracker? And, y’know, there’s only one thing we’ve ever used that springs to mind; and that’s over ten years ago now, the Mac OS 7 native program “TestTrack”, which has grown up to become a real company since; but has completely lost the elegance and simplicity of a native Mac application with a single data file. (Multi-user control was “file locking.” Not the most scalable no, but very low overhead indeed!) We liked using that, and we haven’t liked any of the client-server systems we’ve used since.

Well, guess what? It’s not here now, but it’s promised that soon there’ll be a native app that looks like it has a good shot at displacing our pining for old school TestTrack. It’s called Lighthouse Keeper, and if there has ever been an issue tracking client that’s looked as good as this, we’ve certainly never heard of it:

So what is the “Lighthouse” that this is the Keeper of? We’d never heard of that one before. Turns out that it’s a hosted service that focuses on

well, beauty and simplicity, as they say. Now that sounds about right. As does what the Keeper author has to say:

I looked at the usual suspects: Trac, FogBugz, Mantis, Jira etc. None of them really clicked with me, they seemed to do too much or have overly complicated UIs. Lighthouse was different, it was designed to be simple. It didn’t try to be everything to everyone like some of the above. It let you file tickets, assign them to someone and then work your way through them. And most of all, it had an incredibly well designed UI.

Of course, I’m not exactly the biggest fan of web apps. They’re fine to use occasionally, but when it’s something you’re working with all day it’s frustrating to either have to keep logging in, or at least keep a Safari window open. Luckily the Lighthouse developers provided a pretty comprehensive API so I thought that I’d set about making a desktop client to get around this.

So that’s all looking pretty intriguing, and we thought we’d take a look at just what the Lighthouse pricing is, on the off chance that this might rise to the level of “clearly compelling justification” that we mentioned earlier. And guess what? They do have a free offering, not only for Open Source projects, but for private use as well, with restrictions that most likely aren’t going to chafe us in the near future. And hey, you just can’t get any lower overhead than a hosted service, can you now?

So there we are! A new issue tracking system to try out, which we’d thoroughly recommend to your attention as well if you subscribe to the same minimalist aesthetic we do. Once Lighthouse Keeper makes its way onto our desktop, we’ll be sure and let you know how this experiment progresses!

Continue Reading →
3