1. Куча / Говнокод #27120

    +1

    1. 1
    IT Оффтоп #72

    #44: https://govnokod.ru/26627 https://govnokod.xyz/_26627
    #45: https://govnokod.ru/26635 https://govnokod.xyz/_26635
    #46: (vanished) https://govnokod.xyz/_26646
    #46: (vanished) https://govnokod.xyz/_26654
    #47: https://govnokod.ru/26671 https://govnokod.xyz/_26671
    #48: https://govnokod.ru/26707 https://govnokod.xyz/_26707
    #49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
    #49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
    #50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
    #51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
    #52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
    #53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
    #54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
    #55: https://govnokod.ru/26844 https://govnokod.xyz/_26844
    #56: https://govnokod.ru/26862 https://govnokod.xyz/_26862
    #57: https://govnokod.ru/26890 https://govnokod.xyz/_26890
    #58: https://govnokod.ru/26916 https://govnokod.xyz/_26916
    #59: https://govnokod.ru/26934 https://govnokod.xyz/_26934
    #60: https://govnokod.ru/26949 https://govnokod.xyz/_26949
    #61: https://govnokod.ru/26980 https://govnokod.xyz/_26980
    #62: https://govnokod.ru/26999 https://govnokod.xyz/_26999
    #63: https://govnokod.ru/27004 https://govnokod.xyz/_27004
    #64: https://govnokod.ru/27020 https://govnokod.xyz/_27020
    #65: https://govnokod.ru/27027 https://govnokod.xyz/_27027
    #66: https://govnokod.ru/27040 https://govnokod.xyz/_27040
    #67: https://govnokod.ru/27049 https://govnokod.xyz/_27049
    #68: https://govnokod.ru/27061 https://govnokod.xyz/_27061
    #69: https://govnokod.ru/27071 https://govnokod.xyz/_27071
    #70: https://govnokod.ru/27097 https://govnokod.xyz/_27097
    #71: https://govnokod.ru/27115 https://govnokod.xyz/_27115

    Запостил: nepeKamHblu_nemyx, 19 Ноября 2020

    Комментарии (214) RSS

    • Добрый вечер.

      Этот оффтоп сгенерирован автоматически.

      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/ (альтернативный Говнокод)
      * https://gcode.space/ (read-only зеркало Говнокода)
      * https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
      * https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
      * https://vorec.space/ (глоссарий Говнокода)
      * https://app.element.io/#/room/#govnokod:matrix.org (резервный чат)
      Ответить
    • Есть два стула: на одном изменение БД так, чтобы в таблице «комментарии» содержалась только персистентная информация (дата написания, ID), а текст комментария брался из таблицы «версии» (SELECT ... version.comment_id = ... ORDER BY version.date DESC LIMIT 1;), на другом — менее разрушающее изменение: таблица «комментарии» не меняется, «версии» вводятся как отдельные сущности. На какой стул сами сядете, на какой НГК посадите?
      Ответить
      • зачем тебе разные версии комментариев?

        д++ сейчас тебе скажет, что данные лучше вообще не менять, бо mvcc будет проткнутое (у тебя же постгря?)
        Ответить
        • Историю хранить, видимо.
          Ответить
          • Не проще ли тогда хранить их в git?
            Ответить
            • Производительность не позволяет.
              Ответить
              • Да норм будет, я думаю. В основном же актуальные треды просят, а они в кеше.

                Другое дело, что гит долго по истории грепает т.к. хранит полные снепшоты а не дельты, надо всю историю ветки прочёсывать даже ради одного файла.
                Ответить
        • В качестве самого минимума — чтобы выводить заванишенные комментарии. Что-то вроде «/api/comments?unvanish=true» — и такой запрос выбирает последнюю версию, не равную «vanished» (скорее всего придётся поебаться с флагами). В качестве максимума — чтобы получать всю историю изменений комментария.
          Ответить
          • http://govnokod.ru/26964#comment577567
            Ответить
            • Да, спасибо, помню это обсуждение. Если бы БД делалась с нуля — мы бы так и запилили. Проблема в том, что нужно изменить существующую БД, а это сопровождается всяческим геморроем.
              Ответить
              • >всяческим геморроем.
                а в ваших алчеми миграций умных нет?
                Ответить
                • «NGK» принят в наследство, систем миграции там изначально не было. Все вопросы к bormand.
                  Ответить
                  • миграшки лучше уметь

                    мы еще когда писали под ms-sql 2005 прямо в студии, сама студия генерила миграшки)
                    ну и почти все современные фреймворки это могут из коробки
                    Ответить
              • > существующую БД

                Сделай новую и перенеси данные. Оно ж read only, джва инстанса без проблем работать будут, разве что ГК чуть больше напрягут.
                Ответить
                • Хм, а это идея. Спасибо, передали в инженерный отдел.
                  Ответить
                  • Да вообще историю можно хранить денормализованным говном где угодно, если тебе не нужно делать умный диф или быстро куда-то откатываться
                    Ответить
        • > у тебя же постгря?
          Подтверждаю.

          > д++ сейчас тебе скажет, что данные лучше вообще не менять
          Не так тебя понял. Ну вот да, я тоже об этом думаю. Радикальное изменение существующей таблицы (удаление/замена столбцов) выглядит слишком⁢… радикальным. И геморроя больше, конечно.
          Ответить
          • но у тебя не такой хайлоад, чтобы пиздец, любой вариант нормально
            Ответить
          • Там не про DDL, а про DML.

            В MVCC у тебя любое изменение данных приводит к добавлению еще одного ряда, так как все ряды ридонли. Потому если ты будешь много срать изменениями то будет не оч хорошо, но можно делать вакуум
            Ответить
            • Ну реально меняется только бывший latest, так что это не сильно нагрузит вакуум, имхо. По сути одна старая запись меняется если вставили новую версию. Не то чтобы тут миллионы комментов редактировали.
              Ответить
      • Я хотел в ту же, но добавить флаг latest чтобы быстро фильтровать для нормального просмотра.

        Ну и в запросе флаг history чтобы получить все версии комментов, а не только последние.
        Ответить
        • фу денормализация
          Ответить
        • > но добавить флаг latest чтобы быстро фильтровать для нормального просмотра.
          Можно тогда в comments просто добавить ID последней версии, так даже фильтровать не нужно будет.
          Ответить
          • Не ну можно с partiton by. Я правда не помню, можно ли по этой конструкции индекс построить. Если можно, то вообще летать будет.
            Ответить
            • зависит от того, сколько раз тебе читать, а сколько писать
              всё же обычно 90/10 или 99/1, поэтому вариант с аналитической функцией (или я бы рекомендовал латерал джойн, внутри которого ордер и лимит 1) просрёт денормализации, где при записи всё что надо вычислено и сложено, и индексировано

              если чо, постгрес умеет партиал индекс, типа index ... on comments (nonunique_comment_id) where is_latest;
              Ответить
    • Борманд, а тебе такие няшки тоже нравяцца https://games.mail.ru/pc/news/2020-10-13/kosplej-dnya-jennifer-bez-odezhdy-bezumnyj-houmlender-i-hitraya-sid ?
      Ответить
    • Что-то TOPT не выходит на связь. Батарейка на телефоне села?
      Ответить
      • Пойду-ка тоже заряжусь, а то у меня тоже второй раз свет мигнул (((
        Ответить
    • До чего ж «PostgreSQL» охуенен!
      Берём циркулярную зависимость по FK:
      ALTER TABLE comment_revisions
          ADD CONSTRAINT fk_comment_revisions_comment_id FOREIGN KEY (comment_id)
          REFERENCES comments (id_ru)
          DEFERRABLE INITIALLY DEFERRED;
      
      ALTER TABLE comments
          ADD CONSTRAINT fk_comments_last_revision_id FOREIGN KEY (last_revision_id)
          REFERENCES comment_revisions (id)
          DEFERRABLE INITIALLY DEFERRED;

      — и вуаля, внутри транзакции мы можем сначала INSERTнуть коммент с last_revision_id = 42, потом INSERTнуть новую ревизию с id = 42, всё это дело успешно закоммитить и получить все гарантии внешнего ключа.

      А вот «MySQL» так не может, поэтому один из констрейнтов придётся удалять и надеяться на высшие силы, что однажды туда не пихнётся какая-нибудь хуйня.
      Ответить
      • До чего охуенен!..
        ngk=# CREATE INDEX ix_sync_states ON sync_states(pending, priority) WHERE pending;
        CREATE INDEX
        
        ngk=# EXPLAIN ANALYZE SELECT * FROM sync_states WHERE pending ORDER BY priority DESC;
                                                                      QUERY PLAN
        ---------------------------------------------------------------------------------------------------------------------------------------
         Index Scan Backward using ix_sync_states on sync_states  (cost=0.13..20.98 rows=6 width=53) (actual time=0.008..0.012 rows=6 loops=1)
         Planning Time: 0.062 ms
         Execution Time: 0.020 ms
        (3 строки)
        Ответить
        • > sync_states

          Не то чтобы вся эта табличка не входила в кеш... А до внедрения индекса какие циферки были?
          Ответить
          • Конкретно для неё, конечно, там цифры крохотные — единицы миллисекуд на seq scan даже на впске (выше я на локальной базе тестирую), обойти чуть больше 27-ми тысяч небольших записей можно и прямо в «Питоне», лол. Меня поразила сама возможность для оптимизации: будь в этой таблице миллиарды строк, из которых с pending == true только единицы/десятки/etc., частичный индекс позволил бы сэкономить дохуя памяти и, главное, места в кэше.

            P. S. А вот почему «Posgresql» не использует частичный индекс по «sync_states(priority) WHERE pending» (не композитный) для сортировки в том же запросе, а сортирует результат куи-и-и-к-сортом — я так и не понял. Анскилл, что ли?
            Ответить
            • попробуй индекс (priority) where pending;
              зачем тебе в твоем текущем индексе хранить кортежи (true, ...) я хз
              Ответить
              • Вот я тоже не знаю, зачем они нужны «Postgresql»:
                ngk=# create index ix_sync_states on sync_states(priority) where pending;
                CREATE INDEX
                ngk=# explain analyze select * from sync_states where pending order by priority desc;
                                                                         QUERY PLAN
                -----------------------------------------------------------------------------------------------------------------------------
                 Sort  (cost=28.59..28.60 rows=6 width=53) (actual time=0.023..0.023 rows=6 loops=1)
                   Sort Key: priority DESC
                   Sort Method: quicksort  Memory: 25kB
                   ->  Bitmap Heap Scan on sync_states (cost=8.16..28.51 rows=6 width=53) (actual time=0.014..0.018 rows=6 loops=1)
                         Recheck Cond: pending
                         Heap Blocks: exact=6
                         ->  Bitmap Index Scan on ix_sync_states  (cost=0.00..8.16 rows=6 width=0) (actual time=0.011..0.011 rows=6 loops=1)
                 Planning Time: 0.193 ms
                 Execution Time: 0.040 ms
                (9 строк)

                Насколько я понимаю (из https://habr.com/post/330544/), в композитном индексе по столбцам (a, b) все строки с одинаковыми a будут отсортированы по b, то есть для выполнения запроса вида «a = C order by b» достаточно будет просто последовательно (или обратно-последовательно) выдать строки с a = C — что мы и наблюдаем в верхнем примере («Index Scan Backward using ix_sync_states»).
                С индексом «(priority) where pending», по идее, должно быть всё в точности так же — для сортированного вывода нужно просто выдать все строки из индекса в том порядке, в каком он их и выдаёт. Но либо я что-то не понимаю, либо «Postgresql» что-то не понимает — и в итоге получается какая-то питушня.
                Ответить
      • 1) ну прямую (ревизии от клиентов) ты как раз можешь сделать inittially immediate
        2) не забывай delete/update action, жалко что-ли? А то будешь как п*р с*р, которому тяжело в каскад (или его myisam не умел)
        3) обязательно нужно индексировать колонку, с которой уходит ФК констрейнт, ведь когда что-то происходит с целевой таблицей (удоление, к примеру, не то, чтобы это твой кейс, но), СУБД обязана проверить есть ли зависимые записи и что с ними делать - без индекса СУБД вынуждена в фул скан только.
        В данном случае индекс в ревизиях по комент-айди, очевидно, тебе и в селектах будет очень уместен
        4) капс лок в сикеле это как будто из 1970 на тебя наорали
        Ответить
        • Спасибо! Действительно, оба их делать deferred нинужно, не подумал. Окончательные индексы потом будем добавлять, когда отрефакторим код и посмотрим на реальные запросы, но да, по revisions.comment_id индекс однозначно будет.

          > капс лок в сикеле это как будто из 1970 на тебя наорали
          КАКОЙ багор ;;;
          Ответить
    • ПОСОНЫ НЕ КОЧАЙТИ ПЕШУ С УТЮГА:
      http://grep.cs.msu.ru/ISO/Fridman43DATA/
      Ответить
      • Что это такое?
        Ответить
        • Можно погуглить имя директории. Оно довольно уникальное.
          Ответить
          • Капец что делается-то.

            «Утечку допустили владельцы «Билайна» Михаил Фридман и Петр Авен»

            Хорошо, что у меня не «билайн», как вообще можно было свои ПД доверить «Фридману» и «Авену»?
            Ответить
      • никогда такого не было и вот опять

        https://tgraph.io/Uznayom-nomer-telefona-i-adres-populyarnoj-lichnosti-01-14-2
        Ответить
      • База данных Кронос, лол
        Ответить
    • https://git.sr.ht

      Какая няшная убийца гитхаба! Нет йажаскриптов, есть CI c поддержкой plan9, пиары только по почте.
      Ответить
      • Шикарно. У меня от восторга даже пятнышко на штанишках выступило.
        Ответить
    • Команда Rust рада сообщить о выпуске новой версии, 1.48.0.
      Rust — это язык программирования, позволяющий каждому
      создавать надёжное и эффективное программное обеспечение.
      Ответить
    • https://i.imgur.com/RiR95bL.jpg
      Так, кто тут недавно форсил «Kotlin»?
      Ответить
      • Я десять лет делаю Котлин, и последние лет шесть все хотят со мной говорить только про него. Вопросы про Котлин у всех одинаковые, мне жутко надоело на них отвечать.

        Мне сейчас больше интересны гуманитарные темы — про психотерапию, полиаморию, гендерный баланс.
        Ответить
        • Какой гендер у котлина вы считаете корректным? Хотите поговорить об этом?
          Ответить
          • Мне кажется, что все нормально общаются с этим чуваком, до тех пор, пока разговор не заходит о работе.

            — Кстати! Я слышал, ты программист на Котли-
            — КОКОКОКО КАК ЖЕ ВЫ ЗАЕБАЛИ КОКОКОКО ДА Я ПИШУ СКРИПТ ДЛЯ ЖВМ И ЧТО??? Я ПО ТВОЕМУ СКРИПТУХ!?!?
            — Котлин-Котлин-Котлин-Котлин!
            — *неистовое кукареканье, не передаваемое письменно*
            Ответить
            • Котлин это не скрипт, точнее есть и скрипт, и не скрипт
              Ответить
        • Бреслав?:)

          Он известный феминист, да.
          Ответить
      • Who the fuck is FRACTRAN?
        Ответить
      • Эх, а Ди нету
        Ответить
        • А он есть? Что-то про него последнее время вообще ничего не слышно.
          Ответить
          • Какие то конфы онлайн проходят. Я и про го/раст/котлин тоже ничего не слышал нового. Видимо если не слушать, то и не услышишь.
            Ответить
            • Про раст, го и котлин тут регулярно пишут. Можешь восполнить этот пробел.
              Ответить
        • «Ответ требует лекции на полтора часа. Но если коротко, то это C++ сделанный правильно. Статьи про него есть на хабре, но уходить в подробности не вижу смысла. Он гораздо удобнее и приятнее для программиста, предлагает более высокую продуктивность при той же производительности. Убийца C++, если хотите, только при этом не rust»

          Он действительно НАСТОЛЬКО хорош? Почему тогда вакансий мало?
          Ответить
          • > хорош

            А это не коррелирует. Какой там язык наиболее популярен для вебсайтов?

            Но для убийцы крестов как-то странно юзать gc. Да и гомоиконность на строках вместо AST выглядит как чит.
            Ответить
            • так-то в крестах есть функции для гц https://en.cppreference.com/w/cpp/memory/gc/declare_reachable
              Ответить
              • к счастью, в крестах нет идиотов, юзающих гц

                гц не нужен.
                Ответить
                • Хм, поюзать то можно было бы, но таких реализаций походу нет.

                  c++/cli разве что, но там своя атмосфера.
                  Ответить
                  • зачем тебе гц?

                    Swift вон например доказал, что можно сделать весьма простой и понятный язык, совсем не для царей и пирдоль, и при этом не трогать гц

                    Да и smart поинтеры вроде бы нормуль работают
                    Ответить
                    • Ну для всякой гуйни где RAII и пирфоманс не важны удобно было бы. weak ref'ы расставлять всё-таки муторно.
                      Ответить
                      • Я когда писил на Objc (а писал я гуйню под UIKit/IOS), то совсем не страдал от расстановок weak ref, потому что у меня всегда была четкая картина в голове у кого на что ссылка, и Apple давал на этот счет четкие рекомендации.

                        А когда ты пишешь на джавке какой-нить, то ты всё равно должен понимать кто на что ссылается, иначе ты случайно передашь в обработчик онклика лямбду, которая тебе захватит три гига говна.

                        Так что я вот не очень уверен, что GC дает какие-то волшебные фичи, которые не дают рефкаунты
                        Ответить
                        • > Так что я вот не очень уверен, что GC дает какие-то волшебные фичи, которые не дают рефкаунты

                          Compaction, например.
                          Ответить
                          • Это правда, память можно фрагментировать случайно.
                            Но можно делать большие арены, и грохать их целиком
                            Ответить
                    • > Swift вон например доказал, что можно сделать весьма простой и понятный язык, совсем не для царей и пирдоль, и при этом не трогать гц

                      Каждый раз, когда выходит новая версия Swift, я перекомпилирую и запускаю свою первую программу на нём, которая отрабатывает нормально, но при выходе пробивает дно стека, пытаясь рекуррентно вызвать деструкторы для cons-cells. И, что характерно, до сих пор не пофиксили. Такие дела.
                      Ответить
                      • > первую

                        И последнюю?
                        Ответить
                      • Интересно, что это за программа. Небось какая-нибудь научно-программистская питушня, которая даже в машину Питуринга не влезает.
                        Ответить
                        • Связный список который он сюда постил, наверное.
                          Ответить
                • > гц не нужен.

                  Лол, поюзай CUDA, где надо вручную менеджить память не только хоста, но и девайса, и мувить данные туда-сюда, быстро сменишь мнение на противоположное.
                  Ответить
                  • Эм, да там и RAII вполне норм работает -- циклических зависимостей между буферами нету, глубоко вложенных структур тоже.
                    Ответить
                    • Для этого надо пилить классы, как минимум, или брать их из thrust. Из коробки там только malloc да memcpy.
                      Ответить
                      • А GC там изкоробки и классы пилить не пришлось бы?
                        Ответить
                        • Не понял вопроса. Я не предлагаю использовать GC для CUDA (не взлетит), суть изначального поста была в том, что подзаебавшись от двойной работы с памятью, пользователь MAKAKA научится ценить отсутствие необходимости делать это, когда это не требуется.
                          Ответить
                          • Подзаебавшись от ручного управления ресурсами (не памятью!) в языках с GC, я начал ценить RAII.
                            Ответить
                            • Why not both? RAII в языках с GC делается тривиально.
                              Ответить
                              • приведи пример
                                Ответить
                                • https://hoogle.haskell.org/?hoogle=with
                                  Ответить
                                  • Спасибо
                                    Возможно, мне стоит попробовать хаскель

                                    Но в мейнстримном говне типа джав, питонов и сишарпов всё очень плохо
                                    Ответить
                                    • > Но в мейнстримном говне типа джав, питонов и сишарпов всё очень плохо

                                      Я про этот высер индустрии ничего не знаю и не говорю. Под "языками с ГЦ" я подразумеваю нормальные, практические языки типа `Haskell' и `Erlang'.
                                      Ответить
                              • Х.з., во всех популярных языках какое-то убожество где надо вручную каскадить close через close.

                                Ну в питоне разве что ExitStack немного помогает, но всё равно писать что-то надо.
                                Ответить
                              • Вот. Пора бы уже сделать комитет, который с умом запилит нормальный язык с продуманными фичами, на котором можно будет удобно и легко писать и читать код.
                                Ответить
                                • И чтобы на этом языке можно было писать под любую платформу и любые потребности - ПК, смартфоны, микроконтроллеры, сайты, игры, ПО.
                                  Ответить
                                • Так регулярно пытаются
                                  И всегда получается говно
                                  Ответить
                                  • Говно у тебя в жопе.
                                    Ответить
                                  • Говно получается из-за версионирования. Либо резко редизайнят и дропают совместимость, из-за чего на новый божественный язык почти никто не переходит долгие годы (питно 3), либо держат совместимость и новые фичи зависят от старого говна, из-за чего выглядят как говно (крысты 11 и дальше).

                                    Пока я не свалил с ГК, предлагал "скриптушню" с версионированием. Исходный код всегда остаётся, но помечается, от какой он версии (как в HTML страницах), конпелятор преобразует код со старых версий в новые (оверхед покрывается созданием новых процессоров: пока вышла новая версия языка, которую конпелятор конпелирует напрямую, разница в производительности покрывает возможный оверхед от трансляции в новую версию). Соответственно, язык можно целиком редизайнуть, если он скатился в говно, но в одной программе можно использовать несколько пакетов, написанных на разных версиях.
                                    Ответить
                                    • Ну ты примерно описал бейбел и джаваскрипт:)

                                      Я в целом согласен, что языки нужно обновлять, предоставляя тулы для трансплплплпрвания (никогда не выговорю это слово) из старых версий в новые.

                                      Но проблема в том, что и новые языки иной раз привносят новое говно.

                                      Кстати, давайте перечислим бескт практисес, которые сейчас уже очевидны всем

                                      * variable: Type лучше Type variable
                                      * стат типизация лучше отсутствия оной
                                      * лямбды и кложи нужны
                                      * функциональщина нужна: ``petuhs.where {age > 12}``
                                      * неизменяемые сущности лучше изменяемых
                                      * наследование зло
                                      * ООП далеко не всегда нужно
                                      * для букв нужен отдельный тип, не имеющий с байтами ничего общего
                                      * асинхронность лучше уметь на уровне языка
                                      * пакетный менеджер это полезно, особенно если он явно указывает версии всего, что нужно
                                      * модульность и линковка важна
                                      * профилировщик и дебагер это важно
                                      * юниттесты важны, лучше уметь их из коробки


                                      что еще?
                                      Ответить
                                      • За "наследование зло" я тебе сейчас ухо откушу
                                        Ответить
                                        • Но ведь наследование -- зло. Я сейчас не про LSP аля интерфейсики, а про наследование реализации. Агрегация и делегирование рулят и не светят кишками наружу в отличие от наследования.

                                          И да, если наследование остаётся, то final должен быть по-умолчанию.
                                          Ответить
                                          • В D все методы в классах по дефолту virtual, это минус. Зато есть сахарок для проксирования полей, что уравнивает агрегирование и наследование (в отличии от плюсов).
                                            Ответить
                                            • > все методы в классах по дефолту virtual, это минус

                                              А запретить наследование можно? Тогда не такой уж и минус, даже джава умеет в девиртуализацию вызовов если класс точно известен.
                                              Ответить
                                              • можно использовать структуры. У них могут быть методы, но нет наследования. А еще в них можно обмазаться RAII.
                                                Ответить
                                      • Ты походу D описал.
                                        * Type variable досталось от сишки, тут минус
                                        * кложи подразумевают гц или аналог, плюс
                                        * функциональщина - petuhs.filter!"a>12" - куча способов для ленивости, плюс
                                        * неизменяемые сущности - модификатор immutable, плюс
                                        * наследование зло, поэтому оставили полузло - только в классах, но не в структурах
                                        * ООП далеко не всегда нужно - никто не заставляет писать классы как в Джаве, плюс
                                        * про буквы не уверен
                                        * асинхронность на уровне языка ограничивает язык и способы реализации (в D есть удобная либа на фиберах), но лучше безобразно, зато единообразно
                                        * пакетный менеджер, плюс
                                        * модульность (настоящая, не как в плюсах) и линковка, плюс
                                        * профилировщиком выступает компилятор, дебагером пока что визуалка или gdb
                                        * юниттесты из коробки, плюс
                                        Ответить
                                • Комитет? Ты еще общедомовое собрание проведи. Имхо, с ростом числа участников, принимающих решения, вероятность единого мнения стремится к нуля. Т.е. уже двое могут не договориться.
                                  Думаю этим можно заодно объяснить отсутствие реальных теорий заговора - каждый будет искать свою выгоду и гадить остальным.
                                  Ответить
                      • > memcpy

                        Везёт, на вулкане даже этого нету. Надо ставить в очередь команду на DMA копирование.
                        Ответить
          • может потому что проектов мало, или ниша не нашлась (между плюсами и джавой судя по всему), или нет корпорации, которая его бы пиарила.
            Кстати а что с гугловским Dart?
            Ответить
            • Скорее всего последний вариант. Хотя вот я не знаю... По идее, если язык действительно очень хороший, то рано или поздно найдётся ведущий программист / чувак-стартапер, который скажет: «Оптимальным для этой задачи будет язык D». Если проект окажется успешным, то и другие ведущие программисты подтянутся.

              Вероятно, есть в D какой-то багор, который отпугивает программисов.
              Ответить
              • на hh.ru как-то проскакивали вакансии. По одной букве их сложно искать )))
                Ответить
            • Х.з., какой-то чел пишет, что сырое оно: на первый взгляд всё круто, но потом вылезает куча недоработок в деталях. И подводных камней на уровне крестов.

              Или сейчас это уже не так?
              Ответить
              • С каждым годом лучше, косяки исправляются, кол-во разрабов самого компилятора растет.
                Но судя по списку компаний https://dlang.org/orgs-using-d.html пока его используют для разных тулз (кроме Weka). Т.е. как я ранее и писал - он отличная статически типизированная замена питону (похож на плюсы и не такой урезанный как Го), но никак не вместо плюсов в больших проектах.
                Ответить
                • Ну вот срачик про weka я как раз и читал. Они там чуть ли не рейжквитнуть и переписать на пхп собирались. Но видимо всё-таки удалось запинать баги.
                  Ответить
                  • там вроде так и остались на первой версии языка, которую после выхода второй в 2007 году перестали поддерживать.
                    Ответить
                    • Какое legacy )))
                      Ответить
                      • Походу если твой проект имеет 200К строк на неудачно выбранном языке, то переписывать его будет дорого. А если еще и с точки зрения менеджеров продукт нормально работает, то никто не поставит задачу про переписывание.
                        Ответить
                        • А когда перфомансный петух клюнет, уже поздно будет переписывать, поэтому встанет вопрос о написании транслятора с неподходящего языка на подходящий.
                          Ответить
                    • И рантайм сами переписали, походу.
                      Ответить
                      • А кто его не переписывает под свои нужды? Кажется кто-то упоминал, что std контейнеры и алгоритмы в UEFI нельзя использовать из-за исключений.
                        Ответить
                        • Ну х.з., в том же расте хотя бы пытались отделить платформу от рантайма. Не знаю насколько успешно.

                          Ну и сетевая файлуха всё-таки не та вещь, которой мешает зависимость от оси.
                          Ответить
            • Dartа убил тайпскрипт вроде, и поделом
              Ответить
              • я думал дарт для мобилок придумали
                Ответить
                • Ну изначально вроде как замена джаваскрипту, но потом развили и до мобилок тоже

                  Но я хз, кто на нем пишет
                  Ответить
                  • и хуй с ним, позавчера typescript новый зарелизили

                    https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/
                    Ответить
                    • прикольный язык всё таки
                      function setVerticalAlignment(pos: "top" | "middle" | "bottom") {
                          // ...
                      }
                      
                      setVerticalAlignment("middel");
                      // error: Argument of type '"middel"' is not assignable to


                      система типов хорошая
                      Ответить
                      • vanished. Да, хорошая.
                        Ответить
                      • тперь можно так
                        type vertical = 'top' | 'bottom'
                        
                        type horizontal = 'left' | 'right'
                        
                        type positional = `${vertical}-${horizontal}` // "top-left" | "top-right" | "bottom-left" | "bottom-right"
                        Ответить
                        • А чем это лучше вот этого:
                          enum Vertical {
                              TOP, 
                              BOTTOM
                          };
                          
                          enum Horizontal {
                              LEFT,
                              RIGHT
                          };
                          
                          struct positional {
                              Vertical vertical;
                              Horizontal horizontal;
                          };


                          Ладно, пока писал, понял чем лучше. А ещё?
                          Ответить
                          • А еще тем, сколько ты буковок ненужных написал
                            И тем, что типизацитя структурная
                            Ответить
                          • Вместа ответа на вопрос я попрошу описать тебя енумами вот этот тип
                            type notReallyPositional = Exclude<positional, 'top-right'> //  "top-left" | "bottom-left" | "bottom-right"
                            Ответить
                            • Можно было бы наметушить, конечно, но я анскильный и не сумею (думал в сторону static_assert в конструкторе).

                              Такая система типов очень даже хорошая, но можно схитрить и реализовать её на плюсах с помощью сетов, т.е. написать свой кококонпелятор тайпскрипта.
                              Ответить
                              • на крестах можно наметушить действительно, на всяких анскильных языках типа джав остается только запить холодной водой
                                Ответить
                                • Иногда лучше жевать чем метушить.
                                  Ответить
                                  • заметь, как это красиво и изящно решил тайпскрипт питух.
                                    Ответить
                      • Вы случайон не TipeScritp middel?
                        Ответить
      • Есть нексколько областей, в которых котлин обосрался. Но в целом он много приятнее джавы
        Ответить
        • Котлин, вроде бы, с помощью llvm могёт компилироваться в машинные коды? Если он прост как джава, совместим с джавой, да ещё и компилится, то джава нинужна.
          Ответить
          • могет, есть kotlin native, но я не уверен, что ты этого хочешь. Это будет нестабильное урезанное говно и еще небось с гц

            >джава ни нужна

            ну, кому-то JVM нужен. А кто-то под андроид пишет.
            На kotlin это делать приятнее, чем на Java почти всегда, кроме корнер кейсов
            Ответить
    • «Starlink» заебал. Просто взял, блядь, — и заебал!
      Ответить
    • Собираем знакомым десктоп. Мон, БП, корпус и прочая питушня уже есть (остались от старого).

      Люди не богатые и не требовательные, но хочется, чтобы видосики с котиками не тормозили (даже очень широкие), и фотошоп иногда запускался.

      Думаем так:
      Comet Lake i3-10100. По тестам он не шибко хуже моего рабочего 8700k. У кометов некоторые процы идут без видяхи, так что тут важно не абебаться, но конкретно этот имеет UHD 630, она очень даже годная.

      Мамку на B460 (Самый дешевый чипсет из 400й серии), например Asus PRIME B460M. В ней ниухяч нет почти (mATX), ну и похуй. Внезапно нет hdmi, есть только dvi-d, но опять же похуй: втыкнем переходник.

      ddr4 две планки по 4, корсар. Можно и две по 8, там не большая разница. Частоту не смотрел, ну 2666 наверное

      ssd nvme на 256 plextor. Десятке более чем достаточно места, и на винду, и на рекавери поинты.

      Получается порядка двадцати штук с хвостиком.

      Думаете, на AMD было бы дешевле?
      Ответить
    • Всё таки кресты со своими "если конструктор упал, то и деструктор не вызывается" и "const поля должны проставляться в инициализации" это великая вещь.

      Джаваёбный питушок нахуячил тристра строк говна в конструкторе. Триста блядь строк.
      Потому что джава позволяет.

      Джаваёбы такие пафосные поборники ООП, а всё равно плодят гадобжекты
      Ответить
    • https://lenta.ru/news/2020/11/23/nalog/

      Президент России Владимир Путин подписал закон об увеличении с 2021 года ставки налога на доходы физических лиц (НДФЛ) до 15 процентов для богатых граждан, чей годовой доход превышает пять миллионов рублей. Документ опубликован на официальном интернет-портале правовой информации.

      Петух, а ты богатый, петух?
      Ответить
      • охуенно богатый питух с зп чуть больше пяти штук баксов

        прям абрамович
        Ответить
        • если кроме зп ничего, тогда ты не щитаешься богатым
          Ответить
      • http://publication.pravo.gov.ru/Document/View/0001202011230015?index=1&rangeSize=1

        Ебать, там походу на печатной машинке документ набирали )))
        Ответить
        • ебаный ад читать этот гитлог, вместо того, чтобы для людей новую версию НК официально дать

          надо теперь лезть в консультант/гарант
          Ответить
          • Была статья про законы в гите https://github.com/steeve/france.code-civil , https://github.com/bundestag/gesetze
            Ответить
          • короче пока нихуя не понятно
            в законе про сумму налоговых баз

            если работник работает в ООО Рога за 208.334,00 и ООО Копыта за 208.334,00, к концу года у него 5.000.016,00 дохода суммарно
            кто из налоговых агентов теперь должен заплатить "добивание до 650т.р." отдельной платежкой и 15% налога с суммы, превышающей, отдельной
            не понятно
            Ответить
            • Ну и хуй с ним. Пойди с ребятами обсуди бейсик в соседнем треде.
              Ответить
            • > 016

              Убавить на пару рублей зарплату да и всё.
              Ответить
              • Опять же, Рогам или Копытам?
                Ответить
                • как раз тут одно из двух

                  либо ни рога, ни копыта не в курсе, и тогда заплатить новый налог становится обязанностью гражданина по 3-НДФЛ к апрелю (хз, дичь какая-то),

                  либо как с взносами в фонды, рога отдельно свои 5 млн считают, копыта отдельно свои 5 млн считают (не вяжется с духом текста ФЗ, но просто как мысли вслух), и это дохуя теперь лазейка не платить повышенный налог - просто создаешь столько ОООшек, сколько надо, везде получаешь меньше 5 млн, всё ништяк

                  не вяжется с духом, потому что как раз разные доходы в этом ФЗ свалили в кучу, чтобы получить суммарную налогооблагаемую базу, и эта куча точно не из одного налогового агента возьмётся (как зарплата и доходы от выигрышей блять)
                  Ответить
                  • > обязанностью гражданина

                    Кстати, налог на вклады тоже ведь по такому принципу будет работать. Пофиг, сколько у тебя банков и как между ними разбито.
                    Ответить
                    • ну налог со вклада теоретически может сам рос. банк удерживать, как налоговый агент
                      (но это не точно, это же тоже какая-то охуенно новая тема про налоги с вкладов)
                      Ответить
                      • Я бы сделал, чтобы физ лицо само платило 2% налог свыше 5 лямов. А иначе как?
                        Ответить
                      • > сам банк

                        Не, нихуя. Там же такая же проблема, что банков у тебя может быть куча и непонятно какой сколько должен с тебя удержать. Поэтому они просто сливают всю эту инфу в налоговую, а та считает сколько ты в итоге должен выплатить. Сам.

                        Возможно и здесь подобная хуйня будет. В принципе, вся статистика по зарплате у налоговой есть...
                        Ответить
              • Откуда «Рога» знают, сколько работник получает в «Копытах»?
                Ответить
    • gost, так что ты в итоге сделал, чтобы к тебе тащ майор не приходил?
      Ответить
    • https://www.pornhub.com/jobs/job/software-developer-php/

      Date Posted:
      Posted 3 years ago

      Expiration date:
      December 31, 2020

      Что, никто не хочет? Или пхп-программист - зашквар?
      Ответить
      • Да там в php части то поди ничего интересного, хайлоад всяко не через пых раздаётся.

        З.Ы. Кстати, то ли они то ли ещё какой-то порнушный сайт -- один из самых крупных юзеров haproxy.
        Ответить
      • не, на пхп не пойду, стыдоба же
        Ответить
        • Я тоже. Как я маме потом скажу чем занимаюсь?
          - Мам, я на пхп пишу
          - Стыдоба какая. Ты мне больше не сын
          Ответить
          • --ты где работаешь?
            --в порнхабе
            --фууу
            -да я не программистом, я модель
            --а, ну ты не пугай так
            Ответить
      • ввел в гугл "pornhub github" и нашел "Github Porn Videos"
        боюсь смотреть
        Ответить
        • И правильно делаешь, потому что как-то раз порнхаб слил юзеров, которые логинились через ВК. Ну, не слил, их просто вычислили кое-каким методом (можно проверить, использует ли пользователь конкретное приложение).

          Именно поэтому я за DojkiOnlinefreePornNoSMSRussianSex.com
          Ответить
          • я не логинюсь через вк, у меня и Вк-то нету

            Я открываю inspect element, удаляю какой-то ненужный div, и теку
            Ответить
            • А я сижу через VPN, чтобы провайдер не показывал пальцем и не говорил сисадминам: «ха-ха смотрите опять зашёл! надо бы записать его IP в файл Dpo4uJlbl.txt».
              Ответить
              • уверен, что на ph ходит 100% клиентов моего прова, или чуть меньше
                Ответить
                • Представляешь как ему весело на работе?
                  Ответить
                  • у меня знакомый в прове работал, и грил что бОльшая часть траффика это порнуха
                    Но это было давно. Сейчас вроде бы бОльшая часть это вконтакт, потому с ним все хотят пирица
                    Ответить
                    • гледи, опять пирится
                      бабу себе заведи, фрилансер
                      Ответить
                    • > бОльшая часть это вконтакт

                      Дык там поди тоже порнуха.
                      Ответить
                      • З.Ы. Пирацкую музыку то прикрыли поди уже там?
                        Ответить
                        • В рашке поди уже всё прикрыли?
                          Ответить
                        • Ещё нет, но иногда некоторые аудиозаписи удаляют (в списке числятся, но послушать уже нельзя, приходится искать перезалив).
                          Ответить
                          • зачем музыка в ВК, когда можно с торрентах качать в качестве лосся?
                            Ответить
                            • Не вся музыка есть на торрентах, наверное. А может и вся.

                              Наверное, ещё с sound cloud можно как-то выкорчевать песенки, так что в принципе ВК действительно нинужен.
                              Ответить
                              • на крайняк есть youtube
                                Ответить
                                • Youtube уж точно менее удобный, чем VK или торрента + SC.

                                  Тем более, там вроде бы звук отсосный.

                                  https://audiophilesoft.ru/publ/my/youtube_audio_quality/11-1-0-285

                                  В ВК, конечно, тоже не всё хорошо, но хотя бы пердолиться не надо, плюс плеер относительно удобный в отличие от ютюба.
                                  Ответить
                                  • > Тем более, там вроде бы звук отсосный.
                                    > youtube_audio_quality
                                    Лично я не чувствую чего-то плохого в MP3 128kbps, ну может пару нахрюков в специально подготовленных профессионалами треках, если специально вслушиваться, а в MP3 192kbps уже точно изъянов не найду, поэтому звук в 720p и выше на Ютубе для меня уже достаточен (в 480p и ниже уже в некоторых роликах заметна питушня).
                                    Ответить
                            • Это да. Не важно, скачать в интернетах без СМС и регистрации или купить CD, но музыка должна лежать локально, чтобы можно было её слушать как в лесу или с ограничениями могильного интернета, так и при условии залефтпадивания сервиса.
                              Онлайн-питухи - только для поиска питушни, которая тебя радует.
                              Ответить
                              • Я с тобой полностью согласен.

                                Если твои данные в облаке – ты ими не владеешь по-настоящему.

                                Как-то раз у Mega была акция, 50 Гб места при регистрации нового аккаунта. Я три аккаунта завёл, а через месяц, если не оплачу pro-план, всё свыше 15 Гб удалится )))

                                Я, кстати, всё хочу на питухоне скрипт написать, чтобы названия групп и песен импортировать как списочек, чтобы потом всё найти в инторнете и скачать, но всё руки не доходят.
                                Ответить
                                • > скрипт написать, чтобы названия групп и песен импортировать
                                  Пора писать, а то на том же ютубе вместо потёртых видео отображается только "видео удалено" и указывается не его название (полезная информация), а причина удаления. Список песен можно потерять в любой момент.
                                  Ответить
            • > удаляю какой-то ненужный div

              Какая аутентификация )))
              Ответить
              • кроме шуток
                там всё прикрито дивом , его удаляешь, и всё
                Ответить
                • Пощекотал твой нёбный язычок моржовым хуем, проверь.
                  Ответить
                • На quora так же. Хотя там проще параметр передать (q=1 кажется) чтобы не просило регистрироваться.
                  Ответить
      • Кстати, в России и в Беларуси распространение порнографии – это преступление. Могут как соучастника привлечь, а ещё добавить:

        1. Педофилию (хентай на этом сайте точно есть).
        2. Пропаганду геев.
        3. Экстремизм (там были фильмы Навального).
        4. Ненависть к ниггерам.
        5. Да и вообще что угодно. Мало ли какие там видео есть...
        Ответить
    • https://www.roi.ru/71821/
      Ответить
    • Вот допустим я провожу некие действия с матрицей, мне нужно пробегать по индексам.

      Что делать, если у меня где-то не получается от 0 до N (и наоборот) пробежаться из-за ограничений size_t? Переходить на int? Это же зашквар. Или, если очень хочется, то можно и int вместо size_t?
      Ответить
      • у тебя размерность больше size_t? как же компилятор туда достанет?
        Ответить
        • Нет-нет.

          Я очень хитрым способом обхожу матрицу.

          Сначала, например, for (j = N; j > 0; j++), а потом ещё пару раз вложенно прохожу по индексам.

          Под ограничениями size_t я имею в виду то, что может переполниться счётчик при декременте, поэтому не всегда получается, например, пробежаться от 3 до 0: либо от 4 до 1, либо от 3 до 4,294,967,295.
          Ответить
          • for (size_t i = left; ; i += d) {
                matritza[i][i] = 42;
                if (i == right) {
                    break;
                }
            }
            Ответить
            • Ой, там, естественно, j--. Я, конечно, анскильный, но не настолько )))

              В принципе, если расставлять правильно ифы, то не так уж всё и страшно, но код становится сложнее, такое мне не по нраву.
              Ответить
              • Если не нужно упираться в перформанс, то используй int64. Если нужно, то используй ифы аккуратно.
                Ответить
      • в смысле не получается от 0 до N с помощью size_t
        у тебя матрица не в оперативной памяти хранится?
        Ответить
        • > (и наоборот)

          Штука в том, что иногда, чтобы в обратном порядке красиво пройтись по индексам массива, например, от N до 0, счётчик обычно приходится декрементить в -1:

          for (int j = N; j < 0; j--)

          С size_t в этих случаях так не получится сделать. В таком случае тип меняют на int и текут, или есть какие-то трюки (быть скилльным), чтобы всё было нормально?
          Ответить
          • Ну вероятно ты можешь использовать int, если ты гарантируешь, что никогда не обратишься к массиву по индексу менее 0 и более size_t
            Ответить
            • Это, конечно, само собой разумеется.

              Вообще, я не думаю, что мне понадобится когда-либо матрица с индексами в size_t, так что int меня вполне устроит. Даже short устроит )))

              Просто хотелось бы быть скилльным и для размерностей и индексов использовать size_t, а для какого-нибудь матана в целых числах – int. Или это всё питушня и я себя накрутил?
              Ответить
          • if (N > 0) {
              size_t j=N;
              do {
                j--;
                body;
              } while(j > 0);
            }


            Да, пердолинг.
            Ответить
          • for (int j = N; j > 0; --j) {
             a[j-1] = 100500;
            }


            N недостижимый индекс должен быть, "end"
            Ответить
            • Прочитал этот код. Как будто ничего до этого не знал про программирование. Как будто пил из кружки без дна и с запаянным верхом.
              Ответить
              • в некоторых древних языках есть rbegin(), rend(), чтобы меньше думать
                Ответить
                • А вот реверс-адаптера для с++11 фора почему-то не завезли. Только в бусте такой есть.
                  Ответить
    • https://habr.com/ru/company/vdsina/blog/528622/

      >У меня бывали случаи, когда мне казалось, что со мной поступили не очень. Обычно на собесах. Я тащил это на хабр, но я не хотел вредить компаниям и конкретным людям. Поэтому я не называл имен. Мне хотелось, чтобы люди, которые устроили мне спорное собеседование, почитали, сделали выводы, и что-то поправили. Я уверен, что нет. Потому что вы пришли под статьи, и написали — ну ты сам тупой чмошник, все правильно сделали. А потом вы пошли на этот же собес в ту же компанию, и точно так же были с позором выпороты.
      Ответить
      • А как он узнал, что чуваки пришли в ту же компанию?
        Ответить
      • Почему одни разрабы работают в нормальных компаниях, и им заебись
        А другие разрабы постоянно на кого-то жалуются

        Это как у одной женщины муж и любовник, и оба в ней души не чаят.
        А у другой все мужики козлы
        Ответить
      • [quote]
        Хватит обманывать самих себя — работник и работодатель ни разу не равноправны в своих отношениях. Это как ЧСВ должно зашкаливать, чтобы не понимать этого?
        [/quote]
        да почему, блин? Рабство отменили, вроде. Если работодатель говно, то у него можно просто не работать.

        Сейчас дефицит программистов, хорошим программистам в жопу дуют, покупают им ДМС и печенюшки, чтобы они только работали. Только полный идиот будет кидать программистов на деньги: у него через пол года ни один ротоёб работать не будет.
        Ответить
        • > ни разу не равноправны

          Ну да, это правда. Работник в любой момент может написать заявление, взять отпуск на 2 недели и съебать в закат. А вот работодатель так просто расстаться с работником не может.
          Ответить
    • > Роскомнадзор опять обнаружил, что Google не удаляет из поисковой выдачи запрещенную информацию
      Та шо ж такое! Опять!

      На самом деле вполне себе удаляет, на «Люмене» приличное количество выполненных запросов от «Роскомнадзора». Но, видимо, плохо стараются.
      Ответить
      • Безобразие! Куда только смотрит правительство?
        Ответить
        • Оно смотрит тебе в карман!
          Ответить
          • Какой ужас! В «Интернет» заходят дети, они могут в «Google» увидеть слово «хуй», а правительство вместо того, чтобы блокировать неприличные результаты, смотрит ко мне в карман! Сталина на них нет!
            Ответить

    Добавить комментарий