SlideShare a Scribd company logo
1 of 50
Download to read offline
Tutti i miei sbagli
                        Gli errori di un Wannabe Open Source Developer

                                       Andrea Francia




Thursday, March 8, 12
Il progetto
                        Gli Sbagli
                        •   Generic Naming Issue
                        •   Using Bash for functional
                            testing

           Contenuti    •
                        •
                            Feedback
                            License
                        •   Project hosting
                        Una cosa giusta
                        Conclusioni
                        Applausi

Thursday, March 8, 12
trash-cli
       $ trash foo
       $ list-trash
       2012-03-02 19:43:44 /Users/andrea/foo
       $ touch foo; trash foo
       $ list-trash
       2012-03-02 19:43:44 /Users/andrea/foo
       2012-03-02 19:44:04 /Users/andrea/foo
       $ restore-trash
                0 2012-03-02 19:43:44 /Users/andrea/foo
                1 2012-03-02 19:44:04 /Users/andrea/foo
       What file to restore [0..1]:0

Thursday, March 8, 12
Generic Naming Issue


Thursday, March 8, 12
Comandi del pacchetto
                         trash           Butta un file


                         empty-trash     Svuota tutto il cestino


                         list-trash      Elenca il contenuto


                         restore-trash   Recupera un file




Thursday, March 8, 12
Debian




Thursday, March 8, 12
Fedora




Thursday, March 8, 12
Debian
                        trash           OK
                        list-trash
                        restore-trash
                        empty-trash             QA
                                             rejected
                                                        Fedora

Thursday, March 8, 12
Command name changes

                    trash           trash-put
                    list-trash      trash-list
                    restore-trash   trash-restore
                    empty-trash     trash-empty



Thursday, March 8, 12
Risultato

                        Debian --> vecchi nomi
                        Upstream --> nomi nuovi
                        Fedora --> Niente!!! (perdita di interesse
                        dal package maintainer)



Thursday, March 8, 12
Lessons Learned

                        Non cambiare mai il nome dei comandi
                        Non cedere alle pressioni dei revisori
                        (tanto cambiano)


   More at: https://github.com/andreafrancia/trash-cli/blob/
       master/docs/about-the-generic-naming-issue.txt
Thursday, March 8, 12
Using Bash for
                        functional testing


Thursday, March 8, 12
shunit




Thursday, March 8, 12
Results

                        Very slow tests
                        Unreadable failure messages
                        Complex fixture set up
                        Two test suites (bash+python)



Thursday, March 8, 12
Lessons Learned
                        Test di Integrazione? Ok, ser vono ma
                        meglio che siano pochi.
                        Test Funzionali? Meglio che siano
                        omogenei con i test di unità
                        Per la bash non sono necessarie librerie/
                        framework di test


Thursday, March 8, 12
Bash for Testing(1)

                 #!/bin/bash
                 set	
  -­‐o	
  errexit
                 set	
  -­‐o	
  nounset




Thursday, March 8, 12
Bash for Testing(2)

             touch	
  foo
             trash-­‐put	
  foo

             #	
  foo	
  should	
  have	
  been	
  deleted
             test	
  !	
  -­‐f	
  foo




Thursday, March 8, 12
Bash for Testing(3)

        diff	
  <(trash-­‐list)	
  -­‐	
  <<	
  EXPECTED_RESULT
        2012-­‐03-­‐02	
  19:43:44	
  /Users/andrea/foo
        2012-­‐03-­‐02	
  19:44:04	
  /Users/andrea/foo
        EXPECTED_RESULT




Thursday, March 8, 12
License


Thursday, March 8, 12
GPL v2+


Thursday, March 8, 12
Lessons Learned



Thursday, March 8, 12
Lessons Learned (1)


                        Licenze già fatte sono comode ma vanno
                        capite




Thursday, March 8, 12
Lessons Learned (2)


                        Il papiro all’inizio del file é una rottura




Thursday, March 8, 12
Papiro della GPL
     #!/usr/bin/python
     # list-trash: list trashed files
     #
     # Copyright (C) 2007,2008 Andrea Francia Trivolzio(PV) Italy
     #
     # This program is free software; you can redistribute it and/or
     # modify it under the terms of the GNU General Public License
     # as published by the Free Software Foundation; either version 2
     # of the License, or (at your option) any later version.
     #
     # This program is distributed in the hope that it will be useful,
     # but WITHOUT ANY WARRANTY; without even the implied warranty of
     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     # GNU General Public License for more details.
     #
     # You should have received a copy of the GNU General Public License
     # along with this program; if not, write to the Free Software
     # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
     # 02110-1301, USA.

     from libtrash import TrashDirectory

     for trashed_file in TrashDirectory.trashed_files() :
         print "%s %s" % (trashed_file.deletion_date, trashed_file.path)




Thursday, March 8, 12
Lessons learned (3)


                        A volte conviene usare licenze più
                        semplici




Thursday, March 8, 12
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
                    Version 2, December 2004

 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

 Everyone is permitted to copy and distribute verbatim or modified
 copies of this license document, and changing it is allowed as long
 as the name is changed.

            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. You just DO WHAT THE FUCK YOU WANT TO.




                         http://sam.zoy.org/wtfpl/

 Thursday, March 8, 12
Code Hosting
                          Services


Thursday, March 8, 12
sourceforge.net
                                   ✉
Thursday, March 8, 12
Lessons Learned
                         Automatable release support
                         Feedback barrier
                         Si può sempre cambiare
                                              bitbucket
                        sf.net      google
                                     code                   ?
                                                   GitHub


Thursday, March 8, 12
Internals: TrashDir


Thursday, March 8, 12
Gnome
                         KDE


                               TrashDir


                        cli
                                           XFCE


Thursday, March 8, 12
How it works
      $	
  trash-­‐put	
  pippo.txt




      ~/.local/share/Trash/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
      	
  	
  	
  	
  info/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ,-­‐-­‐-­‐-­‐-­‐|	
  [Trash	
  Info]	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |
      	
  	
  	
  	
  	
  	
  	
  	
  pippo.txt.trashinfo	
  	
  	
  	
  	
  	
  |	
  Path=/tmp/pippo.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |
      	
  	
  	
  	
  files/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  DeletionDate=2012-­‐02-­‐29T00:13:54|
      	
  	
  	
  	
  	
  	
  	
  	
  pippo.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  `.
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  `-­‐	
  original	
  file	
  moved	
  here




Thursday, March 8, 12
How it works
      $	
  touch	
  pippo.txt;	
  trash-­‐put	
  pippo.txt	
  	
  	
  	
  	
  #	
  again
      $	
  touch	
  pippo.txt;	
  trash-­‐put	
  pippo.txt	
  	
  	
  	
  	
  #	
  again
      $	
  touch	
  pippo.txt;	
  trash-­‐put	
  pippo.txt	
  	
  	
  	
  	
  #	
  again

      ~/.local/share/Trash/	
  
      	
  	
  	
  	
  info/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      	
  	
  	
  	
  	
  	
  	
  	
  pippo.txt.trashinfo
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_1.txt.trashinfo
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_2.txt.trashinfo
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_3.txt.trashinfo
      	
  	
  	
  	
  files/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      	
  	
  	
  	
  	
  	
  	
  	
  pippo.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_1.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_2.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      	
  	
  	
  	
  	
  	
  	
  	
  pippo_3.txt	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  




Thursday, March 8, 12
Gnome
                         KDE


                               TrashDir


                        cli
                                            XFCE

Thursday, March 8, 12
Thursday, March 8, 12
pippo.txt
                         pippo.txt




Thursday, March 8, 12
open(3)
      #include	
  <sys/stat.h>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
                                                            	
  
      #include	
  <fcntl.h>	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
                                                   	
  
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
                                                                                                                                                                                                	
  
      int	
  open(const	
  char	
  *path,	
  int	
  oflag,	
  ...	
  );	
  	
  	
                                                                                                               	
  
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ^	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  O_EXCL	
  |	
  O_CREAT	
  -­‐’	
  




Thursday, March 8, 12
os.open
      import	
  os

      fd	
  =	
  os.open(dest,	
  os.O_RDWR	
  	
  |	
  
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  os.O_CREAT	
  |
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  os.O_EXCL,	
  0600)
      	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
      os.write(fd,	
  content)
      os.close(fd)
      logger.trashinfo_created_as(dest)

      return	
  (dest,	
  trash_id)



Thursday, March 8, 12
Conclusioni


Thursday, March 8, 12
Lezioni miste (1)

                        Utenti: va bene ascoltarli ma la vision la
                        devi avere tu (WONTFIX, parallelo)
                        Promozione per distro: Non vale la pena
                        se poi non lo aggiornano




Thursday, March 8, 12
Lezioni miste (2)

                        Code Review? Utilissime, basta chiedere
                        in lista.
                        Occhio alle librerie e ai framework
                        (OptionParser, Unipath)




Thursday, March 8, 12
Lezioni miste (3)

                        Tempo a disposizione? Peggio che al
                        lavoro!
                         Alta coesione e basso accoppiamento e
                         test veloci sono indispensabili




Thursday, March 8, 12
Lezioni miste (4)
                        È vero che Git sembra più complicato di Subversion?
                        Però
                          è più facile integrare le patch degli altri
                          meno conflitti inesistenti
                          commit locali
                          non si incasina se sposti una directory
                          capisce da solo se hai rinominato un file


Thursday, March 8, 12
Lezioni miste (5)

                        Collaboration tools (wiki, blog, mailing-
                        list)
                        ➡Cominciano ad essere usati solo dopo
                          quando c’e’ veramente tanto interesse
                        ➡Si può aspettare a farli.


Thursday, March 8, 12
Branches




Thursday, March 8, 12
Lezione più grande


Thursday, March 8, 12
Come lo farei ora?
                        Beer/Pizza License
                        Git
                        GitHub
                        Outside In TDD
                        No Wiki, solo .txt tra i sorgenti
                        Nessun push promozionale

Thursday, March 8, 12
Grazie
                             Andrea Francia
                         http://andreafrancia.it
                        andrea@andreafrancia.it

                        Libero da settembre 2012



Thursday, March 8, 12
Altre cose



Thursday, March 8, 12
Altro

                        Singleton Logger
                        Troppa docs sulla wiki




Thursday, March 8, 12

More Related Content

What's hot

Generator Tricks for Systems Programmers, v2.0
Generator Tricks for Systems Programmers, v2.0Generator Tricks for Systems Programmers, v2.0
Generator Tricks for Systems Programmers, v2.0David Beazley (Dabeaz LLC)
 
101 2.1 design hard disk layout
101 2.1 design hard disk layout101 2.1 design hard disk layout
101 2.1 design hard disk layoutAcácio Oliveira
 
Dist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsDist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsRicardo Signes
 
In Search of the Perfect Global Interpreter Lock
In Search of the Perfect Global Interpreter LockIn Search of the Perfect Global Interpreter Lock
In Search of the Perfect Global Interpreter LockDavid Beazley (Dabeaz LLC)
 
Part 4 of 'Introduction to Linux for bioinformatics': Managing data
Part 4 of 'Introduction to Linux for bioinformatics': Managing data Part 4 of 'Introduction to Linux for bioinformatics': Managing data
Part 4 of 'Introduction to Linux for bioinformatics': Managing data Joachim Jacob
 

What's hot (8)

Understanding the Python GIL
Understanding the Python GILUnderstanding the Python GIL
Understanding the Python GIL
 
Generators: The Final Frontier
Generators: The Final FrontierGenerators: The Final Frontier
Generators: The Final Frontier
 
Generator Tricks for Systems Programmers, v2.0
Generator Tricks for Systems Programmers, v2.0Generator Tricks for Systems Programmers, v2.0
Generator Tricks for Systems Programmers, v2.0
 
101 2.1 design hard disk layout
101 2.1 design hard disk layout101 2.1 design hard disk layout
101 2.1 design hard disk layout
 
Dist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN DistributionsDist::Zilla - Maximum Overkill for CPAN Distributions
Dist::Zilla - Maximum Overkill for CPAN Distributions
 
In Search of the Perfect Global Interpreter Lock
In Search of the Perfect Global Interpreter LockIn Search of the Perfect Global Interpreter Lock
In Search of the Perfect Global Interpreter Lock
 
Part 4 of 'Introduction to Linux for bioinformatics': Managing data
Part 4 of 'Introduction to Linux for bioinformatics': Managing data Part 4 of 'Introduction to Linux for bioinformatics': Managing data
Part 4 of 'Introduction to Linux for bioinformatics': Managing data
 
Python Generator Hacking
Python Generator HackingPython Generator Hacking
Python Generator Hacking
 

Viewers also liked

Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)Andrea Francia
 
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)Tutti i miei sbagli (Errori di un wannabe Open Source Developer)
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)Andrea Francia
 
Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)Andrea Francia
 
Subversion @ JUG Milano 11 dic 2009
Subversion @ JUG Milano 11 dic 2009Subversion @ JUG Milano 11 dic 2009
Subversion @ JUG Milano 11 dic 2009Andrea Francia
 
Writing a Crawler with Python and TDD
Writing a Crawler with Python and TDDWriting a Crawler with Python and TDD
Writing a Crawler with Python and TDDAndrea Francia
 

Viewers also liked (7)

Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)
 
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)Tutti i miei sbagli (Errori di un wannabe Open Source Developer)
Tutti i miei sbagli (Errori di un wannabe Open Source Developer)
 
Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)
 
Subversion @ JUG Milano 11 dic 2009
Subversion @ JUG Milano 11 dic 2009Subversion @ JUG Milano 11 dic 2009
Subversion @ JUG Milano 11 dic 2009
 
Introduzione al TDD
Introduzione al TDDIntroduzione al TDD
Introduzione al TDD
 
Le 12 pratiche
Le 12 praticheLe 12 pratiche
Le 12 pratiche
 
Writing a Crawler with Python and TDD
Writing a Crawler with Python and TDDWriting a Crawler with Python and TDD
Writing a Crawler with Python and TDD
 

Similar to Tutti i miei sbagli, versione 7 Marzo 2012 al XPUG mi

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTJoshua Thijssen
 
Distributions and package management in the containers era
Distributions and package management in the containers eraDistributions and package management in the containers era
Distributions and package management in the containers eranussbauml
 
You think you're not a target? A tale of three developers...
You think you're not a target? A tale of three developers...You think you're not a target? A tale of three developers...
You think you're not a target? A tale of three developers...Speck&Tech
 
Linux for CS Majors
Linux for CS MajorsLinux for CS Majors
Linux for CS Majorsworr1244
 
The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)Peter Eisentraut
 
Rust packaging: Cross-distro collaboration done right
Rust packaging: Cross-distro collaboration done rightRust packaging: Cross-distro collaboration done right
Rust packaging: Cross-distro collaboration done rightIgor Gnatenko
 
Behat dpc12
Behat dpc12Behat dpc12
Behat dpc12benwaine
 
Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesRoberto Di Cosmo
 
Command Line Tools
Command Line ToolsCommand Line Tools
Command Line ToolsDavid Harris
 
The Gory Details of Debian packages
The Gory Details of Debian packagesThe Gory Details of Debian packages
The Gory Details of Debian packagesJeremiah Foster
 
NWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsNWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsPatchSpace Ltd
 
Getting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlGetting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlJohn Paulett
 
Leveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerLeveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerRoberto Di Cosmo
 
Debian packaging howto
Debian packaging howtoDebian packaging howto
Debian packaging howtoDing Zhou
 
BITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS: Introduction to Linux - Text manipulation tools for bioinformaticsBITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS: Introduction to Linux - Text manipulation tools for bioinformaticsBITS
 

Similar to Tutti i miei sbagli, versione 7 Marzo 2012 al XPUG mi (20)

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
 
Distributions and package management in the containers era
Distributions and package management in the containers eraDistributions and package management in the containers era
Distributions and package management in the containers era
 
You think you're not a target? A tale of three developers...
You think you're not a target? A tale of three developers...You think you're not a target? A tale of three developers...
You think you're not a target? A tale of three developers...
 
Linux for CS Majors
Linux for CS MajorsLinux for CS Majors
Linux for CS Majors
 
GIT
GITGIT
GIT
 
The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)
 
Rust packaging: Cross-distro collaboration done right
Rust packaging: Cross-distro collaboration done rightRust packaging: Cross-distro collaboration done right
Rust packaging: Cross-distro collaboration done right
 
Linux midterm quiz
Linux midterm quizLinux midterm quiz
Linux midterm quiz
 
Behat dpc12
Behat dpc12Behat dpc12
Behat dpc12
 
Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability Issues
 
2 Unix basics. Part 2
2 Unix basics. Part 22 Unix basics. Part 2
2 Unix basics. Part 2
 
Command Line Tools
Command Line ToolsCommand Line Tools
Command Line Tools
 
The Gory Details of Debian packages
The Gory Details of Debian packagesThe Gory Details of Debian packages
The Gory Details of Debian packages
 
NWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsNWRUG July 2009 - Darcs
NWRUG July 2009 - Darcs
 
Getting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlGetting Started with (Distributed) Version Control
Getting Started with (Distributed) Version Control
 
Leveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package ManagerLeveraging Solver Preferences to Tame your Package Manager
Leveraging Solver Preferences to Tame your Package Manager
 
Debian packaging howto
Debian packaging howtoDebian packaging howto
Debian packaging howto
 
Debian Packaging
Debian PackagingDebian Packaging
Debian Packaging
 
Hadoop
HadoopHadoop
Hadoop
 
BITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS: Introduction to Linux - Text manipulation tools for bioinformaticsBITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS: Introduction to Linux - Text manipulation tools for bioinformatics
 

More from Andrea Francia

Baby Steps TripServiceKata
Baby Steps TripServiceKataBaby Steps TripServiceKata
Baby Steps TripServiceKataAndrea Francia
 
TDD on Legacy Code - Voxxed Days Milano 2019
TDD on Legacy Code - Voxxed Days Milano 2019TDD on Legacy Code - Voxxed Days Milano 2019
TDD on Legacy Code - Voxxed Days Milano 2019Andrea Francia
 
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...Andrea Francia
 
Kata in Bash a DevOpsHeroes 2018 a Parma
Kata in Bash a DevOpsHeroes 2018 a ParmaKata in Bash a DevOpsHeroes 2018 a Parma
Kata in Bash a DevOpsHeroes 2018 a ParmaAndrea Francia
 
User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018Andrea Francia
 
Le pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingLe pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingAndrea Francia
 
Test-Driven Development su Codice Esistente
Test-Driven Development su Codice EsistenteTest-Driven Development su Codice Esistente
Test-Driven Development su Codice EsistenteAndrea Francia
 
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)Andrea Francia
 
Introduzione a eXtreme Programming
Introduzione a eXtreme ProgrammingIntroduzione a eXtreme Programming
Introduzione a eXtreme ProgrammingAndrea Francia
 
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)Andrea Francia
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Andrea Francia
 

More from Andrea Francia (14)

Baby Steps TripServiceKata
Baby Steps TripServiceKataBaby Steps TripServiceKata
Baby Steps TripServiceKata
 
TDD on Legacy Code - Voxxed Days Milano 2019
TDD on Legacy Code - Voxxed Days Milano 2019TDD on Legacy Code - Voxxed Days Milano 2019
TDD on Legacy Code - Voxxed Days Milano 2019
 
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...
Lavorare con codice legacy “non testabile” - Incontro DevOps - 8 marzo 2019 -...
 
Kata in Bash a DevOpsHeroes 2018 a Parma
Kata in Bash a DevOpsHeroes 2018 a ParmaKata in Bash a DevOpsHeroes 2018 a Parma
Kata in Bash a DevOpsHeroes 2018 a Parma
 
User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018User Stories - Andrea Francia @ WeDev 7 novembre 2018
User Stories - Andrea Francia @ WeDev 7 novembre 2018
 
Le pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingLe pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme Programming
 
Test-Driven Development su Codice Esistente
Test-Driven Development su Codice EsistenteTest-Driven Development su Codice Esistente
Test-Driven Development su Codice Esistente
 
Come si applica l'OCP
Come si applica l'OCPCome si applica l'OCP
Come si applica l'OCP
 
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)
Le 12 pratiche - Un introduzione a XP (Mini Italian Agile Day)
 
Introduzione a eXtreme Programming
Introduzione a eXtreme ProgrammingIntroduzione a eXtreme Programming
Introduzione a eXtreme Programming
 
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
Test-Driven Development e Sviluppo Incrementale (TDD-Milano 2017-01-10)
 
Bash-Only Deployment
Bash-Only DeploymentBash-Only Deployment
Bash-Only Deployment
 
TDD anche su iOS
TDD anche su iOSTDD anche su iOS
TDD anche su iOS
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008
 

Recently uploaded

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Recently uploaded (20)

Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

Tutti i miei sbagli, versione 7 Marzo 2012 al XPUG mi

  • 1. Tutti i miei sbagli Gli errori di un Wannabe Open Source Developer Andrea Francia Thursday, March 8, 12
  • 2. Il progetto Gli Sbagli • Generic Naming Issue • Using Bash for functional testing Contenuti • • Feedback License • Project hosting Una cosa giusta Conclusioni Applausi Thursday, March 8, 12
  • 3. trash-cli $ trash foo $ list-trash 2012-03-02 19:43:44 /Users/andrea/foo $ touch foo; trash foo $ list-trash 2012-03-02 19:43:44 /Users/andrea/foo 2012-03-02 19:44:04 /Users/andrea/foo $ restore-trash 0 2012-03-02 19:43:44 /Users/andrea/foo 1 2012-03-02 19:44:04 /Users/andrea/foo What file to restore [0..1]:0 Thursday, March 8, 12
  • 5. Comandi del pacchetto trash Butta un file empty-trash Svuota tutto il cestino list-trash Elenca il contenuto restore-trash Recupera un file Thursday, March 8, 12
  • 8. Debian trash OK list-trash restore-trash empty-trash QA rejected Fedora Thursday, March 8, 12
  • 9. Command name changes trash trash-put list-trash trash-list restore-trash trash-restore empty-trash trash-empty Thursday, March 8, 12
  • 10. Risultato Debian --> vecchi nomi Upstream --> nomi nuovi Fedora --> Niente!!! (perdita di interesse dal package maintainer) Thursday, March 8, 12
  • 11. Lessons Learned Non cambiare mai il nome dei comandi Non cedere alle pressioni dei revisori (tanto cambiano) More at: https://github.com/andreafrancia/trash-cli/blob/ master/docs/about-the-generic-naming-issue.txt Thursday, March 8, 12
  • 12. Using Bash for functional testing Thursday, March 8, 12
  • 14. Results Very slow tests Unreadable failure messages Complex fixture set up Two test suites (bash+python) Thursday, March 8, 12
  • 15. Lessons Learned Test di Integrazione? Ok, ser vono ma meglio che siano pochi. Test Funzionali? Meglio che siano omogenei con i test di unità Per la bash non sono necessarie librerie/ framework di test Thursday, March 8, 12
  • 16. Bash for Testing(1) #!/bin/bash set  -­‐o  errexit set  -­‐o  nounset Thursday, March 8, 12
  • 17. Bash for Testing(2) touch  foo trash-­‐put  foo #  foo  should  have  been  deleted test  !  -­‐f  foo Thursday, March 8, 12
  • 18. Bash for Testing(3) diff  <(trash-­‐list)  -­‐  <<  EXPECTED_RESULT 2012-­‐03-­‐02  19:43:44  /Users/andrea/foo 2012-­‐03-­‐02  19:44:04  /Users/andrea/foo EXPECTED_RESULT Thursday, March 8, 12
  • 22. Lessons Learned (1) Licenze già fatte sono comode ma vanno capite Thursday, March 8, 12
  • 23. Lessons Learned (2) Il papiro all’inizio del file é una rottura Thursday, March 8, 12
  • 24. Papiro della GPL #!/usr/bin/python # list-trash: list trashed files # # Copyright (C) 2007,2008 Andrea Francia Trivolzio(PV) Italy # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. from libtrash import TrashDirectory for trashed_file in TrashDirectory.trashed_files() :     print "%s %s" % (trashed_file.deletion_date, trashed_file.path) Thursday, March 8, 12
  • 25. Lessons learned (3) A volte conviene usare licenze più semplici Thursday, March 8, 12
  • 27. Code Hosting Services Thursday, March 8, 12
  • 28. sourceforge.net ✉ Thursday, March 8, 12
  • 29. Lessons Learned Automatable release support Feedback barrier Si può sempre cambiare bitbucket sf.net google code ? GitHub Thursday, March 8, 12
  • 31. Gnome KDE TrashDir cli XFCE Thursday, March 8, 12
  • 32. How it works $  trash-­‐put  pippo.txt ~/.local/share/Trash/                        +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+        info/                                    ,-­‐-­‐-­‐-­‐-­‐|  [Trash  Info]                                        |                pippo.txt.trashinfo            |  Path=/tmp/pippo.txt                          |        files/                                              |  DeletionDate=2012-­‐02-­‐29T00:13:54|                pippo.txt                                +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+                                  `.                                      `-­‐  original  file  moved  here Thursday, March 8, 12
  • 33. How it works $  touch  pippo.txt;  trash-­‐put  pippo.txt          #  again $  touch  pippo.txt;  trash-­‐put  pippo.txt          #  again $  touch  pippo.txt;  trash-­‐put  pippo.txt          #  again ~/.local/share/Trash/          info/                                                    pippo.txt.trashinfo                pippo_1.txt.trashinfo                pippo_2.txt.trashinfo                pippo_3.txt.trashinfo        files/                                                  pippo.txt                                    pippo_1.txt                                    pippo_2.txt                                    pippo_3.txt                     Thursday, March 8, 12
  • 34. Gnome KDE TrashDir cli XFCE Thursday, March 8, 12
  • 36. pippo.txt pippo.txt Thursday, March 8, 12
  • 37. open(3) #include  <sys/stat.h>                                                       #include  <fcntl.h>                                                                                                                                                             int  open(const  char  *path,  int  oflag,  ...  );                                                                          ^                                                          O_EXCL  |  O_CREAT  -­‐’   Thursday, March 8, 12
  • 38. os.open import  os fd  =  os.open(dest,  os.O_RDWR    |                                        os.O_CREAT  |                                      os.O_EXCL,  0600)                                                                         os.write(fd,  content) os.close(fd) logger.trashinfo_created_as(dest) return  (dest,  trash_id) Thursday, March 8, 12
  • 40. Lezioni miste (1) Utenti: va bene ascoltarli ma la vision la devi avere tu (WONTFIX, parallelo) Promozione per distro: Non vale la pena se poi non lo aggiornano Thursday, March 8, 12
  • 41. Lezioni miste (2) Code Review? Utilissime, basta chiedere in lista. Occhio alle librerie e ai framework (OptionParser, Unipath) Thursday, March 8, 12
  • 42. Lezioni miste (3) Tempo a disposizione? Peggio che al lavoro! Alta coesione e basso accoppiamento e test veloci sono indispensabili Thursday, March 8, 12
  • 43. Lezioni miste (4) È vero che Git sembra più complicato di Subversion? Però è più facile integrare le patch degli altri meno conflitti inesistenti commit locali non si incasina se sposti una directory capisce da solo se hai rinominato un file Thursday, March 8, 12
  • 44. Lezioni miste (5) Collaboration tools (wiki, blog, mailing- list) ➡Cominciano ad essere usati solo dopo quando c’e’ veramente tanto interesse ➡Si può aspettare a farli. Thursday, March 8, 12
  • 47. Come lo farei ora? Beer/Pizza License Git GitHub Outside In TDD No Wiki, solo .txt tra i sorgenti Nessun push promozionale Thursday, March 8, 12
  • 48. Grazie Andrea Francia http://andreafrancia.it andrea@andreafrancia.it Libero da settembre 2012 Thursday, March 8, 12
  • 50. Altro Singleton Logger Troppa docs sulla wiki Thursday, March 8, 12