- 1
Именно поэтому я за «PHP».
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Именно поэтому я за «PHP».
5602 мухи не могут ошибаться
Надо же, буквально на днях про него песню слышал.
* https://en.wikipedia.org/wiki/Remove_Kebab
https://www.youtube.com/watch?v=peCu-i6XT88
Внезапно внятное призношение, можно английский качать
Рекомендую . Один из самых приятных англоязычных каналов, которых я видел.
https://www.youtube.com/watch?v=jsUvcjk8J5c
Какая ирония )))
Компиляция Haxe в PHP
https://phprussia.ru/moscow/2020/abstracts/6648
Разработка расширений для PHP ... на PHP!
Именно поэтому.
-- Зачем нужны ORM?
-- ActiveRecord vs DataMapper.
-- И одной из метрик автоматического тестирования является Code Coverage
Хотелось бы еще послушать таких докладов:
* Структурное программирование -- ключ к улучшению кода
* ООП: инновационный подход 21-го века
* SQL инъекции: как избежать?
Мы тут ещё недавно обсуждали «Zephir» — пыхоподобный язык программирования, предназначенный исключительно для написания расширений для «PHP». Оказалось, что у зефира привкус «PHP» или даже «JS» (неожиданно, правда?):
https://govnokod.ru/26733
Я реально знаю кейсы, когда логика валидации написана два раза: на JS и на беке (и иногда еще на уровне ограничений в базе, лол).
Это отвратительно!
Вообще самая постыдная для программиста задача, это два раза писать одну и ту же логику в двух местах на разных языках
Типа решаем систему дифференциальных уравнений на главном потоке и иногда даём остальному приложению подышать?
Так таймер небось ставит, и получает сигнал (на юниксе) или APC (на пинде)?
>Чтобы UI не зависало. Какой багор )))
Багор действительно. Я видел как патчат обработку евентов чтобы делать модальный диалог, но это кал
Лучше такие задачи выносить на другой тред, и использовать что-то типа async/await (в решеточке оно есть)
Либо ты пытаешься тормознуть прогу на обращениях к ядру и получить ошибку (тот самый APC в винде или EINTR в линуксе). Либо ты какой-то флажок для треда выставляешь и ждёшь пока он сам съебёт. Либо ты убиваешь весь процесс нахуй.
Даже в джаве и шарпе вроде как interrupted exception в произвольный момент не вбросить.
Как же делает пых?
Я думал, там N потоков, каждый сосет из очереди запросы и обрабатывает
Иначе чем это лучше CGI?
Но вообще похуй на паче
Получается что нужно или каждый запрос в отдельном процессе, или есть опасность налажать? Или пых в любой операции проверяет переодически, что 30 сек прошло?
while(1){}
?
А если я оберну это в критикал секцию?
Объект какой-нить не осовободица
Не аллоцирует память, не ходит в сеть, не берёт лочки, не трогает глобальный стейт. Нахуй он тогда нужен то? Тупо матан какой-то на приватной структуре?
Но, конечно, «PHP» для этого слишком глуп.
А вот кстати я не уверен что среднестатистическая lock-free поебень готова к крашу участников...
Смотри. Я пыхарь. Я написал какой-то код. Этот какой-то код должен помереть через 30 секунд. Чтобы он ни делал.
Пых ставит таймер в линксе или APC в винде или просто на другом потоке поджыдает, а потом делает ``pthread_kill`` или ``TerminateThread``
Вопрос: как пых знает, что он не сломает рантайм? Он всегда весь код делает безопасным?
то-есть если я вошел в syscall, и провёл там 3 часа, то я сам себе злобный бртн
Как на винде -- интересно, да
Хотя нет, не интересно. Это же пых
Угу. В таком случае, скорее всего, «Апач» просто убьёт воркера, как Борманд выше написал.
З.Ы. А в обработчике ставится бит PHP_CONNECTION_TIMEOUT в connection_status, который проверяется в куче мест и ты даже видишь его из пыхи.
А у треда почти всё расшарено с другими тредами. Там вообще не понятно что чистить, ибо большая часть объектов принадлежит процессу в целом.
Виндовый кросс-процессный мутекс то уйдёт в абандон, ок. И все кто его ждал получат ошибку соответствующую. А дальше то что делать? Данные то запороты, тебе хочется их чинить?
А быстрые мутексы типа позиксовых толком и не отпустишь, емнип. Они для ядра вообще не объекты.
> Чтобы UI не зависало. Какой багор )))
Это наследие VB.
Там это же самое делалось DoEvents.
Сейчас все пищат от async: той же самой кооперативной, просто с сахаром
Но кто, скажите мне, не наябывался пися случайно в асинхронной процедуре sleep вместо delay и не вызывал оттуда случайно блокирующий синхронный IO?
Я как-то прошёл мимо современных тенденций многопоточности.
Смысл в том, что у тебя есть луп на треде, и ты вместо блокирующих операций используешь колбеки, но сахар позволяет тебе писать так, словно это все последовательный код.
Псевдокот
Таким образом на треде может роботать 100400 таких вот асинхронных функций без коллбечной лапши, и без пложения 100400 процессов, что может быть особо неприятно в виндуос (да и в юникс тоже ничего хорошего нету в неконтролируемом росте процессов)
Иам внутри вмонтирован тред-пул и тред пока async ждёт может заниматься другими делами?
На delay тоже async нужно ставить?
PS: и await не вижу.
Да, я понял. Тред идёт заниматься другими делами. Типа легковесная многозадачность.
>Тред обрабатывает другие функции
А что будет если пул занят другими функциями и они бобровольно не возвращают потоки?
Не зависнет ли мой поток с delay(1000), на неопределённое время?
И поток у меня отжали для каких-то тяжёлых вычислений. Его же мне вернут не через секунду, а после окончания расчёта?
Пример: есть старое-доброе winapi приложение. Одна часть считает сложную ма-тема-тику, вторая перерисовывает окно.
Если сложный расчёт выполняется долго, окно «подвисает».
Выход: в сложном расчёте нужны DispatchMessage/DoEvents. Опять та же питушня.
Как мне в этой парадигме управлять разными пулами?
Я думал await использует какой-то один неявный системный пул, как в крестах std::launch::async.
В «Python» event loop можно создать явно и позвать на нём «run_until_complete()». См. https://docs.python.org/3/library/asyncio-task.html.
Я не знаю, как там в шарпе.
В Свифте делаешь отдельную DispatchQueue или вообще берёшь готовую и херячишь на ней тяжёлую работу, потом результат для отрисовки бросаешь на main, которая отвечает за UI.
Управление пулом потоков спрятано под капот.
Используется, конечно.
В Свифте нет async/await.
В Шарпе нет очередей (?)
А чо было не вернуться на тот же тред, который был до await'а?
Думаю в реализации await очередь должна быть непременно. Причём блокирующая.
Иначе поток обрабатывающий питухов, просто уйдёт в busy wait. Если они все вдруг решать ждать и dispatch loop останется без работы.
Просто я в своё время насмотрелся на самопальное говнище с busy wait.
— Почему программа стабильно грузит одно ядро на 100%?
— Ну кто ж мог подумать, что таски кончатся?
Очередь ты можешь указать когда асинхронную таску спавнишь. А await просто будет ждать когда она завершится, ему похуй на очереди. Т.е. это 2 ортогональных сущности.
Как?
Какой-нибудь var res = await pool.execute(LongCalculation);
По дефолту вроде через ui тред чтобы меньше ебли было.
Но я сварщик не настоящий.
Как-то сложно всё получается. Пулы, треды, корутины, IO, очереди какие-то.
Голова пухнет.
Взять всё, да и assParallelнуть…
У тредов на которые можно захуйнуть коллбек может быть SynchronizationContext. В частности у UI треда он всегда есть.
И по-умолчанию все работает тупо и понятно - если у текущего треда контекст есть перед вызовом await, то продолжение будет в том же контексте. Т.е. если ты писал обработчик для гуйни и ушел в await то код потом "возобновится" в ui треде и все безопасно. Если же контекста нету - то прям на том треде где таска завершилась.
Ну и можно сказать await something.ConfigureAwait(false) и сделать вид что контекста у тебя не было.
если тебе не похуй где вызываться -- укажи контекст, если похуй, то уж как бог пошлет.
Тащемто мыслить надо не в терминах нитей, а в терминах контекст
Хочу UI контекст, или еще какой
И если ты вместо асинхронного API для работы с IO возьмешь синхронный -- тоже зависнет.
Нужно быть аккуратным.
Это напоминает кооперативную многозадачность: каждая корутина отвественна за всю систему
Если переписать на колбек, то тогда придётся делать мутекс. А с async'ом не надо.
Если же интересует вопрос, как задачи квантуются внутри лупа (а луп крутится внутри одного потока), то меня тоже интересует :)
Да. Непонятна точная механика шедулинга.
А её и нет вроде. Это просто сахар для хуйни-на-коллбеках. Шедулинг точно такой же, как и у любой другой хуйни на коллбеках - очередь да разгребающий её ивентлуп.
Просто конпелятор за тебя нарубает красивый линейный код на уёбищные коллбеки. И помогает стейт протащить. Всё.
Там вроде даже вручную эти кишки можно дёргать без сахара.
Вот и думаю: или оно до горя тупое, или я что-то не понимаю.
Асинхронная операция возвращает тебе future. Когда ты делаешь на ней await твоя async функция тупо возвращает управление. Но перед этим она подписывает следующий свой фрагмент на завершение этого future.
Вот и всё :)
Ты можешь все это делать руками без async/await. Все кишки доступны.
Всё-таки на Сишке такое хрен в чистом виде не нахуевертишь.
Да и в других языках тоже. Из-за того что нужно прыгать на указатель внутри функции.
Разве что запускать все потоки в одном общем пуле с work stealing.
>прикрутить суда понятие континуейшена
Да, это же копрограммы (coroutines).
https://en.wikipedia.org/wiki/Coroutine
https://i.postimg.cc/6Qr0WjJL/waiter.png
В питоне -- run(..)
А в луа нужно ходить по корутинам, и каждой говорить resume, ну или цикл самому написать
Хотя пример не совсем честный, там вроде других тредов не создается
но могу наврать
Хуй знает точно
Золотой
Логично. Ну не такой уж сахар тогда эти await.
Я когда-то в Сищке пытался сделать копрограммы на свитчах и обернуть их в макрос YIELD с автоинкрементом стейта, на котором произошёл выход.
Вышло в принципе неплохо, но всё-равно уродливо как-то.
ctx->state = __LINE__; return; case __LINE__:
Супер!
Тьфу, а я как лалка последняя со счётчиками пердолился.
Ага, я понял. По сути отдельный function(){}. И чем ниже, тем вложенность больше.
А благодаря эти колобки просто линеаризует.
И мне вместо аргументов внутри колобка, просто возвращается значение из фьючерса, как из обычной функции.
в жабе всё так, там нет асинк-авейта, но есть CompletableFuture с возможностью указания, в каком пуле исполняться
Т.к. в Няшной есть макросы и возможность прыгнуть switcheм в самую гущу цикла.
А в анскильных Жс, Жабах и Шарпах такую возможность убрали.
Можно конечно пердолиться замыканиями, но выйдет не сильно лучше колобков.
Написать страничку, которая делает запрос к удаленному API, и отдает результат пользователю.
Запрос к удаленному API занимает 1 сек.
Если у твоего веб-сервера 10 потоков, и пришло 11 пользователей, то 11-й пользователь ждет осовбождения потока, хотя процессор ничем не занят: он тупо ждет, пока пакетики по сети летят.
Что делать программисту?
Использовать callback, но это лапша.
А хочется без лапши
Хочется писать последовательно, как если бы ты простой скрипт писал.
Вот async позволяет писать без лапши и просто.
Да понятно. Вёб-поебень для жскрипт-лалок.
Смутно вспоминается баззворд «реактивное погромирование».
>Что делать программисту?
В «POSIX» есть мультиплексирование через select(). Именно поэтому я за «Сишку».
Пришло замыкание, оно целиком выполняется на следующем витке.
https://docs.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.iasyncst atemachine?redirectedfrom=MSDN&view=netc ore-3.1
Ой, а как-будто на шарпе тебе не приходится использовать асинхронные апи везде и обмазывать каждое из них авейтом.
Не могу пока въехать как это просто сделать.
Для этого же надо иметь ГОМОИКОННОСТЬ, или интерпретировать кусок функции чтобы ссылаться на произвольное место кода.
Примерно понятно.
Но как в сишке хранить «локальные переменные» без копрограммной магии? Разве что struct/массив c конь-текстом функции.
А можно демо-пример на Сишке.
https://en.cppreference.com/w/cpp/language/coroutines
Стейт размещается на куче, но в случае тривиального случая компилятор может разместить его на стеке и даже заинлайнить.
Если сделали в Крестах, тогда всё понятно.
Впрочем я серьёзно, они очень хорошо описывают как оно под устроено капотом: 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.
советская
Почему я, глядя на этот вызов, чётко вижу многочисленные вызовы GetMessage()/TranslateMessage()/DispatchMessage()? Я ебанутый?
Оно родненькое! Просто сахарок высокоуровневый.
Кресты (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)
ЙажаСцрипт?
>Лол (499)
>Ненужное (292)
Час поздний, не въехал.
Остальное — охуенно.
Edit: 1C я бы назвал «НачатьПрограмму» или «КонецПопытки»
Просто Лол и Ненужное не говорят о том что внутри.
Остальные категории охуенно, просто чудовищно self-descriptive. Я даже СтерторШкололо допёр.
> FORTRAN
Что-то не слышал чтобы школоло на нём писало.
>Школоло ассоциируется с Pascal
Тараса застал?Впрочем он повзрослел и перешёл на Аду и Кресты.
Да.
Хотя сейчас новое школоло немного на питон переходит.
>Что-то не слышал чтобы школоло на нём писало.
Ну школоло особо на нем и не писало, язык ученых был. Но в каком-то кружке по программирования могли на нем писать. В любом случае, в моем понимании FORTRAN ближе к школоло, чем VisualBasic.
А в крестах, помимо общеизвестного оператора «стремится» («while (x --> 0)») есть менее распространённый оператор «хуй»: . Означает дословно «хуй тебе, а не bitFlag в bitMap».
https://graphics.stanford.edu/~seander/bithacks.html
Спасибо
Но какую извращённую фантазию нужно иметь, чтобы там хуй увидеть. Причём травмированный.
На мой вкус отрицание нужно приклеивать к флагу.
bitMap &= ~bitFlag;
Оно-то конечно красиво, с точки зрения «вызвать у читателя WTF».
x -=- a;
x +=+ 42;
Да, используется оператор «хуй».
https://ideone.com/m0Kgna
x &= x-1
Если бит единственный (x является степенью двойки) получается 0.
Если число состоит ровно из одного включённого бита (> x является степенью двойки), после которого следуют n нулей, то после вычитания единицы мы получим число из n двоичных единиц (для проверки вычти столбиком), например, 0b1000 - 1 == 0b0111. После «&» мы, очевидно, всегда получим ноль. А вот если включённых бит в числе как минимум джва, то старший из этих двух бит после вычитания единицы не изменится, и мы получим ненулевой результат: 0b101000 - 1 == 0b100111,
.
Ну тогда живёт
Если же его уговорить, что мне нужно именно «Яuбу», то он находит «хуз» и фильм «Cпаcaтeлu Яuбy».
а с ваших комментариев так вообще проиграл
какой бесконечный редирект )))
ответ: александр чистяков
Только многовато про алкашечку.
> Нет, надо на свою голову организовывать никому ненужные попойки
> не скудны на фантазию и задвигают что-то типа: пришёл на собеседование – получи бутылку Джек Дэниелс
Гайд Хрюши: как схантить алкаша-синьора на вкусные настройки.
А рекрутёров толковых реально мало, но что об этом стонать.
- это пиздец и нахуй такой офис, таких коллег и таких hr'ов. Дядя с килобаксовой зряплатой жлобится нанять няню для своих огрызков, потому давайте будем их наблюдать прямо на рабочих местах, да ещё и вместе с каким-нибудь ебучим клоуном.
пхпшники
> ебучим клоуном.
питонист, который тщетно пытается перевести всех на 2.7
питонист, который тщетно пытается перевести всех с 2.7
Узкий участок дороги, при движении по которому водитель пользуется преимуществом по отношению к встречным транспортным средствам.
Эти два знака (2.6 и 2.7) существовать друг без друга не могут. Если с одной стороны узкого участка стоит знак 2.6, то с другой стороны обязательно стоит знак 2.7.
> проходить обследование у психиатра
Сразу негоден.
Но разве он намного хуже того же js?
> вот именно, что два ответа, и оба неправильных
- вопрос Шрёдингера?
вообще еще не вечер, но перенеслось на следующую неделю, ох-ах. там, глядишь, и предоплату попросят оставить.
мы на самом деле еще год назад познакомились через тндр. тогда не взлетело, сейчас просто чаёк попьем, поболтаем да посмотрим. там сложная история.
И это пацан. А шо про тёлок говорить)
Имхо, фарш обычно обратно не проворачивается
надо было мне как-то улететь из шереметьево, дело было около двадцатого сентября. год назад я уже улетал, проебал свой самолет, искал банкомат и занимал по телефону денег у друга, там тоже была охуительная история, поэтому в этот раз я заранее билет не покупал. еду я значит на самом первом аэрокспрессе, думаю, давай-ка высокими технологиями воспользуюсь. делаю жмяк, гугл флайтс, есть аэрофлот через два часа - зашибись, кликаю, попадаю на сайт аэрофлота, оплачиваю.
на почту приходит сообщение (напоминаю, происходит это на стыке второй и третьей декады сентября) - "Удачного полета шестого октября!"
Я значит им звоню на входе в терминал, нихуя не слышно, какие-то очереди, они говорят, да, поменяем, но нужно будет доплатить. Я говорю: ну е-мое, десять минут назад не ту кнопку нажал, ну что вы. Они говорят: а назовите ваш посадочный код.
Двадцать минут мы перебрасываемся "подождите секунду" и "M как море? нет, N как наутилус", после чего мне радостно сообщают - да, надо будет всё-таки доплатить.
Ладно, иду в кассу. Там тоже очередь и та же история: надо будет доплатить, говорят. Я говорю - ну окей, аэрофлот ебаный, там был рейс на пятьдесят минут позже, давайте его. Они там щелкают в кампуктере и говорят: знаете, пока мы пиздели, его раскупили. Ну ладно, давайте тогда третий.
Они говорят: надо доплатить.
Я говорю: да, я смирился уже, давайте уже закончим с этим.
Они говорят, нет, надо еще доплатить. Рейс-то уже дневной, стоит дороже )))
Бегу через все эти кордоны, обгоняю каких-то индусов (- Харри? - ДА, ПИЗДЕЦ КАК ХАРРИ!), роняю все, короче, успеваю к гейту за минуту до отлета.
У гейта сидят три с половиной инвалида и спрашивают: а какого хуя ты приперся? Наш самолет только через полчаса, а тут ничего и никого не было.
Я пиздую обратно к табло в другую сторону зала.
Пока я дремал, гейт поменяли. Иду к гейту - оказывается, сука, он ровно напротив гейта с тремя инвалидами. Но посадка уже минуту как закончилась, поэтому ебаный аэрофлот даже по громкой связи меня не позовет и не подождет.
Иду в ебаные кассы.
Мне говорят: надо доплатить.
Я говорю: да вы охуели там что ли?
Они говорят: нихуя не знаем, идите в оперативное реагирование. А я уже представляю себе, что оперативное реагирование - это такие кассирши в квадрате, которые не только меня нахуй пошлют, но еще и предоплату сдерут.
А они там хи-хи, ха-ха, даже не посмотрели, сунули новый посадочный талон и отпустили. Ну а я пошел прямо к гейту и дремал уже сука там, улетев чуть ли не на шесть часов позже желаемого.
сама встреча перенеслась на следующую неделю. но рад, что ты следишь за моими усехами!
Есть конечно редкие проекты где и код аккуратный и тесты и т.п. Но в остальном - говнище редкостное. Даже популярные штуки типа того же вордпресса или джумлы.
А про типичные туториалы вообще молчу.
У жс с этим получше всё-таки.
Всё это у пыха очень плохое. Глупые люди пишут глупые мануалы. Другие глупые люди учатся по глупым мануалам, и тоже становятся глупыми. Потом все вместе пишут глупые фреймворки. Работая с глупыми фреймворками люди получают глупый опыт, и начинают думать, что делать глупо это правильно.
То-есть дело не в том, что синтаксис кривой. Дело в эко-системе. Это трудно объяснить, если не попробовать самому
Когда язык не форсит писать адекватно хотя бы чуть-чуть, то и будет кулебяка.
Но JS производит на меня точно такое же впечатление.
лефтпады, лапша из колбеков и промисов, языки над языками.
Но фреймворки некоторые вроде ничё, да, подслащивают пилюлю
Например BDD нужен 10 бизнесам, а интернет-магазин 10000.
Бизнес пойдёт и выберет пых, потому шо проще
А сегодня ты можешь писать с такой же скоростью на Свифте, только у тебя есть статтипизация, легчайший интероп с сями безо всякого ffi и т.п., так зачем тебе руби
Именно поэтому я за «PHP».
Кстати, из всей скриптопараши шустрее всего работает небось JS: там жжит же
«Фейсбук» пытался ускориться, сначала компилировали «PHP» в «Си», потом изобрели «HHVM». Но каждый раз они упирались либо в оверхед из-за динамической типизации, либо в тормоза СУБД, что никаким житом не фиксится.
Сначала Яибу стал на рельсы.
А вот потом уже стал ничем.
Офигительный совершенно Zope был в питоне (слишком хороший для вебговна).
Но именно рельсы сделали их популярными.
До фреймворков была такая параша -- CMS. Это когда кусок говна, тупых ограничеий и квадратных колес вместе слепили в комочек
Вот смотри, какой код
https://www.cyberforum.ru/1c-bitrix/thread2456898.html
Или вот (покрути направо, там сюрприз):
В этом же файле происходит отправка данных
У каждого свой
Так пирфоманс будет больше.
https://www.php.net/manual/ru/wrappers.php.php
Хотя в «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».
Я не верю, что сборка XML домом будет твоим ботлнеком:)
Да, макака присоветовала, а другая макака поблагодарила. Потом еще кому-нить расскажет. Так вот и распостраняются бест практисес
https://www.php.net/manual/en/mbstring.overload.php
После обновления «PHP» куча проектов сломается.
Лучше сразу делать двубайтовую кодировку и не думать ни о чём
Тогда придётся думать про
[!] Application was halted by an exception.
Debug-mode is off.
Белый человек решает проблему в перле
Пыхобыдло решает проблему:
ахах
В комменте десктопа жопа походу в том, что тебе надо передать соответствующие стримы в какие-то функции. Т.е. видимо кольцевой буфер нужен с джвумя интерфейсами, а его почему-то не завезли. Поэтому крутят через файл.
Псевдокот
спутил инп и аутп, ну и похуй
Альсо, я в винде форкал так процессы с пайпами, и в своем потоке писал с одного пайпа в другой
Запилить кольцевой буфер который оба интерфейса реализует да и всё. Пайпы нужны только если тебе прям хендлы операционки требуются.
Мне было нужно запустить два процесса, и подменить им хендлы 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» случайно какие-нибудь «бест практисес» не сохранились?
Так можно с 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 лучше не быть ни в чём уверенным
Так вот его беспокоит, что в «PHP» функция mb_strlen второй вариант посчитает за два символа. Его, видимо, ещё беспокоит, что залго будет посчитано за кучу символов.
Хотя на этот случай есть функция grapheme_strlen:
https://www.php.net/manual/ru/function.grapheme-strlen.php
Последняя не считает «combining symbols» за отдельные символы.
Конкретно в данном случае проблема не в «PHP», а в том, что некоторые не умеют работать с «Unicode».
В шаблонизаторе осталась хоть одна функция, поведение которой не зависит от ублюдочного рнр.іпі?
А если попробуешь - то всё норм же. Простой язык, понятные мануалы, умные люди вокруг, удобные фреймворки.
Вот только люди со стороны почему-то все смеются и тычут пальцем. Но они идиоты, видимо. Не надо обращать на них внимания.
Ему смешно, а нам Application halted by exception
JSP имеет диалект JSPX, который позволяет делать well-formed XML документы, это мегакруто.
Минусы правда в том, что во-первых он прибит гвоздём к сервлетам (его нельзя запустить с командой строки) а во-вторых он не умеет эскейпить по умолчанию: надо эскейпить явно, иначе у тебя будет пользователь с именем "<b>", и привет
И наконец, можно писать на Java и не использовать JSP.
Писать на котлине конечно приятнее, чем на PHP, не говоря уже про дебаг, профилирование, и тестирование.
ASP (не .NET) это вомзожность запускать скрипты в IIS плюс пара ActiveX объектов для работы с бекендом. Так что это VBS, древний JScript и прочая хуйня, говно, и не нужно.
А вот в ASP.NET ты можешь писать на C#, что безусловно в миллион раз лучше пыха.
Поверх этого есть какой-то свой шаблонизатор, есть веб-формы, был mvc.net, еще хуйня какая-то..
Что мешает мне делать их на «PHP»? Пиши аккуратно и всё будет well-formed.
JSP хотя бы конпелируемый.
Проебал где-то, не скомпилилось.
Плюс там есть несколько разных технологий. Само JSP реализует привычный для ПХП-кодера паттерн «каша».
Однако с помощью jstl можно вполне нормально шаблонизировать.
Да.
А люди так этого и не поняли. Впрочем в эпоху ангуляров он почти не нужен.
>ASP (не .NET) [...] это VBS, древний JScript и прочая хуйня, говно, и не нужно.
Да.
>А вот в ASP.NET ты можешь писать на C#, что безусловно в миллион раз лучше пыха.
Да.
Опровергаю.
Лучше. И JSP, и ASP.NET.
Но я же уже не мииидл((
В тимлиды подался?
В гугле даже собачек можно в офис приводить.
Но разумеется, там для всего этого отдельное помещение, и если ты не любишь детей и собак, то ты не обязан вообще даже знать об их существовании
> в обеденный перерыв пообнимать свое дитя.
- и сиськой его покормить на виду у всех, потому что онажемать
какая помощь друпалу )))
> Школоло
Эх, а ведь в старые-добрые времена на нём были написаны чуть ли не все приложения с гуем…
У 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
!
Даже нелепое do{ }while(0) в сишных макросах появилось из-за опциональности операторных скобок.
как в tcl
Так мало того. Экономии никакой.
Необязательные операторные скобки влекут за собой обязательные скобки на условии.
Если что в Goвне правильно сделали, так это обязательные {}
print "A" if 1;
А вот
if (1) print "A";
не срботает
А ещё я за «Python». Там нет никаких «скобок».
Кмк, «Питух» может быть действительно неплохим учебным языком.
Пока условный Сёма его соберёт, глядишь выучит Сишку и системы сборки.
А вообще в моём ВУЗе на соответствующих парах нас заставляли вменяемо форматировать код, и за нарушения строго карали. В принципе, тоже неплохой подход (хотя и не настолько… элегантный, как в путухе).
Общеобразовательный уровень средней школы или университет с профильной подготовкой.
С т.з. практики Питух человеку может пригодиться хотя бы в качестве калькулятора.
А у нас как обычно учат тому, что потом нахуй не нужно в жизни.
Если Тарас такое говорил, то я ему ещё как-то верил — он реально писал на Дельфях код.
А так научат детишек Паскалю, а они потом вырастут и в Экселях всё считают.
Вот я кстати так и не научился. Обычно на середине расчёта забрасываю эту хуйню и делаю какой-нибудь питоний скрипт, который csv высирает или через api ячейки патчит.
Работать в «Экселе» напрямую для меня сложно. Я пытался, у меня даже получалось, но я быстро забываю, как это делать. Скилла не хватает.
Этот багор у меня случился ещё в 90х.
Я его на всю жизнь запомнил.
Русификация — зло. Они БЛЯТЬ даже функции попереводили.
Там ещё зло, что в разных версиях «Офиса» имена функций могут немного не совпадать.
Да любой мало-мальски сложный расчёт в экселе - это какой-то ёбаный ад с вспомогательными ячейками и копипастой. Я даже не хочу тратить время на изучение этой хуйни и попытки натянуть сову на глобус.
Простенький график нарисовать или сумму посчитать - ну ок, сойдёт. Остальное проще внешними тулами.
З.Ы. И не предлагай мне встроенные языки.
Ну я в библиотеках .net не особо шарю, без msdn писать не смогу. А смысла их учить ради сраных табличек и, возможно, плагинов к повершеллу я особо не вижу.
Будет же: https://pypi.org/project/pywin32/.
UPD: Дока: http://timgolden.me.uk/pywin32-docs/.
https://govnokod.ru/13763#comment195630
Собственно после его комментария я и начал копать в этом направлении.
Мож и есть какая-то тулза на clang'овском двигле которая может хедер в питон сконвертить. Но не факт.
У меня нет.
А вся скриптушня стоит из коробки.
К тому же дотнет без студии — хуйня.
Имелся ввиду рантайм: Он обычно есть в винде.
Кстати, без студии можно писать еще и в райдере, но он платный, а по тяжести может со студией поспорить
Так у борманда тоже )))
А в целом пока одни квалифицированные коллеги высирают статы из логов в Ыксель, и потом там пирдолятся с формулами.
Другие пишут какие-то парсеры для питонов, мне зачастую проще прям на серваке хуйнуть grep | cut | awk | sort и высчитать всё что нужно.
То же касается многих тривиальных csv.
Я тоже. Правда в детстве у меня VBA не было, только клон Спектрума.
Но я считал какую-то побитовую питушню, конечный автомат для курсовой по дискретной математике.
Её предлагалось считать руками на бумажке, лол.
И как раз тогда только появился VBA. Функций экселя я не знал, гуглов тогда не было.
Написал все нужные функции на VBA, посчитал всё, распечатал аккуратную табличку.
Какой анскилл )))
> делаю какой-нибудь питоний скрипт, который csv высирает или через api ячейки патчит.
Какой скилл )))
Вообще мой мир рухнул.
Приходит борманд на собеседование в контору с Экселем, а дальше картина описанная гостем:
https://govnokod.ru/25444#comment463938
В итоге эксельная девочка-хрюша разъебует в хламину кандидата, который способен решить задачу на десятках языков, сотней способов, включая самые экзотические и изощрённые, вроде сишного препроцессора, constexprов, тьюринг-полного sedа, хачкеля, и остальных.
Go
Достаточно простые для освоения. Статическая тупизация.
Не требуется ооп головного мозга в обязательном порядке.
Если препод не совсем жопорук, то поможет.
Ну а тем, кто до сих пор пользуется XP, можно посоветовать виртуалку.
Вот, например, «gcc» пропагандирует «Objective-C», суёт его во все операционные системы (в «MinGW», например, он есть). Но кто на нём реально пишет?
http://gnustep.org/
Ну тогда вам на php
В «Паскале» принцип: «посрал — убери за собой». Ручная расстановка освобождения памяти тренирует внимание.
В «Delphi», правда, появились строки со счётчиком ссылок.
Подтверждаю. Ещё нужно объяснять, зачем в каждой строчке стоят доллары и собачки.
Чтобы зарабатывать доллары и завести себе собачку.
Правильно решил.
За то мне «Basic» с «Ada» и нравятся. И ещё «Dylan».
В Дилане пошли ещё дальше. Сделали возможность указывать какой именно блок оканчивается.
При этом всё кроме End опционально.
Таким образом на простых блоках пишется End.
Зато на большой вложенности, или очень длинных методах, чтобы не запутаться можно писать полностью.
Имхо, скобочки с отступами отлично решают эту проблему, особенно когда vim их подсвечивапет, и прыгает по ним по проценту.
Правда, бывают блоки на три экрана конечно, там у закрыскобки можно и комментнуть
За пределами шоблонов страниц такой синтаксис почти не встречается.
Есть путаница в нотациях: немцы ноту «си» обозначают как «H», а буква «B» у них обозначает «си-бемоль», а вот у англичан буква «B» обозначает просто «си». Связано это, вероятно, с тем, что в средневековых музыкальных инструментах когда-то не было ноты «си», а «си-бемоль» была.
Если что, «бемоль» означает понижение на полтона (обозначается значком, похожим на мягкий знак), а диез — повышение на полтона (обозначается значком, похожим на решётку).
Т. е. ряд «до-ре-ми-фа-соль-ля-си» немцы записывают как «CDEFGAH», а англичане — как «CDEFGAB». Почему буква «A» означает ноту «ля», я не знаю.
У итальянцев нет однобуквенных сокращений, они пишут: «do-re-mi-fa-sol-la-si».
А в других местах, да, цифры обозначают интервалы или аккорды.
Взять тот же басовый ключ, где весь маппинг съехал. Ну сдвиньте его блять на одну линейку вверх, Си малой октавы всё равно нормально читаться будет. Нет, будем учить 2 отдельных маппинга.
А ты пианино тыкаешь.
Тьфу на тебя!
Почему у клавикордов такая инверсия раскраски, не знаю.
Как я понял, их бывает два типа:
1. С диатоническим рядом (чёрные клавиши тупо удалили). Играть на них пиздец как сложно, потому что трудно найти ноту «до», а если сместиться по такому ряду, то тона и полутона не будут совпадать.
2. С хроматическим рядом (чёрные увеличили до размера белых и перекрасили в белый). Тут если собьёшься, мелодия не испортится, просто транспонируется вверх или вниз.
https://www.youtube.com/watch?v=HUpggXGHYjk
полагаю, басовый ключ наиболее точно удовлетворял настройке какой-нить виолончели
для левой руки ф-но/клавесина он просто используется, скорее, "потому что уже был такой, нах ещё один изобретать"
как и для правой руки - дык это для скрипки родной, "че вы тут пальцебляди лезете в наш уютный смычковый мирок"
ещё немаловажный факт, что ранние клавесинные произведения это обычно для богемного, комнатного потребления
и всякие композиторы, которые пионерили музыку, скорее писали для оркестров (потому что только за это и платилось бабло на госзаказе)
и сидишь ты такой дома при лучине, сочиняешь под сдачу к сроку, записываешь партии на оркестр из скрипки, виолончели, духовые - тебе как раз не дохера надо потом ремап делать из "левой руки" в понятный смычкобляди листинг, ты сразу записываешь как надо
да и ксероксов не особо было в то время
Скрипачи пердолятся, чтобы подогнать высоту своих звуков под другие инструменты, или неточность звучания маскируется эффектом вибрато?
Но я сварщик не настоящий, могу ошибаться.
хуесинные
Вот тебе за это мульт https://www.youtube.com/watch?v=g9Xz2Ta_LDs
Какой багор )))
ого
ну и плюс ля первой октавы = 440 гц, настройка всегда относительно нее ведется
Относительные интервалы соблюдаются - уже норм. Абсолютную высоту большинство людей всё равно не воспринимает, плюс-минус несколько тонов не заметят.
Поправьте, если пизжу
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
Я начинаю понимать, почему крестовики вроде Романа ещё и по сольфеджио всякому угорают. Это такая комплексная сублимация
То обсуждение не нашёл, только два других из разных эпох: https://govnokod.ru/6055#comment79214, https://govnokod.ru/16219#comment237953.
Надо бы каллиграфа вызвать, он охуенный
[Sono d'accordo]
[Non sono d'accordo]
[Leggi di più]
Ну и какой из вариантов мне выбирать?
Хочу такое. Выделяешь на каком-нибудь сайте фрагмент текста на любом языке программирования, и получается нямка.
всё
пизда
уйду в курьеры
никогда не хотел удаленной работы, и вот тебе бляд
вот ждём результатов своих мазков теперь
если дома нет маленьких детей, то че бы и дома не посидеть
Я, говорит, могу тебе перенести адресную строку в нижнюю часть экрана, а то вдруг ты соскучился по временам интернет эксплорера на виндофоне.
А ещё удалил ВСЁ, включая куки, настройки, дополнения и даже кастомные поисковые движки.
Зато адресная строка в нужном месте блять
Ух ты. Похоже не один я такой упоротый, чтобы ставить Гiгетох на телефон.
>А ещё удалил ВСЁ, включая куки, настройки, дополнения и даже кастомные поисковые движки.
Именно поэтому я против «автообновлений».
> не один я такой упоротый, чтобы ставить Гiгетох на телефон
- я не вижу альтернатив. Но лиса не радует в последнее время. На ноуте ушёл на esr, потому что последние версии почему-то начали произвольно сбрасывать зум страниц до 100%.
https://github.com/kiwibrowser
правда он как-то перестал развиваться, надеюсь, не навсегда
- ну то есть альтернатива лисе это только хромиум различной степени зондированности.
А какие есть зонды в опенсорсных сборках?
Ну допустим гугловый DNS. Ну предположим проверка у гугла вредоносных сайтов. Это и ФФ делает по дефолту. Хз отключается ли оно в хроме.
И дефолтный гугл-поиск — вовсе мелочь.
Тут дело даже не в зондах, а в том, что один движок заполонил практически всё.
Сегодня выбирать вообще не из чего.
Хочешь браузер? Ну вот тебе хромиум/хром или полумёртвый фф.
Хочешь мобильник? Пожалуйста, один форм-фактор и аж две операционки, обе достаточно говняные.
Застой какой-то.
Запустил wireshark браузишь, и попутно смотришь на какие хосты оно ходит.
Можно даже не браузить, а наблюдать за сетевой активностью ОС и браузера.
Много познавательного
>Хочешь браузер? Ну вот тебе хромиум/хром или полумёртвый фф.
Это на самом деле неплохой выбор.
Интернет другой к сожалению выбрать нельзя. Кругом тормозные говносайты с кучей перделок, рекламы, трекеров, майнеров и просто питушни.
На тебе скальп Чубакки: https://cdn.trinixy.ru/pics4/20100901/rare_star_wars_photos_40.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