yes can you hear me okay we are on now

do I have a Jeremy do I have a clicker

do I have to go up here I have my own

clicker can i plug it in yes this is an

SQLite clicker module it is not just

your average clicker yeah no I can't I

can't talk without moving my arms right

I can't do that I'm already live

unfortunately I think we only have a

single USB port on this machine oh it's

just slow to respond thanks everybody

for coming my name is Richard yep okay

okay thank you for being here my name is

Richard yep this is a talk on yet and

why you shouldn't be using it in its

current form really this is going to be

a talk about what we can do to make get

better here the complete copy of the

slides and the original OpenOffice

format there if you want to download

them I'm getting a little bit of

feedback do I need to be somewhere else

do I need to stand on the stage maybe

it's buzzing don't worry about the

buzzing okay so this talk is about yet

now just to be upfront with you I am the

creator and premiere developer for a

competing version control system but I'm

not here to push my system this is about

because really they're both about ten

years old and get has clearly won mine

share everybody used to get raise your

hand if you are using it raise your hair

if you want to be using it raising here

in your hand if you want to be using if

you are using it but wish you were not

yes okay so it is the software that

everybody seems to love to hate and I'm

going to talk a little bit about what

some of its problems are and what we can

do to fix them now as I said I'm I'm

wrote I'm alright a competing system I'm

not pushing that today but my decade of

experience riding and maintaining the

system informs my criticism of yet

before we start gig before we get going

I have a collection of quotes about yet

and I'd love to collect these if you see

any letting you know I brought along a

few of my favorites here this is a

recent one from Benjamin

it is so amazingly simple to use that a

press a single publisher needs three

different books on how to use it it's so

simple that it's lycian and get her both

neat feel free to write through an

online tutorial to clarify the main get

tutorial on the actual get website it's

so transparent that developers routinely

tell me that the easiest way to learn

yet is to start with the file formats

and work up to the commands so here's I

love this one this was Jonathan Hartley

it's simplest to think of the state of

your git repository as a point in high

dimensional code space in which branches

are represented as the in dimensional

membranes mapping spatial loci of

successive commits on to the projected

manifold of each clone the repository

and if you understand what that means

you should probably be using it this is

from Nick Farina co-founder of Meridian

Murray this is a different Meridian from

the people who are right outside that

door showing this is a different company

but he wrote yet is not a Prius

yet is a Model T it's plumbing and

wiring to stick out all over the place

you have to be a mechanic to operate it

successfully or you'll be stuck on the

side of the road when it breaks down and

it will break down emphases as in the

original so in this and this was in an

article really pushing him it's the

greatest thing in the world but he he's

really up thrown about its limitations

I've got a ton of these but my favorite

is the next one this is this is my

all-time favorite from a guy named T

stain on reddit Klingon code warriors

embrace get we enjoy arbitrary conflicts

get is not for the weak and feeble today

is a good day to code so you know you're

all getting users you're laughing at

this and so the reason you're laughing

is because you know it's true so here

are my top 10 things that I think top 10

needed enhancements needed forgetting

I've got a longer list I tried to limit

it to 10 and I tried to order them I

think an order of importance so I'm

going to start with the first one appear

show the descendants of a check-in this

is a showstopper for me because git does

not do this well is I can't use git I

have to use a different system what do I

mean by that

you know if

you think to the if you think back to

how git is implemented and apparently in

order to use get successful you kind of

have to know the low-level David

structures you've got this this length

list of commit objects now there's four

different types of objects in the file

format there's commit objects tree

objects blob objects and tagged objects

we're only dealing with commit objects

here and and the course they have off

each one has a complete sha-1 hash label

I have shortened the label on these to a

single hex digit just for readability so

you're the first check in was committed

number nine and and so that blob goes in

there that's great and then there were

some additional check-ins after that

which were a and F and it was a at fork

there was a branch there and the F

branch went it to D and the e branch

went up to C and then then there was a

merge operation at B and then a is the

latest a is head and each one of these

commit objects has a pointer to its

parents so it forms a graph just like

this and in the get documentation it

does show the graphs going this way so

the arrows are pointing backwards in

time which is kind of counterintuitive I

mean yeah this is the way you need to

implement it under the covers definitely

but you know users ought to see the

graphs going forward and or the arrows

going forward in time but the thing is

you know if you're if you're sitting at

E and you want to what wonder what comes

next there's nothing here to tell you

you can follow the arrow and find its

parents but you can't find its children

and there's no way to go in you know

after somebody commits C you can't look

at E and you can't modify e to add a

list of parents because if you were to

modify E that would change its hash it

would become a different check-in it

would become a different commit so

there's no way to do that and this is a

big end and for that reason if you if

you look at any of the user interfaces

it's very very difficult to find the

descendants of a check-in

how do we solve this I propose solving

it by having a shadow table off the side

you keep and keep the same internal data

structure because that that's the way

you need to do this but we could you

could make a table in a relational

database that keeps track of the

parent-child relationship and so I've

got a little simple table here and it's

got the parent hash the child hash and

then rank is a field that says whether

or not this is a merge check in or if

it's the primary that the merge parent

or primary parent so let's look at how

this goes

we see that a has a parent which is B on

the first entry here so B is the parent

a is the child and the rank is zero

because it's the prime your parents it's

not emerge B is a child of two different

check-ins both C and D C is its primary

parent and D is its merge parent and you

can have a three-way merge too and then

you number that way and and you can see

how this table very succinctly

represents this graph in fact you could

this is not like a primary data

structure you could build this table

just by looking at the get log you could

build this table very quickly and then

once you have this table um it becomes

very simple to do a query to get the

children or the parents of a particular

check-in and if you have an index on

this table or appropriate indices on

this table then that query becomes very

very fast and this allows you to to find

the ancestors so and if you want to get

and of course you can you can do more

complicated things with this so for

example usually what you want to do is

you've got to check-in you want say what

came afterward you want to say fund the

50 most recent descendants in time of a

particular check-in to see what was

happening so somebody checks in a bug

you find out about it two years later

okay

what was the follow-on to this and for

this example I've added another

to the table called in time which is

just a timestamp and then I just and

then using a simple recursive common

table expression I can immediately get

the 50 most recent and descendants of

that check in now this is just a single

simple SQL query it's a not a common

thing it's uses a common table

expression and if you don't know what

that is there's actually a talk by me

right after lunch and you can come and I

will explain how this works to you but

the point is it's just a simple query

gives you this now you could do this by

you could do the same thing by looking

through the git log and doing lots of

complete table scans it would be a lot

of code it would take a lot of it would

be slow and I note after 10 years of

intensive use with lots of user

interfaces nobody does it and so this

information is just not available to

people who want it you could do all

sorts of other instruments if you had

this table so for example you could find

all of the check-ins that occurred

during some interval of time and that's

just by selecting doing a select on the

table with the in time between two

values that you've selected I do this

kind of thing all the time because in my

repositories I keep I keep separate

components of a project in separate

repositories so the SQLite source code

is in one repository the documentation

is in another repository some of this

test cases are when the original source

repository but I have other several

other repositories that contain

additional test cases so I get an email

or a phone call from a client and says

we've got a problem with this version

SQLite is three years old and we go back

and we we we buy say to trace it a

particular check in and we're turning

well why do we make this change what we

want to see what's happening in the

other related repositories at the same

time so we can kind of go back and

remember what we were thinking three

years ago I don't know about you but I

cannot remember what I was thinking

two years ago this week do you even know

where you were two years ago this way I

don't so but but by doing this query I

can I can get a complete listing taken

yeah the answer is that we were probably

here two years ago this week but by

doing a career like this I can go back

and give you a complete listing of what

was happening all of the relevant

repositories and oh yeah that's when we

were working on such-and-such a feature

and now I see why we made this change

this happens on a daily basis for me

it's not easy to do with the current yet

structure what are the thirty closest

check-ins to a particular point in time

same kind of thing where you know we've

got a change that we're investigating we

know that this change introduced about

what was happening around that point in

time not necessarily on that same branch

maybe on parallel branches what were we

doing at the same time this is a very

important thing when you're tracking

boats and and a system like this allows

you to do it you know I forgot to

mention when I'm showing you the

original chart that this table that

we've got here this lineage table it's

not really a primary data structure in

the sense that it's not holding any new

information all the information that's

in this table is in the original get

objects and if the this table been out

of date for some reason some software

bug or something you could just delete

the whole thing rescan yet log and

rebuild the table anytime you want and

you know my particular version control

system does you know has the same kind

of situation and there's a rebuild

command just you know type rebuild and

it actually rebuilds this table from

primary sources so here's an example of

doing 30 the 30 nears check-ins in time

and it's just a couple of selects with a

union and ordered by time differences

and limit

to the first 30 and that's very fast so

and you could do something like this and

so I imported the complete git

repository for get itself into a

different version control system and

then ran this query on it just to find

out what was the old what were the

oldest commits and get itself and so

these were the first five commits to get

itself and I was amused by the very

first one where Lin is checked in the

very first code to get and he says his

own words the initial revision of git

I don't know if you can see this the

information manager from hell so you can

you can actually see this in the git

repo it's right in here at the bottom

that's a very first check-in notice in

this particular rendition the errors

point forward in time rather than

backward in time which I personally find

more intuitive but you can you can get

the same information by doing git log

and then piping it through tail and in

just see the last few entries yes

there's also a git log reverse that

Princeton in in reverse order I did not

know about that one I did time it this

took three milliseconds when I did get

log and piped it retail that took the

better part of a second so this is

faster okay so that's that's that's

that's the big complaint I have I can't

go back and explore the history it's

just this this this length list what the

air is going the opposite direction that

I normally want to go the next big

problem I have with yet is it has an

overly complex mental model

in particular if you're working in get

you need to keep in your mind five

different snapshots or five different

commits you need to remember what's in

your working directory the the files

that you're editing right now you need

to remember what is in the index or

staging area you need to be mindful of

your local head the branch that you're

working on you need to be aware of the

local copy of the remote head that is

your copy of what's going to be on the

server and then also you need to be

aware of what is actually the remote

head and there are commands and get to

move information between all five of

these things really if you're a

developer you really only need to be

concerned with two of these which is the

first one in the last when you're

working directory and what's actually on

the server what everybody else sees all

this other stuff in the middle B C and D

is just complication it forces you to

keep in your mind two and a half times

more information than you really need

and you know every one of us has a

finite number of brain cycles you can

only think about so much at a time and

my view is the version control system

should get out of your way and use as

few brain cycles as possible so that you

can devote as many brain cycles as

possible

whatever project it is you're working on

and having to keep in mind B C and D she

seems to just be stealing cycles from

from your normal thinking activity so

one of the first things that I think

really ought to go is and of course

these things to be available in in the

rare cases where they're actually needed

one of the first things I think needs to

go is the staging area I mean I talk to

a lot of people about this and if you

have any views I'd really like you to

share them

some people are fanatical about the get

index is a great thing and ask them why

and the usual answer is I get is that

well it allows you to do a partial

every other version control system in

the world allows you to do a partial

commit to and they don't have a staging

area so I'm not sure why that's the

advantage the the fact that you've got

the differences between what you're

committing to and the local and the

remote head that these don't

automatically stay in sync there may be

cases where that would be a desirable

thing but those are the exceptions not

the rule usually when you want when you

do a commit you'd like it to immediately

yeah you keep it on your machine but

you'd like it to immediately go out to

the server so that everybody else can

see it too now if sometimes you're off

networking that doesn't work and so you

have to be aware of these things but

that's the exception not the rule the

usual case is that you want to go

immediately and automatically yes

some people say that's not their usual

case but you know the people the

experience I have and you know when I

was originally doing the distributed

version control system doing my own work

the same way where you would have to

explicitly push as a separate step and

we developed some experience with that

after a while and we eventually found

out that it works a whole lot better to

automatically push so every time you

commit it automatically pushes and this

really solves a lot of problems in fact

there were some some users on on the

mailing list of my system recently and

sometimes you can get in a race

condition where two people commit at the

same time are nearly at the same time

and and there's a race to see who pushes

first and it would automatically create

a branch and everything and and they

were upset about that that that they

weren't getting in a feedback that there

were two people committing at the same

time and it goes beyond just automatic

they want not only automatic but they

want automatic notification that other

people have committed as well and all

this other thing this is what people

really want in right

number three it doesn't really store

your branch history in the get world a

branch is just a symbolic name for the

most recent commit on the end of one of

these commit chains and as you commit

new things on there that that pointer

moves so it doesn't really remember the

name of the branch where it originally

got committed now you can kind of use

some inference and figure it out some of

the tools will show you this but it's

not really first client's branch history

when you're doing analysis of foe and

people come back to you and you need to

go back and look at what was having two

or three years ago you often want to

know what branch was this chicken

originally checked in on where was this

originally what was the original name of

the branch or what are all the

historical branches that we'd handle in

this project where they're starting and

ending dates and how were they finally

resolved where they merged are they

still active were they abandoned what

was the what was the solution ear list

all the historical branches I want to do

a bisect only over this particular

branch so a lot of times what we do is

by six very important to us so what will

be somebody will want to implement a new

feature and they'll do a sequence of

check-ins in a branch and then they'll

merge that branch on to the trunk and

but then later on when we're doing a

bisect we don't want to bisect into all

these little incremental changes whether

they're adding the feature we want just

that one case where they added it but

because there's no branch history and

yet they there's there's no way to keep

up with this you can have them make

inferences based on on on on the commit

logs but it's

it there there's there's no permanent

record of the name of the branch where

things were committed I didn't think

this is real important I asked for

feedback from the user community a lot

of people are saying this is my number

one complaint and get if it forgets the

name of my branch's number for multiple

check outs from the same repository

right now with get the working area is

part of the repository you can only have

one working area per repository if

you're working on something you've got

your project all taken apart you're in

the middle of editing an email or phone

call comes in it requires you to go back

and look at something historical well

you've got you can stash your work but

that's that's kind of bad because you

can only even even with the stash you're

gonna lose context you can clone your

repository to a new repository and then

go back and look at the historical

version in the plume but that's just any

aim can work around it that way but it's

unsatisfying it would be so much nicer

if you just had a repository and then

you can have multiple working

directories sitting on different

checkouts from that one repository

people who have worked in both systems

tell me repeatedly this is a very

important thing to them multiple

checkouts from the same repository

sliced and cloned checkouts

are sliced checkouts and clones excuse

me so a slice would be this is this is

kind of a feature that you had with

subversion and CVS where you've got like

a massively wide project like net bsd if

you ever look at their repository they

have the entire user space with 60,000

different files all in one repository

it's massive and most people don't want

all 60,000 files they only want to look

at one subdirectory the only one working

on one side directory and so a slice

check out me I want to check out or

clone something but I don't want the

entire repository I just want this one

subdirectory wouldn't it be great if you

could do that there's really no

technical reason why you can't it's just

that it isn't supported yes what is a so

a shallow clone is where you clone a

repository but you don't get all of its

history um yeah that's that's another

thing that's nice to have and that is a

new feature hello fellow clansmen around

it's just been like a year or two and

then so um the other thing a lot of

people request and it does support this

now is that you've got a project that

goes back ten years if I want to access

this project why do I have to go to ten

years of history can I get by with just

loading two months of history and save

bandwidth that's a shallow climb and

they've got that but where else we're

doing that a slice clone we're so

shallow clone is slicing it this way a

slice is doing it this way and so it

would be nice to be able to do a slice

and a shallow clone yes question so the

the comment is that on some projects the

directories move around and things

change and so that slicing doesn't work

as well there so don't slice on that

project but on some projects like net

bsd the directory structure stays the

same for like 25 years and and and they

want to do this sort of thing and and so

yeah yes question the

pointed point was raised the get

solution are the district I'm gonna go

beyond yet and just say the distributed

version control solution because they

all have this problem including when I

read the the the distributed version

control solution for this problem is to

have separate repositories for each one

of your little components that you might

want to load yeah this kind of a

workaround though isn't it because

you've got that means you have to

predict in advance which directors are

going to be in interest as a separate

piece and historically we've not been

really good at predicting that so that's

not it would be much better and the

software could in theory do it it's just

to be able to clone or check out a slice

that would work check outs and commits

against a remote repository right now in

order to work and yet you have to make a

clone and has to be on your local

machine everything has to be local and

I'm asking why is that well I know the

technical reasons why but from a user's

perspective that seems like an

unnecessary burden now if you're an

active developer yeah you do want your

local copy and if you if you're going to

be working off network definitely you

want a local copy and that should

probably be the default but if I'm just

a low git hub somewhere and I see some

interesting project and I want to look

at it and look at the source code why do

I have to include the entire 15-year

history just to look at the latest

version one can't I just check out

directly from get up without cloning

that seems like it's something to be

really easy to do for that matter if I

make a change why can't I one can I

commit it back why do I yeah there are

there advantages if you're doing a lot

of work on a project it's certainly

better to have it local but if it's just

an occasional thing why why do I have to

do that why can't I commit and go over a

network okay the next one is a busybox

version of good you know what busybox is

who knows what busybox is busybox is of

course the that single program that has

all of the unit standard UNIX

command-line utilities built-in now this

is not a perfect analogy because busybox

also has limitations it doesn't do the

full thing

but right now when you install get and

installs what is it 134 different

programs you know because each command

is implemented by different executable

and all of these little programs get put

in a special directory somewhere and

then the one get program looks at the

arguments all I want to run this one

it's got a huge number of dependencies

it's this big pile of stuff and a lot of

people tell me that they really want a

version control system it's just an

executable they download an executable

yet sexy or yet if you're on Linux and

you put it on your path and it works

there's nothing's installed you don't

have to have app yet if you want to

upgrade you can put it in a changer jail

if you want to upgrade you just

overwrite the old one with the new one

if you want to uninstall it you just

delete the binary very simple

whereas yet you really have something

like app yet just to manage it this is

you know you know a big pile of programs

like that that's great for development

it's great for an application it's works

fine for development work ruin your

prototyping but for a mature product

that's 10 years old that everybody's

using you'd think that there would be

some better packaging for it you know so

the pink ones just download it really

quickly I hear a lot of people they work

in companies where they're going on a

trip they have to check out a laptop

they don't have their own laptops you

check out a laptop and it comes

pre-configured and it doesn't have the

version control system you want so for

them they have to go and install yet

wouldn't be better just to have a single

binary they could just plot their on the

machine all comes via HTTP or HTTPS so

my wife is a faculty member at UNCC the

local university and I go over on campus

a lot and over there they have guest

Wi-Fi niner-niner guest this man

right here is probably in charge of

known and yes so I am I am grateful I am

great I am grateful for you know having

the free Wi-Fi access but you know like

so much of the world they confuse they

think that the internet and the world

wide web are the same thing that means

that nine or guest only allows you to

use TCP port 80 and 443 those are the

only two options okay so you cannot

secure shell into your back into your

server and and furthermore you can't run

any other protocols that don't learn

every port 80 and don't look like HEV

when you're online or guest and it's not

just UNCC that does this there's a lot

of places to do this I hear a lot of

people they they they use my alternative

version control system because it does

just use HTTP and then we use it because

it's the only one that will penetrate

our corporate firewall you know there's

nothing about yet they couldn't be

finagled to work over HTTP it's just

that they don't so I I think that's

something to be very important may

greatly improve their usability I think

there needs to be a get all command this

is the thing we did where it all means

it works on all I keep track of all of

your repositories as I said we have I

have dozens of repositories open on my

desktop in any particular point in time

and I lose track of them I can't

remember them all so I'm working all day

and working on all these different

projects on different repositories and

get to the end of the day and I'd like

to be able say get all status and it's

gonna go around and it's gonna find all

my repositories and it's gonna do a

status on them to show me what I have it

what I forgot to commit

the way it would do this of course is

there's already a dot get file in your

home directory that keeps track isn't it

called dot get they well in no in your

in your home directory that keeps track

of the your username and and all that

stuff

dot yet config ok so there's already

that file and every time you run a git

command it's going to consult that file

it's gonna read it so and and people

complain what you can't keep track of

all other repositories because you can

freely move them around so buddy just do

a move man and move it to a different

place and that's fine so this the dot

git config keeps track of the last known

position of a man

so every time you run a git command it

says ok this repository I just read git

config is my repository that I'm working

on is it listed and they get config

usually it will be if it's not let's add

it and then when you run again all

command it actually goes down the list

of possible git repositories but then it

checked each one to see if it still is

because you might have moved it away so

this is easy to implement and it's not

so it's not a 100% but in practice it

works well enough so like I'm working on

my desktop and of course I don't use yep

I use a different system but if I were

using hit and we're going on my desktop

and I'm getting ready to go on the road

and I got all these things here I can do

get all push it pushes everything out to

the server and then I go over to my

laptop and to get all pull and to make

sure that everything is synced and then

I can go off network on my laptop and I

don't have to worry that I forgot about

one of the critical projects one of my

critical repos it's a very important

thing and finally get serve no that's

not finally there's a bonus question

again get sir this anybody use mercurial

you know about the serve command do you

use HG serve ok and the comment from the

from the audience was this is exactly

why we use mercurial rather than he is

because it has a serve command so what

this does is it kicks up a

you know mercurial doesn't really go far

enough in my view let me tell you so so

if you do hg sir it starts up a a web

server a little web server running there

and then you can point your web browser

at it and lots of really useful

informations about your repository but

one I implement for my system goes one

step further when you type fossil UI it

starts up the server and it also causes

your favorite web browser to pop up on

that page okay so there's so when

mercurial is a two-step process you have

to start the server and then you have to

type the URL into the web browser mind

does them both in one step but the point

is there's this very rich environment

you know I know that you there are lots

of tools out there for giving you a web

interface to your git repository and but

you know what their separate install

they usually required that you also have

a patchy there too and there's lots of

requirements and there's a big set up

and it's you know and you and people do

it on a server or something like that

because you know that you've taken the

time to set it up but wouldn't it be

really cool if every time you had a

repository you automatically had a

server you could just say git serve

immediately your web browser pops up and

you got all this graphical historical

information that you just click around

and find if you had that if you have

been using this for a couple of weeks I

promise that you would never you you

would never believe that you've got one

without it this is a very amazing thing

I'm probably blazing through these lines

way faster than how much more time do I

have ninety minutes a lot of answered

questions and answers but I do have one

bonus feature this is a thing that I

never personally needed but I hear from

a lot of people they would really like

to have advisory logs what do I mean by

this this is coming from the game

development community when you're

developing with ASCII text files the

they let me take you back

to some of the older version control

systems and this if if you're if you're

younger than me you may not remember

some of these so those things like SCC s

an RCS and the way these things worked

is that when you would do a check out

all your files would come out read-only

you couldn't edit them and if you wanted

to change a file you had to do a special

check out for editing which would then

lock the file so that nobody else only

one person could have a check out for

editing in return and that way you would

never get a conflict of any kind because

only one person would be editing a file

at a time of course the big downfall of

that approach is that somebody would

check something out for editing and then

immediately leave for two-week vacation

and and so we then we'd have to go

running around finding an administrator

to unlock it and so forth but and so CVS

came along and it gave you the ability

to just edit without anything to check

out for editing and that was the coolest

teacher in the world that was just

amazing I know that it's very popular

these days for people be bad-mouthing

CVS and I recognize that CVS has

limitations and it is an older

technology but if you've ever you know

those of us who have had to use what

came before CVS will never speak ill of

CVS so but and but so now we have all

this really cool merging stuff so that

you you you know when two people make

simultaneous changes they get merged

together that works great for text files

it does not work for JPEGs it does not

work for EM pegs it does not work for

these binary resources that are a big

part of game development for example but

also other things and so a lot of people

would love to have the ability to in in

in the main server

the central repository put in advisory

license I'm editing this JPEG and so if

somebody else wants to edit that JPEG

they'll get a warning now it's an

advisory lock so that you know if they

start

and then go on vacation you don't have

to go run up an administrator in order

to fix it but it still gives you it

helps you to coordinate editing of

binary resources that way so there's

we've had a progression of open-source

version control systems I mean in the

old days there's a CCS and RCS and then

there were CVS and subversion which were

huge huge innovations and think it came

along you know it was really based on

this thing called monotone which I think

really kind of pioneered the idea of

distributed version control systems but

so but yet was the one that was

successful and but that's team that's

been 10 years and in the question what

is and get his really other than the

other than adding a few features around

the edge of such as a shallow clone it

really has an advanced in you in ten

years it has anything new much and so my

question is what is going to come next

I've outlined some ideas here about what

I think the direction I think version

control needs to go I'm hopeful that

some of you guys might be interested in

going out and hacking on it and

implementing some of these ideas maybe

somebody who's watching the video would

see this if you have other ideas

criticisms or complaint if you think

that I'm completely hear from you again

I don't use it on a daily basis I use a

different system that I wrote myself and

so I'm just I can be some somewhat out

of touch if you if you think I'm

completely off-base I really do want to

understand your point of view so please

give me feedback that is the extent of

my talk and so I will be happy to take

questions comments criticisms at this

point so we already said you got a

question in the mat no no I was going to

say we've already established everybody

here is using it is that correct

who's also using subversion raise your

hand if you are a current or a current

subversion user a former subversion user

okay CBS Kurtz of CBS users nobodies

still using CBS former CBS users some

material material who's using material

something different call that what you

got dark sand RC RC s not sure enough I

just won fine okay yes okay well you

know what I even you know even when I

have just one file I'll set up a

repository for that one file and then I

will also set up a clone on the server

somewhere and then my system every time

I do a check-in pushes it and that's my

backup so you know anyway a different

one perforce how do you like perforce it

gets the job done okay yeah okay another

one of a very obscure and called fossil

that I might not have heard of yeah okay

great

yeah so um what are your present are you

happy with yet I see a lot of heads

going this way you're handy with yet you

like it okay so the comment was his

problem with yet is that it's not get

itself it as other people you invested a

lot of time to learn all of the obscure

commands to learn the tree structure and

so now you can get around and get pretty

well and other people come along after

him and blows everything a mess up your

repository right yeah okay do you think

it's fair that you know people like

because a lot of people use version

control other than programmers I mean

their data scientists and your are you

and your not uses so a lot of people

need to use version control other than

programmers you know there's we I wish

that more scientists would use version

control

wish that climate scientists would use

version control okay there you go but

you know it gets hard to use you have to

you have to spend a lot of time learning

all these obscure commands to go between

the five different things that you have

to keep in mind and so one of the one of

the funny quotes that didn't didn't tell

you about was I'll get to in just a

second one of the funny quotes that I

have that I didn't have a slide for was

I'm in order to effectively use git I'm

waiting for Emory you have to have the

man page tattooed on your arm yeah and

and and for the video people the

audience was saying yes you do okay come

yet Oh question we wish that Congress

would use version control and we have

applause from the audience yes question

coming all right the comment from the

audience was that he looked at the

online documentation for say yet push

which is a command which is very common

it's not something obscure and the

documentation makes no sense yep

push rest to remote repository what does

that mean really this is this goes back

to the first moment where you have to

you know the best way to learn get is to

start with the data structures and then

work up to the commands yeah and you're

right and and if you're not a program if

you're not hardcore if you're not a

Klingon warrior

you shouldn't have to learn this stuff

that's the point yes all right so I'm

going to try to summarize that remarks

teaches robotics high school students

their new program

and it is so complex it's just beyond

the ability of a newbie to obtain it's

just a barrier to entry you need to be a

kernel hacker in order to really

understand it but on the other hand we

need to be teaching new programmers

version control as a core skill and they

take one look at it and turn around and

change their major to history yes coming

in the back yeah okay I'll just go ahead

and say where the I develop the fossil

so yeah so get in the in fossil right

okay so the comment was that that get

and fossil and also mercurial and

monotone are commits oriented whereas

darhk's is patch oriented and can I

comment on that and what what we should

do is you and I should get together over

lunch and you because I have never

really understood darks and I tried but

it just wasn't making sense to me so in

in if you look at a graph the patches

are just the arcs between the nodes

right and so darks is really focused on

the arcs whereas gets focused on the

nodes is there is there a difference

here than I'm missing

mm-hmm I'm gonna friend all right so so

the point was made that the darks can

answer questions that yet cannot answer

and to just kind of summarize the

remarks I think it's that some the idea

of keeping track of patches works better

for some people's way of thinking than

keeping track of commits and that may be

the case and I'm not opposed to that

I'm just see I'm not here to tear down

yet I'm trying to make it better and

hopefully improve this and really if it

gets good enough I'll confer all of my

fossil repositories over to get and just

start using that but right now it's not

anything close to where I need it to be

so my point is to improve it for

everybody any other comments or remarks

questions yes oh yes there's the famous

get man page generator yeah I should

have made a link to that to see me see

me down because I want to put that in

his every of this talk again I also you

know those who never had a if you've

using it who's ever had a detached head

yeah did you know I just want to get

back to my first point if you had this

relational database keeping track of it

detached head becomes an impossibility

there are no more detached heads it

completely solves the dementia problem I

meant to mention it when I just forgot

we've come up with in addition to fixing

yet we need to come up with a new aid

for presenters so that we can have

points that we you know reminders here

on the screen to tell us all right and

in in and get master here tells me that

he does detached heads on purpose

yeah yeah one person saying he likes

detention it's cuz he does them on

purpose and then somebody else says

detectives are all fun and games until

you do it without meaning to and it will

eventually garbage collect your

detention kids wanted yeah so so your

detentions will go away

yes okay but but with an approach like

this detached kids just appear you know

in the little grants that you get with

your your graphical interface the

initiation is a nice little grant for

your history that is hatch kids just

appear there and you can click on them

and see what they're about it's not some

mystery that you have to go dig up out

of a log you don't have to remember that

they're there it just shows you and you

never lose them any other comments

questions if you wanna know more about

the alternative you can meet me in the

mall we have to give you demonstrations

and a sales talk thank you for coming

enjoy the conference if the videos still

going I'm getting reports from the

audience that the main page generator

forget is very funny mute this

you

your customers rely on your website or

application if it's slower

non-responsive it infuriates your users

and costs you money keeping your

business critical systems humming along

requires insight into what they're doing

your system metrics tell stories stories

that can reveal performance bottlenecks

resource limitations and other problems

but how do you keep an eye on all of

your systems performance metrics in real

time and record this data for later

analysis enter long view the new way to

see what's really going on under the

hood the long view dashboard lets you

visualize the status of all your systems

providing you with a bird's-eye view of

your entire fleet you can sort by CPU

memory swap processes load and network

usage click a specific system to access

its individual dashboard then click and

drag to zoom in on chokepoints and get

more detail comprehensive Network data

including inbound and outbound traffic

is available on the network tab and disk

rights and free space on the disk stab

while the process Explorer displays

usage statistics for individual

processes the system info tab shows

listening services active connections

and available updates adding longview to

a system is easy just click the button

copy the one-line installation command

then run the command on your Linux

system to complete the process the agent

will begin collecting data and sending

it to long view then the graphs start

rolling use long view to gain visibility

into your servers so when your website

or app heats up it stays up

citrix xenserver gives you everything

you need to integrate manage and

automate a virtual data center all on an

enterprise class cloud proven virtual

platform and at a third of the cost of

other solutions but why even bother with

virtualizing your server infrastructure

in the first place well let's say you

have a traditional one server to one

application architecture but you're

running out of resources and performance

is suffering once you order new server

hardware you'll wait for delivery

configure it install your business

application stage and test the server

and finally add it to your production

farm if you've been through this process

before you know it can take weeks or

even months you also know it's a

manually intensive process that will

burden your team every time you outgrow

your current setup with a virtual server

solution you could accomplish all of

that in less than half a day server

virtualization software separates the OS

and application from the underlying

server hardware and with multiple

virtual machines on a single server you

can use each of them to run different

OSS and applications this makes it

possible to move your virtual machines

from one piece of hardware to another

whenever you want to maximize

utilization simplify maintenance or

recover from a hardware failure and

without slowing down your applications

or users clearly server virtualization

provides big benefits and Citrix

XenServer provides even more since it's

built on an open platform

XenServer plays well with your existing

hardware storage systems and IT

management software as well as with the

industry's leading cloud service

providers best of all you can get

started by downloading a fully

functional production ready version of

Zen server for free after a 10-minute

installation process you'll see how easy

it is to start virtualizing your

workloads and automating your IT

management processes and when you're

ready for a richer set of management

tools just upgrade to one of the premium

editions of Zen server so whether you're

interested in virtualizing servers for

the first time expanding your server

virtualization footprint or moving

server workloads to the cloud

download and install zests River today

and see how it can help you simplify

your IT environment Citrix XenServer do

more don't spend more

you