Sunday, July 27, 2014

Suggestions for Steam controller

Since Valve is going with a different design (by ditching d-pad) and adding analog stick instead:

Possible steam controller prototype design at this moment

I would like to give my view on why it is a wrong direction.

I would also like to propose alternative design for the controller and explain what are advantages of this approach.


First of all we have to understand the goal - what is the point of steam controller. Steam machines are set to introduce keyboard + mouse experience that we enjoy playing PC games on computer, but bring it to our living rooms. Obviously we cannot play with mouse and keyboard there, so we need a controller.

Majority of games in Steam library have no controller support, we need to have a controller that will work with those games.


Here is the design I came up with. Layout of buttons for the front side:

What are my main points of this design:

  • D-Pad - should be kept
  • Analog stick - should be available
  • Optical sensor - instead of touchscreen to use for high accuracy positioning 


Here is why I think D-Pad is needed and why it cannot be replaced with anything else.

Yes you can use touch pad or analog stick to simulate it, but what about combos for fighting games where you need to change directions quickly say: RIGHT, LEFT , UP ?

What about diagonal arrows, can you simulate them accurately that will work every single time. Sometimes pressing the diagonal button will press something else or even both buttons since there is very little physical distinction between buttons. For fighting games this can be a problem since you are loosing important control of your character.

There are other games where diagonal buttons are a must - for example "Batman - Arkham Asylum" game, where some of the items in the tool belt are triggered only by diagonal buttons (and even with XBOX 360 controller it was problematic for me to press the right one).

What I think could be done with D-Pad is that there should be a separate set of buttons, one for vertical / horizontal movement and the other for diagonal buttons. Both sets could be overlayed on top of each other.

This means that pressing one set of buttons will not impact another set of buttons and reduce possibility of having false keys pressed.

Another advantage of having a separate sets of buttons is that you will have 8 different buttons that could be rebound any way you like.

Analog stick

Analog stick should be used instead of touchpad. Primary purpose of analog stick is for moving game character in the world, so it could be less accurate analog input method of the contoller. There is nothing to reinvent here, analog sticks work perfectly for this type of purpose, they have physical feedback so you don't need to create anything special.

Optical sensor

Instead of using touchpads with haptic feedback, I think the best approach would be to use optical sensor.

This is the same way your optical mouse works. There is a special sensor that tracks the surface your mouse is moving on, giving you extremely accurate results (if you have a good mouse and sensor). We could use similar approach but track your thumb instead.

For this to work, the surface has to be about the size of the thumb itself. The curvature of the survace can be used to give user a feeling of how far from the center he is (So no haptic feedback would be needed)

The reading from sensor and movement of the cursor itself will be based on acceleration so the further from the center you move your finger, the faster the cursor will move.

Since optical area doesn't have to be as large as touchpad area, we can position the most commonly used buttons around it. The advantage is that you don't need to move your finger very far. This should make locating and clicking those buttons quicker and easier.


Hope that will explain what I believe are essential parts of making steam controller work.

Friday, July 04, 2014

Meeting the President

Four years have passed, and i finally have finished my education.
Since I finished and got my Cum Laude degree, I was invited to visit President of Estonia - Toomas Hendrik Ilves. There were many graduates from other universities who showed similar excellent results and had a chance to meet in the Kadriorg.
With Toomas Hendrik Ilves (photo Jelena Rudi)

With our best TUT graduates (photo Jelena Rudi)

List of all pictures from this event can be found here

The studying itself wasn't easy, i had to work at the same time and take my driving school lessons. I didn't skip a single class and participated in every lecture. Maybe because of that I barely had time for anything else in my life.

While driving to university in a bus I was frequently falling to sleep, even if I was standing. I did enjoy studying though, it mostly required just to have enough time and dedication. You don't have to be good at anything to get good marks, just know what is expected from you and do it before deadline.

Will I continue my education further? Probably not, unless I have a good reason.

I have a lot more free time now, just have to figure out what to do with it.

Monday, March 03, 2014

I am now Master of Science in Engineering

Finally, after many years of study, I have graduated from TUT  with a degree: "Master of Science in Engineering" (cum laude)

It was a very interesting experience, I learned allot, met many great people and pushed myself to get final thesis work done.

Speaking of which, I worked on introducing new approach for learning mathematics in schools, called "Visual Problem Solver".

I believe this is a future of education and where it is going now. For more information check dedicated website:

Visual Problem Solver

and introduction video:

Saturday, January 11, 2014

Oculus Rift 'Crystal Cove' the future of gaming immersion

I was following Occulus Rift progress for some time, even their dev kit prototype is impressive (with few issues) but new Crystal Cove is really starting to look like a real consumer version.

Can't wait for this to be available (somewhere in 2014 hopefully ?)

Engadget reports that Occulus Rift Crystal Cove has started 2014 with best of CES this year.
Crystal Cove version's 1080p OLED display is amazingly sharp and bright. However, what really sets it apart is its positional-tracking capabilities, accomplished thanks to an array of sensors mounted around the edges of the unit, which are monitored by an external camera. It's no longer just your head that controls movement; lean forward or back, and the virtual environment moves in sync, providing an unparalleled, fully immersive experience. 
The Rift has broad applications beyond gaming, and Oculus VP Nate Mitchell tells us that the company has sold developer kits to companies in virtually every industry, from auto manufacturers to the movie business (and, yes, Mitchell admits that there are military applications for the technology).
There are some games coming already with Rift support like one of my favourites Euro Truck Simulator 2

Some funny reactions from people that used Rift for the first time :)

Note: These all are working with dev kit prototype, that has low resolution and can cause motion sickness.

Thursday, August 22, 2013

Ubuntu Edge is not going to be a reality, for now...

Sad but true,

Ubuntu Edge didn't manage to gather enough money as I was predicting here

I guess the goal was really unrealistic, but hopefully it is not the end, but just a lesson for future campaign to take as a starting point.

Thursday, July 25, 2013

Ubuntu Edge - My thoughts

As one of the cool surprises this summer, the Canonical came up with an interesting idea - Ubuntu Edge

It is a "Formula-1" Mobile Phone on the market, with cutting-edge technologies, and running Ubuntu or Android OS.

The specifications are:
  • Dual boot Ubuntu mobile OS and Android 
  • Fully integrated Ubuntu desktop PC when docked 
  • Fastest multi-core CPU, 4GB RAM, 128GB storage 
  • Micro-SIM 
  • 4.5in 1,280 x 720 HD sapphire crystal display 
  • 8mp low-light rear camera, 2mp front camera 
  • Dual-LTE, dual-band 802.11n Wi-Fi, Bluetooth 4, NFC 
  • GPS, accelerometer, gyro, proximity sensor, compass, barometer 
  • Stereo speakers with HD audio, dual-mic recording, Active Noise Cancellation 
  • MHL connector, 3.5mm jack 
  • Silicon-anode Li-Ion battery

Few interesting points:

Fully integrated Ubuntu desktop PC when docked

This is the biggest point, the idea that you can take your phone with you, connect it to monitor and have a fully functioning PC is really cool. The portability is beyond anything we have right now.

However here is the problem: It is a PC in the first place, I am no Ubuntu expert, but I bet, the Linux Kernel need to be rewritten to work with a different type of hardware architecture, I am not even talking about many native Linux programs, how would the Ubuntu work, with phone it is unclear, I couldn't find anything specific except a small demonstration on their site working with Android phone (and getting heavy slowdowns on the screen).

What is processing power required to support any decent application, Gimp, OpenOffice, Firefox browser? Most applications are heavily optimized for specific CPU architecture (x86), gaining substantial performance improvements, it is not clear if applications gain any advantage or would they work at all. What would the performance be and what is impact on battery life ?

So it is a big question to me, and one of the hardest things for Canonical engineers to implement.

Ubuntu OS for Phone

I really love the design ideas and features of the new OS. The intuitive and simple interface is so much better, then what we have today. This might be my next  phone, just for the UI itself.

A short video that describes the features:

Silicon-anode Li-Ion battery

The biggest issue of modern phones is an extremely low battery life. Many phones can't even survive a day, without requiring recharge. This new battery type can solve many of the current problems. The idea behind it, is to structure silicon in a specific way, in order to boost capacity. Nexeon explains main advantages:


  • Allows cell capacity to be increased by 30-40% using a standard cathode
  • Provides far higher capacity than any other battery system


  • Increased longevity of battery
  • Consistent performance over 300+ cycles


  • Lower cost to manufacture using less material
  • Low switching cost through simple integration of Nexeon’s silicon anode into existing manufacturing processes

Sounds like a great idea, but the question is, will it work in the completely new product. The risk is that it may not be yet completely tested in different environment and conditions, the manufacturing issues may also arise as what typically happens with new products.

Overview of the prototype

In this video we can see Edge in comparison with other devices, it does look really nice. But the device itself is just a shell that doesn't have any electronic components. This brings me to another question. Since radio and other components haven't been tested yet, it is not clear how will they work, and if additional design changes might be needed, so the current design may well change and might look a little bit different in the end. The other thing that it is not clear, does the battery can be removed, where to put SIM card ? Does it have external storage ?

Crowd funding

The only way for this project to actually see the light, is to fund it via community contributions, that's why the indiegogo campain was started.

At this moment almost 6 million $ were gathered, which is impressive considering it has only started two days ago:

Would it reach deadline? I think it won't, it would probably reach 25 million out of 32 million $. The reason is, that the first few thousand devices are selling for 600-780$ range for a limited number of users. The other batch will start at 830$ which might be a very hard pill for some people to swallow.

According to the campaign, the device will be available somewhere around May 2014, which i think might be a little bit too optimistic, considering there is no actual device built.


In the end I really like where Canonical is going, and they might pull it off, but I will be surprised if it will work exactly the same way as they have advertised it. Most likely it won't reach the fund raising goal.

I will keep my eye on it anyway :)

Sunday, March 24, 2013

jsPlumb - Dynamic anchors on specific side

Based on my previous post

I would like to make a variation, and add anchors dynamically only to specific side.

jsPlumb does allow anchors to be added dynamically, and recalculates them correctly, by using Dynamic Anchors, but this will work on any side.

In my case I would like to add anchors only to specific side, the use case can be when I would like to have inputs on the left and outputs to the right.

Because there is no available method that can do that, I am going to do this myself.

First of all, the anchors source and destination:

    var anEndpointSource = {
                endpoint: "Rectangle",
                isSource: true,
                isTarget: false,
                maxConnections: 1,

                anchor: [1, 0, 1, 0]

    var anEndpointDestination = {
                endpoint: "Dot",
                isSource: false,
                isTarget: true,
                maxConnections: 1,
                anchor: [0, 1, -1, 0]
The important part here, is that anchor direction must be specified as it won't be recalculated, but because it will be only on one side, it is easy to do.

Adding the anchor, is done the same way, however, once new anchor is added, we must recalcualate all of the anchors, and position them equally on the side, this is what this method does:

            //Fixes endpoints for specified target
            function fixEndpoints(parentnode) {
                //get list of current endpoints
                var endpoints = jsPlumb.getEndpoints(parentnode);

                //there are 2 types - input and output
                var inputAr = $.grep(endpoints, function (elementOfArray, indexInArray) {
                    return elementOfArray.isSource; //input
                var outputAr = $.grep(endpoints, function (elementOfArray, indexInArray) {
                    return elementOfArray.isTarget; //output

                calculateEndpoint(inputAr, true);
                calculateEndpoint(outputAr, false);


            //recalculate endpoint anchor position manually
            function calculateEndpoint(endpointArray, isInput) {

                var mult = 1 / (endpointArray.length+1);

                for (var i = 0; i < endpointArray.length; i++) {
                    if (isInput) {

                        endpointArray[i].anchor.x = 1;
                        endpointArray[i].anchor.y = mult * (i + 1);
                    else {

                        endpointArray[i].anchor.x = 0;
                        endpointArray[i].anchor.y = mult * (i + 1);
This is it, here is how it looks like:
Full source code can be found here And demo here