8 Οκτ 2011

tmux: Ένας πολυπλέκτης τερματικών

Όπως λέει και το όνομα του, το tmux είναι ένας πολυπλέκτης τερματικών (terminal multiplexer), που μας δίνει τη δυνατότητα να διαχειριστούμε με ευκολία πολλά τερματικά (και παράθυρα) μέσω μίας κεντρικής οθόνης. Θεωρείται ως μια εναλλακτική  εφαρμογή του GNU Screen και είναι υπό την άδεια χρήσης BSD, ενώ αποτελεί μέρος του λειτουργικού συστήματος OpenBSD. Οι διαφορές του tmux από το GNU Screen σημειώνονται στο faq της εφαρμογής.


 Ακολουθούν μερικές βασικές εντολές για την διαχείριση των τερματικών:

Ctrl-b c - δημιουργία νέου παραθύρου.
Ctrl-b w - επιλογή παραθύρου από λίστα. 
Ctrl-b <αριθμός παραθύρου> - επιλογή παραθύρου.
Ctrl-b & - κλείσιμο παραθύρου.
Ctrl-b " - διαίρεση (split) παραθύρου οριζόντια.
Ctrl-b % - διαίρεση παραθύρου κάθετα.
Ctrl-b ο - επιλογή τομέα (pane) παραθύρου.
Ctrl-b q - αρίθμηση τομέων παραθύρου. Μπορούμε να επιλέξουμε τομέα πατώντας τον αριθμό που του αντιστοιχεί, πριν σβήσουν οι αριθμοί από την οθόνη.
Ctrl-b x - κλείσιμο τομέα.
Ctrl-b t - εμφάνιση ρολογιού.


Για να αλλάξουμε το μέγεθος ενός τομέα δίνουμε την εντολή προθέματος Ctrl-b και στην συνέχεια κρατώντας πατημένο το πλήκτρο Ctrl αλλάζουμε το μέγεθος με τα πλήκτρα: πάνω/κάτω/αριστερά/δεξιά (arrow keys).

Για περισσότερη βοήθεια δίνουμε την εντολή Ctrl-b ?

26 Αυγ 2011

Ντένις Χονγκ: κατασκευάζοντας ένα αυτοκίνητο για τυφλούς οδηγούς

Χρησιμοποιώντας τη ρομποτική, τηλέμετρα με λέιζερ, GPS και έξυπνα εργαλεία ανάδρασης, ο Ντένις Χονγκ κατασκευάζει ένα αυτοκίνητο για τυφλούς οδηγούς. Δεν είναι ένα "αυτοκινούμενο" όχημα, επισημαίνει, αλλά ένα αυτοκίνητο στο οποίο ένας οδηγός χωρίς όραση μπορεί να ορίσει την ταχύτητα, την εγγύτητα και την πορεία -- και να οδηγήσει αυτόνομα.

Απο: ted.com

22 Αυγ 2011

Vim: Σύγκριση και συγχώνευση αρχείων κώδικα.

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

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

Για να ανοίξουμε τα δυο αρχεία, χρησιμοποιούμε την εντολή:

vim -d <αρχείο_1> <αρχείο_2>

ή

vimdiff <αρχείο_1> <αρχείο_2>

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


μερικές βασικές λειτουργίες:

ctrl+w+w - μεταφέρεται ο κέρσορας από το ένα παράθυρο στο άλλο - επιλογή αρχείου.
]c - μεταφέρεται ο κέρσορας στην επόμενη αλλαγή.
[c - μεταφέρεται ο κέρσορας στην προηγούμενη αλλαγή.
:diffupdate - ανανεώνονται οι διαφορές, μετα από μία αλλαγή στο αρχείο.
:[έκταση]diffget - παίρνει τις αλλαγές από συγκεκριμένες γραμμές του άλλου αρχειου και τις εφαρμόζει στο τρέχον αρχείο.
:[έκταση]diffput - παίρνει τις αλλαγές από συγκεκριμένες γραμμές του τρέχοντος αρχειου και τις εφαρμόζει στο άλλο αρχείο.

Παραδείγματα:

:1,3diffget - παίρνει τις αλλαγές από από την γραμμή 1 ως την γραμμή 3 του άλλου αρχείου και τις εφαρμόζει στο τρέχον αρχείο.
:2diffput - παίρνει τις αλλαγές από τη δεύτερη γραμμη του τρέχοντος αρχείου και τις εφαρμόζει στο άλλο αρχείο.

Για περισσότερες λειτουργίες πατήστε εδώ.

6 Ιουλ 2011

xev: Καταγράψτε τα γεγονότα του συστήματος παραθύρων X

Σήμερα χρειάστηκε να ρυθμίσω το fluxbox ώστε να συλλαμβάνει screenshots πατώντας το πλήκτρο PrtSc (ή αλλιώς SysRq ή Print Scrn). Για να γίνει αυτό (και για ορισμένες περιπτώσεις), πρέπει να δηλώσουμε το keycode και την εργασία που θα θέλουμε να εκτελεί το συγκεκριμένο πλήκτρο στο αρχείο ~/.fluxbox/keys.
Σε αυτό με βοήθησε πάρα πολύ το εργαλείο xev του συστήματος παραθύρων X, το οποίο δημιουργεί ένα παράθυρο (βλ. φώτο) και στη συνέχεια ζητά από τον X να του στείλει πληροφορίες για όλα τα γεγονότα (events) που συμβαίνουν σε αυτό το παράθυρο.

Πληροφορίες γεγονότος keyPress του πλήκτρου F1
Αν θέλουμε να απομονώσουμε μόνο την πληροφορία που αφορά το keycode, μπορούμε να δώσουμε την εντολή: xev | grep keycode

19 Ιουν 2011

Δημιουργία ασύρματου ad-hoc δικτύου και διαμοιρασμός της σύνδεσης internet με το Network Manager

Σενάριο: Έχετε πάει διακοπές στο εξοχικό με τους φίλους σας και πήρατε και τα laptop μαζί (σιγά μην τα αφήνατε σπίτι! :P). Ο ένας από εσάς εχει καταφέρει να συνδεθεί στο διαδίκτυο μέσω του ανοικτού ασυρμάτου δικτύου που παρέχει η τοπική κοινότητα (λέμε τώρα...), χρησιμοποιώντας μια κάρτα ασυρμάτου δικτύου μεγάλης εμβέλειας (1W). Το πρόβλημα είναι ότι οι υπόλοιποι δεν μπορούν να συνδεθούν λόγο της μεγάλης απόστασης... τι μπορούμε να κάνουμε για αυτό;
Μια πολύ απλή και γρήγορη λύση είναι να δημιουργήσουμε ένα ασύρματο δίκτυο ad-hoc, με κεντρικό κόμβο τον υπολογιστή (Α) που κατάφερε να συνδεθεί με επιτυχία, ώστε να παίξει τον ρόλο του Access Point και συνέχεια “μοιράσει” τη σύνδεση internet στους υπόλοιπους χρήστες (B,C,D,E), όπως φαίνεται στην πιο κάτω εικόνα:

Οι ρυθμίσεις που πρέπει να γίνουν στον υπολογιστή Α είναι οι εξής:
  1. Aπό τον Network Manager επιλέγουμε “Create New Wireless Network...”
  2. Στη ρύθμιση “Wireless adapter” επιλέγουμε την ενσωματωμένη κάρτα δικτύου του laptop (οχι αυτή που χρησιμοποιήσαμε για να συνδεθούμε στο internet).
  3. Στο πεδίο “Network name” δηλώνουμε το όνομα του δικτύου (π.χ “george_internet”).
  4. Στη ρύθμιση “Wireless security” επιλέγουμε “WPA & WPA2 Personal”. Εδω να σημειωθεί οτι ορισμένα συστήματα μπορεί να μην υποστηρίζουν το πρωτόκολλο ασφάλειας WPA για σύνδεση σε ad-hoc δίκτυα αλλά μόνο WEP (πχ το maemo 5).
  5. Στο πεδίο “Password”  δηλώνουμε το κλειδί ασφάλειας, με το οποίο θα μπορούν να συνδεθούν οι υπόλοιποι χρήστες.

Αν όλα πήγαν καλά οι υπόλοιποι θα μπορούν να συνδεθούν στο δίκτυο που δημιουργήσατε ... :)

29 Μαϊ 2011

Arduino: DHT11 library έκδοση 0.3.2

Αυτή τη φορά οι αλλαγές δεν έγιναν από εμένα, αλλά από τους Rob Tillaart και SimKard, που όπως αναφέρουν στο Arduino Playground βασίστηκαν στη δική μου δουλειά για την ανάπτυξη της νέας έκδοσης.
Οι αλλαγές που έγιναν είναι πάρα πολλές (καλύτερες επιδόσεις, μεγαλύτερη ακρίβεια) και ήδη επικοινώνησα με τον Rob Tillaart για την προώθηση των αλλαγών και στο github ...

PS1: δείτε την σχετική συζήτηση στο forum του arduino 
PS2: Βασισμένοι στη προηγούμενη βιβλιοθήκη, δημιούργησαν μια νέα, που υποστηρίζει και τον αισθητήρα DTH22 (από Arduino playground και forum). Αν και γραμμένη από την αρχή, η αναφορά τους και σε αυτή την βιβλιοθήκη με τιμά αφάνταστα! :)

20 Μαϊ 2011

Συμβουλές του Grant Imahara στους επίδοξους Hardware Hackers

Όσοι παρακολουθούν στο Discovery Channel την εκπομπή Mythbusters σίγουρα θα γνωρίζουν και τον Grant Imahara.
Στο βίντεο που ακολουθεί ο Grant δίνει ορισμένες συμβουλές σε αυτούς που σκέφτονται να ασχοληθούν σοβαρά με τη ρομποτική και το hardware hacking ...

25 Απρ 2011

Vim: NERDTreeOpenWithApp plugin

Το NERDTreeOpenWithApp είναι ένα plugin που δημιούργησα για το NERDTree (ναι, είναι plugin του plugin :D) που μας δίνει τη δυνατότητα να ανοίγουμε διάφορα αρχεία, όπως βίντεο, εικόνες, ebooks, κτλ μέσα από τον Vim, χωρίς να χρειαστεί να ανοίξουμε κάποιον άλλο εξωτερικό file manager.

Μεχρι στιγμής συνεργαζεται με:
  • image viewers
  • media players
  • ebook readers
  • Σουίτες γραφειου
  • web browsers
  • archive managers
  • και bittorrent clients

Η εγκατάσταση είναι πολύ απλή, αντιγράφουμε τα αρχεία NERDTreeOpenWithApp.vim και NERDTreeOpenWithApp_cfg.vim στο φάκελλο ~/.vim/nerdtree_plugin/ και επανεκκινούμε τον vim.

Το αρχείο NERDTreeOpenWithApp_cfg.vim είναι το αρχείο ρυθμίσεων. Εδώ δηλώνουμε τις εφαρμογές που θέλουμε να ανοίγουν τα αρχεία μας. Το plugin έρχεται με τις παρακάτω default ρυθμίσεις:

"============================Image Viewer (default: "eog")
let g:nt_image_viewer = "eog"

"============================Media Player (default: "vlc")
let g:nt_media_player = "vlc"

"============================Ebook Reader (default: "evince")
let g:nt_ebook_reader = "evince"

"============================Office Suite (default: "openoffice.org")
let g:nt_office_suite = "openoffice.org"

"============================Web Browser (default: "firefox")
let g:nt_web_browser = "firefox"

"============================Archive Manager (default: "file-roller")
let g:nt_archive_manager = "file-roller"

"============================BitTorrent Client (default: "transmission")
let g:nt_bittorrent_client = "transmission"


Αφού το φέρουμε στα μέτρα μας ανοίγουμε τα αρχεία πατώντας το πλήκτρο '!'


Το NERDTreeOpenWithApp το έχω ανεβάσει στο github και είναι με άδεια χρήσης WTFPL. Μη διστάσετε να προτείνετε ιδέες, να αναφέρετε σφάλματα (αν υπάρχουν) ή να κάνετε fork το project ...

ΥΓ: Ευχαριστώ πολύ τον Κωνσταντίνο Μπαϊρακτάρη για τις ιδέες που μου έδωσε!

15 Απρ 2011

Vim: NERDTree και snipMate

Δυο πολύ χρήσιμα plugins για τον Vim που ανακάλυψα πρόσφατα είναι:
  • Το NERDTree - Το οποίο μας δίνει τη δυνατότητα να εξερευνούμε και να ανοίγουμε αρχεία του συστήματός μας (δείτε screenshot). Έχει αρκετές επιλογές, πατήστε '?' για βοήθεια.
  • Το snipMate - Snippets ονομάζονται έτοιμα κομμάτια κώδικα που χρησιμοποιούνται πολύ συχνά και τα οποία μπορούμε να τα τοποθετήσουμε αυτόματα στο κώδικα μας. Για παράδειγμα αν θέλουμε να τοποθετήσουμε μια έτοιμη for στον κώδικα μας με τη βοήθεια του snipMate, πολύ απλά γράφουμε τη λέξη for και αμέσως μετά πατάμε το πλήκτρο TAB ... φυσικά, άλλο να σας το λέω και άλλο να το βλέπετε εν δράση... οπότε δείτε το βίντεο:

snipMate.vim Introductory Screencast from Michael Sanders on Vimeo.

10 Απρ 2011

Πρόταση: Συγκέντρωση βίντεο παρουσιάσεων σε ένα site

Με αφορμή το φεστιβάλ Ανοικτού Κώδικα και Ελεύθερου Λογισμικού (OpenFest), που διοργανώνεται αυτές τις μέρες στο ΑΤΕΙ Πειραιά και βλέποντας τις προσπάθειες που γίνονται από τα παιδιά για την προβολή βίντεο των παρουσιάσεων (είτε παλαιότερων, είτε μέσω live stream) θα ήθελα να κάνω μια πρόταση. Θα μου άρεσε πάρα πολύ, να έβλεπα συγκεντρωμένα σε ένα site, βίντεο παρόμοιων εκδηλώσεων όπως των: OpenFest, Fosscomm, TasPython, της εταιρίας ΕΛ/ΛΑΚ, της ένωσης Ελλήνων χρηστών και φίλων ΕΛ/ΛΑΚ, και άλλων. Θα μπορούσε για παράδειγμα να υπάρχει μια ομάδα (ή ομάδες) που θα είναι υπεύθυνη για τη λήψη και ανέβασμα των βίντεο που αφορούν εκδηλώσεις ελεύθερου λογισμικού σε ένα μέρος! 
Ήδη άρχισα να μαζεύω κάποιες παρουσιάσεις που βρήκα από ελληνικές εκδηλώσεις στη κατηγορία "Multimedia"... θα προσπαθήσω όσο μπορώ να ενημερώνω τη λίστα, αν και πιστεύω ότι καλό θα ήταν να γίνει κάτι πιο οργανωμένο.