Dzisiaj temat dość nietypowy, bo o… zakupach 🙂 Idea podzielenia się moimi przemyśleniami na ten temat pojawiła się dosyć dawno temu. Sprawdziłem w Todoist. Dodałem takie zadanie 17 grudnia 2016 roku. Długo zwlekałem z publikacją, bo nie wiedziałem jak taki off-topic zostanie przez Ciebie odebrany. Zdążyłem się już jednak przekonać, że nawet poboczne tematy przyjmujesz z entuzjazmem. Mam nadzieję, że będzie tak i tym razem 😉 No dobra… ale o co chodzi? Let’s start from the very very beginning, jak mawiała moja nauczycielka angielskiego w podstawówce 🙂

Czym jest JIT?

Zacznijmy od wyjaśnienia co kryje się pod tajemniczym akronimem JIT. Najodpowiedniejszą osobą, która odpowie Ci na to pytanie jest Jarek Pałka 😉 Tak się składa, że kamery zarejestrowały jak opowiada na ten temat na deskach Toruń JUG:

Jeżeli jednak nie masz akurat wolnej godzinki i 15 minut, to ja postaram się wyjaśnić to w kilku słowach 🙂

Long story short

„JIT” to skrót od „just-in-time”, a JIT, o którym mówi Jarek to część wirtualnej maszyny Java, a dokładniej jej kompilator. Kompilator, który stanowi o sile JVM-a. Idea kompilacji just-in-time stoi w opozycji do „tradycyjnej” (ahead-of-time) kompilacji znanej na przykład z języka C, czy C++, w której to kod źródłowy aplikacji jest kompilowany do natywnego kodu maszynowego przed pierwszym uruchomieniem aplikacji.

Kompilacja JIT w JVM polega na optymalizacji i kompilacji tylko wybranych fragmentów kodu bajtowego, który jest wynikiem wstępnej kompilacji dokonanej przez kompilator języka Java. Decyzja o tym, które fragmenty będą poddane optymalizacji zostaje podjęta na podstawie ciągle zbieranych statystyk użycia kodu. Dzięki temu kompilator może reagować na faktyczne zapotrzebowanie użytkowników aplikacji w trakcie jej działania. Co więcej, raz zoptymalizowany kod może zostać zoptymalizowany ponownie, jeżeli tylko pojawiły się ku temu odpowiednie powodu. W skrócie: JIT reaguje dopiero wtedy, kiedy jest potrzeba.

Więcej

Szukając zwięzłych informacji na temat JIT-a trafiłem na dwa ciekawe artykuły autorstwa Jakuba Kubryńskiego, które ukazały się na łamach Magazynu Programista. Nawet jeśli na co dzień traktujesz JVM, jak „czarną skrzynkę”, to polecam je przeczytać. Dzięki nim w kilkanaście minut dowiesz się co w JVM-ie piszczy 😉

  1. Co każdy programista Java powinien wiedzieć o JVM (Magazyn Programista nr 34 – marzec 2015 roku)
  2. Co każdy programista Java powinien wiedzieć o JVM: zarządzanie pamięcią (Magazyn Programista nr 35 – kwiecień 2015 roku)

JIT shopping

No dobra… tylko co JIT ma do zakupów?! Mogłoby się wydawać, że nic. Ja jednak znalazłem pewną analogię 🙂

Kiedy byłem młody… tzn… młodszy 😛 i decydowałem się na coś w modelu subskrypcyjnym, w którym było kilka progów abonamentowych, to zawsze musiałem wybrać ten największy. No bo przecież, nawet jeżeli nie będę korzystał z jego możliwości dzisiaj, to może jutro, albo pojutrze. Jak się zapewne domyślasz, to nigdy nie następowało. Nie przypominam sobie sytuacji z tamtych czasów, w której faktycznie potrzebowałbym czegoś ponad to co dawał minimalny abonament. Kilka lat temu zupełnie zmieniłem podejście do tego tematu.

Hekko.pl

Najlepszym tego przykładem jest serwer WWW. Swoją stronę profilową utrzymuję od około 2008 roku. Kilkukrotnie traciłem długie godziny tylko po to, żeby znaleźć darmowy hosting zapewniający nielimitowany transfer danych i nieograniczoną przestrzeń dyskową. Dlaczego traciłem? Bo byłem głupi. Ruch na stronach tego typu jest żaden, bo są one tylko i wyłącznie formą wizytówki, a więc wystarczyłby mi pierwszy z brzegu, w miarę stabilny hosting.

Przy okazji zakładania działalności gospodarczej zdecydowałem się w końcu na wykup płatnego hostingu, bo tamten darmowy przysparzał mi zbyt wiele problemów. Po szybkim przeszukaniu internetu zdecydowałem się na Hekko. Rzućmy razem okiem na ich aktualną ofertę:

Oferta Hekko.pl

Oferta Hekko.pl

Dawniej, bez większego zastanowienia wziąłbym maksymalny pakiet, no bo przecież „kiedyś może się przydać”. Tym razem byłem jednak mądrzejszy i zastosowałem JIT shopping 🙂 Wziąłem najmniejszy pakiet (wtedy to było 2 GB przestrzeni i 20 GB transferu na miesiąc), bo już wiedziałem, że na tamtą chwilę i tak będzie to duży zapas. I jak na tym wyszedłem? Bardzo dobrze. Nawet po półtora roku regularnego blogowania nie zbliżyłem się dobrze do granicy limitów. Zużywam około 30% miesięcznego transferu i 75% całkowitej powierzchni dyskowej (z której w dowolnym momencie mogę się pozbyć jeszcze kilku niepotrzebnych rzeczy) 🙂

Policzmy ile dzięki temu zaoszczędziłem, opierając się na stawkach z aktualnej oferty. Mijają prawie dwa lata od momentu pierwszego zakupu. Przyjmijmy więc, że zapłaciłem już za 24 miesiące. Pakiet Start kosztował mnie więc 24 * 6,14 zł + 12,29 zł za aktywację, co daje w sumie 159,65 zł. Gdybym od razu kupił pakiet Premium+ wydałbym 24 * 61,49 zł = 1475,76 zł. Różnica tych dwóch kwot to 1316,11 zł. Na mnie taka oszczędność robi wrażenie 🙂

Oczywiście, trochę przekoloryzowałem ten przykład, bo nie byłbym tak głupi, żeby rzucać się na comiesięczny wydatek tego typu bez potrzeby… a może jednak bym był 😉 W każdym razie nawet decydując się na dowolny mniejszy pakiet kupiony „na zapas” wydałbym więcej niż wymagała tego sytuacja. I dokładnie to chciałem Ci przekazać.

PS. Kwestia mojej faktycznej oszczędności jest jeszcze bardziej złożona, ponieważ zapłaciłem za cały rok z góry, a wtedy stawka jest odpowiednio mniejsza. Dodatkowo przedłużając abonament po pierwszym roku dostałem lojalnościowy rabat, ale to nie jest meritum tego przykładu 🙂

OneDrive

Podobną sytuację miałem z pakietem OneDrive’a. Szukałem dysku w chmurze, który pomieściłby wszystkie moje zdjęcia i jeszcze trochę plików. W owym czasie było to około 80 GB danych. Microsoft oferował wtedy abonamenty na 100 GB za 8 zł miesięcznie i 1 TB za 30 złotych miesięcznie (dziś OneDrive jest oferowany „w pakiecie” z Office 365). Jako „szczeniak” pomyślałbym sobie: „Hmm… te 80 GB jest niebezpiecznie blisko 100 GB. Może od razu wykupię 1 TB i będę miał już spokój?”. Ale że wtedy byłem już „weteranem” to kupiłem minimum tego co było mi potrzebne – 100 GB. I co się okazało? Do limitu dojechałem dopiero po kilkunastu miesiącach. Oszczędność? Chyba nie muszę już liczyć, co? 🙂

Orange Światłowód

Ostatni przykład. Pod koniec ubiegłego roku przesiadłem się z internetu kablowego z Multimediów na Orange Światłowód. Ze względu na poczynione przez Orange inwestycje w postaci doprowadzenia światłowodów praktycznie bezpośrednio do mieszkań, ich przedstawiciele intensywnie forsowali sprzedaż najwyższych prędkości – 600 Mb/s. No bo przecież „to tylko 30 złotych miesięcznie więcej” niż 100 Mb/s, którym byłem zainteresowany i jednocześnie „aż o 500 Mb/s większa” prędkość pobierania danych. Tylko, że problem polega na tym, że na faktyczną prędkość łącza wpływa o wiele więcej czynników, niż tylko marketingowa cyferka. Anyway… kiedy faktycznie będę potrzebował 600 Mb/s to o nie grzecznie poproszę 😉

Nie tylko kompilatory

Pojęcie just-in-time nie jest związane tylko i wyłącznie z kompilatorami języków programowania. Taki sam termin można znaleźć w… Systemie Produkcyjnym Toyoty 🙂 Co więcej termin ten pojawił się w obydwu branżach, w dwóch różnych miejscach, w bardzo zbliżonym czasie i wygląda na to, że było to zupełnie niezależne od siebie.

Czym jest JIT od Toyoty? Jest to metoda zarządzania produkcją mająca na celu redukcję kosztów poprzez produkcję „na czas” i nie robienie zbędnych zapasów. Inaczej mówiąc, jest to wyznawanie zasady, że „zapas jest stratą”. Wokół systemu Toyoty kręcą się również takie terminy jak kaizen, kanban, czy lean management. Kojarzysz? Tak! Wszystkie te terminy znajdziesz w „nowoczesnych” strategiach zarządzania projektami (nie tylko) informatycznymi 😉

Patrząc na to z tego miejsca możesz stwierdzić, że JIT shopping pasuje bardziej do tego co wyznawali w Toyocie („zapas jest stratą”), niż do JIT-a z JVM-a. I faktycznie tak jest. Kiedy jednak ja krystalizowałem sobie JIT shopping, to nie miałem jeszcze pojęcia o tym co zrobiła Toyota 🙂

BTW. Jeżeli interesuje Cię historia systemu Toyoty i podwalin lean managementu, to zachęcam do lektury polecanej przeze mnie niedawno książki „Mądrzej, szybciej, lepiej”. Znajdziesz w niej między innymi właśnie opis tego jak Toyota doszlifowała swoje działania na liniach produkcyjnych i jak wiele innych branż zaczęło z tego czerpać.

YAGNI

W trakcie pisania tego artykułu przyszła mi jeszcze jedna analogia do programowania i robienia czegoś dopiero kiedy to będzie faktycznie potrzebne. Znasz akronim YAGNI? „You aren’t gonna need it” to jedna z głównych zasad programowania ekstremalnego, która oznacza tyle, że nowa funkcjonalność powinna być dodawana do projektu tylko i wyłącznie wtedy, kiedy jest faktycznie wymagana, a nie kiedy przewidujesz, że będzie wymagana.

Podsumowanie

Początkowo miałem w zamyśle wpis zupełnie nietechniczny, a jedynie lifestylowy. „Wkradło” się tutaj jednak sporo odniesień do programowania oraz technologii w ogóle. Finalny, chociaż nie do końca zamierzony, efekt bardzo mi odpowiada. Mam nadzieję, że przypadnie do gustu również Tobie. Jeżeli tak, to daj proszę znać o tym w komentarzu poniżej. Jeżeli nie, to również chętnie przeczytam jakie masz uwagi, żeby móc o nich pamiętać w przyszłości.

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową (spokojnie, nie rozsyłam spamu):



lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do dedykowanej grupy na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

1 000 000 zł

Milion złotych. Tak, milion złotych. Milion złotych to cel, który sobie postawiłem jakiś czas temu. Chcę zarobić milion złotych na tym blogu. Do tej pory zebrało się 4299,48 zł, więc jak widzisz jeszcze trochę brakuje. Jeszcze nie wiem do końca jak, ale to zrobię. Na pewno nigdy nie będę pobierał żadnych opłat za dostęp do treści, bo tymi chcę się po prostu dzielić.

Wysoko ponad ten milion stawiam na szerzenie wiedzy i dotarcie do jak największej liczby osób. I tu mam prośbę do Ciebie: jeśli uważasz, ten artykuł za wartościowy, to udostępnij go proszę swoim znajomym. Przy lewej lub dolnej (na małych wyświetlaczach) krawędzi ekranu znajdziesz przyciski, które Ci to ułatwią. Jeżeli ich nie widzisz, to najprawdopodobniej zostały zablokowane przez Twój program do blokowania reklam. Niezależnie od tego, czy prześlesz ten wpis dalej, czy nie, to ja i tak dziękuję Ci serdecznie za doczytanie do tego miejsca! Do przeczytania niebawem.

PS. Jeśli mój blog przypadł Ci do gustu tak bardzo, że chciał(a)byś mi się w jakiś sposób odwdzięczyć, to mam dla Ciebie kilka ciekawych propozycji, z których możesz skorzystać. Jeżeli zdecydujesz się na którąkolwiek z nich, to z góry bardzo Ci za to dziękuję!

Akcja afiliacja

Kilkanaście dni temu, w komentarzach pod jednym z wpisów na własnoręcznie założonej grupie na Facebooku zostałem sponiewierany, opluty i zmieszany z błotem 😉 Za co? Za to, że nie poinformowałem otwarcie, że wpis zawierał link afiliacyjny. Chciałem otwarcie okazać skruchę i zastosować się do prośby czytelników 😀 Tym samym: powyższy wpis zawiera linki afiliacyjne. Więcej informacji na ten temat znajdziesz tutaj.

Picture Credits