CrunchBang Linux lascia Ubuntu passa a Debian


Ho ritenuto importante portare in evidenza questa notizia poiché credo che ricalchi per bene la situazione paradossale creatasi per le parole e le azioni di Mark Shuttleworth e della direzione di Canonical.


CrunchBang Linux, per chi non lo sapesse, è una distro che ha l’obiettivo di portare il famoso window manager OpenBox su i desktop degli utenti in maniera facile essendo una distribuzione con tale ambiente già installato e preconfigurato.
Essa è rivolta sopratutto a computer datati, con poche risorse o con hardware obsoleto vista la scarsa richiesta di requisiti minimi dei quali essa necessita.

Fin dalla sua nascita, CrunchBang Linux era basata su l’ultima versione di Ubuntu in maniera tale da fornire agli utenti un sistema noto e ben supportato dalle web comunity. Da quanto si può leggere ora, invece, sulla pagina ufficiale delle news, la distribuzione sarà basata su Debian e precisamente sul suo ramo testing che attualmente è Debian 6, nome in codice Squeeze.


Per quale motivo si ha tale cambiamento? Forse i rilasci troppo frequenti di Ubuntu erano un peso per lo sviluppo della distribuzione o forse le nuove mosse dell’alta dirigenza sud africana iniziano a pesare su i piccoli sviluppatori di derivate?
Forse non lo sapremo ma fatto sta che le scelte e le parole anti democratiche di Shuttleworth non hanno favorito per niente la creazione di un clima solidale su cui Ubuntu dice di nascere e crescere.

I soldi rovinano anche le idee più brillanti e forse la celeberrima distro ne è una forte testimonianza.

Spero di sbagliarmi per il bene della libertà del campo informatico.


Gambas: Passaggio parametri variabili ad una funzione


Quando si programmano software un pò più avanzati si deve tener conto che non tutto nella vita può essere definito a priori.
Basti immaginare a chi sviluppa una semplice calcolatrice da riga di comando. Molte volte ho visto questo esempio ma l’errore sempre ricorrente era quello di accettare sempre e solo due parametri numerici ai quali applicare l’operazione prescelta. La cosa è molto utile dal lato sviluppo ma davvero poco professionale dal lato utenza.

Qualsiasi linguaggio che si rispetti da la possibilità a chi programma di scrivere funzioni che accettano anche parametri senza prima definirne l’esatte numero, semplicemente scrivendo un prototipo che indichi al sistema che tale funzione accetta parametri ma ne accetta tanti quanti l’utente ne inserisce.

Questo modo di programmare è davvero utile e flessibile e toglie dall’imbarazzo di dover specificare nei propri programmi che una certa operazione può essere eseguita solo tra due dati alla volta.

In Gambas, svolgere tale compito è davvero semplice e vedremo ora come fare.

Il passaggio indefinito di parametri prevede una struttura della funzione uguale a quelle a cui siamo abituati con una differenza nella dichiarazione dei parametri da passare in fase di esecuzione. Immaginiamo di avere la nostra funzione di nome FAddizione che deve sommare tutti i numeri interi passati come parametri (di cui ovviamente non sappiamo il numero a priori) e ne deve restituire la somma intera. Il prototipo di tale funzione sara quindi:

FAddizione (Numero1 AS Integer, Numero2 AS Integer, …) AS Integer

Innanzitutto vediamo che la definizione prevede un costrutto del tutto simile ad una normale funzione, con la differenza che il terzo parametro viene definito come una serie di tre punti ( … ) che sta ad indicare al linguaggio che dopo Numero2 non si sa quanti altri parametri verranno sottoposti ad operazione.
Si noti che i primi due parametri, ovvero Numero1 e Numero2, vengono definiti esplicitamente per il semplice fatto che non ha senso effettuare una somma se non ci sono almeno due numeri su cui effettuare l’operazione.

Il codice che eseguirà il lavoro voluto è il seguente:

FAddizione (Numero1 AS Integer, Numero2 AS Integer, …) AS Integer

DIM Elemento AS Integer
DIM Risultato AS Integer

Risultato = Numero1 + Numero2

FOR EACH Elemento IN Param
Risultato = Risultato + Elemento
NEXT

RETURN Risultato

END

Dunque, come si vede la funzione, come primo passo, somma i due numeri passati esplicitamente alla funzione mediante l’operazione

Risultato = Numero1 + Numero2

Fatto ciò scorre tutti gli altri elementi passati alla funzione, non definiti, mediante il ciclo FOR EACH. Si vede infatti che è stato definito un intero all’interno della funzione di nome Elemento che indica di volta in volta nel ciclo un nuovo elemento presente in Param. Elemento viene sommato a Risultato che aggiorna, di volta in volta, il suo valore con il proprio valore precedente sommato al nuovo parametro.

Apriamo una parentesi. Param è una classe statica, di sola lettura, interna di Gambas che prevede la gestione di tutti gli extra-parametri di una funzione. Essa gode di alcune proprietà che agevolano il trattamento di questa particolare situazione.
Nel nostro caso sfruttiamo la particolarità della classe di essere enumerabile mediante il ciclo FOR EACH e di scorrerla quindi finchè c’è un dato da leggere.

Tornando al codice si può vedere come con l’istruzione:

RETURN Risultato

Restituisce alla fine di tutto il dato voluto.

CONSIDERAZIONI

L’uso di questo tipo di struttura e del suo costrutto deve diventare una prassi per i codici che richiedono la risoluzione di questi tipi di situazioni poichè può accadere che all’utente serva passare un grosso numero di parametri e si costringerebbe chi opera sul nostro software a creare numerosi cicli, dispendiosi in termini di tempo, per effettuare semplici operazioni.

Ovviamente rimango a vostra disposizione per chiarimenti in merito a questo articolo.

Aggiornamento Modulo Math


Continua la mia epopea per l’implementazione di nuove funzioni al linguaggio Gambas.


Questa volta mi sono dedicato alla gestione della libreria matematica che avevo già iniziato tempo addietro con la scrittura della conversione da decimale a romano.

Il primo passo che ho effettuato è stato quello di abbandonare la vecchia struttura nella classe e riscrivere il codice in un modulo che è di più facile implementazione e di migliore gestione.

Sono state aggiunte diverse funzioni:

MCD e GCD

Funzioni equivalenti. Calcolano il Massimo Comun Divisore tra due interi.

MEDIA

Restituisce la media tra diversi valori reali.

E e NEPERO

Equivalenti. Costanti che restituiscono il numero di Nepero.

Il modulo ovviamente è scaricabile dal sito mediante il link che si trova sulla colonna di destra della pagina sotto la voce MATH.

Come sempre per chi ne abbia bisogno sono disposto ad implementare nuove funzioni richieste o modificare eventuali anomalie di quelle già esistenti.

Non mi resta che augurarvi buona programmazione!