Application Templates!

171 views
Skip to first unread message

Stephen De Gabrielle

unread,
Aug 18, 2020, 7:03:02 PM8/18/20
to Racket Users
I got jealous that dot net has dotnet new with lots of templates so I made a GitHub template for a cli command https://github.com/spdegabrielle/cli-command 

If you have an idea for a template you should make one!

If you have a cool package that can be demonstrated as an application maybe consider a template as a way to introduce new Racketeers to your package?

Best

Stephen

--
----

Stephen De Gabrielle

unread,
Aug 19, 2020, 5:49:37 PM8/19/20
to Racket Users
I’ve started a small collection!

These are GitHub templates so you use them by clicking ‘use this template‘ on the repo

I’m looking for more ideas/contributions;
From the top of my head;
- ‘worker service’ (dotnet new has this)
- DrRacket plugin
- Keybinding package
- Teachpack
- raco command
- scribble (multiple)
- pollen (multiple)
- slideshow
- racket embedded in c app

Can you suggest(or submit) any others?

<<Some are obvious and simple if you are already a racketeer but one of the reasons is to give new users another way ins>>

Are language specific templates a good idea?
- typed racket
- datalog
- parenlog
- rosette


  Thoughts suggestions criticisms appreciated!

Stephen
--
----

Alex Harsanyi

unread,
Aug 20, 2020, 12:33:01 AM8/20/20
to Racket Users
I am not sure that a template in the style of "dotnet new" is directly applicable for Racket --  the .Net framework is, well a framework. which is a library that expects the users to structure their own programs in certain ways.  The templates fill the need of setting up the boilerplate code for different kind of applications as required by the .Net framework.  Racket applications don't need large amounts of "setup code", most of the code is very specific to the application itself, so not sure what a template would contain apart from very basic things.

I think Racket would benefit by a suite of applications which are small but not trivial and with a source code which is commented in more detail than a regular application.  I attempted to do this with my blog posts, some of which describe more-or-less complete applications (most of them games). The entire source code is in a single file which can be run directly and is available as a GitHub Gist linked from the blog posts.

Here are some examples:

* password generator, command line (142 lines): https://gist.github.com/alex-hhh/27286f4609ea0c989675e5c946ca39de

These are of course not templates, but they could serve as the starting points for users who already have some experience with programming and want to try out some more complex programs.

Alex.

Laurent

unread,
Aug 20, 2020, 6:18:01 AM8/20/20
to Alex Harsanyi, Racket Users
Stephen's work may still be quite useful, as it provides a set of really minimal (almost?) working examples that explain the specifics of various tools.

I say keep it up, 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.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/856e1c7a-5afc-42d8-89f0-6b6fb81158d5n%40googlegroups.com.

Hendrik Boom

unread,
Aug 20, 2020, 9:11:45 AM8/20/20
to Racket Users
On Wed, Aug 19, 2020 at 09:33:01PM -0700, Alex Harsanyi wrote:
...
...
> I think Racket would benefit by a suite of applications which are small but
> not trivial and with a source code which is commented in more detail than a
> regular application.

Every regular application would also benefit from being commented in
this much detail.

-- hendrik

Deren Dohoda

unread,
Aug 20, 2020, 10:11:03 AM8/20/20
to Racket Users
> I think Racket would benefit by a suite of applications which are small but 
> not trivial and with a source code which is commented in more detail than a 
> regular application 
I would kill to understand the intended use of the framework library. I don't understand what I'm supposed to do with it at all. Does anyone have an application written with framework that I can look at? Or could we make a small template with some framework features like autosave which are quite unique to framework over racket/gui? I feel very stupid asking but my desire to try it has exceeded my embarrassment in this regard.

Deren

Laurent

unread,
Aug 20, 2020, 10:46:14 AM8/20/20
to Deren Dohoda, Racket Users
My understanding is that Framework is born out of DrRacket, expecting that some of its tools may be useful in other contexts (like, say, keymaps).


--
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.

Stephen De Gabrielle

unread,
Aug 20, 2020, 11:35:49 AM8/20/20
to Laurent, Deren Dohoda, Racket Users
Hi Deren,
  
The framework provides a number of mixins, classes and functions designed to help you build a complete application program on top of the racket/gui library.


Check out the overview and the table of contents - it has lots of stuff useful for building a non-trivial gui application. (Imagine not having to implement autosave or preferences from scratch!)

Another hidden gem for GUI applications is MrLib: https://docs.racket-lang.org/mrlib/index.html

Stephen


Stephen De Gabrielle

unread,
Aug 20, 2020, 1:12:10 PM8/20/20
to Laurent, Alex Harsanyi, Racket Users
Alex is right, most developers don't need this. 

The point of templates is a jumping off point for new developers, or developers trying a domain they are not familiar with. 

Where possible I will be linking back to any supporting materials (https://alex-hhh.github.io/2020/03/a-game-of-tetris.html thank you Alex)

As part of the working example distributing or deploying; sometimes we make software for ourselves, (packages, plugins, scripts, keybindings and new raco commands),
but sometimes we make software for others; in those cases the templates need to include instructions for that process
- create the distributable executable 
- deploy a web app (blog post by Alexis - but might make use of the 'Deploy to Heroku' button)
- Microsoft Store (help please? both x86 and ARM) 
- App Store for mac (https://defn.io/2020/01/04/remember-internals/ thank you Bogdan) and maybe iOS ( https://defn.io/2020/01/05/racket-on-ios/ )
- packaged as a PPA for linux.
- github actions
- services or components in larger frameworks/applications/or os's (?)

A recent contribution is a new command extension to raco: https://github.com/nixin72/from-template
raco from-template <template-name> <destination-dir>
Philip described it 'like create-react-app, but for all sorts of Racket templates'
 (It is currently only linux so it would be nice if a windows user could help)

A big thank you goes to Philip because it serves two purposes
1. It’s a raco tool for installing templates - exactly what is needed 
2. It is a template for adding a command to raco!

PS: I would suggest that Racket is *a lot* like dotnet core in that it is a 'developer platform' (not a framework) 
Mirroring https://twitter.com/shanselman/status/1288698620804362240?s=20 :
Racket = .Net (The Ecosystem)
bc/cs = JVM, CLR
racket/base, racket/gui, typed/racket, datalog & others = Languages
https://pkgs.racket-lang.org = npm, maven, etc raco = dotnet cli - your entry point, SDK, driver, javac, go, etc raco from-templatecreate-react-app, dotnet new - templates
raco exe = dotnet run - dev time compile and run raco distribute = dotnet publish - ready up for deploy
 
Kind regards, 

Stephen


Sorawee Porncharoenwase

unread,
Aug 20, 2020, 1:22:46 PM8/20/20
to Stephen De Gabrielle, Laurent, Alex Harsanyi, Racket Users

James Geddes

unread,
Aug 20, 2020, 1:41:48 PM8/20/20
to Stephen De Gabrielle, Laurent, Alex Harsanyi, Racket Users
Just to note that I would find this sort of thing very useful.

I have struggled to package my command-line app in a way that makes it easily accessible to my colleagues (a mixture of Python developers on Macs using homebrew and non-developers on corporate Windows systems using who knows what).

I’ve also struggled to understand the convention organising directories within a package. (I think perhaps this is because the system is actually very flexible.)

For me, commented examples of these would be a very helpful complement to the (excellent) guide and reference.

James
> To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAGHj7-LxsGY9NYibW93Yca%3Dsm7_m8APJbbRovz7Oi4iY7e%2BPTg%40mail.gmail.com.

James Geddes

unread,
Aug 20, 2020, 1:43:38 PM8/20/20
to Sorawee Porncharoenwase, Stephen De Gabrielle, Laurent, Alex Harsanyi, Racket Users


> On 20 Aug 2020, at 18:22, Sorawee Porncharoenwase <sorawe...@gmail.com> wrote:
>
> Is this intended to be something like https://docs.racket-lang.org/scaffold/?

That also looks extremely useful!

James

Robby Findler

unread,
Aug 20, 2020, 1:59:57 PM8/20/20
to Laurent, Deren Dohoda, Racket Users
On Thu, Aug 20, 2020 at 9:11 AM Deren Dohoda <deren....@gmail.com> wrote:
I would kill to understand the intended use of the framework library. I don't understand what I'm supposed to do with it at all. Does anyone have an application written with framework that I can look at? Or could we make a small template with some framework features like autosave which are quite unique to framework over racket/gui? I feel very stupid asking but my desire to try it has exceeded my embarrassment in this regard.

The framework is intended to be a collection of mixins that provide useful functionality in a variety of ways that someone building an app might want. That said, I agree the documentation could really use some help with introductory material and some examples and ... I don't know what. So if people have energy to work on how to do that, I would be delighted.

Here's an example of the kind of thing I'm talking about. This is just using racket/gui classes:

#lang racket/gui
(define f (new frame% [label ""] [width 200] [height 200]))
(define t (new text%))
(send t insert "#lang racket\n(define (f x)\n  (expt x x))\n")
(define ec (new editor-canvas% [parent f] [editor t]))
(send f show #t)

but we can add a stuff from the framework, say, like this (to get search/replace to work):

#lang racket/gui
(require framework)
(define f (new frame:searchable% [width 600] [height 800]))
(define t (send f get-editor))
(send t insert "#lang racket\n(define (f x)\n  (expt x x))\n")
(send f show #t)

If we change the editor class that gets created we can get syntax highlighting based on the #lang-line

#lang racket/gui
(require framework)
(define f%
  (class frame:searchable%
    (define/override (get-editor%)
      (text:searching-mixin
       racket:text%))
    (super-new)))
(define f (new f% [width 600] [height 800]))
(define t (send f get-editor))
(send t insert "#lang racket\n(define (f x)\n  (expt x x))\n")
(send f show #t)

I've tried to make the framework library's mixins and classes at least theoretically, be plausibly useful things outside of DrRacket but yes, the framework and DrRacket have certainly grown together with each other. Matthew Flatt started them in 1993? 4? and I've been slowly acreeting stuff into them since (with help from many others, of course!)

Robby

Stephen De Gabrielle

unread,
Aug 20, 2020, 2:54:08 PM8/20/20
to James Geddes, Sorawee Porncharoenwase, Laurent, Alex Harsanyi, Racket Users
Agreed!

The raco from-template command does a git clone of the named template and then removes the .git folder so the user has a fresh start.

raco from-template <template-name> <destination-dir>

(need a windows version!)

Stephen


Alex Harsanyi

unread,
Aug 20, 2020, 7:29:04 PM8/20/20
to Racket Users
Whenever you write a comment, you usually have an intended reader in mind (this happens even if you are not conscious about it).  For a comment in an application code base, the intended readers are the application developers, so you tend to assume that they already know (1) the language constructs and conventions, (2) the problem domain and (3) the application architecture.  Such a comment would be useless to someone who is trying to learn the programming language or learn the application architecture.

Than, there is the question of effort required to write these comments.  It took me significantly longer to write the programs that I linked to, because I wanted to structure them in ways that are easier to understand by a broader set of users,  Still, I did not explain what `define` or function application is, so I left out the absolute beginners.    For small programs and blog posts, this is workable, for larger programs I don't think it is -- this is why introductory material at various expertise levels is still needed.

Alex.


-- hendrik

Andre Garzia

unread,
Aug 25, 2020, 3:39:06 PM8/25/20
to Racket Users

A recent contribution is a new command extension to raco: https://github.com/nixin72/from-template
raco from-template <template-name> <destination-dir>
Philip described it 'like create-react-app, but for all sorts of Racket templates'
 (It is currently only linux so it would be nice if a windows user could help)

I just sent a PR adding windows support to that command extension:


Best
A

--
Want to support me? Buy me a coffee at https://ko-fi.com/andregarzia
Reply all
Reply to author
Forward
0 new messages