Learning to Program

I get asked quite often for good sites to learn programming or web site development, here are a few resources I recommend.

freeCodeCamp – the best place to learn html, javscript and the rest of technologies necessary for front end web development, they are also working on a full stack developer course as well – can’t recommend these guys enough – a great intro to web technologies

Google has a list of resources and a guide intended for Computer Science students seeking an internship or university grad role at Google but it is useful for anyone who is interested in a software development career.

CS for All is an open book by professors at Harvey Mudd College which teaches the fundamentals of computer science using Python. It’s an accessible read and perfect for programming beginners.

If you’ve never programmed before check out the Getting Started page on Learn To Code with Me by Laurence Bradford. She’s done an incredible job of breaking down the steps beginners should take when they’re uncertain about where to begin.

This short 5 minute video explains why it’s better to think of projects you’d like to build and problems you want to solve with programming. Start working on those projects and problems rather than jumping into a specific language that’s recommended to you by a friend.

 

 

 

Vuforia / MergeVR Integration

This post outlines the steps required to integrate Vuforia for Digital Eyeware with the MergeVR SDK in Unity. The result of this integration will be an Augmented Reality demo app that can be run in the MergeVR headset on your Android device. It will recognize an image marker and display a 3d object on top of that marker, and allow the user to trigger a virtual button on the object – then enter in VR mode and move around the VR scene using the MergeVR headset capactive input buttons.

https://developer.qualcomm.com/software/vuforia-augmented-reality-sdk

http://mergevr.com/

 

Requirements

Android mobile device

Unity3d – version 4.6.*

Vuforia – Download the core Vuforia unity package – vuforia-unity-5-0-5 (you must be a registered Vuforia developer before the download) and the eyeware samples vuforia-samples-eyewear-unity-5-0-5

MergeVR – download latest Merge SDK Unity package- MergeVR_version_v062

 

Steps

 

  • Create a new empty Unity Project (4.6.*)
  • Import the Merge SDK Unity package (MergeVR_version_v062.unitypackage)
  • Import the Vuforia core Unity package (vuforia-unity-5-0-5.unitypackage)
  • Import the Vuforia Digital Eyeware sample AR/VR package from the vuforia-samples-eyewear-unity-5-0-5.zip file (arvr-5-0-5.unitypackage)
  • In the Scenes folder find the Scene ‘Vuforia-3-AR-VR’ – Duplicate it (Edit->Duplicate) and rename the new scene ‘DemoVRAR’
  • Open ‘DemoVRAR’ scene.

 

 

 

 

  • Stop running the scene (if you haven’t already)

 

  • Find the MergeVR -> Prefabs folder. Drag the MergeCameraController and MergeSDK prefabs into the scene Hierarchy.

 

  • Expand the MergeCameraController tree.

 

  • Click on ARCamera under UserHead and view the Inspector Pane. Check (enable) the ‘Bind Alternate Camera’ property.

 

  • Drag the MergeCameralController root transform to the ARCamera property ‘Central Anchor Point’. Drag MergeCameraRight to ‘Right Camera’ (Vuforia will pop up a box saying ‘add vuforia components’ – click for both right and left cameras), then drag the MergeCameraLeft to ‘Left Camera’

 

  • On ARCamera property ‘Viewer’ select ‘Other Viewer’ and enter 1 for Viewer ID.

 

  • Save the Scene – now go ahead and build and run this scene on Android – you should now have a working AR app that can recognize the image stones marker and display the 3d mountain object. If you focus your gaze on the virtual ‘VR’ button for 2 seconds the app will transition you inside the full VR scene where you can look around, to exit the VR scene look straight down and focus on the ‘AR’ button for 2 seconds.

 

  • We now have a working AR/VR app – we need to make a few modifications to this scene to get it to run best in the MergeVR headset and to let us use the capactive touch buttons on the MergeVR headset to interact with the VR world.

 

  • The MergeVR headset needs the camera on the right side to work in AR mode with the Android, since the generic Vuforia demo doesn’t support this we have to make a few modifications to the MergeVR code to handle the change.

 

  • To move the viewport to the correct position when camera is on the right. Open the ‘MergeScreenManager.cs’ script in MergeVR->Scripts. In the function ‘SetViewPortResolutionAndPostion’ replace this line

 

viewportYpos = viewportBottom;

 

with

 

viewportYpos = viewportBottom+(Screen.height-viewportHeight);

 

and in the ‘MergeCameraController.cs’ script in MergeVR->Scripts comment out the following lines in the function AndroidGyroTracking

 

/*

if (Input.deviceOrientation==DeviceOrientation.LandscapeRight || Input.deviceOrientation==DeviceOrientation.LandscapeLeft)

currentOrientation=Input.deviceOrientation; //only change on either full landscape

 

if (currentOrientation==DeviceOrientation.LandscapeRight) {

androidGyroRotation = new Quaternion (-Y, X, Z, -W);

androidGyroRotation *= Quaternion.Euler(180f,180f,0);

}

else

*/

 

leaving

 

androidGyroRotation = new Quaternion (-Y, X, Z, -W); //default

 

  • Now build and run the app – the viewports will be aligned correctly and the VR scene will be working as well.

 

  • Now we need to add interaction with the VR scene (movement in this example) using the MergeVR capactive touch buttons on the headset.

 

  • Add new script called MergeEyeCustom to the MergeCameraController game object in your scene

 

using UnityEngine;

using System.Collections;

 

public class MergeEyeCustom : MonoBehaviour {

 

public float speed = 1.5f;

public float jumpSpeed = 10.0f;

public float gravity = 10.0f;

public bool allowJump = false;

 

Vector3 moveDirection = Vector3.zero;

float ydirection = 0f;

float xdirection = 0f;

 

// Use this for initialization

void Start () {

 

}

 

// Update is called once per frame

void Update () {

 

if (Merge.MSDK.isControllerConnected ()) {

ydirection = Merge.MSDK.getController ().GetAxis (“Vertical”);

xdirection = Merge.MSDK.getController ().GetAxis (“Horizontal”);

} else {

//Use arrow keys in editor – or touch capactive buttons if present in MergeVR headset

if (Input.GetKey (KeyCode.UpArrow) || Merge.MergeInput.GetInput(1))

ydirection = -1;

else if (Input.GetKey (KeyCode.DownArrow) || (!allowJump && Merge.MergeInput.GetInput(0)))

ydirection = 1;

else

ydirection = 0;

 

if (Input.GetKey (KeyCode.RightArrow))

xdirection = 1;

else if (Input.GetKey (KeyCode.LeftArrow))

xdirection = -1;

else

xdirection = 0;

}

 

moveDirection = new Vector3 (transform.forward.x * ydirection*speed, 0f, transform.forward.z * ydirection*speed);

moveDirection += new Vector3 (transform.right.x * xdirection*speed, 0f, transform.right.z * xdirection*speed);

 

 

transform.position+=moveDirection* Time.deltaTime;

 

}

}

 

  • Now you can use the left and right MergeVR headset buttons to move around the scene once you are in VR mode.

 

  • As an exercise you can do the following to polish the example.

 

remove or modify one of the gaze cursors

 

optimize rendering performance

 

add a rigid body or first person controller for more realistic collisions the VR scene

iOS Projects We’re Working On

Here are some of our recent iOS projects…

* YourTeacher.com – We continue to be the iOS app development arm for yourteacher.com. They have over thirty titles in the Apple App store – majority of which have 4.5+ average ratings with literally hundreds of thousands of downloads per app.

Algebra, ASVAB, or Math are some examples of the work we’ve done for them.

* Just Picture It – created in partnership with the Mason Software Company. It evolves a mobile photo sharing into a word game with friends and family. In a turn-based game you can play in single and multiplayer mode.

Just Picture It uses the Parse.com api extensively for user authentication, push notifications, and storage of games and messages.

TorchShips Launch

Just launched the TorchShips site with the first post – Inspiration and why ‘Real’ Space Combat.

TorchShips is a 3-D tactical space combat game based on real physics with procedurally generated single and multi-player missions. It will be initially released for Windows & Mac, with iOS version to follow.

TorchShips is also on facebook and twitter.

If you’re interested in the game or just want to support us please link to the site, like via Facebook,  and/or follow the twitter feed. We’re gearing up for a kickstarter project as well that should start within a week.

Thanks

Initial Impressions of Unity3D

After evaluating 3d engines for iOS development I’ve decided we’re going to go with Unity3D.

I would prefer a native Objective-C engine but the ability to deliver for multiple platforms is very attractive (Unity can deploy to Android, iOS, Mac, Linux, XBox 360, and the Wii).

Unity development so far has been straight forward – scripts can be in c# or javascript – I’ve created several 3d scenes, used the extensive resources from the forum and Unity Answers to create a ship that uses realistic physics to move in orbit. The Unity Asset store has thousands of additional resources for Unity3D dev. Initially I’m using atmospheric planets and vectrosity for line drawing.

Unity3d scene

We play tested the game as turn based and real time multi-player – I was initially planning on a turn based approach using Apple’s Game Center for iOS but the game plays much better in real time. We evaluated several multi-player network solutions and are going to go with Photon Cloud  – very well integrated with Unity, a great price, and should be able to scale.

Using Parse to add a backend to your iOS app

We’ve had to write over a dozen server back ends for iOS applications. There is a lot of manual work involved, no matter what platform you choose (we’ve used Google App engine or custom php solutions based on Joomla). There is the code and database development on the server side, plus a lot of code on the iOS side to handle the calls to the server, error handling, etc. It’s a royal pain and something we’d like to avoid in the future if possible.

Parse is a new service that simplifies back end development for iOS immensely – it can take literally minutes to add a simple server side component to your iOS app.

Pricing is free in Beta and looks very reasonable going forward as well.

We recently used Parse to add server functionality to an iOS Math application for YourTeacher.com. The app stores user preferences to a simple Parse object. Adding Parse to our project, testing, and deploying took less than an hour. Performance is good – besides being able to save and retrieve standard dictionary objects you can use Parse to store and manipulate remote files and geo location objects.

They have a very good overview of the integration process for iOS, plus the API is available as a REST service and for the Android as well.

Highly Recommended