New home

The website is moving and I'm currently working on setting up automatic redirects. In the meantime, you can click here!

Generating ISO metric screw threads

I've been doing a few non-virtual projects lately when I've had some free time. I've been building/programming a quadcopter and experimenting with 3d printing, and I really like the new (to me at least!) open hardware movement.

For designing parts and models, I'm using the easy-to-use CAD web app Tinkercad. It's not especially feature-rich at the moment but I really like the design desicions they've made and I belive they have a great base to build upon.

I recently wanted to print an adapter for a microphone but could not find any good libraries for threaded screws. So I took the plunge and spent an evening coding one myself, using the wikipedia page on ISO metric screw threads as reference.

Here is an example of the output

The code is written as a Tinkercad Shape Script in Javascript, but it should be straightforward to port it to any other platform or language. Unfortunately, Tinkercad limits Shape Scripts to accounts with paid subscription plans (which are a bit too expensive in my opinion) but if you are on one, just paste the code into the editor, place the object into your scene and start changing the parameters. I hope the code can be useful to someone out there at least :)

Dart Experiment

I made a small web experiment using Dart to see how suitable the language is for game/graphics/physics programming.

Live demo / GitHub

The demo is an example of point-masses and stick-constraints using the verlet integration; Thomas Jakobsen's excellent article "Advanced Character Physics" introduced me to the concept and got me interested in physics programming several years ago.

I really prefer Dart to Javascript and would love to see it getting adopted by the major browsers. Here is my short wishlist for the Dart team:

Please...

  • get rid of the underscore prefix and introduce a proper "private" keyword
  • optimize the VM for vector algebra and immutable types if you don't want to introduce "value types"
  • integrate WebGL

Here are a couple of things I believe are bugs that I encountered while making the demo:

  • Assigning a variable through a get method actually compiles, for example: instance.getMethod = 5
  • Some expressions are not considered constant and won't compile if used in a static statement, for example: static final var strings = ["hello", "world"] - See the comments

Enabling a 32bit backbuffer on Android devices using Unity 3.4

When developing games for Android devices using Unity 3.4, Unity seems to default to a 16bit backbuffer format and there is no easy way for developers to use a 32bit format. Most 16bit formats do not include alpha channels and the low bit depth may cause color banding issues. Here is a short guide (based on this post) on how to create a plugin that enables a 32bit RGBA backbuffer on devices that support it. Note that the file paths are not exact, just indicators, and that everything is case sensitive!

  1. Create a temporary working folder
  2. Inside the working folder, create folders in series to match your package name in the Unity Android build settings. The tree should look like this: /workingfolder/com/companyname/productname/
  3. Copy the UnityPlayerActivity.java file located in /Unity/.../PlaybackEngines/AndroidPlayer/src/com/unity3d/player/ to /workingfolder/com/companyname/productname/
  4. Rename the copy in the working folder to MyUnityPlayerActivity.java
  5. Open MyUnityPlayerActivity.java
    1. Change the class name to "MyUnityPlayerActivity"
    2. Remove the line starting with "package" if present and add the following lines at the top of the file:
      1. package com.companyname.productname;
      2. import com.unity3d.player.*;
    3. In the onCreate() method, change the "boolean trueColor8888 = false;" line to "boolean trueColor8888 = true;"
  6. Compile the MyUnityPlayerActivity.java file using the javac command line tool and the following options:
    1. Use the Unity classes as classpath: "-classpath /.../Unity/.../PlaybackEngines/AndroidPlayer/bin/classes.jar"
    2. Use the Android SDK as bootclasspath: "-bootclasspath /.../Android SDK/platforms/android-11/android.jar"
  7. Package the new MyUnityPlayerActivity.class using the jar command line tool: "jar cf classes.jar com/companyname/productname/MyUnityPlayerActivity.class"
  8. Copy and paste the new classes.jar file to /Plugins/Android/ in your Unity project
  9. Also add this AndroidManifest.xml file to /Plugins/Android/ and modify it to fit your build settings
  10. Build & Run your Unity project

If you follow this guide in order to use the Shadow Volumes Toolkit on Android devices, remember that Unity does not force the backbuffer format and it may revert to a 16bit format on lower-end devices, causing shadow artifacts.

GAMESTORM

I've been following GAMESTORM for a while and I really like seeing the concept sketches people make, it's a great idea for a website! Here is my contribution, some concept sketches I made while working on Seaside Racing.