Tutti i miei sbagli (Errori di un wannabe Open Source Developer)

Post on 15-May-2015

4,554 views 0 download

description

É vero che sbagliare é un buon modo per imparare, ma é ancora meglioimparare dagli errori degli altri.Sara` presentata una carrellata di tutti gli errori che ho fatto durante lo sviluppo del progetto Open Source `trash-cli`. Errori di tutti i tipi: manageriali, architetturali, di design e di metodologia. Versione Codemotion Mar 24, 2012

transcript

Tutti i miei sbagli

Andrea Francia

andrea@andreafrancia.it – http://andreafrancia.it

1Saturday, March 24, 12

@andreafrancia #trash-cli

Tutti i miei sbagli Errori di un wannabe Open Source Developer

Andrea Francia

22Saturday, March 24, 12

@andreafrancia #trash-cli

Contenuti

Il progettoGli erroriQualcosa di giustoConclusioniApplausi

33Saturday, March 24, 12

@andreafrancia #trash-cli

trash-cli

https://github.com/andreafrancia/trash-cli

44Saturday, March 24, 12

@andreafrancia #trash-cli

Open Source

GPLv2

55Saturday, March 24, 12

@andreafrancia #trash-cli

Linux

66Saturday, March 24, 12

@andreafrancia #trash-cli

$ trash

77Saturday, March 24, 12

@andreafrancia #trash-cli

$ trash ./foo

88Saturday, March 24, 12

@andreafrancia #trash-cli

$ list-trash

2012-03-02 19:43:44 /Users/andrea/foo

99Saturday, March 24, 12

@andreafrancia #trash-cli

$ trash a_dir/foo$ trash another_dir/foo

1010Saturday, March 24, 12

@andreafrancia #trash-cli

$ list-trash 2012-03-02 19:43:44 /home/andrea/foo2012-03-02 19:50:04 /home/andrea/a_dir/… 2012-03-02 19:50:05 /home/andrea/anothe…

1111Saturday, March 24, 12

@andreafrancia #trash-cli

$ restore-trash 0 2012-03-02 19:43:44 /home/andrea/foo 1 2012-03-02 19:50:04 /home/andrea/a_d… 2 2012-03-02 19:50:05 /home/andrea/ano…File to restore? [0..2]:

1212Saturday, March 24, 12

@andreafrancia #trash-cli

$ empty-trash

1313Saturday, March 24, 12

@andreafrancia #trash-cli14

XFCE

Gnome

KDE

14Saturday, March 24, 12

@andreafrancia #trash-cli

Generic Naming Issue

1515Saturday, March 24, 12

@andreafrancia #trash-cli

Protagonisti

1616Saturday, March 24, 12

@andreafrancia #trash-cli

I nomi dei comandi

$ trash

$ list-trash

$ empty-trash

$ restore-trash

1717Saturday, March 24, 12

@andreafrancia #trash-cli

Come funziona Fedora

1818Saturday, March 24, 12

@andreafrancia #trash-cli19

Un revisoredi Fedora

19Saturday, March 24, 12

@andreafrancia #trash-cli

Distribuzioni

Come funzionano?

2020Saturday, March 24, 12

@andreafrancia #trash-cli

Distribuzioni

Come funzionano?

2121Saturday, March 24, 12

@andreafrancia #trash-cli

2X Absolute AbulÉdu AgiliaLinux Alinex aLinux Alpine ALT Ankur Bangla AnNyung antiX APODIO aptosid Arch ArchBang ArcheOS AriOS Ark ArtistX Asianux Astaro AsteriskNOW Asturix Aurora AUSTRUMI AV Linux BackBox BackTrack Baltix Bardinux Bayanihan BeakOS Berry BigLinux Bio-Linux blackPanther BLAG BlankOn Bodhi BOSS BRLix Burapha CAELinux CAINE Caixa Mágica Calculate Canaima Caos Càtix CCux CDlinux CensorNet CentOS Chakra ClearOS Clonezilla Comfusion Commodore Connochaet Coyote CrunchBang CRUX CTKArch Debian DebXPde Deepin DEFT DesktopBSD Devil DigAnTel DoudouLinux Draco DragonFly Dragora Dreamlinux Dream Studio dyne:bolic EasyPeasy Edubuntu Ekaaty Elastix elementary Endian Epidemic Estrella Roja ESUN Evinux ExTiX Fedora Fermi Finnix Foresight FreeBSD FreeNAS Frenzy Frugalware Fuduntu FuguIta Funtoo Fusion GeeXboX Gentoo Gentoox GhostBSD Gibraltar GnackTrack GParted Greenie Grml Guadalinex Hacao Haiku Hanthana Helix IDMS Imagineos Inquisitor Insigne IPCop IPFire Jibbed JoLinux Joli OS K12Linux kademar KahelOS KANOTIX Karoshi Kiwi Knoppel KNOPPIX KnoSciences Kongoni Kororaa Kubuntu Kwort Leeenux Legacy LFS LinHES Linpus LinuxConsole Linux-EduCD linuX-gamers LinuxTLE Linvo Liquid Lemur Litrix LliureX LPS Lubuntu Lunar m0n0wall Macpup Madbox Mageia Magic Mandriva Mangaka Matriux MAX MEPIS MidnightBSD MiniNo MINIX Mint Miracle MirOS MoLinux Momonga Monomaxos moonOS Musix Myrinix Mythbuntu Nature's NetBSD Netrunner NetSecL Nexenta NexentaStor NST NuTyX Ojuba OLPC Omoikane O-Net OpenBSD Openfiler OpenIndiana openmamba OpenMediaVault openSUSE Openwall Open Xange Ophcrack Oracle Otakux Overclockix PAIPIX paldo PapugLinux Parabola Pardus Parsix Parted Magic PC-BSD PCLinuxOS Pear PelicanHPC Pentoo Peppermint pfSense Phayoune Pinguy Plamo PLD Plop Porteus Poseidon pQui Privatix Proxmox PUIAS Puppy Puredyne PureOS Qimo Qomo Quirky Red Flag Red Hat Redo redWall Resulinux RIPLinuX Rocks Cluster ROSA Runtu Sabayon Sabily SalineOS Salix SAMity Satux SchilliX Scientific Securepoint Semplice siduction Skolelinux Slackware SliTaz SME Server SmoothWall SMS Snowlinux SoL Solaris Sorcerer Source Mage STD StressLinux SuliX SuperGamer Super OS SuperX Suriyan SUSE Swift Syllable SystemRescue T2 Tails Tango Studio TFM Thinstation Tiny Core TinyMe Toorox Toutou Trinity Trisquel trixbox Tuquito Turbolinux TurnKey UberStudent Ubuntu Ubuntu DP Ubuntu Rescue Ubuntu Studio UHU-Linux Ulteo Ultimate Unity Untangle UPR Userful UTUTO Vector VENENUX Vine Vinux VLOS VMKnoppix VortexBox Vyatta wattOS Webconverger Wifislax xPUD Xubuntu Yellow Dog Ylmf Yoper Zentyal Zenwalk Zeroshell ZevenOS Zorin

22of http://distrowatch.com/From

22Saturday, March 24, 12

@andreafrancia #trash-cli

2X Absolute AbulÉdu AgiliaLinux Alinex aLinux Alpine ALT Ankur Bangla AnNyung antiX APODIO aptosid Arch ArchBang ArcheOS AriOS Ark ArtistX Asianux Astaro AsteriskNOW Asturix Aurora AUSTRUMI AV Linux BackBox BackTrack Baltix Bardinux Bayanihan BeakOS Berry BigLinux Bio-Linux blackPanther BLAG BlankOn Bodhi BOSS BRLix Burapha CAELinux CAINE Caixa Mágica Calculate Canaima Caos Càtix CCux CDlinux CensorNet CentOS Chakra ClearOS Clonezilla Comfusion Commodore Connochaet Coyote CrunchBang CRUX CTKArch Debian DebXPde Deepin DEFT DesktopBSD Devil DigAnTel DoudouLinux Draco DragonFly Dragora Dreamlinux Dream Studio dyne:bolic EasyPeasy Edubuntu Ekaaty Elastix elementary Endian Epidemic Estrella Roja ESUN Evinux ExTiX Fedora Fermi Finnix Foresight FreeBSD FreeNAS Frenzy Frugalware Fuduntu FuguIta Funtoo Fusion GeeXboX Gentoo Gentoox GhostBSD Gibraltar GnackTrack GParted Greenie Grml Guadalinex Hacao Haiku Hanthana Helix IDMS Imagineos Inquisitor Insigne IPCop IPFire Jibbed JoLinux Joli OS K12Linux kademar KahelOS KANOTIX Karoshi Kiwi Knoppel KNOPPIX KnoSciences Kongoni Kororaa Kubuntu Kwort Leeenux Legacy LFS LinHES Linpus LinuxConsole Linux-EduCD linuX-gamers LinuxTLE Linvo Liquid Lemur Litrix LliureX LPS Lubuntu Lunar m0n0wall Macpup Madbox Mageia Magic Mandriva Mangaka Matriux MAX MEPIS MidnightBSD MiniNo MINIX Mint Miracle MirOS MoLinux Momonga Monomaxos moonOS Musix Myrinix Mythbuntu Nature's NetBSD Netrunner NetSecL Nexenta NexentaStor NST NuTyX Ojuba OLPC Omoikane O-Net OpenBSD Openfiler OpenIndiana openmamba OpenMediaVault openSUSE Openwall Open Xange Ophcrack Oracle Otakux Overclockix PAIPIX paldo PapugLinux Parabola Pardus Parsix Parted Magic PC-BSD PCLinuxOS Pear PelicanHPC Pentoo Peppermint pfSense Phayoune Pinguy Plamo PLD Plop Porteus Poseidon pQui Privatix Proxmox PUIAS Puppy Puredyne PureOS Qimo Qomo Quirky Red Flag Red Hat Redo redWall Resulinux RIPLinuX Rocks Cluster ROSA Runtu Sabayon Sabily SalineOS Salix SAMity Satux SchilliX Scientific Securepoint Semplice siduction Skolelinux Slackware SliTaz SME Server SmoothWall SMS Snowlinux SoL Solaris Sorcerer Source Mage STD StressLinux SuliX SuperGamer Super OS SuperX Suriyan SUSE Swift Syllable SystemRescue T2 Tails Tango Studio TFM Thinstation Tiny Core TinyMe Toorox Toutou Trinity Trisquel trixbox Tuquito Turbolinux TurnKey UberStudent Ubuntu Ubuntu DP Ubuntu Rescue Ubuntu Studio UHU-Linux Ulteo Ultimate Unity Untangle UPR Userful UTUTO Vector VENENUX Vine Vinux VLOS VMKnoppix VortexBox Vyatta wattOS Webconverger Wifislax xPUD Xubuntu Yellow Dog Ylmf Yoper Zentyal Zenwalk Zeroshell ZevenOS Zorin

23on http://distrowatch.com/See

23Saturday, March 24, 12

@andreafrancia #trash-cli

Fedora

24

Debian

24Saturday, March 24, 12

@andreafrancia #trash-cli

Debian

2525Saturday, March 24, 12

@andreafrancia #trash-cli2626Saturday, March 24, 12

@andreafrancia #trash-cli2727Saturday, March 24, 12

@andreafrancia #trash-cli2828Saturday, March 24, 12

@andreafrancia #trash-cli

Fedora

2929Saturday, March 24, 12

@andreafrancia #trash-cli

Fedora

3030Saturday, March 24, 12

@andreafrancia #trash-cli

Nota

A quei tempi il progetto si chiamava solo “trash” (come il comando)

3131Saturday, March 24, 12

“”

@andreafrancia #trash-cli

ReviewerThe name of this package is also a bit too generic, though not that much.

3232Saturday, March 24, 12

“”

@andreafrancia #trash-cli

DeveloperOk I’ll change to trash-cli.

3434Saturday, March 24, 12

“”

@andreafrancia #trash-cli

DeveloperThe name of the main command is 'trash' without "-cli".

3636Saturday, March 24, 12

“”

@andreafrancia #trash-cli

DeveloperThe command is used is this way:

$ trash this-fileThat means: "trash this-file in the trashcan", there is no reason to append the"-cli" suffix to the main command.

3737Saturday, March 24, 12

“”

@andreafrancia #trash-cli

Developer

You are already using the Command Line Interface.

3838Saturday, March 24, 12

“”

@andreafrancia #trash-cli

DeveloperIn my opinion each command name should reflect what the command does.

3939Saturday, March 24, 12

“”

@andreafrancia #trash-cli

Reviewer

As far as possible.

4040Saturday, March 24, 12

“”

@andreafrancia #trash-cli

Developer (and others)There are other programs with generic names already included!!

4141Saturday, March 24, 12

@andreafrancia #trash-cli

samba-common

netprofilesrpcclienttestparm

4242Saturday, March 24, 12

@andreafrancia #trash-cli

Postgresql

createdbcreatelangcreateuserdropdb

droplangdropuser

4343Saturday, March 24, 12

@andreafrancia #trash-cli

$ repoquery -f /usr/bin/playerplayer-0:2.1.1-5.fc10.i386

44

The Player ProjectFree Software tools for robot and sensor applications

44Saturday, March 24, 12

@andreafrancia #trash-cli

... after some months and discussions ...

4646Saturday, March 24, 12

“”

@andreafrancia #trash-cli

Developer

.... OK

4747Saturday, March 24, 12

@andreafrancia #trash-cli

Command names changed

trashlist-trashrestore-trashempty-trash

trash-put

4848Saturday, March 24, 12

@andreafrancia #trash-cli

Command names changed

trashlist-trashrestore-trashempty-trash

trash-puttrash-listtrash-restoretrash-empty

4949Saturday, March 24, 12

@andreafrancia #trash-cli

Results

Debian --> vecchi nomiUpstream --> nomi nuovi

5050Saturday, March 24, 12

@andreafrancia #trash-cli

Adesso ... lo includono?

5151Saturday, March 24, 12

@andreafrancia #trash-cli

No!

5252Saturday, March 24, 12

@andreafrancia #trash-cli

Il packager s’era stufato!

5353Saturday, March 24, 12

@andreafrancia #trash-cli

Results

Debian --> vecchi nomiUpstream --> nomi nuoviFedora --> niente!

5454Saturday, March 24, 12

@andreafrancia #trash-cli

La beffa ...

5555Saturday, March 24, 12

@andreafrancia #trash-cli

Dopo qualche mese ...

5656Saturday, March 24, 12

@andreafrancia #trash-cli

... un altro packager...

5757Saturday, March 24, 12

@andreafrancia #trash-cli

... ri-propone trash-cli (con i vecchi nomi),

e ...

5858Saturday, March 24, 12

@andreafrancia #trash-cli

... un altro revisore ...

5959Saturday, March 24, 12

@andreafrancia #trash-cli

... Accetta!

6060Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons Learned

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

More at: https://github.com/andreafrancia/trash-cli/blob/master/docs/about-the-generic-naming-issue.txt

6161Saturday, March 24, 12

@andreafrancia #trash-cli

Acceptance Tests

6262Saturday, March 24, 12

@andreafrancia #trash-cli

Acceptance Test

È un test che verifica una feature.

6363Saturday, March 24, 12

@andreafrancia #trash-cli

Developer TestÈ un test che serve allo sviluppatore.

6464Saturday, March 24, 12

@andreafrancia #trash-cli

Usi dei Developer Testvalidare il codicesupporto al design (con TDD)rilevare regressioniimparare una libreriadocumentare l’uso di una libreria....

6565Saturday, March 24, 12

@andreafrancia #trash-cli

Developer Tests

A volte sono chiamati: Unit Tests

6666Saturday, March 24, 12

@andreafrancia #trash-cli6767Saturday, March 24, 12

@andreafrancia #trash-cli

Come ho affrontato il problema

6868Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

Avere i test é bello...

6969Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

Come li scrivo?

7070Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

Developer Test --> in python

7171Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

Acceptance Test --> ?????

7272Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

devo testare a livello utente

7373Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

l’utente usa la Bash

7474Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

gli script in Bash sono facili

7575Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

esiste già un framework di test per Bash

7676Saturday, March 24, 12

@andreafrancia #trash-cli

shunit

7777Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

IDEA:li scrivo in Bash!

7878Saturday, March 24, 12

@andreafrancia #trash-cli

Era un buona idea?

7979Saturday, March 24, 12

@andreafrancia #trash-cli8080Saturday, March 24, 12

@andreafrancia #trash-cli

Risultati

8181Saturday, March 24, 12

@andreafrancia #trash-cli

Bash Tests are slooow!

8282Saturday, March 24, 12

@andreafrancia #trash-cli

Little information in failure messages

8383Saturday, March 24, 12

@andreafrancia #trash-cli

Complex set-up

8484Saturday, March 24, 12

@andreafrancia #trash-cli

Complex test set-up (1)

85

•$PATH tricks

85Saturday, March 24, 12

@andreafrancia #trash-cli

Complex test set-up (2)

86

•Test volume creation

86Saturday, March 24, 12

@andreafrancia #trash-cli

Two test suites

accetance test (in bash)developer test (python)

8787Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons Learned

8888Saturday, March 24, 12

@andreafrancia #trash-cli89

Test

Se sono lenti Allora non li usi

89Saturday, March 24, 12

@andreafrancia #trash-cli90

Test

Seallora non li usi

90Saturday, March 24, 12

@andreafrancia #trash-cli91

Test

SeAllora li usi

91Saturday, March 24, 12

@andreafrancia #trash-cli

Quindi

92

Meglio se tutti omogenei (e.g. tutto

python)

92Saturday, March 24, 12

@andreafrancia #trash-cli

Bash Tests?Ok, ma pochi.

9393Saturday, March 24, 12

@andreafrancia #trash-cli

shUnit non serve a niente

94

Si può fare tutto in bash

94Saturday, March 24, 12

@andreafrancia #trash-cli

Testing with Bash

9595Saturday, March 24, 12

@andreafrancia #trash-cli

#!/bin/bashset,-o,errexit

9696Saturday, March 24, 12

@andreafrancia #trash-cli

#!/bin/bashset,-o,errexit,set,-o,nounset

9797Saturday, March 24, 12

@andreafrancia #trash-cli

#!/bin/bashset,-o,errexitset,-o,nounset

#,given,a,file,named,footouch,foo

#,when,I,put,the,file,in,the,trashtrash-put,foo

#,then,the,file,should,have,been,gonetest,!,-f,foo

it_should_delete_the_argument.bash

9898Saturday, March 24, 12

@andreafrancia #trash-cli

Checking output of a command

#,comparing,output,of,a,command

diff,<(trash-list),-,<<,EXPECTED_OUTPUT2012-03-02,19:43:44,/Users/andrea/foo2012-03-02,19:44:04,/Users/andrea/fooEXPECTED_OUTPUT

9999Saturday, March 24, 12

@andreafrancia #trash-cli

Licenza

100100Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

Quale licenza?

101101Saturday, March 24, 12

“ ”@andreafrancia #trash-cli

GPL

102102Saturday, March 24, 12

@andreafrancia #trash-cli

GPL v2+

103

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.

103Saturday, March 24, 12

@andreafrancia #trash-cli104

or (at your option) any later version.

104Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons Learned

105105Saturday, March 24, 12

@andreafrancia #trash-cli

Licenze già fatte?

106

Comode ma vanno capite.

106Saturday, March 24, 12

@andreafrancia #trash-cli

Il papiro all’inizio del file é una rottura

107107Saturday, March 24, 12

@andreafrancia #trash-cli

#!/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)

Papiro della GPL

108108Saturday, March 24, 12

@andreafrancia #trash-cli

Esistono licenze più semplici!

109109Saturday, March 24, 12

@andreafrancia #trash-cli

            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/110

110Saturday, March 24, 12

@andreafrancia #trash-cli

Code Hosting Services

111111Saturday, March 24, 12

@andreafrancia #trash-cli

sourceforge.net

112112Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons Learned

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importante

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrier

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net google code

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net google code

bitbucket

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net google code

bitbucket

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net google code GitHub

bitbucket

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Lessons LearnedIl servizo di release é importanteFeedback barrierSi può sempre cambiare

sf.net google code GitHub

bitbucket

?

113113Saturday, March 24, 12

@andreafrancia #trash-cli

Una scelta azzeccata: Python

114114Saturday, March 24, 12

@andreafrancia #trash-cli

Internals : TrashDir

115115Saturday, March 24, 12

@andreafrancia #trash-cli116

TrashDir: dove sono nascosti i file cestinati

116Saturday, March 24, 12

@andreafrancia #trash-cli

How it works

117117Saturday, March 24, 12

@andreafrancia #trash-cli

KDE Gnome

trash-cli XFCE

TrashDir

118118Saturday, March 24, 12

@andreafrancia #trash-cli

How it works

~/.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

$,trash-put,pippo.txt

119119Saturday, March 24, 12

@andreafrancia #trash-cli

How it works

~/.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,,,,,,,,,,

$,touch,pippo.txt;,trash-put,pippo.txt,,,,,#,again$,touch,pippo.txt;,trash-put,pippo.txt,,,,,#,again$,touch,pippo.txt;,trash-put,pippo.txt,,,,,#,again

120120Saturday, March 24, 12

@andreafrancia #trash-cli

KDE Gnome

cliXFCE

TrashDir

121121Saturday, March 24, 12

@andreafrancia #trash-cli122122Saturday, March 24, 12

@andreafrancia #trash-cli

pippo.txtpippo.txt

123123Saturday, March 24, 12

@andreafrancia #trash-cli

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

124124Saturday, March 24, 12

@andreafrancia #trash-cli

os.openimport,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)

125125Saturday, March 24, 12

@andreafrancia #trash-cli

Conclusioni

126126Saturday, March 24, 12

@andreafrancia #trash-cli

Come lo farei ora?

127127Saturday, March 24, 12

@andreafrancia #trash-cli

Beer/Pizza License

128128Saturday, March 24, 12

@andreafrancia #trash-cli

Git

129129Saturday, March 24, 12

@andreafrancia #trash-cli

GitHub

130130Saturday, March 24, 12

@andreafrancia #trash-cli

No Wiki, solo .txt nei i sorgenti

131131Saturday, March 24, 12

@andreafrancia #trash-cli

No mailing list.

132132Saturday, March 24, 12

@andreafrancia #trash-cli

Nessuno sforzo per l’inclusione in distribuzioni

133133Saturday, March 24, 12

@andreafrancia #trash-cli

Ma qualcuno lo usa?

134134Saturday, March 24, 12

@andreafrancia #trash-cli

Distribuzioni

135

Debian (e Ubuntu)FedoraArch LinuxForesight LinuxOpenSuse... forse altri

135Saturday, March 24, 12

@andreafrancia #trash-cli

Altri progetti

136

LXDE usa trash-cli come libreria

(*) LXDE: Lightweight X11 Desktop Environment

136Saturday, March 24, 12

@andreafrancia #trash-cli137

http://qa.debian.org/popcon-graph.php?packages=trash-cli

137Saturday, March 24, 12

@andreafrancia #trash-cli

Grazie

138

Andrea Franciahttp://andreafrancia.it

andrea@andreafrancia.it

139138Saturday, March 24, 12

@andreafrancia #trash-cli

Grazie

139

Andrea Franciahttp://andreafrancia.it

andrea@andreafrancia.it

Libero da settembre 2012

139139Saturday, March 24, 12