“From the intrinsic evidence of his creation, the Great Architect of the Universe now begins to appear as a pure mathematician.”
— Sir James Jeans
— Sir James Jeans
“The dolphin did not invent the sonar; it developed it, naturally. And this is the crucial part of our philosophical reflection we have today: can we therefore conclude that humans are more concerned with "having" than "being"?”
— Professor Norman, Lucy (2014)
— Professor Norman, Lucy (2014)
“Indeed, these minds, if they noticed and formed an extremely clear perception of some property of, say, the parabola, would not seek, as our geometers do, to rectify the parabola, they would endeavor, if one may coin the expression, to parabolify the straight line.”
— Roger Joseph Boscovich
— Roger Joseph Boscovich
“Always implement things when you actually need them, never when you just foresee that you need them.”
— Ron Jeffries, extreme programming co-founder
— Ron Jeffries, extreme programming co-founder
“Be creative in your language, but not in your tools. Reduce the initial difficulties people have to face to adopt your language by using familiar standards.”
— Federico Tomassetti
— Federico Tomassetti
#Java
The JVM
- is the detailed, formal specification for a 32-bit abstract machine. Abstract implies hardware and OS-independent and thus is interoperable across platform-dependent implementations. It operates on abstracte data types rather the native data types of any ISA:
• 32-bits types: integers, floats, and references are called primitives
• 64-bits types: long and double are supported but consume two units of storage
• smaller types: boolean, byte, short and char are extended to 32-bit ints
It loads code, verifies it, and executes it. It has instructions for:
• Load and store
• Arithmetic
• Type conversion
• Object creation and manipulation
• Operand stack management (push & pop)
• Control transfer (branching)
• Method invocation and return
• Throwing exceptions
• Monitor-based concurrency
The specification includes various dynamic features such as GC and thread management.
JDK
- is an software development kit for Java and consists of:
• a private stand-alone implementation of the JVM such as JRE's HotSpot
• the Java standard library, JCL
• an interpreter/loader (
• a compiler (
• an archiver (
• a documentation generator (Javadoc)
HotSpot
- relies on JIT; and divides the memory into generations:
• young generation: heap for short-lived objects
• old generation: heap for long-lived objects
• permanent generation: used for class definitions and associated metadata
JVM languages
Any language that can express a valid class file. The existing languages includes ports from other languages:
• JRuby (#Ruby)
• Jython (#Python)
And entirely new languages that compile to Java bytecode:
• Clojure
• Apache Groovy
• #Scala
• #Kotlin
JVM languages are compatible with each other i.e. libraries of one can be used with programs of another. A new feature will supports dynamically typed languages in the JVM, and is developed within the Da Vinci Machine project whose mission is to extend the JVM so that it supports languages other than Java.
The JVM
- is the detailed, formal specification for a 32-bit abstract machine. Abstract implies hardware and OS-independent and thus is interoperable across platform-dependent implementations. It operates on abstracte data types rather the native data types of any ISA:
• 32-bits types: integers, floats, and references are called primitives
• 64-bits types: long and double are supported but consume two units of storage
• smaller types: boolean, byte, short and char are extended to 32-bit ints
It loads code, verifies it, and executes it. It has instructions for:
• Load and store
• Arithmetic
• Type conversion
• Object creation and manipulation
• Operand stack management (push & pop)
• Control transfer (branching)
• Method invocation and return
• Throwing exceptions
• Monitor-based concurrency
The specification includes various dynamic features such as GC and thread management.
JDK
- is an software development kit for Java and consists of:
• a private stand-alone implementation of the JVM such as JRE's HotSpot
• the Java standard library, JCL
• an interpreter/loader (
java)• a compiler (
javac)• an archiver (
jar)• a documentation generator (Javadoc)
HotSpot
- relies on JIT; and divides the memory into generations:
• young generation: heap for short-lived objects
• old generation: heap for long-lived objects
• permanent generation: used for class definitions and associated metadata
JVM languages
Any language that can express a valid class file. The existing languages includes ports from other languages:
• JRuby (#Ruby)
• Jython (#Python)
And entirely new languages that compile to Java bytecode:
• Clojure
• Apache Groovy
• #Scala
• #Kotlin
JVM languages are compatible with each other i.e. libraries of one can be used with programs of another. A new feature will supports dynamically typed languages in the JVM, and is developed within the Da Vinci Machine project whose mission is to extend the JVM so that it supports languages other than Java.
#structures
Sequential
• Array: contiguous elements
• Matrix: contiguous elements each paired with two indices
• Tensor: contiguous elements each paired with n indices
• Linked List: non-contiguous elements each paired with a pointer to the next element
• Stack: contiguous elements with a top pointer
• Queue: contiguous elements with a head and tail pointer
Non-sequential
Elements are accessed without restriction.
• Binary Tree: contiguous elements each pointing to at most 3 other elements: one parent and two children
• Hash table: contiguous elements mapped to non-contiguous elements using a hash function
• Graph: non-contiguous elements each paired with a list of elements it is connected to
Sequential
• Array: contiguous elements
• Matrix: contiguous elements each paired with two indices
• Tensor: contiguous elements each paired with n indices
• Linked List: non-contiguous elements each paired with a pointer to the next element
• Stack: contiguous elements with a top pointer
• Queue: contiguous elements with a head and tail pointer
Non-sequential
Elements are accessed without restriction.
• Binary Tree: contiguous elements each pointing to at most 3 other elements: one parent and two children
• Hash table: contiguous elements mapped to non-contiguous elements using a hash function
• Graph: non-contiguous elements each paired with a list of elements it is connected to
GC analogy for belief revision
Dynamically iterate over all beliefs and "collect" the contradictory ones.
Dynamically iterate over all beliefs and "collect" the contradictory ones.
Syntax comparison
C-ish
C-ish
no support
Rubic
C-ish
if (cond)Citronic
{
...
}
else
{
...
}
cond ifTrue: {
...
} ifFalse: {
...
}
Nilicif cond {
...
} else {
...
}
Pythonicif cond:Rubic
...
else:
...
if condOne-liner conditionals
...
else
...
end
C-ish
if (cond) ... else ...
Citroniccond `ifTrue` ...Nilic
if cond then ... else ...
Pythonicno support
Rubic
if cond ... else ... end#Python development tips by S. N. R.
The notebook from jupyter.org, and kivy.org for rapid GUI development
The notebook from jupyter.org, and kivy.org for rapid GUI development
“The mouse and the windowed desktop are perhaps the two greatest innovations in the history of human-computer interaction. But like all innovations, they are best seen as part of a continuum rather than a terminus. The mouse and the window led us out of the confines of the keyboard and the text prompt to the world of graphical and spatial possibility we enjoy today. But there's no reason to stop there.”
“Many activities today still need only a keyboard and terminal screen—and it's likely the personal computer could have still evolved, albeit more limitedly, using only those. Most activities today need only a mouse and windowed information display on top of that, and the evolution of software and hardware can and will continue while limited to these. Eventually, though, the shift to another interaction paradigm is inevitable. Just as the advent of the mouse and windowed GUI opened many new doors, so will the next generation of interfaces after that.”
— 10gui.com
“Many activities today still need only a keyboard and terminal screen—and it's likely the personal computer could have still evolved, albeit more limitedly, using only those. Most activities today need only a mouse and windowed information display on top of that, and the evolution of software and hardware can and will continue while limited to these. Eventually, though, the shift to another interaction paradigm is inevitable. Just as the advent of the mouse and windowed GUI opened many new doors, so will the next generation of interfaces after that.”
— 10gui.com
Evolution of the UI
CLI (Command-line user interface)
Dominance: 60s-80s
Input devices: the keyboard
Input: a successive series of codified text with an strict syntax i.e. commands
Process: handled by a program called a shell which is a program that accepts commands as text input and converts commands into appropriate operating system functions
Output: a limited range of responses
Output devices: monochrome monitor
Advantages: efficient, automatable via scripting
Disadvantages: tedious, esoteric, steep learning curve
GUI
Dominance: 80s-present
Input devices: the mouse
Input: intractions with metaphors via movements and actions of the mouse
Process: metaphors are ultimately translated into commands
Output: visual metaphors e.g. desktop, file, trash can, dragging, etc.
Output devices: color monitor
Advantages: customizable visuals, exoteric
Disadvantages: not everything that can be done with a CLI can be done with a GUI
Multi-touch technologies may be the bridge from traditional GUIs to the natural user interface: NUI.
CLI (Command-line user interface)
Dominance: 60s-80s
Input devices: the keyboard
Input: a successive series of codified text with an strict syntax i.e. commands
Process: handled by a program called a shell which is a program that accepts commands as text input and converts commands into appropriate operating system functions
Output: a limited range of responses
Output devices: monochrome monitor
Advantages: efficient, automatable via scripting
Disadvantages: tedious, esoteric, steep learning curve
GUI
Dominance: 80s-present
Input devices: the mouse
Input: intractions with metaphors via movements and actions of the mouse
Process: metaphors are ultimately translated into commands
Output: visual metaphors e.g. desktop, file, trash can, dragging, etc.
Output devices: color monitor
Advantages: customizable visuals, exoteric
Disadvantages: not everything that can be done with a CLI can be done with a GUI
Multi-touch technologies may be the bridge from traditional GUIs to the natural user interface: NUI.