Это копия, сохраненная 11 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.
Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>2347129 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (впрочем, иногда он не работает).
С чего начать
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.
Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.
Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:
- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony или Laravel
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.
Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:
https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md
Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md
Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.
Вот неофициальный роадмап (карта того, что желательно изучить): https://miro.com/app/board/o9J_lbUUBBQ=/
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md
Что почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
- Новости IT на англ. https://news.ycombinator.com/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.
Платиновые вопросы
- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов.
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу (ищи в архиве по слову "устроился").
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Для этого достаточно вставить код на http://beta.phpformatter.com/ и нажать «format». Робот оформит все как надо. Если ты используешь IDE, то там есть горячая клавиша для этого. Список клавиш для IDE: https://gist.github.com/codedokode/8759492
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- ставим тайп-хинты на аргументы функций, результат функций и поля классов
Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:
PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
бамп треду, а то че как лох на дне сидит
На жопаскрипте XDDDDDD
На laravel, очевидно же
CockPHP
Спасибо, исправил статику там. Но с этими категориями все равно не выходит. Во-первых, ускользает смысл первой функции от меня с суммой всех категорий. Потом что, через for как-то проходить с ее помощью надо будет что ли? В текущем виде у меня вроде она просто как count работает для одномерного массива.
А во-вторых, как с простой суммой тут не получается работать с массивом, проблема вернуться во вложенности тут видимо когда цикл foreach углубляется все дальше.
https://onecompiler.com/php/3ydre97w2
Это вообще часто применяется или только чтобы на собесах отсеивать вкатунов типа меня? В php вроде есть уже готовые библиотечные итераторы для такого.
Смысл первой функции - получать цифры, которые будут выводиться в скобках. Это проще делать отдельной функцией.
> $res++;
> if(is_array($value)){
> countCategories($value);}
Тут неправильно. Должна быть такая логика: если $value это строка (то есть, категория без детей, или лист дерева) то прибавляем к $res единицу. Если же $value это массив, то считаем рекурсивно число элементов в нем и прибавляем к $res.
В printCategories логика такая:
- если $value это строка, то выводим $parents + $value
- есди $value это массив, то добавляем ключ в $parents и вызываем себя рекурсивно для вывода этого массива
> Это вообще часто применяется или только чтобы на собесах отсеивать вкатунов типа меня?
Конечно, часто. Представь, например, каталог товаров в интернет-магазине. Ну и на собеседовании такая задача хорошо помогает отсеивать тех, кто не разбирается. Если человек в рекурсии не разобрался, то он наверно и в других абстракциях не разберется.
> В php вроде есть уже готовые библиотечные итераторы для такого.
Ну примени их тогда.
Я согласен, что рекурсия сложная штука, но все же тебе надо как-то в ней разобраться. Чтобы разобраться в рекурсии, тебе надо уметь разбить задачу на части. Например, задачу "посчитать сумму чисел в вложенном массиве" превратить в "посчитать сумму в плоском массиве и вызвать себя для обработки вложенных подмассивов". Аналогично, вывод дерева надо превратить в функцию "вывод одного уровня дерева", которая вызывает сама себя.
В каком месте рекурси это сложно? Мы её в 8 классе ещё изучали. А что будет дальше, мы начнем говорить, что стек/очередь это сложно? Что за регресс. Как же меня бесят современные вкатывальщики, полюбому только из-за денег идут "вайти".
Никакой базы. Про "алгоритмы и структуры данных" как предмет наверное даже не слышали.
>>442696
Чел, такой тебе совет, пройти пару начальных курсов по программированию, только не всратых от otus или подобных говноедов, а нормальных. Эффект сначала будет неочевиден, но со временем ты поймешь, насколько это было полезно.
В индустрии есть базовые вещи и рано или поздно с ними сталкиваются все и вот тогда-то и всплывает разница между профессионалами и вкатывальщиками с завода.
Примерно как у тебя, ты же вроде хотел сначала ссылки со страницы перебрать, а потом столкнулся с некой базовой задачей, не так ли?
Как побочный эффект, будешь на изи проходить любые собесы по алгоритмам.
мимопроходил
>>442762
Спасибо за пояснения и терпение. Кое-как вроде сделал, но нужно еще попрактиковаться, разумеется. Наверное корень моей беды что я с трудом представляю промежуточные значения между вызовами и поэтому только подобной подгонкой что-то получаю.
https://onecompiler.com/php/3ydrm2mmv
>>442800
Веришь или нет, но я изучал алгоритмы и структуры данных, но вот конкретно с рекурсией у меня всегда была проблема, не вижу в упор чем она проще.
> Веришь или нет, но я изучал алгоритмы и структуры данных, но вот конкретно с рекурсией у меня всегда была проблема, не вижу в упор чем она проще.
Ряд алгоритмов вида обхода дерева намного проще описывается через рекурсию.
Просто логически представь, или ты описываешь полностью обход дерева, или просто говоришь что-то вроде
1 для указанного узла дерева
2 сделай что-там-тебе-надо
3 а потом повтори то же для его детей
Скармливаешь этой фигне корень дерева и дальше оно проглатывает всё дерево полностью.
Ах да, еще момент, какие санкции мне грозят за пиратский кинотеатр?
Непонятно, зачем тебе это надо.
Если для личного употребления, то cms тебе не нужен, как и вообще сайт. И управлять нечем, и комментарии не нужны, и всё такое.
Любое облачное хранилище или просто сервер-файлопомойка (арендуешь и будешь туда файлики кидать) подойдут.
А если ты хочешь поиметь с этого гешефт, то у меня для тебя плохие новости, ты очень быстро упрешься в деградацию скорости и косты за сервера при >1 пользователе, а это основное качество для кинтеатра.
Придется во-первых поднять какой-нибудь nginx с настройками под стриминг видеопотока (ты же не захочешь просто людям файлики отдавать, правильно?), запариваться с cdn чтобы они кэшировали трафик и тд.
CMS здесь опять же вопрос десятый.
Вордпресс это такое дно php разработки, но да, вкатится туда будет полегче.
В целом, мир как-то так работает, что чем легче туда вкатится, тем меньше профита ты получишь. Охранником в пятерочку тоже сильно легче устроиться, чем вообще вкатываться, а первое время может и денег будешь больше получать.
Какую ЗП просить за год опыта с божественным битриксом? Сейчас платят 50к.
Я бы битриксоида принципиально не взял. Что за вкус вообще должен быть у человека, чтобы он год этим занимался.
Знал несколько человек, которые "программировали" на битриксе, разработчики из них были примерно никакие.
Очевидно я рассматриваю только Bitrix-конторы, что бы продолжить наслаждаться этой вкуснятиной.
Тогда я скажу, что очент рад, поскольку озвученная тобой сумма которую ты только хочешь попросить в середине 2022, значит зарабатываешь скорее всего ещё меньше, означает, что рыночек порешал и что недопрограммисты тусят в своём отдельном загончике.
Чтобы ты понимал, я 50к получал будучи недоджуном лет десять тому назад, ещё в провинции. Сейчас на свою зп могу, получается, 10 битриксоидов нанять и ещё на жизнь останется.
А вообще конечно виден уровень. Ну зайди ты на hh.ru и аналоги, найди все вакансии, посчитай среднее, домножь на свою скилловость и получи, что хотел. На программаче лучше про зп не спрашивать, тут тебе сейчас местные нищеброды расскажут, что работать за доширак это нормально.
Ага, а ещё инфляцию, средний рейт по индустрии и тд
>Я совсем не знаю ООП
Ничто не мешает тебе парралельно учить ООП пока сидишь на WP. Учи типизацию, паттерны и прочие прелести хорошего кода, а то так и будешь получать копейки за говнокод. А потом перекатывайся в лару или симфонию и забудь cms как страшный сон.
>>444640
>Сейчас платят 50к
Как работягам с завода, я довольно урчу осознавая, что битрикс макаки ценятся не больше васяна с завода или охранника.
Я ждуном получал чуть меньше, но получал опыт в симфонии и практики хорошего чистого кода. Теперь 120к мидл на удалёнке.
А вы сидите на cms'ках не развиваясь. Через 5 лет когда нихуя не поменяется схватитесь за голову, однако будет поздно что либо менять.
Проиграл с тебя, работяги на заводе и стройке больше нас обоих вместе взятых зарабатывают. Я спрашиваю про зарплату для себя, а не про то как там у других, про яхту Сечина еще расскажите.
>А вы сидите на cms'ках не развиваясь.
В битриксе давно нормальный ORM и Vue из коробки.
Забей на любые CMS. Учи сразу ларку. CMS это путь деградации, ты ничему там не научишься, что было бы применимо в нормальных проектах.
Учи PHP, composer для автозагрузки классов, и на ООП(MVC) напиши сайтик, а дальше ларку учи.
>>444917
Увожение. Тоже симфонист на удалёнке.
>>444947
> работяги на заводе и стройке больше нас обоих вместе взятых зарабатывают
Лол. Работал на заводе за 10к, потом на стройке за 20к, до того, как вкатился в айти. Ты видимо гайку даже в руках не держал, какие зп на заводе без блатных московских мест, ахстись.
>Учи PHP, composer для автозагрузки классов, и на ООП(MVC) напиши сайтик
В Bitrix и ООП и composer поддержка присутствует, он скорее содержит в себе Laravel, просто не так удобен в некоторых местах, валидатора нормального нету, но есть свои преимущества, и сторонний подключить можно. Что там учить то? Bitrix в отличие от WordPress может выступать и вполне как фреймворк.
>Лол. Работал на заводе за 10к, потом на стройке за 20к
Мои знакомые получают не меньше 200к, есть машины себе и жене, дом, квартира, на заводе уже поменьше, но 150к на местном платят, но я думаю на нормальном и платят больше, только мне это не интересно, понимаешь?
>Ты видимо гайку даже в руках не держал
Держал, но не крутил, подметал, подносил за 40к на стройке, но быстро надоело и решил пойти в битрикс.
10к это даже не минималка, а что ты мог на 20к делать?
Скриншот сделай своего кода на битрикс, с git blame. Можешь ещё RPS показать. Посмотрим что там за ООП и как битрикс-разработчики код пишут, лул. Но конечно же ты не покажешь свой говнокод.
Какой битрикс, африканская хуйня какая-то. Будешь на российскую контору до гроба говномагазинчики клепать, пока остальные на западных баринов на хороших проектах работают.
>валидатора нормального нету
Это проблема для тебя? В твоей говноконторе небось jQuery юзают и битрикс-разрабы в html php вставляют? Ахах
>Мои знакомые получают не меньше 200к
а чё не 500к/секунду? Без пруфа не балаболь.
Какой-то скрин доки битрикса. Просрался с этого дерьма, у нас так даже джуны не пишут давно. Это php уровня 2002 года?
Сущность в ассоц.массив запихивать, пушка. Вы наверное ещё и реквест берёте из $_REQUEST || $_POST || $_GET ?))
> нормальном и платят больше, только мне это не интересно, понимаешь?
Считаю, люди, которые "зарабатывают менше, но им и так нормально" либо врут окружающим, либо себе, либо всерьез больны.
Ну не может быть такого, чтобы к тебе пришли и сказали "давай мы дадим тебе больше возможностей? сможешь лучше комп собрать, машину купить, чаще в рестораны ходить, что хочешь", а ты такой "нет, мне и так нормально". Это какой-то упоротый дауншифтинг уже. Всегда кстати было интересно, что начинают говорить все эти любители фраз типа "деньги не важны" после сорока, когда организм начинает разваливаться и без нормальных денег собираеть его обратно становится всё сложнее.
> Держал, но не крутил, подметал, подносил за 40к на стройке, но быстро надоело и решил пойти в битрикс.
Очень правильное решение, битрикс это самое для строителей и заводчан место. Одобряю. Ещё советую посмотреть в сторону программирования на 1С, говорят, очень перспективно.
>>444917
> А вы сидите на cms'ках не развиваясь. Через 5 лет когда нихуя не поменяется схватитесь за голову, однако будет поздно что либо менять.
Да нихуя, рынок CMS был и останется. Вся его "проблема", если это вообще проблема, это то, что по сути это рынок конструкторов, которые предназначены для пользователей, которые не умеют программировать, чтобы они могли сами что-то себе накликать. Запрос есть, пользователи есть и будут.
Тут траблы скорее с точки зрения разработчиков, потому что это не разработка в привычном понимании, даже не самом лучшем конструкторе, коим битрикс конечно же не является. Скорее, такое балансирование между нахуячиванием модулей и написанием скриптов для всего этого.
В итоге "разработчики" оказываются замкнуты в своём мирке, который вроде бы и айтишный - а по факту, они просто накликивают людям сайты. Мирок этот не умрет, но при этом никогда не вырастет.
> а чё не 500к/секунду? Без пруфа не балаболь.
Я не он, но мне 4 года назад предлагали 300к с чем-то внутри рф и 400к+ удаленку на какое-то кипрское казино. Так что сейчас в суммы вида 200к я запросто поверю, копейки
>Это проблема для тебя?
Я просто описывал состояние, чего подорвался?
>а чё не 500к/секунду? Без пруфа не балаболь.
)
>твоей говноконторе небось jQuery юзают и битрикс-разрабы в html php вставляют?
Никто на битриксе html в php не вставляет, никогда такого не видел нигде.
Напугала вставка в таблицу? Бедняжка, вот тебе скрин из ларавеля.
>Считаю, люди, которые "зарабатывают менше, но им и так нормально" либо врут окружающим, либо себе, либо всерьез больны.
Так ты мало получаешь, относительно тех людей, что я знаю. У моего брата строительная фирма (работал не у него), он тоже неплохо получает, ты в каком то пузыре из айтишников что ли? Я если бы хотел советы слушать, спросил бы у него. С чего ты решил, что хорошо получаешь?
>сможешь лучше комп собрать, машину купить, чаще в рестораны ходить
Зачем мне машина? Я из дома выхожу прогуляться только. В ресторанах брезгую питаться, мама лучше готовит. Компьютер уже купил, так что видимо все могу позволить. Хорошо конечно иметь много денег и не болеть, но это не программированием надо заниматься.
>Ещё советую посмотреть в сторону программирования на 1С, говорят, очень перспективно.
Думаю пройти их курс в скором времени.
>В итоге "разработчики" оказываются замкнуты в своём мирке, который вроде бы и айтишный - а по факту, они просто накликивают людям сайты.
Я не пишу стандартные сайты, битрикс использую как фреймворк, удобная интеграция с 1C, админ-панель, и ORM.
> С чего ты решил, что хорошо получаешь?
Я более чем уверен, что я зарабатываю больше него.
> битрикс использую как фреймворк
На этом можем тогда закончить. С поехавшими нет смысла спорить
Ахах, манямир треснул, кто то получает больше, и теперь уже ты чмоха? У тебя какое то больное мышление.
Так и хорошо. Всякий скам тупой пусть идёшь в вордпресс/битриксы и сидит в своих российских залупинских конторах под кнут Владимир Кабановича.
>программирования на 1С
>Думаю пройти их курс в скором времени.
Можешь ещё курс по паскалю пройти, устроишься на завод за 17к, будешь бухгалтерше Людке 1С настраивать.
>>445058
Он говорит что ты на заводе будешь 200к получать, лол. А он наверное 400к на битриксе получает, в манямирке на маминой шее.
Покаж перевод последний на счёт, а я свой покажу. Вместе посмеёмся с твоего битрикса, кек.
Дай угадаю, ты ещё и в офис ходишь к кабан Михалычу и работаешь за виндоуз.
>Он говорит что ты на заводе будешь 200к получать, лол
Как же ты нагнул его, выдумал глупость и типо он глупый а не ты, респект
А чем плоха Windows 7? Это же не десятка. WinSCP намного удобнее чем FileZilla к тому же, и Notepad++ без Wine не запускается.
Она вышла из ЛТС и сто процентов ебётся. Для дома может и сойдёт, тем более за натом (хотя drive-by никто не отменял), а для любого серьезного применения это смешно.
Тем, что винда хуже для разработки почти всего, кроме игр. Там много нюансов, но самый простой это то, что сервера так или иначе почти все на линуксе и соответственно чем ближе ты к реальной среде во время разработки, тем легче.
Кроме того, в линуксе есть целая экосистема всяких сервисов и инструментов, те же make, bash и так далее и значительная часть тулчейна разработки построена на них.
Ну для битриксоидов-обезьян сойдёт и винда, могут и гитом не пользоваться, а по старинке через фтп заливать, и слить хоть весь проект и данные бэкдорам с вирусами, кек.
А программисты пользуются линуксом. Ну маком на крайняк. Но точно не виндусятиной.
А как же зипы? backup-26.04.1986.zip
Для меня тут смешнее всего то, что битриксоиды действительно не понимают, почему над ними смеются.
У них - ха! - навыков не хватает понять, что у них не хватает навыков и что они с их битриксом неиронично находятся на самом дне разработки.
Буквально живая интерпретация эффекта Даннинга-Крюгера, "идиоты не способны понять, что они идиоты - потому что они идиоты"
Битриксоиды всё не перестают смешить людей. Вот поэтому ребята никогда не думайте даже в сторону CMS, тем более всяких патриотично-православных битриксов.
Посоны, с чего начать изучение jquery? видел его часто в вакансиях...
как и всё остальное -- с постановки реальной и интересной задачи
Если ты не троллишь сейчас
1) jquery - это вообще не php, а js
2) это просто библиотека, которая предоставит тебе набор функций, чтобы навеситься обработчики на какие-нибудь dom элементы, а ещё предоставляет всякие делалки http запросов и всё такое
3) она была очень популярна лет 10 назад, потому что единообразно решала многие задачи тогдашнего фронтенда, сейчас большая частеё функционала или уже есть прямо в языке, или не нужна, например те же обработчики сейчас мало кто навешивает в современных приложениях на базе реакта/ангуляра/vue
4) ты скорее всего её встретишь только как легаси, либо как часть фронтенда какой-нибудь cms, с которой она идет в комплекте
5) но так как это тупо небольшая с точки зрения интерфейса библиотека, то там нечего изучать. $.on('click', function() {}), $.post('/bla-bla/, function(){}) и может ещё несколько методов, просто посмотреть в документации, что она может и всё. Потом как столкнешься в реальной жизни, глянешь и всё.
>>445402
Не нужна, а если где-то встретишь - беги оттуда. Её на 99.9% убил git, вот его изучать точно стоит, посмотри любые мануалы в интернете, их там до жопы.
>>445417
Никогда не слышал, скорее всего нет. Если PHP - то или Laravel, или Symfony. Второе покруче будет, но и посложнее для новичков. Всё остальное а его дофига, yii, cakephp, zend, codeIgniter, wordpress, drupal, bitrix, ... не нужно от слова совсем, если ты хочешь быть хорошим и востребованным разработчиком. Если не хочешь, то, как видишь, сортов говна прям много, на любой вкус.
>сейчас большая частеё функционала или уже есть прямо в языке
Нету, есть похожие функции, но они не предоставляет полную функциональность.
>Если PHP - то или Laravel, или Symfony
Ты в какой стране живешь? Только Bitrix с Jquery 2.x
Конечно, с битриксом это полный пиздец, проще всю bitrix убрать в гитигнор, там они хаотично засрали временным файлами в каждом углу, правда правда хуй так просто проект развернешь, я помню когда с этой залупой работал на проде резервную копию делал и выкачивал архив чтобы развернуть. А про долбоебов которые через админку пхп фалы правят я уже молчу, это чуть ли не норма. Столько лет прошло, а битриксоиды до сих пор хуйней страдают, я сейчас без гита работу не представляют, как так можно файлики мышкой перетаскивать по фтп в 2022 году не понимаю
ну признаюсь, потроллил чуть-чуть
>битрикс использую как фреймворк
Это тебе Рыжиков или Басыров в книге сказали что там фреймворк? Это хаотичный костыль из говна и палок, с ебанутой логикой, там хотя бы D7 допилили? Или также старое с глобальными переменными, старое ООП и новое D7? Фреймворк это в первую очередь порядок, каждый фреймворк организует четкую структуру каталогов в проекте, все лежит на своих местах, а уже потом все его возможности, посмотри на тот же ларавель или на рельсы, там все четко и понятно. В битриксе же ты можешь заебаться искать где находиться тот шаблон в котором тебе нужно поменять класс чтобы перекрасить кнопку. Элементарный роутинг сука можно реализовать хуйпойми какими способами, десятки их.
И каждый норовит сделать по-своему Самый лютый пиздец это когда берешь проекты от других студий. На рельсах я беру проект от любого другого человека и он будет везде написан +/- одинаково даже старые древние версии от нынешней 7 не сильно отличаются в плане архитектуры.
Это не фреймворк, а набор костылей который ты пытаешься натянуть на глобус.
Да там не много в гитигнор добавить надо, на гитхабе готовые уже лежат файлики.
>>445528
>В битриксе же ты можешь заебаться искать где находиться тот шаблон в котором тебе нужно поменять класс чтобы перекрасить кнопку.
Через эрмитаж можно сразу посмотреть, да даже без него никогда подобных проблем не было. Похоже что ты просто не осилил, можешь сказать что тебе и не нужно было, но таких проблем я не замечал.
неее, не может быть. я вот до сих пор уже 8 лет занимаюсь разработкой в Notepad++ на CMS DataLife Engine 9
Уважение таким. У нас в конторе почти все сайты на базе Joomla! 1.0.15 Lavra Edition 2008, очень удобная и ламповая версия от Свято-Троице-Сергиевой Лавры, смысла менять проверенное решение не вижу.
>Через эрмитаж можно сразу посмотреть, да даже без него никогда подобных проблем не было
Повезло, а мне доводилось допиливать говно после других студий и это адская боль, а если какое-нибудь аспро туда запихнут, то это полный пиздец.
>Похоже что ты просто не осилил, можешь сказать что тебе и не нужно было
Да, не нужно было, но в какой-то степени осилил, но не запоминание где чего лежит и куда мышкой тыкать, а покопался в кишочках. Разматывал includes.php в модуле main, там проверка лицензионного ключа, как оказалось битрикс можно крякнуть за полчаса, реверс инжиниринг оказывается интересное занятие.
Ну и еще БД поковырял, жаль что эта хуйня в постгрес не умеет, я нечто похоже на постгресе организовал перенес базу с проекта на битриксе и у меня получилось извлечь проперти инфоблока и подписать столбцы взяв названия этих проперти из другой Хитровыебанный запрос собрал json, потом развернул то есть получилось как если бы там была нормальная БД с нормальными таблицами, если осилил в sql и посмотрел как там база устроена, то должен понять. Еще почти написал типа генератора кода для работы с инфоблоками через классы, типа DTO, вместо этих ебучих массивов, но до рабочего варианта немного не доделал. Вообще мне не нравилась работа с данными в этой хуйне и я пытался что-то придумать.
Ковырять такое в качестве развлечения иногда интересно, но работать с этим говном это сущий пиздец, да и задачи половина фронтенд, половина создать инфоблоки в админке.
Потом съебал через полгода на рельсы с 35к деревянных на 1100$ (тогда по 60-65 был) припиздел на собесе что с ларавелем работал и типа он очень похож на рельсы
Но ведь ларавель действительно антипхпшный каргокульт рельс. Анти - потому что почти все в пхп стремится быть похожим на жаву.
>что почти все в пхп стремится быть похожим на жаву
Всё пхп само по себе берёт хорошие практики из других языков и включает их в новые версии и фреймворки тут не причём.
Что-то берёт из решёток, что-то из жавы, что-то из раста. Так из этого франкенштейна получается современная пыха.
>Повезло, а мне доводилось допиливать говно после других студий и это адская боль, а если какое-нибудь аспро туда запихнут, то это полный пиздец.
Я тоже таким занимался, и с аспро и другими работал, проблема была только с каким то решением, где не использовались компоненты битрикса, а какой то кривой конструктор сайтов, было сложновато с этим работать.
>как оказалось битрикс можно крякнуть за полчаса
А смысл какой? Обновления, магазин будут недоступны же?
>то есть получилось как если бы там была нормальная БД с нормальными таблицами
>работы с инфоблоками через классы
Ну это уже давно из коробки же есть? Возможно инфоблоки 2.0 это немного не то для тебя, но есть хайлоадблоки же, которые табличные таблицы.
>А смысл какой? Обновления, магазин будут недоступны же?
Чисто спортивный интерес
>Ну это уже давно из коробки же есть?
Ты про орм, ну во первых авторам этого надо почитать что такое орм, а во вторых на тот момент это была нерабочая хуйня, которую гордо объявили на конференции. А моя поелка была в том что генерировались классы из всех полей проперти делались переменные класса с которыми было взаимодействие, вместо элементов массивов и где работал автокомплит ide, ну и этот класс умел в CRUD. Самое главное что это была кодогенерация. Смысл был в том чтобы с ide возможно было работать не как с блокнотом, а чтобы хоть что-то подсвечивалось. Вообще меня в битриксе прям бесило что ide не может нормально работать с ним, в итоге ты пишешь как лох вебмастер из нулевых в блокноте. Да я видел плагины для шторма, но я не помню уже почему от них отказался, наверное не работало
> но есть хайлоадблоки же, которые табличные таблицы.
> хайлоад
Хайлоад блядь, по сути создает обычную таблицу как делают все нормальные люди, вместо этой говноподелки инфоблоков. Ничего хайлоадного там нет, я даже не помню умеют ли они в банальные индексы или от вебмастера это скрыто за ширмой абстракций. Но суть в том что их не так часто используют и за полгода я видел их пожалуй пару раз, все пользовались инфоблоками
>на тот момент это была нерабочая хуйня
Ок, я те времена не застал.
>Хайлоад блядь, по сути создает обычную таблицу как делают все нормальные люди
Зато на презентации хорошо звучит.
>вместо этой говноподелки инфоблоков
Удобная штука, более динамичная чем таблица, поддерживает версионирование итд.
>не помню умеют ли они в банальные индексы
Это же таблицы простые, конечно умеют. Инфоблоки 2.0 тоже умеют.
>Но суть в том что их не так часто используют
Ну да, обычно юзают для справочников, или когда обычных инфоблоков по производительности не хватает, вот тут и приходит битрикс-хайлоад.
>Ок, я те времена не застал.
2019-2020 до сих пор писали CIBlock::ЧегоТоТам, хотя у нас тимлид следил за всеми конференциями, колупался в этом говне 10 лет, знал какие где изменения в ядре и всегда притаскивал новые фичи, раз в месяц митапы делал и рассказывал, но с инфоблоками вроде даже на D7 не перешли
>Удобная штука, более динамичная чем таблица, поддерживает версионирование итд.
Есть такая штука как миграции, тоже есть версионирование в гите и динамично
На офф.сайте много бесплатных видео, курсов, можно пройти платные и бесплатные экзамены. Но проще всего устроится в битриксоконтору.
Да туда берут с улицы, если можешь хэлоуворд на пхп завести вот на этом компе, то приходи, научат
Я так же в одну контору устраивался, но не с битриксом, а с modx. Сказал что никогда с cms не работал, ответ был что-то вроде похуй научим
Я точно знаю что финтех конторы на пыхе пишут. А вот че насчет прям банкинга. Возможно или нет? Или онли Java 8?
Хули нельзя-то? На всём можно написать всё.
Тем более пыха, которую взяли в свои руки ровные пасаны и делают из неё ЭНТЕРПРАЙЗ, а не каличный игрушечный перл.
Я про жизнеспособность решения. Получится ли это сделать не пососав. Технически-то понятно что можно хоть на асемблере.
Технических ограничений пожалуй, почти нет, хотя конечно в таких задачах пыха будет смотреться очень бледно.
Банкинг это в первую очередь процессинг множество событий от платежной системы и не только и ключевое слово здесь "процессинг".
PHP всё ещё сильно заточен под схему 1 запрос = 1 процесс и поэтому обработка большого потока событий будет очень неэффективна. И тут дело даже не только в языке (есть же всякие reactphp, я их юзал одно время, в целом норм), а скорее в экосистеме, библиотеках и так далее.
При этом для работы с очередями тебе придется использовать сишные экстеншены, которые будут так или иначе лажать в сложных случаях и непонятно, как ты будешь их отлаживать без знания си.
Понятно, что всё так или иначе решается, но тут вопрос в требуемых вложениях, банкинг на с++ или го будет совершенно точно намного эффективнее в плане утилизации мощностей, а java или c# будут пожирнее в плане оперативки и мб распараллеливания, но зато там куча возможностей для тюнинга гц и всяких действительно хороших JIT'ов под капотом, которые оптимизируют твой код.
Плюс будет проблема с кадрами, средний с++ник, гошник или там джавист будут квалифицированнее среднего php-разработчика, потому что язык даёт им больше возможностей и соответственно им приходится иметь дело с большим количеством задач. Я вот вообще не уверен, что средние пхпшники всерьез занимаются оптимизацией потребления памяти, им это просто не нужно.
Плюс, посколько на джаве, плюсах и го уже пишут банкинги, в мире есть много джавистов, плюсовиков и гошников с опытом написания банкинга, легче будет их найти и нанять.
Не говоря уже про то, что в "мире пхп" рядом с "серьезными" разработчиками живут "wordpress-разработчики" или там битриксоиды, которых зачастую программистами вообще сложно назвать. Поэтому как ты будешь искать сильных разработчиков, чтобы они не поломали тебе банк-большой вопрос. Точнее как, это всегда вопрос, но в мире пхп этот вопрос будет больше.
Резюмируя, всё конечно возможно, вопрос в издержках и усилиях. С php их будет больше, чем у других языков.
Рекомендую обратить внимание на badoo, они в целом четко всё делают. Важные по перфу штуки пишут на го, а неважные на php. Нормальное разделение труда, каждой задаче - свой инструмент.
Технических ограничений пожалуй, почти нет, хотя конечно в таких задачах пыха будет смотреться очень бледно.
Банкинг это в первую очередь процессинг множество событий от платежной системы и не только и ключевое слово здесь "процессинг".
PHP всё ещё сильно заточен под схему 1 запрос = 1 процесс и поэтому обработка большого потока событий будет очень неэффективна. И тут дело даже не только в языке (есть же всякие reactphp, я их юзал одно время, в целом норм), а скорее в экосистеме, библиотеках и так далее.
При этом для работы с очередями тебе придется использовать сишные экстеншены, которые будут так или иначе лажать в сложных случаях и непонятно, как ты будешь их отлаживать без знания си.
Понятно, что всё так или иначе решается, но тут вопрос в требуемых вложениях, банкинг на с++ или го будет совершенно точно намного эффективнее в плане утилизации мощностей, а java или c# будут пожирнее в плане оперативки и мб распараллеливания, но зато там куча возможностей для тюнинга гц и всяких действительно хороших JIT'ов под капотом, которые оптимизируют твой код.
Плюс будет проблема с кадрами, средний с++ник, гошник или там джавист будут квалифицированнее среднего php-разработчика, потому что язык даёт им больше возможностей и соответственно им приходится иметь дело с большим количеством задач. Я вот вообще не уверен, что средние пхпшники всерьез занимаются оптимизацией потребления памяти, им это просто не нужно.
Плюс, посколько на джаве, плюсах и го уже пишут банкинги, в мире есть много джавистов, плюсовиков и гошников с опытом написания банкинга, легче будет их найти и нанять.
Не говоря уже про то, что в "мире пхп" рядом с "серьезными" разработчиками живут "wordpress-разработчики" или там битриксоиды, которых зачастую программистами вообще сложно назвать. Поэтому как ты будешь искать сильных разработчиков, чтобы они не поломали тебе банк-большой вопрос. Точнее как, это всегда вопрос, но в мире пхп этот вопрос будет больше.
Резюмируя, всё конечно возможно, вопрос в издержках и усилиях. С php их будет больше, чем у других языков.
Рекомендую обратить внимание на badoo, они в целом четко всё делают. Важные по перфу штуки пишут на го, а неважные на php. Нормальное разделение труда, каждой задаче - свой инструмент.
В любой области куча (9/10 людей в среднем по больнице) долбоебов и плюсовики - не исключение.
Но в любом случае просто по роду деятельности, так как плюсы ближе к железу, плюсовики так или иначе вынуждены разбираться в архитектуре компьютера, компилятора, памяти и так далее. Правда, из-за этого же очень многие из них вообще не умеют думать про архитектуру, инфраструктуру, тулчейн, читаемость кода и то, что надо мыться хоть иногда.
Но в сравнении с phpшниками-"битриксоидами" они всё равно выигрывают, потому что хотя бы разбираются в перфе и железе, тогда как условные битриксоиды не разбираются ни в железе, ни в перфе, ни в архитектуре, ни в чём.
Зависит от того, что за контора и что за собес. Если ты сеньор (хотя три года - какой сеньор), то все фреймворки для тебя уже одинаковые, ещё один выучишь просто по необходимости уже на работе.
В php только два нормальных фрейморвка, Laravel (полегче) и Symfony (поакадемичнее), на них и ориентируйся, если контора говорит, что использует что-то другое и при этом ты не уверен в их хорошей техничности, чтобы они могли собрать себе хороший фрейморк и тулчейн сами - не иди туда.
Хуй знает, работал с ларавелем и yii, про фреймворки ни разу не спрашивали, и по сути на жизнь фреймворк влиял слабо. Компания с yii2 была такая большая что я не на самом yii2 писал а пакеты к нему и только поверхностно сталкивался
Вообще на фреймы похуй
Действительно, работаем дальше! Солнце еще высоко.
>При этом для работы с очередями тебе придется использовать сишные экстеншены, которые будут так или иначе лажать в сложных случаях и непонятно, как ты будешь их отлаживать без знания си.
Не пиши хуйни пожалуйста. Во-первых, экстеншны вылизаны до блеска. Во-вторых, никакой пхпшник ни в какой си не лезет, у него для этого мозга не хватит.
PHP норм работает с обработкой очередей, PHP создан чтобы умирать - одно сообщение в очереди - один процесс PHP.
Поднимаешь столько обработчиков сколько тебе надо, какойнибудь AWS лямбдой.
Грамотно разруливаешь аки очереди\эксепшены\транзакции базы и всё ровно будет.
Вопрос по производительности, конечно тут какойнибудь Gо будет с руки.
В PHP отличная объектная модель, нет никаких причин не писать на нём сложный финтех.
>одно сообщение в очереди - один процесс PHP.
>Поднимаешь столько обработчиков сколько тебе надо
Ты же понимаешь что это не просто костылище, а зашкварный костылище? Взять технологию, не умеющую в многопоточность, чтобы делать не ней многопоточныую задачу - это расписаться в своей беспомощности как программиста.
>В PHP отличное НЕНУЖНО
поправил тебя
>нет никаких причин не писать на нём сложный финтех
Если возможность скрипта внезапно завершиться по memory_limit, или отсутствие многопоточности, или отсутствие асинхронных операций, или отсутствие compile-time с проверкой ошибок и статическим анализом (что означает что массу ошибок ты поймаешь в рантайме уже после их совершения), или безумная стоимость абстракций таковыми причинами не являются, то да, причин не писать на пыхе сложный финтех нет.
> безумная стоимость абстракций
имею ввиду оверхед на абстракции в силу того что в пыхе нет компиляции и макросов
Ага, щас. Я сравнительно недавно, года 3-4 назад делал проект на amqp (раббит) и там при обрыве коннекта на уровне сети, экстеншен просто клал php процесс. Никак отловить или обработать эту ошибку на уровне php было в-принципе нельзя.
Или как ты думаешь, в 2019 году rabbitmq был ещё молодой непроверенной технологией? Или это у них "блеск" такой?
Мой поинт был в том, что проблемы происходят со всеми компонентами, всегда. Особенно в сложных случаях. И когда они будут просиходить, то лучше иметь возможности их решения. Если в твой код понапихано сишных экстеншенов, то тебе лучше уметь решать связанные с ними проблемы, хотя бы уметь читать код и дебажить их. Уверен, большинство php программистов в этом случае обломаются.
>>446631
>>446619
Плюсану этих двоих, они шарят, прислушайся.
>memory_limit
У любого приложения есть причина завершиться по причине нехватки оперативы. У пыхи есть процесс менеджер
>асинхронных операций
amphp
>compile-time
ненужно, ошибки типов в рантайме ловятся при простом запуске скрипта, если не писать как руби долбаеб с синтаксической радугой дружбомагией
>статическим анализом
есть в самой пыхе и внешних инструментах aka phpstan
> У пыхи есть процесс менеджер
Внешняя хуета
> amphp
Только примерно все либы на php рассчитаны под старую модель в итоге реальный выигрыш будет только если ты сам напишешь себе велосипеды примерно под всё
> ненужно, ошибки типов в рантайме ловятся при простом запуске скрипта, если не писать как руби долбаеб с синтаксической радугой дружбомагией
Во-первых не ловятся, если ты не вызовешь прям код с ошибкой. Во-вторых отлавливать ошибки на уровне статического анализа по определению более эффективный путь, чум пытаться что-то там поймать в рантайме, что может пойматься, а может и нет. Тесты всё равно впрочем нужны, но они, как и линтеры - это просто дополнительный бонус, а не решение проблемы.
> есть в самой пыхе и внешних инструментах aka phpstan
Как я уже сказал выше, припарки
Я может отстал от жизни, в php уже можно описать типизированный массив объектов вида User[], на уровне языка и статической проверки типов, а не phpdoc'ов? Если нет, то ты сосешь хуй, получается.
Женериков нет, да....
Ну вот, кстати, пример кода с очевидной ошибкой типов: https://onlinephp.io?s=XYxBCsIwEEXXBnKHobhIVj1ABcGFp3ATa0ID7UyYjIiIdzcTBMHlf__9fziWpVhjzbyGWuFMBK_3L58Cf3O64yyZEBKRU22f_H91DewatGanEsaH7p33E4wjyLNEiMzE1vRZY33Q23ZB2xZRQJZcQQhSyKtqhTOKG26E8YKDn5R9AA%2C%2C&v=8.1.9
Ни варнингов, ни замечаний я при запуске скрипта не вижу, пока не вызову напрямую ошибочный код.
А нет, сильно напиздел
<?php
class Person {
function __construct(public string $name) {}
}
if (isset($argv[1])) {
new Person(new DateTime());
}
php script.php
ОК
}
Хотя куча инструментов которые такую хуйню словит, в том числе при CI/CD. А бизнесу выгоднее затарится умными инструментами, которые может освоить даже дурак, чем умными программистами...
>amqp (раббит) и там при обрыве коннекта на уровне сети, экстеншен просто клал php процесс
Пздц, ну и говно. У меня amqp плагин не падал, но вообще это показание к выкидыванию его нахуй.
>Если в твой код понапихано сишных экстеншенов, то тебе лучше уметь решать связанные с ними проблемы, хотя бы уметь читать код и дебажить их.
А дальше? Форкать и потом суппортить?
Ну и потом, весь пых на си написан - бери тогда сразу фалкон или roadrunner, так ты хотя бы сузишь стек.
>Уверен, большинство php программистов в этом случае обломаются.
Я так и сказал
>Плюсану этих двоих, они шарят, прислушайся
Как в том анекдоте: "сходите в цирк, там сейчас выступает рыжий клоун, вас развеселит. - увы, я и есть рыжий клоун"
это мои комменты
>нормальный ORM
Это который парсит аннотации строки или уже нормальный работающий через аттрибуты?
>>445118
>А чем плоха Windows 7?
Для разработки всем, на окнах разве, что под сами окна разработка хороша решётки, гейДев. А веб сервера в основном на линухах. Плюсом крайне уёбищный способ контейнеризации.
>WinSCP намного удобнее чем FileZilla к тому же, и Notepad++ без Wine не запускается
А ещё наверное паскаль с делфи не запускаются и отсутствует поддержка разработки для DOS.
>>445528
>Это не фреймворк, а набор костылей который ты пытаешься натянуть на глобус.
Двачаю.
>>446665
>в php уже можно описать типизированный массив объектов вида User[]
Поскорее бы доставили и сделали строгую типизацию, а то заебали макаки которые даже в тайпхинты не могут, а уже себя погремистами называют.
Ето включает строгую типизацю для скалярнх типов только. Статический анализ кода всего файла это не включает.
> А дальше? Форкать и потом суппортить?
Так об этом и речь. Когда ты программируешь на джаве или там го, то у тебя примерно всё написано на том же самом языке. Соответственно, когда происходит какой-то нёх, то ты просто включаешь дебаггер и лезешь вглубь того же клиента amqp и разбираешься с тем, что там происходит.
PHPшники такого зачастую лишены, и это одна из причин, почему я бы не рекомендовал использовать пыху для действительно серьезных вещей, просто перед разработчиками встанет ещё один барьер в таком случае, который ещё сильнее усложнит разработку.
>>446708
> Поскорее бы доставили и сделали строгую типизацию, а то заебали макаки которые даже в тайпхинты не могут, а уже себя погремистами называют.
Думаешь, поможет? Я вот сомневаюсь, как раз из-за наличия битриксоидов и нормальных людей в одной области. Пока у тебя в cms можно накликивать новые типы данных и поля мышкой, ни о какой типизации в коде речь идти не может (про кодген здесь умолчим, в cmsках его не особо жалуют).
Не говоря уже про "наследие" старых версий пхп, в которых ассиоциативные массивы ничем не хуже объектов (а классы не нужны) и к которым привыкли просто поколения долбоебов.
>>446681
Тут есть один очень простой момент, либо у тебя есть система типов, которая позволяет выводить и проверять все такие ситуации на уровне языка (в компайл тайме например), либо тебе придется запускать чёто поверх кода, что должно этот код спарсить, самому что-то придумать, посравнивать, вывести и зарепортить ошибку.
Внешние тулзовины априори это надстройки над языков, и поэтому они априори всегда будут менее эффективны.
Поэтому сравнивая php с той же джавой а лучше котлином или голангом, он всегда априори будет менее надежным, просто потому что в одном случае ты имеешь гарантии на уровне языка, а в другом - на уровне хз чего, хз запущенного или нет поверх хз какого кода.
И да, бизнесу выгодно минимизировать траты, в том числе, штрафы регулятору и всякие траты на компенсации пользователям. Именно по этой причине, собственно, в финтехе пхп почти никто не использует.
Ну и кстати ещё одна причина, из-за динамической структуры, пхп легче хакнуть, мне кажется, кода не проходит, чтобы в serialize новый способ удаленного исполнения кода не нашли. И даже если починят их все, пхп по определению динамический и поэтому менее секурный.
> А дальше? Форкать и потом суппортить?
Так об этом и речь. Когда ты программируешь на джаве или там го, то у тебя примерно всё написано на том же самом языке. Соответственно, когда происходит какой-то нёх, то ты просто включаешь дебаггер и лезешь вглубь того же клиента amqp и разбираешься с тем, что там происходит.
PHPшники такого зачастую лишены, и это одна из причин, почему я бы не рекомендовал использовать пыху для действительно серьезных вещей, просто перед разработчиками встанет ещё один барьер в таком случае, который ещё сильнее усложнит разработку.
>>446708
> Поскорее бы доставили и сделали строгую типизацию, а то заебали макаки которые даже в тайпхинты не могут, а уже себя погремистами называют.
Думаешь, поможет? Я вот сомневаюсь, как раз из-за наличия битриксоидов и нормальных людей в одной области. Пока у тебя в cms можно накликивать новые типы данных и поля мышкой, ни о какой типизации в коде речь идти не может (про кодген здесь умолчим, в cmsках его не особо жалуют).
Не говоря уже про "наследие" старых версий пхп, в которых ассиоциативные массивы ничем не хуже объектов (а классы не нужны) и к которым привыкли просто поколения долбоебов.
>>446681
Тут есть один очень простой момент, либо у тебя есть система типов, которая позволяет выводить и проверять все такие ситуации на уровне языка (в компайл тайме например), либо тебе придется запускать чёто поверх кода, что должно этот код спарсить, самому что-то придумать, посравнивать, вывести и зарепортить ошибку.
Внешние тулзовины априори это надстройки над языков, и поэтому они априори всегда будут менее эффективны.
Поэтому сравнивая php с той же джавой а лучше котлином или голангом, он всегда априори будет менее надежным, просто потому что в одном случае ты имеешь гарантии на уровне языка, а в другом - на уровне хз чего, хз запущенного или нет поверх хз какого кода.
И да, бизнесу выгодно минимизировать траты, в том числе, штрафы регулятору и всякие траты на компенсации пользователям. Именно по этой причине, собственно, в финтехе пхп почти никто не использует.
Ну и кстати ещё одна причина, из-за динамической структуры, пхп легче хакнуть, мне кажется, кода не проходит, чтобы в serialize новый способ удаленного исполнения кода не нашли. И даже если починят их все, пхп по определению динамический и поэтому менее секурный.
>Внешние тулзовины априори это надстройки над языков, и поэтому они априори всегда будут менее эффективны.
Вывод неверный
Аксиома - это тезис, который не следует ни из чего, и который решено считать верным просто чтобы иметь возможность работать с множеством доказываемых теорем. Я не понимаю, почему я должен принять твой высер на веру. Отсутствие у тебя понимания о семантике языков, о том что компилятор и статический анализатор - два разных инструмента даже если оба от вендора - не есть достаточная причина.
Ты, видимо, у мамы дурачок.
Если у тебя сам язык построен так, чтобы минимизировать все возможные непонятки и вынести максимум логики из рантайма в компайл тайм, то есть с дженериками, правильным нуллабилити и много чем ещё, то тогда такой язык будет надежнее прочих, за счет дизайна языка. Php очевидно движется в эту сторону, но сейчас не такой.
Поэтому твои вскукареки идут мимо кассы, любые твои статические анализаторы языка поверх динамического языка будут давать false positive.
Вот только что хотел сказать, что у меня плагин не нашел в новой версии. Установил старую версию 21.2.4, но через 2 месяца он все равно прознал что триал прошел. Сейчас поставил 21.1.4 и руками выполнил
https://gist.github.com/ehbc221/e99d10c6c768bf2ad79aa5cf4738a8de
Умирание это фича языка, потому её и не пытаются исправить.
PHP не умеет и не должен уметь поддерживать долгие содинения, он не должен уметь в многопоточность by desing.
Как раз именно это решение избавляет от всех проблем связанных с менеджментом памяти и многопоточностью. Нет многопоточности - нет проблем.
В том числе именно это делает язык простым и обеспечивает низкий порог входа.
Щас бы поискать технологии без внешних припарок.
На каждой итерации у тебя перезаписывается массив текущим элементом, в итоге только последний остался.
Чтобы добавлять элементы вместо перезаписи надо написать внутри цикла $arr[] = 'элемент';
А что делать, если мне нужен обычный массив, а не вложенный? Просто мне потом необходимо обращаться к этому массиву по названию ключа элемента
Ну там зависит от структуры массива изначального. Я так понял у тебя что-то подобное?
https://onecompiler.com/php/3yef57as6
Не. Условно, мне надо сделать массив $arr со следующим сооветствием:
"Вася" => "Петров",
"Саша" => "Иванов",
"Миша" => "Федоров"
Допустим, что у меня есть $perem = "Вася", мне нужно, чтобы при обращении к $arr[$perem] выдало "Петров"
$arr[$subel['smth']] = $subel['another'] ?
https://onecompiler.com/php/3yef6qhwa
Типа такого? Я не очень понимаю в чем вопрос. Все зависит откуда ты берешь данные для итогового массива.
Можешь свою телегу дать? Я бы тебе там объяснил
Ебать компуктер саенс - массив массивов. Уровень книжки пхп за 24 часа.
Тебя случаем в растотреде не обоссали намедни?
Убери заголовок и убери build_query, просто парамс.
Может надо будет добавить заголовок x-requested-with, если не сработает, но это редко бывает.
Ещё юзерагента нет, будет стандартный курловский, тоже может быть отлуп, если это чужой сайт.
Хули тут ванговать, нужна дебаг прокси. Ставишь её адрес в браузере и в своем скрипте и потом смотришь отличия.
Он сам энкодит и подставляет нужный тип, когда ты передаешь массив в пост, так что конкретно этот заголовок не нужен.
Не надо ничего урленкодить и дополнительно делать, просто передаешь курлу реальный массив, он сам всё сделает.
Мань, научись читать уже.
Коммент не про отсутствие фичей в языке и не про его нишу, хер бы с ним. Коммент про выбор программистами явно неподходящего инструмента.
Мань, я ж пишу, статический анализатор и компилятор - это два слабо связанных между собой инструмента. Возьми тайпскрипт. Это просто анализатор поверх уже существующего джаваскрипта. Или скалу - примерно то же самое. Или pvs studio. Или ты мне трёшь про то что условный golang имеет лучший анализатор чем встроенный в условный phpstorm? Так это от бюджета зависит. Возьми какой-нибудь строгий компилируемый vlang (который на секундочку, просто транспайлер в си), так у пхп с его сотнями инстнументов типа psalm, phpstan, phpstorm статический анализ получше будет.
Если такое не возможно из коробки, то ткните носом что делать, чтобы было возможно
>могу ли я производить какие то манипуляции с сайтами в интернете, запустив программу на PHP на своем домашнем компе?
да
>Например, хочу чтобы логинило на сайт с помощью моего скрипта, который я скоро напишу
обрети ясность в том, что представляет собой "логинило на сайт" более детально. Изучи протокол http, что такое get и post запросы, что такое заголовки и кукисы.
нажми F12 в своём браузере, вкладку network, посмотри как устроены сетевые запросы.
Вот я бы хотел объяснить рекурсию так, чтобы было понятно, но никак не могу сформулировать слова.
Если ты попытаешься представить себе, как ты передаешь в функцию сложный массив, и эта функция вызывает саму себя, и вторая копия функции вызывает третью, и тд. то ты скорее всего запутаешься. Это все трудно представить в голове.
Вместо этого тебе надо представлять простые примеры. Допустим, мы передаем в функцию плоский массив из 3 элементов. Как она будет работать? Допустим, теперь мы заменим один элемент массива на новый массив. Как будет работать функция? То есть, стоит начинать с простых примеров и далее немного усложнять их.
Если мы не используем глобальные и статические переменные (не надо их использовать), то мы можем передавать данные в функцию только через аргументы, а возвращать из функции только через return (если надо вернуть несколько значений сразу, то можно вернуть массив с ними). То есть, все данные, которые нужны функции, должны передаваться через аргументы.
В твоем решение есть ошибка. Твоя программа выводит:
> Кондитерские изделия (4)
> Торты (2)
> Кондитерские изделия / Торты / Из бисквита (0)
А должно быть:
Кондитерские изделия (4)
Кондитерские изделия / Торты (2)
Кондитерские изделия / Торты / Из бисквита (0)
Это должно быть несложно поправить.
Также, вот этот код:
> foreach($parents as $p){echo "$p / ";}
Можно заменить на echo + implode.
Также, напомню, что есть еще третья и четвертая задачи и после них я могу попробовать дать что-то еще посложнее: >>2439347 →
curl - это HTTP-клиент, то есть, программа, способная отправлять HTTP-запросы к серверу и получать на них ответ (что такое HTTP, можно почитать в недописанном уроке https://github.com/codedokode/pasta/blob/master/network/http.md ).
Обычно curl используют, чтобы вручную отправить запрос и посмотреть ответ и его заголовки.
Друзья, давайте все разговоры про зарплаты подтверждать хоть бы вакансиями на hh, а то иначе получается "знакомый брата отца знакомого рассказал что получает 200к".
Ну и глупо рассматривать цифру без количества часов. Может это вакансия на вахту, где ты будешь 6 дней в неделю по 10 часов вкалывать и где типичный посетитель этого сайта помрет от перенапряжения в первый же день.
Windows 7 без телеметрии действительно самая удачная версия винды. Можно было бы на ней закончить, но Майкрософт хочет денег и большие данные (шпионить за пользователями и продавать эти данные) и потому делает новые версии винды, хотя обещали что 10 будет последней версией.
Ты описал проблему многих CMS - у них нет возможности работы на нескольких серверах и переноса данных, миграций (то есть, ты на дев-сервере что-то поменял в админке, протестировал и дальше руками копируешь файлы, таблицы и делаешь те же операции уже на проде).
Но твоя жалоба лишь демонстрирует твой низкий скилл. Что, кроме него, тебе помешало самому написать систему миграций и деплоя?
> Когда ты программируешь на джаве или там го, то у тебя примерно всё написано на том же самом языке.
Неверно. В Java можно подключать нативные библиотеки на Си, в Андроид приложениях это часто используется для производительности или для обфускации.
Условно, если тебе надо работать с USB то скорее всего ты подключишь libusb, а не будешь писать с нуля аналог на чистом Го/Java. Иначе это будет глупость, каждую библиотеку переписывать на каждый существующий язык.
Тебе надо использовать здесь стандартную функцию array_column, а не изобретать велосипед. Но так как ты начинающий, то лучше сначала написать вручную, а потом заменить написанное на array_column.
Си это очень плохой язык для обучения программированию. На нем очень сложно писать правильный код и миллион способов выстрелить себе в ногу. Все, что можно было сделать неправильно, в Си сделано неправильно. Плюс у этого убогого нет ни менеджера пакетов, ни нормальной декларативной (не основанной на скриптах и костылях) системы сборки.
С помощью редиректа. Регистрация и показ списка это две разных страницы. Процесс выглядит так:
- пользователь заходит на страницу добавления студента http://example.com/add
- ему выдается форма регистрации
- пользователь заполняет ее и отправляет POST-запрос на /add
- скрипт проверяет правильность, если все ок, то добавляет данные в БД и делает редирект на страницу со списком студентов
Если непонятно, то уточни, что именно тут непонятно.
"Маршрутизация" - это просто определение по URL, какой контроллер и какой метод надо вызвать. То есть, если пришел запрос на /add, то вызвать AddController, а если /list, то ListController.
В мануале https://www.php.net/manual/en/function.curl-setopt.php написано:
> CURLOPT_POSTFIELDS
> The full data to post in a HTTP "POST" operation. This parameter can either be passed as a urlencoded string like 'para1=val1¶2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
То есть, для x-www-form-urlencoded надо передавать строку.
>>449733
Чтобы узнать причину, надо не гадать, а посмотреть, какой именно запрос отправляет curl. Это можно сделать так: поднять HTTP-сервер командой netcat и отправить запрос к нему, и тогда netcat выведет его в консоли:
nc -v -l -p 9000
В linux утилиту netcat легко установить, под винду, наверно ее можно где-нибудь скачать.
3 месяца буду пыхтеть, потом могут принять или кикнуть. Если кикнут, то я даже не знаю, смогу ли я куда то вкатиться. Считаю, что это главный вызов в моей жизни. Если провалю, тогда точно ркн, ведь второго такого шанса уже скорее всего не будет.
Какие подводные?
Что ковырять будешь?
Реально, спизданул. Давно себе сделал функцию для запросов и копипащу.
>>450728
Когда тебе надо работать с хттп, очевидно же. Ровные пасаны используют всякие guzzle, но если тебе надо простой скрипт без композеров и гигабайтов говна, то курл самое то.
Хотя в газзл есть поддержка разных движков кроме самого курла + разные ништяки вроде асинхронности.
>Что, кроме него, тебе помешало самому написать систему миграций и деплоя?
Пидорский битрикс сам себя обновляет. И это требование клиентоса. Он говорит "битрик же себя сам обновляет? хочу получать обновления по кнопке, мы за это деньги заплатили. Миграции? какие нахуй миграции? какой гит? не знаю ничего такого"
> работать с хттп, очевидно же
не очевидно,пример использования?
из сервера отправить запрос на другой сервер?
Сделать запрос на апи, сделать веб скрапер, сделать бота для другого сайта и т.д.
Какое тестовое было для стажировки? Или там просто собес устный?
Имеется в виду более привычная с коллбэками, в курле можно просто молотить много запросов одновременно и делать что-то уже только когда дождешься всех, по-моему.
Причем тут хидер блять, ты его отправляешь своему клиенту, который загружает твою страницу.
Курл это другой клиент который загружает другие страницы. Вот ты в браузере загружаешь страницы и ходишь по сайту - посылаешь запросы. Вот так и курл может слать запросы.
Я хуею с тебя, конечно.
У тебя реально проблемы с пониманием что такое клиент/сервер. HTTP это протокол, который позволяет клиенту подключиться к серверу и отправить запрос, на который сервер отдает ответ. Клиент это тот, кто посылает запрос, сервер это тот, кто отвечает на него.
Когда ты пишешь сайт на PHP, то твой код работает на стороне сервера. Браузер является клиентом, отправляет HTTP-запрос к серверу, на сервере запускается твой скрипт и отдает в браузер ответ, а браузер показывает его на экране.
Когда ты используешь HTTP-клиент (curl или любой другой вроде guzzle) то твой PHP-скрипт выполняет роль клиента и сам отправляет запрос к другому серверу, как браузер. Обычно такие PHP-скрипты запускаются не через браузер а из командной строки, то есть ты в консоли пишешь php my-script.php и он выполняется и посылает запросы и как-то обрабатывает полученные данные.
Ну например, такой скрипт может спарсить с сайта и сохранить в базу данных какую-то информацию.
Обрати внимание, что "сервер" имеет 2 разных смысла: этим словом называют программу, отвечающую на запрос, а также компьютер, на котором работает эта программа.
Слово curl тоже имеет 2 смысла: это модуль PHP, который позволяет отправлять HTTP-запросы, а также это утилита, которую можно запускать в командной строке без написания PHP кода.
Подробнее про HTTP: https://github.com/codedokode/pasta/blob/master/network/http.md
Подробнее про командную строку: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Отправить HTTP-запрос, и не в любой кусок кода, а только на HTTP-сервер, который принимает запросы. Правильнее сказать не отправить переменную, а отправить произвольные данные (текст, файл, массив и тд).
Спасибо,анон!
И тем не менее в отличие от php всякие либы вида grpc, kafka, rabbitmq и так далее в джаве написаны, собственно, на джаве.
Можно != обязан.
Ну 200к это прям объективно немного, на том же hh их дофига и больше, станадртные 168 часов в месяц.
Самые "вкусные" вакансии кстати зачастую добываются не через hh, а через нетворкинг или напрямую через контакт в контору, если знаешь, что там хороший рейт. Ещё в последнее время стали очень развиты телеграм чаты, каналы и боты с вакансиями, иногда там встречаются +- неплохие.
Сходу нагуглил пикрелейтед до 500к, не пришлось даже напрягаться. Конкретно эту контору не знаю, но в вилку вполне верю, абсолютно обычная по нашим временам.
250-500к - это значит ты получишь 250к в лучшем случае. Плюс они не ищут работника, а подрядчика. Так что ты ещё налоги отминусуй и прочие расходы.
> Конкретно эту контору не знаю, но в вилку вполне верю, абсолютно обычная по нашим временам.
Ты зарабатываешь 500к? Твоя вера основывается на каких-то пруфах или на курсах вайти на уши наклали?
Вы блять знаете хоть что-то, или за пару дней научились циклы крутить и уже дохуя разработчики?
Какие ребиты, какие кафки? Вы сможете круд на чистом похапе написать, чтобы он не тёк и не иньецировался?
Это любой даун может.
> Ты зарабатываешь 500к? Твоя вера основывается на каких-то пруфах или на курсах вайти на уши наклали?
Пикрелейтед за два прошлых месяца за август не буду прикладывать пик, пол месяца в отпуске хуи пинал.
Так что да, зарабатываю и знаю, что могу больше. Также очень смешат местные нищеброды, для которых зп 200к это что-то мифическое.
И потом бутылочку всопа с телефона за 300к.
А ты так и сидишь в рейтузах с мамкой в почти 40 лет.
Знаешь почему я радуюсь? Что такие как ты - могут лишь фотошопить циферки на скриншотах, у тебя никогда не будет хорошей тян, хорошей работы, тебе визу даже не дадут, будешь загорать в зажопинске.
8000$ - чтоб такие деньги получить чистыми - едут в Сан-Франциско или Сиэтл, кого ты хочешь наебать тут, лол.
У тебя дебила циферка в балансе меньше, чем в поступлении, плохо замазал, кек. Ты якобы получаешь в 3 раза больше меня, а баланс у тебя на уровне нищеброда-заводчанина. Никогда не понимал зачем врать что ты богач, сидя в рваных носках, кекус
Не угадал, баланс такой, потому что деньги я на зарплатном счету особо не храню перевожу в Армению и в тех банки, которые ещё умеют в сепу. Хотя я не особо и сомневался, что придет какой-нибудь мамкин нищеброд и начнет искать фотошопы.
Если бы я записал не фото, а видео, ты бы сказал, что это не мой телефон. Если бы я снял видео с паспортом, своим лицом и данными счета, ты бы сказал, что это деньги не за работу, а я сам себе их перевел или что-нибудь такое. И так до бесконечности.
Даже если бы я каким-то чудом убедил работодателя официально в твиттере написать, что да, у них такие-то зарплаты, я официально трудоустроен и получаю ровно столько, сколько написано, ты бы просто ответил, что я сын маминой подруги, устроился по блату и что реальный человек таких денег никогда не получит.
Стоит просто уже признать, что тебе легче искать фотошопы и придумывать отмазки, чем поверить, что такие деньги в IT действительно есть, их действительно можно зарабатывать и это доступно не единицам, а вполне себе анону с улицы, начиная мб от миддла.
Да, они где-то там, в Армении, а в кармане дыру мышь проела, но ты не покажешь настоящие счета. Дай угадаю, налички валютной у тебя тоже конечно же нет, а в кошельке 37 тыщ 987 рублей. И машины у тебя нет, ты минималист эко-френдли, и дома-коттеджа своего нет, как Дуров квартиры снимаешь.
Настоящего нищеброда всегда видно как он пытается в рваных носках коробкой от айфона посветить.
ты зарабатываешь 6млн рублей в год чистыми. Это зар.плата айтишника в амазоне например. Ты понимаешь что ты смешон?
if ($user->name == 'abu') {
$permissions = [1,2];
} elseif ($user->name == 'nariman') {
$permissions = [3,5];
} else {
// дефолтное поведение
}
Если модера увольняют и или добавляют нового, он во всем проекте меняет подобные участки кода. Это только один пример, там дохуя подобного и даже худшего, и про псры и нейминги, код стайлы там нихуя и не слышно, документации нет, сформулированых требований нет. Тупо уволится я не могу, подписал контракт мол взамен на стажировку я должен отработать 1.5 года. Что бы вы сделали? Или я выебываюсь и нужно просто закрывать таски, пока платят? Скоро аккаунт менеджеры компании которая меня туда продала будут спрашивать как мне проект и тд.
Имеются:
1) books
2) comics
3) reviews
4) user(author)
На рецензиях Many-to-one с books, comics и user.
К какому эндпоинту в таком случае принадлежат reivews?
Вижу два варианта
books/:id/reviews
comics/:id/reviews
user/id:/reviews - чтобы собирать все reviews, которые написал юзер, этот эндпоинт останется одинаковым в обоих вариантах
Или
reviews/books/:id
reviews/comics/:id
user/id:/reviews
Как хорошо, что есть такие вакансии. Благодаря им пхпшники навсегда остаются пхпшниками и не пытаются вкатиться в языки программирования. Боже, благослови расмуса лердорфа посмертно, пусть пхп будет вечно.
Я стал получать такие зепки после переезда в мск таймзону. Ну у меня к тому времени 10 лет пых-стажа было. Собственно, я себе пыхом на дом заработал. Пиздец, ну и времечко было. Как хорошо что я забыл это всё как страшный сон и занялся программированием.
А тебе какое дело, нубьё? Только нубьё озабочено "вкатом в языки программирования".
>Что бы вы сделали?
Я бы не подписывался на стажировку изначально, сразу бы искал работу с понятными условиями.
Иными словами, я бы не был тобой.
Теперь крутись. В принципе полтора года - не смерть.
>Только нубьё озабочено
Крч, рассказываю, как бывает при личностном росте (тебе неведомо, но хоть представить попробуй).
Когда ты овладеваешь каким-то ремеслом - ты однажды, и это неизбежно, встаёшь перед выбором - искусство/знания vs деньги.
Пример второго - это какой-нибудь битриксоид, познаний в теории у него никаких, но платят хорошо. Битриксоид - это хорошо себя выдрючившая обезьяна. Он или не захотел или просто ему оказалось не по силам изучать ну например git или докер или MVC-архитектуру или REST или вебсокеты, понятно в общем.
Так вот, пых-обезьяна качественно в этом смысле ничем не отличается. Пых-обезьяна так же не является программистом потому что пых-обезьяна с программированием не сталкивается. В пыхе всё просто - ты хуяришь по шаблону или идёшь нахуй. Творчества в пыхарстве нет никакого. Знаний у пыхарей нет никаких. При этом пыхари попадают в ловушку высоких зарплат, и какая-то часть из пых-обезьян делает выбор в пользу денег. Зачем учить какую-то схему, если в пыхе и так неплохо платят, к тому же на нём написан вордпресс, покрывающий 80% вебсайтов, а ещё не бывает плохих языков пограммирования, бывают плохие программисты, ну вы все слышали это квохтанье.
И я правда искренне благодарен расмусу что он придумал такой великолепный фильтр для слабоумных дебилов, который неизбежно стрельнул. Конечно же 80% веба написано на пыхе, на чём же ещё сможет говнокодить вся эта масса желающих. Воистину, если бы пхп не существовало - его следовало бы создать.
А, ну и да, джетбрейнсы, сделавшие пхпшторм, вы великолепны
GET /reviews?book=123
это потому что у тебя может быть множественный фильтр
GET /books?author=1&agency=3
ну если тебе невтерпёж - то возьми GET /books/123/reviews, но не таращ его в паблик, используй для внутрянки
для создания конечно же
PUT /reviews
\
>ты зарабатываешь 6млн рублей в год чистыми
>Ты понимаешь что ты смешон?
почему 6 млн - смешно? жить вроде можно
а да, POST, путаю их постоянно
>Что бы вы сделали?
Переписывал бы легаси на удобоваримый код. Хорошая практика которая закалит твою попочку для стрессоустойчивости.
Как распознать малолетнего серуна(тебя), который к разработке отношения не имеет - он пытается на двачах обосрать язык, да ещё и без всяких аргументов.
Накидайте ему репорты, он видимо забыл что он не на /b , коллеги.
Просто попробуй POST запрос на сервер отправить, если curl не получится возьми Postman, там понятнее должно быть
Про фетч я в курсе,но не понятно как принять?
Будет лежать в $GET или $POST.
> Что бы вы сделали?
Связывался бы с ПМомом, обрисовал бы ситуация, предолжел бы выделять, к примеру, 40% времени на рефакторинг и справление багов/небезопасного кода, аргументируя рисками.
Ты бы доверил джуну рефакторинг?
books/:id/reviews лучше так как у тебя скорее всего уже есть URL начинающиеся с books и логично к ним добавить и reviews.
Я тебя должен честно предупредить, что чистый REST вообще плохо работает, и не надо слепо следовать принципам, а надо смотреть как будет удобнее пользоваться API. Например, удобнее когда данные получаются 1 запросом, а не кучей отдельных, хотя куча запросов лучше соответствует идеологии REST.
>>452401
> искусство/знания vs деньги.
Нет, не так. Делать то, что тебе интересно vs то, что интересно твоему работодателю. Типичный пример - писатели. Ты можешь писать книгу, которую прочтет 100 человек и 1 тебе задонатит или писать сценарии для рекламы или телесериалов для даунов, что хорошо оплачивается.
Если у PHP-разработчика нет никаких знаний, то зачем платить больше, чем кассиру в пятерочке?
> в ловушку высоких зарплат,
А высокие зарплаты дают за высокий скилл и желание его применять на благо бизнеса, а не строить из себя непризнанного гения. Если ты такой гений, то создай свой высокоприбыльный бизнес и пошли всех работодателей.
>который к разработке отношения не имеет
уже 16 лет как "не имею отношения" к разработке
это, пожалуй, больше чем ты себя помнишь
и это не считая экзаменационной работы в школе (написал графический редактор) и всяких работ в университете.
>без всяких аргументов
я бы понял если бы ты запросил аргументы о недостатках например lua, julia или v, но блин пых... все знают, что пых - дерьмо. если ты совсем недавно в индустрии - начни с "фрактал плохого дизайна", останутся вопросы - задавай
А у тебя нет каких-то своих идей, что хорошо бы было сделать, что интересно было бы попробовать, какого приложения не хватает? Не было такого, что пользуешься каким-то сайтом или приложением и видишь неудачные моменты, которые можно было бы исправить? Если тебе неинтересны учебные задания, попробуй придумать идею какого-то реального приложения, которое может быть полезно людям.
Вот для вдохновения блог человека, он периодически придумывает и реализует всякие небольшие проекты и даже немного на этом зарабатывает: https://tinyprojects.dev/projects .
Если нет идей, можно просто попробовать сделать упрощенный клон чего-то. Не знаю, свой криптокошелек, или криптомессенджер или службу заказа такси.
Если надо передать переменную из JS кода в PHP: отправляешь GET/POST запрос с помощью XMLHttpRequest/fetch и на сервере получаешь данные в $_POST/$_GET. Если ты отправляешь JSON в теле POST-запроса, то надо прочитать этот JSON из потока php://input ( https://www.php.net/manual/en/wrappers.php.php ) и вручную раскодировать.
Если надо при генерации страницы вставить данные в JS, то используй echo json_encode($data);
>Делать то, что тебе интересно vs то, что интересно твоему работодателю.
Я делал то что мне интересно и когда я тупо рубил бабло, и когда изучал новые языки, и сейчас, когда я делаю распределённую субд.
Это всё интересно именно мне. Я не делаю то что мне не интересно. Интересно ли это моему работодателю - мне до пизды.
Выбор возникает примерно как я написал - "искусство/знания vs деньги". Ну то есть будешь ли ты делать шавуху за миллион в день или будешь изучать работы Канта, Гегеля, Ялома, Юнга бесплатно или за минимальный прайс.
>А высокие зарплаты дают за высокий скилл и желание его применять на благо бизнеса
Конкретно в пыхе дохуя легаси, а легаси - значит нахуеверчено по самое не могу, хер разберёшься. Платят тому кто разберётся и продолжит это говно толкать дальше. Нет, к программированию это не относится. Это не про навыки абстрактного мышления, композиции, декомпозии, алгоритмики, а про знание ритуалов и особенностей конкретного говнопроекта.
Ты пишешь глупость, как будто бы чтобы получать большие деньги, нужно как можно меньше знать. Обычно большие деньги не предлагают тому, у кого низкие скиллы. Выбор именно как я написал - заниматься интересными тебе вещами vs тем, что нужно бизнесу. Потому что бизнес платит деньги за решение его задач, а не за то, что ты занимаешься интересными вещами. На "интересных" работах вроде геймдева обычно зарплаты ставят поменьше потому что зачем платить, если людям и так интересно работать.
Легаси есть везде, и на Java например его тоже полно. Его нет только на языках, которые вчера появились и которые страшно в продакшен пускать.
И вообще, по моему если у тебя есть N лет опыта и голова хорошо работает, ты новый язык за 2 недели освоишь. Что ты распереживался так по поводу PHP, не надо быть программистом на PHP, надо быть просто программистом, то есть человеком, способным решить любую проблему.
>Ты пишешь глупость, как будто бы чтобы получать большие деньги, нужно как можно меньше знать.
Не писал я такого. К тому же это действительно глупость.
>Выбор именно как я написал - заниматься интересными тебе вещами vs тем, что нужно бизнесу.
Ну если это единственный известный тебе выбор, а выбор о котором говорю я ты даже не понимаешь, то как нам беседовать
>Легаси есть везде, и на Java например его тоже полно
Сука, ты видать реально не понимаешь.
Вопрос не в том, нормально ли что на пыхе есть легаси.
Вопрос в том, может ли настоящее время быть на пыхе что-то НОРМАЛЬНОЕ КРОМЕ легаси.
И ответ - нет.
В 2020+ начинать проект на пыхе нет никаких причин. Вообще.
А значит если ты в 2020+ работаешь с кодом на пыхе - значит это либо легаси либо свежий проект начатый малограмотными дебилами ничего кроме пхп не знающими, и я не уверен, какой вариант хуже.
А если ты работаешь в 2020+ на джаве, и этот проект новый - то вполне себе вероятность что его начинали нормальные специалисты, а не малограмотные дебилы.
Вот в этом разница.
>если у тебя есть N лет опыта и голова хорошо работает, ты новый язык за 2 недели освоишь
Сам-то сколько языков умеешь читать и на скольки сможешь написать хотя бы что-то рабочее? Мнение подкреплено опытом или это чисто мысленный эксперимент?
>не надо быть программистом на PHP, надо быть просто программистом, то есть человеком, способным решить любую проблему
Онли-пыхарь решить любую проблему не сможет, у него область познаний уже мышиной жопы.
А программист, способный решить любую проблему, с пхп просто связываться не будет, и мнение его о пхп будет примерно как у меня.
>где ты нашел "искусство" в написании бизнес-приложений
А ты писал бизнес-приложение-то? Не формошлёпство с крудами. Бизнес-логику проектировал? Шаг за шагом реализовывал? Сначала собираешь понятия из бизнес-области. Потом выявляешь коммуникации между людьми (закон Конвея в курсе надеюсь?). Потом описываешь типы. Потом проектируешь процессы, инварианты. Это всё в чистых функциях. Потом реализуешь UI и DAO. Потом наблюдаешь как твоё приложение включается и работает без утомительных недель тестирования потому что ты собрал его как паззл с первого раза. Было у тебя такое хоть раз? Что ты об этом знаешь?
Кроме решения бизнесовых задач есть очень другие, например, написание компиляторов, распределённых систем, функциональное программирование, декларативное. Искусство - оно про то как убрать всё лишнее и оставить только суть.
>чистый REST вообще плохо работает,
А если я сделаю reviews комментируемыми?
Это получится books/:id/reviews/:id/comments
Это же уже хуйня какая-то получается или ок? В гайде по REST от Microsoft это называется complex resource, и является bad practice.
Но с другой стороны такой путь является понятным для меня, кажется логичным
>Это получится books/:id/reviews/:id/comments
не надо усложнять
GET /api/books - получить коллекцию книг
GET /api/books/{id}/reviews - получить коллекцию отзывов на книгу
GET /api/reviews/{id}/comments - получить коллекцию комментов для отзыва
GET /api/books/{id}/reviews
тут можно возвращать поля
"commentsCount"
"commentsPreview" - два последних коммента на обзор
если надо весь список получить - пусть шлют отдельный запрос
>>452377
>Шарит кто в REST best practices?
>Имеются:
>1) books
>2) comics
>3) reviews
>4) user(author)
GET|POST /api/books
GET|PATCH|DELETE /api/books/{id}
GET|POST /api/comics
GET|PATCH|DELETE /api/comics/{id}
GET|POST /api/users
GET|PATCH|DELETE /api/users/{id}
>На рецензиях Many-to-one с books, comics и user.
если у тебя review одновременно и для книги и для комикса
POST /api/reviews
GET|PATCH|DELETE /api/reviews/{id}
GET /api/books/{id}/reviews
GET /api/comics/{id}/reviews
GET /api/users/{id}/reviews
>На рецензиях Many-to-one с books, comics и user.
если бы это был +-реальный продукт то наверное
ревью надо бы разделить на 3 сущности
паттерн Single Table Inheritance(в доктрине из коробки, в ларе надо поставить пакет)
- Review
- BookReview
- ComicReview
>Это получится books/:id/reviews/:id/comments
не надо усложнять
GET /api/books - получить коллекцию книг
GET /api/books/{id}/reviews - получить коллекцию отзывов на книгу
GET /api/reviews/{id}/comments - получить коллекцию комментов для отзыва
GET /api/books/{id}/reviews
тут можно возвращать поля
"commentsCount"
"commentsPreview" - два последних коммента на обзор
если надо весь список получить - пусть шлют отдельный запрос
>>452377
>Шарит кто в REST best practices?
>Имеются:
>1) books
>2) comics
>3) reviews
>4) user(author)
GET|POST /api/books
GET|PATCH|DELETE /api/books/{id}
GET|POST /api/comics
GET|PATCH|DELETE /api/comics/{id}
GET|POST /api/users
GET|PATCH|DELETE /api/users/{id}
>На рецензиях Many-to-one с books, comics и user.
если у тебя review одновременно и для книги и для комикса
POST /api/reviews
GET|PATCH|DELETE /api/reviews/{id}
GET /api/books/{id}/reviews
GET /api/comics/{id}/reviews
GET /api/users/{id}/reviews
>На рецензиях Many-to-one с books, comics и user.
если бы это был +-реальный продукт то наверное
ревью надо бы разделить на 3 сущности
паттерн Single Table Inheritance(в доктрине из коробки, в ларе надо поставить пакет)
- Review
- BookReview
- ComicReview
спасибо
Напиши свой ютуб/порнхаб.
Анон, прочитал тонну ваших высеров тут что PHP ВСЁ, загуглил для интереса рейтинг языков для бекенда 2022 на хуево-туча сайтов, топ 3 ~ js, python, php
считаю питон хуйней без задач с огромной тратой производительности, могу ошибаться
PHP в отличии от js не требует большой штат сотрудников, и мозгоебли (для запада, хипстерских приложений конечно js лучший выбор)
PHP поддерживают даже самые простые виртуальные хостинги,
PHP в РФ будет популярен по этим и многим причинам, все констукторы-хуюкторы,битриксы,1с - это все PHP
PHP в РФ используют по умолчанию гос-струкутуры, и довольно крупные сервисы - непонимаю, вы где блядь собираетесь работать, онлайн банки с нуля создавать чтоле?
Мне кажеться или вы фантазеры ебанные? Похоже на то, что в своих мирках варитесь, пропагандируете все, кроме рабочих инструментов.
Спасибо, анон!
Чем опытнее программист, тем он проще. Выебонщики мамкины как раз это вкатуны вроде тебя и прочие малоопытные, для которых кодинг ограничивается одним инструментом.
Плюс тебя на работу не возьмут, если ты ведёшь себя как агрошкольник.
Нет маркетинга PHP просто, не понимаю почему правда. При этом PHP можно накрутить до скорости Go.
Может однажды кто-то бабки вкинет в хайп, будут PHP все учить.
PHP красивый быстрый язык, работы валом, нег много, конкуренции мало. По крайней мере в европе/азии, в США не знаю.
Ну веб-приложения, PHP как рест-апи обычно используется, по крайней мере в проектах, где я последние 3 года работал. С масштабированием-разделением на разные апи-сервера.
Я работал даже с Clickhouse и т.е. огромными данными. Традиционно PHP это я б сказал куча очередей с немалыми нагрузками.
Если конкретней, то мне не понятно, где устанавливается логин и пароль для прокси через которую надо подключиться
https://onlinephp.io/c/e829d
Хочу залогиниться на этом сайте (в качестве практитки) и далее уже парсить
Но не логинит, выдает false
Подскажите, что я делаю не так
Прилагаю скрин с запросами (вводил неверные логин и пароль)
Хотя бы ткните носом, а то я совсем забуксовал
Да, действительно каждый раз разные. Куда тыркаться дальше чтобы решить это?
Я еще порылся, нашел вот такой хтмл код. Там гугловская рекапча, которая не появляется и вобще не дает о себе знать. Может быть дело в ней? А может быть дело в том, что я не подменяю юзер агента?
Вобще, я мне надо будет логиниться на сайте заблокированном в рф, там наверное вобще всё подругому. Просто хочется залогиниться хоть где нибудь. Уже несколько дней ебусь
Ищи, где эти значения. Они или есть готовые в виде хидден полей или каких-то жабаскрипт переменных, или генерируются, что хуевее. На рекапчу это не похоже, у её значения есть в названии рекапча.
А что выводится при выполнении скрипта? Какая-то ошибка или что-то еще?
Также, у тебя в коде SQL-инъекция, так как ты подставляешь переменные напрямую в текст запроса. Я написала урок, посвященный защите от этой уязвимости: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
>PHP поддерживают даже самые простые виртуальные хостинги
Самый тупой аргумент.
Пхп уёбищен в частности потому что у него есть php.ini. Конфигурация, блядь, интерпретатора. Вдумайся, анон. Ебало представь. Ни у одного другого языка такой хуйни нет.
И именно поэтому пхп-хостинги - говно без задач. Пишешь пхп-поделку - заворачивай её в докер и кати на vps. Так что этот аргумент мимо.
>PHP в РФ используют по умолчанию гос-струкутуры
не знаю ни одной госструктуры, использующей пхп. там конечно дебилы работают, но не настолько. ебут там нещадно, поэтому пых туда не потащат
>Традиционно PHP это я б сказал куча очередей с немалыми нагрузками.
Традиционно пхп - это успешно выстрелившие в прошлом стартапы. Написаны они были энтузиастами, знающими только пых. Ну типа как в кф "социальная сеть". Эпоха была такая. Сейчас культура в целом подросла, и стартапы пишутся уже на чём-то более другом, с поддержкой асинхронности и многоядерных цпу из коробки например.
Вот этого двачую, 99% крупных контор с кодовой базой на php - родом из нулевых, когда и время было другое, и требования к проектам другие. Да и сейчас уже ни фейсбук ни вк на php не написаны, везде миллион микросервисов на разных языках, форки языка и кастомные расширения.
>>453356
Киллер фичи php это
1 Динамичность, из-за этого на нём просто писать cms. Собственно, 99% рынка CMS это как раз php. Только не стоит обольщаться, по очевидным причинам цмс это всегда будет дно разработки, самая дешевая и низкоквалифицированная её часть. И твой аргумент про "правительственные сайты" это как раз оно, просто раздача статического контента, чуть сложнее сайта-визитки, только пользы от этого не будет.
2 Ограниченность, из-за модели процесс пер запрос разработчик может ничего не знать про стейт и говнокодить, как душе угодно.
Все эти symfony и laravel это заранее проигранное соревнование. Да, есть рынок и можно найти заказчика (потому что им вообще плевать на технологии), но "серьезная разработка" (тм) на пыхе всегда будет тенью серьезной разработки на java/c#, просто по определению. Даже сама symfony с doctrine это (иногда дословная) копия spring с hibernate.
90% кода на php это вордпресс, с этим стоит просто смириться. Php выбирают, потому что это "дешево и просто", но совсем не потому, что масштабируемо или хорошо подходит для моделирования больших проектов.
> PHP поддерживают даже самые простые виртуальные хостинги
Очень правильный аргумент. Обрати внимание, ты сам поставил в одно предложение PHP и "самые простые виртуальные хостинги". Кажется, пахнет низкоквалифицированным трудом :)
>>454319
Этот даун говорит про оф сайты типа https://rostec.ru/ , только упускает из виду, что такие "проекты" не являются чем-либо сложным или значимым, кроме имени заказчика
>>453433
> При этом PHP можно накрутить до скорости
Нельзя, просто by definition:
1) Нет нормального шаред стейта, быстрый кэш не сделать;
2) Jit совсем не такой развитый, как в java, скорость просядет;
3) Php, однопоточный бай дизайн, обработку данных нормальную не напишешь; Экстеншены решением не являются, это костыли со своими ограничениями;
4) Из-за той же проблемы с однопоточностью ты никогда не сможешь нормально решить задачу 1M коннектов на одну ноду. У тебя скорость отдачи запросов всегда строго ограничено количеством воркеров php-fpm, при увеличении их количества до миллиона ты просто упрешься в оперативку и их простои и всё;
5) Php за счет своей динамики и ZVAL под капотом просто по определению неэффективно использует CPU и (немного) память;
6) Сборка мусора не кастомизируется, не сможешь под задачу её настроить;
7) Из-за динамичности языка к нему всегда будут вопросы по части сесурити;
8) Ну и кстати, го всегда будет выигрывать у php по стоимости серверов, за счет более эффективной утилизации процессора и более низких затрат по памяти.
И это только то, что я накинул из головы, сходу.
То, что ты этого всего не знаешь, лишь ещё раз подчеркивает основную мысль, неоднократно уже высказанную в этом треде:
PHP'шники смешны не только тем, что играют деревянными игрушками в песочнице. Намного сильнее смешны они тем, что им не хватает навыков понять, насколько их деревянные игрушки недоразвиты по сравнению с прочими. Как раз неразвитость и невысокий кругозор и заставляет пехапешников с таким апломбом говорить, что "php может быть таким же быстрым, как XXX". Но в действительности это каждый раз лишь просто подчеркивает, что автор не разбирается в языках, технологиях, не обладает кругозором и опытом. И что новичкам стоит бежать от php как от огня, потому что вкатиться-то легко, вот только это ловушка.
Вот этого двачую, 99% крупных контор с кодовой базой на php - родом из нулевых, когда и время было другое, и требования к проектам другие. Да и сейчас уже ни фейсбук ни вк на php не написаны, везде миллион микросервисов на разных языках, форки языка и кастомные расширения.
>>453356
Киллер фичи php это
1 Динамичность, из-за этого на нём просто писать cms. Собственно, 99% рынка CMS это как раз php. Только не стоит обольщаться, по очевидным причинам цмс это всегда будет дно разработки, самая дешевая и низкоквалифицированная её часть. И твой аргумент про "правительственные сайты" это как раз оно, просто раздача статического контента, чуть сложнее сайта-визитки, только пользы от этого не будет.
2 Ограниченность, из-за модели процесс пер запрос разработчик может ничего не знать про стейт и говнокодить, как душе угодно.
Все эти symfony и laravel это заранее проигранное соревнование. Да, есть рынок и можно найти заказчика (потому что им вообще плевать на технологии), но "серьезная разработка" (тм) на пыхе всегда будет тенью серьезной разработки на java/c#, просто по определению. Даже сама symfony с doctrine это (иногда дословная) копия spring с hibernate.
90% кода на php это вордпресс, с этим стоит просто смириться. Php выбирают, потому что это "дешево и просто", но совсем не потому, что масштабируемо или хорошо подходит для моделирования больших проектов.
> PHP поддерживают даже самые простые виртуальные хостинги
Очень правильный аргумент. Обрати внимание, ты сам поставил в одно предложение PHP и "самые простые виртуальные хостинги". Кажется, пахнет низкоквалифицированным трудом :)
>>454319
Этот даун говорит про оф сайты типа https://rostec.ru/ , только упускает из виду, что такие "проекты" не являются чем-либо сложным или значимым, кроме имени заказчика
>>453433
> При этом PHP можно накрутить до скорости
Нельзя, просто by definition:
1) Нет нормального шаред стейта, быстрый кэш не сделать;
2) Jit совсем не такой развитый, как в java, скорость просядет;
3) Php, однопоточный бай дизайн, обработку данных нормальную не напишешь; Экстеншены решением не являются, это костыли со своими ограничениями;
4) Из-за той же проблемы с однопоточностью ты никогда не сможешь нормально решить задачу 1M коннектов на одну ноду. У тебя скорость отдачи запросов всегда строго ограничено количеством воркеров php-fpm, при увеличении их количества до миллиона ты просто упрешься в оперативку и их простои и всё;
5) Php за счет своей динамики и ZVAL под капотом просто по определению неэффективно использует CPU и (немного) память;
6) Сборка мусора не кастомизируется, не сможешь под задачу её настроить;
7) Из-за динамичности языка к нему всегда будут вопросы по части сесурити;
8) Ну и кстати, го всегда будет выигрывать у php по стоимости серверов, за счет более эффективной утилизации процессора и более низких затрат по памяти.
И это только то, что я накинул из головы, сходу.
То, что ты этого всего не знаешь, лишь ещё раз подчеркивает основную мысль, неоднократно уже высказанную в этом треде:
PHP'шники смешны не только тем, что играют деревянными игрушками в песочнице. Намного сильнее смешны они тем, что им не хватает навыков понять, насколько их деревянные игрушки недоразвиты по сравнению с прочими. Как раз неразвитость и невысокий кругозор и заставляет пехапешников с таким апломбом говорить, что "php может быть таким же быстрым, как XXX". Но в действительности это каждый раз лишь просто подчеркивает, что автор не разбирается в языках, технологиях, не обладает кругозором и опытом. И что новичкам стоит бежать от php как от огня, потому что вкатиться-то легко, вот только это ловушка.
Это прав. Ни разу за 5+ лет не писал на CMS. Называть ларавель и симфони заведомо проигрышным вариантом - расписываться в том что ты вкатунец без реального опыта и совсем не в теме.
>90% кода на php это вордпресс, с этим стоит просто смириться
Вкатуся, вордпресс это не 90% кода, а 90% фриланса. Ты понятия не имеешь о чём говоришь.
>культура в целом подросла
Какая "культура"? Причём тут пхп и твоя "культура" вообще?
>стартапы пишутся уже на чём-то более другом
Жаль твой манямир обламывать, но как писали - так и пишут. Некоторые даже с пхп5 не собираются перекатываться.
>99% рынка CMS это как раз php
99% Это как раз симфония, лара, юи и другие mvc вплоть до самописных.
>говнокодить, как душе угодно
До того момента как его уволят т.е максимум месяц.
>Все эти symfony и laravel это заранее проигранное соревнование
Только вот вакансий на них всё больше и больше, чёта тут не сходится.
>Php выбирают, потому что это "дешево и просто"
Дёшево, быстро и просто. Тебе не нужно нанимать 5 Jav'истов платя каждому по 3 - 4К баксов за то, что могут сделать 3 человека гораздо быстрее и дешевле.
И выбирают его лишь для одной цели - это создание сайтов.
>решить задачу 1M коннектов на одну ноду
Именно для этого и существуют языки специально заточенные под такие задачи.
>5) Php за счет своей динамики и ZVAL под капотом
Чел из 2014го капчует.
>Сборка мусора не кастомизируется, не сможешь под задачу её настроить
Под какую задачу? Обратиться к БД? Выдать страничку? Получить данные со страницы/JSON'а?
Ваш молоток не подходит для прополки грядок.
>7) Из-за динамичности языка к нему всегда будут вопросы по части сесурити;
Ты 5ую пыху критикуешь или до сих пор в 2014ом застрял?
>го всегда будет выигрывать у php по стоимости серверов, за счет более эффективной утилизации процессора и более низких затрат по памяти
А ещё огонь горячий, а вода мокрая, ахуеть да? Сравнивать компилируемый язык с интерпретируемым... Чел ты....
>И это только то, что я накинул из головы, сходу.
Все тейки которые запомнил времён 5ой пыхи если быть точнее.
>потому что вкатиться-то легко, вот только это ловушка
Вкатился 5 лет назад, сейчас C# боярин, ответы?
Слежу за пыхой по прежнему и она развивается пускай и потихоньку, однако постоянно берёт интересные фичи из серьёзных языков и ускоряется от версии к версии.
>99% рынка CMS это как раз php
99% Это как раз симфония, лара, юи и другие mvc вплоть до самописных.
>говнокодить, как душе угодно
До того момента как его уволят т.е максимум месяц.
>Все эти symfony и laravel это заранее проигранное соревнование
Только вот вакансий на них всё больше и больше, чёта тут не сходится.
>Php выбирают, потому что это "дешево и просто"
Дёшево, быстро и просто. Тебе не нужно нанимать 5 Jav'истов платя каждому по 3 - 4К баксов за то, что могут сделать 3 человека гораздо быстрее и дешевле.
И выбирают его лишь для одной цели - это создание сайтов.
>решить задачу 1M коннектов на одну ноду
Именно для этого и существуют языки специально заточенные под такие задачи.
>5) Php за счет своей динамики и ZVAL под капотом
Чел из 2014го капчует.
>Сборка мусора не кастомизируется, не сможешь под задачу её настроить
Под какую задачу? Обратиться к БД? Выдать страничку? Получить данные со страницы/JSON'а?
Ваш молоток не подходит для прополки грядок.
>7) Из-за динамичности языка к нему всегда будут вопросы по части сесурити;
Ты 5ую пыху критикуешь или до сих пор в 2014ом застрял?
>го всегда будет выигрывать у php по стоимости серверов, за счет более эффективной утилизации процессора и более низких затрат по памяти
А ещё огонь горячий, а вода мокрая, ахуеть да? Сравнивать компилируемый язык с интерпретируемым... Чел ты....
>И это только то, что я накинул из головы, сходу.
Все тейки которые запомнил времён 5ой пыхи если быть точнее.
>потому что вкатиться-то легко, вот только это ловушка
Вкатился 5 лет назад, сейчас C# боярин, ответы?
Слежу за пыхой по прежнему и она развивается пускай и потихоньку, однако постоянно берёт интересные фичи из серьёзных языков и ускоряется от версии к версии.
И что? Это суть профессии. В большинстве задач пыхера в тырпрайзе это импементация всяческой бизнеслогики в контроллерах, сервисах и очередях. Как и везде на других стеках. Вордресы тут ваще не при делах.
>по прежнему и она развивается пускай и потихоньку, однако постоянно берёт интересные фичи из серьёзных языков
Вероятно ты сам не понял, какую базу ты выдал, но это базой было, есть и останется: пыха - не серьёзный язык.
Наступит день когда ты поймёшь, что пыха - вообще не язык.
Удачи!
Вообще все задачи сводились
1) логика бизнеспроцессов
2) подсчитать какую-то хуйню для кабаныча и его менеджеров
3) перекладывание жсонов
4) перекладывание записей в бд
Ну так то да. В пыхе раздражает отсутствие нормальной модели данных. Чтобы все начиналось с примитивов, а потом все укладывалось в общие ADT структуры. Хотя бы как в том же жс или питоне. Мало кто из пыхеров пользуется SPL. Да и это фигня по сравнению с дженерик типами из жавы и шарпа.
>пыха - не серьёзный язык
Вроде я обратного не утверждал. А ты опять про очевидные догмы. Воздухом дышат
>Furthermore, when a job is deserialized and model relationships are re-retrieved from the database, they will be retrieved in their entirety. Any previous relationship constraints that were applied before the model was serialized during the job queueing process will not be applied when the job is deserialized. Therefore, if you wish to work with a subset of a given relationship, you should re-constrain that relationship within your queued job.
Я не врубаюсь, что имеется ввиду под констрэинтами тут? Вообще не понимаю смысл написанного
facepalm
Все просто. У тебя есть User Петя. У Пети в кармане было 5 пирожков. 2 он отдал Юле, у него осталось три. В БД перед сериализацией Пети все пять пирожков все еще приписаны к Пете как многие к одному. Но в кармане (и в коде) у пети 3 пирожка.
1) Перед сериализацией вызываешь withoutRelations - после десериализации у Пети 0 пирожков в кармане
2) Если не вызываешь - после десериализации у Пети 5 пирожков в кармане.
А, с примером из статьи стало понятно, спасибо.
>1) логика бизнеспроцессов
>2) подсчитать какую-то хуйню для кабаныча и его менеджеров
Ты дважды про бизнеспроцессы написал, вкатун. Мы не перезвоним.
нет ты.
1) вася дал маше лединец, проверить чтобы маша поцеловала васю. если маша не поцеловала васю, вася должен отобрать у маши лединец и отдать его тане. если вася не забрал лединец у маши, занести его в графу куколд.
2) расчитать среднее количество девушек на лединец, найти лединец, который полизало максимальное количество девушек
Всё ещё про одно и то же пишешь - бизнесу оба варианта могут понадобиться. Опять про бизнес-логику.
Тебе платят за НЕНУЖНОЕ бизнесу? Я тоже так хочу!!!111
Ничего большего из себя php никогда не представлял и конкуренцию серьезным языкам он составить не может и не мог.
/thread
/твоя мамка
Ты прочитал, но ничего не понял.
Миллионы пыхеров пребывают в иллюзии, что пыха - это нормальный язык (сравнивают его с го, жавой, ну ты видел сам, ты ещё спросил хуль человек очевидное пишет, а ты посмотри, на что он отвечал - на фразу "пыхо может быть производительно как го"). И эта иллюзия - и есть величайшая подъёбка пыхи. Пыхари тонут как та лягушка в кипятке.
Какая разница проиводительный это язык или непроизводительный. То что я пишу на пыхе определяется рынком труда и случайными обстоятельствами. А так же соображениями, что от переката в другой язык, платформу никаких существенных улучшений жизни не будет. Прдедлагаешь ради компиляции и синтаксического сахара понижаться в зряплате и идти снова джуном? Причем джуном то сделают, а застявят ебаться с теми же задачами что и в пыхе. И стаким же уровнем говнокода, ибо некогда бизнесу марафеты наводить, надо фичи для заказчиков реализовывать.
>Какая разница проиводительный это язык или непроизводительный.
this!
>от переката в другой язык, платформу никаких существенных улучшений жизни не будет
this!
"Я освоил ремесло - и мне хватает". Это про уровень мышления. Не, ну кому-то нормально.
>Прдедлагаешь ради компиляции и синтаксического сахара понижаться в зряплате
Я не предлагаю это делать лично тебе. Более того, я даже рад буду если ты и все остальные останутся в пыхе - будет меньше конкуренция в моей нише. Но идея в том, чтобы спросить тебя - а ты вообще понимаешь, что такое компиляция и какие выгоды она даёт?
> и идти снова джуном?
Понимаешь ли ты, что пхпшнику выше миддла по нормальным меркам не подняться? Тебе выдали лычку синьора, но это обман, у тебя нет ни теории, ни практики, ни окружения чтобы вырасти выше мидла.
Переделал схему rest и добрался до STI и что-то не врубаюсь в чем тут смысл и профит.
Вот у меня есть абстрактный класс Reviews, я от него наследуюсь в BookReviews и ComicsReviews и вешаю foreign key на книги и комиксы.
>"пыхо может быть производительно как го"
И чел просто выкатил стену текста когда мог просто написать, что го компилируемый. И будь го интерпретируемым, то выигрывал не так сильно за счёт строгой типизации и более новой платформы.
>>455460
>Какая разница проиводительный это язык или непроизводительный >>454605
>4) Из-за той же проблемы с однопоточностью ты никогда не сможешь нормально решить задачу 1M коннектов на одну ноду
Огромная разница. Просто чекни с какой скоростью тот же го решает сложные задачи.
https://programming-language-benchmarks.vercel.app/go-vs-php
>понижаться в зряплате и идти снова джуном
Прокачивать навыки и получать большую зп будучи мидлом.
>И стаким же уровнем говнокода
Ну если ты и на пыхе говнокодишь, то да, существенно ничего не изменится. Однако тебя выкинут в 40 лет с рынка и будешь ты нахуй никому не нужен со своим говнокодом т.к не умеешь ни в память, ни в типизацию.
>Пук, среньк
Все проекты, с которыми работал - не старше 3-5 лет были.
>>454605
>Все эти symfony и laravel это заранее проигранное соревнование
Это лучшие фреймворки, которые только существуют для стартапов. Ни в ноде, ни в голанге твоём в ближайшие 10 лет точно не появится.
Это лучшее решение, потому что не надо много денег. У стартапа как правило никогда нет денег ни на джаву, ни на шарп.
>Нельзя, просто by definition:
У PHP-фреймворка Swoole скорость почти как у твоего Go, так что вкатуня ты слит.
А с божественным го вас не выкинут в 40? Компиляция запрещает увольнять операторов компиляторов?
Вкатуня рвётся, что PHPшники зарабатывают так же как на джаве/шарпе, вкатиться легко, конкуренции мало, рост огромный, условия кайф. На PHP сеньёром куда проще и быстрее стать, хех.
Я вот например даже в офисе не был, 1 год в PHP и уже мидл. 3 года и сеньёр.
Тест - наприсание стандартного круда
вебмакака время решения задачи время зараченое на кофе
пыхарь 3дня 2дня
голангер таймаут 0
Вкатуня зелёная, а знаешь почему насрать в большинстве в стартапах на твои голанги - ТРОТЛИНГ называется, ну или упрёшься в БД, кек.
А где надо - сделаем отдельный апи-сервер, php асинхронным, выкрутим скорость на макс и опять вопрос, а зачем тогда голанг твой.
Голанг к слову, сколько он там на бэкенде в проде, 0.01% вроде по w3tech? А php 78% бэкенда? кекус
>А с божественным го вас не выкинут в 40?
С компилируемыми языками когда тебе за 40 становишься сеньёром 300кк в наносекунду. С божественной пыхой ты даже не будешь знать чем отличается стек от кучи, объект от структуры, делегат от события, i32 от u32 и т.д.
Погремист за 40 с опытом типизированных языков - Чед, миллионер и сын маминой подруги.
Погремист за 40 с опытом скриптовых языков - Омежка, инцел и надо было сдать его в дет. дом.
>>455581
>ТРОТЛИНГ
Дальше можно не читать впринципе.
>Вкатуня зелёная
>ТРОТЛИНГ называется
>php асинхронным
Покажешь как это делается из коробки, позязя.
>У PHP-фреймворка Swoole
swoole - это не фреймворк, а рантайм
так же как и roardunner
рядышком с ними находится phalcon
рантайм - это не фреймворк даже близко, это классика, это знать надо. то что ты их путаешь - классика макакинга. вообще слово-то такое слышал - "рантайм", понимаешь что оно значит?
рантайм - это значительная часть языка, и переход на другой рантайм требует смены или переписывания либ и переучивания команды.
когда говорят "пхп" - имеют ввиду подзалупную поделку, умирающую на каждый запрос. там стоимость "специалиста" - рубль за пучок, потому что ему не нужно знать что такое утечка памяти например. когда ты меняешь рантайм на swoole - тебя все эти утечки внезапно начинают ебать со страшной силой, потому что иначе приходится перезапускать прод по таймеру, как это было с древними рельсами.
персистентный рантайм - это более высокие требования к квалификации разработчиков, что нивелирует преимущества дешевезны классического пыха.
к тому же с персистентным рантаймом мало совместемы классические либы и фреймворки, по которым тонны экспертизы. кабан никогда не согласится на смену рантайма потому что это охуительный риск для бизнеса. то что обычно решается поиском плагина для симфони теперь перестанет решаться в принципе иначе чем через самописную еблю. поэтому на свуле переходят только энтузиасты которые хотят познать больше. ну а у энтузаста возникнет вполне логичный вопрос - нахуя учить диалект пыхи когда можно примерно с теми же усилиями выучить самостоятельный го, по которому и тонны экспертизы, и тулинг человеческий, и вакансий до сранделя и зепки в полтора раза выше.
>Это лучшие фреймворки, которые только существуют для стартапов
В какой реальности ты живёшь, сука дегродная?
Лучшим фреймворком последнее десятилетие был RoR, а сейчас - Phoenix.
Лучшесть - это когда у тебя из коробки есть все батарейки и фичи. У твоих же поделок нет даже вебсокетов из коробки. В 2022м году. В языке, который сделан для веба и на котором написано 80% веба. Отдельно нужно прикручивать. В питоне ты пишешь pip install numpy - и работа с матрицами - транспонирование, вычисление среднего, разбиение на блоки - ускоряется в 10 раз, при этом ты не меняешь синтаксис кода. В пхп ты используешь тормозные массивы с уёбищным синтаксисом. Про асинхронные задачи с коллбэками даже не мечтаешь, всё что у тебя есть - это внешняя очередь. Даже в жабаскрипте у тебя есть promises A+, в пыхе же promises A+ есть только в guzzle и только потому что он завязан на libcurl events, все иные попытки сделать эвент луп приводят к заваливанию рантайма.
Лучшесть - это когда ты фокусируешься на бизнес-идее а не на борьбе с инструментом. У твоего блядского пхп то юникода не хватает, то компоненты несовместимы, то мемори лимит, то таймаут, то многопоточности нет.
Лучшесть - это когда ты написал прототип, а он настолько пиздат, что ты катишь его в прод и забываешь. Твой же блядский пхп под нагрузкой встаёт раком и просит чтоб его переписали на го или хотя бы сишную либу ему прикрутили.
Вылазь из своей пещеры уже, изучи как весь цивилизованный мир работает.
>упрёшься в БД
сказочки от людей не видевших реальные проекты
как только начинаются нагрузки - все эти пхп-абстракции становятся раком
ты либо велосипедишь на голом пыхе либо у тебя всё тормозит, и ты будешь созерцать на htop одно ядро на 100% и 23 простаивающих
>swoole - это не фреймворк, а рантайм
>ПУК-СРЕНЬК
Swoole это фреймворк, идиота кусок.
Swoole is a high-performance network framework based on an event-driven, asynchronous, non-blocking I/O coroutine programming model for PHP.
>Лучшим фреймворком последнее десятилетие был RoR, а сейчас - Phoenix. Я ТОК СКОЗАЛ!!!!!
>пук среньк
>>455833
>пук-среньк
Ты маня когда пишешь, то подкрепляй фактами. Ты так высираешься, кто-то у тебя раком встаёт там, лол. Какие пхп-абстракции, лол. Ты примеры приведи, ты непрофессионально общаешься непонятно о чём вообще. PHP-разработчики логичны и последовательны, в отличие от тебя.
>не нужно
Он в PHP-треде находится. Всм наследование не нужно в PHP?
Ты полный некомпетентный идиот с нулевыми познаниями в айти. Тебя видимо когда-то обоссали PHP-сеньёры на собесе и ты теперь зол?
хуя пригорел
>Swoole это фреймворк, идиота кусок.
>
Я уже понял, что ты не знаешь что такое рантайм
>Какие пхп-абстракции, лол
Типизация (например типизированный список в пыхе реализуется через объект, где у метода add аргумент типизированный. это потому что сам пхп не позволит тебе объявить типизированный список, ну ты в курсе), иммутабельность (тоже делается через объект с интерфейсом array или подобным). Doctrine ORM как жирный пример абстракции. Ну и прочие абстракции. Абстракции, блядь. Ты же должен быть в курсе, это база нахуй.
>PHP-разработчики логичны и последовательны
в незнании базовых вещей
>Всм наследование не нужно в PHP?
Всм наследование не нужно ВООБЩЕ. "Предпочитайте композицию наследованию". Это БАЗА. Пхп позаимствовал инструмент наследования у жабы. Наследование в проекте вызывает проблемы. "Приём, приём, я наследование, вызываю проблемы." Понимаешь? Нихуя ты не понимаешь, упоролся своим "инкапсуляция + наследование + полиморфизм"
>сайты для местного тырпрайза-сайты жк
Нафига им сайты?
>в городах типа светлый путь Ильича
Тем более
На джава
>>455581
> И чел просто выкатил стену текста когда мог просто написать, что го компилируемый.
Кстати, очередная ловушка для пыхеров, они почему-то искренне уверены, что компилируемость языка бай дефолт делает его сравнимым или даже равным реализации на плюсах.
С этой точки зрения, как только в php появился JIT, то он сразу же стал равным го, ну или хотя бы java, она-то тоже работает через байт-код и виртуальной машины.
Но вот что-то нихуя.
И вот тут, мои дорогие php'шники, которые нихуя за пределами своего битрикса ну или ларавел, это не делает вас умнее не знают, мы приходим к вам к реализации JIT и внутренностям языка.
И окажется, что в java есть куча оптимизаций, к примеру, та же векторизация циклов или даже блять оптимизация хвостовой рекурсии, которой сто лет в обед, и в итоге одинаковый код на java и на php работает с разной скоростью.
Ещё окажется, что виртуальная машина Java с современными сборщиками мусора создана, чтобы работать с большим количеством указателей на куче, она поколенческая, перемещающая и много чего ещё. И поэтому ей что создать ещё миллион короткоживущих поинтеров, что не создать, пофигу. Поэтому джависты могут себе позволить всё делать поинтерами, заворачивать в них типы вместо честных дженериков и так далее и тому подобное.
При этом их php, с их сборкой мусора через счетчик ссылок, которые ещё мой дед использовал пока трахал мамок первых пехапешников, алгоритмически не способен достичь того же перфоманса на том же количестве переменных.
А он будет пытаться, кстати, потому что все переменные в php это zval'ы, то есть по сути структуры, которые так или иначе будут в куче, либо самостоятельно, либо как часть других структур. Соответственно, php алгоритмически неэффективно выделяет память и алгоритмически неэффективно её очищает. И это я ещё не буду здесь говорить про блокировки при очистке памяти, иначе phpшники с ума сойдут, их к такому жизнь не готовила. И да, это по сравнению с java, если я начну говорить про c#, где модель памяти ещё удачнее, то недоразвитость php станет ещё яснее.
Кстати, ещё один пример. php'шники наверное и не догадываются, но ассоциативный массив в php является не только хэш таблицей если вы об этом знали, но ещё и списком, потому что phpшные массивы сохраняют порядок ключей. Ну вы поняли, да? Php'шный массив это две структуры данных вместо одной, что блять по определению неэффективно!
Соответственно любой код с использованием хэш мап на java, на го, на c#, на блять чём угодно почти, даже без оптимизаций компилятора или виртуальной машины, будет эффективнее, чем на php.
Ещё раз для совсем тупых: почти любой код на php по определению, алгоритмически менее эффективен, чем код на (к примеру) java. Php делает больше лишних действий, выделяет лишнюю память и не умеет её эффективно очищать. И не умеет оптимизировать этот код на хоть сколько-нибудь сравнимом уровне во время JIT'а. Все ваши ряяя асинхронные фрейморки здесь не помогут, тупо ядро языка написано так, чтобы даунам было легче писать код, но совсем не для того, чтобы этот код был эффективен.
> ТРОТЛИНГ называется
Чел явно вообще никогда даже рядом не стоял с нагруженными проектами и просто употребляет слова, которые где-то слышал, лол. Настолько обосраться это надо уметь, явно знатный пыхер.
Тротлить у тебя будет в первую очередь php, пока поток висит, пока база считает :) А как раз любой не php, да та же нода, не говоря уже про го отлично в это время обработает другой запрос.
>>455833
Этот прав
>>455581
> И чел просто выкатил стену текста когда мог просто написать, что го компилируемый.
Кстати, очередная ловушка для пыхеров, они почему-то искренне уверены, что компилируемость языка бай дефолт делает его сравнимым или даже равным реализации на плюсах.
С этой точки зрения, как только в php появился JIT, то он сразу же стал равным го, ну или хотя бы java, она-то тоже работает через байт-код и виртуальной машины.
Но вот что-то нихуя.
И вот тут, мои дорогие php'шники, которые нихуя за пределами своего битрикса ну или ларавел, это не делает вас умнее не знают, мы приходим к вам к реализации JIT и внутренностям языка.
И окажется, что в java есть куча оптимизаций, к примеру, та же векторизация циклов или даже блять оптимизация хвостовой рекурсии, которой сто лет в обед, и в итоге одинаковый код на java и на php работает с разной скоростью.
Ещё окажется, что виртуальная машина Java с современными сборщиками мусора создана, чтобы работать с большим количеством указателей на куче, она поколенческая, перемещающая и много чего ещё. И поэтому ей что создать ещё миллион короткоживущих поинтеров, что не создать, пофигу. Поэтому джависты могут себе позволить всё делать поинтерами, заворачивать в них типы вместо честных дженериков и так далее и тому подобное.
При этом их php, с их сборкой мусора через счетчик ссылок, которые ещё мой дед использовал пока трахал мамок первых пехапешников, алгоритмически не способен достичь того же перфоманса на том же количестве переменных.
А он будет пытаться, кстати, потому что все переменные в php это zval'ы, то есть по сути структуры, которые так или иначе будут в куче, либо самостоятельно, либо как часть других структур. Соответственно, php алгоритмически неэффективно выделяет память и алгоритмически неэффективно её очищает. И это я ещё не буду здесь говорить про блокировки при очистке памяти, иначе phpшники с ума сойдут, их к такому жизнь не готовила. И да, это по сравнению с java, если я начну говорить про c#, где модель памяти ещё удачнее, то недоразвитость php станет ещё яснее.
Кстати, ещё один пример. php'шники наверное и не догадываются, но ассоциативный массив в php является не только хэш таблицей если вы об этом знали, но ещё и списком, потому что phpшные массивы сохраняют порядок ключей. Ну вы поняли, да? Php'шный массив это две структуры данных вместо одной, что блять по определению неэффективно!
Соответственно любой код с использованием хэш мап на java, на го, на c#, на блять чём угодно почти, даже без оптимизаций компилятора или виртуальной машины, будет эффективнее, чем на php.
Ещё раз для совсем тупых: почти любой код на php по определению, алгоритмически менее эффективен, чем код на (к примеру) java. Php делает больше лишних действий, выделяет лишнюю память и не умеет её эффективно очищать. И не умеет оптимизировать этот код на хоть сколько-нибудь сравнимом уровне во время JIT'а. Все ваши ряяя асинхронные фрейморки здесь не помогут, тупо ядро языка написано так, чтобы даунам было легче писать код, но совсем не для того, чтобы этот код был эффективен.
> ТРОТЛИНГ называется
Чел явно вообще никогда даже рядом не стоял с нагруженными проектами и просто употребляет слова, которые где-то слышал, лол. Настолько обосраться это надо уметь, явно знатный пыхер.
Тротлить у тебя будет в первую очередь php, пока поток висит, пока база считает :) А как раз любой не php, да та же нода, не говоря уже про го отлично в это время обработает другой запрос.
>>455833
Этот прав
Бля, я сам в шоке, какой текст из себя пришлось родить, просто чтобы показать упертым недоучкам, что есть вещи, в которых они не разбираются и что их язык имеет серьезные ограничения по сравнению с другими, хотя это, как бы, факт и спорить с этим было бы странно.
Конечно же, и на php будут писать проекты, хотя бы потому, что рабочая сила дешевая, а большинство проектов не нагружены примерно нифига 1rps то есть хоть у кого-нибудь из местных "экспертов", если без статики?. А ещё железо сейчас сравнительно дешевое и можно любой говнокод запускать. Я как-то своими глазами видел, как фреймворк на php отжирает в среднем 100мб оперативы на обработку одного запроса. Лично по-моему это пиздец. У дико развестистый код на го который обрабатывает 1500 рпс столько же занимает, и ещё успевает отвечать в пределах 70ms да, дохуя, но там правда сложная логика. Вот спорить могу, что у большинства завсегдатаев треда даже метрик нет, они тупо не знают, сколько жрет их код и за сколько отвечает счастливые люди.
Сычуша, сходи в сишки тред и раскажи там, какой твой язык быстрый. Может тебя там не сильно обоссут за наличие сборщика мусора. Ведь твоя говняшка не может в системах реального времени использоваться, по твоей же логике ты упертый недоучка, раз голанг выбрал а не си.
Как можно приводить в пример promises a+, в которых нет возможности нормально разделять/фильтровать исключения, и в которых они по умолчанию просто проглатываются. Это ужасный дизайн и его делали люди, которые видимо ненавидят исключения и хороший код.
Промисы должны по умолчанию выкидывать наружу необработанные исключения, а функция обработки исключения должна принимать класс для фильтрации.
Также, нельзя проверить состояние промиса. Также, некоторые функции, объединяющие несколько промисов, просто никогда не резолвятся если один из промисов зафейлился.
Промисы в яваскрипте проектировали инвалиды, и приводить их как хороший пример может только тот, кто с ними сам не работал.
> и ты будешь созерцать на htop одно ядро на 100% и 23 простаивающих
Ну ты сейчас сам в своей глупости расписался. Ты просто топ на работающем сервере PHP-приложений никогда не видел, а я видела и знаю как он выглядит.
Дурачок, ты зачем-то пытаешься подменить понятия, что если "го или джава не подходят для СРВ, но это не делает их плохими" то тогда "то, что php ограниченный не делает его хуже, чем го/java/шарпы/any".
Так вот, не путай.
Делает.
То, что языки со сборкой мусора больше подходят для апи, байтомолотилок и приложух, чем для байтодрочева не говорит о том, что они все одинаковые. И php по-сравнению с прочими, примерно как ты по сравнению с Ерохиным. Вы оба живете в одном подъезде, но он успешен, всё умеет и его хотят женщины и твоя мама, а ты - нет.
Достаточно подробную аргументацию я написал выше, фундаментальные ограничения самого языка. И никакие swoole и прочие фальконы это не исправят, в лучшем случае сделают из php некий эзотерический недо-си, без тулчейна, поддержки прочей экосистемы и с кучей подводных комней. По мне, так лучше уж тогда си или там раст/хаскель взять и не ебать труп.
>почти любой код на php по определению, алгоритмически менее эффективен, чем код на (к примеру) java
Да вообще похуй. Кто на скорость языка дрочит в 2022, даун? Ты везде хайлоады уровня ВК видишь?
Что пхп делает хуже? Апи для агуляро или реакто приложухи для малого и среднего тырпрайза, у которого три бабы сраки за компом сидят, прибыль кабана считают? 100500 таких проектов на пыхе пишутся. Или рельсах. Или ноде. Ты студент мечтатель все таки. Голанг в этом случае не подходит по двум причинам, по крайней мере.
1) Отсутствию больших популярных фреймворков, где +/- все из каробки и можно пресечь попытки любителей делать по-своему, мол так не принято во фреймворке, низя. Единый стиль кодирования. Нода от этого как и голанг страдает например. На ноде пишут потому что жс он и в Африке жс. Много жсников на рынке.
2) Голангеры привыкли к командной разработке и микросервисам. А такие среднемелкие проекты начинает обычно один Сычев под присмотром кабаныча. Монолитная архитектура х100 к скорости разработки на начальном этапе. + не нужна куча людей, чтобы каждый отдельно свой микросервис пилил.
Есть спрос на такое на рынке - есть предложение в виде пыхоплеяды.
>Ты просто топ на работающем сервере PHP-приложений никогда не видел
Проиграл вполголоса
У пхп на проде в плане загрузки проца две проблемы:
- когда загружено одно ядро на соточку, а остальные простаивают. это происходит например когда у тебя одна разовая задача - эксельку гигабайтную посчитать например - и ты не можешь её распараллелить чтобы вместо пяти минут она выполнялась 20 секунд.
- когда под соточку загружены все ядра. к сожалению это не вымысел, а реальность, потому что как тут заметили много раз, у пыха ненулевая стоимость абстракций, и если голый пых ещё относительно быстр, то мэйнстрим-фреймворки ощутимо тормозят. кабан-софт обычно пилится в одну сторону- добавления фичей, мало кого ебёт, что с каждым новым эндпоинтом, транзакцией, абстракцией, это неповоротливое говно становится всё неповоротливее, всем не до этого, ведь последствия настанут не скоро, может уже когда чел из компании уволится. и вот наступает момент когда htop упирается в соточку по всем ядрам. это уже совсем плохо, потому что вместо решения бизнес-задач тебе придётся заниматься профилированием и оптимизацией или просто покупкой нового железа. тут-то ты и понимаешь, что пиши ты на эликсире или го - у тебя проц был бы сейчас заюзан процентов на 15, но время упущено.
>исключения, и в которых они по умолчанию просто проглатываются
они не проглатываются, а возвращаются в статусе rejected, ты можешь обработать их как тебе нравится
>Промисы должны по умолчанию выкидывать наружу необработанные исключения
Выброс исключения - это прыжок исполняющей машины по стеку. То есть прерывание программы. Отвратительный и ублюдский способ работы с ошибками. Учитывая, что промисы могут обрабатываться параллельно, асинхронно и пачками, такой способ работы с ошибками как исключение не применим в принципе. Применим только один вариант - Result<Res, Err>, который промисы и реализуют, только у них это называется onFulfilled, onRejected
>функция обработки исключения должна принимать класс для фильтрации
не понял этой мантры
>нельзя проверить состояние промиса
не понял зачем и откуда тебе его нужно проверять
>некоторые функции, объединяющие несколько промисов, просто никогда не резолвятся если один из промисов зафейлился
Чувак, блядь, что ты несёшь такое. Может ты просто не умеешь с ними работать? Может ты просто не понимаешь идеи промисов? Промисы нужно объединять в цепочки a.b.c, вызываешь а, вызов доходит до c, и если он фейлится фейлится - промис b не исполняется, а пропускает ошибку до а. и a не исполняется тоже, и возвращает ошибку тебе.
Из книг - "чистая архитектура" от хуйла. Оч хорошая книга, в ней есть паттерны.
А из документации
https://confluence.innercorp.net/pages/viewpage.action?pageId=12817566
Ниже аноны пишут шо наследование не нужно. Ну иногда полезно, но вообще в целом понимаю их
Ещё забыл ситуации, когда у тебя 10/10 воркеров ждут обработки каких-нибудь сложных вещей, базы, внешнего апи и тп. И поэтому все остальные запросы в это апи (или данные в очереди) тупо стоят и ждут, пока хоть один из воркеров освободится.
Абсолютная классика, первое, что надо делать на php, если всё же пытаешься построить из него что-то серьезное, это разбить всё на максимальное количество очередей, чтобы когда одна очередь заберет всех воркеров, остались другие. И обязательно с запасом.
Когда в том же го можно очень долго обходиться тем, что у тебя будет одна очередь tasks и один воркер на одном процессоре и ок будет.
>>456452
> Да вообще похуй. Кто на скорость языка дрочит в 2022, даун? Ты везде хайлоады уровня ВК видишь?
Это во-первых вопрос того, хочешь ты делать вещи хорошо или плохо. Если ты можешь написать более эффективный софт, стоит это сделать, ты же профессионал. И наоборот, если твой код работает дольше, чем реально необходимо, то даже если твой работодатель/заказчик не против, то это всё равно непрофессионализм.
Во-вторых, перечитай мои посты, Java может делать всё то же самое, что и php, только лучше. Вот просто каждая задача, к которой ты захочешь припахать php, будет решена джавой быстрее и качественнее. Смысл юзать этот ваш php ровно один - потому что вы ничего кроме него не знаете ;)
> Есть спрос на такое на рынке - есть предложение в виде пыхоплеяды.
Он есть не потому, что php такой заебись, а потому что есть много дешевых разработчиков. Бизнесу до какого-то предела вообще плевать, на чём будет написан код.
Легаси порождает новых разработчиков -> новые разработчики привлекают новый бизнес -> новый изнес порождает новое легаси.
И так до бесконечности.
Только это вообще ни разу не говорит об эффективности языка, на самом деле, потому что есть куча контор, особенно мелких, для которых важнее всего цена, а не качество и соответственно они выберут самое дешевое предложение на рынке.
> Голанг в этом случае не подходит по двум причинам, по крайней мере.
Хз зачем ты мне тут начал пояснять, почему голанг не подходит для проектов бабы сраки, я с этим и не спорил и голанг как убийцу php тут не заявлял. Хотя очевидно определенную нишу более серьезных и нагруженных проектов гошечка у php уже отвоеала.
Вот этот прав, двачую неимоверно
Какие вопросы стоит ожидать от них??
Я читал когда то давно(6 месяцев назад) там вопросы касательно ЧТО ТАКОЕ ГЕТ И ПОСТ И ИХ РАЗЛИЧИЕ.
Но на мой взгляд это какая то хуйня, и мне пиздят и все будет сложнее.
Есть тут сеньеры помидоры, какие вопросы вы задаёте джунам на собесах?
Джунов из-за отсутствия опыта можно только гонять по теории. Перечитывай официальный мануал PHP, SQL (что такое NULL, троичная логика, внешние ключи, отношения, транзакции), протокол HTTP, основы linux. По HTML/CSS редко бывают вопросы, но можешь их тоже подучить.
Также, могут задать вопрос в стиле "а как ты спроектируешь такую штуку/а что ты сделаешь если".
>Ты везде хайлоады уровня ВК видишь?
Попробуй распарсить большой EXEL и посмотри сколько это отожрёт памяти, если вообще процесс сможет завершиться.
30К строк отжирало у меня 400МБ если что. А теперь попробуй представить, что одновременно 10 человек попытаются загрузить EXEL'ки такого объёма, вывезет ли это сервак на php?
Сколько минут потратит сервер на это через генераторы?
>Кто на скорость языка дрочит в 2022, даун?
Тот кто не дрочит тот реальный даун.
Причём тут PHP? И парсил, и создавал. Для этого микросервис надо делать на голой пыхе. И раскидываешь в очередь.
Когда ты с того же амазона фиды по генерации файлов отправляешь, то ты в очереди сидишь ЖДЁШЬ ЦЕЛЫЙ ЧАС ЧТОБ АМАЗОН РАСПАРСИЛ БЛЯТЬ.
Какая хуй разница на чём ты сделаешь, хоть на ассемблере, у тебя оперативка улетил в сраку, всё ж зависит от нагрузок.
>Да вообще похуй. Кто на скорость языка дрочит в 2022, даун? Ты везде хайлоады уровня ВК видишь?
Пукс кекс, походу кор тима пыхи очень дрочит, раз джит делают ебаный
Тебе выше уже написали, какой бы микросервис ты не писал, на чистом php или на грязном, он все равно будет менее эффективен, чем микросервис на го, к примеру.
При этом бонусов от такого выбора языка у тебя не будет, вообще.
Ну кроме того, что лично ты ничего другого не знаешь судя по всему и соответственно у тебя то выбора нет :)
> Кто на скорость языка дрочит в 2022, даун
Все, кто хотят, чтобы их код не тормозил / не жрал лишнего. Короче, все нормальные люди.
У пыхи есть фича то что на пыхе ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо. Если у нас нужно работать с дохуей не очень сложных запросов, пыха ж тащит
>Для этого микросервис надо делать на голой пыхе.
Уровень дегродства оценили? Отдельный микросервис для парсинга эксель-файла.
Скажи пожалуйста, а если для парсинга тебе потребуются ну скажем энтити из бизнес-области или данные из DAO (не из базы напрямую, а из уровня хранения) - как будешь выкручиваться? Инициализировать рядом ещё одно приложение, как это делают симфонисты? Или говнякать промежуточные результаты парсинга в промежуточную табличку в базе?
Почему-то в нормальных языках никто не делает отдельное приложение для парсинга сраного экселя. Вместо этого запускают горутину/гринтред/файбер, выполняющийся в этом же процессе, юзающий его же память, и не инициализирующий километровый стейт приложения заново.
>30К строк отжирало у меня 400МБ если что
phpexcel-ем что ли парсил? ну оно любит память, да.
Если это клиентский файл - то придётся с этим мириться.
Но если если ты сам можешь выбирать формат файла - бери ndjson вместо json или если используешь xml - бери sax parsing, там потребляемая память - константа.
>на пыхе ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
на питоне ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
на го ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
на джаве ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
на расте ты всегда пишешь однопоточный код, и он параллелится гнинксом неплохо
на эликсире ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
почему я никогда не слышал такой ахинеи про все эти и другие языки, а про пых слышу постоянно?
> У пыхи есть фича то что на пыхе ты всегда пишешь однопоточный код, и он параллелится нгинксом неплохо
Это уже явно троллинг, но поскольку в треде сидит много новичков, им будет полезно прочитать ответ:
Нет, не так. nginx ничего не параллелит, он всё так же запускает по php-шному процессу на запрос (а скорее всего даже не он, а php-fpm). 100 запросов = 100 процессов, с этим и связаны все предъявы, это ужасно, тотально и значимо неэффективно. У тебя 100 запросов в лагающее внешнее апи под капотом могут просто заблокировать весь твой сервер, целиком.
>>457549
Потому что им больше нечего ответить, потому что у них больше нет инструментов и больше они ничего не знают. Я же говорю, это живой пример эффекта Даннинга-Крюгера.
Вообще конечно жалкое зрелище, сидят в своём теплом, но немного пахучем мирке, работают за еду, пишут тормозное говно, но настолько привыкли ко всему, что считают это нормой.
Особенно интересна аргументация с обеих сторон, хорошо характеризует стороны.
"Противники PHP" тут уже и технические аргументы привели, и проблемы описали, и объяснили, как это в других языках работает, и про зарплаты уже ссылки кидали, ну просто уже всё высказано, что возможно.
А "PHPшники", как мы видим, не могут ответить технически потому что нечем, не могут аппелировать к опыту потому что его нет и всё, что им остаётся, это прям совсем тупые отмазки типа "ну оно же работает и за это платят, значит нормально всё". А от некоторых "аргументов" вообще можно фейспалмом себе лицо разбить, настолько это они явно демонстрируют тупость и ограниченность среднего пыхаря.
Хотя, с другой стороны, может это и нормально? Ну как фортнайт ассимилировал в себя школьников, чтобы они не мешали нормальным людям в других играх, так и PHP ассимилирует в себя даунов/строителей/таксистов/вкатунов, чтобы нормальным людям не мешали?
>Уровень дегродства оценили?
Оценил уровень ануса твоей мамаши, когда такого дурачка на свет выплюнула.
>Почему-то в нормальных языках никто не делает отдельное приложение для парсинга сраного экселя.
Делают микросервисы все. Если у тебя такая нагрузка, миллион запросов на парсинг, чего б не сделать.
>горутину/гринтред/файбер
Причём тут это? В PHP тоже есть всё это, и побыстрее работает даже, чем в твоём "нормальном языке". Не понял к чему вообще высрал)
> Делают микросервисы все. Если у тебя такая нагрузка, миллион запросов на парсинг, чего б не сделать.
Ты явно даже рядом не стоял с микросервисами и не знаешь, что это такое
>>457580
> Причём тут это? В PHP тоже есть всё это, и побыстрее работает даже, чем в твоём "нормальном языке".
O_O что за идиотизм. В php нет ни горутин, ни гринтредов, ни нормальных файберов и уж тем более оно не работает быстрее, чем в прочих языках по причинам, описанным выше. В двух словах, php и быстрота в одном предложении стоять не могут, без оговорок типа "возьмём swoole и напишем на псевдосишечке", но тогда непонятно, нахера вам php, пишите на си сразу, даже и удобнее будет.
Спасибо, почитаю
>>457372
я полтора часа потратил где то.
Дали апи с них нужно было спарсить данные и добавить в БД. shema.sql соответственно должна присутсвовать в проекте
(таблицы были связанные),
далее нужно было вывести одну таблицу, и реализовать систему поиска по ней. (я сделал поиск с like и с match)
результаты поиска вывел в td шки.
>>457372
добавлю еще что первое мое тестовое в другую компанию выглядело как контрольная работа часа на 4-5. Или просто проект, в итоге мне сказали сорян мы вам перезвоним.
Почему я думаю что это был проект? Мне строго запретили пользоваться фреймворками и библиотеками(как будто те люди не умеют пользоваться композером)
Суть заключалась в том, что бы использовать в виде БД .txt файл и записывать в него данные в формате
продукт::цена::производитель
Юзер заполняет данные на сайте, после чего они добавляются в txt. файл. Так же они с этого txt файла парсятся и выводятся на сайт. Соответственно можно удалять/редактировать эти записи.
Но я все равно использовал композер что бы был автолоад. Ибо нехуй.
Хз что им не понравилось, на мой взгляд модель обращения к БД(в виде .txt файла) я написал пиздата. как будто бы в реальном фреймворке.
> Мне строго запретили пользоваться фреймворками и библиотеками
Это чтобы увидеть, что ты можешь сделать самостоятельно и насколько знаешь стандартную библиотеку. Норм тема для джуновского задания, на самом деле. В своё время я тоже такое решал, только я упоролся и сначала написал свой микрофреймворк слов тогда таких ещё не было правда, а уже на нём сделал задание.
> в итоге мне сказали сорян мы вам перезвоним.
Засранцы, я всегда джунам прям списком пишу, что не понравилось и как следует такое решать правильно, даже если отказываю. Особенно если отказываю.
> Хз что им не понравилось
Закинь куда-нибудь код, я откомментирую.
>Для этого микросервис надо делать на голой пыхе
Или предоставить сие действо более компетентному ЯП?
>Какая хуй разница на чём ты сделаешь, хоть на ассемблере
Ебаная пэхапэ макака... У меня всё. Даже продолжать с тобою дискурс не хочется. Тебе выше писали в чём преимущество более низкоуровневых ЯП, но ты походу читаешь сквозь пальцы, ну или ты просто жирнишь.
>>457543
Пасибо, солнышко.
>>457640
>в итоге мне сказали сорян мы вам перезвоним
Ждун сделал таску за бесплатно.
Пишешь свой public репозиторий, предлагают сделать тестовое - показываешь его, всё равно предлагают - шлёшь нахуй. Ибо на 100 тестовых 80 существуют только для того, чтобы им писали код бесплатно. На hh некоторые хрюши годами сидят предлагают тестовое =)
>Ты явно даже рядом не стоял с микросервисами и не знаешь, что это такое
Нет ты)
>В двух словах, php и быстрота в одном предложении стоять не могут, без оговорок типа "возьмём swoole и напишем на псевдосишечке"
А что с ебалом? Пайтон тоже как обёртка для ML, но чож твой "нормальный язык" даже близко с пайтоном конкурировать не может? Не вижу никаких проблем с этим.
Я беру Swoole или Hyperf(на его основе) и как PHP-бог пишу на горутинах, получая с помощью PHP скорость, о которой ты можешь только мечтать, мальчик. И нахера тогда твой "нормальный язык" людям, если есть PHP?
Ты не понимаешь почему PHP божественный, мы БЫСТРО и ЭФФЕКТИВНО пишем приложение(а бизнесу это и надо), когда нам не хватает его сил, мы берём и делим на микросервисы, и подключим там же Swoole и вытрем тебе хуем по розовеньким губам, всё просто :)
По-моему не так сложно понять задание с потолка взято или это что-то для бизнеса нужно. У меня в тестовом было appointment app. Не думаю что им был нужен аппойтмент ап
другой анон
Бля не кормите троля, уже скоро из треда вытечет
Ебаная эликсир-макака, иди проси доширак у метро, пока PHP-господам будут перепадать большинство бизнес-проектов :)
Госпаде, как же хорошо быть PHP-боярином. Денег море, конкуренции мало, проектов горы, язык идеальный.
>По-моему не так сложно понять задание с потолка взято или это что-то для бизнеса нужно
Я к тому, что дохуя наёбсиков которые используют ждунов в качестве бесплатной рабсилы. Пиши код бесплатно только для себя, остальных шлите нахуй.
Круд с фабрикой напиши и не парься.
>>457688
>пока PHP-господам будут перепадать большинство бизнес-проектов
>На вордпрессе за 50к
Спасибо за ревью, стремно конечно свое говно сюда заливать после того, как я его расхвалил.
Но один хуй благодаря критике может я исправлюсь
https:// disk.yandex.ru/d/7PrhTWiPUslriQ
> > горутину/гринтред/файбер
> В PHP тоже есть всё это
Ты в курсе, что борда 18+? В 18 уже можно загуглить чтобы не писать ахинею.
>Ибо на 100 тестовых 80 существуют только для того, чтобы им писали код бесплатно
Чел, никому не нужен бесплатный код от джунов. На его интеграцию больше потратишь.
Я никогда не стремаюсь делать тестовые.
>Swoole или Hyperf(на его основе) и как PHP-бог пишу на горутинах
Тебе ж объясняли, что свуль - хорошо пропатченный форк, отличающийся от классикпыха как единорог от осла. И у него ряд недостатков, про которые тоже написано выше в треде.
ЧСХ отлично видно как действует пхп-яма. Чел уже может в другие языки, в нормальную гошу или дай бог скалку, уже и горутины умеет, и что-то асинхронное корябает, и может где-то функциональщину способен раздуплить, но продолжает жрать говно ложкой. Продолжает вариться в пхп-"культуре".
>Ебаная эликсир-макака
Чисто для справки: средний уровень эликсирщика - senior, потолок пхпшника - middle (любой пхп-сеньор вне зависимости от количества известных ему пхп-инструментов, лычек в его компании и уровня зп - на самом деле миддл, и выше ему не подняться).
>На вордпрессе за 50к
В том-то и дело, что нет. Хорошим симфонистам/ларавелистам платят по 300к, отчего они раздуваются как павлины и считают что работают в идеальном стеке. Я считаю, это просто отлично. Пусть там и остаются.
> любой пхп-сеньор вне зависимости от количества известных ему пхп-инструментов, лычек в его компании и уровня зп - на самом деле миддл, и выше ему не подняться
Абсолютно, рекомендую всем мотать себе это на ус.
Кстати, чсх, из всех местных тредов PHPшный - единственный, у кого прям в тайтле написано, что он для новичков. Вот настолько пыха "успешный язык для сеньоров". Что кстати нихуя не шутка, по моему опыту все более или менее толковые люди, начав с php потом перекатываются куда-то, чаще всего в джаву/го.
>Я никогда не стремаюсь делать тестовые
Никогда не делаю тестовые, кидаю открытый репозиторий и купаюсь в офферах, лул. Ты сидишь тратишь время на тестовые когда я один раз заморочился и чилю. Уверен, что разницы никакой.
Первое же тестовое можно выложить в открытом виде и потом всем кидать, разницы никакой.
Вы покакали? А теперь можете уебать отсюда
> единственный, у кого прям в тайтле написано, что он для новичков
Это специально, чтобы новички не боялись, что их там засмеют, а заходили и общались. Оптимизация конверсии.
>>457749
Ты пишешь чушь, так как есть вакансии senior php dev и есть люди с такой должностью. И, наоборот, если у тебя нет опыта, ты никак не можешь стать сеньором, просто изучив твой никому не нужный Эликсир.
Я кстати не знала ничего про эликсир, а сейчас погуглила, это какая-то малоизвестная хрень (ни разу не сталкивалась) с синтаксисом от Руби на виртуальной машине от Эрланга, которая нигде особо не используется (на hh аж целых 41 вакансия, из которых большинство требует еще знание других языков).
Серьёзно, подумайте, Эликсир это настолько продвинутый, популярный и востребованный язык, что на него аж 41 вакансия по всей России. Чтобы только начать изучать его, вам надо выучить никому не нужный Эрланг и Руби. А чтобы найти работу, еще и другие языки, указанные в вакансиях.
Ну если вам нравится идея соревноваться за эти 41 вакансию, и изучать невостребованные экзотические языки, то вперед и валите из треда.
Какой же ты глупый, для тебя горутины и асинхронный код это вершина мастерства программирования? То есть школьник, чуть-чуть умеющий писать на JS лучше 10-летнего сеньора? Ну не знаю, я бы такому не доверила нанимать разработчиков.
>>457696
> используют ждунов в качестве бесплатной рабсилы
Я не очень представляю, как это. Если у тебя есть большой проект, то джун не может писать для него код, не ознакомившись с ним. Бесплатно можно уговорить разве что написать какую-то простую утилиту.
> Ибо на 100 тестовых 80 существуют только для того, чтобы им писали код бесплатно.
Ну так пользовался бы, глупыш, сделай вакансию, и скидывай ждунам свои таски, а деньги бери себе.
>>457585
Твои горутины не нужны для бизнес-логики, а в редких случаях, когда они нужны, пишется отдельный небольшой сервис на Го. Ты тут носишься со своими горутинами как с писаной торбой.
Ой, какой ты глупый. Микросервисы придумали не для решения проблем с нагрузкой. Ты где-то услышал это слово и теперь тут его везде вставляешь.
> Нет, не так. nginx ничего не параллелит, он всё так же запускает по php-шному процессу на запрос (а скорее всего даже не он, а php-fpm). 100 запросов = 100 процессов,
Ты описал CGI из 90-х. Иди читай документацию по FastCGI и не пользуйся устаревшими источниками, чтобы не позориться, неуч.
Ну ты и чушь пишешь. Что поменяется от того, что вместо PHP-кода, парсящего эксель 5 минут, твой гринтред на яве будет 5 минут парсить эксель? Вот дурачок. Для таких целей используют очередь задач, которая прекрасно работает в PHP. Никто не обрабатывает HTTP-запросы по 5 минут.
> какой бы микросервис ты не писал, на чистом php или на грязном, он все равно будет менее эффективен, чем микросервис на го, к примеру.
А микросервис на Си будет еще более эффективен, чем на Го. Но почему-то сайты и сервисы не пишут на Си, если ты такой умный, как пытаешься показать, подумай почему. И может быть ты поймешь, почему их пишут на PHP, хотя он не такой быстрый, как Си.
Бизнес в отличие от тебя не ориентируется на популярность языка среди анонимных экспертов с имиджборды.
> 400МБ
Если ты такой умный, то подумай, что дешевле: докупить 400 Мб памяти на сервере или заплатить сеньору, чтобы он 4 недели писал сервис для парсинга экселя на Си, потребляющий 40 Мб вместо 400.
Отдельно посмеялся с сервера, который "умрет" от 4 Гб потребляемой памяти. Ты когда-нибудь работал с чем-нибудь серьезнее хостинга за $5?
Ох, какой же ты тугой. Вот смотри, синхронный код без обработки исключений:
doSomething();
если тут будет какая-то ошибка, то исключение вылетает и корректно завершает программу. Тебе не надо специально писать код для отлова и обработки исключения, все работает как надо из коробки.
А теперь асинхронный код на промисах:
var promise = doSomethingAsync();
promise.then(function () { ... } );
Если здесь вылетает исключение, то не происходит ровным счетом ничего. Исключение не фиксируется в журнале ошибок, процесс не завершается. У тебя может быть например опечатка в имени функции, и эта ошибка не как не будет обнаружена, а будет проигнорирована. Тебе надо вручную к каждому промису не забыть приписать обработчик исключений, чтобы эту ошибку с неправильным именем функции не потерять.
Поэтому я и пишу что промисы проектировали инвалиды с фобией исключений.
> Может ты просто не умеешь с ними работать? Может ты просто не понимаешь идеи промисов? Промисы нужно объединять в цепочки a.b.c
Глупый, я же написал, функции, объединяющие несколько промисов. Это функции вроде Promise.all().
> Учитывая, что промисы могут обрабатываться параллельно, асинхронно и пачками, такой способ работы с ошибками как исключение не применим в принципе.
Ну ты дурачок. Вот ты в коде с промисами неправильно написал имя функции и что по твоему должен делать код? Он может сделать единственную верную вещь: завершиться с ошибкой, чтобы его кто-нибудь исправил.
Но с промисами код не завершится, а ошибка будет проигнорирована если программист не угадает такую возможность заранее и не пропишет обработчик для этого. Ну подумай сам, какая вероятность, что он это предугадает.
> Применим только один вариант - Result<Res, Err>, который промисы и реализуют, только у них это называется onFulfilled, onRejected
Это чушь. Почти каждая функция может вернуть ошибку (особенно в динамических языках вроде JS) и получается у тебя после каждого вызова должен стоять if с проверкой на ошибку. То есть, код будет состоять на 50% из проверок.
onRejected проектировали инвалиды, так как он ловит вообще все ошибки и нельзя указать, что меня например интересует только ошибка таймаута соединения с сервером, а других ошибок я не ожидаю и если они все же возникнут, то надо завершать программу (или поток, который обрабатывал запрос, в многопоточном сервере).
То, что ты описал - явный возврат ошибок - хорошо работает там, где ты ожидаешь какую-то ошибку и хочешь ее обработать. А неожиданные ошибки должны завершать программу или ловиться где-то выше. Исключения как раз позволяют это делать.
Ты из 2012 капчуешь? Промисы сейчас пишутся с async/await и работают ровно так же, как и синхронный код в плане обработки ошибок, многоножка из then().catch() для шизофреников разве что.
Дурачок. Сейчас точно так же используются функции объединения промисов вроде Promise.all, часть из которых спокойно теряет ошибки.
Видно, что ты про промисы только читал, а ничего на них не писал, по крайней мере качественно. Я про эту проблему промисов знаю с давних времен, когда пытался написать демон, который будет запускать процессы, прибивать их по таймауту и тд и это все было очень тяжело написать правильно.
>в чем тут смысл
если это пет-проект то смысла и нет
о чем я и писал
>>453231
>если бы это был +-реальный продукт то наверное
>ревью надо бы разделить на 3 сущности
если ты все пишешь "руками"
и у тебя мало сущностей и бизнес логики
конечно тут выгода не совсем понятна
>профит
сделать нормально
у тебя по смыслу 2 разные сущности (это вопрос больше к бизнесу)
у них могут быть:
- разные условия валидации
- разная бизнес логика
- разные доп поля
- разные группы сериалазации
если оставить одну сущность то надо будет морочится
по имени класса ты однозначно понимаешь что перед тобой
тебе не надо писать доп методы if и тд
потом у тебя могут появится ещё сущности для ревью - электронные книги, аудиокниги, натольные игры
и ты будешь раздувать одну сущность?
опять же это вопрос к бизнесу
можно сделать как угодно
если для бизнеса пофигу это будет одна сущность или несколько я бы разбил на несколько
лично мне это бы упростило жизнь
и в будущем было бы проще разруливать вышеописанные кейсы
>в чем тут смысл
если это пет-проект то смысла и нет
о чем я и писал
>>453231
>если бы это был +-реальный продукт то наверное
>ревью надо бы разделить на 3 сущности
если ты все пишешь "руками"
и у тебя мало сущностей и бизнес логики
конечно тут выгода не совсем понятна
>профит
сделать нормально
у тебя по смыслу 2 разные сущности (это вопрос больше к бизнесу)
у них могут быть:
- разные условия валидации
- разная бизнес логика
- разные доп поля
- разные группы сериалазации
если оставить одну сущность то надо будет морочится
по имени класса ты однозначно понимаешь что перед тобой
тебе не надо писать доп методы if и тд
потом у тебя могут появится ещё сущности для ревью - электронные книги, аудиокниги, натольные игры
и ты будешь раздувать одну сущность?
опять же это вопрос к бизнесу
можно сделать как угодно
если для бизнеса пофигу это будет одна сущность или несколько я бы разбил на несколько
лично мне это бы упростило жизнь
и в будущем было бы проще разруливать вышеописанные кейсы
>кидаю открытый репозиторий и купаюсь в офферах, лул. Ты сидишь тратишь время на тестовые
Я уже понял, что ты один умный, и никто кроме тебя не догадался завести гитхаб-профиль для этих целей.
>есть вакансии senior php dev и есть люди с такой должностью
Верно, и эти люди соответствуют мидлам по усреднённым другим языкам.
320x240, 0:10
>Серьёзно, подумайте, Эликсир это настолько продвинутый, популярный и востребованный язык, что на него аж 41 вакансия по всей России.
Пхпшница рассуждает об эликсире.
>для тебя горутины и асинхронный код это вершина мастерства программирования?
Не только, там ещё много чего, но это определённо показатель зрелости.
А ты что знаешь об асинхронном коде? Например, можешь ли назвать виды асинхронных рантаймов? Их всего три. Подсказка: go, erlang, python - эти три языка умеют в асинхронное исполнение, и у всех трёх разный принцип асинхронной работы. Можешь назвать какие? И какой у php?
>То есть школьник, чуть-чуть умеющий писать на JS лучше 10-летнего сеньора?
Зачем ты выдумываешь чухню и несёшь её сюда?
>. Смысл юзать этот ваш php ровно один - потому что вы ничего кроме него не знаете ;)
А ещё смысл в том что можно разместить говносайт на хостинге
Сука лол, здесь прекрасно всё))
>Я кстати не знала ничего про эликсир, а сейчас погуглила, это какая-то малоизвестная хрень
Но эта фраза особенная
>вместо PHP-кода, парсящего эксель 5 минут, твой гринтред на яве будет 5 секунд парсить эксель
поправил тебя. ведь ява работает не с типами variant а с оптимизированным кодом, имеет отличный jit, умеет параллелить задачу по ядрам cpu
>очередь задач, которая прекрасно работает в PHP
вот только в php нет очередей, там их прикручивают и приклеивают. это кстати очередной харчок в лицо пхпёбам - пхп сам не умеет дохуя чего, и задача его в проектах - транспортная, принять данные из точки А и передать в точку Б. вот в джаве ты можешь сделать очередь прям на джаве, в го можешь сделать очередь на го, в расте - на расте, в питоне - на питоне, в руби - на руби. то есть внутри приложения. без оверхеда. и спаунить консюмеры по мере поступления сообщений, динамически если необходимо. а в пхп ты вынужден держать запущенным N консюмеров, при этом симфони с amqp-бандлом хавает 200-250 мегабайт на процесс, а процесс однопоточный, где ты не можешь раскидать тяжёлую задачу по ядрам.
а так да, очередь задач отлично работает в пхп
>сеньору, чтобы он 4 недели писал сервис для парсинга экселя на Си
я ж говорю, пхп-синьоры - на самом деле мидлы.
смотря что там за эксель такой, но в целом время на написание сопоставимое. если ты напишешь за день на пхп, то и синьор напишет ту же логику за день на си или го
>потребляющий 40 Мб вместо 400
да там пара мегабайт от силы будет, какие 40
>Ты везде хайлоады уровня ВК видишь?
Что аж пришлось писать компилятор из php в c++ и писать на урезанной пыхе для этого
>исключение вылетает и некорректно завершает программу
поправил тебя
>Тебе надо вручную к каждому промису не забыть приписать обработчик исключений, чтобы эту ошибку с неправильным именем функции не потерять.
Ебать, проблема. Я даже не знаю, что посоветовать.
>проектировали инвалиды с фобией исключений
Исключения не подходят когда исполняется пул промисов
var promises = [promise1, promise2, promise3] // или генератор
var results = execute_pool(promises)
падать тут нельзя.
>Вот ты в коде с промисами неправильно написал имя функции и что по твоему должен делать код?
Это какая-то быдлопроблема из двухтысячных, серьёзно. Я уже не помню, когда писал имя функции неправильно. Практически для всех языков есть language server-ы слинкованные с ide. А если у тебя имя функции не линкуется статическим анализом, например ты хардкодишь его в строке - скорее всего ты делаешь что-то неправильно.
>с промисами код не завершится, а ошибка будет проигнорирована если программист не угадает такую возможность заранее и не пропишет обработчик для этого
В смысле "если программист не угадает"? Он у тебя что, шарады разгадывает? В спортлото цифры открывает? Что за фарс?
>Ну подумай сам, какая вероятность, что он это предугадает
Пусть ловит generic error. catch нужно указывать всегда
>и получается у тебя после каждого вызова должен стоять if с проверкой на ошибку. То есть, код будет состоять на 50% из проверок
Ну да, блядь. А как ты хотел? Говнокод на авось хуярить? Или ты считаешь что свалиться по эксепшну - это достойное поведение? Это уёбищная мерзость, так делают только наркоманы и моральные нищеёбы.
> onRejected проектировали инвалиды, так как он ловит вообще все ошибки и нельзя указать, что меня например интересует только ошибка таймаута соединения с сервером
смотря что у тебя за язык. в пыхе проверяешь if ($exception is a ExceptionClass) . в жабаскрипте if e instanceof Error.
>неожиданные ошибки должны завершать программу
устал блядь на эту хуйню отвечать. у тебя консюмер сосёт из очереди, прилетают проблемные данные, консюмер фейлится, ты его завершаешь. дальше что? запускаешь снова - он у тебя снова ложится. сильно помогло завершение?
>ловиться где-то выше
ну так и лови исключение, возвращённое промисом. только вместо try-catch используй if result instanceof Error
>когда пытался написать демон, который будет запускать процессы, прибивать их по таймауту и тд
Это называется "супервизор"
не могу сказать подходят или не подходят промисы для твоей задачи без подробностей. возможно здесь лучше подошла бы кастомная очередь задач - ты в цикле лупаешь состояния пидов
- это мониторинг запущенных, в конце итерации при необходимости делаешь пользовательские операции над очередью - добавляешь задания на запуск новых процессов, остановку запущенных в том числе по таймауту, потом проверяешь нет ли признака остановки лупа, если есть - то послыаешь всем процессам SIGTERM, дожидаешься их остановки, если не завершаются за 10 секунд, - SIGKILL, потом сам завершаешься.
сложно или просто - зависит от опыта. я об этом и пишу - кругозор пхпшника уже мышиной жопы, для него сложно всё что за пределами rest api и html.
промисы подходят для сосания веб-страничек. например у тебя тысяча адресов - ты организуешь в пул промисов, фетчишь, на onFulfilled вешаешь парсинг, на onFulfilled которого вешаешь выявление url картинок, на onFulfilled которого ещё что-нибудь.
Спасибо за пояснения.
Если я верно понял, то базовая модель ревью выступает как абстрактный класс, от которого могут унаследоваться специфические ревью - на электронные книги, аудиокниги, настольные игры и т.д.
Просто я про STI не слышал до этого, во фреймворке, который я использую такой фичи нет
>пук-среньк
Чисто для справки: средний уровень ПХПшника - senior, потолок эликсирщика - middle (любой эликсир-сеньор вне зависимости от количества известных ему пхп-инструментов, лычек в его компании и уровня зп - на самом деле миддл, и выше ему не подняться).
>>457902
Да какой эликсир. Кал какой-то ноунеймовский, неведомый никому.
Идиотом надо быть, чтобы какое-то говно, слепленное вчера на коленках учить.
>>457910
Нет ты дурак(
>>458032
Уровеньт дегродства оценили? Эликсирщики не умеют ни в кафку, ни в рэббит, их уровень - джуниор-макаки.
>>458021
Школьник-эликсирщик закукарекал. Ты главное сиди подольше в PHP-треде среди богов, а то где же ещё сидеть эликсирщикам с таким припизднутным ноунейм-языком. Хоть PHP-джуниоры тебя научат правильным вещам :)
Именно поэтому эликсирщик-вкатунщик сидит тут и тайно подрачивает на великий PHP.
То, что для того, чтобы использовать этот божественный язык хотя бы наравне с остальными, его надо обмазать внешними тулзовинами, супкраизорами, серверами,, форками и расширениями и даже с этим оно будет с серьёзными заскоками - ими игнорируется.
Что же, как писали выше, очень хорошо, что для вас есть отдельный загон.
сорта говна, но ноджс получше
- у него нет nodejs.ini
- как следствие - консистентный интерпретатор
- внятная консоль
- есть асинхронность
>- у него нет nodejs.ini
>- как следствие - консистентный интерпретатор
npm юзал ваще?
У меня на проектах нода прсто фронт подымает а я ее уже ненавижу
Js кусок говна как экосистема, абсолютно.
Только вот не смешивай это с нодой, V8 просто божественно написан и работает намного круче, чем движок php к примеру. Там намного более совершенный jit и крайне удачная модель памяти. И при этом это всё вокруг event loop, то есть честного неблокирующего io на уровне языка.
Он настолько хорош, что имхо это и стало причиной, по которой большая часть кода на js это полный треш посыпанный кучей сахара, они банально могут себе позволить очень неэффективный код, потому что V8 жуёт даже такое и не давится. Все тормозящие фронтенды, которые мы встречаем это как правило порождение ну совсем уродского кода и невероятно раздутой экосистемы.
Короч, v8 ну намного мощнее php, как минимум, тебе не требуются nginx, phpfpm и roadrunner/supervisord/any, чтобы сделать из него что-то просто юзабельное.
>пук-среньк
Какие же эликсирщики убогие, я фигею. У них реально нет никаких аргументов, кроме "ну оно ж быстрое, а пыха медленная".
>>458335
Знаете как узнать эликсирщика? Он считает себя диванным спецом по всем вопросам, JS/TS не нюхал, но думает что может делать выводы, все фронтедеры хуёвые, а он дартаньян. Конченное в общем, закоплексованное чмо.
>>458308
а что не так с ней? Ну память жрёт только, да)
Сегфолты, кучу зависимостей и везде раная версия. Я просто мимо треда листал и меня кекнуло что чел как будто с языка мои мысли, но про нодку. Хотя блять, какой язык вообще любить. Все хуйня
Ты меня с другим анонсом перепутал(а), я ни разу не писал на эликсире. Но вообще тот эликсирщик был прав, в отличие от тебя.
Что кстати забавно, ни одного технического аргумента я от тебя пока не прочитал, неужели кроме цитаты с пук-среньк ты действительно ничего не можешь сказать? Очень по-программистски, делает честь и тебе, и языку, за который ты топишь.
А там без проблем с головой тяжело работать
>>452401
Ты перечитай его сообщения, после "пых-программисты с программированием не сталкиваются", "пхп-программисты это максимум мидлы" можно понять что это малолетний троль пришёл насрать в тред.
Пук-среньк - это весь высер этой токсичной вкатуни-эликсирщика, макать в говно его только можно, спорить на серьёзных щах не вижу смысла.
пых-программисты с программированием не сталкиваются
опровергни. только обрати внимание на формулировку. не сталкиваются. именно специфика задач такова, что там одна рутина по накатаной - это
- понять как работает этот кусок уже написанного до тебя кода
- понять почему не работает этот кусок уже написанного до тебя кода
- захуярить rest api
- перекинуть данные из точки а в точку б. из файла в базу. из базы в очередь. из очереди в вебсокет (рачет или компт какие-нибудь, то есть тоже уже готовые)
- прикрутить гвоздями очередь/базу/вебсокет-сервер/почту к пхп-скрипту
- нписать комбинацию из try-catch, if null, const HUI = "HUI" и тому подобных примитивов.
Вот теперь опровергни. Укажи задачу или класс задач по программированию, встающую перед пхпшниками.
пхп-программисты это максимум мидлы
у них отсутствуют пласты знаний, целые области. например асинхронность. многопоточность (лично знаю как человек реализовавший целую систему на пыхе избегал многопоточных решений). сокеты. гомоиконичность. паттерн-матчинг. алгебраические структуры данных. функциональное программирование и чистые функции. think of program like data flow rather than control flow. фуллдуплексные соединения. макросы. работа компиляторов, что такое инлайнинг, что такое уровни оптимизации. что такое стек и откуда берётся его переполнение, что такое куча. что такое суперскалярная архитектура и конвейеры. что такое защищённый режим. как работает гарбадж коллектор. что такое продолжения (continuations). как работают распределённые транзакции. как жить без ООП. что такое хвостовая рекурсия и как её оптимизировать. итд
это обычный уровень знаний для среднего спеца владеющего несколькими языками. но пхпшник какой бы он ни был синьор по шкале своей конторы - в своей практике не столкнётся с большей частью этих вопросов, потому что пхп - не про это, а про перекладывание данных из базы в rest. пхп-написание связано с большим овехедом, а значит времени на ретроспекцию и переосмысление своей работы не остаётся, значит замкнутый круг и беличье колесо. и поэтому пхпшник никогда эти знания не приобретёт. а если приобрёл - значит умеет во что-то другое - и это уже не пхпшник.
> - понять как работает этот кусок уже написанного до тебя кода
> -понять почему не работает этот кусок уже написанного до тебя кода
Это типичная задача программиста в любом проекте на любом языке (я называю это реверс-инжиниринг). Давай я дурачку объясню, почему это так. Дело в том, что в любом мало-мальски крупном проекте столько кода, что прочесть его целиком нереально и поэтому, каждый раз, как ты приступаешь к какой-то задачи, тебе приходится начинать с изучения кода.
PHP в этом плане адекватный, например в нем есть классы и методы и в IDE можно по ним переходить кликом, в отличие от всяких функциональных и динамических языков (исключая PHP), где переход часто не работает из-за излишней динамичности, макросов и метапрограммирования.
Вот так-то. В реальных проектах возможность перейти к функции по клику важнее возможности макросами генерировать код.
Вот глупыш. Асинхронность в PHP вообще-то есть, стоит ли далее читать твой пост? Многопоточность это боль почти в любом языке (из-за гонок) и ее лучше избегать, модель умирающего PHP гораздо комфортнее для разработки и соответствует принципу stateless, что упрощает работу и снижает вероятность труднообнаружимых ошибок, утечек памяти итд. Кстати, для PHP есть профайлер для поиска утечек памяти, а есть ли он для твоего элитарного языка? Или ты еще маленький и не сталкивался с такими инструментами?
Ты носишься со своей никому не нужной асинхронностью тут как с писаной торбой. Я же уже писала выше, что бизнес-логику удобнее писать в виде синхронного кода, а не как в JS, где каждая строчка начинается с await.
Stateless модель PHP и поддержка синхронного кода лучше подходят для реализации типичных бизнес-приложений.
PHP-программист легко вкатывается в профессию и со временем при желании осваивает все остальное. Например, есть проблемы с производительностью, он за пару недель изучает Го или Раст и пишет сервис на них. Нужна система рекомендаций, он пишет нейросеть и получает рекомендации. Никаких неудобств. (Эликсир, Эраланг или ОКамл ему никогда не понадобятся, поэтому он не тратит на них время).
В то время как воображаемый тобой программист должен сначала лет 5 учиться, перечитать 30 книг, прежде чем претендовать на одну из 41 вакансий для Эликсира, и у него все равно нет шансов из-за отсутствия опыта. Зато можно прийти в PHP-тред и похвастаться своей элитарностью. Так себе перспектива.
> что такое хвостовая рекурсия и как её оптимизировать. итд
Эта проблема есть только в убогих функциональных языках, где нет нормальных циклов и приходится прибегать к рекурсии, а компилятор настолько тупой, что не может ее оптимизировать автоматически и преобразовать в цикл.
В PHP нет такой проблемы, так как у нас есть и циклы, и генераторы.
>где нет нормальных циклов и приходится прибегать к рекурсии
Ты наверное даже не вкурсе, что рекурсия испоняется быстрее цикла?
На пиках лучшие результаты компиляции.
Отклеилось
А это что за картиночки такие? Не похоже на локальную консоль. Это какой-то онлайн-сервис?
>а компилятор настолько тупой
Как среднестатистический пэхапешник?
>В PHP нет такой проблемы
Как и нормальной работы с большими числами, строками и динамической типизацией.
>>458847
>Это какой-то онлайн-сервис?
Да, локально результаты будут куда разительнее.
https://www.jdoodle.com/
>>458726
>пук-среньк
ОГО, ты знаешь что такое макросы и сокеты и фунц.прог., ну нихуя себе познания, вот это уровень! Аргументы уровня "Ну ты ж свою ОС не писал - значит не программист!", "Они не знают этого, Я ТОК СКОЗАЛ!!".
Ты серливый обоссаный эликсирщик маменькин без опыта, мы все тут это уже поняли :)
Ты бы лучше дал ссылку на линкедин, такой ты павлин важный, а на деле обосрёшься от первых же моих запросов в зуме, вкатун эликсирный))
>Многопоточность это боль почти в любом языке (из-за гонок) и ее лучше избегать
Да я бы не сказал что боль, но вот когда нужно манипулировать большим объемом данных, то этот процесс лучше распараллелить на потоки. В расте например есть вообще охуенная штука https://crates.io/crates/rayon достаточно добавить .par_iter() к итератору и все будет обрабатываться в разных потоках.
>Ты носишься со своей никому не нужной асинхронностью тут как с писаной торбой. Я же уже писала выше, что бизнес-логику удобнее писать в виде синхронного кода, а не как в JS, где каждая строчка начинается с await.
Я бы не сказал что ненужная, например когда есть блокировка IO, то лучше писать асинхронный код, так меньше ресурсов потребляется и это сильно сказывается на производительности. Например запросы к внешним api.
>за пару недель изучает
>Раст
Удачи хули, если с go еще правдоподобно, поскольку он простой как мясорубка, то с растом не очень. Пару недель уйдет только на то чтобы понять что от тебя хочет борроу чекер
мимо раст-кун
> Удачи хули, если с go еще правдоподобно
Даже с го неправдоподобно
>>458819
Лолчто, рекурсия быстрее циклов? На твоём синтетическом говнопримере всё что угодно может быть, но вообще говоря циклы по определению быстрее рекурсии, потому что они не создают новых сегментов стека и не меняют контекст.
Не просто так мы начали обсуждать оптимизацию хвостовой рекурсии, это грубо говоря, когда определенные виды рекурсии превращаются под капотом в цикл, потому что так эффективнее. Кстати, это умеют примерно все компиляторы и примерно все языки, кроме php и ещё одного позорного исключения, о нём не будем
>>458762
> PHP-программист со временем при желании осваивает все остальное. Например, есть проблемы с производительностью, он за пару недель изучает
Этот обман стар, как мир. Шутка в том, что нет, не осваивает и не изучает, сколько раз этот процесс наблюдал своими глазами. PHPшникам всё кажется простым, потому что все языки им кажутся похожими на их родной пхп, только немного другой. А потом ВНЕЗАПНО выясняется что нихуя, там требуются другие стили мышления, другие концепции и вообще, в php содержится 5% того, что желательно бы знать, чтобы писать на том же rust - вот тогда-то мозг начинает кипеть и плавиться.
Повторюсь, видел такое своими глазами, чванливый php'ный "сеньор" будучи уверен, что всё видел и значет, начинает пытаться написать что-то на каком-нибудь тайпскрипте не самом сложном языке на свете и просто с размаху убивается об стену. Какой-нибудь rx лочит его на неделю, после которой он всё ещё путает observable c observer и промис с исключением.
Так что нихуя.
> Многопоточность это боль почти в любом языке (из-за гонок) и ее лучше избегать
Заблуждения человека, который никогда с ней сталкивался нормально за пределами php. В ней нет ничего страшного, просто нужно усвоить ещё несколько концепций и инструментов, и потом что потоки, что акторы, что горутины, что промисы зайдут вполне нормально.
Зато у тебя код не будет неэффективно простаивать 99% времени.
Я на самом деле думаю, что у phpшников это защитная реакция, спорить с очевидным. Ну не могут же они признать, что ошиблись и тратят свою жизнь на мертворожденный стек технологий хотя какие это технологии, так, игрушки
> Нужна система рекомендаций, он пишет нейросеть и получает рекомендации. Никаких неудобств.
Ну это совсем жирно, предлагаю всем эту дуру уже просто начать игнорировать, каждый наброс всё тупее и тупее. Нейросеть она пишет, да. На php.
Да и вообще, срач можно заканчивать. Каждый заинтересовавшийся может прочесть последние 50 сообщений и обратить внимание на вполне корректные технические аргументы и доводы с одной стороны и стыдное "мы всё можем, а что не можем, так это не нужно" с другой. Sapienti sat, умному достаточно.
> Удачи хули, если с go еще правдоподобно
Даже с го неправдоподобно
>>458819
Лолчто, рекурсия быстрее циклов? На твоём синтетическом говнопримере всё что угодно может быть, но вообще говоря циклы по определению быстрее рекурсии, потому что они не создают новых сегментов стека и не меняют контекст.
Не просто так мы начали обсуждать оптимизацию хвостовой рекурсии, это грубо говоря, когда определенные виды рекурсии превращаются под капотом в цикл, потому что так эффективнее. Кстати, это умеют примерно все компиляторы и примерно все языки, кроме php и ещё одного позорного исключения, о нём не будем
>>458762
> PHP-программист со временем при желании осваивает все остальное. Например, есть проблемы с производительностью, он за пару недель изучает
Этот обман стар, как мир. Шутка в том, что нет, не осваивает и не изучает, сколько раз этот процесс наблюдал своими глазами. PHPшникам всё кажется простым, потому что все языки им кажутся похожими на их родной пхп, только немного другой. А потом ВНЕЗАПНО выясняется что нихуя, там требуются другие стили мышления, другие концепции и вообще, в php содержится 5% того, что желательно бы знать, чтобы писать на том же rust - вот тогда-то мозг начинает кипеть и плавиться.
Повторюсь, видел такое своими глазами, чванливый php'ный "сеньор" будучи уверен, что всё видел и значет, начинает пытаться написать что-то на каком-нибудь тайпскрипте не самом сложном языке на свете и просто с размаху убивается об стену. Какой-нибудь rx лочит его на неделю, после которой он всё ещё путает observable c observer и промис с исключением.
Так что нихуя.
> Многопоточность это боль почти в любом языке (из-за гонок) и ее лучше избегать
Заблуждения человека, который никогда с ней сталкивался нормально за пределами php. В ней нет ничего страшного, просто нужно усвоить ещё несколько концепций и инструментов, и потом что потоки, что акторы, что горутины, что промисы зайдут вполне нормально.
Зато у тебя код не будет неэффективно простаивать 99% времени.
Я на самом деле думаю, что у phpшников это защитная реакция, спорить с очевидным. Ну не могут же они признать, что ошиблись и тратят свою жизнь на мертворожденный стек технологий хотя какие это технологии, так, игрушки
> Нужна система рекомендаций, он пишет нейросеть и получает рекомендации. Никаких неудобств.
Ну это совсем жирно, предлагаю всем эту дуру уже просто начать игнорировать, каждый наброс всё тупее и тупее. Нейросеть она пишет, да. На php.
Да и вообще, срач можно заканчивать. Каждый заинтересовавшийся может прочесть последние 50 сообщений и обратить внимание на вполне корректные технические аргументы и доводы с одной стороны и стыдное "мы всё можем, а что не можем, так это не нужно" с другой. Sapienti sat, умному достаточно.
> наброс
По-моему это ты ворвался в тред другого языка зачем-то чтоб потролить жирными набросами. Observable с Observer, кек. Смешно просто.
мимо
>На твоём синтетическом говнопримере
Она бенчмаркала
- на внешнем сервере, который непонятно как загружен и как лагает
- вместе с компиляцией
- код с детерменированным результатом, то есть который мог быть оптимизирован компилятором до просто вывода вычисленного значения
- один раз
Дружок, ты показываешь нам цифры 0.865 и 0.908, но мы не знаем, какой случайный разброс значений на этом сервисе выполнения кода. Возможно, там цифры прыгают от 0.6 до 1.2 (условно) и разницу можно просто объяснить случайностью.
Что за детский сад.
И еще, тебе не кажется странным, что 34 операции умножения занимают 0.9 секунд? У меня в браузере JS код (без всяких wasm) делает 300 миллионов сложений за секунду (я как-то видел и миллиард сложений в Хроме, но не могу сейчас воспроизвести).
У тебя 0.9 секунд это скорее инициализация виртуальной машины или контейнера, в котором выполняется код.
>базовая модель ревью выступает как абстрактный класс
не обязательно абстрактный класс
>от которого могут унаследоваться специфические ревью
+
Ты наверное не в курсе, что с циклами проще и легче работать. В PHP здоровые люди работают, а не красноглазые ботаники.
"Делай проще, тупица!", мы используем этот принцип.
Если ты и дальше будешь со своим говноэликсиром лезть в тред, то я не просто зарепорчу, ещё и модератору напишу. В PHP используют только циклы для перебора и точка. Рекурсии используем там, где они действительно нужны.
Т.е. наша задача здесь объяснить новичкам как писать на PHP, чтобы нашли работу и зарабатывали деньги.
Если ты будешь рекурсией перебирать массив, то тебя на работу не возьмут по этому языку, так что не надо вредные советы сдесь давать.
поиском пользуйся
>фронтенд
>2022
ты бы еще в диджитал арт, или геймдев вкатился деньги зарабатывать
вообще не понимаю, нахуя нужен сейчас фронт, если есть bootstrap-образные frontend фреймворки и довольно легковесные. ну ладно, шучю, конечно же нужны
А я пишу на тайпскрипте реакт с редаксом, кроме основной работы на пхп, мне нравится.
Причём вообще не учил ни тайпскрипт, ни реакт. Сел и вперёд таски делать, подсматривая как другие пишут в проекте, но теорию конечно надо подтянуть будет.
>В PHP здоровые люди работают
Почитав как тут с пеной у рта защищают швятой пехапе у меня впечатление возникает, что большинство нихуя не здоровые.
>говноэликсиром
Во первых это раст, во вторых я пэхапешник мидл симфонист тупая ты макака.
>то я не просто зарепорчу, ещё и модератору напишу
В прокуратуру ещё пожалуйся по статье оскорбление чувств пехапешников, а потом маме.
>В PHP используют только циклы для перебора и точка
Что делает алгоритм посмотри, скрины ниже постом.
>>459515
>Т.е. наша задача здесь объяснить новичкам как писать на PHP
А лучше сразу указать на недостатки >>458860
этого прости господи ЯПа, чтобы они с десяток раз призадумались: а стоит ли!?
>чтобы нашли работу и зарабатывали деньги
50К на битриксе или вордпрессе?
>то тебя на работу не возьмут по этому языку
Я бы человека который не знает простейшего алгоритма вычисления факториала точно бы не взял.
> Я бы человека который не знает простейшего алгоритма вычисления факториала точно бы не взял.
Большинство пехапешников и слова-то такого не знают
мимо
Я бы человека, который не умеет делать бенчмарки, и пытается что-то доказать, тоже бы не взял.
>Если ты и дальше будешь со своим говноэликсиром лезть в тред, то я не просто зарепорчу, ещё и модератору напишу.
Пхпшник порвался, несите следующего.
Кстати, это весьма показательная фраза. Это не разовый случай, а системное явление, я наблюдал его неоднократно. Заключается оно в неприятии пхпшниками современных технологий вплоть до агрессивного отторжения. На индивидуальном уровне это проявляется как "ох лол подумаешь <языкнейм>, в пхп то же самое можно". На командном уровне это "у нас устоявшийся стек, мы не будем ничего менять" (и ничего изучать). И это именно у пхпшников. Ни в одной другой команде и ни в одной другой культуре я не встречал подобного. Почему? Потому что другие языки - про программирование. Программист может работать с тайпскриптом или сишарпом, и при этом с интересом выслушает что там в лиспе или окамле. Потому что он программист и интересуется программированием. А пхпшники - это большое но при этом закрытое сообщество скриптомакак, программированием не интересующихся. Не нужны пхпшнику ни база от олдов, ни новые технологии. Кто-то говорит что есть технология лучше пхп? Да это святотатство! Что? Изучить новый язык? Бан!
Ну хватит уже толстяк, все поняли что твой элекесир или языкнейм — лучше, быстрее и компилируемей.
Только кабанам на это похуй. Они не за это деньги платят. Все в РФ привыкли к PHP, и ты будешь покакунькать пока МЫ наровне с БИТРИКСОБОГАМИ будем получать стабильные предложения, еще очень долго.
Нахуй нанимать душного долбоеба(ов) который воняет говном, и не дает ни каких гаранитй стабильности, если можно нанять одного работника который сделает все ДЕШЕВЛЕ, БЫСТРЕЕ, ПРОЩЕ, СЛАЩЕ
перед тем как писать сюда, да да, ты ты, говно посмотри рейтинг вакансий на свой сранный язык, и количество вакансий на PHP
Я не он, но я работаю на российскую кампанию и получаю х2 от всех этих пехапешников. Недавно как раз приходили из очередного крупняка и предлагали очень смешные деньги за senior php develop'а, поводил им хуем по губам, да и отправил обратно.
Я не шучу, ваши 100500 вакансии нормальным программистам не интересны, как раз потому, что ключевую мысль ты сам высказал
> если можно нанять одного работника который сделает все ДЕШЕВЛЕ
ОЧень конечно странно, что вы сами понтуетесь тем, что вам меньше платят, но пускай, так даже ироничнее хотя конечно очень жырно, особенно про битриксобогов, ты сейчас лопнешь уже
Но ведь бек на пыхе ничем не отличается от бека на руби, пыхтоне, ноде. А в крупных компаниях пыхеры в голангах и сисиплюсах копаются... процесс менеджеры для пыхи пишут... Зачем если пыха хуже чем пыхтоны?
> Но ведь бек на пыхе ничем не отличается от бека на руби, пыхтоне, ноде
Выше пол-треда комментариев с разъяснениями, что пыха как язык менее эффективна, так что отличается и ещё как
> А в крупных компаниях пыхеры в голангах и сисиплюсах копаются... процесс менеджеры для пыхи пишут...
Большинство пыхи именно в крупных компаниях сейчас это легаси, всякие копролиты из древних времен, когда ничего лучше не было. Тот же озон когда-то был на php написан, а сейчас у него ты вакансии на php не найдешь, они на голанг переехали и, вероятно, переписали. Просто ретроспективно за последние 10 леи можно посмотреть, кто пишет на php и результаты будут не особо вдохновляющие.
Я неиронично думаю, что мы сейчас наблюдаем пока ещё вялый закат php, как языка, годного для крупного бизнеса, просто по совокупности причин. Php за последние 10 лет стал сильно лучше, но всё же не смог решить все свои проблемы, а вот прочие языки очень сильно подтянулись как в плане дружелюбности к разработчикам, так и в плане эффективности. Грубо говоря, с одной стороны на php давит golang, который тоже не то, чтобы пиздец сложный, но при этом намного более эффективный - а с другой java с более дружелюбной экосистемой (spring -> spring boot) и kotlin, в котором синтакисческого сахара сильно больше чем в php и соответственно писать ещё более комфортно. И это не вспоминая про c# и прочих конкурентов, ту же ноду.
Для среднего и мелокго бизнеса php был и останется очень востребован и может даже останется их королем, просто за счет низкой цены разработки и требований к разработчикам.
Не удивлюсь, если лет 20 назад такие статьи писались и про Perl с Basic какой-нибудь, и где эти языки теперь? Хотя тогда конечно время другое было, для вкатывальщиков и индусов была скорее минорной.
Опишите пожалуйста, приблизительную структуру, как эта комбинация позволит создавать высоконагруженные проекты, или в лучшем случае все должен делать ТОЛЬКО Go? Это бред?
В основном переписывают туда или обратно. Хотим чтобы был миллион онлайн и чтобы все летало. Переписываем на голенг! Бля, миллиона пользоватей нет, бабок закономерно нет. Переписываем на пыхепе!
Погугли статьи badoo, они такое любят. В двух словах, бизнес логику они фигачат на php (правда вероятно у них там нет фрейморков, какой-то более или менее тонкий набор либ, чтобы слишком много не жрали), а узкие места, системные и инфраструктурные штуки на го.
На го, к примеру, какие-нибудь системные апи, апи гейтвеи, сервисный уровень (сервисы авторизации, обработки данных каких-нибудь, процессинг платежей, процессинг сообщений для чатов).
Вообще представил как работать на Go без composer или аналога, например какого нибудь пакета работы с документами (exel, word, etc.) думаю ну его нахуй.
Когда нибудь может, но сейчас только поиграться можно видимо.
Вылавливать баги, утечки и тд там наверное вообще пиздец
> в лучшем случае все должен делать ТОЛЬКО Go
В идеале-то да, на нём не так страшно писать бизнес-логику, как тут многие любят заявлять. Может чуть многословнее и тп, но не смертельно ни разу. написал тут пару сотен тысяч строк бизнес логики на го за последнее время, полёт нормальный, брат жив
Упрощая, го эффективнее php в плане утилизации ресурсов, php несколько симпатичнее в плане кодирования, меньше приседаний с обработкой ошибок, тп. То есть код php никогда не сможет того же, что может код на го, а вот обратное в целом возможно, но не всегда идиоматично.
>>460579
Это уже долбоёбы какие-то, а не бизнесмены. Я впрочем никогда такого не встречал. Обычно наоборот есть копролит на php, который приносит деньги, но слишком много жрёт и который слишком сложно разрабатывается. И поэтому бизнес начинает заводить команды и отгрызать от него куски, превращая их в отдельные сервисы, параллельно разрабатывая новое уже только а го. За несколько лет такой работы этот монолит тает почти до нуля и в итоге болтается где-то на задворках, отвечая за те вещи, которые никому не мешают.
Бьют приложение на микросервисы и переписывают микросервисы.
Аналог composer там есть, причём вшит в сам язык (go mod) и сам по себе более удачен, чем у пыхи. Хотя бы потому, что шарит кэш между всеми проектами и потому что поддерживает использование нескольких версий одной и той же транзитивной зависимости одновременно: A(B, C), B(D1.0), C(D2.0)
>как комбинируют PHP/GO?
Бля, что тут гадать? Элементарно всё. Берётся там, пишется какой-нибудь скажем бот-скраппер на colly (golang), он многопоточный, начинает собирать данные с сайта. Либо например какое-нибудь видео перекодировать нужно, пишется перекодировщик на golang'е. А фронтэнд пишется на php.
Как их соединяют? Тут тоже нет ничего сверхестественного, есть несколько способов:
golang --> событие --> php
golang --> очередь сообщений --> php
golang --> топик --> php
golang --> база данных --> php
golang --> api --> php
Зависит всё от задачи.
На PHP/SQL пишут большинство кода и бизнес-логики, потому что это быстрее и дешевле. На Го - пишут микросервисы, где требуется высокая производительность или асинхронность и где стандартная БД не может решить задачу.
Это актуально только для проектов с огромным числом пользователей и нагрузкой.
Ну например, ты пишешь соцсеть и тебе надо показывать ленту новостей друзей. Это сложно сделать на SQL базе данных, так как у человека может быть например 500 друзей, они постят кучу всего и это еще надо отсортировать каким-нибудь хитрым алгоритмом, чтобы поднимать наверх самые популярные посты.
Тут остается только писать свою базу данных. Но если уж писать, то лучше на Го, так как он будет быстрее. Или на Расте, у него есть свои плюсы и он может быть быстрее, но на нем еще сложнее и дороже писать, чем на Го.
Поэтому ты пишешь программу на Го, она поддерживает огромную базу данных прямо в памяти (если база данных большая и не помещается в один сервер, программу запускают на N серверах) и у нее есть API. Когда человек что-то публикует ты через API отправляешь информацию в эту программу, а когда он заходит в ленту, то программа на Го выдает id событий, которые надо показать.
То есть это по сути кастомная база данных, оптимизированная под определенную задачу. Ты не можешь в нее класть что угодно или делать произвольные запросы, она может работать только с лентой.
Писать такое сложно и дорого и потому это используется только в больших проектах с большими бюджетами. Если ты работаешь на мелкий или средний бизнес, то такие технологии не оправданно использовать. Тем не менее есть дурачки, которые пытаются внедрять Го в нищебродских проектах, думаю, их ждет закономерный провал.
Кстати считал и считаю, что вся эта фигня работает неправильно. Она зачем-то пытается демонизировать php, а он как бы изначально про другое. "Правильный" roadrunner должен был бы читать сообщения из очереди и вместо общения с консольным php, отправлять эти сообщения в локальный php как в веб сервер, по какому-нибудь пути типа /api/handle_task/{queue_name}.
Тогда php бы стартовал и умирал на каждое сообщение, как и должен был, всё супер идиоматично. Вся та же фигня с воркерами отлично бы настраивалась, просто через воркеры php-fpm
Я думаю, что ты ошибаешься. Нет никакого смысла писать платежный шлюз на Го, так как там нет больших нагрузок. В Баду на Го имеет смысл писать сервис отбора пользователей или сервис приема лайков/дизалайков, а платежи не идут таким потоком, чтобы нужен был Го. Шлюз платежей это низконагруженный сервис, отлично работающий с традиционной БД.
>Тут остается только писать свою базу данных
Ты шо, ебанутый? Зачем? Есть нормальная готовая база для соцсетей, https://neo4j.com/ Короче не читайте этого мудака, он бред несёт.
По моему, ты не понимаешь, о чем пишешь. roadrunner это оптимизация кода за счет исключения процесса инициализации. То есть, твой фреймворк один раз инициализируется и обрабатывает много запросов не умирая. Соответственно, я даже понять не могу о каких сообщениях и каких API ты пишешь.
>бек на пыхе ничем не отличается от бека на руби, пыхтоне, ноде
Какая у тебя экспертиза чтобы заявлять подобное?
Зачем ты пиаришь какую-то малоизвестную поделку, написанную на Java? Ну давай еще Elasticsearch порекомендуй тогда. Если бы задачу можно было решить готовой БД, то кастомные хранилища никто бы не писал.
Просто для справки, VK - самая крупная российская соцсеть - писала свои хранилища-микросервисы на Си, а не использовала то, что ты тут рекламируешь. Я тебе описываю реальность, а ты тут рассказываешь то, что где-то краем уха слышал.
А у тебя какая, чтобы утверждать обратное? Те же портянки с кверибилдером, те же очереди, асинхронщина по разному решается, но она попадает в 1% от задач. Почему 1%? Потому что если что-нибудь нестандартное реально нужно, а не потому что кто-то привык только по шаблону думать, пчпшники берут инструмет строго под эту задачу, а не пишут велосипед на своем языке.
>А у тебя какая, чтобы утверждать обратное?
16 лет общей разработки. Пхп, руби, эликсир, раст, питон, ноджс, а также фронт-жс - писал за бабки. Го, v, ocaml, scheme, clojure, crystal, typescript, delphi/pascal, haskell - просто писал для себя. Писал веб фреймворки, а не только ими пользовался.
Ну в чем я не прав со своей колокольни? У нас что сотни тысяч больших проектов с уникальными задачами и дюжина мелких? Нет. 100500 маленьких и средних с конгруэнтным говнокодом.
>Ну в чем я не прав со своей колокольни?
В том, что фокусируешься только на бизнесовой части, игнорируя уровни абстракции выше и ниже. В работе приходится лазить по всем уровням от околосистемного и до eDSL, и в идеале это делается одним языком - тогда у тебя минимальный оверхед на вызовы и на коммуникацию между людьми. В пхп же ты вынужден подключать сишные библиотеки снизу и писать обработчики для декларативных yaml/xml с описанием твоей логики сверху. Примеры - это либы и фреймворки для решения задачи асинхронности - reactphp, amphp, swoole, roadrunner/spiral. Публичных примеров eDSL не приведу, но мне приходилось их пилить, и там всё давалось через оверхед. Например в языке нет enum-ов, а как без них описывать какую-то логику?
Разница в оверхеде по времени написания, сложности написания и поддержки, производительности конечного кода - раз в пять и может привести к невозможности закончить крупный проект.
Предлагаю просто помедитировать на отсутствие вебсокетов в языке созданном для веба.
Слабо разбираюсь в PHP но даже я знаю,
>enum'ы сделали уже с 8 версии
Чек
>веб сокеты есть в офицальной экосистеме laravel, аналог socket.io как я понял, и если верить гуглу, то была поддержка сокетов с 5 версии фреймворка
Чек
Соответственно, PHP имеет большой потенциал на расширение, и своими пакетами, и другими языками. Кому нужен энтерпрайз - платят космические суммы - это отдельный разговор, не теиа для дискуссии.
Также laravel офицально давно хорошо дружит с Vue.js, посему нет необходимости в костылях типа react-php, хотя может это местами полезный инструмент
Я думаю нет проблем прикрутить туда и react и что нибудь еще если нужно
>enum'ы сделали уже с 8 версии
во-первых это уже какая версия и год, они уже не нужны вместе со своим пхп
во-вторых алгебраические типы данных даже не маячат на горизонте
Ну так кто выиграл та?! Скажи свой любимый язык, и мы закроем тред!
В ряд все встаньте и напишите ваши крутые языки, как детишки в столовую
>PHP имеет большой потенциал на расширение
ну так и говори "мне пхп нравится потому что в нём можно поковыряться, подрочить его, поизучать". ну ок. было время когда каждый первый считал своим долгом написать свой фреймворк или цмс. но он годится для изучения только базовых вещей. это как бы программа начальной школы - читать, писать, таблицу умножать.
а дальше что? "давайте мы на программе начальной школы выстроим всю наукоёмкую часть промышленности и научных разработок"? ну ерунда же. дальше средняя школа, потом вышка, и там тебе дают новые концепции и инструменты. никто не удивляется когда в вышке дают например быстрое преобразование Фурье как самостоятельную уже готовую операцию, а на считающих то же самое вручную таблицей умножения смотрят как на отсталых.
в вышке оперируют понятием уже понятием интеграла, и пользуются им а не считают сумму вручную
ну и так далее
> в ларавеле есть прибитые сбоку вебсокеты
ы
Фреймворкомакакен, ты хоть сам блядь понял, что спизданул? Какое нахуй отношение имеет reactphp к reactjs и фронту?
Ебаный стыд, с кем в одном треде сидеть приходится.
>с кем в одном треде сидеть приходится
Ещё одна проблема пхп. Ты синьор и видел много говна, рядом с тобой джун зелёный несёт ахинею, и люди не видят между вами разницу. Поэтому в частности я и ушёл из этого стека.
>рядом с тобой джун зелёный несёт ахинею
то же самое в командной работе - высок шанс что человек рядом с тобой не особо понимает что он в принципе делает. у нас был тимлид, не знающий что такое ортогональность. ну как тимлид. кабан от безысходности назначил знакомого, команда разбежалась
>люди не видят между вами разницу
>и ушёл из этого стека
То есть в другом стеке посторонний человек легко может определить разницу между помидором и джуном. И что это за стек? "Модный приговор" какой-нибудь?
В любом сложном деле мимокрок не увидит разницу между помидором и джуном. Единственное исключение - рисование.
>То есть в другом стеке посторонний человек легко может определить разницу между помидором и джуном.
В некотором другом стеке джунов просто минимум вплоть до нуля. Я же писал выше: средний(!) уровень эликсирщика - синьор. Посмотри вот это видео начиная с таймкода https://www.youtube.com/watch?v=v1CmGbOGb2I&t=3311s там минут пять про найм. (Вот про компанию https://en.wikipedia.org/wiki/Jane_Street_Capital) . Принцип такой, что макака, рассуждающая количеством вакансий, такой язык просто не заметит.
>средний(!) уровень эликсирщика - синьор
На каком языке он синьор? В каком стеке? На каком проекте?
Борщехлёбские языки вычитаем сразу, какие бы мани там себе звания не придумывали.
Ну во первых если у тебя фреймворк занимает много места, то ты что-то делаешь не так. Что там должно быть инициализировано, логгер, роутер плюс коннектор к базе, ну может ещё набор сервисов каких-нибудь, но по идее опять же все должны быть достаточно легковесными, чтобы выделить несколько байт под это всё дело не было проблемой.
Ао вторых, в php уже есть preload (и jit кстати тоже), так что нихуя, у тебя тот же laravel загрузится в память php-fpm всего один раз, при старте php-fpm. Вот яИ кстати по-моему php-fpm содержит встроенный пул коннектов к sql ещё со времен php 5 вместо того, чтобы у тебя скрипты каждый раз долбали базу открытиями соединений.
>В каком стеке?
Computer science/software engineering.
>На каком языке он синьор?
Да всем похуй на язык
>На каком проекте?
Совсем крышей потёк? Ты или синьор или нет независимо от проекта.
>Что там должно быть инициализировано, логгер, роутер плюс коннектор к базе, ну может ещё набор сервисов каких-нибудь, но по идее опять же все должны быть достаточно легковесными
Ловите, блядь, дебила. Хоть кол на голове теши. Уже кажется каждая собака знает, что когда пых умирает а потом снова стартует - инициализация стейта и объектов занимает дохуя как больше времени. Уже и блядь персистентные коннешны к базе появились в языке что как бы иллюстрирует проблему. И блядь любой профайлинг покажет отношение времени инициализации ко времени выполнения бизнес-логики даже для не обвешанного старта. Нет, сука, находятся такие гении, которые говорят "а чё, всё ж легковесное, проблемы не должно быть". А ты прикинь, проблема есть даже для легковесных случаев. А ещё бывают не легковесные, это жирное легаси за которое кабаны обычно жирно платят. Вот так реальность отличается от твоих маняфантазий.
>roadrunner это оптимизация кода за счет исключения процесса инициализации
и не только. roadrunner содержит написанный на go евент-луп из которого вызывает пхп-функции
Ты, дурачок, до конца-то мой пост дочитай. Я во второй части как раз и писал и про персистентные соединения, и про прелоад.
А в первой упомянул, потому что считаю это важным, не должны фреймворки весить много, это какая-то лажа, которая должна остаться в мире джавы. Если фреймворк занимает 100500 классов и мегабайт а я знаю, что некоторые php-шные фреймворки и особенно cms так делают, то это какая-то херня и не надо делать вид, что это нормально.
Ё-моё, да это тупо супервизор, скрещенный с очередью и веб сервером. Тупо бинарь, который читает сообщения из сети или очереди, кладёт их в php, забирает результаты и кладёт обратно.
Нет вообще никакой проблемы использовать что-то другое, хоть описать системдшный сервис, хоть супервизорд, хоть через докер/кубы запускать php worker.php, который сам из очереди будет что-то читать и потом писать обратно. Будет несколько различий связанных с обработкой таймаутов и прочей обвязкой, которая в php сделана по-уродски, но это здесь не важно.
Вроде через нативные php сокеты, что вероятно должно ускорять энкодинг/декодинг по сравнению обменом json'чиками через stdin/stdout, как зачастую и работают самописные наколеночные решения.
Но в любом случае это будет давать некий оверхед на коммуникацию с внешним сервисом, вместо того, чтобы сразу самому ответ отдать или клиенту, или в очередь записать. Опять же, если не учитывать приколы с php'шными либами, а то они иногда странно реагируют на к примеру сетевые ошибки.
Ну и кстати таймауты. Я не смотрел, но скорее всего там никакого таймаута на обработку запроса php не задаётся, потому что php же не умеет в рамках одного процесса асинхронно принимать сигналы, соответственно скорее всего даже если roadrunner и поймёт, что превышен таймаут обработки, то всё, что он сможет сделать, это тупо рестартануть демона, что как-то невесело.
1) Нет асинхронности. Нужно городить ебаные воркеры/службы/очереди чтобы в фоновом режиме обрабатывать файлы и данные, обращаться к 3rd party API, писать в логи, отправлять почту, дергать медленную базу. Из-за этого вы ленитесь сократить время выполнения запроса к АПИ (что не является преждевременной оптимизацией, если ваш апи 10 секунд думает по дефолту), ваша хуйня ломается когда больше 5 запросов в секунду, кабанчик визжит матом в трубку.
2) Заказчики быдло ебаное с поведением из 90х и мелким бюджетом, а если офис то это ебаная колхозная блевотина в офисе на отшибе со сломанными стульями.
>кабанчик визжит
Это мелко. Подумай о том, чтобы сменить его на взрослого кабана, матёрого такого хряка.
> 1) Нет асинхронности
Асинхронность ухудшает код. Асинк\авейты смотрятся хуево и ты неизбежно мешаешь бизнес логику с инфраструктурной. Есть целый класс задач где она не нужна, и их можно на пыхе делать.
У меня первая работа была в студии где нужно было максимально быстро хуячить ecommerce проекты, пробовал и на пыхе и на node, на ноде сложнее.
> 2) 90х и мелким бюджетом, а если офис то это ебаная колхозная блевотина в офисе на отшибе со сломанными стульями
Стереотипы просто.
>Асинхронность ухудшает код
>Асинк\авейты смотрятся хуево
>ты неизбежно мешаешь бизнес логику с инфраструктурной
>Есть целый класс задач где она не нужна
Неосилятор, спок
Примеры твоего кода тащи
Я прихожу сюда годноту почитать, что нибудь интересное, а вы тут срач устроили. Крч желаю рака, всем кто не по теме пишет, рака яиц и всех проклятий, болезней, адских и мучительных. И вообще вам пизда после смерти мне мама змея сказала
Двачую адеквата
что то ебусь уже час с лишьним и разобаться никак не могу
>Computer science
Ты синьор в Computer science, ватишник?
>software engineering
Где твой software? Кто им пользуется?
>Да всем похуй на язык
Т.е. межлу пхп и спп разницы как бы и нет, да?
>Ты или синьор или нет независимо от проекта.
Специалист во всём есть специалист ни в чём. Как-то так про тебя и таких как ты звучит.
>Я прихожу сюда годноту почитать
Соси хуй значит.
>а вы тут срач устроили
Добро пожаловать на двач.
Если что-то не нравится, то пизду в /б покаки обсуждать. А нам и так норм.
Если бы мы тут сагали треды тогда я бы ещё понял претензии, а сравнение достоинств которых у некоторых почти нет и недостатков разных языков это вполне себе контент.
>>461680
>Асинхронность ухудшает код
>Асинк\авейты смотрятся хуево
Какая-то хуета, нормально всё с асинхронностью. С асинк/await код вообще выглядит почти в точности так же, как и синхронный.
Есть гайд, но я вообще не ебу как это делать
https://docs.github.com/en/rest/search#search-users
>Добро пожаловать на двач.
>двач
Ты мне это будешь говорить, говно? Я тут со времен когда полборды седело на бб упоротые в слюни, когда тут были кони и цп
>нам
Хряков на б сам иди смотри, петушара. Везде гниды расплодились, еще говорят мне на б идти, ох лол.
Ладно хуй с вами, лучше делом займусь
Научись сначала правильно на посты отвечать
>Как найти юзера на гитхаб с помощью curl?
>Есть гайд, но я вообще не ебу как это делать
вначале получаешь токен в своём личном кабинете
потом делаешь запрос в консоли
curl -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <YOUR-TOKEN>" https://api.github.com/search/users?q=vasya
так ты ищешь по строке vasya
тебе должна вернуться json-структура как в примере в гайде.
потом ты берёшь http-клиент guzzlephp и делаешь на нём
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/search/users?q=vasya', [
'headers' => [
'Accept' => 'application/vnd.github+json',
'Authorization' => 'Bearer: <YOUR-TOKEN>'
]
]);
echo $res->getBody()
Ебать у тебя чердак подтекает. Ты думаешь если ты будешь 5-6 лет работать на пыхе и дорастешь до синьора, а потом перейдешь на другую мову и сразу в джуны? Ваще поехавший?
Чел, ну чё ты доёбся. Анон привёл неудачный пример. Действительно, пхп-синьор при свитче становится чуть ли не джуном потому что знаний у него про ОС - НЕТ, про сетевые взаимодействия - НЕТ, про архитектуру железа - НЕТ, про алгоритмические приёмы программирования - НЕТ, про математические модели - НЕТ, про базовые элементы языков программирования (типа асинков, корутин, продолжений, стеку/куча, сборка мусора итд) - НЕТ.
Но при работе с другими языками большая часть этих знаний так или иначе присутствовать будет.
Нет. Джуниор это разработчик нуждающийся в менторстве, постоянно задающий вопросы и способный решать чисто задачи из техдолга, но не срочные и не критические.
Мидл это рабочая лошадка, решает любые задачи по ТЗ.
Синьор это уже тот кто уже технические\архитектурные решения принимает и у которого есть зона ответственности. И подчиненные, как правило.
Это не про технические навыки, а про место в иерархии в коллективе.
> знаний у него про ОС - НЕТ
Это каких? Линукс настроить не сможет?
> про сетевые взаимодействия - НЕТ
Не знает ничего про tcp/ip, http, websocket'ы? Рил?
> про архитектуру железа - НЕТ
> про алгоритмические приёмы программирования - НЕТ,
> про математические модели - НЕТ
Тебе часто в веб разработке пригождается? А сишарп петушня на это все ответит?
> Про базовые элементы языков программирования (типа асинков, корутин, продолжений, стеку/куча, сборка мусора итд) - НЕТ.
Ты реально думаешь что синьор это точно не знает и точно не выучит изучая новый язык?
Ты вообще понимаешь что синьоров по ЯП ебут по-минимуму на собесах, там вопросы будут про архитектуру приложений, спроектировать твиттер попрросят. Собесы это чаще всего пилить прохладные истории как ты проектировал системы, а так же задавать вопросы по архитектуре. Синьор отличается от мидла насмотренностью. Он просто дохуя видел, разные дизайн решения и хорошие и плохие.
Если ПХП-синьор пойдет собеситься на джаву, и спиздит что все уже работал на джаве, есть шанс что он просто ответит 2 вопроса по языку и дальше они час будут твиттер проектировать
Нет. Джуниор это разработчик нуждающийся в менторстве, постоянно задающий вопросы и способный решать чисто задачи из техдолга, но не срочные и не критические.
Мидл это рабочая лошадка, решает любые задачи по ТЗ.
Синьор это уже тот кто уже технические\архитектурные решения принимает и у которого есть зона ответственности. И подчиненные, как правило.
Это не про технические навыки, а про место в иерархии в коллективе.
> знаний у него про ОС - НЕТ
Это каких? Линукс настроить не сможет?
> про сетевые взаимодействия - НЕТ
Не знает ничего про tcp/ip, http, websocket'ы? Рил?
> про архитектуру железа - НЕТ
> про алгоритмические приёмы программирования - НЕТ,
> про математические модели - НЕТ
Тебе часто в веб разработке пригождается? А сишарп петушня на это все ответит?
> Про базовые элементы языков программирования (типа асинков, корутин, продолжений, стеку/куча, сборка мусора итд) - НЕТ.
Ты реально думаешь что синьор это точно не знает и точно не выучит изучая новый язык?
Ты вообще понимаешь что синьоров по ЯП ебут по-минимуму на собесах, там вопросы будут про архитектуру приложений, спроектировать твиттер попрросят. Собесы это чаще всего пилить прохладные истории как ты проектировал системы, а так же задавать вопросы по архитектуре. Синьор отличается от мидла насмотренностью. Он просто дохуя видел, разные дизайн решения и хорошие и плохие.
Если ПХП-синьор пойдет собеситься на джаву, и спиздит что все уже работал на джаве, есть шанс что он просто ответит 2 вопроса по языку и дальше они час будут твиттер проектировать
SELECT id FROM table WHERE link = first-test-page
Я выяснил, что не работает из-за дефисов. Как пофиксить?
ставь через нижнее подчеркивание
> Синьор это уже тот кто уже технические\архитектурные решения принимает и у которого есть зона ответственности. И подчиненные, как правило.
Это вопрос определения. И да, "подчиненные = сеньор" это крайне всратое разделение, с этой точки зрения любой менеджер это сеньор, не путай техническую вертикаль/иерархию с менеджерской, они перпендикулярны.
Соответственно, под "сеньором" будем понимать человека, который условно "отлично" разбирается в технике, в том числе и в сложных областях, типа архитектуры или особенносстей рантайма.
И под высказыванием, что phpшный сеньор в других языках - не сеньор мы понимаем то, что "глубокое знание php" и, к примеру, "глубокое знание java" подразумевают очень разные компетенции, причём java требует их кратно больше.
Далее по пунктам, их кстати писал не я, но я согласен со многими из них
> Это каких? Линукс настроить не сможет?
Про юникс сокеты, сисколлы, прерывания, механизмы выделения и очистки памяти точно не в курсе. Как полагаю и не знает про systemd и прочие подсистемы, так как php особо и не требует работы с ними.
> Не знает ничего про tcp/ip, http, websocket'ы? Рил?
Про вебсокеты скорее всего нет, поскольку php сам не умеет с ними работать. Думаю, он умеет ставить какую-нибудь проксю, которая умеет поддерживать соединения и тем или иным способом вызывать php, мы их тут уже много обсуждали.
Кстати, не уверен, что php'шники реально способны использовать все фичи http2, те же туннели.
> Тебе часто в веб разработке пригождается? А сишарп петушня на это все ответит?
Архитектура и особенности железа точно решают на серьезных объёмах трафика, где одна специфичная инструкция может процентов на 20 ускорить алгоритм. Но поскольку на php никто не пишет ни серьезную инфраструктуру, ни реалтайм системы, ни действительно лоу-лейтенси сервера, ни высокочастотный трейдинг - то php'шникам это действительно не нужно.
> про алгоритмические приёмы программирования - НЕТ,
Если ты перекладываешь круды, то нет, не потребуется. А если пишешь более или менее серьезные вещи, то какая-нибудь теория графов нет-нет да пригождается, хотя бы в виде банальных методов обхода дерьевев. Я неиронично считаю, что если ты не владеешь базовыми алгоритмами структурами данных, то программистом ты себя называть не можешь, максимум формошлёпом, но это к слову.
> про математические модели - НЕТ
Тут я отчасти с тобой соглашусь, но мне скорее непонятно, что чел имел ввиду. Сама по себе математика, а особенно информатика иногда пригождаются, но опять же, не формошлёпам.
> Ты реально думаешь что синьор это точно не знает и точно не выучит изучая новый язык?
Если мы не будем выдумывать и примем за определение то, то php'шный сеньор знает только php, поскольку про другие языки мы ничего не говорили, то да. Программист на одном языке не знает концепций из других языков.
И тут такой момент, что многие из них похожи. Поработав с промисами, ты легко перейдёшь на асинки. Потюнив один гц ты в целом более или менее переиспользуешь свой опыт, когда будешь тюнить другой гц. И так далее.
Php'шный же программист не сталкивался ни с чем из этого! Соответственно да, ему придётся всё это учить с нуля. Об этом и речь. Сможет или нет выучить - это вопрос десятый скорее всего не осилит и вернется обратно в тепленькое
> Синьор отличается от мидла насмотренностью. Он просто дохуя видел, разные дизайн решения и хорошие и плохие.
Опять же, php'шник не мог участвовать в реальной разработке реалтайм систем, соответственно его "насмотренность" ограничена только пыхой. То есть сильно ограничена.
> Если ПХП-синьор пойдет собеситься на джаву, и спиздит что все уже работал на джаве, есть шанс что он просто ответит 2 вопроса по языку и дальше они час будут твиттер проектировать
Это фантазии. В реальности его спросят про то, как работает сборка мусора и чем cms отличается от parallel gc и всё, приплыли, первый вопрос на любом собесе на сеньора, отлично фильтрует долбоёбов.
> Синьор это уже тот кто уже технические\архитектурные решения принимает и у которого есть зона ответственности. И подчиненные, как правило.
Это вопрос определения. И да, "подчиненные = сеньор" это крайне всратое разделение, с этой точки зрения любой менеджер это сеньор, не путай техническую вертикаль/иерархию с менеджерской, они перпендикулярны.
Соответственно, под "сеньором" будем понимать человека, который условно "отлично" разбирается в технике, в том числе и в сложных областях, типа архитектуры или особенносстей рантайма.
И под высказыванием, что phpшный сеньор в других языках - не сеньор мы понимаем то, что "глубокое знание php" и, к примеру, "глубокое знание java" подразумевают очень разные компетенции, причём java требует их кратно больше.
Далее по пунктам, их кстати писал не я, но я согласен со многими из них
> Это каких? Линукс настроить не сможет?
Про юникс сокеты, сисколлы, прерывания, механизмы выделения и очистки памяти точно не в курсе. Как полагаю и не знает про systemd и прочие подсистемы, так как php особо и не требует работы с ними.
> Не знает ничего про tcp/ip, http, websocket'ы? Рил?
Про вебсокеты скорее всего нет, поскольку php сам не умеет с ними работать. Думаю, он умеет ставить какую-нибудь проксю, которая умеет поддерживать соединения и тем или иным способом вызывать php, мы их тут уже много обсуждали.
Кстати, не уверен, что php'шники реально способны использовать все фичи http2, те же туннели.
> Тебе часто в веб разработке пригождается? А сишарп петушня на это все ответит?
Архитектура и особенности железа точно решают на серьезных объёмах трафика, где одна специфичная инструкция может процентов на 20 ускорить алгоритм. Но поскольку на php никто не пишет ни серьезную инфраструктуру, ни реалтайм системы, ни действительно лоу-лейтенси сервера, ни высокочастотный трейдинг - то php'шникам это действительно не нужно.
> про алгоритмические приёмы программирования - НЕТ,
Если ты перекладываешь круды, то нет, не потребуется. А если пишешь более или менее серьезные вещи, то какая-нибудь теория графов нет-нет да пригождается, хотя бы в виде банальных методов обхода дерьевев. Я неиронично считаю, что если ты не владеешь базовыми алгоритмами структурами данных, то программистом ты себя называть не можешь, максимум формошлёпом, но это к слову.
> про математические модели - НЕТ
Тут я отчасти с тобой соглашусь, но мне скорее непонятно, что чел имел ввиду. Сама по себе математика, а особенно информатика иногда пригождаются, но опять же, не формошлёпам.
> Ты реально думаешь что синьор это точно не знает и точно не выучит изучая новый язык?
Если мы не будем выдумывать и примем за определение то, то php'шный сеньор знает только php, поскольку про другие языки мы ничего не говорили, то да. Программист на одном языке не знает концепций из других языков.
И тут такой момент, что многие из них похожи. Поработав с промисами, ты легко перейдёшь на асинки. Потюнив один гц ты в целом более или менее переиспользуешь свой опыт, когда будешь тюнить другой гц. И так далее.
Php'шный же программист не сталкивался ни с чем из этого! Соответственно да, ему придётся всё это учить с нуля. Об этом и речь. Сможет или нет выучить - это вопрос десятый скорее всего не осилит и вернется обратно в тепленькое
> Синьор отличается от мидла насмотренностью. Он просто дохуя видел, разные дизайн решения и хорошие и плохие.
Опять же, php'шник не мог участвовать в реальной разработке реалтайм систем, соответственно его "насмотренность" ограничена только пыхой. То есть сильно ограничена.
> Если ПХП-синьор пойдет собеситься на джаву, и спиздит что все уже работал на джаве, есть шанс что он просто ответит 2 вопроса по языку и дальше они час будут твиттер проектировать
Это фантазии. В реальности его спросят про то, как работает сборка мусора и чем cms отличается от parallel gc и всё, приплыли, первый вопрос на любом собесе на сеньора, отлично фильтрует долбоёбов.
>>462938
>>463054
Я придумал заебись аналогию. Представим, что программист - это водитель. В этом случае с++ программист это допустим гонщик на ралли, джавист возит фуры, js-ник таксует и так далее. А php-программист - это водитель в метро.
Да, все водители делают нечто общее, жмут на тормоз и газ. Но при этом "phpшнику" не нужно знать пдд, не нужно знать устройство двигателя (потому что чинит его не он), не нужно думать о топливе и так далее и тому подобное. Да, ему проще жить, но эта "простота" и ограничивает его, он сидит себе под землёй и слабо представляет себе те сложности, с которыми сталкиваются водители в реальном мире.
И теоретически машинист метро может научиться возить фуры, только ему придётся выучить пдд, научиться обслуживать машину, планировать маршрут, следить за топливом и так далее. Ему будет очень тяжело.
Об этом и речь.
1) выравнивание кода сделано неправильно
2) htmlspecialchars тут не нужен, читай урок про правильную защиту от XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md - htmlspecialchars надо использовать в шаблоне, а не при разборе POST-данных.
Те, кто так пишут, либо троллят в надежде разжечь тут холивар, либо просто у них какие-то комплексы и они хотят показать свою элитность тем, что выучили бесполезный язык с 41 вакансией на всю Россию. В любом из этих случаев они не соответствуют теме треда и не нужны тут.
Плюс, это тред для начинающих. Для начинающего язык, для которого не надо изучать кучу лишней теории, и на который есть много вакансий, очевидно является плюсом, потому что они хотят работать в индустрии и получать практический опыт, параллельно изучая другие вещи.
Ты сам хоть раз профайлинг делал? Я делала и знаю, сколько времени может занимать инициализация фреймворка с оптимизациями для продакшена (если память не изменяет - порядка миллисекунд). Если убрать всю инициализацию, например за счет использования preload или за счет перехода на неумирающую модель (да, PHP может и так), то особого выигрыша не будет.
А почему так много языков? Это из-за того, что все они по факту оказались плохими или ты не их осилил?
Если бы только PHP был плохим, а другие языки хорошие, то ты бы перешел с него на идеальный язык и писал бы только на нем и тебе некогда было бы тратить время на неидеальные языки, верно? Ведь программисту нужно решать задачи бизнеса наиболее эффективным способом, а не тратить время на изучение ненужных языков. Или ты не способен решать полезные задачи, а умеешь только изучать языки программирования?
аноны, как в php сделать проверку большого количества условий в 1 строчку или в сжатом виде? пример:
if ($_GET['test'] == 1 || $_GET['test'] == 3 || $_GET['test'] == 9 || $_GET['test'] == 17 || $_GET['test'] == 23 || $_GET['test'] == 47 || $_GET['test'] == 'hui' || $_GET['test'] == 'pizda')
мне кажется что это неправильно и наверняка есть какой-то способ где можно просто через запятую указать нужные данные для проверки
>Асинхронность ухудшает код. Асинк\авейты смотрятся хуево и ты неизбежно мешаешь бизнес логику с инфраструктурной. Есть целый класс задач где она не нужна, и их можно на пыхе делать.
Это в пхп ли говорить красиво/некрасиво. Дело не в красоте, в том виде в каком пыха сейчас везде используется nginx -> php-fpm -> в отдельном потоке провернуть php код -> умереть тут да асинхронность на хуй не нужна. Асинхронность нужна когда у тебя приложение запущено и постоянно работает, когда несколько клиентов одновременно используют приложение и есть много блокировок i/o. Вот накидаю простой пример на расте, попробую отправить по 30 запросов на сторонее апи ну типа, просто на яндекс постучусь чтобы заблокировать i/o ожиданием ответа из-за чего следующая итерация цикла будет с задержкой на время ожидание и это время пройдет вхолостую. Асинхронность же помогает выполнить следующую итерацию сразу и после цикла всех дождаться это я упрощаю
1 пик - синхронный код All time: 11843 ms
2 пик - асинхронность, 545 ms
А еще всякие запросы к базам данных, брокерам и прочая хуйня в рантайме, асинхронность позволяет упростить жизнь с точки зрения эффективного потребления ресурсов.
Как у пехопешников с фрилансом? Реально ли заработать на еду в данный момент в этой стране?
>Ты сам хоть раз профайлинг делал?
ну да, xdebug с опцией профайлинга, потом получившиеся файлы смотришь прогой kcachegrind
>сколько времени может занимать инициализация фреймворка
фреймворки разные бывают, мань. минималистичный silex нихера не весит. а symfony уже потяжелее
>А почему так много языков?
Просто нравится их изучать
> оказались плохими
Любой язык ситуативно плох или хорош, универсальных не бывает.
Однако бывают конкуренты в заданных областях, где преимущество одного ну очень явное по отношению к другому. Например у компилируемого по отношению к некомпилируемому.
>ты бы перешел с него на идеальный язык и писал бы только на нем
Если работать только в определённой нише с определённым типом задач - то легко. Например если бы пилил вебню - взял бы феникс ( phoenixframework.org ) и в ус не брякал. Но сейчас пишу на расте потому что проект такой.
>Ведь программисту нужно решать задачи бизнеса наиболее эффективным способом, а не тратить время на изучение ненужных языков.
Я не знаю зачем вы по утрам просыпаетесь если в вас нет интереса изучить что-то новое. Интересы бизнеса - как правило продажи. Может быть вам повезёт и вы станете одним из приближённых к руководству с правом написания ERP под ключ (ситуация невероятная потому что тут на самом покупается что-то готовое и адаптируется). Всё остальное находится вне коммерческой попсы. Либо работаете в R&D отделе крупной фирмы и вопросы коммерции вас не касаются. Либо пилите дома свой проект на энтузиазме.
>Или ты не способен решать полезные задачи, а умеешь только изучать языки программирования?
define 'полезные задачи'
Кстати, представляешь что это такое - работать в нормальной
инженерной компании? Ты получаешь свою ежемесячную зп и не паришься, её хватает чтобы ужинать в ресторане не глядя на цены. А на работе занимаешься инженерными разработками. Не аутсорсингом кабанчиковых заёбов. Не сращиванием клиентов как ты привык это делать на фрилансе. А чисто инженерной проблемой. Например машинным зрением. Или разбором генома. Или реализацией архиватора. То есть такой, где нужны мозги. Вот для пхпшников таких вакансий просто нет, у них сплошная потогонка с кабаном-погонщиком. Для питонистов-рубистов ситуация получше, но всё равно не то. У кложуристов эликсирщиков, системщиков шансы попасть в такую компанию достаточно высоки.
>А почему так много языков?
Просто нравится их изучать
> оказались плохими
Любой язык ситуативно плох или хорош, универсальных не бывает.
Однако бывают конкуренты в заданных областях, где преимущество одного ну очень явное по отношению к другому. Например у компилируемого по отношению к некомпилируемому.
>ты бы перешел с него на идеальный язык и писал бы только на нем
Если работать только в определённой нише с определённым типом задач - то легко. Например если бы пилил вебню - взял бы феникс ( phoenixframework.org ) и в ус не брякал. Но сейчас пишу на расте потому что проект такой.
>Ведь программисту нужно решать задачи бизнеса наиболее эффективным способом, а не тратить время на изучение ненужных языков.
Я не знаю зачем вы по утрам просыпаетесь если в вас нет интереса изучить что-то новое. Интересы бизнеса - как правило продажи. Может быть вам повезёт и вы станете одним из приближённых к руководству с правом написания ERP под ключ (ситуация невероятная потому что тут на самом покупается что-то готовое и адаптируется). Всё остальное находится вне коммерческой попсы. Либо работаете в R&D отделе крупной фирмы и вопросы коммерции вас не касаются. Либо пилите дома свой проект на энтузиазме.
>Или ты не способен решать полезные задачи, а умеешь только изучать языки программирования?
define 'полезные задачи'
Кстати, представляешь что это такое - работать в нормальной
инженерной компании? Ты получаешь свою ежемесячную зп и не паришься, её хватает чтобы ужинать в ресторане не глядя на цены. А на работе занимаешься инженерными разработками. Не аутсорсингом кабанчиковых заёбов. Не сращиванием клиентов как ты привык это делать на фрилансе. А чисто инженерной проблемой. Например машинным зрением. Или разбором генома. Или реализацией архиватора. То есть такой, где нужны мозги. Вот для пхпшников таких вакансий просто нет, у них сплошная потогонка с кабаном-погонщиком. Для питонистов-рубистов ситуация получше, но всё равно не то. У кложуристов эликсирщиков, системщиков шансы попасть в такую компанию достаточно высоки.
Ну я тебе скажу, что xdebug самый плохой выбор, так как он вносит большие искажения, особенно когда много вызовов крохотных функций. То есть, время с профайлером получается в 1,5-2 раза больше чем без профайлера. Я пользовался, например, xhprof и blackfire.
>>463207
> Например машинным зрением.
Насколько я знаю, работа с машинным зрением обычно подразумевает "взять open source библиотеку и крутить параметры, пока не заработает". Или ты, например, на полном серьезе будешь с нуля разрабатывать архитектуру нейросети? Здесь уже не программирование нужно, а математика + изучение научных работ. Я сомневаюсь, что эликсирщик на такое способен.
> Или реализацией архиватора
Какая может быть задача, чтобы под нее пришлось разрабатывать свой архиватор при наличии огромного количества существующих? Это не фантазии ли твои? И я не вижу, как знание эликсира поможет в разработке архиватора. По моему, здесь гораздо лучше поможет изучение принципов работы существующих архиваторов и теории по ним.
И забавно, что ты тут приводишь Питон или Руби. Программирование на них не требует больших знаний, чем программирование на PHP. И дурных практик там не меньше, например на Питоне очень плохо с поддержкой тайп хинтов во многих библиотеках, mypy на практике выводит много лишних предупреждений, есть проблемы с неединообразным именованием функций во многих библиотеках. В Руби вообще применяется monkey patching.
>Либо работаете в R&D отделе крупной фирмы и вопросы коммерции вас не касаются.
Для этого уже нужны мозги иногда. Хотя это и жалкое подобие нормальной науки. И это уже не к кодовым макакам.
>Ты получаешь свою ежемесячную зп и не паришься, её хватает чтобы ужинать в ресторане не глядя на цены. А на работе занимаешься инженерными разработками.
Если бы ты занимался инженерными разработками, твоей зп не хватало бы на ужин в столовой.
>А чисто инженерной проблемой. Например машинным зрением.
Лол, этот шарит >>463247 .
>Это вопрос определения. И да, "подчиненные = сеньор" это крайне всратое разделение, с этой точки зрения любой менеджер это сеньор
Нет. Потому что менеджер не принимает технические и архитектурные решения. Менеджер может быть сеньором, если у него есть подчиненные менеджеры.
Как раз по подчиненным и нужно мерить. Ты синьор если ты руководишь людьми.
И если тебе доверили управление людьми и ты в этом шаришь, нзачит у тебя достаточно навыка чтобы освоить базовые тулзы. Это все мелочи. Архитектурные навыки это то что получить очень тяжело.
Чтобы тебе просто доверили это на боевом проекте ты должен заработать себе огромное доверие, благодаря которому ты и становишься синьором.
П твоей логике тогда синьор на на Go будет джуном в пыхе и джаве потому что в Go нет полноценного ООП, а на собесах у джунов даже это спрашивают.
А еще на го нет дженериков, поэтому при проходе собеса на java гошник соснет и не получит даже джуна.
> "подчиненные = сеньор" это крайне всратое разделение
Как раз по подчиненным и нужно мерить, потому что в индустрии происходит девальвация титулов. Галеры апают людей по левелам и заводят 22летних синьоров чтобы бустить им эго. А еще ты говоришь заказчику что над его проектом работает синьор.
В то время как крупные компании вроде гугла вводят бесконечные табели о рангах чтобы их ТУПЫЕ РОЗОВОЛОСЫЕ ТРАНС ПЕЗДЫ не засудили за то что у них та же позиция что и у чела слева от них а зэпка меньше. Поэтому им дадут level 2 а тем level 4
Фриланс сдох ещё лет 10 назад. Сегодня там ни денег, ни вменяемых заказчиков.
Если нравится долбиться с требовательными нищими баранами за месячную ставку курьера из Яндекса, то велкам. Я лучше нормальную работу найду.
>Какая может быть задача, чтобы под нее пришлось разрабатывать свой архиватор при наличии огромного количества существующих?
Это был пример. Подставь своё.
>Питон или Руби. Программирование на них не требует больших знаний, чем программирование на PHP
Пыху ругают за то что в силу её эклетичности в ней нужно знать много фактов вместо того чтобы знать и уметь применять относительно немного принципов. Так что аргумент не принят.
>>463247
>В Руби вообще применяется monkey patching
В руби манки патчинг доступен как инструмент, но не обязателен. Вообще с метапрограммированием есть правило: его много в фреймворке и мало в бизнес-части.
Манки-патчинг офигенно удобен для тестирования поведения приложения в прошлом или будущем (гем timecop емнип). В других языках мне этого не хватало.
>Если бы ты занимался инженерными разработками, твоей зп не хватало бы на ужин в столовой.
Это зависит от компании. А компания зависит от твоих скилов.
>Для этого уже нужны мозги иногда. ... И это уже не к кодовым макакам.
Ну да. Но при этом если ты работаешь с пхп - у тебя шансов туда попасть ровно ноль. С другими языками шансы выше. Технология с которой ты работаешь изменяет сознание.
RewriteRule ^([-\w]+)?$ index.php?p1=$1
Пропустит какую-то заразу в в php? Входящие данные заливаются в базу через pdo, выводятся и экранируются через smarty, цифры отдельно фильтруются, но все же...
define("url1", $url1 = 2);
echo url1;
Выводит 2
Разве не должно быть true?
Да и хер бы с ним. Понятно что профайлер замедляет. Меня интересуют самые частые и самые медленные функции, то есть их относительная доля, а не абсолютное время.
У тебя же не ==
>как работает сборка мусора
Там порою достаточно задать вопрос: Почему объект меняется в void методе.
Я на собесах порой задаю этот вопрос так называемым тимлидам дабы понять уровень его компетенции и не отвечают многие, лул.
Почитай про MVC.
Когда разберёшься с принципом, то сделай какую-нибудь реализацию - либо сам, либо подсмотри во фреймфорках.
А PhD у тебя есть?
>>463313
Лолчто блять, сразу видно пехапешников, за неимением технических компетенций, у них автоматом сеньор=подчиненные.
Ещё раз, сеньор - это тот, кто отлично шарит в сложных технических вопросах, например в архитектуре. Тот, у кого есть подчиненные - это лид. Лид не обязан быть сеньором, сеньор не обязан быть лидом.
Лид может делегировать задачи на проектирование системы сеньору, а сам управлять командой, решать задачи по коммуникации и так далее.
> П твоей логике тогда синьор на на Go будет джуном в пыхе и джаве потому что в Go нет полноценного ООП, а на собесах у джунов даже это спрашивают.
Мою мысль ты уловил, в целом так и есть. Но всё же не джуном, а миддлом. Но точно "сеньор го" != "сеньор джава", потому что у джавового рантайма дофига тонкостей, без знания которых, ты не сможешь к примеру, тюнить jvm под определенные профили нагрузки. И гошному сеньор придется потратить годик, чтобы разобраться в этих вопросах. А php'шному сеньору придется потратить лет пять, потому что он не будет разбираться во множестве других вопросов, в которых разбираются и гошники, и джависты.
>>463143
> Вы реально дураки. Как ты можешь писать "все PHP-ники не знают X" если ты скорее всего общался с 1-2 PHP-шниками, а не со всеми сотнями тысяч их.
Ещё раз, PHP не подразумевает к примеру работы с гц, соответственно, мы будем считать, что php'шники не умеют с ним работать, если они не знают ещё и других ЯП. С этого аргумента мы и начали, что пыха как язык ограничивает программиста, не давая ему получить опыт решения ряда задач, с которыми сталкиваются программисты на других ЯПах.
Большое тебе спасибо, дорой друг.
А то.
Есть два разных подхода для вката - или делаешь велосипеды, мучаешься, смотришь как делали другие и просветляешься.
Либо сходу начинаешь использовать фреймворки, имеешь меньше проблем, но считается что так хуже будешь понимать как работает вся система в целом.
Попробуй повелосипедить, раз пугает такое количество терминов.
Потом, если не забросил, изучай новые фичи и добавляй.
Есть какой-то универсальный способ или надо полагаться на шаблонизатор?
Экранирование должно всегда происходить на самой финальной части, иначе слишком велик шанс, что ты что-то экранируешь дважды и получится жопа.
Если ты возвращаешь целиком html страницы - то да, экранировать должен шаблонизатор, если умеет.
Ну то есть, ты даже не представляешь себе, какие бывают задачи, а опираешься на фантазии. Те сложные задачи, о которых ты мечтаешь, но не знаешь, как правило, разрабатывается не в коммерческих компаниях, а в академической среде. Например, (древние) алгоритмы архивации вроде LZ77/78 - первоначально описаны в научных работах Лемпеля и Зива. Коды Хаффмана - тоже научная работа. Если ты возьмешь современные технологии вроде нейросетей, то опять же все открытия описываются в научных работах. Архитектура процессоров RISC была разработана в университете как эксперимент.
Академия идет впереди коммерческих компаний, для примера, Тьюринг написал свою знаменитую работу по проблеме останова в 30-х годах, когда еще ни одной ЭВМ не существовало.
Бизнес, как правило не финансирует такие работы, так как непонятен выхлоп и переспективы. Те же коды Хаффмана придуманы в 50-х годах, когда они мало кому были нужны. Только гиганты вроде Гугла могут финансировать такие работы (за их счет велись некоторые работы по нейросетям, например, для машинного перевода).
Возьми Телеграм, например. Это бизнес, но что они изобрели? Они просто сделали удачный продукт и интегрировали множество open source кода. Они не изобретали алгоритмы сжатия видео, например.
Инженеры, как правило, занимаются тем, что берут удачные исследования ученых и адаптируют их к коммерческому использованию. Ну например, протоколы сотовой связи вряд ли придуманы с нуля, а опираются на готовые исследования.
Поэтому если ты хочешь реально интересные и передовые задачи, то бросай свой Эликсир и иди в аспиранты, или не знаю, куда надо идти чтобы заниматься наукой. Правда, там могут платить не так хорошо, как хотелось бы. Или в Гугл, если сможешь пробиться в R&D, а не на перепиливание админки рекламодателя под material design.
> Манки-патчинг офигенно удобен для тестирования поведения приложения в прошлом или будущем (гем timecop емнип). В других языках мне этого не хватало.
Это не удобство, это вынужденная необходимость из-за того, что в Руби все на статических вызовах и приходится прибегать к костылям, чтобы эти вызовы мокать.
Блин. Профайлер искажает результаты неравномерно, добавляя фиксированный оверхед в каждый вызов, так, что в коротких функциях относительный оверхед намного больше, чем в длинных.
То есть условно, в реальности у тебя 1000 вызовов маленькой функции быстрее, чем 1 большая, а с профайлером может получиться наоборот.
Этого недостатка лишены семплирующие профайлеры, которые N раз в секунду делают снапшот стека, но я не работал с такими для PHP и не знаю, есть ли они вообще.
Надеюсь, ты не тот человек, который 16 языков изучил, включая Эликсир.
Статический вызов это вызов функции без создания объекта. Например:
res = Net::HTTP.get_response(uri)
Здесь жестко захардкожен вызов определенной функции и без манки-патчинга ты не можешь перехватить его. В других языках вроде PHP HTTP-клиент просто передается как объект и его можно подменить на мок без всяких патчей.
Ты пытаешься подать то, что для изучения других языков надо больше изучить и потратить больше времени, как преимущество. Но это недостаток, так как тебе надо потратить больше времени, прежде чем ты сможешь найти работу и начать получать опыт.
Если у человека задача показать в приложении курьеру информацию о заказе и точке доставки, зачем ему изучать алгоритмы архивации или особенности сборщика мусора? Давай тогда без 20 лет подготовки с изучением всей истории computer science к компьютеру не допускать.
Ты, прежде чем поменять цвет кнопки на сайте, идешь в художественный колледж? Или просто берешь и меняешь? Так же и PHP разработчик, берет и решает задачу, используя данные ему инструменты.
> Лолчто блять, сразу видно пехапешников, за неимением технических компетенций, у них автоматом сеньор=подчиненные.
А ты походу джунятина которая думает что чтобы стать синьором нужно знать тонкости работы ЯП, ОС, архитектуру кудахтера и прочее. Велико же будет твое разочарование.
Джун-выпускник топ ВУЗа будет знать куда больше о компиляторе, сборке мусора, алгоритмах и тд, а будет джуном и будет зарабатывать меньше скуфа который круды 10 лет пилит. О как.
Ну кстати я полностью одобряю твою тягу к изучению этих концептов, но это не то что сделает тебя помидором.
>Мою мысль ты уловил, в целом так и есть. Но всё же не джуном, а миддлом
Почему? Ему зададут вопросы по ООП и паттернам, а он только на го писал и про это не знает. А вкатун с курсов скилфэктори знает, там ему дядя с хвостиком пояснил. Получается даже не джун?
Хотя мне например понятно что гошник будет знать ООП и выберет го именно потому что там этой хуйни нет: С чем его и поздравляю.
> язык ограничивает программиста, не давая ему получить опыт решения ряда задач, с которыми сталкиваются программисты на других ЯПах.
Это ты максимально комплемент пыхе сделал, на самом деле. Это было бы пиздато если бы это было так, но это не так.
>Статический вызов это вызов функции без создания объекта. Например:
>
>res = Net::HTTP.get_response(uri)
а, ты про это.
ну это просто вызов функций. в примере Net::HTTP в примере играет роль неймспейса, но суть та же.
но как из этого следует, что "манки-патчинг - это вынужденная необходимость"? напоминаю, решение о введении манки-патчинга принималось Матцом в то же время, когда и решение о введении "статических методов" как ты их назвал - на этапе проектирования языка. это в пыхе могло быть так, что сначала появился статический вызов от одних авторов, потом через семь лет другая команда добавила патчинг. а в руби это запланированная особенность языка.
>вызов функции без создания объекта
Кстати вот тоже неправильно. Объект там создаётся на этапе компиляции кода.
https://github.com/ruby/net-http/blob/196f3d70f9ce154dc63a86a2cdbf1aec4df4982e/lib/net/http.rb#L397 - здесь создаётся объект Net::HTTP (синглтон)
https://github.com/ruby/net-http/blob/196f3d70f9ce154dc63a86a2cdbf1aec4df4982e/lib/net/http.rb#L494 - здесь объявляется метод этого объекта
В Руби всё есть объект. В том смысле что на всё можно навешать методов.
Вернёмся к моему примеру с водителями. Если всё, что тебе нужно - это возить людей между станциями метро, то тогда да, нетребовательность к знанию тобой пдд это преимущество профессии машиниста. Но при этом если (а рано или поздно это произойдёт, потому что жизнь сложная штука) тебе потребуется отвезти клиента не с Охотного ряда на Сокольники, а куда-нибудь в Зеленоград, то ты моментально охуеешь и если и сделаешь это, то очень плохо.
Так и тут, пока тебе нужно красить кнопки в html, пыха будет решать твои задачи и ты будешь счастлив. Но когда-нибудь тебе потребуется сделать лайв чат или может быть даже видеочат, сервер для онлайн игры или что-то такое и моментально выяснится, что ты ничего особо не знаешь и не умеешь, за пределами того, как красить кнопки в html.
Поэтому это "преимущество незнания" - мнимое, скорлупа этого яйца защищает тебя от неблагоприятной внешней среды, но она же и ограничивает твой рост и если ты её не разобьешь, то так и останешься на уровне цыплёнка.
>>464042
> А ты походу джунятина которая думает что чтобы стать синьором нужно знать тонкости работы ЯП, ОС, архитектуру кудахтера и прочее. Велико же будет твое разочарование.
Я как раз перешагнул рубежи и синьора и лидства очень давно, когда ещё называлось по-другому. И с высоты своего опыта как раз могу тебе сказать, что лычки в разных конторах разные, я видел и такие, где сеньорами называют тех, кто больше года продержался.
В реальности есть две разные траектории развития, одна - техническая, вторая - менеджерская. Одна про программирование, вторая про людей. И как бы мы их не называли, они будут про разный набор навыков.
Я говорю про "топ техника" (которого я и называю сеньором), "топ техник" джавист и "топ техник php" это две больше разницы. А вот "топ менеджер джавист" и "топ менеджер php" кстати будут очень похожи, потому что оба руководят людьми, а не ЯПами.
> Почему? Ему зададут вопросы по ООП и паттернам, а он только на го писал и про это не знает. А вкатун с курсов скилфэктори знает, там ему дядя с хвостиком пояснил. Получается даже не джун?
Вкатун с курсов будет знать только теоретически, а гошник так или иначе будет с такими паттернами знаком, пусть и немного в другом виде. Но как раз из-за того, что "ооп" в го и ооп в джаве это разные вещи, 1 к 1 сеньор гошник в сеньор джависта не смапится, пока не перекуётся. Но перековаться ему будет сильно легче, чем "голому" вкатуну, потому что будет, с чем проводить аналогии, это старт не с нуля, а с, ну пусть будет, 50%.
Вернёмся к моему примеру с водителями. Если всё, что тебе нужно - это возить людей между станциями метро, то тогда да, нетребовательность к знанию тобой пдд это преимущество профессии машиниста. Но при этом если (а рано или поздно это произойдёт, потому что жизнь сложная штука) тебе потребуется отвезти клиента не с Охотного ряда на Сокольники, а куда-нибудь в Зеленоград, то ты моментально охуеешь и если и сделаешь это, то очень плохо.
Так и тут, пока тебе нужно красить кнопки в html, пыха будет решать твои задачи и ты будешь счастлив. Но когда-нибудь тебе потребуется сделать лайв чат или может быть даже видеочат, сервер для онлайн игры или что-то такое и моментально выяснится, что ты ничего особо не знаешь и не умеешь, за пределами того, как красить кнопки в html.
Поэтому это "преимущество незнания" - мнимое, скорлупа этого яйца защищает тебя от неблагоприятной внешней среды, но она же и ограничивает твой рост и если ты её не разобьешь, то так и останешься на уровне цыплёнка.
>>464042
> А ты походу джунятина которая думает что чтобы стать синьором нужно знать тонкости работы ЯП, ОС, архитектуру кудахтера и прочее. Велико же будет твое разочарование.
Я как раз перешагнул рубежи и синьора и лидства очень давно, когда ещё называлось по-другому. И с высоты своего опыта как раз могу тебе сказать, что лычки в разных конторах разные, я видел и такие, где сеньорами называют тех, кто больше года продержался.
В реальности есть две разные траектории развития, одна - техническая, вторая - менеджерская. Одна про программирование, вторая про людей. И как бы мы их не называли, они будут про разный набор навыков.
Я говорю про "топ техника" (которого я и называю сеньором), "топ техник" джавист и "топ техник php" это две больше разницы. А вот "топ менеджер джавист" и "топ менеджер php" кстати будут очень похожи, потому что оба руководят людьми, а не ЯПами.
> Почему? Ему зададут вопросы по ООП и паттернам, а он только на го писал и про это не знает. А вкатун с курсов скилфэктори знает, там ему дядя с хвостиком пояснил. Получается даже не джун?
Вкатун с курсов будет знать только теоретически, а гошник так или иначе будет с такими паттернами знаком, пусть и немного в другом виде. Но как раз из-за того, что "ооп" в го и ооп в джаве это разные вещи, 1 к 1 сеньор гошник в сеньор джависта не смапится, пока не перекуётся. Но перековаться ему будет сильно легче, чем "голому" вкатуну, потому что будет, с чем проводить аналогии, это старт не с нуля, а с, ну пусть будет, 50%.
>Вкатун с курсов будет знать только теоретически, а гошник так или иначе будет с такими паттернами знаком, пусть и немного в другом виде.
Дык основная разница - не в "знать", а в "уметь сделать". Потому что теория всегда отличается от реальности, и ты либо умеешь с этим отличием справляться либо нет. Вообще это пожалуй есть причина успеха в индустрии - не иметь готовый ответ, а уметь его находить. Потому что завтра будут новые вопросы. Курсы в этом смысле могут и не помочь.
Курсы конечно не помогут. Но опыт решения примерно тех же задач обычно помогает, получается его переиспользовать. Мне неоднократно случалось переходить с одного языка на другой и каждый раз это было не совсем с нуля.
И изначально мы начали с того, что в случае php во большому ряду навыков это будет практически с нуля, в этом и проблема. В отличие от перехода go -> java, где конечно всё в деталях по-разному, поэтому мгновенно перейти не получится, но всё же похожего достаточно, чтобы переход не был с нуля.
Лишняя деталь реализации, которую решили не показывать. Кмк. Либо чтобы ты не залочил его открытием, и система могла его удалить. Перемещай файл куда тебе надо и делай что тебе надо.
>Вернёмся к моему примеру с водителями
Ну здесь ты рил хуйню высрал. Окей давай так. Допустим разработчик на C++ знает больше потому что ему нужно писать свои аллокаторы и он понимает как работает память, в то время как разработчик на пыхе пишет бизнес код.
Получается, по этой логике ПХПист должен лучше других понимать как писать бизнес код и решать задачи бизнеса, потому что он не с параметрами компилятора ебется, не с алокаторами галимыми переписывающими капасити, а над бизнес задачами. А из структур данных у него один аррэй.
Так получается?
Ты еще учти что у каждого разработчика опыт свой и уникальный, кто-то работал на крестах 5 лет в отделе обработки видеопотоков и знает все про передачу потокового видео, rtp хуйню и тд. Но он все это время работал в большой компании над своим микросервисом и он в ручную с базой никогда не работал и он SQL знает на уровне бегиннера.
А какой-нибудь ПХПшник работал в маленькой компании и может и фронт, и бэк, и деплой сделать. И ssl-ку прикрутить может. А какой-нибудь работающий в большой компании крестовик может не уметь проект с нуля начать.
Опыт технический у каждого свой и у всех разный, и для того чтобы он был у тебя релевнтный тебе нужно работать в разных местах и на разных языках и постоянно новому учиться.
В то же время синьорность и софт скиллы это такая штука которую ты добился, научился руководить разработкой и переносишь этот навык куда угодно.
Я если честно уже заебался спорить с местными долбоебами, пусть думайте, что хотите. Уже несколько человек раз десять за последнюю неделю писали здесь детально, в чём разница между набором скиллов пехапешника и джависта, всё равно, местные дурачки не хотят читать и думать, а хотят убеждать всех, что типа им и на пыхе заебись. Ну что сказать, думайте дальше.
Только в следующий раз, когда обнаружите, что у вас зп в два раза меньше или в очередной крупной компании перешли с php на golang и прекратили найм пыхеров - не нойте, а вспомните, что у вас был шанс.
/thread
Наконец-то рубист из треда выкатился на хабр и его обоссали там с ног до головы.
У автора нет аргументов, как можно заметить, только двач-жаргон и нытьё какой пхп плохой :)
>Типовые вопросы на собесах по PHP - это вопросы веры и дрочки. >Нужно верить в SOLID
Ошибка автора - он не пытается учиться, он не понимает почему опытные дяди спрашивают его про солид.
А в треде были рубисты? Или мы эрлангиста за рубиста считать будем?
я гошник #2463054 если что
Сам-то что можешь рассказать про SOLID? Зачем и когда он нужен, а когда не нужен? Какие буквы являются языко-специфичными, а какие - общие для всей разработки?
Зайка, иди ищи работу из 41 вакансии на Эликсире, гордись своей элитарностью и не переживай за PHP разработчиков, использующих этот язык как способ быстро войти в индустрию.
Какая навозная куча в должна быть в голову у человека, если он старше 18 лет и до сих пор рассуждает в таком стиле.
Вот, кстати, тут нахваливают Го. Давайте, расскажите, например, как в Го парсить аргументы командной строки в структуру на основе аннотаций и чтобы помощь генерировалась автоматически. Убожество из стандартной библиотеки (flag) с указателями на глобальные переменные это не серьезно.
Доебался до нюансов.
Го не за это нахваливают.
И у гошников зепка в полтора-два раза выше чем у похапешника - с этим поспорь.
>нормальные люди пишут в процедурном стиле
Я бы еблище разбил за такие слова.
>>464770
>использующих этот язык как способ быстро войти в индустрию
И остаться скриптокодером на всю жизнь.
>>464781
>И у гошников зепка в полтора-два раза выше чем у похапешника
Максимум которых на беке это писать микросервисы т.к хуй ты напишешь большой сайт на гоше
дружок, если ты решаешь задачу больше 20 строк, то тебе в целом безразлично на каком языке её решать, если твой язык хотя бы имеет в себе концепцию ООП, ничего радикально нового в ней не придумали. Ты пойми, бизнес платит не за элитарность языка, а за решение задачи.
А теперь про солид только одна буква специфична для твоего любимого руби, и то, только до 3.0 в которой у тебя теперь есть человеческие интерфейсы
>большой сайт
Заканчивай уже мыслить категориями сайтов.
Есть приложение с бизнес-логикой. А есть веб-морда к нему.
Приложение отдельно. Веб-морда отдельно.
Между приложением и веб-мордой есть внутреннее апи. Удобно, когда оно построено средствами языка, то есть когда обе части написаны на одном языке. Но это не критично.
Главное чтобы в понимании приложение было отделено от веб-морды. И тогда веб-морда перестаёт быть большой. Или сложной.
Много ли вам известно, например, мобильных приложений, написанных на функциональных языках? Много ли вакансий на такие языки?
Найс переобуваешься. руби ещё живой, хуясе.
>Учит питоновский синтаксис 3 года
>Называет людей со средним IQ петухами
Ты же по факту тупее петуха, лул.
>>464789
>Заканчивай уже мыслить категориями сайтов.
С чего вдруг?
>И тогда веб-морда перестаёт быть большой
А приложение тоже перестаёт быть большим? Или большие сайты нинужна?
Заканчивай уже мыслить категориями микросервисов.
В функциональном стиле можно писать на многих языках. Может кто-то и пишет. Деталей про мобильную разработку не знаю.
>пишут в функциональном стиле
Пишут что, сайты? Или драйвера которые потом выкатывают в опенсорс, а красноглазых байтоёбов выкидывают за ненадобностью
Сайты, опердени итогдалие. Драйверы конечно же пишут по-другому, там своя атмосфера, начать хотя бы с того, что язык должен быть без gc с вытекающими.
Возьми с полки пирожок. Боже каким же надо быть уебаном, чтобы выбрать функциональный язык для вэба когда есть решётки или жава с той же производительностью
> с той же производительностью
тогда чего ж ты порвался, если производительность не уступает?
>функциональный язык для вэба
эликсир функциональный, но для веба он выбирается не поэтому, а из-за преимуществ BEAM, функциональность - лишь приятный бонус
>решётки или жава
какие решётки? c#? жава - это именно жава? почему именно они и что в них такого? а то есть f# на дотнете и scala/clojure на jvm
Помойка исключительно у этого человека в голове, и это можно легко понять по стилю его текста. Вряд ли он специально так подбирал слова, он в мыслях думает точно так же.
Руби по стилю кодирования ничем не лучше PHP, а плохих практик там даже наверно больше. У нас в PHP один модуль не патчит другой модуль при импорте, например.
По его мнению, единственный плюс Руби в том, что на нем труднее найти разработчика-сеньора и потому сеньору легче пройти собеседование.
Успокойся уже со своим Эликсиром, который основан на двух непопулярных языках и сам еще менее популярен. Сомневаюсь, что он где-то используется, если на него 41 вакансия.
> который основан на двух непопулярных у пхпшников языках и сам еще менее популярен у пхпшников
пофиксил тебя
>Сомневаюсь, что он где-то используется, если на него 41 вакансия
пикрил и подобное периодически прилетает в почту. это не я на вакансии апплаюсь, это мне пишут, чтобы ты понимал
>ты порвался
Хуя у тебя манямирок, ты полностью одебилил на своём эликсире? Таблетки пил сегодня?
>что в них такого?
Одебилившему функциональщику увы не понять.
>а то есть f# на дотнете и scala/clojure на jvm
Мелкобуквенный еблан, будь добр и перефразируй, а то из твоего потока шизофазии тяжело вычленить мысль.
>>464849
Сеньёрам эликсирщикам платят как мидлам на пхп, лул. Завязывай срать себе в штаны и покинь тред.
>Руби по стилю кодирования ничем не лучше PHP
ты не поймёшь. дело не в стиле кодирования. дело в множестве факторов, которые в совокупности дают взрывной эффект и позволяют генерировать идеи. тебе пхпшнику это неведомо, но вот в мире разработки есть ещё и такой феномен. из руби-коммьюнити вышло много новых идей и решений на них основанных, из которых остальные языки почерпнули, это самое плодовитое коммьюнити из известных мне. это потому что сам язык не сковывает программиста и позволяет делать крайне необычные и крутые штуки, например https://github.com/mame/quine-relay
можешь ли ты сказать, что твой пхп не сковывает тебя? гыгы
>а плохих практик там даже наверно больше
оригинальная идея от человека, не умеющего в руби
>Одебилившему функциональщику
в голосину
>Сеньёрам эликсирщикам платят как мидлам на пхп, лул
да, а ещё на них смотрят как на программистов, а не как на дрессированых макак. такие письма как твой пикрил я даже не дочитываю.
я ж говорю, пхпшникам деньги бьют в голову, из-за чего они перестают соображать. и это прекрасно, расмус великое дело сделал
>такие письма как твой пикрил я даже не дочитываю
Эти >>464849 Я дочитываю, а эти >>464850 другое и пынямать нада, лул! Ты же по факту тупее пехапемакаки.
>я ж говорю, пхпшникам деньги бьют в голову
А элексирщикам нет, вот ты тут и рвёшься целую неделю если не больше от того, что безработный и делать нехуй.
>Эти Я дочитываю, а эти другое
вижу слово "php" - отвечаю "нет, спасибо" не дочитывая
>А элексирщикам
Я полиглот, мань
>Я полиглот
Ты хуеглот, мань.
Заучил синтаксис 10ти Си подобных япов и сидит выёбывается клоун. Сложнее калькулятора на расте сможешь написать чего нибудь? На работу не берут тебя именно потому, что ты нихуя не знаешь о япе на который устраиваешься?
>Сложнее калькулятора на расте
видишь ли в чём дело. раст - очень большой язык, у него и кривая входа крутая, и за ней скрывается большая область и теории, и практики. у него очень много областей применения. то есть его можно изучать и изучать, благо он написан умными людьми.
а в твоей пыхе что можно изучать? заёбы очередного менеджера? или очередного гуру впихивающего тебе очередной solid? ооп как серебряную пулю? дефолтные параметры в функциях? покрытие логики проверками на null? ещё какую-то мудрость от червей-пидоров? секреты раскрываются в первый год, дальше начинается борьба с инструментом. про это в статье на хабре и написано кстати. инструмент настолько простой и тупорылый, и количество его адептов настолько велико, что в нём образуются локальные движухи вплоть до орденов. "пхп - язык с большим потенциалом, в нём можно много чего сделать" - угу, например вебсокеты из коробки... ах да
>раст - очень большой язык
Нет. Большой язык это плюсы, а это низкоуровневое поделие в котором даже объектов нет.
>у него очень много областей применения
Вот бы посмотреть на браузер или игровой движок написанный на расте.
>а в твоей пыхе что можно изучать?
>А вот в пехапе...
>дальше начинается борьба с инструментом
Хуле энта ваша отвёртка не имеет электропривода и почему она не пилит деревья? Она что существует лишь для того, чтобы не утруждаясь написать сайтик?
Ты же реально дебил который сравнивает швейцарский нож с отвёрткой.
Ладно ты меня утомил. Работу себе хотя бы пехапешником найди, а то срёшь тут целыми днями одним и тем же. Надеюсь ты в состоянии пройти собеседование на ждуна в пехапе?
>настолько простой и тупорылый
Но даже в нём есть ооп в отличии от языка написанного умными людьми.
Вот бы на функциональных япах написать хороший поддерживаемый код с шаблонами проектирования... ах да.
Всего хорошего тебе, надеюсь тебя возьмут на работу и ты будешь сам себе оплачивать тырнет.
>Крч, рассказываю, как бывает при личностном росте (тебе неведомо, но хоть представить попробуй).
Сейчас программист (ещё и СНГшный, судя по всему) пояснит за личностный рост.
>Когда ты овладеваешь каким-то ремеслом - ты однажды, и это неизбежно, встаёшь перед выбором - искусство/знания vs деньги.
Этот выбор нормальные люди делают ещё перед выбором ремесла.
Сам тот факт, что ты выбрал программирование, а не, например, математику (ты ж такой умный у нас, типа), уже говорит о том, что ты выбрал деньги.
А теперь ты приходишь к пехапешникам и обсираешь их за то, что они пошли до логического конца в таком выборе - писать говнокод и грести деньги лопатой, не заморачиваясь больше ни о чём.
>>453199
>инварианты
Охренеть, какое умное слово ты знаешь. Ну точно, тебе печёт от того, что ты вместо того, чтобы заниматься умными вещами и использовать мозг (который у тебя, видимо, есть или был когда-то) по назначению, занимаешься быдлокодингом, потому что денежки любишь.
>Потом наблюдаешь как твоё приложение включается и работает без утомительных недель тестирования потому что ты собрал его как паззл с первого раза.
Чистый кайф, ага. Вот только ни в какое сравнение не идёт с кайфом от решения сложной чисто математической проблемы, потому что сильно не дотягивает по интеллектуальной глубине.
>>453203
>Искусство - оно про то как убрать всё лишнее и оставить только суть.
Согласен.
>>463207
>Я не знаю зачем вы по утрам просыпаетесь если в вас нет интереса изучить что-то новое.
Я вот тоже.
>Кстати, представляешь что это такое - работать в нормальной инженерной компании?
Нет.
>Ты получаешь свою ежемесячную зп и не паришься, её хватает чтобы ужинать в ресторане не глядя на цены. А на работе занимаешься инженерными разработками.
Понятно.
>А чисто инженерной проблемой.
>То есть такой, где нужны мозги.
А в чисто математических проблемах мозгов нужно ещё гораздо больше, а денег платят гораздо меньше.
Почему же ты не хочешь поработать ради искусства, но катишь бочку на пехапешников?
>>463247
>Насколько я знаю, работа с машинным зрением обычно подразумевает "взять open source библиотеку и крутить параметры, пока не заработает". Или ты, например, на полном серьезе будешь с нуля разрабатывать архитектуру нейросети? Здесь уже не программирование нужно, а математика + изучение научных работ. Я сомневаюсь, что эликсирщик на такое способен.
Этот шарит.
>>463933
Отлить этот пост в золоте и повесить в шапку программача.
Это ж надо, никогда бы не подумал, что такой максимально адекватный пост встречу на этой доске в принципе, и в пехапе-треде в частности.
Всегда потешно, когда программисты заявляют, что это они создают новые технологии. А быдло и ведётся, ведь.
>Крч, рассказываю, как бывает при личностном росте (тебе неведомо, но хоть представить попробуй).
Сейчас программист (ещё и СНГшный, судя по всему) пояснит за личностный рост.
>Когда ты овладеваешь каким-то ремеслом - ты однажды, и это неизбежно, встаёшь перед выбором - искусство/знания vs деньги.
Этот выбор нормальные люди делают ещё перед выбором ремесла.
Сам тот факт, что ты выбрал программирование, а не, например, математику (ты ж такой умный у нас, типа), уже говорит о том, что ты выбрал деньги.
А теперь ты приходишь к пехапешникам и обсираешь их за то, что они пошли до логического конца в таком выборе - писать говнокод и грести деньги лопатой, не заморачиваясь больше ни о чём.
>>453199
>инварианты
Охренеть, какое умное слово ты знаешь. Ну точно, тебе печёт от того, что ты вместо того, чтобы заниматься умными вещами и использовать мозг (который у тебя, видимо, есть или был когда-то) по назначению, занимаешься быдлокодингом, потому что денежки любишь.
>Потом наблюдаешь как твоё приложение включается и работает без утомительных недель тестирования потому что ты собрал его как паззл с первого раза.
Чистый кайф, ага. Вот только ни в какое сравнение не идёт с кайфом от решения сложной чисто математической проблемы, потому что сильно не дотягивает по интеллектуальной глубине.
>>453203
>Искусство - оно про то как убрать всё лишнее и оставить только суть.
Согласен.
>>463207
>Я не знаю зачем вы по утрам просыпаетесь если в вас нет интереса изучить что-то новое.
Я вот тоже.
>Кстати, представляешь что это такое - работать в нормальной инженерной компании?
Нет.
>Ты получаешь свою ежемесячную зп и не паришься, её хватает чтобы ужинать в ресторане не глядя на цены. А на работе занимаешься инженерными разработками.
Понятно.
>А чисто инженерной проблемой.
>То есть такой, где нужны мозги.
А в чисто математических проблемах мозгов нужно ещё гораздо больше, а денег платят гораздо меньше.
Почему же ты не хочешь поработать ради искусства, но катишь бочку на пехапешников?
>>463247
>Насколько я знаю, работа с машинным зрением обычно подразумевает "взять open source библиотеку и крутить параметры, пока не заработает". Или ты, например, на полном серьезе будешь с нуля разрабатывать архитектуру нейросети? Здесь уже не программирование нужно, а математика + изучение научных работ. Я сомневаюсь, что эликсирщик на такое способен.
Этот шарит.
>>463933
Отлить этот пост в золоте и повесить в шапку программача.
Это ж надо, никогда бы не подумал, что такой максимально адекватный пост встречу на этой доске в принципе, и в пехапе-треде в частности.
Всегда потешно, когда программисты заявляют, что это они создают новые технологии. А быдло и ведётся, ведь.
Простой ООП-язык, где от контроллера до сервисов может быть классов 50 и ты за 5 минут всё поймёшь что к чему. Где не надо семь пядей во лбу иметь , чтобы писать код.
Максимально быстро вкатываешься, максимально быстро получаешь зар.плату джависта, максимально быстро получаешь современные проекты на 7.4-8.1 без легаси-говна.
Я когда на пыху устраивался - моя первая зп была не в рублях даже, а ещё в офисе никогда не работал, а ещё английский мало требуют.
PHP - лучший ЯП для бэка. Ни разу не пожалел что выбрал однажды его. А вот эликсирщику в треде завидно что ему работу нереал найти, ему надо 100500 книг перечитать и аспирантуру окончить, чтобы на это говно устроиться. А пхпшнику достаточно рассказать что такое солид с фабрикой, кек.
Хоспаде, благослави тот день, когда я выбрал божественный PHP!
Стоит ли мне, как новичку, вручную ставить ngnix и последнюю версию php, на чистую систему Ubuntu;
ИЛИ можно поставить FASTPANEL? Я бы хотел динамически переключать версии php,(туда и 7 и 8 и postgres и sql установить можно через настройки->приложения. Хочу делать тесты и изучать различия PHP, легаси. Копаться в конфигах это интересно, я тоже люблю bash но я могу потратить время на что то полезное, типа изучаения фронтенда. ПО логике, все что устанавливет FASTPANEL , ведь я могу достать/сконфигуровать из из системы стандартными способами (bash, проводник)?
Или вообще стоит вкатываться в конф.файлы, ngnix/apache Docker, пердолинг?
Вы же на работе не занимаетесь настройкой серверов и докера?
И второй вопрос, Можно ли сделать бекап всех скачиваемых приложений-зависимостей для последующего пользования, на случай если у нас сделают таки КИБЕРГУЛАГ? Apt-пакеты сохраняются куда-то в систему --dowload-only - но там все в каше, все вместе с хуй пойми чем, я не могу понять где зависимости где мои программы
>максимально быстро получаешь современные проекты
Вот тут бы я поспорил, максимально быстро и без хлопот получаешь как раз таки охуенный легаси без тайпхинтов и работающий на какой то своей эфимерности, работа чисто по наитию. Сейчас на таком проекте, каждый день летаю на марс
>Ни разу не пожалел что выбрал однажды его
Я вот жалею, что сразу не вкатился в решётки. Ибо там ты действительно за 5 минут всё поймёшь что к чему.
>>464960
>Стоит ли мне, как новичку, вручную ставить ngnix и последнюю версию php, на чистую систему Ubuntu
Нет, ставь мяту (она легче и более юзерфрендли) и накатывай туды докер и docker-compose офк. Написал docker-compose up и пишешь на нужном стеке без мозгоебли.
>>464960
>вкатываться в конф.файлы, ngnix/apache Docker, пердолинг
Только если планируешь в девопс, а так уже всё давно за тебя написано.
>ставь мяту
Вот чего чего, с советовать mint вместо debian или rhel-based для разраба это конечно пиздос, как вообще можно вообще упоминать эту пародию на windows, которую на продакшене никто нахуй не использует
>в решётки
>там ты действительно за 5 минут всё поймёшь что к чему.
Поймешь как изобрететь себе велосипед? Или вычислять математические формулы по перегреву видеокарты?
пл моему, ты больной
>mint вместо debian
Минт это дебиан системы как и убунта.
>пародию на windows
Перестанешь быть красноглазым консолеёбом, одни плюсы.
sudo sudo sudo
>Поймешь как изобрететь себе велосипед?
Все велосипеды на решётках уже давно изобретены, остаётся только научится пользоваться фреймворками.
После винды, терминал мне божественным пришествием показался. То, для чего изобрели компы. Я пердолился с win командной строкой, она вообще своей жизнью живет, неспособная ниначто хуйня, (зачем она там, для меня до сих пор вопрос). Я и сам писал .bat файлы частенько, для решения различных задач, там настолько все через жопу, что каждый раз было стремно запускать новую команду, не дай аллах скобочку не так поставиш - и пиздос твоим файлам, или файловой системе, или еще где нибудь всплывет такая ахинея, что хочеться застрелиться
Я вообще не ебу, как на серьезных щщах можно кодить на windows. Это система для инвалидов. Если бы не photoshop и пара программ, и игр для тянучки избавился бы от нее не задумываясь. Вообще для дизайна макось тоже отлично подходит, но как бывший пользователь мака могу сказать что со смертью Джобса, умер и мак, и apple - и вообще, та же Ubuntu, очень сильно похожа на мак-ос - обе кайфовые ос.
А если человек по своей воле сидит на windows, кодит на ++ это показатель просто человека из прошлого, или хз, вообще чем он занимаеться и зачем. Может станки программирует в НИИ или детей на информатике мучает.
Или просто делает вид, что работает.
>После винды, терминал мне божественным пришествием показался
Тут сыглы.
>как на серьезных щщах можно кодить на windows
Скачиваешь студию, нажимаешь пару кнопок и кодишь. Легко правда?
>Это система для инвалидов
Описал инвалида по зрению т.е линуксоида который не вылазиет из терминала, чтобы накрутить себе очередной драйвер через васянский репозиторий который с этой версией kernel'я не работает?
>и пара программ
>Любая медийная
Поправил
>избавился бы от нее не задумываясь
Консолеёбство терпишь так терпи до конца в надежде, что сделают порты для швятого линуха игрушек и медийных программ.
>макось тоже отлично подходит
Как и для поиска себе партнёра для гомосекса.
>та же Ubuntu, очень сильно похожа на мак-ос
Особенно Unity оболочкой... Которая мусорит систему так, что через пол года уже анрил на ней работать и надо сносить.
>>464960
>на чистую систему Ubuntu
Как подтверждение, лул. Сколько месяцев прошлая простояла до того момента пока перестала работать менее отзывчивее винды?
Всё что я делаю на мяте так это чищу докер уже 2 года без всякой потери отзывчивости системы.
> кодит на ++ это показатель просто человека из прошлого
Долбаёб итт, у тебя браузер на чём написан клоун? Твои игрушки на чём написаны на питоне, боже какие же пехапе макаки ебанутые просто...
>После винды, терминал мне божественным пришествием показался
Тут сыглы.
>как на серьезных щщах можно кодить на windows
Скачиваешь студию, нажимаешь пару кнопок и кодишь. Легко правда?
>Это система для инвалидов
Описал инвалида по зрению т.е линуксоида который не вылазиет из терминала, чтобы накрутить себе очередной драйвер через васянский репозиторий который с этой версией kernel'я не работает?
>и пара программ
>Любая медийная
Поправил
>избавился бы от нее не задумываясь
Консолеёбство терпишь так терпи до конца в надежде, что сделают порты для швятого линуха игрушек и медийных программ.
>макось тоже отлично подходит
Как и для поиска себе партнёра для гомосекса.
>та же Ubuntu, очень сильно похожа на мак-ос
Особенно Unity оболочкой... Которая мусорит систему так, что через пол года уже анрил на ней работать и надо сносить.
>>464960
>на чистую систему Ubuntu
Как подтверждение, лул. Сколько месяцев прошлая простояла до того момента пока перестала работать менее отзывчивее винды?
Всё что я делаю на мяте так это чищу докер уже 2 года без всякой потери отзывчивости системы.
> кодит на ++ это показатель просто человека из прошлого
Долбаёб итт, у тебя браузер на чём написан клоун? Твои игрушки на чём написаны на питоне, боже какие же пехапе макаки ебанутые просто...
>это показатель просто человека из прошлого
Даже твоё пэхапе как и жаес интерпретируется плюсами блядь. как можно было такую хуету написать? Тебе хоть стыдно, надеюсь?
>Скачиваешь студию,
Сейчас бы в блокноте кодить
>очередной драйвер через васянский репозиторий
Ты этой сказкой, прохожих пугать можешь, еще про зависимости забыл написать, которые ВРУЧНУЮ ИСКАТЬ нужно
>Unity оболочкой
Зачем если gnome есть.
>подтверждение,
Я впервые в жизни Ubuntu поставил, ничего вообще не глючит. на древнем ноуте.
Может покажешь где Mint используют на серверах?
>у тебя браузер на чём написан клоун?
И часто ты браузеры пишешь?
>Сейчас бы в блокноте кодить
Хуясе блокнот для решёток и плюсиков. Толи дело vscode или пехапешторм... Ты прям трушный пехапешник, лул.
>>465138
>сказкой
Что там на стационаре по wifi адаптерам и модемам по usb из коробки? Я знаю о чём пишу. Неделю назад сидел дрочился и пришлось по LAN'у пеку подрубать, чтобы всё скачалось
>если gnome есть
Зачем если KDE есть которая из коробки?
>Я впервые в жизни Ubuntu поставил
А уже так рьяно защищаешь эту помойку.
>на древнем ноуте.
Тут ты и попалась мелкобуквенная пиздлявая падла. На ноутах не лагает разве что kubuntu или lubuntu. Или ты просто не опытный линуксоид как мы выяснили выше.
>И часто ты браузеры пишешь?
Как часто тебе выкатывают обновления на них? Как часто тебе выкатывают обновления для игорь? Как часто выкатывают версии для пехапе? Мне продолжать или ты прям тут поймёшь, что жидко обосрался?
А, vs-studio помню эту парашу, удивительно что дизайн хоть не вырвиглазный на последних версиях умудрились сделать, где они вообще его спиздидли - для меня навсегда останется загадкой. Наверное украли и пытали какого нибудь бедного кислотного дизайнера , пока тот не сдох и не родил звезду.
>Что там на стационаре по wifi адаптерам и модемам по usb из коробки
Значит негоже использовать вот это вот. У меня все хорошо работает.
>мелкобуквенная пиздлявая падла
лее ну и что кто не делает ошибок
>Как часто тебе выкатывают обновления на них
>обновления для игорь
Но не ты же выкатываешь, анальник нищий
>лее ну и что кто не делает ошибок
Тот кто думает перед тем как написать хуйню.
>vs-studio помню эту парашу
Опенсорсный редактор кода который под видом пехапешторма продают лохам лишь сделав пару фич, лул.
>где они вообще его спиздидли
Выкатили в опенсорс откуда его и спиздили клоуны из jbrains для продажи опенсорса аутистам.
>>465084
> кодит на ++ это показатель просто человека из прошлого
>Но не ты же выкатываешь, анальник нищий
Просто пиздец, найс маняврируешь очком. Ты стирать штаны пойдёшь или будешь делать вид, что ничего не произошло?
>нищий
180К пехапе мидл. Ты?
Сейчас бы покупать phpstorm.
>Опенсорсный редактор кода который под видом пехапешторма
Что за хуйню ты городишь, они на разных языках написаны вообще. Пару фич, ты ебнутый? Там аллаховские фишки.
Эххх. Все кто учит сложные языки, пытаются себя к чему-то виликому причастить. К хрому, к играм, гуглу и тд. А сами работают в НИИ и пугают детей.
>Вот бы посмотреть на браузер или игровой движок написанный на расте.
В гугле забанили?
https://servo.org/
https://blog.logrocket.com/5-rust-game-engines-consider-next-project/#5-popular-rust-game-engines
>Хуле энта ваша отвёртка не имеет электропривода и почему она не пилит деревья? Она что существует лишь для того, чтобы не утруждаясь написать сайтик?
100500 раз написано и капсом и болдом и чуть ли на ебале вам не выгравировано: несмотря на то что пхп подаётся как язык для лёгкого написания сайтиков, на нём самом сайтики легко не пишутся или не пишутся вовсе (именно на чистом пхп). Нет вебсокетов из коробки, небезопасный ввод данных из веба, хуёвая работа с юникодом, язык уёбищный как шаблонизатор. Всё это получается у пхп только за счёт внешних приблуд.
>Но даже в нём есть ооп в отличии от языка написанного умными людьми.
Но ооп (который "инкапсуляция-наследование-полиморфизм") не нужен, и сама концепция ооп - или сознательная наёбка или глубочайшее заблуждение. Ты ведь знаешь, что идея наследования противоречит идее инкапсуляции? То есть ооп - абсурд по определению. А полиморфизм через подмену исполнителя - не самый лучший.
В rust book про ненужность объектов есть целая глава, где объектоёбам размеренно и методично ссут на ебало. Прочти.
>Сам тот факт, что ты выбрал программирование, а не, например, математику (ты ж такой умный у нас, типа), уже говорит о том, что ты выбрал деньги.
Заканчивай вяло предполагать. Я выбрал программирование потому что с детства хотел им заниматься, и первый год хуячил на чистом интересе. Потом я решил на нём остановиться потому что оно позволяет быть мобильным. И лишь в третью очередь повлияли деньги. Между математикой и прикладной инженерией выбрал второе, хотя и посещал физмат кружки. Короче суть доёбки непонятна. Остальные каменты скипаю как флуд. Попробуй обсуждать не меня, а пхп.
>>464896
>А теперь ты приходишь к пехапешникам и обсираешь их за то, что они пошли до логического конца в таком выборе - писать говнокод и грести деньги лопатой, не заморачиваясь больше ни о чём.
Я не обсираю, я воспеваю их. Гребите, ребята, гребите, главное оставайтесь где вы есть. Но, возможно, будет один, кто задумается, что делать, когда у его проца сорок ядер, а загружается всего одно, его реально припечёт, и он пойдёт разбираться.
Какие вебсокеты, ты циклы сначала в свой Эликсир завези.
>идея наследования противоречит идее инкапсуляции
Эликсир-макака, плиз. Ты как тупая блондинка с дом2, что-то себе придумал, никакого обоснования не привёл и будто все вокруг должны понять что ты имел ввиду.
Оба стула - стажировка на 3 месяца, с последующим оформлением, ну тут стандартно все.
>100500 раз написано и капсом и болдом и чуть ли на ебале вам не выгравировано: несмотря на то что пхп подаётся как язык для лёгкого написания сайтиков, на нём самом сайтики легко не пишутся или не пишутся вовсе (именно на чистом пхп). Нет вебсокетов из коробки, небезопасный ввод данных из веба, хуёвая работа с юникодом, язык уёбищный как шаблонизатор. Всё это получается у пхп только за счёт внешних приблуд.
100500 раз написано и капсом и болдом и чуть ли на ебале вам не выгравировано: несмотря на то что джава подаётся как язык для лёгкого написания бека, на нём самом бек легко не пишутся или не пишутся вовсе (именно на чистой джаве). Нет вебсокетов из коробки, небезопасный ввод данных из веба, хуёвая работа с юникодом, язык уёбищный как шаблонизатор. Всё это получается у джавы только за счёт внешних приблуд.
Да практически нисколько. Если ты уже дошёл до момента, что для тебя значима разница между in array и прямым сравнением, то ты уже работаешь в Яндекса и пишешь что-то супер-хай перфоманс 1М рпс и скорее всего на c++.
Бери там где напрягов меньше - дольше проработаешь и больше заработаешь в итоге.
Вообще лучше избегать мест где нет четких обязанностей - там организация труда разрабов обычно хромает, и порой сильно.
Даёт настоящую асинхронность, горутины, все дела.
Из особенностей:
Скорость, если у просто php 2000 rpm. У node.js 9000 rpm. То у PHP под Swoole - под 100000 rpm. То есть на PHP можно писать хайлоад игровой.
При изменении кода надо перезапускать сервер.
Выделяет много воркеров-процессов в системе изначально для многопоточности и надо контролить память.
Я ещё ради лулзов заменил Symfony рантайм на Swoole в симфе. Неюзабельно, сразу память потекла аж до 8гб оперативки. Т.е. непригодно Swoole в пакетах и функции некоторые, которые не рассчитаны на чистку памяти и в асинхронность.
Зато посмотрел фреймворк Hyperf. Он для асинхронного PHP с уже содержащим swoole. Вполне годный, из ларавеля спиздили часть идей.
Забавно что один из создателей Swoole - Китайский PHPшник-ветеран, работающий в Канаде на EA. Он из принципа PHP любит, его решение асинхронного PHP было в том, чтобы делать на PHP сервера для игр.
Как будет время, хотел бы онлайн-игрушку накидать, дабы проверить возможности Swoole. Видел китаец какой-то на нём сервер для WoW делал, летало так, что хоть ракеты на PHP запускай в космос
Только вот один есть ньюанс-львиная доля обучения асинхроности и всем фичам в инете-гребаный жаваскрипт
>все подряд, шарить во всем, страховать друг друга
Напомнило мне как меня пытались нанять пару кабанов писать им CRM какую то. Условия были примерно теми же.
По итогу мой тех лид это С# боярин и по совместительству соучеридитель этой хуеты грит мол ты тут сам придумывай на выкатить это на сервак, а мы поехали в лес.
Лучше в офис, там серьёзнее проекты.
А еще корутины тоже не родная фича.Это все отдельно придется учить...
Это эликсирщики так пишут, у них это нормально :)
В PHP конечно реквест-параметры обернуть в DTO, создать условный AuthValidation класс и прогнать реквест-параметры через его. Вторым путём можно ещё выделить под каждый параметр - свой класс и один интерфейс на всех. EmailValidation, LoginValidation implements ValidationInterface, где общие методы validate(string $param), getMessage(): string и т.д.
Класс создать дело не хитрое,но вот методы какие там будут,делать регулярки или функции из коропки как на пике не подойдут?
Никогда не проверяйте строки через empty() т.к empty('0') == true
or уже сотню лет как не пишут, а пишут ||
Проверять булевы функции на false идея крайне сомнительная и при сравнении всегда используй тождество ===
Я как-то собеседовался в Playtika, они как раз часть бэка пишут на PHP. Конечно игры у них не ААА, а вообще непонятно что, но это крупная компания.
Я стартово знаю ThreeJS, хотел бы на ней запилить что-нибудь и выкатить, вот и со swoole бы поигрался. Что-нибудь многопользовательское.
Как обычно жаль времени б на это всё. А то работать и своё писать сложно, хотя на работе никто и не гонит, мог бы использовать рабочее время.
Смысл только если монетизацию прикрутить.такие игры вообще еще живы в 2022?
100тыщ реквестов в секунду на PHP под swoole.
Ну по-разному можно играться в AB конечно, но плюс-минус.
Ну да, стоит признать я включил Keep-Alive флаг, т.е. это позволяет соединения переиспользовать. Если каждый раз tcp открывать/закрывать, то будет в пару раз меньше RPS. Но я с ним тестировал и ноду тоже.
Только про swoole хотел написать вечером, нашел в laravel - octane плагин (оф.сайт), для того чтобы PHP асинхронным сделать. Получаеться, половину треда нам тут всякие петухи выкручивали яица? Сокеты тоже есть в каком то пакете, в Laravel много чего есть.. Ну из коробки не работает, ну зато есть готовые решения, при том довольно официалные с большой поддержкой.
Можешь класс свой вставить в какой нибудь онлайн компилятор и кинуть сюда ссыль, я гляну, авось чего поправлю. Один хуй скучно
Не,цэ уже завтра.
Короче каждое поле формы выносим в класс со своими медодами,только вот че,а как эти классы вызвать в одном месте,инклюд делать?
>список вызовов методов этих самых классов
Подключил классы через use, и тебе станут доступны все классы и их public методы.
Ты не понял,их же нужно все вызвать в том файле,где накиданы пути к этим классам или не?
Как работает функция usort()? Если можно максимально понятно.
Этот файл является классом или простым набором функций? У тебя фреймворк или ты просто костылишь?
>>466743
Пример, как ты заменил один рантайм на другой и резко все выросло и встало, показателен. Никто не спорит, что если заменить phpшный код на сишные экстеншены и не использовать фрейморки и библиотеки, то это будет быстро (хотя такая разница как у тебя с нодой вышла - очень странная, прям совсем. я уверен, что ты или где-то случайно кэш включил, или наоборот, не включил какой-нибудь jit).
Мы тут говорили о том, что если ты будешь писать на swoole, то это будет уже другой язык, с другими библиотеками (потому что 99% говна из composer не подойдет), может другим стдлибом, другим кастомным рантаймом и так далее. Поняли, да? Swoole != php, и рассматривать их нужно сугубо отдельно. В этом треде мы обоссывали именно что ванильный php и ванильных пыхеров.
Кстати, вот вообще не уверен, что этот ваш свуль так же поддерживается, что есть такие же дебаггеры и что у него есть прям полноценная экосистема сравнимая с другим ЯПом. Иначе проще уже на другой язык перелезть и всё.
Какой скрин,я же сказал,что городить только завтра,а пока теория
Свуль не дебажится, вообще кроме как дампами, писать на нем что-либо сложнее хеллоу ворлда - гиблая затея.
>что ты имел ввиду
Идея инкапсуляции в том, чтобы на некий код (на его поведение) не влиял никакой другой код.
А идея наследования - наоборот, в том, чтобы код предка влиял на код потомка (на его поведение).
Пример 1, пиздецовый.
У тебя есть класс CarDriver. Ты наследуешь от него BusDriver и переопределяешь пару методов, так что он теперь использует поля и методы как из себя, так и из предка. Нарушение инкапсуляции тут в том, что изменения в CarDriver повлияют на BusDriver. Какие изменения могут быть вообще? Ты изменил в CarDriver метод, который использовал BusDriver. Ты изменил тип поля, чтоб понятнее - ты изменил не декларацию типа, а тип данных которые в него пихаешь, например у тебя как был array, так и остался, но в методе init ты стал класть в него значения другого типа. Как бы то ни было, если ты менеджишь класс CarDriver - ты обязан менеджить все его потомки, соответственно быть в курсе что они делают итогдалие. В реальном проекте может быть запросто так что предок сделан одной командой, а потомок - другой. Или храниться в разных репах. Да, я слышу как ты уже яростно шепчешь "если либа шарит объект, от которого юзер должен унаследоваться, то либа не должна изменять сигнатуру объекта после релиза", разумеется это так, но сам факт ограничения говорит о степени влияния предка на потомка.
Уровень трешнины растёт с глубиной наследования. Когда появляются TramDriver extends BusDriver, от него RiverTramDriver, от него BoatDriver, от него MarineDriver, от него SubmarineDriver, и все имплементируются, то приходит стагнация а затем и загнивание кода потому что все в команде боятся потрогать CarDriver или вовсе всех потомков SubmarineDriver, как бы чего не ёбнуло в продакшне.
Пример 2, относительно юзабельный.
Ты эту хуйню на практике познал, поебался с одеревеневшим кодом и в новом проекте решил ослабить связь между реализациями - завёл абстрактный класс Driver и унаследовал от него CarDriver и BusDriver. Связь между реализациями теперь ослабла, мы можем менять CarDriver не опасаясь заруинить BusDriver. Но всё равно существует влияние родителя Driver, и оно пропорционально количеству наследования.
Я лично использую этот вариант: максимум один уровень наследования от абстрактного класса, и никогда реализацию не наследовать от реализации. Это даёт оптимальный уровень контроля над кодом. И это, строго говоря, не является наследованием, потому что эквивалентно включению трейта.
Так, на всякий случай. Это дискусс не про "а вот ну надо же иногда в проекте иметь возможность малым количеством кода влиять на поведение многих мест". Иногда надо, иногда не надо. Это дискусс о том, что инкапсуляция-наследование - это попытка усидеть на двух разъезжающихся стульях сразу. От этого жопа разрывается.
>что ты имел ввиду
Идея инкапсуляции в том, чтобы на некий код (на его поведение) не влиял никакой другой код.
А идея наследования - наоборот, в том, чтобы код предка влиял на код потомка (на его поведение).
Пример 1, пиздецовый.
У тебя есть класс CarDriver. Ты наследуешь от него BusDriver и переопределяешь пару методов, так что он теперь использует поля и методы как из себя, так и из предка. Нарушение инкапсуляции тут в том, что изменения в CarDriver повлияют на BusDriver. Какие изменения могут быть вообще? Ты изменил в CarDriver метод, который использовал BusDriver. Ты изменил тип поля, чтоб понятнее - ты изменил не декларацию типа, а тип данных которые в него пихаешь, например у тебя как был array, так и остался, но в методе init ты стал класть в него значения другого типа. Как бы то ни было, если ты менеджишь класс CarDriver - ты обязан менеджить все его потомки, соответственно быть в курсе что они делают итогдалие. В реальном проекте может быть запросто так что предок сделан одной командой, а потомок - другой. Или храниться в разных репах. Да, я слышу как ты уже яростно шепчешь "если либа шарит объект, от которого юзер должен унаследоваться, то либа не должна изменять сигнатуру объекта после релиза", разумеется это так, но сам факт ограничения говорит о степени влияния предка на потомка.
Уровень трешнины растёт с глубиной наследования. Когда появляются TramDriver extends BusDriver, от него RiverTramDriver, от него BoatDriver, от него MarineDriver, от него SubmarineDriver, и все имплементируются, то приходит стагнация а затем и загнивание кода потому что все в команде боятся потрогать CarDriver или вовсе всех потомков SubmarineDriver, как бы чего не ёбнуло в продакшне.
Пример 2, относительно юзабельный.
Ты эту хуйню на практике познал, поебался с одеревеневшим кодом и в новом проекте решил ослабить связь между реализациями - завёл абстрактный класс Driver и унаследовал от него CarDriver и BusDriver. Связь между реализациями теперь ослабла, мы можем менять CarDriver не опасаясь заруинить BusDriver. Но всё равно существует влияние родителя Driver, и оно пропорционально количеству наследования.
Я лично использую этот вариант: максимум один уровень наследования от абстрактного класса, и никогда реализацию не наследовать от реализации. Это даёт оптимальный уровень контроля над кодом. И это, строго говоря, не является наследованием, потому что эквивалентно включению трейта.
Так, на всякий случай. Это дискусс не про "а вот ну надо же иногда в проекте иметь возможность малым количеством кода влиять на поведение многих мест". Иногда надо, иногда не надо. Это дискусс о том, что инкапсуляция-наследование - это попытка усидеть на двух разъезжающихся стульях сразу. От этого жопа разрывается.
>заменил Symfony рантайм на Swoole в симфе. Неюзабельно, сразу память потекла аж до 8гб оперативки. Т.е. непригодно Swoole в пакетах и функции некоторые, которые не рассчитаны на чистку памяти и в асинхронность.
this
в нескольких командах рассматривал переход на свуль. проблемы:
- стек - уже симфони, будет либо течь либо надо ебаться с фиксами, кто это будет делать, если 9 из 10 - обычные середнячки пишущие код по наитию
- придётся всех подтягивать и учить тому что ЭТО ДРУГОЕ, это только выглядит как пых, а на деле работает иначе. я как представлял - так сразу и передумывал. потому что нужно объяснить что такое персистентный рантайм, что такое утечки памяти, что такое асинк, что такое эвент луп, и если не объясню - сам же от начальства пизды и получу
- очень сложно понять зачем при таком раскладе брать свуль а не другой язык заточенный под это, например гошу. если брать гошу - то эта задача начинает выглядеть по-другому.
в результате бросал всё в пизду
говно
>пользователь Эликсира приходит в PHP-тред
когда я ссу на ебало пхпшникам - я делаю это именно как пхп-эксперт. я с этим говнищем десять лет работал, и знаю его вероятно лучше любого в этом треде.
>99% говна из composer не подойдет
>>466790
не включил какой-нибудь jit).
С чего ты такую информацию берешь, шиз? Тебе просто нужно доебаться? Что значить php без composer, ебанутый?
Вот еще аналог swoole(в octane в первую очередь рекомендуется https://roadrunner.dev
Так что хайлоад и PHP, вполне реальная вещь, видимо.
>>466838
Зато roadrunner в описании отлично дебажиться, судя по описанию в ссылке выше. ВООБЩЕМ идите нахуй короче, мистеры 41 вакансия
Вообще удивительно откуда столько хейта на PHP, ладно у зумеров, а у других красноглазых, например с хабра - удивительно. Как будто у них еду отбирают
> Зато roadrunner в описании отлично дебажиться
Он-то конечно, там тупой скрипт с бесконечным циклом. Но и супер перфоманса от него от него в таком случае ждать не стоит.
> Вообще удивительно откуда столько хейта на PHP, ладно у зумеров, а у других красноглазых, например с хабра - удивительно. Как будто у них еду отбирают
Хейтят не "язык", а набор сомнительных технических решений. Да и вообще, это не хейт, а обоснованная критика. Пыха реально медленная, ограниченная и ограничивает кругозор пишущих на ней.
У меня не было опыта на голанге, я изучал его поверхностно когда пробовал, но одно дело попробовать, другое дело писать на нём огромное приложение с бизнес-логикой.
Golang - это совершенно другой язык, функциональный, без ооп, без привычных паттернов, совершенно другая архитектура. Открыть топовые либы голанга - ужаснёшься как пишут на нём, ну всм непривычно для ООПшника, у нас это называется простыня, всё навалено в кучу.
В swoole же всё тоже самое как в простом пхп, только ещё с асинхронными приблудами и следи за памятью.
Тут проблема что Golang всё-таки знают, для карьеры круто. А swoole знают 3,5 китайца.
>там тупой скрипт с бесконечным циклом
Там приложение на go. Сервер блядь.
>>466969
>ограничивает кругозор пишущих на ней.
Делать круды, таскать джейсоны, делать приложения для гаджетов, работать с api всякиих сервисов конечно талант нужен. Вот прям творческий патенциал необходим, и фундаментальные знания прикладной математики и железа. Свалил бы ты уже нахуй, тебя 100 раз тут обросрали уже блядь, а ты все выпукиваеш пустые аргументы
> > ограничивает кругозор пишущих на ней.
> Делать круды, таскать джейсоны, делать приложения для гаджетов, работать с api всякиих сервисов конечно талант нужен. Вот прям творческий патенциал необходим, и фундаментальные знания прикладной математики и железа.
Ты это написал так как будто ты не согласен. Но смысл написанного полностью совпадает с тем, с чем ты якобы не согласен. Что ты хотел сказать этим - я не понял.
>Свалил бы ты уже нахуй, тебя 100 раз тут обросрали уже блядь, а ты все выпукиваеш пустые аргументы
Ты не понял мань. Тут несколько человек тебе это пишет. Минимум двое - я и анон который это написал. Может и не один. Никто ж не подписывается.
>пустые аргументы
пиздец, конечно. всю дорогу ни одного опровержения или даже разбора, но аргументы почему-то называются пустыми
> Делать круды, таскать джейсоны, делать приложения для гаджетов, работать с api всякиих сервисов конечно талант нужен.
Спасибо, ты лишний раз продемонстрировал мою правоту. Php действительно хорошо подходит только для крудов, джейсонов и работы с апи всяких сервисов. И действительно, не требует для этого особых талантов или квалификации.
Всё правильно.
>Golang - это совершенно другой язык, функциональный, без ооп, без привычных паттернов, совершенно другая архитектура. Открыть топовые либы голанга - ужаснёшься как пишут на нём, ну всм непривычно для ООПшника, у нас это называется простыня, всё навалено в кучу.
Там можно писать в ООПшном стиле
И вполне себе пишут. То, что голанг это типа не ООП это аргумент джунов или поехавших джавистов, у кого ООП - это когда пишут `class Foo implements Bar`, а всё, что устроено по-другому, это не ооп.
В го есть объекты (структуры), есть отделенное от них поведение (интерфейсы), можно строить связи между объектами. Этого более, чем достаточно, чтобы воспроизводить любые ООПшные паттерны. Которые кстати очень широко используются.
Наоборот, чем мне нравится го, так это тем, что они не пихают ебаное наследование везде, куда только можно. Там, где в php для обработки запроса нужно ебануть аннотацию, создать класс, заимплементить интерфейс, прописать его, прокинуть туда обязательную хуйню какую-нибудь и так далее - в го обходятся просто одной функцией, которая должна принять запрос и вернуть ответ. Захочешь, чтобы там был объект - сам прокинешь. Не захочешь - не прокидывай.
Когнитивно код получается сильно проще, никакий магии.
А что в веб-разработке ещё нужно? Ну подобные возможности, скорость нужна, да и все. Я не понимаю, чего вы хотие доказать.
Типа я чего, должен плюсы выучить чтобы это делать? Вы поехавшие? Или пердолиться с утечками памяти javascript, отказаться от composer в пользу фактически голого go или любого другого велосипедного языка ? А когда мне жить?
Нет спасибо, я лучше получу удовольствие от результатов, подрочу в свободное время фронт, выебу во всех позах свою тяночку и закинусь грибгсиками.
>И вполне себе пишут. То, что голанг это типа не ООП это аргумент джунов или поехавших джавистов, у кого ООП - это когда пишут `class Foo implements Bar`, а всё, что устроено по-другому, это не ооп.
>В го есть объекты (структуры), есть отделенное от них поведение (интерфейсы), можно строить связи между объектами. Этого более, чем достаточно, чтобы воспроизводить любые ООПшные паттерны. Которые кстати очень широко используются.
Да, довелось как-то ковырять крупный проект https://github.com/ethereum/go-ethereum вполне себе годно.
>Наоборот, чем мне нравится го, так это тем, что они не пихают ебаное наследование везде, куда только можно. Там, где в php для обработки запроса нужно ебануть аннотацию, создать класс, заимплементить интерфейс, прописать его, прокинуть туда обязательную хуйню какую-нибудь и так далее - в го обходятся просто одной функцией, которая должна принять запрос и вернуть ответ. Захочешь, чтобы там был объект - сам прокинешь. Не захочешь - не прокидывай.
>Когнитивно код получается сильно проще, никакий магии.
Мне первое время в расте не хватало наследования, да что за ептвуй пиздец думал я, а теперь наоборот удобно, нет никаих родословных классов, максимум имплементации трейтов почти как в пыхе, только ближе к интерфейсам, на этом все, структуры сам пишешь, нужные данные прокидываешь и нет ничего лишнего, для экономии памяти и быстродействия везде можно прокидывать ссылки чтобы не алоцировать один и тот же объект, с наследованиями я хз как таким заниматься.
> Я не понимаю, чего вы хотие доказать.
Блять, ваша проблема в том, что вы воспринимаете дискасс как наезд лично на вас. На тебя никто не наезжает, если тебе нравится, то всё ок, кайфуй.
Мы здесь просто обсуждаем технологии и говорим, что сравнительно с другими языками php
а) Непроизводительный свуль и остальные не-ванильные решения это отдельная история с кучей подводных
б) Дешевый в смысле зп разрабам
в) Подходит только для определенных задач, этим ограничивая разработчиков, если они потом захотят перейти на другие языки
Это объективная реальность. Но ничего из этого не говорит, что пыха "плохая" или что она не подходит для своих задач. Нет, конечно, подходит и если вам оно нравится, то ок.
хотя субъективно конечно я бы другие языки выбрал, просто потому, что они перспективнее с точки зрения разработчика
>Я не понимаю, чего вы хотие доказать.
Пхп - это твоя долгая жизнь с несложными задачами и смерть как программиста.
>В го есть объекты (структуры), есть отделенное от них поведение (интерфейсы), можно строить связи между объектами. Этого более, чем достаточно, чтобы воспроизводить любые ООПшные паттерны.
Ооп - не про навешивание методов на структуры. Ооп - это про наследование и полиморфизм через подмену исполнителя.
http://blog.cleancoder.com/uncle-bob/2014/11/24/FPvsOO.html
>Непроизводительный
Производительный. А ещё самый производительный в мире для написания проектов.
>Дешевый в смысле зп разрабам
Как и всем платят.
>если они потом захотят перейти на другие языки
Зачем переходить с пхп/джавы/шарпа/жс на другие ноунейм языки? Лучше развиваться в своём языке и расти.
>>467154
раст/эликсир - это твоя долгая жизнь с несложными задачами и смерть как программиста. Типа игра подставь своё? Детский сад.
>Да, довелось как-то ковырять крупный проект >https://github.com/ethereum/go-ethereum вполне себе годно.
Очень годный код пишут в своём крупном проекте, ничё не скажешь :)
Это наверное уровень ООП у голангеров. Упаси господь переходить с пхп на GOвно.
func (c ChainConfig) checkCompatible(newcfg ChainConfig, head big.Int) ConfigCompatError {
if isForkIncompatible(c.HomesteadBlock, newcfg.HomesteadBlock, head) {
return newCompatError("Homestead fork block", c.HomesteadBlock, newcfg.HomesteadBlock)
}
if isForkIncompatible(c.DAOForkBlock, newcfg.DAOForkBlock, head) {
return newCompatError("DAO fork block", c.DAOForkBlock, newcfg.DAOForkBlock)
}
if c.IsDAOFork(head) && c.DAOForkSupport != newcfg.DAOForkSupport {
return newCompatError("DAO fork support flag", c.DAOForkBlock, newcfg.DAOForkBlock)
}
if isForkIncompatible(c.EIP150Block, newcfg.EIP150Block, head) {
return newCompatError("EIP150 fork block", c.EIP150Block, newcfg.EIP150Block)
}
if isForkIncompatible(c.EIP155Block, newcfg.EIP155Block, head) {
return newCompatError("EIP155 fork block", c.EIP155Block, newcfg.EIP155Block)
}
if isForkIncompatible(c.EIP158Block, newcfg.EIP158Block, head) {
return newCompatError("EIP158 fork block", c.EIP158Block, newcfg.EIP158Block)
}
if c.IsEIP158(head) && !configNumEqual(c.ChainID, newcfg.ChainID) {
return newCompatError("EIP158 chain ID", c.EIP158Block, newcfg.EIP158Block)
}
if isForkIncompatible(c.ByzantiumBlock, newcfg.ByzantiumBlock, head) {
return newCompatError("Byzantium fork block", c.ByzantiumBlock, newcfg.ByzantiumBlock)
}
if isForkIncompatible(c.ConstantinopleBlock, newcfg.ConstantinopleBlock, head) {
return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock)
}
if isForkIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, head) {
// the only case where we allow Petersburg to be set in the past is if it is equal to Constantinople
// mainly to satisfy fork ordering requirements which state that Petersburg fork be set if Constantinople fork is set
if isForkIncompatible(c.ConstantinopleBlock, newcfg.PetersburgBlock, head) {
return newCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock)
}
}
if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) {
return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock)
}
if isForkIncompatible(c.MuirGlacierBlock, newcfg.MuirGlacierBlock, head) {
return newCompatError("Muir Glacier fork block", c.MuirGlacierBlock, newcfg.MuirGlacierBlock)
}
if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) {
return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock)
}
if isForkIncompatible(c.LondonBlock, newcfg.LondonBlock, head) {
return newCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock)
}
if isForkIncompatible(c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock, head) {
return newCompatError("Arrow Glacier fork block", c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock)
}
if isForkIncompatible(c.GrayGlacierBlock, newcfg.GrayGlacierBlock, head) {
return newCompatError("Gray Glacier fork block", c.GrayGlacierBlock, newcfg.GrayGlacierBlock)
}
if isForkIncompatible(c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock, head) {
return newCompatError("Merge netsplit fork block", c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock)
}
if isForkIncompatible(c.ShanghaiBlock, newcfg.ShanghaiBlock, head) {
return newCompatError("Shanghai fork block", c.ShanghaiBlock, newcfg.ShanghaiBlock)
}
if isForkIncompatible(c.CancunBlock, newcfg.CancunBlock, head) {
return newCompatError("Cancun fork block", c.CancunBlock, newcfg.CancunBlock)
}
return nil
}
>Да, довелось как-то ковырять крупный проект >https://github.com/ethereum/go-ethereum вполне себе годно.
Очень годный код пишут в своём крупном проекте, ничё не скажешь :)
Это наверное уровень ООП у голангеров. Упаси господь переходить с пхп на GOвно.
func (c ChainConfig) checkCompatible(newcfg ChainConfig, head big.Int) ConfigCompatError {
if isForkIncompatible(c.HomesteadBlock, newcfg.HomesteadBlock, head) {
return newCompatError("Homestead fork block", c.HomesteadBlock, newcfg.HomesteadBlock)
}
if isForkIncompatible(c.DAOForkBlock, newcfg.DAOForkBlock, head) {
return newCompatError("DAO fork block", c.DAOForkBlock, newcfg.DAOForkBlock)
}
if c.IsDAOFork(head) && c.DAOForkSupport != newcfg.DAOForkSupport {
return newCompatError("DAO fork support flag", c.DAOForkBlock, newcfg.DAOForkBlock)
}
if isForkIncompatible(c.EIP150Block, newcfg.EIP150Block, head) {
return newCompatError("EIP150 fork block", c.EIP150Block, newcfg.EIP150Block)
}
if isForkIncompatible(c.EIP155Block, newcfg.EIP155Block, head) {
return newCompatError("EIP155 fork block", c.EIP155Block, newcfg.EIP155Block)
}
if isForkIncompatible(c.EIP158Block, newcfg.EIP158Block, head) {
return newCompatError("EIP158 fork block", c.EIP158Block, newcfg.EIP158Block)
}
if c.IsEIP158(head) && !configNumEqual(c.ChainID, newcfg.ChainID) {
return newCompatError("EIP158 chain ID", c.EIP158Block, newcfg.EIP158Block)
}
if isForkIncompatible(c.ByzantiumBlock, newcfg.ByzantiumBlock, head) {
return newCompatError("Byzantium fork block", c.ByzantiumBlock, newcfg.ByzantiumBlock)
}
if isForkIncompatible(c.ConstantinopleBlock, newcfg.ConstantinopleBlock, head) {
return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock)
}
if isForkIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, head) {
// the only case where we allow Petersburg to be set in the past is if it is equal to Constantinople
// mainly to satisfy fork ordering requirements which state that Petersburg fork be set if Constantinople fork is set
if isForkIncompatible(c.ConstantinopleBlock, newcfg.PetersburgBlock, head) {
return newCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock)
}
}
if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) {
return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock)
}
if isForkIncompatible(c.MuirGlacierBlock, newcfg.MuirGlacierBlock, head) {
return newCompatError("Muir Glacier fork block", c.MuirGlacierBlock, newcfg.MuirGlacierBlock)
}
if isForkIncompatible(c.BerlinBlock, newcfg.BerlinBlock, head) {
return newCompatError("Berlin fork block", c.BerlinBlock, newcfg.BerlinBlock)
}
if isForkIncompatible(c.LondonBlock, newcfg.LondonBlock, head) {
return newCompatError("London fork block", c.LondonBlock, newcfg.LondonBlock)
}
if isForkIncompatible(c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock, head) {
return newCompatError("Arrow Glacier fork block", c.ArrowGlacierBlock, newcfg.ArrowGlacierBlock)
}
if isForkIncompatible(c.GrayGlacierBlock, newcfg.GrayGlacierBlock, head) {
return newCompatError("Gray Glacier fork block", c.GrayGlacierBlock, newcfg.GrayGlacierBlock)
}
if isForkIncompatible(c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock, head) {
return newCompatError("Merge netsplit fork block", c.MergeNetsplitBlock, newcfg.MergeNetsplitBlock)
}
if isForkIncompatible(c.ShanghaiBlock, newcfg.ShanghaiBlock, head) {
return newCompatError("Shanghai fork block", c.ShanghaiBlock, newcfg.ShanghaiBlock)
}
if isForkIncompatible(c.CancunBlock, newcfg.CancunBlock, head) {
return newCompatError("Cancun fork block", c.CancunBlock, newcfg.CancunBlock)
}
return nil
}
Я думаю нет проблем на GO например перейти со временем, когда этот язык, и наша инфраструктура будет готова. На западе больше популярен для бека typescript, это не значит что если я его выучу то у меня будет будущее.
Java загибается, js нестабилен. Про кресты и шарп даже не упоминаю, слишком абстрактные непопулярные языки для веба
Не забываете в какой стране вы живете, и дай бог битрикс окружающие люди знают хотябы, а именно они по сути вам платят и за ними будущее, а не за Джоном Борном, как раньше. Вот еще посмотеть кто без работы останется
OpenAPI и то лучше код генерирует, чем голанг-макаки. Вот этот код идеальный по мнению эликсирщиков/голангеров/раст
Вот это пишут техлиды-сеньёры на голанге. Я так писал на пхп на 3-й день изучения пхп.
Вот что бывает когда нет ООП. Давайте 100500 параметров вложим в функцию, хуле, ещё и с игрой "пойми что к чему относится".
Да и конечно же 2500 строчек в файл засунем, а там хай разбираются потом что этот файл делает.
Вот что бывает когда нет ООП. Давайте 100500 параметров вложим в функцию, хуле, ещё и с игрой "пойми что к чему относится".
Да и конечно же 2500 строчек в файл засунем, а там хай разбираются потом что этот файл делает.
Это особенность эфира, а не голанга, там было несколько хардфорков, плюс этот клиент работает в нескольких сетях эфира. Там еще много таких мест.
Даже интересно стало как давай для примера напиши точно такой же метод на пхп, чего код делает ты уже понял, проверяет совместимость форков блокчейна, есть конфиг в БД и кофниг из чейна, номер head блока, если не совместим, то возвращает ошибку. На пхп будет такой же код только с исключениями, либо говнище из генерируемого в рантайме кода лол
Напиши такой же метод на пхп. Метод проверяет совместимость форков блокчейна, есть конфиг в БД и кофниг из чейна, номер head блока, если не совместим, то возвращает ошибку. Есть несколько хардфорков из разных сетей, проверь их.
>раст/эликсир - это твоя долгая жизнь с несложными задачами и смерть как программиста. Типа игра подставь своё? Детский сад.
высочайший уровень риторики, бесподобно просто
>Производительный
такой производительный, что начинать оптимизацию проекта на самом популярном стеке нужно с выкидывания самой популярной ORM - Doctrine. Всё потому что пых не компилируемый и без макросов, а также не имеет персистентного рантайма в котором можно было бы оптимизировать таблицы вызова виртуальных функций, и потому абстракции в нём чудовищно дороги.
Даже в руби который тоже динамический ты можешь при старте наманкипатчить своих абстракций в корневые объекты фреймворка - и потом пользоваться ими в рантайме. В пыхе инициализация происходит при каждом вызове http, консольной команды итд. Исключение - консюмеры очередей.
Чтоб критиковать язык более-менее осмысленно, а не просто брехать, нужно понимать для какой задачи он был сделан.
Конкретно го был сделан для решения кадровой задачи гугла.
Кадровая проблема заключалась в том числе в том, что есть много программистов-середнячков, и нужно дать им инструмент, в который они смогут быстро въехать. Го эту задачу решает - го относительно прост, и код на нём понятно что делает практически сразу.
Рекомендую каждому повспоминать как он ломал голову над чужим (или даже над своим годичной давности) пхп-кодом "что он сука делает?".
>Да и конечно же 2500 строчек в файл засунем, а там хай разбираются потом что этот файл делает.
Помогу
find . -name '*.go' -type f -print0 | xargs -0 wc -l | grep -v "_test\.go" | sort -n | tail -10
Там даже на 3102 строчки есть, опенсорс хули ты хотел, но пока ларавель обгоняет
Шок,сенсация!
Дорожный бегун-это кукушка.Л-логика
usort от "user sort" - пользовательская сортировка
usort(array &$array, callable $callback): bool
Sorts array in place by values using a user-supplied comparison function to determine the order.
in-place означает, что она изменяет передаенный ей аргумент
$arr = [1, 3, 2, 4, 6, 5];
usort(arr, ...) - изменит $arr.
это значит что не получится сделать usort([1, 3, 2, 4, 6, 5], ...), нужно обязательно передавать переменную.
О сортирующей функции.
callback
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
callback(mixed $a, mixed $b): int
то есть usort внутри себя прогоняет значения из твоего списка $arr через твою функцию $callback парами. в каком именно порядка она будет сравнивать и по какому алгоритму - нам не говорится и считается что это не важно. важно чтобы ты определил отношение порядка для своего списка.
как определяется отношение порядка? через сравнение больше-меньше-равно.
usort спрашивает у твоей функции callback про некую пару значений - они между собой больше, меньше или равны.
что значит больше, меньше, равны? это значит функция должна вернуть одно из трёх значений: -1, 0, 1
callback($a, $b) вернула -1 - значит $a < $b и после сортировки $a будет находиться до $b в списке
callback($a, $b) вернула 0 - значит $a == $b и после сортировки $a и $b могут находиться в любом положении относительно друг друга (на практике они не перемещаются)
callback($a, $b) вернула 1 - значит $a > $b и после сортировка $a будет находиться после $b
если callback возврает другое значение - оно скастится до инта и сравнится с нулём. true будет расценено как $a > $b, false будет расценено как $a == $b, правда напишет ворнинг что булевый результат deprecated
как использовать?
например у тебя есть объекты
class Friend {
string $name;
int $age;
function __construct(string $name, int $age) {
$this->name = name;
$this->age = age;
}
}
$friends = [new Friend("Alena", 18), new Friend("Yana", 15)];
ты хочешь отсортировать их по возрасту:
usort($friends, function(Friend $a, Friend $b) { return $a->age <=> $b->age; });
Что за странная залупа <=> ?
Это называется spaceship operator. Он возвращает -1, 0, 1 в зависимости от того, левый аргумент меньше, равен или больше правого. Сравнивается тут как пхп сравнивает значения сам по себе. Если ты подсунешь ему строки - он будет сравнивать по правилу для строк и т.д.
Можно и без него
usort($friends, function(Friend $a, Friend $b) { return $a->age > $b->age ? 1 : 0; });
usort от "user sort" - пользовательская сортировка
usort(array &$array, callable $callback): bool
Sorts array in place by values using a user-supplied comparison function to determine the order.
in-place означает, что она изменяет передаенный ей аргумент
$arr = [1, 3, 2, 4, 6, 5];
usort(arr, ...) - изменит $arr.
это значит что не получится сделать usort([1, 3, 2, 4, 6, 5], ...), нужно обязательно передавать переменную.
О сортирующей функции.
callback
The comparison function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
callback(mixed $a, mixed $b): int
то есть usort внутри себя прогоняет значения из твоего списка $arr через твою функцию $callback парами. в каком именно порядка она будет сравнивать и по какому алгоритму - нам не говорится и считается что это не важно. важно чтобы ты определил отношение порядка для своего списка.
как определяется отношение порядка? через сравнение больше-меньше-равно.
usort спрашивает у твоей функции callback про некую пару значений - они между собой больше, меньше или равны.
что значит больше, меньше, равны? это значит функция должна вернуть одно из трёх значений: -1, 0, 1
callback($a, $b) вернула -1 - значит $a < $b и после сортировки $a будет находиться до $b в списке
callback($a, $b) вернула 0 - значит $a == $b и после сортировки $a и $b могут находиться в любом положении относительно друг друга (на практике они не перемещаются)
callback($a, $b) вернула 1 - значит $a > $b и после сортировка $a будет находиться после $b
если callback возврает другое значение - оно скастится до инта и сравнится с нулём. true будет расценено как $a > $b, false будет расценено как $a == $b, правда напишет ворнинг что булевый результат deprecated
как использовать?
например у тебя есть объекты
class Friend {
string $name;
int $age;
function __construct(string $name, int $age) {
$this->name = name;
$this->age = age;
}
}
$friends = [new Friend("Alena", 18), new Friend("Yana", 15)];
ты хочешь отсортировать их по возрасту:
usort($friends, function(Friend $a, Friend $b) { return $a->age <=> $b->age; });
Что за странная залупа <=> ?
Это называется spaceship operator. Он возвращает -1, 0, 1 в зависимости от того, левый аргумент меньше, равен или больше правого. Сравнивается тут как пхп сравнивает значения сам по себе. Если ты подсунешь ему строки - он будет сравнивать по правилу для строк и т.д.
Можно и без него
usort($friends, function(Friend $a, Friend $b) { return $a->age > $b->age ? 1 : 0; });
Более другие инструменты для отладки. Почитай про Zend Studio. Там какие-то удобства в плане наблюдения ошибок - тебе показывается всё вплоть до нотайсов и тебе не нужно для этого печатать логи.
>Пример 1, пиздецовый.
эх вот бы кто-то придумал Open-Close прицнип из SOLID.................
эх вот бы кто-то мог не наследовать SubmarineDriver от CarDriver...
>Open-Close прицнип
это дрочерская иллюзия, мань
он гласит "один раз написали - и не трогаем". и что, все сразу начали писать с первого раза то что нужно? понимать что нужно написать? мир перестал меняться каждую секунду? в проектах перестали появляться новые требования?
этот принцип говорит "если вы шарите класс - сделайте так, чтобы любой мудак мог унаследоваться от него и постарайтесь не менять чтоб у мудаков ничего не рушилось". а потом приходит семвер и говорит "мы понимаем что не менять совсем - невозможно, постарайтесь не менять его хотя бы в мажорной версии"
>>467415
Ещё нужно знать что callback вызывается много раз, поэтому не нужно из неё вызывать ресурсозатратные операции такие как поход в субд.
$ docker run --rm -it php
Interactive shell
php > echo PHP_VERSION;
8.1.10
php > $items = [6,5,100,4,404,3,2,1];
php > $sort_fn = function($a, $b) { echo "comparison $a and $b\n"; return $a <=> $b; };
php > usort($items, $sort_fn);
comparison 6 and 5
comparison 6 and 100
comparison 100 and 4
comparison 6 and 4
comparison 5 and 4
comparison 100 and 404
comparison 404 and 3
comparison 100 and 3
comparison 6 and 3
comparison 5 and 3
comparison 4 and 3
comparison 404 and 2
comparison 6 and 2
comparison 4 and 2
comparison 2 and 3
comparison 404 and 1
comparison 6 and 1
comparison 4 and 1
comparison 2 and 1
>>467415
Ещё нужно знать что callback вызывается много раз, поэтому не нужно из неё вызывать ресурсозатратные операции такие как поход в субд.
$ docker run --rm -it php
Interactive shell
php > echo PHP_VERSION;
8.1.10
php > $items = [6,5,100,4,404,3,2,1];
php > $sort_fn = function($a, $b) { echo "comparison $a and $b\n"; return $a <=> $b; };
php > usort($items, $sort_fn);
comparison 6 and 5
comparison 6 and 100
comparison 100 and 4
comparison 6 and 4
comparison 5 and 4
comparison 100 and 404
comparison 404 and 3
comparison 100 and 3
comparison 6 and 3
comparison 5 and 3
comparison 4 and 3
comparison 404 and 2
comparison 6 and 2
comparison 4 and 2
comparison 2 and 3
comparison 404 and 1
comparison 6 and 1
comparison 4 and 1
comparison 2 and 1
>Очень годный код
Ёб вашу мать, а я на работке на пхп легаси 10ти летней давности ругаюсь.
>>467203
>Метод проверяет совместимость форков блокчейна
Метод это принадлежащая классу функция или процедура, а это просто функция от индуса который не знает про DRY хотя откуда это знать низкоуровневым обезьянам которые лучше просто скопируют ещё один if нежели займуться программированием.
Это у них чистейший код называется.Куда нам пыхерам до такого :)
И эликсирщик ещё и пытается это дерьмо оправдать, что забавно.
Как-то на прошлой работе мне парсеры на чистом функ.пхп вывалили, всё в папочке и файлов штук 20, в каждом файле по 20 функций, чтоб я это в фреймворк засунул, переписав на ооп. Мне вот голанг-код напомнил эти пхп-скрипты, написанные 15 лет назад каким-то студентом.
Я ещё год назад просматривал либы голанга, видимо ничего не изменилось, как писали GOвно и пихали всё в одну функцию, так и продолжают.
>>467166
Сразу видно писали мега-востребованные голанг-сеньёры с мильярд далярау зар.платами. А ещё они любят писать функцию тернарного оператора, потому что тернарника в голанге нет. Или if err != nil вставлять каждую вторую строчку для обработки ошибок, ведь try-catch это для пыхеров всяких, они выше этого!
Нет это не смешной костыль, это высокоархитектурные решения голанг-эликсирщиков!
>чтоб я это в фреймворк засунул, переписав на ооп
нахуя?
чистый в функциональном стиле хорош именно тем что тебе не нужно его переписывать - просто подключаешь, ну там, адаптер хуйнул - и погнали.
фреймворк головного мозга лечить нужно, а не поощрять
>и погнали
Cвойства файла тоже в адаптер запихать надо или же всё таки сделать класс как белый человек?
>фреймворк головного мозга лечить нужно
А функциональщиков пиздить за тупость.
>если ты менеджишь класс CarDriver - ты обязан менеджить все его потомки
Буковка D в SOLID о чём гласит? Правильно, о том, что классы должны зависеть от абстракций, а не от конкретных деталей.
Я просто не понимаю, что ты несёшь? Ты всегда можешь перегрузить метод дабы не менять его в родителе.
>Но всё равно существует влияние родителя Driver, и оно пропорционально количеству наследования
Потому, что ты не понимаешь как правильно использовать наследование вот и всё.
>>467451
>он гласит "один раз написали - и не трогаем"
Он гласит - закрыт для модификации, открыт для расширения.
>чтоб у мудаков ничего не рушилось
Как ты сломаешь код потомков если добавишь пару методов и свойств к родителю? Дабы новые непредвиденные потомки использовали как старые методы так и новые.
Если у мудаков всё рушится при наследовании значит мудаки его и писали.
>И у гошников зепка в полтора-два раза выше чем у похапешника - с этим поспорь.
Кекс. Зэпка от языка не зависит, лол. Зэпка зависит от софтскилов и умения договариваться.
Твоя мамка сосет бесплатно, инстаграм-шлюха за 50к
>Метод это принадлежащая классу функция или процедура, а это просто функция от индуса который не знает про DRY хотя откуда это знать низкоуровневым обезьянам которые лучше просто скопируют ещё один if нежели займуться программированием.
Напиши как правильно, чего стешняешься
>Это у них чистейший код называется.Куда нам пыхерам до такого :)
>И эликсирщик ещё и пытается это дерьмо оправдать, что забавно.
>>467588
>Сразу видно писали мега-востребованные голанг-сеньёры с мильярд далярау зар.платами.
Я не элексирщик и не гофер, просто мимо проходил. Это не называется чистым кодом и я не оправдываю ничего, есть вот такая логика работы, тут она реализована именно так, но мне так и никто не предложил более лучшего кода конкретно для этого куска выше >>467166
Все говорят какое говно, а мне даже стало интересно как бы вы сами не говно написали, несколько раз попросил показать как правильно. Пока вижу только кидание говном, даже как-то на словах никто не сказал что с этим делать. Вы что лучше написать не можете? В треде одни битриксоиды сидят?
>Зэпка от языка не зависит, лол. Зэпка зависит от софтскилов и умения договариваться.
Мань, заканчивай в голову ебаться, речь не про крайние случаи а ля "один мой невыдуманный друг", а про минималку в вилках синьорских вакансий. Помониторь рыночек - потом обсудим.
Полтреда стоит вой какая пыха лёгкая, что любая обезьяна может за вечер вкатиться под пивко, а теперь оказывается что зепка на перегретом рынке труда зависит от софтскилов. Лул.
Мимо другой анон, на го работать круче чем на пыхе. Сначала учишь пыху чтоб вкатиться, потом свичишься в го потому что там больше платят. Знание пыхи для гошника часто плюс, огромная куча кода на го это сервисы для проектов на пыхе.
И в го вкатиться с нуля сложно, а в пыху легко.
Учишь пыху, работаешь до мидла, идешь на го
Так вот, шизы. Если у вас нет конечного алгоритма, который определяет насколько код соответствует каждому из принципов SOLID, то вы просто ебучие сектанты. Обреченные вечно спорить кто пишет по солиду, а кто нет.
Это ж насколько нужно быть ебанутым, чтобы на серьезном ебале спорить о соответвии критерию, не имея алгоритма проверки. Правильно вас руби хуй на хабре попустил.
>Буковка D в SOLID о чём гласит? Правильно, о том, что классы должны зависеть от абстракций, а не от конкретных деталей.
Уточни что ты имеешь ввиду, учитывая что мы говорим о наследовании, а не о передаче аргументов в конструктор.
>Ты всегда можешь перегрузить метод дабы не менять его в родителе.
Да, давай пойдём этим путём. Перегружаем все методы -> родители не нужны -> наследование не нужно -> ООП не нужно (что я и утверждал выше), расходимся.
>Я просто не понимаю, что ты несёшь?
Напомню что я объясняю тезис "в ООП наследование противоречит инкапсуляции", а для этого нужно обсуждать наследование, а не методы его обхода. Ну, это если ты хочешь понять в чём же всё-таки противоречие.
>Потому, что ты не понимаешь как правильно использовать наследование вот и всё.
Покажи как правильно
>Как ты сломаешь код потомков если добавишь пару методов и свойств к родителю? Дабы новые непредвиденные потомки использовали как старые методы так и новые.
Смотря как добавишь, может и сломать. Почему ты приводишь частный практически беспроблемный кейс как аргумент? Или у тебя это единственный кейс?
Скрин твой - говно говна. Во-первых меняется сигнатура (тип аргументов) - это значит забудь про молиморфизм, нахуй тогда нужно ооп? Во-вторых, у тебя появится Circle от Figure, ты забудешь имплементировать getArea - получишь ошибку в расчётах (очень хуёвую ошибку, замечу, которая выявляется только спустя какое-то время работы программы и проёбанные деньги если это финтех). В-третьих на скрине непонятно зачем их вообще наследовать а не сделать отдельными классми. В-четвёртых непонятно нахуй тебе вообще нужны классы когда достаточно пары функций.
Через пару итераций у него родится абстрактная фабрика интерфейсов.
>>467852
> Это ж насколько нужно быть ебанутым, чтобы на серьезном ебале спорить о соответвии критерию, не имея алгоритма проверки. Правильно вас руби хуй на хабре попустил.
Есть критерий. Если бы ты читал книгу Хуйла "Чистая архитектура", ты бы знал что главный критерий качества архитектуры это стоимость внесения изменений.
И Хуйло писал что не лучше неправильно работающая программа с хорошей архитектурой, чем правильно работающая с плохой. Потому что если архитектура есть, программу можно исправить. А если архитектуры нет, то даже правильная програма будет таковой не долго.
Большая часть GRASP и SOLID это традиция инженерной мысли уходящая корнями в века. Вот у меня есть резистор и конденсатор. Но я не могу купить "резистоконденсатор", и конденсатор это одна деталь, который не состоит из двух отдельных компонентов. Иначе бы это было нарушением Low coupling и High Cohesion соответственно.
Единственное где у этого хуесоса они могли бы всплыть это на собеседовании. Я не верю что ему пулл реквест зареджектили потому что букве не соответствует. А на собесе уж извени, проводят поверхностный срез инересов. Хотят узнать читает человек книжки или нет. Я может тоже не со всем в книгах Хуйла согласен, но я их хотя бы читал.
Бла. Бла. Бла. Стоимость изменений какая-то абстрактная. Высрал страницу ни о чем.
Если ты не можешь описать алгоритм для проверки того насколько рандомный код соответствует, например OCP. То ты, хуипутало, ничего ни про какой OCP не знаешь нихуя. И толку от критерия "соответствует OCP" никакого нет.
У тебя самого в голове не щелкает нихуя, когда ты не можешь ответить на вопрос как конкретно проверить SOLID или не SOLID?
А это нам пусть вот этот >>467638 ООП гений расскажет. Хотя с этим кодом он так смачно даванул не снимая штанов, что наверное просто начнет троллинг тупостью.
Со своей стороны могу намекнуть, что он забыл про бульон. И должен быть еще код, который все эти круги и квадраты будет создавать. Хотя повторюсь, он такой хуйни понаписал, что этот бульон - к говну подлива.
>Бла. Бла. Бла. Стоимость изменений какая-то абстрактная. Высрал страницу ни о чем.
Да вполне материальная. Время команды - это деньги компании. Чем дольше команда добавляет фичу, тем хуже архитектура.
> Если ты не можешь описать алгоритм для проверки того насколько рандомный код соответствует, например OCP. То ты, хуипутало, ничего ни про какой OCP не знаешь нихуя. И толку от критерия "соответствует OCP" никакого нет.
Ты наследуешься от класса, либо зависишь от него каким-то другим образом. Держешь экземпляр как DI, ли еще как-то.
Его расширили, у тебя все работает -> соответствует
Его изменили, твой код поломался -> не соответствует
> У тебя самого в голове не щелкает нихуя
Когда джуном был щелкало, а потом разобрался
Знаешь, я тебе даже еще проще объясню. Вот ты скачал себе фреймворк, дапустим ларавель. Ты имеешь возможность расширять\дополнять его компоненты наследованием. Но ты не лезешь в сам код ларавелья, для того чтобы переписать этот класс.
Так вот внутри твоего приложения архитектура должна быть такая же. Есть некое ядро, которее ты расширяешь, но не меняешь.
Великолепный алгоритм, шиз. Просто охуенный, если я правильно понял. Надежный блядь как швейцарские часы. Мы выясняем что код не соответствует SOLID когда код перестал работать. Заебись, четко. Записываем тебя в долбаебы сектанты, которые занимаются толкованием книги Бога Кузи Дяди Боба.
>Знаешь, я тебе даже еще проще объясню.
Мне до пизды твои личные объяснения. На двух шизов три теории. Ты высри мне четкий пошаговый алгоритм хотя бы для проверки кода по SRP. Разобрался он блядь.
> Мы выясняем что код не соответствует SOLID когда код перестал работать
Я пишу фреймворк. В моем фреймворке код работает. Это у тебя в проекте о существовании которого я не знаю, че-то упало.
А упало оно потому что я не соблюдаю OCP.
Алгоритм я тебе уже написал.
Я пишу ядро ОС, ты пишешь драйвер на принтер.
Мои компоненты должны быть достаточно открытым чтобы ты мог добавить свой принтер. И достаточно закрытым чтоб тебе не нужно было просить меня ядро запатчить под нужны твоего принтера.
Ты либо никогда не работал над большими проектами, либо троллишь тупостью.
Хватит нести хуйню ни о чем. Принтеры блядь какие-то приплел в пхп треде.
Если ты не можешь сказать соблюдает ли твой код OCP во время написания, то ты не сможешь сказать этого и про любой другой код.
Не позорься, просто блядь хватит переписывать одну и туже хуйню на новый лад. Если ты не можешь применить алгоритм проверки к конкретному куску кода, и получить результат, то вся эта около солид болтовня просто сектантский бред. И с каждым новым высером ты это подтверждаешь.
>Стоимость изменений какая-то абстрактная
>Если ты не можешь описать алгоритм для проверки
Ты ещё до определения "архитектура" доебись
Я тебе дал алгоритм определения. Если твой кусок кода можно расширять наследуясь от него, добавляя стратегии или регистрируя компоненты, то соответствует.
А если нужно в сам твой кусок кода лезть чтоб добавить функционал, значит нет.
Определять научишься когда джуном перестанешь быть.
Все, пошел троллинг тупостью. В игноре.
>А сколько ты мне за это заплатишь?
Начались виляния, тогда на словах скажи чтобы ты тут сделал как бы реализовывал подобное
>Если ты не можешь применить алгоритм проверки к конкретному куску кода
Ну а твои предложения какие?
Какое нахуй предложение?
Я говорю что без конкретных измеримых критериев, которые можно применить к проектируемому коду вся это солид возня сводится к банальному "нормально делай - нормально будет". А все попытки утверждать что чей-то код написан или не написан по солиду просто ебучее сектантство и заряжание воды.
То есть, нахуй SOLID, ты это хочешь сказать?
>"нормально делай - нормально будет"
На сам ты чем руководствуешься и как оцениваешь что нормально а что нет?
Нисколько, это опенсорс
Пиздец вас промыли канеш. Погугли code metrics. Для затравочки можешь почитать что такое LCOM4 https://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4.
>Уточни что ты имеешь ввиду
Имеется ввиду то, что у базового класса должны быть методы или свойства отвечающие за общие характеристики объекта,
например цвет, вес, заведи двигатель или покажи тип двигателя.
А не конкретные кейсы для потомков по типу GetCountWheels, абстракции, а не частности u know.
>учитывая что мы говорим о наследовании, а не о передаче аргументов в конструктор.
Что ты несёшь? Как передача аргументов в конструктор противоречит наследованию?
>Перегружаем все методы
Ты читаешь сквозь пальцы? Ты же реально ебанутый функциональщик несущий хуйню.
>а для этого нужно обсуждать наследование
Именно для этого было написано от чего должны зависеть потомки и почему ты идиот если завязываешь родителя на частности его потомков.
>Смотря как добавишь, может и сломать
У тебя это всё ломается от того, что ты не понимаешь для чего и как используется наследование.
>Покажи как правильно
Как правильно указать в родителе общие характеристики для потомков?
А в своём говнопримере я проебался с тем, что передаю аргументы в сигнатуру метода когда должен был в перегрузке использовать свойства объекта.
>А в своём говнопримере я проебался с тем, что передаю аргументы в сигнатуру метода когда должен был в перегрузке использовать свойства объекта.
Еще один шаг к абстрактной фабрике. Может перестанешь тянуть кота за яйца и уже вывалишь нам её? Весь этот душистый навоз из двойных иерархий, с пустыми переопределенными методами и этими сочными не используемыми родительскими свойствами?
>Может перестанешь
Может ты пойдёшь нахуй из треда и найдёшь себе работу? Если не понимаешь ооп - можешь идти смело нахуй т.к тебе функциональщику одебилившему никто ООП разжёвывать не обязан.
Тебе в последний раз как полному долбоёбу так уж и быть поведаю
У тебя например есть базовый класс репозитория который имеет методы подключения к бд, отключение от неё, проверка состояния подключения и т.п. то есть общие свойства и методы для работы с бд.
И есть наследники где каждый для работы с одной конкретной таблицей т.е каждый потомок умеет подключаться к бд, сделать свои частности и отключится.
Так яснее, что есть общности, а что есть частности?
Так понятнее почему при грамотном наследовании ты не сможешь сломать родителя потомком?
Родителю похуй на то кто от него наследуется т.к он делает общую реализацию, а не частную ведь он является фундаментом для своих наследников.
>>468345
>Зачем нужен абстрактный класс?
Чтобы принуждать наследующиеся классы реализовать какие либо методы или делать базовую реализацию для них.
>тобы принуждать наследующиеся классы реализовать какие либо методы или делать базовую реализацию для них.
нихрена не понятно.
Так яснее?
Мне не надо нихуя объяснять. Я все понял как только увидел реализацию подсчета площади фигуры в родительском методе. С двумя параметрами сука. Перегрузки со сменой типов это конечно веселый номер, но из другой программы.
После того как тебя ткнули в кучу говна, которую ты навалил ты попытался спрыгнуть:
>передаю аргументы в сигнатуру метода когда должен был в перегрузке использовать свойства объекта
Человеку неопытному может и не очевидно куда все катится, но я то тебя сразу выкупил. Сделать полиморфную структуру метода для разных фигур не получится, но с какого хуя это получится для внутренних свойств объекта? Их ведь придется заполнять через конструктор, а это точно такой же метод, как и метод вычисления площади. Он так же не удовлетворяет необходимый полиморфизм.
Ответ очевиден: код, который создает объект фигуры должен уметь различать по переданным данным что за фигуру ему нужно создать, и в зависимости от этого вызывать нужный конструктор и передавать туда нужное количество параметров. Для круга радиус, для многоугольника координаты вершин.
Если делать это по ООП, а не в одном методе, то единственный вариант это иерархия объектов фабрик, каждая из которых знает как создать соответствующую фигуру. А завязано все будет на абстрактную фабрику, которая принимает данные любой фигуры и возвращает объект типа Figure. Опа и кода x2. А еще ведь нужно написать конфиги для DI. Опа еще x2. А когда нужно будет поменять что-то близкое к вершине иерархии опа и работа удесятиряется. И этот запах. Запах кучи навоза, которую ты навалил.
Иерархия геометрических фигур это классика критики ООП. И нуб трапа. Потому что попытка создать такую сложную иерархию обречена на провал изначально, в ней слишком много частностей, а фигуры (как и много что еще внезапно) в реальной жизни в принципе не иерархичны. В итоге приходится писать специальный код, который нужен исключительно для поддержки полиморфизма, которого принципиально нет в бизнес модели (в данном случае в геометрии).
А самое смешное что всю эту неподдерживаемую громоздкую поебень можно заменить простейшей композицией. Просто передав в фигуру в калькулятор площади. Ой вей, это же ООП, а что куда нужно передать?
Мне не надо нихуя объяснять. Я все понял как только увидел реализацию подсчета площади фигуры в родительском методе. С двумя параметрами сука. Перегрузки со сменой типов это конечно веселый номер, но из другой программы.
После того как тебя ткнули в кучу говна, которую ты навалил ты попытался спрыгнуть:
>передаю аргументы в сигнатуру метода когда должен был в перегрузке использовать свойства объекта
Человеку неопытному может и не очевидно куда все катится, но я то тебя сразу выкупил. Сделать полиморфную структуру метода для разных фигур не получится, но с какого хуя это получится для внутренних свойств объекта? Их ведь придется заполнять через конструктор, а это точно такой же метод, как и метод вычисления площади. Он так же не удовлетворяет необходимый полиморфизм.
Ответ очевиден: код, который создает объект фигуры должен уметь различать по переданным данным что за фигуру ему нужно создать, и в зависимости от этого вызывать нужный конструктор и передавать туда нужное количество параметров. Для круга радиус, для многоугольника координаты вершин.
Если делать это по ООП, а не в одном методе, то единственный вариант это иерархия объектов фабрик, каждая из которых знает как создать соответствующую фигуру. А завязано все будет на абстрактную фабрику, которая принимает данные любой фигуры и возвращает объект типа Figure. Опа и кода x2. А еще ведь нужно написать конфиги для DI. Опа еще x2. А когда нужно будет поменять что-то близкое к вершине иерархии опа и работа удесятиряется. И этот запах. Запах кучи навоза, которую ты навалил.
Иерархия геометрических фигур это классика критики ООП. И нуб трапа. Потому что попытка создать такую сложную иерархию обречена на провал изначально, в ней слишком много частностей, а фигуры (как и много что еще внезапно) в реальной жизни в принципе не иерархичны. В итоге приходится писать специальный код, который нужен исключительно для поддержки полиморфизма, которого принципиально нет в бизнес модели (в данном случае в геометрии).
А самое смешное что всю эту неподдерживаемую громоздкую поебень можно заменить простейшей композицией. Просто передав в фигуру в калькулятор площади. Ой вей, это же ООП, а что куда нужно передать?
>Эта стена текста
>Сделать полиморфную структуру метода
>Начал про наследование
>обоссали
>перекатился в полиморфизм и фабрики
Нахуй иди функциональщик, как напишете годный браузер с расширяемым функционалом или игровой движок, приходи.
>Нахуй иди функциональщик
С кем ты блядь разговариеваешь полуебок? Какой нахуй функциональщик? Я сегодня впервые за пол года в этот тред зашел.
Показывает что это ещё сырая заготовка, и инстанцировать его не нужно.
Ты всё правильно пишешь - запихивание геометрических фигур в иерархию наследования - это провал. ИЧСХ, оопешники такой простой пример не выкупают, у них срабатывает мышление "ну ведь круг, овал и треугольник - это всё геометрические фигуры, а значит они должны наследоваться от Figure, обязаны просто, аааээ (пыхтит впихивая)". Неспособны выкупить, потому что оопешники знают только оопэ.
А ещё ООПшники рвутся на простом примере: есть игра где юнит бьёт юнита, как описать расчёт урона - unit.hit(opponent) или opponent.hit_by(unit)
>оопешники знают только оопэ
Потому что оопэ с наследованием - не самый лучший инструмент, и любопытный программист с кругозором найдёт что-то получше. Во всяком случае топить за ооп он точно перестанет. Ну классы и классы, где подходят - там использую.
- объектная модель в редакторе текстового документа, векторного изображения или DAW
- объектная модель GUI
- объектная модель системы доставки еды из ресторанов
И т.д, а то вы берете какие-то дурацкие примеры, где надо круг унаследовать от прямоугольника и пытаетесь на их основе доказать, что ООП не нужен.
> А ещё ООПшники рвутся на простом примере: есть игра где юнит бьёт юнита, как описать расчёт урона - unit.hit(opponent) или opponent.hit_by(unit)
Можно вообще вынести это в отдельный сервис.
ООП прекрасный инструмент. Давай возьмем пример: ООП модель для GUI. У тебя есть объект TextField, и у него есть метод setText. Все логично, есть класс, в нем есть методы.
А теперь возьмем функциональщину. Есть некий тип TextField, методов у него нету, а просто есть никак с ним не связанная отдельная функция setText. То есть, у тебя тысячи никак не сгруппированных функций. Более того, из-за иммутабельности любое изменение виджета создает новый экземпляр, и все, кто хранил ссылку на виджет, оказываются с устаревшей копией виджета. Красота.
Абстрактный класс это недописанный класс, в котором чего-то не хватает и потому из него нельзя создавать объекты. Но от него можно наследоваться и добавить недостающие методы.
То есть, абстрактный класс обычно используется как база для наследования.
Например, ты делаешь какой-нибудь бухучет и у тебя есть ЮрЛица и ФизЛица. Ты можешь их унаследовать от базового класса Субъект, и сделать его абстрактным, чтобы никто не пытался создать Субъект вместо Юрлица.
Не понял твой вопрос.
WSL это среда для выполнения Линукс программ. Ты устанавливаешь WSL, устанавливаешь в него нужную ОС вроде Убунту или еще что-то, ставишь туда нужные программы и запускаешь.
Что блядь значит "не связанная"? Структура и функции находятся в одном модуле или пакете, есть типизация и уровни доступа. Все инструменты для инкапсуляции и полиморфизма. Че ты несешь вообще?
Расскажи нам про используемые тобой принципы и алгоритм их проверки. Или ты просто лепишь код как придется?
Также, расскажи мне про принципы написания музыки и алгоритм их проверки.
Только вот Го не такой простой, как хочется верить. Вот пример статьи с описанием труднообнаружимых, но легко создаваемых гонок в Го-программах: https://www.uber.com/en-FI/blog/data-race-patterns-in-go/
Ваши хваленые асинхронность и многопоточность в итоге оборачиваются головной болью и необходимостью нанимать дорогих элитных разработчиков для разгребания багов.
Ты пишешь какую-то чушь. В Руби вызовы методов разрешаются на этапе компиляции и в рантайме поиска метода в объекте не происходит? Точно также они ищутся динамически при каждом вызове.
В PHP есть тайп-хинты и классы неизменяемы, что позволяет в теории оптимизировать эти вызовы. В Руби такой возможности даже в теории нет.
>Все логично, есть класс, в нем есть методы.
главное повторять почаще эту мантру, что есть класс, а в нём есть методы
>у тебя тысячи никак не сгруппированных функций
так сгруппируй их, дебилушка
>из-за иммутабельности любое изменение виджета создает новый экземпляр
от рантайма и компилятора зависит. в эрланге да, в кложуре - нет, в расте можно и так и так, в хаскеле скорее всего как в кложуре. что касается эрланга - для малых данных типа тупла из трёх u64 нет разницы по перфу передаёшь ты их по значению или по ссылке, по значению даже быстрее получается. понимаешь? твоё оопешное говно аллокатит память в куче, а из функции а передаёт в функцию б указатель на эту память, а указатель - это тоже данные.
>все, кто хранил ссылку на виджет, оказываются с устаревшей копией виджета
когда функция а передаёт данные в функцию б - она перестаёт с ними работать, поэтому нет, они не оказываются с устаревшей копией виджета. в то же время в ооп если у тебя две структуры получают rw-доступ к одним и тем же данным - ты получаешь архитектурную проблему, порождающую неконсистентность и прочее говно.
ты не понимаешь что такое фп, не пиши про него больше.
В Го действительно ужасный недоделанный ООП, хотя объекты и методы есть. Например, в объекте нельзя задавать полям значения по умолчанию. Нет функций с keyword-аргументами.
Самая раздражающая вещь - это использование регистра первой буквы имени поля/метода, чтобы сделать его публичным/приватным. Какое же это уродство, когда у тебя в страктуре половина полей с маленькой буквы, а половина с большой. И как разражает необходимость искать и менять идентификатор, когда меняешь видимость.
И эти люди еще что-то говорят про PHP. Вы бревно в своем глазу не замечаете.
> от рантайма и компилятора зависит. в расте можно и так и так, в хаскеле скорее всего как в кложуре.
В Хаскелле все значения иммутабельны. Раст не относится к функциональным языкам.
Меня от го блевать тянет. Но у го есть оно неоспоримое преимущество: это единственный выход из пхп экосистемы. Зайди на хх и открой десять синьорных вакансий. В каждой будет написано "желательно го". И в каждой крупной компании топ сеньоров на пхп больше не пишет.
> для малых данных типа тупла из трёх u64 нет разницы по перфу передаёшь ты их по значению или по ссылке
Ты внимательно читаешь или нет? Если ты передаешь виджет по значению, то при его изменении у всех получателей остается устаревшая копия.
Передача объектов по ссылке делается не для микрооптимизации, а для обеспечения согласованности.
>для разгребания багов
так ты пиши без багов сразу
>хваленые асинхронность и многопоточность в итоге оборачиваются головной болью
очевидно что есть готовый платить заказчик, который хочет не тухлого вялого, а нормального перформанса в 50 раз выше чем на однопоточном пхп. справишься ли с этим лично ты - да похуй. есть кто справится.
>В Хаскелле все значения иммутабельны
в кложуре тоже
>Раст не относится к функциональным языкам.
ты не понимаешь смысл слов которые произносишь, поэтому скипану
Ты, клоун, который не может справиться с утечкой памяти. Освой memprof и он тебе покажет стектрейс мест, где создаются лишние объекты и ты сможешь их исправить.
Конечно, лучше бы если он показывал, в какой переменной хранится утекшая память, но что есть, то есть.
И сразу скажу, что одной из причин утечки может быть использование dev-режима вместо prod в Симфони.
Нет, почитай урок про обработку форм: https://github.com/codedokode/pasta/blob/master/forms.md
Например, при ошибках надо не показывать белый экран с одной надписью, а надо показывать ту же форму с заполненными данными и сообщением об ошибке.
>Если ты передаешь виджет по значению, то при его изменении у всех получателей остается устаревшая копия.
я тебе на это ответил где-то в том же комментарии. этой проблеме столько же лет сколько программированию в целом, и решению столько же лет. нужно просто не ларавельку задротствовать, а начать программировать
>передача объектов по ссылке
>для обеспечения согласованности.
орнул как представил. одновременно пишущие воркеры в объект по ссылке. согласованность так прёт из всех щелей.
согласованность, мань, будет только если ты обернёшь данные с конкуретным доступом в мьютекс. а мьютекс - это просевший перф и/или дедлоки.
В идеале ты определяешь это профайлером. То есть, смотришь, какие функции долго выполняются, и если эту функцию проще всего закешировать,то кешируешь.
Минус кеширования в том , что данные в кеше могут стать неактуальными и надо их удалять или заменять.
Ну например ты закешировал список лучших друзей пользователя в соцсети, он удалил друга, а в списке он все еще показывается.
>одной из причин утечки может быть использование dev-режима вместо prod в Симфони
доктрина в dev течёт как шлюха, у неё логирование не отключается или ещё какая херня
тебе выше правильно написали - сначала профайлинг приложения в целом, выявление медленных мест, потом возможно кеширование
Так блядь. Чулочники, покиньте тред, не доводите суки.
День добрый. Пишу доклад про заглавные буквы. Может кто сказал бы какие моменты не нравятся или наоборот в нажатии шифта.
>не нравятся
Отсутствие строгой типизации, я очень был бы рад включить строгую типизацию на весь проект.
Дженериков, Автолоадера, нормального GC и Асинхронности из коробки.
Его можно и самому написать легко, однако этот автолодер реализуется на уровне самого языка, а не на уровне интерпритатора, что повысило бы производительность на MVC фреймворках.
А вдруг тебе не требуется композер на проекте? Пишем ручками или ставим композер. Много проектов стало зависеть от композера, не находишь?
толстовато
>Много проектов стало зависеть от композера, не находишь?
Ты рофлишь что-ли? Нет ни одного проекта без композера. Это как сказать "че-то много проектов гит стали использовать".
И много сейчас проектов на чистом пыхе? а вот про то что должно быть в языке согласен, немного охуел когда на чистом пыхе писал в вузе и осознал, что нормального автолоадинга то и нет
>Нет ни одного проекта без композера
В этом и вся проблема, что пыха в современных реалиях впадает в зависимость от стороннего пакета и не имеет своего.
>>469822
>И много сейчас проектов на чистом пыхе?
Новых нет, а легаси которые писались ещё на заре фреймворков полно. Я вот хотел забавы ради написать свой MVC фреймворк через рефлексию на чистом пхп, ядро сделал и забил когда осознал, что композер мне пригодится так или иначе т.к без него нереально подтягивать репозитории с бандлами, грустно в общем это всё. Вот бы найти выходы на разрабов дабы поднять этот вопрос на повестку дня.
так ты легаси на условную 9 или 10 пыху и не переведешь никак, слишком много депрекейтнуто в 8 и будет удалено в 9
>А вдруг тебе не требуется композер на проекте?
во всех языках есть менеджеры пакетов. радуйся что в пыхе появился хоть какой-то. до этого были боль и анальные страдания
>>для разгребания багов
> так ты пиши без багов сразу
Ну вот профессиональные разработчики из Убера не смогли писать без багов, и элитным разработчикам приходится их выискивать и исправлять.
Это я к рассуждениям о том, что на Го просто писать. Проще писать на PHP - там описанные в статье баги из-за однопоточной умирающей модели просто напросто невозможны. Как видишь, в PHP довольно умная stateless архитектура (также, она здорово снижает вероятность утечек памяти).
Если ты запускаешь программу на компьютере, в командной строке, и не выводишь \n после последней строчки, то подсказка командной строки выведется на той же строчке, что и вывод программы.
>>471192
var_dump выводит тип данных и значение. Для строк пишется не число букв, а число байт, которые текст занимает в памяти. Один символ в utf-8 может занимать от 1 до 4 байт. Буквы кирилицы занимают 2 байта каждая.
Спасибо! Правда, я не до конца соображаю, по какому принципу работуют \n-ки. Я понимаю, что это перенос строки, но не понимаю в каких случаях они должны быть. То есть, перенос строки нужно делать, если строк, начинающихся с echo, больше чем одна? Ну, как на пикче выше.
С другой стороны, здесь два переноса строки написаны в одной строчке
Перенос делается в конце каждой строки. То есть, если выводишь 1 строку, то поставь в конце \n. Если 2 строки, то \n после каждой и так далее.
Так тоже можно делать. При этом из-за переносов выведется 2 строки и после последней строки тоже будет перенос, так что последующий текст будет с новой строки.
>Я понимаю, что это перенос строки, но не понимаю в каких случаях они должны быть
в тех случаях, когда тебе нужен перенос строки, очевидно же
>не до конца соображаю, по какому принципу работуют \n-ки
поэкспериментируй, всё сам поймёшь
Это называется трейдофф, чуть больше рисков сделать баг за счет сильно большей производительности.
Я вот фулл тайм разрабатываю на го последние лет пять и что-то на баги с гонками практически не натыкался. 99% таковых происходят из-за неопытности разработчиков и хуёвости архитектуры.
У асинка гошного типа есть несколько простых правил, которые на самом деле сводятся к тому, что
1 - общий стейт всегда должен быть под блокировками
2 - стейт не должен протекать в контекст исполнения, то есть никаких указателей, только копирование
В этом случае ошибки исключены принципиально. И вся хуйня происходит тогда, когда долбоебы, буть они хоть из убера (там вообще-то тоже дофига айти-скама нанято, и джунов, и миддлов) нарушают эти базовые правила, по незнанию или по глупости.
Плюс, в го как раз есть более или менее четкие паттерны, это таск пул через вейтгруппы, воркер пул, шаред кэш через rwmutex и ещё несколько. Подавляющая часть задач сводятся к ним и поэтому их можно решать вообще не думая.
Я не спорю, что го предоставляет чуть большие требования к квалификации разработчиков, чем php, это бесспорный факт и можно об этом догадаться хотя бы по зарплатам и спискам требований к гошникам и пыхерам. Просто не нужно говорить, что типа го такой пиздец сложный и требует академиков для разработки, нет, всё очень тривиально, если ты просто один раз потратишь вечер и разберешься в вопросе.
>>471025
> Ну вот профессиональные разработчики из Убера не смогли писать без багов, и элитным разработчикам приходится их выискивать и исправлять.
Я большую часть аргументов написал выше, но вот ещё парочка:
1 Хватит превозносить разработчиков в крупных конторах! 99% девелоперов - сраные индусы, нанятые тупыми HRюшами по объявлению, в крупных конторах у них просто разрплата больше. Я знаю множество девелоперов из разных крупных контор в том числе и из гугла, убера и тп, поверьте, там встречается такой же ядерный пиздец и некомпетентность, как и везде.
2 Никаких элитных разработчиков для исправления "багов" описанных в статье не требуется. Эта статья уровня джуномиддла, я не шучу сейчас совершенно.
мимо-гошник, работающий в крупной западной конторе
Это называется трейдофф, чуть больше рисков сделать баг за счет сильно большей производительности.
Я вот фулл тайм разрабатываю на го последние лет пять и что-то на баги с гонками практически не натыкался. 99% таковых происходят из-за неопытности разработчиков и хуёвости архитектуры.
У асинка гошного типа есть несколько простых правил, которые на самом деле сводятся к тому, что
1 - общий стейт всегда должен быть под блокировками
2 - стейт не должен протекать в контекст исполнения, то есть никаких указателей, только копирование
В этом случае ошибки исключены принципиально. И вся хуйня происходит тогда, когда долбоебы, буть они хоть из убера (там вообще-то тоже дофига айти-скама нанято, и джунов, и миддлов) нарушают эти базовые правила, по незнанию или по глупости.
Плюс, в го как раз есть более или менее четкие паттерны, это таск пул через вейтгруппы, воркер пул, шаред кэш через rwmutex и ещё несколько. Подавляющая часть задач сводятся к ним и поэтому их можно решать вообще не думая.
Я не спорю, что го предоставляет чуть большие требования к квалификации разработчиков, чем php, это бесспорный факт и можно об этом догадаться хотя бы по зарплатам и спискам требований к гошникам и пыхерам. Просто не нужно говорить, что типа го такой пиздец сложный и требует академиков для разработки, нет, всё очень тривиально, если ты просто один раз потратишь вечер и разберешься в вопросе.
>>471025
> Ну вот профессиональные разработчики из Убера не смогли писать без багов, и элитным разработчикам приходится их выискивать и исправлять.
Я большую часть аргументов написал выше, но вот ещё парочка:
1 Хватит превозносить разработчиков в крупных конторах! 99% девелоперов - сраные индусы, нанятые тупыми HRюшами по объявлению, в крупных конторах у них просто разрплата больше. Я знаю множество девелоперов из разных крупных контор в том числе и из гугла, убера и тп, поверьте, там встречается такой же ядерный пиздец и некомпетентность, как и везде.
2 Никаких элитных разработчиков для исправления "багов" описанных в статье не требуется. Эта статья уровня джуномиддла, я не шучу сейчас совершенно.
мимо-гошник, работающий в крупной западной конторе
Неправильно конвертируется дата в unix. Я сконвертировал одну дату в таймзоны с одинаковым сдвигом (+2), но получаю час разницы в unix
А как это сочетается с тем, что сдвиг +2 у таймзон одинаковый, а unix время у одинаковых дат с этими таймзонами разное? В общем я нашёл такие баги в PHP, выглядит прям очень похоже на мои:
- https://github.com/php/php-src/issues/9382
- https://github.com/php/php-src/issues/8730
В общем, решил вот таким костылём: https://3v4l.org/5JAvE
>1 - общий стейт всегда должен быть под блокировками
>2 - стейт не должен протекать в контекст исполнения, то есть никаких указателей, только копирование
Двачаю, я также пишу на расте, контекст приложения иммутабельный. Никогда не передаю ссылку когда использую асинхронность и чтобы получить результат жду когда отработают все футуры
>rwmutex
И собственно это добро тоже есть. Я вообще не понимаю как так можно на эти ошибки нарваться.
Мимо раст-кун
Вообще, обсуждение сроков выплаты зп лучше делать до начала работы, а не после. Если вы друг друга не знаете, то вполне нормально получить зп после первой недели, если ты за неделю можешь сделать какую-то задачу.
Зачем им фото паспорта, не очень понятно. Если тебе не хочется давать свой паспорт, ты можешь купить рисованные сканы или вообще левые сканы, но надо понимать, что если деньги переводит юрлицо, то оно в переводе указывает ФИО получателя, хотя банки не всегда его проверяют. А если делают обычный перевод с карты на карту то некоторые банки показывают данные получателя. Например, Сбер показывает имя и отчество получателя по номеру карты, некоторые банки его пишут в истории переводов. Если ты дашь левые данные, то они могут не сойтись.
Также, тебе стоит подумать о налогах. Как ты будешь объяснять налоговому инспектору поступление денег на счет и как ты их задекларируешь, не имея подтверждающих документов.
Фото паспорта у меня просили только при устройстве на официальную работу. На всяких шаражках ни разу, да и не нужно оно кмк. Муть какая-то. Я бы хуй отправил. Паспортные данные - можно, да и то необходимый минимум. Фото паспорта - хуй.
>нужно для сбора данных рабочих этой галеры
А, это любимая отмазка клуш - "у меня программа требует".
Они собирают данные для внутренних целей.
Возможно это в благих целях, типа чтобы в случае вопросов со стороны налоговой или органов объяснить что они отправили деньги не арабским террористам, а конкретному чуваку с конкретным паспортом. Но хуй их знает, как и где они хранят эти фотографии.
Наверни курс Лаврика с торрентов по основам пхп.
https://github.com/nielsvandermolen/example-symfony-messenger
Анонче, ты уж сам решай, что для тебя лучше
Погуглив стало ясно, что для этого на уровне кода есть либо threading.Timer либо asyncio.sleep.
Решил пока написать на асинхронно слипе, т.к. он вроде просто понятнее.
Как я понял, при вызове такой функции в event loop будет поставлен таймер, а сама программа может выполнять дальше. И всякий раз при вызове этой функции в event loop будут отгружаться новые таймеры, ну а когда слип закончится будут отправлять запросы.
Кто шарит в асинхронность, подскажите плиз - правильно я понял?
```
async def _asend_task(self, task, time_to_run):
await asyncio.sleep(time_to_run)
self.send_request(task)
```
Тебе в тред к питонистам, тут битриксоиды сидят в-основном, у них только что от слов async и event loop анусы поседели.
тут только костыли через крон-сервисы
https://symfony.com/doc/current/the-fast-track/en/24-cron.html
при переходе на следующую страницу сначала редирект на ту страницу, которая нужна, с неё редирект на страницу, на которую предполагался переход рака яиц каждому кто это сделает
> Как я понял, при вызове такой функции в event loop будет поставлен таймер, а сама программа может выполнять дальше
О да, очень похоже, что он спрашивает именно как "аналогично закостылить"
Да, используй стандартную команду consume-messages. Незачем тут изобретать велосипед.
Если ты запускаешь в Докере локально, учти, что при выбросе исключения команда падает и тебе нужно предусмотреть скрипт для перезапуска. Можно, например, сделать такой bash script:
while true; do php ./bin/console .... ; done
Если ты запускаешь на проде, то используй supervisor и запусти N процессов, если у тебя много свободных ядер.
>Если ты запускаешь на проде, то используй supervisor и запусти N процессов
так и сделал локально.
>The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running
Я не знал
Как правильно посчитать number/path при вставке чтобы не получилось неконсистентность структуры именно из-за параллельной записи.
Я так понимаю транзакции для этого и созданы, но они же не блокируют параллельную запись в таблицу или блокируют?
всего лишь за 3 недели... я у мамы очень умный.
нашел как это называется - потеряные обновления.
Понятное дело что для этого мы и пишем parent_id, но хотелось бы понять как это решается в других случаях, когда нет parent_id
Читай про ACID и уровни изоляции. Также можешь почитать про acquisition локи и select for update для точечных блокировок.
тебе это не нужно
>пхп-эксперт
Бля, чел, базу тащишь. У меня был путь такой:
Пхп полное говно, на нем можно писать только википедию.
Потом я начал работать на пхп, писать на нем довольно сложную хуйню, с отдельными сервисами в супервизоре. В компаниях где я работал одни команды писали композерный пакет, другие использовали и тд. И я понял что пыха может гораздо больше чем о ней говорят хуилы на дваче.
А потом я ушел в го и подумал яка же пыха ебланьска.
Прихожу к мнению что раз в 15 лет нужно выпускать новый ЯП, потому что архаичные языки включая пыху реально во многих местах костыльные
Та же херня, тоже начинал с php, поддерживал проекты до 7 пыхи включительно, потом перекатился окончательно. Пыха была хороша, как язык для вката и заработка копеечки будучи студентом, но стоило перейти на нормальные языки джаву и го, как я сразу ощутил всю костыльность пыхи и понял, что проебал несколько лет серьезного опыта и денег.
Понятно, что на любом более или менее высокоуровневом языке можно написать вообще всё что угодно, а если чего-то нет - то это "что-то" можно закостылить, завелосипедить или написать самому. Даже на баше или перле или vba можно написать серьезный проект с микросервисами, сокетами, репликацией, сборкой мусора, очередью задач и тд и тп. Но только зачем?
Будучи бывшим php'шником сам, я знаю ответ: потому что если никаких других языков ты не знаешь, а учить их долго и сложно, а в php и фреймворки рядом, да вроде и работа есть, то зачем что-то менять? Я тоже в своё время срался в местных тредах, защищая пыху.
А сейчас понимаю, что ошибкой было не слушать других и ошибкой было на любой аргумент пытаться придумать свой, вместо того, чтобы пытаться понять, что тебе вообще пытаются объяснить.
Если бы у меня была возможность вернуться назад во времени, я бы сказал себе, что нет смысла изобретать велосипеды, мир сильно больше, чем кажется, а другие языки вполне преодолимы и программировать на них сильно комфортнее, а возможностей они дают намного больше.
Говорят, чтобы старый код работал.
Он не нужен, а вот call_user_func_array ещё теоретически пригоден для всяких хаков с передачей ссылок и тп.
Впрочем и то, и другое, и третье это динамикодрисня всё, в нормальном коде ты почти никогда не должен это писать. Максимум, если какие-нибудь библиотеки пишешь.
Где можно почитать/посмотреть что-то внятное про DI-контейнеры?
Залил на beget.com тестовый проект, но почему-то не работают сессии, на самом хостинге сессии поддерживаются, версия php там 5.6.40.
Такой код работает на локальном серевере, но не на хостинге:
session_start();
if($_SERVER['REQUEST_METHOD'] == 'GET') {
$_SESSION["opreratorId"] = $_GET['id'];
}
На страницу приходит гетом id и должен сохраниться в сессию, но этого не происходит.
Очевидно, на сервере, а у тебя файловый менеджер скорее всего смотрит куда-то в /home.
Но это не важно, нахрена тебе вообще этот путь? Вызови phpinfo(); и посмотри, что у тебя там настроено.
Вот такое, вроде все включено, тогда почему не сохраняет в сессионный массив?
Может быть миллион причин, к примеру, кривые права на /tmp/php_sess
Смотри варнинги и логи, смотри права, проверяй настройки. Если ну совсем ничего не обнаружишь, напииши в саппорт хостинга
По рыночку ты еще 10500 разной хуйни должен уметь, как то:
композеры, фреймворки, срмки, ну и js еще знать лул.
Можно как то интегрировать swoole в приложение на php? Они могут работать в одном процессе? Если же это будет 2 отдельных процесса, то как они будут взаимодействовать?
railway.app
>как они будут взаимодействовать?
как два отдельных процесса
гугли виды IPC (inter-process communications)
Laracast'ы
Што должен знать мидл?
<xxx> В похапе мидл – это человек, который может сделать весь проект от начала до конца сам, без ансамбля. Соответственно, джуниор – который не может, синьор – который не будет.
Бля, вот это сто проц в точку. Уже лет пять к фронту не прикасался тупо зашквар.
Laracasts очевидный - курс Laravel 8 From Scratch
Ты правильно заметил проблему. Действительно, возможна ситуация, что например 2 человека одновременно пытаются ответить на один и тот же коммент и для них генерируется одинаковый path. Это либо приведет к тому что у тебя будет дублирующийся path, либо к ошибке, если ты догадался поставить уникальный индекс на пару (id поста, path).
Такая проблема возникает и в других приложениях. Например, если в магазине остался 1 товар и 2 человека пытаются его купить, может получиться что они оба успешно создадут заказ на него.
Что касается транзакции, она здесь нужна, но ее недостаточно. Транзакция дает такие гарантии (сокращенно ACID):
- A - atomicity - все изменения либо применяются целиком либо не применяются вообще
- D - durability - если транзакция успешно закоммичена, то данные надежно сохранены и не потеряются даже при перезагрузке сервера
- I - isolation - никакие изменения, сделанные внутри транзакции, не видны другим, пока транзакция не закоммичена
- и еще С - consistency - что БД остается в "согласованном" состоянии до и после транзакции (то есть, например внешние ключи проставлены правильно, в колонках с уникальным индексом нет повторяющихся значений и тд)
В 99% случаев когда ты что-то меняешь в БД, надо делать это через транзакции, чтобы избежать проблем.
Но тут нет защиты от генерации одинаковых path. Для нее нам нужны блокировки. Блокировка позволяет "заблокировать" строку таблицы так, что пока мы не снимем блокировку, никто не может работать с этой строкой, а если попытается, то остановится и будет ждать, пока блокировку не снимут. Блокировка автоматически снимается при завершении транзакции.
Блокировки должны быть как можно более точечными, например неправильно будет блокировать таблицу целиком, это может ухудшить производительность (так как другим скриптам, работающим с таблицей, придется ждать).
Блокировать можно родительский комментарий, на который отвечают. Логика такая:
- начинаем транзакцию
- берем эксклюзивную блокировку на строчку с родительским комментарием (а если мы пишем комментарий верхнего уровня то на пост, который комментируем)
- генерируем path
- вставляем комментарий
- коммитим тразнакцию
В таком сценарии, если 2 человека одновременно пытаются написать комментарий, то второй скрипт останавливается на этапе взятия блокировки и продолжает работать только после того, как первый скрипт вставит комментарий.
Ты правильно заметил проблему. Действительно, возможна ситуация, что например 2 человека одновременно пытаются ответить на один и тот же коммент и для них генерируется одинаковый path. Это либо приведет к тому что у тебя будет дублирующийся path, либо к ошибке, если ты догадался поставить уникальный индекс на пару (id поста, path).
Такая проблема возникает и в других приложениях. Например, если в магазине остался 1 товар и 2 человека пытаются его купить, может получиться что они оба успешно создадут заказ на него.
Что касается транзакции, она здесь нужна, но ее недостаточно. Транзакция дает такие гарантии (сокращенно ACID):
- A - atomicity - все изменения либо применяются целиком либо не применяются вообще
- D - durability - если транзакция успешно закоммичена, то данные надежно сохранены и не потеряются даже при перезагрузке сервера
- I - isolation - никакие изменения, сделанные внутри транзакции, не видны другим, пока транзакция не закоммичена
- и еще С - consistency - что БД остается в "согласованном" состоянии до и после транзакции (то есть, например внешние ключи проставлены правильно, в колонках с уникальным индексом нет повторяющихся значений и тд)
В 99% случаев когда ты что-то меняешь в БД, надо делать это через транзакции, чтобы избежать проблем.
Но тут нет защиты от генерации одинаковых path. Для нее нам нужны блокировки. Блокировка позволяет "заблокировать" строку таблицы так, что пока мы не снимем блокировку, никто не может работать с этой строкой, а если попытается, то остановится и будет ждать, пока блокировку не снимут. Блокировка автоматически снимается при завершении транзакции.
Блокировки должны быть как можно более точечными, например неправильно будет блокировать таблицу целиком, это может ухудшить производительность (так как другим скриптам, работающим с таблицей, придется ждать).
Блокировать можно родительский комментарий, на который отвечают. Логика такая:
- начинаем транзакцию
- берем эксклюзивную блокировку на строчку с родительским комментарием (а если мы пишем комментарий верхнего уровня то на пост, который комментируем)
- генерируем path
- вставляем комментарий
- коммитим тразнакцию
В таком сценарии, если 2 человека одновременно пытаются написать комментарий, то второй скрипт останавливается на этапе взятия блокировки и продолжает работать только после того, как первый скрипт вставит комментарий.
Нет, потерянные обновления это другое. Это когда например в строке записано amount = 100 и один скрипт пытается увеличить сумму на 100, а второй уменьшить на 50. В идеале результат должен быть равен 150, но может получиться такая последовательность:
скрипт 1: читает значение 100, и хочет записать туда 100 + 100 = 200
скрипт 2: читает значение 100 и хочет записать 100 - 50 = 50
скрипт 1: записывает 200, коммит транзакции
скрипт 2: записывает 50, коммит транзакции
В итоге в ячейку записывается 50 вместо 150. Обновление от скрипта 1 "потерялось".
Чтобы предотвратить эту проблему, нужно брать блокировку на строку при чтении. Тогда на шаге 2 скрипт 2 остановится и будет ждать завершения первой транзакции.
Справедливости ради, у Го и Явы есть свои странности (особенно у Го). Например, в Го абсолютно долбанутая система, где поля нужно называть с маленькой или большйо буквы в зависимости от видимости. В Яве нельзя сравнивать строки через ==.
А так да, у старых языков есть такая проблема что если в них один раз что-то сделали неудачно, то потом нельзя это исправить, так как сломается куча кода.
Раньше такой возможности не было.
>>484406
Если ты уже знаешь что такое DI и тебя интересуют только контейнеры то изучи какую-нибудь библиотеку вроде PHP-DI и почитай PSR-11: Container interface
Если ты не знаешь толком что такое и зачем нужно DI то почитай сначала урок https://github.com/codedokode/pasta/blob/master/arch/di.md
Сделай тестовый скрипт вида
<?php
session_start();
var_dump($_SESSION);
$_SESSION['x'] = date('r');
И запусти его несколько раз.
Проверь с помощью Dev Tools что куки выставляются. Проверь логи ошибок на хостинге.
Пиздец какой-то. Неужели нет адекватного инструмента в 2022 году?
На что перелазить? Где лучше так работать с документами, конкретный пример приведи что лучше в данной ситуации?
Я не понял, что тебе нужно сделать с докой, но вообше в питоне адова куча батареек.
Лол, ты предлагаеш детский питон?
Я вообще мимокрок, просто интересно что ты предложишь, хотя выснилось что ты сам не знаешь о чем речь вообще.
Какую задачу решаешь-то?
echo ЩИТО("Makaka");
Результат: Abu\Nemitaja\Makaka. Иными словами, мне нужна какая-то возможность получить полное имя класса по его "короткому имени", которое создано через use. Как быть? Есть варианты кроме
echo get_class(new Makaka);
function fn (&$yoba) {
ЩИТО($yoba);
}
$peka = true;
fn($peka);
Результат: peka. Иными словами, мне нужно получить имя переменной, которую я передаю по ссылке.
https://3v4l.org/dXRnR
>>490264
https://3v4l.org/e71Mm
Не понятно зачем тебе эти извращения нужны, но знай что ты занимаешься полнейшей хуйней и юзать эту поебень в проде не надо.
Спасибо.
>Не понятно зачем тебе эти извращения нужны
Проверка типов для элементов ассоциативного массива. Я понимаю, что это наркомания и по-хорошему вместо массива надо использовать объект, но уж как есть. Либо писать значения в массив как обычно, либо через функцию, которая будет хоть как-то проверять типы.
Первое, соответственно, мне нужно для того, чтобы я мог написать короткое имя класса с учётом use, как если бы указывал его в качестве типа свойства класса. Второе - для того, чтобы в TypeError я мог вывести имя массива, с которым возникли проблемы.
Так, а если мне нужно, чтобы это всё происходило внутри класса? Типа
class Foo {
function __construct () {
$yobyob = true;
ЩИТО($yobyob);
}
}
И yobyob в качестве вывода.
>Проверка типов для элементов ассоциативного массива
используй psalm
или используй кастомный объект в котором
function add(MyType $value) {
$this->data[] = $value;
}
С помощью __FILE__ и __LINE__ получаю место вызова моей охуительной функции, регуляркой вытаскиваю название массива. И что ты мне сделаешь?
обфускацию и минимизацию
что касается ::class, это не извращение и это можно использовать.
что касается определения имени переданной переменной, то это бред полнейший. И это тебе не нужно, так как при выбросе исключения записывается стектрейс и ты можешь увидеть, из какого места вызвана твоя функция.
Ты ерундой занимаешься так как ты можешь просто выбросить исключение и по стектрейсу будет видно, откуда вызвана функция. Вроде такого:
InvalidArgumentException
Stack:
1 somefile.php:345 some_function()
Пока что мысль такая, при редиректе из сервиса аутентификации, если статус код не 200 редиректить обратно в форму и из тела запроса выставлять ошибки.
В ларавель же есть стандартный способ работы с формами (хотя и костыльный по моему), там ошибки сохраняются куда-то в сессию и их потом можно достать: https://laravel.com/docs/9.x/validation#quick-displaying-the-validation-errors
А вообще правильнее при ошибке не делать редирект, а отображать форму заново, как описано тут: https://github.com/codedokode/pasta/blob/master/forms.md
Ты не понял суть проблемы, аутентификация и форма в разных сервисах, соответственно, и сессии разные.
Как это сделать? Уже полдня бьюсь с этим
онлайн установка не нужна, я собираю паки для оффлайна, вдруг отключат доступ к сервисам
На ubuntu
И подскажите пожалуйста, какой intellisense для vscode для php вы используете? Phpstorm стоит, но он тяжелый хочу с него слезть. intellisense плагины платные, взлом почти нереален, есть выход?
Слазить нужно с php, а не с phpstorm.
Изучаю Вуе в связке с Ларавел т.к. это мой основной фрейм. Хочу сделать не полноценное SPA, а использовать Вую только для некоторых динамических элементов на странице. Полноценно пилить фронт и бек в одно лицо я задолбаюсь.
Как обычно делают такое? Я вижу так: использую обычные блейд-шаблоны + регистрацию компонентов Вуе. Это правильно?
>intellisense
Я не использую ничего такого. VSC нативно подсказывает имена переменных, функций и проверяет неймспейсы с пхп-доком. Попытка воткнуть что-то более интеллектуальное часто выливается в то, что это интеллектуальное начинает ебать мне мозги и решать за меня.
Пхпштормом не пользуюсь - тяжёлая медленная хуйня.
>VSC нативно подсказывает имена переменных, функций и проверяет неймспейсы с пхп-доком
Ну если это так, то я сначала попробую так. Просто там фишечки есть типа перейти по кликам на объект(чем искать его в файлах), рефакторинг делать, быстрое редактирование (peek).
Вообщем кому интересно нашел последнюю бесплатную версию vscode-intelephense (vsix файл, автор решил ее не удалять):
https://github.com/bmewburn/vscode-intelephense/releases/tag/v1.2.0
Есть еще хороший бесплатный пак с intelesense от xdebug - https://marketplace.visualstudio.com/items?itemName=xdebug.php-pack
Есть еще интерсный мегапак PHP Tools, он так и не понял — платный или нет, вроде все работает и написано free, но если чего есть статья как взломать предыдущую версию.
На Laravel - тоже подобное нашел, там целый мегапак 10-в-1 буду тестить.
А с Prettier не разобрался 😔. Кстати, годно html/js форматирует, очень интересно. В MDN видел подобные фишечки.
ой, промахнулся, вот версия бесплатная
https://github.com/bmewburn/vscode-intelephense/releases/tag/v1.1.6
Как же заебись что на реальной работе VSкалоедов гонят ссаными тряпками устанавливать шторм и не выебываться.
Бля он быстр, красив, легок. Я шторм под него сделал, и то не дотягивает по дизайну. В шторме много залупной кривой хуйни, про стандартный шрифт шторма вообще молчу, просто пиздос.
А code вообще идеал. Хз чем они дизайнеров кормили и программеров, но это настолько пиздато, что jetbrains аж высрали аналог 'fleet' с платным блядь, гитом, под видом ide будущего.
Ну для работы в ебучий шторм полезу скорей всего. Хотя очень изменились возможности code, я там все как орешки щелкаю, все что нужно есть, все быстро получается.
Тогда надо отправлять данные аяксом.
Но я конечно плохо понимаю какой смысл форму авторизации разносить в 2 разных микросервиса. Ты сам себе проблемы на ровном месте создаешь.
Ты можешь попробовать phpactor в качестве language server. Также поискать и попробовать расширения из каталога расширений vs code.
>phpactor
Походу серьезная штука, на гитхабе под code есть расширение, спс
Если зайдет, может попробую через language server поставить, возможно это как то повлияет на быстродействие
>phpactor
Походу серьезная штука, на гитхабе под code есть расширение, спс
Если зайдет, может попробую через language server поставить, возможно это как то повлияет на быстродействие
>гонят ссаными тряпками устанавливать шторм
Большинство работодателей тебе хуй когда шторм оплатят, манечка. А посылать устанавливать просроченную пиратку это самому на три буквы сразу пойти. Как ебанату.
Вообще первый раз такой кринж слышу - чтобы заставляли вебхуйрм ставить. Заставляли блядь, лол. Школота ебучая.
Маркетолог ждетбрейнс, залогинься.
Под vscode Intellisense под PHP вроде вообще нет, либо низкоуровневый. В свою очередь, не работает функции 'go to Definition' (пкм), 'go to References', (короче серии GOTO), функции Peek (например для css я использую расширение CSS Peek). Подсказки.
И рефакторинг низкоуровневый (могу ошибаться, я зеленый еще в php)
Все решается установкой расширений, но качественные нужно искать, это немножко заебисто. Но со времнем microsoft тупо вставляет эти расширения по умолчанию, либо пишет свои которые ахуеть какие качественные (live preview от microsoft буквально на моих глазах стал просто конфеткой).
Но если рабочую область настроить под себя, выучить shortcut's - Code - это очень мощный инструмент. Есть встроенная возможность сохранять settings на Github, т.е. Использование своего конфигурации везде на любых компах.
Недавно поставил иконки 'Material Theme Icons" от Equinsico, со встроенноц темой dark+, вообще в phpstorm не хочу заходить. Много привлекательных фишек, и все очень быстро.
Короче, чтобы им пользоваться вместо шторма, нужно немного настроить, и узнать точно ли intellisense будет конкурентноспособным.
Полуебок, назови мне хотя бы одну контору, в которой пишут на пхп и не используют шторм.
>>492729
Вы внатуре ебанутые. Так и представляю себе: кароч приходит фрезеровщик на собес, его там спрашивают ну че ты фрезер то видал вообще, умеешь, могешь? А он грит мол не нихуя фрезер тяжелый, сложный я им не пользуюсь. Вот у меня есть напильник нахуй, вот это огонь. У него ручка КРАСНАЯ и на ней сбоку пиздатая НАКЛЕЙКА, а у фрезера рукоятки серые, скучные.
Я даже хуй знаю как это объяснять бля. Сказать что ты не пользуешься штормом это примерно как пиздануть что ты клавиатурой не пользуешься. Ты конечно охуенно превзошел всех клавиатуронормисов, но работу то блядь делать надо, сука.
Ну объясни тогда, что может шторм и что не может vs code. Давай, по фактам, прям по списку.
Я и не говорю что от шторма откажусь, просто пока недостатков ВООБЩЕ не вижу, кроме ~intellisense из коробки
У меня бы тоже желудок заболел если бы мой хозяин был мелкобуквенным хуесосом.
Понимаю, нервяк пиздец. Так руки тряслись что кошка в кота превратилась https://www.youtube.com/watch?v=6EbsC_MGzn8
>что может шторм и что не может vs code
удобный и наглядный резолв гит-конфликтов
наглядный список изменений при гит пулл
интеграция с хдебагом
>назови мне хотя бы одну контору
Вайтишник, никакая контора не регламентирует окружение в котором работает программист. Всем похуй где ты пишешь код, главное чтобы таски закрывались.
А теперь иди нахуй, тупое хуйло, и не пиши больше своей детской хуиты на моём программаче.
576x848, 0:08
>Бла бла бла
Ну ты же говоришь что VSС пиздаче и к тому же бесплатный. Должно быть дохуя фирм, в которых в качестве IDE для пхп используют только VSС.
Назови хотя бы одну, или ты заваливай ебало, кукаретик ни дня в IT не работавший.
Бля, биокарлики. Вы вообще понимаете разницу между вещью сделанной кем-то чисто по фану на энтузиазме и коммерческим проектом?
какая разница что откуда ставится, если оно по итогу не то и работает не так?
он из коробки умеет "что-то похожее", а не то же самое
Я тестировал phpactor (вместе с sublime), переход к definition там есть (он есть и в саблайме но кривой так как учитывает только имя метода и не смотри на класс), поиск references вроде тоже есть. Есть переименование переменных/методов, есть переименование и перенос классов но последнее по моему надо делать через командную строку (что может быть даже удобнее когда тебе надо много классов переименовать скриптом).
Но есть конечно и косяки, например, трейты слабо поддерживаются (но код открытый, можно легко допилить).
Ну вот смотри в phpactor такие вещи как переименование или перенос класса (с обновлением ссылок на него), переименование методов доступны из командной строки. Если мне надо переименовать 200 методов я могу это сделать скриптом на баш или питоне. Твой phpstorm так может или там надо руками 200 раз переименовывать?
В phpstorm если я не путаю 3-панельный просмотр конфликтов. А я например привык к 4-панельному потому что он гораздо нагляднее.
> наглядный список изменений при гит пулл
ну фиг знает зачем оно нужно можно и в CLI посмотреть командой git diff
>привык к 4-панельному потому что он гораздо нагляднее
где такой?
>>494751
>> наглядный список изменений при гит пулл
>ну фиг знает зачем оно нужно
ты делаешь пулл на мастере и видишь совокупный дифф по всем стянутым коммитам. то есть наглядно видишь что наговнокодили в репу твои коллеги. при этом тебе не нужно знать какой был коммит до пулла, сколько коммитов ты стянул и тд
>Но есть конечно и косяки, например, трейты слабо поддерживаются (но код открытый, можно легко допилить).
Бля, допили братишка. И фичи из восьмой версии тоже, атрибуты там, именованные параметры, множественные типы.
Ток ты это. Побыстрее пожалуйста. А то мы с пацанами уже на VSC, а плагины то не обновлялись по пять лет, то ишью игнорят. Такие контрибьютеры как ты нам нужны. Так победим.
Ты спецом выбрал какие-то ноунейм плагины которые никто не поддерживает? Молодец, умееш в фильтрацию, программист наверное хороший
Конкретно к кому ты обращался, phpactor - 9 минут назад коммит - вау пять лет нахуй.
Phpactor VSC - 10 сентября - вау ахуеть пять лет назад, разраб умер
Заебался фильтровать, братишка.
Так ты короче допиливать не будешь? Как же нам тогда с VCS братишками трейты писать на восьмом пхп?
>>привык к 4-панельному потому что он гораздо нагляднее
> где такой?
Например в свободном KDiff3 (но у него есть свои косяки).
В 4-панельном просмотрщике выводятся:
- оригинальная версия кода
- код с изменениями в одной ветке (твой код)
- код с изменениями в другой ветке (их код)
- код с результатом
Я не пользовался просмотрщиком в phpstorm, но в open source есть просмотрщик, похожий визуально на него (meld) с такими же скругленными указателями и в 3 панелях мне тяжело ориентироваться.
> ты делаешь пулл на мастере и видишь совокупный дифф по всем стянутым коммитам
git fetch
git diff master origin/master
Это можно сделать в консоли, но редко когда полезно (для меня) потому что там обычно очень много изменений.
>>496003
Бля, это как объяснять слепому с рождения мальчику что такое Тадж-Махал.
Диффф в шторме ИНТЕРАКТИВНЫЙ. Это не просто разноцветный текст. По нему работает навигация (та самая которой до сих пор нет для VSC), подсветка и шорткаты. Это практически то же окно редактора.
>В 4-панельном просмотрщике выводятся:
В шторме в строках с конфликтом показывается исходное значение. Для этого не нужно целое отдельное окно. В ветке А 500, в ветке Б 1000, в мастере 600. В строке с конфликтом будет написано 600. Первый же блядь скриншот в гугле.
>Это можно сделать в консоли, но редко когда полезно (для меня) потому что там обычно очень много изменений.
В шторме можно в один клик добраться до нужного коммита, выбрать конкретный файл, сделать его дифф с локальной версией в отдельном окне и в один клик вернуть в код какую-нибудь удаленную функцию. Но это редкий частный случай.
Классика жанра это когда для отката релиза заревертили коммит на сотню файлов, а спустя пол года нужно все это опять зарелизить. И реверт реверта тут нихуя не проканает потому что там за пол года сотни тысяч строк поменялось. Как такое без шторма сделать и не наебенить кучу ошибок вопрос к VCS кукоретикам. Какая тут нахуй консоль. Я гитом в консоли уже лет пять не пользовался - все на хоткеях.
>- оригинальная версия кода
>- код с изменениями в одной ветке (твой код)
>- код с изменениями в другой ветке (их код)
Ну вообще тут достаточно и веток без оригинала, если в них подсвечена дельта.
> В шторме в строках с конфликтом показывается исходное значение. Для этого не нужно целое отдельное окно. В ветке А 500, в ветке Б 1000, в мастере 600. В строке с конфликтом будет написано 600.
Я видел этот скриншот и он абсолютно нелогичный.
Красным в диффе обычно помечают то, что удалено. То есть в левой панели мы видим что в оригинале была строка с setcookie 500 и она в этой ветке удалена. А в правой панели мы видим что в оригинале была строка с setcookie 1000 и она удалена.
И как это понимать? В оригинале было 500 или 1000?
А, наверно красный цвет тут означает что-то другое, например, место где произошел конфликт. Но тогда если мы выберем вариант А или Б, то он появится в центральной панели и мы больше не сможем увидеть что было в оригинале.
Плюс на скриншоте я не вижу обозначений:
- какие конфликты разрешены, а какие нет. Например на скриншоте, в каком состоянии конфликт? Разрешен или нет?
- в случае если конфликт разрешен, какие строки были взяты из А, какие из Б, а какие отредактированы вручную
> Я гитом в консоли уже лет пять не пользовался - все на хоткеях.
Я довольно часто пользуюсь. Например, в гите есть такая функция как показ истории изменения диапазона строк. То есть я хочу узнать кто и когда менял строки с 100 по 105 в файле 1.php. Командная строка вполне для этого подходит.
> Как такое без шторма сделать
Я не очень понимаю, как тут помогает шторм.
Можно получить патч с изменениями, которые сделаны тем коммитом. И проходиться по каждому блоку изменений и смотреть, поменялось ли там что-то или нет (по моему те места, где ничего не поменялось, можно пропускать автоматически и тогда останется проверить только изменившиеся места).
Как я понимаю, в случае с штормом точно так же придется разбирать каждое изменение.
Но это 100% можно сделать без шторма и логика работы будет примерно такая же.
>Красным в диффе обычно помечают то, что удалено
Все эти цвета в шторме настраиваются, вообще поебать.
>то он появится в центральной панели и мы больше не сможем увидеть что было в оригинале
Если ты внесешь какие нибудь изменения в центральную панель, то строка будет помечена как измененная и при клике будет показано что там было в оригинале.
>Плюс на скриншоте я не вижу обозначений:
На скриншоте все есть, мне больше делать нехуй переписывать сюда гайд. Открой блядь офф справку и прочитай. А еще лучше спизди на торренах шторм и попробуй сам.
>>497057
>Например, в гите есть такая функция как показ истории изменения диапазона строк.
Все это есть в шторме. И история для диапазона и аннотации, вся хуйня.
>Я не очень понимаю, как тут помогает шторм.
>Как я понимаю, в случае с штормом точно так же придется разбирать каждое изменение.
>Но это 100% можно сделать без шторма и логика работы будет примерно такая же.
Технически это можно и в виндовсеом блокноте сделать. Ты очень четко вырвал фразу из контекста
>Как такое без шторма сделать и не наебенить кучу ошибок
О том и речь что придется пол дня проторчать в тулзе для резолва конфликтов. И преимущество шторма как раз в том что он увидит во время резолва 99% ошибок: вызовы в никуда, измененные сигнатуры функций и дохуя чего еще. И ты сам сможешь как посмотреть справку, так и перейти прямо по коду, чтобы чекнуть что там поменялось.
> он увидит во время резолва 99% ошибок: вызовы в никуда, измененные сигнатуры функций
Это называется статический анализатор. Есть отдельные анализаторы вроде phpstan или psalm.
>Это называется статический анализатор. Есть отдельные анализаторы вроде phpstan или psalm.
Хватит читать жопой. Речь о том что в шторме все это работает во время резолва конфликтов.
Файлопомойка, тесты - это достаточно неинтересное, хочется чего-то более уникального.
И в части, как проект в резюме, имеет ли смысл писать полностью с 0, не используя чужих зависимостей? С одной стороны, это (как мне кажется) может показать мои более обширные знания. В ином случае, можно показать знания фреймворка.
Сделай очередь задач с воркерами и апи к ней.
Например скриншотилку, вводишь на фронте урл, бек ставит в очередь задачу на скриншот по этому урлу, воркер подхватывает, делает скриншот, сохраняет в папочку, ты можешь по апи или с фронта смотреть статус твоей задачи и скачать по ссылке результат.
Всем доброго времени суток, занимаюсь самообучением (php) и решил ненароком посмотреть вакансии в своем городе без опыта и увидел ровно одну!!! И то там ебучий битрикс, верстка и J's
Из этого вытекает вопрос - не будет ли правильным решением уйти во фронт и до победного заниматься js'ом и устраиваться уже на трейни/стажёра на фронт?
Обучение давалось сложно, так ещё и вакансии куда то пропали...
Более опытные, подскажите как поступить, руки опускаются.
на ubuntu и win завелась, вместе с ja-netfilter-all (там все кряки на все продукты jetbrains заводятся, goland например установил и пакеты платные взломанные тоже есть на php много). На старой версии PhpStorm конечно можно сидеть, просто интересно, это я один такой отсталый?
Пока пробовал сделать так
A:
$pipes;
$process = proc_open("php b.php", [["pipe", "r"], ["pipe", "w"]], $pipes);
fwrite($pipes[0], "DATA FROM A");
B:
$data = fread(STDIN, fstat(STDIN)["size"]);
И, вроде бы, всё заебись. Но как провернуть то же самое наоборот, то есть, из дочернего скрипта обратиться к STDIN родительского? Или, может, стоит пойти вообще другим путём? Каким? Проект не особо серьёзный, так что изъебов не требуется. Но и идти самым простым путём с использованием текстового файла не хотелось бы.
Я goland новый ставил, он кряк сходу сломал (в bash было видно, при запуске). Лол, я сейчас обновлю, он java-agent (ja-netfilter-all) сломает нахуй и все.
Что значит "быдловариант"? Все эти pipe'ы тоже файлы так-то. Ну используй базу или кэш если файл не устраивает. Или вообще читай stdout и все.
Я уж не говорю что само использование proc_open гавной воняет. Ты явно пытаешься сделать какую-то поебень. Зачем тебе вообще запускать скрипт в отдельном процессе?
смотря зачем тебе, кроме очевидного текстового файла неожиданно, но на уровне ОС так и реализуется межпроцессное взаимподиействие можешь использовать брокер сообщений какой-нибудь.
>Что значит "быдловариант"?
Это значит, что я нуб и в мою голову сразу же пришёл сверх-очевидный вариант с использованием файла. Но на интуитивном уровне подумалось, что это не самое адекватное решение. Вот есть, скажем, игровой компьютер 4 гига 2 ядра с хардом на 1ТБ. Спрашивается, зачем нужны ссаные 4ГБ оперативки, если есть 1ТБ жёсткого диска? Затем, что работа с оперативной памятью на порядок быстрее, чем с HDD и даже SSD насколько я понимаю.
Аналогично, предположил, что нормальные пацаны используют какой-то более хитрый способ для передачи данных между процессами. А файл - костыль и оверхед.
>Зачем тебе вообще запускать скрипт в отдельном процессе?
Скрипт B - сервис-демон, который должен постоянно крутиться в фоне. Скрипт A - интерфейс (в широком, а не похопэшном смысле слова) к B. Его (A) можно запустить, послать пару команд в B и закрыть. А скрипт B должен продолжать крутиться в фоне.
>смотря зачем тебе, кроме очевидного текстового файла неожиданно, но на уровне ОС так и реализуется межпроцессное взаимподиействие
Сейчас я остановился на https://www.php.net/manual/en/book.sync.php, затестил - вроде всё работает как мне надо. Но, значит, на будущее буду иметь в виду, что вариант с файлом не такой уж и тупой.
Добавлю, что мои догадки, кажется, были верны. Затестил производительность - дрочка файла через file_put_contents/file_get_contents работает в 500 раз медленнее, чем Sync.
Начинаю изучать php. VSCode мне надоел.
Не знаю, может быть уже задавался такой вопрос, но некогда искать ответы.
Подскажите, пожалуйста, как вам NetBeans по сравнению с VSCod'ом? Или лучше сразу ставить Symphony на свой Debian и учиться работать сразу в этом фреймворке?
Заранее благодарен.
Если тебе неинтересны чужие идеи, то тебе надо придумать самому какую-то идею. Подумай, какое приложение тебе хотелось бы создать. Если не придет никаких идей, можно просто скопировать какой-нибудь существующий сайт.
С нуля имеет смысл сделать самый первый проект, чтобы понять как все работает. После этого лучше учиться использовать библиотеки.
>>498597
Через пайпы. Тебе нужно 2 пайпа, один от родителя к ребенку и второй обратно. Но тогда тебе может понадобится асинхронный код, так как данные могут отправляться и приходить по 2 каналам независимо.
Ну то есть например ребенок пишет в пайп 1 и блокируется в ожидании, когда родитель прочтет данные, но родитель в это время пишет в пайп 2 и ждет когда ребенок прочтет данные, но он заблокирован, получается дедлок.
В твоем примере кода тебе надо читать не из STDIN, а из $pipes[1].
> кроме очевидного текстового файла
> неожиданно, но на уровне ОС так и реализуется межпроцессное взаимподиействие
Вообще, это не так. Для IPC обычно используются не файлы, а: пайпы (каналы), именованные каналы, unix сокеты, сетевые сокеты, сигналы, семафоры/мьютексы, очереди сообщений, разделяемая память. Они обычно эффективнее и удобнее, чем взаимодействие через файловую систему.
А какие аргументы приводят? Трудно отвечать на претензии, не зная в чем они заключаются.
>>499379
> Затем, что работа с оперативной памятью на порядок быстрее, чем с HDD и даже SSD
Дружок, она не на порядок быстрее, а на порядки. Вот смотри, пиковая скорость последовательного чтения/записи из разных источников:
- память в Apple M2: 100 Гб/с
- память в системе на 2 (дорогих) AMD Epyc 7601 с 8 планками DDR4: до 250 Гб/с
- (дорогой) SSD подключенный в NVM2: примерно 3,5 Гб/с
- обычный SSD подключенный в SATA III: примерно 550 Мб/с
Также не менее важна latency, то есть задержка между началом чтения и получением данных. Для памяти она составляет порядка 20 нс (если данные не попали в кеш, если попали то наносекунды или даже меньше), а для SSD ~70 мкс.
Плюс, если ты пишешь данные в файл, то ты отнимаешь часть пропускной способности у других программ и они могут от этого работать медленнее.
> Аналогично, предположил, что нормальные пацаны используют какой-то более хитрый способ для передачи данных между процессами. А файл - костыль и оверхед.
Ты правильно предположил. Давай я опишу способы IPC (межпроцессного взаимодействия):
- каналы (pipe), именованные каналы, сетевые сокеты, unix сокеты, очереди сообщений: все эти способы дают канал, в который один процесс пишет данные, а другой из него читает. Это обычно используется для передачи небольших объемов данных.
Плюсы: 1) процесс может остановиться и ждать получения данных и ОС "разбудит" его, когда они придут. 2) если использовать сетевые сокеты, то процессы можно разместить на разных компьютерах и все будет работать без изменений.
Минусы: не оптимально для очень быстрой передачи данных или передачи больших объемов.
- сигналы: процесс может послать другому сигнал. Сигнал не несет никаких полезных данных, но позволяет "разбудить" процесс или, наоборот, прервать его работу, остановить или прибить.
- семафоры/мьютексы: не несут информацию, но позволяют процессу "спать", пока его не разбудит другой процесс. То есть, ими можно уведомлять о готовности каких-то данных.
- разделяемая память: один процесс выделяет область памяти и дает доступ к ней другому.
Плюс: максимальная скорость передачи данных и минимальная latency
Минусы: нет никаких уведомлений о том, что другой процесс что-то записал в память. Поэтому обычно для уведомления используют какой-то другой способ.
Разделяемая память используется, например в linux для передачи аудио от программы к звуковому демону (а для уведомления используются сокеты) и передачи изображения от программы к X-серверу или wayland-композитору (опять же, используются сокеты для уведомлений об изменениях). В Андроид по моему тоже программа передает данные для отрисовки через разделяемую память.
В твоем случае с демоном наверно удобнее всего использовать каналы/сокеты.
Phpstorm ставь. Там подсказки, готовые предустановленные фишки для поддержки php инфраструктуры и плагины если надо. Меньше дерьма сожрешь чем vscode настроишь, плюс в коммуникациях поможет при серьезной работе. Там глубокая работа с git, базами данных и тд
Я вот распечатал на стену повесил,
https://github.com/LoginovIlya/PhpStorm-hotkeys-ru/blob/master/PhpStorm_Hotkeys_ru.pdf
цвета/шрифты правда такие себе, но можно под себя настроить
Спасибо, анон! Всех благ тебе.
Пытаюсь через cmd команду
composer create-project laravel/laravel example-app
установить laravel.
В итоге ошибка
curl error 7 while downloading https://repo.packagist.org/packages.json: Failed to connect to 127.0.0.1 port 57186: Connection refused
Что это и как решить?
Эта ошибка очень странная. Похоже что композер хотел скачать список пакетов с repo.packagist.org, но вместо этого сайта подключился к 127.0.0.1, то есть к твоему компьютеру и естественно ничего скачать не получилось.
Чтобы понять, почему так происходит, попробуй выполнить команду
composer diagnose -vvv
И посмотри, нет ли в логе странных ошибок. Можешь его сюда запостить.
Также, проверь, если ты у тебя доступ к packagist. Для этого октрой ссылку https://repo.packagist.org/packages.json в браузере. Там должен либо скачаться JSON файл либо отобразиться на экране.
Если diagnose не покажет никаких ошибок, добавь к команде composer create-project в конец -vvv и посмотри что выведется.
принцип работы - виртуалка на уровне ос, а не железа
применение - ебнуть контейнер, чтоб вся залупа подтягивалась сама у всей команды + относительная легкость автодеплоя
теперь иди дальше и смотри гайды по сборке контейнеров, если ты не девопс, то хватит на уровне - так ну в докерфайле подтянули всю хуйню, в докеркомпозе подтянули хуйню из докерхаба, прописали волюмы и переменные окружения
Проще на месяц бесплатную лицензию получить, а потом создать новый аккаунт и повторить
Есть один древнючий фреймворк работает на php 4 и fpm , мне надо собрать это говно в докере, единственная репа со старыми версиями которую я нашел, содержит только 5.6, но на ней приложение говна нихуя не работает
Где достать?
cake php 1.3
И да, это не мой класс я не могу импортировать, а класс самого фреймворка. Литералли архив скачанный с их гитхаба. Поэтому вряд ли моя криворукость
Объясните мне кто-нибудь ебучий паттерн фабрики, я заебался, уже всё перечитал, но не вижу в нём смысла
Допустим "пример из реальной жизни" с рефакторинг.гуру https://refactoring.guru/ru/design-patterns/factory-method/php/example#example-1
Вот функция из класса фабрики. Почему бы просто не сделать это сразу в функции clientCode?
public function post($content): void
{
// Call the factory method to create a Product object...
$network = $this->getSocialNetwork();
// ...then use it as you will.
$network->logIn();
$network->createPost($content);
$network->logout();
}
Если $network является объектом класса, реализующего определённый интерфейс, какая разница, получаем мы этот объект через фабрику, или воздавая напрямую? Фабрики же точно так же, как и эти классы, имеют разные реализации, в зависимости от типа возвращаемого объекта
Пример из описания паттерна тоже не помогает:
"Большая часть существующего кода жёстко привязана к классам Грузовиков. Чтобы добавить в программу классы морских Судов, понадобится перелопатить всю программу. Более того, если вы потом решите добавить в программу ещё один вид транспорта, то всю эту работу придётся повторить."
Зачем для решения этой проблемы создавать фабрику, если можно изначально код привязывать не к классу, а интерфейсу Transport?
Так ты напиши. Возьми пример с гуру и перепиши его как считаешь правильным. Через руки быстрее дойдет.
Ты правильно делаешь, что пытаешься разобраться, а не заучивать определения, не понимая их смысла.
Правда, статья не про класс-фабрику, а про фабричный метод, но они похожи по сути. Давай сначала рассмотрим паттерн "класс Фабрика". Фабрика - это объект, основная задача которого - создавать другие объекты.
Если тебе в коде нужно просто создать объект, то конечно, его надо создавать через new. Не нужно изобретать никаких Фабрик.
Но если ты пишешь, например, библиотеку и хочешь, чтобы ее пользователи могли как-то влиять на логику создания объектов (выбирать, какой именно объект создать и с какими аргументами), то ты можешь вынести эту логику в Фабрику и разрешить пользователю ее подменять на свою.
Допустим, что мы пишем систему хранения файлов (куда можно загружать файлы и потом делать по ним поиск). Где-то в глубине этой системы есть класс Indexer, который принимает файл, сохраняет его на диск, создает объект, содержащий информацию об этом файле и сохраняет его в БД. Например, если передать ему аудиофайл, то он создаст и сохранит в БД объект AudioFileInfo, который содержит информацию о длительности, битрейте, используемом кодеке. Если передать картинку, то он создаст объект ImageInfo с размерами картинки, глубиной цвета. И так далее. На каждый тип файла создается свой класс с параметрами таких файлов:
$indexer = new Indexer();
$file = new File('/tmp/image.jpeg');
$info = $indexer->save($file); // Возвращает объект ImageInfo
Код в классе Indexer может выглядеть так:
function save(File $file)
{
$type = $this->getFileType($file);
if ($type === 'image/jpeg' || $type === 'image/png') {
$info =new ImageInfo($file);
}
....
Допустим, мы написали эту систему и распространяем ее. Но вдруг у пользователя возникла проблема: он хотел бы, чтобы система также могла извлекать и сохранять информацию о файлах 3Д-моделей, но разработчики системы это не предусмотрели. Код сторонней библиотеки пользователь исправить не может, и получается, ничего сделать нельзя.
Проблему можно было бы решить, если бы создатели класса Indexer не пытались перечислить все известные им типы файлов прямо в этом классе, а вынесли бы создание объектов в Фабрику:
class Indexer
{
function __construct(private FileInfoFactory $factory) {}
function save(File $file)
{
$type = $this->getFileType($file);
$info = $this->factory->getInfoForType($type, $file);
...
В таком случае пользователь может создать свой класс AdvancedFileInfoFactory (наследник FileInfoFactory), который умеет анализировать также файлы 3Д-моделей и передать его в конструктор вместо FileIInfoFactory:
$indexer = new Indexer(new AdvancedFileInfoFactory));
$info = $indexer->save(...);
То есть, Фабрика позволяет пользователю класса или библиотеки влиять на процесс создания объектов где-то внутри библиотеки.
А еще правильнее было бы сделать интерфейс FileInfoFactoryInterface и указать в конструкторе Indexer его, а не FileInfoFactory, так как в этом случае пользователь не обязан будет наследоваться от него.
-----
Теперь что касается Фабричного метода. Это почти то же самое, только вместо класса-Фабрики, который мы передаем через конструктор, мы делаем метод-фабрику. И тот, кто наследует наш класс, может его переопределить и таким образом повлиять на то, как создаются объекты. Опять же, можно взять класс из сторонней библиотеки, унаследоваться от него и поменять его логику работы.
----
Я привел тебе пример со сторонней библиотекой, но такой паттерн можно использовать и внутри своего кода. Например, ты пишешь класс, который используется в нескольких местах кода, но в них он должен создавать немного разные объекты. Ты можешь использовать тут Фабрику.
Вообще, одна из идей ООП это разделение кода на изолированные друг от друга классы, где автор класса определяет, что с ним можно делать, а что нельзя. Такой подход помогает, например, распределить написание сложного кода между несколькими разработчиками.
Фабрика - это как раз способ разрешить влиять извне на внутреннюю логику работы класса.
----
Я также попробовал поискать примеры Фабрик из реального кода, но они встречаются довольно редко. В Symfony в компоненте Form для работы с формами есть класс FormFactory. В коде Firefox можно найти классы вроде VideoStreamFactory, WebrtcVideoCodecFactory, image/DecoderFactory.
С большой вероятностью тебе не придется писать Фабрики или фабричные методы.
Ты правильно делаешь, что пытаешься разобраться, а не заучивать определения, не понимая их смысла.
Правда, статья не про класс-фабрику, а про фабричный метод, но они похожи по сути. Давай сначала рассмотрим паттерн "класс Фабрика". Фабрика - это объект, основная задача которого - создавать другие объекты.
Если тебе в коде нужно просто создать объект, то конечно, его надо создавать через new. Не нужно изобретать никаких Фабрик.
Но если ты пишешь, например, библиотеку и хочешь, чтобы ее пользователи могли как-то влиять на логику создания объектов (выбирать, какой именно объект создать и с какими аргументами), то ты можешь вынести эту логику в Фабрику и разрешить пользователю ее подменять на свою.
Допустим, что мы пишем систему хранения файлов (куда можно загружать файлы и потом делать по ним поиск). Где-то в глубине этой системы есть класс Indexer, который принимает файл, сохраняет его на диск, создает объект, содержащий информацию об этом файле и сохраняет его в БД. Например, если передать ему аудиофайл, то он создаст и сохранит в БД объект AudioFileInfo, который содержит информацию о длительности, битрейте, используемом кодеке. Если передать картинку, то он создаст объект ImageInfo с размерами картинки, глубиной цвета. И так далее. На каждый тип файла создается свой класс с параметрами таких файлов:
$indexer = new Indexer();
$file = new File('/tmp/image.jpeg');
$info = $indexer->save($file); // Возвращает объект ImageInfo
Код в классе Indexer может выглядеть так:
function save(File $file)
{
$type = $this->getFileType($file);
if ($type === 'image/jpeg' || $type === 'image/png') {
$info =new ImageInfo($file);
}
....
Допустим, мы написали эту систему и распространяем ее. Но вдруг у пользователя возникла проблема: он хотел бы, чтобы система также могла извлекать и сохранять информацию о файлах 3Д-моделей, но разработчики системы это не предусмотрели. Код сторонней библиотеки пользователь исправить не может, и получается, ничего сделать нельзя.
Проблему можно было бы решить, если бы создатели класса Indexer не пытались перечислить все известные им типы файлов прямо в этом классе, а вынесли бы создание объектов в Фабрику:
class Indexer
{
function __construct(private FileInfoFactory $factory) {}
function save(File $file)
{
$type = $this->getFileType($file);
$info = $this->factory->getInfoForType($type, $file);
...
В таком случае пользователь может создать свой класс AdvancedFileInfoFactory (наследник FileInfoFactory), который умеет анализировать также файлы 3Д-моделей и передать его в конструктор вместо FileIInfoFactory:
$indexer = new Indexer(new AdvancedFileInfoFactory));
$info = $indexer->save(...);
То есть, Фабрика позволяет пользователю класса или библиотеки влиять на процесс создания объектов где-то внутри библиотеки.
А еще правильнее было бы сделать интерфейс FileInfoFactoryInterface и указать в конструкторе Indexer его, а не FileInfoFactory, так как в этом случае пользователь не обязан будет наследоваться от него.
-----
Теперь что касается Фабричного метода. Это почти то же самое, только вместо класса-Фабрики, который мы передаем через конструктор, мы делаем метод-фабрику. И тот, кто наследует наш класс, может его переопределить и таким образом повлиять на то, как создаются объекты. Опять же, можно взять класс из сторонней библиотеки, унаследоваться от него и поменять его логику работы.
----
Я привел тебе пример со сторонней библиотекой, но такой паттерн можно использовать и внутри своего кода. Например, ты пишешь класс, который используется в нескольких местах кода, но в них он должен создавать немного разные объекты. Ты можешь использовать тут Фабрику.
Вообще, одна из идей ООП это разделение кода на изолированные друг от друга классы, где автор класса определяет, что с ним можно делать, а что нельзя. Такой подход помогает, например, распределить написание сложного кода между несколькими разработчиками.
Фабрика - это как раз способ разрешить влиять извне на внутреннюю логику работы класса.
----
Я также попробовал поискать примеры Фабрик из реального кода, но они встречаются довольно редко. В Symfony в компоненте Form для работы с формами есть класс FormFactory. В коде Firefox можно найти классы вроде VideoStreamFactory, WebrtcVideoCodecFactory, image/DecoderFactory.
С большой вероятностью тебе не придется писать Фабрики или фабричные методы.
> Вот функция из класса фабрики. Почему бы просто не сделать это сразу в функции clientCode?
Я понимаю твой вопрос так: зачем нужен фабричный метод в классе SocialNetworkPoster и наследники вроде FacebookPoster, если мы можем просто передавать объект SocialNetworkConnector в конструктор этого класса:
$poster = new SocialNetworkPoster(new FacebookConnector('login', 'pass'));
Правильно?
Действительно, здесь можно было бы просто передавать Connector в конструктор и обойтись без фабричного метода и класса FacebookPoster. Если ты прочел мой пост выше и понял суть паттерна фабричный метод, то предлагаю тебе подумать, в какой ситуации его не получится заменить на внедрение зависимости через конструктор.
Ответы:
1) например, может быть так, что SocialNetworkPoster передает какие-то аргументы в метод getSocialNetwork(), а тот передает их в конструктор FacebookConnector:
class FacebookPoster
{
function getSocialNetwork(string $proxyServer)
{
return new FacebookConnector($proxyServer, $this->login, $this->password);
}
2) может быть так, что в классе SocialNetworkPoster не один абстрактный метод, а несколько, и их надо подменять для разных соцсетей.
3) может быть так, что объект FacebookConnector "одноразовый", и на каждый новый пост надо создавать новый объект. Тогда мы не можем заранее угадать, сколько объектов FacebookConnector надо создать и передать в конструктор.
>Я также попробовал поискать примеры Фабрик из реального кода
>С большой вероятностью тебе не придется писать Фабрики или фабричные методы.
Просто никто не называет свои классы "фабрика".
Все сервисы создает фреймворк через DI контейнер, но для любого нестандартного действия, типа получения конфига из базы, придется написать класс "фабрики".
Большинство сущностей создает ОРМ, но только если они уже есть в базе. Если нужно создавать объект с нуля или получать откуда-то снаружи, скорее всего это будет делать отдельный класс.
Плюс в процессе работы с данными придется все время создавать объекты. Так условный сервис "ReadCsv" это по сути фабрика, хоть приписки "Factory" у него нет.
Хейт в том, что поведение интерпретатора должно зависеть только от кода твоего проекта
>Объясните мне кто-нибудь ебучий паттерн фабрики
Есть интерфейс Transport.
Есть класс Car который наследует Transport.
Есть абстрактный класс TransportCreator который абстрактным методом обязывает наследника создать метод buildTransport коий обязан вернуть объект интерфейса Transport.
далее у нас появляется класс CarBuilder наследник абстрактного класса TransportCreator и у тебя этих билдеров могут быть сотни.
Смысл его в том, чтобы создавать объекты в одном классе, а не писать по всему проекту new Object()... Потому как ты при изменении зависимости класса меняешь это в одном месте, а не в сотне.
>если можно изначально код привязывать не к классу, а интерфейсу Transport?
Чтобы наплодить туеву хучу кода и когда нужно будет, что-то поменять в этом классе или интерфейсе, слетать на марс?
На рефакторинг гуру вроде всё предельно ясно описанно, что даже такой долбаёб как я разобрался. Да и дрочить паттерны я считаю гиблым делом т.к один пёс ты их будешь делать крайне редко если вообще будешь.
На мой взгляд, объяснено плохо. Смысл Фабрики не в том, чтобы избавиться от new (так как ты просто получишь 100 вызовов метода вместо 100 new), а смысл в том, чтобы можно было влиять на процесс создания объектов путем подмены фабрики.
Про это на сайте по моему не написано.
>чтобы можно было влиять на процесс создания объектов путем подмены фабрики
Тут да, я перепутал. Фабричный метод это подмена фабрик, а сама фабрика уже решает вопрос создания\изменения объекта в одном месте.
>смысл в том, чтобы можно было влиять на процесс создания объектов путем подмены фабрики
годно объяснил
deworker.pro
Скринкаст по slim и react.
3, 4 уроки. Они бесплатные.
Или можешь найти его интенсив на курсхантере по Ларавел. Там он, ебать, часов 5 эти контейнеры мусолит. Правда подача своебразная у Димки, конечно, раньше была.
Чтобы понять, как работает Докер, придется лучше изучить Линукс, в частности контейнеры и что это такое. Также нужны знания командной строки линукса и основных команд. Без этого за Докер нет смысла браться.
Твоя проблема в том, что вместо чтения официальной подробной документации ты читаешь всякую фигню.
Докер придуман для того, чтобы создать контейнер, в который установлена нужная программа со всеми нужными зависимостями.
Допустим, ты написал программу на PHP - сайт. Ему для работы нужен Линукс и PHP строго определенной версии с строго определенными расширениями (так как ты проверял его только на этой версии и нет гарантий, что он заработает с другой). И теперь ты хочешь переслать его кому-то другому (или развернуть на хостинге).
Чтобы сайт заработал, тому человеку нужно установить PHP строго нужной версии и расширения к нему. Логичнее всего было бы сделать файлик, где были бы описаны нужные версии, чтобы человек мог набрать какую-то команду и эти версии бы установились.
Но большинство дистрибутивов Линукса такое не поддерживают. Они позволяют поставить только самую новую версию PHP, а не ту, которая нужна. Более того, может быть у человека на компьютере есть несколько проектов, и ему нужна для каждого проекта своя версия PHP, но Линукс не позволяет поставить несколько версий одной программы одновременно.
Наконец, у человека может быть вообще не Линукс, а Windows или Мак.
Докер предлагает такое решение проблемы: он создает пустой "контейнер", который изолирован от основной системы, и внутрь этого контейнера устанавливается нужная программа с нужными библиотеками, расширениями итд. Внутри контейнера своя файловая система, в которую можно ставить программы и они не будут вызывать конфликтов на хосте, своя виртуальная сеть итд. Это почти виртуальная машина.
А на Виндоуз и Маке Докер запускает виртуальную машину с Линуксом внутри и там разворачивает контейнер.
В итоге пользователю нужно только скачать Докер-файл, запустить команду и Докер создаст контейнер и установит в него все, что нужно. Аналогично можно поступить, чтобы развернуть сайт на хостинге.
Докер-файл это просто последовательность команд, которые выполняются внутри контейнера, чтобы установить нужную программу. Например, для контейнера с PHP команды могут выглядеть так:
- скачать исходный код нужной версии PHP
- скомпилировать и собрать интерпретатор PHP
- скачать нужные расширения
- скомпилировать их
Вот пример Докер-файла, который устанавливает PHP в пустой контейнер: https://github.com/docker-library/php/blob/master/8.2-rc/buster/cli/Dockerfile . Если ты понимаешь весь этот файл и можешь написать такой с нуля, считай, что ты изучил Докер.
В итоге, если ты хочешь в проекте использовать Докер, то ты делаешь Докер-файлы для всех нужных программ (PHP, mysql, nginx и все остальное) и после этого разработчик может одной командой установить контейнеры с ними к себе на компьютер. Если тебе лень делать Докер-файлы, для многих программ они уже сделаны и можно просто скачать готовый с Docker Hub.
По моему мнению, Докер это костыль, потому что люди не захотели идти сложным путем и исправить Линукс, чтобы в него можно было ставить нужные версии программ, а просто сделали виртуальную машину и ставят программу в нее. Увы, этот костыль стал очень популярным, но в мире Линукса костыли это нормальное явление.
Я описал в общем, что такое Докер, теперь иди сначала изучай Линукс, командную строку, как компилировать и собирать программы из исходников, а потом читай документацию по Докеру и тогда ты сможешь во всем разобраться.
Чтобы понять, как работает Докер, придется лучше изучить Линукс, в частности контейнеры и что это такое. Также нужны знания командной строки линукса и основных команд. Без этого за Докер нет смысла браться.
Твоя проблема в том, что вместо чтения официальной подробной документации ты читаешь всякую фигню.
Докер придуман для того, чтобы создать контейнер, в который установлена нужная программа со всеми нужными зависимостями.
Допустим, ты написал программу на PHP - сайт. Ему для работы нужен Линукс и PHP строго определенной версии с строго определенными расширениями (так как ты проверял его только на этой версии и нет гарантий, что он заработает с другой). И теперь ты хочешь переслать его кому-то другому (или развернуть на хостинге).
Чтобы сайт заработал, тому человеку нужно установить PHP строго нужной версии и расширения к нему. Логичнее всего было бы сделать файлик, где были бы описаны нужные версии, чтобы человек мог набрать какую-то команду и эти версии бы установились.
Но большинство дистрибутивов Линукса такое не поддерживают. Они позволяют поставить только самую новую версию PHP, а не ту, которая нужна. Более того, может быть у человека на компьютере есть несколько проектов, и ему нужна для каждого проекта своя версия PHP, но Линукс не позволяет поставить несколько версий одной программы одновременно.
Наконец, у человека может быть вообще не Линукс, а Windows или Мак.
Докер предлагает такое решение проблемы: он создает пустой "контейнер", который изолирован от основной системы, и внутрь этого контейнера устанавливается нужная программа с нужными библиотеками, расширениями итд. Внутри контейнера своя файловая система, в которую можно ставить программы и они не будут вызывать конфликтов на хосте, своя виртуальная сеть итд. Это почти виртуальная машина.
А на Виндоуз и Маке Докер запускает виртуальную машину с Линуксом внутри и там разворачивает контейнер.
В итоге пользователю нужно только скачать Докер-файл, запустить команду и Докер создаст контейнер и установит в него все, что нужно. Аналогично можно поступить, чтобы развернуть сайт на хостинге.
Докер-файл это просто последовательность команд, которые выполняются внутри контейнера, чтобы установить нужную программу. Например, для контейнера с PHP команды могут выглядеть так:
- скачать исходный код нужной версии PHP
- скомпилировать и собрать интерпретатор PHP
- скачать нужные расширения
- скомпилировать их
Вот пример Докер-файла, который устанавливает PHP в пустой контейнер: https://github.com/docker-library/php/blob/master/8.2-rc/buster/cli/Dockerfile . Если ты понимаешь весь этот файл и можешь написать такой с нуля, считай, что ты изучил Докер.
В итоге, если ты хочешь в проекте использовать Докер, то ты делаешь Докер-файлы для всех нужных программ (PHP, mysql, nginx и все остальное) и после этого разработчик может одной командой установить контейнеры с ними к себе на компьютер. Если тебе лень делать Докер-файлы, для многих программ они уже сделаны и можно просто скачать готовый с Docker Hub.
По моему мнению, Докер это костыль, потому что люди не захотели идти сложным путем и исправить Линукс, чтобы в него можно было ставить нужные версии программ, а просто сделали виртуальную машину и ставят программу в нее. Увы, этот костыль стал очень популярным, но в мире Линукса костыли это нормальное явление.
Я описал в общем, что такое Докер, теперь иди сначала изучай Линукс, командную строку, как компилировать и собирать программы из исходников, а потом читай документацию по Докеру и тогда ты сможешь во всем разобраться.
Плюс, в Докере есть, мягко говоря, "странности".
Одна из странностей в том, что Докер делает образы виртуальной машины из "слоев" и на каждую команду в Докер-файле создает новый слой. То есть, если у тебя в Докер файле 5 команд, то Докер вместо того, чтобы их выполнить и потом сохранить образ, сделает образ из 5 слоев. Это негативно влияет на производительность, потому в Докер-файлах приходится группировать много команд в одну, что выглядит очень уродливо:
команда1 && \
команда2 && \
команда 3
Но это никого не смущает и никто это не исправляет. Умные люди, объясните, почему так сделано?
>Но это никого не смущает и никто это не исправляет
Так ты один такой шизик. Кому в здравом уме может прийти в голову "исправлять" одну из фишек? Или синтаксически вводить что-то типа транзакций, чтобы тебе красивше было?
>Если ты понимаешь весь этот файл и можешь написать такой с нуля, считай, что ты изучил Докер.
То, что там написано, не имеет никакого отношения именно к докеру, кроме нескольких базовых команд.
Какие транзакции? Это же файловая система, а не база данных, и к тому же она создается единственный раз.
>синтаксически
>что-то типа транзакций
>Какие транзакции? Это же файловая система, а не база данных
Справка есть? Пенсию то хоть получаешь?
Вряд ли у него есть деньги на пхпшторм, даунич. Поставит он себе ломанную версию позапрошлого года и будет есть прелое сухое говно.
Я раз в месяц фейкопочту регаю и ебашу формочки для кабанчика. Похую мне ваще.
>обновлять лицензию каждый месяц с фейкопочтой
>спиздить
Мань, а.
Помнится например с сервисом di.fm подобная хуйня была, давно прикрыли. Ахуенные кодеры в jetbrains.
У кого нибудь есть нормальный кряк? Eval reset работает? Ja-netfilter-all только старые версии тянет
640x360, 0:07
Ja-netfilter-all отлично работает, скрин с последней версией я скидывал. Хватит троллить тупостью.
Ебать сайт jetbra.in открыл, рил работает я свой рот ебал. Так, теперь можно харкать в лицо кто там руками обновляет лицензию каждый месяц.
Чем мне ja-netfilter-all нравится, тем что там можно выставить вручную дату окончания лицензии. Буду новую версию проверять, спасибо анончик
Вывел эти значения при помощи псевдо-элемента em::after и функции attr(). Думал зафлоутить получившийся контент, но как ни крути - не выходит его поместить за пределы параграфа именно таким образом, как изображено на примере. Подскажите, в какую сторону копать.
Php-бояре могут немного в классах бутстраповских поковыряться, аяксик отправить, на крайняк - простенькое на vue что-то набросать, использую готовую верстку. А это - херня какая-то, которая тебе не пригодится никогда.
Ну когда-то они были, наверное, актуальны. Но щас из "углубленного"достаточно флексы понимать мало-мальски, ну и по доке бутстраповской пробежаться, чтобы понятно было, какие примерно возможности там есть. 90% задач по верстке, которые могут на тебя иногда свалиться перекроешь.
Если ты используешь float, то ты можешь вытащить его за пределы параграфа отрицательным маргином слева. Вот урок про маргины у флоатов: https://github.com/codedokode/pasta/blob/master/html/float-margins.md
Тут есть небольшой подвох, что мы не знаем размер флоата и непонятно, на сколько пикселей его надо вытащить влево. Это решается заданием фиксированной ширины флоату (условно 50 или 100px).
Второй вариант — использовать абсолютное позиционирование. Там есть такой трюк, что если не указывать top/bottom, то элемент размещается на той высоте, на которой бы он был без позиционирования. Соответственно, мы используем абс. поз. и задаем только left или right (например, right 100%), а положение по вертикали не задаем.
Оба этих способа хорошо бы проверить, как они себя ведут, если на одной строке 2 выносных блока. Скорее всего при обоих способах они наложатся друг на друга, было бы здорово, если бы ты придумал трюк, как можно этого избежать. Мне кажется, тут надо копать в сторону флоатов, так как абс. поз. элементы не могут никак влиять на другие элементы, а флоаты могут влиять друг на друга..
Отчего же? Хорошее задание, и выноски мне нравятся визуально.
>>505577
Я не думаю, что эту выноску можно сделать с помощью flexbox. Вы бы прежде чем писать, хотя бы в голове прикинули, как оно должно работать.
Флоаты по-прежнему актуальны, как мне кажется, не для создания колонок, но для выносок и врезок, то есть для того, для чего они и были придуманы. Колонки ими делать конечно сегодня не очень много смысла, разве что для совместимости с древними браузерами.
Бутстрап годится для админок, но я бы не стал сайт с индивидуальным дизайном делать на нем, так как он будет больше мешаться, чем помогать. В крайнем случае, если нужен какой-то модуль из него, можно подключить только его. А то целиком бутстрап очень громоздкий и в нем есть глобальные селекторы и нет неймспейсов, так себе удовольствие на нем что-то верстать.
>Я не думаю, что эту выноску можно сделать с помощью flexbox. Вы бы прежде чем писать, хотя бы в голове прикинули, как оно должно работать.
Нахера мне эту залупу в голове прикидывать? Пускай верстальщик прикидывает. Мне никто подобную задачу и не подумает ставить.
Спасибо! Сегодня с утра допёр, как это делать. Вчера вечером позиционирование вообще из головы вылетело.
ОП, а ты можешь перезалить макет для вёрстки, который в последнем задании, плз? По имеющимся ссылкам ничего нет уже. Был бы признателен, если бы на гугл диск забросил.
Очевидно что вариант с типизацией. Без типизации у тебя вообще чушь какая-то написана. -1 каво?
А вообще в идеале у тебя должен быть не чистый массив, а объект типа Collection, у которого и будет функция getLength().
Первый пример - пример отвратительного кода.
Если у тебя случилось какое-то неправильное поведение - крайне желательно выкидывать эксепшны.
Потому что у тебя будет такое:
$length = getArrLen([]) + getArrLen(1) + getArrLen([1,2,3]);
В твоём случае это всё выполнится и будет неправильный результат, а ошибку такую очень сложно дебажить.
Эта ссылка у тебя работает?
https://drive.google.com/file/d/0Bzrx7iBXaXrubkU4MmpvbnUwMk0/view?usp=sharing&resourcekey=0-FCPXJNB0MGSG09sEIlhphg
Также, можно скачать тут https://www.psdking.eu/565/webpaint-free-homepage-psd.html или гуглить "webpaint PSD"
Да, спасибо, бобра тебе!
>>506311
А сколько функция (метод) должны возвращать типов данных с точки зрения правильного красивого кода, всегда один?
Т.е. если функция возращает инт и стр или инт и бул - это неправильно описанная функция?
>>506335
Пхпшторму почему-то не нравиться такой вариант, предлагает переименовать в ignored.
* Т.е. инт или стринг, инт или бул.
>А сколько функция (метод) должны возвращать типов данных с точки зрения правильного красивого кода, всегда один?
Возвращаемый тип всегда один. В пхп есть возможность не указать тип, тогда возвращаемое значение будет считаться mixed. Это считается дурным тоном и используется только в крайних случаях, в недрах фреймворков или орм, короче в технической обертке далекой от бизнес логики.
Юнион типы нужны не для того чтобы принимать и возвращать "разные" значения (bool|string|Cat|Dog). А для того чтобы принимать и возвращать максимально одинаковые значения, но по техническим причинам с разными типами (int|foat 1 и 1.0 или string|Stringable).
>Пхпшторму почему-то не нравиться такой вариант, предлагает переименовать в ignored.
Не используемых переменных быть не должно. Точка. Используй count() и не еби мозги.
Спасибо за подробные ответы.
>Используй count() и не еби мозги.
Это понятно, ф-ия для примера.
С каждым типом данных надо работать по-своему. Например, числа можно складывать, а строки нельзя. У массива можно узнать число элементов, а у числа нельзя.
Если твоя функция возвращает разные типы данных, то тебе придется после ее вызова писать if с проверкой, какой тип мы получили и это очень неудобно. Программисты тебя проклянут за это.
Также, это нелогично. Допустим, у тебя функция рассчитывает срок возврата кредита. Срок это число (дней или месяцев или лет) и других вариантов быть не может.
Поэтому функция должна возвращать один тип данных. Разрешается также использовать null для случая, когда результат не удалось определить. То есть string|null это допустимый вариант.
Из этого правила есть исключения. Например, если у тебя есть функция, которая возвращает последний элемент массива. Так как в массиве может быть что угодно, то и функция может вернуть что угодно. В такой ситуации это нормально, но моему опыту, такое встречается в 1% случаев, а в 99% у тебя должен быть строго определенный тип возврата.
Ок, спасибо, я понял.
В PHP 8.1 появилось объединение возвращаемых типов. Хотя, то что ты написал, тоже правда.
@all
https://laravel-news.com/modern-php-features-explained
Хорошая статья про полезные новинки в PHP 8.1
Ты из PHP-матрицы звонишь?
Вряд ли кто-то тебе ответит, так как тут много неизвестных. Ты не написал, как ты реализовал эти плашки, какие возможности opencart использовал, как они хранятся в БД, как выводятся в шаблоне.
Все на стандартных средствах опенкарта, как выводятся вот хз, я просто не погромист
Как в ларавел происходит импорт файлов по фреймворку?
Везде используются namespace и use соответственно.
use Illuminate\Database\Eloquent\Factories\HasFactory;
Типа такого, при этом сам файл нигде не подключен через include например, как он его видит?
composer и psr-0/psr-4 гугли.
A
и
B
. Вам нужно вычислить их сумму
A
+
B
. В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение."
решение не верное ==>
"<?php
$str=input.txt;
$x=preg_replace ('/[^0-9]/',"",$str);
echo array_sum(str_split($x));"
Вводстандартный ввод или input.txt - это как сделать,через форму? или можно как то по другому.
Например input на питоне есть, а в php как получить данные от пользователя понять не могу.
$a = (int) readline('Введите число A: ');
$b = (int) readline('Введите число B: ');
echo $a." + ".$b." = ".($a+$b)."\n";
Спасибо.
Ниже полный текст задачи:
A. A+B 1
Ограничение времени2 секунды
Ограничение памяти64Mb
Вводстандартный ввод или input.txt
Выводстандартный вывод или output.txt
Даны два числа A и B.
Вам нужно вычислить их сумму A+B.
В этой задаче для работы с входными и выходными данными вы можете использовать и файлы и потоки на ваше усмотрение.
Формат ввода
Первая строка входа содержит числа A и B разделенные пробелом.
Формат вывода
В единственной строке выхода выведите сумму чисел A+B
Пример 1
Ввод Вывод
2 2 4
>можно ли это реализовывать проще?
А куда уж проще? 5 строк кода, можно сократить до двух: не назначать $a, $b, $c:
$str = preg_split ("/ /", trim(fgets(STDIN)));
echo $str[0]+$str[1];
Ок, спасибо.
Тогда вряд ли кто-то сможет подсказать, не видя как у тебя все настроено. Разве что кто-то делал точно такой же проект и у него была точно такая же проблема.
>>508121
Некоторые БД поддерживают передачу SQL-запроса и параметров к нему отдельно:
'SELECT x FROM y WHERE z = ?', 123
а некоторые нет. На такой случай PDO имеет эту опцию, которая заставляет PDO самостоятельно подставить (экранированные) параметры в запрос и передать уже собранный запрос в БД:
'SELECT x FROM y WHERE z = 123'
Благодаря этому запросы с параметрами можно использовать с любой СУБД.
Если ты выполняешь один запрос с разными параметрами много раз, то выгоднее не использовать эту опцию (если БД это поддерживает), так как в этом случае в БД будет посылаться один и тот же запрос и она может закешировать план его выполнения.
Параметры это когда ты в запросе ставишь плейсхолдеры вроде
WHERE x = ?
или
WHERE x = :name
Используется автозагрузчик, читай урок https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>508383
fgets()
>>508446
[$a, $b] = preg_split(...);
В ларавел в миграциях есть такая запись
Schema::create('calls', function (Blueprint $table) {...}
Как расшифровывается запись Blueprint $table, каким образом класс
Blueprint взаимодействует в функции с объектом $table?
Объект $table является экземпляром класса Blueprint.
Внедрение зависимостей(Dependency Injection) гугли.
Это тайп-хинт - указание, какого типа переменную можно передать в функцию: https://www.php.net/manual/ru/language.types.declarations.php
Тут указано имя класса Blueprint, это значит что можно передать только объект такого класса или его наследника.
Как в ларавел накатывать миграцию без создания php файла миграции? Чтобы мне не удалять его каждый раз при накатывании, а то оно пишет class already exists.
Ты какой херней там занимаешься?
Ты скорее всего называешь все миграции одинаково, а надо у каждой свое имя класса.
Обычно каркас миграции создают консольной командой, и она проставляет правильное имя.
Это объект, который содержит описание изменений, которые надо внести в таблицу, например, какие колонки добавить. Ты добавляешь информацию в этот объект в своей миграции.
Я бы не сказал, что это паттерн, это просто обычный ООП, в котором разные вещи представляются в виде удобных объектов. В данном случае информация об изменениях в таблице представлена объектом Blueprint.
Если ты плохо знаешь ООП, то в шапке есть учебник и в нем глава про основы ООП.
Ладно, а откатить/накатить определенную миграцию можно? Знаю типа по счету там как-то можно, ну а если у меня их штук 20 было, и я уже не помню какая там за какой была?
Создавай блядь новую, ленивый хуй. Миграции нужны чтобы на новый сервер переезжать, а не что бы ленивое хуйло колонки туда сюда переименовывало.
Ты скорее всего не понимаешь для чего вообще нужны миграции. Они используются для того чтобы держать ddl команды в репозитории.
Как было бы без миграций: ты пилишь некий функционал для пользователей для которого тебе требуется таблица users, ты создал ее локально через ddl команду, добавил в нее нужные тебе поля, индексы и тд. залил php код, который добавляет функционал, в репозиторий. Потом твой коллега, у которого тот же проект с бд развернут локально, хочет дополнить твой функционал по юзерам, но в его локальной базе данных нет той таблицы users которую ты создавал, поэтому тебе нужно рассказать как ему создать ту же таблицу с теми же полями. Миграции решают эту проблему, ведь ты можешь заливать их в репу как и весь остальной код.
Отвечая на твой вопрос, ты можешь написать ddl команду(CREATE TABLE) обращаясь напрямую к базе, чтобы не создавать миграцию. Однако это херовая практика ведь ты больше не можешь просто скопировать папку с проектом на другой комп написать artisan migrate и все у тебя все готовые таблички в базе, поэтому работающие миграции никогда не удаляют, или если она больше не нужно то перед удалением ее нужно откатить. Не волнуйся по поводу огромного количества миграций, это нормально и помни если тебе нужно добавить в существующую таблицу(предположим users) поле (предположим name) и ты не можешь позволить себе потерять все данные в бд, тебе нужно создать новую миграцию типо add_name_to_users_table, а не редактировать миграцию create_users_table
Пынямаю, благодарю.
Ты хотя бы пытался документацию открывать?
Можно откатывать, но только N последних. То есть, нельзя откатить миграцию из середины списка, только с конца. Аналогично с накатить - можно добавлять миграции только последовательно, без пропусков, а не в произвольном порядке.
> и я уже не помню какая там за какой была?
Это записано в БД, в каком порядке они были.
Блог на ларе тянет на курсач максимум. А учитывая что 99% там можно тупо сгенерит, то на лабу.
Смотря че туда напихать. Обвешивать те его можно бесконечно всякими приколюхами.
Да сдался ты мне че тебе перечислять. Мне хватило для устройства на работу, да и поебать.
Я как то слышал от мужика с 100лет опыта в пыхе, что, мол, не люблю ларавель потому что нет однозначно "правильного" способа построить код. Если захочется посмотреть структуру каноничного приложения на ларавель - найти такой просто не удастся. Можно вообще сделать проект, в котором /app останется пустой, одну и ту же вещь реализовывать множеством способов. Возможно он имел опыт с более старыми версиями, а может это на самом деле плюс, а не минус
А где он есть этот правильные способ и что он ваще из себя представляет?
Это копия, сохраненная 11 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.