Your SlideShare is downloading. ×
Preon (J-Fall 2008)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Preon (J-Fall 2008)

3,709

Published on

Published in: Technology, Education
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
3,709
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
55
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Err.... Quarks Preon
  • 2. Preon A
declarative
data
binding
framework
for
binary
 encoded
data
  • 3. Binary Encoded Data? Any
file
for
which

'file
‐bi
{filename}'

does
 not
return
a
mimetype
starting
with
'text/' Non‐binary: Binary: text/plain
(*.txt) application/pdf
(*.pdf) text/html
(*.html) application/octet‐stream
(*.mp4) text/xml
(*.xml) image/png
(*.png)
  • 4. Not only byte stream Always
octects
(8
bit
values) 8
bits  8
 bi ts 
  • 5. But also bit stream Always
octects
(8
bit
values) 5
bits 5
b its
  • 6. Compressed Data 2
kg 1021
pages
  • 7. Network Traffic
  • 8. TomTom Map Files Approx.
300
pages
of
C++
source
code,
 just
for
decoding
only...
  • 9. Why? Binary
45.71% Non‐binary
54.29% Binary
vs.
non‐binary
distribution
on
a
 random
directory
on
my
system
  • 10. Why? 100% Binary
files
only ...and
on
my
wife's
system
  • 11. Challenges ● Decoding
from
bit
stream
not
for
the
faint‐hearted ● Encoding
to
bit
stream
not
for
the
faint‐hearted ● Hard
to
maintain ● Hard
to
extend ● Java
doesn't
help
(Bug
4504839) ● Decoder
and
encoder
easily
go
out
of
sync ● Documentation
and
software
easily
go
out
of
sync
  • 12. What if.... ..this could all be solved easily?
  • 13. Preon Ambitions ● Declaratively
map
data
structure
to
encoding
 format ● Get
the
decoder/encoder/documentation,
 free
of
charge
  • 14. 5-Second User Guide Decoding
a
BitMap: 01

File
file
=
new
File(...); 02

Codec<BitMap>
codec
=
Codecs.create(BitMap.class); 03

BitMap
bitmap
=
Codecs.decode(codec,
file);
  • 15. What just happened? Create
a
Codec
for
instances
of
BitMap 01

File
file
=
new
File(...); 02

Codec<BitMap>
codec
=
Codecs.create(BitMap.class); 03

BitMap
bitmap
=
Codecs.decode(codec,
file); ...
and
use
it
to
decode
a
BitMap.
  • 16. Find the specification The
data
structure
IS
the
specification: class
BitMap
{ 

@Bound
int
width; 

@Bound
int
height; 

@Bound
int
nrColors; 

@BoundList(size=”nrColors”)
Color[]; 

@BoundList(size=”width*height”)
byte[]
pixels; } class
Color
{ 

@Bound
int
red; 

@Bound
int
green; 

@Bound
int
blue; }
  • 17. Demo Decoding
  • 18. But what is actually happening? Codec
is
nothing
but
a
 facace
to
a
chain
of
 Codecs. Each
Codec
only
 understands
its
own
task. Codecs
will
delegate
to
 other
Codecs
  • 19. Codecs Encapsulate
everything
there
is
to
know
about
the
 mapping
between
in‐memory
representation
and
 encoded
representation
  • 20. Demo Documentation
  • 21. So, now.... Forget
everything
I
just
told
you
  • 22. Preon just works Annotations Types ● @Bound int,
byte,
short,
long,
Integer,
 ● @BoundList Byte,
Short,
Long,
boolean,
 ● @BoundString Boolean,
String,
List<T>,
T[],
 ● @BoundNumber type‐safe
enums,

Object ● @BoundObject Expressions ● @BoundExplicitly ● @If
 attributes:
.{name} ● @LazyLoading items:
[{number}],
or
[{expr}] ● @LengthPrefix arithmetic:
+,
‐,
/,
*,
^ ● @TypePrefix combinatorial:
&&,
|| ● @ByteAlign relational:
>=,
<=,
==,
<,
> ● @Slice literals:
'foobar',
0x0f,
0b01101
  • 23. Convention over Configuration //
Default
settings
for
int
Codec:
 //
32‐bits,
little
endian @Bound
int
foo; //
Read
an
int,
but
construct
the
int
 //
from
5
bits
only @BoundNumber(size=”5”)
int
foo;
  • 24. Expressions (1) /** 
*
An
icon
of
maximal
15
*
15
pixels.
Each
color 
*
has
a
color
in
the
range
0‐255. 
*/ public
class
Icon
{ @BoundNumber(size=”4”)
int
height; @BoundNumber(size=”4”)
int
width; @BoundList(size=”height
*
width”)
byte[]
pixels; } By
accepting
Strings
instead
of
booleans
and
 integers,
Preon
allows
you
to
pass
in
expressions.
  • 25. Expressions (2) @BoundString(size=”{expr}”,
...) @BoundList(size=”{expr}”,
offset=”{expr}”,
...) @BoundNumber(size=”{expr}”,
...) @Slice(“{expr}”) ...
  • 26. Boolean expressions @Bound private
int
mapVersion; @If(“mapVersion
>=
700”) @Bound
 private
MapFlags
flags; //
But
also: //
mapVersion
+
1
>=
700 //
mapVersion
>
3
&&
mapVersion
<
300 //
etc.
  • 27. References Backward
references
only Reference
the
“outer”
object addresses[1].street outer.driversLicenses[1].state driveresLicenses[nrDriverLicenses
‐
1].state
  • 28. Variable Introductions @Bound
int[]
offsets; @BoundList(offset=”offsets[index]”,...)
 List<Node>
nodes; Introduction ● Preon
will
inject
List
implementation ● List
implementation
will
load
Nodes
lazily,
on
demand ● Calling
nodes.get(3)
will
cause
the
List
implementation
to – Calculate
the
node's
position:
offsets[index=3]
=
120 – Call
Codec<Node>
to
start
decoding
from
that
point
  • 29. Inheritance Java
Classes Preon
Perspective
  • 30. Codecs class is your friend static <T> T decode(Codec<T> codec, byte[] buffer) static <T> T decode(Codec<T> codec, ByteBuffer buffer) static <T> T decode(Codec<T> codec, File file) static <T> Codec<T> create(Class<T> type) static <T> Codec<T> create(Class<T> type, CodecFactory... factories) static <T> Codec<T> create(Class<T> type, CodecDecorator... decorators) static <T> void document(Codec<T> codec, ArticleDocument document) static <T> void document(Codec<T> codec, DocumentType type, OutputStream out) static <T> void document(Codec<T> codec, DocumentType type, File file)
  • 31. Preon Layers Data
binding A
fluent
interface
for
 generating
documents. (pecia.sourceforget.net) An
expression
language
capable
of
 BitBuffer
abstractions rendering
itself
to
human
readable
 text.
(limbo.sourceforge.net)
  • 32. Preon License GPL
+
Classpath
 Exception Apache
2.0 Apache
2.0 GPL
+
Classpath
Exception
  • 33. If not Preon, then what else? Declarative
approach
is
not
new: – BSDL
(Bitstream
Syntax
Description
Language) – Flavor
(http://flavor.sourceforge.net/) – XFlavor – BFlavor
(http://multimedialab.elis.ugent.be/bflavor/) None
of
them
would
worked
in
our
case: – Overly
complicated – No
solid
implementation – Assumptions
are
surreal: ● “everything
will
just
fit
in
memory” ● “there
will
only
be
a
single
thread” ● “our
current
feature
set
is
all
you
ever
need”
  • 34. The Preon Answer “everything
will
just
fit
in
memory” Preon
is
capable
of
using
memory‐mapped
data.
(Default
 BitBuffer
implementation
wraps
around
ByteBuffer,
and
 hence
also
MappedByteBuffer.) “there
will
only
be
a
single
thread” In
Preon,
every
thread
can
have
its
own
reference
to
the
 current
position
in
the
BitBuffer. “our
current
feature
set
is
all
you
ever
need” Preon
has
incredibly
open:
implement
CodecFactory
or
 CodecDecorator
to
create
your
own
codecs
based
on
type
 information
or
annotations.
  • 35. CodecFactory Annotations
on
the
object
expecting
data
 to
be
decoded
by
the
Codec. interface CodecFactory { <T> Codec<T> create(AnnotatedElement metadata, Class<T> type, ResolverContext context); } The
type
of
object
to
 The
object
for
constructing
 be
decoded. references. returns
null
if
it
does
not
have
a
way
to
construct
a
Codec
  • 36. CodecFactory Usage ● CodecFactories
can
be
passed
to
Codecs.create(...) ● ...
which
will
cause
the
Codecs
class
to
consider
 these
factories
when
constructing
the
various
 Codecs. ● Internally,
a
big
chain
of
commands
  • 37. Current Status ● http://preon.sourceforge.net/ ● Interfaces
fairly
stable ● Current
version
1.0‐SNAPSHOT ● Complete
Java
class
example
before
first
release
 candidate ● Bugs... ● I
want
you
  • 38. Future work ● The
encode
operation
(after
1.0) ● Better
debugging ● Annotation
driven
support
for
other
compression
 techniques ● More
hyperlinking
in
the
documentation ● Better
algebraic
simplification
of
expressions ● Descriptions
from
JavaDoc
  • 39. If there is only a couple of things... ● XML
is
just
a
lame
way
of
binary
encoding ● Preon
cuts
out
the
Infoset
model,
preventing
 unnecessary
transformations ● Preon
makes
binary
encoding
easy ● Preon
is
extensible ● Preon
(probably)
scales
quite
well ● Preon
is
friendly
to
Java
developers
  • 40. Confused?

×