Libreoffice Calc | Funzione LEFT(), RIGHT(), MID()

In Libreoffice Calc si possono usare alcune funzioni per gestire testi (Stringhe).

Supponiamo di avere un campo in cui la data è riportata nella forma GGMMAAAA all’interno di una cella in formato Testo.

Possiamo dividere (splittare) il valore del giorno GG, mese MM e anno AAAA in tre colonne distinte utilizzando le funzioni LEFT(), RIGHT(), e (MID). Le equivalenti versioni in italiano si traducono in SINISTRA(), DESTRA() e STRINGA.ESTRAI(). Vediamo un esempio.

Sia data una cella (supponiamo la cella C7) contente il valore 27012022.

Popoliamo una nuova colonna per il giorno con la funzione:

=SINISTRA(C7;2)

che fornirà come risultato “27”

Popoliamo una nuova colonna per il mese con la funzione:

=STRINGA.ESTRAI(C7;3;2)

che fornirà come risultato “01”

Popoliamo una nuova colonna per il mese con la funzione:

=DESTRA(C7;4)

che fornirà come risultato “2022”

Gnome 3 | visualizzare le icone sul desktop

In Gnome 3 le icone non sono visibili sul desktop (per impostazione predefinita). Per visualizzarle installare il pacchetto “gnome-tweak-tools” e avviarlo. Cliccare sulla sezione “Desktop” e posizionare su “On” la voce “Icone sulla scrivania“.

django | collegarsi al server web di lavoro (python) da client remoto

Quando si sviluppano applicazioni con django si ha a disposizione un server web “temporaneo” che si avvia con il comando:

$ python manage.py runserver

ed e’ raggiungibile all’indirizzo:

http://lcoalshot:8000

Se vogliamo accedervi da remoto bisogna lanciare prima il comando (sulla macchina client):

$ ssh -L 8888:127.0.0.1:8000 nome_utente@indirizzo_ip_server

per esempio:

$ ssh -L 8888:127.0.0.1:8000 sit@192.168.168.1

A questo punto possiamo collegarci mediante il browser puntando a:

http://localhost:8888

PS: E’ necessario avere avviato in precedenza il servizio con:

$ python manage.py runserver

sulla macchina host

WiiLDOS | configurazione xrandr per scheda grafica VGA e DVI

Wiildos e’ un sistema operativo basato su Lubuntu (interfaccia LXDE) che incompora una serie di applicazioni e servizi che consentono di creare una lavagna interattiva multimediale utilizzando qualsiasi superficie (muro, foglio, parete, supporto in legno,….), un videoproiettore, un telecomando della Wii ed un computer. Per i dettagli sul funzionamento di tutto il sistema rimando alla pagina ufficiale del progetto.

Ho dato una mano per l’installazione di questo sistema nella scuola di mie figlie ed ho toccato con mano un po’ tutte le fasi, dall’applicazione dei supporti per i videoproiettori, alla configurazione del software. Riporto in questo post (e spero anche in altri che seguiranno) alcuni appunti che magari possono tornare utili ad altri.

I pc sono dotati di scheda grafica con doppia uscita VGA/DVI. I proiettori sono collegati alla porta VGA (si tratta di videoproiettori Epson EB-X03 con risoluzione 1024×768), alla porta DVI sono collegati i monitor. Questo consente di gestire il pc anche da monitor nel caso ci fossero problemi con il videoproiettore.

Inizialmente si sono presentati alcune difficoltà: l’immagine non veniva “aggiustata” in maniera corretta su monitor e proiettore (una parte della videata veniva “mangiata” e si era costretti a spostare il mouse a destra e a sinistra per visualizzare tutto lo schermo).

Armeggiando con xrandr alla fine ho visto che poteva andare bene una impostazione del genere:

$ xrandr –output DVI-I-0 –mode 1024×768 –pos 0x0 –same-as VGA-0

dove DVI-I-0 e’ il nome della porta DVI e VGA-0 il nome della porta VGA (i nomi delle porte si recuperano lanciando il comando: $ xrandr -q)

Per fare in modo che all’avvio vengano prese queste impostazioni modificare il file “autostart” che si trova in “/etc/xdg/lxsession/Wiildos/”.

$ sudo leafpad /etc/xdg/lxsession/Wiildos/autostart

e inserire alla fine la seguete stringa:

@xrandr –output DVI-I-0 –mode 1024×768 –pos 0x0 –same-as VGA-0

Riavviando il sistema tutto sembrava sistemato. Tuttavia, dovendo sistemate 4 postazioni, succedeva che in un paio di queste (l’hardware dei 4 sistemi e’ pressochè identico, ma evidentemente qualcosa non torna) l’avvio andava liscio 2 volte su 3. Per queste postazioni sono state creati dei lanciatori per “Aggiustare” monitor e proiettore. Di seguito riporto i passi seguiti.

– Andare alla sezione “Preferenze” -> “Editor del menu”
– Posizionarsi su “Preferiti” (icona a forma di stella)
– Fare click su “Aggiungi lanciatore”. Nella scheda “Impostazioni generali”, vicino all’icona a forma di ingranaggio, inserire un nome per il lanciatore (nel nostro caso “Giustifica monitor”) e nella riga sottostante inserire una descrizione (nel nostro esempio: “imposta la risoluzione dello schermo a 1024×768”).
– Nella voce “Comando” inserire la seguente stringa:
xrandr –output DVI-I-0 –mode 1024×768 –pos 0x0 –same-as VGA-0

– Lasciare il resto inalterato
– Click sull’icona “Salva tutte le modifiche” che si trova in alto a sinistra
– A questo punto troveremo una nuova icona a forma di ingranaggio nella scheda “Preferiti” di Wiildos; e’ possibile personalizzarla tramite click destro su di essa e modificando le proprietà.

In questo modo, nel caso in cui il settaggio automatico del monitor non dovesse funzionare e’ sufficiente fare click sull’icona del lanciatore appena creato per giustificare l’immagine.

 

raspberry pi | prima installazione

logo raspberry pi

Ho acquistato un raspberry pi (versione 512 MB RAM o modello B). Riporto alcuni passaggi importanti per la prima installazione.

Innanzitutto bisogna installare il sistema sulla scheda SD (ho provato con due schede: una da 8 GB e l’altra da 16 GB).

I passi che descrivo sono stati provati su Debian testing.

1) autenticarsi come root e prima di inserire la scheda SD nello slot digitare:

# fdisk -l

compare un elenco delle memorie (hd) presenti

2) inserire la scheda SD: alla richiesta di montare la memoria di massa confermare con “ignora”

3) impartire nuovamente il comando:

# fdisk -l

dovrebbe comparire un messaggio simile al seguente (memoria SD da 8 GB):

/dev/mmcblk0p1

/dev/mmcblk0p2

3) passiamo ora alla creazione delle partizioni mediante il programma “fdisk”. Digitare:

# fdisk /dev/mmcblk0

In questo modo entriamo nel programma “fdisk” che ci accoglie con il messaggio

Command (m for help):

A questo punto digitiamo “d” per eliminare (“d” sta per “delete”) le eventuali partizioni presenti; quindi a console avremo:

Command (m for help): d

selected partition 1

4) poi dare il comando “p” (per vedere le partizioni presenti) e non dovremmo avere messaggi di risposta. Significa che le partizioni sono state cancellate

5) creiamo una singola partizione con “n” (“new”), poi “p” per vedere la partizione creata e poi “1”. Battere 2 volte “invio” confermando i valori riportati: 2048 e 15523839

6) cambiamo il tipo di file system. Digitiamo “t”, poi “l” e poi “b”. In questo modo indichiamo di creare una partizione FAT 32.

7) verifichiamo con “p” nuovamente

8) scriviamo la tabella delle partizioni con “w”

9) formattiamo la scheda SD con il comando:

# mkfs.vfat /dev/mmcblk0p1

10) quando torna il cursore sul terminale espellere la scheda SD e reinserirla; questa volta, alla richiesta di aprire la memoria di massa confermare con “ok”

11) come utente (non root) possiamo impartire il comando:

$ mount | grep -i mmcblk0p1

per vedere dove è stata montata la memoria; dovremmo ottenere un messaggio del tipo:

/dev/mmcblkop1 on /media/sit/092……(e altro codice)

12) entriamo nella directory indicata:

$ cd /media/sit/ 092….

13) decomprimiamoci all’interno il file NOOBS scaricato da qui

$ unzip /percorso/al/file/NOOBS_v1_3_4.zip

seguiranno una serie di messaggi; alla fine usciamo dalla directory:

$ cd

14) smontiamo la scheda SD

# umont /dev/mmcblk0p1

e inseriamo la scheda nel nostro raspberry. Accendiamolo dopo averlo collegato ad un monitor/TV via HDMI e seguiamo le istruzioni. Possiamo installare uno o più sistemi. Io ho provato Raspbian e Openelec (quest’ultimo con XBMC è un formidabile media center).

scp

Aggiungo qualche promemoria sull’utilizzo di scp (secure copy).

– Eseguire la copia di un file da host locale a host remoto:

$ scp nome_file utente@IP_ADDRESS_HOST_DESTINAZIONE://percorso/alla/dir/di/destinazione/

per copiare una intera directory aggiungere l’opzione “r” prima della sorgente dati, per esempio:

$ scp -r nome_directory utente@IP_ADDRESS_HOST_DESTINAZIONE://percorso/alla/dir/di/destinazione/

– Eseguire la copia di un file da host remoto a host locale:

$ scp utente@IP_ADDRESS_HOST_REMOTO://percorso/alla/dir/di/origine /percorso/alla/dir/di/destinazione/

qualche tips su django

Rimozione django

Per rimuovere django installato da sorgenti (nel caso si voglia installare una versione piu’ recente, per esempio) basta trovare la directory “django” e cancellarla. Per trovarla impartire il comando:

sit@debian:~$ python -c “import sys; sys.path = sys.path[1:]; import django; print(django.__path__)”

che nel mio caso restituisce:

[‘/usr/lib/pymodules/python2.6/django’]

MD_PYTHON ERROR in django

Dopo un blocco inaspettato del server (durante un processo di rsync) il gestionale django installato riportava il seguente errore:

MOD_PYTHON ERROR

…………..

…………..

Import Error: Could not import settings ‘my_app.settings’ (Is it on sys.psth? Does it have syntax error?): No module named myapp.settings

Dopo avere cercato in rete ho trovato che la causa di questo messaggio potrebbe essere:

– file di configurazione di apache errato;

– sys.path sbagliato;

– permessi non corretti su cartelle e files del progetto (permessi che inibiscono all’utente www-data di leggere i file di settings);

– bug nel codice django.

Prima di procedere ho provato a replicare l’aplicativo sul portatile (compreso db postgresql colllegato) e tutto funzionava a modino (NB: stesso SO Debian stable).

Quindi ho confrotato il file di configurazione di apache (/etc/apache2/apache2.conf”) e sono identici; quindi il problema non sta li;

ho confrontato il sys.path delle due macchine: per farlo ho lanciato una shell python, poi:

>>> import os, sys

>>> print sys.path

ed i risultati sono identici: quindi anche la seconda ipotesi e’ scartata.

Anticipo che il bug nel codice django e’ da escludere a priori visto che sul portatile gira senza problemi. Rimangono da verificare i permessi sulle cartelle del progetto.

Infatti confrontando i listati di “ls -l” sulle due macchine si nota che la directory “/home/user/” ha dei permessi differenti (nel server e’ inibita la lettura a tutti. Molto probabilmente durnate l’operazione di rsync lanciato da root ha modificato i diritti di accesso durante; il blocco del server causato da un down temporaneo della rete ha messo in lock anche le directory interessate). Cambiando questa impostazione con:

$ chmod 751 -R /home/user/

tutto e’ andato a posto

Da Postgresql 8.3 e Postgis 1.3.3 a Posgresql 8.4.11 e Postgis1.5.1 su Debian stable

Con questo post volevo tenere traccia della procedura di aggiornamento e migrazione dati da Postgresql 8.3 e Postgis 1.3.3 a Posgresql 8.4.11 e Postgis1.5.1.

Ho seguito questa utilissima pagina wiki

Sul nostro server “girano” attualmente Postgresql 8.3 e Postgis 1.3.3.

1- Facciamo dapprima il backup dei database presenti (il comando va lanciato per ogni db presente nel cluster).

$ PGUSER=postgres pg_dump -Fc nome_db > /percorso/alla/dir/di/dump/nome_db.dmp

NB: pg_dump con l’opzione -Fc crea un archivio compresso (un tar compresso con gzip, ovvero un tar.gz).

Nel caso si trattasse di db non spaziale e’ sufficiente dare:

$ PGUSER=postgres pg_dump -c nome_db > /percorso/alla/dir/di/dump/nome_db.sql

2- Stoppiamo Postgresql-8.3 (come root):

# /etc/init.d/postgresql stop 8.3

3- Installiamo Postgresql-8.4 e Postgis-1.5

# aptitude install postgresql-8.4 postgresql-8.4-postgis

A questo punto (non ricordo purtroppo tutte le fasi che ho percorso) al comando di stop de nuovo postgresql-8-4 compariva un errore. Ho provato a reinstallarlo ma a questo punto ottengo:

# Error: move_conffile: required configuration file /var/lib/postgresql/8.4/main/postgresql.conf does not exists.

Decido allora di reinstallare tutto ma succede il fattaccio. Non si riesce piu’ a lanciare postgresql-8-3. Il messaggio d’errore diceva che non esiste piu’ la directory “/var/lib/postgresql/8.3/main” panic…..praticamente mi e’ sparito tutto il cluster di postgresql-8.3, fumato!

Ok, pero’ i backup li ho e decido di fare un purge profondo prima di ripartire. Cerco tutti i pacchetti relativi a Postgresql.

# dpkg -l | grep postg

e rimuovo tutto con:

# aptitude purge postgresql-8.3 postgresq-8.4 postgresql-client-8.3 postgresql-client-8.4 postgresql-client-common postgresql-common postgresql

Rimuovo anche tutte le directory di sistema:

# rm -r /etc/postgresql/

# rm -r /etc/postgresql-common/

# rm -r /var/lib/postgresql/

poi togliamo manualmente l’utente “postgres” dal file “/etc/passwd” (mediante “# nano /etc/passwd” e modificando il file eliminado la riga di interesse).

Quindi reinstallo tutto con:

# aptitude install postgresql-8.4 postgresql-8.4-postgis (che si tira dietro anche tutte le dipendenze del caso)

A questo punto possiamo recuperare i dump fatti. Per fare questo ci viene in aiuto uno script in perl che si installa con postgis-1.5 (new_postgis_restore.pl).

Prima si devono ricreare i database vuoti (con lo stesso nome di quello di partenza). Essendo tutti db spaziali creiamo dapprima un template spaziale che chiamiamo “template_gis” e lo useremo poi per creare ogni db.

Come utente postgres creiamo anche gli utenti dei db stessi:

$ su

# su postgres

(come utente postgres) # psql template1; (si entra in un db qualsiasi per creare gli utenti)

=# CREATE USER nome_utente WITH PASSWORD ‘secret’ CREATEDB CREATEUSER;

Creo il nuovo database che diventaera’ il template (sempre come utente postgres):

=# CREATE DATABASE template_gis template=template0;

Usciamo dal db (<CTRL>d) e (sempre come utente postgres) importiamo in esso le funzioni spaziali:

# psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql -d template_gis

poi

# psql -d template_gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql

A questo punto rientriamo in template1:

# psql template1;

e facciamo in modo che il nuovo db sia un template usabile in futuro:

# UPDATE pg_database SET datistemplate=’t’ WHERE datname=’template_gis’;

ok, ora possiamo creare tutti i nostri db in base a questo template.

# CREATE DATABASE nome_db template=template_gis OWNER nome_utente; (questo va fattoper ogni db)

Quindi popoliamo i db con lo script perl citato prima (come utente normale):

$ /usr/share/postgresql/8.4/utils/new_postgis_restore.pl  /percorso/alla/dir/di/dump/nome_db.dmp | psql nome_db

Vedremo scorrere sul terminale una serie di istruzioni (il db si sta popolando). Fatto.

Alla fine (nel mio caso) ricordarsi di modificare i file “/etc/postgresql/8.4/main/postgresql.conf” e “/etc/postgresql/8.4/main/pg_hba.conf”.

Per il primo decommentare la riga relativa a “listen_addresses” e inserire l’asterisco al posto di “localhost” come riportato:

#——————————————————————————
# CONNECTIONS AND AUTHENTICATION
#——————————————————————————

# – Connection Settings –

listen_addresses = ‘*’                  # what IP address(es) to listen on;

………………

Per il secondo (nella parte finale del file):

# Database administrative login by UNIX sockets
local   all         postgres                          ident

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# “local” is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         0.0.0.0/0             trust
# IPv6 local connections:
host    all         all         ::1/128               trust

altrimenti non sono consentiti connessioni da altri client (nel primo file) e l’esecuzione di pg_dumpall (nel secondo file)


linux | qualche tip, qualche trick…

rename

comando per rinominare uno o piu’ file; in particolare mi e’ tornato utile per rinominare una serie di immagini che presentavano alcune lettere maiuscuole, altre minuscole. Per riportare tutto a minuscolo:

$ rename ‘y/A-Z/a-z/’ *

In questo modo tutti i file presenti nella dir corrente vengono trattati e rinominati in lowercase.

Per rinominare una serie di file modificando soltanto una parte:

$ rename ‘s/stringa_vecchia/stringa_nuova/’ *

primo script in python | da gradi sessagesimali a gradi decimali

Pubblico il mio primo timido script “operativo ” in python. E’ frutto di un misto tra studio e tentativi vari spulciando tutorial in rete, un piccolo pocket libro e il famoso “diveintopython” :-).

Il lavoro che presento è l’evoluzione del piccolo script che, attendendo gli input dell’utente, converte i gradi, primi e secondi di un angolo in formato sessagesimale (una coordinata geografica in lat-lon per esempio) in formaro decimale (molto utile per l’elaborazione in molti programmi GIS).

In questo secondo step invece viene letto un file in formato .CSV contenente gli angoli nel formato gradi, primi, secondi (con la virgola come separatore) e viene generato un nuovo file (.CSV) con gli angoli convertiti nella forma decomale. Ecco lo script:

========================

from __future__ import division
angoli= open( “/home/sit/python/angoli.txt”, “r” ) # apre in lettura il file che contiene gli angoli da elaborare
angoli_trasformati=open(“/home/sit/python/angoli_trasformati.txt”, “w”) # genera un nuovo file che conterra’ i risultati
for angolo in angoli:
try:
g, p, s = angolo.strip().split( “,” ) # crea una tupla eliminando eventuali spazi tra valori e separandoli (i valori) con una virgola “,”
res =  float(g), float(p), float(s), (float(g)+(((float(s)/60)+float(p))/60)) # calcola il valore dell’angolo in formato decimale
print res
print>>angoli_trasformati, res # restituisce l’output sul file creato in precedenza
except ValueError:
pass
angoli.close() # chiude lo stat sul file aperto
angoli_trasformati.close() # chiude lo stat sul file generato

========================

ogni commento e’ benvenuto