Marios Zindilis

Ενδιαφέροντες σύνδεσμοι (2011, εβδ#39)

Linux

Web development/Design

Διάφορα

Διάβασμα #12

Διάφορα

Linux

Και δύο ωραιότατα άρθρα του Θανάση Μπούνταλη από το περιοδικό Άρδην (θα ήθελα να βλέπω περισσότερα εκτενή μη-τεχνικά άρθρα σχετικά με το ΕΛΛΑΚ):

Ανάπτυξη ιστού

MediaWiki: Διαγραφή άρθρου από τη βάση δεδομένων

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

Προτού προχωρήσετε σε οποιαδήποτε παρέμβαση στη βάση δεδομένων σας, οπωσδήποτε πρέπει να κρατήσετε ένα αντίγραφο ασφαλείας ολόκληρης της βάσης. Επίσης, αν το Wiki σας έχει έντονη δραστηριότητα, μπορείτε προσωρινά να αποτρέψετε οποιεσδήποτε αλλαγές στις σελίδες, προσθέτωντας μια γραμμή στο αρχείο LocalSettings.php: $wgReadOnly = 'Το Wiki είναι προσωρινά μη διαθέσιμο για επεξεργασία.';.

Δομή της βάσης δεδομένων

Η δομή της βάσης δεδομένων του MediaWiki υπάρχει στην τεκμηρίωση, στο άρθρο Database Layout. Για το κάθε άρθρο που εμφανίζεται στο Wiki εμπλέκονται τουλάχιστον τρεις από τους πίνακες της βάσης:

  1. Στον πίνακα page αποθηκεύεται μια λίστα με τους τίτλους όλων των άρθρων. Όταν χρειάζεται να εμφανιστεί ένα άρθρο, γίνεται αναζήτηση σε αυτόν τον πίνακα με βάση τον τίτλο, και ανακτάται η τιμή του πεδίου page_latest.
  2. Με την τιμή page_latest γίνεται αναζήτηση στον πίνακα revision. Σ’ αυτόν τον πίνακα αποθηκεύονται μερικά μεταδεδομένα (δηλαδή όχι καθαυτό το περιεχόμενο) για κάθε αλλαγή που γίνεται στο Wiki. Για να εμφανιστεί ένα άρθρο, από αυτόν τον πίνακα ανακτούνται οι τιμές rev_id και rev_text_id.
  3. Τέλος, με την τιμή rev_text_id που βρέθηκε στο προηγούμενο βήμα, γίνεται αναζήτηση στον πίνακα text, και ανακτάται η τιμή του πεδίου old_text, η οποία αποτελεί και το περιεχόμενο του άρθρου. Ο πίνακας text αποθηκεύει ολόκληρο το περιεχόμενο από κάθε αναθεώρηση κάθε άρθρου του Wiki.

Διαγραφή των καταχωρήσεων

Το πρώτο βήμα είναι να αναζητήσετε τον τίτλο του άρθρου στον πίνακα page, στη στήλη page_title. Οι τίτλοι αποθηκεύονται με τα διαστήματα αλλαγμένα σε κάτω παύλες (underscore) και με τους χαρακτήρες ειδικά διαμορφωμένους σε δεκαεξαδικούς χαρακτήρες UTF-8, αν περιέχεται στον τίτλο χαρακτήρας άλλος από τα Αγγλικά. Δυστυχώς, δεν έχω βρει εύκολο τρόπο να κάνετε τη μετατροπή. Μπορείτε να αναζητήσετε στο διαδίκτυο για βοηθήματα, όπως για παράδειγμα αυτός ο πίνακας μετατροπής χαρακτήρων. Εναλλακτικά, αν χρησιμοποιείτε κάποιο πρόγραμμα όπως το PhpMyAdmin, μπορείτε να εξάγετε ολόκληρο τον πίνακα σε CSV, να τον ανοίξετε με ένα πρόγραμμα όπως το OpenOffice Calc και να δείτε τα περιεχόμενά του κανονικά.

Όταν βρείτε τον τίτλο που θέλετε, σημειώστε την τιμή του πεδίου page_id που αντιστοιχεί στον τίτλο, και διαγράψτε αυτή τη γραμμή από τον πίνακα, εκτελώντας κάτι σαν DELETE FROM my_database.mw_page WHERE mw_page.page_id = 1234. Από αυτή τη στιγμή και μετά, η σελίδα δεν είναι διαθέσιμη στο Wiki, το περιεχόμενό της όμως παραμένει στη βάση δεδομένων.

Για να εξαφανιστεί εντελώς η σελίδα από τη βάση δεδομένων και να μην μείνουν «σπασμένες» αναφορές σ’ αυτήν, θα πρέπει να διαγράψετε και όλες τις αναθεωρήσεις της από τον πίνακα revision, καθώς και όλα τα αλλαγμένα κείμενα από τον πίνακα text.

Μπορείτε να δείτε όλες τις αναθεωρήσεις που θα διαγραφούν, εκτελώντας κάτι σαν SELECT * FROM mw_revision WHERE mw_revision.rev_page = 1234, αλλά προτού τις διαγράψετε, θα χρειαστείτε τα αντίστοιχα rev_text_id, τα οποία θα τα χρησιμοποιήσετε αργότερα. Για να τα δείτε, εκτελέστε SELECT rev_text_id FROM my_database.mw_revision WHERE mw_revision.rev_page = 1234. Κρατήστε κάπου ξεχωριστά αυτό το αποτέλεσμα, θα σας χρειαστεί μετά. Τώρα μπορείτε να διαγράψετε τις αναθεωρήσεις, εκτελώντας κάτι σαν DELETE FROM my_database.mw_revision WHERE mw_revision.rev_page = 1234.

Τέλος, από τον πίνακα text θα πρέπει να διαγράψετε τα κείμενα των παλιών αναθεωρήσεων της σελίδας. Το πεδίο old_id αυτού του πίνακα, είναι ίδιο με το rev_text_id που κρατήσατε προηγουμένως. Μπορείτε λοιπόν να διαγράψετε ένα ένα τα κείμενα, εκτελώντας επανηλειμμένα κάτι σαν DELETE FROM my_database.mw_text WHERE mw_text.old_id = 100, αλλάζωντας το «100» σε ό,τι αντιστοιχεί στα δικά σας δεδομένα.

Reading #11

Weekend: reading time. Here are some suggestions:

Security:

Networking:

Reading #10

Linux

I finished reading Sams – Teach yourself Red Hat Linux. This book tries to cover the very basics of a wide range of topics, from installation and basic usage on the desktop and on the console, to systems administration, user management, nfs, smb, web and ftp serving and basic security. Therefore, this is a good book for the beginner who aims high. So, I should have read it a few years ago – I felt bored at times.

More Google+ hoopla:

Misc

Reading #9

A reading post!

Google+ hoopla:

Misc geeky readings:

VirtualBox: «Φρέσκια» εγκατάσταση λειτουργικού εύκολα και γρήγορα

Αν χρησιμοποιείτε το VirtualBox με εικονικές μηχανές για πειράματα ή για μελέτη, σίγουρα θα χαλάτε αρκετές εγκαταστάσεις (βλ. και Σωτήρης Τσιμπώνης, Red Hat Certificate Exam Preparation). Ο εύκολος και γρήγορος τρόπος για να έχετε μια «φρέσκια» εγκατάσταση λειτουργικού για νέα πειράματα, είναι να εξάγετε μια εικονική μηχανή που μόλις εγκαταστήσατε.

Από τα μενού του VirtualBox επιλέξτε File και μετά Export Appliance, επιλέξτε μια από τις εγκατεστημένες εικονικές μηχανές που θέλετε να αποθηκεύσετε στην τρέχουσα κατάστασή της, και δώστε της ένα όνομα. Το VirtualBox θα χρειαστεί τώρα μερικά λεπτά για να αποθηκεύσει την μηχανή, σε μορφή αρχείου Open Virtualization Format, η οποία υποστηρίζεται επιπλέον και από άλλα προγράμματα για εικονικές μηχανές, όπως το VMWare.

Όταν θα χρειαστείτε την φρέσκια εγκατάσταση, για να ξαναρχίσετε να την χαλάτε από την αρχή, από τα μενού του VirtualBox θα επιλέξετε File και Import Appliance, και θα διαλέξετε το αρχείο .ova που δημιουργήσατε με την προηγούμενη διαδικασία. Το VirtualBox θα χρειαστεί και πάλι μερικά λεπτά για να δημιουργήσει την μηχανή.

Ναυτίλος: Μαζική σμίκρυνση εικόνων

Μενού του ΝαυτίλουΈφτιαξα ένα σενάριο εντολών για τον περιηγητή αρχείων του GNOME, τον Ναυτίλο, το οποίο σμικρύνει μαζικά όλες τις εικόνες με επεκτάσεις jpg, jpeg ή png.

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

  1. το όνομα του φακέλου μέσα στο οποίο θα μπουν οι μικρότερες εικόνες (από προεπιλογή είναι «thumbs»), και
  2. το ποσοστό κατά το οποίο θα σμικρυνθούν οι εικόνες (από προεπιλογή είναι 50%).

Τέλος, εμφανίζει μια μπάρα προόδου της διαδικασίας σμίκρυνσης.

Για να το χρησιμοποιήσετε, αντιγράψτε το αρχείο στον κρυφό φάκελο .gnome2/nautilus-scripts/ μέσα στον Προσωπικό σας φάκελο. Μετά την αντιγραφή, πρέπει να αλλάξετε τα δικαιώματά του, και να το κάνετε εκτελέσιμο. Στο εξής, θα εμφανίζεται στο μενού του Ναυτίλου, το οποίο αναδύεται όταν πατήσετε το δεξί κλικ μέσα σε έναν φάκελο ή πάνω σε ένα αρχείο.

Κατεβάστε το σενάριο εντολών από την Pub. Το σενάριο έχει δοκιμαστεί σε Ubuntu 10.10 με GNOME 2, και σε Fedora 15 με GNOME 3.

Καθορισμός φακέλου προορισμού

Φάκελος προορισμού

Ποσοστό σμίκρυνσης

Ποσοστό σμίκρυνσης

Μπάρα προόδου

Μπάρα προόδου

Μερικές ακόμα σημειώσεις:

Ενημέρωση:

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

<   convert -resize $SCALE "$i" "$FOLDER/$i";
---
>   convert -resize ${SCALE}% "$i" "$FOLDER/$i";

Fedora 15: Εγκατάσταση ενός μινιμαλιστικού εξυπηρετητή

Το Fedora 15 δεν είναι μόνο η πρώτη διανομή με το εντυπωσιακό νέο γραφικό περιβάλλον του GNOME 3, αλλά και μια καλή πλατφόρμα για δημιουργία εξυπηρετητή.

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

Μπορείτε να διαβάσετε τον οδηγό εδώ.

MediaWiki: Εμφάνιση περιεχομένου μόνο σε συνδεδεμένους χρήστες

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

Για να το κάνετε αυτό, μέσα στο οπτικό σας θέμα, θα πρέπει να πρώτα δηλώσετε ως global την μεταβλητή $wgUser μέσα στη συνάρτηση execute(). Για παράδειγμα:

function execute() {
  global $wgUser, $wgSitename;
  // ακολουθεί η υπόλοιπη συνάρτηση execute
}

Στη συνέχεια, στο σημείο όπου θέλετε να εμφανίσετε το ελεγχόμενο περιεχόμενο, θα χρησιμοποιήσετε τις συναρτήσεις isAnon() είτε isLoggedIn() ανάλογα τι θέλετε να κάνετε. Για παράδειγμα, για να εμφανίσετε έναν κρυφό σύνδεσμο μόνο στους συνδεδεμένους χρήστες:

<?php $this->html('reporttime');
if($wgUser->isLoggedIn()){
?>
  // περιεχόμενο που θα εμφανίζεται μόνο σε συνδεδεμένους χρήστες
<?php
}
?>