--- Log opened Tue Jul 02 00:00:11 2019 |
00:01 | | Reiv [NSkiwiirc@Nightstar-ih0uis.global-gateway.net.nz] has joined #code |
00:01 | | mode/#code [+o Reiv] by ChanServ |
00:07 | | Vorntastic [uid293981@Nightstar-6br85t.irccloud.com] has quit [[NS] Quit: Connection closed for inactivity] |
00:15 | | Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Connection closed] |
00:20 | | Kimo|autojoin [Kindamoody@Nightstar-eubaqc.tbcn.telia.com] has joined #code |
00:20 | | mode/#code [+o Kimo|autojoin] by ChanServ |
00:20 | | Kimo|autojoin is now known as Kindamoody |
00:48 | | Kindamoody is now known as Kindamoody[zZz] |
01:08 | | himi [sjjf@Nightstar-1drtbs.anu.edu.au] has joined #code |
01:08 | | mode/#code [+o himi] by ChanServ |
01:50 | < Yossarian> | vim remap supports something like <Space><Space> ? quick double tap? I know vim uses termcap and some other libraries |
01:51 | < Yossarian> | i'll have to try that, gotta go run an errand |
01:52 | <&ToxicFrog> | McMartin: IIRC Vorn is working in lua, and lua does have do..while in the form of repeat..until |
03:25 | | catalyst [Jessikat@Nightstar-q2i6uf.dab.02.net] has quit [Connection closed] |
05:28 | | Vorntastic [uid293981@Nightstar-6br85t.irccloud.com] has joined #code |
05:28 | | mode/#code [+qo Vorntastic Vorntastic] by ChanServ |
06:05 | | celticminstrel [celticminst@Nightstar-6an2qt.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
06:35 | < Yossarian> | that's correct |
06:35 | < Yossarian> | repeat until expr |
06:35 | < Yossarian> | alas i should lie down, I spent al day doing chores >:| |
06:39 | | himi [sjjf@Nightstar-1drtbs.anu.edu.au] has quit [Ping timeout: 121 seconds] |
07:05 | <&McMartin> | I had thought Vorn was working in Python, which lacks this construct |
07:32 | <~Vorntastic> | Lua, which also does |
07:33 | <~Vorntastic> | Also continue, which is even more egregious imo |
07:36 | <&[R]> | <ToxicFrog> McMartin: IIRC Vorn is working in lua, and lua does have do..while in the form of repeat..until |
07:45 | <~Vorntastic> | Wait what |
07:45 | <~Vorntastic> | Ff |
07:46 | <&[R]> | Gotta love it when languages just randomly change the names of shit that's been standard for eons before them |
07:50 | | Degi [Degi@Nightstar-r1c7rd.dyn.telefonica.de] has joined #code |
08:46 | | Degi [Degi@Nightstar-r1c7rd.dyn.telefonica.de] has quit [Operation timed out] |
08:50 | <&McMartin> | Repeat-until is older than do-while. |
08:54 | <~Vorntastic> | That parses, it always feels like older languages preferred more words over words that are sensitive to context |
09:06 | <&McMartin> | Microsoft QuickBasic had the most thorough set |
09:06 | <&McMartin> | DO/LOOP, and either or neither could be modified with WHILE or UNTIL. |
09:07 | <&McMartin> | Whoops, I may be wrong |
09:07 | <&McMartin> | Repeat/Until *is* older than C |
09:08 | <&McMartin> | Since Pascal has had it |
09:08 | <&McMartin> | But ALGOL 60 seems to have been |
09:08 | <&McMartin> | just DO and WHILE |
09:09 | <&McMartin> | But I'm not sure it composed them as C did |
09:11 | <&McMartin> | Looking at sample code I am not 100% sure that ALGOL had unbounded while loops at all |
09:14 | <&McMartin> | Yeah, Algol did not have repeat/until but also did not have do-while |
09:14 | <&McMartin> | what it did have was for i from a by b to c while cond do begin statements end |
09:14 | <&McMartin> | But all of those but "do" were optional |
09:15 | <&McMartin> | "until" at the end was a nonstandard extension, but the articles don't say whether that predates or postdates Pascal's use of repeat/until to go with while/do. |
09:16 | <&McMartin> | (GW-BASIC had WHILE/WEND and while I'm sure the latter is While-End I like the idea that it's actually "wend") |
09:38 | <@sshine> | code of the day: if ($timeperiods == -1) { $periods = 1; } elsif ($timeperiods == -2) { $periods = 0; } |
09:39 | <@sshine> | doing code review for this kind of code makes me feel like I'm sitting in a bar, sober, listening to a drunk guy explain something and he's never getting to the point. |
09:41 | <@TheWatcher> | I'm going to have to remember that line. |
09:55 | | Kindamoody[zZz] is now known as Kindamoody |
10:17 | <&Reiver> | Our ETL system at work has REPEAT, LOOP, and PROCESS. See if you can spot the difference. |
10:19 | | Netsplit Deepthought.Nightstar.Net <-> Krikkit.Nightstar.Net quits: @PinkFreud |
10:21 | <@TheWatcher> | repeat has a count of repeats and/or it always runs at least once; loop runs zero or more times and potentially allows for arbitrary lower and upper bounds, and process... dunno, but if I had to guess, some kind of conditional execution? |
10:21 | <&Reiver> | oh, how close and yet how far, but an excellent attempt |
10:22 | <&Reiver> | they're all exclusive in how they iterate, effectively. |
10:23 | <&Reiver> | LOOP is the closest thing to a regular while-loop; you are required to provide an expression that it will then evaluate to determine if it's done. (eg, a counter is a good idea.) |
10:24 | <&Reiver> | REPEAT is explicitly a while-loop that iterates through rows in a memory table, with all the columns of that single line available as if they were a set of independent and conviniently named single-value variables within the scope of the loop. |
10:25 | <&Reiver> | (A memory table being a construct that is created as a temporary table snapshot of whatever SQL query feeds into it; the distinction is mostly important that it is a static copy of whatever you gathered, so you can't futz with the base tables once it's been gathered and see the changes unless you load a fresh copy, and you're not allowed to load the same name twice in a single script, ha ha ha shoot me now) |
10:25 | <~Vorntastic> | I would have called that process |
10:26 | <&Reiver> | So would I! |
10:26 | <&Reiver> | So would anyone sane! |
10:26 | <&Reiver> | ITERATE... is a while-loop that will do a similar process through a file system. |
10:26 | | Netsplit over, joins: @PinkFreud |
10:26 | <&Reiver> | ...Because that nomenclature is perfectly sensible and not at all prone to cause confusion, right? |
10:26 | | himi [sjjf@Nightstar-v37cpe.internode.on.net] has joined #code |
10:26 | | mode/#code [+o himi] by ChanServ |
10:27 | <@TheWatcher> | Reiver: fun |
10:30 | <&Reiver> | yup |
10:30 | <&Reiver> | ... not going to lie, the REPEAT capability is not something I would mind having on a few more data structures in my programming times |
10:31 | <&Reiver> | It certainly /simplifies/ working in a data set, even if the rest of the system is a screaming nightmare of woe |
10:33 | <~Vorntastic> | For row in table: handle_this_kind_of_row(**row) |
10:38 | <@TheWatcher> | me, in an email just now: |
10:38 | <@TheWatcher> | "The short version: web development sucks" |
11:59 | | Degi [Degi@Nightstar-r1c7rd.dyn.telefonica.de] has joined #code |
13:07 | <@abudhabi> | It does. |
13:07 | <@abudhabi> | And it sucks more and more as people pile up more and more random frameworks and libraries. |
13:13 | | celticminstrel [celticminst@Nightstar-6an2qt.dsl.bell.ca] has joined #code |
13:13 | | mode/#code [+o celticminstrel] by ChanServ |
13:21 | <@TheWatcher> | abudhabi: https://twitter.com/jaredpalmer/status/1142800704580591617 indeed |
14:03 | <@abudhabi> | Hahaha. |
14:09 | | celticminstrel is now known as celmin|away |
14:16 | <~Vorntastic> | That is way more organized than modern web development |
14:20 | <@TheWatcher> | You're not wrong. |
14:59 | | Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code |
14:59 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
15:08 | <~Vornicus> | yay, repeat until is the thing I wanted |
15:10 | <~Vornicus> | local current_edge_id = dual_face.edge; repeat ... until current_edge_id == dual_face.edge |
15:16 | <&ToxicFrog> | Vornicus: also, in case it simplifies things, note that the `until expr` is in the same scope as the loop body |
15:16 | <&ToxicFrog> | So you can do: `repeat local foo = ...; a bunch of stuff; until foo == ...` |
15:16 | <~Vornicus> | it doesn't here, but I'd assumed as much |
15:47 | <~Vornicus> | wait, how could i tell the fake faces before what is happening |
16:23 | | ErikMesoy [Bruker@Nightstar-f80gqu.bb.online.no] has quit [Connection closed] |
16:25 | | ErikMesoy [Bruker@Nightstar-f80gqu.bb.online.no] has joined #code |
16:38 | | Vorntastic [uid293981@Nightstar-6br85t.irccloud.com] has quit [[NS] Quit: Connection closed for inactivity] |
16:45 | <~Vornicus> | ...lol. I did that by having the fake faces not get generated: every point *except* the distant points gets the treatment. This seems to explain some things |
16:50 | <~Vornicus> | Okay. The fake faces end up as two "concave" - inasmuch as it can be said - faces that cover the whole universe. I don't have any idea what the clipper will do to that |
17:01 | | Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has joined #code |
17:10 | <~Vornicus> | But I can skip them out and mark them as evil so any renderer won't try it |
17:22 | < Emmy> | eeeeeevil |
18:15 | < Yossarian> | I just discovered bash's builtin 'declare -f' last night. I have so many technologies to learn. I did half my academic education in Visual Studio 2008 and the other half in some Linux env. Is there a way to call bash functions from the command-line? |
18:16 | < Yossarian> | And are there bash "events"? I'd like to change PS1 when the PWD grows a certain size to put a newline and prompt on the second line. |
18:18 | < Yossarian> | I wish I had another laptop, a tablet/convertable so I could read digital texts at a reasonable size. |
18:35 | <&[R]> | Use prompt_command instead |
18:36 | <&[R]> | My .dot files are in the git repos, so you can take a look at my bash configs, |
18:38 | <&[R]> | Also according to the bash manpage, events are just the commands you send it |
18:42 | <~Vornicus> | (anyway that doesn't sound like a thing you'd use "events" for, if we use "events" the way other languages do) |
18:47 | <&[R]> | Yeah |
18:50 | <~Vornicus> | -- I can turn the distant faces into explicit points, too. THen all this shit actually sort of makes sense and I think I end up in a world where I don't have to worry about the null party I had before |
18:50 | <&[R]> | https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html |
19:23 | <&ToxicFrog> | Yossarian: any function defined in your running bash session is callable like any other command. So if you open the shell and type in a function definition it's callable for the lifetime of the shell. |
19:23 | <&ToxicFrog> | To make a function available in all your shells, add it to some file that gets executed on shell startup like ~/.bash_profile |
19:24 | <&ToxicFrog> | (if you're using zsh there's also an option to hotload function definitions from certain directories the first time you try to load them, rather than having to put them all in your startup files, but AFAIK bash has no equivalent feature) |
19:24 | < Yossarian> | I know this is #code - in terms of pdf viewers and other software I've been trying to slim down all my software... I like zathura but I wish it were tabbed. I see a zathura-tabbed fork that uses zathura+mupdf+tabbed with wmctrl, anyone else use this for PDF and other document viewing or do they have other preferences? |
19:27 | < Yossarian> | my main linux install is already pretty thinned with openbox, tint2, compositor, conky along with dmenu and the openbox piped menu |
19:27 | <&ToxicFrog> | Yossarian: re the prompt, bash supports command expansion in PS1, so you can replace the '\w' with '$(some-shell-function-that-calls-pwd-and-inserts-a-newline-if-the-output-is-too-long)' and it'll call that function and splice in the output every time the prompt is displayed. |
19:27 | < Yossarian> | upon boot and login to window manager only use 400MB |
19:27 | <&ToxicFrog> | This isn't really related to redrawing the prompt on external events, but I think it's what you actually asked for. |
19:28 | <&ToxicFrog> | There's also PROMPT_COMMAND, mentioned by [R], which runs just before prompt rendering and can be used to change PS1. |
19:28 | <&ToxicFrog> | If you want to be able to hot-redraw the prompt while a command is being entered without making everything sad you'll probably have to switch to zsh. |
19:29 | <&ToxicFrog> | Re PDF viewing, I use KDE so if you're trying to minimalize your install you probably don't want any desktop app recommendations from me. |
19:29 | < Yossarian> | Ah, sorry back up. PROMPT_COMMAND is evaulated after a command execution in the shell ? so I can adjust my PS1 size when PWD is looong? |
19:31 | <&ToxicFrog> | $PROMPT_COMMAND is executed just before the prompt is drawn; AFAIK this happens on every prompt redraw whether it's because a command just finished or otherwise (e.g. you just pressed enter on a blank prompt) |
19:31 | <&ToxicFrog> | But it's been a while since I used plain bash instead of zsh, so there may be subtleties there I'm not remembering. |
19:31 | < Yossarian> | Well, for minimalize my stuff I do have some things that aren't particularly soft -- volumeicon GTK+ clipboard (ClipIt 1.4.2) |
19:31 | <&[R]> | <Yossarian> I know this is #code - in terms of pdf viewers and other software I've been trying to slim down all my software... I like zathura but I wish it were tabbed. I see a zathura-tabbed fork that uses zathura+mupdf+tabbed with wmctrl, anyone else use this for PDF and other document viewing or do they have other preferences? <-- zathura + wmii works fine for me |
19:35 | <&[R]> | <ToxicFrog> $PROMPT_COMMAND is executed just before the prompt is drawn; AFAIK this happens on every prompt redraw whether it's because a command just finished or otherwise (e.g. you just pressed enter on a blank prompt) <-- doesn't happen on CTRL+L |
19:35 | <&ToxicFrog> | TIL! Thanks. |
19:36 | < Yossarian> | That's awesome. I love this channel already despite if my questions are unorthodox. |
19:36 | < Yossarian> | wmii as a window manager seems super lightweight to me, I am pretty happy with openbox. |
19:36 | <&[R]> | At least in my experience anyways. Mine actually prints out one line, then I have PS1 just be a colored '$ ' prompt. I don't see the printed line when I CTRL+L |
19:37 | | * ToxicFrog nods |
19:37 | <&[R]> | I do see it when I enter a blank line or I CTRL+C a line |
19:37 | <&ToxicFrog> | I never used PROMPT_COMMAND, instead preferring to use process substitution in PS1 |
19:37 | < Yossarian> | and $PROMT_COMMAND is a variable, I presume? |
19:37 | <&[R]> | Yes, you assign the name of a function to it |
19:37 | < Yossarian> | s/PROMT/PROMPT |
19:37 | <&[R]> | fullprompt() { |
19:37 | <&[R]> | printf "${GREEN}//${PURPLE}${HOSTNAME}${GREEN}/${BLUE}${USER}${GREEN}/${BROWN}${PWD} ${GREEN}(${WHITE}jobs:$(jobs | wc -l)${GREEN})-(${WHITE}$(__git_prompt '%s')${GREEN})\n" |
19:37 | <&[R]> | } |
19:37 | <&[R]> | PROMPT_COMMAND=fullprompt |
19:37 | <&[R]> | That's mine |
19:38 | <&ToxicFrog> | And of course these days I use zsh and my PS1 is basically just '\n$(prompt-header)\n$(prompt-sym) ' |
19:38 | < Yossarian> | Ah okay. I have to get used to functions in my shell (bash),` define -f ` shows functions but yeah |
19:38 | <&[R]> | __git_prompt prints out the URL of the upstream repo for the current git repo if I'm in one |
19:38 | <&[R]> | Which is really nice |
19:38 | <&ToxicFrog> | ...which then invokes ~3000 lines of zsh to render the prompt and asynchronously update it as I type |
19:39 | <&[R]> | Yeesh |
19:39 | <&ToxicFrog> | [R]: the big win here is that all the really expensive stuff like "probe remote git repos to see if I need to push/pull" gets deferred until after prompt rendering. |
19:39 | <&ToxicFrog> | So the prompt appears immediately and then gets updated later as the different expensive queries complete. |
19:40 | <&[R]> | That's crazy |
19:40 | <&ToxicFrog> | Back when I used bash I ended up stripping most of the fancy version control stuff out of my prompt because it made prompt rendering too expensive, especially on systems with slow network or disks. |
19:40 | < Yossarian> | I'll probably write a function to tie to $PROMPT_COMMAND where is the PWD is 2/3 of the line in 1/4 of term emulator in tmux to place the input prompt on the next time. |
19:40 | <&[R]> | I'm going to have to see how that works for my shell |
19:40 | <&ToxicFrog> | cd into an sshfs mount and suddenly it takes 5+ seconds for the prompt to appear every time, etc |
19:41 | <&ToxicFrog> | (one improvement I want to make to this is figuring out if $PWD is local or network, and in the latter case considering everything potentially expensive rather than just operations that are marked "expensive" in the config) |
19:41 | <&ToxicFrog> | [R]: what shell are you using? |
19:42 | <&[R]> | ATM bash and xs depending on the task |
19:42 | <&[R]> | I'm slowly forking xs and adding my own features |
19:42 | <&ToxicFrog> | My actual dotfiles aren't published anywhere (something I need to fix, sigh...maybe this summer) but the async-prompt-update stuff I use comes from https://github.com/hypatian/hypatian-prompt |
19:43 | <&ToxicFrog> | Note that this will not work, not even in a little, in bash. It doesn't support hot prompt redraw or the ability to run commands in a pty managed by the shell. |
19:43 | <&ToxicFrog> | I'm not familiar with xs. |
19:45 | <&ToxicFrog> | [R]: incidentally, is there any particular benefit to putting stuff like this PWD width adjuster in PROMPT_COMMAND rather than directly in PS1? |
19:45 | <&[R]> | It looks less ugly, and if you change shell to dash, ksh or something else that reads PS1 you get a less pukey prompy |
19:46 | < Yossarian> | I love my tmux configuration. Friend of [R] and mine came up with whizz-bang shell script for extending panes and such with just Super+w. Depending on the location of the window, will generate a new pane or swap it over to the current virtual desktop one is focused on. I've modified it a bit. |
19:47 | < Yossarian> | IMHO the tmux script gives the benefits of tiling window manager without having one for managing terminals |
19:47 | < Yossarian> | But different strokes to rule the world. Rob Pike apparently still uses acme which he wrote, don't think it has syntax highlighting by default :P |
19:48 | | Kindamoody is now known as Kindamoody|afk |
19:48 | <&[R]> | It doesn't at all, which is considered a feature by some |
19:49 | <&ToxicFrog> | I use tmux the same way I use desktop workspaces, i.e. lots of them and everything fullscreened :P |
19:50 | < Yossarian> | Well, git was designed by the perfect person to do it. The amazing part about Linux is the collaboration done over vast distances using the Internet. Without that... but that's why git was designed by the perfect person to do it. Pretty sure someone could fork acme to use syntax highlighting |
19:52 | <&[R]> | git was written because they were using some proprietary VCS before, then the company that made it was all "hey, no more free lunch for Linux guys, pay us dosh". Then git was made. |
19:53 | <&McMartin> | Perforce. |
19:53 | < Yossarian> | even if that means going into the innards of acme and replacing it with termcap... assuming it doesn't use termcap |
19:54 | < Yossarian> | It sucks, plan9 is kind of a lost series of experiments and research into computing that it seems not many people have taken a look at. |
19:56 | <&McMartin> | "My Linux stuff doesn't run on it, obviously useless garbage" |
19:56 | <&[R]> | https://en.wiki2.org/wiki/BitKeeper |
19:56 | < Yossarian> | But Bill Joy and by extension Bram M. is my guy, in terms of talking about Rob Pike, sam, and acme. |
19:57 | <&McMartin> | More seriously, I feel like a lot of its experiments end up as paths not taken overall, which means that if that's what you *wanted* you're stuck with small communities and prototypes |
19:57 | <&McMartin> | On the other hand, that's why I use the 8-bit crossdev tools I do. -_- |
19:57 | <&McMartin> | The ones I didn't end up having to write myself are pretty primitive because they don't make the same tooling decisions that everyone else settled on. |
19:58 | <&[R]> | TIL: git, hg and bzr all started in 2005 |
20:00 | <&McMartin> | https://www.bitquabit.com/post/unorthodocs-abandon-your-dvcs-and-return-to-sanity/ is a hugely entertaining and unpleasantly accurate rant regarding DVCSes in general and YOssarian may not have seen it yet... |
20:00 | <&McMartin> | ... but I actually link it now for the litany of descent he draws for Git back to Smalltalk Changesets |
20:01 | < Yossarian> | I just wish vim had scripting language for functional/lambda, maybe haskell? Lua is sorta close... oh! vim :help lambda |
20:02 | <&McMartin> | "Because coding is and always has been a popularity contest, and we are very concerned about either being on the most popular side, or about claiming that the only reason literally everyone doesn’t agree with us is because they’re stupid idiots who don’t know better" |
20:03 | <&McMartin> | Yossarian: Is this for programming new modes into Vim or for general text-editing scripts? |
20:03 | <&McMartin> | Because, I mean |
20:03 | <&McMartin> | If you want to write text editing routines in a functional language |
20:03 | <&McMartin> | That is the traditional domain of Your Ancient Enemy >_> |
20:04 | <&ToxicFrog> | :D |
20:05 | < Yossarian> | <&McMartin> https://www.bitquabit.com/post/unorthodocs-abandon-your-dvcs-and-return-to-sanity/ is a hugely entertaining and unpleasantly accurate rant regarding DVCSes in general and YOssarian may not have seen it yet... bookmarked bookmark toolbar/good reads/ |
20:06 | <&ToxicFrog> | I do not understand the line he's drawing from long-lived branches to feature flags |
20:07 | <&ToxicFrog> | Also his reasons for falling in love with distributed version control are very not mine |
20:08 | <&McMartin> | I found myself linking this yesterday as well (it's part of my Hardy Perennials list, and I forget what had made it relevant there) |
20:08 | <&McMartin> | And the people I linked it to honed in on this one |
20:08 | < Yossarian> | I have a collection of some pretty cool bookmarks, I use Firefox (Quantum) ESR so not sure if I were to share the bookmarks in what fashion I would release them as. |
20:08 | <&McMartin> | " If you work as a field tech, or on a space station, or in a submarine or something, then okay, sure, this is a huge feature for you." |
20:09 | <&McMartin> | "I use this a lot, but my vacations involve going on cruise ships to photograph eclipses. That's like a space station, I guess" |
20:09 | <&McMartin> | Also! |
20:09 | <&McMartin> | "CVS treated the atom as the file: a given file had a history, and a file had versions, but the repository really didn’t. Oh sure, there were tags and branches, and those did really operate at the repository level, but those were the tools you reached for around release time—not part of your daily flow." |
20:09 | <&ToxicFrog> | "Or on the train, or the bus, or the plane, or while vacationing, or while using the shitty slow unreliable consumer internet DSL that is the only option in 95% of this country, or..." |
20:10 | <&McMartin> | Since the last time I read this carefully, I have encountered, in Glorious Future Year 2019, no less, a project that was still stuck on CVS and being a major scale project |
20:10 | <&McMartin> | They actually created a new tag for every logical "push" operation |
20:10 | <&McMartin> | They finally managed to switch to Git, like, two months ago. |
20:10 | <&McMartin> | But they'd been cruising for years before that. |
20:11 | <&McMartin> | (Hooray for self-hosting niche operating systems that don't run bash and don't follow POSIX filename conventions~) |
20:11 | <&ToxicFrog> | "All of the above might be almost tolerable if DVCSes were easier to use than traditional SCMs, but they aren’t." |
20:11 | <&ToxicFrog> | Like...this is kind of true and kind of not true? |
20:11 | <&McMartin> | I find the argument laid out broadly convincing |
20:11 | <&ToxicFrog> | Git's UI is a trainwreck and it offers a dramatic variety of ways to get yourself into trouble |
20:12 | < Yossarian> | The build process when I worked (interned) at Ricoh Inforprint was a clusterfuck. Complicated makefile and svn. Nightly build with your changes, I'm not sure there was a profile in the makefile to not copy / compile the nightly build |
20:12 | <&[R]> | <ToxicFrog> Also his reasons for falling in love with distributed version control are very not mine <-- I liked the fact that I could start shoving code into a VCS instantly. I tried setting up SVN, it look an afternoon. |
20:12 | <&ToxicFrog> | But when it comes to initial setup cost (starting with "how many new servers and language runtimes will I need to install to use this at all") and the most basic operations (commit, diff, branch, merge) both git and hg are way ahead of p4, svn, and cvs |
20:13 | <&McMartin> | Yeah, we've had this conversation before. |
20:13 | <&ToxicFrog> | And I have definitely accidentally and permanently destroyed more of my code using svn than I have using git, despite using git for much longer on much larger amounts of code |
20:13 | <&McMartin> | Git and Hg grant you the ability to have zero peers. |
20:13 | < Yossarian> | git is popular so I'm using that now; svn apparently has had heavy modifications to it, not sure what they are specifically. |
20:13 | <&McMartin> | Obviously a client-server model, requiring as it does a client and a server, has a lower floor. |
20:14 | <&McMartin> | svn is still chugging along, and the commands are different but it basically works |
20:14 | <&McMartin> | The OSS projects I contribute to are a mix of git and svn, and my current job is git-based, and my previous was svn-based |
20:14 | <&ToxicFrog> | Like, I've also gotten into more "shit is fucked up but not irrevocably fucked up" states in git, but I don't think I've ever gotten into "your entire day's work is gone forever" with it and that's happened several times with svn and at least twice with p4 |
20:15 | <&ToxicFrog> | A higher floor, you mean? |
20:15 | <&McMartin> | Er, yes. |
20:15 | <&McMartin> | The svn-based stuff was not unlike the Ricoh case but builds were kicked off on each commit to specified branches and "only" took a few hours to complete |
20:16 | <&McMartin> | It also had a very significant set of ancillary binary data that needed to be versioned along with it, so despite some pushing, DVCS solutions were never really viable |
20:16 | <~Vornicus> | I keep hearing that binary data isn't good with dvcs but I don't really, uh, get it? |
20:17 | <&ToxicFrog> | And yeah, that's what actually got me version-controlling my personal projects -- after trying both svn and p4 at home (and having prior experience with both from school and work), the ability to `git init` and go was huge, and, frankly, the UI made more sense to me out of the box. |
20:17 | <&McMartin> | That latter is extremely unusual |
20:17 | < Yossarian> | Having $PROMPT_COMMAND point to a bash function with a conditional you think be costly or no, not really? |
20:17 | <&ToxicFrog> | McMartin: Now that I have more experience with it, the UI makes less sense, but I'm more used to it, so it all works |
20:17 | <&McMartin> | "It’s so transparent that developers routinely tell me that the easiest way to learn Git is to start with its file formats and work up to the commands" <-- this matches my experience both learning and training others, and hearing about others who had to train others. |
20:18 | < Yossarian> | My conditional being if the length of the PWD is greater than a certain value... |
20:18 | <&ToxicFrog> | But as a beginner stuff like "git checkout does six different things" isn't as obvious as "git add lets me choose which files to commit and git merge won't let me vaporize all my work unless I try really hard" |
20:18 | <&ToxicFrog> | Both of which were huge improvements over my experiences with p4 and svn and made much more intuitive sense |
20:18 | <&[R]> | <Yossarian> Having $PROMPT_COMMAND point to a bash function with a conditional you think be costly or no, not really? <-- it runs once per prompt draw, so consider that |
20:19 | <&McMartin> | Vornicus: You're storing the entire history of every file in the repository, with some simple zlib compression. So, imagine one of the things you are versioning is the iteration on your video game's 2048x2048 textures... |
20:19 | <&ToxicFrog> | Yossarian: I doubt you will even notice that. As noted earlier my prompt runs thousands of lines of code and spawns dozens of subprocesses and still appears instantly. |
20:20 | < Yossarian> | [R]: just checking the length of the current PS1 or PWD inside PS1 |
20:20 | <&McMartin> | This is also part of why UQM dropped its oldest revisions when it shifted to Git |
20:20 | < Yossarian> | I have a Core i5-2520M, I shouldn't fear. |
20:20 | <~Vornicus> | Okay, why is that worse than... whatever the other one does? |
20:20 | <&[R]> | Yossarian: right, which is not even remotely computationally heavy |
20:20 | <&ToxicFrog> | Vornicus: in addition to what McMartin said, git at least (and probably hg as well) relies heavily on delta compression to keep size down. This works great with source code (which is smaller to begin with) and terribly with most object code, images, 3d models, etc |
20:20 | <&ToxicFrog> | Especially since the deltifier is optimized for use on text rather than being something like rsync's rolling-checksum algorithm. |
20:20 | <&McMartin> | Vornicus: The other one leaves the earlier versions on the server; Git and all DVCSes download every copy of it whenever you check it out and replace it if you update. |
20:21 | <&McMartin> | So for a concrete example, we trimmed the history of UQM when we moved to Git |
20:21 | < Yossarian> | [R]: I always try to be conservative and think about optimization of such things... maybe too much. Like if I were running busybox on a small machine like a Bifferboard / Router type chipset or if I had a mainframe or micro of old. |
20:21 | <&McMartin> | Specifically, we removed the 0.1-era content packs |
20:21 | <&McMartin> | Because that was 700MB of AIFF. |
20:21 | <&ToxicFrog> | And for git specifically, there was, and possibly still is, an issue where the memory ceiling for clone/fetch was equal to the size of the largest single object |
20:21 | <&McMartin> | And that compresses better than the OGGs that replaced it, which then Never Changed, so it's fine for UQM because the artwork is not a matter of continuing development |
20:21 | < Yossarian> | I might worry too much about that sort of thing in the wrong scenarios. |
20:22 | <&ToxicFrog> | Which means that if you have 10GB of tiny source files and 2GB of one disk image, you need 2GB of (possibly contiguous) memory to clone that repo. |
20:22 | <&ToxicFrog> | I think that's fixed now. |
20:22 | <&[R]> | Worry about optimization once you have code that runs too slow |
20:22 | <&ToxicFrog> | ^ |
20:22 | <~Vornicus> | Rule 1 |
20:22 | <~Vornicus> | Don't |
20:22 | <&McMartin> | But my understanding is that server-side revision control for a proper commercial AA or AAA game project can run into the terabytes |
20:22 | <&McMartin> | That's the point where Rule 2 comes in |
20:22 | <&McMartin> | Now |
20:23 | <&ToxicFrog> | Yeah, this is one of the things p4 is actually really good at |
20:23 | <&McMartin> | For the old employer, our blobs were enormous quantities of precompiled third-party libraries we had to link against, because our product was rather large and cross-platform and thus basically had to ship with half an OS distribution just to run at all. |
20:23 | <&ToxicFrog> | And it is justly popular in the games industry for that reason |
20:23 | <&ToxicFrog> | Pity about the UI. And the performance. And the documentation~ |
20:24 | < Yossarian> | Well, I wish this were an Thinkpad X230, with HD4000 which has Vulkan support. I'd be playing with that. If I do write any heavy software in future besides basic optimizations I'd be interested to see when things are optimized towards AMD processors... in the context of something computationally heavy like a video game. Especially since they're doing such good work lately with their CPUs. |
20:24 | <&McMartin> | The solution offered by those who wanted us to jam those and all previous revisions into Git was "just have a network share with every version of every dependency on it and alter the paths as needed", which is to say, "what you need is to Not Do Version Control, because my preferred version of Version Control is bad at this" |
20:24 | <&McMartin> | Yossarian: In practice these days the answer is "machines do it better than humans" |
20:25 | <&ToxicFrog> | McMartin: this is the problem stuff like git-annex exists to solve (if you are tied to DVCS) and while it's not great it's better than that |
20:25 | <&McMartin> | Optimizing for individual CPUs is a matter of selecting instruction mixes that happen to interact better with their revision of their particular microcode, if it matters to that level at all, which for games it generally does not |
20:25 | <&McMartin> | Git-annex is not better than that |
20:25 | <&McMartin> | Git annex does not run on NTFS file systems |
20:25 | <&McMartin> | Because it requires symbolic links... |
20:25 | <&McMartin> | ... which NTFS has |
20:25 | <&ToxicFrog> | Maybe I'm thinking of a different git-annex-alike, but it's definitely Actually Versioned |
20:25 | <&ToxicFrog> | And doesn't rely on symlinks |
20:25 | < Yossarian> | Mobile Ryzen is disappointing to me but that's another topic for another time (Laptop OEMs having no cojones with mobo designs, especially when it came to Mobile Ryzen and output TDP, Intel is magnitudes larger than AMD and have a stranglehold on the OEM business). |
20:25 | <&ToxicFrog> | NTFS has, but you have to be root to create them for some godforsaken reason |
20:26 | <&McMartin> | Yeah, this wasn't that |
20:26 | <&McMartin> | You couldn't do it even as root because it was relying on some quirks of POSIX symlinks that happened to be POSIX-specific quirks. |
20:26 | <&ToxicFrog> | (the basic idea is that you have a content-addressed store somewhere and what you commit is just a pointer into that store, which can be automatically fetched onto local disk, or not as you prefer, on checkout) |
20:26 | <&McMartin> | I'm very sure it was git annex. What you are describing sounds like git submodule |
20:26 | <&ToxicFrog> | No, git submodule is completely different and is used for nested git repos |
20:27 | <&McMartin> | Also this was in 2013 or so. |
20:27 | <&McMartin> | Git Annex may have improved its core architecture since. |
20:27 | <&ToxicFrog> | The thing I'm describing is used for storing (versioned references to) large binary blobs in git and is either a more recent version of git-annex or, more likely, something else in the same problem space that I've conflated with git-annex |
20:27 | <&McMartin> | But the fact remains that this is basically free even with subversion and not p4 |
20:27 | <&ToxicFrog> | Not git? |
20:28 | <&ToxicFrog> | It's free with p4 to the extent anything is with commercial version control :P |
20:29 | <&McMartin> | Uh |
20:29 | <&McMartin> | free in the sense of "the architecture means that blobs are not a problem that appears as needing to be addressed" |
20:29 | <&ToxicFrog> | Right |
20:29 | <&ToxicFrog> | You said "it's free with subversion and not p4" |
20:30 | <&ToxicFrog> | I am assuming that last is meant to be "not git" because p4 is in fact famously good at handling large binary blobs. |
20:30 | <&McMartin> | Right. We'd established that p4 is good at this already |
20:30 | <&McMartin> | "even svn, without p4, is also good at this" |
20:30 | <&McMartin> | "Because you get it as a side effect of being client-server" |
20:31 | <&McMartin> | To also unpack "free" to avoid confusion with "libre" or "gratis", neither of which I precisely intended. |
20:32 | | * McMartin looks at the git annex home page, becomes extremely confused |
20:32 | <&McMartin> | They have... undergone sufficient mission creep that their core home-page stories no longer have anything to do with the problems we discuss |
20:32 | <&ToxicFrog> | Ok, I see, you meant "you get this capability even if you are just using svn and not paying for big commercial systems like p4' |
20:33 | <&McMartin> | Yes, we're on the same page now |
20:33 | <&McMartin> | And it is possible that I have been conflating git-annex with git-lfs |
20:34 | <&McMartin> | I have a vague memory of the symlink madness having something to do with git smudge |
20:44 | <&ToxicFrog> | smudge/clean are just a general mechanism for automatically translating between "the stuff you want to commit" and "the stuff you want to edit" |
20:44 | <&ToxicFrog> | I think all these large blob storage projects use them in some capacity |
20:46 | <&McMartin> | It's listed as "recently" added to annex, so I dunno the timing from when we were doing that evaluation |
20:50 | <&ToxicFrog> | In other news, I've unlocked the New Game +² mechanic in Bitburner, which takes away all of my augmentations, so I think my next unlock focus should be on the API that lets me autopilot my meat puppet into the aug chamber |
21:09 | < Yossarian> | Also another spurious question, in your workflow do you see any difference to make interactive shell (.bashrc) differ from the 'login' shell profile (.bashprofile) |
21:12 | < Yossarian> | I haven'r run into a compelling reason yet, but alas, I'm going to get my PROMPT_COMMAND working how I'd like. I was testing something else before just now. |
21:27 | < Yossarian> | <&[R]> My .dot files are in the git repos, so you can take a look at my bash configs, |
21:27 | < Yossarian> | On 10.0... or on github? |
21:34 | < Yossarian> | looked on github, don't see .dot files, not sure what git repos exist on ...10.14 |
22:12 | | Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Connection closed] |
22:17 | <&[R]> | ssh git@0.0.10.14 ls |
22:17 | <&[R]> | Also I made a mistake, that repo is actually in my personal user, so you don't have access to it |
22:18 | <&[R]> | I'll post the bash files though |
22:30 | | Kindamoody|afk is now known as Kindamoody |
22:33 | < Yossarian> | oh okay but I got it figured out |
22:41 | | himi [sjjf@Nightstar-v37cpe.internode.on.net] has quit [Ping timeout: 121 seconds] |
23:00 | < Yossarian> | PROMPT_COMMAND doesn't activate on ^L |
23:07 | < Yossarian> | forgot about PROMPT_DIRTRIM as well, hmm |
23:07 | <@Reiv> | ToxicFrog: Did the, uh, 'plot' ever fire up through your playthrough |
23:07 | <@Reiv> | Or is this one of those games that the plot evolves through New Game reruns |
23:08 | <&ToxicFrog> | Reiv: both |
23:09 | <&ToxicFrog> | Like, every NG+ you get more augs which lets you get further faster which gets you more breadcrumbs towards "the start of the plot" |
23:11 | <&ToxicFrog> | Eventually you escape the cycle of NG+ into NG² and find out what's really (probably) happening, which removes all your augs but lets you start a new NG+ cycle with various different game mechanics, and permanent, powerful bonuses for clearing each one |
23:11 | <&ToxicFrog> | There is presumably more plot as I clear those, and I know there's two endgame factions I haven't even talked to yet |
23:29 | <@Reiv> | oho |
23:30 | <@Reiv> | So you took the red pill and are now in a New Phase Of Plot? |
23:30 | <@Reiv> | Does this require rewriting all your scripts, or |
23:36 | <&ToxicFrog> | At the moment, I'm redoing the first sequence to improve the bonuses I got from it and refine my scripts, so it mostly just requires taking into account the fact that I have far less RAM to work with and maybe I shouldn't be writing individual monolithic daemons that take 40GB just to start up |
23:36 | <&ToxicFrog> | For later NG²s, yes, it will require complete strategic rethinks |
23:37 | <&ToxicFrog> | Since some of the alterate game mechanics include things like "hacking is no longer profitable but you can found and run corporations" or "your stats are massively nerfed but you can spawn scriptable copies of yourself" |
23:38 | | * Reiv raises an eyebrow |
23:38 | <@Reiv> | scriptable copies of yourself, eh |
23:38 | <@Reiv> | Are you an AI now |
23:38 | <&ToxicFrog> | Not yet. |
23:39 | <&ToxicFrog> | But I will be. |
23:40 | <&ToxicFrog> | I don't even need that API to be; I just need the API that lets my meat be controlled by scripts. |
23:42 | | Yossarian [yoss@Nightstar-d7h8ki.org] has quit [[NS] Quit: sudo shutdown -r now] |
23:45 | | Degi [Degi@Nightstar-r1c7rd.dyn.telefonica.de] has quit [Connection closed] |
--- Log closed Wed Jul 03 00:00:13 2019 |