•  

    pokaż komentarz

    Informacja nieprawdziwa: nie ma czegoś takiego jak niewinne wyrażenie regularne

    pokaż spoiler ( ͡º ͜ʖ͡º)

    •  

      pokaż komentarz

      @dex4er: Literalnie to samo miałem napisać!!! Nieładnie tak czytać myśli bez pozwolenia :-P

    •  

      pokaż komentarz

      @dex4er: Amerykański programista, Jamie Zawinski, napisał kiedyś słynne słowa o wyrażeniach regularnych: “Niektórzy ludzie, gdy napotykają na problem, myślą sobie: »Wiem! Użyję wyrażeń regularnych«. I teraz mają dwa problemy”.

    •  

      pokaż komentarz

      @sekurak: To zagadnienie bardziej ogólne. Używanie na produkcji kodu nieprzetestowanego albo przetestowanego słabo, w krytycznej infrastrukturze, gdy tylko pobieżnie znane jest jego działanie w ścieżce optymistycznej jest słabym pomysłem.

      Tu było złożenie regexpa, WAF, obejścia procedur lub ich braki (testów obciążeniowych). Musiały zajść wszystkie 3 czynniki... i zaszły.
      ( ͡° ͜ʖ ͡° )つ──☆*:・゚

    •  

      pokaż komentarz

      @sekurak: inni za to myślą sobie, mam problem, fajnie byłoby użyć wyrażenie regularne ale nie umiem więc zamiast jednej linii kodu napisze parser na trzysta linii.

    •  

      pokaż komentarz

      @MiKeyCo: Ale "Marketink" kazał to dostarczyć szybko, bo klient czeka. A i powiedział że nie testujmy, bo nas te całe "testy" tylko w koszta wpędzają ( ͡° ͜ʖ ͡°)

    •  

      pokaż komentarz

      Musiały zajść wszystkie 3 czynniki... i zaszły.

      @MiKeyCo:

      Aż dziwne, że tylko trzy. Takie "combos" to chleb powszedni wśród kierowców:

      - rozmawiał przez telefon
      - dziecko z tyłu płakało
      - jechał szybko
      - padał deszcz
      - łyse opony
      - koleiny (zebrała się woda = aquaplaning)
      - z naprzeciwka sznur aut
      - któryś z powyższych miał źle ustawione światła i oślepiał
      - wyjechało mu z podporządkowanej

      --> nie zauważył --> nie odbił --> wjechał w drzwi kierowcy --> trup.

      Wystarczyłby zmieniony jeden parametr, a byłoby wszystko OK. Np:
      - nie pada = brak wody w koleinie = możliwość zahamowania
      - brak koleiny = brak aquaplaningu = możliwość zahamowania
      - lepsze opony = j.w.
      - brak ruchu z naprzeciwka = możliwość odbicia
      - dobrze ustawione światła kogoś z naprzeciwka = brak oślepiania = możliwość zauważenia tego z podporządkowanej
      - mniejsza prędkość = cośtam cośtam
      - ten z podporządkowanej nie wyjeżdża = brak zagrożenia w ogóle
      itp, itd.

    •  

      pokaż komentarz

      Ale "Marketink" kazał to dostarczyć szybko, bo klient czeka.

      @pluszowy_zergling:

      Nie marketing, ale prezes i księgowa. Żebyś w piwnicach nie było płaczków, że nie ma wypłaty. ;-)

    •  

      pokaż komentarz

      A i powiedział że nie testujmy, bo nas te całe "testy" tylko w koszta wpędzają ( ͡° ͜ʖ ͡°)

      @pluszowy_zergling: Można było testować same wyrażenia, jest chociażby https://github.com/ConradIrwin/rxxr2 czy też inne, które pokazują przebiegi. Do tego można przecież mieć bazę testowych wartości i przepuścić przez wyrażenie, nie trzeba super-hiper testów na dev, staging, manualnych itd.

    •  

      pokaż komentarz

      Używanie na produkcji kodu nieprzetestowanego albo przetestowanego słabo

      @MiKeyCo: czlowieku, nawet nie wiesz jak pracuja teraz testerzy...To pokolenie 90+ to juz w ogole porazka. Ludzie ktorym musisz powiedziec co maja testowac, jak, a juz o eksploracyjnych to zapomnij. Miesiac temu mialem takiego debla ze dzien pozniej musialem powiedziec mu w inteligentny sposob, ze "klient robi ramp down" ;) Gosc z kilkuletnim doswiadczeniem i chwalacy sie "Pajtonem i Baszem" nie potrafil uzyc if-a w Bashu oraz zaimportowac moduly w Pytongu, a zapytani o estymacje taska zaczal mi jebny pyskowac i odpowiadac pytaniem na pytanie.
      Aha, zboczylem z tematu, tak, niestety takich coraz wiecej, a wolaja juz po 8 netto jako junior.

    •  

      pokaż komentarz

      @JohnVanClouds: mam budżet od klientów. Biorę leadow ale trzeba uzupełniać też i juniorami. Z leadami rozmowa to często ponad godzina, a z juniorami to z chęcią zakończyłem po 3-5 minutach, bo oni sami nie wiedzą dokładnie po co przyszli na tą rozmowę - może mama kazała...?

    •  

      pokaż komentarz

      @kotimwbuta: u nas juniora zatrudnialismy to ostra selekcja cv i juz 70%odpadlo. Pozniej zadanka w firmie na logiczne myslenie + na sprawdzenie sql i multithreadingu. Jak opowiadal dlaczego tak a nie inaczej to juz wiesz czy logicznie mysli. Tutaj znowu 80% to porazka. Z ok 20 kandydatow z 2 poziomu rekrutacji wylowilismy 3 z czego jeden odpadl bo mial nie wiadomo jakie ego i nawet z tego co slyszalem nie chcial podac jaka kwota go interesuje - wsumie najgorszy z 3. Drugi niestety z powodu wymuszonej zatrudnieniem przeprowadzki dostal spory -, ale to juz nie moja decyzja.

    •  

      pokaż komentarz

      @JohnVanClouds: natomiast jak ja widze kogos ze spinnerem czy innym g-nem w reku, to nawet przed spotkaniem go skreslam. Nie zartuje, niewazne jaka wiedze ma gosc, to skreslony na dzien dobry. Tak samo jak widze "ptysia" z fotkami z fejsunia na tle piramidy czy innego "London-place" to to siema.
      Aha, wiesz kogo ostatnio preferuje ? Zjebow i psycholi, ale pod wzgledem podejscia do tematu, rozwiazan itd. Jak ja sie k-wa cudownie czulem w takim zespole...Trzeba ich kontrolowac z estymatami, ale jak sie znajdzie grupka takich 3-4 osob, to zaczynaja sie napedzac sami nawzajem, ale dla uspokojenia sie daje im dwa dni pracy z domu w tygodniu zeby sie nie pozabijali w biurze :)
      Sprobuj sobie stworzyc kiedys taki zespol i daj znac co wyszlo :)

  •  

    pokaż komentarz

    z regex kojarzy mi się tylko jedno:

    . . . kliknij, aby rozwinąć obrazek . . .

    źródło: regex.JPG

  •  

    pokaż komentarz

    Ciekawe jakie finansowe straty spowodowała ta indolencja programisty?

  •  

    pokaż komentarz

    Plus: Zna wyrażenia regularne
    Minut: Nie umie z nich korzystać

  •  

    pokaż komentarz

    Artykuł jest kierowany do osób wiedzących cokolwiek w temacie, czy ktoś mógłby wytłumaczyć laikowi o co chodzi?

    •  

      pokaż komentarz

      @tom001: Za szybkie wdrożenie, bez odpowiedniej ilości testów.

    •  

      pokaż komentarz

      @tom001: też jestem ciekawy co to jest wyrażenie regularne i dlaczego to takie złe. Tak po chłopsku ;)

    •  

      pokaż komentarz

      @mbbb: to tylko podsumowanie, a da się wyjaśnić noob'om o co chodzi z tymi problemami z wyrażeniem regularnym?

    •  

      pokaż komentarz

      @tom001: @johntucker:
      W sporym skrócie wyrażenia regularne służą do szukania wzorów w ciągach tekstowych. Np. /\D{2}\d{3}-\D{2}\d{3}/ akceptuje wszystkie ciągi tego typu: AB123-CD456, EF231-ZG213, TY631-HY321. W takich wyrażeniach możemy też wstawić [opcja1|opcja2] tworzące "lub", ? - zero lub jedno wystąpienie, * - zero lub więcej wystąpień, a+ - a... lub aa... lub aaa....

      Dość łatwo jest znaleźć regułę która dobrze wychwytuje nasz ciąg. Problem polega na tym, że możemy nie być świadomi, że ta reguła przetwarzana przez serwer wykonuje tysiące niepotrzebnych kroków, bo zawiera duże jest napisana niewydajnie - np. przez to, że zawiera za dużo lub, i i jeśli.

      I tak właśnie było z .(?:.=.*) które jest wspomniane w artykule, wyrażenie wychwytało to co miało wychwycić - i to sprawdzano przy testowaniu, ale robiło to niewydajnie - tego nie sprawdzono i to zabiło wydajność na serwerach.

    •  

      pokaż komentarz

      @tom001: @johntucker:
      W duzym skrocie wyrazenia regularne sa po to, aby moc zaprogramowac duzo, za pomoca malej ilosci znakow.
      Tzw skrypty.
      Skrypty maja to do siebie, ze w zalozeniu nie sa tak optymalne jak pisanie programow nieskryptowych. Ale jak masz proste skrypty, to nikt sie tym nie przejmuje. Lub jak masz 64 procesorow na maszynie, to po co sie przejmowac wydajnoscia skrypty?
      A wiec napisali sobie "programik" ktory zajmowal jedna linie, ale jego wykonanie tak naprawde zabieralo iles tysiecy krokow do wykonania. dla kazdego pojedycznego tekstu wyslanego do serwerow cloudflare.
      Do cloudlfare obstawiam ze idzie conajmniej kilkadziesiat gb/s ruchu! Nawet niech to bedzie dzielone, ze przez jedno wejscie do cloudlfare wpada 10 gb, to ten caly magiczny WAF (taki firewall ktory mozna programowac) musi sprawdzac kazdy tekst czy spelnia/niespielnai tego wyrazenia regularnego.
      Jak nagle sie okazalo ze to zabiera kilka tysiecy krokow dla pojegycznego tesktu, a ruch wynosi kilka gb/s to zrobilo sie BUM.

    •  

      pokaż komentarz

      @tom001: chodzi o to, że najpopularniejsza implementacja wyrażeń regularnych - Perl Compatible Regular Expressions, w skrócie PCRE - używa algorytmu z powrotami, ze względu na to, że wbrew nazwie wspiera wyrażenia, które nie są regularne (może się odwoływać do już dopasowanego ciągu znaków, tzw. backereference, co powoduje, że to nie jest język regularny). Problem z tym algorytmem jest taki, że jeśli jest źle napisane wyrażenie i dodatkowo jest ciąg znaków, który spełnia pewne kryteria to algorytm powtarza próbę dopasowania w nowym miejscu i tak aż nie okaże się, że wyrażenie znów nie pasuje (i nie będzie pasowało nigdy), ale algorytm o tym nie wie i testuje dalej, co powoduje bardzo duże użycie procesora. W tym wypadku doprowadziło to do tego, że Cloudflare nie mogło oferować swojej głównej usługi, bo nie było już mocy obliczeniowej.

      By nie było, Cloudflare nie jest pierwszą dużą firmą, która miała ten problem, StackOverflow też z tego powodu kiedyś padło. Nagrali nawet film gdzie tłumaczą w czym jest problem z takimi zapytaniami.

    •  

      pokaż komentarz

      @tom001: Ja napisałem dość ogólnie co było przyczyną, a wyżej koledzy ładnie wytłumaczyli czym jest wyrażenie regularne, to tylko pokazuje, że obecnie jest moda wdrażania wszystkiego jak najszybciej, by konkurencja nie była o krok dalej, wchodzi w to także testowanie softu na klientach.

      Swoją drogą dziwne, że nie zabezpieczyli się przed zbyt długim czasem wykonywania skryptu.

    •  

      pokaż komentarz

      @Deykun: @Kazadum dziekuje wam bardzo za poświęcony czas. Kiedyś myślałem zeby być programistom ale to co czasami czytam to jest jakiś koszmar. Szanuję Was że to ogarniacie i dzięki Wam mogę tylko projektować i to później "działa" ;) pozdro!