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

    0

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

    #28: https://govnokod.ru/26372 https://govnokod.xyz/_26372
    #29: https://govnokod.ru/26385 https://govnokod.xyz/_26385
    #30: https://govnokod.ru/26413 https://govnokod.xyz/_26413
    #31: https://govnokod.ru/26423 https://govnokod.xyz/_26423
    #32: https://govnokod.ru/26440 https://govnokod.xyz/_26440
    #33: https://govnokod.ru/26449 https://govnokod.xyz/_26449
    #34: https://govnokod.ru/26456 https://govnokod.xyz/_26456
    #35: https://govnokod.ru/26463 https://govnokod.xyz/_26463
    #36: https://govnokod.ru/26508 https://govnokod.xyz/_26508
    #37: https://govnokod.ru/26524 https://govnokod.xyz/_26524
    #38: https://govnokod.ru/26539 https://govnokod.xyz/_26539
    #39: https://govnokod.ru/26556 https://govnokod.xyz/_26556
    #40: https://govnokod.ru/26568 https://govnokod.xyz/_26568
    #41: https://govnokod.ru/26589 https://govnokod.xyz/_26589
    #42: https://govnokod.ru/26600 https://govnokod.xyz/_26600
    #43: https://govnokod.ru/26604 https://govnokod.xyz/_26604
    #44: https://govnokod.ru/26627 https://govnokod.xyz/_26627
    #45: https://govnokod.ru/26635 https://govnokod.xyz/_26635
    #46: (vanished) https://govnokod.xyz/_26646
    #46: (vanished) https://govnokod.xyz/_26654
    #47: https://govnokod.ru/26671 https://govnokod.xyz/_26671
    #48: https://govnokod.ru/26707 https://govnokod.xyz/_26707
    #49: https://govnokod.ru/26750 https://govnokod.xyz/_26750
    #49: https://govnokod.ru/26776 https://govnokod.xyz/_26776
    #50: https://govnokod.ru/26804 https://govnokod.xyz/_26804
    #51: https://govnokod.ru/26809 https://govnokod.xyz/_26809
    #52: https://govnokod.ru/26817 https://govnokod.xyz/_26817
    #53: https://govnokod.ru/26833 https://govnokod.xyz/_26833
    #54: https://govnokod.ru/26840 https://govnokod.xyz/_26840
    #55: https://govnokod.ru/26844 https://govnokod.xyz/_26844

    Запостил: nepeKamHblu_nemyx, 14 Августа 2020

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

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

      Этот оффтоп сгенерирован автоматически.
      Индекс оффтопов: https://index.gcode.space/.
      Зеркала Говнокода и полезные ресурсы:
      * https://govnokod.xyz/
      * https://gcode.space/
      * @GovnokodBot в «Telegram»
      Ответить
      • Кстати, почему «preview channel» в «Телеграме» не работает?
        https://t.me/s/GovnokodBot редиректит на https://t.me/GovnokodBot

        Я не разбираюсь в этой питушне, поэтому и спрашиваю.
        Ответить
        • ЕМНИП, потому что «GovokodBot» — это не канал, а бот. Канал — это типа такая коньференция, где несколько питухов сидят и флудят, а бот — это специальный управляемый программой юзер, который шлёт тебе личные сообщения.
          Ответить
          • Канал - это когда пишет только автор.
            Чат - могут писать все.
            @GovnokodBot - личка с ботом
            Ответить
        • Можно сделать отдельный конал, куда сливать скриншоты говнокодов, текстом получится хуйня. Но это надо уметь их делать на "шаред хостинге".
          Ответить
          • Хрю!

            https://mini.s-shot.ru/1024x0/PNG/1024/Z100/?https%3A%2F%2Fgovnokod.ru%2F26862
            Ответить
            • Ко-ок!
              Ответить
            • Блядь, поработать сегодня хотел. Ладно, похуй.
              Ответить
            • https://mini.s-shot.ru/1024x0/PNG/1024/Z100/?http://govnokod.xyz/_26860

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

                Дальше указываешь формат (в реальном примере PNG).

                Дальше указываешь ширину на выходе, если хочешь масштабировать картинку. После Z указывается ещё один масштаб (масштаб шрифта в процентах?).

                Всё тут: https://www.s-shot.ru/

                Да, если после x указываешь ноль, картинка получается огромная. Ты можешь её сам порезать какой-нибудь графической библиотекой. Ну либо указать высоту явно (тогда будет видно только верхнюю часть страницы).
                Ответить
                • Я не на столько анскильный, что не смогу порезать картинку. Я про горизонтальный скролл говнокода.
                  Ответить
                  • С этим плохо. Ширину нужно указывать точно. Всё, что не влезло, обрежется прокрустовым ложем.
                    Ответить
                  • Ха, смог 4К выдать:
                    https://mini.s-shot.ru/4096x0/PNG/4096/Z100/?http://govnokod.xyz/_26860
                    Ответить
                  • Ещё немножко реальных примеров. Зожимаем шрифты до 50%:
                    https://mini.s-shot.ru/1024x0/PNG/1024/Z50/?http://govnokod.xyz/_26860

                    А тут берём шрифты 100%, канву шириной 2048px и зожимаем картинку до 1024px:
                    https://mini.s-shot.ru/2048x0/PNG/1024/Z100/?http://govnokod.xyz/_26860

                    А теперь возьмём шрифты 200%, канву шириной 4096px и зожмём до 1024px:
                    https://mini.s-shot.ru/4096x0/PNG/1024/Z200/?http://govnokod.xyz/_26860

                    В итоге ширина картинки одинаковая, а межстрочное расстояние разное.
                    Ответить
              • Тут другая проблема: в бесплатном API картинка кэшируется. Обновить её можно только вручную через сайт.

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

            Эээ... почему? Тот же сток, по сути.
            Ответить
            • Ширина узкая, проверь.
              Ответить
              • На ████████ именины
                Испекли мы каравай
                Вот такой ширины,
                Вот такой вышины,
                Вот такой нижины,
                Вот такой ужины
                [ДАННЫЕ УДАЛЕНЫ]
                Ответить
          • показать все, что скрытоvanished
            Ответить
      • Хрюкни
        Ответить
        • Это для другого тред.

          Кстати, почему у нас до сих пор нет оффтопа, в котором нужно хрюкать?
          Ответить
      • Второй пиздец оффтоп #5 добавь
        Ответить
      • Хрюкни надо добавить
        Ответить
        • Передали в инженерный отдел, будем работать.
          Ответить
    • Пересмотрел оффтопы, содержащие более 400 комментариев.

      Хостинг: http://govnokod.ru/25396

      Прыщеблядь VS Акнеблядь: http://govnokod.ru/24915

      Память в пхп не шарится, и на каждый запрос заново запускается. По-моему это каждый петух знает: http://govnokod.ru/25675

      БОЖЕСТВЕННЫЙ СУДЪ: http://govnokod.ru/26438

      Питушня: http://govnokod.ru/26692

      Словарь терминов говнокода: http://govnokod.ru/26478
      Обсуждение словаря терминов говнокода: http://govnokod.ru/26488

      Вореции {
      12 это 35 это 7876... http://govnokod.ru/16567
      Бредогенерации тред: http://govnokod.ru/16714
      }
      Ответить
      • А надо ли их перекатывать?
        https://govnokod.ru/26372#comment523183
        1024-- 27.01.2020 18:58 #
        IT оффтоп. 532 комментария меньше, чем за неделю.
        
        Зачем создают любительские форумы с темами? Помню гвфорум Василия со 100500
        разделами по языкам с парой постов и процветающий раздел с оффтопом.
        
        Я понимаю, полезно делить на темы официальный форум, где сидит поддержка за деньги.
        Но зачем так делать с частными форумами? Общение опирается на ассоциации, оно не
        вписывается в рамки тем. Деление либо подогреваются оплатой за строчки и ротацией
        посетителей (задал один вопрос, ушёл), либо форум загибается. Сайты с постоянными
        посетителями сложно вписать в рамки. Там либо в тематических разделах учтиво молчат,
        либо из-за правил и банов общение неествественное, сайт тухнет.
        Ответить
    • https://habr.com/post/515102/
      > Apple и Google удалили Fornite из магазинов AppStore и Google Play за обход встроенной платежной системы
      > 13 августа 2020 года Epic Games добавила альтернативную возможность оплаты за V-bucks (игровые виртуальные деньги) в мобильной версии игры Fortnite. Это было сделано для того, чтобы пользователи могли сэкономить при выборе нового способа оплаты. В этом случае не платилась комиссия Apple и Google за встроенные покупки.

      > Вечером этого же дня Apple убрала приложение Fortnite из App Store из-за нарушения условий размещения в магазине приложений. Немного позже это сделала и Google. [...] Фактически это был бан за невозможность получать 30-процентную комиссию от оплаты пользователем встроенных покупок в этих игровых приложениях, что недопустимо по правилам магазинов AppStore и Google Play.

      > Однако, Epic Games не согласна с такими действиями Apple и Google.
      > Разработчик решил не сдаваться и предпринял новые шаги по борьбе с двумя монополистами.

      > Для того, чтобы пользователи и игроки узнали об этой ситуации Epic Games анонсировала выход короткометражного фильма Nineteen Eighty-Fortnite, в котором Apple сравнивается с Большим Братом из романа-антиутопии Джорджа Оруэлла «1984».
      > Разработчик открыл для пользователей портал "FreeFortnite", где уже опубликован пародийный ролик на Apple, где логотип компании обыгрывается в виде червивого яблока.

      > Вдобавок Epic Games подала в суд на Apple. Разработчик обвинил компанию в ограничении конкуренции и нарушении антимонопольного законодательства США. Epic Games в своем иске просит объявить незаконными ограничения, которые накладывает Apple в AppStore.


      Китайское говно кидается какашками в гугловское говно и эппловское говно. Ебала жаба гадюку.
      Ответить
      • Ну эпики сами те ещё пидоры. Притащили на десктоп концепцию "эксклюзивов", многие игры теперь год-другой только в их магазине продаются.
        Ответить
        • Подтверждаю. Помимо этого, «Эпики» по факту принадлежат «Tencent», а «Tencent» — это ёбаный китайский рак. Китайский рак надо выжигать калёным железом.
          Ответить
    • Имеются ли тут webpackoBble_nemyxu? Инженерный отдел начал читать мануал, а там с первых же строчек что-то кукарекают про «NodeJS» и «импорты». Его вообще можно использовать для обычных, чисто браузерных приложений, без всего этого говна?
      Ответить
      • Ну да, они же даже сами пишут в своём getting started, что вебпак все эти импорты уберёт и сделает код совместимым со старыми браузерами.
        Ответить
      • WebPack обычно работает так:

        Ты описываешь bundle в js файле, и запускаешь webpack через node.js.
        Вебпак поддерживает импорты, и собирает в бандл все нужные файлы, которые ты до этого установил через npm.

        Полученный бандл ты загружаешь в страницу.

        Пример:

        main.js импортирует foo.js, bar,js а так же isodd, iseven, iseleven и другие полезные пакеты.
        webpack собирает из этово один огромный page.js минифицированный.
        Его ты и подключаешь
        Ответить
    • Петушиная симфония:
      https://youtu.be/7D4ofrssoUQ
      Ответить
    • https://habr.com/post/515168/
      > Проект криптовалюты под названием YAM закрылся 12 августа после того, как ее создатели обнаружили, что существующая в коде программная ошибка фактически лишает их возможности управлять валютой.
      > «Мы обнаружили ошибку в контракте на перебазирование, из-за которой было извлечено гораздо больше YAM, чем предполагалось для продажи в пул Uniswap YAM/yCRV, что привело к отправке большого количества избыточного YAM в резерв протокола», — разъяснили авторы проекта.
      > «Учитывая модуль управления YAM, эта ошибка сделает невозможным достижение кворума, а это означает, что никакие действия по управлению будут невозможны, и средства в казначействе будут заблокированы», — добавили они.

      > Ошибка в коде заблокировал токены Curve (yCRV) на сумму около $750 000 в казначействе YAM. Эти активы были предназначены для использования в качестве резервной валюты для поддержания стоимости YAM.
      > При этом создатели настаивали, что ошибка не повлияла напрямую на балансы или активы в контрактах на размещение.
      > Но после того, как попытки восстановить контроль над казначейством YAM потерпели неудачу, соучредитель Брок Элмор принес в твиттере официальные извинения.

      > Несмотря на свой провал, YAM Finance намерена повторить попытку: «Мы создадим грант Gitcoin для координации финансируемого сообществом аудита контрактов YAM. «Если цель финансирования будет достигнута, по завершении аудита мы планируем поддержать запуск YAM 2.0 через контракт на миграцию из YAM».


      Какая-то ёбанная хипстерская феерия.
      Ответить
      • Кстати, интересно, а почему все вот эти вот «криптопроекты» до сих пор не приравняли к финансовым пирамидам?
        Ответить
        • Так механизмы другие. Криптопараша усиленно пародирует биржу.
          Ответить
          • И таки замечательно пагодигует, скажу я вам!
            > Ошибка в коде заблокировал токены Curve (yCRV) на сумму около $750 000
            > Но после того, как попытки восстановить контроль над казначейством YAM потерпели неудачу, соучредитель Брок Элмор принес в твиттере официальные извинения.
            Ответить
            • Ну вот, достаточно извиниться и всё хорошо.
              Всегда так делаю.

              И вообще, что такое $750 000? Чуть больше шестидесяти битков. Хакеры-вымогатели смеются над этими нищебродами.
              Ответить
    • https://habr.com/post/515258/
      Только Сёме не показывайте.

      Спокойной ночи.
      Ответить
      • охуеть, хоть что-то полезное на хабре запостили

        шестиугольная сетка заебись тема, буду знать
        Ответить
        • Приведи реальный пример, когда тебе в работе понадобилась шестиугольная сетка.
          Ответить
          • https://i.ytimg.com/vi/6csQ-oxSiEY/maxresdefault.jpg
            Ответить
          • Есть проект, связанный с управлением персоналом и перемещением объектов по взвешенному графу, и, походу, будут как-нибудь на этих дрожжах и с логистикой проекты.
            Ответить
          • Герои, молчать!
            Ответить
        • Кроме упоминания этой самой шестиугольной сетки, ничего полезного не нашёл.

          Система шифрования уже была реализована
          Мне редко приходилось прибегать к использованию очередей
          У меня редко бывали причины для самостоятельной реализации алгоритмов сортировки


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

          Ну и история про Убер, где запилили убер-фреймворк для мобильного приложения, конечно ржачная, если вспомнить, что в их мобильном приложении экранов десять, из которых на половину пользователь заходит примерно никогда. Да и сам фреймворк не про наглоритмы, в общем, а про модный хипстерский state-based app.
          Зато у них откуда-то ежедневное слияние сотен веток-источников.

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

          В «PHP» нет никаких структур и никаких данных. Именно поэтому я за «PHP».
          Ответить
      • > Спокойной ночи

        Зассал?
        Ответить
    • Дикобраз убил питона изнутри.

      Осторожно, шок-контент.

      https://nat-geo.ru/nature/dikobraz-ubil-pitona-iznutri-foto/
      Ответить
    • Убийца!
      Ответить
    • Неудачный эксперимент:
      https://pbs.twimg.com/media/EfinUlOWkAAl0Sv.jpg
      Ответить
    • Самый комментируемый: http://govnokod.ru/18591 (2015 комментов).
      Ответить
    • Блядь, как же заебали ёбанные виндовые сеошники. Вижу у себя какой-то драйвер-фильтр ФС (вендовая терминология, ага) «npsvctrig», хочу узнать, что это такое. Ввожу в «Гугл», получаю страницу, забитую ёбанными автогенерированными ворециями:
      npsvctrig.sys Windows process - What is it?
      Npsvctrig.sys is a Windows driver. A driver is a small software program that allows your computer to
      communicate with hardware or connected devices. This means ...
      
      Скачать Npsvctrig.sys и исправить ошибки «синего экрана»
      6 мая 2020 г. - Файл npsvctrig.sys входит в комплект Windows 10, Windows 8.1 и Windows 8.
      Ниже приведены подробные сведения, порядок устранения ...
      
      What you should know about npsvctrig.sys
      The npsvctrig.sys (Named pipe service triggers) file is a Windows driver. Generally, drivers are used
      by Windows to enable internal components like graphic cards ...
      
      npsvctrig.sys - Что это такое?
      npsvctrig.sys не является необходимым для Windows 10/8/7/XP. Нажмите здесь, чтобы узнать,
      является ли npsvctrig безопасным и как избежать ошибок ...
      
      Что такое npsvctrig? -
      Процесс, известный как триггеры службы именованных каналов, принадлежит корпорации
      Microsoft (www.microsoft.com). Описание: Npsvctrig.sys не ...

      Блядопидорасы ебливые, зла не хватает.
      Ответить
    • https://sun9-41.userapi.com/qxzVVNH5dXltQTOV0dX4f4YfQPUhv7NlKbTrBg/Wx_AtTOZdj4.jpg
      Ответить
    • К этому же периоду относится и визит Швейка на свою квартиру к своей старой служанке пани Мюллеровой. Швейк застал дома двоюродную сестру пани Мюллеровой, которая с плачем сообщила ему, что пани Мюллерова была арестована в тот же вечер, когда отвезла Швейка на призыв. Старушку судил военный суд, и в виду того, что ничего не было доказано, её отвезли в концентрационный лагерь в Штейнгоф. От неё уже получено письмо.
      Швейк взял эту семейную реликвию и прочёл:

      «Милая Аннушка! Нам здесь очень хорошо, и все мы здоровы. У соседки по койке сыпной ███, но есть и чёрная ████. В остальном всё в порядке. Еды у нас достаточно, и мы собираем на суп картофельную ██████ Слышала я, что пан Швейк уже ████ так ты как-нибудь разузнай, где он лежит, чтобы после войны мы могли украсить его могилу. Забыла тебе сказать, что на чердаке в тёмном углу в ящике остался щеночек фокстерьер. Вот уже сколько недель, как он ничего не ел, — с той поры как пришли меня ██████████. Я думаю, что уже поздно и пёсик уже отдал ████ душу».

      Весь лист пересекал розовый штемпель:
      Zensuriert К.. и k. Konzentrationslager Steinhof /
      Просмотрено цензурой. Императорский королевский
      концентрационный лагерь Штейнгоф (нем.)./.

      Ярослав Гашек. Похождения бравого солдата Швейка. [ДАННЫЕ УДАЛЕНЫ]
      Ответить
    • https://habr.com/post/515696/
      https://habrastorage.org/webt/rp/ru/mu/rprumuo8cydmzee4cd6nlynbd_k.jpeg
      https://habrastorage.org/webt/b_/fz/-e/b_fz-e8mahprwkzai6kyy3xkcqq.jpeg
      > Дизайнерский концепт «ябломобиля» от Magic Torch, сообщество Behance.net

      Похоже, «дизайнеру» забыли рассказать, что такие вот круглые штуки внизу автомобиля называются «колёса», и если их нет (или они не крутятся), то машина не поедет.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • МИСиС разработал компактный элемент питания на радиоактивных изотопах:
      https://topwar.ru/uploads/posts/2020-08/thumbs/1597893818_5.jpg
      Ответить
    • На почту пришёл какой-то спам с замечательными ворециями: #вореции
      >>>
      Фигура разворота «Харами»

      Фигура японских свечей Харами состоит из 2 свечей; длинная первая поглощает вторую короткую; разворачивает текущий тренд.
      Фигура «Харами» (англ. harami) — разворотная фигура на графике японских свечей. Она состоит из 2-х рядом стоящих свечей, вторая из которых меньше первой, при этом тело и тени второй свечи должны находится в пределах первой свечи. Харами разворачивает предшествующий тренд, направление которого является куда более важным сигналом, чем цвета свечей. Несмотря на то, что разные источники утверждают разную информацию про цвета свечей в Харами, автор пришел к выводу, что комбинации цвета имеют несущественное значение. Харами — это зеркальное отражение фигуры Поглощение. Харами (разворотная фигура японских свечей)
      Фигура японских свечей «Харами» в действии
      Харами наблюдаются в концах трендов. Это могут быть как длинные тренды в несколько месяцев, так и короткие тенденции в несолько дней. Чтоб понять Харами, надо проанализировать, что же происходит во время торгов в период формирования Харами.
      Обратный разрыв в фигуре Харами
      Заметьте, что независимо от цвета первой свечи, открытие второй свечи происходит с окном от закрытия первой свечи. Более того, это окно-то обращено в противоположную сторону от движения цены в первой свече. Т.е. если цена падает в первой свече (и свеча первая, соответственно, темная), то вторая свеча открывается с окном выше, чем закрылась первая свеча. С другой стороны, если в первой свече цена росла, то во второй свече цена откроется с разрывом ниже. Именно этот разрыв (окно) в противоположную сторону от движения цены в первой свече и является ключевым моментом фигуры Харами.
      Важность размеров второй свечи
      Чем меньше вторая свеча в Харами — тем достовернее фигура. Если вторая свеча является Доджи, надежность фигуры сильно возрастает.
      Ответить
      • #вореции
        (продолжение)
        >>>
        Бычий и медвежий Харами
        Т.к. фигура Харами — разворотная, есть 2 варианта Харами, которые соответствуют направлению нового, развернутого тренда:

        бычий Харами — разворачивает нисходящие тренд на восходящий
        медвежий Харами — меняет восходящий тренд нисходящим

        Отличить бычий Харами от медвежьего в первую очередь можно по объективным данным предшествующего тренда: если у вас восходящий тренд, то по его завершении никак не может образоваться бычий Харами, т.к. развернутый восходящий тренд станет нисходящим. Простой здравый смысл. Есть также мнение относительно комбинаций цвета свечей в фигуре, который могут увеличить надежность Харами. Всего есть 4 возможных комбинации цветов в фигуре Харами:

        черная с черной
        черная с белой
        белая с черной
        белая с белой

        Разные источники утверждают, что бычьи Харами должны обязательно начинаться с белых свечей, а медвежьи Харами — с темных. Но новые данные подтверждают, Стив Найсон (CandleCharts.com) об этом пишет, и автор убежден, что комбинации цвета свечей в фигуре Харами имеют гораздо меньшее значение, чем размеры свечей. Вполне вероятно наблюдать любую из 4-х комбинаций цветов свечей в качестве и медвежьего Харами и бычьего.
        Прикладной смысл фигуры Харами
        Естественно, т.к. Харами — фигура разворота, главный ее прикладной смысл — обнаружение разворотов. Именно поэтому, Харами является отличным помощником при анализе финансовых инструментов, которые находятся в ценовом коридоре. При обнаружении Харами близ областей поддержки или сопротивления стоит делать соответствующие действия, т.к. Харами свидетельствует о развороте. Также можно использовать Харами в отрыве от ценового канала, и просто выявлять разворот текущего тренда, но при этом стоит воспользоваться дополнительным инструментом технического анализа (например, каким-то индикатором) для подтверждения разворота тренда.
        Ответить
        • #вореции
          (окончание)
          >>>
          Вывод
          Фигура на графике японских свечей Харами поможет вам увидеть вероятное место разворота текущего тренда.
          Ответить
          • Какой технический анализ )))
            Ответить
            • Я вообще до половины текста был уверен, что это что-то про оригами.

              А в конце решил, что это про фен-шуй и гороскопы. В принципе, не особо ошибся.
              Ответить
              • Ну, к слову, на форексе даже зарабывают. Продавая гороскопы и мануалы.
                Ответить
              • Я бы не решился. Потому что звучит как очередное описание дилдака с АлиЭкспресс
                Ответить
        • Зашёл на сайт, там предлагают японскими свечами побеждать на Форексе.

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

          Шёл медведь по бирже, видит свеча Харами. Сел на неё и сгорел.
          Ответить
    • Вореции:
      https://pbs.twimg.com/media/Ef45pD7WkAAY6Ka.jpg
      Ответить
      • Я поэт, зовусь я Цветик,
        От меня вам всем [ДАННЫЕ УДАЛЕНЫ]
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Пост-Кнышев
          Ответить
          • «Этот — трудяга. Этот пашет. Он своего добьется», — говорили о нем.

            И он пахал.

            Он шел в лаптях по пашне, грузно налегая на плуг, и выпятив нижнюю челюсть, угрюмо приговаривал: «Надо пахать, пахать, надо больше пахать...»

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

            Так он перепахал все поле много раз вдоль и поперек.

            Но странное дело: у него почему-то так ничего и не выросло.

            Мораль. Мало пахать, нужно ведь что-то еще и сеять.
            Ответить
        • А куда пропал вистефан?
          Ответить
          • перкомпилирует Xorg
            Ответить
            • Это ответ на вопрос "что делает".
              Ответить
              • В данном случае это совершенно исчерпывающий ответ на вопрос «куда пропал».[/​color]
                Ответить
                • И куда же?
                  Ответить
                  • Он больше не вернется
                    Ответить
                    • Задача перекомпиляции «Xorg» NP-полна?
                      Ответить
                      • Доброе утро, боисовый питух средний азий.
                        Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Ну хромиум это, наверное, одна из самых тяжёлых прог. По сравнению с ним всё остальное мгновенно конпеляется.
                          Ответить
                          • смутно помню по гентушной юности, что сборка иксов и кедов была делом непростым, но хромиума тогда не было.

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

      https://trendymen.ru/lifestyle/events/129952
      Ответить
    • vanish
      Ответить
    • http://synonim_bg.enacademic.com/1686/Византийщина
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Никто не сказал, что что-то не так
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Домашен гълъб – външно устройство
              На главата са разположени зрителните, слуховите и обонятелните сетивни органи. Като цяло зрението и слуха са отлично развити и особено при някои грабливи птици. Вместо уста, гълъбът притежават клюн, който при различните представители на класа се е видоизменил съобразно начина им на хранене.
              Ответить
              • хехе, это про голубя, тут к гадалке не ходи

                Если помнить, что "ъ" это такая гласная, то все становится понятно
                Ответить
            • Защо ме притесняваш, бом?

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

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

      Закрытие окна по крестику убивает к хуям окно, коннект к Х серверу и саму прогу. И надо договариваться с window manager'ом чтобы он вместо этого кидал сообщение о закрытии...
      Ответить
      • А как бы ты хотел чтобы было? Чтобы закрытие всех окон приводило к висячему безоконному приложению?
        Ответить
        • На Макоси так многие приложения и работают.
          Ответить
        • Не всех, а любого из них. Тебе не возвращают код для остановки лупа, тебе не кидают ивентов. Просто window manager заставляет X убить коннект до твоей проги. А xlib внутри твоей проги на любую ошибку делает terminate.

          Не умеешь обрабатывать закрытие? Получи по яйцам.

          Видимо какой-то атавизм из древних времён когда window manager'ов ещё не было. Протокол общения с wm явно сбоку прикручен.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Ага, я про него в комменте ниже написал.
              Ответить
              • лол, одновременно написили, да)

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

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

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

          Какая расширяемость )))
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Ну хер знает, чтобы по-умолчанию такие простые вещи работали а не расширениями...

              Проги, которые крестик не умеют обрабатывать в общем-то уже с 89 года устаревшие, когда icccm внедрили.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну она слишком жёстко закрывается, без шансов что-то переспросить или сохранить. Это как бы не совсем то, что я в 2020 году ожидаю от закрытия проги по крестику. WM мог бы хотя бы спросить действительно ли я хочу наебнуть прогу. Может быть я передумаю и выйду по-хорошему через менюшку.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • > кто ему мешает

                      Опенсурсный UX ему мешает. Пользователь знает что делает, все дела.

                      Ну у полноценных прог обычно тулкит какой-нибудь, а там всё обрабатывается.
                      Я только у мелочи типа glxgears и прочих туториалов помню ошибку при выходе.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • https://docs.microsoft.com/en-us/windows/win32/learnwin32/closing-the-window
                          The user can close an application window by clicking the Close button, or by
                          using a keyboard shortcut such as ALT+F4. Any of these actions causes the window
                          to receive a WM_CLOSE message. The WM_CLOSE message gives you an opportunity
                          to prompt the user before closing the window. If you really do want to close the window,
                          call the DestroyWindow function. Otherwise, simply return zero from the WM_CLOSE
                          message, and the operating system will ignore the message and not destroy the window.

                          WM_DESTROY шлётся когда окно уже исчезло.
                          Ответить
                          • спасибо.
                            Тоессь закрывать надо явно: словил WM_CLOSE, и вызвал Destroy.
                            А если уже DESTORY пришел, то всё.
                            Ответить
                            • Подтверждаю.
                              Ответить
                              • ну вот видиш, сколько ненужной ебли нужно делать! вручную обрабаывать WM_CLOSE

                                Толи дело иксы: сделал окно, и всё работает из коробки
                                Ответить
                                • > вручную обрабаывать WM_CLOSE
                                  На самом деле нет. Если ты его не обрабатываешь, то окно само закроется.
                                  However, there is a shortcut in this case. Recall that DefWindowProc
                                  executes the default action for any window message. In the case of
                                  WM_CLOSE, DefWindowProc automatically calls DestroyWindow.
                                  That means if you ignore the WM_CLOSE message in your switch
                                  statement, the window is destroyed by default.
                                  Ответить
                            • Можешь не ловить, дефолтный обработчик дестройнет за тебя. WM_CLOSE это чтобы спросить юзера хочет ли он сохраниться.
                              Ответить
                        • > пришёл WM_DESTROY

                          Ну если окно последнее или единственное - прога кинет себе WM_QUIT и выйдет из лупа. В общем-то и всё.

                          Если луп нерабочий - винда предложит убить.

                          Вот кстати, если в иксах луп нерабочий аля типичный туториал со sleep(10) вместо лупа, то прога НЕ помрёт и продолжит висеть в памяти. Хотя окно закроется из-за дисконнекта, конечно.
                          Ответить
    • https://soundcloud.com/user-503919849/chuvashskie-surkhi-varmanta
      Давайте танцевать!
      Ответить
    • https://devblogs.microsoft.com/oldnewthing/20110322-00/?p=11163
      > Why is there the message '!Do not use this registry key' in the registry?
      [...] But it seems that some people need more than a nudge; they need a shove.
      Let’s see, we’re told that the functions for obtaining the locations of known folders
      are SH­Get­Folder­Path and its more modern counterpart SH­Get­Known­Folder­Path. I wonder
      what the names of the functions for modifying those locations might be? Man that’s a tough one.
      I’ll let you puzzle that out for a while. Okay, here, I’ll tell you: The corresponding functions go by
      the completely unobvious names SH­Set­Folder­Path and SH­Set­Known­Folder­Path.
      
      Sorry you had to use your brain. I’ll let you get back to programming now.

      Какой нахрюк )))
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • А что за 4 проги? Одна из них поди Explorer?
          Ответить
          • возможно, что это сторонее тяжлое энтерпрайзное говно за охулион доллаов, пераписать которое уже нереально: сырцов нет, и прогаммисты на пенсии
            Ответить
        • Кстати MS как всегда обосрался и не пофиксил ссылки в статьях :(
          Ответить
          • Ага, это самое уебанское в «MSDN». Каждые полгода перемещают все статьи на новые адреса без 301 со старых. Уебаны.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Они между разными CMS'ками судя по всему мигрируют эти странички, а не просто домен меняют. Поэтому никакая джанга не спасёт.

                Но блядь, можно ведь было записать что куда смигрировали и прочесать странички простеньким скриптом. Неужели даже джуна на такую работу не нашлось?
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Всем похуй.
                    Ответить
                    • но.. но как же догфуддинг?
                      Ответить
                      • У них достаточно собак чтобы тестировать на них свою еду. Или я неправильно понимаю смысл догфудинга.
                        Ответить
                      • а хрюфудинг?
                        Ответить
                        • Хрюфундинг это когда чуваки скидываются на какой-нибудь нахрюк?
                          Ответить
                          • Не путай хрюфандинг с хрюфудингом.
                            Ответить
                          • Это хрюшеринг.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Тимхрюкинг.
                                Ответить
                                • Я вам нахрюкала на хрюшку, прохрючьте, пожалуйста
                                  Ответить
                                  • Прохрючили, нахрюков не охрюкали. У нас всё хрюкает. Вы пробовали выхрюкать и снова захрюкать?
                                    Ответить
                                    • Хрюк нахрюк да не по нахрюковски. Надо его перехрюковать, отнахрюковать и вынахрюковать.
                                      Ответить
                                  • Нахрюк нахрюка видит издалека.
                                    Ответить
                                    • А о чём этот тред?
                                      Ответить
                                      • а тебе не похуй?
                                        Ответить
                                        • А почему ты отвечаешь вопросом на вопрос?
                                          Ответить
                                        • В тот хрюнь, когда ты мне прихрюлся,
                                          Я всё прихрюкала хрюма.
                                          На хрюмлю хрюхо отхрюмилась
                                          Хрюма, хрюма, хрюма
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                          • Хрюкну, а в ответ тишина.
                                            Ответить
                                            • Он вчера не вернулся из стойла…
                                              Ответить
                                              • Если всхрюк оказался вдруг и не хрюк и не хряк, а так.
                                                Ответить
                                                • Разхрючавшись хрюкну со скалы,
                                                  Вот я хрю и вот хрюна не стало.
                                                  Ответить
                                                  • Похрю-, похрю-, похрюкаем же на своём веку!
                                                    Ответить
                                                    • Косят хрюшки траву, хрюн-траву на поляне
                                                      И от страха все быстрее хрюкают хрю-хрю.
                                                      Ответить
                                                      • Обернусь я белой хрюшкой
                                                        Да в окошко ухрючу
                                                        Чтобы в ясно небо взхрюкнуть
                                                        К Солнца яркому хрючу
                                                        Ответить
                                                        • Тот, кто взял хрюки однажды в повелительные руки,
                                                          У того исчез навеки безмятежный свет очей,
                                                          Духи ада любят слушать эти царственные звуки,
                                                          Бродят бешеные волки по дороге поросей.
                                                          Ответить
                                                          • На заре хрюканье зовёт меня
                                                            Ответить
                                                            • Я захрюкаюсь от хрюльности,
                                                              От твоей-моей питульности,
                                                              Я хрюльну все твои хрюкалки, ага-ага,
                                                              Вижжю твои-мои хрюсенки.

                                                              Хрю-хрю-хрю? Лааааааай-ла-лааааа!
                                                              Ответить
                                                              • Хрюкана река, глубока река,
                                                                Не хрюкнуть тебе с того бережка,
                                                                Хряки толстые прячут лунный свет,
                                                                Завижжать бы мне, да вот грязи нет.
                                                                Ответить
                                                                • В далёком сохрюкии Хряу-Хрюта,
                                                                  Все стало для нас не хрюнятно,
                                                                  Хрюгнал похрюкаем: "Вы хрю хрюли там?"
                                                                  А нас похрюкают обратно.
                                                                  Ответить
                                                                • Хрюк облака, плывущего над тундрой,
                                                                  Хрюк птицы, пролетающей над тундрой,
                                                                  И хрюк оленя, что бежит по тундре,
                                                                  Перегоняют кабана в пути.
                                                                  Ответить
                                                                  • Кабы я была хрюльница, —
                                                                    Третья хрюкала сестрица, —
                                                                    Я б для батюшки Царя
                                                                    Нахрюкала б на птушников.
                                                                    Ответить
                                                                    • Не прихрючно ли будет нам, хряки,
                                                                      Начать древним хрюком
                                                                      Печальный нахрюк о хрюках Игоря,
                                                                      Игоря Святохрюковича!
                                                                      Ответить
                                                                      • Опять нахрюк, опять хрю-хрю,
                                                                        Снова выход на бис.
                                                                        Лежит в грязи веретено
                                                                        За чертою кулис.
                                                                        Ответить
                                                                        • Иисус Хрюстос Суперзвезда
                                                                          Ответить
                                                                          • Хрюкнет за горой грязный замок мой.
                                                                            Душу мучает порой царящий в нем покой.
                                                                            Я своих нахрюков страждущий герой,
                                                                            А любви моей живой все образы со мной.

                                                                            Я часто слышу хрюк в смотрящих на меня рылах.
                                                                            Им суждено уснуть в моих стенах,
                                                                            Застыть в моих грязях.

                                                                            Но сердце от грязи горит, моя душа болит,
                                                                            И грязевых фигур прекрасен вид —
                                                                            Нахрюк везде царит!
                                                                            Ответить
                                                                            • Я хрюкнуть пытался:
                                                                              Чудовищ нет на земле.
                                                                              Но тут же раздался
                                                                              Нахрюк зловещий во тьме:

                                                                              Мне больно хрюкать в белый свет,
                                                                              Мне лучше хрюкать в темноте.
                                                                              Я очень много-много лет
                                                                              Прохрюкал только о еде.
                                                                              Ответить
                                                            • > На заре хрюканье зовёт меня

                                                              Кстати, Олег Заурович Парастаев умер недавно.
                                                              Ответить
                • Старая ссылка была:
                  http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx

                  Новая такая:
                  https://devblogs.microsoft.com/oldnewthing/20031103-00/?p=41973

                  Если убрать p=41973, то есть сделать ссылку такой:
                  https://devblogs.microsoft.com/oldnewthing/20031103-00
                  , то откроется не сама статья, а её превью.

                  Сделать редирект было бы несложно, но у них почему-то проебался изначальный айдишник 55532 и вместо него теперь 00. Откуда взялся айдишник 41973, вообще большая загадка.
                  Ответить
    • https://yandex.ru/uslugi/profile/DenisOrlov-301124?#/ohrana-i-detektivy/detektivy

      Ебать, чего только нет.
      5000 ₽
      за услугу
      Услуги детектива по проверке партнёра на измену
      Ответить
      • > Услуги детектива по проверке партнёра на измену
        Пиздец у кого-то нездоровые отношения… Нахуй так жить?
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Я чот не думаю, что реальный частный детектив будет свой профайл выкладывать на Яндексе.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • А фотографии в фотошопе конечно же сделает

              Главное потом распечатать на газетной бумаге, чтобы никто не заметил подвоха
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Тогда цена оправдана.

                  1% уверенности стоит 5K.

                  Если ты вообще думаешь, что твой партнёр ни капли в рот ни сантиметра в жопу, то цена будет за 100% уверенности, а это уже 500K
                  Ответить
              • > фотографии
                Ну чо ты сразу начинаешь, уважаемый же человек работал, как можно не доверять!
                Ответить
                • > уважаемый
                  - уже нужно начинать извиняться?
                  Ответить
      • Поиск человека по номеру телефона
        Отследить абонента по его передвижению и где находится
        Поиск человека по номеру телефона
        15 000 ₽
        
        Пробить человека по базе данных
        5 000 ₽

        Так, минуточку, а с каких пор у нас в России законом разрешено пробивать людей по базе данных и отслеживать передвижения по номеру телефона?
        Ответить
        • Какая база данных? Каталог "Адюльтер-2020"?
          Ответить
        • показать все, что скрытоvanished
          Ответить
          • Мне байку рассказывали.

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

          А подруга мне подробно расписала что ей не нравится, вернее пыталась, но сама запуталась )
          Ответить
          • > подробно расписала что ей не нравится

            У вас там прям ревью. Будешь баги фиксить или забьёшь?
            Ответить
            • Ну а хуле? Если не вышло, то почему бы не попытаться узнать почему. А её баги уже не мне фиксить.
              Ответить
              • да этож почти всегда пиздеж, не?
                истинные причины они и сами-то не всегда знают, не гря уж о том, чтоб их озвучивать
                Ответить
    • показать все, что скрытоvanished
      Ответить
    • Перекатный петух обновлён.
      1. Добавлен пропущенный пятый оффтоп;
      2. Добавлен «Хрюкни»;
      3. Исправлена ошибка, которая могла привести к дублированию перекатов: теперь одновременно может быть запущен только один инстанс перекатного петуха.

      Изменения (в том числе ручная правка БД) не тестировались, нужно будет проверять.
      Ответить
      • Блядь, оказывается, 15-го августа перекатный петух завис и нихуя не проверял. Ненавижу делать надёжные приложения, которым нужно активно стучаться в сеть.
        Ответить
        • Именно потому все мои приложения -- ненадежные
          Ответить
        • Именно поэтому я за «PHP».
          Ответить
        • Добавил таймауты.
          Ответить
          • Это правильно.
            У меня когда программы глючат, я всегда добавляю им sleep(4). Обычно помогает...
            Ответить
          • Почему по умолчанию их нет? Именно поэтому я за «PHP».
            Ответить
            • Решили не решать за пользователя, наверное.

              You can tell Requests to stop waiting for a response after a given number
              of seconds with the timeout parameter. Nearly all production code should
              use this parameter in nearly all requests. Failure to do so can cause your
              program to hang indefinitely

              Какой багор )))
              Ответить
              • почему не зашиць туда 30 по умолчанию?
                Ответить
              • Интересно как они умудрились навечно повешаться. У сокетов же таймауты. Да и хттп сервер тебя тоже не будет вечно ждать.
                Ответить
        • > надёжные приложения, которым нужно активно стучаться в сеть

          Именно поэтому я за супервизоров, которые следят за супервизорами супервизоров.
          Ответить
          • Блядь, не поможет. Три четверти кода перекатного петуха — это разные проверки на ошибки сети и ошибки удалённых хостов, которые надо внятно обработать и не проебаться.
            Ответить
            • чому бы не кинуць эксепшен?
              Ответить
              • Потому что перекатный петух должен быть надёжным и корректно обрабатывать аварийные ситуации. Я не хочу проебать проверку какого-нибудь поля и на следующий день обнаружить просранный 100к гет.
                Ответить
                • Псевдокот
                  while True:
                  
                  try: 
                      connect()
                      send()
                      hue()
                      moe()
                  except govno as NetworkException:
                      log.err(govno)
                     sleep(10)
                  Ответить
                  • send() публикует новый пост на ГК, в hue() происходит исключение, moe() не записывает изменения в БД, на следующей итерации всё повторяется, в результате ГК полностью засран потерянными оффтопами.

                    UPD: Ну и мне надо в логи записывать, что проебалось. А то будет приятная отладка.
                    Ответить
                    • t = create_transaction()
                          connect(t)
                          send(t)
                          hue(t)
                          moe(t)
                          t.commit()


                      правда, в базу нужно писать ДО того, как ты чото обубликовал
                      Ответить
                      • Что ты этим решил? Точно так же исключение в hue(t) откатит транзакцию, и в результате пост на ГК будет, а в БД — нет.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • А, так не получится же. ID поста с ГК придёт только ПОСЛЕ его публикации, а без него в БД положить ничего нельзя.
                            Ответить
                            • Тогда сделай queue задач, да хоть в той же базе.

                              Пусть у тебя лежит объект "sync", который в фоновом режиме переводят в следующее состояние. Если не получилось -- то снова попробую итд.

                              Это в enterprise integration patterns описина
                              https://www.enterpriseintegrationpatterns.com/
                              Ответить
                              • Ну и будешь снова и снова постить.

                                Либо операция должна быть идемпотентной (т.е. ГК видит, что такой пост уже есть и не добавляет) либо ты сам должен это сэмулировать проверив, существует ли такой пост перед отправкой.
                                Ответить
                                • Да почему?
                                  create_file("i_will_post_govno")
                                  if send() == 200:
                                      delete_file("i_will_post_govno")
                                      create_file("posted")


                                  единственная жопа тут, это что пост создается, а 200 не возаращется
                                  ну или что твой код падает в середине выполнения, ну так званяй кумо: транзационность в REST не завезли
                                  Ответить
                                  • Ну так и есть.
                                    perekat = Perekat.make_perekat(offtop.category, session)
                                    if perekat.old_offtop is None or perekat.old_offtop.id != offtop.id:
                                        L.error(f'Perekat.make_perekat() returned invalid old_offtop (perekat for {offtop.post_id})')
                                        continue
                                    
                                    # Publish new offtop
                                    time.sleep(config.PEREKAT_ACTIONS_PAUSE)
                                    if not perekat.form.publish(requests_session, auth_cookie, config.POST_MAX_RETRIES, config.POST_RETRY_TIME):
                                        L.error(f'Could not publish new offtop (perekat for {offtop.post_id})')
                                        continue
                                    
                                    if perekat.form.post_id is None:
                                        L.error(f'Could not get new offtop\'s post_id (perekat for {offtop.post_id})')
                                        continue
                                    
                                    perekat.new_offtop.post_id = perekat.form.post_id
                                    perekat.new_offtop.comment_list_id = perekat.form.comments_list_id
                                    perekat.new_offtop = session.merge(perekat.new_offtop)
                                    session.commit()  # Save published post_id
                                    Ответить
                              • Да, я хотел сделать очередь задач, но прикинул, что это будет ещё сложнее и запутаннее, чем есть сейчас — хотя бы потому, что логики именно отправки особенно меньше не станет, а синхронизировать всё это говно придётся ещё активнее.
                                Ответить
                          • Ну он о ситуации когда ты пост отправил, а дальше всё пизданулось и коммит не удался.
                            Ответить
                            • потому я и сказал, что пост нужно отпралять потом.

                              Но он уже сказал, что не может.
                              потому я предлагаю https://govnokod.ru/26862#comment568782
                              Ответить
                    • Дык если ты сделал перекат, то твой код увидит его на следующей попытке и не будет перекатывать. Разве нет?
                      Ответить
                      • Перекатный петух не проверяет ГК, у него в мозгах только занесённые в БД посты. Если он запостил новый оффтоп, но не добавил его в БД, то на следующей проверке об этом потерянном посте петух ничего знать не будет.
                        Ответить
                        • псевдокод
                          while True:
                            sync = get_next_from_queue()
                            try:
                               sync.next_state()
                            except e:
                               log.err(f"Can't go to next state because of", e)
                               sleep(100500)


                          стейты такие:
                          SYNC_REQUEST_CREATED ->
                          SYNC_REQUEST_PUBLISHED_ON_GK ->
                          SYNC_REQUEST_SAVED_TO_DB
                          Ответить
                          • Ну дык все проблемы остаются.
                            >>> Либо операция должна быть идемпотентной (т.е. ГК видит, что такой пост уже есть и не добавляет) либо ты сам должен это сэмулировать проверив, существует ли такой пост перед отправкой.

                            При этом появляются новые: например, перед проверкой очередного оффтопа нам нужно убедиться, что задач на его перекат нет, иначе мы можем создать две одинаковых задачи и разъебать всё приложение.
                            Ответить
                            • не понимаю, Зачем проверять
                              https://govnokod.ru/26862#comment568788
                              Ответить
                              • >>> например, перед проверкой очередного оффтопа нам нужно убедиться, что задач на его перекат нет, иначе мы можем создать две одинаковых задачи и разъебать всё приложение.
                                Ответить
                                • ну так называй задачу по дате, и не допускай двух одинаковых задач.
                                  Возможно, что готовые фреймворки это уже и так делают
                                  Ответить
                                  • >>> нам нужно убедиться, что задач на его перекат нет
                                    Это ещё больше логики, ещё больше протекания обсракций.
                                    Ответить
                                    • >на его перекат нет
                                      А у него есть уникальный ID?
                                      Что мешает сделать так, чтобы не делать двух задач для одинакового ID?
                                      Ответить
            • Можно так.

              1) Перед запуском задачи смотришь, какой сейчас на ГК тред последний и вписываешь его в поле задачи.

              2) Если задача in progress, проверяешь все треды начиная с запомненного, чтобы убедиться что задача ещё не выполнена. Если уже выполнена - переводишь её в done, вписываешь номер найденного треда и ничего не постишь.

              3) Если задача ещё не начата, то переводишь её в in progress, постишь тред и переходишь на пункт 2.
              Ответить
              • О чём этот тред? Зачем что-то делать, если уже работает?
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Не, серьёзно. Есть уже написанный рабочий код, нужно подправить несколько мелочей. Ты предлагаешь всё нахуй переписать.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Какую архитектуру? Для преуатного петуха? Туда ничего добавлять не нужно будет. Написал и забыл.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Подтверждаю. Вон, для «Хрюкни» пришлось схему править.
                            Ответить
                          • Ладно, похуй.
                            Ответить
                            • Нет, не похуй. А через день вспомнил, и еще чуть чуть дописал, и забыл. А через день вспомнил, и еще чуть чуть дописал, и забыл. А через день вспомнил, и еще чуть чуть дописал, и забыл. А через день вспомнил, и еще чуть чуть дописал, и забыл. А через день вспомнил, и еще чуть чуть дописал, и забыл. А через день вспомнил, и еще чуть чуть дописал, и забыл.
                              Ответить
                    • На самом деле, как я внизу написал, перевести перекатного петуха на новый движок будет просто, потому что логика публикации и так вынесена в изолированные модули. Это даже есть в планах инженерного отдела — но в отдалённых, когда инженерный отдел будет в настроении попробовать что-нибудь новенькое.
                      Ответить
              • > Если задача in progress, проверяешь все треды начиная с запомненного, чтобы убедиться что задача ещё не выполнена.
                Ну да, и каждый тред может выкинуть Application was halted by an exception., после чего нужно либо долбить его до посинения, либо обновлять поле задачи этим тредом и опять идти спать.

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

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

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

                  Я за пафосный энетрпрайзный код, а не за наколенное. но тебе видней
                  Ответить
                  • Ну, кстати, в текущей рахитектуре это можно сделать, причём почти прозрачно: у меня уже вся логика публикации комментов/постов вынесена в отдельные классы. Её можно легко заменить на создание соответствующих задач (ну и из кода проверки на перекаты выкинуть модификацию БД). Возможно, когда нашим отделам будет нехуй делать — они этим займутся.

                    >>> Правда, я именно об этом в начале ветки и говорил: для написания надёжного приложения, зависящего от внешних сервисов, приходится наваливать кучу лишнего говна.
                    Ответить
                    • ИМХО: Куча гавна это когда ты сам пишешь много унылого бойлерплейта и прячешь его среди логики.
                      А когда ты делаешь красивенький и внятный фреймворк для фоновой обработки задач (или берешь готовый, что еще лучше) то это уже не говно, а конфетка.

                      не?
                      Ответить
                      • Проблема в том, что это нинужная конфетка. Ну и бойлерплейт никуда не девается, он просто переносится в логику публикации. Нам как минимум нужно залоггировать полученные ошибки, как максимум — обработать. Например, 403, полученное с govnokod.ru/add, должно привести к созданию новой задачи по обновлению кук соответствующего пользователя, наличие «<li>Неверно введен проверочный код!</li>» в ответе на запрос создания кода — к нескольким попыткам заново распознать капчу (просто отправляться спать будет неразумно и неэффективно), и так далее, и тому подобное.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Нет. Это именно что тупой бойлерплейт с бесконечными проверками всего и вся, потому что в ответ на запрос тебе может придти абсолютно любая какаха. Или не придти. Или придти, но поздно. Или ещё какая-нибудь хуйня может случиться. И всё это говно надо методично профильтровать и настоять, чтобы получить нормальные, предсказуемые результаты.

                            Вон, прямо под этим комментарием реальный пример.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Я уже объяснял, почему так просто сделать нельзя.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • https://govnokod.xyz/_26862/#comment-552818
                                    Ответить
                                  • Вон, мой комментарий ниже с кодом.
                                    > if r is None:
                                    Какая-то ошибка сети. Она была залоггирована на верхнем уровне (в safe_post_response), нам осталось только сохранить полученную страницу для дальнейшего расследования и возвратить соответствующий код ошибки.

                                    > if '<li>Неверно введен проверочный код!</li>' in self.html
                                    Ошибка капчи. Нам нужно заново распарсить страницу на предмет CSRF и captcha_id (чтобы не загружать её повторно) и возвратить нужную ошибку. В коде-клиенте эта ошибка должна привести к нескольким повторным попыткам распознать капчу, потому что это ожидаемое поведение (точность там около 90%), и спать по пять минут на каждый фейл капчи совершенно непрактично.

                                    > elif r.status_code != 200:
                                    Хуй знает, что произошло. Залоггируем и попробуем заново распарсить ответ — и, разумеется, сохраним страницу.

                                    > m = _GK_POST_REDIRECT_RE.match(post_url); if m is None:
                                    ГК почему-то перенаправил нас не на страницу с постом, а в какую-то жопу. Логгирование и сохранение для потомков.

                                    > m = _GK_COMMENTS_LIST_ID_REGEX.search(self.h tml); if m is None:
                                    Пост опубликован, ID получен, но comments_list_id не найден. Возможно, Страйкер поменял вёрстку или произошла ещё какая-нибудь непонятная хуйня. Залоггируем, сохраним страницу, но клиенту скажем, что всё в порядке, потому что пост на ГК создан.

                                    Заметь: из пяти проверок четыре — это проверки на какую-то хуйню, в частности, с расчётом на то, что у ГК может поменяться вёрстка. Мне это не нравится.
                                    Ответить
                      • Вот, например, метод, пробующий опубликовать пост:
                        def try_post(self, session: requests.Session, auth_cookie: str) -> 'PostForm.Status':
                            r = Form.safe_post_response(session,
                                                        _GK_ADD_URL,
                                                        data=self._to_form_dict(),
                                                        cookies=self._get_cookie_dict(auth_cookie))
                            if r is None:
                                self._dump_html_dated('post_post_error')
                                return PostForm.Status.POST_ERROR
                        
                            self.html = r.text
                            if '<li>Неверно введен проверочный код!</li>' in self.html \
                                    or '<li>Произвол не пройдёт! Укажите проверочный код!</li>' in self.html:
                                L.error('PostForm.post(): Invalid captcha')
                                self.parse(self.html)
                                return PostForm.Status.INVALID_CAPTCHA
                        
                            elif r.status_code != 200:
                                self.parse(self.html)
                                L.error(f'PostForm.post(): invalid response (status_code {r.status_code})')
                                self._dump_html_dated('post_invalid_response')
                                return PostForm.Status.POST_ERROR
                            
                            post_url = r.url
                            m = _GK_POST_REDIRECT_RE.match(post_url)
                            if m is None:
                                L.error(f'PostForm.post(): invalid new post url ({post_url})')
                                self._dump_html_dated('post_invalid_url')
                                return PostForm.Status.POST_ERROR
                            self.post_id = int(m.group(1))
                        
                            m = _GK_COMMENTS_LIST_ID_REGEX.search(self.html)
                            if m is None:  # No return POST_ERROR, because the post is published
                                L.warning(f'PostForm.post(): could not find comments_list_id in post {self.post_id}')
                                self._dump_html_dated('post_no_list_id')
                            else:
                                self.comments_list_id = int(m.group(1))
                        
                            return PostForm.Status.POST_DONE

                        Все вот эти вот говнопроверки никуда не денутся, они просто переедут в логику движка.
                        Ответить
    • https://habr.com/post/516230/
      > Blue-Green Deployment на минималках
      >
      ensure-reverse-proxy() {
          is-container-up reverse-proxy && return 0
          echo "Deploying reverse-proxy..."
          docker network create web-gateway
          docker run \
              --detach \
              --restart always \
              --log-driver journald \
              --name reverse-proxy \
              --network web-gateway \
              --publish 80:80 \
              nginx:alpine || return 1
          docker exec --interactive reverse-proxy sh -c "> /etc/nginx/conf.d/default.conf"
          docker exec reverse-proxy nginx -s reload
      }
      
      is-container-up() {
          local container=${1?"Usage: ${FUNCNAME[0]} container_name"}
      
          [ -n "$(docker ps -f name=${container} -q)" ]
          return $?
      }
      
      get-active-slot() {
          local service=${1?"Usage: ${FUNCNAME[0]} service_name"}
      
          if is-container-up ${service}_BLUE && is-container-up ${service}_GREEN; then
              echo "Collision detected! Stopping ${service}_GREEN..."
              docker rm -f ${service}_GREEN
              return 0  # BLUE
          fi
          if is-container-up ${service}_BLUE && ! is-container-up ${service}_GREEN; then
              return 0  # BLUE
          fi
          if ! is-container-up ${service}_BLUE; then
              return 1  # GREEN
          fi
      }
      
      get-service-status() {
          local usage_msg="Usage: ${FUNCNAME[0]} service_name deployment_slot"
          local service=${1?usage_msg}
          local slot=${2?$usage_msg}
      
          case $service in
              # Add specific healthcheck paths for your services here
              *) local health_check_port_path=":8080/" ;;
          esac
          local health_check_address="http://${service}_${slot}${health_check_port_path}"
          # [...] gost: ещё 500+ символов

      Блядь, как всё сложно, именно поэтому я за «index.php» по «FTP».

      И да, этот скрипт — только маленькая часть всей статьи.
      Ответить
      • где в index.php гринблю?
        Ответить
        • «index.php» может быть хоть какой: хоть «index_green.php», хоть «index_red.php», хоть «index_blue.php»!
          Ответить
        • Ну и, кстати, в статье тоже нихуя не гринблю.
          >>> Biblusha
          >>> После поднятия второго контейнера и исправления файла в nginx старый контейнер убивается. Как в таком случаи поведут себя активные соединения с этим контейнером?

          И это даже не говоря про всяческие «вебсокеты», которые от такого гринблю сами позеленеют.
          Ответить
          • С тем же успехом можно просто залить по «FTP» новый «index.php», лол. Работать будет точно так же.
            Ответить
          • Ну так для нормальной гринбли нужен фронт и такое понятие как "опустошение" (забыл как по-пиндосски правильно): в течение этого времени НОВЫЕ запросы идут на НОВЫЙ контейнер, а старые пока еще держаца.
            Рано или поздно старые коннекты все заканчиваются, и тогда вот старый ложица.

            Ответить
            • Ну да. Поэтому убийство старого контейнера сразу после запуска нового — это не настоящий гринблю, это граблю́ просто стандартный деплой, дополнительно запутанный и переусложнённый.


              И, кстати, деплой «index.php» по «FTP» не вызывает простоев сервиса на перезапуск, а потому и всяческий гринблю не нужен. Именно поэтому я за «PHP».
              Ответить
              • с index.php есть такая проблема, что в какой-то момент index.php уже новый, а funcii.php еще старый, и пользователь может в этот момент попасть.

                потому я стараюсь весь код иметь в одном файле
                Ответить
                • Сразу видно, что ты бабуин. Ты умный.
                  Ответить
            • > в течение этого времени НОВЫЕ запросы идут на НОВЫЙ контейнер, а старые пока еще держаца.
              Кстати, как умные дяди это делают?
              Я вижу так: после смены контейнеров запускается скрипт, который периодически проверяет «ss»/«что там у докера есть для этого» на предмет наличия подключений к синему контейнеру, когда они исчезают — синий контейнер убивается. С «вебсокетами», правда, есть проблема: какой-нибудь упорный клиент может год сидеть с открытой вкладкой, и тогда старая версия приложения так и не умрёт. Думаю, можно либо просто через сутки принудительно обрывать коннект («ладно, похуй»), либо реализовывать поддержку на стороне приложения, добавляя команду мягкого перезапуска вебсокет-соединения с клиентом без потерь данных.
              Ответить
              • Я вспомнил слово: draining.

                Вот дяди в AWS делают так: все запросы идут через фронт (application load balancer), так что он сам в курсе всех запросов.

                Новые шлются на новый. Но уже существующие TCP соединения на старый (находящийся в состоянии "draining") не рвутся.

                Приложение, если оно умное, должно использовать спец API чтобы понять, что оно draining, и как-то среагировать: или перезагрузить страницу, или явно сказать пользователю "сейчас перезагржусь братан, извини".

                Фронт лоад балансер еще умеет как-то стикать пользователей к бекендам: у него свои сессии (через куки, например) и он делает так, чтобы все твои запросы шли на один бек, иначе может быть петрушка
                Ответить
                • > Приложение, если оно умное, должно использовать спец API чтобы понять, что оно draining, и как-то среагировать
                  А, понятно. Я думал, такое дело автоматизировали, чтобы приложение могло вообще ни о каких гринблюях не знать.
                  Ответить
                  • Ну во-первых все равно оно должно быть готово работать в одной базе с другой версией себя, так что совсем не знать не получица.

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

                    В версии 1 у тебя были состояния A, B, C.
                    И вот у тебя клиент в состоянии "B".

                    А в версии 2 у тебя состояния "Q, Z, D".
                    Тут уже никак "прозрачно" не обновишься>

                    Да и наконец есть фронтэнд: если поменялся JS, то точно надо обновить страницу.\


                    Можно дрейнить час, а потом ложить старую версию просто.
                    За час N% питухов отвалится или обновит страницу
                    Ответить
                    • > Ну во-первых все равно оно должно быть готово работать в одной базе с другой версией себя, так что совсем не знать не получица.
                      А почему оно может не уметь работать с базой одновременно с другой версией себя? Разве что приложение на старте эксклюзивную блокировку БД берёт, но это какой-то кал.

                      > Во-вторых если у тебя есть уже TCP соединение, то довольно сложно перевести его на другой сервер
                      Так и не надо его переводить. Я ж как раз предложил дождаться, когда со старым контейнером соединений не будет, и только после этого убить. Проблема только с «вебсокетами», которые могут висеть неограниченно долго.
                      Ответить
                      • потому что новая версия пишет заказы с сайта в таблицу Foo, а старая -- в таблицу Bar.
                        А еще при миграции на новую версию переименовали колонку в базе.

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

                        Именно потому я за "Web 1.0"
                        Ответить
                        • А, ну да, с миграциями жопа будет.

                          > Если вебсокетов нет, то приложение и не обязано ничего знать о гринбле (ну если не считать базы). Просто в какой-то момент пользогватель обновит страницу, и попадет уже на новое.
                          Я об этом и говорил, интересуясь, существуют ли более энтерпрайзные решения этой задачи.
                          >>> Я вижу так: после смены контейнеров запускается скрипт, который периодически проверяет «ss»/«что там у докера есть для этого» на предмет наличия подключений к синему контейнеру, когда они исчезают — синий контейнер убивается.
                          Ответить
                        • Ну такую миграцию гринбля не переживет.
                          Ответить
                          • в гринбле все миграции придется писать руками и много думать, джанговые из коробки соснут, например.

                            Гринбля вообще не дешевая штука: усложняется и деплоймент, и разработка. Нужно подумать реально ли тебе она нужна.
                            Очень часто даунтайм в течение десяти секунд в ночь субботы на воскресение это ок.
                            Конечно, если ты не Яндекс
                            Ответить
                            • > Очень часто даунтайм в течение десяти секунд в ночь субботы на воскресение это ок.
                              > Конечно, если ты не Яндекс
                              Ну вот, а я не так давно обновлял ночью «НГК» — получил жалобы от пользователей на 503-и ошибки. Получается, «НГК» почти как «Яндекс»!
                              Ответить
                            • Поэтому я за "hot bytecode patching". Впрочем, с ним своя веселуха, особенно когда версию BEAM VM надо на живой системе обновить, а ноды между собой по RPC общаются, и шлют друг другу по сети лямбды, и всё это ещё в гринбле. Вот это были миграции так миграции, эх.
                              Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Петербуржец потратил в игре "Великий султан" 763 550 рублей и пытался вернуть деньги через суд

      Объединённая пресс-служба судов Санкт-Петербурга сообщила о том, что Пушкинский районный суд вынес решение по иску Эндрю Синицкого к Mechanist Internet Technologies, Google и «Тинькофф Банк» о защите прав потребителя. Издание «Фонтанка» со ссылкой на данные СПАРК сообщает, что Синицкий – «бывший индивидуальный предприниматель и совладелец петербургской компании, которая специализируется в области права».

      С 27 ноября 2018 года по 3 марта 2019 года Синицкий потратил в мобильной игре «Великий султан» 763 550 рублей. Истец уверял, что операции по переводу денежных средств на счёт создателей игры были сделаны «в одностороннем порядке, без согласия истца». Синицкий не получал SMS- уведомления о переводах денежных средств, поскольку не подключил эту услугу «в связи с экономией».

      Синицкий в суде требовал «признать действия по навязыванию платных услуг (платного контента) незаконными и необоснованными».

      Синицкий требовал взыскать с ответчиков 653 958 рублей и 109 517 индийских рупий, а также 5 тысяч рублей в качестве компенсации за моральный вред и 50% штрафа за несоблюдение в добровольном порядке удовлетворения требований потребителя.

      Суд установил, что на странице игры есть информация о наличии в ней микротранзакий стоимостью до 7490 рублей. Синицкий, в свою очередь, принял условия использования игры «Великий султан» при первом запуске проекта. Суд отметил, что истец был осведомлён об особенностях монетизации игры.

      Суд в удовлетворении исковых требований Синицкого отказал.
      Ответить
      • У меня один вопрос: зачем ему индийские рупии?
        Ответить
        • по приколу чисто. Ты видел когда-нить рупии?
          Ответить
        • Чтобы стать великим султаном.
          Ответить
        • Кстати, одна индийская рупия сейчас равна одному российскому рублю. Удобно.
          Ответить
          • Эээ... а почему так ровно? Гугл прям 1.00 показал.
            Ответить
            • Чому б ні.

              У меня недавно после месячного платежа за ГуглДиск (кривое число с копейками) на карте осталась красивая сумма, кратная тысяче
              Ответить
            • показать все, что скрытоvanished
              Ответить
            • На https://www.xe.com/currencyconverter/convert/?Amount=1&From=RUB&To=INR более понятно: «1 INR = 1.00437 RUB». Округление до двух знаков после запятой как раз даёт 1.00 ровно.

              UPD: https://www.google.com/search?q=10000 inr to rub -> «10 000 Индийская рупия равно 10 060,82 Российский рубль».
              Ответить
              • person working in India typically earns around 31,900 INR per month
                Медианная зарплата россиян составляет 35 тысяч рублей

                Хинди руси бхай бхай, в общем
                Ответить
      • >поскольку не подключил эту услугу «в связи с экономией».
        У тинькова уведомление стоит 50 рублей в месяц.

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

                  * https://www.alamy.com/stock-photo/toi-toi-toilets.html
                  Ответить
                • Да норм, рандома поменьше чем в оригинале и автопилот отключить можно.
                  Ответить
                  • А, так ты про «первый искусственный спутник Земли, разработанный в Германии»?
                    Ответить
      • показать все, что скрытоvanished
        Ответить
        • > какой бы султан

          Великий. Люди должны вовремя отворачиваться и не смотреть. Иначе им пизда.
          Ответить
          • напоминает анекдот про армянский вирус. иногда еще встречаются варианты "еврейский" или "молдавский".
            Знаешь?
            Ответить
          • Как в «Лампе Аладдина»:
            — Прикажите ему, чтобы он посмотрел на меня.
            — Но, если он посмотрит на Вас, тогда придётся отрубить ему голову!
            — Ну и збс
            Ответить
    • Перекат!

      https://govnokod.ru/26890
      https://govnokod.xyz/_26890/
      Ответить

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