opera


Πως να φτιάξτε ένα απλό add-on για Firefox και Chrome

Πριν λίγο καιρό έφτιαξα ένα απλό add-on για Firefox και Chrome/Chromium ώστε να μπορεί να τσεκάρει κανείς από τον desktop browser του αν είναι ανοιχτό το hackerspace της Αθήνας. Παρακάτω θα γράψω επιγραμματικά πως το έφτιαξα. Φυσικά, ο κώδικας του add-on είναι διαθέσιμος κάτω από άδεια ελεύθερου λογισμικού.

Πρώτα πριν μπούμε στην διαδικασία να εξετάσουμε την ίδια την λειτουργικότητα του add-on.

Έχουμε ένα φυσικό χώρο, το hackerspace της Αθήνας (yeaheee!). Αυτός ο χώρος ουσιαστικά ανοίγει όποτε έχουμε κάποιο event ή είναι κάποιος από τους διαχειριστές του εκεί. Πως θα μπορούσαμε να γνωρίζουμε πότε είναι ανοιχτός εκτός event;

 

To hackerspace στην αρχική του σελίδα στο web έχει ένα “counter” που δείχνει αν και κατά πόσο ο χώρος αυτός είχε ανοίξει για επισκέπτες. Πως όμως το κάνει αυτό;  Το hackerspace όπως τα περισσότερα hackerspace του κόσμου ακολουθεί ένα πρωτόκολλο που λέγεται SpaceAPI αυτό μας δίνει τις απαραίτητες πληροφορίες για το αν είναι ανοιχτό. Το SpaceAPI είναι ένα output τύπου JSON (Javascript Object Notation), ένα από τα ωραία χαρακτηριστικά του είναι ότι είναι εύκολο για τους ανθρώπους να το διαβάσουν και εύκολο για τις μηχανές να το παράγουν και να το καταλάβουν.

Ωραία αν πάμε λοιπόν στο SpaceAPI του hackerspace θα δούμε κάτι σαν αυτό.

    "state": {
        "open": false,
        "lastchange": 1483908306,
	"message": "0 hacker(s) in space"
    },

Από εκεί έχουμε τις ακόλουθες πληροφορίες σύμφωνα με το documentation του SpaceAPI, πρώτον αν είναι όντως ανοιχτό το hackerspace και δεύτερον ένα μήνυμα που στην περίπτωση του hackerspace της Αθήνας μας λέει πόσα άτομα είναι μέσα. Πολύ ωραία… φαίνεται λοιπόν ότι μπορούμε να έχουμε αρκετές πληροφορίες για να φτιάξουμε το add-on μας σχετικά εύκολα. Για να δούμε όμως πως θα το κάνουμε.

Ο αρχικός μου σκοπός ήταν να δημιουργήσω ένα add-on για τον Firefox καθώς εδώ και αρκετά χρόνια είναι ο browser που προτιμώ. Μια εξαιρετική πηγή πληροφορίας για τις web τεχνολογίες είναι το Mozilla Developer Network ή MDN το οποίο έχει ένα σωρό πληροφορίες. Σύμφωνα με το σχετικό άρθρο, στον Firefox έχουμε διάφορα εργαλεία και τρόπους για να φτιάξουμε ένα add-on.

Στην περίπτωση μας ποιο είναι το βέλτιστο εργαλείο για την δημιουργία ενός add-on; Διαβάζοντας στην συνέχεια διαπιστώνουμε ότι από το τέλος του 2017 και μετά τα WebExtensions θα είναι το στάνταρ εργαλείο για την δημιουργία add-on, επίσης ένα από τα θετικά τους είναι ότι είναι φτιαγμένα για να δουλεύουν με το ίδιο πρακτικά κώδικα στους περισσότερους σύγχρονους browser όπως o FIrefox, ο Chrome, ο Edge και ο Opera.

Πρακτικό ακούγεται για να δούμε πόσο εύκολο είναι. Ουσιαστικά πρόκειται για μια συλλογή από αρχεία που περιγράφονται από ένα manifest.json και αυτά ουσιαστικά μπορεί να είναι html ή js που κάνουν χρήση κάποιον API του browser. Από ότι φαίνεται, έχουμε και τα απαραίτητα εργαλεία για να φτιάξουμε το αρχείο μας και να το δοκιμάσουμε. Ένα text-editor και ένα browser. Καλό είναι να τα έχουμε όλα μαζεμένα σε ένα directory ξεχωριστό στο οποίο θα τα δουλέψουμε.

Για να τα βάλουμε σε μια σειρά, θέλουμε να φτιάξουμε ένα add-on που θα έχει ένα εικονίδιο, στο background θα τρέχει ένα loop ελέγχου που θα τσεκάρει το JSON του hackerspace και θα μας λέει αν είναι ανοιχτό, και μιας και οι φανταστικοί sys-admin του hackerspace μας λένε πόσο κόσμο έχει μέσα θα δείχνουμε και αυτό, επίσης θα προσθέσουμε λειτουργικότητα ώστε όταν κάνουμε κλικ πάνω στο εικονίδιο να μας δείχνει το κεντρικό site του hackerspace.

Διαβάζοντας λοιπόν το εκτενές documentation που έχουμε θα πρέπει το manifest.json μας να μοιάζει κάπως έτσι.

{
    "description": "Adds a browser icon that shows if hackerspace.gr is open, it displays a counter of people inside.",
    "manifest_version": 2,
    "name": "hsgr-status-checker",
    "version": "0.1.6",
    "homepage_url": "https://hackerspace.gr",
    "icons": {
        "32": "icons/hsgr-32.png"
    },
    "applications": {
        "gecko": {
            "id": "elkos@hackerspace.gr",
            "strict_min_version": "45.0"
        }
    },
    "background": {
        "scripts": ["jquery.js", "background.js"]
    },
    "browser_action": {
        "default_icon": "icons/hsgr-32.png",
        "default_title": "hsgr status",
        "default_popup": "popups/popup.html"
    }
}

Δηλαδή περιγράφουμε το add-on στο “description”, η έκδοση του manifest (υπάρχουν και παλαιότερες στο Chrome), το όνομα του add-on στο “name”, η ιστοσελίδα του στο “homepage_url” (έβαλα το αρχικό website), ένα εικονίδιο για το UI (μπορείτε να βάλτε περισσότερα αν θέλετε), το “applications” ορίζει σε πια έκδοση του gecko (της μηχανής του Firefox θα παίζει έβαλα πάνω από 45 για να μην έχουμε θέμα με παλαιότερες εκδώσεις που δεν υποστηρίζουν όλα τα API), και δύο αρχεία στο “background” το ένα είναι η βιβλιοθήκη jquery.js για να μπορώ να δουλέψω άνετα με το JSON API, και το background.js που θα είναι ο κώδικας που τρέχει στο background. Επίσης λέω ότι θέλω να βάλω ένα εικονίδιο στο browser που θα το βρούμε εκεί, και θα έχει αυτό το τίτλο και όταν πατάς το εικονίδιο βγάζει ένα popup που το βρίσκει στο /popups/popup.html αρχείο.

Τί θα βάλω όμως στο background.js μου;  Πρώτα θα ορίσω το doorAPI που θα το βρώ;

var doorURL = 'https://www.hackerspace.gr/spaceapi';

Ωραία, τώρα θα φτιάξουμε ένα function που θα τσεκάρει η jquery με ένα απλό GET το σημείο που είναι το SpaceAPI.

function checker() {
    $.ajax({
         type: 'GET',
         url: doorURL,
         dataType: 'json',

Στην περίπτωση που αυτό δουλεύει λοιπόν τσεκάρουμε αν το hackerspace είναι ανοιχτό:

success: function(data) {
    if (data.state.open) {

Τώρα λοιπόν θα αλλάξουμε τον τίτλο του εικονιδίου ώστε να δείχνει ότι είναι ανοιχτό και πόσο κόσμο έχει μέσα, μετά αλλάζουμε το εικονίδιο (το αντικαθιστούμε με ένα πράσινο) και προσθέτουμε και ένα badge που τον αριθμό των hacker που μας δίνεται από το “state.message”. Ο αριθμός προκύπτει ουσιαστικά χρησιμοποιώντας regular expressions ώστε να μας βγάζει μόνο τα νούμερα το output, με αποτέλεσμα να έχουμε κάτι που μοιάζει με αυτό. Επίσης ορίζω το χρώμα του background του badge ως #808080 ή γκρι σκούρο για να μην βγάζει μάτι.

                 chrome.browserAction.setTitle({title: 'HSGR is open with ' + (data.state.message).replace(/\D/g, '') + ' hackers'});
                 chrome.browserAction.setIcon({path: 'icons/openhsgr-32.png'});
                 chrome.browserAction.setBadgeText({text: (data.state.message).replace(/\D/g, '')});
chrome.browserAction.setBadgeBackgroundColor({color: '#808080'});

Στην περίπτωση που το hackerspace δεν είναι ανοιχτό τότε θα αλλάξουμε το τίτλο, θα αλλάξουμε το icon στο μαύρο, και δεν θα έχουμε badge κείμενο.

             } else {
                 chrome.browserAction.setTitle({title: 'HSGR is closed'});
                 chrome.browserAction.setIcon({path: 'icons/hsgr-32.png'});
                 chrome.browserAction.setBadgeText({text: ''});

Αν τώρα το αφήσουμε έτσι θα παίξει μια φορά και αυτό ήταν, εγώ θέλω να λειτουργεί σχετικά τακτικά. Θα βάλουμε λοιπόν ένα interval για να παίζει μια φορά κάθε 15 λεπτά.

checker();
setInterval(checker, 15 * 60 * 1000);

Ωραία με το background θα πρέπει να είμαστε OK. Όσο αφορά το popup τώρα, είπα να ακολουθήσω την πλέον εύκολη και άσχημη λύση του iframe.

<html>
<head>
  <style type="text/css">
	  body {width:500px; height:500px;}
  </style>
</head>
<body>
  <iframe src="https://www.hackerspace.gr" width="100%" height="100%" frameborder="0"></iframe>
</body>
</html>

Μέχρι εδώ καλά, πως θα το δοκιμάσω όμως; Πάμε στο about:debugging του Firefox πατάμε εκεί που λέει “Load Temporary Add-on” και ανοίγουμε οποιοδήποτε αρχείο μέσα στο directory του add-on που φτιάξαμε πχ το manifest.json. Φαίνεται να δουλεύει.

Τώρα, πως το δίνουμε στο κόσμο; Πρώτα πρέπει να ετοιμάσουμε το αρχείο μας. Δημιουργούμε ένα αρχείο .zip. Στο Linux σε γραμμή εντολών αυτό το κάνουμε ως εξής:

Πρώτα “πάμε” στο κατάλογο που έχουμε τα αρχεία του add-on μας όπου φυσικά path/to/my-addon/ το directory με τα διάφορα αρχεία του προγράμματος.

cd path/to/my-addon/

Και μετά δίνουμε την εντολή

zip -r ../my-addon.zip *

Θα δημιουργηθεί ένα νέο αρχείο zip το my-addon.zip.

Για το add-on gallery του Mozilla πάμε στο addons.mozilla.org και ανεβάζουμε το αρχείο μας, αφού γίνει ένα βασικό check από διάφορα scripts ελέγχου τότε ανεβαίνει για review. Αυτό ουσιαστικά σημαίνει ότι ο κώδικας μας τσεκάρεται από κάποιο εθελοντή του Mozilla, επιβεβαιώνεται η ορθή λειτουργία του και συνιστούνται καλές πρακτικές, στο σημείο αυτό ελέγχεται και η πιθανή παρουσία κακόβουλου κώδικα. Αυτό στην περίπτωση μου σήμαινε 3-4 μέρες αναμονής.

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

Θα μου πείτε, και τί έγινε; Στην περίπτωση του Chrome ανεβαίνει ποιο γρήγορα χωρίς γραφειοκρατεία. Σωστά; Όχι ακριβώς. Μπορεί ένας “κακόβουλος” developer να βάλει κώδικα που ελέγχει η παρουσία του χρήστη online ή ακόμη και να εκμεταλλευτεί πολλές από τις δυνατότητες του browser.

Θεωρώ, ότι ως πρακτική η επιλογή του Mozilla να ελέγχει το κώδικα που τρέχουν τα add-on αν και πιο χρονοβόρα είναι τουλάχιστον για εμάς τους χρήστες η πλέον ορθή πρακτική.

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


vrms τα αποτελέσματα του εικονικού μου Richard Stallman 4

To vrms είναι ένα   πρόγραμμα που ελέγχει τα εγκατεστημένα πακέτα σας και εντοπίζει όσα δεν είναι ελεύθερο λογισμικό σύμφωνα με τον ορισμό που δίνει το Free Software Foundation. Εδώ και λίγες μέρες πολλοί άνθρωποι που ασχολούνται με το ελεύθερο λογισμικό έχουν προχωρήσει  στη δημοσιοποίηση των δικό τους vrms αποτελεσμάτων. Χαρακτηριστικά παραδείγματα οι:

το output του vrms στον δικό μου υπολογιστή ήταν:

Non-free packages installed on longbow

firmware-linux            Binary firmware for various drivers in the Linux kerne
googleearth               Google Earth, a 3D map/planet viewer
grokking-the-gimp         GIMP tutorial book by Carey Bunks (HTML)
opera                     The Opera Web Browser
p7zip-rar                 non-free rar module for p7zip
skype                     Skype – Take a deep breath
sun-java6-bin             Sun Java(TM) Runtime Environment (JRE) 6 (architecture
sun-java6-jre             Sun Java(TM) Runtime Environment (JRE) 6 (architecture
sun-java6-plugin          The Java(TM) Plug-in, Java SE 6
unrar                     Unarchiver for .rar files (non-free version)
warsow-data               Game data for Warsow
xmame-common              Multiple Arcade Machine Emulator
xmame-sdl                 SDL binaries for the Multiple Arcade Machine Emulator

Contrib packages installed on longbow

flashplugin-nonfree       Adobe Flash Player – browser plugin
freemind                  A Java Program for creating and viewing Mindmaps
googleearth-package       utility to automatically build a Debian package of Goo
openttd                   reimplementation of Transport Tycoon Deluxe with enhan
playonlinux               front-end for Wine
ttf-mscorefonts-installer Installer for Microsoft TrueType core fonts
warsow                    fast paced 3D first person shooter

13 non-free packages, 0.5% of 2476 installed packages.
7 contrib packages, 0.3% of 2476 installed packages.

Μεταξύ άλλων θέλω να τονίσω ότι έχω εγκατεστημένους τους οδηγούς της nvidia όχι ως πακέτο .deb αλλά ως binary εγκατεστημένο χειροκίνητα όποτε δυστηχώς ο υπολογιστής μου είναι περισσότερο από 0.5% non-free.


Πρόταση για Ηλεκτρονικά Αρχεία Υγείας Ανοιχτού Κώδικα στην Αμερικανική Γερουσία

Capitol at SunsetΠριν από καιρό όταν ο Πρόεδρος Ομπάμα αναλάμβανε να κυβερνήσει τις ΗΠΑ αναρωτιώμουν εάν και κατά πόσο αυτό θα επηρεάζε την πορεία του ελεύθερου λογισμικού σε αυτή την χώρα άλλα και παγκοσμίος. Ανάλογες ανησυχίες είχαν και αρκετά στελέχη Αμερικανικών εταιριών που ασχολούνται με το Ελεύθερο Λογισμικό και έφτασαν μάλιστα να αποστείλουν ανοιχτή επιστολή στον πρόεδρο Ομπάμα. Τελικά η νέα κυβέρνηση έβαλε στην ατζέντα του “Recovery and Reinvestment Tax Act of 2009” και την δημιουργία παναμερικανών βάσεων δεδομένων για την τήρηση αρχείων υγεία ανοιχτού κώδικα από τα νοσοκομεία των Βετεράνων και άλλους κρατικούς οργανισμούς. Στις 23 Απριλίου ο Γερουσιαστής Jay Rockefeller που τυχαίνει να είναι και πρόεδρος Finance Subcommittee on Health Care της Γερουσίας  πρότεινε μια νέα νομοθεσία με τίτλο “Health Information Technology Public Utility Act of 2009”, κατά την κατάθεση του νομοσχεδίου ο Γερουσιαστής είπε τα εξής:

“We need advancements in health information technology across the board to improve the quality of care Americans receive .To make this happen, we need universal access to affordable and interoperable health information technology – from small, rural health clinics to large, urban hospitals.Open source software is a cost-effective, proven way to advance health information technology – particularly among small, rural providers. This legislation does not replace commercial software; instead, it complements the private industry in this field – by making health information technology a realistic option for all providers.”
Δεν λέω εντυπωσιακό ειδικά όταν ακούγεται από το στόμα ενός αμερικάνου Γερουσιαστή ας ελπίσουμε ότι είναι ένα βήμα προς την σωστή κατεύθυνση αλλά δεν είναι (κατά την γνώμη μου) αρκετό για να σημαδοτήσει μια καθοριστική αλλαγή πορείας προς το Ελεύθερο Λογισμικό.

αναγνώστες RSS για τον Firefox 3

Μια από τις αγαπημένες μου τεχνολογίες είναι οι ροές RSS, προσωπικά χρησιμοποιώ ένα μίγμα online υπηρεσιών και readers που παλεύω να συγχρονίσω αλλά αυτό είναι το θέμα μελλοντικού άρθρου. Ένας αναγνώστης του blog χρησιμοποιήσε την φόρμα επικοινωνίας και μου έκανε μια αρκετά καλή ερώτηση. Αν υπάρχει κάτι αντίστοιχο του αναγνώστη RSS του Opera στον Firefox. Που είναι ναι μεν αρκετά ελαφρής και αποδοτικός αλλά ιδιαίτερα εύχρηστος από την άλλη.

Να πώ την πάσα αλήθεια η γνώμη μου για την Opera είναι πολύ καλή. Πιστεύω ότι τα προϊόντα της είναι ότι καλύτερο μπορούμε να δούμε σε αυτή την κατηγορία λογισμικού από μια εταιρεία που παράγει κλειστό κώδικα. Σίγουρα τα Live bookmarks αποτελούν μια ενδιαφέρουσα καινωτομία αλλά δεν νομίζω ότι είναι σε θέση να αντικαταστήσουν πλήρως ένα σύγχρονο αναγνώστη RSS.

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

Όσοι θέλουν ένα απλό βασικό αναγνώστη που θα κάνει την δουλειά απλά και ωραία τότε δοκιμάστε το Simple RSS Reader. Παρά την απλοποιημένη εικόνα το αποτέλεσμα είναι αρκετά καλό και εύκολο στην χρήση και την εκμάθηση, και αν και στερήται πολλών μοντέρνων καλουδιών μπορεί άνετα να χαρακτηριστεί ένας πλήρης αναγνώστης RSS που θα ικανοποιήσει τις ανάγκες σας χωρίς ιδιαίτερη δυσκολία.

Φυσικά όπως είπα πριν οι επιλογές σας πραγματικά είναι πάρα πολλές έτσι πρέπει να εξετάστε την πιθανότητα να καλύπτει τις ανάγκες σας το RSS Ticker Ουσιαστικά το RSS Ticker έλεγχει τα Live Bookmarks του Firefox και τα παρουσιάζει σαν κείμενο που κινείται ενώ εσείς σερφάρετε στο www. Να πω την πάσα αλήθεια η λογική του δεν με ενθουσιάζει καθώς δε θα μπορούσα ποτέ να συγκεντρωθώ για να γράψω 2-3 αράδες. (θα μου πείτε: Μα ρε Λευτέρη ούτε τώρα συγκεντρώνεσαι… δεν έχετε άδικο φυσικά).

‘Ενα από τα αγαπημένα μου extension για ανάγνωση RSS είναι το Wizz News Reader και το αδελφάκι του Wizz News Reader Lite (που ουσιαστικά είναι μια περισσότερο απλοποιημένη έκδοση). Σαφώς πρέπει να πω ότι το Wizz News Reader είναι ένα από τα πιο φορτωμένα όσο αφορά της λειτουργείες του πρόσθετα ανάγνωσης RSS για τον Firefox που εξελίσσωνται αυτή την στιγμή.

Αντίπαλο δέος του Wizz News Reader είναι το Sage. Το Sage είναι έπισης ένας αξιόλογος αναγνώστης RSS αν και συγκριτικά με το Wizz είναι περισσότερο λιτός ωστόσο αποτελεί μια αξιόλογη εναλλακτική. Πρέπει να επισημανθεί ότι το Sage είναι ένας από τους παλαιότερους και δημοφηλέστερους RSS read.


Evoke Flow: ραδιόφωνο με Linux 1

Βασικά πρόκειται για ένα ραδιόφωνο FM-DAB και internet radio. Το εν λόγω σύστημα έχει ενσωματωμένο wifi. Η εταιρεία που το φτίαχνει η Pure είναι πάραρτημα της Imagination Technologies. Σε δελτίο τύπου τις οποίας αναφέρωνται τα εξής:

EVOKE Flow is powered by Imagination’s innovative hardware multi-threaded META processor and UCC (Universal Communications Core) technologies, which give the product advanced real-time signal processing and 32-bit application execution resources,  as well as unique multi-standard high performance communications capabilities. EVOKE Flow is also one of the first radio products in the market to use the Linux operating system. This advanced design architecture enables the product’s software capabilities to be taken to a new level, reflecting PURE’s relentless innovation in digital radio which is unmatched in the industry.

Που με αφήσε με κάποιες απορίες όπως, όταν λέτε Linux ποιά έκδοση του πυρήνα, μπορούμε να κάνουμε αλλαγές στο λογισικό του και αν ναι τί είδους αλλαγές; Η ιστοσελίδα που θα αποτελεί και το portal αυτή της συσκεύης σε άλλες υπηρεσίες όπως Shoutcast και Podcast δεν λειτουργεί ακόμη αλλά μπορείτε να την βρείτε στο TheLounge.com (αν και δεν γνωρίζω αν θα έχει το αγαπημένο μου podcast το Greek Linux Radio).  Ωραία όλα αυτά αλλά θα προτιμούσα κάτι λίγο περισσότερο ανοιχτό. Ελπίζω το μέλλον να φέρει μπόλικες τέτοιες συσκεύες.

Επίσης παρακάτω μπορείτε να δείτε το review του James Cridland.

(more…)