I put together a post summarizing my research on brain computer interfaces for my BuzzConf talk. This has links to some awesome videos – check it out at http://gooroo.io/GoorooThink/Article/16423/Brain-Computer-Interfaces
Category: Uncategorized
Last weekend I had the opportunity to talk at the inaugural BuzzConf.
BuzzConf is a bit different to other technology conferences with bands & DJ’s in the evenings and a family/kid orientated track with workshops on robots and Minecraft!
The conference was held in the beautiful but somewhat cold Phoenix Park to the west of Melbourne and attendees had the choice of either camping or staying in dorm/cabin style accommodation.
Free Internet access was provided to all attendees & a number of catering vans offered drinks and food for sale.
The theme of BuzzConf is emerging technology which certainly led to some interesting talks – I have to say currently I am enjoying these type of talks a lot more than how to use a new framework or language feature style ones.
I gave a 30 min talk on brain computer interfaces which has been one of the more interesting talks I have put together.
Putting this talk together made me realize:
- Brain/Computer interfaces are further advanced than you may think
- Although it is less comfortable it is possible to put together a talk on something you have a shallow knowledge of..
- Everyday work can seem a bit trivial when compared to developers dealing with real tricky problems such as decoding optical neurological impulses
- I want an Emotiv (a consumer BCI device) to play with
You can see my slides under the download section of my site.
I only spent a short time at BuzzConf due to parental responsibilities but my favorite thing about it was there was a nice feeling of community at the event.
I left the conference feeling very optimistic after a number of inspiring talks.
BuzzConf will be held again in 2016 and you can register your interest on the main page of the site – I look forward to attending the whole weekend next time with family.
The last four months I have been a bit quiet blog and talk wise. This is because I have been hard at work developing a course for Pluralsight – Microsoft Edge for Developers which was released a few weeks ago!
But why should you care?
Well Edge is the default browser going forwards for Windows systems & devices so expect a large amount of your visitors to be Edge users – and you need to know how this browser could impact you and your sites and applications.
This is not a course on how to use browser developer tools (John Sonmez already has a great course on this) oh no this is a course exploring why Microsoft released Edge and focussing on the new functionality and changes just in Edge.
This course is 2hrs 37 minutes of quality Edge focussed content that is divided into 5 modules :
- Introduction to Microsoft Edge
- F12 Tools – Debugging
- F12 Tools – Performance
- What does Edge mean for you as a developer?
- Edge user features
In the course I cover the following:
- The motivations behind releasing Edge
- Depreciated technology & APIs
- New technology support
- New developer orientated features (F12 Tools)
- How to debug memory leaks & circular references
- Edge WebDriver support
- End user features such as Web Notes, Reading View and List and Cortana Integration
Thanks to the Microsoft Edge team for assisting me with a number of queries & in particular Ade Bateman.
Recently, I presented a Webinar for Pluralsight on WebGL and three.js.
As part of this Webinar the audience asked a number of questions. Unfortunately we ran out of time before I could answer all of them but I have since compiled all the questions (with answers!) over at the Pluralsight Blog.
Over the next few months in addition to this blog I’ll be writing a few posts for the guys over at Gooroo.io.
The Gooroo platform is a free set of tools designed at helping Software Developers manage their careers. DDD Melbourne attendees might remember Gooroo’s Terence Siganakis & Carl Joseph from their talk “What we learnt analysing 1.5 million Tech Job Ads (and how we did it)”.
The first of these posts focuses on the Roslyn compiler covering the background & motivations behind the Roslyn project.
Head over to: https://gooroo.io/GoorooTHINK/Article/16253/Visual-Studio-2015-and-Roslyn-Compiler/latest to read the article.
.
Ill be conducting a free webinar for Pluralsight on the topics of WebGL & three.js.
The webinar will be held on Sat 23rd 8am Melbourne, Australia time which is Fri 24th 1pm PST for US readers/viewers.
We will look at some of the advantages & disadvantages WebGL has over other web display technologies, some common gotchas & then putting together a simple car game (screenshot below) utilizing the physijs physics engine!
Headover to Pluralsight now to register for this (free) Webinar!
Welcome to 2015!
Each year I like to reflect back on the previous year & some of my plans for the year ahead. This blog post is primarily for my own benefit to reflect back on later but maybe it’s of interest to you.
Baby
For me 2014 saw a number of changes. No doubt the biggest change for me this year was the birth of my daughter. It was a great but unexpected surprise. Her birth led to a somewhat different year to what we had originally planned & the cancellation of a booked & paid for trip to Thailand & planned honeymoon to Hawaii 😦
Still I wouldnt change anything & here is a pic of me looking pretty tired with her shortly after her birth:
I honestly don’t know what I did with all my spare time prior to her birth & the last few months have certainly been an adjustment period for myself & my wife!
I have found I have to be a lot more selective with what I spend my time on & I have started fitting in things like watching tech videos/Pluralsight content on my morning train commute & squeezing gym sessions into lunch & before work so I can get back home asap.
Citizenship
After just over 5 years here I became an Australian citizen (whilst retaining my British citizenship). Moving countries is never easy for anyone & for me personally my move had a difficult start so was a big achievement for me that I am very proud of. Australia has its issues like anywhere (one of the biggest is our good friend Tony Abbott!) but overall it’s a great place to live and I am happy to be part of it.
Pluralsight & Speaking
I had had a few people approach me about writing a book on various subjects but wasn’t interested right now. Writing is a very time consuming exercise with a lot of time spent editing rather than learning about what you are writing about & the short life time of any technical books for me make this a sum that doesn’t add up.
I do enjoy putting together training content so this year I put together a course for Pluralight on the WebGL framework three.js you should watch it!
Putting together the online course was a much more enjoyable experience than writing & I really enjoyed working with the Pluralsight guys. I picked up some basic video & audio editing skills as well. I really like Pluralsight as a company & they have a great culture & payment model. I’d highly recommend working with Pluralsight.
This year I had a reduced number of speaking engagmenents (quite deliberatly) but enjoyed talking at Web directions code & Melb.js. I also attended and ran a workshop at Campjs. I really liked the format of camp.js & would highly recommend the event although running a workshop is a very different proposition to a talk and I would do this quite differently next time.
The last few years I have spent predominantly focussed on JavaScript & HTML5 & friends but I think this year I will be concentrating on some of the exciting changes in Visual Studio 2015 and ASP.net vNext.
DDD Melbourne
In 2014 we ran DDD Melbourne for the fifth year with over 300 delegates. We had some great talks & workshops and some great key & lock note presentations from well-known speakers Troy Hunt & Iris Classon.
I hadn’t enjoyed running DDD 4 & it had taken up a large amount of my time leaving me a bit burnt out at the end of it. DDD5 ran much smoother & we have some great plans for DDD 6.
One of the big changes we are making is splitting out the running of the event into mini teams, opening the process and site & documenting our process so others can continue it in the future if any of the core team leave.
Work
Towards the end of the year I felt in need of a change at work. I wasn’t enjoying what I was doing & felt it wasnt the right direction for me. I had been doing consulting based work for some time & felt now was time for a change.
Luckily for me cloud based accounting company Xero were looking for developers so in October I took a position with them which I am very much enjoying (we are looking for more devs if you are interested). Xero has a great almost startup like feel to it and its great to be working on some exciting new challenges that come with a shift to a product based company.
Fitness
One of the important aspects of my life is fitness. One of my new year’s resolutions is actually to do less but more focussed training. I love training but you can get a bit carried away with it which can leave you feeling tired, worn out and also slow any gains. I realised I was doing too much so this year plan to focus on more on fewer but better quality sessions.
2015 goals
I plan the following in 2015:
- Less but more focussed exercise training sessions. In the next 6 months I’d like to up my Squat (butt to ground squats!) weight to 120kg (+25) deadlift to 130kg (+15) and bench 90kg (+15).
- Focus on learning the new changes in Visual Studio 2015 & ASP.net vNext & refreshing my .net knowledge
- More blog posts – I often come across things I want to share but never get round to it. I think the secret is probably to try to do short posts rather than massive ones (like this!)
- More talks – I’ll be submitting something for teched this year I think
- Attend CodeMania in April & Yow conferences in Melbourne – everyone tells me both of these are great conferences but yet to attend one
I wish you all a great 2015!
I haven’t blogged here for some time (something I intend to correct this year!) but have written a few detailed articles for the Pluralsight blog the last few months that may be of interest:
At Kiandra IT we are currently looking to hire .net devs, UX /designer developers, BA’s and system engineers.
Full job descriptions are available here: http://kiandra.com.au/join-us/.
But why would you want to work for Kiandra IT?
Well there are lots of benefits that the above link will tell you about but as a developer here are some of the things I like most about working at Kiandra:
- Great culture supporting innovation & learning. We have had a lunch time developer book club & a new games programming group is starting up shortly. We run company sponsored hackathons (last topic was big data & before that touch). Melbourne Alt.net is run in our office and we have a new user group called K-nights with shorter 15 min presentations. Most Fridays we have developer brown bag sessions to share the knowledge
- We use the best tools – Git Enterprise, Team city, Visual Studio 2013 & Resharper, Selenium and work with the best technologies – AngularJS, ASP.net MVC, Azure, AWS, NHibernate
- Colleagues that are passionate about their work – I think most devs at Kiandra have some sort of side project on the go from games development to start up projects to Pluralsight authoring
- Great working environment setup with a powerful desktop & 3 monitors for those who want them + an ergonomics guy to make sure this is adjusted just right..
- A range of breakfast is available in the office & there are always snacks & beer/wine available
- The work is predominantly based in the office unlike many consultancies (although you could have a more client facing role if you wish) & a central CBD location in new offices within easy reach of Southern Cross & Flagstaff stations
What you waiting for – don’t let the fact that you may work with me (or @larsklint for that matter) put you off & head over to http://kiandra.com.au/join-us/ and apply now!
Please note at this time Kiandra IT do not sponsor visas.
For my turn based strategy game I envisaged players moving pieces over a map that would look similar to the Game of thrones intro. Unfortunately this would require awesome 3D modelling & graphics skills that are a little beyond what I currently possess but its something to aim for!
I tried a few different ways to generate a map for my game. Initially I tried using a couple of array’s to define where to create ground and the height the ground should be.
height: [ 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0 ], groundType: [ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 ]
I then iterated through the arrays creating blocks dependent on the height & ground type. You need to do this backwards otherwise you get the inverse map relative to the array declaration:
var y = WorldData.initParams.startY,
colPosition = WorldData.initParams.rowSize,
rowPosition = 1;
for (var i = WorldData.initParams.groundType.length - 1; i > -1; i--) {
if (WorldData.initParams.groundType[i] > 0) {
addBlock({
arrayIndex: i,
colPosition: colPosition,
rowPosition: rowPosition,
y: y,
blockHeight: WorldData.initParams.height[i] * WorldData.initParams.blockHeight
});
}
colPosition--;
//end of row
if (colPosition === 0) {
colPosition = WorldData.initParams.rowSize;
rowPosition++;
}
}
As I create each square of ground I assigned meta data to it to easily identify its location in the environment and type of terrain.
Below is a screenshot of a typical result (the white & red cubes represent creatures):
Although I think this would work OK and allow me to manipulate the environment very easily (e.g. destroy a block of ground) it seemed very inefficient having a lot of cubes for a flat area of ground with surfaces that are never viewed. It also looked a bit Minecraft esq & not in such a good way so I started looking at other options!
Height and texture maps
I came across a cool post by Bjorn Sandvik who utilized realworld GIS data & three.js to produce a height and textured map of parts of Norway. Bjorn did a lot of work manipulating real world data to produce a detailed texture & height map. This produced an awesome result but I don’t need something quite so complex.
At a high level my plan for creating terrain is:
- Create a bitmap to represent the games map (this has the added advantage that I dont need to create a level editor)
- Iterate through the bitmap’s pixels and assign a height value for each color (e.g. grey might represent mountains which are higher than trees)
- Output a JavaScript array of this data
- Use the array three.js to manipulate a plane’s vertexes to produce a height effect
Here is my very simple game bitmap enlarged (the original is 20 x 20 pixels):
I wrote a small C# program to iterate through the bitmap generate a JavaScript array string (note this is a slow way to do this and there is a faster way using LockBits method):
private string ParseBitmap(Bitmap bmp)
{
var sbHeightMap = new StringBuilder();
for (var y = 0; y < bmp.Height; y++)
{
for (var x = 0; x < bmp.Width; x++)
{
var clr = bmp.GetPixel(x, y);
var height = GetHeight(clr);
sbHeightMap.Append("," + height);
}
}
sbHeightMap.Remove(0, 1);
return "[" + sbHeightMap + "]";
}
I can then take the generated array and use it to manipulate a plane and then map the terrain image on top of it:
function loadNewTerrain() {
var geometry = new THREE.PlaneGeometry(WorldData.boardScreenWidth, WorldData.boardScreenWidth, WorldData.boardCells - 1, WorldData.boardCells - 1);
for (var i = 0, l = geometry.vertices.length-2; i++) {
geometry.vertices[i].z = WorldData.heightData[i];
}
var plane = new THREE.Mesh(geometry, WorldData.terrainTexture);
plane.material.side = THREE.DoubleSide;
plane.rotation.x = GameMath.de2ra(-90);
Game.newTerrain = plane;
Game.addObjectToScene(plane, 'ground');
}
This simple approach gives quite a pleasing affect with even a very simple image:
I tried this approach with a more complex 800×800 satellite photograph. The color to height mappings are not setup but it still produced a reasonable effect that shows the promise of this technique with a more detailed texture:
One issue this experiment brought up is how quickly game assets can get quite large – for example the height map of the above image is nearly 2mb and that I will need a good way of loading them hmm…






