@greg I think (by which I mean I’m 100% sure) that @robby is suggesting try-both, not a 3rd server
I was suggesting try both.
A third server seems like it might not help with the problem we’re having. :slightly_smiling_face:
meanwhile, I got a message about some more potential downtime locally.
It is hard to tell if it will affect http://plt.eecs.northwestern.edu\|plt.eecs.northwestern.edu (it doesn’t seem like it should, but the previous messages also seemed like they shouldn’t and apparently did)
Also, I’m not suggesting load balancing. I’m suggesting load doubling. :wink:
I understand how adding another server might sound like adding another potentially-failing turtle.
But e.g. the server hosting http://www.racket-lang.org\|www.racket-lang.org seems to have greater uptime, and/or, you could imagine hosting a server someplace with more uptime/control than a given university.
Also, I feel like there should be a URL structure that works to get various downloads — but how it works from time to time is not really something for each/every client to implement?
Making an even more complicated (for try-both retries) version of this https://github.com/greghendershott/travis-racket/blob/master/install-racket.sh#L6-L37 out at clients, seems not quite right?
Instead of repeating that logic at clients, define it once at the server.
So I think we all agree it’s good to try any of the available servers, until one works. I think the question is, who does this retrying and where? :smile:
Of course the status quo is not horrible and we’re all busy so maybe the smartest thing is to leave it as-is. ¯_(ツ)_/¯
@greg somewhat related: https://github.com/samth/docker-racket-build/issues/28
If a module is required as: (require mod (for-syntax mod))
, then it will only be compiled once and the same, compiled module expression will be instantiated twice in different phases. Does this sound right?
@shu—hung yes
thanks
@setori88 has joined the channel
@jeapostrophe I want to play with mode-lambda, but I don’t think I really understand how it works
why is a lux “word” called a “word”?
and, for that matter, why is a “chaos” called a “chaos”?
I’m currently having a very strange problem where racket/tcp
is taking an enormously long time to resolve hostnames on my machine… but other programs work okay.
That sounds super weird
I don’t know how to debug this. I should probably try restarting my computer, but I am in the middle of some things and would sort of rather not…
The weird thing is it happens on both HEAD and a copy of 6.8 I have installed, so it can’t be rktio…
@lexi.lambda First, lux and mode-lambda are totally independent, neither requires the other. Your question is about lux
lux is an elaborate pun on big-bang, so does everything big-bang does, but slightly differently. so naturally, it uses creationist nomenclature
yes, my first comment was about mode-lambda and my following two were about lux. but mode-lambda seems designed to work well with lux?
in the beginning was chaos and God formed the world with a word, in particular the words “Fiat Lux” (let there be light)
lux allows a reactive program (a word) to run inside an environment (a chaos) and there are many different possible environments (unlike big-bang, where there is just one, so the environment doesn’t get a name in big-bang)
mode-lambda’s make-render function returns the thing that lux’s gui chaos expects to receive, yes, but both can and have been used with other things
(specifically, stage-draw/dc ultimately returns a function that takes a width, height, and dc then returns void after drawing on it
I see, yes. I was looking at the one.rkt
example in the mode-lambda repo.
while lux’s gui chaos expects to receive the same kind of value on word-output
and https://github.com/jeapostrophe/mode-lambda/blob/master/mode-lambda/examples/transparency/open-gl-issue.rkt is super simple (one.rkt has a lot going on)
could you explain to me the difference/purpose of the static/dynamic lists?
the static is drawn first and then the dynamic is drawn, so the static is always a background
other than that there is no functional difference
however there is a performance impact
mode-lambda retains a pointer to the last list given to it and if another frame comes with an eq? object list, then there is no memory transfer to the graphics card for that pass of the renderer
the slowest thing in basically all graphics engines (including mode-lambda) are such memory transfers
so in practice you would use the static for the level layout and the dynamic for the changing sprites and hud
(you would render the ENTIRE level statically and just move the camera)
(i.e. there’s no need to do cpu-side culling with mode-lambda)
gotcha, that makes sense. moving the camera by moving the layers?
correct, by moving the center of the layer
I tinkered with SMW romhacking for a little bit many years ago, so I am not entirely unfamiliar with the SNES’s graphics model :)
although i’m pretty sure there’s an error in the layer computation (discovered recently and not fixed yet), so you may find that
an error of what kind?
it doesn’t shift properly relative to other layers, so something like a parallax effect is off
ah, hmm. so you can’t have layers that move relative to each other? or am I misinterpreting?
you should be able to, there’s just a mistake right now
basically, don’t worry about it, but if something looks strange wrt layers, make sure you ask rather than think you did something wrong
any other pressing questions?
I don’t think so, I think that’s enough to get started. though I am a little curious if the contracts on the static-st
and dynamic-st
arguments to stage-draw/dc
should be something other than any/c
. I’d expect (listof sprite-data?)
.
they should be (tree-of sprite-data?) but that’s too expensive to check every frame. it goes out of its way to only look at the tree once
that’s a cons-tree
i’m about to disappear
:heart:
alright, thanks for your help, @jeapostrophe. it might be useful to put the proper contract in the scribble docs and leave it out in the implementation for performance? I’m not sure what your philosophy is about that sort of thing.
$ time nslookup <http://www.google.com\|www.google.com>
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: <http://www.google.com\|www.google.com>
Address: 216.58.216.4
0.02 real 0.00 user 0.00 sys
$ time racket -e '(require racket/tcp) (tcp-connect "<http://www.google.com\|www.google.com>" 80)'
#<input-port:www.google.com>
#<output-port:www.google.com>
75.90 real 0.24 user 0.10 sys
$ time racket -e '(require racket/tcp) (tcp-connect "216.58.216.4" 80)'
#<input-port:216.58.216.4>
#<output-port:216.58.216.4>
0.45 real 0.24 user 0.08 sys
I don’t get it. @mflatt, is there any way I could debug this issue?
Just to be sure, nslookup -query=AAAA <http://www.google.com\|www.google.com>
is also fast, right?
yes, it is.
You might try compiling with places and futures disabled, just to make sure it’s not something wrong with the way Racket runs getaddrinfo
in a thread.
The weirdest thing is that this hasn’t happened before, but it affects all my installations of Racket as far as I can tell… but I can try that.
You could also try building and runing “hostinfo.c” in http://www.eng.utah.edu/~cs4400/udp+tcp.zip, which uses the same OS APIs that Racket is using
Neat, I’ll try that.
$ time ./hostinfo <http://www.google.com\|www.google.com>
216.58.216.4
0.00 real 0.00 user 0.00 sys
Maybe PF_UNSPEC
instead of AF_INET
, though
Since that’s fast, my only guess is still something about threads
Alright, I’ll give that a try.
I think I borked my Racket installation trying to figure out how to properly reconfigure it, so I just cleaned everything and started building from scratch, but is there a better way?
@mflatt With places and futures disabled, I still have the same problem.
Maybe it’s not worth trying harder before a reboot. But looking again at rktio and “hostinfo.c”, another difference is #include <netdb.h>
....
hints.ai_protocol = getprotobyname("tcp")->p_proto;
Getaddrinfo....
One observation: not all domains have this problem. raco pkg
(and, after testing, racket/tcp
) has no trouble at all resolving <http://pkgs.racket-lang.org\|pkgs.racket-lang.org>
.
<http://github.com\|github.com>
resolves quickly. <http://example.com\|example.com>
hangs. Perhaps my computer really is the thing at fault here. :)
And, for what it’s worth, adding hints.ai_protocol = ...
did not appear to change anything.