00:03:38 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 the outside, it is cold. brrrr. 00:07:42 <\oren\> just burn frodo along with the ring 00:08:25 I only got an Iron Ring on me. will it do? 00:10:30 also, he\\oren\. could you add 盗 and 賊 to your font please? 00:14:25 <\oren\> ok, next update will have them 00:15:55 what are those characters? 00:17:41 <\oren\> steal, and thief 00:18:03 <\oren\> 盗賊 = theif 00:18:18 I see 00:18:19 <\oren\> s/ei/ie 00:23:35 -!- p34k has quit. 00:25:49 b_jonas: ? 00:26:20 b_jonas: Cross-language type systems. 00:39:13 -!- evalj has quit (Remote host closed the connection). 00:47:29 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 (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_? 00:58:40 oerjan: Probably 01:01:09 hppavilion[1]: !classic game <-- not a classic game, check. 01:01:36 oerjan: DYK what -> is in fuzzy logic? 01:01:41 (DYK = Do You Know) 01:01:54 At least, what the most simple definition is? 01:01:58 i don't know fuzzy logic. 01:02:02 OK :/ 01:02:23 i have no idea whether C-H makes sense for it. 01:04:07 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 Curry-Howard makes sense for classical logic. 01:07:31 indeed, if there's a problem it's with the fuzz. 01:09:18 oerjan: as in, the cops? 01:09:45 I'm building a Canadian snack pack. a snacanapack. <-- i'm sure this will be a hit in panama. 01:12:01 so many potmantoilys 01:15:52 Fuzzy Logic and Intuitionistic Logic actaulyl go together quite nicely 01:16:16 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 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 are there anybody in this chännel who are Panamian? 01:32:21 -!- heroux has joined. 01:32:33 @wn panamian 01:32:34 No match for "panamian". 01:32:38 @wn panamanian 01:32:39 *** "panamanian" wn "WordNet (r) 3.0 (2006)" 01:32:39 Panamanian 01:32:39 adj 1: of or relating to or characteristic of Panama or its 01:32:40 people; "Panamanian economy" 01:32:42 n 1: a native or inhabitant of Panama 01:33:05 no panamanas here 01:34:03 ...possibly _not_ google that word hth 01:35:06 panamanas doo doo dododoo ♪ 01:35:17 apparently the proper word is panameñas how unharmonic 01:40:11 (meanwhile, holy disco abyss... so many colours everywhere...) 01:44:52 * oerjan wonders what boily is talking about. 01:45:25 I got cast in the abyss, and I was some place where walls were changing colour randomly every turn. 01:45:38 OKAY 01:47:04 -!- heroux has quit (Read error: Connection reset by peer). 01:47:42 -!- heroux has joined. 01:52:19 <\oren\> 貴貸貿賃資賛質輸述迷退造適广已巳巴遺郵郷酸鉱銅銭鋼閣防降盗賊限陛除険際障雑難非革頂預領飼 01:54:36 喜! 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 @tell boily fatso day (or fat tuesday) was just this past tuesday actually 03:22:19 Consider it noted. 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 [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? 06:58:09 all emojis :p 07:02:58 PILE OF POO is a good one. 07:03:14 reverse hand middlefinger extended 07:05:35 I don't think that one's there? 07:05:49 it is 07:06:05 Sure enough. 07:06:20 REVERSED HAND WITH MIDDLE FINGER EXTENDED 07:06:34 U+1F595. 07:07:13 snowman is also pretty relevant 07:10:42 <\oren\> I hve snowman already 07:11:41 great 07:14:41 haha @ [KH]an[jz][ai] 07:20:13 -!- zadock has quit (Quit: Leaving). 07:20:32 or what about these game symbols 07:20:51 like chess pieces or heart/club/spade/diamond 07:21:48 how about play/pause/stop/rewind/fast forward/etc. 07:21:50 Yes you should include suits if you have not already done so 07:21:55 oh, wait 07:22:14 they don't have room in their cold hearts for those symbols 07:24:27 Are you sure? I think those symbol are good idea too (also previous track, next track, record, and eject) 07:25:57 Those were included in "etc.". 07:28:29 -!- Treio has joined. 07:51:22 -!- hppavilion[1] has joined. 08:34:44 http://web.mst.edu/~lmhall/WhatToDoWhenTrisectorComes.pdf 08:48:30 (WARNING: Sad) 08:48:38 (NSFIP) 08:51:33 ip? 09:00:47 myname: Intelligent People 09:00:52 `? trisecting the angle 09:01:14 trisecting the angle? ¯\(°​_o)/¯ 09:04:10 `? angle trisection 09:04:14 angle trisection? ¯\(°​_o)/¯ 09:04:19 `? trisection 09:04:23 trisection? ¯\(°​_o)/¯ 09:04:56 `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 Learned «trisecting the angle» 09:06:06 wait, what 09:06:38 angle trisection is like one of the easiest thing i can imagine 09:10:23 "with an unmarked ruler and compass" is generally implied hth 09:10:50 yeah, but i can trisect a segment therefore i can trisect an angle 09:11:10 wait 09:11:15 the three angle parts must be equal hth 09:11:16 can i? 09:11:27 no. hth. 09:11:32 neat 09:11:53 i thought it would be as easy as bisecting 09:12:24 are there actually proves that this cannot be done? 09:12:41 to be very concrete, you cannot construct a 20 degree angle. 09:12:53 (for example.) 09:13:04 yes there are, it's part of galois theory. 09:13:05 or 30 09:13:11 30 is easy. 09:13:18 maybe _you_ cannot. 09:13:30 how do i do 30? 09:13:35 bisect a 60 09:13:57 well, but how do i get 60 09:14:15 myname, I fell into that fallacy before 09:14:16 the only angle i know you can get for sure is 90 09:14:33 start with two points, make a circle around each touching the other. 09:14:43 oh, you can make a triabgle 09:14:44 nvmd 09:15:13 -!- AnotherTest has joined. 09:16:18 basically, that gives you all of 30, 60 and 90 somewhere between the original points and where things intersect. 09:16:45 45 should also be possible 09:16:50 yes. 09:17:09 bisecting is, as you noted, easy. 09:17:30 oh my god...this is painful to read 09:17:39 a harder, still possible one is 72. 09:17:40 " i can trisect a segment therefore i can trisect an angle" just...no 09:17:53 diginet: don't worry he got better. 09:18:11 he did not reach crank orbit. 09:18:33 oerjan: I solved the halting problem 09:18:38 it was pretty easy 09:18:43 I just ran the computer...and it halted 09:18:48 academics are so stupid 09:18:53 well, twoducks solves it :p 09:18:55 I can't believe no one thought of that before 09:19:32 diginet: maybe they're just covering it up. 09:20:02 to keep their precious computer science jobs. 09:20:35 Big Computer Science needs to be exposed 09:22:11 Do you know the best way to fake Generator.prototype.return in JavaScript? 09:22:50 don't use JS 09:23:09 -!- oerjan has quit (Quit: Nite). 09:25:21 fun fact: a time ago you could make a 90 degree angle by bisecting a line in euclidthegame 09:25:48 like, 180/2=90 09:26:21 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 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:38:25 I think so\ 09:47:20 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 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 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 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 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:03:22 Nice 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 [wiki] [[Talk:Call/cc]] https://esolangs.org/w/index.php?diff=46403&oldid=46327 * Zzo38 * (+367) lem/cc 12:34:10 that is one bad explanation there 12:35:32 -!- AnotherTest has quit (Ping timeout: 252 seconds). 12:49:18 https://scontent.fath4-1.fna.fbcdn.net/hphotos-xlf1/t31.0-8/12710739_1236761493003893_1868373311706196033_o.jpg 12:54:38 -!- Treio has joined. 12:57:44 http://store.hermanmiller.com/Products/Embody-Chair 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 i hate my fiber connection 13:34:47 i downloaded steve jobs (2015) in 3 minutes 13:34:57 wanna switch? 13:34:59 it's too fast, there's no time to do anything 13:35:46 myname: how's yours? 13:36:17 i have cable with like 25 mbits, you will have plenty of time to do stuff 13:38:15 mine is 4x as fast :p 13:38:34 mine is 0.5x as fast :/ 13:40:33 100 mbit sounds lame for fiber 13:40:53 it's not google fiber 13:41:20 so? 13:41:43 I could pipe that through any old ethernet cable 13:41:49 not too old though I guess 13:42:10 shutup i don't get to decide what my isp serves 13:43:10 lol 13:43:12 I only get 10 megabits through a repurposed phone line, you're lucky 13:43:21 -!- boily has joined. 13:43:25 i don't think there's anything better in italy 13:43:32 friggin dorm internet 13:49:37 I think this thing is nominally 76/19 over a repurposed phone line as well. 13:50:11 I'm slighly unsure why UK has opted in for "standard" nominal DSL speed set of 9.5/19/38/76. 13:50:27 In Finland it was more like 10/25/50/100. 13:52:35 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:54:18 pareto bandwith 13:55:33 izabellora. where were you going at in Italy again? 13:55:53 @massages-loud 13:55:53 olsner said 10h 33m 34s ago: fatso day (or fat tuesday) was just this past tuesday actually 13:58:32 -!- Treio has joined. 14:00:22 `? fetch 14:01:00 fetch? ¯\(°​_o)/¯ 14:02:11 `le/rn fetch curses function that fets a char. see fetch(3X) for more info 14:02:13 No output. 14:02:36 * izabera funny 14:03:19 mv_fetch! 14:03:38 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 “<\oren\> with this, all kanji taught in primary school are covered” – primary school means which grades? 15:03:33 oerjan: I know, but he isn't the only one, there are more people here 15:03:43 he's just the only one I can identify 15:08:02 \oren\: add the Korean ones 15:10:58 \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 there are Korean Kanjis? 15:16:31 boily: no 15:16:39 boily: or actually, yes there are 15:16:43 but I wasn't asking for those 15:16:53 boily: \oren\ asked what *characters* he should add 15:17:10 oooooh. that should teach me to not halflogread. 15:17:31 meanwhile, time for tile shuffling. 15:17:42 -!- boily has quit (Quit: VEGA CHICKEN). 15:18:01 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 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. 15:59:21 hi, ais523 15:59:46 hi 16:00:33 Hi 16:02:04 ais523: I've been trying to learn git. I still don't like it, and I'd like a better vcs. 16:02:15 But I have a question about git. 16:02:22 go on 16:02:34 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 (Let me try to paste it from channel history.) 16:02:48 so if you use something else, people will find it harder to interoperate with you 16:03:15 not really. I can still use two vcs together, or send unified diff patches, and stuff 16:03:19 but yes, partly true 16:04:03 Let me copy the question from channel history. 16:04:13 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 The two commits are related but it's possible that neither is an ancestor of the other. 16:04:22 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 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 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 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 b_jonas: the first thing to note is that git is very dumb in terms of preserving history 16:06:11 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 what you've written is effectively equivalent to git diff t1..t2 | git apply 16:06:41 in order to do proper conflict markers, I'd recommend doing git stash first 16:06:48 then applying the commit difference 16:06:58 then doing a git stash pop and resolving the conflicts 16:07:02 (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 although git's UI for that is painful 16:07:14 sometimes I just make a temporary commit in order to work around the issues 16:07:50 the other possibility would involve rebasing the current branch against t1, then merging t2 16:08:02 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 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 b_jonas: right; however it's hard to get git to act more intelligently than that 16:09:26 almost anything you do will try to do a diff then merge, all in one go 16:09:27 “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 the rebase method is the only method to get it to do it one commit at a time, AFAIK 16:09:43 hmm 16:10:29 but how do I get rebase to not try to destroy what the branch ref pointed to before the rebase? 16:10:30 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 that's what scares me about rebase 16:10:49 rebase never destroys anything; rather, it makes a parallel copy of history and points your branch at that 16:11:00 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 perhaps it'd help if you explain the context for what you're doing, there might be another way 16:11:47 (note: this sort of thing is what git is worst at) 16:11:51 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 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 I can't make merge exclude some of the previous changes 16:12:33 so what should I merge? 16:13:27 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:42 s/it/rebase/ 16:13:59 why doesn't rebase just have a switch to use a new branch name? 16:14:22 -!- Opodeldoc has joined. 16:14:23 you can create a new branch first and then rebase that 16:14:31 hmm 16:14:50 ok, so hw does the rebase solution work exactly? 16:15:19 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 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 how does subversion do the operation in question? 16:16:31 ais523: the third syntax of svn merge does this basically 16:16:50 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 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 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 s/not only diffs/not only branches/\ 16:19:07 I really like the whole svn model, except how it's not a dvcs 16:19:09 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 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 is scapegoat the name of your hypothetical vcs? 16:20:01 yes 16:20:29 it's called scapegoat because if you use it, you can blame all your development workflow problems on ais523 16:20:57 it's called scapegoat because it uses blame (rather than diffs or trees) as its basic unit of information 16:21:07 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 coppro: it depends on what you mean by "undoing a merge" 16:21:38 ais523: oh? 16:21:54 like, if you just gave a merge command, you can put things back the way they were in one command 16:22:20 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 b_jonas: first should be cherry-pick 16:22:46 ais523: but can you do it without breaking history? 16:22:49 s/apply/revert/ 16:22:55 ais523: in git, you can do it with reset, but then you break histoyr 16:22:55 ais523: no, first should be revert 16:22:55 and it would work, it's just not history-aware at all, it's identical to the diff | apply method 16:23:00 because cherry-pick doesn't go backwards 16:23:05 I see 16:23:14 -!- bender| has quit (Ping timeout: 252 seconds). 16:23:30 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 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:47 ais523: right 16:23:48 b_jonas: not aware of either, it's literally just diffing the trees 16:24:03 but if I merge, and then push to a remote that I can't force, I can't undo the merge 16:24:46 oh, I see 16:24:48 ais523: I see 16:24:57 the remote now has dependencies on the branch that was merged 16:25:11 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 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 scapegoat's plans have been worked out in two stages, the general design and some specific design 16:26:10 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 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 (except of course it still compresses stuff) 16:26:34 however the general design would allow it via the same mechanism as merge conflict resolution 16:26:46 (you'd add a commit whose effect was to cancel out all the previously merged commits) 16:27:01 b_jonas: git doesn't know which files correspond to which other files, it works it out heuristically 16:27:08 ais523: exactly 16:27:13 which is why this might work 16:27:30 I'll probably only find out how well this stuff works as I actually try to use git at work 16:27:56 And when I get really annoyed, I can still get versions into a temporary svn repo and use svn commands 16:28:21 I have already tried that, git together with svn. It sort of works, but has problems. 16:28:35 git-svn basically assumes that both the git and svn repos are entirely linear 16:28:50 I didn't use git-svn 16:28:53 only git and svn separately 16:29:04 each saw the other as only local modifications in the checked out files 16:29:19 ais523: would such a cancellation commit allow the branch to be remerged correctly, then? 16:29:50 yes, although there'd be a dependency between the merge and the cancel 16:29:59 or, hmm, maybe not 16:30:06 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 if you merge a commit twice then cancel one, that should theoretically be the same as merging it once 16:30:30 b_jonas: git-svn basically forces you into the common subset of git and svn 16:30:35 ais523: right 16:31:34 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 So you use git-svn to convert the svn repo to git. 16:32:12 Btw, the context is that at work, people decided to use git, but I'm not convinced it's better. 16:32:21 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 b_jonas: better than svn? 16:32:52 I would suggest it is, but personally I find hg to be even better 16:33:02 But that is probably because I'm more used to it 16:33:05 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 There's hope they'll learn, maybe. 16:33:14 Some of them at least. 16:33:26 <\oren\> git is conceptually better but its user interface sucks 16:33:31 we use hg at work, and it works fairly well for us 16:33:37 \oren\: I actually prefer svn conceptually too 16:33:42 oh and TortoiseHg has a *really* good GUI 16:33:57 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 (Oh and tortoisehg is not windows specific, which I believe tortoisesvn is) 16:34:40 \oren\: You mean commit and push? 16:34:42 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:34:43 Hm 16:35:07 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 b_jonas: why would they...? Never mind 16:35:45 Vorpal: yes, part of the problem is the co-workers (and also me), not only the software 16:35:55 b_jonas: svn:ignore / .gitignore? 16:36:25 Vorpal: partly works, but sometimes they committed stuff that shouldn't be in the vcs deliberately 16:36:29 I mean, we use that for the build directory and stuff like that at work (with .hgignore) 16:36:36 Okay? 16:36:47 In fact, there's also stuff that _could_ be in the vcs if only it supported sparse clones: 16:37:12 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 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 b_jonas: what about sub-repos? I think git has that too? 16:37:41 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 b_jonas: We certainly use sub repos at work with hg 16:38:01 -!- lynn has joined. 16:38:06 Hm 16:38:20 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 Vorpal: I got them to compromise and put the large deps in an svn repo, from where I can check them out 16:38:51 that works well 16:38:58 Not much checked in binaries there (there are a few, external proprietary libraries ) 16:39:00 this way it's only two repos, not many sub-repos 16:39:21 -!- zadock has joined. 16:39:25 (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 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 git can do shallow submodules, though I'm not sure how realistic that sort of stuff would be. 16:40:41 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 scapegoat can be set up to have a one-command commit+push 16:40:52 specifically, you can set up a repository to mirror your own local repository 16:40:58 then any changes to the local repo will be pushed automatically 16:41:18 so all you have to do manually is the commit 16:41:24 \oren\: obviously it can. Bash is also turing complete 16:41:54 or, well, as turing complete as anything running on a real computer is 16:42:22 ais523: hm... what about merges and rebasing then+ 16:42:43 <\oren\> function gitci() {git commit -a;git push} 16:42:48 Vorpal: scapegoat doesn't have rebasing, and merges are no different from commits in this respect 16:42:49 (And shallow clones in general.) 16:43:03 ais523: scapegoat is not git? Or what is it? 16:43:32 Vorpal: it's a VCS that #esoteric have been planning for years, because the existing VCSes suck 16:43:37 however nobody wants to actually write it 16:44:46 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 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 ais523: that way the history is mostly linear, not "wide and messy" 16:45:48 merging is more honest wrt the history; rebasing looks prettier but destroys information 16:46:24 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 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 ais523: but branches in git, is that like named branches in hg? 16:46:54 Or is it different? 16:46:58 <\oren\> wait. idea: what if you simply did "timestamped folders" within a compressed archive? 16:47:06 you can binary search just as well with the merge version 16:47:24 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 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 Vorpal: branches in git are basically equivalent to separate repositories, but stored in an efficient way 16:48:16 ais523: hm, so what is the git equivalent to named branches in hg then? 16:48:31 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 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 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 git's way of doing it seems oddly complicated 16:50:12 I can't get the working copy to do that in any way. 16:50:42 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 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 Vorpal: sparse checkout means not the whole tree. svn has quite good support for that, though not faultless. 16:51:11 Though I haven't used svn for years 16:51:14 Ah 16:51:16 Okay 16:51:30 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 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 fizzie: so each commit doesn't belong to a specific branch? 16:52:43 One problem with git is that on windows it can't have multiple checkouts of the same repo without storing the history twice. 16:52:43 Vorpal: No. 16:53:01 -!- lleu has joined. 16:53:17 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 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 I want multiple checkouts. 16:53:25 Sometimes four or more. 16:53:34 With svn, that's easy. 16:53:44 (but it still is part of a single specific branch) 16:54:30 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 I would assume git can do the same? 16:54:53 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 b_jonas: hm... not familiar with fossil 16:55:11 Vorpal: git can do that on a filesystem where you can create hard links. No luck on windows. 16:55:41 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 b_jonas: NTFS supports hardlink, mercurial supports hardlinking on Windows 16:55:52 b_jonas: if you use FAT32 you are fucked though 16:56:01 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 b_jonas: only symlinks afaik 16:56:18 Hmm 16:56:25 maybe git does support this on windows too then? 16:56:27 I'll have to test 16:56:30 b_jonas: though it differs between windows versions? 16:56:32 what's the switch for clone? 16:56:43 for git? no clue 16:57:03 b_jonas: also how are you a developer without local admin? 16:57:05 No FAT32, except on camera SD cards. People aren't that stupid. 16:57:20 Vorpal: I might have local admin, but that doesn't mean git commands run as such 16:57:25 True 16:57:31 Hardlinking should be the default for git clone that doesn't cross filesystem boundaries. 16:57:33 But you could run a relink command as that 16:57:41 There's only a "--no-hardlinks" switch if you want to disable it. 16:58:05 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 Saved gigabytes for me 16:58:18 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 Oh. I don't remember that. 16:58:42 How do I have multiple git checkouts without downloading pulled data twice by the way? 16:59:07 They've added the "multiple separate working trees" thing as a "real" git command very recently, by the way. 16:59:10 http://git-scm.com/docs/git-worktree 16:59:24 Well, "very recently"; maybe 2.5 or so. 16:59:29 Perhaps by mirroring the repo and pulling from that... 16:59:37 fizzie: really? I'll have to look that up 16:59:39 that would be great 16:59:44 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 especially if it can also do sparse checkouts 17:00:01 So even after merges that commit has the branch "attribute" set to the same as when originally commited 17:00:26 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:33 b_jonas: fair enough 17:00:52 When they switched to git, I got a promise from them that they won't switch to mercurial any time soon 17:00:55 b_jonas: I'm happy we use hg, since it works really well 17:01:08 I don't claim mercurial is bad, but I didn't want us to switch. 17:01:08 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 (although as git commits are immutable, duplicating them shouldn't be visible to the user) 17:01:38 Hrm. I have no idea if the worktree stuff lets you have different sparse checkouts for the different working trees. 17:01:58 (They didn't intend to, either, but I needed an assurance about the future.) 17:02:32 Hm 17:02:43 b_jonas: what sort of windows GUI is there for git btw? 17:02:46 fizzie: it's not really only sparse checkouts that matter, but sparse clones 17:02:49 I'm curious 17:03:38 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 many git guis are terrible 17:03:53 sure 17:03:57 gitk is good for read-only use 17:04:15 although it doesn't have nearly enough functionality to use it to actually modify repos in anything but trivial ways 17:04:28 ais523: any good all round GUI? Like tortoisehg is excellent for almost everything with hg 17:04:38 not that I know of 17:04:39 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:04:40 Hm 17:05:09 b_jonas: right. Which is why tortoisehg and tortoisesvn actually work very differently, and why both of them are good 17:05:15 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 Chromium has a very complicated build infrastructure that's kind of git + lots of specific stuff on top of it. 17:08:16 oh god, chromium build 17:08:20 fizzie: thanks, this git worktree is very interesting 17:08:22 * coppro goes into a corner to cry 17:08:33 I've built chromium, it's certainly no joy. 17:08:45 it really isn't 17:09:00 -!- heroux has joined. 17:09:54 -!- zadock has quit (Quit: Leaving). 17:10:35 coppro: hm, what is the issue with their build system? 17:11:26 it's just a complex layered mess 17:11:29 It's just complicated and very custom. Plus they have at least two of them in parallel. 17:11:31 My main disagreement with the dev model of my co-workers isn't the vcs use though. 17:11:40 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 fun fact: it's impossible with current tools to build 32-bit chromium without a 64-bit machine 17:12:13 coppro: heh 17:12:14 Ninja is used for Chrome, sort-of. 17:12:20 But then we build mixed SDK builds for machines running several nodes with different CPU architectures. 17:12:34 And need to be able to start simulations and what not as well 17:12:38 coppro: this sort of thing is why I wrote aimake 17:12:54 I wanted to cut out as many of the levels of abstraction that build systems use as is reasonable 17:12:57 ais523: aimake would make that problem worse, not better 17:13:01 (the memory one) 17:13:15 ais523: so you don't generate for a lower level build system? 17:13:18 well, using a lot of memory is not an intended or fundamental part of aimake's design 17:13:23 Vorpal: nope! 17:13:30 ais523: hm okay 17:13:33 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 ais523: what about tup? 17:13:45 coppro: WHAT? 17:13:52 it does use cc/gcc, though, rather than calling the compiler, linker, etc. separately 17:13:54 haha 17:14:03 right 17:14:08 ais523: what about ar? 17:14:12 -!- jaboja has quit (Ping timeout: 248 seconds). 17:14:16 it calls ar directly I think 17:14:19 Ah 17:14:34 or, well 17:14:39 atm it doesn't create static libraries, only dynamic ones 17:14:41 so it has no reason to call ar 17:14:55 in terms of unpacking libraries it uses nm and ld-via-cc rather than ar directly 17:15:13 Firefox: https://groups.google.com/forum/#!topic/mozilla.dev.platform/wLHTg_moymM 17:15:22 "At the end of last week our Windows PGO builds started failing on 17:15:22 mozilla-inbound (https://bugzilla.mozilla.org/show_bug.cgi?id=709193). 17:15:22 After some investigation we determined that the problem seems to be that 17:15:22 the linker is running out of virtual address space during the optimization 17:15:23 phase." 17:15:30 "This is not the first time we've run into this problem (e.g. Bug 543034). 17:15:30 A couple years ago we hit the 2 GB virtual address space limit. The build 17:15:30 machines were changed to use /3GB and that additional GB of address space 17:15:31 bought us some time." 17:15:35 ais523: why would it unpack libraries? 17:15:54 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 Vorpal: to know which ones to link in 17:16:41 aimake tries to handle as many steps of the build, including many that are normally done by humans 17:16:46 and thus have saved me a lot of time 17:17:06 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:10 I just don't get it 17:17:21 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 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 to stop you having to remember them 17:17:30 What gcc command do you even use to _properly_ link C++ and fortran together? 17:17:31 (there are quite a lot) 17:17:40 ais523: yes, but the problem is that the switches _change_ 17:17:44 by version of gcc 17:18:05 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 I have linked c++ without g++, but then it stopped working when it needed more switches 17:18:11 and it gets worse if you use threading 17:18:15 aimake unpacks just those ones and uses it to figure out which libraries you actually do need 17:19:00 ais523: I'm not convinced. What happens if you rely on code that runs in static constructors? 17:19:10 Might only be relevant for dynamic libraries 17:19:26 Since that won't work anyway in static libraries 17:19:27 Vorpal: it's not like it links only part of the library 17:19:27 it links the entire library 17:19:34 just relies on symbols to figure out what to link 17:19:37 especially in terms of object files 17:19:50 ais523: unless it is static, in which case ld will only pull in the required object files 17:19:51 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 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 I mean, suppose I have foo.c and bar.c 17:20:14 -pthread 17:20:17 do I link them together, or are they meant to be separate? 17:20:28 answering this question may depend on whether bar.c defines symbols that are also defined in a library 17:20:30 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 it tracks all the symbols, all right :- 17:20:43 * :-) 17:20:52 it may potentially have scaling problems; it uses a lot of memory as it is 17:21:24 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 ais523: so aimake might work well for nethack where the dependencies are all messed up already 17:21:51 but I don't want to use that approach in my projects 17:21:54 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 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 I can't imagine using aimake there 17:22:20 And that is not work link time optimisation either 17:22:32 fizzie: do you remember how to turn on flash local storage in chrome? 17:22:57 ais523: true. Do you know ld can do that for you though? At least GNU ld 17:23:02 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 ais523: -Wl,--as-needed 17:23:22 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 so that when I get an error, I know it's somewhere in the code I did link in 17:23:39 not in some unrelated part of someone else's code 17:23:41 b_jonas: ... that is just bad code that crashes? 17:23:41 Vorpal: err, suppose your project has two files that contain functions with the same name (common examples: main, yyparse) 17:23:51 ld isn't going to magically figure out which one you wanted to link 17:23:59 Vorpal: yes, but it's typically bad code in stuff I'm not currently working on, 17:24:00 aimake can, but it requires a lot more analysis of the entire project 17:24:09 which stops concentrating on my work all the time 17:24:17 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 so I do work on stuff in separate small executables for al library with a sane small interface, 17:24:39 and then integrate that library into the big code, 17:24:42 ais523: mixing the source of multiple programs in the same directory is just bad code IMO 17:24:51 Vorpal: what if they share some files? 17:25:01 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 ais523: a common library (.a or .so) 17:25:05 in NetHack's case we're building multiple programs, but many files are shared between many program 17:25:07 *programs 17:25:14 often including header files, which you can't put into a library 17:25:26 ais523: and structure the source code based on that library layout. 17:25:38 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 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 And make that pulling in transitive if you want 17:26:19 b_jonas: sounds like a good way to ensure more eyeballs on all that bad code ;-) 17:27:01 Vorpal: I mean you could easily end up with 5 or 6 layers of nested libraries like this 17:27:05 ais523: also this allows each library to have it's own unit tests or quickcheck style tests easily 17:27:24 also some of the files are generated 17:27:26 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 int-e: and their code is BIG 17:27:39 they like frameworks 17:27:53 and yes, I also make mistakes, and write code that doesn't work or crashes 17:28:00 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 but still, that just doesn't work for me as a dev model 17:28:26 ais523: and I don't see the issue with generated files? 17:28:38 A proper build system should be able to handle that 17:28:40 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 Vorpal: well, aimake can, most build systems can't though 17:28:56 ais523: for example, add_rule(.yy -> ...) or something like that 17:29:37 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 Vorpal: so the problem is with dependency tracking 17:29:54 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 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 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 I don't remember the details. 17:30:19 most build systems handle b) but not a) 17:31:02 ais523: hm b is wrong, you means "the files that depends on *it*" surely? 17:31:07 Or they have undocumented local (not committed) modifications on their copy of the code that makes the stuff build; 17:31:11 also... this is a case of recursive make failing isn't it? 17:31:20 Vorpal: err, yes 17:31:22 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 ais523: Which is why you generate a single layer of build system that knows the entire tree 17:31:30 also this fails even in a nonrecursive make, unless you write the dependencies explicitly 17:31:47 -!- AnotherTest has joined. 17:31:50 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 which is something that is incredibly tedious and errorprone and almost all build systems do themselves nowadays 17:31:51 not really? GCC exports dependency info using -Msomething iirc? 17:32:00 Vorpal: the -M method does not handle a) 17:32:27 because it relies on the file building successfully, which it can't do if its dependencies haven't been built yet 17:33:14 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 what if the custom build steps require other parts of your project to be built first? 17:34:22 Vorpal: the problem is that in nethack, the dependencies of the part that generates headers is really messed up 17:34:29 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:42 b_jonas: fair enough 17:34:46 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 Vorpal: aimake first checks all the dependencies of everything, then builds as much as it can 17:35:11 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 if any custom build rules become runnable as a result then they're run 17:35:18 b_jonas: well, that is just bad design, even excluding the build system issues 17:35:18 at which point ais523 had enough and wrote a customf build system 17:35:24 repeat until everything is built 17:35:25 Vorpal: yes, it is 17:35:32 Vorpal: but nobody has time to clean it up in nethack 17:35:38 ais523: parallel make I hope? 17:35:51 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 Vorpal: a circular dependency is really easy to introduce by mistake and hard to detect 17:35:58 most of it should be removed 17:36:28 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 it spends about as much time calculating the build as it does actually building 17:36:40 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 I have plans that would make build calculation parallelisable too but they'd have to wait until aimake 4 17:37:04 ais523: ah... Yeah you use C not C++ 17:37:12 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 thank god for distcc is all I have to say on the matter 17:37:20 Oh and ccache 17:37:26 Vorpal: you do know that a cyclic dependency between libraries (either static or shared) works just fine on Linux, right? 17:37:35 Vorpal: ccache hardly makes any difference on NetHack 4 17:37:39 Without ccache still takes 40 minutes to build a clean tree at work... 17:37:46 in general, ccache should be a no-op if the build system is well-designed 17:38:05 With ccache (and everything in cache) + CCACHE_HARDLINK=1 it takes basically 30 seconds 17:38:09 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 if you're using ccache + a "clean" build you're really just doing a no-change dirty build 17:38:35 thus the 30 second time is very misleading 17:38:35 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 b_jonas: I'm not sure, it may be that it finds some but not others 17:38:59 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 it could probably be made to find them though 17:39:12 ais523: and 30 seconds is basically the link time 17:39:31 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 in my experience normally a header file change does change things elsewhere, though, even if it's just __LINE__ directives 17:39:54 ais523: oh it did change everything. But I had to revert the change, and that is when cache saved me 17:40:09 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 oh I see, ccache caches old versions too? that's functionality I hadn't thought about 17:40:45 Also, headers with generic names clashing with headers in the system or dependencies. 17:40:50 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 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 At least these days they don't give stupid generic one-word names, I got them to stop that. 17:41:09 the generic name header problem actually happens in NitroHack and thus NH4 (magic.h) 17:41:12 ais523: that means with a sufficient limit (IIRC I use like 20 GB?) 17:41:17 so I had to adapt aimake to handle it 17:41:17 it can store old files 17:41:30 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 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 ais523: We've had both actual duplicates of source files, and just different files with the same name. 17:43:01 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 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 So very different use cases 17:44:24 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 I would actually love C with namespaces as a language. 17:45:05 And properly namespaced macros 17:45:26 Vorpal: you can use C++ as C with namespaces if you want 17:45:45 I don't want to use it that way, but you can 17:45:49 b_jonas: technically not, since it wouldn't let me name a variable "new" 17:45:49 it's a multi-paradigm language 17:45:56 Vorpal: eww. 17:46:13 (the ruby source code is full of variables named klass) 17:46:15 b_jonas: well just pointing out they are different. I'm not suggesting you do that :P 17:46:19 hah 17:46:35 Vorpal: and variables named new isn't the biggest incompatibility 17:46:36 The real issue with C++ is templates. And the code bloat and compile time slow down they result in 17:46:42 indeed 17:46:48 certain conversions not being allowed in C++ is a bigger practical difference 17:47:04 Oh, that's right, void* stuff 17:47:12 you would have to cast malloc all the time 17:47:20 b_jonas: I believe "class" is used as a variable name in NetHack too 17:47:27 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 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 b_jonas: well... STL is pretty bad in parts IMO. Boost is of course much worse than that 17:48:22 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 b_jonas: boost mpl is evil. 17:48:41 And I like C++ in general a lot 17:49:13 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 Compare this to a language like python, java, C#, pretty much anything 17:49:49 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:03 hm 17:50:06 Vorpal: look at all the research languages, ghc, and rust, they don't handle separate compilation properly 17:50:14 Hm true 17:50:16 It's easy to claim no headers if you compile everything together 17:50:30 How does .NET do it? 17:50:34 There _might_ be a solution, and some of the C++ module people are trying hard to find it 17:50:37 but it's not easy 17:51:19 Compiles an assembly at a time? 17:51:22 I guess? 17:51:29 And it gets much harder to solve if you don't want just C stuff, but templates and/or a dependent type system. 17:51:36 true 17:52:16 b_jonas: how does haskell do that when working with polymorphism across packages? 17:52:24 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 no idea, never looked at rust 17:52:49 Vorpal: dunno about haskell, ask the haskell people here 17:53:20 Hm 17:53:45 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 It's still possible, but hard. 17:54:18 b_jonas: well okay that is true, but mixing most languages is hard. Unless it is C and C++ 17:54:26 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 If you just compromise with proper headers, it becomes easy. 17:54:48 You basically have to call FFI to a dynamic library exporting C functions in most languages 17:54:49 Everything compiles its own code and reads headers. 17:55:01 Vorpal: yes, and that's a good thing. The problem is how you link the whole thing 17:55:15 I DO like the haskell / rust approach of FFI 17:55:29 which is also mostly C++'s approach 17:55:32 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 having C as a sort of common base everything can call into an export functions into 17:55:47 thinking of python here 17:56:06 (which is also the easiest way to link assembly files into C or C++ by the way) 17:56:28 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 b_jonas: I haven't done FFI in haskell, and never used rust, so what is that approach? 17:56:43 Vorpal: I think you can link properly with python too, can't you? I know it can also load dynamically 17:57:54 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 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 This is mostly down to python being byte code compiled and then interpreted 17:59:28 (or JITed from byte code if you use PyPy) 18:01:23 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 \ 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 I think something was cut there 18:02:20 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 Oh wait, it repeated a bit? 18:02:35 Vorpal: I repeated a bit because it got cut 18:02:58 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 but I can't tell where exactly it's cut so there's an overlap 18:02:59 then* 18:03:11 Unless haskell can parse arbitrary C headers 18:03:33 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 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:17 Vorpal: exactly 18:04:45 also ... is evil from the typo info POV 18:04:56 (i.e. printf and such) 18:05:11 Also, this model is also how you can communicate between C++ code built with different ABIs, through C 18:05:50 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 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 so all you need is declaring some symbols as unmangled so they link properly. 18:07:12 b_jonas: um.. extern "C".. for name mangling 18:07:15 Vorpal: no, you don't need to get dlopen in this. You can just link everything at build time. 18:07:24 b_jonas: no I mean for the module case 18:07:29 b_jonas: say you want to load plugins 18:08:09 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 not in any standard way anyway 18:08:24 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 b_jonas: I would assume mingw would use the native ABI? 18:09:03 (On windows x86_64, long int and unsigned long int are 4 bits with msvc, 8 bits with gcc.) 18:09:21 what about long double? 18:09:23 Vorpal: no, I think mingw still uses the gcc ABIs. 18:09:26 huh 18:09:55 Also on x86_64, Linux and Windows use different calling conventions. No idea about mingw though 18:10:03 different sets of registers 18:10:04 4 bits, really now... scnr 18:10:23 int-e: typo for bytes I assume 18:10:24 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 I don't care much about long double, do I don't know the detauls 18:10:54 b_jonas: that breaks MSVC ABI? Fairly sure it used to be that long double mapped to x87 on MSVC before 18:11:13 x87 has 80 bit floats, so 10 bytes should be right 18:11:20 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 int-e: 10 bytes with 16 byte alignment iirc? 18:11:48 b_jonas: wine 18:11:55 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 probably, I was going to say that I don't know about the alignment. 18:12:14 int-e: yes, but the x87 should die 18:12:21 int-e: it's no longer useful in the x86_64 era 18:12:27 it's maintained only for compatibility reasons 18:12:37 b_jonas: hm really? Will have to check using msvc2005 at work... We have that because of legacy WinCE crap 18:12:37 it should DIE a well deserved and peaceful death 18:12:41 WinCE 5 that is 18:12:46 (may it die soon) 18:12:48 Vorpal: I don't know really, sorry 18:12:55 I don't know the details of the long double 18:13:00 check yourself if you want to be sure 18:13:06 yeah I think I will 18:13:09 and I definitely don't know about WinCE 18:13:14 seriously 18:13:19 b_jonas: nobody does, and that is part of the issue :P 18:13:21 do you have legacy WinCE crap? 18:13:28 luckily we don't have that kind of thing 18:13:36 we use fairly recent tools most of the time 18:13:39 I mean 18:13:43 not really bleeding edge 18:13:47 but usually not 15 year old crap 18:13:53 with some exceptions 18:14:00 I have used old libraries, but they're GOOD ones 18:14:20 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 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 we have embedded devices running some unix on non-x86 18:15:32 so relatively saner 18:15:40 still caused some problems, and I don't want to work with them 18:15:43 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 I like the modern tools, and don't like the lack of toolset support for embedded devices 18:16:01 Lots of layers of safety. And safety classed code 18:16:15 so I like working with the modern desktop computers and servers 18:16:27 b_jonas: moving to real time linux now though 18:16:38 Vorpal: I see 18:16:48 Luckily I don't work with anything of that sort 18:16:52 I don't have that kind of stress 18:16:56 b_jonas: mostly x86 and ARM though, except some real low level stuff, which I don't deal with directly anyway 18:17:27 "Mostly x86 and ARM" is true here too, I believe 18:17:40 But I would prefer if it was x86_64 only, no x86_32 and no ARM 18:17:42 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: I see 18:17:51 better than running off a clif 18:17:53 cliff* 18:17:54 Sure 18:18:25 and certainly 18:18:27 oh, I don't do anything 64-bit. Well the dev computers are of course, but no target module 18:18:48 We run mostly x86_64 these days, luckily 18:19:07 But support for x86_64 is still not perfect, some toold or libraries are more easily available on x86_32 18:19:14 but that's improving a lot 18:19:20 x86_32 is going away luckiliy 18:19:32 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 With ECC memory and so on 18:19:47 There's lots of stuff I couldn't use on x86_32 five years ago, but can now 18:19:55 s/_32/_64/ 18:20:06 b_jonas: really? On Windows I can imagine yes 18:20:23 Still I develop in Linux most of the time. 18:20:26 So not a major issue 18:21:12 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 That is annoying. It is my last computer with a real serial port 18:21:29 (12 V and so on) 18:21:34 ouch 18:22:08 b_jonas: it has a parallel port too 18:22:30 But it is the serial port I sometimes use 18:22:48 My current (old) home PC has both. My next home computer might not have either. 18:23:18 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 Oh the battery is quite hot as well. Damn 18:24:07 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 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:39 Also 12 V 18:24:48 Since USB uses 5 V 18:24:52 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:07 kay 18:25:18 At work I usually just ask other people for this kind of stuff. 18:26:25 And I certainly don't try to decide what hardware to buy at work. 18:26:25 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 b_jonas: I wish I had the ability to decide such. Heh. Too big company for that 18:27:45 Sometimes I try to give hints about properties that would be useful for the hardware. 18:27:49 Still that work laptop is quite neat. 32 GB RAM, Core i7. And so on 18:28:14 Basically the best mobile workstation you can buy from Dell is what we get, new one every 3 years 18:28:55 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 b_jonas: what on earth is forint? 18:29:22 I don't try to mess with the more complicated hardware, like the big server machine with lots of disks and stuff. 18:29:25 Vorpal: HUF currency 18:29:29 HUF being? 18:29:33 Hungarian forint 18:29:36 Ah 18:29:38 the currency used here 18:29:45 I thought Hungary used Euro yeah 18:29:52 hm 18:30:02 no, and hardware is measured in dollar instead of euro anyway 18:30:13 weird 18:30:16 because it comes from China where people use dollars 18:30:24 <\oren\> uhhh 18:30:30 no, half-seriously 18:30:40 b_jonas: also, I haven't seen a micro SD that didn't come with an adapter to SD anyway 18:30:44 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 not only China, but also Korea and Taiwan etc 18:31:04 <\oren\> oh, internationally 18:31:07 eh? korea uses won 18:31:08 \oren\: exactly 18:31:16 Really? 18:31:18 coppro: in international sales, they generally use USD 18:31:21 oh, sure 18:31:22 not always, but often 18:31:30 <\oren\> they price stuff in USD 18:31:41 so if I buy stuff on internet that's not from Hungary, it can be EUR, USD, or GBP 18:32:25 luckily all the available payment methods handle the monetary conversions 18:32:39 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 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 b_jonas: well I live here so :) 18:33:57 b_jonas: and it is a Swedish company that makes that rugged hardware for us. 18:33:57 \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 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:02 everything* 18:35:39 Where each machine is mostly unique and a customer might pay for having a function only they will ever use developed 18:36:52 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 b_jonas: I think a single display for our machine might cost ~20000 USD or around there. 18:37:38 b_jonas: ah, so you retro fit mining machines then? 18:37:41 Right 18:37:54 err 18:37:57 huh no 18:38:02 it was you who mentioned mining machines 18:38:05 missed the "no" 18:38:07 "not" 18:38:08 which I assume are expensive 18:38:18 b_jonas: yes, millions USD 18:38:37 whereas we put lots of cameras, plus servers communicating with the cameras 18:38:42 I read "mining equipment, only like a large server or two plus lots of cameras" missing the "not" 18:38:45 and sometimes other stuff 18:38:48 Thus I eneded up at "retrofitting" 18:38:49 right 18:38:54 Because there are companies that do that 18:39:11 Take a hydralic dumb machine and add in some screens to help them navigate it or such 18:40:02 b_jonas: speaking of cameras, you wouldn't believe how expensive a rugged PTZ IP camera can be 18:40:12 (I assume you know what a PTZ camera is?) 18:40:16 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 yes, I know how expensive they can be 18:40:34 we have some expensive ones 18:40:56 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 Never seen a better optical zoom than that though. Ever 18:41:42 we have everything from cheap webcameras costing like 8 dollars to expensive PTZ cameras costing ten thousand USD or more 18:42:22 as well as DLSR cameras, stereo and TOF cameras, and more 18:42:27 Heh 18:42:38 Only a few cameras in our case. All rugged 18:43:04 Sounds annoying having to deal with so many different models 18:43:28 It is bad enough to deal with like 3 different models with their own quirks 18:43:34 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:43:43 Neat 18:43:49 bbl, making food now 18:44:10 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 But some suck more than others 18:44:49 b_jonas: oh? I can't see how a PTZ can be that complicated really 18:45:04 Just some commands to control some actuators 18:45:12 Some of them at least have an interface that's well-designed for its purpose, some don't manage even that 18:45:52 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 I have slowly realized that most developers don't really know what they are doing 18:46:34 Which is what causes terrible code 18:46:52 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:46:57 \oren\: thanks 18:47:01 Vorpal: yes, that's true 18:47:04 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:05 XD 18:47:20 Vorpal: yep 18:47:22 exactly 18:47:26 it includes me as well 18:47:46 which is one more reason against the big framework containing all the code, including old code 18:47:55 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 \oren\: ah nice, that's much better for Deseret, thanks 18:48:14 \oren\: you've even separated them 18:48:33 <\oren\> yah, it was silly to have them in one section 18:48:35 \oren\: why don't you also split the kana from the bopomofo to separate headings? 18:49:20 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 (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 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 b_jonas: and how do you do inter-node communication without a common language and framework for it 18:50:32 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 That and not dealing with shared memory 18:50:44 <\oren\> done 18:50:59 Vorpal: that might be better than what they're doing 18:51:08 I also hate how they're often using threads completely unnecessarily 18:51:16 everything is put in a separate thread, even when it needn't be 18:51:18 which is also the reason to not do nethack style code, but cleanly layered libraries 18:51:22 when that just complicates everything 18:51:43 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 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:15 \oren\: great, thanks 18:52:16 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 \oren\: what's the status of the hangul? 18:52:36 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 b_jonas: how else will handling the CAN adapter interrupts happen when they need to 18:53:11 \oren\: aren't the kana already in that order? 18:53:36 -!- Lord_of_Life has joined. 18:53:37 b_jonas: I would expect 50-100 threads in a normal real time application 18:53:45 That includes some thread pools 18:54:01 Less in a non-realtime application 18:54:08 And a lot more thread pools in that case 18:54:08 \oren\: or do you mean move the small kana out of the kana in the main grid? 18:54:20 \oren\: designing a font? 18:54:45 bbl, actually making food 18:56:27 Vorpal: luckily we're not making realtime applications, so that's not a problem, 18:56:40 but we are doing a few things where threading can help 18:56:46 IF used properly 18:57:16 but very often, processes would work better, but they use threads instead. 18:57:42 Like, when something has a very small interface, it can be moved to a process easily. 18:57:51 I have already done some of that. 18:58:28 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 Works well enough, once you figure out some ugly details. 18:59:04 Including some Windows-specific stuff. 19:00:10 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 But then, I'm also not perfect, I write lots of badly designed code too. 19:01:00 I should try to improve myself. 19:01:04 All the time. 19:01:07 <\oren\> I've arranged the hiragan 19:01:46 \oren\: ah nice 19:02:10 \oren\: do you have a script yet to find characters accidentally missing from the demo page by the way? 19:02:28 \oren\: also, shouldn't all the small kana be separate from the main table? 19:03:11 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 Vorpal: I rarely have to deal with it either, 19:03:40 And we don't create threads or processes after startup. 19:03:45 because I work on parts of the code that doesn't touch it usually. 19:03:56 And only allocate from memory pools after that point. 19:07:44 b_jonas: oh and the way you turn off the application is cutting the power. Take that file system! XD 19:08:06 (no we don't use a normal linux file system) 19:08:59 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 So eventually they just decide that segfaulting at termination is sort of a feature, and just _exit without trying to shut down. 19:09:45 ouch 19:09:55 Or try to get stuff shut down in the proper order so that the important data is saved _before_ the segfault. 19:10:15 Your approach seems more haphazard though 19:10:21 Rather than planning for it 19:11:13 Yep. 19:11:17 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 You could still do it on the unit tests 19:11:37 There are some memory leaks, sure 19:11:54 but usually not huge ones, because leaking entire images every frame many times per second is quickly noticed 19:12:01 I know, I've leaked images before 19:12:05 hah 19:12:20 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 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 I mean, like, keeping a smaller structure for every frame that you free only at the end of the whole stream. 19:13:30 b_jonas: yeah windows is terrible when swapping (or page filing I guess) 19:20:33 \oren\: ah, better 19:20:42 -!- Lord_of_Life has quit (Excess Flood). 19:21:07 \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 \oren\: and now the hiragana and the katakana are nicely arranged exactly the same 19:22:49 looks good 19:25:10 \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:40:46 \oren\: do hangul 19:41:41 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 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 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 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 As someone whose first VCS was mercurial, non-distributed VCSes feel very clunky to me 19:56:52 FireFly: is mercurial that old? 19:57:00 I thought it was too new to be able to be your first VCS 19:57:27 -!- oerjan has joined. 19:57:51 It's not that old; I'm just kinda young 19:58:06 I guess 19:58:24 Apparently Mercurial is from 2005 19:58:30 I probably used it first in 2008 19:58:39 mercurial and git are approximately the same age... they were both born out of the bitkeeper linux debacle 19:59:22 int-e: really? 19:59:36 how was mercurial born from that? 20:00:02 http://lkml.iu.edu/hypermail/linux/kernel/0504.2/0670.html 20:01:04 int-e: I see 20:01:43 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:02:40 hmm 20:03:10 Didn't git win simply because it contained exactly what Linus wanted? 20:05:07 -!- Alcest has quit (K-Lined). 20:05:14 Yes, sure. 20:06:44 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 That and other people (like Petr Baudis with cogito) made git usable for ordinary people. 20:08:17 -!- heroux has joined. 20:08:59 zzo38: It is possible. 20:09:20 also, maybe mercurial got (sort of) sane branching only later than git, didn't it? 20:10:45 it started out as one branch per repo if I understand correctly 20:11:27 -!- atrapado has joined. 20:11:39 pikhq_: What considerations must be done in order to do so (if any)? 20:13:34 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 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 But I'm not sure how useful this information is... 20:15:49 And is it true that mercurial has three different and mutually incompatible branching mechanisms? 20:16:05 One being the one branch per repo, and I don't know what the other two is. 20:16:12 Or is that just a malevolent anti-hg rumour? 20:18:12 Basically I want to use SDL only for audio and for endianness-dealing. 20:20:36 -!- variable has joined. 20:20:53 `wisdom 20:21:02 `wisdom 20:21:26 django/Django is a giraffe. 20:21:27 month/Month is a misspelled Moth. 20:22:33 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 ...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:23:37 I see 20:29:06 `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:18 `? char 20:29:19 char? ¯\(°​_o)/¯ 20:29:44 -!- ais523 has joined. 20:30:16 `le\ 20:30:17 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le\: not found 20:30:19 `le 20:30:20 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory 20:30:34 `? int 20:30:35 int? ¯\(°​_o)/¯ 20:30:36 `? long 20:30:37 long? ¯\(°​_o)/¯ 20:30:37 `? short 20:30:38 `` ls le/rn 20:30:38 short? ¯\(°​_o)/¯ 20:30:39 le/rn 20:30:39 oerjan: at least le/rn is advanced enough that that command didn't work 20:30:40 `? double 20:30:40 so much for the idea of having a `le rn that works as people expect ;-) 20:30:41 double? ¯\(°​_o)/¯ 20:30:48 shachaf: at least. 20:31:24 int-e: What's the issue? 20:31:55 `le rn foo 20:31:57 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory 20:31:59 `mkx bin/le//echo le 20:32:03 bin/le 20:32:03 `le rn foo 20:32:04 le 20:32:10 `rm bin/le 20:32:12 No output. 20:32:23 `le/rn 20:32:24 No output. 20:32:42 okay, I'm confused. Why did we have bin/le/ ? 20:33:03 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:22 int-e: We did? 20:33:42 `` echo $PATH 20:33:43 ​/hackenv/bin:/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin 20:33:46 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 oerjan: `learn did work as I expected. 20:34:29 Unfortunately my expectations didn't match what I wanted to do. 20:34:55 the keyword putting first is awkward sometimes 20:35:15 int-e: When you run le/rn, it runs ./le/rn, not bin/le/rn 20:35:33 `le 20:35:34 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: le: cannot execute: Is a directory 20:35:44 I think I'm confused about this behavior 20:35:46 `` le 20:35:47 bash: le: command not found 20:36:03 `` ls -l le/ 20:36:04 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 int-e: i think i'm too 20:36:29 but that's becuase ` and the shell (``) seem to look for the command to execute in different ways 20:36:41 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 Ah, I see what you're confused about. 20:38:10 -!- heroux has quit (Ping timeout: 240 seconds). 20:38:14 `canary 20:38:14 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: canary: not found 20:38:21 `` chmod +x canary 20:38:23 No output. 20:38:24 `canary 20:38:25 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: canary: not found 20:38:40 int-e: i'm still confused. 20:38:45 `` ls -l canary 20:38:46 ​-rwxr-xr-x 1 5000 0 10 Feb 14 20:38 canary 20:38:57 `wisdom 20:38:58 twhib/the world holds its breath 20:39:04 `` find -type d -name le 20:39:08 `tmflry 20:39:29 dammit did you have to search all of it 20:39:34 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: tmflry: cannot execute: Is a directory 20:39:36 No output. 20:39:57 int-e: it genuinely seems to look for directories but not files in . 20:40:10 weird 20:40:25 `` tmflry 20:40:26 bash: tmflry: command not found 20:42:37 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 portaudio? isn't that some super old thing? 20:53:22 Hm I guess not 20:53:35 -!- heroux has quit (Ping timeout: 264 seconds). 20:54:12 -!- jaboja has quit (Ping timeout: 272 seconds). 20:54:22 ais523: wrt the lambdabot message you left 3 days ago (call stack language), ah okay 20:54:49 in fact, this is pretty much the only way I've ever seen a language become /accidentally/ a PDA 20:54:57 (I've seen other ways to make PDAs but they're typically intentional) 20:56:08 ais523: what does PDA stand for? 20:56:14 -!- jaboja has joined. 20:56:18 push-down automaton 20:56:54 ah, what sort of language would become a PDA by accident? Intended regular language or what? 20:57:34 basically anything whose only source of infinite memory is the call stack 20:57:47 either directly in terms of what functions were called, or indirectly in terms of C-auto-style variables 20:57:59 ah 20:58:21 ais523: I don't get the context. what is the way a language accidentally became a PDA? 20:58:35 b_jonas: see http://esolangs.org/wiki/Splinter for a concrete esolang example 20:58:44 it was intended as an FSM 20:59:23 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 20:59:49 oh, hmm, good point 20:59:54 stack-based langauges 21:00:04 befunge-93 is a PDA I think, not via means of a call stack, but via means of its data stack 21:00:47 hm probably 21:01:33 ais523: how many stacks do you need to be more than PDA? Is 2 enough? 21:01:40 2 is enough for TC, yes 21:01:46 Hm 21:01:53 Isn't Piet one of those languages that have one data stack and no call stack? 21:02:07 Only it counts as Turing-complete due to bigints allowed? 21:02:08 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 Ah no... 21:02:19 fwiw, this is the reason why Underload can be Turing-complete without * and a 21:02:29 Piet can access the data stack arbitrarily deep 21:02:47 then it has a RAM (not a very convenient one though) even without bignums 21:02:51 ok 21:02:55 (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 (it still needs bigints for arbitrarily large ram, but no exponentially large numbers) 21:03:12 sorry 21:03:13 (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 ais523: yep, I've implemented a tape with two stacks that way, only I used multiple tapes, not only one 21:04:23 ais523: what about a pure call stack (just calls on it) and one data stack? That is still TC then? 21:04:28 well once you have one tape (and sensible control structures) you can do anything, as BF famously shows 21:04:44 Vorpal: yes, in terms of data 21:05:00 ais523: but not in terms of what? 21:05:05 (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:13 right 21:05:21 right, it needs good control structures so you can actually use the call stack properly 21:05:30 obviously 21:05:33 well, not necessarily "good", just sufficient 21:06:02 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 hmm, what extra powers do you need to add to call/cc to make a TC language? 21:06:11 subtle cough is sub-TC but it can't be far off 21:06:32 subtle cough is a language name? 21:06:35 Awesome one 21:06:47 yes, turns out it's pretty low-powered though 21:06:55 IIRC it only has three essentially different programs 21:07:46 ouch 21:08:17 <\oren\> `u8tbl 0x1d504 0x1d51d 21:08:19 Segmentation fault 21:08:28 <\oren\> AUGH 21:08:35 what does u8tbl do? 21:08:44 Apart from crashing 21:08:44 <\oren\> `u8tbl 0x1D504 0x1D51D 21:08:45 Segmentation fault 21:08:53 `u8tbl --help 21:08:53 Segmentation fault 21:08:56 `u8tbl 21:08:56 Segmentation fault 21:08:58 <\oren\> `u8tbl 0x100 0x200 21:08:59 Segmentation fault 21:09:00 seems broken 21:09:07 <\oren\> `` u8tbl 0x1D504 0x1D51D 21:09:08 ​𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏 \ 𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜𝔝 21:09:20 `u8tbl 0 1 21:09:21 Segmentation fault 21:09:22 <\oren\> oh, you can't call it with ` 21:09:37 \oren\: oh? why? and what does `` do? 21:09:42 u8tbl 0 1 21:09:46 <\oren\> `` u8tbl 0x40 0x80 21:09:48 ​@ABCDEFGHIJKLMNO \ PQRSTUVWXYZ[\]^_ \ `abcdefghijklmno \ pqrstuvwxyz{|}~ \ 21:09:58 well, that is just mojabake 21:10:07 `file bin/u8tbl 21:10:07 <\oren\> `` u8tbl 0x40 0x50 21:10:09 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:09 ​@ABCDEFGHIJKLMNO \ P 21:10:11 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 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 \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:00 <\oren\> `` u8tbl 0x60 0x70 21:11:01 ​`abcdefghijklmno \ p 21:11:01 ais523: any progress on feather btw? 21:11:07 I expect the answer to be no? 21:11:16 Vorpal: indeed 21:11:23 feather? is that the project we don't talk about? 21:11:31 <\oren\> `` u8tbl 060 070 21:11:32 012345678 21:11:39 <\oren\> yes it does 21:11:43 b_jonas: there is obviously no such thing as feather, what are you talking about 21:12:13 `` u8tbl 5 4 21:12:14 No output. 21:12:18 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 Some of them are secret, some I do talk about. 21:12:38 <\oren\> `` u8tbl 4 5 21:12:39 ​ 21:12:46 Many will probably never materialize. 21:12:52 s/Many/Most/ 21:13:16 b_jonas: don't forget elliott's OS 21:13:20 whatever that was called 21:13:21 <\oren\> `` u8tbl 0x100 0x110 21:13:22 ​ĀāĂ㥹ĆćĈĉĊċČčĎď \ Đ 21:13:40 <\oren\> looks right to me 21:13:58 <\oren\> `` u8tbl 0x1D504 0x1D51D 21:13:59 ​𝔄𝔅𝔆𝔇𝔈𝔉𝔊𝔋𝔌𝔍𝔎𝔏 \ 𝔐𝔑𝔒𝔓𝔔𝔕𝔖𝔗𝔘𝔙𝔚𝔛𝔜𝔝 21:14:07 Vorpal: obviously I'd be interested to see ais523's version control system 21:14:23 so would I! 21:14:31 heh 21:14:41 ais523: well what is unique with scapegoat? 21:14:45 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 to contain the true name of the OS 21:14:59 what 21:15:11 couldn't you give a better development codename? 21:15:15 ah, right 21:15:22 b_jonas: wasn't my idea! 21:15:22 with the understanding that it would get a marketing name later? 21:16:16 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 ais523: what is the catch? 21:16:37 it hasn't been written yet 21:16:46 ais523: and will it be very hard to write? 21:16:51 nor does it exist in any sort of non-vaporware sense 21:16:56 compared to something like git? 21:16:59 and yes, it isn't easy to write either 21:17:09 oerjan: that's not very nice :( 21:17:11 mostly due to design issues 21:17:22 I don't think it'd be substantially harder to write than git or darcs once the design is complete 21:17:23 ais523: I assume neither git nor darcs was easy to write, but this is probably 100 times worse? 21:17:29 oh okay 21:17:39 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 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 ais523: anything wrong with "changeset"? 21:18:57 also it isn't just my VCS, although I did most of the planning, the rest of #esoteric helped too 21:19:20 Vorpal: well you can derive the entire current state of the project (recursively) from one turtle 21:19:23 you can't do that with one changeset 21:19:29 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:30 ah okay 21:19:52 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 ais523: wait, wasn't the basic unit a blame? 21:20:49 ais523: um, how is a tree of files derived from a turtle when you checkout, if such a thing exists? 21:21:39 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 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 b_jonas: so the version control system is basically blame-based; it uses this information to do merges correctly, for example 21:22:53 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:07 Vorpal: nomic 21:23:13 ah, right 21:23:33 `? nomic 21:23:34 nomic? ¯\(°​_o)/¯ 21:23:35 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 int-e: http://en.wikipedia.org/wiki/Special:Search?go=Go&search=Nomic 21:23:47 Another alternative for Git and so on is Fossil; did you examine that one? 21:24:00 ais523: I was curious whether we had a wisdom about it :P 21:24:28 it seemed like something that should exist 21:24:35 now I'm disappointed 21:24:41 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:04 `? callforjudgement 21:25:05 callforjudgement? ¯\(°​_o)/¯ 21:25:08 `? callforjudgment 21:25:09 callforjudgment? ¯\(°​_o)/¯ 21:25:15 b_jonas: first spelling was correct 21:25:48 `? wrathofgod 21:25:49 wrathofgod? ¯\(°​_o)/¯ 21:25:54 `? wrath of god 21:25:55 wrath of god? ¯\(°​_o)/¯ 21:25:57 `? day of judgment 21:25:58 day of judgment? ¯\(°​_o)/¯ 21:25:59 `? day of judgement 21:26:00 day of judgement? ¯\(°​_o)/¯ 21:26:04 `? day of jugement 21:26:06 day of jugement? ¯\(°​_o)/¯ 21:26:06 `? day of jugment 21:26:07 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 (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 b_jonas: what are you talking about 21:31:47 Vorpal: M:tG 21:31:52 ah 21:32:47 b_jonas: Day of Judgment isn't a more modern templating, it's an intentionally different functionality 21:32:49 ais523: what is yosys? 21:32:49 doesn't bypass regenerators 21:33:00 Vorpal: open-source Verilog synthesizer, apparently 21:33:04 ah 21:33:29 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 now I'm planning to try it out 21:33:41 ah 21:34:01 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 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 (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:49 ais523: ouch 21:34:55 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 (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 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 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 if hexproof didn't exist then auras could be made much better without issues 21:36:29 Vorpal: well suppose your bitstream connects the power rails together, the chip may well burn out 21:36:40 I don't know if it's possible to configure an FPGA like that or not 21:36:44 ah 21:36:46 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 Some of my own custom cards use shroud instead of hexproof, because no player is supposed to target it 21:37:08 which FPGA does this target? 21:37:15 b_jonas: very few board wipers destroy all permanents, because Wizards hates land distruction 21:37:20 *destruction 21:37:22 -!- atrapado has quit (Quit: Leaving). 21:37:46 Vorpal: Lattice iCE40, apparently 21:37:54 never heard of that brand 21:37:57 is it any good? 21:37:58 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 Hmm, does spot removal like Befoul exist after Kamigawa, which is when Befoul was last printed? 21:39:27 what does Befoul do? 21:39:49 for 2BB, sorcery, destroy target land or nonblack creature, no-regen 21:39:59 -!- oren has joined. 21:40:12 it really showcases what black can do 21:40:18 and what black can't do 21:40:42 b_jonas: Wrecking Ball (destroy target land or creature for 2RB) was printed in the original Ravnica block, possibly again later 21:40:43 black can discard your cards or destroy your creatures or lands, but not touch your non-land non-creature permanents 21:40:57 ah yes! nice 21:40:57 hmm 21:41:02 the "nonblack" restriction on removal is very rare nowadays though 21:41:07 yep 21:41:14 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 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 and fear and landwalk and intimidate are gone too, so are most color hosers that explicitly mention a color 21:41:51 um, they never were good 21:41:55 at least the lower mana cost ones 21:42:06 black has always had the worst creatures among all five colors 21:42:09 worse even than blue 21:42:30 hmm, which is the other black-red destroyer instant? 21:43:43 the best creature in the game to cheat out is black 21:43:50 (i.e. if you don't care about the mana cost) 21:44:47 ah yes, Terminate 21:45:21 ais523: that might be true. which creature is that? 21:45:41 Griselbrand 21:45:50 mostly for the "Pay 7 life: Draw 7 cards" ability 21:45:53 but they don't print easy ways to cheat out cards since they printed the huge Eldrazi 21:45:58 this makes it almost impossible to lose once it's in play 21:46:13 (also, it's /newer/ than Rise of the Eldrazi: it comes from Avacyn Restored) 21:46:27 ais523: sure, they still print big creatures 21:46:28 (although the most recent huge Eldrazi came from Oath of the Gatewatch, the most recent set) 21:46:31 they don't print easy reanimation 21:46:36 ah right 21:46:39 indeed 21:46:52 doesn't mean that creature-cheating doesn't exist in Modern 21:46:55 sure 21:47:00 Zombify isn't just gone 21:47:02 (it exists in Standard too but costs CMC 6) 21:47:07 and Zombify isn't even good as creature cheaters go 21:47:10 it's just vanilla 21:47:52 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:26 in which format? 21:48:38 dunno 21:48:44 maybe that's just my impression 21:48:47 I'm guessing Modern, because in Legacy you can get well over 40% on turn 1 I think (Reanimator) 21:49:03 and in Modern, you can manage it on turn 2 but I think most decks would be aiming for turn 3 21:49:04 the casual reanimator I played against was mostly modern, but probably not exclusively I think 21:49:15 it might have aimed to turn 3 21:49:43 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 (unless they can do it before the opponent has any ability to disrupt it /and/ it wins outright) 21:50:09 decks like ANT in Legacy can combo quickly but prefer to combo slowly 21:50:17 so that they can fight through more disruption 21:50:22 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 (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 hmm… Humanimator was a deck in Innistrad/Return to Ravnica standard 21:51:13 and there were decks based around Whip of Erebos while Theros was in standard 21:51:15 but in modern, you can no longer just sell your soul to Leshrac to get mana for free 21:51:19 I think those are the most recent viable Standard reanimator decks 21:52:26 -!- ais523 has quit. 21:58:14 I also added ⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚ₐₑₒₓₔₕₖₗₘₙₚₛₜ⛄⛅⛇⛈ꝖꝗꝘꝙꝚꝛꝜꝝꝞꝟꝠꝡꝢꝣꝤꝥꝦꝧ 21:58:48 oren: where are your backslashes? 21:59:11 whoops, irssi crashed and I forgot to readd them 21:59:19 -!- oren has changed nick to \oren\. 22:00:03 \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 \oren\: uh, something seems off with the width or horizontal offset of the fraktur uppercase letters, somewhere near U 22:01:30 at least as rendered here 22:01:52 (I always find fraktur hard to read, because I'm not used to it) 22:02:34 \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:00 I see 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 \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 \oren\: strange... wouldn't that mean way more kanji than you have? 22:04:35 can you really have grades up to 6 in this few? 22:04:37 hmm 22:04:52 <\oren\> i have 1385 kanji total 22:05:11 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:05:31 good work in that case 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 \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:20 sure 22:08:33 <\oren\> the cursive letters are currently in the wrong place 22:08:44 <\oren\> encodingowise I mean 22:08:57 what's the status of hangul support? 22:09:08 <\oren\> still having software problems 22:09:14 I see 22:10:33 What's your ranking in that list of fonts ordered by the number of characters that you used to care about? 22:12:07 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 \oren\: well, it looks here as if the T was shifted to the right like half a character cell 22:15:42 so it overlaps the U 22:15:53 the fraktur ones I mean 22:26:55 -!- AnotherTest has quit (Quit: ZNC - http://znc.in). 22:32:53 -!- heroux has joined. 22:44:34 fungot, can you read fraktur? 22:44:34 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:41 `wisdom 22:44:43 `? fraktur 22:44:50 fraktur? ¯\(°​_o)/¯ 22:44:53 zombiecheney/ZombieCheney lives under a bridge. 22:44:54 `ls wisdom/tr* 22:44:56 ls: cannot access wisdom/tr*: No such file or directory 22:45:02 ``` ls wisdom/tr* 22:45:03 wisdom/transformer \ wisdom/translater \ wisdom/treant \ wisdom/treaty \ wisdom/treefolk \ wisdom/trick \ wisdom/trisecting the angle 22:45:10 ```` ls wisdom/tr* 22:45:11 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: ```: not found 22:45:16 `` type '``' 22:45:17 ​`` is /hackenv/bin/`` 22:45:28 huh, didn't I create a bin/"```" ? 22:45:44 ``` cat bin/"``" 22:45:45 cat: bin/: Is a directory 22:45:51 wrong quotes 22:45:53 ``` cat bin/'``' 22:45:53 yeah 22:45:54 ​#!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@" 22:46:06 and I only redefined bin/'``' 22:46:10 easier 22:46:15 why that LANG=C thing? 22:46:25 `` locale 22:46:26 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:46 that doesn't explain it 22:46:50 izabera: wrong collation by default, so eg. [a-z] will match the wrong thing in shell wildcard expansion 22:46:51 `` cat bin/\` 22:46:52 TIMEFORMAT='real: %lR, user: %lU, sys: %lS' exec bash -c -- "$1" 22:46:57 I put in LANG=C so that it would use the correct locale. 22:47:07 (It is the only good one in my opinion) 22:47:20 yep 22:47:28 almsot 22:47:30 is [a-z] the only problem? 22:47:34 izabera: no 22:47:43 ls sorts wrong 22:47:45 and other stuff 22:47:55 we here know the ascii table and expect asciibetical sort 22:47:57 and there's more 22:48:14 the [a-z] is just the most obvious 22:48:26 that [a-z] matches T is horrible 22:49:10 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:47 you want LC_COLLATE=C 22:49:59 anyway, I added the extglob part to bin/\`\` 22:50:29 you don't really need a new shell for that, do you? 22:50:38 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 izabera: a new shell for what? 22:50:51 `` cat bin/\` 22:50:52 TIMEFORMAT='real: %lR, user: %lU, sys: %lS' exec bash -c -- "$1" 22:50:54 `` cat bin/\`\` 22:50:55 ​#!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@" 22:51:12 izabera: do you mean a new command in bin? 22:51:22 `` type bash 22:51:23 bash is /bin/bash 22:51:25 izabera: we didn't want to modify the single backtick, for backwards compatibility 22:51:42 it was such a basic command, people could be depending on the broken locale 22:51:49 which is why someone added the double backtick 22:52:18 ``` cat bin/run 22:52:18 echo run run run 22:52:19 `` printf '#!/bin/bash\nTIMEFORMAT="real: %%lR, user: %%lU, sys: %%lS"\neval -- "$1"\n' > bin/\` 22:52:22 No output. 22:52:26 fuck 22:52:48 `` echo $BASH_VERSION 22:52:49 huh? what are you doing? 22:52:49 4.2.37(1)-release 22:53:01 `` shopt globasciiranges 22:53:01 oh 22:53:01 ​/hackenv/bin/`: line 3: shopt: globasciiranges: invalid shell option name 22:53:05 eval instead of exec bash? 22:53:21 `` printf '#!/bin/bash\nTIMEFORMAT="real: %%lR, user: %%lU, sys: %%lS"\nshopt -s extglob globstar\neval -- "$1"\n' > bin/\` 22:53:23 ​/hackenv/bin/`: line 4: lob: command not found 22:53:30 wat 22:53:36 did i break something? 22:53:39 I think bash -c is safer, just in case they get somehow shelled with sh instead of bash despite the shebang 22:53:57 `` cat -v bin/\` 22:53:58 ​#!/bin/bash \ TIMEFORMAT="real: %lR, user: %lU, sys: %lS" \ shopt -s extglob globstar \ eval -- "$1" 22:54:12 what the heck 22:54:19 don't change backtick to set extglob 22:54:28 it's not COMPLETELY backwards compatible 22:54:32 just almost 22:54:35 it is 22:54:45 there are some crazy contexts where the extglob had a meaning before 22:54:53 a different meaning 22:54:58 that's not true 22:55:25 I think it is 22:55:33 they're very rare and no sane user is typing such things 22:55:36 but we're on #esoteric 22:55:39 no 22:55:44 this isn't true 22:56:02 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 bash 4+ enables extglob in pattern matching even if it's disabled in the shell 22:57:07 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 hist expansion is only in interactive shells 22:57:38 yeah, I guess that's true 22:57:44 but redirects or something 22:57:46 or variable stuff 22:57:47 dunno 22:58:09 ah, globstar enables zsh-like double star? 22:58:10 wow 22:58:12 I didn't know 22:58:40 don't you say anything against that? 22:58:46 that's obviously not backwards compatible 22:59:01 I didn't know what it meant 22:59:09 anyway 22:59:15 does single backtick work now? 22:59:18 ` echo hello world 22:59:19 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: : not found 22:59:23 `` echo hello world 22:59:24 hello world 22:59:32 `` ​ 0 0 0 22:59:36 seems to 22:59:37 good 22:59:48 huh? 22:59:58 -!- jaboja has quit (Ping timeout: 250 seconds). 22:59:58 the error is good? 23:00:04 what error? 23:00:11 myname: no, I mean bin/\` 23:00:26 yeah... it's confusing 23:01:02 * izabera found two cases in which extglobs mean something else if extglob is disabled... 23:01:04 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 @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:01:20 Consider it noted. 23:03:03 `` bash -c 'var="!(x)"; case y in $var) echo extglob is on ;; *) echo extglob is off ; esac' 23:03:04 extglob is off 23:03:09 `` bash -O extglob -c 'var="!(x)"; case y in $var) echo extglob is on ;; *) echo extglob is off ; esac' 23:03:11 extglob is on 23:03:42 ah, I see 23:03:47 huh 23:04:00 how is the contents of $var even interpreted as a pattern 23:04:06 shouldn't it be literal? 23:04:07 strange 23:04:08 no 23:04:09 bash is strange 23:04:22 oh well 23:04:31 it's strange that in [[ ]] extglob is always enabled but it isn't in case 23:04:40 -!- jaboja has joined. 23:04:51 `` bash -c '+()(:)' 23:04:52 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:04:57 ah crap 23:05:01 `` bash -c '*()(:)' 23:05:02 No output. 23:05:07 `` bash -O extglob -c '*()(:)' 23:05:08 bash: -c: line 0: syntax error near unexpected token `:' \ bash: -c: line 0: `*()(:)' 23:05:10 :\ 23:05:26 ``` bash -c ' +(){:;}' 23:05:27 bash: -c: line 0: syntax error near unexpected token `{:' \ bash: -c: line 0: ` +(){:;}' 23:05:37 need a space after { 23:05:40 ``` bash -c ' +(){ :;}' 23:05:41 No output. 23:05:45 ``` bash -c ' +(){ :;}; +' 23:05:46 No output. 23:06:17 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 yes 23:06:25 the line is parsed before the shopt executes 23:06:31 so I need it early 23:06:55 i don't think anyone will notice any difference if extglob is always on 23:06:58 a newline would be enough, but you can't put one in an irc line 23:07:02 ok 23:07:21 but they will if they expect ** to be * 23:07:24 >:o 23:07:33 you should fight for that 23:07:43 that's definitely against posix 23:08:08 so is the brace expansion, isn't it? 23:08:21 correct 23:08:42 well, if you want posix, you can always sh -c 23:08:46 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 or, um, POSIXLY_CORRECT=1 sh -c 23:09:13 zzo38: I never heared of that thing 23:09:30 what the heck is that? is it something python? 23:09:38 b_jonas: No, it is JavaScript 23:09:45 ah 23:09:51 you want nodepython 23:10:50 it's getting late, good night, #esoteric 23:20:55 -!- deltab has quit (Ping timeout: 260 seconds). 23:24:02 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.