Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jul 24 12:11

    uiteoi on v0.3.20

    (compare)

  • Jul 24 12:09

    uiteoi on master

    upgrade zombie to version 6.1.4… (compare)

  • Jul 24 11:53

    uiteoi on master

    replace package remarkable by m… (compare)

  • Jul 24 09:30

    uiteoi on master

    update diff to version 3.5.0, t… (compare)

  • Jan 23 15:25

    uiteoi on master

    replace schema "geometry" prope… (compare)

  • Jan 22 11:25

    uiteoi on master

    Spatial functions: - Rename fun… (compare)

  • Jan 21 23:34

    uiteoi on master

    Add all not-deprecated Minimum… (compare)

  • Jan 21 22:50

    uiteoi on master

    spatial function POINT_SRID(): … implement spatial functions MBR… (compare)

  • Jan 21 17:58

    uiteoi on master

    tracis.yml: upgrade node to ver… (compare)

  • Jan 21 17:52

    uiteoi on master

    add services mysql (compare)

  • Jan 21 17:46

    uiteoi on master

    travis: use Ubuntu Xenial relea… (compare)

  • Jan 21 17:31

    uiteoi on master

    SQL spatial functions and other… (compare)

  • Jan 20 22:43

    uiteoi on master

    fix mysql_read()#fetch()#transl… (compare)

  • Jan 20 18:57

    uiteoi on master

    select geometry: fix + force as… (compare)

  • Jan 19 22:49

    uiteoi on master

    implement MySQL geometry types … (compare)

  • Jan 15 23:27

    uiteoi on master

    code.js, safe_string(): use dou… function escape(), add second o… (compare)

  • Jan 15 11:02

    uiteoi on master

    escape(): add test for automati… Code, safe_string(): use new CI… (compare)

  • Jan 15 10:52

    uiteoi on master

    New util function escape(): - F… (compare)

  • Jan 14 14:28

    uiteoi on master

    fix typo in documentation_markd… (compare)

  • Jan 13 23:00

    uiteoi on master

    new pipelet ssh_exec() (compare)

Jean Vincent
@uiteoi
Pushed toubkal:
  • beat(): emit first beat immediately, refactoring
  • update nodemailer to v1.11.0 from v1.10.0, url-pattern to v1.0.1 from v1.0.0
Jean Vincent
@uiteoi
Pushed toubkal:
  • Transaction: add __emit_update() method, update tests
Jean Vincent
@uiteoi
Pushed toubkal, 4 commits:
  • update roadmap progress for version 0.3.5
  • Implement Set.._update() and Set.._update_value():
    • Recombines emit_remove() and emit_add() into __emit_update() when possible
  • optimize(): emit updates instead of remove + add
  • examples/index.html: implements $to_dom() without deprecated render() function, use $query_selector()
Jean Vincent
@uiteoi
Pushed toubkal:
  • $to_dom(): remove deprecated render() parameter
Jean Vincent
@uiteoi
Pushed toubkal:
  • Pipelet.set_default_options(): refactor, fully document, update and add 2 tests
Jean Vincent
@uiteoi
Pushed 2 commits on toubkal:
  • $to_dom(): fix default tag when parent node is reactive, add debug info
  • $to_dom(), fix removal of top nodes from reactive selector
Jean Vincent
@uiteoi
Pushed toubkal:
  • uglify(): fix updates after implementation of Set.._update()
Jean Vincent
@uiteoi
Pushed toubkal:
  • uglify(): improve parsing errors logging
Jean Vincent
@uiteoi
Pushed toubkal:
  • $to_dom(): make it stateless, DRY code
  • server/http.js: improve error logging
Jean Vincent
@uiteoi
Pushed toubkal:
  • Set.._update_value(): fix updates recombination from remove + add
Jean Vincent
@uiteoi
Pushed toubkal:
  • $to_dom().._remove_value(): add note on never emitted removed $nodes
  • $to_dom(): implement _update_value(), use $node.setAttribute() to set attributes
Jean Vincent
@uiteoi
Pushed toubkal:
  • $to_dom(): improve attributes management:
    • implement parse_style() to parse style attribute into an object unless it is already an object
    • implement object_diff() to find the minimum number of properties changes between two objects
    • _update_value():
      • remove + add if tag attribute changed
      • remove innerHTML by setting it to ""
      • use parse_style() to parse removed and added style attribute
      • use object_diff() on attributes and style properties
      • workaround Chrome bug that does not update style properties
    • _add_value():
      • use parse_style() to parse style and set $node.style object
Jean Vincent
@uiteoi
Pushed toubkal:
  • revert(): implement fetch():
    • always emit empty state as fetch() cannot currently emit a negated state.
    • add ToDo to implement negated state fetching when fetch allows to do so.
    • update docuementation
Jean Vincent
@uiteoi
Pushed toubkal:
  • Input..fetch_source_all() and Output..fetch_all(): no-longer provide unused no_more flag to receivers, refactoring.
  • revert(): implement hack until fetch() can emit a negated state
Jean Vincent
@uiteoi
Pushed toubkal:
  • examples/examples.js: publish assets dataflow to allow live client reload
  • examples/index.html: more testing, live reload on asset change
  • examples/examples.json: test attributes for $to_dom()
Jean Vincent
@uiteoi
Pushed toubkal:
  • socket_io_server(): fix socket_io_state_changes(), manually tested
Jean Vincent
@uiteoi
Pushed toubkal:
  • examples.js: assets, filter-out data files, use optimize to emit updates
  • examples/index.html: update beat, add reload delay
  • examples/index.html: show connection state
Jean Vincent
@uiteoi
Pushed toubkal:
  • socket_io_state_changes(): emit values with a 'connnected' Boolean.
Jean Vincent
@uiteoi
Pushed toubkal:
  • Pipelet: implement optional scope argument for set_output() and output()
  • set_output(): implement second, optional scope argument
  • output(): implement second, optional scope argument
  • update documentation
  • Add definition and ToDo for Input..fetch_operations()
  • examples/examples.js: use locally scoped set_output() and output()
Jean Vincent
@uiteoi
Pushed toubkal:
  • update socket.io and socket.io-client to v1.4.0 from v1.3.7
Jean Vincent
@uiteoi
Pushed toubkal:
  • Input: fix trace referencing pipelet instead of self
  • $to_dom(): use Greedy.Input for Pipelet selector
Jean Vincent
@uiteoi
Pushed toubkal:
  • Pipelet: implement _add_input() method:
    • _inputs: Array of additional inputs for pipelet
    • _add_input(): add an additional input to pipelet _inputs
    • $to_dom(): use Pipelet.._add_input() to add selector input
Jean Vincent
@uiteoi
$to_dom() can now be optionally ordered from upstream order()
I am no-longer displaying individual commits here as there is a hook showing commits on the right pane of gitter
I will now use gitter only for higher level project updates
$to_dom() is now complete on the client side, needs automatic testing, and server-side rendering.
Jean Vincent
@uiteoi
Now working on scoping for Singletons, Multitons, and outputs. This is necessary at least for virtual servers were several applications share the same process.
Khalifa Nassik
@knassik
pushed toubkal: lib/client/form.js:
  • form() Compose : add optimize() before form_submit()
  • form_display_errors(): implement ToDo using dom_node ( from parameter ) instead of the form node
  • refactor form_submit() to emit updates WIP
Jean Vincent
@uiteoi
form() ToDo:
  • remove flow parameter, extract flow from fields dataflow
  • make dom_node a dataflow with a $node attribute
  • test complete replacement of the form by updating all form fields
  • use _add_input() to handle form fileds and dom node inputs
  • allow dynamic forms, which fields existence is conditioned by other fields values
Khalifa Nassik
@knassik
pushed toubkal
Jean Vincent
@uiteoi
Completed work on namespaces, all tests now pass, applications need to be aware of namespaces in the following situations:
  • when creating pipelets using the new operator, it must be followed by set_namespace( rs ) as in:
     new Pipelet( ... ).set_namespace( rs )
  • in compositions, if rs is used, its namespace used must be that of the source pipelet, to achieve this do the following:
    function composition( source,  options ) {
      var rs = source.namespace();
      // you can now use rs as the local namespace to the composition
    }
Khalifa Nassik
@knassik
pushed toubkal: lib/client/form.js, form_submit(): set submit button state if defined
Jean Vincent
@uiteoi
Namespaces are now fully usable, I will probably make a few more small refactoring before releasing version 0.3.4 this week.
Khalifa Nassik
@knassik
pushed toubkal: form.js, form_process_fields(): fix variable name; set textarea input type value
Jean Vincent
@uiteoi

Finished refactoring allowing to automatically synchronization of all inputs of a pipelet, as long as one uses method Pipelet.._add_input() to add additional inputs. This relies on sharing input transactions between all inputs, and other modifications to make this work properly on controllets .

Implemented in filter() and $to_dom()

Jean Vincent
@uiteoi
Hot server-code reloading now provides optimized data updates in a transaction, reducing the amount of data transmitted to clients, and eliminating visual glitch on update.
Jean Vincent
@uiteoi
alter(): transform() signature changed, becomes:
transform( value, operation, options ) -> undefined
Khalifa Nassik
@knassik
pushed toubkal lib/client/form.js:
  • form_process_fields(): set fields default value to empty string
  • form_submit() : allow form to submit value if option action is defined
Jean Vincent
@uiteoi
I am currently working on fetch() refactoring synchronized with query updates, allowing updates and removes as well as options.
Jean Vincent
@uiteoi
Published toubkal_mysql v0.1.7:
  • throw exception if a column is undefined, null, or column object does not provide an id.
Jean Vincent
@uiteoi
We haven't been publishing here for a few months, since we stopped publishing commits. That said we have been working a lot on toubkal, approaching 3000 commits. We are finalizing transactional pipelets, and documentation which should now be part of the upcoming 0.4 release.
Transactional pipelets were a big deal, as it is somewhat unnatural for a reactive system to be transactional. By transactional we mean everything which has to do with state changes in the database or elsewhere. These state changes depend on the state of the system at the time of the transaction, and it is important to not-react on state changes for these point-in-time state of the system. This is accomplished thank to a new pipelet fetch() which is used to fetch the state of the system non-reactively on transactional events.
Jean Vincent
@uiteoi
I am now working on re-synchronizing caches on reconnections with our socket.io pipelets. I now have all the pipelets to do this efficiently, in particular transactional pipelets that we developed over the last year. This will allow us to finally discard the clear operation which I was never happy with and we never used.
Re-synchronization will be done on reconnections following a "long" disconnection, by fetching the server asynchronously, then fetching the cache content synchronously, calculating differences and emitting updates for the changes to the cache synchronously. The last part being synchronous garanties that is done atomically.
Jean Vincent
@uiteoi
During synchronisation, caches will be able to accept updates resulting in a consistent state.
Jean Vincent
@uiteoi
I just finalized cache synchronization on hard reconnections, implemented in pipelets cache() and database_cache(), using socket_io_synchronization() pipelet for hard reconnection events requiring synchronization. Works with tag "synchronizing" to synchronize multiple caches concurrently.
Amine ZYAD
@AmiZya
Good luck on the presentation today :)
Jean Vincent
@uiteoi
Thanks amine
Jean Vincent
@uiteoi
Committed asynchronous alter() and map() pipelets last night using the mighty powerful cancelable map and limiter that I had developed a few months ago. As the name implies, it allows to cancel ongoing asynchronous operations. The cancelable limiter allows to limit the number of concurrent asynchronous operations which is essential for resource-consuming tasks.
As a matter of comparison, JavaScript promises, and the Async library, provide for asynchronous programming but are not cancelable and do not provide a limiter. Toubkal cancelable map and limiter is only a small fraction the size of the Async library.