Unix – Processi #1

Unix Logo
Ultimamente passo decisamente troppi problemi. Troppi casini tutti insieme mi hanno e mi stanno mettendo alla prova i nervi.
Comunque, nei momenti di lucidità le mie deformazioni professionali prendono il sopravvento. Quindi festeggio questo momento di distensione mentale con un altro tassello al muro di slashcode.
Cominciamo quindi a parlare della programmazione di sistema. In questa sede ci occuperemo della programmzaione in ambito Unix. Il motivo è semplice: è quella che conosco meglio e di cui (grazie alle numerose implementazioni aperte) è possibile studiare più in dettaglio il funzionamento. Citerò solamente il nome della funzione analoga per Windows in modo che chi sia interessato possa evere un punto di partenza per ricerche autonome.
Il nostro percorso inizia dai processi.
Enea – Environment for NEtwork Applications

ENEA
Ho scelto il progetto di reti che porterò come “tesi” della triennale. A dire il vero l’ho scelto già qualche settimana fa ma poichè il suo sviluppo si sta rilevando più interessante e istruttivo del previsto ho deciso, come mio solito, di condividere gran parte del mio lavoro. Come mio solito, inoltre, ho complicato la traccia del progetto per renderlo “più divertente” o quantomeno renderlo qualcosa che possa uscire al dilà della fredda sessione di laurea.
ENEA è l’acronimo di Environmento for Network Applications, ovvero un infrastruttura per l’esecuzioni di applicazioni basate sul Grid Computing e specialmente il Calcolo Distribuito.
L’intera applicazione è scritta in Java (come da buona tradizione universitaria) e fa uso di librerie standard (quindi portabili e multipiattaforma). Per ora non c’è nulla di funzionante in quanto mi sono dedicato per lo più alla fase di analisi e progettazione.
Presto metterò altre informazioni.
Appendice – Diagrammi di Flusso
Vedendo le statistiche del sito mi sono accorto che la parola più usata per arrivare a questo blog è, con ampio margine, la parola diagramma di flusso.
A quanto pare c’è molto interesse attorno a questo strumento che io trovo più didattico-scolastico che di vera utilità o valore scientifico. Come tutti i modelli di rappresentazione grafica è infatti improponibile per rappresentare un qualsivoglia programma complesso ma inoltre ha lo svantaggio di non avere la base teorica e formale che hanno altri modelli.
Ho comunque deciso di parlarne per colmare la mancanza facendovi però notare che esistono modelli più rigorosi quali automi a stati finiti, automi a pila e macchine di Turing.
Debian e il bug tracking

Il classico logo di Debian
Gli ultimi mesi sono stati un po’ un disastro. Avrei tanta voglia di sfogare le varie ire funeste che ho serbato dentro in questo tempo ma non voglio certo abusare dello spazio concessomi (auto-concessomi oltretutto).
Approfitto del mio ritorno per parlare di una delle fasi più importanti nello sviluppo di un applicazione. Ovvero il bugtraking.
Tutti sappiamo (o abbiamo sentito parlare) dell’esistenza dei bug nei software (e non solo). Tutti ce ne lamentiamo. Scriviamo post alterati di indignazione quando un bug (magari non frequente) ci colpisce e ci causa danni o crash di sistema. Macchiamo l’immagine di ogni programma a causa del bug che fa traboccare il vaso. Ma nessuno, o quasi nessuno, si prende la briga di segnalarlo e di aiutare gli sviluppatori a venirne a capo.
Server FTP con Debian e DNS Dinamici #2
DynDNS, servizio di DNS Dinamici
Continuiamo la nostra piccola guida a puntate per configurare il nostro PC in un affidabile server FTP.
Nell’articolo precedente avevamo istruito il nostro router ad aggiornare automaticamente DynDNS con il vostro IP ogni volta che vi viene cambiato in modo da avere un indirizzo nominale sempre collegato al vostro PC.
Ora non ci resta che istallare il server ftp sulla macchina locale e sistemare le ultime configurazioni.
Server FTP con Debian e DNS Dinamici #1
DynDNS, servizio di DNS Dinamici
Rieccomi qui dopo un 30 a Modelli e un 30 e lode a Fisica (vantiamoci finchè possiamo xD). Per festeggiare, invece di Pub e Cinema come ho sempre fatto, questa volta passerò una mezz’oretta a spiegarvi come trasformare il vostro PC, o qualche mondezzone inutilizzato in un pratico e comodo server FTP accessibile da ogni parte del mondo.
In realtà preferirei molto fare Pub e Cinema, ma non ho trovato nessuno disponibile e la mia ragazza abita a 70Km… quindi ritenetevi fortunati.
Tornando in tema, per fare ciò ci occorre semplicemente una connessione flat a internet (ovviamente), un router che supporta i DNS Dinamici e, per ultimo ma non per importanza, il nostro sistema operativo.
Io utilizzerò nella guida un modem-router Trust MD-4050 e il sistema operativo Debian Testing. Per quanto riguarda il router non ci sono grandi differenze, variano le immagini ma i passi rimangono quelli. Per chi invece avesse la sfortuna di usare Windows può continuare a leggere tutto fino alla parte della configurazione del PC e di cercare una guida per impostare al proprio PC l’IP Locale statico. Penso che scriverò presto una guida al riguardo per Windows XP (mi spiace ma Vista/Seven non lo ho proprio a disposizione e non ci tengo ad averlo, però chi vuole può scrivere una guida al riguardo che sarò lieto di pubblicare).
Buon 2009

Buon 2009!
Buon 2009, anche se in ritardo, a tutti quelli che seguono questo blog e che lo sostengono.
Per me questo 2009 comincia con una sequenza infinita di esami quindi sfortunatamente credo allenterò il ritmo dei post. Spero e credo che comunque riuscirò ad uscirmene con qualcosa di utile
Ancora Buon Anno da SlashCode.
C/C++ – Dichiarazione Avanzata dei Tipi
![confused Reazione davanti a un int*(*b[])(int)...](http://slashcode.files.wordpress.com/2008/12/confused.jpg?w=150&h=150)
Reazione davanti a un int*(*b)(int)...
Uno degli scogli principali per chi comincia a programmare in C è proprio quello di comprendere bene il significato dei vari * e delle funzioni più contorte. Non è inverosimile che per i principianti si sviluppi un metodo di programmazzione chiamato “proviamo e vediamo se funziona” che consiste nell’aggiungere asterischi a caso nella dichiarazione fino a quando il programma funziona come sperato.
Ovviamente questo metodo è sconsigliabile, contando che esiste una pratica regola che rende decifrabile anche le dichiarazioni più ingarbugliate: “go right when you can, go left when you must”
Algoritmica – Ordinamento – Bubble Sort

L'algoritmo di Bubble Sorting in azione.
Insertion Sort e Selection Sort non si sono rivelati all’altezza delle nostre aspettative e noi ci ritroviamo ancora senza un algoritmo efficente per ordinare, o meglio: sappiamo ordinare le tracce di un album, oppure i CD di un apiccola collezione domestica, ma avremo molte difficoltà nell’ordinare in ordine di età gli abitanti di Roma o i volumi di un agrande biblioteca.
Dobbiamo proseguire la nostra ricerca, cambiamo approccio, questa volta il nostro tentativo cade sul Bubble Sort.
Algoritmica – Ordinamento – Selection Sort

Rappresentazione grafica di un ordinamento con Selection Sort
Nell’ultimo appuntamento abbiamo visto e analizzato gli aspetti generali dell’Insertion Sort e notato che esso non è affatto un algoritmo usabile in pratica per istanze (ovvero input) molto grandi.
Ovviamente l’Insertion Sort non è l’unico algoritmo di sorting esistente. Nella nostra ricerca dell’algoritmo ottimo di sorting oggi guarderemo il Selection Sort.
(continua…)