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

    0

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

    #8: (vanished) https://govnokod.xyz/_24815
    #9: https://govnokod.ru/24867 https://govnokod.xyz/_24867
    #10: https://govnokod.ru/25328 https://govnokod.xyz/_25328
    #11: (vanished) https://govnokod.xyz/_25436
    #12: (vanished) https://govnokod.xyz/_25471
    #13: (vanished) https://govnokod.xyz/_25590
    #14: https://govnokod.ru/25684 https://govnokod.xyz/_25684
    #15: https://govnokod.ru/25694 https://govnokod.xyz/_25694
    #16: https://govnokod.ru/25725 https://govnokod.xyz/_25725
    #17: https://govnokod.ru/25731 https://govnokod.xyz/_25731
    #18: https://govnokod.ru/25762 https://govnokod.xyz/_25762
    #19: https://govnokod.ru/25767 https://govnokod.xyz/_25767
    #20: https://govnokod.ru/25776 https://govnokod.xyz/_25776
    #21: https://govnokod.ru/25798 https://govnokod.xyz/_25798
    #22: https://govnokod.ru/25811 https://govnokod.xyz/_25811
    #23: https://govnokod.ru/25863 https://govnokod.xyz/_25863
    #24: https://govnokod.ru/25941 https://govnokod.xyz/_25941
    #25: https://govnokod.ru/26026 https://govnokod.xyz/_26026
    #26: https://govnokod.ru/26050 https://govnokod.xyz/_26050
    #27: https://govnokod.ru/26340 https://govnokod.xyz/_26340
    #28: https://govnokod.ru/26372 https://govnokod.xyz/_26372
    #29: https://govnokod.ru/26385 https://govnokod.xyz/_26385
    #30: https://govnokod.ru/26413 https://govnokod.xyz/_26413
    #31: https://govnokod.ru/26423 https://govnokod.xyz/_26423
    #32: https://govnokod.ru/26440 https://govnokod.xyz/_26440
    #33: https://govnokod.ru/26449 https://govnokod.xyz/_26449
    #34: https://govnokod.ru/26456 https://govnokod.xyz/_26456
    #35: https://govnokod.ru/26463 https://govnokod.xyz/_26463
    #36: https://govnokod.ru/26508 https://govnokod.xyz/_26508
    #37: https://govnokod.ru/26524 https://govnokod.xyz/_26524
    #38: https://govnokod.ru/26539 https://govnokod.xyz/_26539
    #39: https://govnokod.ru/26556 https://govnokod.xyz/_26556
    #40: https://govnokod.ru/26568 https://govnokod.xyz/_26568
    #41: https://govnokod.ru/26589 https://govnokod.xyz/_26589

    Запостил: gost, 24 Апреля 2020

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

    • Добрый вечер.
      Ответить
    • Функция Lockdown увеличивает безопасность ядра Linux, ограничивая доступ
      к функциям, которые могут разрешить выполнение произвольного кода через код,
      предоставляемый пользовательскими процессами. Проще говоря, даже учетная запись
      суперпользователя root не может изменить код ядра. Это позволяет уменьшить ущерб
      от потенциальной атаки, даже когда учетная запись root скомпрометирована. Таким
      образом, повышается и общая безопасность операционной системы.

      Зачем? Зачем?
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Это питушня и путь к анальной венде с дэрээмами.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • > С другой стороны /dev/mem это говно и кастыль, и лучше бы его вообще не было.
              Зачем? Зачем? Есть и есть, кому он мешает?

              > Если бы они тупо выпилили этот драйвер, то звучало бы не так страшно...
              Рут — это такой мужик, который по определению имеет полный доступ к системе. Поэтому даже без /dev/mem он спокойно может прочитать любую память любого процесса (через какие-нибудь костыли, от дебаггера и до загрузки своего модуля в ядро). Так что выпиливание /dev/mem на «конфиденциальности», о которой кукарекают адепты анальных зондов, не скажется никак.

              > а не сосать хуй, как это делает админ в винде
              Вот-вот. В той же десятке даже местный аналог рута — NT AUTHORITY\SYSTEM — попросту не может даже выключить (!) ёбанный встроенный антивирус, не то что удалить. И это пиздец как хуёво.
              Видимо, прыщи двигаются в том же направлении.
              Ответить
              • Какой багор )))
                Ответить
              • >Зачем? Зачем? Есть и есть, кому он мешает?

                Это не правильный вопрос.
                Правильный вопрос "зачем он нужен?.
                Если не за чем нужен -- надо удалить.
                Юзерспейс не должен иметь доступа к железу.

                > он спокойно может прочитать любую память
                Может, однако чем меньше у тебя сюрфейс для атаки -- тем лучше.

                >ёбанный встроенный антивирус,
                Отключил его через локальную групповую политику, проверь. С ним у меня компиляция жабьего говна с миллионом файлов занимает вечность.

                >Видимо, прыщи двигаются в том же направлении.
                В плане усложнения -- безусловно, но конкретно /dev/mem кажется что и правда не нужен.
                Ответить
                • > Правильный вопрос "зачем он нужен?.
                  Это вопрос, который надо задавать тогда, когда предлагается что-то впилить. Когда речь идёт о выпиливании чего-то существующего и работающего — нужно спрашивать именно о том, кому оно мешает и почему.

                  > Юзерспейс не должен иметь доступа к железу.
                  Рут — царь и бог, рут — должен.

                  > Отключил его через локальную групповую политику, проверь.
                  Выключал его через локальную групповую политику раз десять. И примерно столько же — через реестр. Ему похуй, проверь: https://i.imgur.com/dcuS93z.png.

                  > В плане усложнения -- безусловно
                  Не в плане усложнения, а в плане того, что владелец компьютера плавно превращается из владельца в пользователя.
                  Ответить
                  • Какой багор )))
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • > причем это ограничение можно отключить
                      Это пока. Такие «инициативы» заканчиваются исключительно анальным огораживанием.

                      > Во-вторых мешает именно тем, что увеличивает область атаки.
                      Какой области атаки? Если атакующий получил доступ к руту, то всё, единственное адекватное действие — переустановка системы.
                      И да, все эти разговоры про безопасность, ради которой владельца ПК надо урезать в правах — просто демагогия.
                      Вот, например, полюбуйся, как тот же «Intel» обеспечивает безопасность: https://software.intel.com/en-us/sgx. Сколько красивых слов и картинок, а суть одна: на твоём ПК работает код, к которому ты никак не можешь получить никакой доступ. Даже под администратором, даже из режима ядра (!). Догадайся с трёх раз, кому это на самом деле нужно и зачем?

                      И все вот эти вот «Lockdown» — это, в сущности, то же самое: попытка отобрать у владельца ПК полный доступ к его системе. Да, пока это можно отключить. Только вот что будет дальше — весьма очевидно: сначала сделают отключение крайне пердольным (например, только если у тебя есть одобренный и подписанный лично Линусом ключ), а уже потом — ради безопасности просто уберут у пользователя (уже пользователя) какую-либо возможность влиять на ПК. Здравствуй, венда.

                      > Приведи пример, когда это нужно.
                      Это нужно по причине того, что «GNU/Linux» (и всяческие «FreeBSD» вместе с ним) — свободная и открытая система. Чтобы она и дальше оставалась такой — владелец ПК должен иметь полный доступ к своей системе.

                      > Что мешает владельцу отключить ненужную опцию?
                      То, что через N месяцев/лет/версий эту опцию просто уберут. Лягушку варят на медленном огне.

                      > УМВР
                      А у тебя какая редакция? У меня «Pro».
                      Ответить
                      • > sgx

                        Кстати, я хотел поюзать эту технологию. А там надо регаться на интеле и заполнять анкету о своей конторе.

                        Т.е. все ещё хуже - я не могу свой собственный код в этих анклавах запустить.
                        Ответить
                      • >Это пока. Такие «инициативы» заканчиваются исключительно анальным огораживанием.

                        Может да, может нет. У меня недостаточно фактов для такого вывода.

                        >Какой области атаки?
                        https://lwn.net/Articles/330488/

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

                        >через N месяцев/лет/версий эту опцию просто уберут.
                        В прыщах-то?
                        We do not break userspace же. Может, и никогда не уберут.

                        >А у тебя какая редакция? У меня «Pro».
                        c:\>systeminfo /FO LIST | findstr "OS "
                        OS Name:                   Microsoft Windows 10 Pro Insider Preview
                        OS Version:                10.0.19613 N/A Build 19613
                        OS Manufacturer:           Microsoft Corporation
                        OS Configuration:          Member Workstation
                        OS Build Type:             Multiprocessor Free
                        BIOS Version:              American Megatrends Inc. 2.B0, 07.01.2020

                        Ты часом не в домене?
                        Покажи Rsop.
                        Ответить
                        • > https://lwn.net/Articles/330488/
                          Это питушня, а не область атаки. Я уже выше писал: если атакующий получил доступ к root'у, то всё, единственное адекватное действие — полная переустановка системы.

                          > Напомни, как рут в линуксе из юзерспейса может удалить конкретную страницу из памяти?
                          Загрузить соответствующий модуль ядра и удалить всё, что нужно.
                          Напоминаю, что и эту возможность у рута отбирают посредством «Lockdown»-патчей.

                          > из юзерспейса
                          А зачем? Важна принципиальная возможность это сделать, используя учётную запись root.

                          > В прыщах-то?
                          Да. Всё идёт именно к этому.

                          > Покажи Rsop.
                          https://i.imgur.com/9ngkNZ8.png. Хуйня какая-то магическая.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • > Что мешает загрузить модуль ядра и писать в мем?
                              То, что и эту возможность отбирают у рута.

                              > Даже в Windows можно отключить првоерку подписей драйверов
                              При этом с каждой версией это становится всё сложнее и пердольнее. Следующий шаг — полный запрет для несертифицированных пердоликов.

                              > То-есть отсуствтие принципиальной возможности повлиять на шедулер их под рута тебя не смущает? Почему?
                              В смысле — отсутствие? Заходишь в консоль от рута, загружаешь свой модуль ядра — и готово.

                              > иначе как разрабатывать драйвер??
                              Очень просто: обратись в «Microsoft»/к Линусу, получи специально одобренный ключ и разрабатывай с его помощью. Оплату и специальные курсы добавить по вкусу.
                              И это вовсе не мои фантазии. Выше я приводил ссылку на «SGX»: там уже так сделано, хочешь разрабатывать под эту технологию — пиши в «Штеуд».

                              > почему ты думаешь, что это уберут в Linux?
                              Потому что «GNU/Linux» в этом отношении повторяет путь «Windows», а это крайне хуёвый путь.

                              > MpEngine
                              Нет, там только какая-то левая питушня (скрин из локальных политик, офк): https://i.imgur.com/yx8rvvM.png.

                              PS: спокойной ночи.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • >> Такая хуня раньше была у Apple: даже на собственное устройство ты не мог загрузить свой софт без подписи.
                                  Разрабатывать надо было на эмуляторе.
                                  Потом, вроде, разрешили.

                                  - ???
                                  Ответить
                                • > Так это же опциолнально
                                  Я в который раз повторяю: пока опционально.

                                  > Если убрать /dev/mem вовсе, то будет тоже само
                                  Ладно, так уж и быть, убирай. Но только вместе с lockdown-патчами.

                                  > Я не понимаю как можно что-то так закрыть в Linux, чтоб даже админ с физ доступом к компу не мог убрать
                                  Запустить в SGX-анклавах, например. Тогда ты можешь хоть чипы памяти выпаивать — всё равно не сможешь узнать ни какой код там выполняется, ни с какими данными он работает.
                                  Технологии анального порабощения развиваются.

                                  > Linux -- опенсурс, его физически нельзя заркыть (иначе придется пол ядра выкинуть). Если туда введут такое ограничение, то что помешает мне форкнуться и выпилить этот код?
                                  Наивные мечты. Посмотри на «Android» (тот же «GNU/Linux», между прочим!), большинство телефонов с которым перестают получать обновления ОС от производителя через полгода-год после выхода… и всё: никаким другим образом поменять ОС (на форкнутую, например), ты не можешь.
                                  А ведь на ПК уже всё готово к точно такому же анальному огораживанию. Осталось только тихонько убрать переключатель «UEFI SecureBoot» — и вуаля, все пользователи (новых) ПК запускают только те ОС, которые одобрены лично Наделлой/Линусом/Арвиндом Кришной. И заметь: производители/авторы этого дерьма тоже кукарекают про «secure».

                                  > Я не понимаю, почему у нас с тобой разгные ГП.
                                  Они из версии в версию меняются, у меня до обновления тоже другой был. Сейчас у меня «10.0.18363».
                                  Ответить
                              • > Очень просто: обратись в «Microsoft»/к Линусу, получи специально одобренный ключ и разрабатывай с его помощью. Оплату и специальные курсы добавить по вкусу.
                                > И это вовсе не мои фантазии. Выше я приводил ссылку на «SGX»: там уже так сделано, хочешь разрабатывать под эту технологию — пиши в «Штеуд».
                                Какая мерзкая питушня. Лишь добавляет пердолинга и гарантирует защиту только от ленивых и бедных хакеров, у которых не хватает финансов на взнос.
                                Слава свободному софту, что на него можно будет перейти. Хотя, что там с браузерами? Вроде бы гайки закручивают даже с открытыми исходниками. А чтобы откручивать обратно, форковальщикам надо пердолиться.
                                Ответить
                                • Подтверждаю. Это то же самое, что и классические подписи исполняемых файлов, которые, оказывается, к безопасности не имеют никакого отношения: я уже кидал на ГК статью про то, как небедные и неленивые хакеры спокойно барыжат этими самыми подписями (а потом антивирусы им доверяют, ага).
                                  Ответить
                                  • Можете, пожалуйста, напечатать статью ещё раз, потому что раньше мы не были подписаны на ваше издание?
                                    Ответить
                                    • Пожалуйста: https://habr.com/post/350472.
                                      Ответить
                                      • Но в общем случае линукс тоже подвержен этой проблеме, если я правильно понимаю
                                        Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Ты статью-то читал? Вся проблема в том, что антивирусы доверяют подписанным файлам. Восемь антивирей стриггерилось на пожатый троян без подписи, с подписью — только два. Это — крайне хуёвый подход, по сути дающий профессиональным хакерам «легальный» способ обхода антивирусов.

                                      >Не будь подписей -- любой стертор мог бы написать говно на дельфи не ища хакеров в даркнете, но это не важно.
                                      Разумеется, с подписями стертор ну никак не может написать говно на дельфи.

                                      > замки не имеют никакого отношения к безопасности, и ими можно не пользоваться.
                                      Интересный факт: любой замок «потребительского» класса (т.е. все дверные, гаражные, навесные и прочие) опытный домушник может вскрыть за несколько минут (в лучшем случае, обычный ширпотреб вскрывается за единицы-десятки секунд). Так что да: дверные замки — это иллюзия безопасности. Защищают они только от мелкой шпаны и не в ту дверь зашедших соседей.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • > Количество хакеров, могущих купить подпись (и успевших это сделать, пока лавочку не прикрыли) значительно меньше количества стерторов
                                          И это никак не поможет юзеру, у которого все файлы оказались зашифрованными благодаря очередному хитрому червю-шифровальщику с сертификатом. Если что, авторы успешных (то есть самых опасных) шифровальщиков поднимают сотни тысяч долларов и могут себе позволить потратить несколько тысяч на валидную подпись, которая, благодаря хуёвым решениям антивирусов, существенно поднимет процент заражения.

                                          Вообще, вся эта питушня просто повторяет путь HTTPS. Валидная подпись у файла (как и валидный HTTPS-сертификат раньше, EV-сертификат — сейчас) означает только то, что он создан той компанией, которая указана в подписи, и неавторизованные третьи лица его не модифицировали (случаи спиздинга корневого сертификата можно не рассматривать, хотя, конечно, вероятность есть всегда). Он не означает ни то, что файл безопасен, ни даже то, что его кто-то проверял.

                                          > Серьезный домушник и хакер из АНБ заинтересуются тобой только если ты очень большая шишка.
                                          При чём тут АНБ? У АНБ есть доступ к «Intel ME» («PSP» у красных; советую ознакомиться с этими «милыми» технологиями, кстати), им эти сертификаты совершенно не нужны. А серьёзный домушник — это вовсе не спецагент в чёрном костюме, это просто любой уголовник с опытом в пару-другую лет.
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • > Хорошо, представим, что подписей нет. Станет лучше?
                                              Нет. Но от того, что подписи подаются как нечто, улучшающее абстрактную «безопасность» (хотя улучшают они только integrity, если уж на то пошло), однозначно становится хуже. См. пример с антивирусами.

                                              С HTTPS — аналогично. Впрочем, «Let's Encrypt» постепенно исправляет ситуацию.

                                              > Домушник не полезет ко мне просто так: они работают по наводке, и только если знают, что доа у меня слитки золота.
                                              Зачем ему слитки? Хватит и твоего компа с телевизором, если они новые, конечно.
                                              Кстати, я совсем недавно уже приводил реальный пример спизженной БД магазина «Wildberries» с адресами, почтами и телефонами — отличная штука для домушников, подойдёт как список более-менее состоятельных людей.

                                              > Также и тут: от стерторов подпись вполне защищает
                                              Нет. Подпись не защищает, подпись доказывает целостность файла: то, что от его автора он дошёл до тебя неизменным. Всё.

                                              > От крутых вирусов она не защитит
                                              Каких крутых? Посмотри расценки в статье, такие деньги себе может позволить любой кулхацкер, разославший письма «я взломал вашу вебкамеру, перешлите мне 1 BTC чтобы я не отправил их вашему начальству/коллегам/друзьям».
                                              Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • > microsoft программы не подписывает

                                                  Microsoft программы не подписывает, только дрова. Стертор вполне спокойно может купить себе серт у любого CA и подписывать всё, что захочет. И даже через пару недель после того как его спалят и отзовут серт, его проги всё ещё будут работать пока CRL не дойдёт. OSCP, насколько я помню, для софта не юзают - слишком долго ждать при старте проги.

                                                  > не запустится

                                                  Разве? По-моему просто покажет предупреждение, на которое всем похуй.
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • А какие там могут быть проверки? Ну в худшем случае ИП Рулон Обоев придётся зарегать, если требования как к зелёненьким для https.

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

                                                      Заметь, что даже на подписанные бинари UAC ругается и переспрашивает, а доверяешь ли ты этому самому Рулону Обоеву.

                                                      З.Ы. Я на компе родителей вообще запретил запуск скачанных файлов. Работает на 100%, я даже сам потом полчаса тупил почему дистриб не запускается.

                                                      > антивир

                                                      Ну это да, там список отзывов через час после анализа прилетит. Но это и без подписей бы произошло, т.е. они тут пользы не приносят.
                                                      Ответить
                                                • > Так всё таки стоит убрать подписи или оставить? Что делать то?
                                                  Информировать общественность о том, что «подписанный файл» не означает «безопасный». Реально полезное применение подписи — это ручная проверка того, что прога Рогокопытер v1.0 реально была выпущена компанией ООО «Рога&Копыта» (а степень доверия этой компании пользователь определяет сам).

                                                  > Я серьезно сомневаюсь, что опытный домушник полезет куда-то за такие деньги.
                                                  А чтобы взломать ширпотребный замок, который обычно и ставят в обычные двери, не нужно быть таким уж опытным. Гопника с отмычкой из гвоздя вполне хватит (см. ссылку выше).
                                                  Но да, в больших городах средний класс может жить спокойно.

                                                  > Хватит-ли это недели хакиру чтоб насобирать на феррари? Я не знаю
                                                  Нашумевшему «ВаннаКраю» хватило четыре дня, чтобы насобирать битков на 130к долларов: https://en.wikipedia.org/wiki/WannaCry_ransomware_attack. По нынешнему курсу, кстати, это уже 390 тысяч долларов.
                                                  При этом насколько я знаю, у Вани валидной подписи не было.
                                                  А так, 0day + валидная подпись, которой доверяют антивирусы — идеальный сценарий для локального компьютерного апокалипсиса.
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • > Почему антивири на это забивают -- я не знаю.
                                                      Потому что мнение о том, что «подписанный файл» == «безопасный файл» слишком распространено.

                                                      > Чтобы сделать 0day надо быть очень крутым хаккером, нет?
                                                      Нет. Его можно как купить (это большие бабосы, но потенциальная выгода больше), так и вовремя подсуетиться и спиздить — как было с нашумевшими архивами «АНБ», например. В последнем случае это будет скорее 1day, но всё же.
                                                      Ответить
                                                    • > Почему антивири на это забивают -- я не знаю.
                                                      Потому что мнение о том, что «подписанный файл» == «безопасный файл» слишком распространено.

                                                      > Чтобы сделать 0day надо быть очень крутым хаккером, нет?
                                                      Нет. Его можно как купить (это большие бабосы, но потенциальная выгода больше), так и вовремя подсуетиться и спиздить — как было с нашумевшими архивами «АНБ», например. В последнем случае это будет скорее 1day, но всё же.

                                                      UPD: но мы немного отошли от темы. Рядовому пользователю, антивирус которого пропустит свеженький троян просто потому, что он был подписан свеженькой подписью, абсолютно похуй, написан этот троян вторым Моррисом или же Ашотом&co.
                                                      Так что неверное представление о подписи как о каком-то гаранте безопасности на самом деле снижает безопасность.
                                                      Ответить
                                      • Кстати, с большинством замков работает метод брутфорса, ключ можно просто подобрать, через десяток ключей как минимум найдётся ключик который хотя бы с небольшим усилием откроет.

                                        Хорошо что биты и баты не стачиваются и не деформируются.
                                        Ответить
                                        • Звучит как очередная порнуха на порнхабе.
                                          Ответить
                                        • Я даже больше скажу: с большинством ширпотребных замков работает т.н. «raking»: вставляешь в замок специальную загогулину, дёргаешь туда-сюда — и всё.
                                          http://www.lockwiki.com/index.php/Raking
                                          Ответить
                                          • Ого, этот сайт не закрыт роскомпозором?
                                            Ответить
                                            • А за что его закрывать? Пропаганды суицида нет (отмычкой убить себя очень тяжело), пропаганды гомосексуализма среди несовершеннолетних нет (выебать себя отмычкой тоже затруднительно), пропаганды наркотиков нет, пропаганды педофилии нет, пропаганды «Правого сектора» и «ИГИЛ» тоже нет, нелицензионных копий фильмов «Михалкова» и песен «Стаса Михайлова» тоже нет.
                                              Ответить
                                              • А что, блокируют только по этим причинам? За инструкцию как взламывать замки.
                                                Ответить
                                              • Так у нас уже на всю катушку действует полноценная цензура: закрывают любые сайты, которые композору не нравятся. Оптимизация налогов (даже не уклонение!), откос от армии (даже без взяток!), магниты на счётчик (1024--, обрати внимание) — и всё по совершенно неадекватным решениям суда.
                                                Ответить
                                          • Звучит как... Блядь, просто иди нахуй.
                                            Ответить
                                          • > wafer locks

                                            Замок в клеточку.
                                            Ответить
                                          • Это с циллиндрическими замками роботает, они вообще говно.

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

                  Надо всё собрать в один файл, тогда компилироваться будет быстрее:
                  copy src*.java output.java
                  Ответить
      • показать все, что скрытоvanished
        Ответить
    • Мы пойдём отмечать юбилейный 50-й ойти оффтоп?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Звучит как очередная порнуха на порнохабе.
        Ответить
      • показать все, что скрытоvanished
        Ответить
      • Ви таки говорите об этом как о чём-то хорошем или чём-то плохом?

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

          С одной стороны, линукс у них для элиты, с другой - "а чо все на винде-то сидят?"
          С одной стороны, "у нас всё просто, все возможности", с другой - "не, ну попердолиться и настроить под себя, конечно, надо!"

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

          Получается автомобиль без ремней безопасности, в котором пассажир свободно подпрыгивает на каждой кочке. Установка ремней и амортизаторов и выбор ровной дороги же считается нарушением исконного права человека свободно летать по салону и иметь свободный доступ к потолку для набития шишек.
          Ответить
          • А теперь посмотри на винду. Где там один работающий нормальный способ? Блядь, они уже 5 лет не могут настройки привести к одному виду. И это корпорация с тысячами сотрудников и миллиардами бабла. А ты о каких-то пердоликах...
            Ответить
            • А на Маке говорят все идеально
              Ответить
              • Ну да, ровно один способ продаться в анальное рабство джобсу. Нормально работающий изкоробки.
                Ответить
                • Такое ощущение, что они сейчас только на анальном рабстве и держатся.
                  Из телефонов без Джобса сделали лопаты, связь телефона и ноутбука просрали. Где-то говорили, что даже устройства одного и того же времени выпуска нельзя соединить без переходников и пердолинга.
                  Ноутбуки вовсе слили. Когда-то давно у них были нетормозящие ноутбуки с хорошим дизайном. На порты не скупились. Сейчас осталось только тормозящее говно с двумя портами, в один из которых надо ставить зарядку! Vaio SX12 при тех же размерах смотрит на макпитухи как на говно.
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
            • Не могут и не хотят это разные вещи.

              У них теперь загорелая кришна всем заправляет, которая за пределами ажуры своей сраной знать ничего не знает.
              Ответить
              • Если купишь «Сникерс»,
                Ты не ешь его.
                С Сатьёй Наделлой
                Он цвета одного.
                Ответить
            • Вида два, но они почти не перекрывают друг друга. Каждую конкретную настройку можно покрутить, в основном, только с одним видом :)
              Ответить
        • показать все, что скрытоvanished
          Ответить
          • >> что ОС должна быть элитной
            > кто так считает? клоуны с лора?
            Некоторые петушки-пользователи, которые громче кричат. Это больше собирательный образ.
            Ответить
    • показать все, что скрытоvanished
      Ответить
    • Чтобы помещался весь список, можно часть в код пихать.
      Не блогодорите.
      Ответить
    • Наткнулся на JS-понятие «hoisting», почитал статью про него и охуел. Пиздец, как с этим жить вообще можно?
      Ответить
      • Если я об этом не слышал, значит можно.
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Лев устало посмотрел на Алису.
          –— Ты кто? —– спросил он, зевая после каждого слова. - Животное?.. Растение?.. Минерал?..
          Не успела Алиса и рта раскрыть, как Единорог закричал:
          —– Это сказочное чудище –— вот это кто!
          –— Что ж, угости нас пирогом, Чудище, —– сказал Лев и улегся на траву, положив подбородок на лапы.
          И, взглянув на Короля и Единорога, прибавил:
          –— Да сядьте вы! Только смотрите мне —– пирог делить по-честному!
          ...
          Алиса сидела на берегу ручейка, поставив большое блюдо себе на колени, и прилежно водила ножом.
          –— Ничего не понимаю! —– сказала она Льву (она уже почти привыкла к тому, что ее зовут Чудищем). –— Я уже отрезала несколько кусков, а они опять срастаются!
          —– Ты не умеешь обращаться с Зазеркальными пирогами, –— заметил Единорог. —– Сначала раздай всем пирога, а потом разрежь его!
          Конечно, это было бессмысленно, но Алиса послушно встала, обнесла всех пирогом, и он тут же разделился на три части.
          —– А теперь разрежь его, –— сказал Лев, когда Алиса села на свое место с пустым блюдом в руках.
          –— Это нечестно! —– закричал Единорог (Алиса в растерянности смотрела на пустое блюдо, держа в руке нож.). –— Чудище дало Льву кусок вдвое больше моего!
          —– Зато себе оно ничего не взяло, –— сказал Лев. —– Ты любишь сливовый пирог, Чудище?
          Ответить
          • А ты вручную эти охуенные тире расставляешь, или это какой-то скрипт?
            Ответить
            • Я думаю он это просто скопипастил.
              Ответить
              • Нет, тире-то его, авторские. Такие только на ГК бывают. Именно поэтому…
                Ответить
            • Если это скрипт, то он должен различать где чья реплика, чтобы поставить нужное тире.
              Ответить
              • Нет. Скрипт заменяет одно тире на два. Но если уже 2 тире рядом, то не заменяет.
                Ответить
                • Там разные тире, и их порядок у реплик разных персонажей разный.
                  Ответить
                  • Как минимум один из нас двоих —— поехавший.
                    Ответить
                    • У тебя тире не православные —– у тебя гомотире.
                      Ответить
                      • У него не гомотире, у него битире. Вот настоящее гомотире: ⸻.
                        Ответить
                        • Это гомотире-мутант из Чернобыля?
                          Ответить
                        • Зачем такую питушню взяли в Юникод?
                          Или это кобенации (тире, соединяшка, тире), и так можно специально на ГК хоть на 2к символов сделать тире?
                          Ответить
                          • > Зачем такую питушню взяли в Юникод?
                            А зачем туда взяли символы сто лет как мёртвых языков (ну это ещё как-то можно объяснить) и ёбанные картинки с двумя чёрными родителями-геями с тремя сыновьями-трансгендерами-азиатами?

                            > Или это кобенации (тире, соединяшка, тире)
                            Не-а, всё натуральное, «three-em dash» — U+2E3B.
                            Ответить
                            • Звучит как очередная порнуха на порнхабе.
                              Ответить
                            • Поддерживаю гостиньо. Какая-то порнуха. На ГК же вроде показывали, что там есть соединяшка для двух геев и радуги, от которой или айос, или винда упали, или у меня она не отображалась. Странно было впердоливать туда все эти смищные картинки, если можно было кобенировать.
                              Ответить
                    • «Уважаемая спичечная фабрика! Я 30 лет покупаю вашу продукцию. У вас почему-то разное количество спичек в коробках: в одном 49, в другом 51, в третьем 48. Вы там с ума посходили что ли?»
                      Ответить
                  • > – —
                    > — –

                    Чувак, ты крэйзи.
                    Ответить
                    • У меня просто щревьт такой, что зазоринку между ними видно.

                      Получается какбы тире указующее.
                      Ответить
                      • У меня на ГК их видно, а на НГК — нет. Какой багор (((
                        Ответить
          • Думаешь кто-то читает эти вореции?
            Ответить
        • >Variables and constants declared with let or const are not hoisted!
          Интересно, не знал.
          Хотя, я наверно активно пользовался только хойстингом функций.
          Ответить
          • Нахуа? Чтобы добавить читаемости? На работе тоже один коллега польщовался.
            Ответить
            • Что-то вроде того. Скажем, есть какая-то константа (или не константа, а какая-то питушня в замыкании), которая нужна функции для работы. Я её пишу перед этой функцией, чтобы рядом была. А она вычисляется с использованием функции, которая может быть фиг знает где, и выяснять мне это не так интересно.

              function voretion () {
                return 'kobenacii';
              }
              
              const pitux = getPitux(); // <---
              function kokoko(a) {
                return pitux + x;
              }
              
              function getPitux () {
                return 3.1;
              }
              Ответить
              • Почему бы не определить до того, как первый раз используется?
                Ответить
                • Лишний пердолинг, явное обдумывание этого дела.
                  Ответить
              • Это питушня. Вставлять определения переменных между определениями функций — прекрасный способ осложнить жизнь тем, кто будет этот код читать.

                function voretion () {
                  return 'kobenacii';
                }
                
                function kokoko(x) {
                  return pitux + x;
                }
                
                function getPitux () {
                  return 3.1;
                }
                
                
                const pitux = getPitux(); // <---
                const voretsiya = voretion();
                const kobenaciya = kokoko(42);
                Ответить
                • У меня pitux был рядом с kokoko, можно было быстро глянуть на него.
                  Ответить
          • В «PHP» можно писать
            if (!function_exists("kok")) {
                function kok() {}
            }
            Ответить
            • Именно поэтому я за «PHP».
              Ответить
            • Это нормальная функция?
              $ok = "kok";
              function_exists($ok); // Так можно?


              Кстати, а почему такого нет в сишке. Ну хотя бы на этапе компиляции. Как какой-нибудь хак для препроцессора. Препрепроцессор.
              Ответить
              • // Так можно?

                Можно. Более того, пока не изобрели лямбды (т. е. до версии 5.3) это был единственный способ передачи коллбека.

                Можно даже так:
                $ok('foo'); // вызовет функцию kok с аргументом 'foo'
                Ответить
              • >> Кстати, а почему такого нет в сишке.

                А где искать? В текущем модуле? В модулях, с которыми нужно слинковать программу? И что искать: просто объявление функции или её реализацию?
                Ответить
                • > В текущем модуле? В модулях, с которыми нужно слинковать программу?
                  Мне кажется, в модулях, с которыми нужно слинковать программу.

                  > что искать: просто объявление функции или её реализацию?
                  Наверно реализацию.

                  Хотя, объявление и/или нахождение в текущем модуле/файле были бы тоже полезны в определённых ситуациях.
                  Ответить
              • Зато в D есть. Компайлтайм рефлексия хорошо продумана.
                Ответить
                • Кто бы мог подумать, что в D это называется трейтами?

                  https://dlang.org/spec/traits.html
                  Ответить
      • Вообще это очень крутая фича. Добавляет декларативности языку и избавляет от пердолинга.

        Если в C/C++ нужно делать forward declarations, а в питоне дождаться конца файла, чтобы начать устанавливать все игры вызывать все функции, то в JS ты просто пишешь функции и их вызываешь не пердолясь с порядком определения.

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

        ...Ну то есть переменные как бы поднимаются, но это не вызывает никакого вау-эффекта. Это само собой разумеещееся. Такое поведение ожидаемо. Scope переменной в JS - либо функция, либо глобальное пространство. Глупо было бы ожидать, что переменная не будет действовать в рамках своего скоупа. Если в каком-то языке это не так, то начинаются проблемы. Например, в C/C++ можно объявить переменную, а потом окажется, что она в половине своего скоупа не действует. Потом ещё придётся переносить переменные и расставлять фигурные скобки, если появляется switch/goto. Как оказывается - только потому, что в этих языках не сделали банальный hoisting.

        hoisting - это очень показательный пример хорошего дизайна. Можно писать на языке много лет и только потом узнать, что эта фича там была, а потом скучать по ней в других языках и удивляться, как вообще может в них отсутствовать такая простая, логичная и полезная возможность.
        Ответить
        • > а в питоне дождаться конца файла, чтобы начать устанавливать все игры вызывать все функции
          Зачем? Нормальные люди питонисты код пишут в main(), которая может быть расположена где угодно. И да, изнутри функций можно вызывать любые другие функции, не пердолясь с порядком их определения.

          > очень жалко, что переменные не поднимаются
          Это щщастье. Читать код, в котором сущности используются до своего объявления — это полный пиздец и игра в угадайку. В сочетании с тем фактом, что 99% программистов не умеют правильно называть переменные — это пиздец в квадрате.

          > Например, в C/C++ можно объявить переменную, а потом окажется, что она в половине своего скоупа не действует.
          И это правильно, потому что объявление переменной может иметь побочные эффекты. Вот было бы весело, если бы какой-нибудь std::lock_guard (охуенная вещь, кстати) неявно телепортировал блокировку к началу блока.
          Ответить
          • > Зачем?
            Недавно обсудили. Инициализация какой-нибудь питушни.
            Да и просто скриптушня, когда тебе важно удобство, а не порядок.

            > Читать код, в котором сущности используются до своего объявления — это полный пиздец и игра в угадайку.
            Не завидую питонистам. У них чтение любого кода с переменными - полный пиздец и игра в угадайку :)

            > это пиздец в квадрате
            Ну тут просто уже в любом случае нужен какой-то инструмент, который скажет, что за переменная вообще используется.

            а. Я заглянул в код потому, что по стеку вызовов мне указали на это место. Я не приземляюсь в начале каждой функции, я именно что попадаю куда-то в середину. Я смотрю на вызов функции, и мне нужно обшарить весь скоуп, все скоупы выше и ещё заинклюженное посмотреть. И тут, в общем-то, не сильно помогает, что в C/C++ надо искать только сверху. Это сужает область поиска примерно в 2 раза по площади и в 1 раз - по количеству файлов и функций, которые надо просмотреть.
            Нужен какой-то инструмент. Как минимум, подсветка переменной.

            б. Я смотрю на переменную и не понимаю, что у неё есть брат-близнец. В коде может появиться фишинговая переменная.

            И тут уже хойстинг не так важен.

            > неявно телепортировал блокировку к началу блока.
            Кокококая кококонструкция )))

            Кстати, с деструкторами такая питушня работает, и все привыкли уже! Потому, что деструкторы навязали, и никого не спрашивали.

            Напомню, что в JS хойстинг переменных не делает императушни. Инициализация происходит внизу. Думаю, C++ бы справился с этим. Какая-нибудь преинициализация ака конструктор по умолчанию плюс постинициализация в строке с определением...
            Ответить
            • > Инициализация какой-нибудь питушни.
              def main():
                  PITUH = get_petuh()
              
              def get_petuh():
                  return 'cock'
              
              if __name__ == '__main__':
                  main()

              А срать в глобальный скоуп почём зря — плохо.

              > У них чтение любого кода с переменными - полный пиздец и игра в угадайку :)
              У них хотя бы статотипизацию завезли.
              Ну хотя да: если статической типизации нет (как в «JS», например), то и место объявления не важно: всё равно нихуя непонятно :)

              > И тут, в общем-то, не сильно помогает
              > сужает область поиска примерно в 2 раза по площади
              Ну ты уж определись: «не сильно» или «в два раза».

              > Кстати, с деструкторами такая питушня работает, и все привыкли уже!
              Нет, это совершенно другая питушня. У деструкторов есть строгий и понятный цикл: «инициализировали переменную -> использовали переменную -> уничтожили переменную». И это происходит строго последовательно, сверху вниз.

              > Какая-нибудь преинициализация ака конструктор по умолчанию плюс постинициализация в строке с определением...
              Тебе с такими идеями в Комитет надо. А вообще — это питушня хотя бы потому, что далеко не для всех типов есть коньструктор по-умолчанию. См. std::lock_guard, например.
              И, кстати, нахуя такое неадекватное поведение вообще нужно?
              Ответить
              • > А срать в глобальный скоуп почём зря — плохо.
                А может быть и не глобальный, а "псевдоглобальный". Это может быть скоуп модуля или какой-нибудь тематической вечеринки внутри замыкания, в которой генерируется инстанс параметризованного модулеподобного питуха.

                > Ну ты уж определись: «не сильно» или «в два раза».
                Я так и говорю: не сильно - в два раза.
                Что важно, количество файлов и функций для прыжка остаются теми же.

                Вообще, сильно в два раза можно только уменьшить время перебора паролей, если начать с середины.

                > совершенно другая питушня
                Да та же самая, разве что аргументы деструктора хранятся в самом объекте, поэтому их не надо передавать явно. А так - симметричные операции. И захотеть их выполнить программист может в любое время.
                Если кто-то задаёт вопрос "а что мне делать, если я хочу создать объект позже начала фигурной скобки", то должен быть и вопрос "а что мне делать, если я хочу сломать объект до конца фигуной скобки".

                > У деструкторов есть строгий и понятный цикл: «инициализировали переменную ->
                Чтобы сломать что-нибудь ненужное, надо построить что-нибудь ненужное. Неплохо. Но это больше походит вообще на весь цикл работы с объектом.

                Вот, к сожалению, я не знаю, как создаётся стековый фрейм - там сразу отматывают под все локальные переменные, либо же делают пуш на каждом шаге, когда в коде появилось определение переменной. Но вариант "сразу создать фрейм, а расстояния от верхушки вкомпилить в код" выглядит как более быстрый, а значит хойстить полезно для пирфоманса.
                Ответить
                • Сразу отматывают через sub rsp, N. Причём и под локалки и под аргументы вызываемых функций сразу, чтобы их не пушить потом.

                  В принципе да, тот же хойстинг. И в переменных до момента инициализации лежит undefined, как и в js. Разве что undefined в крестах настоящий.
                  Ответить
                  • >Сразу отматывают через sub rsp, N
                    как же работает

                    if (petuz) {
                    int i = 32;
                    }
                    ?
                    Ответить
                    • Просто по адресу, зарезервированному для i в других ветках ничего не пишут и не читают, в ней остаётся мусор. Ну или пишут что-то другое, если скоупы не пересекаются.
                      Ответить
                      • фу как неочевидно

                        именно по этому я за с89: там нужно было ВНАЧАЛЕ функции декларировать. Помнишь же борландсишечку третью?

                        А вообще я поскаль, там такой проблемы нету by design
                        Ответить
                        • Дык это же деталь реализации кодогенератора. С точки зрения языка ты эту i за её скоупом юзать не можешь (а если всё-таки наебёшь конпелятор и полезешь - то это UB). Она во многих случаях вообще в регистре будет валяться.
                          Ответить
                          • Это может привести к тому, что мокака напишет:

                            if (mokaka) {
                             //100500 деклараций
                            }

                            и порвет стек даже при mokaka==0, и Мокака будет не понимать: да как же так-то?
                            Ответить
                            • Именно поэтому стека в юзермоде обычно дохуя выдают. И если ты его порвал, то ты в 100% случаев делаешь что-то не так.
                              Ответить
                              • Рекурсией могу порвать, если она бесхвостая.
                                А компилятор может же доказать, что mokaka никогда не true, и тогда вообще ничего не выделять?

                                Или там подсчет стека в более ранний проход?
                                Ответить
                        • Не в начале функции, а в начале блока.
                          Ответить
                        • > поскаль

                          Поскаль осквернён стертором. Поэтому я против (и не только поэтому).
                          Ответить
              • >> преинициализация плюс постинициализация
                > не для всех есть коньструктор по-умолчанию
                Ну вот есть же placement питушня. Сначала берут кусок памяти (можно сказать, что произошло выделение плюс вызов настолько ничего не делающего конструктора, что даже поля никак не инициализируются), потом на этом куске памяти вызывают конструктор. И всё работает. Можно так реализовать. Можно явно просить разделить инициализацию на создание пустого объекта и завершение конструктора. Кстати, автор класса может сказать, что протокол не позволяет вызывать методы частично инициализированных объектов (аналогичго с тем, как он может поступить при вызове build в каком-нибудь частично использовам билдере).

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

                  В чём фишка крестового RAII - скоуп переменной в точности совпадает с её готовностью к работе. Т.е. либо переменную можно юзать либо её тупо не существует.
                  Ответить
                  • >скоуп переменной в точности
                    А у нас в Джаве решили, что это будет слишком удобно (и скучно) и завезли Closeable.
                    А в Intellij еще и завезли Disposable. Теперь там так
                    https://www.google.com/search?q=%22Project+already+disposed%22


                    Ухахаха, всё таки джава это говно по сравнению с плюсами
                    Ответить
                    • Да вот смешно на самом деле.

                      Языки с gc неплохо решили проблему с управление памятью. Но для других ресурсов такая схема не работает.

                      В итоге ехал close через close. Ну кроме совсем тривиальных случаев, когда объект в одном скопе живёт.

                      Кресты - говно ебаное, конечно. Но после них все эти ваши close() выглядят как закат солнца вручную.
                      Ответить
                      • Проблему управления памятью языки с ГЦ решили хорошо только для мелких проектов. Для крупных проектов проблема никуда не ушла: тебе всё равно нужно понимать граф зависимостей, чтобы случайно не зацепить гигантский объект и не устроить перманентное повышение потребления памяти (джавий меморилик).

                        Мантра "просто не думайте про память, она сама очистится" -- НЕ работает для серьезных проектов.

                        В том же Intellij огромное количество WeakReference расставлено именно для того, чтобы некоторые вещи очищать.

                        То-есть программист все равно должен понимать и зависимости, и где слабую ссылку воткнуть (как в языках с референс каунтингом), но вот только расчитывать на десктрутор он не может.
                        А еще GC может запуститься в неподходящий момент, и поставить раком систему на пару секунд.

                        Ну и close/dispose, это конечно пиздец. Ворст фром зе бос волдс
                        Ответить
                • > переменная действует во всём скоупе
                  До её настоящей инициализации нельзя:
                  * Прочитать переменную: это UB, а если без страшных слов — ты получишь просто мусор, который к работе программы никак не относится;
                  * Вызывать у переменной методы: они используют поля объекта, в которых в данный момент находится мусор. Если не используют — объяви их как static и не загружай себе мозг;
                  * В общем случае, переменной нельзя даже присвоить (!) какое-либо значение, потому что operator=() тоже может дёргать поля с мусором.
                  В итоге, переменную до её инициализации можно только… Инициализировать. Удивительно!

                  А ведь есть ещё такая интересная штука, как затенение («shadowing») переменных. Реальный пример:
                  int x = 42;
                  int main()
                  {
                      std::cout << x << std::endl;  // 42
                   
                      // 100500 строк кода
                   
                      float x = 42.5;
                      std::cout << x << std::endl;  // 42.5
                   
                      return EXIT_SUCCESS;
                  }

                  https://ideone.com/W0VS6Q
                  А теперь представь, что объявление переменной x где-то в 100500 строках внизу сразу же затенит все x наверху. Это же какой эпичный подарок читающим код!
                  И если тебе вдруг в существующем коде понадобится затенить какую-то переменную, у тебя будет два выхода:
                  * Пройтись по всему скоупу и везде проставить «::x» (не сработает, если ты затеняешь член класса… но это само по себе не очень правильно, в принципе);
                  * Обернуть переменную в новый скоуп:
                  int x = 42;
                  int main()
                  {
                      std::cout << x << std::endl;  // 42
                   
                      // 100500 строк кода
                   
                      {
                          float x = 42.5;
                          std::cout << x << std::endl;  // 42.5
                      } 
                      return EXIT_SUCCESS;
                  }

                  Очень удобно.
                  Ответить
                  • > затенение

                    Лучше так не писать, всё-таки.
                    Ответить
                  • > До её настоящей инициализации нельзя: ...
                    Ну это мелкие детали :) Главное - что принцип работает. В JS, заметьте, тоже питушня и undefined.

                    > А теперь представь, что объявление переменной x где-то в 100500 строках внизу сразу же затенит все x наверху. Это же какой эпичный подарок читающим код!
                    Какой багор выходит. Интересно.
                    Не знал о такой питушне. Видел только в каком-то языке, что нельзя в одном скоупе делать две переменных с одинаковым именем.
                    Хорошо, не стоит хойстить переменные без особых причин.
                    Ответить
                    • Подтверждаю.

                      Поднятие функций, впрочем, на первый взгляд подобных багров не несёт (а для взаимно-рекурсивных функций вообще очень удобно). Конкретно в крестах есть тонкие моменты, вроде такого:
                      int f1() { return 42; }
                      auto f2(decltype(f1()) x) { return f1() + x; }

                      — сигнатура f2() зависит от f1(), поэтому просто поднять все объявления на один «уровень» не получится.
                      Но кресты — сами по себе адово переусложнённое, хрупкое и шатающееся говно, в них любую буль-мень сложную фичу впилить безболезненно не получится, обязательно что-нибудь развалится.
                      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • Что не так? Терминальный клиент для гита с плюшками. Не всем же хочется ставить ъмакс ради магита
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • В командной строке диффы смотреть и мёржить неудобно. Всё-таки тул с гуйнёй тут полезен. А в остальном х.з., не вижу особого смысла.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Я не ебу что такое tig.

                Но дифф в командной строке весьма уныл, особенно если чужой код читаешь. Иногда надо больше контекста вокруг изменений, иногда удобнее side by side. В консольке запаришься это переключать. Хорошие диффтулы изменения внутри строк ещё показывают. И подсветка синтаксиса не помешает.

                Ну и трёхсторонний мёрж без гуйни весьма неприятен.
                Ответить
                • так проверь скорее, что такое tig:)

                  Про гуй в целом согласен.
                  Вот как надо

                  Inellij: https://resources.jetbrains.com/help/img/idea/2020.1/annotations_show_diff.png
                  P4merge (perforce):
                  https://www.topbestalternatives.com/wp-content/uploads/2016/05/P4Merge.jpg
                  WinDiff, лол:
                  https://cdn.lo4d.com/t/screenshot/500/windiff.png
                  Ответить
          • Если у тебя Идея, ещё и на Винде, то тиг тебе, скорее всего, не нужен. Я вообще не знаю, как ты на такой конфигурации до него догуглился? :-)

            А так так, если мне память не изменяет, очень многое сделать нажатием пары клавиш. Типа (условно, я нихуя не помню, конечно) жмакаешь b вверх/вниз m, получаешь мердж.
            Ответить
          • Я в «Винде» пользуюсь «gitk» — оболочкой, написанной на языке «tcl» с использованием библиотеки «tk».
            Ответить
        • Терминальный значит последний?
          Ответить
    • Почему «AliExpress» такое кривое говно?
      Речь даже не про качество переводов и качество самих товаров.
      Приложение и сайт работает через жопу, оплата через три пизды (какую-то «алибабу»), которая постоянно отваливается.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • https://news.ycombinator.com/item?id=22979245
      Ненавижу и create-react-app, и one-line dependencies. Прямо праздник какой-то
      Ответить