Thursday, 26 November 2015

Clojure - How to replace current time creation?

Recently, I've begun my adventure with Clojure programming language. As a result I've decided to share gathered knowledge and my opinion, in this and in few upcoming posts.

The problem
I had to implement algorithm that depends on the current date. Core information for this algorithm is number of days between current date and some date in the future, expressed in days.
Therefore, there is a call somewhere in the code:
(. java.time.LocalDate now)
For the tests to be stable, I had to make sure that this call always return the same day.

Approach 1
I've decided to extract creation of the current date functionality to the function:
(defn now-date [] (. java.time.LocalDate now))
During tests I've declared different function:
(defn fixed-date [] (. java.time.LocalDate of 2015 01 28))
Passing function that creates a current date, solved the problem. It worked great, but it had the following disadvantages:
- Passing to algorithm function that creates current time.
- Using java notation (with dot) in Clojure.

Approach 2
Having a function, that returns a current time, I've decided to find a way of overwriting its definition in tests. I've found out that there is operation called with-redefs-fn, which allows re-defining the function temporarily in the local context. Having defined fixed-date function, block of code looks like this:
 (deftest my-test
  (with-redefs-fn {#'fixture/now-date fixed-date}
    #(do     
      (testing "should work method a"        
        (let [result (fixture/do-stuff 30)]
          (is (.equals 8.22M result))
          ))
      ;More tests
          )))

fixture/now-date is a reference to function that I wanted to replace. This time I was amazed by language possibilities. But there was one more problem to solve. I did not want to use java notation.

Approach 3
There is a library called Clj-time. It wraps Joda Time library and makes Clojure code more friendly. I wanted to hold on Java 8 library, but I did not see any alternatives. 

So I replaced (. java.time.LocalDate now) to (t/now) and also creation of fixed dates, and then I came up with an idea.

Approach 4
Maybe should I replace the Clj-time itself? My production code will be simpler and the test code will be simpler too!
 (deftest my-test
  (with-redefs-fn {#'t/now #(t/date-time 2015 11 19)}
    #(do     
      (testing "should work method a"        
         (let [result (fixture/do-stuff 30 1000)]
          (is (.equals 8.22M result))
          ))
      ;More tests 
          )))
This is my final solution. I am still impressed how easily it that can be done.

I use Clojure for a week. If you have any other ideas how to solve this problem comment, let me know.

Wednesday, 11 November 2015

[Review] The Dream Team Nightmare

My previous experience with agile books was not so good. For one thing, they’re overfilled with advices and strategies, often without context. Put differently, it always required some additional effort, to imagine newly discovered strategies in my past experience. As a consequence, it may not be properly understand and implemented by my.

5 days of team live
Main character of this book is a agile coach. He is hired by a company to help with underperforming team - the Dream Team. The book is sliced into about 250 chapters.  In addition, every chapter is a new chance to learn something new. I've marked 26 notes, related to:
  • decision making
  • dealing with situations under pressure
  • meeting techniques (e.g. retrospectives)
  • asking correct questions
  • self-organization
  • effective communication
  • good practices (or habits)
  • metering possibilities
  • planning
  • preserving an argument
Most significantly, you can clearly see all these techniques in the same order as in Spock testing framework.
  1. Given - full specification of the problem
  2. When - action taken to resolve
  3. Then - result of those actions

Reading this book
You can find it, in a book category on amazon. But it is really a book? I do not think so. It was more like game for me. 

Every ~10 chapters you have to made a decision. Every decision you made may lead to fail or success of your mission. At first I was confused about this approach and I came back to previous choices and where they lead me. 

After reading a about 50 pages I decided to draw a chapter graph (with decision), and come back to paths that I not chosen when I read the whole book.

Outcome
As a result, I've managed to made only good choices and lead the team to happy ending. The graph was on five A4 pages. It looks like this:


In contrast to good choices, failure paths showed me where the team my end. Learning from someone else mistakes is most important lesson for me.

I would like to thank Wojtek Erbetowski for recommending me this book.

Tuesday, 10 November 2015

Used and budged Mac - 2015

This post will be in Polish, because it corresponds to Polish market and prices.

Używany Mac, na każdą kieszeń - 2015

Dlaczego chcę o tym napisać?

Dużo moich znajomych zauważyło, że zmieniam komputery Apple jak rękawiczki. Często proszą mnie o opinię jaki komputer Apple kupić, zwłaszcza gdy nie mają luźnych kilku tysięcy na nowy sprzęt. Najczęściej chcą kupić coś używanego, na próbę. Postanowiłem więc napisać krótki przewodnik po świecie używanych komputerów Apple, które można kupić w Polsce.


Moja historia

Nigdy nie sięgnąłbym po komputery Apple, gdybym nie potrzebował komputera, który pozwoli skupić mi się na tym co naprawdę lubię i chcę robić. Uwielbiam bawić się Linuxem. Mnogość narzędzi i możliwości tych systemów sprawiały, że mogłem godzinami ciągle coś zmieniać, poznawać wiele różnych dystrybucji. W pewnym momencie stało się dla mnie jasne, ze potrzebuję komputera, którego nie będę mógł ‘popsuć’, którego będę mógł traktować jako infrastrukturę (która jest niezawodna, niezawracająca głowy).
Rozwiązaniem było tylko Apple. Natywne narzędzia *nixowe, połączone z rzeczami, które zawsze powinny działać.


Swoją przygodę z Makami zacząłem w roku 2006 od komputera iBook G4 z systemem OS X Tiger. Był to świetny komputer, ale niestety maszyna się zestarzała, a nowy komputer był poza moim zasięgiem ze względu na cene. Wobec, tego na początku był biały MacBook, potem Unibody MacBook, MacBook Pro, MacMini, MacBook Air, iMac, drugi MacBook Pro, drugi MacMini.


Wszystkie te komputery oprócz ostatniego jednego MacBook Pro były używane. Zdobyłem trochę doświadczenia w selekcjonowaniu ofert, ale mimo to kilka razy się sparzyłem.


Gdzie szukać ofert sprzedaży komputera?

Poszukiwania skupiam na trzech głównych miejscach:
- allegro.pl (Największy wybór)
- olx.pl (Zazwyczaj najtańsze oferty)


Dla kogo?

Komputer powinien być dla każdego. Komputer bez problemu powinien radzić sobie z mnogością otwartych stron, programem pocztowym, komunikatorem internetowym, kilkoma dodatkowymi programami.


Ten artykuł

Żeby poprawnie zinterpretować ten artykuł wymagana jest podstawowa znajomość budowy komputera (dysk twardy, procesor).
Jeżeli jesteśmy hobbystami komputerowymi, operacje wymiany niektórych podzespołów komputera (dysk twardy, pamięć ram, bateria) możemy przeprowadzić sami. Jeżeli nas to nie interesuje, zalecam oddanie sprzętu do serwisu. Koszty nie powinny być wysokie, gdyż to są operacje rutynowe
Do przeprowadzenia tych czynności, musimy mieć podstawowe zdolności manualne, umiejętność czytania instrukcji https://www.ifixit.com/, zestaw śrubokrętów za kilkadziesiąt złotych i wiare w siebie. Przy wykonywaniu czynności serwisowych, pamiętajmy o odłączeniu zasilania, nie dotykaniu kondensatorów, gdyż mogą być ciągle naładowane, oraz o ‘rozładowaniu się’  np. poprzez dotknięcie kaloryfera.


Co powinniśmy wiedzieć?

Oprócz nazw produktu np. iMac lub MacBook, przyjęło się, że rozróżniamy komputery poprzez złożenie daty zaprezentowania określone za pomocą słów (Early, Mid, Late), roku oraz modelu np. MacBook Mid 2012. Każdy produkt ma oczywiście identyfikator modelu, z kolejnym numerem wersji np. MacBookPro9.2, oraz bardziej szczegółowy numer produktu. Do poprawnej identyfikacji sprzętu wystarczy oznaczenie modelu z datą.


O wszystkim tych modelach można przeczytać na wikipiedii. Lektura z którą warto się zapoznać przed zakupem komputera.


Jaki komputer?

Zazwyczaj rozmowa zaczyna się od pytania: “Jaki komputer powinienem kupić?” Zazwyczaj odpowiadam, że do wyboru mamy:


Komputery stacjonarne:

- Mac Mini. Modele od Early 2009. Przedział cenowy od około 1000 zł, do nawet 3000 zł.
- iMac. Modele od Late 2009. Przedział cenowy od około 2500 zł - 6500 zł.
- iMac Retina. Modele 2014, 2015. Ceny zaczynają się od około 7000.


Komputery przenośne:

- MacBook Air 11”/13” od modelu Mid 2011. Ceny w przedziale 2500-4000 zł.
- MacBook 13”,  Core2Duo MacBook Pro 13”. Ceny w przedziale 1000-2000 zł.
- MacBook Pro 13”. Ceny w przedziale 2000-3500 zł.
- Retina MacBook Pro 13”. Ceny zaczynają się od około 3500-4000zł.
- MacBook 15” od modelu Early 2011. Ceny w przedziale 3000-4500zł.
- Retina MacBook 15”. Ceny od 5000 zł.


Nie wymieniłem komputerów MacPro oraz MacBook 17”. Jeżeli wiesz, że takiego potrzebujesz, to na pewno się nim zainteresujesz.
Podane ceny są cenami orientacyjnymi. Niewykluczone, że znajdą się oferty tańsze, jak i droższe, które będą zapewne stosownie uzasadnione.
Wymienione wyżej ceny tracą na aktualności z każdym dniem. Za rok, czyli jesień 2016, ceny na pewno się zdezaktualizują.


Uwaga odnośnie ofert

Z mojej obserwacji wynika, że oferty możemy podzielić na 3 kategorie:
- komputery wyceniane za drogo. Można zauważyć oferty, które są aktualne przez kilka miesięcy.
- komputery z defektami. Oczywiście cena jest atrakcyjna, jednak może być nieadekwatna do ilości problemów jakich komputer może nam przysporzyć.
- komputery, które są warte zakupu. Zazwyczaj sprzedają się w ciągu kilku dni.


Proces zakupu warto rozłożyć na kilka tygodni.
Warto przejrzeć oferty raz na tydzień. Dopiero po 3-4 tygodniach radzę zdecydować się na zakup.


Szczególną ostrożnością trzeba się wykazać przy zakupie komputera oferowanego przez komisy. Często takie komputery trafiają do nas z zagranicy, są w słabym stanie technicznym, często były eksploatowane bardzo intensywnie, nie wiadomo czy nie mają ukrytych uszkodzeń. Nie traktujmy jednak tego tak, że ktoś chce nas oszukać, a raczej postarajmy się zrozumieć jaką historię ma sprzęt i czego możemy się spodziewać. Na szczęście sprzedawcy zapewniają ‘gwarancje rozruchowe’.


Obserwujemy oferty sprzedaży jakiejś serii komputera np. MacBook Pro 13”. Większość modeli oferowanych będzie starszych, tylko kilka ofert będzie dotyczyło modeli nowszych, mimo że będą w podobnych cenach. Starsze modele będą długo obecne w ofercie, dopóki sprzedawca nie zejdzie z ceny. Nowsze modele, zazwyczaj szybko się sprzedają.


Serwisowanie i upgrade podzespołów

Kiedyś w większości laptopów można było wymienić procesor na mocniejszy, tak jak robi to się w stacjonarnych komputerach PC. Teraz sprzedawane są komputery w których jedyne co możemy zrobić, to oczyścić wentylator z kurzu. Oczywiście konsumenci oczekują komputerów, mniejszych, lżejszych itp. To jest cena jaką trzeba zapłacić.
W produktach Apple zawsze był widoczny trend, żeby użytkownik nie miał potrzeby dostawania się do środka komputera. Tylko serwisanci powinni widzieć wnętrze komputera. Oczywiście jest wiele dyskusji na ten temat. Nie zacznę kolejnej. Moim celem jest jedynie zaznaczenie niektórych ograniczeń, na które warto zwrócić uwagę przy zakupie komputera.


Ilość rdzeni procesora.

Komputery, które wymieniłem mają 2 lub 4 fizyczne rdzenie procesora. Jeżeli zastanawiasz się czy wykorzystasz 4 rdzeniowego procesora, możesz spokojnie kupić 2 rdzeniowy procesor. Jeżeli twoja praca wymaga 4 rdzeniowego procesora musisz zawęzić swoje poszukiwania do Mac Mini (niektóre modele), MacBook Pro 15”, iMac (niektóre modele).  


Pierwszym czynnikiem na jaki warto zwrócić uwagę to oznaczenie serii procesora: http://www.intel.com/content/www/us/en/processors/processor-numbers.htm. Powie nam to bardzo dużo o procesorze i jego przeznaczeniu.
Jak dowiedzieć się czegoś więcej o procesorze? Wystarczy podać oznaczenie procesora na http://ark.intel.com.
Jak porównać szybkości procesora https://www.cpubenchmark.net/cpu_list.php. Przydatne, jeżeli porównujemy kilka modeli komputerów.


Pamięć RAM

Nie polecił bym nikomu zakupu komputera (czy to PC czy Apple), z ilością pamięci mniejszą niż 8GB, bez możliwości rozbudowy. Do żwawej pracy w kilku aplikacjach (lub kilku użytkownikach) potrzeba takiej ilości pamięci RAM.
Zgodzę się natomiast, że da się pracować na komputerze z 4GB pamięci RAM. Należy uważać, żeby nie mieć otwartych 50 kart w przeglądarce internetowej, zamykać niepotrzebne programy. Oczywiście nie wchodzą w grę cięższe aplikacje lub wirtualizacja. 4GB jest w sam raz jeżeli raz na tydzień chcemy sprawdzić maila, a komputera używamy maksymalnie kilka godzin tygodniowo. Ponieważ widzę jak ludzie pracują na komputerach, nie poleciłbym nikomu komputera z 4GB RAM, ponieważ nie chcę słuchać narzekania, że komputer czasami przeżywa chwile słabości.
Jeżeli mamy dysk SSD, 4GB RAM może nam tak bardzo nie doskwierać. W przypadku dysku talerzowego będzie to na pewno bardzo odczuwalne.
W związku z tym przyjmuję zasadę, że skreślam komputery, które nie potrafią obsłużyć 8GB pamięci RAM.


Dyski twarde

Dyski SSD, charakteryzujące się znakomitą wydajnością, co więcej stały się bardzo tanie. Jeżeli kupujemy komputer z tradycyjnym dyskiem talerzowym, zalecam każdemu wymianę na dysk SSD (oczywiście jeżeli to możliwe). 120GB dysk twardy (kosztujący 300 zł) będzie miał ogromny wpływ na szybkość pracy naszego komputera.


Komputery stacjonarne

Decydując się na zakup komputera stacjonarnego (iMaka lub Maka Mini) należy pamiętać o klawiaturze. Co prawda zwykła klawiatura będzie działała z Makiem, ale żeby wygodnie pracować, niezbędna jest odpowiednia klawiatura. Polecam te przewodowe. Są wygodniejsze i tańsze. Niestety jest to często dodatkowy koszt około 200 zł. Polecam zakupić nowy produkt.


W większości przypadków, komputery stacjonarne Apple są w dobrym stanie technicznym, gdyż nigdy nie opuszczają biurka. Możemy być spokojni o zalania lub uszkodzenia mechaniczne.


Mac Mini

W przypadku Maka Mini mamy pełną swobodę jeżeli chodzi o wymianę pamięci RAM (do 16GB) oraz dysku twardego (każdy dysk twardy 2.5” SATA). Nie dotyczy to ostatniego modelu - Late 2014.


Jeżeli jesteśmy bardzo ograniczeni budżetem, a z komputera będziemy korzystali jedynie do pisania w Wordzie i obsługi poczty. Możemy poszukać Maka Mini plastikowego tj. model 2009. Jednak wydałbym na taki komputer więcej niż 1000 zł i powinien być wyposażony w 8GB RAM i/lub dysk SSD.


Model Mid 2010, jest fenomenem, ponieważ jest to pierwszy model Unibody (aluminiowy), a zarazem ostatni posiadający napęd optyczny. Przed zakupem komputera należy sprawdzić działanie napędu optycznego, bywały one dość awaryjne. Niestety znajdziemy tam procesor z tej samej generacji co w modelu plastikowym. Model ten trzyma jednak bardzo dobrze cenę (1000-1500zł). Płacimy tutaj za aluminiową obudowę.


Przy wyborze Maka Mini, poleciłbym zakup wersji Mid 2011 lub Late 2012, czyli z procesorami i5. Ceny modeli słabo wyposażonych zaczynają się od około 1500 zł. Doposażenie tego komputera w więcej pamięci RAM i dysk SSD pozwoli nam się nim cieszyć przez kolejne kilka lat. Za kwotę do 2000 zł powinniśmy otrzymać komputer, który ma co najmniej 8GB RAM i zamontowane dwa dyski twarde (SSD i HDD) lub jeden większy SSD.
Taki komputer, będzie dobrze trzymał cenę, ponieważ jest to ostatni model, który pozwala na zamontowanie dwóch 2.5” dysków twardych, oraz rozbudowę pamięci do 16GB, co jest niemożliwe w modelu Late 2014.


Na szczególną uwagę zasługują modele z 4 rdzeniowymi procesorami. Oferują one bardzo wysoką wydajność, ale jeżeli pojawią się na rynku, bardzo szybko znikają i kosztują powyżej 2000 zł.


Zakup Maka Mini jest opłacalny cenowo, jeżeli mamy własny monitor. W przeciwnym wypadku, możemy rozważyć zakup iMac 21.5”.


iMac

iMaki są niesamowite ze względu na 27” matrycę o rozdzielczości 2560 × 1440.


Model Late 2009 zapoczątkował serię ‘Unibody iMac’. W cenie do 3000 zł powinniśmy kupić komputer w wersji Late 2009 lub Mid 2010 z matrycą w dobrym stanie. Oczywiście model 27”. Niestety są to dość stare i słabe dwurdzeniowe procesory. Nie możemy od takiego komputera oczekiwać zbyt wiele, ale jest to idealna maszyna do pisania.


Model 2011 jest już troszeczkę droższy ponieważ posiada 4 rdzeniowy procesor. Jest to jeden z najpopularniejszych iMaków jaki możemy spotkać na polskim rynku. Ceny sięgają nawet 5000 zł, w mojej opinii to trochę za drogo. Rozbieżność cen jest duża, ponieważ różne są konfiguracje. Od jednego talerzowego dysku twardego i 4GB RAM, do dwóch dysków SSD i 32GB RAM.


Niestety iMac z tego okresu produkcji posiadają jedna wadę fabryczną. Matryca ulega procesowi zakurzenia. Koszt rozebrania matrycy i wyczyszczenia to kilkaset złotych (400-600). Jeżeli właściciel wykupił rozszerzoną gwarancję, jest spora szansa, że usterka została usunięta pod koniec 2 roku gwarancji (prawdopodobnie odbyła się wymiana matrycy na nową). Stan matrycy jest to kluczowy element na który trzeba zwrócić uwagę, przy zakupie takiego iMaka.


W cenie około 2500 zł powinniśmy kupić Unibody iMac 21.5” z analogicznego okresu produkcji. iMac był dystrybuowany razem z myszką i klawiaturą, więc może to być idealny pierwszy komputer Mac w dobrej cenie.


W iMakach wymiana pamięci RAM jest prosta. Otwieramy klapkę z tyłu komputera i wykładamy kości. Natomiast dostanie się do dysku twardego wymaga wymontowania matrycy. Jest to możliwe do zrealizowania w domowych warunkach, ale wymaga już trochę zdolności manualnych. Oczywiście https://www.ifixit.com/ naszym przyjacielem jest.


Począwszy od Modelu Late 2012, iMac stał się smukły. W roku 2013 dostał nowe procesory. Dostępność tych komputerów na rynku wtórnym jest niewielka. Zapewne z tego powodu, gdyż są to komputery z bardzo dobrymi parametrami i pierwsi właściciele nie chcą się z nimi rozstawać. Modele slim, to wydatek zdecydowanie powyżej 4000 zł.


W 2014 zaprezentowano 27” model z wyświetlaczem Retina o rozdzielczości 5120 × 2880. Pierwsze używane modele kosztują w okolicy 7000 zł. Jest to około 1000-1500 zł taniej niż nowy komputer.


Komputery przenośne

Uszkodzenia

Należy zwrócić szczególną uwagę na stan laptopa przed zakupem. Należy dokładnie sprawdzić czy nie posiada wgnieceń na rogach. Mogą to być pozostałości po upadku. Przez wgniecenia na rogach, komputery mogą się nie domykać, przez co matryca może się wykrzywiać, mogą być problemy z otwieraniem ekranu. Zdecydowanie nie polecam zakupu takiego komputera, nawet jeżeli jest znacznie tańszy niż inne komputery z tego modelu.


Jeżeli natomiast jesteśmy zdeterminowani, a uszkodzenie wydaje się powierzchowne, należy taki komputer obejrzeć osobiście czy działa sprawnie - przede wszystkim zamykanie i otwieranie. Zalecam również poproszenie właściciela o zdjęcie tylnej klapy komputera. Kiedyś rozważałem zakup takiego komputera, jednak po zdjęciu klapy ujrzałem poklejone na super-glue elementy mocowania głośnika. Zawsze zakładam, że sprzedawca jest uczciwy, a cena powinna być adekwatna do stanu produktu w jakim on jest. Jedyne czego pragnę, to bycie w pełni świadomym co kupuje i za jakie pieniądze.


Należy sprawdzić czy wszystkie klawisze w laptopie stawiają jednakowy opór. W przypadku zalania (np. sokiem), niektóre guziki będą chodziły ciężej, oraz bez charakterystycznego kliknięcia. Nie każdy zwraca na to uwagę, niektórzy mogą uznać to za nieważny detal. Jednak sprzęt który był zalany, mimo wysuszenia, może po pewnym czasie odmówić współpracy.
Jeżeli mamy podejrzenia, że laptop mógł być zalany (mimo, że właściciel wypiera się, że nie był), również możemy poprosić o zdjęcie klapy i o poszukanie śladów zalania. Możemy poszukać, gdzie w danym komputerze znajdują się wskaźniki zalania i je sprawdzić. Jednak nie zawsze jest to możliwe. Jeżeli mam jakieś podejrzenia, że sprzęt był zalany, wolę odpuścić taką ofertę.


O zasilaczach

Nigdy nie kupuj laptopa, jeżeli ten posiada zamiennik oryginalnego zasilacza. Podróbki są awaryjne. Iskrzą przy podłączania do gniazda.
Jeżeli kupujesz laptop z polskiej dystrybucji, w zestawie powinieneś otrzymać krótką końcówkę zasilacza jak i końcówkę zasilacza z około 1.5 metrowym kablem.
Zwróć uwagę w jakim stanie jest kabel w rejonie wtyczki MagSafe oraz przy wyjściu z zasilacza. Jeżeli jest napuchnięty, lub widoczne są pęknięcia, może to oznaczać konieczność wymiany całego zasilacza, gdyż wymiana samego kabla może być nie opłacalna.


O bateriach

Bateria w kilkuletnim laptopie, spokojnie może mieć kilkaset cykli. Jeżeli ma ponad 500, powinna nam się zapalić żółta lampka, żeby sprawdzić jaka pojemność baterii została. Baterie nie zużywają się równomiernie i ilość cykli nie powinna być głównym wyznacznikiem jej stanu. Jeżeli po kliknięciu na ikonę baterii, widzimy napis “Service battery”, może to oznaczać konieczność wymiany baterii. Jednakże, najlepiej sprawdzić pozostałą pojemność baterii w oknie dotyczącym informacji o komputerze.


Czy wymiana jest prosta i możliwa do wykonania w domowym zapleczu?
W MacBook Air, każdy powinien sobie z tym poradzić. Niestety w Retina MacBook Pro jest już gorzej, gdyż bateria jest przyklejona i trzeba uważać. Warto oddać sprzęt specjaliście.


MacBook Air

MacBook Air jest to najlepszy laptop codziennego użytku, jaki możemy kupić na rynku wtórnym. Jest to jednostka mała, z długim czasem pracy na baterii, dobrą matrycą, oraz jak na swoje wymiary, zadowalającym procesorem.
Polecam model Mid 2011 i nowsze. Poprzednie generacje cechowały się dużo słabszymi procesorami oraz mniejszą rozdzielczością matrycy.
Jeżeli głównie będziemy pracowali bez użycia zewnętrznego monitora, wygodniejszy jest model 13”. Jeżeli natomiast dużo podróżujemy, a pracujemy na zewnętrznym monitorze, bezkonkurencyjny jest model 11”.
W tym modelu pamięć RAM jest niemożliwa do wymiany. Wśród 41 Airów jakie znalazłem w ogłoszeniach, tylko 3 posiadały 8GB pamięci RAM. Zazwyczaj były to nowe komputery, często na gwarancji, a więc i ceny oscylowały w okolicy 4000 zł. Natomiast zdarzają się przypadki starszych komputerów z 8GB pamięci RAM i na takie modele warto zaczekać. Będzie to wydatek około 3000 zł. Modele 11” będą tańsze, ze względu na mniejszą popularność.


W przypadku tego modelu szczególną uwagę należy zwrócić na uszkodzenia mechaniczne oraz na stan baterii.  


MacBook 13”,  Core2Duo MacBook Pro 13”

Mając do dyspozycji kwotę około 1000-2000 zł możemy myśleć nad zakupem komputera MacBook Unibody (Late 2008) oraz MacBook Pro (Mid 2009 lub Mid 2010). Ceny różnicują się ze względu na stan oraz na ilość ulepszeń jakie właściciel dokupił do komputera. Droższe modele zapewne mają zamontowane dwa dyski, w tym jeden SSD (możliwość montażu zamiast napędu optycznego) i powinny mieć wymienioną baterię.


Jeżeli jesteśmy bardzo nastawieni na dobrą cenę, możemy zainteresować się modelem Polycarbonate (potocznie określane jako White). Interesują nas wtedy modele od Early 2009. Taki komputer w dobrym stanie możemy nabyć za cenę poniżej tysiąca złotych. Pamiętajmy, że cena jest niższa, gdyż plastik to nie to samo co aluminiowa obudowa.


Są to najstarsze MacBooki jakie wspiera system OS X El Capitan. Jest w związku z tym szansa, że komputery nie będą wspierane przez kolejne wersje systemu operacyjnego. Ponadto, nie możemy oczekiwać rewelacji od takiego komputera. To są prawie 6 letnie konstrukcje. Niemniej, jeżeli wybierzemy zadbany egzemplarz, a nasze potrzeby są podstawowe, może być to bardzo udany zakup.


MacBook Pro 13”

Model Early 2011 zapoczątkował serię MacBooków z procesorami i5. Te procesory oferują przyzwoitą wydajność, komputer posiada możliwością montażu dwóch dysków, czyni go bardzo atrakcyjnym modelem.
Modele ze standardowym wyposażeniem da się kupić za około 2000 zł. Ceny zadbanych modeli, z lepszym wyposażeniem kończą się na około 3000-3500 zł.


Niestety komputer ma jedną zasadniczą wadę. Rozdzielczość matrycy 1280 × 800 nie zachwyca. Ponadto sam komputer jest gruby i ciężki.


Tutaj musimy sobie odpowiedzieć czy zależy nam na dwóch dyskach twardych, dużej ilości pamięci ram, czy wolimy mobilność modelu Air. W większości przypadków, prawie zawsze polecam model Air.


Retina MacBook Pro 13”

Model Late 2012 rozpoczął serię komputerów z wyświetlaczem Retina.
Ponadto w odróżnieniu od poprzednika, komputer jest pół kilograma lżejszy, posiada większą baterię i jest smuklejszy.
Niestety bateria jest trudna w wymianie, pamięć ram jest częścią płyty głównej (nie można wymienić) a dysk twardy jest na PCI (brak szerokiego rynku zamienników, tak jak w przypadku dysków 2.5”).


Komputer z 8GB RAM oraz 128GB SSD da się kupić taki komputer w cenie około 3500-4000 zł. Oczywiście im lepsze wyposażenie tym cena droższa, aż dojdziemy do cen nowego komputera.


MacBook Pro 15”

Warto rozważyć Modele 15” ze względu na matrycę o wyższej rozdzielczości, oraz czterordzeniowy procesor. Czterordzeniowe procesory były dostępne w modelach Early 2011, Late 2011 oraz Mid 2012.


Za 3000 zł, możemy kupić modele z podstawowym wyposażeniem lub delikatnie obtłuczone. Ceny modeli z ostatniego roku produkcji, oraz dobrze wyposażonych sięgają 4500 zł, jednak w cenie poniżej 4000 zł powinniśmy kupić egzemplarz, który zaspokoi najbardziej wybrednych.
Ceny są atrakcyjne, ponieważ większość osób poszukuje modelu 13”.


Na szczególną uwagę zasługują modele z matrycą matową o rozdzielczości 1680 × 1050. Jest to coś na co warto zwrócić uwagę przy zakupie.


Jest to model komputera, który rekomenduje każdemu do pracy na co dzień.


Ta seria komputerów jest łatwa w naprawie i wymianie komponentów. Bez problemu możemy włożyć do komputera dwa dyski twarde, 16GB RAM oraz wymienić baterię.  


Retina MacBook Pro 15”

Jeżeli decydujemy się na zakup takiego MacBooka, musimy być przygotowani na wydatek co najmniej 5000 zł. Tych komputerów jest mało na rynku, ponieważ pierwsi właściciele ciągle są zadowoleni z tych komputerów i nie chcą ich sprzedawać.
Tak jak w przypadku modelu 13” z wyświetlaczem retina, ten komputer nie jest prosty w serwisowaniu. Jeżeli chcemy kupić komputer na lata, zadbajmy o to, żeby posiadał 16GB pamięci RAM i większy dysk twardy.


Przyszłość


Nikt nie wie jaką ścieżkę rozwoju wybierze Apple. Czy jakość oprogramowania, systemu OS X będzie rosła czy malała? Czy sprzęt będzie wykonywany z największą starannością, z odpowiednich podzespołów? Czy inżynierowie i projektanci zaprezentują produkty godne uwagi? Tego nikt nie wie.  

Friday, 17 April 2015

How to upgrade docker to 1.6.0 on OSX via homebrew

So simple, but few my friends has problem with this. The key point is to perform boot2docker upgrade which upgrade ISO image.

brew update
brew upgrade boot2docker
boot2docker upgrade

Sunday, 8 March 2015

First thoughts about Rust

INTRUDUCTION
I wanted to try new programming language. A language that is trivial and complex at the same time. Trivial to write fast, complex when struggling with performance or when you want state of art architecture.

BABY STEPS
This week I decided to try Rust . Rust is an expression-based language. What this mean? In general expression is collection of symbols that jointly express a quantity (or simply expression produce at least one value). But there are also statements which may be smallest standalone elements of an programming language or in other words statements are building blocks of the program.
In Rust everything is an expression, but in general we have two kind of statements. First is an binding statement (for example statement declaration) and second is expression statement, which purpose is to turn any expression into statement (for example adding ; at the end of the line). Why I even write this? Look at this if example which is statement.

let y = if x == 5 { 10 } else { 15 }; // y: i32

Notice that there are no semicolons after 10 and 15. This means that those are expression, and ‘if’ is an expression to, which mean that you can assign if result to y.

THE BASIC PROGRAM
After reading the first part of the Rust Book I decided to write my first program. I decided to write quick sort. Here is the code.
Lessons learned:
- Writing a program without IDE and relay only on docs and error codes its very valuable for your learning progress.
- Cargo, which is Rust build system is intuitive. Out of the box test and benchmark support is another advantage.
- Primitives like in C. Good when struggling with performance. Bad when want to write fast.
- Pointers like in C. Dangerous, but powerful toy. In next section there is a few words about how Rust extended pointer that I knew from C.
- I didn’t like the ‘newtype’, that let you create a new type that’s similar to another one. The concept is good, but after this example, I would say I won’t use it (in most of the cases), because cost of difficulty in extracting value, is not worth providing this kind of type safe:

let length = Inches(3);
let Inches(integer_length) = length;
println!("In inches size {}", length);.

- I didn’t like that Rust has two main types of strings: &str and String.


MEMORY MANAGEMENT
Rust is about performance. Many of abstractions are done at compile time. There is said that new programers are fighting with compiler. I can confirm that. Once you gain more experience, it is all becoming easy for you. I have to admit that I’ve similar situation with Scala.

Experience of learning my first programming language came to me when in book pass-reference-by-value was discussed.
Rust take pointers to the whole new level. There are mutable references, boxes and more.
But in fact pointers are an introduction to Rust memory aspect such as: Ownership, Borrowing, Boxes and Lifetimes.

I’ve great time playing around and checking what will work and what not. This is a recommended part of the book and this article for further reading.

For me it was good learning journey to read and try new Language. What will be next? Maybe Go or Haskell.

Sunday, 15 February 2015

Why you should attend Jitter on MCE?

Jitter workshop event is a part of Mobile Central Europe Conference. It is a one day event full of attractions. Each workshop is repeated, so you can attend to two different workshops.

So why, you should attend Jitter?
- You can meet cutting edge technology like Emberlight or Wunderbar.
- You can co operate with you new friends to do amazing stuff.

I have an opportunity to take part in “Cardboard Design” workshop, where mentors where Wiesław and his friends. 

We were working in groups. Our goal was to visualise music using arduino, few servomotors and of course cardboards. We totally unleashed our imagination. Effects was amazing. We have used 100% of our creativity.

Besides that, event took place in a film studio. Raw and unpolished style. It give me more energy to work. But, there was a few defects. It was loud and cold, but organisers do everything to minimize those effects.

Film studio moments before conference start


I am definitely looking forward for next Jitter on next year MCE

Wednesday, 28 January 2015

Gerrit and maven release plugin

There is a time in your project when you start using Gerrit code review system. When you have maven release plugin to make release, you can be very surprised when you see:
[ERROR] The git-push command failed.
[ERROR] Command output:
[ERROR] Permission denied (publickey).
This is a situation when we use ssh connections to gerrit. But, when you try to push something to master (ignoring code review), it works! How is that possible?

You probably have in your gitconfig an ssh URL with your user name. But in your project SCM (in pom.xml) you do not have your user name. What user name maven release plugin use? Your computer account name, which is in most cases different than your Gerrit user name.

How to repair it? Define a file in .ssh/config directory with content:
Host gerrit
    HostName YOUR_GERRIT_HOST
    Port YOUR_GERRIT_PORT
    User YOUR_GERRIT_USER_NAME

There may be a lot of other reason why you have "Premission denied", but this was the hardest I've ever seen.