1. Лучший говнокод

    В номинации:
    За время:
  2. C# / Говнокод #26802

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    private void checkButton_Click(object sender, EventArgs e)
        {
          if (this.passportTextbox.Text.Trim() == "")
          {
            int num1 = (int) MessageBox.Show("Введите серию и номер паспорта");
          }
          else
          {
            string rawData = this.passportTextbox.Text.Trim().Replace(" ", string.Empty);
            if (rawData.Length < 10)
            {
              this.textResult.Text = "Неверный формат серии или номера паспорта";
            }
            else
            {
              string commandText = string.Format("select * from passports where num='{0}' limit 1;", (object) Form1.ComputeSha256Hash(rawData));
              string connectionString = string.Format("Data Source=" + Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\db.sqlite");
              try
              {
                SQLiteConnection connection = new SQLiteConnection(connectionString);
                connection.Open();
                SQLiteDataAdapter sqLiteDataAdapter = new SQLiteDataAdapter(new SQLiteCommand(commandText, connection));
                DataTable dataTable1 = new DataTable();
                DataTable dataTable2 = dataTable1;
                sqLiteDataAdapter.Fill(dataTable2);
                if (dataTable1.Rows.Count > 0)
                {
                  if (Convert.ToBoolean(dataTable1.Rows[0].ItemArray[1]))
                    this.textResult.Text = "По паспорту «" + this.passportTextbox.Text + "» доступ к бюллетеню на дистанционном электронном голосовании ПРЕДОСТАВЛЕН";
                  else
                    this.textResult.Text = "По паспорту «" + this.passportTextbox.Text + "» доступ к бюллетеню на дистанционном электронном голосовании НЕ ПРЕДОСТАВЛЯЛСЯ";
                }
                else
                  this.textResult.Text = "Паспорт «" + this.passportTextbox.Text + "» в списке участников дистанционного голосования НЕ НАЙДЕН";
                connection.Close();
              }
              catch (SQLiteException ex)
              {
                if (ex.ErrorCode != 1)
                  return;
                int num2 = (int) MessageBox.Show("Файл db.sqlite не найден. Положите файл в папку вместе с exe.");
              }
            }
          }
        }

    https://habr.com/post/510512/
    Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет

    gost, 11 Июля 2020

    Комментарии (233)
  3. C# / Говнокод #26795

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public static bool found13 = false;
    public static bool found11 = false;
    // ...
    public List<int> Children = new List<int>(); //index of children
    public List<int> Children13 = new List<int>(); //index of children

    Код бота-автора подавляющего большинства статей на нескольких языках. В основном Шведский (автор бота — швед) и, наверное, Себуанский, не знаю как правильно по-русски, короче язык океании, где-то на Филиппинах на нем говорят. На последнем, между прочим, бот нахерачил столько, что вывел себуанскую Википедию на второе место по количеству статей вообще.

    Потрясающий пример говнокода, написанного учёным для дела, и приемлемо решающий свою задачу. На основе отрытых баз знаний о таксонах биологических видов и географических объектах (реки, горы, населенные пункты), генерит статьи-заглушки с краткой информационной сводкой.

    https://sv.wikipedia.org/wiki/Wikipedia:Projekt_DotNetWikiBot_Framewor k/Lsjbot/Makespecies

    Сори, если баян.

    vistefan, 06 Июля 2020

    Комментарии (108)
  4. C++ / Говнокод #26793

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    if (feet_yaw <= 58)
    	{
    		if (-58 > feet_yaw)
    			player->EyeAngles()->y = body_max_rotation + player->EyeAngles()->y;
    	}
    	else
    	{
    		player->EyeAngles()->y = body_max_rotation - player->EyeAngles()->y;
    	}
    	if (player->GetAnimOverlay(6)->m_flPlaybackRate > 0.1)
    	{
    		for (int resolve_delta = 58.f; resolve_delta < -58.f; resolve_delta = resolve_delta - 20.f)
    		{
    			player->EyeAngles()->y = resolve_delta;
    		}
    	}

    ресольвер

    esoterik, 04 Июля 2020

    Комментарии (0)
  5. C++ / Говнокод #26792

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    if (UpdateLBY)
    			{
    				auto m_flDelta = csgo->local->GetPlayerAnimState()->m_flGoalFeetYaw - csgo->local->GetPlayerAnimState()->m_flEyeYaw;
    
    				if (m_flDelta >= 35.0 && m_flDelta <= -35.0) {
    					// the first lby break is left.
    					csgo->cmd->viewangles.y -= 122.f;
    				}
    				else {
    					if (m_flDelta <= -35.0) {
    						// the second lby break is right.
    						csgo->cmd->viewangles.y += 122.f;
    					}
    					if (m_flDelta >= 35.0) {
    						// the loop.
    						csgo->cmd->viewangles.y -= 122.f;
    					}
    				}
    				csgo->send_packet = false;
    				return;
    			}

    esoterik, 03 Июля 2020

    Комментарии (8)
  6. Java / Говнокод #26791

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    package literatePrimes;
    
    import java.util.ArrayList;
    
    public class PrimeGenerator {
      private static int[] primes;
      private static ArrayList<Integer> multiplesOfPrimeFactors;
    
      protected static int[] generate(int n) {
        primes = new int[n];
        multiplesOfPrimeFactors = new ArrayList<Integer>();
        set2AsFirstPrime();
        checkOddNumbersForSubsequentPrimes();
        return primes;
      }
    
      private static void set2AsFirstPrime() {
        primes[0] = 2;
        multiplesOfPrimeFactors.add(2);
      }
    
      private static void checkOddNumbersForSubsequentPrimes() {
        int primeIndex = 1;
        for (int candidate = 3;
             primeIndex < primes.length;
             candidate += 2) {
          if (isPrime(candidate))
            primes[primeIndex++] = candidate;
        }
      }
    
      private static boolean isPrime(int candidate) {
        if (isLeastRelevantMultipleOfNextLargerPrimeFactor(candidate)) {
          multiplesOfPrimeFactors.add(candidate);
          return false;
        }
        return isNotMultipleOfAnyPreviousPrimeFactor(candidate);
      }
    
      private static boolean
      isLeastRelevantMultipleOfNextLargerPrimeFactor(int candidate) {
        int nextLargerPrimeFactor = primes[multiplesOfPrimeFactors.size()];
        int leastRelevantMultiple = nextLargerPrimeFactor * nextLargerPrimeFactor;
        return candidate == leastRelevantMultiple;
      }
    
      private static boolean
      isNotMultipleOfAnyPreviousPrimeFactor(int candidate) {
        for (int n = 1; n < multiplesOfPrimeFactors.size(); n++) {
          if (isMultipleOfNthPrimeFactor(candidate, n))
            return false;
        }
        return true;
      }
    
      private static boolean
      isMultipleOfNthPrimeFactor(int candidate, int n) {
       return
         candidate == smallestOddNthMultipleNotLessThanCandidate(candidate, n);
      }
    
      private static int
      smallestOddNthMultipleNotLessThanCandidate(int candidate, int n) {
        int multiple = multiplesOfPrimeFactors.get(n);
        while (multiple < candidate)
          multiple += 2 * primes[n];
        multiplesOfPrimeFactors.set(n, multiple);
        return multiple;
      }
    }

    https://habr.com/ru/post/508876/
    Вероятно, хватит рекомендовать «Чистый код»
    > Я остановлюсь на ещё одном вопиющем примере кода. Это генератор простых чисел из главы 8:

    gost, 03 Июля 2020

    Комментарии (354)
  7. Python / Говнокод #26787

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    from selenium import webdriver
    import time
    import telegram
    
    
    def A():
        код парсера
    
    while True:
        browser = webdriver.Chrome()
        browser.maximize_window()
        browser.get('ссылка')
        try:
            BOT_TOKEN = 'токен'
            number2 = browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[5]/div/div[1]/div[1]/div').text
            SS = number2.split()
            if SS[0] == '0' and SS[1] == '0':
                browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[5]/div/div[1]/div[1]/a').click()
                time.sleep(5)
                A()
        except Exception:
            pass
    
        try:
            BOT_TOKEN = 'токен'
            number2 = browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[4]/div/div[1]/div[1]/div').text
            SS = number2.split()
            if SS[0] == '0' and SS[1] == '0':
                browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[4]/div/div[1]/div[1]/a').click()
                time.sleep(5)
                A()
        except Exception:
            pass
    
        try:
            BOT_TOKEN = 'токен'
            number2 = browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[3]/div/div[1]/div[1]/div').text
            SS = number2.split()
            if SS[0] == '0' and SS[1] == '0':
                browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[3]/div/div[1]/div[1]/a').click()
                time.sleep(5)
                A()
        except Exception:
            pass
    
        try:
            BOT_TOKEN = 'токен'
            number2 = browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[6]/div/div[1]/div[1]/div').text
            SS = number2.split()
            if SS[0] == '0' and SS[1] == '0':
                browser.find_element_by_xpath('//*[@id="games_content"]/div/div[1]/div/div/div[6]/div/div[1]/div[1]/a').click()
                time.sleep(5)
                A()
        except Exception:
            pass
        browser.close()
        time.sleep(15)

    Вопросик с хабра)

    Safronov_alexei, 02 Июля 2020

    Комментарии (15)
  8. Си / Говнокод #26767

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    // https://habr.com/ru/company/oleg-bunin/blog/493242/
    // Алгоритмы быстрой обработки HTTP-строк 
    
    // .....
    
    // Как устроен парсер? Мы, как nginx, определяем массив байт и по нему
    // проверяем входные данные — это пролог функции. Здесь мы работаем
    // только с короткими сроками, используем likely, потому что branch misprediction
    // для коротких строк болезненнее, чем для длинных. Выносим этот код наверх.
    // У нас есть ограничение в 4 из-за последней строчки — мы должны написать
    // достаточно мощное условие. Если будем обрабатывать больше 4 байт, то условие
    // будет тяжелее, а код медленнее.
    
    static const unsigned char uri_a[] __attribute__((aligned(64))) = {
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
            ...
            // Branch misprediction is more crucial for short strings
            if (likely(len <= 4)) {
                    switch (len) {
                    case 0:
                        return 0;
                    case 4:
                        c3 = uri_a[s[3]];
                        // fall through to process other chars
                    case 3:
                        c2 = uri_a[s[2]];
                    case 2:
                        c1 = uri_a[s[1]];
                    case 1:
                        c0 = uri_a[s[0]];
                    }
                    return (c0 & c1) == 0 ? c0 : 2 + (c2 ? c2 + c3 : 0);
            }
    
    
    // Основная петля и большой хвост. В основном цикле обработки мы делим
    // данные: если они достаточно длинные, обрабатываем по 128, 64, 32 или
    //  по 16 байт. Имеет смысл обрабатывать по 128: мы параллельно используем
    // несколько каналов процессора (несколько pipeline) и суперскалярность процессора.
    
    for ( ; unlikely(s + 128 <= end); s += 128) {
            n = match_symbols_mask128_c(__C.URI_BM, s);
            if (n < 128)
                    return s - (unsigned char *)str + n;
    }
    
    if (unlikely(s + 64 <= end)) {
            n = match_symbols_mask64_c(__C.URI_BM, s);
            if (n < 64)
                    return s - (unsigned char *)str + n;
            s += 64;
    }
    
    if (unlikely(s + 32 <= end)) {
            n = match_symbols_mask32_c(__C.URI_BM, s);
            if (n < 32)
                    return s - (unsigned char *)str + n;
            s += 32;
    }
    
    if (unlikely(s + 16 <= end)) {
            n = match_symbols_mask16_c(__C.URI_BM128, s);
            if (n < 16)
                    return s - (unsigned char *)str + n;
            s += 16;
    }

    ... пиздец. Там еще в той статье пишут, что CloudFlare через AVX2 какое-то говно оптимизируют в говнопаринге http запросов.

    Поэтому я за бинарную сериализацию, без всей этой хуйни человекочитаемой

    j123123, 23 Июня 2020

    Комментарии (314)
  9. JavaScript / Говнокод #26759

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    function(t) {
        switch (t) {
            case 1:
                return g.emailNotConfirmed;
            case 2:
                return g.showCaptcha;
            case 3:
                return g.authFailed;
            case 4:
                return g.makeRedirect;
            case 5:
                return g.reload;
            case 6:
                return g.mobileActivationRequired;
            case 7:
                return g.showMessage;
            case 8:
                return g.showError;
            case 9:
                return g.votesPayment;
            case 10:
                return g.zeroZone;
            case 11:
            case 12:
                return Object(g.mobileValidationRequired)(t);
            case 13:
                return g.evalCode;
            case 14:
                return g.otpBox;
            case 15:
                return g.passwordValidationRequired;
            default:
                return Object(g.defaultHandler)(t)
        }
    }(t)

    https://vk.com/js/cmodules/bundles/common.2ce877ca4bd415d95d03.js?51fe80b96 a07a7861643

    #байтоклюйство #спичечная-экономика #олимпиадники #ebivk

    Fike, 18 Июня 2020

    Комментарии (9)
  10. Куча / Говнокод #26757

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    ```rust
    impl actix_web::FromRequest for Token {
        type Error = ApiError;
        type Future = Pin<Box<dyn Future<Output = Result<Self, Self::Error>>>>;
        type Config = ();
    
        fn from_request(req: &actix_web::HttpRequest, _: &mut actix_web::dev::Payload) -> Self::Future {
            match req.extensions().get::<Option<Self>>().map(Clone::clone) {
                Some(Some(v)) => Box::pin(async { Ok(v) }),
                None | Some(None) => {
                    let header = req.headers().get("Authorization").map(Clone::clone);
    
                    Box::pin(
                        web::Data::<Pool>::extract(req)
                            .map_err(ApiError::from)
                            .and_then(move |pool| {
                                async move {
                                    let header = header.ok_or(ApiError::authorization_required())?;
    
                                    let auth = header.to_str()?;
    
                                    let uuid = Uuid::parse_str(auth)
                                        .map_err(|_| ApiError::authorization_bad_token())?;
    
                                    let (_, token) = Self::find(&uuid, pool.get_conn().await?).await?;
    
                                    let token = token.ok_or(ApiError::authorization_bad_token())?;
    
                                    Ok(token)
                                }
                            })
                            .boxed_local()
                    )
                }
            }
        }
    }

    Было принято решение создать Authorization middleware, который при каждом запросе авторизировал пользователя, если есть нужный хидер. В связи с тем, что некоторые роуты достают модель через ручной экстрактор, пришлось дописать эту хуйню (Второе условие никогда не будет выполнена вообще судя по всему).

    1rei, 18 Июня 2020

    Комментарии (9)
  11. PHP / Говнокод #26746

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    interface PostRepository
    {
        public function save(Post $model);
    }
    
    class Post
    {
        protected $id;
        protected $title;
        protected $content;
    
        public function setId(int $id)
        {
            $this->id = $id;
        }
    
        public function getId(): ?int
        {
            return $this->id;
        }
    
        public function setTitle(string $title)
        {
            $this->title = $title;
        }
    
        public function getTitle(): string
        {
            return $this->title ?: '';
        }
    
        public function setContent(string $content)
        {
            $this->content = $content;
        }
    
        public function getContent(): string
        {
            return $this->content ?: '';
        }
    }

    Блядь, до чего ж отвратительный код. Говёность «PHP», тщательно и с извращённой любовью смешанная с ЙАЖАвским бойлерплейтом. Омерзительно.

    https://habr.com/ru/post/505400/
    >>> Как должны выглядеть модели?

    gost, 08 Июня 2020

    Комментарии (298)