1. PHP / Говнокод #20238

    0

    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
    function setLastHandshake ($carID) {
    	$HsList = json_decode(file_get_contents('carconnection.txt'), 1);
    	if ($HsList == "null" || $HsList == null) {
    		$HsList = json_decode("[]");
    	}
    	$carCount = count($HsList);
    	$i = 0;
    	foreach ($HsList as &$row) {
    		if ($row['car'] == $carID) {
    			$row['lastHS'] = (string)time();
    			break;
    		}
    		else {
    		$i++;
    		}
    		if ($i == $carCount) {
    			$HsList[] = array('car' => (string)$carID, 'lastHS' => (string)time());
    		}
    	}
    	if ($HsList == "null" || $HsList == null) {
    		return -1;
    	}
    	$f = fopen('carconnection.txt', 'w');
    	fwrite($f, json_encode($HsList));
    }

    tooyz, 20 Июня 2016

    Комментарии (1)
  2. C++ / Говнокод #20237

    +4

    1. 1
    data[idata].io_data[i % 4].data

    Когда процессишь данные данных для данных

    Starl1ght, 20 Июня 2016

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

    −53

    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
    Законы де Моргана в 1С
    Казалось бы, при чем Булева Алгебра к 1С?
    
    
    
    Предположим, есть задача - отобрать действующие договора на некую дату проверки &Дата.
    
    При этом у договора есть дата начала и дата окончания, если дата окончания не задана, то договор действует до конца времен.
    
    Как решается задача? В лоб так:
    
    
    ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И (ДатаОкончания >= &Дата ИЛИ ДатаОкончания = ДатаВремя(1,1,1))
    
    Но операция ИЛИ вызывает некоторые проблемы по скорости, поэтому есть желание обойтись без нее. Как это сделать? Тут приходит на помощь законы Де Моргана.
    
    Перепишем так:
    
    
    ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И НЕ (ДатаОкончания < &Дата И ДатаОкончания <> ДатаВремя(1,1,1))
    
    И всё работает.
    
    Проверяем выделенную зеленым часть условия:
    
    1. Если дата окончания договора меньше даты проверки, то получим НЕ (ИСТИНА И ИСТИНА) = ЛОЖЬ
    
    2. Если дата окончания договора больше или равно даты проверки, то получим НЕ (ЛОЖЬ И ИСТИНА) = ИСТИНА
    
    3. Если дата окончания договора не заполнена, то получим НЕ (ЛОЖЬ) = истина.
    
    Торжество формальной логики! Причем некоторые товарщи пытаются оптимизировать этот запрос через запросы с объединением, а ларчик открывается просто!

    Немножко обо мне:
    Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
    Использует функциональную 5 бальную шкалу оценок женщин.
    Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
    Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
    Изобрел Религию Дембеля.

    Genius1C, 20 Июня 2016

    Комментарии (245)
  4. Assembler / Говнокод #20234

    +70

    1. 1
    https://youtu.be/hB6eY73sLV0?t=241

    Исполнение произвольного кода(в данном случае Flappy Bird) в Super Mario World. Запись инструкций в память происходит посредством прыжков в нужных координатах.

    j123123, 20 Июня 2016

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

    +3

    1. 1
    https://geektimes.ru/post/277444/

    LispGovno, 20 Июня 2016

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

    0

    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
    void Canvas::drawText(const char* text, SDL_Color sdlColor, int x, int y) const noexcept
    {
        if (!font)
            throw std::runtime_error{"TTF_Font* is null"};
    
        SDL_Surface* const sdlSurface =
            ::TTF_RenderText_Solid(const_cast<TTF_Font*>(font->getTtfFont()), text, sdlColor);
        if (!sdlSurface)
            throw std::runtime_error{"SDL_Surface* is null"};
    
        SDL_Texture* const sdlTexture =
            ::SDL_CreateTextureFromSurface(const_cast<SDL_Renderer*>(renderer->getSdlRenderer()), sdlSurface);
        if (!sdlTexture)
            throw std::runtime_error{"SDL_Texture* is null"};
    
        const SDL_Rect srcrect{0, 0, sdlSurface->w, sdlSurface->h};
        const SDL_Rect dstrect{x, y, sdlSurface->w, sdlSurface->h};
    
        ::SDL_FreeSurface(sdlSurface);
    
        ::SDL_RenderCopy(const_cast<SDL_Renderer*>(renderer->getSdlRenderer()), sdlTexture,
                &srcrect, &dstrect);
        ::SDL_DestroyTexture(sdlTexture);
    }

    jangolare, 19 Июня 2016

    Комментарии (41)
  7. PHP / Говнокод #20225

    +2

    1. 1
    2. 2
    3. 3
    <input type="hidden" name="lang" value="<?= LANG ?>"/>
    <input type="hidden" name="ID" value=<?= $arResult["ID"] ?>/>
    <input type="hidden" name="LOGIN" value=<?= $arResult["arUser"]["LOGIN"] ?>/>

    Кусок формы редактирования профиля.. Отвлечемся от горячо любимой CMS и сконцентрируемся на сути...

    Кодер так спешил, что решил просто type="text" превратить в хиддены. Бог с ним что это дает юзеру намек на то как сменить логин.
    Но он забыл кавычки. ID проходит через IntVal и это не заметно. А вот к логину при каждом сохранении дописывается "/", юзера не выкидывает. А вот в следующий раз он должен угадать сколько слэшей добавить к логину. Да и логин запретили менять наверное не просто так, а потому что при регистрации туда прописывается мыло, а вот при апдейте юзера уже не трогают это...

    maddocnc, 17 Июня 2016

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

    −16

    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
    Небольшой гуру-тест по сопровождению типовых конфигураций.
    
    
    Есть запрос, который получает себестоимость и выручку документа возврата товара от клиента (процедура ТекстЗапросаТаблицаВыручкаИСебестоимостьПродаж в модуле менеджера документа):
    
    
    ТекстЗапроса = "
    ....
     | - ВидыЗапасов.СуммаСНДСУпр          КАК СуммаВыручки,
    ....
     | ВЫБОР КОГДА ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
     |  ИЛИ ВидыЗапасов.ДокументРеализации = НЕОПРЕДЕЛЕНО
     | ТОГДА
     |  - ВидыЗапасов.СуммаСНДСУпр
     | ИНАЧЕ
     |  0
     | КОНЕЦ КАК Себестоимость,
    
    
    Для удобства сопровождения текст запроса меняется далее в коде, а не в самом запросе, в конструкции вида:
    
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "... что искать ...",
    ".. на что заменять...");
    
    
    Нужно заменить использование ВидыЗапасов.СуммаСНДСУпр так, чтобы СуммаВыручки не изменилась, а Себестоимость изменилась, допустим на число 666 (для гуру-теста).
    
    
    Это частая задача для УТ11, т.к. там не реализована возможность конкретного указания себестоимости, если возврат осущесвлятся без документа продажи (например, за прошлые периоды, до ввода начальных остатков), в этих случаях УТ11 принимает себестоимость возврата, равную цене продажи, а это не совсем правильно.
    
    
    В этом случае есть один хитрый трюк, чтобы без использования регулярных выражений добиться замены себестоимости на заданное число. Вопрос - как? Думаем.

    Немножко обо мне:
    Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
    Использует функциональную 5 бальную шкалу оценок женщин.
    Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
    Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
    Изобрел Религию Дембеля.

    Genius1C, 17 Июня 2016

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

    0

    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
    # https://www.fusionticket.org/ cms для продажи билетов 
    
    // файл includes/classes/class.router.php
    
        if(is_null($action)){
          if (isset($_POST['action'])) {
            $action=$_POST['action'];
          } elseif (isset($_GET['action'])) {
            $action=$_GET['action'];
          } else
            $action=false;
        }
    
        $_REQUEST['action'] = $action;
        $_GET['action']     = $action;
        $_POST['action']    = $action;
        //echo $controller,'-',$module, '-',$action;
    
    //  теперь с class.router.php попадаем сюда includes/template/web/shop.tpl
    
    {if  $smarty.post.action eq 'resendpassword'}
       {$user->forgot_password_f($smarty.post.email)}
    {/if}
    
    {if $smarty.request.action eq 'login' and $smarty.request.type != 'block'}
    	{include file="user_login.tpl"}
    
    {elseif $smarty.request.action eq 'register'}
      {if $smarty.request.register_user}
        {user->register ismember=true data=$smarty.post secure='user_nospam' login=true}
        {assign var='user_data' value=$smarty.post}
        {if $user_errors}
          {include file="user_register.tpl" ManualRegister=true}
        {else}
          {include file="user_activate.tpl"}
        {/if}
      {else}
        {include file="user_register.tpl" ManualRegister=true}
      {/if}
    
    {elseif $smarty.request.action eq 'activate'}
      {include file="user_activate.tpl"}
    
    {elseif $smarty.request.action eq 'resend_activation'}
      {include file="resend_activation.tpl"}
    {elseif $smarty.get.action eq "remove"}
      {$cart->remove_item_f($smarty.get.event_id,$smarty.get.cat_id,$smarty.get.item)}
      {include file="cart_view.tpl"}
    
    {elseif $smarty.request.action eq "addtocart"}
      {if $smarty.post.place}
        {assign var='last_item' value=$cart->add_item_f($smarty.post.event_id, $smarty.post.category_id, $smarty.post.place, $smarty.post.discount, 'mode_web')}
      {else}
        {assign var='last_item' value=$cart->add_item_f($smarty.post.event_id, $smarty.post.category_id, $smarty.post.places, $smarty.post.discount, 'mode_web')}
      {/if}
      {if $last_item}
        {redirect url="index.php?action=view_cart&event_id={$smarty.post.event_id}"}
      {else}
        {include file="event_ordering.tpl"}
      {/if}
    {elseif $smarty.request.action eq "buy"}
      {include file="event_ordering.tpl"}
     
    и т. д.  250 строк.

    https://www.fusionticket.org/.

    konmado, 17 Июня 2016

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

    +5

    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
    template<typename T>
    T* sanitize(T* p)
    {
        return reinterpret_cast<T*>(
          reinterpret_cast<uintptr_t>(p) & ~(alignof(T)-1));
    }
    
    template<typename T>
    constexpr size_t avaliable_width()
    {
      	switch(alignof(T))
        {
          case 1: return 0;
          case 2: return 1;
          case 4: return 2;
          case 8: return 3;
          case 16: return 4;
          case 32: return 5;
          case 64: return 6;
          case 128: return 7;
          case 256: return 8;
          default: return 0;
        }
    }
    
    template<size_t bit, typename T>
    T* set_tag(T* p, bool tagged = true)
    {
      	static_assert(bit < avaliable_width<T>(), "bad_width");
    
    	if(tagged) {
         	return reinterpret_cast<T*>(
            	reinterpret_cast<uintptr_t>(p) | 1 << bit); 
        }
      	return reinterpret_cast<T*>(
          	reinterpret_cast<uintptr_t>(p) & ~(uintptr_t(1) << bit));
    }
    
    template<size_t bit, typename T>
    bool get_tag(T* p)
    {
      	static_assert(bit < avaliable_width<T>(), "bad_width");
      	return reinterpret_cast<uintptr_t>(p) >> bit & 1;
    }

    Младшие биты указателей на выравненные типы всегда нулевые. Из за этого (по формуле Шеннона) указатель несёт в себе меньше информации, оставаясь того же размера. Битоёбов это расстраивает.

    Soul_re@ver, 16 Июня 2016

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