L'esaltazione del programmatore da cantina.

L'esaltazione del programmatore da cantina.

Ora che abbiamo il nostro Vi configurato a puntino è il momento di iniziare a capire come editare il file. Dopotutto… Vim serve proprio a questo.

La caratteristica che può disorientare è la presenza dei mode o modalità.

  • Inserimento (attivabile con Ins)
  • Visualizza (attivabile con V)
  • Sostituzione (attivabile con il Backspace o premendo Ins da Inserimento)
  • Comandi (è la modalità di partenza e si torna li con Esc)

Continue reading »

 

Dato che ho ripreso un po il pallino degli scacchi riporto di seguito uno script python di 60 righe non troppo elaborato (mancano infatti tutte le gestioni delle eccezioni) per il calcolo e aggiornamento del punteggio ELO.

L’uso è semplice e si riduce a:

python elo.py <elo_attuale> <score> <elo_avversario1> ….. <elo_avversarioN>

Per i sistemi Unix come al solito su può tralasciare il “python” iniziale.

#! /usr/bin/env python
# Calcolatore per ELO

import sys

#Costanti per estrarre i dati dal risultato di Start.
OLD_ELO = 0
EXPECTED_SCORES = 1
EFFECTIVE_SCORE = 2
NEW_ELO = 3

#Impostazioni.
SEP = 60

def punteggioAtteso(diff) :
    return 1.0 / ( 1.0 + (10.0 ** ( float(diff) / 400.0 ) ) )

def newElo(elo, patteso, peffettivo, K) :
    return elo + int (K * (peffettivo - patteso) )

def start(arg) :
    lista_attesi = []
    myElo = int(arg[0])
    if myElo < 2100 :
        K = 32
    elif 2100<=myElo<=2400 :
        K = 24
    else :
        K = 16
    peffettivo = float(arg[1])
    avversari = arg[2:]
    patteso = 0
    for i in avversari :
        current_atteso = punteggioAtteso( int(i) - myElo )
        lista_attesi.append(current_atteso)
        patteso += current_atteso
    return (myElo, lista_attesi , peffettivo, newElo(myElo,patteso,peffettivo,K) )

def printResult(result) :
    myElo = result[0]
    lista_attesi = result[1]
    peffettivo = result[2]
    nelo = result[3]
    print "Your current ELO is: %i" % myElo
    print '-'*SEP
    somma = 0.0
    for i in lista_attesi :
        print "\tExpected score #%2i: %f" % (lista_attesi.index(i) + 1 , i)
        somma += i
    print '-'*SEP
    print "\tExpected total score :  %f" % somma
    print "\tEffective total score:  %f" % peffettivo
    print '-'*SEP
    print "Your new ELO is: %i" % nelo
    print "Change: %i%%" % int( ((nelo - myElo) * 100.0) / myElo)
    print '-'*SEP

if __name__ == "__main__" :
    arg = sys.argv[1:]
    result = start(arg)
    printResult(result)

Allegherò in seguito un file commentato.

 
Il bellissimo logo di Python.

Il bellissimo logo di Python.

Come si dice in questi casi “a grande richiesta” comincierò a parlare di Python e cercherò di farlo nel modo più “pratico” possibile.

Premetto che parlerò di questo linguaggio alla luce delle 10 lezioni sulla programmazione generale quindi per chi non le ha lette, consiglio di recuperare!

Detto questo iniziamo subito a dire cos’è Python. Python è un linguaggio di script interpretato con paradigma ad oggetti dotato di una tipizzazione forte dinamica (capire questa frase punto per punto è anche un utile esercizio per vedere se avete chiari i concetti precedenti xD).

Continue reading »

 

Ho visto questa mattina che Slashcode è arrivato a quota 1000 visite. 1000 visite in un mese non sono malaccio e volevo ringraziare tutti coloro sono passati di qui e soprattutto chi ha commentato e quindi, in un certo senso, collaborato.

Spero di continuare cosi! :)

Allora per mantenere attivo il vosto interesse elencherò le cose in programma per il futuro prossimo:

  • PyBackup 0.5 rilasciato in versione stabile con l’aggiunta di alcuni fronted oltre al basilare PyBackup-GTK.
  • La guida a Vi/Vim che ho iniziato ieri. Abbiamo molto da parlare e le funzioni interessanti devono ancora arrivare!
  • Il rilascio in formato pdf riveduto, corretto e ampliato delle prime 10 lezioni sulla programmazione generale.
  • L’inizio della guida di introduzione al Python. Cercherò di trattare il più velocemente le basi sintattiche del linguaggio per approfondire alcune librerie e introdurre tecniche di programmazione più avanzate.

Penso che per il momento basti. Ovviamente ogni suggerimento è ben accetto e cercherò di parlare di ciò che volete se possibile. :)

 
Il logo di Sphinx.

Il logo di Sphinx.

Mi apprestavo a scrivere la documentazione per PyBackup (che attualmente è in fase di manutenzione, rifinizione, etc etc) ed ho trovato molto comodo il tool Sphinx (utilizzato addirittura per la documentazione ufficiale del progetto Python).

Sphinx però non è presente nei repository di Ubuntu Hardy e l’istallazione da sorgenti, sebbene automatizzata, mi aveva dato problemi.

Girando per la rete ho visto che Sphinx è presente però nei repository di Intrepid Ibex. Allora ho scaricato il deb di sphinx e la sua dipendenza e le ho installate senza problemi.

Sphinx permette di creare documentazione HTML e LaTex in maniera veramente molto semplice, basta ricordare quelle due-tre regole di sintassi per fare di tutto. Basta scrivere dei file .rst che poi elaborerete con sphinx-build.

Per maggiori informazioni vi rimando al sito ufficiale dove ci sono esempi e il file di documentazione che potete consultare per capire come usare Sphinx nei vostri progetti.

Inoltre ci tengo a precisare che Vim è in grado di evidenziare la sintassi dei sorgenti dei file .rst a differenza di gEdit e degli altri editor che ho provato. :)

 
L'esaltazione del programmatore da cantina.

L'esaltazione del programmatore da cantina.

Interrompiamo per un attimo la guida sulla programmazione generale perchè arrivato a quota 10 c’è il bisogno di rivedere, correggere e ampliare il lavoro svolto finora (e rilascerà anche una versione in .pdf cosi  da tenere i vostri 10 capitoli in un formato più consultabile).

Affronteremo uno dei programmi più versatili per la programmazione da tenere sempre sottomano per ogni evenienza. Ovvero il super-famoso Vi/Vim.

Non cominceremo però spiegando come funziona, ma di configurarlo in un modo che io trovo ottimale per la programmazione. In questo modo vedrete subito che non si tratta di un semplice editor da linea di comando.

Continue reading »

 

PyBackup è uno script per eseguire con rapidità Backup differenziali e non. Dotato di un fronted scritto in PyGTK.

Feature della versione 0.5:

* Possibilità di eseguire backup totali.
* Possibilità di eseguire backup differenziali.
* Compressione in gzip o bzip (al momento solo linea di comando)
* Log dei file aggiunti, modificati o cancellati dall’ultimo backup. (al momento solo linea di comando)

FILE DEB:

Questo è il fronted (richiede la versione a linea di comando):
http://launchpad.net/pybackup/trunk/0.5b/+download/pybackup-gtk-0.1.deb


Questo è il programma da linea di comando:
http://launchpad.net/pybackup/trunk/0.5b/+download/pybackup-0.5c.deb

La versione a linea di comando dovrebbe funzionare anche su Windows (fino alla versione 0.4 andava)

EDIT: 05/09/08 – Ho cambiato il deb del programma a linea di comando poichè dava problemi. :)

Inoltre c’è un altro problema del deb (groan) che non fa usare pybackup con i percorsi relativi. Per ovviare basta aprire con un editor /usr/bin/pybackup e cambiare questo:

#!/bin/bash
cd /usr/share/nomeprogramma
python nomeprogramma.py $*

con questo:

Codice:
#!/bin/bash
python /usr/share/nomeprogramma/nomeprogramma.py $*

Presto rilascerò una versione corretta e ottimizzata. Scusate l’inconveniente.

 
Per capire la ricorsione bisogna innanzitutto capire la ricorsione...

Per capire la ricorsione bisogna innanzitutto capire la ricorsione...

Ora conosciamo sufficientemente la struttura della memoria e i principi del suo funzionamento. Per spiegare lo stack, in particolare, ho dovuto fare richiamo alle funzioni.

Le funzioni sono un argomento fondamentale della programmazione e alcuni processori le implementano addirittura a livello di assembly.

Il concetto di funzione è molto semplice. Una funzione può essere vista come una “macchina” che riceve in pasto dei dati, li elabora e a volte restituisce un risultato.

Continue reading »

© 2008-2012 SlashCode Suffusion theme by Sayontan Sinha