Programowanie jest dla dzieci! Programowanie jest dla młodzieży! Programowanie jest dla dorosłych! Programować można w każdym wieku. Im wcześniej zaczyna się naukę programowania tym lepiej. Ponieważ programowanie uczy logicznego myślenia. A gdzie najlepiej uczyć się programowania? To przecież oczywiste, że na naszych gliwickich zajęciach CoderDojo. Uczymy dzieci i młodzież myślenia jak programiści. Technologie się zmieniają, umiejętność myślenia pozostanie. 🤔

Poprzednie CoderDojo

Krótkie podsumowanie poprzednich zajęć CoderDojo, czyli programowanie dla małych i dużych:

  • programowanie w Pythonie i machine learning
  • modelowanie obiektów 3D w Blenderze
  • tworzenie generatora plansz Sudoku w Ruby
  • nauka programowania ze Scotty Go
  • zabawa grafiką w Adobe Photoshop
  • hackowanie sterownika Fanuc 0i-MD 😜

Po więcej szczegółów dot. tematów poprzednich zajęć CoderDojo sięgnijcie do posta CoderDojo Gliwice - 2019-04.

Dodatkowo przeprowadziliśmy anonimową ankietę. Chcieliśmy się dowiedzieć:

  • jak do nas trafiliście?
  • jak długo uczestniczycie w CoderDojo?
  • jak oceniacie nasze zajęcia i które się najbardziej podobają?
  • skąd dowiadujecie się o kolejnych spotkaniach i czy czytacie tego bloga?
  • jak często chcielibyście zajęcia z programowania?
  • co chcielibyście, abyśmy poprawili?

Byliśmy pozytywnie zaskoczeni Waszymi odpowiedziami. Okazuje się, że wszystkim podobają się zajęcia CoderDojo, niezależnie jak długo na nie uczęszcza. 📈 Ponadto część z Was chciałaby aby trwały one dłużej i odbywały się częściej, nawet wieczorami w tygodniu.

Wiemy również, że nie wszyscy czytają naszego bloga. Zachęcamy jednak abyście zapoznawali się z artykułami przed CoderDojo. Pozwoli to Wam lepiej przygotować się na zajęcia. Będziecie mogli wybrać interesujący Was temat i w domu zainstalować potrzebne oprogramowanie. Przy okazji jest to sposób na wyeliminowanie trudności, że Internet wolno działa, bo taki problem też zgłaszaliście w ankietach.

Zdjęcia z CoderDojo Gliwice #6

Zajęcia z programowania dla dzieci - CoderDojo Gliwice z dnia 13-04-2019

Tematy na CoderDojo Gliwice

Jak komputer gra w Sudoku?

Rozwiązana plansza sudoku

Na poprzednich zajęciach udało się zbudować generator plansz do sudoku. Podstawowym założeniem było przerabianie gotowych sudoku poprzez zamianę ze sobą dwóch wierszy lub dwóch kolumn w obrębie kwadratu. Poniżej kilka kawałków kodu w Ruby napisanych przez naszych ninja.

sudoku = [
  [7, 3, 4, 8, 5, 9, 2, 1, 6],
  [8, 1, 9, 6, 7, 2, 4, 3, 5],
  [2, 5, 6, 1, 4, 3, 7, 9, 8],
  [3, 9, 8, 2, 1, 5, 6, 7, 4],
  [6, 4, 5, 7, 9, 8, 1, 2, 3],
  [1, 2, 7, 3, 6, 4, 8, 5, 9],
  [9, 7, 1, 5, 8, 6, 3, 4, 2],
  [5, 8, 2, 4, 3, 7, 9, 6, 1],
  [4, 6, 3, 9, 2, 1, 5, 8, 7]
]

def swap_rows(sudoku, from, to)
  row = sudoku[from]
  sudoku[from] = sudoku[to]
  sudoku[to] = row
  sudoku
end

def swap_columns(sudoku, from, to)
  column = sudoku.map { |row| row[from] }
  sudoku.each { |row| row[from] = row[to] }
  sudoku.each_with_index do |row, index|
    row[to] = column[index]
  end
  sudoku
end

Powstały również metody do losowego usuwania zawartości pól w naszym generatorze sudoku.

def random_position
  [rand(0..8), rand(0..8)]
end

def remove_cell(sudoku, count)
  count.times do
    x, y = random_position
    x, y = random_position while sudoku[x][y].nil?
    sudoku[x][y] = nil
  end
  sudoku
end

Aby mieć pewność, że generowane sudoku wciąż spełnia założenia sudoku, czyli innymi słowy jest rozwiązywalne, postanowiliśmy zaimplementować metody walidujące.

SQUARE_POSITIONS = [
  [0, 0], [0, 3], [0, 6],
  [3, 0], [3, 3], [3, 6],
  [6, 0], [6, 3], [6, 6]
].freeze

def valid_row?(sudoku, row_number)
  row = sudoku[row_number].compact
  row.uniq.size == row.size
end

def valid_column?(sudoku, column_number)
  column = sudoku.map { |row| row[column_number] }.compact
  column.uniq.size == column.size
end

def valid_square?(sudoku, row, column)
  square = sudoku[row..row + 2].flat_map do |item|
    item[column..column + 2]
  end.compact
  square.uniq.size == square.size
end

def valid_sudoku?(sudoku)
  (0..8).all? { |index| valid_row?(sudoku, index) } &&
    (0..8).all? { |index| valid_column?(sudoku, index) } &&
    SQUARE_POSITIONS.all? do |item|
      valid_square?(sudoku, item[0], item[1])
    end
end

Powstała też metoda pomocnicza, służąca do zamiany macierzy liczb, jaką jest sudoku, na postać przyjazną człowiekowi.

def to_string(sudoku)
  sudoku = sudoku.map { |row| row.map { |item| item.nil? ? ' ' : item } }
  rows = sudoku.map { |row|  row[0..2].join + '|' + row[3..5].join + '|' + row [6..8].join + "\n" }
  rows[0..2].join + ( '-' * 11 + "\n") + rows[3..5].join + ( '-' * 11 + "\n") + rows[6..8].join
end

Wszystkie te metody powstały na zajęciach CoderDojo. Ninja nie mieli więc zbyt wiele czasu nad ich dopracowaniem. My, jako zawodowi programiści Ruby wiemy, że można ten kod jeszcze ulepszyć (refaktoring) i otestować. 💻

Postanowiliśmy, że sudoku na dłużej zagości podczas nauki programowania w Ruby. Ninja już doskonale wiedzą jak grać oraz jak generować planszę do sudoku. Napisaliśmy też kod, który generuje planszę sudoku. Jesteśmy więc w połowie drogi, aby maszyna nauczyła się tego co potrafi każdy nastolatek. Przyszła pora nauczyć komputer grać w sudoku. 🎲

Bez obawy, nie pozostaniecie z tym tematem sami. Zaopiekują się Wami programistka rubiego - Agnieszka oraz developer Ruby - Alek. Już nie możemy się doczekać, bo temat jest wciągający. Mamy też małą niespodziankę. Chcemy przygotować osobny artykuł o sudoku. Opiszemy dokładnie jak my byśmy zaimplementowali generator sudoku oraz rozwiązywacz sudoku. Będzie to mały wstęp do dodatkowych zajęć z programowania w Ruby.

Wymagania:

  • Pasja do zagadek matematycznych np. sudoku. 🧮
  • Wykop z głębokich czeluści kryształ o krwistoczerwonej barwie. Niech Ruby zdobi Twój komputer. 💎

Animacja postaci w Blenderze

Modelowanie postaci

Kto powiedział, że to Grzegorz jako game developer musi prowadzić zajęcia w grupe z tworzenia gier? 🎮 Zaskoczymy Was! Przed Wami zajęcia CoderDojo, gdzie jeden z ninja zamieni się z Grzegorzem miejscami. Ninja Wojtek przeobrazi się w mentora Wojtka.

Pamiętacie blender z poprzednich zajęć tworzenia gier? Blender jest to oprogramowanie do modelowania, renderowania obrazów oraz tworzenia animacji trójwymiarowych. Blender jest w pełni kompleksowym narzędziem pozwalającym tworzyć zarówno całe krajobrazy jak i modele postaci.

Na ostatnich zajęciach powstały pierwsze modele grafiki 3D. 🎨 Najpierw budowany był model krzesła. Kolejnym modelem 3D była butelka z wodą. Dużą frajdę sprawiało nakładanie na zamodelowane przedmioty tekstur w postaci zdjęć twarzy. 😂

Trójwymiarowy model krzesła Trójwymiarowy model butelki z płynem
Ninja Damian podzielił się z nami swoimi wynikami.

Najbliższe zajęcia CoderDojo w Gliwicach będą poszerzały Wasze umiejętności posługiwania się silnikiem Blender3D. Znacie już podstawy modelowania oraz teksturowania przy pomocy Blendera. Wojtek przeprowadzi Was przez proces tworzenia postaci wraz z riggingiem. Rigging to przygotowanie trójwymiarowego modelu do późniejszego tworzenia animacji.

Proces tworzenia postaci zaczniemy od budowania mesha prostej postaci typu stick figure do której podepniemy rig, czyli zestaw kości wraz z wagami. Poruszając tak połączonymi kośćmi pozwoli to Wam finalnie na poruszanie całą postacią. W efekcie możliwe będzie utworzenie animacji chodzenia zbudowanej postaci. 🚶

Wymagania:

  • Przenieś Blender z kuchni do pokoju… [5 minut później] Teraz odnieś go z powrotem. To był tylko żart. 😉 Tak naprawdę po prostu zainstaluj sobie to świetne narzędzie do modelowania i animowania grafiki 3D.

Enkapsulacja klas Pythona

Jaja węża
Co było pierwsze Python czy jajko?

Jak wiele programowanie i technologia czerpią z natury? Przyjrzyjmy się takiemu wężowi jak pyton. Samice pytonów składają jaja i opiekują się nimi aż do wyklucia. 🥚 To bardzo troskliwe i mądre zachowanie.

Ale co ma do tego technologia? Okazuje się, że z natury można zaczerpnąć pewne koncepcje. Programując w Pythonie można budować klasy. A klasy i obiekty to są elementy programowania obiektowego. Jednym z założeń paradygmatu programowania obiektowego jest enkapsulacja, czyli hermetyzacja. Chodzi o to, aby ukryć i ochronić wewnętrzną implementację klasy, czyli to jak klasa jest zbudowana. Nie do wszystkich pól programista powinien mieć dostęp z zewnątrz. Klasa jest więc jakby jajkiem. A dostęp do tego co w środku jest poprzez publiczny interfejs, czyli metody które można wywoływać. Przy pomocy Pythona programista musi dbać o to co jest w środku klasy. Chodzi o to, aby nic nie naruszyło delikatne zbudowanego ekosystemu. Widzicie analogię do jajek węża, którymi opiekuje się ten gad?

O tym jak prawidłowo budować złożone typy danych tj. klasy oraz jak je enkapsulować opowie nasz mentor Darek. 🧔

Wymagania:

  • Zbuduj gniazdo dla swojego węża. 🐍 Pobierz i zainstaluj Pythona za darmo i w każdym środowisku.

Podobają Wam się nasze programistyczne plany? Mamy nadzieję, że tak. Nie bójcie się wyrażać swoich opinii zarówno poniżej w komentarzach jak i w social mediach. Jeżeli macie własne propozycje tematów to również piszcie. Chcemy aby CoderDojo w Gliwicach było najlepszym dojo w Polsce.

Informacje organizacyjne

Jeśli macie jakieś pytania organizacyjne to przeczytajcie proszę dział FAQ - często zadawane pytania.

Czas zajęć ⏰

18.05.2019 (sobota) od 09:00 do 12:00

Miejsce zajęć 🏢

Gliwickie Centrum Organizacji Pozarządowych
ul. Zwycięstwa 1/1
44-100 Gliwice

Trzeba wejść na II piętro, skręcić w prawo i iść wzdłuż korytarza.

Mapa dojazdu do GCOP (Gliwice, ul. Zwycięstwa 1)


Spodobało Ci się? Napisz nam o tym i czytaj nas regularnie. Możesz również podzielić się tym artykułem z innymi (Facebook, Twitter). Będzie nam niezmiernie miło.

Zostaw komentarz