Skip to main content

Nouveau Summer Project - Progress Update

This is a summary of all the proceedings related to my project on Nouveau. The start was a little bumpy due to some bugs and incompatibilities with Ubuntu. After spending quite some time to fix things I decided it was better to shift to Arch rather than spending anymore time on it. It took over a day and many reinstalls to get the base system up and running. Then the xorg server was setup and nouveau was installed. This got a basic window system running. It was followed by a git clone of PDAEMON + envytools which was then compiled and successfully run on Arch system. Things worked perfectly on Arch and I would be posting a tutorial on how to install Arch on a usb stick because I find the official documentation not so friendly to newbies.

Designing and implementing a PDAEMON to Host communication was my first objective. I planned to work on it in C. I started off with a basic implementation of the  command submission. From there I made incremental modifications improving and testing it at every step. I made use of a ring buffer to utilize the shared memory effectively. Implementing a buggy command submission was not all that difficult ;) but resolving all bugs and optimizing it after extensive testing did prove to be very time consuming. The code was revamped many a time until what I got was a clean and optimized implementation. This design would now also serve as  an interface for PDAEMON programs to send messages/commands. I implemented it by employing the use of two ring buffers. Later, after discussing and contemplating the positives and negatives of using 1 ring over two ; I rewrote the code with the required interface and employing only 1 ring buffer.

Now that the design was ready, tested and implemented in C the next task was to port it to Fermi Micro Code. The main hurdle behind it was that I had never worked with FµC.
I began with multiple tries to make sense of the code (pdaemon.fuc) directly, failing which I started reading the fuc documentation in hwdocs. At first, it was mostly an exercise of jumping back and forth between docs because I was not able to understand all of it in the first (or second) go.

I was not confident that I had given them enough effort and so giving them another shot. After that I started referring to fuc-isa.txt and things started to make more sense as I went on trying to understand pdaemon.fuc line by line. I realized that the main problem I faced was retaining what I had previously read because all this was unlike the c++ code which I had been working on to develop user base applications. Anyhow I felt confident as I was finally being able to grasp more than what I was at the starting.
Using examples from existing code, I wrote short snippets to test my understanding and grasp over it.When I felt I was up to the task, I started porting my C-code to FµC. Starting with the smaller functions, I quickly got a good hold of it. Finally, I ported the entire thing to FµC and PDAEMON.Testing one function at a time, I realized that most of it worked well due to a great C-implementation.
</ div>

Currently, the code has been ported to PDAEMON and the PDAEMON -> HOST communication has been implemented. Though it is yet to be tested extensively but that would be over before this week ends. Here is the FµC :

Popular posts from this blog

FusionCharts Automated Testing Tool

While working at FusionCharts, every release we were faced with a daunting task of black box testing. Daunting mainly because of the breadth and the depth of the product. This post talks only about black box testing. FusionCharts Product as a whole contains about roughly 90 charts and each chart can be visually tweaked with a set of about 300 chart options/attributes. Ignoring any further permutation and combination, we have right there around 90*300 test cases. Apart from chart options, api testing which consisted of events and methods was needed. Clearly automation was required, as our manual testing would cover only a very small sample set that too based on smart assumptions.

With this problem at hand, I broke it down as follows:
Headless Browser
- Visual Regression
- API TestingUser Browser
- Visual Regression
- API Testing We liked to call it the FusionCharts Automated Testing Suite.

Headless testing would be based of a headless browser and integrated in to our nightly builds. It was…

Charting API for Financial Markets - JavaScript (SVG)

A brief about the released version of this API is available here.

As a part of the last semester of my graduation program (Bachelor of Engineering in Information Technology), I have been interning with a start-up, namely uTrade Solutions.  uTrade™ Solutions is a financial trading technology company with various products including multi-asset trading platform, algorithms and analytics. Instead of walking through my experience of working in a start-up, I would directly move to a short discussion about my project. 

uTrade Solutions is working to develop a financial analytics portal and every financial analytics portal employs the use of advanced charting. To draw and display different types of charts on the web, there are two main options which are widely used and acknowledged. Namely, Adobe Flash and Scalable Vector Graphics (SVG) . 
Using Adobe Flash has two main disadvantages: It requires the installation of an additional plugin to run content on the browser.It is not compatible with a…

ES6 Babel Transforms : Code Injection and Increase in File Size

This post aims to give a rough idea on the increase of file size after applying babel transforms to ES6 JavaScript. These figures depend highly on your style of writing code since each extra space leads to an additional byte. However, the transform comparisons will give you an idea on how they are treated by babel and how much of additional code will be injected in your file. 
These file sizes are non-uglify, non-gzipped and without any method of compression on OSX. let - var3 bytes for the first rename. 4 bytes for each subsequent rename.const - varSave 1 byte per declaration.
Class Tranforms852 bytes for using simple class declaration with a constructor. Adds two new functions, namely, _createClass and _classCallCheck.

2114 bytes for creating and extending a class.

Extending a class adds two more functions let us have a look at them, namely,
_get and _inherits.

Arrow => functions20 bytes per usage, depends on the usage as well.

Template StringsA little less than 4 bytes per variable cal…