Under the Bridge

Thrash Metal

Since all you Dear Readers seemed to think our Daft Punk allusion last post was clever, let’s do another music callout this time. Not that it really takes a whole lot of clever to connect up Metal with a particularly extreme genre of such, but hey, it gives us an excuse to link to the thrashiest of thrash bands playing the Duke Nukem theme for your post-reading background music, which we just haven’t done enough of so far.

Any-ways, in case like us you’d pretty much skipped over stuff about Metal figuring it was only of interest to game engine writers, there’s some interesting stuff around that people are doing with it you might like to be aware of. In particular, this FlexMonkey post caught @NatashaTheRobot‘s eye (and if you’re not subscribed to her Swift newsletter, you should be):

Two Million Particles at 25 Frames Per Second on an iPad

Following on from my last post where I managed to calculate and render over 1,000,000 particles in realtime, I’ve done some pretty effective tweaking of the code to create an app that calculates and renders (with blur and trails) over 2,000,000 particles at around 25 frames per second on my iPad Air 2…

Not bad, not bad. Also note followup:

Swarm Chemistry: Creating an Advanced GPU Based Particle System with Metal

…With Metal, I’ve been able to create a kernel shader that can calculate and render 4,096 swarm members at 30fps – so that’s 16,777,216 particle interactions per frame or 503,316,480 particle interactions per second! Pretty impressive stuff for a tablet computer!

Code at FlexMonkey / MetalParticles, with UI described in Adding a User Interface to my Swarm Chemistry App on an iPad

So that’s pretty cool, but still a little niche. A good number of you probably run into need for parallel computation, particularly image processing, not all that rarely though, yes? Start over at Metal-dedicated site Metal By Example and check out these articles:

Introduction to Compute Programming in Metal

This post is an introduction to topics in compute (or data-parallel) programming. It is designed to be read before its companion article, Fundamentals of Image Processing. In this article, we will cover the basics of setting up the compute pipeline and executing kernel functions on large sets of data in parallel…

Fundamentals of Image Processing in Metal

In this post, we will start exploring the world of image processing with the Metal shading language. We will create a framework capable of representing chains of image filters, then write a pair of image filters that will allow us to adjust the saturation and blur of an image. The end result will be an interactive app that allows you to control the image filter parameters in real-time…

Back at FlexMonkey there’s a project FlexMonkey / MetalReactionDiffusion building off that described in these posts:

Metal Kernel Functions / Compute Shaders in Swift

Reaction Diffusion Cellular Automata with Metal Compute Shaders

Swift & Metal: 1,000 Reaction Diffusion Solver Iterations per Second

And as long as we’re mining for Metal nuggets here, if this has inspired you to go learn more about it from scratch, here’s some good intros:

Ray Wenderlich’s iOS 8 Metal Tutorial with Swift: Getting Started and Part 2: Moving to 3D

LiquidFun Tutorial with Metal and Swift – Part 1 and Part 2

objc.io’s Metal

An Introduction to 3D Graphics with Metal in Swift

If you want to get more into the rendering side than that, then check out all the rest of the articles at Metal By Example.

Continue Reading →
0

Swiftly Improving

So you catch the new Swift 1.2 seed yet? If not, looks like we could call this the Daft Punk release:

  • Harder — “compiler crashes have been fixed”, “fewer SourceKit warnings” …
  • Better — “Source files that haven’t changed will no longer be re-compiled by default…”
  • Faster — “Debug builds produce binaries that run considerably faster, and new optimizations…”
  • Stronger — “the language has been further refined to ensure safe, predictable behavior. We also continue to improve the interaction between Swift and Objective-C…”

Time to get on the latest rewrite round! Here’s a selection of good discussions of those “has been further refined” details:

NSHipster’s Swift 1.2

RayWenderlich.com’s What’s New in Swift 1.2

SwiftDoc.org’s Major content update for Swift 1.2

Let’s Talk About Sets, Baby!; Swift Set Type in Swift 1.2

Changes to the Swift Standard Library in 1.2 beta 1

Swift 1.2 Performance: Pretty Much Fine; Performance Case Study on Swift 1.1, Swift 1.2, and Objective-C; Swift Performance in Xcode 6.3 Beta

Also, we’d like to draw your attention to a couple so far generally overlooked points that have shown up on boards and mailing lists. First off, the souped up if let

The “if let” construct has been expanded to allow testing multiple optionals and guarding conditions in a single if (or while) statement using syntax similar to generic constraints:

if let a = foo(), b = bar() where a < b, let c = baz() {}

This allows you to test multiple optionals and include intervening boolean conditions, without introducing undesirable nesting (i.e., to avoid the “pyramid of doom”). (19382942)

is actually more souped up than those notes make fully clear:

  • can be an arbitrary number of let + where clauses in a single statement
  • can also be used with ‘if var’ should you wish to mutate values in the conditions
  • can also use a full multiple clause statement in a while loop!

That should be quite enough conditional flow expressivity to quiet all the grumbling on that front.

Next, if you’re chomping at the bit to add the new return value contract annotations to your legacy Objective-C headers, “nullability” is the so far undocumented clang feature for that, so here is a currently-submittable way to add that to production code, from Jens Alfke on the Xcode list:

So the magic invocation I’m putting in my header files (after the #includes) is:

#if __has_feature(nullability) // Xcode 6.3+
#pragma clang assume_nonnull begin
#else
#define nullable
#define __nullable
#endif

… interface declarations go here…

#if __has_feature(nullability)
#pragma clang assume_nonnull end
#endif

In property declarations you’ll need to make “nullable” the last meta-attribute, otherwise you’ll get syntax errors in earlier versions of Xcode; so for example “(readonly, nonatomic, nullable)” works but “(readonly, nullable, nonatomic)” is a syntax error because in Xcode 6.1 the parser will see two adjacent commas.

[This is working well, but in converting my interfaces I found a nasty compiler bug that I’m about to submit to Apple — if you declare multiple properties on a single line, adding the (nullable) attribute will cause the parser to lock up in an infinite loop:
@property (readonly, nullable) id a, b, c; // don’t do this!
I spent an hour or so with my MBP’s fan running full speed before figuring out which exact line triggered this.]

Lastly, one of the more subtle consequences of Swift 1.2 no-op cleanup is that you can no longer cleanly use ? as a postfix on an optional optional, as for instance when using map on an optional dictionary lookup:

let x:Int? = dict.map { $0["a"] }?

The Chris Lattner approved way to rewrite this pattern for 1.2 is

let x:Int? = dict.map { $0["a"] } ?? nil

to make it more clear to the reader exactly what the intention is here.

So we’re pretty chuffed with how this Swift thing is coming along; pretty much every undue pain point seems addressed to wide satisfaction around teh intertubes — so if you’ve been holding off on jumping in, NOW might be a very good time to get on that!

Continue Reading →
1

Join the Sprite Illuminati

Now this looks like a wicked awesome new sprite game making tool: Andreas Löw, already revered in sprite game maker circles for sprite sheet maker TexturePacker which has just continued getting more awesome since we reviewed 2.4 ages ago and for PhysicsEditor the premiere collision shape creator, has decided that the next thing that needs to be made easy is … dynamic lighting, with SpriteIlluminator!

Screen Shot 2015-01-27 at 9.01.52 PM.png

What is that exactly being edited there, you ask? Why, that’s a normal map. Not clear yet? Well, here’s a good writeup on the theory, but simply:

Screen Shot 2015-01-27 at 9.04.05 PM.png

These are supported in pretty much whatever major sprite framework you’re using, including SpriteKit’s SKLightNode as of iOS 8. So if you’re doing any 2D sprite work that would benefit FROM ADDING EXTRA AWESOME, we strongly suggest that you head right on over to the beta signup page while that’s still open!

Continue Reading →
0

Art For Non-Artists

Like to make a game, but held up somewhat by the practical issue of having absolutely no artistic ability whatsoever? Yep, we feel your pain. Quite thoroughly indeed. But here’s a series of videos to watch that might help you fake it enough to get by –

2D Game Art for Non-Artists

  1. Introduction
  2. Sky and Mountains
  3. Making Happy Little Trees
  4. Earth Blocks
  5. Awesome 2D Grass
  6. I Wanna Rock
  7. Creating our Buzz Saw
  8. Character

‘Course, those of us who are really non-artists need some more help than that. PixelProspector is an excellent resource for all things related to indie game development, and specifically for graphics they set out the options

  1. Create Graphics by Yourself
    1. Graphics Programs
    2. Tutorials (Drawing, Animation, Pixel Art)
  2. Get Graphics from someone else
    1. Download Assets (Royalty Free Graphics)
    2. Hire Graphic Designer
    3. Big List of Fonts
    4. Big List of Icons

which does pretty well cover the options. Other interesting link collections for the artistically challenged:

Game Programming Wiki’s Game Content Resources

Freebies For Designers – Icons, Vectors, Photoshop Brushes, Stock Images & Templates

Best Sites For Getting Free Vector Art Images – 35 Of Them

40+ Websites Providing Useful and Free 3D Models

Cool Text: Logo and Graphics Generator

Any particular goto resources for finding art as a substitute for any kind of talent that you rely on, Dear Readers?

UPDATES:

Complete Blender Game Art Tutorial. From zero experience to 2D or 3D game ready asset

300 Awesome Free Things covers various design/asset resources and also business/marketing/productivity services, tools, analyzers, …

A programmer’s guide to creating art for your game

Continue Reading →
1

Procedural Level Generation

Here’s an interesting set of links from an HN discussion, should you be interested in making a roguelike of your own some day as All True Programmers Are:

Another cheap and very effective technique for procedural level and maze generation is to create a “walker” or series of walkers that start at some point, walk in a direction and then turn at random intervals, leaving a path of corridors and occasionally rooms in their wake. This is how Vlambeer’s Nuclear Throne generates its levels, and there’s a good article from Jan Willem Nijman, it’s developer, here

If you’d like a more academic look into procedural 2d game generation, there’s a nice research paper here, that describes a method and talks about Spelunky a lot (the king of procedural 2d level generation, in my book)…

Additionally, Derek Yu open sourced the code to the original Spelunky, and Darius Kazemi created a great breakdown of its level generation techniques here, also with interactive examples…

The action roguelike genre, particularly the roguelike FPS, is a vital new area being explored by indie game developers. It reminds me of the way 2D platformers were mined, explored, and iterated upon starting around 7 or 8 years ago…

Cool stuff! At least to us old school types who still think ASCII Nethack is TEH BESTEST GAME EVAR!!!1!one!!!

UPDATES:

Rooms and Mazes: A Procedural Dungeon Generator

Building a Procedural Dungeon Generator In C#

Continue Reading →
0

A Forest Of Loggers

So since we moved off Lightspeed Pascal as our Macintosh development environment way back in the day, we’ve been toting around this suite of logging, timing, and so forth debugging macros that by this time can be called transparently from .c/.cpp/.m/.mm files in development environments ranging from Lightspeed C through Metrowerks CodeWarrior up to Xcode 6+; but as we gear up to take on our intended New Year’s resolution of shipping a full hand of Swift apps next year … oh wait, there’s no macros in .swift code now! Well, there goes two and a half decades of accumulated cleverness out the window, bah humbug.

Not that it would be too terribly hard to rewrite said suite using NDEBUG and @autoclosure like assert(), but why bother with that when no doubt there’s somebody else’s projects for native Swift logging out there doing that already we can join? And why yes, here’s two that the exemplarily diligent ManiacDev folk have turned up on Github:

XCGLogger looks considerably more active than Swell, so we’ll go with that one. Unless any of you Dear Readers have an excellent reason why not. But long as we’re on the topic, let’s take a look at what Objective-C options checking CocoaPods brings up that we could raid for feature additions … my, there are a lot, aren’t there now?

  • CCLogSystem (5/54/18) “A Log system for iOS.Support print, record and review logs.”
  • CocoaLumberjack (270/4131/705) “A fast & simple, yet powerful & flexible logging framework for Mac and iOS”
  • DLLog (1/2/1) “NSLog-like logging API with support for level and context filtering”
  • GRLogger (1/2/1) “a logger utility for debugging and tracing”
  • LibComponentLogging (5/101/13) “Logging for Objective-C with log levels and log components.”
  • Log4Cocoa (12/80/29) “is a Log4j port for iOS and Mac OS X”
  • MTLog(11/218/24) (ManiacDev) “NSLog replacement for coders!”
  • NALog (1/3/0) “An easy, lightweight, and simple NSLog-based logging tool”
  • NBULog (13/22/5) “Log framework based on CocoaLumberjack…”
  • NSLogger (147/2447/299) “A modern, flexible logging tool”
  • NWLogging (7/14/4) “A minimalistic logging framework for Cocoa”
  • OCLogTemplate (8/9/3) “A flexible logging header for Objective-C”
  • TFLogger (7/2/0) “Dependency free logging library”
  • TULogging (1/7/0) “Better logging that uses ASL log levels”
  • UALogger (11/235/21) “A powerful and flexible logging utility for Mac/iOS apps”
  • WZLog (1/2/0) “A log system for iOS” … and that’s about it not in Japanese.
  • XLFacility (8/97/2) “Elegant and extensive logging facility for OS X & iOS (includes database, Telnet and HTTP servers)”

CocoaLumberjack is pretty much the venerably accepted standard, as the numbers there attest, but some of these othes look interesting too. Particularly that very last one, XLFacility; from the ManiacDev writeup,

Some of the features of XLFacility include:

  • Viewing of logging messages in real-time via Telnet or TCP
  • An HTTP server for viewing real-time log messagess and browsing past logging messages
  • Different logging levels, and macros for easy logging at each level
  • Customizable logging formats
  • An in-app logging overlay that can appear when messages are sent to XLFacility
  • A nice syntax for creating your own custom loggers

With XLFacility you can log to the console, a file, a SQLite database, and you can also view messages in realt-time via Telnet or TCP and there is a built-in http server so you can browse past log messages or see live updates…

That’s some serious feature-laden logging there, that is.

UPDATES:

honghaoz / ZHSwiftLogger: “…will use println() for development and use NSLog() for production.”

ArtSabintsev / PrintlnMagic “An alternative for Swift’s println() function along the lines of DLog.”

Debug Logging In Swift

Open Source Library Enhancing NSLog Allowing You To Log To A Remote Server

sgtsquiggs / ARAnalyticsLogger: “A bridge between CocoaLumberjack and ARAnalytics,” derived from TechSmith / CrashlyticsLumberjack

orta / ARAnalytics : “is a analytics abstraction library offering a sane API for tracking events and user data. It currently supports on iOS: TestFlight, Mixpanel, Localytics, Flurry, GoogleAnalytics, KISSmetrics, Crittercism, Crashlytics, Bugsnag, Countly, Helpshift, Tapstream, NewRelic, Amplitude, HockeyApp, ParseAnalytics, HeapAnalytics, Chartbeat, Yandex Mobile Metrica, and Branch. And for OS X: KISSmetrics and Mixpanel.”

Continue Reading →
0

AWS Mobile SDK v2

In case you’re not on the AWS mailing list like apparently we got onto somehow, there’s a new version of the AWS mobile SDK out, and it looks like it might be worth some serious consideration for your cross platform back end needs:

The AWS Mobile SDK helps you build high quality mobile apps quickly and easily. It provides access to AWS Mobile services, mobile-optimized connectors to popular AWS data and storage services, and easy access to a broad array of other AWS services…

And what are these services? Quite a bit actually:

Amazon Cognito makes it easy to save user data, such as app preferences or game state, in the AWS Cloud without writing any backend code or managing any infrastructure. You can save data locally on users’ devices allowing your apps to work even when the devices are offline. With Amazon Cognito, you can focus on creating great app experiences instead of having to worry about building and managing a backend solution to handle identity management, network state, storage, and sync.

Amazon Mobile Analytics lets you easily collect, visualize, and understand app usage data at scale. Amazon Mobile Analytics is designed to provide aggregated data within 60 minutes of receiving events from an app so that you can act on the data more quickly. With Amazon Mobile Analytics, you get 100 million events per month for free.

Amazon Simple Notification Service (Amazon SNS) makes it simple and cost-effective to push notifications to Apple, Google, Fire OS, and Windows devices, as well as Android devices in China with Baidu Cloud Push. You can also use SNS to push notifications to internet connected smart devices, as well as other distributed services. You get 1 million notifications/month for free.

Amazon Simple Storage Service (S3) provides secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web services interface to store and retrieve any amount of data from anywhere on the web, and the AWS Mobile SDK includes additional functionality to optimize access from a mobile device.

Amazon DynamoDB is a fast and flexible NoSQL database service for all applications that need consistent, single-digit millisecond latency at any scale. It is a fully managed database and supports both document and key-value data models. Its flexible data model and reliable performance make it a great fit for mobile applications.

Amazon Kinesis is a fully managed service for real-time processing of streaming data at massive scale. Amazon Kinesis can continuously capture and store terabytes of data per hour from hundreds of thousands of sources such as mobile app events and website clickstreams. You can also emit data from Amazon Kinesis to other big data services such as Amazon S3, Amazon Redshift, and Amazon Elastic Map Reduce (Amazon EMR).

Haven’t used any of this either v1 or v2 ourselves, but if you feel like trying it, there’s a 12-month free plan; sign up, check it out,

To get started, learn more at http://aws.amazon.com/mobile and download the iOS or Android SDK. Engage with the AWS developer community on the AWS Mobile forums or our Github Android|iOS repositories. To stay up-to-date, follow us on Twitter at @awsformobile.

and let us know how that went for you!

Continue Reading →
0

Bezier Pathological Strings

Here’s a handy little Swift library for adding a dab of style to your string rendering:

lvnyk / BezierString: Rendering NSAttributedStrings along arbitrary UIBezierPaths

where.png

Take your string and your path and generate a UIImage, draw into a CGContext, or use UIBezierLabel anywhere you’d use a common-or-garden UILabel. Cool beans!

And if you’re not overly familiar with UIBezierPaths, check out some of our other mentions of their care and feeding and applied niftiness:

Bézier Path Construction

Bezier Path Boolean Ops

Bezier PathMove

Core Animating Interfaces

Library: Capture a Signature

h/t: ManiacDev!

UPDATES:

How to curve CGMutablePath?mayoff / path-warp: UIBezierPath+Rob_warp.h

Custom UIView Animations with Vector Graphics

Cubic Bezier Curves Under the Hood

Open Source iOS Library That Adds Caching To UIBezierPath For Increased Performance

Mastering the Bézier Curve in Sketch

jmenter / JAMSVGImage: “Display resolution independent SVGs in iOS.”; timrwood / SVGPath: “Parse SVG path strings into UIBezierPaths in Swift”; The Ultimate Guide to SVG; check out our old SVGKit notes

Continue Reading →
0

Healthy Kit

Looking for some Christmas presents for the other Apple fanbois/fangrrrls in your life? Here’s a rundown of various pieces of kit that are HealthKit-enabled, that’s a good way to combine geek fun with subtle lifestyle commentary:

How to make the most of Apple’s HealthKit in iOS 8 with compatible apps and accessories

..the free Health Mate app from WiThings can track your steps and log stats like weight using the iPhone’s M7 and M8 motion coprocessors. Where WiThings really shines is the integrated hardware accessories (sold separately) that can track unique data without user intervention..

If users are wanting to track nutrition and calories, the free MyFitness Pal app is a great choice. MyFitness Pal incorporates a large food database that can automatically fill nutrition information just by scanning a package’s barcode…

One of the most popular fitness tracking band lines on the market, Jawbone’s UP series boasts a number of tools to keep users healthy. The UP app was recently updated to integrate with HealthKit to track activity and add a sleep tracker capable of sending your data to the Health app. The software also provides personal coaching tips to achieve your personal fitness goals…

Another popular line of activity trackers come from Fitbit. Unfortunately, Fitbit has refused to natively incorporate HealthKit into its app. Instead, a third-party developer has created an unofficial app called Sync Solver for Fitbit that will read the data from your online Fitbit account and send it to HealthKit…

The Bowflex line of exercise equipment made by Nautilus has added HealthKit support for its app that will allow users to see workout stats in Apple’s Health app. Information such as workout duration, heart rate, calories burned and distance traveled are recorded…

Unlike many other fitness apps that track nutrition and activity, BACtrack integrates with a mobile breathalyzer that can measure your blood-alcohol content and send the stats to your iPhone…

With numerous accessories and one of the most mature platforms for fitness, the free Nike+ Running app can send your distance traveled, calories burned, run duration and more to HealthKit…

So there you go. We’ve been users of various pieces of the Withings kaboodle since the first scale shipped wow is it that long ago? and quite recommend them for keeping tabs on your various measurements. The other stuff mentioned above, well we’re sure it’s nice too, as always let us know any strong feelings you might have one way or the other!

And while we’re on the topic of HealthKit, the prolifically inquisitive Natasha The Robot has some intros here if you feel like programming your own healthy app:

HealthKit: Let’s Talk About Units

HealthKit: Asking For Identifying Information

HealthKit: Getting Fitness Data

Which is about all we’ve noticed in the way of tutorials — even the generally exhaustive Wenderlich iOS <N> By Tutorials didn’t have anything on HealthKit this time out. There’s a few testbeds and adapters on Github, but nothing jumping out as compelling. Hmmmm, wonder why that striking lack of interest from the development community in healthy apps. Hey, think how good the testing would be for you!

UPDATES:

HealthKit Tutorial with Swift: Getting Started

HealthKit Tutorial with Swift: Workouts

Continue Reading →
0

Prerelease App Store Testing

What, you say, aren’t “prerelease” and “App Store” definitionally contradictory? Why no, no in fact they are not!

How to Test the Final App Binary before It Is Released on the App Store

  1. Manually release the app…
  2. Submit your app for review as usual…
  3. Pending developer release…

… At this point the Promo Codes link appears at the bottom of the app details page.

And apparently promo codes can be requested and work just fine even when the app isn’t technically released yet! Aside from this small caveat:

… when the promo code is for an update, iOS sometimes gets confused. It’s not consistent. But sometimes the App Store app shows an Update button right after the download is complete. It’s not clear to me if tapping the Update button will download the update you really want, or if it will “update” to the latest public release available on the App Store. Sometimes the whole process fails and my update is nowhere to be seen. So don’t be dismayed if need to burn more than one promo code to get the binary you want downloaded onto your device…

Still, it’s pretty awesome to be able to do a final final final test that no showstoppers slipped through into the actual App Store binary and reduce your launch day stress by several orders of magnitude, tisn’t it now?

Continue Reading →
1
Page 1 of 118 12345...»