ponedeljek, 11. februar 2013

Vprašalnik za naslednji CoderDojo

V letošnjem šolskem letu sta pred nami (samo) še dva CoderDojo dogodka.
Odločili smo se, da vam pustimo proste roke pri izbiri tematike.
Nekaj možnih odgovorov najdete nad poljem za odgovor, vpišete pa lahko seveda kar želite (vse vidimo!)
Vprašalnik najdete na naslednji povezavi: Vprašalnik

Za morebitna vprašanja pa, kot ponavadi:
blaz@coderdojo.si
jernej@coderdojo.si

ponedeljek, 4. februar 2013

Februarski CoderDojo

Pa je še en CoderDojo uspešno za nami!
Tudi tokrat smo se (uspešno) igrali z Lego Mindstorms robotki, ustvarili smo kar nekaj funkcionalnih robotkov, ki so se umikali oviram, nevarnim prepadom ter grabili kar jim je prišlo blizu.






Udeležba je bila tokrat kar pisana, obiskal nas je tudi Iztok Hočevar, nam zastavil nekaj vprašanj ter nas poslikal, za njegov čas in dobro voljo se mu prav posebej zahvaljujemo!

Z robotki smo s tem zaključili, 9. Marca, ko se naslednjič snidemo, pa nas čakajo drugačni izzivi.

 Se vidimo!


nedelja, 13. januar 2013

Navodila za Lego Mindstorms

Kratka navodila za namestitev potrebne programske opreme za upravljanje z Lego Mindstorms.

Potrebujemo:

Python 2.6 (32-bit)
nxt-python
pybluez

Na Python strani zberite ustrezno verzijo, za večino bo najverjetneje prava "Windows x86 MSI Installer (2.6.6)".
Pri namestitvi Pythona bodite pozorni, da ga namestite samo za vašega uporabnika, ne za vse, v nasprotnem primeru bi znali imeti težave z nameščanjem Pybluez (pogleda samo v current user v registru, ne pa tudi local machine)
Za ostale stvari mislim, da ni posebnosti, pojdite le po takem vrstnem redu, kot pise tu, nxt in pybluez pa namestite kamor vam ponudi.

Ko boste vse namestili, prižgite robotka in ga preko vašega bluetooth programa poiščite in dodajte, robotku se bo na ekranu izpisal  4 mestni PIN, ki ga lahko po potrebi tudi spremenite, nato potrdite, PIN pa vnesete se na računalniku.

S tem smo nameščanje zaključili, zdaj pa je čas za programiranje robotka!

Odprite IDLE (oz vas najljubsi IDE), in začnite z naslednjimi ukazi:
import nxt.locator
from nxt.motor import *
from nxt import *

brick = nxt.locator.find_one_brick()
mLeft = Motor(brick, PORT_A ); # popravite ime porta po potrebi
mRight = Motor(brick, PORT_B)  # popravite ime porta po potrebi

bothMotors = SynchronizedMotors(mLeft, mRight, 0)
touch = Touch(brick, PORT_1)
sound = Sound(brick, PORT_2)
light = Light(brick, PORT_3)
sonic = Ultrasonic(brick, PORT_4)
Porti so seveda odvisni od vašega priklopa, tu sem uporabil naključno kombinacijo za lažji začetek.

Premikate se lahko z metodo turn, primer:
bothMotors.turn(80, 360)
S tem se bosta obe kolesi obrnili za 360 stopinj, z močjo 80.
Lahko bi premaknili samo levo ali desno kolo, če bi, recimo, hoteli zavijati.
mRight.turn(80, 360)
Vrednost senzorja za glasnost bi lahko na primer dobili z:
sound.get_loudness()  # vrne glasnost
Vrednost senzorja za dotik pa z:
touch.is_pressed() # vrne True ali False
Vsi senzorji imajo metodo s katero lahko preverimo njihovo stanje, najlažje bo, da se poigrate sami.

Priporočam da po tem ko uvozite modul in definirate vse spremenljivke, sami preverjate katere metode ima vsak senzor in motor (in vse ostalo), s tem da uporabljate tipko Tab.

bothMotors.+ vam bo izpisal vse ukaze, ki jih lahko uporabite nad obema motorjema, isto lahko storite za vse senzorje in celotno nxt knjižnjico.


Za začetek mislim, da bo dovolj, vsa vprašanja lahko pišete v komentarjih ali pa preko maila:

blaz@coderdojo.si
jernej@coderdojo.si

Veselo kodiranje!

sobota, 12. januar 2013

CoderDojo Januar

Novo leto, nova zmaga za nas!
Danes smo se igrali in zabavali z Lego Mindstorms kompleti, tri ure so minile kot bi trenil z očesom, na srečo so lahko otroci komplete vzeli tudi domov (do naslednjič!), tako da so imeli še en malce manjši božič.

Posebaj bi se radi zahvalili:
Miha Štajdohar, za vso pomoč, prisotnost na dogodku in posojo robotkov.
Blaz Zupan, za prijaznost in posojo robotkov.
Fakulteta za računalništvo in informatiko in celotnemu laboratoriju za bioinformatiko.
Dušan Omerčević, za vse prigrizke, pomoč in prijaznemu odstopu prostorov Zemante.
Nataša Potočnik, za dobro voljo in tiste slastne rogljičke, ki tako teknejo ;)

Še manjše opozorilo:

Naslednji dogodek ni drugo soboto v mesecu, kot ponavadi, ampak prvo, torej 2. Februar.
Zopet se bomo igrali z robotki, navodila za inštalacijo in začetek bodo objavljena tudi na blogu pod kategorijo "Snov", za vprašanja in vse ostalo pa sva z Jernejem na voljo na mailu:

blaz@coderdojo.si
jernej@coderdojo.si

Prilagam še nekaj slik iz dogodka, vse pa si lahko ogledate v galeriji.













nedelja, 9. december 2012

Decembrski CoderDojo

Pa smo preživeli zasneženo soboto, udeležba je bila vremenu primerna, ampak nekateri se niso dali!
Tokrat smo s starejšo skupino delali z grafičnimi vmesniki, naredili smo kalkulator in začeli se programirati še tri v vrsto (za kar je žal zmanjkalo časa) mlajša pa je izdelala spletno stran.
Spodaj pa si lahko še ogledate slike iz dogodka:








Ne pozabite, naslednjič (12.1.2013) se bomo poigrali z Lego Mindstorms!

Za kontakt, pohvale / pritožbe lahko pišete na email naslov:

blaz@coderdojo.si
jernej@coderdojo.si



nedelja, 2. december 2012

Obvestilo za decembrski CoderDojo

Samo še dober teden nas loči od naslednjega CoderDojo dogodka!

Tokrat bomo z mlajšo skupino izdelali manjšo spletno stran, na tematiko, ki si jo bodo sami izbrali.
Priporočamo, da s seboj prinesete kakšno sliko, videoposnetek ali zvok stvari, ki bi jo želeli naložiti na stran, najsibodi to hišni ljubljenček, bližnja oseba, risani junak; skratka nekaj, kar vam je pri srcu.
Po izdelavi strani pa se bomo še malce poigrali s spletom.

S starejšimi pa bomo nadaljevali s Pythonom, tokrat se bomo lotili nečesa nekoliko težjega.
S seboj ne potrebujete ničesar posebnega, samo laptop in obilo dobre volje.

Za morebitna vprašanja lahko pod objavo pustite komentar, ali pišete na mail.

blaz@coderdojo.si
jernej@coderdojo.si

Se vidimo!

sobota, 1. december 2012

Ponovitev snovi

Pozdravljeni!

Kako smo začeli?

Prva stvar, ki smo jo spoznali, je kako računalniku dopovedati, da nam nekaj izpiše na zaslon. Ukaz, ki smo ga uporabili je ''print()''.
Če smo ta ukaz vpisali v terminal je to zgledalo približno tako:
>>> print('Pozdravljeni udeleženci tečaja CoderDojo!')
Pozdravljeni udeleženci tečaja CoderDojo!
 
Prav tako smo izpisovali številke:
>>> print(2012)
2012
 
>>> print(2012+1)
2013
 
>>> print(2012/2013)
0.9995032290114257
 
Spomnimo se lahko tudi kombinacij števil in besedila:
>>> print('CoderDojo v šolskem letu', 2012, '/', 2013, 'se šele dobro začenja.')
CoderDojo v šolskem letu 2012 / 2013 se šele dobro začenja.
 
Spoznali smo se s spremenljivkami ter ugotovili, da lahko v njih hranimo tako besedilo (po angleško string) kot številke (po angleško integer):
>>> pozdrav = 'Lep pozdrav!'
>>> print(pozdrav)
Lep pozdrav!
 
>>> najmlajsi = 8
>>> najstarejsi = 14
>>> print(pozdrav, 'Najmlajši udeleženec tečaja je bil star', najmlajsi, 'let, najstarejši pa', najstarejsi, 'let.')
Lep pozdrav! Najmlajši udeleženec tečaja je bil star 8 let, najstarejši pa 14 let.

Kakšno vrednost spremenljivka hrani lahko preverimo z ukazom 'type()':
>>> type(pozdrav)
<class 'str'>
>>> type(najmlajsi)
<class 'int'>
 
>>> stevilo_banan = 4
>>> stevilo_jabolk = 5
>>> stevilo_mandarin = 3
>>> stevilo_sadja = stevilo_banan + stevilo_jabolk + stevilo_mandarin
>>> print(stevilo_sadja)
12
 
Pokazali smo tudi, da lahko v eni spremenljivki hranimo več vrednosti, to obliko imenujemo 'list'.
>>> kosara = ['Pomaranca','Jabolko','Zelje']
>>> torba = ['Puščica', 'Zvezek', 'Učbenik', 'Delavni zvezek', 'Mapa']
>>> avto = ['Sin','Hčerka','Mama']
>>> print(avto)
['Sin', 'Hčerka', 'Mama']
 
V take list-e lahko vrednosti tudi dodajamo
>>> avto.append('Ata')
>>> print(avto)
['Sin', 'Hčerka', 'Mama', 'Ata']
 
Pomembno je tudi kako kličemo posamezne elemente v listu:
>>> print(avto[0], avto[1], avto[2], avto[3])
Sin Hčerka Mama Ata
 
Podobno lastnost klicanja posamičnih elementov smo pokazali tudi pri besedilu:
>>> zmeda = 'Onekjesopresledki?'
>>> print(zmeda[0], zmeda[1:3], zmeda[3:6], zmeda[6:8], zmeda[8:])
O ne kje so presledki?

Temu postopku rečemo 'slicing' kar v angleščini pomeni rezati in to je tudi vse kar počnemo, izrezujemo dele besedila, ki se nahajajo v spremenljivki.
 
 

TURTLE!

Za uporabo modula turtle moramo le tega najprej poklicati, to storimo z ukazom 'import' ter imenom modula, ki ga kličemo, v našem primeru je to 'turtle'.
 
>>> import turtle
 
Ko je modul naložen ustvarimo želvo ter jo poimenujemo s spremenljivko, ta spremenljivka potem postane spremenljivka tipa turtle.
 
>>> janez = turtle.Turtle()
>>> type(janez)
<class 'turtle.Turtle'>
 
Ko ustvarimo želvo z imenom janez se nam odpre okno v katerem se želva nahaja – pojavi se na sredini.
S prejšnjim ukazom smo določili, da je spremenljivka janez postala Turtle, zaradi tega lahko ta spremenljivka kliče vse ukaze, ki se nanašajo na Turtle:
Za premikanje želve uporabimo sledeče ukaze:

Naprej:
>>> janez.forward(ŠTEVILO PIKSLOV)
Ali
>>> janez.fd(ŠTEVILO PIKSLOV)
 
Obrni levo:
>>> janez.left(STOPINJE)
Ali
>>> janez.lt(STOPINJE)
 
Obrni deso:
>>> janez.right(STOPINJE)
Ali
>>> janez.rt(STOPINJE)
 
Pojdi na koordinato (x,y) (če so koordinate (0,0) je želva na sredini)
>>> janez.goto(x,y)
 
Dvigni svinčnik (želva ne pušča sledi)
>>> janez.penup()
Ali
>>> janez.pu()
 
Spusti svinčnik (želva pušča sled)
>>> janez.pendown()
Ali
>>> janez.pd()

Z uporabo teh ukazov smo že sposobni narisati preproste like kot so kvadrat, pravokotnik, itd.
Vendar pa smo hitro ugotovili, da lahko ukaze, ki se ponavljajo skrašjamo s pomočjo zanke.
Uporabljali smo 'for' in 'while' zanko:

Ideja 'for' zanke v pythonu zgleda tako:
>>> torta = ['moka', 'mleko', 'jajce', 'sladkor', 'borovnice', 'smetana']
>>> for sestavina in torta:
>>>    print(sestavina)
moka
mleko
jajce
sladkor
borovnice
smetana

Za podobno nalogo lahko uporabimo tudi 'while' zanko:
>>> avto = ['ata', 'mama', 'sin', 'hcerka']
>>> while len(avto) > 0:
>>>    print('Iz avta izstopi', avto.pop(), '.')
Iz avta izstopi hcerka.
Iz avta izstopi sin.
Iz avta izstopi mama.
Iz avta izstopi ata.
 
V tem primeru nam ukaz len(avto) pove koliko elementov je v spremelnjivki avto. Na začetku je ta vrednost 4, vendar se v vsakem ciklu zanke število zmanjša. Za to poskrbi ukaz pop(), ki iz naše spremenljivke avto izbriše in izpiše zadnji element.
To je precej lažje razumeti na primeru:
>>> nabiralnik = ['paket','pismo','razglednica']
>>> len(nabiralnik)
3
>>> nabiralnik.pop()
razglednica
>>> print(nabiralnik)
['paket','pismo']
>>> len(nabiralnik)
2
 
Naučili smo se definirati funkcije, ki kvadrat oz. Katerikoli drug lik izrišejo za nas, primer:
 
def pravokotnik(x_koordinata, y_koordinata, dolzina_stranice_1, dolzina_stranice_2):
      risar = turtle.Turtle()
risar.pu()
risar.goto(x_koordinata, y_koordinata)
risar.pd()
while stranica < 4:
risar.fd(dolzina_stranice_1)
risar.lt(90)
risar.fd(dolzina_stranice_2)
risar.lt(90)
stranica = stranica + 2
Ko bo ti funkcijo uporabili v programu bi to zgledalo približno tako:
>>> pravokotnik(0, 0, 50, 100)
 
Na zasloni bi se nam tako izrisal pravokotnik s širino 50 pikslov in višino 100 pikslov.
Ker pa smo koordinati x in y dali na 0, bi želva začela risati pravokotnik na sredini zaslona (turtle modul za točko (0,0) vzame središče risalnega polja).


Želim vam uspešno igranje. V primeru vprašanj, želja, idej pa kar pogumno kontaktirajte mene ali Blaža:
blaz@coderdojo.si
jernej@coderdojo.si