eina del dia (o de la nit)

watch

És una petita utilitat que seguint el principi de les ordres de terminal fa una cosa i la fa bé: executa una ordre cada x segons.

Mireu el seu manual (man watch) o la seva ajuda (watch –help) per veure’n totes les opcions.

Per exemple amb “watch -n 10 du -sh *” fareu que cada 10 segons s’executi l’ordre “du -sh *” (saber quan d’espai de disc ocupa tot el que hi ha en el directori des d’on s’executa l’ordre).

Ara ja us podeu imaginar què faig despert a aquestes hores :D

Commits parcials amb git

No us ha passat alguna vegada que mentre esteu escrivint alguna funció nova us adoneu que en una altra funció li falla alguna cosa? Llavors què feu? Un git stash abans de fer cap canvi a l’altre mètode i un cop el teniu arreglat un git stash pop?

Ja no cal!

Sabia que es podia fer però mai m’havia aturat a mirar com es feia:

git add -p

Amb aquesta ordre (i si voleu el fitxer o fitxers) afegireu a l’índex les parts del fitxer que vulgueu. D’aquesta manera si teniu dues parts modificades del codi en un mateix fitxer (la funció que estàveu fent i les quatre línies per arreglar un altre funció) no us cal fer cap cosa estranya per afegir només una part del fitxer, res de fitxers temporals, ni branques, ni deixar coses al porta-retalls, etc etc, senzillament fer una addició de pedaços (d’aquí ve el -p) .

Senzill i MOLT útil. Més de dues, tres i quatre vegades m’hagués estalviat una bona estona d’anar creant fitxers, deixant coses sense desar, etc etc si hagués sabut aquesta opció del git add :)

Millora el temps d’arrencada de l’Evolution

Si utilitzeu l’Evolution, el gestor de correu del GNOME i us sembla que tarda una mica massa en obrir-se proveu aquest consell que comenta en Pacho Ramos al seu bloc:

cd ~/.local/share/evolution

for i in `find . -name folders.db`; do echo “Rebuilding Table $i”; sqlite3 $i “vacuum;” ; done

Només he fet servir la segona part, no tenia ganes de fer un còpia de seguretat per si les mosques :)

Referències amb el LibreOffice calc

No us heu trobat mai amb la situació de que teniu un llibre de càlcul amb un full amb moltes dades tabulades i que des d’un altre full hi voleu accedir-hi?

Eus aquí la sol·lució:

=INDIRECTE(ADREÇA(G12;G13;1;1;”Full4″))

La funció ADREÇA genera una adreça (estil A1 o fullX.$B$1) amb els paràmetres que li passem, de manera que els podem generar dinàmicament, en l’exemple heu d’emplenar els camps G12 i G13 amb els nombres de la fila (G12) i la columna (G13, també com a nombre!).

La funció INDIRECTE agafa una adreça, en aquest cas prèviament generada amb la funció ADREÇA, i ens retorna el seu valor, de manera que si a G12 i G13 i tenim els valors 2 i 3, el resultat d’aquesta fórmula serà el valor que hi ha a la fila 2 columna C (columna 3) del full “Full4″.

Molt útil si teniu un full ple de dades i hi voleu fer càlculs des d’altres fulls.

Micro servidor web amb Python

Tot i que el llenguatge més utilitzat (o en el que pensa gairebé tothom) quan parla de pàgines web és PHP, amb Python també es poden fer pàgines web :D

Un dels grans què del PHP és que engegues el servidor (Apache normalment), poses un fitxer php en algun lloc accessible i boom! ja tens la pàgina funcionant al navegador.
No se si existeix alguna cosa semblant, però amb Python encara ho pots fer més senzill (a mode de test i MAI en producció quedi clar):

from wsgiref.simple_server import make_server

def simple_app(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

# run the server
port = 8000
httpd = make_server('', port, simple_app)
print "Serving on port %i..." % port
httpd.serve_forever()

 

Amb el codi d’aquí sobre en teniu prou d’anar canviant el que hi ha dintre la funció per tenir ja alguna cosa que es mostri en el navegador :)

Ara és el millor moment per construir el GNOME 3.0

Si sou impacients, o senzillament us agrada provar novetats, ja estareu al cas que d’aquí poc sortirà el GNOME 3 amb el GNOME Shell i tot el que això implica.

Mentre les distribucions no empaqueten tots els mòduls que fan falta pel GNOME 3 sempre ens queda l’opció d’utilitzar el JHBuild, un sistema d’automatització de seguiment de dependències, de la compilació dels paquets i de la instal·lació d’aquests.

Teniu una secció específica a la pàgina del GNOME Shell on s’explica tots els pocs passos que cal seguir perquè tingueu l’entorn del JHBuild .

I per què ara és el millor moment? Molt senzill, el GTK+3 ja ha sortit i des de fa ja uns dies/setmanes que tot el codi que s’envia als components principals del GNOME 3 només es permet que siguin pedaços que arreglin coses, no es permet afegir funcions noves, de manera que cada dia que passa la plataforma és més i més estable. Resultat: compilar a partir del codi font és molt més factible i no has de ser cap gurú per poder deixar l’ordinador compilant tots els mòduls necessaris. De fet és tant senzill que el fitxer de configuració del JHBuild que faig servir jo és tant simple com això:

# Directory where to check sources out
checkoutroot = '/opt/gnome-gil/source'

# Directory where to install
prefix = '/opt/gnome-gil/install'

skip = [ ] 
skip.extend ([ 'mozilla', 'firefox', 'dbus', 'hal',
 'NetworkManager', 'PolicyKit', 'PolicyKit-gnome',
 'libgdiplus', 'mono', 'monodoc', 'nss', 'nspr',
 'sqlite3', 'pulseaudio', 'pysqlite2', 'mono-addins',
 'polkit', 'DeviceKit', 'DeviceKit-disks',
 'DeviceKit-power', 'libxml2', 'libxslt', 'libgpg-error',
 'libgcrypt', 'expat', 'libtasn1', 'gnutls',
 'libvolume_id', 'udisks', 'UPower', 'upower', 'evolution-exchange', 'evolution-mapi'
])

Amb això al fitxer ~/.jhbuildrc ja en tindreu prou per començar a compilar el GNOME 3.0.

Aquí us deixo una captura de pantalla1 a mode de fer-vos dentetes a veure si us animeu a compilar-lo:

  1. Sí tinc un usuari que es diu jou per fer-lo servir per fer proves []

Assegura les pàgines web amb SSL

Cada vegada que envies dades per Internet, l’URL d’una pàgina web, un comentari, l’autenticació a una pàgina web… aquestes dades s’estan enviant sense encriptar, de manera que tothom que estigui entre el servidor on et connectes i el teu ordinador amb molt poc esforç pot veure què fas o quin usuari i contrasenya tens.

Per això es van inventar ja fa anys l’SSL, un protocol que funciona sobre HTTP que permet fer comunicacions xifrades d’exterm a extrem de manera que per moltes persones que estiguin pel mig de la comunicació entre el servidor i el vostre ordinador, no podran saber què es comunica.

Per tal de configurar un servidor web perquè enviï les pàgines amb SSL ens fa falta un certificat. Hi ha dues maneres d’aconseguir-lo, o bé pagant a una entitat certificadora perquè ens doni un certificat que tots els navegadors reconeixeran com a segur, o bé, fer-los nosaltres mateixos. Els navegadors no el reconeixeran directament com a segur, però si nosaltres sabem on ens connectem no hi ha problema.

Aquí va la recepta per al segon mètode: fer-ho nosaltres mateixos1.

  • Instal·lem l’OpenSSL a la nostra màquina (ha de ser al propi servidor per facilitar-ho tot)
  • Creem la clau del servidor: openssl genrsa 2048 > server.key2
  • Creem el certificat: openssl req -new -x509 -nodes -sha1 -days 365 -key server.key > server.crt
    • Responem totes les preguntes que ens fa l’auxiliar (són força fàcils :) )
  • Activem el mòdul d’SSL de l’Apache3
  • Ja podem editar la màquina virtual de l’Apache per afegir-li la configuració per SSL. Vindria a ser una cosa a l’estil:
<VirtualHost *:443>
ServerName servidor.guifi.net
ServerAdmin admin@guifi.net
SSLEngine on
# Change the next two lines according to where you've actually
# stored the certificate and key files.
SSLCertificateFile /etc/ssl/apache2/server.crt
SSLCertificateKeyFile /etc/ssl/apache2/server.key

ServerName domain.tld
SSLOptions StrictRequire
SSLProtocol all -SSLv2

DocumentRoot /path/to/ssl/enabled/site
<Directory /path/to/ssl/enabled/site/>
SSLRequireSSL
Order Deny,Allow
Allow from All
</Directory>

Aquí sí que ja serà cada màquina virtual i cada domini que s’haurà de configurar com a un millor li sembli, i sobretot les necessitats que tingui. Els paràmetres clau són els del certificat i clau (SSLCertificateFile i SSLCertificateKeyFile).

Ara ja només us queda fer proves al servidor abans de donar-lo per definitiu. En aquesta fase de proves, i també en producció, us pot ser molt útil tenir fitxers de registres (els famosos logs) diferents si es per SSL o per text pla.

Si voleu per exemple que tot el trànsit sigui per SSL podeu fer un redireccionament de tot el trànsit per text pla a SSL amb:

<VirtualHost *:80>
ServerName servidor.guifi.net
ServerAdmin admin@guifi.net

RewriteEngine On
Redirect permanent / https://servidor.guifi.net
</VirtualHost>
  1. L’única diferència amb fer-ho amb un de pagament és que en comptes de generar el certificat nosaltres ens el dóna l’entitat certificadora []
  2. Com sempre hi ha mil i un paràmetre per jugar-hi si us hi voleu entretenir []
  3. ada distribució és diferent però normalment instal·lant el mòdul mod_ssl des del gestor de paquets ja l’habilita []

git show -3

L’opció show del git serveix per, tal com indica el nom, mostrar diverses coses, entre elles, i en el 99% dels casos, serà veure els commits ja fets.

Per exemple amb “git show” es mostrarà el diff de l’últim commit.

Per sort, com totes les ordres de git tenen moltíssimes variants, de manera que per exemple amb el títol de l’entrada “git show -3” el que farem es veure els tres últims commits per ordre cronològic invers (l’últim primer).

També podem afegir-hi el paràmetre –stat que permet mostrar un llistat de quins fitxers s’han canviat, de manera que es te una visió molt més ràpida del que s’ha fet en el canvi sense entrar en els detalls del diff com a tal.

Amb git show –help teniu tota la resta d’informació per si necessiteu fer altres coses :)