1. Список говнокодов пользователя asolntsev

    Всего: 9

  2. Java / Говнокод #17490

    +74

    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
    private static File getTmpOutputFile(VirtualFile file) {
            String origPath = file.getRealFile().getAbsolutePath();
            File tmp = new File(origPath + ".tmp");
    
            // If the temp file already exists
            if (tmp.exists()) {
                long tmpLastModified = tmp.lastModified();
                long now = System.currentTimeMillis();
    
                // If the temp file is older than the destination file, or if it is
                // older than the allowed compression time, it must be a remnant of
                // a previous server crash so we can overwrite it
                if (tmpLastModified < file.lastModified()) {
                    return tmp;
                }
                if (now - tmpLastModified > PluginConfig.maxCompressionTimeMillis) {
                    return tmp;
                }
    
                // Otherwise it must be currently being written by another thread,
                // so wait for it to finish
                while (tmp.exists()) {
                    if (System.currentTimeMillis() - now > PluginConfig.maxCompressionTimeMillis) {
                        throw new PressException("Timeout waiting for compressed file to be generated");
                    }
    
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    }
                }
    
                // Return null to indicate that the file was already generated by
                // another thread
                return null;
            }
    
            return tmp;
        }

    Самый вредный говнокод, который я встречал за последний год.
    При определённых условиях может так случиться, что он ждёт (до 60 секунд!), пока предыдущий временный файл не исчезнет. Он не пытается его удалить, не пытается создать новый файл, ничего не логирует - он просто ждёт, пока файл сам исчезнет.

    И у меня как раз так и случилось - из-за совпадения разных событий файл не удалялся, метод ждал 60 секунд, но за это время валились совсем другие вещи по таймауту, и ушло много времени на то, чтобы понять, где же настоящая проблема.

    И весь этот геморрой можно было бы благополучно заменить всего-навсего одной сточкой:
    return File.createTempFile(origPath, "tmp");

    Исходник - плагин play-press:
    https://github.com/dirkmc/press/blob/master/app/press/io/OnDiskCompressedFile.java

    asolntsev, 21 Января 2015

    Комментарии (2)
  3. Python / Говнокод #13497

    −89

    1. 1
    amount_in_cents = int(100 * amount)

    Поскольку все знают, что float нельзя использовать при работе с деньгами (ну там, ошибки округления), чуваки решили хранить все суммы в центах. Тогда они будут целыми числами.

    По такой формуле вычисляется сумма в центах, которую клиент должен заплатить за товар.

    Прикол в том, что если товар стоит 36.91 евро, то
    * amount = 36.91
    * 100 * amount = 3690.9999999999995
    * int(100 * amount) = 3690

    И клиент платит всего лишь 36.90!

    asolntsev, 28 Июля 2013

    Комментарии (15)
  4. Python / Говнокод #13496

    −101

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    <div class="book-info">
                    <strong class="book">${label}</strong>
                    {{!if desc && desc != "None None"}}
                    <span class="author">${desc}</span>
                    {{!/if}}
                </div>

    Это кусочек из JQuery template. Ему на вход приходит JSON, сформированный в Python.
    Кто бы догадался, что означает это "None None"?

    Да, это случай, когда имя и фамилия автора книги неизвестны. Вместо того, чтобы в классе Book сделать нормальный метод getAuthor, чуваки предпочли наговнякать такой вот IF в клиентской части.

    asolntsev, 28 Июля 2013

    Комментарии (2)
  5. Python / Говнокод #13495

    −103

    1. 1
    2. 2
    3. 3
    #: backend/handlers/BookLoanHandler.py:74
    msgid "Exception."
    msgstr "Исключение."

    Это строка из файла ru_RU.po, в котором хранятся переводы текстов интерфейса на разные языки.
    То есть когда в силу технической проблемы - пропало соединение с базой или тупо NullPointer, клиент вместо нормального "упс, непредвиденная ошибка, попробуйте позже или позвоните по такому-то телефону", видит сообщение: "ИСКЛЮЧЕНИЕ". Понимай как хочешь.

    asolntsev, 27 Июля 2013

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

    +75

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    public class SomeClass
    {
    	@SuppressWarnings("unused")
    	private Validator validator;
    
    	... 
    }

    Эта переменная реально не используется. Удалить бы - ан нет, автор почему-то считает, что лучше пометить её как неиспользуемую, чтобы компилятор и Эклипс не ругались.
    Чем только народ думает...

    asolntsev, 21 Июля 2010

    Комментарии (22)
  7. Java / Говнокод #3070

    +84

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public void setPhones(List<PhoneNumber> phones) throws Exception {
        this.phones = phones;
        this.phones.clear();
        this.phones.addAll(phones);
    }

    Вот такой метод нашёл сегодня в коде.

    asolntsev, 21 Апреля 2010

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

    +64.8

    1. 1
    2. 2
    3. 3
    4. 4
    long timer = -System.currentTimeMillis();
    method.invoke(...);
    timer += System.currentTimeMillis();
    log.info("Executed: " + timer + " ms.");

    Obychno ja delaju dve peremennyje start i end:
    long start = System.currentTimeMillis();
    method.invoke(...);
    long end = System.currentTimeMillis();
    log.info("Executed: " + (end-start) + " ms.");

    Inogda ewe ljudi pishut s odnoj peremennoj, no tut vpolne ponjatno, chto v nej hranitsja:
    long t = System.currentTimeMillis();
    method.invoke(...);
    t = System.currentTimeMillis() - t;

    A vot zafigachit' v peremennuju "timer" OTRITSATEL'NOJE znachenije - eto da...

    asolntsev, 13 Апреля 2010

    Комментарии (878)
  9. Java / Говнокод #2714

    +75.4

    1. 1
    2. 2
    3. 3
    4. 4
    if (!Float.valueOf("0.0").equals(price.getActualPrice()))
    {
    	return true;
    }

    Сравнение чисел (float) нездоровым способом.

    asolntsev, 04 Марта 2010

    Комментарии (7)
  10. Java / Говнокод #2652

    +88

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    protected void parseSummaryLines()
            {
                   ...
    
                   // NOTE: First letters are ommited in order to support capitalized words as well
                   final String RESULT_GOOD_TEXT_1 = "othing";    // Nothing
                   final String RESULT_GOOD_TEXT_2 = "uccessful"; // Successful
                   final String RESULT_BAD_TEXT_1 = "assword";    // Password
                   final String RESULT_BAD_TEXT_2 = "failed";     // Failed
    
                   ...
            }

    Сегодня в пласте нашего Java-кода геологи нашли такой вот самородок.

    asolntsev, 22 Февраля 2010

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