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

    Всего: 7

  2. Python / Говнокод #19025

    −24

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    class Receiver(object):
        def __init__(self, data):
            command_name = data['command']
            command_class_name = support.underscore_to_camelcase(command_name)
            exec("from .commands.{name} import {klass}".format(name=command_name, klass=command_class_name))
            command_class = eval(command_class_name)
            self._command_object = command_class(data)

    Вернулся на питон после руби. Отсутствие автолоада и полного понимания как работает импорт толкает на это.
    В commands лежат модули вида имя_команды.py с классом ИмяКоманды. data приходит извне и содержит тип команды, на каждую из которых существует класс.
    Цель: иметь возможность добавлять новые команды просто создав файл не дописывая никаких импортов.
    Говно или не совсем?

    FlySnake, 14 Ноября 2015

    Комментарии (5)
  3. Куча / Говнокод #18339

    +142

    1. 1
    Куда пропадают кучки? Замечал и ранее, но думал что к этому причастны сами авторы, а сегодня пропал мой через пол-часа после публикации. Кто включил gc?

    FlySnake, 14 Июня 2015

    Комментарии (24)
  4. Ruby / Говнокод #18337

    −113

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    def result object, method = :save
      method = :destroy if caller[0][/`.*'/][1..-2] == 'destroy'
      if object.send method
        def object.to_json(options) ''; end
        respond_with object
      else
        raise UnprocessableEntityError.new(object.errors.full_messages.join(', '))
      end
    end

    Метод в базовом классе апишки. Надо чтобы на POST возвращалось 201, на DELETE 204 и т.д. respond_with делает это сам, но он же возвращает весь объект сериализованный чего не хочется т.к. для вертания сериализованных объектов используется jbuilder. Не смог придумать ничего лучше

    FlySnake, 14 Июня 2015

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

    +54

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    Exchange::Params pars = rawParams;
    for(Exchange::Params::const_iterator i = rawParams.constBegin(); i!= rawParams.constEnd(); i++){
        LOGN() << "Work with " << i.key() << "=" << i.value();
        if(m_specific.contains(i.key())){
            pars[i.key()] =
                (this->*m_specific.value(i.key())) (i.value());     //черная магия :)
        }
    }

    Наследие из большого рабочего проекта.
    Чтобы сохранить ясность ума на весь день решил не пытаться понять что оно делает.

    FlySnake, 08 Сентября 2014

    Комментарии (22)
  6. Си / Говнокод #16296

    +136

    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
    void lcd_show(uint8_t number)
    {
        uint8_t digit3 = 0;
        uint8_t digit2 = 0;
        uint8_t digit1 = number > 99u ? 1u : 0;
    
        switch(number)
        {
            case 0u: 
                digit3 = 0u;
                digit2 = 0u;
            break;
            case 1u: 
                digit3 = 1u;
                digit2 = 0u;
            break;
    .....
    .....
            case 199u: 
                digit3 = 9u;
                digit2 = 9u;
            break;
            default:
                digit3 = '-';
                digit2 = '-';
                digit1 = 0;
            break;
        }
    
        display3d(digit3);
        display2d(digit2);
        display1d(digit1);
    }

    8-битный микроконтроллер, 32768Гц тактовая частота, батарейное питание, CPU по-максимуму в спячке для экономии энергии.
    Функции display3d(), display2d(), display1() отображают цифру в соответствующем знакоместе на 2.5 разрядном LCD от 0 до 199.
    Преобразование числа в BCD формат.
    Эта жесть даёт выигрыш порядка 10 мкА перед "обычным" преобразования с делениями на 10 за счёт меньшего времени работы CPU для расчёта. Вроде говнокод, но в данном случае оправдан, потому не воняет :)

    FlySnake, 09 Июля 2014

    Комментарии (19)
  7. C++ / Говнокод #15947

    +12

    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
    AttachmentService::MimeType AttachmentService::mimeTypeByCodeKey(const QString &codeKey) const
     {
         if(codeKey.toLower() == QString("MimeType_PDF").toLower())       return MimeType_PDF;
         if(codeKey.toLower() == QString("MimeType_JPEG").toLower())      return MimeType_JPEG;
         if(codeKey.toLower() == QString("MimeType_PNG").toLower())       return MimeType_PNG;
         if(codeKey.toLower() == QString("MimeType_HTML").toLower())      return MimeType_HTML;
         if(codeKey.toLower() == QString("MimeType_ZHTML").toLower())     return MimeType_ZHTML;
         if(codeKey.toLower() == QString("MimeType_TEXT").toLower())      return MimeType_TEXT;
         if(codeKey.toLower() == QString("MimeType_XLS").toLower())       return MimeType_XLS;
         if(codeKey.toLower() == QString("MimeType_DOC").toLower())       return MimeType_DOC;
         if(codeKey.toLower() == QString("MimeType_PPT").toLower())       return MimeType_PPT;
         if(codeKey.toLower() == QString("MimeType_GIF").toLower())       return MimeType_GIF;
         if(codeKey.toLower() == QString("MimeType_BMP").toLower())       return MimeType_BMP;
         if(codeKey.toLower() == QString("MimeType_MPEG").toLower())      return MimeType_MPEG;
         if(codeKey.toLower() == QString("MimeType_MP4").toLower())       return MimeType_MP4;
         if(codeKey.toLower() == QString("MimeType_MP3").toLower())       return MimeType_MP3;
         return MimeType_UNKNOWN;
    }

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

    FlySnake, 09 Мая 2014

    Комментарии (24)
  8. Python / Говнокод #13471

    −98

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    try:
       while True:
           prices.remove(u"")
       except ValueError:
           pass

    Удаление пустых строк из списка.

    FlySnake, 24 Июля 2013

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