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

    +1

    1. 1
    Питушня #7

    #1: https://govnokod.ru/26692 https://govnokod.xyz/_26692
    #2: https://govnokod.ru/26891 https://govnokod.xyz/_26891
    #3: https://govnokod.ru/26893 https://govnokod.xyz/_26893
    #4: https://govnokod.ru/26935 https://govnokod.xyz/_26935
    #5: (vanished) https://govnokod.xyz/_26954
    #6: (vanished) https://govnokod.xyz/_26956

    Запостил: nepeKamHblu_nemyx, 20 Сентября 2020

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

    • Доброе утро!

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

      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/ (альтернативный Говнокод)
      * https://gcode.space/ (read-only зеркало Говнокода)
      * @GovnokodBot в «Telegram»
      * https://vorec.space/ (глоссарий Говнокода)
      Ответить
    • Что значит "Сбалансированный цикл"?
      Ответить
    • Забыл отписаться.
      Про тему диссера она не особо захотела говорить, хотя эту тему я немного понимаю (не зря вуз оканчивал).
      Ответить
      • Ты давно его оканчивал?
        Ответить
        • А ты?
          Ответить
          • стати, а из какой области хотябы дисер?
            тему можешь не грить
            Ответить
            • из математики вроде
              Ответить
              • --чем ты занимаешься на работе?
                --за комптютером сижу

                примерно так
                Ответить
                • я слышал что тян так и надо рассказывать про работу если ты программист
                  Ответить
                  • Если тян тоже программист, то можно рассказывать подробнее
                    Если нет, то да, именно так и нужно)
                    Ответить
      • Это странно, конечно.. А вы так и не встретились второй раз? А общаетесь то хоть регулярно?
        Ответить
        • Я так думаю об этом сложно говорить (она же не будет вводную лекцию читать по телефону, лол), да и зачем об этом говорить.
          Нет.
          Ну вот в ПН общались, вчера, далее на след. выходных позвоню. В соцсети пытаюсь чем-то бросаться (но у неё нет времени особо на такую хуйню). Достаточно?
          Ответить
          • а я так думал, что если ты в чем-то разбираешься, то без труда сможешь объяснить смысл другому челу, особенно если он тоже рубит
            Ответить
            • Возможно, что ей просто хочется отдохнуть от всей этой питушни и поговорить о чём-то другом.
              Ответить
          • А она какие-то майлстоны обозначала? Сказала, когда время то появица?
            Ответить
            • Да.
              Ответить
              • Ну тогда можно не волноваться
                Ответить
                • Единственное о чем я волнуюсь, это что меня опять рано или поздно (в данном случае поздно) отфрендзонят (((
                  Ответить
                  • волков бояться -- в лесу не сношаться

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

      однако же гейдев это зашквар и в принципе практическое отсутствие каких-то скиллов, которые можно поднять (ну, кроме A* лол), так что я держусь

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

          с полезным сегодня тяжеловато (практически все полезные программы уже реализованы раз по 100500 во всех формах и позах)

          остаются скиллы.

          конечно, даже в игре можно набить какой-то скилл
          например, управление принятием решений для "ИИ"
          Ответить
          • >практически все полезные программы уже реализованы раз по 100500 во всех формах и поза

            Чарльз Дьюэлл, директор Патентного бюро США, в 1899 году сказал: “Все, что могло быть изобретено, уже было изобретено.

            Авторы свиней с питицами считают мульоны, и передают тебе привет
            Ответить
            • Какой багор )))
              Ответить
            • о, ну Ровио это такой себе пример

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

              мобильный гейдев это вообще полное говнище, не ходите туда, пацаны
              Ответить
              • Вспоминается история про то, как какой-то мужик сделал автоматический генератор викторин и каждый день заливал в «Гугл Плэй» по новому «приложению». Что характерно, вполне неплохо так зарабатывал (ну, для полностью автоматизированного процесса).
                Ответить
              • я к тому, шо выстрлетить может всё, что угодно
                Ответить
          • > например, управление принятием решений для "ИИ"

            Напиши игру, в которой противники будут управляться нейросетками и постоянно улучшаться генетическими алгоритмами. Опционально — распределённо, чтобы все играющие сливали на сервер данные об обучении. Назови, например, «Skynet».
            Ответить
            • Ну кстати норм тема, как раз можно видюху на всю катушку поюзать. А то эти тензорные ядра простаивают всё равно.
              Ответить
        • Это все от хардкорности зависит. Кто-то возьмет какую-то поебень вроде Unity - ну там действительно хуй поднимешь скиллы. Вот если б я решил делать игруху, я б пошел очень хардкорным путем, начал бы изучения какого-то OpenGL, потом бы разбирался с тем, как через этот OpenGL рисовать, как текстурки натягивать, прочитал бы про аффинные преобразования и как через кватернионы поворачивать... короче вместо самой игры я б дрочился с какими-то API, шейдерами и математической хуйней и писал бы свой движок с нуля.
          Ответить
          • > дрочился с API
            > шейдеры
            > кватернионы

            Я так Кубик Рубика слепил с моделями на тыщи полигонов, попиксельным освещением и 16х антиалиасингом.

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

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

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

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

              Старое API же выбросили на помойку, на телефонах и в вебе теперь только минимальный профиль где всё по хардкору.
              Ответить
              • а, ты про 3Д, тогда понятно.

                2Д-то не сильно изменилось.
                Ответить
                • в 2D шейдеры тоже не помешают в общем-то

                  с точки зрения opengl вроде нет никакой особой разницы, всё отличие в сложности трансформаций, которые придётся делать
                  Ответить
                  • если ты пишешь под opengl то вероятно да, но я вот писал под gdi как-то, или там под swing, и ничего про opengl не знал, и тёк

                    разумеется всё жутно не оптимально было
                    зато почти как в uses graph;)
                    Ответить
                • Я могу ошибаться, но по-моему все 2д игрухи сейчас через 3д API рисуют. Просто матрицы надо очень аккуратно настроить чтобы текстуры не пидорасило.

                  Вроде жопа в том, что аппаратно ускоренных 2д апи в операционках просто не существует. Директ дроу закопали, GDI и X - треш лютый.
                  Ответить
                  • потому и было сказано
                    >разумеется всё жутно не оптимально было

                    если ты делаешь, к примеру, квест, то ты можешь 3Д не трогать

                    >ускоренных 2д
                    вроде бы 2Д должна делать карта, но так как 99% игр 3Д, карте нет резона делать это быстро для адских резолюшенов

                    зырь сюды
                    https://docs.microsoft.com/en-us/windows-hardware/drivers/display/optional-graphics-driver-functions
                    Ответить
                    • Ну с opengl/vulkan/dx у тебя будет нормальная фильтрация текстур и антиалиасинг, кстати. Сможешь крутить и масштабировать картинки без уёбищных лесенок и пикселей.

                      Плюс всякие няшные эффекты и системы частиц на шейдерах. Даже в квесте пригодится.
                      Ответить
                      • вот про два апи под винду с ускорением
                        https://docs.microsoft.com/en-us/windows/win32/direct2d/comparing-direct2d-and-gdi

                        Кстати, Direct2D is layered on top Direct3D

                        >On Vista, GDI will always render on the CPU
                        вистобляди соснули
                        Ответить
                        • > Direct2D

                          Ну это вендорлок, так не интересно. С OpenGL ты и на винде и на маке и на прыщах запустишься и на мобилках и даже в вебе. А это чисто винда.
                          Ответить
                          • конечно, запустишься. Но сначала ты покушаешь всю ту сложность, про которую ты говорил, а еще потом кросс-платформенную разработку, не?;)
                            Ответить
                            • Ну эта сложность она таки одинаковая на всех платформах. И шейдеры от десктопа у меня в вебе вполне работали.

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

                                А с обычным 2Д интерфейсом ничего сложнее примитивов и bitblt в руках держать не приходица.

                                Хотя ничего серьезного наверное и не напишешь
                                Ответить
                                • > GLSL

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

                                    вот как тут
                                    https://youtu.be/-iQIcibJ8-c?t=166
                                    Ответить
        • писать свой движок это интересно само по себе

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

            сделай 3Д движок без пола и потолка, как в wolf3d
            Ответить
            • с простого движка я начал несколько лет назад, правда, 2D (и на шарпе, лол).

              что меня впечатлило, так это то, что через несколько лет взял этот проект, сделанный в VS, открыл в VS for Code, слил зависимости, сбилдил и оно заработало (ну, не считая ужасного перфоманса из-за особенности рендеринга). какая совместимость )))
              Ответить
              • а ты хочешь 3Д или 2Д и какой жанр?
                Ответить
                • Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...
                  Ответить
                • я хочу клон homm )

                  двухмерный

                  можно в принципе вообще написать диздок и забить
                  Ответить
                  • а под какую платформу?
                    Ответить
                    • та хотелось бы кросс-платформу
                      Ответить
                      • хм) TypeScript и Canvas API?:)
                        Java, как майнкрафт?
                        Ответить
                        • Ну кстати веб - неплохая тема. По крайней мере скинуть кому-то игруху очень легко будет.

                          WebGL сейчас, скорее всего, уже везде есть.
                          Ответить
                          • ага
                            и распостранять легко

                            Кстати, мой коллега году в 2009 писал какую-то хуйню под одноклассники или вконтакте, какие-то там помидоры люди у него выращивали, и в какой-то момент это принесло ему нормально денег

                            но сейчас наверное там конкуренция
                            Ответить
                            • Ну и коммуникация с сервером у тебя сразу есть, не надо какие-то свои костыли выдумывать.
                              Ответить
                              • Вопрос в том, хочешь ли ты писать на TS:)
                                Ответить
                                • Нет конечно, но можно с вебассемблером попердолиться.
                                  Ответить
                  • Кстати, если хочешь развивать скиллы — пиши вообще любую хуйню, но правильно. Проработка архитектуры, форматирование, рефакторинг, тесты, CI/CD, VCS, best practices, разнообразные технологии и прочая, и прочая, и прочая. Ну чтобы эта хуйня в итоге выглядела так, как должна выглядеть любая программа, если из процесса разработки исключить «ладно, похуй, лень/времени нет, хуйнём костыль».
                    Ответить
                    • плюсану

                      Правильная разработка чего угодно, даже тулы для бекапа файлов, это прокачка скиллов
                      Ответить
                      • Не лучше ли написать хуйню абы как с костылями без тестов, но которая принесёт баблишки?
                        Ответить
                        • лучше
                          но шансы на баблишки призрачны, а без баблишек лучше всё таки качать скиллы
                          Ответить
                          • Ну игруху на Юнити и в Гугл плей.
                            Ответить
                            • ... каждую неделю. Тогда вполне реально заработать.
                              Ответить
                            • и продавать ее за $0.99
                              и там еще 9500 таких же игрух такими же питузами написано, может наберешь себе на жвачку, не?
                              Ответить
                            • Если отобьёшь хотя бы половину от тех двадцати пяти долларов, которые «Гугл» требует за регистрацию — считай, повезло.

                              Ну или по игрухе каждую неделю, ага.
                              Ответить
                              • > двадцати пяти долларов, которые «Гугл» требует за регистрацию

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

                          Тут два стула: либо ты делаешь стартап и получаешь баблишки (хотя вероятность успешного запуска стартапа тоже не очень-то и велика), либо пишешь просто для развлечения/обучения и ничего не получаешь.
                          Первый стул от второго отличается тем, что разработка стартапа — это не программирование, а бизнес. Без понимания ЦА, без внятной модели монетизации, без привлечения инвестиций стартап обречён либо просто сгнить, либо сгнить, утащив за собой финансовое и, в тяжёлых случаях, физическое благополучение незадачливого стартапера. Нахуй оно надо?
                          Ответить
                          • а как же линукс?
                            Ответить
                            • чтобы написать линукс, нужно быть Торвальдсом

                              я реально оцениваю свои возможности)

                              мне не для бабла в любом случае
                              Ответить
                            • Линус один, а нас миллионы (мух).
                              Ответить
                              • И то он взлетел потому что чуваки из GNU рядом подвернулись, которым как раз ядра не хватало. Без всего этого обвеса так и остался бы игрушкой.
                                Ответить
                                • без всего этого обвеса он бы и не запустился.. или спиздил бы юзерленд из миникса.

                                  А ядра не было у гнушников, потому что им Таннебаумы лапши на уши навешали про микроядра, и послали их в бесконечное путешествие.

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

                                    это ещё ценный мех git
                                    Ответить
                                  • > или спиздил бы юзерленд из миникса.

                                    Или из BSD
                                    Ответить
                                    • бздя вроде тогда еще на писи не была портирована, но было бы конечно круто: меня подбешивают различия бзд и гну тулов иногда
                                      Ответить
                                • Угу.
                                  Более подходящим примером может быть Нотч, который выроллил 10d20 на 200, удачно попав своим поделием в самое начало популярности жанра. Но, опять же, Нотч один, а индюшатников, засирающих «Стим» своими играми (которые, в массе своей, даже на пет-проект не тянут) в надежде «выстрелить», — десятки, а то и сотни, тысяч.
                                  Ответить
                                  • При этом Нотч подглядел Майнкрафт у Зактроникса
                                    Ответить
                                    • Ну не факт, кстати. «Майнкрафт» начинался как вполне себе generic 3D-поделка, и только потом оброс «мехом». Просто он очень удачно попал в идеальное время, когда у среднестатистических компьютеров стало хватать мощностей на игры-песочницы, среди пользователей ПК разрослась обширная аудитория для них (no offence, еслишо), а самих подобных игр ещё не было.
                                      Ответить
                                      • https://indiegamesplus.com/2009/05/browser_game_pick_minecraft_ma

                                        Markus Persson’s Minecraft is a block-based sandbox building game originally inspired by Infiniminer, but one that requires no installation of any software to play.
                                        Ответить
                                  • > засирающих стим
                                    > на пет-проект не тянут

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

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

      Няшная, кэмл, питон, асм? Машинные коды?
      Ответить
      • >питушить
        что?
        Ответить
        • Разрабатывать.
          Ответить
          • На няшной, наверное. И попытался бы стать фронтом для llvm. И бизона бы наверное взял для парсинга для начала, хз
            Ответить
            • Я б под питушарский llvm точно бы не затачивался, ибо это сраное говно, заточенное под традиционную питушню в обычных императивных говноархитектурах.

              Я б синтаксис на S-выражениях с гомоиконами сделал бы, а семантику формально описал бы сначала на языке X (где в роли X мог бы быть какой-нибудь Coq, Idris или еще какая-нибудь хуйня для формальной верификации), потом бы свой язык так расширил, чтобы формальную спецификацию его самого можно было б на нем же и описать, а потом бы формально доказал соответствие формальной спецификации описания на языке X той формальной спецификации, которая описана в нем самом. Дальше я б на этом разрабатывал бы управляющие программы для АЭС с полностью доказанной корректностью и соответствием формальной спецификации, отсутствие race condition, deadlock и прочего, и чтоб там обязательно была суперкомпиляция
              Ответить
              • Почему зелёным? Норм же идея.
                Ответить
                • Потому что дохуя сложно, и я этого никогда не сделаю
                  Ответить
                • Есть кстати такая вот херня https://github.com/StanfordPL/stoke которая эвристическим перебором инструкций x86-64 пытается найти самую оптимальную. Это так называемый супероптимизатор (не путат с суперкомпилятором). И вот они там сделали формальную спецификацию x86-64 инструкций:

                  > In addition to searching over programs, STOKE contains verification infrastructure to show the equivalence between x86-64 programs. STOKE can consider test-cases, perform bounded verification all the way to fully formal verification that shows the equivalence for all possible inputs.
                  Ответить
                  • >пытается найти самую оптимальную.
                    на данной конкрнтеной модели процессора?
                    Ответить
                    • На данном конкретном процессоре с данным набором инструкций, да. Оно там как-то переписывает инструкции, потом проверяет чтоб поведение было таким же, и потом сравнивает скорость.
                      Ответить
                      • можно "настраивать" это под конкретный CPU.

                        Например, распостраняешь промежуточный код, а перед первым запуском делает Ahead-of-Time Compilation под конкретный CPU после серии тестов
                        Ответить
              • ой, а сделай пожалуйста, а?

                Я с радостью выкину на помойку все анскильное говно мейнстримное, и перейду на нормальный язык с "полностью доказанной корректностью".
                Ответить
                • Давайте лучше пусть CHayT попробует. Я как-то попробовал потыкаться в этот Coq и неосилил всю эту типопитушню.

                  Какие-то свои идеи по поводу такого языка я тут https://www.linux.org.ru/forum/development/15475716 излагал
                  Ответить
                  • >Надо значит цеплять какие-то условия к данным (массивам, переменным) т.е. отслеживать их историю эволюции, выводить на основе этого некие свойства.

                    но при этом раст тебе не нравится, да?


                    Кстати!
                    А я бы вот в нашей ссаной джавке хотел бы такую систему эффектов:

                    помечаешь функцию "@IO", и ее нельзя запускать из фукнции, помеченной как @UI (ну потому что нехуй тормохить UI тред) кроме как через специальный "шлюз", который ее в бекграунде запустит
                    Ответить
                    • > раст тебе не нравится

                      В расте просто популярные частные случаи порешали. А дальше ехал unsafe через unchecked.
                      Ответить
                    • В расте крайне ограниченная хуйня. Я вот вообще думаю, что надо сделать язык чтоб на нем доказывать невозможность осуществления тайминг-атак на криптоалгоритмы. Т.е. доказать, что на любых входных параметрах такой-то машинный код делает то-то и то-то и количество тактов всегда будет таким-то, независимо от.
                      Ответить
                      • > тактов

                        А как быть с обращениями к памяти?
                        Ответить
                        • во всех ветвях должно быть одинаково
                          Ответить
                          • Т.е. во всех ветках обращаемся к одним и тем же адресам после одного и того же количества тактов? Вроде норм.
                            Ответить
                        • нужно всё загрузить в кеш на стат памяти, чтобы обращение к любому нужному куску данных было всегда одинаковое;)
                          Ответить
                        • Ну значит надо учитывать и эти задержки. Если вся память известно как устроена, с известными задержками при обращении к ней, это тоже может быть учтено. Если какие-то кеши процессора, то там уже может жопа какая-то быть. Надо наверное везде добавлять задержку до такого-то фиксированного времени, чтоб время такого-то алгоритма даже с самыми хуевыми промахами кеша и ошибками в предсказателях переходов было такое же, как и время когда все складывается вообще идеально.
                          Ответить
                          • >Если вся память известно как устроена, с известными задержками
                            то есть нужно знать какие планки установлены, геометрию планок (сколько чипов, их глубину итд), работает ли двухканальность, сколько рангов, а для процессоров до Nehalem еще и версию чипстеа MCH, где контротллер памяти был?

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

                              Т.е. тут либо и это ещё моделировать. Либо сдаться и доказывать более жёсткое ограничение, что code flow тупо не зависит от данных вообще. Тогда пофиг на задержки.
                              Ответить
                  • Кстати, а можно же делать как null safety в котлине.

                    //псевдоязык
                    void foo(i:@(value > 1 && value <22)) {
                    }
                    
                    int i = getFoo();
                    goo(i);// не скомпилица
                    if (i > 1 && i <22) {
                    goo(i); //скломпилица
                    }


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

              А если по фану - х.з., хотелось бы с мышиных кодов. Но их сейчас вбивать некуда :(
              Ответить
              • тебе хочется именно всё на них написать, или хватит просто генерить их напрямую (вместо llvm?)

                вбивай в хекс редактор;)
                Ответить
                • > вбивай в хекс редактор;)

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

                      > транслятор ассемблера, конпелятор няшной, интерпретатор питона

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

                        может, тебе в gcc или llvm поконтрибутить? Будешь по ближе к маш кодам
                        Ответить
                    • > скосплеить ситуацию, когда у тебя есть только процессор

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

                          З.Ы. Можно ещё пару MMIO портов добавить для терминала.
                          Ответить
                          • я не очень в курсе апиаев kvm. Там можно поменять биос, и разместить код в FFFF:0000 (или откуда оно там стартует я забыл уже)?

                            >Можно ещё пару MMIO портов добавить для терминала.
                            терминал можно пока по com порту подключить: vbox так умеет, например эмулировать ком порт (со стороны хоста это немйдпайп на винде или tcp порт)
                            Ответить
                            • Там пустая машина по-умолчанию. Ты втыкаешь в неё произвольные блоки памяти, проц, настраивашь регистры, пинаешь run и течёшь до первого исключения. Собственно MMIO порты через это исключение в пару строчек пилятся.
                              Ответить
                              • то есть ты например пишешь в IP адрес 123, потом размераешь по этому адресу блок с машинным кодом, и всё заеблось?

                                Интересный конструктор. Лего дупло, как сказал бы Конардо
                                Ответить
                                • Да, примерно так. Причём можно сразу в 32 или 64 бита стартануть, если 16 не нравится.
                                  Ответить
                        • > программатор и чип

                          Ну программатор и старый комп у меня есть.

                          Но там всё сложно, ты не запустишь современную тачку с нуля. DRAM отключена, мосты разведены, даже до ком порта не добраться. И документации на это нет. Удачной отладки.
                          Ответить
                          • так это всё в биосе же написано. Высунь биос, сунь в программатор, считай его, почитай асм, и научись управлять платой
                            не?
                            Ответить
                            • Давай отправим этот коммент чувакам из core boot, а то они что-то ссут браться за недокументированные чипсеты.
                              Ответить
                              • Так небось нельзя по закону дизасемблить, не?

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

                                    А почему интел доки прячет - х.з. Для чипсетов пятилетней давности, имхо, могли бы и релизить. Вряд ли конкурентам такая древность интересна.
                                    Ответить
                                    • именно по этому я за PC-5150.
                                      У него вместо сраного непонятного чипсета были отдельные чипы: контроллер памяти, клавиатуры, прерываний, таймеры итд. И почти всё было документировано
                                      Ответить
                                      • Когда компания «IBM» впервые попыталась выпустить машины «PS/1» и «PS/2» с закрытой архитектурой, то соснула. От них только одноимённый разъём остался... В итоге первый компьютер на 80386 выпустили не они, а их конкуренты.

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

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

                                          Остальной софт глядит на всё это через APCI, запускает AML и всё
                                          Ответить
                                          • Противно, что всё это позволяет протащить «Intel ME» и прочее говно, которое трудно отключить.
                                            Ответить
                                          • > писателям биоса

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

                                              с абстрациями типа "dram с такой-то частотой"?
                                              ого
                                              Ответить
                                              • > бинарный

                                                Вай нот? Это же обычный PE файл. И интерфейсы там - обычные сишные структуры с указателями на функции.

                                                Что мешает выдать бинарный драйвер и хедер с его интерфейсом? По-моему ничего.
                                                Ответить
                                                • ну да, UEFI же.. я почему-то опять про биос думал

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

                                                    Дык... он опенсурсный, tianocore называется, можешь с гитхаба качнуть. Вроде сейчас вообще все прошивки на его основе запилены и отличаются просто процентом внесённых багов кастомизаций и собственных дров.
                                                    Ответить
                                                    • у меня American Megatrends сейчас, но комп мой старый
                                                      Ответить
                                                      • а я еще помню компы, где bios setup утилиты вовсе не было, и всё надо было ставить джамперами... ебать я олд(
                                                        Ответить
                                                      • > комп мой старый

                                                        Ну у тебя UEFI уже? На хабре была тула для разбора прошивки на PE файлы. Можешь покопаться если интересно.

                                                        Жопа в том, что "имена" на этой файлухе - GUID'ы. Так что понять что за драйвер перед тобой можно только по строчкам внутри.
                                                        Ответить
                                                        • да, уефи, ты хочешь сказать, что AMI использует tianocore?
                                                          Ответить
                                                          • Ядро вроде вообще все вендоры юзают. Надо сильно башкой поехать, чтобы его с нуля писать по спеке.
                                                            Ответить
                                                            • А что мешает тогда корбутовцам?

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

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

                      Кстати, нашёл в шкафу годный девайс для косплея: https://i.imgur.com/4aJ3nBJ.jpg

                      Можно через UART зацепить и течь.
                      Ответить
                      • STM32?

                        я в этом вообще не разбираюсь. Ты типа через уарт (спасибо, что не назвал его комом!) вливаешь прошивку во флешку, и он стартует с нее?

                        а как он io с внешним миром осущестляет? тоже через уарт, или через вот эти вот буковки A можно биты выствлять?
                        Ответить
                        • Да, stm'ка.

                          Там вон джамперы слева, ими можно выбрать загрузку с "bios". А он понимает простые команды типа read, write и go. Можно и прошить и просто с оперативки пускануть.

                          К сожалению команды двоичные вроде как (я не пробовал еще, обычно через правый разъем для дебаггера заливал).

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

                              Но асм там довольно простой, thumb 2 arm'овский.
                              Ответить
                        • С внешним миром у него дохрена всего - несколько уартов, spi, usb (только как девайс), просто gpio. Вот все те пины с буковками.
                          Ответить
                          • >usb
                            охуясе. Он же не хост, да? он девайс, который какой нить там тоже уарт поверх usb эмулирует?

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

                            Хотя у меня по какой-то причине живой интерес только к писюкам, а всякие другие компы мне не оень

                            ps: я наисал вопрос прежде, чем ты исправил пост) я просто охуел бы, если бы там реально ehci какой нить был, и ты бы его программировал

                            а spi и gpio вроде бы не сложно, как и урат
                            Ответить
                            • Только девайс, да. Но без эмуляций, реальные пакеты.

                              STM32F103C8
                              Ответить
                              • понятно, тоесть чего сам напрограмишь, такого он усб класса и будет

                                спасибо, почитаю потом
                                Ответить
                                • Так то у меня покруче платка есть, где уже и FPU и дисплей с тачскрином и усб хост и DRAM внешняя.

                                  Но эта более ламповая, имхо.
                                  Ответить
                                  • гг, так на такой плате небось и линукс можно, если там dram

                                    а тут как я по только флешка и sram
                                    Ответить
                                    • Ну не, для линукса там еще не хватает места. Да и MPU вместо MMU.

                                      У этой кстати тоже MPU, можно юзермод от ядра отделить.
                                      Ответить
                                      • а есть версия ядра без виртуальной памяти, кстати) ну или была когда-то.
                                        μClinux

                                        >mpu
                                        почему-то вспомнилось midi)

                                        но вообще это же как сегменты в 286: пермишены есть, а страниц нету
                                        Ответить
                                • > чего сам напрограммишь

                                  Ну да, я из одной из них себе сделал uart переходник. Винда и линукс норм распознают.
                                  Ответить
                                  • масс сторадж еще можно сделать)

                                    в датащите написино, что там еще куча таймеров есть, и какой-то интерфейс can

                                    https://www.st.com/resource/en/datasheet/stm32f103c8.pdf

                                    я пока правда не знаю, как это можно в реале применить

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

                                      На 64 килобайта, ага.

                                      > какой-то can

                                      Бортовая сеть машин, к примеру.

                                      В реале у меня одна из таких штук бибикает когда проветривать пора (по уровню СО2).
                                      Ответить
                                      • а что за девайс меряет CO2 и по какому интерфейсу подключен?

                                        а для бибиканья у тебя как раз таймер и спикер?

                                        >бортовая

                                        уже читнул

                                        A Controller Area Network (CAN bus) is a robust vehicle bus standard designed to allow microcontrollers and devices to communicate with each other's applications without a host computer.


                                        у вас там целый мир свой коечно
                                        Ответить
                                        • Да, таймер в режиме PWM и спикер.

                                          Для СО2 какая-то китайская хреновина MH Z18.
                                          Ответить
                                          • я так спикером пищал на писи, да)

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

                                              Там можно и музыку через dma играть, лол. Это тебе не pc.
                                              Ответить
                                              • не понял: как можно играть музыку через dma?

                                                в писи ты загружал pcm в память, и дальше зуковушка через DMA это читала и игрла (точнее говоря DMA пхал в звуковушку данные) пока проц отдыхал. Ведь было же так?

                                                А тут тебе нужен вшений DAC PCM получаютеся? или ты сам его напишешь? а если сам, то дакить он будет на проце, и к чему тогда dma?
                                                Ответить
                                                • Ну да, либо внешний DAC, а DMA в его порт срёт байтами каждый тик таймера.

                                                  Либо PWM, а DMA закидывает байтики в его threshold (не пробовал, но вроде так можно).

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

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

                                                    а DMA могло накидывать говна в железку только тогда, когда железка говоррила "я вся пустая уже".

                                                    Вроде, для этого был нужен канал DMA, и он железке сообщался.

                                                    Так было в ISA, а уже начиная с PCI железка вроде сама в память ходит за нужными данными.

                                                    А на PWM кажется что музыку хорошо не сыграть, разве что тему из компьютерной игры 80-х)
                                                    Ответить
                                                    • Ну здесь примерно так же - настраиваешь канал (что куда копировать и какими порциями), роутишь запрос с железки (таймера, АЦП, UART и т.п.) на этот канал. И дальше оно само. В конце или середине буфера дёрнет прерывание если надо.

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

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

                я в мечтах уже восемь проектов написал, четыре языка новых выучил, и десять книг прочитал толстенных
                Ответить
    • Notice: Undefined offset: 0 in /home/g/guestinho/govnokod.xyz/public_html/wp-includes/class-wp-query.php on line 3144
      Ответить
      • > line 3144!

        Вот это модульность!
        Ответить
        • можно сделать сколь угодно много строк, если твой файл состоит из
          if ( '' != $qv['feed'] ) {
          			$this->is_feed = true;
          		}
          
          		if ( '' != $qv['embed'] ) {
          			$this->is_embed = true;
          		}
          
          		if ( '' != $qv['tb'] ) {
          			$this->is_trackback = true;
          		}
          / If we're previewing inside the write screen.
          		if ( '' != $qv['preview'] ) {
          			$this->is_preview = true;
          		}
          
          		if ( is_admin() ) {
          			$this->is_admin = true;
          		}

          https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-query.php


          > '' != $qv['embed']
          какой хакер;)
          Ответить
        • Я так же пишу. Модульный код - для тупых долбоёбов, которые психологически так и не вышли из возраста конструкторов "Lego Duplo". Вся модульность, которой придерживаюсь я - один скрипт на страницу. Все вспомогательные функции и обёртки хранятся в одном файле.
          Ответить
          • ротоеб, а у тебя есть гитхаб? Покажи свой код?
            Ответить
            • Местным маргиналам не понравится.
              Ответить
              • ну а всё таки
                Ответить
                • Свой покажи. Здесь много рассуждают, кукарекают, но никто свой код так и не показал.
                  Я когда-то давно уже выкладывал код основного файла рулетки.
                  Ответить
                  • Я не понимаю, ты стесняешься что-ли?

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

                      Идите в тиндер со своими брачными играми.
                      Ответить
                      • не надо ему идеи подсказывать, он же реально может дикпик вместо кода
                        Ответить
                    • Сейчас вычищу и покажу. Хотя местных долбоёбов это не вылечит.
                      Ответить
            • > покажи свой код

              Ты случайно съел что-то не то и хочешь исправить эту ситуацию?
              Ответить
            • у него сто процентов есть sourceforge
              Ответить
              • Это где надо угадать какой из девяти баннеров скачивает нужное тебе говно со скоростью 200Кб/с, а какой скачивает свежий адварь?

                питухи, кто помнит freshmeat? а rpmforge?
                Ответить
            • Код одного из разделов панели администрирования "Telegram"-бота с викторинами:

              https://pastebin.com/Z51aExET
              Ответить
              • Спасибо.
                Как и обещал: https://govnokod.ru/26591 это реальный код
                Ответить
                • >"Kotlin"

                  Неудивительно. Любой код на этом языке будет говном.
                  Ответить
    • Ламерский вопрос

      У меня есть в БД non null поле.
      Я по каким-то причинам делаю insert без этого поля и потом update записи с этим полем.

      Если я делаю обе операции в рамках одной транзакции, то БД меня должна послать или это будет норм?
      Ответить
      • >Я по каким-то причинам делаю insert без этого поля
        так упадет же, если оно non null и без автовставки типа автоинкремента
        Ответить
      • Транзакция транзакцией, но каждая операция проверяется отдельно.

        Т.е. тут либо надеяться, что ORM смёржит операции. Либо самому сразу заполнять как положено.
        Ответить
        • Спасибо.

          А если, например, более сложный пример.

          Есть A и B, у которых есть отношение 1-to-1 и у A ключ для этого отношения non null.
          Еще между A и B есть отношение 1-to-many.

          Я создаю A, потом создаю B (такая логика), добавляю B в A на оба отношения и пытаюсь это дело записать в базу. ORM меня посылает по причине "Unable to save changes because a circular dependency was detected in the data to be saved"

          как это решить идиоматично без перехода на nullable?
          Ответить
          • у тебя не может быть взаимного FK not null, с одной стороны обязательно должен быть nullable
            + т.к. у тебя EF (а у тебя скорее всего именно он), то он ебанется при попытке удаления "каскадом", поэтому тебе придется сначала руками установить null в ту связь, которая nullable, сохранить, а потом уже удалять сущность, которая за собой и вторую вытерет
            Ответить
            • а если у меня в 1-to-1 on delete restrict?

              (мне его достаточно по идее, если в 1-to-many on delete cascade)
              Ответить
              • насколько я помню, EF вообще дико поебать на он делит в субд, он всё исполнит сам, сделает закат солнца руками

                так что это сахарок для операций админа базы в консоли (или для сикель скриптов миграции)
                Ответить
                • https://docs.microsoft.com/en-us/ef/core/saving/cascade-delete

                  хз, вроде что-то делает

                  спасибо. если я правильно понял, когда я хочу гарантировать, например, что у поста в блоге всегда есть актуальная ревизия, я всё равно ключ помечаю как nullable и все гарантии проделываю в логике (то есть не проёбываю его записать)
                  Ответить
                  • поцчему вы не хотите сделать колонку "is_actual" у ревизий, и ссылаться ими на пост?

                    Или почему вообще не считать актуальной самую последнюю по дате публикации?

                    Денормализация ведет к нарушению консистентности, ко!

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

                      Попробуй его написать на досуге.
                      Ответить
                      • если есть Window Functions, то очень даже приятный
                        А они есть в постгре и ms-sql
                        Ответить
                        • в смысле приятный
                          это лишний index scan + sort
                          если тебе писать один раз, а читать 100, то вывод очевиден - внесите денормализацию
                          Ответить
                          • в смысле, что он элементарно пишется. А без Window functiuons он не пишется никак. *

                            >если тебе писать один раз, а читать 100
                            Тогда нужно начинать с условий задачи же)

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

                            Но мне кажется, что изначально нужно начинать с нормализации, и только если всё плохо, то тогда уже денормализовать


                            *за что я регулярно стебал мускулеблядей, но кажется они уже завезли их себе, лет через 15 после того, как я начал их стебать, увидав это в ms-sql
                            Ответить
                            • > нужно начинать с нормализации, и только если всё плохо, то тогда уже денормализовать
                              именно так, но некоторые кейсы видны уже сразу

                              > А без Window functiuons он не пишется никак.
                              латерал джойн и лимит 1 (кстати рекомендую в постгресе именно это, будет быстрее)
                              Ответить
                              • это чтоб из подзапроса ссылаться на родительские колонки?
                                круто, так тоже можно, да. Но писать и понимать его сложнее всё таки
                                Ответить
                    • смысл в том, чтобы попытаться гарантировать констрейнтами в бд, что у каждого поста всегда есть одна актуальная ревизия

                      это можно сделать для твоего варианта?
                      Ответить
                      • как минимум одна?

                        Ну нужно сделать видимо такой констреинт, вот руками его написать, и проверять отложенно (если субд позволяет)

                        так выедь нул тебе такой гарантии не даст
                        не?
                        Ответить
                        • нет, актуальная одна

                          есть 1-to-many для всех
                          и 1-to-1 для актуальной

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

                            А в твоем варианте у тебя не будет гарантии тоже, зато будет денормализация и потенциальная неконсистентнгость
                            Ответить
                        • а, или типа при наличии 1-to-many мы можем смотреть актуальную по твоему ключу?

                          ну да

                          но 1-to-many не гарантирует, что с другой стороны непустое множество же?
                          Ответить
                        • > так выедь нул тебе такой гарантии не даст

                          - правильно. но с не-нул похоже не получается вообще :)
                          Ответить
                          • можно вот так
                            https://govnokod.xyz/_26964/#comment-561839
                            Ответить
                            • а насколько говёно сделать так

                              перед созданием поста нагенерить айдишник ревизии

                              сохранить его при инсерте поста как айдишник актуальной

                              потом инсертнуть саму ревизию с этим айдишником

                              обернуть всё в транзакцию, например
                              Ответить
                              • можно и так, только проверку форин ключей надо отложить
                                так у тебя не будет нула

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

                                    где гарантия, что ты ссылаешься на свою ревизию?
                                    нужен триггер
                                    Ответить
                                    • покажи пример подобного триггера, пожалуйста
                                      Ответить
                                      • https://vladmihalcea.com/postgresql-trigger-consistency-check/

                                        чел написал FUNCTION , запустил ее
                                        AFTER INSERT OR UPDATE
                                        всё проверил
                                        и кинул exception, если что


                                        Database trigger functions are very useful when it comes to applying consistency rules that involve multiple tables, то есть ровно твой кейс же
                                        Ответить
                                        • спасибо

                                          но тут всё же функция просто проверяет некоторое условие и бросает исключение

                                          она не обновляет таблицы

                                          я пока не понял из вашего диалога с д++, насколько адекватно так делать
                                          Ответить
                                          • обновлять ты будешь сам, а функция будет следить за консистеностью. Если база сама следит за своей консистеностью, то это круто же.

                                            А в твоем варианте ты можешь случайно указать чужую ревизию как свою актуальнгую

                                            д++ заметил, что в EF может не быь деферд (но может быть ты можешь сообщить об этом субд сам, я не оч уверен)
                                            Ответить
                                • EF разве умеет в деферред?

                                  не всю целостность возможно выразить в субд, смиритесь
                                  1) insert A
                                  2) insert B (a_id = inserted a.id)
                                  3) update A set last_b_id = inserted b.id

                                  при удалении
                                  1) update A set last_b_id = null
                                  2) delete A (cascade to all B)
                                  Ответить
                                  • я вообще думал о том, как это выразить средствами постгри.. про EF я не думал(
                                    Ответить
                                • > только проверку форин ключей
                                  - кстати, а зачем

                                  у ревизии-то вообще один FK (айди поста) и он задаётся, когда мы добавляем её в общий список ревизий поста

                                  я получается тогда неправильно написал про 1-to-1 в случае с актуальной ревизией? это какой-то другой вид отношения?
                                  Ответить
                                  • Много ревизий (FK) <-> один пост (PK).
                                    Одна актуальная ревизия (PK) <-> один пост (FK).
                                    Ответить
                                  • почему неправильно
                                    "1" к 1 и есть А.some_b_id к B.id
                                    формально это многое к 1, но ты же не будешь записывать B.id в несколько разных А?
                                    (можно повесить дополнительно unique лол, кстати, в нем даже можно найти свой смысл, вот тогда это будет 1 к 1 без кавычек)
                                    Ответить
                              • во мне проснулся нонконформист

                                А зачем вообще посты хранить в субд? Почему не в git, например? Там есть и история, и ревизии, а? а?? а?!!
                                Ответить
                                • то есть мне всё остальное хранить в бд, а посты в гит?

                                  удобно
                                  Ответить
                                  • а почему нет? ты же статику в СУБД не хранишь
                                    Ответить
                                • > нонконформист

                                  Тогда всё проще - сделать репу на гитхабе и пулл-реквестами закидывать посты. Маркдауны он и так показывает. Код вообще писать не надо.
                                  Ответить
                                  • да

                                    и можно не заставлять никого регаться, а просто принимать патчи на говнокоде
                                    Ответить
                                  • Ну вот видишь!

                                    Друзья, снимите уже эти шоры с глаз! Не нужно хранить в СУБД просто потому, что "сайты обычно хранят чото в субд"
                                    Ответить
                      • ты всегда можешь это гарантировать констрейнтом unique
                        но курение ведёт к импотенции, а алкоголизм (привет, МАКАКА) к циррозу
                        вопрос лишь получаешь ли ты удовольствие и кто сдохнет раньше
                        Ответить
                        • я сначала не понял, что ты про unique (a_id, is_last)

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

              Если у A есть указатель на B, то я могу найти все A, которые указывают на нужную мне B по индексу обычно, у ключей же бывают индексы
              Ответить
              • Когда у тебя денормализация вида last_b_id в таблице А и B.a_id в таблице B
                Ответить
                • А нельзя сделать булевую колонку "is_last" в B? И констреинт на нее, дескать из всех B-->A один должен быть LAST
                  Ответить
                  • я там выше написал, что можно
                    делается unique (a_id, is_last), но требуется для всех непоследних делать is_last null, а то не получится магии

                    при этом, замечу, бд НЕ прогарантирует существование (a_id, is_last) = (<your>, true)
                    Ответить
                    • и когда у тебя ебучий постгрес, всегда надо иметь в виду, что банальный update предыдущего последнего на is_last = null - и вот ты получил в таблице старую строку под вакуум
                      т.е. таблица всегда будет дырявая (живи теперь с этим)

                      она будет также дырявая, когда ты будешь делать update родительской таблицы, чтобы перезадать там last_b_id, но там, скорее всего, это будет не единственное поле, которое придется обновить, так что ну и ладно
                      Ответить
                    • гарантии не будет (если не завести ее триггером, лол), но и в вашем варианте же тоже не будет гарантии
                      Ответить
                      • предлагаешь триггером переапдейчивать предыдущую ревизию как актуальную, а при удалении единственной актуальной запрещать это делать (тогда ты не порвёшь цикличную связь, и вообще всё дико лагать начнет, не надо так делать)
                        Ответить
                        • предлагаю проверять, что:
                          * у поста есть актуальная ревизия
                          * она ссылается на его ревизию, а не на чужую

                          в случае ошибки кидать исключение


                          Удалять ревизии не надо никогда! Это тоже надо запретить!
                          Ответить
                          • почему бы это не делать в бекенде? бекенд вражина пишет? зачем лишняя работа на стороне субд

                            триггеры нужны лишь в одном случае - чтобы бекенд не знал о магии (потому что не смог или потому что ему не нужно вообще совать туда нос)

                            а мы обсуждаем не магию, а нормальную, ИЗВЕСТНУЮ беку технологию, на которую этот пидор будет опираться в своих орм-селектах, и ещё как!
                            Ответить
                            • Я же не знаю юзкейса, вдруг он туда руками лазить будет?
                              Я в одном говнопроекте видел, как суппортеры лазили в базу руками, и у них были инструкции типа "поменять в пяти местах и не забыть" ровно потому, что БД не следила за своей консистенси

                              Есть такое поверье, что если в СУБД может быть неконсистеность, то рано или поздно она там будет.

                              Если мы вот на 100% уверены, что кроме как из него кода туда никогда никто не пойдет, то ладно: можно эту логику и на уровень выше поднять
                              Ответить
                              • просто написав триггер, ты заставляешь субд выполнять его
                                это не так и дешево
                                учитывая, что нормальный бекенд и так сделает эти проверки и не будет совать говно, ты просто на каждой модификации начинаешь тратить цпу (чтобы убедиться, что ну да, валидно)

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

                                кстати, не все ОРМы любят когда СУБД самомодифицируется - им надо помечать такие колонки как генератед-бай-субд (чтобы они не рассчитывали, что в бекенде самая правильная инфа, а зачитывали при каждом инсерте, апдейте через returning - да сука даже не каждая ОРМ умеет в returning! привет, хибернейт)
                                Ответить
                                • Ход мыслей был таков: все решения нулом и с деферд денормализуют базу, и делают её потенциально неконсистентной.

                                  Я задумался: а как сделать так, что бы она была консистентной?
                                  И предложил триггер.

                                  Если мы гарантируем, что за консистеностью базы следит бек, то можно делать нулабл поле, и течь.

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

                                  Но я не настаиваю: у очень многих проектов база сама за собой не следит, и в нее ходят через спец уровень
                                  Ответить
                                  • Ну ORM тратит время бека, который хорошо параллелится. А триггер тратит время базы, которая параллелится хуёво. Да ещё и посреди транзакции. Как-то так же?
                                    Ответить
                                    • Десктопу будет полезно сделать триггер. А потом научить ЕФ не сломаться при использовании такой базы. На то он и пет проджект
                                      Ответить
                                    • Почему хуево?
                                      Добавление записи в базу не мешает в это время остальным читать из нее
                                      Ответить
                                      • > Почему хуево

                                        Потому что "я одна, а вас много".
                                        Ответить
                                        • а) ты о том, что нельзя сделать 20 инстансов субд? (можно, но сложно)

                                          Ну так сделай рид онли реплики, их можно много сделать, и читай оттуда.

                                          И вообще: ты уверен, что у Деска много беков?
                                          Ответить
                                  • а вот кстати начал писать триггер

                                    и понял, что не могу его сделать AFTER INSERT, потому что, когда я инсерчу "пост" в базу, то actualRevisionId у него ещё нет, а в триггере как раз проверяется, а не NULL ли у нас actualRevisionId

                                    а AFTER UPDATE кмк ломает саму идею использования триггера в данном случае (потому что а хрен его знает, когда этот апдейт прилетит)

                                    или?
                                    Ответить
                                    • тебе нужен триггер after insert на вставку новой ревизии, чтобы она сходила и обновила в родителе last_revision_id на себя

                                      вообще в целом калечная схема из "поста" и "ревизии", почему оно не в единой таблице?
                                      Ответить
                                      • >почему оно не в единой таблице?
                                        У тебя есть страничка с полями
                                        * название
                                        * автор
                                        * дата создания
                                        * урл

                                        и есть ее версии
                                        * 1
                                        * 2
                                        * 3
                                        Ответить
                                        • ну и? что такое версия? у неё же будет своя дата создания, свой контент?
                                          Ответить
                                          • а название и урл будут общими же

                                            и потом надо будет как-то найти все ревизии документа, откатиться там, не?
                                            Ответить
                                            • более разумным видится схема posts и archive_posts
                                              при обновлении "странички" или удалении - старая версия уходит из posts в архив

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

                                                но правда и деномарлизованней же: URL благополучно у всех прокопируется

                                                хотя может это и хорошо.. если его поменяют, то в истории он останется
                                                Ответить
                                                • в archive_posts можно хранить не все колонки из активного, если что
                                                  но не вижу ничего плохого хранить весь слепок
                                                  Ответить
                                                  • ну да, можно ссылаться на главный пост форин ключом, и все
                                                    Ответить
                                                    • а почему FK

                                                      это тогда придётся при обновлении поста лезть в архив и всем ключ апдейтить на новый?

                                                      не лучше ли назначить какой-то айдишник "серии постов" и сделать его частью PK?
                                                      Ответить
                                                      • >это тогда придётся при обновлении поста лезть в архив и всем ключ апдейтить на новый?

                                                        да
                                                        >не лучше ли назначить какой-то айдишник "серии постов" и сделать его частью PK?


                                                        у тебя же PK uuid? можно просто поле с индексом
                                                        Ответить
                                                        • >>это тогда придётся при обновлении поста лезть в архив и всем ключ апдейтить на новый?
                                                          > да
                                                          нет, нахуя
                                                          опять дырки в таблицах постгреса придумали
                                                          Ответить
                                                          • >нет, нахуя
                                                            чтобы быстро найти все версии. А как ты бы ты связал архивные посты с главным? уникальным id просто?

                                                            >опять дырки в таблицах постгреса придумали
                                                            у нас 1000 ревизий в минуту появляется?
                                                            Ответить
                                                            • чтобы быстро найти все версии не обязательно в старье хранить ссылку на "уникальный айди последней ревизии"
                                                              достаточно хранить "айди сука поста"

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

                                                                posts:
                                                                * uniq_post_id
                                                                * text

                                                                archive_posts
                                                                * uniq_post_id (FK)
                                                                * text

                                                                при добавлени нового мы просто
                                                                * копируем из posts в archive
                                                                * обновляем post

                                                                так?
                                                                Ответить
                                                                • posts:
                                                                  - id primary key,
                                                                  - revision_id not null unique default gen_random_uuid(),
                                                                  - bullshit

                                                                  archive:
                                                                  - revision_id primary key,
                                                                  - post_id not null references posts (id),
                                                                  - archived timestamptz,
                                                                  - lesser bullshit (can find actual bullshit by FK to posts)

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

                                                                  все что выше написано - так обычно делается АУДИТ для данных - чтобы хранить полное четкое состояние, кто зачем когда менял (юзер, сессия), чтобы при работе с архивным хранилищем всегда можно было восстановить состояние и родительских записей (а не смотреть на их состояние сейчас), а там и брекет валидности через GiST индекс, и партишионинг, и всякое такое
                                                                  Ответить
                                                                  • хм) А зачем revision_id в Posts?
                                                                    в posts же текущая актуальная версия, этакий current.
                                                                    И только в момент переноса в архив у нее появляется rev_id

                                                                    Кстати, получится копи-паст полей таблиц (bullshit и пр)
                                                                    Можно это решить наследованием таблиц в постгрес?
                                                                    Ответить
                                                                    • > А зачем revision_id в Posts?
                                                                      больше пользы, чем вреда

                                                                      как минимум клиенту, который попросил записать его изменения, сообщить "твоя ревизия вот такая, спасибо пожалуйста", а потом он селектит такой, а ему "знаем знаем, она в архиве уже"

                                                                      тебе не жалко места, надеюсь?

                                                                      > Можно это решить наследованием таблиц в постгрес?
                                                                      лучше не надо
                                                                      * чтобы селектить только из актуальных постов (а это 99% чтений имхо), придется писать select from only posts, врядли EF так умеет, и все заебутся
                                                                      * наследование, насколько я помню, хуево дружит с партиционированием

                                                                      ну и вообще, наследование это про base-type - derived-type (один из вариантов реализации), сова на глобус это всегда чревато
                                                                      Ответить
                                                                      • >тебе не жалко места, надеюсь?
                                                                        ну тут мы опять сталкиваемся с денормализацией и потенциальной неконсистентностью, которую можно решить триггером

                                                                        Перфецкционист внутри меня не доволен)


                                                                        я еблан, сори. Это новая ревизия же, а не ссылка на архив

                                                                        Тогда ты прав

                                                                        >лучше не надо
                                                                        ну тогда нужно просто убедиться, что добавление bullshit2 в posts всегда приведет к добавлению его в archive. Но это не так страшно: всё таки поля добавляют редко, и это легко тестируется
                                                                        Ответить
                                                                        • Я могу завтра уточнить все ли хорошо с объектом, который я сегодня обновил? Могу получить то состояние, которое записывал?
                                                                          Где денормализация-то? Нет такого айди current, это не уникальные сведения о ревизии
                                                                          Ответить
                                                                          • Я протупил, посмотри на обновленную версию коммента plz

                                                                            Получилось заебок, действильено.

                                                                            сразу видно, что ты архитектор ))
                                                                            Ответить
                                                                        • > что добавление bullshit2 в posts всегда приведет к добавлению его в archive

                                                                          Ит депендс.
                                                                          Но да, я сейчас как раз и запиливаю поебень, которая примерно по этой схеме вообще 2 базы линкует - активную и архивную. Да так, чтобы бекенд не думал об этом, лол. Изменения в активной отражаются в архивной в виде аудита ревизий. Для всего.
                                                                          Ответить
                                                                          • >Изменения в активной отражаются в архивной в виде аудита ревизий.
                                                                            А в каком формате?

                                                                            Я однажды делал аудит, но я не парился, и сохранил там json просто. Это позволяло мне добавить поля, которых в аудите не было. Но конечно гуя для него я не имел, иначе мне пришлось бы учить гуй работать и с таблицей и с json.

                                                                            Типа
                                                                            User: pupkin
                                                                            IP 1.2.3.4
                                                                            Date:...
                                                                            Field: "text"
                                                                            oldValue: "foo"
                                                                            newValue "var"
                                                                            Ответить
                                                                            • Для любой таблицы active.foo есть архивная таблица archive.foo с не меньшим набором колонок.
                                                                              И там и там есть audit_info jsonb, в котором как раз куча всего лежит - номер ревизии, время создания, модификации, автор, сессия...

                                                                              Инсерт в active = инсерт в архив.
                                                                              Апдейт в active меняет ревизию = апдейт в архив даты окончания валидности старой ревизии + инсерт новой. Делит из активной = апдейт старой и инсерт финальной операции D.

                                                                              PK на активной = индексы на архивной.
                                                                              Архивная партишионируется (в тч хорошо сама хранит свой слепок активных).

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

                                                                              Основной геморрой в том, что это натурально два независимых инстанса, а не просто соседние таблицы.
                                                                              Ответить
                                                                              • понятно, круто) Но я вот подумал: а почему нету реляционной СУБД, которая сама версионировала бы данные?

                                                                                Пусть каждая транзакция это как ревизия в VCS.

                                                                                И я бы мог всегда посмотреть состояние базы для определенной ревизии.

                                                                                Или такие базы есть?

                                                                                в них из коробки была бы и истоия, и аудит (достаточно просто иметь поле "автор")
                                                                                Ответить
                                              • хм, такая идея даже не приходила мне в голову

                                                но это реально решает мою проблему
                                                Ответить
                                              • а какие best practices в таком случае?

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

                                                  ты добавил ревизию, и перед сохранением в одной транзакции она перенесла пост в архив, а активный апдейтунла, не?
                                                  Ответить
                                                  • я про то, как старые данные из бд перевести на новую схему

                                                    сорян, я иногда часть предложений только думаю в голове, но не озвучиваю)
                                                    Ответить
                                                    • А нельзя вот через
                                                      https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/operations
                                                      ?
                                                      Ответить
                                                      • скорее что-то такое
                                                        https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/managing?tabs=dotnet-core-cli#arbitrary-changes-via-raw-sql

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

                                                  а миграция приходит вместе с обновленным докер-образом базы
                                                  Ответить
                                      • > почему оно не в единой таблице?

                                        Типа дропнуть "пост" и просто иметь "ревизии", которые будут связаны неким ид?

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

                                      * генеришь ID ревизии
                                      * генеришь ID поста
                                      * вставляешь ревизию с указанием поста (пока не проверяются ключи бо деферд)
                                      * вставляешь пост с указанем на эту ревизию, тут триггер и проверяет, что это именно твоя ревизия в AFTER INSERT
                                      * коммитишь
                                      * проверяются внешние ключи

                                      А когда ты потом решишь переключить ревизию, то вызовится AFTER UPDATE, и проверит, что ты ставишь именно твою ревизию

                                      нельзя так?
                                      Ответить
                                      • ну на голом sql я бы так наверное и сделал, а с орм надо ковырять, выйдет или нет
                                        Ответить
                              • > руками лазить
                                > если в СУБД может быть неконсистеность, то рано или поздно она там будет

                                За примером далеко ходить не надо...
                                Ответить
              • Блин, ди первый успел :(
                Ответить
      • У меня не так прокачаны софт скилы, так что я твой вопрос не сразу понял.

        База всегда должна соответствовать констреинтам в рамках одной транзакции.
        Не может быть такого, что в нуллабл поле нул.
        Ответить
      • неламерский ответ
        констрейнты бывают deferrable - т.е. их проверка происходит не per pow, а per statement или даже per transaction commit

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

        так вот, в постгресе, например, not null это констрейнт, который нельзя сделать deferrable (а форин кей можно)

        но, возможно, в твоей СУБД можно

        а ещё в твоей ситуации логично сделать вывод, что ты бы хотел default значение своей not null колонке или триггер написать, ну или не инсертить в неё нулл
        Ответить
        • про deferrable круто, спасибо
          Ответить
        • > deferrable

          Да, собеседование по базам я не пройду :(
          Ответить
          • Ну и похуй. А зачем тебе?
            Ответить
          • ну это вещь со звёздочкой)
            где ещё как не на ГК сеять знания об этом
            Ответить
          • могу тебе сказать, что среднестатичесский питух на галерах если знает чем INNER отличается от OUTER джойна, то он уже эксперт по субд. Так что не парься
            Ответить
            • > чем INNER отличается от OUTER джойна

              Я тоже всё через запятую и условия в where ебашил. Пока вдруг не попалась таблица с null'ом. В этот момент я задумался: "а может как-то можно и цикл в коде не писать и строчки с нуллами не проёбывать?" И прочитал про джойны.
              Ответить
              • так ты небось для работы субдой не занимался?

                >Эйлера
                вечно путаю его с венна
                Ответить
                • как говорится,

                  это надо было в институте запомнить
                  Ответить
                  • ты давно ВУЗ окончил?
                    Ответить
                  • кстати именно вуз годовым курсом по бд многому научил

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

                      У нас был MS Access и препод, который говорил «Нахера мне ваши лабы в электронном виде, я не собираюсь портить глаза»
                      Ответить
                      • надо было идти в немецкое пту
                        а то наготовили ма-те-ма-ти-ков на свою голову
                        хорошо что я ин-жы-нер
                        Ответить
                        • > в немецкое пту
                          Да там тоже хъуево учат. Питон последний-то на XP так и не научили ставить
                          Ответить
                          • разве за это заплатят деньги? в немецком пту учат только тому, за что
                            Ответить
                            • И вообще "ставить" - это задача админа, а не программиста.
                              Ответить
                            • Ну тогда вроде сошлись на том, что питона должен ставить админ.
                              Программист на питоне не обязан уметь устанавливать питон
                              Ответить
                      • MS Access кстати прекрасный тул. С его помощью можно легко и быстро делать десктопные субд на одного. С формочками, поиском и отчетами. И вообще без программирования.

                        Хуй знает, что его ненавидят все
                        Ответить
                        • та наверное нормальный тул

                          но лучше б наверное сикулайт показывали хотя бы
                          Ответить
                • Ну эт курсовик был. Там же я открыл для себя SQL инъекции и кошерную передачу аргументов.

                  А по работе я базы почти не трогал. Так, мелкие скрипты, которые с готовой базой работали.
                  Ответить
    • var $day = array(
      		// English
      		'mon' => 1,
      		'monday' => 1,
      		'tue' => 2,
      		'tuesday' => 2,
      		'wed' => 3,
      		'wednesday' => 3,
      		'thu' => 4,
      		'thursday' => 4,
      		'fri' => 5,
      		'friday' => 5,
      		'sat' => 6,
      		'saturday' => 6,
      		'sun' => 7,
      		'sunday' => 7,
      		// Dutch
      		'maandag' => 1,
      		'dinsdag' => 2,
      		'woensdag' => 3,
      		'donderdag' => 4,
      		'vrijdag' => 5,
      		'zaterdag' => 6,
      		'zondag' => 7,
      		// French
      		'lundi' => 1,
      		'mardi' => 2,
      		'mercredi' => 3,
      		'jeudi' => 4,
      		'vendredi' => 5,
      		'samedi' => 6,
      		'dimanche' => 7,
      		// German
      		'montag' => 1,
      		'mo' => 1,
      		'dienstag' => 2,
      		'di' => 2,
      		'mittwoch' => 3,
      		'mi' => 3,
      		'donnerstag' => 4,
      		'do' => 4,
      		'freitag' => 5,
      		'fr' => 5,
      		'samstag' => 6,
      		'sa' => 6,
      		'sonnabend' => 6,
      		// AFAIK no short form for sonnabend
      		'so' => 7,
      		'sonntag' => 7,
      		// Italian
      		'lunedì' => 1,
      		'martedì' => 2,
      		'mercoledì' => 3,
      		'giovedì' => 4,
      		'venerdì' => 5,
      		'sabato' => 6,
      		'domenica' => 7,
      		// Spanish
      		'lunes' => 1,
      		'martes' => 2,
      		'miércoles' => 3,
      		'jueves' => 4,
      		'viernes' => 5,
      		'sábado' => 6,
      		'domingo' => 7,
      		// Finnish
      		'maanantai' => 1,
      		'tiistai' => 2,
      		'keskiviikko' => 3,
      		'torstai' => 4,
      		'perjantai' => 5,
      		'lauantai' => 6,
      		'sunnuntai' => 7,
      		// Hungarian
      		'hétfő' => 1,
      		'kedd' => 2,
      		'szerda' => 3,
      		'csütörtok' => 4,
      		'péntek' => 5,
      		'szombat' => 6,
      		'vasárnap' => 7,
      	// ....
      		'Пн.' => 1,
      		'Вт.' => 2,
      		'Ср.' => 3,
      		'Чт.' => 4,
      		'Пт.' => 5,
      		'Сб.' => 6,
      		'Вс.' => 7,
      	);

      https://github.com/WordPress/WordPress/blob/master/wp-includes/SimplePie/Parse/Date.php
      Ответить
      • Это сгенерено, я надеюсь? Там ведь и обратное будет?
        Ответить
        • хуй знает, я не вижу изменений source --> generated code
          я вижу только 1 файл в коммите

          https://github.com/simplepie/simplepie/pull/632/commits/e8bb2db0038af18e8b2b056815b75dd5b179cec1
          Ответить
          • if (false !== stripos($data, "HTTP/1.0 200 Connection established\r\n\r\n")) {
            			$data = str_ireplace("HTTP/1.0 200 Connection established\r\n\r\n", '', $data);
            		}
            		if (false !== stripos($data, "HTTP/1.1 200 Connection established\r\n\r\n")) {
            			$data = str_ireplace("HTTP/1.1 200 Connection established\r\n\r\n", '', $data);
            		}

            много вкусногово
            https://github.com/WordPress/WordPress/blob/master/wp-includes/SimplePie/HTTP/Parser.php
            Ответить
            • Найди 10 отличий.
              Ответить
            • public static function output_javascript()
              	{
              		if (function_exists('ob_gzhandler'))
              		{
              			ob_start('ob_gzhandler');
              		}
              		header('Content-type: text/javascript; charset: UTF-8');
              		header('Cache-Control: must-revalidate');
              		header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
              		?>
              function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
              	if (placeholder != '') {
              		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
              	}
              	else {
              		document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
              	}
              }
              //
              		<?php
              	}
              Ответить
              • Требуется программист на PHP/HTTP/HTML/CSS.

                В этой функции только JS и SQL не хватает.
                Ответить
              • Ещё и для работы требуется плагин «Квиктайм»... Для видео что ли, потому что HTML5-видео — харам? А сейчас веб-браузеры друг за другом начинают отказываться от NPAPI, поэтому для просмотра такого контента придётся искать старый браузер...
                Ответить
                • сейчас начинают?
                  чувак, покупай биткойны, к 2018 году подорожают очень!
                  Ответить
                  • (у него vista)
                    Ответить
                  • В браузерах на движке «Goanna» (форк «Gecko») NPAPI до сих пор работает.
                    Ответить
                  • а на заработанные в 2019 купи пару заводов по производству медицинских масок
                    не спрашивай зачем, просто надо
                    Ответить
                    • --чтобы ты поменял, вернувшись в 2010-й?
                      --рубли на доллары
                      Ответить
                    • А на заработанные в 2020 что купить?
                      Ответить
                      • Винтвку покупай, и бункер
                        Зима не будет
                        https://www.youtube.com/watch?v=aSCDhc7s5cY
                        Ответить
                      • забронируй место на кладбоне
                        их на самом деле мало
                        Ответить
      • По-венгерски интересно: среда = серда, четверг = чутёрток, пятница = пентек, суббота = сомбат. Вероятно, влияние соседей.
        Ответить
        • Да, балканские славяне повлияли на них чутка, и на румынов тож

          У венгров вроде есть пласт лексики тюркский (от их совместной хотьбы сквозь великую степь), часть исконно фино-угорский их родной, и часть славянский как раз от южных братушек
          Ответить
          • В таблице ещё можно заметить, что у немцев два обозначения субботы: Sonnabend и Samstag.

            В школе в качестве иностранного я изучал немецкий, и нам рассказывали только про Sonnabend. Вариант Samstag я узнал намного позже.

            А вот теперь прочитал, что вариант Sonnabend употреблялся преимущественно в ГДР. Поскольку наши учебники писали те же люди, которые писали советские учебники, а те учебники были ориентированы на изучение ГДР (как члена Организации Варшавского Договора), то вполне ожидаемо, что в них был гэдээровский вариант.

            Samstag произошло от еврейского «шаббат» (от которого произошла и наша «суббота»). А вот Sonnabend — это «солнечный вечер» — отсылка к Sonntag — «солнечный день» — немецкому названию воскресенья. Т. е. Sonnabend — это как бы вечер перед воскресеньем. Придумали его, чтобы заменить ветхозаветный термин, причём чуть ли не в восьмом веке, когда вовсю шло крещение Европы.
            Ответить
            • омг

              в разных частях германии на одном и том же хохсдойче по разному называется суббота?
              ну что за язык!

              Мало им того, что в каждой почти федеральной земле есть свой диалект
              Ответить
              • Забавно, что сокращение (в календариках, на электронных часах и т. п.) от «Samstag» и от «Sonnabend» пишется одинаково: «sa».
                Ответить
    • Такой вопрос, питухи.
      Нужно получить загранпаспорт, для этого требуется военный билет (при наличии), или справка с военкомата (важно, что они её запрашивают сами, и не нужно физически приходить в военкомат).

      Ещё нужно указать места учебы и работы за последние 10 лет. Нахуй это надо? Может, лучше ничего не указывать? Типа вуз окончил, теперь безработный (математики никому не нужны).
      Потому что есть такая хуйня, что военкомат имеет право отправить повестку через работодателя, а уклонение от подписанной повестки - уголовка. С другой стороны, они и так могут через налоговую получить инфу, если заинтересуются, но так то им это делать лень.
      Да и сам запрос справки может их стриггерить на что угодно, может там уже забыли про меня.
      Что думаете? Не хотелось бы в последний призыв залететь.
      Ответить
      • Уважительной причины нету что ли, просто повестки игноришь? Я бы год подождал тогда, раз последний.

        Места учебы и работы вроде чтобы проверить, что ты с секретной инфой не работал. Не то чтобы они сами не могли это сделать...
        Ответить
        • Я бы сказал полу-уважительная есть (не 100%-я).
          Раньше ходил по повесткам, последнюю проигнорил.
          Тут тема подвернулась, хотелось бы съездить.
          Ответить
          • дома сиди
            заразу всякую развозите только
            Ответить
            • Кстати:
              • 1 сентября — 4 729 заражений по России;
              • 21 сентября — 6 196 заражений по России.

              Опять вверх пошло. Апчхи!
              Ответить
            • Развёз тебе за щеку, проверь.
              Ответить
              • Заебал портить мне реноме
                я бы никогда так не сказал
                Ответить
            • > развозите

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

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

                Я не думаю, что там могут быть какие-то триггеры, тем более, если тебе скоро 27
                Ответить
              • кстати, а ты же бывший полуостровитянин, если я не путаю? у тебя никаких других паспортов не осталось?
                Ответить
                • Ты меня с кем-то путаешь.
                  Ответить
                  • могу вполне путать

                    вас тут дохуя слишком, и ники еще меняете. Всех и не упомнишь
                    Ответить
                    • Попрошу не путать, а то могут и напутать!
                      Ответить
                      • ого, ном зафорсился)

                        а про зайцыщу знаешь?
                        Ответить
                        • Давно же: https://govnokod.ru/26831#comment567875.

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

        а вот работодатель обязан в военкомат передавать сведения о своих работничках, но если не подает, то штраф 500 рублей
        я за 4 года ни разу не подавал
        Ответить
        • Как они узнают в какой именно военкомат нужно заносить? Я вот всё обещаю да обещаю работодателю какую-то хуйню из военкомата принести (уже не помню какую), никак не приношу, но все всё понимают, и всем похуй.
          Ответить
          • ладно, я давно знакомился с правовой базой
            штраф не 500р, а от 300р до 1000р, и да, вроде должны знакомить с повистками и направлять работников для постановки на учеты (а также вести журналы, сделать стенд с информацией о "кто в армии служил, тот в цирке не смеется" и т.д.)

            почитай https://kontur.ru/articles/5158
            затем уточни у своего работодателя, соблюдает ли он всё в полной мере

            > в какой именно
            по месту нахождения юр лица
            Ответить
            • >> Федеральный закон от 06.02.2019 № 8-ФЗ внес изменения в ст. 4 Закона 53-ФЗ, тем самым вменил работодателям новые обязанности. Все организации должны будут сами находить работников, которые должны состоять на воинском учете, но избегают военкоматов, и в двухнедельный срок сообщать о них в военные комиссариаты. Таким сотрудникам работодатель должен вручать направление в военный комиссариат для постановки на воинский учет. Ранее в обязанности входило только передавать повестки из военкомата.

              Какой багор )))
              Ответить
              • > Все организации должны будут сами находить работников, которые должны состоять на воинском учете, но избегают военкоматов
                Чобля? А как они это должны делать? Нанимать частных детективов, чтобы они следили за всеми работниками?
                Ответить
                • Я думаю если военкомат пришлёт соответствующую бумажку всё-таки. Просто формулировка хуёвая.
                  Ответить
              • Кстати, тут же помнится искали способ как избавиться от сотрудника, которого не получается уволить...
                Ответить
                • У хохлов с этим проще, у них для этого достаточно коллективного заявления от трех и более сотрудников.
                  Ответить
                  • В Украине погромисты по трудовому кодексу не работают
                    У тебя есть договор обо указании услуг, работодатель может его разорвать в одностороннем порядке и у тебя есть в среднем две недели чтобы пойти нахуй или написать в спортлото
                    Ответить
                    • Почему 2 недели? Звучит как день в день нахуй идёшь, или в арбитраж (вы же ИП все, а значит, отношения юрлиц)
                      Ответить
                      • флп это не юрлицо

                        фл - физлицо

                        в остальном верно, сколько дадут дорабатывать, зависит от конкретного работодателя
                        Ответить
                        • Если ты с физлицом в нашей стране заключил договор, то ты налоговый агент, минимум НДФЛ удерживаешь и перечисляешь (13%). А такой контрагент ещё и может заставить эти отношения признать трудовыми.

                          ИП же сам себе уже учёт ведет
                          Ответить
                          • > физлицом

                            Ну, по моему опыту, конторы вообще не горели желанием заключать договоры с физиками. Или делай ИП, если хочешь официально. Или по знакомству на словах с оплатой в конвертике.

                            Или сейчас что-то изменилось?
                            Ответить
                            • с физлицом - разовый договор, ГПД (гражданско-правовой договор)
                              это допустимо
                              если вторая сторона - юрлицо-резидент, то она автоматически налоговый агент, которая признает уплату в адрес физлица доходом физлица и удерживает сама, можно потом НДФЛ-2 взять при желании (или увидеть на сайте налоговой спустя 1.5 года, как дойдут и обработаются отчеты, которые и так каждый месяц/квартал уходят)
                              Ответить
                            • а никто и не горит
                              ГПД делают, когда это самый удобный вариант, чтобы получить за оговоренный срок результат работ, который по плечам одному человеку, но который сам при этом не ИП и не собирается

                              привлечь консультанта, например
                              Ответить
                        • Да вроде флп это юрлицо
                          Невозможность засудить работодателя в основном происходит из-за формы договора
                          По договору ты оказываешь услуги по тз и скидываешь акты по которым тебе платят
                          Формально работодатель просто перестает тебе выдавать тз и ты не можешь требовать за него оплату
                          Ответить
                          • Но и ты, получается, можешь его в любой момент кинуть, закрыв текущее ТЗ и не принимая следующие?
                            Ответить
                          • чувак, не гони

                            ты не знаешь, как расшифровывается ФОП?

                            найди мне там пожалуйста слово "юридический(-ое)"
                            Ответить
                            • ну формально ИП это тоже не юридическое лицо, это особый вид хозяйственной деятельности

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

                                  Короче если ты не ИП и никуда не устроен, но при этом где-то добываешь бабло. Причём боишься, что под радаром налоговой с этим баблом проскочить не удастся.

                                  Если я правильно понял, конечно.
                                  Ответить
                                  • насколько я помню, там как раз ограниченный перечень деятельности, типа нянечек для детей
                                    хз насчет фрилансеров

                                    впрочем, вот https://hh.ru/article/23928
                                    если кому-то интересно
                                    фрилансеры там, да
                                    Ответить
                                    • Х.з., возможно. Я просто эту новость почему-то в теме о фрилансерах слышал.
                                      Ответить
                      • Две недели это не для тебя сделано а для работодателя
                        Конкретный срок в контракте обычно
                        Ответить
              • Кстати, а ИП обязан сдать себя в военкомат?
                Ответить
      • Опять ветка в говно скатилась.
        Ответить
        • ты куда собрался ехать?
          Ответить
          • Тебе скажи, тоже захочешь.
            Ответить
            • ох едрид мадрид, ну не говори, тоже мне тайны мадридского двора

              и ник верни
              Ответить
              • От тебя совсем близко это место.
                Ответить
                • а что, в финку и страны балтии уже пускают:?
                  Ответить
                  • Конечно, всё может в любой момент поменяться и нахуй закрыться, а потом открыться. Но сделать паспорт не помешает, он на 10 лет.
                    Ответить
                    • Вопрос в том, почему тебе присралось это именно сейчас, а не через пол года или когда там ты сможешь сказать военкому "двадцать восемь мне уже, поцелуйте меня в жэ"?

                      А биометрический и правда делается на 10 лет

                      ps: ты может туда тян хочешь свозить? Так паспорт один хуй месяц делается или как-то так
                      Ответить
                      • Погоди, разве нужно 28 ждать, а не 27?

                        ps: мне стыдно, что я спиздил твой ник
                        Ответить
                      • С тян не связано.
                        Ответить
                        • Вернее связано, но не с той, о которой недавно писал.
                          Ответить
                          • хуясе ты донхуан. А как же твои принципы?
                            Ответить
                            • Всё нормально. Ничего не нарушается.
                              Ответить
                              • Нихуя не понял. Как всё сложно.
                                Именно по этому я против "PHP".
                                Ответить
                            • Донхузан
                              Ответить
                              • Кстати, о букве J.

                                Знаешь такую машину -- pajero ?
                                вбей вгугл транслейт это слово, а еще послушай, как оно произносится
                                Ответить
                                • С какого на какой переводить?
                                  Ответить
                                  • ну вставь его, он сам опознает испанский

                                    переводить на русский

                                    слушать испанское проиношение
                                    Ответить
                                    • Она же для испании под другим названием продаётся?
                                      Ответить
                                      • Конечно.*

                                        Точно так же как "досирак" переименовали для России

                                        * So Pajero became Montero (охотник) in Spain
                                        Ответить
                                    • Какой багор )))
                                      Ответить
                                • Испанцы читают это слово как «пахеро»? Ну и как это с испанского переводится?
                                  Ответить
                                  • Верно. Пахеро. А вбей его в гугл переводчик, и узнай
                                    Ответить
                                    • «Викисловарь» интереснее: он показывает варианты перевода и иногда объясняет, почему так.

                                      https://en.wiktionary.org/wiki/pajero

                                      Вообще-то нестрашное слово, но в некоторых латиноамериканских сленгах у него пошлое значение.
                                      Ответить
    • Кто знает на чем написан GitHub?
      Я вот идею одну имею чтобы реализовать и продать её Майкрософту.
      Это сделает Github сильно удобнее.
      Как думаете, сколько они заплатят?
      Ответить
      • За щеку заплатят
        Ответить
      • на руби на рельсах вроде
        Ответить
        • У них хитро: набор сервисов, написанных на разных языках, которые друг с другом обмениваются сообщениями. «Руби» там тоже есть, правда, я не уверен, что на «Рельсах». С «Твиттором» спутал.
          Ответить
          • Ну может быть и на микросервисах, значит язык не важен, важна среда обмена между ними.
            Ответить
        • Вот тут количество проектов на «Руби» зашкаливает, так что похоже на правду:
          https://github.com/github
          Ответить
          • def env_integer(env_var_name, default = nil)
                  ENV[env_var_name].try(:to_i) || default
                end

            какой парсинт)
            https://github.com/github/octobox/blob/master/lib/octobox/configurator.rb
            Ответить
            • А что неправильно?
              Переведите на PHP.
              Ответить
              • да не, все ок
                Ответить
                • А я знаю что неправильно.
                  Это статическая питушня которую нужно делать поверх динамической через try(:to_i), ведь может придти и не строка вовсе.
                  А еще тут писали что крестовики натыкаются на неудобства своего инструмента.
                  У крестобога в отличие от динамов таких проблем не бывает.
                  Ответить
                  • try там не потому что не строка, а потому что в строке не число, имхо.
                    Ответить
                    • ну да, так

                      to_i кинуло бы исключение, но try его завернул и вернул nil, ну а дальше ||

                      try получает укозатель на функцию как бы
                      Ответить
                      • Передал туда переменную PATH и получил 0. И пошло поехало, ищи свищи потом где ошибка.
                        Ответить
                        • зачем бы ты PATH передал в env_integer?
                          Ответить
                          • Незачем, но я думаю метод try для этого и задуман, чтобы проверять тип на ходу.
                            Такое поведение рано или поздно придется заложить в сложную систему, если не захочешь описать ручками все возможные варианты и по максимуму обобщить.
                            Ответить
                            • try придуман, что не пришлось ловить исключение кажется.

                              except that if the receiver does not respond to it the call returns nil rather than raising an exception.
                              https://www.rubydoc.info/docs/rails/4.1.7/Object:try

                              это чисто сахар, чтобы вместо rescue исключения и возврата default, сразу вернуть default
                              Ответить
                              • This method is defined to be able to write
                                @person.try(:name)

                                instead of
                                @person.name if @person

                                try calls can be chained:
                                @person.try(:spouse).try(:name)

                                instead of
                                @person.spouse.name if @person && @person.spouse


                                То есть примеры как бы намекают, у объекта может не оказаться этого метода, то бишь он может быть другого типа, а может и того, который нужен, просто ты в это поле не присвоил метод, если в рельсах можно делать это так же, как и в питухоне и JS.

                                REM: Вообще от модифицирующих себя программ отказались еще в 60-х70х. Усложняло отладку донельзя.
                                Ответить
                                • to_i есть у всех, но он может кинуть исключение, проверь
                                  Ответить
                                  • Так в том то и дело, что в try можно передать не только to_i.
                                    У меня не стоят рельсы и я на них никогда не писал.
                                    Ответить
                                    • верно
                                      \
                                      с точки зрения руби нету разницы: дернуть не существуюший метод, или дернуть метод, кидающий исключение

                                      и то и другое это просто исключение

                                      to_i есть у строки, но он может кинуть исключение
                                      Ответить
                                      • Да это старый как мир минус динамопитухов. Сама по себе динамическая тупизация не гарантирует что за нужным тебе идентификатором находится нужный тебе тип. Отсюда и все эти извороты с ручной проверкой типа.
                                        Ответить
                                        • Именно поэтому придумали «утиную типизацию».
                                          Ответить
                                          • Ну в питухоне она всё равно не универсальна, была. И всё равно в некоторых случаях пришлось бы вручную проверять методами-костылями.
                                            Сейчас вроде завезли возможность указать тип аргумента.
                                            Что там у рельсов, JS, PHP я хз.
                                            Ответить
                                            • >Сейчас вроде завезли возможность указать тип аргумента.

                                              на который всем плевать, кроме пары тулов для стат анализа и IDE)

                                              В рельсах (точнее в руби) до недавнего времени не было ничего, теперь начали что-то типа питоновского прикручиввать

                                              на JS просто надо не париться, и писать на TS: там всё есть.

                                              На пыхе вроде было какое-то половинчатое решение: что-то проверялось в рантайме, что-то нет...

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

                    ты считал строку из файла, и попытался скастить ее в число

                    если не получилось, то ты вернул default
                    Ответить
            • > interpreting leading characters in str as an integer

              Ахаха, и тут отсечения. Мир ебанулся.
              Ответить
              • так точно
                irb(main):001:0> "33 коровы".to_i
                => 33


                пистончик тут более верно себя ведет
                Ответить
                • #include <cstdio>
                  #include <cstdlib>
                  
                  int main()
                  {
                      printf("%d\n", atoi("42petuh"));
                      return EXIT_SUCCESS;
                  }
                  Ответить
                • Но это же неправильно! В строке может быть "33 тысячи", "33 000", "33 половины", "33,75". И вот это всё метод to_i приведёт к 33?
                  Ответить
    • Перекат!

      https://govnokod.ru/26966
      https://govnokod.xyz/_26966/
      Ответить
    • питухи никак не уймутся
      https://www.rosbalt.ru/russia/2020/09/21/1864383.html
      Ответить

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