MyPaint e Squeeze. Risoluzione Problemi.


Preso dalla smania di tornare ad una delle mie vecchia passioni, la grafica e il disegno, ho deciso di provare un programma che pare trovare molti consensi nella comunità del softwasre libero: MyPaint.

MyPaint è perfetto per chi come me ha una tavoletta grafica di tutto rispetto (una Wacom) e una passione sfrenata per il disegno a mano libera.

Avendo una Debian Squeeze e sapendo il software si trova nei repository ho dato in pasto ad aptitude il necessario per installarlo:

su
“password”
aptitude install mypaint

e dopo aver confermato la volontà di installare le dipendenze e il necessario (nel mio caso libprotobuf5,libprotoc5, mypaint, mypaint-data, protobuf-compiler, python-protobuf) ho atteso la fine della procedura di nstallazione. Una volta conclusa con successo ho provato a lanciare il software da terminale. Il problema che mi si presentava era che la finestra principale non partiva e la shell mi restituiva il seguente errore:

Traceback (most recent call last):
File “/usr/bin/mypaint”, line 123, in
from gui import main
File “/usr/share/mypaint/gui/main.py”, line 15, in
from gui import application
File “/usr/share/mypaint/gui/application.py”, line 14, in
import filehandling, keyboard, brushmanager
File “/usr/share/mypaint/gui/filehandling.py”, line 17, in
from lib import document, helpers
File “/usr/share/mypaint/lib/document.py”, line 17, in
import command, stroke, layer
File “/usr/share/mypaint/lib/command.py”, line 9, in
import layer
File “/usr/share/mypaint/lib/layer.py”, line 11, in
import tiledsurface, strokemap, strokemap_pb2
File “/usr/share/mypaint/lib/strokemap.py”, line 13, in
import tiledsurface, idletask, strokemap_pb2
File “/usr/share/mypaint/lib/strokemap_pb2.py”, line 10, in
DESCRIPTOR = descriptor.FileDescriptor(
AttributeError: ‘module’ object has no attribute ‘FileDescriptor’

Pare che il problema sia un bug noto riportato anche QUI e che prevede che si debba avere la libreria python-protobuf alla versione 2.3.0-1. Purtroppo i repository di squeeze presentano una versione più vecchia di tale libreria. Il problema è facilemente risolvibile scaricando dai REPOSITORY DI SID la versione giusta. Una volta scaricata provvederemo ad installarla e al termine della procedura potremo usare il nostro amamto MyPaint anche su la versione 5 di debian.

Ringrazio la comunità Debianizzati per l’aiuto tempestivo

Info su software e programmi

Molte volte, quando consulto i forum, trovo utenti che richiedono particolari riguardo un software e più precisamente circa l’uso dei programmi da riga di comando o anche su comandi stessi della shell bash.
Molte volte queste domande possono essere evitate poichè la shell mette a disposizione dei comandi utilissima per conoscere tutto il possibile sugli argomenti e sulle opzioni utilizzabili da riga di comando.
Vediamo ogni possibilità che ci viene data.

MAN

Man è sicuramente il comando più utilizzato quando non si conosce un programma o un comando. Il suo scopo è quello di visualizzare le pagine dimanuale che dovrebbero accompagnare ogni software presente sul sistema. Esso si utilizza con la sintassi

man nome_programma

e si riceverà come output una serie di righe nelle quali è presente tutto ciò che c’è da sapere sul software in questione.
Ad esempio, per conosce tutto quello che riguarda il comanda which basta digitare nel terminale

man which

per ottener come output:

NAME
which – locate a command

SYNOPSIS
which [-a] filename …

DESCRIPTION
which returns the pathnames of the files (or links) which would be exe‐
cuted in the current environment, had its arguments been given as com‐
mands in a strictly POSIX-conformant shell. It does this by searching
the PATH for executable files matching the names of the arguments. It
does not follow symbolic links.

OPTIONS
-a print all matching pathnames of each argument

EXIT STATUS
0 if all specified commands are found and executable

1 if one or more specified commands is nonexistent or not exe‐
cutable

2 if an invalid option is specified

In questo caso si nota la presenza di
name: nome del programma,
synopsis: uso del softwasre con i relativi parametri),
description: spiegazione sul lavoro svolto dal programma,
option: i vari parametri utilizzabili e relativo uso e significato
exit status: mostra i valori restituiti dal which in base agli eventi presentatisi

Le pagine che si presentano nel terminale possono essere visualizzate mediante lo scorrimento utilizzabile con le frecce su e giù ed è possibile abbandonare la documentazione digitando ‘q’

WHATIS

Whatis è un semplice comando che serve per conoscere lo scopo di un dato comando o di un software. Esso è raggiungibile con la sintassi

whatis nome_comando

Ad esempio. Digitando

whatis which

si leggerà come output

which (1) – locate a command

APROPOS

Questo comando, molte volte sconosiuto, amplia il panorama dei comandi a noi utili ed in particolare supporta lo strumento man. Esso ricerca all’interno delle pagine di manuale la parola passata come parametro. È possibile usarlo con il comando

apropos parola_cercata

Ad esempio, il comando

apropos which

restituirà nel terminale una lista di nomi di software all’interno dei cui manuali è presente la parola which. Tale comando è molto utile per vedere se un software è utilizzato in un tool o progetto più grande.

-H e –HELP

Molto spesso i software propongono all’interno del proprio codice un parametro mediante il quale è possibile visualizzare i parametrio accettati, il loro uso e significato. NElla stragrande maggioranza dei casi, infatti, basta digitare

nome_software -h

o, in alternativa

nome_software –help

per ottenre la lista dei parametri con relativo uso e scopo. Ad esempio, l’uso di

evince -h

restituisce nel terminale

Uso:
evince [OPZIONE…] [FILE…] Visualizzatore documenti di GNOME

Opzioni di aiuto:
-h, –help Mostra le opzioni di aiuto
–help-all Mostra tutte le opzioni di aiuto
–help-sm-client Show session management options
–help-gtk Mostra le opzioni GTK+

Opzioni dell’applicazione:
-p, –page-label=PAGINA La pagina del documento da visualizzare.
-f, –fullscreen Esegue evince in modalità schermo intero
-s, –presentation Esegue evince in modalità presentazione
-w, –preview Esegue evince come pre-visualizzatore
-l, –find=STRINGA La parola o la frase da trovare nel documento
–display=DISPLAY Display X da usare

Spero che l’articolo possa risultare utile a chi cerca informazioni riguardi i programmi usati da riga di comando. Questo aiuterà i forum a rimanere “puliti” e gli utenti soddisfatti.

Strutture dati: Generalità

Inauguriamo una nuova sezione del blog che avrei voluto iniziare già diverso tempo addietro ma che, per mancanza di tempo, non ho mai cominciato a scrivere.
La nuova sezione, particolarmente interessante per chi vuole approfondire la programmazione ad un livello più alto, tratterà le strutture dati. Per studiare gli algoritmi che gestiscono questi tipi di elementi, useremo il C/C++ vista la potenza del linguaggio e data la presenza dei puntatori che favoriscono la possibilità di sfruttare le qualità stesse delle strutture.

STRUTTURE DATI

Le strutture dati sono dei particolari strumenti strutturali mediante i quali è possibile organizzare un insieme di dati e mantenerli o in memoria centrale, per tutta la durata dell’uso del software, o per riversarli nella memoria di massa per eventuali modifiche successive.

Un buon uso delle strutture dati, prevede la possibilità di utilizzare dati di tipo diverso nello stesso elemento strutturale. Proprio per tale motivo, quando si scrive un algoritmo che gestisce una struttura, la si deve vedere come una situazione il più possibile generica senza soffermarsi in maniera particolare sul tipo di dato da utilizzare. In questo modo si scriverà codice perfettamente utilizzabile in ogni situazione in cui l’utente può trovarsi.

ALGORITMI

Come si è accennato, le strutture dati sono gestite da particolari algoritmi studiati appositamente per la struttura presa di volta in volta in esame.
Un’algoritmo è una serie di step (passi) da effettuare per poter giungere alla realizzazione di uno scopo prefissato. La serie di passi effettuati deve essere finita e deve giungere sempre alla risoluzione del problema iniziale. Un algoritmo deve godere dell’ottimizzazione per la richiesta di memoria al sistema e/o per la richiesta di cicli e quindi di tempo di esecuzione. Tuttavia un buon algoritmo si basa anche su altri parametri quali robustezza, stabilità, modularità, etc…

Una buona organizzazione della struttura dati, favorisce la stesura di buoni algoritmi sia in termini di uso di memoria che di velocità. Ad esempio, cercare una parola all’interno di una lista risulterà più facile se quest’ultima è ordinata e, in tale situazione, l’algoritmo sarà scritto in maniera tale da cercare la parola in base a come è ordinata la lista.
Anche la scelta di una struttura, anziché un’altra, in base alla situazione, porta all’ottimizzazione del codice che la gestirà.

COME SCEGLIERE LA STRUTTURA

La scelta della struttura dati più adatta deve essere studiata dal programmatore e richiede la considerazione di diversi fattori
  • Risorse necessarie (codice più veloce o più leggero?)
  • Inserimento degli elementi (In testa, in coda o in ordine casuale?)
  • Prelievo degli elementi (In testa, in coda o in ordine casuale?)
  • Eliminazione degli elementi (In testa, in coda o in ordine casuale?)
Bisogna tener presente che l’uso di una particolare struttura dati può favorire alcuni fattori ma può essere poco pratica per altri. Questo vuol dire che non esiste la struttura perfetta ma quella più adatta ad ogni situazione. Questo vuol dire che c’è, ad esempio, quella più adatta all’ordinamento, quella migliore per il prelievo o quella migliore per l’inserimento.

STRUTTURE DATI DINAMICHE

Le strutture dati possono essere catalogate in base alle loro prestazioni nelle diverse situazioni o in base alle operazioni che è possibile effettuare sulle stesse. Con il termine strutture dati dinamiche si intendono quelle particolari strutture che fanno uso dei puntatori e della locazione dinamica della memoria per la gestione dei propri elementi in fase di esecuzione. Ogni elemento è in qualche modo connesso almeno ad un altro e tale connessione può essere cambiata durante lo svolgimento del software. Qualora l’uso dei puntatori non fosse possibile si può ricorrere ad altri sistemi che però peccano per carenza di flessibilità.

Tra esse troviamo, ad esempio, liste, alberi, grafi e tabelle. Ognuna di esse sarà analizzata in futuro in maniera approfondita.

CONTENITORI

I contenitori sono strutture derivate da quelle dinamiche e si concentrano in maniera particolare sulla gestione dell’inserimento e del prelievo dei dati presenti all’interno. L’accesso ai dati di queste strutture è l’elemento che differisce tra ognuna di esse. C’è chi preleva i dati in testa, chi in coda e chi in base ad un indice.

Tra esse troviamo, ad esempio, la pila o la coda. Ognuna di esse sarà analizzata in futuro in maniera approfondita.

Abbiamo eseguito una breve carrellata di ciò che si studierà in questa sezione.

Alla prossima!!!