1. Swift / Говнокод #23907

    +1

    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
    protocol Multi {
        associatedtype T
        associatedtype U
    
        func printSelf()
    }
    
    extension Multi where T == Int, U == Float {
        func printSelf() {
            print("Int & Float!")
        }
    }
    
    extension Multi where T == String, U == Int {
        func printSelf() {
            print("String & Int!")
        }
    }
    
    extension Multi {
        func printSelf() {
            print("Unknown")
        }
    }
    
    class MultiImplementationIntFloat: Multi {
        typealias T = Int
        typealias U = Float
    }
    
    class MultiImplementationStringInt: Multi {
        typealias T = String
        typealias U = Int
    }
    
    class MultiImplementationInvalid: Multi {
        typealias T = Float
        typealias U = String
    }
    
    let m1 = MultiImplementationIntFloat()
    m1.printSelf()
    
    let m2 = MultiImplementationStringInt()
    m2.printSelf()
    
    let m3 = MultiImplementationInvalid()
    m3.printSelf()

    Multimethods в Swift с проверкой в compile-time

    Desktop, 10 Марта 2018

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

    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
    using System;
    
    public class Test
    {
    
        class R { }
        class A : R { }
        class B : R { }
    
        static void pituh(A x, R y){
            Console.WriteLine("A R");
        }
    
        static void pituh(R x, B y){
            Console.WriteLine("R B");
        }
        
       static void pituh(R x, R y){
            Console.WriteLine("R R");
        }
        
        
    
        static void d(R x, R y)
        {
            dynamic a = x;
            dynamic b = y;
            pituh(a, b);
        }
    
        public static void Main(string[] args)
        {
        	d(new A(),new R());
        	d(new A(),new B()); //Runtime error
    	d(new B(),new A()); //Runtime error
    	
        }	
    }

    Пробуем мультиметоды в до-диезе.
    https://ideone.com/Jm5LJA

    3.14159265, 09 Марта 2018

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    // Имитируем бурную деятельность. 
    Thread.Sleep(500);
    // В реальности здесь будут байты собранной dll-ки. 
    return Encoding.UTF8.GetBytes(_fileName);

    https://github.com/UKST/compiler/blob/074760eb20a13238f1d358a27305617291351854/Compiler.Lib/Compiler.cs#L16

    dm_fomenok, 09 Марта 2018

    Комментарии (1)
  4. Куча / Говнокод #23901

    −7

    1. 1
    Ещё один тред обсуждения несбыточного мифического «нового ГК»

    Такие мысли появиласть в результате флеймов с 1024-- и вообще.

    На новом говнокоде вместо модерации должены быть:
    1. Механизм скрыльничества на уровне сайта/api
    2. Как на имиджбордах, все посты и комменты должны подчищаться из базы после определенного скрока давности, чтобы не нужно было вмешательство никаких админов и модераторов. Это хорошо решает проблему любых набегов. Но некоторые посты пользователи могут пометить как важные, которые не следует удалять. Для этого они должны выразить такое желание в явной форме, например, нажимая на кнопку «cохранить». Проблема в том, что ботоводы могут сохранять свои комменты и посты скриптами, поэтому нужно ввести хорошую капчу и какой-то сложно вычислимый DRM, вычисляя который ты приносишь пользу новому ГК в любой форме. Это либо вычисление биткоинов на кошелёк, с которого оплачивается хостинг, либо ещё какая-то форма принесения пользы сообществу. Вот об этом и предлагаю поговорить: в каких формах вообще можно принести пользу ГК, так, чтобы для оценки пользы и подтверждения факта принесения пользы не требовалось вмешательство модераторов и админов?

    Срать в текущих, ещё не умерших разделах, это никак не помешает, но мусор достаточно быстро потрётся и останутся только те комменты, которые сообщество считает полезными. Кроме того, думаю, если спамер окупает свои действия полезной работой по отношению к сайту (например, оплачивает хостинг), он имеет полное право спамить, потому что механизмы скрытия доступны всем из коробки.

    vistefan, 08 Марта 2018

    Комментарии (219)
  5. PHP / Говнокод #23894

    −1

    1. 1
    2. 2
    - $pending = $this->$tag['callback']($open['data'], $open['option']);
    + $pending = $this->{$tag['callback']}($open['data'], $open['option']);

    Копаюсь в сорцах говнокода.
    В PHP 7 поменяли приоритет, пол часа не мог понять что за хуйня.

    inho, 08 Марта 2018

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

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    for condition in price_to_deposit_config
      condition_is_true = false
      if condition.range.length is 2
        if market_data[item.id].volume >= condition.range[0] and market_data[item.id].volume <= condition.range[1]
          condition_is_true = true
      if condition.range.length is 1
        if market_data[item.id].volume >= condition.range[0]
          condition_is_true = true
      if condition_is_true is true
        #mk deposit price by this condition

    CoffeeScript. Мозг плавится 2е сутки.
    Читабельность кода уровень Высоцкого, а то и выше.

    win32, 07 Марта 2018

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

    −2

    1. 1
    Продолжение банкета

    Челлендж: НОРМАЛЬНЫЙ человек должен собрать с помощью docker PHP 5.3 с его требованиями к древним и automake, и autoconf, и bison и запустить сие существо вместе с Apache2 и MySQL.

    Сакральный смысл челленджа в том, чтобы в здравом уме начать, в здравом уме окончить.

    dm_fomenok, 06 Марта 2018

    Комментарии (18)
  8. 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)
  9. Куча / Говнокод #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)
  10. 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

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