πλανήτης ελληνικής κοινότητας ΕΛ/ΛΑΚ
Το 1ο Ηealth Datathon στην Ελλάδα διοργανώνεται σε συνεργασία με την Ιατρική Εταιρεία Αθηνών, τον Οργανισμό Ανοιχτών Τεχνολογιών(ΕΕΛ/ΛΑΚ) και την Ελληνική Εταιρεία Μελέτης Εφαρμογών Πληροφορικής Υγείας(ΕΕΜΕΠΥ) την Παρασκευή 17/05 και το Σάββατο 18/05 στο Κέντρο Στήριξης Επιχειρηματικότητας και Καινοτομίας, Οικονομικού Πανεπιστημίου Αθηνών του Οικονομικού Πανεπιστημίου Αθηνών. Στο 1ο Health Datathon, στα πρότυπα ανάλογων δράσεων στο ... Read more

by: Linux Insider

Αν θέλετε να μάθετε να γράφετε κώδικα ή να βελτιώσετε τις γνώσεις σας στο coding, και ψάχνετε για online μαθήματα, σε αυτό το άρθρο θα δούμε μια λίστα με 27 χρήσιμες ιστοσελίδες που προσφέρουν δωρεάν (και μη) μαθήματα προγραμματισμού σε δημοφιλείς γλώσσες προγραμματισμού όπως Javascript, Java, PHP, Python, Ruby, C/C++ κλπ. Αν δεν το κάνετε για να βελτιώσετε τη δουλειά σας ή για να βρείτε δουλειά, μπορείτε να το δείτε και σαν χόμπι, σαν τρόπο χαλάρωσης στο σπίτι ή γραφείο. Αντί να διαβάζετε κουτσομπολιά, μάθετε κάτι χρήσιμο! Λοιπόν ξεκινάμε….

code.org

Αυτό εδώ είναι για μικρά παιδιά κυρίως, μια και τους μαθαίνει τα βασικά του προγραμματισμού και της επιστήμης υπολογιστών. Άλλωστε το μοτο τους είναι: «Κάθε μαθητής σε κάθε σχολείο θα πρέπει να έχει την ευκαιρία να μάθει την επιστήμη των υπολογιστών». Στα ατού του το γεγονός ότι είναι ΠΟΛΥΓΛΩΣΣΟ. Και το γράφω με κεφαλαία αφενός γιατί αυτό δεν υπάρχει στα υπόλοιπα sites που θα δούμε παρακάτω, αφετέρου γιατί υποστηρίζει τα ελληνικά. Εχει 4 μαθήματα ανάλογα με την ηλικία (4+, 6+, 8+, 10+) του παιδιού, ενώ υπάρχουν και αυτόνομα unplugged μαθήματα χωρίς τη χρήση υπολογιστή. Αν είστε στην κατηγορία «γονιός» όπως εγώ, δοκιμάστε μαζί τους τα μαθήματα κώδικα με Minecraft!

freeCodeCamp

Τούτο εδώ είναι ένα από το πιο καλά -αν όχι το καλύτερο- κοινοτικά sites για να μάθετε να γράφετε κώδικα δωρεάν, αλλά και να φτιάξετε projects. Και γιατί όχι να βρείτε μια δουλειά… Περιέχει μεγάλη συλλογή από αλληλεπιδραστικά tutorials για να μάθεις HTML5, CSS3, JavaScript, βάσεις δεδομένων, git, Node.js, React.js, D3.js κλπ. Είναι όλα δωρεάν, δίνουν πιστοποιήσεις, και αν θέλεις να δώσεις κάτι πίσω στην κοινότητα, υπάρχει η δυνατότητα να δουλέψεις δωρεάν για ΜΚΟ. Μπορείς να τους βρεις και στο facebook (freecodecampearth) για ερωτήσεις κλπ.

Coursera

Αυτό το site είναι πιο pro, μια και το έχουν στήσει δύο καθηγητές του Stanford (Andrew Ng,  Daphne Koller), και προσφέρει ό,τι φαντάζεσαι κι ακόμα περισσότερα: Μαθήματα με βίντεο διδασκαλία, ακόμα και πιστοποιήσεις για να εμπλουτίσεις το προφιλ σου στο LinkedIn – το πληρώνεις βέβαια το service… Το ιδιαίτερο στοιχείο του είναι ότι προσφέρει online μαθήματα από «φημισμένα»  πανεπιστήμια (University of London, University of Michigan, Colorado, Imperial College of London) και φυσικά από το ίδιο το Stanford. Προσωπικά, δεν τρελαίνομαι με την αριστεία, αλλά περί ορέξεως κολοκυθόπιτα. Φυσικά, εδώ δεν είναι τίποτε σχεδόν δωρεάν, αλλά αν ψάχνετε κάτι «επαγγελματικό», εδώ θα βρείτε ακριβώς αυτό. Δείτε π.χ. τα μαθήματα Machine Learning, Αλγόριθμοι 1 & 2 καθώς και το Python για όλους.

Udemy

Αλλο ένα «επαγγελματικό» site, με online βίντεο μαθήματα για τεχνολογίες και γλώσσες προγραμματισμού. Εδω υπάρχουν όμως και δωρεάν μαθήματα (μιλάμε για ώρες βίντεο!) για Python, Java, OO Javascript & ES6, Δομές Δεδομένων, κα. Τα επι πληρωμή μαθήματα ξεκινάνε από 10 δολάρια.

PluralSight

Πολύ καλό site αν και δεν έπρεπε να υπάρχει στη λίστα μια και δεν προσφέρει ακριβώς δωρεάν μαθήματα, αλλά 1 μήνα δωρεάν δοκιμή. Μετά είναι 35 δολάρια το μήνα για ό,τι θες να κάνεις. Είναι καλή λύση όμως γιατί προσφέρει πιστοποιήσεις. Το έλεγαν παλιά railsforzombies.org, αλλά μάλλον κάποιος στο marketing είπε ότι δεν είναι καλό να μιλάμε για ζόμπι σε προγραμματιστές, οπότε τώρα λέγεται Pluarlsight…

try.github.io

Αυτό το site δεν είναι για να μάθεις γλώσσες προγραμματισμού, αλλά για να μάθεις version control με το Git μέσα σε λίγη ώρα. Εδώ θα βρείτε και αναφορές για άλλες ιστοσελίδες για να εμβαθύνετε στο δεύτερο αγαπημένο παιδί του Linus Torvalds.  Δείτε π.χ το  Learn Git branching που σας μαθαίνει git μέσα στον browser και θα μείνετε άφωνοι/ες. Παρόμοιο είναι και το Visualizing Git όπου δίνεις εντολές git μέσα στον browser και βλέπεις real time πόσο χάλια τα κάνεις όλα 🙂 Παρόμοιο, αν θέλετε να εντρυφήσετε στο git, είναι το Git Immersion. Τσεκάρετε το μάθημα με τα aliases για να βελτιώσετε την παραγωγικότητά σας.

OneMonth

Ενδιαφέρον «επαγγελματικό» site που υπόσχεται να σε μάθει να γράφεις μια γλώσσα μέσα σε ένα μόνο μήνα. Δεν είναι κι αυτό εντελώς δωρεάν όμως. Πρέπει να αγοράσεις συνδρομή που κοστίζει 270 δολάρια το χρόνο (ή λιγότερο απο 30 το μήνα) για να έχεις πρόσβαση σε πάνω από 20+ σειρές μαθημάτων, όπως Προγραμματισμός για αρχάριους, HTML, JavaScript, Ruby, Python, WordPress, Bitcoin & Blockchain, κλπ.  Εχουν όμως δωρεάν δοκιμή και δίνουν ένα δωρεάν μάθημα για τη γραμμή εντολών (του Linux παιδιά, όχι των Windows!)

codecademy

Εδώ είμαστε! Το codecademy είναι ένα από τα καλύτερα sites για να μάθεις να γράφεις κώδικα. Αυτό εισήγαγε το interactive learning και εξακολουθεί να είναι πρωτοπόρο στον τομέα. Εδώ λοιπόν δεν θα βρεις τα κλασικά βίντεο που παρακολουθείς και σταμάτα/ξεκίνα μέχρι να καταλάβεις τι λέει ο δάσκαλος. Αντίθετα, εδώ υπάρχουν σοφιστικέ αλληλεπιδραστικά  tutorials που σε βοηθάνε πραγματικά να μάθεις γλώσσες προγραμματισμού. Δείτε π.χ. τα μαθήματα για JavaScript, Java, Linux. Η μηνιαία συνδρομή ξεκινά από 15-18 δολάρια / μήνα  (ανάλογα με τη δέσμευση) και ξεκλειδώνει τα πάντα. Ξεκινήστε με το μάθημα για JavaScript και δείτε και το μάθημα για R για να πάρετε μια ιδέα (τα εισαγωγικά μαθήματα ειναι δωρεάν).

codingbat.com

Πολύ καλό site με αρκετά δωρεάν μαθήματα για να μάθετε Python & Java. Δείτε τα όλα εδώ. Το ατού είναι όμως τα προβλήματα που προσφέρει προς επίλυση. Γράφεις κώδικα, πατάς Go και βλέπεις τι ψάρια πιάνεις.

Code4startup

Αυτό εδώ είναι καλή λύση για να μάθεις να γράφεις κώδικα δουλεύοντας πάνω σε πραγματικά web projects. Τα μαθήματα επικεντρώνονται σε web development, είναι επι πληρωμή, αλλά υπάρχουν και δωρεάν μαθήματα για ReactJS για αρχάριους, Ruby on Rails & Heroku κα. Αν σας αρέσει να μαθαίνετε φτιάχνοντας κάτι, εδώ είστε.

Code Abbey

Ενα διαφορετικό site για να μάθεις κώδικα. Εδώ δεν υπάρχουν μαθήματα για συγκεκριμένες γλώσσες, αλλά προκλήσεις/προβλήματα που καλείσαι να λύσεις γράφοντας -τι άλλο;- κώδικα. Θυμίζει λίγο το codingbat, αλλά στο πιο γενικό. Περιέχει δηλαδή ασκήσεις για αρχάριους και προχωρήμένους, σε διάφορα θέματα όπως: Μαθηματικά, Θεωρία Γράφων, Γεωμετρία, Συμβολοσειρές, Φυσική και Μοντελοποίηση, κλπ. Τις λύνεις και παίρνεις πόντους για να μπεις στο Hall of Fame. Ο πατροπαράδοτος τρόπος φίλες και φίλοι! Δείτε τα brainfuck puzzles αν έχετε χρόνο… 🙂 Η γλώσσα προγραμματισμού δεν παίζει ρόλο, γιατί είναι δική σας επιλογή, προφανώς. Εδώ θα βρείτε μια σύντομη ανάλυση της κάθε γλώσσας.

sqlzoo.net

Αυτό το site είναι ένα εξαίρετο wiki για τις φίλες και φίλους database admins καθώς και όσους/ες έχουν την… τύχη να αρχίζουν να ασχολούνται με βάσεις δεδομένων (με τις υγείες σας, παιδιά!). Εδώ λοιπόν θα μάθετε SQL μέχρι να λιώσετε.  Είναι ένα από τα λίγα του είδους που προσφέρουν δωρεάν «μαθήματα» SQL. Μην περιμένετε βίντεο και τα ρέστα. Περιέχει εκπαιδευτικά tutorials με κουίζ / ερωτήματα – ε τι περιμένατε, SQL είναι…

Code Combat

Αν το μόνο πράγμα που έχεις μάθει με σιγουριά στη ζωή σου είναι τα διάφορα raids στο WoW, ή τα dungeons του Diablo (αν είσαι κάποιας ηλικίας ρε παιδί μου), τότε μάλλον πρέπει να αφήσεις όλα τα υπόλοιπα sites του άρθρου και να δεις αυτό εδώ. Παίζεις το παιχνιδάκι και μαθαίνεις να γράφεις Python και JS. Πολύ καλό, αλληλεπιδραστικό και κεφάτο.

TryHaskell.org

ΟΚ, επειδή ξέρω ότι η πολύ Python και Javascript σας έπεσε βαριά, να και κάτι διαφορετικό να ξεσκάσετε. Εδώ θα μάθετε Haskell – τα μαθήματα είναι αλληλεπιδραστικά και δωρεάν.

Ruby Monk

Αν πάλι, δεν θέλετε να δώσετε λεφτά για την Ruby, δείτε κι αυτό εδώ, που προσφέρει δωρεάν tutorials για να μάθετε τα κόλπα της γλώσσας μέσα στον browser. Υπάρχουν ξεχωριστά μαθήματα για αρχάριους/ες και προχωρημένους/ες. Δειτε π.χ. την Εισαγωγή στα Ruby Objects:

learn-*.org

Κλείνουμε με όχι ένα αλλά μια σειρά από interactive, ιστοσελιδες για να μάθετε:

Κάθε ένα site έχει παρόμοια δομή: ένας πίνακας περιεχομένων από όπου διαλέγεις μάθημα και στο κάτω μέρος ένας online interactive parser/compiler για να γράφεις κώδικα και να τον εκτελείς επί τόπου. Όλα τα tutorials είναι φτιάγμένα για να μπορεί να τα κάνει ακόμα και κάποιος που δεν έχει ιδέα. Ξεκινάνε από το μηδέν (Hello World) και σε φτάνουν μέχρι προχωρημένα ζητήματα (π.χ. Python closures & Numpy, HTML5 Web workers & App Cache, template metaprogramming και binary trees σε C++ κλπ). Κάποια τμήματα είναι υπό κατασκευή, μην νομίζετε ότι υπάρχουν όλα. Τα πιο «αδύναμα» tutorials της σειράς είναι της Perl, της PHP και του Shell. Άλλωστε για αυτές τις γλώσσες υπάρχουν εκατοντάδες άλλες ιστοσελίδες.

Δείτε ακόμα

Αν ενδιαφέρεστε έχουμε και εμείς εδώ στο linuxinsider.gr μια σειρά από tutorials για PHP, Perl και Bash Shell και άλλα πολλά:

PHP

Tutorial: Εισαγωγή στην PHP

Python

Tutorial: Python με απλά λόγια!

Χτίζοντας εφαρμογές με το Quickly και την Python

 

GCC/C/C++

GCC: Tutorial για να μεταγλωττίζετε κώδικα με βελτιστοποιήσεις

Classes και Objects – Η Θεωρία

Web Development

Πρώτα βήματα στο Web Development: Τι είναι το npm και πως το χρησιμοποιούμε για εγκατάσταση-δημιουργία Node.js πακέτων

Εισαγωγή στα Cascading Style Sheets (CSS)

Εισαγωγή στις NoSQL βάσεις δεδομένων – Χρήση του Cassandra

Perl

Μαθήματα Perl (Μέρος 1): Μεταβλητές και operators

Μαθήματα Perl (Μέρος 2): Χειρισμός arrays, hashes και regular expressions

Μαθήματα Perl (Μέρος 3): Ελεγχος ροής, αρχεία και αναφορές

Bash

Εισαγωγή στο Bash: Ροές και pipes

Bash: Βρόχος επανάληψης σε εύρος αριθμών όπου μεταβλητές ορίζουν την αρχή ή το τέλος

Bash: Κωδικοί εξόδου και έλεγχος ροής

Bash: Επεξεργασία κειμένου με Regular Expressions και άλλα κόλπα

 

Πηγή άρθρου: https://planet.ellak.gr/  https://www.linuxinsider.gr/

 

Το Ubuntu 19.04 με κωδική ονομασία Disco Dingo μόλις κυκλοφόρησε και φέρνει αναβαθμίσεις στις εκδόσεις λογισμικού που περιέχει, όσο και βελτιώσεις στην απόδοση και απόκριση του συστήματος συνολικά.
Περιέχει τις τελευταίες σταθερές ενημερώσεις για το GNOME Desktop, μια καλύτερη εμπειρία snap και ένα νέο πυρήνα Linux έκδοσης 5.

Το Disco Dingo είναι έκδοση μικρής διάρκειας, που σημαίνει ότι θα έχει υποστήριξη για 9 μήνες από την ημερομηνία κυκλοφορίας.

ΑΝΑΒΑΘΜΙΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ

Ξεκινώντας από το χαμηλότερο επίπεδο, θα δούμε αναβαθμίσεις στον πυρήνα και σε σημαντικές βιβλιοθήκες του συστήματος. Ο πυρήνας έκδοσης 5.00 προσθέτει υποστήριξη για την κάρτα γραφικών AMD Radeon RX Vega M, καθώς και για Raspberry Pi 3B και 3B+, τον Qualcomm Snapdragon 845, όπως και πολλές βελτιώσεις για USB 3.2 και Type-C.
Άλλες αναβαθμίσεις περιλαμβάνουν:

  • glibc 2.29
  • OpenJDK 11
  • boost 1.67
  • rustc 1.31
  • GCC 8.3
  • Python 3.7.3
  • ruby 2.5.5
  • php 7.2.15
  • perl 5.28.1
  • golang 1.10.4

Το Ubuntu 19.04 έρχεται με το GNOME 3.32 το οποίο φέρνει αρκετές βελτιώσεις και νέα χαρακτηριστικά.

Το Yaru Theme παρουσιάζει βελτίωσεις, όπως dark mode και ένα νέο σετ εικονιδίων.

GS Connect

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

sudo apt install gnome-shell-extension-gsconnect

Για περισσότερα νέα χαρακτηριστικά, διαβάστε τις σημειώσεις έκδοσης και κάντε λήψη το Ubuntu 19.04 Disco, από εδώ.

Το επίσημο Wallpaper μπορείτε να το κάνετε λήψη από τον παρακάτω σύνδεσμο:
Disco Dingo 4096×2304

Η Ανακοίνωση Κυκλοφορίας από τον Adam Conrad.

Δείτε και ένα βίντεο περιήγησης στη νέα έκδοση:


Για όποια απορία έχετε ή για όποιο πρόβλημα σχετικά με το Ubuntu, το το φόρουμ της Ελληνικής Κοινότητας είναι πάντα στη διάθεση σας.

Βρείτε επίσης την Ελληνική Κοινότητα του Ubuntu:

Πηγή άρθρου: http://www.ubuntu-gr.org/discodingo/

Ubuntu! Κυκλοφόρησε η νέα έκδοση, 19.04, της διανομής Ubuntu! Μπορείτε να την κατεβάσετε από το επίσημο site. Μην ξεχάσετε να ρίξετε μια ματιά στις σημειώσεις της έκδοσης πρίν την αναβάθμιση ή την εγκατάσταση. Υπενθυμίζουμε ότι βγαίνει σε πολλές "γεύσεις" ;-)

  • Ubuntu με άρωμα GNOME
  • Kubuntu με γεύση KDE
  • Lubuntu για ελαφριές επιδόσεις
  • Budgie για απλότητα
  • Kylin για την Άπω Ανατολή
  • Mate για ένα αναδρομικό μέλλον
  • Ubuntu Studio για το στούντιο
  • Xubuntu για τους λάτρεις του XFCE

 

Καλά κατεβάσματα! Torrents μπορείτε να βρείτε εδώ: http://torrent.ubuntu.com:6969/

To Blog της Ελληνικής κοινότητας του Bitcoin

Ολοκληρώθηκε ο ιδιότυπος μαραθώνιος πληρωμών μέσω του lightning δικτύου με γνωστά μέλη της Bitcoin κοινότητας να περνάνε ο ένας στον άλλον satoshi, την μικρότερη νομισματική μονάδα του Bitcoin με μόνη υποχρέωση τους να προσθέτουν 10 satoshi σε κάθε πέρασμα τους.

Ο ιδιότυπος αυτός ψηφιακός μαραθώνιος ξεκίνησε από τον holdnaut τον Ιανουάριο του 2019

Μέχρι την ολοκλήρωση του στις 13 Απριλίου που διάρκησε 83 μέρες έκανε 291 περάσματα με 281 μοναδικούς αποδέκτες σε 56 χώρες σε όλο τον κόσμο.

Εντυπωσιακές στιγμές ήταν το πέρασμα του στο μέλος της Bitcoin κοινότητας στο Ιράν που με την σειρά του το πέρασε στο Bitcoin embassy του Ισραήλ, δυο παραδοσιακά εχθρικές πολιτικά χώρες δείχνοντας ότι το Bitcoin είναι ένα δίκτυο πληρωμών που δεν γνωρίζει σύνορα η πολιτικές διαμάχες.

To lightning torch πέρασε και στην Ελλάδα στο μέλος της Bitcoin κοινότητας @ArgyXafis

To δίκτυο πληρωμών πέρασε από 281 μοναδικούς χρήστες γνωστά μέλη της Bitcoin κοινότητας αλλά και σε γνωστά ονόματα στον χώρο της τεχνολογίας όπως είναι ο CEO του twitter Jack Dossier.

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

Η πορεία του ψηφιακού μαραθώνιου ολοκληρώθηκε στην Bitcoin κοινότητα της Βενεζουέλας @btcven με το ποσό των 0.0429btc αξίας πάνω από 200$

 

The post Ολοκληρώθηκε ο μαραθώνιος μέσω του lightning network appeared first on To Blog της Ελληνικής κοινότητας του Bitcoin.

Το Ubuntu 19.04 με κωδική ονομασία Disco Dingo μόλις κυκλοφόρησε και φέρνει αναβαθμίσεις στις εκδόσεις λογισμικού που περιέχει, όσο και βελτιώσεις στην απόδοση και απόκριση του συστήματος συνολικά. Περιέχει τις τελευταίες σταθερές ενημερώσεις για το GNOME Desktop, μια καλύτερη εμπειρία
Μερικές φορές, μπορεί να βρίσκεσαι σε ένα PC ή server και να θες να μάθεις το είδος της μνήμης RAM που έχει, δηλαδή τι ακριβώς DIMMS υπάρχουν πάνω στη μητρική. Μπορεί να το έχεις ξεχάσει ή να μην το…   Διαβάστε τη συνέχεια του άρθρου Πως ελέγχουμε τον τύπο και την ταχύτητα της μνήμης RAM σε υπολογιστή με Linux όπως δημοσιεύθηκε στο Linux Insider

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

Τα μαθήματα είναι μια δράση που πραγματοποιεί ο Οργανισμός Ανοιχτών Τεχνολογιών(ΕΕΛΛΑΚ) στο πλαίσιο συνεργασίας που έχει με το Δήμο Αθηναίων και τις Λέσχες Φιλίας του Δήμου, οι θεματικές ενότητες που καλύπτουν αφορούν στα εξής:

  • Τι είναι το Ίντερνετ
  • Πώς αναζητούμε πληροφορίες στο Ίντερνετ
  • Πώς δημιουργούμε και χρησιμοποιούμε το Ηλεκτρονικό ταχυδρομείο
  • Πού βρίσκουμε και πώς χρησιμοποιούμε τις διαδικτυακές  υπηρεσίες του Δήμου Αθήνας και τις πιο χρήσιμες υπηρεσίες Δημόσιου.

Τα μαθήματα θα συνεχιστούν, στόχος είναι η διάρκειά τους να καλύψει όσες περισσότερες από τις θεματικές ενότητες που προτείνουν και βρίσκουν χρήσιμες για την καθημερινότητά τους οι συμμετέχοντες. Περισσότερες πληροφορίες για τη δράση υπάρχουν εδώ.  Όσοι ενδιαφέρονται να εκπαιδευτούν μπορούν να δηλώσουν συμμετοχή στις Λέσχες Φιλίας του Δήμου.

 

Ο Οργανισμός Ανοιχτών Τεχνολογιών (ΕΕΛΛΑΚ), στο πλαίσιο των δράσεων του για τη διεξαγωγή εκπαιδευτικών προγραμμάτων που αφορούν τις ανοιχτές τεχνολογίες αναζητά συνεργάτες για την παραγωγή εκπαιδευτικού υλικού, όλο το εκπαιδευτικό υλικό θα διατίθεται με άδεια CC-BY-SA. Το εκπαιδευτικό υλικό θα πρέπει να διαμορφωθεί στην πλατφόρμα moodle (elearn.ellak.gr).

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

Το εκπαιδευτικό υλικό αφορά το νέο μάθημα “Basic ICT Skills” και αφορά την παραγωγή εκπαιδευτικού υλικού 48 ωρών (16 ενότητες των 3 ωρών) στα αγγλικά για μαθητές άνω των 18 ετών.  Οι συνεργάτες θα πρέπει να αξιοποιήσουν το εκπαιδευτικό υλικό που υπάρχει ήδη στο elearn.ellak.gr (Use of LibreOffice for an office automation environment), δείτε και ενδεικτικά προτεινόμενα περιεχόμενα του νέου μαθήματος:

  • Χρήση Υπολογιστή και Ίντερνετ, τεχνικές αναζήτησης πληροφοριών
  • Δημιουργία/χρήση Ηλεκτρονικού Ταχυδρομείου και Βιογραφικού με το europass
  • Εφαρμογές Αυτοματισμού Γραφείου (Libre Office)

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

Οι ενδιαφερόμενοι καλούνται να στείλουν:

  1. αναλυτική περιγραφή του περιεχομένου και για τα 16 μαθήματα που προτείνουν να αναπτύξουν (αναφέροντας το υλικό που θα καλύπτει κάθε μάθημα (μαθησιακοί στόχοι και γνώσεις) αλλά και τι θα περιλαμβάνει το υλικό (πχ. κείμενο, εικόνες, βίντεο, ασκήσεις, αξιολόγηση, πηγές, βοηθήματα, κλπ) λαμβάνοντας υπόψη ότι κάθε μάθημα θα είναι 3 διδακτικές ώρες),
  2. χρονοδιάγραμμα για την ανάπτυξη του εκπαιδευτικού υλικού,
  3. συνολικό κόστος,
  4. αναλυτικό βιογραφικό, (να περιληφθεί στο βιογραφικό και η συμμετοχή σε εθελοντικές δράσεις προώθησης των ανοιχτών τεχνολογιών)

 

στο hr@eellak.gr έως τις 25 Απριλίου με θέμα “Προσφορά για Εκπαιδευτικό Υλικό”, οι συνεργάτες της ΕΕΛΛΑΚ θα καλούνται να συμμετέχουν και σε εθελοντικές δράσεις προώθησης των ανοιχτών τεχνολογιών.

 

“The Age of Stupid” (2009) documentary screening.

“A future archivist looks at old footage from the year 2008 to understand why humankind failed to address climate change.”

The Age of Stupid Screening

The Client

ManpowerGroup, on behalf of its client, a leading International Technology and Telecom Services Company, is seeking for a Python Developer for its premises in Athens, Greece.


JobDescription

The ideal candidate should be a talented Python (2 and/or 3) Developer with experience on Django, Flask Frameworks. 

Your main responsibilities include:

  • Writing effective, scalable code following coding patterns.

  • Developing back-end components to improve telecom-engineers’ tasks and overall operation performance.

  • Testing and debugging Applications.

  • Improving functionality of existing Django Application.

  • Implementing security and data protection solutions.

  • Coordinating with internal teams to understand user requirements and provide technical solutions.

Required skills:

  • University degree in Computer Science.

  • Minimum 2 years of working experience.

  • Excellent knowledge of Python 2 and/or 3.

  • Framework Experience (Django, Flask).

  • Military obligations fulfilled.

Additional skills:

Any experience in the following areas will be considered an asset.

  • Experience in Spark, Cassandra, geoServer.

  • Git / gitHub.

  • Working with Big Data.

  • Working with analytics.

RemunerationPackage

  • Competitive monthly Gross Salary.

  • Excellent working environment.

  • Continuous training.

  • Participation in conferences.

The candidate may submit his/her CV at: https://www.directch.com/100152PythonDeveloper


(Σημείωση: Στα πλαίσια του GDPR ο υποψήφιος θα πρέπει να κάνει εγγραφή (registration) στην ιστοσελίδα μας καθώς και θα πρέπει να δώσει την έγκρισή του (consent) σχετικά με τα προσωπικά του δεδομένα).

 

 

  • Νέο σύστημα για την προστασία και την ενθάρρυνση μαρτύρων να καταγγείλουν παραβάσεις της νομοθεσίας της ΕΕ
  • Οι μάρτυρες δημοσίου συμφέροντος θα μπορούν να διαλέξουν να υποβάλουν καταγγελίες εντός ή εκτός εργασίας τους
  • Δικλείδες ασφαλείας εναντίον των τιμωρητικών πρακτικών από εργοδότες

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

Οι νέοι κανόνες, που υιοθετήθηκαν με 591 ψήφους υπέρ, 29 κατά και 33 αποχές και οι οποίοι έχουν ήδη ανεπίσημα συμφωνηθεί με τους υπουργούς της ΕΕ, θεσπίζουν νέα, πανευρωπαϊκά πρότυπα για την προστασία των μαρτύρων δημοσίου συμφέροντος που αποκαλύπτουν παραβάσεις της ευρωπαϊκής νομοθεσίας. Οι καταγγελίες μπορούν να αφορούν, μεταξύ άλλων, θέματα σχετικά με συμβάσεις του δημοσίου, χρηματοπιστωτικές υπηρεσίες, ξέπλυμα χρήματος, ασφάλεια προϊόντων και μεταφορών, πυρηνική ασφάλεια, δημόσια υγεία, προστασία καταναλωτών και προσωπικά δεδομένα.

Ασφαλείς μέθοδοι καταγγελιών

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

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

Δικλείδες ασφαλείας εναντίον τιμωρητικών πρακτικών

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

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

Δήλωση

Η εισηγήτρια Virginie Rozière (Σοσιαλιστές, Γαλλία) είπε: «Πρόσφατα σκάνδαλα, όπως τα LuxLeaks, τα Panama Papers και τα Football leaks έχουν βοηθήσει να πέσει φως στην επισφάλεια που αντιμετωπίζουν οι μάρτυρες δημοσίου συμφέροντος σήμερα. Στις παραμονές των ευρωπαϊκών εκλογικών, το Κοινοβούλιο στέλνει ηχηρό μήνυμα ότι εισακούστηκαν οι ανησυχίες των πολιτών και πίεσε για στιβαρά μέτρα που εξασφαλίζουν την ασφάλεια όσων αποφασίζουν να μιλήσουν».

Επόμενα βήματα

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

Σχετικές πληροφορίες

Πρόσφατα σκάνδαλα, από τα LuxLeaks μέχρι τα Panama Papers, έχουν καταδείξει πόσο σημαντικές είναι οι αποκαλύψεις των μαρτύρων δημοσίου συμφέροντος στην ανίχνευση και την πρόληψη παραβάσεων της νομοθεσίας της ΕΕ που απειλούν το δημόσιο συμφέρον και την κοινωνική ευμάρεια.

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

Προς το παρόν μόνο 10 χώρες της ΕΕ (Γαλλία, Ουγγαρία, Ιρλανδία, Ιταλία, Λιθουανία, Μάλτα, Ολλανδία, Σλοβακία, Σουηδία και Ηνωμένο Βασίλειο) παρέχουν πλήρη νομική προστασία. Στις υπόλοιπές χώρες, η προστασία είναι είτε μερική, είτε αφορά μόνο συγκεκριμένους τομείς δραστηριότητας ή κατηγορίες υπαλλήλων.

Πηγή άρθρου: https://www.lawspot.gr

 

Στις 11 Ιουνίου 2019, οι εκπρόσωποι της δημόσιας διοίκησης και του ιδιωτικού τομέα – υπεύθυνοι χάραξης πολιτικής και λήψης αποφάσεων, νομικοί,  επαγγελματίες , διευθυντές πληροφορικής και προγραμματιστές, και υποστηρικτές του ανοιχτού λογισμικού – θα συναντηθούν στο Βουκουρέστι της Ρουμανίας για να συζητήσουν πολιτικές και στρατηγικές ανοιχτού κώδικα και την εφαρμογή τους στα κράτη μέλη της ΕΕ.

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

Αυτή η δεύτερη έκδοση της διάσκεψης Sharing & Reuse θα προσφέρει την ευκαιρία να εξερευνηθούν οι τρόποι υποστήριξης των κοινοτήτων ανοιχτού κώδικα και  της απορρόφηση των καλύτερων λύσεων. Η εκδήλωση θα αντιμετωπίσει επίσης τάσεις όπως η συλλογική συγγραφή κώδικα  η συνδημιουργία και οι νέες προσεγγίσεις στην ασφάλεια ανοικτού κώδικα. Στην εκδήλωση θα συμμετέχει και ο Οργανισμός Ανοιχτών Τεχνολογιών (ΕΕΛΛΑΚ) παρουσιάζοντας τόσο την γνωσιακή βάση υπηρεσιών του δημόσιου τομέα diadikasies.gr, όσο και λύσεις ελεύθερου λογισμικού για τις δημόσιες διοικήσεις στην ΕΕ

Δείτε περισσότερα στο https://joinup.ec.europa.eu

Workshop facilitators who are interested to work with instructors and provide direct support to students in a mixed classroom for special courses for our co[de] + create project should express their interest by sending their CV in europass format at hr@eellak.gr by April, 25th with the subject “CV for Facilitator”.  The courses will be held in central Athens (Kypseli) from May until July 2019.

Job Description

The Learning space coordinator / workshop facilitator will be in charge of the following tasks:

– Work daily with teachers and students physically and through https://elearn.ellak.gr/

– Present on weekdays mornings and evenings (maximum 5 hours per day)

– Set-up of hardware and learning space each day

– In charge of secure storage of hardware each day

– Provide refreshments and snacks for all participants

– Input to social media and communications work in collaboration with GFOSS

– Keep track of attendance sheets each day and prepare appropriate reports

– Collect Signed Consents for participation and for permission to take photographs

– Hand out public transportation tickets every week

– Provide direct support to students (and instructors) with a shared focus on individual learning and group interaction

– Identify and engage with issues, challenges, and opportunities to facilitate learning and integration

– Arrange and carry out social activities for students

Requirements

– Fluently in English

– Perfect organisational skills

– Strong Computer skills and being comfortable in a gnu/linux environment

– Prior work with refugees or mixed groups will be considered as a plus

– It would be considered as a plus if there is prior involvement with similar activities relevant to GFOSS.

 

———————————————————————————————————————–Full description of code+create. All calls of code+create.

Social Media of code+create

Facebook Page: https://facebook.com

Twitter Account: https://twitter.com

Instagram: https://www.instagram.com

Αν θέλετε να μάθετε να γράφετε κώδικα ή να βελτιώσετε τις γνώσεις σας στο coding, και ψάχνετε για online μαθήματα, σε αυτό το άρθρο θα δούμε μια λίστα με 27 χρήσιμες ιστοσελίδες που προσφέρουν δωρεάν…   Διαβάστε τη συνέχεια του άρθρου 27 εκπαιδευτικές ιστοσελίδες για να μάθεις προγραμματισμό δωρεάν όπως δημοσιεύθηκε στο Linux Insider

H GUADEC, το ευρωπαϊκό συνέδριο χρηστών και προγραμματιστών του  GNOME, είναι το κύριο ετήσιο συνέδριο του GNOME και φέτος πραγματοποιείται στη Θεσσαλονίκη από τις 23 έως τις 28 Αυγούστου

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

Εάν δεν έχετε κάνει καμιά παρουσίαση μέχρι τώρα, αυτή είναι  μια εξαιρετική ευκαιρία για να κάνετε την πρώτη  σας ομιλία – καλωσορίζουμε τους νεοφερμένους και παρέχουμε ένα φιλικό κοινό.

Τα θέματα που μας ενδιαφέρουν ιδιαίτερα περιλαμβάνουν:

1- Ανάπτυξη εφαρμογών και deployment
2- Προστασία απορρήτου και ασφάλεια
3- Οικοδόμηση κοινότητας και ποικιλομορφία
4- Σχεδιασμός εμπειρίας χρηστών και προγραμματιστών
5- Χρήση τεχνολογιών GNOME εκτός της επιφάνειας εργασίας
6- Ενθάρρυνση νέων συνεισφερόντων
7- Οργάνωση και διακυβέρνηση του έργου
8- Χρήση του GNOME από τους χρήστες

Ωστόσο, εάν υπάρχει ένα άλλο θέμα για το οποίο θα θέλατε να μιλήσετε, θα θέλαμε να λάβουμε την ιδέα σας. Οι παρουσιάσεις μπορούν να έχουν διάρκεια 25 ή 40 λεπτών, και περιλαμβάνουν χρόνο για ερωτήσεις.
Μπορείτε να βρείτε περισσότερες πληροφορίες για προτάσεις στο: https://2019.guadec.org/pages/submit-a-proposal.html

Το wiki του BoFs / workshop και των  hacking days θα ενημερωθεί με περισσότερες λεπτομέρειες τις επόμενες εβδομάδες.

Σε περίπτωση που έχετε ερωτήσεις για τις ομιλίες, επικοινωνήστε με την ομάδα εγγράφων στο guadec-papers@gnome.org. Για γενικές ερωτήσεις σχετικά με το GUADEC, επικοινωνήστε με την οργανωτική ομάδα στο guadec-organization@gnome.org

Πηγή άρθρου: https://www.gnome.org

Educators who are interested to professionally teach Basic ICT Skills in a mixed classroom for our co[de] + create project should express their interest by sending their CV in europass format at hr@eellak.gr by April 25th with the subject “CV for Basic ICT Skills course”. The selected applicants will sign a two month contract for this phase of the project.

Job Description

Each class will be a mixed group of young adults (Greek and newcomers), aged 18+. The course will be held for 8 weeks, two times a week for 3 hours (total 48 hours). The students will also have access to the lab 2 days per week for 4-6 hours for practice and free experimentation in teams or individually.

The educational material and the course will be in English and adapted for mixed courses (Greek and refugee teenagers and youth aged 18+). The educational material and the exercises will be available at https://elearn.ellak.gr/. Training for the use of the educational material will be provided to the selected teachers. The selected teachers in cooperation with the facilitator and co[de] + create staff will evaluate the new course and provide feedback to the course developers.

There will be two instructors per class of about 20 students, instructors will be required to work with students in the class and through the e-learning platform https://elearn.ellak.gr/ and provide reports and feedback (in coordination with the project facilitator) on the educational material and learning outcomes of the students. They will also have to be physically present during the open lab days in order to provide assistance to students, during the course they will have to provide feedback and grade students’ assignments and projects.

Requirements

  • Teaching experience in synchronous and asynchronous environments
  • Thorough knowledge of the subject of the course
  • Fluently in English
  • Knowledge of operating courses in the Moodle platform
  • Prior work with refugees or mixed groups will be considered as a plus
  • It would be considered as a plus if there is prior involvement with similar activities relevant to GFOSS.

 

The courses are expected to start in mid May and will be held in central Athens(Kypseli).

 

———————————————————————————————————————–Full description of code+create. All calls of code+create.

Social Media of code+create

Facebook Page: https://facebook.com

Twitter Account: https://twitter.com

Αυτήν την εβδομάδα πραγματοποιούνται εκδηλώσεις στην Ελλάδα και στο εξωτερικό για τις ανοιχτές τεχνολογίες και την καινοτομία! Ο Οργανισμός Ανοιχτών Τεχνολογιών – ΕΕΛΛΑΚ σας προτείνει να τις παρακολουθήσετε και να τις διαδώσετε. Μπορείτε επίσης να δείτε περισσότερες εκδηλώσεις για τις επόμενες εβδομάδες ή να καταχωρίσετε τη δική σας εκδήλωση στο: https://ellak.gr/events

Ημερομηνία/Ώρα Εκδήλωση
16/04/2019
10:00 – 15:00
Open Source Series Symboisis
Symboisis College, Pune, Maharashtra
16/04/2019
18:00 – 22:00
Hackday at hackerspace
Hackerspace.gr, Αθήνα
16/04/2019
19:00 – 22:00
Angular Athens 6th Meetup
Innovathens, Αθήνα
17/04/2019
10:00 – 15:00
Open Source Series MITAOE
MIT Academy of Engineering, Pune, Maharashtra
18/04/2019 – 19/04/2019
Ολοήμερο
26TH Open Systems Days Croatian Linux Users’ Conference
Faculty of Electrical Engineering and Computing (FER), Zagreb
18/04/2019
07:30 – 18:00
Open Source 101
USC Alumni Center, Columbia
18/04/2019
10:00 – 13:00
Open Source Series Event
To be defined, Pune
18/04/2019
18:00 – 21:00
Radix Hacklab Open Assembly
Squat, Αθήνα
20/04/2019
12:00 – 14:00
17th WordPress Thessaloniki Meetup – Open Workshop
DEI College, Θεσσαλονίκη
20/04/2019
16:00 – 18:00
Σειρά μαθημάτων πληροφορικής 2019
Δημοτικό Κέντρο Ελεύθερου Λογισμικού, Πυλαία, Θεσσαλονίκη.

Για τις επόμενες δύο εβδομάδες, η Ευρωπαϊκή Επιτροπή αυξάνει τα χρηματικά βραβεία  EU-FOSSA. Δίνει ένα μπόνους 50% για τον εντοπισμό κρίσιμων σφαλμάτων και ένα μπόνους 30% για άλλες ευπάθειες. Αυτό σημαίνει ότι ο εντοπισμός ορισμένων σφάλματα και η διόρθωση τους μπορούν να αποφέρουν σε έναν προγραμματιστή μέχρι € 45.000.

Το πρόγραμμα «Bounty bug» της ΕΕ-FOSSA 2  βρίσκεται πλέον στον τέταρτο μήνα. Μέχρι στιγμής έχει λάβει περισσότερες από 400 αναφορές σφαλμάτων και έχει δώσει περίπου 100.000 ευρώ. Ορισμένα προγράμματα έχουν ήδη εξαντλήσει τον προϋπολογισμό τους και άλλα αναμένεται να λήξουν τις επόμενες εβδομάδες. Έτσι τώρα είναι καιρός να επικεντρωθούμε στις υπόλοιπες λύσεις ανοιχτού κώδικα. Αυτός είναι ο λόγος για τον οποίο η Ευρωπαϊκή Επιτροπή αποφάσισε, μαζί με τις πλατφόρμες για την αποζημίωση των bugs, να αυξήσει τα έπαθλα για μια περίοδο δύο εβδομάδων για ορισμένα προγράμματα λογισμικού που δεν έχουν λάβει πολλές αναφορές ευπάθειας. «Ελπίζουμε ότι αυτό θα προσελκύσει την προσοχή αυτών των κοινοτήτων για την αναζήτηση ζητημάτων ασφάλειας. Θα ενθαρρύνει επίσης τους προγραμματιστές να επικεντρωθούν σε αυτά τα έργα «, σύμφωνα με την ομάδα έργου EU-FOSSA 2.

Η ανταμοιβή για κρίσιμα και εξαιρετικά σφάλματα θα αυξηθεί κατά 50%. Για όλα τα άλλα επίπεδα κρισιμότητας, θα υπάρξει μπόνους 30%. Επιπλέον, εάν ένας προγραμματιστής παρέχει μια ενημερωμένη έκδοση κώδικα για την υποβληθείσα ευπάθεια, το  20% για την παροχή διορθώσεων θα εφαρμοστεί σε αυτό το νέο ποσό επάθλου . Για παράδειγμα, ένας προγραμματιστής που βρίσκει και διορθώνει ένα εξαιρετικό σφάλμα στο KeePass θα μπορούσε να  κερδίσει 45.000 ευρώ.

Η EU-FOSSA 2 προωθεί τον έλεγχο του λογισμικού ανοικτού κώδικα που χρησιμοποιείται έντονα στα ευρωπαϊκά θεσμικά όργανα.

Παρακάτω μπορείτε να βρείτε τους δεσμούς με τα προγράμματα που απονέμουν νέα βραβεία. Θα ισχύουν από τις 10 έως τις 24 Απριλίου.

Πηγή άρθρου: https://joinup.ec.europa.eu

We are AgentRisk, a wealth management company that offers next-generation investment services to high-net-worth individuals. We started AgentRisk out of the need for a data-driven and transparent investment platform to manage our own assets. 

If you want to learn how Machine Learning helps people manage their assets, this is the place to be.

We are a distributed team (Los Angeles, SF, Greece) and our founders have exits under their belts. They are also super technical (we all write code).

We are looking for a Senior Engineer that knows Python, JS and understands kubernetes, docker and all the other buzz words. 

Send us an email at founders [at] agentrisk.com if you are interested!

To Blog της Ελληνικής κοινότητας του Bitcoin

Ο γνωστός σε όλους πλέον απατεώνας Craig Wright αποφάσισε να στραφεί κατά γνωστών μελών της Bitcoin κοινότητας απειλώντας τους με αγωγές όσοι δημόσια δηλώνουν το αυτονόητο ότι δηλαδή ο Craig Wright δεν έχει καμία σχέση με την δημιουργία του Bitcoin και με τον δημιουργό του, Satoshi Nakamoto.

Να θυμίσουμε εδώ ότι ο Craig Wright εμφανίστηκε το 2015 και αργότερα την άνοιξη του 2016 παρουσιάζοντας τον εαυτό του ως τον δημιουργό του Bitcoin Satoshi Nakamoto έχοντας και την υποστήριξη του πρώην developer του Bitcoin Gavin Andressen.

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

Τις τελευταίες μέρες αποφάσισε να πάει την εξαπάτηση του ένα βήμα παραπάνω απειλώντας γνωστά μέλη της Bitcoin κοινότητας με αγωγές κοινότητας που δημόσια έχουν δηλώσει το αυτονόητο ότι δηλαδή ο Craig Wright είναι ένας κοινός απατεώνας.

Η αρχή έγινε με το ανώνυμο μέλος της κοινότητας Hodlnaut, δημιουργό του lightning torch. O Hodlnaut μετά τις απειλές του Craig Wright αναγκάστηκε να διαγράψει τον λογαριασμό του στο twitter ενώ ήδη έχει δημιουργηθεί σελίδα υποστήριξης για όποια νομικά έξοδα χρειαστούν αν και εφόσον ο Craig Wright κάνει πραγματικότητα τις απειλές του.

Το πόσο που έχει μαζευτεί αυτή την ώρα ξεπερνάει τα 8.000 δολάρια ενώ την υπεράσπιση του δεσμεύτηκε να την αναλάβει ο Preston Bryne.

O Craig Wright όμως δεν έμεινε μόνο εκεί καθώς έστειλε και δεύτερο εξώδικο στον μέλος της κοινότητας McCormack

Καλό είναι να θυμηθούμε τις δεκάδες απόπειρες εξαπάτησης από τον Craig Wright, απόπειρες που συνεχίζονται μέχρι και σήμερα καθώς προσπαθεί απεγνωσμένα να δημιουργήσει την εντύπωση ότι είναι ο δημιουργός του Bitcoin κατασκευάζοντας συνεχώς ψευδή στοιχεία.

Εδώ και εδώ μπορείτε να βρείτε σε λίστα τις απόπειρες εξαπάτησης του καθώς και στο site που έχει δημιουργηθεί γιαυτό τον σκοπό εδώ

 

The post O hoaxer Craig Wright(faketoshi) στρέφετε νομικά κατά μελών της Bitcoin κοινότητας appeared first on To Blog της Ελληνικής κοινότητας του Bitcoin.

by: Wikimedia Greece

Το διάστημα 5-7 Απρίλη 2019 πραγματοποιήθηκε, στην πόλη Donostia-San Sebastian της Χώρας των Βάσκων, το πρώτο εκπαιδευτικό συνέδριο του κινήματος του Wikimedia, με τίτλο «Wikimedia+Education Conference 2019».

Στο συνέδριο συμμετείχα με πλήρη υποτροφία (μετακίνηση, διαμονή, φαγητό) από το Basque Wikimedians User Group. Εκεί παρουσίασα την εργασία «Educating educators online» η οποία πέρασε από peer review και εγκρίθηκε ως μια από τις εργασίες του Συνεδρίου. Οι διαφάνειες της παρουσίασης είναι διαθέσιμες στα Wikimedia Commons. Η εργασία αναφέρεται στην διαδικτυακή πλατφόρμα που δημιουργήσαμε μαζί με τον Κωνσταντίνο Σταμπουλή και μέσω της οποίας επιμορφώνουμε εκπαιδευτικούς στις βασικές αρχές της Βικιπαίδειας, στα συνεργατικά εγχειρήματα, εξοικιώνουμε με τη χρήση των σχετικών εργαλείων και το βασικότερο δίνουμε ιδέες για τη δημιουργία σχολικών δράσεων. Μια πρώτη μορφή της εργασίας είχε παρουσιαστεί και στο 4ο Διεθνές Συνέδριο για την προώθηση της Εκπαιδευτικής Καινοτομίας στη Λάρισα τον Οκτώβρη του 2018. Στην παρούσα εργασία επειχειρούμε περαιτέρω επεκτάσεις της λειτουργίας της πλατφόρμας και συζητάμε τις δυνατότητες που παρέχει αναζητώντας μια ολοκληρωμένη, τυποποίηση με επιστημονικό τρόπο, της παρεχώμενης επιμόρφωσης.

Στο ίδιο συνέδριο παρουσίασα και δύο πόστερ. Το πρώτο ήταν η σύνοψη της εργασίας σε μορφή πόστερ και το δεύτερο είχε τίτλο «Wikipedia Education Program in Greece (in a nutshell)» το οποίο περιέχει μια σύνοψη των βασικών επιτευγμάτων από τη δουλειά που κάνουμε ως Wikimedia Community User Group Greece στην εκπαίδευση από το 2010 μέχρι σήμερα. Τα δυο πόστερ είναι διαθέσιμα στα Wikimedia Commons.

Στο περιθώριο του συνεδρίου συναντήθηκα με την Katherine Maher την CEO του Wikimedia Foundation. Μαζί της, είχα την ευκαιρία να συζητήσουμε για το εκπαιδευτικό πρόγραμμα στην Ελλάδα και για τις δικές μας παρεμβάσεις. Έδειξε ιδιαίτερο ενδιαφέρον για την δουλειά μας στην εκπαίδευση ενηλίκων και συζητήσαμε για το πόσο σημαντική είναι η δουλειά του κινήματος της Wikimedia αλλά και η υποστήριξη του Wikimedia Foundation σε αυτό το εγχείρημα.

Το συνέδριο άρχισε τις εργασίες του το απόγευμα της Παρασκευής από το Δημαρχείο της πόλης με χαιρετισμό από το Δήμαρχο και ακολούθησε η ομιλία της αμερικανίδας εκπαιδευτικού May Burns.

Το Σάββατο μεταφερθήκαμε στην Tabakalera για το βασικό μέρος του συνεδρίου όπου είχαμε την εναρκτήρια ομιλία της Katherine Maher.

Στη συνέχεια, παρακολούθησα τις ομιλίες: «Challenges of growing communities : Make Wikipedia trustworthy to the educators», «Idazlezainak: writers guards», «Article evaluation: Valoración y seguimiento de los aprendizajesen la edición de artículos de Wikipedia: talleres para conocer el uso del tablero y la rúbrica» , «Creating a didactical unit about Wikipedia for secondary teachers», «A national contest about Wikipédia for the highschoolstudents : Wikiconcours lycéen» και ακολούθησε το διάλλειμα.

Μετά το διάλειμμα ήταν η ομιλία Filip Maljković με θέμα την εκπαίδευση των εκπαιδευτικών στη Σερβία και ακολούθησε η δικιά μου ομιλία. Πολύ ενδιαφέρουσα ήταν και η ομιλία για το translation tool.

Κατά τις 17:00 είχαμε και μια σειρά από σύντομα Ligtning talks, για να ακολουθήσει μια συζήτηση για εγκυκλοπαίδιες για παιδιά, η καθιερωμένη ομαδική φωτογραφία και η παρουσίαση των πόστερ. Η μέρα έκλεισε με δείπνο στο παραδοσιακό Lizeaga cider-house.

Την Κυριακή το πρόγραμμα ήταν πιο χαλαρό και ξεκίνησε με μια ομαδική συζήτηση για την στρατηγική, ακολούθησαν 2 ομιλίες και κάποια ακόμα lightning talks. Παρακολούθησα με ενδιαφέρον και την ομιλία για την σεξουαλική διαπαιδαγώγηση στη Wikipedia από τον Τυνήσιο Houssem Abida.

Είναι σημαντικό να σημειωθεί ότι κάποιες από τις ομιλίες υπήρχε ταυτόχρονη διερμηνεία από τη Αγγλική στη γλώσσα των Βάσκων και στην Ισπανική και το ανάποδο. Με αυτό τον τρόπο ενισχύθηκε η συμμετοχή από ντόπιους εκπαιδευτικούς και ταυτόχρονα κάποιοι από τους ομιλητές μπορούσαν να μιλήσουν στην μητρική τους γλώσσα.

Μάριος Μαγιολαδίτης

 

Πηγή άρθρου: planet.ellak.gr    https://blog.wikimedia.gr

Σε αυτό το άρθρο θα μάθουμε διάφορους τρόπους για να εντοπίζουμε ποιες διεργασίες/προγράμματα χρησιμοποιούν το swap του Linux και πόσο χώρο καταναλώνει το καθένα. Είναι χρήσιμο να το ξέρουμε,…   Διαβάστε τη συνέχεια του άρθρου Πως βρίσκουμε ποιες διεργασίες χρησιμοποιούν το swap του Linux και πόσο όπως δημοσιεύθηκε στο Linux Insider

To WordCamp Athens 2019, είναι το τρίτο κατά σειρά WordCamp που διοργανώνεται στην Αθήνα και έχει σκοπό να δώσει την ευκαιρία σε όλους όσους αγαπούν…

The post WordCamp Athens 2019 appeared first on WordPress Greek Community.

Το διάστημα 5-7 Απρίλη 2019 πραγματοποιήθηκε, στην πόλη Donostia-San Sebastian της Χώρας των Βάσκων, το πρώτο εκπαιδευτικό συνέδριο του κινήματος του Wikimedia, με τίτλο «Wikimedia+Education Conference 2019».

Στο συνέδριο συμμετείχα με πλήρη υποτροφία (μετακίνηση, διαμονή, φαγητό) από το Basque Wikimedians User Group. Εκεί παρουσίασα την εργασία «Educating educators online» η οποία πέρασε από peer review και εγκρίθηκε ως μια από τις εργασίες του Συνεδρίου. Οι διαφάνειες της παρουσίασης είναι διαθέσιμες στα Wikimedia Commons. Η εργασία αναφέρεται στην διαδικτυακή πλατφόρμα που δημιουργήσαμε μαζί με τον Κωνσταντίνο Σταμπουλή και μέσω της οποίας επιμορφώνουμε εκπαιδευτικούς στις βασικές αρχές της Βικιπαίδειας, στα συνεργατικά εγχειρήματα, εξοικιώνουμε με τη χρήση των σχετικών εργαλείων και το βασικότερο δίνουμε ιδέες για τη δημιουργία σχολικών δράσεων. Μια πρώτη μορφή της εργασίας είχε παρουσιαστεί και στο 4ο Διεθνές Συνέδριο για την προώθηση της Εκπαιδευτικής Καινοτομίας στη Λάρισα τον Οκτώβρη του 2018. Στην παρούσα εργασία επειχειρούμε περαιτέρω επεκτάσεις της λειτουργίας της πλατφόρμας και συζητάμε τις δυνατότητες που παρέχει αναζητώντας μια ολοκληρωμένη, τυποποίηση με επιστημονικό τρόπο, της παρεχώμενης επιμόρφωσης.

Στο ίδιο συνέδριο παρουσίασα και δύο πόστερ. Το πρώτο ήταν η σύνοψη της εργασίας σε μορφή πόστερ και το δεύτερο είχε τίτλο «Wikipedia Education Program in Greece (in a nutshell)» το οποίο περιέχει μια σύνοψη των βασικών επιτευγμάτων από τη δουλειά που κάνουμε ως Wikimedia Community User Group Greece στην εκπαίδευση από το 2010 μέχρι σήμερα. Τα δυο πόστερ είναι διαθέσιμα στα Wikimedia Commons.

Στο περιθώριο του συνεδρίου συναντήθηκα με την Katherine Maher την CEO του Wikimedia Foundation. Μαζί της, είχα την ευκαιρία να συζητήσουμε για το εκπαιδευτικό πρόγραμμα στην Ελλάδα και για τις δικές μας παρεμβάσεις. Έδειξε ιδιαίτερο ενδιαφέρον για την δουλειά μας στην εκπαίδευση ενηλίκων και συζητήσαμε για το πόσο σημαντική είναι η δουλειά του κινήματος της Wikimedia αλλά και η υποστήριξη του Wikimedia Foundation σε αυτό το εγχείρημα.

Το συνέδριο άρχισε τις εργασίες του το απόγυμα της Παρασκευής από το Δημαρχείο της πόλης με χαιρετισμό από το Δήμαρχο και ακολούθησε η ομιλία της αμερικανίδας εκπαιδευτικού May Burns.

Το Σάββατο μεταφερθήκαμε στην Tabakalera για το βασικό μέρος του συνεδρίου όπου είχαμε την εναρκτήρια ομιλία της Katherine Maher.

Στη συνέχεια, παρακολούθησα τις ομιλίες: «Challenges of growing communities : Make Wikipedia trustworthy to the educators», «Idazlezainak: writers guards», «Article evaluation: Valoración y seguimiento de los aprendizajesen la edición de artículos de Wikipedia: talleres para conocer el uso del tablero y la rúbrica» , «Creating a didactical unit about Wikipedia for secondary teachers», «A national contest about Wikipédia for the highschoolstudents : Wikiconcours lycéen» και ακολούθησε το διάλλειμα.

Μετά το διάλειμμα ήταν η ομιλία Filip Maljković με θέμα την εκπαίδευση των εκπαιδευτικών στη Σερβία και ακολούθησε η δικιά μου ομιλία. Πολύ ενδιαφέρουσα ήταν και η ομιλία για το translation tool.

Κατά τις 17:00 είχαμε και μια σειρά από σύντομα Ligtning talks, για να ακολουθήσει μια συζήτηση για εγκυκλοπαίδιες για παιδιά, η καθιερωμένη ομαδική φωτογραφία και η παρουσίαση των πόστερ. Η μέρα έκλεισε με δείπνο στο παραδοσιακό Lizeaga cider-house.

Την Κυριακή το πρόγραμμα ήταν πιο χαλαρό και ξεκίνησε με μια ομαδική συζήτηση για την στρατηγική, ακολούθησαν 2 ομιλίες και κάποια ακόμα lightning talks. Παρακολούθησα με ενδιαφέρον και την ομιλία για την σεξουαλική διαπαιδαγώγηση στη Wikipedia από τον Τυνήσιο Houssem Abida.

Είναι σημαντικό να σημειωθεί ότι κάποιες από τις ομιλίες υπήρχε ταυτόχρονη διερμηνεία από τη Αγγλική στη γλώσσα των Βάσκων και στην Ισπανική και το ανάποδο. Με αυτό τον τρόπο ενισχύθηκε η συμμετοχή από ντόπιους εκπαιδευτικούς και ταυτόχρονα κάποιοι από τους ομιλητές μπορούσαν να μιλήσουν στην μητρική τους γλώσσα.

Μάριος Μαγιολαδίτης

Ένα διαφορετικό Wordpress Meetup έρχεται για πρώτη φόρα με την μορφή ενός open workshop, το οποίο θα λάβει μέρος σε ένα νέο και καλαίσθητο χώρο, στη βιβλιοθήκη του DEI College (στον 3ο όροφο) στις 20 Απριλίου και ώρα 12.00 το μεσημέρι

The post 17th WordPress Thessaloniki Meetup appeared first on WordPress Greek Community.

Η νέα «οδηγία για τα δικαιώματα πνευματικής ιδιοκτησίας στην ψηφιακή ενιαία αγορά» επιδιώκει να εξασφαλίσει ότι οι δημιουργοί και οι εκδότες ειδήσεων και οι δημοσιογράφοι θα αποκομίζουν στο internet τα ίδια οφέλη με αυτά που διατίθενται στο μη διαδικτυακό περιβάλλον. Ή μήπως όχι; Δυστυχώς οι νομοθέτες έχουν φροντίσει ώστε, όταν αναφέρεται κάποια νομοθεσία σε «δημιουργούς»,... Continue Reading →

Ξεκινάει αύριο στη στη Ρόδο το 10ο Πανελλήνιο Συνέδριο των Εκπαιδευτικών για τις ΤΠΕ , «Αξιοποίηση των Τεχνολογιών της Πληροφορίας και της Επικοινωνίας στη Διδακτική Πράξη». Το συνέδριο, στο οποίο συμμετέχει ως συνδιοργανωτής και ο Οργανισμός Ανοιχτών Τεχνολογιών (ΕΕΛΛΑΚ), θα διαρκέσει από τις 12 έως και τις 14 Απριλίου, και το αναλυτικό πρόγραμμα μπορείτε να το δείτε εδώ

 Σκοπός του Συνεδρίου

Σκοπός του Συνεδρίου είναι ο γόνιμος προβληματισμός και ο δημιουργικός διάλογος αναφορικά με την εφαρμογή των «Τεχνολογιών της Πληροφορίας και της Επικοινωνίας στην Εκπαίδευση» (ΤΠΕ-Ε), καθώς και τις σύγχρονες πρακτικές έτσι όπως διαμορφώνονται στη σχολική πραγματικότητα. Ιδιαίτερα στοχεύει στο να ευαισθητοποιήσει τους/τις εκπαιδευτικούς Πρωτοβάθμιας και Δευτεροβάθμιας εκπαίδευσης προς την κατεύθυνση ανάδειξης των θεμάτων διδακτικής μεθοδολογίας με την αξιοποίηση των ΤΠΕ.

Το 10ο Συνέδριο απευθύνεται κυρίως στους:

  • Εκπαιδευτικούς Πρωτοβάθμιας Εκπαίδευσης

  • Εκπαιδευτικούς Δευτεροβάθμιας Εκπαίδευσης

  • Επιμορφωτές/τριες ΤΠΕ

  • Επιμορφωτές/τριες και επιμορφούμενους/ες στην διδακτική αξιοποίηση των ΤΠΕ Β΄ Επιπέδου.

  • Μέλη πανεπιστημιακών παιδαγωγικών τμημάτων

  • Φοιτητές/τριες (Παιδαγωγικών Τμημάτων και Τμημάτων Η/Υ & Πληροφορικής).

  • Μεταπτυχιακούς/ές φοιτητές/τριες των ΤΠΕ στην Εκπαίδευση

Πιο αναλυτικά, το Συνέδριο απευθύνεται στους/στις Εκπαιδευτικούς όλων των γνωστικών αντικειμένων της Προσχολικής και Πρωτοβάθμιας εκπαίδευσης, της Δευτεροβάθμιας Γενικής και Επαγγελματικής Εκπαίδευσης, της Ειδικής Αγωγής, στους/στις Επιμορφωτές/τριες των ΤΠΕ, καθώς και στους/στις Συντονιστές Εκπαιδευτικού Έργου, και στα Στελέχη Εκπαίδευσης. Επιπρόσθετα αναζητεί τη βέλτιστη συμβολή των ΤΠΕ στα ειδικευμένα σχολεία όπως αυτά των Παλιννοστούντων, τα Πολυπολιτισμικά Σχολεία, τα Μουσικά και Καλλιτεχνικά Σχολεία, τα Ολοήμερα Δημοτικά κ.ά.

Το Συνέδριο αφορά τόσο τη Δημόσια όσο και την Ιδιωτική Εκπαίδευση, που αναζητά τρόπους αξιοποίησης των ΤΠΕ για τη βελτίωση της Μαθησιακής και Διδακτικής Διαδικασίας και την καλύτερη οργάνωση της Εκπαιδευτικής κοινότητας (Παιδαγωγική αξιοποίηση εκπαιδευτικών και γενικής χρήση υπολογιστικών εφαρμογών, χρήση του διαδικτύου στη διδακτική πράξη, υπηρεσίες του WEB 2.0).

2. Θεματολογία του Συνεδρίου

Εκπαιδευτικό Λογισμικό και υπηρεσίες στήριξης του εκπαιδευτικού έργου

  • Παρουσιάσεις διδασκαλιών με αξιοποίηση των ΤΠΕ που πραγματοποιήθηκαν από εκπαιδευτικούς σε σχολικά εργαστήρια ή/και στις τυπικές αίθουσες διδασκαλίας.

  • Σενάρια διδασκαλίας μαθημάτων

  • Αξιοποίηση των ΤΠΕ στη διδασκαλία μαθημάτων στην Πρωτοβάθμια και Δευτεροβάθμια Εκπαίδευση.

  • Επιμόρφωση των εκπαιδευτικών στην αξιοποίηση των ΤΠΕ στη διδακτική πράξη.

  • Υπηρεσίες υποστήριξης σχολείων και εκπαιδευτικών. Τεχνική Υποστήριξη. Υποστήριξη παιδαγωγικού έργου.

  • Εξ αποστάσεως εκπαίδευση – Τηλεκπαίδευση.

  • Θεωρητική στήριξη και μεθοδολογία για την ένταξη των ΤΠΕ στη διδακτική πράξη.

  • Αξιολόγηση Εκπαιδευτικού Λογισμικού.

  • Ανάπτυξη και Αξιοποίηση ΕΛ/ΛΑΚ.

  • Θέματα Εκπαιδευτικής Πολιτικής στις ΤΠΕ.

  • Διαδραστικοί πίνακες.

  • Εκπαιδευτική Ρομποτική.

  • Αξιοποίηση των μαθησιακών αντικειμένων από τα αποθετήρια υλικού.

  • Εκπαιδευτική Καινοτομία

  • Οι ΤΠΕ στη διδασκαλία και ενσωμάτωση προσφυγικών πληθυσμών

  • Η χρήση των ΤΠΕ και αυτοματισμών για μαθητές με ειδικές εκπαιδευτικές ανάγκες

  • Εικονική και επαυξημένη πραγματικότητα

  • Μάθηση με κινητές συσκευές (Mobile learning)

Διαδίκτυο

  • Εκπαιδευτική χρήση του Διαδικτύου.

  • Σχεδίαση/υλοποίηση δικτυακών τόπων με περιεχόμενο σχετικό με την εκπαίδευση.

  • Θέματα ασφάλειας για τo σχολικό δίκτυο/διαδίκτυο.

  • Σχεδίαση της δομής και του περιεχομένου «σχολικών ιστοσελίδων».

  • Παρουσιάσεις εργασιών με χρήση Διαδικτύου στα σχολεία.

  • Χρήση του Διαδικτύου στην επιμόρφωση και εκπαίδευση εξ αποστάσεως.

  • Διαδίκτυο και συνεργατική μάθηση. Συνεργασία σχολείων, μαθητών για την εκπόνηση εργασιών με τη χρήση του Διαδικτύου.

  • Υπηρεσίες Κοινωνικής Δικτύωσης (Web 2.0).

  • Παρουσίαση εφαρμογών Web 2.0 στα εργαστήρια, με δραστηριότητες και φύλλα εργασίας.

  • Ιστολόγια (Blogs), Wikis, Κοινότητες Μάθησης, CMS, LMS.

  • Θεωρητική στήριξη και μεθοδολογία για την ένταξη των ΤΠΕ στη διδακτική πράξη.

  • Δράσεις eTwinning

  • Ασφάλεια στο Διαδίκτυο

  • Ανοιχτές τεχνολογίες, ανοιχτά δεδομένα

3. Διοργάνωση:

Συνδιοργανωτές:

  • Οργανισμός Ανοικτών τεχνολογιών – ΕΕΛΛΑΚ

  • eTwinning

  • Περιφερειακή Διεύθυνση Π/θμιας και Δ/θμιας Εκπαίδευσης Νοτίου Αιγαίου

  • Διεύθυνση Π/θμιας Εκπαίδευσης Νομού Κυκλάδων

  • Διεύθυνση Π/θμιας Εκπαίδευσης Νομού Δωδεκανήσων

  • Διεύθυνση Δ/θμιας Εκπαίδευσης Νομού Δωδεκανήσων

  • 1ο ΠΕΚΕΣ Νοτίου Αιγαίου

  • 2ο ΠΕΚΕΣ Νοτίου Αιγαίου

Περισσότερες πληροφορίες στο http://e-diktyo.eu

του Danny O’Brien για το EFF

Απορρίπτοντας συντριπτικά την επιθυμία 5 εκατομμυρίων υπογραφόντων και περισσότερων από 100.000 διαδηλωτών  το Ευρωπαϊκό Κοινοβούλιο εγκατέλειψε την κοινή λογική, τις προτροπές ακαδημαϊκών, τεχνολόγων και ειδικών του ΟΗΕ στα ανθρώπινα δικαιώματα και ενέκρινε στο σύνολό της την Οδηγία για τα Πνευματικά Δικαιώματα στη Ενιαία Ψηφιακή Αγορά.

Πλέον δεν μπορούν να γίνουν και πολλά που μπορούν να αποτρέψουν τις διατάξεις αυτές από το να γίνουν νόμοι των χωρών της Ευρώπης. Θεωρητικά, θα μπορούσε το τελικό κείμενο να μην υπερψηφιστεί από τα κράτη-μέλη στη συνάντηση του Ευρωπαϊκού Συμβουλίου αργότερα αυτόν τον μήνα (στις 15/04 ψηφίζεται από το Συμβούλιο της Ευρώπης) , αλλά αυτό θα προϋπέθετε τουλάχιστον μια χώρα-κλειδί να αλλάξει τη στάση της. Με αυτήν την επιδίωξη, Γερμανοί και Πολωνοί ακτιβιστές ήδη εντείνουν τις πιέσεις προς τις κυβερνήσεις των χωρών τους ώστε να αλλάξουν την ψήφο τους.

Εάν αυτή η προσπάθεια αποτύχει, τα αποτελέσματα θα είναι μακροχρόνια και χαοτικά. Σε αντίθεση με τις νομοθεσίες της Ευρωπαϊκής Ένωσης όπως η GDPR, η οποία γίνεται νομοθετείται απευθείας από τα κεντρικά θεσμικά όργανα της ΕΕ, οι Ευρωπαϊκές Οδηγίες πρέπει να ενσωματωθούν: να γραφούν σύμφωνα τους εθνικούς νόμους του κάθε κράτους-μέλους. Τα κράτη έχουν περιθώριο μέχρι το 2021 να ενσωματώσουν την  Οδηγία για τα Πνευματικά Δικαιώματα, αλλά η ΕΕ σπάνια τηρεί αυτά τα χρονικά περιθώρια, επομένως μπορεί να διαρκέσει περισσότερο.

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

Οι χώρες των οποίων η κοινωνία ήταν πιο διχασμένη θα αργήσουν αναμφίβολα περισσότερο να εφαρμόσουν την Οδηγία. Στην Πολωνία, οι πολιτικοί πολιορκήθηκαν από θυμωμένους ψηφοφόρους, οι οποίοι τους πίεζαν να καταψηφίσουν την Οδηγία, ενώ ταυτόχρονα αντιμετώπισαν απροκάλυπτες επιθέσεις από ιδιοκτήτες εθνικών και τοπικών εφημερίδων προειδοποιώντας ότι δεν θα «ξεχάσουν» οποιονδήποτε πολιτικό καταψηφίσει το άρθρο 11. Η έγκριση της Οδηγίας θα διατηρήσει αυτή τη διαίρεση μεταξύ του πολωνικού λαού και του κατεστημένου των Μέσων Μαζικής Ενημέρωσης, ενώ οι πολιτικοί θα προσπαθούν να βρουν μια εσωτερική λύση που δεν θα βλάπτει τις επιδιώξεις τους από καμία από τις δύο πλευρές.

Η ρητορική στη Γερμανία τις τελευταίες ημέρες δεν ήταν και πολύ καλύτερη. Γερμανοί πολιτικοί ισχυρίστηκαν με θρασύτητα ότι οι εταιρείες τεχνολογίας πλήρωσαν τους διαδηλωτές του περασμένου Σαββατοκύριακου για να βγουν στους δρόμους. Εν τω μεταξύ, η Ένωση Χριστιανοδημοκρατών (CDU), το κόμμα της Άγκελα Μέρκελ, του οποίου μέλος είναι και ο ίδιος ο Άξελ Φος, ο εισηγητής της Οδηγίας, διατύπωσε μια πρόταση πολιτικής για μια ενδεχόμενη εφαρμογή του άρθρου 13 όχι με φίλτρα αλλά με ένα γενικό καθεστώς χορήγησης αδειών. Νομικοί εμπειρογνώμονες έχουν ήδη πει ότι αυτές οι άδειες δεν θα συμμορφώνονται με τις αυστηρές απαιτήσεις του άρθρου 13 – αλλά θα είναι δύσκολο για το CDU να κάνει τώρα πίσω από αυτή τη δέσμευσή του.

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

Αυτό σημαίνει ότι θα καταπέσει εξ ορισμού στο δικαστικό σύστημα της Ευρώπης και επομένως σημαίνει έναν μακρύ και αργό δρόμο προς την τελική απόφαση του ανώτατου δικαστηρίου της ΕΕ, του Ευρωπαϊκού Δικαστηρίου.


Θα μπορούσαμε να περιμένουμε από τα Μέσα Μαζικής Ενημέρωσης και τους κατόχους πνευματικών δικαιωμάτων να ασκήσουν πιέσεις για τη θέσπιση των πιο σκληρών πιθανών εθνικών νόμων και στη συνέχεια να πηγαίνουν με το παραμικρό στα δικαστήρια και να εισπράττουν πρόστιμα, οποτεδήποτε κάποιος περιπλανιέται διαδικτυακά στα όρια των ασαφών γραμμών της Οδηγίας. Η Οδηγία είναι γραμμένη έτσι ώστε οποιοσδήποτε κάτοχος υλικού που προστατεύεται από πνευματικά δικαιώματα να μπορεί να απαιτήσει αποζημίωση από μια υπηρεσία Διαδικτύου, και έχουμε δει ήδη ότι οι κάτοχοι των δικαιωμάτων δεν είναι εν πολλοίς ενωμένοι ως προς το τι πρέπει να κάνουν οι κολοσσοί του διαδικτύου, Amazon, Google κλπ, γνωστοί ως «Big Tech». Ό,τι και αν κάνουν οι εταιρείες και οι οργανισμοί του Διαδικτύου για να συμμορφωθούν με είκοσι επτά ή περισσότερους εθνικούς νόμους, από την ολοκληρωτική κατάργηση της παροχής συνδέσμων στους ευρωπαϊκούς ειδησεογραφικούς ιστότοπους, την αναβάθμιση των ήδη υπερευαίσθητων συστημάτων φιλτραρίσματος ή την προσπάθεια επίτευξης συμφωνιών με τα βασικά συγκροτήματα Μέσων Ενημέρωσης, θα αμφισβητηθεί από τη μία ή την άλλη φατρία κατόχων δικαιωμάτων.

Όμως υπάρχουν επίσης ευκαιρίες για τα δικαστήρια έτσι ώστε αυτά να χαλιναγωγήσουν την Οδηγία – ή ακόμα και να αφαιρέσουν εντελώς τα χειρότερά της άρθρα. Ένα βασικό παράδοξο στην καρδιά της Οδηγίας θα πρέπει να λυθεί πολύ σύντομα. Το Άρθρο 13 επρόκειτο να είναι συμβατό με την παλιότερη Οδηγία Ηλεκτρονικού Εμπορίου, η οποία κατηγορηματικά απαγορεύει οποιαδήποτε προϋπόθεση προληπτικής παρακολούθησης σε σχέση με την υπεράσπιση των Δικαιωμάτων Πνευματικής Ιδιοκτησίας  (μια διάταξη που επικυρώθηκε και ενδυναμώθηκε από το ECJ το 2011). Οποιοδήποτε φίλτρο επιβολής του νόμου θα μπορούσε να αμφισβητηθεί για να διευθετηθεί αυτή η ασυνέπεια.


Αλλά ποιος θα εκπροσωπήσει τους χρήστες του Ιντερνετ στο δικαστήριο; Οι «Big Tech» έχουν το κίνητρο και τα εκατομμύρια να το κάνουν, αλλά μετά από αυτή τη βαριά ήττα, αυτοί οι ολοένα και περισσότερο αμυνόμενοι γίγαντες είναι πολύ πιθανό να αποφασίσουν ότι είναι καλύτερα να κάνουν εξωδικαστικό συμβιβασμό, και να δεχθούν μια συμφωνία που τους αναγκάζει να πληρώνουν χαράτσι στα καθιερωμένα μηντια στην Ευρώπη – σε μια τιμή που πρακτικά θα αφήσει εκτός όποιους επίδοξους tech upstarts από την εν λόγω αγορά.

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

Οι ιντερνετικοί πολίτες (netizens) της Ευρώπης θα χρειαστεί να οργανωθούν και να υποστηρίξουν ανεξάρτητες ομάδες για τα Ευρωπαϊκά ψηφιακά δικαιώματα που θα είναι πρόθυμες να προσφύγουν στο δικαστήριο σχετικά με την Οδηγία.

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

Πηγή άρθρου: https://www.thepressproject.gr

The April meetup was sponsored by Blueground at the Impact Hub in Psyri, Athens. Apart from leasing the space, Blueground also kindly offered pizzas and beer for all the attendees.

Kostis Kapelonis on behalf of JHUG welcomed the participants with an urge. This season JHUG has many proposals from sponsors for meetups but the speakers are limited. He urged people to do talks on all topics regarding java and/or the jvm. JHUG is open to all speakers and topics and most importantly the members of JHUG throughout its lifetime — it is the oldest Greek meetup founded in 2001 — have proved that they respect every speaker regardless of the topic, the presentation skills or the content level.

After that Stratos Pavlakis VP of Engineering at Blueground presented the company, what they do and their engineering culture. It was of great interest when he described that the company started as an operations company but eventually had to evolve into a tech company to handle the increasing scale. Moreover Stratos as a co-organizer of the GreeceJS meetup added some useful thoughts on the topic addressed by Kostis before him.

The meetup then continued as always with two talks and a beer-pizza-networking break.

Testing Anti-patterns

The first talk was from Kostis Kapelonis about software testing anti-patterns. Kostis is a firm believer in that testing done right gives great value to a code base. He has given many presentations on this topic and has written a book about it.

Wikipedia defines an anti-pattern as a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. So, imagine a talk that will tell 100 attendees they do testing wrong, combine it with the lively and provocative presenting style of Kostis and you get the context of the talk.

The talk was a live commentary on a revised edition of a popular blog post by Kostis. After giving an overview of how testing should be done properly he defined and explained the following list of anti-patterns.

  1. Having unit tests without integration tests
  2. Having integration tests without unit tests
  3. Having the wrong kind of tests
  4. Testing the wrong functionality
  5. Testing internal implementation
  6. Paying excessive attention to test coverage
  7. Having flaky or slow tests
  8. Running tests manually
  9. Treating test code as a second class citizen
  10. Not converting production bugs to tests
  11. Treating TDD as a religion
  12. Writing tests without reading documentation first

For each one of them, he presented the topic in detail, refuted the arguments that consider it a best practice and explained why it is an anti-pattern. In almost all of the topics there were questions from people who either did not consider it an anti-pattern or were not convinced by Kostis arguments. He answered many questions and eventually the talk went well beyond the time limit so the organizers had to end it.

The talk was very interesting, easy and enjoyable to follow and thought provoking as expected, and promised, by Kostis. The video will go live soon on our vimeo channel and it is highly recommended. The original blog post is also worth reading. The topic of course is very large and cannot finish in one talk. As a closing note we repeat some of the general advices Kostis gave for proper testing.

  • Automate, automate, automate
  • A developer must be able to run the whole test suite easily, fast and out of the box for every new code base he is involved.
  • If tests do not give value to business they are useless even if they are correct and well written.
  • When in doubt what to test, monitor the state of production

Introduction to Quarkus

The second talk was about Quarkus a new, very promising framework from Red Hat. The project is very new, released about a month ago so this talk was a JHUG exclusivity. Moreover, the speaker Georgios Andrianakis is a contributor to the project so he has a very good understanding of the design tradeoffs used for quarkus.

He started the talk by setting the context for quarkus, why a new framework was needed and where it stands in the java ecosystem. The problems it addresses are with java in production and mostly with cloud deployments. In such environments characteristics of java like large memory footprints, slow startup times, class loading issues etc are drawbacks and hinter the adoption of java. These are relics of the era where java was used in inhouse clusters and the application servers took full control of the machines. He pointed out that production environments are dynamic in essence, configuration changes, code changes, dependencies changes, and thus a new more flexible way was needed to address these issues.

Then he described Quarkus which is composed of 2 things.

First, a java stack for development that includes well established frameworks like hibernate, Resteasy, eclipse microprofile, netty, kafka, vert.x (enter reactive) and many more are on the way. All these are used by java developers daily and thus if you adopt quarkus you are not forced to learn something new but you can continue to use the things you know and trust.

Second, a runtime environment based on GraalVM which powerups your application and gives you smaller memory footprint, very fast startup times, live reloading of code and configuration and if you choose, a native executable. Note that quarkus applications can still run on the JVM if you choose but in this case you lose many of quarkus benefits.

Of course as you understand quarkus is much more than assembling a jar from the above frameworks and running it on GraalVM. It does some hard work both during the build time and during the runtime to ensure that you get the benefits of the platform. During build time it does static code analysis to eliminate dead code, remove unused classes, reduce reflection calls, all of which reduce the memory footprint and fasten application startup. During runtime it does not do aggressive classloading or reflection or dynamic proxied or use agents like JMX as this incurs additional costs that are maybe insignificant for in house deployments but are very expensive for cloud deployments. In a nutshell you must write code the quarkus way. If you use the supported frameworks it is very easy and straightforward. If you don’t then you must either wait till they are supported or do some good code reviews to make your app quarkus ready.

After the presentation Giorgos gave a live demo that demonstrated build times, startup times, live reloading, native executables and finally support of jpa. It was a very good demo as he was very confident in quarkus and was eager to ask the audience “what do you want to run next?”

The Q&A session was about quarkus support, mostly how well it supports spring, a framework that heavily relies on reflection and dynamic proxies and how ready is quarkus for production. Giorgos suggested adoption of quarkus, it is very mature, not production ready yet but it is actively developed and it will be ready for production soon. As for spring support it is improving, some of its parts work fine, but the full framework is not quarkus ready yet.

That was an excellent talk and helped us get a clear view of quarkus beyond the buzzwords. Those that missed it should definitely see the video of the talk when we release it in our vimeo channel. Also Giorgos will give another talk for quarkus at the May Kubernetes meetup

Aftermath

Of course besides the talks there was a lot of networking between our members, old and new, and a lot of ideas exchanged. The positive energy that such meetups give to the attendants is enormous.

In this meet up we also made a draw for two IntelliJ licenses a gentle offer of Jetbrains and two tickets for Voxxed Days Athens a gentle offer of SoftConf. They are both firm supporters of JHUG and we thank them a lot.

Join JHUG

You can learn news about JHUG, participate and exchange ideas and feedback via our channels:

News about meetups and other events are published in all these channels but the interesting discussions are on slack. If you are not there, consider joining.

See you at the next meetup. Until then keep coding.

I use the terminal a lot and in my day to day work I tend to navigate to the same bunch of directories.

There are some awesome tools out there (like autojump or z) but sometimes, especially when the directories are similarly named, there is a need to be explicit to navigate to the proper one.

I decided to write a script to overcome this issue and to avoid having to edit my .bash* files to manage aliases each time I wanted to add or remove a directory.

goto

goto is a shell utility to quickly navigate to aliased directories with autocomplete (tab completion).

goto at GitHub

goto gif

User registers directory aliases, for example:

goto --register dev /home/iridakos/development

and then cds to that directory with:

goto dev

Find below documentation on the script but make sure you check the script’s documentation page for updates.

Sorry for the name, I know it brings back memories but it’s not what it seems :)

Installation

To install goto all you have to do is clone the repository locally:

git clone https://github.com/iridakos/goto.git

navigate to it

cd goto

and execute:

sudo ./install

You need to restart your shell after installation.

Usage

Change to an aliased directory

To change to an aliased directory, type:

goto <alias>

Example

goto dev

Register an alias

To register a directory alias, type:

goto -r <alias> <directory>

or

goto --register <alias> <directory>

Example

goto -r blog /mnt/external/projects/html/blog

or

goto --register blog /mnt/external/projects/html/blog

Notes

  • goto expands the directories hence you can easily alias your current directory with:
    goto -r last_release .
    

    and it will automatically be aliased to the whole path.

  • Pressing the tab key after the alias name, you have the default directory suggestions by the shell.

Unregister an alias

To unregister an alias, use:

goto -u <alias>

or

goto --unregister <alias>

Example

goto -u last_release

or

goto --unregister last_release

Notes

Pressing the tab key after the command (-u or --unregister), the completion script will prompt you with the list of registered aliases for your convenience.

List aliases

To get the list of your currently registered aliases, use:

goto -l

or

goto --list

Expand an alias

To expand an alias to its value, use:

goto -x <alias>

or

goto --expand <alias>

Example

goto -x last_release

or

goto --expand last_release

Cleanup

To cleanup the aliases from directories that are no longer accessible in your filesystem, use:

goto -c

or

goto --cleanup

Help

To view the tool’s help information, use:

goto -h

or

goto --help

Version

To view the tool’s version, use:

goto -v

or

goto --version

Extras

Push before changing directories

To first push the current directory onto the directory stack before changing directories, type:

goto -p <alias>

or

goto --push <alias>

Revert to a pushed directory

To return to a pushed directory, type:

goto -o

or

goto --pop
Notes

This command is equivalent to popd, but within the goto command.

Behind the scenes

Upon installation, a line is appended to your .bashrc file which sources the script, registering a goto function responsible for changing the directory based on the defined aliases of the database.

The script creates a directory alias database file under ~/.goto. Every register or unregister action modifies this file.

The script also uses the Bash programmable completion feature to define tab completions resolved via extraction of the aliases defined in the goto database file.

That’s all! Cat photo.

I'll be back

Code and comments
You can find the code of goto at https://github.com/iridakos/goto.
For feedback, comments, typos etc. please open an issue in the repository.
Thanks for visiting!

Την Τρίτη 30 Απριλίου 2019  στις 18:00, στο Αμφιθέατρο του Τμήματος Πληροφορικής και Τηλεματικής  στο Χαροκόπειο Πανεπιστήμιο (χάρτης) , θα διεξαχθεί ένα ακόμα FLOSS Meetup, με προσκεκλημένο ομιλητή τον καθηγητή Anthony (Tony) Wasserman από το Carnegie Mellon University (https://en.wikipedia.org/wiki/Tony_Wasserman) με τίτλο ομιλίας: «Fifty Years of Software Engineering: Looking Back and Ahead»

Περίληψη ομιλίας: «Η ικανότητα ανάπτυξης και εγκατάστασης μεγάλων και πολύπλοκων συστημάτων έχει σημειώσει τεράστια πρόοδο τα περασμένα πενήντα χρόνια, γεγονός που ενισχύεται σημαντικά από την πρόοδο στις  δυνατότητες στο hardware, των επιδόσεων και της αξιοπιστίας. Ως εκ τούτου, οι άνθρωποι χρησιμοποιούν καθημερινά εφαρμογές που θα φαινόταν αδιανόητες όταν ο όρος «μηχανική λογισμικού» σχεδιάστηκε, στο βαθμό που οι προηγμένες κοινωνίες εξαρτώνται όλο και περισσότερο από τη συνέχιση της αξιόπιστης λειτουργίας τους.

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

 

Διαβάστε περισσότερα στο https://www.meetup.com/Athens-FLOSS-Meetup/events/260500101/

Έχετε προβλήματα με τα Windows 10; Εάν δεν σχεδιάζετε να εγκαταστήσετε τα Windows 7, τα οποία πρόκειται να χάσουν την υποστήριξή από τη Microsoft στις 14 Ιανουαρίου 2020, ή δεν διαθέτετε τα χρήματα για να περάσετε σε μια συσκευή Apple, δεν υπάρχουν πολλές άλλες επιλογές σχετικά με το λειτουργικό σύστημα ενός υπολογιστή, εκτός από το Linux.

Linux

Παρόλο που μπορείτε να περιμένετε μια καμπύλη μάθησης κατά την αλλαγή πλατφόρμων, οι χρήστες των Windows που είναι περίεργοι για την κατάσταση του Linux για mainstream computing θα μπορούσαν να αποβούν εκπληκτικά ικανοποιημένοι αφού βρουν ένα κατάλληλο distribution για την συσκευή τους και ξοδέψουν λίγο χρόνο να εξοικειωθούν με το νέο περιβάλλον.

Ακολουθούν πέντε λόγοι για τους οποίους θα μπορούσατε εύκολα να αντικαταστήσετε τα Windows με το Linux ως το προεπιλεγμένο λειτουργικό σύστημα στο desktop σας ή στο laptop σας:

Ένας επιμελημένος κατάλογος λογισμικού, όπως οι κινητές πλατφόρμες

Το λογισμικό που είναι γνωστό ότι είναι συμβατό με μια συγκεκριμένη έκδοση του Linux διατηρείται σε έναν κεντρικό κατάλογο ή «αποθηκευτικό χώρο» παρόμοιο με τις κινητές πλατφόρμες όπως το iOS ή το Android.

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

Ομαλότερη διαδικασία ενημέρωσης για το λειτουργικό σύστημα και το λογισμικό

Ενώ οι ενημερώσεις των Windows είναι συχνά καθυστερημένες και συχνά απαιτούν επανεκκίνηση, οι ενημερώσεις στο Linux είναι γρήγορες και σπάνια απαιτούν επανεκκίνηση. Οι ενημερώσεις συνήθως μεταφορτώνονται μέσω μιας εφαρμογής «Software Updater», η οποία όχι μόνο ελέγχει τις ενημερώσεις κώδικα του λειτουργικού συστήματος, αλλά περιλαμβάνει επίσης ενημερώσεις για τα προγράμματα που έχετε εγκαταστήσει από το χώρο αποθήκευσης.

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

Εξαιρετικά προσαρμόσιμο, ειδικά το desktop interface

Πέρα από τις άκρως διαφορετικές διαμορφώσεις που έρχονται σε κάθε αντίγραφο του Linux, τα interface τους είναι ιδιαίτερα προσαρμόσιμα και μπορούν να μοιάζουν με περιβάλλον Windows ή Mac – ή κάποιο συνδυασμό των δύο. Για παράδειγμα, το Ubuntu MATE διαθέτει ένα βοηθητικό πρόγραμμα «MATE Tweak» που σας επιτρέπει να επιλέξετε ανάμεσα σε πολλά interface που είναι παρόμοια με τα Windows, OS X και άλλα.

Αυτά μπορούν να προσαρμοστούν περαιτέρω στις προτιμήσεις σας – περισσότερο από οποιοδήποτε άλλο λειτουργικό σύστημα.

Πιο ελαφρύ από τα Windows και λιγότερη εξαγωγή δεδομένων

Τα Windows αυξάνονται ολοένα και περισσότερο καθώς η Microsoft προσπαθεί να εξυπηρετήσει μια ποικιλία αγορών με την ίδια πλατφόρμα. Εκτός από τη συσσώρευση σε μια διάσπαρτη σειρά χαρακτηριστικών, η εταιρεία έχει εφαρμόσει σταδιακά συστήματα δημιουργίας συστημάτων και μεθόδων για την εξαγωγή των δεδομένων του χρήστη. Αυτό δεν μας ανησυχεί ιδιαίτερα στο Linux, το οποίο είναι διαθέσιμο σε μεγέθη που εκτείνονται από πολύ κάτω από 1GB μέχρι σε πιο χαρακτηριστικά packed builds των 4GB και πέρα. Αξιοσημείωτο, είναι ότι το Ubuntu MATE προσφέρει μεγαλύτερη διάρκεια ζωής από τα Windows 10.

Το Linux είναι γενικά πιο ασφαλές και δωρεάν για πάντα

Εκτός αν αγοράσετε ένα κλειδί των Windows 10 από το eBay ή τα αποκτήσατε κατά τη διάρκεια της δωρεάν αναβάθμισης, το λειτουργικό σύστημα της Microsoft κοστίζει πάνω από $ 100. Μερικά αντίγραφα Linux κοστίζουν αρκετά για λογισμικό premium και υποστήριξη, ενώ τα περισσότερα από αυτά είναι δωρεάν.

Επιπλέον, επειδή λιγότεροι άνθρωποι χρησιμοποιούν Linux, η πλατφόρμα γίνεται λιγότερο στόχος κακόβουλων λογισμικών και τείνει να είναι πιο ασφαλής από τα Windows. Όπως γνωρίζετε ήδη, τα Windows 7 θα χάσουν την υποστήριξή τους τον Ιανουάριο του 2020.

Κάποιες τελευταίες σκέψεις σχετικά με τη μετάβαση από τα Windows σε Linux

Ενώ η αναβάθμιση ενός νέου λειτουργικού συστήματος μπορεί να είναι τρομακτική, η εναλλαγή από τα Windows σε Linux είναι κάτι περισσότερο από εφικτό αν γίνει με κάποια αφοσίωση. Στις περισσότερες περιπτώσεις, τα μεγάλα προγράμματα των Windows έχουν ήδη αναπτυχθεί για το Linux. Αν όχι, τα ισοδύναμα με τις εφαρμογές των Windows είναι γενικά διαθέσιμα, όπως το LibreOffice που είναι ένα stand-in για το Microsoft Office.

Οι χρήστες που εξαρτώνται από πολλά λογισμικά αποκλειστικά των Windows ή που βρίσκονται στη μέση ενός έργου μπορεί να μην θέλουν να κάνουν το switch. Ωστόσο, πέρα από τη διαθεσιμότητα λογισμικού και τις ανησυχίες σχετικά με τη συμβατότητα, ο κύριος λόγος για να σκεφτείτε την επιστροφή στο λειτουργικό σύστημα της Microsoft είναι απλώς ότι είστε ήδη συνηθισμένοι σε αυτήν την πλατφόρμα και δεν θέλετε να υπομείνετε τη διαδικασία εκμάθησης ενός νέου περιβάλλοντος.

 

Πηγή άρθρου: https://www.secnews.gr/

 

I use the terminal a lot and in my day to day work I tend to navigate to the same bunch of directories. There are some awesome tools out there (like autojump) but sometimes, especially when the directories are similarly named, there is a need to be more explicit to navigate to the proper one.

I decided to write a script to overcome this issue and to avoid having to edit my .bash* files to manage aliases each time I wanted to add or remove a directory.

Introducing goto

goto is a shell utility to quickly navigate to aliased directories with autocomplete (tab completion).

goto at GitHub

goto gif

User registers directory aliases, for example:

goto --register dev /home/iridakos/development

and then cds to that directory with:

goto dev

Find below documentation on the script but make sure you check the script’s documentation page for updates.

Sorry for the name, I know it brings back memories but it’s not what it seems :)

Installation

To install goto all you have to do is clone the repository locally:

git clone https://github.com/iridakos/goto.git

navigate to it

cd goto

and execute:

sudo ./install

You need to restart your shell after installation.

Usage

Change to an aliased directory

To change to an aliased directory, type:

goto <alias>

Example

goto dev

Register an alias

To register a directory alias, type:

goto -r <alias> <directory>

or

goto --register <alias> <directory>

Example

goto -r blog /mnt/external/projects/html/blog

or

goto --register blog /mnt/external/projects/html/blog

Notes

  • goto expands the directories hence you can easily alias your current directory with:
    goto -r last_release .
    

    and it will automatically be aliased to the whole path.

  • Pressing the tab key after the alias name, you have the default directory suggestions by the shell.

Unregister an alias

To unregister an alias, use:

goto -u <alias>

or

goto --unregister <alias>

Example

goto -u last_release

or

goto --unregister last_release

Notes

Pressing the tab key after the command (-u or --unregister), the completion script will prompt you with the list of registered aliases for your convenience.

List aliases

To get the list of your currently registered aliases, use:

goto -l

or

goto --list

Expand an alias

To expand an alias to its value, use:

goto -x <alias>

or

goto --expand <alias>

Example

goto -x last_release

or

goto --expand last_release

Cleanup

To cleanup the aliases from directories that are no longer accessible in your filesystem, use:

goto -c

or

goto --cleanup

Help

To view the tool’s help information, use:

goto -h

or

goto --help

Version

To view the tool’s version, use:

goto -v

or

goto --version

Extras

Push before changing directories

To first push the current directory onto the directory stack before changing directories, type:

goto -p <alias>

or

goto --push <alias>

Revert to a pushed directory

To return to a pushed directory, type:

goto -o

or

goto --pop
Notes

This command is equivalent to popd, but within the goto command.

Behind the scenes

Upon installation, a line is appended to your .bashrc file which sources the script, registering a goto function responsible for changing the directory based on the defined aliases of the database.

The script creates a directory alias database file under ~/.goto. Every register or unregister action modifies this file.

The script also uses the Bash programmable completion feature to define tab completions resolved via extraction of the aliases defined in the goto database file.

That’s all! Cat photo.

I'll be back

Code and comments
You can find the code of goto at https://github.com/iridakos/goto.
For feedback, comments, typos etc. please open an issue in the repository.
Thanks for visiting!
Καιρός να διαφημίσουμε λίγο παραπάνω το ανοικτό λογισμικό και, ειδικά στην εκπαίδευση, να χρησιμοποιούμε περισσότερο εργαλεία και λύσεις ανοικτού κώδικα, δεν νομίζετε; Αν συμφωνείτε, τότε θα σας…   Διαβάστε τη συνέχεια του άρθρου Δημιούργησε κι εσύ μια ομάδα ανοιχτού λογισμικού στο Πανεπιστήμιό σου! όπως δημοσιεύθηκε στο Linux Insider

Ο πανευρωπαϊκός διαγωνισμός (2018-2019) ξεκίνησε με τη συμμετοχή 471 από 24 Ευρωπαϊκές χώρες (για την 1η φάση), στην δεύτερη φάση συμμετείχαν 381 ομάδες και στην τρίτη φάση 135 ομάδες (συνολικά 7 ομάδες από την Ελλάδα).

Οι δυο ομάδες του σχολείου μας (GKPi και JPiV) συμμετέχουν με δυο διαφορετικά πειράματα που θα υλοποιηθούν στον Διεθνή Διαστημικό Σταθμό (ISS – International Space Station) και τα αποτελέσματα των μετρήσεων θα μας δοθούν γύρω στα μέσα Μαΐου για επεξεργασία. Αρωγός στην όλη προσπάθειά μας είναι το 4ο ΓΕΛ Χαλκίδας που συνεργαζόμαστε όσον αφορά το επιστημονικό τμήμα των πειραμάτων.

Σημειώνεται ότι στον ISS υπάρχουν δυο Raspberry Pi και ο κώδικας που εκτελείται είναι σε Python 3.

Περισσότερα:

http://www.esa.int/Education/AstroPI

https://projects.raspberrypi.org/en/projects?hardware%5B%5D=sense-hat

 

Κάθε μέρα δημιουργούνται όλο και περισσότερα δεδομένα πολιτών στον ψηφιακό δημόσιο τομέα. Αυτά τα δεδομένα έχουν μια τεράστια κοινωνική, επιστημονική και οικονομική αξία για το σύνολο της  κοινωνίας. 
Δυστυχώς, τα τρέχοντα επιχειρηματικά μοντέλα δεν επιτρέπουν την πλήρη πρόσβαση και  χρήση αυτών των δεδομένων, εμποδίζοντας τοπικές εταιρείες, ακαδημαϊκούς, κυβερνήσεις και πολίτες να συμμετέχουν και να επωφελούνται από την καινοτομία.
Οι αρχές που περιγράφονται παρακάτω αναγνωρίζουν τα δεδομένα που παράγονται από τους πολίτες ως πολύτιμο κοινό περιουσιακό στοιχείο, ενώ συγχρόνως  διατηρούν και ενισχύουν τα δικαιώματα των πολιτών. Οι αρχές προβλέπουν προστασία και υπεράσπιση της ιδιωτικής ζωής, διαφάνεια, ανάληψη ευθυνών, αλλά επίσης δεοντολογική και κοινωνική ευθύνη. Προτείνουν τρόπους για την καλύτερη συλλογή, διαχείριση, πρόσβαση και χρήση των δεδομένων των πολιτών, εξαλείφοντας ή ελαχιστοποιώντας κάθε μορφή ανισότητας.
Στόχος αυτών των αρχών είναι να προσφέρουν καθοδήγηση στις ευρωπαϊκές τοπικές αρχές, σχετικά με τον τρόπο χρήσης των γνώσεων που παράγονται από δεδομένα, ώστε να βελτιωθεί η αστική ζωή και να διατηρηθούν οι ευρωπαϊκές αξίες μέσω επιστημονικής, πολιτικής, οικονομικής, κοινωνικής και δημοκρατικής προόδου. Αυτό προβλέπει να τεθούν σε ισχύ μηχανισμοί και πρακτικές, ώστε να έχουν οι πολίτες τον έλεγχο των δεδομένων τους. Αυτές οι αρχές είναι επίσης χρήσιμες ως καλή πρακτική για εταιρείες και πιθανώς έμπνευση για μελλοντικές ευρωπαϊκές πολιτικές και νομοθεσία στον τομέα αυτό. 
 
Οι αρχές ξεκίνησαν από τις πόλεις της Βαρκελώνης, του Εδιμβούργου, του Αϊντχόβεν, της Γάνδης και της Σαραγόσα και αναπτύχθηκαν από το forum  της EUROCITIES Knowledge Society.
Ορισμός
 
Τα δεδομένα του πολίτη χωρίζονται σε προσωπικά και μη προσωπικά, που δημιουργούνται άμεσα ή έμμεσα στην ψηφιακή σφαίρα του δημόσιου τομέα, χρησιμοποιώντας ψηφιακές τεχνολογίες και συλλέγονται μέσω διαφόρων υποδομών (Internet of Things, τηλεπικοινωνιακά δίκτυα, συστήματα πληρωμών, κάμερες, κοινωνικά δίκτυα κλπ). Αυτά τα δεδομένα εντοπίζονται, συλλέγονται, μετριούνται, αποθηκεύονται, χρησιμοποιούνται και διαχειρίζονται τόσο από δημόσιους όσο και από ιδιωτικούς φορείς (σύμφωνα με τον Γενικό  Κανονισμό Προστασίας Δεδομένων).
Οι Αρχές σχετικά με τα δεδομένα των πολιτών
1. Τα Δεδομένα των πολιτών ως δημόσιο περιουσιακό στοιχείο, από και για τον πολίτη: τα δεδομένα των πολιτών πρέπει να αναγνωρίζονται ως δημόσιο και ατομικό περιουσιακό στοιχείο και να χρησιμοποιούνται αποκλειστικά προς το δημόσιο συμφέρον.
2. Δημόσια αξία: οι τοπικές αρχές αναγνωρίζουν, υποστηρίζουν και ακολουθούν πιστά  την αρχή ότι η χρήση των δεδομένων των πολιτών δημιουργεί απτά οφέλη για τους πολίτες και την κοινωνία στο σύνολό της. Η χρήση της γνώσης που προέρχεται από τα δεδομένα έχει τη δυναμική να βελτιώνει τις πόλεις μας μέσω επιστημονικών, πολιτικών, οικονομικών, κοινωνικών, οικονομικών και δημοκρατικών διαδικασιών.
3. Οι πολίτες ως θεματοφύλακες δεδομένων: οι κυβερνήσεις έχουν την ευθύνη και πρέπει να εξασφαλίζουν ότι οι πολίτες μπορούν να έχουν πρόσβαση και να διαχειρίζονται τα δεδομένα τους (MyData), καθώς και να επηρεάζουν τον τρόπο με τον οποίο συλλέγονται και χρησιμοποιούνται.
4. Προστασία και υπεράσπιση της ιδιωτικής ζωής: εάν τα δεδομένα των πολιτών περιέχουν προσωπικά δεδομένα, θα εφαρμοστεί ο  Γενικός Κανονισμός Προστασίας Δεδομένων (GDPR).  Η αποθήκευση, διαχείριση, επεξεργασία και χρήση των δεδομένων, όταν ενέχουν κίνδυνο για την  ιδιωτικότητα ή την ασφάλεια πρέπει να γίνονται σύμφωνα με τη σχετική Ευρωπαϊκή και  Εθνική νομοθεσία.
5. Διαφάνεια και λογοδοσία: όταν δημιουργούνται δεδομένα σε δημόσιο χώρο, θα πρέπει να λαμβάνονται διαφανή, κατανοητά και υπεύθυνα μέτρα για το ποιοι, πότε, πού και για ποιο σκοπό αναζητούν, συλλέγουν και διαχειρίζονται τα δεδομένα.  Αυτό περιλαμβάνει τόσο χειροκίνητες,  όσο και αυτοματοποιημένες μεθόδους, όπως  Τεχνητή Νοημοσύνη και εργαλεία  λήψης αποφάσεων.
6. Κοινή χρήση δεδομένων των πολιτών και διακυβέρνηση: τα ανώνυμα δεδομένα θα  πρέπει να μοιράζονται μεταξύ των ενδιαφερόμενων φορέων με κοινό στόχο τη μεγιστοποίηση της δημόσιας αξίας,  σύμφωνα με την Εθνική και Ευρωπαϊκή νομοθεσία. Εντούτοις, πρέπει να προσδιοριστούν και να ενεργοποιηθούν οι διασφαλίσεις (π.χ. synthetic data) ώστε να αποφευχθεί, όπου είναι δυνατόν, ο κίνδυνος να ταυτοποιηθούν άτομα ή προφίλ μέσω της χρήσης νέων τεχνολογιών ανάλυσης δεδομένων (π.χ. mining, χρήση Τεχνητής Νοημοσύνης, συνδυασμός συνόλων δεδομένων ή σύνδεση δεδομένων).
7. Ποιότητα: πρέπει να προστατευθεί  η ποιότητα των δεδομένων. Όσοι χρησιμοποιούν και μοιράζονται δεδομένα έχουν την ευθύνη να διασφαλίζουν την ακεραιότητα, την αυθεντικότητα, τη συνέπεια και την ακρίβεια των δεδομένων.
8. Διαλειτουργικότητα: πρέπει να αναγνωρίζεται και να εγγυάται η σημασία της διαλειτουργικότητας των δεδομένων μέσω τυποποίησης, ανοιχτές επαφές και πρωτόκολλα για τη διευκόλυνση της κοινής χρήσης και επαναχρησιμοποίησης των δεδομένων.
9. Ηθική και κοινωνική ευθύνη: η συγκέντρωση και ο συνδυασμός δεδομένων μπορεί να οδηγήσει σε απρόβλεπτες καταστάσεις για την κοινωνία ή τα άτομα. Σημεία δημόσιων χώρων που συλλέγουν δεδομένα θα πρέπει να είναι σε συνεχή δέσμευση με τους πολίτες, να διερευνούν, να συζητούν και να συμφωνούν για τυχόν ηθικές συνέπειες της συλλογής δεδομένων και, εάν είναι αναγκαίο, να προσαρμόζουν ανάλογα τις πρακτικές τους, ώστε να προλαβαίνουν τις διακρίσεις που αφορούν, για παράδειγμα,  το φύλο, την ηλικία, την κοινωνικο-οικονομική κατάσταση, την ιδεολογία, τη φυλή ή τις θρησκευτικές πεποιθήσεις.
10. Οι τοπικές αρχές ως συνδετικός κρίκος: Οι αρχές των πόλεων είναι ιδιαίτερα κατάλληλες για να συνδέουν τα καινοτόμα οικοσυστήματα με τα δημόσια και ιδιωτικά silo δεδομένων. Πρέπει να τους δοθούν τα μέσα για να αναπτύξουν  και να επεκτείνουν τα αποθέματα δεδομένων της πόλης (ή βάσεις γνώσεων) για να διευκολυνθεί η σύνδεση.
Πηγή άρθρου: https://www.citybranding.gr/

To Blog της Ελληνικής κοινότητας του Bitcoin

Τις τελευταίες μέρες νέο σοβαρό ddos attack πραγματοποιείτε στα node του Electrum Wallet με αποτέλεσμα η πλειοψηφία τους να έχει βγει εκτός λειτουργίας με τα wallet να συνδέονται πλέον σε κακόβουλα node.

Όσοι έχουν electrum wallet και πάνε να πραμγατοποιήσουν κάποια συναλλαγή θα δούνε να εμφανίζεται ένα μήνυμα που προέρχεται από τα κακόβουλα node ώστε να αναβαθμίσουν σε νεώτερη έκδοση με φυσικά το link που εμφανίζεται να παραπέμπει σε malware έκδοση του wallet.

Γιαυτό τον λόγο δεν πρέπει για κανένα λόγο να επισκεφτούμε αυτό το site και να εγκαταστήσουμε την έκδοση που υπάρχει εκεί. Όποιος το έχει ήδη κάνει θα πρέπει να θεωρήσει ότι τα Bitcoin του έχουν περάσει πλέον στον έλεγχο των hacker.

Η λύση είναι αναβάθμιση στην τελευταία έκδοση του electrum από το official electrum org site. Θα πρέπει ακόμα να απανεργοποιήσουμε στο wallet μας την αυτόματη σύνδεση στα node πηγαίνοντας στο tools>network>setting και από εκεί στη καρτέλα server και εκεί αφαιρούμε το Select server automatically. Στο αμέσως επόμενο πεδίο βάζουμε χειροκίνητα έναν από τους ακόλουθους server που θεωρούνται αξιόπιστοι

  • ecdsa.net:110

  • electrum.hodlister.co:50002

  • vps.hsmiths.com:50002

  • btc.jochen-hoenicke.de:50002

Πληροφορίες και ανακοινώσεις από την ομάδα των developer του Electrum μπορείτε να βρείτε στον επίσημο λογαριασμό τους στο twitter

 

The post Σοβαρό ddos malware attack στα node του Electrum Wallet appeared first on To Blog της Ελληνικής κοινότητας του Bitcoin.

Τον περασμένο Δεκέμβριο, ανακοινώθηκε η πρόθεσή της Microsoft να υιοθετήσει το έργο ανοιχτού κώδικα Chromium στην ανάπτυξη του Microsoft Edge browser για το λειτουργικό της σύστημα. Πριν λίγες ώρες η νέα έκδοση διατέθηκε για δοκιμή. Το γνωστό σε όλους μας ανοιχτού κώδικα έργο Chromium, το οποίο είναι η βάση αρκετών browser όπως φυσικά και του... Continue Reading →

Ο Οργανισμός Ανοιχτών Τεχνολογιών (ΕΕΛΛΑΚ), στο πλαίσιο των εκπαιδευτικών προγραμμάτων που αφορούν τις ανοιχτές τεχνολογίες αναζητά εκπαιδευτές που θα αναλάβουν να διδάξουν και να συντάξουν εκπαιδευτικό υλικό για τις παρακάτω θεματικές ενότητες. Το εκπαιδευτικό υλικό θα πρέπει να διαμορφωθεί στην πλατφόρμα moodle (elearn.ellak.gr) και θα διατίθεται με άδεια CC-BY-SA. Οι εκπαιδεύσεις θα γίνουν στην Αθήνα.

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

Το κάλεσμα απευθύνεται σε όλους όσους ενδιαφέρονται και έχουν την εμπειρία να αναπτύξουν εκπαιδευτικό υλικό στο moodle και να διδάξουν μαθήματα ανοιχτών τεχνολογιών σε μία ή παραπάνω από τις παρακάτω θεματικές ενότητες:

  1. Χρήση Linux Desktop – 24 ώρες
  2. Linux Administrator+Monitoring  – 18 ώρες
  3. Security (Χρήση εργαλείων για Penetration Testing) – 18 ώρες
  4. Βάσεις (POSTGRESQL+MariaDB) – 18 ώρες
  5. Ψηφιακές Υπογραφές και Ψηφιακά Πιστοποιητικά – 24 ώρες
  6. OpenStreetMap – 24 ώρες
  7. Git code management + Bug hunting+Open Source contribution – 24 ώρες
  8. LDAP+OAUTH2+SAML2 – 24 ώρες

Οι εκπαιδεύσεις θα ολοκληρωθούν σε 3-4 ημέρες ανάλογα με τις ώρες της κάθε θεματικής ενότητας.

Οι ενδιαφερόμενοι καλούνται να υποβάλουν πρόταση που θα περιλαμβάνει:

  1. αναλυτική περιγραφή του περιεχομένου για τα μαθήματα που προτείνουν να αναπτύξουν (αναφέροντας τι θα περιλαμβάνει το υλικό (πχ. κείμενο, εικόνες, βίντεο, ασκήσεις, αξιολόγηση, πηγές, βοηθήματα, κλπ) λαμβάνοντας υπόψη ότι κάθε ημερήσιο μάθημα θα διαρκεί 6 διδακτικές ώρες),
  2. χρονοδιάγραμμα για την ανάπτυξη του εκπαιδευτικού υλικού,
  3. συνολικό κόστος (παραγωγής εκπαιδευτικού υλικού και εκπαιδεύσεων),
  4. αναλυτικό βιογραφικό, (να περιληφθεί στο βιογραφικό και η συμμετοχή σε εθελοντικές δράσεις προώθησης των ανοιχτών τεχνολογιών)

 

Οι προτάσεις θα σταλθούν στο hr@eellak.gr έως τις 14 Απριλίου με θέμα “Εκπαιδεύσεις Αθήνα”, οι συνεργάτες της ΕΕΛΛΑΚ θα καλούνται να συμμετέχουν και σε εθελοντικές δράσεις προώθησης των ανοιχτών τεχνολογιών.

 

Αυτήν την εβδομάδα πραγματοποιούνται εκδηλώσεις στην Ελλάδα και στο εξωτερικό για τις ανοιχτές τεχνολογίες και την καινοτομία! Ο Οργανισμός Ανοιχτών Τεχνολογιών – ΕΕΛΛΑΚ σας προτείνει να τις παρακολουθήσετε και να τις διαδώσετε. Μπορείτε επίσης να δείτε περισσότερες εκδηλώσεις για τις επόμενες εβδομάδες ή να καταχωρίσετε τη δική σας εκδήλωση στο: https://ellak.gr/events

Ημερομηνία/Ώρα Εκδήλωση
07/04/2019 – 10/04/2019
Ολοήμερο
Foss-north 2019
Chalmers Conference Centre, Gothenburg
08/04/2019 – 12/04/2019
Ολοήμερο
DrupalCon Seattle
Washington State Convention Center, Seattle
09/04/2019
18:00 – 22:00
Hackday at hackerspace
Hackerspace.gr, Αθήνα
10/04/2019
18:00 – 21:00
Radix Hacklab Open Assembly
Squat, Αθήνα
12/04/2019
09:00 – 16:00
Software Libre Festival
Universidad de Altamira, Tamaulipas, Mexico
13/04/2019
Ολοήμερο
Open Camp Bratislava
Faculty of Informatics and Information Technologies STU Ilkovičova 2, Bratislava, Bratislava
13/04/2019 – 14/04/2019
Ολοήμερο
Πανελλήνιος διαγωνισμός εκπαιδευτικής ρομποτικής AegeanRobotics Competition 2019
Κλειστό Γυμναστήριο – Καρλόβασι της Σάμου, Σάμος

 

Η πρωτοβουλία EU-FOSSA 2 διοργανώνει τρία hackathons το 2019. Με πάνω από 50 επιβεβαιωμένους συμμετέχοντες, το πρώτο hackathon  επικεντρώθηκε στο PHP Symfony και πραγματοποιήθηκε στις Βρυξέλλες στις 6 και 7 Απριλίου. Κατά τη διάρκεια του hackathon, μερικοί από τους πιο δραστήριους προγραμματιστές από την κοινότητα PHP Symfony  συναντήθηκαν με σκοπό να αντιμετωπίσουν για σημαντικά θέματα για την κοινότητα του έργου και τα θεσμικά όργανα της ΕΕ, όπως τα νέα χαρακτηριστικά και η ασφάλεια.

Το σχέδιο EU-FOSSA 2 διοργανώνει παράλληλα ένα bug bounty για το λογισμικό PHP Symfony. Οι προγραμματιστές μπορούν να λάβουν βραβεία έως και 15.000 ευρώ για κρίσιμα σφάλματα που εντοπίζουν. Υπάρχει ακόμα ένα μπόνους 20% προστιθέμενο στο βραβείο αν οι hackers παρέχουν μια λύση για το σφάλμα που αναφέρουν. Μπορείτε να βρείτε περισσότερες πληροφορίες για όλα τα προγράμματα Bug Bugy εδώ.

Δύο ακόμη Hackathons θα πραγματοποιηθούν στις 4-5 Μαΐου και στις 5-6 Οκτωβρίου 2019. Το σχέδιο EU-FOSSA 2 επέλεξε την κοινότητα του Apache Tomcat ως το θέμα του Hackathon τον Μάιο.

Το hackathon του Οκτωβρίου βρίσκεται ακόμα σε αναζήτηση της κοινότητας του λογισμικού. Η Ευρωπαϊκή Επιτροπή θα χαρεί να δεί τις προτάσεις σας στη διεύθυνση DIGIT-OSS-STRATEGY@ec.europa.eu. Τα κριτήρια επιλογής θα είναι τα ίδια με εκείνα που χρησιμοποιούνται για τα προγράμματα Bug Bounty. Θα λάβει υπόψη την κρισιμότητα του λογισμικού για τα ευρωπαϊκά θεσμικά όργανα, τον αντίκτυπο που θα είχε η πρωτοβουλία στην κοινότητα και το συνολικό όφελος που δημιουργήθηκε για τους χρήστες του λογισμικού.

Για περισσότερες πληροφορίες σχετικά με τα Hackathons εδώ.

Πηγή άρθρου: https://joinup.ec.europa.eu/news/co-creating-future-os

Κατάστημα ebay

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

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

Τα σημεία που θα αναλύσω είναι:

  • Πότε είναι η κατάλληλη στιγμή για να ανοίξετε ένα κατάστημα eBay
  • Ποιο είδος συνδρομής καταστήματος θέλετε να επιλέξετε
  • Οδηγός βήμα προς βήμα για τη ρύθμιση του καταστήματος eBay
  • Τα 3 χαρακτηριστικά για την 'κατασκευή' του καταστήματός σας
  • Ποια εργαλεία τρίτων συνιστώνται;

Πάμε λοιπόν...

Πότε είναι η κατάλληλη στιγμή για να ανοίξετε ένα κατάστημα eBay


Για τους περισσότερους επιχειρηματίες, ένα κατάστημα στο διαδίκτυο είναι ένα φυσικό βήμα στην ανάπτυξη της επιχείρησής τους. Το ebay είναι ίσως το κατάλληλο μέρος να ξεκινήσετε να πουλάτε ερασιτεχνικά κάποια προϊόντα, μέχρι να μάθετε την λειτουργία του και στην συνέχεια να μετατραπεί ως το κύριο κανάλι πωλήσεων, επειδή έχει ήδη την κοινότητα "αγοραστών", οι οποίοι βλέπουν την "βιτρίνα" σας. Όταν δημιουργήσετε την επιχείρησή σας στο ebay, μετά μπορείτε να κάνετε επέκταση και σε άλλα παρόμοια καταστήματα (etsy, amazon κλπ) καθώς και στον δικό σας ιστότοπο. Και όταν λέω επέκταση, εννοώ να προσλάβετε κάποιο άτομο, διότι θα είναι δύσκολο να τα καταφέρετε μόνος σας.

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

Επιστρέφοντας στο θέμα της ενότητας, ποια είναι κατάλληλη στιγμή για να ανοίξετε ένα eBay κατάστημα; Θα αναφέρω μερικά σημεία που πρέπει να εξετάσετε πριν τη δημιουργία καταστήματος στο eBay:

  • Η δημιουργία του εμπορικού σας σήματος - η ύπαρξη ενός ισχυρού εμπορικού σήματος αποτελεί βασικό παράγοντα κατά την πώληση προϊόντων. Ακόμη και οι μεγάλες μάρκες όπως η Coca-Cola ξοδεύουν δεκάδες εκατομμύρια δολάρια το χρόνο στη διατήρηση της μάρκας. Αυτό ακριβώς κάνει το eBay και γι' αυτό προσελκύει εκατομμύρια αγοραστές σε όλο τον κόσμο. Το ερώτημα που πρέπει να αναρωτηθείτε είναι: Έχω την τεχνογνωσία να οικοδομήσω μια αρκετά ισχυρή μάρκα για να το κάνω αυτόνομα;
  • Κόστος απόδοσης - το eBay χρεώνει τους πωλητές μετά από ένα ορισμένο επίπεδο ώστε να πληρώνουν μια συνδρομή ως κατάστημα. Εξαρτάται κυρίως από τα μηνιαία έσοδά σας και τον αριθμό των καταχωρίσεων που δημοσιεύετε.
  • Προώθηση - σε ποιο σημείο θα έχουν τα προϊόντα μου μεγαλύτερη έκθεση; Το eBay έχει εκατομμύρια αγοραστές αλλά και εκατομμύρια πωλητές. Για τη δημοφιλία του καταστήματός σας μπορείτε να εκτελείτε διαφημιστικές καμπάνιες σχετικά χαμηλού κόστους στο eBay και σε κοινωνικά μέσα. Όταν έχετε ένα ανεξάρτητο ηλεκτρονικό κατάστημα, θα πρέπει να αρχίσετε να προωθείτε τον εαυτό σας από το μηδέν και είναι πιθανό να ξεκινήσετε με πολύ λίγη κίνηση - θα χρειαστεί χρόνος και χρήματα για την οικοδόμηση της πελατείας σας.
  • Η τελική ερώτηση που πρέπει να ρωτήσετε τον εαυτό σας είναι: σε ποια πλατφόρμα θα είμαι πιο επιτυχημένος και κερδοφόρος;

Για όσους πιστεύετε ότι το eBay είναι η απάντηση σε όλα τα παραπάνω, διαβάστε τη διαδικασία εκκίνησης του δικού σας ηλεκτρονικού καταστήματος eBay:

Οδηγός βήμα προς βήμα για τη ρύθμιση του καταστήματος eBay


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

Εδώ είναι ένας οδηγός τεσσάρων βημάτων για την εκκίνηση ενός καταστήματος για τους αρχάριους:

Βήμα 1: Άνοιγμα λογαριασμού επιχείρησης eBay


Για να πουλήσετε αντικείμενα στο eBay, πρέπει να δημιουργήσετε λογαριασμό. Στην επάνω αριστερή γωνία κάντε κλικ στο κουμπί εγγραφής (register):

Register

Λάβετε υπόψη ότι θα πρέπει να αποδεχτείτε τη συμφωνία χρήστη του eBay και ότι:

  • Είναι εντελώς δωρεάν να εγγραφείτε στο eBay, αλλά όταν κάνετε πώληση ενός στοιχείου θα πληρώσετε τις αμοιβές πωλητή eBay.
  • Βεβαιωθείτε ότι είστε ενημερωμένοι για τις τελευταίες πολιτικές των πωλητών του eBay, ώστε να μην παραβιάσετε τους κανόνες. Την πιο πρόσφατη ενημερωμένη έκδοση θα την βρείτε εδώ
  • Εάν μακροπρόθεσμα σχεδιάζετε να κάνετε μια επιχείρηση, τότε επιλέξτε την επιλογή επιχειρηματικού λογαριασμού και όχι τον προσωπικό λογαριασμό. Λάβετε υπόψη σας ότι πρέπει να έχετε νόμιμα καταχωρημένη επιχείρηση γι 'αυτό (ρωτήστε καλύτερα τον λογιστή σας).

Register Business account

Μόλις κάνετε εγγραφή, θα πρέπει να αποφασίσετε τι να πουλήσετε στο eBay. Καλό είναι να εστιάσετε στην πώληση ενός τύπου αντικειμένου, όπως αντρικά παπούτσια ή έναν τύπο κατηγορίας, όπως ανδρικά ρούχα. Αυτό θα σας κάνει να φαίνεστε σαν ένας "ειδικός" στον τομέα σας σε πιθανούς αγοραστές. Και φυσικά μπορείτε πάντα να δείτε τη σελίδα 'Trending on eBay!' για να δείτε τι κινείται τώρα:

Trending on ebay

Ξεκινήστε με μερικά "προσωπικά" στοιχεία προς πώληση στο eBay. Θυμηθείτε ότι το eBay θα σας χρεώσει μόλις πωλήσετε το στοιχείο και προσπαθήσετε να:

  • Γράψτε έναν τίτλο που θα αναζητήσουν οι αγοραστές (ψάξτε πρώτα εσείς για άλλο παρόμοιο αντικείμενο. ΠΡΟΣΟΧΗ να κάνετε και ορθογραφικά λάθη, γιατί αναζητούν και βάση αυτών)
  • Συμπεριλάβετε δικές σας φωτογραφίες, υψηλής ποιότητας ώστε να καταλάβει ο αγοραστής τι πουλάτε
  • Γράψτε μια λεπτομερή περιγραφή ή εξετάστε το ενδεχόμενο να χρησιμοποιήσετε ένα πρότυπο περιγραφής eBay

Βήμα 2: Πότε είστε έτοιμοι να ανοίξετε μαγαζί


1. Υποθέτω ότι είστε εξικοιωμένοι με τις αγορές (δείτε ξανά το άρθρο οδηγός αγορών-πωλήσεων στο eBay). Σας συνιστώ να αποκτήσετε 3-6 μήνες εμπειρίας πριν ανοίξετε το κατάστημά σας. Αυτό θα σας επιτρέψει:
  • Μάθετε σχετικά με τη διαδικασία αγοράς και πώλησης
  • Θα έχετε θετικές κριτικές και σχόλια αγοραστών
  • Θα καταργήστε τους περιορισμούς του eBay για τους νέους πωλητές

2. Βεβαιωθείτε ότι έχετε δημιουργήσει αρκετές πωλήσεις για να αξίζει τον κόπο να ανοίξετε ένα κατάστημα eBay. Σας συνιστώ να πουλήσετε $500 - $1.000 (το ίδιο και σε Euros) εμπορεύματα το μήνα.

3. Το eBay συνιστά στους πωλητές να έχουν τουλάχιστον 25 ενεργά προϊόντα προς πώληση κάθε φορά, οπότε βεβαιωθείτε ότι έχετε τόσα προϊόντα και ότι μπορείτε να χειριστείτε την κατάσταση.

4. Βεβαιωθείτε ότι έχετε ενεργό έναν τρόπο πληρωμής - το eBay το απαιτεί έτσι ώστε να μπορεί να σας χρεώσει αυτόματα τις αμοιβές των πωλητών, όταν πωλούνται τα προϊόντα.

5. Βεβαιωθείτε επίσης ότι έχετε έναν επαληθευμένο λογαριασμό PayPal, καθώς πολλοί αγοραστές προτιμούν αυτόν τον τρόπο πληρωμής. Συνήθως θα πρέπει να παρέχετε:

  • Πληροφορίες τραπεζικού λογαριασμού
  • Πληροφορίες Πιστωτικής Κάρτας
  • Αριθμός φορολογικού μητρώου

Payment methods

Βήμα 3: Επιλέξτε τη σωστή συνδρομή του καταστήματος eBay


Πρώτα απ'όλα θα πρέπει να επιλέξετε το είδος της εγγραφής που θέλετε αλλά και χρειάζεστε. Πριν από την επιλογή σας, προτείνω να ξεκινήσετε απλά διότι μπορείτε να αναβαθμίσετε οποιαδήποτε στιγμή (το eBay έχει και μια χαμηλότερη βαθμίδα συνδρομής που ονομάζεται «Starter» και κοστίζει $4,95/μήνα). Επιλέγοντας ένα πλάνο, σημαίνει ότι δεν θα πληρώνετε ατομικά τέλη καταχώρισης αλλά ένα ενιαίο τέλος για έναν προκαθορισμένο αριθμό καταχωρίσεων. Όσο περισσότερα προϊόντα πουλάτε στο eBay, τόσο καλύτερη θα είναι η προσφορά-έκπτωση. Δείτε τις χρεώσεις εδώ.

Subscription fees

Επιλέξτε το κατάλληλο όνομα


Στη συνέχεια, επιλέξτε ένα όνομα για το κατάστημά σας - αυτό το όνομα θα γίνει και η διεύθυνση URL του καταστήματός σας, οπότε βεβαιωθείτε ότι έχετε επιλέξει όνομα που είναι ελεύθερο, έχετε σκεφτεί πόσο εύκολα κάποιος χρήστης θα μπορεί να σας βρει ή ακριβέστερα να βρει το προϊόν σας σε μια μηχανή αναζήτησης. Προσπαθήστε να είστε ακριβείς και να έχετε και χιούμορ: παράδειγμα 'Ανδρικά Ρούχα & Αξεσουάρ' αντί για 'Παπούτσια και ζώνες του Μπαρμπα Μήτσου'.

Μόλις επιλέξετε τον τύπο συνδρομής σας και το όνομα του καταστήματός σας, απομένει να πατήσετε το κουμπί που συμφωνείτε με τους όρους και τις προϋποθέσεις του eBay για να εγγραφείτε επίσημα.


Τώρα το κατάστημά σας είναι ενεργό και μπορείτε να ξεκινήσετε να πουλάτε.

Βήμα 4: Σχεδιάστε το κατάστημά σας


Το κεφάλαιο αυτό είναι από μόνο του μεγάλο. Θα το αναλύσω σε επόμενα άρθρα μου, οπότε μείνετε συντονισμένοι.

Μέχρι τώρα είστε σε καλό δρόμο για να γίνετε ένας επιτυχημένος ιδιοκτήτης καταστήματος eBay. Έχετε κάνει την έναρξή σας. Μην ξεχάσετε να:

  • Προσθέστε συνεχώς νέα στοιχεία στο κατάστημά σας
  • Προσφορές προώθησης
  • Να παρακολουθείτε ποια προϊόντα πουλάνε και ποια όχι. Αυτά που δεν είναι κερδοφόρα να τα αφαιρέσετε και αυξήστε την ποικιλία των κορυφαίων πωλήσεών σας
  • Μην ξεχάσετε να δοκιμάσετε και τις δύο επιλογές, το 'δημοπρασίες' και 'να το αγοράσετε τώρα' και να δείτε ποιο δουλεύει καλύτερα για τα προϊόντα που πουλάτε
  • Μην ξεχάσετε να διασκεδάσετε - η διαδικασία της αγοράς πρέπει να είναι πάντα διασκεδαστική και είτε το πιστεύετε είτε όχι οι αγοραστές αισθάνονται τους πωλητές που είναι θετικοί και πιστεύουν στο προϊόν τους. Το κατάστημα σας (ή στην περίπτωσή μας, η αρχική σελίδα) δείχνει την έκφραση του προσώπου σας και τα χαμόγελα πωλούν περισσότερα προϊόντα.

Ρύθμιση των 2 πιο πολύτιμων χαρακτηριστικών του καταστήματος eBay


#1: Δημιουργία κατηγοριών


Categories

Φροντίστε να δημιουργήσετε κατηγορίες για το κατάστημά σας. Το eBay σας δίνει τη δυνατότητα να διαιρέσετε τα προϊόντα σας σε κατηγορίες ως 'καταστηματάρχης΄ και αυτό καθιστά εύκολο για τους πελάτες να βρίσκουν τα προϊόντα σας. Εάν πουλάτε ρούχα, παπούτσια και αξεσουάρ για άντρες, εξετάστε το ενδεχόμενο να τοποθετήσετε κάθε στοιχείο στη σωστή κατηγορία, όπως:

* Παπούτσια
* Ζώνες
* Ρολόγια
* Πουκάμισα
* Γυαλιά ηλίου
* Κασκόλ
* Γάντια
* Καπέλα
* Μπότες
* Πορτοφόλια

#2: Δημιουργία λίστας email για ενημερωτικά δελτία


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

Το eBay επιτρέπει στους ιδιοκτήτες καταστημάτων να χρησιμοποιήσουν το μάρκετινγκ ηλεκτρονικού ταχυδρομείου μέσω ενημερωτικού δελτίου. Πως; Οι αγοραστές μπορούν να εγγραφούν στο ενημερωτικό δελτίο:

1. Προσθέτοντάς σας στη λίστα των αποθηκευμένων-αγαπημένων πωλητών.
2. Ή με την επιλογή του 'Εγγραφείτε για ενημερωτικό δελτίο καταστήματος' που εμφανίζεται στην αρχική σελίδα του καταστήματός σας.

Οι πωλητές δημιουργούν αυτά τα μηνύματα προκειμένου:

  • Να προωθήσουν το κατάστημά τους
  • Ενημέρωση πελατών σχετικά με τις πωλήσεις
  • Ενημερώνετε τους αγοραστές όταν προστίθενται νέα στοιχεία στο κατάστημά σας
  • Και για να ανοίξετε δίαυλο με τους πελάτες και να τους υπενθυμίσετε ότι το κατάστημά σας είναι εκεί για αυτούς όποτε θα χρειαστεί να κάνουν την επόμενη αγορά τους

Το eBay παρέχει έτοιμα πρότυπα στα 'εργαλεία μάρκετινγκ' > 'μάρκετινγκ μέσω ηλεκτρονικού ταχυδρομείου'. Μην ανησυχείτε για το GDPR. Το ebay έχει μεριμνήσει για εσάς.

Το email σας θα αποτελείται από:

1. Θέμα - Αυτό εμφανίζεται στα εισερχόμενα των ατόμων και είναι το πρώτο πράγμα που βλέπουν ελπίζοντας ότι το μήνυμά σας δεν θα κατέληγε στο κουτί ανεπιθύμητων. Προσπαθήστε να γράψετε κάτι σύντομο, πιασάρικο και απλό, για παράδειγμα: 'Hot νέο ανδρικό ντύσιμο' ή 'χειμερινές εκπτώσεις: 20% έκπτωση σε όλα τα είδη'

2. Επικεφαλίδα - Αυτό θα εμφανιστεί στην κορυφή του μηνύματος και μπορεί να είναι κάτι ελκυστικό όπως το '50% έκπτωσε σε όλα τα ηλεκτρικά' ή 'με την αγορά ενός, ακόμα ένα δώρο'.

3. Προσωπικό μήνυμα - Καλό θα ήταν να διατηρήσετε αυτό το μήνυμα επαγγελματικό αλλά φιλικό και ενημερώσετε τους αγοραστές να μάθουν σύντομα τι πουλάτε και γιατί πρέπει να αγοράσουν από το κατάστημά σας σήμερα.

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

5. Λίστα αντικειμένων - Το eBay σας επιτρέπει να εμφανίσετε μια λίστα μέχρι 50 προϊόντων, ώστε οι αγοραστές να μπορούν να περιηγούνται στα είδη σας χωρίς να βγουν από τα εισερχόμενά τους.

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

Περίληψη


Έχοντας ένα κατάστημα στο eBay θα πρέπει να είναι πρώτα μια οικονομική απόφαση και στη συνέχια μια απόφαση branding.

Είδαμε πώς να υπολογίσετε τα 'τέλη' στο eBay και την απόφαση του καλύτερου καταστήματος για εσάς.

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

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

Επίσης για να δείτε πρώτοι το βίντεο που ετοιμάζω, εγγραφείτε στο κανάλι μου κλικάροντας το παρακάτω μπουτόν:

Στο προηγούμενα άρθρα μάθαμε πως να φτιάχνουμε ένα bash script με μεταβλητές, να εκτελεί εντολές μέσα σε βρόχους, να ελέγχουμε τη ροή του και πως να κάνουμε μαθηματικές πράξεις μέσα από το bash. Στο παρόν μάθημα θα δούμε πως θα κάνουμε χρήση των cases. Cases Τα cases μας επιτρέπουν να ελέγχουμε τα ορίσματα που θα ελέγξουν... Continue Reading →
To OpenProject είναι μια πραγματική εφαρμογή διαχείρισης έργου με όλες εκείνες τις λειτουργίες που θα ήθελες για το μικρό, μεσαίο ή τεράστιο project σου. Οι περισσότρες από αυτές δίνονται out-of-the-…   Διαβάστε τη συνέχεια του άρθρου OpenProject: To απόλυτο σύστημα διαχείρισης έργου ανοικτού κώδικα όπως δημοσιεύθηκε στο Linux Insider

Hey!

In this post we are going to:

  • create a docker image for the Rails chat application that we created in the previous post
  • configure the Docker environment and run the application by:
    • creating a container for the PostgreSQL database
    • creating a container for the Redis server
    • creating a container with the required configuration from the image we built

Rails chat application gif

Prerequisites

Install docker

The first thing you need in order to follow this tutorial is to install Docker on your machine.

We are going to use the Docker Community Edition. Follow the installation instructions matching your system.

I’m on Ubuntu 18.04 LTS so following the instructions, I had to:

  • Uninstall previous versions with:
sudo apt-get remove docker docker-engine docker.io containerd runc
  • I chose to install the application using the repository.
sudo apt-get update

sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg-agent \
     software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

and I verified that I had the key with the proper fingerprint after executing:

sudo apt-key fingerprint 0EBFCD88
  • I set up the repository with:
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

The installation took place with these commands:

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io
  • I checked that the installation was successful with:
$ sudo docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:...
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Important note

Upon installation, a new user group was created with the name docker. If you want to allow users to do docker stuff without using sudo, you have to do some extra configuration (read more here) but keep in mind that:

The docker group grants privileges equivalent to the root user. For details on how this impacts security in your system, see Docker Daemon Attack Surface. Post-installation steps for Linux - Official Docker installation instructions

We are going to use sudo in this tutorial.

Clone the rails chat tutorial from GitHub

Navigate to your development directory on your machine and clone the sample Rails chat application with:

git clone https://github.com/iridakos/rails-chat-tutorial

Done.

Configure the application to use PostgreSQL for the production environment

The application is configured to use the predefined sqlite database adapter. For the purpose of this tutorial we will change the adapter to postgresql and at the second part of the post we will create a container running the PostgreSQL database.

Open the file config/database.yml file and change the production configuration as described below:

production:
  <<: *default
  adapter: postgresql
  host: <%= ENV.fetch('DATABASE_HOST') %>
  port: <%= ENV.fetch('DATABASE_PORT') %>
  username: <%= ENV.fetch('DATABASE_USERNAME') %>
  password: <%= ENV.fetch('DATABASE_PASSWORD') %>

Open the application’s Gemfile and add the following lines:

group :production do
  gem 'pg'
end

to install the adapter. The pg gem requires to have the package libpq-dev installed on the machine. We will satisfy this requirement when building the image.

Building the docker image

We are going to build the image gradually in order to understand what’s going on with every command we use.

Create the Dockerfile

Whenever we want to create a new image in docker we use a file named Dockerfile. It is a text file with instructions to be followed sequentially to assemble an image.

Navigate to the Rails chat tutorial (from now I will call this application directory) directory and create the file.

touch Dockerfile

and before continuing let’s try to build the image with just that empty file:

sudo docker build . -t rails-chat-tutorial

Of course we get an error, but take a look at the first line of the log:

Sending build context to Docker daemon  46.39MB
Error response from daemon: the Dockerfile (Dockerfile) cannot be empty

When building an image, Docker creates a build context which is actually the files that will be available when the Dockerfile’s commands get executed.

The . (dot) part of the build command that we used tells Docker to try to build the image using the current directory for its build context.

Since we didn’t explicitly specified in the command which Dockerfile to use, Docker will use the one that is located in the root of the context.

Define the parent image

A parent image is the image that your image is based on. It refers to the contents of the FROM directive in the Dockerfile. Each subsequent declaration in the Dockerfile modifies this parent image. Most Dockerfiles start from a parent image, rather than a base image. However, the terms are sometimes used interchangeably. Create a base image - Official Docker Documentation

Building the image from scratch is out of the context of this tutorial but if you want to familiarize your self with this aspect, read more here.

Docker provides official Ruby images and we are going to use the version that the Rails chat tutorial uses which is 2.6.2 as our parent image.

Open Dockerfile and add the following line:

FROM ruby-2.6.2:stretch

and run the build command again:

$ sudo docker build . -t rails-chat-tutorial
Sending build context to Docker daemon  46.39MB
Step 1/1 : FROM ruby:2.6.2-stretch
2.6.2-stretch: Pulling from library/ruby
e79bb959ec00: Pull complete
d4b7902036fe: Pull complete
1b2a72d4e030: Pull complete
d54db43011fd: Pull complete
69d473365bb3: Pull complete
84ed2a0dc034: Pull complete
75df5efa5606: Pull complete
f0d10aea813b: Pull complete
Digest: sha256:d5af6b19da8381014f59e79245ae242dd5ea8dfe1a8a6c0e2bc481366f1e92b9
Status: Downloaded newer image for ruby:2.6.2-stretch
 ---> 8d6721e9290e
Successfully built 8d6721e9290e
Successfully tagged rails-chat-tutorial:latest

Execute the following command to see which images Docker has.

$ sudo docker image list
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
rails-chat-tutorial   latest              8d6721e9290e        10 days ago         870MB
ruby                  2.6.2-stretch       8d6721e9290e        10 days ago         870MB
hello-world           latest              fce289e99eb9        3 months ago        1.84kB

The hello-world is the Docker’s image that we used after installing Docker. The other image, the ruby one is the parent image of our image. Since the Dockerfile didn’t have any custom instructions other that just defining a parent image, the resulting image rails-chat-tutorial is actually the same as the parent image and has the same IMAGE ID, CREATED and SIZE properties. Time to change this.

Copying the application code

The purpose of the image that we are building is to serve the Rails chat tutorial application. Eventually, to do so it’s pretty obvious that the image must contain the code of the application.

We will use the COPY command to copy the code inside the image.

Open the Dockerfile and append the following line:

COPY . /application

This command will copy all files from inside the build context to the image.

  • the first argument is the location of the build context to be copied
  • the second argument is the target location inside the image

Build the image again and execute the following command to confirm that we are good.

docker run -i -t rails-chat-tutorial

If you take a look at the ruby’s docker image, you will see that the last line is:

CMD [ "irb" ]

Since we don’t define something different in our image, the same command is being executed and that’s why the execution of the previous command brought us to Ruby’s irb console.

Let’s see what the /application directory of the container has.

Dir['/application/*']
=> ["/application/config.ru", "/application/Rakefile", "/application/lib", "/application/storage", "/application/test", "/application/Gemfile", "/application/app", "/application/Gemfile.lock", "/application/LICENSE", "/application/log", "/application/public", "/application/tmp", "/application/vendor", "/application/bin", "/application/README.md", "/application/config", "/application/package.json", "/application/Dockerfile", "/application/db"]

Cool, the application directory has been copied. Moving on.

Install application dependencies

Before starting the server (puma in our case), we have to install the dependencies of the application. To do so, add the following line to the Dockerfile.

RUN bundle install --deployment --without development test

and rebuild the image.

build . -t rails-chat-tutorial
Sending build context to Docker daemon  46.39MB
Step 1/3 : FROM ruby:2.6.2-stretch
 ---> 8d6721e9290e
Step 2/3 : COPY . /application
 ---> f9b9d813d6a0
Step 3/3 : RUN bundle install --deployment --without development test
 ---> Running in a6c8c25da3f5
Could not locate Gemfile
The command '/bin/sh -c bundle install --deployment --without development test' returned a non-zero code: 10

We have an error because for the bundle command to succeed we must first change to the application’s root directory that does contain the Gemfile file.

Change the contents of the Dockerfile to the following:

FROM ruby:2.6.2-stretch

# Copy application code
COPY . /application
# Change to the application's directory
WORKDIR /application

# Install gems
RUN bundle install --deployment --without development test

and rebuild. Now the gems are being installed and we are ready to start the server.

$ docker build . -t rails-chat-tutorial
Sending build context to Docker daemon  46.39MB
Step 1/4 : FROM ruby:2.6.2-stretch
 ---> 8d6721e9290e
Step 2/4 : COPY . /application
 ---> b1aae569faf4
Step 3/4 : WORKDIR /application
 ---> Running in ab90edf73be5
Removing intermediate container ab90edf73be5
 ---> 6bbdaa9942e3
Step 4/4 : RUN bundle install --deployment --without development test
 ---> Running in 22724a3684fe
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java.
Fetching gem metadata from https://rubygems.org/............
Fetching rake 12.3.2
Installing rake 12.3.2
Fetching concurrent-ruby 1.1.5
...
...
...
Fetching sqlite3 1.4.0
Installing sqlite3 1.4.0 with native extensions
Fetching uglifier 4.1.20
Installing uglifier 4.1.20
Bundle complete! 21 Gemfile dependencies, 69 gems now installed.
Gems in the groups development and test were not installed.
Bundled gems are installed into ./vendor/bundle
...
...
...

Removing intermediate container 22724a3684fe
 ---> d0d3163a8cca
Successfully built d0d3163a8cca
Successfully tagged rails-chat-tutorial:latest

Asset compilation

In the production environment, assets have to be pre-compiled.

We will add this task in our ENTRYPOINT script (see below) because during asset compilation Rails initializes the application and if we executed the task upon building the image, the initialization would fail since some components (like database connection, configuration of services based on environment variables like cable.yml) are not available.

We must install a Javascript environment in the container though or else when the time comes and the task is executed, will get the following error:

ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.

We will install nodejs, add the following line:

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    apt install -y nodejs

Rebuild and you should be fine.

Start the server

We want to start the application in the production environment. Rails can resolve this via the environment variable RAILS_ENV.

To set it in the image, add in Dockerfile:

ENV RAILS_ENV production

The last instruction in the Dockerfile will be our ENTRYPOINT.

Add the following line:

ENTRYPOINT ./entrypoint.sh

What’s left to do is to configure the entrypoint.sh script to do the following:

  • compile the assets
  • start the server

Create a file named entrypoint.sh in the root application directory and add:

# Compile the assets
bundle exec rake assets:precompile

# Start the server
bundle exec rails server

This file has to be executable, so in your terminal:

chmod +x ./entrypoint.sh

That’s all.

Since there are no more modifications to be done in our Dockerfile, make sure its contents are the following:

FROM ruby:2.6.2-stretch

# Copy application code
COPY . /application
# Change to the application's directory
WORKDIR /application

# Install gems
RUN bundle install --deployment --without development test

# Set Rails environment to production
ENV RAILS_ENV production

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt install -y nodejs

# Start the application server
ENTRYPOINT ./entrypoint.sh

Compacting the Dockerfile

We will optimize the Dockerfile since each RUN command creates a new image (read more here).

We will merge the RUN commands in one and move the ENV command just before it. The resulting Dockerfile is:

FROM ruby:2.6.2-stretch

# Copy application code
COPY . /application
# Change to the application's directory
WORKDIR /application

# Set Rails environment to production
ENV RAILS_ENV production

# Install gems, nodejs and precompile the assets
RUN bundle install --deployment --without development test \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt install -y nodejs

# Start the application server
ENTRYPOINT ['./entrypoint.sh']

Running the application in the Docker environment

Creating the PostgreSQL container

We are going to create a container for the PostgreSQL database.

We need to specify two environment variables to configure a user for our application: POSTGRES_USER and POSTGRES_PASSWORD. The values of these environment variables will be used later on when creating the application’s container.

sudo docker run --name rails-chat-tutorial-pg
            -e POSTGRES_USER=postgres
            -e POSTGRES_PASSWORD=postgres
            -p 5432:5432
            -d postgres

Since the image doesn’t exist locally, Docker will fetch it from the Official Docker images and then it will create a container, binding the PostgreSQL default port 5432 to the same port of the host.

Notes: I suggest you read this documentation if you want to familiarize yourself with the options you have for customizing the container (volumes/database configuration etc).

Creating the Redis container

To create the redis container, all we have to do is run the following command:

sudo docker run --name rails-chat-tutorial-redis \
            -p 6379:6379 \
            -d redis

Again, since the image doesn’t exist locally, Docker will fetch it from the Official Docker images and then it will create a container, binding its 6376 to the same port of the host.

Creating the application’s container

At this point, your docker running containers should look like this:

$ sudo docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
<a container id>    redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:6379->6379/tcp   rails-chat-tutorial-redis
<a container id>    postgres            "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:5432->5432/tcp   rails-chat-tutorial-pg

The Rails chat tutorial in production mode needs the following environmental variables:

  • database.yml
    • DATABASE_HOST: 172.17.0.1
    • DATABASE_PORT: 5432
    • DATABASE_USERNAME: postgres
    • DATABASE_PASSWORD: postgres
  • cable.yml
    • REDIS_URL: redis://172.17.0.1:6379/1

To create the container for the image that we created in this post passing the required environment variables, use:

sudo docker run --name rails-chat-tutorial-web \
            -e DATABASE_HOST=172.17.0.1 \
            -e DATABASE_PORT=5432 \
            -e DATABASE_USERNAME=postgres \
            -e DATABASE_PASSWORD=postgres \
            -e REDIS_URL=redis://172.17.0.1:6379/1 \
            -p 3000:3000 \
            rails-chat-tutorial

Note: we bound the container’s 3000 port on the same port of the host.

Navigate to http://localhost:3000 and see what happens.

Error

We don’t get very helpful information on the error since the application is running in production mode (at least this worked :P). Let’s connect to the container and check the logs:

$ sudo docker exec -it rails-chat-tutorial-web bash

Now you are connected to the container. Check the /application/production.log file. Somewhere among all these lines you will see the following:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation users does not exist

We set up the database server but we didn’t create/migrate the database. Since we are already connected to the container we will execute the required rake tasks.

bundle exec rake db:create db:migrate

Reload the page and voilà

Application home page

What’s next

In the next tutorial we are going to:

  • refactor this image for production (use volume for postgreSQL, asset precompilation)
  • use nginx to serve them
  • use docker compose to bind them all.

Thanks

I am very grateful for your feedback (like this one from DeusOtiosus @ Reddit).

That’s all! Cat photo.

Irida

Code and comments
You can find the code of this tutorial on https://github.com/iridakos/rails-chat-tutorial on branch docker.
For feedback, comments, typos etc. please open an issue in the repository.
Thanks for visiting!
Δεν είναι λίγες η φορές που νέοι χρήστες βλέπουν το πόσο «γεμίζει» η RAM του υπολογιστή τους και τρομάζουν από την κατανάλωση μνήμης που γίνεται. Τι συμβαίνει όμως και η μνήμη RAM γεμίζει; Εισαγωγή Ένα από τα σημαντικότερα υποσυστήματα όλων των σύγχρονων λειτουργικών συστημάτων είναι η διαχείριση μνήμης. Αυτό περιλαμβάνει την υλοποίηση της «Εικονικής Μνήμης»,... Continue Reading →
Από το τέλος του 2018, το Facebook ξεκίνησε να προσθέτει στο τέλος των URLs που «μοιραζόμαστε» με τους «φίλους» μας στην πλατφόρμα μια παράμετρο fbclid. Πρόκειται για ένα tracking string με συνέπειες…   Διαβάστε τη συνέχεια του άρθρου Τι ειναι το fbclid που βάζει το facebook στα urls και πως το αφαιρούμε όπως δημοσιεύθηκε στο Linux Insider

Ο Οργανισμός Ανοιχτών Τεχνολογιών (ΕΕΛΛΑΚ) ως Εθνικό Σημείο Επαφής της Ευρωπαϊκής δράσης Scientix συμμετείχε σε μια συνάντηση για περισσότερους από 40 υπεύθυνους για τη χάραξη πολιτικής, ενδιαφερόμενους φορείς της βιομηχανίας, υπεύθυνους λήψης αποφάσεων και κορυφαίους εκπαιδευτικούς από όλη την Ευρώπη στο πλαίσιο της εκδήλωσης Sharing Inspiration 2019

Η εκδήλωση πραγματοποιήθηκε στο κτίριο Jacques Delors της Επιτροπής των Περιφερειών της Ευρωπαϊκής Επιτροπής, στις 28 Μαρτίου στις Βρυξέλλες. Η εκδήλωση οργανώθηκε από την T³ Europe (Teachers Teaching with Technology) σε συνεργασία με την Ευρωπαϊκή Επιτροπή (DG EAC, DG Connect), European Schoolnet, Scientix, SEMI Europe, SME United, Digital Europe, WKO, ZVEI, ITI, MNU, Transport Malta, Saxon State Ministry of Education, Texas Instruments και άλλους .

Για περισσότερες πληροφορίες σχετικά με την εκδήλωση, το πρόγραμμα και τις παρουσιάσεις των ομιλητών επισκεφτείτε τον ιστότοπο του Scientix εδώ.

by: Cerebrux

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

Μερικές Πληροφορίες

Το Deepin είναι μια διανομή που βασίζεται στο Debian (Unstable). Δημιουργήθηκε το 20111 με σκοπό την ασφαλή και σταθερή εμπειρία των χρηστών στον κόσμο του Linux. Εκτός από το λειτουργικό, δημιουργεί και αναβαθμίζει καθημερινά εργαλεία που χρησιμοποιεί ο χρήστης, κάποια από αυτά είναι Deepin Store και Deepin File Manager.

 

Εγκατάσταση Deepin Linux

deepin-linux-dianomi-egkatastasiΈναρξη εγκατάστασης

Η εγκατάσταση έχει 5 βήματα πολύ απλά και κατανοητά για όλους. Δυστυχώς, ένα αρνητικό είναι ότι δεν έχει live έκδοση και αναγκαστικά πρέπει να το κάνεις install στον υπολογιστή σου. Οπότε προτείνω σε όσους θέλουν να το δοκιμάσουν, ας το δοκιμάσουν όπως έχουμε δείξει σε κάποιο Virtual Box.

Πρώτη Εντύπωση

Πρώτο και σημαντικό προτέρημα είναι ότι έζησα μία out-of-the-box εμπειρία καθώς ο driver της ασύρματης κάρτας ήταν ήδη εγκατεστημένος και δεν χρειάστηκε να ταλαιπωρηθώ μέχρι να το κάνω.

Αφήνω αυτό εδώ για να βγάλετε τα συμπεράσματα σας:

deepin-linux-dianomi-desktopΓραφικό περιβάλλον

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

Στο μενού καλωσορίσματος μας δίνει κάποιες επιλογές για να μεταμορφώσουμε το γραφικό περιβάλλον.

deepin-linux-dianomi-desktop-modeεπιλογή Desktop Mode

Αν θέλετε dock επιλέγεται το fashion mode, αν πάλι είστε πιο παραδοσιακοί και θέλετε γραμμή στο κάτω μέρος της οθόνης σας (που θυμίζει Windows) τότε το efficient mode κάνει την δουλειά του τέλεια.

Σε περίπτωση που δεν σας αρέσουν τα animations και τα effects και κυρίως σε υπολογιστές που δεν είναι τόσο δυνατοί με μία απενεργοποίηση των window effect κερδίζετε σε ταχύτητα. Περισσότερες πληροφορίες (στα αγγλικά) μπορεί κανείς να διαβάσει στην επίσημη τεκμηρίωση της διανομής2.

deepin-linux-dianomi-windows-effectαπό την επιλογή Windows Effect ορίζετε αν θα έχετε εφέ παραθύρων

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

deepin-linux-dianomi-settingsοι ρυθμίσεις εμφανίζονται δεξιά

Εφαρμογές και Store

Το Deepin ξεκινάει με βασικό browser το google chrome και σαν σουίτα γραφείου το WPS Office. Προσωπικά ο Firefox είναι ο κύριος browser σε όσες διανομές έχω δοκιμάσει και ένιωσα περίεργα που δεν τον είχα.

Γι’ αυτό όμως υπάρχει το deepin store. Νομίζω πως είναι το μεγαλύτερο στολίδι της συγκεκριμένης διανομής.

deepin-linux-dianomi-storeτο Deepin Linux διαθέτει ένα από τα πιο όμορφα κέντρα λογισμικού

Για μας τους παράξενους που το λευκό δεν είναι το χρώμα μας υπάρχει επιλογή dark mode στο store.

deepin-linux-dianomi-dark-modeΜπορείτε να έχετε το Deepin Store σε Dark Mode

To Deepin store έχει αμέτρητες εφαρμογές και πολλές από αυτές δεν τις συναντάς σε αντίστοιχα store άλλων διανομών. Προσωπικά σε καμία διανομή μέχρι σήμερα δεν συνάντησα δύο από τις βασικές εφαρμογές που χρησιμοποιώ καθημερινά όπως το teamviewer και το megasync στο store.

Αρνητικό όμως του store είναι ότι τα περισσότερα σχόλια είναι στα κινέζικα και δεν μπορείς να κρίνεις εύκολα το feedback των εφαρμογών (εκτός και αν ξέρετε κινέζικα).

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

Αν και βασίζεται στο Debian (Unstable) είναι μία αρκετά στιβαρή διανομή και κατάλληλη για καθημερινή χρήση. Ο σχεδιασμός του θα καταφέρει να πείσει ακόμα και τους πιο δύσπιστους. Πιστεύω αυτήν την στιγμή είναι το πιο μοντέρνο γραφικό περιβάλλον με διαφορά.

Έχει ένα store που πραγματικά δεν θα σας λείψει τίποτα από αυτό (τουλάχιστον στις εμπορικές εφαρμογές).

Τελικά, το Deepin είναι μια κινέζικη δύναμη και δεν θυμίζει σε καμία περίπτωση τα υπόλοιπα κινέζικα προϊόντα που έχουμε στο νου.

Πηγή άρθρου: https://planet.ellak.gr/   , https://cerebrux.net

Σε ορισμένες εγκαταστάσεις Linux (και συχνά σε server), εμφανίζεται το παρακάτω μήνυμα σφάλματος όταν εγκαθιστούμε εφαρμογές με χρήση της Perl (για παράδειγμα με τη χρήση του apt-get): perl:…   Διαβάστε τη συνέχεια του άρθρου Τι ειναι τα locale και πως τα ρυθμίζω σε Debian και Ubuntu όπως δημοσιεύθηκε στο Linux Insider

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

Ο Αντιπρόεδρος της Επιτροπής και επίτροπος Ψηφιακής Ενιαίας Αγοράς κ. Άντρους Άνσιπ και η Επίτροπος Ψηφιακής Οικονομίας και Κοινωνίας κα Μαρίγια Γκάμπριελ, εξέφρασαν την ικανοποίησή τους για το αποτέλεσμα της ψηφοφορίας σε κοινή δήλωση:

«Εκφράζουμε την ικανοποίησή μας για την ευρύτατη στήριξη της οδηγίας για τα ανοικτά δεδομένα από τα μέλη του Ευρωπαϊκού Κοινοβουλίου.

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

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

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

Ευχαριστούμε θερμά τα μέλη του Ευρωπαϊκού Κοινοβουλίου, τα κράτη μέλη και τα ενδιαφερόμενα μέρη που συνέβαλαν σε μια εποικοδομητική και ταχεία νομοθετική διαδικασία, αποτέλεσμα της οποίας ήταν η σημερινή ψηφοφορία.»

Επόμενα βήματα

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

Ιστορικό

Οι νέοι κανόνες διαδέχονται την οδηγία για τις πληροφορίες του δημόσιου τομέα (2003/98/ΕΚ, η οποία αναθεωρήθηκε το 2013) η οποία διέπει την περαιτέρω χρήση δεδομένων που παράγονται από φορείς του δημόσιου τομέα (π.χ. νομικά δεδομένα, δεδομένα κίνησης, μετεωρολογικά και οικονομικά δεδομένα κ.λπ.) για εμπορικούς και μη εμπορικούς σκοπούς

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

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

Για περισσότερες πληροφορίες

Δελτίο Τύπου

Ενημερωτικό δελτίο

Μελέτη για την ευρωπαϊκή αγορά δεδομένων

Hey! It’s been a while since my last post.

I recently familiarized myself with the awesomeness of WebSockets and I finally found the time to write a tutorial about it. I hope you find it helpful.

Update: I also published another post for dockerizing the application of this tutorial, you can find it here.

Introduction

In this tutorial we are going to create a chat web application from scratch using Rails and WebSockets.

Rails chat tutorial gif

Code and comments
You can find the code of this tutorial on GitHub.
For feedback, comments, typos etc. please open an issue in the repository.

What are WebSockets

WebSocket is actually a protocol that enables bidirectional communication between the client and the server of a web application over a single long living TCP connection.

The WebSocket protocol enables interaction between a web browser (or other client application) and a web server with lower overheads, facilitating real-time data transfer from and to the server.

This is made possible by providing a standardized way for the server to send content to the client without being first requested by the client, and allowing messages to be passed back and forth while keeping the connection open. In this way, a two-way ongoing conversation can take place between the client and the server.

The communications are done over TCP port number 80 (or 443 in the case of TLS-encrypted connections), which is of benefit for those environments which block non-web Internet connections using a firewall. Similar two-way browser-server communications have been achieved in non-standardized ways using stopgap technologies such as Comet. WebSocket @ Wikipedia

Why WebSockets

Suppose you have to create a web page that shows the statuses of running processes. Without WebSockets you would have to either:

  • Use AJAX with Javascript intervals to request and render the latest state of the processes or
  • Automatically reload the page every x seconds (<meta http-equiv="refresh" content="x">) or
  • Add a message on the page “The statuses are not updated automatically ¯\_(ツ)_/¯ Press here to reload the page.”

All of these methods would request the process statuses from the server even if nothing has changed.

WebSockets are here to allow this communication to take place on demand. The cost is having to keep alive TCP connections between the server and all its clients (each for every open browser tab).

Building the application

We are going to build the web application using:

  • Ruby: version 2.6.2
  • Rails: version 5.2.3

Setting up the environment

We are going to install the proper ruby and rails versions.

Install ruby

I use rvm to manage the Ruby versions installed on my system. To install the desired ruby version use:

rvm install ruby 2.6.2

Install rails

Create a directory in your system with the name rails-chat-tutorial.

Navigate to that directory and create the following two files:

.ruby-version

ruby-2.6.2

.ruby-gemset

rails-chat-tutorial

With these file we are letting rvm know that when working on this directory, we want to use the specific ruby version (.ruby-version) and the gems from the specific gemset (.ruby-gemset)

Now, re-entering in the directory you should see something like this:

$ cd .

ruby-2.6.2 - #gemset created /home/iridakos/.rvm/gems/ruby-2.6.2@rails-chat-tutorial
ruby-2.6.2 - #generating rails-chat-tutorial wrappers...........

Install the desired rails version with:

gem install rails -v 5.2.3

Create the rails application

We are ready to create our new rails application:

rails new .

Note: We didn’t define a name for the application and rails will resolve it using the directory name: rails-chat-tutorial.

Rails will create all the application’s files and install the required gems.

Let’s start the application to make sure that everything if fine.

rails server

You should see something like:

=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

Open a browser and visit http://localhost:3000, if you see this we are good to go.

Rails new application

Users and devise

We are going to use the awesome devise solution for authentication.

Append the following gem requirement at the bottom of the Gemfile file located at the root of the application’s directory.

gem 'devise'

On your terminal, install the new gem by executing:

bundle

Finish integration with devise using:

rails generate devise:install

We will create the model representing our uses using the devise generators.

On your terminal, execute:

rails generate devise User username:string

Note: we have added an extra attribute username to our model (besides the defaults generated by devise) so that we have something more friendly to present when displaying users instead of their email.

Open the generated migration which you will find under db/migrate/<datetime>_devise_create_users.rb and append the username’s unique index definition with[4]:

  add_index :users,  :username,             unique: true

Find the line in the file that defines the username column and change it to:

t.string :username, null: false

to make the attribute required.

Then in the User model which is located at app/models/user.rb add the validation rule for uniqueness and presence:

  validates :username, uniqueness: true, presence: true

Finally, apply the database migration using:

rails db:migrate

We want all users to be authenticated before start chatting, so we are going to add the following line in the ApplicationController located at app/controllers/application_controller.rb:

  before_action :authenticate_user!

Rooms and messages

Each chat message is going to take place in the context of a room.

Let’s build them all.

Use the following command to create the Room:

rails generate resource Room name:string:uniq

and the following command to create the RoomMessage:

rails generate resource RoomMessage room:references user:references message:text

We are now going to define the appropriate relations[7].

Open app/models/room.rb and add the relation inside the class:

has_many :room_messages, dependent: :destroy,
                         inverse_of: :room

Open app/models/room_message.rb and add the relations inside the class:

belongs_to :user
belongs_to :room, inverse_of: :room_messages

Migrate the database with:

rails db:migrate

We can now setup our routes so that the root request is served by the RoomsController#index action.

Open your config/routes.rb file and change its contents to:

Rails.application.routes.draw do
  devise_for :users

  root controller: :rooms, action: :index

  resources :room_messages
  resources :rooms
end

Restart the server and try to navigate to the application’s root url.

You should see an error message, no worries:

No action index for the RoomsController

We have to create the index action in the RoomsController. Open the controller app/controllers/rooms_controller.rb and change its contents to the following:

class RoomsController < ApplicationController
  def index
  end
end

Then create the file app/views/rooms/index.html.erb and for now just add the following:

<h1>Rooms index</h1>

Reload and voilà.

Rooms index

Adding authentication

In order to require only signed in user to access the application, add the following line to the app/controllers/application_controller.rb

  before_action :authenticate_user!

If we navigate to http://localhost:3000 now we should be redirected to the sign in page.

Sign in

Before continuing with the good stuff, let’s gear up the application with some good features.

Add bootstrap

We are going to use Bootstrap and we will integrate it in the application using the bootstrap-rubygem gem.

Following the instructions of the gem, append the dependencies in your Gemfile.

gem 'bootstrap', '~> 4.3.1'
gem 'jquery-rails'

and execute bundle to fetch and install it.

Change the app/assets/stylesheets/application.css files extension to scss and replace its contents with:

@import "bootstrap";

Add the following lines to the app/assets/javascript/application.js just before the //= require_tree . line[9]:

//= require jquery3
//= require popper
//= require bootstrap-sprockets

Add simple_form

We are going to use this great gem to generate forms easily.

Append the gem dependency in your Gemfile and bundle to install it.

gem 'simple_form'

Then complete the integration using:

rails generate simple_form:install --bootstrap

Note: We used the –bootstrap directive since that’s the framework we are using.

Devise views with bootstrap and simple form

Devise uses its own views for sign in, register etc. But we do have a way to customize these views and now that we have ended up using bootstrap and simple forms, we can generate these views in a way that our choices are respected.

In your terminal:

rails generate devise:views

The view for signing in is under app/views/devise/sessions/new.html.erb and for signing up is under app/views/devise/registrations/new.html.erb. Open these two files and change the submit button’s class by replacing the following line[6]:

<%= f.button :submit, "Sign up" %>

with

<%= f.button :submit, "Sign up", class: 'btn btn-success' %>

to render the buttons bootstrap style.

Before viewing our changes, let’s do one last thing in our default layout.

Open app/views/layouts/application.html.erb and replace its contents with:

<!DOCTYPE html>
<html>
  <head>
    <title>RailsChatTutorial</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <div class="container">
      <div class="row">
        <div class="col-12">
          <%= yield %>
        </div>
      </div>
    </div>
  </body>
</html>

This last one was to use Bootstrap’s grid in our views.

Navigate to http://localhost:3000 and view what we have created.

Sign in with Devise and simple form

Let’s try to sign up following the Sign up link of the form:

Sign up without username

As you can see, there is no field to fill in the username. For that to work we have to:

  • Add the field in the sign up form
  • Configure devise to accept the new attribute (username) or else the ApplicationController will ignore it once submitted from the form.

To add the field in the sign up form, open app/views/devise/registrations/new.html.erb and add these lines between the email and password fields.

  <%= f.input :username,
              required: true %>

Then, open the app/controllers/application_controller.rb file to configure the new attribute. Change the contents to:

class ApplicationController < ActionController::Base
  before_action :authenticate_user!

  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :username])
  end
end

Done, reload and sign up[5].

Sign up with username

Cleanup unused components

We will not be using coffee script or turbolinks so let’s remove all the related stuff.

Open Gemfile and remove the following lines:

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'

Open app/assets/javascripts/application.js and remove the following line:

//= require turbolinks

Open app/views/layouts/application.html.erb and change the following lines [3]:

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

to

    <%= stylesheet_link_tag    'application', media: 'all' %>
    <%= javascript_include_tag 'application' %>

Check that your app/assets/javascripts folder doesn’t have any files with extension .coffee and if you find any, remove them.2

In the terminal, also execute the following command:

rails tmp:cache:clear

to clear any cached compiled coffee scripts.

Done. Restart you server.

Adding a navigation bar

To improve the usability of the web pages will add a top navigation bar.

Create the directory app/views/shared and a file inside it named _navigation_bar.html.erb. This is going to be the partial responsible for rendering the navigation bar and which later on we will add to the application’s default layout in order to be rendered on all web pages. Add these contents:

<nav class="navbar navbar-expand-lg navbar-dark bg-dark justify-content-between">
  <a class="navbar-brand" href="#">Rails chat tutorial</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#nav-bar-collapse" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <% if current_user %>
    <div class="dropdown">
      <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        <img class="avatar" src="<%= gravatar_url(current_user) %>">
        <%= current_user.username %>
      </a>

      <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
        <%= link_to 'Logout', destroy_user_session_path, method: :delete, class: 'dropdown-item' %>
      </div>
    </div>
  <% end %>
</nav>

Mind the gravatar_url(current_user) line. This is a helper method that we are going to use in order to resolve the gravatar url of the signed in user. This is not a builtin method, we have to defined it but it’s pretty straightforward.

Edit app/helpers/application_helper.rb and add the following method:

def gravatar_url(user)
  gravatar_id = Digest::MD5::hexdigest(user.email).downcase
  url = "https://gravatar.com/avatar/#{gravatar_id}.png"
end

Note:

  • As you can see, the user’s username, avatar and sign out link will only be rendered if the user is signed in.

The avatar image has a css class avatar. We have to define this class in the application’s stylesheets. Create a css file in which we will gather all css class that we will use in the application under the name app/assets/stylesheets/rails-chat-tutorial.scss.

For now add the rule for the avatar:

.avatar {
  max-height:30px;
  border-radius: 15px;
  width:auto;
  vertical-align:middle;
}

and open application.scss to import the newly created stylesheet. Add the line:

@import "rails-chat-tutorial"

We have to add this partial in the application layout. Edit app/views/layouts/application.html.erb and change its contents to:

<!DOCTYPE html>
<html>
  <head>
    <title>RailsChatTutorial</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all' %>
    <%= javascript_include_tag 'application' %>
  </head>

  <body>
    <div class="container">
      <div class="row">
        <div class="col-12">
          <%= render partial: 'shared/navigation_bar' %>
          <div class="my-3">
            <%= yield %>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

Reload to view the bar.

Sign up with navigation bar

Awesome. Fill in with your desired credentials and submit the form.

Signed in

Room management

We are going to create a simple layout for groups.

  • One narrow column displaying vertically all the available rooms
  • One wide column which is going to host the chat messages and form.

The rooms index page will have the second column empty since this column will be present only when user is inside a specific room.

In the index page we will provide the option to create a room.

Room index

First we have to load all rooms in the RoomsController. Open app/controllers/rooms_controller.rb and change the index action as:

def index
  @rooms = Room.all
end

Open app/views/rooms/index.html.erb and change its contents to[8]:

<div class="row">
  <div class="col-12 col-md-3">
    <div class="mb-3">
      <%= link_to new_room_path, class: "btn btn-primary" do %>
        Create a room
      <% end %>
    </div>

    <% if @rooms.present? %>
      <nav class="nav flex-column">
        <% @rooms.each do |room| %>
          <%= link_to room.name, room_path(room), class: "nav-link room-nav-link" %>
        <% end %>
      </nav>
    <% else %>
      <div class="text-muted">
        The are no rooms
      </div>
    <% end %>
  </div>

  <div class="col">
    <div class="alert alert-primary">
      <h4 class="alert-heading">
        Welcome to the RailsChatTutorial!
      </h4>

      <p>
        We need to talk.
      </p>

      <hr />

      <p>
        You can create or join a room from the sidebar.
      </p>
    </div>
</div>

If there are rooms, the left column of the page will render a vertical navigation with links leading to each room’s page. The right column displays a simple welcome message.

Room index

Pressing the Create a room button we get the expected error for the non-existent action.

Room new/edit

We have to define the actions for creating and updating a room.

Open the app/controllers/rooms_controller.rb and change its contents to:

class RoomsController < ApplicationController
  # Loads:
  # @rooms = all rooms
  # @room = current room when applicable
  before_action :load_entities

  def index
    @rooms = Room.all
  end

  def new
    @room = Room.new
  end

  def create
    @room = Room.new permitted_parameters

    if @room.save
      flash[:success] = "Room #{@room.name} was created successfully"
      redirect_to rooms_path
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @room.update_attributes(permitted_parameters)
      flash[:success] = "Room #{@room.name} was updated successfully"
      redirect_to rooms_path
    else
      render :new
    end
  end

  protected

  def load_entities
    @rooms = Room.all
    @room = Room.find(params[:id]) if params[:id]
  end

  def permitted_parameters
    params.require(:room).permit(:name)
  end
end

Note: we preload the @rooms and the @room variables making them available to all actions with the before_action :load_entities hook.

We will create a simple form for the Room object and we will use it both when creating and editing a room. Create the app/views/rooms/_form.html.erb and add:

<%= simple_form_for @room do |form| %>
  <%= form.input :name %>
  <%= form.submit "Save", class: 'btn btn-success' %>
<% end %>

Then, create the views for the new/edit action accordingly:

app/views/rooms/new.html.erb

<h1>
  Creating a room  
</h1>

<%= render partial: 'form' %>

app/views/rooms/edit.html.erb

<h1>
  Editing room <%= @room.name %>
</h1>

<%= render partial: 'form' %>

Time to create the first room. From the rooms’ index page, press the Create a room

New room

Save and here it is.

Room index with rooms

Add this class in app/assets/stylesheets/rails-chat-tutorial.scss to improve the display of the rooms.

.room-nav-link {
  border: 1px solid lighten($primary, 40%);
  background: lighten($primary, 45%);

  & + .room-nav-link {
    border-top: 0 none;
  }
}

Room index with improved rooms

Note: We will add the edit link in the room’s page a.k.a. show action.

Before moving on to the Room page, we will refactor the index page so as to be able to use the left column’s content inside the room page as well.

Create the partial app/views/rooms/_rooms.html.erb with contents:

<div class="mb-3">
  <%= link_to new_room_path, class: 'btn btn-primary' do %>
    Create a room
  <% end %>
</div>

<% if @rooms.present? %>
  <nav class="nav flex-column">
    <% @rooms.each do |room| %>
      <%= link_to room.name, room_path(room), class: 'nav-link room-nav-link' %>
    <% end %>
  </nav>
<% else %>
  <div class="text-muted">
    The are no rooms
  </div>
<% end %>

and change the app/views/rooms/index.html.erb to use it:

<div class="row">
  <div class="col-12 col-md-3">
    <%= render partial: 'rooms' %>
  </div>

  <div class="col">
    <div class="alert alert-primary">
      <h4 class="alert-heading">
        Welcome to the RailsChatTutorial!
      </h4>

      <p>
        We need to talk.
      </p>

      <hr />

      <p>
        You can create or join a room from the sidebar.
      </p>
    </div>
  </div>
</div>

Room page

Add the show action in the app/controllers/rooms_controller.rb:

def show
  @room_message = RoomMessage.new room: @room
  @room_messages = @room.room_messages.includes(:user)
end

Notes:

  • We construct a new room message which we are going to use in the view to build a form for creating the chat messages.
  • When displaying the room message, we access its user’s email attribute to resolve the gravatar hash. We used .includes(:user) in the query for the @room_messages to fetch them along with their users avoiding N+1 queries[1].

Create the view app/views/rooms/show.html.erb:

<h1>
  <%= @room.name %>
</h1>

<div class="row">
  <div class="col-12 col-md-3">
    <%= render partial: 'rooms' %>
  </div>

  <div class="col">
    <div class="chat">
      <% @room_messages.each do |room_message| %>
        <%= room_message %>
      <% end %>
    </div>

    <%= simple_form_for @room_message, remote: true do |form| %>
      <div class="input-group mb-3">
        <%= form.input :message, as: :string,
                                 wrapper: false,
                                 label: false,
                                 input_html: {
                                   class: 'chat-input'
                                 } %>
        <div class="input-group-append">
          <%= form.submit "Send", class: 'btn btn-primary chat-input' %>
        </div>
      </div>

      <%= form.input :room_id, as: :hidden %>
    <% end %>
  </div>
</div>

Notes:

  • We reused the app/views/rooms/_rooms.html.erb partial that we created in the previous step
  • We added a div with class .chat and this is where the room’s messages are renderer.
  • We added a form for the @room_message that we instantiated in the controller. We also used the directive remote: true when we instantiated the form thus the form is going to be submitted by Ajax.
  • We added a hidden field for the attribute :room_id so that the value reaches the RoomMessagesController once we submit the form.

Style the chat components by adding the following lines to the app/assets/stylesheets/rails-chat-tutorial.scss:

.chat {
  border: 1px solid lighten($secondary, 40%);
  background: lighten($secondary, 50%);
  height: 50vh;
  border-radius: 5px 5px 0 0;
  overflow-y: auto;
}

.chat-input {
  border-top: 0 none;
  border-radius: 0 0 5px 5px;
}

Navigate to a room to see what has been done.

Room page with chat

Pressing the Send button nothing happens on the page but if you check the server’s console you will notice:

AbstractController::ActionNotFound (The action 'create' could not be found for RoomMessagesController):

Let’s fix that.

Creating room messages

This is going to be easy. All we have to do is implement the create action in the RoomMessagesController.

app/controllers/room_messages_controller.rb

class RoomMessagesController < ApplicationController
  before_action :load_entities

  def create
    @room_message = RoomMessage.create user: current_user,
                                       room: @room,
                                       message: params.dig(:room_message, :message)
  end

  protected

  def load_entities
    @room = Room.find params.dig(:room_message, :room_id)
  end
end

Notes:

  • we preload the room using the room_id parameter that we added as a hidden field in the form in the previous step
  • we create a new message for the room setting its user to currently signed in user

If you try to submit a message now, again you will see nothing but in the server console you can see from the log that the room message has been created.

Started POST "/room_messages" for ::1 at 2019-04-04 19:24:33 +0300
Processing by RoomMessagesController#create as JS
  Parameters: {"utf8"=>"✓", "room_message"=>{"message"=>"My first message", "room_id"=>"8"}, "commit"=>"Send"}
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ /home/iridakos/.rvm/gems/ruby-2.6.2@rails-chat-tutorial/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
  Room Load (0.2ms)  SELECT  "rooms".* FROM "rooms" WHERE "rooms"."id" = ? LIMIT ?  [["id", 8], ["LIMIT", 1]]
  ↳ app/controllers/room_messages_controller.rb:13
   (0.1ms)  begin transaction
  ↳ app/controllers/room_messages_controller.rb:5
  RoomMessage Create (0.7ms)  INSERT INTO "room_messages" ("room_id", "user_id", "message", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["room_id", 8], ["user_id", 1], ["message", "My first message"], ["created_at", "2019-04-04 16:24:33.456641"], ["updated_at", "2019-04-04 16:24:33.456641"]]
  ↳ app/controllers/room_messages_controller.rb:5
   (4.0ms)  commit transaction
  ↳ app/controllers/room_messages_controller.rb:5
No template found for RoomMessagesController#create, rendering head :no_content
Completed 204 No Content in 88ms (ActiveRecord: 5.1ms)

A user would expect to have the message field cleared after sending a new message. We don’t disappoint users.

Create a file app/assets/javascripts/room.js and add the following:

$(function() {
  $('#new_room_message').on('ajax:success', function(a, b,c ) {
    $(this).find('input[type="text"]').val('');
  });
});

We bind to the ajax:success event triggered by Rails on successful submission of the form and all we want to do is clear the text field’s value.

Reload the page and try submitting again and check it out. The field value should be emptied after sending the message.

Displaying room messages

If you reload the page you will see something like this:

Room message to string

Let’s beautify the messages.

Replace the contents of app/views/rooms/show.html.erb with:

<h1>
  <%= @room.name %>
</h1>

<div class="row">
  <div class="col-12 col-md-3">
    <%= render partial: 'rooms' %>
  </div>

  <div class="col">
    <div class="chat">
      <% @room_messages.each do |room_message| %>
        <div class="chat-message-container">
          <div class="row no-gutters">
            <div class="col-auto text-center">
              <img src="<%= gravatar_url(room_message.user) %>" class="avatar" alt="">
            </div>

            <div class="col">
              <div class="message-content">
                <p class="mb-1">
                  <%= room_message.message %>
                </p>

                <div class="text-right">
                  <small>
                    <%= room_message.created_at %>
                  </small>
                </div>
              </div>
            </div>
          </div>
        </div>
      <% end %>
    </div>

    <%= simple_form_for @room_message, remote: true do |form| %>
      <div class="input-group mb-3">
        <%= form.input :message, as: :string,
                                 wrapper: false,
                                 label: false,
                                 input_html: {
                                   class: 'chat-input'
                                 } %>
        <div class="input-group-append">
          <%= form.submit "Send", class: 'btn btn-primary chat-input' %>
        </div>
      </div>

      <%= form.input :room_id, as: :hidden %>
    <% end %>
  </div>
</div>

and add the following css classes inside the .chat class:

.chat-message-container {
  padding: 5px;

  .avatar {
    margin: 5px;
  }

  .message-content {
    padding: 5px;
    border: 1px solid $primary;
    border-radius: 5px;
    background: lighten($primary, 10%);
    color: $white;
  }

  & + .chat-message-container {
    margin-top: 10px;
  }
}

Reload the page. Magic.

Improved display of room messages

Introducing WebSockets - ActionCable

Time to start using WebSockets with ActionCable.

Action Cable seamlessly integrates WebSockets with the rest of your Rails application. It allows for real-time features to be written in Ruby in the same style and form as the rest of your Rails application, while still being performant and scalable. It’s a full-stack offering that provides both a client-side JavaScript framework and a server-side Ruby framework. You have access to your full domain model written with Active Record or your ORM of choice. Action Cable Overview @ Ruby on Rails Guides (v5.2.3)

Install redis

We are going to use the redis adapter which is a safe option for production environments unlike the async one.

You first must install redis on your system.

To install it on Ubuntu you just have to execute the following commands in your terminal:

sudo apt update
sudo apt install redis-server

To check that installation is successful, in your terminal make sure you get a PONG:

$ redis-cli
127.0.0.1:6379> ping
PONG

Configure ActionCable

Since we are working on the development environment, open your config/cable.yml and replace its contents with:

development:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: rails-chat-tutorial_development

test:
  adapter: async

production:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: rails-chat-tutorial_production

Note: we have added an option channel_prefix because:

Additionally, a channel_prefix may be provided to avoid channel name collisions when using the same Redis server for multiple applications Action Cable Overview # Redis Adapter @ Ruby on Rails Guides (v5.2.3)

Finally, we are going to add the dependency in the Gemfile:

gem 'redis'

Don’t forget to bundle after altering the Gemfile.

Configure Devise for authenticating websocket connections

When establishing a websocket connection, we don’t have access to the user session but we do have access to the cookies. So, in order to be able to authenticate the user we need to do some devise related stuff first (credits to Greg Molnar).

Create an initializer for warden hooks under the name config/initializers/warden_hooks.rb and add the following lines:

Warden::Manager.after_set_user do |user,auth,opts|
  scope = opts[:scope]
  auth.cookies.signed["#{scope}.id"] = user.id
end

Warden::Manager.before_logout do |user, auth, opts|
  scope = opts[:scope]
  auth.cookies.signed["#{scope}.id"] = nil
end

Explain: We add a cookie with the user’s id upon successful sign in and we remove it once the user logs out.

Configure the websocket connection

Open app/channels/application_cable/connection.rb and change its contents to the following:

module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user

    def connect
      self.current_user = find_verified_user
    end

    private

    def find_verified_user
      if verified_user = User.find_by(id: cookies.signed['user.id'])
        verified_user
      else
        reject_unauthorized_connection
      end
    end
  end
end

Explain:

Here identified_by is a connection identifier that can be used to find the specific connection later. Note that anything marked as an identifier will automatically create a delegate by the same name on any channel instances created off the connection. Action Cable Overview # Connection setup @ Ruby on Rails Guides (v5.2.3)

In the find_verified_user method we access the cookie that we previously set in the warden hook.

Create the room channel

A channel encapsulates a logical unit of work, similar to what a controller does in a regular MVC setup. Action Cable Overview # Channels @ Ruby on Rails Guides (v5.2.3)

We will create the RoomChannel in which all Room pages will subscribe to.

Create app/channels/room_channel.rb with the following contents:

class RoomChannel < ApplicationCable::Channel
  def subscribed
    room = Room.find params[:room]
    stream_for room

    # or
    # stream_from "room_#{params[:room]}"
  end
end

Explain:

  • The subscribed method gets called once a subscription to the channel is established and it is responsible to setup the stream from which data will be sent back and forth.

We are going to configure the room page code later on to request subscriptions to this channel passing the room parameter.

We have two options:

  • Use stream_for: this way Rails automatically generates a stream name for the given object (room in our case), for example: “room:asdfwer234”. When we want afterwards to broadcast data to the stream, all we have to do is call RoomChannel.broadcast_to(room_object, data) in which case Rails resolves the stream name from the room_object. In other words, we don’t have to manually resolve the stream name in which the data have to be send (see next item).
    • This option is available when the channel handles subscriptions bound to models like in our case, a specific room
  • Use stream_from: we manually define the name of the stream and later on, when we want to broadcast to the stream, we have to use: ActionCable.server.broadcast("room_#{a_room_id_here}", data).

Read more here.

Broadcast room messages

Every time a room message is being created, we just need to broadcast to the message’s room stream. To do so, alter the create action of the app/controllers/room_messages_controller.rb to this:

def create
  @room_message = RoomMessage.create user: current_user,
                                     room: @room,
                                     message: params.dig(:room_message, :message)

  RoomChannel.broadcast_to @room, @room_message
end

Explain: we added the line RoomChannel.broadcast_to @room, @room_message which will broadcast to the room’s specific stream (as explained above) the @room_message transformed to json via the to_json method.

So, on the other side, the client side, we are going to be receiving the json representation of the RoomMessage model. Let’s see what that is:

{
  "id":29,
  "room_id":8,
  "user_id":1,
  "message":"My first message",
  "created_at":"2019-04-04T17:09:00.637Z",
  "updated_at":"2019-04-04T17:09:00.637Z"
}

We plan to add the new messages in the room’s page via Javascript and this information is not adequate. The only thing we are missing is the user avatar. Time to refactor.

Open app/models/user.rb and add the following method:

def gravatar_url
  gravatar_id = Digest::MD5::hexdigest(email).downcase
  "https://gravatar.com/avatar/#{gravatar_id}.png"
end

We had already implemented this in the app/helpers/application_helper.rb file and we won’t be using it anymore so remove it.

Update app/views/shared/_navigation_bar.html.erb and change the previous gravatar resolution to this:

<img class="avatar" src="<%= current_user.gravatar_url %>">

Update app/views/rooms/show.html.erb and change it there too, with:

<img src="<%= room_message.user.gravatar_url %>" class="avatar" alt="">

Finally, we will change the JSON representation of the RoomMessage to include the user’s url:

app/models/room_message.rb

def as_json(options)
  super(options).merge(user_avatar_url: user.gravatar_url)
end

Let’s confirm that the new JSON transformation is valid:

{
  "id":29,
  "room_id":8,
  "user_id":1,
  "message":"My first message",
  "created_at":"2019-04-04T17:09:00.637Z",
  "updated_at":"2019-04-04T17:09:00.637Z",
  "user_avatar_url":"https://gravatar.com/avatar/02a28db6886d578f75a820b50f2dd334.png"
}

Great, moving on.

Subscribe to the room stream

We are going to add some data in the room page in order to use them via Javascript to subscribe to the appropriate streams each time we visit a room.

Open the file app/views/rooms/show.html.erb and alter the line in which we define the chat div, to this:

<div class="chat" data-channel-subscribe="room" data-room-id="<%= @room.id %>">

Explain: We added two data attributes, one defining to which channel we want to subscribe and one defining to which room we are.

At the end of the file, add the following snippet:

<div class="d-none" data-role="message-template">
  <div class="chat-message-container">
    <div class="row no-gutters">
      <div class="col-auto text-center">
        <img src="" class="avatar" alt="" data-role="user-avatar">
      </div>

      <div class="col">
        <div class="message-content">
          <p class="mb-1" data-role="message-text"></p>

          <div class="text-right">
            <small data-role="message-date"></small>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

This snippet is going to be used as a template for each incoming message. Every time a message arrives, we will

  • clone this html
  • alter the appropriate elements’ values and
  • append the resulting html to the end of the chat div.

Now we will create the Javascript that will do the work of subscribing and handling incoming channel data.

Create the file app/assets/javascripts/channels/room_channel.js and add the following code:

$(function() {
  $('[data-channel-subscribe="room"]').each(function(index, element) {
    var $element = $(element),
        room_id = $element.data('room-id')
        messageTemplate = $('[data-role="message-template"]');

    $element.animate({ scrollTop: $element.prop("scrollHeight")}, 1000)        

    App.cable.subscriptions.create(
      {
        channel: "RoomChannel",
        room: room_id
      },
      {
        received: function(data) {
          var content = messageTemplate.children().clone(true, true);
          content.find('[data-role="user-avatar"]').attr('src', data.user_avatar_url);
          content.find('[data-role="message-text"]').text(data.message);
          content.find('[data-role="message-date"]').text(data.updated_at);
          $element.append(content);
          $element.animate({ scrollTop: $element.prop("scrollHeight")}, 1000);
        }
      }
    );
  });
});

Explain:

  • For each element that has a data attribute channel-subscribe with value room
    • Create a subscription to the “RoomChannel” passing the element’s room-id data attribute as a parameter with name room (remember this line of the RoomChannel: Room.find params[:room] ?)
      • When data is received, clone the template snippet and alter its contents based on the incoming object attributes.
      • Append the newly generated content to the chat div and finally
      • Do some animation to impress by scrolling smoothly to the bottom of the div.

Acknowledgments

Thank you very much for your feedback.

That’s all! Long post, tired cat photo.

Tired cat photo

Code and comments
You can find the code of this tutorial on GitHub.
For feedback, comments, typos etc. please open an issue in the repository.
Thanks for visiting!
Η λέξη αλγόριθμος προέρχεται από την διατριβή του Πέρση μαθηματικού Μοχάμεντ ιμπν Μουσά αλ-Χουαρίζμι (αλ-γοριθμος), η οποία περιείχε συστηματικές τυποποιημένες λύσεις αλγεβρικών προβλημάτων που βασανίζουν την νεολαία μας στην ιδιαίτερα ευαίσθητη εφηβική ηλικία. Ως αλγόριθμος ορίζεται μια πεπερασμένη σειρά ενεργειών, αυστηρά καθορισμένων και εκτελέσιμων σε πεπερασμένο χρόνο, που στοχεύουν στην επίλυση ενός προβλήματος1. Πιο είναι το πρόβλημα;... Continue Reading →

Ο Οργανισμός Ανοιχτών Τεχνολογιών(ΕΕΛΛΑΚ) σε συνεργασία με τα μέλη του συγκροτεί ομάδες για συμμετοχή στην ετήσια εθνική άσκηση κυβερνοάμυνας ΠΑΝΟΠΤΗΣ 2019 που διοργανώνει η Διεύθυνση Κυβερνοάμυνας (ΔΙΚΥΒ) του ΓΕΕΘΑ και καλεί όσους ενδιαφέρονται να συμμετέχουν σε αυτή να εκδηλώσουν το ενδιαφέρον τους ως φυσικά πρόσωπα ή ως ομάδα στην εξής φόρμα εδώ, έως τη Δευτέρα 22 Απριλίου.

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

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

Η άσκηση ΠΑΝΟΠΤΗΣ διοργανώνεται από το 2010 και σε αυτή συμμετέχουν περισσότερα από 200 άτομα από τις Ένοπλες Δυνάμεις και τα Σώματα Ασφαλείας, τον Ακαδημαϊκό Τομέα και τα Ερευνητικά Κέντρα, το Δημόσιο και τον Ιδιωτικό Τομέα.

Ο Οργανισμός Ανοιχτών Τεχνολογιών – ΕΕΛΛΑΚ ως Εθνικό Σημείο Επαφής της Ευρωπαϊκής δράσης Scientix συμμετείχε στο συνέδριο http://www.stemalliance.eu/el/high-level-event-2019, που διοργανώθηκε στη Μάλτα από 21-22 Μαρτίου. Μεταξύ άλλων η ΕΕΛΛΑΚ παραβρέθηκε δια του εκπροσώπου της και στην συνάντηση ανταλλαγής απόψεων μεταξύ των Εκπροσώπων της Ομάδας Εργασίας STEM του European Schoolnet (ΜοΕ STEM WG), των εθνικών εκπροσώπων του έργου Scientix και των Συνεργατών της Βιομηχανίας που συμμετείχαν στην εκδήλωση STEM HIGH LEVEL EVENT 2019.

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

Στο πλαίσιο της εκδήλωσης βραβεύτηκαν και οι εκπαιδευτικοί που συμμετείχαν στο διαγωνισμό Diversity in STEM Competition, μεταξύ των οποίων ο πρεσβευτής του Scientix εκπαιδευτικός Νεκτάριος Φαρασσόπουλος από το 1ο Δημοτικό Σχολείο Ερμούπολης Σύρου, αλλά και η εκπαιδευτικός Ράνια Λάμπου.

Για περισσότερες πληροφορίες σχετικά με την εκδήλωση, το πρόγραμμα και τις παρουσιάσεις των ομιλητών επισκεφτείτε τον σχετικό ιστότοπο του STEM Alliance εδώ.

O Οργανισμός  Ανοιχτών Τεχνολογιών(ΕΕΛΛΑΚ) σε συνεργασία με το  Εργαστήριο Δικτύων ΙΠΤ- ΕΚΕΦΕ Δημόκριτος ενδιαφέρονται να προσλάβουν συνεργάτη για τη θέση: διαχειριστή συστημάτων(SysAdmin), πλήρους απασχόλησης.

Αρμοδιότητες:

  • Διαχείριση της πληροφοριακής υποδομής (Virtual & Physical Linux servers), συντήρηση βάσεων δεδομένων και δικτύου (switching, routing)
  • Αυτοματοποίηση εγκαταστάσεων ( services και setup των servers με χρήση Ansible)
  • Monitoring των servers και των υπηρεσιών
  • Συντήρηση και επικαιροποίηση τεκμηρίωσης(documentation) για όλες τις υπηρεσίες & των αντίστοιχων έργων στο https://github.com/eellak
  • Διαχείριση και ανάπτυξη εξειδικευμένων οδηγιών σε θέματα devops
  • Συνεργασία και υποστήριξη κοινοτήτων ανοιχτών τεχνολογιών στο πλαίσιο της δράσης OpenLabs
  • Συμμετοχή σε συναντήσεις κοινοτήτων ανοιχτών τεχνολογιών στην Ελλάδα και το εξωτερικό

Απαιτούμενα Προσόντα

  • Εμπειρία σε αντίστοιχη θέση
  • Debian GNU/Linux System Administration
  • Καλή γνώση Git( gitlab & github )
  • Εμπειρία σε Configuration Management Systems (κατά προτίμηση Ansible)
  • Apache, Nginx Web Server Administration
  • Postfix, Dovecot Mail Server Administration
  • MySQL, PostgreSQL Administration
  • Shell Scripting (Intermediate level)
  • WordPress Deployment & Administration
  • Mediawiki Deployment & Administration
  • Εμπειρία με τη διαχείριση WordPress Multisite installations
  • Moodle Deployment & Administration
  • Redmine Deployment & Administration
  • Python/Ruby/Php application Deployment & Administration (including virtual enviroments)
    • GUnicorn
    • Passenger
    • PhpFpm
  • Άριστη γνώση αγγλικής γλώσσας
  • Ικανότητα καλής προσωπικής επικοινωνίας

Επιθυμητά Προσόντα

  • Python/Ruby/Perl Programming
  • Εμπειρία με το Shibboleth federated SSO
  • LDAP Administration
  • Bacula backup service
  • Εμπειρία σε monitoring tools (Icinga, monit, munin)
  • ELK για διαχείριση των logs
  • PHP Programming (Junior-Intermediate level)
  • CKAN/DKAN Deployment & Administration

Απαιτείται καθημερινή 8ώρη φυσική παρουσία.  

Παρακαλούμε οι ενδιαφερόμενοι να στείλουν τα βιογραφικά τους στο hr AT eellak DΟΤ gr έως τις 15 Απριλίου 2019.  Τα βιογραφικά να ακολουθούν το πρότυπο europass: https://europass.cedefop.europa.eu/editors/el/cv/compose.