Categories
Technology

Pair Programming with ChatGPT

Pair programming is a software development technique in which two programmers work together at one workstation. One, the driver, writes code while the other, the observer or navigator, reviews each line of code as it is typed in. The two programmers switch roles frequently.

~ Wikipedia

Here’s a fun meme!

For a programmer, I think this makes sense. Generative AI has been evolving rapidly. It is only a matter of time (if we are not already there) to reach a point where it will be able to generate source code of adequate, or even high-quality. And this will force us (programmers) to re-invent our role in the industry.

In this post, I am sharing my first pair programming experience with ChatGPT, which helped me to quickly solve a problem (and make an open source repo out of it).

The problem

The other day, I needed to generate a set of QR codes. I am trying to have my first book published (more on that on another post), and we (my team and I) want to enhance the experience by adding QR references on strategic places inside the book. Our first thought was to go and create them manually, using one of the QR generator services available for free. And then, limitations and blockers started coming our way:

  1. Some services had trial / freemium plans that allowed for the QR code creation but, after the trial’s end, only a limited set of the generated QR codes would continue to be functional.
  2. The task was time-consuming. It was counterproductive to have someone do it by hand, multiple times for different services.
  3. The services we spotted didn’t offer bulk QR code generation, we had to create our QR codes, one by one.

Train of thought

At first, we started looking for alternative services online, preferably with bulk QR code generation. While searching, I started thinking that making my own bulk QR code generator shouldn’t be that difficult. I didn’t have previous experience with QR generation applications. However, I was sure that with a little research, I would find some open source libraries that could help me build something quickly.

With the first Google search, I found some great blog posts about generating QR codes. Nowadays, Python is my go-to programming language so, I intentionally looked for solutions in Python. I started reading the first post, and that was when it struck me; what if I asked ChatGPT to build the application for me?

Doing Agile with ChatGPT

OK, I had ChatGPT to work as my software engineer. That meant I had to play the role of the Product Owner and let it know what we were trying to build. I started by crafting the following requirements (in the form of a ChatGPT prompt).

Hello Miss Lemon*,

I want you to help me create a Python script with the following spec:

  • It will use the library Segno to create qr codes
  • It will take as input a .csv file that will contain the following columns:
    • url
    • icon
    • file name
  • For every row of the .csv file the script will do the following:
    • it will create a QR file in .png format with size 3000×3000 pixels.
    • The QR file will have as file name the “file name” of the respective .csv column.
    • The QR will lead to the url of the respective url column of the CSV.
    • In the center of the QR it will include an icon with the file path of the respective icon column of the csv file.
  • The png file will be saved in the parent folder inside a folder called qr_codes

* I am using a custom ChatGPT I have created, that I call Miss Lemon (inspired by the iconic character of Miss Lemon, the personal assistant of Hercule Poirot)

We wanted the result to look like this:

Proof of Concept

With the above prompt, ChatGPT created a proof of concept. In addition to the source code in Python, it also provided me with the following context:

This was very helpful as it highlighted which Python libraries I should have installed in order for the code to work and a sample of the input.csv file that was required for the bulk QR code generation.

The initial source code created by ChatGPT didn’t work 💩, due to the following error:

AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'

But.. Stack Overflow quickly solved that, and I had my first QR code generated 🏆!

Iterations

Iteration #1: Functionality improvements

Now that I had a proof of concept, I wanted to make the “product” better. So I fed the result of the application back to ChatGPT and asked it to improve quality with the following prompt:

The new source code suggested by ChatGPT worked fine! Again, ChatGPT provided context on the enhancements:

Iteration #2: Source code documentation

Now that we had an application working properly, the next step was documenting our code. So, I requested ChatGPT to add proper docstrings and comments following Python’s best practices. Here’s the prompt and ChatGPT’s reply/reasoning:

I want you to document it following best practices on Python source code documentation. Also explain in the end why you documented it like that.

(Bonus) Basic Error Handling:

ChatGPT automatically implemented checks for missing files and invalid input data. For example, it added logic to verify the existence of icon files before attempting to overlay them on the QR codes. This ensured the script wouldn’t crash if something went wrong.

Iteration #3: README

With the script ready, I wanted to package the project in a way that would be easy for others to use. This meant adding a README.md file with clear instructions. I asked ChatGPT to draft the README, and it delivered a comprehensive document that included:

  • An overview of the project.
  • Installation instructions for dependencies.
  • Detailed usage steps with examples.
  • Guidance on customizing QR code resolution and icon size.
  • Error-handling tips for common issues.

You can find the README.md file, alongside the whole project, available in this Github repository.

Conclusions

In this post, we created a small-size (in terms of functionality) application. ChatGPT created the respective source code and, after “further discussion” via prompts, it improved the code base.

Notable highlights of the process were:

  • ChatGPT was able to infer some of the requirements (i.e. adding basic error handling in the code).
  • While the discussion was evolving, ChatGPT remembered and applied previous requests. For example, the request for a documented source code was done once, and it was automatically applied in every following iteration by ChatGPT.

I believe that Generative AI can help us craft high-quality source code by generating parts of it and iteratively improving them. For this process to be effective, we have to be able to converse with Generative AI models in a clear and structured way.

NOTE: As I continue to work on this project, I will probably either update this blog post or create follow-up posts, so stay tuned!

Categories
Thoughts

Συζητώντας με το ChatGPT για τις ανάγκες πρασίνου στον Δήμο Θεσσαλονίκης…

Photo by Lazarescu Alexandra on Unsplash.

…ή αλλιώς η αξία των ανοικτών δεδομένων για την τοπική αυτοδιοίκηση!

Στον Δήμο Θεσσαλονίκης υπάρχει η Εφαρμογή Διαχείρισης Αστικών Δένδρων (GreenTree). Σε αυτήν την εφαρμογή, εν γένει, ο επισκέπτης μπορεί να δει την κατανομή των δένδρων στον Δήμο Θεσσαλονίκης σε μορφή χάρτη αλλά και κάποια στατιστικά στοιχεία για το πράσινο στον Δήμου Θεσσαλονίκης 👇

Η Θεσσαλονίκη πιθανότατα δεν έχει όσα δένδρα θα έπρεπε. Το καταλαβαίνουμε αυτό – στην πράξη – όταν, τους καλοκαιρινούς μήνες κυρίως, περπατούμε στο κέντρο της πόλης και η θερμοκρασία είναι υψηλή ενώ οι σκιές λίγες. Σκεπτόμενος λοιπόν ότι μάλλον δεν έχουμε αρκετό πράσινο, μου δημιουργήθηκαν οι εξής απορίες:

  • Τι σημαίνει αρκετό πράσινο σε μια πόλη;
  • Αν δεν έχουμε όσο πράσινο πρέπει, πόσα δένδρα παραπάνω θα έπρεπε να είχαμε;
  • Τι συμβαίνει σε άλλα ευρωπαϊκά αστικά κέντρα;

Κοιτάζοντας την εφαρμογή του Δήμου Θεσσαλονίκης και τα δεδομένα που μας παρέχει, αναρωτήθηκα αν θα μπορούσα να βρώ απαντήσεις στις ερωτήσεις μου. Σε πρώτη ανάγνωση, δεν φαίνεται να υπάρχει κάποια αναφορά στο κατά πόσο τα υπάρχοντα δένδρα, καλύπτουν τις βασικές ανάγκες πρασίνου του δήμου Θεσσαλονίκης. Αυτό όμως που υπάρχει σε αυτήν την εφαρμογή, είναι η καταγραφή των δένδρων που σήμερα θεωρούνται ζωντανά στον Δήμο Θεσσαλονίκης, μαζί με κάποια βασικά χαρακτηριστικά τους (τύπος δένδρου, ύψος, στηθιαία διάμετρος και προβολή κόμης). Αυτά τα στοιχεία είναι διαθέσιμα εδώ.

Αποφάσισα λοιπόν να προσπαθήσω να αναζητήσω απαντήσεις στα παραπάνω ερωτήματά, συζητώντας με το ChatGPT.

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

  • Η ίδια η διοίκηση μπορεί να παίρνει αποφάσεις, οδηγούμενες από δεδομένα (data-driven decision making).
  • Οι δημότες και οργανισμοί που ενδιαφέρονται μπορούν να έχουν πρόσβαση στα δεδομένα και να κάνουν τις δικές τους αναλύσεις. Τέτοιοι δημότες θα μπορούσαν να είναι ερευνητές, φοιτητές που φοιτούν σε σχετικές σχολές, πανεπιστήμια, ερευνητικά κέντρα, ΜΚΟ, κοκ.
  • Τα ανοικτά δεδομένα αποτελούν εξαιρετικό μέσο για εκπαιδευτικές διαδικασίες. Θα μπορούσαν να χρησιμοποιηθούν από εκπαιδευτικούς για περιβαλλοντικά σχολικά προγράμματα ή άλλα σχολικά projects.

***

H συζήτηση

Ξεκίνησα την κουβέντα ζητώντας πληροφορίες για το πως μπορώ να καταλάβω αν το πράσινο στην πόλη μου είναι αρκετό. Σύμφωνα με το ChatGPT, ο τρόπος για να απαντηθεί αυτή η ερώτηση, είναι να γνωρίζω το Tree Canopy Cover (TCC) του δήμου, δηλαδή το ποσοστό της περιοχής του Δήμου Θεσσαλονίκης που καλύπτεται από δένδρα.

Το ChatGPT “με συμβουλεύει” ότι ένα καλό TCC είναι το 40%. Επίσης μου γράφει τί κερδίζω αν έχω καλό TCC στον δήμο μου:

  • Καλύτερες μέσες θερμοκρασίες και επίπεδα υγρασίας.
  • Καλύτερη ποιότητα αέρα.
  • Υψηλότερη αισθητική και σημεία αναψυχής και χαλάρωσης για τους κατοίκους.
  • Βιοποικιλότητα.

Στην συνέχεια, αναρωτήθηκα ποιο είναι το μέσο TCC μιας ευρωπαϊκής αστικής πόλης για να δω αν το 40%, που μου ανέφερε, έχει νόημα να είναι το κατώφλι της έρευνάς μου.

Φαίνεται ότι ο μέσος όρος κυμμαίνεται στο 15% ενώ μια “πιο ρεαλιστική πρόταση” είναι το 30% ώστε να αρχίσει η πόλη να επωφελείται από το πράσινο. Οπότε η ερώτηση μετασχηματίστηκε ως ακολούθως: Βάσει των δένδρων που έχουμε σήμερα, πόσα δένδρα μακριά είμαστε από τον στόχο του 15%, 30% ή 40%.

Για να βοηθήσω το ChatGPT να με βοηθήσει, έφτιαξα ένα αρχείο τιμών, χρησιμοποιώντας την Εφαρμογή Διαχείρισης Αστικών Δένδρων του Δήμου Θεσσαλονίκης που ανέφερα παραπάνω. Το αρχείο είναι διαθέσιμο εδώ (για όποιον ενδιαφέρεται να το χρησιμοποιήσει). Εν τέλει έδωσα στο ChatGPT την ακόλουθη είσοδο:

και πήρα τις ακόλουθες πληροφορίες:

Αυτή είναι η λογική που θα ακολουθήσει το ChatGPT για να μου δώσει τις απαντήσεις στις ερωτήσεις μου. Ακολουθούν οι υπολογισμοί:

Το τρέχον TCC του Δήμου Θεσσαλονίκης φαίνεται να είναι είναι 2.68%!

Οπότε φθάνουμε στο τελικό ερώτημα που είναι: Πόσο μακριά είμαστε από τους στόχους των 15%, 30% και 40% TCC; Εδώ το ChatGPT σωστά έλαβε υπόψη τις 3 κατηγορίες δένδρων με βάση την προβολή κόμης των δένδρων όπως υπάρχει στο σύνολο δεδομένων του Δήμου Θεσσαλονίκης και δημιούργησε 3 σενάρια ανά επιθυμητό ποσοστό.

  • Το Category 1 αναφέρεται στον αριθμό δένδρων που θα χρειαζόμασταν αν φυτεύαμε αποκλειστικά δένδρα με προβολή κόμης < 4 τ.μ.
  • Το Category 2 αναφέρεται στον αριθμό δένδρων που θα χρειαζόμασταν αν φυτεύαμε αποκλειστικά δένδρα με προβολή κόμης 4 – 16 τ.μ.
  • Το Category 3 αναφέρεται στον αριθμό δένδρων που θα χρειαζόμασταν αν φυτεύαμε αποκλειστικά δένδρα με προβολή κόμης > 16 τ.μ.

Τα τελικά νούμερα φαίνονται στην παρακάτω ανάλυση.

***

Το ChatGPT ως σύμβουλος

Ας υποθέσουμε τώρα ότι θέλουμε να το πάμε λίγο παρακάτω και να προσπαθήσουμε να πάρουμε κάποιες πρώτες πληροφορίες για το τι θα σήμαινε για τον Δήμο Θεσσαλονίκης, να “κυνηγούσε” τον στόχο του 15% TCC. Υπενθυμίζουμε ότι σήμερα βρισκόμαστε στο 2.68%.

Δίνουμε την παρακάτω είσοδο:

Εξηγούμε στο ChatGPT ότι θα θέλαμε έναν ρεαλιστικό χρόνο δενδροφύτευσης και μας ενδιαφέρει να κρατήσουμε το κόστος χαμηλό.

Με βάση αυτούς τους περιορισμούς, το ChatGPT μας κάνει μια πρώτη ανάλυση των υπέρ και κατά της κάθε κατηγορίας δένδρου.

Στην συνέχεια υπολογίζει την έξτρα περιοχή που πρέπει να καλύψουμε με δένδρα.

Και μας φτιάχνει μια “πιθανή στρατηγική” συνδυάζοντας τις 3 κατηγορίες δένδρων.

Τέλος υπολογίζει τους αριθμούς δένδρων που θα χρειάζονταν να αγοράσουμε και να φυτεύσουμε με βάση αυτήν την πιθανή στρατηγική.

***

Συμπεράσματα

Η ύπαρξη ανοικτών δεδομένων μπορεί να πυροδοτήσει ενδιαφέρον μελετών και αναλύσεων γύρω από τα δεδομένα μιας πόλης ή ενός δήμου. Αυτή η πρόχειρη “συνομιλία” που έκανα εγώ – από προσωπική περιέργεια – δαπανώντας περίπου 2 ώρες, θα μπορούσε να είναι η ανάθεση μιας σοβαρής πτυχιακής ή διπλωματικής εργασία ενός σπουδαστή ενός σχετικού κλάδου – που δεν θα είχε καμία από τις δικές μου απορίες -. Όταν μάλιστα τα διαθέσιμα δεδομένα είναι ανοικτά, ο σπουδαστής, το τμήμα, το πανεπιστήμιο δεν χρειάζεται να μπουν στην διαδικασία να ζητήσουν τα δεδομένα από τον δήμο και να εμπλακούν σε γραφειοκρατεία. Μπαίνουν, αναλύουν και τα δημοσιευμένα αποτελέσματα μπορούν εύκολα να γυρίσουν πίσω στον Δήμο Θεσσαλονίκης για αξιοποίηση.

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

Κοίταζα για παράδειγμα την εφαρμογή PotiZo, που καλεί τους δημότες να αναλάβουν εθελοντικά να ποτίζουν ένα δένδρο στην περιοχή τους. Σκεπτόμουν πως αν υπήρχε η αντίστοιχη χαρτογράφιση των νέων δένδρων που θέλει ο δήμος να φυτεύσει, θα μπορούσαμε να είχαμε και την έννοια του αναδόχου – δημότη ενός νέου δένδρου, μέσω της ίδιας ή μιας άλλης εφαρμογής.

Μία άλλη ιδέα θα ήταν να εκμεταλλευθούμε τις πλατφόρμες και τις εφαρμογές που αφορούν στο θέμα του πρασίνου για να αναζητήσουμε χορηγούς (π.χ. κάποια φυτώρια) και σε αντάλλαγμα, να αναφέρουμε την χορηγία τους στις πλατφόρμες αυτές.

Categories
Birthday

39

I often like to joke parallelizing birthdays to software releases. In that spirit yesterday I celebrated my 39th birthday. Or I received an update to version 3.9. Next year I am getting a major release to version 4.0.

This year I got to spend my birthdays in two cities. The first half (00:00 – 12:00) I spend it to Athens and the second half to Thessaloniki, my home town. It was one of the best in my life!

I was spending the week in Athens getting to know InstaShop‘s local office crew, up close and personal. There were a lot of meetings but when you discuss with talented, smart people, time flies. The team was welcoming and even though I have not been with them a long time, they made me feel as one of their own. I also got to see friends, now permanently located in Athens, after a long time. I wish I could stay longer and see more of them.

~

Birthday surprise!

I met George for dinner. He knew tomorrow was my birthday we started with birthday wishes. Fun fact, in another table nearby, they were birthday celebrations as well. Once the day changed, there was a birthday cake and everything. George started teasing me on how I should go and blow the candles of that cake, thanking the guys for remembering my special day (even though I didn’t know them at all).

But… after a couple of beers while getting ready to call it a night, I got my own birthday cake:

Thanks George!

~

Age is just a number

Growing up, I have seen relatives from previous generations getting tired as time went by. They were working on labor related professions (construction, heavy industry, farming, etc) so it – short of – made sense. In our line of work (software engineering) work can be really fun as you grow older. We get the chance to experience different challenges, different environments, different products, different teams, people with all kinds of personalities. Being just a breath away of 40, I believe I agree with Gary Vee that they are the new 20:

~

Highlights of my 39th year on planet earth

  • Finished my PhD
  • Got a fellowship to write great content for Open Source
  • Wrote my first book
  • Turned reading into a habit
  • Lost weight (but then I put it back 🙈)
  • Decreased caffeine consumption
  • Created my own Study!

The best is yet to come!

Other birthdays: 31, 34, 39

Categories
Thoughts

Το ψηφιακό δίδυμο της σπηλιάς του Πλάτωνα

Με τον όρο ψηφιακό δίδυμο (digital twin)1 αναφερόμαστε στην εικονική αναπαράσταση ενός αντικειμένου, ενός συστήματος ή μιας διαδικασίας. Για την αναπαράσταση αυτή προϋποθέσεις αποτελούν το φυσικό αντικείμενο, το ψηφιακό αντίγραφο και τη μεταξύ τους σύνδεση.

Η αλληγορία του σπηλαίου του Πλάτωνα

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

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

Ας προσπαθήσουμε να σκεφτούμε τώρα τι θα γίνονταν αν αυτός, ο απελευθερωμένος από τα δεσμά, άνθρωπος επέστρεφε στην σπηλιά. Θα προσπαθούσε να μοιραστεί τα όσα είδε και άκουσε έξω από την σπηλιά. Θα προσπαθούσε να μοιραστεί το νέο βίωμα και να βγάλει ίσως τους συν-δεσμώτες του από την πλάνη. Ας προσπαθήσουμε να σκεφτούμε τι θα έκαναν τώρα οι συν-δεσμώτες του, στο άκουσμα όλων αυτών. Θα τον θεωρούσαν τρελό; Θα τον χλεύαζαν ίσως; Ίσως να τον περιγελούσαν επειδή, μετά την παραμονή του στο φως του ηλίου, η όρασή του είναι πια αδύναμη στο σκοτάδι και δεν μπορεί τόσο εύκολα να ξεχωρίσει τις σκιές στον τοίχο.

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

Το “ψηφιακό σπήλαιο”

Με την εμφάνιση των έξυπνων συσκευών κινητής τηλεφωνίας (smartphones) αλλά και την εξάπλωση του Διαδικτύου – και ακολούθως των μέσων κοινωνικής δικτύωσης (social media) – πλήθος κόσμου άρχισε να χρησιμοποιεί πιο εντατικά το Διαδίκτυο. Άρχισε να διαβάζει νέα, να επικοινωνεί με φίλους, να μοιράζεται φωτογραφίες, προσωπικά νέα, προτιμήσεις, να αναζητά πράγματα και, φυσικά, να κάνει αγορές.

Οι διάφορες ψηφιακές υπηρεσίες (π.χ. μέσα κοινωνικής δικτύωσης, μηχανές αναζήτησης, ηλεκτρονικά καταστήματα, κ.ο.κ.), στην πρόσπάθειά τους να “σερβίρουν” περιεχόμενο εύκολα και γρήγορα στους χρήστες και άρα να βγάλουν περισσότερα χρήματα από πωλήσεις προϊόντων ή διαφημίσεις αντίστοιχα, δημιούργησαν αλγορίθμους. Οι αλγόριθμοι αυτοί προσπαθούν, βάση του ιστορικού των ενεργειών ενός χρηστη – π.χ. ανάγνωση συγκεκριμένων άρθρων ειδησεογραφίας -, να τους εμφανίσουν και άλλο παρόμοιο περιεχόμενο, με την λογική ότι μάλλον θα τους ενδιαφέρει.

Αυτή η αλγοριθμική λειτουργία, σε βάθος χρόνου, κατέληξε στην εμφάνιση ενός φαινομένου που ονομάζουμε filter bubble ή ideological frame2. Πρόκειται για μια κατάσταση εγκλωβισμού της σκέψής και της διανοίας μας που προκύπτει από προσαρμοσμένες αναζητήσεις, συστήματα προτάσεων, και τις προτάσεις των αλγορίθμων. Τα αποτελέσματα αναζήτησης λοιπόν, βασίζονται σε πληροφορίες που παρέχουμε, όπως η τοποθεσία μας, η προηγούμενη συμπεριφορά των κλικ μας, και το ιστορικό αναζητήσεών μας. Ως αποτέλεσμα, καταλήγουμε να διαβάζουμε μόνο ότι συμφωνεί με τις δικές μας απόψεις. Προσαρμόζουμε δηλαδή τον κόσμο στα μέτρα μας σε μια προσπάθεια να ενισχύσουμε τις πεποιθήσεις μας και να επιβεβαιωθούμε. Αυτή μας η τάση είναι γνωστή επίσης με τον όρο προκατάληψη επιβεβαίωσης3. Πρόκειται για την τάση ενός ατόμου να αναζητήσει, να ερμηνεύσει, να ευνοήσει και να ανακαλέσει πληροφορίες με τρόπο που να επιβεβαιώνει τις προϋπάρχουσες πεποιθήσεις ή υποθέσεις του.

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

  1. Ψηφιακό δίδυμο – Βικιπαίδεια (wikipedia.org) ↩︎
  2. Filter bubble – Wikipedia ↩︎
  3. Προκατάληψη επιβεβαίωσης – Βικιπαίδεια (wikipedia.org) ↩︎
  4. Τρολ (Διαδίκτυο) – Βικιπαίδεια (wikipedia.org) ↩︎

Image Credit: An Illustration of The Allegory of the Cave from Plato’s Republic, CC-BY-SA 4.0 (Wikipedia)

Categories
Side Notes

Το κρυφό σκολειό

Στέκει αυθύπαρχτος ο άνθρωπος που εξουσιάζει το σώμα του που μπορεί και ζή μόνος του βρίσκοντας το σωστό επάγγελμα στη ζωή του που μπορεί να κρίνη ο ίδιος όσα προβλήματα του παρουσιάζει η ζωή του και να παίρνη σ” αυτά στάση συνειδητή ο άνθρωπος τέλος που ορίζει τις πράξεις του, που παίρνει την ευθύνη γι” αυτές. Έτσι η παιδεία πρέπει να ετοιμάση το άτομο για μια πολυμερή αυθυπαρξία, σωματική, οικονομική, πνευματική και ηθική. Οι δυο πρώτες γρήγορα βρίσκουν τα όριά τους οι άλλες απλώνονται απεριόριστα και για το άτομα και για το σύνολο, είναι ένα αδιάκοπο ανέβασμα προς τον ελεύθερο άνθρωπο. Λέγοντας ηθική αυθυπαρξία δε θέλω να ειπώ ηθική αναρχία, να κάνη δηλαδή ό καθένας ό,τι θέλει, άλλα να ενεργή ελεύθερα χωρίς εξωτερική πίεση, σύμφωνα με τις απόλυτες ηθικές αξίες που ορίζουν το σκοπό της αγωγής, τον αληθινό ανθρωπισμό. Για να πετύχη όμως η παιδεία το σκοπό της είναι ανάγκη να κρατή τα παιδιά στο σχολείο υποχρεωτικά ως την εποχή που θα είναι πια σε θέση να πάρουν τα ίδια στα χέρια τους τη μόρφωσή τους, να κυβερνήσουν τον εαυτό τους, ως την ηλικία δηλαδή των 18 χρονών. Και ακόμα να δίνη στο καθένα τα μέσα να μορφώνεται σύμφωνα με το φυσικό του, χωρίς να εμποδίζεται από την κοινωνική και την οικονομική του θέση. Μορφώνω ένα άτομο θα ειπή δίνω μορφή στον ψυχικό του κόσμο, σε κάτι άμορφο ακόμα. Στο άτομο όμως δεν μπορούμε να δώσωμε αυθαίρετα όποια μορφή εμείς θέλομε, παρά μόνο να το βοηθήσωμε να πάρη με τον καιρό τη μορφή που ορίζουν, όσα ζωντανά και διαλεχτά στοιχεία κλείνει μέσα του. Αυτά με τη συστηματική ανάπτυξη και καλλιέργεια δίνουν στον καθένα τον ατομικό του τύπο.

Αλέξανδρου Δελμούζου – Το κρυφό σκολειό 1908-1911
(από το οπισθόφυλλο της έκδοσης)

Διάβαζα την περίληψη αυτή από το βιβλίο του Αλέξανδρου Δελμούζου και θυμήθηκα ένα διασκεδαστικό γεγονός από το παρελθόν. Όταν δίδασκα – παλαιότερα – στην τριτοβάθμια εκπαίδευση, οι φοιτητές συχνά με προσφωνούσαν “δάσκαλο”. Στην αρχή, μου φαίνονταν λίγο περίεργο. Δασκάλους, είχα συνηθίζει να προσφωνώ τους εκπαιδευτικούς στα μαθητικά μου χρόνια. Με τον καιρό όχι μόνον το συνήθισα αλλά μου άρεσε. Γιατί ήταν πολύ τιμητικό να με προσφωνούν δάσκαλο στα 26 μου. Διαπίστωσα μάλιστα με τον καιρό, πως η προσφώνηση ήταν μάλλον η σωστή καθώς:

διδακτική θηλυκό

ο κλάδος της Παιδαγωγικής επιστήμης που ασχολείται με τις διδακτικές μεθόδους


Wiktionary

Οι δάσκαλοι μάλλον ταιριάζουν περισσότερο στην τριτοβάθμια εκπαίδευση, μετά την ενηλικίωση του ανθρώπου. Πιο πριν χρειαζόμαστε παιδαγωγούς. Όχι δασκάλους!

Categories
Thoughts

What I read in 2023

Last year, I shared with you my progress on reading books since 2018 and how I tried to “make myself read more” by joining Goodreads yearly reading challenge. 2023 was a blast 🎉.

  • 2018 | Goal: 4 books | Read: 3 (75%)
  • 2019 | Goal: 10 books | Read: 7 (70%) | ~133% more than 2018
  • 2020 | Goal: 12 books | Read: 10 (83%) | ~43% more than 2019
  • 2021 | Goal: 15 books | Read: 17 (113%) | ~70% more than 2020
  • 2022 | Goal: 24 books | Read: 17 (71%) | 0% (same as 2021)
  • 2023 | Goal: 24 books | Read: 25 (104%) | ~47% more than 2022

Physical Books vs Audiobooks

During 2023 instead of reading physical books, I tried listening to audiobooks. It worked great for me. I validated that audio is my medium of choice, not only for podcasts but, also, for book consumption. It works well for me because it allows me to listen to books while I am walking or waiting on a queue. I didn’t test listening to audiobooks while driving; this will be an experiment for 2024 🤓.

The only downside was that listening to audiobooks made me significantly decrease the time spending listening to podcasts. Not really sure if this is a downside, I will probably follow up with a separate post on that.

Are 24 books per year enough?

As with all metrics, the number, on its own, doesn’t mean anything. 24 books are way better than 3 books I read during 2008, but I would love to be able to read 36 books next year. However, I decided to keep the goal for Goodreads reading challenge to 24 for 2024 as well. Here’s why!

I prefer to see 24 as a threshold rather than as a goal. This allows me to “push” myself on reading 2 books per month – minimum – and, at the same time, don’t overstress to keep increasing my yearly book consumption. Reading is a fun and educative process, and I really love it now that I found the “audio way”. I do not want to turn it to another “championship” activity.

That said, I would like to better balance during 2023 listening to books and podcasts or read more books. I’d let you know how this went next year.

The list…

Here’s what I have been reading / listening to during 2023:

  1. Stop Self-Sabotage: Six Steps to Unlock Your True Motivation, Harness Your Willpower, and Get Out of Your Own Way by Judy Ho | Goodreads
  2. Company Of One: Why Staying Small Is the Next Big Thing for Business by Paul Jarvis | Goodreads
  3. James Moriarty, Consulting Criminal by Andy Weir | Goodreads
  4. An Effective Life: Inspirational Philosophy from Dr. Covey’s Life by Stephen R. Covey | Goodreads
  5. The Art of War by Sun Tzu | Goodreads
  6. The Decision Maker: Unlock the Potential of Everyone in Your Organization, One Decision at a Time by Dennis W. Bakke | Goodreads
  7. Own It: The Secret to Life by Diane Von Furstenberg | Goodreads
  8. How to Consciously Design Your Ideal Future by Benjamin P. Hardy | Goodreads
  9. How To Be More Intentional With Time by Laura Vanderkam | Goodreads
  10. Unfuck Your Anger: Using Science to Understand Frustration, Rage, and Forgiveness by Faith G. Harper | Goodreads
  11. How to Say No: An Ancient Guide to the Art of Cynicism by Diogenes of Sinope | Goodreads
  12. 4 ways to stop self sabotage by Judy Ho | Goodreads
  13. How to Be Free: An Ancient Guide to the Stoic Life by Epictetus | Goodreads
  14. The Lean Startup by Eric Ries | Goodreads
  15. The Startup Way: How Modern Companies Use Entrepreneurial Management to Transform Culture and Drive Long-Term Growth by Eric Ries | Goodreads
  16. Twelve and a Half: Leveraging the Emotional Ingredients Necessary for Business Success by Gary Vaynerchuk | Goodreads
  17. How to Be a Leader: An Ancient Guide to Wise Leadership by Plutarch | Goodreads
  18. Awaken the Giant Within: How to Take Immediate Control of Your Mental, Emotional, Physical and Financial Destiny! by Tony Robbins | Goodreads
  19. Charlie Munger: The Complete Investor by Tren Griffin | Goodreads
  20. How to Talk to Anybody, Anytime, Anywhere: 3 Steps to Make Instant Connections by Chris Widener | Goodreads
  21. How to Decrease Burnout and Increase Joy by Bruce Daisley | Goodreads
  22. Elon Musk by Walter Isaacson | Goodreads
  23. A Christmas Carol – Audible 2020 Hugh Grant by Charles Dickens | Goodreads
  24. Become an Effective Software Engineering Manager by James Stanier | Goodreads
  25. Η τέχνη του να έχεις πάντα δίκιο by ΑΡΤΟΥΡ ΣΟΠΕΝΧΑΟΥΕΡ | Goodreads

Friends’ books

I was also very happy to read new books written by friends. I enjoyed them very much, and I am grateful for them letting me know and singing them for me:

Past years: 2018-2021 (coming soon), 2022, 2023

PS: Happy birthday Ma.tt! Wholehearted wishes to you and your loved ones 🎉.

Categories
Uncategorized

The Geeky Unicorn

Last week during the InnerSource Summit 2023 we were asked to create a mascot for InnerSource. This was meant to be the attendee contest of the conference. Normally, it would require a lot of work to design a character, but, with the help of AI, it is now doable in seconds. So I logged in to ChatGPT and I wrote the following script:

Create a mascot of a unicorn that is a top notch software developer.

And that was how “The Geeky Unicorn” came to life.

To be honest, I didn’t expect that good a result with the first attempt. Most of the articles I read on prompt crafting usually insist that the more detailed the prompt, the better the results. Maybe, with a design request, giving the AI a more “fuzzy, less limiting” prompt, there is space for it to be more creative, I don’t know 😅.

Anyway, my geeky unicorn has received a lot of love from the InnerSource community 🎉.

People mentioned how the phrase “rainbows and unicorns” was reflected on the design with the rainbow colors and… well… the unicorn character (duh!).

I also love how ChatGPT chose to connect the concept of a top-notch software developer with elements such as a polo shirt, sneakers and geeky glasses. Maybe there’s a stereotype hidden in the AI’s knowledge base somewhere, but still, I love the result 😂.

So what’s the future of “The Geeky Unicorn”?

No one can really know… but I decided to publish it under an open license, so people can (re)use it and make cool stuff out of it 😊.

Categories
Technology

Χρησιμοποιώντας ευέλικτες μεθοδολογίες για να ανακαλύψουμε τις ανάγκες του δημότη.

Ένα αστικό πείραμα!

Οι ευέλικτες μεθοδολογίες ανάπτυξης (agile practices) είναι μια σειρά από πρακτικές που χρησιμοποιόυμε στην ανάπτυξη λογισμικού με στόχο να αναπτύξουμε το λογισμικό συνεργατικά, η ομάδα να είναι αυτο-οργανούμενη και διαλειτουργική με τους πελάτες / χρήστες τους οποίους ενδιαφέρει η εφαρμογή που αναπτύσσουμε. Οι ευέλικτες μεθοδολογίες ανάπτυξης έγιναν διάσιμες το 2001 όταν δημοσιεύθηκε το Μανιφέστο για την Ευέλικτη Ανάπτυξη Λογισμικού (Manifesto for Agile Software Development). Ο ευέλικτος τρόπος ανάπτυξης λογισμικού χρησιμοποιείται σήμερα κατά κόρον από ομάδες ανάπτυξης λογισμικού ανοικτού κώδικα αλλά και από πολλές νεοφυείς εταιρείες (start-ups).

Οι ιστορίες χρήστη (user stories) είναι μία απο΄τις πρακτικές ευέλικτης ανάπτυξης. Είναι ένας απλός τρόπος περιγραφής απαιτήσεων από τον τελικό χρήστη της εφαρμογής σε φυσική γλώσσα που ακολουθεί το εξής τρίπτυχο:

Σαν [ΡΟΛΟΣ]

Θα ήθελα [ΑΝΑΓΚΗ]

Ώστε [ΩΦΕΛΙΜΟ ΑΠΟΤΕΛΕΣΜΑ]

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

Ιστορίες χρήστη στην τοπική αυτοδιοίκηση

Όπως ένας χρήστης έχει συγκεκριμένες ανάγκες που επιθυμεί να ικανοποιηθούν όταν λάβει στα χέρια του την τελική εφαρμογή (π.χ. για εφαρμογή κινητού, μια ιστοσελίδα ή ένα ηλεκτρονικό κατάστημα), έτσι και ένας δημότης έχει συγκκεριμένες ανάγκες που επιθυμεί να ικανοποιούνται στον δήμο που κατοικεί.

Περισσότερο πράσινο, καλύτερο οδόστρωμα, περισσότερος φωτισμός, καλύτερες προβλέψεις για ΑΜΕΑ, γειτονιές φιλικές προς τα κατοικίδια, περισσότερο parking, μπορεί να έιναι κάποιες από αυτές.

Οι κατά τόπους Δήμοι μπορεί να προσφέρουν κάποια online φόρμα επικοινωνίας, κάποιο τηλεφωνικό κέντρο ή ακόμη και κάποια εφαρμογή κινητού τηλεφώνου για την αποστολή καταγγελιών ή προτάσεων για την αναβάθμιση του δήμου. Συνήθως αυτές οι πληροφορίες δεν βρίσκονται σε ιδιαίτερα εμφανή σημεία ή δεν γίνεται ιδιαίτερη προσπάθεια από τον δήμο να αναδείξει αυτούς του μηχανισμούς ανατροφοδότησης (feedback) από τον δημότη. Επίσης, τέτοιου είδους κανάλια ανατροφοδότησης συνήθως αφορούν πολύ συγκεκριμένα αιτήματα (π.χ. καταγγελία επικινδυνότητας κτηρίου, παρατημένο όχημς, καμμένη λάμπα, πρόβλημα στο οδόστρωμα) και δεν επιτρέπουν τον δημότη να μπορέσει να συνεισφέρει μια πιο γενική επιθυμία του.

Οι ιστορίες χρήστων για έναν δήμο μπορούν να αποτελέσουν εργαλείο συμμετοχικού σχεδιασμού εάν η εκάστοτε δημοτική αρχή θελήσει να λάβει γνώση. Μπορούν να μετατρέψουν την συνήθη, από επάνω προς τα κάτω, λογική διοίκησης:

η δημοτική αρχή κάνει ένα πλάνο και το υλοποιεί και θα κριθεί στις επόμενες εκλογές

σε από κάτω προς τα επάνω:

οι ανάγκες των πολιτών είναι αυτές που αντανακλώνται στις ιστορίες χρήσης. Η δημοτική αρχή θα πρέπει να αναπροσαρμόσει το πλάνο της ώστε να καλύψει κατά προτεραιότητα όσες πιο πολλές από αυτές μπορεί και στον καλύτερο δυνατό βαθμό.

User Stories: Θεσσαλονίκη

Εν όψει των δημοτικών εκλογών του 2023, δημιούργησα ένα πολύ γρήγορο πρωτότυπο μιας εφαρμογής που μπορεί να επιτρέψει στους δημότες της Θεσσαλονίκης να συνεισφέρουν τις επιθυμίες τους (υπό μορφή ιστοριών χρήστη).

Η εφαρμογή είναι απόλυτα ανώνυμη και δεν ζητούνται ούτε αποθηκεύονται προσωπικά δεδομένα. Όλες οι προτάσεις κατηγοροποιούνται ανά Δήμο ενδιαφέροντος και είναι διαθέσιμες ελεύθερα και ανοικτά για να τις βλέπουν όλοι.

Η εφαρμογή είναι διαθέσιμη μέσω του συνδέσμου: https://bio.link/userstoriesskg. Ακολουθώντας τον σύνδεσμο από το κινητό, το tablet ή τον υπολογιστή σας θα δείτε την παρακάτω οθόνη:

Διαλέγοντας τον Δήμο που σας ενδιαφέρει, θα δείτε μία Google Form μέσα από την οποία θα μπορέσετε να υποβάλετε την ιστορία χρήστη:

Όλες οι ιστορίες μαζεύονται σε ένα κεντρικό υπολογιστικό φύλλο Google και είναι διαθέσιμες σε αυτόν τον σύνδεσμο κάτω από άδεια Αναφορά Δημιουργού 4.0 Διεθνές (CC BY 4.0). Επομένως όλοι, πολίτες, υποψήφιοι δημοτικοί σύμβουλοι, ερευνητές, κ.ο.κ. μπορούν να έχουν πρόσβαση στα δεδομένα και τα να αξιοποιήσουν με τον καλύτερο δυνατό τρόπο.

(Photo credit: Leandros Papakarmezis)

Categories
Thoughts

Hacks that work*! How to handle newsletter surge

( * for me at least😁)

If you are like me, every now and then – during your Sunday morning coffee – you read a nice article online. It is so nice that you want to get more articles your way in fear (FOMO) that you might not remember to revisit the blog that hosts this article. Hence, you subscribe to its newsletter!

The problem

Fast forward several months later, although you haven’t found anything else particularly interesting in this newsletter, you are still receiving it. With it you probably get a ton of other newsletters and offers (for some of which you might never opted in, may I add) 😒.

Your inbox is now flooded and you don’t really have the time to go through each one of these unread e-mails and unsubscribe. You will probably either try to bulk delete some of these messages or create a label to transfer all the newsletters or archive them (maybe hoping that you can come back later and re-read some of them; still FOMOing -).

That used to be my story, until recently!

A solution

A very quick and easy way of dealing with newsletters that historically land to your inbox is to create an e-mail filter that will automatically aggregate them to a label. You can then go through them and decide whether you want to keep them or (try to) unsubscribe.

Here’s how you create such a filter on Gmail:

This filter does the following:

  • Finds any newsletter than includes the keyword “unsubscribe” (hopefully due to the GDPR regulation, most of your newsletters must contain such a word – even if it doesn’t really work or provide a way of clicking it 😁-)
  • Skips inbox and stores them to a label of your choice (i.e. “newsletters”). You can ignore my personal naming scheme that you can see to the screenshot above (“Incoming/05 (optional) Mailing lists”). Although there is reasoning behind it, it should be an overkill for most of people. The work of “a madman” 🤣.
  • Finally, you can choose for these messages to never go to spam. This way you mitigate the risk of “losing” some interesting stuff.

Additionally you can add an option for these messages to be changed automatically to “read”. This way a notification for unread messages will be limited only to your inbox folder.

How do I personally use that hack

The aforementioned filter is setup to my Gmail account with which I subscribe to all the newsletters I want to receive. The filter puts everything to the “newsletter” label for me. During a break or when I feel like it, I browse through these messages and I choose whether to keep them or unsubscribe.

This is a really nice low energy habit I enjoy doing every Sunday with my morning coffee. Helps me stay up to date (or rather satisfy my FOMO addiction) whereas, newsletters are no longer a distraction during business as usual.

How do you handle your newsletter subscriptions? Are newsletter messages distracting for you? Let me know by leaving a comment!

Praise: A shout out to Mr. Ari Meisel for suggesting this hack to his book “The Art of Less Doing: One Entrepreneur’s Formula for a Beautiful Life”

Categories
Stories

An “I told you so” post about replanting

Back in 2019 I had an idea. Reading the publication “The Global Tree restoration potential” I thought of creating an app that will encourage people to replant trees, pledging to a global 1Trillion Trees reforestation challenge. Here’s a video pitch for the MVP of the app as created by Social Mind, a digital agency I co-founded and was running as a VP at the time.

This app aimed to target:

  • The environmentally savvy people that want to do something about global warming and climate change, offering them an easy way to get a plantation kit by their local nursery garden and plant it in a suitable space, near their residence.
  • People that are not educated around replanting but eager to learn. The app offers them the right tools and instructions to easily start replanting. They could, for example, organize a replanting family activity in a nearby forest.

The gamification aspects of the app would allow individuals, companies and organizations to keep track on the trees they replant, personalize the experience and phygitaly “pass” their trees coordinates, to the next generation.

In order to fund the idea we decided to participate to PARSEC:

a business accelerator supporting the creation of new Earth Observation (EO) based products and services. The accelerator targets SMEs, start-ups, entrepreneurs and researchers who want to have an impact on the emerging Food, Energy and Environment sectors. With the support of PARSEC, their ideas will be developed into solutions fuelled by the benefits of EO.

PARSEC Accelerator official website

We didn’t get the funding 🎉

The 3 Billion Trees Pledge

Fast forward in December 2021, two years after our proposal this happened…

Under the European Green Deal, the EU biodiversity strategy for 2030 commits to planting at least 3 billion additional trees in the EU by 2030 in full respect of ecological principles.

3 billion trees by the European Commission

Although less ambitious than my original 1 Trillion Trees pledge, I am really happy that EU is utilizing reforestation research to fight global warming. I am also happy to see that they use digital mediums to raise awareness to the European citizens about the importance of reforestation. I still have a strong opinion that a gamified mobile app can be a change maker for the participation of citizens to the pledge, but I remain optimistic that we will eventually get there.

🫡

(photo credit: Maximilian Jaenicke by Unsplash)