Hi Timothy,

I took an extremely similar approach in this project 
<https://github.com/jfacorro/clojure-lab> using Swing as the underlying UI 
toolkit. Components can be described using a hiccup like syntax, although 
they are actually represented as maps in the end. Since the UI is mutable 
by nature the root component (an immutable map) is held in an atom. 

Before building this abstraction I considered implementing something like 
the React approach, but at the time it seemed like a lot of work and I was 
not convinced it could actually work since I hadn't heard of React back 
then. I think pursuing the same approach with a desktop UI toolkit would be 
an interesting project.

Juan

On Tuesday, January 13, 2015 at 5:09:46 PM UTC-3, tbc++ wrote:
>
> Before coming to Clojure I did 2 years of work on WPF/Silverlight apps, 
> and let me say what those platforms offer blows the web stuff out of the 
> water. Yes it's not cross-platform, but the ability to describe a layout 
> with data is unparalleled in the web world. I could sit down, and have a UI 
> to a CRUD app in half a day. No CSS, no DOM elements to force into a layout 
> I wanted, etc. Ask anyone who's worked with WPF and they'll tell you "yep 
> it's based on mutability, but writing a UI is really easy". 
>
> JavaFX comes close to this, but I'd like to use pure data to interact with 
> it. I did some work on that in the past, and came up with something that 
> was pretty usable, but I think a React approach could take it even further. 
> Anyways, the results of my work allowed you to create JavaFX interfaces 
> like this:
>
>
> {:type   :border-pane                     :center {:type     :group           
>                    :children [{:type    :circle                               
>            :radius  (planet-sizes size)                                       
>    :centerY (/ (planet-sizes size) 2)                                         
>  :centerX 0}]}                     :bottom {:type       :stack-pane           
>                    :maxHeight  110                              :prefHeight 
> 110                              :children   [{:type :pie-chart               
>                              :data (map                                       
>              (fn [{percent :planet.biome/percentage                           
>                                type    :planet.biome/type}]                   
>                                    (slide/build-item {:type  :pie-chart-data  
>                                                                        :name  
> (str type)                                                                    
>      :value percent}))                                                    
> (:planet/biomes planet))}]}}
>
> Notice how you don't have to muck with all the junk found in the browser, you 
> just describe an panel, say what you want to put where (center, bottom, etc). 
> and the layout engine takes care of the rest. And this entire thing is GPU 
> accelerated so drawing of the GUI is pretty fast. The web side of things has 
> a place, but it's also mired in decades of legacy, that's stuff you don't 
> find in modern UI toolkits like JavaFX, QT and WPF. 
>
>
> Timothy
>
>
> On Tue, Jan 13, 2015 at 12:46 PM, Gary Trakhman <gary.t...@gmail.com 
> <javascript:>> wrote:
>
>> On Tue Jan 13 2015 at 2:05:03 PM Christopher Small <metas...@gmail.com 
>> <javascript:>> wrote:
>>>
>>> On the other hand, while the web app route may feel a bit overwhelming, 
>>> it really is worth learning. Once you program web, you can deliver to any 
>>> platform. It's ubiquitous. And once you get the hang of it, the paradigm 
>>> isn't really all that challenging. But up to you obviously.
>>>
>>>  
>> This rationale is the basis for my last 1.5 years of extra-work effort.  
>> Good luck :-).
>>
>> Coming from clojure, React really made investing in the web seem sane and 
>> worthwhile by offering composable abstraction.  I still think it's a good 
>> idea to learn web tech, but it was kind of a frustrating slog.
>>
>> Another really helpful piece of 'tech' that fits with clojure 
>> philosophies is http://suitcss.github.io/ 
>> https://github.com/suitcss/suit/blob/master/doc/design-principles.md
>>
>> I think that plus React are great starting points.
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C 
> programs.”
> (Robert Firth) 
>  

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to