Programistyczne WTF jakie Was spotkały

Programistyczne WTF jakie Was spotkały
LP
  • Rejestracja:około 7 lat
  • Ostatnio:około miesiąc
  • Postów:365
2

Z dzisiaj, takie perełki na PR wrzuca brazylijski senior iOS'a który ma mnie wdrożyć w świat swifta / iOSa:

Kopiuj
struct Sort {
    let key: SortKey
    let direction: SortDirection
    
    var isAscending: Bool {
        return direction == SortDirection.descending ? false : true
    }
}

Im dalej w las tym więcej drzew:

Kopiuj
enum SortDirection: String, StringEnum {
    case descending
}

Kolejna perełka, komentarz który dodał:
//NAO COMPLETA AINDA

Hola kolego miałem się uczyć od Ciebie swifta a nie portugalskiego.

Na drugi dzień:
// TODO: transferir logica para HomeInteractor pois agora nao interessa mais se esta offline ou nao para exibir os cards

Inne wtf projektowe:

Kopiuj
Dzisiaj mam spotkanie z osobą z USA, nie ogarniają jednej biblioteki i jest blocker jak cholera 
Dwa miesiące temu mówiłem że to nie działa / nie jest przetestowane i trzeba zapytać klienta czy jest ok
Jasne
Poszło na produkcje, szef jeszcze zamknął taska jako Fixed

oraz:

Kopiuj
Wczoraj Testerki zrobily request zeby nadpisac cale srodowisko gdzie sa deeplinki
I poszlo xD zaden link do nie dziala a bez deeplinkow nie rozwiaze tematu z USA
Automatu na tworzenie deeplinkow na to nie ma, dziewczyny siedza i tworza nowe recznie, kazdy zajmuje kolo 3 minut a trzeba ich zrobic kilkaset...
edytowany 1x, ostatnio: lubie_programowac
MarekR22
kilkaset deeplinków to już WTF. A na WTF typu if (x()) return true; else return false; to przygotuj się psychicznie, bo będziesz ich widział dużo.
NA
chyba pracujemy przy tym samym projekcie
LP
@MarekR22: :) tylko że w moim przykładzie a raczej przykładzie kolegi jest: if(x()) return false; else return true; więc if true then false ;)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
2

Nie wiem czy to programistyczny WTF czy bardziej sknerowatość sprzedawcy:
koszyk.png

Zobacz pozostałe 3 komentarze
vpiotr
Wlasnie cos te klocki jakos drogie mi sie wydawaly.
Azarien
tak a propos, ostatnio zamawiałem duże lego z włoskiego amazona. wychodzi taniej.
axelbest
@Azarien: to polecam jeszcze bricklink
Marooned
Może to jakiś gotowy skrypt, gdzie trzeba było podać jakąś wartość? Na Allegro czasem są towary za kosmiczną kasę, bo wolą tak zrobić na czas braku towaru niż zdejmować ogłoszenie, bo wtedy nie tracą miejsca w rankingu, a Allegro jeszcze tego nie ścignęło.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

Tak z ciekawości spojrzałem na CI z JavaScript (nie moja bajka), a tu takie zagnieżdżone WTF:

Kopiuj
getSomeObjects(stateParams) {
     // w starej wersji było tak: return (null != stateParams.filters) ? JSON.parse(decodeURIComponent(stateParams.filters)) : null;
     return (null != stateParams.filters) ? JSON.parse(decodeURIComponent(decodeURIComponent(stateParams.filters))) : null;
}

WTF 1: podwójne decodeURIComponent
WTF 2: połączenie JSon i decodeURIComponent


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Madaoo
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad rok
  • Postów:490
6

Czas na WTFka z C:

Kopiuj
static void freeState(deviceState_t *state)
{
    freeDevicesTags(state->tagsList[0]);
    free(state);
    state->tagsANum = 0;
    state->tagsRNum = 0;
}

"Chodzenie po wodzie i tworzenie oprogramowania wg specyfikacji są łatwe, o ile woda i specyfikacja są zamrożone" - Edward V. Berard
Zobacz pozostałe 3 komentarze
siloam
@Patryk27: ale to dość logiczne skoro usuwa się zmienną z pamięci. Nowoczesne kompilatory powinny sypnąć pięknym błędem. Gdzie tu WTF?
Madaoo
@siloam: jakoś gcc nie sypał przy tym błędem, tylko cppcheck to wykrył ;)
Azarien
@siloam: kompilator ma za zadanie sprawdzać poprawność składni, a nie sensowność kodu jako całości. a składnia jest tu w porządku. free() to po prostu funkcja, a nie jakiś magiczny keyword. w dodatku później na etapie linkowania może się okazać że to wcale nie jest TEN standardowy free, tylko funkcja użytkownika która się tylko tak głupio nazywa… ale fakt, mógłby być tu chociaż warning.
vpiotr
Najgorsze że to nie zawsze sypnie błędem. Czasami, np. raz w miesiącu wyzeruje losowe bajty innego obiektu/struktury w pamięci.
Azarien
Jest spora szansa że nigdy nie sypnie błędem, udając że jest dobrze, aż kod zostanie przerobiony na wielowątkowy, albo gdy gdzieś będzie dodany odczyt tych pól po destrukcji obiektu, a nie tylko ten zapis.
siloam
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
  • Postów:99
0

CORS w Ajax to jedna z największych pomyłek w informatyce zaraz po billion-dollar mistake by O'Hoare'.


hauleth
Czemu? A jak inaczej byś chciał to rozwiązać? Nie jest to rozwiązanie idealne, ale niespecjalnie widzę lepsze.
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 12 godzin
  • Postów:2367
2

Dziś dostałem ekstrakt/eksport danych z "flagowego produktu", zestaw plików CSV, w których separatorem jest , a wartości owinięte są ".

Kopiuj
"val1","","val3","JSON...","valN" 

JSON ma:

Kopiuj
{attr1:"val1",attr2:"val2",attr3:"",...}

Ktoś chyba nie przemyślał funkcjonalności importu takich danych :-)

Zobacz pozostałe 2 komentarze
YA
Nie upieram się co do klasyfikacji, może być i bug, chyba, że go nie poprawią ;-)
stivens
Jak JSON moze byc jsowy? Maslo maslane
LukeJL
JSON wbrew nazwie nie jest do końca kompatybilny z JS.
LukeJL
to powinno się nazywać np. JSION (JavaScript Inspired Object Notation) a nie JavaScript Object Notation
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
8

Okazało się w pewnej aplikacji do robienia joinów w bazach danych został wykorzystany algorytm ....Dijkstry

Edit:
To była aplikacje webowa gdzie szuka się czegoś na podsawie jakiś danych wejściowych i robi się raport. Założmy że mamy start od tabelki A i chcemy wyciągnąć coś z tabeli F tez. Mamy po drodze albo tabele B i C lub D i E. Celem jest znalezienie lepszej drogi do tabeli F. Jest cały graf tabel. Kreatywnośc studentów jest wielka :D


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
Zobacz pozostałe 2 komentarze
cerrato
Bo zakładam, że mimo nietypowego rozwiązania to jednak całość działała i dawała spodziewane rezultaty?
S9
Z tego co wiem tak :P
cerrato
Jak działa to nie ruszać ;)
somekind
Dobrze, że Hindusi nie wiedzą, co to algorytmy, bo też bym takie cuda spotykał.
kate87
Jak nie zarżnie bazy to działa...;-)
Michał Sikora
Michał Sikora
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Kraków
  • Postów:834
6

Tym razem o obsłudze typów logicznych. I tak w każdej funkcji w tym module.

Kopiuj
Boolean jakasFunkcja(Object obj) {
  // Jakiś kod

  if (obj instanceof Long) {
    Long lg = (Long) obj;
    if (lg < 1) {
      return new Boolean(true);
    } else {
      return null;
    }
  }
  
  // Jakiś kod
}

void jakasFunkcja2(Boolean bool) {
  if (bool == null) {
    // coś tam
  } else {
    // coś tam 2
  }
}
Zobacz pozostałe 6 komentarzy
WeiXiao
object oriented programming :D!!! w .nut nazwaliby to dynamic oriented programming i nawet brzmiałoby lekko poważnie :D
superdurszlak
@WeiXiao: bardziej Common Headache Routine albo Workaround Driven Development ;) @LukeJL: noo dobra, tu mnie masz.
WeiXiao
@superdurszlak: ahh Workaround / Hack Driven Development <3 Mój ulubiony
superdurszlak
Oooo to to to, piękne po prostu. Widziałem ostatnio konstrukt w stylu val ref = when(cośtam) { dupa -> Dupa::class; cycki -> Cycki::class; else -> throw TrelemoreleException("coś do logów") }; return ref.primaryConstructor?.newInstance(arg1, arg2, ..., argN). Wspaniałe :D
DE
TrelemoreleException :D
Berylo
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:344
22

Opowiem o ciekawym WTF, ale nie pod kątem złego kodu, a buga jaki mi się kiedyś przytrafił. Z produkcji spłynął opis, że podczas skanowania jakiegoś tam vouchera płatniczego, maszyna im pika - i to jest ok, bo tak ma być, ale czasami pika im kilka razy w losowych odstępach czasu i ilością piknięć. Nie wierzyłem, więc mi testerzy nagrali nawet filmik.

Oczywiście u mnie nie do zrepdoukowania. Przekopałem cały kod związany z pikaniem, aż do samego spodu i nic nie było. W logach pusto więc nasrałem loggerów po całym kodzie gdzie tylko miałem przypuszczenie, że może mieć to coś wspólnego. Wysłałem im snapshota żeby sprawdzili jeszcze raz i wysłali logi. Oczywiście pusto! nic się nie zalogowało z moich linijek (poza jedną testową, którą umieściłem, dla pewności czy dobrze podmienili wersje).

Wiece co się okazało? Do płatności tymi voucherami potrzebny był certyfikat, który zahashowany czy tam encodowany wypisywał się w logach. Zdarzało się, że algorytm kodujący umieszczał tam znak 0x007, który odpowiedzialny jest za system beep! Nie mogłem tego zreprodukować bo odpalałem aplikacje z poziomu IDEE, a oni z jakiś launcherów w cmd. Wystarczyło zmienić poziom logowania i po sprawie. Spędziłem nad tym parę dni.

edytowany 1x, ostatnio: Berylo
Zobacz pozostały 1 komentarz
Sarrus
Rozbawiła mnie Twoja historia. Na prima aprilis weź daj im wersję "do testów", która będzie w losowych momentach wypisywać znak 07 na konsolę niezależnie od skanowania :D.
Berylo
haha dobry pomysł
MarekR22
wystarczyło cat logi.txt i byś zreprodukował błąd :).
WhiteLightning
@MarekR22: zakladajac ze ma sie dostep do systemu, a nie pracujesz przez goscia od klienta majacego role, zdalne, powolne i niepewne proxy :)
MarekR22
@WhiteLightning: nie załapałeś. To był dowcip: jakby logi wypisał w terminalu to by mu beepneło bez uruchamiania czegokolwiek. Tymczasem np Notepad++ nie beepa.
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 11 godzin
  • Postów:1603
6

Niestety nie mogę pokazać kodu, ale…

Mamy kod w Pythonie, w którym jest setter. Jeszcze spoko, chociaż w Pythonie settery są zazwyczaj potrzebne jak krowie hulajnoga. Nazwa i zastosowanie klasy wskazuje na to, że to będzie prosty setter, w stylu def setAlthorion’sSanity(self, sanity): self._sanity = sanity. Ale nie… Ten przyjemniaczek to:

Kopiuj
def setAlthorion’sSanity(self, sanity):
    self._sanity = self.getSomethingElse(sanity, 42)

Czyli tak — mamy settera, który przyjmuje jeden parametr, który się nazywa tak samo jak parametr wewnątrz klasy, ale nie ustawia go bezpośrednio, tylko woła gettera, który przyjmuje dwa parametry, Z CZEGO JEDEN KOMPLETNIE Z KOSMOSU…

A tenże getter, to też niezła sztuka — wywołany bez parametrów, normalnie gettuje co powinien. Ale jak nie, to… jeszcze w sumie nie wiem, co robi. W każdym razie, woła inne funkcje, zależy od stanu rozsianego po całym programie… W każdym razie jeszcze gagatka nie rozgryzłem, a i tak czuję, że coś mi to sanity na False próbuje ustawić…

Zobacz pozostałe 7 komentarzy
Althorion
Główny łotafakiem tutaj jest, w mojej opinii, ten getter. Który robi dwie zupełnie różne rzeczy. A nawet jakby nie robił, to idea gettera z parametrami jest czymś, co mnie przerasta. No, przynajmniej wtedy, gdy nazwa tego nie sugeruje. Bo np. getStateByDate(date) już ma sens.
somekind
No tak, zdecydowanie składnia propertisów jest czytelniejsza. Tylko jak dla mnie, to self.getSomethingElse(sanity, 42) to jest zawołanie metody, która ma prefiks get, a nie gettera, więc chyba czegoś tu nie rozumiem.
Althorion
Obiekt ma też i propery o nazwie SomethingElse. Czyli, powiedzmy, mamy kod def setWidth(self, width): self._width = self.getHeight(width, 42), gdzie klasa ma i self._width, i self._height, a ponadto getHeight() wywołane bez argumentów zwróci właśnie tego self._height. Co w sumie jest nawet dobrą anonimizacją kodu — bo tamte propertiesy są podobne w naturze, ale nie zależą bezpośrednio jedne od drugiego (na podobnej zasadzie, jak szerokość i wysokość to podobne w swej naturze rzeczy, ale jedna nie zależy od drugiej).
Althorion
To wygląda tak, jakby ktoś dopadł pierwszą funkcję, jaką znalazł (getSomethingElse jest na samej górze klasy…) i w niej zawarł logikę, która mu była potrzebna. A jest to logika zaiste niezwykła, w każdym razie ten magic number, który jest przekazywany (u mnie wyżej 42, w oryginalnym kodzie mało charakterystyczny int), ma tylko takie znaczenie, że ma być dodatni/równy zero/ujemny, za to wszystko jedno jaki.
somekind
Brzmi jak pisane przez Hindusów.
Julian_
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Postów:1703
6

title

stivens
Myslalem ze to ta sama wklejka co zawsze, masz szczescie
Sunnydev
wowow co za bullshit :O mam nadzieję, że takie skarbeńki pozostaną tylko i wyłącznie w tym języku ;_;
Julian_
JPA też jest poku***
Riddle
Przecież to ma sens. >= to nie jest > or = tylko not <.
Riddle
Tak samo <= to jest not >.
Marooned
Administrator
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 15 godzin
  • Lokalizacja:Poznań
1

Kończy mi się miejsce na Google, z czego 90% to Gmail. No to wbiłem has:attachment larger:20M i zrzucam na dysk usuwając maile.. Zonk!

Kopiuj
Nietypowe wykorzystanie – konto tymczasowo zablokowane

Twoje konto zostało tymczasowo wyłączone przez Google w trosce o bezpieczeństwo naszych systemów. Dzieje się tak najczęściej po wykryciu zaskakująco dużej aktywności na koncie. W większości przypadków dostęp można odzyskać w ciągu godziny. W rzadkich przypadkach odzyskanie dostępu może zająć maksymalnie 24 godziny.
Oto kilka możliwych przyczyn wyłączenia konta:
1) Odbieranie, usuwanie lub pobieranie w krótkim czasie dużej ilości poczty przy użyciu protokołu POP lub IMAP.

No to może do końca roku się uda...


Zobacz pozostałe 4 komentarze
Freja Draco
Freja Draco
Nie pojmuję, jak można używać poczty przez bramkę www, a jeszcze w takich warunkach :)p
obscurity
@Freja Draco: ale tu chyba właśnie była próba przez IMAP bo na to wskazuje komunikat. @Marooned: to niestety wynik walki z P2M - ludzie wykorzystywali konta mailowe żeby dzielić się plikami, podejrzewam że przez www nie ma tych ogranicze, ew można ściągnąć prawdopodobnie wszystko korzystając z https://support.google.com/accounts/answer/3024190?hl=en
Freja Draco
Freja Draco
@obscurity: No to jeszcze gorzej. Konto pocztowe, które może cię zablokować za to... że go używasz :p
Marooned
@obscurity: ale to było przez www (najlepsza forma korzystania z Gmaila)
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:2 dni
  • Postów:3168
0

Po walce z trzema monitorami mam Minta zamiast Debiana.

Pierwszy WTF:

Z grubsza toto dziala ale trzeba wszystkie monitory wlaczyc przy starcie systemu bo inaczej sie synchronizacja rozjezdza, do tego nie moge miec zadnego z nich przelaczonego na stacjonarke.

Jak wylacze srodkowy monitor w czasie pracy to potem wszystko glupieje i trzeba rebootowac.

Drugi:

Dzisiaj chcialem dodac zegarek na pozostalych monitorach poza glownym. I znalezienie jak sie aplet nazywa bylo nietrywialne, probowalem wszelkie clock, time itp. A aplet jak sama nazwa wskazuje to "calendar" :)

Zobacz pozostałe 2 komentarze
aurel
Ludzie pytają mnie czasem, czemu wolę tego strasznego Windowsa xD
WhiteLightning
@aurel: na strasnzym Windowsie akurat ta funkcjonalnosc dzial ladnie. Za to wliczajac czas na Windows updaty , to nawet z tymio rebootami na Linuxie jest szybciej.
aurel
@WhiteLightning: nie odczuwa tego problemu - po prostu ustawiam aktualizację tak, by odpalała się gdy śpię.
somedev
Też miałem problemy z monitorami na Debianie. Za cholerą to działało losowo. Raz dobrze przełączało, raz nie. Pracuje na lapku w setach 1 - sam lapek, 2 - lapek z TV, 3 - lapek z 1 monitorem, 4 - lapek z 3 monitorami. Za każdym podłączeniem do stacji dokującej Windows rozpoznaje jaki to set i ustawia pozycje ekranów względem siebie, główny ekran, orientacje pion/poziom i rozdzielczość. W linuxie trzeba by zamiast pracować pisać skrypty co to wykrywają i je utrzymywać, przy każdej aktualizacji jądra :P
WhiteLightning
Laptop dzialal przez jakis czas w trybie standalone, cyzli poza stacja dokujaca. Dzisiaj praca zdalna, wiec przynosze na gore, podpinam do stacji i d.. dodatkowe monitory nie dzialaja. Po 40 minutach zabawy znalazlem ze system sobie zrobil jakis lewy konfig do xorga. Po usunieciu dziala. Za to na Windowsie po miesiacu przerwy przez podobny czas nie dalo sie pracowac (updaty).
grski
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 miesięcy
  • Postów:245
1

Bądź mną. Nowy lapek. Domyślnie oczywiście z windowsem. Filthy Casual.
Reinstall na ubuntu z budgie, bo taki ładny. Procesor grzeje się niesamowicie - 80* na idlu, nie wiadomo czemu. Może kwestia teog, że to community edition ubuntu jakiś, spróbujmy z oficjalnym.
Reinstall na ubuntu normalnego. Grzeje się w dalszym ciągu. Próbuję konfigurować chłodzenie. Żaden z dostępnych programów ootb nie działa. Próbuję pisać własny config do kontrolera wiatraczka - kontroler nie obsługiwany przez kernel - nawet go nie widzi, ale ubuntu to przecież starocie, nie tracę nadziei - reinstall na Manjaro Rolling Release z najnowszym możliwym jądrem. To samo.
Poddaj się po kilkunastu h batalii. Windows my old friend.
Po kilku miesiącach powrót - nowy kernel, który podobno wspiera. Goodbye Microsoft, now Linus is my friend again.
Reinstall na manjaro. Żaden domyślny program do kontroli nie działa. Spróbuj znowu napisać własny config. Nie działa config rekomendowany przez program, ale coś już przynajmniej wykrywa! Kilka h później - udało się.
Pojawia się problem - touchpad nie działa. Znany mi od zawsze mankament - szybka instalacja jednej paczki i gotowe.
Pojawia się problem - część obrazów Dockera przestała mi się budować, bo tak i koniec. Wpadam w rozpacz.
Okazuje się, że to wina nowego kernela i prawdopodobnie czeka mnie downgrade tegożże, czyli grzanie się laptopa, czyli powrót do Windowsa.
Próbuję tego uniknąć za wszelką cenę.
Jednak udało się znaleźć rozwiązanie - echo N | sudo tee /sys/module/overlay/parameters/metacopy w konsoli i działa. To takie oczywiste, prawda?

I love Linux either way.


Napisałem książkę - Programowanie z Górskim: Junior Python Developer
Pora na następny krok na drodze po pierwszą pracę w it i WCALE-NIE-MITYCZNE #programista40k? Zapraszam.
Zobacz pozostałe 7 komentarzy
jarekr000000
@vpiotr najlepszy spopsób współdzielenia to git. Bazy in mem albo flywayem wszysyko wrzucane, żadnych durnych application serwerów i jest ok.
WhiteLightning
@jarekr000000: pytanie o vmki -> na jakim procku i na ile plynnie Ci chodza. Zastanawiam sie co trzeba miec zeby odpalic np. Ubuntu z X'ami i dzialalo to plynnie jako wirtualka ?
jarekr000000
U mnie na i7 chodzi raczej płynnie. W ubuntu deskop 3d compiz wszystkie możliwe rozpraszacze poinstalowane.
WhiteLightning
@jarekr000000: a ktory i7 ? Bo to tez robi roznice, ja mam 3 generacje i tam jest "tak se"
jarekr000000
Technicznie to mam tak z 4 własne komputery z i7 więc przekrój generacji. Do tego dochodzą firmowe... koszmar. Ale z vmkami problemu nie mam od tych najstarszych i7. IMO RAM i szybki ssd robi różnicę. (np. teraz siedze na i76820HK - jest git :-) ).
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
10

Takie tam z dzisiaj:

Kopiuj
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC")); // 2018-12-31T08:46:01.307Z[UTC]
String formatted = now.format(DateTimeFormatter.ofPattern("YYYY/MM/dd"));// 2019/12/31

Więc sformatowanie daty 2018-12-31 daje nam... 2019-12-31!
Java cannot into dates...
Wyjaśnienie: https://stackoverflow.com/questions/8686331/y-returns-2012-while-y-returns-2011-in-simpledateformat


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 3 komentarze
Koziołek
Chciało, by się rzec, że suchar, ale to jedna z tych rzeczy, które potrafią ugryźć w dupę pomimo napisania testów.
DE
W PHP przynajmniej taki rok ma symbol "o", to się człowiek nie pomyli, bo nikt normalny na to nie wpadnie :D
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Kraków
  • Postów:1999
5

W sumie to "problem" istnieje od jakiegoś czasu i po części sam przyłożyłem doń palec przeczuwając, do czego to może doprowadzić i nie odkręcając tego, ale dzisiaj jakoś rzuciło mi się w oczy to...

Kopiuj
let data = response.data.data.data.data;

Skąd się to wzięło?

W skutek różnych takich zaszłości, naleciałości, połowicznie wykonanych poprawek, UI Driven Developmentu, sporej dysproporcji w liczbie devów robiących frontend i backend (odpowiednio 4 do 1, a później przez dłuższy czas 5 do 2 - w tej dwójce stażysta programista czyli ja) i godzenia tych poprawek z nowymi ficzerami "udało" nam się dobrnąć do takiej sytuacji:

  • JSON z danymi zwracanymi przez API owiniętymi we wprowadzony jakiś czas temu uwspólniony format znajduje jest w polu data odpowiedzi
  • ten nasz uwspólniony format w zależności od rezultatu trzyma informacje od błędzie (jako error) lub dane (jako data). Mógł to być jakiś payload, no ale ktoś stwierdził, że jak to są dane to powinno być data no i zostało.
  • Stare wrappery na dane, które miały "ułatwić" pracę na froncie (kilka rodzajów w zależności od tego, co im tam było wygodniej otrzymać) też mają pole data, gdzie trzymają jakieś dane w konkretnym formacie. Stare wrappery zostały, bo i po co robić większe zmiany na froncie (wywalanie ich obsługi + dodanie nowej z obsługą błędów) jeśli można było zrobić mniejsze (owinięcie obsługi starych w nowe z obsługą błędów).
  • jakoś tak wyszło, że któreś DTO z jakiegoś powodu również dostało pole data w którym coś siedzi...

Trzeba się przyczaić, aż ktoś znowu będzie wytrzeszczał oczy na ten łańcuszek i pogadać o refaktoringu ¯\_(ツ)_/¯


edytowany 1x, ostatnio: superdurszlak
KL
Taki trochę Batman ;)
somekind
A wystarczy raz dać result, raz response i już by lepiej wyglądało. Albo podejść do sprawy po męsku i wywalić frontend.
superdurszlak
@somekind coś tam przebąkiwałem, żeby chociaż jakoś inaczej to ponazywać, ale jaki może być autorytet stażysty :D
jarekr000000
Nie ma zaskoczenia: DTO czyli data transfer object.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:2 dni
  • Postów:3168
1

Jak prawie polozyc sobie system? (Mint) wystarczy sprobowac skopiowac katalog z nie do konca sprawnego pendriva. Co wyczerpalo mi miejsce na dysku. Ciekawi mnie czy ma to jakis potencjal odnosnie buga/security buga.

Kopiuj
ja@szarik:/var/log$ ls -alh | grep G
total 26G
-rw-r-----   1 syslog            adm              13G Jan  9 15:01 kern.log
-rw-r-----   1 syslog            adm              13G Jan  9 15:08 syslog

a wszystko to takie wpisy: 

ja@szarik:/var/log$ tail -n 10 syslog
Jan  9 15:01:22 szarik kernel: [15687.107271] FAT-fs (sdc1): error, fat_bmap_cluster: request beyond EOF (i_pos 10826514)
Jan  9 15:01:22 szarik kernel: [15687.107273] FAT-fs (sdc1): error, fat_bmap_cluster: request beyond EOF (i_pos 10826514)
Jan  9 15:01:22 szarik kernel: [15687.107276] FAT-fs (sdc1): error, fat_bmap_cluster: request beyond EOF (i_pos 10826514)
Zobacz pozostałe 2 komentarze
WhiteLightning
@alagner: niby tak, ale jak masz 30 GB wolnego, zgrywasz sobie rzeczy z kilku malych penow i dostajesz out of disc space to mozna sie zdziwic :)
AL
pytanie czy logrotate defaultowo był włączony. I czy działał dobrze, bo np. na CentOSie to wcale nie jest oczywiste.
cerrato
w sumie to sam też mam Minta na kilku maszynach, ale nigdzie nie zauważyłem problemów z logami. Zaraz sprawdzę, jak to wygląda u mnie.
cerrato
no i sprawdziłem. Same maleństwa, nie ma powodów do paniki ;)
WhiteLightning
Bo caly czas to dzialalo normalnie: kluczowa byla proba zgrywania zawartosci z zepsutego pena. I to mi zapelnilo ok 30 GB w jakies pol godziny albo szybciej.
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:607
20

screenshot-20190112135603.png
W sumie racja, zapomniałem

Zobacz pozostałe 2 komentarze
Azarien
Widziałem bzdurną walidację w drugą stronę: że koniecznie trzeba podać ulicę. Ktoś zapomniał że wiele wiosek nie ma nazwanych ulic...
Sarrus
@Azarien: wtedy się wpisuje nazwę wioski w miejsce nazwy ulicy
Azarien
@Sarrus: brzydki workaround :-)
jarekr000000
E tam. Pisze się ulica Główna, albo nawet Gówna, jak się chce pośmieszkować.
Azarien
@jarekr000000: a to już nawet nie workaround tylko hack :P
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
4

wklejam 15 linijek z logów podczas rebase w bitbucket, SEND a tu coś takiego:
screenshot-20190117114333.png

z tego co pamiętam normalny skype nie ma takich ograniczeń.
A jak już jest takie głupie ograniczenie, to niech UI pokazuje interaktywnie jaki jest ten limit, żebym nie musiał zgadywać.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
Zobacz pozostałe 4 komentarze
axelbest
@OverMorda: wiem ze MS Teams już jest, bo korzystam od ponad roku, może źle się wyraziłem. Nie będzie już skype for business, jego rolę przejmie MS Teams. I chwała za to, bo nie lubię mieć dwóch aplikacji odpalanych jedocześnie, które pełnią tą samą rolę i są na dodatek od tej samej firmy..
Ktos
Skype for Business to jest Lync, tylko ze zmienioną nazwą ;)
SO
@axelbest: tylko MS Teams jeszcze nie oferuje wszystkiego tego co S4B, więc nie wiem kiedy to wyłączenie S4B nastąpi. Według mnie nie szybko.
axelbest
Oczywiście, uważam też, że MS Teams to taki ciutkę niedorozwinięty brat slacka :)
obscurity
nie wiem czy tak jest wszędzie, ale u nas w firmie działa po wysłaniu krótkiej wiadomości. zazwyczaj wysyłamy kropkę "." i wtedy możemy wklejać dowolnie długą wiadomość. z jakiegoś powodu wysłanie krótkiej wiadomości wyłącza limit długości na parę minut
FI
FI
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:471
6

rest endpoin,t kod z koncowki 2018, normalny jsonowy content, payload w kontrolerze lapany w strumien -> pozniej w stringa -> pozniej w json buildera -> do obiektu. -> job secured

edytowany 2x, ostatnio: filemonczyk
LP
  • Rejestracja:około 7 lat
  • Ostatnio:około miesiąc
  • Postów:365
3

Informacja z wczoraj:

https://youtrack.jetbrains.com/issue/KT-28061

Kopiuj
fun foo(x: Any?): String {
    x?.equals(return "")
    // No error about missing return
}

Due to the compiler bug in diagnostic about "missing return", this code compiles fine. On runtime, if x == null, default value is returned (null for reference types).
Looks like it hasn't ever been reported (probably due to the highly weird code).

//Edit: Dla osób które nie programują w kotlinie: fun foo(x: Any?): String oznacza że wartość którą zwracamy nie może być nullem.

edytowany 1x, ostatnio: lubie_programowac
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
2

screenshot-20190130173721.png
https://stackoverflow.com/q/54444956/1387438

4 lata doświadczenia i zadawać takie pytanie na SO.

Żeby było jasne pierwotnie nie było nic o interview


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
Zobacz pozostałe 80 komentarzy
LukeJL
@Mikan zanim było SO, się wyszukiwało na grupach dyskusyjnych i dokładnie taka sama zasada była (w zasadzie sam do tego doszedłem, że jak czegokolwiek nie wiedziałem, to wyszukałem w necie przez Deja i mi znajdywało odpowiedzi, bo na 99% ktoś już miał taki problem jak ja).
LukeJL
@WeiXiao Z drugiej strony faktycznie, jak się coś robi w bleeding technology edge'u albo używa niszowych technologii, to jest problem (ale jest rozwiązanie - używać rzeczy popularnych)
vpiotr
Na SO opłaca się zadawać pytania też z technologii naszych dziadków - w miarę szybko odpowiadają, można pytać o banały i nie ma sugestii że to duplikat po 5 minutach od dodania pytania.
WeiXiao
@LukeJL: powiem tyle: zwykli ludzie - https://i.imgur.com/AZf0c1Y.png programiści - https://i.imgur.com/AZf0c1Y.png programiści testujący bleeding edge i wersje preview / experimental - https://i.imgur.com/ENSDZWr.png
Aryman1983
Aryman1983
@WeiXiao: hehe :-) Tutaj pełna zgoda :-)
OtoKamil
  • Rejestracja:około 10 lat
  • Ostatnio:około rok
  • Postów:143
2

Dane kupione przez klienta warte kupe kasy (praktycznie jedyny dostawca na rynku):

  • Dostaliśmy od dostawcy listę wszystkich możliwych kategorii - UPS, jednej się zapomniało. Szkoda, że kilku godzinny batch poszedł się walić i trzeba było od nowa to puszczać. No ale ok, zdarza się...
  • 700k elementowa lista miała 4 wyjątki - UPS, poprawicie sobie w kodzie co nie?
  • Pierwsza paczka zawierała za mało danych, druga paczka miała zawierać kompletną listę danych - UPS, okazało się że paczka zawierająca mniejszą ilość danych zawiera dane, których częściowo nie ma w drugiej paczce
  • Dokumentacja mówi, że lista zawiera unikalne ID jeśli kiedyś będziemy aktualizować dane - UPS unikalne ID powtarzają się na liście dla kompletnie różnych od siebie elementów
  • Jak wyglądało ID? Losowe znaki + cyfra np. OEUANA-0912368912 - UPS kilkaset ID wyglądających tak: OEUANA-null
  • Część wyników miała nazwę zawierającą informacje o zbanowaniu ze względu na zbyt dużą ilość requestów wysyłanych crawlerem przez dostawcę
  • Dane posiadały lokalizację pewnych miejsc, np. na środku oceanu
  • CSV w polu listy CSV [magic]. Czasem przecinkiem, czasem pipem ogólnie dało się coś z tym zrobić. ALE byłoby ok gdyby nie było kilkuset elementów elementów, których pola (CSV w CSV) oddzielili SPACJAMI
edytowany 1x, ostatnio: OtoKamil
AF
Standard. Często dane są, ale tak niskiej jakości, że nie da się ich używać.
cerrato
Tak z ciekawości - co oznacza "kupa kasy", jak nie wiesz dokładnie to podaj chociaż rząd wielkości. Po drugie - polski czy zagraniczny dostawca? Po trzecie - jakiego typu to były dane? A co do "na środku oceanu" - wcale nie musiał to być błąd, zależy właśnie od tego, co masz do powiedzenia w zakresie odpowiedzi na poprzednie pytanie ;)
danek
środek oceanu brzmi jak punkt 0,0
LukeJL
albo miejsce spoczywania jakiegoś wielkiego skarbu, np. wraku pirackiego statku pełnego złota.
YA
W danych GIS trzeba brać poprawkę na użyty układ, bo jak współrzędne są zgodne z A, to interpretacja w B (bez odpowiedniej konwersji) pokaże głupoty. Być może dostawca wciągał jak leci z różnych źródeł i nie uspójnił tego ;-)
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Poznań
  • Postów:8753
6

Może nie do końca programistyczne, ale na pewno zawinione przez programistów.

Kupiłem drukarkę etykiet Brother QL-820NWB. Ma kilka możliwości podłączenia - przez LAN, USB, WiFi, Blutut, z czego ja potrzebuję jedynie LAN.

Drukarka posiada ekranik i menu z konfiguracją. Można tam wiele rzeczy zmienić, m.in. ustawienia WiFi czy Bt.** ALE NIE MA opcji zmiany adresu IP...**

Zaglądam do instrukcji i czytam, że żeby zmienić LAN IP trzeba "zainstalować sterownik drukarki oraz narzędzia do konfiguracji ustawień drukarki"... LITOŚCI.

Na szczęście sprawdziłem sobie w logach DHCP jaki IP został przydzielony (dobre chociaż to, że dynamiczne pobieranie działało bez dodatkowej magii, nie wpadli na równie genialny pomysł blokady LAN do czasu włączenia tego w ustawieniach), a potem przez WWW wbiłem na urządzenie i sobie zmieniłem adres na taki, jaki chciałem. Ale i tak niesmak pozostał. Coś, co mogłem zrobić w dosłownie minutę i przy użyciu kilku kliknięć zajęło mi z 15 minut i chwilę kombinowania...

screenshot-20190205114954.png

EDIT
Podczas próby wydruku wyskoczył błąd dot. nieprawidłowego typu zainstalowanej rolki, po czym coś wcisnąłem, etykietka się wysunęła na ok. 2cm (pusta, żadnego nadruku), ekran zgasł i drukarka nie żyje... Fajny początek, nie ma co...
.
.
.
EDIT 2
Nie wiadomo o co drukarce chodziło, ale po kilku minutach bez pradu, po ponownym podpięciu zasilacza się uruchomiła... Ale żeby nie było za łatwo - pół godziny starałem się coś wydrukować. Mamy kilka takich drukarek (poprzednich modeli - ten jest na podmiankę innej, która się popsuła), więc wiem jak się z tym ustrojstwem obchodzić. Mimo tego przez pół godziny nie byłem w stanie niczego wydrukować - cały czas ten sam komunikat o błędnym typie wsadzonej rolki (na szczęście tym razem nie zakończony zgonem urządzenia). Ponieważ, jak napisałem przed chwilą, mam kilka takich w firmie, wsadziłem inną rolkę i druk poszedł od ręki. Czyli na oryginalnej taśmie dostarczonej razem z drukarką nie chciało się drukować, ale po wsadzeniu zamiennika z allegro (w cenie 1/3 oryginału) wszystko jest OK... Naprawdę, ręce opadają.


edytowany 2x, ostatnio: cerrato
Zobacz pozostałe 8 komentarzy
vpiotr
Nie lepiej bylo zamowic jakas polska drukarke?
Azarien
szanujący się router powinien mieć rezerwację IP po MAC - czyli używasz DHCP, ale masz pewność że adres się nie zmieni. czyli w praktyce: adresy ustawiasz na routerze, nie na urządzeniach. i przy okazji masz zawsze aktualną tabelkę adresów bez konfliktów i bez biegania.
cerrato
Oczywiście, wiem że routery mają opcję (chyba nie tylko te szanujące się, ale praktycznie każde) statycznych przypisań, ale jakoś nie lubię z tego korzystać ;) Kumpel w firmie zawsze ze mnie polewa i mnie od dinozaurów wyzywa, ale ja wolę ręcznie ustawić IP na danym urządzeniu. Nie pytaj dlaczego.. po prostu tak wolę ;)
Azarien
Ne każdy router, miałem taki który tego ne miał, co było irytujące.
cerrato
dlatego napisałem "praktycznie każdy"
hzmzp
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 14 godzin
  • Postów:619
0
Kopiuj
user@pc:~/Documents/workspace/project/frontend/src/main/webpack$ npm i vue-base64-file-upload
npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t https://github.com/robson3999/vue-base64-file-upload.git
npm ERR! 
npm ERR! remote: Invalid username or password.
npm ERR! fatal: Authentication failed for 'https://github.com/robson3999/vue-base64-file-upload.git/'
npm ERR! 
npm ERR! exited with error code: 128

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/user/.npm/_logs/2019-02-07T12_46_40_230Z-debug.log

Jakiś pajac znowu repo rozpadł... Najgorsze że nie ogarniam jak to działa...

edytowany 1x, ostatnio: hzmzp
Zobacz pozostały 1 komentarz
MarekR22
mi to wygląda na to, że do projektu dołączono jakieś dziwne repo, które jest teraz prywatne, albo jeszcze gorzej kolega podał hasło do swojego konta na github podłączył swoje repo, a teraz zmienił hasło do konta github.
hzmzp
Sam się nie znam, więc nie wiem jak to naprawić, obecnie ręcznie kopiuje (z innego kompa) brakujący katalog do node_modules... A jak to naprawić to jak będę miał czas się zajmę...
kzkzg
Konto zablokowane a jednak pisać może. Magia :)
Marooned
Wywaliłem jej komentarz. Pewnie zaspamowała forum i jakiś mod ją wyciął, a ślady pozostały.
DE
  • Rejestracja:ponad 9 lat
  • Ostatnio:10 miesięcy
  • Postów:1788
5

Trochę WTF, a trochę chcę się pożalić. Otóż jestem po kolokwium z podstaw programowania. Myślałem, że dostanę 100% z zamkniętymi oczami. Niestety nie. W zadaniu chodziło o to, że mając kod (naszpikowany minami i pułapkami, który swoją drogą został chyba napisany przez pijanego juniora) trzeba powiedzieć, co zostanie wypisane na ekranie. Zgubiła mnie ta linijka:

Kopiuj
System.out.println('\n' + fun(8, 3));

// ...
static int fun(int x, int y) {
    if (x < 3)
        return 0;
    System.out.println(fun(x - y, y - 1));
    return y;
}

Jak myślicie, co wypisze powyższy kod? Myślałem, że:

Kopiuj
0
1
2

3

Niestety nie, bo Profesor oczekiwał, że każdy ze studentów zna tablicę ASCII na pamięć. '\n', to 10, a 10 + 3, to 13 :) Dobrze, że jestem bogatszy o tę wiedzę, przyda mi się w pon w pracy :D

edytowany 3x, ostatnio: Desu
Zobacz pozostałe 9 komentarzy
Marooned
Regułka brzmi: w bierniku tę, w narzędniku tą. Jesteś bogatszy o tę wiedzę, gardzisz tą wiedzą. Dla ułatwienia ~90% (na oko :P) przypadków jest taka sama końcówka: tę wiedzę, tą wiedzą. Zwykła odmiana przez przypadki zaimka wskazującego ta. Pozdro 600 PS, niech Cię nie zmyli przymiotnik typu lubię tĘ pięknĄ książkĘ, patrzymy oczywiście na "książkę" ;)
DE
Marooned
Dzięki, dzięki, a post nadal nie poprawiony :P :P
PK
Wszystko spoko, tylko jedna poprawka: ta wiedza ci się nie przyda w pracy.
DE
Nie do końca ;) Są ludzie przywiązujący duża wagę do takich rzeczy. W biznesie to, jak jesteś postrzegany ma bardzo duże znaczenie.
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:607
0

Gdzie jak gdzie, ale w standardowej libce C++ (libstdc++) nie spodziewałem się mieszania tabów ze spacjami :)
screenshot-20190211224513.png

Przykład: https://github.com/gcc-mirror/gcc/blob/a4c655fb498c86c00d6ce4c1ce859f8bf1d39c2b/libstdc%2B%2B-v3/include/std/variant#L388
W takim projekcie nie mieć podpiętego clang-formata, to dla mnie mały WTF

Zobacz pozostałe 3 komentarze
hauleth
@alagner: nie wygląda na to, bo np. Vim ma możliwość ustalenia osobno shiftwidth oraz tabspace, które (przy ustawionym noexpandtab) dadzą miks tabów i spacji w postaci shiftwidth spacji, ale jeśli sumarycznie dodają się do tabspace to zostaną połączone w taba. Strasznie to skomplikowane i nie wiem czy jakiś projekt tego używa, ale się da.
stryku
@alagner: kurde, myślałem, że trolujesz :) Patrząc w źródła, wyraźnie widać, że każdy formatuje tam sobie kod, jak chce. Dodatkowo, nie widziałem nigdzie .clang-format, więc zakładam, że nie mają podpiętego formattera. Nawet jeżeli istnieje na świecie jakaś konwencja mieszania tabów i spacji, i polega ona na tym, że dziesiątki tysięcy ludzi (patrz kernel) mają ustawioną taką samą szerokość taba, to ja chcę żyć od takiej konwencji jak najdalej ^^ @MarekR22 +1
vpiotr
Jest taka tabulacja ktora dziala w kazdym edytorze. Ma kod 0x20.
AL
@stryku ok, trzymaj się z dala od kernela Linuxa, ale nie troluję. ;)
stryku
@vpiotr: złapałeś mnie.
Aventus
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
1

LinkedIn jak zawsze w formie. Przyzwyczaiłem się do niedziałających przycisków na panelu nawigacji, ale to coś nowego.

screenshot-20190216230416.png


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
superdurszlak
niedawno niemal cały UI im się równo sypał, miałem nawet im zgłosić - ale tak skutecznie zaszyli formularz kontaktowy, że mi się odechciało. Skoro pchają babole na produkcję, niech się sami męczą z ich łapaniem :)
Marooned
A już dobrze kodują polskie znaki przy eksporcie resume do pdf? Bo zgłaszałem im to ~3 lata temu ;-)
Haskell
  • Rejestracja:ponad 9 lat
  • Ostatnio:10 miesięcy
  • Postów:4700
5

Przez błąd w systemie jeden z użytkowników miał kilkaset kont w systemie. Na szczęście po kilku godzinach udało się rozwiązać problem, a jedna z zaangażowanych osób ogłosiła: "Cały proces przebiegł poprawnie". Niestety jako nieoczekiwany skutek uboczny użytkownik otrzymał około 1000 identycznych wiadomości, po dwie na każde zlikwidowane konto :D


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:2 dni
  • Postów:3168
1

Zachcialo mi sie zupdatowac Jave do 11. Momentalnie czesc softu przestala dzialac. Przy czym jmeter robi to w fajnym stylu (na szczescie wystarczy jednego exita w launcherze zakomentowac.

Druga fajna rzecz to ze java 11 przy java -version wyswietla sie jako Java 10 :)

Shalom
A jesteś pewny ze nie masz innej Javy 10 zainstalowanej czasem? ;)
WhiteLightning
@Shalom: tak. Moge wyswietlic wersje bezposrednio z: /usr/lib/jvm/java-11-openjdk-amd64/bin/java wiedzialem ze taki kwiatek jest na Ubuntu a tu sie okazuje ze na Mincie tez. Tutaj link co to za magia: https://askubuntu.com/questions/1037646/why-is-openjdk-10-packaged-as-openjdk-11
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)