Mam nadzieję, że poniższy artykuł przypadnie Ci do gustu. Nie przywiązuj zbyt dużej wagi do daty powstania tego wpisu. Nawet jeśli napisałem go na początku istnienia bloga, to staram się przynajmniej raz w roku przeglądać stare treści i je aktualizować. Jeżeli mimo wszystko zauważysz jakąś nieścisłość w tekście, to daj mi proszę znać w komentarzu poniżej.
Pamiętaj także, że wartość tego bloga podbijają pozostawione tu komentarze. Jeżeli temat poruszany we wpisie Cię interesuje, to polecam doczytać także komentarze do niego. Znajdziesz w nich chociażby punkt widzenia innych osób, czy dodatkowe informacje, o których ja zapomniałem lub nie wiedziałem.
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 😉
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.
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
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ą.
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? 🙂
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ą:
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.
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 Facebookuzostał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.
Zawodowy programista od 2009 roku. Samozatrudniony od listopada 2015. Wcześniejszy czas spędził na etacie. Od kilku lat zainteresowany tematyką budżetu domowego, finansów osobistych i optymalizacji finansowej. Prywatnie mąż, tata Tymonka, a także fan Manchesteru United, Uniwersum Wiedźmina, Star Wars oraz LEGO.
Z tą maksymalną prędkością internetu to tak jak z maksymalną prędkością samochodu. Pewna minimalna jest wymagana żeby np móc zgodnie z prawem wjechać na autostradę (imponujące 40km/h!)
Jakaś tam prędkość maksymalna potrzebna jest do komfortowego przemieszczania się i wyprzedzania. Dla normalnej (i zgodnej z prawem) jazdy w ruchu drogowym nie ma znaczenia czy samochód ma prędkość maksymalną 180, 250, 270 czy moze 770 km/h. Wszystko powyżej pewnego progu to po prostu cecha bez znaczenia użytkowego.
Bardzo dobre! Uważam że to znajduje też swietne odbicie w łatwoskalowanych usłuchach jak np AWS, potrzebujesz masz, nie potrzebujesz nie używasz! Gdybym to ja o Lambdach wcześniej wiedział 🙂 Linkuję do 160znakow.pl!
Trafione w punkt! Całkiem wyleciało mi to z głowy. Miałem sobie zapisać, że dobrym przykładem jest tutaj właśnie sukces usług w stylu AWS, ale nie zapisałem i mi umknęło. Dzięki! To właśnie płacenie tylko za zużyte zasoby stało się podstawą ich sukcesu.
BTW. ciekawa inicjatywa z tymi 160 znakami. Twoja?
Internet to najlepszy przykład na to, gdzie szukać oszczędności.
Przykładowo: Również mam w domu światłowód i szeroki wachlarz pakietów – od 100Mbps do 1Gbps. Różnica w cenie nie jest aż taka duża.
Po pierwsze, dobijam do swoich 100Mbps tylko, gdy faktycznie coś większego pobieram. W codziennym użyciu – nigdy.
Po drugie, o czym ludzie zapominają – nie mam w domu sprzętu (za wyjątkiem mojego laptopa), który jest to w stanie wysycić. Ludzie czesto kupują większy pakiet internetu „bo przecież będzie szybciej” – kupują światłowody dające do 100Mbps, albo 250Mbps, a używają laptopów które umieją tylko WLAN b/g/n – płacą za łącze, którego fizycznie nie są w stanie wykorzystać.
Ja nadal szukam dobrej analogii by wytłumaczyć to nietechnicznym ludziom, którzy biorą, tak jak mówisz, internet 100Mbps lub więcej, mimo iż go nie potrzebują. Często ktoś taki ma kilkuletni laptop lub smartfon z niskiej/średniej półki i fizycznie nie osiągnie tej prędkości z powodu wbudowanej karty sieciowej. Pokazuję im w szczegółach połączenia, że ich prędkość połączenia wynosi 65Mbps (czasem 72) i tego fizycznie nie przeskoczą (o podłączaniu kablem boję się nawet wspominać, bo jak to tak w XXI wieku używać czegoś przewodowo), pokazuję im speedtesty, ale to też na nic. Dla kogoś nie rozumiejącego tematu to nic nie znaczy. I tak zamiast wziąć za mniej niż połowę ceny 30 czy 50Mbps znacznie przepłacają. Umówmy się, że nawet strumieniowanie wideo (np. Netflix) nie wymaga tak dużych prędkości, a do Facebooka czy YouTuba wystarczy jeszcze słabsze łącze.
Dokładnie. Całkiem niedawno moi znajomi przedłużyli umowę z Vectrą (na której infolinię i dział likwidacji usterek regularnie narzekają), tylko dlatego, że dostali za tą samą cenę pakiet TV + internet, ale 100 Mbps zamiast dotychczasowych 60 Mbps. Nie przegadasz.
Chcesz więcej? W takim razie zachęcam Cię do dołączenia do powiązanych grup na Facebooku (Programista Na Swoim, Vademecum Juniora), 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ę tym samym co Ty.
Jeśli jesteś tu po raz pierwszy lub jeszcze tego nie zrobił[a|e]ś to zostaw proszę komentarz pod moim powitalnym wpisem. Będzie mi niezmiernie miło się z Tobą przywitać
Dobroczynność
Moje narzędzia
Jeżeli chciał(a)byś dowiedzieć się z jakich narzędzi korzystam na co dzień, to zapraszam Cię do odwiedzenia strony Narzędzia.
Znajdziesz tam zarówno informacje na temat tego dlaczego czegoś używam, jak i linki referencyjne, dzięki którym zakładając konto w danym serwisie otrzymasz bonus startowy.
26 lipca 2018 at 11:04
Polecam ciekawe WEBinarium
https://webinaria.proidea.pl/kurs/co-robi-jvm-gdy-cie-nie-ma-w-domu-monitorowanie-dla-poczatkujacych/
26 maja 2018 at 22:36
Z tą maksymalną prędkością internetu to tak jak z maksymalną prędkością samochodu. Pewna minimalna jest wymagana żeby np móc zgodnie z prawem wjechać na autostradę (imponujące 40km/h!)
Jakaś tam prędkość maksymalna potrzebna jest do komfortowego przemieszczania się i wyprzedzania. Dla normalnej (i zgodnej z prawem) jazdy w ruchu drogowym nie ma znaczenia czy samochód ma prędkość maksymalną 180, 250, 270 czy moze 770 km/h. Wszystko powyżej pewnego progu to po prostu cecha bez znaczenia użytkowego.
11 sierpnia 2017 at 12:13
Bardzo dobre! Uważam że to znajduje też swietne odbicie w łatwoskalowanych usłuchach jak np AWS, potrzebujesz masz, nie potrzebujesz nie używasz! Gdybym to ja o Lambdach wcześniej wiedział 🙂 Linkuję do 160znakow.pl!
16 sierpnia 2017 at 20:31
Trafione w punkt! Całkiem wyleciało mi to z głowy. Miałem sobie zapisać, że dobrym przykładem jest tutaj właśnie sukces usług w stylu AWS, ale nie zapisałem i mi umknęło. Dzięki! To właśnie płacenie tylko za zużyte zasoby stało się podstawą ich sukcesu.
BTW. ciekawa inicjatywa z tymi 160 znakami. Twoja?
11 sierpnia 2017 at 08:00
Internet to najlepszy przykład na to, gdzie szukać oszczędności.
Przykładowo: Również mam w domu światłowód i szeroki wachlarz pakietów – od 100Mbps do 1Gbps. Różnica w cenie nie jest aż taka duża.
Po pierwsze, dobijam do swoich 100Mbps tylko, gdy faktycznie coś większego pobieram. W codziennym użyciu – nigdy.
Po drugie, o czym ludzie zapominają – nie mam w domu sprzętu (za wyjątkiem mojego laptopa), który jest to w stanie wysycić. Ludzie czesto kupują większy pakiet internetu „bo przecież będzie szybciej” – kupują światłowody dające do 100Mbps, albo 250Mbps, a używają laptopów które umieją tylko WLAN b/g/n – płacą za łącze, którego fizycznie nie są w stanie wykorzystać.
12 sierpnia 2017 at 18:02
Ja nadal szukam dobrej analogii by wytłumaczyć to nietechnicznym ludziom, którzy biorą, tak jak mówisz, internet 100Mbps lub więcej, mimo iż go nie potrzebują. Często ktoś taki ma kilkuletni laptop lub smartfon z niskiej/średniej półki i fizycznie nie osiągnie tej prędkości z powodu wbudowanej karty sieciowej. Pokazuję im w szczegółach połączenia, że ich prędkość połączenia wynosi 65Mbps (czasem 72) i tego fizycznie nie przeskoczą (o podłączaniu kablem boję się nawet wspominać, bo jak to tak w XXI wieku używać czegoś przewodowo), pokazuję im speedtesty, ale to też na nic. Dla kogoś nie rozumiejącego tematu to nic nie znaczy. I tak zamiast wziąć za mniej niż połowę ceny 30 czy 50Mbps znacznie przepłacają. Umówmy się, że nawet strumieniowanie wideo (np. Netflix) nie wymaga tak dużych prędkości, a do Facebooka czy YouTuba wystarczy jeszcze słabsze łącze.
16 sierpnia 2017 at 20:38
Dokładnie. Całkiem niedawno moi znajomi przedłużyli umowę z Vectrą (na której infolinię i dział likwidacji usterek regularnie narzekają), tylko dlatego, że dostali za tą samą cenę pakiet TV + internet, ale 100 Mbps zamiast dotychczasowych 60 Mbps. Nie przegadasz.
10 sierpnia 2017 at 22:09
Z wyznawania zasady „zapas jest stratą” to chyba jeszcze Tim Cook zasłynął optymalizując produkcję iPhone.
16 sierpnia 2017 at 20:24
Mogę się mylić, ale wydaje mi się, że w którejś z książek czytałem, że oni tam w Apple też czerpali po trochu z kaizen i Toyoty 🙂