altre destinazioni

ultimi post

ultimi commenti

tag principali

categorie

archivi

powered by

  • WPFrontman + WP

friends

copyright

  • © 2004-2011
    Ludovico Magnocavallo
    tutti i diritti riservati

Voi come leggete il codice?

21 febbraio 2013

1 commento

Sto facendo un lavoro per una società abbastanza nota (vi dico solo che è un plugin per WP), e alcuni dei commenti fatti al mio codice dal mio referente mi hanno un po’ spiazzato: per capire cosa intendesse ho dovuto fare lo sforzo di uscire dalle mie consuetudini di sviluppo.

Dopo qualche meditazione, sono giunto alla conclusione che i nostri rispettivi approcci alla lettura del codice sono radicalmente diversi. Il mio approccio, quando prendo in mano una classe che non ho mai visto, è prima di tutto di farmi un’idea generale di cosa faccia guardando i nomi dei metodi nel class browser. Fatto questo, scendo se è il caso nel dettaglio dei metodi che mi interessano o mi sembrano cruciali per il suo funzionamento. Per me, quindi, un metodo usato una volta sola non solo ha poco senso — e ne privilegio quindi il riuso rispetto ad altre considerazioni –, ma è addirittura dannoso in quanto inquina la comprensione a colpo d’occhio del codice.

Il mio interlocutore invece segue un approccio diverso: quando prende in mano una classe guarda subito al costruttore, e parte da lì per seguire un eventuale flusso di codice. Per lui un metodo usato una sola volta ha un senso, in quanto incapsula determinate operazioni e — se il nome è scelto con criterio — nasconde parte del codice rendendo più semplice e veloce seguire un eventuale flusso di esecuzione.

Nel caso specifico (un plugin per WP) è probabile che il suo approccio abbia senso, dato che il codice viene eseguito più o meno in sequenza, anche se la sequenza è pilotata dai vari hook di WP, cui sono agganciati i metodi pubblici della classe. Certo è che lavorando di solito in Python/Django, un approccio di questo tipo mi sembra un po’ stravagante.

Sarei curioso di sapere come altri leggono il codice, e se la differenza è dovuta più al framework (WP) che porta a pensare in maniera sequenziale, al linguaggio usato, o se è soprattutto un approccio personale. BTW, questo post è scritto usando il plugin di cui sopra, secondo il principio dell’eat your own dogfood.

WP rant #1 - tassonomie

13 luglio 2011

13 commenti

Chi ha seguito un po’ le mie evoluzioni in questi ultimi anni, sa che con WP ho da tempo in corso una specie di lotta personale: è il più diffuso sistema di blogging, ha un’infinità di funzioni e tantissimi plugin, l’interfaccia è ragionevolmente comoda da usare, ma il codice è un esempio straordinario di come non si dovrebbe programmare, sia dal punto dell’architettura (quale architettura?), del disegno dei dati, degli algoritmi (quali algoritmi?), che del codice vero e proprio. In breve, ogni volta che ci metto le mani mi viene il rigetto, e ogni volta riscrivo un pezzo grande (il frontend, prima in PHP e ora in Django) o piccolo (varie funzionalità del backend).

Questa volta è il turno delle categorie, con cui sto lottando da qualche giorno. Per preservare la mia (scarsa) sanità mentale ho deciso di sfogarmi qui, in modo da a) avere magari qualche feedback, anche ne se immagino già il tono (da “ma chi te lo fa fare? Sei rimbecillito?” a “WP è una figata sei tu che non capisci una fava” – possibile), e b) inaugurare una “galleria degli orrori”, sempre che non mi stufi prima e decida di scrivere un sistema di blogging da zero. Quei due o tre lettori interessati possono continuare dopo il salto.

questo post continua, leggi il resto

Lightpress, reboot

23 giugno 2011

4 commenti

Qualcuno degli ormai rari lettori di questo blog forse ricorderà Lightpress, il frontend per WordPress che avevo sviluppato in Blogo, e accasato in seguito da Textdrive che lo aveva adottato tra le applicazioni sponsorizzate. Dopo parecchio lavoro e un po’ di (virtuali) soddisfazioni, circa cinque anni fa aveo deciso di interromperne lo sviluppo: in parte perchè pur essendo un progetto interessante quasi solo per blog commerciali, la licenza GPL faceva sì che in pratica lavorassi come consulente non remunerato (i nanopublisher non sono famosi in genere per avere un senso di equità sociale particolarmente sviluppato); e in parte perchè i miei interessi si erano nel frattempo spostati verso altre direzioni, tra cui Blogbabel.

Nel retrocranio però l’esperienza di Lightpress ha continuato a fermentare, e ogni volta che pensavo a mettere su un blog o mettevo le mani su quello di qualche parente o amico, mi rendevo conto che l’esigenza di tanti anni fa esiste ancora: WordPress ha una architettura vecchia, che non era particolarmente brillante neppure alle origini ma con il tempo e le stratificazioni successive è diventata davvero pessima, generando un sistema ipercomplesso, pieno di ridondanza, in cui è complicato mettere le mani (mai provato a tracciare l’origine di un dato attraverso decine di funzioni e include?) e che non usa nessuna delle tecniche di sviluppo di applicazioni web che sono ormai di uso comune come un sistema di template, codice a oggetti o perlomeno la separazione tra dati e viste logiche, un ORM (non tiratemi fuori l’aborto che è wpdb, tra l’altro utilizzato solo per alcune cose), ecc. ecc.

Così qualche tempo fa fa ho iniziato un po’ per gioco a buttare giù un frontend per WordPress in Django, riprendendo alcune delle idee di Lightpress e aggiungendone molte altre, e soprattutto cercando il più possibile di seguire la filosofia di progettazione e sviluppo delle applicazioni Python e Django. Ci è voluto molto più di quanto pensassi, un po’ per gli inevitabili mismatch tra il disegno della base dati di WordPress multiblog (agghiacciante come quasi tutto il resto) e il layer ORM di Django, un po’ per la quantità di funzionalità di cui tenere conto (commenti threaded o meno, categorie e pagine mono o multilivello, interazione diversa con utenti WP o anonimi, ecc.), ma dopo quasi sei mesi il primo prototipo è pronto, e sta servendo i blog che sono sul mio server, tra cui questo che state leggendo.

questo post continua, leggi il resto

Aaaaagggghhhhhh

23 gennaio 2008

7 commenti

Automattic is now positioned to execute on our vision of a better web
not just in blogging, but expanding our investment in anti-spam,
identity, wikis, forums, and more.

No, per favore no, di programmi scritti in maniera indecente e usati da milioni di persone ne avete già uno, non infliggeteci altre oscenità… Scherzi a parte, WordPress è veramente il peggior guazzabuglio di codice che abbia mai visto (almeno al di fuori del mio lavoro “vero”), ma è un ottimo esempio di come e quando sviluppare un prodotto che risponde alle reali esigenze del pubblico, come raccogliergli intorno una comunità, e come creare dal nulla una società sana e con servizi innovativi e di successo. Su questo, Matt può dare lezioni praticamente a chiunque. Tanto di cappello.

Chi arriverà per primo?

27 febbraio 2007

20 commenti

La credibilità di Movable Type come piattaforma, e TypePad come servizio di blogging, sta subendo colpi sempre più gravi: qualche giorno fa Suw Charman di Corante, stufa dei continui problemi di prestazioni di MT e della mancanza cronica di funzionalità indispensabili, si è scagliata in un’invettiva contro Six Apart che ha fatto il giro di parecchi blog; oggi è il turno dei blogger de La Stampa, che entrano in sciopero contro i disservizi di TyePad (grazie a Luca per la segnalazione).

Niente di nuovo sotto il sole, network di nanopublishing che macinano decine di milioni di pagine al mese come WeblogsSL hanno abbandonato MT da tempo, e credo che sempre più blogger seguiranno la loro strada. Quello che sorprende è che nessuna nuova piattaforma si stia facendo avanti per occupare il vuoto che si sta creando: WordPress, pur con tutte i suoi pregi, è una piattaforma carica di problemi, dalla pessima qualità del codice all’architettura alle scarse performance (che peggiorano nella versione multiutente), ma soprattutto non ha alle spalle una società capace di offrire supporto, e di assorbire gli eventuali problemi di implementazione in mabienti commerciali. Stiamo a vedere, il futuro si annuncia interessante.

Un'interfaccia gradevole per WP

18 dicembre 2006

5 commenti

Stamattina la quotidiana lettura dei post in aggregatore ha prodotto un link a Tiger, un ridisegno dell’interfaccia amministrativa di WP che vale decisamente la pena provare. Finalmente anche WP ha un’interfaccia esteticamente piacevole, e con un migliore utilizzo dello spazio. Purtroppo non ricordo dove ho trovato il link a Tiger, quindi per oggi niente linklove. Qui sotto un frammento dell’interfaccia di Qix, altri screenshot su OrderedList.
Tiger per WordPress

Spigolature / 1

4 ottobre 2006

11 commenti

Prendendo ad esempio il formato dei Rounded Corners su Labnotes, inizio oggi una serie di post dove raccogliere link e brevi considerazioni, che non hanno abbrivio sufficiente per meritarsi uno spazio proprio. Il nome della serie, Spigolature, è ovviamente ispirato alla omonima sezione della Settimana Enigmistica, una delle più sane tradizioni italiche dell’ultimo secolo, e che a me (come penso a molti di voi) ricorda oziose e interminabili giornate al mare quando ero ragazzino.

Usare i microformati in WordPress. Plugin e applicazioni per integrare hreview, hcalendar e un sacco di altri microformati in WP. Via Labnotes, come si conviene al primo link di queste Spigolature.

Ho un blog ma non mi sento un’audience. Comincia l’assalto di PR e markettari anche in Italia, e come Gaspar sono un po’ scettico, e un po’ infastidito. E poi, quali saranno “i cinque blogger più influenti d’Italia”? Se, come sembra, Edelman si affida a Technorati, tra i cinque “fortunati” ci dovrebbero essere gli autori di Roundhouse Kicks, e Dandyna. Sai che risate…

Rifacciamo WordPress in Django. Prima parte (su quaranta) di un tutorial su come creare un sistema di blogging evoluto in Django. Per chi al BzaarCamp ha seguito la presentazione di Cavedoni, Carlo & Co., e anche per chi non c’era.

Consigli per il prossimo BzaarCamp. I consigli di Scott Berkun su come organizzare una great unconference. Via Adam Trachtenberg.