Feb 17

Allego un programma del famoso gioco del Sudoku, ce ne sono molti in giro, comunque questo ha il vantaggio di essere flessibile, senza installazione, ed indipendente dalla dimensione del tavolo. Per la generazione del gioco sfrutta un algoritmo genetico (realizzato anche dal prof. Alessandro Londei, esperto di reti neurali e di intelligenza artificiale) molto interessante codificato in VB di cui avrò modo di parlare in successivi articoli.

La versione che distribuisco consente di giocare a Sudoku Junior, ma se a qualcuno interessa rilascerò senza problemi una licenza definitiva. Il programma ha una protezione che si lega al PC ove è installato, quindi per abilitarlo ho bisogno del file di licenza generato (file txt). I sistemi di protezione di questo tipo sono più difficili da superare…

Buon divertimento.

Feb 14

Recentemente ho scoperto che gli aggiornamenti web su Kubuntu non funzionano quando si utilizza un Proxy di tipo MS ISA, infatti nonostante abbia settato correttamente utente/pwd e proxy nel file /etc/apt/apt.conf.d/proxy:

Acquire::http::proxy http://utente:password@indirizzo_proxy:porta

l’istruzione di aggiornamento:

$ sudo apt-get upgrade

non riesce a colloquiare con il proxy ISA. Leggendo un po’ di blog ho scoperto l’esistenza di un server davvero interessante scritto in Phyton chiamato NtlMaps :
http://sourceforge.net/projects/ntlmaps/
Dopo averlo scaricato e decompresso occorre agire sul file di configurazione:

$sudo kate server.cfg

e cambiare le seguenti righe:

LISTEN_PORT:5865 — una qualsiasi porta locale abilitata sulla nostra macchina (5865 è un esempio)
PARENT_PROXY_PORT:80 –la porta delle connessioni http
NT_DOMAIN:utentiNT — il nome del dominio NT a cui accedere
USER:alessandro — l’utente del dominio
PASSWORD:boh — la password per quell’utente

A questo punto bisognerà configurare due variabili di ambiente direttamente dalla shell:
$ export http_proxy=http://127.0.0.1:5865 (porta locale definita nel file server.cfg)
$ export ftp_proxy=http://127.0.0.1:5865 (porta locale definita nel file server.cfg)

(oppure impostarle nel file /etc/basch.bashrc)

Per avviare il server bisognerà semplicemente scrivere:

$ python main.py &
(avviato così in background)

questo punto se abbiamo configurato tutto correttamente l’aggiornamento sarà
possibile con il solito comando:

$ sudo apt-get upgrade

Feb 12

Il problema dell’ordinamento di un array in Java si può risolvere in molti modi, in questo articolo vediamo un procedimento efficiente (complessità media O(n log n)) indipendente dal contenuto dell’array.

Questa classe contiene al suo interno anche un array di etichette (quando si ordinano dei dati è comodo avere un riferimento testuale) del tutto opzionale. Il procedimento si può ri-utilizzare anche in altri linguaggi purché si adotti, se esiste, il costrutto equivalente al Generic Java del linguaggio di codifica (es. i template del C++).

import java.util.Comparator;
  public class QuickSort<generica><generica>&gt;  {
    String [] label;
    Generica[] array;
    private  void  swap( int i, int j) {
    Generica  tmp = array[i];
    array[i] = array[j];
    array[j] = tmp;
    String sTmp =label[i];
    label[i] = label[j];
    label[j] = sTmp;
  }
 
  private int partition(int low, int high) {
    int index = low+(int)(Math.round(Math.random()*(high - low)));
    Generica pivot = array[index];
    swap( index, high);
    for (int i = index = low; i &lt; high; ++ i) {
      if (array[i].compareTo(pivot) &lt;= 0) {
        swap( index++, i);
      }
    }
    swap( index, high);
    return (index);
  }
 
  private  void quickSort(int  low, int high) {
    if (high &gt; low) {
      int index = partition( low, high);
      quickSort( low, index - 1);
      quickSort( index + 1,  high);
    }
  }
 
  public  void quickSort(Generica [] array) {
    this.array=array;
    quickSort( 0, array.length - 1);
  }
 
  public  void quickSort(Generica [] array, String label[]) {
    this.label=label;
    this.array=array;
    quickSort( 0, array.length - 1);
  }
}</generica></generica>
Feb 06

Penso che tra i sogni di ogni programmatore ci sia quello di utilizzare un linguaggio universale di codifica indipendente dall’architettura (client/server o web oriented), dalla piattaforma hw/sw, che funzioni sempre allo stesso modo per implementare concetti comuni come una finestra, un bottone, un accesso ad una risorsa (file, db,…). Se a tutto questo inseriamo un pizzico di effetti speciali accattivanti la miscela diventa davvero esplosiva.

La presenza del flash player in ogni browser è un dato di fatto (vedremo poi che la versione dell’ambiente che sto per presentare è “compliant” anche a DHTML), sarebbe interessante poter scrivere un programma in un linguaggio scritto interamente in XML come, ad esempio:

<window> qualcosa </window>

per attivare una finestra sullo schermo (avete mai provato in Java?) .

La risposta è semplice e si trova su Open Laszlo, un compilatore per applicazioni flash/DHTML, Open Source, per applicazioni stand-alone, cliente/server o web oriented. Personalmente ho trovato molti esempi, oltre che nel forum del sito, anche su vari altri siti nipponici (resi leggibili solo grazie al traduttore di Google, thxs a lot!) e sarebbe interessante divulgare queste notizie anche alla numerosa comunità di sviluppatori italiani.

Una volta istallato l’ambiente, che contiene un application server, un compilatore con debugger integrato (veramente efficace) ed un insieme di demo e tutorial veramente esaustivi, possiamo incominciare (dopo aver attivato l’OpenLaszlo Server da menu) con il primo programmino di esempio:

Nella directory C:\Program Files\OpenLaszlo Server 4.0.8\Server\lps-4.0.8\my-apps (accessibile tramite menu) possiamo scrivere il primo programma in Laszlo:

<canvas>
<window>
<button>Hello World!</button>
</window>
</canvas>

e memorizzarlo in un file che abbia estensione .lzx (ad esempio prova.lzx). I TAG utilizzati sono autoesplicativi e non necessitano di ulteriori dettagli.

Richiamando da browser la directory my-apps e aprendo il file appena generato, esso verrà compilato in flash (dipende dagli switch in fondo alla pagina) ed il risultato sarà visibile all’interno del browser. Provate a trascinare la finestra appena creata, non è stupefacente!?

http://127.0.0.1:8080/lps-4.0.8/my-apps/prova.lzx

Per colori i quali hanno già un server sulla propria macchina che risponde alla porta 8080 è possibile modificarla agendo (non a caso) su un file XML: server.xml che è nell’application server (TomCat) della distribuzione.

La domanda che potrebbe nascere è: “se XML è un linguaggio universale per i dati, come si fa a scrivere i metodi (tanto per restare in tema di Object-Oriented)?” La risposta è in un ulteriore articolo, sempre che l’argomento sia di interesse per la Comunità….

Buon divertimento.

Feb 06

BACKUP

Per effettuare backup su mysql avete due possibili tool mysqlhotcopy e mysqldump.

mysqlhotcopy è un tool scritto in perl molto grezzo.

si limita a copiare l’intera directory contenente i dati del database in una directory a vostra scelta.

# mysqlhotcopy nomedatabase /pathdirectorydovevoletecopiare/

Mysqldump è un tool molto più completo e meno grezzo rispetto a mysqlhotcopy.

Mysqldump genera un file contentente istruzioni SQL che permettono di ricreare tutta la struttura del database (compresi i record dello stesso). La cosa è molto interessante in quanto permette all’amministratore di poter utilizzare questo file su qualsiasi piattoforma e/o sistema operativo e permette di avere una flessibilità rilevante in quanto si possono importare porzioni del database (sia tabelle che valori), ultima considerazione e non per questo meno importante il suddetto tool permette di effettuare backup da remoto.

Possibile utilizzo:

# mysqldump nomedatabase > nomefile.sql -u root -p
Enter password: vostrapassword


# mysqldump --all-database > nomefile.sql -u root -p
Enter password: vostrapassword

Continua a leggere »

Feb 04

Video Spiegazione del lunedi di ICTV

Come è costituito un Database

Vedi>