SlideShare a Scribd company logo
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

Understanding the Python GIL
Understanding the Python GILUnderstanding the Python GIL
Understanding the Python GIL
David Beazley (Dabeaz LLC)
 
Generators: The Final Frontier
Generators: The Final FrontierGenerators: The Final Frontier
Generators: The Final Frontier
David Beazley (Dabeaz LLC)
 
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
David 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 layout
Acá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 Distributions
Ricardo 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 Lock
David 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
 
Python Generator Hacking
Python Generator HackingPython Generator Hacking
Python Generator Hacking
David Beazley (Dabeaz LLC)
 

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 2009
Andrea Francia
 
Introduzione al TDD
Introduzione al TDDIntroduzione al TDD
Introduzione al TDD
Andrea Francia
 
Le 12 pratiche
Le 12 praticheLe 12 pratiche
Le 12 pratiche
Andrea 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 TDD
Andrea 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/APT
Joshua 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 era
nussbauml
 
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 Majors
worr1244
 
GIT
GITGIT
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 right
Igor Gnatenko
 
Linux midterm quiz
Linux midterm quizLinux midterm quiz
Linux midterm quiz
Andrew Ibrahim
 
Behat dpc12
Behat dpc12Behat dpc12
Behat dpc12
benwaine
 
Mining Component Repositories for Installability Issues
Mining Component Repositories for Installability IssuesMining Component Repositories for Installability Issues
Mining Component Repositories for Installability Issues
Roberto Di Cosmo
 
2 Unix basics. Part 2
2 Unix basics. Part 22 Unix basics. Part 2
2 Unix basics. Part 2
Roman Prykhodchenko
 
Command Line Tools
Command Line ToolsCommand Line Tools
Command Line Tools
David Harris
 
The Gory Details of Debian packages
The Gory Details of Debian packagesThe Gory Details of Debian packages
The Gory Details of Debian packages
Jeremiah Foster
 
NWRUG July 2009 - Darcs
NWRUG July 2009 - DarcsNWRUG July 2009 - Darcs
NWRUG July 2009 - Darcs
PatchSpace Ltd
 
Getting Started with (Distributed) Version Control
Getting Started with (Distributed) Version ControlGetting Started with (Distributed) Version Control
Getting Started with (Distributed) Version Control
John 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 Manager
Roberto Di Cosmo
 
Debian packaging howto
Debian packaging howtoDebian packaging howto
Debian packaging howto
Ding Zhou
 
Debian Packaging
Debian PackagingDebian Packaging
Debian Packaging
Javier Carranza
 
Hadoop
HadoopHadoop
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
BITS
 

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 TripServiceKata
Andrea 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 2019
Andrea 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 Parma
Andrea 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 2018
Andrea Francia
 
Le pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingLe pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme Programming
Andrea Francia
 
Test-Driven Development su Codice Esistente
Test-Driven Development su Codice EsistenteTest-Driven Development su Codice Esistente
Test-Driven Development su Codice Esistente
Andrea Francia
 
Come si applica l'OCP
Come si applica l'OCPCome si applica l'OCP
Come si applica l'OCP
Andrea 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 Programming
Andrea 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
 
Bash-Only Deployment
Bash-Only DeploymentBash-Only Deployment
Bash-Only Deployment
Andrea Francia
 
TDD anche su iOS
TDD anche su iOSTDD anche su iOS
TDD anche su iOS
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 2008
Andrea 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

Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 

Recently uploaded (20)

Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 

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