Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Raspberry Pi Gaming 4 Kids
Stephen Chin (@steveonjava)
What Runs Java?
What Runs Java?
Java and 3G in a Tiny Package
>

Cinterion EHS5
Really Tiny…

18.8mm

27.6mm
http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
Have Java With Your Dessert
Raspberry Pi

=
Pis are Affordable

$35
Pis are Affordable
A Cake

Bicycle
(but just 1 wheel)

$35

1 Box of Diapers
Chalkboard Electronics Touchscreen
 10" or 7" Form Factor
 Connects via HDMI/USB
 Tested with JavaFX 8

 10% Exclusive...
How to Setup Your Pi
>

Step 1: Install Linux

>

Step 2: Download/Copy Java 8 for ARM EA

>

Step 3: Deploy and Run JVM L...
What Comes in Your Lab Kit
Touch Screen
SD Card
Keyboard
Yellow Box:

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

Power Adapter
LVDS Cable/Boar...
Electronic Safety!
>

Unplug from wall before wiring

>

Get rid of static by touching a metal
surface

>

Don't touch exp...
Hooking Up the Pi (Part A)
Important: Connect everything before plugging into the wall

Insert the SD Card in to the Pi

1...
Hooking Up the Pi (Part B)
Slide the LCD cable into the back of the display

4.



Side with gold connectors goes up
Be ...
Is it Working?
>

Should get a bunch of flashing LEDs to indicate booting


>

The LCD screen should light up


>

Boot ...
Logging In
At the login prompt type your username:
> pi
And enter the password:
> raspberry
Running Your First Application
Change directory to the project folder
> cd MaryHadALittleLambda
Run the build script
> ant
19
Hacking the Code
Run the nano text editor:
> nano src/sample/MapObject.java
Save your changes:
> Control-O Enter
Exit Nano...
Mary Had a Little Lambda

Mary had a little lambda
Whose fleece was white as snow
And everywhere that Mary went
Lambda was...
Generating Streams
From a collection:
> anyCollection.stream();
Known set of objects:
> Stream.of("bananas", "oranges", "a...
Let's Create Some Barn Animals!
SpriteView tail = s.getAnimals().isEmpty() ?
s : s.getAnimals().get(s.getAnimals().size() ...
24
Filtering Streams
Predicate Expression
> public interface Predicate<T> {
>
public boolean test(T t);
> }
Filter out minors...
Rainbow-colored Lambs!
s.getAnimals().stream()
.filter(a -> a.getNumber() % 4 == 2)
.forEach(a -> a.setColor(Color.YELLOW)...
27
Filtering Collections
Collection.removeIf
> Removes all elements that match the predicate
List.replaceAll
> In-place filte...
Picky Eaters…
Predicate<SpriteView> pure =
a -> a.getColor() == null;
mealsServed.set(mealsServed.get() +
s.getAnimals().f...
30
Mapping Streams
Applies a Map Function to each element:
> Function<? super T, ? extends R>
Result: List is the same size, ...
Single Map
s.getAnimals().setAll(s.getAnimals()
.stream()
.map(sv -> new Eggs(sv.getFollowing())
.collect(Collectors.toLis...
Or a Double Map!
s.getAnimals().setAll(s.getAnimals()
.stream()
.map(SpriteView::getFollowing)
.map(Eggs::new)
.collect(Co...
34
Flat Map
Applies a One-to-Many Map Function to each element:
> Function<? super T, ? extends Stream<? extends R>>
And then...
Hatching Eggs
s.getAnimals().setAll(s.getAnimals()
.stream()
.flatMap(SpriteView.Eggs::hatch)
.collect(Collectors.toList()...
37
Reduce
Reduces a list to a single element given:
> Identity: T
> Accumulator: BinaryOperator<T>
Result: List of the same t...
And the (formerly little) Fox ate them all!
Double mealSize = shepherd.getAnimals()
.stream()
.map(SpriteView::getScaleX)
...
40
Mary Had a Little Lambda Project
>
>

Open-source project to demonstrate lambda features
Visual representation of streams,...
NightHacking Tour

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

Real Geeks
Live Hacking
nighthacking.com
Safe Harbor Statement
The preceding is intended to outline our general product
direction. It is intended for information p...
Upcoming SlideShare
Loading in …5
×

Raspberry Pi Gaming 4 Kids (Devoxx4Kids)

35,191 views

Published on

Presentation for teaching kids programming using the Raspberry Pi and Java.

Published in: Technology
  • Be the first to comment

Raspberry Pi Gaming 4 Kids (Devoxx4Kids)

  1. 1. Raspberry Pi Gaming 4 Kids Stephen Chin (@steveonjava)
  2. 2. What Runs Java?
  3. 3. What Runs Java?
  4. 4. Java and 3G in a Tiny Package > Cinterion EHS5
  5. 5. Really Tiny… 18.8mm 27.6mm
  6. 6. http://upload.wikimedia.org/wikipedia/commons/3/3d/Cloud_forest_Ecuador.jpg
  7. 7. Have Java With Your Dessert Raspberry Pi =
  8. 8. Pis are Affordable $35
  9. 9. Pis are Affordable A Cake Bicycle (but just 1 wheel) $35 1 Box of Diapers
  10. 10. Chalkboard Electronics Touchscreen  10" or 7" Form Factor  Connects via HDMI/USB  Tested with JavaFX 8  10% Exclusive Discount: G1F0U796Z083
  11. 11. How to Setup Your Pi > Step 1: Install Linux > Step 2: Download/Copy Java 8 for ARM EA > Step 3: Deploy and Run JVM Language Apps http://steveonjava.com/ javafx-on-raspberry-pi-3-easy-steps/
  12. 12. What Comes in Your Lab Kit Touch Screen SD Card Keyboard Yellow Box: 1. 2. 3. 4.      Power Adapter LVDS Cable/Board Raspberry Pi Model B Mini-USB Cable (power) Micro-USB Cable (keyboard) Please Save All the Packaging for Later
  13. 13. Electronic Safety! > Unplug from wall before wiring > Get rid of static by touching a metal surface > Don't touch exposed wires/metal > Never remove/insert SD Card while power is on 13
  14. 14. Hooking Up the Pi (Part A) Important: Connect everything before plugging into the wall Insert the SD Card in to the Pi 1.  Will appear upside down when looking at the top of your Pi Insert the HDMI board into the Pi's HDMI jack Connect the Pi power to the HDMI board 2. 3.  Use the Micro USB Cable (short one) 14
  15. 15. Hooking Up the Pi (Part B) Slide the LCD cable into the back of the display 4.   Side with gold connectors goes up Be careful, the connector is fragile! Connect the USB end to one of the Pi's USB host ports 5.  This provides touch input Hook up the USB keyboard 6. 1. Use the Mini USB cable (long one) Verify connections and plug into power now 15
  16. 16. Is it Working? > Should get a bunch of flashing LEDs to indicate booting  > The LCD screen should light up  > Boot takes approx 30 seconds Might be dim if the light sensor is obstructed And you will should see a Linux boot screen with lots of text Hacking Time!
  17. 17. Logging In At the login prompt type your username: > pi And enter the password: > raspberry
  18. 18. Running Your First Application Change directory to the project folder > cd MaryHadALittleLambda Run the build script > ant
  19. 19. 19
  20. 20. Hacking the Code Run the nano text editor: > nano src/sample/MapObject.java Save your changes: > Control-O Enter Exit Nano: > Control-X Compile/Run: > ant
  21. 21. Mary Had a Little Lambda 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
  22. 22. Generating Streams From a collection: > anyCollection.stream(); Known set of objects: > Stream.of("bananas", "oranges", "apples"); Numeric range: > IntStream.range(0, 50) Iteratively: > Stream.iterate(Color.RED, > c -> Color.hsb(c.getHue() + .1, c.getSaturation(), > c.getBrightness())); 22
  23. 23. Let's Create Some Barn Animals! SpriteView tail = 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); 23
  24. 24. 24
  25. 25. Filtering Streams Predicate Expression > public interface Predicate<T> { > public boolean test(T t); > } Filter out minors > adults = attendees.filter(a -> a.getAge() >= 1.8) 25
  26. 26. Rainbow-colored Lambs! 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
  27. 27. 27
  28. 28. Filtering Collections Collection.removeIf > Removes all elements that match the predicate List.replaceAll > In-place filtering and replacement using an unary operator ObservableCollection.filtered > Returns a list filtered by a predicate this is also Observable 28
  29. 29. Picky Eaters… Predicate<SpriteView> pure = a -> a.getColor() == null; mealsServed.set(mealsServed.get() + s.getAnimals().filtered(pure).size() ); s.getAnimals().removeIf(pure); 29
  30. 30. 30
  31. 31. Mapping Streams Applies a Map Function to each element: > Function<? super T, ? extends R> Result: List is the same size, but may be a different type. 31
  32. 32. Single Map s.getAnimals().setAll(s.getAnimals() .stream() .map(sv -> new Eggs(sv.getFollowing()) .collect(Collectors.toList()) ); 32
  33. 33. Or a Double Map! s.getAnimals().setAll(s.getAnimals() .stream() .map(SpriteView::getFollowing) .map(Eggs::new) .collect(Collectors.toList()) ); 33
  34. 34. 34
  35. 35. Flat Map Applies a One-to-Many Map Function to each element: > Function<? super T, ? extends Stream<? extends R>> And then flattens the result into a single stream. Result: The list may get longer and the type may be different. 35
  36. 36. Hatching Eggs s.getAnimals().setAll(s.getAnimals() .stream() .flatMap(SpriteView.Eggs::hatch) .collect(Collectors.toList()) ); 36
  37. 37. 37
  38. 38. Reduce Reduces a list to a single element given: > Identity: T > Accumulator: BinaryOperator<T> Result: List of the same type, but only 1 element left. 38
  39. 39. And the (formerly little) Fox ate them all! 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
  40. 40. 40
  41. 41. Mary Had a Little Lambda Project > > Open-source project to demonstrate lambda features Visual representation of streams, filters, and maps https://github.com/steveonjava/MaryHadALittleLambda 41
  42. 42. NightHacking Tour Stephen Chin (@steveonjava) http://steveonjava.com/ Real Geeks Live Hacking nighthacking.com
  43. 43. 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.

×