
I am not sure why this happens, but it seems to be related to having an overlay renderer. The overlay renderers are drawn in draw-overlay-renderers
, but it is not clear to me what could cause the increasing draw duration.

I’m searching for a way to join the Racket users mailing list without a Google account, either per web or per e-mail.
The join link on https://lists.racket-lang.org/ redirects me to the message list, as does the link (the same link) I found in an article from Bogdan ( https://defn.io/2019/02/05/google-groups/ ).
I do have a Google account, but I use it as little as possible. I only have the account because I use the Google Play Store. Still, if anyone happens to know a way to subscribe without a Google account, that would be nice, maybe also for future users.

According to this, you need a Google Account - but not a Google mail address.

You could try sending an e-mail to <mailto:racket-users+subscribe@googlegroups.com\|racket-users+subscribe@googlegroups.com>
.

I found it really confusing but you don’t need a g account with that link.

@popa.bogdanp It worked! :slightly_smiling_face:

I was looking at that this morning, but couldn’t see any obvious reasons why it would slow things down either. I also tried using profile
to see exactly where the slowdown was, but failed because I got frustrated with the load times since compiling plot takes a very long time. I’ll try that again later if nobody else has any ideas. My hope is I’m just doing something wrong in terms of the protocol between these things.

Great! I’ll update the blog post

@stephen.degabrielle When I click the join link https://groups.google.com/forum/#!forum/racket-users/join on the Racket mailing lists page, it redirects me to https://groups.google.com/g/racket-users , which seems to be the overview page. I don’t see a join link on the page. Maybe you see one if you’re logged into your Google account.

@sschwarzer they have changed it. Last time I checked 6 months ago it let you subscribe without a g-account.

I’ll update the wiki and link to @popa.bogdanp ‘S post

Also need to change https://lists.racket-lang.org/\|https://lists.racket-lang.org/


I’ve created an issue on the relevant repo but I don’t have time to make a PR right now https://github.com/racket/racket-lang-org/issues/160\|https://github.com/racket/racket-lang-org/issues/160

Well, the problem does not seem to happen if an editor-canvas%
is used, so it may be a protocol problem. The interaction between snip%
objects and their admins/editors is not well documented.
Also, if you just want to embed a plot in a GUI application, you can just use snip-canvas%
, which is part of MrLib, or the plot-container
package which offers some more flexibility to managing the snips…

I wasn’t aware of snip-canvas%
. That might do the trick. Thanks!

Yup, snip-canvas%
is exactly what I want. Thanks again.

Looking at the code, @notjack it looks like that special case is not in the code.

I’ve pushed an update to the page, so let me know if it’s not right.

@mflatt The new text (for example for the user list) is
<https://groups.google.com/forum/#!forum/racket-users/join|Join the users mailing list with a Google account> Join without a Google account by sending email to
The “with” in the first line should be “without.” Same for the other lists.

I thought that the link works only using a Google account. Is that not right?
Or does it look like a title for the following text (because the column is mostly bolded), when it’s meant to be separate?

@mflatt Oops, my bad. I thought since there was a bigger text and a smaller below the smaller one would be a detail. But of course that doesn’t make sense because then both texts would contain the same information.
Suggestion: Make the “with account” and “without account” texts the same size. Otherwise it looks like “of course you have a Google account, but if you don’t, then by all means use the mail approach.” :wink: (Ok, maybe I’m exaggerating a bit.)

Ok — I changed it more.

Excellent! :+1:

Thank you!

@seanbunderwood has joined the channel

When adding a new package to the Racket Packages, how long once it’s installable does it take for the scribble documentation to be added as well? All the documentation I generated works locally when installed, but it’s still not visible online (and has the “needs documentation” tag).

I’m not sure if it just takes another hour or so, or if I goofed something.

I’ll usually wait a day or two to check the docs

Last time I released a package it took a day and a half lol

Literally wait a day, then wait an hour, then when you notice some weird error on the package server and you’re about to ask if something is wrong wait another five minutes and suddenly it will be there

lol

@mflatt say I want to install two versions of the same package at the same time, what’s the easiest way to do that? Should I use the recent layering support? Can you give a small example on how to set it up?

Does any other package depend on the one that you want two installations of?

Oh, good point. The answer is yes

To be more clear about what I want to do. I want to compare performance difference between two versions of the same library

So that requires installing both versions, and run programs in both versions

You can use layering where everything that depends on the package of interest is in the second layer along with that package. It’s probably easier and faster (counting the time you spend fiddling with configurations) just to have two installations with installation-scope packages, though.

Depending on the base version and how much of the main installation you need, raco cross --workspace ....
might be a good choice for setting up the different installations in different workspaces.

I will look into raco cross
. Thanks!

Google Groups went through a UI migration recently (like a year or two ago) so that’s probably why all the links changed

That combined with the fact that list?
is coerced to (listof any/c)
means that any function which uses list?
as an input contract always runs in linear time, at minimum

Yeah, that was bad. Thanks for pointing it out, I fixed it.


I meant to thank you in the commit message but I forgot. :(

wonderful, thank you very much!

do you know if vector, hash, and set contracts have that optimization too?

pretty sure set doesn’t

and probably not the others, now that I think about it.

they could probably use (contract-stronger? elem/c any/c)
instead of (eq? elem/c any/c)
too

why ==
tho?

The machine that builds documentation has a cycle time of about 8 hours

symmetry with !=
and familiarity with other languages

Those don’t have asymptotic improvements, but they also seem worth doing. I don’t think they have the vector?
and (vector/c any/c)
are-actually- the-same-contract thing.

I was thinking like, (listof (or/c any/c #false))
which I’ve seen people write occasionally

if or/c cooperated with any/c the would work.

That

Thinking a little bit about it, it is probably best if things like (contract-name (or/c any/c #f))
still returned something like "(or/c any/c #f)" and not just “any/c”. But if that weren’t the case, it would be a simple change to make (listof (or/c any/c #f))
be the same as (listof any/c)

does (contract-stronger? (or/c any/c #false) any/c)
return true?

yes

I think so

well, let’s try it!

heh

it does!

the other way works too

if users write it, instead of optimizing (or/c any/c #false)
to any/c
, I think it should make a warning instead. Though that might become annoying if a macro generates the contract.

I’m not really sure we have a good setup for warnings in racket

But I also think that sometimes people write (or/c any/c #f)
because they want to convey the idea that #f
is treated specially, but all values are accepted.

I think I’ve written that (in docs) before.

In any case, the change I have in mind will be an optimization but will affect only the checking and stronger and things like that.

It won’t check how the library behaves otherwise.

Like the or/c
will be preserved in the error messages.

Ah, yes. I totally agree with all of that. Printing an error message with something that users didn’t write definitely will cause confusion

Yeah, this turns out to be a hard property to preserve all the time, but I have made an effort in the contract system to do that

Like <=/c
actually generates the same thing as between/c
internally (but it remembers the name). There are other examples like that.

(they generate the same thing to make contract-stronger work better)

alternately, use VMs/docker/etc., but that’s a bit heavy for my taste.

okay, I’ve pushed that.