czwartek, 13 kwietnia 2017

Budowanie wiary we własne siły

Mojej walce o nową wiedzę towarzyszą pewne przemyślenia. I to bardzo ważne przemyślenia. Ale najpierw zrobię taką małą retrospekcję ...

Kiedyś miałem marzenie nauczyć się pisać programy. Miałem kilka podejść do różnych języków. O ile dobrze pamiętam pierwszy był Turbo Pascal. Kilka lat później Delphi, jeszcze później Fortran (jak byłem jeden semestr na Warszawskiej Polibudzie). Ale wszystkie te 'nauki' kończyły się napotkawszy jakieś pierwsze problemy. Wszystko potęgował potężny brak wiary w siebie, który ciągnął się za mną odkąd pamiętam. Brakowało mi kogoś, kto by mógł powiedzieć, że coś co robię jest w miarę dobre i ma sens. Tak mijały długie lata, a ja zapomniałem o swoim marzeniu.

Czas przemijał, a i moje życie także było naznaczone zmianami. Pojawiły się dzieci, dom i całe mnóstwo obowiązków i problemów. Życie. Był rok 2016 ... lipiec ... wakacje na całego. A mój 11 letni syn dał czadu z graniem na komputerze. Było tak źle, że nie wiedzieliśmy co zrobić. Pomyślałem o jakimś programie, który by wyłączył kompa po zadanym czasie. Googlowałem temat, jednak bezskutecznie. I nagle wpadłem na extra pomysł - uznałem, że napiszę go SAM. Więc znowu Google i ranking języków programowania oraz fora różnej maści. Wybór padł na Pythona 3. I proces nauki się rozpoczął.

Udało mi się stworzyć timer a wyświetlanie czasu było na podstawie kodu chyba ze stackoverflow. Robił to co chciałem - wyłączał komputer po zadanym czasie. Później wymyśliłem zatrzymanie timera hasłem, więc zacząłem myśleć nad hasłem.



Ogólnie rzecz biorąc hasło nie było potrzebne, bo program dochodził do punku zero i wyłączał komputer. A pomysły z hasłem zostały jako oddzielne pomysły. Jeden z nich opublikowałem 13 marca. Drugi był bardziej wymyślny - generowało się hasło używając random (z małych i dużych liter oraz cyfr) następnie każdy znak był dowolnie (znowu random) kolorowany jednym z pięciu kolorów, i z tak powstałego ciągu hasłem były tylko żółte znaki. Fajne zadanie do którego musiałem poznać wyrażenia regularne. W międzyczasie napisałem malutki programik. Na załączonym obrazku widać co robił.



Z ręcznie wprowadzanej wartości brutto wyliczał wartości netto i vat dla poszczególnych stawek podatku. Kluczem do napisania tego programu była lambda. Zresztą wtedy bardzo spodobało mi się zagadnienie 'list comprehension' czyli sprowadzenie kilku linijek kodu do jednej linijki a lambda polega tym samym. Dla zainteresowanych link (http://www.secnetix.de/olli/Python/list_comprehensions.hawk).

Kolejnym pomysłem było przerobienie timera, o którym pisałem wcześniej. Przestał być używany zgodnie z zamierzeniem czyli wystartować timer wpisując czas, więc trzeba było pójść kroczek naprzód. Teraz komputer na sztywno uruchamia się dwa razy po 45 minut, a kolejne uruchomienia komputera wyłączają kompa po jednej minucie. Po co ta minuta? Bo czasem trzeba odpalić maszynę raz jeszcze i muszę mieć czas na zatrzymanie procesu wyłączenia.

Kolejnym istotnym pomysłem było wystartowanie w konkursie dla programistów "Daj się poznać". Bojąc się porażki zastanawiałem się do ostatniej chwili. Koniec końców zapisałem swój udział wraz projektem "Mistrz ortografii". Skąd pomysł? Synuś robił pracę domową i nagle zadał pytanie: Jak się pisze 'chytry' ? Zacząłem pisać program pełen nadziei i pomysłu jak by to miało wyglądać. Pomysł niemal na bieżąco ewoluował w mojej głowie, i bez jakiegokolwiek uporządkowania padł. I znowu, po raz kolejny już myślałem żeby się poddać, że nie dam rady, bo programowanie naprawdę nie jest takie proste. I na kilka dni dałem spokój. Po tym czasie zacząłem szukać innych rozwiązań, które pomogły by mojemu projektowi wstać na nogi. Już nawet znalazłem pewne rozwiązanie, ale usiadłem już tak na spokojnie do poprzedniego niewypalonego pomysłu ... i się udało. Ależ się ucieszyłem i z nowymi siłami powróciłem do pisania kodu. Wszystko oczywiście po godzinach, skracałem czas na sen do 3-4 godzin żeby coś popisać. Doszedłem tak do kolejnego problemu, ale nie załamując się za bardzo usiadłem, wziąłem kartkę i długopis i rozwiązałem problem. Gdy tylko udało mi się napisać co chciałem, z radości aż krzyknąłem :)


I na koniec podsumowanie:

Ktoś mógłby rzec, że Python jest językiem głównie skryptowym i że do programów okienkowych lepsze są inne języki. Ale ktoś kiedyś mi powiedział, że "ogranicza cię tylko twoja własna wyobraźnia co w Pythonie możesz zrobić".
 
Wraz z każdym sukcesem, z każdą linijką kodu, która robi to co chcę żeby robiła moja wiara w siebie rośnie. W końcu znalazłem sposób, żeby samemu powalczyć ze swoją największą słabością. I chociaż wiem, że daleko mi do profesjonalnych programistów to Bardzo Się Cieszę, Że Zacząłem Uczyć Się Programowania.

Zacząłem chociaż troszkę wierzyć w siebie :)




środa, 12 kwietnia 2017

To się robi coraz bardziej wciągające

Powinienem walczyć nad słownikiem, a ja zajarałem się nad rozszerzeniem funkcjonalności. Obecny słownik zawiera jeśli się nie mylę 108 słów. I ponad 4000 słów mam do przerobienia. Jednak póki co mój program stał się pełniejszy. Dodałem dziś licznik słów i skuteczność wyrażoną w procentach, tak więc śmiało można by go już używać w szkołach lub gdziekolwiek, gdzie trzeba byłoby poznać skuteczność użytkownika końcowego :) Procenty można już śmiało przekładać na oceny.

Oto przykład:


piątek, 7 kwietnia 2017

wersja 1.0 gotowa

Niesamowite uczucie. Mój projekt w wersji 1.0 z niewielkim słownikiem (nad którym nota bene muszę teraz popracować) działa i jest już na GitHubie. Instrukcji użytkowania pisać nie trzeba, gdyż sam program jest głównie przeznaczony dla młodzieży szkół podstawowych. Starsi oczywiście też mogą trenować ;) 


Jestem z siebie dumny, że dałem radę :D

 


A po zrobieniu słownika mogę zacząć myśleć nad usprawnieniami

czwartek, 6 kwietnia 2017

(chyba) olśnienie

Mój tok myśleniowy doprowadził mnie do (chyba) olśnienia. Chyba wiem dlaczego posypał się cały mój dotychczasowy projekt ... Odpowiedź jest prosta - bo nigdy do tej pory nie byłem programistą. Nie wiedziałem jak się do tego zabrać i już wiem, że zasada o której kiedyś czytałem "Done is better than perfect" jest jak najbardziej prawidłowa. Ja chciałem od razu robić coś perfekcyjnego, i zamiast określić jakiś plan działania, zarys tego co chciałbym aby było zrobione działałem w locie. W efekcie czego moje działania opisywało jedno słowo:

CHAOS

Bo jak nazwać sytuację, gdy działając bez planu codziennie siadając do laptopa robiłem coś innego? Zresztą widać to po szczątkowych wpisach tu w blogu. Miałem jeden przebłysk mądrości - ten związany ze zmniejszeniem funkcjonalności mojego programu. Ciągle jestem zdania, że lepiej zrobić coś prostego w wersji 1.0 a później ulepszać pomysł. I tak doszedłem do miejsca, gdzie mogę pochwalić się tym co już jest i co działa. I jakie są plany na jutro do pracy. 

Tak więc mój program jak na razie pracuje ze słownikiem 60 słów, z których to losuje za każdym razem jedno w sposób losowy (https://docs.python.org/3.4/library/random.html#random.choice). Pomysł na początek dobry, chociaż nie najlepszy, bo jak mówi definicja prawdopodobieństwa i prawo Murphy'ego - skoro coś może się wydarzyć to się na pewno wydarzy. Więc należy spodziewać się sytuacji, gdy program pobierze to samo słowo więcej niż raz. Póki co wystarczy. W wersji następnej wykorzystam (https://docs.python.org/3.4/library/random.html#random.sample) sposób, który z bazy danych wylosuje np. 20 niepowtarzalnych słów, a następnie je wyświetli. Mam też napisaną funkcję w ulepszonej wersji, która skanuje pobrany wyraz w poszukiwaniu jednego ze znaków 'ż', 'rz', 'ch', 'h', 'u', 'ó' i w miejscu tego znaku wstawia '_'. Widać to na screenie z wcześniejszego posta. Rodzaj wyszukanego znaku uaktywnia wybraną grupę przycisków. 


Jestem wiernym fanem vloga autorstwa Macieja Aniserowicza. W jednym z ostatnich filmów (https://www.youtube.com/watch?v=mU2cSrZ-tiQ) mówi o mentoringu. Czyli o kimś, o kim mogę sobie jedynie pomarzyć. Moim mentorem jest wujek google i to z tego powodu prawdopodobnie zawaliłem dotychczasowy kod. Nie było kogo spytać czy pomysł jaki sobie wykombinowałem jest pomysłem dobrym. Tamten pomysł był nie najlepszy, ponieważ z każdym kolejnym wylosowanym słowem tworzyło się nowe okienko toplevel, nie zamykając poprzedniego. Później nastał czas frustracji. Chciałem się poddać, myślałem że to nie dla mnie. Ale jakby tak stanąć z boku i popatrzeć na to co zrobiłem, to mimo że błędne było to coś o czym 10 miesięcy temu nie miałem zielonego pojęcia. I przypomniało mi się hasło, które pomaga mi walczyć z brakiem wiary w siebie od dłuższego czasu. 

Don't give up.

I powstałem niczym feniks z nowymi pomysłami. Teraz mam zamiar skorzystać z magii zapominania ☺ (http://effbot.org/tkinterbook/grid.htm#Tkinter.Grid.grid_forget-method) a ten sposób prezentacji mam nadzieję okaże się lepszy od poprzedniego.

Najważniejsze to znaleźć czas, którego za wiele nie mam. Tak mi się marzy cisza przez cały dzień ... albo dwa ...  wtedy mógłbym się skupić. No nic, koniec marzeń. Od początku nauki uczę się po nocach zarywając sen. Bywa ciężkawo śpiąc po 3-5 godzin na dobę, ale jakoś daję radę. Projekt chociaż powoli to posuwa się naprzód.





wtorek, 4 kwietnia 2017

Postępy były i się zmyły

Niestety projekt utknął w martwym punkcie. Źle to sobie wymyśliłem i teraz ciągle walczę nad projektem od niemal zera. Część kodu usprawniłem, ale co do części wciąż mam wielkie zastrzeżenia.

Jedno jest ważne - nie poddaję się !

Is it to hard ?

Ogromna ilość czasu i energii potrzebna na pracę jaką wykonuję zastopowała troszkę moje postępy programistyczne. Wciąż chciałbym zawalczyć z...