Κατάγομαι από το χωριό: Καρυές Ανατολικού Ζαγορίου, Ιωαννίνων.
460Khm λοιπόν μακριά από τον τόπο διαμονής μου, και περί τις 5 1/2 ώρες με το αμάξι (χωρίς στάσεις), αποτελεί έναν μακρινό τόπο για διακοπές. Παρόλα αυτά, όποτε βρίσκω χρόνο και μέρες από την δουλειά, προσπαθώ να έρχομαι.
Με πολύ μεγάλη μου έκπληξη (και ευχαρίστηση ταυτόχρονα) διαπίστωσα ότι στο χωριό, υπάρχει open-mesh εξοπλισμός και δίκτυο από το Πανεπιστήμιο Ιωαννίνων !!!
Μάλιστα οι ταχύτητες που πιάνω από το σπίτι μου (50%), κι όχι από την κεντρική πλατεία του χωριού (στην οποία είναι στημένος ο κόμβος), είναι καλύτερες κι από αυτές στην Αθήνα!
Ένας από τους άθλους για έναν νέο χρήστη (καλά όχι μόνο για τους νέους χρήστες) στο linux, είναι η απομνημόνευση όλων αυτών των καταλόγων. Τι είναι όλοι αυτοί οι κατάλογοι και τι σημαίνουν;
Η λύση είναι φυσικά να ρίξουμε μια ματιά στο εξής link:
Filesystem Hierarchy Standard
Αλλά διαβάζοντας το Linux Gazette , έμαθα για την εξής εντολή:
man hier
Είναι ένας πολύ χρήσιμος τρόπος να βρει κανείς εύκολα τι σημαίνουν όλοι αυτοί οι κατάλογοι, χωρίς να χρειαστεί να ανοίξει internet!
On January i wrote a personal script to keep my package list and latest conf files on a backup-snapshot mechanism: abs4snap . Page on wiki: abs4snap for archlinux.
Today i wanted to delete some libraries from /usr/lib/ folder path!
And i did a little mistake :(
I wanted to write:
rm -f /usr/lib/libjsp*
but i wrote:
rm -f /usr/lib/lib*
Simple as that my distro (archlinux) becomes a jigsaw puzzles !
Just pieces here and there !
What the f@#$% i could do to save my distro ?
I am using archlinux, so my package manager is: pacman, but pacman uses libraries from /usr/lib folder path !
The solution was to reinstall my distro of course.
Or there is another way ?
A couple days before, i wrote a post how to build a static binary with: statifier. So i had my pacman package list and a pacman static binary file !
The solution was in front of me.
awk '{print "pacman-static -S --noconfirm " $1}' package-list | sh
And with in a few minutes my distro and /usr/lib was in perfect mode again !!!
So remember:
BACKUP your data.
A nice (but not perfect) tool to create a static package is: statifier
Here is a simple but useful mini how to:
(as root)
# echo -n 0 > /proc/sys/kernel/randomize_va_space
# ldd /usr/bin/pacman
linux-gate.so.1 => (0xb7fe1000)
libalpm.so.5 => /usr/lib/libalpm.so.5 (0xb7fa8000)
libc.so.6 => /lib/libc.so.6 (0xb7e5d000)
libfetch.so => /usr/lib/libfetch.so (0xb7e4f000)
libarchive.so.2 => /usr/lib/libarchive.so.2 (0xb7e0f000)
/lib/ld-linux.so.2 (0xb7fe2000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0xb7dbd000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0xb7c43000)
libacl.so.1 => /lib/libacl.so.1 (0xb7c3c000)
libattr.so.1 => /lib/libattr.so.1 (0xb7c37000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb7c11000)
liblzma.so.0 => /usr/lib/liblzma.so.0 (0xb7bef000)
libbz2.so.1.0 => /lib/libbz2.so.1.0 (0xb7bde000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7bc9000)
libdl.so.2 => /lib/libdl.so.2 (0xb7bc5000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7bab000)
# statifier /usr/bin/pacman /tmp/pacman.static-3.4.0
# ldd /tmp/pacman.static-3.4.0
not a dynamic executable
# ls -l /usr/bin/pacman /tmp/pacman.static-3.4.0
-rwxr-xr-x 1 root root 4530176 2010-07-30 20:47 /tmp/pacman.static-3.4.0
-rwxr-xr-x 1 root root 70708 2010-06-21 15:54 /usr/bin/pacman
A simple python script to deduplicate a mailbox (mbox format).
#!/usr/bin/env python
# Created by Evaggelos Balaskas on Thu Jul 29 21:22:41 EEST 2010
# Remove duplicate mails from mbox using message-id
import sys
import mailbox
if len(sys.argv) == 2:
mid = []
for message in mailbox.mbox( sys.argv[1] ) :
s = message['message-id']
if s not in mid:
mid.append(s)
print message
else:
print "Usage should be: " + sys.argv[0] + " mbox > new.mbox"
You can take a look, also, on my other python script: How to remove specific mails from a mbox by subject
This is a better and improved version of one of my previous perl script:
#!/usr/bin/env python
# Created by Evaggelos Balaskas on Sun Jul 25 06:36:29 EEST 2010
# Remove mails from mbox by subject
import sys
import mailbox
import re
SUBJECTS = (
'automatically rejected mail',
'delivery failure',
'delivery notification',
'delivery status notification',
'failure notice',
'mail delivery failed',
'mail delivery failure',
'nondeliverable',
'returned mail',
'undeliverable',
'undelivered',
'warning: could not send message for past'
)
if len(sys.argv) == 2:
for message in mailbox.mbox( sys.argv[1] ) :
s = message['subject']
flag = 0
for i in SUBJECTS:
m = re.search ( i, str(s), re.I )
if m != None :
flag = 1
break
print message
else:
print "Usage should be: " + sys.argv[0] + " mbox > new.mbox"
Εργάζομαι αποκλειστικά σε Linux συστήματα!
Έτσι λοιπόν ακόμα και οι εξωτερικοί usb δίσκοι μου (portability) είναι σε ext4 filesystem!.
Τι γίνεται όμως όταν για κάποιο λόγο (κυρίως λόγω δουλειάς) χρειαστεί να χρησιμοποιήσω κάποιο windows λειτουργικό σύστημα ?
Στην πραγματικότητα όχι και πολλά! Τα windows δεν αναγνωρίζουν extended filesystems.
Αλλά μην στεναχωριέστε και μην απελπίζεστε. Υπάρχει λύση και μάλιστα αξιόλογη:
Με το ext2read διάβασα επιτυχώς τα δεδομένα ενός εξωτερικού σκληρού usb δίσκου με ext4 filesystem, από ένα windows 7 λειτουργικό.
Πριν από λίγες μέρες το PIrsyncD (”πάι - αρ-σινκ - ντι”), έκλεισε ένα χρόνο ζωής και πριν από λίγα λεπτά βγήκε μία ακόμα έκδοση: PIrsyncD_20100724.
Κοιτώντας λίγο τις αρχικές εκδόσεις, νοσταλγώ την αθωότητα που είχα όταν ξεκίνησα να γράφω για 1η φορά στην ζωή μου python. Το έχω ξαναγράψει σε παλαιότερα posts, ότι το πρόγραμμα αυτό ήταν μία ιδέα 17γραμμών ! που χώραγε σε ένα και μόνο post (έκδοση: 20090712).
Τότε είχα αποφασίσει να μην ακολουθήσω το major-minor-build σχήμα ή τις alpha - beta - releases εκδόσεις, αλλά το ISO Date scheme: YYYY-MM-DD. Πίστευα και πιστεύω ότι είναι ευκολότερο να ακολουθείς ένα τέτοιο σχήμα εκδόσεων, παρά να θυμάμαι νούμερα κ.λ.π.-κ.λ.π.
Κάπου στην πορεία (20091115) δλδ μετά από 4/5 μήνες είχε έρθει η ώρα να χρησιμοποιήσω ένα version control σύστημα ώστε να διατηρώ τις αλλαγές που κάνω, αλλά και να μπορώ να κάνω εύκολα rollback σε περίπτωση λάθους!
Κάποια στιγμή ξεκίνησαν και να πρώτα emails ! Ερωτήσεις και feedback, patches & reviews.
Είχα εκπλαγεί με αυτό το γεγονός.
Φέτος με την έναρξη των συνεδρίων στην Ελλάδα, άρχισα να παρακολουθώ ανθρώπους που γράφουν ή έγραφαν χρόνια Python, ώστε να μπορώ να πάρω ιδέες με σκοπό να διορθώσω τυχόν λάθη στον κώδικά μου.
Το μέγεθος του κώδικα αυξανόταν, το ίδιο και οι λειτουργίες του προγράμματος! Θεώρησα καλό να δημιουργήσω μία ξεχωριστή σελίδα με παραδείγματα χρήσης (./PIrsyncD –examples) καθώς η βοήθεια (./PIryncD -h) είχε ήδη γεμίσει μία σελίδα στο τερματικό.
Δυστυχώς όμως οι ευθύνες και οι δουλείες δεν μας αφήνουν πάντα να προχωρήσουμε με την ίδια ταχύτητα που θέλουμε. Έτσι πέρασαν 4 μήνες για να ανακοινώσω άλλη μία έκδοση του PIrsyncD.
Για να δούμε την πορεία του project, θα είναι ανάλογη του 1ου χρόνου ή απλά θα χαθεί στην πορεία του χρόνου …
PIrsyncD stands for: Python Inotify Rsync Daemon.
Description:
This is an attempt of writing a daemon to watch a directory for kernel’s inotify events and then execute an rsync command to synchronize two different directories (local or remote). This is a poor man’s mirroring or an alternative (not so) real data replication mechanism and it is based on Pyinotify.
A lot of changes over the past couple releases
From ChangeLog:
- Rewrite code for duplicate inode events, using python dictionary
- Added option to run PIryncD in foreground
- Added code for mirroring in first run, without looking inode events.
- Scoring 7.35 with pylint (better code styling)
- Redifind global variables (errors may occured, plz notify me).
plz try ./PIrsyncD –help to see more
Get the latest version of PIrsyncD v20100724
Ναι είναι γεγονός,
κι εδώ οι πρώτες φωτογραφίες:
A couple of days back, i wrote a perl script to remove backscatter mails from a mailbox file using perl.
You can take a look on the code here:
Remove backscatter mails from mailbox.
Today i wanted to remove the duplicate mails from a mailbox. I’ve used, till now, mergembox, but i wanted to write something on my own.
So, without further ado:
1 #!/usr/bin/perl -w 2 3 use strict; 4 use Mail::MboxParser; 5 6 die $0 =~ /([^/]+)$/, "> n" unless @ARGV == 1; 7 8 my $mb = Mail::MboxParser->new($ARGV[0]); 9 my $field = "message-id"; 10 my @MessageIds = (); 11 12 while ( my $msg = $mb->next_message ) { 13 14 my @msgid = split(/@/, $msg->header->{$field}); 15 16 if ( grep(/$msgid[0]/, @MessageIds ) ) { 17 warn "Duplicate Message-ID: " . $msgid[0] . ", already exists ! n" ; 18 } else { 19 push( @MessageIds, $msgid[0] ); 20 print $msg."n" ; 21 } 22 }
You can see the code with syntax highlight here:
Remove duplicate mails from mailbox
Προς όλες τις εταιρείες που κατασκευάζουν πληκτρολόγια.
Το Enter-Key, ή όπως το θυμούνται και οι παλαιότεροι Return, πρέπει να είναι έτσι:
Για αυτό παρακαλείσθε να σταματήσετε τις ανοησίες στην αναζήτηση του Holy Grail κι επιτέλους να αποφασίσετε πως σε κάθε πληκτρολόγιο πρέπει να έχει το ίδιο σχήμα στην ίδια θέση!
In my kind of work (see at the top of this domain) there are times that i need internet explorer. For this reason i have a windows xp partition! Of course the alternative is to use windows xp through virtualbox, but in my laptop i chose to keep this original windows partition.
Another problem is that a lot of web services use specific java version. Some vendor consoles uses java version 1.4, others 1.5 and a few 1.6 !!! This makes my world hell every time.
So how can someone choose a previous java version for his/her browser ?
The solution in fact is extremely easy:
Start -> Settings -> Control Panel -> Java
and then:
Java -> View
and then enable or disable every java version you want.
Take a look on this:
Το addblock plus είναι πραγματικά απαραίτητο στις μέρες μας.
Oι λόγοι ευνόητοι. Μα εάν χρησιμοποιούμε τον midori web browser πως μπορούμε να εμποδίσουμε τις άπειρες διαφημίσεις από τα sites?
Η λύση είναι πολύ απλή, ο midori έχει ενσωματωμένο plugin για να εμποδίσει τις διαφημίσεις κι απλά το ενεργοποιούμε. Εάν θέλουμε, μπορούμε να προσθέσουμε και την ελληνική λίστα που έχει δημιουργήσει ο kargig.
Η παρακάτω εικόνα δείχνει με την σειρά τα 4 βήματα που πρέπει να κάνουμε:
Εάν θέλετε να περάσετε τις λίστες με το χέρι από την κονσόλα, το αρχείο που πρέπει να τροποποιήσετε βρίσκετε εδώ:
vim .config/midori/extensions/libadblock.so/config
που ως περιεχόμενο έχει τα εξής:
[settings]
filters=http://www.void.gr/kargig/void-gr-filters.txt;https://easylist-downloads.adblockplus.org/easylistgermany.txt;
ΠΡΟΣΟΧΗ: Έχω αφαιρέσει την προεπιλεγμένη λίστα που έχει το midori, γιατί έχει κάποιο regular expression που προκαλεί πρόβλημα.
comzeradd has suggested a hack to speed up firefox: speed up firefox (reloaded).
I want to speed up firefox & thunderbird too. But i dont want to write a script on boot or use a cronjob script to re-write firefox’s changes to disk.
I was thinking to move the Cache folders to a tmpfs filesystem (ram based), so if you want a different approach take a look on this:
[ebal@mylaptop ~]€ grep Cache /etc/fstab
tmpfs /home/ebal/.mozilla/firefox/5wy0q0l2.default/Cache tmpfs defaults 0 0
tmpfs /home/ebal/.thunderbird/lkntkylt.default/Cache tmpfs defaults 0 0
and then just mount them:
[ebal@mylaptop ~]€ sudo mount /home/ebal/.mozilla/firefox/5wy0q0l2.default/Cache
[ebal@mylaptop ~]€ sudo mount /home/ebal/.thunderbird/lkntkylt.default/Cache
Of course the next time you boot up your system, you dont need to mount the Cache folders from the command line.
5wy0q0l2 is my firefox default folder,
lkntkylt is my thunderbird default folder!
Hope this is useful to you too.
Φίλος μου ζήτησε βοήθεια ώστε να καθαρίσει διάφορα backscatter mails από το mailbox του. Μία από τις πλέον γνωστές επιθέσεις είναι ο spammer να χρησιμοποιεί διαφορετική mail address ή ακόμα και reply-address με αποτέλεσμα τα back scatters να μην έρχονται σε αυτόν αλλά να πηγαίνουν σε κάποιον άλλο.
Με βοήθησε αρκετά το συγκεκριμένο άρθρο:mbox_selective_deletion και πάνω σε αυτό βασίστηκα για να γράψω την δική μου παραλλαγή:
#!/usr/bin/perl -w
# Created by Ben Okopnik on Thu Jan 14 21:55:46 EST 2010
# Updated by Evaggelos Balaskas on Sun Jun 27 20:50:11 EEST 2010
use strict;
use Mail::MboxParser;
die $0 =~ /([^/]+)$/, " <mbox> n" unless @ARGV == 1;
my $mb = Mail::MboxParser->new($ARGV[0]);
my @subjects = (
"Undeliverable",
"Warning: could not send message for past 12 hours",
"Returned mail: see transcript for details",
"Delivery Status Notification (Failure)",
"Undelivered Mail Returned to Sender"
);
while ( my $msg = $mb->next_message ) {
my $s = $msg->header->{subject};
$s ||= "empty_subject";
my $flag = 0;
foreach (@subjects) {
if ( $s =~ $_ ) {
$flag = 1;
last;
}
}
print $msg."n" unless $flag ;
}
Η χρήση του είναι η εξής:
./remove.pl mailbox > newmailbox
και φυσικά μπορείτε να προσθέσετε στην λίστα strong>@subjects</strong όσα περισσότερα subjects θέλετε.
Ο πλήρες κώδικας βρίσκεται εδώ: How to remove a specific mail from a mbox
ΥΓ: Θα χαρώ να λάβω παρατηρήσεις.
Ευχάριστα νέα για τους φίλους του The IT Crowd, μετά από αρκετό καιρό βρήκε νέο επεισόδιο και ο Moss έχει αυτοκόλλητο Ubuntu στην οθόνη του:
Τις τελευταίες ημέρες τα πράγματα άλλαξαν στο Xorg
και πλέον εκτός του udev,
οι δικές μας ρυθμίσεις πρέπει να αποθηκεύονται στον εξής κατάλογο:
/etc/X11/xorg.conf.d/
Το archlinux έχει ήδη προβεί σε αναβάθμιση όλων
των απαραίτητων πακέτων κι έτσι “εμείς” πρέπει να αλλάξουμε λίγο τις συνήθειές μας.
Έτσι λοιπόν πλέον η αλλαγή της γλώσσας ΔΕΝ γίνεται πλέον μέσω hal, οπότε χρειάζεται να επιβεβαιώσουμε ότι το συγκεκριμένο αρχείο είτε δεν υπάρχει, είτε έχει μετονομαστεί:
Στην δική μου περίπτωση έγινε έτσι:
/etc/hal/fdi/policy/.10-keymap.fdi
Και δημιουργούμε το νέο αρχείο:
/etc/X11/xorg.conf.d/10-keyboard.conf
με το εξής περιεχόμενο:
Section "InputClass" Identifier "Generic Keyboard" MatchIsKeyboard "yes" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us,el" Option "XkbOptions" "grp:alt_shift_toggle,compose:menu,grp_led:scroll" EndSection
Δυστυχώς οι περισσότεροι χρήστες (καλά ας μην γελιόμαστε κι εμείς οι ίδιοι καμιά φορά) χρησιμοποιούμε τους ίδιους κωδικούς ξανά και ξανά. Πως να θυμάσαι πλέον όλους τους κωδικούς από χιλιάδες εφαρμογές/sites διαφορετικούς υπολογιστές κ.ο.κ. Επειδή υπάρχουν πάρα πολλά προγράμματα που αναλαμβάνουν να “φυλάνε” τους κωδικούς σου κι όλοι αναφέρουν ότι σας προστατεύουν γιατί πρέπει να θυμάστε μόνο έναν κωδικό, στην πράξη αυτό είναι ακόμα πιο επικίνδυνο. Γιατί τώρα πρέπει να θυμάστε μόνο έναν κωδικό. Σας θυμίζει κάτι:
One to rule them all!
Ας μην γελιόμαστε, πρέπει για κάθε εφαρμογή/υπολογιστή/πρόγραμμα κ.α. να έχουμε διαφορετικά συνθηματικά.
- Μα πως γίνεται αυτό;
- Που να θυμάμαι τόσους κωδικούς;
- Θα καταλήξω να τους γράφω σε σημειωματάριο ή
- Θα καταλήξω να τους γράφω σε post-it
Η πράξη έχει αποδείξει ότι το χειρόγραφο σημειωματάριο είναι ασφαλέστερο του ηλεκτρονικού. Κι αυτό γιατί, το χειρόγραφο το έχεις σχεδόν πάντα πάνω σου και δεν αφήνει ηλεκτρονικά “ίχνη” .
Αρκετά ο πρόλογος, πως είναι δυνατόν για κάθε εφαρμογή ή καλύτερα για κάθε ξεχωριστό login να έχω διαφορετικό δλδ ξεχωριστό συνθηματικό.
Η λύση είναι σχετικά απλή, το μόνο που χρειάζεται είναι αλλαγή νοοτροπίας κι αντιμετώπισης.
Patterns – Μοτίβα !
Ναι, ναι η λύση που προτείνω είναι τα patterns.
Χρειάζεται να έχουμε μία φράση/στίχους από τραγούδι/ποίημα/παροιμία ότι θέλουμε στο μυαλό μας. Αφού βρούμε το pattern που θέλουμε να χρησιμοποιούμε εν συνεχεία θα σου δείξω μερικούς άτυπους κανόνες χρήσης:
Για αρχή πρέπει να βρούμε το μοτίβο μας:
π.χ.
Θ’ ανέβω και θα τραγουδήσω στο πιο ψηλότερο βουνό
σε greeklish:
Tha Anevo Kai Tha Tragoudo Sto Pio Psilotero Vouno.
Ο πιο εύκολος τρόπος είναι να πάρουμε τα αρχικά:
takttsppv
Δύσκολο να το γράψεις, εύκολο όμως να το θυμάσαι.
Πρέπει τώρα να αντικαταστήσουμε μερικά γράμματα με αριθμούς και σύμβολα:
t@k2ts2pv
Λίγο καλύτερο, όπου είχε φωνήεν το αντικατέστησα με το αντίστοιχο σύμβολο που ταίριαζε κι όπου είχε διπλό γράμμα έβαλα τον αριθμό δύο.
Για να καταλάβουμε λίγο την λογική θα κάνω χρήση μίας ακόμα φράσης:
π.χ.:
Ανοίχτε τα τρελάδικα να βγει ο κόσμος έξω
attnvoke (Anoixte Ta Treladika Na Bgei O Kosmos Ekso)
φυσικά ανάλογα με τον τρόπο γραφής σας σε greeklish αυτό μπορεί να αλλάξει.
@2tnv0k#
Με αντικατάσταση γραμμάτων & αριθμών καταλήγουμε σε ένα συνθηματικό το οποίο είναι μεν δύσκολο να το γράψουμε, αλλά εύκολο να το θυμόμαστε (αρκεί να θυμόμαστε την φράση).
Τώρα λοιπόν, αφού βρήκαμε το pattern, πρέπει να το προσαρμόσουμε ανάλογα για κάθε login.
Οι παραλλαγές πραγματικά δεν έχουν όρια, φαντασία καλή να έχετε.
Θα κάνω χρήση του δεύτερου συνθηματικού για το gmail.
Μπορείτε να χρησιμοποιήσετε τα πρώτα γράμματα, τα τελευταία ή να συμπληρώσετε με αριθμούς και κωδικούς:
δλδ gmail (δηλώνει την εφαρμογή) @2tnv0k# (το δύσκολο συνθηματικό) 1980 (έτος γέννησης)
καταλήγουμε με το εξής:
gmail@2tnv0k#1980
αυτό τώρα είναι ένα αρκετά καλό συνθηματικό.
μία ακόμα παραλλαγή:
Τα δύο πρώτα γράμματα της εφαρμογής – κωδικός
gm80@2tnv0k#
Ας δούμε πως μπορεί να είναι το συνθηματικό σας στον υπολογιστή σας:
hostname: home
home@2tnv0k#1980
ho80@2tnv0k#
ebal@home@2tnv0k#
μπορείτε ακόμα και να το σπάσετε στα δύο:
@2tnebal@homev0k#
@2tnhomev0k#
κι ούτε καθεξής.
Έτσι λοιπόν εάν χρησιμοποιείτε το μοτίβο με το αντίστοιχο hostname έχει συνθηματικά για όσα συστήματα έχετε πρόσβαση, με το όνομα της εφαρμογής καταλήγετε να έχετε ξεχωριστά συνθηματικά για κάθε εφαρμογή!
Τώρα ο μόνος κίνδυνος είναι να τραγουδάτε συνέχεια το ίδιο τραγούδι !