Re: [racket-users] [baseball-cap with `standard-fish`]

2021-12-21 Thread Nathaniel Griswold
The no context email left me trying to decrypt the hidden meaning  . Thought I 
was being phished for a second.

Here is from discourse:

“”“
 spdegabrielle: [baseball-cap by Justin Zamora] Made with Racket by @JustinZed
“””

> 
> 
> 
> Image credit at 
> https://racket.discourse.group/t/baseball-cap-with-standard-fish/443?u=spdegabrielle
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/0CE5FA35-8A97-4517-A4C1-BEB46E000213%40nan.sh.


[racket-users] Anyone successfully filtering Italian spam?

2021-11-29 Thread Nathaniel Griswold
It’s getting through my filters, neither rspamd or my local client can catch on 
to it.

Is there a good simple filter?

Nate

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/81262C45-D4BE-45DB-B126-5BD11274299A%40nan.sh.


Re: [racket-users] Manually create cpointer value in racket?

2020-10-07 Thread Nathaniel Griswold
Ah, that’s perfect thanks. Totally missed the miscellaneous support section.

> On Oct 7, 2020, at 4:08 PM, Matthew Flatt  wrote:
> 
> Probably you want to use `cast`. If you have an integer `addr` that
> corresponds to an address, then
> 
> (cast addr _uintptr _pointer)
> 
> casts it to a C pointer.
> 
> Matthew
> 
> At Wed, 7 Oct 2020 10:28:42 -0500, Nathaniel Griswold wrote:
>> Related to a question I asked earlier, but this time at the racket side:
>> 
>> Is there any way to manually construct a cpointer with a raw pointer value? 
>> I 
>> suppose this would mean being able to construct a chez record in racket.
>> 
>> My use case is that I have a remote process talking to a racket process, it 
>> is 
>> sending a pointer to some shared memory and I want to access that shared 
>> memory. It’s an array of c structs with some integer data and each has a 
>> pointer to some raw bytes.
>> 
>> Any way to do it?
>> 
>> Thanks
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to racket-users+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/racket-users/CDC4A5DF-6BE1-4B96-BF3A-0B19F2EB
>> F0AC%40gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/4218EB80-31C5-4011-B217-5B1F87E76A5E%40gmail.com.


[racket-users] Re: Manually create cpointer value in racket?

2020-10-07 Thread Nathaniel Griswold
And by “remote process” I just mean a separate process, the parent is sending 
it to the child.

> On Oct 7, 2020, at 10:28 AM, Nathaniel Griswold  
> wrote:
> 
> Related to a question I asked earlier, but this time at the racket side:
> 
> Is there any way to manually construct a cpointer with a raw pointer value? I 
> suppose this would mean being able to construct a chez record in racket.
> 
> My use case is that I have a remote process talking to a racket process, it 
> is sending a pointer to some shared memory and I want to access that shared 
> memory. It’s an array of c structs with some integer data and each has a 
> pointer to some raw bytes.
> 
> Any way to do it?
> 
> Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/5565C398-9CD0-4A4E-B3DB-028BBC189D5C%40gmail.com.


[racket-users] Manually create cpointer value in racket?

2020-10-07 Thread Nathaniel Griswold
Related to a question I asked earlier, but this time at the racket side:

Is there any way to manually construct a cpointer with a raw pointer value? I 
suppose this would mean being able to construct a chez record in racket.

My use case is that I have a remote process talking to a racket process, it is 
sending a pointer to some shared memory and I want to access that shared 
memory. It’s an array of c structs with some integer data and each has a 
pointer to some raw bytes.

Any way to do it?

Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CDC4A5DF-6BE1-4B96-BF3A-0B19F2EBF0AC%40gmail.com.


Re: [racket-users] question about places and main thread gc

2020-10-01 Thread Nathaniel Griswold
Thanks!!

> On Oct 1, 2020, at 9:37 AM, Matthew Flatt  wrote:
> 
> A new manual thread is not a new place. If places in CS change to have
> distinct allocators (unlikely) or symbol tables (likely), then I expect
> that activation would change to support specifying the place and use
> the original place by default. Individual activated threads certainly
> would not have separate allocators. It's always fine to use OS-level
> synchronization among threads and different places, but beware that
> blocking operations can interfere with Racket thread scheduling.
> 
> Sharing among activated threads in CS might be simpler than sharing
> among places in that you could be guaranteed a shared allocator. Note
> that `ffi/unsafe/thread` will let you create new threads of that sort
> in CS already (and that won't change) --- it's the same as creating an
> OS thread manually and activating it --- but see the caveats in the
> documentation for `call-in-os-thread`.
> 
> At Thu, 1 Oct 2020 09:17:08 -0500, Nathaniel Griswold wrote:
>> Cool. Thanks. I can play around with an activated thread to try and make the 
>> calls I want. I guess i wasn’t clear on the difference between an activated 
>> manually made thread and a place. Will manually made activated threads 
>> always 
>> share the same allocator in new versions of racket cs? Will I always be able 
>> to share data between these os threads as long as I just use standard 
>> synchronization techniques? Is the question of sharing data among manual 
>> activated os threads less complicated than places? Is a new manual thread a 
>> new racket place or is it not a place at all?
>> 
>> Thanks!
>> 
>>>> On Oct 1, 2020, at 8:21 AM, Matthew Flatt  wrote:
>>> 
>>> You're right that the main place is tied to the OS thread that is used
>>> to start Racket, so you can't move the place over by activating a
>>> different thread for the same place later. You can start Racket on an
>>> OS thread other than the process's main thread, though.
>>> 
>>> The question of sharing allocated data among places is complicated. For
>>> BC, different places use different allocators, so it basically doesn't
>>> work (although it's possible to use no-moving objects that are GC
>>> managed but still retained in the original place as long as they're
>>> accessed anywhere else). For CS, there's currently only one allocator
>>> for all places. That probably won't change, but it seems likely that CS
>>> places will become more distinct in some way in a future
>>> implementation, such as having different symbol tables while still
>>> having the same allocator.
>>> 
>>> You can share memory allocated in 'raw mode among places in both BC and
>>> CS, since that amounts to calling the C library's `malloc`. Going that
>>> direction may end up similar to using something like zeromq, though.
>>> 
>>> You're right that there's not currently a way exposed to get the
>>> identity of the current place or to check for being in the original
>>> place.
>>> 
>>> Matthew
>>> 
>>> At Thu, 1 Oct 2020 07:38:09 -0500, Nate Griswold wrote:
>>>> I looked into it, it seems to be implemented in `src/cs/rumble/foreign.ss`
>>>> using chez get-thread-id, comparing it to 0 and using a stored ref to the
>>>> original async callback queue, so looks like this is not exposed to the
>>>> user. Hm.
>>>> 
>>>> Nate
>>>> 
>>>> 
>>>>> On Thu, Oct 1, 2020 at 6:58 AM Nate Griswold  
>> wrote:
>>>>> 
>>>>> Thanks, Matthew. That helps. I was working on my project again and this
>>>>> came up again, but I still don't quite have my use-case figured out. I 
>>>>> have
>>>>> two additional (in addition to main thread place) places that i wanted to
>>>>> send messages to using standard chez and racket c calls (and not relying 
>>>>> on
>>>>> something like zeromq or file descriptors). I wanted to allow garbage
>>>>> collection and `#:in-original-place?` dependent ffi libs to work 
>>>>> correctly.
>>>>> Then i guess I need to keep my original place in scheme code and *not*
>>>>> `Sdeactivate_thread`ed most of the time to make this work. I had the idea
>>>>> from what you said that i might Sactivate_thread a completely different
>>>>> os-level thread in order to call into scheme using say racket_apply on
>>>>> `place-channel-put

Re: [racket-users] question about places and main thread gc

2020-10-01 Thread Nathaniel Griswold
Cool. Thanks. I can play around with an activated thread to try and make the 
calls I want. I guess i wasn’t clear on the difference between an activated 
manually made thread and a place. Will manually made activated threads always 
share the same allocator in new versions of racket cs? Will I always be able to 
share data between these os threads as long as I just use standard 
synchronization techniques? Is the question of sharing data among manual 
activated os threads less complicated than places? Is a new manual thread a new 
racket place or is it not a place at all?

Thanks!

> On Oct 1, 2020, at 8:21 AM, Matthew Flatt  wrote:
> 
> You're right that the main place is tied to the OS thread that is used
> to start Racket, so you can't move the place over by activating a
> different thread for the same place later. You can start Racket on an
> OS thread other than the process's main thread, though.
> 
> The question of sharing allocated data among places is complicated. For
> BC, different places use different allocators, so it basically doesn't
> work (although it's possible to use no-moving objects that are GC
> managed but still retained in the original place as long as they're
> accessed anywhere else). For CS, there's currently only one allocator
> for all places. That probably won't change, but it seems likely that CS
> places will become more distinct in some way in a future
> implementation, such as having different symbol tables while still
> having the same allocator.
> 
> You can share memory allocated in 'raw mode among places in both BC and
> CS, since that amounts to calling the C library's `malloc`. Going that
> direction may end up similar to using something like zeromq, though.
> 
> You're right that there's not currently a way exposed to get the
> identity of the current place or to check for being in the original
> place.
> 
> Matthew
> 
> At Thu, 1 Oct 2020 07:38:09 -0500, Nate Griswold wrote:
>> I looked into it, it seems to be implemented in `src/cs/rumble/foreign.ss`
>> using chez get-thread-id, comparing it to 0 and using a stored ref to the
>> original async callback queue, so looks like this is not exposed to the
>> user. Hm.
>> 
>> Nate
>> 
>> 
>>> On Thu, Oct 1, 2020 at 6:58 AM Nate Griswold  wrote:
>>> 
>>> Thanks, Matthew. That helps. I was working on my project again and this
>>> came up again, but I still don't quite have my use-case figured out. I have
>>> two additional (in addition to main thread place) places that i wanted to
>>> send messages to using standard chez and racket c calls (and not relying on
>>> something like zeromq or file descriptors). I wanted to allow garbage
>>> collection and `#:in-original-place?` dependent ffi libs to work correctly.
>>> Then i guess I need to keep my original place in scheme code and *not*
>>> `Sdeactivate_thread`ed most of the time to make this work. I had the idea
>>> from what you said that i might Sactivate_thread a completely different
>>> os-level thread in order to call into scheme using say racket_apply on
>>> `place-channel-put`. Can i do this or no? I was thinking no because...
>>> 
>>> From the docs for `#:in-original-place?`:
>>> 
>>> """
>>> If in-original-place? is true, then when a foreign callout
>>> 
>> > 29>
>>> procedure with the generated type is called in any Racket place
>>> ,
>>> the procedure is called from the original Racket place. Use this mode for a
>>> foreign function that is not thread-safe at the C level, which means that
>>> it is not place-safe at the Racket level. Callbacks
>>> 
>> > %29>
>>> from place-unsafe code back into Racket at a non-original place typically
>>> will not work, since the place of the Racket code may have a different
>>> allocator than the original place.
>>> """
>>> 
>>> I guess this means os threads use completely different allocators and
>>> sharing data among different `Sactivate_thread`ed threads doesn't make any
>>> sense at all. Is there any way to do this (command my places using the
>>> basic chez and racket funcs like racket_eval and Scons and racket_apply) or
>>> should i just use messaging over zeromq or an fd to my main thread? Maybe
>>> if place descriptors are guaranteed shared among all os-level threads then
>>> i can do it. I guess if `#:in-original-place?` exists there must be some
>>> way to do it, but maybe it's not exposed to the user. Also, is there any
>>> way to get the place descriptor for the current place or the main place? I
>>> didn't see any in the docs. I guess i should just start reading the racket
>>> source at this point.
>>> 
>>> Also maybe i'm missing a simpler solution. Any help would be appreciated.
>>> Thanks.
>>> 
>>> Nate
>>> 
>>> 
 On Mon, Sep 14, 2020 at 6:47 AM Matthew Flatt  wrote:
>>> 
 At 

Re: [racket-users] catalog not working?

2020-07-23 Thread Nathaniel Griswold
Oh, hm ok I was having a memory access crash in raco I assumed some causation.. 
I’ll debug tomorrow

> On Jul 23, 2020, at 10:14 PM, Sorawee Porncharoenwase 
>  wrote:
> 
> 
> Though, considering that there are so many people who are misled that the 
> catalog is down (my past self included), it might be better if that page 
> displays some useful information rather than a 404.
> 
>> On Thu, Jul 23, 2020 at 8:12 PM Sorawee Porncharoenwase 
>>  wrote:
>> The catalog is functional. That path is simply not served. See also:
>> 
>> From: Matthew Flatt 
>> Date: Thu, Feb 27, 2020 at 3:00 PM
>> Subject: Re: [racket-users] download catalog down?
>> To: Tom Gillespie 
>> Cc: Racket Users 
>> 
>> That path isn't served, but something like
>> 
>>   https://download.racket-lang.org/releases/7.6/catalog/pkg/racket-lib
>> 
>> or
>> 
>>   https://download.racket-lang.org/releases/7.6/catalog/pkgs
>> 
>> should work (and does work for me).
>> 
>>> On Thu, Jul 23, 2020 at 7:50 PM Nate Griswold  
>>> wrote:
>>> My raco pkg install is crashing and manual navigation to the package 
>>> catalog looks broken
>>> 
>>> https://download.racket-lang.org/releases/7.7/catalog/
>>> 
>>> 
>>> 
>>> 
>>> Nate
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Racket Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to racket-users+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/racket-users/CAM-xLPpZ06bnkiyUuQipqupoaA-odsmGMuakWp02WqRDbRUAbA%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/E177C1A5-0423-4E08-951A-BF39007C5ED8%40gmail.com.


Re: [racket-users] Re: What’s everyone working on this week?

2019-12-13 Thread Nathaniel Griswold
Oh, interesting. Yes the tail call optimization for my interpreter was one 
thing I need to hand-code. It will be a good learning experience.

> On Dec 13, 2019, at 9:05 AM, Anthony Carrico  wrote:
> 
> On 12/13/19 12:26 AM, Nathaniel Griswold wrote:
>> Could I just write llvm directly? (This is my first time using llvm)
> 
> Sure. You should probably play around and write some llvm assembly procedures 
> by hand.
> 
> I think the main issue with llvm is, or used to be, that you can "call with 
> arguments" (that is a normal C procedure call), but you can only jump within 
> a single procedure, so it isn't convenient to modularize state machines like 
> we can with tail calls in Racket.
> 
> Some compilers create special llvm calling conventions to deal with this, but 
> it would be nice if there was a standard "jmp with arguments" instruction 
> (which cleaned up the stack) that you could use to escape into a stackless 
> mode of operation.
> 
> -- 
> Anthony Carrico
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/6e4191ed-2a54-0a49-f6cb-e5912fa24183%40memebeam.org.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/E30DDF0E-97CA-423F-9F09-5C1C664CBF91%40gmail.com.


Re: [racket-users] Re: What’s everyone working on this week?

2019-12-12 Thread Nathaniel Griswold
Regarding your question of using llvm directly. Do people do that? I am going 
to figure out as I go but was planning to write the garbage collection part of 
the kernel in C and the procedure application part in machine language. Could I 
just write llvm directly? (This is my first time using llvm)

> On Dec 12, 2019, at 9:06 PM, Sam Tobin-Hochstadt  wrote:
> 
> You might be interested in our project Sham:
> https://github.com/rjnw/sham which is a Racket interface for easily
> using LLVM.
> 
> Documentation coming soon, but you can see some examples here:
> https://github.com/rjnw/sham/tree/master/test
> 
> Sam
> 
>> On Thu, Dec 12, 2019 at 10:03 PM Nathaniel Griswold
>>  wrote:
>> 
>> Racket to generate llvm
>> 
>>>> On Dec 12, 2019, at 3:35 PM, Hendrik Boom  wrote:
>>> 
>>> On Thu, Dec 12, 2019 at 10:49:01AM -0800, Nathaniel Griswold wrote:
>>>> I am almost done with chapter 5 of SICP which i have been working on in
>>>> racket.
>>>> 
>>>> My plan now is to write a scheme compiler/interpreter with garbage
>>>> collection that runs in native language in racket. I think i will use llvm.
>>> 
>>> So you'll be using LLVM directly? Or using Racket to generate LLVM code?
>>> 
>>> -- hendrik
>>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "Racket Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to racket-users+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/racket-users/20191212213513.rqi6zplqs63vc4ty%40topoi.pooq.com.
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Racket Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to racket-users+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/racket-users/0F71B923-2FEA-49AB-BA66-B6E31A723A6A%40gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/A0CE0BF5-6332-400F-A217-756065EAA63C%40gmail.com.


Re: [racket-users] Re: What’s everyone working on this week?

2019-12-12 Thread Nathaniel Griswold
Racket to generate llvm

> On Dec 12, 2019, at 3:35 PM, Hendrik Boom  wrote:
> 
> On Thu, Dec 12, 2019 at 10:49:01AM -0800, Nathaniel Griswold wrote:
>> I am almost done with chapter 5 of SICP which i have been working on in 
>> racket.
>> 
>> My plan now is to write a scheme compiler/interpreter with garbage 
>> collection that runs in native language in racket. I think i will use llvm.
> 
> So you'll be using LLVM directly? Or using Racket to generate LLVM code?
> 
> -- hendrik
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/20191212213513.rqi6zplqs63vc4ty%40topoi.pooq.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/0F71B923-2FEA-49AB-BA66-B6E31A723A6A%40gmail.com.


[racket-users] Re: racket-mode in emacs and error navigation

2019-12-12 Thread Nathaniel Griswold
I have discovered that if i do a C-u C-c C-c i get better error messages 
and can navigate to the proper spot. It uses something called errortrace. 
So i guess this is a non-issue.

On Thursday, December 12, 2019 at 12:53:55 PM UTC-6, Nathaniel Griswold 
wrote:
>
> Hello. I really like DrRacket's error output but i have recently switched 
> to emacs as i prefer its parenthesis navigation modes and other things 
> about it.
>
> One thing i noticed is when i have an error, say application with wrong 
> number of args, if i navigate to error using "C-x `" i don't skip to the 
> part where the application went wrong.
>
> It is a bit annoying and DrRacket is way better in this scenario. Does 
> anyone have a way of making this work nicely in emacs racket-mode?
>
> Thank you.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/eefda544-5a9f-438b-93bc-855b53f76bcf%40googlegroups.com.


[racket-users] racket-mode in emacs and error navigation

2019-12-12 Thread Nathaniel Griswold
Hello. I really like DrRacket's error output but i have recently switched 
to emacs as i prefer its parenthesis navigation modes and other things 
about it.

One thing i noticed is when i have an error, say application with wrong 
number of args, if i navigate to error using "C-x `" i don't skip to the 
part where the application went wrong.

It is a bit annoying and DrRacket is way better in this scenario. Does 
anyone have a way of making this work nicely in emacs racket-mode?

Thank you.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/bb49d4a9-c7c4-4fc2-b5ea-c9b5aa9557ab%40googlegroups.com.


[racket-users] Re: What’s everyone working on this week?

2019-12-12 Thread Nathaniel Griswold
I am almost done with chapter 5 of SICP which i have been working on in 
racket.

My plan now is to write a scheme compiler/interpreter with garbage 
collection that runs in native language in racket. I think i will use llvm.

On Tuesday, December 10, 2019 at 2:13:49 AM UTC-6, Stephen De Gabrielle 
wrote:
>
> New week, new Racket! What are you folks up to? Answer here or
>
> * https://racket.slack.com/ (Sign up at 
> https://racket-slack.herokuapp.com/ )
> * #racket IRC on freenode.net https://botbot.me/freenode/racket/
> * Tweet @racketlang on Twitter
> * Racket discord 
> https://discord.gg/6Zq8sH5
>
> Don’t forget to 
> * sign up, or contribute, to Racket News https://racket-news.com/
> * submit your links to Racket Stories https://racket-stories.com/
> -- 
> 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/d3751fe1-102c-45a2-9859-af55fd684c4d%40googlegroups.com.