Tutto il blog è stato spostato all'indirizzo
http://pierprogramm.altervista.org/wordpress/


I post memorizzati qui non verranno rimossi ma saranno obsoleti. Questo blog non sarà più aggiornato.

domenica 23 settembre 2012

Sistema software ADISys v1.0

Il mio primo vero sistema software sviluppato per l'Università!

Per avviarlo da Ubuntu o simili seguite i passi del video correlato, avviando il sistema dal file di shell adisys.
Su windows è possibile avviarlo dal file batch adisys.bat dopo aver scaricato il server mysql per il database. Leggere il file readme.pdf (o txt) contenuto nell'archivio per informazioni più dettagliate.

Link: http://www.filehosting.org/file/details/377861/ADISYS_V1.zip inserite la vostra mail dove richiesto, riceverete una email con il link dove scaricare direttamente il file. Andate sul sicuro, no spam.

Video per l'avvio del sistema su Ubuntu e Debian-based

venerdì 20 luglio 2012

Java passaggio parametri per riferimento

Girando per il web ho percepito un po' di confusione su questo concetto che vorrei provare a chiarire una volta per tutte.
Il passaggio di parametri (oggetti) per riferimento in Java è possibile.

"A differenza del C++, non è previsto l'uso dei puntatori".
Questa frase vuol dire che il programmatore non puo' sapere l'indirizzo del valore fisico della variabile, ma e' opportuno sapere che se la variabile e' un oggetto allora essa e' un puntatore all'oggetto e si comporta come tale.

Se invece la variabile e' di tipo primitivo allora mettiamoci l'anima in pace il passaggio per riferimento e' impossibile. ma se la variabile e' (un puntatore ad) un oggetto allora il passaggio per riferimento e' possibile perche' la variabile referenzia l'oggetto.

Quindi non e' un "mito" quello che dice che se ad un metodo viene passato un oggetto, il passaggio e' per riferimento.

Provare per credere, vediamo un esempio

Se ad un metodo passi il riferimento ad un oggetto e il metodo modifica l'oggetto, la modifica si ripercuote fuori dal metodo su quell'oggetto.

public static void inverti( String[] onetwo ){
        onetwo[0] = "due";

        onetwo[1] = "uno"; 
}
public static void main(String args[]){
    String[] unodue = {"uno", "due"};

    System.out.println("Prima del metodo: one = "+unodue[0]+" ;   two = "+unodue[1]);
   
    inverti(unodue);

    System.out.println("Dopo il metodo: one = "+unodue[0]+" ;   two = "+unodue[1]);
}

L'array di String e' un oggetto, nel metodo inverti esso viene modificato e questa modifica si ripercuote sull'array del main. Questo avviene perche' il passaggio di parametri (oggetti) ad un metodo avviene per riferimento.

Quando si tratta di tipi primitivi allora ci si deve inventare qualcos'altro (variabili d'istanza magari o farsi un wrapper con get e set).
Qualcuno dira' ma non esistono le classi wrapper? Sì esistono ma sono in read-only cioe' il valore primitivo che incapsulano non puo' essere modificato. L'unico modo per modificare il valore di un Integer e creare un nuovo oggetto, ma cosi' la variabile del metodo puntera' ad un oggetto diverso.

giovedì 4 agosto 2011

Eseguire file eseguibili. Script per nautilus

Sapete cos'e' Nautilus vero? E' il gestore file di Ubuntu! Quello che usate per esplorare le cartelle!

Ho scritto uno semplice script bash per Nautilus che permette, tramite tasto destro, di eseguire qualsiasi file eseguibile nel terminale.

A breve faro' anche un video, cosi' per chiarire meglio le operazioni.

Questo script fa parte di una mini raccolta di script(per adesso sono solo 4, presto ne pubblichero' altri) che potete scaricare dal link qui sotto

Scarica da qui

Per l'installazione scompattate l'archivio in una cartella a piacere ed eseguite lo script copy_script_in_nautilus-scripts.sh

Da ora per eseguire i vostri file eseguibili dovrete (da nautilus) cliccarci sopra con il tasto destro e andare su Script > EsegueFileEseguibili_xterm.sh
Non c'e' bisogno di impostare i permessi di esecuzione, se la vede lui stesso a impostarli.

In merito agli altri tre:
Terminale_qui.sh: apre un terminale nella posizione in cui viene chiamato
Terminale_ROOT_qui.sh: apre un terminale con i permessi ROOT nella posizione in cui viene chiamato
EsegueProgrammiTerminale_gnometerminal.sh: la funzionalita' e' la stessa di EsegueFileEseguibili_xterm.sh, ma usa gnome-terminal. Il vantaggio e' che usa il terminale che siamo abituati a vedere, lo svantaggio e' che se il programma eseguito non si mette in pausa al suo termine, il terminale si chiudera' e non sara' possibile visualizzare l'output.

giovedì 28 luglio 2011

Eseguire sorgenti Python rapidamente

Ho scritto uno script shell che permette di eseguire script Python comodamente con due click.
E' pensato soprattutto per chi come me programma in Python e necessita durante la programmazione di testare i propri script man mano che scrive

Scarica lo script

E' possibile eseguire lo script Python passandoglielo per parametro, oppure se non riceve input apre la finestra Zenity(wiki in inglese) nella cartella dove sono presenti gli script. Occorre quindi che sia installato Zenity, per farlo digitare da terminale sudo apt-get install zenity oppure trovarlo dal gestore pacchetti.
Il percorso assoluto di questa cartella deve essere immesso dentro lo script nella parte evidenziata dai commenti EDIT ME



ATTENZIONE: Ho modificato lo script shell che esegue script shell. Questo

mercoledì 13 luglio 2011

Operatori (confronto,logici) linguaggio Bash

Tra i linguaggi che ho (e sto) studiato il linguaggio Bash e' sicuramente il piu' difficile da comprendere quando si parla di operatori di confronto e logici. Specialmente perche' si usano operatori differenti per stringhe e interi.
Questa vuole essere una specie di appendice per chi, gia' un po' esperto, sta imparando a programmare in questo linguaggio.


Operatori di Confronto (STRINGHE)

-n : Verifica che la stringa sia di lunghezza maggiore di zero

-z : Verifica che la stringa abbia lunghezza zero

= : Verifica che due stringhe siano uguali

!= : Verifica che due stringhe siano diverse

< : Verifica che la prima stringa sia lessicograficamente minore della seconda
> : Verifica che la prima stringa sia lessicograficamente maggiore della seconda



Operatori Logici (STRINGHE)

! : Operatore di negazione, inverte il valore logico dell'espressione al quale viene applicato. !(vero) = falso

-a : Operatore AND. Ritorna vero se entrambi gli argomenti passati lo sono.

-o : Operatore OR. Ritorna vero se almeno uno degli argomenti lo e'.





Operatori di Confronto (NUMERI)

op1 -eq op2 : Vero se gli operandi sono uguali.

op1 -ne op2 : Vero se gli operandi sono differenti.

op1 -lt op2 : Vero se il primo operando e' inferiore al secondo.

op1 -le op2 : Vero se il primo operando e' inferiore o uguale al secondo.

op1 -gt op2 : Vero se il primo operando e' maggiore del secondo.

op1 -ge op2 : Vero se il primo operando e' maggiore o uguale al secondo.



Operatori Logici (NUMERI)

! espressione : Inverte il risultato logico dell’espressione.

espressione -a espressione : Vero se entrambe le espressioni danno un risultato Vero.

espressione -o espressione : Vero se almeno un’espressione dà un risultato Vero.







Operatori (FILE)

-e file : Vero se il file esiste ed e' di qualunque tipo.

-b file : Vero se il file esiste ed e' un dispositivo a blocchi.

-c file : Vero se il file esiste ed e' un dispositivo a caratteri.

-d file : Vero se il file esiste ed e' una directory.

-f file : Vero se il file esiste ed e' un file normale.

-L file : Vero se il file esiste ed e' un collegamento simbolico.

-p file : Vero se il file esiste ed e' una pipe con nome.

-S file : Vero se il file esiste ed e' un socket.

-t : Vero se lo standard output e' aperto su un terminale.



Permessi (FILE)

-g file : Vero se il file esiste ed e' impostato il suo bit SGID.

-u file : Vero se il file esiste ed e' impostato il suo bit SUID.

-k file : Vero se il file ha il bit Sticky attivo.

-r file : Vero se il file esiste ed e' leggibile.

-w file : Vero se il file esiste ed e' scrivibile.

-x file : Vero se il file esiste ed e' eseguibile.

-O file : Vero se il file esiste e appartiene all’UID efficace dell’utente attuale.

-G file : Vero se il file esiste e appartiene al GID efficace dell’utente attuale.



Altri operatori (FILE)

-s file : Vero se il file esiste e ha una dimensione maggiore di zero.

file1 -nt file2 : Vero se il primo file ha la data di modifica più recente.

file1 -ot file2 : Vero se il primo file ha la data di modifica più vecchia.

file1 -et file2 : Vero se i due nomi corrispondono allo stesso inode.

sabato 5 febbraio 2011

Nuova Sezione

E' stata appena creata una nuova sezione dedicata all'analisi di algoritmi fondamentali dove si spiega il funzionamento, si propone una implementazione Java e si analizza brevemente la complessita' temporale.
Gli algoritmi che verranno proposti saranno:
  1. Algoritmi di ordinamento: insertion sort, selection sort, bubble sort, merge sort, quick sort, shell sort, heap sort
  2. Algoritmi di ricerca: binary search, jump search
  3. Altri....
E' un lavoro che faro' con molta calma. Quando c'e' qualcosa di nuovo aggiornero' la lista di algoritmi.

mercoledì 17 novembre 2010

Modifica lista per dual-boot (Grub1, OBSOLETO)

A volte chi installa Ubuntu in dual-boot con Windows(o altro) preferisce che, nella lista di sistemi, Windows compaia per primo.

Occorre prima verificare il tipo di grub(e' la lista che compare appena accendete il pc) installato sulla macchina:
  • digitate da terminale grub-install -v
  • se ottenete un output del genere: grub-install (GRUB) 1.98+20100804-5ubuntu3.3 dove la versione del grub e' 1.98 (partono dalla 1.96) vuol dire che questa guida non vi serve a niente perche' avete la nuova versione del grub(in genere dovrebbe essere sempre cosi' per ubuntu aggiornati)
  • Se ottenete un output con la versione del grub inferiore alla 1.96 allora probabilmente questa guida e' quella giusta.
  • Detto piu' brutalmente se non trovate il file /boot/grub/menu.lst, vuol dire che non avete la giusta versione per questa guida

Bisogna modificare il file /boot/grub/menu.lst
Per farlo occorre aprire il file con privilegi da utente root. Seguite semplicemente queste istruzioni:
1) Da terminale digitate sudo -s gedit /boot/grub
2) Vi chiedera' una password, inserite la stessa che usate nella schermata d'avvio (N.B.: I caratteri non compaiono mentre digitate)
2) Vi si aprirà l'editor di testo gedit.

Navigare in questo file di testo è molto semplice.
Il sistema da caricare verra' indicato con questa sintassi:

title Ubuntu 9.10, kernel 2.6.31-20-generic
uuid 33d1bedb-2f8a-447b-8e19-fdaf5c457940
kernel /boot/vmlinuz-2.6.31-20-generic root=UUID=33d1bedb-2f8a-447b-8e19-fdaf5c457940 ro quiet splash
initrd /boot/initrd.img-2.6.31-20-generic
quiet



Scorrete il testo e cercate qualcosa che gli assomigli, tralasciate le righe che iniziano per # sono solo commenti.
Per modificare l'ordine della lista, basta modificare l'ordine con cui i sistemi compaiono nel file.


title Ubuntu 9.10, kernel 2.6.31-20-generic
uuid 33d1bedb-2f8a-447b-8e19-fdaf5c457940
kernel /boot/vmlinuz-2.6.31-20-generic root=UUID=33d1bedb-2f8a-447b-8e19-fdaf5c457940 ro quiet splash
initrd /boot/initrd.img-2.6.31-20-generic
quiet

title Windows Vista (loader)
rootnoverify (hd0,0)
savedefault
chainloader +1



Diventa...


title Windows Vista (loader)
rootnoverify (hd0,0)
savedefault
chainloader +1

title Ubuntu 9.10, kernel 2.6.31-20-generic
uuid 33d1bedb-2f8a-447b-8e19-fdaf5c457940
kernel /boot/vmlinuz-2.6.31-20-generic root=UUID=33d1bedb-2f8a-447b-8e19-fdaf5c457940 ro quiet splash
initrd /boot/initrd.img-2.6.31-20-generic
quiet



N.B.: Di solito i kernel(= "sistemi operativi") che compaiono nella lista sono piu' di due anche se avete il sistema DUAL-boot. Questo perche' ad ogni aggiornamento significativo che effettuate, Ubuntu non cancella la precedente versione del kernel. Basta che mettete il vostro vecchio sistema per primo!

Scarica questo articolo in versione pdf!