About Menelaos Bakopoulos

Mr. Menelaos Bakopoulos is currently pursuing his PhD both at Center for TeleInFrastruktur (CTiF) at Aalborg University (AAU) in Denmark and Athens Information Technology (AIT) in Athens, Greece. He received a Master in Information Technology and Telecommunications Systems from Athens Information Technology and a B.Sc. in Computer Science & Management Information Systems from the American College of Thessaloniki. Since April 2008 he has been a member of the Multimedia, Knowledge, and Web Technologies Group.

Posts by Menelaos Bakopoulos:

VBA: Read localstorage variable from Internet Explorer Object using temporary textfield

Here is a toy solution to access localstorage variables if they are not accessible directly.

Imagine we have test HTML webpage with HTML:

// Put the object into storage
localStorage.setItem('testObject', 'testString');

// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');


Quickly find all php short-tags (<?= )

I found a webapplication running on linux where the previous developer had been using  shortcodes <? instead of the universally enabled <?php ( see http://stackoverflow.com/questions/1386620/php-echo-vs-php-short-tags for more info) .

Unfortunately this caused the php code to not function unless shortcuts are enabled.


Toy Example App that downloads Google Play APKs using Java and APKLeecher service

In the toy example below everything is done with string manipulation to extract the actual APK URL and proceed with the download.
The following can be improved by using a DOM parser and searching for the specific elements of interest.


How to avoid git conflicts when working with a team?

A new team member started working on the same project as me the last week.
After checking their first commit, I noticed they mixed refactoring with eclipse auto-formatting. What made this an even worse  transgression was that they have a custom maximum character width defined in their editor.  I am not against aggressively formatting or refactoring code – except when it is related to critical production code.

GIT diff unfortunately cannot handle these kinds of source refactoring changes and lists the whole file as changed. See: http://stackoverflow.com/questions/21897386/git-diff-ignore-all-linefeeds-between-revisions

After reading I came across the following gem on stackoverflow (How to avoid git conflicts when working with a team? from User Christopher) which I quote/steal from.

Ask your team three questions:

  1. Do we enforce whitespace conventions?automatically finalize parameters.
  2. Do we generate textual build artifacts? For example, do we minify js, generate css rules from .sass or .scss files, or build xml configurations on the fly? Do we check them in?[…]

These three things cause the vast majority of our collective conflict pain:

Versioning Pain


Displaying base64 image data from DB using PHP

This is based on a question from stackoverflow that I answered.

Imagine we store within a database image data as the following:


After retrieving the data from MySQL how do we display it?

Convert base64 data to image:

In this case you need to use the header function to tell the browser you will send an image.
Following, you take the $data variable that you set from a MySQL query, and use base64_decode to display.

header("Content-type: image/gif");
$data = "/9j/4AAQSkZJRgABAQEAYABgAAD........";
echo base64_decode($data);

Clients request .php to display image:

In this case you want to encode the image data directly into a PHP generated page you would do the following:

echo '<img src="data:image/gif;base64,' . $data . '" />';

There is a downside to this in that the browser does not cache an image that is used on multiple separate pages (since each page contains the binary data within the HTML document).The second case is bad because the browser does not perform caching if the same image is shown on multiple pages.



Retrieve images of chemical structures using Excel VBA

The below is from an answer I posted on stackoverflow.

You can retrieve the chemical structure of an image using the following:

Sub Run()
getImage ("iron")
End Sub

Public Function getImage(ByVal name As String) As String
  Dim imgURL As String
  Dim XMLhttp: Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
  XMLhttp.setTimeouts 1000, 1000, 1000, 1000
  imgURL = "http://cactus.nci.nih.gov/chemical/structure/" + name + "/image"

  XMLhttp.Open "GET", imgURL, False

  If XMLhttp.Status = 200 Then
   'It exists so get the image
    Sheets(1).Shapes.AddPicture imgURL, msoFalse, msoTrue, 100, 100, 250, 250
  End If
End Function

This can further simplified to simply only use

Sheets(1).Shapes.AddPicture imgURL, msoFalse, msoTrue, 100, 100, 300, 300

Instead of downloading the image the twice, and simply using an error handler to catch when image not found.



JQuery Calendar and PHP: Handling Inserts

1) Getting Current Time in Javascript

The ISO 8601 date format can be utilized to convert the date on the browser side to a format that include timestamp information. Quoting from here:

Note that the “T” appears literally in the string, to indicate the beginning of the time element. Times are expressed in UTC (Coordinated Universal Time), with a special UTC designator (“Z”). Used in ATOM RSS feeds.

function fnISO() {
// Only works in Firefox using ECMAScript 5
var now = new Date().toISOString();

Result: 2009-08-06T23:36:31.390Z


WordPress Permalink Migration Warning (SEO semi-disaster)

If you follow those guides about migrating your blog to another webhost using import/export functionally…
You must rebuild your permalinks in the exact same format as the original webhost!

Go to Settings > Permalinks, and click save changes.
Make sure you choose the correct permalink structure.

If you do not, all your indexed pages on search engines (google, etc) will disappear and your site will be re-indexed losing you your traffic.

Accessing MYSQL server behind firewall using SSH

So, you want to access a MYSQL server but you only have an SSH terminal…
Not to worry, you can use SSH tunnelling to do this!

Basic Example

Example: ssh -L 3306:localhost:3306 user@IP -p SSHPORT

Now how do you control this dark ssh sorcery? Let’s break it down.

1) 3306:localhost:3306

  •  Open a port 3306 on my local machine to redirect
  • localhost:3306 means we are tunnelling to 3306 on SSH machine

2) user@IP

This is your username and the IP address of the server


This is the ssh port if it is not on 22.

Another Example

ssh -L 9000: user@ -p 1234

You would use this if you wanted to:

  • use your computer port 9000
  • to access the port 5000 on IP
  • through the SSH server
  • with SSH server port on 1234

Happy SSHing!


Allowing/troubleshooting AirServer through windows 7 firewall

AirServer allows apple mobile devices (Ipads, Iphones) to stream the screen using the airplay protocol.

Unfortunately, AirServer did not work immediately right off the bat on my own machine and required modifying the Advanced firewall settings.

If you see anything appearing even you you have selected Airplay on the device, it may be an issue of the firewall.

In order to test this, disable the firewall for the local network using the instructions here.

On my own computer, I entered the advanced settings of windows firewall and added two inbound rules in order to expose freely the UDP and TCP ports required by AirServer.

Advanced Firewall Settings

Inbound Rule




So, if your having issues using AirServer but do not want to disable the firewall add manual rules for the following ports as described on their site.

AirServer Ports