Top Banner
Reinventing the Enlightenment Object System Tom Hacohen Samsung Electronics Open Source Group [email protected] @TomHacohen FOSDEM 2015
114
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Eo fosdem 15

Reinventing the Enlightenment Object System

Tom HacohenSamsung Electronics Open Source Group

[email protected]

@TomHacohen

FOSDEM 2015

Page 2: Eo fosdem 15

Main Goals

Unify Code

I Many different object systems → one

I Many different event/callback implementations → one

I Make objects compatible

Page 3: Eo fosdem 15

Main Goals

Unify Code

I Many different object systems → one

I Many different event/callback implementations → one

I Make objects compatible

Page 4: Eo fosdem 15

Main Goals

Unify Code

I Many different object systems → one

I Many different event/callback implementations → one

I Make objects compatible

Page 5: Eo fosdem 15

Main Goals

Unify Code

I Many different object systems → one

I Many different event/callback implementations → one

I Make objects compatible

Page 6: Eo fosdem 15

Main Goals

Reducing our API

We have:

evas_object_image_file_set(obj , "blah.png", "key");

edje_object_file_set(obj , "blah.edj", "group");

evas_object_del(obj);

ecore_timer_del(obj);

ecore_animator_del(obj);

Page 7: Eo fosdem 15

Main Goals

Reducing our API

We have:

evas_object_image_file_set(obj , "blah.png", "key");

edje_object_file_set(obj , "blah.edj", "group");

evas_object_del(obj);

ecore_timer_del(obj);

ecore_animator_del(obj);

Page 8: Eo fosdem 15

Main Goals

Bindings Generation

I Be able to automatically generate for most popular languages

I Correctly handle ref counting, buffer ownership and etc.

Page 9: Eo fosdem 15

Main Goals

Bindings Generation

I Be able to automatically generate for most popular languages

I Correctly handle ref counting, buffer ownership and etc.

Page 10: Eo fosdem 15

Main Goals

Bindings Generation

I Be able to automatically generate for most popular languages

I Correctly handle ref counting, buffer ownership and etc.

Page 11: Eo fosdem 15

Main Goals

Not Hurt Performance

I Not easily measurable – many changes in EFL

Page 12: Eo fosdem 15

Main Goals

Not Hurt Performance

I Not easily measurable – many changes in EFL

Page 13: Eo fosdem 15

Other Object Systems

Other Languages

I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world

I We considered using just the runtime

Page 14: Eo fosdem 15

Other Object Systems

Other Languages

I C++ – our developers hate it

I Objective C – quite ugly and not really common in OSS world

I We considered using just the runtime

Page 15: Eo fosdem 15

Other Object Systems

Other Languages

I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world

I We considered using just the runtime

Page 16: Eo fosdem 15

Other Object Systems

Other Languages

I C++ – our developers hate itI Objective C – quite ugly and not really common in OSS world

I We considered using just the runtime

Page 17: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 18: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 19: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 20: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 21: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 22: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 23: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 24: Eo fosdem 15

Other Object Systems

GObject

Good:

I Fast

I Has a “C feel”

Bad:

I Doesn’t offer a stable ABI

I Funny, full of casting syntax

I “G tech” dependencies

I Didn’t exactly fit our needs

Page 25: Eo fosdem 15

Other Object Systems

systemd-objectd

Good:

I Exposes a dbus API

I Clean isolated daemon

Bad:

I Linux only

Page 26: Eo fosdem 15

Other Object Systems

systemd-objectd

Good:

I Exposes a dbus API

I Clean isolated daemon

Bad:

I Linux only

Page 27: Eo fosdem 15

Other Object Systems

systemd-objectd

Good:

I Exposes a dbus API

I Clean isolated daemon

Bad:

I Linux only

Page 28: Eo fosdem 15

Other Object Systems

systemd-objectd

Good:

I Exposes a dbus API

I Clean isolated daemon

Bad:

I Linux only

Page 29: Eo fosdem 15

Other Object Systems

systemd-objectd

Good:

I Exposes a dbus API

I Clean isolated daemon

Bad:

I Linux only

Page 30: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 31: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 32: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 33: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 34: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 35: Eo fosdem 15

What is Eo?

Basics

I It’s Enlightenment’s (fairly) new object system

I Supports classes, abstract classes, mixins and interfaces

I Completely written in C (no external preprocessor)

I API/ABI stable

I Portable

Page 36: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do(obj, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩

elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 37: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));

I if (eo_do(obj, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩

elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 38: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do(obj, elm_widget_enabled_get()))

I eo_do(obj, visible = elm_widget_visibility_get(), ←↩elm_widget_visibility_set(!visible));

I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 39: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do(obj, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩

elm_widget_visibility_set(!visible));

I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 40: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do(obj, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩

elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 41: Eo fosdem 15

What is Eo?

Using Eo

I eo_do(obj, efl_file_set("file.eet", "key"));I if (eo_do(obj, elm_widget_enabled_get()))I eo_do(obj, visible = elm_widget_visibility_get(), ←↩

elm_widget_visibility_set(!visible));I eo_do(obj, elm_widget_visibility_set(!elm_widget_visibility_get()));

I static void size_multiply(double f)

{

int w, h;

evas_object_geometry_get(NULL , NULL , &w, &h);

evas_object_geometry_set(NULL , NULL , w * f, h * f);

}

eo_do(obj , size_multiply (3.5));

Page 42: Eo fosdem 15

What is Eo? | Internals

eo_do() – How It’s Done (simplified)

#define eo_do(eoid , clsid , ...) \

({ \

const Eo *_eoid_ EO_DO_CLEANUP = eoid; \

_eo_do_start(_eoid_ , clsid); \

__VA_ARGS__; \

})

Page 43: Eo fosdem 15

What is Eo? | Internals

eo_do() – How It’s Done (simplified)

#define eo_do(eoid , clsid , ...) \

({ \

const Eo *_eoid_ EO_DO_CLEANUP = eoid; \

_eo_do_start(_eoid_ , clsid); \

__VA_ARGS__; \

})

Page 44: Eo fosdem 15

What is Eo? | Internals

Defining New Functions (simplified)

EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);

#define EO_FUNC_BODY(Name , Ret , DefRet) \

Ret Name(void) \

{ \

static Eo_Op op = EO_NOOP; \

if (op == EO_NOOP) \

op = _eo_api_op_id_get ((void*) Name); \

if (! _eo_call_resolve (#Name , op , &call)) \

return DefRet; \

_Eo_##Name##_func _func_ = \

(_Eo_##Name##_func) call.func; \

return _func_(call.obj , call.data); \

}

Page 45: Eo fosdem 15

What is Eo? | Internals

Defining New Functions (simplified)

EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);

#define EO_FUNC_BODY(Name , Ret , DefRet) \

Ret Name(void) \

{ \

static Eo_Op op = EO_NOOP; \

if (op == EO_NOOP) \

op = _eo_api_op_id_get ((void*) Name); \

if (! _eo_call_resolve (#Name , op , &call)) \

return DefRet; \

_Eo_##Name##_func _func_ = \

(_Eo_##Name##_func) call.func; \

return _func_(call.obj , call.data); \

}

Page 46: Eo fosdem 15

What is Eo? | Internals

Defining New Functions (simplified)

EOAPI EO_FUNC_BODY(eo_parent_get, Eo *, NULL);

#define EO_FUNC_BODY(Name , Ret , DefRet) \

Ret Name(void) \

{ \

static Eo_Op op = EO_NOOP; \

if (op == EO_NOOP) \

op = _eo_api_op_id_get ((void*) Name); \

if (! _eo_call_resolve (#Name , op , &call)) \

return DefRet; \

_Eo_##Name##_func _func_ = \

(_Eo_##Name##_func) call.func; \

return _func_(call.obj , call.data); \

}

Page 47: Eo fosdem 15

What is Eo? | Internals

Defining New Classes (simplified)

Populating a struct with some metadata

static Eo_Op_Description _edje_object_op_desc [] = {

EO_OP_FUNC(edje_obj_update_hints_set , ←↩_edje_object_update_hints_set),

EO_OP_FUNC_OVERRIDE(eo_constructor , ←↩_edje_object_eo_base_constructor),

EO_OP_CLASS_FUNC(eo_event_global_thaw , ←↩_eo_base_event_global_thaw),

EO_OP_CLASS_OVERRIDE_FUNC(eo_event_global_thaw , ←↩_edje_object_eo_base_event_global_thaw)

};

Page 48: Eo fosdem 15

What is Eo? | Internals

Defining New Classes (simplified)

Populating a struct with some metadata

static Eo_Op_Description _edje_object_op_desc [] = {

EO_OP_FUNC(edje_obj_update_hints_set , ←↩_edje_object_update_hints_set),

EO_OP_FUNC_OVERRIDE(eo_constructor , ←↩_edje_object_eo_base_constructor),

EO_OP_CLASS_FUNC(eo_event_global_thaw , ←↩_eo_base_event_global_thaw),

EO_OP_CLASS_OVERRIDE_FUNC(eo_event_global_thaw , ←↩_edje_object_eo_base_event_global_thaw)

};

Page 49: Eo fosdem 15

What is Eo? | Internals

Event Identifiers

EOAPI const Eo_Event_Description ←↩_EO_BASE_EVENT_CALLBACK_ADD = ←↩EO_EVENT_DESCRIPTION("callback ,add");

Page 50: Eo fosdem 15

What is Eo? | Internals

Event Identifiers

EOAPI const Eo_Event_Description ←↩_EO_BASE_EVENT_CALLBACK_ADD = ←↩EO_EVENT_DESCRIPTION("callback ,add");

Page 51: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 52: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 53: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 54: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 55: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 56: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 57: Eo fosdem 15

What is Eo? |

Unique Features

I Pointer indirection (at least in C)

I Multiple calls in one context

I How we do constructors (setting properties, no constructors)

I Named ref-counting

I Composite objects

I Default return values

Page 58: Eo fosdem 15

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Page 59: Eo fosdem 15

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Page 60: Eo fosdem 15

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Page 61: Eo fosdem 15

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Page 62: Eo fosdem 15

Reception |

Wash, Rinse, Repeat

I Eo1

I Eo2

I Eolian

I Eolian (improved)

Page 63: Eo fosdem 15

Impact |

Stability

I Pointer indirection saved us in many cases

I We caught a lot of errors that were not noticed before

I Single point of access for type checking makes it impossible to forget

Page 64: Eo fosdem 15

Impact |

Stability

I Pointer indirection saved us in many cases

I We caught a lot of errors that were not noticed before

I Single point of access for type checking makes it impossible to forget

Page 65: Eo fosdem 15

Impact |

Stability

I Pointer indirection saved us in many cases

I We caught a lot of errors that were not noticed before

I Single point of access for type checking makes it impossible to forget

Page 66: Eo fosdem 15

Impact |

Stability

I Pointer indirection saved us in many cases

I We caught a lot of errors that were not noticed before

I Single point of access for type checking makes it impossible to forget

Page 67: Eo fosdem 15

Impact |

Reduced API

Before:

evas_object_image_file_set(obj , "blah.png", "key");

edje_object_file_set(obj , "blah.edj", "group");

evas_object_del(obj);

ecore_timer_del(obj);

ecore_animator_del(obj);

Now:

eo_do(obj , efl_file_set("blah.file", "key"));

eo_del(obj);

Page 68: Eo fosdem 15

Impact |

Reduced API

Before:

evas_object_image_file_set(obj , "blah.png", "key");

edje_object_file_set(obj , "blah.edj", "group");

evas_object_del(obj);

ecore_timer_del(obj);

ecore_animator_del(obj);

Now:

eo_do(obj , efl_file_set("blah.file", "key"));

eo_del(obj);

Page 69: Eo fosdem 15

Impact |

Reduced API

Before:

evas_object_image_file_set(obj , "blah.png", "key");

edje_object_file_set(obj , "blah.edj", "group");

evas_object_del(obj);

ecore_timer_del(obj);

ecore_animator_del(obj);

Now:

eo_do(obj , efl_file_set("blah.file", "key"));

eo_del(obj);

Page 70: Eo fosdem 15

Eolian |

But writing objects in C is tedious!

I The answer: Eolian

I Eolian parses Eo API declarations

I Eolian allows for automated binding generators

I Eolian is meant to be familar for everyone

Page 71: Eo fosdem 15

Eolian |

But writing objects in C is tedious!

I The answer: Eolian

I Eolian parses Eo API declarations

I Eolian allows for automated binding generators

I Eolian is meant to be familar for everyone

Page 72: Eo fosdem 15

Eolian |

But writing objects in C is tedious!

I The answer: Eolian

I Eolian parses Eo API declarations

I Eolian allows for automated binding generators

I Eolian is meant to be familar for everyone

Page 73: Eo fosdem 15

Eolian |

But writing objects in C is tedious!

I The answer: Eolian

I Eolian parses Eo API declarations

I Eolian allows for automated binding generators

I Eolian is meant to be familar for everyone

Page 74: Eo fosdem 15

Eolian |

But writing objects in C is tedious!

I The answer: Eolian

I Eolian parses Eo API declarations

I Eolian allows for automated binding generators

I Eolian is meant to be familar for everyone

Page 75: Eo fosdem 15

Eolian |

A new format?

I Language independent → easy bindings

I Familiar syntax → easy to pick up

I Easy to read and write

I Declarative and descriptive

Page 76: Eo fosdem 15

Eolian |

A new format?

I Language independent → easy bindings

I Familiar syntax → easy to pick up

I Easy to read and write

I Declarative and descriptive

Page 77: Eo fosdem 15

Eolian |

A new format?

I Language independent → easy bindings

I Familiar syntax → easy to pick up

I Easy to read and write

I Declarative and descriptive

Page 78: Eo fosdem 15

Eolian |

A new format?

I Language independent → easy bindings

I Familiar syntax → easy to pick up

I Easy to read and write

I Declarative and descriptive

Page 79: Eo fosdem 15

Eolian |

A new format?

I Language independent → easy bindings

I Familiar syntax → easy to pick up

I Easy to read and write

I Declarative and descriptive

Page 80: Eo fosdem 15

class Namespace.Class (inherits) {

methods { ... }

properties { ... }

events { ... }

implements { ... }

constructors { ... }

}

type Type_Name: Type_Def;

struct Struct_Name { ... }

enum Enum_Name { ... }

Page 81: Eo fosdem 15

methods {

method_name @class @protected {

params {

@in int x;

@out const(char) *y;

}

return: own(char*);

}

}

Page 82: Eo fosdem 15

properties {

property_name {

keys {

list <int > *x;

}

values {

int v;

}

get {}

set {}

}

}

Page 83: Eo fosdem 15

Eolian |

Generators!

I Initial generator: C

I Further generators in core EFL: C++ and Lua

I Third party generators: Python, efforts being put into Rust, OCaml

I Future generators include JavaScript and others

Page 84: Eo fosdem 15

Eolian |

Generators!

I Initial generator: C

I Further generators in core EFL: C++ and Lua

I Third party generators: Python, efforts being put into Rust, OCaml

I Future generators include JavaScript and others

Page 85: Eo fosdem 15

Eolian |

Generators!

I Initial generator: C

I Further generators in core EFL: C++ and Lua

I Third party generators: Python, efforts being put into Rust, OCaml

I Future generators include JavaScript and others

Page 86: Eo fosdem 15

Eolian |

Generators!

I Initial generator: C

I Further generators in core EFL: C++ and Lua

I Third party generators: Python, efforts being put into Rust, OCaml

I Future generators include JavaScript and others

Page 87: Eo fosdem 15

Eolian |

Generators!

I Initial generator: C

I Further generators in core EFL: C++ and Lua

I Third party generators: Python, efforts being put into Rust, OCaml

I Future generators include JavaScript and others

Page 88: Eo fosdem 15

Eolian |

The Eolian library

I C API: simple and easy to use

I Minimum of non-standard data types → easy to bind

I Not only for generators (IDEs. . . )

I Simple database

Page 89: Eo fosdem 15

Eolian |

The Eolian library

I C API: simple and easy to use

I Minimum of non-standard data types → easy to bind

I Not only for generators (IDEs. . . )

I Simple database

Page 90: Eo fosdem 15

Eolian |

The Eolian library

I C API: simple and easy to use

I Minimum of non-standard data types → easy to bind

I Not only for generators (IDEs. . . )

I Simple database

Page 91: Eo fosdem 15

Eolian |

The Eolian library

I C API: simple and easy to use

I Minimum of non-standard data types → easy to bind

I Not only for generators (IDEs. . . )

I Simple database

Page 92: Eo fosdem 15

Eolian |

The Eolian library

I C API: simple and easy to use

I Minimum of non-standard data types → easy to bind

I Not only for generators (IDEs. . . )

I Simple database

Page 93: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 94: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 95: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 96: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 97: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 98: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 99: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 100: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 101: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 102: Eo fosdem 15

Eolian |

However. . .

I Some things still missing

I Documentation?

I Value ownership

I And possibly others

And yet. . .

I Very useful

I Generic

I I’d like to get it adopted by others (non EFL)

Page 103: Eo fosdem 15

Other Projects |

Clouseau

I Application state inspector for the EFLI Was not created following Eo (but greatly improved)I Will get even better with Eolian

Page 104: Eo fosdem 15

Other Projects |

Clouseau

I Application state inspector for the EFL

I Was not created following Eo (but greatly improved)I Will get even better with Eolian

Page 105: Eo fosdem 15

Other Projects |

Clouseau

I Application state inspector for the EFLI Was not created following Eo (but greatly improved)

I Will get even better with Eolian

Page 106: Eo fosdem 15

Other Projects |

Clouseau

I Application state inspector for the EFLI Was not created following Eo (but greatly improved)I Will get even better with Eolian

Page 107: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builderI Reads properties from Eolian

I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of

I Has it’s own format that is processed by language specific code generators

Page 108: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builder

I Reads properties from Eolian

I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of

I Has it’s own format that is processed by language specific code generators

Page 109: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builderI Reads properties from Eolian

I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of

I Has it’s own format that is processed by language specific code generators

Page 110: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builderI Reads properties from Eolian

I Supports whatever version is installed on the system automatically

I Supports widgets that it has no notion ofI Has it’s own format that is processed by language specific code generators

Page 111: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builderI Reads properties from Eolian

I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of

I Has it’s own format that is processed by language specific code generators

Page 112: Eo fosdem 15

Other Projects |

Erigo

I EFL GUI builderI Reads properties from Eolian

I Supports whatever version is installed on the system automaticallyI Supports widgets that it has no notion of

I Has it’s own format that is processed by language specific code generators

Page 114: Eo fosdem 15

Resources Attributions |

I Nothing