dzoe changed the topic of #racket to: Racket v8.0 has been released: https://blog.racket-lang.org/2021/02/racket-v8-0.html -- Racket -- https://racket-lang.org -- https://pkgs.racket-lang.org -- Paste at http://pasterack.org
oriba has quit [Quit: https://quassel-irc.org - Chat comfortably. Anywhere.]
peddie has quit [Ping timeout: 265 seconds]
sagax has quit [Ping timeout: 245 seconds]
peddie has joined #racket
louis771 has quit [Quit: My M1 has gone to sleep. ZZZzzz…]
bitmapper has quit [Quit: Connection closed for inactivity]
dbmikus has quit [Ping timeout: 256 seconds]
sagax has joined #racket
l-as has quit [Ping timeout: 265 seconds]
BitPuffin has quit [Ping timeout: 240 seconds]
deselby has quit [Ping timeout: 240 seconds]
biotim has quit [Ping timeout: 240 seconds]
yurb has quit [Ping timeout: 258 seconds]
peddie has quit [Ping timeout: 240 seconds]
haskal has quit [Ping timeout: 272 seconds]
dbmikus has joined #racket
evdubs_ has joined #racket
nperez__ has joined #racket
evdubs has quit [Ping timeout: 240 seconds]
dbmikus has quit [Ping timeout: 258 seconds]
nperez_ has quit [Ping timeout: 260 seconds]
l-as has joined #racket
badkins has quit [Remote host closed the connection]
badkins has joined #racket
yurb has joined #racket
badkins has quit [Ping timeout: 264 seconds]
peddie has joined #racket
dbmikus has joined #racket
haskal has joined #racket
deselby has joined #racket
biotim has joined #racket
BitPuffin has joined #racket
notzmv- has joined #racket
dbmikus has quit [Ping timeout: 260 seconds]
notzmv has quit [Ping timeout: 246 seconds]
notzmv- is now known as notzmv
dbmikus has joined #racket
dbmikus has quit [Ping timeout: 264 seconds]
cartwright has quit [Remote host closed the connection]
cartwright has joined #racket
bitmapper has joined #racket
badkins has joined #racket
badkins has quit [Ping timeout: 240 seconds]
caente has quit [Ping timeout: 272 seconds]
YuGiOhJCJ has joined #racket
_whitelogger has joined #racket
endformationage has quit [Quit: WeeChat 2.9]
libertyprime has joined #racket
dbmikus has joined #racket
dbmikus has quit [Ping timeout: 276 seconds]
narimiran has joined #racket
pounce has quit [Ping timeout: 246 seconds]
louis771 has joined #racket
bitmapper has quit [Quit: Connection closed for inactivity]
Sgeo has quit [Read error: Connection reset by peer]
dbmikus has joined #racket
dbmikus has quit [Ping timeout: 264 seconds]
badkins has joined #racket
badkins has quit [Ping timeout: 256 seconds]
biotim has quit [Quit: Idle for 30+ days]
YuGiOhJCJ has quit [Quit: YuGiOhJCJ]
narimiran has quit [Quit: leaving]
sm2n has quit [Ping timeout: 256 seconds]
sm2n has joined #racket
sm2n has quit [Read error: Connection reset by peer]
sm2n has joined #racket
caente has joined #racket
theruran has quit [Quit: Connection closed for inactivity]
rgherdt has quit [Ping timeout: 258 seconds]
orivej has quit [Ping timeout: 256 seconds]
badkins has joined #racket
theruran has joined #racket
caente has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/]
caente has joined #racket
rgherdt has joined #racket
Sgeo has joined #racket
caente has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/]
caente has joined #racket
rgherdt has quit [Ping timeout: 240 seconds]
bitmapper has joined #racket
<samth> ermo: yes, those graphs were generated from that code
<ermo> samth: you mean the shootout code?
<samth> dzoe: for `flinfinity?`, you can use `eq?`
<samth> yes, from the code in tests/racket/benchmarks
<samth> some of the benchmarks are in other subdirectories, such as "common"
<ermo> I suppose the most obvious thing to do for me is to search for executable files under the benchmarks folder...
<ermo> samth: The use case is that tried building racket with -march=native last night and then tested its performance against a x86_64 generic build
<samth> ermo: they aren't executables
<ermo> ./auto.rkt is =)
<samth> then i think the graphs are generated with `mini-bar-plot`, also in that package
<ermo> https://bpa.st/367A <- list of executable auto.rkt files
<ermo> I just used the shootout one
<ermo> I was recently doing some testing on speeding up the PGO build of python3 and used pyperformance to check that my tweaks weren't regressing performance.
<ermo> so I went looking for something like that for racket and found the auto.rkt stuff in various subdirectories. I haven't really been able to find any upstream documentation/guidance on them. But then again, I have only looked since last night.
<ermo> Huh. Looks like the rx benchmark auto.rkt tests racket against python and perl. Nice.
nullcone has quit [Quit: Connection closed for inactivity]
<samth> ermo: there's no documentation for that
<ermo> Hm. Perhaps I could learn enough to contribute some then. =)
* ermo is currently reading through The Little Schemer 4th ed. and rather enjoying it
Lowl3v3l has quit [Read error: Connection reset by peer]
Lowl3v3l has joined #racket
<ermo> samth: would it be naïve of me to expect a difference between a generic x86_64 build and a -march=native Racket build in terms of benchmark scores?
<samth> ermo: I would be surprised if there was much difference
<ermo> so far, I haven't noticed any difference except perhaps for the fibo benchmark
<samth> ermo: does that generate very large numbers (more than 2^64)?
<ermo> haven't checked
<samth> in which case GMP might get optimized a bit
<ermo> can the JIT be told to make use of -march=native CPU features when generating assembly or is that (far) out of scope?
* ermo only has a vague understand of how this would be supposed to work, mind
<ermo> s/assembly/machine code/ sorry
<ermo> *understanding
<ermo> and I can't type either
sz0 has quit [Quit: Connection closed for inactivity]
<ermo> it'd be kind of cool if it could, though I can see why that might not be at the top of the priority list.
<ermo> Being able to optimise for the underlying platform at runtime would be pretty awesome and represent a leg up on most other languages in its class. From what I've seen in C/C++, speedups of 5-10% for "free" via -march=native is nothing to sneeze at.
badkins has quit [Remote host closed the connection]
<ermo> (vs generic x86_64 I mean)
badkins has joined #racket
<ermo> But, again, this is without having a clue about what kind of work it would entail.
badkins has quit [Ping timeout: 256 seconds]
<samth> ermo: the JIT can dynamically determine features and use them, but the hard part is changing the code generator to use fancier features
<dzoe> samth: and what about the performance?
<samth> dzoe: well, could it be implemented faster than the two comparisons?
<dzoe> samth: also, it is boxed - > (displayln (list (/ 1.0 0.0) (/ 2.0 0.0) (eq? (/ 1.0 0.0) (/ 2.0 0.0))))
<dzoe> (+inf.0 +inf.0 #f)
<dzoe> I side-stepped that by unsafe fl> with some high constant, but it doesn't feel right.
<samth> dzoe: i'm surprised that's #f
<dzoe> samth: IMHO eq? just compares the 64bit immediate value (which is the box itself, which is different for both)
<samth> oh try eqv?
<dzoe> That is - of course - true, but I expect the performance to be worse than unsafe fl> here.
<dzoe> (As usual, I am pushing things to the limits :) )
<dzoe> Actually I read that for TR the flinfinite? and flnan? are implemented without type-checks (therefore like unsafe variants).
<dzoe> I'll look into it further and maybe suggest adding them on ML.
<samth> dzoe: eqv? on known-floats ought to be optimizable to a bitwise comparison
badkins has joined #racket
gpanders has quit [Quit: ZNC - https://znc.in]
<dzoe> samth: Well... "known-floats" might be the issue here, I am (as usual) running large blocks of unsafe code."
<dzoe> Actually, now I would really appreciate an ability to switch between TR, contracted and unsafe code quickly.
<ermo> dzoe: per code block you mean?
<dzoe> Globally ...
<ermo> to cross check findings?
<dzoe> Well... I learned the TR and contracted approaches actually complement each other.
* ermo has no idea what dzoe is doing but I get the feeling that you like to "push the envelope"
<dzoe> RT allowed me to prove certain parts are correct (and it can be fast).
<dzoe> Contracts (+ errortrace) allow me to catch runtime errors for those parts that I am still thinking how to implement them.
<dzoe> Well ;-)
<dzoe> It is my procrastination project where I test various ideas...
<dzoe> One video tells it all: http://joe.cz/td4/
<ermo> so you prototype with contracts and do "proper" sw engineering with typed racket?
<dzoe> Lots of futures, unsafe operations and crazy ideas.
<dzoe> I think that is reasonably exact description.
gpanders has joined #racket
<dzoe> But for this part I am mostly without TR - I used TR for verifying the correctness of the previous incarnation of this code.
<dzoe> And actually it allowed me to identify some hidden problems (thanks to Robby and Sam!)
gpanders has quit [Client Quit]
<dzoe> Also the latest version is well prepared for being gradually typed (most of it though ...).
gpanders has joined #racket
nullcone has joined #racket
notzmv has quit [Ping timeout: 264 seconds]
rj has joined #racket
<ermo> dzoe: feels like a cross between wolfenstein 3D, doom and minecraft ^^'
<ermo> (= not a bad combo!)
rgherdt has joined #racket
rj has quit [Ping timeout: 268 seconds]
rmculpepper has joined #racket
rmculpepper has quit [Quit: Leaving]
<dzoe> ermo: actually you are not far from truth - the technique used for raycasting is the very same as in Wolf3D, however I extended it along the Z axis. The different heights of grid cells are handled the same way as in Doom.
<ermo> lel
<dzoe> But there is no Minecraft influence at all. The target is a raytraced rendering with the same capabilities as had the Ultima Underworld engine.
<ermo> that was more the look of the textures and the sharp angles tbf
<ermo> (and I'm sadly unfamiliar with the Ultima Underwold engine)
* ermo goes watch videos
<dzoe> So far the raycasting/tracing is actually useless, but with the geometry handling decoupled from texture mapping, I can cast shadow rays to light sources and compute real-time shadows.
<dzoe> (It is shown in one of those videos - a simplified version though).
<ermo> with zero actual graphics programming experience, this might be a *really* stupid q, but does the use of futures imply multithreading?
* dzoe spent 90's programming game engines and to get away from his day to day work, he decided about a year ago to start playing which that again.
<dzoe> Yes, heavy futures usage for multithreading is one of my goals (as I use futures extensively for my paid work).
<xandkar> Is there a way to attach REPL to an already running Racket process?
<dzoe> It is funny when I run this purely CPU-bound rendering and my CPU is ticking at 800MHz - futures are battery saver for my laptop.
rmculpepper has joined #racket
rmculpepper has quit [Client Quit]
<dzoe> And this http://joe.cz/tmp/ascii3d2.png is how it all started (a long long time ago).
srandon111 has joined #racket
<ermo> hehe, nice
<ermo> rogue 3d
<dzoe> Yes, if I decide to create a game based on this, it's gonna be a roguelike, of course ;-)
* ermo has never played nethack or rogue
<ermo> Iessentially
<ermo> I am essentially a man without culture I guess ;)
<ermo> you could perhaps use brogue as a starting point -- its scope is more limited than usual rogue-likes
rj has joined #racket
<dzoe> Trouble is that I have no idea (yet) how to render objects.
<dzoe> Billboarding might be an option to incorporate sprites into this.
<ermo> You might as well be speaking russian or chinese for all the good it'll do me ;)
<dzoe> But I am afraid that full 3D models are beyond the capabilities of current CPUs for software-driven raytracing.
<dzoe> Billboarding = flat surface with object texture on it ... basically you do not render true 3D objects, just project images into the world space.
<ermo> but I'm assuming that billboarding is a technique using 2D surface with its normal is always pointing at the PC?
<ermo> right
<dzoe> And yes, brogue is a good example of where to start :)
<dzoe> But that is long time in the future.
<ermo> Commonly used in open world games with faraway trees, right?
<ermo> (billboarding)
<dzoe> My TODO list just for the world geometry is really long :)
<ermo> I have no illusions that graphics programming and actually building a real-time engine is *hard*
<dzoe> In wolf/doom and others, it was used for the enemies and all objects as well.
<ermo> and rise of the triad as I recall
<dzoe> ROTT pushed the original Wolf3D engine to its limits.
<dzoe> The thing I really like is the math behind - it is actually pretty easy. And Racket is a great tool for exploring that math.
<dzoe> (Although I am really good at hitting the limits ...)
<ermo> you make it sound almost like a fun hobby
<ermo> I'm assuming it's mostly linalg + good algorithms + rays
<ermo> (angle in = angle out, except in water)
<ermo> and some scattering and decay
<dzoe> Yep, most of it is linear algebra - which plays well with futures (under Racket CS that is ... for BC I had to do so many weird hacks to make it work ...).
<dzoe> Yes, those are the things on my TODO list ;-)
<ermo> (didn't mean to downplay it, just trying to use my imagination to think what it might entail)
<dzoe> That's OK, the underlying math really is easy.
<ermo> there's just a LOT of it xD
<ermo> (SIMD to the rescue!)
<dzoe> I always show this to students when they complain that calculating fibonacci numbers is "hard" :-D
<ermo> ... students think that fib is *hard*?
<ermo> ok
<dzoe> Racket has no SIMD support so far :(
<ermo> I guess I have limited imagination xD
<dzoe> Well... I am teaching the introductory Algorithms and Data Structures for the 1st year students ...
<dzoe> (In Clojure though ...)
<ermo> Oh, ok. Well, I feel like the word they're really looking for is "new and unfamiliar" rather than "hard"
<dzoe> Exactly
<ermo> the two are easy to confuse
<ermo> the difference is that the hard stuff stays hard even once you've mastered it
<ermo> (or so I would imagine)
<ermo> or, well, "tricky" I guess I should say
<dzoe> Most of them are usually OK towards the end of the semester.
<ermo> If you put in the work, you should be. Otherwise you aren't cut out for it tbh.
<dzoe> And as this country is now "best in covid", they have plenty of time to sit at their desks and learn ;-)
<ermo> (a bit harsh, but it feels like the honest truth)
<ermo> you say learn, I say practice and repeat ;)
<ermo> just as with math, you get used to programming and algorithms
<ermo> some misattribute this to "learning"
<dzoe> Well, the learning part is important as well. For example today I had a consultation with a student struggling with the `let' construct.
<ermo> it's only "learning" in the sense that you're building new pathways I guess.
<ermo> oh, the concepts you mean
<ermo> well, ok. The concept part is learning.
<dzoe> Once she grasped the idea that it is not a "statement" like `int i = 0;' she was fine.
<ermo> But it's maybe 20% learning and 80% practice to reinforce it.
<ermo> (if that constitutes learning-at-large, ok, I'll buy what you're selling)
<dzoe> That's true. Especially for this class. It is just a basis for more advanced topics.
<ermo> *everything* is just a basis for more advanced topics xD
<ermo> ("just")
<dzoe> Hehe, yeah
<ermo> dzoe: are you familiar with Barbara Oakley's "Learning how to Learn" work?
<ermo> and Marty Lobdell's How to Study lectures?
<ermo> That combination has been kind to me
<ermo> In the sense that it's allowed me to use my time more effectively
<ermo> Coupled with the Feynman technique
<dzoe> Not really.
<ermo> (i.e. explaining things in as simple terms as possible during recall excercises)
<ermo> dzoe: well, for struggling students, those three sets of techniques could turn out to be useful.
<dzoe> Yep, I like Feynman's approach.
<dzoe> And I always quote him when describing what the "science" thing really is.
<dzoe> You can conjecture whatever hypothesis you want - but then you have to put it to a test.
<dzoe> And if it does not pass the test, you are wrong.
<dzoe> Simple as that.
<dzoe> I like simplicity.
<ermo> My favourite one is Marty's use of "cues": As he tells it, he observed an experiment where one group consistently set a cue (turned on a designated "study lamp" before starting to study) and the control group didn't. The group that set the cue finished the class with +1 GPA
orivej has joined #racket
<ermo> I was like "... wtf"
rj has quit [Ping timeout: 268 seconds]
<dzoe> Humans are complex systems ...
<ermo> sure, but the habits you build with cues tend to work well
<ermo> even if the system behind it is complex, the outcome (on a macro level) appears reliable. I mean, the same techniques are used successfully to train all sorts of intelligent animals
<dzoe> Which is (to me at least) a surprising result, but apparently a valid one nonetheless.
<ermo> so why not homo sapiens as well?
<ermo> the most surprising thing for me was oakley's point that if you work hard at something, stop the minute you find yourself getting frustrated.
rj has joined #racket
<ermo> That's apparently a sign that you brain needs time to relax and move to "diffuse mode" where you interconnect new concepts to form new patterns (= new modes of understanding)
<ermo> i.e. work hard (focused mode) then relax and do something else (diffuse mode)
<ermo> because your brain apparently keeps working on the problem, just in a different way
<ermo> so practicing an instrument, cleaning, going for a walk/run, play a game etc. is actually not wasted if you've put in the work first
<ermo> anyway, this is #racket, not #howtostudy xD
<dzoe> Sounds reasonable :)
<dzoe> Yes, it is #racket, but large part of the Racket ecosystem is very educational-centric anyway ;-)
<ermo> *phew* dodged that bullet then
<ermo> I guess that's probably why I *like* the racket ecosystem
oriba has joined #racket
dbmikus has joined #racket
rj has quit [Ping timeout: 268 seconds]
rj has joined #racket
rj has quit [Ping timeout: 268 seconds]
notzmv has joined #racket
rj has joined #racket
rj has quit [Client Quit]
phillbush has joined #racket
<dzoe> Is there a way to recursively extract all required modules?
<dzoe> (Paths/names)
<samth> dzoe: extract from what?
<dzoe> From any-source-file.rkt - iterate recursively through all requires in all stages (normal, syntax, doc)
<dzoe> Basically to find the dependencies automatically.
orivej has quit [Ping timeout: 246 seconds]
badkins has quit [Remote host closed the connection]
badkins has joined #racket
badkins has quit [Ping timeout: 245 seconds]
rj has joined #racket
badkins has joined #racket
louis771 has quit [Quit: My M1 has gone to sleep. ZZZzzz…]
louis771 has joined #racket
rj has quit [Ping timeout: 268 seconds]
rj has joined #racket
louis771 has quit [Quit: Textual IRC Client: www.textualapp.com]
<samth> dzoe: you can certainly do that, you might look at the module browser in DrRacket
rj has quit [Ping timeout: 268 seconds]
rj has joined #racket
<dzoe> samth: thanks, will do - the first run is really long though ...
bitmapper has quit [Quit: Connection closed for inactivity]
bitmapper has joined #racket
rj has quit [Ping timeout: 268 seconds]
rj has joined #racket
phillbush has quit [Quit: Leaving]
badkins has quit [Remote host closed the connection]
badkins has joined #racket
badkins has quit [Remote host closed the connection]
badkins has joined #racket
rj has quit [Ping timeout: 268 seconds]
rj has joined #racket
caente has quit [Remote host closed the connection]
caente has joined #racket
caente has quit [Remote host closed the connection]
caente has joined #racket
rj has quit [Ping timeout: 268 seconds]
xandkar1 has joined #racket
<caente> is there anyone here that is not also in the slack workspace?
FreeFull has joined #racket
dbmikus has quit [Ping timeout: 245 seconds]
rgherdt has quit [Ping timeout: 264 seconds]
dbmikus has joined #racket
<ermo> me
<ermo> what is this 'slack workspace' you speak of?
<ermo> (I'm not serious)
notzmv has quit [Read error: Connection reset by peer]
badkins has quit [Remote host closed the connection]
badkins has joined #racket