Raspberry Pi Gaming 4 Kids
Stephen Chin (@steveonjava)

Monday, 28 October 13
Wat draait er op Java?

Monday, 28 October 13
Wat draait er op Java?

Monday, 28 October 13
Java en 3G in een Klein Pakketje
>

Cinterion EHS5

Monday, 28 October 13
Heel Klein....

18.8mm

27.6mm

Monday, 28 October 13
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
Monday, 28 October 13
Neem wat Java bij je toetje
Raspberry Pi

=
Monday, 28 October 13
Pi’s zijn Betaalbaar

€35
Monday, 28 October 13
Pi’s zijn Betaalbaar

Een Luxe Taart

Een Fiets
(alleen het wiel)

€35
Monday, 28 October 13

3/4 Pak Luiers
Chalkboad Electronics Touchscreen
§ 10" or 7" Form Factor
§ Verbind via HDMI/USB
§ Getest met JavaFX 8
§ 10% Exclusieve Korting:

G1F0U796Z083

Monday, 28 October 13
Hoe installeer je jouw Pi
>

Stap 1: Installeer Linux

>

Stap 2: Download/Copieer Java 8 voor ARM EA

>

Stap 3: Deploy and Run JVM Language Apps

http://steveonjava.com/
javafx-on-raspberry-pi-3-easy-steps/
Monday, 28 October 13
Wat zit er in jouw Lab Kit
Touch Screen
SD Card
Toetsenbord
Gele Doos:

1.
2.
3.
4.
l
l
l
l
l

Stroom Adapter
LVDS Kabel/Bord
Raspberry Pi Model B
Mini-USB Kabel (stroom)
Micro-USB Kabel (toetsenbord)
AUB: Bewaar de verpakking voor later!

Monday, 28 October 13
Electriciteit en Veiligheid!
>

Stekker uit de muur voordat je begint

>

Verwijder statische electriciteit door
een metaal oppervlak aan te raken

>

Raak onbeschermde snoeren/metaal
niet aan

>

Nooit de SD Kaart verwijderen of
aansluiten als er stroom op staat
13

Monday, 28 October 13
Aansluiten van de Pi (Deel 1)
Belangrijk: Sluit alles eerst aan voordat je er stroom op zet!

Plaats de SD Kaart in de Pi

1.
l

Lijkt ondersteboven van boven af bekeken

Plaats het HDMI bord in de HDMI plug van

2.

de Pi

Verbind de Pi stroom kabel aan het HDMI

3.

bord
l

Gebruik de Micro USB Kabel (de kortere)

14

Monday, 28 October 13
Aansluiten van de Pi (Deel 2)
Schuif de LCD kabel aan de achterkant van het
scherm

4.

l
l

De kant met gouden aansluiters moet boven
Voorzichtig, de aansluiting is kwetsbaar!

Sluit de USB uitgang aan een van de USB ports
van de Pi

5.

l

Dit is voor de touch input

Sluit het toetsenbord aan

6.
1.

Gebruik de Mini USB kabel (de langere)
Controleer de verbindingen en sluit de stroom aan
15

Monday, 28 October 13
Werkt het nu?
>

Als het goed is zie je een aantal LED lampjes oplichten, dit geeft aan
dat de Pi aan het opstarten is
l

>

Het LCD scherm zou nu moeten aangaan
l

>

Opstarten duurt ongeveer 30 seconden
Als de licht sensor belemmerd is, dan lijkt deze wat schemerig

Als het goed is zie je een Linux opstart scherm met heel veel tekst

Hacking Time!

Monday, 28 October 13
Inloggen
Bij login, type je gebruikersnaam:
> pi
En voer het wachtwoord in:
> raspberry

Monday, 28 October 13
Draai je eerste Programma
Verander de map naar de project map
> cd MaryHadALittleLambda
Run(=uitvoeren van) het script
> ant

Monday, 28 October 13
19

Monday, 28 October 13
Hack de Code
Run(=uitvoeren van) de Nano tekst editor:
> nano src/sample/MapObject.java
Bewaar je aanpassingen:
> Control-O Enter
Verlaat Nano:
> Control-X
Compileer/Run:
> ant

Monday, 28 October 13
Mary Had a Little Lamb(da)
Dit is een Engels Kinderliedje over
een meisje met een Lammetje!
Mary had a little lambda
Whose fleece was white as snow
And everywhere that Mary went
Lambda was sure to go!

https://github.com/steveonjava/MaryHadALittleLambda
Monday, 28 October 13
Het genereren van “Streams”
Van een collection (=verzameling):
> anyCollection.stream();
Bekende reeks van objecten:
> Stream.of("bananen",	
  "peren",	
  "appels");
Numerieke reeks:
> IntStream.range(0,	
  50)
Iteratief:
> Stream.iterate(Color.RED,	
  
> 	
  	
  c	
  -­‐>	
  Color.hsb(c.getHue()	
  +	
  .1,	
  c.getSaturation(),	
  
> 	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  c.getBrightness()));
22

Monday, 28 October 13
Nu gaan we boerderij dieren maken!
SpriteView	
  tail	
  =	
  s.getAnimals().isEmpty()	
  ?
	
  	
  s	
  :	
  s.getAnimals().get(s.getAnimals().size()	
  -­‐	
  1);
Stream.iterate(tail,	
  SpriteView.Lamb::new)
	
  	
  	
  	
  .substream(1,	
  8)
	
  	
  	
  	
  .forEach(s.getAnimals()::add);

23

Monday, 28 October 13
24

Monday, 28 October 13
Het filteren van “Streams”
Predicate Expression (een soort gezegde)
> public	
  interface	
  Predicate<T>	
  {
> 	
  	
  public	
  boolean	
  test(T	
  t);
> }
Filter de kinderen eruit
> volwassenen	
  =	
  deelnemers.filter(a	
  -­‐>	
  a.getLeeftijd()	
  >=	
  
18)

25

Monday, 28 October 13
Lammetjes in de kleuren van de regenboog!
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  2)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.YELLOW));
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  3)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.CYAN));
s.getAnimals().stream()
	
  	
  .filter(a	
  -­‐>	
  a.getNumber()	
  %	
  4	
  ==	
  0)
	
  	
  .forEach(a	
  -­‐>	
  a.setColor(Color.GREEN));
26

Monday, 28 October 13
27

Monday, 28 October 13
Filteren van Collections (=verzamelingen)
Collection.removeIf
> Verwijdert alle elementen die voldoen the ‘if’ expressie
List.replaceAll
> Filteren en vervanging met gebruik van 1 input
ObservableCollection.filtered
> Geeft een lijst terug van het gefilterde

28

Monday, 28 October 13
Moeilijke eters…
Predicate<SpriteView>	
  pure	
  =
	
  	
  a	
  -­‐>	
  a.getColor()	
  ==	
  null;
mealsServed.set(mealsServed.get()	
  +
	
  	
  s.getAnimals().filtered(pure).size()
);
s.getAnimals().removeIf(pure);
29

Monday, 28 October 13
30

Monday, 28 October 13
Mapping Streams
Past een Map Functie toe op elk element:
> Function<?	
  super	
  T,	
  ?	
  extends	
  R>
Resultaat: Lijst is even groot, maar kan van een ander type zijn.

31

Monday, 28 October 13
Single Map (enkele map)
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(sv	
  -­‐>	
  new	
  Eggs(sv.getFollowing())
	
  	
  	
  	
  .collect(Collectors.toList())
);

32

Monday, 28 October 13
Of een Double Map! (dubbele map)
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(SpriteView::getFollowing)
	
  	
  	
  	
  .map(Eggs::new)
	
  	
  	
  	
  .collect(Collectors.toList())
);

33

Monday, 28 October 13
34

Monday, 28 October 13
Flat Map (platte map)
Past een Een-op-Veel Map Functie toe op elk element:
> Function<? super T, ? extends Stream<? extends R>>
En maakt het dan weer plat naar een enkele map (single map).
Resultaat: De lijst kan langer worden en het type kan anders zijn.

35

Monday, 28 October 13
Broedeieren
s.getAnimals().setAll(s.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .flatMap(SpriteView.Eggs::hatch)
	
  	
  	
  	
  .collect(Collectors.toList())
);

36

Monday, 28 October 13
37

Monday, 28 October 13
Reduce (=verminderen)
Vermindert een lijst naar een enkel element:
> Identity: T
> Accumulator: BinaryOperator<T>
Resultaat: Lijst van hetzelfde type, maar slechts 1 element blijft over.

38

Monday, 28 October 13
En de (voorheen) kleine vos at ze allemaal op!
Double	
  mealSize	
  =	
  shepherd.getAnimals()
	
  	
  	
  	
  .stream()
	
  	
  	
  	
  .map(SpriteView::getScaleX)
	
  	
  	
  	
  .reduce(0.0,	
  Double::sum);
setScaleX(getScaleX()	
  +	
  mealSize	
  *	
  .2);
setScaleY(getScaleY()	
  +	
  mealSize	
  *	
  .2);
shepherd.getAnimals().clear();

39

Monday, 28 October 13
40

Monday, 28 October 13
Mary Had a Little Lambda Project
>
>

Open-source project om lambda kenmerken te demonstreren
Visuele representatie van streams, filters en maps
https://github.com/steveonjava/MaryHadALittleLambda

41

Monday, 28 October 13
NightHacking Tour

Stephen Chin (@steveonjava)
http://steveonjava.com/

Real Geeks
Live Hacking
nighthacking.com
Monday, 28 October 13
Safe Harbor Statement
The preceding is intended to outline our general product
direction. It is intended for information purposes only, and may
not be incorporated into any contract. It is not a commitment
to deliver any material, code, or functionality, and should not
be relied upon in making purchasing decisions. The
development, release, and timing of any features or
functionality described for Oracle’s products remains at the
sole discretion of Oracle.

Monday, 28 October 13

Raspberry Pi Gaming 4 Kids - Dutch Version

  • 1.
    Raspberry Pi Gaming4 Kids Stephen Chin (@steveonjava) Monday, 28 October 13
  • 2.
    Wat draait erop Java? Monday, 28 October 13
  • 3.
    Wat draait erop Java? Monday, 28 October 13
  • 4.
    Java en 3Gin een Klein Pakketje > Cinterion EHS5 Monday, 28 October 13
  • 5.
  • 6.
  • 7.
    Neem wat Javabij je toetje Raspberry Pi = Monday, 28 October 13
  • 8.
  • 9.
    Pi’s zijn Betaalbaar EenLuxe Taart Een Fiets (alleen het wiel) €35 Monday, 28 October 13 3/4 Pak Luiers
  • 10.
    Chalkboad Electronics Touchscreen §10" or 7" Form Factor § Verbind via HDMI/USB § Getest met JavaFX 8 § 10% Exclusieve Korting: G1F0U796Z083 Monday, 28 October 13
  • 11.
    Hoe installeer jejouw Pi > Stap 1: Installeer Linux > Stap 2: Download/Copieer Java 8 voor ARM EA > Stap 3: Deploy and Run JVM Language Apps http://steveonjava.com/ javafx-on-raspberry-pi-3-easy-steps/ Monday, 28 October 13
  • 12.
    Wat zit erin jouw Lab Kit Touch Screen SD Card Toetsenbord Gele Doos: 1. 2. 3. 4. l l l l l Stroom Adapter LVDS Kabel/Bord Raspberry Pi Model B Mini-USB Kabel (stroom) Micro-USB Kabel (toetsenbord) AUB: Bewaar de verpakking voor later! Monday, 28 October 13
  • 13.
    Electriciteit en Veiligheid! > Stekkeruit de muur voordat je begint > Verwijder statische electriciteit door een metaal oppervlak aan te raken > Raak onbeschermde snoeren/metaal niet aan > Nooit de SD Kaart verwijderen of aansluiten als er stroom op staat 13 Monday, 28 October 13
  • 14.
    Aansluiten van dePi (Deel 1) Belangrijk: Sluit alles eerst aan voordat je er stroom op zet! Plaats de SD Kaart in de Pi 1. l Lijkt ondersteboven van boven af bekeken Plaats het HDMI bord in de HDMI plug van 2. de Pi Verbind de Pi stroom kabel aan het HDMI 3. bord l Gebruik de Micro USB Kabel (de kortere) 14 Monday, 28 October 13
  • 15.
    Aansluiten van dePi (Deel 2) Schuif de LCD kabel aan de achterkant van het scherm 4. l l De kant met gouden aansluiters moet boven Voorzichtig, de aansluiting is kwetsbaar! Sluit de USB uitgang aan een van de USB ports van de Pi 5. l Dit is voor de touch input Sluit het toetsenbord aan 6. 1. Gebruik de Mini USB kabel (de langere) Controleer de verbindingen en sluit de stroom aan 15 Monday, 28 October 13
  • 16.
    Werkt het nu? > Alshet goed is zie je een aantal LED lampjes oplichten, dit geeft aan dat de Pi aan het opstarten is l > Het LCD scherm zou nu moeten aangaan l > Opstarten duurt ongeveer 30 seconden Als de licht sensor belemmerd is, dan lijkt deze wat schemerig Als het goed is zie je een Linux opstart scherm met heel veel tekst Hacking Time! Monday, 28 October 13
  • 17.
    Inloggen Bij login, typeje gebruikersnaam: > pi En voer het wachtwoord in: > raspberry Monday, 28 October 13
  • 18.
    Draai je eersteProgramma Verander de map naar de project map > cd MaryHadALittleLambda Run(=uitvoeren van) het script > ant Monday, 28 October 13
  • 19.
  • 20.
    Hack de Code Run(=uitvoerenvan) de Nano tekst editor: > nano src/sample/MapObject.java Bewaar je aanpassingen: > Control-O Enter Verlaat Nano: > Control-X Compileer/Run: > ant Monday, 28 October 13
  • 21.
    Mary Had aLittle Lamb(da) Dit is een Engels Kinderliedje over een meisje met een Lammetje! Mary had a little lambda Whose fleece was white as snow And everywhere that Mary went Lambda was sure to go! https://github.com/steveonjava/MaryHadALittleLambda Monday, 28 October 13
  • 22.
    Het genereren van“Streams” Van een collection (=verzameling): > anyCollection.stream(); Bekende reeks van objecten: > Stream.of("bananen",  "peren",  "appels"); Numerieke reeks: > IntStream.range(0,  50) Iteratief: > Stream.iterate(Color.RED,   >    c  -­‐>  Color.hsb(c.getHue()  +  .1,  c.getSaturation(),   >                                                                    c.getBrightness())); 22 Monday, 28 October 13
  • 23.
    Nu gaan weboerderij dieren maken! SpriteView  tail  =  s.getAnimals().isEmpty()  ?    s  :  s.getAnimals().get(s.getAnimals().size()  -­‐  1); Stream.iterate(tail,  SpriteView.Lamb::new)        .substream(1,  8)        .forEach(s.getAnimals()::add); 23 Monday, 28 October 13
  • 24.
  • 25.
    Het filteren van“Streams” Predicate Expression (een soort gezegde) > public  interface  Predicate<T>  { >    public  boolean  test(T  t); > } Filter de kinderen eruit > volwassenen  =  deelnemers.filter(a  -­‐>  a.getLeeftijd()  >=   18) 25 Monday, 28 October 13
  • 26.
    Lammetjes in dekleuren van de regenboog! s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  2)    .forEach(a  -­‐>  a.setColor(Color.YELLOW)); s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  3)    .forEach(a  -­‐>  a.setColor(Color.CYAN)); s.getAnimals().stream()    .filter(a  -­‐>  a.getNumber()  %  4  ==  0)    .forEach(a  -­‐>  a.setColor(Color.GREEN)); 26 Monday, 28 October 13
  • 27.
  • 28.
    Filteren van Collections(=verzamelingen) Collection.removeIf > Verwijdert alle elementen die voldoen the ‘if’ expressie List.replaceAll > Filteren en vervanging met gebruik van 1 input ObservableCollection.filtered > Geeft een lijst terug van het gefilterde 28 Monday, 28 October 13
  • 29.
    Moeilijke eters… Predicate<SpriteView>  pure  =    a  -­‐>  a.getColor()  ==  null; mealsServed.set(mealsServed.get()  +    s.getAnimals().filtered(pure).size() ); s.getAnimals().removeIf(pure); 29 Monday, 28 October 13
  • 30.
  • 31.
    Mapping Streams Past eenMap Functie toe op elk element: > Function<?  super  T,  ?  extends  R> Resultaat: Lijst is even groot, maar kan van een ander type zijn. 31 Monday, 28 October 13
  • 32.
    Single Map (enkelemap) s.getAnimals().setAll(s.getAnimals()        .stream()        .map(sv  -­‐>  new  Eggs(sv.getFollowing())        .collect(Collectors.toList()) ); 32 Monday, 28 October 13
  • 33.
    Of een DoubleMap! (dubbele map) s.getAnimals().setAll(s.getAnimals()        .stream()        .map(SpriteView::getFollowing)        .map(Eggs::new)        .collect(Collectors.toList()) ); 33 Monday, 28 October 13
  • 34.
  • 35.
    Flat Map (plattemap) Past een Een-op-Veel Map Functie toe op elk element: > Function<? super T, ? extends Stream<? extends R>> En maakt het dan weer plat naar een enkele map (single map). Resultaat: De lijst kan langer worden en het type kan anders zijn. 35 Monday, 28 October 13
  • 36.
    Broedeieren s.getAnimals().setAll(s.getAnimals()        .stream()        .flatMap(SpriteView.Eggs::hatch)        .collect(Collectors.toList()) ); 36 Monday, 28 October 13
  • 37.
  • 38.
    Reduce (=verminderen) Vermindert eenlijst naar een enkel element: > Identity: T > Accumulator: BinaryOperator<T> Resultaat: Lijst van hetzelfde type, maar slechts 1 element blijft over. 38 Monday, 28 October 13
  • 39.
    En de (voorheen)kleine vos at ze allemaal op! Double  mealSize  =  shepherd.getAnimals()        .stream()        .map(SpriteView::getScaleX)        .reduce(0.0,  Double::sum); setScaleX(getScaleX()  +  mealSize  *  .2); setScaleY(getScaleY()  +  mealSize  *  .2); shepherd.getAnimals().clear(); 39 Monday, 28 October 13
  • 40.
  • 41.
    Mary Had aLittle Lambda Project > > Open-source project om lambda kenmerken te demonstreren Visuele representatie van streams, filters en maps https://github.com/steveonjava/MaryHadALittleLambda 41 Monday, 28 October 13
  • 42.
    NightHacking Tour Stephen Chin(@steveonjava) http://steveonjava.com/ Real Geeks Live Hacking nighthacking.com Monday, 28 October 13
  • 43.
    Safe Harbor Statement Thepreceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Monday, 28 October 13