Skip to content
the 7 gui project
Branch: master
Clone or download
Latest commit 411d957 Jun 17, 2019

README.md

A Racket Implementation of 7 GUIs

The top-level of this repository implements the "7 GUIs" task with the bare minimum that it took me to get things running and make them reflect what I was doing. (To my surprise, I never had to resort to unit testing.)

  • task 1: a mouse-click counter
  • task 2: a bi-directional temperature converter
  • task 3: a constrained flight booking choice
  • task 4: a timer
  • task 5: a CRUD MVC
  • task 6: a circle drawer, with undo/redo facility (under-specified)
  • task 7: a simple spreadsheet
    • task 7-exp: implement the simplistic Expression language for spreadsheets

To install,

$ raco pkg install https://github.com/mfelleisen/7GUI.git 

To run in a shell,

$ ./task-N.rkt 

Macros

The Macros/ directory shows how to develop macros that help clarify what's happening in the primitive implementations. using macros also reduces the length of the implementation, though by a constant amount. For the small problems, this reduction looks like a lot; for the larger one it is not worth mentioning.

Still, reformulating the implementations with better "notation" uncovered a couple of small bugs. See README.

Types

The Types/ directory demonstrates what it takes to add types to the simple implementations. The overhead is small for five of the seven tasks, non-trivial for the other two.

The addition of types points to small inconsistencies and revealed one misconception about a callback.

It also brought home that we need a guide for program conversions.

TO DO

  • a proper MVC organization

    • separate pieces
    • propagate REPL changes to model
  • a unit-based organization of the MVC code with demos of how to replace the model or the view

  • a unit-based organization .. with types

Questions To Be Explored

  • is there a framework hidden?
  • is there a embedded DSL hidden?
  • would Syndicate help?

BUGS

  • the redo for re-size in circle drawer could be a bug but the specification is underwhelming so I am not sure
You can’t perform that action at this time.