hackernews

1 248 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

Neil Van Dyke

nieprzeczytany,
13 gru 2018, 18:53:4113.12.2018
do Racket-Users List
This might be a bad idea, and normally I disapprove of this sort of
thing, but... does anyone want to take on the job of RACKET EVANGELISM
STRIKE FORCE, among a concentration of startup-types and other software
practitioners?

Specifically, you'd participate regularly in Y Combinator's popular
"Hacker News" Web forum, "https://news.ycombinator.com/", and, when the
not-unusual occasion to mention/show a strength of Racket presents
itself, do so.

I occasionally see Racket mentioned on HN, but not nearly as often as it
legitimately could be.

(There are also other strategic targets for the RACKET EVANGELISM STRIKE
FORCE operator or cell, and I recall Eli Barzilay and others active on a
lot of them years ago, but HN might be first priority right now.)

Jason Stewart

nieprzeczytany,
14 gru 2018, 12:40:2314.12.2018
do Racket Users
Probably counterproductive.  I've still got a bad taste about Rust from all of their people bombing the C and embedded threads--everywhere.

Hard to top HN itself for Racket evangelism.  It's written in Arc, which is written in Racket.

Neil Van Dyke

nieprzeczytany,
14 gru 2018, 20:55:1614.12.2018
do Racket Users
Jason Stewart wrote on 12/14/18 12:40 PM:
> Probably counterproductive.  I've still got a bad taste about Rust
> from all of their people bombing the C and embedded threads--everywhere.

The name is actually adapted affectionately from what I heard called the
"Rust Evangelism Strike Force". :)  (I'm not criticizing Rust; it has a
special appeal to me personally, and there's a lot of great work in Rust.)

I agree wholeheartedly that RACKET EVANGELISM STRIKE FORCE needs to have
a sense of decorum, though I'm not the best person to ask about the
subtleties of that. :)  Some suggestions...

If an HN thread is itemizing tools for DSLs, and Racket isn't mentioned,
or whomever mentioned it missed the biggest selling points, maybe you
should speak up.  Similarly, if someone is talking about trying to add
syntax extension to a language, you can mention what Racket has learned
about that.

If the topic is an unusual neat feature from some language, and there's
a neat Racket package for that, or you can post an interesting small
`syntax-parse` implementation ("this is one way it can be reduced to
more traditional code"), maybe without the riskiness of showing off your
Redex formal semantics skillz, *maybe* that's helpful and good PR.

But you don't want to be "Racket, too, is a computer programming
language".  And, if an HN thread is talking about something someone did
in Foobar Scheme, you probably don't want to say "Racket can run that
code, and we are more popular and better-looking".  Maybe avoid
religious battles, especially ones that have been done to death decades
ago (e.g., hygienic macros).  Don't pick fights about type theory,
because most of us who are not named Matthias would get our butts kicked
if certain other language gangs showed up.

And countless tactical judgment calls you have to make, based on your
RACKET EVANGELISM STRIKE FORCE boots-on-the-ground situational awareness.

Despite the tongue-in-cheek name, you're a fellow enthusiastic and
thoughtful practitioner, who wants to learn what others have to share,
and who wants to share stuff you've already learned.

> Hard to top HN itself for Racket evangelism.  It's written in Arc,
> which is written in Racket.

I think Racket also deserves additional, newer HN claims to fame. :)

(As always, should you or any of your RACKET EVANGELISM STRIKE FORCE be
discovered behaving boorishly, the Professors will disavow any knowledge
of your actions.)

Jens Axel Søgaard

nieprzeczytany,
15 gru 2018, 10:45:1115.12.2018
do Neil Van Dyke, Racket-Users List
Den fre. 14. dec. 2018 kl. 00.53 skrev Neil Van Dyke <ne...@neilvandyke.org>:
This might be a bad idea, and normally I disapprove of this sort of
thing, but... does anyone want to take on the job of RACKET EVANGELISM
STRIKE FORCE, among a concentration of startup-types and other software
practitioners?

Specifically, you'd participate regularly in Y Combinator's popular
"Hacker News" Web forum, "https://news.ycombinator.com/", and, when the
not-unusual occasion to mention/show a strength of Racket presents
itself, do so.

I occasionally see Racket mentioned on HN, but not nearly as often as it
legitimately could be.

FWIW - here is my bookmark for "Has Racket been mentioned lately?"


Peter Schmiedeskamp

nieprzeczytany,
15 gru 2018, 11:48:0915.12.2018
do Racket Users
I’m probably guilty of already being part of this task-force. To add, I wonder if there’d be value in some longer, blog-form replies to interesting HackerNews queries.

For example, someone was extolling the virtues of some new system for building and packaging simple GUI apps for Linux using Python. I’ve poked around with the GUI and packaging facilities of Racket enough to feel like Racket has a pretty good story to tell, at least for smaller cross-platform apps. A short blog showing the end-to-end creation of a small GUI app, with emphasis on showing the symbiosis of the GUI library and the excellent raco packaging and distribution facilities would be a great “reply” to such an article on HN.

I wonder if there's a way that these use cases could at least be collected... maybe as an RFB—Request For Blog. Time is always at a premium, but I could imagine picking off a blog post here and there even though I’m a decidedly rank novice Racketeer.

Maybe there’s already a list somewhere? Maybe RFBs could be a section of the Racket Blog?

Best,
Peter

Jason Stewart

nieprzeczytany,
15 gru 2018, 12:25:0315.12.2018
do Racket Users
RFB is a wonderful idea.  Aside from the main site, there is a lot of catching-up to do (quantity-wise anyway) compared to something like JavaScript or Ruby.

I'm not sure if HN even matters if there are enough good blog posts out there.  Search does a decent job of getting people to those sorts of post.

Biggest obstacles I see to filling the web with Racket articles would be the high quality of existing documentation, and the straight-forward nature of the language itself.  When it comes to things like C++, PHP, and JavaScript, there is so much room for comment because they are all so full of arbitrary / strange / questionable choices that demand further explanation, and once explained, open the field to debate over which (necessary) defensive strategies are best.

George Neuner

nieprzeczytany,
15 gru 2018, 16:53:0615.12.2018
do racket...@googlegroups.com

This hit the news yesterday:  SQLite contained a remote code execution bug.  According to the ZDNet article the bug has been fixed as  of  v3.26.0 released December 1st.  If your application uses SQLite, you probably should update it.   Hopefully the Racket maintainers will update the library (where appropriate) in the next Racket release.

George

John Clements

nieprzeczytany,
15 gru 2018, 18:32:3015.12.2018
do George Neuner, racket...@googlegroups.com
cf. Relevant tweet from Patrick Walton (I worked with Patrick on Rust at Mozilla):

https://twitter.com/pcwalton/status/1073755208558100480
> --
> 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...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.



Neil Van Dyke

nieprzeczytany,
15 gru 2018, 22:38:4315.12.2018
do Racket Users
This piece by Danny Hillis (which I just happened to cite on a very
different topic) is an easy read, and perhaps inspirational on the value
of explanation and cross-pollination, such as one might do when bridging
communities of interest, with popular forum participation and blogs:

http://longnow.org/essays/richard-feynman-connection-machine/

If you like it, other writings and videos by/with/about Feynman have a
lot more.

(Also, if you ever have an opportunity to start an article as "One day
when I was having lunch with Richard Feynman", you must take it.)

Will Jukes

nieprzeczytany,
16 gru 2018, 17:35:3816.12.2018
do Racket Users
Oh but that place just seems so awful.

Alex Harsanyi

nieprzeczytany,
16 gru 2018, 20:30:5516.12.2018
do Racket Users
I have written a few blog posts on Racket GUI topics and I have a few more planned.  They cover some more advanced uses of the GUI library -- I think the basics are already well documented. You can find them here:


Alex.

Jérôme Martin

nieprzeczytany,
17 gru 2018, 09:11:0917.12.2018
do Racket Users
I'm also occasionally writing posts about Racket on my blog. Only one is public for now, and is a multi-parts tutorial about writing DSLs in Racket.

I'm trying to summarize and reformulate some of the things I learned by making small languages in Racket. If you already read Beautiful Racket, I guess there's nothing new to learn, because I'm mostly targeting developers not aware of lisp languages.

Feel free to contact me if you want to share some advice and feedback!

I'm not confident the article is worth a post on HN for now, and I don't know if my Racket server will sustain a mention on HN anyway, but if you feel it's worth posting, feel free to do so.

Gustavo Massaccesi

nieprzeczytany,
17 gru 2018, 09:32:5617.12.2018
do Peter Schmiedeskamp, Neil Van Dyke, Racket Users
I agree that it would be much better to write good blog posts about Racket. They don't need to be fantastic, they don't need to be better than the documentation, they only has to be interesting. I usually prefer post with one or two big relevant graph (or photos when there is hardware involve), I like images. (It doesn't have to be very interesting, sometimes an article is more interesting than what you expect)

Have you recently solved some interesting problem (using Racket)? It's better if it's a real life problem, but a nice toy problem can be interesting too.

Sometimes translating an interesting article to Racket can be a good idea, if the translation shows some unique feature, like a smart use of macros or a library that are not available in other languages.

(Don't post too often. Unless you are very good writing, you can't write more than one interesting article per week(/month(/year)).)

---

The problem of going to HN to write comments about Racket is that the community has a lot of unwritten rules. (No jokes. No kittens. No astroturfing/sockpupet/meatpupets. No onliners. [1] . No voting rings. No asking for votes in other platforms.)

There is no problem if an article gets popular and the author goes to the site to answer the questions. The unwritten rules are not too strict and they don't apply if the author can give some interesting relevant answers and more information. Don't be afraid of answering questions there.

Some types of bad comments:

* photobomb unrelated threads with a reference to Racket. (For example, in an article about regular expression in PHP, posting "Racket has two types of regular expressions").

* astroturfing comments (For example in an article about something in Racket, posting "I use it too and it is fantastic!!!!" [there is also an unwritten rule about too many exclamation marks].)

* fake questions in unrelated articles (like "I wonder if it possible to write this in Racket?")

* "Why didn't they use Racket instead?" "Why don't they rewrite this in Racket?" ([bonus negative points if it is another Scheme-like language])

Gustavo


[1] You can write onliners in HN, but it's very difficult to write good onliners. It's much easier to add more information and more context. Jokes are also legal, but it must be a very good original joke, so better avoid jokes.




--
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...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Hendrik Boom

nieprzeczytany,
17 gru 2018, 13:40:2517.12.2018
do Jérôme Martin, Hendrik Boom
On Mon, Dec 17, 2018 at 06:11:09AM -0800, Jérôme Martin wrote:
> I'm also occasionally writing posts about Racket on my blog. Only one is
> public for now, and is a multi-parts tutorial about writing DSLs in Racket.
>
> I'm trying to summarize and reformulate some of the things I learned by
> making small languages in Racket. If you already read Beautiful Racket, I
> guess there's nothing new to learn, because I'm mostly targeting developers
> not aware of lisp languages.
>
> You can find the first part here:
> http://rilouw.eu/article/the-programming-language-of-your-dreams-part-1
> Feel free to contact me if you want to share some advice and feedback!

Definitely not ready yet. You've written a start to an exposition on
how write a #lang module, and actually showed how to do it in an
incremental way, testing and checking what you do while you do it. An
exposition I'd very much like to read the rest of. I too have racket
tweaks I'd like to implement.

(1) You start out with an imaginary UI language (which hapens to look
like XML; I noticed that!) and you seem to indicate that you're going
to show how Racket can choke that down.

(2) But all you do is show how you can, via your (incomplete)
ui-lang.rkt module, get Racket to behave like Racket. This isn't
likely to impress.

Since I already know about Racket and appreciate it, I can appreciate
what you've accomplished, and how this is a reasonable base for further
development. But the non-Racket-initiate isn't going to get that. And
he's likely not to get around to episode #2 of your exposition.

(3) In the end, you present a different language from the one at the
beginning -- something that's not XML. It might have been better not
even to mention the XML version at the start, but instead mention the
one you are actually going to implement. XML, for the reader you are
targetting, is old-hat anyway.

I'm not at all sure how to rewrite this in a style that is likely to
grab and maintain the interest of the reader you are aiming for.

Writing is *hard*.

Maybe you need to use the textual freedom the web gives you and, early
on, have links to the actual implementation details. Or mention the
translation of this special-purpose language is. Or how it's executed.
Or what the menus look like (a screen-shot, maybe?)

Anywaay, I'd like to see the rest of what you're doing. Perhaps just
email me the actual implementation code so I can look it over before
you rewrite your short series of article.

I'll be happy to provide prepublication critique of what you write --
what works for me, what doesn't work, and what I do and don't think
will work for the intended audience.

-- hendrik

Stephen De Gabrielle

nieprzeczytany,
26 gru 2018, 07:40:5526.12.2018
do Neil Van Dyke, Racket-Users List
Maybe a high profile social media patron - I’m sure JA is doing wonders for TiddlyWiki:

How did other languages grow their audience? e.g. Ruby-on-Rails, Perl, Python, PHP, C++, Rust ?
(All fine languages with  many strengths - but there are many fine languages with the same strengths that are not objectively worse. Some may be better e.g. Haskell, ML family, Lisp family, prolog family)

happy Boxing Day
Stephen

--
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...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
----

Neil Van Dyke

nieprzeczytany,
26 gru 2018, 09:51:2126.12.2018
do Stephen De Gabrielle, Racket-Users List
Stephen De Gabrielle wrote on 12/26/18 7:40 AM:
> How did other languages grow their audience? e.g. Ruby-on-Rails, Perl,
> Python, PHP, C++, Rust ?

All of those had merits, were right place and at right time, and (except
Rust) really spread when there was *a lot* less noise and sheer mass of
stuff.  Also, some of those had very long ramps to their ultimate
popularity (which could give some hope to Racketeers).

Ruby with Rails was a decent language that pushed a good model and
automagical conveniences for Web developer productivity, and they seemed
to have a good community (e.g., when I was shopping around for my new
research platform language, and I don't think I'd even heard of Ruby at
that time, one of the nice Ruby people happened to hear about my quest,
and emailed me, suggesting Ruby).

We talked about Perl growth spikes here recently.

Python started out as some guy on Usenet with a reusable extension
language (Tcl was another, and some RnRS implementations were another)
-- all 3 of them had interesting innovations and merits. (Tcl got
popular because of Tk GUIs, and then it has some moments in the sun for
earlier database-backed Web servers (as opposed to manually-edited HTML)
while a lot more readable than Perl, and was pushed commercially by
Philip Greenspun, before Sun hired Tcl creator Ousterhout, and Tcl
disappeared, in favor of Java and then LiveScript/JS.)

PHP was in the early Web gold rush, when template-ish approaches were
attractive alternative to CGI scripts that started as Perl (or, less
likely, other imperative language) code that spat out HTML strings.  You
could also do HTML templates various other ways, including in Perl, but
the Web was so new, and the tools so not figured out, and everyone was
racing to do neat stuff (or to get VC funding, then Herman Miller office
furniture and launch party, and then IPO), that there was a lot of
random going on, and we aren't in that kind of environment anymore. 
Well, unless you were pitching a "blockchain" startup during the BTC:USD
run-up a year ago -- it didn't much matter what tools you grabbed, so
long as you told the VCs you were doing "blockchain" (you didn't even
have to madlibs pitch "Our startup is like _Uber_, for _cats_!  (Can you
handle the sheer force of our raw innovation, unleashed!)").

C++ had the funding and promotional/endorsement backing of the people
who brought us C and Unix, and (again) there was a lot less stuff, and a
lot fewer programmers.  The people using C were some of the most
technically-skilled programmers: OS-level systems programmers (who also
used assembler), Unix workstation technical application/research
programmers, PC shrinkwrap software developers, and EEs doing software
bits of embedded systems.  (The corporate MIS programmers were a
separate group -- they mostly did database forms and reports and
business logic, and there seemed to be subgroups for different
platforms.  Much of the MIS seemed to be analogous to today's Web
programmers, and I'm not sure how MIS platform adoption decisions were
made in various kinds of organizations then.)

Anyway, besides the Bell Labs / AT&T backing, I recall one thing that
helped push C++ was the people doing GUI and hearing about OO (with
references to Smalltalk), at a time when people were just reasoning
low-level code and ad hoc formalisms, or using pre-OO analysis and
design methods (structured SA and SD, ERDs, etc.), and it was really
easy to sell generalization/polymorphism to those people.  Plus AT&T was
saying C++ would help with mission-critical and performance-critical
large and complex systems, and you had workstation developers like
Mentor Graphics endorsing it.  Also, again, the amount of stuff and the
number of programmers was a lot smaller then; one anecdote: by the time
there was a Usenix C++ conference, it was small enough that, while
Stroustrup was talking during a Q&A in the hotel conference room (maybe
around the scale of current RacketCon), some toddler goes running up the
aisle from the back of the room, saying something like "daddy!", and
everyone laughs.

Early Rust had some really thoughtful and language careful design, and
it tackled one of the hardest challenges of working in C, which is
allocation management (which not enough C programmers take seriously
enough).  Now they have the funding investment and high-profile
endorsement (sound familiar?) of Mozilla and a few other
credibility-lending companies, and might be driven now in part by
pragmatic needs of projects.  (Early Racket pragmatics also seemed
driven by pragmatic needs, like getting DrScheme to work, and
cross-platform.)  Rust has also attracted a ton of volunteer effort,
including a large number of high-quality and innovative reusable
packages.  (Innovative, not unlike you'd see from Lisp-family people,
because their platform gives them an advantage, and because the
programmer is likely to be high-skilled.  Racket was doing some of this
early on, but the numbers of such contributions didn't ramp up as
quickly as they did for Rust.)  I missed part of history of how Rust
evolved, while I was focused on Racket and paying bills, so maybe
someone can fill in the gaps here of how they bootstrapped popularity,
and what Racket can learn from that.

(BTW, it's good to see Racket's secret research lab doing more work on
DSLs and other things.  We can't rest on our laurels, and other
languages are improving their DSL support, though they have syntax
handicaps and are starting way later than us, Bell Labs and older Lisps
excepted.)

Why I suggested focusing outreach on Hacker News (and maybe I've talked
about it more recently on "racket-money" than "racket-users") was... I
want to see more people making a living working with/on Racket (outside
of professorships, and grad student slave stipends), and I think that
means a lot more companies using it for substantial projects, and I
suspect the best bet is startups who can choose their tools (and are
funded as gambles), and I suspect the best bet for that is getting HN
startup success stories like: "we got to launch and ___ funding round,
with Racket, because DSLs, and Racket is the best for that".  Then other
HN people will see a success story, a couple might be inspired to think
about DSLs for their own startup idea, and then somehow this becomes
RACKET EXPONENTIAL EXPLOSION.  Or at least more people making a living
working with/on Racket.

BTW, maybe jobs using Racket will also encourage a lot more quality
contributions of packages, when there's the additional motivation of
open source "auditioning" for jobs, in addition to the current community
participation, platform promotion, and love of craft.

Matthew Butterick

nieprzeczytany,
26 gru 2018, 13:50:2026.12.2018
do Neil Van Dyke, Racket-Users List
I agree that success stories are helpful. I'll go one better — I think it would be great to have a section of the main Racket website devoted to these stories that show who uses Racket and how / why (inside & outside academia). This could be done in an interview-style format, like Jesse Alama's recent book about language-making in Racket [1]. Photos also. I would be happy to contribute design & layout if a sufficiently motivated collaborator — you, Neil? — wanted to conduct the interviews & gather the material.

I find the idea of doing language advocacy *on* Hacker News (or Stack Overflow, or Quora, etc.) to be weird. Not because I'm a curmudgeon. But rather because it's inherently low-leverage, and misses a lot of the people who are persuadable.

Neil Van Dyke

nieprzeczytany,
26 gru 2018, 16:20:0026.12.2018
do Matthew Butterick, Racket-Users List
Matthew Butterick wrote on 12/26/18 1:50 PM:
> I agree that success stories are helpful. I'll go one better — I think
> it would be great to have a section of the main Racket website devoted
> to these stories that show who uses Racket and how / why (inside &
> outside academia). This could be done in an interview-style format,
> like Jesse Alama's recent book about language-making in Racket [1].
> Photos also.

These success stories on the Racket Web site sound like a good idea.

Or, even short testimonials, or even movie poster blurb one-liners, on
the Racket Web site, could also be good.

If one did these success stories on the Racket Web site, you could
promote them with post(s) to Hacker News and somewhere on Reddit (not
"/r/racket", unless you can get it cross-posted to where startup-types
are, or somehow to the default front page).

One caution: careful not to damn oneself with faint praise.  The
interviewer/editor would need to find noteworthy and reasonably
current/big stories.  It's pretty common (and I've done it myself) in
promotion of things with low adoption thus far to milk a few uses way
too much, and way past their freshness date.

> I would be happy to contribute design & layout if a sufficiently
> motivated collaborator — you, Neil? — wanted to conduct the interviews
> & gather the material.

I'm maxed out on pro bono actual-work right now.  ('My TED talk'
explains my role now: "https://www.youtube.com/watch?v=DkGMY63FF3Q&t=4s")

If no Racketeer with journalistic inclinations can make these success
story writeups happen, maybe one of the university Communications
offices wants to do a piece on some of the Racket research and the "open
science" aspects of it, including getting "technology transfer" quotes
from commercial users.  And the Racket Web site could reproduce the
article, with permission.  And then promote that URL on HN and wherever,
and followup with the grassroots evangelizing.  (NEU PR people, for
example, have this and some Racket-related prestigious awards and
spreading international academic influence to brag about.)

> I find the idea of doing language advocacy *on* Hacker News (or Stack
> Overflow, or Quora, etc.) to be weird. Not because I'm a curmudgeon.
> But rather because it's inherently low-leverage, and misses a lot of
> the people who are persuadable.

You could be right.  I was only thinking of how to reach people who'll
do startups, with low-investment grassroots effort that every Racketeer
could do.

(Reaching academics through research publications and prior Scheme/Lisp
awareness, and undergrads through HtDP, for about two decades now, has
not been converting to significant numbers of startups and other
companies that use Racket.  I'm having flashbacks to earlier in Racket
history, when I was surprised that every MIT Course VI (CS & EE) ugrad
alum I encountered, despite having been taught Scheme in their
CS-formative years, thought Scheme was only a pedagogic language for
SICP problem sets.  It's like Scheme made an unholy bargain, to let it
produce top intro CS textbooks, and we're foolishly fighting against the
curse side of that. :)

Stephen De Gabrielle

nieprzeczytany,
26 gru 2018, 16:51:0326.12.2018
do Matthew Butterick, Neil Van Dyke, Racket-Users List
Hi Matthew, Neil,

> the people who are persuadable.
So who are the ‘persuadable’? And where to find them if not on hn? 

I’m one of the ‘corporate MIS programmers’, but in the public sector(health), and I get to interact with a variety of software vendors as well as and build forms, worklists, reports and business logic on their platforms. I certainly don’t get to choose.

My role does put me in the lucky position to ask ISV’s what languages their systems are written in;
Example include (from older to newer)
* COBOL 
* VB.6 (two vendors)
* ASP.net, C# & JavaScript (more recent vendor)
* PHP w/Symfony & Python
* Ruby on Rails 
* Java
* Perl 
* Cache/MUMPS (two vendors - one is actually the customer of the other)
[ these are all ‘single product vendors’ - I don’t know if that is unusual in industry ]

In all the cases it seems the language is determined by the founder, and has not changed for the life of the product & company, in some cases for many years (the cobol and VB products have been around for 20+ years)

I’ve even met some of the founders - 3 out of 4 are specialty doctors.

I will have to ask next time I meet a founder, but at this stage I don’t think any ‘choosing a language’ was involved - I think the founders I have met just chose whatever was available at the time. (if you a meet a potential founder please say ‘have you looked at Racket?’)

I had to type this to put it together in my head - maybe I shouldn’t have sent it and bored you with my thought processes.

So who are the ‘persuadable’? And where to find them? 

Kind regards,

Stephen

PS in my workplace the biggest competitor isn’t other languages, it is the spreadsheet; sometimes stand alone, sometimes linked or shared, but mostly with no VBA.

PPS I think the Jupyter enhanced REPL idea is worth pursuing and extending as this might be a way generate interest in the Racket runtime and associated languages.




--
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...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
----

Neil Van Dyke

nieprzeczytany,
26 gru 2018, 17:09:1426.12.2018
do Stephen De Gabrielle, Racket-Users List
Stephen, thanks for the useful info on adoption in health sector MIS.

Stephen De Gabrielle wrote on 12/26/18 4:50 PM:
> PPS I think the Jupyter enhanced REPL idea is worth pursuing and
> extending as this might be a way generate interest in the Racket
> runtime and associated languages.

BTW, to be clear (since it took me a while to unravel the vague and
changing meanings of Jupyter and IPython the other day)...

What I proposed in another thread here was adding an user interface to
DrRacket that's inspired by Jupyter Notebook and other notebook
metaphors from stats tools.

There's also a different possible Jupyter angle for Racket, in which
Racket is a backend for the Jupyter frontends (in lieu of DrRacket).  I
think that approach would also be useful for some people, and Ryan
Culpepper is already tackling that one (and I wanted to let him
publicize it on his schedule).

These two different approaches might interoperate, if the first approach
also saves a Jupyter ".ipynb" file, and then notebooks files could be
moved back and forth between DrRacket and Jupyter, and run in both.

Jason Stewart

nieprzeczytany,
26 gru 2018, 17:25:3126.12.2018
do Racket Users
Even for blue-sky projects without any legacy lock-in, I don't fancy our chances with the enterprise/MIS crowd.  They tend to favor straight-jacket languages, and for good reason!

For some guy running a two-man startup, something like Racket is a super weapon.  For a large organization--with any staff turnaround at all--metaprogramming is cancer.  They need a "paper trail" for the next guy to follow.

Neil Van Dyke

nieprzeczytany,
26 gru 2018, 18:05:0126.12.2018
do Jason Stewart, Racket Users
Jason Stewart wrote on 12/26/18 5:25 PM:
> Even for blue-sky projects without any legacy lock-in, I don't fancy
> our chances with the enterprise/MIS crowd.  They tend to favor
> straight-jacket languages, and for good reason!

Agreed.  (A big-corporate exception being R&D and "startup-like" units,
not necessarily under MIS, like some might have in, e.g., fintech.)

> For some guy running a two-man startup, something like Racket is a
> super weapon.  For a large organization--with any staff turnaround at
> all--metaprogramming is cancer.  They need a "paper trail" for the
> next guy to follow.

Them's fightin' words. :)  For a counterexample, consider a programmer
inheriting a project with an LALR or LR(1) parser written voluminously
by hand, and a programmer inheriting a project instead using a parser
generator DSL.  The non-DSL-using code might never be understood enough
to find the bugs or extend it correctly.  The new programmer might not
even recognize the model that the non-DSL-using one is supposed to be
implementing, nor stick to a documented model in what changes they do. 
And then a third programmer comes along, and then a fourth...

In an organization with good software engineering, judicious use of
DSLs, and having them well-documented, tested, and maintainable, seems a
win.

I think bigger barriers to enterprise adoption of Racket than "I heard
that 'metaprogramming' eats your babies" are:
(1) Wanting employees to be interchangeable cheap commodities.
(2) Wanting someone to blame/sue/consult if anything goes wrong.

I'm happy to let "the enterprise" wait to adopt Racket until after
everyone else has had years of success stories.

I think we agree that startups are a much more likely path for Racket
commercial uptake.

Hendrik Boom

nieprzeczytany,
27 gru 2018, 09:44:5827.12.2018
do Racket-Users List
On Wed, Dec 26, 2018 at 09:51:17AM -0500, Neil Van Dyke wrote:
>
> Python started out as some guy on Usenet with a reusable extension
> language (Tcl was another, and some RnRS implementations were another)
> -- all 3 of them had interesting innovations and merits. (Tcl got
> popular because of Tk GUIs, and then it has some moments in the sun
> for earlier database-backed Web servers (as opposed to manually-edited
> HTML) while a lot more readable than Perl, and was pushed commercially
> by Philip Greenspun, before Sun hired Tcl creator Ousterhout, and Tcl
> disappeared, in favor of Java and then LiveScript/JS.)

I seem to remember hearing that Scheme was one of the
inspirations for Python. That and another language.

-- hendrik

Brett Gilio

nieprzeczytany,
27 gru 2018, 11:24:1927.12.2018
do Hendrik Boom, Racket-Users List
That other language is Dylan, which is also inspired by Scheme.

Brett Gilio

Matthew Butterick

nieprzeczytany,
27 gru 2018, 12:00:3327.12.2018
do Brett Gilio, Hendrik Boom, Racket-Users List
According to Brendan Eich, "The good parts of [JavaScript] go back to Scheme and Self" [1] combined with "a lot of stupid". [2]

Neil Van Dyke

nieprzeczytany,
27 gru 2018, 13:46:4827.12.2018
do Racket-Users List
Matthew Butterick wrote on 12/27/18 12:00 PM:
> According to Brendan Eich, "The good parts of [JavaScript] go back to
> Scheme and Self" [1] combined with "a lot of stupid". [2]

I appreciate Eich's candor and thoughtfulness there.

From Self, I think JavaScript initially got the prototype object model,
and possibly whatever slot access/dispatch optimizations Self used.

Self did some even more novel/noteworthy things, which PL enthusiasts
would want to know about: JIT or runtime incremental optimization,
visual/concrete programming active morphs worlds, and (I include this)
the morphs world object editors.

Self was very neat and exotic at the time I used it.  And the set of
innovations suggests such a pleasing causal chain of necessity being the
mother of invention, that I don't want to know if it's not the truth: 
morphs world => loose prototype-delegation concurrent objects => runtime
optimization.

Regarding Scheme, I suppose Eich might've just used a simple Scheme with
a prototype object model (it's very simple to implement).  But Java was
already out there, the original purpose of LS/JS (IIRC) was merely glue
to load Java applets (not full-GUI-application DOM manipulation and
logic like today), and Sun had made Java have a C++/C syntax, because
that's the kind of programmer they thought would be developing in it.  I
suppose, as soon as I was whipping up a "Java-ish light scripting
language" back then, even if Scheme was my inspiration, as soon as I was
figuring out the different syntax anyway, I probably would've simplified
semantics (e.g., free tail calls and first-class continuations would
seem unnecessary).

Stephen De Gabrielle

nieprzeczytany,
27 gru 2018, 16:47:2927.12.2018
do Neil Van Dyke, Racket-Users List
I always wanted to ask if the prototype object model is a good idea or bad idea?

The same question applies to Morphic User Interface Construction Environment - good idea or bad idea?

Given neither idea seems to have caught on I’m assuming both are dead ends?

Kind regards,

Stephen

Andrew Gwozdziewycz

nieprzeczytany,
27 gru 2018, 17:06:3627.12.2018
do Brett Gilio, Hendrik Boom, Racket-Users List
Sometime in the 2000s, I heard Guido talk at Google NYC about the
history of Python. In the 80s he was working for / with librarians who
used a language called "ABC." Python was meant to be a better version
of that. The History of Python wiki page suggests it was meant as a
"better verson of ABC with exceptions and better integration with the
Amoeba Operating System."[1] The exceptions originally were inspired
by Modula-3, apparently. Any influence of Lisp, and Scheme came later,
is my guess. That same page cites a quote from Guido suggesting "some
Lisp hacker" implemented map, filter, and lambda for version 1.


[1]: https://en.wikipedia.org/wiki/History_of_Python


--
http://www.apgwoz.com

Hendrik Boom

nieprzeczytany,
27 gru 2018, 17:15:4227.12.2018
do Racket-Users List
On Thu, Dec 27, 2018 at 02:06:22PM -0800, Andrew Gwozdziewycz wrote:
> On Thu, Dec 27, 2018 at 8:24 AM Brett Gilio <bre...@posteo.net> wrote:
> >
> >
> > Hendrik Boom writes:
> >
> > > On Wed, Dec 26, 2018 at 09:51:17AM -0500, Neil Van Dyke wrote:
> > >>
> > >> Python started out as some guy on Usenet with a reusable extension
> > >> language (Tcl was another, and some RnRS implementations were another)
> > >> -- all 3 of them had interesting innovations and merits. (Tcl got
> > >> popular because of Tk GUIs, and then it has some moments in the sun
> > >> for earlier database-backed Web servers (as opposed to manually-edited
> > >> HTML) while a lot more readable than Perl, and was pushed commercially
> > >> by Philip Greenspun, before Sun hired Tcl creator Ousterhout, and Tcl
> > >> disappeared, in favor of Java and then LiveScript/JS.)
> > >
> > > I seem to remember hearing that Scheme was one of the
> > > inspirations for Python. That and another language.
> > >
> > > -- hendrik
> >
> > That other language is Dylan, which is also inspired by Scheme.
>
> Sometime in the 2000s, I heard Guido talk at Google NYC about the
> history of Python. In the 80s he was working for / with librarians who
> used a language called "ABC."

Is that the ABC pioneered by Lambert Meertens? I was familiar
with it in its early days. It was meant to be a better language
for beginners than BASIC.

> Python was meant to be a better version
> of that. The History of Python wiki page suggests it was meant as a
> "better verson of ABC with exceptions and better integration with the
> Amoeba Operating System."[1] The exceptions originally were inspired
> by Modula-3, apparently.

Yeah. That was the other language I couldn't think of. One
of my favorites for a long time, and implementations still
available online. An elegant language, except for its Pascal
syntax.

-- hendrik

Neil Van Dyke

nieprzeczytany,
27 gru 2018, 21:27:0727.12.2018
do Stephen De Gabrielle, Racket-Users List
Stephen De Gabrielle wrote on 12/27/18 4:47 PM:
> I always wanted to ask if the prototype object model is a good idea or bad idea?

I think it's not a bad idea, but I think you probably wouldn't use it
for general-purpose OOA, OOD, or OOP right now.  For a long time, OO
overwhelmingly embraced mostly the same class-instance-inheritance
model.  Recently, we're seeing some newly popular languages back off
from that very familiar model, including dusting off some ideas like
traits/interfaces and mixins/composition.

I currently suspect that prototype models might be most useful for
*not-very-programmer-ish end user* HCI models, when you don't want to
deal in conventional types, or you can't.  My most recent example, the
last few weeks, is finding a usable end-user semi-natural language DSL
for nutrition tracking.  Consider that you want to very rapidly capture
information about what you cook and eat.  You have concepts of
ingredients and quantities.  You might also have concepts like how you
usually make your coffee, or a few sandwiches and soups you often make
the same.  You also have dishes that you make less-often or are
one-offs.  You have leftovers, and the leftovers can evolve.  And you
always want your nutritional intake tracked.  It's looking like the
conceptual model backing a quick semi-natural language for this might
indeed be a prototype object model, in which there's a lot of
like-that-but-different-and-distinct.

Maybe (just speculating, off the cuff) it turns out there's also a place
for prototype object models in symbolic machine learning, in acquiring
some variation on frame-based representations of knowledge.

Obligatory Racket: You can make your own prototype object model in
Racket pretty easily, a number of ways.  You can do some ways in an
hour, or spend a day on linguistic tweaking, or spend a week or more
making it faster or working through some ideas you thought of while you
were working through it.

> The same question applies to Morphic User Interface Construction Environment - good idea or bad idea?

I haven't had a chance to play with the latest work in this space, and
maybe someone else here can talk about how the latest work conceptualizes.

It might be a coherent basket of things that you already see many
places, and will increasingly see even more (direct manipulation user
interfaces, composing/decomposing systems as interacting concurrent
objects and aggregations/assemblies, maybe adapt to augmented reality
interfaces for ubiquitous programmable things/materials in real space,
etc.).

Also, who knows what happens, if large numbers of kids can build with
this and other complex models during early developmental years?  Maybe
we start seeing new HCI that takes advantage of a facility with those
models.  Or we see new perspectives/understandings, due to the popularly
expanded mental machinery.  (They'll need the new powers, to deal with
everything the last 20 years of CS did through dotcoms.)

Jesse Alama

nieprzeczytany,
28 gru 2018, 00:18:3728.12.2018
do Neil Van Dyke, Jason Stewart, Racket Users
I've had some moderate success in established, non-Racket companies by
working around -- rather than taking on and trying to replace -- the
main language & toolchain. For the PHP shop where I work, I made a DSL
called Riposte [1] for testing HTTP APIs. It has become, in time, the de
facto tool for such things. Thanks to Riposte, all developers have
Racket installed on their workstations, even though I'm the only one who
knows Racket and can fix problems with the tool.

I made a tool (1) whose benefits to my boss and teammates are obvious,
(2) which is clearly hard to do in the main language, but (3) which
would not kill the main line of development if I were to go away. A boss
who respects his employee's skills and their need to "do his own thing"
while still helping the company may indeed welcome Racket, in limited
ways, on these grounds.

I might advocate for just making great tools/languages privately, then
trying to make the argument for them later. The opposite is trying to
get permission up-front to do something in Racket. That's less likely to
succeed, I think, than just making something great and explaining its
benefits, over time, at opportune moments. In my case, that meant
talking with co-workers about their work and asking: "How can we model
the proposed change in the API and be sure that we've really succeeded?"
The implied answer being: "Write a Riposte script." That's the moment
where it becomes clear that what I made has real benefits. I don't even
"push" Racket. I just introduce the DSL and show them how it helps them.

Jesse

[1]: https://riposte.in

Thomas F. Burdick

nieprzeczytany,
28 gru 2018, 05:13:1828.12.2018
do racket...@googlegroups.com, Stephen De Gabrielle, Neil Van Dyke, Racket-Users List


On December 27, 2018 10:47:24 PM GMT+01:00, Stephen De Gabrielle <spdega...@gmail.com> wrote:
>I always wanted to ask if the prototype object model is a good idea or
>bad idea?

The most fun I ever had making GUIs was in Garnet, a library for CMU CL which combined prototype objects and a system where slots we're computed from formulas (a forerunner to FRP). The combination was just fantastic, productive, and made the code very easy to follow.

Hendrik Boom

nieprzeczytany,
28 gru 2018, 13:10:2928.12.2018
do Racket Users
On Fri, Dec 28, 2018 at 06:18:30AM +0100, Jesse Alama wrote:
>
> I've had some moderate success in established, non-Racket companies by
> working around -- rather than taking on and trying to replace -- the main
> language & toolchain. For the PHP shop where I work, I made a DSL called
> Riposte [1] for testing HTTP APIs. It has become, in time, the de facto tool
> for such things. Thanks to Riposte, all developers have Racket installed on
> their workstations, even though I'm the only one who knows Racket and can
> fix problems with the tool.

Not for Racket, but for Scheme: Gambit makes a great scripting
language for C and C++.

At a Lisp-related conference a few years at, there was a paper
describing a 200,000-line C/C++ program that got Gambit grafted
on. Subsequent development found it often better to add
functionality to the Gambit scripts than to rewrite existing
C/C++ code. Within a few years the entire system was vastly
smaller, and faster as well.

An example of gradualism. Perhaps the application was ideally suited to
it, perhaps not. I don't know.

-- hendrik

BD1 a

nieprzeczytany,
29 gru 2018, 10:31:1329.12.2018
do Racket Users

I may be out of place here as I am a total beginner to programing.  In a matter of fact, I just pick up HTDP from Amazon to teach myself programing.   Respectfully, IMHO if you want to increase the popularity of Racket.  You can’t just place racket as another me too language like python, etc.  You must show, what problems does Racket solve or make exponentially easier that makes the risk of spending the time to learn, apply and deploy a racket based software solution to solve real life problems worth it.   A good example of what I mean is Yaron Minsky presentation about why Jane Street uses OCaml.  Even someone like me, who can’t even program an excel spreadsheet and who has never used a computer for more than social media can understand clearly the reasoning behind Minsky choice of OCaml.  Minsky clearly explains the problems that OCaml solves or makes exponentially easier and uses real life examples in his presentation.  In short, he answers the WHY!


Why should someone choose Racket to learn programing as opposed to another language such as Python? 


What problems do organizations, small business, and start up face that would make the risk of choosing Racket worth it?


What issues are prevalent in the software industry, that using Racket alleviates as compared to another language? 


Where are the real world examples of Racket being used to solve problems?


What is a programable programing language and how does it make my life easier as compared to other languages? 


What is language oriented programming?


If the racket community has already answered these questions, where would a person go to find out such things?

Etc, Etc, Etc


Respectfully, I would also concentrate on Rackets web presence.  If I was to google any of the popular languages, I would find the answer to these questions in spades, with real life applications, and examples.  You can also compare Pythons website to Rackets.   Pythons website seems to be design more for advertising Python.  If I go to the Pythons web page there is a section “use Python for” in it, it has various topics such as web development, GUI development, scientific and numeric, with all the applicable packages needed.   If you knew nothing about Python, but where interested in using it for web development, it easy to see where to go, etc.   Conversely if I was to google Racket, the answers are not as clear.  If you go to the Rackets web page, it not clear what I can use Racket for.  I would have to dig  deeper into Rackets websites to see if Racket would be a suitable solution to the problem I am trying to solve.  Respectfully Rackets website, while nice, seems to place Racket more towards educational/ toy language purposes, while Pythons website seems to place Python more towards industrial real world uses.  

 

I am just a beginner, and I have nothing but a superficial knowledge of Racket, computing, or the software industry.  My intention is not to attack or belittle the hard work put into racket by members, so I hope I don’t come off that way.  As a beginner, I just wanted to share my perspective in the difficulty in  choosing Racket as my first language to learn add my 2 cents to the conversation.

Tomasz Rola

nieprzeczytany,
29 gru 2018, 13:48:3929.12.2018
do Racket-Users List, Neil Van Dyke
On Wed, Dec 26, 2018 at 09:51:17AM -0500, Neil Van Dyke wrote:
> Stephen De Gabrielle wrote on 12/26/18 7:40 AM:
> >How did other languages grow their audience? e.g. Ruby-on-Rails,
> >Perl, Python, PHP, C++, Rust ?
>
> All of those had merits, were right place and at right time, and
> (except Rust) really spread when there was *a lot* less noise and
> sheer mass of stuff.  Also, some of those had very long ramps to
> their ultimate popularity (which could give some hope to
> Racketeers).
[...]
> Why I suggested focusing outreach on Hacker News (and maybe I've
> talked about it more recently on "racket-money" than "racket-users")

What follows are just my thoughts, not a critique of Racket (I am
unwilling to criticize without suggesting how to improve things and it
always irritates me when someone just says "you wrong" and never
explains, so I am not saying "you wrong", ok?). More like, summary of
my position with regard to R* and some loose thoughts about improving
its adoption. Very subjective. And, being short on time, as usually, I
may write here about something already mentioned in this thread, so if
yes sorry for that.

I guess the kind of people on HN (and https://lobste.rs/ , another
place I regurarly attend) take their time and do a research by
themselves. Evangelism would do nothing to them (judging by myself, at
least), but interesting story tagged as "Show", a project using
Racket, that is another thing. But it is "the story, a project, what
is it" first, and only then "written in Racket".

Another places I frequent are various types of aggegators under the
name "Planet":

http://planet.emacsen.org/
http://www.planeterlang.com/
http://planet.haskell.org/
http://ocaml.org/community/planet/

and last but not least,

http://scheme.dk/planet/
http://planet.lisp.org/

Where does Racket belong? I understand Racket community no longer
considers themselves as part of Scheme landscape, but I am unable to
say where I get this impression from. If I am wrong, then the first
thing for anybody willing to contribute to R* success would be to make
their blog being displayed on Scheme Planet (IMHO). If I am right (R*
not Scheme), then this is a pity. I will cope just fine, but consider
the fate of Lush, a very interesting Lisp dialect. A very capable, if
I can judge without really trying it. And their latest-latest news is
from 2009:

http://lush.sourceforge.net/

Right now I am willing to write some scripts, with intention to run
them both on Linux and OpenBSD. A kind of stuff that is normally
written in Perl. But to be frank, two months ago I tried again writing
some smaller utility in Perl and ended up writing said util in gawk. I
know I am not stupid, but I have to avoid Perl. So the plan is to
write those utils in Gauche, because it seems to have what I need and
can take R5RS (for a while).

This means I will have to have source at my hand, just install *BSD,
compile Gauche, install my scripts, ready to go, before any network is
up I mean.

Does Racket match such a use case? I can compile it from sources
(actually, living on a very dated Debian I have no other way to stay
current, so I not only can but actually do) but I wonder if it will
compile in a very limited, rugged environment - no network connection,
just what was there in base install (with C compiler, of course). I
might try one day, but it seems Gauche has less dependency on outside
packages than R*.

See, while I appreciate Racket a lot there is no actual case where I
myself would want to rely on it (also, Lush). Like, I write a program
and hope it will keep working for the next few years without much work
(other than bug fixing). Thus, language stability is important to
me. Or backwards compatibility. Or at least knowing I can switch to
alternative implementation, should I ever feel such necessity.

As far as I can see it, Racket contributes to fragmentation of Scheme
scene (which is already a "everybody tends for oneself" kind,
AFAICT). There is no clear message if there is way to run in R* a code
developed with other Schemes or vice versa and a very minimalistic
effort to portability in a form of slib library is not going to work
in R*, am I right?

Common Lispers have a dated language (and boy sometimes it shows) but
at least they work together (or make good impression). And look at
their planet (mentioned above). I would be happy to write my utils in
CLISP - nice, small, conforming CL, but there is a small complication
in form of requiring certain library in just exact version matching
the exact version of CLISP and this certainly can be mitigated but I
have not so much time to tinker with other people's code. And another
"small problem" was that last time I tried writing such system util in
CL, certain file names were "transparent" for CL (because they looked
like regular expression) and I could not find way to open them (hint
from the web did not work, time ran out). So I will tinker with Scheme
and see how I fare. Yes it is time consuming, and yes, I would rather
learn R7RS than try again and fail again to use Perl. And yes, I might
become trapped with Gauche, and unable to switch to alternative, but I
may be able to compile it from src for long enough to devise way out
of it. If nothing else, I had a look into src and chances are I might
maintain a working version for a short while, just for myself, and by
myself. I do not see such chance with Racket. Another nice choice for
my goals might have been Chicken, but again, not sure if I have a
chance to maintain, probably not.

(Yes, I am abitextremalistic when it comes to choosing prog lang for
myself and I consider scenarios involving all real maintainers driven
over by selfdriving lorries and github+gitlab busted by idiot CEOs -
if I am good in such case, I should be good with world ruled by
Windows11 too).

Another niche for which I would like to consider R* is mobile apps
(i.e. for smartphone). But, is it possible to do such thing, actually?
From what I have read, Free Pascal Compiler has tools for this and
more, so chances are that for my first Android app (the one which is
for learning it) I would turn my attention there. If nothing else,
having to use different language for each platform is unacceptable (or
else I would have to write same app twice or more, in Java and in
Swing and in something, too).

So, to sum up, Racket is interesting, well written, has an excellent
docs and stuff but is not convincing. At least for me. I cannot say if
there is one clear use case. I mean, in real life. In theory, one can
write anything in it. In practice, however, what has been written
actually?

[...]
> story, a couple might be inspired to think about DSLs for their own
> startup idea, and then somehow this becomes RACKET EXPONENTIAL
> EXPLOSION.  Or at least more people making a living working with/on
> Racket.

For this, Racket has to be more interoperable. Can it replace Java?
Can it work with Java libraries? I guess no. Not now, at least. Not a
big problem, but might be nice to have.

It can replace Perl, possibly. And is probably faster than Perl. It
should try to cater to people using Python and Ruby. Python has an
excellent "batteries included" motto. There is plenty of nice programs
one can write with just standard set of Python. And their packages
reside in nice hierarchy (os, sys, tk - one can have a pointer as to
where to look for function returning directory contents).

Placing itself as a new, better glue language? Is that a position for
Racket? Something which can talk to and make use of existing Python,
Perl, Ruby code? Open up a spreadsheet, read data, feed it to Python
library, write back results. This kind of stuff would be a seller,
IMHO. Thanks to ongoing changes to various languages I used to rub
myself with, I am unwilling to write new code in them but I would
really appreciate having a way to use this Python3 code in a future,
when Python5 will make "3" obsolete and incompatible.

> BTW, maybe jobs using Racket will also encourage a lot more quality
> contributions of packages, when there's the additional motivation of
> open source "auditioning" for jobs, in addition to the current
> community participation, platform promotion, and love of craft.

Forget it. I think this is standing a problem on its head. I think
jobs will come if R* provides a way to solve the kind of problems that
go with jobs. From my point of view, it is either utilities/system
programming and/or stuff like reading and manipulating data in files,
databases and spreadsheets (this one being most important, because
people are using them for everything, poorly and it will probably
start showing up and become obvious to everybody as source of nasty
problems). And showing some controls for mouse.

Or, if that is present already, then spreading the news via blogs and
planets.

Well, enough for today.

--
Regards,
Tomasz Rola

--
** A C programmer asked whether computer had Buddha's nature. **
** As the answer, master did "rm -rif" on the programmer's home **
** directory. And then the C programmer became enlightened... **
** **
** Tomasz Rola mailto:tomas...@bigfoot.com **

Jens Axel Søgaard

nieprzeczytany,
29 gru 2018, 13:53:5629.12.2018
do Tomasz Rola, Racket-Users List, Neil Van Dyke
Den lør. 29. dec. 2018 kl. 19.48 skrev Tomasz Rola <rto...@ceti.pl>:
Apropos - if you want your blog on Planet Scheme, send me a mail.

/Jens Axel

 

Philip McGrath

nieprzeczytany,
29 gru 2018, 22:32:2829.12.2018
do BD1 a, Racket Users
On Sat, Dec 29, 2018 at 10:31 AM BD1 a <acate...@gmail.com> wrote:

I may be out of place here as I am a total beginner to programing. 


I think hearing from an absolute newcomer is very useful: ignorance is a non-renewable resource! 

Respectfully, I would also concentrate on Rackets web presence.  If I was to google any of the popular languages, I would find the answer to these questions in spades, with real life applications, and examples.  You can also compare Pythons website to Rackets.   Pythons website seems to be design more for advertising Python.  If I go to the Pythons web page there is a section “use Python for” in it, it has various topics such as web development, GUI development, scientific and numeric, with all the applicable packages needed.   If you knew nothing about Python, but where interested in using it for web development, it easy to see where to go, etc.  


I would be interested to hear more about your experience with Racket's web site, because it tries to include these things, but evidently it did not succeed in communicating them to you. When I go to https://racket-lang.org/ and scroll down about one screen's worth, I see short, runable examples of a few flashy features including web development and GUI applications specifically, with links to tutorials and documentation.

Are you looking for more or different material, or was it not clear to you from the presentation on the website that these examples were what you are looking for? I guess I can see some potential issues for discoverability: you have to click to show any prose, even a heading (rather than just code), and introducing the examples with "Make your dream language, or use one of the dozens already available, including these —" may not make it obvious what kind of examples these are, especially to non-Racketeers, and especially since it's possible to write GUI and web programs in Racket without using a special #lang.

Alexis King

nieprzeczytany,
29 gru 2018, 23:16:0529.12.2018
do Philip McGrath, BD1 a, Racket Users
> On Dec 29, 2018, at 21:32, Philip McGrath <phi...@philipmcgrath.com> wrote:
>
>> Respectfully, I would also concentrate on Rackets web presence. If I was to google any of the popular languages, I would find the answer to these questions in spades, with real life applications, and examples. You can also compare Pythons website to Rackets. Pythons website seems to be design more for advertising Python. If I go to the Pythons web page there is a section “use Python for” in it, it has various topics such as web development, GUI development, scientific and numeric, with all the applicable packages needed. If you knew nothing about Python, but where interested in using it for web development, it easy to see where to go, etc.
>
> I would be interested to hear more about your experience with Racket's web site, because it tries to include these things, but evidently it did not succeed in communicating them to you. When I go to https://racket-lang.org/ and scroll down about one screen's worth, I see short, runable examples of a few flashy features including web development and GUI applications specifically, with links to tutorials and documentation.

The previous version of the Racket website (before its redesign two years ago) included such things more explicitly, in a format non-Racketters (which is who the homepage is for, after all!) are more likely to comprehend. It included, among other things, a clear purpose statement for the language at the very top of the page, a set of small, to the point code examples that showed off various kinds of general-purpose programming (with explanations), and a set of links to further resources clearly geared towards programmers of different skill levels. To give you a sense for how this website used to be targeted, here’s the aforementioned purpose statement, in its entirety:

> Racket is a full-spectrum programming language. It goes beyond Lisp and Scheme with dialects that support objects, types, laziness, and more. Racket enables programmers to link components written in different dialects, and it empowers programmers to create new, project-specific dialects. Racket's libraries support applications from web servers and databases to GUIs and charts.

The concepts enumerated in the above statement are linked to the relevant sections in the Guide for those interested in learning more.

The following code snippets showed Racket doing mundane but useful tasks an “ordinary” programmer would likely understand. They included things like simple scripting using the filesystem, a small web server, basic terminal I/O, creating a GUI window, a toy web scraper, and even sending e-mail. Towards the end of this carousel of snippets, some of Racket’s language-oriented programming features start to sneak in — there’s a small Typed Racket program, a document written in Scribble, and even a tiny datalog database — but these are clearly secondary to the main point: Racket is a full-spectrum, general-purpose programming language, and if you already know how to program, it is grounded in things familiar to you.

If you are interested in seeing the old homepage, in all its late aughts design glory, it is preserved with full functionality here:

https://web.archive.org/web/20161129144201/http://www.racket-lang.org:80/

The redesign of the Racket website shifted the emphasis from Racket as a general-purpose programming language to Racket as a language workbench. There is no doubt that this shift has its advantages — Racket’s support for language-oriented programming is one of its features that sets it apart most significantly from other ecosystems. Unfortunately, I don’t think we’ve gotten far enough to really push #lang as a killer feature to the working programmer yet, so I don’t think the current design does much to convey why the average person should care (especially since it focuses a lot on building languages while the old homepage focused more on using languages). I expressed some of these concerns, among others, when the redesign was first proposed; if you are interested, you can read the discussion here:

https://github.com/racket/racket-lang-org/pull/28

Now, admittedly, it’s easy to complain, but actions speak louder than words: I have put zero effort into making the website better, while I’m sure MB volunteered several days of his time. The website is open source, and perhaps if I truly cared, I would invest some of my own free time into suggesting (and implementing) concrete changes. I simply have not. I’m sure a pull request would be welcomed, should anyone submit one to clarify some confusion they bumped into. On the other hand, it obviously isn’t the responsibility of those outside of the Racket community to invest time into making Racket’s website better, especially given the effort involved, so it does not surprise me it has been left largely unchanged.

Alexis

Philip McGrath

nieprzeczytany,
30 gru 2018, 00:25:1530.12.2018
do Tomasz Rola, Racket-Users List, Neil Van Dyke
On Sat, Dec 29, 2018 at 1:48 PM Tomasz Rola <rto...@ceti.pl> wrote:
Where does Racket belong? I understand Racket community no longer
considers themselves as part of Scheme landscape, but I am unable to
say where I get this impression from. If I am wrong, then the first
thing for anybody willing to contribute to R* success would be to make
their blog being displayed on Scheme Planet (IMHO). If I am right (R*
not Scheme), then this is a pity.

There's much to discuss here, and much of it would start to get off-topic for this thread, but I can give a few facts for the record.

Racket is a language in the Scheme branch of the Lisp family. Racket includes implementations of the R5RS and R6RS Scheme languages, and programs/libraries written in those languages can interoperate with code in other Racket languages, but the main Racket language isn't Scheme. Racket is both more than and different from the languages specified by any of the Revised Reports in numerous ways, ranging from immutable pairs and guaranteed left-to-right evaluation to the large standard library, cutting-edge macro system, and multi-lingual programming support (which enable those implementations of R5RS and R6RS), to name just a few. The Racket language evolved from PLT Scheme: a blog post gives more of the rationale for the change, but basically it's called something different because it is something different. That said, Schemers are still some of Racketeers' closest relatives: there is ongoing work to implement Racket in Chez Scheme, and you will find some of the creators of Racket listed on the cover page of R6RS.

Right now I am willing to write some scripts, with intention to run
them both on Linux and OpenBSD. A kind of stuff that is normally
written in Perl. … This means I will have to have source at my hand, just install *BSD,

compile Gauche, install my scripts, ready to go, before any network is
up I mean.

Does Racket match such a use case? I can compile it from sources
… but I wonder if it will

compile in a very limited, rugged environment - no network connection,
just what was there in base install (with C compiler, of course). I
might try one day, but it seems Gauche has less dependency on outside
packages than R*.

Racket can certainly do this. You do not need a network connection either to compile Racket itself or to compile code written in Racket (provided, of course, that you have all of the sources you need). On (non-Mac) Unix-like systems, Racket does by default use some shared libraries (e.g. for GUI stuff) that it expects to be installed via the OS package manager, but "Minimal Racket does not require additional native libraries to run", and you can configure things so that these are bundled with Racket instead. Also, if you prefer, Racket can compile your scripts into stand-alone executables, so you could just deploy the binaries if that simplifies things.
 
Like, I write a program
and hope it will keep working for the next few years without much work
(other than bug fixing). Thus, language stability is important to
me. Or backwards compatibility. Or at least knowing I can switch to
alternative implementation, should I ever feel such necessity.

Being concerned about backwards-compatibility is very reasonable! Others can speak more to their actual experience, but the Racket developers take compatibility very seriously, and I've heard of people running quite old code with the latest releases of Racket. Read through the documentation and you will see lots of evidence for this in various APIs: for example, `#lang scheme` still runs PLT Scheme programs from before the name change.
 
The Racket (PLT Scheme) project started in 1995 and has been publishing regular releases for decades, so the possibility of abandonment seems vanishingly small.

As far as I can see it, Racket contributes to fragmentation of Scheme
scene (which is already a "everybody tends for oneself" kind,
AFAICT).

Since, as noted, Racket is a different language than Scheme, this becomes rather like saying that C++ contributes to fragmentation of C implementations.
 
There is no clear message if there is way to run in R* a code
developed with other Schemes or vice versa and a very minimalistic
effort to portability in a form of slib library is not going to work
in R*, am I right?

The Racket Guide points you to how to run pure R5RS and R6RS code in Racket: did you not see this, or was it not sufficiently clear? (Of course, writing practical programs in pure portable RnRS Scheme is hard, but I don't think it's harder in Racket's Scheme implementations than in others.) Racket also comes with implementations of many SRFIs.
 
Another niche for which I would like to consider R* is mobile apps
(i.e. for smartphone). But, is it possible to do such thing, actually?

Jay McCarthy has ported Racket to Android: https://github.com/jeapostrophe/racket-android It should be possible to do likewise for iOS, but I don't know of anyone who's done it yet.
 
For this, Racket has to be more interoperable. Can it replace Java?
Can it work with Java libraries?

Racket doesn't (currently) run on the JVM, so it doesn't use Java libraries. It does have a great C FFI, which Racket itself uses to implement the back-ends for its cross-platform GUI library.
 
Python has an excellent "batteries included" motto.  …

Something which can talk to and make use of existing Python,
Perl, Ruby code? Open up a spreadsheet, read data, feed it to Python
library, write back results. … utilities/system

programming and/or stuff like reading and manipulating data in files,
databases and spreadsheets … And showing some controls for mouse.

Not only can Racket do all of these things, I personally do essentially all of them. "Batteries included" is written right at the top of Racket's website. The main distribution comes with a package for working with many databases, and other packages add support for others, as well CSV spreadsheets. I have been using Racket to run Python programs under its control and talk to them via standard IO in formats like JSON. I even use Racket's `raco setup` tool to manage the Python dependencies, and I'm working on integrating the Python docstrings into Racket's Scribble documentation.

In Racket itself, I maintain a cross-platform (Windows, Mac, and GNU/Linux) GUI app, a server-side web application (including proxies and virtual hosts managed from within Racket), and various utilities for managing a large corpus of XML documents. The Racket language has compelling features (e.g. continuations, contracts, green threads, DSLs) that make it more effective and productive for my purposes than any other language I've encountered.

-Philip



 

Neil Van Dyke

nieprzeczytany,
30 gru 2018, 13:20:3430.12.2018
do Racket-Users List
Tomas, thank you for your helpful comments.  I just wanted to comment on
a couple side points right now.

Tomasz Rola wrote on 12/29/18 1:48 PM:
> I understand Racket community no longer considers themselves as part
> of Scheme landscape, but I am unable to say where I get this
> impression from.

I've been one of the people propagating that, for two reasons:

1. That was the impression I got of the intention of the name change
from PLT Scheme, and I guessed it was a time to be a team player. :)

2. Many of the most savvy developers will immediately want to use
"standard Scheme", not "embrace&extend proprietary variants". But
standard Scheme was a really great baseline foundation -- just not
sufficiently as a complete general-purpose production language. So
people were shooting themselves in the foot by trying to get by with
R5RS and SRFIs.

(I say this as one of those foot-sharpshooters.  When I picked Scheme as
my next language platform for rapid R&D, I started writing missing
essential libraries and tools for it, and I went to a great deal of
trouble to keep them portable, and to test with maybe 10 different
Scheme implementations, with some scripts to package for a few of them. 
Eventually, I decided I was handicapping myself too much, so I switched
to developing in PLT Scheme only, but always knowing how to switch to
Gambit, Kawa, Chicken, Guile, or some other Scheme implementation with
different strengths that I might need.  I announced this, maybe a few
other Scheme and other Lisp people followed me to PLT, and some others
who focused on non-PLT Schemes took up repackaging some of my libraries
for those. The choice of PLT turned out to be a good one.)

(That said, RnRS is done by great people, and I think it would be good
if all the Scheme variants could find a common svelte baseline again,
and to continue to explore a diversity of different approaches and goals
atop that baseline.  Then, for a comprehensive "standard library" today,
I'd favor a more decentralized model. Some of it perhaps much like
SRFIs, but maybe a little closer to IETF RFC and STD, combined with de
jure "standards" of the day based on current popularity of open source
libraries, some of which might eventually might turn into something like
RFC/STD.  For example, given a baseline language, many libraries from
Racket, Scheme48, and elsewhere might simply be used, and that's enough,
and some might go through an RFC or STD process beyond that.  In any
case, standardization efforts people care about tend to be a massive
amount of work, especially when there's community involvement, and I do
not envy those who heroically take on that task.)

>> BTW, maybe jobs using Racket will also encourage a lot more quality contributions of packages, when there's the additional motivation of open source "auditioning" for jobs, in addition to the current community participation, platform promotion, and love of craft.
> Forget it. I think this is standing a problem on its head.

That "BTW" was not suggesting how to create jobs, but speculating a
major reason why Rust-like contributions growth might happen once jobs
exist (and why Racket hasn't yet seen that degree of sustained
contributions).

(I have a holistic development model in mind that should give you
optional open source contributions almost for free (doing things you'd
do anyway for your project's and organization's immediate needs).  But
that kind of organizational altruism/alignment/PR contribution, together
with individual purely altruistic or collaborative contributions, are
not the only kind or motivation of contributions -- another motivation
is marketing of individual developers.   Individual marketing via open
source (and blog posts, etc.) has been a thing since at least the start
of Web popularity, but seems to be more of a standard practice than it
used to be.)

BD1 a

nieprzeczytany,
30 gru 2018, 18:30:3730.12.2018
do Racket Users

Here is the short version.


  Rackets website does not sell Racket, it does not answer the WHY, someone should choose racket to solve problems.  It’s not clear as to the benefits of using racket, it’s not clear what advantage I get for choosing Racket over something like Python for web development, etc.  It seems as if Rackets website is more suited towards someone who already measure the pro and cons of using a lisp like language, an individual who has already consciously made the decision to go with Racket, instead of showcasing the strengths of Racket to the uninitiated.   For example, let’s say you had some problem that you needed to solve and you had no idea about Racket or Python, and the only information you can get is from their respective web pages.  Which language would you choose and why?

From my understanding, many of you use Racket to get real work done.  What is the reason behind your choice?  What benefits does using racket have above using a more popular language?  Why are these reasons not highlighted on Rackets website?  As I said in an above post, I am a just a beginner,  I have little to no idea what it means to refractor your code, design patterns, or any of the other jargon used in the software industry.  Don’t concentrate on the specifics of my critique, try to look at the overall point I am trying to make…..The Racket website does not sell Racket.   Here is another example, many of you work in the software industry.  If you where to ask your coworkers what macros are, what would they say?  Would they even understand the benefits the macros system in Racket brings?  If you ask them about language-oriented programming, what would they say?  Would they truly understand what it is, and the benefits it brings?  Do your coworkers even understand how special Racket is?  Even If the answer is yes to these questions, in addition to what is already there, are some of the things that should also be highlighted on Rackets website. 

 

Longer version

 Let me refine my critique of Racket web presence.  We are talking about making Racket more popular, not the functionalities of the Racket language.   There is a lot less noise around Racket than other more popular languages.  This is an advantage that the Racket community can exploit.   Because of the lack of popularity, IMHO the Racket community needs utilize Racket webpage to SELL the use of racket as a possible solution to various problems.   For example, let’s look at Python.  I choose Python here not to compare Python capabilities to Racket but because it is one of the most popular languages in use today.    Imagine if you knew nothing about programing but had problem you needed to solve and you landed on the Python website.  Out side of the tabs, you see that “Python is a programming language that lets you work quickly and integrate systems more effectively” Notice, it does not say that python is a scripting language or use some sort of computing jargon to describe Python.  It use words that a non-programmer can understand.  It simple, and to the point.    If you would conduct the same exercise with Racket you see “Racket solves problems-make languages”.   To me it reads that Racket solves problems by making languages.  This sounds more complex than it needs to be.  WHY do I want to complicate my problem by making a language?  What I want to do is to solve my problem as efficiently as possible.  Making a language seems like an unneeded extra step.  Now my view of Racket is tainted by that statement.  As I continue to explore the site, I learn that Racket is cross-platform, etc.  I also learn that Racket has various packages for web applications,  math and statistics, etc.  Mind you my view of racket has already been formed, when I click on web applications I am greeted with an tutorial on web applications in Racket.  But there is still no answer as to WHY solving problems by making languages would be beneficial in my use case.   Compare that to Python website, when you click on Django, by the Web Development tab.   You are greeted by “Django makes it easier to build better web apps more quickly and with less code” Which is totally in line with the mission statement above.  We also learn that Django is “ridiculously fast, Reassuringly secure, Exceedingly scalable” again Python is answering the WHY, and its Answer is totally aligned with its mission statement.   When you go to the racket website and explore it, you are greeted with “Racket is a general -purpose programming language as well as the world’s first ecosystem for language -oriented programming.  Make your dream language, or use one of the dozen already available”   What does that mean?  What is language -oriented programming?  How do these things help me solve my problems?   The section powerful macros and languages seems to be able to answer some of these questions.   When you roll over it, it claims that’s Racket crown jewel is it’s macro system.  The problem here, again is that it does not SELL the use of macros.  Are these macros similar to what you may find in another language?  How does this “crown jewel” help me solve problems?  What are the benefits of using macros?   In short racket website is not clear as to why I should take more time in exploring Racket.  It’s not clear as to why I should use Racket to solve problems.  Racket website seems to be geared more to educating those who are familiar with lisp like languages on the use of racket, and not really about selling the use of racket. It does not attempt to educate an outsider on the benefits of using such a language.      Rackets website does not answer the WHY behind using Racket. 

BD1 a

nieprzeczytany,
30 gru 2018, 18:43:5930.12.2018
do Racket Users


On Saturday, December 29, 2018 at 10:32:28 PM UTC-5, Philip McGrath wrote:
On Sat, Dec 29, 2018 at 10:31 AM BD1 a <acate...@gmail.com> wrote:


Are you looking for more or different material, or was it not clear to you from the presentation on the website that these examples were what you are looking for? I guess I can see some potential issues for discoverability: you have to click to show any prose, even a heading (rather than just code), and introducing the examples with "Make your dream language, or use one of the dozens already available, including these —" may not make it obvious what kind of examples these are, especially to non-Racketeers, and especially since it's possible to write GUI and web programs in Racket without using a special #lang.

This is one of the points I am trying, maybe unsucesfully, to make.  If you place yourself in the shoes of someone who knows nothing about Racket, and decided to visit it page for more information, what would you find?   Would Rackets website answer the questions you seek?  Would you choose Racket over a more popular language?  

Tomasz Rola

nieprzeczytany,
30 gru 2018, 19:54:5730.12.2018
do Racket-Users List, Philip McGrath
Thanks for your extensive reply. I realized that I have based my
opinions on Racket 6.7 and we are living in 7.1-era, which makes some
(but not all) of my words a bit irrelevant (I was subscribed here for
all this time, but it just... skipped my attention somehow). I will
address few points below.

On Sun, Dec 30, 2018 at 12:24:59AM -0500, Philip McGrath wrote:
> On Sat, Dec 29, 2018 at 1:48 PM Tomasz Rola <rto...@ceti.pl> wrote:
>

[...]
> closest relatives: there is ongoing work to implement Racket in Chez
> Scheme, and you will find some of the creators of Racket listed on the
> cover page of R6RS.

Ok, I guess this will suffice for me as sign of connection to the rest
of Lisp-land.

[...]
> stuff) that it expects to be installed via the OS package manager,
> but "Minimal Racket does not require additional native libraries to
> run" <https://github.com/racket/racket/blob/master/INSTALL.txt>, and
> you can configure things so that these are bundled with Racket
> instead. Also, if you prefer, Racket can compile your scripts into
> stand-alone executables, so you could just deploy the binaries if
> that simplifies things.

I think I will play with this "minimal Racket" idea. As of standalone
execs, I will rather stay with scripts.

[...]
> The Racket Guide <https://docs.racket-lang.org/guide/dialects.html> points
> you to how to run pure R5RS and R6RS code in Racket: did you not see this,
> or was it not sufficiently clear?

The part of message stating about R5RS and R6RS was quite clear to me
and for long time. What was not clear was if I should expect vanishing
support for those dialects. But from what you have written, it seems
like I do not have to worry too much about it. So now I have lots of
potential worries shot at once, which is good.

> (Of course, writing practical programs in pure portable RnRS Scheme
> is hard,

Acknowledged. I was there and it was 4 on 0-10 point PITA scale.

> > Another niche for which I would like to consider R* is mobile apps
> > (i.e. for smartphone). But, is it possible to do such thing, actually?
> >
>
> Jay McCarthy has ported Racket to Android:
> https://github.com/jeapostrophe/racket-android It should be possible to do
> likewise for iOS, but I don't know of anyone who's done it yet.

Wonderful. Really.

[...]
> > Python has an excellent "batteries included" motto. …
> > Something which can talk to and make use of existing Python,
> > Perl, Ruby code? Open up a spreadsheet, read data, feed it to Python
> > library, write back results. … utilities/system
> > programming and/or stuff like reading and manipulating data in files,
> > databases and spreadsheets … And showing some controls for mouse.
> >
>
> Not only can Racket do all of these things, I personally do essentially all
> of them. "Batteries included" is written right at the top of Racket's
> website <https://racket-lang.org/>. The main distribution comes with a

Since I have visited that site in 6.7 days I can see it underwent a
nice change. Despite the fact that others in this thread would like to
improve it even more.

> package for working with many databases
> <https://docs.racket-lang.org/db/index.html>, and other packages add
> support for others <https://docs.racket-lang.org/mongodb/>, as well
> CSV spreadsheets
> <https://docs.racket-lang.org/csv-reading/index.html>. I have been
> using Racket to run Python programs under its control and talk to
> them via standard IO in formats like JSON. I even use Racket's `raco
> setup` tool to manage the Python dependencies, and I'm working on
> integrating the Python docstrings into Racket's Scribble
> documentation.
> In Racket itself, I maintain a cross-platform (Windows, Mac, and
> GNU/Linux) GUI app, a server-side web application (including proxies
> and virtual hosts managed from within Racket), and various utilities
> for managing a large corpus of XML documents.

Very interesting. The thought of puppeting one interpreter from
another one is kind of hypnotizing me. And this (whole paragraph) is
the kind of stuff that would have kept me interested in Racket during
last two years, should I know about it (of course I am not blaming
you, or anybody else, but this is how things mishappen, mostly my own
lack of initiative plus circumstances).

> The Racket language has compelling features (e.g. continuations,
> contracts, green threads, DSLs) that make it more effective and
> productive for my purposes than any other language I've encountered.

Yep, I realize that. Since we are coming out, I have for years written
small and low-medium utils in various scripting languages. But writing
one or two of them in Elisp (it - or Emacs - can be utilised in such
role) was quite an eye opening experience. There were some limitations
to such "scripting" - no exec funcall (at least not in E24, AFAIK),
and no easy way to process files in pieces (and the hard way was
uninteresting). Still, it convinced me that I should invest some time
into doing more scripts in such way.

I rarely use the word but if Racket can be utilised for this, it is
quite exciting.

BD1 a

nieprzeczytany,
30 gru 2018, 20:05:5330.12.2018
do Racket Users


On Saturday, December 29, 2018 at 11:16:05 PM UTC-5, Alexis King wrote:
> On Dec 29, 2018, at 21:32, Philip McGrath <phi...@philipmcgrath.com> wrote:
>
>> Respectfully, I would also concentrate on Rackets web presence.  If I was to google any of the popular languages, I would find the answer to these questions in spades, with real life applications, and examples.  You can also compare Pythons website to Rackets.   Pythons website seems to be design more for advertising Python.  If I go to the Pythons web page there is a section “use Python for” in it, it has various topics such as web development, GUI development, scientific and numeric, with all the applicable packages needed.   If you knew nothing about Python, but where interested in using it for web development, it easy to see where to go, etc.  
>
> I would be interested to hear more about your experience with Racket's web site, because it tries to include these things, but evidently it did not succeed in communicating them to you. When I go to https://racket-lang.org/ and scroll down about one screen's worth, I see short, runable examples of a few flashy features including web development and GUI applications specifically, with links to tutorials and documentation.

The previous version of the Racket website (before its redesign two years ago) included such things more explicitly, in a format non-Racketters (which is who the homepage is for, after all!) are more likely to comprehend. It included, among other things, a clear purpose statement for the language at the very top of the page, a set of small, to the point code examples that showed off various kinds of general-purpose programming (with explanations), and a set of links to further resources clearly geared towards programmers of different skill levels. To give you a sense for how this website used to be targeted, here’s the aforementioned purpose statement, in its entirety:

> Racket is a full-spectrum programming language. It goes beyond Lisp and Scheme with dialects that support objects, types, laziness, and more. Racket enables programmers to link components written in different dialects, and it empowers programmers to create new, project-specific dialects. Racket's libraries support applications from web servers and databases to GUIs and charts.

>The concepts enumerated in the above statement are linked to the relevant sections in the Guide for those interested in learning more.
 

 I think the above statement is more explicit,  but it still does not answer the why, why should I create  project-specific dialects?  I also like how the old website has sections for grow you program, grow your language and grow your skill.  Here we get more information as to the benefits of using racket, with a description that is more descriptive about racket capabilities.  



The following code snippets showed Racket doing mundane but useful tasks an “ordinary” programmer would likely understand. They included things like simple scripting using the filesystem, a small web server, basic terminal I/O, creating a GUI window, a toy web scraper, and even sending e-mail. Towards the end of this carousel of snippets, some of Racket’s language-oriented programming features start to sneak in — there’s a small Typed Racket program, a document written in Scribble, and even a tiny datalog database — but these are clearly secondary to the main point: Racket is a full-spectrum, general-purpose programming language, and if you already know how to program, it is grounded in things familiar to you.

If you are interested in seeing the old homepage, in all its late aughts design glory, it is preserved with full functionality here:

    https://web.archive.org/web/20161129144201/http://www.racket-lang.org:80/

The redesign of the Racket website shifted the emphasis from Racket as a general-purpose programming language to Racket as a language workbench. There is no doubt that this shift has its advantages — Racket’s support for language-oriented programming is one of its features that sets it apart most significantly from other ecosystems. Unfortunately, I don’t think we’ve gotten far enough to really push #lang as a killer feature to the working programmer yet, so I don’t think the current design does much to convey why the average person should care (especially since it focuses a lot on building languages while the old homepage focused more on using languages). I expressed some of these concerns, among others, when the redesign was first proposed; if you are interested, you can read the discussion here:
 

This is one of the points I am trying to make.  Why is #lang a killer feature?  What benefits does it bring?  What problem does it solve?  These are some of the things that should be on the website.  Here is an example, again I am a beginner so don’t concentrate on the specifics, concentrate on the general point.  For example


What is language-oriented program and what benefits does it bring?


In addition to using the terms, respectfully racket website should highlight the benefits.  Let’s say language-oriented program makes it easier to write more concise, readable, and maintainable code that directly addresses the specific of the target domain.  Instead of highlighting language-oriented programing by itself.  Something along the lines of Racket help programmers write more concise, readable, and maintainable code that directly addresses the specific of the target domain through rackets support of language-oriented programing.   In this example we can see the benefits of using language-oriented programming.  It makes code concise, readable, and maintainable.  It also directly addresses the specific targeted domain.  The description answers the WHY someone should choose Racket over other languages.  Now I know my views on language-oriented program maybe off.  But the point is the benefits of using Racket should be clearly articulated to those who may not be familiar with what make Racket special. 

 

 

 

    https://github.com/racket/racket-lang-org/pull/28


Thank you for providng this link, I will check it out when I get a chance. 



Now, admittedly, it’s easy to complain, but actions speak louder than words: I have put zero effort into making the website better, while I’m sure MB volunteered several days of his time. The website is open source, and perhaps if I truly cared, I would invest some of my own free time into suggesting (and implementing) concrete changes. I simply have not. I’m sure a pull request would be welcomed, should anyone submit one to clarify some confusion they bumped into. On the other hand, it obviously isn’t the responsibility of those outside of the Racket community to invest time into making Racket’s website better, especially given the effort involved, so it does not surprise me it has been left largely unchanged.

Alexis


I hope my critique does not come across as complaining.  People have put a life time of effort into building Racket up to where it is now and it would be disrespectful to all those who have work tirelessly to build this community.  My goal here is try and add solutions to help Racket gain in popularity from the perspective of someone who is a total beginner.

George Neuner

nieprzeczytany,
30 gru 2018, 21:07:2830.12.2018
do racket...@googlegroups.com
On Thu, 27 Dec 2018 21:27:02 -0500, Neil Van Dyke
<ne...@neilvandyke.org> wrote:

>Stephen De Gabrielle wrote on 12/27/18 4:47 PM:
>> I always wanted to ask if the prototype object model is a good
>> idea or bad idea?
>
>I think it's not a bad idea, but I think you probably wouldn't use it
>for general-purpose OOA, OOD, or OOP right now.  For a long time, OO
>overwhelmingly embraced mostly the same class-instance-inheritance
>model.  Recently, we're seeing some newly popular languages back off
>from that very familiar model, including dusting off some ideas like
>traits/interfaces and mixins/composition.

Given that Javascript is prototype based, it could be said that
prototype is the most widely used object model.

Not to mention:

- Lua
- Common Lisp with MOP

and some partial implementations:

- Objective-C's "categories" extends classes only
- Swift's protocol generics extends classes only

Then there are languages that can (more or less easily) fake
prototyping on top of their normal class-based objects by using
reflection and/or runtime compilation:

- Python with prototype.py
- Perl with Class::Prototyped
- Java
- Racket ;-)
- Scheme
- Common Lisp sans MOP
etc.

Java, Perl, and Python [and probably also Objective-C] certainly count
as widely used even if their prototype abilities are not well known.



Prototype objects are well suited to small(ish) projects having a
single developer or even a small, well integrated team. Where they
fall down is in big projects where you want more strict control over
the prototypes' use. The notion of being able to "lock" an object
against modifications, or restrict it to use in certain modules, is
rarely included in prototype based systems.

The biggest (IMO) problem with prototype OO is that the lack of a
static hierarchy makes the code very difficult (or impossible) to
optimize.


>Maybe (just speculating, off the cuff) it turns out there's also a place
>for prototype object models in symbolic machine learning, in acquiring
>some variation on frame-based representations of knowledge.

There are many good use cases for prototype objects, but if you are
not careful, it is all too easy to screw up. Most prototype systems
do little or nothing to protect you from yourself - they are
predicated on trusting the programmer not to make dumb mistakes or do
stupid things.

Languages having fine grained dynamic linking and runtime available
compilers - i.e. the ones that can fake it - have eliminated many of
the advantages of prototype based objects.
[OTOH, there is Java which offers both true reflection and runtime
compilation, but actively discourages using either by making both as
inconvenient to use as possible.]


>> The same question applies to Morphic User Interface Construction
>> Environment - good idea or bad idea?

Can't Squeak ;-) for Morphic - I've never used it.


YMMV,
George

George Neuner

nieprzeczytany,
30 gru 2018, 21:20:2530.12.2018
do racket...@googlegroups.com
On Thu, 27 Dec 2018 17:15:39 -0500, Hendrik Boom
<hen...@topoi.pooq.com> wrote:

>On Thu, Dec 27, 2018 at 02:06:22PM -0800, Andrew Gwozdziewycz wrote:
>> On Thu, Dec 27, 2018 at 8:24 AM Brett Gilio <bre...@posteo.net> wrote:
>>
>> Python was meant to be a better version
>> of that. The History of Python wiki page suggests it was meant as a
>> "better verson of ABC with exceptions and better integration with the
>> Amoeba Operating System."[1] The exceptions originally were inspired
>> by Modula-3, apparently.
>
>Yeah. That was the other language I couldn't think of. One
>of my favorites for a long time, and implementations still
>available online.

It's too bad Python didn't keep some of the other nice things in
Modula 3.


>An elegant language, except for its Pascal syntax.

It could have stood a few tweaks, but Modula 3's syntax was good for
its intended use: modular projects involving teams of differently
skilled programmers. Modula 3 was developed largely as a less
threatening alternative to Ada for system/application programming.
Like Ada, Modula 3 could also be used on bare-metal, but it did not
emphasize that use.


YMMV,
George

Stephen De Gabrielle

nieprzeczytany,
31 gru 2018, 13:09:5831.12.2018
do Neil Van Dyke, Racket-Users List
On the Racket Evangelism front I just found early article that helped raise my interest in Racket (I was already aware of it): 

It was nice because it demonstrated the things you could do with Racket (like http://racket-lang.org):

The demonstration was a multithreaded port scanner, and it included: 
  • looping & recursion
  • 'can-connect?: exceptions and sockets'
  • 'threaded-map: concurrency, finally'
  • 'port->name: libraries, HTTP communication and regular expressions'
  • 'while: the power of macros'
  • how to 'bundle it up as a library' including contracts (Typed Racket didn't exist then)
Most of these are section titles from the article, consisting of the function name and what is demonstrated.

Given it is 15 year old code it was remarkably easy to get going on Racket 7.1. I didn't even need to look at the porting guidance included in the racket documentation.

Anyway it begs a question - what topics would excite someone to choose Racket for their project/startup/etc in 2019?

  1. Machine learning
  2. Face recognition
  3. text recognition
  4. mobile/embedded/IoT
  5. Intelligent agents (conversational)
  6. Intelligent agents (robots both real and virtual)
  7. disintermediation stuff?
  8. I dunno...
Let me know if you are aware of any of the above in Racket?

On a related tack, I've started writing a '7 reasons why your next project should be in built on Racket' let me know if you would be interested in providing feedback.  (My inspiration was a similar post for Python)

Happy new year.

--


Kind regards, 
Stephen

PS I was reminded when I took a look at the old racket home page at https://web.archive.org/web/20161129144201/http://www.racket-lang.org:80/

----

scanner.rkt

Why I Like PLT Scheme by Jacob Matthews https://web.archive.org/web/20050205000754/http://www.kuro5hin.org/story/2004/3/17/93442/8657

#lang racket
;; credit to http://www.kuro5hin.org/story/2004/3/17/93442/8657
;; archived as https://web.archive.org/web/20050205000754/http://www.kuro5hin.org/story/2004/3/17/93442/8657
(module+ test
  (require rackunit))
 
; scan : string[hostname] (listof int) -> listof (list int string)
; gives the number and well-known service name of each port in the given
; list that is open on the given host
(define (scan host ports)
  (map
   (lambda (p) (list p (port->name p)))
   (open-ports host ports)))
 
(define (range low high)
  (cond
    [(> low high) null]
    [else (cons low (range (+ low 1) high))]))
 
(require racket/contract)
 
(provide/contract
 (scan (string? (listof natural-number/c)
                . -> .
                (listof (list/c natural-number/c string?)))))
 
; open-ports : string[hostname] (listof int) -> (listof int)
; returns the sublist of numbers that represent open ports on the
; given host, performing all checks concurrently
(define (open-ports host ports)
  (filter (lambda (x) (not (eq? 'closed x)))
          (threaded-map
           (lambda (port) (if (can-connect? host port) port 'closed))
           ports)))
 
; can-connect? : string[hostname] number -> bool
; determines if the host is listening on the given port
(define (can-connect? host port)
  (with-handlers ([exn:fail:network? (lambda (e) #f)])
    (let-values ([(ip op) (tcp-connect host port)])
      (close-input-port ip) (close-output-port op) #t)))
 
; threaded-map : (X -> Y) * (listof X) -> (listof Y)
; maps the given function over the given list with each computation
; done in parallel
(define (threaded-map f l)
  (let ((cs (map (lambda (x) (make-channel)) l)))
    (for-each (lambda (x c) (thread (lambda () (channel-put c (f x))))) l cs)
    (map channel-get cs)))
 
(require  net/url) ; for get-pure-port and string->url
 
(define NAMES
  (let ([ip (if (file-exists? "/etc/services")
                (open-input-file "/etc/services")
                (get-pure-port (string->url "http://www.iana.org/assignments/port-numbers")))]
        [nametable (make-hash)])
    (while m (regexp-match #px"([^ \n]+)[\\W]+([0-9]+)/tcp[ \t]+([^\r\n])" ip)
           (hash-set! nametable (string->number (bytes->string/utf-8 (list-ref m 2))) (list-ref m 1)))
    nametable))
 
(define (port->name p) (hash-ref! NAMES p (lambda () "unknown")))
 
(define-syntax (while stx)
  (syntax-case stx ()
    [(_ var test body)
     (identifier? #'var)
     #'(let loop ((var test))
         (when var body (loop test)))]))
 
(module+ test
  ;; Any code in this `test` submodule runs when this file is run using DrRacket
  ;; or with `raco test`. The code here does not run when this file is
  ;; required by another module.
  (scan "racket-lang.org" (range 1 100))
 
  )
 
(module+ main
  ;; (Optional) main submodule. Put code here if you need it to be executed when
  ;; this file is run using DrRacket or the `racket` executable.  The code here
  ;; does not run when this file is required by another module. Documentation:
  ;; http://docs.racket-lang.org/guide/Module_Syntax.html#%28part._main-and-test%29
 
  )


On Thu, Dec 13, 2018 at 11:53 PM Neil Van Dyke <ne...@neilvandyke.org> wrote:
This might be a bad idea, and normally I disapprove of this sort of
thing, but... does anyone want to take on the job of RACKET EVANGELISM
STRIKE FORCE, among a concentration of startup-types and other software
practitioners?

Specifically, you'd participate regularly in Y Combinator's popular
"Hacker News" Web forum, "https://news.ycombinator.com/", and, when the
not-unusual occasion to mention/show a strength of Racket presents
itself, do so.

I occasionally see Racket mentioned on HN, but not nearly as often as it
legitimately could be.

(There are also other strategic targets for the RACKET EVANGELISM STRIKE
FORCE operator or cell, and I recall Eli Barzilay and others active on a
lot of them years ago, but HN might be first priority right now.)

Paulo Matos

nieprzeczytany,
24 sty 2019, 15:55:4024.01.2019
do Stephen De Gabrielle, Neil Van Dyke, Racket-Users List


On 31/12/2018 19:09, Stephen De Gabrielle wrote:
>
> On a related tack, I've started writing a '7 reasons why your next
> project should be in built on Racket' let me know if you would be
> interested in providing feedback.  (My inspiration was a similar post
> for Python)
>

How's this going? Let me know if I can provide any feedback.

--
Paulo Matos

Sorawee Porncharoenwase

nieprzeczytany,
12 lut 2019, 15:10:3912.02.2019
do BD1 a, Racket Users
Here's my impression of the homepage.

Screen Shot 2019-02-12 at 11.33.27.png

This is some abstract arts. I don't know what to make out of it.

Who is the audience. If I were a beginner, I wouldn't know what "batteries included", "macros", and "Lisp" mean, and I wouldn't care about "open source". So I presume the target audience is Lisp-er? That's a somewhat narrow audience.

Note that this occupies the entire viewport. I don't know if there's a better way to make use of the space.

Screen Shot 2019-02-12 at 11.42.45.png

It seems we are claiming that Racket can make problem solving easy, but the user doesn't even know what is being solved! The first panel says it's easy to make images. How complicated is the image? Is it just a simple circle? Not everyone knows the Sierpinski triangle, and not everyone will see the identifier "sierpinski" (keep in mind that people who are new to Racket... don't know Racket syntax yet).

IMO the Sierpinski triangle is great for showing off that we can create a complicated image easily. However, to communicate this, we need to show the output image too, not just the code. (True, the audience can download Racket and run the code, but do you expect the user to download 110MB program, install it, and then run the example programs?)

It would be nice if the second panel is mainly proses. Otherwise, the user could (for example) assume that this is yet another Racket program will a nice string literal syntax. And again, the user wants to see the output. A screenshot of a PDF/HTML doc would suffice.

It would be cool if the third panel contains a type error, and we include a screenshot of the error.

Etc.

I guess my main request is to include output of the example programs.

--

Nadeem Abdul Hamid

nieprzeczytany,
12 lut 2019, 16:18:2612.02.2019
do Racket Users, Sorawee Porncharoenwase
Maybe the mouse-over reveals of each of the 6 blocks on the page should be on a timed animation so they reveal the text detail one by one, independent of the mouse hovering over them? That would provide a gallery-like effect that reveals the prose behind the images.

travis.h...@gmail.com

nieprzeczytany,
15 lut 2019, 11:55:0615.02.2019
do Racket Users
I will throw out the Julia homepage (https://www.julialang.org) as a good example of language marketing. Perhaps, though, I find the marketing effective because it is largely targeted at people like me.

David Storrs

nieprzeczytany,
15 lut 2019, 15:04:5315.02.2019
do travis.h...@gmail.com, Racket Users
It looks pretty appealing to me as well.  Clear, concise, and oriented around pain points that a common developer would have.

dexte...@gmail.com

nieprzeczytany,
16 kwi 2019, 15:02:2716.04.2019
do Racket Users
  I use Racket daily in production at Mercury Filmworks (Disney TVA, Amazon, Netflix productions among others), and I wish I could talk more about how Racket helps us where it counts. If there was to be an evangelist, I'd be a candidate, however 1) I don't consider myself a good Racket programmer, and 2) most of what I work on can't be published. That said, I'd love to write a case study on our use in production, especially Racket's role in replacing Python/Bash/Csh scripts with fast, self-contained binaries. I use it for everything from video formats handling (+ffmpeg) to automation to animation software plugins.

Dexter


On Wednesday, December 26, 2018 at 3:51:21 PM UTC+1, Neil Van Dyke wrote:
Stephen De Gabrielle wrote on 12/26/18 7:40 AM:
> How did other languages grow their audience? e.g. Ruby-on-Rails, Perl,
> Python, PHP, C++, Rust ?

All of those had merits, were right place and at right time, and (except
Rust) really spread when there was *a lot* less noise and sheer mass of
stuff.  Also, some of those had very long ramps to their ultimate
popularity (which could give some hope to Racketeers).

Ruby with Rails was a decent language that pushed a good model and
automagical conveniences for Web developer productivity, and they seemed
to have a good community (e.g., when I was shopping around for my new
research platform language, and I don't think I'd even heard of Ruby at
that time, one of the nice Ruby people happened to hear about my quest,
and emailed me, suggesting Ruby).

We talked about Perl growth spikes here recently.

Python started out as some guy on Usenet with a reusable extension
language (Tcl was another, and some RnRS implementations were another)
-- all 3 of them had interesting innovations and merits. (Tcl got
popular because of Tk GUIs, and then it has some moments in the sun for
earlier database-backed Web servers (as opposed to manually-edited HTML)
while a lot more readable than Perl, and was pushed commercially by
Philip Greenspun, before Sun hired Tcl creator Ousterhout, and Tcl
disappeared, in favor of Java and then LiveScript/JS.)

PHP was in the early Web gold rush, when template-ish approaches were
attractive alternative to CGI scripts that started as Perl (or, less
likely, other imperative language) code that spat out HTML strings.  You
could also do HTML templates various other ways, including in Perl, but
the Web was so new, and the tools so not figured out, and everyone was
racing to do neat stuff (or to get VC funding, then Herman Miller office
furniture and launch party, and then IPO), that there was a lot of
random going on, and we aren't in that kind of environment anymore. 
Well, unless you were pitching a "blockchain" startup during the BTC:USD
run-up a year ago -- it didn't much matter what tools you grabbed, so
long as you told the VCs you were doing "blockchain" (you didn't even
have to madlibs pitch "Our startup is like _Uber_, for _cats_!  (Can you
handle the sheer force of our raw innovation, unleashed!)").

C++ had the funding and promotional/endorsement backing of the people
who brought us C and Unix, and (again) there was a lot less stuff, and a
lot fewer programmers.  The people using C were some of the most
technically-skilled programmers: OS-level systems programmers (who also
used assembler), Unix workstation technical application/research
programmers, PC shrinkwrap software developers, and EEs doing software
bits of embedded systems.  (The corporate MIS programmers were a
separate group -- they mostly did database forms and reports and
business logic, and there seemed to be subgroups for different
platforms.  Much of the MIS seemed to be analogous to today's Web
programmers, and I'm not sure how MIS platform adoption decisions were
made in various kinds of organizations then.)

Anyway, besides the Bell Labs / AT&T backing, I recall one thing that
helped push C++ was the people doing GUI and hearing about OO (with
references to Smalltalk), at a time when people were just reasoning
low-level code and ad hoc formalisms, or using pre-OO analysis and
design methods (structured SA and SD, ERDs, etc.), and it was really
easy to sell generalization/polymorphism to those people.  Plus AT&T was
saying C++ would help with mission-critical and performance-critical
large and complex systems, and you had workstation developers like
Mentor Graphics endorsing it.  Also, again, the amount of stuff and the
number of programmers was a lot smaller then; one anecdote: by the time
there was a Usenix C++ conference, it was small enough that, while
Stroustrup was talking during a Q&A in the hotel conference room (maybe
around the scale of current RacketCon), some toddler goes running up the
aisle from the back of the room, saying something like "daddy!", and
everyone laughs.

Early Rust had some really thoughtful and language careful design, and
it tackled one of the hardest challenges of working in C, which is
allocation management (which not enough C programmers take seriously
enough).  Now they have the funding investment and high-profile
endorsement (sound familiar?) of Mozilla and a few other
credibility-lending companies, and might be driven now in part by
pragmatic needs of projects.  (Early Racket pragmatics also seemed
driven by pragmatic needs, like getting DrScheme to work, and
cross-platform.)  Rust has also attracted a ton of volunteer effort,
including a large number of high-quality and innovative reusable
packages.  (Innovative, not unlike you'd see from Lisp-family people,
because their platform gives them an advantage, and because the
programmer is likely to be high-skilled.  Racket was doing some of this
early on, but the numbers of such contributions didn't ramp up as
quickly as they did for Rust.)  I missed part of history of how Rust
evolved, while I was focused on Racket and paying bills, so maybe
someone can fill in the gaps here of how they bootstrapped popularity,
and what Racket can learn from that.

(BTW, it's good to see Racket's secret research lab doing more work on
DSLs and other things.  We can't rest on our laurels, and other
languages are improving their DSL support, though they have syntax
handicaps and are starting way later than us, Bell Labs and older Lisps
excepted.)

Why I suggested focusing outreach on Hacker News (and maybe I've talked
about it more recently on "racket-money" than "racket-users") was... I
want to see more people making a living working with/on Racket (outside
of professorships, and grad student slave stipends), and I think that
means a lot more companies using it for substantial projects, and I
suspect the best bet is startups who can choose their tools (and are
funded as gambles), and I suspect the best bet for that is getting HN
startup success stories like: "we got to launch and ___ funding round,
with Racket, because DSLs, and Racket is the best for that".  Then other
HN people will see a success story, a couple might be inspired to think
about DSLs for their own startup idea, and then somehow this becomes
RACKET EXPONENTIAL EXPLOSION.  Or at least more people making a living
working with/on Racket.

Matthias Felleisen

nieprzeczytany,
16 kwi 2019, 17:30:2816.04.2019
do Dexter Lagan, Racket Users

Can you speak in general terms at RacketCon?

Hima Tammineedi

nieprzeczytany,
15 kwi 2020, 15:15:5415.04.2020
do Racket Users
Why has no one really responded to this comment? I've never used Racket, was just exploring and came across this thread, and saw that the front page is still unchanged.

I think this person's comments are still very valid. Mainly the funky images not telling me much on the homepage.

sleepnova

nieprzeczytany,
16 kwi 2020, 09:19:3716.04.2020
do Hima Tammineedi, Racket Users
I am also a newcomer from industry. :)

Here's my two cents.

While the new web page looks pretty, it still needs to answer following questions. Usually people cares about the most.

1. Can this thing solve my problem? (current and future)
2. Why would I choose (to invest my time on) this language instead of others?
3. By investing time learning this language, what kind of benefits can I get.

The tagline "solve problems · make languages", seems a little bit wired and unintuitive to me, why solving a problem need to make a new language.

Solution:

I think to highlight pain points which people usually encounter in other programming language which can be easily solved with Racket is a good idea.

Don't have to emphasize on the idea of "make language" too early. The language-oriented programming and creating your own language stuff can be a more advanced topic later on.

If you need tagline, maybe you can emphasize the expressiveness of Racket, which I think is the strength of Racket.

Hima Tammineedi <hima...@gmail.com> 於 2020年4月16日 週四 上午3:15寫道:
--
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...@googlegroups.com.


--
- sleepnova
呼叫小黃創辦人 & CEO
Odpowiedz wszystkim
Odpowiedz autorowi
Przekaż
Nowe wiadomości: 0