1. PHP / Говнокод #26827

    0

    1. 1
    Именно поэтому я за «PHP».

    Запостил: gostinho, 29 Июля 2020

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

    • показать все, что скрытоvanished
      Ответить
      • На вкус, как «Wordpress».
        Ответить
        • Спасибо, сэр
          Ответить
          • Почему на сайте про говно так мало мух?
            Ответить
            • PHP (5602)

              5602 мухи не могут ошибаться
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • Проснувшись однажды утром после беспокойного сна, Грегор Замза обнаружил, что он у себя в постели превратился в страшное «PHP»
                Ответить
            • А у тебя есть принцимп?
              Ответить
              • npuHLjuMn_Myxu
                Ответить
              • Так, стоп, ты сам у себя спросил?
                Ответить
                • Ты чего, Муху от Макаки отличить не можешь??
                  Ответить
                • Почему бы и не поговорить с умным человеком
                  Ответить
              • Мой одноклассник как-то в самостоятельной работе по истории перепутал и написал вместо «Гаврило Принцип» «Гаврило Причина»
                Ответить
                • > Гаврило Принцип
                  Надо же, буквально на днях про него песню слышал.
                  Ответить
                  • Это какую?
                    Ответить
                  • На сербском?

                    * https://en.wikipedia.org/wiki/Remove_Kebab
                    Ответить
                    • На английском.

                      https://www.youtube.com/watch?v=peCu-i6XT88
                      Ответить
                      • Служил Гаврило патриотом

                        Внезапно внятное призношение, можно английский качать
                        Ответить
                        • > Внезапно внятное призношение, можно английский качать
                          Рекомендую
                          https://www.youtube.com/channel/UCm9K6rby98W8JigLoZOh6FQ
                          . Один из самых приятных англоязычных каналов, которых я видел.
                          Ответить
                          • Да вот так наслушаешься хорошо поставленные внятные голоса, а потом тебе реальностью по темечку:

                            https://www.youtube.com/watch?v=jsUvcjk8J5c
                            Ответить
                      • Как если бы встретились Брегович и Гоголь Борделло
                        Ответить
                        • Кстати да, на Бреговича похожи, только у них безуминки и веселья всё же чуть меньше (хотя и не во всех песнях).
                          Ответить
        • Новый «Орбит свежий Wordpress». На вкус как свежий Wordpress!
          Ответить
      • [Notice: Undefined variable p]ath in /var/www/wp_cms/wp-content/plugins/civicrm/civicrm/Civi/Core/Paths.php on line 200

        Какая ирония )))
        Ответить
    • https://phprussia.ru/moscow/2020/abstracts/5540
      Компиляция Haxe в PHP

      https://phprussia.ru/moscow/2020/abstracts/6648
      Разработка расширений для PHP ... на PHP!

      Именно поэтому.
      Ответить
      • Шел 2020-й год, на конференции ПХП можно было узнать

        -- Зачем нужны ORM?
        -- ActiveRecord vs DataMapper.
        -- И одной из метрик автоматического тестирования является Code Coverage



        Хотелось бы еще послушать таких докладов:
        * Структурное программирование -- ключ к улучшению кода
        * ООП: инновационный подход 21-го века
        * SQL инъекции: как избежать?
        Ответить
      • Haxep давно так умеет. Собственно он и интересен тем, что может компилироваться в разные языки. Можно, например, компилировать в «PHP» и в «JS», когда код фронтенда и бекенда частично дублируется.

        Мы тут ещё недавно обсуждали «Zephir» — пыхоподобный язык программирования, предназначенный исключительно для написания расширений для «PHP». Оказалось, что у зефира привкус «PHP» или даже «JS» (неожиданно, правда?):
        https://govnokod.ru/26733
        Ответить
        • Веб -- какашка, но возможность писать фронт и бек на одном языке делает её чуть менее какашкой.

          Я реально знаю кейсы, когда логика валидации написана два раза: на JS и на беке (и иногда еще на уровне ограничений в базе, лол).

          Это отвратительно!

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

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

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

            >Чтобы UI не зависало. Какой багор )))
            Багор действительно. Я видел как патчат обработку евентов чтобы делать модальный диалог, но это кал
            Лучше такие задачи выносить на другой тред, и использовать что-то типа async/await (в решеточке оно есть)
            Ответить
            • Жопа в том, что решений у этой задачи нет. Нельзя прервать тред в произвольном месте внутри цикла. Это undefined behavior. После этого может аллокатор сдохнуть, лочка какая-нибудь залипнет или что-нибудь ещё отвалится.

              Либо ты пытаешься тормознуть прогу на обращениях к ядру и получить ошибку (тот самый APC в винде или EINTR в линуксе). Либо ты какой-то флажок для треда выставляешь и ждёшь пока он сам съебёт. Либо ты убиваешь весь процесс нахуй.

              Даже в джаве и шарпе вроде как interrupted exception в произвольный момент не вбросить.
              Ответить
              • Это правда: между двумя случайными инструкциями нельзя влазить, особенно если они в критической секции.

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

                    Я думал, там N потоков, каждый сосет из очереди запросы и обрабатывает
                    Ответить
                    • Х.з., я почему-то всегда думал, что там N процессов. Апач же спавнил кучу воркеров.
                      Ответить
                      • Могу ошибаться, но кажется что воркер все равно переиспользуется: и мрет только после max request per child.
                        Иначе чем это лучше CGI?

                        Но вообще похуй на паче

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

                    while(1){}

                    ?
                    Ответить
                    • Как нехуй делать.
                      https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-terminatethread
                      Ответить
                      • TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination.
                        Ответить
                      • Отлично.
                        А если я оберну это в критикал секцию?
                        Ответить
                        • Ну флажок чекай. Я думаю пых так и делает, он же интерпретатор, ему можно. Вряд ли он по таймауту в сишной функции может что-то убить кроме всего процесса.
                          Ответить
                          • Скажешь, нельзя написать такой код на пыхе, который будет не убить безопасно?
                            Ответить
                            • Если в сишном экстеншене повиснет - скорее всего весь воркер на помойку отправится. Ну я не вижу других вариантов в этом случае.
                              Ответить
                              • а пользователский код весь безопасный для убивания?
                                Ответить
                        • Ну и что? Поток всё равно убьётся.
                          Ответить
                          • Испортив тебе рантайм же, не?
                            Объект какой-нить не осовободица
                            Ответить
                            • Ну не синхронизируй этот поток, какая разница. И проверь заодно, что он опасных функций из kernel32 не зовёт.
                              Ответить
                              • > опасных функций

                                Не аллоцирует память, не ходит в сеть, не берёт лочки, не трогает глобальный стейт. Нахуй он тогда нужен то? Тупо матан какой-то на приватной структуре?
                                Ответить
                                • Ну, в теории ресурсы ему можно выделять перед запуском, и выделять дополнительные по мере необходимости (через какую-нибудь lock-free поебень). А ещё можно останавливать поток и смотреть, что он в данный момент делает.

                                  Но, конечно, «PHP» для этого слишком глуп.
                                  Ответить
                                  • > lock-free поебень

                                    А вот кстати я не уверен что среднестатистическая lock-free поебень готова к крашу участников...
                                    Ответить
                              • стоп)

                                Смотри. Я пыхарь. Я написал какой-то код. Этот какой-то код должен помереть через 30 секунд. Чтобы он ни делал.

                                Пых ставит таймер в линксе или APC в винде или просто на другом потоке поджыдает, а потом делает ``pthread_kill`` или ``TerminateThread``

                                Вопрос: как пых знает, что он не сломает рантайм? Он всегда весь код делает безопасным?
                                Ответить
                                • Доку ниже кинул. Пых меряет только время работы интерпретатора. А как на винде сделали — хуй знает.
                                  Ответить
                                • А что, если дочерний процесс будет время от времени сигналить в родительский о том, сколько он уже крутится и какие ресурсы выделил?
                                  Ответить
                                  • Если дочерний процесс есть, то проще его целиком и кильнуть по таймауту.
                                    Ответить
                                    • Я ебанулся и написал процесс вместо тред.
                                      Ответить
                    • Ну такой то можно убить, он пустой и никуда не лезет.
                      Ответить
                • https://www.php.net/manual/ru/function.set-time-limit.php
                  Функция set_time_limit() и директива max_execution_time влияют
                  на время выполнения только самого скрипта. Время, затраченное
                  на различные действия вне скрипта, такие как системные вызовы
                  функции system(), потоковые операции, запросы к базам данных
                  и т.п. не включаются в расчет времени выполнения скрипта.
                  Это не относится к системам Windows, где расчитывается абсолютное
                  время выполнения.
                  Ответить
                  • понятно

                    то-есть если я вошел в syscall, и провёл там 3 часа, то я сам себе злобный бртн

                    Как на винде -- интересно, да
                    Хотя нет, не интересно. Это же пых
                    Ответить
                    • > то-есть если я вошел в syscall, и провёл там 3 часа, то я сам себе злобный бртн
                      Угу. В таком случае, скорее всего, «Апач» просто убьёт воркера, как Борманд выше написал.
                      Ответить
                  • то есть на винде оно меряет одно, а на никсах другое? как прекрасно )))
                    Ответить
            • Короче из того что пока нашёл - да, он взводит таймер через setitimer и ждёт сигнала. А потом вызывает какой-то обработчик.

              З.Ы. А в обработчике ставится бит PHP_CONNECTION_TIMEOUT в connection_status, который проверяется в куче мест и ты даже видишь его из пыхи.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну там таймер ещё раз запускается с hard timeout после обычного таймаута. Судя по всему 2 секунды скрипту даётся чтобы сдохнуть добровольно. А потом exit.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Потому что процесс дохнет весь к хуям вместе с хендлами и памятью. Ну с shared memory разве что кого-то может зацепить.

                      А у треда почти всё расшарено с другими тредами. Там вообще не понятно что чистить, ибо большая часть объектов принадлежит процессу в целом.

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

                      А быстрые мутексы типа позиксовых толком и не отпустишь, емнип. Они для ядра вообще не объекты.
                      Ответить
          • > Application.ProcessEventLoop();

            > Чтобы UI не зависало. Какой багор )))

            Это наследие VB.

            Там это же самое делалось DoEvents.
            Ответить
            • Недокооперативная многозадачность.
              Ответить
              • >Недокооперативная

                Сейчас все пищат от async: той же самой кооперативной, просто с сахаром
                Ответить
                • Ну async всё-таки получше чем эти залупы посреди кода.
                  Ответить
                  • Конечно лучше, потому что с сахаром.
                    Но кто, скажите мне, не наябывался пися случайно в асинхронной процедуре sleep вместо delay и не вызывал оттуда случайно блокирующий синхронный IO?
                    Ответить
                  • А как имеено работает этот async? Одинаковая ли его семантика в разных языках?

                    Я как-то прошёл мимо современных тенденций многопоточности.
                    Ответить
                    • Более-ли-менее похожая везде.

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

                      Псевдокот
                      async fun foo() {
                        print("hello");
                        delay(1000); //тред уходит из функции, и не зайдет в нее пока не пройдет секунда
                        print(2); //тред вернулся
                        page = getHttpPage("http://ya.ru"); //Посылается запрос по сети асинхронно, когда будет результат -- тред вернется в это место с результатом
                      }


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

                        Иам внутри вмонтирован тред-пул и тред пока async ждёт может заниматься другими делами?

                        На delay тоже async нужно ставить?

                        PS: и await не вижу.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • >а ты как-бы выходишь из функции, но сохраняешь ее контекст

                            Да, я понял. Тред идёт заниматься другими делами. Типа легковесная многозадачность.

                            >Тред обрабатывает другие функции
                            А что будет если пул занят другими функциями и они бобровольно не возвращают потоки?
                            Не зависнет ли мой поток с delay(1000), на неопределённое время?
                            Ответить
                            • Со sleep(1000) зависнет и заблочит все остальные таски.
                              Ответить
                              • А если я отдал поток на секундочку, малознакомому дяде в кепке и трениках, чисто подержать.

                                И поток у меня отжали для каких-то тяжёлых вычислений. Его же мне вернут не через секунду, а после окончания расчёта?
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Так нет. Он не блокирующий в смысле IO. Он не ждёт просто что-то долго считает, типа брутфорсит делитель для RSA.

                                    Пример: есть старое-доброе winapi приложение. Одна часть считает сложную ма-тема-тику, вторая перерисовывает окно.

                                    Если сложный расчёт выполняется долго, окно «подвисает».

                                    Выход: в сложном расчёте нужны DispatchMessage/DoEvents. Опять та же питушня.
                                    Ответить
                                    • Сложный расчёт ты кидаешь в отдельный поток и пусть он там считает сколько ему надо. А при забрасывании его в поток ты получаешь future на которой ты делаешь await. И гуёвый тред отпускает на время расчёта.
                                      Ответить
                                      • >Сложный расчёт ты кидаешь в отдельный поток и пусть он там считает сколько ему надо.

                                        Как мне в этой парадигме управлять разными пулами?
                                        Я думал await использует какой-то один неявный системный пул, как в крестах std::launch::async.
                                        Ответить
                                        • > Как мне в этой парадигме управлять разными пулами?
                                          В «Python» event loop можно создать явно и позвать на нём «run_until_complete()». См. https://docs.python.org/3/library/asyncio-task.html.
                                          Ответить
                                        • await - это просто няшный способ подписаться на результат асинхронной операции. Ему совершенно похуй на каких тредах эта самая операция крутится и крутится ли вообще.
                                          Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                    • Два треда ж просто.

                                      Я не знаю, как там в шарпе.

                                      В Свифте делаешь отдельную DispatchQueue или вообще берёшь готовую и херячишь на ней тяжёлую работу, потом результат для отрисовки бросаешь на main, которая отвечает за UI.

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

                                          Используется, конечно.
                                          Ответить
                                      • Так а где в синтаксисе async/await указание очередей?
                                        Ответить
                                        • Не очень понял вопрос.

                                          В Свифте нет async/await.

                                          В Шарпе нет очередей (?)
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • Просто тю.

                                              А чо было не вернуться на тот же тред, который был до await'а?
                                              Ответить
                                          • >В Шарпе нет очередей (?)

                                            Думаю в реализации await очередь должна быть непременно. Причём блокирующая.

                                            Иначе поток обрабатывающий питухов, просто уйдёт в busy wait. Если они все вдруг решать ждать и dispatch loop останется без работы.
                                            Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                              • >Так что да, внутри оно обрабатывает все события, и вероятно засыпает

                                                Просто я в своё время насмотрелся на самопальное говнище с busy wait.
                                                — Почему программа стабильно грузит одно ядро на 100%?
                                                — Ну кто ж мог подумать, что таски кончатся?
                                                Ответить
                                            • насколько помню, там для текущего контекста есть свой TaskExecutor (по умолчанию дефолтный), в который будет падать весь асинк
                                              Ответить
                                        • > указание очередей

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

                                            Как?
                                            Ответить
                                            • Да хрен знает, я сварщик не настоящий )))

                                              Какой-нибудь var res = await pool.execute(LongCalculation);
                                              Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • То ли дело жс, где один поток и никто такой фигнёй не забивает себе голову.
                                                  Ответить
                                                  • Ну тут вроде эти коллбеки могут зваться либо прям на том треде где асинхронная таска закончилась либо в ui треде - таска по завершению закьюит коллбек туда. Какой-то флажок даже куда-то передать можно было чтобы выбрать режим...

                                                    По дефолту вроде через ui тред чтобы меньше ебли было.

                                                    Но я сварщик не настоящий.
                                                    Ответить
                                                    • показать все, что скрытоvanished
                                                      Ответить
                                                      • >А для IO могут и не взять, ну анверное потому, что асинхролнный API реализует сама OS

                                                        Как-то сложно всё получается. Пулы, треды, корутины, IO, очереди какие-то.

                                                        Голова пухнет.

                                                        Взять всё, да и assParallelнуть…
                                                        Ответить
                                                        • показать все, что скрытоvanished
                                                          Ответить
                                                        • Короче дочитал как это работает.

                                                          У тредов на которые можно захуйнуть коллбек может быть SynchronizationContext. В частности у UI треда он всегда есть.

                                                          И по-умолчанию все работает тупо и понятно - если у текущего треда контекст есть перед вызовом await, то продолжение будет в том же контексте. Т.е. если ты писал обработчик для гуйни и ушел в await то код потом "возобновится" в ui треде и все безопасно. Если же контекста нету - то прям на том треде где таска завершилась.

                                                          Ну и можно сказать await something.ConfigureAwait(false) и сделать вид что контекста у тебя не было.
                                                          Ответить
                                                          • ну короче так же примерно, как в коко

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

                                                            Тащемто мыслить надо не в терминах нитей, а в терминах контекст

                                                            Хочу UI контекст, или еще какой
                                                            Ответить
                            • Зависнет.

                              И если ты вместо асинхронного API для работы с IO возьмешь синхронный -- тоже зависнет.

                              Нужно быть аккуратным.

                              Это напоминает кооперативную многозадачность: каждая корутина отвественна за всю систему
                              Ответить
                            • delay(1000) на самом деле говорит, что управление вернется не раньше, чем через 1000 миллисекунд, если никто к этому моменту не освободится, то и управление не будет получено
                              Ответить
                        • Если мы говорим про C#, то надо ставить await на те методы, которые помечены, как async.

                          Если переписать на колбек, то тогда придётся делать мутекс. А с async'ом не надо.

                          Если же интересует вопрос, как задачи квантуются внутри лупа (а луп крутится внутри одного потока), то меня тоже интересует :)
                          Ответить
                          • >Если же интересует вопрос, как задачи квантуются внутри лупа (а луп крутится внутри одного потока)

                            Да. Непонятна точная механика шедулинга.
                            Ответить
                            • > точная механика шедулинга

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

                              Просто конпелятор за тебя нарубает красивый линейный код на уёбищные коллбеки. И помогает стейт протащить. Всё.

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

                                Вот и думаю: или оно до горя тупое, или я что-то не понимаю.
                                Ответить
                                • Да там всё просто.

                                  Асинхронная операция возвращает тебе future. Когда ты делаешь на ней await твоя async функция тупо возвращает управление. Но перед этим она подписывает следующий свой фрагмент на завершение этого future.

                                  Вот и всё :)

                                  Ты можешь все это делать руками без async/await. Все кишки доступны.
                                  Ответить
                                  • Ну я понял.

                                    Всё-таки на Сишке такое хрен в чистом виде не нахуевертишь.
                                    Да и в других языках тоже. Из-за того что нужно прыгать на указатель внутри функции.

                                    Разве что запускать все потоки в одном общем пуле с work stealing.
                                    Ответить
                                    • Ну дык и в шарпе не нахуевертишь. Тут же специальная магия конпелятора, которая тело функции нарубает на фрагменты после каждого await и локалки выносит в контекст. Собственно поэтому они и помечены async. «Впрыгивание в середину» тут чисто логическое, физически каждый фрагмент - это отдельный коллбек.
                                      Ответить
                                      • А могли бы дрочить спинлок
                                        Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • Дык async/await - это и есть continuation passing style из древней функцианальщины. Просто засахаренный.
                                          Ответить
                                          • Ну значит у меня в подсознании родилось верное слово, надо же
                                            Ответить
                                        • >Она позволяла как раз уйти из функции, а потом вернуться с сохранением контекста

                                          >прикрутить суда понятие континуейшена
                                          Да, это же копрограммы (coroutines).

                                          https://en.wikipedia.org/wiki/Coroutine
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • Дык везде надо тред крутить. Все эти корутины, async функции и т.п. они пассивны. Пока не пнёшь - в следующий стейт не перейдёт. Просто в шарпе этот тред уже прилагается изкоробки и крутит виндовый ивентлуп.
                                              Ответить
                                              • ну вот в C# достаточно сказать GetResult
                                                https://i.postimg.cc/6Qr0WjJL/waiter.png
                                                В питоне -- run(..)

                                                А в луа нужно ходить по корутинам, и каждой говорить resume, ну или цикл самому написать

                                                Хотя пример не совсем честный, там вроде других тредов не создается

                                                но могу наврать
                                                Хуй знает точно
                                                Золотой
                                                Ответить
                                                • Ну просто в lua голые корутины. А в других языках к ним целый фреймворк с готовым лупом приложен.
                                                  Ответить
                                          • «Копрограмма» звучит как медицинский термин: кардиограмма, томограмма...
                                            Ответить
                                      • > Тут же специальная магия конпелятора, которая тело функции нарубает на фрагменты после каждого await
                                        Логично. Ну не такой уж сахар тогда эти await.

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

                                        Вышло в принципе неплохо, но всё-равно уродливо как-то.
                                        Ответить
                                        • > автоинкрементом стейта

                                          ctx->state = __LINE__; return; case __LINE__:
                                          Ответить
                                          • > ctx->state = __LINE__; return; case __LINE__:
                                            Супер!

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

                                        Ага, я понял. По сути отдельный function(){}. И чем ниже, тем вложенность больше.

                                        А благодаря эти колобки просто линеаризует.

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

                                      в жабе всё так, там нет асинк-авейта, но есть CompletableFuture с возможностью указания, в каком пуле исполняться
                                      Ответить
                                      • Я кстати поспал и понял что как раз в языках кроме Сишки, эту yield и await очень проблематично сделать средствами языка, без перепитушни.

                                        Т.к. в Няшной есть макросы и возможность прыгнуть switcheм в самую гущу цикла.

                                        А в анскильных Жс, Жабах и Шарпах такую возможность убрали.

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

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

                                  Запрос к удаленному API занимает 1 сек.

                                  Если у твоего веб-сервера 10 потоков, и пришло 11 пользователей, то 11-й пользователь ждет осовбождения потока, хотя процессор ничем не занят: он тупо ждет, пока пакетики по сети летят.

                                  Что делать программисту?
                                  Использовать callback, но это лапша.

                                  А хочется без лапши
                                  Хочется писать последовательно, как если бы ты простой скрипт писал.

                                  Вот async позволяет писать без лапши и просто.
                                  Ответить
                                  • >Если у твоего веб-сервера 10 потоков, и пришло 11 пользователей, то 11-й пользователь ждет осовбождения потока

                                    Да понятно. Вёб-поебень для жскрипт-лалок.
                                    Смутно вспоминается баззворд «реактивное погромирование».


                                    >Что делать программисту?
                                    В «POSIX» есть мультиплексирование через select(). Именно поэтому я за «Сишку».
                                    Ответить
                            • Чот думаю, что никак особо.

                              Пришло замыкание, оно целиком выполняется на следующем витке.
                              Ответить
                    • Чото такое там генерируется под капотом

                      https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.iasyncst atemachine?redirectedfrom=MSDN&view=netc ore-3.1
                      Ответить
                    • Да самая обычная стейтмашина с коллбеками. Просто выглядит для тебя как линейный код. Можешь на сишке нахуевертить что-то подобное через свич, только переменные негде хранить будет.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • > Но тебе придется использовать асинхронные API везде

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

                        Не могу пока въехать как это просто сделать.
                        Для этого же надо иметь ГОМОИКОННОСТЬ, или интерпретировать кусок функции чтобы ссылаться на произвольное место кода.
                        Ответить
                        • Во время await ты подписываешься на завершение асинхронной хуйни и передаёшь коллбеком самого себя. В стейте у тебя лежат "локальные переменные" и точка с которой "продолжается" исполнение. Свичом впрыгиваешь в нужное место функции и поехали дальше. Вот и вся магия.
                          Ответить
                          • >стейте у тебя лежат "локальные переменные" и точка с которой "продолжается" исполнение

                            Примерно понятно.
                            Но как в сишке хранить «локальные переменные» без копрограммной магии? Разве что struct/массив c конь-текстом функции.

                            А можно демо-пример на Сишке.
                            Ответить
                            • Структура с коньтекстом, да. Настоящие локальные переменные без поддержки конпелятора увы не запилить. Собственно поэтому такая "функция" в шарпе помечена как async.
                              Ответить
                            • Кстати майки эту модель async/await в крестостандарт протащить хотели (или ещё хотят?) Чтобы корутины в крестах делать.
                              Ответить
                              • Здравствуйте.
                                https://en.cppreference.com/w/cpp/language/coroutines
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • В Крестах кстати по-царски сделано:

                                    Стейт размещается на куче, но в случае тривиального случая компилятор может разместить его на стеке и даже заинлайнить.
                                    The call to operator new can be optimized out (even if custom allocator is used) if
                                    
                                        The lifetime of the coroutine state is strictly nested within the lifetime of the caller, and
                                        the size of coroutine frame is known at the call site 
                                    
                                    in that case, coroutine state is embedded in the caller's stack frame (if the caller is an ordinary function) or coroutine state (if the caller is a coroutine)
                                    Ответить
                                • Кококо_эвейт
                                  Ответить
                                • Спасибо.

                                  Если сделали в Крестах, тогда всё понятно.
                                  Впрочем я серьёзно, они очень хорошо описывают как оно под устроено капотом: and the data that is required to resume execution is stored separately from the stack
                                  coroutine state is allocated on the heap via non-array operator new.
                                  Ответить
                                  • > хорошо описывают как оно под устроено капотом

                                    Да и в шарповской доке, имхо, норм описано что делает await.
                                    Ответить
              • > недокооперативная

                советская
                Ответить
            • > Application.ProcessEventLoop();
              Почему я, глядя на этот вызов, чётко вижу многочисленные вызовы GetMessage()/TranslateMessage()/DispatchMessage()? Я ебанутый?
              Ответить
    • показать все, что скрытоvanished
      Ответить
      • Ещё нужен «Kokokotlin».
        Ответить
        • "PHP" (5603)
          Кресты (2511)
          Куча (1893)
          Решеточка (1878)
          Екмаговно (1839)
          ЙАЖА (1449)
          Няшная (981)
          BeginEnd (627)
          Лол (499)
          Питух (477)
          SQL Injeciton (410)
          Ненужное (292)
          [[NSЯбло alloc] init]; (202)
          =()= (190)
          event not found (173)
          Яuбy (138)
          Школоло (134)
          xor eax, eax (122)
          Таблы (41)
          Ябло(Свежее) (26)
          монада это просто моноид в категории эндофункторов (20)
          Goвно (8)
          Коко (5)
          Ответить
          • >Екмаговно (1839)
            ЙажаСцрипт?

            >Лол (499)
            >Ненужное (292)

            Час поздний, не въехал.
            Остальное — охуенно.

            Edit: 1C я бы назвал «НачатьПрограмму» или «КонецПопытки»
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • PHP (5603) C++ (2511) Куча (1893) C# (1878) JavaScript (1839) Java (1449) Си (981) Pascal (627) 1C (499) Python (477) SQL (410) ActionScript (292) Objective C (202) Perl (190) bash (173) Ruby (138) VisualBasic (134) Assembler (122) Lua (41) Swift (26) Haskell (20) Go (8) Kotlin (5)
              Ответить
              • Да я догадался посмотреть по циферкам.

                Просто Лол и Ненужное не говорят о том что внутри.

                Остальные категории охуенно, просто чудовищно self-descriptive. Я даже СтерторШкололо допёр.
                Ответить
                • Вот у меня Школоло ассоциируется с Pascal. Я бы не допер, что Школоло подразумевает VisualBasic. Возможно, смог бы догадаться до обычного Basic или FORTRAN или Python...
                  Ответить
                  • Пасцаль я отсёк методом исключения: т.к. BeginEnd было.

                    > FORTRAN
                    Что-то не слышал чтобы школоло на нём писало.

                    >Школоло ассоциируется с Pascal
                    Тараса застал?Впрочем он повзрослел и перешёл на Аду и Кресты.
                    Ответить
                    • >Тараса застал?
                      Да.
                      Хотя сейчас новое школоло немного на питон переходит.

                      >Что-то не слышал чтобы школоло на нём писало.
                      Ну школоло особо на нем и не писало, язык ученых был. Но в каком-то кружке по программирования могли на нем писать. В любом случае, в моем понимании FORTRAN ближе к школоло, чем VisualBasic.
                      Ответить
            • «Опердень».
              Ответить
            • Я бы назвал 1ç: OdinAss
              Ответить
              • Жопа Одина кстати норм название для этого раздела.
                Ответить
                • А мне «Апердень» понравилась. Чётко характеризует.
                  Ответить
          • > =()=
            А в крестах, помимо общеизвестного оператора «стремится» («while (x --> 0)») есть менее распространённый оператор «хуй»:
            bitMap &=~ bitFlag
            . Означает дословно «хуй тебе, а не bitFlag в bitMap».
            Ответить
            • Напомнило:
              https://graphics.stanford.edu/~seander/bithacks.html
              Ответить
            • Всё-таки не первый день сижу на ГК.
              Но какую извращённую фантазию нужно иметь, чтобы там хуй увидеть. Причём травмированный.

              На мой вкус отрицание нужно приклеивать к флагу.
              bitMap &= ~bitFlag;

              Оно-то конечно красиво, с точки зрения «вызвать у читателя WTF».
              x -=- a;
              x +=+ 42;
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • Сменить знак числа:
                x *=- 1;
                x /=- 1;
                Ответить
              • b = -~ a; // эквивалент b = a + 1; можно использовать как инкремент
                d = ~- c; // эквивалент d = c - 1; можно использовать как декремент
                Ответить
                • «Верёвочка»:
                  b = -~-~-~-~-~-~-~-~-~-~ a; // эквивалент b = a + 10;
                  d = ~-~-~-~-~-~-~-~-~-~- c; // эквивалент d = c - 10;
                  Ответить
              • Поместить в x минус единицу:
                x ^=~ x;
                Ответить
              • Проверка того, что x является степенью двойки:
                x &=~- x;
                if (x == 0) ...

                Да, используется оператор «хуй».

                https://ideone.com/m0Kgna
                Ответить
                • По сути это старый трюк, который убирает младший бит.

                  x &= x-1

                  Если бит единственный (x является степенью двойки) получается 0.
                  Ответить
                  • Или я туплю, или у тебя проверка не на степень, а на кратность
                    Ответить
                    • Нет, всё в порядке. Трюк старый и элегантный.
                      Если число состоит ровно из одного включённого бита (> x является степенью двойки), после которого следуют n нулей, то после вычитания единицы мы получим число из n двоичных единиц (для проверки вычти столбиком), например, 0b1000 - 1 == 0b0111. После «&» мы, очевидно, всегда получим ноль. А вот если включённых бит в числе как минимум джва, то старший из этих двух бит после вычитания единицы не изменится, и мы получим ненулевой результат: 0b101000 - 1 == 0b100111,
                      101000 
                            &
                      100111
                      ------
                      100000

                      .
                      Ответить
                  • Всё верно. Просто прикольно выглядит ~- x вместо x - 1, особенно когда ~- сливается с &=.
                    Ответить
            • показать все, что скрытоvanished
              Ответить
          • Всё понятно, хузу скоро лапти
            Ответить
      • «Гугл» уже начинает о чём-то догадываться. Ввожу в строку поиска «Яuбу». Он в ответ
        Показаны результаты по запросу Ruby
        Искать вместо этого Яuбy

        Если же его уговорить, что мне нужно именно «Яuбу», то он находит «хуз» и фильм «Cпаcaтeлu Яuбy».
        Ответить
        • А мне показывает http://pal/___/evo.com/gallery/displayimage.php?pid=77224 (порнография, дорвей, вводить без «/___/»). Какой багор )))
          Ответить
          • здоровенная бабища! и впечатление что она ротом хуй расплющила до толщины картона

            а с ваших комментариев так вообще проиграл
            Ответить
    • https://www.instagram.com/(null)

      какой бесконечный редирект )))
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • кто, блядь, в своем уме идет в компанию с названием "вэдээсина"?

        ответ: александр чистяков
        Ответить
      • Всё правильно пишут.

        Только многовато про алкашечку.

        > Нет, надо на свою голову организовывать никому ненужные попойки
        > не скудны на фантазию и задвигают что-то типа: пришёл на собеседование – получи бутылку Джек Дэниелс
        Гайд Хрюши: как схантить алкаша-синьора на вкусные настройки.
        Ответить
      • Компания типа российская, при этом чувак упоминает украинские сайты dou и djinni. Аутсорс и принципы понятия несовместимые.

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

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

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

              Эти два знака (2.6 и 2.7) существовать друг без друга не могут. Если с одной стороны узкого участка стоит знак 2.6, то с другой стороны обязательно стоит знак 2.7.
              Ответить
              • Перевёл на «ПДД».
                Ответить
                • { Вы случайно не middle ПДД? }
                  Ответить
                  • Мы используем Laravel, нам очень нужен человек с правами «M»
                    Ответить
                    • Не, ну согласись, это было бы интересно, если бы для того, чтобы писать на PHP нужно было раз там в три года проходить обследование, в том числе у нарколога и психиатра.
                      Ответить
                      • какой дефицит кадров )))
                        Ответить
                      • > писать на PHP
                        > проходить обследование у психиатра
                        Сразу негоден.
                        Ответить
                        • Ну кстати я наверное понимаю, что php не лучший в мире йезык и что не зря его хуесосят.

                          Но разве он намного хуже того же js?
                          Ответить
                          • Именно поэтому я за «PHP».
                            Ответить
                            • { Вы случайно не за «PHP» ? }
                              Ответить
                              • задай мне такой вопрос на собесе - я б вспотел
                                Ответить
                                • Особенно, если бы ты пришёл собеседоваться в CERN на OCaml
                                  Ответить
                                  • вот именно, что два ответа, и оба неправильных
                                    Ответить
                                    • Просто признайся, что ты не умеешь композером нейтрино ловить.

                                      > вот именно, что два ответа, и оба неправильных
                                      - вопрос Шрёдингера?
                                      Ответить
                                      • Вопрос Шрёдингера — это когда оба ответа правильные.
                                        Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • блядь, я вспотел

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

                                        мы на самом деле еще год назад познакомились через тндр. тогда не взлетело, сейчас просто чаёк попьем, поболтаем да посмотрим. там сложная история.
                                        Ответить
                                        • Заведи специальный тред, как встретитесь — транслируй туда в реальном времени происходящие события. Будешь каким текстовым стримером )))
                                          Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                          • У меня знакомый был. Если я с ним хотел встретиться в субботу и писал об этом в понедельник, он говорил: ну ещё столько времени, я не знаю, какие у меня планы. А, если я писал ему в пятницу, он отвечал, что уже всё расписано.

                                            И это пацан. А шо про тёлок говорить)
                                            Ответить
                                          • мы год назад разбежались
                                            Ответить
                                        • раз уж вспоминал вчера, реальный пример сложной истории в жизни юзера «Fike»:

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

                                          на почту приходит сообщение (напоминаю, происходит это на стыке второй и третьей декады сентября) - "Удачного полета шестого октября!"

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

                                          Ладно, иду в кассу. Там тоже очередь и та же история: надо будет доплатить, говорят. Я говорю - ну окей, аэрофлот ебаный, там был рейс на пятьдесят минут позже, давайте его. Они там щелкают в кампуктере и говорят: знаете, пока мы пиздели, его раскупили. Ну ладно, давайте тогда третий.

                                          Они говорят: надо доплатить.
                                          Я говорю: да, я смирился уже, давайте уже закончим с этим.
                                          Они говорят, нет, надо еще доплатить. Рейс-то уже дневной, стоит дороже )))
                                          Ответить
                                          • Доплатил, в общем (в сумме ушло в два раза больше денег, чем если бы успел на первый самолет). Я к этому моменту уже тридцать часов на ногах, дай, думаю, вздремну. Поставил будильники, вздремнул, умылся, и понял что еще не опаздываю, но уже по краешку.
                                            Бегу через все эти кордоны, обгоняю каких-то индусов (- Харри? - ДА, ПИЗДЕЦ КАК ХАРРИ!), роняю все, короче, успеваю к гейту за минуту до отлета.
                                            У гейта сидят три с половиной инвалида и спрашивают: а какого хуя ты приперся? Наш самолет только через полчаса, а тут ничего и никого не было.
                                            Я пиздую обратно к табло в другую сторону зала.

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

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

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

                            Есть конечно редкие проекты где и код аккуратный и тесты и т.п. Но в остальном - говнище редкостное. Даже популярные штуки типа того же вордпресса или джумлы.

                            А про типичные туториалы вообще молчу.

                            У жс с этим получше всё-таки.
                            Ответить
                          • Борманд распидалил как Боженька, так что добавить особо нечего. Отмечу лишь, что качество самого языка уже второстепенно. Язык это коммунити: это люди, фреймворки, инфраструктура, мануалы, форумы.

                            Всё это у пыха очень плохое. Глупые люди пишут глупые мануалы. Другие глупые люди учатся по глупым мануалам, и тоже становятся глупыми. Потом все вместе пишут глупые фреймворки. Работая с глупыми фреймворками люди получают глупый опыт, и начинают думать, что делать глупо это правильно.

                            То-есть дело не в том, что синтаксис кривой. Дело в эко-системе. Это трудно объяснить, если не попробовать самому
                            Ответить
                            • А началось всё с того, что язык поощрял глупость.
                              Ответить
                              • Вот и я думаю, что первичная проблема в языке.

                                Когда язык не форсит писать адекватно хотя бы чуть-чуть, то и будет кулебяка.

                                Но JS производит на меня точно такое же впечатление.

                                лефтпады, лапша из колбеков и промисов, языки над языками.

                                Но фреймворки некоторые вроде ничё, да, подслащивают пилюлю
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Ruby, на мой взгляд, вообще ничем не стал. Уж лучше с Пистоном сравнивать
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Ну такое.

                                      Например BDD нужен 10 бизнесам, а интернет-магазин 10000.
                                      Бизнес пойдёт и выберет пых, потому шо проще

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

                                      Именно поэтому я за «PHP».
                                      Ответить
                                      • Они на скакалку вроде переписали.

                                        Кстати, из всей скриптопараши шустрее всего работает небось JS: там жжит же
                                        Ответить
                                  • > Ruby, на мой взгляд, вообще ничем не стал.

                                    Сначала Яибу стал на рельсы.
                                    А вот потом уже стал ничем.
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                    • А рельсы задали моду на фреймворки в других языках.
                                      Ответить
                                      • Как ни смешно про это говорить, но фреймворки в питоне были до рельс.

                                        Офигительный совершенно Zope был в питоне (слишком хороший для вебговна).

                                        Но именно рельсы сделали их популярными.

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

                                            Вот смотри, какой код
                                            $arFields["MY_DATA"] = "<span>".$arFields["ID"].":</span><b>".$arFields["NAME"]."</b>";

                                            https://www.cyberforum.ru/1c-bitrix/thread2456898.html

                                            Или вот (покрути направо, там сюрприз):
                                            $orderList .=  "<tr style='border: 1px solid grey;'>
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".'<img style="width:80px;height:80px; " src="'.$arBasketItem["PREVIEW_PICTURE"].'">'."
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".'<a href="'.$arBasketItem["DETAIL_PAGE_URL"].'">'.$arBasketItem['NAME'].'</a>'."</td> <!--Наименование главного товара ссылкой + цвет-->
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".$arBasketItem['CML2_ARTICLE']."</td><!--Артикул-->
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".$arBasketItem['QUANTITY']." ".$arMeasure[$arBasketItem['PRODUCT_ID']]['MEASURE']['SYMBOL_RUS']."</td><!--Количество-->
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".str_replace('.0000','',$arBasketItem['PRICE']).' руб.'."</td><!--Цена-->
                                                            <td style='padding:10px;vertical-align:middle;border: 1px solid grey;text-align:center;'>".str_replace('#', number_format($curPrice, $arCurrency["DECIMALS"], $arCurrency["DEC_POINT"], $currencyThousandsSep), $arCurrency['FORMAT_STRING'])."</td><!--Сумма-->
                                                            <tr>";

                                            В этом же файле происходит отправка данных
                                            CEvent::Send("ONE_CLICK", $SITE_ID, $arMessageFields);
                                            Ответить
                                            • Куча мест для XSS, адская смесь апострофов и кавычек, чтобы только бекслеш не использовать, адское форматирование чисел (str_replace('.0000','', число)). Как вкусно!
                                              Ответить
                                        • Подтверждаю. Каждый уважающий себя пыхер в своей жизни должен сделать три вещи: использовать «собачку» или «error_reporting(0);», установить «WordPress» и написать свою «CMS».
                                          Ответить
                                          • В каждом CMS должень класс Db для работы с базой данных
                                            У каждого свой
                                            Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • Ну, ты понял, зачем оно в файл сохраняет?
                                                  Ответить
                                                  • Чтобы сервер диском не хрустел, надо ему посоветовать сохранять файл в кэше в оперативке:
                                                    file_put_contents('php://memory', $content);

                                                    Так пирфоманс будет больше.

                                                    https://www.php.net/manual/ru/wrappers.php.php
                                                    Ответить
                                              • Сама ручная линейная поклейка XML не криминал, потому что фреймворки зачастую генерируют XML медленнее, чем ручная поклейка. Однако, нужно быть очень внимательным, чтобы не пропустить неэкранированные данные (а я подозреваю, что эти макаки ничего не экранировали, и тут место для XSS).

                                                Хотя в «PHP» всё есть:
                                                https://www.php.net/manual/ru/book.soap.php

                                                Ржака в записи на диск ради подсчёта объёма из-за перегруженной strlen.

                                                https://www.php.net/manual/ru/function.mb-strlen.php

                                                Второй комментарий: «If you need length of string in bytes (strlen cannot be trusted anymore because of mbstring.func_overload) you should use <?php mb_strlen($string, '8bit'); ?>».

                                                То есть макака даже не осилила открыть документацию по «PHP».
                                                Ответить
                                                • Да можно хотя-бы собрать его DOMом, а лучше взять клиента SOAP.
                                                  Я не верю, что сборка XML домом будет твоим ботлнеком:)

                                                  Да, макака присоветовала, а другая макака поблагодарила. Потом еще кому-нить расскажет. Так вот и распостраняются бест практисес
                                                  Ответить
                                                  • Про перегрузку strlen я не знал. Неужели какие-то проекты требуют эту перегрузку? Кстати, в 7.2 эта перегрузка deprecated:
                                                    https://www.php.net/manual/en/mbstring.overload.php

                                                    После обновления «PHP» куча проектов сломается.
                                                    Ответить
                                                    • какое говно:) Впрочем, переход на многобайтовку многие скриптовички пережили не просто

                                                      Лучше сразу делать двубайтовую кодировку и не думать ни о чём
                                                      Ответить
                                                      • > Лучше сразу делать двубайтовую кодировку и не думать ни о чём
                                                        Тогда придётся думать про

                                                        [!] Application was halted by an exception.
                                                        Debug-mode is off.
                                                        Ответить
                                                        • Белый человек решает проблему в питоне
                                                          >>> len(bytes("уй", "utf-8")) # 4

                                                          Белый человек решает проблему в перле
                                                          use utf8;
                                                          use Encode qw/encode_utf8/;
                                                          
                                                          print scalar split //, encode_utf8 "уй"; #4


                                                          Пыхобыдло решает проблему:
                                                          file_put_contents($_SERVER["DOCUMENT_ROOT"]."/upload/tmp/tmp.xml", $content);
                                                          $content_length = filesize($_SERVER["DOCUMENT_ROOT"]."/upload/tmp/tmp.xml");

                                                          ахах
                                                          Ответить
                                                          • Ну кстати напомнило, как в одном iOS-проекте решалась задача потоковой обработки данных из сети. Поскольку вроде как InputStream и OutputStream нельзя связать вместе, то приходилось создавать временный файл, в который один стрим писал, а второй из него читал
                                                            Ответить
                                                            • показать все, что скрытоvanished
                                                              Ответить
                                                              • > писать в другой кусочками

                                                                В комменте десктопа жопа походу в том, что тебе надо передать соответствующие стримы в какие-то функции. Т.е. видимо кольцевой буфер нужен с джвумя интерфейсами, а его почему-то не завезли. Поэтому крутят через файл.
                                                                Ответить
                                                                • Так почему через память не крутить?
                                                                  Псевдокот
                                                                  MemoryInputStream foo = CreateInputStream(4096);
                                                                  NasriVStream(foo);
                                                                  outputStream.write(foo.getContent())


                                                                  спутил инп и аутп, ну и похуй

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

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

                                                                          Мне было нужно запустить два процесса, и подменить им хендлы stdout и stdin
                                                                          Ответить
                                                                • Да, кольцевой буфер только в пропозалах

                                                                  https://forums.swift.org/t/circular-buffer/34534

                                                                  Вся эта херня нужна была для попытки сделать парсинг json'а на стримах, но оказалась излишней, потому что
                                                                  https://govnokod.ru/25705
                                                                  Ответить
                                                                  • > кольцевой буфер только в пропозалах

                                                                    Нинужно. Любой сишник запилит за пять минут.
                                                                    Ответить
                                                      • Продолжаем смеяться:
                                                        https://www.php.net/manual/en/function.mb-strlen.php

                                                        Функция mb_strlen появилась в «PHP 4.0.6». То есть даже не в пятёрке, а в четвёрке! Я напоминаю, что «PHP4» — это 2000-й год, это было 20 (двадцать) лет назад.

                                                        Макаки до сих пор продолжают использовать strlen и ждут, когда их творение распидорасит многобайтовыми символами.

                                                        А из «PHP3» случайно какие-нибудь «бест практисес» не сохранились?
                                                        Ответить
                                                    • показать все, что скрытоvanished
                                                      Ответить
                                                      • Я жирным выделил: mb_strlen($string, '8bit').

                                                        Так можно с PHP4, т. е. уже 20 лет как.
                                                        Ответить
                                                        • Комментарий полугодовой давности.

                                                          It may not be clear whether PHP actually supports utf-8, which is the current de facto standard character encoding for Web documents, which supports most human languages. The good news is: it does.

                                                          I wrote a test program which successfully reads in a utf-8 file (without BOM) and manipulates the characters using mb_substr, mb_strlen, and mb_strpos (mb_substr should normally be avoided, as it must always start its search at character position 0).

                                                          The results with a variety of Unicode test characters in utf-8 encoding, up to four bytes in length, were mostly correct, except that accent marks were always mistakenly treated as separate characters instead of being combined with the previous character; this problem can be worked around by programming, when necessary.

                                                          Похоже, с PHP лучше не быть ни в чём уверенным
                                                          Ответить
                                                          • У чувака проблема с «акцентами». Например, в немецком языке умляуты можно написать двумя способами: одним кодпоинтом (ü) и двумя кодпоинтами (ü — здесь сначала я вывел букву «u», а вслед за ней так называемый «combining symbol», состоящий из двух точек, проверь).

                                                            Так вот его беспокоит, что в «PHP» функция mb_strlen второй вариант посчитает за два символа. Его, видимо, ещё беспокоит, что залго будет посчитано за кучу символов.

                                                            Хотя на этот случай есть функция grapheme_strlen:
                                                            https://www.php.net/manual/ru/function.grapheme-strlen.php

                                                            Последняя не считает «combining symbols» за отдельные символы.

                                                            Конкретно в данном случае проблема не в «PHP», а в том, что некоторые не умеют работать с «Unicode».
                                                            Ответить
                                                        • показать все, что скрытоvanished
                                                          Ответить
                                                • Пиздец. Даже такая, казалось бы, простейшая функция, как strlen(), и та имеет подвох.
                                                  В шаблонизаторе осталась хоть одна функция, поведение которой не зависит от ублюдочного рнр.іпі?
                                                  Ответить
                                • Пых специально создавался так, чтобы даже обезьяна с печатной машинкой могла напечатать на нём что-нибудь едва работающее. Нотисы, собачки, register_globals, вcё вот это вот дерьмо. А максимальная простота «разработки» (положил весь код в index.php и потёк) только подливает масло в огонь.
                                  Ответить
                            • > если не попробовать самому

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

                              Вот только люди со стороны почему-то все смеются и тычут пальцем. Но они идиоты, видимо. Не надо обращать на них внимания.
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Не ну JSP и ASP точно не лучше.
                                  Ответить
                                  • Именно поэтому я за «PHP».
                                    Ответить
                                    • Миллионы мух не могут ошибаться!
                                      Ответить
                                      • Тем более таких жирных мух как фейсбук.
                                        Ответить
                                      • Вот он щас пойдёт и зарегает миллион аккаунтов Muha0001 и т.д.

                                        Ему смешно, а нам Application halted by exception
                                        Ответить
                                        • Мне будет лень регистрировать. А вот gost может. У него все технические средства для этого уже готовы.
                                          Ответить
                                          • У меня такое ощущение, что в «ГК» где-то завелось O(N^2): после армии петухов он стал очень медленно присылать письма о регистрации. Так что вряд ли.
                                            Ответить
                                  • JSP это шаблонизатор. Бекенд пишется на джаве или котлине.
                                    JSP имеет диалект JSPX, который позволяет делать well-formed XML документы, это мегакруто.

                                    Минусы правда в том, что во-первых он прибит гвоздём к сервлетам (его нельзя запустить с командой строки) а во-вторых он не умеет эскейпить по умолчанию: надо эскейпить явно, иначе у тебя будет пользователь с именем "<b>", и привет

                                    И наконец, можно писать на Java и не использовать JSP.
                                    Писать на котлине конечно приятнее, чем на PHP, не говоря уже про дебаг, профилирование, и тестирование.

                                    ASP (не .NET) это вомзожность запускать скрипты в IIS плюс пара ActiveX объектов для работы с бекендом. Так что это VBS, древний JScript и прочая хуйня, говно, и не нужно.

                                    А вот в ASP.NET ты можешь писать на C#, что безусловно в миллион раз лучше пыха.
                                    Поверх этого есть какой-то свой шаблонизатор, есть веб-формы, был mvc.net, еще хуйня какая-то..
                                    Ответить
                                    • > well-formed XML документы

                                      Что мешает мне делать их на «PHP»? Пиши аккуратно и всё будет well-formed.
                                      Ответить
                                    • >JSP это шаблонизатор. Бекенд пишется на джаве или котлине.

                                      JSP хотя бы конпелируемый.
                                      Проебал где-то, не скомпилилось.

                                      Плюс там есть несколько разных технологий. Само JSP реализует привычный для ПХП-кодера паттерн «каша».

                                      Однако с помощью jstl можно вполне нормально шаблонизировать.
                                      Ответить
                                    • >JSP это шаблонизатор.
                                      Да.
                                      А люди так этого и не поняли. Впрочем в эпоху ангуляров он почти не нужен.

                                      >ASP (не .NET) [...] это VBS, древний JScript и прочая хуйня, говно, и не нужно.
                                      Да.

                                      >А вот в ASP.NET ты можешь писать на C#, что безусловно в миллион раз лучше пыха.
                                      Да.
                                      Ответить
                                  • >JSP и ASP точно не лучше
                                    Опровергаю.

                                    Лучше. И JSP, и ASP.NET.
                                    Ответить
                    • Потом сел за Drupal и сразу превысил на 35 км/ч
                      Ответить
                  • PHP Driver Development?
                    Ответить
                  • { Вы случайно не middle Desktop ? }
                    Ответить
                    • Обезоружил.

                      Но я же уже не мииидл((
                      Ответить
                      • > Но я же уже не мииидл((
                        В тимлиды подался?
                        Ответить
                        • Та не. А что, только такие варианты есть?)
                          Ответить
        • Это нормальная тема: всякие гуглы хотят, чтобы ты чувствовал себя на работе комфортно, и для этого тебе может быть полезно в обеденный перерыв пообнимать свое дитя. Особенно, если ты молодая мама, например.

          В гугле даже собачек можно в офис приводить.

          Но разумеется, там для всего этого отдельное помещение, и если ты не любишь детей и собак, то ты не обязан вообще даже знать об их существовании
          Ответить
          • В Гугле может и отдельное, а в компании ВДСина?

            > в обеденный перерыв пообнимать свое дитя.
            - и сиськой его покормить на виду у всех, потому что онажемать
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • То, что с другой стороны от сиськи.
                Ответить
                • Девушка, а вы не могли бы вот всё тоже самое, но без ребенка?
                  Ответить
                  • Интересно, а если без ребёнка, то будет ли это считаться sexual abuse и если да, то с чьей стороны: девушки или тех, кто имел неосторожность на неё посмотреть?
                    Ответить
                    • И так и так может быть, смотря у кого адвокат лучше
                      Ответить
                      • Девушка, а вы не могли бы вот всё то же самое, но с адвокатом?
                        Ответить
                        • Звучит как очередная порнуха на порнхабе.
                          Ответить
    • https://www.itfglobal.org/ru/sector/seafarers/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-%D0%BC%D0%BE%D1%80%D1%8F%D0%BA%D0%B0%D0% BC

      какая помощь друпалу )))
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Какой скилл )))

        > Школоло
        Эх, а ведь в старые-добрые времена на нём были написаны чуть ли не все приложения с гуем…
        Ответить
        • Подтверждаю. В 80-х / 90-х паскаль вовсе не был "учебным" или "игрушечным" языком.
          У Mac OS того времени он вообще был системным языком и главным языком разработки. *
          Ну а о роли Delphi в виндуос разработке на границе веков и говорить смешно. Достаточно вспомнить квип и тотал коммандер и бесконечные формошлепские клиенты ко всему, к чему только можно


          *https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop#Design
          Pascal was Apple's original preferred language for Macintosh software development,[1] and MPW was initially released with only Pascal support
          Ответить
          • Инью перепутал «Бейсик» и «Паскаль». Он «BeginEnd» написал у «VB», хотя в «VB» нет никакого «begin», там только «end».
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • То ли дело
                function TyPetuh
                    echo "Ты питух"
                noitcnuf
                !
                Ответить
              • В «Модуле» и в «Обероне» вроде тоже нету бегина, только энды. Никлаус Вирт решил, что «Паскаль» многословен, и в своих более новых языках убрал «лишнее» слово. Так что в «Модуле» и в «Обероне», хоть убей, нельзя писа́ть без «операторных скобок».
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Представляешь, сколько багров в языках с опциональными операторными скобками, потому что невозможно понять, к какому ифу относится else?

                    Даже нелепое do{ }while(0) в сишных макросах появилось из-за опциональности операторных скобок.
                    Ответить
                    • Именно потому я за то, чтобы всегда и везде писать скобки
                      как в tcl
                      Ответить
                    • >сколько багров в языках с опциональными операторными скобками

                      Так мало того. Экономии никакой.
                      Необязательные операторные скобки влекут за собой обязательные скобки на условии.
                      if (bagor){
                      }
                      Если что в Goвне правильно сделали, так это обязательные {}
                      Ответить
                      • В перде скобки тоже обязательны. правда, там есть такая нотация без скобок
                        print "A" if 1;

                        А вот
                        if (1) print "A";
                        не срботает
                        Ответить
                      • Подтверждаю, необязательные скобки — это кал.

                        А ещё я за «Python». Там нет никаких «скобок».
                        Ответить
                        • Ну питон кстати годный язык чтобы приучать котят к лотку юных программистов к отступам.
                          Ответить
                          • Согласен.

                            Кмк, «Питух» может быть действительно неплохим учебным языком.

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

                              А вообще в моём ВУЗе на соответствующих парах нас заставляли вменяемо форматировать код, и за нарушения строго карали. В принципе, тоже неплохой подход (хотя и не настолько… элегантный, как в путухе).
                              Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Тут вопрос что понимать под обучением.

                                Общеобразовательный уровень средней школы или университет с профильной подготовкой.

                                С т.з. практики Питух человеку может пригодиться хотя бы в качестве калькулятора.

                                А у нас как обычно учат тому, что потом нахуй не нужно в жизни.

                                Если Тарас такое говорил, то я ему ещё как-то верил — он реально писал на Дельфях код.

                                А так научат детишек Паскалю, а они потом вырастут и в Экселях всё считают.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                • > в экселях всё считают

                                  Вот я кстати так и не научился. Обычно на середине расчёта забрасываю эту хуйню и делаю какой-нибудь питоний скрипт, который csv высирает или через api ячейки патчит.
                                  Ответить
                                  • Мне понравилось из «Экселя» через CSV передавать таблицу в какую-нибудь СУБД, там её обсчитывать на какой-нибудь скриптушне типа «PHP», а потом результат снова передавать через CSV.

                                    Работать в «Экселе» напрямую для меня сложно. Я пытался, у меня даже получалось, но я быстро забываю, как это делать. Скилла не хватает.
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • Что график даже нуб сможет вывести, это хорошо. Правда, у меня однажды багор случился из-за десятичного разделителя (в импортированных в «Эксель» данных была точка, как у пиндосов, а «Эксель» хотел запятую, как у людей). Но это уже не проблема «Экселя», а проблема отсутствия единого стандарта представления чисел.
                                        Ответить
                                        • >у меня однажды багор случился из-за десятичного разделителя (в импортированных в «Эксель» данных была точка, как у пиндосов, а «Эксель» хотел запятую, как у людей

                                          Этот багор у меня случился ещё в 90х.
                                          Я его на всю жизнь запомнил.

                                          Русификация — зло. Они БЛЯТЬ даже функции попереводили.
                                          Ответить
                                          • Сначала прочитал как «даже функции попердолили».

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

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

                                      Простенький график нарисовать или сумму посчитать - ну ок, сойдёт. Остальное проще внешними тулами.

                                      З.Ы. И не предлагай мне встроенные языки.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • > .NET

                                          Ну я в библиотеках .net не особо шарю, без msdn писать не смогу. А смысла их учить ради сраных табличек и, возможно, плагинов к повершеллу я особо не вижу.
                                          Ответить
                                        • >А вот на VBA я писал в детстве. Какой багор:)

                                          Я тоже. Правда в детстве у меня VBA не было, только клон Спектрума.

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

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

                                          И как раз тогда только появился VBA. Функций экселя я не знал, гуглов тогда не было.

                                          Написал все нужные функции на VBA, посчитал всё, распечатал аккуратную табличку.
                                          Ответить
                                  • >Обычно на середине расчёта забрасываю эту хуйню

                                    Какой анскилл )))

                                    > делаю какой-нибудь питоний скрипт, который csv высирает или через api ячейки патчит.

                                    Какой скилл )))
                                    Ответить
                                  • >Вот я кстати так и не научился.

                                    Вообще мой мир рухнул.

                                    Приходит борманд на собеседование в контору с Экселем, а дальше картина описанная гостем:

                                    https://govnokod.ru/25444#comment463938

                                    В итоге эксельная девочка-хрюша разъебует в хламину кандидата, который способен решить задачу на десятках языков, сотней способов, включая самые экзотические и изощрённые, вроде сишного препроцессора, constexprов, тьюринг-полного sedа, хачкеля, и остальных.
                                    Ответить
                              • Swift
                                Go

                                Достаточно простые для освоения. Статическая тупизация.
                                Не требуется ооп головного мозга в обязательном порядке.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • В институте в общем найти линупс не проблема
                                    Ответить
                                  • «Swift» под «Линукс» есть. Но непопулярен, да.

                                    Вот, например, «gcc» пропагандирует «Objective-C», суёт его во все операционные системы (в «MinGW», например, он есть). Но кто на нём реально пишет?
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • Так точно!
                                        Ответить
                                      • Кстати, есть GNUstep.

                                        http://gnustep.org/
                                        Ответить
                                      • https://gcc.gnu.org/onlinedocs/gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html

                                        -fgnu-runtime
                                        
                                            Generate object code compatible with the standard GNU Objective-C runtime. This is the default for most types of systems.
                                        -fnext-runtime
                                        
                                            Generate output compatible with the NeXT runtime. This is the default for NeXT-based systems, including Darwin and Mac OS X. The macro __NEXT_RUNTIME__ is predefined if (and only if) this option is used.
                                        Ответить
                                    • Так мы уже по популярности выбираем?

                                      Ну тогда вам на php
                                      Ответить
                              • Куча есть, но ручная: с New/Dispose или GetMem/FreeMem. Без GC, без подсчёта ссылок, даже без RAII.

                                В «Паскале» принцип: «посрал — убери за собой». Ручная расстановка освобождения памяти тренирует внимание.

                                В «Delphi», правда, появились строки со счётчиком ссылок.
                                Ответить
                • > Никлаус Вирт решил, что «Паскаль» многословен
                  Правильно решил.
                  За то мне «Basic» с «Ada» и нравятся. И ещё «Dylan».
                  Ответить
              • Sub Bagor
                End Sub
                
                If ... Then
                End If
                
                With X
                   .koko = 1
                End With

                В Дилане пошли ещё дальше. Сделали возможность указывать какой именно блок оканчивается.
                При этом всё кроме End опционально.
                define method bagor
                ...
                end method bagor; //последние два опциональны


                Таким образом на простых блоках пишется End.

                Зато на большой вложенности, или очень длинных методах, чтобы не запутаться можно писать полностью.
                Ответить
                • В каком-то шаблоноговне я такое видел, в джанге что-ли
                  {% block foo %}
                  хуй
                  {% endblock foo %}


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

                  Правда, бывают блоки на три экрана конечно, там у закрыскобки можно и комментнуть
                  Ответить
        • У меня «Школоло» ассоциируется с «Бейсиком», ну в крайнем случае с «Visual Basic».
          Ответить
      • C# — это не си-диез, а до-диез.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Это ля, си-бемоль (в немецкой нотации) или си (в английской нотации), до.

            Есть путаница в нотациях: немцы ноту «си» обозначают как «H», а буква «B» у них обозначает «си-бемоль», а вот у англичан буква «B» обозначает просто «си». Связано это, вероятно, с тем, что в средневековых музыкальных инструментах когда-то не было ноты «си», а «си-бемоль» была.

            Если что, «бемоль» означает понижение на полтона (обозначается значком, похожим на мягкий знак), а диез — повышение на полтона (обозначается значком, похожим на решётку).

            Т. е. ряд «до-ре-ми-фа-соль-ля-си» немцы записывают как «CDEFGAH», а англичане — как «CDEFGAB». Почему буква «A» означает ноту «ля», я не знаю.

            У итальянцев нет однобуквенных сокращений, они пишут: «do-re-mi-fa-sol-la-si».
            Ответить
            • Что за анскильный питушизм называть ноты буквами? Это для анскильных питухов, у которых только одна октава?
              Ответить
              • Гитарасы вроде бы аккорды так записивают
                Ответить
              • В других октавах циферку припишешь. Типа посреди клавы у тебя C4.
                Ответить
                • Неканоничненько. С4 это, скорее, кварта из до мажор (аккордом это сложно назвать, да)
                  Ответить
                  • Тупые пендосы так обозначают октавы. Нулевой они называют субконтроктаву или типа того, поэтому наша первая для них четвёртая. Всё не как у людей.

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

                    Взять тот же басовый ключ, где весь маппинг съехал. Ну сдвиньте его блять на одну линейку вверх, Си малой октавы всё равно нормально читаться будет. Нет, будем учить 2 отдельных маппинга.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Пианино понемногу тыкаю. Решил таки попробовать на старости лет.
                        Ответить
                    • Два? А ты знаешь, что кроме скрипичного (ключ «G») и басового (ключ «F»), есть ещё ключ «C», который может располагаться на любой строке (частный случай ключа «C» — альтовый ключ). Сдвинутые ключи любят те, кто играет на духовых инструментах. У них вообще всё не как у людей, потому что диапазон звуков духовых инструментов ограничен.
                      Ответить
                      • Ну для разных инструментов это ещё ладно. У меня вот шаблон порвало что для одного инструмента надо сразу джва маппинга задрачивать. Не считать же полоски каждый раз.
                        Ответить
                        • А у меня шаблон порвало от дискриминации чёрных клавиш. Явно расист какой-то придумал пять из двенадцати звуков октавы обозначать неудобным способом.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • На клавикордах традиционно большие клавиши были чОрными, а маленькие — белыми. А вот на клавесинах вроде бы цвета были как на рояле.

                              Почему у клавикордов такая инверсия раскраски, не знаю.
                              Ответить
                              • P.S. У клавесинов гуглится и такая, и такая раскраска. И клавикорды тоже обеих раскрасок гуглятся.
                                Ответить
                            • Я в «Ютубе» нашёл антиблм-пианино: из одних белых клавиш.

                              Как я понял, их бывает два типа:

                              1. С диатоническим рядом (чёрные клавиши тупо удалили). Играть на них пиздец как сложно, потому что трудно найти ноту «до», а если сместиться по такому ряду, то тона и полутона не будут совпадать.

                              2. С хроматическим рядом (чёрные увеличили до размера белых и перекрасили в белый). Тут если собьёшься, мелодия не испортится, просто транспонируется вверх или вниз.
                              Ответить
                              • Сруза видно, что родители в детстве заставляли бренчать на пианине.

                                https://www.youtube.com/watch?v=HUpggXGHYjk
                                Ответить
                    • ну так-то ключей до ебени
                      полагаю, басовый ключ наиболее точно удовлетворял настройке какой-нить виолончели
                      для левой руки ф-но/клавесина он просто используется, скорее, "потому что уже был такой, нах ещё один изобретать"
                      как и для правой руки - дык это для скрипки родной, "че вы тут пальцебляди лезете в наш уютный смычковый мирок"
                      Ответить
                      • да
                        ещё немаловажный факт, что ранние клавесинные произведения это обычно для богемного, комнатного потребления

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

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

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

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

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

                          хуесинные
                          Ответить
            • Спасибо
              Вот тебе за это мульт https://www.youtube.com/watch?v=g9Xz2Ta_LDs
              Ответить
            • емнип в стародавние времена как раз от ля считали, а не от до.

              ну и плюс ля первой октавы = 440 гц, настройка всегда относительно нее ведется
              Ответить
              • Да там, емнип, все от разных мест считали и как попало настраивали пока камертоны не научились делать.

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

                Поправьте, если пизжу
                Ответить
                • звуки [в равнотемперированном строе] одинаковые, а вот с точки зрения всякой там гармонии это разные ноты
                  Ответить
              • Они совпадают только в 12-тональной равномернотемперированной шкале. В других темпераментах они могут не совпадать, проверь. Например, в исторической пифагоровой шкале они не совпадали.
                Ответить
                • Какие характеристики звука необходимы, чтобы узнать ноту? Какие алгоритмы применяются в цифровых тюнерах?
                  Ответить
                  • от тональности зависит, грубо говоря у тебя в одной тональности будет фа-диез, в другой ля-бемоль. а звук одной и той же частоты, да и клавиша на фортепиано тоже.
                    Ответить
            • Бекар забыл
              Ответить
            • >> Почему буква «A» означает ноту «ля»

              https://www.quora.com/Why-is-it-C-D-E-F-G-A-B-in-music-and-not-A-B-C-D-E-F-G

              Я начинаю понимать, почему крестовики вроде Романа ещё и по сольфеджио всякому угорают. Это такая комплексная сублимация
              Ответить
              • показать все, что скрытоvanished
                Ответить
              • Да, ABCDEFGA — это эолийский ряд, он же гамма «ля-минор» (если считать, что B — это «си»). А вот от «до» до «до» — это мажорная гамма (она же ионийский ряд). Возможно, когда-то в миноре играли чаще, потому «A» — это «ля».
                Ответить
        • Сначала обрадовался, решив, что таки встретил обсуждение ранее не обсуждавшейся на ГК темы, а потом вспомнил, что пару лет назад разные строи уже обсуждали.
          То обсуждение не нашёл, только два других из разных эпох: https://govnokod.ru/6055#comment79214, https://govnokod.ru/16219#comment237953.
          Ответить
    • показать все, что скрытоvanished
      Ответить
      • А правда, что хуй таких размеров (ну, не таких, но, например, вот такой, какой называют bbc) из-за этих самых размеров никогда не получит полноценную эрекцию?
        Ответить
      • Questo sito fa uso di cookie per migliorare l’esperienza di navigazione degli utenti e per raccogliere informazioni sull'utilizzo del sito stesso. Utilizziamo sia cookie tecnici sia cookie di parti terze per inviare messaggi promozionali sulla base dei comportamenti degli utenti. Può conoscere i dettagli consultando la nostra privacy policy.

        [Sono d'accordo]
        [Non sono d'accordo]
        [Leggi di più]

        Ну и какой из вариантов мне выбирать?
        Ответить
        • Вроде первый вариант означает «Я согласен», второй — «Я несогласен». А что означает третий?
          Ответить
          • «Читать далее».
            Ответить
            • Точно. Parli italiano?
              Ответить
              • Опровергаю. У меня установлено специальное расширение, которое позволяет выделенный текст переводить на «PHP»: https://i.imgur.com/yZztz9q.png.
                Ответить
                • >> которое позволяет выделенный текст переводить на «PHP»

                  Хочу такое. Выделяешь на каком-нибудь сайте фрагмент текста на любом языке программирования, и получается нямка.
                  Ответить
        • показать все, что скрытоvanished
          Ответить
          • именно поэтому я за «жать accept не читая и соглашаясь непонятно с чем»
            Ответить
    • блядь, нам офис закрыли до конца года
      всё
      пизда
      уйду в курьеры

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

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

      А ещё удалил ВСЁ, включая куки, настройки, дополнения и даже кастомные поисковые движки.

      Зато адресная строка в нужном месте блять
      Ответить
      • >мобильный фф обновился до какой-то совершенно новой нескучной версии

        Ух ты. Похоже не один я такой упоротый, чтобы ставить Гiгетох на телефон.

        >А ещё удалил ВСЁ, включая куки, настройки, дополнения и даже кастомные поисковые движки.

        Именно поэтому я против «автообновлений».
        Ответить
        • Да в общем мне казалось, что я автообновления выключал, но то ли мне это приснилось, то ли ведро после своего обновления решило, что неча пану дурковать.

          > не один я такой упоротый, чтобы ставить Гiгетох на телефон
          - я не вижу альтернатив. Но лиса не радует в последнее время. На ноуте ушёл на esr, потому что последние версии почему-то начали произвольно сбрасывать зум страниц до 100%.
          Ответить
          • > альтернатив
            https://github.com/kiwibrowser
            правда он как-то перестал развиваться, надеюсь, не навсегда
            Ответить
            • > Chromium-based
              - ну то есть альтернатива лисе это только хромиум различной степени зондированности.
              Ответить
              • >хромиум различной степени зондированности

                А какие есть зонды в опенсорсных сборках?

                Ну допустим гугловый DNS. Ну предположим проверка у гугла вредоносных сайтов. Это и ФФ делает по дефолту. Хз отключается ли оно в хроме.

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

                  Тут дело даже не в зондах, а в том, что один движок заполонил практически всё.

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

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

                    >Хочешь браузер? Ну вот тебе хромиум/хром или полумёртвый фф.
                    Это на самом деле неплохой выбор.

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

          На тебе скальп Чубакки: https://cdn.trinixy.ru/pics4/20100901/rare_star_wars_photos_40.jpg
          Ответить
          • https://i.etsystatic.com/8926744/r/il/d5b432/1107668708/il_570xN.1107668708_cz9s.jpg
            https://www.costumepartyworld.com/media/catalog/product/cache/1/image/650x/040ec09b1e35df139433887a97daa66f/h/l/hlw-mask-detectpika_3_.jpg
            https://ae01.alicdn.com/kf/HTB1SwaUcL1H3KVjSZFBq6zSMXXaR.jpg
            https://ae01.alicdn.com/kf/HTB1lwZ8auySBuNjy1zdq6xPxFXai/BomHCS-New-Handmade-Funny-Animal-Cap-Novelty-Pikachu-Hats-Gag-Party-Masks-Beanies-Halloween-Birthday-Cool.jpg
            https://sleezybarbhorsewear.com/wp-content/uploads/2016/09/sleezy-face-mask-pikachu.jpg
            Ответить
    • Перекат!

      https://govnokod.ru/26832 https://govnokod.xyz/_26832
      Ответить

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