Wednesday, December 31, 2014

A few things that made my 2014 interesting..

It has become customary for me to write a summarizing blog post each year, with the title "A few things that made my ${year} interesting", summarizing the top 30 events or memories of the year that made the year remarkable and special, since 2012.

1. "The accelerating year" - The year started as a lazy year, and began to catch up and get more interesting and eventful during the last trimester.

2. A year strikingly similar to the year 2010 - A sense of deja vu throughout the year. Many events reminded me the year 2010, probably a larger and more complicated version of the year 2010.

3. Shenzhen 2014 - A two-weeks-summer-break in Shenzhen, China, just before my master thesis defence.

4. Grandma's 粽子 (Zòngzi)! So delicious! Also a tea party in Chinese style.

5. Paris, Once more - This time it was summer, where last time in 2010 it was covered by thick snow, when 4 of us went as a group to SoCPaR 2010.

6. London 2014 - To present my second and final paper of my masters. London was great. Enjoyed the food and the atmosphere.

7. Completion of my master studies - EMDC, which started in 2012, came to an end this year. It was generally successful, and I secured 16.69 out of 20 as the overall grade.

8. Cloud2Sim - My master thesis. It was pretty successful as well. Produced two papers, and a grade 18 out of 20.

9. EMDC Winter Event at Evora - Compared to last year's event, this felt rather like a spring event. However, it was extra special, as I was informed about the EMJD-DC selection results. It was good to give some talk about EMDC life at KTH to the juniors too.

10. Starting of the PhD (EMJD-DC) - This itself was a successful goal.

11. Google Summer of Code 2014 - I became a student after a long time. Last time, I was a student in 2010 with the EPCC of Edinburgh University, under the mentoring organization OMII-UK. This time too, with a university research lab - The Biomedical Informatics of Emory University.

12. Random walks - There was an overwhelming amount of randomness this year. For example, the random walks in London and random explorations in Portugal's coastal line.

13. RĀVAṆA - My initial PhD work. Hoping for better and larger contributions following this.

14. Ilhas Desertas - Long summer day on a deserted island beach in the southernmost Portugal, in Faro.

15. The feeling of missing my friends - We were a group. Then I came back to Portugal alone, end of last year. 

16. UniPlaces - Had a short term collaboration opportunity with this unique team. Though it was just for 1.5 months, due to my time constraints, enjoyed it a lot! This is an outcome of the open source work produced.

17. Random shopping in Lisboa, exploring more (including some serious shopping. :D).

19. A day long walk over the cliffs and beaches of Porto Covo.

20. Obidos Chocolate Festival 

21. CSE Big Brother Big Sister Mentoring - It was an opportunity to meet the younger students and the staff. Since I am away from the country, I do a remote mentoring.

22. Fonte da Talha - The summer was pretty long. I was able to enjoy the beach till the early November.

23. Going bankrupt. Twice! - Immediately following the last year (end-of-year) Nordic countries trip, and also following this summer's Shenzhen - Paris mega trip. But who cares? I survived both times. :P

24. Presenting in a conference after a long time - MASCOTS 2014. Presented my paper after 4 years, again in Paris. This was the second time I was presenting my paper. Last time too, it was in Paris. This also was my first work alone (previous papers were outcomes of team works of 4 of us).

25. UCC 2014 - This is the full paper produced from my master thesis. So the presentation was basically a slightly modified version of my master thesis defence. 

26. Carnivals in Portugal - Witnessed the one in Lisbon and also paid a visit to Torres Vedras. Barcelona one was much better. :P

27. Deadlines - Paper submissions come with deadlines. Working till the deadlines, which often is around 5 a.m Lisbon time was interesting and resulted in a few sleepless or long nights.

28. Visa applications - I did not have to apply for any visas last year, as I did not travel outside the Schengen region. This year, I required visa for China and the UK. Visa applications again! The visa application is not something I really enjoy though. :P This year also marked my 10th country to visit (UK).

29. Clearing my GMail - It got like 6000 unread emails, just in the inbox, along with a million unread email in the other filters. Made the count to zero last month also deploying better email filters and labels. Now the email count has grown to 100+.

30. Planning the future (also known as the year 2015. :P) - According to the initial discussions, it seems my second university for the PhD will be KTH. So EMJD-DC is going to be a larger version of EMDC, in terms of mobility, as IST ->KTH -> IST. That also means, most probably I will be moving to Stockholm mid of next year. Once more, year 2013. :)

Thanks for reading my list till the end. If you are really interested, you may also read the blog posts on the year 2013 and the year 2012. :D Let's see what will I have to write on the year 2021 - The 10th post in this series. :)

I wish everyone of you a very happy new year 2015. Hope it will be more interesting. :) 

Friday, December 19, 2014

[TAVM] Garbage collection auto tuning for java map reduce on multi-cores

This is the second presentation for the TAVM module. The presentation slides are given below, which I prepared by referring to the paper from the original authors.

Wednesday, December 17, 2014

3rd winter in Lisbon

Getting ready for the new year 2015. My resolution for the year is to be less random. Too much of randomness in the year 2014. I decide to focus more into my PhD next year, and also some more attention to open source contribution. Will also keep blogging my life and projects with EMJD-DC.

This is going to be my 3rd new year in Lisbon. Since I left Sri Lanka in 2012, I have been moving between countries, thanks to the mobility of my studies. Have been also travelling during the year end vacations. However, I have always come back to Lisboa for the new year, so far. :)

Friday, December 12, 2014

London 2014 || UCC 2014

London Eye~~
[07/12/2014 - 12/12/2014]
Good bye London! See you again soon probably another year. :D This was probably one of the best and craziest trips of the recent past (Probably only second to the Shenzhen 2014.)

Many things I learned. Many random events made me learn the world more in different lights. Many highlights during a very very short trip.

[The first two highlights here.]

3. Friendly receptionists. Learned he is in fact finishing his MBA and planning to return to his home country (Mauritius).

4. A random walk, realizing many people here actually can recognize a Sri Lankan. :D

5. Trying the Lebanese Halal Cuisine for a dinner (I had Farrouj Mussahab), listening to energetic Lebanese music and sipping Jallab. Loved the music (food was not that great though. :P)

6. Making friends and trying to get the best out of the presentations. :D

7. Realizing the time has gone too quick. (Life is always like that) :S

8. A night at the Heathrow Airport.
Just realized, for my basic survival I need these 6 things (in no particular order): Some food, some water, plenty of sun light, some Oxygen, electricity, and an uninterrupted supply of WiFi. :P The airport provides 4 hours of complimentary Internet for each device. Airport had notifications asking us to keep the devices charged, and those that are not charged may be prohibited from taking with us in the flight. :-o So I had to find a spot to sit down, charge my computer and Nexus 7, while surfing the Internet.

9. Fire Exits and Doors.
Interestingly, all the buildings in London are very serious about fire protection, with fire doors. I felt, it is because of the 1666 Great Fire of London.

Transportation was pretty expensive. Just one way metro ticket inside the central London costs 4.1 GBP, making the round trip costs 8.2 GBP. The daily ticket costs 8.9 GBP. Hence, we always bought the daily ticket, as the single/return tickets were very expensive. The ticket was for a day, and not for 24 hours. So each time we bought a ticket in the evening, it was in fact valid only for a few hours, till 00.00 hours.

Luckily my presentation came on the first day of the conference. Hence I was able to relax for the rest of the conference. Now going back to the regular busy life.

Tuesday, December 9, 2014

~~ Life in the small world..~~

London felt colder than Stockholm!
I presented my paper at UCC 2014, on the 8th of December, 2014. This is my master thesis paper. This is the second (also, the last) paper produced from my masters thesis.All the other papers from now onwards are my PhD papers. :P

UK has become the 10th country that I have visited. Have a long list to go. :D My London trip (7th - 12th, December 2014) had two interesting highlights. Second one was, I presented my paper, which was effectively the core of my master thesis work. It was a full paper (so I had 20 + 5 minutes to present).

First one was meeting my room mate (I only had one room mate so far - that was in Stockholm), who made my stay in Stockholm remarkably pleasant, sharing the happy and sad moments of life. We met after almost one year, as we both had moved to different universities, thanks to our mobility programs. 

When we move to another country (or even city), we start everything from the scratch. We learn new things; we change a bit; we hopefully improve. When we move out from the place, we don't move completely. We leave part of us wandering around, in the place that we lived. We become scattered - our memories become. I have only lived in 3 places so far - Colombo (Sri Lanka) -> Lisbon (Portugal) -> Colombo (Sri Lanka) -> Stockholm (Sweden) -> Lisbon (Portugal) was my life in a nutshell since 2012. When I left Lisbon to continue my studies in KTH, Stockholm, I missed Lisbon. Same happened to a considerable extend when I moved back to Lisbon. I missed Stockholm.
We always gain new friends - some we even call family - brothers and sisters from many countries. When we go back, the people we met may have moved out. But the memories remain. 

Meeting my brother who tolerated my weird nature and owl life style for one whole semester surely made a highlight of my London trip. I got the interesting updates since I left Stockholm, while having a quick tour around London. We will meet again. Small world, after all. 

Friday, December 5, 2014

Composing Software-Defined Networks

We at Distributed Systems Group (GSD) of INESC-ID Lisboa have regular technical meetings, where we discuss some papers that we have published recently, or are going to publish in the near future. We also discuss some external research work that is interesting to the research group. Recently I presented Pyretic, a language for composing software-defined networking, with the help of the original video recordings. The complete video can be found below, explaining the language for a modular software-defined networking.

[TAVM] The Value of zSeries Virtualization Technology for Linux

We have 3 presentations to be done for the Advanced Virtualization Techniques (TAVM) module. I presented z/VM for this. The presentation slides are given below, which are a sub set of slides adopted from the slides of the original developers.

Monday, December 1, 2014

SDNSim, A Compact Simulator for Software-Defined Networking

Following the development of Ravana (RĀVAṆA)  adaptive architecture for network flows, I am currently building SDNSim. SDNSim is a compact and expressive simulator for Software-Defined Networking (SDN) built using Java, extending the xSDN, an Expressive Simulator for Dynamic Network Flows.

The project page can be found here. The code will be made public, when considerable development has been done.

Thursday, November 20, 2014

Ravana (RĀVAṆA)

Magnificent view from Cacilhas..
I have named the upcoming product of my PhD, RĀVAṆA, to honour our ancestor. (RĀVAṆA was a strong king and he is a great forefather of the island country of Lanka.)

The weather is getting colder. I am reaching my third winter in Lisbon. Time indeed goes fast.
Today I marked all the emails in Gmail as "Read". It was slightly more than 6000, just in the inbox, excluding the filters. This was my first time to have zero-unread-email, since the emails were adding up since late 2008, in the scales of 1000s. Never marked the emails read in bulk before. Gmail took a bit of time to make this transaction, and Gmail was unavailable for a minute or two. Having a cleaner looking Gmail now. :D You may read this post to learn how to mark all your unread emails in your Gmail account "read" in one shot.

Thursday, October 23, 2014

Configuring OpenDaylight Controller with Mininet

OpenDaylight with network emulated by Mininet
Once you have built OpenDaylight controller (or just chose to use the built OpenDaylight controller bundle), you may build and test the SDN solutions, with either networks or networks of virtual machines. Network emulators such as Mininet provide an effective alternative for SDN prototyping. Mininet can easily be installed from the regular repositories in Ubuntu.
$ sudo apt-get install mininet

Run OpenDaylight Controller (often as super user, for the privileges).
$ cd ~/OpenDayLight/controller/opendaylight/distribution/opendaylight/target/opendaylight
$ ./

Starting Mininet, for example, with a three-level tree topology.
The below command creates a tree topology with 3 levels.
$ sudo mn --controller=remote,ip= --topo tree,3
[sudo] password for pradeeban:
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7
*** Adding links:
(h1, s3) (h2, s3) (h3, s4) (h4, s4) (h5, s6) (h6, s6) (h7, s7) (h8, s7) (s1, s2) (s1, s5) (s2, s3) (s2, s4) (s5, s6) (s5, s7)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8
*** Starting controller
*** Starting 7 switches
s1 s2 s3 s4 s5 s6 s7
*** Starting CLI:

OpenDaylight OSGi console would produce the below logs connecting to the network topology emulated by Mininet.

osgi> 2014-10-16 11:58:07.606 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.450 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.502 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.552 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.613 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.686 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.770 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller
2014-10-16 11:58:08.849 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch: is connected to the Controller


The connected networked devices can be monitored from the admin console of OpenDaylight. In the default configurations, you may access the admin console in a browser from the url,, with user name and password 'admin'.

Different Topology options
Network topologies can be visualized using Mininet and OpenDaylight. While a few topologies are available out of the box with Mininet, more custom topologies can be programmed as well.

1. Single node with 5 ports 
$ sudo mn --controller=remote,ip= --topo single,5

2. Linear topology with 5 nodes
$ sudo mn --controller=remote,ip= --topo linear,5

3. Tree topology
a. 3-ary, 2 level tree

$ sudo mn --controller=remote,ip= --topo tree,depth=2,fanout=3

b. 3-ary, 4 level tree 
(This looks a bit messy)
 $ sudo mn --controller=remote,ip= --topo tree,depth=4,fanout=3

OpenDaylight wiki page mentions that only the Mininet in a VM (option #1) is tested with the OpenDaylight controller. However, as seen in this post, Mininet works well with OpenDaylight even in the Mininet installation from the packages (option #3).

Tuesday, October 21, 2014

Cheese Alternatives for Ubuntu..

If you want to take a photo of yourself using your laptop camera, say in a conference hall, or when someone else is presenting his project, without disturbing others, tools such as cheese come handy.

Cheese is a function-rich tool. However, the photos it takes are not of a good quality. Though the tool can be configured, this issue is not addressed. I found a few alternatives for Ubuntu - kamoso, camorama, and guvcview (GTK UVC Video Viewer). Just like cheese, all of these can be easily installed in Ubuntu from the repositories, using, 
$ sudo apt-get install kamoso camorama guvcview cheese

Among the tools, unfortunately the photos taken using guvcview are crashed and could not be opened in Ubuntu 14.04 LTS when I tried. The below error was produced when I opened the captured image.
Could not load image 'guvcview_image-3.jpg'.
Error interpreting JPEG image file (Quantization table 0x00 was not defined

Kamoso is good and can be configured; though it does not have all the fancy features of cheese, it produces somewhat better photos and also can capture videos as well as images in the burst (multiple photos with a specified time interval) mode.

Among all the tools that I have tried, camorama seemed to produce the best quality images. It also provides easy options to change the resolutions (small - 160 * 120, medium - 320 * 240, and large - 1280*720). Unlike the other tools, this does not provide options to capture videos or images in the burst mode. However, it does what it is supposed to do, perfectly.

Tuesday, October 14, 2014

Chat with a Skype Scam Bot..

Once in a while, I am added by Skype bots. A Skype bot is a script that adds multiple accounts in bulk. The motivation of these bots is to earn money by using click or referral marketing. The bot will pretend as a human, and make the victims click some links. Sometimes, Skype bots can be used for identity thefts and to rob money from the credit cards of the victims. I had a not-so-interesting chat with a Skype bot. The bot added me. I knew it was a bot from the beginning. But just kept the conversation so that I can make it into this blog post. :P 

Be careful with this bot (mega.fresh7) or any other random Skype accounts. They are mostly just scripts with no real human. They just exploit the greed and lust of the victims for their own benefit.

 Segunda-feira, 13 de Outubro de 2014
[20:57:31] mega.fresh7: hi there :)
[22:30:40] mega.fresh7: heyy :)
 Terça-feira, 14 de Outubro de 2014
[10:50:25] Pradeeban Kathiravelu: Hi
[10:50:53] mega.fresh7: (wave) hey...i saw your profile on the new skype app...i hope you don't mind me adding you? 23/f here u?
[12:43:18] Pradeeban Kathiravelu: ok. no prob
[12:43:44] mega.fresh7: im busy studying, i hate it sometimes it gets so boring. what are you up to? :)
[12:43:58] Pradeeban Kathiravelu: I am busy studying too
[12:44:26] mega.fresh7: lol im studying for my bachelors in psychology...its really hard...need a break tho! you ever chat on cam?
[12:44:53] Pradeeban Kathiravelu: Not much. Recommend me a text book in psychology, please?
[12:45:00] Pradeeban Kathiravelu: would like to read during the free time.
[12:45:21] mega.fresh7: it can be fun i love meeting new people on cam chat, you ever been on this new video chat site?  it has all sorts of cool effects and stuff lol (cool)
[12:45:56] Pradeeban Kathiravelu: No. I am not into video chat. Just recommend me a book in psychology to read.
[12:46:23] mega.fresh7: i think i will just put on a camisole and a thong then =) i think u will like it?? i hope atleast... :x
[12:46:42] Pradeeban Kathiravelu: No. Stop this bullshit.
[12:47:04] mega.fresh7: [SCAM LINK REMOVED] lol go here do u see my cam?
[12:47:27] Pradeeban Kathiravelu: Stop chatting to me. Otherwise, I will report you to Skype
[12:47:44] mega.fresh7: pleaaase...  whatever!  byeeeeee
[12:47:56] Pradeeban Kathiravelu: bye
[12:48:25] mega.fresh7: Well if you must leave... tell ya what if ya want to see me later on my cam goto [SCAM LINK REMOVED] just accept my cam invite..  Its Fast and easy..  we'll prolly be online for the rest of the day so you can go and see me on my cam.  Take care
[12:49:08] Pradeeban Kathiravelu: No thanks. bye.
[12:49:29] mega.fresh7: no worries..thouhght u wanted to see me naked ..:)
[12:49:44] Pradeeban Kathiravelu: No thanks. bye.
[12:50:56] mega.fresh7: oh, i think you might have to fill out some stuff...everyone gets verified as being real on here, keeps the creepy people away!!! lol :x
[12:51:20] Pradeeban Kathiravelu: Stop sending stupid things to me. OKAY?
[12:51:48] mega.fresh7: k, yea i had to do the cc part too  =( that how i got my profile verified as real (kiss) u don't get charged, its free. did u get in?
[12:52:15] Pradeeban Kathiravelu: No. You creepy robot. get lost.
[12:52:36] mega.fresh7: what are we playing terminator roles?? lolz
[12:52:53] Pradeeban Kathiravelu: STOP
[12:53:21] mega.fresh7: k let me know when your signed in so i can send u some "private time" loving! (kiss) mmm
[12:53:43] Pradeeban Kathiravelu: .
[12:54:01] mega.fresh7: please waiting!!
[12:54:06] Pradeeban Kathiravelu: .

From the chat log, it is obvious that there is no real human behind the bot. The bot is not smart either, as it could not answer simple queries. A.L.I.C.E. is much better!

Friday, October 10, 2014

Why "Ignore" is the best strategy to combat spam

A typical image used to manipulate human emotions
The most annoying of all the spams are the spams that make us feel that the person who shared it is a person with minimal level of knowledge. Many of my friends, despite their education and professional levels, fall for the spams that claim sharing a photo will make Facebook donate 1 USD to the poor people. 

More annoyingly, now it has even started to spread to LinkedIn. People download and share photos asking for "Likes". "A million of likes would make my dad quit smoking". They do not even care how can someone use LinkedIn to track the number of likes each of these photos received, as the original photo is actually not just shared. Rather, it is downloaded and re-uploaded. Also, they just assume that the social networks somehow keep track of the number of shares of these photos.

I used to explain to people sharing such posts why these are scams/spams. Eventually I have realized, ignoring is the best way to combat these spams. If you really feel the urge to voice your opinion, send a separate personal email or message regarding this. Just do not comment on the spam/scam photo/post.

Here I explain why.

1. Some users just think Facebook works this way
Trying to explain them is often useless. They just reply, "OK. I just shared. It did not cost me anything. In case, if Facebook indeed donates something? What a big deal?".

2. "Sharing is caring/praying/.."
The second logic they give is, we share to pray for these people. These are just plain spams and the original page owner wants you to share these images just to make their page popular. Moreover, the images are used without the permission of the rightful owners, and are often manipulated with hoaxes. 

The more you share, the more visibility the page gets. The page will eventually be sold to someone. However, if you try to explain the reality as a comment to the photo, the photo gets more visibility. Facebook or LinkedIn cannot differentiate the positive comment from a negative comment. For a spammer, any response is a good response. Ignorance is the only bad response.

3. "If you don't care, can't you just shut up"
"We share because we care about people who are affected. It is ok that you do not care. But can you just stop discouraging those who genuinely care about this marvellous initiative that gives away money to the poor" Believe me, I have seen similar comments for real as a response to anyone who try to explain why we should not share these images.

4. Some users just pretend to be stupid
Now these are the ones who spam intentionally. They download and re-share these contents, or create their own. By manipulating human emotions, they try to exploit some photo that obviously does not belong to them, for their own benefit. For example, getting more visibility to their page or business. Likes, comments, and shares - all are equally valuable for them.

Facebook, LinkedIn, and other social media should be made more intelligent. They should be made to differentiate a supportive comment from a negative comment. At least, they should provide options to the commenter, whether he/she chooses to publish his activity to their network. I do not want my friends to see a spam image just because I commented on that. Also, I do not want the spam to get more scores, just because of the number of comments. Unfortunately, this option is not yet available. Till we get this fixed, it is better to ignore, than trying to explain.

Thursday, October 9, 2014

Dimensions of Time

The summer in Stockholm was long and pleasant
I was reading an interesting study on Erasmus exchange programs. It states, "Not only do former Erasmus students have better employability skills than 70% of all students. What’s more, 27% of Erasmus alumni met their current life partner during their stay abroad, according to the recent Erasmus Impact Study." Go ahead and read the full report. ;) Thanks to the Erasmus Mundus, I have called Lisbon and Stockholm my homes. Of course, the definition of home has become pretty vague lately. The memories I had for the last two years were remarkably interesting.

Time is an interesting element. When we experience the same location after a long time, we feel like travelled through time. Today, the moment when I sit down at FA1, Instituto Superior Técnico after a long time (after around 1.5 years), for a lecture, remembering the legendary moments of EMDC (European Master in Distributed Computing) and Virtual Execution Module. I am sure I will feel the same when I return to Sweden/KTH for the second part of my PhD.

Most of the airports currently provide free Internet for a limited time, such as an hour per device. Since I usually have 3 devices with me during the travels (a laptop, a tab, and a phone), I always get 3x time. :D My devices remember the wifi networks that they have connected to. It is always interesting to view them - they are from universities, airports, hostels, hotels, homes/apartments in Colombo, Lisbon, and Stockholm, and cafes with Internet! They are the logs of the places that I have visited, the lands that host my homes, and my journeys between the destinations. Wish everyone offer unlimited Internet.

Today we got an update regarding the schools participated in Google Summer of Code 2014 (GSoC 2014), from Google. "For the first time in seven years a new school has claimed the top spot—congratulations to International Institute of Information Technology - Hyderabad."

Time has its own dimensions. It is interesting to see how many things change in life and technology. I am sure that the world is becoming a better place to live. I hope I am not being over-optimistic. :)

A log of my computers and my blog posts..

My current laptop in my desk at home
My first desktop computer in 2006 had a dual boot of Windows XP and Mandrake Linux, in just a 40 GB hard disk. I allocated 10 GB for Linux, as Windows was my primary operating system by then. In 256 MB memory. It ran pretty well. The Internet connectivity I got from Suntel was not so good, and was expensive at times. Each time we got a phone call, the modem disconnects the data and I had to be offline till the phone call terminates. I was able to manage with this till 2009, and it was pretty much enough for me. With memory, CPU, and virtually all the important elements replaced over time, the desktop is still somehow alive. I used to have floppy disks of 1.44 MB to have some documents with me. Also, my first pen drive by then was 256 MB.

Then in 2009, I moved to Ubuntu, with my new laptop. It had a 2 GB memory. It actually works even now without any changes in memory, CPU, battery, or any other component, though pretty slow as the current applications require a much larger memory. I stopped using Windows altogether, becoming an open source evangelist. :D

On the 11th of February, I bought my current laptop HP Envy, Intel® Core i7-4700MQ CPU @2.40GHz × 8 processor, 8 GB memory, with a 1 TB hard disk. It came with a Windows 8 (Which I later upgraded to 8.1), which made me have dual boot again. Still having Ubuntu 14.04 as the primary operating system, where Windows remains idling rarely being used. This seems pretty much enough for now; but I am sure it will look terribly small after 2 or 3 years, just how it feels when I think of the days of 256 MB RAM, and the 56 k bandwidths. Today I built OpenDay Light modules, and it takes a whole 13.7 GB with everything built and configured from source code. It would have been 1/3 of my hard disk for my first computer. :D 
My Internet Presence
If Google is strong enough to overcome the forces of future and keep the Blogger platform active, I will be able to see this post from a day from future and see how the things were in the past, during the year 2014 and before. :) As of now, Google (Gmail and Blogger), Facebook, and LinkedIn are three important platforms that I have invested my time on, to create a web presence. If one of them disappears in the future, that will be a loss for me (as well as many other users out there, I presume). I have done some serious blogging in 2009, 2011, and 2012. Relatively, my blogging activity has been much slower in 2010, 2013, and 2014. Hope it will improve in 2015. 

Given below are the 10-most viewed posts from this blog, along with the dates that they were originally published. I should admit that the blog views do not represent how much effort I put in writing these posts. However, I am happy that some people have found these posts useful.

Wednesday, October 8, 2014

Building Open Daylight Libraries on Ubuntu 14.04

Once the Open Daylight controller is built, all the other packages too can be built. Each package is written in different languages, including Java and C. Hence each of them have their own build mechanism, based on their language. Most of them are built using maven (mvn clean install), some with skipping tests (mvn clean install -DskipTests). However, some of the packages are built using make or autorun scripts.

For example,
1. Building opflex
$ chmod u+x ./BUILD/
$ ./BUILD/
$ ./BUILD/

However, this may produce the below error message:
configure: error: Cannot find readline headers, possibly install readline-devel
Can't execute configure

This can be fixed by installing the relevant dependencies.
$ sudo apt-get install libreadline6 libreadline6-dev
Now, another error..
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -DBSD_COMP=1 -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_commands.lo -MD -MP -MF .deps/peovs_commands.Tpo -c peovs_commands.c -o peovs_commands.o >/dev/null 2>&1
mv -f .deps/peovs_commands.Tpo .deps/peovs_commands.Plo
/bin/bash libtool --preserve-dup-deps  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -DBSD_COMP=1   -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_monitor.lo -MD -MP -MF .deps/peovs_monitor.Tpo -c -o peovs_monitor.lo peovs_monitor.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -DBSD_COMP=1 -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_monitor.lo -MD -MP -MF .deps/peovs_monitor.Tpo -c peovs_monitor.c  -fPIC -DPIC -o .libs/peovs_monitor.o
peovs_monitor.c:32:29: fatal error: libvirt/libvirt.h: No such file or directory
More dependencies.
$ sudo apt-get install kvm libvirt-bin libvirt-dev
And configurations..

$ sudo adduser $USER libvirtd
Further information on libvert can be found here.
Please refer to the INSTALL file in the folder for further information.

2. Building tcpmd5
The build was failing with the below error. I learned that this is due to maven copy-plugin (copy-maven-plugin) not being compatible with later Maven versions. You probably can downgrade your Maven to 3.0 to make it succeed

[INFO] --- copy-maven-plugin:0.2.5:copy (copy-native) @ tcpmd5-jni ---
[WARNING] Error injecting: com.github.goldin.plugins.copy.CopyMojo
java.lang.NoClassDefFoundError: Lorg/sonatype/aether/RepositorySystem;
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(
    at java.lang.Class.getDeclaredFields(
    at org.eclipse.sisu.plexus.PlexusLifecycleManager.onProvision(
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(
    at org.apache.maven.DefaultMaven.doExecute(
    at org.apache.maven.DefaultMaven.execute(
    at org.apache.maven.cli.MavenCli.execute(
    at org.apache.maven.cli.MavenCli.doMain(
    at org.apache.maven.cli.MavenCli.main(
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(
    at java.lang.reflect.Method.invoke(
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.RepositorySystem
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(
    ... 57 more
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] TCP-MD5 parent .................................... SUCCESS [1.076s]
[INFO] tcpmd5-api ........................................ SUCCESS [4.300s]
[INFO] tcpmd5-controller-config .......................... SUCCESS [0.295s]
[INFO] tcpmd5-jni ........................................ FAILURE [4.919s]
[INFO] tcpmd5-netty ...................................... SKIPPED
[INFO] tcpmd5-nio ........................................ SKIPPED
[INFO] TCPMD5 - Karaf Features ........................... SKIPPED
[INFO] tcpmd5-aggregator ................................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.522s
[INFO] Finished at: Wed Oct 08 10:19:48 WEST 2014
[INFO] Final Memory: 59M/504M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.goldin:copy-maven-plugin:0.2.5:copy (copy-native) on project tcpmd5-jni: Execution copy-native of goal com.github.goldin:copy-maven-plugin:0.2.5:copy failed: A required class was missing while executing com.github.goldin:copy-maven-plugin:0.2.5:copy: Lorg/sonatype/aether/RepositorySystem;
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>com.github.goldin:copy-maven-plugin:0.2.5
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/pradeeban/.m2/repository/com/github/goldin/copy-maven-plugin/0.2.5/copy-maven-plugin-0.2.5.jar
[ERROR] urls[1] = file:/home/pradeeban/.m2/repository/com/github/goldin/maven-common/0.2.5/maven-common-0.2.5.jar
[ERROR] urls[2] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[3] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[4] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[5] = file:/home/pradeeban/.m2/repository/org/sonatype/aether/aether-util/1.13.1/aether-util-1.13.1.jar
[ERROR] urls[6] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/file-management/1.2.1/file-management-1.2.1.jar
[ERROR] urls[7] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.jar
[ERROR] urls[8] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar
[ERROR] urls[9] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.jar
[ERROR] urls[10] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-common-artifact-filters/1.4/maven-common-artifact-filters-1.4.jar
[ERROR] urls[11] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus/3.1/plexus-3.1.pom
[ERROR] urls[12] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom
[ERROR] urls[13] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.jar
[ERROR] urls[14] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
[ERROR] urls[15] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-digest/1.1/plexus-digest-1.1.jar
[ERROR] urls[16] = file:/home/pradeeban/.m2/repository/org/codehaus/groovy/groovy-all/1.8.6/groovy-all-1.8.6.jar
[ERROR] urls[17] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/gmaven-mojo/1.4/gmaven-mojo-1.4.jar
[ERROR] urls[18] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/runtime/gmaven-runtime-api/1.4/gmaven-runtime-api-1.4.jar
[ERROR] urls[19] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/feature/gmaven-feature-api/1.4/gmaven-feature-api-1.4.jar
[ERROR] urls[20] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant/1.8.3/ant-1.8.3.jar
[ERROR] urls[21] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-launcher/1.8.3/ant-launcher-1.8.3.jar
[ERROR] urls[22] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-commons-net/1.8.3/ant-commons-net-1.8.3.jar
[ERROR] urls[23] = file:/home/pradeeban/.m2/repository/commons-net/commons-net/1.4.0/commons-net-1.4.0.jar
[ERROR] urls[24] = file:/home/pradeeban/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar
[ERROR] urls[25] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-jsch/1.8.3/ant-jsch-1.8.3.jar
[ERROR] urls[26] = file:/home/pradeeban/.m2/repository/org/codehaus/mojo/versions-maven-plugin/1.3.1/versions-maven-plugin-1.3.1.jar
[ERROR] urls[27] = file:/home/pradeeban/.m2/repository/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.jar
[ERROR] urls[28] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.jar
[ERROR] urls[29] = file:/home/pradeeban/.m2/repository/org/codehaus/woodstox/wstx-asl/3.2.7/wstx-asl-3.2.7.jar
[ERROR] urls[30] = file:/home/pradeeban/.m2/repository/stax/stax-api/1.0.1/stax-api-1.0.1.jar
[ERROR] urls[31] = file:/home/pradeeban/.m2/repository/org/gcontracts/gcontracts-core/1.2.5/gcontracts-core-1.2.5.jar
[ERROR] urls[32] = file:/home/pradeeban/.m2/repository/asm/asm/3.2/asm-3.2.jar
[ERROR] urls[33] = file:/home/pradeeban/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar
[ERROR] urls[34] = file:/home/pradeeban/.m2/repository/com/github/goldin/gcommons/0.5.4/gcommons-0.5.4.jar
[ERROR] urls[35] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar
[ERROR] urls[36] = file:/home/pradeeban/.m2/repository/org/apache/commons/commons-exec/1.1/commons-exec-1.1.jar
[ERROR] urls[37] = file:/home/pradeeban/.m2/repository/de/schlichtherle/truezip/6.8.2/truezip-6.8.2.jar
[ERROR] urls[38] = file:/home/pradeeban/.m2/repository/org/springframework/spring-core/3.1.1.RELEASE/spring-core-3.1.1.RELEASE.jar
[ERROR] urls[39] = file:/home/pradeeban/.m2/repository/org/springframework/spring-asm/3.1.1.RELEASE/spring-asm-3.1.1.RELEASE.jar
[ERROR] urls[40] = file:/home/pradeeban/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
[ERROR] urls[41] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar
[ERROR] urls[42] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.1/sisu-guice-3.1.1.jar
[ERROR] urls[43] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-guava/0.11.1/sisu-guava-0.11.1.jar
[ERROR] urls[44] = file:/home/pradeeban/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar
[ERROR] urls[45] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar
[ERROR] urls[46] = file:/home/pradeeban/.m2/repository/br/com/ingenieux/maven/annomojo/org.jfrog.maven.maven-plugin-anno/1.4.1/org.jfrog.maven.maven-plugin-anno-1.4.1.jar
[ERROR] urls[47] = file:/home/pradeeban/.m2/repository/com/jcraft/jsch/0.1.48/jsch-0.1.48.jar
[ERROR] urls[48] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-dependency-plugin/2.4/maven-dependency-plugin-2.4.jar
[ERROR] urls[49] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar
[ERROR] urls[50] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.0.5/maven-reporting-impl-2.0.5.jar
[ERROR] urls[51] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-core/1.0/doxia-core-1.0.jar
[ERROR] urls[52] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-doxia-tools/1.0.2/maven-doxia-tools-1.0.2.jar
[ERROR] urls[53] = file:/home/pradeeban/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar
[ERROR] urls[54] = file:/home/pradeeban/.m2/repository/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar
[ERROR] urls[55] = file:/home/pradeeban/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar
[ERROR] urls[56] = file:/home/pradeeban/.m2/repository/commons-digester/commons-digester/1.6/commons-digester-1.6.jar
[ERROR] urls[57] = file:/home/pradeeban/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar
[ERROR] urls[58] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0/doxia-sink-api-1.0.jar
[ERROR] urls[59] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-site-renderer/1.0/doxia-site-renderer-1.0.jar
[ERROR] urls[60] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.jar
[ERROR] urls[61] = file:/home/pradeeban/.m2/repository/org/apache/velocity/velocity/1.5/velocity-1.5.jar
[ERROR] urls[62] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-decoration-model/1.0/doxia-decoration-model-1.0.jar
[ERROR] urls[63] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-apt/1.0/doxia-module-apt-1.0.jar
[ERROR] urls[64] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-fml/1.0/doxia-module-fml-1.0.jar
[ERROR] urls[65] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-xdoc/1.0/doxia-module-xdoc-1.0.jar
[ERROR] urls[66] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-xhtml/1.0/doxia-module-xhtml-1.0.jar
[ERROR] urls[67] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-archiver/2.0/plexus-archiver-2.0.jar
[ERROR] urls[68] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-io/2.0.1/plexus-io-2.0.1.jar
[ERROR] urls[69] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-dependency-analyzer/1.2/maven-dependency-analyzer-1.2.jar
[ERROR] urls[70] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-dependency-tree/1.2/maven-dependency-tree-1.2.jar
[ERROR] urls[71] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-invoker/2.0.11/maven-invoker-2.0.11.jar
[ERROR] urls[72] = file:/home/pradeeban/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
[ERROR] urls[73] = file:/home/pradeeban/.m2/repository/junit/junit/4.10/junit-4.10.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.opendaylight.tcpmd5:tcpmd5-jni:1.1.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]
[ERROR] -----------------------------------------------------: org.sonatype.aether.RepositorySystem
[ERROR] -> [Help 1]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn -rf :tcpmd5-jni

For now, I just commented out copy-maven-plugin from tcpmd5/jni/pom.xml, which made the build succeed, skipping the tests.                                   

3. Building defense4all
I was not sure why there is no central pom in defense4all. But I found, I have to build from defense4all/dfapp using maven clean install.

I encountered the below error.
[WARNING] /bin/sh: 1: rpm: not found

I had to install rpm first.
$ sudo apt-get install rpm

This made the build succeed.

4. Building vtn 
The below packages are necessary for a smooth build of vtn.
$ sudo apt-get install pkg-config gcc make g++ git libboost-dev libboost-all-dev libcurl4-openssl-dev \
   libjson0-dev libssl-dev unixodbc-dev xmlstarlet 
Going through the wiki will be helpful as well.

If boost was not installed, the below error would be thrown.
 -- checking for boost/version.hpp... not found

*** ERROR: boost is not found.

*** ERROR: Failed to configure VTN-Core build environment.

Similarly, not installing unixodbc-dev will throw the below error.
conftest.c:2:22: fatal error: odbcinst.h: No such file or directory
compilation terminated.

*** ERROR: Configuration test failed: Compilation failed.

5. Building sdninterfaceapp
There was errors in checkstyle (listed below). Hence I had to build, skipping the checkstyles for now.

$ mvn clean install -Dcheckstyle.skip

The checkstyle errors encountered during the build with checkstyles.

[INFO] --- maven-checkstyle-plugin:2.12:check (default) @ sdniaggregator ---
Downloaded: (1013 B at 1.7 KB/sec)
[INFO] Starting audit...
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:71:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:73:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:74:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:79:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/ Line has trailing spaces.
Audit done.

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] sdniaggregator .................................... FAILURE [8.739s]
[INFO] sdni .............................................. SKIPPED
[INFO] sdninterfaceapp.project ........................... SKIPPED
[INFO] features-sdninterfaceapp .......................... SKIPPED
[INFO] org.opendaylight.sdninterfaceapp .................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.952s
[INFO] Finished at: Wed Oct 08 11:47:29 WEST 2014
[INFO] Final Memory: 27M/349M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.12:check (default) on project sdniaggregator: Failed during checkstyle execution: There are 39 checkstyle errors. -> [Help 1]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]

Tuesday, October 7, 2014

~~ Memories of long travels..

M/S Silja Serenade, returning from Helsinki to Sthlm
Sometimes people amuse me by their linguistic abilities. I remember, during my cruise to Helsinki from Stockholm, the bartender said, "Namaste". He also did not fail to notice that I am not that impressed. But then that happened, "Eppadi Sugam? (means, How are you, in Tamil)," he asked. It is interesting to see some Scandinavian speaking Tamil. He replied himself, "I should reply, 'nallam (means, good, in Tamil)'. right?" Big smile. :D

This time in Shenzhen. Not many people speak English. But then a few shopkeepers in the shopping districts - they were trying to greet me in multiple languages, probably including Hindi, Bengali, and many other regional languages. I was in a shop confirming two phones are identical. The lady replied, "Same phone thaan (means, they are indeed the same phones, in Tamil/English mix)". These people know how to sell the stuff. :D

The trip to Shenzhen was remarkable. It was a long journey, and included a 12h30 mins non-stop flight from Amsterdam to Guangzhou airport. The last time I travelled this long was for the Mentor Summit at Google HQ. It included a 17 hours of flight: Los Angeles <-> Dubai.

This time I was watching 3 - 4 movies each trip (going and return). So when I reached the destination, my eyes were red. I do not recommend watching too many movies on the flight. :D Usually I don't remember the movies I watch while flying, specially because I watch movies from the languages that I don't understand - with English subtitles, of course. However, this time, I was able to remember one movie (Miss Granny, a Korean movie), and find its songs online. I really liked one particular song - you may like it too.

Data Sharing Synchronization System with Infinispan

The below presentation describes part of the data sharing and synchronization system that I developed during the summer. This presentation focuses mostly on the medical data and images, along with the cancer imaging archive (TCIA) as the data source. The latter part of the summer was spent, extending the tool for the other data sources, such as Amazon S3, CA Microscope, or even meta data stored in a CSV file.

Building Open Daylight SDN Controller from Source on Ubuntu 14.04

As of the early research efforts on xSDN, an (extensible/extended/extensive/..) Software-Defined Networking (SDN) solution, I have been revising the literature on SDN while building and testing the related core technologies. 

Open Daylight is an open source consortium of projects lead by the Linux Foundation. Recently, Linux Foundation also announced OPNFV, an open platform to accelerate NFV (Network Functions Virtualization). These technologies are open and are considered to have the potential to change the future of networking.

There is a list of projects under Open Daylight. You may check out some or all of these projects. To build the projects from the source code (trunk), first you should check out the code, and install the controller. Each of the components can then be installed following the respective README files inside the respective modules. 

The build was successful with Oracle jdk1.7.0_55 and Apache Maven 3.1.1, with the tests
$ mvn clean install

The controller build failed, with tests for the java version, Oracle jdk1.8.0. The error logs are given below.

[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.895s
[INFO] Finished at: Tue Oct 07 14:24:21 WEST 2014
[INFO] Final Memory: 136M/362M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project sal: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command was/bin/sh -c cd /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api && /home/pradeeban/programs/jdk1.8.0/jre/bin/java -Xmx1024m -XX:MaxPermSize=256m -javaagent:/home/pradeeban/.m2/repository/org/jacoco/org.jacoco.agent/ -jar /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefirebooter4105410834640395132.jar /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefire2666028028053803617tmp /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefire_02245232938517059667tmp
[ERROR] -> [Help 1]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn -rf :sal

Also, the code still failed even after skipping the tests (
mvn clean install -DskipTests). The error logs are given below.

[ERROR] Failed to execute goal org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs (default) on project connectionmanager.northbound: Execution default of goal org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs failed: A required class was missing while executing org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs: com/sun/mirror/apt/AnnotationProcessorFactory
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.codehaus.enunciate:maven-enunciate-plugin:1.28
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/maven-enunciate-plugin/1.28/maven-enunciate-plugin-1.28.jar
[ERROR] urls[1] = file:/home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/sal-0.9.0-SNAPSHOT.jar
[ERROR] urls[2] = file:/home/pradeeban/.m2/repository/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
[ERROR] urls[3] = file:/home/pradeeban/.m2/repository/org/apache/felix/org.apache.felix.dependencymanager/3.1.0/org.apache.felix.dependencymanager-3.1.0.jar
[ERROR] urls[4] = file:/home/pradeeban/.m2/repository/org/osgi/org.osgi.compendium/4.2.0/org.osgi.compendium-4.2.0.jar
[ERROR] urls[5] = file:/home/pradeeban/.m2/repository/org/osgi/org.osgi.core/5.0.0/org.osgi.core-5.0.0.jar
[ERROR] urls[6] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jar
[ERROR] urls[7] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-swagger/1.28/enunciate-swagger-1.28.jar
[ERROR] urls[8] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.3/jackson-mapper-asl-1.9.3.jar
[ERROR] urls[9] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.3/jackson-core-asl-1.9.3.jar
[ERROR] urls[10] = file:/home/pradeeban/OpenDayLight/controller/opendaylight/commons/logback_settings/target/commons.logback_settings-0.1.0-SNAPSHOT.jar
[ERROR] urls[11] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/maven-enunciate-slim-plugin/1.28/maven-enunciate-slim-plugin-1.28.jar
[ERROR] urls[12] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.jar
[ERROR] urls[13] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar
[ERROR] urls[14] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.jar
[ERROR] urls[15] = file:/home/pradeeban/.m2/repository/org/apache/maven/enforcer/enforcer-api/1.0/enforcer-api-1.0.jar
[ERROR] urls[16] = file:/home/pradeeban/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[17] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar
[ERROR] urls[18] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.jar
[ERROR] urls[19] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.jar
[ERROR] urls[20] = file:/home/pradeeban/.m2/repository/commons-cli/commons-cli/1.0/commons-cli-1.0.jar
[ERROR] urls[21] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar
[ERROR] urls[22] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.12/plexus-interpolation-1.12.jar
[ERROR] urls[23] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.jar
[ERROR] urls[24] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
[ERROR] urls[25] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core/1.28/enunciate-core-1.28.jar
[ERROR] urls[26] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core-rt/1.28/enunciate-core-rt-1.28.jar
[ERROR] urls[27] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core-annotations/1.28/enunciate-core-annotations-1.28.jar
[ERROR] urls[28] = file:/home/pradeeban/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar
[ERROR] urls[29] = file:/home/pradeeban/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar
[ERROR] urls[30] = file:/home/pradeeban/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar
[ERROR] urls[31] = file:/home/pradeeban/.m2/repository/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar
[ERROR] urls[32] = file:/home/pradeeban/.m2/repository/net/sf/apt-jelly/apt-jelly-freemarker/2.15/apt-jelly-freemarker-2.15.jar
[ERROR] urls[33] = file:/home/pradeeban/.m2/repository/net/sf/apt-jelly/apt-jelly-core/2.15/apt-jelly-core-2.15.jar
[ERROR] urls[34] = file:/home/pradeeban/.m2/repository/commons-digester/commons-digester/2.1/commons-digester-2.1.jar
[ERROR] urls[35] = file:/home/pradeeban/.m2/repository/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar
[ERROR] urls[36] = file:/home/pradeeban/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
[ERROR] urls[37] = file:/home/pradeeban/programs/jdk1.8.0/jre/../lib/tools.jar
[ERROR] urls[38] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-top/1.28/enunciate-top-1.28.jar
[ERROR] urls[39] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jaxws-support/1.28/enunciate-jaxws-support-1.28.jar
[ERROR] urls[40] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jaxws-ri/1.28/enunciate-jaxws-ri-1.28.jar
[ERROR] urls[41] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-docs/1.28/enunciate-docs-1.28.jar
[ERROR] urls[42] = file:/home/pradeeban/.m2/repository/org/jdom/jdom/1.1.2/jdom-1.1.2.jar
[ERROR] urls[43] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jersey/1.28/enunciate-jersey-1.28.jar
[ERROR] urls[44] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jersey-rt/1.28/enunciate-jersey-rt-1.28.jar
[ERROR] urls[45] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.3/jackson-jaxrs-1.9.3.jar
[ERROR] urls[46] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.3/jackson-xc-1.9.3.jar
[ERROR] urls[47] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-server/1.11/jersey-server-1.11.jar
[ERROR] urls[48] = file:/home/pradeeban/.m2/repository/asm/asm/3.1/asm-3.1.jar
[ERROR] urls[49] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-core/1.11/jersey-core-1.11.jar
[ERROR] urls[50] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-servlet/1.11/jersey-servlet-1.11.jar
[ERROR] urls[51] = file:/home/pradeeban/.m2/repository/javax/mail/mail/1.4.4/mail-1.4.4.jar
[ERROR] urls[52] = file:/home/pradeeban/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar
[ERROR] urls[53] = file:/home/pradeeban/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.3/jaxb-impl-2.2.3.jar
[ERROR] urls[54] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-xml/1.28/enunciate-xml-1.28.jar
[ERROR] urls[55] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-java-client/1.28/enunciate-java-client-1.28.jar
[ERROR] urls[56] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-c/1.28/enunciate-c-1.28.jar
[ERROR] urls[57] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-obj-c/1.28/enunciate-obj-c-1.28.jar
[ERROR] urls[58] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-csharp/1.28/enunciate-csharp-1.28.jar
[ERROR] urls[59] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-ruby/1.28/enunciate-ruby-1.28.jar
[ERROR] urls[60] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-php/1.28/enunciate-php-1.28.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.opendaylight.controller:forwarding.staticrouting:0.6.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]
[ERROR] -----------------------------------------------------: com.sun.mirror.apt.AnnotationProcessorFactory
[ERROR] -> [Help 1]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn
-rf :connectionmanager.northbound

I changed to version 1.7.x. The build started to progress further, and eventually it hanged due to the memory limitation. Ctrl + C produced the below error.

^C^CJava HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated
I had to kill the process manually, using kill -9 .

After increasing the memory allocation to maven, the build succeeded, even with the tests!
MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=1024m"