JCrete4Kids 2016 Raspberry Pi workshop - greek

44
Εργαστήριο JCrete Raspberry Pi Gaming Stephen Chin Lead Java Community Manager JavaOne Community Chair @steveonjava

Transcript of JCrete4Kids 2016 Raspberry Pi workshop - greek

Εργαστήριο JCrete Raspberry Pi Gaming Stephen Chin Lead Java Community Manager JavaOne Community Chair

@steveonjava

Που χρησιµοποιείται η Java?

Που χρησιµοποιείται η Java?

Java και 3G σε ένα πολύ µικρό πακέτο

>  Cinterion EHS5

Πραγµατικά πολύ µικρό…

27.6mm

18.8

mm

http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg

= Java µε το γλυκό σας Raspberry Pi

Τα Pi είναι προσιτά

$35

Τα Pi είναι προσιτά

$35 1 κουτί πάµπερς

Ένα ποδήλατο (µε µόνο 1 ρόδα)

Μια τούρτα

Οθόνη αφής Chalkboard Electronics

§  10" ή 7” §  Συνδέεται µέσω HDMI/USB

§  Ελέγχθηκε µε JavaFX 8

§  10% κωδικός έκπτωσης:

G1F0U796Z083

Πώς να στήσετε το Pi σας

>  Βήµα 1: Εγκαταστήστε το Linux

>  Βήµα 2: Κατεβάστε τη Java 8 για ARM

>  Βήµα 3: Εγκαταστήστε και τρέξτε την >  εφαρµογή σας στην εικονική µηχανή >  Java (JVM)

http://steveonjava.com/ javafx-on-raspberry-pi-3-easy-steps/

Ηλεκτρονική Ασφάλεια

>  Βγάλτε το Pi από την µπρίζα

>  Ξεφορτωθείτε το στατικό ηλεκτρισµό αγγίζοντας µια µεταλλική επιφάνεια

>  Μην αγγίζετε καλώδια/µεταλλικές επιφάνειες του Pi

>  Ποτέ µην αφαιρείτε/εισάγετε µια κάρτα SD όσο το έχετε στο ρεύµα

12

Τι περιέχει το κιτ του εργαστηρίου

1.  Οθόνη αφής 2.  Κάρτα SD 3.  Πληκτρολόγιο 4.  Κίτρινο κουτί:

l  Τροφοδοτικό l  Καλώδιο/Πλακέτα LVDS l  Raspberry Pi Mοντέλο B l  Καλώδιο Mini-USB (ρεύµα) l  Καλώδιο Micro-USB (πληκτρολόγιο)

Παρακαλείστε να µην τα χάσετε

Συναρµολογήστε το Pi (Μέρος A)

1.  Εισάγετε την κάρτα SD στο Pi l  Θα πρέπει να φαίνεται το κάτω µέρος της όταν

κοιτάτε το Pi από πάνω 2.  Εισάγετε την πλακέτα HDMI στην υποδοχή

HDMI 3.  Συνδέστε το καλώδιο ρεύµατος του Pi στην πλακέτα HDMI

l  Χρησιµοποιείστε το κοντό καλώδιο Micro USB

14

Σηµαντικό: Συνδέστε τα όλα προτού το βάλετε στη µπρίζα

Συναρµολογήστε το Pi (Μέρος Β)

4.  Συνδέστε το καλώδιο LCD στο πίσω µέρος της οθόνης l  Η µεριά µε τους χρυσούς συνδετήρες πάει πάνω l  Προσοχή, ο συνδετήρας είναι εύθραυστος!

5.  Συνδέστε το πληκτρολόγιο USB 6.  Συνδέστε το καλώδιο USB σε µια από τις θύρες USB του Pi

l  Παρέχει την αφή

15

Ελέγξτε όλες τις συνδέσεις και συνδέστε το στο ρεύµα

Δουλεύει;

>  Θα πρέπει να δείτε τα φωτάκια LED να αναβοσβήνουν που σηµαίνει ότι το Pi ξεκινάει l  Η διαδικασία παίρνει περίπου 30 δευτερόλεπτα

>  Η οθόνη LCD θα πρέπει να ανάψει l  Μπορεί να φαίνεται θολή αν παρεµποδίζεται ο αισθητήρας φωτός

>  Και θα πρέπει να δείτε την οθόνη εκκίνησης του Linux µε πολύ κείµενο

Συνδεθείτε

Στην προτροπή σύνδεσης (login prompt) εισάγετε το όνοµα χρήστη: >  pi Και τον κωδικό: >  raspberry

Τρέξτε την εφαρµογή JavaFX

Πηγαίντε στον παρακάτω φάκελο: >  cd MaryHadALittleLambda Τρέξτε την εντολή: >  ant

19

Η Μαρία είχε ένα µικρό λ

Η Μαρία είχε ένα µικρό λ Του οποίου το δέρµα ήταν άσπρο σα το χιόνι Και όπου και να πήγαινε η Μαρία Πήγαινε και το λ!

https://github.com/steveonjava/MaryHadALittleLambda

Δηµιουργώντας Ροές

Από µια συλλογή: >  anyCollection.stream();Από ένα σύνολο αντικειµένων: >  Stream.of("bananas","oranges","apples"); Από µια περιοχή αριθµών: >  IntStream.range(0,50) Επαναληπτικά: >  Stream.iterate(Color.RED,>  c->Color.hsb(c.getHue()+.1,c.getSaturation(),>  c.getBrightness()));

21

Ας δηµιουργήσουµε µερικά ζώα!

SpriteViewtail=s.getAnimals().isEmpty()?s:s.getAnimals().get(s.getAnimals().size()-1);Stream.iterate(tail,SpriteView.Lamb::new).skip(1).limit(7).forEach(s.getAnimals()::add);

22

23

Φιλτράροντας Ροές

Έκφραση Ελέγχου >  publicinterfacePredicate<T>{>  publicbooleantest(Tt);>  }

Ας φιλτράρουµε τα µικρά παιδιά >  adults=attendees.filter(a->a.getAge()>=1.8)

24

Προβατάκια µε χρώµατα ουράνιου τόξου!

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));

25

26

Φιλτράροντας Συλλογές Αντικειµένων

Collection.removeIf >  Αφαιρεί όλα τα αντικείµενα που ικανοποιούν το κριτήριο List.replaceAll >  Αντικαθιστά τα αντικείµενα που ικανοποιούν το κριτήριο

ObservableCollection.filtered >  Επιστρέφει µια φιλτραρισµένη λίστα βάσει ενός κριτηρίου

27

Φαγητό…

Predicate<SpriteView>pure=a->a.getColor()==null;mealsServed.set(mealsServed.get()+s.getAnimals().filtered(pure).size());s.getAnimals().removeIf(pure);

28

29

Αντιστοίχηση Ροών

Εφαρµόζει µια συνάρτηση αντιστοίχισης σε κάθε στοιχείο: >  Function<?superT,?extendsR>

Αποτέλεσµα: Η λίστα έχει το ίδιο µέγεθος αλλά τα στοιχεία της µπορεί να είναι διαφορετικά.

30

Απλή Αντιστοίχηση

s.getAnimals().setAll(s.getAnimals().stream().map(sv->newEggs(sv.getFollowing()).collect(Collectors.toList()));

31

Ή διπλή αντιστοίχιση!

s.getAnimals().setAll(s.getAnimals().stream().map(SpriteView::getFollowing).map(Eggs::new).collect(Collectors.toList()));

32

33

Επίπεδη Αντιστοίχιση (Flat Map)

Εφαρµόζει µια συνάρτηση αντιστοίχισης Ένα-προς-Πολλά (One-to-Many) σε κάθε στοιχείο: >  Function<? super T, ? extends Stream<? extends R>> Και στη συνέχεια µετατρέπει τις πολλαπλές ροές σε µία µόνο. Αποτέλεσµα: Η λίστα µπορεί να µεγαλώσει και τα στοιχεία της µπορεί να είναι διαφορετικά.

34

Επωάζοντας αυγά

s.getAnimals().setAll(s.getAnimals().stream().flatMap(SpriteView.Eggs::hatch).collect(Collectors.toList()));

35

36

Μείωση (Reduce)

Μειώνει µια λίστα σε ένα µόνο στοιχείο δοθέντος: >  της αρχικής τιµής: T >  του συσσωρευτή: BinaryOperator<T>

Αποτέλεσµα: Λίστα του ίδιου τύπου, αλλά µε ένα µόνο στοιχείο.

37

Και η (προηγουµένως µικρή) αλεπού τους έφαγε όλους! DoublemealSize=shepherd.getAnimals().stream().map(SpriteView::getScaleX).reduce(0.0,Double::sum);setScaleX(getScaleX()+mealSize*.2);setScaleY(getScaleY()+mealSize*.2);shepherd.getAnimals().clear();

38

39

Η Μαρία είχε ένα µικρό έργο λ

>  Έργο Ανοικτού Κώδικα για να δείξει τα χαρακτηριστικά του συναρτησιακού λ-προγραµµατισµού

>  Εικονική αναπαράσταση ροών (streams), φίλτρων (filters) και αντιστοιχίσεων (maps)

40

https://github.com/steveonjava/MaryHadALittleLambda

Τι άλλο µπορείτε να κάνετε…

>  Αλλαγές στο MaryHadALittleLambda: l  Αλλάξτε τον αριθµό των προβάτων l  Δηµιουργήστε το ουράνιο τόξο µε διαφορετικά χρώµατα l  Αλλάξτε το µέγεθος της αλεπούς να είναι πιο παχιά/αδύνατη l  Προσθέστε νέα γραφικά (νέα αρχεία εικόνων στο φάκελο images/extra)

41

camel.png lion.png greendragon.png cow.png brownbear.png

Αλλάζοντας τον κώδικα

Τρέξτε τον επεξεργαστή κειµένου nano: >  nano src/sample/MapObject.java Αποθηκεύστε τις αλλαγές σας: >  Control-O Enter Κλείστε τον nano: >  Control-X Μεταγγλωτίστε/Εκτελέστε: >  ant

Stephen Chin tweet: @steveonjava blog: http://steveonjava.com

nighthacking.com

Real Geeks Live Hacking

NightHacking Tour

‘Ωρα για Hacking!

Δήλωση Ασφαλούς Λιµανιού

Η παρουσίαση αυτή έχει σκοπό να περιγράψει τη γενική κατεύθυνση των προϊόντων µας. Προορίζεται µόνο για ενηµερωτικούς σκοπούς και δεν µπορεί να ενσωµατωθεί σε οποιαδήποτε σύµβαση. Δεν υπάρχει δέσµευση παράδοσης οποιουδήποτε υλικού, κώδικα ή λειτουργικότητας και δεν θα πρέπει να γίνεται επίκληση για τη λήψη αποφάσεων αγοράς. Η ανάπτυξη, έκδοση, και χρονοδιάγραµµα των οποιονδήποτε χαρακτηριστικών ή λειτουργιών που περιγράφονται για τα προϊόντα της Oracle παραµένει στη διακριτική ευχέρεια της Oracle.