Newsgroup: it.comp.os.dibattiti
Titolo: Elektra

http://elektra.sourceforge.net
Da quello che ho capito vuole essere una specie di registro di sistema alla
windows, utilizzzando pero` un formato aperto. Cosa ne pensate?
Henryx

 
Beh, un "registro di sistema" per Linux.
Ho avuto gia' modo di vedere cose del genere (questo non e' l'unico 
progetto in questo senso) e di dibattere con qualcuno sull'efficacia di 
strumenti del genere.
Diciamocelo: come idea, quella di un unico file in cui vengono 
immagazzinate tutte le informazioni relative alla configurazione dei 
programmi su una macchina puo' sembrare cosa buona, soprattutto 
nell'ottica della semplicita' e della comodita' destinata all'ambiente 
desktop, ma dubito che possa aiutare invece nel senso dell'affidabilita' 
e della flessibilita'.
Gli esempi sono infiniti: che faccio se voglio chrootare 
un'applicazione, che dunque resta tagliata fuori dalla porzione di 
filesystem dove sta il registro? E se per disgrazia mi salta il cluster 
del disco dove stava il registro, perdo la configurazione di *tutto*? E 
se voglio installare una tal applicazione in due versioni diverse, non 
e' che mi crea qualche conflitto?
Se implementato *bene* (leggi: "meglio che su Windows") potrebbe essere 
certamente comodo, ma in ogni caso credo che non sara' facile convincere 
gli sviluppatori delle migliaia di progetti attualmente in circolazione 
ad uniformarsi ad uno specifico standard per la configurazione...
-- 
Roberto -MadBob- Guido
mail 
bob4...@gmail.com
web 
http://madbob.homelinux.com
BrainTop Project maintainer - 
http://braintop.sourceforge.net

 Se implementato *bene* (leggi: "meglio che su Windows") 
Come lo descrivi tu è ancora lontano dall'essere "meglio che su Windows".

 configurazione...
Ecco, questo è il vero problema.
 

 
Il che vuol dire che l'applicazione deve pure stare attenta ad eventuali 
paciocchi nel registro.
Un .conf da mettere dove si vuole, modificare, spostare, condividere etc 
etc non e' meglio?


Henryx wrote:

Il Registro di sistema è stato (ed è) una dei punti deboli di Windoz,
questo lo sanno anche i bambini... veloce e rapido appena installato,
dopo due mesi di lavoro si riempie di dati assolutamente inutili e diventa
praticamente ingestibile... credo che esportare tale modello sarebbe un
danno per la comunità os

 etc non e' meglio?
Se le informazioni stanno in un db organizzato si trovano meglio, questo 
è oggettivo.

 questo lo sanno anche i bambini... 
Lo sanno *solo* i bambini, non "anche".

 č oggettivo.
Questa fa ridere... Fammi capire in cosa un filesystem non e`
organizzato. Ho sempre pensato che fossero, quantomeno, gerarchici.
Oppure hai in uso filesystem flat?
Come organizzi i file e` altrettanto specificato (FHS), come li
organizzi tu nelle tue cartelle sono fatti tuoi.
-- 
Valentino Volonghi aka Dialtone
Now Running MacOSX 10.3.7
Blog: 
http://vvolonghi.blogspot.com
http://weever.berlios.de

 organizzato. 
Nel gestire basi di dati.
Il file system organizza i file, non le informazioni in essi contenute.

 Lo sanno *solo* i bambini, non "anche".
Se non hai avuto problemi con il registro di windows o sei in malafedde 
o non usi windows.
-- 
Lorenzo `paulatz' Paulatto
Trieste
``Se Gauss fosse vivo oggi, sarebbe un hacker.''
      --Peter Sarnack (Princeton University)

 del registro, con qualcosa tipo
Si, ho letto. filesystem e file xml. C'e` gia` GConf.


 Il file system organizza i file, non le informazioni in essi contenute.
Le informazioni in essi contenute dipendono dal formato del file e
conosco parecchi formati usati che sono perfettamente gerarchici e
ordinati. Altri, magari non avendone bisogno, usano tutto piatto.


 Diciamocelo: come idea, quella di un unico file in cui vengono
Ma l'avete letto il sito o tutti appena leggono "registry" scappano via
urlando? Guardate che Elektra usa il *filesystem* per implementare l'albero
del registro, con qualcosa tipo
$HOME/.elektra/applicazione/ramo/sottoramo/nomechiave
che è un file contente il valore della chiave.
-- 
il Vide - ICQ #5301833
http://www.heavy-metal.it
I'm your god, I'm your way to the pain
NP: Nulla

 ordinati. Altri, magari non avendone bisogno, usano tutto piatto.
ne stai facendo una questione di lana caprina. Tutti i formati, in 
quanto tali, contengono dati organizzati. Anche perchè l'applicazione 
che li scrive di solito vuole capirci qualcosa quando li rilegge.
Resta il fatto che un db è un'altra cosa.

 o non usi windows.
Visto che io sono in malafede, illustra tu a questa gentile platea che 
problemi ho con il registro di windows.

 problemi ho con il registro di windows.
Posso accetare che tu dica "non ho mai perso completamente i dati del 
registro". Ma se sostieni di non aver mai dovuto ripristinare il 
registro ad una configurazione precedente perché conteneva errori la 
stai sparando troppo grossa. Non è credibile signor Ballmer.


 stai sparando troppo grossa. Non è credibile signor Ballmer.
Ora non ne sono certo, ma a naso direi che ntuser.dat è il ramo "Current
User" del registro, giusto? Beh, a me si è sputtanato quello un paio di
volte e ho perso TUTTE le impostazioni utente...è stato molto bello :P



Fesseria.
Dunque, eseguiamo un simpatico esperimento.
Scaricatevi da 
www.sysinternals.com
 il programmino
regmon per Windows NT (o quello per il 98, fate voi).
Avviatelo. Adesso provate a muovere il mouse o a
evidenziare anche una semplice icona del desktop.
Cosa vedete? Che Windows esegue decine se non
centinaia di accessi al registro?
Bene. Adesso ragionate su questo: performance.
Che differenza c'č tra l'avere un database in
memoria ram (db dove le word sono word, e
non stringhe tipo "20837" che l'applicazione
deve ogni volta sottoporre a parsing and
conversion) ed usare un simpatico approccio
alla Unix (cioč /etc)?
Semplice. Che nel primo caso devi solo usare
una API che ti copia il dato che ti interessa
da una locazione di memoria.
Nel secondo caso, devi passare per il file
system, aprire il file, eseguire il parsing di
stringhe, convertire la stringa in numero
binario. Pensate poi che gioia quando
avete un file con due stringhe A e C,
e dovete inserire una stringa B tra le due.
Faccio inoltre rispettosamente notare al nostro
esperto che i file in /etc non sono cosě
standardizzati come lui vorrebbe far credere.
Per esempio, quali sono i file di inizializzazione
di Linux? Linux usa il sistema di inizializzazione
BSD o quello System V?

 danno per la comunità os
Oh menomale che qualcuno l'ha detto. La stessa Microsoft ne paventava 
l'eliminazione in qualche futura versione di Windows.

 stai sparando troppo grossa. Non è credibile signor Ballmer.
Personalmente parlando, non ho mai avuto bisogno della  funzione di
ripristino del sistema, sia per i file installati, sia per il registro. Che
poi abbia giochicchiato nel registro a manella (soprattutto per le
operazioni di pulizia), e` un altro discorso
Henryx

 Si, ho letto. filesystem e file xml. C'e` gia` GConf.
Beh, considerando che GConf e` una mezza specie di demone (in tutti i
sensi!) mentre elektra si compone di una sola libreria, direi che a questo
punto, prestazionalmente parlando, elektra sia da preferire
Henryx

 
Solo in apparenza. Se il file fosse qualcosa tipo:
U S E D H C P 255 13 00 01 255 13 01 00 255 13 81 00 255 13 82 01
Credi che sarebbe più difficile da leggere?
In fondo no, tu useresti un decodificatore che ti trasforma
questa sequenza di numeri in un albero leggibile dall'umano.
Ed anche se fosse danneggiato il file, tu inseriresti le
informazioni che mancano nell'albero creato dal regedit
di turno, e poi lui le convertirebbe nel formato binario
corretto.
Saluti
Vegeta

 stai sparando troppo grossa. Non è credibile signor Ballmer.
E lei a non essere credibile, signorino. Mi stai contestando che *se* io 
dicessi una certa cosa sarebbe una cazzata. Non mi metterei mai a 
discutere in questi termini.
E comunque vedo che quelli a cui si sputtana d'ogni ben di Dio ogni 
quarto d'ora non mancano, per cui se vuoi continuare questo tipo di 
dibattito i compari ci sono.

 volte e ho perso TUTTE le impostazioni utente...è stato molto bello :P
Ci avrei scommesso, chissà perchè.

stai sparando troppo grossa. Non è credibile signor Ballmer.
Win98 ... ho dovuto ripristinare il registro un paio di volte ...
Win2K ... non ho MAI dovuto ripristinare il registro ...
WinXP ... non ho MAI dovuto ripristinare il registro ...

Alex ha scritto:

e per sostituirlo con cosa?
L'idea di un registro centralizzato non ha niente di male, imo.

 corretto.
Stai uscendo dal binario. Lo scopo non è quello che stai descrivendo. 
L'umano deve leggere tranquillamente senza problemi. Il pc lo può 
leggere tranquillamente, basta uno stupido parser, lui non si stanca, ci 
mette un millisecondo in più. Cavolo... eh si... che spreco!
Solo le applicazioni legacy usano ancora formati binari, dal momento che 
occupano chiaramente meno byte... e un kilobyte si pagava peso oro.


 E' risaputo che t_write << t_read --- Ogni applicazione, database, è 
Chiaramente, volevo scrivere
t_write >> t_read
Piccolo typo.


 Ci avrei scommesso, chissà perchè.
Io non lo so. Spiegamelo.


 Io non lo so. Spiegamelo.
Ah, il PC non era il mio, io ho solo messo a posto la cosa. Cmq
probabilmente era anche semplicemente un problema di qualche settore
dell'HD. Fatto sta che in un file unico ti si sputtanano tutte le
impostazioni utente. Con più file separati al limite perdi le impostazioni
di qualche programma.



Di fatto lo spreco però ce l'hai. Quando si
vogliono scrivere dei sistemi operativi che
siano leggeri, si inizia aumentando al massimo
l'efficienza degli algoritmi più a basso livello,
e poi si ottimizzano i meccanismi di livello
superiore.
Ma al di là di questo, tu scrivi: l'umano deve
leggere senza problemi. Bene, tu dai un
bel regedit e puoi leggere tranquillamente
senza problemi tutto quello che vuoi. Dal tuo
punto di vista non cambia nulla.
Ma poi, se vogliamo parlare di comodità per
l'utente, non è assolutamente detto che sia
la soluzione migliore solo perchè è un file
di testo.
Per esempio, io voglio implementare un meccanismo
che, ove l'utente cercasse di cancellare un'
impostazione critica, faccia apparire una dialog
box di avvertimento. Il che impedirebbe di fare
danni perchè semplicemente ci si è distratti e
si è premuto il tasto sbagliato. Con un registry
posso implementare questi controlli. Perchè li
inserisco nell'applicazione che legge (il regedit
appunto) In un semplice file di testo che sarà
gestito con vim o gedit non posso.
Saluti
Vegeta

 Ah, il PC non era il mio, io ho solo messo a posto la cosa. 
<cite>
"Beh, a me si è sputtanato quello un paio di volte e ho perso TUTTE le 
impostazioni utente"
</cite>
Prima cascasse il mondo se non è successo a te, poi spunta tuo cuggino.
E poi ti meravigli se ti dico che non sei credibile... :P

 E poi ti meravigli se ti dico che non sei credibile... :P
Ok, ho scritto "a me" ma era per dire "l'ho visto succedere". Io
personalmente è un bel pezzo che non ho una macchina Windows mia, per cui
non ho avuto modo di provare. Devo dire che però mi è capitato che si
sminchiasse parte della configurazione di KDE in seguito a un salto di
tensione mentre stavo giochicchiando col desktop...reiser ci ha messo il
suo ma un paio di file in home li ho persi. Ma il resto delle
impostazioni...salve.


 gestito con vim o gedit non posso.
Certo che no. Ma perchè MAI dovresti usare vi o emacs quando puoi 
utilizzare la manina con Settings > Networking ???? Me lo spieghi? 
naturalmente anche in questo caso c'è la tua dialog box con ``CAZZO DI 
BUDDA! Sappi che stai mettendo a repentaglio la vita! Vuoi continuare? 
[NO] [NO NO] [PROPRIO NO] [FORSE]'' --- Usi vim se più non puoi usare il 
mouse, allora puoi riparare il danno con un tool stupido.


 impostazioni...salve.
E quindi?
In un episodio simile, magari su windows avresti perso anche lì un paio 
di file. Ma perchè proprio ntuser.dat e non sfondo_canalis.jpg?
Se ne facciamo una questione di culo/sculo, prendiamo atto che anche a 
te è andata di lusso; c'è chi ha perso tutto il file system in quel modo.

 di file. Ma perchè proprio ntuser.dat e non sfondo_canalis.jpg?
La legge di Murphy non è un motivo abbastanza valido? ;) Seriamente, il
fatto è che _può_ capitare. Non ha senso fare il discorso che allora ti si
può anche rovinare tutto il disco...teniamo il confronto ristretto
all'ambito configurazione.


>Il file system organizza i file, non le informazioni in essi contenute.
E il database invece dei file organizza i record.
Alla fine, la sostanza e' sempre quella.

 Alla fine, la sostanza e' sempre quella.
La sostanza è ben diversa.
E' chiaro che anche in un database alla resa dei conti i dati si trovano 
fisicamente su file, ma l'applicazione di questo se ne frega. Il 
database ha la peculiarità di fornire l'accesso ai dati senza doversi 
preoccupare d'altro, in primis di dove (e come) si trovano fisicamente.

 preoccupare d'altro, in primis di dove (e come) si trovano fisicamente.
Guarda... Questo e` un pezzettino del file di config di weever:
[Server]
;REQUIRED: Choices are tcp, ssl or unix
socket=tcp
;REQUIRED with tcp and ssl, ignored with unix
port=8080
;REQUIRED with unix, ignored with the others
;address=
;for ssl and tcp, ignored in unix
;interface=
;works with all 3 sockets
backlog=511
;REQUIRED: with ssl socket, ignored otherwise
;privatekey=
;if not defined privatekey is used. only with ssl, ignored otherwise
;certkey=
;only works with unix, ignored otherwise
;mode=
;only works in ssl socket, default SSLv23_METHOD
;sslmethod=
Tu credi che io mi metta a scorrere il file ogni volta pezzo per pezzo?
Ovviamente no.
Io dal codice applicativo mi limito a dare un:
config.getNetworkParameters('weever.ini')
Da quel momento in poi ho la configurazione in memoria e chi si e` visto
si e` visto.
===
def getNetworkParameters(filename):
    cfg = _parse(filename)
    socket = cfg.get('Server', 'socket')
    return _disp[socket](cfg)
def _SOCKET(cfg, conn, special, parameters):
    for entry in parameters.split():
        if cfg.has_option('Server', entry.lower()):
            el = cfg.get('Server', entry.lower())
            if entry != special:
                conn = "%s:%s=%s" % (conn, entry, el)
            else:
                conn = "%s:%s" % (conn, el)
    return conn
 
def _SSL(cfg):
    return _SOCKET(cfg, 'ssl', 'port', 'port privatekey certKey \
                                           sslmethod interface backlog')
def _UNIX(cfg):
    return _SOCKET(cfg, 'unix', 'address', 'address mode backlog')
def _TCP(cfg):
    return _SOCKET(cfg, 'tcp', 'port', 'port interface backlog')
_disp = {'tcp':_TCP,
         'ssl':_SSL,
         'unix':_UNIX
        }
-- 
Valentino Volonghi aka Dialtone
Now Running MacOSX 10.3.7
Blog: 
http://vvolonghi.blogspot.com
http://weever.berlios.de

 Guarda... Questo e` un pezzettino del file di config di weever:
[snip]
http://snipurl.com/cggj

 
http://snipurl.com/cggj
E cosa dovrei capire da sto coso?


 E cosa dovrei capire da sto coso?
Niente di che, è l'equivalente del tuo esempio in una api win16.

 Niente di che, č l'equivalente del tuo esempio in una api win16.
Ottimo :).
E insisto che non c'e` nulla di male in quell'API. E che tutte le boiate
del 'fai fatica a ritrovare la cosa Y' non sussistono perche` io di
fatica non ne faccio. Il tempo di init della mia applicazione e`
cronometrato e si parla di 300 millesimi di secondo. Che avviene una
volta e basta, in cui tiro su anche 3 connessioni a database in un
thread pool.
Che bisogno c'e` di un registro? nessuno.


 preoccupare d'altro, in primis di dove (e come) si trovano fisicamente.
La cosa importante non e' che l'applicazione se ne freghi, non facendo 
chiamate di sistema per accedere al filesystem, la cosa importante e' 
invece che IL PROGRAMMATORE se ne freghi, e questo puo' avvenire 
tranquillamente anche con dei semplici file di configurazione, basta far 
gestire il tutto da una API. Poi se al di sotto della api c'e' un 
database o un filesystem al programmatore non gli cambia niente, e 
comunque a mio modo di vedere la differenza tra un database e un 
filesystem in astratto non esiste, e' solo una differenza convenzionale, 
perche' di fatto il filesystem E' un database, anche se rudimentale 
rispetto a quelli che chiamiamo convenzionalmente con quel nome, quindi 
e' inutile stare a discutere sul nulla.

 database o un filesystem al programmatore non gli cambia niente,
Dipende. Un database relazionale potrebbe fare le differenza. Nel registro 
la stessa voce puo' far parte di sezioni diverse.
Saluti. 

 e' inutile stare a discutere sul nulla.
Potrebbe anche essere una discussione sul nulla, se fosse così.
Certo Windows mette(va) a disposizione un api del genere. A parte che 
Windows raccomanda di usare il registro, ma non mi pare che per la 
"controparte" si parli di programmi nativi Windows.
Nel contesto generale mi pare ci sia una fantasia nel gestire le 
configurazioni che la metà basta.

 la stessa voce puo' far parte di sezioni diverse.
Il database relazionale fa la differenza quando hai giga e giga di dati
da tenere ordinati su cui vuoi che i tempi di ricerca siano scalabili al
massimo.
Dubito che esista qualcuno che sia in grado di riempire di giga e giga
un registro di configurazione.
E nonostante questo esistono applicazioni che usano bsddb per gestire la
propria mole di dati, e ti parlo di 50-100 GB (quindi neanche cosi`
poco) e non hanno problemi di scalabilita`.


 massimo.
"relazionale" e "scalabile" non sono sinonimi e neanche troppo legati 
fra loro.
Tanto per essere chiari, non progetti un db relazionale perchè hai tanti 
record da gestire, ma perchè li vuoi gestire in un certo modo (pochi o 
tanti che siano).

 tanti che siano).
No. Si usa il modello relazionale perche` e` efficace e efficiente
(oltre ad altre proprieta`). Gli altri modelli non sono ottimali perche`
su grosse dimensioni sia il modello gerarchico, che il modello a grafi
cominciano ad essere poco efficienti, sia in termini di velocita` che in
termini di spazio occupato, sia in termini di efficaci, le loro
operazioni diventano sempre piu` lente. Con database molto piccoli
probabilmente un file e` piu` efficiente e efficace ma con l'aumentare
delle dimensioni questo smette di essere vero.
Il vantaggio dei DB relazionali e` la matematica che gli sta dietro. Il
resto non ha teorie tanto forti a sorreggerli.
Questo e` quanto, poi tu puoi dire, sbagliando, quello che vuoi, ma
qualsiasi corso di base sui DB insegna questo.


 (oltre ad altre proprieta`). 
A parte tutti questi discorsi (che poi alla fine mi sa che tu mi 
contraddici dicendo le stesse cose), ma che c'entra il registry di 
windows con i db relazionali? Il registry è un database gerarchico.

 windows con i db relazionali? Il registry è un database gerarchico.
Appunto, e` quindi e` come un fiile di configurazione separato a
sezioni.
Identico e centralizzato e non editabile umanamente nella sua interezza.


 gestito con vim o gedit non posso.
i commenti, questi sconosciuti... 
ciao
-- 
boydon
CREDENZA POPOLARE - Armadio economico.

 
Perchè lo esige l'usabilità di un'applicazione GUI.
Io posso inserire in un sistema operativo un'opzione
HardOverclockAthlon64, ma non la inserisco nella
dialog box di configurazione dell'applicativo.
Per due ragioni: primo perchè la dialog box non
può essere appesantita da 400 impostazioni, di cui
solo 10 veramente importanti o utilizzabili su tutti
i sistemi, e secondo perchè il cretinutente magari
me la clicca.
Semmai, posso inserire questa impostazione nel registry
(lasciandola nascosta alla GUI), e se qualcuno scoprisse
che su un particolare processore Athlon64 questa
aumenta le prestazioni senza inficiare la stabilità,
lo dice su internet. L'utente che vuole eseguire la
modifica entra con il regedit e lo fa (magari inserendo
una password di sicurezza che assicura al sistema
operativo che l'utente è perfettamente consapevole
di ciò che sta facendo).
Saluti
Vegeta

 interezza.
Si', in realtà mi riferivo al fatto che puoi trovare la stessa chiave in 
parti diverse del registry, errore mio.
A differenza di un file pero', supporta la possibilita' di inserire ACL per 
ogni voce.
Saluti. 

 ad uniformarsi ad uno specifico standard per la configurazione... 
non è uno standard per la configurazione, è solo uno strumento. Non è 
proprio questo il problema?
-- 
Help us help southern Asia, donate:
<URL: 
http://donation.chiangmaisolutions.org/
 > (English)
<URL: 
http://donation.chiangmaisolutions.org/ita/
 > (Italian)
<URL: 
http://donation.chiangmaisolutions.org/thai/
 > (Thai)