Programming http://blogs.ugidotnet.org/Franny/category/Programming.aspx Programming it-IT Francesco Carucci Subtext Version 2.6.0.0 Scrum and Long Term Project Planning for Video Games http://blogs.ugidotnet.org/Franny/archive/2007/12/20/90377.aspx <p>Ringazio Luca per avermi segnalato l'articolo su Gamasutra.</p> <p><a title="http://www.gamasutra.com/view/feature/3142/scrum_and_long_term_project_.php?page=1" href="http://www.gamasutra.com/view/feature/3142/scrum_and_long_term_project_.php?page=1">http://www.gamasutra.com/view/feature/3142/scrum_and_long_term_project_.php?page=1</a></p> <p>E' interessante perche' descrive bene il rapporto fra i publisher, che vogliono uno schedule dettagliato, e lo sviluppatore che non riesce mai a finire un gioco nel tempo stabilito.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/90377.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/12/20/90377.aspx Thu, 20 Dec 2007 14:31:41 GMT http://blogs.ugidotnet.org/Franny/archive/2007/12/20/90377.aspx#feedback 2 http://blogs.ugidotnet.org/Franny/comments/commentRss/90377.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/90377.aspx I need a hammer http://blogs.ugidotnet.org/Franny/archive/2007/11/27/89972.aspx <p><a title="http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12" href="http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12">http://discuss.joelonsoftware.com/default.asp?joel.3.219431.12</a></p> <p><em>"And this is the way everyone is doing it now? Everyone is using a general-purpose tool-building factory factory factory now, whenever they need a hammer?"<br />"Yes."</em></p><img src="http://blogs.ugidotnet.org/Franny/aggbug/89972.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/11/27/89972.aspx Tue, 27 Nov 2007 16:28:13 GMT http://blogs.ugidotnet.org/Franny/archive/2007/11/27/89972.aspx#feedback 2097 http://blogs.ugidotnet.org/Franny/comments/commentRss/89972.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/89972.aspx No Comment http://blogs.ugidotnet.org/Franny/archive/2007/10/16/88979.aspx <p>I commenti nel codice e' senza dubbio uno dei miei argomenti preferiti: io sono per la zero policy. Nessun commento, a parte cio' che non puo' in alcun modo essere espresso in codice.</p> <p>Oggi guardavo un po' di codice e mi imbatto in:</p><font color="#0000ff" size="2"> <p>#ifndef</p></font><font size="2"> </font><font color="#010001" size="2">_XXXX_MANAGER_HPP_<br /></font><font color="#0000ff" size="2">#define</font><font size="2"> </font><font color="#010001" size="2">_XXXX_MANAGER_HPP_</font><font size="2"> </font><font color="#008000" size="2">/// Include guard.</font> <p>A parte l'underscore di fronte ad un identificatore che in C++ e' riservato al compilatore e al comitato di standardizzazione, quindi non deve <strong>mai</strong> essere usato: il commento e' quanto meno illuminante.</p> <p>Il prossimo entra dritto nella top 10:</p><font color="#0000ff" size="2"> <p># define</p></font><font size="2"> </font><font color="#010001" size="2">IGNORE_MISSING_DX_FILE</font><font size="2"> </font><font color="#008000" size="2">// ignore missing file</font> <p>Il commento dice meno di cio' che cerca di commentare.</p> <p>Come nota a margine, nel progetto c'e' un Null Object Pattern implementato da manuale, mai usato. Sembra li' per dire "Guardate, ho letto Design Patterns". Ma non hai letto "Refactoring to Patterns".</p> <p>Cui prodest?</p> <p>Sto seriamente valutando l'ipotesi di creare una AntiComment Police con licenza di uccidere.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88979.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/10/16/88979.aspx Tue, 16 Oct 2007 16:22:01 GMT http://blogs.ugidotnet.org/Franny/archive/2007/10/16/88979.aspx#feedback 47 http://blogs.ugidotnet.org/Franny/comments/commentRss/88979.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88979.aspx I Quad... http://blogs.ugidotnet.org/Franny/archive/2007/10/15/88951.aspx <p>... sono arrivati :)</p> <p>PS. I Quad sono i quadrati, non i quad processor.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88951.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/10/15/88951.aspx Mon, 15 Oct 2007 14:47:26 GMT http://blogs.ugidotnet.org/Franny/archive/2007/10/15/88951.aspx#feedback 6 http://blogs.ugidotnet.org/Franny/comments/commentRss/88951.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88951.aspx Resource Acquisition is Initialisation http://blogs.ugidotnet.org/Franny/archive/2007/09/21/88478.aspx <p><a title="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization" href="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization">http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization</a></p> <p><font color="#010001" size="2">CWaterRenderingStrategy</font><font size="2">::~</font><font color="#010001" size="2">CWaterRenderingStrategy</font><font size="2">()<br />{<br /></font><font color="#0000ff" size="2">  delete</font><font size="2"> </font><font color="#010001" size="2">m_Geometry</font><font size="2">;<br /></font><font color="#0000ff" size="2">  delete</font><font size="2"> </font><font color="#010001" size="2">m_Shader</font><font size="2">;<br />}</font></p> <p>e poi subito dopo:</p> <p><font color="#010001" size="2">COceanRenderingStrategy</font><font size="2">::~</font><font color="#010001" size="2">COceanRenderingStrategy</font><font size="2">()<br />{<br /></font><font color="#0000ff" size="2">  delete</font><font size="2"> </font><font color="#010001" size="2">m_Geometry</font><font size="2">;<br />}</font><font size="2"></font></p> <p>Boom. Double delete e memory corruption. Qualcuno ha perso due ore per cercarlo. Il mio errore e' stato non seguire il pattern RAII e rilasciare m_Geometry nella classe base, ma la classe base non l'aveva inizializzato quindi non ne aveva l'ownership e non doveva cancellarlo. Nella classe derivata ho correttamente costruito e distrutto l'oggetto, ma l'ho scritta mesi dopo.</p> <p>Per altro... uno strategy pattern in questa situazione era overingegnerizzato. Non mi serviva ed ha offuscato il bug. Altra lezione.</p><font size="2"> <p> </p> <p> </p></font><img src="http://blogs.ugidotnet.org/Franny/aggbug/88478.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/09/21/88478.aspx Fri, 21 Sep 2007 18:54:43 GMT http://blogs.ugidotnet.org/Franny/archive/2007/09/21/88478.aspx#feedback 2 http://blogs.ugidotnet.org/Franny/comments/commentRss/88478.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88478.aspx &quot;Ah, the infamous &lsquo;you ain&rsquo;t gonna need it&rsquo; crap &quot; http://blogs.ugidotnet.org/Franny/archive/2007/09/18/88399.aspx <p>Poi Gianluca mi dice che mi lamento sempre, ma questa proprio non potevo lasciarla scappare :)</p> <p>Oggi il mio sogno e' avere un boss che non mi dice che YAGNI e' un concetto di merda. Il sogno di domani e' averne uno che sappia programmare.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88399.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/09/18/88399.aspx Tue, 18 Sep 2007 13:10:34 GMT http://blogs.ugidotnet.org/Franny/archive/2007/09/18/88399.aspx#feedback 22 http://blogs.ugidotnet.org/Franny/comments/commentRss/88399.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88399.aspx Technical Design Document http://blogs.ugidotnet.org/Franny/archive/2007/09/12/88283.aspx <p>Sto lavorando sull'acqua ed ho bisogno di un task dal tool team per supportare il mio lavoro. Senza entrare nei dettagli, ho bisogno che una regione d'acqua sia divisa in un certo numero di quadrati. Come da mia abitudine, mi mantengo sul semplice e chiedo di generare solo due quadrati, per ora, per un particolare livello sul quale sto testando il mio lavoro. Faccio la mia richiesta un paio di giorni fa e attendo. Oggi vedo un Technical Design Document riguardante il design del tool di editing dell'acqua ed una lunga discussione su come presentare le informazioni, l'algoritmo per generare i quadrati nel caso generale, che cosa succede se un fiume entra in una caverna e il designer magari vuole dividere bla bla bla.</p> <p>Io... ho... bisogno... solo... di... due... quadrati in un particolare formato gia' deciso e scritto su carta.</p> <p>Corro al piano di sotto e inizia la discussione:</p> <p>io&gt; Mi sta bene anche se scrivi a mano le coordinate di quei due quadrati, non c'e' bisogno di generarli, cosi' posso continuare a lavorare</p> <p>lui&gt; Ma io devo pensare al futuro, capire come i designer vogliono vedere quei quadrati, se vogliono generarli loro, tu come credi che saranno generati?</p> <p>io&gt; Non lo so, mi servono solo i due quadrati li' adesso, quando ho scritto il resto del codice avro' piu' informazioni su come mi serve generarli</p> <p>lui&gt; Ma devo scrivere il tool "future proof" quindi devo pensare a queste cose adesso</p> <p>io&gt; No, non devi, dammi solo quei due quadrati. Scrivi quel codice in mezz'ora, ci sono voluti due giorni per scrivere il TDD e ancora non ho i miei quadrati e non posso andare avanti</p> <p>lui&gt; Ma pensi che i quadrati saranno axis aligned o no in futuro?</p> <p>io&gt; Non lo so, ora falli allineati che e' piu' facile</p> <p>lui&gt; Ma in futuro?</p> <p>io&gt; Non lo so</p> <p>Mi ripete la stessa domanda tre volte e per tre volte gli sorrido e gli dico che non lo so, mi servono solo i due quadrati ora. Alla fine sbuffa un po' e mi dice che generera' solo i due quadrati che mi servono per ora. Poi vedremo.</p> <p>I nostri tool sono talmente sovraingegnerizzati da essere quasi inusabili, e non possiamo chiedere grosse modifiche perche' la risposta e' sempre del tipo: e' un problema mettere le mani in questo codice.</p> <p>Non faccio fatica a crederci, forse dovremmo chiedere aiuto a Torvalds, magari riscrive tutta la tool chain in assembly perche' cosi' e' piu' veloce. Ma io voglio solo due quadrati.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88283.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/09/12/88283.aspx Wed, 12 Sep 2007 17:43:57 GMT http://blogs.ugidotnet.org/Franny/archive/2007/09/12/88283.aspx#feedback 22 http://blogs.ugidotnet.org/Franny/comments/commentRss/88283.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88283.aspx Go learn C++ n00b http://blogs.ugidotnet.org/Franny/archive/2007/09/07/88180.aspx <p><a href="http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918">http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918</a></p> <p><br />Magari se Linus imparasse anche a programmare un bel giorno non si farebbe ridere dietro da mezzo mondo...</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88180.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/09/07/88180.aspx Fri, 07 Sep 2007 15:25:08 GMT http://blogs.ugidotnet.org/Franny/archive/2007/09/07/88180.aspx#feedback 36 http://blogs.ugidotnet.org/Franny/comments/commentRss/88180.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88180.aspx Commit del codice al pomeriggio? No grazie. http://blogs.ugidotnet.org/Franny/archive/2007/08/29/88006.aspx <p>Sembra che faccia male alla salute. Oggi si e' consumata una nuova puntata del dramma: nel branch principale e' vietato fare il commit del codice al pomeriggio, per evitare che la build si rompa la sera, visto che c'e' un ritardo di una o due ore fra il commit e quando il problema e' scoperto.</p> <p>Ovviamente il concetto di automated testing e' del tutto alieno, perche' questo e' l'ultimo chiodo sulla bara della Continuous Integration: un monumento a come non si gestisce un progetto. Poi si domandano perche' non hanno mai finito un gioco con meno di un anno di ritardo...<br />Per mia fortuna lavoro in un branch separato, perche' se qualcuno mi dice che non posso fare il mio commit ogni ora o due, gli scoppio a ridere.</p> <p>Ma c'e' speranza: Crytech ha divulgato di recente la notizia che nel loro progetto di punta, Crysis, usano metodologie agili con rush di due settimane. La speranza e' l'ultima a morire, bravo Cevat.</p> <p>Libro della settimana:<br /><a href="http://www.amazon.com/exec/obidos/ASIN/0321336380">http://www.amazon.com/exec/obidos/ASIN/0321336380</a></p><img src="http://blogs.ugidotnet.org/Franny/aggbug/88006.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/08/29/88006.aspx Wed, 29 Aug 2007 13:14:20 GMT http://blogs.ugidotnet.org/Franny/archive/2007/08/29/88006.aspx#feedback 3 http://blogs.ugidotnet.org/Franny/comments/commentRss/88006.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/88006.aspx &quot;E' un refactoring essenziale?&quot; http://blogs.ugidotnet.org/Franny/archive/2007/08/17/87841.aspx <p>Si', lo e'. L'eterna lotta sui principi cardine della Costruzione del Software fra me e il producer continua in queste calde giornate d'Agosto (e' un modo di dire, qui in UK si crepa dal freddo). Nelle migliori tradizioni, alla mia richiesta di tre giorni per rifattorizzare una parte importante dell'engine caduta un attimo in abbandono, la risposta e' stata un "forse, non lo so, devo vedere con il lead, ma e' davvero essenziale? hai gia' finito il task".<br />Se mi oppongono ulteriori problemi ad allocarmi tempo per i refactoring, usero' la tecnica di Fowler: fallo e non dire nulla a nessuno. Ci sara' un perche' se magicamente finisco la milestone sempre in anticipo?</p> <p>Le cronache dal fronte continuano.</p><img src="http://blogs.ugidotnet.org/Franny/aggbug/87841.aspx" width="1" height="1" /> Francesco Carucci http://blogs.ugidotnet.org/Franny/archive/2007/08/17/87841.aspx Fri, 17 Aug 2007 12:41:25 GMT http://blogs.ugidotnet.org/Franny/archive/2007/08/17/87841.aspx#feedback 19 http://blogs.ugidotnet.org/Franny/comments/commentRss/87841.aspx http://blogs.ugidotnet.org/Franny/services/trackbacks/87841.aspx