Matt — thanks a ton for all the detailed comments!  Just quickly I figured out 
the git/hub steps to split out the top-level repositories into separate “ki” 
and “gi” repos, so the link and package paths are now:

https://github.com/goki/gi and ki

and hopefully this now works for the demo — just worked for me on my mac..

> go get github.com/goki/gi
> cd ~/go/src/github.com/goki/gi/examples/widgets
> go get ...
> go build
> ./widgets

More reactions later but just wanted to get that done so the paths should be 
stable now!  Cheers,

- Randy

> On May 4, 2018, at 9:09 AM, matthewju...@gmail.com wrote:
> 
> Hi Randy, here’s a code review.
> 
> Thanks for the BSD license.
> 
> I prefer the look of a minimized import path, I would have put the title 
> library at the top level (github.com/goki/ki).
> 
> To me the README doesn’t balance text and code examples well enough, I’d like 
> to see more example uses and less text. In package ki I’d hope the library 
> does enough work to not require so much README.
> 
> I think ki isn’t a bad package name after reading what it means but seeing 
> the package used in app code won’t show the point as obviously as an English 
> word for some people. tree.New() to me says “new data structure var” while 
> ki.New() says “I have to read the docs now”.
> 
> (when I say 'app' I mean a program that uses your library or a program 
> written to compile with a Go compiler; an application of the library, an 
> application of the Go programming language)
> 
> The Ki interface is a code smell to me. Usually I interpret library 
> interfaces as saying “the app provides an implementation of the interface and 
> the library provides shared logic that uses the interface methods” or in this 
> case I expect the ki lib will provide varying data structures and behaviors 
> that implement the ki var. Just reading down to line 42 of ki.go I feel like 
> this isn’t very Go-like.
> 
> You’re getting into generics territory with this:
> 
> func NewOfType(typ reflect.Type) Ki {
> 
> My view is idiomatic Go code tends to avoid this kind of thing due to 
> maintenance and readability burden. I haven’t used your lib but I am 
> concerned about it not being a big win over a per-app implementation. I can 
> see you’ve done a lot of work to make generics work.
> 
> In type Node I would consider embedding Props.
> 
> I haven’t looked at all of the methods but do the methods on Node need to be 
> to a pointer?
> 
> func (n *Node) Fields() []uintptr {
> 
> Seeing uintptr in a public method is a code smell to me.
> 
> In type Deleted consider maybe embedding sync.Mutex.
> 
> // fmt.Printf("finding path: %v\n", k.Path)
> 
> Instead of comments you may want to consider this pattern:
> 
> const debug = false
> …
>     if debug {
>         fmt.Printf("finding path: %v\n", k.Path)
>     }
> 
> I think this library would be a good study for the Go 2 
> (https://blog.golang.org/toward-go2) generics effort, if you have time 
> consider writing an experience report and posting it: 
> https://github.com/golang/go/issues/15292
> 
> Perhaps consider embedding ki.Signal in gi.Action, and MakeMenuFunc, 
> ki.Signal, *Icon, and ButtonStates in ButtonBase, some fields in ColorView, 
> Dialog, FillStyle, FontStyle, LayoutStyle, LayoutData, Layout, MapView, 
> MapViewInline, Node2DBase, Paint, ImagePaintServer, SliceView, 
> SliceViewInline, SliderBase, SplitView, StrokeStyle, StructView, 
> StructViewInline, BorderStyle, ShadowStyle, Style, TabView, TextStyle, 
> TextField, SpinBox, ComboBox, TreeView, ValueViewBase, Viewport2D, Window. I 
> like to avoid any unnecessary field symbols.
> 
> These kinds of structs are a code smell to me:
> 
> type ColorValueView struct {
>     ValueViewBase
> }
> 
> Why a Base type? Can your types be simpler?
> 
> type Node2D and type ValueView seem like other possible overuses of interface 
> to me. The size of type PaintServer is closer to what I’d expect with an 
> interface, and Labeler seems idiomatic.
> 
> I like the screenshot.
> 
> // check for interface implementation
> var _ Node2D = &Line{}
> 
> I don’t like this pattern.
> 
> Given the amount of code and project maturity I wouldn’t expect you to make a 
> lot of changes, but I do think it could have been built with a stronger 
> resilience to change. Thanks for sharing here.
> 
> Matt
> 
> On Friday, May 4, 2018 at 5:39:35 AM UTC-5, Randall O'Reilly wrote:
> https://github.com/goki/goki — key demo in: 
> https://github.com/goki/goki/tree/master/gi/examples/widgets 
> 
> This is the first release of a new Go framework built around the Tree as a 
> core data structure (Ki = Tree in Japanese), which includes as its first 
> application a fully-native Go GUI (built on top of a modified version of the 
> Shiny OS-specific backend drivers, supporting Mac, Linux, and Windows so 
> far). 
> 
> Building on the central idea in Go that having a few powerful data-structures 
> is essential for making many problems easier to solve, the GoKi trees are an 
> attempt to provide a powerful tree structure that can support things like 
> scene graphs, DOM’s, parsing trees, etc. 
> 
> The GoGi graphical interface system is a kind of “proof is in the pudding” 
> test, which weighs in at under 20k LOC and provides a reasonably 
> full-featured GUI — with a bit more work it should be able to do most of the 
> stuff you can do in Qt, and already includes a (self) reflection-driven GUI 
> designer. 
> 
> The overall design is an attempt to integrate existing standards and 
> conventions from widely-used frameworks, including Qt (overall widget 
> design), HTML / CSS (styling), and SVG (rendering). Rendering in SVG is 
> directly supported by the GoGi 2D scenegraph, with enhanced functionality for 
> interactive GUI's. This 2D framework also integrates with a (planned) 3D 
> scenegraph, to support interesting combinations of these frameworks. 
> Currently GoGi is focused on desktop systems, but nothing prevents adaptation 
> to mobile. 
> 
> Right now the rendering is based off of a modified version of 
> https://github.com/fogleman/gg, but I’m very interested in integrating the 
> new rasterx system that Steven Wiley recently announced. 
> 
> I’d be very interested in people’s impressions, suggestions, etc, and welcome 
> all interested contributors (there’s certainly much more to do) — it would be 
> great if this could provide the start for a widely-supported Go-native GUI 
> framework!  This was my first Go project after many years in C++ / Qt land, 
> and I’m excited to join the community, and have really been impressed with 
> the language and ecosystem etc.  The contrast in complexity and build time 
> between Qt and GoGi is really striking, and has kept me going despite the 
> huge amount of effort it took to get this new project off the ground..  
> Cheers, 
> 
> - Randy 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to