Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-13 Per discussione Carlos Catucci
2015-07-13 17:49 GMT+02:00 enrico franchi enrico.fran...@gmail.com:

 Io credo che quello che puoi facilmente fare e' invece separare a livello
 di architettura invece che a livello di codice. E.g., hai un set di API
 rest servite da Go e un layer sottile in Python che chiama le API. Poi,
 detto fra noi... sta roba viene fatta meglio ammazzando suddetto layer e
 facendo tutto con opportuno javascript.


Infatti none ra quello il motivo del wrapping. Per il progetto attuale le
cose pesanti sul piano concorrenzialita' ma piccole sul piano di cosa fanno
(esempio registrare che l'utente con il mac address  si e' collegato
sul router con uuid  sul db PG dove ho una tabella a 4 (oltre id) campi
di cui uno e' automatico (timestamp registrazione record aka inizioo
connessione) e un'altro lo devo updatare (da altra chiamata) quando la
connessione termina) le valutavo in Go, mentre per cose piu' impegnative
sul fronte di carico ma complesse come elaborazioni, Python.
Il wrap era riferito a casi come quelli in cui si wrappa tipo wxwidgets


Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-13 Per discussione enrico franchi
2015-07-12 18:42 GMT+01:00 Carlos Catucci carlos.catu...@gmail.com:

 Chiamare Go da Python. Cosi' le parti critiche potrebbero essere gestite
 da Go e le cose che faccio meglio in Python le faccio in Python appunto.


Mah, dipende cosa vuoi fare, davvero. Allora... in Go 1.5 sara' piuttosto
facile chiamare Go da C (e non solo C da Go), il che fa pensare che
chiamarlo da Python non sara' un gran sbattimento.
La questione e' l'opportunita': non ho ancora guardato la draft dell'1.5 in
questo dettaglio... ma in generale Go e' concepito come linguaggio per
sviluppare sistemi piuttosto che come linguaggio per implementare librerie
per altri sistemi. Molti dei punti di forza di Go non hanno facili map 1:1
in altri linguaggi e di conseguenza non mi e' chiaro quale sia il punto di
fare esattamente quello.

Io credo che quello che puoi facilmente fare e' invece separare a livello
di architettura invece che a livello di codice. E.g., hai un set di API
rest servite da Go e un layer sottile in Python che chiama le API. Poi,
detto fra noi... sta roba viene fatta meglio ammazzando suddetto layer e
facendo tutto con opportuno javascript.

Diciamo che il problema e' che non ho identificato molti problemi che
Python risolve meglio di Go, con alcune eccezioni, e se guardi la lista
delle eccezioni non e' che si presti molto a fare quello che vuoi fare:
* calcolo scientifico (a la notebook + pandas + roba sottostante): diciamo
prototipi di da data scientist
* gui apps

Il resto per me lo fa oggettivamente meglio Go. Hai un hit relativamente
piccolo in termini di produttivita' sul codice, piu' che compensato da
tutto quello che riguarda le operations (dal deploy in su). Per il resto...


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Alessandro Re
On Jul 12, 2015 6:58 PM, enrico franchi enrico.fran...@gmail.com wrote:
 Io posso dire che Python sufficientemente vecchio era molto leggibile.
Leggibile perche' aveva meno features e soprattutto meno features
complesse. Piano piano le hanno aggiunte, e' tutta roba molto potente e
interessante, ma alla fine dei conti e' anche tutta roba che rende il
codice relativamente troppo complicato da capire per essere considerato
leggibile.

Intervengo per un piccolo commento: credo di aver capito cosa intendi, ma
secondo me la complessità e la leggibilità di un linguaggio non sono legate
in quel senso. Un linguaggio leggibile è leggibile sempre, anche se trovare
bachi alle 3 di notte può essere complesso. La leggibilità penso che sia
legata anche alla capacità del linguaggio di presentarsi in modo
familiare e intuitivo, anche attraverso della complessità che nasconde
dettagli non rilevanti alla comprensione generale.

Faccio un esempio scemo: il costrutto with è molto utile e potente. Ciò che
ci sta dietro è relativamente complesso (NB è un esempio scemo!) e di fatto
la complessità viene mascherata dal costrutto e dalle magie che ci son
dietro. Ora, se uno nasconde una cosa molto complessa dietro with, magari
debuggers alle 3 di notte è una menata perché tu *sai* che c'è dietro della
complessità e che magari il baco sta lì. Però guardare il codice è capire
che with ti crea un contesto che viene aperto e chiuso è un concetto
piuttosto immediato, quindi quando leggi il codice capisci in fretta cosa
si cerca di fare.

Forse tu parli di leggibile ma vuoi dire palese o esplicito mentre io
dico veloce farsi un'idea. Però questo non vuol dire che non ci possa
essere dietro della complessità che viene nascosta per rendere, appunto,
tutti leggibile.

Se ho fatto typos è perché son dal cellulare, abbiate pazienza :p
~Ale
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Carlos Catucci
Un interessante quesito che e' alla fine e' venuto fuori dalla lista CPYG-BO

 Che voi sappiate qualcuno sta usando Go per scrivere software di sistema
famosi (o noti, con buone prospettive) ?

Qualcuno ha risposte? La domanda scaturisce dal discorso C vs Go, con il
primo usatissimo ancora per scrivere OS o sistemi embedded.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Davide Muzzarelli

Il 12/07/2015 19:26, enrico franchi ha scritto:

Tipo... 90.000 connessioni aperte simultaneamente? Ma dai, diciamo
proprio di no. Non e' che non *puoi* farlo. E' che e' proprio una
cattiva idea farlo *a meno che non devi proprio farlo*. Tipicamente
tutte le volte che assumi che qualcosa sia gratuito e illimitato, prima
o poi qualcuno ti fara' scoprire che non e' cosi' (corollario: di solito
questa cosa accade in un'altra time-zone, quando uno avrebbe preferito
dormire invece di scoprire nuove cose).


Non c'è alcuna spiegazione su come deve funzionare il sistema di Carlos 
per cui sono stato molto generico. Ho giusto scritto cosa Go può 
raggiungere senza troppo sbattimento, chiaramente a scopo di paragone 
con Python.


Dipende da quale è il suo bisogno, ha parlato di alcune decine di 
migliaia di router da gestire. Se è un progetto serio avrà un budget e 
l'aiuto di colleghi, eventualmente un sistemista. Ovvio che si può fare 
distribuendo il carico su più server, che è probabilmente la soluzione 
migliore sotto diversi punti di vista, non c'è bisogno di correre di notte.


Questo tizio ha raggiunto 600.000 connessioni per processo con 16GB di 
RAM e il vecchio Go 1.0.3, che è molto più di 90.000 connessioni. Il GC 
da allora è migliorato sensibilmente:

https://groups.google.com/forum/#!searchin/golang-nuts/Garbage$20collecting/golang-nuts/S9goEGuoMRM/FZyd2M6uiVMJ


In generale e'
davvero molto piu' semplice usare logiche di pool rispetto che fare
90.000 goroutine.


Sono d'accordo. A Qihoo 360 hanno comunque raggiunto 1 milione di 
connessioni/server prima di passare ai pool, sempre con Go 1.0.3.


Dubito che Carlos debba creare un sistemone del genere, probabilmente 
gli basta molto ma molto meno.



Tipicamente se uno fa ste cose a cuor leggero la prima
cosa che scopre e' che ha un problema con il garbage collector, per dire.


Basta fare una spike solution per vedere quali numeri ottiene. Python mi 
pare meno adatto per queste cose, se lo deve fare con quello 
probabilmente si trova con limiti ancora maggiori.



  Puoi usare tutte le CPU a disposizione fin da subito senza
scrivere codice aggiuntivo.

Ora... il codice aggiuntivo e' piccolo, ma di per se Go 1.4 se non gli
dici altrimenti usa *una* CPU.


Hai ragione, è una riga di codice all'inizio del programma per dire 
quante CPU usare. Quello che intendo è che non deve modificare come 
funziona il proprio codice, tipo per usare il multiprocessing in Python.


Byez,
Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Davide Muzzarelli

Il 12/07/2015 19:42, Carlos Catucci ha scritto:

Chiamare Go da Python. Cosi' le parti critiche potrebbero essere gestite
da Go e le cose che faccio meglio in Python le faccio in Python appunto.


Si perderebbero molte performance convertendo i dati da un ambiente 
all'altro. Dubito che convenga farlo.


Puoi comunque mettere in piedi una queue con RabbitMQ, oppure in maniera 
più leggera con Redis, e creare dei worker in Go.


Byez,
Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Carlos Catucci
2015-07-13 1:35 GMT+02:00 Davide Muzzarelli d.muzzare...@dav-muz.net:

 Si perderebbero molte performance convertendo i dati da un ambiente
 all'altro. Dubito che convenga farlo.


Allora perhe' sio wrappano  programmi C/C++?

Puoi comunque mettere in piedi una queue con RabbitMQ, oppure in maniera
 più leggera con Redis, e creare dei worker in Go.


Interesante ma sono tecnologie di cui per ora non so nulla. Appena avro'
tempo (mai se non cambia qualcosa) ci guardo

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione enrico franchi
2015-07-10 20:16 GMT+01:00 Carlos Catucci carlos.catu...@gmail.com:


 Tutti quelli che considerano Python facile da leggere non devono solo
 considerare il problema riesco a rileggere il codice che ho scritto
 (problema non banale, certi linguaggi falliscono malamente anche questo).
 Ma devono considerare anche il problema: riesco a leggere facilmente il
 codice che un altra persona (che potrebbe essere il Franchi in vena di
 metaprogramming) scrive? La mia esperienza e' *no*. Tanto e' vero che, per
 dire, sul lavoro mi contengo.


 Una persona normale, intendo dire un vdeveloper, fa fatica anche a capire
 la meta' delle cose che dice il Franchi, ovvio che se si mette a
 programmare ad alto livello, seguendo fili logici che un comune mortale (o
 una comune mortadella come me) neppure riesce a immaginare nei suoi viaggi
 dopo avere tagliato una punta di acido, non capisca una cippa del codice.
 Pero' codice del Franchi a parte io sono sempre riuscito a leggere e capire
 piu' o meno al volo codice Python scritto da altri. Non conosco Go (ma
 voglio studiarlo se solo ho un poco di respiro) per cui non posso dire se
 sarei capace di leggerlo altrettanto semplicemente. Con Python, nella
 stessa situazione pero', non ho avuto problemi a leggere il rpimo listato
 (e non era un fibonacci o simili ma una applicazione complessa).


Si, in realta' buona parte del mio codice *non* usa (o fa un uso molto
limitato) di suddette features, e non faccio passare codice che ne abusa.
Il discorso non e' quanto avanzato e' il mio python rispetto a quello del
programmatore medio.

Il problema e' che Python e' leggibile se e solo se non si usano (o
abusano) determinate features. Altrimenti e' leggibile per un sottoinsieme
ristretto di persone e *soprattutto* non e' il codice che vuoi guardare
alle 3 di mattina quando sei stato svegliato perche' l'applicazione e'
rotta. Non vuoi farlo se il codice e' tuo, non vuoi farlo se il codice e'
di qualcun altro.

Ma se cominci a dire che il linguaggio e' leggibile se non usi feature x e
y comincia ad indebolirsi molto il fatto che il linguaggio sia leggibile.
Perche' restringendo arbitrariamente il sottoinsieme di linguaggio
leggibile, tutto sommato parecchi linguaggi non patologicamente illeggibili
diventano leggibili. E anche alcuni linguaggi patologici.

Io posso dire che Python sufficientemente vecchio era molto leggibile.
Leggibile perche' aveva meno features e soprattutto meno features
complesse. Piano piano le hanno aggiunte, e' tutta roba molto potente e
interessante, ma alla fine dei conti e' anche tutta roba che rende il
codice relativamente troppo complicato da capire per essere considerato
leggibile.

Il motivo per cui tutto sommato la maggior parte del codice Python la fuori
e' sempre considerato leggibile e' che la maggior parte dei programmatori
non abusano troppo di queste features (per scelta o per ignoranza). Ma di
per se, il problema e' presente.


 Poi abbi pazienza, lui e' un prof delle superiori, ha come target ragazzi
 di 14/18 anni che si avvicinano alla programmazione, non un tale che lavora
 per una non meglio specificata $bigcompany.


Si, ma niente da dire su di *lui*. Quello che io sto dicendo e' che *a mio
avviso* Go e' piu' leggibile di Python. Almeno per ora. Poi certo, se e
quando cominceranno a farcirlo di features fichissime (ma complicate) anche
lui sara' molto meno leggibile.

Insomma, per fare un altro paragone... Haskell e' un linguaggio
*estremamente* leggibile. Ha regole piuttosto rigorose sulla formattazione,
etc etc etc. Pero'... diciamo che se uno non mastica alcuni concetti
relativamente poco intuitivi non si va troppo lontano. Non ho vergogna ad
ammettere che spesso e volentieri quando leggo codice scritto da gente che
fa Haskell duro non capisco davvero un accidente, ma e' un modo diverso di
non capire che cavolo fa rispetto a quando mi danno il classico blobbone da
2000 righe di Perl da riscrivere in qualcos'altro.


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione enrico franchi
2015-07-11 11:40 GMT+01:00 Davide Muzzarelli d.muzzare...@dav-muz.net:

 Ogni gorutine (simile ai thread) occupa 4kb. In 350MB di RAM puoi gestire
 circa 90.000 connessioni aperte simultaneamente.


Come dire... occhio pero'. Tutte le volte nella storia dell'informatica che
qualcuno ha convinto qualcun altro che qualcosa fosse essenzialmente
gratuito, ci sono stati tanti ingegneri a correrre la notte e tanti sistemi
riscritti.

Tipo... 90.000 connessioni aperte simultaneamente? Ma dai, diciamo proprio
di no. Non e' che non *puoi* farlo. E' che e' proprio una cattiva idea
farlo *a meno che non devi proprio farlo*. Tipicamente tutte le volte che
assumi che qualcosa sia gratuito e illimitato, prima o poi qualcuno ti
fara' scoprire che non e' cosi' (corollario: di solito questa cosa accade
in un'altra time-zone, quando uno avrebbe preferito dormire invece di
scoprire nuove cose).

Vuoi tenere 90K connessioni aperte? Metti conto che: TCP ha bisogno di
bookeeping nel kernel. 90K descrittori sono proprio tanti. A questo punto
devi tenere traccia di quali connessioni sono buone e quali non sono buone
(cosa non banale... TCP Keepalive offre qualcosa di diverso e farlo a mano
e' noioso... HTTP keepalive e' una cosa diversa ancora, ma e' piuttosto
delicata e spesso si spacca... in pratica non e' un caso come funzionano i
vari pool di connessioni http -- che per dire, Go stesso offre senza dirlo
in modo troppo esplicito). In generale e' davvero molto piu' semplice usare
logiche di pool rispetto che fare 90.000 goroutine. Tipicamente se uno fa
ste cose a cuor leggero la prima cosa che scopre e' che ha un problema con
il garbage collector, per dire.


 Puoi usare tutte le CPU a disposizione fin da subito senza scrivere
codice aggiuntivo.


Ora... il codice aggiuntivo e' piccolo, ma di per se Go 1.4 se non gli dici
altrimenti usa *una* CPU.

-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione Massimiliano Pippi
Il 12/lug/2015 14:30, Davide Muzzarelli d.muzzare...@dav-muz.net ha
scritto:

 Ecco qui di seguito una lista non ordinata.

Mi permetto di aggiungere uno dei progetti con la codebase Go più estesa in
circolazione:

https://github.com/golang/go

Ciao
M.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-12 Per discussione enrico franchi
2015-07-11 12:18 GMT+01:00 Carlos Catucci carlos.catu...@gmail.com:


 Verdad, la gestione e' semplficata, ma la leggibilita' lo diventa solo
 quando hai capito come funzionano. Il Try Except Finally Else di Python e'
 immediato. Tranen forse Else ecco. Che comunque trovo comodissimo da avere.


Dici? Non so... statisticamente parecchia gente ci mette un bel po' di
tempo prima a capire cosa siano le eccezioni e ancora di piu' per usarle
come si deve. Poi certo, se hai capito le eccezioni in Python probabilmente
ti adatti facilmente alle eccezioni in Java o C++ (e viceversa), ma non e'
che sia un concetto naturalmente semplice. E' solo un concetto che spesso
si ha gia'.

Per inciso, pensa a tutto il tempo che i niubbi spendono scrivendo *male*
il codice che usa le eccezioni (variando da: ricondurle appena possibile a
gestione con valori di ritorno -- oppure la variante: cercare di evitarle
facendo [male] LBYL; grosso modo ignorarle quando non dovrebbero; catturare
troppa roba e mascherare bachi logici con gestione dell'errore troppo
generica). Generalmente io trovo che capire il punto nel call stack in cui
e' ottimale gestire un'eccezione non e' affatto banale. Anche perche' ci
sono due aspetti distinti che sono riuniti nella variante castrata di
eccezioni che ha Python, che sono appunto gestire l'errore essenzialmente
lato utente e pulire lo stato dell'applicazione. E queste due cose sono
legate in modo indissolubile e spesso bisogna o usare contorsioni logiche
oppure accettare codice inutilmente inefficiente.

Ma un wrapper per codice Go da Python non lo hanno mai pensato? Io non so
 se sariei capace di scriverlo, ma lo troverei utile.


Cosa intendi?  Vuoi chiamare Go da Python o Python da Go? O cosa altro
avevi in mente?


-- 
.
..: -enrico-
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Carlos Catucci
2015-07-11 12:40 GMT+02:00 Davide Muzzarelli d.muzzare...@dav-muz.net:


 E' come in finally, con la differenza che puoi metterli nel punto dove
 preferisci e non devi creare dei livelli d'identazione quando ne devi
 creare più di uno. In sostanza sono più comodi e semplici da utilizzare
 rispetto ai finally.


Verdad, la gestione e' semplficata, ma la leggibilita' lo diventa solo
quando hai capito come funzionano. Il Try Except Finally Else di Python e'
immediato. Tranen forse Else ecco. Che comunque trovo comodissimo da avere.

Go sarebbe adatto per quel progetto.

Ogni gorutine (simile ai thread) occupa 4kb. In 350MB di RAM puoi gestire
circa 90.000 connessioni aperte simultaneamente. Puoi usare tutte le CPU a
disposizione fin da subito senza scrivere codice aggiuntivo.

Sicuramente farai prima a scriverlo in Python che in Go, anche perché
dovresti imparare ad usarlo. Valuta tu se hai bisogno di quelle
performance.

Forse non ne avro' bisogno, ma e' una ottima occasione per poterlo studiare
e usare su un progetto reale.
In fondo essendo una serie di Web Services che in comune hanno solamente la
base dati, posso benissimo lasciare in Python (sempre riscrivendo per
Flask) le parti piu' incasinate come logiche ma che hanno meno richieste di
performance (esempio la registrazione dell'utente che si ha solo la prima
volta che installa la app) e scrivere in Go quelle dove invece performance
etc. sono vitali.

Ma un wrapper per codice Go da Python non lo hanno mai pensato? Io non so
se sariei capace di scriverlo, ma lo troverei utile.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Davide Muzzarelli

Il 10/07/2015 21:27, Carlos Catucci ha scritto:

Scusa solo per capire, dov'e' la differenza con try except? E comunque
tu indich defer (non lo conosco bene) subito dopo avere aperto. Implica
che verra' eseguito COMUNQUE (tipo finally per capirci) alla fine della
funzione? Se si e' davvero una cosa buona.


E' come in finally, con la differenza che puoi metterli nel punto dove 
preferisci e non devi creare dei livelli d'identazione quando ne devi 
creare più di uno. In sostanza sono più comodi e semplici da utilizzare 
rispetto ai finally.



  Go è un linguaggio che ha i suoi difetti ma sono veramente pochi,
anche Python e C hanno i loro difetti eh.

Beh nessuno e' perfetto (tranne Andy ;P).


:)


Comunque si penso che per
certe cose sia interessante. Gia' intendevo riscrivere con Flask i web
services del progetto. Se i boss non mi farranno girare le palle al
punto da essere sfanculati, potrei pensare di ricriverene una buona
parte in Go. In particolair quelli che gestiranno le
connessioni/disconnessioni degli utenti sui router. (*)



* Trattasi di rete wifi free dove chi entra si connette come se fosse la
rete di casa. Questo comporta che io debba far registrare dati
provenienti dai vari router (si conta a progetto avviato di averne
qualche decina di milgiaia) tutti i casi di connessione/disconnessione
che potrebbe essere un problema non da poco con Python (ce la fara' a
reggere? Potrebbero arrivare in pochi secondi un numero elevatissimo di
segnalazioni).


Go sarebbe adatto per quel progetto.

Ogni gorutine (simile ai thread) occupa 4kb. In 350MB di RAM puoi 
gestire circa 90.000 connessioni aperte simultaneamente. Puoi usare 
tutte le CPU a disposizione fin da subito senza scrivere codice aggiuntivo.


Sicuramente farai prima a scriverlo in Python che in Go, anche perché 
dovresti imparare ad usarlo. Valuta tu se hai bisogno di quelle performance.


Byez,
Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Manlio Perillo
2015-07-10 21:27 GMT+02:00 Carlos Catucci carlos.catu...@gmail.com:


 2015-07-10 20:21 GMT+02:00 Davide Muzzarelli d.muzzare...@dav-muz.net:

 In questo esempio, il file verrebbe chiuso correttamente anche nel caso
 in cui f.Write() restituisse un errore:

 f, _ := os.Open(nome del file)
 defer f.Close()
 n, err := f.Write(foobar)
 if err != nil {
 return Errore, spazio su disco esaurito
 }


 Scusa solo per capire, dov'e' la differenza con try except?


Che try/except aggiungono un ulteriore livello di nidificazione che rende
la lettura del codice meno lineare.

Ad esempio:

try:
makedirs(path)
except OSError, err
if err.errno == errno.EEXISTS:
return

raise

Il maggiore problema con le eccezione è semplicemente che tu *non puoi
sapere* se e quale eccezione può lanciare una funzione.
In C++ e Java ci hanno provato [1], ma non funziona.

In Go lo sai semplicemente vedendo cosa restituisce la funzione.


 [...]

[1] https://en.wikipedia.org/wiki/Exception_handling#Checked_exceptions


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Enrico Bianchi

On 07/10/2015 08:21 PM, Davide Muzzarelli wrote:

- Piatto è meglio che annidato
- Sparso è meglio che denso 


Per capire, cosa intendi?

Enrico
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Davide Muzzarelli

Il 11/07/2015 19:09, Simone Federici ha scritto:

per te, che lo scrivi ma il codice è letto in media 50 volte in piú a
quanto viene scritto.


Il fatto è che scrivendo metti il defer nel posto migliore a livello 
logico proprio dove te lo aspetteresti. Le funzioni in Go tendono ad 
essere piuttosto corte e bisogna tenere conto anche di questo.



e avere un try finally che puoi mettere a caso nel codice non mi sembra
una buona pratica


La maniera più naturale è mettere il defer nel posto giusto, per 
scriverlo in un posto a caso bisogna proprio farlo apposta.



ps: io sono più x i context manager che supportano un unico punto di
indentazione anche usati multipli


Concordo che context manager sono una gran cosa! :)

Byez,
Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Simone Federici
Davide Muzzarelli:

 E' come in finally, con la differenza che puoi metterli nel punto dove
 preferisci e non devi creare dei livelli d'identazione quando ne devi
 creare più di uno.


ok capito


 In sostanza sono più comodi e semplici da utilizzare rispetto ai finally.


per te, che lo scrivi ma il codice è letto in media 50 volte in piú a
quanto viene scritto.

e avere un try finally che puoi mettere a caso nel codice non mi sembra una
buona pratica

ps: io sono più x i context manager che supportano un unico punto di
indentazione anche usati multipli


-- 
Simone Federici

Software Craftsman
XP, Agile, Scrum, Kanban
Quality, performance  security

Explicit is better than implicit.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Davide Muzzarelli

Il 11/07/2015 19:02, Simone Federici ha scritto:

molto molto fico, lo compro :-)


LOL :D


Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-11 Per discussione Davide Muzzarelli

Il 11/07/2015 15:50, Enrico Bianchi ha scritto:

Per capire, cosa intendi?


Una traduzione sommaria e imprecisa dello zen di Python, che avrei 
potuto fare meglio :p


I metodi in Go sono alla stessa indentazione delle classi, in 
effetti si tratta di funzioni collegate a strutture.


Lo stile idiomatico di Go incoraggia l'uso di funzioni piccole, moduli 
altrettanto piccoli molto specializzati e aggregazione. Le interfacce, 
come sono pensate in Go, aiutano molto il riuso di codice in grandi 
progetti.


Alla fine ci si ritrova in maniera naturale ad avere pochi livelli 
d'indentazione, funzioni con pochi argomenti e moduli con poche strutture.


Davide Muzzarelli
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Nicola Larosa
Carlos Catucci wrote:
 Attendo risposte (che con il vostro permesso riportero' all'esimio
 prof, nonche' amico di vecchia data)

Quanto avrei da dire è piuttosto negativo, sia sulla valutazione che sul
metodo usato per arrivarci, quindi non dirò nulla per non offendere
l'esimio prof nonché amico di vecchia data. :-P

-- 
Nicola 'tekNico' Larosa http://www.tekNico.net/
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Davide Muzzarelli

Il 10/07/2015 16:19, Carlos Catucci ha scritto:
 Attendo risposte (che con il vostro permesso riportero' all'esimio prof,
 nonche' amico di vecchia data)

Uso Go in produzione da un anno e mezzo circa, in poco tempo ho 
sviluppato un software per gestire i prodotti di un eCommerce più 
qualche altro tool per me (server SMPP, websocket e altre cose più piccole).


Il programma ha diverse funzioni sia come server web che da linea di 
comando, lavora su 3 database diversi contemporaneamente (Postgresql, 
MSSQL e MySQL) per gestire dati tra Microsoft Navision, Magento e dati 
aggiuntivi suoi. Ha interfacce web e CLI, non ho dovuto usare alcun 
framework, è estremamente veloce rispetto a Python, consuma un decimo 
della memoria che consuma Python e non ha i problemi di GIL.



  * La sintassi è presa parzialmente dal C, ma con strane modifiche
che lo rendono soggetto a errori inconsci. Per esempio la scelta di
avere il tipo di dato DOPO la variabile. Il che crea costrutti
particolamente poco chiari come x := float32(y)  che non è solo
un'assegnazione.


La sintassi è presa a piene mani dal C. L'obiettivo era permettere ai 
neo-laureati, che solitamente hanno studiato C a scuola, di essere 
subito produttivi in pochi giorni.


In pratica è come un C fatto per chi viene da linguaggi di scripting.


  * I controlli (if, then, else, switch) sono abbastanza carini, ma
anche qui l'idea di poter preporre un'assegnazione prima del
controllo ne fa perdere un po la leggibilità. Carini anche se non
immediati i vari range, map, un po' presi da python e ruby.


then non esiste in Go.

if è identico agli altri linguaggi tranne la possibilità opzionale di 
creare un'assegnazione con scopo privato, e mi pare molto chiara come 
espressione dato che la logica sarebbe prima di creare una variabile e 
poi di usarla:


if err := eseguiQualcosa(); err != nil {
...
}

switch/case è simile ad altri linguaggi, molto facile da leggere:

switch valore {
case vero:
return true
case falso:
return false
default:
return nil
}

map è un semplice hash:

numeri := map[string]int{
uno: 1,
due: 2,
tre: 3,
}
print(numeri[uno])

range è completamente diverso da Python.
Python: for x in tupla
Go: for k, v := range tupla


  * La gestione degli array multidimensionali fa rabbrividire, a momenti
è meglio quella di Javascript che pure è atroce. :-)


In Go puoi solo avere array di array.


  * Interessante la gestione dei canali per lo scambio dei dati tra thread


E' un pattern e lo hanno implementato in maniera molto comoda da usare e 
prevenendo i soliti errori comuni, in effetti ha semplificato 
notevolmente l'uso di parallelismo e concorrenza.



  * defer è un'innovazione, ma che serve in soldoni?


defer è estremamente utile per scrivere software stabile, serve quando 
vuoi essere sicuro che venga eseguita una funzione anche in caso di errore.


Un esempio banale è quando vuoi essere sicuro che venga chiuso un 
descrittore di un file o una connessione dopo averlo aperta.


In questo esempio, il file verrebbe chiuso correttamente anche nel caso 
in cui f.Write() restituisse un errore:


f, _ := os.Open(nome del file)
defer f.Close()
n, err := f.Write(foobar)
if err != nil {
return Errore, spazio su disco esaurito
}

Inoltre aiuta nella lettura del programma perché in questo modo le 
operazioni di apertura sono vicine alle funzioni di pulizia e chiusura. 
Se le funzioni fossero lontane, tipo le prime all'inizio della funzione 
e le altre alla fine, diventerebbe più facile commettere errori o 
dimenticarsi qualcosa inoltre si dovrebbe scrivere il codice per pulire 
e chiudere anche in caso di errore.



  * NOn abbiamo approfondito la questione degli oggetti, ma sempra
un'aggiunta alla fine, più object-based che object-oriented.


Go è decisamente object-oriented e non object-based e lo è usando il 
pattern dell'aggregazione al posto di quello dell'editarietà.


Go ha array, scalari ecc. che non sono per niente oggetti.


Nella mia prospettiva da docente e/o curioso, non vedo un grande appeal
su questo linguaggio che prende un po' dal C classico, python, ruby,
java, C# e node/javascript ma non ottiene nè codice di facile lettura
(tutt'altro) nè codice più stringato. Qual è quindi la mission del
linguaggio? Forse è quella della massima portabilità e velocità di
esecuzione, ma questo non abbiamo potuto provarlo - forse in futuro?


Go prende direttamente dal C, ben poco da altri linguaggi.

Ancora non è pronto per applicazioni GUI per scarsità di librerie oppure 
per applicazioni web nella maniera classica perché la tipizzazione 
statica diventa scomoda da usare rispetto a Python/Ruby.


Go è una via di mezzo tra il C e il Python, attrae molti più 
programmatori da Python che da C/C++.


La sintassi è semplice con pochi costrutti, molto chiara, il codice 
viene pulito e identato direttamente 

Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione enrico franchi
2015-07-10 15:19 GMT+01:00 Carlos Catucci carlos.catu...@gmail.com:

Riporto quanto espresso sulla lista XPUG-BO dal prof. Marcello Piffy
 Missiroli.

 Un mio commento a freddo sulla serata (che è stata molto carina, anche
 nel post-evento)

 Dato che ignoro il ramo applicativo di Go e di quali e quante libreria
 siano disponibili, mi limiterò a valutare il linguaggio in sè e le sue
 caratteristiche.


Mi sembra che la premessa chiarifichi tutto: ovvero, non ci ho scritto 3
righe di fila. E da molti dei commenti che fa sotto, e' parecchio chiaro.
In particolare parecchie delle questioni che segnala sono cose che si
chiariscono affrontando un progettino giocattolo. Sono li e hanno senso.



 In sintesi, non è che mi abbia molto convinto.


- La sintassi è presa parzialmente dal C, ma con strane modifiche
che lo rendono soggetto a errori inconsci. Per esempio la scelta di avere
il tipo di dato DOPO la variabile. Il che crea costrutti particolamente
poco chiari come x := float32(y)  che non è solo un'assegnazione.

 E qui, per dire, fa come esempio una questione relata al tipo, ma che
*non* e' un problema di dichiarazione. Ovvero, in Go *tutte* le
dichiarazioni hanno il tipo in coda (o non hanno tipo esplicito in quanto
inferito dal compilatore). Che e' strano se vieni da C, certo. Che e' anche
uno dei motivi per cui si evitano molte ambiguita' nel parsing che hanno C
e C++. Nota a margine: le ambiguita' non sono solo per il compilatore, ma
per chi legge.

a * b in C puo' essere, per dire, una dichiarazione di una variabile
puntatore ad a oppure una moltiplicazione. In go e' solo una
moltiplicazione.
Ci sono un po' di spiegazioni di queste problematiche sulle faq.

Ora, queste cose ad occhio non e' che mi aspetti che le veda.

E quella li *non* e' una dichiarazione. Cioe', si, formalmente e' una
dichiarazione. Ma la parte di dichiarazione e' semplicemente

x := expr

il fatto che expr sia un type cast... beh, vabbe'. ma non e'
particolarmente diverso da fare x = int(y) in Python.



- I controlli (if, then, else, switch) sono abbastanza carini, ma
anche qui l'idea di poter preporre un'assegnazione prima del controllo ne
fa perdere un po la leggibilità.

 E come dire... l'assegnamento li serve per idiomi estremamente comuni:

if a, err := build_a(...); err != null {
   defer clean_a(a)
}



- Carini anche se non immediati i vari range, map, un po' presi da
python e ruby.

 Anche qui... cosa non abbia di immediato range non lo so. Ricordiamoci che
esplicito e' bello. Vogliamo iterare su un array?

for el := arr {

}

ecco... questo dovrebbe volere dire cosa? che voglio iterare su un array?
Pero' attenzione... quell el := arr all'inizio sembra molto un assegnamento
semplice (per inciso, il codice non compila, ma solo per intenderci.

Questo invece compila:
 for el := a;; {

fmt.Println(el)
  }

e ovviamente e' un loop infinito. etc etc etc. io trovo che usare range sia
piuttosto carino sia come sintassi che come semantica. Non a caso Python
usa una keyword apposta per indicare che un assegnamento prende valori da
un iterabile (for el in a). In Go hanno scelto una cosa diversa... a me
piace. anche perche' non rompe la sintasi. Nota che range funziona con
tutto quello che go considera in qualche modo iterabile.

map... map non capisco cosa ci sia da non capire.




- La gestione degli array multidimensionali fa rabbrividire, a momenti
è meglio quella di Javascript che pure è atroce. :-)

 ?
Go (come C e parecchi linguaggi la fuori) *non* ha array multidimensionali.
Non ce li ha e basta.
Quello che Go (come C e parecchi linguaggi la fuori) ha, sono *array di
array*.
E' un problema? In generale si. Per dire che vuole fare hpc lo e' in modo
indubbio. Verrebbe anche da dire che le ovvie estensioni probabilmente non
funzionerebbero troppo bene se si vuole mantenere l'attuale semantica di
Go. Pero' la differenza built-in fra array e slice potrebbe proprio essere
chiave per farci cose interessanti. Non so... ci devo pensare.


- Interessante la gestione dei canali per lo scambio dei dati tra
thread

 E io scommetto che, come a tutti quanti finche' non ci sbattono il muso,
non gli sono *davvero* chiari. E non gli e' davvero chiaro perche' e'
facile usarli. La differnza fra uno con buffer e uno senza buffer, per
dire... etc etc etc.


- defer è un'innovazione, ma che serve in soldoni?

 Esticazzi pero'... come a che serve? Dico ma sono l'unico che ha
l'abitudine di pulire le cose che alloca? Lo facevo in C, lo facevo in C++,
lo faccio in Python e in Java... big surprise: voglio farlo anche in Go.
Visto che RAII e' out of the picture... posso usare goto, certo. Ma
veramente... defer e' chiaramente una soluzione superiore.


- NOn abbiamo approfondito la questione degli oggetti, ma sempra
un'aggiunta alla fine, più object-based che object-oriented.

 O dannazione ancora? Quanto male hanno fatto alle comunita' la propaganda
spietata di chi voleva 

Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Carlos Catucci
2015-07-10 20:21 GMT+02:00 Davide Muzzarelli d.muzzare...@dav-muz.net:

 In questo esempio, il file verrebbe chiuso correttamente anche nel caso in
 cui f.Write() restituisse un errore:

 f, _ := os.Open(nome del file)
 defer f.Close()
 n, err := f.Write(foobar)
 if err != nil {
 return Errore, spazio su disco esaurito
 }


Scusa solo per capire, dov'e' la differenza con try except? E comunque tu
indich defer (non lo conosco bene) subito dopo avere aperto. Implica che
verra' eseguito COMUNQUE (tipo finally per capirci) alla fine della
funzione? Se si e' davvero una cosa buona.

 Go è un linguaggio che ha i suoi difetti ma sono veramente pochi, anche
Python e C hanno i loro difetti eh.

Beh nessuno e' perfetto (tranne Andy ;P). Comunque si penso che per certe
cose sia interessante. Gia' intendevo riscrivere con Flask i web services
del progetto. Se i boss non mi farranno girare le palle al punto da essere
sfanculati, potrei pensare di ricriverene una buona parte in Go. In
particolair quelli che gestiranno le connessioni/disconnessioni degli
utenti sui router. (*)

* Trattasi di rete wifi free dove chi entra si connette come se fosse la
rete di casa. Questo comporta che io debba far registrare dati provenienti
dai vari router (si conta a progetto avviato di averne qualche decina di
milgiaia) tutti i casi di connessione/disconnessione che potrebbe essere un
problema non da poco con Python (ce la fara' a reggere? Potrebbero arrivare
in pochi secondi un numero elevatissimo di segnalazioni).

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Carlos Catucci
2015-07-10 18:49 GMT+02:00 enrico franchi enrico.fran...@gmail.com:

 Tutti quelli che considerano Python facile da leggere non devono solo
 considerare il problema riesco a rileggere il codice che ho scritto
 (problema non banale, certi linguaggi falliscono malamente anche questo).
 Ma devono considerare anche il problema: riesco a leggere facilmente il
 codice che un altra persona (che potrebbe essere il Franchi in vena di
 metaprogramming) scrive? La mia esperienza e' *no*. Tanto e' vero che, per
 dire, sul lavoro mi contengo.


Una persona normale, intendo dire un vdeveloper, fa fatica anche a capire
la meta' delle cose che dice il Franchi, ovvio che se si mette a
programmare ad alto livello, seguendo fili logici che un comune mortale (o
una comune mortadella come me) neppure riesce a immaginare nei suoi viaggi
dopo avere tagliato una punta di acido, non capisca una cippa del codice.
Pero' codice del Franchi a parte io sono sempre riuscito a leggere e capire
piu' o meno al volo codice Python scritto da altri. Non conosco Go (ma
voglio studiarlo se solo ho un poco di respiro) per cui non posso dire se
sarei capace di leggerlo altrettanto semplicemente. Con Python, nella
stessa situazione pero', non ho avuto problemi a leggere il rpimo listato
(e non era un fibonacci o simili ma una applicazione complessa).
Poi abbi pazienza, lui e' un prof delle superiori, ha come target ragazzi
di 14/18 anni che si avvicinano alla programmazione, non un tale che lavora
per una non meglio specificata $bigcompany.
Pero' come sempre leggere le tue considerazioni aiuta a aprirsi la mente.
Aggiungo che ci contavo un poco di leggere cose rispondevi, una benevola
provocazione da parte mia girare qui quella mail.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Riccardo Magliocchetti

Il 10/07/2015 16:47, Nicola Larosa ha scritto:

Carlos Catucci wrote:

Attendo risposte (che con il vostro permesso riportero' all'esimio
prof, nonche' amico di vecchia data)


Quanto avrei da dire è piuttosto negativo, sia sulla valutazione che sul
metodo usato per arrivarci, quindi non dirò nulla per non offendere
l'esimio prof nonché amico di vecchia data. :-P


Già. Il fatto che abbiano messo nei parametri delle funzioni i tipi dopo ai nomi 
delle variabili ha spiazzato anche me.
Con gli occhi del pythonista probabilmente go non sembra granchè (forse fa anche 
un pò male agli occhi) ma con gli occhi da sviluppatore C dici: ah le slice mica 
male, e il defer mi aiuta a non dover usare goto e label per gestione errori, etc...


--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Parere su Go di un professore di informatica (delle superiori) nonche' uno dei fondatori di ERLUG

2015-07-10 Per discussione Simone Federici
2015-07-10 16:47 GMT+02:00 Nicola Larosa n...@teknico.net:

 Quanto avrei da dire è piuttosto negativo, sia sulla valutazione che sul
 metodo usato per arrivarci, quindi non dirò nulla per non offendere
 l'esimio prof nonché amico di vecchia data. :-P


dai dai.. illuminaci
:-)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python