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:

CAPACITY

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

CYCLE LIFE

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

COST

  • 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.

Conclusion


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);

                jsPlumb.repaintEverything();
            }

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

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

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

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

                        //position
                        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

Wednesday, March 20, 2013

jsPlumb - Dynamically creating anchors

The last time I was writing about how to create draggable elements

This time I would like to write about, how to dynamically create elements, add endpoints and manually connect them.

First I am going to create a simple div. It will have buttons that will add/remove endpoints dynamically. Div or window will be copied every time I need to create a new element.
        <div class="window" style="left: 600px" id="details">
            <p style="text-align: center">Window</p>
            <div class="button_container">
                <div class="button_add_window">Add</div>
            </div>
        </div>

To copy Div contents, I can do this statically using innerHTML:
  $(("#container1"))[0].innerHTML = $(("#container0"))[0].innerHTML;
,or dynamically with jquery selectors and appendTo()
  var id = "dynamic_" + $(".window").length;
                
  //create new window and add it to the body
  $('<div class="window" id="' + id + '" >').appendTo('body').html($(("#container0"))[0].innerHTML);

  //set jsplumb properties
  jsPlumb.draggable($('#' + id));

For static buttons I am using div with a click event:
  $(".button_add_window").click(function () {
      ...
  });
And for buttons on a divs that were dynamically created I need to use live event handler with "click" event type, this is required because using traditional click event is limited only to the elements that were already added to DOM.

P.S. Future versions of jquery should use on event handler instead
 $(".button_add").live("click", function () {
     ...
 });

Now once we covered buttons and events, let's talk about jsPlumb itself and what is needed for this to work. First of all, I am going to define endpoint:
    var anEndpointDestination = {
        endpoint: "Dot",
        isSource: true,
        isTarget: true,
        maxConnections: 1,
             
        anchor:"AutoDefault"
    };
Now because when window element is created without any endpoint or connections, I need to add them. What I can do, is to find parent div container, that is already known to jsPlumb, and attach endpoint to it:
     var parentnode = $(this)[0].parentNode.parentNode;
                
                
     jsPlumb.addEndpoint(
            parentnode,
            anEndpointDestination
     );
Once endpoint(s) are added, user only need to connect them manually with a mouse.

Here is how it looks like in the end:

Here is a full working fiddler sample or a complete demo on my site