•  

    Najlepszy kwiatek - weryfikacje certyfikatów (wystarczy że będzie aktualny xD):
    public bool isActiveLicense(string license)
    {
    bool response = false;
    try
    {
    System.Security.Cryptography.X509Certificates.X509Certificate certtmp = new System.Security.Cryptography.X509Certificates.X509Certificate(license);
    System.DateTime a = new System.DateTime(1, 1, 1, 0, 0, 0);
    System.DateTime fromDate = System.Convert.ToDateTime(certtmp.GetEffectiveDateString());
    if (fromDate == a)
    {
    System.Threading.Thread.Sleep(1000);
    fromDate = System.Convert.ToDateTime(certtmp.GetEffectiveDateString());
    }
    System.DateTime toDate = System.Convert.ToDateTime(certtmp.GetExpirationDateString());
    if (toDate == a)
    {
    System.Threading.Thread.Sleep(1000);
    toDate = System.Convert.ToDateTime(certtmp.GetEffectiveDateString());
    }
    int result = System.DateTime.Compare(fromDate, System.DateTime.Now);
    int result2 = System.DateTime.Compare(System.DateTime.Now, toDate);
    if (result <= 0 && result2 <= 0)
    {
    response = true;
    }
    }
    catch (System.Security.Cryptography.CryptographicException)
    {
    }
    return response;
    }


    I po co było robić kampanie wyborczą jak wystarczyło dobry certyfikat skombinować xD

    •  

      @Myrten: wybacz, jakos... problemy z myśleniem (ok, nie programuję w Java zawodowo).. chodzi Ci o piękny catch, który.... wycisza błąd i pozwala działać dalej?:D Oj, ale przynajmniej zwraca false ;-)

      Po co tam jest Thread.Sleep? daj linka do src ;-)

    •  

      @orian: To C# a nie Java :P, o ten kawałek chodzi:

      int result = System.DateTime.Compare(fromDate, System.DateTime.Now);
      int result2 = System.DateTime.Compare(System.DateTime.Now, toDate);
      if (result <= 0 && result2 <= 0)
      {
      response = true;
      }
      }


      https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/Certificate.cs

    •  

      @Myrten: to serio jest w tym kodzie?
      Boję się przeglądać ten kod głębiej, starczyło mi zobaczyć jedną klasę i mam dość. Nie piszę w .Net, ale bazując na doświadczeniu z J2EE pewnie wespół z kilkoma znajomymi zrobiłbym to lepiej ;(

    •  

      @xSQr: Randomowi programiści w wykopu by to lepiej napisali, co prawda KNP by miało 100% głosów ale kod byłby lepszej jakości :P

    •  

      @Myrten: mam u siebie w robocie prawdziwego speca od dotnet'a ale mu tego nie pokażę bo miałbym go na sumieniu. Ten kod wygląda jak dzieło studenta,który właśnie odkrył składnię try/catch. Żenujące jest już to, że yej klasy i o takim zastosowaniu system nie został zobfuskowany i zabezpieczony przed dekompilacją

    •  

      @Myrten: przejęzyczenie ;-)

      Ok, jak na moje zrozumienie System.DateTime.Compare, to ten kod sprawdza, czy "teraz" jest między datami z certyfikatu ;-)

      Raczej zastanawia mnie, w jaki sposób na czas certyfikatu wpływa Sleep:
      System.Threading.Thread.Sleep(1000);
      fromDate = System.Convert.ToDateTime(certtmp.GetEffectiveDateString());

    •  

      @orian: Nie wpływa, ja bym obstawiał na to że do debugowania tego używali ale zapomnieli usunąć i teraz system im zwalnia xD

    •  

      @orian: tam się kartezjan aby nie robi z tego sleep'a?

    •  

      @Myrten: eh ;( a już myślałem, że jakąś magia ;-) Luźne pytanie: w jaki sposób się zabezpiecza przed zespoofowanym czasem systemowym?

    •  

      @orian: Brać czas z internetu :)

    •  

      @Myrten: Randomowi programiści w wykopu by to lepiej napisali

      http://sjp.pl/losowy - nie dziękuj.

    •  

      @MrAndy: Widać że nie jesteś programistą :P

    •  

      @Myrten: A jak napiszę defaultowy zamiast domyślny to już będę mógł być programistą? :)

    •  

      @MrAndy: Będziesz na dobrej drodze :P

    •  

      @Myrten: oczywiśćie, że kod byłby lepszej jakości - prawicowy ( ͡° ͜ʖ ͡°)

    •  

      @Myrten: Pomijając te babole, jak sie patrzy na nazwy zmiennych, to się marzy o zaoraniu tego kodu... Oczy bolą.

    •  

      @cyrial: Najlepsze jest że tu chyba kilka osób pracowało nad tym i każdy innym stylem pisał :D

    •  

      @Myrten: wątpię, że kilka osób. Pisałem tak kiedyś. W pierwszych dwóch tygodniach jak się akurat Javy uczyłem. Później płakałem nad własnym kodem i wszystko przepisałem :). Patrząc na styl i rozwiązania, podejrzewam, że nie wiedzieliby nawet jak w kilka osób nad kodem pracować :P (chyba, że siedzieli przed jednym monitorem...)

    •  

      @cyrial: Zobacz na te nazwy zmiennych, jedne po angielsku a drugie po polsku xD
      private string name1;
      private string name2;
      private string name2v2;
      private string name3;
      private string lista;
      private string imie1;
      private string imie2;
      private string nazwisko;
      private string dataType;
      private string save_as;
      private string komitet;
      private string plec;
      private string status;
      private string ch;
      private string fill;
      private string idCandidate;
      private string display;
      private int min;
      private int max;

    •  

      @Myrten: oj, bo nie wiedzieli jak jest po angielsku :>. name2v2 to w ogole dobra nazwa. Swoją drogą znalazłem coś takiego...

      xml = xml + "<id_intytucji>" + this.instId + "</id_intytucji>";

      Dziwić się, że nie mogą pobrać wyników ;)

    •  

      @cyrial: http://www.wykop.pl/link/2248080/#comment-24590638 daj tu linka do pliku, zbierzemy może kompilacje kwiatuszków :D

    •  

      @cyrial: Na stronie dno24 jest krótka wypowiedź jakiegoś rzecznika ludzi odpowiedzialnych za tworzenie systemu. Powiedział że problemem nie jest generowanie xmla czy obliczanie wyników, tylko teraz mają kłopot z exportem xmla do wydruku. Pewnie jak zwykle problemy z formatem danych, jakieś null'e itd...

    •  

      @orian: wiadomo, że sleep, w końcu sprawdzanie ceryfikatu musi chwilę potrwać skoro ma być bezpiecznie

    •  

      @seo000: Może im poprawimy kod xDDDD?

    •  

      @seo000: Jak sie używa tak dziwnych tagów w xmlu, to nie jest trudno się później zgubić, więc wcale się nie dziwię, że nie mogą tego eksportnąć do druku.

    •  

      @orian:
      Thread.Sleep jest po to żeby, program sprawiał wrażenie że coś robi... PROSTE!

    •  

      System.Threading.Thread.Sleep(1000);

      @Myrten: KUURRWAA XD

    •  

      @Myrten: Prawdopodobnie przerobiony jakiś anglojęzyczny, ogólnie dostępny skrypt.

    •  

      System.DateTime toDate = System.Convert.ToDateTime(certtmp.GetExpirationDateString());
      if (toDate == a)
      {
      System.Threading.Thread.Sleep(1000);
      toDate = System.Convert.ToDateTime(certtmp.GetEffectiveDateString());
      }


      @Myrten: Poddałem się. Jeśli expiration date to jakiś fake, to poczekajmy sekundę i przyjmijmy, że data wygaśnięcia certyfikatu jest taka sama jak data rozpoczęcia? Co to ma być?

    •  

      @Myrten: I tutaj dobrze widać, że 90 % pieniędzy jak to na państwowym zostało ZDEFRAUDOWANE.

      Z autostradami też tak jest ... i właściwie z większością publicznych projektów.

      Oczywiście lewactwo w pełni zadowolone ze swoich idoli z platformy i "społecznie sprawiedliwie" rozdysponowanych pieniędzy ...

      Tak musiało być, "bo inaczej pis" ...

    •  

      @cyrial: W prawdziwym projekcie nie miał byś na to czasu. Życie.
      Dobranoc.

    •  

      @Myrten: name2v2 ;-)
      @orian: całe szczęście, że name2v1.9 nie wyszło...

    •  

      @Jare_K: nie mogło bo kropka to znak specjalny w C#

    •  

      @Myrten: k%#!a mać, kod na poziomie bystrego licealisty co dopiero Visuala odpalił. Nazwy zmiennych różnymi case'ami, raz pl raz ang, czasem w ogóle bezsensu (daje koronę temu kto za miesiąc będzie wiedział co znaczy int a. Do tego czasem absolutnie bezsensowne fragmenty kodu (czasem to tutaj wynosi pewnie z 50%) do tego to "sprawdzenie" certa (równie dobrze można samemu sobie wystawić, po co się jebać)...
      Jasny chuj, za to powinno iść się siedzieć. Dosłownie. .NET jest świetnym środowiskiem niezwykle rozbudowanym i tak okaleczonego kodu dawno nie widziałem.

      I ta ilość Try Catch... to jest związane takim sznurkiem że głowa mała. Ta aplikacja działa jak gówno bo sypie się jak powalona.

      Zastanawia mnie tylko, czy jest możliwość pociągnięcia autorów do odpowiedzialności karnej. PKW jest temu gówno winna bo raczej tam programiści nie siedzą, ale kurde autor... Autor naprawdę musiał chyba na tej aplikacji programowania się uczyć.

      Poza tym jak napisali gówno to mogli chociaż je ukryć. A tutaj jeb .PDB dla wszystkich, a jak!

    •  

      @Shiroo: W powiązanych masz autorkę - studentkę która się opisuje jako PHP Developer( ͡° ʖ̯ ͡°) Przy czym to nawet nie jej wina tylko tego kto jej kazał to pisać. A PKW jest winna tego że na napisanie tak ważnego systemu dała 3 miesiące.

    •  

      @Shiroo: Ja bym się autora/autorki (w sumie nie wiadomo ile osób nad tym siedziało) się aż tak nie czepiał, za to doczepiłbym się kierownictwa. Jak nie macie kompetentnych pracowników, to nie startujcie w przetargach, a jak już wystartujecie, to nie dawajcie roboty komuś, kto pierwszy raz w życiu widzi Visual Studio.

    •  

      @Myrten: Mam kumpli od PHPca i chyba by ją zatłukli za to, że tak się nazywa... to już nie chodzi nawet o to, że w .NET ch*jowo jej idzie. Ale ona łamie rzeczy, które są wspólne dla języków. Takiego burdelu w kodzie to nie widziałem od czasów 1 roku studiów i próby zrozumienia kodu kumpla z roku.
      No 3 miesiące to mało czasu, ale dało się coś napisać co chociaż przypominałoby kod, a nie hurr durr.

      Ten kto jej kazał to pisać mógł chociaż zainwestować w Resharpera dla niej (╥﹏╥)

    •  

      @qtaza: tz. sleep optymalizacyjny :-)

    •  

      @Myrten: ale oni tego nie zrobią za 500 000 cebulionów. To urąga klasie magów.

    •  

      @Shiroo: Nie jestem jakimś prosem(dopiero się wgłębiam w C#) i się zastanawiam czemu ta ilość try-catchów jest zła? Z tego co pobieżnie zerknąłem to jest spoko - głównie łapie wyjątki związane z API czy plikami. W jaki sposób można to obsłużyć inaczej? Pytam z ciekawości. Bo wydaje mi się że to akurat jedna z niewielu rzeczy która jest spoko w tym kodzie :D

    •  

      @warzyww: Używanie kilku try-catchy co chwila jest suboptymalne. Wystarczy try catch obsługujący różne rodzaje błędów na odpowiednio wysokim poziomie, z rozbiciem obsługi błędów od najbardziej szczegółowego (takiego który wiemy co z nim zrobić i jak system ma się zachować) po najbardziej ogólne. Chodzi zarówno o optymalizację jak i czystość kodu. Wynika to z tego, że catch przekazuje cały stos błędu i nie ma najmniejszej potrzeby łapania błędu co chwilę.

      W dużym uproszczeniu (tam dochodzi jeszcze kaskadowanie błedow i inne elementy) zamiast

      try
      {
      try
      {
      fun1();
      ...
      } catch (fun1Exception) { ... }
      try
      {
      fun2();
      ...
      } catch (fun2Exception) { ... }
      }
      catch (generalException) {...}


      powinno być:

      try
      {
      fun1();
      fun2();
      ...
      }
      catch(fun1Exception) {...}
      catch(fun2Exception) {...}
      catch(generalException {...}
      finally {...}

    •  

      @warzyww: No i jeszcze kwestia w drugą stronę: obsługa każdego błędu, która tak naprawde nei jest obsługą błędu. Można sobie spokojnie pozwolić na pogrupowanie wyjątków. Przykład z pliku https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/Start.cs
      catch (System.NotSupportedException)
      {
      MessageBox.Show("Nieprawidłowy format ścieżki. Nie można utworzyć katalogu \"KBW\"", "Error");
      }
      catch (System.IO.IOException)
      {
      MessageBox.Show("Nieprawidłowa ścieżka. Nie można utworzyć katalogu \"KBW\"", "Error");
      }


      Jakby tam była jakaś rzeczywista obsługa tego błędu np.w przypadku System.NotSupportedException rzeczywiście system coś robi to OK. Ale 10 razy zwracać niemal taki sam komunikat?

    •  

      @xSQr:

      Żenujące jest już to, że yej klasy i o takim zastosowaniu system nie został zobfuskowany i zabezpieczony przed dekompilacją

      Nie tylko nie został, ale jeszcze uprzejmie dołączono do niego bazę symboli w pliku pdb :)

    •  

      @warzyww: Na 100% złe jest łapanie błędów pustym blokiem catch {}. Minimum przyzwoitości to jest zalogowanie informacji o błędzie, ale po przejrzeniu kilku plików nie znalazłem żadnego logowania błędów! Nic dziwnego, że nie potrafią tego naprawić szybko skoro nie mają pojęcia co i gdzie się sypie.

      Drugi problem pustego bloku catch {} to kontynuowanie pracy po wystąpieniu błędu: Kod czytania/pisania wyników sprawdza czy pliki istnieją, poleci jakiś błąd i procedura będzie kontynuowana tak jakby pliki istniały i były tam gdzie trzeba.

      Poza tym w wielu miejscach łapane są wyjątki bardzo ogólne, zdrowy rozsądek podpowiada - lokalnie łap jak najbardziej szczegółowe klasy wyjątków, a na głównym poziomie łap wszystko z ogólnym komunikatem przepraszającym dla usera i szczegółowym logiem.

      Brak doświadczenia autorki kodu bije po oczach - tak jakby nigdy nie pisała kodu innego niż do szkoły.

    •  

      @Smeciak: @Abgan: Dzięki za wyjaśnienie :) Tak to jest jak czerpie się widzę z tutoriali/książek - świadomość istnienia mechanizmów i sposobu ich działania jest, jednak brakuje praktycznych szczegółów.

    •  

      @Myrten: i kosztowalo pol miliona

    •  

      @xSQr: a dlaczego uważasz że kod tej aplikacji powinien być obfuskowany ? Przeciwnie, to powinno byc ujawnione i dostępne na stronach PKW jako public domain do wglądu. Poza tym to było kupione za pieniądze podaników, nie ?

    •  

      @xSQr: a dlaczego uważasz że kod tej aplikacji powinien być obfuskowany ? Przeciwnie, to powinno byc ujawnione i dostępne na stronach PKW jako public domain do wglądu. Poza tym to było kupione za pieniądze podaników, nie ?

      @jegg: W tym stanie, gdzie bezpieczeństwo nie jest zdelegowane do oddzielnej platformy i kod jest w takim a nie innym stanie wstydziliby się to ujawniać.

    •  

      @Myrten: Moze jakies zbiorowe zawiadomienie o popelnieniu przestepstwa...?

    •  

      IMHO kody aplikacji tworzone za nasze pieniądze powinny być publicznie dostępne. Na Githuba powinni to wrzucić programiści lub PKW.

    •  

      @Myrten: A czy to czasem nie jest wersja zdekompilowana? Jeśli tak to przecież nazwy zmiennych i metod nie muszą być odwzorowane.

    •  

      @ZaginionyPakiet: Są odwzorowane, bo to .NET, do tego z bazą symboli debugowania.

    •  

      @o_40855: a w ten sposób... No to ktoś nigdy nie był pytany na wyrywki "a co robi ta zmienna?" albo nieudolnie zaciemnił kod.

    •  

      @Myrten: moim zdaniem nie masz racji. Domyślnie zmienna response przyjmuje wartość false. Dalej masz blok try w którym pojawia się wywołanie konstruktora. Nie znam tej klasy, ale z dokumentacji:
      http://msdn.microsoft.com/en-us/library/ykwkw5f9(v=vs.110).aspx
      Wynika, że konstruktor wywołany z certyfikatem jako parametr wyrzuci wyjątek "CryptographicException" w przypadku:
      * braku certyfikatu
      * braku ważności certyfikatu
      * niezgodności hasła certyfikatu
      Więc, jeśli będzie coś nie tak z certyfikatem, to sprawdzenie daty nawet nie nastąpi, bo CLR od razu przeskoczy do pustego bloku catch (w którym właśnie o to chodzi), a następnie zwrócona zostanie domyślna wartość "false". Sprawdzenie daty wystąpi dodatkowo, tylko w przypadku gdy certyfikat zostanie zweryfikowany. Moim zdaniem to jest niepotrzebne, bo sprawdzenie daty nastąpi już podczas weryfikacji certyfikatu w konstruktorze, ale jak pisałem nie znam tej klasy :)
      Reasumując - kod jest nieładny, ale w skrócie - chyba nie masz tu racji z błędem.

    •  

      @tomasz-szkudlarek-5: A czy konstruktor sprawdza czy to jest zaufany przez PKW certyfikat a nie wygenerowany przed chwilą w OpenSSL czy Windowsie przez byle janusza informatyki :)? Jak dla mnie to ta metoda przyjmie każdy aktualny certyfikat X509

    •  

      @Myrten:
      Napisałbym lepsze makro w excelu do tego...

    •  

      Kod źródłowy kalkulatora wyborczego

      @Myrten: Konstruktor tego na pewno nie sprawdza, ale też ta metoda raczej do tego nie służy. Widzę tam kilka innych metod, moim zdaniem ta metoda sprawdza dokładnie to, co ma sprawdzać (choć kiepsko jest napisana). Trzeba by było spojrzeć na miejsce wywoływania tej metody w kodzie klasy nadrzędnej, jeśli się komuś chce i przeanalizować logikę. Moim zdaniem wyciągnąłeś zbyt pochopne wnioski.

    •  

      @tomasz-szkudlarek-5: Myślę że można wysunąć takie przypuszczenie biorąc pod uwagę ogólną jakość tej aplikacji. Oczywiście żeby być pewnym to trzeba by całą resztę przeanalizować co nie jest najprostsze :)

    •  

      @Myrten: Kolejna perałka, wspaniale obsługiwane wyjątki :)

      catch (System.Collections.Generic.KeyNotFoundException)
      {
      }
      }
      }
      catch (System.Exception)
      {
      }

    •  

      Najlepszy kwiatek - weryfikacje certyfikatów (wystarczy że będzie aktualny xD):
      isActiveLicense

      @Myrten: może dlatego że to jest funkcja sprawdzająca właśnie czy certyfikat jest aktualny, a weryfikacja jest w innej funkcji

    •  

      @fnord23: To znajdź tą inną funkcję ( ͡° ͜ʖ ͡°)

    •  

      @badsector: Idea piękna i również byłbym za tym. Ale widzę pewien problem: system jest finansowany przez polskiego podatnika, jak uniemożliwić dostęp do kodu zagranicznym instytucjom, które mogłyby go wykorzystać? To tylko strata z naszego punktu widzenia. Zostaje chyba tylko zamknięty kod, więc wracamy do punktu wyjścia.

    •  

      @Siarkowy: 1. Estonia jakoś mogła.
      2. Wystarczy udostępnić na "wirusowej" licencji.
      3. Ale właściwie po co? Jaka zagraniczna instytucja miałaby to wykorzystać i co z tego?

    •  

      @Siarkowy:

      Po co chcesz uniemożliwiać dostęp zagranicznym instytucjom do kodu? Tak samo można by powiedzieć o wersji binarnej czy o pseudokodzie, który – jak widzimy na przykładzie – da się ładnie zdekompilować (a jak mamy symbole to już bardzo ładnie). Przed nadużyciami, np. nieuprawnionym użytkowaniem, chronią licencje.

      To nie jest strata, ponieważ jeśli ktoś ma kopię naszego softu, to i tak możemy go używać, nasza kopia nie znika! Program napisany był po to, aby go używać, a nie na handel – pokaż oprogramowanie, które napisano dla naszych organów władzy publicznej, a instytucje z całego świata go kupują, więc budżet na tym zarabia.

      Funkcją władzy publicznej nie jest przede wszystkim zarabiać. To funkcja biznesu. No i może ZAiKS-u. :)

      Z zamkniętym kodem jest z kolei taki problem, że mamy monopol prawnoautorski, który pociąga za sobą wiele złych rzeczy. Na przykład jest niezgodny z konstytucyjną zasadą dostępu do informacji publicznej, która jest przy okazji prawem człowieka. To znaczy, że obywatel może powiedzieć "chcę samemu przejrzeć ten kod" i organ władzy publicznej musi mu go dostarczyć. Ktoś kiedyś przetrze tę ścieżkę, bo na razie nie ma tu kultury dostępu do informacji ze strony rządzących i popełniają błędy polegające na tym, że kupują soft bez kodu źródłowego i ograniczony licencyjnie, nawet jeśli jest przez nich zamawiany (pisany specjalnie dla nas, obywateli).

      Poza tym to nie tylko idea. Patrz: system GNU, kernel Linux – na tej kombinacji działa najwięcej serwerów webowych na świecie, mamy Androida na bazie Linuksa, LibreOffice na wolnej licencji, odtwarzacz VLC, przeglądarki Chromium i Firefox – masa świetnego softu.

      Jeśli zaś chodzi o organy władzy publicznej, to też nie wszystkie są takie skąpe:

      https://github.com/alphagov
      https://github.com/vvk-ehk/evalimine

      A tu przykład licencji:

      https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/

    •  

      @badsector: Sama idea licencjonowania nie jest mi obca i jestem zwolennikiem otwartego kodu i rozwiązań, mimo to dziękuję za tak szczegółową odpowiedź. Zgadzam się z nią.

      Obawiam się, że jeszcze parę lat musi minąć, żeby "chcę przejrzeć ten kod" zostało w Polsce wysłuchane. Polski odpowiednik projektu alphagov to byłoby coś!

    •  

      @Myrten: Udało mi się stworzyć wizualizację fragmentu kodu! http://pastebin.com/zMGXBRd2 zawartość może was zszokować. (ʘ‿ʘ)

    •  

      @Myrten: Trochę nie zgadzam sie z Twoimi wnioskami. Nie chce bronić aplikacji czy systemu jako całości. To co widzisz w kodzie to jest tylko wstępna walidacja certyfikatu, właśnie celem sprawdzenia czy nie jest przedawniony. Jeżeli jest, nie ma sensu dalej się nim zajmować. Ale oczywiste jest, że prawdziwa weryfikacja odbywa się po stronie serwera. Trudno zresztą wyobrazić mi sobie, żeby było inaczej. Chciałbyś, żeby w kodzie tej metody do weryfikacji był zahardcodowany klucz prywatny? To dobrze, że klucz jest po stronie serwera, w przynajmniej w teorii bezpiecznym miejscu.

    •  

      @wnasilow: Obyś miał rację, po tym jak zobaczyłem klucz do licencji na bibliotekę do generowania pdfów zaszyty w kodzie to ja już się wszystkiego mogę spodziewać :)

    •  

      @Myrten: Jeżeli to prawda, to jest gorzej niż myślałem. Ale to już oczywiście nie jest już wina po stronie Pani Agnieszki to backend nie powinien dopuszczać na pobieranie/wysyłanie danych bez autoryzacji:)

    •  

      @wnasilow: Serwer jest w PHP a na tym ponoć Pani Agnieszka się zna więc przypuszczam że to też robiła, ale odrazu zaznaczam że to nie jest jej wina tylko ludzi co jej kazali to pisać. I jak przypuszczam nie tylko jej, moim zdaniem tam więcej studentów było

    •  

      Zobacz na to, chyba jednak nie sprawdzają :) http://www.tvp.pl/kielce/publicystyka/glos-dnia/wideo/18112014/17703714

      @Myrten: No to niezle jaja... Jezeli faktycznie mozna sie zalogowac na serwer samowygenerowanym certyfikatem i pozmieniac wszystko, to jest bug level critical i przy nim wszystkie kwestie stylu programowania, ktorymi sie tutaj tak ludzie emocjonuja, nie maja wiekszego znaczenia...

    •  

      @raj: Jakby tego było mało http://www.wykop.pl/link/2249748/wlamanie-na-serwery-panstwowej-komisji-wyborczej/ przypuszczam że kod serwera jest podobnej jakości co kod tego klienta...

    •  

      @Myrten: No właśnie mam na myśli kod serwera... bo w kliencie nie ma za bardzo jak sprawdzić, czy certyfikat jest właściwy (tak jak zauważył @wnasilow powyżej, klient musiałby mieć w sobie klucz prywatny do weryfikacji certyfikatu, co jest absurdem z punktu widzenia bezpieczeństwa), ale serwer powinien to weryfikować.

    •  

      @mrgcypher: przepraszam, ale na co nie ma czasu?
      1. Budowanie XMLa za pomocą biblioteki, a nie ze stringów?
      2. Przygotowanie XSD, względem którego można wygenerować klasy do generowania XML? I mieć 3/4 mniej roboty (server side + client side) z obsługą XMLi...

  •  

    Ogłaszam konkurs na najgorszy kawałek kodu w tym bagnie i zgłaszam ten plik :D https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/Field.cs

    •  

      @Myrten: tam niżej jest ręcznie budowany XML xD

    •  

      @Myrten: Oto dowód, że pisała to jedna osoba - bool isWielopak = false; :D

    •  

      if (xmlErr != null)
      {
      if (xmlErr != null)
      {

      [...]`

      @Myrten: Ja p$$?%$#ę, normalnie wygrali internety. Lepiej 2x sprawdzić, tak na wszelki wypadek ;)

    •  

      @sciana: Z tym, że nie dali sleepa(1000), co może dać niezamierzony rezultat :D

    •  

      @sciana: No co przecież robili system na wybory, bardzo ważny to trzeba 2 razy sprawdzić ( ͡° ͜ʖ ͡°)

    •  

      @Myrten: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/Start.cs
      Nie znam C#, ale nie sądzę żeby dawanie wszędzie try{ ... }catch(System.Exception){} było dobrym wyjściem xD

    •  

      Zaczynam sie wkręcać:
      private string generetedCode(
      private void akcept_Click(
      private void setComboBoxObwod(
      private void currentLwyb_Validated(

    •  

      @Myrten: Nie jestem kimś od .Net ale myślę że ten sposób tworzenia XML'i jest delikatnie rzecz ujmując kryminogenny. Chyba wszędzie tak robią. Ja bym użył wbudowanego mechanizmu (jeżeli istnieje) lub biblioteki by strukturę danych i serializować do XML nie babrząc się w tekście (chyba, że mi powiesz że to normalne w świecie .Net).


      string xml = "";
      xml = xml + "<jns_kod>" + this.jns.Text + "</jns_kod>";
      if (this.role == "P")
      {
      xml = xml + "<nrObwodu>" + this.obwod.Text + "</nrObwodu>";
      }
      else
      {
      string obw = "";
      if (this.obwodList.SelectedItem != null)
      {
      obw = (this.obwodList.SelectedItem as AttendanceOBWItem).getName().ToString();
      }
      xml = xml + "<nrObwodu>" + obw + "</nrObwodu>";
      }

    •  

      @maniac777: Nie jest, w .NET jest takie coś jak LINQ to XML i to wszystko jest ładnie obiektowo tworzone a potem eksportowane do formy tekstowej. To jak oni generują tego XMLa to powinien być przykład dla studentów jak tego nie robić a firma tylko za to powinna dostać karę.

    •  

      @Myrten: Man, dzięki za te linki, samemu mi sie nie chciało przegladać a teraz siedze i płaczę ze śmiechu :D Najbardziej rozwalilo mnie scrollowanie protocolNews i te kilka chwil zanim skumałem że kilkadziesiąt pustych linii w połowie pliku to po prostu indentacja...

      Btw, co do autora/autorki tego kodu... to respekt. Ciągle się nie moge nadziwić, że to w ogóle działa, nie mówiąc już o tym, że jest na tej planecie jakiś człowieczek który to ogarnia :D

    •  

      @Myrten: UWAGA, chyba mam perełkę! ;)

      gdzieś po walidacji jest ustawiane coś takiego:

      this.errorCurrentLwyb.Text = "Liczba wyborców uprawnionych do głosowania jest mniejsza od 110% i większa od 90% szacowanej liczby wyborców (" + (item as AttendanceOBWItem).getLwyb().ToString() + ").";

      Jak w dwóch innych miejscach sprawdzają czy wystąpił ten błąd?

      if ((!this.errorValue.Visible && !this.errorHour.Visible && !this.errorOBW.Visible && !this.errorCurrentLwyb.Visible) || (!this.errorValue.Visible && !this.errorHour.Visible && !this.errorOBW.Visible && this.errorCurrentLwyb.Visible && this.errorCurrentLwyb.Text == "Liczba wyborców uprawnionych do głosowania jest mniejsza od 110% i większa od 90% szacowanej liczby wyborców (" + (this.obwodList.SelectedItem as AttendanceOBWItem).getLwyb().ToString() + ")."))

      i

      if ((this.currentLwyb.Text != "" && !this.errorCurrentLwyb.Visible) || (this.errorCurrentLwyb.Visible && this.errorCurrentLwyb.Text == "Liczba wyborców uprawnionych do głosowania jest mniejsza od 110% i większa od 90% szacowanej liczby wyborców (" + (this.obwodList.SelectedItem as AttendanceOBWItem).getLwyb().ToString() + ")."))

      Proszę! Powiedzcie że to optymalizacja .Net-owego kompilatora lub błąd dekompialacji a nie autentyczny kod!

    •  

      @Myrten: @cyrial: @Myrten: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/printProtocol.cs
      Tego chyba nic nie przebije - 3k linii kodu, a metoda getProtocol ma ponad dwa tysiące linii!
      Liczby wcięć nie mam siły liczyć...

    •  

      @wolodia: I licencja do biblioteki do generowania pdfów zaszyta w kodzie :)

    •  

      @maniac777: I jaki sens miała by mieć taka optymalizacja :)? Poza tym to jest kod z kompilacji debug bez optymalizacji

    •  

      @wolodia: Dodajmy, że generuje HTML sklejając w całość kolejne stringi - ładny potworek :)

    •  

      @Myrten: byte[] salt = new byte[10]
      {
      (byte) 1,
      (byte) 2,
      (byte) 3,
      (byte) 4,
      (byte) 5,
      (byte) 6,
      (byte) 7,
      (byte) 8,
      (byte) 9,
      (byte) 10
      };

    •  

      @bred_one: Nie wiem po co pisali (byte) ( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)( ͡° ͜ʖ ͡°)

    •  

      @Myrten: Ja się nie będę znęcał nad biedną studentką, po tym jak znalazłem w mojej #pracbaza w kodzie ludzi uchodzących za doświadczonych ekspertów javową klasę z 63 konstruktorami ლ(ಠ益ಠლ)

    •  

      @Myrten: Używanie stringa "NULL" jako alternatywy dla faktycznego nulla (to chyba też nie jest normalne).

      if (ErrorProviderExtensions.errors[c.Name][0] != "NULL" && ErrorProviderExtensions.errors[c.Name][0] == code)

    •  

      @Myrten: ja pier... cały kod pisany przez osobę, która nigdy w życiu nie miała do czynienia z .Netem. Już pomijając tak prostą rzecz jak nazewnictwo własności i metod (połowa z wielkiej, połowa z małej, wtf?) to nie znalazłem w tym kodzie chyba ani jednej konstrukcji typowej dla C#, budowania HTMLa/XMLa za pomocą klas pomocniczych, o oddzieleniu logiki od interfejsu już nie wspominając. Konkatenacja stringów za pomocą operatora += (a tutaj o zgrozo variable = variable + "text") jest dla mnie równoznaczna z tym, że nie warto tracić czasu na rozmowę kwalifikacyjną z taką osobą.

      Rozumiem, że 3 miesiące, ale takim kodem i podejściem to sobie tylko więcej roboty narobili. Przy tej złożoności aplikacji i prawdopodobnie gotowych komponentach, to napisanie podobnej apki w MVVM/XAMLu to tydzień roboty + ewentualne wydruki.

      Jeżeli robił(a) to programist(k)a PHP to już wiadomo skąd się biorą o nich żarty :)

    •  

      @Myrten: bo rzutowanie ważne jest też!!!!!! ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°) masakra masakra masakra :D rozp?!#??$ pisany strukturalnie :D

    •  

      @Myrten:

      foreach (XmlNode xmlField in xmlErr)
      {
      foreach (Novacode.Table table in docTemplate.Tables)
      {
      int idxCommMember = 0;
      foreach (Row row in table.Rows)
      {
      idxCommMember++;
      if (row.Cells.Count == 1)
      {
      if (row.FindAll("<ERROR>").Count > 0)
      {
      (...)
      foreach (XmlNode xmlRule in xmlErrDesc)
      {
      foreach (XmlNode xmlErrField in xmlRule)
      {
      if (xmlErrField.Name == "note")
      {
      if (xmlErrField.InnerText.Length >= strErr.Length)
      {
      if (xmlErrField.InnerText.Substring(0, strErr.Length) == strErr)
      {
      strErrDesc = xmlErrField.InnerText;
      }
      }
      }
      }
      (...)
      }
      }
      }
      }
      }
      }
      }
      }


      raz, dwa, trzy, cztery, pięć...tak pięć zagnieżdżonych pętli for each ....dodać do tego timeouty i kogoś dziwi, że głosy się wolno przeliczają :D Szczerze to mnie dziwi, że cokolwiek tu działa.

    •  

      @maniac777: z pewnością nie,chyba że do lewego argumentu też jest ręcznie wpisywany null :
      ErrorProviderExtensions.errors[c.Name][0] = "NULL" ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)
      bo jak nie to jest cos takiego w c# jak metoda statyczna string.IsNullorEmpty

    •  

      @t3rmi: Chyba printProtocol wygrało...jezu tam ktoś buduje html'a ...że się komuś chciało coś takiego robić to jest niesamowite.

    •  

      Dodajmy, że generuje HTML sklejając w całość kolejne stringi - ładny potworek :)

      @maniac777: Jak inaczej wygenerować? Pomijam użycie jakiejś biblioteki.

    •  

      XAMLu

      @d_garm: Powiedz można użyć rządowym projekcie?
      https://xaml.codeplex.com/license

    •  

      @wolodia: Nieźle, mój wideo rejestrator ma mniej linijek :D

    •  

      @maniac777: Szczerze to ja nie mam pojęcia co oni tu odj$@?li, normalnie jest null w .NET
      @d_garm: Wina jest szefów że kazali pisać w C# takie coś osobie co nie miała w tym doświadczenia
      @vokus: :-)

    •  

      @Myrten: mam kolejny "kwiatek". Może nie jest spektakularny, ale warty chyba odnotowania.

      `
      # spr = nieużywane i powtórzone dwa warunki niżej
      bool spr = System.Text.RegularExpressions.Regex.IsMatch(this.passwordCert1.Text, "[!@#$%^&*()\\\-_+=<>?]+");

      # czy nie całości napisać w w jednym warunku?
      if (this.passwordCert1.Text.Length >= 8 && this.passwordCert1.Text.Length <= 40)
      {
      if (System.Text.RegularExpressions.Regex.IsMatch(this.passwordCert1.Text, "[A-ZĄĆĘŁŃÓŚŹŻ]+") && System.Text.RegularExpressions.Regex.IsMatch(this.passwordCert1.Text, "[a-ząćęłńóśźż]+") && System.Text.RegularExpressions.Regex.IsMatch(this.passwordCert1.Text, "[0-9]+") && System.Text.RegularExpressions.Regex.IsMatch(this.passwordCert1.Text, "[!@#$%^&*()\\\-_+=<>?]+"))
      {
      (...)
      }
      else
      # wtedy nie trzeba by było dwa razy powtarzać tekstu informującego o błędzie walidacji.
      {
      this.label6.Text = "Hasło powinno się zkładać z minimum 8 znaków, a maksymalnie z 40. Powinno również zawierać jedną wielką literę, jedną mała, cyfrę oraz znak specjalny (! @ # $ % ^ & * ( ) \ - _ + = < > ? )";
      this.label6.Visible = true;
      }
      }
      else
      {
      this.label6.Text = "Hasło powinno się zkładać z minimum 8 znaków, a maksymalnie z 40. Powinno również zawierać jedną wielką literę, jedną mała, cyfrę oraz znak specjalny (! @ # $ % ^ & * ( ) \ - _ + = < > ? )";
      this.label6.Visible = true;
      }
      `

    •  

      @mrgcypher: Przecież to są jakieś sample, a nie licencja frameworka.

    •  

      @maniac777: Dokładnie, dodam jeszcze nie za dobrą znajomość regexów i nie zastosowanie się do wzorca OOP :)

    •  

      Jak inaczej wygenerować? Pomijam użycie jakiejś biblioteki.

      @marc1027: Programistą nie jestem, ale ja bym użył własnie "jakiejś biblioteki" lub (bardziej prawdopodobne) szabloku XSLT by renderować HTML na podstawie XML'a. Poraw mnie @Myrten jeżeli się mylę.

      Ponad to ten potwór którego stworzyli prawdopodobnie był tak nieedytowalny, że ostatecznie został porzucony na rzecz klasy printProtocolNew generującej od razu PDF. Co nie zmienia faktu, że na klepanie tych 3000 linii kodu by generować HTML'a pewnie stracili kupę czasu.

    •  

      @Myrten: z takich zabiegów kosmetycznych , np w pliku codeBar.cs,
      po cos się k!%!a dodaje przestrzeń:
      using System.Collections.Generic;

      a deklaracje:
      private System.Collections.Generic.Dictionary<string, string> codes;
      private System.Collections.Generic.Dictionary<char, string> codesValue;

      ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)
      wydaje mi się że ktoś całkowicie nie wiedział co i po co się pisze :D

    •  

      @mrgcypher: żeś dowalił:) Nie mówię o żadnych bibliotekach z codeplexu (a to co podałeś to chyba przykładowe apki, tylko rzuciłem okiem), a WPFie.
      @marc1027: najprostszy string builder, tag builder z MVCka, Linq 2 XML, jak potrzebujesz samego XMLa to masz banalną serializację i tworzenie klas z XSDka, FOPem możesz sobie z XMLki przerzucić na co chcesz - PDF/HTML. Sposobów jest tyle ile problemów chcesz rozwiązać i wybierasz ten, który będzie najwygodniejszy.

    •  

      @maniac777: Można to zrobić za pomocą wbudowanego w .NET LINQ to XML tutaj np. piszą jak http://www.vinull.com/2008/08/03/using-linq-to-generate-html/ inna opcja to zrobić po prostu template a potem wstawić tekst w miejsce wcześniej zdefiniowanych tagów :)

    •  

      @bred_one: To akurat jak dla mnie jest dekompilator :)

    •  

      @Myrten: Chyba rekruterów - przyjmować osobę, która kompletnie niema pojęcia o podstawach obiektówki i wrzucać ją na stanowisko programisty PHP/C#/JAVA, czegokolwiek co tego wymaga. Ale trzeba przyznać, że takich osób, nawet po studiach jest coraz więcej. Kierunki zamawiane niestety robią swoje i tworzą masę niepotrzebnych "programistów" bez wiedzy, umiejętności czy zdolności do analitycznego myślenia.

    •  

      @Myrten: aaa racja, zapomnialem ze ten kod jest zdekompilowany xD

    •  

      @d_garm: Była taka akcja "Dziewczyny na politechniki" :)

    •  

      @Myrten: a kobieta programistka to najczęściej jak świnka morska, ani świnka, ani morska. Albo ja po prostu mam takie szczęście, że nie było argumentu, żeby zostawić koleżanki ( ͡° ͜ʖ ͡°)

    •  

      @d_garm: No tyle że to nawet nie jej wina ale tego kto kazał jej to pisać :)

    •  

      @marc1027:

      Jak inaczej wygenerować?

      StringBuilder.

      Nie przepisuje całej zmiennej tekstowej w nowe miejsce.

    •  

      @cyrial: @radeks11: @d_garm: @bred_one: @maniac777: @Mephistofeles: @cyrial: @mrgcypher: @marc1027: @vokus: @wolodia: @krissk: @sciana: @www44: @WykopWasPrzejrzal: @r__d:

      Panowie, mamy rekord:

      https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/ProtocolForm.cs

      15 TYSIĘCY linijek kodu w jednym pliku\klasie - rak mózgu instant ( ͡° ʖ̯ ͡°)

    •  

      @Myrten: o tym mówiłem xD xml robiony StringBuilderem xD

    •  

      @WykopWasPrzejrzal: Też o tym wspominałem, a najlepsze jest to że chyba raz robią tak, a raz bardziej po ludzku.

      @Myrten: Wśród tych 15k kodu znalazłem takie oto coś:

      if (tmp == "lwyb")
      {
      replace.Add(new string[]
      {
      tmp,
      this.lwyb
      });
      }
      if (tmp == "lwybA")
      {
      replace.Add(new string[]
      {
      tmp,
      this.lwybA
      });
      }
      if (tmp == "lwybB")
      {
      replace.Add(new string[]
      {
      tmp,
      this.lwybB
      });
      }
      if (tmp == "plusminus")
      {
      replace.Add(new string[]
      {
      tmp,
      this.plusminus
      });
      }
      if (tmp == "plus")
      {
      replace.Add(new string[]
      {
      tmp,
      this.plus
      });
      }
      if (tmp == "minus")
      {
      replace.Add(new string[]
      {
      tmp,
      this.minus
      });
      }


      To aż wrzeszczy o jakiś Switch/case. Ponad to jestem ciekaw czy kalkulator tez liczny "plus minus" poprawnie ;)

    •  

      @maniac777: No dokładnie, inne rozwiązanie to wrzucenie tego do słownika i potem już prosto jest. Chociaż przypuszczam że tu pewnie nie powinno być w ogóle żadnych tekstowych rzeczy ale oni zwalili to( ͡° ͜ʖ ͡°) Cały ten kod podsumuje tym filmikiem:

      źródło: www.youtube.com

    •  

      @Myrten: Brak mi słów. W życiu nie widziałem takiego syfu.

    •  

      @Myrten: Jak to ona ogarnęła sama to za to już powinna dostać medal :). MASAKRA!

    •  

      @pilot: No to jest cud że to coś odpaliło, chociaż nie wiem czy robiła to sama bo tam widać kilka stylów programowania.

    •  

      @marc1027: dużo ludzi tutaj mocno p%!@%#$i. To że kod jest żenujący to nie żadnych wątpliwości. Natomiast w sytuacji gdy nie mam/nie umiem korzystać z bibliotek do budowania HTML, tworzenie go ze sklejania łańcuchów znaków jest jak najbardziej normalne

    •  

      Komentarz usunięty przez autora

    •  

      @maniac777: Napiszesz w języku zrozumiałym dla laika z programowania, co jest źle w tym kodzie? Chciałbym się pośmiać z wami ( ͡° ʖ̯ ͡°)

    •  

      @sarinekOne: Nie, nie jest normalne i w żadnym wypadku nie powinno się brać przykładu z tego kodu.

    •  

      @sylwke3100: co ty opowiadasz. A co jeśli w firmie nie ma i nie będzie żadnego funduszu na komercyjna bibliotekę do tworzenia np. XML. Jak stworzysz taki pliczek. No proszę. Oświeć mnie. Siedzę w VB/VBA głównie

    •  

      @sarinekOne: A jak nie ma funduszy to warto poszukać czegoś OSowego z odpowiednią licencją. Do popularnych jezyków pewnie nie jedno się znajdzie.

    •  

      @Myrten: Nikt ich nie nauczył przeciążania konstruktorów :)

    •  

      @bred_one: to akruat błąd dekompilatora, sam dodaje deklaracje

    •  

      @sarinekOne: W .NET masz wbuwowane świetne narzędzia do tworzenia XML...

    •  

      @Myrten: tak to prawda. Ale chodzi mi no o VBA. Tam nie ma serializera i musiałem sam procedury stworzyć poprzez doklejanie. Działa kilka lat

    •  

      @maniac777: Nawet budowanie string jest bardzo nieefektowne. Powinni uzywac StringBuilder zamiast a = a + newString, poniewaz string w C# jest immutable tak wiec za kazdym razem jest tworzony nowy obiekt.

    •  

      Napiszesz w języku zrozumiałym dla laika z programowania, co jest źle w tym kodzie? Chciałbym się pośmiać z wami ( ͡° ʖ̯ ͡°)

      @iso9001: Jeżeli Chodzi CI o perełkę którą znalazłem, to ten ktoś ustawia długi ciąg znaków zmiennej, a potem chcąc sprawdzić w innym miejscu czy ten konkretny stan tam jest sprawdza dokładną treść tego ciągu znaków. To się aż prosi o błędy bo w sytuacji gdy chcesz przeredagować test (bo na przykład się nie mieści) nagle przestaje działać Ci kod w innych miejscach. Smaczku dodaje fakt, że tworzy to ogromnie długie, trudne do analizy warunki. Zamiast tego należy użyć zmiennej w charakterze flagi prawda/fałsz. Generalnie nigdy nie widziałem by ktoś wpadł na taki pomysł jak ten tutaj.

    •  

      https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/ProtocolForm.cs

      @Myrten: Chciałbym na niego spojrzec, ale moja przegladarka nie wyrabia i płacze, że "This page(s) become unresponsive (...)". Double respect dla autorow, nawet maszyna wymieka przy czytaniu takiego pliku :D

    •  

      Powiedzcie że to optymalizacja .Net-owego kompilatora lub błąd dekompialacji a nie autentyczny kod!

      @maniac777: A to nie jest przypadkiem tak, że w oryginalnym kodzie było makro, to makro zostało rozwiniete i dlatego w zdekompilowanym kodzie widzisz kilka razy to samo?

    •  

      generuje HTML sklejając w całość kolejne stringi

      @maniac777: Napisałem kiedyś spory (i w odróżnieniu od tego tutaj, dobrze działający, do dzisiaj :)) system, w którym też w podobny sposób generowałem HTML-a, a także zapytania SQL-owe. Wynikało to z prostego powodu - jeżeli wiem, jak konkretnie ma wyglądac docelowy HTML (zacząłem od ręcznego napisania sobie przykładowego dokumentu który ma być wygenerowany :)) albo zapytanie, to zdecydowanie szybciej i łatwiej jest mi napisać kod, który skłąda to ręcznie - i jest mniejsze prawdopodobieństwo że się pomylę - niż gdybym miał zapoznawać się z jakimiś nieznanymi mi do tej pory bibliotekami do generowania tego automatycznie i wgłębiać się w ich logikę działania, żeby wiedziec jak tego użyć...

    •  

      A to nie jest przypadkiem tak, że w oryginalnym kodzie było makro

      @raj: Jeżeli tak to makrem musiałby być sam string:

      "Liczba wyborców uprawnionych do głosowania jest mniejsza od 110% i większa od 90% szacowanej liczby wyborców (" + (item as AttendanceOBWItem).getLwyb().ToString() + ")."

      Ale to by czyniło ten kod niemal tak słabym jak jego zdekopilowana wersja. Jedynie wersja z .Net owym odpowiednikiem sprtinf byłaby w jakiś sposób do obronienia, ale w sumie też ciężko bo to raczej powód do użycia zmiennej lub wartości typu constant niż makra.

      Napisałem kiedyś spory (i w odróżnieniu od tego tutaj, dobrze działający, do dzisiaj :)) system, w którym też w podobny sposób generowałem HTML-a

      @raj: Wybacz, ale w mojej ocenie to nie jest powód do dumy. A tłumaczenie partyzanckich rozwiązań "bo musiałbym uczyć się jak to zrobić poprawnie" jest delikatnie rzecz ujmując słabe. Nie po to używane są na każdym kroku wszelkiej maści silniki szablonów i technologie pozwalające odseparować kod od prezentacji wyniku by do tej pory budować html jak w latach 90-tych lub tworzyć własne wynalazki go generujące.

      i jest mniejsze prawdopodobieństwo że się pomylę

      @raj: W cale nie jest. To sprawia że na raz masz zdecydowanie więcej rzeczy do ogarnięcia, kod jest znacznie dłuższy, a modyfikacje czasochłonne i obarczone niepotrzebnym ryzykiem.

    •  

      W cale nie jest. To sprawia że na raz masz zdecydowanie więcej rzeczy do ogarnięcia, kod jest znacznie dłuższy, a modyfikacje czasochłonne i obarczone niepotrzebnym ryzykiem.

      @maniac777: Dla ciebie może nie jest. Dla mnie naprawdę tak było łatwiej.
      A kod był - pomimo że zapisany w "niekoszerny" wg Ciebie sposób - jasny i logiczny, więc problemów z modyfikacjami też nie było...
      No i jest jeszcze taka sprawa - chociaż to nie było moim celem - że wydajnościowo takie generowanie "na piechotę" jest znacznie lepsze od generowania za pomocą jakichkolwiek frameworków, bo generujesz tylko to, co jest absolutnie niezbędne - bez dodatków, które takie frameworki czesto lubią dorzucać...

    •  

      Dla ciebie może nie jest. Dla mnie naprawdę tak było łatwiej.

      @raj: Tylko dlatego że nie posiadałeś wystarczającej wiedzy/umiejętności by zrobić to prościej/lepiej/szybciej.

      No i jest jeszcze taka sprawa - chociaż to nie było moim celem - że wydajnościowo takie generowanie "na piechotę" jest znacznie lepsze od generowania za pomocą jakichkolwiek frameworków,

      @raj: To trzeba było pisać w assemblerze ;) Od dawna sprzęt jest na tyle szybki by kwestie wydajności przy tak trywialnych zadaniach jak generowanie html czy xml były pomijalne. Czy w tym projekcie którego bronisz kluczowym wyznacznikiem sukcesu była szybkość generacji kodu html?

    •  

      Tylko dlatego że nie posiadałeś wystarczającej wiedzy/umiejętności by zrobić to prościej/lepiej/szybciej.

      @maniac777: Wiesz co, tylko że prosty rachunek wskazywał, że włoże więcej czasu i wysiłku w przystosowanie swojego sposobu myślenia i pisania kodu do sposobu funkcjonowania obcego narzędzia niż w napisanie tego po swojemu :)
      W dodatku jakość kodu napisana z uzyciem tego obcego narzędzia bedzie gorsza, bo musze się przystosowac i zmieścić w takich możliwościach, jakie daje to narzędzie, chociażby filozofia działania tego narzędzia była zupełnie inna od tego, jak ja bym podszedł do rozwiązania tego problemu (a w moim przypadku jest tak w odniesieniu do 90% gotowych bibliotek, frameworków itp. - podejście ich autorów do sposobu wykonywania danych operacji jest całkowicie "w poprzek" w stosunku do podejścia, które przyjąłbym ja). Nie będę więc pisząc kod miał świadomości pełnej kontroli nad tym, co i w jaki sposób on robi. Pisząc "po swojemu" dokładnie wiem, co i jak program robi i jeżeli pojawia się błąd, to w 95% przypadków jestem w stanie prawie "na ślepo" (bez debugowania, opierając się tylko na objawach) w przybliżeniu zlokalizować fragment kodu, który powoduje problem. Debugować musiałem w zasadzie jedynie w tych przypadkach, kiedy to właśnie zewnętrzna biblioteka (albo jakaś funkcja systemowa) zachowywała się w inny sposób, niż ja przypuszczałem, że się zachowuje.

      Szybkośc jest tu zyskiem ubocznym, wynikającym bezpośrednio z tego, że dokładnie wiem co i jak program robi. Na przykład - odkładając chwilowo na bok generowanie HTML-a - kwestia podobnego ręcznego generowania zapytań SQL-owych. Nie wiem, jakie mozliwości dają typowe biblioteki/frameworki dostepu do baz danych jeżeli chodzi o dowolne formułowanie zapytań. Ale na przykład w moim przypadku w wielu sytuacjach zasadniczy wpływ na wydajnośc zapytania miała kolejność joinowania tabel w zapytaniu. Przy jednej kolejności zapytanie wykonywało sie błyskawicznie, przy innej potrafiło trwać np. minutę, co w przypadku, gdy dane zwrócone przez to zapytanie mają posłużyc do wygenerowania strony HTML jest niedopuszczalne. Robiłem więc tak, że w konsoli SQL wklepywałem sobie ręcznie zapytania do testowej bazy i modyfikowałem je tak długo, aż uzyskałem satysfakcjonujący mnie wynik. Potem w kodzie umieszczałem po prostu instrukcje generujące ręcznie dokładnie takie zapytanie SQL, wstawiając oczywiście wartości zmiennych odpowiadające nazwom tabel, pól itd.
      Co do HTML-a postępowałem podobnie. Zaczynałem od ręcznego napisania przykładowej strony HTML takiej, jaką miał generować system. Potem zamieniałem ten plik HTML na plik PHP i zostawiałem stałe części kodu HTML-owego bez zmian, a części zmienne zastępowałem kodem PHP generującym je. Czyli trochę na zasadzie zrobienia templatki strony, tylko że ta templatka była zintegrowana z programem generującym tę stronę :). Oczywiście, wiem że takie podejście ma ewidentną wade polegającą na tym, że trudno jest zmienić sam wygląd strony zostawiając nienaruszoną logikę, ale w tym projekcie akurat cos takiego nie było przewidywane. Jeżeli system byłby zmieniany, to w pierwszym rzedzie byłaby zmieniana logika (i rzeczywiscie, była zmieniana dosyć często), a ewentualna zmiana wygladu byłaby robiona jako produkt uboczny przy którejś tam zmianie logiki :).

      Czy w tym projekcie którego bronisz kluczowym wyznacznikiem sukcesu była szybkość generacji kodu html?

      Początkowo się wydawało że nie, i nikt tego nie zakładał.
      "W praniu" sie okazało, że wydajność systemu była bardzo ważna, gdyż charakterystyka jego używania była taka, że jak normalnie obciązenie systemu było średnie, to były szczególne dni, w których system musiał wytrzymać piki wielu tysięcy użytkowników jednocześnie, a był to system o znaczeniu dośc krytycznym, i gdyby padł, to pewnie - choć na mniejszą skalę ;) - reakcje byłyby podobne jak na obecny pad systemu PKW :). A że system działał na serwerze o dosyć skromnych parametrach, jego minimalizm wynikający z tego, że generował tylko to co niezbędne, okazał sie być bardzo pożyteczny :)
      Nie mówiąc już o tym, że taki minimalistyczny HTML ultraszybko renderował się w przegladarkach uzytkowników, co też wpływa na ogólny pozytywny odbiór systemu :)

    •  

      @Myrten: Ja mam w sumie lepsze podsumowanie całego kodu, wiadomość- mem dla autorki ( ͡° ͜ʖ ͡°)

  •  

    Jest to zdekompilowany kod (twórcy nie wiedzą co to obfuskacja) napisany w Windows Forms/C#. Każdy kto się zna oceni sam jakość tego cuda:)

  •  

    Komentarz usunięty przez moderatora

    •  

      @mistejk: Zostaw dziewczynę w spokoju, dali jej do napisania to napisała, pewnie za jakieś gówniane pieniądze.

    •  

      @mistejk: I po co jej tak ciśniecie? Po co upubliczniać jej zdjęcia? Kazali jej klepać, to klepała. Bez wiedzy, bez code review, bez czasu na testy, na cokolwiek. To nie jej wina, miała honorowo zwolnić się z roboty? Każdy programista pisał kiedyś taki crapowaty kod na początku swojej kariery. W tej chwili niszczycie niewinną dziewczynę , bo coś czuje, że się o niej zrobi głośno i nazwisko będzie wszędzie, jeśli to ona faktycznie to pisała.

    •  

      @sciana: Nie niszczę jej, nic do niej nie mam. Mam natomiast wiele do faktu, że napisanie jednego z najważniejszych systemów w kraju demokratycznym powierza się studentce...

    •  

      @mistejk: To nie jej wina. Starała się i to bardzo. Ręczne rzeźbienie XMLów i Hmtli na kilkaset linijek to jednak wyczerpująca praca.

      Przypomniała mi się historia, jak w firmie kolegi zatrudnili panią magister informatyki i na rozgrzewkę dali jej zadanie. Przepisanie sporej liczby jakichś rekordów z Excela na bazę lub w drugą stronę. Praca była zdalna, więc miała czas z czwartku na poniedziałek. W poniedziałek dała znać, że przepisuje te rekordy z mężem i koleżanka, ale są dopiero w połowie roboty ( ͡° ͜ʖ ͡°)

    •  

      @vipperek: bo to jest wlasnie internet , tutaj trzeba zniszczyc wszystkich....ludzie lubia kopac lezacych

    •  

      @vipperek: a jeszcze gorzej jeśli to nie jej "dzieło"

    •  

      @vipperek: no cóż, przetarg po polsku, wykonanie po polsku i odpowiedzialność po polsku: winny nie jest ten, kto ponosi największą odpowiedzialność, ale ten, na kogo najłatwiej zrzucić winę.

    •  

      Śmiać się k!#?a czy płakać... ( ͡° ʖ̯ ͡°)

      @mistejk: zdecydowanie płakać... nad sobą.
      Zresztą niby tylu zaj....istych programistów, czytając wykop można odnieść wrażenie że tylko tacy są, ale jakby to powiedzieć jakość kodu OS jest często tak denna, że śmiało mogłoby konkurować z tym co napisane tutaj.
      Fakt co większe/ważniejsze projekty mają jakiśtam community review... ale jest cała masa crapu bez tego.
      Lepiej pokaż swojego gita To się pośmiejemy wszyscy.

    •  

      @mistejk: a ty myślisz, że ona w ogóle wiedziała dla kogo to robi?

    •  

      @geronimo80: nie jestem programistą

    •  

      @woda-utleniona: co to ma za znaczenie? Napisałem już wyżej, że bulwersującym jest fakt, że takie rzeczy się powierza studentom.

    •  

      @mistejk: bo wrzuciłeś jej zdjęcie, a nie tego, który jej to zlecił.

    •  

      @mistejk: To nie jest autorka. Ktoś z dupy napisał, że to studenka Agnieszka, potem ktoś z dupy wziął pierwszą lepszą studentkę informatyki z Łodzi o imieniu Agnieszka. Zostawcie ją.

    •  

      @mistejk: Jaki cel miało wrzucenie zdjęcia tej dziewczyny? Chciałeś najzwyklej w świecie wyśmiać tą dziewczynę...

    •  

      @mistejk: to weź lepiej wygooglaj tego prezesa Macieja Cetlera. Jemu się zdecydowanie bardziej należy.

    •  

      @mistejk: Mam ją w znajomych znajomego ( ͡°( ͡° ͜ʖ( ͡° ͜ʖ ͡°)ʖ ͡°) ͡°)

    •  

      @mistejk: ogólnie sprawiasz wrażenie, jakbyś był nikim. Dla nikogo.

    •  

      @mistejk: dawaj fotkę zleceniodawcy

    •  

      @mistejk: a wrzucenie zdjęcia dziewczyny z pieczątką "to ta odpowiedzialna" gdy w rzeczywistości miała w całej sprawie niewiele do powiedzenia to już nie jest bulwersujące?

    •  

      @rubyp: chętnie bym usunął, ale nie mam już takiej opcji [jak mody czytają to niech usuną zdjęcie]

    •  

      Komentarz usunięty przez moderatora

    •  

      Komentarz usunięty przez moderatora

    •  

      @mistejk: to tymbardziej poeinienrs siedziec cicho skoro i tak nie rozumiesz kontekstu

    •  

      @geronimo80: ty skupiasz się na kodzie, ja na fakcie, że system do liczenia głosów pisze studentka

    •  

      @mistejk: To nie jest ważne, że student pisał kod...
      Problemem jest ustalenie deadline na 3 miesiące! A także brak nadzoru jakości dostarczanego kodu.
      Wiele z tego kodu mogło być pisane przez studenta nawet w dobrej firmie, nie ma w tym nic złego. Koszty są niższe. Ale powinien być lider/senior developer, który czuwa nad jakością i pomaga dostarczać ten kod. Który nigdy nie powinien dopuścić, aby słabo napisany kod trafił na środowisko produkcyjne.

    •  

      "> Oraz pani prezes Nabino sp. z o.o. - Zofia Bogusławska"

      no ta to już wygląda jak prawdziwy informatyk

    •  

      @rubyp: Faktycznie, nie wiem czy to dzieło można nazwać studenckim, na studiach ma się przedmioty typu Zaawansowane techniki programowania na którym są wałkowane wzorce projektowe, są przedmioty typu Programowanie obiektowe i wiele innych gdzie za nic w świecie taki potwór by nie przeszedł. Oczywiście na studiach znajdują się ludzie którzy 'sobie radzą' i to właśnie jedna z tych osób.

    •  

      @vipperek: Tak, powinna się zwolnić. To programista powinien pójść do szefa i powiedzieć mu, że tego nie da się porządnie zrobić w wymaganym czasie.
      Chciałbyś być operowany przez lekarza który nie wie za bardzo jak zrobić operację, ale robi ją bo mu tak ordynator kazał?

    •  

      @mistejk: Jak trzeba być spedalonym żeby wrzucać czyjąś fotkę prywatną. Gnoju bez honoru.

    •  

      @freakin_awesome: jezeli byla na fejsie i dostepna publicznie, to nie jest to prywatna fotka

    •  

      @Henrar: Wrzuć jeszcze swoją... nie zaszkodzi.

    •  

      @freakin_awesome: moje zdjecia nie sa publiczne na facebooku. Po to sa ustawienia prywatnosci, by je stosowac. Wstawiajac zdjecie na fb i dajac je jako publiczne musisz sie liczyc z konsekwencjami

    •  

      @Henrar: Zostawiając na boku kwestię licencji zdjęć na fb i to czy można je dalej udostępniać, to w tym przypadku najważniejszy jest kontekst w jakim je ktoś publikuje. Jeśli ktoś wrzuca gdzieś czyjeś zdjęcie z opisem godzącym w jego dobre imię lub nawoływującym do ataków na tą osobę to on musi się liczyć z konsekwencjami, a nie ofiara takich działań.

      Inna sprawa to rozsądne wstawianie swoich zdjęć do neta tak jak sugerujesz. Z tym, że dotyczy to raczej jakiś ryzykownych tematów. Jak wrzucasz swoje nagie zdjęcia to powinieneś liczyć się z tym, że np. twój sąsiad je znajdzie i sobie poogląda. Ale to całkiem coś innego niż wpis w stylu naszego bohatera, który dostał platynowe wyróżnienie.

    •  

      @vipperek:

      W tej chwili niszczycie niewinną dziewczynę , bo coś czuje, że się o niej zrobi głośno i nazwisko będzie wszędzie, jeśli to ona faktycznie to pisała.

      OBY tak się nie stało, bo będzie to śmiertelne sk?##ysyństwo i totalna ignorancja ludzi.
      Kilka faktów (których zdaje się nikt na wykopie nie sprawdził, naśmiewając się z tej dziewczyny):

      1. Program kalkulator wyborczy istniał dobrych parę lat. I pierwsza jego odsłona to była również totalna klapa!! Tylko, że w tamtych czasach jeszcze się liczyło ręcznie i nikt nawet nie zauważył problemu. Późniejsze wersje TEJ SAMEJ aplikacji były już funkcjonalne. Szkoda, że wtedy nikt nie rzucał zdjęciami i oszczerstwami.

      2. H wie po co PKW rozpisało nowy przetarg (wcześniejszy system działał bez szwanku). Nowe pieniążki do rozdania?

      3. ILE BYŁO CZASU NA REALIZACJĘ PROJEKTU!!!!!!!

      4. To nie jest PIERWOTNA wersja aplikacji!!!!! Pierwotna miała olbrzymią ilość błędów. Na przykład brak możliwości zarejestrowania certyfikatu. Skąd pewność, że dziewczyna nie została wzięta do "ratowania" projektu i taki prosty myk wyśmiewany tu, był jedyną możliwością, żeby to gówno poskładać przed liczeniem głosów?? No proszę o odpowiedź wszystkich wyśmiewających.

  •  

    Nie wierze, że to kosztowało 50 000 pln ... ;)

    •  

      @fre4k: zgubiłeś jedno zero ( ͡° ͜ʖ ͡°)

    •  

      @fre4k: Z drugiej strony, to ile miało kosztować? Cena produktu jest ustalana na podstawie tego co on robi/ma robić, a nie jak jest wykonany. Ciul, że tu akurat c#$!%wo, ale tego raczej nie było w wymaganiach PKW. Tzn. było, że ma działać, ale nie było, że kod ma wyglądać tak, żeby każdy geek chciał się przed nim masturbować.

      Pytanie też, czy to jest całość - bo dokąd oni te dane wysyłali? Pewnie jakieś bazy danych czy jakiś serwer też był potrzebny.

    •  

      @r3m0: jakość wykonania, to coś, czego się nie negocjuje, zakładamy, że pracujemy z profesjonalistami, szczególnie przy zamówieniach na tą kwotę. Co do jakości kodu, tu nie chodzi o masturbację, tylko o głupie szukanie błędu w klasie, która ma 3500 linii i momentami kilkanaście if'ów zagnieżdżonych.

      edit. swoją drogą, w jakiej firmie pracujesz, skoro dobry kod musi być wymaganiem klienta? :D

    •  

      @fre4k: No wiadomo, że się nie negocjuje, chociaż znam sytuacje gdzie kod jest sprawdzany przez klienta.
      Miałem (nie)przyjemność pracować na kodzie, w którym się zdarzały pliki po 60k linii i funkcje po 5-8k linii i wiem co to za orka. Tyle, że ten kod miał kilkanaście lat i jakoś to jeszcze można zrozumieć, ale taki kod pisany wczoraj, to mi się nie mieści w głowie.

    •  

      @r3m0: bazę odziedziczyli, wydaje mi się, że Oracle ;-)

    •  

      jakość wykonania, to coś, czego się nie negocjuje, zakładamy, że pracujemy z profesjonalistami, szczególnie przy zamówieniach na tą kwotę.

      @fre4k: Lol, jak najbardziej się negocjuje je. Szczególnie jeśli chce się przejąć kod od dostawcy.

    •  

      jakość wykonania, to coś, czego się nie negocjuje, zakładamy, że pracujemy z profesjonalistami, szczególnie przy zamówieniach na tą kwotę

      @fre4k: lel, szczególnie wydając pieniądze z budżetu państwa ( ͡° ͜ʖ ͡°)

    •  

      @orian: Do takiej akcji potrzeba człowieka z certyfikatem Oracle ewentualnie support ze strony IBM/Oracle a wiesz ile kosztuj 1h pracy ? Podpowiem w kilka chwil mógłby zarobić mityczne wykopkowe 10k.

    •  

      @mrgcypher: Oracle podaje, że średnia deklarowana pensja w EMEA to $56k

      Źródło: http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=305

      Jako kilka chwile definiuję < 12h pracy, czyli stawka musiałaby być bliska 800zł/h.

    •  

      zgubiłeś jedno zero ( ͡° ͜ʖ ͡°)

      @Myrten: Bardzo mnie rozśmieszył Twój komentarz (jak wszystkich) ale po chwili zastanowienia już nie byłem pewien czy chodzi tylko o jedno zero (patrz Płatnik ZUS).

    •  

      @przegryzam: W necie jest dokument z przetargiem i tam jest jakieś 480k czy coś takiego

    •  

      @Myrten: OK. Dzięki za szybką odpowiedź.

    •  

      @Yahoo_: tzn. negocjujesz na jakim poziomie Twoi programiści będą pisali kod? Bo nie za bardzo rozumiem jak ta jakość miałaby być realizowana...

    •  

      @fre4k: No oczywiście, że możesz negocjować pewien poziom kodu - jedna z prostszych miar - pokrycie testami. Jak mówiłem to zależy od klienta. Jeden powie, że "ma działać" drugi, jeśli ma mózg i chce później rozwijać projekt to umówi się z firmą na "definition of done".

    •  

      @Yahoo_: agile przypadkiem nie mówi o "Quality is Not Negotiable", jeżeli już wchodzimy w jego zasady? W moim doświadczeniu można było zmieniać koszta, zakres i czas, ale jakość zawsze pozostawała na tym samym poziomie. Zgadzam się, że testy mogą być jakimś wyznacznikiem jakości kodu, bo same narzucają architekturę, ale jeżeli są robione prawidłowo. IMO - można zmienić zakres projektu upraszczając/ograniczając architekturę i to jedne miejsce, które będzie miało wpływ na "jakość" całego projektu, ale dalej - nie jakość kodu, dobry programista i tak spędzi ten sam czas pisząc zły kod, więc co najwyżej może to zrobić ze złośliwości. DoD jak i wiele innych praktyk agile'owych służy bardziej do usprawniania procesu, co przekłada się raczej na ogólną jakość projektu a nie kod sam w sobie.

    •  

      @fre4k: Spoko, ale już samo "agile" jest jakimś wyznacznikiem jakości (jeśli się do niego w pełni stosujesz, a osobiście nie znam nikogo, kto by tak pracował). Są klienci, którzy po prostu powiedzą "towar ma działać reszta nas nie obchodzi", a są tacy, którzy będą chcieli doglądać postępów, modyfikować wymagania itd.
      Wiadomo, że jakość kodu jest dość ciężką do zweryfikowania miarą, ale w pewnym kwestiach możesz się porozumieć z klientem.

    •  

      @Yahoo_: agile to zbiór metodyk a nie wyznacznik jakości. Nie pracuję inaczej niż w agile'u i nie wyobrażam sobie powrotu do waterfall'a. Projekty dla międzynarodowych korporacji także robimy używając metodyk agile. Nie spotkałem się z sytuacją, że klient nie chce widzieć na bieżąco wyników pracy i mieć możliwość poprawek np. błędnie sformułowanych wymagań (brałem też udział w projektach dla urzędów), bo zazwyczaj osoba odpowiedzialna za ich formułowanie także dostanie po dupie jeżeli to co wyjdzie jest niezgodne z założeniami. Wybacz ale ostatnie zdanie brzmi jak bełkot.

    •  

      @fre4k: I udaje Ci się dotrzymać wszystkich dobrych praktyk wymaganych przez agile? Jeśli tak to gratuluję. Z mojego doświadczenia wynika, że nawet przy dobrych chęciach bardzo trudno to osiągnąć z prostego względu - klientom nie chce się robić ich części.

    •  

      @Yahoo_: wiele zależy od otoczenia w którym się pracuje, polecam zmienić pracodawcę. W czym kodzisz?

    •  

      Pytanie też, czy to jest całość - bo dokąd oni te dane wysyłali? Pewnie jakieś bazy danych czy jakiś serwer też był potrzebny.

      @r3m0: To jest - jak sama nazwa wskazuje - kalkulator wyborczy, czyli aplikacja kliencka, której używa obwodowa komisja wyborcza do połączenia się z serwerem PKW i przesłania tam wyników głosowania. Taki front-end całego systemu. Oczywiście jest jeszcze część działająca na serwerach i wyliczająca finalne wyniki, pewnie generująca jakieś protokoły itd.

    •  

      @fre4k: C# - ale w moim przypadku to nie tyle kwestia pracodawcy co specyfiki klientów (ale nie chciałbym publicznie za dużo mówić :P).

    •  

      @Myrten: nic się nie zgubiło, przecież zero to nic ( ͡° ͜ʖ ͡°)

  •  

    Uuuu a co to jest :D?
    Framework.ActivateLicense("4E5A-14CC-D4D2-14C2-F558-B99F-C5F5-5E4B");

  •  

    Chyba już lepiej było to zlecić jakiejś uczelni (głównie celem opieki nad projektem i wstępną implementacją), udostępnić repozytorium na github i przy okazji każdy specjalista z wolnym czasem mógłby się wykazać dla dobra kraju. Jakby zaczęli już teraz, to do przyszłych wyborów byłby w Polsce piękny system.

  •  

    @FaktyTVN błagam zróbcie jutro w faktach o tym materiał, weźcie ludzi z @niebezpiecznik-pl albo @ZaufanaTrzeciaStrona i spytajcie się na jakiejś konferencji o to :)

  •  

    To jest właśnie ta polska innowacyjna gospodarka cebulaków Januszy biznesu: wygraj przetarg, zgarnij kupę hajsu. Zatrudnij studenta na staż, nie wydaj prawie nic hajsu. Profit. A ze strony twórcy tej kupy można przeczytać:

    Jakość
    Przedkładamy jakość nad ilość. Dążymy do stworzenia marki, która będzie wśród klientów znana z wysokiej jakości produktów i usług.

    •  

      @rrdzony: heh, taki stary dowcip mi sie przypomnial :

      Pan Bóg i Św. Piotr ogłosili przetarg na budowę bramy niebiańskiej. Pierwszy zgłosił się Arab. 
      - Masz projekt? - pyta Bóg. 
      - Mam - odpowiada Arab. 
      - Masz kosztorys? 
      - Mam. 
      - To ile Ci wyszło? 
      - 900 milionów. 
      - A dlaczego aż tyle? 
      - No cóż, 300 mln na materiały, 300 mln na robociznę, 300 mln zysku. 
      - Dobra, dziękujemy, odezwiemy się jak podejmiemy decyzję - mówi św. Piotr. 
      Następny wchodzi Niemiec. 
      - Masz projekt? - pyta Bóg. 
      - Mam - odpowiada Niemiec. 
      - Masz kosztorys? 
      - Mam. 
      - To ile Ci wyszło? 
      - 1,5 miliarda. 
      - A dlaczego aż tyle? 
      - No cóż, 500 mln na solidne niemieckie materiały, 500 mln na rzetelną niemiecką robociznę no i 500 mln zysku. 
      - Dobra, dziękujemy, odezwiemy się jak podejmiemy decyzję - mówi św. Piotr. 
      Następny wchodzi Polak. 
      - Masz projekt? - pyta Bóg. 
      - Nie - odpowiada Polak. 
      - Masz kosztorys? 
      - Nie. 
      - A ile chcesz za robotę? 
      - 3 miliardy 900 milionów. 
      - Skąd Ty wziąłeś taką kwotę?!
      - No cóż, miliard dla Pana Boga, miliard dla Św. Piotra, miliard dla mnie, a za 900 mln Arab zrobi bramę.

    •  

      @Wicia: Popłakałem się.

    •  

      @Wicia: Trafnie oddałeś sens bytu urzędnika od przetargu w Polsce... nice!!!

  •  

    Dobra panowie, pośmialiście się, pogadali, ale teraz przydałoby się wytłumaczyć laikom takim jak ja, tak prosto i po kolei o co tu chodzi i dlaczego to jest tak bardzo do dupy.

    •  

      @Nihility: @Zenio: Złamanie chyba wszystkich wzorców dobrego programowania, kod wyglądający jakby go pisali studenci 1szego roku na darmowych praktykach.

    •  

      @Nihility: program zrobił podwykonawca żeby zaoszczędzić kase która i tak była kiepska. Jakaś studentka napisała program a ktoś inny zarobił kokosy. Czyli jak zwykle w naszym rządzie ( ͡° ʖ̯ ͡°)
      edit: prawie jak autostrady albo wlasciwie jak wszystkie rzadowe pieniadze na przetargach

    •  

      @Myrten: spoko, spoko, ale skąd tą Agnieszkę wziąłeś mistrzu :)?

    •  

      @Myrten: A tak serio, kto pisze zgodnie z takimi wzorcami? Chyba tylko uczelnie i studenci, w normalnej pracy nie ma na takie rzeczy czasu. Sam pamietam, jak na uczelni mi wypominali, zeby czegos nie robic, a w robocie czasem trzeba bylo zastosowac.

      Plus podstawowa zasada, nigdy nie stosowac try/catch.

    •  

      @miki4ever: Wzorce są złe i dobre, burdel jest zawsze zły :)

    •  

      @Myrten: Czasem burdel jest nieunikniony:) Jak siedzisz u klienta, gdzie kazda minuta to strata sporej kasy, a kilkutonowa maszyna kreci sie jak glupia:)

      No, ale tutaj w sumie nie rozumiem problemu, ilosci danych do policzenia sa smieszne, raczej presji czasu tez nie bylo.

    •  

      @Nihility: Od najprostszej strony. Pisząc w jakimkolwiek języku programowania musimy trzymać się jakichś konwencji. Najbanalniejsze to, że wszystkie nazwy zmiennych są w jednakowym języku, najlepiej po angielsku. jakaśMetodaCośRobiąca jest to składania z javascript. W C# używamy JakaśMetodaCośRobiąca. Oczywiście kwiatków jest więcej, ale takie banały świadczą o tym, że pisał to kompletny laik, nad którym nikt kompetentny nie czuwał. I wyszło takie gówno. Jakby jeszcze działało ( ͡° ͜ʖ ͡°)

    •  

      @Myrten: student 1szego roku, ewentulanie studentka 4tego :P

    •  

      @miki4ever: Mało czasu było na napisanie, ale powierzyli robotę studentom :P

    •  

      Pisząc w jakimkolwiek języku programowania musimy trzymać się jakichś konwencji. Najbanalniejsze to, że wszystkie nazwy zmiennych są w jednakowym języku, najlepiej po angielsku.

      @czupek: Nierealne jezeli masz projekt na wiecej niz 4-5 osob. No chyba, ze firme stac na to, zeby poswiecic czas jednej osoby na takie zabawy, ale nie spotkalem sie jeszcze z czyms takim.

    •  

      @miki4ever: nigdy nie stosować try/catch? nie bardzo rozumiem o co ci chodzi szczerze mówiąc ... w sensie co jest złego w łapaniu wyjątków?

    •  

      @miki4ever: Czyli, że jak macie w formalizacji kodu, że piszecie po angielsku nazwy klas, to masz to w dupie? Czy to przekracza twoje umiejętności?

    •  

      @LooZ: Nie spotkalem sie jeszcze z firma, ktora by takie rzeczy formalizowala. Zasady sa proste, projekt ma dzialac, klient ma byc zadowolony.

    •  

      @vokus: Najlepsza opcja na brak bledow, ewentualne ich pozniejsze eliminowanie. Oczywiscie jest tez druga metoda, ktora moj kolega stosowal, ktory bral calego maina w try/catch i jazda:)

    •  

      @miki4ever: Nie gadaj, że zezwalają wam na śmietnik w kodzie, byle działał.

    •  

      @miki4ever: To nie startuj do gamedevu ;)

    •  

      @czupek: Jak najbardziej. Sam to troche w mojej grupie normuje ostatnio, ale najwazniejsza jest kasa. Klient ma generalnie w dupie jak cos dziala, ma dzialac i tyle. Jakbym powiedzial mu, ze musi zaplacic za dodatkowy tydzien, zeby kod byl ladny to bysmy sie posmiali i by poszedl do konkurencji:)

    •  

      @LooZ: W zyciu:) Ja zreszta z programowaniem mam juz coraz mniej wspolnego.

    •  

      @miki4ever: Naprawdę macie gównianych informatyków w firmie. Pisanie wszystkiego po angielsku to nie jest żaden problem, chyba, że piszesz kod pierwszy raz. ( ͡° ͜ʖ ͡°) Jak można być informatykiem i pisać zmienne "lista", "nazwisko" a obok "name" "name2v2" ?

      No i ten Kalkulator1 nie działa

    •  

      Nierealne jezeli masz projekt na wiecej niz 4-5 osob. No chyba, ze firme stac na to, zeby poswiecic czas jednej osoby na takie zabawy, ale nie spotkalem sie jeszcze z czyms takim.

      @miki4ever: Nierealne? Trywialne! Wystarczy podpiąć StyleCopa do builda na serwerze CI. U mnie standard. Projekt kilkudziesięcioosobowy.

    •  

      @czupek: Oczywiscie nie mamy samych mistrzow programowania jak na wykopie, ale wykonuja swoja prace, klienci sa zadowoleni, wiekszosc zamowien jest realizowana w czasie.
      Kiedys mialem takiego kolesia co sie bawil w formalizacje, po 6 miesiacach go nie bylo, nie potrafil na siebie zarobic.

      Sam uwazam sie za mocno sredniego programiste, ale w biznesie to w zupelnosci wystarcza, wazniejsze sa inne umiejetnosci.

    •  

      @o_40855: Zaraz Ci wypali, że nie mają CI, a w ogóle to piszą w VSExpress

    •  

      @czupek: Bo nie mamy:) Nie ma takiej potrzeby. Wszystko zalezy od specyfiki projektow, u nas zazwyczaj jest to 1 osoba na projekt, gdzie zazwyczaj mowimy o calkiem unikalnym programie na jakas maszyne, wiec takie rzeczy sa zbedne.

    •  

      @miki4ever: idz do korpo to zobaczysz. w dobrze prowadzonym projekcie defijiuje sie formatowanie kodu, zasady nazewnictwa mefod, np zawsze czasowniki itp. i duzo innych. dzieki temu kod jest wlasnie podobny wszedzie, w jedhym stylu a nie jak na jarmarku

    •  

      @miki4ever: Ale robicie w normalnym Visual Studio ? Poza tym StyleCop czy FxCop można normalnie pod VS włączyć. Nie wspominając o R#

    •  

      idz do korpo to zobaczysz.

      @olektrolek: Bylem jakies 12 lat temu, nigdy juz nie wroce. Za bardzo mnie wk#!!ia taka praca.

      dzieki temu kod jest wlasnie podobny wszedzie, w jedhym stylu a nie jak na jarmarku

      @olektrolek: W przypadku korporacji widze sens, bo tam jeden kod czasem wykorzystuja pozniej tysiace osob, ale w malej firmie to juz czesto jest strata czasu.

    •  

      @czupek: Tak, 2010:) W sumie nawet nie wiedzialem o tym, ze jest tez Express, z darmowych wersji znalem tylko BI.

      A ten StyleCop jest po niemiecku tez? Bo jak nie to juz nie przejdzie:)

    •  

      @czupek: Nierealne jezeli masz projekt na wiecej niz 4-5 osob. No chyba, ze firme stac na to, zeby poswiecic czas jednej osoby na takie zabawy, ale nie spotkalem sie jeszcze z czyms takim.

      @miki4ever: Nie masz racji. To, że u was tworzy się kod do dupy jakości, byle by działał, nie znaczy, że tak jest na całym świecie. Pracowałem w różnych projektach, ostatni ~80 programistów w kilku krajach, ponad milion linii kodu i wszyscy jakimś cudem potrafią się trzymać konwencji. Aha, nie ma też specjalnej osoby, która tego pilnuje. Po prostu zespół wie jak ma wyglądać kod, a nowe osoby szybko uczą się np. podczas review. Jeśli nie dbacie nawet o tak proste sprawy, to boję się myśleć, jak wyglądają rzeczy, które dużo trudniej sformalizować.

    •  

      @miki4ever: Brzmisz jak programista php za 1500zł. Jak zaczniesz zarabiać pięcio cyfrowe sumki miesięcznie na rękę to możemy wtedy rozmawiać o jakości kodu :)

    •  

      @myotisblythii: Wiesz, ja tam dbam, moja grupa ma jedna strukture projektow, tak samo zmienne udalo mi sie do jednego jezyka i formatu sprowadzic, ale czesc bibliotek typu sterowniki OPC itp. byly tworzone przez inne grupy, ktore maja to w dupie:) Walczyc z tym nie zamierzam, bo bardzi mi to nie przeszkadza, a nie to jest najwazniejsze.

    •  

      @PanMarcepan: Bys sie zdziwil:) Przede wszystkim od kilku lat nie jestem juz programista.

    •  

      @miki4ever: StyleCop nie patrzy na język w jakimś piszesz ( ͡° ͜ʖ ͡°) Nie sprawdzi ci ortów, ale przypilnuje by zmienne były pisane zgodnie z konwencją zapisu, bo wiesz zmienne lokalne, globalne, nazwy metod czy propertisów mają ujednoliconą, microsoftową konwencję.

      Kto nigdy nie zrobił zmiennej var dupa niech pierwszy rzuci kamień ( ͡° ͜ʖ ͡°)

    •  

      @miki4ever: Jeśli chodzi tylko o zewnętrzne biblioteki, to jestem to jeszcze w stanie zrozumieć ;)

    •  

      bo wiesz zmienne lokalne, globalne, nazwy metod czy propertisów mają ujednoliconą, microsoftową konwencję.

      @czupek: Tak, problem jest taki, ze C# to jeden z wielu jezykow, w ktorych sie u mnie pisze, dodatkowo wiekszosc projektow to sa proste systemy do komunikacji z maszyna, wiec ciezko na kims wymusic konwencje, kto wiekszosc czasu robi inne rzeczy.

      Sprawdze to jutro, jak zadziala to moze spowodujesz, ze dostane zawalu kilka miesiecy pozniej:)

    •  

      StyleCop nie patrzy na język w jakimś piszesz

      @czupek: Patrzy, sprawdza literówki w angielskich nazwach.

    •  

      @miki4ever: Popełniasz jeden podstawowy błąd w założeniach. Kod piszesz raz, czytasz go wielokrotnie. Może i początkowo koszty klienta są niższe, ale jeśli kiedykolwiek będziesz rozwijał projekt napisany jak to coś ze znaleziska... życzę powodzenia. Wtedy koszty jakichkolwiek zmian rosną niebotycznie. Im większy projekt tym szybciej napisanie "na szybko" powoduje więcej kosztów niż początkowe napisanie porządnie. Myślisz, że wszystkie metodyki, wzorce projektowe itp. itd. wymyślono, dlatego, że komuś się nudziło?

    •  

      ale jeśli kiedykolwiek będziesz rozwijał projekt napisany jak to coś ze znaleziska... życzę powodzenia.

      @Yahoo_: Nigdy sie jeszcze nie zdarzylo od kilkunastu lat, zeby taki projekt byl rozwijany. Sa to na tyle unikalne systemy, ze nie ma to sensu. Jak klient wymienia maszyne to wiekszosc trzeba od nowa tworzyc. Oczywiscie sa biblioteki ogolne, ktore sa zrobione w odpowiedni sposob, niektore maja juz ponad dekade i nadal daja rade:)

    •  

      @miki4ever: Wystarczą style guide'y + pull requesty, gdzie każdy sprawdza kod zanim on trafi do głównego brancha. Bardzo łatwo wtedy o utrzymanie konwencji.
      Dobre IDE też dużo daję
      - autoformatowanie kodu
      - sprawdzanie błędów ortograficznych itp.
      - sprawdzanie pewnych patternów, aby nie zdażały się kwiatki typu: "if (something) { return true }"
      - i inne :)

      Musi być dobry team leader, który tego będzie pilnował lub zachęci wszystkich, aby tego pilnowali.

      Ja osobiście nie wyobrażam sobie pracy, gdy konwencje pisania kodu nie są utrzymane.

    •  

      @Mephistofeles: W angielskich zgadzam się, ale jak zaczniesz pisać po niemiecku czy polsku, to się nie przyczepi.

    •  

      kwiatki typu: "if (something) { return true }"

      @czupek: co tu jest konkretnie kwiatkiem?

    •  

      @qwertyu: to nie ja pisałem. Ale można taką konstrukcje ładnie zrefaktoryzować

    •  

      @czupek: Wiem, że nie Ty, chodzi mi o to co w tej konstrukcji jest nie tak i jakbyś to refaktoryzował?

    •  

      @Nihility: mieszanie interfejsu z logiką aplikacji, podstawowy błąd

    •  

      @miki4ever: Kazda szanujaca sie firma xD

    •  

      @qwertyu: Zależy od warunku. Ale lepiej wygląda return something ? coś tam : coś tam innego

    •  

      @czupek: O ile w przypadku false też miałby być return - z podanego przykładu wcale tak nie wynika

    •  

      @qwertyu: W sumie masz rację. Nie wiem po co ciągnę ten temat, skoro to nie ja go zacząłem.

    •  

      @czupek:

      Zależy od warunku. Ale lepiej wygląda return something ? coś tam : coś tam innego
      Nie zawsze tak się da. W C# masz ściślejszą kontrolę typów niż w PHP i nie możesz zrobić jakiś typ : inny typ.

      Nie wiem jak tutaj, ale np. przy bazach często trzeba zwrócić DBNull.Value i wtedy dupa.

      if (something) { return true }
      Poza tym tu jest return potraktowany jak break. Jest warunek to wyjdź. To o czym piszesz to zastąpienie
      if (something)
      return true;
      else
      return false;

    •  

      @radeks11: Dotyczy to również zwracania kolekcji czy nawet stringa. Lepiej zwrocic empty collection i string.empty niż null

    •  

      @czupek:

      niż null
      DBNull.Value to co innego niż null.

    •  

      Nierealne jezeli masz projekt na wiecej niz 4-5 osob

      @miki4ever: Dlaczego nierealne? Dwa warunki:
      1) masz w firmie wdrożone coding standards, z którymi wszyscy mają obowiązek się zapoznać
      2) podczas review kodu zwraca sie uwagę na nieprzestrzeganie tych standardów

    •  

      Nie spotkalem sie jeszcze z firma, ktora by takie rzeczy formalizowala.

      @miki4ever: No to ja właśnie np. w takiej pracuję. Dla każdego języka firma ma standardy kodowania, których nalezy przestrzegać. Standardy okreslaja nawet to, w jaki sposób nalezy używać wcięć w blokach, albo jaka ma być kolejność składników w wyrażeniach - x+1 czy 1+x
      Oczywiście do drobnych odstepstw od tych standardów, podczas gdy kod ogólnie pozostaje mozliwy do zrozumienia i modyfikowania przez inną osobę, nikt się nie czepia, ale jakieś powazniejsze naruszenia standardów oczywiście zostaną zgłoszone jako błąd na review.

    •  

      @Nihility: Już tłumaczę. Podczas programowania popełnia się błędy. Zawsze, nawet w przypadku najlepszych programistów. Należy więc tak pisać kod, aby był jak najkrótszy, a błędy dało się łatwo znaleźć i naprawić. Natomiast kod Kalkulatora nie dość, że jest zagmatwany, nadmiarowy i niezarządzalny, to jeszcze złośliwie ukrywa wszelkie możliwe komunikaty o błędach. Z tego wniosek, że nikt, kto ma jakiekolwiek doświadczenie w programowaniu, tego nie nadzorował.

  •  

    Ja to bym jednak tej dziewczynie dal spokoj. To nie jej wina, ze programuje jak programuje. Winny jest ten kto jej to zlecil i ten kto ten kod przyjal.

  •  

    A ja myślałem, że refaktoruję gówniany kod.

    --
    ale to po dekompilacji, więc w sumie ciul wie jak to wyglądało wcześniej - chyba, że C# można to zrobić dokładnie. Jest na sali jakiś specjalista?

    •  

      @r3m0: Kod tak wyglądał przed dekompilacją, mógł mieć jakieś komentarze.

    •  

      @r3m0: Ten kod faktycznie jest gówniany, przez dekompilacje to są tylko takie rzeczy jak pełne nazwy klas z namespace'ami

    •  

      @orian: No to po prostu ło k%??a.
      Dobra, wiem, że mieli dramatycznie mało czasu, ale tu widać że ktoś ma bardzo c@?$@wy styl, albo po prostu nie umie programować. Samo mieszanie polskich i angielskich słów w nazwach zmiennych świadczy, że reszta musi być równie zajebista. Ucinałbym łapy za takie coś na review.

    •  

      znie mało czasu, ale tu widać że ktoś ma bardzo c!!?#wy styl, albo po prostu nie umie programować. Samo mieszanie polskich i angielskich słów w nazwach zmiennych świadczy, że reszta musi być równie zajebista. Ucinałbym łapy za takie coś na review.

      @r3m0: 6ciopak o to, że oni nie mają code review ;-)

    •  

      @r3m0: W ogóle nie używają konwencji C#-owych - nazwy metod są z małej litery tak jak w Javie czy Javascripcie zamiast z dużej. Świadczy to tylko o doświadczeniu piszących

    •  

      @orian: Wiadomo :-)
      Z drugiej strony jeśli byłby tam ktoś bardziej ogarnięty to chyba by się na drugi dzień zwolnił po zobaczeniu czegoś takiego na review.

      @Myrten: Oni nie używają żadnych konwencji.

    •  

      @Myrten: Byłoby też spoko, gdyby ktoś wpadł na pomysł napisania getterów w postaci właściwości.

    •  

      @Myrten: W .NET sytuacja wygląda tak, że przy kompilacji "tracą się" właściwie tylko komentarze i nazwy zmiennych lokalnych w metodach. Tutaj nawet zmienne się nie straciły, gdyż program był dystrybuowany wraz z plikiem .pdb (symbole debugowania), co pozwala wnioskować, że jest to wersja skompilowana w trybie Debug, a nie Release.

      Wersja oryginalna kodu źródłowego może się więc różnić od zaprezentowanej tutaj dwiema rzeczami
      1. Mogła mieć jakieś komentarze (szczerze wątpię)
      2. Przypuszczalnie kod był inaczej sformatowany. Zapewne gorzej.

    •  

      @o_40855: Jak dla mnie to się różni nazwami typu System.Security.Cryptography.X509Certificates.X509Certificate certtmp zamiast X509Certificate certtmp

    •  

      @r3m0: @Myrten: Ja jestem cholernie ciekawy w jakich firmach wy pracujecie. W sumie w kilku miejscach juz bylem, w 3 krajach na swiecie i nie widzialem jeszcze sytuacji, zeby zmienne kodu byly w jednej konwencji. W sumie wprost przeciwnie, widzialem nawet jedna klase ze zmiennymi 4 jezykach:) Komentarze? Spotkalem sie na uczelni, nie kojarze, zeby ktokolwiek mial czas w normalnej robocie je robic.

    •  

      @miki4ever: Tzn nie ma czasu na dopisanie linijki kodu, ale jest czas potem grzebać w kodzie i szukać ocb? Ja wymagam od moich programistów zarówno pisania komentarzy jak i trzymanie się formalizacji kodu. A mam ich teraz 7 od pół roku doświadczenia do 8 lat doświadczenia.

    •  

      @LooZ: U nas jest ponad 60:) Tu tez specyfika projektow wchodzi w gre, raczej jak cos dziala, to nie zdarza sie, ze nagle po kilku latach przestaje, a niektore systemy juz 2 dekade dzialaja.
      Tzn. tylko bilblioteki ogolnie uzywane sa mocno sformalizowane, rzeczy specyficzne dla klienta to juz wolna amerykanka.

    •  

      @LooZ: Dobry kod + testy i komentarze są praktycznie zbędne. Przydają się tylko w przypadkach jakiś hacków itd.

    •  

      @Szab: a nie jest tak ze gettery/settery z wlasciwosci sa w czasie kompilacji zmieniane na metody?

    •  

      @jjczopek: Są, ale dekompilator by je rozpoznał i zdekompilował prawidłowo do właściwości. Te były pisane ręcznie.

    •  

      @jjczopek: tak właśnie jest, mimo wszystko po zdekompilowaniu widać różnice bo takie metody generowane przez kompilator mają atrybut CompilerGenerated

      W tym wypadku kod zdekompilowany:
      1. Nie ma komentarzy
      2. Ma inne formatowanie
      3. Ma zoptymalizowane warunki logiczne
      4. Zoptymalizowane pętle (raz widziałem jak for z break, zamienił na while w którym ustawiał counter na wartość powodującą wyjscie z pętli)

      A wszystko to z powodu mechanizmu refleksji który do działania potrzebuje nazw zmiennych/metod itp.

    •  

      @Yahoo_: Tzw. 'samokomentujący się kod' :). Ale taka prawda. Porządny kod swietnie się czyta przy śladowej ilości komentarzy

    •  

      @idiot: w 99% przypadku lepszym rozwiązaniem od komentowania jest wydzielenie metody o nazwie zastępującej komentarz.
      Aa, zapomniałbym - oczywiście komentarze się przydają do opisu API - np. coś takiego w C# - ale to dla IDE, a nie dla czytającego kod najczęściej.

    •  

      @Yahoo_: Dokładnie. Spróbuj to przetłumaczyć na UG prowadzącym którzy lata 90 mocne

    •  

      ale to po dekompilacji, więc w sumie ciul wie jak to wyglądało wcześniej

      @r3m0: C# to język interpretowany, więc trudno tutaj o dekompilację w takim sensie jak przy dekompilacji kodu natywnego na HLL

    •  

      @pitus_bajtus: C# nie jest interpretowany. Jest kompilowany do CIL. CIL zaś jest kompilowany do kodu maszynowego przez JIT. W znalezisku mamy efekt dekompilacji z CIL-a do C#, która jest bardzo wierna.

  •  

    Wykopki
    Po 1. nie mamy pewnosci kto jest programistom w tej firmie i w tym konkretnym projekcie
    Po 2. To nie wina niedoswiadczonego programisty ale menadzerow / prezesow ktorzy zezwolili mlodszemu programiscie realizowac taki projekt bez nadzoru
    Po 3. Ktos to musial odebrac !

    Nie atakujcie programistow ale Firme, Prezesa, PKW. Oni sa odpowiedzialni za ten burdel i powstaly problem.

    •  

      @michalfranc: Dlatego w tego typu projektach do testowania bierze sie jakas zewnetrzna firme, ewentualnie wykorzystuje wlasne IT.
      Jedynie kogo mozna winic w tej sytuacji to PKW, ktore podeszlo do problemu bez jakiejkolwiek wiedzy jak powinno sie taki projekt przeprowadzic.

    •  

      @miki4ever: Oni tam maja ludzi od IT, ktorzy to odebrali. Oni powinni byc zlinczowani i napietnowami a nie jakas biedna dziewczyna, ktora trafila do firmy krzak! Dlatego opanujcie sie.

      Pewnie zarabia 2k brutto ... meczy sie teraz nie milosiernie i kazdy obarcza ja wina! A prezesi, menadzerowie, PKW wyciagnelo kilkadziesiat tysiecy zlotych ! Ich odpowiedzialnoscia jest zapewnienie zaplecza wyspecjalizowanej kadry ktory zrealizuje projekt + nalezyte odebranie projektu. Ktos sie pod tym podpisal! I tutaj marzyloby mi sie zeby @FaktyTVN podjely temat.

      To tylko wierzcholek gory lodowej. Podejrzewam ze tak wlasnie wygladaja wszystkie projekty publiczne! Zwalanie ciezkiej roboty na studentow (firma na C), wyciaganie grubych kokosow i zwalanie winy na bogu ducha winne osoby.

    •  

      Oni tam maja ludzi od IT, ktorzy to odebrali.

      @michalfranc: Patrzac na wielkosc firmy, nie sadze.

      Podejrzewam ze tak wlasnie wygladaja wszystkie projekty publiczne!

      @michalfranc: Bys sie zdziwil jak niektore wieksze korporacje w Warszawie funkcjonuja. Najpierw wygrywaja przetarg, nastepnie outsorcing na kilka poziomow, gdzie na koncu masz bande studenciakow:)

    •  

      @miki4ever: chodzilo mi o PKW. Maja dyrektora IT, ktory ciagnie z waszych podatkow i on to odebral! Podpisal sie pod protokolem.

    •  

      @michalfranc: Myslisz, ze jakas firma zgodzilaby sie na to, zeby klient ogladal kod?
      Zawalil tym, ze nie sprawdzili aplikacji, ale wglad do kodu raczej by tu nic nie zmienil.

    •  

      @miki4ever: Wiadomo, ale jakosc kodu wskazuje na to ze projekt byl prowadzony bardzo nieprawidlowo. Wiec mozemy domniemywac ze inne etapy projektu wygladaly podobnie.

    •  

      Myslisz, ze jakas firma zgodzilaby sie na to, zeby klient ogladal kod?

      @miki4ever: Oczywiście. To powszechna praktyka.

    •  

      Komentarz usunięty przez autora

    •  

      @o_40855: Dokładnie, nie wiem skąd zdziwienie miki4ever.

    •  

      @michalfranc: racja. Dziewcze pewnie dostało za to jakieś marne grosze i nawet średnio jej się chciało pisać to badziewie za taką kasę. Natomiast całe szefostwo PKW do dymisji, a w firmie kontrole niku, skarbówki i cba.

    •  

      @michalfranc: Dobrze prawisz, ale popracuj nad ortografią, bo źle się to czyta.

  •  

    Nie znam się na programowaniu, więc może ktoś wytłumaczyć czy można uznać to za legitne? Może to fake?

  •  

    z linku na goldenline: umiejetnosci Adobe Encore, c#, c++, CSS3, Git, HTML 5, JavaScript, MySQL, Adobe Photoshop, PHP, RESTful WebServices, SQLite, .NET, AngularJS, Drupal 7, MSSQL, Zend ,ramework (podstawy), Adobe InDesign, Adobe After Effect CS5
    no chyba nie ( ͡° ͜ʖ ͡°)

  •  

    Wytłumaczcie czemu to jest tak bardzo c%?#!we zamiast wklejać pojedyncze linijki kodu i się z tego śmiać. Humor programistów jest bardzo ezoteryczny :P

  •  

    Wykopki,
    Nawet jeżeli ten cały kod napisała ta dziewczyna, to dajcie jej spokój. Zrobiła to tak jak umiała, a nie każdy jest od razu mistrzem w każdej dziedzinie. To tak, jakbyście winę za katastrofę budowlaną próbowali zrzucić na chłopka noszącego cegły, a nie na architekta, osobę odpowiedzialną za odbiór, a ostatecznie firmę, która budowała obiekt. Tutaj zdecydowanie dupy dała firma, która podjęła się napisania tego systemu, a oszczędziła na doświadczonych programistach i testerach, którzy gdyby byli w projekcie, to na 100% wyłapali by mnóstwo błędów już na etapie review i testów.

    Pomijam już fakt, że nie macie nawet 100% dowodów, że to ona. Możecie zniszczycie jej życie, tylko dlatego, że wersja, która poszła w świat była kompilowana akurat na jej komputerze.

    •  

      @myotisblythii: dokładnie, nikt nie powinien jej powierzać takiego zadania. Kod to bagno tak czy tak, ale masz racje, nie wiadomo w ogóle czy to ona pisała. Firma się skompromitowała po całości moim zdaniem, pkw tak samo. Dziewczynę bym zostawił w spokoju bo akurat programista czy programistka ponosi tu najmniej winy.

  •  

    Wieszanie psów na dziewczynie jest co najmniej idiotyczne. Studiuje, potrzebuje kasy, dali jej taką a nie inną robotę... zrobiła. Tak jak umiała.

    Beknąć powinna osoba która dała tę robotę studentce, ale jej to akurat należy szukać w jakimś ciepłym raju podatkowym, który nie zwykł rozpoznawać pozytywnie wniosków o ekstradycję.

  •  

    Każdego specjalistę można zastąpić skończoną liczbą studentów... - zwykle jednym.
    Janusz Filipiak

    #cytatywielkichludzi #pdk

  •  

    Cała demokracja oparta na początkującym programiście. Jakie to typowo demokratyczne :-)

  •  

    Ciekawe czy dev płakał jak commitował

  •  

    @Myrten

    System.Threading.Thread.Sleep(1000);
    k$?@a jak widzę coś takiego to wiem, że będą problemy...
    wątki, wątki, wątki...

    http://stackoverflow.com/questions/19995938/why-using-system-threading-thread-sleep-is-a-bad-practice

    poproszę o 50.000 za audyt...

  •  

    Kompletnie nie wiem o czym mowa, ale wykopie!

  •  

    ten uczuć kiedy wykopki doszli nawet do studentki, autorki programu. Nie wspominając o rozszyfrowaniu kodu źródłowego. O taki wykop nic nie robiłem!

    źródło: i.imgur.com

  •  

    Muszę poruszyć pewne kwestie - czepiacie sie kodu, który został zdekompilowany chce zwrócić uwagę, że nie zawsze jest w 100% kodem wejściowym.
    Krytykujecie nazwy zmiennych ale nie widziliście w 100% specyfikacji i wymagań.
    Widzę, że są wycinane losowe fragmenty kodu i z nich się nabijacie nie znając kontekstu, a swoje opinie budujecie na podstawie jak wyżej napisałem zdekompilowanego kodu.
    Najprosszy przykład budowanie XML'a z string'a -być może faktycznie warto użyć jakieś biblioteki no właśnie ale - ilu z was analizowało licencje -zapewne usłyszę, no ale są biblioteki opensource a czy można użyć w projekcie rządowym?- czy nie jest to licencja wirusowa np GPL itd itp. Jasne na studiach i w domu nie trzeba o tym myśleć :) see u torrent ;)
    Wiecie ile czasu zajmuje prawnikom taka analiza?
    Firma miała na zrobienie systemu 3 miesiące, i zapewne nie mieli na to czasu- pomijam czy jest to wykonalne czy nie i jaki PM zgodził się na ten projekt.
    Tylko strasznie denerwuje mnie takie krytykactwo.

    Nie jestem związany z tą firmą ani z PKW poprostu ilość jadu skłoniła mnie do napisania tego komentarza.
    Acha jestem programistą z naprawdę dużym doświadczeniem ale nie zdecydował bym się na wygłaszanie wniosków, które tutaj przeczytałem.

    Pozdrawiam

    •  

      Krytykujecie nazwy zmiennych ale nie widziliście w 100% specyfikacji i wymagań.

      @mrgcypher: Na jedno wychodzi, jak nie kierownik projektu to jakiś inny bezmózg musiał to wymyślić.

    •  

      @mrgcypher: Gadasz totalne bzdury. Licencja do korzystania np. Z wbudowanego linq to xml? Licencja do łapania wszystkich wyjątków i nie robienie z nimi praktycznie nic? Licencja na klasy po 1000 loc? Jak dokumentacja wymaga głupiego nazywania zmiennych i nazywania ich czasem po polsku czasem po angielsku, a czasem po żadnym znanym mi języku to znaczy ze jest do dupy i pisana przez idiotę. Pozdrawiam

    •  

      @mrgcypher: generalnie bym się z tobą zgodził, ale ten kod naprawdę straszna fuszerka! Może faktycznie byłoby tak jak piszesz, gdyby tylko wspomniane przez Ciebie przypadki były jedynymi, ale praktycznie 100% kodu jest takie.

      A tak swoją drogą nie potrzeba żadnych zewnętrznych bibliotek do budowania XML'a:
      http://msdn.microsoft.com/pl-pl/library/system.xml.xmlwriter(v=vs.110).aspx

    •  

      @mrgcypher: Widocznie nie znasz .NETa jak piszesz że do XML'a potrzeba zewnętrznej biblioteki.

    •  

      @destroner: racja trochę z rozpędu bardziej chciałem nakreślić problem ale źle wybrałem narzędzie.

    •  

      @mrgcypher: sugerujesz, że nazwa zmiennej wg. specyfikacji to name2v2...albo zmienna o wiele mówiącej nazwie "a" :D Po za tym serio mówisz o licencji kiedy klucz do zew. aplikacji jest zaharkodowany w kodzie? Znamy kontekst mamy cały kod. Serio normalne jest wg. ciebie zagnieżdżanie 5 for each'ów w sobie? LINQ to XML jeśli chodzi o działanie na xml'ach. Nie programowałeś nigdy w C# prawda? ( w ogóle programowałeś kiedyś ? )

    •  

      @vokus: nie wiem nie widziałem dokładnych zaakceptowanych wymagań dlatego nie czepiam się. Chce tylko nakreślić złożoność problemu.

    •  

      @mrgcypher: 3 miesiące to jest oczywiście zbyt mało czasu na cokolwiek, ale winę tu bez wątpienia ponosi firma i pkw. Programisty bym nie winił, bo ktoś komuś to zlecił, ktoś to zatwierdził, ktoś to (chyba) zaprojektował. Tak czy tak, ten kod jest żałośnie śmieszny i trudno się z tym spierać.

    •  

      @mrgcypher: Do wszystkiego, co powiedzieli przedmówcy, dodam jeszcze odpowiedź na argument o licencjach. Ten projekt to śmietnik przeróżnych bibliotek. Wygląda, jakby były dobierane na zasadzie: "Znajdźmy cokolwiek do obsługi certyfikatów", "Znajdźmy cokolwiek do obsługi kodów paskowych", "Znajdźmy cokolwiek do obsługi dokumentów Office'a" itd. Mają przeróżne licencje, niektóre MIT, niektóre jakieś swoje specyficzne... Nie wierzę, że ktoś się nad tym zastanawiał. Było w NuGecie, to pobrali.

    •  

      @o_40855: Jest coś w GPL? Jak tak, to można by zażądać źródeł

  •  

    Niektóre kwiatki:

    Chcemy drukować, ale nie umiemy, ale możemy wygenerować HTML i użyć Internet Explorera. Problem: IE drukuje z nagłówkiem i stopką. Rozwiązanie: wyłączyć nagłówek i stopkę globalnie: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/PrintTest.cs#L25

    Problem: zrobiliśmy literówkę w słowie kandydat, a by działało, wszędzie musi się zgadzać. Rozwiązanie: zróbmy tę samą literówkę 21 razy tu: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/ProtocolForm.cs i 18 razy tu: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1/printProtocolNew.cs

    Problem: musimy stworzyć 6 folderów, a podczas tworzenia folderu mogą wystąpić błędy. Rozwiązanie: Dla każdego folderu obsłużmy 7 różnych błędów, dając nam 6×7=42 miejsca obsługi błędu: https://github.com/wybory2014/Kalkulator1/blob/master/Kalkulator1.instalClass/Instal.cs

    Problem: musimy napisać plik AssemblyInfo, a nie umiemy. Rozwiązanie: skopiujmy go od HP: https://github.com/wybory2014/Kalkulator1/blob/master/Properties/AssemblyInfo.cs

    •  

      @vytah: AssemblyInfo.cs jest generowane przez VS pewnie robione na komputerze HP

    •  

      @vytah: Z tym AssemblyInfo to jest tak, że Visual Studio tworzy go automatycznie i umieszcza Copyright info wzięte z tego, co wpisałeś podczas instalacjiVisual Studio w polu Właściciel, czy jak ono tam się nazywa. A podczas instalacji pewnie klikali tylko dalej, dalej, dalej, więc zostały informacje wzięte z instalacji systemu operacyjnego. A wtedy też klikali dalej, dalej, dalej więc zostały informacje wpisane fabrycznie przez producenta komputera.

  •  

    Obawiam się, że zakończeniem akcji będzie utworzenie specjalnej komórki Nadzorującej Przetargi Informatyczne w każdej państwowej instytucji, w której skład wchodzić będzie dyrektor, kierownik oraz technik informatyk...

  •  

    To nie wina programist(ki) że kod wygląda jak wygląda. Zakładając,że to wszystko prawda...

    23-letnia osoba w przerwie między studiowaniem pisze niezbyt skomplikowany ale jednak wymagający wiedzy o optymalizacji system dla całego kraju. Co lepszego w 3 miesiące mogła napisać osoba o kompetencjach junior z której jakiś IMBECYL zrobił szefa projektu? I która, co gołym okiem widać, nie miała żadnego wsparcia które zapewniłby ktoś kto ma jakiekolwiek doświadczenie komercyjne.

    Prawdopodobnie banda czerwonych leśnych dziadków wybrała firmę cebulaka który zrealizował projekt dla całego kraju tak jak się realizuje apkę na zaliczenie podstaw programowania na jakichś "laborkach" na studiach. "Hurr durr napisz"... Wykonawcy (temu kto to pisał) zapłacono pewnie za to 6000 brutto albo w ogóle nic...

    Słuchaliście geriatrii z PKW, która "by mogła zrobić se sama ale potrzebuje 15 pracowników minimum"? Ja p?%$%$@ę, macie wy mózgi?

    Szacunek dla programistki. W jej wieku, w takim czasie i w takiej gówno-firmie sam bym tego lepiej nie zrobił.

  •  

    1. Jak powinno być:

    PKW ustala z najwyższymi państwowymi instytucjami, która z nich (ABW, wywiad, wojsko, itp.) zrobi system informatyczny do wyborów. Najlepiej skalowalny, dający się zastosować do wszystkich rodzajów głosowań i referendów, obliczony na 15-20 lat sprawnego działania. Czas rozpoczęcia - najlepiej po ostatnich wyborach.

    Jak prawdopodobnie było:

    - Janusz, Janusz! Heniek mi dupę od rana truje, że wybory za trzy miesiące, a my nie mamy gotowego programu do wyborów! Co z tym robimy?
    - No jak to co, walnij przetarg. Podobno syn Mirka ma firmę informatyczną w Łodzi, może będzie zainteresowany? Myślę, że pół bańki mu wystarczy, za klepanie na komputerze to i tak dużo, przecież to prosta robota, siedzo tylko przy tych komputerach i klepio w te klawiatury.
    ---

    2. Jak powinno być:

    Są trzy miesiące do wyborów, wszyscy wiedzą, że nie da się tego sensownie zrobić w tak krótkim czasie. Nikt nie staje do przetargu, PKW ogłasza z góry ręczne liczenie głosów i wyciąga wnioski na przyszłość.

    Jak prawdopodobnie było:

    - Zośka, Zośka, ale nam robotę nagrałem! Za pół bańki prawie, po chacie sobie kupimy i jeszcze zostanie. Robota prosta, program zliczający wyniki wyborów, każdy student to potrafi!
    ---

    3. Jak powinno być:

    Do dobrze opłacanego zespołu uznanych w branży specjalistów dołącza studentka Agnieszka, by pod ich okiem szkolić się, rozwijać i wykonywać proste zadania programistyczne. Cała grupa pracuje nad bardzo ważnym projektem: wdrożenie nowego systemu informatycznego wspierającego zliczanie głosów w nadchodzących wyborach samorządowych.

    Jak prawdopodobnie było:

    Do studentki Agnieszki podbiega szef:
    - Pani Agnieszko, w CV i na Goldenline ma pani 1000000 500 100 900 różnych umiejętności. Pracuje tu pani dopiero od 5 miesięcy i już jest pani jednym z naszych lepszych pracowników. Mam dla pani zadanie specjalne: trzeba napisać nowy kalkulator wyborczy. Oto specyfikacja, jeśli się pani uda, będzie 500 zł podwyżki. Brutto oczywiście. Proszę zabierać się do pracy, ma być gotowe na za trzy miesiące.
    - To cała dokumentacja? Dostanę kogoś doświadczonego do wsparcia?
    - Dobrze wie pani, że nie. Jako studentka 4 roku i z dwuletnim doświadczeniem jest już pani ekspertką w naszej firmie, składającej się przecież z dymanych na szaro darmowych stażystów z drugiego roku. Ja ani nikt z firmowej starszyzny nie pomożemy pani, bo przecież nikt z nas nie umie programować, takie z nas rekiny byznesu, że zaraz po studiach wraz z panią CEO założyliśmy własną firmę informatyczną. Niestety, nasz najlepszy programista, który siedzi tutaj, bo ma kredyty i nie chce mu się szukać nowej roboty, ma akurat pilne deadline'y w innych projektach.
    ---

    •  

      @Besteer: 4. Jak powinno być:
      Tydzień do wyborów, godzina 15:00. Właśnie zakończyły się ostateczne beta testy nowego oprogramowania wyborczego.
      Przewodniczący PKW z marsową miną oznajmia do kamery, że tym razem na wyniki trzeba będzie poczekać trochę dłużej, bo wszystkie głosy trzeba liczyć ręcznie. Firma pisząca program nawaliła i nie ma innej możliwości, nikt nie podpisze się pod dopuszczeniem programu, który nie działa, do udziału w tak ważnym wydarzeniu jak wybory.
      Oczywiście, żądanie zwrotu zaliczki za system komputerowy oraz spłacenia kary umownej już zostało wystosowane do firmy Nabino.

      Jak prawdopodobnie było:

      Godzina 21:00, siedziba Nabino w Łodzi:
      - Mati, a ty dokąd? Mówiłem: macie siedzieć z Agnieszką, aż zrobicie. Żadnego wychodzenia przed 23:00 z pracy, przerw śniadaniowych, łażenia do kibla. Wracaj do ołpenspejsa!
      - Ale szefie, to jest jakaś porażka! Tam są metody na 25000 linii, żaden człowiek tego nie ogarnie. Nie da się tego zrobić na za tydzień, nawet na za rok byłby problem.
      - Gówno mnie to obchodzi, jak się nie podoba, to na twoje miejsce jest 1000 studentów, a dobrze wiem, że masz kredyt!
      ---

      5. Jak powinno być:
      Wybory przebiegają sprawnie, komisja liczy głosy, zawozi ręcznie sporządzone protokoły do liczenia, po tygodniu mamy oficjalne wyniki. PiS i KNP marudzą, że wybory sfałszowane i wina Tuska, po dwóch miesiącach wszyscy zapominają o problemie.

      Jak prawdopodobnie było:
      3 w nocy z niedzieli na poniedziałek. Agnieszka i Mati siedzą przy wiadrze kawy i klepią kod jak Boryna zboże. Właśnie wypuścili dwudziestą dzisiaj poprawkę i zmęczone mózgi oraz przekrwione oczy nie pozwalają się skupić na rozwiązywaniu jakichś głupich problemów, typu czemu nie ma tabelki z Rozenkiem albo dlaczego w Sosnowcu drukuje wyniki z Radomia.
      ---

      6. Jak powinno być:
      Do PKW i Nabino wpada CBA, NIK i kilka innych instytucji umilających życie obywatelom. Badane jest, czy nie zaszła korupcja, marnotrawstwo, fałszerstwo wyborów. Nabino oddaje wszystkie pieniądze i płaci 100 000 zł kary za niewywiązanie się z umowy i narobienie przez to bałaganu w całym kraju. Agnieszka znajduje nową robotę, w firmie, w której umie się zarządzać ludźmi. Pan Maciej i pani Zofia otwierają budkę z kebabem, bo produkcja oprogramowania zdecydowanie ich przerosła.

      Jak niestety prawdopodobnie będzie:
      Nikt za to nie odpowie. Kontrole na pokaz nic nie stwierdzą. PiS przegra kolejne wybory, ludzie oburzą się i oleją ten bałagan. Zosia i Maciek kupią sobie apartamenta w mieście Łodzi. Swoją złość i niepowodzenie wyładują na pracownikach - na bruk leci Mati i Agnieszka. Mati, aby nie popaść w spiralę zadłużenia, musi niestety szukać nowej roboty, Jest duża szansa, że znajdzie, jeśli tylko nie przyzna się, co tak właściwie robił w poprzedniej pracy. Niestety, Agnieszka jest na cenzurowanym w całych polskich internetach. Właśnie rozważa, czy rozpoczęcie kariery po studiach w jakimś egzotycznym kraju, w którym nie ma Polaków nikt nie zna polskiego nie jest jej jedyną szansą. Może Węgry albo Hongkong okażą się lepszym miejscem do życia?
      Firma Nabino na wiosnę wygra kolejny przetarg, wszak w kraju nad Wisłą liczy się tyko jedno kryterium: 100% cena.

    •  

      @Besteer: A jak myślisz jaka jest rzeczywistość informatyczna w Polsce? Mogę się założyć, że w wielu firmach krzakach (słyszałem że nawet i w korporacjach) nikogo nie interesuje jakość kodu, liczą się tylko terminy i nic poza tym. A te wszystkie agencje interaktywne z ZPN? Myślisz współpracując z taką będziesz miał lepiej? Nie dość że dyktują warunki, żądają znajomości wszystkiego (front i backend) i to biegle, to jeszcze mało płacą. Na frilansie to też na 100% krótkie deadliny to częsta sytuacja.

      Jak na doświadczenie tej studentki, jeśli ten kod (lub nawet jakąś część) napisała sama, to umiejętności są aż za dobre. I niech mi tu nikt nie pisze że kod jest do dupy, bo studentka ma prawo nie znać MVP i wszystkich tych znanych wzorców projektowych, także zagadnień TDD.

    •  

      @Besteer: A ja bym Agnieszkę zatrudnił. Tylko bym któremuś z pracowników polecił ją wdrożyć i grzecznie zwracać uwagi na fragmenty kodu w których wychodzi jeszcze brak doświadczenia i za pare miesięcy pewnie byłaby dobrym pracownikiem. Prawie każdy student bez doświadczenia i kogoś kto zerknie czasem na kod tak będzie pisał, nie jest jakaś gorsza.
      W końcu kto inny ogarnąłby tyle linijek kodu ;)

    •  

      @daro1: @gnysek: Ale ja wiem, jak wygląda rynek. Jak nie masz własnej firmy, to albo korpo, albo długie szukanie wśród małych przedsiębiorstw. Niestety, namnożyło się Januszów biznesu, którzy uważają 2500 brutto za dobrą pensję i wymagają cudów, multidyscyplinarności, nadgodzin i terminów na wczoraj. I takim nie przetłumaczysz, że jak się dba o kod, to na początku idzie trochę wolniej, ale potem nie trzeba szukać godzinami hacków na głupie problemy, których dałoby się uniknąć dobrym designem i brakiem burdelu w projekcie.
      A co do studentki, to niestety, obiektywnie patrząc kod jest do dupy. Wiadomo, że to nie jej wina, że dali jej od razu samej do zrobienia taką kobyłę. Z drugiej strony, nie wiemy, jak wyglądała jej rozmowa kwalifikacyjna, może ściemniała jak najęta. Patrząc na profil Goldenline, to umiejętności miała wypisane naprawdę sporo, może ktoś się nie zorientował co tak naprawdę potrafi. Na pewno nie można jej odmówić pracowitości i zaangażowania, nawalić tyle kodu samemu w trzy miesiące mając jeszcze studia i chłopaka, to naprawdę szacun.
      Osobiście radziłbym jej szukać sobie lepszej roboty, bo w tym Nabino szans na rozwój nie ma żadnych, tam nawet szefowie są żółtodziobami. Do tego kilka książek o tym, jak powinien wyglądać dobry kod i ma szanse zostać całkiem niezłą programistką.
      Niestety, w Polsce bardzo często zanim nastąpi rozmowa z kimś ogarniętym, trzeba najpierw przejść przez HR. Panny z HRu, żeby się wykazać, wygooglają jej nazwisko i pozamiatane, nikt nie zaryzykuje dziewczyny z takimi opiniami.

    •  

      @Besteer: Zauważ tylko że gdyby ten kod nie został w ogóle wysłany na githuba to by w ogóle nie było żadnego gadania o jakości a właściwie jej braku. I czyja to wina że jest taka sytuacja? Gdybym był na miejscu tej programistki, za takie coś bankowo wytoczyłbym takiemu śmiałkowi proces. Jeszcze nigdy nie spotkałem się z czymś takim, żeby zamknięty kod był udostępniony jako otwarty na repo które jest za darmo ale tylko do otwartego kodu. No chyba że appka z założenia miała byc open source, wówczas nie ma żadnego problemu. Tylko że w tym przypadku o udzielaniu jakichkolwiek gwarancji dla PKW nie może być mowy.

  •  

    Czy tam jest hasło puszczone plaintextem?
    string postData = "flag=kalkulator&login=" + HttpUtility.UrlEncode(this.username.Text) + "&password=" + HttpUtility.UrlEncode(this.password.Text);

  •  

    @TV_Republika @FaktyTVN @Bankierpl @MoneyPL @DziennikPL macie materiał

    W skrócie: napisanie systemu do liczenia głosów dla PKW powierzono 23 letniej studentce która nie miała doświadczenia z technologią w której przyszło jej pisać ten system. Jakość kodu źródłowego tego systemu jest tragiczna i przeczy wszystkich możliwym wzorcom dobrego programowania. To jest cud że ten system w ogóle się uruchomił. Kod został wyciągnięty przez internautów z publicznie dostępnych plików wykonywalnych które ze względów bezpieczeństwa nie powinny być publicznie udostępniane.

    Użytkownik @Nerf zmierzył złożoność tego kodu i wyniki są porażające:

    Drodzy,

    zmierzyłem złożoność cyklomatyczną tego kodu. Pierwsze 5 miejsc wygląda następująco:

    ① printProtocol::getProtocol – 521
    ② ProtocolForm::getHeader – 319
    ③ ProtocolForm::getCalculator – 318
    ④ ProtocolForm::getCalculator2 – 305
    ⑤ printProtocolNew::ProtocolPrint – 233


    Dla porównania, Wikipedia następująco charakteryzuje możliwe wartości złożoności cyklomatycznej:

    „• od 1 do 10 – kod dość prosty stwarzający nieznaczne ryzyko
    • od 11 do 20 – kod złożony powodujący ryzyko na średnim poziomie
    • od 21 do 50 – kod bardzo złożony związany z wysokim ryzykiem
    • powyżej 50 – kod niestabilny grożący bardzo wysokim poziomem ryzyka.”


    Kogoś jeszcze dziwi, że drukowanie protokołów nie działa?

Dodany przez:

avatar Myrten dołączył
2778 wykopali 11 zakopali 165.2 tys. wyświetleń