- 
        
Список говнокодов пользователя FlySnake
        Всего: 7
     
        - 
        
        
                −24        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 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
        
        
        
             - 
        
        
                +142        
        
                            - 1
 
                        Куда пропадают кучки? Замечал и ранее, но думал что к этому причастны сами авторы, а сегодня пропал мой через пол-часа после публикации. Кто включил gc?
                                     
        
            
        
        
            
 FlySnake,
            14 Июня 2015
        
        
        
             - 
        
        
                −113        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 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
        
        
        
             - 
        
        
                +54        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 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
        
        
        
             - 
        
        
                +136        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 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
        
        
        
             - 
        
        
                +12        
        
                            - 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 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
        
        
        
             - 
        
        
                −98        
        
                            - 1
 - 2
 - 3
 - 4
 - 5
 
                        try:
   while True:
       prices.remove(u"")
   except ValueError:
       pass
                                     
        
            Удаление пустых строк из списка.
        
        
            
 FlySnake,
            24 Июля 2013