Showing posts from February, 2017

Unboxing the Snapdragon Flight

I got my hands on the Snapdragon Flight Development kit.  Thought I'd start with it by an unboxing video; this is what the kit comes with.  This drone project will be tied into the other work I've been doing by making a VR app that controls it.  I'm going to start doing a few videos along the way to give better access to what I'm doing and how.  I'll also open source the entire project.

Profiling a NDK app from a CI server

As we get into working in VR, one of the chief toolsets that's missing from our developer toolbox is profiling.  The problem is that VR has a hard CPU / GPU requirement which is not so forgiving to unoptimized code.  So every time a team member checks in code, we really must ensure that the app still performs at least at 60 fps or our end users will wind up sick. As I've mentioned before, I prefer Jenkins for a CI server.  Now something we can do is start recording the systrace and run a monkey test behind it so the app is doing more than just running.  To do that, create a new shell task in Jenkins and do something like this: adb shell monkey -p -v 5000 > monkeyResults.txt This will run 5000 random events that an end user might run back to back.  The nice thing about it is it generates random user input and runs any app in an unpredictable yet repeatable manner.  It looks for crashes from unexpected user interaction and we can use Jenkins to parse the

Setup Android Studio for Daydream and Oculus development from the NDK

Thankfully Daydream is really easy to work on.  However, Oculus will require a bit of a on your own homework assignment as I can't redistribute their SDK for them.  Daydream's SDK distributes through a maven repository.  So to setup Daydream and make it easy to upgrade for the NDK development.  However, let's assume that you have downloaded Oculus Mobile SDK and have placed it in a known path <oculusPath> for the reference here:  we need to tell Android how to build the C++ by finding the include directories, the library files to link with and ultimately the library files as dependencies so Gradle knows to package them with the APK. repositories { maven { url "" } flatDir { dirs "<oculusPath>/VrAppFramework/Libs/Android" dirs "<oculusPath>/VrApi/Libs/Android" dirs "<oculusPath>/VrAppSupport/SystemUtils/Libs/Android" } }

Embedded network programming

Unfortunately, dear readers, it would appear that a long drafted networking post I wrote over the last week has vanished from this site while it was still in the draft stage.  Thus I'll endeavor to rebuild it to get the salient points as I'm very excited about what's coming up and want to get through the prerequisites which include network programming and requirements for talking between embedded devices. So let's dive right in and start with a quick chat about network programming in general.  Let's start by thinking about some context.  You've got these two devices and you want them to talk to each other.  Well how would two humans figure out how to talk to each other.  The steps are actually modeled after human communication and I'd posit that all communication happens the same way. First step, identify that there's someone else to talk to.  Let's say you're in a room full of people, in order to not be silent, you must be able to recognize th