Rimuovere gli attributi “hidden” e “system” dei file FAT su GNU/Linux

Recentemente mi è capitato di avere un chiavetta USB in cui non vedevo più le cartelle e i documenti. Apparentemente sembrava tutto ok: lo scandisk non rilevava danni alla FAT, lo spazio continuava a essere occupato, eppure non si vedeva niente, sembrava vuoto. Anche la ricerca dei file pareva non trovare più i miei documenti.

Prima di rassegnarmi e buttare via la chiavetta, ho provato ad inserirla nel PC con Ubuntu: L’intenzione era quella di provare a recuperare almeno parte dei miei documenti. Ho aperto così una finestra della shell e ho listato il contenuto della chiavetta. Con stupore mi sono accorto che tutti i miei documenti erano ancora lì!

Facendo una ricerca su Google ho scoperto che una cosa simile era capitata anche ad altri. Probabilmente si trattava di un qualche virus che attiva i bit degli attributi nascosto e sistema dei file, rendendoli invisibili all’utente sotto Windows. La cosa più importante era che i miei file erano ancora intatti e che esisteva una soluzione basata su Linux per riportare il tutto alla normalità.

Per prima cosa assicurarsi di avere installato il pacchetto mtools:

$ sudo apt-get install mtools

Quindi creare il file .mtoolsrc nella propria home directory e inserire quanto segue:

drive s: file=/dev/<usb-device>
mtools_skip_check=1

Verificare quindi gli attributi dei file:

$ mattrib -/ s:

Correggere quindi gli attributi con questo comando:

$ mattrib -/ -h -s s:

Adesso i file e le cartelle saranno di nuovo visibili anche su Windows!

Ricordati di me, GRUB!

Per fare in modo che Grub 2.0 si ricordi dell’ultima opzione selezionata occorre modificare/aggiungere le seguenti righe nel file /etc/default/grub con il vostro editor preferito:

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

Salvare le modifiche e applicare le nuove impostazioni digitando il comando:

$ sudo update-grub

Da adesso in poi Grub si ricorderà quale sistema operativo è stato avviato e lo riproporrà già selezionato tra le varie opzioni disponibili.

Controllare l’accesso ai membri di una classe

Con l’utilizzo dei qualificatori di accesso possiamo determinare quando un particolare campo o metodo di una classe può essere invocato da un’altra. Impararne il corretto utilizzo è un requisito essenziale per chiunque desideri progettare un’interfaccia software solida, robusta e ben scritta.

Il linguaggio Java definisce due livelli di accesso:

  • a livello di classe, o esternopublic, oppure package-private (nessun modificatore esplicitamente dichiarato);
  • a livello di membro di una classe, o interno: public, private, protected, o package-private (nessun modificatore esplicito).

Quando una classe viene dichiarata public, diventa visibile a tutte le altre. Se invece non viene definito nessun modificatore, allora rimane visibile soltanto all’interno dello stesso package dove la classe è stata dichiarata.

All’interno di una classe possiamo utilizzare il qualificatore public per rendere accessibile ovunque quel campo o quel metodo, oppure nessun modificatore (package-private) per limitarne l’accesso all’interno dello stesso package. In aggiunta possiamo utilizzare i qualificatori private e protected. Il primo indica che il membro può essere visto soltanto nella sua classe. Il secondo invece indica che il membro può essere visto anche dalle classi dello stesso package e, in aggiunta, dalle sue classi discendenti, anche in package differenti.

La tabella che segue schematizza quanto appena detto:

Livelli di accesso
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

 

Come si può vedere, una classe ha sempre accesso a tutti i suoi membri. La colonna Package ci dice invece quando il membro è accessibile dalle altre classi dello stesso package. La colonna Subclass indica invece quando una classe figlia ha accesso al membro, a prescindere dal package di appartenenza. La colonna World, infine, ci dice quando tutte le altre classi hanno accesso al membro.

I livelli di accesso influiscono in maniera significativa nella progettazione di un’interfaccia software. Quando si usano le classi provenienti da una libreria esterna, come ad esempio quelle della libreria standard di Java, i qualificatori determinano infatti quali classi e quali membri è possibile utilizzare nel proprio codice sorgente. Inoltre, quando si scrive una nuova classe e si definisce il livello di accesso di ogni singola variabile e di ciascun metodo, si definisce implicitamente una nuova interfaccia, nascondendo al mondo esterno l’implementazione dell’interfaccia stessa. Questo concetto è alla base dell’incapsulamento e del polimorfismo nel paradigma della programmazione a oggetti.

Prendiamo adesso, a titolo di esempio, un insieme di classi definite in due package distinti e vediamo come i qualificatori di accessi modificano la visibilità di ogni membro nelle altre classi.

classes-access

Visibilità
Modifier Alpha Beta Alphasub Gamma
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

 

Ecco alcuni consigli per scegliere il livello di accesso più appropriato: se altri programmatori usano la nostra classe, dobbiamo assicurarci che non si verifichino errori causati da un utilizzo scorretto.

  • Limitiamo l’accesso per quel particolare membro della classe al livello più restrittivo, purché ciò abbia senso. E’ sempre meglio usare il qualificatore private a meno che non ci sia una ragione valida per fare diversamente.
  • Evitiamo di dichiarare campi public, ad eccezione delle costanti. Variabili pubbliche tendono infatti a legarti a quella particolare implementazione e limita la flessibilità nella modifica e revisione del codice.

BDE su Windows 7

Se come me stai cercando un modo di far funzionare il Borland Database Engine su Windows 7, sia 32 che 64 bit, allora sei nel posto giusto!

Il BDE è un software ormai vecchio e vetusto. Tuttavia esistono in giro alcune applicazioni che ancora ne fanno uso. I problemi sono dovuti principalmente alla non corretta gestione dei permessi con l’UAC e al programma di installazione originale che non è pienamente compatibile con il Windows Installer.

Ho trovato in rete un pacchetto di installazione contentente l’ultima versione del BDE (5.2.0.2) e che supera queste limitazioni. Il nuovo setup permette l’installazione dei file necessari al corretto funzionamento, dopo aver richiesto i privilegi amministrativi tramite il prompt di UAC. E’ presente una funzione che permette la rimozione di eventuali chiavi di registro rimaste a seguito di una precedente installazione corrotta.

File allegato: Setup_BDE52