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 🙂

PPS. 2 listopada 2020 roku właściciele marek hekko.pl oraz cyber_Folks połączyli je. Od tego momentu występują jako jedno, pod tą drugą nazwą.

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.


Bądź na bieżąco!

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ą:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

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ć :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup 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.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Postaw mi kawę na buycoffee.to

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.

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