Coder Social home page Coder Social logo

liverobotprogramming's People

Contributors

jfabry avatar mcamp avatar tdiazt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

liverobotprogramming's Issues

Block execution can throw uncatchable errors ***System error handling failed ***

What steps will reproduce the problem?

code:
(var leftmotor := [motor1])  
(var rightmotor := [motor2]) 
(var bumper := [sensor1]) 
(var light := [sensor2] ) 

;need to map ST code sending messages to more PhaROS type style of code

; calibration ''constants'' 
(var maxlook := [100])
(var lightthresh := [128])
(var backdist := [10])
(var turndist := [100])

; a state machine with name follower
; see below how to kick it into action
(machine follower 
    (state moving
        ; what to do when entering the state. always completely executed
        ; [] is a Smalltalk Block
        (onentry [leftmotor forward . rightmotor forward])
        ; what to do when leaving the state. always completely executed
        (onexit [leftmotor stop . rightmotor stop])
    )

    ;a transition triggered by outofline event
    ; from moving state to looking state
    ; we call it tlooking
    (on outofline moving -> looking tlooking)
    (on intheline looking -> moving tmoving)

    ;events happen whenever their condition evaluates to true
    (event outofline [light read > lightthresh + 10]) 
    (event intheline [light read < lightthresh - 10])

    (state looking
        (machine lookalgo 
            (var time := [maxlook])

            ;timeout transitions
            (ontime time lookleft -> returnleft t-returnleft)
            (ontime time lookright -> returnright t-returnright)
            (ontime time returnleft -> lookright t-lookright)
            (ontime time returnright -> lookleft t-lookleft)

            (state lookleft (onentry [rightmotor forward]))
            (state returnleft
                (onentry [rightmotor back])
                (onexit  [rightmotor stop]))

            (state lookright (onentry [leftmotor forward]))
            (state returnright
                (onentry [leftmotor back])
                (onexit [leftmotor stop . time := time * 2 ]))
        )

        ;spawn the lookalgo machine, start in the lookleft state
        (onentry (spawn lookalgo lookleft))
        (onexit [leftmotor stop . rightmotor stop])
    )

    ;wildcard transition, only allowed in from
    (on bumping *-> bumpturn t-bumpturn)
    (on ending *-> end t-end)

    (var hasbumped := [false])

    (event bumping [hasbumped not & bumper isPressed])
    (event ending [hasbumped & bumper isPressed])

    ;epsilon transition: happens without an event,
    ;after source state onentry is done and there is no nested machine
    (eps bumpturn -> looking t-looking)

    (state bumpturn
        (onentry [rightmotor backward: backdist .
                    leftmotor backward: backdist .
                    bumped := true .
                    "how to wait for the two motors to finish??"
                    rightmotor backward: turndist .
                    leftmotor forward: turndist]))

    (state end (onentry [rightmotor stop . leftmotor stop . sound beep]))
)

;GO! 
(spawn follower looking)


What is the expected output? What do you see instead?

System error handling fails when handling MNU NewValueHolder>>forward


Original issue reported on code.google.com by [email protected] on 12 May 2014 at 6:17

MessageNotUnderstood: receiver of "detect:ifNone:" is nil

What steps will reproduce the problem?
(var leftmotor := [motor1])  
(var rightmotor := [motor2]) 
(var bumper := [sensor1]) 
(var light := [sensor2] ) 

;need to map ST code sending messages to more PhaROS type style of code

; calibration ''constants'' 
(var maxlook := [100])
(var lightthresh := [128])
(var backdist := [10])
(var turndist := [100])

; a state machine with name follower
; see below how to kick it into action
(machine follower 
    (state moving
        ; what to do when entering the state. always completely executed
        ; [] is a Smalltalk Block
        (onentry [leftmotor forward . rightmotor forward])
        ; what to do when leaving the state. always completely executed
        (onexit [leftmotor stop . rightmotor stop])
    )

    ;a transition triggered by outofline event
    ; from moving state to looking state
    ; we call it tlooking
    (on outofline moving -> looking tlooking)
    (on intheline looking -> moving tmoving)

    ;events happen whenever their condition evaluates to true
    (event outofline [light read > lightthresh + 10]) 
    (event intheline [light read < lightthresh - 10])

    (state looking
        (machine lookalgo 
            (var time := [maxlook value])

            ;timeout transitions
            (ontime time lookleft -> returnleft t-returnleft)
            (ontime time lookright -> returnright t-returnright)
            (ontime time returnleft -> lookright t-lookright)
            (ontime time returnright -> lookleft t-lookleft)

            (state lookleft (onentry [rightmotor forward]))
            (state returnleft
                (onentry [rightmotor back])
                (onexit  [rightmotor stop]))

            (state lookright (onentry [leftmotor forward]))
            (state returnright
                (onentry [leftmotor back])
                (onexit [leftmotor stop . time := time * 2 ]))
        )

        ;spawn the lookalgo machine, start in the lookleft state
        (onentry (spawn lookalgo lookleft))
        (onexit [leftmotor stop . rightmotor stop])
    )

    ;wildcard transition, only allowed in from
    (on bumping *-> bumpturn t-bumpturn)
    (on ending *-> end t-end)

    (var hasbumped := [false])

    (event bumping [hasbumped not & bumper isPressed])
    (event ending [hasbumped & bumper isPressed])

    ;epsilon transition: happens without an event,
    ;after source state onentry is done and there is no nested machine
    (eps bumpturn -> looking t-looking)

    (state bumpturn
        (onentry [rightmotor backward: backdist .
                    leftmotor backward: backdist .
                    bumped := true .
                    "how to wait for the two motors to finish??"
                    rightmotor backward: turndist .
                    leftmotor forward: turndist]))

    (state end (onentry [rightmotor stop . leftmotor stop . sound beep]))
)

;GO! 
(spawn follower looking)


-Notice is the fix'd version of the code at issue #13, explained at issue #16, 
comment #2.

What is the expected output? What do you see instead?

It shouldn't fail as an UI error.
The error: MessageNotUnderstood: receiver of "detect:ifNone:" is nil

Original issue reported on code.google.com by [email protected] on 19 May 2014 at 3:58

Spawn of nested machines does not re-init the spawned machine

What steps will reproduce the problem?

Code:
(var count := [0])
(machine m
    (state start
        (onentry (spawn plus reset))
        (machine plus
            (var dummy := [0])
            (state reset (onentry [count value: 0]))
            (eps reset -> p t-rp)
            (state p (onentry [
                count value: count value + 1.
                dummy value: dummy value + 1]))
            (ontime 500 p -> l t-l)
            (state l)
            (eps l -> p t-p)
        ))
    (state re)
    (eps re -> start t-s)
    (on toomuch start -> re t-s)
    (event toomuch [count value > 10])
)
(spawn m start)

What is the expected output? What do you see instead?

Both count and dummy should never be higher than 11 because they are explicitly 
and implicitly reset when the nested machine is spawned. But that does not 
happen.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 3 Jul 2014 at 8:16

Editor scrolls the view such that insertion point is at the bottom of the window

What steps will reproduce the problem?

Edit a large piece of code, put the cursor in the middle of the textfield and 
type.

What is the expected output? What do you see instead?

Editor scrolls such that the cursor is on the last line. Editor should not 
scroll at all

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 12 Jun 2014 at 8:16

Highlighted state does not have a context menu

What steps will reproduce the problem?

Code:
(machine m
    (state foo (onexit [Transcript show: '-']))
    (state bar (onentry [Transcript show: '+']))
)
(spawn m foo)

Right click on the highlighted state.

What is the expected output? What do you see instead?

There should be a context menu, but there isn't.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 2 Feb 2015 at 10:54

Optimise binding of variables of blocks

Right now all variables in scope are passed to the block. This should be only 
the variables actually used in the block.

Can Opal do some kind of semantic analysis to help us out?

Original issue reported on code.google.com by [email protected] on 10 May 2014 at 5:09

reset interpreter button is not workin

What steps will reproduce the problem?
pressing reset int. 

What is the expected output? What do you see instead?
There is an error, it should reset the program


Original issue reported on code.google.com by [email protected] on 1 Oct 2014 at 7:45

Variables defined after referenced in blocks are not captured by the blocks

What steps will reproduce the problem?

Code:

(machine stopwatch
    (var seconds := [0])
    (state tick)
    (state tock (onexit [seconds := seconds + 1]))
    (ontime 500 tick -> tock t-tito)
    (ontime 500 tock -> tick t-toti)
)
(spawn stopwatch tick)

Define tock before you define the var seconds, then add the var def. The block 
still fails.

What is the expected output? What do you see instead?

It should work but it does not because when the block was compiled the 
dictionary of values in scope was different. With use of slots instvars this 
should be fixeable as the class of the block will be automagically recompiled.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 5 Nov 2014 at 9:58

Changing the value of a variable in the setter box breaks causal connection

What steps will reproduce the problem?

Code:
(var count := [0])
(machine counter
    (state  wait)
    (state  for)
    (state it
        (onentry [count value: count value + 1]))
    (eps wait -> for wf)
    (eps for -> it plus)
    (eps it ->wait iw)
    ) 
(spawn  counter wait)  

Set the count var to 0 at some point

What is the expected output? What do you see instead?

Count should start incrementing. It stays at 0


Original issue reported on code.google.com by [email protected] on 9 May 2014 at 2:15

Redefined variables of unspawned machines lose redefiniton on edit

What steps will reproduce the problem?

Code:
(var foo := [1])
(machine m)

Change the value of foo in the variables list (e.g. set it to 2), then put a 
space behind the m (or another consistent edit op). The var is reset to 1

What is the expected output? What do you see instead?

The var should keep the changed value.

This is not crucial, because it's a strange use. I am reporting it here so we 
don't forget about it.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 10 Sep 2014 at 9:05

Have sensible error messages shown up in the UI

Right now errors are mostly ignored. The UI should however show a list of 
current errors of the given machine, so if something goes wrong the list of 
current errors gives clues.

This bugreport serves as a collection of the kinds of errors that should be 
shown.

Original issue reported on code.google.com by [email protected] on 9 May 2014 at 4:25

SubscriptOutOfBounds 1 in LRPMachine>>event:

What steps will reproduce the problem?

Code:
(machine t
 (state init)
 (state foo)
 (on resetting *-> init reset)
)
(spawn t init)


What is the expected output? What do you see instead?

There should be no error, instead there is an SubscriptOutOfBounds 1 in 
LRPMachine>>event: 

Original issue reported on code.google.com by [email protected] on 9 May 2014 at 2:12

LRPWildcardTransition error on matched transition

What steps will reproduce the problem?

Code:
(var minute := [0])
(machine timer
    (state zero)
    (state ten)
    (state twenty)
    (state thirty)
    (state fourty)
    (state fifty
        (onexit [minute value: minute value + 1]))
    (ontime 10 zero -> ten toten)
    (ontime 10 ten -> twenty totwenty)
    (ontime 10 twenty -> thirty tothirty)
    (ontime 10 thirty -> fourty tofourty)
    (ontime 10 fourty -> fifty tofifty)
    (ontime 10 fifty -> zero tozero)

    (state init
        (onentry [minute value: 0.
            doreset value: 0]))
    (on resetting *-> init reset)
    (eps init -> zero go)
    (var doreset := [0])
    (event resetting [doreset value: 1])
)
(spawn timer zero)

have the intepreter running

What is the expected output? What do you see instead?

Error message pops up

Original issue reported on code.google.com by [email protected] on 9 May 2014 at 2:25

Bug in highlighting of nodes, due to Roassal bug

What steps will reproduce the problem?

Code:
(machine blah
    (state foo
        (machine inner
            (state bleh)
        )
        (onentry (spawn inner bleh))
    )
    (state bar)

    (ontime 5000 foo -> bar t1)
    (ontime 500 bar -> foo t2)
)
(spawn blah foo)

visualize the 'inner' machine.

What is the expected output? What do you see instead?

The bleh state is never painted black. There is a bug in Roassal, put a self 
halt in LRPProgramVisualization>>highlightNode: and step through it to see it 
being colored.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 25 Aug 2014 at 8:33

Clean up syntax highlight hierarchy

- The LRPStyler hierarchy should be collapsed.
- The parser holds a reference to the styler class which makes the parser 
package dependent on the ui package. This should be removed 


Original issue reported on code.google.com by [email protected] on 21 Jan 2015 at 9:33

changes of transitions do not reflect in UI

What steps will reproduce the problem?
In the UI, when we change the from/to state of a transition, without changing 
the name, the changes of the transition does not be seen in the UI.

What is the expected output? What do you see instead?
The transition should change the from/to state when it changes in the code

Please use labels and text to provide additional information.
I have not make the code to receive the transitions that changed. I'm going to 
provide that code before this issue can be resolved

Original issue reported on code.google.com by [email protected] on 21 Jul 2014 at 11:41

Force the machine in a certain state


Some more controlability of the developer over the state of the FSM: set the 
FSM to a given state to test a particular situation, e.g. by clicking on a 
given state. + do we do this with clean state leaving or not.


Original issue reported on code.google.com by [email protected] on 18 Aug 2014 at 7:27

Autoclose Errors window

Remove the close button from the errors window and autoclose it when the 
interpreter window is closed.

Actually there should be a registration mechanism so that clients (e.g. bridge 
implementations) can be notified whenever the interpreter is closed.

Original issue reported on code.google.com by [email protected] on 23 Jan 2015 at 9:16

The +X buttons insert the template at the cursor point

What steps will reproduce the problem?

Press a +X button. It always appends to the text

What is the expected output? What do you see instead?

It should insert at the place of the cursor.

Alex sais that the cursor offset can be gotten by asking the morphic widget for 
the selection. If it is an interval of 1 then it is the cursor.

Original issue reported on code.google.com by [email protected] on 9 May 2014 at 2:27

RubCurrentLineBarDecorator(Object)>>doesNotUnderstand: #replaceFrom:to:with:

What steps will reproduce the problem?

Code: 

(machine m
    (state p)
    (eps p -> q pq)
)

then select the complete line of the transition and hit delete

What is the expected output? What do you see instead?

RubCurrentLineBarDecorator(Object)>>doesNotUnderstand: #replaceFrom:to:with:

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 4 Sep 2014 at 3:09

Does not delete transition name when transition is deleted

What steps will reproduce the problem?
(state bar)
(state foo)
(eps bar -> foo t-1)
delete that transition and "t-1" will be still in the UI

What is the expected output? What do you see instead?
When a transition is deleted, the name of the transition is still in the 
visualization.
The name should be deleted too


Original issue reported on code.google.com by [email protected] on 1 Oct 2014 at 7:32

LRPInterpreter>>interpretBlock: aBlock withScope: aScope returns a non-boolean when a GrowlMorph is shown

What steps will reproduce the problem?

Code from issue #9 (with fix LiveRobotics-UI-johanfabry.24 from issue #13 in)

What is the expected output? What do you see instead?

Error: Instances of GrowlMorph are not indexable. The error is in the ifError: 
block at the end of LRPInterpreter>>interpretBlock: aBlock withScope: aScope. I 
think it should be [GrowlMorph openWithLabel: 'LRP Error' contents: 'Fail at 
evaluate block' color: Color yellow. ^false].

Please check and fix, and have a look at the other ifError: cases to see if 
something similar is needed.

Original issue reported on code.google.com by [email protected] on 19 May 2014 at 12:00

Timeout transition with wrong variable name -> debugger

What steps will reproduce the problem?

Code:

(var v := [123])
(machine m
    (state s)(state t)
    (ontime x s -> t st)
    )

What is the expected output? What do you see instead?

A debugger pops up. There should be a normal error message instead.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 19 Jun 2014 at 5:59

Transition / teleport does not update the hightlighted state.

What steps will reproduce the problem?

(machine m
    (state foo (onexit [Transcript show: '-']))
    (state bar (onentry [Transcript show: '+']))
)
(spawn m foo)

Transition or teleport to bar via the menu item.

What is the expected output? What do you see instead?

The hightlight should change to bar but it does not.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 2 Feb 2015 at 10:55

Interpreting a block should not always compile it first

In LRPInterpreter>>interpretBlock:withScope: the block is always compiled 
before it is executed (in the last line). This is highly inefficent. 

Instead memoization should be used so that the first time this block is 
interpreted, is it compiled and the result of that (LRPParser new 
createSTBlockFrom: aBlock withVariables: dict) is kept. 

Note that it would also be cleaner if the createSTBlockFrom: withVariables: 
implementation is in aBlock, so that you don't need to instantiate the parser 
for nothing. 



Original issue reported on code.google.com by [email protected] on 7 Jan 2015 at 5:26

Start/stop the layout animation

It would be nice to have a button in the UI that starts/stops the layout 
animation. + have an automatic stopping of the animation after a timeout (e.g. 
5 seconds) after each add/remove change in the vis.

See:
RTSpringLayoutStepping>>addStartStopButton
view canvas addMenu: 'Start/Stop' callback: [
        (view canvas hasAnimation: self)
            ifTrue: [ view canvas removeAnimation: self ]
            ifFalse: [ view canvas addAnimation: self ]
         ]

Original issue reported on code.google.com by [email protected] on 2 Oct 2014 at 2:58

MNU: UndefinedObject(Object)>>doesNotUnderstand: #compareStates

What steps will reproduce the problem?

Code:

(var count := [1])
(machine m
    (state o)
    (state t (onentry [count value: count value +1]))
    (eps o -> t ot)
    (eps t -> o to)
    )
(spawn m o)

Delete the code, then add

(machine p)

What is the expected output? What do you see instead?

MNU + an error saying machine m is not found. Note that if the interpreter is 
paused before deleting and adding, the error appears when the interpreter is 
unpaused.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 21 Aug 2014 at 4:39

active state of inner machine appears with the states of other machine.

What steps will reproduce the problem?
(machine blah
    (state foo
        (machine inner
            (state bleh)
        )
        (onentry (spawn inner bleh))
    )
    (state bar)

    (ontime 5000 foo -> bar t1)
    (ontime 500 bar -> foo t2)
)
(spawn blah foo)

If you go to the "inner" machine in the UI and wait until the bleh state to be 
active, then you change the machine to the outer one ("blah") you can see how 
the "bleh" state appears together with the state of the "blah" machine

What is the expected output? What do you see instead?
The inner state should not appear

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 25 Aug 2014 at 11:16

Timeout transision variable is not an int -> debugger window

What steps will reproduce the problem?

(var v := ['asdf'])
(machine m
    (state s)(state t)
    (ontime v s -> t st)
    (eps t -> s ts)
    )
(spawn m s)

What is the expected output? What do you see instead?

A debugger window pops up. A normal error should be shown.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 19 Jun 2014 at 6:01

Removing a non-visualized transition causes DNU in LRPProgramVisualization>>updateTransitionsOf:

What steps will reproduce the problem?

Code:
(machine m
    (state p)
    (eps p -> q pq)
)

Remove the transition.

What is the expected output? What do you see instead?

DNU in LRPProgramVisualization>>updateTransitionsOf: The code should check if a 
transition is nil before trying to remove it (ifNotNilDo: ?). Also think about 
other possible cases in that method.

I'm waiting on issue #33 to be resolved to fix this.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 4 Sep 2014 at 3:21

The interpreter does not stop when the window is closed

What steps will reproduce the problem?

Code:
(machine m
 (state s) (eps s -> t st))
(spawn machine s)

Close the interpreter

What is the expected output? What do you see instead?

No more error messages should be produced, it seems this is not the case. Ergo 
the interpreter is still running.

Please use labels and text to provide additional information.


Original issue reported on code.google.com by [email protected] on 30 Jun 2014 at 6:45

check statically for errors

Check statically for errors when is possible.
Look the issue #9 and check for static errors and check everyone that need to 
be checked: 
- Transition miss event and/or states
- Spawn miss machine and/or state


Original issue reported on code.google.com by [email protected] on 18 May 2014 at 11:15

Problem with lexical scope of machines

For this program:
(var count := [1])
(machine blah
  (state init
    (onentry [count := count + 1])
  )
  (state nested
    (machine foo
      (state nInit
        (onentry [count := count + 1])
      )
    )
    (spawn foo nInit)
  )
  (eps init -> nested t1)
)

The variables on the variable viewer should be:
count = 2 for blah
count = 3 for nested
But for both, count is 3

Original issue reported on code.google.com by [email protected] on 23 Jan 2015 at 2:24

Interpreter does not return variable list in scope order

What steps will reproduce the problem?

Code:
(var leftmotor := [motor1])  
(var rightmotor := [motor2]) 
(var bumper := [sensor1]) 
(var light := [sensor2] ) 

;need to map ST code sending messages to more PhaROS type style of code

; calibration ''constants'' 
(var maxlook := [100])
(var lightthresh := [128])
(var backdist := [10])
(var turndist := [100])

; a state machine with name follower
; see below how to kick it into action
(machine follower 
    (state moving
        ; what to do when entering the state. always completely executed
        ; [] is a Smalltalk Block
        (onentry [leftmotor forward . rightmotor forward])
        ; what to do when leaving the state. always completely executed
        (onexit [leftmotor stop . rightmotor stop])
    )

    ;a transition triggered by outofline event
    ; from moving state to looking state
    ; we call it tlooking
    (on outofline moving -> looking tlooking)
    (on intheline looking -> moving tmoving)

    ;events happen whenever their condition evaluates to true
    (event outofline [light read > lightthresh + 10]) 
    (event intheline [light read < lightthresh - 10])

    (state looking
        (machine lookalgo 
            (var time := [maxlook value])

            ;timeout transitions
            (ontime time lookleft -> returnleft t-returnleft)
            (ontime time lookright -> returnright t-returnright)
            (ontime time returnleft -> lookright t-lookright)
            (ontime time returnright -> lookleft t-lookleft)

            (state lookleft (onentry [rightmotor forward]))
            (state returnleft
                (onentry [rightmotor back])
                (onexit  [rightmotor stop]))

            (state lookright (onentry [leftmotor forward]))
            (state returnright
                (onentry [leftmotor back])
                (onexit [leftmotor stop . time := time * 2 ]))
        )

        ;spawn the lookalgo machine, start in the lookleft state
        (onentry (spawn lookalgo lookleft))
        (onexit [leftmotor stop . rightmotor stop])
    ))


What is the expected output? What do you see instead?

Variable list is in random order. It should be in the order of variables in 
scope. The interpreter should give them in the right order (or reversed, as the 
UI already reverses that)


Original issue reported on code.google.com by [email protected] on 12 May 2014 at 5:02

Setting variable by hitting Enter key

When you click on a variable, its value is shown in the input box to be able to 
change it. 
It would be nice to set it when you hit Enter on that input box as an 
alternative way to click on "Set" button.

Btw, I am not asking for replacing the Set button.


Original issue reported on code.google.com by [email protected] on 10 Sep 2014 at 9:05

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.