A powerful less-known function on Facebook – The Graph Search


As an expat I continuously use Facebook to network and to meet up with friends. Whenever I travel to a new city, I check first whether any of my friends live there. Graph Search allows me to gather this information. It is still in beta, therefore it needs to activated here and the language should be changed to English (US). It does not work from the mobile application, only from the desktop web site.

For example a simple query can be formulated this way to find out who is living in Berlin:

My friends who live in Berlin, Germany

N.B.: Feel free to use the autocomplete or suggestions. The TAB key can also help.

Or maybe it is worth to get some tips from the buddies of my friends:

My friends of friends who live in Berlin, Germany

Also there are some nice activities in the city, that my friends attend. Let us check it out:

Events iBerlin, Germany that my friends will attend

Any good places to eat out? Let Facebook answer this question.

Restaurants in Berlin, Germany that my friends like

However Graph Search can be also used to gather more information about your friends. I do not recommend to fully trust this, because things happen in the real life. Some examples:

What kind of pictures a friend likes:

Photos that János Binder likes

Which girls are interested in liking my photos. Maybe it is time to poke them 🙂 :

Females that like my photos

Photos that “my friends of interest”* likes – Replace the name with your friends name

List the photos that I posted in 2014.

Photos in 2014 that János Binder posted

What kind of event do I attend, what kind of music I like:

Events that János Binder attended

Music that János Binder likes

At last, but not at least, some fun with Graph Search 🙂

More examples: More clever uses

P.S.: There are some differences between various nationalities. For example Graph Search works pretty well on my Hungarian friends, because they share way more information on Facebook that my German friends.


A SofortÜberweisung “feature” – cancelling transactions without noticing the merchant

During the past years a new company, called SOFORT AG, wants to introduce a new way of payments. It offers a product called SofortÜberweisung, which provides way lower fees than normal credit cards transfer and the merchant can be “pretty sure”, that (s)he receives the payments. It works the following way: The customer is redirected to the SOFORT AG’s website, where (s)he is requested to enter the banking details to carry out a wire transfer. (Through a standard interface in Germany based on FinTS/HBCI protocol.) After making sure that the customer has enough credit on the account and the transfer has been accepted by the bank, the merchant gets a confirmation about the transaction.

A graphical overview about the functionality of Sofortüberweisung. Taken from: https://de.wikipedia.org/wiki/Sofortüberweisung


However here comes the trick, accepting and executing a transaction are two different things. This means that the wire transfers can be cancelled after ordering the product, however the merchant is not notified. One bank, where such cancellation is possible is the HypoVereinsbank. I am pretty sure that other banks also allow this, however I have not had the time to test them. Unfortunately I have not found any information about this on SOFORT AG’s website and many merchants are not aware that there is a chance that the payment will never arrive. (Update: Meanwhile I had a call with SOFORT AG, and I was told that the merchants are informed about this possibility in the contract and they have an “insurance package” against cases like this.)

The possibility of cancelling SofortÜberweisung transaction using the “löschen” button.

This possibility allows misuse of the SofortÜberweisung systems and the merchants can be betrayed up to a several thousand of Euros. (Some possible examples: imagine converting currency at TransferWise or getting first class tickets at Lufthansa, without payment.)

Although such misuse happens very rarely, I strongly advise the merchants to hold back the product (especially expensive products) until the wire transfer has been credited on the account.


Internet telephone software providers and softwares

It is very convenient to have an internet telephone account as an expat, because calling a land line is around 1-2 eurocent/minute and one can have a dedicated phone number, that one can bring easily to a new country. I prefer to use standardised solutions (such as SIP), because there are more software and specialised hardwares available and I am not locked to one company. Two providers those I use:

Neophone – Pro: European and USA landlines around – 1,7-2 eurocents/minute, Mobiles 12-17 eurocents/minute, pay per second Con: basic user interface, can be charged only with Hungarian credit card

Sipgate – Pro: German phone number with proper area code (e.g. having a prefix from Berlin, but it rings in Hungary), user friendly and professional interface Con: pay per minute, calling Hungary costs twice as much than Neophone.

User agents (softwares) to call:

Media5-fone (iOS, Android) – Pro: very powerful and very stable Con: have to pay to remove the ads, the user interface seems a bit clumsy.

Telephone (Mac) – Pro: free and open source app with an user-friendly interface


Experiment: having data-only mobile subscription

Being a heavy smart phone user I decided to sign up for for a data-based subscription where every extra SMS and calls are charged. I found a nice offer where 10 GB per month is included for roughly 69 DKK/month (~10 €) in Denmark, and that so far satisfies almost all of my needs. Also checking the monthly bills, I am familiar with my calling habits, therefore it would not be worth to have some hundred minutes included the package.

Unfortunately such offer does not exists in Germany and most of the subscriptions are limited to 200MB-1Gb of traffic. Also the mobile providers are still trapped with the so called “Flat-Rate-Fetish”, which means that the customer can call multiple mobile/landline networks freely depending how much they pay. This option was popular roughly a decade ago, however the providers failed to follow the changes. Even worse for example: Deutsche Telekom’s Hungarian subsidiary company has packages ranging between 100Mb-26Gb (for ~3-33€/month), but for some reason these successful options are not offered in Germany.

Creating self-updating databases in bioinformatics

We have combined multiple data sources in the project that I am working on and we wanted to make sure that whenever a new release of the source database is out it should be incorporated automatically. Thus we avoid the hassle of updating every year our service, so I think putting more time in setting up the pipeline is a worth investment. Therefore I provide a draft, how that pipeline can look like:

# Change to correct working directory.
cd ...
# Download UniProtKB if necessary.
wget -N ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.dat.gz
# Run make to update files as needed.
make all
# Import new tagging results into database.
../pgsql/bin/psql ...
rm database_*.tsv

The update script is a simple bash shell script. First it changes to the directory where the scripts and data files are located. The reason the script is usually scheduled to be launched by crontab and the working directory should be specified.

Afterwards wget with flag –N downloads the database only if it has been updated. Then make will check whether any of the databases have been changed and it will compile those targets which are dependent on the newer data sources.

The last part of the script takes care of the export to a SQL server. Calling a perl script it prepares a tab separated value file for PostgreSQL, and then the file will be imported in the database. Finally the temporary files are cleaned up.

Using makefiles in bioinformatics pipelines

Recently I am involved in many projects where parsing text files is necessary, and I use small scripts to archive the task. However the code should support pipelines and I found makefiles very handy.

Makefiles are efficiently used in software development to define a ruleset to automatically build programs and they have been used since the end of ‘70-es. The command called make reads makefiles (named: makefile or Makefile) and executes the commands within and produces the desired build. Moreover make can also invoke scripts, therefore it is a very handy utility in bioinformatics.

A makefile consists of multiple rules, and these rules define what components are needed to create the target using a script. The rules can be compared to a recipe in a cookbook, what ingredients are needed to cook a food, and the actual recipe the script which “compiles” our ingredients into the food on the table.

fried_chicken: raw_chicken oil

Formally speaking:

target1 [target2 ...]: [component1 component2 ...]
	[<TAB>command 1]
	[<TAB>command 2]

On the left side the targets need to be defined, on the right side just after the colon the necessary components need to be stated, however they are not necessary e.g.: creating a file by just “touching it”. Afterwards the commands are listed and they will create the targets. Usually make’s basic interpreter executes commands by using Unix’s default shell, the /bin/sh , so cat, cp, rm etc… commands can be invoked.

Another nice feature of make that a target can be a component. For example:

dinner: fried_chicken baked_potatoes
fried_chicken: ...
baked_potatoes: ...

Here if we issue make dinner , make will check whether fried_chicken and baked_potatoes exist, if not it will call those rules as well.

There are two common targets: all and clean. Programmers define all target to create every target, while clean  is responsible of launch an rm command to clean up the build environment.

There is another advantage of makefiles. Let us assume that that we have an all target and one of the components has been updated. (E.g.: A newer source file has been downloaded from the internet and it has a newer timestamp). After we issue make all again, it will discover that component is newer and call any target where that component has been listed. This feature allows to build up pipelines.

Before executing make, we may be interested what will be done.

make –n target1 target2 ...

Calling make with –n will show what commands will be issued upon a real execution.

I hope that, this article gave some brief introduction to make. There are a few links about make that I found useful:

Advanced Makefile Tricks – it is described here how to use special macros. This is very useful e.g.: passing components as arguments for the commands, pipeing output to the target etc.

Make (software) – Wikipedia entry about make where its history described and some examples are shown.

Price of cheap solutions: using home wireless routers in a business environment

Recently I spent some days in different hotels in Hungary and I was quite surprised that at many places, routers designed for home usage were set up to satisfy the needs of tons of users. The beloved manufacturer was TP-LINK and I was shocked on the solutions that I have seen:
1. The routers were connected in a daisy link structure with ethernet cables instead of star structure.
2. Many amateur so called network specialist do not know that same SSID can be assigned by multiple routers. In other to minimize conflict of channels it is thought that giving different SSID is a solution to the problem instead of cleverly assigning the radio channels. This is very inconvenient, because the user has to connect separately to every router.


3. TP-LINK is perfect for home and small business usage, however I would consider it twice before deploying for hundreds of users.

I am sure that such a solution is very cheap to set up initially, however the network might tend to break down and the work hours of a network specialist are expensive. This means that many CEO do not plan simply with a long term solution, but giving a kind of connection without taking into account that router errors are responsible for frustrated guests.

Interesting fact – Euro denominated bank deposit interest rate is higher in Hungary

It is obvious that putting my savings into a bank deposit in Germany is worthless since the interest rate is around 1%. Exchanging to Hungarian forints also does not make sense, because the exchange rate is unreliable and the currency got roughly 20% weaker compared to Euro than one year ago.

However I discovered that most of the banks offer to open an Euro based account and the interest rate is about 5-6%. And the costs? Roughly 1-2 Euro/month/account and a 16% tax on the interest. I think it is worth to keep the savings in my home country.

Don’t use client side scripting for Googlebot

Recently I have been involved in creating VIZBI website. The VIZBI initiative is an international conference series bringing together researchers developing and using computational visualization to address a broad range of biological research areas.

We have been using jQuery extensively on the website, however there was one drawback: compatibility Googlebot. Unfortunately it cannot interpret JavaScript, therefore data retrieved by client side, could not be parsed. We have redesigned the video page and the text and data is shown by PHP, and now it can parsed by Google as it is shown here:


Meanwhile we still use jQuery and plugins built upon it in order to arrange and visualize the elements on the webpage in a nice way. The following links helped us to have Googlebot crawled our website.

Vimeo SEO: How To Get Embedded Vimeo Videos Into

Tricky situation: video sitemaps for external videos + JS overlay

Presentation tools and tips

Since giving presentation is an essential skill, I would like to share some technical ideas to make one more successful on the stage. These features exists in the common presentation programs e.g.: PowerPoint, Keynote etc.

  1. Aim for 1024×768 resolution
  2. Modern displays are capable of higher  resolutions, however most of the beamers are limited to 1024×768. This means that the figures in the slides can get pixelated, small and crappy. Here it is shown, where the resolution can be changed and also the presenter view can be turned on.

  3. Use Presenter View (for reading the notes and checking the time)
  4. Nothing is more annoying during a presentation when the speakers talks for 50 minutes instead of 30 minutes as it was scheduled. Moreover it is a common error that speakers use slides as note for themselves and reading them loudly. Presenter View helps to solve this issue by showing notes, elapsed time on the speakers monitors, and the next slides.
    In order to access this functionality, mirroring has to be turned off in display settings, and extended display option has to be chosen. More info here: Windows 7, Mac OSX

  5. Zooming on text
  6. I am used to attend coding and hacking session, where the size of text is important. Hopefully modern operating systems include a built-in tool for zooming. E.g. Windows XP/7 has the Magnifier tool by default:
    While Mac OSX uses the following key combinations for launching the zooming functionality:
    However I recommend for Windows users a tool called ZoomIt. As addition to the default zooming capabilities, it allows the presenter to write anywhere on the screen or to draw on the presentation. Very handy!

  7. Give yourself 15 minutes to set up the laptop and a the display

Compatibility between different technical equipment is not always perfect. It is better to reveal the technical issues sooner, than to solve them in front of the audience.