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

    В номинации:
    За время:
  2. Куча / Говнокод #16566

    +143

    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
    Монады как коллбеки
    
    На джаваскриптовой конференции, о которой я писал в прошлом посте, в процессе обсуждения 
    ФП неизбежно встала тема монад.
    
    Мне было интересно, насколько легко можно объяснить монады «на пальцах». Возможно, не в 
    той степени, чтобы человек смог сразу с ними программировать, но в той степени, чтобы понимать,
     что они делают и зачем нужны.
    
    И у меня возникла идея объяснить монады без типов. Мне кажется, главную сложность при изучении 
    монад вызывают именно типы (а точнее, конструкторы типов и классы конструкторов типов), т.к. многие 
    приходят в Haskell из языков с менее выразительной системой типов.
    
    В то же время, монады могут существовать и в динамических языках. А если из монад убрать типы, 
    то останется лишь то, как они работают во время исполнения — и там все довольно прозрачно.
    
    Вычислительная сущность монад — это continuation passing style, или коллбеки. Любая программа 
    на node.js написана в этом стиле.
    
    Левый аргумент >>= — вычисление, а правый — коллбек. Коллбек принимает результат вычисления 
    и совершает какие-то дальнейшие вычисления
    
    Эта аналогия особенно точно выполняется для монад Identity, IO, Maybe/Either. Каждая отдельная 
    монада определяет, к чему конкретно будет применен коллбек.
    
    Но посмотрим, например, на монаду [] (список). Если руководствоваться только лишь представлением 
    о монаде как о вызове коллбеков, то самый простой способ определить списочную монаду — это a >>= k = map k a (что неверно).
    
    Аналогия с коллбеками слишком «императивна» и не улавливает тонкость — структуру самой монады. 
    Чтобы эту структуру наглядно показать, как раз и нужны типы.

    kegdan, 19 Августа 2014

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

    +70

    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
    *  Calculates the minimum number of bits necessary to represent the given number.  The
         *      number should be given in its unsigned form with the starting bits equal to 1 if it is
         *      signed.  Repeatedly compares number to another unsigned int called x.
         *      x is initialized to 1.  The value of x is shifted left i times until x is greater
         *      than number.  Now i is equal to the number of bits the UNSIGNED value of number needs.
         *      The signed value will need one more bit for the sign so i+1 is returned if the number
         *      is signed, and i is returned if the number is unsigned.
     * @param number the number to compute the size of
     * @param bits 1 if number is signed, 0 if unsigned
     */
        public static int minBits(int number, int bits)
        {
        int val = 1;
        for (int x = 1; val <= number && !(bits > 32); x <<= 1) 
        {
            val = val | x;
            bits++;
        }
    
        if (bits > 32)
                {
                        assert false : ("minBits " + bits + " must not exceed 32");
                }
        return bits;
    }

    Адоб, как обычно, порадовал (условие окончания цикла).
    [color=blue]https://git-wip-us.apache.org/repos/asf/flex-sdk/repo?p=flex-sdk.git;a=blob;f=modules/swfutils/src/java/flash/swf/SwfEncoder.java;h=03a100dda92989d537b00b 96033d614c73c47801;hb=HEAD#l320[/code]

    wvxvw, 17 Августа 2014

    Комментарии (8)
  4. bash / Говнокод #16470

    −111

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    WHEN=`date +%Y-%m-%d_%H-%M`;
    # Если дамп в этом часу не создавался, то минуты в имени опускаем
    # Осторожно, этот скрипт подвержен проблеме 10000 года.
    # Обязательно скажите об этом своим прапрапрапрапрапрапрапрапрапрапрапра...правнукам
    if ! [[ -s $DYMPATH/${WHEN:0:13}.sql.$ARCEXTEN ]] ; then
        WHEN=${WHEN:0:13}
    fi

    DIX315, 04 Августа 2014

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

    +129

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    .some-amazing-class{
    
        // A Lot Of CSS
    
        > div.pull-right {
                float: left !important;
        }
    
        // A Lot Of CSS
    
    }

    Не так давно заметил на проекте у себя что-то подобное)))
    Как по мне так это именно Twitter Bootstrap Best Practices =)

    true2trance, 29 Июля 2014

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

    −160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    ДляВырезки = 8;	
    
    	Если Не Найти(Стр,"маг") = 0 Тогда
    		Если (Найти(Стр,"маг") + ДляВырезки) > СтрДлина(Стр) Тогда
    			Обрез = Сред(Стр,Найти(Стр,"Маг"),(Найти(Стр,"Маг") - СтрДлина(Стр)) + 1);
    		Иначе
    			Обрез = Сред(Стр,Найти(Стр,"маг"),ДляВырезки);	
    		КонецЕсли;
    	КонецЕсли;
    	
    	Возврат ВторойУровеньСумрака(Обрез);

    А этот наоборот с именем старается)

    Cascader, 28 Июля 2014

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

    +25

    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
    case 'z':
    {
    	int diff;
    	char const *sign;
    
    	if (t->tm_isdst < 0)
    	  continue;
    	continue;
    	if (diff < 0)
    	  {
    		sign = "-";
    		diff = -diff;
    	  }
    	else
    	  sign = "+";
    	pt = _add (sign, pt, ptlim);
    	diff /= 60;
    	pt = _conv ((diff / 60) * 100 + diff % 60, "%04d", pt, ptlim);
    }
    continue;

    https://github.com/Helco/PebbleLocalSim/blob/master/additionalSource/strftime.c

    байтоёбы-байтоёбики...
    для упоротых - строки 7 и 8.

    blackhearted, 08 Июля 2014

    Комментарии (8)
  8. PHP / Говнокод #16262

    +159

    1. 1
    2. 2
    3. 3
    if ($_POST['category']===1){ //Визначаємо яку категорію вибрав користувач ...
        "INSERT INTO `advertisement` (category) VALUES ('Квартира')";
    }

    Пришло время выполнить запрос. Запрос сам не выполнится...

    Взято отсюда: http://govnokod.ru/16259

    bormand, 30 Июня 2014

    Комментарии (8)
  9. C# / Говнокод #16227

    +140

    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
    protected override void HandleImpl( DeleteTrashModel model )
    {
    	switch( model.TableName )
    	{
    		case DeleteTrashTablesEnum.AuthenticationTicket:
    			this.DeleteTrash( DeleteTrashTablesEnum.AuthenticationTicket, model.DaysCount );
    			break;
    		case DeleteTrashTablesEnum.ResetPasswordTicket:
    			this.DeleteTrash( DeleteTrashTablesEnum.ResetPasswordTicket, model.DaysCount );
    			break;
    		case DeleteTrashTablesEnum.Notification:
    			this.DeleteTrash( DeleteTrashTablesEnum.Notification, model.DaysCount );
    			break;
    		case DeleteTrashTablesEnum.Event:
    			this.DeleteTrash( DeleteTrashTablesEnum.Event, model.DaysCount );
    			break;
    	}
    }

    Если есть Enum - нужен switch!

    sickphilosopher, 25 Июня 2014

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

    +158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    $uid = cod($logininfo['id']);
    $adres = decod($adr['p1']).":".decod($adr['p2']);
    
    function cod($cod3){
    
        return $cod3;
    }
    function decod($cod3){
    
        return $cod3;
    }

    Панель управления игровыми серверами GamePL. Взялся на свою голову написать дополнений =)

    Onotole, 24 Июня 2014

    Комментарии (8)
  11. Куча / Говнокод #16078

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    Начните зарабатывать деньги с Bitcoin прямо сейчас!
    
    Как заработать на биткойнах? Очень просто!
    
    1. Зарегистрируйте кошелёк Bitcoin: https://blockchain.info/ru/wallet
    2. После регистрации введите свой Bitcoin-адрес здесь: http://eb.by/freebitcoins
    3. Нажмите кнопку «ROLL!», чтобы получить бесплатные биткойны
    4. Спустя час вы можете получить ещё, поэтому рекомендую периодически возвращаться на этот сайт.
    5. Как только вы наберёте такую сумму, которую вы хотели бы вывести, зарегистрируйтесь на бирже btc-e.com, и получите рубли, доллары или евро.
    
    Или оставьте деньги в биткойнах, и наблюдайте, как вы становитесь всё богаче за счёт роста стоимости Bitcoin!

    ifkelvofep34lf, 29 Мая 2014

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