Mar 13, 2012

Διαβάζοντας Oracle documentation σε Android tablet

Η Oracle εδώ και λίγο καιρό προσφέρει το online documentation των προϊόντων της (πχ του Oracle Database Server και του Oracle Fusion Middleware-->http://otn.oracle.com/documentation) και σε εκδόσεις συμβατές με φορητές (mobile) συσκευές. Έχοντας πρόσφατα αποκτήσει ένα Android tablet, ήθελα να εξετάσω πόσο τελικά εύκολο είναι να διαβάζει κανείς την τεκμηρίωση της Oracle σε τέτοιου είδους μηχανήματα.

Το πιο γνωστό και καθιερωμένο format είναι φυσικά το PDF. Υπάρχουν διάφοροι αναγνώστες PDF στο Android, αλλά ένας ειδικά που με βόλεψε είναι το ezPDF που προσφέρει την δυνατότητα καταγραφής σχολίων (commenting/annotations) στο έγγραφο καθώς και τη δυνατότητα text reflow ώστε να προσαρμόζεται μια σελίδα κειμένου πλήρως στις διαστάσεις της οθόνης, γεγονός που κάνει πιο πυκνό και ξεκούραστο κατά τη γνώμη μου το διάβασμα.

Η δεύτερη επιλογή έχει να κάνει με το Μobi format, που χρησιμοποιείται από το Amazon Kindle. Ίσως για έγγραφα λογοτεχνίας η μορφοποίηση να είναι ξεκούραστη, αλλά για ένα τεχνικό κείμενο γεμάτο διαγράμματα, δεν μου άρεσε η αραιά παράθεση στοιχείων σε μια σελίδα.

Τέλος, το epub format, που διαβάζεται από τους e-book readers, προσφέρει μια όμορφη εμπειρία ανάγνωσης του documentation.


Mar 10, 2012

Ανάκτηση από σβήσιμο σελιδοδείκτη (bookmark) στον Firefox

Αν κατά λάθος διαγράψουμε ένα σελιδοδείκτη στο Firefox, μπορούμε εύκολα να τον ανακτήσουμε από την επιλογή Import και Backup. O Firefox τηρεί αυτόματα καθημερινά backup σε βάθος 10 ημερών.

Feb 27, 2012

Σελιδοδείκτες (bookmarks) σε έγγραφα PDF

Το τελευταίο χρονικό διάστημα χρειάστηκε να μελετήσω σε βάθος το κείμενο ενός διαγωνισμού που είχε δημοσιευτεί σε μορφή PDF. Πολύ χρήσιμος βοηθός ώστε να κρατώ σελιδοδείκτες στο έγγραφο αποδείχτηκε το JPdfBookmarks (http://flavianopetrocchi.blogspot.com/) Πρόκειται για μια δωρεάν Java εφαρμογή, διαθέσιμη στο Linux, τα Windows και το Mac, που μας επιτρέπει να εμφανίσουμε το αρχείο μας, διαδραστικά να του προσθέσουμε σελιδοδείκτες, και τελικά να το αποθηκεύσουμε. Οι σελιδοδείκτες που κατασκευάζουμε, είναι ορατοί από οποιοδήποτε άλλο πρόγραμμα ανάγνωσης pdf (πχ Acrobat Reader)

Feb 23, 2012

Web interface για SQL queries στην Oracle

Μια ειδική απαίτηση που προέκυψε σε ένα έργο, είχε να κάνει με πρόσβαση σε μια βάση δεδομένων της Oracle, ώστε αναλυτές να μπορούν να μπορούν να καταθέτουν SQL ερωτήματα σε ένα συγκεκριμένο σχήμα. Ένας επιπλέον περιορισμός είχε να κάνει με τα χαρακτηριστικά των σχετικών δικτύων που δεν επέτρεπαν την πρόσβαση στο listener port της Oracle (πχ 1521) ούτε σε binary data, οπότε η κίνηση θα έπρεπε να είναι η απλούστερη δυνατή, η HTTP. Ενώ μέχρι τη 10g η Oracle προσέφερε το περιβάλλον της iSQL*Plus για κατάθεση ερωτημάτων μέσω web, αυτή η δυνατότητα δεν υποστηρίζεται πλέον στην 11g. Μια καλή λύση αποτελεί η καταχρηστική χρησιμοποίηση του περιβάλλοντος του Application Express (Apex) που διαθέτει μια φιλική web διεπαφή για τη δημιουργία ερωτημάτων, ανάμεσα στις πολλές άλλες δυνατότητες που διαθέτει.

Στην 11g, μια τυποποιημένη εγκατάσταση περιλαμβάνει την Apex αλλά δεν ενεργοποιεί κάποιον web listener (πχ στο port 8080). Αν και βασικά έχουμε και την επιλογή της χρησιμοποίησης του Apache, κάτι πιο άμεσο είναι η αξιοποίηση του listener της Apex όπως περιγράφεται εδώ. Έπειτα από αυτή τη διαδικασία, μπορούμε να συνδεθούμε στην αρχική σελίδα της Apex και ως διαχειριστές να φτιάξουμε ένα νέο workspace, με βάση ένα υπάρχον σχήμα (το application data σχήμα μας) Αν υπάρχει ένα σοβαρό θέμα ασφάλειας, τότε μπορούμε να αφήσουμε την Apex να φτιάξει ένα νέο database schema, στο οποίο θα φροντίσουμε να δώσουμε τα κατάλληλα grants (ή και να φτιάξουμε και ανάλογα read-only database views ώστε να επωφεληθούμε από την εμφάνιση της δομής των αντικειμένων στον object browser)

H κατασκευή αυτή, πρόκειται να αντιγράψει και το δοκιμαστικό σχήμα της Apex, οπότε σημειώνουμε να διαγράψουμε όλα τα νέα αντικείμενα όπως τους πίνακες DEMO*, DEPT, EMP, σχετιζόμενα sequences και functions, καθώς και το application workspace.

Ως διαχειριστές, δημιουργούμε ένα λογαριασμό χρήστη προκειμένου να συνδεθεί στο σύστημα με την ιδιότητα του developer στο Apex workspace που μόλις φτιάξαμε. Αυτό είναι! Από το μενού της αρχικής οθόνης, υπάρχει η επιλογή SQL Workshop που μας επιτρέπει να εκτελέσουμε τα SQL ερωτήματά μας ή να δούμε τι δομή της βάσης, σε ένα web περιβάλλον.

Jan 30, 2012

Ένα νέο βιβλίο για την αρχιτεκτονική SOA: Do more with SOA Integration - Best of Packt

Ένα νέο βιβλίο που έτυχε της προσοχής μου είναι o πρόσφατος τίτλος της Packt Publishing που αφορά το SOA: Do more with SOA Integration - Best of Packt.

Εν συντομία, συνιστά ένα απάνθισμα από διάφορα βιβλία της Packt που αφορούν την περιοχή του SOA. Το βιβλίο καλύπτει:
  • βασικά patterns του integration καθώς και SOA best practices
  • μια καλή εισαγωγή στην XML και στα Web Services καθώς και στα σχετικά πρότυπα προσφέροντας πραγματικά παραδείγματα
  • βασικές τεχνολογίες και πρότυπα όπως το JBI (Java Business Integration), το SCA (Service Component Architecture), το ESB (Enterprise Service Bus και ειδικά το Oracle ESB), το BPEL (Business Process Execution Language και ειδικά το Oracle BPEL) και BPM (Business Process Monitoring και ειδικά το Oracle BPEL) αφιερώνοντας ένα ξεχωριστό κεφάλαιο σε κάθε ένα από αυτά, επιλύοντας ένα enterprise case-study

Πρόκειται για ένα βιβλίο που δεν καλύπτει αποκλειστικά τεχνολογίες της Oracle (δηλαδή του Oracle SOA Suite) αλλά επεκτείνεται και σε εναλλακτικές προτάσεις όπως το JBI σε σχέση με το NetBeans. Εν ολίγοις, πρόκειται για ένα πολύ καλό τίτλο, απευθυνόμενο σε architects και SOA developers ώστε να αποκτήσουν τη βασική γνώση και τις βάσεις για μια μεθοδολογία για ένα SOA project. Για περισσότερες όμως πληροφορίες σχετικά με τα προϊόντα που θα χρησιμοποιήσουν υπάρχουν βέβαια πιο εξειδικευμένα βιβλία (πχ εδώ)

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

Jan 20, 2012

To Oracle XML DB repository (μέρος 4ο)

Στο τελευταίο άρθρο (http://serafeimk.blogspot.com/2012/01/to-oracle-xml-db-repository-3.html) είδαμε πως μπορούμε να διαχειριστούμε προγραμματιστικά στοιχεία του XML DB repository, τη στιγμή που συμβαίνουν διάφορα συμβάντα, όπως εισαγωγή, μεταβολή ή ανανέωση περιεχομένου. Φυσικά είναι δυνατόν να έχουμε ανά πάσα στιγμή να αντλήσουμε πληροφορία από το repository: σύμμαχος μας είναι το PL/SQL package DBMS_XDB. Μερικές από τις συναρτήσεις που παρουσιάζουν ενδιαφέρον είναι οι:


CFG_GET: που επιστρέφει σε μορφή XML τις λεπτομέρειες διαμόρφωσης του XML repository
CHANGEOWNER: μεταβάλλει τον ιδιοκτήτη ενός πόρου (αρχείου ή καταλόγου)
CREATEFOLDER: δημιουργεί έναν νέο κατάλογο
CREATERESOURCE: δημιουργεί ένα νέο αρχείο με παράμετρο τα περιεχόμενά του σε μορφή VARCHAR2, XMLTYPE, BFILE ή BLOB
GETCONTENTBLOB: επιστρέφει τα περιεχόμενα ενός αρχείου του repository σε μορφή BLOB
GETCONTENTCLOB: επιστρέφει τα περιεχόμενα ενός αρχείου του repository σε μορφή CLOB
GETCONTENTXMLTYPE: επιστρέφει τα περιεχόμενα ενός αρχείου του repository σε μορφή SYS.XMLTYPE
ISFOLDER: υποδεικνύει αν το όρισμα της διαδρομής είναι κατάλογος ή όχι
LINK: δημιουργεί weak ή hard link σε ένα άλλο resource
SETACL: ορίζει τα δικαιώματα πρόσβασης σε ένα resource


Συμπληρωματικά, για τις λειτουργίες versioning (version, check-in, check-out, κλπ) υπάρχει το ειδικό πακέτο DBMS_XDB_VERSION.


Πολλές από τις υπηρεσίες αυτών των πακέτων περιμένουν ως όρισμα τη διαδρομή του αρχείου ή του φακέλου που μας ενδιαφέρει.Γι αυτό το λόγο, μπορούμε να χρησιμοποιήσουμε το database view RESOURCE_VIEW και τις κατάλληλες συναρτήσεις ώστε να προσδιορίζουμε τα περιεχόμενα ενός καταλόγου ή την πλήρη διαδρομή ενός αρχείου. Για παράδειγμα η εντολή:

SELECT any_path as full_path, path(1) as relative_path FROM RESOURCE_VIEW WHERE under_path(RES, '/', 1) = 1;

μας επιστρέφει όλα τα περιεχόμενα του πατρικού (root) καταλόγου του repository.

Κάτι που επίσης πρέπει να γνωρίζουμε είναι το που βρίσκονται τα έγγραφά μας αποθηκευμένα. Έπειτα από μια τυπική εγκατάσταση, έχει δημιουργηθεί (και είναι locked) το σχήμα XDB που διαχειρίζεται όλο το XML DB repository. Το tablespace που βρίσκεται αυτό το σχήμα είναι το SYSAUX. Αν αυτό δεν μας ικανοποιεί, τότε μπορούμε να χρησιμοποιήσουμε την κλήση dbms_xdb_admin.moveXDB_Tablespace ώστε να το μεταφέρουμε σε ένα άλλο tablespace της επιλογής μας (η εντολή αφορά την έκδοση 11.2.0.3) ή με την DBMS_XDB.MOVEXDB_TABLESPACE για την 11.2.0.1. Εναλλακτικά, μπορούμε να φτιάξουμε μια βάση χωρίς την επιλογή της XML DB που θα την προσθέσουμε αργότερα (http://docs.oracle.com/cd/B28359_01/appdev.111/b28369/appaman.htm#i638485) Τέλος, ένα άλλο ειδικό χαρακτηριστικό της XML DB έχει να κάνει με το backup: με ένα λογικό export (expdp) δεν τηρείται η δομή των καταλόγων που έχουμε φτιάξει. Θα χρειαστούμε ένα RMAN backup ώστε να μεταφέρουμε επιτυχώς ένα XML DB repository.

Jan 17, 2012

To Oracle XML DB repository (μέρος 3ο)

Στα προηγούμενα δυο άρθρα δημιουργήσαμε δυο χρήστες, με σαφώς καθορισμένα δικαιώματα, που πρόκειται να προσθέτουν περιεχόμενο σε έναν δεδομένο κατάλογο. Η δημιουργία περιεχομένου είναι κάτι που μας ενδιαφέρει πολύ, καθώς μπορεί να εκκινεί διαδικασίες περαιτέρω επεξεργασίας των άρτι αφιχθέντων εγγράφων. Το XML DB παρέχει τη δυνατότητα διαχείρισης των γεγονότων (events) που συμβαίνουν στο repository, όπως η δημιουργία, η μεταβολή ή η διαγραφή στοιχείων (περισσότερες πληροφορίες εδώ) Δεν έχουμε παρά να γράψουμε ένα PL/SQL package που θα διαχειρίζεται τα συμβάντα του ενδιαφέροντος μας. Για παράδειγμα το specification ενός τέτοιου PL/SQL package, που θα ανήκει στον υπερδιαχειριστή του XML DB (λογαριασμός xmlrepos1 που δημιουργήσαμε νωρίτερα):

create or replace package xml_event_pkg as
/**
* Handle the event of adding new content into the repository.
*/
PROCEDURE handlePostLinkTo (eventObject DBMS_XEVENT.XDBRepositoryEvent);
/**
* Handle the event of updating content on the repository.
*/
PROCEDURE handlePreUpdate (eventObject DBMS_XEVENT.XDBRepositoryEvent);
/**
* Handle the event of removing content from the repository.
*/
PROCEDURE handlePreDelete (eventObject DBMS_XEVENT.XDBRepositoryEvent);
end xml_event_pkg;

με μια ενδεικτική υλοποίηση:

PROCEDURE handlePostLinkTo (eventObject DBMS_XEVENT.XDBRepositoryEvent) as
XDBPathobj DBMS_XEVENT.XDBPath;
ResPath VARCHAR2(1000);
XDBResourceObj DBMS_XDBRESOURCE.XDBResource;
ResDisplayName VARCHAR2(100);
BEGIN
XDBResourceObj := DBMS_XEVENT.getResource(eventObject);
XDBPathobj := DBMS_XEVENT.getPath(eventObject);
ResDisplayName := DBMS_XDBRESOURCE.getDisplayName(XDBResourceObj);
ResPath := DBMS_XEVENT.getName(XDBPathObj);
...
το πακέτο DBMS_XDB παρέχει διάφορες συναρτήσεις και διαδικασίες που μπορούμε να αξιοποιήσουμε για το περιεχόμενο μας, να το λάβουμε σε μορφή BLOB, CLOB, XML, να διαβάσουμε metadata του, κτλ. Προκειμένου να ενεργοποιήσουμε σε έναν δεδομένο κατάλογο τον event listener που μόλις φτιάξαμε, κατασκευάζουμε ένα XML έγγραφο παραμετροποίησης και εκτελούμε τον εξής κώδικα:

DECLARE
b BOOLEAN := FALSE;
BEGIN
b:= DBMS_XDB.createFolder('/public/resconfig');
COMMIT;

b := DBMS_XDB.createResource(
'/public/resconfig/appfilelistener-uploadFolder.xml',
'<ResConfig xmlns="http://xmlns.oracle.com/xdb/XDBResConfig.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/XDBResConfig.xsd
http://xmlns.oracle.com/xdb/XDBResConfig.xsd">
<event-listeners set-invoker="false">
<listener>
<description>File listener</description>
<schema>XMLREPOS1</schema>
<source>XML_EVENT_USER_EVT_PKG</source>
<language>PL/SQL</language>
<events>
<Post-LinkTo/>
<Pre-Update/>
<Pre-Delete />
</events>
</listener>
</event-listeners>
<defaultChildConfig>
<configuration>
<path>/public/resconfig/appfilelistener-uploadFolder.xml</path>
</configuration>
</defaultChildConfig>
</ResConfig>',
'http://xmlns.oracle.com/xdb/XDBResConfig.xsd',
'ResConfig');
DBMS_RESCONFIG.appendResConfig('/uploadFolder',
'/public/resconfig/appfilelistener-uploadFolder.xml',
DBMS_RESCONFIG.APPEND_RECURSIVE);
commit;
END;

Έχουμε σχεδόν τελειώσει με την παραμετροποίηση του DB repository μας. Ας ανοίξουμε τα κανάλια διάθεσης περιεχομένου στους τελικούς μας χρήστες, ενεργοποιώντας τους FTP και WebDAV listeners της βάσης:
begin
DBMS_XDB.setFTPPort(2100);
DBMS_XDB.setHTTPPort(8080);
end;

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

Jan 9, 2012

To Oracle XML DB repository (μέρος 2ο)

Ας ξεκινήσουμε από μια λειτουργική περιγραφή του XML DB, έχοντας ως σενάριο εργασίας δυο λογαριασμούς χρηστών (πχ xml1 και xml2) που πρόκειται να προσθέτουν αρχεία στο repository, μέσω γνώριμων και φιλικών διεπαφών, όπως το FTP ή το WebDAV (πχ από το Windows Explorer τους) σε ένα συγκεκριμένο κατάλογο. Τα αρχεία αυτά, με το που ανεβαίνουν στο repository, πρόκειται να υποστούν κάποια επεξεργασία (πχ. προώθηση στο κύκλωμα παραγγελιών, αποθήκευση ή και επεξεργασία ψηφιακού περιεχομένου κλπ) H διαχείριση και παραμετροποίηση του XML DB repository θα πραγματοποιείται από έναν ειδικό λογαριασμό χρήστη (πχ xmlrepos1) που θα ορίσουμε σε αρχικό στάδιο.

Ως system λοιπόν φτιάχνουμε τους χρήστες:

create user xmlrepos1 identified by ###;
grant connect, resource, xdbadmin to xmlrepos1;

create user xml1 identified by ###;
grant connect to xml1;

create user xml2 identified by ###;
grant connect to xml2;


Ως χρήστης xmlrepos1, μπορούμε να δημιουργήσουμε τώρα τον φάκελο των εισερχομένων εγγράφων, έστω /uploadFolder, ορίζοντας επί της ουσίας την δενδροειδή δομή που μας ενδιαφέρει:

declare
r BOOLEAN;
begin
r:=DBMS_XDB.createFolder('/uploadFolder');
commit;
end;

Έπειτα, ο xmlrepos1 θα αποδώσει τα κατάλληλα δικαιώματα διαχείρισης περιεχομένου στους δυο τελικούς μας χρήστες. Το XML DB κάνει χρήση ACLs (access control lists) που περιγράφονται σε μορφή XML για τη διαχείριση ασφάλειας. Ας φτιάξουμε λοιπόν ένα αρχείο περιγραφής της πολιτικής ασφάλειας. Το υπερ-δικαίωμα dav:all σηματοδοτεί την απόλυτη εξουσιοδότηση σε ένα πόρο (αρχείο ή φάκελο)

declare
b BOOLEAN;
begin
b := DBMS_XDB.createResource(
'/public/acls/acl_uploadFolder.xml',
'<acl description="myacl"
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:dav="DAV:"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd">
<ace>
<grant>true</grant>
<principal>xml1</principal>
<privilege>
<dav:all/>
</privilege>
</ace>
<ace>
<grant>true</grant>
<principal>xml2</principal>
<privilege>
<dav:all/>
</privilege>
</ace>
</acl>',
'http://xmlns.oracle.com/xdb/acl.xsd',
'acl');
commit;
end;


Τέλος, ας αποδώσουμε τα ACLs που μόλις δημιουργήσαμε, στον φάκελό μας:

begin
dbms_xdb.setacl('/uploadFolder', '/public/acls/acl_uploadFolder.xml');
commit;
end;


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

Jan 5, 2012

To Oracle XML DB repository (μέρος 1ο)

Εδώ και αρκετά χρόνια έχω δουλέψει αρκετά με την Oracle XML DB. Αρχικά για την αποθήκευση XML εγγράφων. Έπειτα για τις ανάγκες παραγωγής και μετασχηματισμού περιεχομένου XML. Επίσης με το XQuery. Συμμετείχα σε ένα μεγάλο έργο μετάπτωσης (migration) της Oracle XML DΒ σε σχεσιακές δομές. Σε όλες τις περιπτώσεις, είχα εντυπωσιαστεί από το βάθος της υποστήριξης της XML, από τους "σοφιστικέ" τρόπους ενσωμάτωσης της και ενίοτε από τις εντολές-σπαζοκεφαλιές που προστίθενται στην Oracle SQL. Ένα χαρακτηριστικό με το οποίο μέχρι πρότινος δεν είχα προηγούμενη εμπειρία είναι το Oracle XML DB repository. Πρόκειται για τη δυνατότητα αποθήκευσης εγγράφων (είτε σε μορφή XML είτε όχι) στον Oracle Server σε ιεραρχική δομή σε αντίθεση με την τυπική αποθήκευση σε ένα σχεσιακό σχήμα. Και όλα αυτά μέσα από γνώριμα user interfaces, όπως FTP και HTTP/WebDAV που παρουσιάζουν σε δενδροειδή δομή τα περιεχόμενα . Η δυνατότητα αυτή αποκτά ενδιαφέρον όταν υπάρχει ανάγκη για μαζική, ολοκληρωμένη αποθήκευση και επεξεργασία εγγράφων, με ενδεχόμενη χαλαρή συσχέτιση με σχεσιακά δεδομένα, από απλά περιβάλλοντα χρήσης και τελικούς χρήστες. Ταυτόχρονα, οι πονοκέφαλοι του τύπου της αποθήκευσης (πχ CLOB, BLOB) ή της αναζήτησης περιεχομένου ή του τρόπου οργάνωσης κρύβονται επιμελώς από την τεχνολογία ώστε πραγματικά να εστιάσουμε στο ζητούμενο μας. Αν μάλιστα προσθέσουμε πως τυπικές λειτουργίες όπως συντομεύσεις (shortcuts-links), κανόνες ασφάλειας (ACLs) και event-based triggers προσφέρονται με ευκολία, τότε ελπίζω να σας έχω κεντρίσει το ενδιαφέρον, όπως ακριβώς συνέβη και με εμένα.

Στα επόμενα άρθρα, θα προσπαθήσω να σκιαγραφήσω διάφορες πλευρές του XML DB repository, ώστε να φωτιστούν διάφορες διαστάσεις του. Περισσότερες πληροφορίες βρίσκονται στο Oracle documentation καθώς επίσης υπάρχει και ένα βιβλίο της Oracle Press με τίτλο "Oracle Database 11g: Building Oracle XML DB Applications"

Jan 2, 2012

Blog ανασκόπηση και στατιστικά (statistics) για το 2011

Καλή χρονιά σε όλους! Μόλις έφυγε μια χρονιά που ανάμεσα στα άλλα μου έδωσε την ευκαιρία για περισσότερα άρθρα, με μεγαλύτερο κέφι, φθάνοντας πια στα έξι χρόνια λειτουργίας του blog serafeimk.blogspot.com. Ας εξετάσουμε το τι συνέβη πέρσι σε αυτό το site, τόσο ως προς τη δημοσίευση του περιεχομένου όσο προς τα στατιστικά χρήσης.

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

Ως προς το περιεχόμενο, το blogger.com μας προσφέρει τη δυνατότητα να κάνουμε διάφορα HTTP ερωτήματα στα άρθρα που έχουμε αναρτήσει, όπως για παράδειγμα με βάση την ημερομηνία δημοσίευσης. Έτσι, μπόρεσα να πάρω όλα τα άρθρα της χρονιάς χρησιμοποιώντας το wget:

wget -O blog2011.xml "http://www.blogger.com/feeds//posts/default?published-min=2011-01-01T00:00:00&published-max=2011-12-31T23:59:59&max-results=100"

Έπειτα, μορφοποίησα κατάλληλα το xml αρχείο ώστε να περιέχει αλλαγές γραμμών:
tidy -mi -utf8 -xml blog2011.xml

και τέλος πήρα τις κατηγορίες (labels) των άρθρων που δημοσιεύτηκαν:

cat blog2011.xml | grep "term='" | grep -v "category" |cut -d\' -f2|sort|uniq -c|sort -nr

Προέκυψαν 26 κατηγορίες θεμάτων, πολύ περισσότερες από άλλες χρονιές. Παραδοσιακά, θέματα σχετικά με το Linux, το ADF, την Oracle και το JDeveloper βρίσκονται στην κορυφή της λίστας, ενώ από κοντά ακολουθούν δυο προϊόντα που έχω επενδύσει αρκετό χρόνο το 2011 όπως το Oracle SOA Suite και ο Oracle Weblogic.

Στο τομέα των στατιστικών χρήσης, τα στοιχεία ελήφθησαν από το Google analytics (http://www.google.com/analytics) και δείχνουν μια κάμψη 9% σε σχέση με το προηγούμενο έτος σε σχέση με τις επισκέψεις, παρόλο που προσφέρθηκε περισσότερο νέο περιεχόμενο. Αυτή την κάμψη θα μπορούσα να την αποδώσω σε:
- πτώση των projects σχετικών με την Oracle λόγω της κρίσης
- στην επιμονή μου για την χρήση της ελληνικής γλώσσας στο blog
- σε αδυναμία καλύτερης προώθησης του blog διαμέσου κοινωνικών δικτύων ή γνωριμιών

Τα πιο δημοφιλή άρθρα του 2011 ήταν τα ακόλουθα:

Στις πρώτη θέση, και με μεγάλη διαφορά, φιγουράρει ένα άρθρο του 2010 σχετικά με την ρύθμιση του ZTE MF 110 usb modem στο Ubuntu, ένα θέμα που φαίνεται ενδιαφέρει κάμποσους και το οποίο έχει γίνει παραπομπή σε διάφορα άλλα blogs/sites. Τα πιο δημοφιλή άρθρα του 2011 έχουν να κάνουμε το discosureListener του ADF και με την ανατομία ενός Lenovo Thinkpad.

Ας είμαστε καλά να συνεχίσουμε και το 2012 !