#LyX 2.0 created this file. For more info see http://www.lyx.org/
\lyxformat 413
\begin_document
\begin_header
\textclass beamer
\begin_preamble
%\usetheme{Warsaw}
% or ...
\usetheme{lankton-keynote}

\setbeamercovered{transparent}
% or whatever (possibly just delete it)
\usepackage{fontspec}
%\newfontface\cjk{ShanHeiSun-Uni}
%\newfontface\cjk{BousungEG-Light-GB}
\newfontface\cjk{GBZenKai-Medium}
%\newfontface\cjk{ZenKai-Medium}
%\newfontface\cjk{ShanHeiSun-Light}
%\newfontface\cjk{ZenKai-Uni}
\end_preamble
\options aspectratio=169
\use_default_options false
\maintain_unincluded_children false
\language american
\language_package auto
\inputencoding utf8x
\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100

\graphics default
\default_output_format pdf5
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize 12
\spacing single
\use_hyperref false
\papersize default
\use_geometry true
\use_amsmath 2
\use_esint 0
\use_mhchem 1
\use_mathdots 1
\cite_engine basic
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\use_refstyle 0
\index Stichwortverzeichnis
\shortcut idx
\color #008000
\end_index
\secnumdepth 2
\tocdepth 2
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Title
net
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
kern-.8ex
\backslash
lower1.5ex
\backslash
hbox{
\end_layout

\end_inset


\begin_inset Graphics
	filename net2o-logo.pdf
	lyxscale 10
	scale 10

\end_inset


\begin_inset ERT
status open

\begin_layout Plain Layout

}
\backslash
kern-.5ex
\end_layout

\end_inset

: Command Language
\begin_inset Argument
status open

\begin_layout Plain Layout
net2o app layer
\end_layout

\end_inset


\end_layout

\begin_layout Subtitle
A universal language for structured data and RPC
\end_layout

\begin_layout Author
Bernd Paysan
\end_layout

\begin_layout Date
September 26, EuroForth 2014, Palma de Mallorca
\end_layout

\begin_layout Standard
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
addtobeamertemplate{headline}{}{
\backslash
vbox{
\backslash
vspace{3ex}
\backslash
hbox to
\backslash
paperwidth{
\backslash
hfill
\end_layout

\end_inset


\begin_inset Graphics
	filename net2o-logo.pdf
	lyxscale 5
	scale 5

\end_inset


\begin_inset ERT
status open

\begin_layout Plain Layout

~~~}}}
\end_layout

\end_inset


\end_layout

\begin_layout BeginFrame
Overview
\end_layout

\begin_layout Standard
\begin_inset CommandInset toc
LatexCommand tableofcontents

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Motivation
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Forth--Style Communication
\end_layout

\begin_layout Standard
Requirements for secure communication (secure as in 
\begin_inset Quotes eld
\end_inset

no exploitation through misinterpretation
\begin_inset Quotes erd
\end_inset

)
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Itemize
Extremely simple interpreter
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Extensible, but extensions must be allowed by the receiver
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Universal, i.e.
 only one interpreter to audit and verify
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Triviality makes it difficult to explain
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout Section
Object Oriented Forth Code as Data
\end_layout

\begin_layout BeginFrame
Basics
\end_layout

\begin_layout Itemize
Five data types: Integer (64 bits signed+unsigned), flag, string (generic
 byte array), IEEE double float, objects
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Instructions and data encoding derived from Protobuf (7 bits per byte, MSB=1
 means 
\begin_inset Quotes eld
\end_inset

data continues
\begin_inset Quotes erd
\end_inset

, most significant part first)
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Four stacks: integer, float, objects, strings
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize

\family typewriter
endwith
\family default
 and 
\family typewriter
endcmd
\family default
 for ending object message blocks and commands
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize

\family typewriter
oswap
\family default
 to transfer the current object to the object stack, to be inserted in the
 outer object
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize

\family typewriter
words
\family default
 for reflection (words are listed with token number, identifier and stack
 effect to make automatic bindigs possible)
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Why binary encoding?
\end_layout

\begin_layout Itemize
Faster and simpler to parse (simpler means smaller attack vector)
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Ability to enter commands on the fly in text form through a frontend interpreter
 still exists
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Debugging with a de--tokenizer is also very easy
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Object--oriented approach makes writing application--specific logic extremely
 simple
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Why a programming language as data?
\end_layout

\begin_layout FrameSubtitle
Lemma: every glue logic will become Turing complete
\end_layout

\begin_layout Itemize
Implement only the things you need --- but you shouldn't have to implement
 more than 
\emph on
one
\emph default
 generic interpreter
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Typical idea of sending remote procedure calls: serialize the entire object
 (with subobjects), and call a function on that object
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
Net2o idea (derived from ONF): Keep the entire object synchronized by sending
 only the changes to it --- these changes are simple messages (setters)
\end_layout

\begin_deeper
\begin_layout Pause

\end_layout

\end_deeper
\begin_layout Itemize
This allows multi--message passing, and reduces latency
\end_layout

\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Security
\end_layout

\begin_layout FrameSubtitle
Lemma: every sufficiently complex format can be exploited
\end_layout

\begin_layout Standard
Therefore stick to a very simple format, i.e.: simplify and factor the code
\end_layout

\begin_layout Pause

\end_layout

\begin_layout Block
\begin_inset ERT
status open

\begin_layout Plain Layout

{Interpreter}
\end_layout

\end_inset


\end_layout

\begin_deeper
\begin_layout LyX-Code
: cmd@ ( -- u )
\end_layout

\begin_layout LyX-Code
  buf-state 2@ over + >r p@+ r> over - buf-state 2! 64>n ;
\end_layout

\begin_layout LyX-Code
: n>cmd ( n -- addr )  cells >r
\end_layout

\begin_layout LyX-Code
  o IF   token-table  ELSE  setup-table  THEN
\end_layout

\begin_layout LyX-Code
  $@ r@ u<= IF  net2o-crash  THEN  r> + ;
\end_layout

\begin_layout LyX-Code
: cmd-dispatch ( addr u -- addr' u' )  buf-state 2!
\end_layout

\begin_layout LyX-Code
  cmd@ n>cmd @ ?dup IF  execute  ELSE  net2o-crash  THEN
\end_layout

\begin_layout LyX-Code
  buf-state 2@ ;
\end_layout

\begin_layout LyX-Code
: cmd-loop ( addr u -- )
\end_layout

\begin_layout LyX-Code
  BEGIN  cmd-dispatch dup 0<= UNTIL  2drop ;
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout Section
A Few Examples
\end_layout

\begin_layout BeginFrame
Reading Files
\end_layout

\begin_layout ExampleBlock
\begin_inset ERT
status open

\begin_layout Plain Layout

{
\end_layout

\end_inset


reading three files
\lang american

\begin_inset ERT
status open

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_deeper
\begin_layout LyX-Code
0 lit, file-id "net2o.fs" $, 0 lit,
\end_layout

\begin_layout LyX-Code
open-file <req-file get-size get-stat req> endwith
\end_layout

\begin_layout LyX-Code
1 lit, file-id "data/2011-05-13_11-26-57-small.jpg" $, 0 lit,
\end_layout

\begin_layout LyX-Code
open-file <req-file get-size get-stat req> endwith
\end_layout

\begin_layout LyX-Code
2 lit, file-id "data/2011-05-20_17-01-12-small.jpg" $, 0 lit,
\end_layout

\begin_layout LyX-Code
open-file <req-file get-size get-stat req> endwith
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Reading Files: Reply
\end_layout

\begin_layout ExampleBlock
\begin_inset ERT
status open

\begin_layout Plain Layout

{
\end_layout

\end_inset


reading three files
\lang american
: replies
\begin_inset ERT
status open

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_deeper
\begin_layout LyX-Code
0 lit, file-id 12B9A lit, set-size
\end_layout

\begin_layout LyX-Code
    138D607CB83D0F06 lit, 1A4 lit, set-stat endwith
\end_layout

\begin_layout LyX-Code
1 lit, file-id 9C65C lit, set-size
\end_layout

\begin_layout LyX-Code
    13849CAE1F3B6EA8 lit, 1A4 lit, set-stat endwith
\end_layout

\begin_layout LyX-Code
2 lit, file-id 9D240 lit, set-size
\end_layout

\begin_layout LyX-Code
    13849CAE2643FDCC lit, 1A4 lit, set-stat endwith
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Messages
\end_layout

\begin_layout ExampleBlock
\begin_inset ERT
status open

\begin_layout Plain Layout

{
\end_layout

\end_inset

messages
\begin_inset ERT
status open

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_deeper
\begin_layout LyX-Code
msg 13977C927BF7F1AA lit, msg-at  "Hi Bob!" $, msg-text
\end_layout

\begin_layout LyX-Code
    85" Z(&3*>qxl*bWM*DUCA-Mf9N~u;<ddcW0C<XR)ezh?=jmn7zq4RFduAe=aOjKE*2y)I`t;Xi^
buBc*@f2"
\end_layout

\begin_layout LyX-Code
    $, msg-sig endwith 
\end_layout

\begin_layout LyX-Code
85" e}&3&Kep3Im`T3?tIU=8fs>4=(C`Uic<rhs{(J`k&c5k8{H2^0*}`rV0(F3e"
\end_layout

\begin_layout LyX-Code
$, push-$ push' nest 0 lit, ok?
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout BeginFrame
Structured Text a la HTML
\end_layout

\begin_layout ExampleBlock
\begin_inset ERT
status open

\begin_layout Plain Layout

{
\end_layout

\end_inset


HTML--like structured text
\lang american

\begin_inset ERT
status open

\begin_layout Plain Layout

}
\end_layout

\end_inset


\end_layout

\begin_deeper
\begin_layout LyX-Code
body
\end_layout

\begin_layout LyX-Code
   p "Some text with " text
\end_layout

\begin_layout LyX-Code
       bold "bold" text oswap add
\end_layout

\begin_layout LyX-Code
       " markup" text
\end_layout

\begin_layout LyX-Code
   oswap add
\end_layout

\begin_layout LyX-Code
   li
\end_layout

\begin_layout LyX-Code
       ul "a bullet point" text oswap add
\end_layout

\begin_layout LyX-Code
       ul "another bullet point" text oswap add
\end_layout

\begin_layout LyX-Code
   oswap add
\end_layout

\begin_layout LyX-Code
oswap add
\end_layout

\end_deeper
\begin_layout EndFrame

\end_layout

\begin_layout Section*
\start_of_appendix
Appendix
\end_layout

\begin_layout Subsection*
Literature&Links
\end_layout

\begin_layout BeginFrame
Literature&Links
\end_layout

\begin_layout Bibliography
\labelwidthstring Literaturverzeichnis
\begin_inset CommandInset bibitem
LatexCommand bibitem
key "net2o"

\end_inset


\noun on
Bernd Paysan
\noun default
 
\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
newblock
\end_layout

\end_inset


\emph on
\color white
net2o fossil repository
\emph default
\color inherit

\begin_inset ERT
status collapsed

\begin_layout Plain Layout


\backslash
newblock
\end_layout

\end_inset

 
\begin_inset Flex URL
status open

\begin_layout Plain Layout

http://fossil.net2o.de/net2o/
\end_layout

\end_inset


\end_layout

\begin_layout EndFrame

\end_layout

\end_body
\end_document
