00:00:03 -!- joast has quit (*.net *.split).
00:00:04 -!- Corbin has quit (*.net *.split).
00:00:04 -!- Noisytoot has quit (*.net *.split).
00:02:12 -!- Corbin has joined.
00:03:01 -!- joast has joined.
00:03:40 -!- Noisytoot has joined.
00:18:09 -!- Pyautogui has joined.
00:20:40 -!- Corbin has quit (Ping timeout: 240 seconds).
00:22:25 -!- arseniiv has quit (Ping timeout: 252 seconds).
00:53:27 -!- Pyautogui has quit (Ping timeout: 245 seconds).
00:56:20 -!- Pyautogui has joined.
00:58:53 -!- Pyautogui has left.
01:14:20 -!- Everything has joined.
01:14:21 -!- earendel has quit (Quit: Connection closed for inactivity).
01:33:06 -!- oerjan has joined.
02:12:27 -!- chiselfuse has joined.
02:12:41 -!- chiselfuse has quit (Client Quit).
02:19:06 -!- chiselfuse has joined.
02:49:05 -!- sebbu has quit (Ping timeout: 250 seconds).
02:54:15 -!- sebbu has joined.
03:01:53 -!- earendel has joined.
03:20:54 -!- orichalcumcosmon has joined.
03:22:02 -!- chiselfuse has quit (Quit: leaving).
03:24:17 -!- orichalcumcosmon has quit (Client Quit).
03:26:08 -!- orichalcumcosmon has joined.
03:35:12 -!- chiselfuse has joined.
04:42:13 -!- chiselfuse has quit (Remote host closed the connection).
05:25:28 -!- Corbin has joined.
05:39:10 -!- orichalcumcosmon has quit (Quit: Leaving).
05:41:06 -!- hendursaga has quit (Ping timeout: 276 seconds).
05:43:54 -!- hendursaga has joined.
06:19:54 <zzo38> Specifically, the CFB, OFB, and CTR modes do not require the block cipher to be able to decrypt anything. I think ChaCha20 is like CTR mode, anyways. Maybe any mode could also be combined with XEX mode, too.
06:21:00 <keegan> ChaCha20 is a stream cipher, not a block cipher
06:21:10 <keegan> and CTR mode is a construction for turning a block cipher into a stream cipher
06:23:02 <keegan> I think you are right that you could use something like hash(key ++ counter) in place of encrypt(key, counter) in a CTR construction
06:23:38 <keegan> but i'd have to think about the formal guarantees of such a construction
06:25:11 <keegan> whether it's actually secure given the usual assumptions of a cryptographic hash function
06:26:24 <keegan> it's easy to come up with (contrived) examples of hashes which are resistant to collision and pre-image attacks and yet do not produce a secure stream cipher this way
06:26:46 <keegan> for example pad the output of a standard cryptographic hash with zeroes
06:27:34 <keegan> however a lot of the time cryptographic systems are proven secure within the "random oracle model", where hashes are replaced with an idealized randomly-chosen mapping from the input space to the output space
06:27:46 <keegan> and that should suffice for a stream cipher, i think
06:35:37 <zzo38> Although they call ChaCha20 a stream cipher, it looks to me like a block cipher with CTR mode.
06:36:16 <nakilon> TIL: computers have mastered Gomoku in 2017 https://en.wikipedia.org/wiki/Gomoku#Computers_and_Gomoku
06:39:21 <keegan> I once looked into Salsa20/ChaCha as an example of a modern secure cipher that might be feasible (if annoying) to work by hand
06:39:30 <keegan> it's fairly simple as these things go
06:40:03 <nakilon> https://en.wikipedia.org/wiki/Computer_Olympiad
06:49:11 <zzo38> Yes, it will still be slow to work by hand for long messages, but it is still possible, I think
07:26:25 <zzo38> Why don't you like Free Hero Mesh? (It is similar to some (not all) of the kind of puzzle games sometimes mentioned by other people on here, and can also be considered as a alternative of Xsok and PuzzleScript (some of the features of Free Hero Mesh were designed to be similar to some of the features of those other programs, too).) Currently nobody else is on the Free Hero Mesh. If there is other IRC to suggest to try, you can suggest t
07:32:41 <zzo38> I suppose that the reversible ChaCha20 could be used (with key whitening) with other block cipher modes too, although I don't know if it is secure.
08:06:48 -!- hendursa1 has joined.
08:10:36 -!- hendursaga has quit (Ping timeout: 276 seconds).
08:22:51 -!- Koen_ has joined.
08:27:17 -!- Sgeo has quit (Read error: Connection reset by peer).
08:45:18 -!- imode has quit (Ping timeout: 256 seconds).
09:19:30 -!- earendel has quit (Quit: Connection closed for inactivity).
09:35:10 <b_jonas> nakilon: in the autumn at least, sure
09:37:36 <b_jonas> and even if there's no rain for a week, the week long forecast isn't so confident in it
09:43:36 -!- tech_exorcist has joined.
09:50:43 -!- Melvar has quit (Ping timeout: 250 seconds).
09:55:22 -!- Melvar has joined.
09:57:36 -!- Melvar` has joined.
09:59:42 -!- Melvar has quit (Ping timeout: 245 seconds).
10:02:44 -!- Melvar` has quit (Ping timeout: 252 seconds).
10:13:32 -!- tech_exorcist has quit (Remote host closed the connection).
10:14:09 -!- tech_exorcist has joined.
10:15:48 -!- Melvar` has joined.
10:33:57 -!- Everything has quit (Quit: leaving).
11:56:26 -!- earendel has joined.
12:15:15 -!- chiselfuse has joined.
12:48:35 -!- Koen_ has quit (Remote host closed the connection).
12:51:08 -!- V has joined.
13:02:37 <int-e> `learn The password of the month is Waiwhakaiho
13:02:40 <HackEso> Relearned 'password': The password of the month is Waiwhakaiho
13:04:28 <oerjan> i distinctly recall having thought of a password well in advance, then forgotten about it,
13:05:00 <oerjan> (and of course i distinctly don't recall what it was.)
13:05:11 <int-e> There'll be another month.
13:07:09 <int-e> oerjan: That anecdote is proving a point made previously: The password of the month is most forgettable.
13:07:38 <int-e> (This is a problem. I really like these kind of descriptions, but it's hard to come up with new ones.)
13:08:24 <oerjan> at least this month's is mysterious.
13:15:23 -!- Koen_ has joined.
13:17:25 -!- arseniiv has joined.
13:28:05 -!- hendursa1 has quit (Quit: hendursa1).
13:28:47 -!- hendursaga has joined.
13:47:01 -!- oerjan has quit (Quit: Nite).
14:13:15 -!- Koen_ has quit (Remote host closed the connection).
14:13:37 <fizzie> I had a pending password of the month too, maybe around May, and I remembered it for a while, but by now I've forgotten it.
14:15:55 -!- Trieste has quit (Ping timeout: 250 seconds).
14:59:33 -!- chiselfuse has quit (Remote host closed the connection).
15:00:17 -!- zegalch has quit (Remote host closed the connection).
15:00:42 -!- zegalch has joined.
15:02:59 -!- riv has quit (Quit: Leaving).
15:03:39 -!- chiselfuse has joined.
15:04:06 -!- chiselfuse has quit (Remote host closed the connection).
15:53:54 -!- earendel has quit (Quit: Connection closed for inactivity).
16:04:51 <HackEso> The password of the month is Waiwhakaiho
16:19:30 -!- spruit11_ has joined.
16:22:27 -!- spruit11 has quit (Ping timeout: 250 seconds).
16:51:13 -!- Melvar` has changed nick to Melvar.
16:51:28 <Melvar> I have a number type here where (0.1 + 0.1) - 0.2 is 0.00390625 . I wonder how quickly someone will guess what number format this is.
16:53:19 <int-e> > log(0.00390625)/log(2)
16:54:18 -!- chiselfuse has joined.
17:00:53 -!- imode has joined.
17:06:52 <int-e> Melvar: overly specific link: https://gitlab.freedesktop.org/cairo/cairo/-/blob/master/src/cairo-fixed-type-private.h#L62
17:08:47 <int-e> (And no, I didn't take 15 minutes to think of a format, I just decided to act on the impulse to check whether cairo is still doing that
17:10:12 <int-e> (I thought it uses double instead these days, but that code is still there. So I don't know.)
17:14:54 <Melvar> While you are correct that it is a 24.8 fixed point number, the reason I have it is that the Wayland protocol includes these.
17:17:43 <int-e> does wayland use pixman in any shape or fashion?
17:19:14 <Melvar> Supposedly wayland is a protocol, even though everyone’s *supposed* to just use the one implementation. But I don’t know if that one implementation uses pixman.
17:21:22 <int-e> it's probably irrelevant anyway... it should be using 16.16 fixed point (48.16 on 64 bit platforms)
17:21:24 <Melvar> (One implementation *for the protocol-speaking itself*, that is. Of course, I wrote my own anyway because I felt like it, that’s why the number discussion of the past couple of days had me bring this up.)
17:22:04 <int-e> As did cairo, initially... but people ran into problems with large geometries and they decided to compromise on 24.8 instead.
17:22:06 <Melvar> All the things in the wayland protocol are 32-bit words in host byte order, except byte arrays.
17:24:36 <int-e> But the reason I was asking was that IIRC, pixman is somewhat present in the X11 protocol's Render extension, so it might have crept into wayland that way. https://github.com/D-Programming-Deimos/libX11/blob/master/c/X11/extensions/Xrender.h#L129-L130 (And yes, there's some confusion about cause and effect here :-) )
17:24:53 <int-e> ...D-Programming-Deimos... search engines are so random
17:25:11 <Melvar> This is especially fun because one part of the message metadata is a 32-bit word with the message length in the high half and the opcode in the low half, but you can’t (at least not fully portably in principle) read this as two 16-bit words because the order of the 16-bit words switches between little-endian and big-endian systems.
17:26:46 <int-e> these days... leave it up to the compiler to figure that out
17:27:16 -!- Sgeo has joined.
17:27:42 <Melvar> Wayland’s thing is not actually having anything about client rendering in it, except for “how do you make the right kind of buffer” because in-GPU-memory buffers obviously need to be set up by different mechanisms than in-main-memory buffers.
17:28:55 <int-e> Melvar: then why do they have subpixel coordinates at all?
17:30:06 <int-e> Oh, I'm making an assumption there.
17:30:38 <Melvar> Because you may render your content at a higher resolution if wayland tells you it’s being shown on a hidpi display, it seems, mainly.
17:33:28 -!- riv has joined.
17:33:32 <Melvar> In the core protocol, it seems that mouse, touch, and scroll events use these fixnums for their coordinates, plus for the shape properties of touch points if those are supported by your input device.
17:34:43 -!- spruit11_ has quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.).
17:34:59 -!- spruit11 has joined.
17:35:14 -!- fractal42 has joined.
17:36:46 <Melvar> So the mouse/pointer can probably only be at locations corresponding to real pixels, but with the scaling you can have multiple real pixels per unit of surface coordinates.
17:39:31 <int-e> Hmm. I guess that makes sense.
17:39:48 <Melvar> The scaling stuff is such that the default is just that the compositor scales up your pixel data itself if you don’t say you’re rendering at the increased resolution it told you about.
17:40:49 * int-e is living a compositer-free life :P
17:40:58 <Melvar> Like, it tells you about the scale of any output you’re being shown on, and you tell it about the scale you’re rendering at (default 1), and the compositor has to make up the difference.
17:41:13 <int-e> which I guess is borderline insane these days
17:42:04 <Melvar> I’m not actually using wayland either because there’s still not a functional WayMonad yet.
17:44:37 <fizzie> Our interweb at home went down yesterday.
17:44:56 <fizzie> I even said out loud "hmm, fungot has probably dropped off", but then did nothing about it.
17:44:59 <Melvar> And an actual XMonad developer noted that having garbage collection in the rendering path is a problem, so a new protocol to replicate the X setup of window manager as a separate process may need to be invented before a WayMonad becomes really usable.
17:45:34 -!- fungot has joined.
17:46:36 <Melvar> Good thing the wayland protocol is pretty extensible.
17:49:14 <fizzie> I imagine pen input can have subpixel accuracy even in terms of physical pixels. At least I remember pen displays quoting ridiculous numbers for that.
17:53:21 -!- fractal42 has left.
17:53:31 <fizzie> Wacom's almost-entry-level Cintiq 16 (I've been thinking about getting one, purely because I have an inexplicable attraction for things with pens) has a ~142dpi 1920x1080 display, but a "5080 lpi" "pen resolution".
17:53:33 <fizzie> Though I feel like that's the same sort of number as printer resolutions.
17:54:44 <b_jonas> I have certainly thought of passwords, including "DVD demagnetizer", but I don't find it important enough to set them, and it would feel dirty to automatically set them, and it's not clear where the ethics boundary is between running a script that automatically grabs the password at midnight (which timezone?) and just setting up a calendar reminder to grab the password, so I just don't do anything.
17:58:29 <shachaf> If I want a tablety thing I can draw on, which also has a screen so I can look at it while I'm drawing, what's the best option?
17:58:51 <shachaf> I mean for things like interactive online things where other people can see it.
18:00:11 <fizzie> Should it be a self-contained computing device, or just a peripheral to an existing computer?
18:01:25 <fizzie> I've been informed that the iPad Pro + Apple Pencil combination is up there, I've just personally ruled that out for software-related reasons.
18:03:01 <shachaf> My vague impression was that the iPad Pro Pencil thing was very good.
18:03:26 <shachaf> But I'm similarly not that into using an Apple thing.
18:05:03 <fizzie> There's also the Surface Pro and the Surface Pen, which I think wasn't bad either, but I've *also* ruled that out for software reasons.
18:05:13 <fizzie> HP's just introduced a "Chromebook x2 11" that supports the USI stylus standard, I've been hoping someone would review it for that sort of a use case.
18:07:48 <int-e> Hmm, peripherals. Apparently there's non-Wacom stuff in this area which is not completely unaffordable. https://www.amazon.com/dp/B07SR4615F/
18:07:54 <fizzie> And PINE64 recently announced they're going to produce an e-ink thing called a PineNote that's something along the lines of the Remarkable, but that's quite a different thing, what with having a monochrome and inherently-slow-refresh-rate e-ink screen.
18:08:11 <fizzie> I don't think the Wacom stuff qualifies as "completely unaffordable" any more.
18:08:23 <fizzie> It used to be a thing that Cintiq displays cost a whole lot of money, but now those really expensive ones have been rebranded "Cintiq Pro" and they've added two reasonably priced "basic" models, plus the Wacom One.
18:10:16 <fizzie> (The 16" Cintiq 16 costs $649.95, and the 13" Wacom One costs $399.95, in terms of the Wacom store list prices.)
18:10:54 <int-e> cintiq pro seems to start at $2k on Amazon
18:11:32 <b_jonas> shachaf: hmm, my coworker recommended something that they were taking notes on, but becuse I don't want one, I don't remember what it was
18:11:37 <b_jonas> plus it was partly software recommendation
18:18:36 <int-e> wth is Windows S-mode... oh... full vendor lockin mode.
18:24:38 <fizzie> I think I heard something about that.
18:26:23 <int-e> (my browsing drifted to cheap laptops)
18:27:16 <int-e> Of course "S" officially stands for "secure" but it's really the walled garden kind of "security".
18:28:11 <int-e> Not that I care all that much... as long as I can wipe it and install Linux. Which... well I guess I have to figure out for each model separately since we can no longer trust CPUs nor BIOSes to be open?
18:29:27 <int-e> (CPU: https://www.servethehome.com/amd-psb-vendor-locks-epyc-cpus-for-enhanced-security-at-a-cost/ ...not sure whether this crap has made its way to non-server x86 hardware by now.)
18:55:16 -!- kronk has joined.
19:58:03 -!- Everything has joined.
20:27:38 -!- tech_exorcist has quit (Remote host closed the connection).
20:52:45 -!- Lord_of_Life_ has joined.
20:53:52 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:54:01 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:05:22 <zzo38> There are many things that I don't like about Wayland, so I won't use it. I think instead a improved version of X could be made (mostly the core X11 stuff but with some differences), and then using proxying for security.
21:10:28 -!- tech_exorcist has joined.
21:40:42 <fizzie> Hmm, 2160x1440, that's an interesting resolution. (My browsing drifted to looking at first-impression comments on the HP x2 11, but nobody's been talking about the pen at all.)
21:41:28 <int-e> > 2160/1440 :: Rational
21:41:57 <fizzie> 3:2 is a nice aspect ratio though. My camera takes 3:2 pictures.
21:42:26 <nakilon> $ rg "-V" ~/.rbenv/versions/2.3.8/
21:42:31 <int-e> I'm not judging (I think 16:9 is too wide, personally); I was just too lazy to do the math
21:42:41 <nakilon> can't grep for "-V" because it's a flag of a grep utility
21:42:42 <fizzie> Also, I'm a little worried about it being a ChromeOS device. I tried out a ChromeOS tablet with a pen once, and just couldn't figure out a way to make it do palm rejection at all, so it was really frustrating. That's why I've been thinking about the Wacom display: it doesn't do capacitive touch at all, so there's no need to worry about unintentional inputs.
21:43:07 <fizzie> Usually you pass arguments starting with a dash by doing -- before the arguments.
21:43:14 <fizzie> As in, `rg -- -V ...`.
21:49:51 -!- ais523 has joined.
21:50:23 <ais523> I sort-of want to rant about system programming languages and general-purpose pointers/references
21:50:54 -!- hendursaga has quit (Ping timeout: 276 seconds).
21:50:58 <ais523> there are two things you can do with a pointer: a) pointer arithmetic operations like offset, compare, etc.; and b) dereferencing it to get at the value you're pointing to
21:51:17 -!- hendursaga has joined.
21:51:19 <ais523> operations in group a) are occasionally useful, but operations in group b) are much, much more common
21:51:33 <ais523> however, system programming languages seem to optimise for a) in practice
21:51:59 <ais523> for example, Rust has a way to cast an &T into a *const T, and you can do this with any &T, with no restrictions
21:52:56 <ais523> this means that any code that produces an &T needs to have an actual concrete memory location, with an address, for the thing that it points to, even though 99.9% of the time that's useless and the code you pass the &T to will only care about the thing it points to, not the location of the thing it points to
21:54:05 <ais523> and this seems like it could make optimisation much more difficult, e.g. you can *almost* optimize an &u32 into a u32 (i.e. replacing pass-by-reference with pass-by-value in a situation where the rules of the language prevent the reference target changing), but you can't, due to the off-chance that the program you pass the reference to cares about the address
21:54:50 <ais523> so I'm wondering how difficult it would be to make an optimiser that applies this optimisation anyway, and I'm wondering that it's likely to be too difficult in practice, and also suspect it may have a substantial performance impact
21:55:18 <ais523> (even if not at runtime, the compiler is going to need to do a lot of inlining, etc., to spot that the address isn't being used)
21:57:22 <ais523> something similar happens to constants; often you care about their value but not their address, but the compiler can't safely merge two constants with the same value if their address might be relevant
21:57:36 <ais523> (incidentally, NetHack contains at least one constant with an irrelevant value, which is used only for its address)
21:57:38 <zzo38> I know there is X on Wayland, but is there Wayland on X?
21:58:23 <shachaf> Go has b-type pointers only. Which seems very reasonable to me, I don't know why more high-level languages don't have b-type pointers.
21:58:35 <zzo38> C has a "register" command to indicate that taking the address is not possible.
21:58:39 <shachaf> Zig has distinct pointer types for a and b, I believe.
21:59:10 <shachaf> Not that this really addresses the thing you were saying.
22:00:13 -!- tech_exorcist has quit (Quit: see you tomorrow).
22:00:23 <shachaf> I think languages that have some sort of escape anaysis might be able to do this sort of thing? I vaguely remember that maybe Go does something like that to know whether it can stack-allocate pointers?
22:00:23 <ais523> I think that having them separate is one of the better solutions
22:00:38 <shachaf> Uh, stack-allocate values that it passes pointers to to things.
22:00:41 <ais523> it strikes me that Rust lifetimes might be abusable to track a-ness versus b-ness of a reference
22:01:05 <ais523> but, it wouldn't nest in the same way as other lifetimes
22:01:13 <ais523> would be nice for making code generic over pointer types though
22:01:33 <ais523> zzo38: I think it would make sense to reuse the "register" keyword as "you can't take the address of this"
22:01:41 <ais523> but it would be quite a big change to the language
22:02:48 <shachaf> Isn't it already how the language works?
22:02:54 <shachaf> I thought that was the entire meaning of "register".
22:03:13 <ais523> yes but it's only usable in one context
22:03:20 <ais523> which is defining local variables (including function parameters)
22:03:41 <ais523> you can't write int register* x
22:04:09 <ais523> (whereas int *const x says that x is const)
22:04:30 <ais523> x is const would be int const * x or const int* x
22:04:58 <ais523> C type syntax is a good example of how something can have a very simple specification but be utterly unintuitive in practice, and I'm out of practice with it
22:05:21 <b_jonas> I knew you'd be summoned eventually
22:05:22 <zzo38> I think that the confusing syntax for types is the worst feature of C.
22:05:40 <shachaf> Should I switch to writing const after the type, for consistency?
22:05:52 <shachaf> int const x; instead of const int x; and so on.
22:06:14 <ais523> shachaf: I've been wondering about that
22:06:33 <ais523> int const x; is more consistent, and makes the rules easier to remember; but const int x; is much harder to misinterpret
22:06:49 <ais523> I have gotten into the habit of writing *const rather than * const
22:06:52 <shachaf> The thing that made me remember how to make constant pointers and so on was when someone told me to think of it as a subscript.
22:07:02 <ais523> (I got taught that by a syntax reformatter, I forget which one)
22:07:37 -!- arseniiv has quit (Ping timeout: 245 seconds).
22:07:41 <ais523> hmm, I wonder whether C's type syntax would be more readable if you just swapped the value and type
22:07:58 <ais523> x: *const int versus x: const *int
22:08:23 <ais523> that looks fairly intuitive?
22:08:31 <shachaf> I'm not so sure const is even a good idea in C.
22:08:45 <shachaf> Which is a separate matter from the syntax, of course.
22:08:48 <ais523> x: (*int)(int, int) maybe less so
22:09:14 <ais523> actually, that one's badly misleading, probably even ambiguous
22:09:26 <shachaf> This argument was sort of convincing: https://gist.github.com/pervognsen/a99c9b2e2712deeb5f174553b4dc0c88
22:09:51 <ais523> you'd want to write the function pointer as *(int)(int, int) but that's not a simple swap of type and value
22:10:26 <b_jonas> ais523: "you can *almost* optimize an &u32 into a u32" => in rust, the solution to that is to always just pass the value in your code, like the u32 in this case, if it works, because if it's too large, the ABI will pass it as a pointer if it's large anyway. this doesn't work if you want the called function to mutate the value, or if the value isn't movable, but both of those invalidate that
22:10:26 <ais523> I think my opinion of const in C is that it's badly designed, but still helps to catch enough errors that it's worth putting up with the design flaws and false positives
22:10:32 <b_jonas> optimization; and also if the value is not compile time fixed length, but then passing it as a function argument is a hard problem in general.
22:11:08 <ais523> b_jonas: it doesn't work well with generic code, or with non-Copy things
22:11:31 <b_jonas> ais523: in C++, the solution to that is this newfangled | qualifier, which I'm not sure if it actually got into C++ yet or is in proposal stage, which you use in a function argument, and means that the compiler can either write const & or nothing there, as in, pass the value either by const reference or by value
22:11:31 <ais523> an Rc is 8 bytes long, and not Copy, but cloning it doesn't mutate the Rc itself (just the RcBox it points to)
22:12:01 <shachaf> Hmm, I still haven't figured out what Cell and RefCell in Rust are.
22:12:05 <ais523> so you'd want to optimise &Rc into &RcBox to avoid the double indirection, but it's hard to see that that optimisation is valid (because someone might take the address of the Rc itself)
22:12:12 <shachaf> The documentation doesn't seem to answer that question.
22:12:25 <ais523> shachaf: I figured it out when I wrote code that needed a custom RefCell-like thing
22:12:50 <ais523> the basic idea is, a Cell is something that can be mutated through a shared (&) pointer (whereas most things need an &mut pointer to be mutated)
22:12:56 <b_jonas> there is a reason why the actual thing you write differs in C++ vs rust, but it's irrelevant now, the main point is that both are trying to solve this and rust has solved it already
22:13:02 <shachaf> The memory layout of Cell<T> is the same as T, right?
22:13:05 <ais523> so, you can have a Cell<u32>, for example, and write a new u32 to it
22:13:27 <ais523> and yes, memory layout is identical to T, you're just marking it as being mutatable even if there are references to it
22:13:40 <shachaf> Is Cell something you need unsafe-or-similar to implement?
22:13:55 <ais523> it's implemented in terms of UnsafeCell, which is a compiler primitive
22:14:04 <shachaf> Why doesn't being able to mutate it through & cause problems?
22:14:17 <ais523> there are limits on the sort of mutations you can do
22:14:40 <shachaf> I see, you can only write an entire new value in, or something?
22:14:46 <ais523> the main rule is that you can `Copy` the value out of the cell, or overwrite a value into the cell, or swap the value in the cell with another, as long as it's only accessible from one thread
22:14:51 <shachaf> Rather than getting a pointer to the thing?
22:14:52 <ais523> but, you can never get a reference to the value inside
22:15:15 <ais523> `RefCell` is like `Cell` but does runtime checks rather than compile-time checks
22:15:16 <HackEso> RefCell`? No such file or directory
22:15:33 <b_jonas> I think people exaggerate how bad the C pointer/array/function thing is. it's something you have to learn once, but it's not something that will cause lots of hard to debug bugs in your program or anything. as problems with function languages go, it's mild. it's something only people who want to hate C will say.
22:15:48 <shachaf> So you can have fn f(a: &Cell<u32>, b: &Cell<u32>); let x: Cell<u32>; { f(&x, &x); }, and f doesn't care that the values alias.
22:15:55 <ais523> you can get a reference to the value inside, but only if there are no conflicting references, you get an error if you try to create a unique reference to it at the same time as any other sort of reference
22:16:01 <riv> another bad thing about C is the build system stuff
22:16:13 <shachaf> And it behaves sort of like "void f(u32 *a, u32 *b);" in C, where the compiler can't assume anything.
22:16:13 <riv> C should be designed so that it can be compiled easier
22:16:28 <shachaf> OK, got it, that makes sense.
22:16:46 <shachaf> Why does RefCell need runtime checks? What does it let you do?
22:16:51 <b_jonas> ais523: also you didn't react to what I wrote about Infinite Vector, so now I have to ask you
22:17:00 <b_jonas> ais523: does what I wrote about Infinite Vector sound right?
22:17:06 <ais523> it lets you take a reference to the inside of the cell, but the runtime checks make sure that there aren't too many
22:17:13 <ais523> b_jonas: it looked plausible but I didn't want to think about it too deeply
22:17:17 <ais523> I'm not surprised it's TC
22:17:34 <shachaf> Aha. RefCell lets you borrow the inside of the cell.
22:17:48 <shachaf> In particular it lets you take any number of const references or at most one mut reference?
22:18:05 <ais523> but the type system doesn't prevent you doing both at once, which is why the runtime checks are needed
22:18:12 <shachaf> I don't know why they don't say that in the documentation.
22:18:33 <shachaf> I asked someone about it, and they gave an explanation that would have required Cell<T> to have a different memory layout from T.
22:18:48 <ais523> that's technically correct but misses the point
22:18:59 <b_jonas> stuff about Infinite Vector at https://logs.esolangs.org/libera-esolangs/2021-08-31.html#lrc for future reference
22:19:36 <ais523> RefCell<T> needs a reference count to count the borrows, which does give a different memory layout, but the point is more that you need runtime checks to count the borrows
22:19:52 <ais523> yep, because it can't be borrowed at all
22:19:55 <shachaf> So then we were both confused.
22:20:11 <shachaf> Anyway this makes sense, thanks for clarifying.
22:20:42 <shachaf> Maybe one day I'll understand Pin.
22:20:44 <ais523> in practice Cell<T> works best on things that are `Copy` and fairly small, so that you'd have little reason to borrow it (and don't need to swap a placeholder value in when you take the old value out)
22:20:46 -!- Koen_ has joined.
22:21:15 <fizzie> If "swap the value and type" means "pull out the identifier from the declarator, and then write the type name after it", I don't know how much that would help, since simple things are already simple, and complex declarators are probably even worse to read when the identifier isn't in there to show where to start from.
22:21:18 <fizzie> Go does the "strictly separate the identifier and type name" thing, but it *also* moves the [] syntax to be prefix to match *, and uses a keyword to introduce function types, which does a lot of the heavy lifting of making type names more "linear".
22:21:31 <b_jonas> ais523: I think that's deliberately hard. you have three options: move the Rc if you no longer need it, in which case you just pass by value; or if you do need it but the called function doesn't need to keep a reference but only look at the pointed value now, then pass a reference to the pointed value, it will be valid because you're the caller and you're keeping the copy of the Rc; or if both of you
22:21:37 <b_jonas> need it, then clone the Rc explicitly, but that's something Rust doesn't want to do implicitly without you actually writing .clone()
22:21:46 <shachaf> The Go syntax for types seems mostly better than the C syntax.
22:21:51 <shachaf> Some of it is a little odd but it's fine.
22:22:07 <b_jonas> but that third thing is rare
22:22:09 <ais523> b_jonas: this mostly comes up with generic code
22:22:09 <shachaf> Presumably you should have a really good reason not to make your programming language syntax LL(1).
22:22:27 <ais523> almost all generic code assumes that the receiver for methods that don't need to mutate self is &self
22:22:46 <riv> mostly people just code without thinking or caring about theory
22:22:51 <riv> so things end up not being LL(1)
22:23:07 <fizzie> I remember there's an annoying syntax quirk in Go where you sometimes need to add ()s around the controlling expression of an `if` statement, when there's {}s involved in the expression as well.
22:23:16 <ais523> my opinion on this is that you normally have a separate parser and lexer anyway, so few languages are LL(1) at the byte level
22:23:20 <b_jonas> ais523: really? aren't you confusing that with C++ or with run-time dynamic type dispatch code?
22:23:29 <riv> yes LL(1) in terms of tokens
22:23:35 <riv> and the token language should be regular
22:23:52 <b_jonas> shachaf: no, I think that's only true for LR(1), not for LL(1)
22:23:56 <ais523> riv: my opinion on this is that it'd be great if the parser and lexer could be combined
22:24:08 <riv> i suppose they can be combined
22:24:22 <b_jonas> sure, simpler languages will be LL(1)
22:24:25 <riv> but it's good if they can be separated in terms of specification
22:24:30 <ais523> b_jonas: something that always amazes me is that the syntax of yacc (after tokenisation) is LR(2) but not LR(1)
22:24:46 <ais523> some yacc implementations work around this by getting the lexer to do an extra token of lookahead
22:24:51 <shachaf> Hmm, I should learn how LR parsers work.
22:24:53 <ais523> but it's crazy that it technically can't parse itself
22:25:06 <b_jonas> ais523: is that because there's no separator (semicolon) between the rules?
22:25:09 <ais523> and even more crazy that it's LR with a finite number that isn't 1
22:25:28 <riv> that is so funny
22:25:31 <ais523> b_jonas: right, semicolons are optional, and to parse the case where they're missing you need two tokens of lookahead
22:25:59 <b_jonas> I wonder why they defined yacc syntax like that
22:26:14 <b_jonas> is there some history behind it?
22:26:14 <ais523> it was probably some sort of historical accident?
22:26:25 <ais523> yacc probably wasn't originally programmed in itself, as it'd have been a pain to bootstrap
22:26:28 <b_jonas> like trying to unify the syntax of two incompatible parser generator syntaxes?
22:26:34 <ais523> so probably there was a hand-rolled parser, which wasn't necessarily going to be LR
22:26:48 <ais523> given that the name starts "ya", though, there must have been a number of parser generators before it
22:26:49 <riv> they could have still designed it to be LR(1) :P
22:26:52 <riv> i really love this fact
22:27:09 <b_jonas> sure, but whoever thought, let's write an LR(1) parser generator, they probably understood what makes a language LR(1), and automatically used such a syntax
22:27:30 <int-e> Do you have a shift/reduce parser in your brain? I'm pretty sure I don't.
22:27:33 <b_jonas> it's not like back when nobody knew how parsing is supposed to work, so they just wrote up syntax and figured out afterwards how to parse it, which is supposedly how fortran was born
22:27:49 <int-e> Also pretty sure that while the brain has limited lookahead, the limit isn't 1.
22:28:04 <ais523> I have been wondering about extensions to shift/reduce automata
22:28:24 <ais523> shift/reduce/rewind seems to have a lot of power, whilst still being efficient if you put appropriate limitations on it (it's probably TC if you don't put limitations on it)
22:28:34 <ais523> err, maybe LBA rather than TC
22:29:25 <int-e> linearly bounded automaton
22:29:39 <b_jonas> memory bound to O(n) where n is input size?
22:29:44 <int-e> logical block addressing
22:29:47 <int-e> little big adventure
22:29:59 <b_jonas> fungot, what does LBA stand for
22:29:59 <fungot> b_jonas: you should avoid using it for is to eliminate the usage of funky python.
22:30:14 <ais523> you get O(n) memory where n is the number of bits in the input
22:30:21 <HackEso> This channel is having a Little Big Adventure(tm) with Linear Bounded Automata in devices using Logical Block Addressing.
22:30:45 <int-e> I may be responsible for that one
22:31:03 <shachaf> Man, LBA was such a big upgrade over Illogical Block Addressing.
22:31:13 <shachaf> Why did they even start with that scheme?
22:31:47 <int-e> physical addressing by head, cylinder, sector?
22:32:02 <int-e> I imagine it matched the hardware better at the time
22:32:21 <b_jonas> shachaf: because they designed the PC before DOS brought in the unix heritage of linearly addressed block devices
22:32:53 <int-e> also before HDDs made tracks have different numbers of sectors depending on how long they are
22:33:22 <int-e> and automatically remap bad sectors and all that
22:33:48 <b_jonas> you don't want to put too much complicated logic in the disk contorller, and especially not in the disk, because electronics was expensive, and there's already a CPU that can compute everything for you, so the CPU computes the cylinder, head, sector addresses and tells that to the disk controller
22:34:00 -!- delta23 has joined.
22:34:15 <ais523> nowadays, disk controllers run pretty powerful processors
22:34:31 <shachaf> SSD controllers are presumably just ridiculous.
22:34:33 <ais523> I've seen blog posts where people reprogrammed them to do interesting tihngs
22:34:46 <shachaf> And they should stop presenting a block device interface.
22:34:54 <ais523> and communicated with their software by writing files with particular text in
22:35:04 <b_jonas> yes, and funnily the C64's disk drive also runs a CPU about as powerful as the computer, but note that the disk drive is optional and also can be shared between multiple computers
22:35:14 <shachaf> What would a good interface for SSD controllers be like?
22:35:46 <ais523> one complication is working out who's responsible for the filesystem, the SSD controller or the operating system
22:35:51 <int-e> hrm which computer had a full CPU as floppy disk controller?
22:35:53 <shachaf> Another thing I was wondering about was whether desktop computers should have some amount of NVRAM that's exposed directly to applications.
22:36:12 <b_jonas> ais523: what we want more these days is reprogramming them to *not* do interesting things, in particular, not handle shingled storage, so that the OS can handle it itself and as such better optimize it together with the file system
22:36:25 <ais523> shachaf: they do, but you have to jump through lots of hoops to get at it
22:36:38 <int-e> Oh b_jonas answered that
22:36:43 <ais523> and also it normally belongs to the BIOS/UEFI so you can damage your bootloader if you mess with it
22:37:21 <b_jonas> rather than, as the current state is, the hard disk manufacturer is in a war with the OS, it tries to pretend very hard that it's not a shingled drive, until one day you write too many things to it too fast, at which point it freezes for half an hour to rewrite all the data on it, the OS decides that your drive is dead and removes it from the RAID array, and you can no longer make cheap RAID setups from
22:37:24 <ais523> b_jonas: apparently a major problem in practice is that they often lie about what they're doing to get beterr performance metrics
22:37:26 <shachaf> I just mean a region of RAM that's guaranteed to be dumped to disk on power loss.
22:37:54 <b_jonas> yes, this is for hard disks specifically, not for SSDs
22:38:26 <b_jonas> int-2: the Commodore 64 had a full CPU in the floppy disk controller. just not too much RAM.
22:38:36 <ais523> apparently even getting journalled filesystems to work correctly on power loss is difficult, because there are all sorts of error conditions like "the CPU browned out and gave bad data to the disk controller"
22:39:11 <b_jonas> but still enough RAM to load enough code to it to completely upgrade how it reads and writes disks, rather than using its original ROM code, and still have enough buffers for that read/write thing
22:39:11 <ais523> you'd need the motherboard to carefully orchestrate the order in which various components lost power when the power was cut, probably with a number of capacitors to provide emergency powre for a clean shutdown
22:40:50 <b_jonas> ais523: I think the journaled thing came up more with old SSDs, because they were small and mostly intended as removable storage (pendrives), while I think (hope) it's mostly solved now with modern SSDs that are originally intended to be used as the main storage in computers
22:40:51 <shachaf> One thing that briefly surprised me is that my SSD has done a lot more writes than reads.
22:40:59 <shachaf> 18.1 TB read, 31.6 TB written.
22:41:08 <fizzie> There's a nice demo for the 1541 disk drive.
22:41:18 <shachaf> But it makes sense because in steady state everything I use fits in the page cache, so there's no reason to ever read.
22:41:20 <fizzie> https://cdm.link/2021/07/freespin-is-a-demo-made-for-the-commodore-1541-no-not-the-computer-just-the-floppy-drive/
22:41:38 <shachaf> But you always need to write for durability. My browser writes its state every time I open a new tab or even scroll, I think.
22:41:40 <fizzie> It bit-bangs a composite video signal out of the serial port.
22:41:44 <nakilon> how do I see my read/write stats?
22:41:56 <fizzie> IIRC, you need to use a computer to load it, but can disconnect the computer once it's up and running.
22:41:57 <shachaf> So having a region of memory you can write things to that's durable but will almost certainly be overwritten right away seems like it could be very useful.
22:43:03 <int-e> I tweaked my browser.sessionstore.interval to be 3 minutes.
22:43:06 <fizzie> http://www.quiss.org/freespin/ would've been a better link I think.
22:43:30 <int-e> Default is 15 seconds.
22:43:54 <fizzie> shachaf: Mine's even more unbalanced: 535 GB read, 6.86 TB written.
22:44:13 <ais523> shachaf: so basically a write-behind cache which you have little intention of ever flushing early but will get flushed on power failure, that does seem useful
22:44:22 <ais523> but it's the opposite safety characteristics to a typical write-behind cache
22:44:25 <shachaf> When I first saw these numbers, I did a read of the entire SSD, which added 1TB, to see how long it'd take.
22:45:22 <shachaf> Maybe the OS interface can just be a regular file with a hint that you want it in this region, or something.
22:45:45 <shachaf> For all I know SSD controllers already do a good job at this.
22:45:52 <shachaf> Though I kind of doubt it, they just don't have enough information.
22:46:26 <int-e> Oh my SSD doesn't report blocks read... odd?
22:47:07 <nakilon> got this https://dpaste.org/3ZTZ/slim
22:47:25 <fizzie> Hmm. The spinning disk is the exact opposite, at 37B units written and 476B units read. I don't know what the units are for "Total_LBAs_Written" and "Total_LBAs_Read". For the (NVMe) SSD, smartctl reported them in a human-readable form.
22:47:35 <nakilon> I'm using this machine for 2 years now
22:47:51 <nakilon> compared to your stats I guess it's a lot ( maybe damn google chrome?
22:49:23 <shachaf> SSD NAND flash is getting worse and worse to increase density, which makes these things more important.
22:50:34 <nakilon> as I understand the disk is dead when Available Spare goes down to Available Spare Threshold
22:51:15 <fizzie> int-e: I've got a (someone else's spare) SATA SSD that I use as a dual-boot (more like a never-boot) Windows drive, and I can't find any read/write stats for it either from smartctl -a output.
22:51:37 <shachaf> fizzie: The Internet is saying you should multiply by the "Sector Size" field, if you have one.
22:52:14 <fizzie> "Sector Sizes: 512 bytes logical, 4096 bytes physical"
22:53:12 <int-e> fizzie: this one reports lbas written, but not lbas read.
22:53:13 <shachaf> OK, so you've written 19 logical TB and 152 physical TB.
22:53:23 <shachaf> What an amplification factor!
22:53:29 <int-e> which I guess makes some sense for NAND storage
22:54:07 <fizzie> This one doesn't report either. It reports a number of "Unknown_JMF_Attribute"s, but they're all 0s.
22:54:28 <shachaf> I've moved this SSD across several laptops by now.
22:55:11 <fizzie> I wonder if there would be any sort of benefit to trying to figure out some way of telling Linux that it should keep that particular SATA device just permanently powered down, since it's never going to be intentionally used.
22:55:23 <int-e> the spinning rust reports a higher Head_Flying_Hours value than Power_On_Hours ...I guess it's sleepflying
22:55:34 <shachaf> "Date first available" for this model is apparently 2016.
22:55:48 <int-e> (it's not a huge difference, about 2%)
22:55:54 <nakilon> oh, it's Terminal I suppose https://i.imgur.com/ggTnoDB.png I noticed before, probably because I set the buffer limit to infinity and if something prints a lot it goes to the disk; I wonder if swap usage is added as a specific app stat
22:56:31 <b_jonas> fizzie: wait, I think there's interface for that in /proc or /sys or something
22:56:50 <b_jonas> fizzie: I mean it's something you have to rerun after every boot, and the BIOS might power it on first
22:56:56 <b_jonas> but after that it keeps it powered down
22:57:12 <fizzie> Well, I don't boot that often. I just wonder if it would be a noticeable benefit in terms of... something.
22:59:47 <b_jonas> I don't really trust SSDs too much yet
23:00:04 <b_jonas> I mean they're great for caching, but save everything to a hard disk too
23:00:21 <fizzie> There's also this other SATA SSD (the one I used to have in my desktop before), and that one reports via SMART counters called Read_Sectors_Tot_Ct and Write_Sectors_Tot_Ct; that one's saying 1.74 TiB read and 5.52 TiB written.
23:01:05 <nakilon> b_jonas lol you've hightlighted someone
23:01:38 <b_jonas> quite possible, some people have nicks that are common words
23:04:34 <shachaf> Maybe I should get a new SSD.
23:06:04 <b_jonas> I have a new SSD. I bought it with the new computer in 2020-10. I'm not using it yet, but I have it.
23:06:30 <shachaf> I wonder, maybe typical modern SSDs are actually slower than what I have, because they use TLC (or even QLC?).
23:07:05 <b_jonas> I had the intent to mostly use it as read cache (no writeback cache) for the hard disk file systems, for which there are like two different mechanisms in Linux already,
23:07:38 <b_jonas> but then I got distracted by the shingled hard disk RAID thing, and I definitely don't want to set up the read cache before I set up the RAID, because the cache has to go *over* the RAID layer
23:07:52 <b_jonas> or at least I should understand how the whole thing works before I set it up
23:08:51 <nakilon> the funny thing is that only those people who bother with RAID get their data lost
23:08:57 <nakilon> I never bothered and never lost anything
23:09:10 <b_jonas> also I deliberately bought a better computer than I need right now, so I don't have to get back to the hard process of selecting and buying computer parts, and wanted a configuration that can fit together
23:10:00 <shachaf> I wonder. RAID doesn't make sense for large distributed systems, and consumers don't use it, so the range of applications seems very limited.
23:10:12 <nakilon> it's like RAID -- is a technology to lose data, not preserve
23:10:17 <b_jonas> of course that never works out, because (1) I need a new monitor now, and (2) I deliberately didn't buy a video card, only a motherboard with a free slot for video card, thinking that when I need a video card, I just buy one, but BANG advanced electronics shortage, prices shooting up, nope, you can't just buy a video card when you need it
23:11:02 <shachaf> What multiplier does the shortage increase price by?
23:11:09 <shachaf> Is it ~2x or ~10x or what?
23:11:29 <ais523> there are two relevant shortages I think
23:11:43 <b_jonas> ais523: sure, the other is building supplies, especially steel
23:11:51 <ais523> one of them hit high-end GPUs in particular, the prices of those went up by a lot, but lower-end GPUs were mostly unaffected
23:11:54 <b_jonas> but that one doesn't affect me so directly
23:11:57 <ais523> the other one is more general-purpose
23:12:22 <ais523> I'm in the UK, which currently has shortages of pretty much everything due to a lack of transport
23:12:43 <b_jonas> I didn't say that I won't build a house now because I can just have it built later when I need it, unlike the video card thing
23:12:48 <ais523> (after brexit the amount of paperwork involved in international trade has gone way up, and scared a lot of people out of the field, so there's a shortage of employees)
23:13:19 <shachaf> How much does it cost to build a house normally?
23:13:31 <b_jonas> ais523: yes, and even in the EU, trade from outside the EU (as in, importing the cheap electronics from East Asia) got somewhat harder
23:13:47 <fizzie> I looked at bcache a little. It feels like it would be nice to have some sort of automation as to what to put on the SSD and what to keep on the spinning disks, rather than having to manually make that decision by choosing a location in the filesystem.
23:13:55 <b_jonas> shachaf: no idea, I don't want to have one built ever in my life
23:14:05 <b_jonas> if I have to build one, then free market economy failed me
23:14:16 <b_jonas> I want to rent apartments forever, and if I can't, the market sucks
23:14:26 <b_jonas> but even then I'll probably just buy a (used) house, I won't have one built
23:15:27 <b_jonas> but I won't have to, because building houses is mostly for people who want to live in the suburbs or agglomeration
23:15:46 <b_jonas> I want to live in a city, which is already densely packed with houses, and every free space immediately has a house built
23:16:10 <b_jonas> I knew a few people who do the suburb or agglomeration thing
23:16:22 <b_jonas> but that's definitely not the kind of life that I want
23:17:00 <ais523> I wonder why people don't normally talk about used / second-hand houses
23:17:07 <ais523> probably because that's the norm in many countries
23:17:18 <shachaf> I've heard people use that term.
23:17:27 -!- Hooloovoo has quit (Read error: Connection reset by peer).
23:18:05 <b_jonas> ais523: probably because nobody buys a whole new house. people either buy an apartment in a house that may be new, or have a custom house built
23:18:16 <b_jonas> if you want a whole house, and new, you want to customize it
23:19:12 <b_jonas> the second apartment that I lived in (moved there when I was about 10 years old) was in a new house, as in, my parents reserved it and partly payed it when the house wasn't even yet built
23:19:39 <ais523> near here there are lots of new houses being built to standard designs, and then people buy them new, but with no input into the design
23:19:39 <fizzie> I'm weirded out by the "house" thing, and the UK notion of a "housing ladder", which you're supposed to use to climb up to a house, since I've exclusively lived in apartments that are units of much larger buildings, and don't find that odd. (That's at least partially orthogonal to the question about the ownership model though.)
23:19:42 -!- Hooloovoo has joined.
23:19:50 <ais523> (I have relatives who were considering buying one, but didn't like the design so chose not to)
23:20:38 <ais523> fizzie: the housing ladder exists, but choosing to participate in it is optional, and seems to be mostly due to people who have an idealistic idea of what people's lives should be like
23:20:59 <fizzie> Well, it is talked about a whole lot, it feels like.
23:21:01 <b_jonas> ais523: there are a few places where that happens, yes. my brother lives in a house that was probably originally built that way, because it's in a neighborhood with like a hundred family-sized houses built to the same template
23:21:26 <ais523> that seems very common here (Birmingham specifically, I don't know whether it applies to the UK in general but it may do)
23:22:29 <b_jonas> I don't think it's too common here in Hungary
23:22:42 <fizzie> Another thing that seems very UK-specific is this whole leasehold thing.
23:22:45 <nakilon> I guess people who can spend their money less practically have to be fooled, they have to be tricked to participate in the game of who will be the first buyer of a house and who'll be a "loser" to be the second buyer of it -- it just helps the builders to sell the stuff faster for their business
23:24:43 <ais523> I don't think being the first occupant of a house is considered a huge advantage here
23:25:03 <ais523> people care more about the location and size of the house than the number of previous owners
23:31:15 <nakilon> I knew a guy who was renting a 1 room flat in a very cool place in the city, it costed him 6 times more than my place, there was almost no profit in living there other than a bit smaller commute time, but mostly it was just about to be proud of where he lives
23:31:18 <b_jonas> I guess I'll have to edit the Infinity Vector page to give at least a summary of the Turing-completeness proof
23:32:50 <ais523> places like Cambridge and London seem to cause a vortex of price equalisation which caps the price of accommodation from below at the price in the centre minus the price to commute there
23:33:04 <ais523> and this can extend out hundreds of miles in some cases
23:33:46 <ais523> like, you can get the train from Norwich to London, so prices to live near a train station in Norwich are pretty high, taking only the cost of the train journey (which is not cheap!) into account
23:36:45 <fizzie> I feel like that's not quite true. Or at least that there's a pretty big variation in prices *within* London, bigger than could be explained by any transportation differences.
23:36:48 <fizzie> A little hard to say though. All I've seen are those "average property price" maps, and they're presumably quite a lot affected by what kind of properties there *are* in a region.
23:38:18 <ais523> well, transportation within London is actually fairly difficult, to the extent that it can be a significant portion of the travel time when taking journeys where London is one endpoint
23:38:38 <ais523> it has a good public transport network (although pretty bad roads), but not enough transport capacity
23:39:49 <ais523> I guess the problem is basically just that the population density is too high and the workplace density is also too high
23:40:06 <ais523> if businesses spread out more over the country rather than all grouping in one place, there'd be less of an issue
23:42:39 <nakilon> even in the industrial age the factories were all spread, why the hell not IT companies all get crowded in centers?
23:43:14 <nakilon> they don't have metal to be moved, they can work remotely, etc.
23:44:36 -!- Koen__ has joined.
23:45:33 <nakilon> I fucked up my health on one job with boss with a mania of having everyone being at their desks, not even spend 5 extra minutes on a dinner break; he could even come in and verbally shame someone in openspace in front of coworkers for "eating too slow" and such
23:47:07 -!- Koen_ has quit (Ping timeout: 252 seconds).
23:47:20 <nakilon> this was making people so stressed to be in place no matter what, for some even if their flat gets water flooded by a neighbor, for me it was ignoring the hurt it my back that I never had to ignore...
23:48:51 <nakilon> fungot are you a remote worker?
23:48:52 <fungot> nakilon: do you know that in knuth's volume 1 a different formula is used, ( k val...) returns as if it were, would be possible
23:50:17 <fizzie> A "remote worker" in fungot context would probably be some sort of a Befunge-as-a-service cloud thing.
23:50:17 <fungot> fizzie: i would probably make more sense. or use lambdas. they might handle them with pieces tables ( make sense if hash maps wouldn't be better to have a coral reef.
23:51:32 <nakilon> he knows about AWS lambdas
23:55:13 -!- src has joined.