00:18:50 -!- atslash has joined.
00:39:09 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
00:44:10 -!- atslash has quit (Quit: Leaving).
00:47:50 -!- augur has joined.
00:58:28 -!- sebbu has quit (Ping timeout: 240 seconds).
01:24:52 -!- quintopia has joined.
01:37:28 -!- boily has joined.
01:37:54 -!- doesthiswork has joined.
01:37:56 <HackEgo> swatter//The swatter is a tool for punishment commonly found in #esoteric. Not to be confused with the saucepan or mapoles.
01:44:33 <HackEgo> 1/1:alogl//ALOGL is a logarithmic language. \ zork//Zork is like York, except for the first letter. Uaneb invented it. \ stalagmyte//A stalagmyte is eight stalagmits \ il//An il is a cohelix of pper wire.
01:47:47 <HackEgo> 1/2:rhenium//Rhenium is a precious metal. It can be found nowhere in Earth because the Enemy has used up all of it for forging the One Ring. \ vorpal//Vorpal writes software for boring machines. Really big ones. \ sbeef//Sbeef is the culinary name for meat from scow. \ homophone//Homophones are pairs of words that sound totally gay together. \ heff
01:47:58 <HackEgo> 2/2:alump//A heffalump is similar to a lump of sugar, but with honey instead.
01:52:29 <HackEgo> [wiki] [[User:Qwertyu63]] https://esolangs.org/w/index.php?diff=52342&oldid=52340 * Qwertyu63 * (-15)
02:01:16 -!- Warrigal_ has quit (Ping timeout: 276 seconds).
02:10:13 -!- augur has quit (Remote host closed the connection).
02:22:19 <quintopia> rhenium is a pretty terrible wisdom
02:22:47 <quintopia> Borderlands TPS finished downloading :P
02:23:51 <boily> I don't know where I'll be this weekend...
02:24:08 -!- boily has quit (Quit: HOW CHICKEN).
02:34:55 -!- oerjan has joined.
02:38:12 <HackEgo> [wiki] [[User:Qwertyu63]] https://esolangs.org/w/index.php?diff=52343&oldid=52342 * Qwertyu63 * (+138)
02:42:08 <HackEgo> [wiki] [[Triple Threat]] N https://esolangs.org/w/index.php?oldid=52344 * Qwertyu63 * (+2913) Created page with "'''Triple Threat''' (hereafter TT) is a stack-based esolang. Every command modifies and juggles the numbers in one or two of three stacks. Each stack is capable of different a..."
02:45:13 <HackEgo> [wiki] [[Set]] https://esolangs.org/w/index.php?diff=52345&oldid=50526 * Qwertyu63 * (+65)
02:45:47 <HackEgo> [wiki] [[User:Qwertyu63]] https://esolangs.org/w/index.php?diff=52346&oldid=52343 * Qwertyu63 * (-2819) Replaced content with "Languages I've written:<br /> * Writer and implementer of [[Stack Up]]. * Writer of [[Set]]; article and interpreter by Matheus Avellar. * Writer of [[Emoji-gramming]]. *..."
02:46:57 -!- sleffy has quit (Ping timeout: 240 seconds).
02:48:55 -!- Zarutian has quit (Quit: Zarutian).
02:57:37 <HackEgo> [wiki] [[Triple Threat]] https://esolangs.org/w/index.php?diff=52347&oldid=52344 * Qwertyu63 * (+71)
03:03:12 -!- sebbu has joined.
03:06:18 -!- sebbu2 has joined.
03:09:49 -!- sebbu has quit (Ping timeout: 255 seconds).
03:21:37 -!- sleffy has joined.
03:38:45 <zzo38> Did you see this? https://news.ycombinator.com/item?id=14634926 It is some thing with mathematics, everyone start same money and each step give one piece of money to someone else at random. What do you think is the distribution going to be?
03:50:42 <Cale> I would expect something like a 1/x distribution
03:52:04 <Cale> Maybe something a bit fatter than that... I dunno
03:57:26 <zzo38> What is 1/x distribution?
03:58:27 <Cale> Like the graph of 1/x
03:59:07 <Cale> (scaled somehow, and obviously discretized)
04:01:14 <shachaf> zzo38 did not strike me as the sort of person who comments on news.ycombinator.com
04:01:40 <Cale> shachaf, why are you so obsessed over where conversations are taking place? :)
04:02:16 <shachaf> Cale: Me? You're the one who's obsessed with it!
04:03:09 <shachaf> Cale is always all, like, whoa, dude, why're you talking in #esoteric instead of ##categorytheory, man?
04:04:46 <Cale> Yeah, but the reason I ask is because you moved the conversation here :)
04:05:01 <Cale> as if you're trying to avoid talking in the other channel
04:05:27 <Cale> (when you were obviously listening there)
04:05:57 <Cale> zzo38: Apparently the correct name for what I was thinking of is "Pareto distribution"
04:06:29 <Cale> (at least, if you think of it as a probability distribution)
04:07:06 <shachaf> The reason is that some person gets an advantage randomly, but then they continue giving away a constant amount, rather than a percentage of their money, so it doesn't get reduced by as much?
04:07:21 <shachaf> They still have as much of a chance of getting a given dollar as before, but they aren't giving away as much.
04:07:22 -!- sleffy has quit (Ping timeout: 276 seconds).
04:12:17 -!- augur has joined.
04:14:24 <shachaf> I have the following problem: I get some structured data every so often, and I want a user interface that can show the result of various queries run over it.
04:14:55 <shachaf> Say the queries are SQL-ish, though I don't know what the query language is exactly.
04:15:15 <shachaf> The queries are user-provided but stay relatively constant. On the other hand, the data changes all the time.
04:15:25 <shachaf> This is kind of backwards from a typical database.
04:15:33 <shachaf> Is there a tool for this sort of thing?
04:15:45 <shachaf> Or a library that can be used to implement it?
04:15:52 <zzo38> I don't know, although I have wanted to be able to do such thing with SQLite
04:16:40 <zzo38> (In SQLite, if using remote data, this might be done by implementing a virtual table, but you say you do not know what the query language is exactly, so that can't help.)
04:17:10 <zzo38> No I think SQL would be better
04:17:14 <shachaf> To be clear, all the old data is dropped when new data arrives. The queries are run exactly once over the new data, say every second.
04:24:20 <zzo38> I suppose you could. I probably would have used C, and then interfacing it with SQLite, implementing perhaps a virtual table module to retrieve the data. However, many thing you fail to mention, including, do you need the data to be plotted on a graph, or just a text, or both, and where does the data come from, and so on? What you need depend on many thing I think
04:24:37 <shachaf> Ideally, all the queries can be computed in one or two passes over the data.
04:25:17 <shachaf> For example many of the queries are summing different things. All the partial sums can be kept as state when iterating over the data once.
04:26:41 <zzo38> Well, SQLite can do most of these optimizations automatically (although some are missing; it cannot keep state across different queries for example).
04:26:58 <shachaf> select sum(x) from foo; select type, sum(x) from foo group by type;
04:27:13 <shachaf> The thing is that there are a lot of queries but only one copy of the data.
04:36:02 <shachaf> Do you like Rice's theorem?
04:38:14 -!- hppavilion has joined.
04:41:33 -!- hppavilion has quit (Ping timeout: 260 seconds).
05:34:21 -!- hppavilion has quit (Ping timeout: 240 seconds).
06:27:55 <shachaf> @tell hppavilion https://www.youtube.com/watch?v=sULa9Lc4pck
06:30:27 <Cale> shachaf: That problem sounds like what most of our application backends look like
06:30:53 <shachaf> Non-video link: https://math.stackexchange.com/a/165225
06:31:11 <shachaf> Cale: Are these user-supplied queries, though?
06:31:18 <shachaf> I don't know what your application is.
06:31:36 <Cale> shachaf: I really want a database which is designed around that kind of interaction: you register queries with the backend, and get notified any time a transaction commits which affects the results of a registered query, with the changed rows.
06:32:33 <shachaf> Cale: Well, this problem is different because the old data is thrown away all the time, so there's no reuse possible.
06:32:54 <shachaf> But I think this is one of the things RethinkDB was trying to do?
06:32:54 <Cale> shachaf: Well, our web applications generally have a notion of a "view selector", which is typically a big record containing a bunch of Maps expressing what data the frontend wants to display to the user, and those get delivered via websockets to the backend
06:32:58 <shachaf> https://www.rethinkdb.com/
06:33:27 <shachaf> (I was involved with RethinkDB but that was years before they added these features.)
06:33:36 <Cale> and then the backend sends back views, which are similarly structured collections of Maps containing (patches against) the data that was requested
06:34:31 <shachaf> I also saw this post about it, so who knows: http://blog.sagemath.com/2017/02/09/rethinkdb-vs-postgres.html
06:35:16 <Cale> We're using postgresql's LISTEN/NOTIFY
06:36:48 <Cale> Does rethink support queries that are similar to what is expressible with SQL?
06:37:42 <shachaf> The post I linked to compares the two (that person migrated sagemath from rethinkdb to postgresql and found the latter much better for their purpose).
06:39:42 <Cale> Not that I particularly love SQL -- I'd really like to have an easy way to express sum types
06:39:49 <Cale> (and express queries against them)
06:41:14 <shachaf> fizzie: I can't remember what [redacted] does about sum types and SQL-like languages, but I think there may have been something? Do you think there exists a good query language that supports sum types well?
06:41:50 <Cale> It bothers me that nobody bothered to put in a way to say "this column contains a primary key of table A, B, or C, and the information about which it is"
06:43:03 <Cale> You always end up representing A + B as (1 + A)*(1 + B) in some fashion, because that's 1 + (A + B) + A*B, but accidents which result in 1 or A*B being stored are among the worst kinds of bug you can have.
06:43:48 <Cale> (the kind where when your application screws up, it can involve humans making many phone calls to repair the damage)
06:45:24 <shachaf> Can't you express that constraint in postgres?
06:47:46 <Cale> You might be able to do something with an ugly trigger.
06:48:04 <Cale> Or were you thinking of something else?
06:49:21 <Cale> (also using two columns)
06:51:14 <shachaf> create table foo (x int, y int, z int, check ((x is not null::int) + (y is not null::int) + (z is not null::int) = 1));
06:52:52 <Cale> That's a cute way of expressing it
06:53:05 <Cale> I wonder how much it affects performance
06:53:10 <shachaf> Well, however you express it, the point is that it's a boolean expression that you can put into check.
06:53:35 <Cale> Well, really what I want is for the invalid options to be inexpressible :P
06:54:09 <shachaf> I imagine it shouldn't affect performance much?
06:54:25 <shachaf> Sure, but a runtime check will save you those painful phone calls.
06:54:43 <Cale> That is true :)
06:56:29 <shachaf> Aha, https://stackoverflow.com/questions/15178859/postgres-constraint-ensuring-one-column-of-many-is-present
06:56:58 <shachaf> Looks like someone has done this before.
06:59:24 <Cale> Usually what ends up happening, which doesn't actually solve the problem, but makes it harder to make the same mistake, and is nicer to write individual queries against, is whenever you would have had (A + B + C) * X, instead having three separate tables for A * X, B * X, and C * X, respectively. This doesn't scale very well if you have more than one sum type though.
07:00:27 <Cale> Well, it sort of kind of solves the problem, anyway
07:01:50 <Cale> But also if you do that, it perverts the types you use to discuss your data over in Haskell land, in a way which isn't very nice.
07:02:02 <Cale> (typically, anyway)
07:02:43 <Cale> Unless you take pains to do an extra translation away from what's actually stored in the DB -- you'll typically do a little of that, but it's more work then.
07:03:33 <Cale> It's like this little problem that gradually makes a lot of code a whole bunch shittier than it otherwise could be
07:04:06 <Cale> Maybe when the concat stuff that Ryan's been working on is ready, that will kill this bird as well.
07:04:46 <Cale> He's been working on a way to translate Haskell code to SQL queries via Conal's constrained categories thing
07:05:32 <Cale> ... because we also have the problem that we end up expressing all our queries both in SQL and then again in Haskell, and it's nearly always a bug if they don't agree.
07:12:53 <lambdabot> LOWI 300550Z VRB02KT 9999 FEW010 SCT180 12/10 Q1011 NOSIG
07:17:38 -!- hppavilion has joined.
07:23:48 -!- erkin has quit (Read error: Connection reset by peer).
07:24:53 -!- hppavilion has quit (Ping timeout: 260 seconds).
07:25:51 -!- doesthiswork has quit (Quit: Leaving.).
07:33:16 -!- FreeFull has quit.
07:35:30 <lambdabot> ENVA 300620Z 09006KT CAVOK 18/05 Q1010 NOSIG RMK WIND 670FT 14010KT
07:40:49 <lambdabot> ESSB 300620Z 05016KT CAVOK 19/08 Q1002
07:50:39 -!- hppavilion has joined.
08:09:49 -!- Sprocklem has quit (Ping timeout: 276 seconds).
08:13:40 <lambdabot> shachaf said 1h 45m 44s ago: https://www.youtube.com/watch?v=sULa9Lc4pck
08:14:21 <hppavilion> shachaf: Ah, seen it, like it. What was the context for this again?
08:26:56 -!- idris-bot has quit (Ping timeout: 260 seconds).
08:27:52 -!- Melvar has quit (Ping timeout: 260 seconds).
08:28:08 -!- sebbu has joined.
08:31:34 -!- sebbu2 has quit (Ping timeout: 255 seconds).
08:35:33 -!- Vorpal has joined.
08:35:33 -!- Vorpal has quit (Changing host).
08:35:33 -!- Vorpal has joined.
08:36:16 <oerjan> raptor jesus http://www.mezzacotta.net/dinosaur/
08:55:52 -!- wob_jonas has joined.
09:04:53 -!- Melvar has joined.
09:18:32 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
09:19:15 -!- AnotherTest has joined.
09:20:56 <HackEgo> [wiki] [[Befunge]] https://esolangs.org/w/index.php?diff=52348&oldid=51642 * Vorpal * (-2) /* Befunge-98 and beyond */ Update URL for cfunge
09:30:50 <oerjan> oh Vorpal managed to log on
10:16:16 -!- LKoen has joined.
10:25:46 -!- augur has quit (Remote host closed the connection).
10:27:45 -!- augur has joined.
10:32:25 -!- augur has quit (Ping timeout: 268 seconds).
10:49:45 -!- `^_^v has joined.
10:59:28 <zzo38> I can see all of the SMART attribute values in my computer, but what am I supposed to do with these numbers? It reports a worst temperature of 50 and a current value of 33; what numbers are normally expected? Attribute 9 (Power_On_Hours) has normalized value 1, which is close to the threshold of 0 (but not quite); is this supposed to be of any concern? There are errors such as "Error 341 occurred at disk power-on lifetime: 21029 hours (876 days + 5
11:02:18 <zzo38> No failures are reported though.
11:14:54 -!- oerjan has quit (Quit: Nite).
11:19:06 -!- ais523 has joined.
11:20:30 <wob_jonas> ais523: four stacks are enough for Turing-completeness in StackFlow
11:20:55 <wob_jonas> and you don't even need counter (Minsky) machines or exponential time loss for that
11:21:06 <ais523> is this an existence proof or a constructive proof?
11:22:32 <wob_jonas> Consider a machine with two stacks and two symbols available for the stacks, such that underflowing the stack isn't allowed, but you can have any number of states. This is Turing-complete, because you can compile an ordinary two-stack machine down to it by representing symbols as multiple symbols.
11:24:21 <wob_jonas> We want to compile this to StackFlow with four stacks. Stacks 1 and 2 in the StackFlow host simulate the two stacks of the guest in a straightforward way. Stacks 3 and 4 normally store garbage that we can't clean up.
11:26:16 <wob_jonas> For stack 3 and 4, have an alphabet that has one symbol for each state of the guest. When the guest wants to push to a stack, the host just pushes. When the guest wants to pop, the host first push the two possible next states of the guest to stacks 3 and 4, then pop the corresponding stack of the host.
11:26:44 <wob_jonas> The host has a rule that when 0 is popped from stack 1 or 2, you pop stack 3, and if 1 is popped from stack 1 or 2, you pop stack 4.
11:27:34 <ais523> you're basically just using stacks 3 and 4 as variables
11:27:40 <ais523> where only the top element matters
11:27:43 <ais523> to remember what you're doing
11:28:28 <wob_jonas> I don't yet know what StackFlow with two or three stacks can do.
11:34:21 <ais523> that said, I wonder how many states your 4-StackFlow example needs for TCness
11:34:31 <ais523> and how it compares to Magic's creature types
11:34:38 <ais523> (I'm aware the existing construction is slightly broken…)
11:35:15 <wob_jonas> it needs as many symbols for stack 3 and stack 4 as the original has states
11:35:44 <wob_jonas> and... um, where's that list of how many symbols and states can do universal Turing machines?
11:35:56 <wob_jonas> we can create starting elements in the stack for free in this construction
11:36:09 <HackEgo> universal turing machine? ¯\(°_o)/¯
11:38:22 <wob_jonas> 15 states and 2 symbols for a Turing-machine are supposedly enough. with an end of tape marker symbol you can turn that to... um, about 30 states and 3 symbols for a two-stack machine if underflowing stacks isn't allowed,
11:38:54 <wob_jonas> then with a double symbol representation you turn that to about 90 states and 2 symbols for a two-stack machine,
11:39:21 <wob_jonas> you can probably do it with fewer with smarter constructions
11:41:15 <wob_jonas> hmm, even 60 states should be enough if you go from 3 symbols to 2 symbols
11:43:10 <ais523> you could do something minimax-like, where you determine the bottom of the stacks "in software"
11:43:18 <ais523> rather than needing a separate state to represent it
11:44:10 <wob_jonas> sure, but then you'd have to construct a new small universal machine (tape or stack) from scratch, rather than just use the existing hard results about small universal Turing-machines
11:49:03 -!- augur has joined.
11:49:44 -!- idris-bot has joined.
11:50:34 <wob_jonas> it might be the easiest to start from a universal tape machine that needs an infinite periodic pattern on the tape, since a periodic pattern is cheap to create from end markers in a two-symbol stack machine
11:51:13 <wob_jonas> but I can't do calculations for that, because I don't know how long the periodic pattern is, and it does consume states in the stack machine
12:02:08 -!- ais523 has quit (Remote host closed the connection).
12:03:18 -!- ais523 has joined.
12:09:45 -!- boily has joined.
12:21:03 -!- augur has quit (Remote host closed the connection).
12:43:09 -!- hppavilion has quit (Ping timeout: 268 seconds).
12:43:13 -!- jaboja has joined.
13:11:19 -!- hppavilion has joined.
13:16:02 -!- ais523 has quit (Remote host closed the connection).
13:17:12 -!- ais523 has joined.
14:00:36 -!- doesthiswork has joined.
14:05:01 -!- `^_^v has quit (Quit: This computer has gone to sleep).
14:21:38 -!- augur has joined.
14:24:12 -!- `^_^v has joined.
14:26:10 -!- augur has quit (Ping timeout: 276 seconds).
15:06:41 -!- doesthiswork has quit (Quit: Leaving.).
15:11:40 <HackEgo> [wiki] [[Language list]] https://esolangs.org/w/index.php?diff=52349&oldid=52282 * Qwertyu63 * (+30)
15:12:07 <HackEgo> [wiki] [[StackFlow]] https://esolangs.org/w/index.php?diff=52350&oldid=41661 * B jonas * (+2380)
15:15:07 <wob_jonas> ais523: for the M:tG simulation, the other Alex's construction also uses Noxious Ghoul and Rotlung Reanimator. Does it also have the same bug as your construction? If not, I should find out how he avoids the bug; if not, we should mail him a question.
15:16:51 -!- hppavilion has quit (Ping timeout: 240 seconds).
15:17:00 <ais523> wob_jonas: it tells the players to do stacking order explicitly
15:17:31 <ais523> rather than trying to force it via the game rules
15:26:51 -!- jaboja has quit (Ping timeout: 240 seconds).
15:38:13 -!- DHeadshot has joined.
15:47:12 <wob_jonas> ais523: but... isn't that cheating?
15:47:22 <wob_jonas> not in the M:tG sense, but for the construction
15:47:41 <ais523> IMO yes, that's why I wanted a construction with no player choices
15:47:58 <wob_jonas> ok, I should probably just forget the original construction
15:58:27 <wob_jonas> The proof mentions Elixir of Immortality, and I was wondering what was the older tech (say before Coldsnap) for recycing all cards from your graveyard to your library, and whether you needed some horrific slow combo for it. Apparently it's Reminisce, from Onslaught.
15:59:04 <wob_jonas> I mean reshuffling all cards without losing any cards or other resources. There are a lot of ways to reshuffle only creatures, or reshuffle in exchange for exiling one card.
15:59:49 <Taneb> Not programming but have you guys seen http://www.mezzacotta.net/magic/goldfish/
16:00:01 <Taneb> Similar idea of Magic exploits
16:13:27 -!- DHeadshot has quit (Ping timeout: 240 seconds).
16:32:50 -!- AnotherTest has quit (Ping timeout: 240 seconds).
16:32:59 <wob_jonas> Taneb: yes, I know about that. And I hear if you use similar game rules but don't restrict to a cube that tries to make such combos hard, then you can get MUCH bigger loops.
16:37:39 -!- AnotherTest has joined.
16:41:57 -!- ais523 has quit (Ping timeout: 240 seconds).
16:51:17 -!- DHeadshot has joined.
17:32:05 -!- Phantom_Hoover has joined.
17:32:24 -!- __kerbal__ has joined.
17:37:46 <* Taneb> tries to find a place to live in Cambridge
17:39:25 <fizzie> Want me to ask a former Cambridge-er?
17:39:38 <Taneb> I think I've found something
17:39:42 <Taneb> But thanks for the offer
17:40:39 -!- __kerbal__ has quit (Ping timeout: 260 seconds).
17:40:40 <fizzie> I thought the river in Cambridge was pretty nice.
17:40:43 <fizzie> Full of people though.
17:41:23 <Taneb> It's certainly picturesque
17:47:22 -!- __kerbal__ has joined.
17:55:49 -!- __kerbal__ has quit (Ping timeout: 260 seconds).
17:57:49 <\oren\> 2001, a space oddysey: first there a black rectangle after that there'a a bunch of monkees and then a spaceship and then more spaceship for a while, and after that a weird old man who becomes a mutant baby, the end
18:02:08 <z0d> what about HAL?
18:02:31 <z0d> and the guys who found the monolith and got lost?
18:03:04 -!- AnotherTest has quit (Ping timeout: 255 seconds).
18:03:47 -!- `^_^v has quit (Quit: This computer has gone to sleep).
18:04:21 -!- `^_^v has joined.
18:08:08 -!- __kerbal__ has joined.
18:10:39 -!- __kerbal__ has quit (Client Quit).
18:20:17 -!- Phantom_Hoover has quit (Quit: Leaving).
18:23:33 -!- `^_^v has quit (Quit: This computer has gone to sleep).
18:24:39 -!- FreeFull has joined.
18:32:48 -!- `^_^v has joined.
18:33:34 -!- ais523 has joined.
18:34:39 <Taneb> Really beginning to feel like an Adult
18:35:31 <boily> Tanelle. are you wearing a necktie? do you fill your own taxes? do you listen to Top40 radio? what is an adult?
18:36:39 <Taneb> boily, no, I don't think anyone in the UK who's not self-employed does, I listen to BBC Radio 4 so maybe I've got that one beat, don't know
18:42:25 <int-e> filling taxes, hmm.
18:42:43 <int-e> boily: an adult is an expert in adulery, I always thought.
18:42:45 -!- erkin has joined.
18:43:41 -!- `^_^v has quit (Quit: This computer has gone to sleep).
18:43:54 -!- `^_^v has joined.
18:52:07 -!- ais523 has quit (Remote host closed the connection).
18:53:18 -!- ais523 has joined.
19:00:05 <zzo38> How will my method for encoding a Huffman table compare with that used in DEFLATE?
19:00:50 <zzo38> (It might depend on how it encodes numbers, which is the part that I did not specify.)
19:07:49 <\oren\> someone should make a new centralized VCS and call it eht, to come after svn
19:21:21 <wob_jonas> zzo38: wait, you have a new method for encoding a Huffman table? when was that?
19:21:47 <wob_jonas> zzo38: different from DEFLATE and jpeg and other (more modern) compressed formats?
19:22:34 <pikhq> Note that encoding a Huffman *table* is just the small bit telling you what the table is, without any actual data.
19:22:52 <pikhq> Most specs using Huffman encoding use somewhat different mechanisms.
19:25:49 -!- erkin has quit (Ping timeout: 276 seconds).
19:29:08 <zzo38> My method has the property that a prefix of any sufficiently long sequence of bits will encode a valid Huffman table, and that the encoding is bijective (you are guaranteed to get the same bits if you decode and then reencode the same Huffman table; if you alter the Huffman table it will change though)
19:32:54 <zzo38> You have a number of remaining 62-bit codes, which is initially 2^62. Every time a code length is transmitted, this value is reduced by 2^(62-n) if n is the code length transmitted; is used to determine which code lengths are still valid.
19:35:05 <zzo38> Code a 1 bit followed by a number to encode a used symbol, where the number is the index into the MRU list of code lengths. If the number exceeds the code lengths in use, then they are ascending numbers, and all of them up to and including the chosen code length are put into beginning of MRU list in reverse order; otherwise it is a normal MRU list.
19:35:54 <zzo38> Code a 0 bit followed by a number to specify that many unused symbols; if there are remaining symbols needed, the index into the MRU list is coded next without an intervening 1 bit.
19:36:17 <zzo38> Numbers have a minimum value of 1 and a maximum value that varies.
19:38:15 <zzo38> Since the number of remaining 62-bit codes has to be zero at the end, this can be used to decide how many further unused symbols are possible, and when near the end what code lengths may still be in use too. If no further unused symbols are possible, the intervening 1 bit is not needed, and if the maximum value of a number is 1, the number is encoded with no bits.
19:38:38 <zzo38> wob_jonas: That is how it is work; can you understand them now?
19:46:47 <zzo38> It may be helpful to initialize the MRU list, although I am unsure.
19:50:55 -!- boily has quit (Quit: VITAL CHICKEN).
19:54:17 <zzo38> The other thing to consider is if, due to the kind of data expected to be encoded, it might help to alter the order of the symbols rather than just 0 to 255 or whatever.
20:04:01 <wob_jonas> zzo38: I don't think I followed that because I don't really remember how Huffman tables are supposed to work, but ok
20:04:46 -!- ais523 has quit (Remote host closed the connection).
20:05:56 -!- ais523 has joined.
20:06:40 -!- sleffy has joined.
20:09:11 <zzo38> They are code lengths as number of bits needed to encode that symbol. For example, if you have input with three symbols A, B, C, and if A is much more common than B and C, then you might encode A as "0", B as "10", and C as "11".
20:10:34 -!- __kerbal__ has joined.
20:10:59 -!- ais523 has quit (Remote host closed the connection).
20:11:30 <zzo38> That is how Huffman codes are working.
20:12:08 -!- ais523 has joined.
20:12:17 -!- erkin has joined.
20:17:39 <HackEgo> [wiki] [[User:B jonas]] https://esolangs.org/w/index.php?diff=52351&oldid=50895 * B jonas * (+92)
20:20:49 -!- _fractal_ has quit (Ping timeout: 255 seconds).
20:25:01 -!- shikhin has quit (Ping timeout: 240 seconds).
20:25:01 -!- catern has quit (Ping timeout: 260 seconds).
20:27:21 -!- catern has joined.
20:27:22 -!- shikhin has joined.
20:27:33 -!- LKoen has quit (Ping timeout: 255 seconds).
20:28:00 -!- LKoen has joined.
20:32:45 -!- fractal_ has joined.
20:37:39 -!- `^_^v has quit (Quit: This computer has gone to sleep).
20:41:09 -!- ais523 has quit (Read error: Connection reset by peer).
20:45:37 -!- `^_^v has joined.
20:45:54 -!- ais523 has joined.
20:48:28 <__kerbal__> wob_jonas: If you are still on in a few hours, I might bring Integbot online so that you can finally see how user-defined functions work
20:49:07 <__kerbal__> I'm not in a place where I can do it right now, though
21:03:56 <HackEgo> [wiki] [[Special:Log/newusers]] create * Zayne * New user account
21:07:46 <HackEgo> [wiki] [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=52352&oldid=52285 * Zayne * (+164) /* Introductions */
21:08:02 <HackEgo> [wiki] [[Hello]] https://esolangs.org/w/index.php?diff=52353&oldid=33573 * Zayne * (+186) adding my interpreter
21:08:13 <wob_jonas> kerbal: ok, if you do bring it up, please try int-e's quine and put it on the wiki
21:08:15 <HackEgo> [wiki] [[User:Zayne]] N https://esolangs.org/w/index.php?oldid=52354 * Zayne * (+42) Created page with "I made the Hello Interpreter in Python 3.5"
21:14:35 <HackEgo> [wiki] [[Hello++]] https://esolangs.org/w/index.php?diff=52355&oldid=45181 * Zayne * (+275)
21:17:51 <HackEgo> [wiki] [[Hello++++]] https://esolangs.org/w/index.php?diff=52356&oldid=51054 * Zayne * (+169) /* Interpreters */
21:22:26 -!- augur has joined.
21:26:19 <__kerbal__> So, I've been thinking about making Integ's sister language Floateg
21:26:30 -!- augur has quit (Ping timeout: 240 seconds).
21:27:08 <__kerbal__> Floateg would have a continuous non-discrete tape, where explicitly provided values define a piecewise curve
21:28:13 <__kerbal__> In this way, you can have non-integer addresses; Floateg would figure out what value a non-provided address should have
21:31:12 <__kerbal__> For instance, if you wrote 0 to address 0 and 1 to address 1, address 0.5 would be computed as 0.5.
21:32:15 -!- sleffy has quit (Ping timeout: 268 seconds).
21:40:50 -!- `^_^v has quit (Quit: This computer has gone to sleep).
21:42:19 -!- DHeadshot has quit (Ping timeout: 276 seconds).
22:02:41 <\oren\> BJARNE STROUSTRUP made the output formatting in ostream STATEFUL meaning that after any long operation you have to reset it
22:02:45 <\oren\> HE IS THE WORST INCOMPETENT ASSHOLE IN ALL THE HISTORY OF COMPUTER SCIENCE
22:04:13 <wob_jonas> \oren\: yes, and that's just one of the multiple stupid problems the C++ standard library formatted IO has
22:04:57 <wob_jonas> \oren\: however, from looking at various languages, I think that designing a good formatted IO library is REALLY hard, there are very few times anyone has succeeded in it,
22:05:16 <wob_jonas> so Bjarne isn't really incompetent compared to other language designers.
22:05:35 <wob_jonas> shachaf: I happen to like C's printf and scanf.
22:06:11 <shachaf> It's convenient but not type-safe.
22:06:46 <wob_jonas> And unlike many old designs, printf/scanf has become better as the language aged, because now compilers can check the types for you at compile time (unless you use a dynamic format spec).
22:08:38 -!- augur has joined.
22:16:37 -!- __kerbal__ has quit (Quit: Page closed).
22:21:30 <ais523> <wob_jonas> shachaf: I happen to like C's printf and scanf. ← I've seen someone argue to me on reddit that printfalikes are in general a really large security hole, and I'm not convinced I disagree
22:21:58 <wob_jonas> ais523: I think they're a security hole only if people use variable format specs
22:22:24 <wob_jonas> ideally a printf-like should have as easy syntax as printf, but the format string and type of arguments should be checked at compile time
22:22:31 <ais523> they were also implicated as a common vector for the recent stack overlap exploit
22:22:49 <wob_jonas> rust's printf macros do the compile time checking right, but fail horribly in most other respects
22:22:49 <ais523> OCaml has a printf close to what you describe, IIRC
22:22:56 -!- Sprocklem has joined.
22:24:05 <\oren\> all it really needs is to do something like
22:24:25 <\oren\> cout.print(some_double);
22:24:42 <\oren\> and then have precision etc as optional argumnets
22:25:13 <wob_jonas> \oren\: no no no, a template string is usually a better idea than that (though you could have something like that as a backend exposed in the api)
22:25:26 <\oren\> or if you have a hardon for operator overloading, use operato()
22:26:32 <zzo38> The PRINTF() SQL function in SQLite will check that the format is OK; it will only do this if you call it as a SQL function though
22:28:01 <wob_jonas> when you print several values together (which often happens), the template syntax is much shorter and thus more readable, which is great. in C++ stdlib, which doesn't use a template string, people (including me) often make the mistake of forgetting to print a separator between two values,
22:28:39 <wob_jonas> because in all the verbose cout << "pos=(" << setprecision(6) << obj.position.x << "," << obj.position.x << ")," nonsense, you don't notice that you've forgotten a << " " << somewhere. the result is running a program for two hours, then noticing that you can't use the output because two numbers are printed directly ran together.
22:29:21 <wob_jonas> (This is a problem even if the formatting state set by setprecision and similar isn't persistent.)
22:29:57 <wob_jonas> Whereas if you write printf("pos=(%.6g,%.6g)", verbose stuff here, then you are much less likely to forget a separator
22:30:39 <shachaf> C++11 variadic templates are TG
22:33:44 <wob_jonas> Luckily most languages these days are sane enough that none of this stuff is built in. In C++, you can just use printf, or write a new output library, rather than use the C++ stdlib stream output functions. In rust too, you could write better printf macros, and I hope someone will (and I might try myself, but there are certain difficulties).
22:53:59 -!- augur has quit (Remote host closed the connection).
23:06:50 -!- __kerbal__ has joined.
23:07:28 <__kerbal__> I don't think that I am going to be able to activate Integbot tonight, but there's a slight possibility of it, I guess
23:11:59 -!- __kerbal__ has quit (Ping timeout: 260 seconds).
23:12:29 <shachaf> Can you write type-safe printf with C++ templates?
23:13:30 <alercah> but only if the format string is constant of course
23:13:39 <wob_jonas> shachaf: in modern enough C++, yes.
23:14:03 <wob_jonas> shachaf: the problem is that in older C++, you can't read the template string at compile time
23:16:27 <\oren\> you could do it with C macros
23:17:26 <\oren\> it would jsut ahve to have some arbitrary limit on number of inputs
23:18:37 <alercah> you couldn't parse the string out though still
23:19:09 <alercah> you'd have to do something weird like FMT_STRING("foo", FMT_STRING_VAR, "bar")
23:19:46 <alercah> and if you allow that then you could do the same with just variadic templates in C++ I think
23:19:58 <alercah> (or non-variadic ones up to a fixed length)
23:20:28 <\oren\> actually hold on, I have an idea: suppose that format strings were not just string
23:20:43 <\oren\> instead, like in Fortran, have a format object
23:21:14 <\oren\> that you initialize using a string
23:22:39 <\oren\> cout << mkformat("apples % oranges %") << 2 << 5;
23:24:05 <alercah> \oren\: you can't do that type safely though
23:24:46 <alercah> you need to get the string into the arguments to a template and by far the easiest way is via user-defined literals
23:26:26 -!- sleffy has joined.
23:31:40 -!- Warrigal_ has joined.
23:42:06 -!- DHeadshot has joined.
23:46:44 -!- Sprocklem has quit (Ping timeout: 260 seconds).
23:49:31 -!- AnotherTest has joined.
23:55:56 -!- DHeadshot has quit (Ping timeout: 268 seconds).