sobota, 18 listopada 2017

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 tematem, ale tylko czytając przeróżne teksty nie posuwam się naprzód. Całkiem niedawno udało mi się spotkać ze starym znajomym, który pracuje jako programista. Na własny rachunek. Pogadaliśmy chwilkę, po czym powiedział mi że powinienem ogarnąć JAVA i SQL i że jeśli dam radę to on mnie zarekomenduje. To byłby zajebisty postęp, bo z moim brakiem jakichkolwiek znajomości zapieprzam na stanowisku mięsnym w supermarkecie. Każdy dzień powszedni, każda sobota i co druga niedziela. Niemal ciągle w pracy. W domu też cała masa obowiązków.

Nie wiem czy przypadkiem nie postawiłem sobie za wysokiej poprzeczki do pokonania.

środa, 31 maja 2017

Podsumowanie trzech miesięcy

Mój wpis zapewne będzie jednym z ostatnich tej edycji konkursu.

A sam konkurs miał cel bardzo mocno edukacyjny. Dzięki niemu poznałem, na czym choć trochę polega programowanie, ponieważ o ile pierwsza część mojego programu była stosunkowo prosta, to ta druga sprawiła mi wiele problemów. Bardzo długo nie mogłem sobie poradzić z błędami jakie występowały w moim kodzie, więc postanowiłem rozszerzyć 'działalność'. Udało mi się znaleźć mentora. Nie jest on jakimś wielkim specjalistą, lecz jego wiedza mocno przewyższa moją. Prosiłem o wskazanie błędów i jakieś podpowiedzi w postaci pseudokodu. Dostałem także w prezencie część kodu, więc mój open-sourcowy projekt nabrał właściwego dla siebie charakteru. I trochę się podszkoliłem, chociaż w tej tematyce sporo jeszcze przede mną. Teraz, gdy będzie już po konkursie i nie będę myślał tak intensywnie o moim projekcie będę mógł skupić się na nauce paradygmatu OOP. To on sprawia mi póki co najwięcej problemów. Tak więc mam cel na najbliższy czas.

Chodzą mi już po głowie nowe pomysły dotyczące 'Mistrza ortografii' - chciałbym przenieść go na androida. Znalazłem już odpowiednie narzędzie jakim jest Kivy, jednak Kivy opiera się na PyGame, a sam PyGame na OOP. Więc ten pomysł jest pomysłem czysto ewolucyjnym. Sporo nauki przede mną, ale i sporo zabawy z kodem.

I na sam koniec, chciałbym życzyć wszystkim podobnym do mnie początkującym programistom wytrwałości w nauce.

"Nie rezygnuj z marzeń. To, że coś nie dzieje się teraz nie znaczy, że nigdy nie nastąpi."

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ę !

czwartek, 23 marca 2017

Postępy już widać

Nie mam zbyt wiele czasu na mój projekt, ale kto ma? Tak czy siak małymi kroczkami zbliżam się do końca i chociaż do owego finiszu jeszcze troszkę mi zostało, to śmiało mogę się pochwalić tym.






Program póki co obsługuję bazę ok 50 słów, i do każdego wylosowanego uaktywniają się wybrane przyciski. Trzeba będzie solidniej przysiąść do bazy wyrazów, chociaż jeszcze troszkę kodu też się przyda :)

poniedziałek, 20 marca 2017

To był trudny weekend

W piątek wypadła mi okoliczność losowa. Prosto z pracy w samochód i przed siebie 400 km. Na miejscu bałagan i płacz. I przez dwa dni niestety byłem całkowicie odcięty od komputera. Wczoraj udało mi się wieczorkiem przysiąść i troszkę popisać i jestem kilka linijek do przodu. Poza tym mój programik ma bazować na bazie wyrazów i to przy niej spędzam sporo czasu. Ściągnąłem wcześniej  słownik języka polskiego i wyciągnąłem z niego wszystkie wyrazy zawierające 'ż', 'rz', 'u', 'ó', 'ch', 'h'. Od tamtego momentu ręcznie przegrzebuję słownik wybierając słowa, które dzieci mogą lub powinny znać. Tego się już nie da zaprogramować. A do przejrzenia jest coś ok. 180 000 wyrazów, więc mam z czym walczyć.

czwartek, 16 marca 2017

Downgrade

Muszę zmniejszyć funkcjonalności mojego programu, bo obawiam się że nie zdążę. Lepiej zrobić prostszą wersję finalną i ewentualnie ją później rozbudowywać, niż dać ciała na zbyt dużym projekcie.

wtorek, 14 marca 2017

Udało mi się zawalczyć pomyślnie z GitHubem. Mój wstępny kod już tam leży. Nigdy wcześniej nigdzie nie widziałem informacji, że powinienem się nauczyć obsługi Githuba. A miałem już sytuację, w której przydałaby mi się kontrola wersji skryptu. Teraz nie pamiętam o który dokładnie chodziło, ale mieszałem w kodzie próbując nowych rzeczy i się troszkę pogubiłem. Nowy kod nie działał a starego nie było, bo któż by robił backupa, i pracowałem na jedynym źródle.

Tu znalazłem przydatną stronę http://poznajprogramowanie.pl/git-tutorial-jak-zaczac-z-git/ Jest tam zawarty proces tworzenia repo, który sam wcześniej musiałem przebrnąć wysyłając zgłoszenie do konkursu, i jest też mowa o oprogramowaniu wspomagającym pracę z Gitem. Dla mnie na razie bezużyteczna, gdyż działam na Ubuntu. Poszukałem i mam GitKrakena, który w zasadzie działa dokładnie tak jak omawiany w tutorialu program.

Mam podstawę mojego projektu, teraz trzeba pomyśleć i napisać funkcje dla przycisków i uaktualnić to co jest na GitHubie.

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...