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:
Hi,
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.

Regards,
Pradeeban.

*******************************

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 git@github.com:sharmalab/bindaas.git

$ 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
$ ./startup.sh

This starts Bindaas using nohup. Logs could be found at log/bindaas.log. You may stop the program later by running the shutdown.sh 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, 
http://localhost:8080/dashboard/{project_name}/{data_provider_name}/createQueryEndpoint.action

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.
osgi>ss
"Framework is launched."


id    State       Bundle
0    ACTIVE      org.eclipse.osgi_3.8.2.v20130124-134944
1    ACTIVE      com.google.gson_2.1.0.v201203072145
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
                Fragments=46
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      com.springsource.org.apache.commons.logging_1.1.1
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      com.springsource.org.aopalliance_1.0.0
27    ACTIVE      org.eclipse.gemini.blueprint.io_1.0.2.RELEASE
28    ACTIVE      com.springsource.edu.emory.mathcs.backport_3.1.0
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
                Master=7

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.