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