Куча говна / Говнокод #27887 Ссылка на оригинал

0

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

#109: https://govnokod.ru/27581 https://govnokod.xyz/_27581
#110: https://govnokod.ru/27610 https://govnokod.xyz/_27610
#111: https://govnokod.ru/27644 https://govnokod.xyz/_27644
#112: https://govnokod.ru/27648 https://govnokod.xyz/_27648
#113: https://govnokod.ru/27652 https://govnokod.xyz/_27652
#114: https://govnokod.ru/27659 https://govnokod.xyz/_27659
#115: https://govnokod.ru/27665 https://govnokod.xyz/_27665
#116: https://govnokod.ru/27671 https://govnokod.xyz/_27671
#117: https://govnokod.ru/27675 https://govnokod.xyz/_27675
#118: https://govnokod.ru/27685 https://govnokod.xyz/_27685
#119: https://govnokod.ru/27701 https://govnokod.xyz/_27701
#120: https://govnokod.ru/27703 https://govnokod.xyz/_27703
#121: https://govnokod.ru/27710 https://govnokod.xyz/_27710
#122: https://govnokod.ru/27728 https://govnokod.xyz/_27728
#123: https://govnokod.ru/27729 https://govnokod.xyz/_27729
#124: https://govnokod.ru/27730 https://govnokod.xyz/_27730
#125: https://govnokod.ru/27732 https://govnokod.xyz/_27732
#126: https://govnokod.ru/27733 https://govnokod.xyz/_27733
#127: https://govnokod.ru/27737 https://govnokod.xyz/_27737
#128: https://govnokod.ru/27742 https://govnokod.xyz/_27742
#129: https://govnokod.ru/27747 https://govnokod.xyz/_27747
#130: https://govnokod.ru/27755 https://govnokod.xyz/_27755
#131: https://govnokod.ru/27766 https://govnokod.xyz/_27766
#132: https://govnokod.ru/27790 https://govnokod.xyz/_27790
#133: https://govnokod.ru/27828 https://govnokod.xyz/_27828
#134: https://govnokod.ru/27834 https://govnokod.xyz/_27834
#135: https://govnokod.ru/27839 https://govnokod.xyz/_27839
#136: https://govnokod.ru/27845 https://govnokod.xyz/_27845
#137: https://govnokod.ru/27857 https://govnokod.xyz/_27857
#138: https://govnokod.ru/27867 https://govnokod.xyz/_27867

Запостил: nepeKamHblu_nemyx nepeKamHblu_nemyx, (Updated )

Комментарии (538) 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 (резервный чат)

    Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
    Остерегайтесь подделок. Берегите себя и своих близких. Кок!
    Ответить
      • The dialog appears because VS Code server wants to listen on all interfaces (bound do 0.0.0.0).

        >наружу
        в смысле у него на винде?
        Ответить
        • > bound to 0.0.0.0

          Какой промискуитет )))

          И аутентификации как всегда никакой?
          Ответить
          • ну так

            при том что IP wslя они прекрасно знают, и могут только на том интерфейсеслушать
            Ответить
          • >И аутентификации как всегда никакой?

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

      Каким компилятором собирается GIMP под винду?
      Ответить
      • Я беру подсказку 50/50. Какие варианты остались?

        З.Ы. Поди оставишь студию и гцц...
        Ответить
      • > Конечно

        А если вендор конпелятора -- монополист для своих чипов? Или всё равно остаётся свобода портануть куда-то ещё, и на том спасибо?
        Ответить
        • Ох, тонкие материи
          Спроси лоеров FSF

          Думаю, твой софт всегда свободен, если ты даешь его код под GPL
          Ответить
          • Ну вот например хочу я запустить прыщи на циклоняшке.

            Прыщи для её ARM'овских ядер есть, исходники дров на гитхабе, исходники видюхи там же.

            Но вот чтобы собрать видюху и прочий обвес, который будет крутиться в матрице, мне нужен конпелятор от альтеры интела. А он проприетарный.

            Будет ли такая система свободной?

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

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

                    Содержимое пакета высыпать в рот, и запить большим количеством горячей воды
                    Ответить
  • Если не играть в игры и не обучать сетки, но нахуй вообще в принципе может понадобиться дискретная видеокарта?
    Ответить
      • А для дизайнерских питухов («автокады», «фотошопы») нужна мощная видеокарта?
        Ответить
          • Вот кстати интересно, научился ли блендер юзать RTX на современных видюхах.

            З.Ы. Да, и походу даже для реалтайм превьюшек.
            Ответить
        • У «фотошопа» гуйня уже давно зачем-то на «OpenGL». А в любом CADе четвертая панель с превью - прямая необходимость.
          Ответить
    • может быть что-то подбирать, хеш какой-нить ломать?
      Ответить
    • Если не играть в игры и не обучать сетки, но нахуй вообще в принципе может понадобиться дискретная видеокарта?
      Ответить
      • ХУЕсли хуе хуиграть в хуигры хуи хуе хуёбучать хуетки, хуё хуяхуй хуёобще в хуинципе хуёжет хуёнадобиться хуискретная хуидеокарта?
        Ответить
  • хуюря хуёю хуебо хуёет,
    хуихри хуежные хуютя,
    хуё хуяк хуерь хуёна хуявоет,
    хуё хуяплачет, хуяк хуитя.
    Ответить
    • Хуехапэ Хуи-плюс-плюс Хуюча Хуяваскрипт
      Хуи-с-решёткой Хуява Хуи Хуяскаль
      Хуитон Хуёдин-эс Хуескуэль Хуякшнскрипт
      Хуёбжектив-си Хуерл Хуяш Хуюби
      Хуижал-бейсик Хуяссемблер Хуюа Хуифт
      Хуяскель Хуё Хуётлин
      Ответить
      • ХУЯ хуязу хуязал хуярту хуюдня,
        хуеснувши хуяску хуиз хуякана,
        ХУЯ хуёказал хуя хуюде хуюдня
        хуёсые хуюлы хуёкеана,
        хуя хуешуе хуестяной хуибы,
        хуёчёл хуя хуёвы хуёвых хуюб,
        ХУЯ хуи хуёктюрн хуиграть хуёгли хуи
        хуя хуейте хуёдосточных хуюб.
        Ответить
  • Я настроил «cups» на «Gentoo» и распечатал страницу...
    Ответить
  • Итак, у меня важный вопрос.

    Nim's memory model for threads is quite different from other common programming languages (C, Pascal): Each thread has its own (garbage collected) heap and sharing of memory is restricted. This helps to prevent race conditions and improves efficiency. See the manual for details of this memory model.

    И что теперь? Как мне сделать так, чтобы в одном потоке в фоне у меня крутился бесконечный цикл в числодробилке, а из другого потока я мог брать результаты из первого потока и отсылать их по «UDP» в свой скрипт на «Python»?
    Ответить
    • Так как это говнокод, вот несколько достойных вариантов:
      * Раз у тебя уже сети, передавай данные между процессами через localhost
      * Найди библиотеку, реализующую COM и передавай по ней.
      * Файловая передача! Старше, чем ты!
      Ответить
        • Кстати, redis хорош тем, что если система нанякнется, то в базе сохранятся результаты промежуточных вычислений.

          А решение с ZeroMQ, возможно, даже не будет говнокодом, потому что его реально используют в распределённых вычислениях.
          Ответить
          • > redis хорош тем, что ... в базе сохранятся

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

              так что ты, верно, говорил о постгресе
              Ответить
              • Я как-то раз поставил себе постгресе, но не знаю, стоит ли он у меня до сих пор: я им не пользуюсь.
                Ответить
                • Если долго чем-то не пользоваться, то оно может потеряться или забыться
                  use it or loose it.

                  Срочно сделай так
                  $ sudo -u postgres -- createuser $(whoami)
                  $ sudo -u postgres -- createdb $(whoami) -O $(whoami)
                  $ psql
                  Ответить
              • постгрес такое же уебище, как и мускул
                я не знаю, каким образом он и редис завоевали репутацию чего-то надежного
                с точки зрения корректности обработки запросов он может и подисциплинированней, но ты попробуй погуглить что-нибудь навроде "постгрес потерял данные" или "corrupted page file", удивишься насколько дырявое говно. это еще не затрагивая вопросы типа того что бородатые челы из девяностых никак не могут инт64 для транзакций завезти.
                Ответить
                • >постгрес такое же уебище, как и мускул
                  лол, кто тебе такую глупость сказал?

                  >постгрес потерял данные" или "corrupted page file"
                  лолшто? нук дай пожалуйста ссылку

                  >инт64 для транзакций завезти.
                  про фриз знаешь?
                  Ответить
                    • Про антифриз знаю. Ну это в России все знают.

                      А ты правда не знаешь про wraparound problem в MVCC?
                      Ответить
                      • Я не знаю. Расскажи, а я сделаю вид, что что-то понял. Потом буду этим знанием выёбываться на семинаре.
                        Ответить
                        • Когда ты изменяешь строку в БД, старая никуда не девается, потому что с ней работает старая транзация. У строки есть версия транзакции, с которой она видна. Так работает MVCC.

                          Соответственно, номера транзакций должны расти. В какой-то момент счетчик их переполнится, и новая транзакция станет самой старой.

                          Чтобы этого избежать, оче старые числа "замораживаются" помечаются как "старше всех существующих".

                          Подобную проблему для протокола OSPF решала Радья Перльман, и придумала Лолипоп Сиквенс Намберинг.

                          Но потом его тоже обоссали.
                          https://en.wikipedia.org/wiki/Lollipop_sequence_numbering
                          Ответить
                  • https://i.postimg.cc/NFHLtrjT/image.png

                    специально красненьким выделил те страницы, которые либо реальная проблема пользователя (а не просто мануал), либо появились вследствие таковой как напутствие последующим

                    > про фриз знаешь?

                    в этом вся суть постгре. чтобы он хоть как-то работал на реальном объеме данных, ты должен знать снизу донизу какие-то ебанутые настройки, которые в любом адекватном ПО уже были бы выставлены в нормальные значения и не крутились бы пользователем вообще никогда

                    нет, я не знаю что это такое и знать не хочу. у базы данных вообще не должно быть такой проблемы как wraparound. а судя по названию, ты и вовсе предлагаешь мне её остановить. спасибо, нет, я возьму ту технологию, которая просто работает.
                    Ответить
                    • ссылка 1:
                      >I seem that a failed vmotion occured in the same time frame.
                      Причем тут постгрес?

                      вторая не открывается


                      ссылка 3: совершенно не понятно схуя бы дата corrupted. Опять с диском проблемы?
                      В качестве решения предлагается переиграть WAL, как и нужно делать нормальной субд.


                      >ты должен знать снизу донизу какие-то ебанутые настройки
                      А у других СУБД не так

                      Я просто заливаю в MySQL восемь терабайт данных, и теку, правда?
                      А Percona просто так существует и книжки пишет


                      ------
                      ps: на всяк случай: mysql хуже постгри не потому что перформанс (хотя разумеется оптимизатор мускуля сосет у генетических алгоритмов постгри) а потому что мускуль изначально наколенное говно которое ничего не умеет, и коммуники вокруг него тоже говно, которое ничего не умеет

                      мускуль это такое пэ ха пэ
                      Ответить
                      • > А у других СУБД не так

                        > Я просто заливаю в MySQL восемь терабайт данных, и теку, правда?

                        другие субд это не только мускуль, привет
                        восемь терабайт это действительно тот объем современных данных, который хранилище должно сожрать и не испытывать проблем
                        если мне нужна выборка по первичному ключу, то я могу залить это в кассандру, не дернуть ни одной настройки, и не иметь проблем
                        если мне нужен поиск, то я могу залить это в эластик, не дернуть ни одной настройки, и не иметь проблме
                        если мне нужна будет кастомизация работы с данными, то я буду дергать настройки, связанные с хранением данных, но не с движком как таковым
                        Ответить
                        • By writing to memory mapped files, MongoDB can improve its write-throughput factor by 10.
                          If /dev/null is fast in web scale I will use it. Is it web scale?
                          Ответить
                        • Конечно не только мускуль

                          Я заливаю в Oracle или в MS-SQL и теку, а DBA и толстенные книги по тонким настройкам кеша/оптимизатора/индексов не нужны.

                          >кассандра
                          >эластик

                          Ты сравниваешь реляционки и эластик? Реально? Ты капкейк скушал?
                          Ответить
                          • > Конечно не только мускуль

                            так а нахера ты его тогда в пример приводишь, лол

                            > Ты сравниваешь реляционки и эластик? Реально? Ты капкейк скушал?

                            я привожу разные решения для разных паттернов доступа к данным
                            потому что если бы я этого не сделал, ты бы начал про вторичные индексы
                            Ответить
                              • Да, MsAccess.

                                Во-первых он САМ генерит гуи и формочки
                                Во-вторых он генерит отчеты
                                В-третьих его можно через OLE вставить в Word
                                И наконец он хранится в одном файле


                                Access рулит, я серьезно
                                Ответить
                                  • > А что лучше: «Access» или «Excel»?

                                    По-моему можно и так, и так.
                                    Ответить
                                  • Это разные инструменты для разных задач.

                                    Excel позволяет автоматически считать значения в ячейках, крутить таблицы, делать сводные (как по русски pivot tables?) и быть клиентом к MSASS, сответственно можно легко получить отчет или график просто набросав мышкой нужные поля.

                                    А MSAccess это настольная база данных на основе jet blue (или red?) (но excel может быть и ее клиентом тоже, разумеется)
                                    Ответить
                                    • > А MSAccess это настольная база данных

                                      Знаю людей которые до сих через ODBC драйвера используют Access именно как sql-клиент к нормальным бд (чтобы sql запросы руками не писать и не делать update/delete без where).
                                      Ответить
                              • SQLite. Даже ничего устанавливать и настраивать не нужно, просто слинковать библиотеку с твоей программой.
                                Ответить
                                • >SQLite

                                  SQLite не является аналогом Access.

                                  SQLite это просто база, а Access это база плюс движок для генерации форм и отчетов и поиска

                                  Короче, база и гуй
                                  Ответить
                                    • Джета есть два
                                      Синий и красный
                                      Один в аксеесе, другой в ntds в AS
                                      или в эксчендже
                                      вечно их путаю
                                      Ответить
                            • потому что ты пришел, и сказал "постгрес такое же говно как муслкуль" и привел два пруфа:

                              * если сломать storage, то дата покораптится
                              * чтобы база хорошо работала с 8ТБ, приходится читать документацию

                              Эти "проблемы" относятся к любой РСУБД, и к не реляционным СУБД тоже.

                              >я привожу разные решения для разных паттернов доступа к данным

                              PostgreSQL (как реляционка) дает некоторые возможности, которых у эластика нет, но эти возможности тебе не нужны.

                              Ок.

                              Я предлагаю использовать стример, и читать данные последовательно.

                              * он надежен: выключили электричество, ты снова включи, и дальше читай
                              * там ничего тюнить не надо
                              Ответить
                              • > если сломать storage, то дата покораптится

                                не надо ничего ломать. он сам. зайди в телеграмный чатик по нему, поищи в истории
                                Ответить
                                • лолшто? какой чатик?

                                  ты принес ссылку где у один питух мигрирорвал виртуальную машину живую, и у него упал процесс миграции, и почему-то покораптилась машина


                                  другой не говорит что и когда у него покораптилось, но говорит, что достаточно проиграть WAL чтобы починилось (что верно)

                                  я неебу что у него там было, может RAID без батареек вырубили

                                  что база-то должна была сделать?
                                  Ответить
                                    • у меня нет телеграма, а если бы и был, то зачем мне его читать? что там за информация?

                                      Ты заявл
                                      [quote]
                                      попробуй погуглить что-нибудь навроде "постгрес потерял данные" или "corrupted page file", удивишься насколько дырявое говно.
                                      [/quote]

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

                                      Ну так дай пожалуйста ссылку, где написано: "из за такой-то баги в стабильной версии постгри пострадало 10000 инсталляций, и все они навсегда проебли данные"

                                      Иначе это напоминает "брат жены слышал на работе, что у постгреса вроде есть какие-то баги, так что вероятно постгрес говно"
                                      Ответить
                                        • Дошли до стадии "не нужно говорить случайные фразы, лишенные смысла. Могут доебаться, и придется выкручиваться"
                                          Ответить
                                          • Странно что выкручиваюсь не я :smirk:

                                            У меня ощущение, что баги вообще не ищут, лично я постоянно вижу юзеров с сообщением "бля, ERROR: invalid page in block". У них в ответ спрашивают, не выключили ли они фсинк, и некоторые из них признаются, что да, выключили - и здесь безусловно никакой ответственности за данные хранилище уже не несет - но в остальных случаях мы видим вот эту хуйню (заметьте, 2019, мир уже не первый год как ссытся от постгре в качестве "надежной" замены мускулу): https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/378225-postgresql-log-file-shows-error-invalid-page-in-block-in-history_uint-table

                                            Людям рассказывают как вернуть сервак в строй с потерями, но баги никто не ищет.

                                            Про то что чексуммы довольно долго были опциональными, потому что бородатые деды из девяностых истерили по поводу пространства, тоже молчу.
                                            Ответить
                                            • Баг -- это когда есть steps to reproduce.
                                              Когда какой-то хуй на форуме заббикса написал что у него что-то сломалось, это не баг.

                                              У Сёмы регулярно не работают прыщи. Это значит, что Linux говно, и баги там никто не чинит.

                                              И да, я не удивлюсь, если у него выключен fsync.

                                              Пока что ты не привел ни одного примера бага в стабильной версии постгрес, приведшего с потере данных.


                                              ps:
                                              >CentOS7, Disk image space is a ZFS pool
                                              понятно
                                              Ответить
                                              • > CentOS7
                                                > ZFS pool

                                                Азаза, нищуки анскильные. На Солярку денех не хватило — поставили сырое гогно на сервак.
                                                Ответить
                                                • Солярис для x86 бесплатный ващето (но не открытый).

                                                  И да, там ZFS из коробки. Просто для него админа хер найдешь, там всё ОЧЕ сильно отличается от Linux


                                                  > сырое гогно на сервак.
                                                  В центоси 7 нет ZFS кстати. Его нужно явно ставить добавляя левый реп, а чуть ли не драйвер ядра компилировать.

                                                  Короче, постгрес виноват
                                                  Ответить
                                                  • >В центоси 7 нет ZFS
                                                    Понятно. Драйвер же не в mainline. А в целом это такой же дистр как и все остальные.

                                                    Не могу не вспомнить классику (автора думаю все угадают)
                                                    https://www.realworldtech.com/forum/?threadid=189711&curpostid=189841

                                                    If somebody adds a kernel module like ZFS, they are on their own. I can't maintain it, and I can not be bound by other peoples kernel changes.

                                                    And honestly, there is no way I can merge any of the ZFS efforts until I get an official letter from Oracle that is signed by their main legal counsel or preferably by Larry Ellison himself that says that yes, it's ok to do so and treat the end result as GPL'd.

                                                    Other people think it can be ok to merge ZFS code into the kernel and that the module interface makes it ok, and that's their decision. But considering Oracle's litigious nature, and the questions over licensing, there's no way I can feel safe in ever doing so.

                                                    And I'm not at all interested in some "ZFS shim layer" thing either that some people seem to think would isolate the two projects. That adds no value to our side, and given Oracle's interface copyright suits (see Java), I don't think it's any real licensing win either.

                                                    Don't use ZFS. It's that simple. It was always more of a buzzword than anything else, I feel, and the licensing issues just make it a non-starter for me.

                                                    The benchmarks I've seen do not make ZFS look all that great. And as far as I can tell, it has no real maintenance behind it either any more, so from a long-term stability standpoint, why would you ever want to use it in the first place?


                                                    > Просто для него админа хер найдешь
                                                    И стоить он будет...
                                                    Ответить
                                              • потому что в религии никто не ищет, в чем верховное божество ошибается?

                                                ссылки на баг не будет, потому что в Особом постгресе помимо всего прочего еще нет и публичного трекера.
                                                Ответить
                                                • Потому что взрослые люди заводят баг, или пишут вот сюда:
                                                  https://www.postgresql.org/list/pgsql-bugs/

                                                  "памагите у меня не работает" это не баг.

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

                                                  --ПОСТГРЕС ГАВНО ТАМ ТЕРЯЮТСЯ ДАННЫе
                                                  --пруф?
                                                  --там DML нельзя выполнять параллельно

                                                  /thread
                                                  Ответить
                                                • ого, файк учится пользоваться багтрекером

                                                  Он правда пока не знает что такое индексы, и что перестройка индексов не имеет отношения к потере данных.

                                                  Но скоро он найдет баг трекер эластика, и узнает, что там тоже есть баги
                                                  https://github.com/elastic/elasticsearch/issues
                                                  Ответить
                                                  • это не багтрекер
                                                    это чей-то парсер меилинг листа, к которому деды так привыкли в девяностых, что не заметили как начались двадцатые
                                                    появился он очевидно из-за того, что никакого багтрекера и близко нет, а он нужен
                                                    в котором я просто сделал ctrl + f corrupted, открыл первые два сообщения, охуел и затем вышел
                                                    Ответить
                                                    • И так, пострес говно, такое как майсиквл, потому что:
                                                      * у него багтрекер в мейл листе, а файк не умеет им пользоваться (хотя тут есть форма поиска https://www.postgresql.org/list/pgsql-bugs/)
                                                      * файк постгреса не знает (а эластик знает)
                                                      * у какого-то чувака на форуме на нестабильной ФС что-то упало


                                                      По этому прямо сейчас замените постгрес в своем проекте на эластик серч, и все станет отлично
                                                      Ответить
                                                      • > пострес говно, такое как майсикв

                                                        А почему это MySql прям такое говно?
                                                        Я помню тот же багор Борманда c ||. Но есть ли какие-то скилльные аргументы?
                                                        Ответить
                                                        • Исторически мускуль был кастрированной базой, сделанной на коленке для неосиляторов. А постгрес старался реализовать бОльшую часть стандарта.

                                                          В результтате в мускуле выросло пыхокоммунити очень слабых разработчиков, и там всё стало очень плохо: глупые инструменты, фиговые программисты, глупые форумы.

                                                          Со времеем мускуль стал пытаться что-то уметь, но также хаоьтично и глупо, как пых.

                                                          На данный момент вот так с ходу

                                                          * нет GEQO, тупой оптимизатор
                                                          * нет GiST индексов (может уже есть)
                                                          * нет ренжей
                                                          * хуёвые констреинты
                                                          * нет Materialized Views
                                                          * нет Generated Columns

                                                          самое печальное, что 99% пользователей мускуля не понимает, зачем это надо
                                                          Ответить
                                                          • > * нет GEQO, тупой оптимизатор
                                                            > * нет GiST индексов (может уже есть)
                                                            > * нет ренжей
                                                            > * хуёвые констреинты
                                                            > * нет Materialized Views
                                                            > * нет Generated Columns

                                                            > самое печальное, что 99% пользователей мускуля не понимает, зачем это надо

                                                            GEQO, GiST, ренджи-хуенджи, я вообще не ебу что это. Про SQL я знаю только что это какой-то говноязык для запросов в БД, и что там в БД хранится некое говно, которое этими говнозапросами можно как-то вытягивать по каким-то критериям типа "выбери мне сотрудников которые работают в нашей говноконторе более 1 года, у которых зарплата больше X и которые не привиты от короновируса" - и типа каким-то говноSQL запросом SELECT можно получить список этих вот сотрудников.
                                                            У меня этого SQL в контроллерах нет, поэтому я за контроллеры.
                                                            Ответить
                                                            • Ты имеешь право этого не знать. А вот когда это не знают энтерпрайз питухи, и на голубом глазу пиздят мне что "mysql ничем не отличается от postgres", потому что они никогда в жизни не писали ничего сложнее запроса "выбрать сотрудников у которых зарплата больше N", вот это печально
                                                              Ответить
                                                              • >>>"никогда в жизни не писали ничего сложнее запроса "выбрать сотрудников у которых зарплата больше N", вот это печально"

                                                                Если информационная система требует написания более сложных запросов, имеет смысл задуматься, нужна ли вообще эта информационная система.
                                                                Ответить
                                                          • >В результтате в мускуле выросло пыхокоммунити очень слабых разработчиков

                                                            Это какое-то предубеждение и пропаганда. Мускуль сильно прибавил с тех пор.

                                                            > нет GiST индексов (может уже есть)
                                                            Какая-то питушня которая есть только в постгресе. Если нужно селектить расстояние по 2Д координатам в других бд давно есть аналогичный функционал, просто называется он по-другому.

                                                            > 99% пользователей мускуля не понимает, зачем это надо
                                                            Я тоже не понимаю.

                                                            >* нет Generated Columns
                                                            Это есть.
                                                            >* нет Materialized Views
                                                            Это тоже есть.

                                                            > * нет ренжей
                                                            > * хуёвые констреинты
                                                            Это нужно конкретизировать.

                                                            В общем синдром Блаба какой-то.
                                                            Ответить
                                                            • >я тоже не понимаю

                                                              Тогда предлагаю всё таки файл, разделенный запятыми.

                                                              Generated columns are supported by the NDB storage engine beginning with MySQL NDB Cluster 7.5.3.

                                                              Что это такое?
                                                              В обычной нет?

                                                              Does MySQL 8.0 have materialized views?
                                                              No
                                                              https://dev.mysql.com/doc/refman/8.0/en/faqs-views.html#faq-mysql-have-materialized-views

                                                              >ренжи
                                                              https://www.postgresql.org/docs/13/rangetypes.html

                                                              >В общем синдром Блаба какой-то.
                                                              у мускульщиков-то?
                                                              возможно
                                                              Ответить
                                                              • > Generated Columns

                                                                В этой фигне ничего особенного.
                                                                Синтаксический сахарок, который легко заменит вьюха.

                                                                >Что это такое?
                                                                https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

                                                                >> В общем синдром Блаба какой-то.
                                                                > у мускульщиков-то?
                                                                Нет, есть набор какой-то постгрес питушни. Половина из которой есть только в postgres, другая половина есть mysql.
                                                                Ответить
                                                                • > ничего особенного.
                                                                  Понятно

                                                                  Всё не нужно, что сломалось
                                                                  Всё не нужно, чего нет.
                                                                  Ответить
                                                                  • Нет, не понятно.

                                                                    Во-первых, Generated Columns там есть.
                                                                    Во-вторых, этот функционал не киллер фича, а синтаксический сахар, который с легкостью заменяется вьюхой.

                                                                    >GEQO
                                                                    >GiST
                                                                    Postgres specific buzzwords, которых нет ни в оракле, ни в ms-sql.
                                                                    Ответить
                                                                    • >Во-первых, Generated Columns там есть.

                                                                      там -- это где? в каком-то особом движке?

                                                                      >Во-вторых, этот функционал не киллер фича, а синтаксический сахар

                                                                      Совершенно не понятно почему так.
                                                                      Ты так считаешь, а я эдак.
                                                                      А Ротойоб считает, что можно сидеть на MyISAM и 3.23, а все остальное это синтаксический сахар, который легко эмулируется PHP.

                                                                      >Postgres specific buzzwords, которых нет ни в оракле, ни в ms-sql.

                                                                      GEQO позволяет джойнить очень много таблиц за разумное время. У SQL и Oracle есть аналогичные технологии.

                                                                      MySQL has a limit of 61 tables in a join.

                                                                      Вообще было бы интересно увидеть табличку со списком фич и галочек:
                                                                      * фича описана в стандарте
                                                                      * реализована в постгре
                                                                      * реализована в мускуле


                                                                      тогда можно будет сравинить
                                                                      Ответить
                                                        • А вобще вот

                                                          PostgreSQL supports most of the major features of SQL:2016. Out of 177 mandatory features required for full Core conformance, PostgreSQL conforms to at least 170.

                                                          MySQL цифр не дает вообще
                                                          им стыдно
                                                          Ответить
                                                      • ладно, давайте искать corrupted:
                                                        https://www.postgresql.org/search/?m=1&ln=pgsql-bugs&q=corrupted

                                                        >Concurrent Modifications of PostgreSQL Function Can Corrupt Database

                                                        Чувак бекапит базу одновременно изменяя код хранимки

                                                        портится БЕКАП а не база, причем ошибка падает сразу

                                                        >Relation mapping file "global/pg_filenode.map" contains invalid data

                                                        ооо, наверное это оно?
                                                        Но, нет: We went through a hacker attack at our company, and corrupted some data folders.

                                                        > postgresql 13.1 process crash every hour

                                                        корпатнулся индекс, после перестройки всё заработало (хотя и постыдно)

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

                                                        постгрес говно, потому что разрабатывается дедами, которым в кайф разрабатывать, но не делать непосредственно продукт
                                                        в котором годами не будут добавляться чексуммы, потому что считается что юзеру лучше не знать, что у него проебались данные, нежели юзать немного больше дискового пространства
                                                        в котором всегда будет проблема врапараунда, подпертая костылями, опять же из-за того что видите ли слишком много диска жрется - а то что приложение должно постоять и ничего не подулать, пока он выполняется, так это нормально
                                                        в котором дедам нравится ковыряться в каких-то кишочках, но не нравится даже продумывать как будут вести себя конкуррентные процессы, из-за чего будут проблемы типа пропавших записей в индексе выше
                                                        которые будут писать данные и звать фсинк на одном и том же дескрипторе из разных процессов
                                                        потому что форк - он старый и добрый, а треды это что-то новое, непонятное, и скорее всего неработающее, а форкались еще деды дедов
                                                        из-за чего таки да, вместо того чтобы построить нормальный надежный сторадж, там будет подпертое костылями нечто, которое будет непонятно где и как просасывать данные, а когда юзеры будут приходить с вопросами, им будут объяснять что они недостаточно хорошо следуют религии, и в библии есть отсылки на то самое сообщение в меилинг листе, где говорилось что определение mvcc вообще-то неправильное, поэтому мы решили работать со своим особенным mvcc, который подразумевает регулярную остановку базы
                                                        ну и за компанию еще будут продвигать такие охуительные термины как "синхронная репликация"
                                                        Ответить
                                                        • М-да.

                                                          Я думал услышать какие-то технические объяснения проблемы постгреса, что-то про тормоза MVCC итд.

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

                                                          На всякий случай добавлю, что Cassandra это noSQL, и она нужна для совершенно иных задач. Сравнивать её с Posgtres мягко говоря странно, чтобы не сказать жеще.

                                                          Постгрес надо сравнивать с другими РСУБД.
                                                          С MySQL (который у постгреса сосет) или с Ораклом или MS-SQL, но тут надо смотреть на цену.

                                                          MS-SQL круче, Оракл вероятно тоже, но из бесплатных постгрес однозначно рулит.

                                                          И последнее: мы так и не увидели ни одной истории про потерю данных на стабильной базе по вине базы.

                                                          Ты сказал неправду, чувак. Постгрес не теряет данные
                                                          Ответить
                                  • > RAID

                                    Ну так нужно иметь репликацию на несколько машин )
                                    Ответить
                                    • >Ну так нужно иметь репликацию на несколько машин )

                                      Верно. Но кроме того RAIDу нужна батарейка, если он в режиме writeback. Если в write through, то не надо, но это медленно.
                                      Ответить
                        • твоя кассандра такое же говно, как файл, разделенный запятыми

                          у нее проблемы с перформансом
                          https://sysdig.com/blog/column-selection-effects-query-performance/

                          с физикал интегрити
                          https://www.pluralsight.com/guides/disaster-recoverable-data-persistence-with-apache-cassandra-prepare-for-the-unexpected

                          И еще ее нужно тюнить
                          https://thelastpickle.com/blog/2018/08/08/compression_performance.html

                          какие-то ебанутые настройки
                          Ответить
                          • Надо было сразу ссылку на Афира кидать с 20% write loss на ровном месте.
                            Ответить
                            • > "wiki с экзамплом вместо референса"

                              У нас в "Nim" всё именно так!
                              Ответить
                          • сходил по ссылкам, какие-то ебланы не прочитали как она работает и предъявляют претензии

                            я с тем же успехом мог начать предъявлять претензии, что не могу нормально создать в рдбмс индекс, чтобы у меня любой поисковый запрос по любым колонкам отрабатывал быстро
                            Ответить
                            • >ебланы не прочитали как она работает и предъявляют претензии

                              И не задолго до того
                              [quote]
                              ты должен знать снизу донизу какие-то ебанутые настройки, которые в любом адекватном ПО уже были бы выставлены в нормальные значения
                              [/quote]

                              clown.jpg
                              Ответить
                              • так там не надо читать документацию, чтобы знать что выборки по partition key это не выборки по primary key
                                Ответить
                                • В смысле ты родился с этим знанием?
                                  Ок.

                                  А я родился со знанием про freeze
                                  Ответить
                                  • Это то же самое, как использовать рдбмс без знания что такое праймари ки
                                    Ответить
                            • > сходил по ссылкам, какие-то ебланы не прочитали как она работает и предъявляют претензии

                              Ладно, кидаю ссылку на Афира (для непосвящённых — он автор jepsen, тест-тулы которая поставила раком все существующие БД):

                              https://aphyr.com/posts/294-jepsen-cassandra

                              Самый сочок:

                              > Losing 28% of your supposedly committed data is not linearizable by any definition. Next question.

                              > So if you do 100,000 writes/sec, on any given read you’ve got a 5% chance of seeing corrupt data. If you do 10 writes/sec and 1 read/sec, in each day you’ve got about a 1/3 chance of seeing corrupt data in any given day.

                              > The second thing you’ll notice is deadlocks. In my Jepsen tests, the cluster would go unresponsive after the first 10 or so transactions–and it would never recover. Any further attempts to modify a cell via transaction would spin endlessly in failed transactions, until I manually truncated the system.paxos table.
                              Ответить
                              • Для контраста, анализ постгри: http://jepsen.io/analyses/postgresql-12.3
                                Выжимка для ленивых:
                                In most respects, PostgreSQL behaved as expected: both read uncommitted and read committed prevent write skew and aborted reads. We observed no internal consistency violations. However, we have two surprising results to report. The first is that PostgreSQL’s “repeatable read” is weaker than repeatable read, at least as defined by Berenson, Adya, Bailis, et al. This is not necessarily wrong: the ANSI SQL standard is ambiguous. The second result, which is definitely wrong, is that PostgreSQL’s “serializable” isolation level isn’t serializable: it allows G2-item during normal operation.

                                Где потеря данных, Fike?
                                Ответить
                                • А можно пожалуйста такое же про майсцыкуль?
                                  Ответить
                              • No. Cassandra lightweight transactions are not even close to correct. Depending on throughput, they may drop anywhere from 1-5% of acknowledged writes–and this doesn’t even require a network partition to demonstrate. It’s just a broken implementation of Paxos.

                                If partitioned for about half of the test run, I found counters could drift by up to 50% of the expected value.

                                В общем, Cassandra примерно на 50% надёжнее, чем /dev/null, неплохо!
                                Ответить
                                • > В общем, Cassandra примерно на 50% надёжнее, чем /dev/null, неплохо!
                                  В смысле? Есть какие-то данные о расхождении результата с ожиданием при использовании dev/null?

                                  У меня такое только раз было, когда я права сломал и у меня доступа к dev/null не было.
                                  Ответить
                                • Годный блог.

                                  По сути NoSQL животные годами пытаются оспорить CAP теорему (любые 2 и 3).

                                  А он спускает всю эту мечтательную мразоту на землю.
                                  Ответить
                              • > Cassandra is a Dynamo system; like Riak, it divides a hash ring into a several chunks, and keeps N replicas of each chunk on different nodes. It uses tunable quorums, hinted handoff, and active anti-entropy to keep replicas up to date. Unlike the Dynamo paper and some of its peers, Cassandra eschews vector clocks in favor of a pure last-write-wins approach.

                                > > So if you do 100,000 writes/sec, on any given read you’ve got a 5% chance of seeing corrupt data. If you do 10 writes/sec and 1 read/sec, in each day you’ve got about a 1/3 chance of seeing corrupt data in any given day.

                                Столько вумных слов, а обосрались так, будто они там данные в файлик «data.json» пишут.
                                Ответить
                                • Я могу ошибаться, но помоему надо иметь универсальный сурс данных в сильно нормализированной OLTP базе, а все эти базы на 100500 колонок уже генерить по ней, и делать по ним отчеты
                                  Ответить
                              • Куда делся файк? Я требую продолжения треда!
                                Ответить
                                  • Ты файка Файка?
                                    Ожидаемый ответ. Однако он разбивается чисто по индукции. Чтобы доказать утверждение "Cassandra написана ротоняками", нужно сначала доказать базис индукции. Базис индукции даёт эта статья. Затем мы приме-ня-ем утверждение, что принципы разработки существенно не изменялись, к гипотезе индукции, и получаем, что в 2021м году Cassandra всё ещё является ротонякской DB.
                                    Qed.
                                    Ответить
                                    • >"Cassandra написана ротоняками"

                                      Ты этот тезис только что придумал.

                                      Тезис был что Кассандра лучше посгри как key-value store
                                      Ответить
                                        • Статья 2013 не является опровержением того что Кассандра лучше посгри как key-value store

                                          Особенно если с момента релиза Кассандры до момента написания статьи прошло меньше лет чем с момента написания статьи дл времени комента файка
                                          Ответить
                                          • Ой там ещё в конце довесочек:
                                            Additional consistency examples:

                                            You do a write at ONE, the replica crashes one second later. The other messages are not delivered. The data is lost.
                                            You do a write at ONE, and the operation times out. Future reads can return the old or the new value. You will not know the data is incorrect.
                                            You do a write at ONE, and one of the other replicas is down. The node comes back online. The application will get old data from that node until the node gets the correct data or a read repair occurs.
                                            You do a write at QUORUM, and then a read at QUORUM. One of the replicas dies. You will always get the correct data.



                                            > Cassandra does not use employ traditional mechanisms like locking or transactional dependencies when concurrently updating multiple rows or tables.

                                            Звучит страшно. Я бы важные данные там не хранил. И не особо важные тоже.
                                            Ответить
                                            • Ты можешь хоть до утра обсирать Кассандру, это все еще не будет опровержением тезиса файка что Кассандра лучше посгри как key-value store
                                              Ответить
                                              • Вот статья 2016 года:

                                                http://datanerds.io/post/cassandra-no-row-consistency/
                                                В ней описывается проблема консистентности уже в рамках одной (!) записи.

                                                > Кассандра лучше посгри как key-value store

                                                Моя компетенция недостаточно высока, чтобы подтвердить или опровергнуть это утверждение.

                                                Однако если мне понадобится key-value store я возьму сишный Redis.

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

                                              Неизбежная плата за скорость и масштабируемость.

                                              В общем-то если в РСУБД отключить флаш лога транзакций и юзать dirty read, они тоже на скорости memcached'а работать начнут... ACID -- это дорого.
                                              Ответить
                                  • Говно за десятилетие не тонет не устаревает. РНР актуален, недобаза ихняя тоже, Рутноп актуален еще как, разве что Delhi из ротоебского языка переместился в ницшу для фриков и энтузиастов всякого кобола.
                                    Ответить
                                  • >есть сомнения что статья 2013 года актуальна

                                    Официальная документация пойдёт?

                                    Note: It is not possible to "tune" Cassandra into a completely CA system. See You Can't Sacrifice Partition Tolerance for a more detailed discussion.
                                    https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/dml/dmlAboutDataConsistency.html

                                    Кстати я забыл отметить что у Афира в блоге лалкохранилища не всегда могли держать даже 1 из 3!
                                    То есть у этой хипстерской NoSql швали вроде как супербыстрые транзакции, а в итоге получается 1 гарантия из 3, у особо анскильных даже 0 из 3.

                                    Для внеклассного:

                                    https://stackoverflow.com/questions/47465360/lightweight-transcation-in-cassandra#47466910
                                    Ответить
                • ладно, я погуглил.

                  "постгрес потерял данные": 1 ссылка
                  >postgres потерял данные из-за изменений поведения с tmpfs.

                  Понятия не имею что несет аноним с лора, то вероятно речь о переносе tempdb на tmpfs, что когда-то у кого-то привело к каким-то проблемам, но мы не знаем.

                  По теме "дагестанец выебал казака" в Интернете больше информации.

                  Ищем теперь postgres "corrupted page file"
                  Два резулттата

                  NOT FOUND is an indication of a corrupted page file. ... Driver" jdbc_driver_library => "/tmp/logstash/vendor/postgresql-42.1.4.jar" jdbc_connection_string ..

                  и

                  ... Start Full Stack Web Development: Build Secure Asynchronous Single-Page Apps with Flask, React, and PostgreSQL ... How you can Fix a Corrupted Page File.

                  -------------


                  Файк, ты оказывается троллил. А я думал, ты серьезно.
                  извини))
                  Ответить
                • у меня недостаточно компетентности в вопросе и опыта с ним, чтобы что-либо заявлять
                  Ответить
                • Конечно. Очень надёжная СУБД
                  К ней даже тула для выковыривания данных из развалившейся базы есть...
                  Ответить
                  • Самая надёжная это внутренняя файловая СУБД 1С.
                    К ней тулз для её ворошения очень много.
                    Ответить
                    • Кстати, 1C работает и с MS-SQL, и с Oracle и Postgres, но очень забавно: создает порядка тридцати тысяч таблиц с нечитаемым говном внутри

                      Причем постгрес у нее свой, своя сборка. на обычной потсгрес не работает
                      Ответить
            • Мне ещё RRDtool нравится. Если данных оказалось больше размера кольца, то... ну, бывает.
              Ответить
              • со времен muninа ничего о нем не слышал
                Ответить
                • Хугин и Мунин
                  над миром всё время
                  летают без устали;
                  мне за Хугина страшно,
                  страшней за Мунина, —
                  вернутся ли вороны!
                  Ответить
        • > memcached, redis
          PHP-way.

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

            Но я согласен с тем, что они не могут, как жавушки запустить 3000 долгоиграющих тредов и шедулер кварц внутри (а вынуждены ебаца с кроном, лалки) так что в теории их приложения stateless.
            Ответить
      • Фу как не современно

        Во-первых можно сделать общую MySQL базу
        Во-вторых можно посылать друг другу REST запросы с JSON
        Ответить
        • Надо что-нибудь понавороченнее типа Protobuf, чтобы продемонстрировать знания технологий. JSON сейчас даже школьники знают.
          Ответить
              • Голосую за синхронизацию по SMTP. Это умели и биззток и контроллеры домена.

                Один тред шлет емейл, другой его получает.

                Емейлы можно слать асинхронно, и они шлюзаются в сети вообще без интернета.
                Скажем, второй тред можно унести в новел нетваре или фидо..
                Ответить
    • Так это же отлично, у тебя просто можно сказать почти что акторы:)

      А какой официальный IPC у твоего Nim?
      Ответить
      • {eq его знает, вроде бы есть какие-то "channels", low-level thread API. Но с ними есть один нюанс:

        # Note that objects passed through channels will be deeply copied.

        Это, получается, плохо и неперфомансно. Похоже, придётся через "channel" гонять "deepcopies" моих данных по чуть-чуть, хотя можно и всё сразу.

        Хотя, если верить вот этому туториалу, то выглядит всё довольно неплохо:

        https://nim-lang.org/docs/channels_builtin.html
        Ответить
        • Ну конечно дипли, какой смысл копировать шеллоу, и передавать ссылку на недоступное адресное пространство? Фолта соснуть хочеца?

          Сделай спец структуры (типа жавушных DAO) и передавай их через ченнелы. Будует чисто и понятно
          Ответить
          • Так, вроде бы с каналами я разобрался. А как пердолить данные туда-обратно?

            Допустим, я хочу приостановить числодробилку, чтобы успеть переписать некоторые результаты в блокнот, либо ввести ещё одну переменную.

            Получается, что мне нужно два канала, через один ЧД будет срать мне в консоль, а через другой будут сообщаться команды для ЧД.

            Я думаю сделать это так:

            1. Можно вставить неблокирующий вызов channel.tryRecv(), чтобы считать команду, если таковая есть, а потом посчитать формулу. И так снова и снова...

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

            Как принято поступать, разрабатывая солидные распределённые "highload" системы реального времени? Лично я больше склоняюсь к первому варианту.
            Ответить
            • >. И так снова и снова...
              бизивейт что ли?
              не надотак

              Знаешь как работает kqueue/select/pool/epoll в никсах или completion ports в пинде?

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

              >два потока
              см 10k problem
              Ответить
              • > >два потока
                > см 10k problem

                Да, тогда потоки не нужны, получается.

                > Знаешь как работает kqueue/select/pool/epoll в никсах или completion ports в пинде?

                Нет, но догадываюсь. Ковырял недавно async/await питушню, но она мне не подошла для моей задачи. Всё-таки потоки более гибкие в плане одновременного выполнения.

                > бизивейт что ли?

                Это тот, который "while(time() < t + 100) {};"? Конечно, ТАКОГО у меня не будет, потому что "highload".

                Алгоритм в первом случае будет такой:

                1. Во входящий канал насрали?
                1.1. Если да, то обработать команду.
                2. Посчитать хуиту.
                3. Насрать хуитой в исходящий канал.

                Вполне возможно, кстати, что канал может быть и двухсторонним. Хотя и в двух каналах я проблемы не вижу.
                Ответить
                • >Да, тогда потоки не нужны, получается.

                  Потоков нужно __примерно__ столько, сколько ядер. 10к потоков не нужно.

                  >Это тот, который


                  ну ты написал "1. Можно встав", я и испугался

                  >1. Во входящий канал насрали?
                  а если нет?
                  Ответить
                  • А если не насрали, то ничего не будет. Там есть питуля, чтобы проверять, насрато ли в канал:

                    # This time, use a non-blocking approach with tryRecv.
                    # Since the main thread is not blocked, it could be used to perform other
                    # useful work while it waits for data to arrive on the channel.
                    while true:
                      let tried = chan.tryRecv()
                      if tried.dataAvailable:
                        echo tried.msg
                        break
                      
                      echo "Kokoko pokpok!!"
                      computeImportantThingsQuickly()
                      sleep(400)

                    Но я же правильно понимаю, что если ``computeImportantThingsQuickly'' будет вовсе не ``Quickly'', то программа встанет, и будет нехорошо?

                    А если бы был ``epoll'', то можно было бы ему передать какой-нибудь "коллбек", и он бы его 100% вызвал, вне зависимости от загруженности потока с числодроблением.
                    Ответить
                    • > sleep(400)
                      лол)
                      А почему не 98 и не 732?

                      >о программа встанет, и будет нехорошо?
                      Ага

                      >коллбек
                      Это скорее в win completion ports.

                      С epoll ты бы избавился от sleep.



                      Я бы сделал так (псевдокот)
                      while channel.opened:
                        task = channel.recieve_blocking() # блочимся до первой доступной задачи
                        another_thread.send_task(task)


                      если тебе нужно получать еще и ответы от "another_thread" тогда так
                      # спим, пока не появится одно или другие
                      channel, data = select(client_channel, another_thread_channel)
                      if channel == client_channel:
                          # ставим задачу в другой поток
                          another_thread.send_task(data)
                      else if channel == another_thread_channel:
                         print(f"Другой поток задачу выполнил, просил передать {data}")


                      Более нрмальный вариант с несколькими another_threadами предлагаю тебе сделать самому
                      Ответить
                      • > А почему не 98 и не 732?

                        Если поставить 98, то консоль будет слишком быстро засираться. А если 732, то наоборот, слишком медленно.

                        Это пример, так что похуй. В чистовом варианте sleep-ов не будет, т.к. мне нужен перфоманс. Это же "highload"!

                        В итоге, знатно попердолившись, у меня получилось сделать вот такое:
                        proc worker(t: threadData) =
                          for i in 0..100:
                            let tried = t.chin[].tryRecv()
                            if tried.dataAvailable:
                              echo "Command: {tried.msg}".fmt
                            sleep(400)
                            t.chout[].send($i)
                        
                        proc worker_net(t: threadData) =
                          while true:
                            let tried = t.chin[].tryRecv()
                            if tried.dataAvailable:
                              echo "Main received: {tried.msg}".fmt
                            t.chout[].send("Koko! >:V")
                            sleep(400)


                        Всё работает как надо и, похоже, довольно перфомансно! Как тебе такое решение? Говно или не очень?

                        Как по мне, оно полностью подходит под мою задачу: бекенд бекенда через два канала передает данные и получает команды в и из фронтенда бекенда, который будет заворачивать данные в UDP-сокет и высирать их на клиента, который всё это будет рендерить в реальном времени.

                        А ещё я нашел вот такую питулю:

                        https://nim-lang.org/docs/selectors.html

                        В "Nim", оказывается, столько всего есть!
                        Ответить
                        • а ты можешь заменить sleep на epoll/kqueue/select по твоей же ссылке?
                          Ответить
                          • Зачем мне заменять sleep на это, если я собираюсь его вообще убрать?
                            Ответить
  • Кто-то когда-то пользовался «MMS»? У меня ни разу не удавалось отправить картинку.
    Ответить
    • > Malte Skarupke

      > I can program and like games

      > These days it’s a pretty bold claim if you say that you invented a sorting algorithm

      > C++20 added minimal support for coroutines. I think they’re done in a way that really doesn’t fit into C++

      > One of my favorite things to have worked on was the Getting Over It easter egg in Just Cause 4.

      Мне кажется, что он клинический дебил & долбоёб и просто не мог написать сортировку.
      Ответить
      • Ой, божечки, у него еще и сайт на вордпрессе... Я ебал его сортировку, его сайт и его самого, пошел он в пизду!
        Ответить
      • > Malte Skarupke

        О, я читал этого типа.

        Он кажись на крестах царские мапы делал, быстрее stlных.

        > Мне кажется, что он клинический дебил & долбоёб

        Ничего страшного. Это первое впечатление нормального человека, о том кто пишет на крестах.
        Ответить
    • Ну да, сортировку целых чисел можно сделать быстрее сортировки общего назначения.
      Только для обеспечения этой сортировки придётся perfect hash, который сохраняет порядок, писать для своего класса. И вычислять при каждой сортировке. И если у тебя возможных состояний больше чем влазит в size_t, то сосёшь. Или если у тебя нетривиальные требования к сортировке. Список файлов им не отсортируешь...
      Ответить
      • Сайт не работает: там наркотики, детское порно и экстримизм, получается? Что же это за сортировка такая...
        Ответить
      • >desu

        напомнило
        fun getTomorrowDate()  {
         sleep(86400);
          return now();
        }
        Ответить
      • > O(n), где n — максимальное значение чисел на входе.
        > sleep (arr[i])

        По-моему на заре ГК обсуждали подобные вореанты сортировок, использующих сисколы.

        Дошли до того, что O(logN*N) скрыто в шедулере процессов.
        Ответить
        • когда-то для отмеров времени использовали такты CPU (потом такие игры летали в плохомсмысле на 486х)

          давайте так же считать по квантам шедулеравремя
          Ответить
          • > давайте так же считать по квантам шедулеравремя
            Причём тут это?

            Для того чтобы узнать когда кого разбудить, всё-равно придётся делать priority queue(heap) с упорядочиванием. На получение одного элемента там нужно log(n).
            А всего как раз O(n*log(n)).
            Ответить
  • Читал сегодня за завтраком форумы и наткнулся на упоминание того, что в России (СССР) когда-то было напряжение 127 вольт. Причём, относительно недавно было-то ещё, на памяти наших родителей:
    Ответить
    • В моём детстве на технике были переключатели 127/220.

      Мои родители рассказывали, что в Московской области перешли на 220 вольт раньше, чем в Москве. Был какой-то период, когда в столице и в области было разное напряжение. Но это было задолго до моего рождения. Может быть, в 1960-х.

      А недавно прочитал, что в центре Питера в кварталах с плотной застройкой в некоторых домах 127 вольт сохранялось до XXI века, потому что новые трансформаторные подстанции размещать негде, а если разобрать старую, то жильцы будут долго без электричества вообще.
      Ответить
    • Я намного страшнее реальный пример нашёл. Мужик один пишет, что его фирма получила заказ на электрооборудование для «Русала». Увидел в ТЗ напряжение 500 вольт. Удивился, перезвонил. Нет, не опечатка.

      Оказывается, в «Русале» в 2021-м году куча трофейного оборудования. 500 вольт было в Третьем Рейхе, потому что Гитлер любил всё большое. Вот под это оборудование, вывезенное из гермашки, сделали электросеть.
      Ответить
  • В "Nim", если открыть каналы в одном порядке, а закрыть в другом, нихуя не скококомпилируется. Узнал я об этом методом тыка.

    А почему так может быть?
    Ответить
          • Я боюсь разадресовывать ссылки. Вдруг там NULL или уже освобождённая память?
            Ответить
              • >Волков бояться
                в лесу не ебаться
                Ответить
            • Наверное, ты имел в виду «разыменовываиь указатели»? Именно поэтому я за стек и передачу по ссылкам.
              Ответить
              • У меня в Си нет никаких "ссылок", да и вообще, так называемые "ссылки" это довольно банальный сахарок над указателями (если мы о крестоговне говорим).
                Ответить
                • Ну и обмазывайся теперь проверками if (pituh_ptr == NULL) {error("pituh is NULL"); exit(1);} как гошник ебаный.
                  Ответить
                  • А что мешает просто следовать правилам владения указателем?
                    Ответить
                • >анальный сахарок

                  напиши мне на си такую функцию, которая получает параметр по значению, а потом ты меняешь в ней один символ, и она начинает получать его по указателю, а все 100400 мест её использования можно не менять (просто перекомпилировать)
                  Ответить
                  • #include <stdio.h>
                    #include <stdlib.h>
                    
                    // менять тут 1 на 0
                    #define PO_ZNACHENIU 1
                    
                    #if PO_ZNACHENIU == 1
                      #define SHIT(x) x
                      #define SHIT2(x) x
                    # else
                      #define SHIT(x) *x
                      #define SHIT2(x) &x
                    #endif
                    
                    int f(int SHIT(x))
                    {
                      return ++SHIT(x);
                    }
                    
                    int main(void)
                    {
                      int a = 555;
                      printf("%d\n", a);
                      printf("%d\n", f(SHIT2(a)));
                      printf("%d\n", a);
                      return EXIT_SUCCESS;
                    }
                    Ответить
                  • > меняешь в ней один символ и она начинает получать по указателю

                    По-моему это пиздец...

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

                      K&R C в этом на питон похож, кстати. const нужен только анскильным лалкам, которые не в состоянии разобраться, можео ли менять данные, или нельзя
                      Ответить
                      • Мне кажется, Борманд намекала на то, что добавление одного амперсанда поломает API функции: в неё больше нельзя будет передать временный объект:
                        struct Foo {};
                        
                        void foo_val(Foo foo) {}
                        void foo_ref(Foo & foo) {}
                        void foo_cref(const Foo & foo) {}
                        
                        // ...
                        
                        foo_val(Foo{});  // OK
                        foo_ref(Foo{});  // FAIL
                        foo_cref(Foo{});  // OK: произошла материализация: https://en.cppreference.com/w/cpp/language/implicit_conversion#Temporary_materialization

                        А вот добавление «const &» действительно ничего не поломает.
                        Ответить
                        • Тогда да, я всё ещё читал про сишку и указатели. В С++ ломаются временные объекты и неявные преобразования.

                          Кстати, преобразования и в Сишке сломаются, если на указатель поменять.
                          Ответить
                        • > ничего не поломает

                          А вдруг кто-то ждал, что x станет пустым после вызова?

                          foo_val(std::mov(x));
                          foo_cref(std::mov(x));

                          Или я туплю?
                          Ответить
                          • Действительно, коньструктор перемещения во втором случае не вызывается.
                            Но я не помню, что там Стандарт по этому поводу говорит (гарантируется ли вообще его вызов, может ли он вызываться при конверсии && -> const & и так далее), а нырять в него лень.
                            Ответить
                            • Конверсии-хуерсии, как всё сложно. Именно поэтому я за Си.
                              Ответить
                              • Да и в сишке хуй сломать можно. Замени на вызов по указателю, и никто не гарантирует, что short* переданный в long* не распидорасит память.

                                void foo(long l)
                                {}
                                . . .
                                short bar = 0;
                                foo(bar);
                                Ответить
                                • Во-первых, не с С++14, а с С++17 — в С++14 его только ввели. Комикс рисовали анскильные лалки.

                                  Во-вторых, make_unique решал следующую проблему:
                                  func_1( unique_ptr<Foo>(new Foo), unique_ptr<Baz>(new Baz) );
                                  func_2( make_unique<Foo>(), make_unique<Baz>() );

                                  В func_1 может произойти следующее: new Foo вычисляется, выделяется память и создаётся объект, затем вычисляется new Baz и где-то там выкидывается эксепшен. Ошмётки недоделанного Baz подчищаются, память освобождается, но созданный Foo утекает, потому что Foo* не имеет специфического поведения при разрушении и развертке стека.

                                  В func_2 вычисляется make_unique<Foo>(), который внутре создаёт и упаковывает объект в unique_ptr, который освободит память, если Baz кинет исключение. Поэтому так делать было безопасней.

                                  В С++17 гарантировано, что один аргумент вычислится полностью, перед тем как начнёт вычислятся другой. То есть после new Foo начнёт вычислятся unique_ptr<Foo>(...), а не что-то другое, так что когда Baz кинет эксепшени, Foo* будет уже надёжно завёрнут в unique_ptr и память освободится при развёртке стека.
                                  Ответить
                                  • Всегда писала аллокацию отдельной строчкой, так что не понимаю этот срач про make_xxx, если честно...
                                    Ответить
                      • > const нужен только анскильным лалкам, которые не в состоянии разобраться, можео ли менять данные, или нельзя

                        У меня в контроллерах глобальные const массивы (и статические const массивы) могут быть размещены только лишь в флеше, т.е не надо просирать на это оперативную память, которой сравнительно мало. Т.е. если есть большой инициализированный не-const массив, данные для инициализации этого говномассива таки будут в флеше, и потом некая хуйня просто перекопирует байтики из флеша в оперативку (т.е. проебывается и место в флеше, и место в оперативке).
                        Ответить
                        • Ну вообще это ортогональные вещи...

                          Ты всегда можешь отправить не-const массив в секцию для флешки. Да и конпелятор не обязан пихать const массивы в секцию для флешки.

                          Т.е. ты свою задачу и без const прекрасно решишь.
                          Ответить
                          • > Ты всегда можешь отправить не-const массив в секцию для флешки.

                            Да, какими-то флагами, прагмами, линкер-скриптом это можно сделать, только вот зачем? Зачем? Если я его делаю не-const, я его наверное буду менять, верно? А если я его буду менять, то изменения в этом массиве сохранятся после перезагрузки контроллера, а нахуй мне это надо? Да и к тому же флеш-память изнашивается
                            Ответить
                            • > наверное буду менять

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

                              И вроде есть конпеляторы, которые этот хинт не понимают и надо явно прагму ебашить.
                              Ответить
                              • > Ну т.е. ты в основном для читателя это пишешь )))

                                Почему "в основном"? Я это еще и для компилятора пишу, чтобы он ругался при попытке менять этот массив. И еще чтобы компилятор не прогондонивал оперативную память на этот массив.
                                Ответить
                                • > ругался

                                  Дык это тоже для себя. Емейл протектед как раз про это и пишет.

                                  > не прогандонивал

                                  А вот это стандарт не гарантирует. Но разрешает конпелятору так делать, да.
                                  Ответить
                                  • > А вот это стандарт не гарантирует.

                                    Стандарт может и не гарантирует, а вот некоторые реализации гарантируют.
                                    Ответить
                                    • А некоторые -- нет. Ну например если флешки с random access нету.
                                      Ответить
                                      • > А некоторые -- нет. Ну например если флешки с random access нету.

                                        У некоторых контроллеров флеш памяти вообще нет, т.е. там программа тупо вгружается в оперативную память и там исполняется https://govnokod.ru/27525#comment648694
                                        Ответить
                                        • Я с stm'ками так и играюсь, закидывая весь код в ram...

                                          Правда на cortex m0 это не прокатило -- он не фон-неймановский.
                                          Ответить
                              • >> наверное буду менять

                                > Ну т.е. ты в основном для читателя это пишешь, чтобы показать свои намерения.

                                Если уж разобраться детальнее, наличие модификатора const позволяет компилятору делать некоторые оптимизации, которые без этого const он бы не имел права делать. Ну например, если есть функция int foo(const int *a), в нее передается указатель на константу и компилятор точно знает, что такая функция ничего не насрет по адресам, компилятор что-то может заоптимизировать. Реальный пример https://gcc.godbolt.org/z/9ebWKhfq5
                                Ответить
                                • Мудификаторы могут себя по разному вести с алиасингом.

                                  Хотя Стандарт говорит о «are distinct types that belong to the same type category».

                                  Each unqualified type has several qualified versions of its type, corresponding to the combinations of one, two, or all three of the const, volatile, and restrict qualifiers. The qualified or unqualified versions of a type are distinct types that belong to the same type category and have the same representation and alignment requirements. A derived type is not qualified by the qualifiers (if any) of the type from which it is derived.
                                  Ответить
                        • неумение пользоваться инструментами валидации ведет к деградированию программиста
                          Ответить
                          • умение пользоваться инструментами валидации ведет к деградированию программиста
                            Ответить
                            • как увеличение знаний может вести к деградации?
                              Ответить
                              • Начинаешь полагаться на валидатор и часть знаний забывается.
                                Ответить
                                    • В той же сишке можно использовать тернарник или «ленивые» операторы (|| и &&), можно использовать «computed goto» или массив указателей на функции; можно использовать формулы, где слагаемое умножается на логическое выражение (которое сишка приведёт к 1 или 0).

                                      Можно вообще использовать упоротую технику с косвенной адресацией:
                                      https://govnokod.ru/26351#comment553808
                                      Ответить
                                      • опишите процесс забытия "if" что должно произойти (ну кроме лоботомии) что бы забылось "if"?
                                        Ответить
                                        • чтение статьи про страшный бранч предикшен
                                          Ответить
                                        • > опишите процесс забытия "if" что должно произойти
                                          branch-misses             #    12,34% of all branches
                                          Ответить
                                        • И все-таки, сэр, я действительно великан. Самый настоящий! Понимаю, в это трудно поверить, но это так… Я опустился…

                                          Это самое страшное из всех наказаний. Всякий знает, как трудно взбираться наверх, но обратный путь всегда тяжелей… Не спрашивайте, как я это делал. Специальная гимнастика, диета, разнообразные поклоны, приседания… Я спускался вниз, как по тропинке, фут за футом, ежедневно приближаясь к уровню сограждан. С головой было труднее всего, но тут помог алкоголь. Ежедневный трехкратный прием алкоголя – и ты очищаешь свою башку от ненужных знаний и мыслей… Первый год я с трудом забывал все то, что усвоил в академии, затем пошло легче… За месяц я забыл колледж, за неделю – гимназию… На забывание философии ушло дня три, на историю – сутки… Потом на эту… как ее… ох, господи… В общем, ее забыл почти без напряжения часа за два… Одним словом, постепенно превратился в нормального господина средних размеров.
                                          Ответить
                                      • > можно использовать формулы, где слагаемое умножается на логическое выражение

                                        Всегда так делаю.
                                        В сочетании арифметикой указателей на char * получается тернарник для строк "true" и "false".
                                        Без ветвления.

                                        https://govnokod.ru/27882#comment750905
                                        #define print(bool) printf("false\n\0true\n" + 7 * (bool&1));
                                        Ответить
                    • Почему пиздец?

                      fuck(you);
                      
                      //// было
                      fuck(You u);
                      
                      //стало
                      fuck(You& u);
                      Ответить
                      • Потому что раньше ты не мог насрать мне в переменную, а теперь можешь...

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

                        Просто переконпелировать, да...
                        Ответить
              • А я боюсь указателей, потому что недавно целый день не мог понять, почему ничё не работает.

                Оказалось, что я сделал вот такое:

                shit_ptr = cast[ptr Shit](allocShared0(sizeof(ptr Shit)))

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

        Надо будет погуглить сканы, вдруг кто-то все выпуски отсканировал.
        Ответить
        • Это мурзилка за какой год? 85-й?
          Ответить
        • А позже еще был антропоморфный компьютер "Менатеп". Учил Мурзилку основам бизнеса. Ручной труд малоэффективен, нужно взять кредит и закупить оборудование, тогда дело пойдет.
          Ответить
          • >Менатеп
            Так это компания Менатеп и проплатила же поди.

            Ею вроде владел хордор, а пиарщиком работал известный путинский пропагандон, идеолог русских миров, суверенных демократий и прочих "наши" сурков-дудаев

            Потом путин суркова перекупил, а ходора на кукан посадил
            Ответить
            • Только сейчас узнал, что Владислав Сурков в детстве был Асланбеком Дудаевым.
              Ответить
  • Чем Страуструп отличается от Штрауструпа?
    Ответить
      • Когда тебе нравится С++ и ты уважаешь Бьерне, ты называешь его Страуструп.

        Когда ты сёма, и ненавидишь всё, что не понимаешь (а это примерно всё), то коверкаешь имена людей: Штульман, Штауштруп, Швабодка (думаю, это чешская фамилия)
        Ответить
  • Republican congressional candidate Martin Hyde faces daily fines from his Homeowner’s Association (HOA) after installing Christmas lights that read, “Let’s Go Brandon” on his home’s balcony.
    Ответить
    • Жалко, в их архиве только бриташка и Польша, а их программа требует /dev/vbi0, а у меня нет никакого /dev/vbi0.
      Ответить
        • в нормальной ОС ты бы сделал man vbi и всё бы узнал
          в прыщах нет

          но ты прав, vbi это video4liux, сиречь плата видеозахвата
          Ответить
  • https://wiki.snk-games.net/Космические_рейнджеры_HD:_Революция

    Помимо этого, в универсальную библиотеку OKGF был включён огромный класс из VirtualDub ветки 1.2x (размером более 1 Мб исходного кода), из которого применялась всего-навсего одна функция для программного рескейла видео на весь экран.

    Это обман чтобы набрать мегабайтный класс )))
    Ответить
    • If you're seeing this message, that means JavaScript has been disabled on your browser, please enable JS to make Imgur work.
      Ответить
  • Помните, в 2009-м исходники трёх тысяч сайтов утекли, потому что админы не закрыли директории .svn?

    https://habr.com/ru/post/70330/

    Приготовьтесь. В 2021-м Госуслуги утекли, потому что не закрыли директорию .git:

    https://habr.com/ru/news/t/598121/

    12 лет технического прогресса коту под хвост.
    Ответить
    • Нахуй они вообще репозиторий в document root клали? Его же можно положить отдельно, а в document root тянуть через git pull. Или им места жалко?
      Ответить
    • блядь:) нахуя на продакшене .git?
      Ответить
      • У меня сложилось впечатление, что у них нет продакшена, а мы для них бесплатные тестеры.
        Ответить
        • из мастера тягают?:)

          я на один свой петпроект тоже доставляюсь гитом, но я делаю там чекаут из бранча в одну папку, а тем копирую. И кстати мне это совсем не нравится

          А вот вопрос: как можно так настроить сервер, чтобы он отдал неизвестные контенттайпы, да еще и из .git?
          Ответить
    • и почти 2гб исходного кода битрикс, который, тебе, мой друг и предстоит изучить.
      Ответить
        • Действительно, PHP тут помог.

          Один блек хэт искал уязвимость в 24 миллионах пхп файлов, сошел с ума, и теперь его лечат галоперидолом, а сайт так и остался невзломанным
          Ответить
    • > при помощи утекших сертификатов

      Блядь. Ещё один хакер, который не отличает ключа от сертификата...

      Что там всё-таки утекло, ключи или сертификаты?
      Ответить
      • Действительно не понятно. Если там хранились сертификаты пользователей, а приватные ключи хранились у них дома под подушкой, то такие сертификаты ценности не имеют: их можно бесплатно в ящики всем кидать.

        Если же приватные ключи пользователей лежали на сервере госуслуг, то следует как можно скорее обоссать и сжечь в полном составе всех, кто имел к созданию этого говна хоть какое-то отношение
        Ответить
      • Серятификату вроде бы не запрещено содержать в себе приватключ, не?
        Ответить
        • Если они pfx'ы боевых ключей в репе хранят -- то они совсем отморозки.
          Ответить
        • какой же это отгда сертификат? нахуй он нужен? кому его показывать?
          серт содержит ПУБЛИЧНЫЙ ключ и подпись.


          Собссно серт это

          "Вот публичный ключ лошади Маруси. Он подписан CA, и справка дана Марусе в том, что она лошадь".

          Я могу зашифровать им письмо Марусе, а она его прочтет.
          А подпись CA мне нужна чтобы знать, что публичный клдюч и правда Марусин.



          Технически конечно ты можешь слажить в один архив все ключи, но зачем? зачем? нахуя??
          Ответить
          • > зачем?
            Чтобы потом пострипать приватключ. А ротоебы забыли это сделать, например.
            Мои паспортные данные с кавычками доказывают, что возможно всё.
            Ответить
      • Про сертификаты:
        <?php
        /**
         * Created by PhpStorm.
         * User: super
         * Date: 27.05.2016
         * Time: 17:02
         */
        require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
        require_once($_SERVER["DOCUMENT_ROOT"] . '/esia_vendor/autoload.php');
        
        
        $config = [
            'clientId' => '008201581',
            'redirectUrl' => 'http://gosuslugi.pnzreg.ru/rest3.php?esiaBackUrl=&#039; . $_SERVER["HTTP_REFERER"],
            'portalUrl' => 'https://esia.gosuslugi.ru/&#039;,
            'privateKeyPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/inf/penza58_gos_service.pem',
            'privateKeyPassword' => '12345678',
            'certPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/inf/penza58_gos_service.crt',
            'tmpPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/tmp',
            'scope' => "http://esia.gosuslugi.ru/usr_inf"
        ];
        
        $esia = new \evolenta\esia\OpenId($config);
        Ответить
        • А ты ещё спрашиваешь, почему я за "смарт-карты" и "HSM".
          Ответить
          • Вот ещё похожий код:
            <?
            require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";
            require_once $_SERVER["DOCUMENT_ROOT"] . "/smev/ElkSID0004138.php";
            require_once $_SERVER["DOCUMENT_ROOT"] . "/esia_vendor/autoload.php";
            
            use evolenta\esia\OpenId;
            
            global $USER;
            
            $user = CUser::GetByID($USER->GetID());
            if (!$userInfo = $user->GetNext()) {
                LocalRedirect("/");
            }
            
            $configToken = [
                'clientId' => '008201581',
                'redirectUrl' => $_SERVER["SERVER_NAME"] == "gosuslugi.pnzreg.ru"
                    ? 'https://gosuslugi.pnzreg.ru/lk/elk-subscribe.php&#039;
                    : 'http://test-rpgu.pnzreg.ru:1280/lk/elk-subscribe.php&#039;,
                'portalUrl' => 'https://esia.gosuslugi.ru/&#039;,
                'privateKeyPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/inf/penza58_gos_service.pem',
                'privateKeyPassword' => '12345678',
                'accessType'=>"offline",
                'certPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/inf/penza58_gos_service.crt',
                'tmpPath' => $_SERVER["DOCUMENT_ROOT"] . '/esia/tmp',
                'scope' => "http://lk.gosuslugi.ru/elk?oid=" . $userInfo["LOGIN"]
            ];
            
            $esiaToken = new OpenId($configToken);
            
            if (!$_GET['code']) {
                header("Location: " . $esiaToken->getUrl());
            } else {
                if (!(bool)$userInfo["UF_ELK"]) {
                    $resultResponse = ElkSID0004138::subscribe($esiaToken->getToken($_GET['code']));
                    if ($resultResponse["AppData"]["Error"]["code"] == 0) {
                        $arFields["UF_ELK"] = true;
                        $arFields["UF_ELK_LOG"] = json_encode($resultResponse, JSON_UNESCAPED_UNICODE);
                        $arFields["UF_ELK_SUB_DATE"] = date("d.m.Y H:i:s", time());
                        (new CUser())->Update($userInfo["ID"], $arFields);
                    }
                }
            
                LocalRedirect("/");
            }
            Ответить
          • Очень полезная функция:
            <?php
            /*класс сертификата*/
            class Certificate {
            
                static public function extractCertificateFromSign ($sign) {
                    $sign = "-----BEGIN CERTIFICATE-----\n".$sign."\n-----END CERTIFICATE-----";
            
                    //СОХРАНИТЬ СЕРТИФИКАТ ВО ВРЕМЕННЫЙ ФАЙЛ
                    //$path = $_SERVER['DOCUMENT_ROOT']."/temp_cerificate.txt";
                    $path = tempnam("/tmp", "user_cerificate.txt");
                    $fp = fopen($path, "w"); 
                    fwrite($fp, $sign);
                    fclose($fp);
                    
                    // ИЗВЛЕЧЕНИЕ СЕРТИФИКАТОВ ИЗ ПОДПИСИ
                    $certificates = shell_exec('openssl pkcs7 -in '.$path.' -inform PEM -print_certs');
                    preg_match_all('/\n-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----\n/is', $certificates, $certificatesArray);
                    //личный сертификат - последний из иерархии сертификатов
                    $certificate = openssl_x509_parse(end($certificatesArray[0]));
                    // УДАЛИТЬ ВРЕМЕННЫЙ ФАЙЛ
                    //unlink($path);
            
                   return $certificate;
                }
            
            }
            ?>
            Ответить
    • Собственно архив:

      https://anonfiles.com/vbX2e5Wew9/gosuslugi.pnzreg.ru_rar

      И по традиции:

      Decision 840048-URL-on made on 2019-11-15 by Роскомнадзор.
      This block affects IPs 104.18.38.170, 104.18.39.170, 104.24.116.23, 104.24.117.23, 104.31.94.24, 104.31.95.24, 172.64.110.7, 172.64.111.7, 172.64.138.6, 172.64.139.6, 172.64.174.29, 172.64.175.29, 172.64.206.36, 172.64.207.36, 172.67.218.209, 2606:4700:3030::68, 2606:4700:3031::68, 2606:4700:3033::68, 2606:4700:3034::68, 2606:4700:3037::ac, 2606:4700:30::6812, 2606:4700:e0::ac40, 2606:4700:e2::ac40, 2606:4700:e4::ac40, 2606:4700:e6::ac40, domain anonfiles.com and URL https://anonfiles.com/g9P6z5Abn1/RWPAck_rar.

      Decision 1424457-URL-on made on 2021-09-07 by Роскомнадзор.
      This block affects IPs 172.64.192.30, 172.64.193.30, 2606:4700:e6::ac40, domain anonfiles.com and URL https://anonfiles.com/xeCc4aFfu8.
      Ответить
      • > багры чекистов-путинистов
        Тащемта этот код по определению бублик домен.
        Ответить
      • Из-за нестабильной связи пока удалось скачать только 2 первых гигабайта. Скорость не больше 100 килобайт/с (0,8 мегабит/с). Судя по скриншотам, у всех так.

        2 гига разжимаются в почти 7 гигов. Там в основном пыхокал, преобладающий размер файла — один килобайт. Вот типа такого:
        <?php
        require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
        
        if (!$USER->IsAuthorized()) {
            LocalRedirect("/rest.php");
        }
        
        $APPLICATION->SetPageProperty('title', "История | Личный кабинет");
        $APPLICATION->AddChainItem("История", "/lk/history.php");
        
        $APPLICATION->AddHeadScript('/lk/js/script.js');
        $APPLICATION->IncludeComponent("oep-components:page.history", "template_for_history");
        
        require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php");
        ?>


        Немножко двоичных файлов типа «vaccination_memo_covid.pdf».
        Ответить
        • <?php
          
          define("DO_URL", "http://192.168.0.7:8083/mnhtn");
          define("DO_PASSWORD", "portal:0OQJK_NLqVe4Y1a");
          
          // define("DO_ACCESS_KEY", "db35f735-e271-4839-84f4-0a17cffe190b");
          define("DO_ACCESS_KEY", "68a5d801-4162-44e2-a7a5-345d6218b396");
          
          use Helpers\DIContainer\DIContainer;
          
          
          class FgisDoApi
          {
              /**
               * Операция предназначена для загрузки файла в ФГИС ДО. Файл прикрепляется к учётному объекту (например, к жалобе),
               * в ФГИС ДО
               *
               * @param $fileContent
               * @param $mimeType
               * @param $fileTitle
               * @param $sourceUUID
               * @param string $attrCode
               * @return mixed
               */
              static function addFile($fileContent, $mimeType, $fileTitle, $sourceUUID, $attrCode = 'fileFromApplic')
              {
          
                  $request = [
                      "AppData" => [
                          "addFileRequest" => [
                              "accessKey" => DO_ACCESS_KEY,
                              "content" => base64_encode($fileContent),
                              "mimeType" => $mimeType,
                              "sourceUUID" => $sourceUUID,
                              "title" => $fileTitle,
                              "attrCode" => $attrCode
                          ]
                      ]
                  ];
                  //echo json_encode($request, JSON_UNESCAPED_UNICODE);
          
                  return self::sendSyncRequest("/api/v1/envelope/syncReq/FgisDo-addFile/0", $request);
              }
          Ответить
          • <?php
            /**
             * Created by PhpStorm.
             * User: super
             * Date: 11.08.2016
             * Time: 12:26
             */
            require_once __DIR__ . "/smevClientApi.php";
            require_once __DIR__ . "/userHelper.php";
            
            
            class GisGmpApi
            {
            
                // test
                static $smevTestAddress = '/mnhtn/proxy/smev/gateway/services/SID0003663';
            
                // prod
                static $smevAddress = '/mnhtn/proxy/smev_prod/ws/r58/SID0000286';
            
                static $login = 'portal';
                static $password = '0OQJK_NLqVe4Y1a';
            
                static $systemCode = '008201581';
            
                static $senderIdentifier = '3ed531';	//'363566' '00281f' /*'36576f'*/;
            
                static function getTestSmevDomain() {
                    return SMEV_URL_ADDR . self::$smevTestAddress;
                }
            
                static function getSmevDomain() {
                    return SMEV_URL_ADDR. self::$smevAddress;
                }
            Ответить
            • > phpstorm

              Зачем это жабоговно пишет рекламу о себе в каждом файле?

              З.Ы. Это же юнит-тест какой-нибудь, я надеюсь?
              Ответить
              • Наверное. Я надеюсь, что это вообще подставной код, чтобы отвлечь хакеров.
                Ответить
            • <?
              require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
              
              CModule::IncludeModule("iblock");
              
              function toRusDate($date)
              {
              
              //    2010-10-28
                  $date = explode(' ', $date);
                  $date = explode('-', $date[0]);
              
              //    var_dump($date);
              
                  $MonthNames = array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
                  $rusmouth = $MonthNames[$date['1'] - 1];
                  $rusdate = $date['2'] . ' ' . $rusmouth . ' ' . $date['0'];
              
                  return $rusdate;
              }
              
              function deleteTag($str)
              {
                  $str = strip_tags($str, '<p><li><ul><br></br>');
                  $str = str_replace("<li>", "<li><p>", $str);
                  $str = str_replace("</li>", "</p></li>", $str);
                  $str = str_replace(" ", "", $str);
                  $str = preg_replace("#(</?\w+)(?:\s(?:[^<>/]|/[^<>])*)?(/?>)#ui", '$1$2', $str);
                  return $str;
              }
              
              function srokRU($str)
              {
                  $str = str_replace("paper", "Бумажный", $str);
                  $str = str_replace("electronic", "Электронный", $str);
                  $str = str_replace("min", "минут", $str);
                  $str = str_replace("wd", "раб. дн", $str);
                  $str = str_replace("h", "час", $str);
                  $str = str_replace("d", "календ. дн.", $str);
                  $str = str_replace("m", "месяц", $str);
                  return $str;
              }
              Ответить
              • gEKA6PbCKuu_nemyx слил исходники.
                Всё, теперь говнокод тоже попадёт в реестр. Какой багор )))
                Ответить
                • Не может быть, чтобы это были настоящие исходники. Наверняка это какой-то мусор.

                  Вряд ли такой серьёзный сервис как «Госуслуги» поддерживают полные идиоты.
                  Ответить
          • Пароли хранятся в гите? Заебись.
            Ответить
                  • Нет. Он хранится в корне сайта вместе с самим вордпрессом. А вордпресс не нужно коммитить в гит. Коммитить имеет смысл только темы и плагины, которые ты разрабатываешь.
                    Ответить
                    • А если ты сам вордпресс допиливаешь? Или так не бывает?
                      Ответить
                      • Это очень редкий кейс, совсем хак. Файлы перезатираются при обновлении.
                        Ответить
            • Платежи:
              <?
              /**
               * @var CUser $USER
               * @var CMain $APPLICATION
               */
              use Bitrix\Main\Page\Asset;
              
              class B2bPayApi
              {
                  static public $SECTOR = '735';
                  static public $PASSWORD = 'L0i5Fnwn5';
                  static public $HOST = 'https://pay.best2pay.net/webapi/';
              
                  static public function register($request)
                  {
                      $request["sector"] = self::$SECTOR;
                      $request["signature"] = base64_encode(
                          md5(
                              self::$SECTOR
                              . $request["amount"]
                              . $request["currency"]
                              . self::$PASSWORD));
              
                      $ch = curl_init();
              
                      curl_setopt($ch, CURLOPT_HEADER, FALSE);
                      curl_setopt($ch, CURLOPT_VERBOSE, true);
                      curl_setopt($ch, CURLOPT_POST, true);
                      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($request));
              
              
                      curl_setopt($ch, CURLOPT_URL, self::$HOST . 'Register');
                      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
              
                      $response = curl_exec($ch);
              
              
                      curl_close($ch);
                      return (array)simplexml_load_string($response);
              
                  }
              
                  static public function purchase($id) {
                      $signature = base64_encode(
                          md5(
                              self::$SECTOR
                              . $id
                              . self::$PASSWORD));
              
                      return self::$HOST . "Purchase?sector="
                      . self::$SECTOR
                      . "&id="
                      . $id
                      . "&signature=" . $signature;
              
                  }
              Ответить
              • > md5

                Блядь... В 2021 году? Но это не их вина, а платёжки, конечно.
                Ответить
                • Как видишь, это не изобретение «Госуслуг» и даже не изобретение портала городских услуг Пензы. Это часть протокола платёжной системы «best2pay».

                  Предлагаешь использовать HMAC для подписи запросов?
                  Ответить
                  • > HMAC

                    Ну да, там не надо думать каким концом приложить пароль чтобы не словить length extension attack.
                    Ответить
                        • «Платёжный сервис Best2Pay был основан в 2012 году.»

                          То есть когда даже в «PHP» были готовые функции, чтобы подписать нормально.
                          Ответить
                            • Нашёл у себя на диске древнюю версию «PHP»:
                              PHP 5.2.17 (cli) (built: Jan  6 2011 17:28:41) 
                              Copyright (c) 1997-2010 The PHP Group
                              Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies


                              Смотрим, что она умеет:
                              php -r "var_dump(hash_algos());"

                              Выхлоп:
                              array(38) {
                                [0]=>
                                string(3) "md2"
                                [1]=>
                                string(3) "md4"
                                [2]=>
                                string(3) "md5"
                                [3]=>
                                string(4) "sha1"
                                [4]=>
                                string(6) "sha256"
                                [5]=>
                                string(6) "sha384"
                                [6]=>
                                string(6) "sha512"
                                [7]=>
                                string(9) "ripemd128"
                                [8]=>
                                string(9) "ripemd160"
                                [9]=>
                                string(9) "ripemd256"
                                [10]=>
                                string(9) "ripemd320"
                                [11]=>
                                string(9) "whirlpool"
                                [12]=>
                                string(10) "tiger128,3"
                                [13]=>
                                string(10) "tiger160,3"
                                [14]=>
                                string(10) "tiger192,3"
                                [15]=>
                                string(10) "tiger128,4"
                                [16]=>
                                string(10) "tiger160,4"
                                [17]=>
                                string(10) "tiger192,4"
                                [18]=>
                                string(6) "snefru"
                                [19]=>
                                string(4) "gost"
                                [20]=>
                                string(7) "adler32"
                                [21]=>
                                string(5) "crc32"
                                [22]=>
                                string(6) "crc32b"
                                [23]=>
                                string(10) "haval128,3"
                                [24]=>
                                string(10) "haval160,3"
                                [25]=>
                                string(10) "haval192,3"
                                [26]=>
                                string(10) "haval224,3"
                                [27]=>
                                string(10) "haval256,3"
                                [28]=>
                                string(10) "haval128,4"
                                [29]=>
                                string(10) "haval160,4"
                                [30]=>
                                string(10) "haval192,4"
                                [31]=>
                                string(10) "haval224,4"
                                [32]=>
                                string(10) "haval256,4"
                                [33]=>
                                string(10) "haval128,5"
                                [34]=>
                                string(10) "haval160,5"
                                [35]=>
                                string(10) "haval192,5"
                                [36]=>
                                string(10) "haval224,5"
                                [37]=>
                                string(10) "haval256,5"
                              }


                              Семейство SHA-2 уже поддерживалось.
                              Ответить
                  • Я предлагаю использовать аутентификацию с помощью асиметричной криптографии, а шифровать данные симметричным сессионным временным ключом.

                    Хорошая новость в том, что это всё реализовано в TLS, и не нужно писать
                    gnature = base64_encode(
                                md5(
                                    self::$SECTOR
                                    . $id
                                    . self::$PASSWORD));
                    Ответить
                    • > TLS

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

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