Category Archives: News

App Store Review

I just got charged 0.30£ by Niantic, the publisher of Pokemon Go, to verify my age during the user registration process. The payment was initiated from the iOS app and done through a web form. No IAP.

Now I can only hope Niantic doesn’t charge me for something my kids do in the game.

This is exactly the kind of thing I fully expect Apple to protect me from.

Yes, AppStore Reviews Should be Stricter.

Homebrew

Keeping track of installed applications on multiple computers is a hassle.



Homebrew had been great for installing command line tools and libraries on macOS. Using Chocolatey on my Windows machine inspired me to take things a step further and try the “cask” subcommand for installing desktop Mac apps as well.

brew cask install firefox blender handbrake vlc

Works great. It’s now really easy to keep all the apps updated. Setup on a new computer is very quick. I also found that Tiny Player for Mac already had an entry in Homebrew:

brew cask install tiny-player

Thanks to whoever added it.

Building a PC

After many years of using Macs exclusively, I decided to build a PC.

I wanted to get a Windows machine for development purposes, play a few games and have some fun with the build.

The goal was to get a computer that would last a few years while keeping the budget reasonable. I started with a (hopefuly) future-proof motherboard and a solid CPU. Got a used GPU and reused a few older parts. Here’s what I ended up with:

CPU Ryzen 5 3600
MOTHERBOARD ASUS PRIME B550M-A
RAM 32GB DDR4 3200
GPU Sapphire RX 570 Nitro+ OC 8GB
STORAGE Kingston M.2 SSD 1TB
COOLING ARCTIC Freezer 34 eSports DUO + 3× ARCTIC P12 PWM 120mm
PSU SilentiumPC Vero M2 Bronze 600W
CHASSIS SilentiumPC Signum SG1 TG
OS Windows 10 Professional

SilentiumPC Signum SG1 TG

There were no problems with the hardware, everything worked the first time. Phew!

The machine wasn’t very loud but I could hear the CPU fan constantly spinning up and down, reacting to small temperature changes. Very annoying. I adjusted the fan curves directly in BIOS. The fans now stay at the lowest possible speed until the temperature gets a bit higher. Turns out it never does! Even under sustained load the CPU only reaches about 45℃.

After installing Windows I used Chocolatey to install most 3rd party software and Steam to get some games.

Next step is adding another drive and installing Ubuntu on it. I’m not very much into Linux but Devastro 2 is already using SDL so I figured I might as well give it a try.

A Hackintosh is also an option but it’s low priority because I’m going to keep using my iMac for work anyway. It is a bit slower but also dead silent, and the 5K screen is hard to beat.

MagicaVoxel

I started playing around with MagicaVoxel a while ago. I’m not going to use it for Devastro 2 but I can imagine some city simulation game using graphics made this way: tiny & cute with great lighting. It constrains things in a way I would be happy to work with.

Sketch icon in 3D

As part of my Blender practice session, I tried to re-create the icon of Sketch.

Here’s the original:

I found two different shapes that could match this image in an orthographic view.

One:

Two:

And a third shape with a flat top if we use a perspective camera and level it vertically with the mid section of the object:

To match the lighting I used a big front light and two emissive surfaces at the bottom and top. I skipped the highlighted edges to save time.

Final render:

And a little spinning GIF as a bonus:

 

 

Mobile app testing checklist

Some things to check before releasing a mobile application. Slightly iOS specific.

Startup

  • Start in different orientations
  • Start app with no internet connection
  • Delete all user data. Is the first start behaving correctly?
  • Install and use previous version of app. User data migrated correctly?

OS

  • Dark mode support working? Switching on any screen?
  • OS-wide font size applied?
  • Locale/language changes applied correctly?
  • Accesibility labels for everything?

Network

  • Initial start without internet
  • Try using each page of the app without internet
  • Turn off internet, go back to previous page
  • Is network outage during video playback handled well?
  • Wake up after a long time (week-month). Detected & refreshed?
  • Is the app usable on a slow or unreliable network connection?

Layout & navigation

  • Rotate back and forth each page
  • Rotate and go back to previous page
  • Play fullscreen video, rotate during playback, close. Layout updated correctly?
  • Blurry text anywhere? Enable highlighting of misaligned layers in Simulator
  • During a call, does the double height status bar break any layouts?
  • Tap a button 2-3 times really quickly. Only one screen instance created?
  • Look for navigation loops. Detail -> push info -> push detail -> push info etc.

Buttons

  • All buttons/elements trigger on touch up and NOT touch down?
  • All disabled/highlighted/hover/pushed states displayed correctly?
  • Are buttons large enough to hit on small screen?

Lists & views

  • Do all lists scroll to top after changing the sorting order?
  • Do all views show an “empty results” text when no data is available?
  • Showing a loading indicator when loading data takes >1s?

Tracking

  • Is analytics tracking working? Correct tracking IDs?
  • Crash reports actually sent and saved? Symbolication working?

Prolonged usage

  • Keep app running, use whole day, overnight. Still performing well?
  • Open & close a screen (open detail, go back). Repeat ~15 times. If it leaks memory it can eventually lead to a crash.

Input fields

  • Is the keyboard mode correct for all input fields?
  • Email keyboard layout for email input, numeric for phone numbers etc.
  • Placeholder text in fields that need it?
  • Is there a clear “X” button in fields that need it?
  • In email input fields, is the email format verified?
  • If maximum length is specified for fields, is the limit really applied? Even when a longer text is pasted? From input fields to local storage, to server and back?
  • If no maximum was specified, does the app actually work with very long inputs, long words, special characters? Does it break any layout, internal DB, server backend API?
  • Is it easy to hide the onscreen keyboard when needed?
  • Does auto-completion work as it should? Does it limit the number of results after typing a single letter? Does input still work when auto-completion API is offline?

Search input

  • Make a search, open one of the results, go back. Is the search text still there?
  • Does search for empty string work correctly? Single letter? Spaces? Special @#?:/ unicode emoji characters? Extra long strings? Extra long words?

Interruptions

  • Put phone to sleep and on again
  • Switch to another app and back
  • Simulate memory warning, go back to previous page
  • Simulate incoming call. App resumes correctly when call ends?

Date & time

  • Date formatting correct for different locale settings? No broken layouts?
  • Does it handle daylight saving changes correctly? Really?
  • Does it handle timezone changes correctly? Start app, suspend, change timezone, resume app. Works?

Sharing

  • Does social sharing actually work? Posts appear on FB/Twitter site? Correct title, body, images, links?
  • Correct Facebook app ID?
  • Does sharing work with and without the official Facebook/Twitter app installed on the device? Automatic login through the app?
  • Does the app show correct feedback message after sending/cancelling/failing?
  • Is the sharing email correctly formatted? In GMail, Outlook and Mail? On a mobile device?

Storage & output

  • If the app has some web caching mechanism, does it correctly restrict itself from using too much storage?
  • Does the app behave correctly when the device storage is full? (Load music or videos to your device to fill it up OR place simulator folder in a APFS volume/disk image with limited size)
  • Does the app correctly handle having its cache folders deleted by iOS? (Run in simulator and delete using Finder)
  • Does the app limit its console output in Release mode? ie. no excess debug information printed – only errors.

Legal

  • Acknowledgements page up to date with all 3rd party code/asset licensing info?
  • Is it possible to turn off usage tracking? Is the user warned about usage tracking on first start?
  • If the app has a built-in browser, is it OK to receive a 17+ rating in the app store?

OS versions

  • Fully functional on all supported OS versions?
  • Is it possible to run and use the last supported version on older devices/systems? Legacy API?

Devices

  • Does the app support all screen sizes in both orientations?

Development tools 2019

Here is a list of development tools I’m using at the moment.

Hardware

  • iMac retina 27″ 2015, 32GB RAM
  • iPhone SE
  • iPad Mini 4
  • XBox wireless controller

Software

Libraries

Notes

  • Recent versions of Photoshop have been not so great. Pixelmator development has almost ceased. Considering switching to Affinity Photo.
  • Starting to use Blender for 2D vector graphics as well (icons etc).

Previous installments

2006201220142017

Git activity graph

Number of commits is not a good metric for productivity, project health or anything else really. But let’s pretend! It may be OK as a simple activity indicator…

Here’s a Python script I made that graphs daily commit counts on a git repository by year.

Download the script here. Requires Python 3 and PIL/Pillow.

Usage:

pip3 install pillow
python3 activity.py /path/to/imgui imgui

Output:

imgui-2014.png
imgui-2015.png
imgui-2016.png
imgui-2017.png
imgui-2018.png
imgui-2019.png

Example output for imgui: