af Dénes Harmath 5 år siden
979
Mere som dette
Development as an Uplifting Experience
Develop with Joy!
Direct Manipulation for Comprehensible, Predictable and Controllable User Interfaces
A Survey of Program Visualizations for the Functional Paradigm
Efficient Development of Consistent Projectional Editors using Grammar Cells
Modeless Structure Editing
A Structure Editor for the Program Composing Assistant
Advances in Structure Editors - Do They Really Pay Off?
structural editor
structure editor
inline result & documentation
code bubbles
augmented editor
immutable versioning
semantic editor
reactivity
data access
live programming
Hazelcast
Scalatra
Play
Communication with services
Autowire
Framework
Spiral
Monix
OutWatch
full text search: Flashlight
Versioning, undo/redo, authentication
Collaborative
Parametrized types
Reactivity
Custom types
closures
More built-in
switch
string
boolean
color
graphic
Custom functions
Numerical functions
expressions
number literal
types
number
Editors
Games
Simulations
Animations
Visualizations
T stream
T state
"T state"
optional T
"maybe T"
T set
T list
"Ts"
Programming-specific
Commands
Edit
surround with
with argument
literal
with given name
choice case: change to other case
list element: delete
create
function signature
test case from function
expected output
input
segment
with parameter reference
with function call
with literal
with parameter
with text
move in list
list elements
Navigate
highlight
automatically in workspace
references
identical
substitute with
show/hide
function's definition
signature
close
open
in same/other view
type
referencing parameters
referencing functions
referencing types
expression
parameter reference
function call
caller functions
expected type
workspace
function
with name
outgoing changeset
list of explicit changes
updates to consider
implicit changes implied by explicit change
open elements
change: record
implicit changes: list of reference to version
explicit change: reference to version
changeset: record
changes: list of change
type view: record
expression property: union
substituted definition
definition
substituted result
result
actual type
definition view: record
visible property: optional expression property
subexpression: expression
function view: record
related: list of view
result visible: boolean
actual type visible: boolean
expected type visible: boolean
definition views: list of definition view
signature visible: boolean
view: union
type view
function view
workspace: record
changeset: reference to changeset
views: list of view
Generic
Types
Specific modeling
label & children can be computed
Generic modeling
View: one of
Reference view
reference: reference to reference
Choice view
List view
filter: text
list: reference to list
Record view
visible computed properties: list of reference to
View group
views: list of
View
title: text
Mind map (tree with labeled edges)
Session (entity)
selection: list of
reference to
mode: Mode
Mode: one of
Adding child
Editing content
Navigating
focused node: reference to
Node
Node (entity)
collapsed: truth
children: list of
Child (entity)
slashed: truth
node: Node
label: text
note: text
content: widget
Commands by mode
adding child
editing content
Esc
discard changes, switch to command mode
accept changes, switch to command mode
navigating
mouse drag
reorder/move
click
focus
alphanumeric
start editing content (overwrite)
F6
split out subtree
F3
reference
change referenced object
choice
change type
F2
start editing first property
Ctrl+
show
Space
expand/collapse
Backspace/Delete
computed property
hide
optional property
unset
clear
delete
Cmd+Up/Down
move up/down
Shift+Enter
add sibling above
Enter
list element
add sibling below
Tab
record
show/add/set property
list
add child
End
go to last sibling
Home
go to first sibling
Down
go to next node on same level
Up
go to previous node on same level
Left
go to parent
Right
go to first child
lambda parameters in function signature
combine latest: when _reds_ is _red_ and _greens_ is _green_ emit _"Red: {red}, green: {green}"_
reduce:
filter: select _person_ in _people_ where _person.age < 18_
map: for each _element_ in _list_ yield _element * 2_
function signature is used as template
stability: union
accepted
stable
unstable
review: record
reviewer: user
stability: stability
description: string
entity version: record
reviews: list of review
author: user
created: time
parent: reference to version
content: entity
versioned entity: record
versions: list of entity version
case: record
result: expression
choice: expression
argument: record
parameter: reference to parameter
expression: union
switch: record
cases: list of case
value: expression
parameter reference: record
parameter
function call: record
arguments: list of argument
function: reference to function version
literal: union
union: record
value: member initializer
members: list of member initializer
truth: boolean
number: number
parameter: record
function signature segment: union
parameter: parameter
function: record
definition: expression
expected type: optional type expression
signature: list of function signature segment
property reference: choice
computed property reference: record
computed: reference to computed property
field reference: record
data expression: choice
TODO filter
a data: record
data: reference to data
the subject: value
navigation: record
transitive closure: truth
property: property reference
source: data expression
field value: record
value: data expression
field: reference to field
constructor: record
field values: list of field value
value literal: record
value: value
truth literal: record
value: truth
text literal: record
value: text
number literal: record
value: number
computed property: entity
type of subject: reference to type
data: entity
definition: data expression
Complex
type expression: union
type parameter reference: reference to type parameter
type call: record
type arguments: list of type argument
type: reference to type
choice: record
cases: list of member
record: record
fields: list of member
truth: unit
text: unit
number: unit
unit: unit
type signature segment: union
parameter segment: record
parameter: type parameter
text segment: record
text: string
type parameter: record
member: record
name: string
type: record
signature: list of type signature segment
type argument: record
definition: type expression
type parameter: reference to type parameter
Simple
atomic type: choice
entity type: record
reference: truth
entity: reference to entity
type reference
truth type: value
text type: value
number type: value
type expression: record
multiple: truth
optional: truth
element type: atomic type
field: entity
type: type expression
type reference: choice
choice reference: record
choice: reference to choice
record reference: record
record: reference to record
value reference: record
value: reference to value
choice: entity
cases: list of type reference
record: entity
value: entity
entity: entity
fields: list of field
name: text
implicit changes
explicit changes
Scala
IntelliJ IDEA
scalatest
sbt
features
elmjutsu
linter-elm-make
language-elm
Atom
elm-test
elm-reactor
elm-package
elm-make
node.js
tooling
plugins
JDT
IDE
Eclipse
share
p2
test
JUnit
run
Eclipe Application
build
Tycho
Maven
bootstrap
Oomph
can be bad UX
not testable
not reusable
file path
name
local registry
Eclipse builder vs. Maven builder
VIATRA
Java
environment-dependent
has to be reimplemented everytime
style debates
version control
audio
graphics
math
orthogonal primitives
traceability
backward
navigate from every part of the result to the expressions which resulted in it
forward
quickly accessible
explorable
properties
kind-specific derived properties
element kind
time
continuous
temporary
proximity
semantic
physical
quick
cached
lazy
automatic
reproducible
cross-reference
containment
related to familiar ones
few & orthogonal
versioned
always refer to versions
versions are immutable
reference by URL
Reusing
types!
understanding
finding what you need
When sharing, provide stability
Editing
discoverable
efficient
When working, quickly see effects of changes
Playfair
Reform
Espalier
Reltron
Transcript
Demo
subcolumns: cases
header: column reference
subcolumns: fields
header: type
custom: reduce
recursive reference
example: linear layout
element's left = if is first then 0 else previous element's right element's is first = previous element is null element's previous element = element whose index is the element's index - 1
built-in: count, sum, average etc.
map
create by example, then abstract
operations
split data set
make conditional based on another property
bind property to data set (map)
= name object
bind property to another property
new
existing
default values of types
visualize structure clearly
continuously display the output and operate on it
special content that stores state of manipulating content
API
whose
Condition
one of
String
matches
contains
ends with
starts with
Numeric
>=
>
<=
<
In
objects: set of Value
Equals
object: Value
Negated Condition
negated condition: Condition
Built-in properties
type's
main representation: Property
containment: Truth
object's
name: String
type: Type
relationship
a piece of information
arbitrary relationships
access-controlled
version-controlled