Συνεχίζω να παίζω με διάφορα στην Java. Αυτή την φορά ήθελα να φτιάξω ένα εργαλειάκι για να αντλώ όλα τα bookmarks που έχω στο Pocket. Σκέτα τα url όμως. Το χρησιμοποιώ κυρίως για να προσθέτω βίντεο (συνήθως μουσικά) από youtube και κάποια στιγμή που μαζεύονται πολλά, τα ρίχνω μαζικά στον browser, να τα δω. Το pocket δεν σε βοηθάει να ανοίξεις πολλά ταυτόχρονα. Ακόμη κι ένα – ένα να το ανοίγεις και μετά να το σβήνεις, είναι πολύ κουραστικό (με πολλές κινήσεις).
Το εργαλειάκι, λοιπόν, κάνει ακριβώς αυτό. Συνδέεται στο account σου στο Pocket και τραβάει όλα τα bookmarks, εμφανίζοντας σκέτα τα url. Μετά έχεις και την επιλογή να τα σβήσεις.
Για να κάνω όλη την δουλειά, χρησιμοποιώ το API που δίνει το Pocket. Καταρχήν κάνω το authentication χρησιμοποιώντας το OAuth 2.0. (σου ανοίγει παραθυράκι με το site του Pocket, για να κάνεις login και να πάρεις τα κατάλληλα δικαιώματα). Στην συνέχεια γίνεται το fetching των bookmarks και η εμφάνιση τους. Αν πατήσεις Delete, κάνει την ανάλογη κλήση στο API για διαγραφή όλων.
Σε μια πρώτη δοκιμαστική έκδοση που ανέβασα (και μπορείτε να κατεβάσετε το εκτελέσιμο αρχείο .jar) κάνει όλη την δουλειά ήδη. Απλώς τώρα θέλει δουλίτσα στο interface, γιατί είναι πολύ χύμα. Του λείπουν κάποιοι αυτοματισμοί, για παράδειγμα.
Ενώ και ο κώδικας από κάτω είναι ακόμη πολύ χύμα και δοκιμαστικός. Θέλει βελτίωση και να γίνονται και οι διάφοροι έλεγχοι σε περιπτώσεις αποτυχίας. Όπως και διάφορα validations.
Το εργαλειάκι έχει γραφτεί σε Java 15 και χρησιμοποιώ JavaFX για το περιβάλλον. Επίσης δοκιμάζω το Maven για τον χειρισμό των διάφορων dependencies.
Μπορείτε να δείτε τον κώδικα του Pocket Parser και να κατεβάσετε το αρχείο .jar από εδώ. (Απαιτεί τουλάχιστον την έκδοση 15 της Java στο PC σας)
Με την Java ήθελα πάντα να ασχοληθώ. Κάπου πήγαινα να πιάσω τα βασικά, αλλά πάντα τα παρατούσα, γιατί δεν είχα σκεφτεί να φτιάξω και κάποιο project άμεσα.
Φέτος όμως έχω σχετικό μάθημα στο ΕΑΠ (ΠΛΗ24), οπότε ήταν ευκαιρία να ασχοληθώ κάπως πιο σοβαρά. Ειδικά η 3η εργασία που είχαμε, ήταν ότι πρέπει. Αυτή ήταν ομαδική (με 3 φοιτητές σε κάθε ομάδα) και είχαμε να φτιάξουμε μια εφαρμογή που τραβάει δεδομένα από το API του ΟΠΑΠ, για το ΤΖΟΚΕΡ, και εμφανίζει διάφορα στατιστικά.
Το έργο υλοποιήθηκε με την μεθοδολογία του Scrum (άλλο ένα αντικείμενο που ήταν χρήσιμο να δω για πρώτη φορά στην πράξη) και πραγματοποιήθηκε σε 3 sprints (2 των 14 ημερών και 1 των 10 ημερών).
Μπορείτε να δείτε την εφαρμογή στο github και να κατεβάσετε και το εκτελέσιμο για να το τρέξετε. Η βάση δεδομένων είναι embedded, οπότε δεν χρειάζεται τίποτα έξτρα για την εκτέλεση. Απλά θα δημιουργηθεί ένα folder που θα περιέχει την βάση δεδομένων.
Η λογική της εφαρμογής είναι ότι πρώτα κατεβάζεις όσα δεδομένα θες (από κάποιος εύρος ημερομηνιών), στην επιλογή “Διαχείριση δεδομένων“, και τα καταχωρείς στην βάση. Μετά έχεις επιλογές για εμφάνιση διάφορων στατιστικών, με βάση αυτά που έχουν καταχωρηθεί.
Επειδή μου άρεσε πολύ τελικά η Java, επόμενο βήμα είναι να ασχοληθώ με Spring Boot και μάλλον να παρατήσω τελείως την PHP. Οπότε με ψήνει, είτε να ξαναγράψω το backend του Dentist App σε Java (και να την ξαναπροωθήσω), είτε να κάνω το Parrot Tunes από την αρχή. Ή μπορεί και κάποια άλλη ιδέα. Θα δείξει.
Είχα γράψει και παλιότερα έναν οδηγό για το ίδιο θέμα. Αλλά εκείνος ο τρόπος ήταν αρκετά πιο πολύπλοκος και έπρεπε να μπεις κάθε φορά σε συγκεκριμένο container για να δουλεύεις.
Με τον παρακάτω τρόπο που πειραματίζομαι όμως, δεν χρειάζεται αυτό. Απλά γράφεις εντολές στο host, όπως θα έγραφες αν είχες στήσει το dev περιβάλλον σου με τον πατροπαράδοτο τρόπο. Για παράδειγμα θα είχες εγκαταστήσει την PHP και τον composer στο μηχάνημα σου (χωρίς docker) και θα έγραφες απευθείας μέσα στο project σου εντολές τύπου “composer install“
Τώρα θα χρησιμοποιήσουμε πάλι docker, αλλά θα είναι πολύ πιο απλό. Ας το δούμε αναλυτικά. (όλα τα παρακάτω ισχύουν σίγουρα σε linux. Παρόμοια θα γ´ίνονται και σε άλλα λειτουργικά φαντάζομαι. Φυσικά πρέπει να έχει εγκατασταθεί το docker)
Πρώτα από όλα κατεβάζεις σε ένα οποιοδήποτε folder σου τα αρχεία αυτού του repo.
git@github.com:ikiranis/devit.git
Στην συνέχεια κάνεις build το image (βάζεις ότι όνομα θέλεις για το image)
docker build . -t devit:1.0
Γίνεται το build και είσαι έτοιμος να το χρησιμοποιήσεις. Δηλαδή πας στο project σου και τρέχεις όποια εντολή θέλεις (π.χ. composer install), βάζοντας μπροστά το παρακάτω
docker run --rm --init -t -v $(pwd):/www -w /www -p 8000:8000 devit:1.0
Δηλαδή η τελική εντολή θα είναι του τύπου
docker run --rm --init -t -v $(pwd):/www -w /www -p 8000:8000 devit:1.0 composer install
Για ευκολία μπορείς όλο το αρχικό μακρυνάρι, να το βάζεις σαν alias. Δηλαδή προσθέτεις στο αρχείο ~/.bashrc
την παρακάτω γραμμή.
alias devit="docker run --rm --init -t -v $(pwd):/www -w /www -p 8000:8000 devit:1.0"
Έτσι τελικά χρειάζεται να γράφεις μόνο
devit composer install
Παρόμοια μπορείς να τρέξεις εντολές npm, php artisan κτλ. Στο συγκεκριμένο image που γίνεται build, εγκαθιστούνται η PHP 7.4, node.js, npm, vue, xdebug, composer, phpunit, διάφορα extensions και βιβλιοθήκες, αλλά και πιθανά χρήσιμα utilities (git, wget, nano κτλ). Μπορείς φυσικά να αλλάξεις εκδόσεις (π.χ. σε PHP 8.0) και να αφαιρέσεις/προσθ´έσεις ότι θέλεις. Όλα αυτά πειράζοντας ανάλογα το αρχείο dockerfile.