Quantcast
Channel: Notatnik programisty
Viewing all 102 articles
Browse latest View live

Programista, długoterminowa praca na etacie w jednej firmie i granice

$
0
0

hard_workingIm bardziej czas ucieka, tym co raz częściej jestem pytany jak to możliwe, że pracując w zawodzie programisty jestem zatrudniony w jednej firmie przez dziewięć lat. Każdy z nas ma różne priorytety w życiu, inną sytuację finansową, inne możliwości i w związku z tym inne wymagania. A to, gdzie i jak długo pracujemy, jest wynikiem naszych własnych ograniczeń. Dobrym tego obrazem jest powieść Zofii Nałkowskiej – Granice. Od dzieciństwa jesteśmy ograniczani. Ograniczają nas rodzice, później nauczyciele, wykładowcy, pracodawcy, urzędy skarbowe, kodeks drogowy, prawo karne, czy w międzyczasie religia i normy moralne.. Wydarzenia, okoliczności, ludzie zmieniają naszą postawę czy nawet system wartości. Wreszcie ograniczenia możliwości edukacji, językowe, kulturowe i rodzinne sprawiają, że pracujemy w tym a nie innym zawodzie. W tym a nie innym mieście. W tym a nie innym kraju. Im mniej ograniczeń, tym więcej możliwości.

Wróćmy jednak do wątku – długoterminowa praca na etacie w jednej firmie to naprawdę niezłe wyzwanie. Mowa tu oczywiście o pracy programisty. W naszym zawodzie każdy dzień pracy zarejestrowany jest w postaci historii repozytorium (svn, git, itp.). W każdym momencie możemy sprawdzić co zrobiliśmy np. w ostatni majowy piątek pięć lat temu. Mało tego, każda praca wykonana dziś, będzie miała swoje konsekwencje jutro, za tydzień i aż do końca supportu danego projektu lub zmiany pracy. Ukryty błąd popełniony kilka lat temu nie pokryty testami może się ujawnić w najmniej oczekiwanym momencie. Sami już nie zdajemy sobie z tego sprawy, jednak czy ktoś z poza branży związanej z inżynierią wyobraża sobie taką możliwość kontroli i historii wykonywanych przez siebie zadań?

Kolejna sprawa – praca nad zastanym własnym kodem. Sam na przykład do tej pory nie byłem w stanie posprzątać po swoich “świetnych” pomysłach związanych z brakiem wiedzy z początkowego okresu pracy. Czasem naprawdę chciałoby się całkowicie odciąć od kodu, który jest nierozszerzalny, zagmatwany, po prostu zły (napisany przez samego siebie). Niestety rzadko mamy możliwość przeprowadzenia refactoringu ze względu na wszechobecną granicę budżetu i czasu. Warto sobie to słowo zapamiętać – “granice”. Granice będą nam towarzyszyć do końca życia. Najbogatszy człowiek świata wciąż będzie ograniczony – choćby możliwością dotarcia do granic układu słonecznego. Nie wspominając o naszej galaktyce, która ma średnicę około 100 000 lat świetlnych.

Najważniejsza wada

Główną wadą długotrwałej pracy na jednym etacie jest spore ryzyko nabrania złych nawyków. Zwłaszcza gdy wśród współpracowników nie znajdzie się swojego mentora, swoistego guru, który będzie znał odpowiedź na każde pytanie. Trzeba o tym pamiętać. Programiści muszą się kształcić, muszą czytać i to książki specjalistyczne nierzadko w języku angielskim aby być na bieżąco. Polskie tłumaczenia niestety zostają wydawane z opóźnieniem.

Podsumowanie

Długoterminowa praca w jednej firmie z pewnością świadczy o tym, że dana osoba sprawdziła się. Nie odcina się od wykonanej przez siebie pracy i przede wszystkim – wykonując pracę dzisiaj bardziej ma na uwadze to, że będzie ona miała swoje konsekwencje jutro, za tydzień i za pięć lat.

Mimo wszystko praca przez dłuższy okres może również świadczyć o “zastaniu”. Zwłaszcza jeśli idzie to w parze z brakiem samorozwoju.

Jeśli minął miesiąc, a TY nie przeczytałeś żadnej książki, nie zaznajomiłeś się z jakimś tutorialem, nie poznałeś czegoś nowego z dziedziny IT, prawdopodobnie będziesz w poważnych tarapatach. Czas gra na Twoją niekorzyść. Ani się nie obejrzysz i zostanie postawiona przed Tobą kolejna granica – granica własnej pewności siebie, która skutecznie powstrzyma Cię aby pójść na swoją pierwszą od dłuższego czasu rozmowę kwalifikacyjną. Ta granica będzie Cię chronić przed kompromitacją jednocześnie zasłaniając horyzont możliwego rozwoju.

granice

 

Pozbądź się ograniczeń i zapoznaj się ze spisem treści tych książek

Jeśli nie czytałeś zwłaszcza tych dwóch pierwszych koniecznie zrób to. W “Czystym kodzie” dowiesz się jak nazywać zmienne, jaką długość powinny mieć klasy, jak pisać komentarze (a właściwie dlaczego ich nie pisać) :)

Pragmatycznego programistę przeczytałem co prawda dopiero po założeniu tego bloga. Jednak co mnie bardzo zaskoczyło, pojawił się w nim rozdział związany z własnym warsztatem i automatyzacją wykonywanych zadań. Mój pierwszy artykuł właśnie odnosił się do tej tematyki.

Czysty kod. Podręcznik dobrego programisty

Czysty kod. Podręcznik dobrego programisty

Autor: Robert C. Martin

ISBN: 978-83-283-1401-6

Format: 168x237, stron: 424

Data wydania: 2015-03-25

Opis: Poznaj najlepsze metody tworzenia doskonałego kodu Jak pisać dobry kod, a zły przekształcić w dobry? Jak formatować kod, aby osiągnąć maksymalną czytelność? Jak implementować pełną obsługę błędów bez zaśmiecania logiki kodu? O tym, ile problemów sprawia niedbale napisany kod, wie każdy programista. Nie wszyscy jednak wiedzą, jak napisać ten świetny,

Cena: 54.99 zł
(Cena druku: 69.00 zł)

Pragmatyczny programista. Od czeladnika do mistrza

Pragmatyczny programista. Od czeladnika do mistrza

Autor: Andrew Hunt, David Thomas

ISBN: 978-83-246-9270-5

Format: 158x235, stron: 332

Data wydania: 2014-02-12

Opis: Od ambitnego do najlepszego - czyli jak stać się programistą wydajnym, dociekliwym i gotowym do wszelkich zawodowych wyzwań! Poznaj najlepsze praktyki i najczęstsze pułapki procesu wytwarzania oprogramowania Naucz się pisać elastyczny, dynamiczny i łatwy w dostosowywaniu kod Opanuj sprawdzone techniki efektywnego testowania oprogramowania Twórcy rozmaitych narzędzi prog

Cena: 47.00 zł
(Cena druku: 69.00 zł)

Praca z zastanym kodem. Najlepsze techniki

Praca z zastanym kodem. Najlepsze techniki

Autor: Michael Feathers

ISBN: 978-83-246-8320-8

Format: 168x237, stron: 440

Data wydania: 2014-03-21

Opis: Naucz się pracować na gotowych projektach! Programiści uwielbiają brać udział w nowych projektach, być świadkami ewolucji kodu, mieć wpływ na wybór narzędzi i projektować ich architekturę. Niestety, w ogromnej większości przypadków muszą pracować z kodem mającym wiele lat i pisanym przez wiele osób. Jak sobie poradzić w takim środowisku? Jak dobrać tech

Cena: 62.90 zł
(Cena druku: 79.00 zł)

TDD. Sztuka tworzenia dobrego kodu

TDD. Sztuka tworzenia dobrego kodu

Autor: Kent Beck

ISBN: 978-83-246-8503-5

Format: 168x237, stron: 232

Data wydania: 2014-03-14

Opis: Twórz niezawodny kod! Idealny kod, pokryty w pełni testami, to marzenie każdego dewelopera. Niestety, marzenia zazwyczaj rozmijają się z rzeczywistością. Codzienność większości programistów to nieczytelny kod i brak testów. Są to doskonałe warunki do powstawania błędów, często bardzo trudnych do wykrycia. Czy jest sposób, żeby wybrnąć z tego

Cena: 39.00 zł
(Cena druku: 49.00 zł)

 

Artykuł Programista, długoterminowa praca na etacie w jednej firmie i granice pochodzi z serwisu Krzysztof Jelonek.


Adafruit Flora – wstęp do inteligentnej odzieży

$
0
0

flora_set_2Zaopatrzyłem się w ostatnim czasie w powyższy zestaw Adafruit Flora, którego chciałbym wykorzystać do kilku projektów związanych z “inteligentną odzieżą”. Lecz tym razem Was, czytelników bloga chciałbym prosić o współudział.

Każde polubienie Notatnika Programisty traktuję indywidualnie i staram się dowiedzieć czym się interesujecie, gdzie się uczycie, jaką skończyliście uczelnie, czy gdzie pracujecie. Jest mi niezmiernie miło skupiać w okół moich pomysłów tak wiele osób studiujących, wykształconych, pracujących w takich korporacjach jak np. IBM, Comarch, Intel, Asseco, czy Google, a nawet autorów publikacji naukowych. Osób chcących się rozwijać, czytających książki i potrafiących napisać konstruktywne maile z uwagami. Super!

W związku z tym z wielką przyjemnością poznam Wasze pomysły na wykorzystanie zestawu Adafruit Flora, postaram się je zrealizować i opisać w tym miejscu. W skład mojego zestawu wchodzą poniższe elementy (zdjęcie każdego z nich wykonałem sam, przepraszam za jakość – miało wyjść lepiej):

  1. Adafruit Flora
    Kompatybilny z Arduino kontroler inteligentnych ubrań. Posiada złącze mini USB i można go programować bezpośrednio ze środowiska Arduino IDE.
    adafruit_flora_set
  2. Adafruit FLORA – Bluefruit LE – moduł Bluetooth BLE
    Umożliwia dodanie komunikacji poprzez interfejs Bluetooth BLE.
    flora_bluefruit_set
  3. FLORA Adafuit – akcelerometr i kompas – LSM303
    Umożliwia pomiar przyspieszenia oraz kierunku ruchu. Dodatkowo jest wyposażony w magnetometr (kompas), służący do wyznaczania kierunku południka magnetycznego. Moduł oparto na układzie LSM303DLHC, wyposażonym w cyfrowy interfejs komunikacyjny I2C. Adafruit 1247
    flora_accel_compass_set
  4. FLORA Adaruit – 9-DOF – akcelerometr, żyroskop, magnetometr – LSM9DS0
    Służy do pomiaru pola magnetycznego, przyspieszenia oraz prędkości kątowej. Ma wbudowany moduł inercyjny LSM9DS0, wyposażony w 3-osiowy kompas, 3-osiowy żyroskop oraz 3-osiowy akcelerometr (9DOF). Komunikuje się za pomocą magistrali I2C.
    flora_accel_compass_gyro_set
  5. Adafruit FLORA – czujnik koloru TCS34725 z podświetleniem LED
    Moduł pozwala na wykorzystanie możliwści czujnika koloru / oświetlenia – układu TCS34725. Komunikacja z układem odbywa się za pośrednictwem magistrali I2C
    flora_color_sensor_set
  6. FLORA Adafruit – czujnik pomiaru promieni UV – Si1145
    Czujnik umożliwia pomiar natężenia promieniowania UV. Wyniki pomiaru odczytywane są zgdnie ze standardem Indeks UV. Moduł oparto na popularnym czujniku SI1145. Komunikuje się za pomocą magistrali I2C. Adafruit 1981
    flora_light_sensor_set
  7. Adafruit FLORA LED RGB Smart NeoPixel v2 – 4 szt.
    Zestaw modułów (4 sztuki) z diodą RGB (elektronika noszona)
    led_rgb_neopixel
  8. Nierdzewna nić przewodząca 23 metry (cienka / 2 PLY)
    Cienka i mocna nić przewodząca wykonana z dwóch warstw stali nierdzewnej. Można ją wykorzystać do tradycyjnego ręcznego szycia lub zamontować w maszynie przystosowanej do ciężkich nici. Dzięki zastosowaniu stali nierdzewnej, produkt nie utlenia się i zachowuje swoje właściwości przez długi czas.
    nic_przewodzaca
  9. Adafruit FLORA – czujnik światła TSL2561
    Moduł pozwala na wykorzystanie możliwości czujnika jasności typu TSL2561. Komunikacja z czujnikiem odbywa się za pośrednictwem magistrali I2C
    flora_light_sensor_tsl_set

 

Na szczęście wszystkie elementy znajdują się w osobnych torebkach foliowych:

flora_set_3

Pomysły

Moimi pierwszymi pomysłami były:

  1. Plecak dla dzieciaków z diodami LED.
  2. Obroża dla psa.
  3. Koszulka dla rowerzystów z wykorzystaniem Muscle Sensor 3 (reagująca np. na skręt głową w prawo / lewo).
  4. Dyskotekowa koszulka.

A poniżej kilka pomysłów z wykorzystaniem modułów Adafruit na Youtube:

 

A jakie są Wasze pomysły?

Arduino. 65 praktycznych projektów

Arduino. 65 praktycznych projektów

Autor: John Boxall

ISBN: 978-83-246-8002-3

Format: 170x230, stron: 424

Data wydania: 2013-11-22

Opis: Twój przewodnik po świecie Arduino! Arduino to platforma, dzięki której świat elektroniki zyskał wiele nowych, ciekawych rozwiązań i możliwości. Prostota obsługi, świetna dokumentacja oraz specjalnie zaprojektowane środowisko do tworzenia oprogramowania sprawiły, że projekt ten zdobył tysiące sympatyków. Taki sukces przełożył się na ilość dostępnych akcesoriów oraz ins

Cena: 54.99 zł
(Cena druku: 69.00 zł)

Arduino dla początkujących. Podstawy i szkice

Arduino dla początkujących. Podstawy i szkice

Autor: Simon Monk

ISBN: 978-83-246-8737-4

Format: 158x235, stron: 144

Data wydania: 2014-04-07

Opis: Podręcznik programisty Arduino! Jeśli nie po drodze Ci z lutownicą i trawieniem płytek, a Twoją pasją jest elektronika, Arduino to platforma dla Ciebie! Dzięki niej rozwiniesz skrzydła i zrealizujesz swoje wymarzone projekty. Do rynkowego sukcesu Arduino z pewnością przyczyniły się świetna dokumentacja, obszerne źródła informacji oraz środowisko przeznaczone specjalnie do

Cena: 23.90 zł
(Cena druku: 29.90 zł)

Arduino dla początkujących. Kolejny krok

Arduino dla początkujących. Kolejny krok

Autor: Simon Monk

ISBN: 978-83-283-0016-3

Format: 158x235, stron: 240

Data wydania: 2015-02-13

Opis: Arduino — mała płytka o ogromnym potencjale — otworzyła świat elektroniki dla szerokiego grona pasjonatów, którym pozwoliła wreszcie zrealizować wymarzone projekty. Błyskawicznie zdobyła ogromną popularność, na co szybko zareagował rynek — pojawiło się mnóstwo dodatkowych akcesoriów, instrukcji i książek. Wśród tych ostatnich

Cena: 31.99 zł
(Cena druku: 39.00 zł)

Artykuł Adafruit Flora – wstęp do inteligentnej odzieży pochodzi z serwisu Krzysztof Jelonek.

Jak zjednać sobie ludzi i być lepszym programistą

$
0
0

Kilka dni temu wysłuchałem materiał przygotowany przez Mirosława Zelenta z zakresu samorozwoju. Mirosław opowiada o swoich własnych doświadczeniach w pracy freelancera, nauczyciela i youtubera. Omawia niuanse, które wg. niego decydują o sukcesie we współpracy z drugim człowiekiem w branży IT. Od aspektów czysto zawodowych po te międzyludzkie. Jeśli masz wolną godzinę czasu – posłuchaj. Naprawdę warto.

W interesującym podcaście autor poleca kilka książek wartych przeczytania. Jedną z nich jest “Jak zdobyć przyjaciół i zjednać sobie ludzi” Dale Carnegiego, którą kupiłem i dosyć szybko przeczytałem. Bardzo zaskoczyła mnie ta lektura. Przyznam, że nigdy nie czytałem tego typu książek jednocześnie sądząc, że byłoby to marnotrawstwo czasu. O tym jak w wielkim byłem błędzie i co zyskałem jeszcze przed ukończeniem tej lektury opiszę poniżej. Na samym końcu wpisu podaję link do tej książki. Jest też dostępny audiobook w formacie mp3.

Jeden cytat

Umieszczę w tym wpisie tylko jeden cytat odnoszący się do tak drobnej z pozoru różnicy między słowami “ale” i “i”. Zamiana “ale” na “i” diametralnie zmienia postrzeganie zdania przez odbiorcę:

Wie­lu lu­dzi za­czy­na kry­ty­kę od szcze­rej po­chwa­ły, po któ­rej na­stę­pu­je sło­wo „ale” i kry­ty­ka. Na przy­kład usi­łu­jąc zmie­nić sto­su­nek dzie­ci do na­uki mo­że­my po­wie­dzieć: „Je­ste­śmy z cie­bie dum­ni, John­nie. W tym se­me­strze two­je oce­ny są lep­szę. Ale gdy­byś po­pra­co­wał nad al­ge­brą, miał­byś lep­sze wy­ni­ki.”
W tym przy­pad­ku John­nie mógł czuć się za­chę­ca­ny do pra­cy aż do mo­men­tu, w któ­rym usły­szał sło­wo „ale”. Wte­dy miał pra­wo zwąt­pić w szcze­rość po­chwa­ły Dla nie­go po­chwa­ła była po pro­stu wpro­wa­dze­niem do kry­tycz­nej uwa­gi o po­raż­ce z al­ge­bry. W ten spo­sób pod­wa­ża­my na­szą wia­ry­god­ność i praw­do­po­dob­nie nie osią­gnie­my za­mie­rzo­ne­go celu.
Moż­na temu za­po­biec za­mie­nia­jąc „ale” na „i”. „Je­ste­śmy z cie­bie na­praw­dę dum­ni, John­nie. W tym se­me­strze two­je oce­ny są lep­sze. I je­śli po­pra­cu­jesz w przy­szłym se­me­strze, two­je stop­nie z al­ge­bry będą tak do­bre jak wszyst­kie inne.”
Te­raz John­nie przyj­mie po­chwa­łę, po­nie­waż nie na­stą­pi po niej żad­na uwa­ga o nie­po­wo­dze­niu. Po­śred­nio zwra­ca­my uwa­gę na to, co chce­my zmie­nić, i mamy szan­sę, że spró­bu­je speł­nić na­sze ocze­ki­wa­nia.

“Jak zdobyć przyjaciół i zjednać sobie ludzi”, Dale Carnegie

Książka zawiera mnóstwo historyjek z życia wziętych i mądrych myśli.

Opinie

Przeczytajcie kilka opinii:

W życiu zdarzyło mi się przeczytać kilka książek o wpływaniu na ludzi oraz o tym jak odnieść sukces w dzisiejszym świecie. Część z nich była kompletną porażką, więc z dużą ostrożnością i rezerwą podchodziłem do “Jak zdobyć przyjaciół i zjednać sobie ludzi”. Teraz po przeczytaniu tej książki szczerze i z całego serca polecam ją wszystkim, którzy chcą od życia czegoś więcej. Jest to świetna pozycja, która zwraca uwagę na pozornie błahe i niewidoczne dla nas błędy. Błędy te popełniamy na co dzień. Z ich istnienia nie zdajemy sobie sprawy, a mają one ogromny wpływ na nasz dalszy los. Z czystym sumieniem polecam tą książkę i gwarantuję, że dla większości czytelników stanie się ona osobistą biblią i przewodnikiem życiowym, o tym jak postępować z ludźmi by odnieść sukces. Nie jestem podstawionym pracownikiem wydawnictwa ani księgarni. Od kilku lat prowadzę własny biznes, i żałuję, że nie przeczytałem tej książki 5 lat temu. Z pewnością zaszedłbym dalej niż obecnie. Jednak jak to mówią: lepiej późno niż wcale! Gorąco polecam do przeczytania w pierwszej kolejności!

Książka bardzo przydatna – znajdzie się tu wskazówki zarówno do dobrej obsługi klienta, jak i do prowadzenia (lub też raczej nieprowadzenia) kłótni. Uczy dobrego podejścia do innych osób, m.in. by szanować ich punkt widzenia i sprawić, by to ONI czuli się ważni (zgodnie z powiedzeniem “nasz klient, nasz Pan”). Każda ze wskazówek ma swój odnośnik w prawdziwym świecie – liczne przykłady z historii czy od uczestników seminariów autora Dale’a Carnegiego, którzy spróbowali zastosować rady we własnym życiu. Oczywiście książka pochodzi z pierwszej połowy XX w., więc niech nie dziwi specyficzny styl pisania tego typu poradnika. Moim zdaniem dodaje on uroku i bardzo zachęca do przeczytania. Jest wersja “Jak zdobyć przyjaciół i zjednać sobie ludzi w epoce cyfrowej”, ale na jej temat nie mogę się wypowiadać, więc może ta wersja będzie odpowiadała tym, którzy wolą bardziej uwspółcześnioną lekturę.

Opinie z portalu lubimyczytac.pl:

Książka jest absolutnie rewelacyjna! Rady w niej zawarte rzeczywiście potrafią zmienić nasze nastawienie do drugiej osoby, a tym samym zmienić nasze życie na lepsze. Wszystko w ciekawy sposób opisane w kilku rozdziałach na przykładach, kilka złotych zasad które wspaniale się sprawdzają. Zadziwiające jest to, że to co zapisał w książce autor my sami doskonale już wiemy ale chyba nie do końca zdajemy sobie z pewnych rzeczy sprawę. Ta książka otwiera nam oczy i pozwala widzieć lepiej. Poza tym warto do niej wracać, czytać choćby wybiórczo. Wspaniała lektura!

REWELACYJNA KSIĄŻKA! Naprawdę dawno nie zdarzyło mi się poznać tak wielu ciekawych rad na raz! Co więcej – pozycja nie jest jedną z tych, które prezentują różne “tricki”, ale uczy relacji międzyludzkich w zgodzie z duchem etyki.

Co ja i moja rodzina zyskała po przeczytaniu tej książki?

To jest nie wiarygodne, ale ta sytuacja naprawdę miała miejsce w dniu wczorajszym. Moja żona, w ostatnim czasie zmieniła pracę. Wszystko miało być wspaniale – świetne miejsce, miła szefowa, praca związana z jej pasją. Jedynym mankamentem była wysokość wynagrodzenia. Postanowiłem sprzedać jej kilka pomysłów na przeprowadzenie rozmowy z szefową (o którą byłem bogatszy po przeczytaniu tej książki). Bez tych wskazówek rozmowa mogła się skończyć się na tym, że zostałoby postawione żądanie oczekiwanego wynagrodzenia, na które nie byłoby zgody i tyle. Nikt by tu niczego nie zyskał – ani firma, ani żona.

Rano przy kawie przed wyjazdem do pracy krótko omówiłem kilka historyjek i rad cytując je bezpośrednio z książki i ustaliliśmy aby podczas rozmowy nastawiona była na podkreślanie zysków jakie firma może odnieść dzięki niej. Że przeprowadzi rozmowę tak, aby roz­mów­czyni poczuła się waż­na i za­chę­cana do mówienia o sobie samej. Dałem jej wskazówkę aby mówiła o tym, co in­te­re­su­je szefową a nie ją jako pracownika. Ostrzegłem, aby w żadnym wypadku nie kry­ty­kowała, nie po­tę­piała i nie po­uczała, a uczci­wie wy­ra­żała uzna­nie i wzbudziła w w szefowej szcze­re chę­ci. Udzieliłem jej jeszcze kilka innych wskazówek.

Zaproponowałem aby spisała na kartce kilka pomysłów marketingowych które przedstawi podczas rozmowy. Sam przy tym dołozyłem kilka punktów i razem uzbierało się ich z dziesięć. W tym jeden również sprzedany z książki Carnegiego: “Pa­mię­taj, że wła­sne na­zwi­sko to dla czło­wie­ka, naj­słod­sze i naj­waż­niej­sze spo­śród wszystkich słów świa­ta”.

Jaki był efekt? Żona wynegocjowała wynagrodzenie wyższe o 80%! I wszystkie pomysły z listy zostaną wdrożone! Niesamowite :)

Podsumowanie

Książka porusza tematy z pewnego punktu widzenia oczywiste. Ale tak się tylko może wydawać. Będąc nastawionym na ludzi, po przeczytaniu jej tylko upewnisz się w tym, że to jak postępujesz jest prawidłowe. Jeśli nie raz używałeś ciętego języka – przestaniesz. I to nie dlatego, żeby pochlebiać innym. O nie, autor sam tego odradza. Dlatego, że zmienisz swoje własne nastawienie do ludzi i zaczniesz ich rozumieć. Zaczniesz myśleć z ich punktu widzenia. Polecam ją jako zupełny laik i osoba czytająca pierwszy raz tego typu książkę. Wywarła na mnie spore wrażenie. Tym bardziej że każdą myśl, każdy cytat analizowałem pod kątem swojego zawodu i kontaktów z klientami, przełożonymi czy innymi współpracownikami. Ktoś może powiedzieć, że rady udzielane przez osobę żyjącą w latach dwudziestych ubiegłego wieku i to w tak odmiennej kulturowo społeczności nijak się mają do dzisiejszej rzeczywistości. Czy aby na pewno? Oceńcie sami.

Odnośnik do książki

Autor: Dale Carnegie

ISBN: 978-8-3623-0477-6

Format: , stron:

Data wydania: 2013-08-28

Opis: Sekretem sukcesu tej książki jest jej prostota. A jak wiadomo najtrudniej pisać najprościej. Każda rada w niej zawarta wydaje się oczywista. Człowiecza mądrość tkwi w podświadomości. Sztuką jest jej wydobycie i zastosowanie w działaniu. Niewielu to potrafi. Carnegie tak. Po mistrzowsku. Jak zdobyć przyjaciół... ułatwia swobodne poruszanie się w biznesie. Przydaje się zn

Cena: 23.00 zł

Artykuł Jak zjednać sobie ludzi i być lepszym programistą pochodzi z serwisu Krzysztof Jelonek.

Testy PHP 7.0.0beta2 w Windows

$
0
0

PHP 7

Dziesiątego lipca 2015 została wydana wersja PHP 7.0.0 Beta1. Na dzień dzisiejszy dostępna jest już do pobrania Beta3 (6 sierpnia 2015), a najnowsze źródła i wersje skompilowane można pobrać stąd. Kolejnym wydaniem będzie już PHP 7 RC1, którego udostępnienie planowane jest na 20 sierpnia i wszystko wskazuje na to, że wersja finalna zostanie wydana 12 listopada 2015.

Aby rozpocząć zabawę z PHP7 w Windowsie najłatwiej zrobić to poprzez instalację WAMP Stack Installers (pobierz instalator), w skład którego wchodzi:

  • Apache 2.4.16
  • MySQL 5.6.26
  • PHP 7.0.0beta2
  • PHPMyAdmin 4.4.7
  • ImageMagick 6.7.6-6-Q8
  • SQLite 3070603
  • ModSecurity 2.9.0
  • Heroku client
  • Git 1.9.5
  • Ruby 2.2.2-i386-mingw32

Pakiet zainstalowałem w najnowszym Windowsie 10 bez żadnych problemów.

Co nowego w PHP 7?

 

Scalar Type Hints v0.5

Na początek to, na co czekaliśmy od dłuższego czasu, czyli wskazywanie typów skalarnych.

function sum(int $number1, int $number2) {
    return $number1 + $number2;
}

Wywołanie powyższej funkcji z błędnym typem parametrów zwróci błąd (Error):

Wywołanie:
echo sum('numer 1', 'numer 2');

//Wynik:
//TypeError: Argument 1 passed to sum() must be of the type integer, string given [...]

Jednak komunikat ten nie zostanie wyświetlony bezpośrednio na ekranie, a zostanie dopisany do error loga, a skrypt zakończy działanie.
Tego typu błędy można obsłużyć w bloku try / catch (Error) o czym napiszę poniżej.

Prześledźmy jeszcze poniższe wywołania tej samej funkcji:

echo sum('1', '2');
echo sum('1', '2 Notatnik programisty testuje!!!');
echo sum('1', '       2');

//Wynik wywołania wszystkich linii:
//3

Skrypt zakończy działanie bez żadnych błędów, a w error logu pojawi się komunikat:

PHP Notice:  A non well formed numeric value encountered in [...]

Jednak próba wywołania funkcji z tymi parametrami zwróci błąd:

echo sum('1', 'test 2');

Jak widać silnik php próbuje rzutować jawnie określone typy tekstowe na liczby, jednak robi to w dalszym ciągu niepoprawnie, tak jak to miało miejsce w poprzednich wersjach. Takie zachowanie w dalszym ciągu jest nielogiczne, zwłaszcza dla tych programistów, którzy na co dzień kodują w Javie czy C++. Mimo wszystko, to dobry kierunek rozwoju i trzeba mieć na uwadze, że wersja na której wykonuję testy to jednak jest beta.

Sprawdźmy jeszcze jeden przykład:

function sum(int $number1, int $number2) {
    return $number1 + $number2;
}

echo sum(1.99, 1.99);

//Wynik:
//2

Próba przekazania wartości typu float do funkcji przyjmującej typ int spowoduje rzutowanie wartości (które będzie w tym przypadku stratne).

Istnieje możliwość wprowadzenia bardziej restrykcyjnej kontroli przekazywanych typów poprzez zdeklarowanie w pierwszej linii skryptu:

declare(strict_types=1);

Ważne aby ta deklaracja była w pierwszej linii skryptu. Zobaczcie przykład:

<pre>
<?php
	declare(strict_types=1);
?>
</pre>

Zwróci on błąd:

PHP Fatal error:  strict_types declaration must be the very first statement in the script in [...]

A tutaj prawidłowa deklaracja:

<?php
	declare(strict_types=1);
?>
<pre>
</pre>

 

Throwable Interface

W PHP 7 możemy w jawny sposób obsługiwać wyjątki znane do tej pory jako Fatal Error.
Interfejs wygląda następująco:

  • interface Throwable
    • Exception implements Throwable
    • Error implements Throwable (Replaces EngineException)
      • TypeError extends Error
      • ParseError extends Error

Weźmy za przykład wywołanie wcześniej zdefiniowanej funkcji do sumowania wartości dwóch liczb, do której przekażemy tekst zamiast liczb:

try {
    echo sum('Notatnik', 'programisty');
} catch (Exception $e) {
    echo 'Wyjątek: ' . $e->getMessage();
} catch (Error $e) {
    echo 'Błąd: ' . $e->getMessage();
}

//Wynik:
//Błąd: Argument 1 passed to sum() must be of the type integer, string given, called in [...]

Jak widać błąd ten zostanie przechwycony w bloku catch(Error).

Kolejny przykład, to próba wywołania nieistniejącej funkcji:

try {
    echo sumNotExistsFunction('Notatnik', 'programisty');
} catch (Exception $e) {
    echo 'Wyjątek: ' . $e->getMessage();
} catch (Error $e) {
    echo 'Błąd: ' . $e->getMessage();
}

//Wynik:
//Błąd: Call to undefined function sumNotExistsFunction()

 

Return Type Declarations

Przykład deklaracji zwracanego typu do naszej funkcji:

function sum(int $number1, int $number2): int {
    return ($number1 + $number2);
}

Należy zwrócić uwagę, że specyficznym przypadkiem jest wartośc null. Próba utworzenia takiej funkcji:

function sum(int $number1, int $number2): int {
    return null;
}

Zwróci błąd:

TypeError: Return value of sum() must be of the type integer, null returned in

Combined Comparison (Spaceship) Operator

Operator porównania <=>zwraca wartości:

  • -1, gdy prawa strona jest mniejsza od lewej
  • 0, gdy obie strony są takie same
  • 1, gdy prawa strona jest większa od lewej

Przykłady:

// int
echo 1 <=> 1; 				// wynik: 0
echo 1 <=> 2; 				// wynik: -1
echo 2 <=> 1; 				// wynik: 1
 
// float
echo 1.5 <=> 1.5; 			// wynik: 0
echo 1.5 <=> 2.5; 			// wynik: -1
echo 2.5 <=> 1.5; 			// wynik: 1
 
// text
echo "a" <=> "a"; 			// wynik: 0
echo "a" <=> "b"; 			// wynik: -1
echo "b" <=> "a"; 			// wynik: 1
 
echo "a" <=> "aa"; 			// wynik: -1
echo "zz" <=> "aa"; 		// wynik: 1
 
// tablice
echo [] <=> []; 				// wynik: 0
echo [1, 2, 3] <=> [1, 2, 3]; 	// wynik: 0
echo [1, 2, 3] <=> []; 			// wynik: 1
echo [1, 2, 3] <=> [1, 2, 1]; 	// wynik: 1
echo [1, 2, 3] <=> [1, 2, 4]; 	// wynik: -1
 
// obiekty
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; 				// wynik: 0
 
$a = (object) ["a" => "b"]; 
$b = (object) ["a" => "c"]; 
echo $a <=> $b; 				// wynik: -1
 
$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; 				// wynik: 1
 
// UWAGA! Porównywane są tylko wartości:
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; 				// wynik: 0

Anonymous Class Support

PHP 7 wspiera możliwość tworzenia anonimowych klas (od dawna znanych np. przez programistów Javy).

Przykład:

$object = new class($i) {
    public function __construct() {
        echo 'Hello World';
    }
};

// Wynik: 
// Hello World

 

Pozostałe zmiany:

Context Sensitive Lexer
Add preg_replace_callback_array function
Reliable User-land CSPRNG
Generator Delegation
Reserve More Type Names in PHP 7
Constructor behaviour of internal classes
Reclassify E_STRICT notices
Remove PHP 4 Constructors
Remove the date.timezone warning
Fix “foreach” behavior
Removal of dead SAPIs and extensions
Jsond
Preserve Fractional Part in JSON encode
Fast Parameter Parsing API
Unicode Codepoint Escape Syntax
Native TLS
Null Coalesce Operator
Integer Semantics
ZPP Failure on Overflow
Move the phpng branch into master
Abstract Syntax Tree
Uniform Variable Syntax
64 bit platform improvements for string length and integer
Closure::call
Fix list() behavior inconsistency
Remove alternative PHP tags
switch.default.multiple
Catchable “call to a member function of a non-object”
Filtered unserialize()
ICU IntlChar class
Introduce session_start() INI options as array
Remove hex support in numeric strings
Expectations
Group Use Declarations
Exceptions in the engine
Generator Return Expressions
Continue output buffering
intdiv()
Fix handling of custom session handler return values
Turn gc_collect_cycles into function pointer

 

Godne polecenia książki do PHP:

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie czwarte

PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie czwarte

Autor: Luke Welling, Laura Thomson

ISBN: 978-83-246-3177-3

Format: 172x245, stron: 856

Data wydania: 2009-10-23

Opis: Kolejne, uaktualnione wydanie najbardziej znanego, bestsellerowego podręcznika dla webmasterów na temat tworzenia dynamicznych witryn internetowych! Ponad 30 000 sprzedanych egzemplarzy poprzednich wydań!!! Recepta na sukces w przypadku tworzenia profesjonalnych stron WWW jest niezwykle prosta: wystarczą ogromne możliwości PHP, niezrównana wydajność MySQL i wielka, chętna do pomocy sp

Cena: 109.00 zł

PHP. Obiekty, wzorce, narzędzia. Wydanie IV

PHP. Obiekty, wzorce, narzędzia. Wydanie IV

Autor: Matt Zandstra

ISBN: 978-83-246-9178-4

Format: 168x237, stron: 488

Data wydania: 2014-09-08

Opis: Twój przewodnik po obiektowym PHP! Język PHP przebył długą drogę od swoich początków do obecnego poziomu rozwoju. Dziś jest pełnoprawnym, obiektowym językiem programowania, wciąż zdobywającym większe zaufanie i używanym w coraz większych projektach. Jeżeli znasz ten język od dawna, lecz nie jesteś przekonany, że nadaje się on do zaawansowanych zastosowań, albo

Cena: 79.00 zł
(Cena e-booka: 62.90 zł)

PHP5. Praktyczny kurs

PHP5. Praktyczny kurs

Autor: Marcin Lis

ISBN: 83-246-0307-7

Format: B5, stron: 432

Data wydania: 2006-04-11

Opis: Znajomość języka PHP wykorzystywanego do tworzenia dynamicznych stron WWW to dziś jedna z podstawowych umiejętności wymaganych od webmastera. Era statycznych stron tworzonych za pomocą języka HTML przeminęła już dawno, a dynamiczne generowanie treści stało się obecnie standardem. Język PHP i baza danych MySQL stanowią platformę o wielkich możliwościach, stosowaną do tworzenia

Cena: 49.00 zł
(Cena e-booka: 49.00 zł)

 

Podsumowanie

Ten wpis ma charakter typowo warsztatowy, tzn. z osobiście przeprowadzonych testów. Z biegiem czasu i poznawania kolejnych nowości w PHP 7 będę go aktualizował. Tymczasem zachęcam do zainstalowania wersji beta PHP 7 i poznawania nowych funkcji.

Jednocześnie zachęcam do polubienia Notatnika Programisty na Facebooku, gdzie na bieżąco aktualizowane są wpisy na blogu, a także umieszczane są informacje na temat promocji książek związanych z programowaniem i Arduino.

 

Artykuł Testy PHP 7.0.0beta2 w Windows pochodzi z serwisu Krzysztof Jelonek.

Zbiór przykładów programistycznych w różnych językach

$
0
0

Poniżej interesująca lista odnośników do rozwiązań kilkuset zadań programistycznych w różnych językach programowania:

Książki algorytmiczne

Algorytmy bez tajemnic

Algorytmy bez tajemnic

Autor: Thomas H. Cormen

ISBN: 978-83-246-7485-5

Format: 168x237, stron: 224

Data wydania: 2013-11-14

Opis: Poznaj świat algorytmów! Każdy program działa według określonego algorytmu - Twoja nawigacja GPS, system płatności elektronicznych, wyszukiwarka Google. Algorytmy są jak przepisy kucharskie: zrób to, sprawdź tamto. Jednak konsekwencje popełnienia błędu w algorytmie są zupełnie inne niż w przypadku niesprawdzonego przepisu. To właśnie algorytmy decydują o czasie wykonania sko

Cena: 31.99 zł
(Cena druku: 39.90 zł)

Algorytmy i struktury danych

Algorytmy i struktury danych

Autor: Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman

ISBN: 83-7361-177-0

Format: B5, stron: 448

Data wydania: 2003-09-24

Opis: W niniejszej książce przedstawiono struktury danych i algorytmy stanowiące podstawę współczesnego programowania komputerów. Algorytmy są niczym przepis na rozwiązanie postawionego przed programistę problemu. Są one nierozerwalnie związane ze strukturami danych - listami, rekordami, tablicami, kolejkami, drzewami... podstawowymi elementami wiedzy każdego programisty. Książka obejm

Cena: 65.00 zł

Algorytmy. Almanach

Algorytmy. Almanach

Autor: George Heineman, Gary Pollice, Stanley Selkow

ISBN: 978-83-246-5847-3

Format: , stron: 352

Data wydania: 2012-07-13

Opis: Cała wiedza o algorytmach w jednym podręczniku! Jaki wpływ na różne algorytmy wywierają podobne decyzje projektowe? Jak rozwiązywać problemy dotyczące kodowania? Jak wykorzystać zaawansowane struktury danych do usprawnienia algorytmów? Tworzenie niezawodnego oprogramowania wymaga stosowania sprawnych algorytmów. Jednak programiści rzadko poświęcają im uwagę, dopóki nie poja

Cena: 39.00 zł
(Cena druku: 59.00 zł)

 

Artykuł Zbiór przykładów programistycznych w różnych językach pochodzi z serwisu Krzysztof Jelonek.

Dwa darmowe źródła wiedzy o Javascript

$
0
0

Jeśli nie wiesz jaka jest różnica między:

//tym:
var myFunction = (function () {
	console.log('OK');
});

//a tym:
var myFunction = (function () {
	console.log('OK');
}());

//lub tym:
var myFunction = (function () {
	console.log('OK');
})();

To być może warto podszkolić się z Javascriptu :)

Dwie darmowe książki do czytania online:

  1. JavaScript Allongé, the “Six” Edition
  2. You Don’t Know JS (book series)

Swoją drogą powyższe przykłady pokazują różnice między zwykłym wyrażeniem funkcyjnym, a tzw. funkcją “natychmiastową” (immediate function). Funkcja “natychmiastowa” wykonywana jest bezpośrednio po jej zdefiniowaniu. Zobaczcie różnice:

console.log('start');
var myFunction = (function () {
	console.log("wewnątrz funkcji");
});
console.log('end');

// WYNIK W KONSOLI:
// start (05:32:57:080)
// end (05:32:57:082)

console.log('start');
var myFunction = (function () {
	console.log("wewnątrz funkcji");
}());
console.log('end');

//LUB

console.log('start');
var myFunction = (function () {
	console.log("wewnątrz funkcji");
})();
console.log('end');


// DAJE WYNIK:
// start (05:34:54:356)
// wewnątrz funkcji (05:34:54:357)
// end (05:34:54:359)

 

Mi swego czasu spodobała się lektura tej książki:

JavaScript. Wzorce

JavaScript. Wzorce

Autor: Stoyan Stefanov

ISBN: 978-83-246-5034-7

Format: 168x237 , stron: 200

Data wydania: 2012-04-26

Opis: Twórz lepszy kod JavaScript! Jakie jest najlepsze podejście do tworzenia aplikacji w języku JavaScript? Z tą książką, zawierającą najlepsze praktyki i wiele wzorców kodowania, znajdziesz odpowiedź na to pytanie. Jeśli jesteś doświadczonym programistą szukającym sposobów rozwiązania problemów związanych z obiektami, funkcjami, dziedziczeniem i innymi aspektami języka, przedstawione tu abstrakcje i szablony sprawdzą się idealnie. Książka napisana przez eksperta języka JavaScript Stoyana Stefanova - starszego inżyniera Yahoo! i architekta narzędzia do optymalizacji stron WWW YSlow 2.0 - zawiera wiele praktycznych wskazówek w zakresie implementacji opisywanych wzorców, a także kilka całościowych przykładów. Znajdziesz w niej również opis wielu antywzorców, czyli podejść, które tak naprawdę powodują więcej problemów, niż są tego warte. Dowiedz się, jak: tworzyć łatwy w utrzymaniu kod wybierać właściwe nazwy dla zmiennych, metod i funkcji wykorzystać klasyczne wzorce programowania skorzystać ze wzorców specyficznych dla środowiska przeglądarki internetowej Poznaj tajniki tworzenia łatwego w utrzymaniu kodu źródłowego!

Cena: 31.99 zł
(Cena druku: 39.00 zł)

Również można tu poczytać o takich zagadnieniach jak właśnie funkcje “natychmiastowe”, czy samodefiniujące. Umieszczone są przykłady wzorców tworzenia obiektów takich jak:

  • namespace pattern
  • module pattern
  • sandbox pattern
  • static members
  • chaining pattern
  • method() method

Wzorców wielokrotnego użycia:

  • default pattern
  • rent a constructor
  • rent and set prototype
  • share the prototype
  • a temporary constructor

Czy klasycznych wzorców projektowych:

  • singleton
  • factory
  • iterator
  • decorator
  • strategy
  • facade
  • proxy
  • mediator
  • observer

A jakie Wy znacie godne polecenia źródła wiedzy o javascript?

 


Artykuł Dwa darmowe źródła wiedzy o Javascript pochodzi z serwisu Krzysztof Jelonek.

Nauka Pythona, czyli jak rozpocząć przygodę z Pythonem?

$
0
0

Python_logo_and_wordmark.svg
Na sam początek krótkie wyjaśnienie odnośnie samej wersji Pythona. Najnowsze wersje serii trzeciej nie są kompatybilne wstecznie z serią drugą, co za każdym razem rodzi pytanie początkującego programisty: “którą wersję wybrać”? Mało tego, seria druga wydaje się być jeszcze ciągle popularniejsza niż trzecia. Mimo wszystko, nowe funkcje dodawane są tylko do serii 3.x. W związku z tym część dodatkowych bibliotek działa tylko na wersji drugiej, a część tylko na trzeciej. Jeśli nie pracowałeś nigdy z Pythonem, wybierz koniecznie wersję trzecią. Jakie są różnice między Pythonem 2.x i 3.x? Przeczytaj.

(nauka pythona)

Źródła wiedzy

Darmowe książki dostępne online:

Polskojęzyczne kursy i wideokursy dla początkujących:

Pozostałe:

Płatne kursy wideo:

Książki:

  • Learning Python, 5th Edition- odnośnik do Amazonu ponieważ jest niedostępna w polskim tłumaczeniu (w piątej edycji). Helion posiada w ofercie tłumaczenie ale czwartej edycji.
  • Python. Receptury. Wydanie III (Python Cookbook, 3rd Edition)
    Przez wielu uznawana za absolutnie obowiązkową pozycję w bibliotece programisty. Na dzień dzisiejszy (04.09.2015) można ją kupić w promocji w polskim tłumaczeniu:

    Python. Receptury. Wydanie III

    Python. Receptury. Wydanie III

    Autor: David Beazley, Brian K. Jones

    ISBN: 978-83-246-8183-9

    Format: 168x237, stron: 600

    Data wydania: 2014-01-31

    Opis: Python to język programowania z ponad 20-letnią historią. Opracowany na początku lat 90. ubiegłego wieku, błyskawicznie zdobył sympatię programistów. Jest używany zarówno do pisania przydatnych skryptów czy małych narzędzi, jak i do pracy nad dużymi projektami. Korzysta z automatycznego zarządzania pamięcią oraz pozwala na podejście obiektowe i funkcyjne do t

    Cena: 79.00 zł
    (Cena druku: 99.00 zł)


    Jeśli nie lubicie polskich tłumaczeń tutaj link do Amazonu.
  • Python. Leksykon kieszonkowy. Wydanie V

    Python. Leksykon kieszonkowy. Wydanie V

    Python. Leksykon kieszonkowy. Wydanie V

    Autor: Mark Lutz

    ISBN: 978-83-246-9433-4

    Format: 122x194, stron: 256

    Data wydania: 2014-10-10

    Opis: Podręczny przewodnik po języku Python! Język Python obecny jest na rynku od ponad 20 lat. Opracowany został na początku lat dziewięćdziesiątych XX wieku i błyskawicznie zaczął zdobywać uznanie programistów na całym świecie. Python sprawdza się doskonale w pisaniu skryptów oraz narzędzi, a w dużym projekcie także nie zawiedzie oczekiwań. Język ten korzysta z aut

    Cena: 27.90 zł
    (Cena druku: 34.90 zł)

  • Writing Idiomatic Python
  • Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns (Developer’s Library)
  • Black Hat Python. Język Python dla hakerów i pentesterów

    Black Hat Python. Język Python dla hakerów i pentesterów

    Black Hat Python. Język Python dla hakerów i pentesterów

    Autor: Justin Seitz

    ISBN: 978-83-283-1253-1

    Format: , stron:

    Data wydania:

    Opis: Poznaj nowe zastosowania języka Python! Python to zaawansowany język programowania z ponad 20-letnią historią, kt&oacute;ry dzięki przemyślanej architekturze, ciągłemu rozwojowi i dużym możliwościom zyskał sporą sympatię programist&oacute;w. Przełożyła się ona na liczbę dostępnych bibliotek i narzędzi wspierających tworzenie zar&oacute;wno prostych, jak i skompl

    Cena: 31.99 zł 31.99 zł
    (Cena druku: 39.90 zł)

  • Python. Programuj szybko i wydajnie

    Python. Programuj szybko i wydajnie

    Python. Programuj szybko i wydajnie

    Autor: Micha Gorelick, Ian Ozsvald

    ISBN: 978-83-283-0469-7

    Format: 168x237, stron: 344

    Data wydania: 2015-05-08

    Opis: Wydajne aplikacje w języku Python! Python to skryptowy język programowania istniejący na rynku od wielu lat — jego pierwsza wersja pojawiła się w 1991 roku. Przejrzystość kodu źródłowego była jednym z głównych celów Guida van Rossuma, twórcy tego języka. Dziś Python cieszy się dużą popularnością, co z jednej strony świadczy o jego przydatnośc

    Cena: 47.00 zł
    (Cena druku: 59.00 zł)

  • TDD w praktyce. Niezawodny kod w języku Python

    TDD w praktyce. Niezawodny kod w języku Python

    TDD w praktyce. Niezawodny kod w języku Python

    Autor: Harry J.W. Percival

    ISBN: 978-83-283-1380-4

    Format: , stron:

    Data wydania:

    Opis: &bdquo;Ta książka to znacznie więcej niż tylko wprowadzenie do programowania sterowanego testami w Pythonie. To jest pełny kurs przedstawiający najlepsze praktyki, od początku do końca na przykładzie nowoczesnego programowania aplikacji sieciowej w Pythonie.&rdquo; &mdash;&nbsp;Kenneth&nbsp;Reitz, członek Python Software Foundation Tw&oacute;rz niezawodne ap

    Cena: 54.99 zł 54.99 zł
    (Cena druku: 69.00 zł)

Dobre praktyki:

Artykuł Nauka Pythona, czyli jak rozpocząć przygodę z Pythonem? pochodzi z serwisu Krzysztof Jelonek.

Interaktywne środowisko do poznawania języków programowania

$
0
0

Całkiem przyjemne narzędzie do testowania składni różnych języków programowania w interaktywnym środowisku. Uruchamiasz i piszesz kod bezpośrednio w przeglądarce. W różnych językach. Polecam!

 

Jeśli nie działa kliknij tutaj.

Sam kod repl.it jest open source – dostępny na GitHub.

repl_it
Wspierane środowiska na dzień 04.09.2015:
APL, Bloop, BrainF***, C, C++, CoffeeScript, Emoticon, Forth, Go, Java, JavaScript, Javascript.next, Kaffeine, LOLCODE, Lua, Move, Nodejs, PHP, Python2, Python3, QBasic, Roy, Ruby, Scheme, Unlambd, ioj

Uwaga! Do końca dnia, tj. 4 września 2015 trwa promocja na książki związane z programowaniem -40% na e-booki

 

 

Artykuł Interaktywne środowisko do poznawania języków programowania pochodzi z serwisu Krzysztof Jelonek.


Adafruit Flora Hello World – rozpoczynamy zabawę

$
0
0

Tak jak pisałem w lipcu, zaopatrzyłem się w zestaw Adafruit Flora w sklepie kamami.pl. Niestety zarówno w lipcu jak i w sierpniu cierpiałem na deficyt czasu i nie zdążyłem zabrać się do zabawy z tymi elementami. Dziś zaczynam serię wpisów o Adafruit Florze i mam nadzieję, że wiodącymi wrześniowymi postami na blogu będą właśnie te związane z “odzieżą inteligentną”. Dziś zupełne podstawy, czyli integracja z Arduino IDE, instalacja sterowników i prosty przykładowy program.

flora_set_2

Informacyjnie: Adafruit Flora to sterownik dla “inteligentnej odzieży”. Dzięki zastosowaniu dodatkowych modułów i przewodzących nici, możemy wykonać efektowne projekty jak np. podświetlana sukienka:

Instalacja

  1. Arduino IDE

    1. Jeśli posiadamy już zainstalowane Arduino IDE w wersji wcześniejszej niż 1.6.4, musimy je zaktualizować. Na dzień dzisiejszy (tj. 06.09.2015) najnowsza wersja to 1.6.5, którą możemy pobrać stąd.
      Uwaga!
      Instalacja nowej wersji wymaga odinstalowania bieżącej. Ważne aby zrobić sobie kopię zapasową całego katalogu Arduino IDE, ponieważ cała zawartość zostanie usunięta (w tym ewentualnie pobrane wcześniej biblioteki).
    2. Uruchomiamy Arduino IDE, wchodzimy w menu Plik->Preferencje.
    3. W polu “Additional Board Manager URLs:” wpisujemy:
      https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
      Arduino_opcje
      Zatwierdzamy ustawienia.
    4. Wybieramy z menu Narzędzia->Płyta: “…”->Boards Manager…
      arduino_board_manager
    5. Ustawiamy Type: Contributed, wybieramy pozycję “Adafruit AVR Boards by Adafruit” i klikamy “Install“.
      flora_install
    6. Restartujemy Arduino IDE i z menu Narzędzia->Płyta: “…” wybieramy pozycję: “Adafruit Flora”.
  2. Sterowniki USB do Flory – Windows 8 i Windows 10

    Ponieważ zaktualizowałem swojego Windows 7 do “dziesiątki”, dlatego pobrałem aktualne sterowniki stąd. Pobrany plik rozpakowujemy, klikamy prawym przyciskiem na pliku “flora.inf” i wybieramy opcję “Zainstaluj“.

I to tyle, nasza Flora jest gotowa do pracy z Arduino IDE. Oryginalne wskazówki instalacji i sterowniki do innych systemów operacyjnych możecie znaleźć na adafruit.com.

Hello World z Adafruit Flora

Flora posiada wbudowaną diodę LED podobnie jak Arduino Leonardo. Różnica jest taka, że Leonardo udostępnia ją na wyjściu 13, podczas gdy Adafruit Flora na wyjściu 7. Dlatego nasz pierwszy przykładowy program nie będzie się niczym różnił w porównaniu z Arduino Leonardo.

const int ledPin = 7;
const int blinkDelay = 500;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(blinkDelay);
  digitalWrite(ledPin, LOW);
  delay(blinkDelay);
}

Samą płytkę podłączamy kablem mini USB (Arduino Leonardo posiada mikro USB).

W tym wpisie opisuję posiadany zestaw do Flory. Z biegiem czasu każdy z tych elementów postaram się wykorzystać do demonstracyjnego projektu i zaprezentowania Wam na blogu.

Wideokurs do Arduino

Autor: Paweł Matyszok

ISBN: 978-83-283-1045-2

Format: , stron:

Data wydania:

Opis: Obierz kurs na... Arduino! Platforma Arduino jest absolutnie niezwykłym wynalazkiem. Dzięki niej każdy może zbudować działający, zaawansowany układ elektroniczny, kt&oacute;ry spełni jego indywidualne wymagania. Okazuje się, że wcale nie trzeba być inżynierem, by stworzyć taki układ: Arduino zapewnia wszystko, o czym może zamarzyć majsterkowicz czy entuzjasta elektroniki. Mo

Cena: 99.00 zł 99.00 zł

Książki do Arduino

Arduino dla początkujących. Kolejny krok

Arduino dla początkujących. Kolejny krok

Autor: Simon Monk

ISBN: 978-83-283-0016-3

Format: 158x235, stron: 240

Data wydania: 2015-02-13

Opis: Arduino — mała płytka o ogromnym potencjale — otworzyła świat elektroniki dla szerokiego grona pasjonatów, którym pozwoliła wreszcie zrealizować wymarzone projekty. Błyskawicznie zdobyła ogromną popularność, na co szybko zareagował rynek — pojawiło się mnóstwo dodatkowych akcesoriów, instrukcji i książek. Wśród tych ostatnich

Cena: 31.99 zł
(Cena druku: 39.00 zł)


Arduino w akcji

Arduino w akcji

Autor: Martin Evans, Joshua Noble, Jordan Hochenbaum

ISBN: 978-83-246-6359-0

Format: 168x237, stron: 368

Data wydania: 2014-05-17

Opis: Poznaj możliwości platformy Arduino! Arduino to niesamowita platforma, która otworzyła świat elektroniki przed wszystkimi. Dzięki niej możesz zbudować zaawansowany układ elektroniczny bez konieczności wykonywania czasochłonnych projektów i żmudnych obliczeń. Arduino błyskawicznie zyskało ogromną popularność, a w ślad za nią pojawiły się w sprzedaży liczne dod

Cena: 54.99 zł
(Cena druku: 69.00 zł)

Artykuł Adafruit Flora Hello World – rozpoczynamy zabawę pochodzi z serwisu Krzysztof Jelonek.

Adafruit Flora – Flora RGB Smart NeoPixel v.2

$
0
0

Drugi wflora_neo_pixel_singlepis z serii Adafruit Flora rozpoczynam od podstaw, czyli obsługi diod RGB (w które zaopatrzyłem się w kamami.pl). Smart NeoPixel, to moduły z diodami LED RGB zaprojektowane specjalnie do inteligentnych ubrań. Do obsługi wystarczy jeden pin mikrokontrolera. Możemy łączyć ze sobą więcej diod szeregowo.

Za ok. 30-40 zł. dostajemy cztery diody RGB. Jeden kontroler Flora w teorii może obsłużyć 500 pikseli z prędkością 30 FPS.

Krótka specyfikacja
Napięcie zasilania: od 5 V do 9 V
Pobór prądu: 18 mA dla jednej diody
Zastosowane diody: LED RGB WS2812
Średnica: 12,5 mm

Przygotowując pierwszy projekt z wykorzystaniem dodatkowych elementów do Adafruit Flory postanowiłem wykorzystać standardową płytkę stykową ze zworkami. Niewątpliwą wadą tego mojego pomysłu są problemy ze stykami. W związku z tym nie polecam tego rozwiązania, a sugeruję wykorzystanie krokodylków (docelowo w ubraniach nici przewodzących) lub użycie lutownicy.

led_pixels_alligator-clips-flora-and-pixel-lit-up-v2

Po połączeniu diod nićmi przewodzącymi może to wyglądać tak:

adafruit-flora-led-rgb-smart-neopixel-v2-4-szt

Połączenie z Florą:

flora_neo_pixel_bb

 

Biblioteka do obsługi Neo Pixel v2

W celu obsługi podzespołów Neo Pixel v2 pobieramy te biblioteki. Następnie rozpakowujemy archiwum do katalogu instalacyjnego Arduino IDE: libraries. Restarujemy Arduino IDE i wybieramy z menu Plik->Przykłady->Adafruite NeoPixel->standtest.

Zakładając, że naszym sterującym PINem jest ten o numerze 6 i podłączamy jeden element, nasz program wygląda następująco:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 6

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

A poniżej efekt końcowy:

W jaki sposób można wykorzystać diody RGB?

 

Zobaczcie:


Wideokurs do Arduino

Autor: Paweł Matyszok

ISBN: 978-83-283-1045-2

Format: , stron:

Data wydania:

Opis: Obierz kurs na... Arduino! Platforma Arduino jest absolutnie niezwykłym wynalazkiem. Dzięki niej każdy może zbudować działający, zaawansowany układ elektroniczny, kt&oacute;ry spełni jego indywidualne wymagania. Okazuje się, że wcale nie trzeba być inżynierem, by stworzyć taki układ: Arduino zapewnia wszystko, o czym może zamarzyć majsterkowicz czy entuzjasta elektroniki. Mo

Cena: 99.00 zł 99.00 zł

Książki do Arduino

Arduino dla początkujących. Kolejny krok

Arduino dla początkujących. Kolejny krok

Autor: Simon Monk

ISBN: 978-83-283-0016-3

Format: 158x235, stron: 240

Data wydania: 2015-02-13

Opis: Arduino — mała płytka o ogromnym potencjale — otworzyła świat elektroniki dla szerokiego grona pasjonatów, którym pozwoliła wreszcie zrealizować wymarzone projekty. Błyskawicznie zdobyła ogromną popularność, na co szybko zareagował rynek — pojawiło się mnóstwo dodatkowych akcesoriów, instrukcji i książek. Wśród tych ostatnich

Cena: 31.99 zł
(Cena druku: 39.00 zł)


Arduino w akcji

Arduino w akcji

Autor: Martin Evans, Joshua Noble, Jordan Hochenbaum

ISBN: 978-83-246-6359-0

Format: 168x237, stron: 368

Data wydania: 2014-05-17

Opis: Poznaj możliwości platformy Arduino! Arduino to niesamowita platforma, która otworzyła świat elektroniki przed wszystkimi. Dzięki niej możesz zbudować zaawansowany układ elektroniczny bez konieczności wykonywania czasochłonnych projektów i żmudnych obliczeń. Arduino błyskawicznie zyskało ogromną popularność, a w ślad za nią pojawiły się w sprzedaży liczne dod

Cena: 54.99 zł
(Cena druku: 69.00 zł)

Artykuł Adafruit Flora – Flora RGB Smart NeoPixel v.2 pochodzi z serwisu Krzysztof Jelonek.

Kupiłem Raspberry PI 2

$
0
0

raspberry-pi-2-rpi2-model-b-1gbJakiś czas temu opublikowałem artykuł na Majsterkowo.pl w którym umieściłem odnośniki do zakupionych produktów w Botlandzie. Ponieważ artykułowi udało się wyjść z poczekalni, otrzymałem kod rabatowy w wysokości 150 zł. Postanowiłem go wykorzystać i zakupić sobie zestaw do Raspberry PI w wersji drugiej.

Mój zestaw składa się z następujących elementów:

Po wykorzystaniu kuponu rabatowego za wszystko zapłaciłem zaledwie 169,70 zł. razem z dostawą. Całkiem nieźle :)

Oprócz samego sprzętu posiadam również książkę (tak, zwykła książka – nie ebook) Raspberry PI. Receptury, którą z kolei wygrałem w konkursie zorganizowanym przez kamami.pl na Facebooku jeszcze w lipcu. Miło zaskoczyłem się wstępną lekturą tej pozycji – nie ma tu owijania w bawełnę, znajdziemy w niej praktyczne problemy / zadania wraz z ich rozwiązaniem. Z pomocą tej książki nauczymy się również podstaw Pythona. Polecam każdemu, kto chciałby rozpocząć przygodę z Raspberry PI.

 

Instalacja

Po włożeniu karty pamięci, podłączenia kabla HDMI do monitora i włączeniu zasilania, uruchamia się oprogramowanie NOOBs z którego wykonałem instalację systemu Raspbian. Instalator prowadzi za rękę, więc każdy sobie bez problemów poradzi. Jednak sama instalacja systemu (kopiowanie plików) może potrwać dłuższą chwilę czasu – zdążycie wypić kawę :)

Na samym końcu pojawi się nam narzędzie konfiguracyjne za pomocą którego zmienimy hasło użytkownika, włączymy automatyczne uruchamianie środowiska graficznego i jeszcze kilka innych przydatnych funkcji.

rpi_config

Narzędzie to możemy uruchomić komendą:
sudo raspi-config

Środowisko graficzne uruchamiamy poleceniem:
startx

To co jeszcze na szybko zainstalowałem przed rozpoczęciem zabawy z urządzeniem to:

  • MC (przeglądanie plików w konsoli):
    sudo apt-get install mc
  • Tight VNC (zdalny dostęp do środowiska graficznego):
    sudo apt-get install tightvncserver
  • Arduino IDE (to tak raczej na odległą przyszłość):
    sudo apt-get install arduino
  • Gimp
    sudo apt-get install gimp
  • HTOP (przegląd procesów)
    sudo apt-get install htop

Instalacja karty WIFI TP-Link TL-WN725N

W pierwszej kolejności sprawdzamy dokładną wersję systemu:

pi@raspberrypi ~ $ uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux

A następnie wyszukujemy odpowiednią paczkę do pobrania tutaj. W moim przypadku było to: 8188eu-v7-20150406.tar.gz.

Pobieramy plik:

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-v7-20150406.tar.gz

Rozpakowujemy:

tar -zxvf 8188eu-v7-20150406.tar.gz

I instalujemy:

sudo install -p -m 644 8188eu.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
sudo depmod -a
sudo modprobe 8188eu

Po wykonaniu restartu będziemy mogli się już połączyć z siecią przez WIFI (ikona obok zegara).

Po drobnym “tuningu” tak prezentuje się mój system:

rpi_desktop

Tak więc do bloga zostaje dodana kolejna kategoria: Raspberry PI :)

A tutaj jeszcze odnośnik do wymienionej wyżej książki w formacie ebooka, jeśli ktoś preferuje zamiast druku:

Raspberry Pi. Receptury

Raspberry Pi. Receptury

Autor: Simon Monk

ISBN: 978-83-246-9625-3

Format: 168x237, stron: 368

Data wydania: 2014-10-20

Opis: Wyobraź sobie komputer o rozmiarach niewiele większych od karty kredytowej, posiadający całkiem sporą moc obliczeniową, pracujący pod kontrolą systemu Linux i kosztujący grosze. Tak, taki sprzęt istnieje naprawdę! Mowa o Raspberry Pi — urządzeniu zaprojektowanym z myślą o nauce programowania dla dzieci, które sprawdziło się w wielu zastosowaniach i odniosło ogromny sukces na rynku komercyjnym jako serwer WWW, odtwarzacz filmów oraz platforma do budowy niezwykłych projektów elektronicznych. Brzmi intrygująco? Otwórz tę książkę i poznaj

Cena: 52.90 zł
(Cena druku: 67.00 zł)

Artykuł Kupiłem Raspberry PI 2 pochodzi z serwisu Krzysztof Jelonek.

Raspberry PI 2, nauka podstaw Pythona 3

$
0
0

Python_logo_and_wordmark.svgW jednym z ostatnich wpisów zebrałem sobie źródła wiedzy do nauki Pythona, a w międzyczasie kupiłem Raspberry PI 2. Jedno z drugim jest mocno powiązane, ponieważ minikomputer standardowo posiada zainstalowanego Pythona (zarówno w wersji drugiej jak i trzeciej), dzięki któremu od ręki można oprogramować Raspberry.

Python

Przyznam szczerze, że z wyjątkiem pobrania kilku narzędziowych skryptów pythonowych, nie miałem z nim nigdy do czynienia. W sensie poznania składni języka. Ale umiem już programować w wielu innych więc nie będzie problemów :)

Nie wiem jak Wy, ale ja wręcz uwielbiam ten moment, gdy rozpoczynam naukę nowego języka programowania. Pierwszy ‘hello world’, pobranie i wyświetlanie danych, parsowanie tekstów. Piszę ten artykuł już po wykonaniu kilku ćwiczeń i powiem tak – jestem mile zaskoczony samą składnią Pythona. Wszystko wydaje się być takie przejrzyste, czytelne. Trudno mi to nawet opisać, w każdym bądź razie jestem pełen optymizmu.

Zresztą, zobaczcie jakie zdanie mają znani programiści. Kojarzycie nazwisko Bruce Eckela, autora księżek takich jak „Thinking in C++”, „Thinking in Java”? Ja sam rozpoczynałem naukę tych dwóch języków właśnie od tych lektur. Bruce Eckel jest przekonany, że żaden język nie uczynił go tak produktywnym, jak Python. Twierdzi, że Python jest prawdopodobnie jedynym językiem, który skupia się na tym, by ułatwić pracę programiście. Tutaj możecie przeczytać wywiad. Wielu jest programistów, których do pierwszych kontaktów z Pythonem zachęcił artykuł Erica Raymonda (autora „The Cathedral and the Bazaar” – słynnego eseju na temat otwartego oprogramowania i Linuksa), w którym przyznaje, że Python został jego ulubionym językiem programowania.

Warsztaty

Aby rozpocząć naukę nie jest konieczna instalacja czegokolwiek, tutaj możecie uruchomić środowisko do programowania online.

Ok, zaczynam – ten wpis jest typowo warsztatowy, tzn. proste zadania i ich rozwiązania, zagadnienia i przykłady. Bez zbędnych opisów. Po prostu to, od czego zaczynam naukę czegoś nowego. I pamiętamy, w Pythonie nie ma bloków kodu oznaczanych klamrami, tutaj wcięcia mają znaczenie :)

  1. Zmienne, pobieranie danych od użytkownika, łączenie tekstu z liczbami
    name = input("Podaj imie:")
    years = 31
    print("Witaj " + name)
    print("Masz " + str(years) + " lat")
    
    #WYNIK:
    Podaj imie: Krzysiek
    Witaj Krzysiek
    Masz 31 lat
  2. Operacje na zmiennych tekstowych (wyszukiwanie, zamiana, wycinanie, długość)
    text = "1234567890"
    print(text.replace("2", "1"))
    print(text.find("2"))
    print(text[1:3])
    print(len(text))
    
    #wynik:
    1134567890
    1
    23
    10

    text = "Notatnik Programisty"
    print(text.lower())
    print(text.upper())
    
    #wynik
    notatnik programisty
    NOTATNIK PROGRAMISTY
  3. Instrukcje warunkowe
    number = 3
    if number > 3:
        print("a")
    else:
        print("b")
    
    #wynik
    b

    number2 = 5
    if number > 2 and number2 < 6:
        print("2.a")
    else:
        print("2.b")
    
    #wynik:
    2.a

    number1 = 3
    number2 = 3
    if number1 == number2:
    	print("Numery zgodne: " + str(number))
    
    #wynik:
    Numery zgodne: 3
  4. Pętle
    for i in range(5, 10):
        print(i)
    
    #wynik:
    5
    6
    7
    8
    9
  5. Funkcje
    def example():
        print("example function")
    example()
    
    #wynik:
    example function

    def example2(text = ''):
        print("example function " + text)
    example2("hello!")
    
    #wynik:
    example function hello!

    def example3():
        return "Hello"
    print(example3())
    
    #wynik:
    Hello
  6. Tablice
    a = ["notatnik", "programisty"]
    print(a)
    print(a[0] + ' ' + a[1])
    print("rozmiar: " + str(len(a)))
    
    a.append("krzysztofjelonek.net")
    print("Po dodaniu elementu: " + str(a))
    
    b = [1, 2, 3]
    a.extend(b)
    print("Po dodaniu b do a: a=" + str(a))
    
    b.insert(2, "nowy element")
    print("nowy element na index=2: " + str(b))
    b.pop()
    print("Po usunieciu ostatniego elementu: " + str(b))
    b.pop(1)
    print("Po usunieciu elementu o indeksie 1: " + str(b))
    
    #wynik:
    ['notatnik', 'programisty']
    notatnik programisty
    rozmiar: 2
    Po dodaniu elementu: ['notatnik', 'programisty', 'krzysztofjelonek.net']
    Po dodaniu b do a: a=['notatnik', 'programisty', 'krzysztofjelonek.net', 1, 2, 3]
    nowy element na index=2: [1, 2, 'nowy element', 3]
    Po usunieciu ostatniego elementu: [1, 2, 'nowy element']
    Po usunieciu elementu o indeksie 1: [1, 'nowy element']
  7. Podział tekstu na tablice
    csv = "jeden,dwa,trzy,cztery"
    row = csv.split(',')
    print(row)
    
    for column in row:
        print(column)
    
    #wynik:
    ['jeden', 'dwa', 'trzy', 'cztery']
    jeden
    dwa
    trzy
    cztery

     

Podsumowanie

To moje pierwsze ćwiczenia z Pythonem. Składnia wydaje się być wyjątkowo czytelna. Na pewno będę kontynuował ten wpis w osobnych artykułach.

 

Raspberry Pi. Receptury

Raspberry Pi. Receptury

Autor: Simon Monk

ISBN: 978-83-246-9625-3

Format: 168x237, stron: 368

Data wydania: 2014-10-20

Opis: Wyobraź sobie komputer o rozmiarach niewiele większych od karty kredytowej, posiadający całkiem sporą moc obliczeniową, pracujący pod kontrolą systemu Linux i kosztujący grosze. Tak, taki sprzęt istnieje naprawdę! Mowa o Raspberry Pi — urządzeniu zaprojektowanym z myślą o nauce programowania dla dzieci, które sprawdziło się w wielu zastosowaniach i odniosło ogromny sukces na rynku komercyjnym jako serwer WWW, odtwarzacz filmów oraz platforma do budowy niezwykłych projektów elektronicznych. Brzmi intrygująco? Otwórz tę książkę i poznaj

Cena: 52.90 zł
(Cena druku: 67.00 zł)

Python. Receptury. Wydanie III

Python. Receptury. Wydanie III

Autor: David Beazley, Brian K. Jones

ISBN: 978-83-246-8183-9

Format: 168x237, stron: 600

Data wydania: 2014-01-31

Opis: Python to język programowania z ponad 20-letnią historią. Opracowany na początku lat 90. ubiegłego wieku, błyskawicznie zdobył sympatię programistów. Jest używany zarówno do pisania przydatnych skryptów czy małych narzędzi, jak i do pracy nad dużymi projektami. Korzysta z automatycznego zarządzania pamięcią oraz pozwala na podejście obiektowe i funkcyjne do t

Cena: 79.00 zł
(Cena druku: 99.00 zł)

Python. Leksykon kieszonkowy. Wydanie V

Python. Leksykon kieszonkowy. Wydanie V

Autor: Mark Lutz

ISBN: 978-83-246-9433-4

Format: 122x194, stron: 256

Data wydania: 2014-10-10

Opis: Podręczny przewodnik po języku Python! Język Python obecny jest na rynku od ponad 20 lat. Opracowany został na początku lat dziewięćdziesiątych XX wieku i błyskawicznie zaczął zdobywać uznanie programistów na całym świecie. Python sprawdza się doskonale w pisaniu skryptów oraz narzędzi, a w dużym projekcie także nie zawiedzie oczekiwań. Język ten korzysta z aut

Cena: 27.90 zł
(Cena druku: 34.90 zł)

Python. Programuj szybko i wydajnie

Python. Programuj szybko i wydajnie

Autor: Micha Gorelick, Ian Ozsvald

ISBN: 978-83-283-0469-7

Format: 168x237, stron: 344

Data wydania: 2015-05-08

Opis: Wydajne aplikacje w języku Python! Python to skryptowy język programowania istniejący na rynku od wielu lat — jego pierwsza wersja pojawiła się w 1991 roku. Przejrzystość kodu źródłowego była jednym z głównych celów Guida van Rossuma, twórcy tego języka. Dziś Python cieszy się dużą popularnością, co z jednej strony świadczy o jego przydatnośc

Cena: 47.00 zł
(Cena druku: 59.00 zł)

Artykuł Raspberry PI 2, nauka podstaw Pythona 3 pochodzi z serwisu Krzysztof Jelonek.

Trochę o hejtingu

$
0
0

HaterByć może trochę naiwnie myślałem że ten temat mnie nie dotknie, a jednak. Wczoraj dostałem anonimową wiadomość z formularza kontaktowego sfrustrowanego internauty. Kolega bluzga na mnie w wiadomości zarzucając mi bezsensowność niektórych mini-projektów (jak np. bot do Epocha), jak również to że, muzyka w moich materiałach na Youtube jest “do d” i w ogóle są beznadziejne bo nie ma w nich głosu. Dostało mi się również za to, że zarabiam grube tysiące miesięcznie za promowanie książek wydawnictwa Helion.

Kwestie sensowności wpisów pozostawię bez komentarza. Natomiast odnosząc się do opinii materiałów na Youtubie – drogi internauto, przyczyną takiej, a nie innej formy moich materiałów jest ograniczenie czasowe. Umieszczane filmy na Youtubie, to tylko dodatek do wpisów na blogu. A artykuły na nim umieszczam po przeprowadzeniu praktycznych ćwiczeń czy mini-projektów, które wykonuje po godzinach pracy na etacie. Przygotowanie artykułu, ale jeszcze bardziej montaż filmu przeznaczonego na Youtube pochłania ogromne ilości czasu (z wielkim szacunkiem podchodzę teraz do pracy Youtuberów). Dlatego wybacz, ale nie jestem w stanie poświęcić kilku dni na montaż materiałów ze śmiesznymi anegdotami i ładnymi animacjami. Najzwyczajniej w świecie jestem ograniczony czasowo, a to dosyć czasochłonna praca.

A teraz odnoszę się na temat zarobków. Blog uruchomiłem pod koniec roku 2014, pierwszy niearchiwalny wpis opublikowałem 1 listopada 2014. W międzyczasie można było zobaczyć na tej stronie reklamy Google AdSense, z których ostatecznie zrezygnowałem. Podpisałem umowę partnerską z Helionem, czego przecież nie ukrywam, a pierwszą książkę czytelnicy kupili w kwietniu 2015.

Ale żeby rozwiać wątpliwości na temat tych grubych tysięcy zarobku. Proszę, aktualny ranking Helionu z ostatniego miesiąca i roku:

helion_ranking

Wygląda nieźle. W ostatnim miesiącu jestem na pierwszym, a na przestrzeni całego roku na ósmym miejscu w sprzedaży książek informatycznych. Pewnie zarobiłem kokosy? Proszę, zobaczcie zestawienie:

helion_kjnet

Co oznaczają te liczby? Oznacza to tyle, że zachęciłem sporą grupę osób na najlepszą życiową inwestycję – na własną edukację. Czytelnicy bloga od jego powstania złożyli 220 zamówień i kupili co najmniej dwa razy tyle książek na prawie 17 tys. zł. Zawsze promuję tylko te książki które znajdują się w promocji (-20%, -33% i -50%). Jeśli moi czytelnicy wydali 17 tys. zł., to znaczy, że zyskali na tym ok. 11 tys. zł z rabatów.  Ja dostaję prowizję 5% od wartości netto zapłaconego zamówienia co daje wynagrodzenie 751,69 zł. z czego należy odjąć podatek dochodowy w wysokości 135,30 zł. a daje to dochód 616,39 zł. za cały okres prowadzenia tego bloga.

Grube tysiące, nie? To teraz drogi internauto zobacz ile książek kupiłem w ciągu roku. Kupiłem książki za prawie 600 zł. czyli o ironio wszystko co zarobiłem z tytułu sprzedaży książek przeznaczyłem na… książki dla siebie :)

I teraz zastanów się czy te 600 zł. ‘zarobione’ w ciągu całego roku na blogu ma jakieś znaczenie dla programisty programującego na co dzień w Javie?

Tak czy inaczej, te drobne prowizje mogę przeznaczyć na zakup czy to książek, czy sprzętu elektronicznego, który później opisuję na tym blogu. A robię to, bo lubię i poświęcam temu sporo czasu. Nie zarabiam na tym blogu i to nie jest mój cel.

Ale jeśli klikasz w linki z książkami i je kupujesz – wielkie dzięki! Wspierasz tym samym właśnie to miejsce w sieci.

Krzysztof Jelonek

 

Artykuł Trochę o hejtingu pochodzi z serwisu Krzysztof Jelonek.

Muzycznie, nieprogramistycznie – Besides

$
0
0

Miałem okazję być ostatnio na tak bardzo kameralnym koncercie zespołu Besides, jak bardzo może się to wydać nierealne. Świetny klimat, wspaniała muzyka i do tego tak skromni artyści.

besides_notatnik

Besides po dwóch latach od wydania debiutanckiego „We Were So Wrong” wraca z nowym albumem „Everything Is”, który ukaże się w drugiej połowie października tego roku, a ja już miałem okazję usłyszeć jeden z singli na żywo :)

Kupiona od chłopaków płyta zdecydowanie uprzyjemnia mi podróż samochodem i myślę, że warto wspierać tak alternatywny rock. Zwłaszcza, że album można u nich kupić za 27,95 zł, a w wersji elektronicznej za 19,95 zł.

Artykuł Muzycznie, nieprogramistycznie – Besides pochodzi z serwisu Krzysztof Jelonek.

Pomysł na wizytówkę lub CV


Adafruit Flora łączenie kilku diod RGB Smart NeoPixel v.2

$
0
0

Rozpoczynając zabawę z Adafruit Flora (dzięki uprzejmości firmy kamami.pl) podłączyłem jedną diodę RGB Smart NeoPixel. Tym razem wziąłem do ręki igłę, nici przewodzące i wszyłem w koszulkę cztery diody RGB łącząc je razem.

Schemat

Wszystkie diody łączymy ze sobą szeregowo. Tym samym możemy w odzieży umieścić nawet 500 elementów wykorzystując zaledwie jedno wyjście sterujące Flory.

flora_neo_pixel_4_rgb

Realizacja

Przyznam szczerze, że ostatni raz igłę w ręku miałem na zajęciach „prac technicznych” w szkole podstawowej :). Dlatego wszycie tych czterech diod zajęło mi naprawdę sporo czasu, a efekt końcowy i tak wiele pozostawia do życzenia.

W moim przykładzie diody wszyłem bezpośrednio w koszulkę, ale w użytkowej wersji należałoby:

  1. Wszyć diody na osobnym kawałku materiału.
  2. Zastosować rzepy zarówno od środka koszulki jak i w materiale z diodami.

Dzięki temu same moduły będą niewidoczne i w szybki sposób będziemy mogli je odpiąć z koszulki (np. przed praniem). Pominąłem tutaj również umiejscowienie baterii zasilającej układ.

 

koszulka_front

 

koszulka_tyl

Ważne, aby nie łączyć ze sobą wejść / wyjść sterujących:

flora_neo_pixel_bb_dobrze_zle

Program

Do obsługi modułów NeoPixel konieczne jest dołączenie odpowiedniej biblioteki w Arduino IDE (tutaj to opisywałem). Sam program, którego efekt możecie zobaczyć w dołączonym filmie, jest tym samym z poprzedniego wpisu, w którym podłączałem jedną diodę RGB. Różnica jest w linii:

Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800);

gdzie pierwszym parametrem jest liczba odpowiadająca ilości podłączonych diod.

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 6

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  // End of trinket special code


  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  colorWipe(strip.Color(0, 0, 255), 50); // Blue
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  theaterChase(strip.Color(127, 0, 0), 50); // Red
  theaterChase(strip.Color(0, 0, 127), 50); // Blue

  rainbow(20);
  rainbowCycle(20);
  theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

 

Efekt końcowy

 

Wykorzystane elementy

Wideokurs do Arduino

Autor: Paweł Matyszok

ISBN: 978-83-283-1045-2

Format: , stron:

Data wydania:

Opis: Obierz kurs na... Arduino! Platforma Arduino jest absolutnie niezwykłym wynalazkiem. Dzięki niej każdy może zbudować działający, zaawansowany układ elektroniczny, kt&oacute;ry spełni jego indywidualne wymagania. Okazuje się, że wcale nie trzeba być inżynierem, by stworzyć taki układ: Arduino zapewnia wszystko, o czym może zamarzyć majsterkowicz czy entuzjasta elektroniki. Mo

Cena: 99.00 zł 99.00 zł

Książki do Arduino

Arduino dla początkujących. Kolejny krok

Arduino dla początkujących. Kolejny krok

Autor: Simon Monk

ISBN: 978-83-283-0016-3

Format: 158x235, stron: 240

Data wydania: 2015-02-13

Opis: Arduino — mała płytka o ogromnym potencjale — otworzyła świat elektroniki dla szerokiego grona pasjonatów, którym pozwoliła wreszcie zrealizować wymarzone projekty. Błyskawicznie zdobyła ogromną popularność, na co szybko zareagował rynek — pojawiło się mnóstwo dodatkowych akcesoriów, instrukcji i książek. Wśród tych ostatnich

Cena: 31.99 zł
(Cena druku: 39.00 zł)


Arduino w akcji

Arduino w akcji

Autor: Martin Evans, Joshua Noble, Jordan Hochenbaum

ISBN: 978-83-246-6359-0

Format: 168x237, stron: 368

Data wydania: 2014-05-17

Opis: Poznaj możliwości platformy Arduino! Arduino to niesamowita platforma, która otworzyła świat elektroniki przed wszystkimi. Dzięki niej możesz zbudować zaawansowany układ elektroniczny bez konieczności wykonywania czasochłonnych projektów i żmudnych obliczeń. Arduino błyskawicznie zyskało ogromną popularność, a w ślad za nią pojawiły się w sprzedaży liczne dod

Cena: 54.99 zł
(Cena druku: 69.00 zł)

Artykuł Adafruit Flora łączenie kilku diod RGB Smart NeoPixel v.2 pochodzi z serwisu Krzysztof Jelonek.

KAmduino UNO – polskie Arduino za 50 zł!

$
0
0

kamduino2Dzięki uprzejmości firmy Kamami.pl miałem okazję przed chwilą przetestować polskie Arduino – KAmduino UNO. Przyznam, że uruchomienie układu z przykładowym programem zajęło mi dosłownie dwie minuty. Ale po kolei.

Parametry

Podstawowe parametry które znalazłem w dokumentacji:
► Mikrokontroler ATmega328P firmy ATMEL
► Wyprowadzone 20 linii wejścia/wyjścia (w tym 6 linii mogących pracować w trybie PWM)
► Wgrany bootloader Arduino
► Posiada złącze microUSB-B do programowania oraz wymiany danych
► Możliwość zasilenia poprzez gniazdo DC-JACK (5.5×2.5) napięciem z przedziału 7…15 V
► Posiada zabezpieczenie przed odwrotną polaryzacją na wtyku DC
► Możliwość zasilenia z portu USB
► Rozstaw wyprowadzeń kompatybilny z Arduino UNO
► Posiada diodę użytkownika oraz diody sygnalizujące transmisję z / do komputera
► Wbudowany przycisk zerowania mikrokontrolera
► Port USB zabezpieczony przed wyładowaniami elektrostatycznymi
► Możliwość znacznego poszerzenia funkcjonalności poprzez nakładane moduły (shieldy)
► Posiada otwory montażowe o średnicy 3 mm
► Wymiary modułu: 69 mm x 55 mm x 14 mm

kamduino1

Wygląda bardzo podobnie do mojego Arduino Leonardo:

kamduino3_leonardo

Płytka posiada wbudowany Atmelowski mikrokontroler AVR ATmega328P (Flash 32 kB, RAM 2 kB) i 6 wyprowadzeń PWM. Jest on taktowany sygnałem zegarowym o częstotliwości 16 MHz. Natomiast dzięki wgranemu bootloaderowi, możliwe jest programowanie płyty poprzez złącze USB przy użyciu środowiska Arduino.

Uruchomienie i przykładowy program

Sam program możemy napisać i wgrać do płytki przez Arduino IDE. Urządzenie jest kompatybilne z Arduino UNO.

Jak to zwykle robię, na początku sprawdzam najprostszy program – w tym wypadku jest to mrugająca wbudowana dioda LED. W KAmduino UNO tak samo jak w Arduino Leonardo wbudowaną diodę LED zaświeca się wysyłając sygnał na PIN 13:

/**
 * KAmduino UNO
 * 
 * Blink example
 * KrzysztofJelonek.net
 */

const int PIN = 13;
const int DELAY = 200;

void setup() {
  pinMode(PIN, OUTPUT);
}

void loop() {
  digitalWrite(PIN, HIGH);
  delay(DELAY);
  digitalWrite(PIN, LOW);
  delay(DELAY);
}

A taki jest efekt w Arduino Leonardo i KAmduino UNO:

Podsumowanie

KAmduino UNO w cenie ok. 50 zł. jest całkiem niezłą alternatywą w stosunku do oryginalnych płytek Arduino Team (ok. 100 zł.), a nawet innych zgodnych z Arduino. Zwłaszcza, jeśli nie planujemy zakupów bezpośrednio z Chin.

Odebrałem tą płytkę zaledwie kilka godzin temu i sprawdziłem ją w najprostszy możliwy sposób. Może jeszcze w tym tygodniu uda mi się zrobić wpis opisujący jej integrację z Raspberry PI 2.

Rozpoczęcie przygody z elektroniką jest coraz łatwiejsze :)

Na sam koniec filmik o tym jak powstał KAmduino:

Wideokurs do Arduino

Autor: Paweł Matyszok

ISBN: 978-83-283-1045-2

Format: , stron:

Data wydania:

Opis: Obierz kurs na... Arduino! Platforma Arduino jest absolutnie niezwykłym wynalazkiem. Dzięki niej każdy może zbudować działający, zaawansowany układ elektroniczny, kt&oacute;ry spełni jego indywidualne wymagania. Okazuje się, że wcale nie trzeba być inżynierem, by stworzyć taki układ: Arduino zapewnia wszystko, o czym może zamarzyć majsterkowicz czy entuzjasta elektroniki. Mo

Cena: 99.00 zł 99.00 zł

Książka do Arduino

Arduino dla początkujących. Kolejny krok

Arduino dla początkujących. Kolejny krok

Autor: Simon Monk

ISBN: 978-83-283-0016-3

Format: 158x235, stron: 240

Data wydania: 2015-02-13

Opis: Arduino — mała płytka o ogromnym potencjale — otworzyła świat elektroniki dla szerokiego grona pasjonatów, którym pozwoliła wreszcie zrealizować wymarzone projekty. Błyskawicznie zdobyła ogromną popularność, na co szybko zareagował rynek — pojawiło się mnóstwo dodatkowych akcesoriów, instrukcji i książek. Wśród tych ostatnich

Cena: 22.39 zł 31.99 zł
(Cena druku: 33.15 zł)

Artykuł KAmduino UNO – polskie Arduino za 50 zł! pochodzi z serwisu Krzysztof Jelonek.

Algorytmy sortujące – muzycznie i wizualnie

$
0
0



Quick Sort (LR pointers)

Quick Sort (LL pointers)

Quick Sort (Ternary Split)

Merge Sort

Heap Sort

Bubble Sort

Cocktail Shaker Sort

Gnome Sort

Shell’s Sort

Selection Sort

Radix Sort (LSD)

Radix Sort (MSD)

Introsort (std::sort from STL)

Adaptive Merge Sort (std::stable_sort)

Tim Sort

Comb Sort

Odd-Even Sort

Batcher’s Bitonic Sort

Batcher’s Odd-Even Mergesort

Smooth Sort

Bogo Sort

Bozo Sort

Slow Sort

Stooge Sort

Cycle Sort

Artykuł Algorytmy sortujące – muzycznie i wizualnie pochodzi z serwisu Krzysztof Jelonek.

X Mistrzostwa Wielkopolski w Programowaniu Zespołowym

$
0
0

XMWPZ2_smallW tym roku po raz dziesiąty odbędą się Mistrzostwa Wielkopolski w Programowaniu Zespołowym (MWPZ), których jednym z oficjalnych patronów medialnych jest Notatnik Programisty!
Mistrzostwa Wielkopolski w Programowaniu Zespołowym są największą polską imprezą programistyczną. MWPZ mają charakter otwarty i są bezpłatne!
Termin zawodów zaplanowany jest w dniach 4-5 grudnia 2015 roku w Poznaniu i będzie to świetna okazja do zweryfikowania sił w zespołowym rozwiązywaniu problemów.
Organizatorami wydarzenia są

Lokalizacja

WMI UAM
Wydział Matematyki i Informatyki
Uniwersytet im. Adama Mickiewicza
ul. Umultowska 87
61-614 Poznań

Harmonogram

Piątek (4 grudnia 2015)
11.00-16.00 – Rejestracja, atrakcje (miejsce: TBA)
13.30-14:00 – Uroczyste rozpoczęcie zawodów
14.00-16:45 – Wykłady/prezentacje
16.45-17.30 – Przejazd do laboratoriów zawodników startujących na WMI UAM (miejsce TBA)
17:45-18.45 – Sesja próbna (miejsce: TBA)
19.00-19.30 – Omówienie problemów technicznych (miejsce: TBA)
19.40-20.15 – Przejazd autobusem do centrum i hoteli.

Sobota (5 grudnia 2015)
7:40-8.00 – Zbiórka na placu Mickiewicza
8.00-9.00 – Przejazd z hotelu i centrum do laboratoriów
9.00-9.15 – Zajmowanie stanowisk (miejsce: TBA)
9.15-14.15 – Zawody (miejsce: TBA)
14.30-15:30 – Pizza (miejsce: TBA)
15:30-16:15 – Przejazd zawodników na miejsce zakończenia zawodów ()
16.45-17.30 – Uroczyste zakończenie (miejsce: TBA)
17.30-19.30 – Bankiet (miejsce: TBA)

Jak to wygląda w praktyce?

  1. Każda drużyna składa się z trzech osób.
  2. I każda drużyna ma do dyspozycji tylko jeden komputer. Umiejętne rozplanowanie podziału komputera jest ważną częścią strategii.
  3. Zawodnicy mogą mieć ze sobą wszelkiego rodzaju materiały w formie papierowej (książki, zeszyty, listingi programów, dokumentacje, wydruki). Jednak zabronione jest korzystanie z materiałów elektronicznych i z internetu.
  4. Drużyna otrzymuje kilka zadań, które należy rozwiązać przygotowując odpowiedni program / algorytm.
  5. Według indywidualnych umiejętności członków zespołu sami decydujecie o przydziale zadań.
  6. Rozwiązania wysyłacie do sprawdzenia w trakcie trwania konkursu i są one oceniane na bieżąco. Zrobicie to poprzez specjalny system WWW, który skompiluje przygotowane programy i przeprowadzi szereg testów.
  7. W odpowiedzi otrzymacie jeden z dwóch możliwych wyników testu: zaakceptowany lub odrzucony. A zatem jeżeli chodź jeden z przypadków testowych nie przejdzie testu nie zaliczacie tego zadania. Jednak możecie w takim przypadku wrócić do stanowiska, wprowadzić poprawki i spróbować wysłać rozwiązanie ponownie.
  8. Gdy Sprawdzarka odrzuci rozwiązanie, zwróci jeden z komunikatów informujących o rodzaju błędu:  Compile Error (błąd kompilacji), Runtime Error (błąd wykonania), Time Limit Exceeded (przekroczony limit czasu), Wrong Answer (błędna odpowiedź) lub Rule Violation (naruszenie zasad zawodów).
  9. Sprawdzarka daje również możliwość zadawania pytań sędziom. Korzystajcie z niej, żeby poprosić o wyjaśnienie niejasności w treści zadania (lub w formie zawodów), zgłosić błąd w treści, gdy nie wiecie co począć z Compile Error lub gdy macie problemy z komputerem.
  10. Kolejną ważną funkcjonalnością Sprawdzarki jest możliwość drukowania programów (wydruk zostanie Wam przyniesiony do stanowiska w ciągu paru minut). Jest to ważne ponieważ komputer jest tylko jeden i jak jedna osoba pisze program to druga w tym czasie może szukać na wydruku błędów w swoim programie.
  11. Oprócz wysyłania zadań Sprawdzarka będzie Wam służyć do śledzenia stanu rywalizacji. Na bieżąco wyświetlany będzie aktualny ranking drużyn, mówiący kto zrobił ile zadań, jakie zadania i w ile czasu.
  12. Na godzinę przed końcem ranking jest zamrażany. Oznacza to, że nie będą na nim uaktualniane informacje. Celem tego zabiegu jest zwiększenie emocji pod koniec rywalizacji.
  13. Ostateczne wyniki zostaną przedstawione dopiero na uroczystości zakończenia Mistrzostw.

 

Praktyczne wskazówki

  1. Doświadczenie pokazuje, aby najpierw rozpoznać te bardzo łatwe zadania i zabrali się za nie w pierwszej kolejności.
  2. Dobrym pomysłem będzie obserwowanie rankingu. Zadania, które sporo drużyn ma rozwiązane są z pewnością łatwe :)
  3. Zabierając się za konkretne zadanie, na samym początku musicie koniecznie dobrze zrozumieć jego treść.
  4. Jeśli jesteście pewni, że wszystko w zadaniu jest dla Was jasne, można zabrać się za wymyślanie jak je najlepiej rozwiązać.
  5. Mało praktyczne jest przy rozwiązywaniu zadania od razu siadać do komputera, ponieważ będzie Was w zespole trzech.
  6. Na początku najlepiej wziąć kartkę, długopis i spokojnie pomyśleć nad algorytmem rozwiązującym zadany problem.
  7. Dopiero gdy jesteście pewni, że macie dobry pomysł na rozwiązanie, możecie usiąść do klawiatury i zacząć je implementować.
  8. Taktyka zależy od Was, zrobicie jak chcecie.

 

Zadania

Zadania w swej formie podobne są do tych, z którymi być może mieliście okazję się zetknąć na Olimpiadzie Informatycznej, Potyczkach algorytmicznych, bądź innych zawodach w programowaniu (np. Internetowych Mistrzostw Polski w Programowaniu).

Zadanie przykładowe – Ciąg Fibonacciego

 

Opis

Ciąg Fibonacciego to ciąg liczb całkowitych, określonych rekurencyjnie w następujący sposób.

F0 = 0
F1 = 1
Fn = Fn-1 + Fn-2, dla n ≥ 2

Początkowe wyrazy ciągu to: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, …

Zadanie

Dla danego N, podaj wartość N-tej liczby Fibonacciego modulo 10000 (czyli resztę z dzielenia przez 10000).

Specyfikacja wejścia

Pierwsza linia wejścia zawiera liczbę całkowitą D (1 ≤ D ≤ 50), oznaczającą liczbę zestawów danych, które dalej pojawią się na wejściu. Każdy zestaw składa się z jednej linii, zawierającej dokładnie jedną liczbę całkowitą N(1 ≤ N ≤ 20000).

Specyfikacja wyjścia

Dla każdego zestawu danych na wyjściu należy wypisać, w osobnej linii, jedną liczbę całkowitą, będącą resztą z dzielenia FN modulo 10000.

Przykład

5
2
4
8
40
1
1
3
21
4155
1

Tutaj możecie prześledzić rozwiązanie tego przykładowego zadania.

 

Z czego się uczyć?

Dobrą propozycją jest książka Piotra Stańczyka „Algorytmika praktyczna”, w której autor dzieli się swoimi i kolegów doświadczeniami w konkursach algorytmicznych. Dlaczego? Dlatego, że są to doświadczenia osób, które potwierdziły swoją wiedzę i umiejętności algorytmiczno-programistyczne w konfrontacji z rówieśnikami z całego świata. Piotr to dwukrotny laureat krajowej Olimpiady Informatycznej oraz dwukrotny medalista Bałtyckiej Olimpiady Informatycznej. Wraz z kolegami zwyciężał w Adademickich Mistrzostwach Polski w Programowaniu Zespołowym i zdobywał medale w Adademickich Mistrzostwach Europy Środkowej.

Przypominam, że na konkurs możecie wziąć ze sobą dowolne książki!

Autor:

ISBN: 590-4-8070-0823-6

Format: , stron:

Data wydania:

Opis: PAKIET OBEJMUJE KSIĄŻKI: "Algorytmika praktyczna" Książka ta różni się od znanych na polskim rynku pozycji poświęconych algorytmice, dotyczy bowiem jej strony praktycznej. Taki sposób potraktowania tego działu informatyki wynika z coraz większego zainteresowania zarówno uczniów, jak i studentów udziałem w różnego rodzaju konkursach programistycznych. Czytelnik znaj

Cena: 53.13 zł 62.50 zł

Ciekawostka z książki Piotra Stańczyka

Czy kolejność umieszczania danych w tablicach ma znaczenie?
Definiujemy tablicę składającą się z 15000 wierszy i kolumn:

final int SIZE = 15000;
int[][] tab = new int[SIZE][SIZE];

Wersja pierwsza – umieszczanie danych „wierszami”:

for (int x = 0; x < SIZE; x++)
    for (int y = 0; y < SIZE; y++)
        tab[x][y] = x + y;

Wersja druga – umieszczanie danych „kolumnami”:
for (int y = 0; y < SIZE; y++)
    for (int x = 0; x < SIZE; x++)
        tab[x][y] = x + y;

Czas wykonania wersji pierwszej (0,9s.) jest ponad dziesięciokrotnie krótszy od wersji drugiej (11s.).

Dzieje się tak, ponieważ w wersji pierwszej wykorzystujemy pamięć podręczną procesora podczas gdy w wersji drugiej program musi wykonać wiele „skoków” po pamięci. Szybkość działania pamięci podręcznej procesora jest dziesięciokrotnie większa od szybkości pracy pamięci RAM.

Piotr Stańczyk w swojej książce poświęca osobny dział elementom strategii podczas zawodów poruszając takie zagadnienia jak:

  • szacowanie oczekiwanej złożoności czasowej
  • strategia pracy w drużynie
  • szablony kodu
  • plik makefile
  • parametry kompilacji programów

Internetowe zasoby wiedzy

 

Polecane przeze mnie:

  • SPOJ – Umożliwia sprawdzanie i podnoszenie swoich umiejętności algorytmicznych w różnych językach programowania
  • Polski SPOJ – Wersja polska SPOJa.
  • Codility – Lekcje algorytmiki. Platforma umożliwia ćwiczenie online w wielu językach.
  • CodeFights.com – Serwis udostępniający świetną zabawę w wyszukiwaniu błędów w kodzie (Python, JS, C++ lub Java).

Linki konkursowe

Historia MWPZ:

Wikipedia

Artykuł X Mistrzostwa Wielkopolski w Programowaniu Zespołowym pochodzi z serwisu Notatnik programisty.

Raspberry PI 2 i KAmduino

$
0
0

kamduino2

W poprzednim wpisie dotyczącym polskiego Arduino (za ok. 50 zł.) o nazwie KAmduino sprawdzałem najprostszy z możliwych programów włączający i wyłączający wbudowaną w urządzenie diodę LED. Dziś wykorzystam ten sam program i sprawdzę możliwość wgrania go do urządzenia z poziomu ostatnio kupionego Raspberry PI 2. W RPI2 posiadam już zainstalowany system operacyjny Raspbian.

Instalujemy Arduino IDE w Raspberry PI 2

Uruchamiamy terminal i wpisujemy kolejno:

sudo apt-get update
sudo apt-get install arduino

I to w zasadzie wszystko :) Samo środowisko zostało podpięte pod menu „Programowanie”:

arduino_ide1

Po uruchomieniu ustawiamy rodzaj płytki jako „Arduino Uno”:

arduino_ide4

Łączymy ze sobą Raspberry PI i KAmduino za pomocą kabla USB i ustawiamy port pod którym podpięty jest KAmduino:

arduino_ide3

Wpisujemy testowy program i klikamy przycisk „Załaduj”:

arduino_ide2

O ile kompilacja z wiadomych względów trwa dłużej niż na kilkuletnim pececie, o tyle według mojej opinii samo wgranie programu do Arduino przebiega znacznie szybciej niż w Windowsie. Nie doświadczyłem tu problemów ze znikaniem portu, co zdarzało mi się nadzwyczaj często w Windowsie 7 i 10.

rpi_kamduino

Podsumowanie

Instalacja środowiska do Arduino i uruchomienie samej komunikacji Rasbperry PI 2 z KAmduino przebiega błyskawicznie. Taki zestaw to świetny prezent wprowadzający w świat zarówno elektroniki jak i programowania choćby dzieci uczęszczające jeszcze do szkoły podstawowej. Zwłaszcza, że te urządzenia są coraz tańsze. W następnym wpisie opiszę może komunikację KAmduino z wykorzystaniem Pythona w Raspberry PI 2.

Poznaj otaczający Cię świat za pomocą elektroniki, Arduino i Raspberry Pi

Autor: Kimmo Karvinen, Tero Karvinen

ISBN: 978-83-283-0368-3

Format: , stron:

Data wydania:

Opis: Zdobądź informacje na temat świata zewnętrznego! Arduino oraz Raspberry Pi to płytki, kt&oacute;re sprawiły, że świat elektroniki stał się dostępny dla wszystkich. Z ich pomocą każdy amator może sprawnie zrealizować projekt, o kt&oacute;rym marzył od zawsze. Fantastyczne możliwości oraz łatwość, z jaką można je wykorzystać, przyczyniły się do ich ogromnej popula

Cena: 19.53 zł 27.90 zł
(Cena druku: 29.66 zł)

Artykuł Raspberry PI 2 i KAmduino pochodzi z serwisu Notatnik programisty.

Viewing all 102 articles
Browse latest View live