czwartek, 28 sierpnia 2014

Automate with Grunt - recenzja



Biblioteczka Trójmiasto JUG (o której pisałem tutaj i tutaj) rozwija się wolno, ale sukcesywnie. Chociaż w najbliższych miesiącach mój udział w życiu grupy zostanie drastycznie zredukowany, mam żywą nadzieję, że moje wykorzystanie biblioteczki wręcz przeciwnie. Kilka tygodni temu popełniłem drugą recenzję, a na tapetę poszła książka Briana P. Hogana "Automate with Grunt. The Build Tool for JavaScript".

Zapraszam do lektury (w języku angielskim): http://trojmiasto.jug.pl/bookshelf/automate-with-grunt/ 

sobota, 23 sierpnia 2014

The Agile Mindset and beyond

Kilka tygodni temu dostałem od znajomego link do filmiku, który podobno wywarł na nim spore wrażenie. Jak zwykle w takich sytuacjach film trafił na Watch List i leżał tam spokojnie, czekając na lepsze czasy. Ostatnio postanowiłem sukcesywnie czyścić wszystkie listy typu TODO, Watch czy też Read later. Jedną z pierwszych pozycji na jaką trafiłem było właśnie nagranie prelekcji Lindy Rising z GOTO Aarhus 2012 Conference. Na początku myślałem, że będzie to filmik o Agile, Scrum, podejściu do realizacji projektów itp lecz myliłem się bardzo mocno. Pomyłka choć zdecydowana, to bardzo przyjemna. To 40 minut wykładu na pograniczu psychologii, nauk społecznych i tematów miękkich w biznesie, który daje bardzo dużo do myślenia.

Miłego oglądania!



czwartek, 27 marca 2014

Inicjatywa Studencka

5 miesięcy - tyle zajęły nam przygotowania do najnowszego i zarazem największego projektu, jaki Trójmiasto Java User Group organizowało do tej pory. Mam nieopisaną przyjemność ogłoszenia startu "Inicjatywy Studenckiej" - serii wykładów, które będą miały miejsce na Wydziale Matematyki, Fizyki i Informatyki Uniwersytetu Gdańskiego.

Celem wykładów jest pokazanie studentom podstawowe aspekty, technologie i metodyki, z którymi będą mieli do czynienia w trakcie swooich pierwszych praktyk, stażu czy też pierwszej pracy. Fragment informacji ze strony grupy:

Wykłady są całkowicie bezpłatne i otwarte. Zapraszamy studentów II i III roku studiów informatycznych, ale i również osoby spoza środowiska akademickiego zainteresowane zdobywaniem wiedzy z branży IT. Spotkania będą okazją zarówno do zdobycia wiedzy i zaznajomienia się ze specyfiką pracy w branży IT, jak i również do poznania lokalnego środowiska biznesu, a także sposobnością do znalezienia ciekawy miejsc praktyk wakacyjnych.

Agenda jest całkiem pokaźna, bo obejmuje 8 wykładów na różne tematy, z którymi każdy z nas spotyka się w swojej codziennej pracy, a które potrafią być nowością dla młodych programistów. Dokładna agenda:

  • 08.04 – Wprowadzenie do Agile/Scrum/Kanban
  • 15.04 – Wprowadzenie do systemu budowania aplikacji Maven (i Gradle)
  • 22.04 – Jak programować, by nie zwariować
  • 29.04 – Wprowadzenie do testowania
  • 06.05 – Specyfika testów na urządzenia mobilne
  • 13.05 – I jest GIT!
  • 20.05 – Wprowadzenie do Continous Integration
  • 27.05 – User Expirience / Design dla początkujących

"Wprowadzenie do Continous Integration" to wykład, który osobiście będę prowadził. Będzie to mój debiut jako prelegent Trójmiasto JUG (chociaż  nie na sali wykładowej uczelni wyższej). Licze, że będzie to dopiero początek takiego typu kooperacji środowiska akademickiego i biznesowego w Trójmieście. W pierwszej edycji bierze udział 5 firm (Solwit, Young Digital Planet, Nearshoring Solutions, JIT Solutions oraz Kainos) oraz 4 uczelnie wyższe (Uniwersytet Gdański, Polsko-Japońska Wyższa Szkoła Technik Komputerowych, Politechnika Gdańska oraz Wyższa Szkoła Bankowa). Jak widać, jest to bardzo szerokie gremium.

Dlaczego warto wkładać tyle wysiłku i czasu w taki projekt? Z mojego punktu widzenia z kilku powodów:
  • satysfakcja - każde spotkanie, które organizujemy w ramach Trójmiasto JUG napawa mnie dumą, nawet po 2 latach prowadzenia grupy
  • dobry uczynek - każdy z nas był kiedyś świeżakiem i nie każdy z nas pochodzi z kierunku stricte informatycznego (stąd tak szeroki wachlarz uczelni/wydziałów, które nie są w 100% z branży ICT)
  • nowe kontakty i partnerzy - przy okazji organizowania inicjatywy miałem okazję poznać niesamowicie pozytywnych ludzi, którzy dzielą z nami poglądy i spojrzenie na działania. Grupa zyskała nowego partnera medialnego (Iwonę Ronę, która przyszykowała oprawę graficzną wydarzenia), zyskaliśmy kontakt do kilku firm, z którymi już w tej chwili wiemy, że będziemy chcieli w zbliżających się miesiącach organizować ciekawe projekty
  • spełnienie marzeń - kiedy kończyłem studia magisterskie obiecałem sobie, że w przeciągu 5 lat wygłoszę wykład na uczelni wyższej - udało się to zrealizować po lekko ponad 2!!
Więcej informacji o samej inicjatywie znaleźć można na jej stronie. Gorąco zapraszam wszystkie osoby zainteresowane do uczestnictwa.

Do zobaczenia!

wtorek, 28 maja 2013

Apache Lucene praktycznie

Bieżący sezon dla Trójmiasto Java User Group wydaje się być bardzo dobry. Chętnych prelegentów jest coraz więcej, publiki raczej nie brakuje, a tematy wydają się interesujące. Po sukcesie grupy w zeszłym roku (po praktycznie roku stagnacji), postanowiliśmy nie zwalniać tempa. Chociaż czerwiec jest tzw. "sezonem ogórkowym", to jednak postanowiliśmy zorganizować coś, co trygryski lubią najbardziej, czyli.... warsztaty!

15 czerwca odbędą się warsztaty z Apache Lucene, które poprowadzą nasi wielokrotni prelegenci: Dominika Puzio i Patryk Makuch z Wirtualnej Polski.

Oto jak prelegenci zachęcają do wzięcia udziału:

W zeszłym roku przez trzy JUGowe spotkania opowiadaliśmy, że Apache Lucene działa. Teraz to pokażemy  W trakcie warsztatów, wspólnie z uczestnikami, stworzymy aplikację, którą “załadujemy” hasłami z polskiej wikipedii i napiszemy do nich wyszukiwarkę z funkcjami podpowiadania, kategoryzacji, fuzzy search, podświetlaniem znalezionych słów i kilkoma innymi bajerami  dzieląc się przy okazji naszym doświadczeniem związanym z wydajnością proponowanych rozwiązań. Zdecydowaliśmy, że skorzystamy wprost z biblioteki, bez pośrednictwa gotowych, opartych na niej systemów jak SOLR, Hibernate Search, czy, szalenie modny ostatnio, Elastic Search, ponieważ postawienie ich i uruchomienie według tutoriala przebiega zwykle bez bólu, za to diagnoza problemów, jakie pojawiają się w środowisku produkcyjnym bywa o wiele trudniejsza właśnie z powodu konieczności posiadania wiedzy o Lucene (“There’s more Lucene in SOLR than You think!”: http://blog.orange11.nl/2012/04/11/theres-more-lucene-in-solr-than-you-think). I mimo niewątpliwej atrakcyjności gotowych rozwiązań, wielcy tego świata, jak Twitter, Wikiepedia czy JIRA, wciąż używają “czystej” Lucene.
Warsztaty kierujemy zarówno do tych, którzy chcieliby rozbudować swój repertuar o umiejętność dodawania funkcjonalności wyszukiwania do tworzonych systemów, jak i do tych, którzy na co dzień mają do czynienia z którymś z rozwiązań opartych o Lucene, i chcieliby “zajrzeć pod maskę”.


Trójmiasto Java User Group serdecznie zaprasza wszystkich chętnych!

Pozdrawiam i do następnego razu!

piątek, 19 kwietnia 2013

Team Geek - recenzja

W ferworze pracy i przy codziennym zmęczeniu nie mamy często ani czasu ani chęci na czytanie książek branżowych. Mi osobiście nie zdażyło sie już bardzo długo chociażby zajrzeć do stricte technicznej książki. Od kiedy uruchomiliśmy w ramach Trójmiasto JUG biblioteczkę wydawnictwa O'Reilly, nosiłem się z zamiarem przeczytania czegoś ciekawego, ale nie wymagajacego wiele uwagi i dającego przyjemność. Już kilkukrotnie słyszałem (m.in. na konferencjach) odwołania ludzi do książki dwóch pracowników Google, Briana  Fitzpatricka oraz Bena Collins-Sussmana, "Teak Geek".

Moje wrażenia po dwukrotnym przeczytaniu książki znaleźć można na stronie grupy: http://trojmiasto.jug.pl/bookshelf/team-geek/

Jest to moja pierwsza recenzja w języku angielskim, w związku z czym wszelkie komentarze mile widziane ;)

Pozdrawiam i do następnego razu!

poniedziałek, 18 marca 2013

JEE6 praktycznie - podsumowanie pierwszych warsztatów Trójmiasto JUG

Pierwsze warsztaty Trójmiasto Java User Group miały miejsce ponad tydzień temu, a więc czas na drobne podsumowanie (zarówno z mojej strony jak i uczestników).

Na samym początku chciałbym podziękować kilku osobom i firmom, bez których organizacja warsztatów nie była by możliwa. Wpierw osoby:

  • Kuba Marchwicki - nie tylko za przeprowadzenie warsztatów, ale także za samą chęć i energię włożoną w ich organizację
  • Natalia Piechota - za pomoc w medialnej oprawie imprezy
  • Wojciech Wasiukiewicz - za podzielenie się z nami swoimi przemyśleniami na temat roli firm takich jak Solwit w rozwoju lokalnych społeczności
  • Cezary Furmanek - za pomoc techniczną
  • Patryk Brzeziński - za pomoc przy materiałach multimedialnych
  • Michał Kwas - za dużą elastyczność przy organizacji miejsca warsztatów i wyrozumiałość
A teraz firmy:

Wszystkim Wam gorąco dziękuję! :)

Wszyscy uczestnicy po zakończeniu otrzymali do wypełnienia krótką ankietę (4 pytania zamknięte i jedno otwarte - luźne komentarze). Odpowiedziało 18 z 22 osób, co jest wynikiem bardzo dobrym. Najpierw wyniki pytań zamkniętych.





Szczególnie cieszy odpowiedź na ostatnie pytanie - to pokazuje, że warto tego typu wydarzenia organizować!

Oczywiście nie obyło się bez pomyłek i pomniejszych wpadek organizacyjnych:
  • wcześniejsze zadbanie o stałą, nie za wysoką temperaturę w pomieszczeniu
  • miejsce na obiad osobne, poza salą, w której się pracuje
  • stoły z napojami po dwóch stronach sali, aby wszystkim było wygodnie
  • obrazy wirtualne ze środowiskiem lub też instrukcje co należy przygotować przed warsztatami na 2-3 dni przed samym wydarzeniem
Mam nadzieję, że uda nam się zorganizować kolejne tego typu warsztaty już w czerwcu i będą one jeszcze lepsze niż poprzednie.

Pozdrawiam i do następnego razu!

środa, 13 lutego 2013

Najbliższe spotkania Trójmiasto JUG

Dzieje się! - tymi dwoma słowami można by podsumować ostatnie dwa miesiące prac przy organizacji Trójmiejskiej Java User Group. Już teraz, a mamy dopiero początek roku, wiadomo, że w tym roku spotkań w ramach grupy będzie więcej niż w zeszłym roku. W dodatku planujemy rozszerzenie formy spotkań, ale o tym za chwilę.

Lutowe spotkanie poprowadzi Mateusz Haligowski, a tematem jego prelekcji będzie "Vagrant, czyli wirtualizacja dla deweloperów". Krótki opis tego, co Mateusz planuje przedstawić nam 28 lutego:

Szybko rosnąca moc obliczeniowa sprzętu wprowadziła wirtualizację środowisk pod strzechy. Podczas prezentacji przedstawię w jaki sposób można to wykorzystać tworząc nowe rozwiązania, lub próbując podłączyć się do już istniejących. Pokażę narzędzie Vagrant, oraz w jaki sposób skonfigurować je przy pomocy Puppeta.

Marzec będzie dla naszej grupy bardzo wyjątkowy. Na początek parę informacji o prelekcji. Poprowadzi ją Sławomir Ginter, jeden z założycieli firmy Spartez (w której miałem przyjemność odbywać praktyki studenckie i pracować przez pewien czas). Tematem jego prelekcji będzie "Programowanie funkcyjne w Javie" i odbędzie się 21 marca. Oto kilka zagadnień, które prelegent chce poruszyć w swojej prelekcji:


  • dlaczego immutability jest dobre i jak to zrobic w kolekcjach uzywajac Guava
  • dlaczego Option i Either jest lepszy od wyjątków i jak to zrobic w Javie (Fugue)
  • co sie stanie jak juz przyjdzie Java 8 (lambda + traits)
  • gdzie warto po prostu użyć Scali (testy, pluginy/moduły, prototyping)
  • walczymy z boilerplate czyli Project Lombok

Na sam koniec zostawiłem największą atrakcję pierwszego kwartału. Zgodnie z obietnicami składanymi w zeszłym roku na spotkaniach grupy, ruszamy z serią darmowych, kwartalnych sobotnich warsztatów! A wszystko za sprawą Kuby Marchickiego, który już 9 marca nauczy nas wielu praktycznych rzeczy na temat JEE6. Oto co sam prelegent mówi o planach dotyczących warsztatów:

JEE6 służy do rozwiązywania konkretnej klasy problemów. JEE6 nie jest Springiem. Nie robi wszystkiego (łącznie z pokojem na świecie i ładną pogodą) – zajmuje się wycinkiem systemów klasy enterprise i robi to całkiem nieźle. Warsztaty mają na celu wprowadzenie w świat aplikacji JEE6. Produktywne wykorzystanie standardu, czyli jak zbudować typową aplikację: baza danych, logika (funkcjonalna i niefunkcjonalna) + widok w kilku wariantach. Będzie o ORMach, wstrzykiwaniu zależności, web servicach, testach i servletach. Będzie warsztatowo – dużo kodu, programowanie w parach i na koniec dnia wyjścia z działająca aplikacją przechodzącą przez niemalże cały stos JEE6. Nie będę wyjaśniał czym jest ORM, ale jak go użyć. Nie będę dyskutował z założeniami wstrzykiwania zależności – pokaże co dają. Nie będę roztrząsał sporu: testować stan czy testować – pokażę co się sprawdza w naszych projekcie.

W przeciągu pierwszych 12 godzin od otwarcia rejestracji wszystkie wejściówki na warsztaty zostały rozdane! Możliwe, że ilość miejsc na warsztaty nieznacznie się zwiększy, tak więc śledźcie stronę grupy!

Obecnie prowadzimy rozmowy odnośnie dwóch kolejnych warsztatów (maj/czerwiec oraz koniec września/październik) oraz znacznego rozszerzenia współpracy z dwoma sponsorami. Jeśli choćby tylko połowa z planów weszła w życie, zapowiada się bardzo pracowity rok :)

Na zakończenie kilka odnośników gdzie szukać informacji o grupie:
Pozdrawiam i do następnego razu!

niedziela, 20 stycznia 2013

Drobne zmiany

Od kilku tygodni można było zauważyć zmianę adresu bloga. Ostatnimi dniami zmieniła się także nazwa bloga. Od dłuższego już czasu "Akademia Javy" nie jest adekwatną nazwą dla tego o czym chcę pisać. Nie samą technologią/platformą człowiek żyje ;) W związku z tym mam nadzieję, że tematyka moich wpisów będzie się poszerzać, może z czasem także dojdzie do jakichś miększych wpisów. Dalszych planów sprecyzowanych nie mam, zobaczymy jak wszystko się potoczy.

Tak więc zapraszam wszystkich do lektury bloga blog.dragonia.org.pl

Do następnego razu!

sobota, 19 stycznia 2013

LinkedIn JavaScript Bootcamp

W ramach nadrabiania zaległości (spowodowanych straconym czasem na pisanie pracy magisterskiej) oraz przygotowania do serii krótkich wykładów wewnątrz firmowych na temat podstaw (i nie tylko) języka JavaScript postanowiłem sprawdzić jak to się robi w dużych firmach. Na celownik jako pierwsza poszła ekipa z LinkedIn, a to za sprawą zeszłorocznej serii wykładów LinkedIn JavaScript Bootcamp w ramach LinkedIn Tech Talks. Seria ta uświadomiła mi, że mimo roku spędzonego przy projekcie opartym o JavaScript, wciąż nie doceniam tego języka i nie znam go odpowiednio dobrze. Zagadnienia takie jak hoisting, event capturing/bubbling, selectors performance, deffered/promise pattern - to tak naprawdę podstawy, choć bardzo często pomijane przy nauce tego języka. Nieznajomość tych tematów może prowadzić do ciężkich w wyprostowaniu konstrukcji, których utrzymywanie w późniejszym etapie może być bardzo bolesne (mówię z własnego doświadczenia).

Cała seria składa się z 12 części:
  1. JavaScript 101
  2. DOM Events
  3. DOM Scripting
  4. Javascript Debugging
  5. AJAX at LinkedIn
  6. Scoping
  7. Object Oriented Programming
  8. LinkedIn Homebrew
  9. JS Coding Standards - najgorsza z prezentacji
  10. jQuery at LinkedIn
  11. The Curious Case of Dust - jedyna część, której nie byłem w stanie obejrzeć do końca. Kompletnie nie podchodzi mi taki sposób prowadzenia prezentacji
  12. JS Unit Testing
Najbardziej polecam prelekcje Kiro Risk'a (Scoping, OOP oraz jQuery). Uważam je za najlepsze i chyba najbardziej zapadły mi w pamięć. Cała seria trwa prawie 10 godzin, lecz wydaje mi się. że prawie cały ten czas dobrze spędziłem.

Dodatkowo, w trakcie wielu z tych prezentacji mowa jest o różnych projektach Open Source, które prowadzi LinkedIn. Można je znaleźć na ich profilu na GitHub'ie.

Do następnego razu!

niedziela, 13 stycznia 2013

(Nie za bardzo) krótkie podsumowanie ubiegłego roku

Zeszły rok był zwariowany. Chociaż nie było tego widać po tym blogu, działo się bardzo dużo, bardzo szybko. O tym, że mam zamiar więcej publikować na blogu mówiłem między innymi tutaj i tutaj. Ale jak to mówią, dobrymi chęciami piekło jest wybrukowane.

Ubiegły rok pod względem blogowania był bardzo skromny. Raptem 3 posty napisane przez cały rok. To i tak lepiej, niż w roku 2011 ;-) W tym roku mam nadzieję znacznie więcej pisać, przynajmniej jeden post na 3-4 tygodnie. Jedynie tematyka lekko się zmieni. Będzie trochę o Trójmiasto JUG, więcej o JavaScript, pewnie trochę o Groovy/Grails oraz Python/Django i zapewne o czymkolwiek innym, czym zawodowo będę zajmować się w tym roku. Od prawie roku pracuje na stanowisku Junior Software Developer w firmie Solwit, gdzie co rusz spotykam się z wyzwaniami, tak więc sądzę, że na brak tematów do pisania narzekać nie będę mógł.

Zeszły rok był również moim ostatnim (mam nadzieję) spędzonym na Politechnice Gdańskiej. Obroniłem tytuł magistra inżyniera z Fizyki Technicznej na specjalności Informatyka Stosowana. Tematem mojej pracy była: "Baza wiedzy o ogrodach jako praktyczny przykład wykorzystania technologii GIS. Modułowy system oparty o architekturę chmury". Tematyka ciekawa, sam projekt okazał się totalną klapą. Ale najważniejsze, że ....




W roku 2012 miała miejsce jeszcze jedna zmiana, z której jestem bardzo dumny. Wraz z Mateuszem Mrozewskim podjęliśmy się zadania reanimacji Trójmiejskiej Grupy Użytkowników Java. Po roku spędzonym w tym temacie mogę śmiało powiedzieć, że udało się osiągnąć plan minimum i znacznie więcej. Kilka faktów i statystyk dotyczących działalności grupy w ubiegłym roku:


Plany na rok 2013?
  • wziąć udział w projekcie open source (choćby jedno contribution)
  • prowadzić JUG'a regularnie, by rocznie odbywało się minimum 9 prelekcji
  • pojechać na 33 Degree 
  • pisać więcej na blogu ;-)

Do następnego razu!

niedziela, 1 kwietnia 2012

Firebug Lite vs platformy mobilne

Mnogość platform mobilnych z wolna przytłacza młodych programistów. Niezależnie od wieku i doświadczenia - wszyscy marzymy o tworzeniu rozwiązań działających dobrze i jednakowo na każdej platformie sprzętowej jak i softwarej. Nie inaczej sprawa ma się w przypadku tworzenia aplikacji webowych. Bardzo często problem polega na bardzo drobnych, lecz dokuczliwych różnicach w implementacjach przeglądarek na różne platformy. Osobiście spotkałem się ostatnio z takim problemem w Safari na iPadzie. Zastanawiałem się przez dłuższa chwilę jak przeanalizować dobrze działanie strony na tablecie z jabłkiem. Safari na iPadzie nie dostarcza (a przynajmniej nie udało mi się takiej opcji znaleźć) konsoli JavaScript ani podglądu drzewa dom, tak więc moje opcje były dosyć ograniczone... do czasu uświadomienia sobie, że jest coś takiego jak Firebug Lite. Sam Firebug nie raz i nie dwa uratował mi życie przy tworzeniu aplikacji. Problem pojawił się w momencie osadzenia go na stronie - nie mogłem zmienić w danej chwili źródła strony, tak więc zwykłe osadzenie skryptu nie było możliwe. Chwile spędzone z Google jak zwykle okazały się bezcenne.

Post Paula Horowitza Run Firebug on iPad and iPhone opisuje dokładnie wszystko, co należy zrobić, aby móc korzystać z dobrodziejstw Firebug na tabletach i smartphone'ach. Całość sprowadza się do... utworzenia zakładki w przeglądarce! Chociaż wydajność tego rozwiązania nie powala (skrypt potrzebuje chwili żeby się załadować) lecz daje elastyczność momentu, w którym chcemy z niego skorzystać - w dowolnej chwili włączamy przygotowaną wcześniej zakładkę, zamiast ładować Firebuga razem z całą stroną. Jak dla mnie idealnie rekompensuje to czas ładowania.

To tyle na dzisiaj. Mam nadzieję, że komuś przyda się to rozwiązanie.

Pozdrawiam i do następnego razu!

środa, 21 marca 2012

O podstawach języka JavaScript słów kilka (ponownie)

Temat odgrzewany jak poobiednia kiełbasa. Ale prawda jest taka, że bez dobrej znajomości podstaw danego języka nie jesteśmy (my, w sensie juniorów) w stanie robić czegoś dobrze przez dłuższy czas. Im więcej czasu poświęcać będziemy na nasz kod, tym bardziej będzie się on rozszerzał, a co za tym idzie - rosnąc będzie prawdopodobieństwo, że popełnimy znaczący, trudny do zdiagnozowania błąd wynikający z braku zrozumienia podstawowych zasad rządzących danym językiem. Jestem przekonany, że jeszcze 2 lata temu słysząc, że ktoś boryka się z kłopotami z JavaScript'em parsknąłbym i zapytał - "a co może być takiego trudnego w JS?!". Otóż jak się okazuje wiele rzeczy może być trudnych i nieintuicyjnych, co nie znaczy, że język ten jest zły.

Półtorej roku temu, w trakcie moich letnich praktyk pisałem na blogu o filmiku z serii Google Tech Talks, w którym przez trochę ponad godzinę Miško Hevery opowiada o podstawach JavaScriptu oraz manipulacjach obiektem DOM. W tamtym czasie podszedłem to tematu chyba zbyt swobodnie, co stwierdziłem niedawno pracując nad kolejnym projektem z udziałem JavaScriptu. Ponownie te same błędy, znów te same problemy. Niestety - język ten ma kilka specyficznych elementów, które umykają człowiekowi, jeśli dostatecznie dużo nie spędzi się czasu pisząc kod bezpośrednio korzystający lub omijający te niuanse. Dlatego właśnie postanowiłem powrócić do lektury, do czego zachęcam także Was.


To, czego zabrakło w poprzednim wpisie to krótkie podsumowanie prezentacji przez prelegenta. Oto ono:

  • JavaScript jest obiektowy jedynie w przyjętej konwencji, jest to typowy język funkcyjny
  • Obiektem domyślnym jest zawsze obiekt window
  • Brak słówka kluczowego this oznacza przypisanie zmiennej do obiektu window
  • Referencja funkcji gubi this - staje się nim obiekt window. Aby temu zapobiec należy korzystać z bindingu - metody call() oraz apply()
  • Skrypt jest wywoływany w jednym wątku a wywołanie funkcji zwraca wynik natychmiast - konieczność stosowania callback'ów
Uzbrojony w tą wiedzę zamierzam w niedalekiej przyszłości przeczytać (i oczywiście opisać na blogu) książkę Douglasa Crockforda - "JavaScript: The Good Parts" wydawnictwa O'Reilly.

Do następnego razu!

niedziela, 26 lutego 2012

Joel Spolsky "Smart and gets things done"

Ciężko uwierzyć, że minął prawie rok od mojego ostatniego posta... Co prawda dzieje się bardzo dużo, ale nie aż tak dużo, żeby raz na jakiś czas nie móc napisać choć krótkiego posta tak jak dziś. Prawda jest taka, że aby być w czymś dobrym, a ja bardzo chciałbym być dobrym bloggerem, należy to robić bardzo często. Jakiś czas temu Jacek Laskowski przytoczył bardzo ciekawy artykuł listujący 8 zasad, którymi powinien się kierować każdy blogger, by stać się efektywnym pisarzem. Podstawowa zasada to - pisać! Nawet najkrótsze artykuły niosą pewną wartość zarówno dla czytelnika jak i pisarza, tak więc będę się starać od teraz pisać choćby i krótkie wpisy, ale minimum jeden na dwa tygodnie.

Wracając do tematu dzisiejszego wpisu - miałem ostatnio przyjemność przeczytać jedną z książek Joela Spolsky'ego, wydaną w 2007 roku "Smart & gets things done". Choć do wszystkiego co pisze Joel należy podchodzić z ekstremalną ostrożnością, to przyznać mu trzeba, że jest bardzo dobrym, doświadczonym pisarzem. W książce tej opisuje proces rekrutacyjny swojej firmy - Fog Creek. Opisy dla kogoś takiego jak ja wydają się co najmniej fantazyjne (limuzyna odbierająca kandydata z lotniska, wynajęcie drogiego hotelu, wycieczki po Nowym Jorku itd. itd.) a mimo to oprócz faktu, iż książkę czytało się bardzo przyjemnie to przyniosła pewną mierzalną wartość.

Bardzo często słyszy się o tzw. testach małpy, testach odpornościowych etc. Osobiście rzadko stosowałem takie podejście. Wynika to z wielu rzeczy: akademickiej natury większości projektów w jakich brałem udział, braku przekonania co do słuszności "tracenia czasu" na takie zabiegi etc. W swojej książce Joel Spolsky opisu coś co nazywa "Hallway test",czyli poproszenie osoby przechodzącej obok (która nie jest związana z produktem, nad którym pracujesz) o spędzenie kilku chwil i wypróbowanie i ocenienie użyteczności, łatwości korzystania i wielu innych aspektów projektu, które nam - programistom - bardzo ciężko ocenić. O słuszności takiego podejścia przekonałem się następnego dnia po przeczytaniu książki. Tworzyłem kawałek funkcjonalności i wydawało mi się, że zmierzam w absolutnie dobrym kierunku. Kiedy prototyp interfejsu był gotowy coś mnie tknęło i postanowiłem pokazać go koledze z zespołu, by go ocenił, przeklikał. Okazało się, że   przez zbyt długie przesiadywanie z kodem nie zauważyłem podstawowych niedogodności użytkowania modułu. Od tej pory staram się pozyskiwać 2-3 minuty czasu innej osoby dziennie na ocenienie moich idei, toków myślenia przy projektowaniu interfejsu użytkownika i nie tylko. W samym zeszłym tygodniu takie krótkie konsultacje okazały się oszczędzić mi pracy przez minimum jeden dzień. Całkiem nieźle, co? :)

Podsumowując - książka Joela Spolsky'ego jest godna polecenia każdemu programiście, menadżerowi i komukolwiek innemu związanemu w ten czy inny sposób z procesem rekrutacji lub te wytwarzania oprogramowania jeśli tylko potrafią dystansować się od tego co czytają. Mi lektura sprawiła ogromną przyjemność i już szukam możliwości dostania w swoje ręce kolejnej jego książki :)

Pozdrawiam i do następnego razu!

sobota, 19 marca 2011

Programowanie to nie rzemiosło?

Witam serdecznie!

Wczoraj zaczynałem dalej rozwijać aplikację na przedmiot Platforma Programistyczna .NET (fuuuuj...). W czasie poszukiwania informacji na temat Windows Communication Foundation (.NET WCF) natrafiłem na post o intrygującym tytule "Programming is not a craft". Po skończeniu pracy zasiadłem do lektury i muszę powiedzieć nie przyszła mi ona łatwo. Po pierwsze nie zgadzam się z tezą przedstawioną przez autora, a po drugie stoi to w całkowitej sprzeczności z tym co przekazuje Sławomir Sobótka na konferencjach i swoim blogu. Nie przeczytałem wszystkich komentarzy do postu (a jest ich ponad 130!), ale odniosłem wrażenie, że autor chyba nie do końca zrozumiał pojęcie rzemiosła w ujęciu informatyki. Tak czy siak, warto spojrzeć czasem na pewne rzeczy z perspektywy osoby trzeciej, która stoi w opozycji do tego, w co się wierzy i co się stoi. Dlatego właśnie zachęcam do przeczytania tego artykułu.

Na pewien czas to tyle. Jestem zawalony pracą i nie daje mi to możliwości pisania tylu postów, ile bym chciał. Ale mam nadzieję, że już niedługo to wszystko się unormuję i będę mógł dotrzymać obietnic napisania postów na pewne tematy (jak ta złożona w tym poście).

Pozdrawiam i życzę miłej niedzieli przy pięknej pogodzie! :)

środa, 16 lutego 2011

Ryan Singer - człowiek, który zmusił mnie do myślenia

Witam po długiej przerwie!

Od końca zeszłego roku nie opublikowałem żadnego postu. Dlaczego? Powodów jak zwykle można by wymieniać wiele, ale ja ograniczę się do podania jednego, najważniejszego. Otóż od kilku tygodni jestem dumnym posiadaczem tytułu inżyniera fizyki technicznej ze specjalnością informatyki stosowanej! :) W tym tygodniu rozpocząłem studia na drugim stopniu, na tym samym kierunku. Ponieważ nie planuję pracować studiując na pierwszym semestrze (32 godziny tygodniowo, zajęcia do 20-21 itp. bardzo skutecznie to utrudniają) w wolnym czasie postanowiłem nadrobić wiele zaległości.

Jedną z pierwszych rzeczy jakie postanowiłem nadrobić to obejrzenie trzech prezentacji Ryana Stingera, pracownika firmy 37signals. Firma ta jest znana z m.in. Rails'ów dla języka Ruby, czy też rewelacyjnej wręcz książki ReWork. Prezentacje Ryana zmusiły mnie do przemyślenia sposobu, w jaki do tej pory podchodziłem do swoich małych projektów. Zbyt szybkie siadanie do komputera i rozpoczęcie kodowania kosztuje mnie teraz bardzo wiele w drugiej iteracji malutkiej aplikacji, którą planuję przerobić. Doszło do tego, że znaczna większość kodu, który napisałem do pierwszej wersji jest do wyrzucenia. Ale człowiek uczy się na błędach i od bardziej doświadczonych od siebie :) Spróbuję zastosować rady Ryana w tym projekcie, zobaczymy co z tego wyjdzie ;)

A teraz zapraszam do obejrzenia wspomnianych przeze mnie prezentacji:

Ryan Singer at Future of Web Apps, London 2010


poniedziałek, 27 grudnia 2010

Cytaty #8

Witam!

Nie wiem dlaczego, ale mam ostatnio nieodpartą ochotę pisać jak najwięcej postów na blogu :) Tym razem chciałbym przedstawić trzy zasłyszane hasła, które głęboko utkwiły mi w pamięci, oraz które dały mi wiele do myślenia.

Pierwszy z nich pochodzi z jednego z moich ulubionych seriali - Chorych Doktorów (ang. Scrubs). W jednej ze scen Bob Kelso mówi do swojej pacjentki (a także do przysłuchującego się Turk'a):
"Nic, co jest warte posiadania, nie przychodzi łatwo (...)"
Jakby tego było mało, potwierdza to niejako Rendy Pausch, którego książkę - Ostatni Wykład - w ostatnim czasie przeczytałem już po raz trzeci od deski do deski. Są w tej książce (a także na wideo z jego faktycznego ostatniego wykładu) pewne bardzo słuszne słowa:
"Mury istnieją po to, by powstrzymywać ludzi, którzy nie pragną czegoś dostatecznie mocno"
Na sam koniec przytoczę słowa Dona Brown'a z firmy Atlassian, który to w trakcie prezentacji pt. "Functional and Integration Testing for the Lazy" na AtlasCamp 2010 powiedział:
"As we start any good story, every story begins in Maven"
Nie trzeba chyba dodawać, że Don nie jest miłośnikiem skomplikowania, jakie niesie ze sobą Maven, gdy używa się go w większych projektach? :) Prawda jest taka, że Maven jest cudowny, umożliwia i ułatwia wiele rzeczy, lecz każde ulepszenie przynosi tyle samo, jeśli nie więcej, problemów do rozwiązania. W moim przypadku, w ostatnim okresie, znaczną część czasu poświęcam na poprawianie konfiguracji Mavena zamiast zajmować się implementacją nowych funkcji w projekcie, co potrafi naprawdę mocno zniechęcić do tego narzędzia.

Pozdrawiam i do następnego razu!

niedziela, 26 grudnia 2010

Agile Central Europe 2010

Witam!

Święta to idealny czas na nadrobienie zaległości, które nie wymagają zbyt wiele zachodu. Ponieważ ostatnie kilka tygodni było naprawdę zwariowane, nie miałem tak naprawdę czasu przejrzeć ostatnich numerów JAVA exPress, czy też Software Developer's Journal, lub też być na bieżąco z ciekawymi prezentacjami na InfoQ. Całą sytuację pogorszył jeszcze fakt startu nowej inicjatywy kolegi z pracy, Damiana Nowaka - wPolsce.it. Jest to portal, na łamach którego publikowane mają być docelowo informacje o wszystkich konferencjach informatycznych w Polsce. Dzięki tej inicjatywie dowiedziałem się o konferencji, która miała miejsce w tym roku - Agile Central Europe 2010 w Krakowie. Piszę o tym, ponieważ przeglądając stronę konferencji natrafiłem na zapis wideo prezentacji Roberta Dempsey'a o ciekawym tytule "Distributed Agile in a Multicultural World". Od kiedy trafiłem do swojej pierwszej prawdziwej pracy informatycznej około 4 lata temu pracowałem zdalnie, w domu. Nie było biura jako takiego, był tylko sklep, dla którego pracowałem, lub od czasu do czasu mieszkanie właścicielki firmy oraz jej partnera, gdzie odbywały się sesje planowania. Już po kilku tygodniach pracy tam miałem okazję załatwiać sprawę z ludźmi zza granicy, co wpierw napawało mnie strachem (do tej pory nigdy nie opuściłem granic naszego wspaniałego ojczystego kraju), a także ekscytacją w różnej postaci. Już wtedy, te 4 lata temu, postanowiłem dojść w swojej karierze zawodowej do miejsca, w której będę pracował z ludźmi nie tylko z innego kraju, ale także innego kontynentu. Nie tak dawno temu, kiedy dostałem propozycję pracy w Spartezie (a jeśli mam być szczery już w trakcie odbywania tam praktyk studenckich) marzenie to powróciło ze zdwojoną siłą. Wraz z tym marzeniem przyszło przeświadczenie, że tak naprawdę nie jestem w żaden sposób przygotowany do takiej pracy i nie mam tu na myśli tylko moich zdolności programistycznych. Idąc tym tropem postanowiłem wolną chwilę w te święta spędzić na obejrzeniu prezentacji Roberta i czas na to poświęcony nie był ani trochę zmarnowanym. Prezentacja jest bardzo ciekawa i pomogła otworzyć mi oczy na tak wiele aspektów zdalnej pracy interkontynentalnej, że tak naprawdę mam teraz więcej pytań i wątpliwości niż wcześniej. Sądzę jednak, że jest to dobry objaw, gdyż pokazuje, że mi zależy. Ale żeby nie przedłużać, oto wspomniana przeze mnie prezentacja:

Robert Dempsey - Distributed Agile in a Multicultural World from Krakow Tech Conferences on Vimeo.

Niestety filmik nie jest w najlepszej jakości, nie widać slajdów przez większość czasu - jednym słowem - Parleys to to nie jest ;) Przeglądając kanał na Vimeo, na którym umieszczono prezentację natrafiłem jeszcze na kilka zapowiadających się ciekawie prezentacji. "Refactoring Test Code" Piotra Jagielskiego okazał się zacząć bardzo dobrze, lecz nie dane mi było dotrwanie choćby do 1/3 prezentacji - prelegent omawiał wyświetlany na rzutniku kod, który był całkowicie nieczytelny dla widza. Maria Diaconu wraz z Alexandrem Bolboacă wygłosili prezentację na temat "Software as a craft - an introduction to the Software Craftsmanship movement" - temat, który dzięki Sławomirowi Sobótce jest mi znany o tyle, że jestem świadom jego istnienia i chętnie dowiaduje się czegoś na ten temat przy każdej możliwej okazji. Niestety prezentacja nie była ciekawa, a to za sprawą ciężkiego dla ucha angielskiego oraz małej ilości przekazanych treści.

Święta przed chwilą się skończyły, tak więc czas przygotować się do powrotu do pracy, na dziś to tyle.
Pozdrawiam i do następnego razu!

sobota, 25 grudnia 2010

Co nowego w IntelliJ IDEA 10

Witam!

Dwa tygodnie temu wróciłem po długim (5-tygodniowym) urlopie do pracy. Pierwsze co zwróciło moją uwagę to aktualizacja obecnie używanego przeze mnie IDE - IntelliJ IDEA - do wersji 10. Od dłuższego czasu, jeszcze przed pójściem na urlop, było dosyć głośno na temat nowej wersji naszego ulubionego edytora. Największy nacisk miał zostać położony na wydajność aplikacji, ale nie miało to być jedyne udostkonalenie, które miała wnieść najnowsza wersja. Poniżej prezentuje liste rzeczy, które najbardziej spodobały mi się w IDEA 10:
  1. Poprawiona wydajność - na stronie z informacjami o nowościach w wersji 10 firma JetBrains informuje, że nowa IDEA uruchamia się w czasie dwukrotnie szybszym niż poprzednia wersja, podobnie jak indeksowanie projektu. Liczby trochę przesadzone, ale 30-35% szybsze działanie, które osobiście odnotowałem od samego początku pracy z nową wersją edytora robi naprawdę duże wrażenie.
  2. Odczepiane okna - to opcja, której bardzo brakowało mi po przesiadce z Eclipsa na IntelliJ IDEA. W nowej wersji brak ten został uzupełniony i możemy ustawiać okna edytora dowolnie, wedle uznania. Jest to bardzo ważne, kiedy pracuje się na dwóch monitorach. Mała rzecz, a cieszy :) Wiele osób bardzo narzekało, że w jednym oknie nie da się zmieniać w prosty sposób kolejności zakładek - teraz jest to równie proste jak w innych znanych IDE. Poniżej filmik prezentujący nową opcję:
  1. Zakładki - to ciekawy sposób na zaznaczenie istotnego w danym momencie fragmentu kodu. Dzięki temu nie ma konieczności przeglądania od nowa całego kodu, aby znaleźć interesujący nas fragment. Poniżej prezentacja nowej funkcji:
  1. Instant Autocompletion - polega na podpowiadaniu składni bez konieczności ciągłego wciskania kombinacji Ctrl + Space. Choć pokazano, że przyspiesza to prace przy pisaniu kodu (szczególne wrażenie zrobiło na mnie podpowiadanie składni XPath) to znając życie bardzo dużo osób zrezygnuje z tej funkcji całkowicie po relatywnie krótkim czasie. Mi na razie się podoba i jest wygodne, więc póki się nie zirytuje, póty zostaje :)
  1. Integracja z Apache Maven - obsługa Mavena w IntelliJ IDEA jest tzw. out-of-the-box, czyli nie potrzeba żadnych dodatkowych paczek, aby z niego korzystać. W nowej odsłonie edytora dodano indeksowanie zdalnych repozytoriów, pomoc przy refaktoryzacji pliku POM, etc.

  1. Productivity Guide - to dodatek trochę dla zabawy, choć w połączeniu z rozszerzeniem Key Promoter może być bardzo pomocne. Idea jest bardzo prosta - IDEA zlicza ilość wykorzystania ułatwień, jakie dostarcza edytor i zestawia je w przejrzysty sposób. W ten sposób możemy łatwo dowiedzieć się o nowych skrótach klawiszowych, których jeszcze nie znaliśmy, a mogą nam się bardzo przydać. Dodatkowo każde z udoskonaleń jest opisane wraz ze skrótem klawiszowym oraz stosownym zrzutem ekranu.



Czas powiedzieć co mi się nie podoba w nowej odsłonie IntelliJ IDEA:
  1. Sposób tworzenia branchy/tagów w Subversion - nie udało mi się jeszcze zrobić branchu w repozytorium SVN'a przy pomocy IDEA'i w sposób zadawalający. W Eclipse wystarczyło wskazać folder, do którego chce przekopiować katalogi z głowy trunk'a lub wskazanego innego folderu w repo, natomiast IDEA dodaje do przygotowanej przeze mnie lokalizacji folder o nazwie, którą pobiera ze źródłowego URL'a i dopiero tam kopiuje pliki - bardzo niewygodne.
  2. Nie wszystkie nowe opcje działają w Community Edition - przykładowo nowe możliwości w obsłudze Maven'a nie są dostępne w wersji CE, co jest bardzo rozczarowujące.
  3. Problem z pluginami - po aktualizacji z wersji 9 do 10.0 okazało się, że muszę instalować wszystkie rozszerzenia na nowo. Dziwne, bo sądziłem, że skoro wskazałem lokalizację poprzedniej wersji, gdzie znajdowały się pliki konfiguracyjne, IDEA sama się zorientuje, że trzeba trochę oprogramowania doinstalować...
W momencie pisania tego postu IDEA poinformowała mnie o dostępności nowej wersji, 10.01 build 99.32 (IDEA 10 to build 99.18), w której wprowadzono liczne poprawki. Taki stan rzeczy bardzo cieszy. Widać, że oprogramowanie się rozwija i to w bardzo dobrą stronę, czas więc zacząć zbierać na wersję Ultimate Edition :)

Z miłych zaskoczeń przy aktualizacji oprogramowania: od niedługiego czasu jestem szczęśliwym posiadaczem nowego laptopa - HP Pavilion dv7-3130ew. Zainstalowana w nim karta WiFi jest firmy Broadcom, a z tego co wcześniej się orientowałem, jej instalacja pod Ubuntu bywa problematyczna. Jakież wielkie było moje zaskoczenie, gdy po pierwszym uruchomieniu Ubuntu 10.10 system zapytał mnie, czy nie chce zainstalować sterownika karty graficznej, karty WiFi oraz tunera cyfrowego DVR. Zgodziłem się i od tej pory nie mam z tym najmniejszych problemów - doskonały wzór dla twórców oprogramowania, co znaczy program user-friendly :)

To tyle na ten moment, czas wracać do świątecznego stołu i cieszyć się chwilami wytchnienia spędzonymi z rodziną :)

Pozdrawiam i życzę wszystkim wesołych świąt!!!

poniedziałek, 6 grudnia 2010

Cytaty #7

Witam!

Dzisiaj usłyszałem bardzo mądre słowa człowieka, który żył dawno temu, lecz jego słowa są aktualne także dzisiaj i jestem pewien, że będą za kolejnych 100, 200, czy 500 lat. Mowa tu o Williamie Faulkner'ze. Był to amerykański powieściopisarz, poeta, laureat Nagrody Nobla w dziedzinie literatury. A oto co powiedział w 1958r. Jean Stein'owi:
Always dream and shoot higher than you know you can do. Don't bother just to be better than your contemporaries or predecessors. Try to be better than yourself (...).
I chociaż Faulkner mówił wtedy o pisarzach, to jednak nie ma chyba branży, w której słowa te nie miały by swojej racji. Bardzo często pracujemy lub uczymy się w towarzystwie ludzi z dużym doświadczeniem lub sporym talentem i notorycznie próbujemy być lepsi od nich. Niestety bardzo często okazuje się, że jest to zgubna motywacja - osoby te także stają się coraz lepsze, coraz trudniej być od nich lepszym. Za to samo bycie jutro lepszym od siebie samego, niż jest się dzisiaj, jest doskonałą motywacją dającą wciąż nowe, coraz lepsze wyniki.

Natchniony tą myślą wracam do pracy :)
Pozdrawiam i do następnego razu!

sobota, 4 grudnia 2010

Nowy blog o Tapestry

Witam serdecznie!

Pierwszy projekt z użyciem frameworku Spring 3 za mną, teraz prace skoncentrowane na zapoznawaniu się z językiem Jython i pisaniu pracy inżynierskiej. Chociaż ostatnio coraz częściej spotykam się z opinią, że znajomość, choćby podstawowa, Springa to podstawa, to uważam używanie go do małych aplikacji za strzelanie do muchy z armaty. Znacznie pozytywniejsze wrażenie odniosłem odnośnie frameworka Tapestry (w wersji 5.2) po prezentacji Michała Grucy na spotkaniu Trójmiasto Java User Group pt. "Przegląd możliwości szkieletu aplikacyjnego Tapestry 5". Od tamtego momentu czekam z niecierpliwością na możliwość poznania w praktyce podstaw tego cudeńka. Ponieważ przez najbliższych kilka tygodni nie zapowiada się na to, żebym miał ku temu możliwość pocieszam się wpisami na blogu Michała, które wreszcie zgodził się upublicznić. I tak oto mam ogromną przyjemność zaprezentować "Reliable IT Solutions" - polski blog o podstawach programowania z użyciem Tapestry dla początkujących i nie tylko. A o to co sam autor o nim pisze i jak definiuje cel swojego młodego przedsięwzięcia:
Jestem jeno skromnym programistą, który stara się uczynić świat lepszym, poprzez promowanie dobrych nawyków i lepszych technologii. Mam nadzieję, że poprzez tego bloga, uda mi się dotrzeć do kilku osób i uczynić ich życie lepszym, by nie popełniały tych samych błędów, które ja musiałem popełnić.
Pozdrawiam i zachęcam do czytania wpisów Michała!