[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:03.01,Default,,0000,0000,0000,,Time we start with the next talk Dialogue: 0,0:00:03.56,0:00:06.25,Default,,0000,0000,0000,,I welcome Richard Hartmann Dialogue: 0,0:00:06.25,0:00:09.86,Default,,0000,0000,0000,,He is involved in Debian since many years Dialogue: 0,0:00:09.86,0:00:14.31,Default,,0000,0000,0000,,and he became recently Debian Developer Dialogue: 0,0:00:14.31,0:00:18.29,Default,,0000,0000,0000,,and he will talk about gitify your life. Dialogue: 0,0:00:18.29,0:00:22.50,Default,,0000,0000,0000,,?, blogs, configs, data and backup. gitify everything Dialogue: 0,0:00:22.50,0:00:24.31,Default,,0000,0000,0000,,Richard Hartmann Dialogue: 0,0:00:24.31,0:00:25.37,Default,,0000,0000,0000,,Thank you. [applause] Dialogue: 0,0:00:30.98,0:00:32.09,Default,,0000,0000,0000,,Thank you for coming Dialogue: 0,0:00:32.09,0:00:35.24,Default,,0000,0000,0000,,expecially those who ? years attended all ? Dialogue: 0,0:00:37.24,0:00:39.24,Default,,0000,0000,0000,,Short thing about myself Dialogue: 0,0:00:39.78,0:00:42.46,Default,,0000,0000,0000,,As ? said I'm Richard Hartmann Dialogue: 0,0:00:42.46,0:00:46.03,Default,,0000,0000,0000,,In my day job I am backbone manager at Globalways Dialogue: 0,0:00:46.03,0:00:49.32,Default,,0000,0000,0000,,I'm involved in freenode and OFTC and... Dialogue: 0,0:00:49.32,0:00:51.32,Default,,0000,0000,0000,,should I speak louder? Dialogue: 0,0:00:52.05,0:00:53.32,Default,,0000,0000,0000,,I'm not... Dialogue: 0,0:00:55.99,0:00:58.35,Default,,0000,0000,0000,,test, test... good back there? Dialogue: 0,0:01:01.13,0:01:03.13,Default,,0000,0000,0000,,Can you turn up the volume a little bit? Dialogue: 0,0:01:05.57,0:01:08.21,Default,,0000,0000,0000,,test, test... ok, perfect. Dialogue: 0,0:01:08.21,0:01:13.08,Default,,0000,0000,0000,,Since about a week I've been a Debian Developer (yay) Dialogue: 0,0:01:13.08,0:01:20.67,Default,,0000,0000,0000,,[applause] and I'm the author of vcsh. Dialogue: 0,0:01:20.67,0:01:24.75,Default,,0000,0000,0000,,Raise of hands: who of you know what git is? Dialogue: 0,0:01:25.53,0:01:26.75,Default,,0000,0000,0000,,perfect Dialogue: 0,0:01:26.75,0:01:31.23,Default,,0000,0000,0000,,That's just as in ? perfect, we can skip it. Dialogue: 0,0:01:31.74,0:01:34.06,Default,,0000,0000,0000,,Let's move to the first tool, etckeeper. Dialogue: 0,0:01:34.06,0:01:37.25,Default,,0000,0000,0000,,Some of maybe most of this audience will have heard of it, Dialogue: 0,0:01:37.25,0:01:45.96,Default,,0000,0000,0000,,it's a tool to basicly store your /etc in pretty much every version control system you can think of Dialogue: 0,0:01:46.37,0:01:47.90,Default,,0000,0000,0000,,It's implemented in POSIX shell Dialogue: 0,0:01:47.90,0:01:53.28,Default,,0000,0000,0000,,it autocommits every thing in /etc basically at every opportunity Dialogue: 0,0:01:53.28,0:01:55.28,Default,,0000,0000,0000,,you may need to write excludes, for example Dialogue: 0,0:01:55.28,0:01:58.05,Default,,0000,0000,0000,,before your network config ? Dialogue: 0,0:01:58.05,0:02:00.05,Default,,0000,0000,0000,,but else, yeah, that's really cool Dialogue: 0,0:02:00.05,0:02:01.10,Default,,0000,0000,0000,,the autocommit Dialogue: 0,0:02:01.10,0:02:07.08,Default,,0000,0000,0000,,it hooks into most of the important or maybe even all of the important package management systems Dialogue: 0,0:02:07.08,0:02:11.11,Default,,0000,0000,0000,,so when you install your packages, even on SuSE or whatever Dialogue: 0,0:02:11.11,0:02:14.30,Default,,0000,0000,0000,,you can just have it commit automatically, which is very nice Dialogue: 0,0:02:14.90,0:02:17.50,Default,,0000,0000,0000,,You can obviously commit manually Dialogue: 0,0:02:17.50,0:02:19.95,Default,,0000,0000,0000,,if you for example change your X config Dialogue: 0,0:02:20.55,0:02:23.05,Default,,0000,0000,0000,,it supports as I said various backends Dialogue: 0,0:02:23.05,0:02:25.56,Default,,0000,0000,0000,,it's quite nice to recover from failures Dialogue: 0,0:02:25.56,0:02:31.21,Default,,0000,0000,0000,,for example ? used it to recover from saturday's power outages Dialogue: 0,0:02:31.21,0:02:36.30,Default,,0000,0000,0000,,because some servers lost stuff and with etckeeper you can just replay all the data which was... Dialogue: 0,0:02:36.30,0:02:37.78,Default,,0000,0000,0000,,rather nice. Dialogue: 0,0:02:38.06,0:02:39.26,Default,,0000,0000,0000,,Then there is bup. Dialogue: 0,0:02:39.26,0:02:42.92,Default,,0000,0000,0000,,bup is a backup tool based on the git pack file format Dialogue: 0,0:02:42.92,0:02:44.17,Default,,0000,0000,0000,,it's written in python Dialogue: 0,0:02:44.17,0:02:45.65,Default,,0000,0000,0000,,it's very very fast Dialogue: 0,0:02:45.65,0:02:47.32,Default,,0000,0000,0000,,and it's very space efficient. Dialogue: 0,0:02:47.74,0:02:52.83,Default,,0000,0000,0000,,The author of bup managed to reduce his own personal backup size Dialogue: 0,0:02:52.97,0:02:55.80,Default,,0000,0000,0000,,from 120 GiB to 45 GiB Dialogue: 0,0:02:55.80,0:03:00.01,Default,,0000,0000,0000,,just by migrating away from rsnapshot over to bup Dialogue: 0,0:03:00.01,0:03:02.05,Default,,0000,0000,0000,,which is quite good Dialogue: 0,0:03:02.05,0:03:05.15,Default,,0000,0000,0000,,I mean, it's almost or a little bit more than a third, so Dialogue: 0,0:03:05.15,0:03:06.40,Default,,0000,0000,0000,,very good Dialogue: 0,0:03:06.91,0:03:09.64,Default,,0000,0000,0000,,This happens because it has built-in deduplication Dialogue: 0,0:03:09.64,0:03:14.41,Default,,0000,0000,0000,,because obviously git pack files also have deduplication Dialogue: 0,0:03:14.69,0:03:16.82,Default,,0000,0000,0000,,You can restore every single mount point Dialogue: 0,0:03:16.82,0:03:19.00,Default,,0000,0000,0000,,or every single point in time Dialogue: 0,0:03:19.00,0:03:23.40,Default,,0000,0000,0000,,every single backup can be monted as FUSE filesystem or a ? filesystem Dialogue: 0,0:03:23.40,0:03:25.30,Default,,0000,0000,0000,,independently of each other Dialogue: 0,0:03:25.30,0:03:28.22,Default,,0000,0000,0000,,so you can even compare different versions of what you have in your backups Dialogue: 0,0:03:28.59,0:03:29.79,Default,,0000,0000,0000,,which again is very nice Dialogue: 0,0:03:29.79,0:03:34.93,Default,,0000,0000,0000,,the one thing which is a real downside for serious deployments Dialogue: 0,0:03:36.23,0:03:43.45,Default,,0000,0000,0000,,there is no way to get data out of your... archive or out of your backups Dialogue: 0,0:03:43.45,0:03:46.69,Default,,0000,0000,0000,,which again is a direct consequence of using git pack files Dialogue: 0,0:03:46.69,0:03:49.66,Default,,0000,0000,0000,,there is a branch which supports deleting old data Dialogue: 0,0:03:49.66,0:03:52.99,Default,,0000,0000,0000,,but this is not in mainline and it hasn't been in mainline for... Dialogue: 0,0:03:54.24,0:03:55.91,Default,,0000,0000,0000,,I think one or two years Dialogue: 0,0:03:55.91,0:03:59.34,Default,,0000,0000,0000,,so I'm not sure if it will ever happen but... Dialogue: 0,0:03:59.34,0:04:00.77,Default,,0000,0000,0000,,yeah Dialogue: 0,0:04:00.77,0:04:02.77,Default,,0000,0000,0000,,at least in theory it would exist. Dialogue: 0,0:04:04.39,0:04:09.85,Default,,0000,0000,0000,,Then for your websites, for your wikis, for your whatever there is ikiwiki. Dialogue: 0,0:04:10.82,0:04:13.00,Default,,0000,0000,0000,,ikiwiki is a wiki compiler, Dialogue: 0,0:04:13.00,0:04:14.30,Default,,0000,0000,0000,,as the name implies, Dialogue: 0,0:04:14.30,0:04:19.44,Default,,0000,0000,0000,,and it converts various different files into HTML files Dialogue: 0,0:04:19.81,0:04:20.87,Default,,0000,0000,0000,,it's written in Perl Dialogue: 0,0:04:20.87,0:04:22.63,Default,,0000,0000,0000,,it supports various backends Dialogue: 0,0:04:22.63,0:04:25.46,Default,,0000,0000,0000,,again most of the ones you can possibly think of Dialogue: 0,0:04:26.94,0:04:28.75,Default,,0000,0000,0000,,oh, I can even slow down, good Dialogue: 0,0:04:30.41,0:04:34.86,Default,,0000,0000,0000,,it's able to parse various markup languages, more on that on the next slide Dialogue: 0,0:04:35.32,0:04:41.62,Default,,0000,0000,0000,,there are several different ways to actually edit any kind of content within ikiwiki Dialogue: 0,0:04:42.92,0:04:46.35,Default,,0000,0000,0000,,it has templating support, it has CSS support Dialogue: 0,0:04:46.35,0:04:51.90,Default,,0000,0000,0000,,these are quite extensive, but they may be improved, but that's for another time Dialogue: 0,0:04:51.90,0:04:56.72,Default,,0000,0000,0000,,it acts as a wiki, as a CMS, as a blog, as a lot of different things Dialogue: 0,0:04:57.09,0:05:02.51,Default,,0000,0000,0000,,it automatically generates RSS and Atom feeds for every single page, for every subdirectory Dialogue: 0,0:05:02.51,0:05:05.84,Default,,0000,0000,0000,,so you can easily subscribe to topical content Dialogue: 0,0:05:05.84,0:05:09.87,Default,,0000,0000,0000,,if you are for example only interested in one part of a particular page Dialogue: 0,0:05:09.87,0:05:12.28,Default,,0000,0000,0000,,just subscribe to this part by RSS Dialogue: 0,0:05:12.28,0:05:14.60,Default,,0000,0000,0000,,and you don't have to check if there updates for it Dialogue: 0,0:05:14.60,0:05:19.74,Default,,0000,0000,0000,,which is very convenient to keep track of comments somewhere or something Dialogue: 0,0:05:20.06,0:05:25.57,Default,,0000,0000,0000,,It supports OpenID, which means you dont have to go through all the trouble of... Dialogue: 0,0:05:25.94,0:05:29.23,Default,,0000,0000,0000,,having a user database or doing very... Dialogue: 0,0:05:29.60,0:05:31.45,Default,,0000,0000,0000,,or doing a lot of antispam measures Dialogue: 0,0:05:31.45,0:05:34.65,Default,,0000,0000,0000,,because it turns out OpenID is relatively well... Dialogue: 0,0:05:34.65,0:05:36.50,Default,,0000,0000,0000,,suited for just... Dialogue: 0,0:05:36.50,0:05:39.47,Default,,0000,0000,0000,,stopping spam. For some reason, maybe they just Dialogue: 0,0:05:39.47,0:05:40.81,Default,,0000,0000,0000,,haven't picked it up yet, I don't know Dialogue: 0,0:05:40.81,0:05:43.87,Default,,0000,0000,0000,,but it's quite nice, because you don't have to do any actual work Dialogue: 0,0:05:44.24,0:05:50.21,Default,,0000,0000,0000,,and people can still edit your content, and you can track back changes at least to some extent Dialogue: 0,0:05:51.78,0:05:58.31,Default,,0000,0000,0000,,it supports various markup languages, the best ones, well, debatable, but in my opinion is Markdown Dialogue: 0,0:05:58.50,0:06:06.51,Default,,0000,0000,0000,,it supports WikiText, reStructuredText, Textile and HTML and there are ikiwiki specific extensions Dialogue: 0,0:06:06.51,0:06:12.02,Default,,0000,0000,0000,,for example normal wikilinks which are a lot more powerful than the normal linking style in MarkDown Dialogue: 0,0:06:12.02,0:06:15.08,Default,,0000,0000,0000,,which kind of sucks, but... whatever Dialogue: 0,0:06:16.61,0:06:22.58,Default,,0000,0000,0000,,it also supports directives, which basically tell ikiwiki to do special things with the page Dialogue: 0,0:06:22.58,0:06:24.44,Default,,0000,0000,0000,,for example you can tag your blog pages Dialogue: 0,0:06:24.44,0:06:26.94,Default,,0000,0000,0000,,or you can make... Dialogue: 0,0:06:27.21,0:06:33.05,Default,,0000,0000,0000,,generate pages which automatically pull in content from different other pages and stuff like this. Dialogue: 0,0:06:33.05,0:06:35.05,Default,,0000,0000,0000,,that's all done by directives. Dialogue: 0,0:06:38.28,0:06:39.63,Default,,0000,0000,0000,,How does it work? Dialogue: 0,0:06:39.63,0:06:44.53,Default,,0000,0000,0000,,You can edit webpages directly, if you want to, on the web Dialogue: 0,0:06:45.04,0:06:49.77,Default,,0000,0000,0000,,then you will have a rebuild of the content Dialogue: 0,0:06:49.77,0:06:52.32,Default,,0000,0000,0000,,but only the parts with changes Dialogue: 0,0:06:52.32,0:06:55.79,Default,,0000,0000,0000,,so if you... hello? Dialogue: 0,0:06:55.79,0:06:59.35,Default,,0000,0000,0000,,if you change only one single file it will only rebuild one single file Dialogue: 0,0:06:59.35,0:07:03.85,Default,,0000,0000,0000,,if you change for example the navigation it will rebuild everything because obviously... Dialogue: 0,0:07:03.85,0:07:05.85,Default,,0000,0000,0000,,it is used by everything. Dialogue: 0,0:07:15.70,0:07:20.24,Default,,0000,0000,0000,,If it has to generate pages automatically, for example the index pages or something Dialogue: 0,0:07:20.24,0:07:23.16,Default,,0000,0000,0000,,if you just create a new subdirectory, or if you have... Dialogue: 0,0:07:23.58,0:07:25.85,Default,,0000,0000,0000,,if you have commands which have to appear on your site Dialogue: 0,0:07:25.85,0:07:29.09,Default,,0000,0000,0000,,it will automatically generate those MarkDown files and commit them Dialogue: 0,0:07:29.09,0:07:34.04,Default,,0000,0000,0000,,or you put them in your souce directory and you just commit them and... Dialogue: 0,0:07:34.27,0:07:37.79,Default,,0000,0000,0000,,and have them part of your site, or you can autocommit them if you want. Dialogue: 0,0:07:37.79,0:07:39.51,Default,,0000,0000,0000,,That's possible as well. Dialogue: 0,0:07:39.74,0:07:45.95,Default,,0000,0000,0000,,You can obviously change... pull in changes in your local repository if you want to look at them Dialogue: 0,0:07:47.01,0:07:49.19,Default,,0000,0000,0000,,Common uses would be public wiki... Dialogue: 0,0:07:49.19,0:07:53.45,Default,,0000,0000,0000,,private notes, for just note keeping of your personal TODO list or whatever Dialogue: 0,0:07:54.14,0:07:58.36,Default,,0000,0000,0000,,having an actual blog, which a lot of people in this room probably do Dialogue: 0,0:07:58.36,0:08:04.28,Default,,0000,0000,0000,,that's, yeah, I mean a lot of people on Planet Debian have their blog on ikiwiki, for good reasons Dialogue: 0,0:08:04.89,0:08:09.06,Default,,0000,0000,0000,,and an actual CMS for company websites or stuff Dialogue: 0,0:08:09.38,0:08:12.07,Default,,0000,0000,0000,,which also tends to work quite well. Dialogue: 0,0:08:13.50,0:08:21.70,Default,,0000,0000,0000,,The three main ways to interact with ikiwiki are webbased text editing, which is quite useful for new users, but is quite boring, in my opinion, Dialogue: 0,0:08:22.25,0:08:28.09,Default,,0000,0000,0000,,there is also a WYSIWYG editor which is even more fancy for non-technical users Dialogue: 0,0:08:28.65,0:08:32.72,Default,,0000,0000,0000,,and there is just plain old CLI-based editing way: Dialogue: 0,0:08:32.72,0:08:38.60,Default,,0000,0000,0000,,just edit files and commit them back into repository pushes up and everything gets rebuilt automatically , which is... Dialogue: 0,0:08:38.83,0:08:41.94,Default,,0000,0000,0000,,in my opinion the best way to interact with ikiwiki, because Dialogue: 0,0:08:41.94,0:08:45.60,Default,,0000,0000,0000,,you are able to stay on the command line and simply push out your... Dialogue: 0,0:08:45.60,0:08:50.46,Default,,0000,0000,0000,,your stuff onto the web and you don'tactually have to leave the command line Dialogue: 0,0:08:50.78,0:08:53.10,Default,,0000,0000,0000,,which is pretty kinda neat. Dialogue: 0,0:08:54.07,0:08:57.08,Default,,0000,0000,0000,,There are also some more advanced use cases Dialogue: 0,0:08:59.26,0:09:02.64,Default,,0000,0000,0000,,as I said you can interface with the source files directly Dialogue: 0,0:09:02.64,0:09:04.07,Default,,0000,0000,0000,,you can maintain... Dialogue: 0,0:09:04.54,0:09:06.07,Default,,0000,0000,0000,,something is wrong Dialogue: 0,0:09:06.07,0:09:10.42,Default,,0000,0000,0000,,for example you can maintain your your wiki and your docs and your... Dialogue: 0,0:09:10.42,0:09:12.42,Default,,0000,0000,0000,,source code in one single directory Dialogue: 0,0:09:12.83,0:09:15.28,Default,,0000,0000,0000,,and it would simply... Dialogue: 0,0:09:15.28,0:09:18.80,Default,,0000,0000,0000,,and simply have parts of your subdirectory structure rendered. Dialogue: 0,0:09:18.80,0:09:20.80,Default,,0000,0000,0000,,for example git-annex does this Dialogue: 0,0:09:20.80,0:09:24.31,Default,,0000,0000,0000,,there is a doc directory, which is rendered to the website Dialogue: 0,0:09:24.59,0:09:26.72,Default,,0000,0000,0000,,but is also part of the normal source directory Dialogue: 0,0:09:26.72,0:09:30.75,Default,,0000,0000,0000,,which means that everybody who checks out a copy of the repository Dialogue: 0,0:09:30.75,0:09:34.32,Default,,0000,0000,0000,,will have the complete forum, bug reports, TODO lists Dialogue: 0,0:09:34.32,0:09:35.15,Default,,0000,0000,0000,,user comments, Dialogue: 0,0:09:35.24,0:09:40.15,Default,,0000,0000,0000,,everything on their local filesystem, without having to leave - again - their command line, Dialogue: 0,0:09:40.15,0:09:48.72,Default,,0000,0000,0000,,which doesn't break media, and so is just very convenient to have one single resource for everything regarding one single program. Dialogue: 0,0:09:49.69,0:09:52.80,Default,,0000,0000,0000,,And another nice thing is if you create different branches Dialogue: 0,0:09:52.80,0:09:58.91,Default,,0000,0000,0000,,for preview, staging areas you can have workflows where some people are just allowed to create ... Dialogue: 0,0:09:58.91,0:10:05.07,Default,,0000,0000,0000,,pages, other people then look over those pages and merge them back into master and then push them on the website Dialogue: 0,0:10:05.39,0:10:08.03,Default,,0000,0000,0000,,which basically allows you to... Dialogue: 0,0:10:08.59,0:10:13.64,Default,,0000,0000,0000,,to have content control or real publishing workflow, if you have a need to do this Dialogue: 0,0:10:15.63,0:10:17.90,Default,,0000,0000,0000,,Next stop: git-annex. Dialogue: 0,0:10:18.59,0:10:20.49,Default,,0000,0000,0000,,The beef. Dialogue: 0,0:10:22.06,0:10:28.69,Default,,0000,0000,0000,,It's basically a tool to manage files with git without checking those files into git Dialogue: 0,0:10:29.80,0:10:31.98,Default,,0000,0000,0000,,? Dialogue: 0,0:10:34.66,0:10:35.68,Default,,0000,0000,0000,,Yeah, what is git-annex? Dialogue: 0,0:10:35.68,0:10:36.38,Default,,0000,0000,0000,,It's based on git, Dialogue: 0,0:10:36.38,0:10:39.48,Default,,0000,0000,0000,,it maintains the metadata about files, Dialogue: 0,0:10:39.48,0:10:43.41,Default,,0000,0000,0000,,as in location, and file names and everything, in your git repository Dialogue: 0,0:10:43.69,0:10:48.93,Default,,0000,0000,0000,,but it doesn't actually maintain the file content within the git repository Dialogue: 0,0:10:48.93,0:10:49.90,Default,,0000,0000,0000,,more on that later Dialogue: 0,0:10:49.90,0:10:53.05,Default,,0000,0000,0000,,this saves a lot of time and space. Dialogue: 0,0:10:54.30,0:10:59.16,Default,,0000,0000,0000,,You still able to use any git-annex repository as a normal git repository Dialogue: 0,0:10:59.16,0:11:02.31,Default,,0000,0000,0000,,which ? means you're even able to have a mix of... Dialogue: 0,0:11:02.31,0:11:05.09,Default,,0000,0000,0000,,for example, say, all your ? files Dialogue: 0,0:11:05.09,0:11:07.96,Default,,0000,0000,0000,,should be maintained by normal git, Dialogue: 0,0:11:07.96,0:11:12.17,Default,,0000,0000,0000,,and then you have all the merging which git does for you and everything Dialogue: 0,0:11:12.17,0:11:13.93,Default,,0000,0000,0000,,and then you have for example your photographs, Dialogue: 0,0:11:13.93,0:11:15.93,Default,,0000,0000,0000,,or your videos for web publishing Dialogue: 0,0:11:15.93,0:11:18.84,Default,,0000,0000,0000,,which are maintained in the annex Dialogue: 0,0:11:18.84,0:11:23.66,Default,,0000,0000,0000,,which means you don't have to have a copy of those files in each and every single location Dialogue: 0,0:11:26.02,0:11:31.49,Default,,0000,0000,0000,,A very nice thing about git-annex is that it's written with very low bandwidth and flaky connections in mind Dialogue: 0,0:11:32.32,0:11:35.98,Default,,0000,0000,0000,,quite a lot of you will know that Joey lives basically in the middle of nowhere Dialogue: 0,0:11:35.98,0:11:40.47,Default,,0000,0000,0000,,which is a great thing to be forced to write really efficient code Dialogue: 0,0:11:40.93,0:11:43.44,Default,,0000,0000,0000,,which doesn't use a lot of data, and that shows: Dialogue: 0,0:11:43.81,0:11:44.32,Default,,0000,0000,0000,,it's really quick Dialogue: 0,0:11:44.32,0:11:47.60,Default,,0000,0000,0000,,and even if you had a really really bad connection Dialogue: 0,0:11:47.60,0:11:49.60,Default,,0000,0000,0000,,in backwaters or whatever... Dialogue: 0,0:11:49.60,0:11:52.42,Default,,0000,0000,0000,,during holidays or during normal living Dialogue: 0,0:11:52.79,0:11:56.13,Default,,0000,0000,0000,,it's still able to transfer the data which you need to transfer, Dialogue: 0,0:11:56.13,0:11:58.13,Default,,0000,0000,0000,,it's very very nice Dialogue: 0,0:11:58.13,0:12:02.10,Default,,0000,0000,0000,,There are various workflows: we'll see four of them in a few minutes Dialogue: 0,0:12:03.63,0:12:08.63,Default,,0000,0000,0000,,So. It's written in Haskell, so it's probably strongly typed and nobody can write patches for it Dialogue: 0,0:12:11.13,0:12:14.28,Default,,0000,0000,0000,,it uses rsync to actually transfer the data, Dialogue: 0,0:12:14.28,0:12:17.01,Default,,0000,0000,0000,,which means it doesn't try to reinvent any wheels Dialogue: 0,0:12:17.01,0:12:24.24,Default,,0000,0000,0000,,it's really just based on top of established and well know and well debugged programs Dialogue: 0,0:12:24.24,0:12:28.82,Default,,0000,0000,0000,,In indirect mode, which in my personal opinion is the better mode, Dialogue: 0,0:12:28.82,0:12:30.30,Default,,0000,0000,0000,,what it does is Dialogue: 0,0:12:30.30,0:12:36.19,Default,,0000,0000,0000,,it moves the actual files into a different location, namely .git/annex/objects Dialogue: 0,0:12:36.65,0:12:41.93,Default,,0000,0000,0000,,it then makes those files read only, so you cannot event accidentally delete those files Dialogue: 0,0:12:41.93,0:12:46.56,Default,,0000,0000,0000,,even if you rm -f them, it will still tell you no, I can't delete them, Dialogue: 0,0:12:46.56,0:12:48.09,Default,,0000,0000,0000,,which is very secure Dialogue: 0,0:12:49.01,0:12:52.21,Default,,0000,0000,0000,,may be incovenient, but you can work on this Dialogue: 0,0:12:52.21,0:12:56.79,Default,,0000,0000,0000,,it replaces those files with symlinks of the same name, and those just point at the object Dialogue: 0,0:12:56.79,0:12:59.85,Default,,0000,0000,0000,,and if there is an object behind this symlink or not... Dialogue: 0,0:12:59.85,0:13:06.33,Default,,0000,0000,0000,,that basically returns whether you are able on this particular machine, or in this particular repository Dialogue: 0,0:13:06.80,0:13:13.42,Default,,0000,0000,0000,,but you will definitely have the informations about the name of the file, the theorethical location of the file... Dialogue: 0,0:13:13.42,0:13:16.57,Default,,0000,0000,0000,,the hash of the file will be in every single repository Dialogue: 0,0:13:17.08,0:13:18.57,Default,,0000,0000,0000,,There is also a direct mode Dialogue: 0,0:13:19.30,0:13:22.31,Default,,0000,0000,0000,,initially mainly written for windows and Mac OS X Dialogue: 0,0:13:22.31,0:13:24.77,Default,,0000,0000,0000,,because Windows just doesn't support symlinks properly Dialogue: 0,0:13:24.77,0:13:27.82,Default,,0000,0000,0000,,and OS X was supporting symlinks, Dialogue: 0,0:13:27.82,0:13:32.04,Default,,0000,0000,0000,,apparently has lots of developers who think it is a great idea to follow symlinks... Dialogue: 0,0:13:32.04,0:13:35.19,Default,,0000,0000,0000,,and display the actual target of the symlink instead of the symlink Dialogue: 0,0:13:35.19,0:13:39.22,Default,,0000,0000,0000,,so you have cryptic filenames which are very hard to deal with Dialogue: 0,0:13:39.49,0:13:46.16,Default,,0000,0000,0000,,obviously people who are used to GUI tools which then only display really really cryptic names ? Dialogue: 0,0:13:46.16,0:13:49.59,Default,,0000,0000,0000,,so there is direct mode which doesn't do the symlink stuff Dialogue: 0,0:13:49.59,0:13:53.39,Default,,0000,0000,0000,,it basically rewrites the files on the fly Dialogue: 0,0:13:53.39,0:13:57.65,Default,,0000,0000,0000,,git still thinks it would be managing symlinks, but... Dialogue: 0,0:13:57.65,0:14:03.86,Default,,0000,0000,0000,,git-annex just pulls them up from under git, and pushes in the actual content. Dialogue: 0,0:14:04.69,0:14:08.76,Default,,0000,0000,0000,,You keep on nodding, so... I'm probably doing good Dialogue: 0,0:14:10.48,0:14:14.32,Default,,0000,0000,0000,,and if you want you can always delete old data, or you can keep it... Dialogue: 0,0:14:14.32,0:14:16.73,Default,,0000,0000,0000,,or you can just... for example what I'm doing: Dialogue: 0,0:14:16.73,0:14:20.06,Default,,0000,0000,0000,,you can have one or two machines which slurp up all your data... Dialogue: 0,0:14:20.06,0:14:26.41,Default,,0000,0000,0000,,and have an everlasting archive of everything which you've ever put into your annexes... Dialogue: 0,0:14:26.41,0:14:30.21,Default,,0000,0000,0000,,and other machines, for example laptops with smaller SSDs Dialogue: 0,0:14:30.58,0:14:34.10,Default,,0000,0000,0000,,those just have the data which you are actually interested in at the moment Dialogue: 0,0:14:35.76,0:14:38.17,Default,,0000,0000,0000,,How does this work in the background? Dialogue: 0,0:14:38.31,0:14:40.77,Default,,0000,0000,0000,,Each repository has a UUID Dialogue: 0,0:14:41.28,0:14:45.86,Default,,0000,0000,0000,,It also has a name, which makes it easier for you to actually interact with the repository... Dialogue: 0,0:14:45.86,0:14:48.96,Default,,0000,0000,0000,,but in the background it's just the UUID for obvious reasons... Dialogue: 0,0:14:48.96,0:14:55.35,Default,,0000,0000,0000,,because it just makes ? and synchronization easy, period Dialogue: 0,0:14:55.35,0:14:58.97,Default,,0000,0000,0000,,It's also tracking informations in a special branch called git-annex Dialogue: 0,0:14:59.43,0:15:02.76,Default,,0000,0000,0000,,this branch means that all... Dialogue: 0,0:15:05.64,0:15:11.10,Default,,0000,0000,0000,,this branch ? every single repository has full and complete informations... Dialogue: 0,0:15:11.10,0:15:16.33,Default,,0000,0000,0000,,about all files, about the locations of all files, about the last status of those files... Dialogue: 0,0:15:16.33,0:15:18.74,Default,,0000,0000,0000,,if those files have been added to some repository Dialogue: 0,0:15:18.74,0:15:19.39,Default,,0000,0000,0000,,or they have been deleted, Dialogue: 0,0:15:19.39,0:15:22.26,Default,,0000,0000,0000,,or if they are being over there forever Dialogue: 0,0:15:22.26,0:15:30.64,Default,,0000,0000,0000,,so in every single repository you can just lookup the status of this file or of all files in all of your repositories Dialogue: 0,0:15:30.64,0:15:33.42,Default,,0000,0000,0000,,which is, yeah, convenient Dialogue: 0,0:15:33.93,0:15:37.78,Default,,0000,0000,0000,,The tracking information is very simple Dialogue: 0,0:15:37.78,0:15:40.93,Default,,0000,0000,0000,,and it's designed to be merged very... Dialogue: 0,0:15:40.93,0:15:43.43,Default,,0000,0000,0000,,it's a little bit more complicated than applying union merge, Dialogue: 0,0:15:43.43,0:15:46.21,Default,,0000,0000,0000,,but basically what it does is it adds a timestamp Dialogue: 0,0:15:46.72,0:15:52.60,Default,,0000,0000,0000,,and tells if the file is there or not and it has the UUID of the repository Dialogue: 0,0:15:53.06,0:15:57.04,Default,,0000,0000,0000,,and from this informations, along with the timestamps you can simply reproduce... Dialogue: 0,0:15:57.14,0:16:03.62,Default,,0000,0000,0000,,the whole lifecycle of your files through your whole cloud of git-annex repositories Dialogue: 0,0:16:03.62,0:16:05.62,Default,,0000,0000,0000,,in this one particular annex. Dialogue: 0,0:16:06.54,0:16:09.64,Default,,0000,0000,0000,,One really nice which you can do is... Dialogue: 0,0:16:09.64,0:16:12.88,Default,,0000,0000,0000,,if you are on the command line, which again in my opinion is the better mode... Dialogue: 0,0:16:12.88,0:16:14.88,Default,,0000,0000,0000,,you can simply run git-annex sync Dialogue: 0,0:16:14.88,0:16:16.68,Default,,0000,0000,0000,,which basically does a commit... Dialogue: 0,0:16:16.96,0:16:20.29,Default,,0000,0000,0000,,oh, it does a git-annex add, then it does a commit, Dialogue: 0,0:16:20.29,0:16:24.09,Default,,0000,0000,0000,,then it merges from the other repositories Dialogue: 0,0:16:24.09,0:16:27.38,Default,,0000,0000,0000,,into your own master, into your own git-annex branch Dialogue: 0,0:16:27.38,0:16:29.38,Default,,0000,0000,0000,,then it merges the log files Dialogue: 0,0:16:29.38,0:16:31.38,Default,,0000,0000,0000,,that's where the git-annex branch comes in Dialogue: 0,0:16:31.38,0:16:34.09,Default,,0000,0000,0000,,and then it pushes to all other known repositories Dialogue: 0,0:16:34.09,0:16:42.20,Default,,0000,0000,0000,,which is basically a one-shot command to syncronize all the metadata about all the files with all the other repositories Dialogue: 0,0:16:42.52,0:16:44.61,Default,,0000,0000,0000,,and it takes no time at all Dialogue: 0,0:16:44.61,0:16:46.61,Default,,0000,0000,0000,,given a network connection Dialogue: 0,0:16:47.80,0:16:52.02,Default,,0000,0000,0000,,Data integrity is something which is very important for... Dialogue: 0,0:16:52.39,0:16:57.20,Default,,0000,0000,0000,,yeah, for all of the tools, but git-annex was really designed with data integrity in mind Dialogue: 0,0:16:57.57,0:17:03.92,Default,,0000,0000,0000,,by default it uses a SHA-2 256 with file extension... Dialogue: 0,0:17:03.92,0:17:08.13,Default,,0000,0000,0000,,to store the objects, so it renames the file to its own shasum Dialogue: 0,0:17:08.13,0:17:12.67,Default,,0000,0000,0000,,which allows you to always verify the data even without git-annex Dialogue: 0,0:17:12.90,0:17:16.61,Default,,0000,0000,0000,,you are able to say by means of globbing... Dialogue: 0,0:17:16.61,0:17:22.44,Default,,0000,0000,0000,,which files, or which directory, or which types of files should have how many copies in different repositories Dialogue: 0,0:17:22.44,0:17:24.20,Default,,0000,0000,0000,,so for example what I do: Dialogue: 0,0:17:24.20,0:17:27.86,Default,,0000,0000,0000,,all my raw files, all theraw photographs are in at least three different locations, Dialogue: 0,0:17:28.00,0:17:31.80,Default,,0000,0000,0000,,all the JPEGs are only in two, because JPEGs can be regenerated Dialogue: 0,0:17:31.80,0:17:32.91,Default,,0000,0000,0000,,raws can not. Dialogue: 0,0:17:34.48,0:17:37.54,Default,,0000,0000,0000,,All remotes and all special remotes can always be verified Dialogue: 0,0:17:37.54,0:17:40.97,Default,,0000,0000,0000,,with special remotes this may take quite some bandwidth Dialogue: 0,0:17:40.97,0:17:46.25,Default,,0000,0000,0000,,with actual normal git-annex remotes you run the verification locally Dialogue: 0,0:17:46.25,0:17:52.36,Default,,0000,0000,0000,,and just report back the results with obviously saves a lot of bandwidth and transfer time Dialogue: 0,0:17:53.94,0:17:58.10,Default,,0000,0000,0000,,verification obviously takes the amount of requires copies into account Dialogue: 0,0:17:58.10,0:18:00.51,Default,,0000,0000,0000,,so if you would have to have 3 different copies Dialogue: 0,0:18:00.51,0:18:04.68,Default,,0000,0000,0000,,and your whole repository cloud only has 2, it will complain Dialogue: 0,0:18:04.68,0:18:09.13,Default,,0000,0000,0000,,it will tell you "yes, checksum is great, but you don't have enough copies, please do something about it". Dialogue: 0,0:18:10.65,0:18:14.96,Default,,0000,0000,0000,,and even if you ? right now, delete all copies from git annex Dialogue: 0,0:18:14.96,0:18:18.76,Default,,0000,0000,0000,,you would still be able to get all your data out of git annex Dialogue: 0,0:18:18.76,0:18:23.58,Default,,0000,0000,0000,,because what it boils down to, in indirect mode, it's just symlinks to other objects Dialogue: 0,0:18:23.58,0:18:27.74,Default,,0000,0000,0000,,these objects have their own checksum as their file name Dialogue: 0,0:18:27.74,0:18:30.71,Default,,0000,0000,0000,,so you'll even be able to verify, without git-annex, Dialogue: 0,0:18:30.71,0:18:33.02,Default,,0000,0000,0000,,just by means of a little bit of shell scripting, Dialogue: 0,0:18:33.02,0:18:35.29,Default,,0000,0000,0000,,that all your files are correct, Dialogue: 0,0:18:35.48,0:18:38.95,Default,,0000,0000,0000,,that you don't have any bit flips or anything on your local disk. Dialogue: 0,0:18:40.02,0:18:44.28,Default,,0000,0000,0000,,direct mode doesn't really need a recovery ?, because... Dialogue: 0,0:18:44.79,0:18:48.31,Default,,0000,0000,0000,,the actual file is just in place of the symlink Dialogue: 0,0:18:52.34,0:18:54.98,Default,,0000,0000,0000,,but on the other hand you won't be... Dialogue: 0,0:18:55.35,0:18:59.42,Default,,0000,0000,0000,,you still need to look at the git-annex branch to determine the actual checksums Dialogue: 0,0:18:59.42,0:19:02.01,Default,,0000,0000,0000,,which you wouldn't have to do with the indirect mode. Dialogue: 0,0:19:03.22,0:19:07.85,Default,,0000,0000,0000,,There are a lot of special remotes. And what are special remotes? Dialogue: 0,0:19:07.85,0:19:11.42,Default,,0000,0000,0000,,these are able to store data in non git-annex remotes Dialogue: 0,0:19:11.42,0:19:16.05,Default,,0000,0000,0000,,because, let's face it, on most servers, or most servers where you could store data Dialogue: 0,0:19:16.05,0:19:19.34,Default,,0000,0000,0000,,you aren't actually able to get a shell and execute commands Dialogue: 0,0:19:19.34,0:19:22.07,Default,,0000,0000,0000,,you can just push data to it, you can receive data Dialogue: 0,0:19:22.07,0:19:25.36,Default,,0000,0000,0000,,but you cannot actually execute anything on this computer. Dialogue: 0,0:19:26.79,0:19:28.97,Default,,0000,0000,0000,,That's what special remotes are for. Dialogue: 0,0:19:30.40,0:19:33.69,Default,,0000,0000,0000,,All special remotes support encrypted data storage Dialogue: 0,0:19:33.69,0:19:37.12,Default,,0000,0000,0000,,so you just gpg encrypt your data and then send it off Dialogue: 0,0:19:37.12,0:19:41.66,Default,,0000,0000,0000,,which means that the remotes can only see the file names Dialogue: 0,0:19:41.66,0:19:46.20,Default,,0000,0000,0000,,but they cannot see anything else about the contents of your files Dialogue: 0,0:19:46.20,0:19:51.80,Default,,0000,0000,0000,,obviously you don't want to trust amazon or anyone to store your plain text data Dialogue: 0,0:19:51.80,0:19:53.80,Default,,0000,0000,0000,,that would just be stupid Dialogue: 0,0:19:53.80,0:19:59.26,Default,,0000,0000,0000,,There is a hook system, which allows you to write a lot of new special remotes Dialogue: 0,0:19:59.26,0:20:05.88,Default,,0000,0000,0000,,you'll see a list of... quite an extensive list of stuff in a second Dialogue: 0,0:20:05.88,0:20:10.65,Default,,0000,0000,0000,,Normal, built-in, special remotes which are supported by haskell out of the box Dialogue: 0,0:20:11.02,0:20:12.55,Default,,0000,0000,0000,,by git-annex out of the box Dialogue: 0,0:20:12.55,0:20:15.47,Default,,0000,0000,0000,,and actually implemented in haskell Dialogue: 0,0:20:15.70,0:20:21.86,Default,,0000,0000,0000,,are Amazon Glacier, Amazion S3, bup, directory — a normal directory on your system Dialogue: 0,0:20:21.86,0:20:26.72,Default,,0000,0000,0000,,rsync, webdav, http or ftp and the hook system Dialogue: 0,0:20:28.39,0:20:31.68,Default,,0000,0000,0000,,there is a guy who brought most of those Dialogue: 0,0:20:32.09,0:20:37.00,Default,,0000,0000,0000,,we can support archive.org, IMAP, box.com, Google Drive... you can read them yourself, I mean... Dialogue: 0,0:20:37.14,0:20:41.26,Default,,0000,0000,0000,,but those are quite a lot of different special remotes, if you... Dialogue: 0,0:20:41.26,0:20:49.41,Default,,0000,0000,0000,,already have storage on any of those services, just start pushing encrypted data to it if you want, and you're basically done. Dialogue: 0,0:20:51.68,0:20:54.83,Default,,0000,0000,0000,,There is an ongoing project called the git-annex assistant Dialogue: 0,0:20:55.11,0:20:58.63,Default,,0000,0000,0000,,last year, and I think this year it just ended, didn't it? Dialogue: 0,0:20:59.65,0:21:05.30,Default,,0000,0000,0000,,so, pretty much exactly one year ago Joey has started to to raise funds Dialogue: 0,0:21:05.39,0:21:12.06,Default,,0000,0000,0000,,by means of a kickstarter to just focus on writing git-annex assistant for a few months Dialogue: 0,0:21:12.66,0:21:15.30,Default,,0000,0000,0000,,he got so much that he could do it for a whole year Dialogue: 0,0:21:15.30,0:21:22.62,Default,,0000,0000,0000,,and he's just restarted the whole thing with his own fundraising campaign without kickstarter and he got another full year Dialogue: 0,0:21:24.06,0:21:32.53,Default,,0000,0000,0000,,yeah... are you still accepting funds? Dialogue: 0,0:21:33.60,0:21:38.00,Default,,0000,0000,0000,,ok, so, if you use it at least consider donating Dialogue: 0,0:21:38.00,0:21:44.11,Default,,0000,0000,0000,,because honesty you can't write patches for it anyway, because it's in haskell, so... Dialogue: 0,0:21:44.11,0:21:48.60,Default,,0000,0000,0000,,that's... the other means of actually contributing Dialogue: 0,0:21:53.09,0:21:57.49,Default,,0000,0000,0000,,git-annex boils down to be a daemon, which runs in the background Dialogue: 0,0:21:58.10,0:22:03.19,Default,,0000,0000,0000,,and keeps track of all of your files, of newly added files Dialogue: 0,0:22:03.19,0:22:09.49,Default,,0000,0000,0000,,and then starts transferring those files, if configured to do so Dialogue: 0,0:22:09.49,0:22:14.58,Default,,0000,0000,0000,,it starts transferring files to other people or to other repositories Dialogue: 0,0:22:15.05,0:22:17.82,Default,,0000,0000,0000,,this is all managed by means of a web gui Dialogue: 0,0:22:17.82,0:22:25.88,Default,,0000,0000,0000,,which in turns means that it's really, well, not easy, but easier to port to for example windows or android Dialogue: 0,0:22:25.88,0:22:28.24,Default,,0000,0000,0000,,which both work, to some extent Dialogue: 0,0:22:28.89,0:22:33.01,Default,,0000,0000,0000,,not fully, but they are useful, or useable, more or less Dialogue: 0,0:22:34.27,0:22:39.92,Default,,0000,0000,0000,,at least on android it's really quite good, I couldn't test it on windows, because... Dialogue: 0,0:22:41.12,0:22:44.87,Default,,0000,0000,0000,,and it also makes it accessible for non technical users Dialogue: 0,0:22:44.87,0:22:50.01,Default,,0000,0000,0000,,so for example if you want to share some of your photographs with your parents Dialogue: 0,0:22:50.01,0:22:54.32,Default,,0000,0000,0000,,or with friends, or if you want to share, I don't know, videos with other people Dialogue: 0,0:22:54.32,0:22:56.54,Default,,0000,0000,0000,,you just put them into one of those repositories Dialogue: 0,0:22:56.54,0:23:02.28,Default,,0000,0000,0000,,and even those non-technical people just magically see stuff appear in their own repository Dialogue: 0,0:23:02.28,0:23:04.28,Default,,0000,0000,0000,,and can just pull the data if they want to Dialogue: 0,0:23:04.28,0:23:08.17,Default,,0000,0000,0000,,or if you configured it to do so, it would it would even transfer all the data automatically Dialogue: 0,0:23:08.91,0:23:13.49,Default,,0000,0000,0000,,which is... it's ? Dialogue: 0,0:23:14.70,0:23:20.02,Default,,0000,0000,0000,,It supports content notifications, but not content transfer Dialogue: 0,0:23:20.02,0:23:22.24,Default,,0000,0000,0000,,by means of xmpp or jabber Dialogue: 0,0:23:22.24,0:23:26.51,Default,,0000,0000,0000,,which used to work quite well with google talk, I think it's not... Dialogue: 0,0:23:27.52,0:23:29.15,Default,,0000,0000,0000,,oh, it still works, ok Dialogue: 0,0:23:29.56,0:23:36.74,Default,,0000,0000,0000,,at least at the moment, we'll see when they just ? google ? with google+, but... Dialogue: 0,0:23:37.81,0:23:43.22,Default,,0000,0000,0000,,at least at the moment it still works, if you have a google account you can simply transfer all your data Dialogue: 0,0:23:43.22,0:23:49.25,Default,,0000,0000,0000,,you can transfer the metadata about your data, you cannot actually transfer the files through jabber Dialogue: 0,0:23:49.25,0:23:54.06,Default,,0000,0000,0000,,but that's probably something which will happen within the next year Dialogue: 0,0:23:54.85,0:23:58.04,Default,,0000,0000,0000,,there are quite ? rulesets for content distribution Dialogue: 0,0:23:58.04,0:24:03.97,Default,,0000,0000,0000,,so for example I can show you... Dialogue: 0,0:24:03.97,0:24:10.55,Default,,0000,0000,0000,,you can say "put all raw files into this archive, and all jpegs on my laptop", or whatever Dialogue: 0,0:24:10.55,0:24:15.74,Default,,0000,0000,0000,,or "if I still have more than 500 GB free on this please put data in Dialogue: 0,0:24:15.74,0:24:21.48,Default,,0000,0000,0000,,and as soon as only have 20 left stop putting data into this one repository" Dialogue: 0,0:24:21.48,0:24:24.07,Default,,0000,0000,0000,,which obviously is quite convenient Dialogue: 0,0:24:24.07,0:24:27.64,Default,,0000,0000,0000,,as I said there is a windows port, and now on to usecases. Dialogue: 0,0:24:28.15,0:24:30.23,Default,,0000,0000,0000,,First usecase: the archivist. Dialogue: 0,0:24:30.69,0:24:34.03,Default,,0000,0000,0000,,What the archivist does is: basically he just collects data Dialogue: 0,0:24:34.03,0:24:37.60,Default,,0000,0000,0000,,either to ? or just to collect Dialogue: 0,0:24:38.10,0:24:43.25,Default,,0000,0000,0000,,and if you have this usecase what you probably want to do, you want to have offline disks Dialogue: 0,0:24:43.34,0:24:47.37,Default,,0000,0000,0000,,to store at your mom's, or to put into a drawer Dialogue: 0,0:24:47.37,0:24:52.79,Default,,0000,0000,0000,,or just you don't have enough sata ports in your computer because you just have so much data Dialogue: 0,0:24:53.20,0:24:59.55,Default,,0000,0000,0000,,so, what you can do is you can just push this data to either connected machines or to disconnected drives... Dialogue: 0,0:24:59.55,0:25:02.14,Default,,0000,0000,0000,,or to some webservice, and just store data Dialogue: 0,0:25:02.14,0:25:06.40,Default,,0000,0000,0000,,but normally you would have the problem of keeping track of where your data lives Dialogue: 0,0:25:06.40,0:25:08.76,Default,,0000,0000,0000,,if it's still ok, if it's still there, everything. Dialogue: 0,0:25:08.76,0:25:16.27,Default,,0000,0000,0000,,With git-annex you can automate all this administrative side of archiving your stuff. Dialogue: 0,0:25:17.24,0:25:22.33,Default,,0000,0000,0000,,Even if you only have one of those disks, if they're a proper remote... Dialogue: 0,0:25:22.33,0:25:27.06,Default,,0000,0000,0000,,you'll have full informations about all the data in your annex cloud up to this point Dialogue: 0,0:25:27.06,0:25:32.80,Default,,0000,0000,0000,,so even if you only pull out one random disk you still have informations on all the other disks on this one disk Dialogue: 0,0:25:32.80,0:25:36.13,Default,,0000,0000,0000,,which obviously is a nice thing. Dialogue: 0,0:25:36.60,0:25:38.13,Default,,0000,0000,0000,,Media consumption. Dialogue: 0,0:25:38.13,0:25:44.89,Default,,0000,0000,0000,,Let's say you pull a video of this talk, or you get some slides... Dialogue: 0,0:25:44.89,0:25:47.81,Default,,0000,0000,0000,,maybe also from this talk, you can get some podcasts... Dialogue: 0,0:25:47.81,0:25:52.95,Default,,0000,0000,0000,,and git-annex has become a native podcatcher quite recently, I thing two or three weeks ago Dialogue: 0,0:25:52.95,0:25:55.86,Default,,0000,0000,0000,,which means you don't even have a separate podcatcher Dialogue: 0,0:25:56.65,0:26:02.30,Default,,0000,0000,0000,,you just tell git-annex "this is all of my rss feeds" and it will just pull in all the content, Dialogue: 0,0:26:02.86,0:26:08.32,Default,,0000,0000,0000,,Then you can synchronize all this data for example to your cellphone, or your tablet, or whatever Dialogue: 0,0:26:08.32,0:26:14.25,Default,,0000,0000,0000,,consume the data on any of your devices, even if you have 10 copies of this particular podcast Dialogue: 0,0:26:14.25,0:26:16.94,Default,,0000,0000,0000,,because you didn't get around to listen to it on your computer... Dialogue: 0,0:26:17.17,0:26:20.22,Default,,0000,0000,0000,,and you didn't get around to listen to it on your cellphone Dialogue: 0,0:26:20.22,0:26:21.89,Default,,0000,0000,0000,,but then on your tablet you did listen to it Dialogue: 0,0:26:21.89,0:26:24.76,Default,,0000,0000,0000,,you have three copies of this file which you don't need anymore... Dialogue: 0,0:26:24.76,0:26:27.87,Default,,0000,0000,0000,,because you have listened to the content and you don't care about the content anymore Dialogue: 0,0:26:27.87,0:26:33.61,Default,,0000,0000,0000,,what you do is you drop this content on one random repository Dialogue: 0,0:26:33.61,0:26:37.73,Default,,0000,0000,0000,,and this information that you have dropped the actual content, Dialogue: 0,0:26:37.73,0:26:41.71,Default,,0000,0000,0000,,not the metadata about the content, but the actual content, you don't need the content anymore... Dialogue: 0,0:26:41.71,0:26:47.27,Default,,0000,0000,0000,,will slowly propagate to all of the annexes and if they have the data they will also drop the data Dialogue: 0,0:26:47.27,0:26:52.83,Default,,0000,0000,0000,,so you don't have to really care about keeping track of those things Dialogue: 0,0:26:52.83,0:26:56.49,Default,,0000,0000,0000,,you can simply have this message propagate Dialogue: 0,0:26:56.90,0:27:00.52,Default,,0000,0000,0000,,do you want to comment? can someone give Joey a microphone? Dialogue: 0,0:27:07.18,0:27:09.50,Default,,0000,0000,0000,,Just a minor correction Dialogue: 0,0:27:09.50,0:27:11.63,Default,,0000,0000,0000,,it doesn't propagate that you've dropped the content Dialogue: 0,0:27:11.63,0:27:15.47,Default,,0000,0000,0000,,but you can move it around in ways that have exactly the effect you described Dialogue: 0,0:27:15.57,0:27:22.38,Default,,0000,0000,0000,,? get the wrong idea that if you accidentally remove one thing it will vanish from everything ? Dialogue: 0,0:27:22.61,0:27:25.52,Default,,0000,0000,0000,,but if you deliberately drop the content and tell the annex... Dialogue: 0,0:27:25.52,0:27:27.52,Default,,0000,0000,0000,,no. that's not how it works. Dialogue: 0,0:27:27.84,0:27:29.83,Default,,0000,0000,0000,,I want to talk about it later, but it's... Dialogue: 0,0:27:29.83,0:27:31.64,Default,,0000,0000,0000,,you looked at the slides, but... Dialogue: 0,0:27:31.64,0:27:33.30,Default,,0000,0000,0000,,sorry, ? Dialogue: 0,0:27:34.65,0:27:37.01,Default,,0000,0000,0000,,He watches for everything which is ? Dialogue: 0,0:27:46.83,0:27:55.21,Default,,0000,0000,0000,,Next thing, if you are on the road, and one usecase which is probably quite common: taking pictures while you are on the road ? Dialogue: 0,0:27:55.49,0:27:57.67,Default,,0000,0000,0000,,You take your pictures, you save them to your annex Dialogue: 0,0:27:57.67,0:28:01.00,Default,,0000,0000,0000,,where you are able to store them back to your server or wherever Dialogue: 0,0:28:01.00,0:28:06.93,Default,,0000,0000,0000,,if you want to, and even if for example one disk gets ? Dialogue: 0,0:28:06.93,0:28:09.06,Default,,0000,0000,0000,,and you lose part of your content, Dialogue: 0,0:28:09.06,0:28:13.97,Default,,0000,0000,0000,,you'll still at least be able to have an overview of what content used to be in your annex Dialogue: 0,0:28:13.97,0:28:20.54,Default,,0000,0000,0000,,and if you then pull out your old SD card and see "oh, that photo is still there" you can simply reimport it and it will magically reappear. Dialogue: 0,0:28:20.54,0:28:21.93,Default,,0000,0000,0000,,What it also does is: Dialogue: 0,0:28:21.93,0:28:23.88,Default,,0000,0000,0000,,if you have a very tiny computer with you Dialogue: 0,0:28:23.88,0:28:29.16,Default,,0000,0000,0000,,you can, as soon as you are at an internet cafe, just sync up with your server or your storage, whatever Dialogue: 0,0:28:29.16,0:28:34.11,Default,,0000,0000,0000,,and push out the data to your remotes Dialogue: 0,0:28:34.11,0:28:38.51,Default,,0000,0000,0000,,which then means you'll have two or three or five copies of the data Dialogue: 0,0:28:38.51,0:28:41.48,Default,,0000,0000,0000,,and git-annex keeps track of what is where for you Dialogue: 0,0:28:41.48,0:28:45.41,Default,,0000,0000,0000,,so you don't have to worry about copying stuff around. Dialogue: 0,0:28:47.59,0:28:50.83,Default,,0000,0000,0000,,And then there is one personal usecase, for photographs Dialogue: 0,0:28:51.67,0:28:55.79,Default,,0000,0000,0000,,I have a very specific way of organizing my photographs Dialogue: 0,0:28:55.79,0:28:58.15,Default,,0000,0000,0000,,my wife disagrees violently Dialogue: 0,0:28:59.72,0:29:03.38,Default,,0000,0000,0000,,she likes to do her photo storage in a completely different way Dialogue: 0,0:29:03.38,0:29:04.73,Default,,0000,0000,0000,,she doesn't care about the raw files Dialogue: 0,0:29:04.73,0:29:12.46,Default,,0000,0000,0000,,and she doesn't care about all the documentation pictures of signposts or whatever which I just took to remember which cities we went through Dialogue: 0,0:29:12.46,0:29:18.90,Default,,0000,0000,0000,,so what she can do is she can simply delete the actual files or ? the symlink of this file Dialogue: 0,0:29:18.90,0:29:21.72,Default,,0000,0000,0000,,and it will disappear from her own annex Dialogue: 0,0:29:21.72,0:29:24.27,Default,,0000,0000,0000,,she can then commit all this Dialogue: 0,0:29:24.27,0:29:29.78,Default,,0000,0000,0000,,normally if she would sync back the data I would also have the same layout, which I don't want Dialogue: 0,0:29:29.78,0:29:33.67,Default,,0000,0000,0000,,expecially since she tends to rename everything a lot Dialogue: 0,0:29:33.67,0:29:38.90,Default,,0000,0000,0000,,but what I did, I set up a rebasing branch on top of my normal git-annex repository Dialogue: 0,0:29:38.90,0:29:43.07,Default,,0000,0000,0000,,so what she gets is: she has her own view of the whole data Dialogue: 0,0:29:43.07,0:29:44.60,Default,,0000,0000,0000,,or the part she cares about Dialogue: 0,0:29:44.83,0:29:47.06,Default,,0000,0000,0000,,and when I add new content Dialogue: 0,0:29:47.06,0:29:51.04,Default,,0000,0000,0000,,she will see the new content, she will rearrange the content however she pleases Dialogue: 0,0:29:51.04,0:29:52.71,Default,,0000,0000,0000,,but as it's a rebasing branch Dialogue: 0,0:29:52.71,0:29:56.36,Default,,0000,0000,0000,,all her changes will always be replayed on top of master Dialogue: 0,0:29:58.73,0:30:02.01,Default,,0000,0000,0000,,so she has her own view, and I don't even notice her own view Dialogue: 0,0:30:02.01,0:30:08.27,Default,,0000,0000,0000,,but even if she uses one of the other computers she would have the same view which she herself has Dialogue: 0,0:30:08.27,0:30:11.60,Default,,0000,0000,0000,,so basically she has her own view all of the data Dialogue: 0,0:30:11.60,0:30:14.57,Default,,0000,0000,0000,,This is very convenient to keep the peace at home. Dialogue: 0,0:30:16.88,0:30:18.83,Default,,0000,0000,0000,,Next topic: vcsh. Dialogue: 0,0:30:20.40,0:30:23.27,Default,,0000,0000,0000,,Most of you here probably have some sort of system... Dialogue: 0,0:30:23.27,0:30:26.61,Default,,0000,0000,0000,,where they have one subversion or cvs or whatever repository Dialogue: 0,0:30:26.61,0:30:29.62,Default,,0000,0000,0000,,and they have it somewhere in their home directory Dialogue: 0,0:30:29.62,0:30:35.96,Default,,0000,0000,0000,,you symlink into various places in your home directory, and it kind of keeps working so you don't throw it away, but... Dialogue: 0,0:30:35.96,0:30:39.25,Default,,0000,0000,0000,,to be honest it sucks. Here is why. Dialogue: 0,0:30:40.55,0:30:43.09,Default,,0000,0000,0000,,Or, here's why in a second. Dialogue: 0,0:30:43.51,0:30:46.98,Default,,0000,0000,0000,,vcsh is implemented in POSIX, which is very very portable Dialogue: 0,0:30:46.98,0:30:52.40,Default,,0000,0000,0000,,it's based on git, but it's not directly git Dialogue: 0,0:30:52.40,0:30:57.45,Default,,0000,0000,0000,,The one thing which git is not able to do is maintain several different working copies into one dicrrectory Dialogue: 0,0:30:57.45,0:31:00.32,Default,,0000,0000,0000,,which is a safety feature, more on that later Dialogue: 0,0:31:00.32,0:31:05.79,Default,,0000,0000,0000,,but this really sucks if you want to maintain your mplayer, your shell, your whatever configuration Dialogue: 0,0:31:05.79,0:31:10.79,Default,,0000,0000,0000,,in your home directory, which is the obvious and only real place where it makes sense to put your configuration Dialogue: 0,0:31:10.79,0:31:14.08,Default,,0000,0000,0000,,you don't want to put it into dot-dot-files and then symlink back Dialogue: 0,0:31:14.08,0:31:18.01,Default,,0000,0000,0000,,you want to have it in your home directory as actual files. Dialogue: 0,0:31:18.01,0:31:21.07,Default,,0000,0000,0000,,So, vcsh uses fake bare git repositories Dialogue: 0,0:31:21.07,0:31:22.83,Default,,0000,0000,0000,,again, more on that on the next slide Dialogue: 0,0:31:22.83,0:31:25.24,Default,,0000,0000,0000,,and it's basically a wrapper around git Dialogue: 0,0:31:25.24,0:31:30.93,Default,,0000,0000,0000,,which makes git do stuff which it normally wouldn't do Dialogue: 0,0:31:30.93,0:31:36.12,Default,,0000,0000,0000,,and it has a quite extensible and useful hook system which ? will care about Dialogue: 0,0:31:36.91,0:31:42.37,Default,,0000,0000,0000,,Whith a normal git repository you have two really defining variables within git Dialogue: 0,0:31:42.37,0:31:44.37,Default,,0000,0000,0000,,you have the work tree Dialogue: 0,0:31:44.37,0:31:46.22,Default,,0000,0000,0000,,which is where your actual files live Dialogue: 0,0:31:46.54,0:31:50.71,Default,,0000,0000,0000,,and you have the $GIT_DIR, where the actual data lives Dialogue: 0,0:31:50.71,0:31:55.90,Default,,0000,0000,0000,,normaly in a normal checkout you just have your directory and .git under this Dialogue: 0,0:31:57.43,0:32:01.50,Default,,0000,0000,0000,,If you have a bare repository you obviously don't have an actual checkout of your data Dialogue: 0,0:32:01.50,0:32:05.53,Default,,0000,0000,0000,,you have just all the objects and the configuration stuff Dialogue: 0,0:32:05.53,0:32:09.19,Default,,0000,0000,0000,,so that's what a bare repository boils down to being Dialogue: 0,0:32:09.65,0:32:12.71,Default,,0000,0000,0000,,A fake bare git repository on the other hand has both Dialogue: 0,0:32:12.71,0:32:15.12,Default,,0000,0000,0000,,it has a $GIT_WORK_TREE and it has a $GIT_DIR Dialogue: 0,0:32:15.12,0:32:16.92,Default,,0000,0000,0000,,but those are detached from each other Dialogue: 0,0:32:16.92,0:32:19.52,Default,,0000,0000,0000,,they don't have to be closely tied together Dialogue: 0,0:32:19.89,0:32:26.46,Default,,0000,0000,0000,,and also sets core.bare = false, to actually tell git that "yes, this is a real setup, but..." Dialogue: 0,0:32:26.46,0:32:31.46,Default,,0000,0000,0000,,"yes, you still have a work tree, even thought you don't really expect it" Dialogue: 0,0:32:31.46,0:32:33.46,Default,,0000,0000,0000,,"to have one, you still have a work tree". Dialogue: 0,0:32:34.80,0:32:38.46,Default,,0000,0000,0000,,By default vcsh puts your work tree into home Dialogue: 0,0:32:38.46,0:32:40.08,Default,,0000,0000,0000,,and your git dir into... Dialogue: 0,0:32:40.08,0:32:45.08,Default,,0000,0000,0000,,it's based on .config/vcsh/repo.d and then the name of the repository Dialogue: 0,0:32:45.08,0:32:49.80,Default,,0000,0000,0000,,which just puts it away and out the way of you actually seeing stuff Dialogue: 0,0:32:49.80,0:32:54.67,Default,,0000,0000,0000,,but it follows the cross desktop specifications so if you move stuff around it will also follow Dialogue: 0,0:32:55.13,0:32:57.03,Default,,0000,0000,0000,,Fake bare repositories are really... Dialogue: 0,0:32:58.19,0:33:01.89,Default,,0000,0000,0000,,are messy to setup, and it's very easy to get them wrong Dialogue: 0,0:33:02.03,0:33:07.36,Default,,0000,0000,0000,,that is also the reason why git normally disallows this kind of stuff Dialogue: 0,0:33:07.59,0:33:10.00,Default,,0000,0000,0000,,because all of a sudden you have a lot of... Dialogue: 0,0:33:10.00,0:33:12.59,Default,,0000,0000,0000,,context-dependency on when you do what Dialogue: 0,0:33:12.59,0:33:14.59,Default,,0000,0000,0000,,just immagine you set git workdir... Dialogue: 0,0:33:14.86,0:33:16.34,Default,,0000,0000,0000,,$GIT_WORK_DIR, sorry Dialogue: 0,0:33:16.34,0:33:19.58,Default,,0000,0000,0000,,and run random commands like git add, that's... Dialogue: 0,0:33:19.58,0:33:25.74,Default,,0000,0000,0000,,kind of ok, if you git reset --hard you'll probably not be to happy Dialogue: 0,0:33:25.74,0:33:28.80,Default,,0000,0000,0000,,you checkout the current version that's also quite bad Dialogue: 0,0:33:28.80,0:33:32.41,Default,,0000,0000,0000,,and if you clean -f, yeah, you just throw the home directory Dialogue: 0,0:33:32.41,0:33:33.62,Default,,0000,0000,0000,,congratulations Dialogue: 0,0:33:33.62,0:33:39.03,Default,,0000,0000,0000,,So, it's really risky to run with these variables set Dialogue: 0,0:33:39.36,0:33:43.76,Default,,0000,0000,0000,,which is why I wrote vcsh to wrap around git Dialogue: 0,0:33:44.13,0:33:49.69,Default,,0000,0000,0000,,to hide all this complexity and do quite some sanity checks to make sure everything's set up correctly Dialogue: 0,0:33:50.06,0:33:57.47,Default,,0000,0000,0000,,again it allows you to have several repositories and it also manages really the complete lifecycle of all your repositories Dialogue: 0,0:33:57.47,0:34:02.70,Default,,0000,0000,0000,,it's very easy to just create a new repository, you just init, just with git Dialogue: 0,0:34:02.70,0:34:08.35,Default,,0000,0000,0000,,you add stuff, you commit it, and you define a remote and start pushing to this remote Dialogue: 0,0:34:08.67,0:34:09.97,Default,,0000,0000,0000,,simple Dialogue: 0,0:34:11.22,0:34:14.37,Default,,0000,0000,0000,,This looks like git because it's very closely tight to git Dialogue: 0,0:34:14.37,0:34:19.19,Default,,0000,0000,0000,,and it uses a lot of the power or of the syntax of git, for obvious reasons Dialogue: 0,0:34:19.28,0:34:21.97,Default,,0000,0000,0000,,because... it's closely tight to git Dialogue: 0,0:34:21.97,0:34:25.25,Default,,0000,0000,0000,,you can simply clone as you would with git Dialogue: 0,0:34:25.25,0:34:27.89,Default,,0000,0000,0000,,you can simply show your files as you would with git Dialogue: 0,0:34:27.89,0:34:31.69,Default,,0000,0000,0000,,you can rename the repository, which git can't do, but you don't have to Dialogue: 0,0:34:31.69,0:34:34.24,Default,,0000,0000,0000,,you can show the status of all your files Dialogue: 0,0:34:34.24,0:34:36.24,Default,,0000,0000,0000,,or just of one of your repositories Dialogue: 0,0:34:36.24,0:34:37.71,Default,,0000,0000,0000,,or of all repositories Dialogue: 0,0:34:37.90,0:34:44.06,Default,,0000,0000,0000,,you can pull in all your repositories at once, you can push all of your repositories at once Dialogue: 0,0:34:44.06,0:34:45.54,Default,,0000,0000,0000,,with one single command Dialogue: 0,0:34:47.11,0:34:51.93,Default,,0000,0000,0000,,so, if you are on the road, or you just want to sync up a new machine it's really quick, it's really easy Dialogue: 0,0:34:53.46,0:34:57.16,Default,,0000,0000,0000,,There are three modes of dealing with your repositories Dialogue: 0,0:34:57.16,0:34:59.02,Default,,0000,0000,0000,,default mode is the quickest to type Dialogue: 0,0:34:59.02,0:35:04.30,Default,,0000,0000,0000,,you just say vcsh zsh commit whatever or any random git command Dialogue: 0,0:35:04.53,0:35:06.30,Default,,0000,0000,0000,,but you cannot really run gitk Dialogue: 0,0:35:06.30,0:35:09.67,Default,,0000,0000,0000,,you can do this by using the run mode, which is the second mode Dialogue: 0,0:35:09.67,0:35:14.07,Default,,0000,0000,0000,,we simply ? here run is missing and here git is missing Dialogue: 0,0:35:14.07,0:35:18.70,Default,,0000,0000,0000,,so you say simply vcsh run zsh git commit whatever Dialogue: 0,0:35:18.70,0:35:25.88,Default,,0000,0000,0000,,and this is exactly the same command, it's literally the same comand once it arrives at the shell level, so to speak Dialogue: 0,0:35:25.88,0:35:28.56,Default,,0000,0000,0000,,here you can also run gitk, because... Dialogue: 0,0:35:28.56,0:35:33.84,Default,,0000,0000,0000,,with this, you set up the whole environment for one single command to run with this context Dialogue: 0,0:35:33.84,0:35:37.18,Default,,0000,0000,0000,,of the changed environment variables Dialogue: 0,0:35:37.18,0:35:41.72,Default,,0000,0000,0000,,or you could even enter the repository, then you set all the variables Dialogue: 0,0:35:42.18,0:35:45.79,Default,,0000,0000,0000,,and then you can just use normal git commands as you would normally Dialogue: 0,0:35:45.79,0:35:47.51,Default,,0000,0000,0000,,this is the most powerful mode, Dialogue: 0,0:35:47.51,0:35:51.72,Default,,0000,0000,0000,,but it's also the most likely to hurt you if you don't know what you're doing Dialogue: 0,0:35:51.72,0:35:54.59,Default,,0000,0000,0000,,so I don't recommend working ? down this way. Dialogue: 0,0:35:56.58,0:36:03.62,Default,,0000,0000,0000,,You should have your shell display prompt information about being in a vcsh repository or not Dialogue: 0,0:36:04.32,0:36:08.02,Default,,0000,0000,0000,,simply because else you may forget that you entered something Dialogue: 0,0:36:08.02,0:36:13.63,Default,,0000,0000,0000,,and then if you run those commands, there will be pain Dialogue: 0,0:36:17.70,0:36:22.33,Default,,0000,0000,0000,,At once the usecases, which will be possible quite soon Dialogue: 0,0:36:22.33,0:36:28.58,Default,,0000,0000,0000,,we can just combine vcsh with git-annex to manage everything which is not configuration files in your own home directory Dialogue: 0,0:36:28.58,0:36:35.39,Default,,0000,0000,0000,,? basically two programs to sync everything about all of your home directory Dialogue: 0,0:36:35.39,0:36:37.39,Default,,0000,0000,0000,,without having to do any extra work Dialogue: 0,0:36:38.22,0:36:40.81,Default,,0000,0000,0000,,you can also use it to do really wierd stuff Dialogue: 0,0:36:40.81,0:36:46.32,Default,,0000,0000,0000,,for example you can backup a .git of a different repository with the help of vcsh Dialogue: 0,0:36:46.32,0:36:51.74,Default,,0000,0000,0000,,so you can just go in, change objects or anything, break stuff and just replay whatever you're doing Dialogue: 0,0:36:51.74,0:36:55.72,Default,,0000,0000,0000,,just to try and see how it breaks in interesting ways. Dialogue: 0,0:36:56.00,0:37:01.88,Default,,0000,0000,0000,,You can just backup a working copy which is maintained by a different reopository or a different system Dialogue: 0,0:37:02.16,0:37:06.98,Default,,0000,0000,0000,,you can even put a whole repository, including the .git, Dialogue: 0,0:37:06.98,0:37:08.46,Default,,0000,0000,0000,,into a different git file Dialogue: 0,0:37:08.46,0:37:13.14,Default,,0000,0000,0000,,or you can even put other VCSs like subversion or something into git, if you want to. Dialogue: 0,0:37:14.30,0:37:15.59,Default,,0000,0000,0000,,Then there is mr. Dialogue: 0,0:37:15.59,0:37:17.68,Default,,0000,0000,0000,,mr ties all those... Dialogue: 0,0:37:17.68,0:37:22.68,Default,,0000,0000,0000,,hopefully by now you have about twenty new repositories Dialogue: 0,0:37:22.68,0:37:25.78,Default,,0000,0000,0000,,because you have configuration, you have ikiwiki, you have everything Dialogue: 0,0:37:25.92,0:37:28.98,Default,,0000,0000,0000,,so now you need something to syncronize all those repositories Dialogue: 0,0:37:28.98,0:37:32.40,Default,,0000,0000,0000,,because doing it by hand is just a lot of work Dialogue: 0,0:37:34.77,0:37:40.97,Default,,0000,0000,0000,,mr supports push, pull, commit operations for all the major known version control systems Dialogue: 0,0:37:40.97,0:37:44.63,Default,,0000,0000,0000,,allowing you to have one single interface to operate on all your systems Dialogue: 0,0:37:44.95,0:37:48.57,Default,,0000,0000,0000,,It's quite trivial to write support for new systems Dialogue: 0,0:37:48.57,0:37:52.32,Default,,0000,0000,0000,,I think it took me about two hours to support vcsh natively Dialogue: 0,0:37:52.32,0:37:54.32,Default,,0000,0000,0000,,so, that's really quick Dialogue: 0,0:37:54.32,0:37:57.04,Default,,0000,0000,0000,,If you want to try, the stuff which I told you about... Dialogue: 0,0:37:57.04,0:38:04.73,Default,,0000,0000,0000,,in the links later there will be the possibility to just clone a subrepository for vcsh Dialogue: 0,0:38:04.96,0:38:09.92,Default,,0000,0000,0000,,which will then put up a suggested mr directory layout Dialogue: 0,0:38:09.92,0:38:11.92,Default,,0000,0000,0000,,and you can just work from there Dialogue: 0,0:38:11.92,0:38:16.22,Default,,0000,0000,0000,,This is the... alright, it's my suggested layout Dialogue: 0,0:38:16.22,0:38:17.51,Default,,0000,0000,0000,,which basically... Dialogue: 0,0:38:17.88,0:38:21.68,Default,,0000,0000,0000,,you just include everything in config.d you maintain... Dialogue: 0,0:38:21.68,0:38:30.34,Default,,0000,0000,0000,,your available.d, by means of vcsh, so you simply sync around all your content between all the different computers Dialogue: 0,0:38:30.34,0:38:35.02,Default,,0000,0000,0000,,and then you simply soft link from available to the actual config Dialogue: 0,0:38:35.02,0:38:39.37,Default,,0000,0000,0000,,which is basically what apache does with sites.enabled and sites.available Dialogue: 0,0:38:39.37,0:38:42.66,Default,,0000,0000,0000,,or modules.available and modules.enabled Dialogue: 0,0:38:42.66,0:38:44.66,Default,,0000,0000,0000,,which is really really powerful Dialogue: 0,0:38:45.02,0:38:48.40,Default,,0000,0000,0000,,Last thing is not git based, but zsh. Dialogue: 0,0:38:48.63,0:38:51.69,Default,,0000,0000,0000,,It's a really powerful shell, you should consider using it Dialogue: 0,0:38:51.69,0:38:56.00,Default,,0000,0000,0000,,it has very good tab complection for all the tools listed here, more than bash Dialogue: 0,0:38:56.00,0:39:00.03,Default,,0000,0000,0000,,it has a right prompt, which will automatically disappear if it needs to Dialogue: 0,0:39:00.03,0:39:04.84,Default,,0000,0000,0000,,which is very convenient to display not important but still useful information Dialogue: 0,0:39:04.84,0:39:11.05,Default,,0000,0000,0000,,and it will automatically, if you tell it to, tell you about you being in a git repository or subversion repository or whatever Dialogue: 0,0:39:11.05,0:39:12.30,Default,,0000,0000,0000,,by means of vcs.info Dialogue: 0,0:39:12.81,0:39:17.67,Default,,0000,0000,0000,,which also means you'll be told that at the moment you are in a vcsh repository Dialogue: 0,0:39:17.67,0:39:20.96,Default,,0000,0000,0000,,and you may kill your stuff if you do things wrong Dialogue: 0,0:39:20.96,0:39:22.96,Default,,0000,0000,0000,,it can mimic all the major shells Dialogue: 0,0:39:22.96,0:39:25.96,Default,,0000,0000,0000,,and there's just too many reasons to list Dialogue: 0,0:39:26.98,0:39:28.83,Default,,0000,0000,0000,,So... final pitch Dialogue: 0,0:39:28.83,0:39:34.30,Default,,0000,0000,0000,,This is true: I've tried it earlier, I can demo it, I still have five minutes left Dialogue: 0,0:39:34.30,0:39:38.93,Default,,0000,0000,0000,,it takes me less than five minutes to syncronize my complete, whole, digital life while on the road Dialogue: 0,0:39:38.93,0:39:44.26,Default,,0000,0000,0000,,so if I'm at the airport and just want to update all my stuff,and push out all my stuff... Dialogue: 0,0:39:44.26,0:39:47.27,Default,,0000,0000,0000,,it'll take a few minutes, but then I can hop on the airplane... Dialogue: 0,0:39:47.27,0:39:51.06,Default,,0000,0000,0000,,and I'll know everything is fine, everything is up-to-date on my local machine Dialogue: 0,0:39:51.06,0:39:56.62,Default,,0000,0000,0000,,on my laptop machine, I can continue working, and have a backup on my remote systems Dialogue: 0,0:39:57.04,0:39:59.21,Default,,0000,0000,0000,,These are the websites Dialogue: 0,0:39:59.77,0:40:08.01,Default,,0000,0000,0000,,The slides will be linked from penta, so you are more than welcome to look at these links later Dialogue: 0,0:40:08.01,0:40:12.04,Default,,0000,0000,0000,,There are previous talks, which you can also look at, if you want to Dialogue: 0,0:40:12.04,0:40:13.71,Default,,0000,0000,0000,,and that's pretty much it Dialogue: 0,0:40:13.71,0:40:16.91,Default,,0000,0000,0000,,and if you have any more questions afterwards either catch me... Dialogue: 0,0:40:16.91,0:40:20.93,Default,,0000,0000,0000,,or there is an IRC channel, and there is a mailing list Dialogue: 0,0:40:20.93,0:40:26.77,Default,,0000,0000,0000,,ok, we can take a few questions, we have still a few minutes Dialogue: 0,0:40:26.77,0:40:31.17,Default,,0000,0000,0000,,then if there are more questions ask Ritchie afterwards Dialogue: 0,0:40:31.82,0:40:36.36,Default,,0000,0000,0000,,And while we are doing this just look here, because that's a complete sync of everything I have Dialogue: 0,0:40:37.33,0:40:39.78,Default,,0000,0000,0000,,Just to make sure I understood this correctly, Dialogue: 0,0:40:39.78,0:40:48.68,Default,,0000,0000,0000,,with git-annex the point is that the data is stored dispersed over different local destinations, so to speak Dialogue: 0,0:40:48.68,0:40:53.21,Default,,0000,0000,0000,,but the metadata ? exists, ? complete git history Dialogue: 0,0:40:53.21,0:40:59.88,Default,,0000,0000,0000,,so git is able to tell me, "well, this version at that destination was changed at that time and so on and so on" Dialogue: 0,0:41:00.39,0:41:02.80,Default,,0000,0000,0000,,did I get this right or... Dialogue: 0,0:41:02.80,0:41:05.44,Default,,0000,0000,0000,,git will be able to tell you about changes... Dialogue: 0,0:41:05.44,0:41:07.76,Default,,0000,0000,0000,,ok, I don't have internet, sorry Dialogue: 0,0:41:07.76,0:41:11.83,Default,,0000,0000,0000,,git will be able to tell you about changes in the filenames, or directory structure Dialogue: 0,0:41:11.83,0:41:15.91,Default,,0000,0000,0000,,git-annex will be able to tell you about changes in the actual file content Dialogue: 0,0:41:15.91,0:41:17.44,Default,,0000,0000,0000,,or in moving around the files Dialogue: 0,0:41:17.44,0:41:21.65,Default,,0000,0000,0000,,but as one single unit, more or less, then yes... Dialogue: 0,0:41:22.07,0:41:24.80,Default,,0000,0000,0000,,the answer is yes, but not quite, but yes Dialogue: 0,0:41:24.80,0:41:32.35,Default,,0000,0000,0000,,yes, but ? all the things you asked about are in git, you know the previous location, all that stuff Dialogue: 0,0:41:32.35,0:41:39.11,Default,,0000,0000,0000,,but in a separate branch which you should use git-annex to access, but you can do it by hand if you want to Dialogue: 0,0:41:51.57,0:41:54.53,Default,,0000,0000,0000,,I'm not familiar with tracking branches, Dialogue: 0,0:41:54.53,0:41:58.33,Default,,0000,0000,0000,,yet you mention that the workflow for your wife has a different view of the data than you Dialogue: 0,0:41:58.33,0:42:06.67,Default,,0000,0000,0000,,with that workflow is it possible for your wife to upload photos that you will have in your view as well, or is it a oneway street? Dialogue: 0,0:42:07.22,0:42:12.73,Default,,0000,0000,0000,,minor correction: tracking branches track a different repository, Dialogue: 0,0:42:12.73,0:42:17.50,Default,,0000,0000,0000,,what I meant was rebasing branches, which rebase on top of a different branch Dialogue: 0,0:42:17.50,0:42:23.89,Default,,0000,0000,0000,,which basically just keeps the patches always on top of the branch, no matter where the head moves to Dialogue: 0,0:42:26.58,0:42:32.18,Default,,0000,0000,0000,,if she wanted to do that she would need to simply git checkout master Dialogue: 0,0:42:32.18,0:42:38.62,Default,,0000,0000,0000,,do whatever she wanted to do, and then git checkout her own branch, and then she's... Dialogue: 0,0:42:38.62,0:42:44.46,Default,,0000,0000,0000,,she is able to, but she would need to change into the master branch and then back Dialogue: 0,0:42:49.09,0:42:50.11,Default,,0000,0000,0000,,microphone Dialogue: 0,0:42:51.03,0:42:56.64,Default,,0000,0000,0000,,she never pushes her private branch? it always lives on her own machine? Dialogue: 0,0:42:56.64,0:43:01.69,Default,,0000,0000,0000,,no, she does push it, but I don't display this view of the data Dialogue: 0,0:43:02.70,0:43:07.52,Default,,0000,0000,0000,,because else she wouldn't be able to syncronize this view between different computers Dialogue: 0,0:43:08.08,0:43:11.78,Default,,0000,0000,0000,,I seem to have internet now, so let's just let this run in the background Dialogue: 0,0:43:13.68,0:43:15.02,Default,,0000,0000,0000,,any more questions? Dialogue: 0,0:43:23.36,0:43:24.56,Default,,0000,0000,0000,,no more questions? Dialogue: 0,0:43:26.69,0:43:27.44,Default,,0000,0000,0000,,than we... Dialogue: 0,0:43:27.44,0:43:29.44,Default,,0000,0000,0000,,? more minutes for questions? Dialogue: 0,0:43:36.23,0:43:41.28,Default,,0000,0000,0000,,ok, so thanks to Richard Hartmann, we will continue...