Oznake

utorak, 28. rujna 2010.

Python challenge - level 3

Na redu je Level 3. Uputa na stranici govori da pronađem slovo sa tri velika bodyguarda sa svake strane. Pretpostavljam da bi to trebalo biti u stilu xXXXxXXXx. Također naslov sitea upućuje na modul re i korištenje regularnih izraza pri rješavanju ovog problema.

 U duhu prethodnog koraka otvaram source kod stranice i pronalazim niz podataka koje zbog jednostavnosti spremam u level3.data i započinjem obradu podataka. Obrada se temelji na pronalasku gore opisanog uzorka. Mali trik u ovom rješavanju je kako od arraya znakova dobiti string. To se postiže slaganjem arraya sa vezivom tipa ''. U rješenju je vidljiv taj trik. Također je potrebno primijetiti da se koristi standardna sintaksa za opis regularnih izraza. Zagradama (nekiIzraz) se vraća rezultat izraza u povratnu vrijednost funkcije.

Kod:

# ukljuci modul re
import re
# otvori datoteku s podatcima
src = open('level3.data').read()
# pretrazi podatke za uzorkom i spoji rezultate
rez = ''.join(re.findall('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]',src))
# ispisi rezultat
print(rez)

Rezultat je programa string 'linkedlist'. Što nas upućuje na sljedeći nivo - Level 4.



P.S. Pri instalaciji Pyhtona na Windowse, ako ga automatski ne doda u PATH varijablu, napravite ovo.

srijeda, 11. kolovoza 2010.

Predpojačalo za gitaru (II)

Završio sam sklop, ali - naravno - nije iz prve profunkcionirao u spoju sa predviđenim pojačalom. Provjerio sam sve elemente, spojeve i neke tipične napone. Čini se sve u redu, bar što se spojeva i statike tiče. Krenuo sam s analizom signala i tih dinamičkih prilika u sklopu. Koristio sam jedan zgodan programčić za generiranje pobude - Tone Generator, odnosno Tone Generator Download. Pomoću tog programa i vjernog multimetra namještenog na AC područje zaključio sam da se signal propagira na izlaz, ali pri atenuaciji od četiri puta. To nisam očekivao jer po mojoj procjeni bi pojačanje sklopa na srednjim, "radnim" frekvencijama trebalo biti oko 2,5 puta, tj. nekih 8 dB. Pretpostavljam da je sve ostalo u redu u sklopu pa ću ručno promjeniti pojačanje pojačala mjenjajući odgovarajuće otpornike.

Također sam sklepao i skripticu u MATLAB-u koja generira chirp signal, šalje na izlaz zvučne kartice, kupi signal s ulaza zvučne kartice i ugrubo procjenjuje prijenosnu karakteristiku kanala između izlaza i ulaza zvučne kartice ilitiga karakteristiku mog pojačala. Skriptu sam koristio i za analizu sastava izlaznog signala. Vidio sam da se pojavljuje dosta obojenog šuma na nižim frekvencijama. Ne znam koji je razlog tome, ali prvi je korak će mi biti srediti to pojačanje, odnosno atenuaciju signala.

utorak, 27. srpnja 2010.

Predpojačalo za gitaru (I)

Ovim projektom sam se pomalo bavio zadnjih tjedan dana. Naime, otac mi je doma našao neko starije audio pojačalo te bi ga htio iskoristiti kao gitarsko pojačalo. Ulazni stupanj je potrebno dograditi na taj način da se na njega spoji transformator impedancije, tzv. predpojačalo za gitaru. Njegova je uloga prilagoditi izlaznu impedanciju "pick-upa" na gitari impedanciji ulaznog stupnja audio pojačala. U osnovi je to jednostavno naponsko slijedilo, ali tu se može i realizirati neko malo pojačanje (1-5 puta) te neka obrada signala kao što su posebni efekti i sl.



Predpojačalo, koje sam sastavio, je temeljeno na ovoj shemi. Ono ima na ulazu atenuator izveden potenciometrom R1, a na izlazu se potenciometrom R6 upravlja tonom te prekidačem S1 se odabire efekt "mekanog", odnosno "briljantnog" zvuka.



Na slici se vidi trenutačna izvedba predpojačala gdje sam se zbog jednostavnosti izvedbe odlučio za montažu komponenata na bušeni pertinaks.

srijeda, 16. lipnja 2010.

Driveri (II)

Kupio sam potrebne drivere i ugradio ih. Zalijepio sam postolja za DIL-16 na šasiju od motora i žičicama pospajao sve potrebno. Na donjoj slici se može vidjeti ta izvedba.


U prvi mah ovako složeni driveri nisu radili. Radili su npr. samo u jednom smjeru, tek dodatkom elektrolita na ključno mjesto ( :-) ) je proradio i drugi smjer. Cijela stvar je bolje radila kada sam je pogonio s PWM-om sa mikrokontrolera. No rekao bih da je nešto proosciliralo jer korištenje operacijskih pojačala u konfiguraciji naponskog slijedila zna to uzrokovati. Sljedeći korak će mi biti malo detaljnije analizirati tu situaciju na školski (fakultetski ? :-) ) način. Također ovakav spoj mi je zbog svih tih žičica i mogućnosti kratkog spoja krajanje neuvjerljiv pa ću najvjerojatnije napraviti neku malu pločicu za drivere.

nedjelja, 23. svibnja 2010.

Python challenge - Level 2

Nakon dužeg vremena vraćam se Python Challangeu. Na redu je drugi nivo.

Tekst na stranici me upućuje na source kod stranice. U sourceu zakomentirano pronalazim gro znakova i uputu da nađem rijetke znakove.


Da si olakšam rješavanje ovog izazova, prekopirao sam znakove u file level2.data i s njime sam baratao u rješenju. U rješenju sam izgradio dictionary koji sadrži učestalosti pojedinih znakova, nakon toga sam potražio najrjeđe znakove u ulaznim podatcima i ispisao ih kako bih zadržao ispravan poredak znakova. Kao ispis programa sam dobio riječ equality stoga URL na sljedeći nivo je Level 3. 


Kod rješenja je:


src = open('level2.data').read()
dict = {}
for char in src:
if char in dict.keys():
dict[char] = dict[char] + 1
else:
dict[char] = 1
for char in src:
if dict[char] == 1:
print (char, end='')


Treba primijetiti da se u novom Pythonu verzije 3 drugačije ponaša funkcije print. Npr. da se izostavi newline pri ispisu, naredba se piše print(string, end='').

subota, 22. svibnja 2010.

Driver za motor

Ovako sam zamislio driver za svoj motor. On je vrlo jednostavan; sastoji se od dva naponska slijedila. Spoj sam zamislio da mi omogući kontrolu smjera vrtnje kao i brzine vrtnje DC motora koji su već ugrađeni na šašiju robota. Mijenjajući iznos razlike napona na priključnicama  M+ i M- mijenjam brzinu vrtnje motora, dok mijenjajući predznak te razlike mijenjam smjer vrtnje. Vrlo je zgodno što mi ovakav spoj omogućuje korištenje zasebnog izvora napajanja za motore, znači; za napajanje motora mogu koristiti zasebne baterije koje će napajati driver i time motor, a "mozak" koji upravlja driverom mogu spojiti na zasebno napajanje. Na ovaj dizajn bih mogao još nadodati zaštitu na motor. Za ovaj slučaj dvosmjernog upravljanja motor, morao bih koristiti serijski spoj obične diode i zener diode po smjeru vrtnje. 
Za realizaciju drivera sam koristio operacijsko pojačalo L272. Najvažnija karakteristika odabranog pojačala je činjenica da kontinuirano može dati na izlazu struju od 1 A. Vrlo zgodna činjenica je da u njegovom pakiranju dolaze dva pojačala, točno koliko mi treba za jedan driver. Nezgodna činjenica je da jedan takav integrirac dođe oko 20kn tako da ih neću baš rado 'kuriti'. 
Spoj sam isprobao in vivo i sve je radilo. 

utorak, 27. travnja 2010.

Python challenge - Level 0 & 1

Nakon instalacije Pythona 3.1.2. za Win32 i Notepad++, otisnuo sam se u mora ovih izazova.

Level 0
Ovo je poprilično jasno. Iz slike se vidi da treba izračunati koliko je 2^38, a hint upućuje na to da rezultat treba upisati u URL. Nakon run > cmd, u CLIju pozovem python i poslužim se njegovim interpreterom (nakon >> se upisuju komande kao kasnije u skriptama). Upisujem 2**38 i dobivam broj 274877906944. Umjesto 0.html upisujem 274877906944.html i dolazim na Level 1.

Level 1
Ovaj nivo je nešto kompliciraniji i zahtjevat će pisanje male skriptice. Radi se o jednostavnom enkriptiranju teksta. Tekst se enkriptira tako da se svakom slovu ASCII kod poveća za 2.

level1.py:
dataIn = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." 
dataOut = []
for char in dataIn:
dataOut.append(chr(ord(char)+2))
print(''.join(dataOut))

Pošto baratam s Unicode znakovima, tekst ispada malo čudan.
Kod za sljedeći nivo je: ocr