Somehow lately I have been in numerous discussions about programming languages, and which language is interesting, better, etc. The only consensus, is that there is no consensus. Different people choose different programming languages, and most of the time there are quite opinionated about them. (I do have my personal preferences, which I express them quite vividly ;)). However, there is another point that most people also agree:

If you are a programmer, you can learn and use any language.

I can easily agree with that. If someone knows the basic stuff of programming, and has learned the required discipline, the basic data structures and most important a certain way of thinking, then if it is much easier and faster to learn a new programming language. A programmer also has a large corpus of problems that he already well understands and can use them as playground in order to acquire the nuisances of the new language. It can be more hard if you learn also a new  programming paradigm, but even in this case the odds are much better.

However, the fallacy arrives from the distortion of the above sentence. A lot of people use this sentence in the following way:

You are already a good programmer, so I am sure it will be really easy for you to pick <<insert your worst possible language>> very fast and write code in it.

I regard this as a fallacy,because people mix ability with will. Pardon the improper wording but it sounds like the equivalent of : “You are a guy, I am sure you can have sex with any girl”. The reason that I do have the required skills (equipment in this case) to do something, does not mean that I want to do it. Of course, if I am forced I can certainly do it, but it will be bad performance, miserable, and in the end probably will leave a really bad feeling (sometimes even an trauma).   The reason people fall into this fallacy, is that they do not regard programming as an art, but as a mundane pressing of buttons that produces something useful after a proper level of coffee.

I do regard programming as a form of art, close to writing a prose (with more strict rules). It is not just the solving of a well formed mathematical problem (in many cases), but also a form of expression. This differentiates beautiful code, from ugly one. There is even research that shows programming in the brain activates more the language centers than the mathematical ones (for example here : but I have not looked exhaustively into it).  So different programming languages matter because they are the tools of our expression (like a painter uses different types of brushes). These are very important tools, because as we shape our tools, the tools shape us back. I have seen very few people who are indifferent on the programming language they use, but even in this case most of them have quite strong preferences, but also quite tolerant on what they would use. Each person has different level of tolerance on different things, but it not always wise to test them. 😉

Αυτή την ιστορία ήθελα να την γράψω εδώ και αρκετά χρόνια, αλλά ποτέ δεν είχα καθίσει να το κάνω. Την είχε διηγηθεί ένα άνθρωπός που μου είχε μάθει αρκετά πράγματα και πλέον μπορώ να τον λέω φίλο. Έχει μια μοναδική ικανότητα να διηγείται ιστορίες και θα προσπαθήσω να κρατήσω το ύφος, αν και δύσκολο. So it goes …

Ήταν κάποτε σε μια ζούγκλα μου ζούσαν διάφορα ζώα και μέσα σε αυτά και ένα μικρό σκυλάκι. Το σκυλάκι αυτό όμως είχε το μεγάλο πρόβλημα ότι όλα τα υπόλοιπα ζώα το αγνοούσαν εντελώς και το περιπάιζαν. Αυτό φοβόνταν τους πάντες. Δεν μπορούσε να το αντέξει άλλο αυτό και αποφάσισε να δώσει τέρμα στη ζωή του. Αποφάσισε να πάει να πηδήξει από ένα γκρεμό, αλλά και αυτό του φαινόταν βουνό. Πάνω στη προσπάθεια του, τον είχαν πιάσει κλάματα και μεγάλη απογοήτευση. Εκείνη τη φορά έτυχε να περνάει από εκεί η γριά αλεπού (εδώ πέρα η αλεπού όχι με την έννοια της πονηριάς, αλλά με την έννοια της σοφίας, που είχε δει και ήξερε πολλά πράγματα, και μέσα σε αυτά τη ζωή). Το είδε έτσι σε μαύρο χάλι και αποφάσισε να το ρωτήσει τι είχε πάθει. “Τι να έχω πάθει”, είπε το σκυλάκι, “όλα τα ζώα με αγνοούνε, κανένα δεν με φοβάται, ενώ εγώ τρέμω και τη σκιά μου. Δεν μπορώ να επιβιώσω άλλο”. Αφού τον άκουσε η αλεπού του λέει: “Έχω μια λύση στο πρόβλημα σου, αν αυτό σε απασχολεί. Την επόμενη φορά που θες κάποιος να σε φοβηθεί, απλά στύλωσε τα πίσω σου πόδια και άρχισε να γαβγίζεις όσο πιο δυνατά μπορείς, αλλά με όλη σου τη δύναμη. Αυτό θα δουλέψει.” Το σκυλάκι ήταν αρχικά πολύ δύσπιστο, αλλά αποφάσισε να το δοκιμάσει, αφού άλλη λύση δεν έβρισκε, πέρα της αυτοκτονίας, και άλλωστε δεν είχε τίποτα να χάσει.

Έτσι και έγινε, και το σκυλάκι εκεί που πήγαινε στο δάσος συνάντησε πρώτα ένα λαγό. Με μισή καρδιά, έκανε αυτό που του είπε η αλεπού, άλλωστε ένας λαγός ήταν σκέφτηκε. Στύλωσε τα πόδια του και άρχισε να γαβγίζει όσο μπορούσε. Ο λαγός που είδε τέτοια αντίδραση, ενώ κανονικά αγνοούσε το σκυλάκι, ξαφνιάστηκε και άρχισε να απομακρύνεται όσο πιο γρήγορα μπορούσε. Το σκυλάκι έμεινε άναυδο και χάρηκε μέσα του. Συνέχισε να προχωράει και συνάντησε ένα λύκο. Η ιστορία επαναλήφθηκε  και ο λύκος απομακρύνθηκε. Το σκυλάκι είχε αρχίσει να παίρνει να πάνω του και αποκτά εμπιστοσύνη στον εαυτό του. Μέχρι και με το λιοντάρι που συνάντησε έγινε το ίδιο πράγμα, μιας και ο λιοντάρι προτίμησε να φύγει και αυτό σκεπτόμενο “που να μπλέξω τώρα, που να ξέρω τι μπορεί να έχει το μικρό σκυλάκι”. Πλέον η αυτοπεποίθηση στο σκυλάκι είχε φτάσει στο ζενίθ και πλέον έκανε το ίδιο κόλπο σε όλα τα ζώα που συναντούσε και όλα έφευγαν, διότι ποιος θα τα έβαζε με κάποιο τρελό …

Έτσι πέρασε τη μέρα του απολαμβάνοντας τη νέα αυτή του δύναμη, ενώ είχε φουσκώσει από περηφάνια και χαρά. Ήταν η καλύτερη μέρα της ζωής του. Έπεσε το βράδυ και γύρναγε στη φωλιά του μέχρι που είδε στο βάθος μια σκιά να περνάει. Πλέον ήξερε τη διαδικασία, στύλωσε τα πόδια του και άρχισε να γαβγίζει όσο πιο δυνατά μπορούσε. Η σκιά όμως αντί να απομακρυνθεί, σταμάτησε για λίγο και άρχισε να πλησιάζει προς αυτό. Το σκυλάκι μην ξέροντας τι άλλο να κάνει συνέχισε να στυλώνει ακόμη πιο δυνατά τα πόδια του και να γαβγίζει ακόμη πιο πολύ. Η σκιά συνέχισε να πλησιάζει. Το σκυλάκι πλέον γάβγιζε με όλη του τη δύναμη έχοντας αρχίσει να βγάζει αφρούς από στο στόμα, η καρδιά του χτύπαγε στο όριο. Η σκιά πλησίαζε, και ξαφνικά η σκιά ξεπρόβαλε μπροστά του, πάνω που το σκυλάκι είχε παγώσει. Ήταν η γριά αλεπού.

“Καλησπέρα” λέει η αλεπού. “Καλησπέρα”, απαντάει το σκυλάκι, “εσύ είσαι και με κοψοχόλιασες;” “Ναι”, κάνει η αλεπού, “Κανονικά δεν θα ερχόμουνα. Από ότι είδα και μαθαίνω το κόλπο σου το κάνεις καλά και έχει πιάσει, τα ζώα πλέον σε φοβούνται και σε μετράνε. Απλά πριν φύγω, ήθελα να σου πω ανεξάρτητα του τι θα γίνει, να θυμάσαι για εμένα θα είσαι για πάντα εκείνο το μικρό κακόμοιρο σκυλάκι …”


May 6, 2015

The title is Yet Another Article On SSH VPN, so this is used as a personal note keeping for creating a SSH VPN using a manual method.

We assume that we have the running OpenBSD with ip and the running Linux with ip The tun that we will create will use the IPs on the server side and on the client side.

  • Enable the support on server side. Put in /etc/ssh/sshd_config:
    PermitTunnel yes

    Also in this case point-to-point will be enough.

  • Client side:
    client# ip tuntap add dev tun0 mode tun
    client# ifconfig tun0 pointopoint
  • Server side:
    server# ifconfig tun0 create
    server# ifconfing tun0
  • For the final ssh:
    client$ ssh -w 0:0

Since in both machines we use the tun0 interface on the -w option we use the 0:0. If the server was using tun1 then the option whould be -w 0:1.
Then we need the relevant route commands to make the traffic flow this ssh vpn tunnel.

It is Dr. for you, beaches!

February 23, 2015

Yeap!, it seems that finally I did make it. I’ve completed my PhD thesis and now I can add the Dr. in my business card (this is something that is hardly likely to happen, since I don’t like the Dr. title, and I also hate having a business card). So the birds are singing and the sun is shining (that’s the pun about the beaches on the title), at least for me. There is the quote from Randy Pausch

Experience is what you get when you didn’t get what you wanted. And experience is often the most valuable thing you have to offer.

and given that it took me a lot of time to complete it .. I can argue that I have gained a lot of experience. So I can share some of it with my faithful readers (Yeap all the two of you). Following the usual pattern I’ll present an unsorted list of random thoughts. I believe that each one is different so most of the following stuff might not be applicable, but some people might find them interesting.

  • One of the most useful tools is the log book. You have to log everything that you do, or plan to do, and finally all the results. Perhaps this is the MOST important tool in order to complete research successfully. The moment I started to keep a log book with ideas, experiments, results, questions, etc. it was the moment that my work got a lot of boost and I was able to move forward. Document as much as possible, it is better to have more information than lack of information.
  • Also keep the raw results of your experiments, simulations etc. It might be a small waste of space, but you never know when you might have another great idea for further analysis, and realize that all is gone, and you have to redo the whole process (insert double facepalm here).
  • Review the papers that you find important thoroughly.  I was lazy, and I kept only a few notes on each one. In the end when I wanted to write the related work section, I had to redo the whole procedure. If I had kept good notes (see previous bullet) a lot of wasted effort would be avoided
  • Write, write, write. I hate writing (one of the reasons that it took so long), but it is essential. Have a look in this video. Then have another look. The important take away is that we can think more clearly when we write, than when we just think.
  • The supervisor plays a very important role. What you prefer from your supervisor is a matter of personal test. What I valued was freedom to study and try different things. Thankfully, my direct supervisor gave me the freedom I wanted. So choose your supervisor as best as you can, if possible (I was lucky in this regard). Also the supervisor acts as a reality check for your progress.
  • Don’t forget the rest of your life.You are still a student, so you can have a different time management and priorities compared with someone that works in the industry. This doesn’t mean that you can work less (you might work more), but your schedule can be more flexible. PhD is a marathon (ok not as big as i did it) and not a sprint. You need to take care of other aspects of life or you might become out of fuel. Human relationships are able to prevent the tank from emptying permanently
  • Exercise. Helps not only the body, but also the brain
  • Find great teachers and learn from their ways. This plays an important role if you like to teach (I do)
  • Find also another field that interests you and try to learn a bit. This helps to prevent your mind to be hyper focused, making you live only on your own little world. (For some periods this is necessary, but not for the long run). Thankfully, I met people (1,2) who offered their knowledge and bared with me.
  • A small piece of advice: If you feel disappointed at some point, in the end when you see the final version of your Thesis, your disappointment will reduce.  (The supervisor again is important for the reality check in some cases)

Now I can join the rest of you .. on the beaches 😉

Παξοί survival guide

August 14, 2014

Συνεχίσουμε την παράδοση των survival guides μετά από τις διακοπές (και αφού έχουν περάσει μερικές μέρες να έχουμε τις εμπειρίες κατασταλαγμένες). Το συγκεκριμένο survival guide θα μπορούσε να είναι η εξής φράση:

Πάμε στον Μπάμπη μένουμε εκεί αν έχει δωμάτια, κάνουμε τις καταδύσεις μας και ακούμε τις συμβουλές.


Pro Tip που ισχύει ακόμη και σήμερα: Για να μην γυρίσουμε όλο το Γάιο ψάχνοντας τον Μπάμπη, αντί να δούμε το χάρτη που έχει στο site, βλέπουμε τον χάρτη που υπάρχει στο paxos-map

Αλλά για να μην το κάνουμε τόσο σύντομο ας τα πούμε τα tips και πιο αναλυτικά:

  • Τα νερά είναι κλασσικό Ιόνιο, πρασινογάλανα και τα σχετικά (Αλόννησος δεν είναι θα πώ εγώ, αλλά ποιος με ακούει πάλι). Πολύ καθαρά και πολύ όμορφα.
  • Μικρό νησί, άρα τα βασικά γίνονται πολύ εύκολα και μετά μένει και χρόνος να ξεκουραστείς (Αντίθετα με τις κακές γλώσσες και μετά από 9 μέρες δεν βαρεθήκαμε και καθόμασταν και επιπλέον άνετα).
  • Γενικά ακριβό νησί, τόσο σε διαμονή όσο και σε φαγητό/προμήθειες. Από την άλλη η ποιότητα ήταν πάντα καλή, επομένως ήταν κάπως σε φάση ό,τι πληρώνεις παίρνεις.
  • Πού θα μείνουμε; Αν δεν πάμε στον Μπάμπη επειδή δεν έχει, τότε μια άλλη καλή επιλογή είναι το Angela Studios, που ζητάμε να μείνουμε στα πάνω διαμερίσματα διότι έχουν μπαλκόνι με πολύ καλή θέα. Θέλει μια προσοχή στο ψυγείο, γιατί για κάποιο λόγο όταν καθαρίζαν το δωμάτιο κλείναν και το ψυγείο.  Από εκεί και πέρα η θέα αξίζει και ήταν και καθαρά. Το κουλό: το κλείνουμε μέσω  διότι το απευθείας κοστίζει πολύ περισσότερο. (η ανάπτυξη έφτασε). (Ο Μπάμπης από του χρόνου στο booking). (Αυτά βέβαια ισχύουν αν δεν μένετε σε μια από τις τόσες βίλλες στους Παξούς .. που τότε μάλλον λάθος blog διαβάζετε)
  • Πού θα φάμε; Πρώτη επιλογή το παξοιμάδι στον Γάιο, οι τιμές είναι οκ για τις μερίδες (οι πατάτες του είναι καταπληκτικές) και στο τέλος φέραν και κέρασμα waffle. Για ψάρια είτε στο Απάγκιο (Γάιος), είτε στον Γιό (Λογγός) που οι σαρδέλλες είναι πολύ καλές. Για κατι πιο “ψαγμένο” μπορούμε να φάμε στον Μπύρο που εκεί θα γνωρίσουμε και τον εστιάτορα και θα ακούσουμε και ωραίες ιστορίες (ρωτήστε για το όνομα του μαγαζιού). Για γλυκό στο capriccio στον Γάιο. Έχει κρέπες και waffles με δικό τους παγωτό. Αν πάμε βράδυ (μετά τις 8:00) δοκιμάζουμε το παγωτό φουντούκι – nutella.
  • Πού θα πιούμε καφέ; Εδώ τα πράγματα δύσκολα. Ο καφές στους παξούς χωρίζεται σε 2 κατηγορίες: Δεν πίνεται, και ίσα που πίνεται. Τα μόνα 2 καφέ που ήταν στην δεύτερη κατηγορία είναι το Pio-Pio στον Γάιο και ο Μπουρνάος στο δρόμο Γάιος – Λάκκα (μετά τα μαγαζιά). Για τον Μπουρνάο ο καφές δεν, αλλά είχε γλυκά του κουταλιού και υποβρύχιο βανίλλια που έλεγαν πολύ. Γενικά, νεράκι εμφιαλωμένο, φακελάκια nescafe, γάλα νουνου και γυμναστική στα χέρια
  • Παραλίες: Όπως είπε μια ψυχή (Ο Μπάμπης ντε) οι παραλίες στους Παξούς είναι “copy – paste” και δεν έχει άδικο. Θα βρούμε στις παραλίες, βότσαλο, πιο μεγάλο βότσαλο, κοτρόνες and that’s about it. Η Λάκκα αποτελεί εξαίρεση διότι αφού μπούμε στη θάλασσα, μετά από 2-3 βήματα έχει κάτω άμμο. Επίσης η παραλία του Ερημίτη είναι ιδανική για να δούμε το ηλίοβασίλεμα (έχει χωματόδρομο μέχρι να φτάσουμε). Αν όμως πάμε Αντίπαξους (που θα πρέπει να πάμε) έχουμε τις 2 παραλίες Βρίκα και Βουτούμι που έχουν απίστευτη άμμο. Προτιμάμε Βουτούμι, διότι στη Βρίκα τα μαγαζιά είναι μέχρι έξω. Tip: πάμε όσο πιο νωρίς μπορούμε για να προλάβουμε τις free ξαπλώστρες και ομπρέλες να τις βάλουμε στην άμμο. Επίσης στην επιστροφή παίρνουμε όποιο βαρκάκι θέλουμε και δεν περιμένουμε να πετύχουμε αυτό που μας πήγε (ολοι την ίδια δουλειά κάνουν).
  • Όταν πάμε στους Αντίπαξους πάμε και μια βόλτα να δούμε και τις σπηλιές και τον τριπητό (αν δεν έχουμε άλλο τρόπο να πάμε να τα δούμε).
  • Καταδύσεις ΝΑΙ. Ιδίως η νυχτερινή έλεγε πάρα πολύ. Και βέβαια καταδύσεις που δεν παθαίνουμε κοκο-μπλόκο και δεν θέλουμε να είναι complicated πάμε με τον Μπάμπη διότι και έχει όλα τα comfort (κακομαθαίνει τον κόσμο φτιάχνοντας εξοπλισμούς) και εμπειρία έχει και καλό εξοπλισμό έχει. Μην σας παραπλανήσει το χαλαρό του στύλ, είναι πολύ προσεχτικός και δεν θα σας αφήσει να γίνει βλακεία. Μην περιμένετε να δείτε άπειρα ψαράκια, αλλά όλο κάτι βλέπουμε
  • Εκτός από καταδύσεις αξίζει να νοικιάσουμε σκάφος. Το νησί ειναι πολύ μικρό και μπορείς να το γυρίσεις εύκολα. Έχει και αρκετά σημεία που αξίζουν και μπορείς να πας μόνο με σκάφος.
  • Για night-life, ποτό αξίζει και στον Erimitis bar and restaurant που έχει θέα την παραλία του Ερημίτη και από εκεί θα είναι ωραίο το ηλιοβασίλεμα, αλλά και στο Μουράγιο στον Γάιο που και τα ποτά ήταν καλά, και η ποσότητα καλή και οι τιμές λογικότατες.


Following the previous post I wanted to make it possible to automatically provide the vfat partition I have to the windows VM. The best way to accomplish that was to use the shared folder abstraction from virtualbox together with the udev automounting. The solution is as follows:

  1. Create the correct /etc/fstab entry:
    UUID="XXXX-XXXX"                /media/external-win    vfat    rw,users,noauto,uid=YYYY,gid=ZZZZZ         0 0

    where the XXXX-XXXX is the UUID of the vfat partition found by blkid, YYYY and ZZZZ are the uid and gid of the user that is using it.

  2. Create the corresponding entries for the udev rules. (file /etc/udev/rules.d/10-externalhd.rules )
    KERNEL=="sd?2", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/bin/mount /media/external-win", RUN+="/bin/su - user -c '/home/user/bin/ start'"
    KERNEL=="sd?2", ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/bin/mount /media/external-win", RUN+="/bin/su - user -c '/home/user/bin/ stop'"

    where user is the username you use. And the remove action is done to remove the folder when the HD is removed.

  3. The script that is run as the user. The script checks whether the windows vm is running  and if yes uses the sharedfolder virtual box command to attach the folder to the vm. It is saved under /home/user/bin/
    case "$1" in
    	vboxmanage list runningvms | grep 'windows-vm' > /dev/null
    	if [ $? -eq 0 ]
    	    vboxmanage sharedfolder add windows-vm --name "external-win" --hostpath /media/external-win --transient --automount
    	vboxmanage list runningvms | grep 'windows-vm' > /dev/null
    	if [ $? -eq 0 ]
    	    vboxmanage showvminfo windows-vm | grep '/media/external-win' > /dev/null
    	    if [ $? -eq 0 ]
    		vboxmanage sharedfolder remove windows-vm --name "external-win" --transient
    	echo "Usage: $0 {start|stop}" >&2
    	exit 3

This way in the windows vm when I plug the HD, I can get at NETWORK \\VBOXSRV\external-win the vfat partition. The automount feature doesn’t work as I would wish together with the the transient option, but perhaps having a script on windows to monitor the existence of this directory and provide the automatic mapping, could possibly even solve this situation.

For being on the safe side, after following the advice of two friends, I decided to use full encryption on the HD of my laptop. Since this is an SSD, and I’m a bit worried for the use, and also I want to have more storage, I also opted for an external 1TB HD. In order to be on the safe side I also decided to break the external HD to two partitions, one encrypted with ext4 for linux use, and more critical data, and one with vfat, for portability reasons, and less critical data (Monty pythons rips go to first partition 😉 ).

Since in such cases I have the manual mounting etc. I decided to make the process in such a way, that the when the HD is inserted, I will be automatically mounted to a proper locations, and ready to use. In order to achieve that I used LUKS with a key file. The process I used is the following.

  1. Create the two partitions on the HD. Both of them are primary partitions. I used gparted for this, although fdisk could be yalso sufficient. The HD is on /dev/sdb, and I created /dev/sdb1 as unallocated space and /dev/sdb2 as vfat partition.
  2. Create the LUKS encrypted volume.
    mkdir -p /etc/keys
    head -c 256 /dev/randon &gt; /etc/keys/externalhd
    cryptsetup open --type luks /dev/sdb1 externalhd --key-file /etc/keys/externalhd
    mkfs -t ext4 /dev/mapper/externalhd
    cryptsetup close --type luks externalhd
  3. Using blkid I got the UUID of the LUKS partition on the HD and added the corresponding line to /etc/crypttab
    externalhd UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /etc/keys/externalhd luks,noauto,noearly,quiet

    with this it is easy to have the disk decrypted by running cryptodisks_start externalhd

  4. From blkid I use the UUID of the ext4 partition inside to add to /etc/fstab
    #for the external HD
    UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyy"    /media/external        ext4    rw,noauto,nodev,nosuid,errors=remount-ro 0 0

    therefore mount /media/external works like a charm

  5. The last part was to have the automount functionality. For this purpose I used udev to execute the commands when the external HD was attached. The first step is to get the information needed from udev to recognize the HD. The commands was
    udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

    after some poking to see what was the best combination, I created the following /etc/udev/rules.d/10-externalhd.rules

    #external HD
    KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/usr/sbin/cryptdisks_start externalhd", RUN+="/bin/mount /media/external"

Now after unplugging and plugging back the HD and waiting a few seconds, I have it automount on /media/external and ready to use. Perhaps it is not the best solution, but it is something that seems to work. Some thoughts on different options

  • I could use LVM on top of LUKS (as on the normal installation) and also have a vfat partition encrypted. But at the momend I didn’t bother much
  • I should backup the LUKS superblock (this is done easilty with luksHeaderBackup)
  • I should also add a key, and not rely only on the key file, So that I can mount the external HD to another machines if needed, or if my laptop SSD fails. This is easily done with luksAddKey