[Bps-public-commit] r11708 - in Prophet/trunk: . talks/2008
jesse at bestpractical.com
jesse at bestpractical.com
Sat Apr 12 15:14:43 EDT 2008
Author: jesse
Date: Sat Apr 12 15:14:30 2008
New Revision: 11708
Added:
Prophet/trunk/talks/
Prophet/trunk/talks/2008/
Prophet/trunk/talks/2008/osdc.tw.txt
Prophet/trunk/talks/2008/present-slides
Modified:
Prophet/trunk/ (props changed)
Log:
r29632 at 98: jesse | 2008-04-12 15:12:12 -0400
* Starting to sketch osdc slides
Added: Prophet/trunk/talks/2008/osdc.tw.txt
==============================================================================
--- (empty file)
+++ Prophet/trunk/talks/2008/osdc.tw.txt Sat Apr 12 15:14:30 2008
@@ -0,0 +1,145 @@
+Step 3: Prophet
+---
+ A semirelational,
+ peer to peer replicated,
+ disconnected,
+ versioned,
+ property database with
+ self-healing conflict
+ resolution
+----
+WHAT ARE ALL THOSE BUZZWORDS?
+----
+semirelational
+----
+* Joins are expensive
+* Joins are discouraged
+----
+peer-to-peer replicated
+----
+* Update any replica
+* Pull from any replica
+* Push _to_ any replica
+* Changes will propagate
+----
+disconnected
+----
+* Real-time replication is hard to scale
+* Real-time replication only works in the cloud
+* I don't live in the cloud
+ (Except when I go hiking)
+* I want my data when I'm offline
+* Prophet works offline.
+* Prophet sync isn't time-constrained
+----
+versioned
+----
+* Compare a record to any point in the past
+* Full changelog
+* Undo changes
+* Use history to be smart
+----
+property database
+----
+* Records can have validation and canonicalization
+* Records do not NEED canonicalization and validation
+* Records of the same type do not need to have the same properties
+* Add and remove 'columns' at will
+----
+self-healing conflict resolution
+----
+* Prophet remembers all conflict resolutions
+* Prophet can detect identical conflicts
+* Prophet can use your peers' resolutions as 'votes' for the winner in a conflict
+----
+HOW DID WE GET HERE?
+----
+* INSERT WEB 2.0 IS SCARY RANT
+----
+WHERE IS HERE, ANYWAY?
+----
+HAVE YOU BUILT ANYTHING WITH IT?
+----
+sd
+----
+A bug tracker: 'simple defects'
+----
+ ./bin/sd ticket create --summary "Can't sync sd with Google Code" --status new
+ Created ticket 93BF979E-08C1-11DD-94C3-D4B1FCEE7EC4
+----
+ ./bin/sd ticket search --regex .
+ 93BF979E-08C1-11DD-94C3-D4B1FCEE7EC4 Can't sync sd with Google Code new
+----
+ ./bin/sd ticket update --uuid 93BF979E-08C1-11DD-94C3-D4B1FCEE7EC4 --status resolved
+----
+ ./bin/sd ticket search --regex .
+ 93BF979E-08C1-11DD-94C3-D4B1FCEE7EC4 Can't sync sd with Google Code resolved
+----
+ Bugs on my laptop alone isn't interesting.
+----
+Syncable!
+----
+ ./bin/sd publish /tmp/mybugs
+ scp -rvp /tmp/mybugs myserver.com:public_html/sd_replica
+----
+ Bob:
+ ./bin/sd pull prophet:http://myserver.com/~clkao/sd_replica
+----
+Same thing over svn protocol
+(svn also supports push)
+----
+"My project uses another bug tracker!"
+----
+Actually, mine use two:
+RT and Hiveminder.com
+----
+Wrote an RT Replica type for SD in an afternoon.
+(Using only the public REST API)
+----
+Mirror an RT instance into SD
+----
+Share it with your peers using prophet
+----
+Sync changes back from your peers to RT
+----
+Wrote the same thing for Hiveminder
+(Using only the public REST API)
+----
+Now I can sync with RT or Hiveminder
+----
+Now, I can sync BETWEEN RT *AND* Hiveminder
+----
+(Or two RTs)
+----
+We need more replica definitions:
+----
+Trac
+----
+Google Code
+----
+SourceForge
+----
+Bugzilla
+----
+Jira
+----
+GForge
+----
+debbugs
+----
+What else?
+----
+WHAT CAN I DO WITH PROPHET?
+----
+HOW DOES IT SCALE?
+----
+WHAT ARE YOUR PLANS?
+----
+(AKA: What sucks about Prophet?)
+----
+WHERE DO I GET A COPY?
+----
+CAN I HELP?
+----
+HOW CAN I HELP?
+
Added: Prophet/trunk/talks/2008/present-slides
==============================================================================
--- (empty file)
+++ Prophet/trunk/talks/2008/present-slides Sat Apr 12 15:14:30 2008
@@ -0,0 +1,139 @@
+#!/usr/bin/env perl
+
+use warnings;
+use strict;
+use Term::ANSIScreen qw/:color :cursor :screen :keyboard/;
+use Term::ReadKey;
+use Text::Autoformat;
+our @SLIDES;
+
+load_slides();
+my $counter = 0;
+my $slides_played = {};
+ my $title;
+
+open(my $next_slide, ">/tmp/next_slide");
+select($next_slide);
+$| = 1;
+select(STDOUT);
+
+my $cmd = q{ osascript -e ' tell application "Terminal"' -e ' do script " tail -f /tmp/next_slide"' -e 'end tell' };
+system($cmd);
+while ( $counter <= $#SLIDES ) {
+ my $translation = '';
+
+ my $mode = 'text';
+ my ( $cols, $rows, undef, undef ) = GetTerminalSize();
+ my $slide = $SLIDES[$counter];
+
+ print $next_slide Term::ANSIScreen::cls;
+ print $next_slide locate(1,1);
+ print $next_slide colored("Time: ".scalar localtime() ."\n", 'blue');
+ print $next_slide colored("Back 1\n", 'red');
+ print $next_slide $SLIDES[$counter-1] ."\n\n";
+ print $next_slide colored("This slide, $counter/".$#SLIDES."\n", 'blue');
+ print $next_slide $SLIDES[$counter] ."\n\n";
+ print $next_slide colored("Next slide\n", 'red');
+ print $next_slide $SLIDES[$counter+1];
+ print $next_slide "\n";
+
+ my $console = Term::ANSIScreen->new;
+ $console->Cls;
+ $console->Cursor(1,1);
+
+ # comments
+ $slide =~ s/^### .*$//gm;
+
+ if ( $slide =~ s/^#\s*title\s*?(.*?)$//gm ) {
+ $title = $1;
+ }
+ if ($title) {
+ my $start = int ( ( $cols / 2 ) - ( length($title) / 2 ) );
+ $console->Cursor($start,0);
+ chomp $title;
+ print "$title\n";
+ }
+
+ if ($slide =~ s/#\s*loc-ja\s*(.*?)$//sm) {
+ $translation = $1;
+ }
+ if ($slide =~ s/#\s*`(.*?)`//m) {
+ my $cmd = $1;
+ if(!$slides_played->{$counter}) {
+ `$cmd>/dev/null 2>/dev/null &`;
+ $slides_played->{$counter}++}
+ }
+
+ if ( $slide =~ s/#\s*mode\s*(\S+)\s*$//gms ) {
+ $mode = $1;
+ }
+
+ if ( $mode eq 'text' and $slide ) {
+ $slide = autoformat $slide, { left => 2, right => ($cols-1), all => 1 };
+ }
+ else {
+ $slide =~ s/^/ /gsm;
+ my $tidycols = $cols - 2; # squeeze for display
+ open my $out , ">/tmp/output.$$" || die $!;
+ print $out $slide || die $!;
+ close $out || die $!;
+ $slide = ` cat /tmp/output.$$ | source-highlight -s $mode -f esc`;
+ #$slide = ` cat /tmp/output.$$ | perltidy -q -l $tidycols| source-highlight -s perl -f esc`;
+ }
+
+ if ( $slide =~ /(\S+)\s*\n\s*(\S+)/m ) {
+ my $lines = ($slide =~ tr/\n//);
+ $console->Cursor(0, int(($rows/2)-($lines/2))-1);
+ print $slide;
+ } else {
+ chomp $slide;
+ $slide =~ s/(?:\n|\r)//g;
+ my $left = int ( ( $cols / 2 ) - ( length($slide) / 2 ) );
+ if ($left < 0 ){
+ $left = 0;
+ }
+ $console->Cursor( $left, int($rows/2)-1, );
+ print colored($slide." \n",'bold blue on white');
+ }
+
+
+ $console->Cursor( 0, ( $rows - 1 ) );
+ print colored("$counter/" . $#SLIDES, "bold white");
+ if ($translation) {
+ my $start = int ( ( $cols / 2 ) - ( length($translation) / 2 ) );
+ $console->Cursor( $start , ( $rows - 1 ) );
+ print colored($translation, "bold yellow on black");
+ }
+ ReadMode 4;
+ my $key = ReadKey(0);
+ ReadMode 0;
+ if ( $key eq 'q' ) {
+ exit;
+ }
+ if ( $key =~ /^(?: |\n|n)/ ) {
+ $counter++;
+ } elsif ( $key eq 'e' ) {
+ system($ENV{EDITOR}||"vim", $ARGV[0]);
+ load_slides();
+ next;
+ } elsif ( $key eq 'r' ) {
+ load_slides();
+ next;
+
+ } else {
+ $counter--;
+ if ( $counter < 0 ) {
+ $counter = 0;
+ }
+ }
+}
+
+sub load_slides {
+my $file = $ARGV[0] || die "usage: $0 name_of_slides.txt\n";
+my $handle;
+open( $handle, "<$file" ) || die $!;
+
+my $datadata = join( '', <$handle> );
+
+ @SLIDES = split( /^----?\s*$/mi, $datadata );
+}
More information about the Bps-public-commit
mailing list