code logs -> 2019 -> Tue, 02 Jul 2019< code.20190701.log - code.20190703.log >
--- 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
code logs -> 2019 -> Tue, 02 Jul 2019< code.20190701.log - code.20190703.log >

[ Latest log file ]