Repro 1.5

Repro version 1.5 is out now.

The most important addition is the online gallery. Now it’s really easy to share your before-and-after photos, directly from the app.

There’s a nice interactive slider on the page that allows people to switch between the two pictures.

 

Tiny Player 1.0.6

Tiny Player version 1.0.6 is out now. This update brings the following improvements:

• Support seeking from Command Center
• Improved seeking precision
• Enable remote playback controls
• Add way to download music back to your computer
• Upload widget now accepts AIFF files

Tiny Player for Mac 1.1

Tiny Player for Mac version 1.1 is out now. This update brings the following improvements:

  • Track metadata such as title/album/artist info is now cached so loading tracks the second time or after a restart should be much quicker.
  • Starting with this version, Tiny Player will internally keep history of all played tracks. The records are not used yet but a future version could upload them to Last.FM or show some interesting statistics.
  • Quite a few issues have been fixed.

Thanks for using Tiny Player.

Development tools 2017

It’s time to do another quick review of the tools I use for game development. Previously:  2006 2012 2014. Here’s the current setup:

Hardware

  • iMac retina 27inch 2015 model with 24GB RAM (upgraded from a 2011 model)
  • iPhone 5 (still alive!)
  • iPad Mini 4

In the hardware section the most important change is definitely the switch to the retina iMac. I got lucky and found a great bargain, had the harddrive replaced with a 1TB SSD and everything is running very smoothly.

My iPhone 5’s battery is dying but I intend to replace it and keep the phone for as long as possible. I only use it for phone calls, playing music & podcasts.

I’d like to replace the iPad Mini 4 with a new model to get a chance to play with ARKit, but there’s no hurry. I’ll probably wait for the next “standard” iPad model that comes out. The Pro models are cool but very expensive and I’m not working on an iOS game at the moment to justify purchasing one.

I borrowed an Apple TV to try porting Superforce but it turned out it would just be too much work because of the completely different aspect ratio. Not worth it. I might try again with Devastro 2 which might work well on the TV if I can get the controls right.

Software

  • Xcode
  • Adobe Photoshop
  • Blender (took some time to learn the basics)
  • Pixelmator
  • Glyph Designer
  • Git

Not much has changed on the software front. Xcode is still fine. I probably have very low expectations from a C++ IDE. It crashes from time to time but otherwise it’s pretty reliable and “good enough”. It’s not what’s holding me back anyway.

Blender is just great. I should practice more.

I pretty much stopped using Pixelmator because Photoshop is so much better and also because it seemed like Pixelmator development had pretty much stalled. Now there’s the Pro version but I don’t see a reason to switch back… two graphic file formats are one too many I guess. Same with keyboard shortcuts.

Still using git, although as a solo developer I’d probably be fine even with Subversion.  Recently I tried to set up a Gogs server to make git usage more friendly but it was too much hassle. Command line and Gitbox is fine, actually. I’d still prefer a self-hosted Gogs over GitHub or Bibucket if I absolutely had to have a web interface & basic task management. It’s a nice piece of software.

Libraries

When it comes to 3rd party libraries, the most important thing is that I started integrating Dear IMGUI into the game. It’s a great library, very well thought out. Apart from a misplaced glFlush() call, the integration was very smooth. The screenshot below shows a IMGUI based property panel in the level editor.

std::chrono vs timer coalescing in macOS

Recently I needed to call a function in the background of a C++ program periodically. I decided to use the STL for the task.

During research, I found a nice article about periodic processing with C++11. The sample code has helped me to quickly put together a solution for my project. However, I noticed that the author was showing average wakeup errors of 20 microseconds on Windows and 96 microseconds on Linux. Running the sample code on macOS yielded errors of up to 2000 microseconds! That is a big margin. I was a little disappointed. My favorite OS is getting worse results… oh no.

But then I remembered that newer versions of macOS employ “timer coalescing“, which tries to save energy by reducing timer accuracy and “bundling” wakeups together to let the CPU sleep for longer periods of time.

Nice, but thankfuly we can turn it off for more accurate testing:

sudo sysctl -w kern.timer.coalescing_enabled=0

After that the errors went down to about 40 microseconds on average. I have yet to look up the proper way to tell the OS that my app needs this, regardless of the global setting, but my curiosity is satisfied for now.

Note: the source code from the article is only provided as a PDF from which it is hard to extract in a usable form, so I took the liberty to publish a plain-text copy here.