←2019-08-14 2019-08-15 2019-08-16→ ↑2019 ↑all
00:07:58 <shachaf> http://blog.sigfpe.com/2009/10/buffons-needle-easy-way.html is TG
00:09:45 -!- ais523 has joined.
00:24:05 -!- tromp has joined.
00:27:37 <ais523> @messages?
00:27:38 <lambdabot> Sorry, no messages today.
00:27:44 -!- ais523 has quit (Quit: quit).
00:28:30 * kmc is TG
00:28:51 -!- tromp has quit (Ping timeout: 264 seconds).
00:51:22 <esowiki> [[Disan]] M https://esolangs.org/w/index.php?diff=65501&oldid=65496 * A * (-18)
00:53:56 -!- FreeFull has quit.
01:00:42 -!- tromp has joined.
01:04:55 -!- tromp has quit (Ping timeout: 252 seconds).
01:49:51 -!- ais523 has joined.
01:50:29 <ais523> wob_jonas: is 48 hours + 1 second a long weekend? (possible due to leap seconds, or do you count the extra second as part of one of the 48 hours?)
01:54:35 -!- tromp has joined.
01:59:21 -!- tromp has quit (Ping timeout: 250 seconds).
02:26:07 -!- ais523 has quit (Quit: quit).
03:42:36 -!- tromp has joined.
03:47:27 -!- tromp has quit (Ping timeout: 264 seconds).
04:38:48 -!- atslash has quit (Quit: This computer has gone to sleep).
04:42:18 -!- atslash has joined.
05:30:52 -!- tromp has joined.
05:36:03 -!- tromp has quit (Ping timeout: 264 seconds).
05:57:22 -!- adu has quit (Quit: adu).
06:21:25 <myname> "Must have knowledge of object oriented programming using HTML/CSS, JQuery"
06:21:25 <myname> https://jpl.jobs/jobs/2019-10773-Engineering-Technical-Facilities-Part-Time-Internship
06:57:29 -!- tromp has joined.
07:02:03 -!- tromp has quit (Ping timeout: 252 seconds).
07:03:52 -!- tromp has joined.
07:26:21 -!- cpressey has joined.
07:34:09 -!- tromp has quit (Remote host closed the connection).
07:39:20 <cpressey> Still on (my personal spin on) shachaf's error handling thing, I think one problem is languages that raise exceptions at the drop of a hat. "Key not found in map" and "divisor is zero" are not exceptional conditions in the same sense "file not found" or "connection was reset" are.
07:40:18 <cpressey> You can statically insist that the key exists, that the divisor is zero, that the list is not empty, that the pointer is non-null.
07:41:34 <int-e> cpressey: I could get behind that, yeah. As the name suggests, exceptions /should/ be used for exceptional conditions that a caller cannot be reasonably expected to handle.
07:44:55 <shachaf> I certainly agree that exceptions for those things are scow.
07:45:09 <shachaf> Well, even C raises an exception on division by 0.
07:46:57 <cpressey> A good way to express these static checks is to write tiny proofs that they can't happen. Dependent types lets you do that, but IMO they're difficult to use and they'll never get widespread adoption. Refinement types seem to do much the same thing (in fact might be a kind of dependant typing) but are much more intuitive.
07:47:47 <shachaf> Those seem like good ideas that have never been made that usable as far as I know.
07:48:15 <int-e> Then again once you have a good exception mechanism I suppose it's unavoidable that they will be used for things like keys not present in a map, and as a general non-local return mechanism as well.
07:48:58 <cpressey> Apparently the next version of Ada will have dependent types. If so, it will make it the only non-experimental *imperative* language to have them, as far as I know.
07:49:17 -!- tromp has joined.
07:49:38 <int-e> Java's Error/Exception distinction is actually an attempt to distinguish between exceptions-as-exceptional-situations and exceptions-as-part-of-the-interface
07:49:53 <cpressey> Granted, "no one" uses Haskell, "no one" uses SMT solvers
07:50:13 <int-e> cpressey: oh?
07:50:19 <int-e> cpressey: news to me on both accounts
07:50:33 <int-e> (Most Isabelle users use SMT solvers all the time!)
07:50:34 <cpressey> Haskell is a good idea that has never been made usable
07:50:40 <int-e> (Of course nobody uses Isabelle)
07:50:41 <cpressey> (I'm being facetious)
07:51:07 <int-e> (This one is actually much closer to the truth. I suspect there are about 100 serious Isabelle users? Maybe I'm wrong.)
07:51:08 <cpressey> For refinement types, my point of reference is Liquid Haskell
07:52:03 <cpressey> int-e: To be fair, there are a lot of systems *like* Isabelle, if you added up all those users, it might make a dent in the statistics.
07:52:09 <int-e> It's really hard to estimate these things! (Coq is inexplicably far more popular. It's so much harder to use!)
07:52:31 <cpressey> I got the impression Lean is the New Hawtness in this area
07:53:18 <cpressey> And then there's Z3
07:53:31 <int-e> Z3 is an SMT solver, like CVC4 and Yices?
07:53:38 <cpressey> a name which will forever make my think of Infocom when I read it
07:53:39 <int-e> Not in the same boat, I thought.
07:54:11 <cpressey> I think Z3 is more SAT than SMT
07:54:25 <cpressey> not entirely sure, tbh
07:54:29 <int-e> Nah, Z3 is an SMT-solver.
07:54:58 <cpressey> yeah. http://theory.stanford.edu/~nikolaj/programmingz3.html
07:55:03 <int-e> SMT = Satisfiability modulo theories = DPLL + theory oracle; all the SMT solvers have a SAT solver core.
07:55:49 <int-e> This is in contrast to first-order theorem provers like Vampire, iProver, E, the old Prover9 and Mace4 ... and a bunch of others I forgot.
07:57:10 <int-e> What seems to be true is that SMT solvers are slowly acquiring limited first-order logic support (*some* universal quantifiers). But I don't know whether this is practical.
07:57:27 <cpressey> Hmm... so the reason Z3 has bindings to a bunch of regular programming languages is because you're supposed to write the "tactics" in the regular programming language?
07:57:57 <cpressey> I mean, among other reasons I suppose
07:58:04 <int-e> cpressey: Compilers can use SMT solvers for loop optimizations (in particular elision of bounds checks)
07:58:28 <int-e> (using the linear integer arithmetic fragment)
07:58:50 <cpressey> right, and Liquid Haskell uses a SMT solver (Z3 or some others) to let you write tiny proofs of the properties of the functions you've written
07:59:53 <int-e> And for such things it's nice to have an API instead of having to write out thousands of SMT-lib files, to be parsed by the solver, and then reading back the solver's output...
08:00:41 <int-e> And then there's incremental solving... (basically: you set up common constraints, then add and remove some additional constraints repeatedly)
08:02:00 <cpressey> A bit like superoptimization, except for theorems?
08:02:00 <int-e> Anyway, lots of stuff going on in that area.
08:03:25 <int-e> I just think of it as an advanced backtracking technique. Meta-backtracking, if you will.
08:05:34 <int-e> Hrm... I thought this program was going to run for about 8 hours... it's at 1136 minuts already.
08:05:36 <cpressey> Even without such a general solution, you can fairly easily build a static analysis phase that complains if you say x/y in a context where you don't know y is 0, and so forth.
08:05:46 <cpressey> *not 0
08:06:17 <int-e> Ah of course static analysis tools are also an important target for SMT solver APIs :)
08:06:34 <int-e> (Though I guess the compiler example is a special case of that.)
08:07:01 * int-e goes looks up supercompilation. (I have a vague idea, but no definition.)
08:08:00 <int-e> https://en.wikipedia.org/wiki/Metacompilation is impressively short :P
08:10:23 <cpressey> I know it as "here is a constraint, go try every (short!) permutation of machine instructions to find one that satisfies it"
08:10:36 <cpressey> Often takes longer than 8 hours
08:11:02 <cpressey> https://en.wikipedia.org/wiki/Superoptimization
08:11:23 <cpressey> I guess "supercompilation" is a different thing
08:11:56 <int-e> Ah!!! I conflated two different terms there. Thanks!
08:12:28 <int-e> (Totally different concepts.)
08:13:36 <int-e> cpressey: "often takes longer than 8 hours" <-- I hope that in practice you determine in advance how much time you want to spend on this kind of foolishness and then you take the best result you got in that timeframe?
08:13:57 <int-e> (I guess you can also optimize as a continuous process and deploy everyt improvement you find)
08:16:33 <int-e> I can actually see a company like Google doing such things. "We spend 0.001% of our computational power on trying to superoptimize our inner loops. If we manage to improve one of them by 1% that will pay off." (numbers are adjustable.)
08:17:49 <cpressey> int-e: I think, other than for research and entertainment, it is mainly done by compiler developers
08:18:56 <int-e> I suppose nVidia & co. are also doing such things?
08:19:38 <shachaf> whoa, lots of conversation
08:19:41 <int-e> (Whenever there's a new game release, a few weeks later there's a graphics driver update, presumably with specially crafted binaries for the most important shaders.)
08:19:41 <shachaf> SMT solvers are TG.
08:20:13 <cpressey> Interesting. I can see how hardware manufacturers might care about it too, but I really don't know
08:20:29 <int-e> cpressey: I'm speculating, of course.
08:20:50 <int-e> But consumer graphics cards sell by framerates in popular games.
08:21:17 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:22:13 -!- Lord_of_Life has joined.
08:23:57 <shachaf> it's a shady industry
08:24:31 <int-e> cpressey: I'm not speculating about the new driver releases... those can be observed in practice. "<manufacturer> releases new drivers after release of <game>, solving some minor glitches and improving framerates by 10%" is a fairly common news item in tech news.)
08:25:14 <int-e> cpressey: I don't know for sure whether they include precompiled shaders, but this would go a long way towards explaining their ridiculous sizes.
08:26:15 <shachaf> It would sure be better if they just gave you an interface that let you optimize your shaders yourself.
08:30:08 <int-e> "Supported operating systems: Microsoft Windows 98, 98SE, ME, 2000, XP, 2003, Media Center, Vista and Windows 7" ... hmm I think I approve of this list ;-)
08:32:48 <int-e> Oh wow, I had not seen that yet... nVidia has "Game Ready Drivers" (focusing on "support for the latest games") and "Studio Drivers" ("prioritizes stability and quality for creative workflows")
08:33:35 <int-e> Anyway, 496MB download. Explain that :)
08:36:53 <cpressey> maybe they forgot to run `strip`
08:40:18 <shachaf> Are programs over 1024 bytes even necessary?
08:40:39 <shachaf> Just imagine the best program out of all 1024-byte programs.
08:40:48 <shachaf> It'd be so good.
08:40:55 <shachaf> I wish I had a halting oracle.
08:41:02 -!- AnotherTest has joined.
08:41:25 <int-e> shachaf: yes it will halt (you won't prove me wrong) ;-)
08:42:03 <shachaf> But my program was "while (1);"
08:42:21 <int-e> so what?
08:42:32 <int-e> what's your uptime?
08:44:21 <int-e> There's a second part to this... a halting oracle is not what you really want.
08:44:51 <int-e> What good is a program that halts after 10^10^10^10 operations? And that's a small number in the context of computability...
08:44:57 <shachaf> well, i'd at least like it to halt with what it's doing to Sun
08:45:24 <int-e> I don't think the program will affect the Sun much at all. :)
08:45:27 <shachaf> Anyway there are plenty of uses to a halting Oracle.
08:46:05 <shachaf> If you have one you can certainly answer the more limited kinds of question you're talking about too.
08:46:08 <int-e> Sure, you could... determine the truth... of certain mathematical conjectures.
08:46:27 <int-e> (it's not a proof if it involves an oracle)
08:47:15 <int-e> But I imagine a halting oracle wouldn't be cheap.
08:47:26 <shachaf> I could probably extract bits of the shortest proof, one at a time?
08:47:45 <int-e> Maybe it would work like a drug dealer though... you get one question for free. :P
08:48:09 <shachaf> I've asked before what you would do with a single-use halting oracle.
08:48:11 <int-e> ("you" being the whole of humanity :P)
08:48:39 <int-e> (Just imagine the fight we would have over which question to ask!)
08:50:38 <int-e> And imagine the disappointment when we cleverly bundle everything we can think of together in a big conjunction (program that looks for counterexamples to Collatz, Goldbach, Riemann...) and the answer is that the program halts.
08:51:30 <int-e> shachaf: I don't remember you asking that before. Maybe I missed it, maybe it didn't spark my interest at the time. *shrugs*
08:51:36 <int-e> Minds are weird!
08:52:37 <shachaf> Maybe I only asked in other places.
08:53:22 <cpressey> I don't want a halting oracle, I want a greater recognition that there are (ideally) two classes of "programs": batch jobs that always halt, and reactive programs that never halt (until the administrator explicitly stops them.)
08:54:09 <cpressey> So many of the programs we use are the reactive kind, but so many of the languages we use assume you're going to write the batch kind
08:54:15 <shachaf> That seems irrelevant to questions about halting oracles.
08:54:30 <shachaf> These are programs that don't halt productively.
08:54:39 <shachaf> I mean, the way in which they don't halt is productive.
08:55:27 <cpressey> I'm in more of an engineering mood than a CS mood this morning I suppose
08:56:13 <shachaf> Oh, then sure.
08:56:24 <shachaf> How do languages assume one or the other?
08:57:05 <cpressey> And it's not a huge practical problem, but, teaching kids to write games in Python or whatever and you have to explain why there is "main" and an "event loop" and this is just distraction
08:57:51 <shachaf> A distraction from what?
08:58:18 <shachaf> "while (true) { get_input(); compute(); show_game(); }" seems like a pretty reasonable description of what you want the computer to do.
08:59:35 <int-e> cpressey: Hmm, what about initialization? Do you want to do that in awk style, defining a special event for it? BEGIN { ... }
08:59:48 <int-e> (awk and sed are kind of event based ;-) )
08:59:59 <int-e> (in a very awk-ward way, of course.)
09:00:25 <int-e> @google "sedistic"
09:00:27 <lambdabot> https://worldofwarcraft.com/en-us/character/us/hyjal/sedistic
09:00:32 <int-e> maybe not
09:01:27 <cpressey> shachaf: A distraction from how you design and code the reactive application that is the game.
09:02:08 <int-e> do people write games in erlang?
09:02:29 <shachaf> Are you saying something other than that there should be higher-level libraries and things for writing games?
09:02:35 <cpressey> int-e: I would totally believe that there are some MMP servers written in Erlang
09:02:37 <int-e> (am I missing another prominent actor-based programming language?)
09:03:40 <cpressey> shachaf: Well, I'm talking about programming paradigms. One such is put front-and-center in most languages, but it is secondary or basically ignorable in a lot of applications.
09:05:31 <int-e> while we're throwing out paradigms... am I the only one who thinks FRP is a mismatch with game programming because it's so hard to make the set of actors dynamic?
09:06:07 <int-e> more precisely, exprssing event flow by arrows
09:07:20 <int-e> The problem is that I formed this idea when I saw the first articles on arrow-based FRP and it stopped me from ever trying FRP myself... so it's quite possible that it's a misconception.
09:09:28 <cpressey> int-e: Well, all the other actor-based languages I can think of, I can't call prominent. And almost all the uses of "FRP" I hear, have only a tangential relation to the FRP you're talking about :)
09:09:30 <int-e> (There's a second aspect that's holding me back there... lazy evaluation and real-time are at odds as well.)
09:10:13 <Taneb> int-e: a lot of proponents of FRP hold that arrow-based FRP doesn't count, for what it's worth
09:10:52 <int-e> (And I have not encountered FRP outside of Haskell, which is probably entirely my own fault.)
09:11:05 <cpressey> It's functional because it's got functions in it, it's reactive because it reacts to events, it's programming because it's a program
09:11:11 <int-e> Taneb: sounds fair
09:11:18 <cpressey> I conclude that Visual Basic is FRP
09:11:26 <int-e> cpressey: Excel!
09:12:16 <int-e> (this is just a refinement of the view that Excel is a functional programming model... it's reactive because cell updates trigger further cell updates)
09:14:05 <cpressey> int-e: Excel is honestly a lot closer to FRP than many JS libraries
09:14:25 <int-e> cpressey: I think the weakest link here is "P".
09:14:41 <int-e> (of the three letters FRP)
09:20:33 <int-e> cpressey: Have you ever played with Squeak?
09:22:18 -!- john_metcalf has quit (Read error: Connection reset by peer).
09:23:10 <cpressey> int-e: Not really. Smalltalk never really excited me. Though I can see how it's probably a bit closer to what I'm talking about here.
09:23:11 <int-e> (I tried it once... and couldn't get over the fact that you have to work within the Smalltalk VM for everything. I want my external editor...)
09:23:41 <int-e> (And I want actual source code as well. Not "click on this window representing a class to add a method to it")
09:24:20 <cpressey> Yeah, not really a fan of languages that want to stay inside their own "hermetic" environment
09:24:28 <Taneb> (I tried it once but gave up because something wanted me to middle-click)
09:24:45 <Taneb> (at the time I was on a laptop with no middle click)
09:25:36 <int-e> cpressey: Which is sad because Smalltalk per se looks kind of cool.
09:26:35 <int-e> Maybe I should look at Swift. (I saw it's "Objective C minus C", so that should give us Smalltalk again :P)
09:27:16 <int-e> struct Player { <-- uhm... yeah... nope.
09:28:24 <shachaf> ?
09:28:39 <int-e> (Just peeking... and it looks a lot closer to Go than I expected from that description (tbf, the description came from Wikipedia).)
09:28:58 <int-e> shachaf: "nope" as in "not Smalltalk" and also "not minus C".
09:29:15 <int-e> shachaf: "struct" is a big part of C to me ;)
09:30:09 <shachaf> I don't think Swift is very Smaltalky.
09:30:43 <cpressey> I think Objective C is probably cursed. I will not go into details, unless perhaps you ply me with rum. Ahhrrr.
09:30:56 <int-e> shachaf: And you're right.
09:31:48 <int-e> shachaf: 'At WWDC 2014, Apple introduced a new language, Swift, which was characterized as "Objective-C without the C".' is the description I was referring to, from https://en.wikipedia.org/wiki/Objective-C#Apple_development_and_Swift
09:32:02 <shachaf> I once looked into Objective C. I reimplemented NSObject and things to figure out what was going on.
09:32:08 <int-e> shachaf: And now that I took a closer look I totally disagree with that description.
09:32:08 <shachaf> In... 2012? Man.
09:32:13 <shachaf> Anyway it's a bizarro language.
09:32:28 <cpressey> Aye, Swift would of course inherit the curse.
09:33:36 <int-e> shachaf: I guess they still have keyword arguments, and methods, and they dropped all the unmanaged, unsafe memory stuff.
09:34:09 <int-e> 'let 🐶🐮 = "dogcow"'
09:34:21 <int-e> just what I always wanted... smileys as identifiers. yuck.
09:38:19 <int-e> oh, perhaps shachaf would like this: if let constantName = someOptional { ... } else { ... }, corresponding to case someOptional of Just constantName -> ... | Nothing -> ...
09:39:21 <shachaf> It's related to the thing I want but it seems kind of worse.
09:39:56 <shachaf> Wait, no, I'm thinking of a different Swift feature with a similar syntax.
09:41:03 <shachaf> It seems like a reasonable syntax for a special case of pattern matching? Not particularly better or worse than case.
09:41:35 <cpressey> It seems like a way to overload the term "else"
09:42:38 <cpressey> Why not go all the way and overload "or"
09:42:41 <shachaf> "guard let" is the one I was thinking of that was kind of annoying.
09:43:45 <shachaf> guard let x = y { ...; return ...; }
09:43:52 <shachaf> Uh, guard let x = y else { ...; return ...; }
09:44:08 <shachaf> The else block has to have an exit statement.
09:45:02 <shachaf> I think it would be better if: Instead of requiring an exit, it could provide a substitute value; instead of being part of the "let" syntax, it was just an expression, as in "let x = guard y else { ... }"
09:47:47 <cpressey> I like && and || in Bourne shell for this.
09:48:28 <cpressey> The exit code is only nominally an integer; it's actually some kind of error-type value.
09:51:01 <cpressey> ; should really do what && does (I think there's some flag in modern shells that makes it so.)
09:53:19 <int-e> oh they do the Java thing where an enum is really more of a tagged union...
09:53:57 <shachaf> That's a Java thing?
09:53:59 <int-e> and the matching syntax for that is ugly: case .upc(let numberSystem, let manufacturer, let product, let check):
09:54:05 <int-e> shachaf: I first saw it in Java
09:54:33 <shachaf> Java does that?
09:55:09 <shachaf> I thought Java made you use class inheritance to emulate tagged unions.
09:55:35 <int-e> Java goes a bit beyond that. An Enum is syntax for a base class (the enum type) and subclasses for each enum element... which can carry their own data and methods.
09:55:59 <int-e> No, modern Java does that for you.
09:56:43 <shachaf> Do you have an example?
09:56:55 <int-e> No.
09:57:25 <shachaf> I looked it up and it didn't seem to be that way but I might've looked at the wrong thing.
09:57:27 <int-e> @google java enums
09:57:28 <lambdabot> https://www.w3schools.com/java/java_enums.asp
09:58:08 <shachaf> tdnh
09:58:27 <int-e> yeah it didn't because it has too little detail
09:58:36 <int-e> I'm sure you can find something though :P
10:00:20 <shachaf> I looked at a bunch of things before asking. But maybe now I've found an example of the thing you're talking about.
10:00:45 <shachaf> Oh well, I don't care about Java.
10:09:13 <int-e> shachaf: Hmm I seem to be misremembering the details. https://docs.oracle.com/javase/specs/jls/se12/html/jls-8.html#jls-8.9.1 <-- each enum element has a class body, but I'm not sure whether that's enough to associate arbitrary additional fields to each case. I don't want to try either. The examples I've seen just associate fixed values with each case (planets with weight and size seem to be...
10:09:19 <int-e> ...popular)
10:10:34 <int-e> and it's amazingly hard to find the *documentation* of this feature... I had to start with "java syntax reference" because with anything more specific the search results would be swamped with useless secondary sources (tutorials, guides... well-intentioned but they barely scratch the surface)
10:10:53 <int-e> ... back to Swift.
10:11:31 <shachaf> Why are you looking at all these languages lately?
10:11:44 <shachaf> Did you also come to the conclusion that all languages are terrible?
10:13:24 <int-e> I've realized that I've never looked at what those languages really are.
10:13:59 <int-e> I mean, "C-like managed language" is not detailed enough to criticize or embrace a language :P.
10:14:12 <shachaf> Did you hear about this exciting update? https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/
10:14:24 <shachaf> 23:30 <shachaf> So Dropbox's new "mobile strategy" is to write everything twice, once for each platform.
10:14:27 <shachaf> 23:31 <shachaf> How did we get to the point where each platform has its own programming language that you have to use? Wasn't this the point of high-level languages in the first place?
10:15:01 <cpressey> shachaf: I'll thank you to stay out of my walled garden
10:15:23 <shachaf> This is how you computers now.
10:15:37 <int-e> We allowed vendor-lockin for software (in the name of security) is how we got to this point.
10:16:36 <int-e> There's really no mystery to it. Apple in particular wants this to be expensive. But I don't think Google is far behind, Microsoft has been doing the same thing on an API rather than a language level, for ages.
10:29:52 <fizzie> int-e: While you can have custom fields and methods on an enum constant, you can't readily *access* them, because the enum constant is of the enum type. It's a little like doing `SomeConcreteClass foo = new SomeConcreteClass() { String notSoUseful = "foo"; };`.
10:30:02 <fizzie> int-e: What you *can* do with them is define some abstract methods in the enum type, and then implement them in the constant: https://ideone.com/TlCjqB
10:30:41 <fizzie> The standard example is 8.9.3-3 in https://docs.oracle.com/javase/specs/jls/se12/html/jls-8.html#jls-8.9.3
10:32:21 <cpressey> int-e: Remember Microsoft J++?
10:36:06 <int-e> cpressey: nope
10:37:12 <cpressey> Well, it's not important, the main point is, yes, this sort of thing has been going on for ages
10:37:37 <int-e> cpressey: But I do remember C# of course.
10:38:02 -!- zombocoder has joined.
10:39:03 <cpressey> I remember Java
10:39:46 <shachaf> Do you remember ALGOL 68?
10:40:20 <int-e> cpressey: As I recall it, Java was meant to be platform-independent, so it's in a different category :P
10:40:37 <int-e> Of course now it's meant to be a money-maker for Oracle.
10:43:23 <shachaf> Do you like Buffon's needle?
10:43:29 <int-e> Anyway, done with Swift for now. Things that stood out are enums, properties, and extensions.
10:43:40 <int-e> shachaf: only once it's bent into a circle
10:43:54 <shachaf> I only like it when it's bent into the word "this".
10:44:18 <int-e> `? this
10:44:19 <HackEso> This is something people on the channel like to talk about. We're often unsure what this is, though.
10:44:54 <int-e> `learnappend this// Nobody likes this.
10:44:54 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: learnappend: not found
10:45:03 <shachaf> Do you like 𝓉𝒽𝒾𝓈?
10:45:10 <int-e> `learn-append this// Nobody likes this.
10:45:10 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: learn-append: not found
10:45:14 <int-e> meh.
10:45:36 <int-e> `url bin
10:45:37 <HackEso> https://hack.esolangs.org/repo/file/tip/bin
10:46:21 <int-e> `learn_append this Nobody likes this.
10:46:24 <HackEso> Can't open wisdom/thi: No such file or directory. \ Learned 'thi': Nobody likes this.
10:46:30 <shachaf> Wow.
10:46:37 <int-e> `revert
10:46:38 <HackEso> Done.
10:46:45 <shachaf> That's pretty bad.
10:46:50 <shachaf> i recommend le/rn_append hth
10:47:43 <int-e> `le/rn_append this//Nobody likes this.
10:47:45 <HackEso> Learned 'this': This is something people on the channel like to talk about. We're often unsure what this is, though. Nobody likes this.
10:47:57 <shachaf> `? nobody
10:47:59 <HackEso> Nobody killed the cyclops Polyphemos after he tried to eat a shipful of sailors, and this perceived injustice made Poseidon so mad he swore vengeance at him and the gods couldn't calm him down for ten years.
10:48:14 <int-e> sounds like a b_jonas entry
10:48:19 <fizzie> Speaking of the cross-platform mobile thing, heard a lot about Flutter again while visiting MTV. I think I'd give it a go if someone forced me (or a tiny team) to build something on "both platforms" (...) with identical features.
10:48:20 <int-e> `cwlprits nobody
10:48:22 <Taneb> That sounds like something I'd have written 6 years ago
10:48:22 <HackEso> oerjän b_jonäs
10:48:41 <int-e> `hwrl nobody
10:48:42 <HackEso> https://hack.esolangs.org/repo/log/tip/wisdom/nobody
10:49:47 <shachaf> fizzie: Both platforms: iOS *and* Mac OS.
10:50:24 <shachaf> fizzie: I think the solution will be to write my own UI library.
10:50:59 <int-e> `mkx learn_append//echo "Usage: le/rn_append keyword//Text you'd like to append."
10:51:00 <HackEso> learn_append
10:51:08 <int-e> `learn_append
10:51:09 <HackEso> Can't do inplace edit: wisdom/ is not a regular file. \ /hackenv/bin/learn_append: line 5: wisdom/: Is a directory \ Learned '': cat: wisdom/: Is a directory
10:51:18 <int-e> oh
10:51:25 <int-e> ``mv learn_append bin
10:51:25 <HackEso> ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `mv: not found
10:51:31 <int-e> `` mv learn_append bin
10:51:32 <HackEso> No output.
10:51:38 <int-e> `learn_append
10:51:38 <HackEso> Usage: le/rn_append keyword//Text you'd like to append.
10:51:55 <shachaf> Unfortunately this wouldn't have helped with your first two attempts.
10:52:03 <int-e> I'm not very good at this.
10:52:30 <shachaf> `` ls -l le
10:52:31 <HackEso> total 4 \ lrwxrwxrwx 1 1000 1000 13 Jul 8 2017 rm -> ../bin/forget \ lrwxrwxrwx 1 1000 1000 17 Jul 8 2017 rn -> ../bin/slashlearn \ -rwxr-xr-x 1 1000 1000 225 Apr 7 2018 rn_append
10:52:42 <int-e> shachaf: Yeah but those didn't end up in the repository history so I regard them as harmless.
10:53:37 <int-e> seriously? le/rm ?
10:53:45 <shachaf> `doag le/rm
10:53:47 <HackEso> 9046:2016-09-16 <shachäf> ` ln -sf ../bin/forget le/rm \ 9044:2016-09-16 <shachäf> mkx le/rm//rm "wisdom/$1"
10:53:50 <shachaf> Figures.
10:54:54 <cpressey> `? what
10:54:55 <HackEso> what? ¯\(°​_o)/¯
10:55:12 <cpressey> `? sorry
10:55:13 <HackEso> sorry? ¯\(°​_o)/¯
10:55:17 <int-e> `? hug
10:55:18 <HackEso> hug? ¯\_/¯\(°​_o)/¯\_/¯
10:56:37 <cpressey> `? wisdom
10:56:38 <HackEso> wisdom is always factually accurate, except for this entry, and, uh, that other one? It started with, like, an ø?
10:57:30 <shachaf> OK, I'm going to sleep.
10:59:22 -!- zombocoder has quit (Ping timeout: 246 seconds).
11:09:40 <esowiki> [[User:CrispyPin]] N https://esolangs.org/w/index.php?oldid=65502 * CrispyPin * (+123) Created page with "In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move."
11:11:53 -!- zombocoder has joined.
11:25:59 -!- zombocoder has quit (Read error: Connection reset by peer).
11:29:53 <esowiki> [[Talk:Rail]] https://esolangs.org/w/index.php?diff=65503&oldid=39735 * CrispyPin * (+338)
11:33:08 -!- limbo_ has quit (Quit: Lost terminal).
11:49:10 -!- zombocoder has joined.
11:55:38 -!- tromp has quit (Read error: Connection reset by peer).
11:58:31 -!- wob_jonas has joined.
11:58:48 -!- tromp has joined.
12:01:24 <wob_jonas> ais523: yes, I guess if you measure it accurately enough, then 2017-01-01 was a long weekend too because of the leap second
12:06:41 <wob_jonas> cpressey: yeah, raising an exception for floating point division by zero by default is a stupid decision that some languages including python and perl do for legacy reasons
12:06:57 <wob_jonas> and the workarounds to do a floating point division without raising an exception aren't even simple there
12:07:52 <wob_jonas> ``` python3 -cx=0.0;print(3.0/x)
12:07:52 <HackEso> bash: -c: line 0: syntax error near unexpected token `3.0/x' \ bash: -c: line 0: `python3 -cx=0.0;print(3.0/x)'
12:08:01 <wob_jonas> ``` python3 -c'x=0.0;print(3.0/x)'
12:08:07 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ ZeroDivisionError: float division by zero
12:08:23 <wob_jonas> ``` python3 -c'import numpy; x=numpy.float64(0.0); print(3.0/x)'
12:08:25 <HackEso> ​-c:1: RuntimeWarning: divide by zero encountered in double_scalars \ inf
12:09:45 <wob_jonas> it's like two more lines of code to ingore that warning
12:10:20 <wob_jonas> oh, and
12:11:24 <wob_jonas> ``` python3 -c'a = dict(); x = a["foo"]' # raising an exception when looking up a key in a dictionary and it's not found, that I can understand
12:11:24 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ KeyError: 'foo'
12:12:01 <wob_jonas> ``` python3 -c'a = dict(); del a["foo"]' # but python's dict is the only dictionary that's pedantic enough to raise an exception when a key is not found when you're trying to remove it
12:12:05 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ KeyError: 'foo'
12:12:27 <wob_jonas> ``` python3 -c'a = dict(); a["foo"] = "bar"; x = a["foo"]; del a["foo"]'
12:12:28 <HackEso> No output.
12:15:47 <wob_jonas> "<shachaf> it's a shady industry" => groan
12:25:49 <esowiki> [[Osis]] N https://esolangs.org/w/index.php?oldid=65504 * A * (+1695) Created page with "[[Osis]] is a stack-based language specialized in sequences. Not only as in the commands, but also as in how it calculates the sequences. With smart memory usage and memoriz..."
12:26:26 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65505&oldid=65504 * A * (+94)
12:26:39 <esowiki> [[Osis]] https://esolangs.org/w/index.php?diff=65506&oldid=65505 * A * (+9)
12:30:16 <esowiki> [[Trance]] N https://esolangs.org/w/index.php?oldid=65507 * A * (+416) Created page with "[[Trance]] is a useless language that only has replacement commands. ==Syntax== <pre> 1: Replace all inputted 0's to 1's. 0: Replace all inputted 1's to 0's. </pre> ==Computat..."
12:33:59 <wob_jonas> "<cpressey> ; should really do what && does (I think there's some flag in modern shells that makes it so.)" => set -e; I use it in HackEso one-liners all the time, and it's not particularly modern
12:34:19 <wob_jonas> ``` set -e; echo one; true; echo two; false; echo three; echo four
12:34:20 <HackEso> one \ two
12:35:07 <wob_jonas> automatically exit when a command fails, unless it's syntactically in such a position that cares about whether it succeeds (it's not really the semicolon that's special
12:35:09 <wob_jonas> )
12:37:41 <FireFly> ohh, TIL about set -e
12:37:45 <FireFly> that's good to know
12:39:48 <wob_jonas> "<fizzie> int-e: While you can have custom fields and methods on an enum constant, you can't readily *access* them," => yeah, java has learnt the good practices of data hiding from HQ9+
12:40:00 <wob_jonas> and encapsulation
12:40:24 <wob_jonas> s/9[+]/9++/
13:02:43 -!- xkapastel has joined.
13:06:46 <cpressey> int-e: Uh oh. I got around to testing your Wagon implementation on the test cases in my document and there are... discrepancies.
13:08:14 <int-e> mm
13:08:32 <int-e> I tested a few, but I didn't test them all.
13:08:41 <cpressey> int-e: https://gist.github.com/cpressey/9969c27e7a877af15bf81665c96c815f
13:12:52 <int-e> Oh did I get the order of the subtraction arguments wrong...
13:14:25 <int-e> yeah I did
13:17:10 <int-e> That's annoying; it makes negating the top of the stack quite a bit harder.
13:17:36 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65508&oldid=65506 * A * (-86)
13:17:38 <wob_jonas> isn't there some way to just rearrange elements near the top?
13:17:59 <int-e> yes there is but it involves using 'r' a lot.
13:18:05 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65509&oldid=65508 * A * (+0) /* Command reference */
13:19:35 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65510&oldid=65509 * A * (+63) /* Command reference */
13:19:49 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65511&oldid=65510 * A * (+0) /* Powers of 2 */
13:20:54 <int-e> cpressey: so if you change opS to opS (a : b : ss) = b-a : ss does that fix it?
13:22:06 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65512&oldid=65511 * A * (-12)
13:24:54 <cpressey> int-e: yes, it does.
13:25:35 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65513&oldid=65512 * A * (+9) /* Command reference */
13:25:58 <cpressey> not sure to what extent this affects the fromTag compiler
13:26:13 <cpressey> the helper functions look easy to fix
13:27:17 <cpressey> and there is just one s in the main body of it, from what I can see
13:27:53 <cpressey> I was wondering at some point whether I should add x/X for swap ("eXchange")
13:29:29 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65514&oldid=65513 * A * (-1) /* Powers of 2 */
13:30:53 -!- zombocoder has quit (Ping timeout: 245 seconds).
13:31:29 <int-e> Yeah I'm fixing this... it'll just generate quite a bit more code
13:31:44 <int-e> "iriisririiisissr" swaps the top two elements of the stack
13:32:06 <cpressey> Oh good
13:32:29 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65515&oldid=65514 * A * (-26)
13:32:29 <int-e> or, readable: 1r 0r 1r 2r
13:32:46 <cpressey> Ah ha right, there's another small thing
13:32:48 <int-e> (where the numbers correspond to pushing that number on the stack)
13:32:56 <cpressey> The doc says the argument to r must be 0 or 1
13:33:09 <int-e> uhm
13:33:20 <cpressey> I did this because I was too lazy to specify what order the retained elements are pushed back onto the stack
13:33:49 <cpressey> so 2r is technically undefined behaviour
13:34:05 <int-e> that *will* be annoying.
13:34:25 <int-e> but let me fix the subtraction thing first.
13:35:10 <int-e> (I didn't think about that... to me it seemed obvious that the retained elements should just stay where they are)
13:36:41 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65516&oldid=65515 * A * (+35)
13:36:52 <int-e> Okay, the subtraction issue is resolved. Now let me think about whether I can reasonably deal with the 'r' thing...
13:38:18 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65517&oldid=65516 * A * (+34) /* Period [1,2] */
13:38:32 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65518&oldid=65517 * A * (+11) /* Command reference */
13:40:23 <wob_jonas> You should put a page on the wiki about this Wagon thing, pointing to where it's defined and the implementation and other info
13:48:30 <int-e> cpressey: Nah, the 'r' thing messes up everything for me. With only 0 and one, you cannot change the adjacency relations of elements on the stack (viewed as a ring with the last element linked to the first).
13:49:38 <int-e> so all data movement has to happen through arithmetic... which may be possible, but it's bound to be much harder than what I've been doing.
13:50:48 -!- zombocoder has joined.
13:52:12 <cpressey> I should have been clearer and/or done a more proper release. I'm sorry.
13:53:52 <int-e> ah you can do the in-place swap a = a-b; b = b+a; a = -a-b;
13:54:42 <wob_jonas> cpressey: nah, no release is completely normal. these things tend to just escape without a release.
13:58:19 <esowiki> [[Wagon]] N https://esolangs.org/w/index.php?oldid=65519 * B jonas * (+433) Created page with "Wagon is a stack-based language created by cpressey in 2019. It's advertised as a "second-order concatenative language". It uses a stack of unbounded size integers and a sma..."
14:07:47 <wob_jonas> so in a wagon program, all the while loops are nested, like as an ordinary program they would look like *[*[*[...*[*[*]*]*...]*]*]* where the brackets are while loops and each star can be any sequence of ordinary non-looping instructions that act on the stack?
14:08:11 <wob_jonas> so you can't have two loops that aren't nested but are next to each other, like *[*]*[*]*
14:08:41 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65520&oldid=65467 * B jonas * (+12)
14:10:20 <int-e> cpressey: Oh well, I think I can make this work, but wow is it tedious ;)
14:23:31 <esowiki> [[Wagon]] https://esolangs.org/w/index.php?diff=65521&oldid=65519 * B jonas * (+64)
14:25:56 <int-e> cpressey: for example, diriisririisrirsirdiisriririisrirsirdiriisriisiriisrirsirsiisrir swaps the top two elements of the stack
14:26:42 <int-e> (without using 2r)
14:27:32 <wob_jonas> scary
14:27:46 <wob_jonas> so is this why you were talking about super-optimizers?
14:27:53 <wob_jonas> to find shorter wagon instruction sequences?
14:29:22 <int-e> no, definitely not
14:29:29 <int-e> that was just a general SMT discussion
14:35:25 <cpressey> wob_jonas: your statements about *[*[...]*]* and *[*]*[*]* are correct
14:36:30 <wob_jonas> cpressey: ok, I think that qualifies this as an esolang
14:41:46 <int-e> cpressey: so instead of 1586 characters, I now have 22826 characters...
14:42:07 <wob_jonas> ouch
14:42:41 <int-e> cpressey: but it works again, and never uses r with arguments other than 0 and 1: http://paste.debian.net/1095871/
14:44:14 <int-e> (I even got the basic logic to work again, which I was a bit skeptical about at first)
14:47:07 <int-e> (with a builtin swap it would be 4430 characters; there are 292 swaps in that code now.)
14:47:21 <cpressey> Olé, Olé, Olé!
14:47:52 <int-e> But who cares... I'm sure this can be optimized quite a bit.
14:56:10 <cpressey> I'll try to put out a more proper release tomorrow.
14:56:17 -!- cpressey has quit (Quit: A la prochaine.).
14:56:55 <int-e> http://paste.debian.net/1095873/ is a bit better, 15378 characters
15:00:19 -!- zombocoder has quit (Ping timeout: 248 seconds).
15:04:09 -!- zombocoder has joined.
15:04:21 <esowiki> [[Talk:Wagon]] N https://esolangs.org/w/index.php?oldid=65522 * Int-e * (+257) Put link here for future reference.
15:12:19 -!- zombocoder has quit (Read error: Connection reset by peer).
15:18:21 -!- Sgeo_ has joined.
15:21:39 -!- Sgeo has quit (Ping timeout: 248 seconds).
15:29:07 -!- zombocoder has joined.
15:38:51 -!- wob_jonas has quit (Remote host closed the connection).
15:57:17 -!- onon has joined.
16:36:48 -!- Bowserinator has quit (Read error: Connection reset by peer).
16:37:24 -!- probablymoony has joined.
16:38:18 -!- Bowserinator has joined.
16:39:13 -!- moony has quit (Ping timeout: 246 seconds).
17:03:37 -!- FreeFull has joined.
17:08:34 -!- b_jonas has joined.
17:12:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
17:37:37 -!- sleepnap has joined.
17:40:03 -!- AnotherTest has quit (Quit: ZNC - http://znc.in).
17:40:13 -!- AnotherTest has joined.
17:44:07 -!- AnotherTest has quit (Read error: Connection reset by peer).
17:44:09 -!- AnotherTest_ has joined.
17:44:33 -!- AnotherTest_ has changed nick to AnotherTest.
17:47:07 -!- Phantom_Hoover has joined.
17:47:28 -!- unlimiter has joined.
17:50:50 -!- unlimiter has quit (Client Quit).
18:02:21 -!- unlimiter has joined.
18:11:48 -!- tromp_ has joined.
18:14:09 -!- tromp has quit (Ping timeout: 252 seconds).
18:29:30 -!- zombocoder has quit (Read error: Connection reset by peer).
18:43:24 -!- unlimiter has quit (Quit: thank you all).
19:02:59 -!- jix has quit (Ping timeout: 248 seconds).
19:06:13 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds).
19:07:15 -!- AnotherTest has quit (Ping timeout: 248 seconds).
19:09:51 -!- jix has joined.
19:12:12 -!- AnotherTest has joined.
19:18:23 -!- AnotherTest has quit (Ping timeout: 245 seconds).
19:21:50 -!- sleepnap has quit (Quit: Leaving.).
19:29:51 -!- AnotherTest has joined.
19:30:02 -!- diverger has quit (Ping timeout: 245 seconds).
19:38:50 -!- Phantom_Hoover has joined.
19:56:03 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65523&oldid=65490 * Salpynx * (+1) Undo revision 65490 by [[Special:Contributions/Dtuser1337|Dtuser1337]] ([[User talk:Dtuser1337|talk]]) Deadfish resets to 0 only at exactly 256, it's a required 'bug'
19:57:22 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
19:57:49 -!- Phantom_Hoover has joined.
19:58:23 <Cale> `ysaclist
19:58:24 <HackEso> ysaclist: boily shachaf
19:58:32 <Cale> https://www.youtube.com/watch?v=q3Mc0ChHhlk
19:59:06 <shachaf> Cale: You YSAC?
19:59:11 <shachaf> You're not on the list!
19:59:25 <Cale> I get notified by YouTube about it
20:00:08 <shachaf> You gotta like, subscribe, click the little bell, and let us know what you think in the comments below.
20:02:00 <Cale> It's kind of obnoxious how every channel has to ask people to click the bell because the assumption is that they don't know how to use YouTube's UI
20:03:17 <shachaf> I don't think that's the assumption.
20:03:28 <shachaf> The assumption is only that if you tell people to do it, they'll do it more than if you don't.
20:04:52 <Cale> Well, sure, but the problem that caused this is that YouTube's "Home" page doesn't show every video from your subscriptions, and instead shows a bunch of random crap instead. You have to go to "Subscriptions" if you want to see all the videos from the channels you're subscribed to.
20:05:23 <shachaf> The problem is that YouTube hates you and wants you to suffer.
20:05:26 <Cale> But at least if you have the notification bell clicked, you'll get a notification, and I'm not sure but maybe it helps those videos appear on "Home" as well.
20:05:42 <shachaf> Or rather they don't care about you and want to extract the maximum possible engagement out of you.
20:08:50 <b_jonas> shachaf: click on the thumbs up too. if we get four thousand thumbs up on this video, we'll do a special one next week.
20:09:24 <shachaf> 👍
20:19:05 -!- Lord_of_Life_ has joined.
20:22:08 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:22:09 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:23:16 <int-e> `unidecode 👍
20:23:17 <HackEso> ​[U+1F44D THUMBS UP SIGN]
20:23:21 <int-e> of course.
20:23:39 <shachaf> int-e: Are you awake at all times?
20:24:01 <int-e> I've been awake at all times modulo 24, I think.
20:24:15 <int-e> (24h that is)
20:32:37 -!- divergence has joined.
21:11:06 -!- sleepnap has joined.
21:16:11 -!- xkapastel has joined.
21:18:47 -!- AnotherTest has quit (Ping timeout: 245 seconds).
21:27:36 -!- unlimiter has joined.
21:34:18 -!- tromp_ has quit (Remote host closed the connection).
21:34:21 -!- adu has joined.
21:38:45 -!- unlimiter has quit (Quit: WeeChat 2.5).
21:53:52 -!- tromp has joined.
21:58:11 -!- tromp has quit (Ping timeout: 252 seconds).
22:00:15 -!- adu has quit (Quit: adu).
22:04:36 -!- b_jonas has quit (Quit: leaving).
22:12:49 <esowiki> [[Black]] M https://esolangs.org/w/index.php?diff=65524&oldid=55554 * ZM * (+4) /* Golly */ Wright's GitHub profile changed
22:18:15 -!- zombocoder has joined.
22:27:43 -!- sleepnap has quit (Quit: Leaving.).
22:32:01 -!- Phantom_Hoover has quit (Quit: Leaving).
22:42:35 -!- sleepnap has joined.
23:07:14 -!- unlimiter has joined.
23:10:03 -!- zombocoder has quit (Ping timeout: 245 seconds).
23:16:40 -!- sleepnap has left.
23:17:32 -!- catern has joined.
23:18:38 -!- FreeFull has quit.
23:19:29 -!- unlimiter has quit (Quit: WeeChat 2.5).
23:28:26 -!- Hooloovo0 has quit (Quit: Temporarily refracted into a free-standing prism.).
23:29:32 -!- unlimiter has joined.
23:31:45 -!- Hooloovo0 has joined.
23:33:09 -!- unlimiter has quit (Client Quit).
23:39:36 -!- tromp has joined.
23:44:03 -!- tromp has quit (Ping timeout: 248 seconds).
←2019-08-14 2019-08-15 2019-08-16→ ↑2019 ↑all