MaVo has made some great advances in the WebGUI, I have added some functionality as well.   My intent is to merge these 2 branches unless someone has a better idea.  Merging is a big pain, but making mrl better is worth it.  I like to think of it as genetic engineering where we are taking the traits of two different organisms and making a Bigger Stronger Faster MRL !   The following list are some of the details.

Organism Name API2 API2BAUP20072015 (merged) API2.1
 

All service panel implementations in API2 are more developed on this branch - with the exception of moving console.log to $log.info

all panels will get logging - but stay on this branch

  API2 + $log
  gui name changed to panel GAH ! ... I know this would be a hard one ... gui ?
       
       
  • serviceSvc capable of saving panels to webgui - such that z-index, pos x,y show/hide is preserved - serviceSvc on loading should do a request to WebGUI to see if it can load this info 
  • set zindex dynamically depending on last panel touched DONE
  • it appears serial auto-completes on com port only when swing gui is running - missing a sendTo ?
  • Remove panel.service = service; !
    in serviceSvc .. and fix all the broken fall out
     DONE
  • Make methodcache/deserializer - smarter with parameters - if overloaded method is found choose the one with primitive parameters :P
  • put Runtime start name serviceType into menu - so quickly create new services
  • make nav bar button to "cascade" panels
  • start with cascaded panels
  • make a "min" (iconify) - panel view which is all content hidden only name & type image !!
  • make callback arrays CHECK FOR DUPES !!!
  • Fix z-index | last touched has greates z-index DONE
  • fully convert to slf4j
  • make onRegister onRelease worky - dynamically add and remove panels !
  • find hardcoded clock subscriptions
  • auto-extract resources for webgui
    Python !!! - add menu bar & add tabs !!
  • build.xml:519: Test org.myrobotlab.framework.EncoderTest failed - FIX BUILD !
  • Python multi-session multi-file + tab per file
  • subsumptions - repress serial from arduino !!! (find peers)
  • flip name ServiceType in runtime
  • search - don't bring back everything only "show" selected
  • Change popovers in service.html menu (top right) to dropdowns since popovers don't auto-close on selection
  • Fix naming convention (module name should == filename)  There are a couple modules where capitilization is used in the module
     
  • "Drag-Handles" - I do not yet undertand where a panel should  be "dragged" - a common technique is to use a "handle" - a single place where you can grab & drag a panel.  I noticed that the panel can change the drag characteristics and the components of the panel can affect the "drag" - this is currently observable with the Arduino service panel.  These issues might be avoided if the "grabable" area is only the panels icon.  Done - I think this worky with the new draggable directive - combo selects are usable again
     
  • official logging service needed - something which defaults to the Angular logging service but can be re-directed to something else if desired - use $log logging facility, in the future we can change the code so it routes to our logging facility - but right now use $log over console.log
  • get a copy to clipboard button to work done (in Arduino MRLComm.ino)
  • Port directive would be very nice (steal it from Serial!)
  • why is $scope.gui.initDone(); necessary ? Ah initDone() is for the message binding - this is necessary because the method is not defined until the new controller is fully loaded :( .. wonder if a proto-type with onMsg defined would solve.
  • Make Oscope Widget (GroG - working on that now)
  • Make Radar/Pingdar/Sonar Widget
  • Make Video Widget
  • onMsg should be this.onMsg $scope.onMsg or $scope.gui.onMsg ? Parts (including _self !!!) of an controller/directive can disappear !!! 
  • Observation - JS is interpretive - Object member/field creation is "interpreted" with the program counter.  You must remember "unlike" java an object can be "partially" created - and often is.  This primarily affects the concepts of "this" "_self" and all references to members & methods assigned to this or _self.  Your object can dissapear - after you have saved a referenced callback method !   Avoid this & _self members & methods !  Avoid polluting scope! - if its not "actually" bound to some html ng attribute it probably does not have to be on scope !!!  var / private members methods have worked best for me so far....
  • I have a variable number of buttons as Arduino service switches between board types.  Is it better to dynamically build & compile new buttons ? or use a kudgy/cache-like strategy of making max buttons and just show/hide them...
  • re-sizeable service panels - the mega below needs to be that big to click on individual pins

Data "Hello World!" - coming back from an Arduino Micro .. with JSSC library ! Done

As the webgui begins to become functional I made a short list of items to coordinate on - so that if someone is excited by a part and begins to develop it, someone else won't duplicate the effort .. There are PLENTY of parts to work, experiment on - so have fun!

  • MaVo has done a great job of putting the framework in & now recently has gone through the angular dependencies and thrown out all the dead weight !  Yay !
  • Kwatters is in progress of connecting the ProgramAB service to the speech recognition webkit - which will make a multi-lingual killer Siri like (or better) bot to command ! - he needs the "utterance" to be sent back in an mrl message .. currently it comes back always blank.
  • Clock service seems to be leading the way as a Service Panel example
    $scope.interval should be the interval in milliseconds which pulse events eminate from the clock when it has been started.  It can only currently be set when the clock is stopped.  Unfortunately $scope.interval always comes up 1000 and never the new value in the form (like it has no binding) - also a little concerned about not having a dot in ng-model attributes
  • I'm going to be working on the Runtime Panel, the mrl service subscribes to Runtime msgs and processes the onRegistered & onReleased
    https://github.com/MyRobotLab/myrobotlab/blob/API2/src/resource/WebGUI/…;
    I'd like onRegistered to dynamically add a new registry - I tried adding the event to serverSvc.js - https://github.com/MyRobotLab/myrobotlab/blob/API2/src/resource/WebGUI/…  but it seems to just replicate the mrl service data ..  so I'm not sure what method I should call with a service object to create a new panel (or remove one)..  much of the panel generation seems to be handled by directives - so if a new panel is to be created do we compile and apply html to the dom?  where to start ?

 

MaVo

8 years 10 months ago

Hey GroG,

great that you tried to extend ServiceSvc, unfortunately, you've modified the wrong part of it.

The first half is responsible of storing service-"inst"'s (and you just assigned it a mrl-service-object).

The second half is responsible of manging panels ...

I'm really surprised that it still works (probably because the service-panels started faster than you could overwrite their objects). But with the next re-init, they won't work anymore.

Could push some fixes (& refactors) (if you like).

@kwatters:

What if I want to use the webspeech in combination with other services, e.g. dictate it what to write into this textfield?

I'm a little concerned, that the code dublicates into many places after a while.
 

Another TODO:

- remove all not-minified files during the build ( &  possibly minify all other ) .

(There are still unused files, but removing all not-minified files should clear up a good amount of space.)

Wow Grog!  Nice stuff.  That is one large "mega"!  takes up 1/2 the screen.  maybe we could just do a smaller image? or just plain ol' checkboxes for each of the pins..

@MaVo .. yup. i completely agree.  I think the vision is to create a new SpeechRecognizer   (similar to sphinx)  .. we can use that across all of the services.    for now,  I'm just testing things out.  I want to get it working nicely with ProgramAB first, then I'll pull it into a new service so it plays nicely with all the other services.

 

 

ITS HUGE !!   BIGGER THAN LIFE ! ..  cool part with svg is we can dynamically scale it with the Angular controls and the resolution should remain the same ...

I want to make it so you can zoom in and out and all the clicky-pin stuff & pwm sliders and doo-dads worky !