AMD! Po co mi to pokazujecie?

po co mi oferujecie nową wersję, po co to ściąganie instalatora, uruchamianie go, po co dezinstalacja dotychczasowej wersji — by zaraz się na mnie wypiąć,

i pozostawić system w niepełnosprawnym stanie?
FAIL!
AMD! Po co mi to pokazujecie?

po co mi oferujecie nową wersję, po co to ściąganie instalatora, uruchamianie go, po co dezinstalacja dotychczasowej wersji — by zaraz się na mnie wypiąć,

i pozostawić system w niepełnosprawnym stanie?
FAIL!
https://www.develeap.com/pl/
Warunki uczestnictwa wydają mi się "kręte".
To jest ten jeden z lepszych pracodawców w Krakowie?

Klasa Order zmapowana w JPA:
@OneToOne(cascade = cascadeType.ALL)
@JoinColumn(name = "PRICE_ID”)
private Amount price;
@OneToOne(cascade = cascadeType.ALL)
@JoinColumn(name = "COST_ID")
private Amount cost;
Amount to typowe currency+value. Jest osobna tabela z generowanym kluczem głównym, tylko po to, aby trzymać te wartości. Co siedziało w głowie oryginalnego programisty, nie wiem. Ale domyślam się, że to było toksyczne połączenie Junior Architect+Hibernate.

Jeszcze dobrze nie zacząłem pisać, a podpowiadaczka już poprawiła mi humor. :D
Właśnie się wydarzyło na telefonie mojej żony i okazuje się że to popularny błąd na iOS występujący od iOS 14 (prawie dwa lata). W rogu ekranu nagle pojawia się prostokąt rozmazujący wszystko pod spodem (jest nad wszystkimi aplikacjami)
Ciekaw jestem jak przypadkowo można stworzyć takiego buga
ładny wzorek
static void sha256_transform(u32 *state, const u8 *input)
{
u32 a, b, c, d, e, f, g, h, t1, t2;
u32 W[64];
int i;
/* load the input */
for (i = 0; i < 16; i++)
LOAD_OP(i, W, input);
/* now blend */
for (i = 16; i < 64; i++)
BLEND_OP(i, W);
/* load the state into our registers */
a = state[0]; b = state[1]; c = state[2]; d = state[3];
e = state[4]; f = state[5]; g = state[6]; h = state[7];
/* now iterate */
t1 = h + e1(e) + Ch(e, f, g) + 0x428a2f98 + W[0];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1 + t2;
t1 = g + e1(d) + Ch(d, e, f) + 0x71374491 + W[1];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1 + t2;
t1 = f + e1(c) + Ch(c, d, e) + 0xb5c0fbcf + W[2];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1 + t2;
t1 = e + e1(b) + Ch(b, c, d) + 0xe9b5dba5 + W[3];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1 + t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x3956c25b + W[4];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1 + t2;
t1 = c + e1(h) + Ch(h, a, b) + 0x59f111f1 + W[5];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1 + t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x923f82a4 + W[6];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1 + t2;
t1 = a + e1(f) + Ch(f, g, h) + 0xab1c5ed5 + W[7];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1 + t2;
t1 = h + e1(e) + Ch(e, f, g) + 0xd807aa98 + W[8];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1 + t2;
t1 = g + e1(d) + Ch(d, e, f) + 0x12835b01 + W[9];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1 + t2;
t1 = f + e1(c) + Ch(c, d, e) + 0x243185be + W[10];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1 + t2;
t1 = e + e1(b) + Ch(b, c, d) + 0x550c7dc3 + W[11];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1 + t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x72be5d74 + W[12];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1 + t2;
t1 = c + e1(h) + Ch(h, a, b) + 0x80deb1fe + W[13];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1 + t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x9bdc06a7 + W[14];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1 + t2;
t1 = a + e1(f) + Ch(f, g, h) + 0xc19bf174 + W[15];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0xe49b69c1 + W[16];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0xefbe4786 + W[17];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0x0fc19dc6 + W[18];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0x240ca1cc + W[19];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x2de92c6f + W[20];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0x4a7484aa + W[21];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x5cb0a9dc + W[22];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0x76f988da + W[23];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0x983e5152 + W[24];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0xa831c66d + W[25];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0xb00327c8 + W[26];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0xbf597fc7 + W[27];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0xc6e00bf3 + W[28];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0xd5a79147 + W[29];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x06ca6351 + W[30];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0x14292967 + W[31];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0x27b70a85 + W[32];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0x2e1b2138 + W[33];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0x4d2c6dfc + W[34];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0x53380d13 + W[35];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x650a7354 + W[36];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0x766a0abb + W[37];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x81c2c92e + W[38];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0x92722c85 + W[39];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0xa2bfe8a1 + W[40];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0xa81a664b + W[41];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0xc24b8b70 + W[42];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0xc76c51a3 + W[43];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0xd192e819 + W[44];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0xd6990624 + W[45];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0xf40e3585 + W[46];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0x106aa070 + W[47];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0x19a4c116 + W[48];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0x1e376c08 + W[49];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0x2748774c + W[50];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0x34b0bcb5 + W[51];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x391c0cb3 + W[52];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0x4ed8aa4a + W[53];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0x5b9cca4f + W[54];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0x682e6ff3 + W[55];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
t1 = h + e1(e) + Ch(e, f, g) + 0x748f82ee + W[56];
t2 = e0(a) + Maj(a, b, c); d += t1; h = t1+t2;
t1 = g + e1(d) + Ch(d, e, f) + 0x78a5636f + W[57];
t2 = e0(h) + Maj(h, a, b); c += t1; g = t1+t2;
t1 = f + e1(c) + Ch(c, d, e) + 0x84c87814 + W[58];
t2 = e0(g) + Maj(g, h, a); b += t1; f = t1+t2;
t1 = e + e1(b) + Ch(b, c, d) + 0x8cc70208 + W[59];
t2 = e0(f) + Maj(f, g, h); a += t1; e = t1+t2;
t1 = d + e1(a) + Ch(a, b, c) + 0x90befffa + W[60];
t2 = e0(e) + Maj(e, f, g); h += t1; d = t1+t2;
t1 = c + e1(h) + Ch(h, a, b) + 0xa4506ceb + W[61];
t2 = e0(d) + Maj(d, e, f); g += t1; c = t1+t2;
t1 = b + e1(g) + Ch(g, h, a) + 0xbef9a3f7 + W[62];
t2 = e0(c) + Maj(c, d, e); f += t1; b = t1+t2;
t1 = a + e1(f) + Ch(f, g, h) + 0xc67178f2 + W[63];
t2 = e0(b) + Maj(b, c, d); e += t1; a = t1+t2;
state[0] += a; state[1] += b; state[2] += c; state[3] += d;
state[4] += e; state[5] += f; state[6] += g; state[7] += h;
/* clear any sensitive info... */
a = b = c = d = e = f = g = h = t1 = t2 = 0;
memset(W, 0, 64 * sizeof(u32));
}
Po refactorze:

Stacja dyskietek 3,5" wydaje nieprzyjemny chrobot gdy próbuje się z niej cokolwiek odczytać, a nie ma w stacji dyskietki.
Jeśli dyskietka jest włożona, też dźwięk się wydobywa, ale inny.
Posiadanie stacji dyskietek w komputerze z Windows 10 jest uciążliwe. Co godzinę - dwie, jakiś proces (może systemowy, może nie) najwyraźniej iteruje po wszystkich dyskach nie robiąc wyjątków, bo słyszę ten chrobot. Czasami dzieje się to autonomicznie, czasami na skutek kliknięcia (np. otwarcia jakiegoś okna ustawień).
Kiedyś by to nie przeszło, bo byłoby zauważalne. Ale dziś programiści myślą że można bezkarnie czytać sobie z każdej istniejącej literki dysku - najwyżej sfailuje...
W PHP możemy używać superglobalnych zmiennych $argc oraz $argv, podobnie jak w C, do odczytania parametrów uruchomieniowych.
Jest też opcja abstrakcji, nie specjalnie mądra, getOpt(), do parsowania tego. Opcja pozwala parsować wartości, np --file src/, albo flagi, np -t.
Teraz zgadnijcie jak jest oznaczona flaga, która jest włączona, np przekazanie --file src/ -v
array(1) {
[file] =>
string(4) "src/"
[v] =>
bool(false)
}
Tak. Jeśli wartość jest false, to znaczy że istnieje. (nie przekazana wartość jest nieobecna w wyniku).
Robiłem pair progrmaming z nowym gościem w pracy, miałem go za ogarniacza, dopóki nie spotkaliśmy się na screen share. Chciał żębym miał najnowsze zmiany. Zrobiłem przed chwilą git fetch, więc teraz wystarczyło tylko git merge origin/master; na co mój nowy kompan "nie rób merga, miałeś tylko pulla zrobić". Well.
Jak widzę takie coś to zastanawiam się czy tam jakiś interval w jQuery leci i sprawdza czy przypadkiem nie zamknąłem przeglądarki (edit: trochę nie zabłysnąłem żarcikiem, miałem na myśli websockety i jakiś signal r po stronie serwera), jak tak to nie oddadzą pieniędzy.

Wszyscy rozsądni programiści Javy wiedzą, że używanie wywołania System.gc( ) to antywzorzec. Za wyjątkiem bardzo specyficznych sytuacji np. w testowaniu wycieków, nie powinno się tak robić, bo GC sam lepiej wie kiedy się uruchomić, a samo wywołanie GC ręcznie i tak nie uratuje nas przed OOM, jeśli miałby nastąpić. No i nie ma też żadnej gwarancji że System.gc() w ogóle cokolwiek zrobi, bo oficjalna dokumentacja stwierdza że to tylko wskazówka dla JVM i ponadto można to wywołanie zablokować przez -XX:+DisableExplicitGC.
Wczoraj otrzymałem logi od jednego z użytkowników, skarżących się na sporadyczne bardzo długie pauzy GC (ok 5 - 10 sekund), prowadzące do timeoutów. Trochę dziwne, bo przecież używamy garbage collectora G1, który raz na zawsze miał rozwiązać problem długich pauz i w ogóle odkąd go wprowadzono Java miała stać się krainą powszechnej szczęśliwości. A tam w logach takie coś:
2022-07-13T05:14:52.337-0700: 10156403.914: [Full GC (System.gc()) 26G->570M(31G), 7.2234043 secs]
"Jaki debil wywołuje System.gc w kodzie produkcyjnym?!" pomyślałem i zabrałem się za grepowanie kodu. Nie znalazłem jednak nic. Jednak nie dałem za wygraną i w końcu dotarłem do miejsca, skąd to wywołanie leciało:
static void reserveMemory(long size, int cap) {
synchronized (Bits.class) {
if (!memoryLimitSet && VM.isBooted()) {
maxMemory = VM.maxDirectMemory();
memoryLimitSet = true;
}
// -XX:MaxDirectMemorySize limits the total capacity rather than the
// actual memory usage, which will differ when buffers are page
// aligned.
if (cap <= maxMemory - totalCapacity) {
reservedMemory += size;
totalCapacity += cap;
count++;
return;
}
}
System.gc();
...
Tak, to kod biblioteki standardowej Java. :facepalm
Java oferuje ręczną alokację pamięci off-heap (DirectByteBuffer) ale WTFem jest to że ta pamięć nadal może być zwolniona tylko za pośrednictwem GC, bo każdy taki bufor składa się z dwóch części: niewielkiego obiektu umieszczonego na stercie, podlegającego GC, i właściwego bufora na dane, znajdującego się poza stertą GC, na stercie "natywnej" (zwane off-heap). Bufory takie niestety nie mają żadnej metody free, delete, close ani niczego podobnego, co by uwolniło pamięć off-heap. Zwalniają pamięć dopiero jak obiekt na stercie GC zginie. Stąd ręczne wymuszenie GC jak direct memory sie skończy.
Myślę że dodatkowym WTFem jest to, że opcja -XX:+ExplicitGCInvokesConcurrent nie jest włączona domyślnie na G1 ani CMS. Włączenie tej opcji spowodowałoby przynajmniej że GC nie przeszłoby w tryb stop-the-world przy tym wywołaniu, a jedynie zatrzymany zostałby bieżący wątek.
PHP Cache'uje wyjątki w wyrażeniach regularnych :o
\ini_set('pcre.jit', '1'); // Włącz JIT
\preg_match('/((?1)?)/', ''); // wywołaj błąd kompilacji
\preg_last_error(); // PREG_JIT_STACKLIMIT_ERROR
\ini_set('pcre.jit', '0'); // Wyłącz JIT
\preg_match('/((?1)?)/', ''); // wywołaj błąd kompilacji
\preg_last_error(); // PREG_INTERNAL_ERROR
A teraz najlepsze:
\ini_set('pcre.jit', '1'); // Włącz JIT
\preg_match('/((?1)?)/', ''); // wywołaj błąd kompilacji
\ini_set('pcre.jit', '0'); // Wyłącz JIT
\preg_match('/((?1)?)/', ''); // wywołaj błąd kompilacji
\preg_last_error(); // PREG_JIT_STACKLIMIT_ERROR, mimo ze JIT jest wyłączony :D
Ostatni error jest zcache'owany po patternie. Inne wzorce już zwracają poprawne błędy. Nawet zmiana z \d na [0-9] powoduje odświezenie cache'a i poprawny wyjątek :D
Pehap nie przestaje mnie zadziwiać zdolnością do wytwarzania głupich rozwiązań.
ja to lubię te kody gdzie funkcja zwraca kod błędu i jest on ważny ale się go nie używa bo po co? A jeszcze okazuje się że przypadkiem działa! miałem taką sytuację:
Dodawałem tam pewien mikro feature
Z jednej funkcji miałem usunąć takie jedno wywołanie funkcji i zmienić kod pod if na trochę bardziej skompilowany ale z zachowaniem użycia obecnych wywołań API.
W logice tej oprócz wywołania API było jeszcze uaktualnienie wewnętrznego stanu w klasie.
Oczywiście mówię prosta zmiana cyk jak funkcja zwróci error to co byście zrobili? No nie kontynuowali a jak jakieś zmiany w wewnętrznym stanie klasy zaszły to zrobili rollback do starych wartości o ile coś trzeba. No i tak zrobiłem, wydawało mi się naturalne tylko nie zaczaiłem że oryginalny kod tego nie robił jakoś mój umysł to zignorował, dopisałem z automatu obsługę błędów.
Jako że nie miałem sprzętu żeby to przetestować lokalnie to dostał tester i jakie było moje zdziwienie że coś co od lat działa już nie!
Otóż co się okazało. że poprzedni kod olewał zwracaną wartość(jak wspomniałem), zmieniał stan klasy i wiśta wio. A to api co tam zmieniało wartości w innej części kodu jednak dane wyglądały inaczej bo się przecież nie powiodło!
Ba okazało się że to API nie mogło tak działać nigdy w ten sposób(dla tego typu urządzenia, takie ograniczenie) zawsze był error.
Czemu przez lata "działało"? A bo te dane zmienione zapisano też w persistent i jak resetowano urządzenie to jak było na "świeżo" to miało szansę zadziałać bo się stan z persistent memory wczytywał i odpalał się inny kawałek kodu co w tym kontekście działał.
W ogóle chyba nikt nie wiedział jak urządzenie ma się zachować(?). Lubię takie przaśne bugi. Niby działało, niby funkcje zwracają kody błędów ale jak wiadomo to są fanaberie te kody. I tak się żyje na tej wsi.
Po wielu przemyśleniach i zdystansowaniu się do zagadnienia dochodzę to wniosku, że webówka to jedno wielkie WTF. Frameworki, pluginy, webpacki, dostrajanie stron pod kątem różnych przeglądarek/urządzeń moblinych... Już nie mówiąc o tym, jak deklaruje się zmienne w językach typu JS czy PHP. Co za syf i bangladesz...
Odpuszczam webówkę, spróbuję swoich sił w aplikacjach desktopowych (C#).
Chyba wygrałem w Eurojackpot i nie są w stanie wyliczyć mojego konta:

Nie wiem czemu, ale wpisanie do MS Teams: (Windows) powoduje pojawienie się tego: 
Co ciekawe jeśli zacytuje się taki tekst to emoji się zmienia: 
Naprawdę, aż tyle tego musi być zainstalowane by MSQL albo inne oprogramowanie od Microsoft działało?

Kto widzi gdzie jest bug w tym kodzie:
std::string escape(const std::string& s)
{
auto result = boost::replace_all_copy(s, "\\", "\\\\"); // replace \ with \\
boost::replace_all(result, "\"", "\\\""); // replace " with \"
return result;
}
Zaznacz tekst poniżej, żeby zboczyć spoiler 2 (pl z dokładnym opisem):
Problemem jest preprocessor, który zobaczy najpierw linię kończącą się znakiem "\" a to oznacza, że następna linia jest kontynuacją obecnej linii.
Efekt jest taki, że następna linia staje się częścią komentarza :) bo komentarze są interpretowane na etapie kompilacji.
Markdown dobrze koloruje składnie (dlatego użyłem txt a nie cpp) i linia jest szara, ale wszystkie IDE jakie testowałem na tym się rozkłada
zrobiłam w jednym miejscu dodatkową możliwość podania przy wywołaniu funkcji oczekiwanego w jej środku komunikatu, który jeśli będzie równy temu oczekiwanemu to cośtam
użyłam tego na razie w jednym miejscu, podajac oczekwiany tekst 'costam' jako parmetr
tylko w tym jednym przypadku
kolega to wywalil i na sztywno wpisal w funkcje porowanie z magicznym tekstem 'costam'
funkcja teraz porównuje dla każdego wywolania, w klazdym miejscu programu z tekstem 'costam'
Miałem pewien skrypt, który napisany był pod PHP 5 (używał modułu pod starszą wersję). Niedawno kolega zaktualizował serwer do PHP 7.4 nie informując mnie o tym. Dlatego osoby korzystające z tego skryptu przysłały maila WTF. Także tego...
W kodzie HTML wstawiam obrazek:
<img src = zdjecie/produkt.jpg alt = "zdjęcie">
Natomiast w katalogu na serwerze plik nazywa się produkt.JPG. Zdjęcie się nie wyświetla, nawet bezpośredni URL wywala błąd [404] File Not Found : Plik nie istnieje.
Dopiero po zmianie na produkt.jpg jest ok.
Serwer na którym działa moja strona jest jakiś dziwny. Gdy wyświetlę kod źródłowy, to zamiast:
<link rel="stylesheet" href="index.css>
widzę:
<link rel="stylesheet" href="Aindex.css.pagespeed.cf.xkdddXaXOllqT.css">
Dodam jeszcze, że pomimo wyczyszczenia cache przeglądarki na jednym komputerze, strona dalej pokazuje się w starszej wersji (wczoraj zmieniłem 2 linijki w index.css).
@kosmonauta80 to jest wątek wtf. Jeżeli masz problem to otwórz nowy temat w odpowiednim dziale.
Nie wiem czy bardziej WTF programowania czy trochę humoru https://naukaios.pl/5-najlatwiejszych-i-5-najtrudniejszych-jezykow-programowania/
Spis treści
1 TOP 5 Najprostszych języków programowania
1.1 HTML (ang. HyperText Markup Language)
1.2 JavaScript – w skrócie JS
1.3 C – imperatywny język programowania
1.4 Python – najpopularniejszy język programowania
1.5 Java – obiektowy język programowania
2 TOP 5 Najtrudniejszych języków programowania
2.1 C++ – nietypowe rozszerzenie języka C
2.2 Prolog – język programowania do analizy języków naturalnych
2.3 LISP – język programowania z 1958 roku
2.4 Haskell – czysto funkcyjny język programowania
2.5 Malbolge – język zbyt trudny dla człowieka
Zrobilo sie chlodniej, chcialem wrocic do swoich prototypow z Androida a tu ZONK! (25 USD zmarnowane bo bede musial nowe konto zrobic, niby spamowali na powiazane konto, ale kurcze myslalem ze subskrypcja jest na stale :P ) 

Mały teścik na produkcji :)
Już ostatnio narzekałem na przeglądarki na mikro. Dziś coś mniejszego. Używam chromium do pracy a on do mnie na stronie startowej mówi "Super Duper Module - foo bar baz fo bar baz"
Chciałem wygooglać o co chodzi ale trafiłem tylko na złoszenie https://bugs.mageia.org/show_bug.cgi?id=28534 . Za duże mi to nie wyjaśniło i dalej zastanawiam się o co chodzi