LukeJL

LukeJL
2019-03-04 15:02

Śniło mi się, że się rekrutowałem do Microsoftu i były jakieś dziwne testy psychologiczne, które sprawdzały zgodność z ich kulturą. Pytali o jakieś aury(??) i kolory (trzeba było zgadnąć kolor aury, WTF?). Aż mnie kusi, żeby wysłać CV do Microsoftu i zobaczyć, czy faktycznie tak jest.

LukeJL

@superdurszlak jakie to namiary? Zapodaj. Może złożę CV, chociaż w sumie i tak nie wiem czy mnie przyjmą, jeśli będę miał zły kolor aury.

Olsztyn

Jak Ci się przyśni Sasha Grey to też do niej napiszesz?

LukeJL
2019-02-25 00:23

Robię teraz do niej silnik wyszukiwania do swojej apki do notowania (nawet się rymuje). Pracowałem wczoraj nad implementacją indeksu i nad funkcją, która będzie przyjmować query (tj. obiekt z wartościami pól, trochę jak w Mongo) i wędrując po indeksie, zwróci listę dokumentów, które spełniają wszystkie warunki w query.

Zrobiłem naiwną implementację, na tablicach. Jednak wkurzało mnie, że ciągle muszę przeszukiwać tablice, żeby sprawdzić "czy dane id jest w tablicy" (czyli mając potencjalnie milion dokumentów w tablicy, będzie milion iteracji. Postanowiłem więc zrobić listę dokumentów na obiektach(obiekty w JS działają podobnie jak hashmapy/słowniki w innych językach - więc robiłem tak, że zamiast listy id [10, 20, 25] robiłem tak, że klucz był id, i miał przypisaną dowolną wartość, choćby true ({10: [], 20: [], 30: []} -- ja dałem puste tablice, bo zamierzałem dorobić potem tak, żeby trzymał w tej tablicy listę konkretnych rewizji dokumentu, które pasują do wartości w indeksie) ).

I myślicie, że się zoptymalizowało? I guzik, dalej nie było poprawy w mikrobenchmarku, który sobie zrobiłem. Odkryłem, że pomimo tego, że sprawdzenie "czy id jest w tablicy" nie powinno być już problemem - to jednak wciąż w innym miejscu kodu iteruję po... wszystkich kluczach obiektu. Byłem w szoku! Cały wysiłek na marne. Dalej mamy O(n), jeśli dobrze to liczę.

W międzyczasie przeczytałem pro-tip, że posortowaną tablicę można szukać binarnie - czyli dzielisz tablicę na pół, jak nie znajdujesz wartości, to sprawdzasz, czy liczba jest większa czy mniejsza, a potem bierzesz albo lewą, albo prawą część reszty tablicy, i tę resztę znowu dzielisz na pół i powtarzasz cały proces. Coś, co pewnie każdy z nas czasem intuicyjnie robi, jak coś odmierza na oko. Za dużo? To dzielimy na pół? Teraz za małe? To dodajemy z ćwiartkę itp.

Anyway. Myślicie, że to pomogło? Może trochę tak, ale muszę zrobić lepsze benchmarki, żeby to ocenić...

Natomiast najlepiej pomógł mi zoptymalizować algorytm w sumie drobiazg, zwykły zdrowy rozsądek. A mianowicie: załóżmy, że mamy query z kilkoma polami naraz, np. {year: 2018, text: "kotek"}. Mój algorytm działa w ten sposób, że pobiera listy dokumentów z każdego indeksu (czyli np. 1000 dokumentów z roku 2018 oraz 5 dokumentów zawierających słowo "kotek") i potem je po kolejno filtruje, czy spełniają wszystkie warunki. Problem jest taki, że jest tu dużo niepotrzebnej filtracji (trzeba przejechać po tysiącu dokumentów 2018 i dopuścić tylko te, które są w drugiej liście text="kotek"). Otóż, wpadłem na banalnie głupi pomysł, żeby sprawdzać liczbę dokumentów w listach, i w razie potrzeby odwrócić kolejność (czyli jak mamy 5 dokumentów gdzie text="kotek" i je testujemy, czy są z 2018, i tego tysiąca w ogóle nie będziemy sprawdzać). I to faktycznie polepszyło wydajność.

Tak się zastanawiam, czy to wszystko, co robię, nie jest jakimś wielkim premature optimization, ale z drugiej strony robię silnik wyszukiwania, więc już teraz mogę powiedzieć, że to będzie musiało być efektywne, że będę miał taką potrzebę, żeby wyszukiwać szybko w wielu dokumentach. Potrzebuję jednak jakichś lepszych, bardziej rozbudowanych benchmarków. I więcej wiedzy na temat efektywnych struktur danych (już czytam o tym, chociaż nie wszystko jest jasne).

no_solution_found

np KeePassXC tak robi, że możesz wybrać sobie dowolne miejsce zapisu danych i tam zapisuje wszystko. To w jaki sposób sobie sam synchronizujesz, to już Twoja sprawa :) możesz podobnie podejść do tematu.

LukeJL

@no_solution_found Jeśli piszesz apkę do notowania, to pisz apkę do notowania a nie ficzery do okoła - no właśnie piszę coś hybrydowego - taki szukajko-notatnik. Jedna apka, która łączy wiele funkcji. Ale może skończy się na tym, że zrobię coś, co będzie dobrą szukajką, ale już słabym edytorem notatek? Kto wie, czy końcowy produkt nie będzie po prostu bardziej szukajką niż edytorem notatek - ale zrobić sam edytor notatek to też kupa pracy i myślę nawet, że to trudniejsze od tego co w tej chwili robię (ponieważ sama edycja będzie wymagać zaawansowanego GUI, a robienie GUI jest generalnie trudniejsze od robienia czegoś czysto konsolowego, czyli tego, co w tej chwili robię). Pewnie jakbym zaczął od tej drugiej strony, to pojawiłyby się głosy "po co coś takiego robić, skoro są już takie apki". Ale zobaczymy, robienie to proces.

LukeJL
2019-02-15 17:07

Platformy quizzowe dla programistów (Codility czy inne). Hit czy kit? Teoretycznie obiecują szybkie sprawdzenie wiedzy i weryfikację, czy kandydat jest dobry. Teoretycznie. Bo teoria często rozmija się z praktyką. Poczytajcie szokującą relację ze zdawania testów na platformach on-line (całość dostępna u mnie na blogu: http://13zmiennych.blogspot.c[...]wdzac-wiedzy-technicznej.html )

dbCooper

W sumie jak ktos takie testy robi 100% i na typowym interview quiz tez wypada 10/10 a poprawne odpowiedzi leca jak kule z AK47 to ja bym sie paradoksalnie bardziej zaczal zastanawiać czy faktycznie jest taki dobry czy tylko wykuł wszystko jak na egzamin na studiach ;)
https://i.ytimg.com/vi/OGAu_DeKckI/hqdefault.jpg

superdurszlak

@dbCooper: znam na studiach takich, którzy potrafię uciekać się do wymuszania podnoszenia ocen robieniem scen czy wykłócaniem się o błędną odpowiedź, jeśli samo wkucie wszystkiego nie wystarcza. Zresztą strategia, jak się okazuje, jest skuteczna. No ale 50% społeczeństwa pewne rzeczy uchodzą płazem :)

LukeJL
2019-02-06 15:07

Facebook wypuścił haki do Reacta :) Tzn. to takie funkcje, które się wczepia do komponentów funkcyjnych, żeby mogły one zarządzać swoim stanem czy odpalać efekty uboczne - czyli to, co było kiedyś tylko w komponentach klasowych. Czyli klasy można wypieprzyć w kosmos, jedziemy na funkcjach.

No i łatwiej będzie wydzielać powtarzającą się logikę w komponentach, bez potrzeby uciekania się do sztuczek typu tworzenie pięciu różnych wrapperów na komponenty.

Ten dodatek pozwoli na uproszczenie wieeeelu rzeczy w React, które kiedyś były trudne - zarządzanie stanem, przekazywanie danych w głąb (przez kontekst) - to co było kiedyś bólem, teraz jest zabawą. Myślę, że wreszcie Redux może paść (ponieważ wydaje się, że problem, który Redux próbuje rozwiązać, jest już rozwiązany out of the box - ba, nawet jest specjalny hak useReducer - chociaż i bez niego można sobie poradzić). Chociaż z kolei Mobx wg mnie jeszcze miałby rację bytu.

Żeby nie było tak dobrze - to niestety, ludzie się zachłystnęli tymi hakami i pewnie przez najbliższe miesiące będzie postawać mnóoóóstwo niepotrzebnych bibliotek, które będą używać haków tylko po to, żeby używać (już powstają, bo ludzie przed wypuszczeniem haków korzystali z wersji alfa Reacta)

Poza tym ludzie nie umieją tego używać i tworzą god-funkcje na wiele linijek kodu, pełne podfunkcji, słabo to wygląda. Fajny ficzer we frameworku nie zastąpi rozsądku programistycznego ani zasad typu SOLID.

Tym niemniej - jest szansa, że React przestanie być dziwny nieporęczny w użyciu (bo dziwny dalej będzie, może jeszcze bardziej). :)

https://reactjs.org/docs/hooks-intro.html

Aventus

Tak, ale w centralnym zarządzaniu stanem chodzi też o to aby stan nie mógł być "magicznie" modyfikowany z przypadkowych miejsc. Ułatwione debugowanie to miły efekt uboczny, nie cel sam w sobie.

LukeJL

@Aventus w przypadku stanu z Reacta też stan nie jest modyfikowany z przypadkowych miejsc, bo nad wszystkim czuwa React. Więc Redux jest tylko jednym z narzędzi, które pozwala na kontrolowaną zmianę stanu. Albo np. Mobx - wydaje się, że totalna samowolka, bo masz obiekty, które sobie zmieniasz jak chcesz - ale w rzeczywistości każda zmiana właściwości takiego obiektu jest pilnowana przez Mobx i można się podpinać pod zmiany (no i wszystkie komponenty, które używają danego kawałka stanu, są z automatu uaktualniane). Tylko, że tutaj jest przewaga bibliotek takich jak Redux czy Mobx nad użyciem samego Reacta, że to są biblioteki tylko do zarządzania stanem i można mieć ładny decoupling stan <--> widok. I np. kto wie, może w środku projektu zmienić potem bibliotekę z Reacta na Vue, bo tak chcemy. W przypadku używania stanu React największy problem polega na tym, że jest się uwiązanym do Reacta (Vuex też ma podobny problem - to tylko pod Vue działa). I w tym widzę problem w używaniu stanu React na wielką skalę, zamiast trzymać stan w jakiejś osobnej bibliotece.

LukeJL
2019-01-20 07:25

Dużo prototypowałem w związku z tą grą studencką. Tak dużo, że aż będę musiał przepisać dużą część kodu od nowa (słaba jakość kodu + problemy wydajnościowe). Z drugiej strony to właśnie pisanie spaghetti pozwoliło mi szybko sprawdzić pewne idee oraz dobrać odpowiednie podejście dot. kodu, architektury, biorąc pod uwagę rzeczywiste wymagania gry.

Anyway:

  • wprowadziłem inwentarz. zbieranie przedmiotów. planuję też zrobić możliwość handlu.
  • rozbudowałem tworzenie levelów (są drzwi już, framugi). Ale samo tworzenie obiektów 3D w Three.js czy wykrywanie kolizji będzie musiało zostać przepisane, żeby zoptymalizować (chyba użyję jednego dużego BufferGeometry, który będzie zawierało dane wszystkich ścian - obecnie do każdej ściany tworzę osobną "geometrię" w Three.js)
  • są już jakieś zaczątki ruchu NPCów (planuję później zaimplementować szukanie drogi).
  • system zdarzeń - postacie mają możliwość obserwowania tego, co się dzieje w grze. Wtedy cokolwiek zrobisz (np. ukradniesz kanapkę), może być zapisane gdzieś i NPCe mogą być "świadomi" tego i mogą inaczej cię traktować. Jednak na razie jest to zwykła tablica ze zdarzeniami dostępna dla wszystkich NPCów, natomiast planuję zrobić pewne "huby" zdarzeń, tak że NPC będzie widział tylko te zdarzenia, które sam widzi, bo np. jest w tym samym pokoju. A także system plotek (przekazywanie sobie wiedzy o zdarzeniach przez postacie).
  • myślałem jak zrobić psychologię postaci - skąd postać ma wiedzieć, czy ma szukać jedzenia czy się uczyć do egzaminu? Początkowo myślałem nad hierarchią potrzeb Masłowa, ale po przemyśleniu wydaje mi się, że ten model jest dość problematyczny i zbyt naiwny, nawet jak na potrzeby gry. Więc postanowiłem, że zrobię to w inny sposób (dokładniej o tym napiszę później, jak już to zaimplementuję).
  • myślałem też nad fabułą (ale o tym później, na razie powiem, że będzie się to działo w mieście, które jest podzielone na dwie części).
  • założyłem notatnik (papierowy), w którym opisuję koncepcje związane z grą, robię rysunki. To pomaga mi złożyć wszystko do kupy i udokumentować design gry. Taki trochę "game design document". Poza tym mogę sobie poużywać cienkopisów i zakreślaczy, co jest fajne.

No i dołączam screena (chociaż akurat niewiele się on różni od poprzedniej wersji, poza tym, że jest inwentarz, menusy przy postaciach i framugi przy drzwiach).

LukeJL

@Garen_eye nie wiem jak jest w Simsach, ale ja obmyśliłem metaforę fizyczną: postać ma różne cele (np. jedzenie) i te cele są jak planeta/gwiazda (tzn. przyciągają postać). I cel może mieć małą wartość (wtedy słabo przyciąga, jak ktoś jest tylko trochę głodny), ale może mieć też dużą wartość (jeśli ktoś jest bardzo głodny). Analogicznie do tego, że Słońce jest większe i przyciąga ciała niebieskie mocniej niż mniejsza Ziemia. Tym niemniej łatwość spełnienia celu też jest ważne - tak jak w fizyce - bliskie ciała oddziałują na siebie mocniej, dlatego ludzie spadają na Ziemię, a nie na Słońce. Więc np. jeśli mamy łatwo dostępne inne zajęcie (np. jesteśmy w pokoju z innymi ludźmi, więc jest dostępne zajęcie rozmowa), a sklep spożywczy jest daleko, to możliwe, że wybierzemy rozmowę, ponieważ jest łatwiej dostępna.

LukeJL

@Garen_eye Chociaż w sumie to odwrócenie, o którym piszesz, też byłoby ciekawe, w sumie mogę to połączyć, te dwa podejścia. Chociaż już nie wiem, czy czegoś podobnego nie obmyśliłem nieświadomie. Bo z jednej strony mamy "cele" postaci (np. zjedzenie, nauka do egzaminu), z drugiej strony mamy dostępne w danym pomieszczeniu/budynku działania, które pozwolą na zrealizowanie tych celów. Tym niemniej ja wychodzę od postaci raczej i na tym, że postać wybiera na podstawie swoich celów i dostępnych działań (przynajmniej w koncepcji, bo jeszcze nie przystąpiłem do implementacji tego).

LukeJL
2019-01-11 09:03

Od kilku dni robię grę. Choć na razie jest w fazie prototypu. Akcja będzie się rozgrywała na uniwersytecie i trzeba będzie rozwiązywać różne zagadki. Taki trochę RPG, trochę skradajka, trochę symulator życia.

Póki co robię to sobie w Three.js, ale tak na dobrą sprawę to przypuszczam, że to nie kwestia wyboru silnika/technologii będzie największym problemem. Mianowicie:

  • trzeba będzie jakoś postacie zrobić. Mam zamiar się poduczyć trochę modelowania w Blender
  • jakaś głębsza fabuła by się przydała, na razie mam tylko parę ogólnych pomysłów
  • no i sama mechanika gry, żeby to było grywalne.

Natomiast co do reszty, to sobie to robię ot tak, dla idei, więc nie zależy mi na tym, żeby grafika była super, ani żeby osiągnąć sukces na miarę gier AAA, to raczej osobista idea-marzenie zrobienia ciekawej gry.

jarekr000000

Mam problem choroby morskiej (a w zasadzie u mnie to jest ból głowy) przy grach, które zostały chamsko przekonwertowane na VR. Np. zanim powstał fajny Skyrim VR to można było w zwykłego SKyrima na VR pograć. Było słabo, ale ładnie... tym niemniej cała przyjemnośc kończyła sie w momencie walki i pięknie zrobionych ciosów wykańczających, gdzie gra automatycznie przechodziła w tryb 3 osoby. Nagla twoje ciało od Ciebie odjeżdża - zajebisty efekt :-) Btw. nudności moga być (a nawet podobno zwykle są) związane z mała ilością FPS (90 fps zalecane), dlatego komputer pod VR musi być dość solidny. Pod VR te 90 fps nie jest takie proste (render z dwóch perspektyw, maxymalny AA -> karty graficzne płoną).

Spine

Ja miałem efekt "choroby morskiej" na Toy Story 3 w kinie z okularami 3D. Jeden z pierwszych filmów w 3D jakie widziałem, ale początek tego filmu był dość dynamiczny. Podobnie miałem na Resident Evil IV (2010) - też początek wybajerowany pod 3D w tym budynku...

Teraz jak oglądam 3D to praktycznie nie czuję różnicy, więc chodzę na filmy 2D, bo taniej.

LukeJL
2018-12-16 21:27

zrobili narzędzie do pisania frontendu w C#
https://blazor.net/
"Blazor is an experimental .NET web framework using C# and HTML that runs in the browser."
(nie wiem ile to jest warte, ale może przynajmniej dzięki temu programiści C# nie bedą się łapać za JavaScript).

somekind

Programiści C# się nie łapią za JS, robią to co najwyżej jacyś fullstackowi przebierańcy.

Akihito

@somekind: racja jak wsikalem do JS to teraz siedzie i kelpie w Angularze zamiast w tym pieknym C# :(

LukeJL
2018-12-07 20:08

Czy wiecie, że Dan Abramov, ten idol młodzieży, założył bloga? Już ma 3 wpisy na temat Reacta https://overreacted.io/

LukeJL

Tylko, że największą wadą ekosystemu Reduxa jest zacietrzewienie jego użytkowników. Będą na siłę się buntować, że robią programowanie funkcyjne (mimo, że zasada działania Redux bliżej programowania obiektowego stoi) i każde wspomnięcie o OOP powoduje wielką obrazę, że "OOP to jest g**no, funkcyjne lepsze". No i robienie sobie sztucznie problemów, unikając OOP za wszelką cenę. (dlatego dziwię się, że np. Mobx jest tak mało popularne, bo Mobx jest bardziej obiektowe i pozwala na bardziej wygodne programowanie zamiast udawać, że się programuje "funkcyjnie" tylko dla samej podjary).

Pijak

Problemy web developerów

LukeJL
2018-12-05 16:10

Czemu programiści piszą na ciemnym tle? Czemu mimo wszystko zmieniłem kolor na moim blogu o programowaniu z ciemnego na jasny? Czy to w ogóle ma znaczenie?

Nowy wpis na "13 Zmiennych": http://13zmiennych.blogspot.com/2018/12/jasnosc-ciemnosc.html

elwis

Zapomniałeś jeszcze o jednym, ciemny mniej męczy oczy, zwłaszcza jak się ślęczy długo nad kompem. :) Poza tym ja tam zawsze wolę ciemne tło, bo się łatwo rozpraszam. Z podobnych względów dużo pracuję w konsoli i nie używam ide z setkami różnych guziczków i sekcji. U mnie na ekranie powinna dziać się jedna rzecz.

LukeJL
2018-10-15 19:16

Pisałem już kiedyś o tym, że jedna firma chciała mi potrącić z pensji za biurko i komputer? No to tutaj to nieco szerzej opisałem, dokładnie jak ta historia się rozwijała, jak spotkałem Januszy Pythona, którzy chcieli zatrudnić frontendowca, a nie wiedzieli jak. Zapraszam do czytania: https://blog.2late.pl/2018/10/miaem-pracowac-na-pododze.html

Spine

Ten skecz jest super ;)

vpiotr

Byłem kiedyś w takiej firmie na rozmowie. Tzn. mieszkanie przerobione na biuro, zdezelowane meble, po długiej rozmowie weszliśmy na temat pensji, zaproponowali coś ok. 1700 zł co było jakoś tak co najmniej 2-3x mniej niż miałem wtedy na pensji. Grzecznie podziękowałem. Nie byli chyba zdziwieni.