Category Archives: Υπολογιστές – Πληροφορική

Άρθρα σχετικά με υπολογιστές και πληροφορική

Ξύπμηνμα (resume) μετά από αδρανοποίηση(suspend) σε ubuntu 16.04 με διπλή (DUAL) VGA Intel/Nvidia

Στο Laptop μου Lenovo G70-70 δεν μπορούσα να κάνω resume μετά από suspend. Ακόμη το laptop διαθέτει διπλή VGA μια Intel και μια NVIDIA:

pcmagas@pcmagas-Lenovo-G70-70:~$ lspci | egrep "3D|VGA"
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
03:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M] (rev ff)

Tο έλυσα ακολουθώντας τα εξής βήματα:

  1. Πρώτα στo dash έψαξα για «Nvidia»:Icon shown in dash
  2. Στο παράθυρο που μου άνοιξε επέλεξα και επέλεξα την επιλογή «PRIME PROFILES» και αργότερα την Intel κάρτα:
  3. Μετά αποσυνδέθηκα και ξανασυνδέθηκα στο λογαριασμό χρήστη που ανοίκει ο υπολογιστής μου.

Banzai επιτέλους μπορώ να κάνω suspend σαν κύριος.

Σημείωση:

Το παραπάνω λειτουργεί εάν χρησιμοποιείτε τον ιδιοταγή οδηγό για κάρτες Nvidia.

Εγκαταστήστε μια ποιο Λειτουργική έκδοση του Openshot Video editor σε Ubuntu 16.04

Εάν είχατε εκτελέσει στο παρελθόν την εντολή:

sudo apt-get install openshot

Η ακόμη και μέσω του κέντρου λογισμικού.

Θα σας εγκαταστήσει το πρόγραμμα openshot για επεξεργασία βίντεο, αλλά μετά από λίγα λεπτά μάλλον θα συμπεριφερόσασταν κάπως ασεβή ως προς την εορτάζουσα super-Αγία που εορτάζει στις 15/8 κάθε έτους ;), ενώ παράλληλα θα μεγιστοπιείσετε τα gs/s που μπορείτε να παραξετε.

Cool, για να παίξει χρειάζεστε μια νεότερη έκδοση αυτού του λογισμικού. Κατ’ αρχάς αποθηκεύστε την τρέχουσα εργασία σας Κύριε Μελλοντικέ Spielberg 😉 και κλείστε το λογισμικό μετά εκτελέστε την παρακάτω εντολή:

sudo apt-get purge openshot

Μετά εκτελέστε μια μια τις παρακάτω εντολές:

sudo add-apt-repository ppa:openshot.developers/ppa
sudo apt-get update
sudo apt-get install openshot-qt 

Πλέον μπορείτε να δημιουργήσετε σαν καλλιτέχνης ;).

Δημιουργία android εφαρμογών με ionic σε debian9

Στην αναζήτηση ενός ελευθέρου λογισμικού sdk (που επί το πλείστον είναι ελεύθερο αλλά έχει κάποια γ%^&*%^^& ιδιοταγή blobs) ήρθα σε αυτήν την σελίδα: https://wiki.debian.org/AndroidTools που ουσιαστικά είναι η προσπάθεια κάποιον ατόμων από την κοινότητα του debian να υπάρχει 100% ελεύθερο android sdk.

Προς τιμήν της προσπάθειας αυτής θα σας δείξω το πως να κάνετε εφαρμογές android με την χρήση του ionic framework και του 100% κελευθέρου android sdk. Ακόμη να σημειώσουμε ότι ο παρακάτω οδηγός λειτουργεί σε debian9 stable. (Όχι πως με την χρήση containers δεν μπορεί να τρέξει σε όποιο distro θες 😉 )

Κατ αρχάς θα πρέπει να εγκαταστήσουμε το πολυπόθητο ελέυθερο SDK:

  1. Εγκαταστήστε το με:sudo apt install android-sdk android-sdk-platform-23
  2. Εξάγετε την μεταβλητή περιβάλλοντος: export ANDROID_HOME=/usr/lib/android-sdk *

* Η εντολή αυτή μπορεί να μπει στο αρχείο ~/.bashrc για ποιο μόνιμες αλλαγές 😉

Εφόσον το εγκαταστήσαμε θα χρειαστεί να έχουμε το εκτελέσιμο npm:

  1. Πρώτα προσθέστε το αποθετήριο για μια ποιο πρόσφατη έκδοση του npm:
    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
  2. Μετά εγκαταστήστε την nodejs (που εγκαθηστά και το npm):
    sudo apt-get install -y nodejs
  3. Ουκ ολίγες npm βιβλιοθήκες χρειάζοντε το παρακάτω πακέτο:
    sudo apt-get install -y build-essential

Μετά σύμφωνα με το site του ionic θα πρέπει να εκτελέσετε την παρακάτω εντολή (εάν δεν έχετε εγκατεστημένο το ionic framework):

npm install -g cordova ionic

Πλέον μεταβείτε στο κατάλογο του ionic project σας:

cd ^path του project σας^

Σε περίπτωση που δεν έχετε κάνει project δείτε στο http://ionicframework.com/getting-started/ για το πως θα κάνετε το δικό σας ionic project.

Όπως και να έχει θα πρέπει να ορίσετε σαν πλατφόρμα το android:

ionic cordova platform add android

Εφόσον το κάνετε θα πρέπει να προβείτε στις εξής ενέργειες:

  1. Μεταβείτε στο φάκελο platforms που είναι εντός του project σας
  2. Στο αρχείο AndroidManifest.xml ορίστε εκεί που λέει android:targetSdkVersion την τιμή 23
  3. Στα αρχεία project.properties και CordovaLib/project.properties ορίστε εκεί που λέει target την τιμή android-23

Πλέον μπορείτε να χτίσετε την εφαρμογή σας με την εντολή:

ionic cordova build android

Και ας αρχίσει το πάρτυ!!!!!!!!!!!

Δημιουργήστε χώρο swap σε GNU/Linux όταν δεν υπάρχει χωρίς αλλαγή partition.

Στον υπολογιστή της εργασίας μου λόγο ότι τα 8GB δεν μου αρκούν για το λογισμικό το οποιό τρέχω ξέμενα εύκολα από μνήμη. Ακόμη παρατήρησα ότι κατα την εγκατάσταση κάπως δεν δημιουργήθηκε SWAP χώρος (ίσως να παίζει λόγο ότι το λειτουργικό είναι σε SSD δίσκο εξ ολοκλήρου). Έτσι λοιπόν προκειμένου να εκμεταλευτώ την ταχύτητα του SSD σαν επέκταση της μνήμης έκανα ένα αρχείο το οποίο εκμεταλεύτικα σαν SWAP.

H διαδικασία η οποία ακολούθησα ήταν:

  1. Να δημιουργήσω ένα αρχείο γεμάτο 0 μεγέθους 16GB:
    sudo dd if=/dev/zero of=/mnt/16GB.swap bs=16024 count=1048576
  2. Nα το κάνω swap
    sudo mkswap /mnt/16GB.swap
  3. Να του περιορίσω τα δικαιώματα:
    sudo chmod 0600 /mnt/16GB.swap
  4. Και να ορίσω στο λειτουργικό που να κοιτά για swap:
    sudo swapon /mnt/1GB.swap
  5. Τέλος το όρισα οριστικά σαν swap στο αρχείο /etc/fstab με την παρακάτω γραμμή στο τέλος της για να έχω τον χώρο σε κάθε εκκίνηση:
    /mnt/16GB.swap         swap            swap    defaults        0 0

Πιθανές ερωτήσεις:

  1. Και καλά ρε κομπάρε τι θα κάμνω εαν ηθέλο περισσότερο η λιγότερο swap;

    Από τα παραπάνω βήματα στο πρώτο βήμα όρισε πόσα MEGABYTES χώρου swap θες απλά ορίζοντας την παράμετρο bs= με την κατάλληλη τιμή πχ εάν θές 1GB swap η εντολή θα γίνει:

    sudo dd if=/dev/zero of=/mnt/16GB.swap bs=1024 count=1048576
  2. Μπορώ να έχω άλλο αρχείο πέραν του /mnt/16GB.swap .

    Ναι μπορείς απλά να θυμηθείς να ορίζεις την κατάλληλη ΠΛΗΡΗΣ διαδρομή του αρχείου που επιθυμείς αντί για /mnt/16GB.swap .

Εγκατάσταση Βιβλιοθήκης GDAL για εφαρμογές γεωπληροφορικής

Η βιβλιοθήκη GDAL είναι το Α και το Ω στον τομέα της Γεωοληροφορικής. Όμως πως την εγκαθιστούμε στο Ubuntu GNU/Linux μηχάνημα μας; Απλά ακολουθήστε τα βήματα.

Κατ αρχάς θα πρέπει να εγκαταστήσουμε τις εξαρτήσεις:


sudo apt-get install gcc g++ make python-pip

Μετά θα κατεβάσουμε τον πηγαίο κώδικα της βιβλιοθήκης και θα τον μεταγλωτήσουμε.Όλες οι εκδόσεις της βιβλιοθήκης είναι στο https://trac.osgeo.org/gdal/wiki/DownloadSource. Συνήθως βολεύει το url της μορφής:

http://download.osgeo.org/gdal/X.X.X/gdal-X.X.X.tag.gz

Που όπου ‘Χ.X.X’ αντικαθιστάτε με τον κατάλληλο αριθμό έκδοσης πχ. 2.1.0. Στο άρθρο όπου δείτε Χ.Χ.Χ το αντικαθιστάτε με την θεμιτή έκδοση.

Έτσι στο τερματικό μας εκτελούμε:

wget http://download.osgeo.org/gdal/X.X.X/gdal-X.X.X.tag.gz

Και το αποσυμπιέζουμε το αρχείο με την εντολή:

tar -xvf gdal-X.X.X.tar.gz

Και μεταβάινουμε στον φάκελο:

cd gdal-X.X.X

Και εκτελούμε την γνωστή τριάδα για την μεταγλώττιση και εγκατάσταση της βιβλιοθήκης:

./configure
make
sudo make install

Εφόσον δεν μας πετάξει κάποιο σφάλμα τότε εκτελούμε την παρακάτω εντολή για να εγκαταστήσουμε τις εξαρτήσεις (bindings) για την python:

pip install GDAL==X.X.X

Αργότερα τρέχεις:

export LD_LIBRARY_PATH="/usr/local/lib/:/usr/lib"

Προκειμένου η python να εντοπίσει την βιβλιοθήκη.

Σε περίπτωση που χρησιμοποιείτε σαν IDE το Pycharm κάντε τα εξής βήματα:

  1. Επίλεγετε «Run» -> «Edit Configurations» (βλ εικόνα)
  2. Στο Παράθυρο που μας ανοίγει επίλεξτε το κουμπί «…» εκεί που λέει «Enviromental Variables»
  3. Μετά κάντε κλικ στο κουμπί «+» και μετά Ορίστε σαν name «LD_LIBRARY_PATH» και σαν τιμή «/usr/local/lib/:/usr/lib» χωρίς τα «
  4. Πλέον πατήστε «οκ» σε όλα τα ανοικτά υπο-παράθυρα και πατήστε τo κουμπί Run προκειμένου να τρέξει το πρόγραμμα

Για μονιμότερο ορισμός της μεταβλητής παραμέτρου (enviromental variable) μπορείτε να βάλετε την εντολή:

export LD_LIBRARY_PATH="/usr/local/lib/:/usr/lib"

είτε στο τέλος του αρχείου «~/.profile» για να είναι ρυθμισμένο μόνο στον χρήστη σου είτε στο τέλος του αρχείου «/etc/profile» προκειμένου να είναι ορισμένη για όλους τους χρήστες του συστήματος.

Μετάφραση custom wordpress θέματος με την χρήση του poedit.

Πολλές φορές θέλουμε πολυγλωσσική υποστήριξη από το υπάρχων wordpress θέμα μας. Ο ποιο ασφαλής τρόπος να γίνει αυτό είναι με την χρήση αρχείων .po ή .pot που υποστηρίζει το GNU gettext. Δε ο τρόπος αυτός ενδείκνυται και σε ανάπτυξη μη-wordpress σελίδων και εφαρμογών.  Στο άρθρο αυτό θα σας δείξουμε βήμα – βήμα πως να μεταφράσετε το το ήδη υπάρχων θέμα που μόλις δημιουργήσατε.

Κατ αρχάς θα πρέπει να εγκαταστήσουμε το poedit σε Ubuntu GNU/Linux γίνετε με την εντολή:

sudo apt-get install poedit

Για τις υπόλοιπες διανομές GNU/Linux κοιτάξτε στα εκάστοτε αποθετήρια εάν δεν υπάρχει η τρέχετε windows μπορείτε να το κατεβάσετε και να το εγκαταστήσετε από το https://poedit.net/download . Δε για wordpress παρόλο που ΔΕΝ είναι απαραίτητο υπάρχει η επί πληρωμή έκδοση του poedit που έχει καλύτερη υποστήριξη.

Εφόσον το εγκαταστήσετε θα πρέπει να εκτελέσετε τα εξής όπως φαίνεται στο παρακάτω παράδειγμα. Για τις ανάγκες του παραδείγματος θα σας δείξω πως μετέφρασα το testTheme θέμα που ανέπτυξα για εκπαιδευτικούς σκοπούς.

Κατ’ αρχάς θα πρέπει τα αρχικά προς μετάφραση strings στον php & html κώδικα του θέματος να είναι στα αγγλικά. Δε να περικλείονται από tags και να έχουν την εξής μορφή _e(‘Untranslated string’). Πχ. Ας πούμε πως κάπου στα php αρχεία του θέματός μας έχουμε:

<h1>Goodmorning</h1>

Θα πρέπει να γίνει:

<h1><?=_e('Goodmorning')? ></h1>

Εφόσον το κάνουμε αυτό ΓΙΑ ΟΛΑ τα string που θέλουμε να μεταφράσουμε τότε εκτελoύμε το poedit. Θα μας εμφανιστεί το εξής παράθυρο (περιβάλλον στα Ελληνικά)

Τότε από το μενού επιλέγουμε Αρχείο -> Νέο

Και στο παράθυρο που μας ανοίγετε επιλέγουμε την γλώσσα που επιθυμούμε για Ελληνικά επιλέγουμε «Ελληνικά (Ελλάδα)» όπως βλέπετε στην παρακάτω εικόνα.

Και μετά κάνουμε κλίκ στο «Αποθήκευση».  Στο παράθυρο που μας ανοίγετε επιλέγουμε την διαδρομη «^εκεί που είναι εγκατεστημένο το wordpress^/wp-content/languages/themes/όνομα_theme-el.po»  πχ στην περίπτωσή μου το wordpress είναι εγκατεστημένο στον φάκελο «/home/pcmagas/Kwdikas/php/htdocs/wordpress» έτσι η μετάφραση του θέματος μου θα είναι στην διαδρομή «/home/pcmagas/Kwdikas/php/htdocs/wordpress/wp-content/languages/themes/testTheme-el.po»

Μετέπειτα θα πρέπει να ρυθμίσουμε το που θα είναι τα αρχεία κειμένου που θα θέλουμε να μεταφράσουμε. Αυτό γίνετε κάνοντας κλίκ στο κουμπί όπως βλέπετε στην παρακάτω εικόνα:

Αργότερα κάνουμε κλίκ στα εξής όπως δείχνει η παρακάτω εικόνα, το θέμα μας θα είναι σε έναν στον φάκελο «^εκεί που είναι εγκατεστημένο το wordpress^/wp-content/themes/^όνομα_θέματος^» πχ. στην περίπτωσή μου είναι το «/home/pcmagas/Kwdikas/php/htdocs/wordpress/wp-content/themes/testTheme» . Σημείωση να επιλέξουμε την καρτέλα «Λέξεις-κλειδιά των πηγών» μετά την επιλογή του φακέλου που είναι το θέμα μας:

Στην Καρτέλα «Λέξεις-κλειδιά των πηγών»  κάνουμε κλικ στο κουμπί που μας δείχνει η παρακάτω εικόνα και στο πεδίο που μας υποδεικνύει πληκτρολογούμε «_e» (χωρίς τα εισαγωγικά) Μετά πατάμε το κουμπί «Εντάξει». Πλέον το παράθυρό μας έχει την εξής μορφή, στην παρακάτω εικόνα σας επεξηγώ τα ποιο χρήσιμα πεδία και κουμπιά του UI:

Πλέον μπορείτε να ορίσετε μετάφραση για τα εκάστοτε κείμενα που θέλετε να εμφανίζονται πολυγγλωσικά.

Τα παραπάνω βήματα δοκιμάστικαν στην έκδοση Poedit 1.8.7.1 σε Ubuntu GNU\Linux 16.04.

Στήσιμο και ρύθμιση τοπικού DNS server για ορισμό τοπικών domain.

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

Έτσι λοιπόν στην προσομοίωση λέω ότι και καλά η εταιρεία μου έχει ένα website http://example.com το οποίο είναι public facing και hosted κάπου αλλού και στο «ενδοεταιρικό» μου δίκτυο έχω 2 «ενδοεταιρικές» web εφαρμογές την http://app1.intranet.example.com και την http://app2.intranet.example.com. Προκειμένου να λύσω αυτό το πρόβλημα ύστερα από αναζήτηση λέει ότι θα πρέπει να στήσω τον δικόν μου «ενδοεταιρικό» dns server.

Έτσι λοιπόν σε έναν server που χρησιμοποιώ στο εικονικό «ενδοεταιρικό» δίκτυο που τρέχει ubuntu εγκατέστησα τον bind9 με την δύσκολα-να-μαντέψεις εντολή:


sudo apt-get install bind9 

Εφόσον εγκατασταθεί θα πρέπει να:

  • Ρυθμίσουμε τον σέρβερ να προωθεί ότι domain δεν έχει σχέση με το intranet σε δημόσιους DNS servers
  • Να ορίσουμε DNS ζώνες για τα εσωτερικά domains.

Έτσι ύστερα από ώρες αναζήτησης βρήκα ότι έπρεπε να κάνω τα εξής: Στο /etc/bind/named.conf (για ubuntu 14.04) όρισα τα εξής:


options {
	directory "/var/cache/bind";
	querylog yes;

	// If there is a firewall between you and nameservers you want
	// to talk to, you may need to fix the firewall to allow multiple
	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders.  
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.

	 forwarders {
		8.8.8.8;
		8.8.4.4;
	 };

	//========================================================================
	// If BIND logs error messages about the root key being expired,
	// you will need to update your keys.  See https://www.isc.org/bind-keys
	//========================================================================
	dnssec-validation auto;

	auth-nxdomain no;    # conform to RFC1035
	listen-on-v6 { any; };
};

logging{
 channel default_file {
        file "/var/log/named/default.log" versions 3 size 5m;
        severity dynamic;
        print-time yes;
    };

    category default { default_file; };
    category general { default_file; };
    category database { default_file; };
    category security { default_file; };
    category config { default_file; };
    category resolver { default_file; };
    category xfer-in { default_file; };
    category xfer-out { default_file; };
    category notify { default_file; };
    category client { default_file; };
    category unmatched { default_file; };
    category queries { default_file; };
    category network { default_file; };
    category update { default_file; };
    category dispatch { default_file; };
    category dnssec { default_file; };
    category lame-servers { default_file; };
};

acl "intranet" { 10.42.0.0/24; };
view "intranetView" {
	match-clients { "intranet"; };
	recursion yes;
	zone "intranet.example.com" {
		type master;
		file "/etc/bind/db.intranet";
	};
	include "/etc/bind/named.conf.default-zones";
};

view "outside" {
	match-clients { any; };
	recursion no;	
	include "/etc/bind/named.conf.default-zones";
};

Όπως παρατηρείτε χάριν ευκολίας χώρισα την ρύθμιση σε χρώματα για ευκολότερη μελέτη:

  1. Όσα είναι με αυτό το χρώμα υποδηλώνουν ποιους dns θα προωθεί τα requests για domains τα οποία δεν μπορεί να εξυπηρετήσει ο ίδιος ο bind. Προσωπικά προτείνω την χρήση αυτών των DNS.
  2. Όσα είναι με αυτό το χρώμα υποδηλώνει ρυθμίσεις για logging αυτές οι ρυθμίσεις μπορεί να παρθούν copy paste αλλά για να λειτουργήσουν θα πρέπει να εκτελέσετε τις εξής εντολές:
    sudo mkdir /var/log/named/
    sudo touch /var/log/named/default.log
    sudo chmod uag+w /var/log/named/default.log
    

     

  3. Τέλος όσα είναι με αυτό το χρώμα αποτελεί ρυθμίσεις οι οποίες:
    1. Ρυθμίζουν ποιο δίκτυο θα εξυπηρετεί τι. Εμείς ορίσαμε ότι το «εταιρικό» μας τοπικό δίκτυο (10.42.0.0/24) θα εξυπηρετείτε από το intranetView το οποίο εκεί έχουμε ορίσει τα «ενδοεταιρικά» μας domain που ορίζονται με εγγραφές zone οι οποίες έχουν την εξής μορφή:
      
      zone "^domain που εξυπηρετούν^" {
      		type master;
      		file "^αρχείο ρύθμισης ζώνης^";
      	};
      
    2. Ποιο network θα μπορεί εφόσον συνδεθεί στον σέρβερ να αναζητά για άλλα domain που δεν έχει ζώνη με την ρύθμιση recursion. Εμείς στην παραπάνω ρύθμιση επιτρέπουμε μόνο όσοι προέρχονται από το δίκτυο 10.42.0.0/24; να αναζητούν για άλλα domain.
    3. Και τέλος για να μην σπα σε κάθε view εγγραφή ορίσαμε εγγραφές για της προεγκατεστημένες ζώνες (include «/etc/bind/named.conf.default-zones»;)

Τώρα μας μένει πλέον να ορίσουμε την ζώνη μας για τον δικό μου σκοπό ύστερα από πειραματισμό βρήκα ότι είναι αυτή (αναμένετε εμπλουτισμός στο κομμάτι αυτό):

$TTL 604800
@ IN SOA intranet.example.com. root.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS root.example.com.
@ IN A 10.42.0.1
app1 IN A 10.42.0.1
app2 IN A 10.42.0.1

Όσο αφορά το κομμάτι της ζώνης ακόμα το ψάχνω αλλά προς το παρόν έχετε το παραπάνω σαν template.

Πλέον στον εκάστοτε υπολογιστή στον δίκτυο πρέπει να ορίσετε την Ιp που είναι εγκατεστημένος ο DNS server σαν DNS. Στις περισσότερες διανομές GNU/Linux αυτό γίνεται ως εξής:

  1. Κάνουμε δεξί κλικ στο εικονίδιο του δικτύου.
  2. Επιλέγουμε «Επεξεργασία συνδέσεων»/
  3. Επιλέγουμε την σύνδεσή μας και κάνουμε κλικ στο «Επεξεργασία».
  4. Μετά επιλέγουμε την καρτέλα DNS και ορίζουμε την Ip του μηχανήματος που εγκαταστήσαμε τον Bind server.