Wednesday, December 18, 2019
Google Summer of Code (GSoC) 2020
Travels and Conferences in my 2010s.
| Sunset in Long Beach, CA |
Although I did not travel during the first half of 2019, the latter half was filled with several local and foreign travels, starting with my 2 Ph.D. defenses in Portugal and Belgium. The only conference I had this year was BigData 2019 in Los Angeles, not counting the GSoC Mentor Summit in Munich as a conference (it is an unconference).
| Little Tokyo, Los Angeles, CA |
This was my first time visiting Los Angeles. However, previously I had a layover at LAX airport during my first flight to the USA in 2011 for the GSoC mentor summit. Several years and trips after, that DXB (Dubai) LAX (Los Angeles) flight remains the longest non-stop flight of my life so far. This time, I visited a lot of places in Los Angeles - hiking up close to the Hollywood sign, and walks to Little Tokyo and China Town. I also visited nearby towns such as Santa Monica and Long Beach.
I love conferences and I like traveling. I also like to overdose in caffeine during conferences. Overall, I am happy with everything -- although I hope I will have more research opportunities and conference visits in the upcoming years.
Saturday, December 14, 2019
Data Services with Bindaas: RESTful Interfaces for Diverse Data Sources
Dec 11th, 2019: Today I presented my first conference paper from my Postdoc at IEEE big data 2019 conference held in Big Data 2019. It was fun listening to various talks and networking with several researchers from all across the world.
Abstract: The diversity of data management systems affords developers the luxury of building heterogeneous architectures to address the unique needs of big data. It allows one to mix-n-match systems that can store, query, update, and process data based on specific use cases. However, this heterogeneity brings with it the burden of developing custom interfaces for each data management system. Existing big data frameworks fall short in mitigating these challenges imposed. In this paper, we present Bindaas, a secure and extensible big data middleware that offers uniform access to diverse data sources. By providing a RESTful web service interface to the data sources, Bindaas exposes query, update, store, and delete functionality of the data sources as data service APIs, while providing turn-key support for standard operations involving access control and audit-trails. The research community has deployed Bindaas in various production environments in healthcare. Our evaluations highlight the efficiency of Bindaas in serving concurrent requests to data source instances with minimal overheads.
Thursday, December 5, 2019
Running Kheops on a Mac OS host
This post discusses how to run Kheops from the OsiriX-Foundation on Mac OS, with Docker.
$ git clone git@github.com:OsiriX-Foundation/kheopsDocker.git
$ cd kheopsDocker/
$ sh script_run_docker.sh
Install newman
$ sudo npm install -g newman
/usr/local/bin/newman -> /usr/local/lib/node_modules/newman/bin/newman.js
+ newman@4.5.6
added 160 packages from 196 contributors in 5.481s
╭────────────────────────────────────────────────────────────────╮
│ │
│ New minor version of npm available! 6.9.0 → 6.13.2 │
│ Changelog: https://github.com/npm/cli/releases/tag/v6.13.2 │
│ Run npm install -g npm to update! │
│ │
╰────────────────────────────────────────────────────────────────╯
Replace line 10 in script_run_docker.sh
with
newman run postman/kheops-Get_tokens.json -e postman/kheops_localhost.postman_environment.json -g postman/Workspace.postman_globals.json --export-globals postman/Workspace.postman_globals.json
Save the file.
If you are using Docker for Mac, you may encounter the error listed in https://github.com/docker/for-mac/issues/2396
Creating pacsldap ... error
Creating db ...
ERROR: for pacsldap Cannot start service ldap: b'Mounts denied: \r\nThe paths /etc/localtime and /usr/share/zoneinfo/Europe/Zurich\r\nare not shared from OS X and are not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\Creating db ... done
ERROR: for ldap Cannot start service ldap: b'Mounts denied: \r\nThe paths /etc/localtime and /usr/share/zoneinfo/Europe/Zurich\r\nare not shared from OS X and are not known to Docker.\r\nYou can configure shared paths from Docker -> Preferences... -> File Sharing.\r\nSee https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.\r\n.'
ERROR: Encountered errors while bringing up the project.
As a work-around, remove all the occurrences of the below line from kheops/docker-compose.yml.
- /etc/localtime:/etc/localtime:ro
$ sudo mkdir /dcm4chee-arc
$ sudo chmod 777 /dcm4chee-arc
Share /usr/share/zoneinfo/Europe/ and /dcm4chee-arc from the Preferences of Docker Desktop in your Mac host machine.
Save the file and then re-run
$ sh script_run_docker.sh
$ sh script_run_docker.sh
Stopping db ... done
Stopping pacsldap ... done
Removing pacsarc ... done
Removing db ... done
Removing pacsldap ... done
Removing network kheops_default
Removing volume kheops_dcm4chee-ldap-ldap
Removing volume kheops_dcm4chee-ldap-slapdd
Removing volume kheops_dcm4chee-db-data
Removing volume kheops_dcm4chee-arc-wildfly
Removing volume kheops_kheops-db-data
Creating network "kheops_default" with the default driver
Creating volume "kheops_dcm4chee-ldap-ldap" with default driver
Creating volume "kheops_dcm4chee-ldap-slapdd" with default driver
Creating volume "kheops_dcm4chee-db-data" with default driver
Creating volume "kheops_dcm4chee-arc-wildfly" with default driver
Creating volume "kheops_kheops-db-data" with default driver
Creating db ... done
Creating pacsldap ... done
Creating pacsarc ... done
Creating kheopszipper ... done
Creating kheopsauthorization ... done
Creating pacsauthorizationproxy ... done
Creating kheopsui ... done
Creating kheopsdicomwebproxy ... done
Creating kheopsreverseproxy ... done
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5caa14fac54 osirixfoundation/kheops-reverse-proxy:ci-test "./etc/nginx/conf.d/…" 47 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8042->8042/tcp, 0.0.0.0:8048->8048/tcp kheopsreverseproxy
67552e9c9469 osirixfoundation/kheops-dicomweb-proxy:master "./replaceSecretsAnd…" 48 seconds ago Up 46 seconds 0.0.0.0:8049->8080/tcp kheopsdicomwebproxy
92710a77dd25 osirixfoundation/kheops-ui:master "./docker-entrypoint…" 48 seconds ago Up 46 seconds 80/tcp, 3000/tcp kheopsui
c9fa33eb693d osirixfoundation/kheops-authorization:dev "./replaceSecretsAnd…" 50 seconds ago Up 47 seconds 8080/tcp kheopsauthorization
0f267500942f osirixfoundation/kheops-zipper:master "./replaceSecretsAnd…" 50 seconds ago Up 48 seconds 8080/tcp kheopszipper
c95c6e4380c6 osirixfoundation/pacs-authorization-proxy:master "/bin/sh -c '. $NGIN…" 50 seconds ago Up 48 seconds 0.0.0.0:82->80/tcp pacsauthorizationproxy
89c52e69534a osirixfoundation/kheops-dcm4chee-arc-psql:latest "/script_entrypoint.…" 51 seconds ago Up 49 seconds 0.0.0.0:2575->2575/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:8443->8443/tcp, 0.0.0.0:8787->8787/tcp, 0.0.0.0:9990->9990/tcp, 0.0.0.0:11112->11112/tcp pacsarc
78bf11251bf7 dcm4che/slapd-dcm4chee:2.4.44-15.0 "/docker-entrypoint.…" 52 seconds ago Up 50 seconds 389/tcp pacsldap
f4628a1a1c44 osirixfoundation/kheops-database:demo "verify-secret-env-v…" 52 seconds ago Up 50 seconds 5432/tcp db
newman
kheops-Get_tokens
→ well-known
GET https://keycloak.kheops.online/auth/realms/travis/.well-known/openid-configuration [200 OK, 2.62KB, 657ms]
→ get token user 1 (titi)
POST https://keycloak.kheops.online/auth/realms/travis/protocol/openid-connect/token [200 OK, 2.01KB, 325ms]
→ get token user 2 (toto)
POST https://keycloak.kheops.online/auth/realms/travis/protocol/openid-connect/token [200 OK, 2.01KB, 314ms]
→ get token user 3 (tata)
POST https://keycloak.kheops.online/auth/realms/travis/protocol/openid-connect/token [200 OK, 2.01KB, 332ms]
┌─────────────────────────┬─────────────────────┬────────────────────┐
│ │ executed │ failed │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ iterations │ 1 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ requests │ 4 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ test-scripts │ 4 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ prerequest-scripts │ 0 │ 0 │
├─────────────────────────┼─────────────────────┼────────────────────┤
│ assertions │ 0 │ 0 │
├─────────────────────────┴─────────────────────┴────────────────────┤
│ total run duration: 1790ms │
├────────────────────────────────────────────────────────────────────┤
│ total data received: 7.53KB (approx) │
├────────────────────────────────────────────────────────────────────┤
│ average response time: 407ms [min: 314ms, max: 657ms, s.d.: 144ms] │
└────────────────────────────────────────────────────────────────────┘
Then go to http://localhost:8042 from your favorite browser.
Register yourself when it redirects to a page such as https://keycloak.kheops.online/auth/realms/travis/protocol/openid-connect/auth?client_id=loginConnect&redirect_uri=.........
It will take you back to http://localhost:8042/inbox after the registration. Now Kheops is ready to use!
![]() |
| Kheops Web UI |
I can even tweet from the Kheops Web UI with a link to the created album!
"My KHEOPS shared album. http://localhost/view/ttuArLPrFv834JQ88KaQGY #KHEOPS"
"My KHEOPS shared album. http://localhost/view/ttuArLPrFv834JQ88KaQGY #KHEOPS"
Apparently, the link is broken. It should be: http://localhost:8042/view/ttuArLPrFv834JQ88KaQGY
But I see the parallels with the concept of Óbidos (MEDIator) replicasets in the given UUID ttuArLPrFv834JQ88KaQGY.
But I see the parallels with the concept of Óbidos (MEDIator) replicasets in the given UUID ttuArLPrFv834JQ88KaQGY.
One can also create a sharing URL with upload/edit/delete capabilities (again, the port is not correctly used. But that is a front-end bug they can fix. For our purposes, we just need to add the port in the shared URL).
I can also view the images that I uploaded from OHIF viewer directly, by clicking that link. It uses their cloud hosted instance of the OHIF viewer to view the image stored locally, as can be seen from the URL.
We also observe the Docker containers initialized by this integrated project are - 1) db, 2) pacsldap, 3) pacsarc, 4) pacsauthorizationproxy, 5) kheopszipper, 6) kheopsauthorization, 7) kheopsdicomwebproxy, 8) kheopsui, and 9) kheopsreverseproxy. This system uses the managed Keycloak instance in the cloud for its authorization.
Sunday, December 1, 2019
Those who ruin the flights for others
| Batu Caves Murugan |
Recently we visited Malaysia - Kuala Lumpur and Batu Caves, to be precise. Batu Caves temple reminded our visit to Kathirgamam in Sri Lanka.
However, my memories of Kathirgamam are vague and fading, since I was
only 5 - 6 years old when we visited Kathirgamam twice.
Since Atlanta is far from Kuala Lumpur, I also had a long return flight to Kuala Lumpur via Doha. Usually, I watch a lot of movies on the flights. But this time, I decided to watch just 2 movies during the entire journey (to and from).
Since Atlanta is far from Kuala Lumpur, I also had a long return flight to Kuala Lumpur via Doha. Usually, I watch a lot of movies on the flights. But this time, I decided to watch just 2 movies during the entire journey (to and from).
In any economy class, there are 3 (or 4, if you sit in a middle seat) people who can ruin your flight. First, the person who sits in the seat behind you unless you sit in the last row. Second, the person who sits in front of you, unless you sit in the exit row or the first row in the block. Finally, the person(s) who sit(s) next to you.
The person who sits behind you has the potential to ruin your journey entirely. They can kick your seat non-stop. Some people do not realize how weak the economy class seat is. If you put your feet on the seat tray, or if you just constantly jerk it, the movements entirely affect the seat in front of you. It gives headaches. Please don't do that. Infants have the habit of kicking. If possible, make sure their feet are not directed towards the seat in front of them.
Second, the person who sits in front of you. They may recline their seat any time, giving your knee a sudden jerk. Some idiots choose to do that while the meals are served, making you spill your food or drink on you. I usually avoid reclining my seat (except maybe by a negligible degree). One exception: if you are in the seat behind me and continue to kick or jerk my seat, I WILL recline my seat to the fullest.
Second, the person who sits in front of you. They may recline their seat any time, giving your knee a sudden jerk. Some idiots choose to do that while the meals are served, making you spill your food or drink on you. I usually avoid reclining my seat (except maybe by a negligible degree). One exception: if you are in the seat behind me and continue to kick or jerk my seat, I WILL recline my seat to the fullest.
Finally, the person who sits next to you. They may occupy your seat area, lean on you and sleep, or cross their leg and touch you with their shoe or smelly socks. There was a time I was sandwiched in a middle seat with people on either side (window and aisle seats) occupying both hand rests. People, please give that armrest to the middleseater! On the other hand, once in a flight, as always, I let the middle-seat person use the entire armrest. But after a few minutes, I noticed I was being pushed to a corner. Then I found that that person has folded the armrest so that they can invade my space! Of course, I agree that they are a big person. However, it is NOT okay. I instantly put the armrest down back in its place, effectively cutting the huge person's belly which was invading my space by 25%. The person realized their mistake and retracted.
I wish everyone tries to be mindful of the surroundings and the neighbors. This will make our economy class flight experience much better.
I wish everyone tries to be mindful of the surroundings and the neighbors. This will make our economy class flight experience much better.
Subscribe to:
Posts (Atom)

