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.