00:03:38 <b_jonas> But maybe that wouldn't have worked because the elves couldn't create the right kind of mirrors and lenses, or else it couldn't have worked since Gollum falling into Mount Doom might have been the only way to get Frodo to part from the ring forever.
00:06:25 -!- boily has joined.
00:07:08 <boily> the outside, it is cold. brrrr.
00:07:42 <\oren\> just burn frodo along with the ring
00:08:25 <boily> I only got an Iron Ring on me. will it do?
00:10:30 <boily> also, he\\oren\. could you add 盗 and 賊 to your font please?
00:14:25 <\oren\> ok, next update will have them
00:15:55 <b_jonas> what are those characters?
00:23:35 -!- p34k has quit.
00:39:13 -!- evalj has quit (Remote host closed the connection).
00:47:29 <oerjan> <b_jonas> I'm asking here because I think some people here, especially ais523, [...] <-- for asking ais523, i recommend asking when ais523 is actually here hth
00:51:36 * oerjan concludes that by murphy's law, b_jonas will never see this at least without this lampshade.
00:57:56 <oerjan> <hppavilion[1]> (Pretty sure I'm on the maximum recommended dose of dextroamphetamine for my BMI) <-- you mean you'd normally be going through projects even _faster_?
01:01:09 <oerjan> <coppro> hppavilion[1]: !classic game <-- not a classic game, check.
01:01:58 <oerjan> i don't know fuzzy logic.
01:02:23 <oerjan> i have no idea whether C-H makes sense for it.
01:04:07 <hppavilion[1]> oerjan: Probably not for classical, but what I'm formulating is Intuitionistic Fuzzy Logic, which is basically just adding some fuzz to intuitionistic logic
01:04:51 -!- jaboja has joined.
01:05:12 <shachaf> Curry-Howard makes sense for classical logic.
01:07:31 <oerjan> indeed, if there's a problem it's with the fuzz.
01:09:45 <oerjan> <boily> I'm building a Canadian snack pack. a snacanapack. <-- i'm sure this will be a hit in panama.
01:15:52 <hppavilion[1]> Fuzzy Logic and Intuitionistic Logic actaulyl go together quite nicely
01:16:16 <hppavilion[1]> oerjan: Yeah, probably. But there shouldn't be a problem, if there's a problem it's probably just me
01:18:24 -!- Treio has joined.
01:23:43 <boily> oerjan: the best portmanteaux are vowel harmonized.
01:24:48 -!- J_Arcane has joined.
01:26:26 -!- Treio has quit (Ping timeout: 240 seconds).
01:27:15 -!- heroux has quit (Ping timeout: 260 seconds).
01:31:35 <boily> are there anybody in this chännel who are Panamian?
01:32:21 -!- heroux has joined.
01:32:39 <lambdabot> *** "panamanian" wn "WordNet (r) 3.0 (2006)"
01:32:39 <lambdabot> adj 1: of or relating to or characteristic of Panama or its
01:32:42 <lambdabot> n 1: a native or inhabitant of Panama
01:34:03 <oerjan> ...possibly _not_ google that word hth
01:35:06 <boily> panamanas doo doo dododoo ♪
01:35:17 <oerjan> apparently the proper word is panameñas how unharmonic
01:40:11 <boily> (meanwhile, holy disco abyss... so many colours everywhere...)
01:44:52 * oerjan wonders what boily is talking about.
01:45:25 <boily> I got cast in the abyss, and I was some place where walls were changing colour randomly every turn.
01:47:04 -!- heroux has quit (Read error: Connection reset by peer).
01:47:42 -!- heroux has joined.
01:52:19 <\oren\> 貴貸貿賃資賛質輸述迷退造適广已巳巴遺郵郷酸鉱銅銭鋼閣防降盗賊限陛除険際障雑難非革頂預領飼
01:57:33 <\oren\> with this, all kanji taught in primary school are covered
02:15:06 -!- Melvar has quit (Ping timeout: 240 seconds).
02:15:10 -!- MDream has changed nick to MDude.
02:16:14 -!- idris-bot has quit (Ping timeout: 252 seconds).
02:17:10 -!- Melvar has joined.
02:19:15 -!- hppavilion[1] has quit (Ping timeout: 240 seconds).
02:21:35 -!- heroux has quit (Ping timeout: 240 seconds).
02:22:03 -!- ais523 has joined.
02:22:22 -!- heroux has joined.
02:36:33 -!- boily has quit (Quit: CALLING CHICKEN).
02:38:54 -!- hppavilion[1] has joined.
02:42:57 -!- heroux has quit (Ping timeout: 240 seconds).
02:45:34 -!- heroux has joined.
03:14:10 -!- heroux has quit (Ping timeout: 240 seconds).
03:16:44 -!- heroux has joined.
03:17:10 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
03:22:18 <olsner> @tell boily fatso day (or fat tuesday) was just this past tuesday actually
03:31:01 -!- XorSwap has joined.
03:41:30 -!- hppavilion[2] has joined.
03:43:24 -!- hppavilion[1] has quit (Ping timeout: 256 seconds).
03:47:56 -!- hppavilion[2] has quit (Ping timeout: 256 seconds).
03:52:28 -!- Opodeldoc has quit (Quit: Leaving).
04:12:50 -!- ais523 has quit (Ping timeout: 252 seconds).
04:14:00 -!- jaboja has quit (Ping timeout: 256 seconds).
04:15:49 <HackEgo> [wiki] [[Brainfuck]] https://esolangs.org/w/index.php?diff=46402&oldid=46382 * 50.65.116.121 * (+568) Added program for cell width
04:35:36 -!- hppavilion[2] has joined.
04:46:04 -!- variable has joined.
04:46:22 -!- MDude has changed nick to MDream.
04:50:42 -!- XorSwap has quit (Quit: Leaving).
04:58:35 -!- heroux has quit (Ping timeout: 240 seconds).
05:00:03 -!- perrier_ has quit (Remote host closed the connection).
05:01:15 -!- heroux has joined.
05:01:17 -!- perrier_ has joined.
05:01:23 -!- variable has quit (Ping timeout: 264 seconds).
06:01:40 -!- hppavilion[2] has quit (Ping timeout: 256 seconds).
06:56:13 <\oren\> which characters should I add next?
07:02:58 <pikhq_> PILE OF POO is a good one.
07:03:14 <myname> reverse hand middlefinger extended
07:05:35 <pikhq_> I don't think that one's there?
07:06:20 <pikhq_> REVERSED HAND WITH MIDDLE FINGER EXTENDED
07:07:13 <myname> snowman is also pretty relevant
07:20:13 -!- zadock has quit (Quit: Leaving).
07:20:32 <myname> or what about these game symbols
07:20:51 <myname> like chess pieces or heart/club/spade/diamond
07:21:48 <shachaf> how about play/pause/stop/rewind/fast forward/etc.
07:21:50 <zzo38> Yes you should include suits if you have not already done so
07:22:14 <shachaf> they don't have room in their cold hearts for those symbols
07:24:27 <zzo38> Are you sure? I think those symbol are good idea too (also previous track, next track, record, and eject)
07:25:57 <shachaf> Those were included in "etc.".
07:28:29 -!- Treio has joined.
07:51:22 -!- hppavilion[1] has joined.
08:34:44 <hppavilion[1]> http://web.mst.edu/~lmhall/WhatToDoWhenTrisectorComes.pdf
09:01:14 <HackEgo> trisecting the angle? ¯\(°_o)/¯
09:04:14 <HackEgo> angle trisection? ¯\(°_o)/¯
09:04:56 <hppavilion[1]> `le/rn trisecting the angle/Angle Trisection is an open problem that you should /definitely/ try to solve! For glory and honor!
09:05:09 <HackEgo> Learned «trisecting the angle»
09:06:38 <myname> angle trisection is like one of the easiest thing i can imagine
09:10:23 <oerjan> "with an unmarked ruler and compass" is generally implied hth
09:10:50 <myname> yeah, but i can trisect a segment therefore i can trisect an angle
09:11:15 <oerjan> the three angle parts must be equal hth
09:11:53 <myname> i thought it would be as easy as bisecting
09:12:24 <myname> are there actually proves that this cannot be done?
09:12:41 <oerjan> to be very concrete, you cannot construct a 20 degree angle.
09:13:04 <oerjan> yes there are, it's part of galois theory.
09:13:57 <myname> well, but how do i get 60
09:14:15 <Taneb> myname, I fell into that fallacy before
09:14:16 <myname> the only angle i know you can get for sure is 90
09:14:33 <oerjan> start with two points, make a circle around each touching the other.
09:14:43 <myname> oh, you can make a triabgle
09:15:13 -!- AnotherTest has joined.
09:16:18 <oerjan> basically, that gives you all of 30, 60 and 90 somewhere between the original points and where things intersect.
09:16:45 <myname> 45 should also be possible
09:17:09 <oerjan> bisecting is, as you noted, easy.
09:17:30 <diginet> oh my god...this is painful to read
09:17:39 <oerjan> a harder, still possible one is 72.
09:17:40 <diginet> " i can trisect a segment therefore i can trisect an angle" just...no
09:17:53 <oerjan> diginet: don't worry he got better.
09:18:11 <oerjan> he did not reach crank orbit.
09:18:33 <diginet> oerjan: I solved the halting problem
09:18:43 <diginet> I just ran the computer...and it halted
09:18:53 <myname> well, twoducks solves it :p
09:18:55 <diginet> I can't believe no one thought of that before
09:19:32 <oerjan> diginet: maybe they're just covering it up.
09:20:02 <oerjan> to keep their precious computer science jobs.
09:20:35 <diginet> Big Computer Science needs to be exposed
09:22:11 <zzo38> Do you know the best way to fake Generator.prototype.return in JavaScript?
09:23:09 -!- oerjan has quit (Quit: Nite).
09:25:21 <myname> fun fact: a time ago you could make a 90 degree angle by bisecting a line in euclidthegame
09:26:21 <myname> you could also find the center of a circle by copying it on itself 2 times
09:27:22 -!- hppavilion[1] has quit (Ping timeout: 256 seconds).
09:36:16 <\oren\> "trisect an angle" implied part is "with only straightwdge and compass"
09:36:37 <\oren\> "halting problem" implied part is "on a turing machine"
09:36:40 <Taneb> I think you can trisect an angle with the power of origami
09:38:21 <\oren\> is halting problem solvable for for stack machines?
09:47:20 <zzo38> This is what I did: function(x) { var o={}; var e; try { return this.throw(o); } catch(e) { if(e===o) return {value:x,done:true}; throw e; } } It isn't perfect
09:57:46 <zzo38> I noticed that http://esolangs.org/wiki/The_chan-esoteric_stack has a link to the nonexistent page "Principals of Eso". What are these principals?
09:58:47 <zzo38> It also says the rest of the stack is implemented in Python or Forth, although the various other programs listed are different programming languages.
10:00:54 <zzo38> And then it lists my Z-machine implementation, although I have written three (ZORKMID, JSZM, Famizork) and it does not specify. None are written in Python or Forth, although Famizork is probably the strangest one (in many ways; you are free to ask and/or complain)
10:02:52 <zzo38> Also, what kind of extended variant of call/cc is it?
10:42:48 -!- Phantom_Hoover has joined.
11:00:50 <^v> so um, i calculated 6942069^69420 to stress test a custom bignum library .-.
11:00:59 <^v> http://i.imgur.com/aV6RwBL.png
11:09:00 -!- LexiciScriptor has joined.
11:10:41 -!- Treio has quit (Quit: Leaving).
11:33:31 -!- bender| has joined.
11:37:17 -!- Treio has joined.
11:44:22 -!- zadock has joined.
11:56:08 -!- aloril has quit (Ping timeout: 250 seconds).
11:56:32 -!- Treio_ has joined.
11:56:40 -!- Treio_ has quit (Remote host closed the connection).
11:57:23 -!- Treio has quit (Quit: Leaving).
12:02:35 -!- aloril has joined.
12:17:56 -!- J_Arcane has quit (Ping timeout: 252 seconds).
12:32:00 <HackEgo> [wiki] [[Talk:Call/cc]] https://esolangs.org/w/index.php?diff=46403&oldid=46327 * Zzo38 * (+367) lem/cc
12:34:10 <myname> that is one bad explanation there
12:35:32 -!- AnotherTest has quit (Ping timeout: 252 seconds).
12:49:18 <izabera> https://scontent.fath4-1.fna.fbcdn.net/hphotos-xlf1/t31.0-8/12710739_1236761493003893_1868373311706196033_o.jpg
12:54:38 -!- Treio has joined.
13:03:47 -!- Treio_ has joined.
13:12:04 -!- bender| has quit (Remote host closed the connection).
13:12:32 -!- bender| has joined.
13:16:43 -!- Treio has quit (Quit: Leaving).
13:16:48 -!- Treio_ has quit (Quit: Leaving).
13:34:28 <izabera> i hate my fiber connection
13:34:47 <izabera> i downloaded steve jobs (2015) in 3 minutes
13:34:59 <izabera> it's too fast, there's no time to do anything
13:36:17 <myname> i have cable with like 25 mbits, you will have plenty of time to do stuff
13:40:33 <myname> 100 mbit sounds lame for fiber
13:41:43 <Hoolootwo> I could pipe that through any old ethernet cable
13:42:10 <izabera> shutup i don't get to decide what my isp serves
13:43:12 <Hoolootwo> I only get 10 megabits through a repurposed phone line, you're lucky
13:43:21 -!- boily has joined.
13:43:25 <izabera> i don't think there's anything better in italy
13:49:37 <fizzie> I think this thing is nominally 76/19 over a repurposed phone line as well.
13:50:11 <fizzie> I'm slighly unsure why UK has opted in for "standard" nominal DSL speed set of 9.5/19/38/76.
13:50:27 <fizzie> In Finland it was more like 10/25/50/100.
13:52:35 <fizzie> Besides, the modem says the negotiated rate is 79999/19999 kbps. But maybe they include some sort of a standard 5% overhead in the marketing numbers.
13:55:33 <boily> izabellora. where were you going at in Italy again?
13:55:53 <lambdabot> olsner said 10h 33m 34s ago: fatso day (or fat tuesday) was just this past tuesday actually
13:58:32 -!- Treio has joined.
14:02:11 <izabera> `le/rn fetch curses function that fets a char. see fetch(3X) for more info
14:03:38 <boily> it mvly fets a ch?
14:03:45 -!- groteworld has joined.
14:09:40 -!- Treio_ has joined.
14:09:49 -!- Treio_ has quit (Remote host closed the connection).
14:17:51 -!- PinealGlandOptic has joined.
14:29:56 -!- heroux has quit (Ping timeout: 248 seconds).
14:35:20 -!- heroux has joined.
14:48:40 -!- heroux has quit (Ping timeout: 256 seconds).
14:49:27 -!- groteworld has quit (Quit: ZZZzzz…).
14:54:20 -!- MDream has quit (Ping timeout: 256 seconds).
14:54:59 -!- heroux has joined.
14:57:51 -!- jaboja has joined.
15:02:40 <b_jonas> “<\oren\> with this, all kanji taught in primary school are covered” – primary school means which grades?
15:03:33 <b_jonas> oerjan: I know, but he isn't the only one, there are more people here
15:03:43 <b_jonas> he's just the only one I can identify
15:08:02 <b_jonas> \oren\: add the Korean ones
15:10:58 <b_jonas> \oren\: and I think you haven't fixed the presentation of Shavian letters on the test page yet so that they appear in only four lines, not five, so the lowercased version of a letter is two lines below the uppercased one
15:14:26 -!- Vorpal has quit (Ping timeout: 240 seconds).
15:16:06 <boily> there are Korean Kanjis?
15:16:39 <b_jonas> boily: or actually, yes there are
15:16:43 <b_jonas> but I wasn't asking for those
15:16:53 <b_jonas> boily: \oren\ asked what *characters* he should add
15:17:10 <boily> oooooh. that should teach me to not halflogread.
15:17:31 <boily> meanwhile, time for tile shuffling.
15:17:42 -!- boily has quit (Quit: VEGA CHICKEN).
15:18:01 <b_jonas> I'm asking him to add korean hangul syllables and the few non-syllable hangul characters
15:18:47 -!- heroux has quit (Ping timeout: 264 seconds).
15:19:38 -!- Vorpal has joined.
15:22:59 -!- heroux has joined.
15:24:41 <Vorpal> rsyslog has weird configuration
15:28:23 -!- LexiciScriptor has quit (Ping timeout: 264 seconds).
15:29:10 -!- LexiciScriptor has joined.
15:36:55 -!- groteworld has joined.
15:43:35 -!- heroux has quit (Ping timeout: 260 seconds).
15:48:45 -!- heroux has joined.
15:56:46 -!- LexiciScriptor has quit (Quit: LexiciScriptor).
15:57:08 -!- ais523 has joined.
16:02:04 <b_jonas> ais523: I've been trying to learn git. I still don't like it, and I'd like a better vcs.
16:02:15 <b_jonas> But I have a question about git.
16:02:34 <ais523> fwiw, my opinion on git is that it's possible to do a lot better, but git seems to have won the VCS wars
16:02:35 <b_jonas> (Let me try to paste it from channel history.)
16:02:48 <ais523> so if you use something else, people will find it harder to interoperate with you
16:03:15 <b_jonas> not really. I can still use two vcs together, or send unified diff patches, and stuff
16:04:03 <b_jonas> Let me copy the question from channel history.
16:04:13 <b_jonas> I want to apply the difference between two commits (call them t1 and t2) to the current state (both index and checked out files, error if their difference conflicts with the changes applied).
16:04:17 <b_jonas> The two commits are related but it's possible that neither is an ancestor of the other.
16:04:22 <b_jonas> This should take into account the history, in that it traverses the commits from t1 to the common ancestor of t1 and t2 then to t2, and preferable also take into account the history between the commits and the commit currently checked out.
16:04:28 <b_jonas> The index together with the checked out files may already have modifications, and applying the differences may conflict with these, or there can simply be a conflict between HEAD and those changes, in which case I want proper conflict markers as with a normal merge.
16:04:35 <b_jonas> I want to know the best way to do this. What I think might work is this: ( git revert t2..t1 && git cherry-pick t1..t2 )
16:04:41 <b_jonas> Does that combination of two commands do what I want? Whether or not, what's the best way to do this, rather than that command?
16:05:41 <ais523> b_jonas: the first thing to note is that git is very dumb in terms of preserving history
16:06:11 <b_jonas> ais523: yes, that's one of the things I don't like in it. Svn preserves the parent (a previous path and version) of each committed file or directory
16:06:21 <ais523> what you've written is effectively equivalent to git diff t1..t2 | git apply
16:06:41 <ais523> in order to do proper conflict markers, I'd recommend doing git stash first
16:06:48 <ais523> then applying the commit difference
16:06:58 <ais523> then doing a git stash pop and resolving the conflicts
16:07:02 <b_jonas> (which can be any file of the same is-directory from any previous version internally, although the working copy interface, including the working copy public api, makes it very hard to set it arbitrarily)
16:07:02 <ais523> although git's UI for that is painful
16:07:14 <ais523> sometimes I just make a temporary commit in order to work around the issues
16:07:50 <ais523> the other possibility would involve rebasing the current branch against t1, then merging t2
16:08:02 <b_jonas> ais523: the problem with (git diff | git apply) is two: one is that the unified diff format preserves less of the context of the original files than a straight git apply or git merge could use for merging, since it contains only some of the lines,
16:08:29 <b_jonas> the other is that it doesn't use intermediate versions in the history, so it might not be able to match so well, especially across file moves and copies
16:08:59 <ais523> b_jonas: right; however it's hard to get git to act more intelligently than that
16:09:26 <ais523> almost anything you do will try to do a diff then merge, all in one go
16:09:27 <b_jonas> “in order to do proper conflict markers, I'd recommend doing git stash first / then applying the commit difference / then doing a git stash pop and resolving the conflicts” - hmm
16:09:36 <ais523> the rebase method is the only method to get it to do it one commit at a time, AFAIK
16:10:29 <b_jonas> but how do I get rebase to not try to destroy what the branch ref pointed to before the rebase?
16:10:30 <ais523> hmm, it's possible that a merge runs one commit at a time, in which case rebase+merge would almost certainly be your best bet; the problem is that it edits history
16:10:33 <b_jonas> that's what scares me about rebase
16:10:49 <ais523> rebase never destroys anything; rather, it makes a parallel copy of history and points your branch at that
16:11:00 <ais523> the original is still around, but typically without a name unles you gave it a second name first
16:11:34 -!- p34k has joined.
16:11:41 <ais523> perhaps it'd help if you explain the context for what you're doing, there might be another way
16:11:47 <ais523> (note: this sort of thing is what git is worst at)
16:11:51 <b_jonas> ais523: merge editing history should be no problem, because I can fix that by merging to a temporary local branch and then merge --squash --no-commit to the current index-file state,
16:12:24 <b_jonas> but the problem with merge is that I don't see how to make it merge the difference between two states, it only wants to merge a commit and ALL ITS ANCESTORS
16:12:30 <b_jonas> I can't make merge exclude some of the previous changes
16:13:27 <b_jonas> ais523: it doesn't actually _destroy_, but it changes what the branch ref points to, and I don't understand how to make it not do that
16:13:59 <b_jonas> why doesn't rebase just have a switch to use a new branch name?
16:14:22 -!- Opodeldoc has joined.
16:14:23 <ais523> you can create a new branch first and then rebase that
16:14:50 <b_jonas> ok, so hw does the rebase solution work exactly?
16:15:19 <ais523> hmm, I have a solution for if t1 is an ancestor of t2; you create a new branch, rebase it so as to delete all the commits you don't want to merge (so only the commits you want are forked off an ancestor of the branch you're merging to), then merge
16:15:44 <b_jonas> honestly, I keep thinking that it's easier to do my version control by getting everything into a subversion repository, doing stuff there, and getting it back to git, but the problem is that I'll never learn git with that attitude
16:16:13 <ais523> how does subversion do the operation in question?
16:16:31 <b_jonas> ais523: the third syntax of svn merge does this basically
16:16:50 <ais523> the only VCS I can think of that can do what you requested in a history-aware way is darcs, and then only if t1 is an ancestor of HEAD
16:17:48 <b_jonas> takes two repo paths with versions in the same repo you have checked out, and applies the difference to the checked out working copy
16:18:25 <b_jonas> this is sort of more powerful because you can use arbitrary paths, not only diffs, but also less powerful because it requires ancestry of files to correspond properly, even in the working copy
16:18:37 <b_jonas> s/not only diffs/not only branches/\
16:19:07 <b_jonas> I really like the whole svn model, except how it's not a dvcs
16:19:09 <coppro> ais523: does scapegoat have a way to undo a merge in a history aware way that doesn't require at least one rebase/cherry-pick?
16:19:11 <ais523> aha, svn relies on t2 being the result of a merge of anything and a direct ancestor of HEAD
16:19:39 * ais523 looks up the scapegoat plans
16:19:57 <b_jonas> is scapegoat the name of your hypothetical vcs?
16:20:29 <coppro> it's called scapegoat because if you use it, you can blame all your development workflow problems on ais523
16:20:57 <ais523> it's called scapegoat because it uses blame (rather than diffs or trees) as its basic unit of information
16:21:07 <b_jonas> I blame all my development workflow problems on stupid co-workers who sometimes commit what seems like monkeys typing on their keyboard to the vcs repo
16:21:24 <ais523> coppro: it depends on what you mean by "undoing a merge"
16:21:54 <ais523> like, if you just gave a merge command, you can put things back the way they were in one command
16:22:20 <b_jonas> ais523: about the git, can you tell why ( git apply --no-commit t2..t1 && git cherry-pick --no-commit t1..t2 ) wouldn't work
16:22:36 <ais523> b_jonas: first should be cherry-pick
16:22:46 <coppro> ais523: but can you do it without breaking history?
16:22:55 <coppro> ais523: in git, you can do it with reset, but then you break histoyr
16:22:55 <b_jonas> ais523: no, first should be revert
16:22:55 <ais523> and it would work, it's just not history-aware at all, it's identical to the diff | apply method
16:23:00 <b_jonas> because cherry-pick doesn't go backwards
16:23:14 -!- bender| has quit (Ping timeout: 252 seconds).
16:23:30 <b_jonas> ais523: not history-aware in what sense? not aware of the history between t1 and t2, or not aware of the history between t1 and HEAD ?
16:23:39 <ais523> coppro: so if you run git merge (with a clean working directory) followed by git reset --hard, there's no change to anything, it puts everything back the way it was
16:23:48 <ais523> b_jonas: not aware of either, it's literally just diffing the trees
16:24:03 <coppro> but if I merge, and then push to a remote that I can't force, I can't undo the merge
16:24:57 <ais523> the remote now has dependencies on the branch that was merged
16:25:11 <b_jonas> not history aware might not be such a big problem as long as it can figure out intelligently which files are moved where
16:25:22 <b_jonas> if I need more history, I can merge in more intermediate steps between t1 and t2
16:25:40 -!- zadock has quit (Ping timeout: 272 seconds).
16:25:45 <ais523> scapegoat's plans have been worked out in two stages, the general design and some specific design
16:26:10 <b_jonas> but sadly I can't really tell git which files correspond to which other files, unless I tell it to merge changes to individual files, at which point I'm just diff3ing without a vcs basically
16:26:15 <ais523> there's nothing in the bits of the specific design that have been worked out yet that would let you revert a merge in that sense (i.e. have the merge and the undoing of the merge both in history)
16:26:22 <b_jonas> (except of course it still compresses stuff)
16:26:34 <ais523> however the general design would allow it via the same mechanism as merge conflict resolution
16:26:46 <ais523> (you'd add a commit whose effect was to cancel out all the previously merged commits)
16:27:01 <ais523> b_jonas: git doesn't know which files correspond to which other files, it works it out heuristically
16:27:13 <b_jonas> which is why this might work
16:27:30 <b_jonas> I'll probably only find out how well this stuff works as I actually try to use git at work
16:27:56 <b_jonas> And when I get really annoyed, I can still get versions into a temporary svn repo and use svn commands
16:28:21 <b_jonas> I have already tried that, git together with svn. It sort of works, but has problems.
16:28:35 <ais523> git-svn basically assumes that both the git and svn repos are entirely linear
16:28:53 <b_jonas> only git and svn separately
16:29:04 <b_jonas> each saw the other as only local modifications in the checked out files
16:29:19 <coppro> ais523: would such a cancellation commit allow the branch to be remerged correctly, then?
16:29:50 <ais523> yes, although there'd be a dependency between the merge and the cancel
16:30:06 <b_jonas> I don't really trust git-svn because the git and svn repo storage models are so different that I don't think they can correspond in a useful sane way
16:30:13 <ais523> if you merge a commit twice then cancel one, that should theoretically be the same as merging it once
16:30:30 <ais523> b_jonas: git-svn basically forces you into the common subset of git and svn
16:31:34 <b_jonas> That can still be useful in one case: when the dev people decide that they prefer git over svn and convert the project to use git, it's better to put some of the history into the git repo rather than put none of it in.
16:31:42 <b_jonas> So you use git-svn to convert the svn repo to git.
16:32:12 <b_jonas> Btw, the context is that at work, people decided to use git, but I'm not convinced it's better.
16:32:21 <coppro> omg, our deploy stopped working because someone had a folder open in a remote desktop session so it wasn't able to delete it. windows is the worst
16:32:39 <Vorpal> b_jonas: better than svn?
16:32:52 <Vorpal> I would suggest it is, but personally I find hg to be even better
16:33:02 <Vorpal> But that is probably because I'm more used to it
16:33:05 <b_jonas> It has some advantages, and if they would actually get people to use git well, then it would be better than not using a vcs properly, but I think they don't use either properly yet.
16:33:11 <b_jonas> There's hope they'll learn, maybe.
16:33:26 <\oren\> git is conceptually better but its user interface sucks
16:33:31 <Vorpal> we use hg at work, and it works fairly well for us
16:33:37 <b_jonas> \oren\: I actually prefer svn conceptually too
16:33:42 <Vorpal> oh and TortoiseHg has a *really* good GUI
16:33:57 <Vorpal> Not sure if there is anything like that for git?
16:34:15 <\oren\> in particular, there doesnt seem to be a good way to do what "svn ci" does in one command
16:34:21 <Vorpal> (Oh and tortoisehg is not windows specific, which I believe tortoisesvn is)
16:34:40 <Vorpal> \oren\: You mean commit and push?
16:34:42 <b_jonas> There's one incidental advantage of them using git by the way: since git doesn't really support sparse checkouts (there's rumours they're possible, but certainly not easy),
16:35:07 <b_jonas> I can get them not to commit their huge gigabyte large useless trees or files into the repo, which they used to do with the svn repo.
16:35:29 <Vorpal> b_jonas: why would they...? Never mind
16:35:45 <b_jonas> Vorpal: yes, part of the problem is the co-workers (and also me), not only the software
16:35:55 <Vorpal> b_jonas: svn:ignore / .gitignore?
16:36:25 <b_jonas> Vorpal: partly works, but sometimes they committed stuff that shouldn't be in the vcs deliberately
16:36:29 <Vorpal> I mean, we use that for the build directory and stuff like that at work (with .hgignore)
16:36:47 <b_jonas> In fact, there's also stuff that _could_ be in the vcs if only it supported sparse clones:
16:37:12 <Vorpal> Seems like the only way to solve that would be discussing the issue and arriving at a consensus or at least a policy
16:37:17 <b_jonas> it would make sense to add certain large dependencies to the vcs, and we did so with svn, because it makes it easier to check out and build the project without too much extra setup,
16:37:37 <Vorpal> b_jonas: what about sub-repos? I think git has that too?
16:37:41 <b_jonas> but it's impossible with git because you'd have to download all the history of the large dependencies, many of which are binary prebuilt and so don't diff-compress well.
16:37:41 <\oren\> well basically with git what I usually do it
16:37:47 <Vorpal> b_jonas: We certainly use sub repos at work with hg
16:38:01 -!- lynn has joined.
16:38:20 <b_jonas> Vorpal: perhaps could work, but wouldn't be too easy to set up, because you'd have to create a new repo on the server each time you upgrade a large dependency
16:38:48 <b_jonas> Vorpal: I got them to compromise and put the large deps in an svn repo, from where I can check them out
16:38:58 <Vorpal> Not much checked in binaries there (there are a few, external proprietary libraries )
16:39:00 <b_jonas> this way it's only two repos, not many sub-repos
16:39:21 -!- zadock has joined.
16:39:25 <b_jonas> (well, in theory. actually posssibly three because the svn brings in stuff from sub-repos. that doesn't work well, because of the svn interface)
16:39:33 <b_jonas> Oh, that reminds me, I have an svn question about subrepos too.
16:39:45 <\oren\> git commit -a; git push
16:40:36 <\oren\> wait. maybe a bash function can do this?
16:40:39 <fizzie> git can do shallow submodules, though I'm not sure how realistic that sort of stuff would be.
16:40:41 <Vorpal> b_jonas: well, we use many sub repos for a reason, since we have a common platform maintained by one team (abstracts hardware / simulation differences, CAN drivers, and so on), lots of shared functionality (talking with engine controllers of specific brands, path finding, ...) and then an application on top for the specific machine
16:40:43 <ais523> scapegoat can be set up to have a one-command commit+push
16:40:52 <ais523> specifically, you can set up a repository to mirror your own local repository
16:40:58 <ais523> then any changes to the local repo will be pushed automatically
16:41:18 <ais523> so all you have to do manually is the commit
16:41:24 <Vorpal> \oren\: obviously it can. Bash is also turing complete
16:41:54 <Vorpal> or, well, as turing complete as anything running on a real computer is
16:42:22 <Vorpal> ais523: hm... what about merges and rebasing then+
16:42:43 <\oren\> function gitci() {git commit -a;git push}
16:42:48 <ais523> Vorpal: scapegoat doesn't have rebasing, and merges are no different from commits in this respect
16:42:49 <fizzie> (And shallow clones in general.)
16:43:03 <Vorpal> ais523: scapegoat is not git? Or what is it?
16:43:32 <ais523> Vorpal: it's a VCS that #esoteric have been planning for years, because the existing VCSes suck
16:43:37 <ais523> however nobody wants to actually write it
16:44:46 <Vorpal> ais523: I'm not very familiar with the git workflow, but my usual hg workflow (which is probably horrible) is working with versioned MQ patches (possibly in multiple sub repos) until I'm ready to push, then I rebase everything to top and build (and test again), then I push. Repeat if someone else pushes while you do it (usually things don't happen that quickly)
16:44:56 -!- Elronnd has changed nick to earenndil.
16:45:16 <\oren\> my preferref VCS in practice is "time/version stamped folders"
16:45:37 <ais523> Vorpal: that behaviour isn't considered terrible wrt git; it's almost a flamewar whether the side-repositories (which git calls "branches" but that word means something else in hg) should be rebased or just merged
16:45:38 <Vorpal> ais523: that way the history is mostly linear, not "wide and messy"
16:45:48 <ais523> merging is more honest wrt the history; rebasing looks prettier but destroys information
16:46:24 <Vorpal> ais523: a more narrow history aids in binary searching for introduced bugs, Also it is easier to read and understand what happened
16:46:30 <b_jonas> “<ais523> scapegoat can be set up to have a one-command commit+push / specifically, you can set up a repository to mirror your own local repository” -- so can fossil, I hear
16:46:51 <Vorpal> ais523: but branches in git, is that like named branches in hg?
16:46:58 <\oren\> wait. idea: what if you simply did "timestamped folders" within a compressed archive?
16:47:06 <ais523> you can binary search just as well with the merge version
16:47:24 <fizzie> The feeling I've gotten from git submodules is that they're kind of awkward, workflow-wise. E.g. when you clone a repository that contains submodules, you'll need to do all that "git submodule init" / "git submodule update" stuff locally by hand, and I'm not sure if there's any way to e.g. put something in the repo so that the submodule clones are shallow by default.
16:47:24 <ais523> you check both parents first to see which side has the bug, then binary search within the side where the bug occurs
16:47:42 <ais523> Vorpal: branches in git are basically equivalent to separate repositories, but stored in an efficient way
16:48:16 <Vorpal> ais523: hm, so what is the git equivalent to named branches in hg then?
16:48:31 <Vorpal> wrt binary search: right, but on average, doesn't that result in having to check more revisions?
16:49:20 <\oren\> so in other words, you'd have "repo.tgz" which contains 20160102111640/ and so on, each folder with a copy of every file. but because of the compression, the the copies don't take up much space
16:49:27 <Vorpal> fizzie: sub repos in hg work fine, at least if your workflow is having a shell repo on top containing sub-repos (but not much in the way of code). Can't speak for other ways to use hg sub repos
16:50:03 <b_jonas> Anyway, svn question. I have a checked out directory with multiple large externals in it. I uncheckout one of them by ( svn up --set-depth=empty subdir && svn clean ). After that, how can I check out that external again in such a way that it's a sparse checkout (starting empty, then I'll change it) YET svn knows that it's the external given in the externals property, not just an unrelated checkout?
16:50:04 <Vorpal> git's way of doing it seems oddly complicated
16:50:12 <b_jonas> I can't get the working copy to do that in any way.
16:50:42 <b_jonas> I don't think I can even full checkout the external without having to re-checkout the whole directory containing that external, including the other large externals.
16:50:42 <Vorpal> b_jonas: what is a sparse svn checkout? If you mean "not the whole history" I thought that was always the case in svn?
16:51:09 <b_jonas> Vorpal: sparse checkout means not the whole tree. svn has quite good support for that, though not faultless.
16:51:11 <Vorpal> Though I haven't used svn for years
16:51:30 <fizzie> I don't see why you would call git branches "separate repositories" when they're literally just a pointer to a commit that gets moved automatically when you make new commit while that branch is your current branch.
16:51:56 <b_jonas> Vorpal: basically the working copy stores which parts of the tree are checked out and which aren't, and in fact you can also have any part of the working copy check out any version of any path in the repo at any depth
16:52:02 <Vorpal> fizzie: so each commit doesn't belong to a specific branch?
16:52:43 <b_jonas> One problem with git is that on windows it can't have multiple checkouts of the same repo without storing the history twice.
16:53:01 -!- lleu has joined.
16:53:17 <b_jonas> That's one of the reasons why I insisted really hard (when they decided to use git) to make people not put large trees in the history.
16:53:18 <Vorpal> fizzie: unlike in hg, where you can look at the history and see which branch a that commit is a part of? (Of course all commits prior to the branching point or prior to a merge between branches ends up being part of multiple branches)
16:53:22 <b_jonas> I want multiple checkouts.
16:53:44 <Vorpal> (but it still is part of a single specific branch)
16:54:30 <Vorpal> b_jonas: can't you share the history data between multiple checkouts? At least mercurial supports hardlinking common data files in the .hg directory
16:54:35 <Vorpal> I would assume git can do the same?
16:54:53 <b_jonas> Vorpal: how does that work? For a commit, you can ask which branches it's part of? Is that sort of like fossil's mutable labels or tags or however they're called?
16:55:10 <Vorpal> b_jonas: hm... not familiar with fossil
16:55:11 <b_jonas> Vorpal: git can do that on a filesystem where you can create hard links. No luck on windows.
16:55:41 <fizzie> Vorpal: Well, I mean. A branch is a pointer to a commit. You're free to make conceptual constructs like "all parent commits" and call them as being "in the branch", or "in the history of the branch", or whatnot.
16:55:42 <Vorpal> b_jonas: NTFS supports hardlink, mercurial supports hardlinking on Windows
16:55:52 <Vorpal> b_jonas: if you use FAT32 you are fucked though
16:56:01 <b_jonas> Vorpal: NTFS supports, but I think you need to be an admin to create them or something. Or is that only syminks?
16:56:15 <Vorpal> b_jonas: only symlinks afaik
16:56:25 <b_jonas> maybe git does support this on windows too then?
16:56:30 <Vorpal> b_jonas: though it differs between windows versions?
16:56:32 <b_jonas> what's the switch for clone?
16:57:03 <Vorpal> b_jonas: also how are you a developer without local admin?
16:57:05 <b_jonas> No FAT32, except on camera SD cards. People aren't that stupid.
16:57:20 <b_jonas> Vorpal: I might have local admin, but that doesn't mean git commands run as such
16:57:31 <fizzie> Hardlinking should be the default for git clone that doesn't cross filesystem boundaries.
16:57:33 <Vorpal> But you could run a relink command as that
16:57:41 <fizzie> There's only a "--no-hardlinks" switch if you want to disable it.
16:58:05 <Vorpal> at least hg has a (plugin?) command to relink as much data as possible when both repos has pulled from a remote repo separately
16:58:17 <Vorpal> Saved gigabytes for me
16:58:18 <b_jonas> fizzie: no, I mean the switch to set up the remote of the clone to be the same as the remote of the repo I'm cloning
16:58:36 <fizzie> Oh. I don't remember that.
16:58:42 <b_jonas> How do I have multiple git checkouts without downloading pulled data twice by the way?
16:59:07 <fizzie> They've added the "multiple separate working trees" thing as a "real" git command very recently, by the way.
16:59:10 <fizzie> http://git-scm.com/docs/git-worktree
16:59:24 <fizzie> Well, "very recently"; maybe 2.5 or so.
16:59:29 <b_jonas> Perhaps by mirroring the repo and pulling from that...
16:59:37 <b_jonas> fizzie: really? I'll have to look that up
16:59:44 <Vorpal> b_jonas: wrt commits belonging to branches: http://tortoisehg.bitbucket.org/img/vt_history.png explains it. From what I can tell using tortoisehg each commit is part of a named branch there (that GUI assigns a colour to each branch in the repo).
16:59:55 <b_jonas> especially if it can also do sparse checkouts
17:00:01 <Vorpal> So even after merges that commit has the branch "attribute" set to the same as when originally commited
17:00:26 <b_jonas> Vorpal: hmm, maybe I'd better not try to confuse myself with mercurial when my goal is learning git and figuring out how to use git and svn at work
17:00:52 <b_jonas> When they switched to git, I got a promise from them that they won't switch to mercurial any time soon
17:00:55 <Vorpal> b_jonas: I'm happy we use hg, since it works really well
17:01:08 <b_jonas> I don't claim mercurial is bad, but I didn't want us to switch.
17:01:08 <ais523> <fizzie> I don't see why you would call git branches "separate repositories" when they're literally just a pointer to a commit that gets moved automatically when you make new commit while that branch is your current branch. ← actual separate repositories are also literally that if the commits can be shared on disk, and almost that except that the commits have to be duplicated for data visibility reasons otherwise
17:01:21 <ais523> (although as git commits are immutable, duplicating them shouldn't be visible to the user)
17:01:38 <fizzie> Hrm. I have no idea if the worktree stuff lets you have different sparse checkouts for the different working trees.
17:01:58 <b_jonas> (They didn't intend to, either, but I needed an assurance about the future.)
17:02:43 <Vorpal> b_jonas: what sort of windows GUI is there for git btw?
17:02:46 <b_jonas> fizzie: it's not really only sparse checkouts that matter, but sparse clones
17:03:38 <b_jonas> Vorpal: multiple, there's a so-called tortoise git, and the built-in git gui tool, and some fancy stuff I don't remember the name, and more. since it's won the vcs wars, everyone is making separate fancy guis for it. I don't care, I'm just trying to learn the command line.
17:03:50 <ais523> many git guis are terrible
17:03:57 <ais523> gitk is good for read-only use
17:04:15 <ais523> although it doesn't have nearly enough functionality to use it to actually modify repos in anything but trivial ways
17:04:28 <Vorpal> ais523: any good all round GUI? Like tortoisehg is excellent for almost everything with hg
17:04:39 <b_jonas> Funnily, tortoisesvn is a really good gui (with only a few problems), I used it a lot, but I think adapting it to git was a REALLY bad idea, due to how the two vcses differ.
17:05:09 <Vorpal> b_jonas: right. Which is why tortoisehg and tortoisesvn actually work very differently, and why both of them are good
17:05:15 <fizzie> b_jonas: I don't know about sparse clones. I know about sparse checkouts (well, in the abstract) and shallow clones, but not that.
17:05:46 -!- heroux has quit (Ping timeout: 240 seconds).
17:08:04 <fizzie> Chromium has a very complicated build infrastructure that's kind of git + lots of specific stuff on top of it.
17:08:16 <coppro> oh god, chromium build
17:08:20 <b_jonas> fizzie: thanks, this git worktree is very interesting
17:08:22 * coppro goes into a corner to cry
17:08:33 <fizzie> I've built chromium, it's certainly no joy.
17:09:00 -!- heroux has joined.
17:09:54 -!- zadock has quit (Quit: Leaving).
17:10:35 <Vorpal> coppro: hm, what is the issue with their build system?
17:11:26 <coppro> it's just a complex layered mess
17:11:29 <fizzie> It's just complicated and very custom. Plus they have at least two of them in parallel.
17:11:31 <b_jonas> My main disagreement with the dev model of my co-workers isn't the vcs use though.
17:11:40 <Vorpal> For large projects I think custom build systems can be useful. For example we use a custom python/cmake mix to generate ninja build files at work, it works very well for our specific use case.
17:12:03 <coppro> fun fact: it's impossible with current tools to build 32-bit chromium without a 64-bit machine
17:12:14 <fizzie> Ninja is used for Chrome, sort-of.
17:12:20 <Vorpal> But then we build mixed SDK builds for machines running several nodes with different CPU architectures.
17:12:34 <Vorpal> And need to be able to start simulations and what not as well
17:12:38 <ais523> coppro: this sort of thing is why I wrote aimake
17:12:54 <ais523> I wanted to cut out as many of the levels of abstraction that build systems use as is reasonable
17:12:57 <coppro> ais523: aimake would make that problem worse, not better
17:13:15 <Vorpal> ais523: so you don't generate for a lower level build system?
17:13:18 <ais523> well, using a lot of memory is not an intended or fundamental part of aimake's design
17:13:33 <coppro> the reason you can't build Chromium on 32-bit is simple: the linker can't fit itself into a 32-bit virtual address space
17:13:33 <Vorpal> ais523: what about tup?
17:13:52 <ais523> it does use cc/gcc, though, rather than calling the compiler, linker, etc. separately
17:14:08 <Vorpal> ais523: what about ar?
17:14:12 -!- jaboja has quit (Ping timeout: 248 seconds).
17:14:16 <ais523> it calls ar directly I think
17:14:39 <ais523> atm it doesn't create static libraries, only dynamic ones
17:14:41 <ais523> so it has no reason to call ar
17:14:55 <ais523> in terms of unpacking libraries it uses nm and ld-via-cc rather than ar directly
17:15:13 <fizzie> Firefox: https://groups.google.com/forum/#!topic/mozilla.dev.platform/wLHTg_moymM
17:15:22 <fizzie> "At the end of last week our Windows PGO builds started failing on
17:15:22 <fizzie> mozilla-inbound (https://bugzilla.mozilla.org/show_bug.cgi?id=709193).
17:15:22 <fizzie> After some investigation we determined that the problem seems to be that
17:15:22 <fizzie> the linker is running out of virtual address space during the optimization
17:15:30 <fizzie> "This is not the first time we've run into this problem (e.g. Bug 543034).
17:15:30 <fizzie> A couple years ago we hit the 2 GB virtual address space limit. The build
17:15:30 <fizzie> machines were changed to use /3GB and that additional GB of address space
17:15:35 <Vorpal> ais523: why would it unpack libraries?
17:15:54 <b_jonas> What's the deal with every of these non-C++ languages insisting that if you want to link programs containing that language you need to use their compiler to invoke the linker? How are you supposed to link something that contains more than one of C++, haskell, go, rust, etc?
17:16:00 <ais523> Vorpal: to know which ones to link in
17:16:41 <ais523> aimake tries to handle as many steps of the build, including many that are normally done by humans
17:16:46 <ais523> and thus have saved me a lot of time
17:17:06 <b_jonas> And even for gcc, why does it need a separate g++ executable, rather than have a switch at linking stage to say that the project contains c++ as well as possibly other languages?
17:17:21 <Vorpal> ais523: hm... isn't that specified as dependencies? Like "I need to link to libssl"? Otherwise you would have to unpack every library on the entire system (or that entire cross compilation sysroot) and hope that the symbol name is unique and doesn't show up in multiple libraries (say, ncurses and ncursesw)
17:17:24 <ais523> b_jonas: at least with g++ you don't have to use it, g++ is just gcc that passes the switches needed for C++ by default
17:17:28 <ais523> to stop you having to remember them
17:17:30 <b_jonas> What gcc command do you even use to _properly_ link C++ and fortran together?
17:17:31 <ais523> (there are quite a lot)
17:17:40 <b_jonas> ais523: yes, but the problem is that the switches _change_
17:18:05 <ais523> Vorpal: currently the approach is that you specify a list of libraries you might need (that don't necessarily have to even exist)
17:18:05 <b_jonas> I have linked c++ without g++, but then it stopped working when it needed more switches
17:18:11 <b_jonas> and it gets worse if you use threading
17:18:15 <ais523> aimake unpacks just those ones and uses it to figure out which libraries you actually do need
17:19:00 <Vorpal> ais523: I'm not convinced. What happens if you rely on code that runs in static constructors?
17:19:10 <Vorpal> Might only be relevant for dynamic libraries
17:19:26 <Vorpal> Since that won't work anyway in static libraries
17:19:27 <ais523> Vorpal: it's not like it links only part of the library
17:19:27 <ais523> it links the entire library
17:19:34 <ais523> just relies on symbols to figure out what to link
17:19:37 <ais523> especially in terms of object files
17:19:50 <Vorpal> ais523: unless it is static, in which case ld will only pull in the required object files
17:19:51 <b_jonas> But I think gcc is improving in thise respect: they've actually added a single switch that means you want to use posix threads, rather than having to use various -l and -D stuff, and getting mysterious problems at runtime if you mess them up.
17:19:52 <ais523> aimake needs to know that a symbol comes from a library, so that it knows that it doesn't have to look for it in object files
17:20:08 <ais523> I mean, suppose I have foo.c and bar.c
17:20:17 <ais523> do I link them together, or are they meant to be separate?
17:20:28 <ais523> answering this question may depend on whether bar.c defines symbols that are also defined in a library
17:20:30 <Vorpal> ais523: also it sounds like aimake won't scale well if it has to track all the symbols. Not to large C++ projects anyway
17:20:40 <ais523> it tracks all the symbols, all right :-
17:20:52 <ais523> it may potentially have scaling problems; it uses a lot of memory as it is
17:21:24 <b_jonas> ais523: yes, but I'd like to set which parts of my code I want to link deliberately, rather than accidentally pulling stuff in because I use a symbol
17:21:41 <b_jonas> ais523: so aimake might work well for nethack where the dependencies are all messed up already
17:21:51 <b_jonas> but I don't want to use that approach in my projects
17:21:54 <Vorpal> ais523: I have seen ld at work (keep in mind we link everything statically for release builds, since we mostly run one program per node) use several GBs of RAM.
17:21:58 <ais523> I don't see why you'd want to waste time doing a job yourself when a computer can do it faster
17:22:01 <Vorpal> I can't imagine using aimake there
17:22:20 <Vorpal> And that is not work link time optimisation either
17:22:32 <coppro> fizzie: do you remember how to turn on flash local storage in chrome?
17:22:57 <Vorpal> ais523: true. Do you know ld can do that for you though? At least GNU ld
17:23:02 <b_jonas> ais523: my main problem with the dev model my co-workers are using is that they're always building one huge executable containing everything, full of stuff you can't compile half the time because some co-worker messes up something in the part of the code you don't need, and full of code that writes past the end of their arrays or through stray pointers
17:23:02 <Vorpal> ais523: -Wl,--as-needed
17:23:22 <b_jonas> whereas I want to build in a unixy models, experimenting with a small executable containing _only_ the code I need, nothing more
17:23:33 <b_jonas> so that when I get an error, I know it's somewhere in the code I did link in
17:23:39 <b_jonas> not in some unrelated part of someone else's code
17:23:41 <Vorpal> b_jonas: ... that is just bad code that crashes?
17:23:41 <ais523> Vorpal: err, suppose your project has two files that contain functions with the same name (common examples: main, yyparse)
17:23:51 <ais523> ld isn't going to magically figure out which one you wanted to link
17:23:59 <b_jonas> Vorpal: yes, but it's typically bad code in stuff I'm not currently working on,
17:24:00 <ais523> aimake can, but it requires a lot more analysis of the entire project
17:24:09 <b_jonas> which stops concentrating on my work all the time
17:24:17 <Vorpal> ais523: which is why you list files beloning to that program (hopefully everything under a specific directory tree?) and potential dependency libraries
17:24:30 <b_jonas> so I do work on stuff in separate small executables for al library with a sane small interface,
17:24:39 <b_jonas> and then integrate that library into the big code,
17:24:42 <Vorpal> ais523: mixing the source of multiple programs in the same directory is just bad code IMO
17:24:51 <ais523> Vorpal: what if they share some files?
17:25:01 <b_jonas> so that MOST OF THE TIME, when I'm not doing that integration work, I don't have to headdesk on all those segfaults and can just DO MY WORK
17:25:04 <Vorpal> ais523: a common library (.a or .so)
17:25:05 <ais523> in NetHack's case we're building multiple programs, but many files are shared between many program
17:25:14 <ais523> often including header files, which you can't put into a library
17:25:26 <Vorpal> ais523: and structure the source code based on that library layout.
17:25:38 <ais523> it would be nice to organize it in such a way that we could have separate libraries and code layout but it'd be a lot of work
17:26:00 <Vorpal> ais523: um, so the library has a source and an include directory? And when you link a library you also pull in the public include directory in the include path?
17:26:10 <Vorpal> And make that pulling in transitive if you want
17:26:19 <int-e> b_jonas: sounds like a good way to ensure more eyeballs on all that bad code ;-)
17:27:01 <ais523> Vorpal: I mean you could easily end up with 5 or 6 layers of nested libraries like this
17:27:05 <Vorpal> ais523: also this allows each library to have it's own unit tests or quickcheck style tests easily
17:27:24 <ais523> also some of the files are generated
17:27:26 <b_jonas> int-e: not really. somehow it always turns out such that everyone else is running the same big framework thing with exactly the same configuration in the same very small input files and stopping it after two seconds, whereas I run it with various options on various inputs and actually wait for it to finish, and so I get all the segfaults and they don't
17:27:35 <b_jonas> int-e: and their code is BIG
17:27:53 <b_jonas> and yes, I also make mistakes, and write code that doesn't work or crashes
17:28:00 <Vorpal> ais523: yeah, and? I think we have 50+ library projects at work. Plus a library for each with mock/dummy classes of key interfaces it exposes. Plus a unit test project for each.
17:28:02 <b_jonas> but still, that just doesn't work for me as a dev model
17:28:26 <Vorpal> ais523: and I don't see the issue with generated files?
17:28:38 <Vorpal> A proper build system should be able to handle that
17:28:40 <b_jonas> This way, I still get all the segfaults, but my work time is separated to times when I can actually work on my code, and times when I'm integrating stuff and getting the segfaults and trying to get others to fix them
17:28:54 <ais523> Vorpal: well, aimake can, most build systems can't though
17:28:56 <Vorpal> ais523: for example, add_rule(.yy -> ...) or something like that
17:29:37 <b_jonas> And it's not only segfaults, it's also a lot of times when they get the build system in a state where it doesn't work from a clean state but works on their machine where they never delete the previous build products. Which is, by the way, something that aimake avoids.
17:29:47 <ais523> Vorpal: so the problem is with dependency tracking
17:29:54 <Vorpal> ais523: the one I use at work can. A custom system built on top of cmake, with some python parts too. Though the "handle file extension" part is pure cmake iirc
17:30:05 <b_jonas> Seriously, at one time they removed an entire library but still depended on it, and it worked on their machines because they didn't remove the built version of the library.
17:30:15 <ais523> there are two restrictions on dependencies: a) a file can't be built before its dependencies are; b) if a dependency is rebuilt, the files it depends on must be rebuilt
17:30:19 <b_jonas> I don't remember the details.
17:30:19 <ais523> most build systems handle b) but not a)
17:31:02 <Vorpal> ais523: hm b is wrong, you means "the files that depends on *it*" surely?
17:31:07 <b_jonas> Or they have undocumented local (not committed) modifications on their copy of the code that makes the stuff build;
17:31:11 <Vorpal> also... this is a case of recursive make failing isn't it?
17:31:22 <b_jonas> or quite the opposite, they check in local modifications they shouldn't and that breaks the code everywhere but on their systems.
17:31:29 <Vorpal> ais523: Which is why you generate a single layer of build system that knows the entire tree
17:31:30 <ais523> also this fails even in a nonrecursive make, unless you write the dependencies explicitly
17:31:47 -!- AnotherTest has joined.
17:31:50 <b_jonas> Basically the lesson I learned is that the best way to work with a team is to not work with a team but work separately most of the time.
17:31:51 <ais523> which is something that is incredibly tedious and errorprone and almost all build systems do themselves nowadays
17:31:51 <Vorpal> not really? GCC exports dependency info using -Msomething iirc?
17:32:00 <ais523> Vorpal: the -M method does not handle a)
17:32:27 <ais523> because it relies on the file building successfully, which it can't do if its dependencies haven't been built yet
17:33:14 <Vorpal> ais523: well that is why you need your build system to set up that any custom build steps of a target (defined here as "executable/library/dynamic library") that generates headers should be run before building other sources from said target
17:33:47 <ais523> what if the custom build steps require other parts of your project to be built first?
17:34:22 <b_jonas> Vorpal: the problem is that in nethack, the dependencies of the part that generates headers is really messed up
17:34:29 <Vorpal> ais523: then it needs to list that dependency/have a dependency extractor for that file format? I can't see how you could avoid that.
17:34:46 <b_jonas> like, it depends on a header from which it can use only half of the macros, because the other half needs the header you're generating, but you can never tell which macros you can actually use and which you can't,
17:35:03 <ais523> Vorpal: aimake first checks all the dependencies of everything, then builds as much as it can
17:35:11 <b_jonas> so at one point there was a circular dependency in the whole thing, but the build system didn't notice because people never deleted the generated headers,
17:35:15 <ais523> if any custom build rules become runnable as a result then they're run
17:35:18 <Vorpal> b_jonas: well, that is just bad design, even excluding the build system issues
17:35:18 <b_jonas> at which point ais523 had enough and wrote a customf build system
17:35:24 <ais523> repeat until everything is built
17:35:32 <b_jonas> Vorpal: but nobody has time to clean it up in nethack
17:35:38 <Vorpal> ais523: parallel make I hope?
17:35:51 <b_jonas> it was designed back when it was made sense, on machines with small memory where you want to precompute stuff like monstr
17:35:57 <ais523> Vorpal: a circular dependency is really easy to introduce by mistake and hard to detect
17:35:58 <b_jonas> most of it should be removed
17:36:28 <ais523> Vorpal: currently aimake doesn't handle parallel make, the problem being that the bit that parallelizes easily (actually running cc, ld, etc.) isn't the most timeconsuming bit
17:36:38 -!- jaboja has joined.
17:36:39 <ais523> it spends about as much time calculating the build as it does actually building
17:36:40 <Vorpal> b_jonas: I spent an afternoon at work fixing a cyclic dependency between libraries, which only worked since no one tried to build them as dynamic libraries earlier. Also wrote an error checker to detect that in the future (thankfully our build system exports a lot of meta data as YAML files, so that was easy)
17:36:50 <ais523> I have plans that would make build calculation parallelisable too but they'd have to wait until aimake 4
17:37:04 <Vorpal> ais523: ah... Yeah you use C not C++
17:37:12 <b_jonas> People at work add strange things to the build stuff, but they haven't tried to add headers dynamically generated yet, luckily.
17:37:14 <Vorpal> thank god for distcc is all I have to say on the matter
17:37:26 <ais523> Vorpal: you do know that a cyclic dependency between libraries (either static or shared) works just fine on Linux, right?
17:37:35 <ais523> Vorpal: ccache hardly makes any difference on NetHack 4
17:37:39 <Vorpal> Without ccache still takes 40 minutes to build a clean tree at work...
17:37:46 <ais523> in general, ccache should be a no-op if the build system is well-designed
17:38:05 <Vorpal> With ccache (and everything in cache) + CCACHE_HARDLINK=1 it takes basically 30 seconds
17:38:09 <ais523> also you shouldn't be building from clean trees anyway; in a correctly designed build system doing so should produce the same result as building from any possible dirty tree
17:38:23 <ais523> if you're using ccache + a "clean" build you're really just doing a no-change dirty build
17:38:35 <ais523> thus the 30 second time is very misleading
17:38:35 <b_jonas> ais523: One problem I had to debug at work years ago was symbols accidentally defined twice, once in a dynamic library, resulting in strange segfaults at runtime. Can aimake help find those problems?
17:38:57 <ais523> b_jonas: I'm not sure, it may be that it finds some but not others
17:38:59 <Vorpal> ais523: clean here as in "I changed a core header in the lowest level, now waiting for 9000+ C++ files to rebuild"
17:39:03 <ais523> it could probably be made to find them though
17:39:12 <Vorpal> ais523: and 30 seconds is basically the link time
17:39:31 <ais523> Vorpal: ah right, in that case it's a case of your build system failing to detect that the header file change doesn't change anything at a lower level
17:39:51 <ais523> in my experience normally a header file change does change things elsewhere, though, even if it's just __LINE__ directives
17:39:54 <Vorpal> ais523: oh it did change everything. But I had to revert the change, and that is when cache saved me
17:40:09 <b_jonas> ais523: The problem in this case was actually that the dynlib came in binary form only, but I have also seen duplicates of c source files or duplicates of h files in the tree at some points.
17:40:12 <ais523> oh I see, ccache caches old versions too? that's functionality I hadn't thought about
17:40:45 <b_jonas> Also, headers with generic names clashing with headers in the system or dependencies.
17:40:50 <ais523> b_jonas: aimake does catch duplicate c/h files; it only complains if the situation is symmetrical enough that it can't figure out which to use
17:40:53 <Vorpal> ais523: ccache caches up to a set limit in GB of object files, using LRU eviction to evict some percentage when it hits the limit
17:41:03 <b_jonas> At least these days they don't give stupid generic one-word names, I got them to stop that.
17:41:09 <ais523> the generic name header problem actually happens in NitroHack and thus NH4 (magic.h)
17:41:12 <Vorpal> ais523: that means with a sufficient limit (IIRC I use like 20 GB?)
17:41:17 <ais523> so I had to adapt aimake to handle it
17:41:17 <Vorpal> it can store old files
17:41:30 <b_jonas> But I should try to revive that old utility I wrote that searches for duplicate headers and duplicate source files and also unused source files and unused headers.
17:42:19 <Vorpal> ais523: I think the core issue here is that nethack has a messy source tree, but not a very large one. Still large enough to be painful to clean up
17:42:25 <b_jonas> ais523: We've had both actual duplicates of source files, and just different files with the same name.
17:43:01 <b_jonas> ais523: Sure, nethack has lots of generic names, but where it hurts me a lot is the ton of macro names. I should at least convert most of them to enums and inline functions at some point, and later rename some of them
17:43:22 <Vorpal> ais523: While I work on a source tree that contains upwards of 10k C++ files. And there are parts using boost (oh god). And have to build for three architectures since the target embedded system has multiple CAN/ethernet nodes that run different CPU architectures.
17:43:26 <Vorpal> So very different use cases
17:44:24 <Vorpal> Not using proper library separation and so on in our case would be unmanageable, even using something like aimake. Also we have fairly few generated files. Less than 50 over that entire tree
17:44:57 <Vorpal> I would actually love C with namespaces as a language.
17:45:05 <Vorpal> And properly namespaced macros
17:45:26 <b_jonas> Vorpal: you can use C++ as C with namespaces if you want
17:45:45 <b_jonas> I don't want to use it that way, but you can
17:45:49 <Vorpal> b_jonas: technically not, since it wouldn't let me name a variable "new"
17:45:49 <b_jonas> it's a multi-paradigm language
17:46:13 <b_jonas> (the ruby source code is full of variables named klass)
17:46:15 <Vorpal> b_jonas: well just pointing out they are different. I'm not suggesting you do that :P
17:46:35 <b_jonas> Vorpal: and variables named new isn't the biggest incompatibility
17:46:36 <Vorpal> The real issue with C++ is templates. And the code bloat and compile time slow down they result in
17:46:48 <b_jonas> certain conversions not being allowed in C++ is a bigger practical difference
17:47:04 <Vorpal> Oh, that's right, void* stuff
17:47:12 <Vorpal> you would have to cast malloc all the time
17:47:20 <ais523> b_jonas: I believe "class" is used as a variable name in NetHack too
17:47:27 <b_jonas> Vorpal: no, IMO the real issue with C++ is that people learned it before it became a sane language, and are still learning it from bad sources, because it's popular, so there's a lot of people writing bad C++ code
17:47:53 <b_jonas> Vorpal: and since C++ wants to be really compatible with everything, it allows you to write a lot of bad code easily
17:47:53 <Vorpal> b_jonas: well... STL is pretty bad in parts IMO. Boost is of course much worse than that
17:48:22 <b_jonas> I do like the C++ standard library AND lots of parts of boost. not all parts, mind you, but I don't have to use all of it, I only use some modules of it
17:48:33 <Vorpal> b_jonas: boost mpl is evil.
17:48:41 <b_jonas> And I like C++ in general a lot
17:49:13 <Vorpal> b_jonas: also the idea of separate header sources, rather than C++ modules exporting functions... Having to duplicate a lot of stuff between c/h
17:49:28 <Vorpal> Compare this to a language like python, java, C#, pretty much anything
17:49:49 <b_jonas> Vorpal: yes, but every language that tried to solve that so far ended up with no separate compilation with circular dependencies, so IMO it's much better than any of the alternatives
17:50:06 <b_jonas> Vorpal: look at all the research languages, ghc, and rust, they don't handle separate compilation properly
17:50:16 <b_jonas> It's easy to claim no headers if you compile everything together
17:50:34 <b_jonas> There _might_ be a solution, and some of the C++ module people are trying hard to find it
17:51:19 <Vorpal> Compiles an assembly at a time?
17:51:29 <b_jonas> And it gets much harder to solve if you don't want just C stuff, but templates and/or a dependent type system.
17:52:16 <Vorpal> b_jonas: how does haskell do that when working with polymorphism across packages?
17:52:24 <b_jonas> Or proper abstractions, which require exporting inline functions in the C sense, that is, functions of which the compiler knows the definition in other modules so it can optimize using them. Can rust do that yet by the way?
17:52:38 <Vorpal> no idea, never looked at rust
17:52:49 <b_jonas> Vorpal: dunno about haskell, ask the haskell people here
17:53:45 <b_jonas> And the problem is that these compilers with no separate compilation often also make it harder to build projects containing multiple languages.
17:53:49 <b_jonas> It's still possible, but hard.
17:54:18 <Vorpal> b_jonas: well okay that is true, but mixing most languages is hard. Unless it is C and C++
17:54:26 <b_jonas> You can build rust and C together, or haskell and C together, but try to mix multiple of fortran, C, C++, go, haskell, rust, C#, java, whatever together and you're screwed.
17:54:39 <b_jonas> If you just compromise with proper headers, it becomes easy.
17:54:48 <Vorpal> You basically have to call FFI to a dynamic library exporting C functions in most languages
17:54:49 <b_jonas> Everything compiles its own code and reads headers.
17:55:01 <b_jonas> Vorpal: yes, and that's a good thing. The problem is how you link the whole thing
17:55:15 <b_jonas> I DO like the haskell / rust approach of FFI
17:55:29 <b_jonas> which is also mostly C++'s approach
17:55:32 <Vorpal> b_jonas: well, if you use a FFI to load a library and then call functions, you aren't linking per se, you are just doing dlopen
17:55:43 <b_jonas> having C as a sort of common base everything can call into an export functions into
17:55:47 <Vorpal> thinking of python here
17:56:06 <b_jonas> (which is also the easiest way to link assembly files into C or C++ by the way)
17:56:28 <b_jonas> Vorpal: no no, with the haskell and rust FFI, you can link at link time, you don't have to dynamically load
17:56:32 <Vorpal> b_jonas: I haven't done FFI in haskell, and never used rust, so what is that approach?
17:56:43 <b_jonas> Vorpal: I think you can link properly with python too, can't you? I know it can also load dynamically
17:57:54 <Vorpal> b_jonas: well, not really, you can implement modules in C, and then load them. And there is a standard module for FFI. Also there is a separate package called cython, which takes a subset of python with some extensions and generates a C module that calls into python's C API for certain things.
17:58:32 <Vorpal> But this all uses dynamic .so loading at runtime, triggered by importing a module name that the interpreter finds in the module path as a .so file
17:59:05 <Vorpal> This is mostly down to python being byte code compiled and then interpreted
17:59:28 <Vorpal> (or JITed from byte code if you use PyPy)
18:01:23 <b_jonas> Vorpal: basically, C++/haskell/rust maps most of the C type system to part of the C++/haskell/rust type system; and then you can ask that certain data or function types must be represented as in C, and that way access (read, write, call) alien data and functions through pointers, or have alien code access some of your data or functions through pointers; and you can also link import unmangled symbols (variables or functions) that are defined externally (i
18:01:35 <b_jonas> \ and you can also link import unmangled symbols (variables or functions) that are defined externally (in C or other languages), or ask that some variable or function you define must be unmangled, and then other languages can link to it.
18:02:15 <Vorpal> I think something was cut there
18:02:20 <b_jonas> This still requires you to sort of translate the structure definitions and function signatures to that other language, and explicitly declare some stuff, but it works very cleanly and nicely.
18:02:24 <Vorpal> Oh wait, it repeated a bit?
18:02:35 <b_jonas> Vorpal: I repeated a bit because it got cut
18:02:58 <Vorpal> b_jonas: the issue with C is that it doesn't export type info, so that means you have to know the proper type in haskell the n
18:02:58 <b_jonas> but I can't tell where exactly it's cut so there's an overlap
18:03:11 <Vorpal> Unless haskell can parse arbitrary C headers
18:03:33 <b_jonas> Vorpal: yes, you have to know the proper types. There's some various help for this, but I don't believe in it much.
18:04:03 <Vorpal> b_jonas: C headers (and C++ even more so) are way too complicated for parsing this info out in a sane way in the general case.
18:04:45 <Vorpal> also ... is evil from the typo info POV
18:04:56 <Vorpal> (i.e. printf and such)
18:05:11 <b_jonas> Also, this model is also how you can communicate between C++ code built with different ABIs, through C
18:05:50 <Vorpal> b_jonas: and C++ with the same ABI if you dlopen. There is no good way with dlopen to not go through a C layer afaik
18:06:38 <b_jonas> Note that C++ has some special cases: data structures with a type that corresponds to C are always represented as in C, you don't need extra flags for that, and on typical ABIs (but not mandatorily in the standard) functions with a signature corresponding to C are also represented as in C, so on those systems you don't need an extra declaration there either,
18:06:52 <b_jonas> so all you need is declaring some symbols as unmangled so they link properly.
18:07:12 <Vorpal> b_jonas: um.. extern "C".. for name mangling
18:07:15 <b_jonas> Vorpal: no, you don't need to get dlopen in this. You can just link everything at build time.
18:07:24 <Vorpal> b_jonas: no I mean for the module case
18:07:29 <Vorpal> b_jonas: say you want to load plugins
18:08:09 <Vorpal> Then your plugins have to have a C function returning a C++ class or a C struct describing the module. Since you can't easily resolve mangled symbol names afaik
18:08:14 <Vorpal> not in any standard way anyway
18:08:24 <b_jonas> Oh, and further, this is also how you communicate between C code built with different ABIs, which happens on windows where the msvc compilers have an ABI where long int and long double are of different size than with the gcc ABIs.
18:08:45 <Vorpal> b_jonas: I would assume mingw would use the native ABI?
18:09:03 <b_jonas> (On windows x86_64, long int and unsigned long int are 4 bits with msvc, 8 bits with gcc.)
18:09:21 <Vorpal> what about long double?
18:09:23 <b_jonas> Vorpal: no, I think mingw still uses the gcc ABIs.
18:09:55 <Vorpal> Also on x86_64, Linux and Windows use different calling conventions. No idea about mingw though
18:10:03 <Vorpal> different sets of registers
18:10:04 <int-e> 4 bits, really now... scnr
18:10:23 <Vorpal> int-e: typo for bytes I assume
18:10:24 <b_jonas> Vorpal: long double is always the same as double with recent MSVC (which is, incidentally, a good thing if you don't care about ABI compatibility), but can be sometimes bigger (10, 12, 16 bytes? I dunno) on gcc depending on the arch
18:10:33 <b_jonas> I don't care much about long double, do I don't know the detauls
18:10:54 <Vorpal> b_jonas: that breaks MSVC ABI? Fairly sure it used to be that long double mapped to x87 on MSVC before
18:11:13 <int-e> x87 has 80 bit floats, so 10 bytes should be right
18:11:20 <b_jonas> Vorpal: yes, but that's no problem, since you rarely get into a case when you call functions compiled for linux on windows, or backwards, except with hand-written assembly functions
18:11:27 <Vorpal> int-e: 10 bytes with 16 byte alignment iirc?
18:11:55 <b_jonas> Vorpal: the MSVC abi breaks at every version basically, though they keep the C abi. But the change with long double was VERY long ago, possibly at the jump between win16 and win32.
18:11:57 <int-e> probably, I was going to say that I don't know about the alignment.
18:12:14 <b_jonas> int-e: yes, but the x87 should die
18:12:21 <b_jonas> int-e: it's no longer useful in the x86_64 era
18:12:27 <b_jonas> it's maintained only for compatibility reasons
18:12:37 <Vorpal> b_jonas: hm really? Will have to check using msvc2005 at work... We have that because of legacy WinCE crap
18:12:37 <b_jonas> it should DIE a well deserved and peaceful death
18:12:48 <b_jonas> Vorpal: I don't know really, sorry
18:12:55 <b_jonas> I don't know the details of the long double
18:13:00 <b_jonas> check yourself if you want to be sure
18:13:09 <b_jonas> and I definitely don't know about WinCE
18:13:19 <Vorpal> b_jonas: nobody does, and that is part of the issue :P
18:13:21 <b_jonas> do you have legacy WinCE crap?
18:13:28 <b_jonas> luckily we don't have that kind of thing
18:13:36 <b_jonas> we use fairly recent tools most of the time
18:13:47 <b_jonas> but usually not 15 year old crap
18:14:00 <b_jonas> I have used old libraries, but they're GOOD ones
18:14:20 <Vorpal> b_jonas: we have such embedded devices yes, Also devices using a custom RTOS as well. But they are about to go on "critical bug fix only" soon and then they will be completely phased out in 5-10 years time
18:15:02 <b_jonas> Vorpal: we have embedded devices, at the more generalized workplace, but I have little contact with them on the projects I work on, and I don't think we have any WinCE devices
18:15:22 <b_jonas> we have embedded devices running some unix on non-x86
18:15:40 <b_jonas> still caused some problems, and I don't want to work with them
18:15:43 <Vorpal> b_jonas: I program embedded real time control systems for massive (think 200 metric tons) mining equipment. So I have to deal with all sorts of weird hardware. And CAN buses and what not. But also with code that is relatively error free, because of the issues that would result if it weren't
18:15:58 <b_jonas> I like the modern tools, and don't like the lack of toolset support for embedded devices
18:16:01 <Vorpal> Lots of layers of safety. And safety classed code
18:16:15 <b_jonas> so I like working with the modern desktop computers and servers
18:16:27 <Vorpal> b_jonas: moving to real time linux now though
18:16:48 <b_jonas> Luckily I don't work with anything of that sort
18:16:52 <b_jonas> I don't have that kind of stress
18:16:56 <Vorpal> b_jonas: mostly x86 and ARM though, except some real low level stuff, which I don't deal with directly anyway
18:17:27 <b_jonas> "Mostly x86 and ARM" is true here too, I believe
18:17:40 <b_jonas> But I would prefer if it was x86_64 only, no x86_32 and no ARM
18:17:42 <Vorpal> b_jonas: eh it isn't stressful really. That is what layered safety is. If the lower level modules detect the higher level modules aren't running properly then you cut the power
18:17:51 <Vorpal> better than running off a clif
18:18:27 <Vorpal> oh, I don't do anything 64-bit. Well the dev computers are of course, but no target module
18:18:48 <b_jonas> We run mostly x86_64 these days, luckily
18:19:07 <b_jonas> But support for x86_64 is still not perfect, some toold or libraries are more easily available on x86_32
18:19:14 <b_jonas> but that's improving a lot
18:19:20 <b_jonas> x86_32 is going away luckiliy
18:19:32 <Vorpal> The code targets stuff like 32-bit 1 GHz dual core CPUs. That can go from -80 to +80 C working temperature
18:19:39 <Vorpal> With ECC memory and so on
18:19:47 <b_jonas> There's lots of stuff I couldn't use on x86_32 five years ago, but can now
18:20:06 <Vorpal> b_jonas: really? On Windows I can imagine yes
18:20:23 <Vorpal> Still I develop in Linux most of the time.
18:21:12 <Vorpal> Hm I think the old laptop next to me has a failing battery. The battery lamp is blinking green orange orange orange in a cycle instead of charging
18:21:23 <Vorpal> That is annoying. It is my last computer with a real serial port
18:22:08 <Vorpal> b_jonas: it has a parallel port too
18:22:30 <Vorpal> But it is the serial port I sometimes use
18:22:48 <b_jonas> My current (old) home PC has both. My next home computer might not have either.
18:23:18 <b_jonas> But my father has already had problems with no serial ports and having to use serial port extender USB thingies in some computers he admins.
18:23:48 <Vorpal> Oh the battery is quite hot as well. Damn
18:24:07 <b_jonas> I'm not really a hardware guy, so at work it's other people who figure out this sort of hardware stuff.
18:24:34 <Vorpal> b_jonas: those doesn't work well if you need to use the serial port pins as GPIO, which is what one device I have does
18:24:52 <b_jonas> I'll have to do some hardware stuff for home when I buy my next home pc of course, as in deciding what to buy. But my father and brother can help, they're more hardware guys than I am.
18:25:18 <b_jonas> At work I usually just ask other people for this kind of stuff.
18:26:25 <b_jonas> And I certainly don't try to decide what hardware to buy at work.
18:26:25 <Vorpal> At work everything is USB or ethernet wrt the development computer and weird special things for the lab. Even the ethernet on the lab is a screwed on connector that is dust and water proof
18:27:23 <Vorpal> b_jonas: I wish I had the ability to decide such. Heh. Too big company for that
18:27:45 <b_jonas> Sometimes I try to give hints about properties that would be useful for the hardware.
18:27:49 <Vorpal> Still that work laptop is quite neat. 32 GB RAM, Core i7. And so on
18:28:14 <Vorpal> Basically the best mobile workstation you can buy from Dell is what we get, new one every 3 years
18:28:55 <b_jonas> Like, "since you have to buy an SD card reader for this project, why don't you buy one that also handles micro SD cards, see, I have this one here for personal use that cost only like 1200 forint and does that" but no, they had to buy the more expensive one that doesn't do micro SD.
18:29:15 <Vorpal> b_jonas: what on earth is forint?
18:29:22 <b_jonas> I don't try to mess with the more complicated hardware, like the big server machine with lots of disks and stuff.
18:29:45 <Vorpal> I thought Hungary used Euro yeah
18:30:02 <b_jonas> no, and hardware is measured in dollar instead of euro anyway
18:30:16 <b_jonas> because it comes from China where people use dollars
18:30:40 <Vorpal> b_jonas: also, I haven't seen a micro SD that didn't come with an adapter to SD anyway
18:30:44 <b_jonas> you order the hardware from Asia, and they sell it in dollars, not euros
18:30:50 <\oren\> I thought china uses RMB
18:30:54 <b_jonas> not only China, but also Korea and Taiwan etc
18:31:18 <b_jonas> coppro: in international sales, they generally use USD
18:31:30 <\oren\> they price stuff in USD
18:31:41 <b_jonas> so if I buy stuff on internet that's not from Hungary, it can be EUR, USD, or GBP
18:32:25 <b_jonas> luckily all the available payment methods handle the monetary conversions
18:32:39 <Vorpal> b_jonas: For us it is all SEK and either custom made hardware (for the product, it has to be IP classed and handle extreme temperatures, salt water running over the display and so on), or standard desktop/servers/switches/whatever from Dell/HP/Cisco and so on
18:33:03 <b_jonas> I use SEK only when I physically travel to Sweden
18:33:04 <\oren\> Oh, I know! I'll find alist of the most used maybe 500 hcaracters in simplified chinese and do those
18:33:10 <Vorpal> b_jonas: well I live here so :)
18:33:57 <Vorpal> b_jonas: and it is a Swedish company that makes that rugged hardware for us.
18:33:57 <b_jonas> \oren\: fix the presentation of Shavian letters on the test page yet so that they appear in only four lines, not five, so the lowercased version of a letter is two lines below the uppercased one
18:34:59 <Vorpal> b_jonas: I guess working on a large company making very small series of very expensive machines puts a different spin on eveything
18:35:39 <Vorpal> Where each machine is mostly unique and a customer might pay for having a function only they will ever use developed
18:36:52 <b_jonas> Vorpal: we sometimes do that too, but not _that_ expensive, not mining equipment, only like a large server or two plus lots of cameras; and some of the work does the opposite, with small embedded devices produced in thousands
18:37:25 <Vorpal> b_jonas: I think a single display for our machine might cost ~20000 USD or around there.
18:37:38 <Vorpal> b_jonas: ah, so you retro fit mining machines then?
18:38:02 <b_jonas> it was you who mentioned mining machines
18:38:08 <b_jonas> which I assume are expensive
18:38:18 <Vorpal> b_jonas: yes, millions USD
18:38:37 <b_jonas> whereas we put lots of cameras, plus servers communicating with the cameras
18:38:42 <Vorpal> I read "mining equipment, only like a large server or two plus lots of cameras" missing the "not"
18:38:48 <Vorpal> Thus I eneded up at "retrofitting"
18:38:54 <Vorpal> Because there are companies that do that
18:39:11 <Vorpal> Take a hydralic dumb machine and add in some screens to help them navigate it or such
18:40:02 <Vorpal> b_jonas: speaking of cameras, you wouldn't believe how expensive a rugged PTZ IP camera can be
18:40:12 <Vorpal> (I assume you know what a PTZ camera is?)
18:40:16 <b_jonas> well, some of what we do might count as retrofitting in that we're using cameras in a way they're not designed and that they don't support well
18:40:23 <b_jonas> yes, I know how expensive they can be
18:40:34 <b_jonas> we have some expensive ones
18:40:56 <Vorpal> b_jonas: We have some Bosch one that cost 50 000 USD. For rugged outdoor use. I guess it is PTZW since it also has a wiper you can control
18:41:32 <Vorpal> Never seen a better optical zoom than that though. Ever
18:41:42 <b_jonas> we have everything from cheap webcameras costing like 8 dollars to expensive PTZ cameras costing ten thousand USD or more
18:42:22 <b_jonas> as well as DLSR cameras, stereo and TOF cameras, and more
18:42:38 <Vorpal> Only a few cameras in our case. All rugged
18:43:04 <Vorpal> Sounds annoying having to deal with so many different models
18:43:28 <Vorpal> It is bad enough to deal with like 3 different models with their own quirks
18:43:34 <b_jonas> Various ages too, from old analog PTZ and fixed cameras, up to stuff so modern you can't even buy it on the market yet
18:44:10 <b_jonas> Yes, and their control all sucks, because we're using them in ways they weren't designed for, so their built-in software or firmware doesn't support what we want
18:44:44 <b_jonas> But some suck more than others
18:44:49 <Vorpal> b_jonas: oh? I can't see how a PTZ can be that complicated really
18:45:04 <Vorpal> Just some commands to control some actuators
18:45:12 <b_jonas> Some of them at least have an interface that's well-designed for its purpose, some don't manage even that
18:45:52 <Vorpal> b_jonas: given what you said about co-worker code quality that doesn't surprise me
18:46:16 <\oren\> I fixed the presentation of deseret and shavian
18:46:21 <Vorpal> I have slowly realized that most developers don't really know what they are doing
18:46:34 <Vorpal> Which is what causes terrible code
18:46:52 <b_jonas> Vorpal: yes, commands to control the engines, but not enough commands to find out where the engines actually moved, or when they actually stopped moving, and since it's hardware it's all nondeterministic; and even the non-PTZ part, like the focus and sensitivity and image compression settings can be hard to control
18:47:04 <Vorpal> Note that this will probably include myself three years ago, as well as myself three years from now talking about the current me
18:47:46 <b_jonas> which is one more reason against the big framework containing all the code, including old code
18:47:55 <Vorpal> b_jonas: I do feel I'm above average at least. I would never commit something unless it passes valgrind for example.
18:48:08 <b_jonas> \oren\: ah nice, that's much better for Deseret, thanks
18:48:14 <b_jonas> \oren\: you've even separated them
18:48:33 <\oren\> yah, it was silly to have them in one section
18:48:35 <b_jonas> \oren\: why don't you also split the kana from the bopomofo to separate headings?
18:49:20 <Vorpal> b_jonas: problem is, sometimes you need frameworks, otherwise you just do the same thing over and over. Also coding system level C++ without frameworks is hell. How are you supposed to do threads with just pthreads? You really need a message passing layer to be able to do C/C++ threads without going insane
18:49:37 <b_jonas> (the kana long vowel mark has a funny mostly unique status in unicode, where it counts as both kana and punctuation but not a letter)
18:50:01 <b_jonas> Vorpal: certainly, but when they make every bit of their code depend on everything so you can't test it separately, that's bad
18:50:04 <Vorpal> b_jonas: and how do you do inter-node communication without a common language and framework for it
18:50:32 <Vorpal> b_jonas: that is what message passing is for. You can test it by making a unit test or quickcheck style test send those messages instead
18:50:42 <Vorpal> That and not dealing with shared memory
18:50:59 <b_jonas> Vorpal: that might be better than what they're doing
18:51:08 <b_jonas> I also hate how they're often using threads completely unnecessarily
18:51:16 <b_jonas> everything is put in a separate thread, even when it needn't be
18:51:18 <Vorpal> which is also the reason to not do nethack style code, but cleanly layered libraries
18:51:22 <b_jonas> when that just complicates everything
18:51:43 <b_jonas> It would be much better to put everything in one thread at the start, then threadify only the stuff where it actually helps.
18:51:59 <Vorpal> b_jonas: I would suggest writing classes that can handle messages, then you instantiate them on a specific message handler (which is basically the same as a thread)
18:52:16 <Vorpal> With broad cast events and proper routing it doesn't matter where the class is
18:52:16 <\oren\> I should probably rearrane the kana into gojuon order
18:52:18 -!- Lord_of_Life has quit (Excess Flood).
18:52:22 <b_jonas> \oren\: what's the status of the hangul?
18:52:36 <Vorpal> b_jonas: And you need threads for proper priority in a real time system :P
18:52:43 <\oren\> Still can't seem to generate them very well
18:52:59 <\oren\> but i'll get to it eventually
18:53:08 <Vorpal> b_jonas: how else will handling the CAN adapter interrupts happen when they need to
18:53:11 <b_jonas> \oren\: aren't the kana already in that order?
18:53:36 -!- Lord_of_Life has joined.
18:53:37 <Vorpal> b_jonas: I would expect 50-100 threads in a normal real time application
18:53:45 <Vorpal> That includes some thread pools
18:54:01 <Vorpal> Less in a non-realtime application
18:54:08 <Vorpal> And a lot more thread pools in that case
18:54:08 <b_jonas> \oren\: or do you mean move the small kana out of the kana in the main grid?
18:54:20 <Vorpal> \oren\: designing a font?
18:54:45 <Vorpal> bbl, actually making food
18:56:27 <b_jonas> Vorpal: luckily we're not making realtime applications, so that's not a problem,
18:56:40 <b_jonas> but we are doing a few things where threading can help
18:57:16 <b_jonas> but very often, processes would work better, but they use threads instead.
18:57:42 <b_jonas> Like, when something has a very small interface, it can be moved to a process easily.
18:57:51 <b_jonas> I have already done some of that.
18:58:28 <b_jonas> Done video encoding in a subprocess, since video encoding has a small interface with the rest of the code: it only has to get raw video frames, plus a few metadata at startup.
18:58:47 <b_jonas> Works well enough, once you figure out some ugly details.
18:59:04 <b_jonas> Including some Windows-specific stuff.
19:00:10 <b_jonas> It was like, eww, after touching this source file, wash your hands for an hour to get the Windows API stuff off it.
19:00:53 <b_jonas> But then, I'm also not perfect, I write lots of badly designed code too.
19:01:00 <b_jonas> I should try to improve myself.
19:01:07 <\oren\> I've arranged the hiragan
19:02:10 <b_jonas> \oren\: do you have a script yet to find characters accidentally missing from the demo page by the way?
19:02:28 <b_jonas> \oren\: also, shouldn't all the small kana be separate from the main table?
19:03:11 <Vorpal> b_jonas: thankfully I almost never deal with OS specific things at all, since we have targeted so many different systems across the years (WinCE, custom RTOS, simulator on Windows, and more recently Linux (both simulated and target)) that there is a good abstraction layer already
19:03:37 <b_jonas> Vorpal: I rarely have to deal with it either,
19:03:40 <Vorpal> And we don't create threads or processes after startup.
19:03:45 <b_jonas> because I work on parts of the code that doesn't touch it usually.
19:03:56 <Vorpal> And only allocate from memory pools after that point.
19:07:44 <Vorpal> b_jonas: oh and the way you turn off the application is cutting the power. Take that file system! XD
19:08:06 <Vorpal> (no we don't use a normal linux file system)
19:08:59 <b_jonas> Vorpal: um, that's sort of how it works here too. Not literally, but I rarely see the "framework" thing not segfault somewhere at termination, since people always interrupt the program early in testing, so they don't notice the segfaults at completion.
19:09:27 <b_jonas> So eventually they just decide that segfaulting at termination is sort of a feature, and just _exit without trying to shut down.
19:09:55 <b_jonas> Or try to get stuff shut down in the proper order so that the important data is saved _before_ the segfault.
19:10:15 <Vorpal> Your approach seems more haphazard though
19:10:21 <Vorpal> Rather than planning for it
19:11:17 <Vorpal> b_jonas: also that makes memory leak testing annoying I would imagine.
19:11:26 -!- ais523 has quit (Ping timeout: 276 seconds).
19:11:31 <Vorpal> You could still do it on the unit tests
19:11:37 <b_jonas> There are some memory leaks, sure
19:11:54 <b_jonas> but usually not huge ones, because leaking entire images every frame many times per second is quickly noticed
19:12:01 <b_jonas> I know, I've leaked images before
19:12:20 <b_jonas> it's hard not to notice since Windows, like, becomes unresponsive and has to be rebooted when a program starts to use too much memory.
19:12:55 <b_jonas> But leaking smaller data structures can be ok, and sometimes it's not even worth the dev time to clean up if that's the only problem with the code.
19:13:12 <b_jonas> I mean, like, keeping a smaller structure for every frame that you free only at the end of the whole stream.
19:13:30 <Vorpal> b_jonas: yeah windows is terrible when swapping (or page filing I guess)
19:20:42 -!- Lord_of_Life has quit (Excess Flood).
19:21:07 <b_jonas> \oren\: though you can still put the small kana in columns on the left, but it works this way too, doesn't really matter
19:22:46 <b_jonas> \oren\: and now the hiragana and the katakana are nicely arranged exactly the same
19:25:10 <b_jonas> \oren\: why is ヽ under the Katakana heading but ゝ under the punctuation heading?
19:25:35 -!- heroux has quit (Ping timeout: 240 seconds).
19:25:36 -!- Lord_of_Life has joined.
19:28:10 -!- jaboja has quit (Ping timeout: 260 seconds).
19:28:35 -!- heroux has joined.
19:35:50 <\oren\> maybe I'll do the math fraktur
19:36:00 <\oren\> yah that will be awsom
19:38:48 -!- jaboja has joined.
19:41:41 <b_jonas> Even if I like the subversion model, I'd still like a distributed version of it. And I have been thinking if it was possible to extend subversion to become a dvcs. And I think it's partly possible, although maybe not completely, and certainly not easy to implement.
19:42:19 <b_jonas> I feel I must support distributed version control in principle, since it's the only way humanity can ever expand to more than the Earth-Moon system, to farther areas with ping time greater than a minute or two.
19:43:16 <b_jonas> You can't have all writes going through a central server if it takes hours to do that.
19:43:16 -!- AnotherTest has quit (Ping timeout: 272 seconds).
19:43:37 <b_jonas> You need at least a server per planet and merge between them.
19:46:26 -!- Treio has quit (Ping timeout: 240 seconds).
19:50:02 <FireFly> As someone whose first VCS was mercurial, non-distributed VCSes feel very clunky to me
19:56:52 <b_jonas> FireFly: is mercurial that old?
19:57:00 <b_jonas> I thought it was too new to be able to be your first VCS
19:57:27 -!- oerjan has joined.
19:57:51 <FireFly> It's not that old; I'm just kinda young
19:58:24 <FireFly> Apparently Mercurial is from 2005
19:58:30 <FireFly> I probably used it first in 2008
19:58:39 <int-e> mercurial and git are approximately the same age... they were both born out of the bitkeeper linux debacle
19:59:36 <b_jonas> how was mercurial born from that?
20:00:02 <int-e> http://lkml.iu.edu/hypermail/linux/kernel/0504.2/0670.html
20:01:43 <int-e> Because several people worked on a replacement for Bitkeeper. Mercurial lost at the time; my impression was that Linus and a few others didn't trust Python to be fast enough.
20:03:10 <b_jonas> Didn't git win simply because it contained exactly what Linus wanted?
20:05:07 -!- Alcest has quit (K-Lined).
20:06:44 <zzo38> Do you know if it is possible to use SDL and Xlib together in the same program?
20:07:59 -!- heroux has quit (Ping timeout: 264 seconds).
20:08:09 <int-e> That and other people (like Petr Baudis with cogito) made git usable for ordinary people.
20:08:17 -!- heroux has joined.
20:08:59 <pikhq_> zzo38: It is possible.
20:09:20 <b_jonas> also, maybe mercurial got (sort of) sane branching only later than git, didn't it?
20:10:45 <b_jonas> it started out as one branch per repo if I understand correctly
20:11:27 -!- atrapado has joined.
20:11:39 <zzo38> pikhq_: What considerations must be done in order to do so (if any)?
20:13:34 <pikhq_> I don't know of any, really. SDL will happily hand you its X11 display or window and you can do things with it.
20:14:05 <int-e> b_jonas: I don't really know; it's clear that mercurial didn't implement named branches from the very beginning. It looks like it was implemented in August 2005: https://www.mercurial-scm.org/pipermail/mercurial/2005-August/003318.html
20:15:05 <int-e> But I'm not sure how useful this information is...
20:15:49 <b_jonas> And is it true that mercurial has three different and mutually incompatible branching mechanisms?
20:16:05 <b_jonas> One being the one branch per repo, and I don't know what the other two is.
20:16:12 <b_jonas> Or is that just a malevolent anti-hg rumour?
20:18:12 <zzo38> Basically I want to use SDL only for audio and for endianness-dealing.
20:20:36 -!- variable has joined.
20:21:26 <HackEgo> django/Django is a giraffe.
20:21:27 <HackEgo> month/Month is a misspelled Moth.
20:22:33 <int-e> b_jonas: I can't really answer that; my mental model of how mercurial works is flawed. But the first way is something you can do with git as well. There's a difference between branching that happens because you have local commits and pull in remote commits; to me this is a UI nightmare because the two resulting ends don't have predictable names (one is the "tip", while the other is just...
20:22:39 <int-e> ...dangling?); most of the time "hg merge" does what I want (merge the local and local ends of the branch). I have not played with named branches at all in mercurial.
20:22:47 * int-e feels more comfortable with git.
20:23:01 -!- idris-bot has joined.
20:29:06 <oerjan> <izabera> `le/rn fetch curses function that fets a char. see fetch(3X) for more info <-- AAAAA i swear this channel is getting stupider
20:29:44 -!- ais523 has joined.
20:30:17 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le\: not found
20:30:20 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory
20:30:39 <shachaf> oerjan: at least le/rn is advanced enough that that command didn't work
20:30:40 <int-e> so much for the idea of having a `le rn that works as people expect ;-)
20:31:57 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory
20:32:42 <int-e> okay, I'm confused. Why did we have bin/le/ ?
20:33:03 <FireFly> it's meant to be used as le/rn foo/this is a description for foo
20:33:22 -!- J_Arcane has joined.
20:33:43 <HackEgo> /hackenv/bin:/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin
20:33:46 <oerjan> int-e: `learn was supposed to work as people expect. it's just that the problem is AI-complete and people are stupid-complete hth
20:34:09 <shachaf> oerjan: `learn did work as I expected.
20:34:29 <shachaf> Unfortunately my expectations didn't match what I wanted to do.
20:34:55 <int-e> the keyword putting first is awkward sometimes
20:35:15 <shachaf> int-e: When you run le/rn, it runs ./le/rn, not bin/le/rn
20:35:34 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory
20:35:44 <int-e> I think I'm confused about this behavior
20:35:47 <HackEgo> bash: le: command not found
20:36:04 <HackEgo> total 4 \ lrwxrwxrwx 1 5000 0 17 Dec 9 04:12 rn -> ../bin/slashlearn \ -rwxr-xr-x 1 5000 0 267 Dec 22 18:32 rn_append
20:36:15 <oerjan> int-e: i think i'm too
20:36:29 <int-e> but that's becuase ` and the shell (``) seem to look for the command to execute in different ways
20:36:41 <zzo38> If I do not tell SDL to initialize video and only initialize audio, then will it avoid doing such things as disable the screensaver and grabbing input and so on? I would rather to just use ALSA or whatever for audio but it seems complicated compared with SDL
20:36:47 <shachaf> Ah, I see what you're confused about.
20:38:10 -!- heroux has quit (Ping timeout: 240 seconds).
20:38:14 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: canary: not found
20:38:25 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: canary: not found
20:38:40 <oerjan> int-e: i'm still confused.
20:38:46 <HackEgo> -rwxr-xr-x 1 5000 0 10 Feb 14 20:38 canary
20:38:58 <HackEgo> twhib/the world holds its breath
20:39:04 <int-e> `` find -type d -name le
20:39:29 <oerjan> dammit did you have to search all of it
20:39:34 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: tmflry: cannot execute: Is a directory
20:39:57 <oerjan> int-e: it genuinely seems to look for directories but not files in .
20:40:26 <HackEgo> bash: tmflry: command not found
20:42:37 <zzo38> O, I found PortAudio; maybe I can use that instead
20:42:56 -!- heroux has joined.
20:50:30 -!- AnotherTest has joined.
20:52:53 <Vorpal> portaudio? isn't that some super old thing?
20:53:35 -!- heroux has quit (Ping timeout: 264 seconds).
20:54:12 -!- jaboja has quit (Ping timeout: 272 seconds).
20:54:22 <Vorpal> ais523: wrt the lambdabot message you left 3 days ago (call stack language), ah okay
20:54:49 <ais523> in fact, this is pretty much the only way I've ever seen a language become /accidentally/ a PDA
20:54:57 <ais523> (I've seen other ways to make PDAs but they're typically intentional)
20:56:08 <Vorpal> ais523: what does PDA stand for?
20:56:14 -!- jaboja has joined.
20:56:54 <Vorpal> ah, what sort of language would become a PDA by accident? Intended regular language or what?
20:57:34 <ais523> basically anything whose only source of infinite memory is the call stack
20:57:47 <ais523> either directly in terms of what functions were called, or indirectly in terms of C-auto-style variables
20:58:21 <b_jonas> ais523: I don't get the context. what is the way a language accidentally became a PDA?
20:58:35 <ais523> b_jonas: see http://esolangs.org/wiki/Splinter for a concrete esolang example
20:58:44 <ais523> it was intended as an FSM
20:59:23 <b_jonas> I know lots of languages are PDAs either because they have goto (but no gosub) and a stack memory, or because they have function calls and local variables and arguments
21:00:04 <ais523> befunge-93 is a PDA I think, not via means of a call stack, but via means of its data stack
21:01:33 <Vorpal> ais523: how many stacks do you need to be more than PDA? Is 2 enough?
21:01:40 <ais523> 2 is enough for TC, yes
21:01:53 <b_jonas> Isn't Piet one of those languages that have one data stack and no call stack?
21:02:07 <b_jonas> Only it counts as Turing-complete due to bigints allowed?
21:02:08 <ais523> the easiest way to show this is to use the two stacks as a tape: one stack holds values to the left of the IP, one stack holds values to the right of the IP
21:02:19 <ais523> fwiw, this is the reason why Underload can be Turing-complete without * and a
21:02:29 <b_jonas> Piet can access the data stack arbitrarily deep
21:02:47 <b_jonas> then it has a RAM (not a very convenient one though) even without bignums
21:02:55 <ais523> (which prevents it placing anything on the stack that doesn't appear literally in the program, meaning that there are only a finite number of possible stack elements)
21:03:09 <b_jonas> (it still needs bigints for arbitrarily large ram, but no exponentially large numbers)
21:03:13 <ais523> (and thus requiring the use of the call stack and data stack as your two stacks, as you have nowhere else to store data)
21:03:52 <b_jonas> ais523: yep, I've implemented a tape with two stacks that way, only I used multiple tapes, not only one
21:04:23 <Vorpal> ais523: what about a pure call stack (just calls on it) and one data stack? That is still TC then?
21:04:28 <ais523> well once you have one tape (and sensible control structures) you can do anything, as BF famously shows
21:04:44 <ais523> Vorpal: yes, in terms of data
21:05:00 <Vorpal> ais523: but not in terms of what?
21:05:05 <ais523> (it could fail to be TC for another reason, e.g. if it always halts, or if there are sufficiently severe restrictions on which commands you can run)
21:05:21 <b_jonas> right, it needs good control structures so you can actually use the call stack properly
21:05:33 <ais523> well, not necessarily "good", just sufficient
21:06:02 <Vorpal> the interesting part of manipulating a pure call stack is that it has interesting results on the program flow
21:06:02 <\oren\> I added .................................................... updating the demo in a few minutes
21:06:05 <ais523> hmm, what extra powers do you need to add to call/cc to make a TC language?
21:06:11 <ais523> subtle cough is sub-TC but it can't be far off
21:06:32 <Vorpal> subtle cough is a language name?
21:06:47 <ais523> yes, turns out it's pretty low-powered though
21:06:55 <ais523> IIRC it only has three essentially different programs
21:08:17 <\oren\> `u8tbl 0x1d504 0x1d51d
21:08:44 <\oren\> `u8tbl 0x1D504 0x1D51D
21:09:07 <\oren\> `` u8tbl 0x1D504 0x1D51D
21:09:08 <HackEgo> 𝔄𝔅𝔇𝔈𝔉𝔊𝔍𝔎𝔏 \ 𝔐𝔑𝔒𝔓𝔔𝔖𝔗𝔘𝔙𝔚𝔛𝔜
21:09:22 <\oren\> oh, you can't call it with `
21:09:37 <Vorpal> \oren\: oh? why? and what does `` do?
21:09:48 <HackEgo> @ABCDEFGHIJKLMNO \ PQRSTUVWXYZ[\]^_ \ `abcdefghijklmno \ pqrstuvwxyz{|}~ \
21:09:58 <Vorpal> well, that is just mojabake
21:10:09 <HackEgo> bin/u8tbl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xf4bd6215e42f01142295c499b7a9bf8a7c37e01a, not stripped
21:10:11 <b_jonas> ais523: by the way, what's your opinion on Rust? I've looked at it lately, and it seems to be an interesting research language, though still not yet mature enough. I should maybe try it some day in the future.
21:10:28 <ais523> b_jonas: I'm annoyed it isn't in the Ubuntu repositories yet; if it were, I might seriously try to use it
21:10:29 -!- heroux has joined.
21:10:29 <\oren\> it prints the unicode characters from the first number ot the second
21:10:44 <ais523> \oren\: no it doesn't; it's probably /meant/ to, but it appears to do somethign else
21:10:49 <\oren\> I wrote it in C awhile back
21:11:01 <Vorpal> ais523: any progress on feather btw?
21:11:07 <Vorpal> I expect the answer to be no?
21:11:23 <b_jonas> feather? is that the project we don't talk about?
21:11:43 <Vorpal> b_jonas: there is obviously no such thing as feather, what are you talking about
21:12:18 <b_jonas> Vorpal: I'm confused about other people's nonexistant projects. I can barely keep my nonexistant future long term todo projects in line.
21:12:31 <b_jonas> Some of them are secret, some I do talk about.
21:12:46 <b_jonas> Many will probably never materialize.
21:13:16 <Vorpal> b_jonas: don't forget elliott's OS
21:13:20 <Vorpal> whatever that was called
21:13:58 <\oren\> `` u8tbl 0x1D504 0x1D51D
21:13:59 <HackEgo> 𝔄𝔅𝔇𝔈𝔉𝔊𝔍𝔎𝔏 \ 𝔐𝔑𝔒𝔓𝔔𝔖𝔗𝔘𝔙𝔚𝔛𝔜
21:14:07 <b_jonas> Vorpal: obviously I'd be interested to see ais523's version control system
21:14:41 <Vorpal> ais523: well what is unique with scapegoat?
21:14:45 <ais523> Vorpal: the OS in question wasn't named; we typically called it @ in here, with the understanding that once it got a name, we'd retroactively edit the lgos
21:14:52 <ais523> to contain the true name of the OS
21:15:11 <b_jonas> couldn't you give a better development codename?
21:15:22 <ais523> b_jonas: wasn't my idea!
21:15:22 <b_jonas> with the understanding that it would get a marketing name later?
21:16:16 <ais523> Vorpal: scapegoat (in theory) has a simpler interface than most DVCSes, is better at handling merge conflicts, and dodges the downsides of both darcs and git
21:16:30 <Vorpal> ais523: what is the catch?
21:16:37 <ais523> it hasn't been written yet
21:16:46 <Vorpal> ais523: and will it be very hard to write?
21:16:51 <ais523> nor does it exist in any sort of non-vaporware sense
21:16:56 <Vorpal> compared to something like git?
21:16:59 <ais523> and yes, it isn't easy to write either
21:17:09 <izabera> oerjan: that's not very nice :(
21:17:11 <ais523> mostly due to design issues
21:17:22 <ais523> I don't think it'd be substantially harder to write than git or darcs once the design is complete
21:17:23 <Vorpal> ais523: I assume neither git nor darcs was easy to write, but this is probably 100 times worse?
21:17:39 <b_jonas> ais523: does it have a model of what it stores in the repository yet? (not the representation, but what info it conceptually stores)
21:18:32 <ais523> b_jonas: yes: the basic unit is called a "turtle" for lack of a better name; turtles contain dependencies on other turtles, edits to files, and edits to other turtles
21:18:55 <Vorpal> ais523: anything wrong with "changeset"?
21:18:57 <ais523> also it isn't just my VCS, although I did most of the planning, the rest of #esoteric helped too
21:19:20 <ais523> Vorpal: well you can derive the entire current state of the project (recursively) from one turtle
21:19:23 <ais523> you can't do that with one changeset
21:19:29 <b_jonas> As in, svn stores a series of revisions, each of which has a mutable map of revprops, and a deep-immutable tree of directories and files, where each directory or file stores a parent (an optional ref to an existing file in a previous version which has the same isdir) and a map of properties.
21:19:52 <ais523> I guess a turtle is a combination of a version, and the subset of history that lead to the creation of that version
21:19:56 <b_jonas> ais523: wait, wasn't the basic unit a blame?
21:20:49 <b_jonas> ais523: um, how is a tree of files derived from a turtle when you checkout, if such a thing exists?
21:21:39 <b_jonas> I don't understand what “dependencies on other turtles, edits to files, and edits to other turtles” means really
21:21:55 -!- callforjudgement has joined.
21:21:59 -!- tromp__ has joined.
21:22:13 <callforjudgement> b_jonas: well the point is that you can track every line of versioned code back to the turtle that created it
21:22:19 -!- ais523 has quit (Disconnected by services).
21:22:21 -!- callforjudgement has changed nick to ais523.
21:22:42 <ais523> b_jonas: so the version control system is basically blame-based; it uses this information to do merges correctly, for example
21:22:53 <Vorpal> ais523: that nick.. what was the game it was related to now again?
21:23:04 -!- p34k has quit (Ping timeout: 240 seconds).
21:23:35 <ais523> ugh, I'm installing yosys and its build system involves cmake calling out to hg to download a dependency from somewhere
21:23:40 -!- p34k has joined.
21:23:45 <ais523> int-e: http://en.wikipedia.org/wiki/Special:Search?go=Go&search=Nomic
21:23:47 <zzo38> Another alternative for Git and so on is Fossil; did you examine that one?
21:24:00 <int-e> ais523: I was curious whether we had a wisdom about it :P
21:24:28 <int-e> it seemed like something that should exist
21:24:35 <int-e> now I'm disappointed
21:24:41 <ais523> this is incredibly bad both on the basis of security reasons (someone could change the result of installing a version without any changes to the source), and on the fact that I can't rebuild offline
21:25:05 <HackEgo> callforjudgement? ¯\(°_o)/¯
21:25:09 <HackEgo> callforjudgment? ¯\(°_o)/¯
21:25:15 <ais523> b_jonas: first spelling was correct
21:25:58 <HackEgo> day of judgment? ¯\(°_o)/¯
21:26:00 <HackEgo> day of judgement? ¯\(°_o)/¯
21:26:06 <HackEgo> day of jugement? ¯\(°_o)/¯
21:26:07 <HackEgo> day of jugment? ¯\(°_o)/¯
21:26:15 -!- jaboja has quit (Ping timeout: 240 seconds).
21:26:15 -!- gniourf has quit (Ping timeout: 240 seconds).
21:26:16 -!- tromp_ has quit (Ping timeout: 240 seconds).
21:26:18 -!- p34k has left.
21:27:22 -!- jaboja has joined.
21:28:59 -!- heroux has quit (Ping timeout: 264 seconds).
21:30:22 <b_jonas> (Wrath of God was replaced by Day of Judgment which has a more modern templating, same as Terror got replaced by Doom Blade, and it was in Zendikar in particular because it works better with the pseudo-regeneration effects in ROE)
21:31:30 -!- gniourf has joined.
21:31:39 <Vorpal> b_jonas: what are you talking about
21:32:47 <ais523> b_jonas: Day of Judgment isn't a more modern templating, it's an intentionally different functionality
21:32:49 <Vorpal> ais523: what is yosys?
21:32:49 <ais523> doesn't bypass regenerators
21:33:00 <ais523> Vorpal: open-source Verilog synthesizer, apparently
21:33:29 <ais523> when anyone asks about open-source FPGA tools I said there weren't any, but I just discovered there's an open-source Verilog toolchain that targets a real existing FPGA
21:33:33 -!- oerjan has quit (Quit: Gah).
21:33:34 <ais523> now I'm planning to try it out
21:34:01 <b_jonas> ais523: yes, but it's more modern, basically Wizards decided that the "can't regenerate" usually shouldn't appear on cards because it's stupid, it either makes regeneration useless, or is a useless clause if there's no regeneration in the environment
21:34:28 <ais523> This is experimental software! It might have bugs that cause it to produce bitstreams which could damage your FPGA! So when you buy an evaluation board, get a few.
21:34:39 <b_jonas> (they do "can't be prevented" sometimes though, which I don't really like, because it's a red thing that screws with white)
21:34:55 <ais523> b_jonas: the way I think about it, it prevents you using your own regenerators to get around the board wipe
21:35:02 -!- heroux has joined.
21:35:30 <b_jonas> (it's enough that red does direct non-combat damage when white and green can protect better against combat damage, they shouldn't also bypass my protections)
21:35:33 <Vorpal> ais523: shouldn't it just be a case of loading a new software on it, as long as you don't cause the IO ports to fry?
21:35:53 <ais523> this is much the same way that shroud is a better ability than hexproof; the problem with hexproof is that it makes buffing auras disproportionately powerful, meaning that most buffing auras are either worthless without the hexproof combo or overpowered with it
21:36:02 <ais523> if hexproof didn't exist then auras could be made much better without issues
21:36:29 <ais523> Vorpal: well suppose your bitstream connects the power rails together, the chip may well burn out
21:36:40 <ais523> I don't know if it's possible to configure an FPGA like that or not
21:36:46 <b_jonas> ais523: exactly. which is why Zendikar has Day of Judgment, so you can use your Eland Umbra to have your creatures survive. It's even better with board wipers that destroy all permanents.
21:37:00 <zzo38> Some of my own custom cards use shroud instead of hexproof, because no player is supposed to target it
21:37:08 <Vorpal> which FPGA does this target?
21:37:15 <ais523> b_jonas: very few board wipers destroy all permanents, because Wizards hates land distruction
21:37:22 -!- atrapado has quit (Quit: Leaving).
21:37:46 <ais523> Vorpal: Lattice iCE40, apparently
21:37:54 <Vorpal> never heard of that brand
21:37:58 <b_jonas> ais523: yep. all those board wipers are old, and usually expensive in terms of in-game costs. but they still exist in modern.
21:38:43 -!- \oren\ has quit (Quit: Lost terminal).
21:39:12 <b_jonas> Hmm, does spot removal like Befoul exist after Kamigawa, which is when Befoul was last printed?
21:39:49 <b_jonas> for 2BB, sorcery, destroy target land or nonblack creature, no-regen
21:39:59 -!- oren has joined.
21:40:12 <b_jonas> it really showcases what black can do
21:40:42 <ais523> b_jonas: Wrecking Ball (destroy target land or creature for 2RB) was printed in the original Ravnica block, possibly again later
21:40:43 <b_jonas> black can discard your cards or destroy your creatures or lands, but not touch your non-land non-creature permanents
21:41:02 <ais523> the "nonblack" restriction on removal is very rare nowadays though
21:41:14 <ais523> which I think is a pity; one of the advantages of black creatures used to be that black removal didn't work on them
21:41:30 <ais523> but that hasn't been the case for ages, and in general, black creatures just tend not to be very good nowadays as a result
21:41:40 <b_jonas> and fear and landwalk and intimidate are gone too, so are most color hosers that explicitly mention a color
21:41:55 <b_jonas> at least the lower mana cost ones
21:42:06 <b_jonas> black has always had the worst creatures among all five colors
21:42:30 <b_jonas> hmm, which is the other black-red destroyer instant?
21:43:43 <ais523> the best creature in the game to cheat out is black
21:43:50 <ais523> (i.e. if you don't care about the mana cost)
21:45:21 <b_jonas> ais523: that might be true. which creature is that?
21:45:50 <ais523> mostly for the "Pay 7 life: Draw 7 cards" ability
21:45:53 <b_jonas> but they don't print easy ways to cheat out cards since they printed the huge Eldrazi
21:45:58 <ais523> this makes it almost impossible to lose once it's in play
21:46:13 <ais523> (also, it's /newer/ than Rise of the Eldrazi: it comes from Avacyn Restored)
21:46:27 <b_jonas> ais523: sure, they still print big creatures
21:46:28 <ais523> (although the most recent huge Eldrazi came from Oath of the Gatewatch, the most recent set)
21:46:31 <b_jonas> they don't print easy reanimation
21:46:52 <ais523> doesn't mean that creature-cheating doesn't exist in Modern
21:47:02 <ais523> (it exists in Standard too but costs CMC 6)
21:47:07 <b_jonas> and Zombify isn't even good as creature cheaters go
21:47:52 <b_jonas> if you want to build a deck that cheats creatures in play, you have to go for one that tries to cheat a creature in play on your second turn with 40% probability or something. I never understood how that worked.
21:48:44 <b_jonas> maybe that's just my impression
21:48:47 <ais523> I'm guessing Modern, because in Legacy you can get well over 40% on turn 1 I think (Reanimator)
21:49:03 <ais523> and in Modern, you can manage it on turn 2 but I think most decks would be aiming for turn 3
21:49:04 <b_jonas> the casual reanimator I played against was mostly modern, but probably not exclusively I think
21:49:15 <b_jonas> it might have aimed to turn 3
21:49:43 <ais523> this is because most modern decks win on turn 4 unopposed, and combo decks typically delay the combo as long as they can hold onto it so that they can protect it better
21:49:55 <ais523> (unless they can do it before the opponent has any ability to disrupt it /and/ it wins outright)
21:50:09 <ais523> decks like ANT in Legacy can combo quickly but prefer to combo slowly
21:50:17 <ais523> so that they can fight through more disruption
21:50:22 <b_jonas> but it definitely didn't want to just pay 4 mana for Zombify or 5 mana for Rise from the Grave like I tried to do incidentally in my not-really-reanimating black deck
21:50:37 <ais523> (there's a simliar deck called The Epic Storm which does aim to go off as fast as possible, and does a lot of things differently as a result)
21:50:55 <ais523> hmm… Humanimator was a deck in Innistrad/Return to Ravnica standard
21:51:13 <ais523> and there were decks based around Whip of Erebos while Theros was in standard
21:51:15 <b_jonas> but in modern, you can no longer just sell your soul to Leshrac to get mana for free
21:51:19 <ais523> I think those are the most recent viable Standard reanimator decks
21:52:26 -!- ais523 has quit.
21:58:14 <oren> I also added ⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚ₐₑₒₓₔₕₖₗₘₙₚₛₜ⛄⛅⛇⛈ꝖꝗꝘꝙꝚꝛꝜꝝꝞꝟꝠꝡꝢꝣꝤꝥꝦꝧ
21:58:48 <b_jonas> oren: where are your backslashes?
21:59:11 <oren> whoops, irssi crashed and I forgot to readd them
21:59:19 -!- oren has changed nick to \oren\.
22:00:03 <b_jonas> \oren\: ah, I see you moved not only the repeat marks, but also the long vowel mark to the punctuation header
22:00:54 <\oren\> well, it's not really a kana.
22:01:21 <b_jonas> \oren\: uh, something seems off with the width or horizontal offset of the fraktur uppercase letters, somewhere near U
22:01:52 <b_jonas> (I always find fraktur hard to read, because I'm not used to it)
22:02:34 <b_jonas> \oren\: when you say you have all kanji taught in primary school, primary school means which grades?
22:02:40 <\oren\> hmm I can't see any weird width but I do see a stray pixel...
22:02:52 <\oren\> grades 1 thru 6 in Japan
22:03:09 <\oren\> e.g. the entire kyoiku kanji list
22:03:28 <\oren\> but not the joyo kanji taught in grades 7-12
22:03:55 <\oren\> which are simplycalled middle 1-3 and high 1-3 in japan
22:03:59 <b_jonas> \oren\: the number 1 kanji still looks confusingly similar to the (horizontal) long vowel mark. shouldn't you do something about that, to help proofreading Japanese text?
22:04:21 <b_jonas> \oren\: strange... wouldn't that mean way more kanji than you have?
22:04:35 <b_jonas> can you really have grades up to 6 in this few?
22:04:52 <\oren\> i have 1385 kanji total
22:05:11 <b_jonas> I mean, I remember when you needed just two more for grade 2, but at that point like half of grade 3 was missing iirc
22:06:00 <\oren\> https://ja.wikipedia.org/wiki/%E5%AD%A6%E5%B9%B4%E5%88%A5%E6%BC%A2%E5%AD%97%E9%85%8D%E5%BD%93%E8%A1%A8
22:06:19 <\oren\> I did all the kanji on this list, iow
22:07:36 <\oren\> there are only ~2100 kanji in the jouyou list
22:08:05 <b_jonas> \oren\: the "Mathematical Operators, misc technical, APL, OCR, etc..." block already has cursive lowercase asciilatin letters, but you have a separate "Math special forms" block for the fraktur. is that deliberate? shouldn't you move the cursive letters?
22:08:14 <\oren\> but that's far from a complete list, lots of words use non-jouyou kanji
22:08:33 <\oren\> the cursive letters are currently in the wrong place
22:08:57 <b_jonas> what's the status of hangul support?
22:09:08 <\oren\> still having software problems
22:10:33 <b_jonas> What's your ranking in that list of fonts ordered by the number of characters that you used to care about?
22:12:07 <b_jonas> and iirc unicode counts the long vowel mark as a kana and a punctuation but not a letter, whereas most other kana are letters
22:13:23 -!- heroux has quit (Ping timeout: 264 seconds).
22:15:35 <b_jonas> \oren\: well, it looks here as if the T was shifted to the right like half a character cell
22:26:55 -!- AnotherTest has quit (Quit: ZNC - http://znc.in).
22:32:53 -!- heroux has joined.
22:44:34 <b_jonas> fungot, can you read fraktur?
22:44:34 <fungot> b_jonas: mr president, i would say that we annually import chiefly from south america at present around 30 million tonnes of pigmeat or 6 more than in 1998. the commission has been active as head of government to telephone members of this parliament is somewhat concerned about the criminal activities of the respective identities of each member state.
22:44:53 <HackEgo> zombiecheney/ZombieCheney lives under a bridge.
22:44:56 <HackEgo> ls: cannot access wisdom/tr*: No such file or directory
22:45:03 <HackEgo> wisdom/transformer \ wisdom/translater \ wisdom/treant \ wisdom/treaty \ wisdom/treefolk \ wisdom/trick \ wisdom/trisecting the angle
22:45:11 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: ```: not found
22:45:28 <b_jonas> huh, didn't I create a bin/"```" ?
22:45:54 <HackEgo> #!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@"
22:46:06 <b_jonas> and I only redefined bin/'``'
22:46:26 <HackEgo> LANG=en_NZ.UTF-8 \ LANGUAGE= \ LC_CTYPE="en_NZ.UTF-8" \ LC_NUMERIC="en_NZ.UTF-8" \ LC_TIME="en_NZ.UTF-8" \ LC_COLLATE="en_NZ.UTF-8" \ LC_MONETARY="en_NZ.UTF-8" \ LC_MESSAGES="en_NZ.UTF-8" \ LC_PAPER="en_NZ.UTF-8" \ LC_NAME="en_NZ.UTF-8" \ LC_ADDRESS="en_NZ.UTF-8" \ LC_TELEPHONE="en_NZ.UTF-8" \ LC_MEASUREMENT="en_NZ.UTF-8" \ LC_IDENTIFICATION="en_NZ
22:46:50 <b_jonas> izabera: wrong collation by default, so eg. [a-z] will match the wrong thing in shell wildcard expansion
22:46:52 <HackEgo> TIMEFORMAT='real: %lR, user: %lU, sys: %lS' exec bash -c -- "$1"
22:46:57 <zzo38> I put in LANG=C so that it would use the correct locale.
22:47:07 <zzo38> (It is the only good one in my opinion)
22:47:30 <izabera> is [a-z] the only problem?
22:47:55 <b_jonas> we here know the ascii table and expect asciibetical sort
22:48:14 <b_jonas> the [a-z] is just the most obvious
22:48:26 <b_jonas> that [a-z] matches T is horrible
22:49:10 <zzo38> On my own computer I do have LANG=C in my login file so that it will always use the C locale. I want to change the system locale also to C but I am unsure how. The "ship to end user" program did not offer the choice of the C locale
22:49:59 <b_jonas> anyway, I added the extglob part to bin/\`\`
22:50:29 <izabera> you don't really need a new shell for that, do you?
22:50:38 <b_jonas> maybe I should create commands with larger number of backticks, the only difference being that they export some env-vars so the command can tell the top-level command (both the backticks part and the argument)
22:50:48 <b_jonas> izabera: a new shell for what?
22:50:52 <HackEgo> TIMEFORMAT='real: %lR, user: %lU, sys: %lS' exec bash -c -- "$1"
22:50:55 <HackEgo> #!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@"
22:51:12 <b_jonas> izabera: do you mean a new command in bin?
22:51:25 <b_jonas> izabera: we didn't want to modify the single backtick, for backwards compatibility
22:51:42 <b_jonas> it was such a basic command, people could be depending on the broken locale
22:51:49 <b_jonas> which is why someone added the double backtick
22:52:19 <izabera> `` printf '#!/bin/bash\nTIMEFORMAT="real: %%lR, user: %%lU, sys: %%lS"\neval -- "$1"\n' > bin/\`
22:53:01 <HackEgo> /hackenv/bin/`: line 3: shopt: globasciiranges: invalid shell option name
22:53:05 <b_jonas> eval instead of exec bash?
22:53:21 <izabera> `` printf '#!/bin/bash\nTIMEFORMAT="real: %%lR, user: %%lU, sys: %%lS"\nshopt -s extglob globstar\neval -- "$1"\n' > bin/\`
22:53:23 <HackEgo> /hackenv/bin/`: line 4: lob: command not found
22:53:39 <b_jonas> I think bash -c is safer, just in case they get somehow shelled with sh instead of bash despite the shebang
22:53:58 <HackEgo> #!/bin/bash \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$1"
22:54:19 <b_jonas> don't change backtick to set extglob
22:54:28 <b_jonas> it's not COMPLETELY backwards compatible
22:54:45 <b_jonas> there are some crazy contexts where the extglob had a meaning before
22:55:33 <b_jonas> they're very rare and no sane user is typing such things
22:56:02 <izabera> the one context in which it was valid was pattern matching when you put that pattern in a variable and then match against the variable
22:56:12 <izabera> bash 4+ enables extglob in pattern matching even if it's disabled in the shell
22:57:07 <b_jonas> but isn't there some strange context with history expansion or strange redirects or something where the extglob syntax just happens to be valid with some other meaning without extglob?
22:57:26 <izabera> hist expansion is only in interactive shells
22:57:44 <b_jonas> but redirects or something
22:58:09 <b_jonas> ah, globstar enables zsh-like double star?
22:58:40 <izabera> don't you say anything against that?
22:58:46 <izabera> that's obviously not backwards compatible
22:59:01 <b_jonas> I didn't know what it meant
22:59:15 <b_jonas> does single backtick work now?
22:59:19 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: : not found
22:59:58 -!- jaboja has quit (Ping timeout: 250 seconds).
23:01:02 * izabera found two cases in which extglobs mean something else if extglob is disabled...
23:01:04 <b_jonas> termbot (which is not and was never allowed to this channel) also uses backtick both for the invocation character and something else, so it looks as if double backtick did something special, but it doesn't
23:01:19 <Vorpal> @tell ais523 I was reading the aimake manual, and using stuff like AIMAKE_BUILDOS_linux defines seems to preclude cross compilation. How have you solved this use case?
23:03:03 <izabera> `` bash -c 'var="!(x)"; case y in $var) echo extglob is on ;; *) echo extglob is off ; esac'
23:03:09 <izabera> `` bash -O extglob -c 'var="!(x)"; case y in $var) echo extglob is on ;; *) echo extglob is off ; esac'
23:04:00 <b_jonas> how is the contents of $var even interpreted as a pattern
23:04:31 <izabera> it's strange that in [[ ]] extglob is always enabled but it isn't in case
23:04:40 -!- jaboja has joined.
23:04:52 <HackEgo> bash: +(: invalid option \ Usage:bash [GNU long option] [option] ... \ bash [GNU long option] [option] script-file ... \ GNU long options: \ --debug \ --debugger \ --dump-po-strings \ --dump-strings \ --help \ --init-file \ --login \ --noediting \ --noprofile \ --norc \ --posix \ --protected \ --rcfile \ --restricted \ --verbose \
23:05:07 <izabera> `` bash -O extglob -c '*()(:)'
23:05:08 <HackEgo> bash: -c: line 0: syntax error near unexpected token `:' \ bash: -c: line 0: `*()(:)'
23:05:27 <HackEgo> bash: -c: line 0: syntax error near unexpected token `{:' \ bash: -c: line 0: ` +(){:;}'
23:05:45 <b_jonas> ``` bash -c ' +(){ :;}; +'
23:06:17 <b_jonas> by the way, I turned on extglob because it's too late to write something like `` shopt -s extglob; ls bin/!([a-z]*)
23:06:25 <b_jonas> the line is parsed before the shopt executes
23:06:55 <izabera> i don't think anyone will notice any difference if extglob is always on
23:06:58 <b_jonas> a newline would be enough, but you can't put one in an irc line
23:07:21 <izabera> but they will if they expect ** to be *
23:07:43 <izabera> that's definitely against posix
23:08:08 <b_jonas> so is the brace expansion, isn't it?
23:08:42 <b_jonas> well, if you want posix, you can always sh -c
23:08:46 <zzo38> Can you please to tell me if this is good or you think something is wrong with this? https://www.npmjs.com/package/genasync
23:08:54 <b_jonas> or, um, POSIXLY_CORRECT=1 sh -c
23:09:13 <b_jonas> zzo38: I never heared of that thing
23:09:30 <b_jonas> what the heck is that? is it something python?
23:09:38 <zzo38> b_jonas: No, it is JavaScript
23:10:50 <b_jonas> it's getting late, good night, #esoteric
23:20:55 -!- deltab has quit (Ping timeout: 260 seconds).
23:24:02 <zzo38> Well I prefer JavaScript instead
23:24:14 -!- ais523 has joined.
23:24:14 -!- variable has quit (Quit: 1 found in /dev/zero).
23:29:35 -!- heroux has quit (Ping timeout: 264 seconds).
23:31:57 -!- heroux has joined.
23:47:08 -!- lleu has quit (Quit: That's what she said).
23:50:27 -!- hppavilion[1] has joined.