•  

    pokaż komentarz

    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

  •  

    pokaż komentarz

    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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

      [...]`

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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>";
      }

    •  

      pokaż komentarz

      @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ę.

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

      @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!

    •  

      pokaż komentarz

      @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ć...

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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
      };

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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 ლ(ಠ益ಠლ)

    •  

      pokaż komentarz

      @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)

    •  

      pokaż komentarz

      @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 :)

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

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

    •  

      pokaż komentarz

      XAMLu

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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: :-)

    •  

      pokaż komentarz

      @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;
      }
      `

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      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.

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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 :)

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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 ( ͡° ͜ʖ ͡°)

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @marc1027:

      Jak inaczej wygenerować?

      StringBuilder.

      Nie przepisuje całej zmiennej tekstowej w nowe miejsce.

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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 ;)

    •  

      pokaż komentarz

      @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: youtube.com

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

      Komentarz usunięty przez autora

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      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.

    •  

      pokaż komentarz

      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

    •  

      pokaż komentarz

      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?

    •  

      pokaż komentarz

      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ć...

    •  

      pokaż komentarz

      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.

    •  

      pokaż komentarz

      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ć...

    •  

      pokaż komentarz

      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?

    •  

      pokaż komentarz

      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 :)

    •  

      pokaż komentarz

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

    • więcej komentarzy(67)

  •  

    pokaż komentarz

    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:)

  •  

    pokaż komentarz

    Komentarz usunięty przez moderatora

  •  

    pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      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.

    •  

      pokaż komentarz

      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 ( ͡° ͜ʖ ͡°)

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      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).

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      @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...

    •  

      pokaż komentarz

      @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".

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

      @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.

    •  

      pokaż komentarz

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

    •  

      pokaż komentarz

      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.

    •  

      pokaż komentarz

      @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).

    •  

      pokaż komentarz

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

    • więcej komentarzy(13)

1 2 3 4 5 6 7 ... 35 36 następna

Dodany przez:

avatar Myrten dołączył
2777 wykopali 11 zakopali 166.9 tys. wyświetleń