how students can contribute to free software: centrale nantes/openoffice.org education project...
DESCRIPTION
Talk of Eric Bachard (lead of the OpenOffice.org Education Project) and Morgan Magnin (Associate Professor, École Centrale de Nantes) at the Libre Software Meeting 2009 (http://2009.rmll.info/) During academical year 2008-09, a group of students from Centrale Nantes worked on the integration of annotation features in the slideshow module of OpenOffice.org. Two of them (Olivier Girardot and Frédéric Gélot) have become official OOo developers and interact with the other members of OOo team (like Thorsten Behrens). This talk summarizes the fruitful collaboration between Centrale Nantes and OOo Education project and gives guidelines for the contribution of students to free software developments. More information on https://pedagogie.ec-nantes.fr/tablet-pc/ and http://blog.educoo.org/dotclear/TRANSCRIPT
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
How students can contribute to free
softwareOpenOffice.org success story
Eric Bachard (OOo) | Morgan Magnin (Centrale Nantes)
[email protected] | [email protected] http://education.openoffice.org | http://tinyurl.com/magnin-ecn
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes: key figures
● Member of the Group of Ecoles Centrales
● Combines three activities: – Education – 1350 students
● Graduate general engineering program (3 years, highly-selective admission procedure)
● Other specialized master program including two Erasmus Mundus Master programs
– Research: 4 laboratories
– Industrial Studies
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Why free software in education?
Free software is not only a technical alternative to proprietary solutions, it promotes values such
that:
Freedom
Cooperation
Security
Durability
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes and free software
● Research development: – OrbisGIS: http://tinyurl.com/orbisgis– Roméo: http://romeo.rts-software.org
– Trampoline: http://trampoline.rts-software.org/
● Educational use:– Linux : https://pedagogie.ec-nantes.fr/spip/
– OpenOffice.org
– FireFox, Gimp, …
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes, free software and Tablet PC
● Recipient of the HP Technology for Teaching Grant 2008
– 21 Tablet PCs
– Innovative projects about education and tactile technologies
● A students' project to evaluate the usability of Tablet PC features under Linux... that led to OpenOffice.org
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes and OpenOffice.org
● Annotation features in OOo/Impress: – Regular users demand about it for 3-4 years– Open tickets
● Students have worked on this issue: – From October'08 to now;
– Under the supervision of Thorsten Behrens and Eric Bachard
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes and OOo: key figures
● Two different projects involving: – 7 students from September '08 to December '08– 4 students from January '09 to April '09
– 1 supervising teacher – Active collaboration of OOo team
● Other figures: – Students: avg 65 work-hours by student by
project
– Teacher: avg 3 supervising-hours by student by project
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Centrale Nantes and OOo: factors for success
● Education environment willing to contribute to free software
● Motivation of both students and OOo teams● Win-win relation for every actor:
– Education: real-life projects with added value
– Students: contribute to a famous software
– OOo: perspective of contribution to new features
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
… OpenOffice.org Education Project is
an incubator andINTERNATIONALproject type
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
The Role of the « Incubators » projects is to ...
● Experiment● Validate a new need● Innovate and make the OpenOffice.org Project
progress
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
The goals of the OpenOffice.org Education Project ?
This is a young project,Belonging to OpenOffice.orgwith the main goal tocreate a bridgebetween Educational World and OpenOffice.org
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
' Who ' is the Education Project ?
Approximatively 100 members,Students, developers (mostly)From all countriesAll participate to OpenOffice.org
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
The 3 main objectives of Education Project :
● Create a network of teachers using OpenOffice.org
● Provide a space for exchanging pedagogical contents, under free file formats
● Teach, provide young (core-)developers to write code for OpenOffice.org
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
3rd Objective : provide new developers
Idea :
Associate : theory (the teachers)The know how (professional developers)The actors (students, profs, and so on)Mentors (OpenOffice.org Project developers)The needs (features for OpenOffice.org)
… and finally provide developers
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Already started actions
● Online Courses « ClassRooms »● Projects with engineers schools students, and shools contributions
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Education Project Effort● Mentored projects with active participation of the schools
http://wiki.services.openoffice.org/wiki/Education_Project/Effort
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Schools who joined the project
Epitech/Epita (Paris, France)École Centrale Nantes (Nantes, France)UTBM (Sévenans, France) Seneca College (Toronto Canada)
…
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
ExamplesMozilla 1.7.5 → Seamonkey 1.1.14 migration (Pierre Pasteau / Epitech Paris ) QA in progress, will be integrated
Developers who contributed : Frank Schönheit (Sun MicroSystems), Eric Bachard (unaffiliated)
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
ExamplesAude Quintana, Olivier Girardot (École Centrale Nantes): implementation of the eraser features, with Tablet PC and Impress. Code review in progress.
Developers who contributed : Thorsten Behrens (Novell)
Managed by Morgan Magnin, for Ecole Centrale Nantes
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
ExamplesFrédéric Gelot, Pierre-Jean Parot (École Centrale Nantes): annotations implementation with Tablet PC and Impress
Developers who contributed : Thorsten Behrens (Novell)
Managed by Morgan Magnin, for ECN
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Other example : Seneca College, TorontoProfessor : Fardad Soleimanloo(4 projects started, expected for Summer 09)
All other proposed subjects :
http://wiki.services.openoffice.org/wiki/Education_Project/Effort
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Scheduled Project (july to december 2009 ): Thomas Fontenay, Abdelkader Bellabes ( Epitech Paris ) : performance improvement of OOo4Kids on powerless machines (include backport to OpenOffice.org for the most interesting solutions), profiling, User Interface Improvement
Developers : Pierre Pasteau, Eric Bachard
Managed by Julien Ballet for Epitech Paris
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
...
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Guidelines for further projects: benefits of communication
● All documentation must be in english● Frequent communication
– Inside the education community
– Inside the free software community
● Use a maximum of media: – News on official websites
– Blog, Twitter, …
– Video
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Guidelines for further projects
● Development team opened to students' contribution
● Supervising teacher to guarantee the project respects the educational expectations
● Team of students from 2 to... ?
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Guidelines for further projects
● Find students – Interested in a first professional development
experience
– Having a good knowledge in technical matters
– Potentially willing to contribute beyond the given project
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Timeline● Detailed specifications according to the
software standards– Features
– Test cases
● Learn the basics about the implementation– IRC courses
– Documentation
● Implementation on a Child WorkSpace w.r.t. software development rules
● Tests
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Guidelines for further projects
● Be “transparent” yourself : – Do not lie about the difficulties! – Do not base your evaluation only on final
results.
– Take into account the methods and autonomy of students.
● Frequent (on-line or IRL) meetings between students and supervisors to keep up the motivation
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Perspectives
● New collaborations between free software development teams and educational institution
● Towards teaching how to contribute to free software developments?
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Special thanks to...● Thorsten Behrens● Group of students:
– Olivier Girardot
– Frédéric Gélot
– Aude Quintana
– Pierre-Jean Parot
– Guillaume Arfaoui
– Florent Rouvière
– Sashi Juganaikloo
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
References
● EducOO : http://www.educoo.org
● Blog on the various projects involving Tablets PC at École Centrale de Nantes: https://pedagogie.ec-nantes.fr/tablet-pc/
● “Effort page”: http://tinyurl.com/effort-ooo-ecn
s t at i c voi d s ync_i cache_030( addr _t addr es s , s i z e_t l en) { i nt l , of f ; char *p; ui nt 32 cacr ; of f =( uns i gned i nt ) addr es s &( CACHELI NE- 1) ; l en+=of f ; l =l en; p=( char * ) addr es s - of f ; as m vol at i l e ( " nop" ) ; as m vol at i l e ( " mov ec %%cacr , %0" : " =r " ( cac r ) : ) ; c acr | =0x00000004; / ** / do{ as m vol at i l e( " movec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ naddq. l #4, %0\ nmov ec %0, %%caar \ nmov ec %1, %%cacr \ naddq. l #4, %0\ nmovec %0, %%caar \ nmovec %1, %%cacr \ n" : : " r " ( p) , " r " ( cacr ) ) ; p+= CACHELI NE; } whi l e ( ( l - =CACHELI NE) >0) ; as m vol at i l e( " nop" ) ; } s t at i c voi d s et _pgdi r ( v oi d*r t ){ l ong_page_di r ect or y_ent r y ent r y; * ( ui nt 64* ) &ent r y=DFL_PAGEENT_VAL; ent r y . t ype=DT_ROOT; ent r y . addr =TA_TO_PREA( ( ( addr _t ) r t ) ) ; as m v ol at i l e( " pmove ( %0) , %%s r p\ npmove ( %0) , %%cr p\ n" : : " a" ( ( ui nt 64* ) &ent r y ) ) ; } s t r uct m68k_vm_ops m68030_vm_ops ={ _m68k_t r ans l at i on_map_get _pgdi r , m68k_vm_t r ans l at i on_map_i ni t _map, m68k_vm_t r ans l at i on_map_i ni t _ker nel _map_pos t _s em, m68k_vm_t r ans l at i on_map_i ni t , m68k_vm_t r ans l at i on_map_i ni t _pos t _ar ea, m68k_vm_t rans l at i on_map_i ni t _pos t _s em, m68k_vm_t r ans l at i on_map_ear l y_map
Auteurs : Morgan Magnin ([email protected])
Eric Bachard ([email protected]), www.educoo.org 2009
Document sous licence libre http://creativecommons.org/licenses/by-sa/3.0/deed.fr