<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2015-04-21 11:10 GMT+02:00 Marco De Paoli <span dir="ltr"><<a href="mailto:depaolim@gmail.com" target="_blank">depaolim@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><br></div></div>in realtà volevo fare alcuni esempi random su tecniche un po' esoteriche rispetto al mio operare corrente<br></div>nel mio lavoro di ogni giorno cerco di mantenermi molto KISS<br></div></div></blockquote><div><br></div><div>Che e' la scelta giusta.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div></div>poi arrivano i talk di pycon, ti aprono un po' le vedute e finisci a volte per riconsiderare pattern o tecnologie che normalmente lascierei un po' nel cassetto o in backlog<br></div></blockquote><div><br></div><div>Alcune si... altre sono davvero giocattoli.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">Il giorno 20 aprile 2015 18:56, enrico franchi <span dir="ltr"><<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote"><span>2015-04-20 14:50 GMT+01:00 Marco De Paoli <span dir="ltr"><<a href="mailto:depaolim@gmail.com" target="_blank">depaolim@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>1. potrei farlo con una meta classe<br></div></blockquote><div><br></div></span><div>Pessima idea. Ci sono casi in cui le meta-classi sono il sistema piu' rapido e robusto per avere una certa cosa. In generale sono un overkill. In generale, non sono la soluzione giusta.</div></div></div></div></blockquote><div><br></div></span><div>concordo, nei casi in cui ho visto usare una metaclasse la soluzione adottata non mi è piaciuta molto<br></div></div></div></div></blockquote><div><br></div><div>Ci sono casi in cui ha senso... in genere e' un abuso.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>l'ultimo in ordine di tempo mi è successo con djangorestframework: in base ad un parametro many=True mi istanziava "a mia insaputa" una classe wrapper che conteneva la mia<br></div><div>Questo significava che non avevo alcun modo semplice per fare l'override/plug<br></div><div>Insomma, mi sono convinto che il principio stesso che "può succedere di chiamare il costruttore di una classe ma qualcuno (presumibilmente per il tuo bene) decide di restituirtene un altra", beh, non mi piace granchè<br></div></div></div></div></blockquote><div><br></div><div>Ma non e' che tu parli semplicemente di definire __new__? Per quello io ho diversi use-case interessante.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>In questi casi tendo ad usare una funzione che faccia da Factory<br></div><div>Sarò pure meno cool, ma preferisco essere più esplicito e comprensibile<br></div></div></div></div></blockquote><div><br></div><div>Il problema e' che c'e' sempre prima o poi il pistola che non la chiama e fa a mano. Statistico. E la volta che succede e la cr non passa per le mie mani... Il che vuole dire che se e' un nice to have, va bene. Se instanziare direttamente rompe la semantica della classe, niente, vai di __new__, mi prendo lo sbattimento io, ma almeno non verro' svegliato alle quattro di notte.</div><div><br>Si, ok... potrei sempre avere la famosa _Classe. In questi casi di solito basta. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><span><br></span></div><div><span>Al momento non alcun motivo valido per scomodare Tornado nei miei progetti: Django con i worker uWSGI mi vanno benissimo<br></span></div></div></div></div></blockquote><div><br></div><div>A me Django sta molto stretto. Non amo particolarmente il fatto che se devo fare qualche API call dentro Django rischia di andare in timeout il tutto. Si, certo... dovrei spostare tutta sta roba in Javascript e tanti saluti. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><span></span></div><div>Diciamo che ho risentito parlare di Tornado con asyncio e la prima domanda da nerd è "datemi un occasione per giocarci, se non me la date me la invento!"<br></div></div></div></div></blockquote><div><br></div><div>Caruccio, si. Poi detto fra noi... Asyncio non e' che mi abbia colpito troppo.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div><br></div><div>Il mio piano che avevo in mente è più o meno simile. Tenendo conto delle retrocompatibilità di py.test rispetto a unitest dovrei riuscire ad introdurlo in modo abbastanza indolore e poi migrare un po' alla volta, dove mi serve, usando fixture al posto di setUp/tearDown<br></div></div></div></div></blockquote><div><br></div><div>Si fa abbastanza semplicemente, si. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div>Rifattorizzare di botto tutti i setUp/tearDown dei miei progetti sarebbe invece, nel mio caso, un esagerazione<br><br></div><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div></div><div>5. etc. etc. etc.<br></div></blockquote><div>In Python 3 puoi scrivere ...</div><div>E' sintassi valida.</div></div></div></div></blockquote><div><br></div></span><div>uhm, questa temo di non averla capita ...<br></div></div></div></div></blockquote><div><br></div><div>Eh, non ho un python 3 per fare lo snob.</div><div>Essenzialmente ... e' sintassi valida di Python 3. Presente quando si scrive</div><div><br></div><div>class Foo(Bar):</div><div>    ...</div><div><br></div><div>per intendere che poi ci metti quello che ti pare? Ecco, e' Python 3 valido.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div></div></div></div></blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>ma dato che i miei progetti sono soprattutto DB-bound (si può dire?) guadagnare sul CPU-time lato pure-python sarebbe più o meno inifluente<br></div></div></div></div></blockquote><div><br></div><div>1. mi piace un sacco la definizione db-bound. Proprio perche' in effetti, in linguaggi come Python la differenza di performance fra db e python e' talmente tanta che roba che logicamente dovrebbe essere I/O bound in effetti potrebbe essere CPU bound. No shit.</div><div>2. Quindi no, altro che ininfluente. Io mi aspetto che le cose migliorino parecchio. </div><div><br></div><div>Se il tuo db e' veloce e la tua query e' scritta bene, c'e' proprio il caso che il collo di bottiglia sia il python che ti porta i risultati nel mondo Python. E potrebbe anche essere piu' vero se hai un ORM che ti crea oggetti complessi (ma non ho dati su questo).</div><div> </div></div><div>Poi con gli ORM e' difficile da dire: magari sotto sta facendo tante di quelle query insensate che il db non puo' fare miracoli.</div><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>