Twoja baza SQL jest zbyt duża? Szukasz miejsc do optymalizacji rozmiaru bazy? A być może któraś z tabel puchnie i nie wiesz która?
Istnieje prosty sposób, by poznać rozmiar tabel w MySQL. Poniżej przedstawiam proste rozwiązanie pozwalające sprawdzić rozmiary tabel w bazie danych. Nie zawsze istnieje możliwość skorzystania z interfejsu graficznego, a przy dużej liczbie tabel i on może być zawodny.
To mój pierwszy post, do tej pory Was tylko oglądałem, ale muszę przyznać że jest tutaj całkiem inna atmosfera, dlatego też postanowiłem sam coś napisać.
Na vikopie swego czasu (z 2 miesiące temu, niestety post już usnięty) była dyskusja o eldorado w IT. Jedni pisali że jest 500 ofert na linkedinach, w komentarzach jednak były też opinie że wcale tak źle nie jest i że w ich firmach szukają osób. A potem, tradycyjnie zrobiło się bagno w dyskusji xD.
Co Wy uważacie na ten temat? Jest szansa na poprawę na rynku? Z mojego doświadczenia prawdą jest że dostanie się na rozmowę rekrutacyjną to już spore osiągnięcie. Zrezygnowałem z automatyki na rzecz IT, poszedłem we frontend (wiem, wybrałem najgorzej) no i teraz jestem w kropce, bo perspektyw nie widać, mimo że CV (oceniane przez osoby doświadczone) podobno nie wygląda źle.
@Szosti Senior Java - w maju był dramat, ofert jak na lekarstwo, po raz pierwszy to ja rozsyłałem CV zamiast odpisywać na oferty, ostatecznie pracy nie zmieniłem. Rozmowy były bardzo wyśrubowane, dostałem jedną ofertę na niższe stanowisko, której nie przyjąłem - mało atrakcyjny projekt, zrzucony na mida zostałem z moim zdaniem błahych powodów (brak doświadczenia z jednym aspektem JRE). Ale mnie nawet po ośmiu latach w branży zjada stres na rozmowach, i zapominam podstaw...
Dzisiaj już się trochę poprawiło, dostaję minimum jedną ofertę tygodniowo, ale zwykle są one cienkie. Eldorado jeszcze wróci, ale nie w tym ani raczej nie w przyszłym roku. Po 2020 na rynku jest przesyt. Dla nowych raczej szans nie będzie...
@Szosti u mnie tak samo, inzynier automatyk pracujący we frontendzie. Ale już mam 3-ci rok pracke, całkiem ok płatną. Czy eldorado? No nie. Jak poświęcasz przynajmniej połowe swojego wolnego czasu na ciągłe rozwijanie się, to w koncu uda ci się dostać pracę. Consistency is key.
Ale jednocześnie, dostając pracę, przy zadaniu rekrutacyjnym byłem 2-gi na 130 kandydatów (a szukali dwóch juniorów). Czy to eldorado? Patrząc na to, że wysłalem z 200 CV na wszystkie mozliwe oferty, na które spełniałem chociaż 5% wymagań, a na moje miejsce było 65 kandydatów, to chyba nie takie eldorado.
Z okazji dostania z pracy dostępu do GitHub Copilota, uznałem że pobawię się językami, które znam tylko z grubsza.
Po dwóch latach klepania głównie Pythona i sieciowych konfiguracji, zacząłem robić Advent of Code w C++.
Ale to jest kwadratowy język xD Jakieś vectory, cout'y, standard outputy. Nie przypominam sobie kiedy ostatnio musiałem definiować typ jakiejś zmiennej przed inicjalizacją, a co dopiero długość listy (znaczy się tablicy).
Niemniej bawię się świetnie. Dobra opcja na odświeżenie sobie podstaw.
@lukmar ten język jest kwadratowy z zupełnie innych względów. Sam proces kompilacji potrafi być drogą przez mękę, a jeszcze standard, który bardziej przypomina rzeźbę z gówna niż nowoczesny i spójny język programowania.
@MostlyRenegade Myślę że takie niuanse bym odkrywał dopiero pracując przy produkcyjnym kodzie. Na to się nie zapowiada na razie. Ale generalnie myślę że warto wiedzieć "z czym to się je".
@lukmar a, i jeszcze bym zapomniał o j*baniu się ze wskaźnikami i ręcznym zarządzaniu pamięcią. Co prawda ostatnio jest w tym względzie progres, ale dotyczy w sumie tylko rzeczy względnie nowych lub napisanych własnoręcznie. Bo jak dostaniesz jakieś stare api, to masz przerąbane jak w ruskim czołgu.
@piotrb a no widzisz. Moje jedyne doświadczenie z C++ to był jeden semestr na studiach kilka lat temu. Tam nas nauczyli żeby wszystko robić na tablicach, więc w mojej głowie to zostało jako standard.
Teraz copilot podpowiada mi vectory, ale jakoś tak nadal intuicyjnie wracam do tablic. Rozumiem że nie powinienem?
Niemniej sporo prawdy w tym że jestem w bańce. Od jakichś dwóch lat 90% kodu jaki piszę to python. Żeby było śmieszniej, kiedy jeszcze w poprzedniej pracy pisałem głównie w C#, to broniłem się przed tym pythonem rękami i nogami xd
Jak juz mam opanowanego Laravela, a potrzebuje ogarnac jakis frontendowy framework, to VUE czy React?
Mam projekt do zrobienia i zastanawiam sie czy nie zrobic tego tak, ze backendem bylaby API Laravel, frontend - w sumie panel adminsitracyjny - jako osobny projekt w React.
Tomasz Nikodem Hajto, ps. „Gianni” [...] – Ja kupuję tylko firmy Gianni Versace – powiedział i w ten sposób został na długie lata „Giannim”
Lubię przekazywać nazwami funkcji / podprojektów jakieś skojarzenie w formie easter-egga. Mam nadzieję, że śmieszne. #lajko <---- tag z #hejto dad jokes
No więc dzisiaj - frontend z użyciem Vue (nazwany właśnie `gianni` - sprawdź repo, daj gwiazdkę https://github.com/wombatDaiquiri/lajko ). Znowu pojęcie o tym jak działa framework mam mgliste. Ale działa. Jak chcielibyście mnie poprawić, to zapraszam do komentarzy
4. wskazać w pliku ./gianni/src/App.vue skąd pobrać posty ( `import posts from '../../data-processed/cls/2023-09-21T2331.109Z.json';` )
5. wejść do folderu gianni: `cd gianni`
6. odpalić serwer z frontendem xD kiedyś se o tym też pogadamy ( `npm run dev` )
7. wchodzicie na http://localhost:5173/ i widzicie brzydkie hejto, ale z postami być może w innej kolejności niż na hejto
8. zauważcie, że tylko raz kopiowaliśmy nazwę i wszędzie ją podmieniliśmy - to oczywiście super kandydat na automatyzację/flagę. Ale napisanie aplikacji w taki sposób to albo zdrowy rozsądek albo doświadczenie. Nie chcę na Was wywierać presji więc pozwolę sobie być nieskromny.
wszystkie te kroki można zautomatyzować - ale automatyzowanie czas. a moja doba ma jedynie 24 godziny, tak samo jak Wasze. Więc mam jeszcze dużo tematów na posty.
#programowanie #javascript #frontend #webdev
inb4 czemu nie czysty js: bo wymaga więcej tłumaczenia a tutaj można robić "cargo cult" i używać magicznych formułek do tworzenia interfejsów
#lajko , html, parsowanie, pierwszy niedoszły cross w historii hejto xD
w tym odcinku opowiem czym odpowiada serwer na tak zwane "zapytanie HTTP" i jak z tego zrobić "czyste dane" w postaci wpisów i komentarzy.
jeśli irytują Was przekleństwa albo nieformalny styl pisania, a chcielibyście mieć taki efekt jak w moim repozytorium, to moglibyście np. zapłacić @letsscrape żeby zrobili to za Was. chciałem również polecić stronkę i tutoriale tego użytkownika, ale stronka nie istnieje a tutoriale zwracają błąd xD
Moje przeczucie i doświadczenie podpowiada sformułowanie następującego twierdzenia;
prawdopodobieństwo odniesienia sukcesu w robieniu czegokolwiek rośnie wykładniczo względem czasu zajmowania się zagadnieniem.
źródło: instytut badań z d⁎⁎y vel moja intuicja ( ͡° ͜ʖ ͡°) "wykładniczość" jest figurą retoryczną a purystom znowu c⁎⁎j w d⁎⁎ę.
długi grafomański wstęp za nami, krótka treść przed nami.
Hejto w odpowiedzi na zapytanie HTTP odpowiada plikiem zapisanym w tak zwanym "HTML". Definicja jest taka, że "HTML" to język ZNACZNIKI które cośtam cośtam, ale c⁎⁎j Was to obchodzi. Zastąpimy to przykładami i chłopskim rozumem, bo obchodzi nas bardzo mały wycinek zagadnienia.
No więc w HTML istnieją wspomniane ZNACZNIKI. I te znaczniki mogą "zawierać" w sobie inne znaczniki. Jak foldery na Twoim komputerze.
Póki co zajmijmy się tekstem który widzimy - znajduje się on niejako "wewnątrz" znacznika który nie zawiera w sobie innych znaczników. Jeśli będziemy w stanie wskazać z którego znacznika chcemy wyciągnąć tekst - możemy zrobić takie rzeczy jak wyciągnięcie autora wpisu albo treści wpisu, a także jego lajków.
Jeśli chcieliście to wszystko zapamiętać, to w mojej ocenie jesteście pie⁎⁎⁎⁎⁎ięci xD
Jak sobie zobaczycie plik `scrape.js` to ja w nim używam tylko kilku tricków i one Wam wystarczą prawie wszędzie;
- wybranie znacznika (np. $('article') albo $('div'))
- użycie metody `each`, która wywołuje funkcję podaną jako argument kolejno na każdym elemencie który został wybrany (takim elementem będą na przykład kolejne znaczniki `article` w przypadku selektora `$('article')`).
- użycie metody `children` która wybiera wszystkie dzieci wybranego elementu
- sprawdzenie z którym elementem mam do czynienia za pomocą instrukcji `if` i pominięcie tych, które mnie nie interesują oraz pobranie zawartości z tych, które mnie interesują
- użycie metody `text` która zwraca tekst znajdujący się wewnątrz wybranego elementu
- użycie selektora `.` która wybiera wszystkie znaczniki mające daną klasę. Czasem w połączeniu z selektorem znacznika, np. `.find('div.parsed.text-sm')` - znalezienie znaczników `div` które mają co najmniej dwie klasy które wybrałem - `parsed` i `text-sm`
- użycie selektora ` ` która wybiera wszystkie które jest wewnątrz - na przykład `.find('div.w-full img')` wskaże wszystkie znaczniki `img` które są wewnątrz znaczników `div` które mają klasę `w-full`.
W tym momencie uważny czytelnik powinien ciągle mieć conajmniej dwa pytania (a przynajmniej te wydają mi się istotne i na nie odpowiem - jeśli masz inne, zapraszam do komentarzy);
- skąd mam wiedzieć jaki selektor wybrać?
- czym do ciężkiej k⁎⁎wy jest klasa?
Łatwe znalezienie selektora wymaga posiadania przeglądarki (w moim przypadku Google Chrome po angielsku - może jakaś dobra dusza napisze co kliknąć w Polskiej wersji - natomiast w każdej przeglądarce istnieje taka funkcja i działa podobnie). Klikamy prawym przyciskiem myszy na element który nas interesuje (np. treść wpisu - obrazek 1) a następnie wybieramy ostatnią opcję (u mnie "Inspect", po Polsku chyba "Zbadaj"?) i szukamy jakiegoś "charakterystycznego wzorca" w nowym okienku które nam się otworzy (obrazek 2 - klasy `.text-sm` i `parsed` - sprawdziłem i wyszło, że faktycznie trafiają tylkow treść wpisu). Zauważanie tych wzorców będzie Ci szło lepiej z czasem. W pliku scrape.js używam około 20 selektorów. Napiszesz takich parserów dziesięć i ciężko Ci będzie takich wzorców nie zauważać.
Na koniec używamy jakiejś biblioteki żeby wykonać akcję "pobierz zawartość selektora". W moim przypadku jest to `cheerio` bo wyskoczyła jako pierwsza jak wpisałem `javascript html parsing` xD (nie wiem czy nie powinienem o tym napisać na początku ale to jest właściwie istotny detal a nie "mięso" artykułu).
A wspomniana "klasa" to po prostu tak zwany "artybut" o nazwie "class" - widać to dobrze na obrazku 2. Istotnym jest na zakończenie dodać, że artybuty również możemy pobierać - w ten sposób na przykład zapisuję linki do avatarów pobierając atrybut `src` znacznika `img`;
Chciałbym niebawem pobawić się w sortowanie i wyświetlanie wpisów wymyślając różne algorytmy i sprawdzając czy któryś feed szczególnie mi się podoba. Jednak aby to zrobić potrzebuję sposobu na wyświetlenie wpisów w jakiejś formie graficznej, którą będzie mi wygodnie konsumować. Zajmiemy się więc tworzeniem "prawdziwego frontendu" i poznawaniem jakiejś "biblioteki do widoków".
Nadgorliwym proponuję poczytanie na przykład o vue.js ( https://vuejs.org/ ).
Ambitnym, kompetentnym i pie⁎⁎⁎⁎⁎⁎ętym proponuję poczytanie o innej technologii której nie znają albo która najbardziej do nich przemawia - do wyboru;
- react.js ( https://reactjs.org/ ) - z tego będzie korzystało kolejne pokolenie profesorów na uczelniach jeśli kiedyś wyewoluują poza ręczne pisanie HTMLa xD
- angular.js ( https://angular.io/ ) - ja nie korzystałem bo nie mam tego hasła w moim 'buzzword bingo' technologii o których się rozmawia przy piwie
- tailwind.css ( https://tailwindcss.com/ ) - reklamuje się sloganem “Best practices” don’t actually work. Więc brzmi conajmniej na rzecz wartą uwagi.
- bootstrap ( https://getbootstrap.com/ ) - nie wiem czy dalej się używa bootstrap, ale widziałem kiedyś gościa co używał i szybko robił widoczki, więc pewnie spoko.
- jquery ( https://jquery.com/ ) - kiedyś pisałem całkiem skomplikowaną stronkę używając jquery. Okazało się że wnioski do których doszedłem w bólu zostały już wysnute przez mądrzejszych ludzi i opakowane w `vue` i `react`. Mam nadzieję że pracownicy naukowi są już na tym etapie, ale szczerze mówiąc to nadzieja taka jak na zwycięstwo Polskich piłkarzy ( ͡° ͜ʖ ͡°)
Cały czas się zastanawiam - co by mi dało korzystanie z innego frameworka/silnika czy co to jest? Na potrzeby lajko wystarczyłoby jQuery ale to myślę że jest za stare.
@wombatDaiquiri - spróbować nie zaszkodzi raczej?
Ja myślałem, że to jakaś kupa jest jak pojawiło się po raz pierwszy w Stack Overflow survey - ale po sprawdzeniu dla mnie okazało się strzałem w dziesiątkę
- react.js ( https://reactjs.org/ ) - z tego będzie korzystało kolejne pokolenie profesorów na uczelniach jeśli kiedyś wyewoluują poza ręczne pisanie HTMLa xD
Ale z Ciebie optymista. Na wielu uczelniach do dzisiaj na kolokwiach masz pisać kod na kartce xDDD
kurde miałem robić #lajko jako silnik rekomendacji dla #hejto a tu widzę że bardziej by się przydał stabilny mirror #programowanie #networking #siecikomputerowe
async await - nie będę Wam jeszcze wyjaśniał co to jest, ale wyjaśnię jak sobie z tym radzić (chyba)
No więc ten post jest w pewien sposób eksperymentalny - nie mam mianowicie pojęcia, czy to co piszę jest prawdą i nie chce mi się szukać informacji i źródeł na ten temat.
Powód jest prozaiczny - chciałbym sprawdzić tolerancję odbiorców na drobne nieścisłości, oraz czy są wśród nas eksperci, którzy mogliby mnie poprawić. Jeśli będę zawsze chciał potwierdzać u źródeł czy dobrze mi się wydaje, to odcinki nie będą wychodziły codziennie, tylko co miesiąc. Pożyjemy, zobaczymy. Może mam dostatecznie dobrą intuicję, żeby nie wprowadzać Was za często w błąd.
W szczególności - pojęcia "wątków", "procesów", "korutyn", "przerwań", "rdzeni" zostanie w tym poście spłaszczone do abstrakcyjnej koncepcji "procesów wielowątkowych i jednowątkowych". Moje stosowanie zwrotu "wątek" nie ma na myśli pojęcia "thread", a abstrakcyjny "wątek który wykonuje się niezależnie na osi czasu". A purystom c⁎⁎j w d⁎⁎ę.
Zacznijmy od programów "jednowątkowych". Jak mogliście do tej pory zakładać czytając wpis o process.js: https://www.hejto.pl/wpis/tlumacze-jak-lajko-sortuje-posty-zeby-stworzyc-inaczej-posegregowana-liste-to-na, wątek działa tak, że wykonuje kolejno komendy linijka po linijce. A to `console.log` coś wypisze, a to `let twoj_stary = 'na⁎⁎⁎⁎ny'` przypisze jakąś wartość do zmiennej. Dzień jak co dzień.
No i wszystko byłoby spoko, tylko w pewnym momencie się okazało, że właściwie to nie za bardzo się da zrobić tak żeby wątek (czyli lista instrukcji) wykonywał się szybciej.
No to wymyślono zamiast tego, że można zrobić kilka wątków i one będą się wykonywały w tym samym czasie. Pomyśl o tym tak - dziewięć kobiet nie urodzi dziecka w miesiąc, ale jeśli każda zajdzie w ciążę to urodzą dziewiątkę dzeci w dziewięć miesięcy. Średnio 1 dziecko/miesiąc. Pointa tego żartu to właśnie wyjaśnienie czym jest programowanie wielowątkowe i co może nam dać oraz jakie ma ograniczenia.
Zamieniając życie na programowanie, zamiast rodzenia dziecka przez kobiety porozmawiamy o wykonywaniu zapytań HTTP. Zapytanie HTTP to to co robi przeglądarka jak wpiszesz `hejto.pl/najnowsze/strona/1`. Ja będę to symulował pisząc `axios.get(...)` - axios to tak zwana biblioteka (ta służy do robienia zapytań HTTP), ale nie potrzebujesz jeszcze szczegółowej wiedzy w tym zakresie.
Z zapytaniami HTTP jest trochę jak z rodzeniem dziecka - czasem długo trwają. Myślę, że zauważył to każdy, kto odwiedza regularnie #hejto.
Więc programując w JavaScript używa się do tworzenia takiego "wątku" funkcji z napisem `async`. Z tego co rozumiem zwraca ona `Promise`. `Promise` będzie się wykonywał niezależnie od tego, co zrobimy w wątku który go stworzył (np. przez wywołanie funkcji). Jeśli w funkcji głównej wywołacie `sleep`, czyli nie robienie niczego na np. 20 sekund, to taki request (czyli ZAPYTANIE HTTP ale po angielsku i widzę że notorycznie wtrącam to słówko i jestem już zmęczony przepisywaniem) pewnie zdąży się wykonać i kolejne funkcje korzystające z odpowiedzi (response) na zapytanie (request) będą działały poprawnie.
Problem z JavaScriptem jest taki, że jeśli funkcja jest zadeklarowana jako `async` to po prostu będzie się wykonywała w tle (osobnym wątku - tzw. asynchronicznie) i trzeba robić specjalne sztuczki, żeby poczekać na jej wynik. No i `axios.get(...)` właśnie taką funkcją jest xD
Na przykładzie - załóżmy że przypiszemy `Promise` zwrócony przy wykonywaniu zapytania to zmiennej `p` (pewnie coś w stylu `let p = axios.get(...)`). Proces wysyłania zapytania i odbierania odpowiedzi odbywa się "w tle". `Promise` (czyli typ zmiennej `p`) pozwala nam na poczekanie na odpowiedź na dwa sposoby;
- napisanie `await p()`, żeby poczekać aż się wykona przed wykonaniem kolejnych instrukcji
- napisanie `p().then()`, żeby zrobić coś po tym jak się wykona
Oprócz `then` można zrobić też `catch`, żeby sobie np. wypisać błąd jak się wydarzy (w przypadku hejto - czasem jest to błąd z "klasy 500" czyli błędów serwera typu wszelakiego. O tym pogadamy za dość długi czas). W przypadku `await` wydaje mi się, że używa się bloków `try { ... } catch { ... }`, natomiast sugeruję po prostu robić tylko `.then(...).catch(...)` podczas "prototypowania".
No i tutaj kolega @VonTrupka słusznie przewidział w jednym z historycznych wpisów, że wybór nodejs był w pewien sposób pójściem na kompromis xD Otóż w wypadku `nodejs` nie można zrobić `await` w głównym wątku, jak początkowo chciałem. Wydawało mi się, że powinno się dać zrobić `let resp = await axios.get(...)`. No ale się nie da. Zajęło mi ze trzy godziny pogodzenie się z wrzuceniem tego co faktycznie chcę żeby się wykonało w ramach tego "skryptu" (czyli małego programu) do funkcji `main` i użycie `main().then(...).catch(...)` w głównym wątku.
Żeby zrozumieć czemu ten cały cyrk ma sens trzeba wiedzieć jak działa nodejs na dość specjalistycznym poziomie. Ja mam swoją teorię spiskową że jest jednowątkowe i tylko "udaje" wielowątkowość. Ale nie wiem czy to prawda, a Ty ani nie musisz tego wiedzieć ani tym bardziej rozumieć o czym mowa.
Moje eksperymenty doprowadziły mnie do przeczucia, że czekanie na to aż funkcja kryjąca się pod `p` typu `Promise` się wykona, to zastosowanie formatu - `p().then(...).catch(...)` - w ten sposób możemy w `then` po prostu przypisać zwracaną wartość do jakiejś zmiennej i udawać że cały program jest jednowątkowy.
Jeśli udało Wam się zrozumieć co się dzieje z mojego opisu - gratuluję. Trochę Wam, trochę sobie, bo wydaje mi się że koncept "rzeczy dziejących się jednocześnie" i czekania na nie żeby nie działy się jednocześnie tylko po kolei nie jest super intuicyjne.
W nagrodę kolejny wpis będzie łatwy - o tym co zwraca hejto i jak wyciągnąłem z tego treść Waszych wpisów.
#lajko <--- mój tag (przesunąłem na pierwsze miejsce i posortowałem resztę w takiej kolejności, w jakiej uważam że trafienie do ich odbiorców jest dla mnie istotne, sorki memorki jeśli kogoś uraziłem)
@wombatDaiquiri panie, praktyka tak, ale w parze z rownolegla nauka. Inaczej bedziesz uskutecznial cargo cult programming czyli nigdy nie zrozumiesz jak dziala kod i czego sie spodziewac.
w wypadku `nodejs` nie można zrobić `await` w głównym wątku, jak początkowo chciałem
oczywiscie ze mozna. Od node v15+ jest to mozliwe LINK
Kolejna rzecz to jednowatkowosc node.js. Wszyscy tak pisza a prawda jest taka ze node.js od samego poczatku jest wielowatkowy out of the box. wszelkie operacje i/o (operacje sieciowe, czytanie dysku, itp) przetwarzane sa w osobnym watku (czy tam procesie).
Przykladowo:
console log('xxxxx');
const data = axios.get(....); <- node.js wlasnie tworzy nowy watek i kiedy zakonczy pobieranie danych zwroci wartosc. Wykonywanie kodu leci dalej i nie czeka na axios
const xx = 'ala ma kota' <- kod wykonywany w glownym watku rownoczesniej z pracujacym axiosem w innym watku
logger('wiadomosc'');
console.log( await data); <--- glowny watek wroci tutaj do wykonywania kodu w momencie kiedy watek obslugujacy polaczenie sieciowe zwroci dane
```const xx = 'ala ma kota' <- kod wykonywany w glownym watku rownoczesniej z pracujacym axiosem w innym watku```
nie wykonuje się równocześnie, a później (tylko że, wbrew temu co myśli dużo ludzi, obecne wersje node są bardzo szybkie) , a raczej wtedy, kiedy nadejdzie jego kolej wyznaczona przez event loop. Synchroniczny kod ma pierwszenstwo, po wykonaniu całego zakolejkowanego synchronicznego kodu, watek jest zwalniany i asynchroniczne funkcje mogą się wykonać.
Jeśli chcesz "prawdziwą" wielowątkowość, to masz od tego Worker Threads.
Inaczej bedziesz uskutecznial cargo cult programming
No i zajebiście ( ͡o ͜ʖ ͡o) możesz mnie przepytać ze specyfikacji Golanga na wyrywki xD to jest projekt po godzinach, bez napinki, żeby pokazać ludziom że programowanie jest w sumie proste jak chcesz tylko "coś uzyskać". Nie zamierzam się kreować na eksperta jsa, to mój pierwszy projekt od czasów jQuery xD
Do tematu: "change file extension to mjs" sorry, ale podziękuję za takie odczarowanie. Z artykułu brzmi jak syntactic sugar.
@wombatDaiquiri idzie przez API przeglądarki. Nie wiem, czy wiesz, ale JS jest wykonywany w przeglądarce
Nie wiem, czy zmyślam, takie tłumaczenie dostałem na rekrutacji. Bezmyślnie powtarzam, szukam potwierdzenia u mądrzejszych, którzy mają z JS do czynienia na co dzień.