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.

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.

Tuesday, September 17, 2019

When you travel to the same city later once more

Lisboa, by night, with my new friends - 2012
It has happened to me more than once. But this year was a prominent example. I visited Porto precisely six years later. Porto was so unique and close to me. It had so much of romantic and energetic memories cramped in - all from 2013 summer. After that, we planned to visit it on multiple occasions. But somehow, we always ended up choosing a new city, instead of Porto every time we had time.

Deciding whether to repeat a city that left us with good memories, or finding a new country/city to visit is also a tough choice. Sometimes, we leave a town with such positive memories, and it is hard to resist the desire to go back. Porto was one excellent example. Since we did not revisit it until we left Portugal in 2018 summer, it almost felt like visiting Porto maybe a distant dream.

Lisboa, same places, alone - 2019
But then my Ph.D. defense was scheduled, and my university in Belgium was managing my flight. I found that flight via Porto was much cheaper than flying to Lisboa from Brussels. I used it as my opportunity to visit Porto once more!

Porto was still charming. However, it was much colder. Interesting, given that it was the same days as in 2013. I could not jump into the ocean although I was walking by the Matosinhos beach, the same beach we visited last time. I almost felt like having time-traveled, if not for those differences in the weather and the minor changes in the city. For once, the metro line between Sao Bento and Jardim do Morro was closed for renovations. On a night, I took the bus from Sao Bento to Jardim do Morro and walked along the metro line from Jardim do Morro back to Sao Bento. The silence and noise from far restaurants were an exciting mix.

However, it is always hard to experience those moments from the first trip as they are, even when we try our best. We always have the memories of the past, and it is not easy to have the same excitement. The longing - the saudade. We are back - but we are not entirely back. Time changes everything. It is not the same place that we experienced years ago anymore. Climate changes, environment changes, and everything else changes also - sometimes for the better, sometimes towards worse. We end up with disappointment when our expectation from the previous visit was not met during the second or a later visit — for instance, the weather. Not a single sunny day in Porto this time to enjoy a beach day, during the three days of my visit!

Porto Sao Bento Station, 2013
Even if the city itself did not change much, the people have most certainly moved - or at least grew up or changed. Depending on how we kept interacting, the people who were your friends there once may have become strangers. Unless you bring the same set of people from the past, the memories will not be the same. Sometimes friends from high school try to organize such trips after 10 - 20 years. But, what we will meet will not be those youths we remember from our school days. Rather, some middle-aged people with their own family and jobs. Bringing back everything to reproduce the same feelings and excitement is challenging - although I tend to believe it is possible.

We happened to visit Houston recently. It is one of those cities that we will revisit. Not because we like it so much. Of course, the city was lovely - at least the food and its diversity. But the actual reason to revisit is its Chinese consulate. Since the Chinese consulate is in Houston, I have a feeling that we may revisit it in 2021. I am looking forward to seeing how Houston will treat us next time!

Wednesday, September 11, 2019

Younger Siblings of GSoC

There is a younger version of GSoC aiming at school students (age 13 - 17). Format is different. It is more of a contest of several small tasks. I mentored once for Haiku OS. If you feel bored during the weekends now that the GSoC is over, consideer to apply to be an organization. ;)
https://opensource.googleblog.com/2019/03/reflecting-on-google-code-in-2018.html


and another interesting one that happens in October. https://hacktoberfest.digitalocean.com/faq
HacktoberfestHacktoberfest
Open source is changing the world – one pull request at a time.(209 kB)

^ The format is simple. Organizations register with their github profile and tag a few issues as "Hacktoberfest". Then students can pick up and resolve those issues with PRs. The student who completed 4 PRs receive a tshirt.

and a December version of it - https://24pullrequests.com/

24pullrequests.com24pullrequests.com
24 Pull Requests is a yearly initiative to encourage contributors around the world to send 24 pull requests between December 1st and December 24th.(44 kB)


.. and if you want to give yourself or someone else a certificate, here is the tool that Google/GSoC uses - https://github.com/google/certificate-maker
google/certificate-maker
An experimental tool for turning HTML templates into PDF files.
Stars
68
Language
JavaScript
<https://github.com/google/certificate-maker|google/certificate-maker>google/certificate-maker | Jan 30th | Added by GitHub

Tuesday, September 10, 2019

Is Vayama a scam?

Vayama FAQ on Coupons
Unfortunately, online travel agent websites are filled with so many scams. Most of the sites that you would find in well-known listing sites such as Skyscanner do not fit into the traditional definition of a scam. Therefore, they easily evade any lawsuits. Their terms and conditions are listed in fine-print, if you manage to read them when you purchase the flight ticket before the page times out in a few minutes.

Vayama is one of those shady predatory sites that you must avoid, if at all possible. If you must use them, especially if you have found the cheapest of the flight, make sure not to buy any of the add-ons. They promised a 40$ discount coupon for my next flight purchase when I purchased their premium package for my previous flight for 26$. I always land on Vayama from Skyscanner. But when I try to use my discount code, there was no way to input it. 

I contacted them  after purchasing the ticket, as their FAQ page seems to suggest that: "If your booking is not older than 2 days and if it meets the conditions, we can still add the discount code to your booking."

Their India-based support team replied to my complain. Their only repeated reply was "Your flight purchase is ineligible for this discount code since you landed in our web site through Skyscanner." Their logic, I must land on their site directly to be able to use their coupon code. Not through Skyscanner, Google, Kayak, or any other listing or search engines. Seriously? There was no mention of that when promoting their 26$ garbage package.

The only mention is in FAQ, which is no way linked to that terms and conditions listed for the 26$ premium package. The FAQ mentions:
"- Make a purchase directly on our website, not through one of our partners' website"

I and many others who complain on the same situation. Vayama using Skyscanner as an excuse not to provide the discount that we PURCHASED! Even Skyscanner got involved as a courtesy. Skyscanner sent me the below email with their reply:

--------------------------------------------
 Hi again Pradeeban,

I hope you are well.

I have received a reply from Vayama group and they said they will make it clearer in their terms and conditions that the discount can only be applied when the search and the booking are both made on their website directly.

I'm sorry about this issue and that I wasn't able to help.

If there anything we can do or you have concerns  - please let me know, Pradeeban.

--------------------------------------------

Vayama is such a shady business. Please also read some other serious allegations against Vayama here. If they at least fix their wording on their page that sells their discount coupons, customers won't be deceived to purchase the 26$ package, hoping to get a 40$ discount in the next purchase. Hope they will stick to their promise and make these conditions clearer.

Verdict: Avoid this shady travel website.