Friday, October 20, 2017

How to end up in everyone's spam folder

Many companies are apparently under the belief that they may purchase email addresses in bulk from those who cultivate a lot of addresses to resell (this may include your electricity company or insurance company). This is how I am signed up into weird mailing list without my consent. I have to each time manually sign out of each of these weird marketing lists. Every time I unsubscribe from these spam, I make sure to report it as Spam in Gmail filters. The Gmail God will eventually make sure to send email from these senders directly to spam folder, if everyone follows what I do. Please, if I want, I will subscribe myself to your email list. It was never helpful that you do this on behalf of me, without even asking me. 

Worse, many of these spammers do not even have an easy option to unsubscribe. The ideal example is Roomster. A scam room-sharing company which creates fake profiles with beautiful profile pictures, and then send you an email asking to share the room with you. The girl who wants to share her room with you may not even live in your continent. To reply (and in some cases, even to view) these messages, you need to pay some money (as high as 3 - 5$) or go for an even higher monthly subscription. Funny part is, if you want to unsubscribe from the mailing list of this scam company Roomster, first you need to log in to your Facebook and open your Roomster account (it will auto-create if it does not exist yet), to unsubscribe from the emails or to delete your account. It was so complex that I did not unsubscribe for a few months despite loothing this scam/spam web site. 

Remember kids, there are many reports that once they get hold of your credit card, they will charge you for 3 months or so, without you even asking. Stay away from Roomster. Thank me later.

Tuesday, September 26, 2017

Elegance of a full stop

So I am back to Louvain-la-Neuve once more. Ever since I left Belgium on the 22nd of August, I kept returning. First, on my way back home (Lisboa) from Munich, I had a transit in Brussels. I had some administrative things to do in Louvain-la-Neuve. I was contemplating whether I should just skip the second half of the trip and come to Louvain-la-Neuve from Brussels airport. However, since I had lots of luggage, I decided to continue the journey to Lisboa. Then I came to Brussels for the third time in a last minute flight that would cost me a lot. I thought I had finished my tasks, and returned in an equally expensive flight. However, I was wrong. I still had many more things left to do. I came back to Brussels the forth time! This time, it is colder - and it is autumn here now. Unlike in winter, the heater is still not on yet. Freezing in the apartment in the early morning. Autumn make you feel the end of life. I prefer a stable temperature - first summer, then stable winters with proper heating inside. Springs give hope - so I can accept them too!

This is not winter here yet. However, the temperature here now reaches the winter temperature of Lisboa. Also the feels-like temperature varies a lot too. In my lab, it feels colder than it is outside. I am not even sure how is it even possible.

Monday, September 18, 2017

Receiving the Books that I Reviewed!

This year has become the year that I have traveled most. Probably this will remain to be the year with most number of travels for quite some time for me. Sometimes it gets a bit too much with too many flights. Not to mention how expensive a flight can get when it is a last minute flight. All my one-way flights cost me almost 200 Euro (FAO/Faro/Portugal -> CRL/Chareloi/Belgium and BRU/Brussels/Belgium -> LIS/Lisboa/Portugal). My favorites are border crossings by land. Had one more chance to cross into the south of the Netherlands from Belgium. It was amazing.

Finally, returned to Portugal once more from Belgium. By this time, I also received my reviewer copies for the 2 books that I reviewed recently. These books discuss OpenDaylight. The last year of my PhD is going so eventful.

Belgium Almost Autumn

I had to go to Belgium once more from Lisboa to sign the contracts, since my EMJD-DC funding comes to an end. It was already getting colder compared to Lisboa. Summer is officially over for Belgium!

I also received the hard-copies of my recently published book, "Python Network Programming Cookbook - Second Edition", during my short time in Lisboa.

Friday, September 1, 2017

On-Demand Service-Based Big Data Integration: Optimized for Research Collaboration

Today I presented my paper "Obidos" at the VLDB DMAH workshop in Munich. The abstract and the presentation of the paper are given below:

Abstract: Biomedical research requires distributed access, analysis, and sharing of data from various disperse sources in the Internet scale. Due to the volume and variety of big data, materialized data integration is often infeasible or too expensive including the costs of bandwidth, storage, maintenance, and management. Óbidos (On-demand Big Data Integration, Distribution, and Orchestration System) provides a novel on-demand integration approach for heterogeneous distributed data. Instead of integrating data from the data sources to build a complete data warehouse as the initial step, Óbidos employs a hybrid approach of virtual and materialized data integrations. By allocating unique identifiers as pointers to virtually integrated data sets, Óbidos supports efficient data sharing among data consumers. We design Óbidos as a generic service-based data integration system, and implement and evaluate a prototype for multimodal medical data.

Please find the full text of the paper here and the presentation below:
I mostly worked on this paper while I was doing my internship at Emory University. This is also my first paper to get accepted from UCLouvain/Belgium. In this presentation, I have also included "A tale of Ana, Abdul, Viktoria, Pereira, Chen, and Raj", a subtle message I wanted to include in my presentation for quite some time.

Thursday, August 31, 2017

Tales of Currency Conversion - Czech Version

So I was in the Prague train station to get a ticket to Munich. I asked whether I can pay by Euro. The lady said, yes. Then she asked cash or card. I opted for card. Then it turned out, the card indeed asks to pay in the Czech Krones (CZK), where my bank will do the conversion. Of course, I am going to lose money in this. Euro is my currency. I have Euro in cash. Why would I need to do this double conversion - pay in CZK using my card where my bank will do the conversion? But the lady said, she has already input the card as the payment option and she was reluctant to change it now. I should have pretended that the card was not working. Then she would have no option other than accepting my Euro as cash.

Now, I have the total information from how much this cost me extra from the bank statements. Let's look into this:
I had the option to pay by 1495 CZK or 56.20 Euro by cash. Because of my stupidity to opt for card (and because of the lady's reluctance to change the payment mode - which should be just a "cancel"), I paid 1495 CZK by my bank card. My bank, as usual, gave a bad conversion rate and charged me 57.40 Euro for this. My bank charged me a conversion fee of total (0.02 + 0.57 + 0.04 + 0.98 =) 1.61 Euro. So in total, I lost (57.40 - 56.20) + 1.61 = 2.81 Euro. This is 2.81 / 56.20 = 0.05 = exactly 5% loss. That means, I lose 5 Euro per transaction of 100 Euro in CZK. Next time kids, pay more attention, and don't let a railway station counter clerk make decision for you just because she is too lazy to change the payment option! Better yet, choose the option wisely than complaining later. :P

Interestingly, the bus cost 50 Euro. So totally, the train cost 6.20 more (and counting my loss of 2.81 Euro, it cost me 9.01 Euro more).

In Romania, the situation was better. Their card readers had the option to choose Euro as the payment option at most of the places. Prague was a beautiful place though the people were not friendly at all.

Interestingly, in the train to Munich from Prague, I was able to pay in both CZK and Euro (for a cup of coffee on-board) as long as the train was in Czech. Once it crossed the border to Germany, CZK suddenly became unacceptable. :) Not complaining on this - I can actually understand that Euro is a preferred currency in foreign countries; but this is not something that works in a reciprocal manner. Economics 101. :) Eventually, I ended up with some CZK, which are going to be with me for a really really long time.

Friday, August 25, 2017

Lisboa Taxi Scam - This time in MyTaxi

Usually, the taxi drivers we encountered with MyTaxi app are nicer and friendlier in Lisboa, compared to the ones we hail from the streets. This time was an exception. We got Joao Santana. He seemed to be a nice guy. He loved India and Asia in general. That's what he claimed, at least. He is in his late 50s, and he claimed he was a manager. He appeared to be a nice and knowledgeable. He mentioned how his company let him go as he was too old, over-qualified, and it was expensive to keep him. He mentioned, he used to think money is everything - he said, "I was a savage capitalist". He also said, his dad instructed him to take decisions soon. "Never stall. Take decisions. Bad decision is better than no decision"

We had 5 luggage, and we opted for his large taxi since we need space for the luggage. Being the multi-seater taxi, it is supposed to be a bit more expensive - that we are aware of. The Taxi Meter displayed 10.05 Euro by the end of the journey. Combining 1.6 Euro for the luggage, a flat fee, it should be 12 Euro, as reported by the MyTaxi app as what was paid. Please note this was not a trip to/from the airport.

He counted the luggage, and charged us 16 Euro. He asked us whether we need a receipt. I said, it is not necessary (I was blinded by the assumption that he is an educated gentleman who used to be a manager). However, only after a few minutes since I reached home, I realized he scammed us in a beautiful way. The app reported we paid only 12 Euro including tips by cash, where we indeed paid 16 Euro. In Lisboa, the luggage fee is 1.60 Euro flat, and does not change based on the number of passengers or number of bags.

Mr. Joao Santana, you have scammed us in a beautiful way, with nice talks and sharing your wisdom. It is sad that I encountered someone so nice as Joao Santana who also happens to be a scammer. But he also has taught us an important lesson - we should be careful with those who talk too nice. Specially the taxi drivers and vendors. If a taxi driver is too nice to you, of course, they are not going to give you a discount. They might just cheat you while you least expect it.

I have given this scammer a 1* rating, and have reported him to MyTaxi. Let's wait for their reply. 4 Euro is not a big loss considering the lesson learned. Still I am just a poor student to lose money to scammers. I am sure a taxi driver such as Joao Santana is richer than me.

Regardless of the scam, it is nice to be back in Lisboa in the summer! The 4th year - the final year -  of my PhD has just begun!


Update on the 30th August from MyTaxi:
Dear Pradeeban,
We appreciate your preference and your contact.
The baggage supplement of 1,60€, refers to the amount, established by the taxi sector, for baggage transport, that requires the use of the luggage compartment or the vehicle’s roof railing.
There are some exceptions: volumes that not exceeding 55×35×20, wheelchairs or other means of movement of persons with reduced mobility, as well as trolleys and accessories for transporting children, if they are passengers too.
The call supplement of 0,80€, refers to the amount, established by the taxi sector, for journeys to the customer’s location. So, when you call a taxi, the driver must charge this amount.
So the supplements were 2,40€. We had the opportunity to talk with your driver and he told us that the trip cost was actually 12€, but you gave him a good tip, that, when it’s paid with cash, doesn’t appear in the resume.
If you need any further assistance or clarification, please do not hesitate to contact us.
With our best regards,

 I have replied as below and waiting for their reply again now:
Thanks for getting to this.
The driver said, the taxi costs 16 Euro. I am a poor student living in a grant, and I have no way of giving him 4 Euros as a tip of 12 Euro. :)
I paid without double-checking the application amount. He deceived us, using this as an opportunity.

It is sad that such drivers exist in MyTaxi.



I am happy at least he acknowledged that we indeed paid him 4 Euros extra. However, it was not a tip. Tip is when we pay on our own. Not when a taxi driver randomly increases the fare and inform you the increased amount. I am sure Joao Santana is using his inter-personal skills in cheating people off in taxis.


Update: I have received 5 Euro worth of MyTaxi credits as a compensation for my loss (of 4 Euros to this cheater). I can use them for my next journey when I pay by app using card or paypal. I am happy that this issue is resolved well. Next time, I will be more careful when I pay the taxi driver by cash. I will make sure to pay only the money that is reported by the app. Not a random amount requested by the driver.

Update on the 23rd of September: The MyTaxi credits of 5 Euro has expired today. I of course knew it would expire within a month. MyTaxi was so evil of giving me a credit that expires within a month (30 days). :P I did not have to take a taxi that soon. Having said that, I am a bit satisfied that I indeed reported that scammer. Now, time to stop using this stupid MyTaxi Application unless necessary.

Friday, August 18, 2017

Tales of Currency Conversion.

Enjoying my dinner at a restaurant in Rocky Point, Mexico.
Each travel teaches us something new. When I live long enough in a country, I get used to the environment and life style, and start to feel the pattern. A travel to a foreign country makes us question our own assumptions. Till last year, I was not aware that currency conversion can be complicated. Interestingly, I learned that during my trip back to my home country. When I queried how much would they give me for 1 Euro, the guy at the reception of Prasanna Money Exchange in Wellawatte mentioned 157 Rupees. I said, "ok, I have 400 Euro". He said that is fine. When I showed him 20, 20 Euro notes, he changed his word "No, I can only give 155 Rupees". I could not understand. He said, 157 Euro for 100 and 50 Euro notes. For the notes below (such as 20 and 10 Euro notes), he can only give 155 Rupees per 1 Euro". I did not understand. He did not like my questioning, and stopped serving me. So I decided to go to the nearest money exchange, "Royal Money Exchangers". 

They also said, "157 Rupees for 1 Euro". I asked, "Is it the same for 20 Euro notes?" The cashier mentioned, "No, it would be a bit lesser". I asked how much that would be. He checked and told me "156.50 Rupees". I accepted that offer. So I recommend, Royal Money Exchangers. They give more value, and more polite, compared to Prasanna.

Another interesting observation. While I was waiting in the queue, a western couple jumped the queue, with their local host. I told to my mom (in English), "When westerners come to our country, they also learn to jump the queues". Embarrassed to hear what I said, the gentleman from the western country looked back and said "oops, sorry. I did not notice you were here", and he moved backwards to follow the queue. We, humans, are the best adaptive systems in the world.

When I told my Serbian friend how I was charged more at Mexico when paid in USD, she reminded me, "You should just have paid using your bank card. Usually the card machines charge in the local currency". It just did not come to my mind. All I was thinking - it was unnecessary to convert some USD to Mexican Peso.

Update on 18/08/2017:
 After ending up with around 300 Romanian Lei after my visit to Romania, I have this essential question. How effectively convert money to the local currency, and how to spend them all! Using debit/credit card may not work for multiple reasons. First, the bank does not give you the best coversion rate. It is more economic to convert in local converters. Second, not all the places accept the card. So you still need the cash. I used to convert the remaining currency back to Euro at the airport. However, I ended up losing more money as buying and selling rates are different, and airports and Travelex give the worst of the coversion rate. For example, we got 4.45 RON for a Euro in Romania (Timisoara city center), where Travelex gave only around 3.9 RON for a Euro, even after we booked online! They all claim 0 commission, despite this joke of a conversion. I keep the remaining change with me in the hope of returning to the country in a latter day. It worked for countries that I visit frequently, such as USA and Sweden. But not sure whether it will work for Romania, as it is not a country that I am going to visit multiple times. Let's see. We do not know what might bring me back to Romania.

Balkans in the summer, once more!

Finally, this summer, I managed to take one country off my top-20 list to visit. :) It is Romania. I was selected to EMDC and DMKM for my masters (that started 5 years ago in 2012 August Falls semester). DMKM (data mining and knowledge management) Erasmus Mundus masters had a mobility of Lyon, France -> Bucharest, Romania. Eventually, I chose EMDC and I am very happy about my decision. However, ever since, I had the desire to visit Romania. I made it a reality after 5 years. In the mean time, I had also become a huge fan of Romanian music. So it was an exciting trip. Summer in Timisoara was great!

This is also my second time to visit Balkans. I visited Croatia, Serbia, and Slovenia in 2015 while I did my short-term scientific mission as part of my PhD (EMJD-DC) in the summer. It was nice to be back to the Eastern Europe, once again in the sunny summer!

Crossing the borders

I like border crossings by land. The way a country changes into another, gradually, is enticing. This time, I had one more chance for a Balkan to Schengen area border crossing after 2 years, once more in the summer. This time crossing from Timisoara, Romania to Szeged, Hungary. Since we bought the bus tickets on-board (Flixbus), it was more expensive than buying online. It costs 129 Lei per person, each way. Online, it was 15.90 euro (73 Lei). Unfortunately, the online payment system was failing for both cards and paypal (an obvious temporary issue with their system). This is almost the double.  Szeged is a beautiful city. So it was worth the visit.

Make sure you have the passport and visa to the destination country before you board the bus. You need a visa to return to the country of origin, if you plan to return to the country (same as if you would use a flight). If you do not have the valid identity document (usually passport, and it is the safest option) or visa, you need to return to the country of origin. Since the borders are in a weird remote locations, it will be tough for you to return. You may either need to hichhike into vehicles or walk a long distance to find the nearest town. I do not want to try this. Be well prepared, specially if you are coming from a third country that requires you a visa for both the countries that are you traveling between.

Good luck with your border crossings.

Thursday, August 10, 2017

Building and Running Emory Bindaas on Ubuntu 16.04 LTS

Bindaas is a data services middleware platform built utilizing the componentized architecture of OSGi. Bindaas binary could be downloaded or built from source. To test Bindaas quickly, download the binary and extract it.

Given below is a detailed transcript of what is executed in the above screencast on checking out, building, running, and developing Bindaas with Git, Maven, and IntelliJ IDEA.

Skip the step 1 below and go directly to step 2 if you do not have access to the source code of Bindaas. If you have access to the source code of Bindaas, follow step 1, followed by step 2.

Step 1: Building Emory Bindaas
Alternatively, you may choose to build Bindaas from source. I would recommend using the maven-restructure branch (or maven-restructure-dev branch, if you would like to be in the bleeding edge, though most branches are periodically synced) for that, as it consists of fixes and enhancements to Maven integration. Hence this branch enables easy integration with multiple IDEs such as IntelliJ IDEA, Eclipse, and all the Java IDEs that have Maven integration, where currently master branch supports only Eclipse IDE.
Create Project in Bindaas

Bindaas has been tested with Oracle Java 1.8.x.

Clone the source code.
$ git clone

$ cd bindaas

$ git checkout dev

$ mvn clean install

$ cd dist

Step 2: Running Emory Bindaas
Change to the bin directory of Bindaas distribution (either that is downloaded as binary, or that is built from the source following step 1),
$ cd bin

You may run Bindaas using one of the 3 options below:

Option 1
$ ./

This starts Bindaas using nohup. Logs could be found at log/bindaas.log. You may stop the program later by running the script.

Option 2
If you rather like to have the logs in the foreground in the terminal itself, instead of using the start up script, you may run the java command directly.

$  java -Dpid=BINDAAS_INSTANCE -Xmx1024m -jar org.eclipse.osgi_3.8.2.v20130124-134944.jar

Option 3
Alternatively, start with -console flag to have OSGi console:
$  java -Dpid=BINDAAS_INSTANCE -Xmx1024m -jar org.eclipse.osgi_3.8.2.v20130124-134944.jar -console

Now you have started Bindaas using one of the above 3 options, you may connect to the dashboard at http://localhost:8080/dashboard/ using the user name and password, "admin", "password".

Make sure to have the trailing "/" at the end of URL as shown above.

Once you have created a project using the "Create Project" command, you may define the data providers for the project at http://localhost:8080/dashboard/workspace/{project_name}

You may choose a database such as a mysql or Mongodb databases, or use an HTTP provider.

Once the data provider is defined, queries could be created from the respective listing page of the data provider, 

The query could be a simple sql query such as,
select * from states 
"Try Me" on a simple mysql data provider.

Created queries could be viewed from http://localhost:8080/dashboard/{project_name}/{data_provider_name}/query/{query_name} 

"Try Me" option could be used to view the outputs of the query.

This is a very simple post on starting to use Bindaas. You may read further on creating a new data service using Bindaas here, or go through the wiki pages.

Developing Bindaas
First you need to download the entire source tree and build using Maven as in step 1. You may develop using any Java IDE that has Maven integration, including IntelliJ IDEA and Eclipse. I highly recommend IntelliJ IDEA. Just open the pom.xml of the root directory of bindaas source cloned from git to open the entire source hierarchy.

Happy coding!
P.S: The above build was tested with Maven 3.5.0 and Oracle Java version "1.8.0_121".

$ mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T21:39:06+02:00)
Maven home: /home/pradeeban/programs/apache-maven-3.5.0
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /home/pradeeban/programs/jdk1.8.0_121/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.8.0-58-generic", arch: "amd64", family: "unix"

$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Starting Bindaas with Option 3 above is most preferred for development and debugging purposes, as you can debug into the OSGi console. For example, you may list the installed feature using the below command.
"Framework is launched."

id    State       Bundle
0    ACTIVE      org.eclipse.osgi_3.8.2.v20130124-134944
2    ACTIVE      org.eclipse.equinox.console_1.0.100.v20121001-124408
3    ACTIVE      org.apache.felix.gogo.shell_0.10.0.v201211091412
4    ACTIVE      org.apache.felix.gogo.runtime_0.10.0.v201209301036
5    ACTIVE      org.apache.felix.gogo.command_0.10.0.v201209301215
6    ACTIVE      org.apache.felix.configadmin_1.6.0
7    ACTIVE      org.springframework.osgi.log4j.osgi_1.2.15.SNAPSHOT
8    ACTIVE      org.apache.felix.eventadmin_1.3.2
9    ACTIVE      org.apache.felix.fileinstall_3.2.6
11    ACTIVE      org.springframework.core_3.2.2.RELEASE
10    ACTIVE      http-datasource-provider_1.0.0
12    ACTIVE      org.apache.felix.http.jetty_2.2.0
13    ACTIVE      postgres-datasource-provider_1.0.1
14    ACTIVE      bindaas-trusted-application-manager_1.0.0
15    ACTIVE      org.eclipse.gemini.blueprint.core_1.0.2.RELEASE
16    ACTIVE      bindaas-security-api_1.0.0
17    ACTIVE      org.eclipse.orbit.mongodb_2.7.3.v20120213-1927
19    ACTIVE      org.apache.felix.http.whiteboard_2.2.0
20    ACTIVE
21    ACTIVE      org.springframework.aop_3.2.2.RELEASE
22    ACTIVE      org.springframework.beans_3.2.2.RELEASE
23    ACTIVE      org.eclipse.gemini.blueprint.extender_1.0.2.RELEASE
24    ACTIVE      org.springframework.context.support_3.2.2.RELEASE
25    ACTIVE      db2jcc4-9.7_0.0.0
26    ACTIVE
27    ACTIVE      org.eclipse.gemini.blueprint.io_1.0.2.RELEASE
28    ACTIVE
29    ACTIVE      org.springframework.expression_3.2.2.RELEASE
30    ACTIVE      org.springframework.context_3.2.2.RELEASE
18    ACTIVE      bindaas-commons-cxf-wrapper_1.0.0
31    ACTIVE      mysql-datasource-provider_1.0.1
32    ACTIVE      mongodb-datasource-provider_1.0.0
33    ACTIVE      security-dashboard_1.0.0
34    ACTIVE      bindaas-commons-openid-helper_1.0.0
35    ACTIVE      bindaas-commons-mail_1.0.0
36    ACTIVE      bindaas-psuedo-sts_1.0.0
37    ACTIVE      ldap-bindaas-authentication-provider_1.0.0
38    ACTIVE      bindaas-web-console_1.0.0
39    ACTIVE      drill-datasource-provider_1.0.1
40    ACTIVE      db2-datasource-provider_1.0.0
41    ACTIVE      bindaas-commons-h2-hibernate_1.0.0
42    ACTIVE      bindaas-core-api_1.0.0
43    ACTIVE      bindaas-core-impl_1.0.0
44    ACTIVE      bindaas-version-manager_1.0.0
45    ACTIVE      generic-sql-datasource-provider_1.0.0
46    RESOLVED    log4j.config_1.0.0

Note: The screencasts may be outdated as they were taken a few months ago. In case of mismatch between the screencast and the script/text in this blog post, follow the text.

Sunday, August 6, 2017

Summer in Belgium

After completing the deadline of a paper that I was working on, and submitting the final reviews to Python Network Programming Cookbook - Second Edition, I finally had some time to enjoy the last few moments of summer in Belgium. Paid a visit to Ghent, Bruges, and Ostende. The Atlantic ocean was pleasantly warm, at least warmer than outside. Felt good.

Saturday, July 1, 2017

Nobody puts Baby in a corner

KAU Library with the Quote
I found it refreshing that Karlstad University (KAU) spent a considerable amount of money to create an artwork, citing the popular quote, "Nobody puts Baby in a corner" from the movie, Dirty Dancing (1987). You may read the story behind why Karlstad University choose to spend 170,000 SEK on this artwork, which I consider romantic. Interestingly, KAU considers this phrase empowering the women.

We also attended Putte i Parken, a free musical show in Karlstad, coupled with free public transport to the venue. What is better? We even secured the first line for many of the performances. :)

ACRO summer school and KAU gave very good memories. It is probably the best of conference/meetup/summer school travel I have so far. Previously I had ICWS 2016 as my favorite. This is my first time attending a summer school. Summer school feels more relaxed than a conference where I also have a paper to present. Moreover, I met many wonderful people, and made very nice friends this time. Sweden is awesome. I have been to Sweden in 2013, 2015, and 2017. I have also been to Spain in 2013, 2015, and 2017 too. Following this pattern, I believe I will be back to Sweden and Spain again in 2019. :P

My first polygonal journey

Beautiful view of Oslo
Next time when you plan to fly somewhere for a trip, check whether you can get it cheaper by returning from a different airport. I found that this time that by choosing to go to  BRU -> OSL and then return from ARN -> BRU, I got the cheapest of all the possible options (compared with the return trips, BRU <-> OSL and BRU <-> ARN). It also worked well as my destination Karlstad was in between Oslo and Stockholm (on the way to Stockholm from Oslo). 

I presented my work at ACRO Summer School held at Karstad University. The presentation is given below:

Thursday, June 29, 2017

HP and Windows - A Jealous Affair

I bought my HP laptop 3.5 years ago. It came pre-installed with Windows 8. As a primary Linux user, I installed Ubuntu with a intention of dual-booting with using Ubuntu primarily. However, HP always showed only Windows in the bootup, and by default it goes into Windows - never letting me sign in. Boot-repair-disk helped me fix this issue. Nevertheless, every time Windows upgraded, it broke the fix, and made the computer go into Windows by default. I tried to stop Windows upgrade after fixing this several times using Boot-repair-disk, as I got fed up with this. However, Windows upgrade worked on its own for "critical system/security updates". I was unable to turn these off. Guess what? These automated updates broke my boot as usual, leaving Windows the only option. 

It was not even possible to change the boot to Ubuntu, or to bring the menu at start up. By that time, I got to know that this was a bug (or a feature?) from HP that Windows was hard-coded. I also did not have this issue in my other new laptop. Why I did not completely uninstall Windows? Sometimes I need it: printer, a few wifi configurations, and some docx, pptx files sent by others - these are the reasons behind my occasional usage of Windows. But every time I go to WIndows, it breaks my grub, leaving it as the only option to log in to.

By this time, Boot-repair-disk stopped working. However, I have an earlier version stored in my pen drive, which luckily works well. So I assume that a later "fix" in Boot-repair-disk broke it. Even efibootmgr did not work as expected. All I was able to do was to change the option for the next boot. Not forever! Eventually, I had to follow this work-around to get this running.

First, find your current status:
$ sudo efibootmgr
[sudo] password for pradeeban:
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0003,3003,0000,0002,0004,2001,2002,2003
Boot0000* rEFInd Boot Manager
Boot0002* ubuntu
Boot0003* Windows Boot Manager
Boot0004* ubuntu
Boot0005* EFI USB Device (General UDisk)
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)
Boot3000* Internal Hard Disk or Solid State Disk
Boot3001* Internal Hard Disk or Solid State Disk
Boot3003* Internal Hard Disk or Solid State Disk

Now, ideally you should be able to do the below:
$ sudo efibootmgr -o 0002,0004,3003,0000,2001,2002,0003
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0002,0004,3003,0000,2001,2002,0003
Boot0000* rEFInd Boot Manager
Boot0002* ubuntu
Boot0003* Windows Boot Manager
Boot0004* ubuntu
Boot0005* EFI USB Device (General UDisk)
Boot2001* USB Drive (UEFI)
Boot2002* Internal CD/DVD ROM Drive (UEFI)
Boot3000* Internal Hard Disk or Solid State Disk
Boot3001* Internal Hard Disk or Solid State Disk
Boot3003* Internal Hard Disk or Solid State Disk

But, unfortunately, it was not working as expected. Rather, I had to follow a work-around of changing the boot order just for the next boot:
$ sudo efibootmgr -n 0002

Now add this below line to /etc/rc.local to repeat this same action every time Ubuntu loads:
sudo efibootmgr -n 0002

After this work-around, the grub loads successfully, and I can choose Ubuntu (among the many other options) easily as before. I did not log in to Windows after this fix. I am sure Windows will find a way to easily break this work-around once I log in to it.

Currently this work around makes sure that every time I log in to Ubuntu, Ubuntu sets the next boot to be Ubuntu/grub option. However, if I log in using the Windows entry in the grub, this bit won't be set. So the next time, it will log in to Windows directly, and thus breaking this cycle. However, when that happens, I just need to use Esc -> F9 sequence to just log in to Ubuntu once. After that, Ubuntu will be back as long as I keep using only it. In other words, Ubuntu boot will be fine as long as I do not log in to Windows.

You do not see Ubuntu upgrades breaking my Windows boot. Windows is such a jealous affair.

Saturday, June 3, 2017

When a search giant abandons your country

Google "sri lanka news"
I am not sure what is going wrong. Is my country, Sri Lanka, just cricket, or is it something wrong with Google? When the entire country is suffering due to floods and land slides leaving up to 1/20 of the country's population affected, Google search on "Sri Lanka news" just returns news on Sri Lanka cricket.

I am not sure whether this is done systematically through some hidden involvement. It annoys me a lot. Are we really addicted to Cricket that much? Seriously? We have bigger problems and more important news at the moment. How can I trust the Internet, when the most popular search engine returns irrelevant news?

Please note that I used the private mode. So my results are not affected by my past views. So you cannot give the excuse that my search results are based on my previous clicks. If I want to read about Sri Lanka in cricket, I would search for "sri lanka cricket" instead. When I search for news, I want real news. Not stories of a certain sports or gossips about actors. This is not a one-time event. I tested Google several times for Sri Lanka news over the past years. It always disappointed me with cricket news. News is something that affects the people. At least they are the news that should pop up as the top stories. Google fails Sri Lanka miserably here.

On the other hand, duckduckgo, a newer search engine performs better, returning more relevant real news on Sri Lanka for the same search. Probably we all should switch to duckduckgo as our search engine.
duckduckgo "sri lanka news"

Wednesday, May 31, 2017

EMJD-DC Spring Event 2017

[30th May - 1st June, 2017] We had the Spring Event this year in Brussels. My presentation and the poster are given below.

Sunday, May 28, 2017

EMA GA 2017 at Brussels

May 26th - 27th: I have been a program representative (PR) of Erasmus Mundus Association (EMA) a few years for EMDC and EMJD-DC. However, unfortunately in the past, I missed the general assembly (GA) due to conflicts in schedules. I was the representative of EMDC master program in 2013. However, I could not attend the GA as I had the semester exams during the same days. In 2016, I was again the PR for EMJD-DC. I missed the opportunity to be present at the GA in Lugano, as I was waiting for my residence permit interview. 

This time in 2017, I made it to the GA in Brussels. I represented both EMDC and EMJD-DC this time! It is like 2013 (EMDC) and 2016 (EMJD-DC) combined. It felt nice to be there after previous failed attempts.

We had productive meetings and discussions on the past, current, and future of Erasmus Mundus. Good memories.

Saturday, May 27, 2017

ICTEAM Day at UCLouvain

May 23rd: We had an ICTEAM Day at Namur, where we presented our PhD work in 180 minutes as well as in a poster. My 180 minutes talk presentation is attached below.

Wednesday, May 24, 2017

GSoC Regional Groups

This is the time of new students in GSoC. There have been some interests and discussions around GSoC regional groups in the GSoC mailing list.

The regional groups serve a purpose. They discuss country-specific issues, such as issue/delays in receiving the packages in certain countries, taxation in India, local meetups in different countries or regions, or discussions in your local languages (for example, discussions in Chinese in wechat China group).Many countries have their own group. If your country had little to no participation in the past, there is a possibility to have groups covering a larger regions. For example, the group for Africa:

You will need to do a Google search to find your local groups.

I understand some emails may be uninteresting for the audience. But pls avoid sending an email saying "can we pls stop this discussion? It is annoying to me" First you are contributing to the noise by such an email. Second, usually it comes across rude. So avoid sending them unless you are one of the moderators.

A worse case I noticed was an email I noticed asking to stop the discussions on what IM to use. The sender decided to create a separate email thread to express his point. Usually the emails are organized nicely into threads. Avoid creating new threads to express your opinion. Use the same thread. That will avoid too much distraction. If someone is not interested in that particular topic, they may ignore or mute the topic.

Feel free to join or ignore any country or regional GSoC groups. They were typically created by past-students like us. You are not obliged to join them, though they are usually very welcoming to their local students (and are more tolerant to noise).

If you are from Sri Lanka, feel free to join the Google Sri Lanka Google group. It seems to be very passive in recent years though. 

I believe there is a separate Google group managed by GSoC admins to announce the meetups formally to the GSoC admins and others - I did not see much activity in that group.

Good luck with your GSoC and related meetups.

Thursday, May 18, 2017

Redundancy can save you, when you control it smart: SDN Middlebox Architecture for Resilient Transfers

Recently we presented a poster on our work titled, "SDN Middlebox Architecture for Resilient Transfers" at IM 2017, Lisbon. You may find the abstract and the poster below. This paper discusses a core of my EMJD-DC PhD research.

Abstract: Leveraging Software-Defined Networking (SDN) and middleboxes, application-level policies can be propagated to the network. SMART is an SDN middlebox architecture that differentiates network flows based on tenant inputs. By leveraging FlowTags software middlebox in addition to the OpenFlow rules, it supports a larger scope of tenant preferences and rules from the application layer to alter the network flow behaviour. It thus ensures timely delivery of priority flows by dynamically diverting them to a less congested path or even cloning the packets of higher priority flows along with the original flow.

Thursday, May 11, 2017

Predatory Recruiters and Where to Find Them

You may have seen many of those posts in LinkedIn with 1000s of likes: "Pls like this post if you are available to start working in Dubai, Doha, Singapore, and Abu Dhabi". These posts usually serve the purpose to increase the views and rankings of the recruiter. On the other hand, some of these posts are indeed partially genuine. They create a farm of potential recruits for the recruiter, to whom the recruiter will later send a mass email collecting CVs and personal information for a job that may or may not be relevant. Some of these jobs may not even exist.

I was recently contacted by a recruiter (Let's call him Tim) from such a predatory HR startup called Provide People on the pretence of a job in an open source company, through LinkedIn. He sent me a connection request (by that time he was a 2nd degree connection). He then messaged me to email him my CV. He referred to me as "Ganesh". This was the first warning that he was copy-pasting to a mass list. I was reluctant to reply to an email that was not even addressing my name properly. But he reminded me again. So I replied later.

Followed by that, he started asking personal questions such as "Current and expected salary, visa status". Further, he sent a coding challenge (or requested to share a link to a public code). I chose the latter. His sms-style language ("u" instead of "you", no proper capitalization. Are we talking in sms/twitter?) was a second warning. I did not pay too much attention to these warnings.

After a day or two, he replied that the company found that my CV does not have their required experience. I reminded him that it would be more appropriate to send the CV first and then find more personal information. He vigorously defended his stance, and CC'd the "co-founder" of his company so that the co-founder can support him. Interestingly the co-founder never replied to my email, defending his employee. Probably the co-founder is busy, fishing for the product (i.e. potential employees).

Part of the email communications are given below (omitting personal information):

Tim says:
Thank you…

What is your

Current salary:
Desired Salary:
Notice Period:
Visa Status:


I shared with him in detail the notice period and visa status, though I explained him why it is not relevant to discuss the salary right now.

I later indicated him:

A piece of suggestion: Pls consult the employer next time on getting the first reply before asking personal questions such as
Current salary:
Desired Salary:

Notice Period:
Visa Status:
These questions can be left at a latter stage. Specially the salary details can be left to the final stages of the interview.

It wastes both of our time and invades my privacy unnecessarily. It did not reflect good on Provide. I will share my feedback with Provide later on this aspect.




Tim replies back sooner.


Hi Pradeeban,

Thanks for your thoughts. Unfortunately I must whole heartedly disagree with:
These questions can be left at a latter stage. Specially the salary details can be left to the final stages of the interview”. We need to know this information prior to submitting your CV… this is basic information all clients ask for prior to submission, it is part of our SLA agreement. It saves wasting time with potential candidates who’s salaries not online with client budgets budgets, have maybe inflated salary expectations, visa issues that we cannot support or too long a notice period if we need a hire to start within a month.

This might be the difference between the research and commercial worlds, but the R&D organizations I work for also request this basic information upfront. Image investing 4 hours of you time in interviews, just to get to the final stages and realise the salary we have is too low for you? For a client also, that could be up to 11 man hours wasted in interviews.

I have cc’d one of our founders, ***** ******,  into the email so you can talk openly. I am sure he will voice a similar stance to myself.

Kindest Regards


I reply back now addressing the "co-founder". Let's call him Stephan:


Hi Stephan,
Probably Tim misunderstood or misrepresented my comment (that is in the email).

"These questions can be left at a latter stage"
A quick overlook of the CV to find the match requires just 2 minutes, specially for a rejection. You may ask further personal questions when there is a match based on CV, and when the employer showed the first interest (as in, "the CV looks good. I need more information").

The same can be mentioned about asking to do the coding challenge (defer it after to the first reply from the employer. I did not do the coding challenge. I just shared a link to my work. But if someone did a coding challenge before the CV screening, this is a waste of time for the prospective employee. I estimate it may take up to an hour for this coding challenge).

I stand by my stance on asking the salary details early on is a no-no. It should be left to the employer. It is better if the employer is transparent on potential offering instead. It is a win - win. But that is a separate topic/discussion.

I have interviewed myself candidates for junior roles for my previous employers in the US and Sri Lanka. Also in my experience, I had zero instance where a recruiter (those who represent companies and research labs) asked for my salary and visa details when the CV is not even shared with the employer. This is somewhat a predatory practice.

I would rather prefer if you contact the potential employees with more personal questions when there is some interest and match from the employer's perspective. But if this is your business model, I have no say on that.
But feel free to reflect upon these comments during an internal discussion.



No replies from Stephan. Probably Stephan's email is not even valid. Or may be he does not care about us - we are his product. His customers are the employers.

What is next? Provide People and similar companies will ask questions such as "Are you pregnant? Do you have any life-challenging diseases?" to help the companies weed out these "anomalies" earlier? We are in a weird situation where employees are brain-washed to believe their founders. I believe Tim is one of them who "
must whole heartedly disagree with" me.

Wednesday, May 10, 2017

SD-CPS: Taming the Challenges of Cyber-Physical Systems with a Software-Defined Approach

Today I presented my paper at SDS 2017. You may find the abstract and the presentation below.
Abstract: Cyber-Physical Systems (CPS) revolutionize various application domains with integration and interoperability of networking, computing systems, and mechanical devices. Due to its scale and variety, CPS faces a number of challenges and opens up a few research questions in terms of management, fault-tolerance, and scalability. We propose a software-defined approach inspired by Software-Defined Networking (SDN), to address the challenges for a wider CPS adoption. We thus design a middleware architecture for the correct and resilient operation of CPS, to manage and coordinate the interacting devices centrally in the cyberspace whilst not sacrificing the functionality and performance benefits inherent to a distributed execution.

Saturday, April 22, 2017

Spring 2017

Flowers of Keukenhof
Finally the spring is here and the trees and weeds are full of flowers in Louvan-la-Neuve. Paid a visit to Keukenhof to witness more flowers.

We bought the 10 train pass ticket  for 77 Euros. It covers the journey inside Belgium, Louvain-la-Nueve to Essen. The remaining international train journey (Essen -> Leiden) is separately bought. There was no need to get down at Essen though. The journey was Louvain-la-Neuve -> Ottignies -> Brussels Nord -> Rotterdam -> Leiden.

From Leiden, the combination ticket costs 24 Euro, which covers the return bus journey from Leiden to/from Lisse (Keukenhof), in the bus 854. It takes 32 mins each way. If you just buy the entrance pass to Keukenhof without the bus pass, it would cost 16 Euro/person. The combination ticket can be bought from the AKO bookstore in Leiden train station.

Leiden is a beautiful university town, located conveniently on the way to Keukenhof. The bus stop is just in front of the train station. So it is best to stay close to the train station.

Tuesday, April 11, 2017

Why I would not give up my seat for 800 $

A weekend trip to NYC.
It might sound reasonable for someone to assume that 800 $ or the advertised maximum (of United) 1350 $, a reasonable deal for someone to voluntarily give up their flight seat. If you think about it, 800 $ is way too little to even consider that.

I am trying to recall voluntary reboarding of passengers by United Airways in the recent past. If I remember correct, they started with 400 $ and increased to 800 $ to find volunteers to give up their seat in a flight bound to Newark from Atlanta. They managed to find volunteers. 

I would not give up my seat for 800$ for many reasons. First, that trip was a long-weekend trip to NYC. Any delay would make us lose one day out of our 3 days in NYC. We have a hotel booked. If our flight is delayed by a day, they are not going to return the money we paid (400 $ / day). If the delay is beyond 2 days, the 800$ is already below the mark, and we would basically have to cancel our long-planned vacation.

Now the second situation. Mostly I travel for conferences. Many times I had to present a paper on the arrival day (or the day following that if arrived on a Sunday evening). If I am delayed (unless by a few hours), I would lose the chance to present my paper. As a PhD student, presenting my research is very important for me. I am not going to give up this opportunity even if I do not lose anything monetary if I am delayed. Don't expect me to give up even for a very high bribe.

Third, on my way back home, I often have other important tasks to handle. For example, after I returned from Croatia to Lisboa in 2015 summer, I immediately had to go to San Jose for OpenDaylight Conference. If my flight is delayed, my onward travel plans will be affected. Cannot volunteer. I may give up my seat in fear of United Airways style cop-violence though.

Conch Salad in the Bahamas
Usually flights define a crucial point in most of our lives. We don't fly every day. When we fly, it is usually for an important event - a conference, a long-planned vacation, or meeting family after a long time. Our days during the flights are usually more valuable than the other days. It is childish to assume 800 $ for the delay is sufficient for the distress caused to the economy class passenger (since it is highly unlikely someone who earns more than 800$ ends up in the economy class, which is also fondly called "cattle class").

It does not mean I would not give up my seat for 800 $ at all. There are certain situations that I would be more than happy to volunteer. We were in our way back home from Nassau after a long weekend in the Bahamas. It was a Delta flight. It was not overbooked. So no one was asked to give up their seat. But think of it. If they give us 400 or 800 $ each for the inconvenience caused by the travel plan change and give us a hotel stay for the delayed day with vouchers for the dinner, why not? We would be happy to extend our holiday by one more day. But it did not happen, of course.

I will be more willing to volunteer if I am returning home from a week-long trip. But if I am on my way to my destination, unlikely that I give up. It will screw up my travel plans - conferences, booked hotels, and important vacation time. Airlines need to come up with better compensation packages than the involuntary inhumane "re-accommodating" process. 

You should also read the cruel response from the CEO of United, Oscar Munoz. I hope justice will be served eventually.

Tuesday, March 21, 2017

Long Transits in Dubai with Emirates

Trying to capture this tallest building inside the frame
I used to be a frequent traveler of Emirates when Colombo was my central airport. After a long time, we were back to Emirates. This time we had a transit of 12 hours and 40 minutes. Emirates offer free visa (otherwise would cost ~120 AED), free accommodation with meals and transport to/free the accommodation in Dubai, as long as certain conditions are met. The transit should be long (more than 9 hours, if I remember correct), and should be the shortest possible transit in the route (means, you cannot choose to book a latter flight just to be eligible to this offer, when an earlier option is available).

We had a nice sleep, and felt refreshed for our onward journey. Also the hotel had a package tour for 2 hours where they took us around the city and dropped us back for 30 USD/person. It was a good experience. Emirates actually do not advertise this free stay during transits in their web site. The entire thing is kind of obfuscated. Probably they do not want this to be an advertising/marketing point. Everything was smooth. Thanks Emirates. Impressed again.

Beware of Robbers in the Public Transport

Colombo, feels just like a very familiar city. Deja vu.
So I was in this bus during a recent visit to Sri Lanka. This conductor guy was standing next to me when I was about to get down. I felt he was too close and some touches in the backside of my backpack. I assumed he mistakenly was touching as the bus was moving. As I got down, my glass box fell down from the small front pocket of my bag. Now it all made sense to me. He assumed that was my wallet in the small pocket. He thought I was easy prey. Because of his stupidity, the box broke falling down. He kept staring at me as the bus moved on - he probably did that involuntarily as he noticed me taking the box from the ground, or probably he wanted to see whether I identify his trick and react (how? by chasing the moving bus? or by shouting? I did not react except giving an angry face at our failed system). He managed to wide open the bag though nothing valuable was there for him to steal. It is a sad state - the conductors are expected to serve the passengers, not to rob them. Next time when you are in Sri Lanka, beware of these bus conductors. From my overall experience, most of these guys are unpleasant. Based on the last experience, some can be robbers too!

A similar incident happened in Brussels Nord train station too. We were boarding the train, tired after a long flight. One middle-aged woman (~35) presumably of east European origin based on her looks, jumped the queue. Then another 2 of her friends, jumped in front of me, making a distance between me and my girl. We were with luggage. One woman, inside the train, was pulling my girl's big luggage talking something in a language that sounded new and strange, as if she was helping her (but actually she was merely dragging. not helping). In the mean time, the 3rd woman in front of me, was pretending to help me drag luggage too. I was kinda annoyed by that time. No one jumps queues in Europe usually. At least in the west. These were women. So I tend to let them pass. However, we were with luggage. No reason to make us suffer. But when I got in, I noticed my girl's front bag (where she had her cash, mobile, and all other valuable items) was wide open. 

While one woman managed to distract her by pulling her big luggage, and other doing the same trick on me, the other one in the middle managed to wide open her small front bag (that usually is for passport, documents, and cash during the flights). Luckily for us, as soon as I boarded the train, I noticed the bag open. I loudly announced, "Your bag is open. We have robbers in this bus". I looked at the women. Not because I immediately guessed they were the robbers. But they were the ones interacting with us. It took me a second to realize what is going on. By this time, sensing a retaliation, one of those robbers told me quick, "Oh, we are going to airport. Wrong train", and all 3 robbers jumped the train and disappeared in a second!

My girl confirmed she did not lose anything. The robbers almost rob us. So it can be decent looking women too. Don't assume the robbers are usually ugly men. The sad part of the entire story - no one in the train was bothered to listen, interfere, or react while we were having these conversations or when I announced that we were almost robbed. Probably they are used to all these dramas. Or probably they thought we all belong to a same team, giving a performance to rob someone else? Who knows.

This is the second scam we encountered in Brussels. To read more about the first one: How to Overcome an Uber Scam.

Back to my EMJD-DC busy life.

Monday, March 20, 2017

Luxembourg by Public Transport

Louvain-la-Neuve, the village of the second (current) university of my PhD sleeps during the Sundays. Almost everything shuts down, as students disappear from the village to their hometowns during Friday evenings to reappear only on Sunday nights. Since it was getting a bit boring during the weekends in this small village, we decided to visit the nearest country, Luxembourg. We first have to go to Ottignies and transit there to take a train to Luxembourg, that originates from Brussels - Midi station.

Usually, this costs 51.60 Euro/person to go to Luxembourg by train from the village. However, on weekends, the local public transport has a 50% discount in Belgium. This leads to the final price of 35.40 Euro/person in the weekends. One ticket from Louvain-la-Neuve to Arlon (Belgium) that costs 23 Euro for a return trip, and the next from Arlon to Luxembourg for return trip for 12.40 Euro. The transit remains the same though the tickets are broken as the above to separate the local trip from the international part of the journey.

For 4 euros, you may purchase a daily pass that you can use to travel anywhere in the country by bus or train. Hop on Hop off buses and toy trains were not available during our visit, as they start only from April. Many shops were closed on Sundays. Some were closed as it is still off-season. However, tourists were already there. Luxembourg city was quite boring compared to other cities. Even Vaduz, the capital of Liechtenstein, scored better in my opinion. But Luxembourg is still worth visiting once. If you ask me, any country is worth a visit at least once, anyway.

Saturday, March 18, 2017

Cut the LinkedIn Small Talk

One of the most annoying LinkedIn marketers I have encountered - those who add you out of nowhere (3rd degree connections, usually). Then they start a small talk with you.

Some advises:
1. Don't add random people and start messaging them in LinkedIn - at least read their profile well to see whether they would be interested in your message. No need to waste both of your time by a boring chat.
2. If you have the urge to do so, do it as a single message, a paragraph. I don't use LinkedIn as a chat client.

The marketer small talk usually goes weird and slow, as if they were asking me out. I help them these days to cut this small talk short. By this way, I help them end this within  a few minutes.

In the above chat, I helped end the chat sooner with the counter-question "How can I help you?" instead of answering "I am fine, thanks, how are you?", then waiting for their follow up answer and further small talk on how bad the weather these days. Second, the short and direct reply "No" helped them stop the chat without further small talk such as "Good bye", "Hope to make business with you again".

Though I come across rude in the above chat and sharing this blog post, you should realize that this is not a single message. We, each of us, receive a ton of such messages in LinkedIn. So this is a collective annoyance.