Damian Nowak is a CEO at Virtkick. He's a Ruby coder, an Arch Linux hacker, and drinks good beer.
Long time no write. It’s been quite a long. Much happened in the meantime. Long story short, today I’ve got two kiddos, and awaiting a third one. And in the tech field, I completely abandoned Java for Ruby. I was mainly building apps that manage servers somehow - from HTTP, through DNS to virtualization. This all leads to where I’m today.
Świat Javy zawsze budzi się na wiosnę. Konferencje 33degree, DevCrowd oraz 4developers już za nami, a wkrótce czekają na nas Geecon i Confitura.
Dzisiaj relacja z 33degree - prezentuję wiedzę prosto z moich notatek. Wpis trochę spóźniony, ale wcześniej nie miałem czasu - a działo się sporo. Zmieniłem stan cywilny, zmieniłem pracę i założyłem firmę. ;-)
You are developing a secure Java Web Start (JNLP) application, you sign JARs with jarsigner
tool,
you have a valid certificate but some people still get Found unsigned entry in resource
error message
although your JARs are signed and jarsigner -verify
accepts them. Did you encounter this problem too?
Czy można mieć obsługę czterech monitorów w jednym komputerze w taki sposób, aby dowolnie przeciągać okna pomiędzy poszczególnymi monitorami? Oczywiście bez dodatkowych kosztów np. w postaci specjalistycznego sprzętu czy płatnego systemu operacyjnego pewnej firmy. Yes, we can!
Creating a website with Ruby on Rails is just fun. You get lots of things out of the box so that you don’t have to reinvent the wheel. The only thing you have to do is to focus on creating the website. I use Rails both for static and dynamic sites. Hold on, what do you mean by “static” if every Rails application is dynamic? Just consider static every website that can be generated once and served forever.
Privately, we are passionate about software development and open source. Apart from providing a reasonable hosting of Atlassian tools, we want to contribute to community a bit. This is why we decided to run a blog after getting the most important things with AtlasHost done.
Jakiś czas temu w mojej głowie narodził się pomysł uruchomienia nowego biznesu - hostingu narzędzi developerskich firmy Atlassian. Ja znam się na administracji tymi narzędziami oraz ich programistycznym rozszerzaniem, zaś kolega kwiat jest administratorem i sieciowcem. W taki sposób powstał AtlasHost, gdzie oferujemy na razie hosting issue trackera JIRA.
Uczelnia jest ważna. Student przychodzi z niewielką wiedzą i w trakcie studiów informatycznych zaczyna powoli wszystko rozumieć - dorasta do bycia programistą. Trzeba jednak uważać i nie jeść wszystkiego, czym karmią wykładowcy. Jest to zadanie trudne - bo kogo słuchać, jeśli nie wykładowców? Najpierw posłuchaj mnie, skoro już tutaj trafiłeś. ;-) Na końcu wrócę do tego pytania i postaram się odpowiedzieć.
Ten wpis kieruję do osób, które jeszcze studiują i nigdy nie pracowali w firmie wśród doświadczonych developerów.
Apprenticeship Patterns. Guidance for the Aspiring Software Craftsman to kolejna przeczytana przeze mnie książka. I w sumie, to nie wiedziałem do końca, o czym będzie. Sprawdziłem tylko w słowniku, że apprentice to praktykant. Tak więc książka miała być o jakichś wzorcach dla praktykanta, który ma ambicję zostać mistrzem w popularnym teraz nurcie Software Craftsmanship.
Kilka dni temu wróciłem z konferencji Java Developer’s Day 2010 z Krakowa. Moje ogólne wrażenie z konferencji jest słabe. Co z tego, że konferencja trwała dwa dni, jeśli tym razem dostępna była wyłącznie jedna ścieżka? Jeszcze jeden z wykładów był po prostu reklamowy. Przyszła firma i mówiła o sobie – czy za to zapłaciliśmy? Chcemy porozmawiać z firmami podczas przerw – tutaj z kolei panowała cisza jak po śmierci organisty. Aktywność sponsorów podczas przerw była praktycznie zerowa, jeden nawet nie przybył. Dobę przed konferencją zmieniły się godziny prelekcji “z przyczyn niezależnych”. A w losowaniu nagród kolega wygrał książkę o Javie 1.2. To krótkie streszczenie tegorocznego JDD. Zapraszam do przeczytania szczegółowej relacji, jeśli jeszcze nie wierzysz, że było raczej słabo.
Kilka dni temu skończyłem czytać The Pragmatic Programmer – książkę skierowaną do każdego, kto ma ambicję być dobrym programistą. Naprawdę polecam jej przeczytanie. Mimo że książka została wydana w 1999 roku, tematy są nadal na czasie i zostaną aktualne jeszcze przez wiele lat. Ten wpis stanowi krótkie streszczenie książki – wyciągam wszystkie wskazówki z ramek i je opisuję. Ale na początek wstęp - kim w ogóle jest pragmatyczny programista.
Bardzo wielu miało różnorakie przeboje, hulanki i swawole z firmą INFO-CAL znaną jako cal.pl. Zdążyłem się już przyzwyczaić do ich sposobu traktowania klienta, ale dzisiaj mnie zaskoczyli. :-) Oczywiście negatywnie, ale – będąc już przyzwyczajony, że to tak musi po prostu być – dzisiaj miała sytuacja jak z kabaretu. Ubaw po pachy.
Krótki wpis z opisem najważniejszych wzorców projektowych. Po więcej szczegółów odsyłam do innych miejsc w sieci. :) Myślę jednak, że taka minimalistyczna lista wzorców może być przydatna. Opracowałem po przeczytaniu książek Refactoring to Patterns Joshuy Kerievskiego i Effective Java Joshuy Blocha.
Nie od dziś wiadomo, że redeploy aplikacji Javowych to jedna z najbardziej wkurzających rzeczy. Potrafi trwać od kilku sekund do długich minut – wszystko w zależności od wielkości aplikacji oraz użytego serwera aplikacji. Do tego dochodzi jeszcze kilka sekund budowania Mavenem.
Miesiąc temu skończyłem czytać książkę Effective Java Joshuy Blocha. Dzisiaj podzielę się setką krótkich myśli, które z niej wyniosłem. Ich kolejność jest najczęściej zgodna z kolejnością przedstawionych w książce tematów.
Ostatnio gadaliśmy z kolegą przy piwie o nadchodzących wyborach. Zapytany na kogo zagłosuję bez wahania odparłem, że na Komorowskiego. Wdaliśmy się w dyskusję, czy aby to na pewno jest to dobry kandydat i ostatecznie wyszło na to, że tak naprawdę g...
Celem tego artykułu jest porównanie modeli licencjonowania oprogramowania z punktu widzenia programisty, który chce skorzystać z kodu źródłowego napisanego przez innych. Aby bez obaw włączyć cudzy kod do własnego projektu należy w pełni rozumieć licencj...
Przed dwunastą przekroczyłem próg swojego mieszkania - wróciłem z konferencji 4developers w Poznaniu. Oto publikuję moje przemyślenia z prezentacji, na których uczestniczyłem.
Niedawno postanowiłem zainstalować sobie Ubuntu na świeżo, przy okazji migrując na wersję 64-bitową. Jak postanowiłem, tak uczyniłem tydzień temu. Dzisiaj chciałem kontynuować pracę nad jednym projektem w Javie ME i…
Początkowo, wpis ten miał charakter szyderczy i kpiący z Gmaila. Po dłuższym badaniu okazało się jednak, że to Gmail ma rację i to on najlepiej wykonuje to, co RFC przykazało. Część szyderczą pozostawiam, aby potem wykazać swoją niewiedzę.
Jakiś czas temu zastanawiałem się nad kupnem netbooka. Najważniejszym kryterium był dla mnie czas pracy na baterii, dlatego wybór padł na Asus Eee 1005HA. Problemem jednak okazały się całkowicie niespójne oznaczenia - 1005HA(M) i 1005HA(H). Ten wpis ma na celu podanie najważniejszych różnic pomiędzy wersjami 1005HA, aby potencjalni kupujący nie dali wprowadzić się w błąd.
Dzisiaj klient zgłosił mi problem z jedną z jego starych stron. Problem polegał na tym, że zawartość strony wyświetla się trzy razy. Rzeczywiście, kilka dni wcześniej majstrowałem trochę w kodzie kontrolera i widoku, aby ulepszyć generowanie meta-danych pod SEO i przy okazji popsułem inne miejsce.
Ta sytuacja zmotywowała mnie, aby napisać trochę o testach jednostkowych. Stosuję je w codziennej pracy przy niektórych projektach w Javie i PHP - i często ratują mi skórę.
Moi znajomi znali mnie dotychczas z tego, że lubiłem system Windows do tego stopnia, że nigdy nie przesiadłbym się dobrowolnie na Linuksa do codziennej pracy. Cóż mogę mieć na Linuksie, jeśli tylko kłopoty z niedziałającymi urządzeniami oraz konfigurowaniem wszystkiego w plikach konfiguracyjnych o zakręconej składni?
Dzisiaj w trakcie pracy nad Scrumowym pluginem dla Atlassian JIRA odczułem głęboką potrzebę skonfigurowania Mavenowego skryptu budowania w taki sposób, aby wszystkie wystąpienia tokena ${plugin.version} zostały zamieniane na pewien ciąg znaków jeszcze przed kompilacją.
Ostatnio w pracy miałem się zająć rozwinięciem pluginu do Atlassian JIRA, który ma wspomagać pracę zespołu deweloperów w metodologii Scrum (agile). Zadanie - od strony technicznej - było bardzo ciekawe, ponieważ dowiedziałem się, w jaki sposób robi się pluginy do JIRY oraz przy okazji mogłem poznać wycinek architektury dużego systemu, jakim jest JIRA. Miałem również możliwość poznania Mockito, ponieważ nie dało się napisać testów jednostkowych JUnit operujących bezpośrednio na całej Jirze. Nie miało to nawet sensu.
Prawie dwa tygodnie temu postanowiłem odwiedzić mojego kolegę i wspólnika, który mieszka w Warszawie. Jako, że miałem do załatwienia coś po drodze w Tczewie, postanowiłem pojechać nową autostradą do końca, dalej drogą krajową numer 1 do Łysomic przed Toruniem, by tam odbić w stronę Warszawy.
Czy widzieliście walczących programistów? Jeśli nie, to wybierzcie się kiedyś na sesję randori. Na czym to polega? Otóż, dwóch programistów siedzi przed jednym komputerem. Jeden z nich pisze kod, drugi zaś go kontroluje i ewentualnie podpowiada. Zasada jest taka, że jeśli jeden pisze test jednostkowy, to drugi pisze implementację. W myśl TDD (test driven development) test jednostkowy pisany jest jako pierwszy. Potem drugi programista pisze tylko tyle implementacji, by zapalił się zielony kolor - czyli przejść nowy test jednostkowy oraz wszystkie poprzednie. Gdy test zakończy się sukcesem, pierwszy programista refaktoryzuje kod kolegi - obserwator widzi zawsze trochę więcej, niż robotnik. ;-)
Dzisiaj uczestniczyłem w pierwszej części konferencji COOLuary v.2. Nim jednak podzielę się wrażeniami, opiszę samą ideę konferencji tego typu.
W ramach projektu ze Sztucznej Inteligencji mieliśmy stworzyć sieć neuronową, która będzie odpowiadała, czy punkt S = [x, y] należy do kwadratu spełniającego układ nierówności:
Dzisiaj na mojej uczelni odbywały się coroczne Trójmiejskie Targi Pracy. Jedna z firm przedstawiających swoje oferty, Sygnity, zorganizowała mały konkurs z nagrodami. Konkurs miał 10 pytań o tematyce programistycznej (Java, JEE, SQL, build-scripts). Z testu uzyskałem wynik 9/10. Potknąłem się na rzeczy, której byłem po prostu pewien - na analizie krótkiego kodu w języku Java.
Dzisiaj przypadkowo trafiłem na stronę, na której wychwalano budynek mojego wydziału. Osoba, która nie studiuje na ETI mogłaby naprawdę uwierzyć, że ten budynek jest wręcz perfekcyjny. Niestety, tak nie jest. Ten wpis będzie stanowił uzupełnienie artykułu na MuratorPlus.pl o negatywne strony budynku nowego ETI.
Zawsze miałem problem z nauką skrótów klawiszowych w dużych środowiskach programistycznych typu Eclipse, czy NetBeans. Gdy skrótów jest zbyt wiele, ciężko jest zapamiętać więcej niż kilka z listy. Z pomocą przychodzi jednak plugin MouseFeed - jeśli...
Napisanie pierwszego programu na komórkę w JME (kiedyś J2ME) może być proste, pod warunkiem, że mamy dobre środowisko. Nie da się bowiem pisać programu, nie mając chociażby emulatora komórki pod ręką - najlepiej zintegrowanego z środowiskiem programistycznym (IDE). Wpis ten stanowi krótki poradnik dla osób, które chciałyby napisać swój pierwszy program w Javie ME na komórkę przy użyciu Eclipse.
Kilka dni temu musiałem wykonać dość długi telefon do Niemczech. Był to więc dobry moment na założenie sobie VoIP-a. Znajomy polecił mi EasyCall.pl, gdyż jest ich klientem od roku i nie narzeka.
Bycie developerem to nie tylko tworzenie stron, ale także promocja. Przez promocję rozumiem pozycjonowanie serwisów tak, żeby osoby szukające informacji przez wyszukiwarkę trafiały do mnie. Niestety, w sieci jest na tyle dużo spamu, że samo budowanie dobrych, merytorycznych i przydatnych serwisów to połowa sukcesu.
Niewiele osób wie, jakie są ich prawa jako właścicieli domeny. Znajomość tych praw przydaje się w krytycznym momencie – gdy zbliża się koniec ważności domeny, a koszt przedłużenia u innego rejestratora jest znacznie niższy.
Denerwuje Cię, że Windows czasami resetuje Ci położenie wszystkich ikon pulpitu?
Niedawno Tomek zamieścił na blogu Polish Words krótkie podsumowanie zysków z reklam na jego blogu. Trochę się zdziwiłem relatywnie wysokimi wynikami z reklam kontekstowych, a niskimi z programów partnerskich.
Open Power Template w wersji 2.0 ma się coraz lepiej. Niedawno wyszła jego pierwsza wersja beta. Wraz z wersją dev8 zdecydowałem się wykorzystać OPTv2 w produkcji, ponieważ składnia została już zamrożona - jeśli wierzyć zapewnienion Zyx'a ;-).
Niedawno, w ramach zajęć z przedmiotu Języki programowani na mojej uczelni miałem przyjemność poznać w pełni obiektowy język programowania Smalltalk.
Kilka dni temu Zyx zakomunikował światu, iż Open Power Template został prawie ukończony. Wydana została ostatnia wersja developerska (2.0.0-dev8). Jeśli wierzyć zapewnieniom Zyxa, zostało mu już tylko napisać kilkaset testów PHPUnit. Wtedy będzie wiadomo, czy 2.0.0-dev8 stanie się finalną wersją, czy wyszły na jaw jakieś błędy ;)
Pół roku temu zamieściłem sposób na integrację systemu szablonów Open Power Template z frameworkiem KohanaPHP. Po pewnym czasie doszedłem jednak do wniosku, iż moje rozwiązanie jest lamerskie ;) Oto zamieszczam moduł integrujący Kohanę z OPT w taki sposób, że z szablonów korzystamy zupełnie tak samo, jak z View.
W związku z trwającą właśnie Olimpiadą w Pekinie postanowiłem jeść mniej cukierków. Wierzę, że dzięki tej manifestacji obrony życia, Chiny zaczną respektować prawa człowieka.
Na rynku procesorów dla komputerów klasy PC swoje miejsce już dawno znalazły procesory tzw. dwurdzeniowe, a procesory czterordzeniowe stają się coraz tańsze. Procesor wielordzeniowy to de facto układ kilku oddzielnych procesorów o współdzielonej magistrali. Rodzi się pytanie, czy procesor n-rdzeniowy wykona szereg operacji n razy szybciej niż jeden procesor. Jak łatwo się domyśleć, odpowiedź brzmi “nie, jest wykona”.
Bardzo wiele serwerów korzysta z protokołu SSH do udostępniania powłoki. Wszyscy wiedzą, że jest to protokół bardzo bezpieczny. Mniej osób zdaje sobie sprawę z tego, że najsłabszym ogniwem w systemie zabezpieczeń systemów jest użytkownik i jego hasło. Postaram się przedstawić kilka prostych sztuczek jak uczynić SSH chociaż trochę bezpieczniejszym.
KDE i Gnome mają obsługę wirtualnych pulpitów już od dawna, podczas gdy najnowszy Windows jeszcze tego nie ma. Podczas przełączania za pomocą ALT+TAB widzimy tylko ikony poszczególnych programów, zamiast podglądu okna programu. I wiele innych… Okazuje się jednak, iż na stronie Microsoftu udostępniona jest seria tzw. PowerToys dla Windows XP, które usprawniają codzienną pracę z systemem.
Na wielu subskrybowanych przeze mnie blogach pojawiło się wiele wpisów na temat nowej Opery 9.50. Zachwyt, jaki spowodowała nowa Opera jest ogromny, tymczasem ja jestem nią bardzo zawiedziony. Jeden dzień jej użytkowania i już mam jej dosyć.
Na polskiej Wikipedii przeczytałem, iż singleton jest uważany za antywzorzec. To zdanie wzburzyło mnie dość mocno, ale gdy emocje tego strasznego przeżycia opadły zastanowiłem się, dlaczego autor tak napisał.
Malcom na swoim blogu podzielił się swoimi przemyśleniami na temat obiektowości w webdevelopingu, choć nie tylko. Jako że nie zgadzam się za bardzo, z tym, co napisał - odpisałem mu w komentarzu. Tak się tam rozpisałem, że zyskałem i materiał na wpis na moim blogu :)
Dzisiejszy wpis poświęcony jest integracji frameworka KohanaPHP z serwerem Lighttpd w taki sposób, aby ukryć adres index.php. Tzw. ładne linki, czy nice urls są bardzo ważne pod względem optymalizacji strony internetowej pod wyszukiwarki.
Miałem dzisiaj coś do porobienia z poziomu konsoli DOS-owej. Aby wejść do katalogu
E:\Programowanie\Java\Książki\Materiały\Java Core 1\v1ch9
musiałem się nieźle ponaciskać tych Tabów,
albo naklikać (bo “mądra” konsola DOS'owa nie wie, co to CTRL+V).
Wtem przypomniało mi się, że miałem kiedyś w menu kontekstowym pozycję “DOS Prompt Here”,
która otwierała mi konsolę na wskazanym katalogu…
Niektórzy pewnie zauważyli, iż wraz ze zmianą wyglądu bloga pojawił się z prawym menu dodatkowy dział pt. “Rekomendacje”. Owy link to mój pierwszy, jaki udało mi się sprzedać tutaj na moim blogu za pośrednictwem firmy LinkLift.
Są dwa sposoby, aby zintegrować system szablonów OPT z frameworkiem Kohana. Pierwszy, łatwiejszy i zarazem bardziej elegancki, nie wymaga żadnych modyfikacji w OPT.
Dzisiaj, 5 kwietnia obchodzimy CSS Goły Dzień w Polsce (na świecie obchodzimy go 9 kwietnia). Pomyślałem, że warto się przyłączyć i zobaczyć, jak będzie wyglądała strona bez dołączania arkuszy CSS. Jak widać, szablon Wordpressowy jest dobrze zrobiony...
Dzisiaj, w Środę Popielcową, weszliśmy - my katolicy - w pierwszy dzień Wielkiego Postu. Wielki Post to okres szczególny. W czasie tych 40 dni mamy czas, aby skierować się czynami w stronę Boga. Czy jednak wykorzystamy ten czas tak, jak się należy...
XSLT, czyli Extensible Stylesheet Language Transformations, służy w skrócie do prezentacji danych zawartych w pliku XML w graficzny sposób. Idea szeroko pojętego rozdzielania treści od formy jest tutaj zachowana. XML przechowuje tylko surowe dane,...
Temat wydajności tych czy innych silników baz danych był już wielokrotnie poruszany na stronach i blogach. Testy, na które się dotychczas natknąłem nie były zbyt wartościowe. Raz MySQL wygrywał, raz PostgreSQL. W dodatku każda dyskusja na temat MySQL...
Jakiś czas temu w ramach zajęć z Metod Reprezentacji Informacji na studiach musiałem się zaznajomić z szeroko chwalonym przez wykładowców standardem XML. O ile samo tworzenie własnego pliku XML wielką filozofią nie jest, ponieważ to użytkownik tworzy sobie strukturę i znaczniki, o tyle XML Schema nie jest już dowolna. Stworzenie jej za pierwszym razem zajmuje trochę czasu, ponieważ trzeba zaznajomić się z wszystkimi dostępnymi elementami oraz wypróbać to w praktyce.
Kohana to mały framework MVC, wspomagający tworzenie stron internetowych. Wersja 1.0 była forkiem słynącego z prostoty i szybkości (ale i rzadkimi aktualizacjami) CodeIgnitera. Wersja 2.0, wydana około miesiąca temu stanowi już całkowicie osobny projekt. Na aktualizacje nie ma co narzekać - społeczność Kohany na bieżąco zajmuje się poprawianiem błędów i implementacją nowych funkcji.