Przyjmijmy, że...

Tak. Mostów, dróg, fundamentów, hal, co potrzebne. Tamten to akurat był od budownictwa mieszkaniowego, ale ql2/8 przewijało się raczej na każdym przedmiocie.
A skończyłem pilnując klawiatury ^^

4 Likes

Która ponoć sama ma pisać :slight_smile:

4 Likes

I pisze, ale i tak przy ekranie musi siedzieć małpa z więcej niż trzema neuronami, żeby tę radosną tfurczość weryfikować.
I wszystko jest zautomatyzowane, oskryptowane, ale i tak małpa musi pilnować bo się wykrzacza i koniec końców trzeba ręcznie.

4 Likes

Szukałem i testowałem kod do warstwy transakcyjnej dla systemu obsługującego zdywersyfikowanych emitentów długu tak długo aż napisałem go sobie sam bo to co jest nie nadaje się do użytku.

Różnica: gotowy i obiektowy kod z githuba, przeważnie niedziałający, wykonuje średnio 7,5 transakcji na sekundę. O ile po nowym commicie jego twórcy w ogóle zadziała. Mój prymitywny kod składający się z funkcji operujących na tabelach bazy danych (nie jestem programistą i nie ogarniam logiki kodu powyżej poziomu if + loop + case, o obiektach nie wspominając) dokonuje około 195 transakcji na sekundę.

Na tym samym krzemie, w tej samej bazie danych, z taką samą ilością przydzielonej pamięci i takimi samymi dyskami.

Przy czym ilość zaimplementowanej logiki biznesowej (co komu w systemie wolno, gdzie i kiedy) w moim kodzie jest mnożnikami większa niż w gotowcu. W mojej funkcji “wykonaj transakcję” około 90% kodu to kod zaczynający się od “if” który sprawdza czy warunek jest spełniony bo jeśli nie jest to abort i wypluj error code. Mój kod jest tak prymitywny że aż się zastanawiam dlaczego działa kompletnie nie pojmując jak to jest możliwe że taki prymityw autorstwa amatora jest mnożnikami wydajniejszy od obiektowo zorientowanego dzieła profesjonalnego programisty.

Nie, nie chwalę się. Po prostu tego nie ogarniam.

6 Likes

Nie ma innej logiki. Jest jedynie jej obfuskacja :slight_smile:
Każdy cykl da się tak rozłożyć nawet jeśli jest async.
Ze względu na sposób wykonywania tych funkcji przez urządzenie robi się różne fikołki sprawiające, że to tak nie wygląda, ale wyłącznie nie wygląda na tej warstwie.

catch;

Zauważ, że to co wziąłeś z gita w ogóle działało.
W przemyśle jesteśmy na etapie “istnieje fabryka, która od pół roku nic nie wyprodukowała, lead time ma na poziomie 2 week; scoobydoo mystery”.

Wszystko przed nami :slight_smile: Nadzieja w tym, że scyfryzują całą biurwę i pozostanie ona na wypalonych, glinianych tabliczkach w odmętach piachu :slight_smile:

3 Likes

Bo jego nauczyli myśleć obiektami, a Ciebie jak rozwiazać problem. On buduje fantazyjne grafy, listy, a Ty pewnie używasz tablicy i wskaźników :wink:
On pisze oprogramowanie “bezpieczne”, z pierdyliardem kontroli typów danych, itp. jakby to miała obsługiwać małpa, a Twój kod działa, bo sam bierzesz odpowiedzialność za to czym go nakarmisz.

4 Likes

A jest coś poza stanem pamięci?

3 Likes

gorzej :wink:

Kod napisałem w SQLu. Daaawno temu nauczyli mnie żeby warstwę manipulacji danymi umieścić tak blisko danych jak się da. No to umieściłem logikę aplikacji w bazie danych.

Dlatego używam rozkazów SQLa, if’a, loop’a i case’a, tabel, własnych i obcych kluczy, indeksów i od czasu do czasu kleju (“join”) organizując kod w funkcje oraz procedury.

Przy czym funkcje i procedury pisane są od dołu do góry, tak jak uczą tego magicy od unixa: dużo, za to prymitywnych narzędzi robiących możliwie mało. Jeśli o narzędzia chodzi to pojechałem na bogato, wszystko jest self-made.

Funkcje wyższego poziomu wykorzystują funkcje niższego poziomu. I tyle.

Format danych na wejściu funkcji sprawdzany jest jednym z pierwszych “if-ów” w każdej funkcji.
A ten cały input validation to się inaczej robi ? Poważnie pytam bo się nie znam.

3 Likes

Da się inaczej?
Też piszę funkcję operujące na jednej zmiennej i dopiero łączę w paczki sekwencyjne.

Oczywiste, wszak wypada jeśli funkcja zwróci coś sensownego, a nie wyrzyga string + real * array.

3 Likes

Sprawdzasz czy ktoś Ty nie próbujesz zrobić sql injection w danych? Sprawdzasz dlugość wprowadzanych stringów? Czy tylko tam gdzie mają być liczby to czy nie wrzucasz stringów? Czy tam gdzie mają być inty nie ma floatów? Czy sprawdzasz zakresy dla liczb?

3 Likes

Overhead nie jest za darmo. Sam wiesz, że to wszystko musi być przetrawione przez CPU.

2 Likes

Przecież to bez sensu.
Jako input wciągasz length bitów na bęben.
I dopiero wtedy sprawdzasz czy to jest do czegoś pasuje. I dopiero przenosić do wykonania jeśli przeszło sito.

To o czym piszesz jest dla funkcji wysokiego poziomu, gzie dokonujemy już po tej interpretacji. Czyli jako typ danych (a nie krojony żywcem bufor). Ale to dopiero w tej kolejności.
Jeśli odpalasz to na cpu to oczywiście robisz try catch, i w tym wypadku dorzucasz tracing. W przypadku odpalenia na gpu to cath jest defaultem z urządzenia (nie da się przechowywać undefined).

Czyli @gruby zrobił sprawdzenie typu danych try i jeśli nie taki to catch error.

2 Likes

flush^^;

Ale część tylko raz, później mieli to gpu i async odda jak skończy. A kończy szybko.

2 Likes

Skoro @gruby sam pisał, że działa w SQL, to nie bawi się w wysysanie bitów z bufora, tylko działa na wysokim poziomie.

Nie ważne kto to będzie robił, czy cpu, czy gpu, czy inny core cpu. Ktoś to będzie obrabiał, a to jest czas.
Poza tym co Ci da async, jeśli to dane bez ktorych nie mozesz kontynuować to i tak musisz czekać.

2 Likes

SQL nie, WAF tak: kontrola odbywa się tak blisko użyszkodnika będącego źródłem tych danych jak to tylko możliwe. W bazie danych jest na to o dwie warstwy za późno.

jak planuję max 64 bajty na wejściu to definiuję kolumnę tabeli jako varchar(64) po czym pozostawiam czarną robotę silnikowi bazy danych z jego “strict SQL mode”. Baza danych wykrzacza co ma wykrzaczyć.

WAF: obmacuj dane wejściowe tak wcześnie jak się da.

WAF.

w funkcjach manipulujących danymi, na poziomie SQLa. Nie tylko na wejściu, na wyjściu również. Jeśli wynik jest out of range to “strict SQL mode” odrzuca tranzakcję.

3 Likes

Ale ma to w kompilatorze z definicji nawet jakby leciało na VM (nie wnikam jak dany SQL jest wykonywany), inaczej nie działa.
Więc stosunek jest odbyty.

Tego nam ostatnio w procach nie brakuje. Chyba że ktoś epicko skaszani.

Możesz ich wrzucić tabelkę na raz. Jednym submitem. A nie oczekując na potwierdzenie każdego poleconego.

2 Likes

Jakość kodu jest odwrotnie proporcjonalna do ilości klepaczy.

3 Likes

Dlatego kod robiony na ćwierć etatu jest robiony 4 razy lepiej niż na cały :slight_smile:

3 Likes

potwierdzam. Po pojawieniu się problemu trzeba mu odpuścić i wrócić do problemu kilka ćwiartek później.

4 Likes

Ja stosuję jeszcze metodę “bialego misia” tj. rozmawiam o problemie z kimś kompletnie niewtajemniczonym, czyli “białym misiem”. Pytania o wyjaśnienie często podstawowych aspektów same naprowadzają na rozwiązanie, bo zmuszasz swoj mózg do analizowania problemu z innej perspektywy niż dotychczas utrwalona. Bialy miś jako osoba nietechniczna lub spoza branży jest dodatkowym atutem.

3 Likes