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

    0

    1. 1
    Дикого бомбежа пост

    Дикой боли стоила мне попытка собрать PHP 5.3 под Ubuntu 16.04 LTS. Клонирую репозиторий, делаю checkout на PHP 5.3, пытаюсь собрать по инструкции и тут БАЦ. autoconf и automake слишком новые. Благо были более старые версии, ставлю их через apt. И тут снова БАЦ. bison слишком новый. Пришлось скачивать исходники, компилировать их и потом уже ставить. И тут самое страшное: запустить PHP 5.3 под LAMP почти нереально. Меня всё это задолбало, сношу всё к чертям. И виноват отнюдь не PHP. Виноваты сами Томпсон, Ритчи, Линус и прочие петросяны всея вселенной *nix. Именно благодаря ним есть необходимость ставить по пять автоконфов, но не возможности.

    dm_fomenok, 06 Марта 2018

    Комментарии (101)
  2. Куча / Говнокод #23876

    +1

    1. 1
    2. 2
    3. 3
    Баг в railroad diagram, описывающей strling literal в JS (из книги Крокфорда Javascript: The Good Parts).
    
    https://i.imgur.com/8QFMrIQ.png

    Эквивалентно регулярке
    (\"([^\"^\\]|\\([\"\'\\\/bfnrt]|u[\d]{4}))*[^\"^\\]+\"|\'([^\'^\\]|\\([\"\'\\\/bfnrt]|u[\d]{4}))*[^\'^\\]+\')

    Ставить [ code ] боюсь, парсер уже починился?
    Ну, в общем, видно, что при таком раскладе, как на диаграмме, строковой литерал не может заканчиваться эскейп-последовательностью, что в действительности не так. Классический случай "something\n".

    vistefan, 06 Марта 2018

    Комментарии (214)
  3. JavaScript / Говнокод #23875

    −2

    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
    function kakPropatchitKdePodFreeBsdFactor(str) {
        return (str.split(/[A-Z0-9]{2,}/).length - 1) + (str.split(/[A-Za-z0-9]{2,}/).length - 1) / 10;
    }
    
    var titles = [];
    var requests = [];
    
    for (var pageId = 1; pageId <= 10; pageId++) {
        (function (pageId) {
            requests.push($.get('https://habrahabr.ru/all/page' + pageId, function (html) {
                var domParser = new DOMParser();
                var doc = domParser.parseFromString(html, 'text/html');
                $(doc).find('.post__title_link').each(function () {
                    titles.push(this.innerHTML);
                });
            }));
        })(pageId);
    }
    
    $.when.apply($, requests).then(function () {
        titles.sort(function (a, b) {
            return kakPropatchitKdePodFreeBsdFactor(b) - kakPropatchitKdePodFreeBsdFactor(a);
        });
        for (var i = 0; i < titles.length; i++) {
            console.log(i + ". " + titles[i]);
        }
    });

    Итак, петушки. Вот я взял 100 последних статей со швабрашвабра, встречайте победителей!!!

    0. Настройка VoIP FXS шлюза Yeastar Neogate TAXXX для работы с 3CX
    1. [size=19]Детективная история про RMCP+ и OpenSSL, или как Wireshark помог победить incorrect argument в OpenIPMI[/size]
    2. [size=18]NRF51822: дружим BLE и RTOS[/size]

    Остальные:
    3. Разработка игр под NES на C. Главы 14-16. Работа со звуком
    4. Дайджест свежих материалов из мира фронтенда за последнюю неделю №304 (26 февраля — 4 марта 2018)
    5. Реализация быстрых 2D-теней в Unity с помощью 1D shadow mapping
    6. Unity 2018 и ProBuilder: создаем, редактируем и текстурируем 3D-модели прямо в редакторе
    7. Вопросы совместимости Tibero и Oracle. Часть 1. Условная компиляция PL/SQL
    8. Выпуск#13: ITренировка — актуальные вопросы и задачи от ведущих компаний
    9. Подборка: 12 сервисов для защиты от DDoS-атак
    10. Платформа CUBA в 2017: новые фичи, новые услуги, новые планы

    Остальное в коментах (не влезает в 2000 символов)

    Предлагайте свои оценки для kakPropatchitKdePodFreeBsdFactor

    inho, 06 Марта 2018

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

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    bool MyClass::operator==(int elem){
        if (list.isExist(elem)){
            list.remove(elem);
            return true; // Операция завершена успешно
        }
        return false; // Элемент elem не найден в списке
    }

    (C) https://www.linux.org.ru/forum/development/14063699?cid=14063991

    Вырвано из контекста (треда), но считаю данная кучка должна лежать здесь.

    Elvenfighter, 05 Марта 2018

    Комментарии (6)
  5. JavaScript / Говнокод #23869

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    new Template('device.matrix.container').load(function (container_tpl) {
    	new Template('device.matrix.device').load(function (device_tpl) {
    		new Template('device.matrix.port').load(function (port_tpl) {
    			new ApiCall('device.matrix.list')
    				.set('house', event.house_id)
    				.do(function (r) {
    					// Do anything
    				})
    		});
    	});
    });

    How don't need to write JS.

    DAVIDhaker, 05 Марта 2018

    Комментарии (0)
  6. Куча / Говнокод #23864

    +9

    1. 1
    Argument type mismatch

    Assertion failed

    Exception, 04 Марта 2018

    Комментарии (25)
  7. Pascal / Говнокод #23863

    +10

    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
    var
     DPen: TGPPen;
     Drawer: TGPGraphics;
     DBrush: TGPSolidBrush;
     DFntFam: TGPFontFamily;
     DPath: TGPGraphicsPath;
     IC,BC:Integer;
     ICL, BCL:TGPColor;
     W:WideString;
     si:TGPRectF;
     rt:TGPRectF;
     GP:TGPPoint;
    begin
      W:=FWaterMark.Text;
      IC:=ColortoRGB(FWaterMark.Font.Color);
      BC:=ColorToRGB(FWaterMark.CircuitColor);
      ICl:=MakeColor(GetRValue(IC), GetGValue(IC), GetBValue(IC));
      BCL:=MakeColor(GetRValue(BC), GetGValue(BC), GetBValue(BC));
      Drawer:=TGPGraphics.Create(FBitMap.Canvas.Handle);
      Drawer.SetCompositingQuality(CompositingQualityHighQuality);
      Drawer.SetSmoothingMode(SmoothingModeAntiAlias);
      Drawer.SetTextRenderingHint(TextRenderingHintAntiAlias);
      DPath:=TGPGraphicsPath.Create;
      DPen:=TGPPen.Create(BCL, FWaterMark.FCircuitWidth);
      DBrush:=TGPSolidBrush.Create(ICL);
      DFntFam:=TGPFontFamily.Create(FWaterMark.Font.Name);
    
      RT.X:=0;
      RT.Y:=0;
      RT.Width:=FBitMap.Width;
      RT.Height:=FBitMap.Height;
      
      DPath.AddString(W, Length(W), DFntFam, FontStyleBold, FWaterMark.Font.Size, GP, TGPStringFormat.Create()); 
      DPath.GetBounds(RT, nil, DPen);
      DPath.Reset; 
    
    //В общем, хз, как узнать ширину и высоту нарисованного.
    //MeasureString/MeasureCharacterRanges не подходят,а в доке такая муть, что я чуть не спился.

    Нежнейший аромат...

    Exception, 04 Марта 2018

    Комментарии (272)
  8. Си / Говнокод #23862

    +2

    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
    // https://github.com/Samsung/ADBI/blob/3e424c45386b0a36c57211da819021cb1929775a/idk/include/division.h#L138
    
    /* Long division by 10. */
    static unsigned long long int div10l(unsigned long long int v) {
    
        /* It's a kind of magic.  We achieve 64-bit (long) division by dividing the two 32-bit halfs of the number 64-bit
         * number.  The first (most significant) half can produce a rest when dividing, which has to be carried over to the
         * second half.  The rest_add table contains values added to the second half after dividing depending on the rest
         * from the first division.  This allows evaluation of a result which is almost correct -- it can be either the
         * expected result, or the expected result plus one.  The error can be easily detected and corrected.
         */
        
        /* one dream */
        static unsigned long long int rest_add[] = {
            0x00000000, 0x1999999a, 0x33333334, 0x4ccccccd, 0x66666667,
            0x80000001, 0x9999999a, 0xb3333334, 0xcccccccd, 0xe6666667
        };
        
        /* one soul */
        unsigned long long int a = div10((unsigned int)(v >> 32));
        unsigned long long int b = div10((unsigned int)(v & 0xffffffff));
        
        /* one prize */
        int ri = (v >> 32) - a * 10;
        
        /* one goal */
        unsigned long long int ret = (a << 32) + b + rest_add[ri];
        
        /* one golden glance */
        if (ret * 10L > v) {
            //printf("OGG %llu %llu\n", ret * 10, v);
            --ret;
        }
        
        /* of what should be */
        return ret;
    }

    Деление на 10. Но зачем? Неужели компилятор настолько туп, что сам не может этого сделать?
    И да, эти туповатые комментарии one dream, one soul это отсылка к песне Queen - A Kind of Magic https://youtu.be/0p_1QSUsbsM

    j123123, 03 Марта 2018

    Комментарии (52)
  9. Куча / Говнокод #23861

    0

    1. 1
    https://habrahabr.ru/post/348744/

    Обнаружен пидар.

    subaru, 03 Марта 2018

    Комментарии (20)
  10. Haskell / Говнокод #23859

    +6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    data Foo a = Foo {a :: a, b :: Int}
               | Bar {b :: Int}
    
    foo :: (a -> b) -> Foo a -> Foo b
    foo f x@Foo{a = a} = x{a = f a}
    foo _ x@Bar{} = x   -- error: Couldn't match type ‘a’ with ‘b’
    foo _ x@Bar{} = x{} -- error: Empty record update

    Рекорды всё-таки дубовые

    cast @HaskellGovno

    CHayT, 03 Марта 2018

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