giu
29

Il lato oscuro di Volkswagen

 

Greenpeace ha fatto ripreso la pubblicità che Volkswagen fece al Super Bowl, col bambino travestito da Darth Fener, per spingere la casa automobilistica a non opporsi all aumento degli obiettivi europei sulla riduzione delle emissioni di CO2.
Trovo che abbiano creato campagna di sensibilizzazione molto ben fatta.

 

Entra a far parte dell alleanza ribelle! ;)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

giu
25

Aggiornamenti

 

E da un po che scrivo, sono stato molto preso negli ultimi mesi. Cosa mi ha occupato così tanto tempo?

  1. Lo studio (ingegneria è pesantuccia)
  2. Qualche lavoro di consulenza (ormai mi ritrovo degli sconosciuti che mi parlano quando ceno fuori)
  3. Il ViGLug (in particolare il Brain Jumble è stato faticoso da organizzare)
  4. Il PD (ho creato il sito di zona, un database di zona, e ho un piano per razionalizzare il tutto)
  5. I miei progetti e le mie folli idee, spesso condivise con Nedanfor (ho creato un discreto editor Python, un applicazione per cellulari che si interfaccia con Kiva e… beh, non posso svelarvi quello su cui sto lavorando ora)
  6. Un po di svago di tanto in tanto (ho la passione per la costruzione di ferrovie automatizzate in Minecraft)
  7. Negli ultimi giorni ho cambiato server, sono passato da Netsons ad Alwaysdata, e sono particolarmente soddisfatto)

Si, è vero, un salto sul blog avrei potuto farlo, vi chiedo di perdonarmi :) Adesso devo affrontare qualche esame e poi si torna in Liguria dagli amici per fare un epocale lan party notturno tra bzflag, call of duty e minecraft pvp :)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ott
24

Nasce il ViGLug

 

Siccome abbiamo suscitato molto interesse e abbiamo riscontrato la necessità di un Lug nella nostra zona, posso annunciarvi con gioia la creazione dei ViGLug: il Vignate GNU/Linux user group :)

Il nostro sito è: www.viglug.org

Dateci qualche giorno per allestirlo e sistemare il tutto ;)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ott
15

Netboot.me

 

Cos’è Netboot.me? E’ un’immagine da ~300 kb da ficcare su un qualsiasi dispositivo (magari una vecchia pennetta usb), fa una richiesta dhcp, si connette a internet, scarica un menù contenente le principali distribuzioni BSD e GNU/Linux, e permette (sempre utilizzando esclusivamente la rete) di fare il boot e di avviare l’installazione o la live del vostro amato sistema: tutto finisce in ram, infatti è consigliabile togliere la pennetta subito dopo il boot, così da non interferire nelle operazioni di partizionamento e installazione.

Non c’è la vostra distribuzione preferita? Basta segnalarlo sul sito, specificando un paio di dati e apparirà nel menù della vostra pennetta, senza dover scaricare o sovrascrivere nulla (ripeto, il menu di boot stesso viene scaricato da internet).

Comodo no? ;)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ott
04

Linux Day a Vignate

 

In occasione del Linux Day, nasce “formalmente” il nuovo GNU/Linux user group di Vignate (MI)!

Ci si ritrova alle 10.30 in Via Manzoni 16, nei locali della sede del PD di Vignate. Seguirà una introduzione alla filosofia del software libero e alla sua storia, da Richard Stallman fino alle moderne distribuzioni Linux. Alle 11.30 ci sarà una presentazione dei sistemi operativi liberi più utilizzati e dei più famosi programmi liberi, con distribuzione gratuita su cd di questi ultimi.

Nel pomeiggio (a partire dalle 14.45) ci saranno alcune dimostrazioni pratiche dove verrà installata la distribuzione Ubuntu Linux su un computer di esempio, mostrando le procedure e aiutando l’utente al primo approccio. Al termine di quest’ultimo talk ci sarà un Linux installation party per chi desidera provare una distribuzione Linux sulla propria macchina, quindi portatevi dietro il vostro portatile (se avete un fisso vi preghiamo di avvisare prima)!

La scaletta può subire variazioni, in quanto è la prima volta che il nuovo LUG di Vignate si “ritrova”. La giornata è organizzata da Francesco Frassinelli (il sottoscritto) e da Jessica Nazzari.

Vi aspettiamo numerosi! :)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

set
27

Symbian, QT Quick e Linux!

 

E dopo un po’ di attesa, ecco le nuovissime e scintillanti QT 4.7.0!

La novità principale? QT Quick ovviamente! E che sarebbe? Semplice, un nuovo modo per disegnare le intefacce grafiche, in QML (un linguaggio dichiarativo basato su Javascript). Ovvero? Beh, sembra di scrivere una sorta di svg :D

Ora… Dopo aver consultato pagine e pagine di documentazione e aver creato la nostra applicazione… Come portarla su Symbian con le nuove QT? Beh, Frafra s’è un po’ rotto di doversi settare a manina l’ambiente di sviluppo (vedasi il precedente post), e allora ha scoperto come, utilizzando QT Creator, ovviare al problema. Come? Con la compilazione remota :)

In parole povere si deve:

  1. Seguire la procedura di installazione e configurazione dell’SDK dalla pagina wiki.forum.nokia.com/index.php/How_to_install_and_use_the_Nokia_Qt_SDK_Remote_Compiler
  2. Programmare e compilare col nuovo metodo
  3. Rimuovere le vecchie QT dal cellulare
  4. Installare le nuove da ftp.qt.nokia.com/pub/qt/symbian/4.7.0/qt_installer.sis
  5. Installare il .sis del nostro programma sul cellulare, installare e… Divertirsi!

Per programmare con QT Quick vi rimando alla documentazione: doc.qt.nokia.com/4.7/qtquick.html

Tenete conto che poi dovrete creare un file C++ dove istanziate la gui e mostrarla. Per facilitarvi il compito, ho riscritto il programma relativo al microcredito di Kiva, e ho messo tutto in un bel pacchetto chiamato kiva-quick.tar.gz.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
26

Programmare su Symbian con le QT

 

Per capire dove nasce questa idea malsana, vi consiglio di leggere la prima e la seconda puntata ;)

Giusto questa sera, sono riuscito a fare il porting su Symbian della mia piccola applicazione C++/QT. Ecco come fare:

Requisiti: dovete avere gcc/g++ installato, make, qmake, le librerie di sviluppo di libssl e zlib, wine, e un po’ di pazienza :)

In una cartella, scaricate:

A questo punto bisogna creare (in una posizione a piacimento della nostra home directory), la cartella “gnupoc”, contenente la cartella “qt”, che a sua volta deve contenere la cartella “bin”. Una volta creata questa struttura, bisogna avviare il primo script scaricato, in questo modo:

$ bash gnupoc_1.15_installer_v2.sh `pwd` $GNUPOC 5.0

“$GNUPOC” deve essere sostituito col percorso assoluto della cartella poco fa creata, senza slash (“/”) finale.  Se tutto è andato bene, vi dirà di dare un paio di comandi da terminale per impostare l’ambiente, ovvero:

export PATH=$GNUPOC/bin:$PATH
export EPOCROOT=$GNUPOC/symbian-sdks/5.0/

A questo punto aggiungiamo a $PATH anche il posto dove verranno installate le nuove QT, e avviamo il secondo script:

export PATH=$GNUPOC/qt/bin:$PATH
bash qt_for_symbian_4.6.3_all_in_one_linux_installer_v1.sh `pwd` $GNUPOC/qt

Se tutto è andato bene, ci verrà mostrato un messaggio analogo al precedente. Noi eseguiremo, per sicurezza, il secondo comando consigliato dallo script, ovvero:

unset QMAKESPEC

Voilà! Adesso basta andare in un nostro progetto (ricordatevi di dare sempre i comandi “export” visti qui sopra, altrimenti non compilerete per Symbian), e digitare:

qmake
make debug-gcce
make sis

Vi ritroverete un file con estensione “.sis” pronto per essere installato sul vostro terminale. Ovviamente su quest’ultimo, dovrete installare anche le dipendenze. Queste (assieme a qualche programma di prova) sono presenti in “$GNUPOC/qt/”. Per installare le QT sul vostro cellulare, basta installare il file “qt_installer.sis”.

Ora, un paio di dritte:

  • Nel vosto file progetto “.pro”, potrebbe essere utile creare una sezione dedicata alla compilazione su Symbian. Nel mio caso, volevo permettere alla mia applicazione di accedere ad internet, e quindi ho aggiunto la seguente linea:
    symbian:TARGET.CAPABILITY = NetworkServices
  • Nei vostri file sorgente, potrebbe essere utile inserire una struttura di questo tipo:
    #ifdef Q_OS_SYMBIAN
    /* codice per Symbian */
    #else
    /* codice per le altre piattaforme */
    #endif

    Ovviamente “#else” è opzionale.

  • Tenete conto che i cellulari hanno un monitor molto piccolo. Nel mio programma ho preferito quindi mostrare meno informazioni e lanciare il programma a schermo intero, con le seguenti istruzioni:
    #ifdef Q_OS_SYMBIAN
        window.showFullScreen();
    #else
        window.show();
    #endif

    Il fatto scomodo è che la chiusura, se non è presente un bottone o una voce dedicata nel menù, dovrà essere effettuata dalla barra di Symbian che mostra le applicazioni attive (tasto menù tenuto premuto per qualche attimo, selezionare l’applicazione, premere il tasto “c”).

Per il resto che dirvi… Divertitevi! Vorrei ringraziare brunoabinader.blogspot.com, dal quale ho preso spunto per questa guida ;)

Il pacchetto contenente il mio programmino modificato per funzionare anche su Symbian è lo stesso della volta scorsa (ho aggiornato l’archivio): kiva.tar.gz.

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
25

Conversione Python/QT – C++/QT

 

Nel precedente articolo ho mostrato un programma scritto in Python, che aveva la peculiarità di sfruttare esclusivamente le funzioni fornite da PyQT, facilitando così un porting verso C++/QT in futuro. Beh,  ho incominciato a riscrivere il programma ieri sera (grazie anche all’aiuto di Rief) e l’ho finito nel primo pomeriggio di oggi, con ottimi risultati (ovvero: non ci sono regressioni). Il codice non è molto bello (ve l’ho detto, non sono un bravo programmatore C++), e alcune cose le avrei potute gestire meglio, ma vi ricordo che il mio intento fondamentale era semplicemente trascrivere il programma in un altro linguaggio, non stravolgendone la forma e lasciando invariate le funzioni e l’aspetto.

Non vi mostro il codice qui perché è lunghetto, e perché è spezzato su più files, quindi vi allego tutto in un kiva.tar.gz. Il file gui.ui che trovate nel pacchetto è lo stesso che è stato utilizzato sia per generare gui.h per l’applicativo in C++, sia per generare gui.py (allegato al post di ieri) per la versione pythonica.

Il prossimo passo è, ovviamente, il porting su Symbian ;)

Popularity: unranked [?]



Puoi visualizzare il post originale qui.

ago
24

Programma in PyQT con qualche spunto

 

Questo programma si interfaccia con le API di Kiva (una piattaforma online per finanziare i progetti di microcredito) e, dato un utente, visualizza i prestiti da lui finanziati. La particolarità sta nel fatto che non usa alcuna libreria propria di Python (ad esclusione di sys), ma esclusivamente PyQt4 (nello specifico: QtCore, QtGui, QtNetwork, QtScript). In parole povere, troverete che:

  1. Non è stato usato urllib per prendere i dati dal web, ma QNetworkRequest, in modo tale che l’interfaccia grafica non si blocchi durante le operazioni di caricamento.
  2. Non è stato utilizzato il parser json dell’anonima libreria di Python, ma è stato analizzato il codice grazie a QScriptEngine. L’unico vantaggio ha riguardato la gestione degli errori.

Perché ho voluto “farmi del male”? :D Semplice: dato che PySide non supporta ancora Symbian, ho deciso di scrivere il codice in Python nelle modalità appena mostrate, per poi riscriverlo in C++ e fare un bel pacchettino .sis da installare sul telefono :) Avrei potuto farlo direttamente in C++, ma dato che sono “arrugginito” non volevo mettere troppa carne al fuoco :)

Qui sotto metterò il cuore del programma, mentre mi limiterò ad allegare il file gui.py relativo all’interfaccia.

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from gui import Ui_MainWindow
from PyQt4 import QtCore, QtGui, QtNetwork, QtScript
 
class Kiva(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.network = QtNetwork.QNetworkAccessManager()
        self.engine = QtScript.QScriptEngine()
        self.name = ""
        QtCore.QObject.connect(self.network,
            QtCore.SIGNAL("finished(QNetworkReply*)"), self.load);
        QtCore.QObject.connect(self.ui.pushButton,
            QtCore.SIGNAL("clicked()"), self.refresh)
    def add(self, name, status, progress):
        row = self.ui.tableWidget.rowCount()
        self.ui.tableWidget.insertRow(row)
        qstatus = QtGui.QTableWidgetItem(status)
        self.ui.tableWidget.setItem(row, 0, qstatus)
        progressBar = QtGui.QProgressBar()
        progressBar.setValue(progress)
        self.ui.tableWidget.setCellWidget(row, 1, progressBar)
        qname = QtGui.QTableWidgetItem(name)
        self.ui.tableWidget.setItem(row, 2, qname)
    def get(self, req, **attrs):
        url = QtCore.QUrl("http://api.kivaws.org/v1%s.json" % req)
        for key, value in attrs.items():
            url.addQueryItem(key, str(value))
        self.network.get(QtNetwork.QNetworkRequest(url))
    def load(self, data):
        sc = self.engine.evaluate("(%s)" % QtCore.QString(data.readAll()))
        current = int(sc.property("paging").property("page").toInteger())
        total = int(sc.property("paging").property("pages").toInteger())
        if sc.property("loans").isArray():
            cursor = QtScript.QScriptValueIterator(sc.property("loans"))
            if current == 1:
                self.ui.tableWidget.clearContents()
                self.ui.tableWidget.setRowCount(0)
            cursor.next()
            while cursor.hasNext():
                tmp = {}
                for attr in ["status", "name"]:
                    tmp[attr] = cursor.value().property(attr).toString()
                for attr in ["funded_amount", "loan_amount", "paid_amount"]:
                    tmp[attr] = cursor.value().property(attr).toInteger()
                cursor.next()
                self.parse(tmp)
            if current == total:
                text = "%d loan(s) loaded" % self.ui.tableWidget.rowCount()
                self.ui.statusbar.showMessage(text)
                self.ui.pushButton.setEnabled(True)
            else:
                text = "Page %d of %d loaded" % (current, total)
                self.ui.statusbar.showMessage(text)
                self.get("/lenders/%s/loans" % self.name, page = current+1)
        else:
            self.ui.statusbar.showMessage("User %s not found" % self.name)
            self.ui.pushButton.setEnabled(True)
    def parse(self, loan):
        status = loan["status"]
        if status in ["fundraising"]:
            progress = 100*loan["funded_amount"]/loan["loan_amount"]
        elif status in ["in_repayment", "paid"]:
            progress = 100*loan["paid_amount"]/loan["loan_amount"]
        elif status == "defaulted":
            progress = 0 # TODO: Is there a way to know paid_amount?
        elif status == "refunded":
            return # FIXME: what is that status?
        self.add(loan["name"], status.replace("_", " "), progress)
    def refresh(self):
        self.ui.pushButton.setEnabled(False)
        self.name = self.ui.lineEdit.text()
        self.loans = []
        self.ui.statusbar.showMessage("Connecting...")
        self.get("/lenders/%s/loans" % self.name)
 
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    kiva = Kiva()
    kiva.show()
    sys.exit(app.exec_())

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

ago
24

Questo programma si interfaccia con le API di Kiva (una

 

Questo programma si interfaccia con le API di Kiva (una piattaforma online per finanziare i progetti di microcredito) e, dato un utente, visualizza i prestiti da lui finanziati. La particolarità sta nel fatto che non usa alcuna libreria propria di Python (ad esclusione di sys), ma esclusivamente PyQt4 (nello specifico: QtCore, QtGui, QtNetwork, QtScript). In parole povere, troverete che:

  1. Non è stato usato urllib per prendere i dati dal web, ma QNetworkRequest, in modo tale che l’interfaccia grafica non si blocchi durante le operazioni di caricamento.
  2. Non è stato utilizzato il parser json dell’anonima libreria di Python, ma è stato analizzato il codice grazie a QScriptEngine. L’unico vantaggio ha riguardato la gestione degli errori.

Perché ho voluto “farmi del male”? :D Semplice: dato che PySide non supporta ancora Symbian, ho deciso di scrivere il codice in Python nelle modalità appena mostrate, per poi riscriverlo in C++ e fare un bel pacchettino .sis da installare sul telefono :) Avrei potuto farlo direttamente in C++, ma dato che sono “arrugginito” non volevo mettere troppa carne al fuoco :)

Qui sotto metterò il cuore del programma, mentre mi limiterò ad allegare il file gui.py relativo all’interfaccia.

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from gui import Ui_MainWindow
from PyQt4 import QtCore, QtGui, QtNetwork, QtScript
 
class Kiva(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.network = QtNetwork.QNetworkAccessManager()
        self.engine = QtScript.QScriptEngine()
        self.name = ""
        QtCore.QObject.connect(self.network,
            QtCore.SIGNAL("finished(QNetworkReply*)"), self.load);
        QtCore.QObject.connect(self.ui.pushButton,
            QtCore.SIGNAL("clicked()"), self.refresh)
    def add(self, name, status, progress):
        row = self.ui.tableWidget.rowCount()
        self.ui.tableWidget.insertRow(row)
        qstatus = QtGui.QTableWidgetItem(status)
        self.ui.tableWidget.setItem(row, 0, qstatus)
        progressBar = QtGui.QProgressBar()
        progressBar.setValue(progress)
        self.ui.tableWidget.setCellWidget(row, 1, progressBar)
        qname = QtGui.QTableWidgetItem(name)
        self.ui.tableWidget.setItem(row, 2, qname)
    def get(self, req, **attrs):
        url = QtCore.QUrl("http://api.kivaws.org/v1%s.json" % req)
        for key, value in attrs.items():
            url.addQueryItem(key, str(value))
        self.network.get(QtNetwork.QNetworkRequest(url))
    def load(self, data):
        sc = self.engine.evaluate("(%s)" % QtCore.QString(data.readAll()))
        current = int(sc.property("paging").property("page").toInteger())
        total = int(sc.property("paging").property("pages").toInteger())
        if sc.property("loans").isArray():
            cursor = QtScript.QScriptValueIterator(sc.property("loans"))
            if current == 1:
                self.ui.tableWidget.clearContents()
                self.ui.tableWidget.setRowCount(0)
            cursor.next()
            while cursor.hasNext():
                tmp = {}
                for attr in ["status", "name"]:
                    tmp[attr] = cursor.value().property(attr).toString()
                for attr in ["funded_amount", "loan_amount", "paid_amount"]:
                    tmp[attr] = cursor.value().property(attr).toInteger()
                cursor.next()
                self.parse(tmp)
            if current == total:
                text = "Loaded %d loan(s)" % self.ui.tableWidget.rowCount()
                self.ui.statusbar.showMessage(text)
                self.ui.pushButton.setEnabled(True)
            else:
                text = "Page %d of %d loaded" % (current, total)
                self.ui.statusbar.showMessage(text)
                self.get("/lenders/%s/loans" % self.name, page = current+1)
        else:
            self.ui.statusbar.showMessage("User %s not found" % self.name)
            self.ui.pushButton.setEnabled(True)
    def parse(self, loan):
        status = loan["status"]
        if status in ["fundraising"]:
            progress = 100*loan["funded_amount"]/loan["loan_amount"]
        elif status in ["in_repayment", "paid"]:
            progress = 100*loan["paid_amount"]/loan["loan_amount"]
        elif status == "defaulted":
            progress = 0 # TODO: Is there a way to know paid_amount?
        elif status == "refunded":
            return # FIXME: what is that status?
        self.add(loan["name"], status.replace("_", " "), progress)
    def refresh(self):
        self.ui.pushButton.setEnabled(False)
        self.name = self.ui.lineEdit.text()
        self.loans = []
        self.ui.statusbar.showMessage("Connecting...")
        self.get("/lenders/%s/loans" % self.name)
 
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    kiva = Kiva()
    kiva.show()
    sys.exit(app.exec_())

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

mag
19

VP8 libero!

 

VP8, il codec sviluppato da On2 Technologies, comprata mesi fa, è stato reso libero da royalities! Su Youtube i filmati che lo usano si stanno moltiplicando ogni attimo che passa, e i browser Chrome/Chromium, Firefox e Opera sono già stati rilascati in versione di testing col supporto a questo formato! Inoltre è stato lanciato webmproject.org, sito che vuole essere un punto di riferimento per siluppatori e utenti per tutto quelo che riguarda VP8.

Ecco dove trovare le ultime builds che lo supportano:

Per utilizzarlo in Youtube, bisogna abilitare la modalità HTML5 da: www.youtube.com/html5 Inoltre quando si fa una ricerca, bisogna aggiungere “&webm=1? all’URL della pagina che si sta visitando. Questo risulterà inutile quando tutti i video saranno codificati nel nuovo formato. I nuovi file video saranno così composti:

Ah, sono già arrivatele prime critiche :D x264dev.multimedia.cx/?p=377 Comunque sia, oggi è un giorno da segnare sul calendario se si è amanti del web libero :)

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

mar
13

Webcam capovolta

 

La mia webcam (ID 04f2:b036 Chicony Electronics Co., Ltd [uvcvideo]), funziona bene, ma ha un piccolo problema: si vede sottosopra :D Nello specifico il mio portatile è un Asus UL30A, ma immagino che la fix che ho trovato possa andare su tutti gli Asus della serie UL.
Così, dopo avere cercato un po’ su internet, ho segnalato il tutto a hdegoede (at) redhat.com, allegando alla mail i files creati coi seguenti comandi (come root):

lsusb > lsusb.log
dmidecode > dmi.log

Questo sviluppatore tiene una tabella delle webcam che soffrono di questo problema: proprio per questo motivo, ha bisogno di sapere quali modelli hanno bisogno di raddrizzare l’immagine.
Mi ha risposto il giorno successivo, con questa mail, dove spiega come compilare la versione di test di v4l-utils, come installarla, e come utilizzarla :)

Link: https://lists.berlios.de/pipermail/linux-uvc-devel/2009-June/004886.html

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

mag
29

Acer: notebook con Linux a 299€

 

Acer Aspire One: questo il nome del prossimo notebook (prodotto da Quanta) che sarà venduto a 299€ con preinstallata una distribuzione GNU/Linux. Maggiori informazioni su:

http://fraph24.wordpress.com/2008/05/29/acer-notebook-con-linux-a-299e/

Popularity: 2% [?]



Puoi visualizzare il post originale qui.

mag
29

Aiuta Firefox a stabilire un record!

 

Firefox 3 vuole entrare nel Guinness dei Primati!: il software più scaricato di sempre nelle prime 24h! Aiutiamolo in questa impresa ;) L’articolo continua sul mio nuovo blog, su:

http://fraph24.wordpress.com/2008/05/29/aiuta-firefox-a-stabilire-un-guinness-dei-primati/

Popularity: 2% [?]



Puoi visualizzare il post originale qui.

mag
29

PyPratico n.00 – Introduzione a Python

 

Dopo il periodo di prova su (questo) vecchio blog, ora si comincia a fare sul serio ) Ogni lezione si basa su circa quattro argomenti principali. Cercherò di mantenere una cadenza regolare (soprattutto adesso che le vacanze si avvicinano e gli impegni diminuiscono). Questa è la prima lezione (ovviamente meno “pratica” come le future); una panoramica su questo fantastico linguaggio di programmazione.

Continua su:

http://fraph24.wordpress.com/2008/05/29/pypratico-n00-introduzione-a-python/

Popularity: 1% [?]



Puoi visualizzare il post originale qui.

top