sd - a peer to peer issue tracking system

223
P2P Bug Tracking with SD http://syncwith.us [email protected] Jesse Vincent curl fsck.com/sd|perl; export PATH=~/sd/bin:$PATH; sd

Upload: jesse-vincent

Post on 17-May-2015

4.026 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: SD - A peer to peer issue tracking system

P2P Bug Tracking with SD http://syncwith.us

[email protected]

Jesse Vincent

curl fsck.com/sd|perl; export PATH=~/sd/bin:$PATH;sd

Page 2: SD - A peer to peer issue tracking system

Hi!

Page 3: SD - A peer to peer issue tracking system

I’m Jesse (obra)

Page 4: SD - A peer to peer issue tracking system

I own a small software company

Page 5: SD - A peer to peer issue tracking system

(Best Practical)

Page 6: SD - A peer to peer issue tracking system

I’ve been making issue trackers since 1995

Page 7: SD - A peer to peer issue tracking system

Our softwarehas some bugs

Page 8: SD - A peer to peer issue tracking system

All softwarehas some bugs

Page 9: SD - A peer to peer issue tracking system

(All software is made of bugs)

Page 10: SD - A peer to peer issue tracking system

I spend a lot of timeon airplanes...

Page 11: SD - A peer to peer issue tracking system

...and at conferences with bad wifi

Page 12: SD - A peer to peer issue tracking system

I need to keep track of our bugs and our work

Page 13: SD - A peer to peer issue tracking system

I’m the boss

Page 14: SD - A peer to peer issue tracking system

I have no excuse for not doing my work

Page 15: SD - A peer to peer issue tracking system

I need to keep track of our bugs and our work even when I don’t have

Internet access

Page 16: SD - A peer to peer issue tracking system

I’ve tried everything

Page 17: SD - A peer to peer issue tracking system

Text files

Page 18: SD - A peer to peer issue tracking system

Text files inversion control

Page 19: SD - A peer to peer issue tracking system

IMAP Servers

Page 20: SD - A peer to peer issue tracking system

RSS Feeds

Page 21: SD - A peer to peer issue tracking system

Running RT onmy laptop

Page 22: SD - A peer to peer issue tracking system

Keeping browsers open

Page 23: SD - A peer to peer issue tracking system

Nothing was quite right

Page 24: SD - A peer to peer issue tracking system

So we built SD

Page 25: SD - A peer to peer issue tracking system

SD is a Bug Tracker

Page 26: SD - A peer to peer issue tracking system

SD is a DistributedBug Tracker

Page 27: SD - A peer to peer issue tracking system

SD Features

Tracks bugsCLIWeb UIScriptableWorks offlineAttachmentsCommentsCustomizable workflowCustom properties

P2P SyncTrac SyncRT SyncHiveminder SyncGitHub SyncGoogle Code SyncConflict ResolutionGit integrationDarcs integration

Page 28: SD - A peer to peer issue tracking system

Principles of distributed computing

Page 29: SD - A peer to peer issue tracking system

The network is reliable

Page 30: SD - A peer to peer issue tracking system

Latency is zero

Page 31: SD - A peer to peer issue tracking system

Bandwidth is infinite

Page 32: SD - A peer to peer issue tracking system

The network is secure

Page 33: SD - A peer to peer issue tracking system

Transport cost is zero

Page 34: SD - A peer to peer issue tracking system

The network is homogeneous

Page 35: SD - A peer to peer issue tracking system

Topology doesn't change

Page 36: SD - A peer to peer issue tracking system

There is one administrator

Page 37: SD - A peer to peer issue tracking system

Principles of distributed computing

Page 38: SD - A peer to peer issue tracking system

Principles of distributed computingFallacies

Page 39: SD - A peer to peer issue tracking system

Those are all LIES

Page 40: SD - A peer to peer issue tracking system

The network is not reliable

Page 41: SD - A peer to peer issue tracking system

SD isn’t network-dependent

Page 42: SD - A peer to peer issue tracking system

Latency hurts

Page 43: SD - A peer to peer issue tracking system

SD runs at the edge

Page 44: SD - A peer to peer issue tracking system

Bandwidth is always a problem

Page 45: SD - A peer to peer issue tracking system

SD knows which changesets you’ve already

seen

Page 46: SD - A peer to peer issue tracking system

The network is insecure

Page 47: SD - A peer to peer issue tracking system

SD doesn’t depend on a network security layer

Page 48: SD - A peer to peer issue tracking system

Topology is unpredictable

and fluid

Page 49: SD - A peer to peer issue tracking system

SD is topology-agnostic

Page 50: SD - A peer to peer issue tracking system

There is no administrator

Page 51: SD - A peer to peer issue tracking system

(But there are many people who think

they’re administrators)

Page 52: SD - A peer to peer issue tracking system

SD lets you implement policy in the centralized

systems it syncs to

Page 53: SD - A peer to peer issue tracking system

Transportcosts money

Page 54: SD - A peer to peer issue tracking system

SD doesn’t use much bandwidth & can use

non-network substrates

Page 55: SD - A peer to peer issue tracking system

The network is heterogeneous

Page 56: SD - A peer to peer issue tracking system

SD is designed to sync to foreign systems

Page 57: SD - A peer to peer issue tracking system

I didn’t make those up

Page 58: SD - A peer to peer issue tracking system

Bill Joy, Tom Lyon and James Gosling did

Page 59: SD - A peer to peer issue tracking system

They missed one

Page 60: SD - A peer to peer issue tracking system

Data is clean

Page 61: SD - A peer to peer issue tracking system

SD doesn’t expect to be able to enforce data

integrity rules

Page 62: SD - A peer to peer issue tracking system

SD runs locally

Page 63: SD - A peer to peer issue tracking system

SD plays wellwith others

Page 64: SD - A peer to peer issue tracking system

It syncs the way you do

Page 65: SD - A peer to peer issue tracking system

Clone a project’s bugdatabase (over HTTP)

Page 66: SD - A peer to peer issue tracking system

Work offline

Page 67: SD - A peer to peer issue tracking system

Pull changesets from anyone you work with

Page 68: SD - A peer to peer issue tracking system

Publish your database replica with rsync

Page 69: SD - A peer to peer issue tracking system

Topology doesn’t matter...

Page 70: SD - A peer to peer issue tracking system

Don’t worry

Page 71: SD - A peer to peer issue tracking system

It won’t break

Page 72: SD - A peer to peer issue tracking system

SD learns how to resolve each conflict...

Page 73: SD - A peer to peer issue tracking system

...based on how everyone else resolves it

Page 74: SD - A peer to peer issue tracking system

Using SD (CLI)

Page 75: SD - A peer to peer issue tracking system

Getting Started

Page 76: SD - A peer to peer issue tracking system

SD Shell

$ sd

Page 77: SD - A peer to peer issue tracking system

./

Page 78: SD - A peer to peer issue tracking system

Getting help

$ sd help

Page 79: SD - A peer to peer issue tracking system
Page 80: SD - A peer to peer issue tracking system

Creating a new project

$ sd init

Page 81: SD - A peer to peer issue tracking system
Page 82: SD - A peer to peer issue tracking system

Project settings

$ sd settings

Page 83: SD - A peer to peer issue tracking system
Page 84: SD - A peer to peer issue tracking system

Config file

$ sd config

Page 85: SD - A peer to peer issue tracking system
Page 86: SD - A peer to peer issue tracking system

Create a bug

$ sd ticket create

Page 87: SD - A peer to peer issue tracking system
Page 88: SD - A peer to peer issue tracking system

Listing bugs

$ sd ticket list

Page 89: SD - A peer to peer issue tracking system
Page 90: SD - A peer to peer issue tracking system
Page 91: SD - A peer to peer issue tracking system

Show a bug

$ sd ticket show

Page 92: SD - A peer to peer issue tracking system
Page 93: SD - A peer to peer issue tracking system

Update a bug

$ sd ticket update

Page 94: SD - A peer to peer issue tracking system
Page 95: SD - A peer to peer issue tracking system
Page 96: SD - A peer to peer issue tracking system
Page 97: SD - A peer to peer issue tracking system

Log

$ sd log

Page 98: SD - A peer to peer issue tracking system
Page 99: SD - A peer to peer issue tracking system
Page 100: SD - A peer to peer issue tracking system

Git Integration

$ git sd

Page 101: SD - A peer to peer issue tracking system
Page 102: SD - A peer to peer issue tracking system

Using SD (Web)

Page 103: SD - A peer to peer issue tracking system

Web? Isn’t SD anoffline tool?

Page 104: SD - A peer to peer issue tracking system

Local microserver

Page 105: SD - A peer to peer issue tracking system

$ sd browser

Page 106: SD - A peer to peer issue tracking system

Home

Page 107: SD - A peer to peer issue tracking system
Page 108: SD - A peer to peer issue tracking system

Create a ticket

Page 109: SD - A peer to peer issue tracking system
Page 110: SD - A peer to peer issue tracking system

Search

Page 111: SD - A peer to peer issue tracking system
Page 112: SD - A peer to peer issue tracking system

Show a bug

Page 113: SD - A peer to peer issue tracking system
Page 114: SD - A peer to peer issue tracking system

Update a bug

Page 115: SD - A peer to peer issue tracking system
Page 116: SD - A peer to peer issue tracking system

Comments

Page 117: SD - A peer to peer issue tracking system
Page 118: SD - A peer to peer issue tracking system

History

Page 119: SD - A peer to peer issue tracking system
Page 120: SD - A peer to peer issue tracking system

Working with others

Page 121: SD - A peer to peer issue tracking system

Working with others(Using SD)

Page 122: SD - A peer to peer issue tracking system

Any topology

Page 123: SD - A peer to peer issue tracking system

It doesn’t matter who you sync with

Page 124: SD - A peer to peer issue tracking system

You get all the updateseventually

Page 125: SD - A peer to peer issue tracking system

Cloning

$ sd clone

Page 126: SD - A peer to peer issue tracking system

clone makes a replica of someone else’s

database

Page 127: SD - A peer to peer issue tracking system
Page 128: SD - A peer to peer issue tracking system
Page 129: SD - A peer to peer issue tracking system

Pulling

$ sd pull

Page 130: SD - A peer to peer issue tracking system

pull imports unseen changes from another

database replica

Page 131: SD - A peer to peer issue tracking system
Page 132: SD - A peer to peer issue tracking system

Publishing

$ sd publish

Page 133: SD - A peer to peer issue tracking system

publish writes out a copy of your database

replica for sharing

Page 134: SD - A peer to peer issue tracking system

(As SD changesets and static HTML)

Page 135: SD - A peer to peer issue tracking system
Page 136: SD - A peer to peer issue tracking system

Hackathon mode(using Bonjour)

Page 137: SD - A peer to peer issue tracking system

Publish your replica

$ sd server

Page 138: SD - A peer to peer issue tracking system

Pull updates

$ sd pull --local

Page 139: SD - A peer to peer issue tracking system

Working with others(Using other systems)

Page 140: SD - A peer to peer issue tracking system

But you already have a bug tracker?

Page 141: SD - A peer to peer issue tracking system

No Problem!

Page 142: SD - A peer to peer issue tracking system

I use at leasttwo others.

Page 143: SD - A peer to peer issue tracking system

I wrote at leasttwo others.

Page 144: SD - A peer to peer issue tracking system

We designed SD talk to foreign bug trackers

Page 145: SD - A peer to peer issue tracking system

RT

Page 146: SD - A peer to peer issue tracking system

(RT::Client::REST)

Page 147: SD - A peer to peer issue tracking system

Hiveminder

Page 148: SD - A peer to peer issue tracking system

(Net::Jifty)

Page 149: SD - A peer to peer issue tracking system

Trac

Page 150: SD - A peer to peer issue tracking system

(Net::Trac)

Page 151: SD - A peer to peer issue tracking system

Google Code

Page 152: SD - A peer to peer issue tracking system

(Net::Google::Code)

Page 153: SD - A peer to peer issue tracking system

GitHub

Page 154: SD - A peer to peer issue tracking system

(Net::GitHub)

Page 155: SD - A peer to peer issue tracking system

Redmine(Read-only for now)

Page 156: SD - A peer to peer issue tracking system

(Net::Redmine)

Page 157: SD - A peer to peer issue tracking system

Want to help with Bugzilla, Jira, FogBugz or

something else?

Page 158: SD - A peer to peer issue tracking system

Work with foreign

replicas in a Star

Topology

Page 159: SD - A peer to peer issue tracking system

An SD node can act as a

gateway

X

Page 160: SD - A peer to peer issue tracking system

Clone

$ sd clone

Page 161: SD - A peer to peer issue tracking system

Clone from Google Code

$ sd clone --from gcode:k9mail

Page 162: SD - A peer to peer issue tracking system

Clone from RT

$ sd clone --from "rt:https://rt.cpan.org|DBI|"

Page 163: SD - A peer to peer issue tracking system

Clone from Trac

$ sd clone --from trac:https://trac.parrot.org/parrot

Page 164: SD - A peer to peer issue tracking system

Clone from GitHub

$ git sd clone --from github:miyagawa/remedie

Page 165: SD - A peer to peer issue tracking system

SD reverse engineers a database history

Page 166: SD - A peer to peer issue tracking system

Pull

$ sd pull

Page 167: SD - A peer to peer issue tracking system

SD reverse engineers a partial database history

Page 168: SD - A peer to peer issue tracking system

Push

$ sd push

Page 169: SD - A peer to peer issue tracking system

SD figures out local updates and sends

them upstream

Page 170: SD - A peer to peer issue tracking system

(Then it does a bunch of book-keeping)

Page 171: SD - A peer to peer issue tracking system

So what’s that all look like in the real world?

Page 172: SD - A peer to peer issue tracking system

Google Code Alice’s SD Bob’s SD

Create some bugs

clone --from gcode:k9mail Alice’s SD makes a full copy of the k9mail from google code

Someone updates ticket 12

ticket update 13

ticket create

pull --from k9mail SD integrates upstream changes from Google Code since Alice ran the ‘clone’ command.

push --to k9mail SD figures out what’s changed locally since the original ‘clone’ command. SD then sends any changes that Google Code hasn’t seen upstream as ticket updates. Alice’s new ticket and her updates to ticket 13 are now part of the upstream bug database in Google Code

publish --to alice.com:public_html/k9 SD exports a full copy of Alice’s bug database and rsyncs it up to alice.com/k9. Anyone browsing alice.com/k9 can clone her SD replica. (Or see it in static HTML)

clone --from http://alice.com/k9 Bob makes a full copy of Alice’s SD replica of the k9mail database. He’s now free to make changes to his local database replica.

ticket update 45

ticket create

ticket create

ticket update 45

publish --to bob.com:public_html/k9 Bob publishes his full K9 bug database. Anyone browsing bob.com/k9 can clone Bob’s K9 replica. Anyone who already has a copy of Alice or Bob’s database can incorporate Bob’s new ticket and his changes to ticket 45.

pull --from http://bob.com/k9 Alice’s SD pulls all previously unseen updates from Bob’s published database replica and incorporates them. If Bob's edits to ticket 45 didn't conflict, Alice's SD incorporate them. If they did conflict, Alice will be prompted to resolve the conflict.

push --to k9mail Alice publishes all updates her bug database has seen since she last sent updates to Google Code. Google Code now has all of Alice and Bob’s changes.

Page 173: SD - A peer to peer issue tracking system

Installing SD

Page 174: SD - A peer to peer issue tracking system

It’s time to get SD up and running

Page 175: SD - A peer to peer issue tracking system

SD is in Perl

Page 176: SD - A peer to peer issue tracking system

SD uses 45-90 CPAN modules

Page 177: SD - A peer to peer issue tracking system
Page 178: SD - A peer to peer issue tracking system

Are you afraid?

Page 179: SD - A peer to peer issue tracking system

Are you afraid?

Page 180: SD - A peer to peer issue tracking system

Don’t be

Page 181: SD - A peer to peer issue tracking system

I have a novel idea fora Perl application

Page 182: SD - A peer to peer issue tracking system

One-tweet install.

Page 183: SD - A peer to peer issue tracking system

I’m installing #SD (http://syncwith.us) after seeing @obra’s talk at #OSCON!

Page 184: SD - A peer to peer issue tracking system

80 bytes! I still have 60 to work with!

Page 185: SD - A peer to peer issue tracking system

I’m installing #SD (http://syncwith.us) after seeing @obra’s talk at #OSCON!

curl fsck.com/sd|perl; export PATH=~/sd/bin:$PATH; sd

Page 186: SD - A peer to peer issue tracking system

You’ll need:

curl, perl 5.8, C compiler

Page 187: SD - A peer to peer issue tracking system

You won’t need:

CPAN

Page 188: SD - A peer to peer issue tracking system

You won’t need:

to answer prompts

Page 189: SD - A peer to peer issue tracking system

You won’t need:

to fix dependencies

Page 190: SD - A peer to peer issue tracking system

SD is in Perl

Page 191: SD - A peer to peer issue tracking system

SD uses CPAN modules.

Page 192: SD - A peer to peer issue tracking system

This is a blessing.

Page 193: SD - A peer to peer issue tracking system

This is a curse.

Page 194: SD - A peer to peer issue tracking system

CPAN=

Dependency Hell

Page 195: SD - A peer to peer issue tracking system

When we first built SD, we used anything

we thought was useful.

Page 196: SD - A peer to peer issue tracking system

(The first version of SD used a SVN backend)

Page 197: SD - A peer to peer issue tracking system

The first ~useful version of SD:

Page 198: SD - A peer to peer issue tracking system
Page 199: SD - A peer to peer issue tracking system

123 Dependencies

Page 200: SD - A peer to peer issue tracking system

...a couple hours later

Page 201: SD - A peer to peer issue tracking system
Page 202: SD - A peer to peer issue tracking system

54 Dependencies

Page 203: SD - A peer to peer issue tracking system

Only one needs a compiler.

Page 204: SD - A peer to peer issue tracking system

Shipwright gives us one-command install

Page 205: SD - A peer to peer issue tracking system

curl fsck.com/sd|perl export PATH=$PATH:~/sd/bin

Page 206: SD - A peer to peer issue tracking system

What’s that do?

Page 207: SD - A peer to peer issue tracking system

curl

Page 208: SD - A peer to peer issue tracking system

perl

Page 209: SD - A peer to peer issue tracking system

$ head /Library/WebServer/Documents/sd

open (my $tar,'|tar xz 2>/dev/null');while (<DATA>) { print $tar $_; }close $tar;exec("cd sd-build; bin/shipwright-builder \ --install-base=$ENV{HOME}/sd");__DATA__?I?Isd-build.tar?<is?F???_1?䀌yH?"#ۿ${U???H?eH...

Page 210: SD - A peer to peer issue tracking system

Shipwright installs a few Perl modules...

Page 211: SD - A peer to peer issue tracking system
Page 212: SD - A peer to peer issue tracking system

...in order

Page 213: SD - A peer to peer issue tracking system

Scalar-List-UtilsString-BufferStackClass-AccessorClass-Data-InheritableTree-DAG_NodeTest-SimpleSub-UplevelTest-ExceptionArray-CompareTest-WarnTemplate-DeclareURIHTTP-Server-SimpleParams-UtilClass-InspectorFile-ShareDirDBIDBD-SQLiteHTML-TagsetHTML-ParserHTML-TreeCrypt-SSLeayJSONYAML-SyckJSON-XSJSON-DWIWJSON-AnyMouseAny-MooseCompress-Raw-ZlibCompress-Raw-Bzip2IO-Compresslibwww-perlHTTP-Response-EncodingWWW-Mechanize

WWW-Mechanize-GZipFile-SlurpTest-MockModuleNet-GitHubMIME-TypesClass-SingletonParams-ValidateversionExtUtils-CBuilderExtUtils-ParseXSTest-HarnessFile-TempModule-BuildDateTime-TimeZoneList-MoreUtilsDateTime-LocaleDateTimeFile-MMagicNet-Google-CodeTerm-ReadLine-PerlDigest-SHA1Digest-HMACNet-IPNet-DNSNet-BonjourTermReadKeyData-UUIDXML-Atom-SimpleFeedDigest-SHAExporter-LiteIPC-Run3MIME-Base64-URLSafeData-UUID-Base64URLSafeSub-InstallData-OptList

Sub-ExporterPath-DispatcherModule-PluggableTime-ProgressCarp-AssertProc-InvokeEditorTest-HTTP-Server-SimpleModule-RefreshCarp-Assert-MoreTest-LongStringTest-WWW-MechanizeTest-Script-Runprophet.gitDevel-StackTraceException-ClassErrorRT-Client-RESTEmail-AddressYAMLPath-ClassCloneHash-MergeUNIVERSAL-isaUNIVERSAL-canTest-MockObjectNet-JiftyLingua-EN-InflectText-CSVNet-TracbooleanTime-PieceTest-MockTimeDateTime-Format-Naturalsd.git

Page 214: SD - A peer to peer issue tracking system

(104 dists with our sync plugins)

Page 215: SD - A peer to peer issue tracking system

What’s wrong with SD?

Page 216: SD - A peer to peer issue tracking system

$ sd clone --from http://fsck.com/~jesse/sd-bugs

Page 217: SD - A peer to peer issue tracking system

Don’t want to install SD?

Page 218: SD - A peer to peer issue tracking system

Point your browser athttp://fsck.com/~jesse/sd-bugs/html

Page 219: SD - A peer to peer issue tracking system

What’s next?

Page 220: SD - A peer to peer issue tracking system

Indexing

Page 221: SD - A peer to peer issue tracking system

GPG-signed changesets

Page 222: SD - A peer to peer issue tracking system

Actually releasing 1.0

Page 223: SD - A peer to peer issue tracking system

Thanks!

Questions?

curl fsck.com/sd | perl

http://[email protected]