Glimmer: DSL Framework for Ruby GUI and More
github.com169 points by thunderbong 3 days ago
169 points by thunderbong 3 days ago
In case anyone is like me and wanted to see some more usage examples, the author of Glimmer seems to have a few games he's put together using the gem:
https://github.com/AndyObtiva/glimmer_klondike_solitaire
https://github.com/AndyObtiva/glimmer_wordle
https://github.com/AndyObtiva/glimmer_tetris
https://github.com/AndyObtiva/glimmer_snake
That's one hell of a introduction
Glimmer started out as a GUI Library and grew into a full-fledged DSL
Framework with support for multiple GUI DSLs. Glimmer's namesake is
referring to the Glimmer of Ruby in Graphical User Interfaces (contrary to
popular myth perpetrated by Charles Nutter, Glimmer has nothing to do with
the ill-fated Whitney Houston movie, which does not in fact share the same
name)
Congrats Andy for consistently shipping! He has been working on this and perfecting it for years.
This is great! Just yesterday I was looking at wxruby3 but I didn’t see a way to package/distribute apps. This does solve that problem.
Note there is already UI component framework called Glimmer that is used by Ember.js: https://glimmerjs.com/. It's pretty much upstreamed into Ember itself these days, but the devs also have a big Rails background so I found the coincidence funny.
As a long time rubyist, I know that Andy's Glimmer preceded Yehuda's.
The first commit to the Ruby Glimmer project (2008-11-25 is the earliest I found) long predates the first commit to even Ember itself (2011-04-30).
what's even more weird is there was a similar naming situation with another wycats-associated project: Handlebarsjs: https://news.ycombinator.com/item?id=1677499
How debuggable is this (besides sifting through wall of debug log text)? Can you step through your declarative GUI building process inside DSL or its like this: "DSL text goes into magic magic...POOF! here is the result. hopefully nothing went wrong or glhf"
The popular debugger for Ruby is a combination of two libraries: byebug and pry. Using these should allow you to step into/over code in a familiar way, if you've used most breakpoint-based debuggers.
If you end up giving it a try, please report back!
These two gems have been superseded by the `debug` gem.
Could you say more about that? I have been using pry, and it appears to still be updated. Is there a reason to stop using pry, or are you expressing a preference for the official debug gem?
Thanks!
Seems like the latter to me. One or the other gem is fine depending on your preferred interface.
I've built a DSL engine on top of CUE + Go's text/template [1]. This largely becomes feeding data into a set of templates, and even this can be hard to debug because template engines often lack the extras needed to support it.
I'd be curious to see if a more code based DSL engine has better debug support. I would imagine you would be stepping through both the DSL code and the engine, if it is more dynamic (i.e. there is not a two step process for DSL authoring)
What I like about a text/template engine is that anyone can use it (create new DSLs) without knowing the language the engine is implemented in. CUE appeals to me as the language for writing/using the DSL because (1) I don't have to learn a new syntax per DSL and (2) it becomes data (json/yaml) I can use anywhere for other purposes beyond generating code.
my experience with interpreter pattern is that you will be spending 90% of debugger time stepping through abstract "eval" functions that are irrelevant to what you want debug.
I solved this by writing code to walk the stack and extract the information I needed (this was Python, but am sure it would translate to Ruby).
From that little demo looks like a lot of fun to develop.
Looks really fun, I have to try it
Nice work!