Sunday, November 17, 2019

Revising Portuguese with Duolingo

Since I successfully defended my PhD thesis this year and left Portugal, I started to miss Portugal and hearing Portuguese. I also do not want to forget Portuguese, the language of the country that I love most. Therefore, I started practicing Portuguese with Duolingo 10 days ago. So far, good progress. Duolingo is funny with its interesting lessons and stories.

Some interesting events from Duolingo.

1. Luis is single-handedly responsible for the pineapple shortage in the world.
Image 


2.  and this woman who can eat eighteen! sandwiches.
Image 
3.  Proud to live in a world where even the cats read books.
Image 
4. and it gets creepier..
Image


5. Tell me about these unfair expectations..
Image 
6. A vegan tiger.

7. The mythical armadillo strikes again.. :D
Well, duolingo has a thing with this tatu.

Image

Thursday, November 14, 2019

Running dcm4che storescp tool

Dcm4che comes with a compact java implementation of the Store SCP.

You may easily download and run this tool by following:


$ wget -O dcm4che-5.19.0-bin.zip https://downloads.sourceforge.net/project/dcm4che/dcm4che3/5.19.0/dcm4che-5.19.0-bin.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdcm4che%2Ffiles%2Fdcm4che3%2F5.19.0%2Fdcm4che-5.19.0-bin.zip%2Fdownload&ts=1573680007


$ unzip dcm4che-5.19.0-bin.zip

$ cd dcm4che-5.19.0/bin

$ ./storescp --accept-unknown --directory /opt/localdrive/dcm4che-dicom-root  --filepath {00100020}/{0020000D}/{0020000E}/{00080018}.dcm -b BMIPACS:4242

Saturday, November 2, 2019

Universities as mentoring organizations

A fraction of the session participants.
(Photo by akram9)
We had several exciting unconference sessions and talks at the Google Summer of Code Mentor Summit 2019. I proposed and coordinated the unconference session titled "Universities as mentoring organizations," the Sunday 20th of October 9:00 - 10:00 a.m., at the room "Studio-2" of Mariott Munich. We had around 25 active participants from multiple organizations, representing several universities from countries including the USA, Russia, Germany, and Brazil. We also had mentors from umbrella organizations such as CBioPortal, which are based mainly on universities and research labs. Later on the same day, I coordinated a session on "The great proposals" at "Studio-3" from 2:30 - 3:30 p.m.
 
The session notes are recorded in the GSoC notes. Find all the sessions with their notes linked here. In this post, I elaborate on the session "Universities as mentoring organizations" again for a wider audience. These notes are from the thoughts of the mentors from the communities involved in the discussion, and they will reflect the communities involved. Discussions are grouped under topics, rather than by the person who discussed it in detail.


Administrative Challenges from the Universities
The discussions started interactively with self-introductions from the participating mentors and their mentoring organizations. Tiago and Frederico represented their mentoring organization, which is a university in Brazil. They noted the challenges in convincing the university administration to join the GSoC and then accepting payments from Google. Their organization was the first Brazilian university to become a GSoC mentoring organization. The university administration was expecting documents from Google in Brazilian Portuguese to consider them official. The universities expected the supporting documents could come from one of Google's Brazil offices rather than from Mountain View to make the language requirement met. This expectation created some translation requirements, and these cause some additional burden on the GSoC organization administrators. We hope that such issues would be sorted out from the universities, potentially with some help from Google, so that there would be more participation from International (i.e., non-English-speaking) universities as mentoring organizations.

GSoC Students Help Ph.D. Research
There were several observations on how GSoC students help with the implementation of research ideas. Several Ph.D. implementation works remain closed due to implementations with significant technical debt. Support from GSoC helps make the code more readable and reusable, and thus support open science and open-source contributions from the research universities. Hence GSoC students help with the host universities' research open-source. Stephanie from UC Santa Cruz stressed how GSoC helped their Ph.D. and postdoc researchers. She mentioned how the undergrad GSoC students worked with their researchers, and this was a mutually benefitting task. No one felt mentoring as a burden. Instead, they saw it as a way to build their communities. She highlighted that promoting GSoC across the departments would be easy by stressing how the GSoC students help with implementation over the summer, paid by Google. There were observations on developing projects that are helpful to Ph.D. research work. For instance, there are projects that need to get done, but the mentor (Ph.D. student) doesn’t want to do it themselves. GSoC students can be more motivated to do such implementation work, even with little scientific or research impact.

Motivating students into GSoC
Philipp and Karlheinz represented the University of Munich. They highlighted that their Ph.D. students work as GSoC mentors. However, they also stressed that it is hard to motivate students from their university to join GSoC as students due to summer holidays overlapping with the GSoC timeframe. Students do go off on a well-deserved vacation rather than taking a summer internship. Furthermore, there were observations that there are several university open source projects that are not connected to or well-received by general open-source software communities. GSoC is indeed bridging this gap, making the code quality better. I (Pradeeban from EmoryBMI - Emory University, Department of Biomedical Informatics) mentioned how we motivate our students to join GSoC while discouraging them from joining our university/department as their mentoring organization. This is mainly because we want them to build new collaborations. Collaborations inside the university or department do not require a GSoC.

GSoC in professional life
The impact of GSoC is long-lasting. Some of us found our postdoc advisors and employers through GSoC. So GSoC works as a recruiting platform for mentors as well. Furthermore, it fosters international collaborations between universities. We had research papers as outcomes of the GSoC. Nikita from a Russian university stressed the importance of GSoC and similar programs in the students' careers. Sebastian Diaz from Harvard highlighted the misalignment of university projects and open source.  While challenging, programs such as GSoC help fill this gap. Tobias highlights that their target students mostly include Ph.D. students, as they are more suited to work on the proposed projects, involving significant research component. GSoC also helps them get more funding for full-time developers, as it is considered a full-time job for the students.

Best Students Join the Universities
Aadi, a high school student from India, observed how the best students like to work with the universities that function as GSoC mentoring organizations, as this helps them with their future graduate studies and research. The observation is that the mentors from such organizations are professors and experienced researchers from the universities. This is also a mutually beneficial relationship - universities as mentoring organizations get to have the best students. Indeed, a win-win. I joined OMII-UK as a student in 2010 and Emory BMI in 2014 and 2015 (2016 onward as a mentor and then joined 2018 as an employee, and 2019 a postdoc). My interest for OMII-UK was driven by the fact that the EPCC research team from Edinburgh University was part of OMII-UK, where I worked with them on their OGSA-DAI platform for GSoC 2010.

Why not enough open-source from universities?
Arav Singhal, a student from Rice University, stressed he prefers more open-source development in his university. We agreed that a large number of research teams keep their source closed until their paper is published. Even after that, when the code is made public, most of the time, the code is not reusable, as it is usually developed as a prototype with little attention to code readability and engineering best practices. GSoC helps fix this by building up coding skill sets in the students.

Small open source presence in a country
Deniz is from Turkey. He was a GCI student in ScoReLab (an open-source community originated from the University of Colombo, Sri Lanka). He highlighted how Turkey has a small open-source presence. The lack of local open-source communities makes motivating students to join GSoC harder. The challenge starts with introducing open-source and then GSoC, among the potential students. It is essential to create larger local open source communities to build a diverse expanding FOSS contribution.

Universities/Entities collaborating as a single mentoring organization
Werner highlighted the collaboration between multiple universities as a mentoring organization. He observes that sometimes, organizations do not make it explicit enough that the organization is a research department or a collaboration of such entities. Ino from cBioPortal highlighted how hospitals and research institutes collaborate under cBioPortal for the GSoC. He also noted the positive outcomes, including peer-reviewed publications. Mentioning GSoC in CV - both as a student and a mentor - is rewarding. There were suggestions on including open source software development in university curriculums.


Starting a new GSoC organization
Akram, a researcher from the University of Tennessee (Dept. of Bioinformatics), helped his department apply and get selected as a mentoring organization as a new (i.e., first-time) GSoC organization when he moved to the current university as a postdoc from another university. He observes that the GSoC has indeed resulted in peer-reviewed journal publications. He stressed the importance of open source for university. There seems to be a common observation that receiving funding from Google (or any similar company) becomes harder due to the university regulations. We discussed how to start as a mentoring organization. We need to have precise project ideas. Of course, having established open source projects would be a big plus. However, there are also concerns about having mentors and retaining them. How to grow our mentoring community beyond the walls of the department/university? GSoC students-turning-mentors can be a solution. We also need to be clear on the bioinformatics side on what can be open source, as we deal with sensitive health data.

Recruiting Mentors
One challenge to address is how to leverage more departments/mentors from the university. Some of us view it as building the community. This requires a significant effort from the organization administrator, to convince the fellow faculty, postdocs, researchers, and staff to be GSoC mentors. Sometimes, it is faster just to do the development ourselves, rather than mentoring a student to do it. However, such mentoring can be a rewarding experience for early career researchers. We all agreed that GSoC was a productive use of our time and not overhead. We also need a "mentor pool." Projects should have back-up mentors and an active co-mentors. This helps with avoiding mentor burn-out, ensuring successful completion of GSoC.

GSoC as a funding mechanism
Some view GSoC projects as a way to fund implementation activities that other funding entities won’t financially support. For instance, development is often seen as not novel. Therefore, complete implementation and maintenance efforts do not receive sufficient funding from the funding agents. However, such maintenance and incremental developments are crucial for the usability of the project. GSoC helps improve the usability and maintenance of the code.


Did we miss anything? Also, did I fail to include any crucial aspects discussed in the session? Please share your thoughts on this topic as comments.

Friday, November 1, 2019

A few things that made my 2010s interesting..

Cruise to Sthlm from Helsinki, the return trip
We are reaching the end of the 2010s. Easily my most favorite decade in my 3 decades of life. I have the habit of summarizing a year when the year comes to an end, in an annual post, since 2012. This time, I decided to do it for the decade. This post summarizes 30 things that made my 2010s enjoyable.

I graduated with a first-class in Computer Science and Engineering.

Witnessing snowfalls in Paris on my first trip abroad. It was also my best conference experience so far, in terms of social activities.

WSO2 was like a family in those days.

Biyadhoo Island, Maldives
4. Leading the Local GSoC promotion
I did some evangelization around GSoC and open source, touring 7 Sri Lankan universities.

My first solo foreign trip. I also had the DXB -> LAX flight, which is one of the longest non-stop direct flights.

It required me to travel to New Delhi, twice.

Erasmus Mundus single-handedly changed my life.

Bairro Alto, Lisboa, by night
8. Feeling young in Lisboa
We had a group of friends, and we had terrific memories -- especially the first semester. "Portugal" also became the one-word summary of my 2010s.

It was a romantic and remarkable new year celebration.

It was snow everywhere and the first time spending days and nights in a ski resort.

Stockholm was my second city outside Sri Lanka. It was dark in winter. Still, it left many pleasant memories.

Woods of Farsta Strand, Stockholm
12. A Christmas vacation in 3 Nordic countries
Including a cruise to Helsinki from Stockholm, and a flight to Copenhagen from Stockholm and a train to Malmo.

13. London in Winter
It was a pleasant experience presenting the full paper of my MSc thesis. It also marked the successful completion of my MSc.

14. Biennial visits to Shenzhen, China
I enjoyed my visit to Shenzhen every other year, starting from 2014 (2014, 2016, and 2018). 

15. EMJD-DC Ph.D. program
I started my Erasmus Mundus Ph.D. program from Lisboa. This made me stay in Portugal for a total of 6 years (2012 - 2018) - much longer than I ever imagined.
Early dinner in Puerto Penasco, Mexico

16. Crossing to Mexico by land
During the SDS 2015 conference in Phoenix, I started the habit of visiting nearby countries when possible.

17. Spending a summer month exploring the Balcans
It was a short-term scientific mission (STSM) research visit to Croatia. I ended up traveling to nearby countries, Italy, Slovenia, and Serbia during the weekends.

18. Calm and warm Maldives beach
Enjoying a sunny island of Maldives.

19. The Caribbean sea of Nassau
It was fun in the Bahamas, although one day was raining and ruined part of our trip.

Calm waters of Nassau
20. The beautiful Rhodes island in the autumn
I was there in Greece to present my papers. However, the island was too tempting not to explore. The conference was in the Greek touristic island, and it was fun.

21. Chasing snow in Liechtenstein

Determined to witness snow for the Christmas/New year vacation, we traveled all the way from Zurich to Malbun in Liechtenstein, eventually reaching the snow-capped mountains.

22. Daily walks along the beautiful Louvain-la-Neve lake
The Belgian village was self-sufficient with everything we needed.
The Belgian village of Louvain-la-Neuve

23. A train ride from Oslo to the sunny Karlstad
The Swedish town instantly became one of my favorites.

24. When a huge fan of Romanian music finally arrives in Romania
Romania was stylish and much better than what I anticipated. And I love Romanian music.

25. Exploring Saudi life
KAUST was like a country on its own. We enjoyed the canteen food and frequent visits to the cinema.
Atlanta getting ready for Christmas

26. Getting into random buses in Jeju
Yet, we eventually reached the destination!

27.  Thiruvannamalai
This temple is special for me as I always wanted to visit it from my young age. We had a chance to visit Chennai and temples around.

28. Exciting moments in Atlanta
It was a special feeling, becoming a father.
The Red Sea, KAUST, Thuwal, KSA

29. Successfully defending my Ph.D. thesis with a distinction
I had to defend it twice since it is a double degree - first in Portugal and then in Belgium! Now, I am finally done with all my higher studies.

30. The Mentor Summit and the Baltic Adventures
It was quite a packed crazy trip, spanning 5 countries, out of which 3 countries were the Baltic nations that I have never been to before.

I find it exciting how events look different from a longer perspective such as a decade. This is the first time I looked back at a decade. This was also the first decade I was independent on my own, as before I was always with my parents. I hope the 2020s will be more interesting than the 2010s. I am looking forward to the 4th decade of my life!

கரை வந்த பிறகே பிடிக்குது கடலை

When I finally defended my thesis in Lisboa in July this year, I decided to revisit most of Lisboa that I enjoyed during the past 7 years. I even managed to spend 3 nights in Porto, a city that I loved, but I visited only once before - in 2013 summer. I was of the opinion that this departure would make me slowly move away from Lisboa. I knew that I cannot forget Portugal completely, the country that I love the most. However, what I did not know was that I will actually grow more fond of Portugal after my final goodbye. I even started to freshen up my Portuguese knowledge since I always like to learn something and now I am not a student anymore after my Ph.D. defense. Of course, the cultural shock of moving away from Portugal - where almost everyone was nice and kind. After there for 7 years, I had well-aligned myself culturally to Portuguese culture, and arriving in the USA was indeed a cultural shock.

This brings me to the first life of the song "The Life of Ram" from the Tamil movie "96". கரை வந்த பிறகே பிடிக்குது கடலை. நரை வந்த பிறகே புரியுது உலகை. - I started to like the sea only after I reached the shore. I understood the world only after my hair turned gray (a loose direct translation).
 

7 years ago, I randomly ended up in Portugal, a country that I did not have much clue about (except they conquered the coastal towns of Sri Lanka in 1505, until 1658. Read, Portuguese Ceylon). Now I focus on Portugal. I am confident I will return to the country that I love so much, at some point in my life. Until then, I don't forget you, Portugal, and please don't forget me either. :) Ciao e beijinhos.

Sunday, October 27, 2019

Finally, the Baltic Nations

Riga Food Market
When I lived in Stockholm, I always wanted to visit the neighbor countries such as the Scandinavian nations and Baltic nations. There were cruises between Stockholm and these nations. Even a cruise to Saint Petersburg in Russia is possible without a visa given that we return to our origin by cruise within 72 hours and we remain in Saint Petersburg for our entire stay.

However, I visited only Helsinki by cruise during those days. Somehow I missed the Baltic countries until I left Europe in 2018. This time, I had a chance to fly to Riga, Latvia, during my recent trip to Munich for the GSoC mentor summit. Not only that, we managed to make day trips to Estonia and Lithuania as well. This was also my first time to visit former USSR countries. Baltic countries have nicely transitioned from USSR to EU. Sometimes in the architecture and environment I was still able to feel USSR style. I loved Riga and its Black Balsam. Now I have finally managed to visit all the Baltic nations. They are worth the visit. Make sure to keep them in your bucket list!

When you have too much time in hand in a random town

The train station
Have you have ever had a day trip to a relatively dull town and ended up having too much time in your hand? That's what happened to us when we ended up in Panevėžys, Lithuania, in a bus ride from Riga, Latvia, using Ecolines. We already had a return ticket in slightly later than 10 hours from our arrival time. We ended up having nothing much to do after going on speed walking across the town, enjoying a proper Lithuanian meal, and exploring their shopping malls. Eventually, we resorted to visiting one interesting cafe, not once - but twice!

Due to a 75% discount going on with Ecolines, for journeys between Riga and Vilnius, instead of buying a return ticket to Panevėžys from Riga (would cost 20 Euro), we bought our onward journey from Riga to Vilnius and return trip from Panevėžys to Riga.  The bus has an intermediate stop in Panevėžys. But they check the names when you enter the bus. If you do not enter at the designated stop, they cancel your trip. So we cannot buy a return ticket to Vilnius from Riga (it would cost only 10 Euro). With two tickets (5 Euro from Riga to Vilnius and 11 Euro from Panevėžys to Riga), we paid 16 Euro. Still saved 4 Euro. Yet, we had a risk. In case if no one gets in or gets out at Panevėžys, our bus would take us to Vilnius. Then from Vilnius, we would have to find our way back to either Panevėžys or Riga, by purchasing a connecting return bus. Luckily, the bus indeed stopped in Panevėžys, because there was one (!) person getting down at
Panevėžys.

Panevezys also has got some cult status in my life. It is a small town with lots of lakes and parks. Nice paths to walk around. Quite boring place - yet you have many things to do in the town as well as quick trips to nearby Baltic cities such as Riga or Vilnius. I have also made it into a verb.

panevezys
verb.
1. Wander aimlessly, because you have too much time in hand without specific plans.
"We should totally panevezys tomorrow when we arrive in Panama." 

Exploring a "ghost town"

Beautiful and shallow Baltic Sea in low tides
When we go to a touristic town in the wrong season, it can feel deserted. We had the pleasure to explore Pärnu in Estonia, a summer beach town in the Baltic sea this autumn. It felt like a ghost town with cold empty beaches. Most shops and restaurants were closed. One even had a note, "We are closed. We will open in May 2020". It was still a pleasant experience though.

Deciding on travel destinations

Salzburg: Typical Europe
After our day trip to Zugspitze and the Baltic trip, we still had time before the GSoC Mentor Summit. We were contemplating Innsbruck and Salzburg. But given the activities in Innsbruck seem similar to Zugspitze, we decided to go with Salzburg. It was a pleasant surprise to see tourists in large amounts in autumn. A contrast to what we witnessed in the Baltic states. Austria is indeed touristic. I still haven't been to Vienna, although I have been to Austria two times by now. Maybe I will visit Austria again in the future again anyway, including Vienna and Innsbruck.

P.S: I found these live cams quite useful.

Saturday, October 26, 2019

Zugspitze by public transport

Crossing the border by foot, to Austria ;)
Zugspitze is the tallest mountain summit in Germany. It shares the border with Austria. Since Austria has taller peaks, Zugspitze has more interest from the German side, dubbed as the Top of Germany. This time we visited Zugspitze from Munich, using public transport. It was quite an easy trip, thanks to this blog post. At 2,962 meters, Zugspitze is also the highest elevation I have been in my entire life. Sri Lanka's tallest peak Pidurutalagala is 2,524 m. My other summits, Vall de Nuria, Spain (2013) is at 2,252 m and peaks of Malbun, Liechtenstein (2016) slightly less than 2,000 m. I will wait to see when I will overtake my current highest elevation in the future.

We managed to catch only the 10:32 train to


Google Summer of Code Mentor Summit 2019

The mentor summit in full swing
This is the first time the Google Summer of Code (GSoC) mentor summit came outside of the CA/USA, and the first time to Europe. The mentor summit was in Munich this year, and I am back to the summit after 8 years. Last time I represented AbiWord in 2011 in GooglePlex (the GoogleHQ in MountainView, CA, USA). This time, the Department of Biomedical Informatics, Emory University. We traveled from Atlanta to Munich for the mentor summit. I am a happy participant of GSoC for 10 years, under various capacities - student, mentor, and organization administrator. I have been with AbiWord, OMII-UK, Emory BMI between 2009 - 2019.

As the mentor summit was in Munich, Google had organized it longer than usual. Usually, the mentor summits were just 2 days. This time, it was 3 days. The first day was a free day for social activity: a visit to Nymphenburg Palace, followed by a scavenger hunt. The remaining 2 days were the actual mentor summit. The format did not change at all, after almost a decade. It was unconference, where we propose our own topics in a post-it note among the available 8+ slots per session. Then folks join a session that they are interested in (or propose a session of their own). This time I coordinated 2 sessions. The first one was on "Universities as mentoring organizations" and the other one was on "The great proposals". The first one had active participation from around 25 mentors, with most of them representing a university or an umbrella organization formed by universities. The second one was a session I coordinated as the last session of GSoC, mostly because the only other session was "Fail your students," and I did not want to end the mentor summit on a negative note.

I enjoyed coordinating the 2 sessions as well as attending some exciting sessions in all the slots. Of course, I missed several sessions that I would like to participate as I can be physically present in only one session in any given timeslot. I met several mentors from multiple mentoring organizations. We also had a few free days in Europe since the mentor summit was just 3 days, and we were in Europe for a week. We used those days to explore Germany, Austria, and the Baltic nations. Quite a packed trip, indeed.

I made connections with many of the mentor summit participants. Please keep in touch, if you are one of those who attended the mentor summit. :)

Me and daylight savings

I have this love-hate relationship with the daylight saving time settings. In the spring, European countries and most US states clocks are moved 1-hour faster. Then in the autumn, the clocks are turned back to the regular time. That means when the sun starts to rise late, when you have to go to work in the darkness, you suddenly get one more hour of sleep. But then, you also lose one more hour in the evening. When you come home, it is already very dark. While I appreciate the attempts to adapt to the seasons, such time changes also create an artificial and abrupt timeshift on a single day. I am not sure whether I love or hate these time changes. However, Europe is getting rid of these timeshifts by 2021. There is always a 2-week difference when EU changes time each semester and when the USA changes. There was a time I was flying from Lisboa to Phoenix via MSP. Interestingly, that day the USA was having the time shifted to summertime. However, Arizona doesn't follow daylight savings. This confused me a bit, together with my delayed luggage. I am waiting to see how different EU countries will choose their permanent times as they bid goodbye to daylight savings.

Wednesday, October 2, 2019

Running a PixelMed DICOM Server

PixelMed has a reference Java implementation of the DICOM specifications. It is quite easy to set up and run PixelMed. This blog post summarizes the steps to get it run quickly.

First, download the source, binary, and dependencies of PixelMed DICOM server. At the time of writing, the latest version can be found here.

$ mkdir pixelmed-src

$ cd pixelmed-src

$ wget http://www.dclunie.com/pixelmed/software/20190626_current/pixelmedjavadicom_sourcerelease.20190626.tar.bz2

$ tar -xvf pixelmedjavadicom_sourcerelease.20190626.tar.bz2


Extract the binary.

$ mkdir ../pixelmed

$ cd ../pixelmed

$ wget http://www.dclunie.com/pixelmed/software/20190626_current/pixelmedjavadicom_binaryrelease.20190626.tar.bz2

$ tar -xvf pixelmedjavadicom_binaryrelease.20190626.tar.bz2

Extract the source and copy testserver.properties from com.pixelmed.server package to the root folder of the binary. The package also has the core class of the DICOM Server.

Adopt the testserver.properties for your needs.

# Where to store the database support files
Application.DatabaseFileName=/tmp/testserverdb

# Where to store the images stored in the database
Application.SavedImagesFolderName=/tmp/testserverimages

# Name to use for external TCP access to database (such a server will not be started if this property is absent)
Application.DatabaseServerName=testserverdb

# The root URL for the WebServer - if missing will default to the fully qualified local host name (which may not always be available, or appropriate for NAT'd external connections from outside the firewall)
WebServer.RootURL=http://192.168.14.45:7091/


# The name of the stylesheet for the WebServer
WebServer.StylesheetPath=stylesheet.css


# The name of the request type to use for displaying instances for the WebServer
# One of INSTANCELIST, IMAGEDISPLAY, or APPLETDISPLAY
WebServer.RequestTypeToUseForInstances=INSTANCELIST


# WebServer.ListeningPort should be set to whatever port the web server listens
# on for incoming connections.
WebServer.ListeningPort=7091


# WebServer.NumberOfWorkers should be set to a sufficient number to manage simulataneous incoming connections
WebServer.NumberOfWorkers=5


# Dicom.StorageSCUCompressionLevel determines what types of compressed Transfer Syntaxes are
# proposed:
#    0 = none
#    1 = propose deflate
#    2 = propose deflate and bzip2 (if bzip2 codec is available)
Dicom.StorageSCUCompressionLevel=0


# Dicom.ListeningPort should be set to whatever port this DicomImageViewer application is to
# listen on to accept incoming associations.
Dicom.ListeningPort=4008

# Dicom.CalledAETitle should be set to whatever this DicomImageViewer application is to
# call itself when accepting an association.
Dicom.CalledAETitle=BMIPACS


# Dicom.CallingAETitle should be set to whatever this DicomImageViewer application is to
# call itself when initiating an association.
Dicom.CallingAETitle=BMIPACS

# Dicom.PrimaryDeviceType should be set to the type of device, e.g., WSD, ARCHIVE.
Dicom.PrimaryDeviceType=ARCHIVE


# Dicom.RemoteAEs is a space or comma separated list of all the available remote AEs;
# each AE may be named anything unique (in this file) without a space or comma; the name
# does not need to be the same as the actual AE title.
#
#Dicom.RemoteAEs=osirix helgray
#
# Each remote AE (listed in Dicom.RemoteAEs) needs to be described by three
# properties:
# Dicom.RemoteAEs.XXXXX.CalledAETitle
# Dicom.RemoteAEs.XXXXX.HostNameOrIPAddress
# Dicom.RemoteAEs.XXXXX.Port
#
# where XXXXX is the name of the AE displayed to the user and used in this file
#

Extract the dependencies and copy the lib folder to the root folder of the binary.



$ mkdir ../pixelmed-dep

$ cd ../pixelmed-dep

$ wget http://www.dclunie.com/pixelmed/software/20190626_current/pixelmedjavadicom_dependencyrelease.20190626.tar.bz2

$ tar -xvf pixelmedjavadicom_dependencyrelease.20190626.tar.bz2

$ cp -r lib/ ../pixelmed
 

$ cd ../pixelmed

$ java -server -Djava.awt.headless=true -Xms128m -Xmx512m -cp ./pixelmed.jar:./lib/additional/hsqldb.jar:./lib/additional/commons-compress-1.12.jar:./lib/additional/vecmath1.2-1.14.jar:./lib/additional/commons-codec-1.3.jar:./lib/additional/jmdns.jar:./lib/additional/aiviewer.jar com.pixelmed.server.DicomAndWebStorageServer testserver.properties

[main] INFO com.pixelmed.server.DicomAndWebStorageServer properties=
{Dicom.PrimaryDeviceType=ARCHIVE, Application.SavedImagesFolderName=tmp, Dicom.CallingAETitle=STORESCP, Dicom.CalledAETitle=STORESCP, Dicom.ListeningPort=11112}

Now, you may see the web view of the PixelMed DICOM viewer from http://192.168.14.45:7091 from your browser.

Tuesday, October 1, 2019

Install Orthanc in Centos 7

First, download and extract orthanc.

$ wget -O Orthanc-1.5.7.tar.gz https://www.orthanc-server.com/downloads/get.php?path=/orthanc/Orthanc-1.5.7.tar.gz

$ tar xvf Orthanc-1.5.7.tar.gz

$ cd Orthanc-1.5.7

Check the LinuxCompilation.txt in the source root directory and follow it.

$ mkdir ~\orthanc

$ cd ~

$  wget https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.sh

$ sh cmake-3.15.4-Linux-x86_64.sh

Type y to accept the license when prompted.

$ sudo su

vim ~/.bashrc and add the below lines.


export CXX=/home/pkathi2/cmake-3.15.4-Linux-x86_64/bin

export PATH=$PATH:$CXX



Save and exit.


$ source ~/.bashrc

$ sudo chmod 777 -R /home/pkathi2/cmake-3.15.4-Linux-x86_64/bin/

$ sudo su

$ cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release /opt/localdrive/Orthanc-1.5.7

Thursday, September 26, 2019

Booking.com Genius program and a non-existing customer service.

I have been a loyal customer of booking.com for several years. More than half a decade, to be precise. As such, I had a "Genius" account. "Genius" account is the booking.com terminology for a frequent traveler. You get 10% - 15% off on many properties with a "Genius" status. One day, suddenly, my "Genius" status was revoked with a message.

Your Genius membership has been temporarily suspended


We noticed that you've booked with an invalid credit card or made an unauthorized credit card recharge for a booking that should have been charged/was subject to cancellation fees. While we understand that sometimes these things happen unintentionally, we want to make sure that our accommodation partners are being treated fairly. For now, we've suspended your Genius status. You can still book with us but your status will only be reinstated after your next completed booking. After you've booked, stayed and paid you will automatically be added back to the program and you can continue to enjoy your discount and travel rewards. See Terms & Conditions 

Now, I have never done any of these. Those are wrong accusations. I have been using my booking.com account for like 7 years. This is not a throw-away account to make a booking and then disappear without paying the hotel. I would never do that anyway.

On the other hand, these days, I have several travels planned. Having booking.com "Genius" status revoked at this point will make me pay an additional 15% of my upcoming booking, compared to what I was going to pay with a Genius status.

Naturally, I sent them a private message on Twitter and also asked them in Tweet to look into the private message.


"Hi, My http://booking.com profile is XXXXXXX. My genius status is canceled with the below message: 

[INSERT THE MESSAGE SHOWN BY BOOKING.COM REGARDING MY GENIUS STATUS]

I never booked with an invalid card or did a credit card dispute on any of
http://booking.com
bookings. In fact, I am a happy customer for several years. This must be a technical glitch. If you let me know which booking had this issue, I will be able to pin-point what went wrong.

I really want to rectify and keep my genius status as always."

72 hours passed. They were answering to everyone else - but not me. Not even an acknowledgment that they received my tweet or are looking into this. Not even an automated or a canned reply that I would receive from my insurance company. They even replied to those who complained a day or two later than me.

So I used their "Contact us" page in their site. After typing all these, I figured, they are not even receiving what I typed. Instead, the "Next" link sent me to a static page that states,
"Get in touch Our Customer Service agents are always happy to help with any questions you have. Call Customer Service."

"You can also call us

If you have a booking with us, you can speed up your call by having your confirmation number and PIN code handy.

United States of America  United States of America



Support in English
1 (888) 850 3958
Support in Spanish
1 (866) 938 1297
International (English):
+44 20 3320 2609

The phone numbers above are for in-country calls. Only local charges apply, except for international numbers."

So I called them using the number they have listed.

The call replied with an automated message,
"Due to the large volume of calls, we only assist those who have their confirmation number and PIN code ready" and went on to ask those. 

A mail to customer.service@booking.com left me with an automated reply email:
"
Booking.com
Thanks for your message ,

Please reply to this email in the format below, with the confirmation number and PIN code for the booking you need help with. This will help us to resolve your query faster.

Confirmation number: XXXXXXXXXX (10 digits)

PIN code: XXXX (4 digits)

You can find these details at the top of your confirmation email, or by logging in to your account.

My query is not for an existing booking

Don’t want to wait? It’s easy to solve most booking queries with our self-service tools:
"




So those with general account-wise problems such as me have no way of getting help from booking.com. Not Twitter, not from their support page, and not even from their call center via phone.
Booking.com is definitely understaffed for such a large-scale booking company. I feel betrayed as a loyal customer. This is probably a technical glitch. But they must rectify it as soon as possible. This issue is otherwise making me pay more for my upcoming travel bookings. When everything goes fine, we don't see the negative aspects of a company. Only when something goes wrong, we start to see them. Time to look for alternatives after sticking with them for a decade. 



Update:
Today, after 5 days, I received a reply from booking.com on Twitter.



"Hi there Pradeeban. Thanks for your message. There might have also been something else related to your booking history which prompted the Genius level suspension. Unfortunately we cannot provide you with a different outcome other than the one already given."



Interesting.
If they are really honest with "accommodation partners are being treated fairly", they should let me know which booking had issues - so I can rectify. That way, their (imaginary) accommodation partner also can have a better outcome. I am sure this is just a technical glitch, and booking.com is pathetic in their customer service. They are just lazy to find and rectify what went wrong. What a complete lack of customer service when something goes bad?

Most of the web applications are developed to be user-friendly, scalable, and high-performing, with an end-goal of high revenue. But when things go wrong, the humans - the agents of the company come to play. Humans are the weakest link in any technology. Train your staff well to handle the corner cases. When you ignore the valid concerns of someone who is met with an issue in your web application, you lose their trust. That's how many flight agents and booking sites such as booking.com managed to get terrible reviews in review sites such as Trustpilot. To get some idea, check how booking.com managed to get only 1.5* review, at the time of writing this post.


Update [Oct 22nd]: During the past 2 weeks, I stayed in 3 hotels booked through booking.com and completed the payment directly at the hotels. Yet, my Genius status hasn't been restored yet. Shady indeed!

@bookingcom, the worst social media and customer support team. When everything goes fine, it is good. But the moment something goes wrong, you will meet their irresponsible and incapable support team. Time to book accommodation directly with the hotels, ditching these middlemen.

Update [Oct 24th]: Booking.com replied on Twitter, indicating they have restored my Genius Level-2. But turned out, I am just in Level-1 now. They were unavailable for further discussion. Interestingly, to achieve Level-1, I just need 2 completed stays in 2 years. And Level-2,  just 5 stays. With already 3 bookings/stays completed, I would have earned level-1 even if I started from scratch. Similarly, with 2 more stays, I would reach level-2 on my own.

Update [Oct 25th]: Finally, my Level-2 status is restored, and I received an email from Booking.com, confirming this, interestingly in Swedish (Maybe I created my account in Swedish):
(Translated: You are now on Level 2 in our loyalty program Genius! )

Du är nu på Nivå 2 i vårt lojalitetsprogram Genius!

Hej Pradeeban! Du har genomfört 5 vistelser som bokats via Booking.com. Det betyder att du är på Genius Nivå 2. Du får nu tillgång till ännu fler exklusiva reseförmåner med ditt Booking.com-konto, samtidigt som du behåller alla förmåner som du fick på Genius Nivå 1.
Vi vill belöna våra kunder med Genius-medlemskap. Det är vårt sätt att tacka dig för att du bokar med oss.
Reseförmåner med Genius Nivå 2:
  • Rabatter på  % och  % på utvalda boenden
  • Gratis frukost på utvalda boenden
  • Gratis uppgradering på vissa alternativ

    Dina genomförda bokningar:
    XXX
    Porto
    25 jun 2013 - 27 jun 2013
    XXX
    Lissabon
    23 okt 2013 - 28 okt 2013
    XXX
    Helsingfors
    22 dec 2013 - 25 dec 2013
    XXX
    Köpenhamn
    26 dec 2013 - 29 dec 2013
    XXX
    Lissabon
    15 sep 2014 - 19 sep 2014




    Note that all the bookings are from 2013 - 2014 (I removed the hotel names for privacy reasons). Of course I had later bookings. These are my earliest. My first stay with booking.com was in Porto in 2013 summer. It was also my first personal trip since I left Sri Lanka. I deserved to be in Level-2 since 5 years ago. ;) 

     
    Interestingly, I never received such email in the first place when I reached Level-2 in the first place. This whole episode (and the way booking.com handled this) is plain weird and made me lose my trust and confidence in booking.com. I may still use them. But I won't actively promote them or recommend them to anyone.