Оказывается, лимоны выведены искуственно. И кому только пришла в голову идея вывести кислый несъедобный фрукт? Пока кто-то выводит фрукты, мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.
ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.
Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>1998470 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, можно искать решения и обсуждения задач).
С чего начать
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.
Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.
Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:
Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
Оформляй код аккуратно!!! — например пропусти через 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? — Да, однозначно. Посмотри любую вакансию.
Код стоит писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.
Вообще, в 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, где все это описано подробнее и даны примеры оформления:
>>2062494 (OP) А чего у вас в шапке так тухло с книгами? Наверняка уже кучу годноты завезли под новые версии пыхи, а у вас только Зандстра 2009 года выпуска
Ну шо вы тут, живы? Нид хелп На вп натягиваю вёрстку бутстрепа, первое это результат, навбар вывожу через wp_nav_menu, всё отлично но вот проблема в дропдавн меню, я не знаю как задать классы для li и ul внутри дропдавна. Видел что на пхп можно заменять нужные аттрибуты и классы, но они вроде заменяются везде, а мне нужно что бы только в дропе были особенные. Кто может подсказать чем путним, как лучше сделать
>>2062832 Добавляешь колонку с датой записи. Потом по крону апдейтишь как-то так UPDATE hui SET amount = amount * 0.2, added = NULL WHERE added IS NOT NULL AND DATEDIFF(NOW(), added) >= 7;
>>2063140 >>2063146 Ну смотрите, ввожу в поиске "php mysq(любой другой язык) простой сайт\проект" и получаю видосы по полчаса-час где сразу на практике могу сделать что-то и заебенить на гитхаб, и он не пустой и рука набита, плюс экспириенс как применить знания на практике. В книжках тебе сто страниц будут просто ебать мозг копипастой.
>>2063184 >ввожу в поиске "php mysq(любой другой язык) простой сайт\проект" Первое видео - ускоренное видео как чел пишет код с комментариями уровня: вот тут делаем это, а там вот то. Почему, зачем, что делаем и куда двигаемся - не понять
>>2063184 >видосы по полчаса-час где сразу на практике могу сделать что-то и заебенить на гитхаб >>2063215 >Делаем дырявую форму час >Выкладываем на гитхаб >"Мам, я програмист! Ну скажи им"
Соответственно, если ты выведешь echo "<b>", то это будет воспринято браузером как тег b.
Но что, если ты хочешь просто вывести текст, как есть, чтобы спецсимвол вроде < не начинал бы новый тег, а просто выводился бы как угловая скобка? Для этого тебе надо в тексте заменить спецсимволы на HTML-сущности:
< - на & lt; > - на & gt; & - на & amp; " и ' на & quot; и & #039;
Вообще, это относится не только к HTML. Если ты подставляешь текст в ссылку, ты должен экранировать спецсимволы (но не с помощью htmlspecialchars, а с помощью urlencode), если ты подставляешь переменную в SQL-запрос, ты тоже должен экранировать спецсимволы и так далее.
Под WIndows тоже есть планировщик задач, и можно сделать, чтобы твой php скрипт запускался в определенное время. Только не забудь настроить, чтобы он запускался из-под нужного пользователя.
Хотя Windows, конечно, не лучший выбор для такой задачи. Ну например, если твой компьютер будет выключен в момент, когда должен запуститься скрипт, то естественно, ничего не запустится.
Если в видео объясняется теория, а не просто показывается как писать код, то конечно, имеет смысл его посмотреть.
Но я сомневаюсь, что за полчаса-час можно рассказать основы языка, ООП, архитектуры для начинающего. Следовательно, из такого видео ты научишься только переписывать код с экрана, и какая польза от этого "умения", я не понимаю. Не проще ли сразу скопировать код с гитхаба, и не тратить время?
>>2063184 На ютубе оче много ничего не умеющих балаболов, к тому же через чтение инфа быстрее воспринимается - где там очередной прафессионал будет жопу тянуть 15 минут, ты за это время уже гугл прошерстишь и прочитаешь что надо.
>>2063643 Head first design patterns - книга старая, но очень годная и написанная очень простым языком. Примеры там на джаве, но это не мешает. Классика жанра "Приемы объектно-ориентированного проектирования" от банды четырех. Ну и Зандстра "Объекты, шаблоны и методики программирования"
>>2063961 >Ну и Зандстра "Объекты, шаблоны и методики программирования" Бля пыхыписты, у вас за 10 лет реально что ли другой книги не вышло? Какого хрена вы советуете всегда один и тот же протухший антиквариат? мимо
>>2062494 (OP) Насколько вообще реально за год выучить php и вкатиться джуниором? А то я слушаю и все вокруг говорят о том что джуниоров даже за еду работать уже не берут так как программистов такая куча что без опыта работы они нахуй не нужны никому стали.
>>2064090 Как повезет, я пришел вообще нихуя не зная, написав разве что кривой калькулятор, который мне итт обосрали. На собесе честно сказал что хочу и готов учиться и внезапно прокатило. А первое же задание мне дали писать на луа, а не пыхе, тут то я и охуел
>>2064128 Да, пилю простенькие серваки для мобильных казуалок и подумываю наконец свалить куда-нибудь, но я тот еще аутист, так что дико стремаюсь собесов.
>>2063599 >Докер это корявое решение. В винде есть свой планировщик задач. Почему? Какова вероятность, что php проект будет на продакшене на windows сервере крутиться? Имеет же смысл осваивать то, что встретишь на работе
>>2064204 У меня нет столько времени, работа сама себя не работает к сожалению, так что в будние дни максимум часа 2-3 смогу выделять в лучшем случае, поэтому и спросил про год.
ДОБРОЕ УТРО! ПОМОГИТЕ, ОТВЕТИТЬ НА МОИ ВОПРОСЫ! Я ВКАТЫВАЮСЬ В ВЁРСТКУ, НО МНЕ СКАЗАЛИ, ЧТО В 2К21 ГОДУ БОЛЬШЕ ВЕРСТАЛЬЩИКОВ НЕ СУЩЕСТВУЕТ, СКАЗАЛИ УЧИТЬ РНР, ПОТОМУ ЧТО ДАЖЕ ВОРДПРЕСС ИМЕЕТ REST API И МОЖЕТ СЛУЖИТЬ КАК HEADLESS CMS. ПОЭТОМУ Я ОЗНАКОМИЛСЯ С САМЫМИ БАЗОВЫМИ ОСНОВАМИ РЕАКТА
1) Если я хочу быть верстальщиком, фронт-жабаскриптером, реакт-макакеном. То что мне нужно знать об аутентификации, сессиях и jwt токенах? Процесс аутентификации полностью лежит на плечах бэкенда или мне как фронт-жабоскриптеру что-то надо ajax,fetch-запросами куда-то посылать для аутентификации?
Я читал на хабре про jwt-токенты, РНР сессии, но нихуя не понял
2) Что мне нужно знать об web-сокетах? Если я как верстак, фронт-жабаскриптер должен буду делать чат. То что мне нужно знать об web-сокетах? Я тоже про них читал на learnjs, но нихуя не понял.
ОЧЕНЬ СИЛЬНО ПРОШУ ПРОЩЕНИЯ ЗА СВОЁ СУЩЕСТВОВАНИЕ! ПРИНОШУ ГЛУБОЧАЙШИЕ ИЗВИНЕНИЯ!
>>2065070 Хз как вкатиться в этот ваш битрикс. Я пробовал его установить и потестить, так там ведь просто тонны лапшекода, в котором по идее надо хорошо разбираться и решать возникающие проблемы. Книг по нему нет, туториалов нет, документация на сайте полное гавно и т.д. Короче вариант не для новичков, имхо
>>2064090 >джуниоров даже за еду работать уже не берут Вообще да. Только куча не программистов, а таких вот вкатывальщиков. Требования к джунам выкатывают в зависимости от запрлаты - у одних будешь за 30к Попенкарт пердолить целыми днями, другие попросят фреймворк, докер, юнит-тесты и дадут со старта 80к. Не слушай местных зазывал - пиздят либо ошибка выжившего.
>>2065315 Блядь, анон, ты ёбнутый совсем местных двачеров слушать? Они тебе такого насоветуют - охуеешь. Какие фреймворки, какие, в жопу, вебсокеты? Любой веб начинается с вёрстки - что бекенд, что фронтенд. Фронтенду вообще особенно хорошо вёрстку знать надо. Выглядит это так: статичная вёрстка + методы + инструменты, потом чистый жаваскрипт и немного динамики, потом уже фреймворки и тд. Куда ты полез вообще, тебя тупо затроллели, либо борщехлебы хейни понаписали из манямирка?
>>2065335 Суть в том, что поковырял вёрстку. Немножко жабаскрипт поковырял.
Но дальше я уже ничего не понимаю. Поэтому родились вопросы: 1) Что я должен знать как верстальщик в процесс аутентификации? Я должен что-то отправлять ajax-запросами? Или я ничего не должен и всё бэкенд сам сделает.
2) Что я должен знать как верстальщик, если придется делать чат. Что я должен делать с веб-сокетами?
>>2065345 >поковырял вёрстку >жабаскрипт поковырял >дальше я уже ничего не понимаю Плохо поковырял значит и надо больше.
>Что я должен знать как верстальщик в процесс аутентификации? >если придется делать чат Очень странные вопросы. Если тебе это всё нужно только для чата, то проще будет нанять кого-то или купить готовый.
>>2065353 >Плохо поковырял значит и надо больше. Это уже в бэке ковыряться надо. Я пытался, на w3schools основы РНР прошёл и SQL. Читал Мэтта Зандстру про РНР ООП, но дальше главы про абстрактные фабрики не осилил. Потом смотрел вводные видео про next.js. Читал на хабре джве статьи про jwt токены. Но нихуя не понял.
На двоще меня высмеяли, что я хватаюсь за всё подряд, хотя если я хочу быть верстальщиком, то мне надо концентрироваться только на хтмл, цсс, жс и жс-фреймворке.
>Очень странные вопросы. |Они родились из того, что я читал в learnjs тему про веб-сокеты. Я всё подряд читаю из learnjs. И я не понял, что это за хуйня, и что я должен из этой темы знать как верстальщик.
>>2065424 >меня высмеяли, что я хватаюсь за всё подряд Ну да. Ты по верхам пробежался просто и думаешь, что освоил что-то. В норме опыт считается только выполненными проектами - сперва говно из палок, потом всё лучше и лучше. Туториалы, книжки и статейки никто в серьёз не воспринимает и не будет - в одно ухо влетело, в другое вылетело.
>не понял, что это за хуйня, и что я должен из этой темы знать как верстальщик Ничего. Верстальщик верстает статические страницы, его динамика почти не касается. Фронтенд разработчик это верстальщик + динамика на js. В вебсокеты не лезь пока - тебе ещё рано.
>>2065424 >Они родились из того, что я читал в learnjs тему про веб-сокеты Тебе вообще туда лезть не нужно, раз хочешь верстку. Вообще всё, что касается бека не трогай
>>2064090 За месяц синтаксис изучаешь, пробуешь сделать что-то связанное базой данных и идешь искать работу. Жопаскрипт освоишь уже на самой работе, хотя, перед тем как устроится, желательно уметь им пользоваться в плане написания функций и вывода ajax запросов. Это не сложно, учится буквально за вечер. Я когда пхпшником устроился, то мне вообще дали говнокод ковырять на asp classic, смачно подохуел тогда.
> НО МНЕ СКАЗАЛИ, ЧТО В 2К21 ГОДУ БОЛЬШЕ ВЕРСТАЛЬЩИКОВ НЕ СУЩЕСТВУЕТ
Это не совсем так. Речь о том, что нет спроса на верстальщиков, умеющих делать только HTML-верстку с CSS без JS. Обычно от верстальщика ожидают, что он реализует и JS-код. При этом JS-код может быть в форме простых скриптов на jQuery (при нажатии на кнопку, показать попап, отправить аякс-запрос), так и в форме приложения на фреймворке вроде React, Vue. То есть предпочтительнее быть не верстальщиком, а полноценным фронтенд-специалистом.
> То что мне нужно знать об аутентификации, сессиях и jwt токенах?
Тебе надо тщательно изучить, как работают куки. Это твоя зона ответственности.
Сессии работают полностью за счет бекенда. Форма логина отправляется на сервер, и в случае успеха, сервер выставляет куку (она содержит id сессии), которая подтверждает наличие авторизации. Эта кука шлется автоматически при любом запросе (то есть и при открытии страницы, и при аякс-запросах) и автоматически проверяется сервером. От фронтенда тут требуется разве что сверстать красивую форму логина.
Отличие JWT-токена от id сессии в том, что для проверки сессии бекенд должен искать (на диске, в редисе, в БД) идентификатор сессии и проверять его правильность. Если у тебя все хранится на одном сервере - проблем нет. Но если у тебя хайлоад и куча серверов, то тебе надо выделить какое-то центральное хранилище для сессий и на него будет сыпаться куча запросов от бекендов.
JWT-токен же содержит цифровую подпись и для его проверки бекенду не надо отправлять никаких запросов в хранилище, а достаточно проверить валидность подписи в токене. Теоретически, JWT-токен можно передавать в куках так же, как и идентификатор сессии, и тогда для фронтенда вообще ничего не меняется. Но часто используют такой паттерн, когда фронтенд шлет логин/пароль на определенный URL, получает JWT-токен и далее должен слать его вместе с каждым запросом явно (а также, в случае получения ответа, что токен устарел, перенаправлять пользователя на форму логина).
Иногда усложняют еще больше и используют OAuth. В случае OAuth, сторонний сайт может перенаправить пользователя на страницу авторизации и после нее получить токен, который даст доступ к данным пользователя. Тут, очевидно, куки уже не используются.
Зачем усложнять? Наверно, чтобы получить универсальное API, к которому можно обращаться не только из фронтенда сайта, но и с других проектов. Позволять другим проектам действовать от имени пользователей.
> Что мне нужно знать об web-сокетах?
Тебе сначала хорошо бы изучить не веб-сокеты, а классические сокеты Беркли. Понять, как вообще данные передаются в сети между машинами. После этого веб-сокеты, после этого прикладные протоколы вроде Autobahn.
> должен буду делать чат.
Ты должен быть не написателем чатов, у универсальным специалистом. Веб-сокеты обычно используются не для чатов, а для синхронизации состояния клиента с сервером (один менеджер взял в работу заказ, и у всех других менеджеров этот заказ исчез с экрана).
Работа на стройке не такая простая. Во-первых, там много тяжелых вещей, которые нужно поднимать и таскать. Во-вторых там много опасных вещей. В-третьих, работа зачастую идет на большой высоте без мер безопасности. В-четвертых, может быть холодно и дуть сильный ветер. В-пятых, часто смены очень длинные и можно устать.
С другой стороны, в строительстве крутятся огромные деньги. Посмотрите цены на квадратный метр. Обычному программисту такие деньги, конечно, никто не даст, а строительным компаниям люди из последних средств платят. Очень выгодный бизнес.
> Я всё подряд читаю из learnjs. И я не понял, что это за хуйня, и что я должен из этой темы знать как верстальщик.
Ты должен знать принцип работы, как отправлять и получать сообщения по веб-сокетам, как сериализовать данные (например: тебе надо отправить объект с кучей полей), знать, какие бывают прикладные протоколы поверх WS вроде Autobahn (хотя, может он уже устарел?).
Я не использовал, но обычно middleware используют там, где надо что-то сделать с HTTP-запросом или ответом. Например: зашифровать куки, залоггировать запрос, сжать HTTP-ответ, добавить какие-то HTTP-заголовки.
Что-то более высокоуровневое там делать неудобно. Например, проверку прав доступа сделать там тяжело, хотя некоторые и пишут, что для этого можно использовать middleware.
>>2065824 Работаю на фирму, которая релокейтнула пачку пыхеров в Чехию в Прагу. Т.е. большая часть команды разрабов работает из Праги. Кто-то собирается переезжать, как с ковидлом поуляжется
>>2066044 Тому що нужно проверять существование ключа subject в массиве прежде чем обращаться к нему. Регулярка у тебя тоже кривая Спасибо, вернул мне мой 2005-й
>>2065926 >Тебе сначала хорошо бы изучить не веб-сокеты, а классические сокеты Беркли. Понять, как вообще данные передаются в сети между машинами. После этого веб-сокеты, после этого прикладные протоколы вроде Autobahn. Очередной посылатель учить левую хрень.
>>2066105 В процессе учебы писать так абсолютно нормально, но не более того. Хотя возможно, что в каких-нибудь конторах, клепающих лендинги, обработка форм сделана именно так.
Он написал код просто, чтобы протестировать регулярное выражение. Ты предлагаешь (угробив кучу времени) сделать полноценное приложение на Симфони ради проверки регулярки?
>>2066219 Тогда пиздуй учить диодно-транзисторную логику, а еще лучше начинай с квантовой механики и физики полупроводников, ведь веб-сокеты на этом основаны. Пока не выучишь не возвращайся в IT.
>>2066219 >Сокеты Беркли надо понимать Тыскозал? Как это поможет накатить библиотеку и сделать по документации? Нахуй надо ковырять левые доки по другому языку, ты ебан какой-то.
>>2066219 >Сокеты Беркли надо понимать Их вендору надо понимать, а не имплементатору. Сразу нуба в разработке видно. Небось ещё и на ВУЗы дрочишь - типа без вышки и знания тысяч алгоритмов только не пизди, что ты их все учил не бывает программистов.
По стильному-современному это будет экшен контроллера в который будет инжектиться либо реквест, из которого ты руками (не надо так) или с помощью десериализации достанешь нужные тебе данные, скормишь их валидатору и потом будешь с ними работать, либо готовая провалидированная дтошка (в ларке это из коробки, в симфони нужно запилить аргумент ресолвер) опять таки с нужными тебе данными
Напомните почему так сложно установить пыху на винду и заставить работать с фреймворками? Это говно даже собственный конф файл не может поcтавить: php.ini
>>2066387 А зачем страдать, если можно поставить линукс в дуалбут? Все равно на работе придется иметь с ним дело. Сами себе придумывают сложности на ровном месте, а потом героически с ними сражаются
>>2066299 Читал доки symfony/laravel, смотрел AFUP PHP. Пошел на собес с требованиями "symfony, laravel, wordpress". На тех. собесе мне сказали: "Ты молодец, конечно, у нас проекты для тебя есть, но пока что завал с битриксом, так что подсоби". Ну я согласился: первый собес, хули. Прочитал доки и прошел тесты за неделю, поработал месяц и убежал.
>>2066596 В том, что можно взять только то, что тебе необходимо. К примеру только контейнер зависимостей и роутер. А в ларке даже педрильный блейд гвоздями прибит по крайней мере раньше было так
>>2066599 Еще доктрина, если ты адепт предметного подхода в архитектуре, может ебенейшую по вложенности структуру из сущностей и вэлью обжектов подхватить без изменений. Причем тебе твою бизнес логику никак не придется переделывать под фреймворк, а элоквент так не может и заставит тебя писать кучу борлеплейта по преобразованию структур бизнес логики в модели и наоборот, либо заставит прибивать БЛ к ларавелу гвоздями.
>>2066469 >symfony, laravel, wordpress Ну ты нашёл куда сунуться. Мог бы сразу на фрилансе к очередному дебилу с "нужон розробочтик на Тилда, Вопркперс, Ларавел, Опенкарт за 20к\мес" пойти в услужение.
>На тех. собесе мне сказали: "Ты молодец, конечно, у нас проекты для тебя есть, но пока что завал с битриксом, так что подсоби" Ожидаемо.
>>2062494 (OP) Дошёл до задачи с палиндромом в учебнике, вроде решил её, но у меня стойкое желание что я наговнокодил, вот сам код https://ideone.com/DGq6ON
Я для отсчета символов с конца строки создал лишнюю переменную и у меня стойкое ощущение что это можно было сделать как-то по другому, но я не понимаю как. Я находил в интернете решения этой задачи через функции, но я до них ещё не добрался поэтому меня интересует более оптимальное решение из тех знаний что предоставил учебник до этого момента.
Сап, двач. Вопрос следующий. Я программирую уже год и 5 месяцев на языке программирования "пи эйч пи".
Короче, первая моя работа была около года в компании работающей на CMS и делающей магазинчики ебучие. Это было больно, но я работал и учился. Потом перешел в другое место и начал делать проект на Yii. Там продуктовая компания, продукт всего один. Стартапщики ебучие.
Короче, вопрос следующий: что помимо работы мне стоит делать чтобы вкачиваться в плане скилла.
Что я научился за эти полтора года: - Ну собсна ПХП. 7ой ясен хуй. С пацанским ООП. - Базы данных. Запросы, джойны, репликация, нормальная форма. Вообще на машке работаем, но я и на монге успел. - Редиска и мемкэшд. Для, что характерно, кэша. - Слегка JS. У нас в админке интерфейс простой, хуйня на бутстрапе с жиквири. Модалочки хуялочки научился делать, всякие говногулпы. - Докер с компоузом, куда же без него.
Так вот. Что мне делать КАЖДЫЙ ДЕНЬ помимо работы чтобы дальше расти в скилле? Сейчас начал читать книжку по Yii для более глубокого понимания. Так же начал писать мелкий фронтенд на реакте чтоб научиться и этому тоже. Че ещё посоветуете?
>>2068619 1. Согласен, общее понимание неплохо бы иметь. 2. Особо не задрачивать, просто понимать что в принципе на рынке есть. В каждой галере всё по своему. 3. Нахуя? Во-первых это дело ДевОпсов, во-вторых, максимум нужно примерно понимать пару-тройку команд для деплоя. 4. Согласен, было бы неплохо знать. 5. Нахуя? Опять же, это работа ДевОпса, разве что общий принцип как работает в твоей компании CI/CD. 6. Ага, блядь, и пайплайны битбакета. Что там учить то? Просто конфигурируешь настройки под каждый проект (по ридми и мануалам), что конкретно ты учить там собрался-то? 7. Нахуя ты опять советуешь учить не технологии/подходы, а какие-то частные реализации? Опять же, это работа ДевОпса. Твоя работа как программиста максимум помочь в интеграции, всё. Тебе не нужно учить все сервисы которые тот или иной продукт предлагает. 8. Угу, ещё "выучи Жиру" забыл добавить.
Короче, советы не для программиста, а для девопс/кодера/продакт менеджера/архитектора/продакт оунэра комбайна. Тот, кто всё это знает, по сути не знает ничего, нахватался по верхам. Я бы челу предложил копать глубже, а не в ширь. Посмотреть паттерны, поразбираться как устроены популярные фреймворки, попробовать написать экстеншены к ним, попробовать покоммитить в опен сорс проекты.
>>2068937 >3, 5, 7 В мелких фирмах/командах сеньор бекендер может быть девопсом на пол ставочки. Там как раз хватает знаний по верхам, т.к. нужно поднять дефолтный си/сд
>>2068607 >Что мне делать КАЖДЫЙ ДЕНЬ помимо работы чтобы дальше расти в скилле? Как минимум начать использовать единственный нормальный фреймворк на похапе
>>2069494 Оптимально за пол года фултайм (40ч в неделю) можно выйти с нуля на джуна и пойти штурмовать собесы. Только побольше кода пиши на голой пыхе и с фреймворками. Результатом учебы должен быть какой-нибудь пет проект на фреймворке с основными фичами (пара крудов, авторизация, хождение в сторонние апи)
>>2069501 ну знания пыхи на базе есть в связке с бд. могу круд приложение написать. я переживаю по большей части за то, что я ебланил всё своё время. как вытекающие: 5 записей в тк (начал с веб-разработчика, потом пошёл на завод, на склад, в вуз программистом, потом блять логистом поработал, причём только в двух местах работал 5 и 12 месяцев. в остальных по две недели). это уже пиздец тотальный? даже если ахуенные знания будут, мне кажется не возбмут чела со склада блять.
>>2069515 Что мешает завести новую трудовую если тебя это так беспокоит? Да и вообще если ты по скиллам и знаниям устроишь работадателя то не похуй ли ему где ты там раньше работал?
Хуйня все это. У нас люди уходили на контракт на 3 года а потом возвращались и снова в код. И нихуя. Некоторые выкатывались из айти и вкатывались обратно. Одному мне збс
Не надо "коммитить" куда-то. Обычно люди контрибьютят в те проекты, которыми они пользуются или в которых они сами заинтересованы.
Ну например: ты используешь какой-нибудь WYSIWYG редактор в своей админке, но в нем нет опции для вставки в текст картинок. Ты ее делаешь и контрибьютишь - либо как изменения в редактор, либо как плагин, если в нем поддерживаются плагины.
Или ты используешь какой-нибудь проект, но в нем есть баг. Ты его исправляешь.
Или другой пример: тебе нужно проверять на правильность какой-нибудь ИНН, а готовой библиотеки нету. Ты пишешь свою и выкладываешь в опен-сорс.
Или: есть какая-то полезная библиотека, но она платная и с жесткими условиями лицензирования. А нужна. Ты пишешь открытый аналог.
Если ты никакие опен-сурс проекты не используешь, то просто установи себе Линукс или какой-нибудь открытый софт и ты сразу найдешь кучу багов и кучу фич, которые неплохо бы добавить. Но, правда, это может потребовать высокой квалификации.
Но общая идея в том, что ты контрибьютишь в то, чем ты сам пользуешься и что тебе интересно.
А как именно контрибьютить: клонируешь проект, делаешь правки, проверяешь, если в проекте используются тесты, то покрываешь свои правки тестами, оформляешь свой код в соответствие с требованиями, делаешь пулл-реквест.
Симфоводы, почему у класса Request нет интерфейса и соответственно половина фреймворка завязана на эту конкретную реализацию? Что делать, если я хочу написать обертку над реквестом с парой нужных мне методов? Уже не нужно на самом деле, но просто любопытно
>>2070319 Лол, я в свои 29 лет уже понимаю, что поезд ушел, и развиваться реально только в своей, уже надоевшей, специальности, а ты в 34 такой глупый.
>>2070404 >уже понимаю, что поезд ушел Ну так все правильно, ты уже выгорел, потерял интерес. Нефиг было с 14 лет кодить. Уходи на пенсию и дай место молодым, 30+ летним, которые про кодинг узнали год назад.
>>2070436 Чел.. на мнение двачеродаунов по поводу возраста уже давно всем похуй, просто смирись с этим. >>2069515 Да, ты уже слишком старый. Устраивайся продавцом в пятерочку и не мешай адекватам вкатываться.
>>2070442 Ну ты там другие графики посмотрел бы тоже. >White or of European descent 70.8% >Black or of African descent 3.6% Ох, фсееее, бида-печаль Если ты темнокожий, то у тебя нет шансов на вкат.
> Что делать, если я хочу написать обертку над реквестом с парой нужных мне методов?
Для этого не нужен интерфейс (зачем?), ты просто можешь унаследовать свой класс от Request. Хотя мне не нравится такая идея, так как это неожиданно, что вместо стандартного реквеста используется что-то нестандартное. Это плохая идея расширять какие-то стандартные классы, как мне кажется.
Или, как вариант, просто делаешь класс RequestUtils и в нем статические методы для работы с реквестом. Здесь нет никаких проблем с неочевидностью кода.
А так, интерфейс для реквестов есть - PSR-7. Просто он придуман позже, чем реквест из симфони.
>>2070436 Ну а хули ещё делать? Я все ещё девственник, все свободное время провожу за компом, тут либо самовыпил либо вкат с перспективой покупки японской секс-куклы
>>2070463 >все свободное время провожу за компом Вот здесь кстати кроется серьезная ошибка. "Проводить время" - фактически досуг, это совсем не значит, что тебе понравится/получится за компом работать. Как бы даже не наоборот.
>>2070464 >Ну так объясни, что тебе дают другие графики? Статистику они дают, такую же точно статистику. По статистике темнокожих кодеров на стековерфлоу - 3 процента По той же статистике кодеров в возрасте 45+ - 3 процента Означает ли это, что у кодера 45+ такие же шансы на вкат, как у темнокожего? Каковы шансы на вкат у темнокожего кодера в возраста 45+? Уверен ли ты, что на графиках достаточно информации, чтобы ответить на эти вопросы?
>>2070478 Я уверен, что эта выборка - репрезентативна.
>Означает ли это, что у кодера 45+ такие же шансы на вкат, как у темнокожего? Ну вот пошли откровенные виляния и маняврирования. При чем здесь темнокожий, если изначально речь шла о возрасте.
>>2070493 Что интересно, пхп появился, когда 45-летнему было 20 с не большим. А первые годы (если не десятилетие) рождения языка - это практически полное отсутствие работы на нем. Таким образом наш 45летний пациент сам мог вкатиться в пыху ближе к 30-35 годам, а сейчас это обычный синер
>>2070493 >При чем здесь темнокожий, если изначально речь шла о возрасте. Ты реально довольно тупенький. Но это хорошо:) Больше тупых зумерков = меньше конкуренции. Даже не буду тебе советовать прочитать одну книжку, вдруг и вправду прочтешь, лол.
>>2070495 >Таким образом наш 45летний пациент сам мог вкатиться в пыху ближе к 30-35 годам, Это с хуя ли вдруг? "Вкатываются" в любые языки в основном молодые упругие зумеры.
Не понимаю, о чем вообще разговор, ладно чел 25lvl, он и вебмакакой побывал, релевантный опыт вот это всё. Но 30+лвл вкатыш это пиздос, такое резюме летит в корзину автоматически, по первой цифре возраста. Даже hh вам ебалаям уже открыто говорит видимо совсем доебали, что для смены сферы деятельности в 30+ ты уже староват, нееш подумой, а если всё же долбоеб решился - ищи блядь по связям:
>Ищите работу через нетворкинг: расскажите всем, что хотите перейти в новую сферу, через личный контакт вам будет проще объяснить ваше решение. Напишите в социальных сетях и поиске.
>>2070524 >>hh Да, что не так? Первой будет оценивать твоё резюме такая же анна - и для неё в свои 30+ ты уже возрастной и вообще лучше поискал бы по знакомым.
>>2070531 Простейшие положения статистики и теории вероятности: из общего количества профессиональных разработчиков 71,7% младше 35 лет, а 85% — младше 40 лет. Это необычно по сравнению почти с любой профессией в мире.
>>2070533 >Да, что не так? Первой будет оценивать твоё резюме такая же анна - и для неё в свои 30+ ты уже возрастной и вообще лучше поискал бы по знакомым.
Что за кипеш в треде? Пориджеблядки из /б/ протекли что ли? Сам вкатился в 16-м году будучи дедом за 30. Менял работу четыре раза и никто на этапе собеседований ни разу не интересовался моим возрастом. Возможно, что на галерах все иначе (скорее всего там действительно отдадут предпочтение малолетней петушне без самоуважения, которая позволит собой помыкать), но я там работать и не собираюсь
>>2070458 Я не могу ничего унаследовать, поскольку некоторые симфонивские штуки требуют именно этот самый реквест, вместо интерфейса.
>мне не нравится такая идея, так как это неожиданно, что вместо стандартного реквеста используется что-то нестандартное. Если при наследовании код может работать с потомком наследуемого класса так же как с предком какая буква из солид? лол, то никакой проблемы в этом нет
Я хочу чисто поконтрибутить во что-то небольшое, где нужна помощь. Мне для рил практики не нужно, я не решаю че мы в проект вносим. Хочу хотя бы с мелких багов начать.
Но нужно что-то где есть норм баги, а не где все стабильно и их воспроизводить 100к. И хотелось бы не в либу контрибутить на самом деле а в продукт. Я бы в блендер хуярил есл бы кресты зн
>>2070882 Не проецируй на взрослых дядек то что мамка тебя из дома выгоняет на работку и у тебя встал выбор между маком и выгоранием в 25. Я могу хоть до пенсии дома просидеть.
>>2070727 «Ну так-то любой год на пхп это говноедство. Такой уж у вас язык» — раздался пронзительный голос со стороны параши. Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять? Перекладыватель жсончиков на других языках — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём макбук.
>>2070972 А вот и тот самый рисователь кнопочек/перекладыватель жсончиков/крудоеб на петухоне/жопаскрипе нарисовался. Видимо, в самую точку, раз с копипастой заговорил.
Приветики-привет. Назрел такой вопрос: масса книг и не знаю какую выбрать первой для изучения пыхи. Посмотрел учебник ОПа, который в шапке, мне не понравился. Мало конкретизации даже по типизации, а как по мне, это немаловажно. Какую книжку выбрать? Котерова? Или видео-курсы какие-нибудь скачать или на ютубе вкуривать и параллельно гуглить?
А что если смотреть курсы или книги по пхп7, а щас уже 8, это не хуёво?
>>2070992 >>2070997 Что-то ты не туда разговор уводишь. Повторяю, что моя проблема состоит в том, что я не могу использовать наследник реквеста, так как симфони в разных местах требует тот самый конкретный реквест. И попытка подменить его наследником во фронт контроллере не прокатила.
PHP Fatal error: Declaration of App\ArgumentResolver\BlaBlaBlaResolver::supports(App\Request\Request $request, Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata $argument): bool must be compatible with Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface::supports(Symfony\Component\HttpFoundation\Request $request, Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata $argument)
Приведенная тобой ошибка возникает не из-за того, что в Симфони нет интерфейса для реквеста. Если бы для реквеста был интерфейс, она бы точно так же возникла.
Если у тебя есть класс A, в нем метод принимает объект класса B, то при наследовании ты не можешь поменять тип аргумента на C (наследника B). Так как это нарушило бы принцип подстановки Лисков: старый код, передающий в метод объект B, сломался бы.
То же самое было бы, если бы аргумент имел тайп-хинт RequestInterface. Как только ты бы попытался заменить его на MyRequest, ты бы получил ту же самую ошибку.
>>2071012 >Посмотрел учебник ОПа, который в шапке, мне не понравился. Мало конкретизации даже по типизации, а как по мне, это немаловажно На пыхе можно писать без типов. У ОПа учебник для самых маленьких. Если ты уже можешь написать круд с/без фреймворка, то тебе учебник вряд ли пригодится.
>А что если смотреть курсы или книги по пхп7, а щас уже 8, это не хуёво? 1. 8ка еще не в продакшене и будет там не раньше чем через пару лет 2. В 8ке ввели 1.5 фичи, которые можно за вечер пощупать
Можешь взять котерова, но это по сути вольный пересказ документации с php.net Либо попробовать ларакасты - серии коротких видео по темам, там есть и основы пыхи и ооп В любом случае твоя задача писать код, а не книжки читать и видео смотреть
>>2071097 Спасибо большое. Да, я знаю, что надо шкодить, просто я всегда привык прочитать что-то, например, когда тернарный оператор пробовал, а потом уже хуевертил с ним всё подряд. Мне проще запоминается, когда я что-то прочту, не пойму, попробую сделать, пойму наполовину, прочту ещё раз 10 и пойму окончательно, после чего ещё закеплю на практике. Ебанутый способ наверно, но для меня он рабочий.
>>2071061 > не надо забывать фигурные скобки Я когда-то наткнулся на статью, что скобки можно опустить, если одна операция в них идёт. >чем склеивание строки из кусочков Просто привык к конкатенации ещё с вуза (пиздец блять, 4 года почти прошло, как в вузе прогал и забросил это дело, и щас по новой учусь. какой же я бездарь, блять.)
>>2071123 >Я когда-то наткнулся на статью, что скобки можно опустить, если одна операция в них идёт. Почитай этот момент в PSR. Насколько помню, скобки нужны, чтобы можно было зрительно распознать конструкцию. Без скобок это выглядит как обычная строчка вызова метода или присвоения
Лучше всего, конечно, контрибутить в то, чем ты пользуешься или в чем заинтересован сам. Так ты и себе пользу сделаешь, и людям поможешь.
То есть процесс обычно такой: тебе что-то нужно -> готового решения нету -> ты либо пишешь свое, либо дорабатываешь чужое. Или ты используешь какой-то проект, видишь, что можно его улучшить, и улучшаешь.
В любом случае, тебе придется потратить время и разобраться в проекте, в котором ты хочешь что-то сделать.
Ты можешь зайти в список багов и сделать поиск по меткам. Во многих проектах есть метки вроде "help-wanted" или "up-for-grabs", которыми помечают баги для начинающих. Ты можешь использовать поиск на гитхабе для поиска таких багов. Тут есть список ссылок и меток для начинающих: https://gist.github.com/stefanmaric/d5a03eeb89af81e5537e2efe7dd479cf
>>2071263 Такая у вас специфика рынка и не факт, что это хорошо. Я сам из Беларуси и иногда вижу российские вакансии на сеньерские позиции с такими вилками, что хочется плакать. Удивительно, как они вообще умудряются кого-то нанимать
>>2071385 Можно подумать, что колупание форм, кнопочек и запросиков требует каких-то неимоверных умственных усилий. Да там любая макака справится. А со времен появления vue.js это даже перестало вызывать особое отвращение
Я чего-то туплю. Поднял бабла ЛАМПУ, на неё накатил вордпресс. Хотел бы обращаться на неё по имени http://235, но не судьба. По ip фурычит. Что я делаю не так?
>>2071855 Это скорее вопрос в софтач или в веб. Резолвер у тебя на компьютере, с которого обращаешься, какой? Винда там? В настройки роутера зайди, там должна быть возможность настроить разрешение кастомных адресов в конкретные ip.
Я не совсем понимаю, как должен выглядеть шаблон формы в HTML, чтобы при ошибке заполнения форма выводилась с уже подставленными значениями (и сообщением об ошибке). У текстовых полей можно через переменные заполнять value, но ведь формы ещё могут содержать select-элементы, в которых value не проставишь. В свою очередь, select'ы могут содержать сотни опций выбора. Я знаю об аттрибуте selected, но как мне его проставить автоматически именно в той опции, которую выбрал пользователь, а затем ввёл что-то невалидное. Нужно сделать так, чтобы его опции в select'ах сохранились при выводе ошибки на страннице формы.
Единственное, что приходит на ум - это составление функции, которая будет принимать аргументом уже проставленные пользователем значения, собирать форму по элементам и возвращать её код. Но это будет именно функция, а не шаблон. Наверняка тут есть какой-то конвенциональный подход. Как это лучше запилить?
>>2072013 > 1. Изменил настройки пермалинка на "дружелюбные" > 2. включил в апаче rewrite > 3. отредактировал файл по пути /etc/apache2/sites-available/000-default.conf > 4. Перезапустил апач
И как компьютер, с которого ты вводишь этот адрес, должен узнать, что где-то в каком-то апаче отредактирован конфиг?
Если я сейчас у себя отредактирую /etc/apache2/sites-available/000-default.conf и напишу туда хост BBC.COM -- у тебя он начнёт открываться с моего компа? очевидно нет
Читай про DNS, редактируй файл hosts на машине, с которой обращаешься.
А написал я что вы велосипедите хуйню, в то время как все уже сто лет как по полочкам разложено. Что использовать в качестве реквеста, как делаются кастомные обертки над объектами, как какать и как писоть.
>>2072271 И как то, что ты написал, поможет подменить симфонивский реквест другой реализацией и использовать эту реализацию там, где различные штуки явно требуют симфони реквест?
Допустим есть красная точка на пикче, мне нужно удалить её(выкрутить альфа канал до полной прозрачности) Через imagesetpixel у меня это чёт не получается, как я понял если указать в imagecolorallocatealpha прозрачность, он тупо этот(прозрачный) цвет и прибавит, нихуя в итоге не изменив. Как зделоть-то?
>>2072341 Ты там угашенный что-ли? Попустись, пивка глотни. Симфонивский реквест используется в симфони. А вне симфони используется PSR-7 реквест. ВНЕ, блядь. В НЕ симфоневском роутере, например. В собственных классах или бандлах. Каким хуем ты собрался менять код в штуках, которые "явно требуют симфони реквест"? Ты там vendor что-ли правишь?
>>2072440 Создается во фронт контроллере, а потом инжектится при необходимости ... $request = Request::createFromGlobals(); $response = $kernel->handle($request); ...
>>2072502 Пока не приведешь пример, как с помощью того, что ты принес в тред, написать резолвер для DTO или VO, который внутри будет использовать наследник реквеста, тугой здесь ты.
>>2072511 В резолвер инжектится ФАБРИКА. Фабрика принимает симфоневский реквест, а возвращает PSR реквест. Ты можешь прокинуть эту ФАБРИКУ в ЛЮБОЙ резолвер, пусть он хоть DTO возвращает, хоть АЛЛАХА.
>>2072585 Так я ему и объясняю что он пытается дрочить вприсядку. Если тебе нужен именно реквест, то PSR-7 это отраслевой стандарт, он покрывает все что ты только можешь с реквестом сделать. А если тебе нужна производная от реквеста, то это уже нихуя не реквест и нахуй не надо что-то там наследовать или имплементировать.
>>2072540 Корявое говно. С таким же успехом я могу просто инжектить в резолвер сервис с нужной функциональностью. Именно этого я и пытался избежать в попытке подменить реквест на уровне приложения. Ну и нихуя не удивительно, что от человека, который хотел кого-то удивить адаптером, ускользнул основной смысл моего вопроса.
>>2072605 Да все, все. Пену вытри. Ты охуенный программист. Верю. Только про PSR не в курсе. Да и di с композицией у тебя говно корявое, а вот подменять вендорские объекты для всего приложения это заебись идея. Ну заебень рефлексией или трейтом, как там у вас гениев принято.
>>2072646 Чел, речи про ПСР реквест изначально не шло вообще, это ты его приплел. Касательно подмены объекта, я же не изменяю старое поведение, а добавляю новое. Все в соответствии с заповедями Варвары. Рефлексию я, конечно же, использовать не буду да и вообще уже отказался от этой идеи. Извини, если погорячился.
>>2072692 Да я просто подъебываю. Ты понимаешь что только ты решил следовать заповедям варвары? Ты не контролируешь процесс, что там с этим реквестом будет происходить, и кто че подменял и ещё подменит не знает никто.
Поэтому трогать вендорную хуйню нельзя ни в коем случае. В реальном проекте я бы определил твой реквест в di контейнере и прокидывал бы в контроллер просто через конструктор. И сразу начнет вырисовываться что это нихуя не реквест. Потому что реквест, даже симфонивский может делать все что нужно http запросу - возвращать пришедшие на сервер данные. А все остальное это уже обработка запроса.
>>2073107 Просто смотри на зарплату. Иногда с джуна просят докеры, ПСР, ООП, юнит-тесты, и плотят 80к со старта, а иногда уметь вордпресс\опенкарт настроить и плотют 30к. Главное не перепутать: прогинг за 80к, имплементация за 30к. Работодатели же обожают просить ВСЁ за 30к.
>>2074282 >Вот как раз я не хочу редактировать файл hosts. Как бы ты или покупаешь домен и направляешь на ip, или поднимаешь в локалке DNS свой, в нём делаешь редирект(будет работать только внутри локалки, и то только если ты этот днс укажешь в том роутере который за интернеты отвечает), или редактируешь hosts. Как ещё это по твоему может работать?
Пишу синхронизацию данных. На обработку одного item-а приходится где-то 1-6 запросов в бд. Item-ов может прийти до 10к. Офк это всё происходит в фоне, запускается с ребита, но даже так джоба задыхается и повисает.
Есть какие-то паттерны оптимизации синхронизации данных?
Раньше делал вместо обработки по 1 айтему сразу пачкой (по 100 или 1000), соотв объединял операции вставки, получалось на порядок быстрее.
Можно ли что-то еще тут придумать или идти проверенным путем?
>>2077361 Получаю данные апи, потом актив рекордом пишу в базу в несколько таблиц-сущностей, соответственно проверяю, чтоб не было дубликатов перед записью. Тут скорее не синхра, а фетч данных.
Потому что данные получаю по апи в непригодном для записи формате, их нужно обработать, раскидать по разным сущностям
>>2077406 Так добавь, зачастую из-за этого тормозят массовые вставки и апдейты. Если ещё инсерты переделать на много записей на один запрос, то вообще будет летать.
Хочу сказать этому ебаному wsl2. Ебаный ты козел, блядь, черножопый. Столько времени не могут пофиксить баг, который делает работу на нем невозможной - работа замедляется раз в 10 из-за ебли с виртуальными виртуалками и абстракциями абстракций
>>2062494 (OP) >Владимир Дронов: Laravel 8. Быстрая разработка веб-сайтов на PHPНа Анончики, можно ли с этой книжкой вкатиться в написание простых бложеков с админкой? (не фриланс, конечно, а просто личные пет прожекты) Пхп почти не знаю, ООП не понимаю. Есть ещё подробная литература по свежему пхп и какому-нибудь фреймворку?
>>2077503 Книжки по пхп - тупое говно тупого говна, особенно от наших авторов, лучше посмотри любой курс для новичков (Кудлая, например), а потом шлифани Елисеевым, если терпения хватит.
>>2077503 Если тебе нужен правда простой бложек с админкой, то тебе хватит вот этого видоса: https://www.youtube.com/watch?v=0Be0fX9wbXc Автор тут явно мудак ибо даже я, не прогавший на ларавеле и только пару дней назад решивший его изучить для прохождения ТЗ на РАБоту очередную вижу кучу косяков. Но такие базовые вещи как шаблонизатор, роутинг, работа с БД тут рассмотрены. А больше особо и не надо, всё равно практика решает.
>>2077486 Я про баг (или это фича) оч медленной работы, если проект запускается из под wsl2, но лежит в примонтированной директории (/mnt/d/dev/...). Вчера пытался перенести проект в home раздел, но чуда не произошло. Так же идут простейшие запросы по 30-40 секунд. У коллеги на макоси всё хорошо работает 1-2 секунда на запрос. По ходу только убунту накатывать и ебаться с видео дровами
>>2077657 Насколько я понмю, всл1 это была виртуалка, а всл2 какой-то слой эмуляции апи и он обсирается как раз, в первом работало лучше. Так что можешь поставить виртуалку и пробросить свои файлы два раза из хоста в гест и из геста в докер, будет всё равно лучше, лол.
Докер это не инсталлятор пэхэпэ, довен. У всех норм языков есть свой инсталлер. >>2078578 XAMPP это не инсталлятор пэхэпэ, довен. XAMPP это комбайн из кучи говна, в числе которого есть и пэхапэ. У всех норм языков есть свой инсталлер. >>2078743 Потому что я не в 1987 году, чтобы что-то руками распаковывать. Еще и в PATH руками добавлять? Лол, ты точно из 2021?
>>2079020 Фуххх.. Разобрался. Как обычно тупняк на ровном месте был, время устанавливал не как time() + 10 лет, а просто как 10 лет, получалось кукисы истекали в 1980 году. А так вместо локалхоста домен прописал как ".app.localhost" и схавало.
>>2079262 Денвер они не так давно убрали из доки, да?)
>>2079264 После установки языка без веб сервера я сам выберу подходящий мне веб сервер с нужными мне модулями и параметрами и установлю его отдельно. Если надо будет, конечно!
>>2079270 >Денвер они не так давно убрали из доки, да?) Может и так. Но это прям оф. позиция разрабов языка. А значит ты идёшь на хуй. >После установки языка без веб сервера я сам выберу подходящий мне веб сервер с нужными мне модулями и параметрами и установлю его отдельно. Ну значит распакуешь из архивчика, не обломаешься.
>>2065935 Прям цитата из документации Открывал я этот исходный говнокод, методы на 500 строк с кучей вложенных if и циклов, передача массивов по ссылке, хуй чего найдешь. А подключение шаблонов это прям искусство говнокода. Да и в целом 3 разных подхода, функциональный с глобальными переменными, ООП старый и ООП новый с неймспейсами и хуй пойми что из них работает, что нет, на что положили хуй, а чего ещё не дописали.
>>2079756 Ну если тебе нужно все сделать за минимум времени, получить деньги от заказчика и съебаться, ебись оно все конём, гори синим пламенем, как делают большинство битриксоидов и алкашей фрилансеров, то говнокод это твой выбор. Если ты выпускает продукт с длительной поддержкой, над которым работают много разработчиков и который будут использовать тысячи разработчиков по всей стране, то писать чистый код это должно быть чем-то само собой разумеющимся.
>>2079795 >Почему? Большую часть времени приходиться не писать код, а именно читать. Когда у тебя есть какой-то метод в виде лапши на 300 строк кода, то после 100 строки ты уже забываешь что было выше и понимание как работает этот код усложняется, приходиться несколько раз перечитывать, тот же код вынесенный в отдельный класс и разбитый на методы в пару строк каждый читать в разы проще и проще вносить изменения. Плюс можно использовать различные паттерны, разбивать на сервисы и тп, в таких проектах сразу знаешь что где искать, а не блуждаешь в куче файлов и куче станок кода.
>>2079801 >Когда у тебя есть какой-то метод в виде лапши на 300 строк кода >тот же код вынесенный в отдельный класс и разбитый на методы в пару строк каждый читать в разы проще и проще вносить изменения
Частным случаем лапшичного кода является как раз слишком сильное разбитие. Нормальная длинна метода варьируется в зависимости от назначения оного от 1 строки(геттер, сеттер, ЕТС) до где то 40. Но уж точно не по 2 строки на каждый. Я бы даже сказал что 20-40 строк более нормальный размер в большинстве случаев. Но да, больше 40-перебор(хотя тоже есть исключения. Но крайне редкие).
>>2080096 >Правда ли, что php лучший язык для фриланса на ангоязычных биржах вроде upwork? Конечно нет. Порог входа самый низкий, а значит самая высокая конкуренция. Не обладая синьорскими знаниями, делать на апворке с пхп нечего.
>>2080099 Глянул английскую версию, это чисто про core, про веб вообще там минимально для демонстрации некоторых фич. Классная книга, надо будет читнуть как спиздят тру пдфку английскую. На чистом вряд ли пишут, оно слишком быстро превратится в неподдерживаемый пиздец.
>>2080369 Бля, чел, пиши в пхпшторме. Ну серьезно. Сколько раз вы будете обсираться на том, что за вас может машина сделать? пик 1 функция mc_rand - погугли что ли) пик 2 натыкал exit-ов я надеюсь с целью дебага?
>>2080487 Запили библиотеку с авторами, книгами (чтоб учитывалось количество экземпляров) и читателями, которые могут брать книги домой. Можешь придумать систему уведомлений и штрафов за просроченные книги. Итд итп
Блин, и где про ООП для пхп читать? В гугле либо какая-то шняга, либо платная херь, на ютубчике вообще все видосы это объяснение как создавать всякие классы, приватные, защищенные методы и тд, объяснение синтаксиса и возможностей языка короче, а не то как все это на практике использовать...
>>2080574 В пхп та же хуйня что и в джаве с мелкими отличиями, так что читать классиков типа Фаулера и Мартина, попробуй допустим Patterns of Enterprise Application Architecture
Я не уверен, что это возможно. В Доктрине ты настраиваешь маппинг (соответствие) между сущностью и таблицей и Доктрина не будет загружать данные в какие-то другие объекты.
Я не очень понимаю, зачем тебе здесь понадобился DTO, и зачем тебе иметь 2 разных класса, которые представляют одну и ту же сущность. Разве это не дублирование кода? Доктрина и так возвращает объекты.
Если тебе нужно именно DTO, то придется копировать данные из объекта в объект руками или как-то еще. Или загружать Доктриной массив и заносить его в объект.
>>2080581 Нужно было просто сказать что для преобразования из/в DTO достаточно пары статических методов у Entity - fromDto, toDto. Разделение на dto и entity делается кода у нас rich model в entity инкапсулирующая бизнес правила, а dto заполняется symfony из реквеста.
Еще мне не нравится, что он создал кучу классов: репозиторий (с интерфейсом), класс для представления id, Query (с интерфейсом). Страшно представить, сколько классов будет в реальном приложении с таким подходом. Лишнее усложнение, по моему.
И, что самое главное, не объясняет, зачем это сделано. Зачем нужно абстрагироваться от базы данных или зачем нужен репозиторий и объект Query на каждый запрос. Или зачем он делает интерфейсы на каждый класс. Или какая польза от его DTO и зачем нужно создавать его из массива.
Более того, идея абстрагироваться от БД за счет Query Object гиблая. Тебе понадобится сделать какую-то хитрую выборку, где Доктрина неэффективна - и тебе понадобится писать SQL-запрос. Без всяких абстракций. А это в его схему просто не встраивается.
Он не приводит никаких аргументов, кроме "так проще читать". У меня другие взгляды. По моему, так проще читать простой и короткий код. А не раскиданный по 5 классам и интерфейсам. Плюс, если на каждый запрос делать по 5 классов, то у тебя будет в 5 раз больше файлов и трудно в них ориентироваться. И в 5 раз сложнее редактировать такой код.
По моему, удобнее сделать сервис, а в нем find-методы. Просто и читабельно.
Еще мне не нравится метод byAuthorId() в FindLatestArticlesQuery. Он меняет состояние Query. Вызывая execute(), ты не знаешь: есть ли там фильтр по автору или нет. Может, кто-то его ранее поставил и тогда твой код начнет выдавать неправильный результат.
Также, мне не нравится метод hydrateSingleResultAs(). А как же типизация? Почему не указан возвращаемый тип? Получилась просто обертка над массивами в итоге.
И еще. У него получилось три объекта, представляющих статью: Article, ArticleDTO и LatestArticleDto. Допустим, мы хотим написать функцию, считающую число слов в статье. Как мы это сделаем, если статья имеет три разных представления? Еще один интерфейс сделаем?
И еще мне не нравится что он (или, скорее всего, какая-то кривая IDE) ставит бессмысленные аннотации вроде такого:
Идея разбиения кода на части не в том, чтобы сидеть и отмерять ровно N строк на метод. Идея в том, что ты можешь описать алгоритм в общих чертах, не вдаваясь в частности. Ну допустим, тебе надо синхронизировать данные с каким-то удаленным сервисом и ты можешь писать высокоуровневый код вроде:
получить список данных; найти измененные данные; для каждого элемента: -- синхронизировать элемент;
Это легко читается и понимается. А если ты будешь писать все в одном методе стеной, то разобраться будет сложно. Плюс в коде-стене легко сделать ошибку, случайно перезаписав переменную, которая используется где-то выше и ниже этого места.
Проблема таких CMS как битрикс в том, что они (по лицензионным соображениям) пишут свой код с нуля, но они не вкладывают в проектирование столько усилий, сколько, например, вложили разработчики Симфони или Доктрины, и получается какая-то написанная в спешке самоделка.
>>2080160 Вопрос на самом деле интересный. Бывает, что для какой-то задачи нет необходимости в доступе ко всем свойствам модели (а она может быть очень жирной да еще и с поведением), в таком случае читать только нужное из базы и создавать дтошку, пропуская этап создания сущностей - это то, что доктор прописал.
>>2080623 >Идея разбиения кода на части не в том, чтобы сидеть и отмерять ровно N строк на метод. Идея в том, что ты можешь описать алгоритм в общих чертах, не вдаваясь в частности. Ля ты умныыыый. Проблема в том, что определить допустимый уровень разбиения не так то просто даже опираясь на это утверждение. У некоторых гениев на выходе получается вместо стены текста в 500 строк разбитая на 550 функций по одной строке в 50 классах с 50 интерфейсами каждый из которых применён 1(один) раз стена текста в которой ориентироваться ещё труднее, а некоторые места дублируются просто потому что он ЗАБЫЛ что это уже делал. Всё хорошо в меру. Тысяча слоёв-абстракций не сделает твой код читабельнее сама по себе. Как и тупое сваливание кода в одну кучу. И да, "отмерять N строк на метод"-один из эффективных способов привести код в подобие "разумной слоистости". Особенно если этот код будет писать джун, который не понимает ещё всех прелестей будущей поддержки кодовой базы, и не чует нутром что вот тут вот лучше добавить слой, а вот там-не стоит.
Продублирую из айти-треда. Аноны, может кто-то за работу веб-сервера на пальцах пояснить или дать книжку/видос. Я вкатывальщик в пхп, уже почти 2 недели гуглю инфу и нихуя не понимаю - книжки по пхп тупое говно и видосы от инфоциган, где ничего не объясняется. В каком формате приходит ответ и запрос от клиента? Апач слушает порт? Пришел запрос а дальше кто «разбирает» - апач или пхп? Сервер висит в оперативе, а пхп периодически поднимается? Как между собой взаимодействуют веб-сервер и пхп – какая-то служба в операционной системе, а в линуксе это демон называется? Пхп возвращает хтмл на сервер, а тот отправляет клиету? И зачем нужен сервер на локалке? Почему другие ЯП спокойно без него работают? Самое главное - где все это гуглить?
>>2081434 Раньше был мод_пхп, т.е. пхп в виде модуля сервера, работал в его контексте. Современный вариант это fastcgi. В фоне сидит процесс-менеджер и держит пул запущенных процессов пхп и открытый сокет. Основной сервер сидит мордой в интернет и ту же статику отдает сам, а пхп запросы кидает по сокету и получает ответы. В принципе, примерно так же работет современный веб и в других языках. Лично тебе вряд ли это вообще надо знать в деталях. Ты себе высираешь ответы, а как они там ходят это вообще не принципиально.
Не понимаю как сделать простейшую аутентификацию на Ларавел. Есть юзер, есть форма входа, есть ЛК, где ажаксом приходят-уходят некоторые данные. Всё, что предлагает гугл - длиннющие документации по Passport и тд. Зачем тогда в роутах api.php уже присутствует один маршрут, можно ли как-то это на коленке сделать? Насколько мне известно, современный фреймворк искаропки такое позволять должен.
>>2082178 >>2082081 >>2082063 скотина, ты все кнопки подряд чтоли тыкаешь? ты вообще не понимаешь, что происходит на каждой строке? что это за умственно-отсталые конструкции? тебе 7-8 лет? если так то извиняюсь
На фрилансе вообще нужны ООП и шаблоны проектирования или заказчикам похуй что у тебя за код, лишь бы работало как надо? Хочу попробовать апворк, но предпочитаю полотняный лапшекод, не отхуесосят ли меня там за это.
>>2082300 >>2082454 Читай свою программу сверху вниз, каждую строку, и для себя переводи на русский, что она делает, и что хранится в каждой переменной.
>>2082475 Лучше не быстрее вкатывайся, а нормально. 1. Изучай по минимуму алгоритны и структуры данных. Нужно для собесов в нормальные компании и для более глубокого понимания матчасти. 2. Изучай немного архитектуру компьтера и сетей, чтобы не быть совсем крестьянинов в IT. Изучи линукс и unix команды. Научись пользоваться докером. 3. Изучай хорошо пхп по докам. Как ты будешь писать на языке не зная его? 4. Изучай глубоко БД. 5. Все время пиши код.
>>2082531 Нет, в том и дело, что нравится и фронт и бэк. Один день фронт дрочу, второй пыху и чувствую, что от этого пиздец моя продуктивность страдает
Если упростить, то браузер посылает на сервер запрос вида "дай мне файл, расположенный по адресу http://example.com/some/page". Далее веб-сервер анализирует запрос (в зависимости от того, как он настроен) и определяет, что надо сделать:
- или отдать запрошенный файл - или запустить какой-нибудь PHP скрипт и отдать результат его выполнения (то, что выведет этот скрипт)
Веб-сервер и PHP могут взаимодействовать по-разному.
Если веб-сервер это Апач, то интерпретатор PHP можно встроить в него в виде модуля mod_php. Модуль загружается при запуске Апача в его процесс как динамическая библиотека, расширяющая возможности Апача. То есть, когда понадобится выполнить PHP скрипт, Апач обратится к этому модулю. При этом не запускается никаких новых процессов ОС, выполнение PHP кода происходит внутри процесса Апача.
Минус этого подхода в том, что если, например, Апач грузит процессор, то непонятно: это сам Апач или PHP-код который он выполняет. Также, нельзя запускать PHP и Апач под разными пользователями. Нельзя вынести выполнение PHP кода на другой сервер.
Также, можно запустить PHP с помощью PHP-FPM. В этом случае запускается отдельный демон PHP-FPM, который в свою очередь запускает несколько процессов-рабочих. Демон слушает порт и принимает соединения от веб-сервера по протоколу FastCGI. Веб-сервер при этом может быть любым: Апач, Nginx или любой другой. Используя FastCGI, веб-сервер может попросить PHP-FPM выполнить PHP-скрипт и прислать результат его выполнения.
Когда браузер посылает HTTP-запрос, веб-сервер посылает FastCGI запрос к PHP-FPM. PHP-FPM дает задачу одному из рабочих выполнить PHP-скрипт, тот его выполняет, ответ посылается в веб-сервер, который перенаправляет его в браузер.
Плюсы этой схемы такие:
- можно использовать любой веб-сервер, например nginx - выполнение PHP-кода никак не нагружает веб-сервер - можно запускать PHP-FPM из под другого пользователя, а также можно вообще вынести его на другой сервер или группу серверов. Если есть несколько сайтов, то можно для каждого запустить свой демон PHP-FPM под своим пользователем и выставить ему индивидуальные лимиты. - можно легко увидеть, сколько процессора и памяти потребляет веб-сервер, а сколько PHP
Обычно в такой схеме Апач становится не очень-то и нужен, и используют комбинацию Nginx + PHP-FPM.
Да, веб-сервер (например, Апач или nginx) слушает порт 80 или 443, на который приходят запросы от клиенат (браузера).
> Пришел запрос а дальше кто «разбирает» - апач или пхп?
Веб-сервер (Апач или nginx). Запрос приходит по протоколу HTTP.
> Сервер висит в оперативе, а пхп периодически поднимается?
Сервер постоянно запущен, да. Если PHP встроен в Апач как mod_php, то он тоже постоянно запущен вместе с ним. Если PHP запущен как демон PHP-FPM, то он тоже постоянно находится в оперативной памяти.
То есть, и сервер и PHP уже запущены и ждут запроса.
> Пхп возвращает хтмл на сервер, а тот отправляет клиету?
На других языках ты обычно подключаешь в свою программу библиотеку, которая реализует веб-сервер. На PHP можно сделать точно так же, но это никто не делает, потому что есть встроенный веб-сервер.
>>2083159 >А скажи, насколько вообще хорошо-плохо делать php код без вьюх? То есть пхп возвращает json и все. А рендерит реакт в отдельном приложении? В современных spa так делают. Бекенд отдельно, фронтенд отдельно. Такой подход больше плюсов несет беку - не нужно лезть во фронт, слой представления упрощается с иерархии шаблонов до json/xml/другой формат.
Хорошо-плохо зависит от области применения. Если на фронте нет сложного интерфейса, то такой подход может быть избыточен. Применять реакт к лендингу с одной формой - оверинжиниринг. Быстрее на php шаблон сделать и пару строчек на жс написать.
Ну, например, при таком подходе сильно увеличивается время загрузки страницы.
При "стандартном" подходе браузер отправил запрос, получил отрендеренную страницу, подгрузил минимальные CSS и JS файлики (содержащие нужные только этой странице стили и скрипты) и отобразил.
При подходе с использованием реакта браузер сначала грузит страницу-прелоадер, CSS и JS для нее. Затем он грузит огромное тяжелое реакт-приложение. Затем оно запускается и отправляет аякс-запросы для загрузки данных. И только затем рендерится.
Разумеется, такое тяжелое приложение потребляет больше памяти компьютера и создает большую нагрузку на процессор.
Конечно, если ты делаешь какое-то приложение, в которое пользователь заходит и весь день работает, то, наверно такой подход приемлем. Можно немного подождать ради более быстрой работы в дальнейшем. Это подходящая технология для корпоративных приложений.
Но если ты делаешь сайт вроде блога, учебника, то по моему, это плохой подход. Человек ищет информацию, открывает все ссылки подряд из гугла и хочет получить эту информацию как можно быстрее, а не смотреть на прелоадеры.
Сколько я не видел SPA-приложений от крупнейших компаний - все тяжелые и тормозные, и с прелоадерами.
>>2083654 > в логах Nginx указана 500 ошибка Как правило там же и написанно чем она вызвана. Раз изменение в public/index.php(ты же его пробовал) не помогло-ты или не тот сайт редактируешь, либо конфиги вебсервера по пизде пошли. Это первый файл запускающийся же.
>>2084563 в public/index.php в первой же строке после <?php ставь пробел, и пиши die('qq'); Если после этого твой сайт начал отдавать qq вместо ошибки-проблема в сайте, если нет-в веб сервере. Но вообще с таким уровнем знаний ты её не решишь.
Можете, пожалуйста, объяснить нахуя вообще нужны интерфейсы и абстрактные классы? Чтобы какой-нибудь другой чел, который будет дорабатывать твой код не сделал того что делать не нужно?
Интерфейс нужен, когда есть несколько независимых классов, выполняющих похожую задачу. Например: тебе надо принимать адрес от пользователя и преобразовывать его в координаты. Для этого существуют службы геокодирования (допустим, Яндекс и Гугл). У каждой из них свой формат обмена данными. Но действие выполняется всегда одинаковое: преобразование адреса в координаты. Тебе не хочется, чтобы код был привязан к одной какой-то службе, а хочется, чтобы он мог работать с любой.
Ты можешь сделать интерфейс для геокодера, и написать 2 класса, реализующих этот интерфейс для каждой службы. Теперь, если твой код завязан на интерфейс, то ты можешь передать в него любой из классов и он будет корректно работать. Если завтра появится необходимость подключить третью службу, тебе достаточно будет дописать еще один класс, реализующий интерфейс. Остальной код переделывать не потребуется.
Абстрактный класс нужен когда есть несколько схожих классов, у которых есть общий функционал, а есть различающийся. Например, ты делаешь систему скидок. Один вид скидок зависит от дня недели, другой от суммы покупки, третий от истории покупок. Ты можешь каждый вид скидки представить классом. При этом у них будет как общий функционал, так и различающийся (общее у них то, что их можно применить к корзине и получить скидку, разное у них то, как они определяют скидку). Ты можешь сделать базовый класс, общий для всех скидок, и от него унаследовать конкретные классы для каждого вида скидки.
>>2062494 (OP) > 9 июля 2020 года Дэйл Хирт (англ. Dale Hirt), менеджер проекта PHP в Microsoft, в рассылке php.internals выпустил сообщение[36] о том, что после выпуска версии PHP 8.0 Microsoft прекратит поддержку разработки этого языка программирования для Windows[37]. Специалисты Microsoft занимались компиляцией бинарных версий интерпретатора для ОС Windows и тестированием их безопасности. В сообществе разработчиков PHP сообщили, что примут все необходимые меры, чтобы найти в ближайшее время альтернативный вариант для организации поддержки PHP 8.0 и выше для Windows, например, своими силами[38].
>>2085330 Два чаю. Я хоть и шиндузятник, но как только понял как работать с виртуалОЧКОй сразу туда перекатился, а уж теперь то при живом всл и дешевых впсках вообще грех на шинде запускать. Тестовая среда всёж таки должна быть максимально похожа на ту в которой прод будет, а прод на шинде держать-кретинизм.
>>2085366 Пхп прод держать на винде в некоторых случаях невозможно. Некоторые экстеншены к пхп на неё тупо не ставятся. Сколько же я намучился с имейджмеджиком...
>>2085887 Крад, рега, сторонние айпиай... Спасибо. А можно тыкнуть конкретных пару примеров, а то все равно в голову ничего не приходит, особенно со сторонними айпиай :/ Фантазии нет совсем, не быть дизайнером фронтенда мне.
{ $this->subsystem1 = $subsystem1 ?: new Subsystem1(); $this->subsystem2 = $subsystem2 ?: new Subsystem2(); } Что здесь за схлопнувшийся тернарный оператор "?:" Что это значит?
>>2087486 Шарп/ява на сегодняшний день не оставят без заработка, в будущем вероятнее тоже. РНР только поддержка легаси. Новых, востребованных рынком, продуктов нет и не предвидятся. Я бы рассматривал РНР в ознакомительных целях исключительно. Связывать свою жизнь с веб-пердолингом для тех, кто не может в нормальные языки и умение программировать.
Блин, есть какая-нибудь статья-гайд или видос-гайд на русском языке с построением нормального crud web app, без использования фреймворков и с нормальной организацией по опп и mvc? Заранее благодарю.
>>2070404 >поезд ушел Надо сказать знакомым 35 и 38 лет, чтобы увольнялись со своих мест и шли обратно на старые работы - поезд-то всё, ту-ту, ушёл, а они и не знают.
>>2070436 >34 - слишком великовозраст для реального шанса на вкат
Я эту хуйню про ПОЗДНО ВКАТЫВАТЬСЯ кроме двача нигде не видел почему-то. Есть, конечно, ебучие конторы, которым надо вчерашнего студента, который еще не понимает, что такое деньги и зачем они ему, кроме как купить приставку, пивас и пиццу, чтобы недоплачивать ему. Но такого говна и вне айти дохуя. Вопрос, нахуя туда вообще идти работать. Ответ, возможно, кроется в народной мудрости - свинья грязь везде найдет.
>>2087680 Я сейчас работаю саппортом в конторе, где есть грейд до c# разраба. Они мне говорят, что на этой позиции засиживаться не надо. Хотят, чтобы я дальше развивался. Веба в этой конторе нет. Разрабам-шарпистам платят до 150, но не меньше 100. Мне на саппорте сходу платят 60, через год 80 планируют, если я не перейду в разработку. Начитался в соседних тредах, что если ты в саппорте, то ты и останешься в саппорте. Почему все так думают? Я работал уже в веб-студии когда-то, работал в тестировании. Сейчас пошёл в саппорт потому что график 2-2 (одна ночная смена есть и там тикетов дай бог 2-3 за ночь будет). Ну и при таком графике мне будет удобнее что-либо учить. Вот сейчас пиздец не знаю. Либо шарп и в этой конторе дальше за ~150 работать шарпистом, либо пыха и дальше ларавельку ебашить и найти что-нибудь за 80 jun+ уровня. К слову, на пыхе могу простенькое круд-приложение запилить с MySQL. И Ajax ебануть, но это уже с гуглом. Может что дельное подскажешь/подскажете?
>>2087780 >Начитался в соседних тредах Не читай советских газет двач. Тут какой-то иной мир, параллельная вселенная. Кто-то где-то что-то услышал, или кого-то пидорнули, и теперь ОСТАНЕШЬСЯ В САППОРТЕ.
>Они мне говорят, что на этой позиции засиживаться не надо Тебя практически приглашают разрабом стать, ты понимаешь это?
>>2087784 Да я первую неделю работаю только. Они сразу сказали, что есть куда расти и через год можно смотреть в сторону c# или программист АСУ ТП. Про второе не знаю даже что это такое. Если реально есть такая возможность, то при своём графике 2 дня после 2 смен готов въёбывать. Просто не очень хочется наебаться с выбором ЯПа.
Ребят, почему на ideone иногда, когда нажимаешь "run", то страница просто обновляется (или как будто обновляется) и весь код исчезает? "назад" не помогает, кода уже нет, приходится все заново писать, это весьма напрягает, особенно учитывая, что здесь нет автокомплита и надо каждую переменную вручную полностью печатать. У кого так же?
>>2087780 >Разрабам-шарпистам платят до 150, но не меньше 100 Если там свеженький нет кор, то збс, потом можно будет срулить на х2.
>Начитался в соседних тредах, что если ты в саппорте, то ты и останешься в саппорте. Почему все так думают? Потому что пока ты сидишь в саппорте ты не развиваешься как разраб - опыт кодинга для прода не капает, петы ты явно не пишешь, а время идет
>Я работал уже в веб-студии когда-то, работал в тестировании Та же история. Чтобы стать разрабом надо писать код
>Вот сейчас пиздец не знаю. Либо шарп и в этой конторе дальше за ~150 работать шарпистом Неплохой вариант, но запрыгивать надо поскорее
>ибо пыха и дальше ларавельку ебашить и найти что-нибудь за 80 jun+ уровня. Если б у меня в своё время был варик идти в шарп бекенд вместо пыхи, я бы пошел не задумываясь. В пыхе сплошное легаси и даже на относительно свежих проектах (которых практически нет) не веет новизной технологий, а с кода хочется плеваться. Из плюсов пыхи пожалуй слабенький возрастной ценз - можно спокойно заходить в индустрию хоть в 30, хоть в 35 лет. И относительная простота по сравнению с дот нетом
>>2087787 >Они сразу сказали, что есть куда расти и через год можно смотреть в сторону c# или программист АСУ ТП Это могли сказать, чтобы ты сидел на саппорте и не рыпался. А потом то время не то, то проекта под тебя не будет, то еще чего.
>Просто не очень хочется наебаться с выбором ЯПа. Пхп не от хорошей жизни выбирают
>>2087978 - Крайне низкий ценник относительно других стеков - Система написана армией школьников/студентов, качество кода соответствующее, архитектура отсутствует - Система очень глючная, тормозная и тяжело поддается дебагу - Среди других разрабов считается зашкваром ковыряться в битриксе
Есть какие-то пруфы, что якобы "PHP не используется в новых проектах"? По моему, это просто ничем не подтвержденное вранье от использующих какие-то другие, не особо востребованные языки программирования.
PHP на сегодняшний день активно используется в вебе. Он лучше JS тем, что у него не течет память, как у приложений на Ноде, в нем есть тайп-хинты и ООП, и можно писать удобный, легко читаемый синхронный код вместо нечитаемой лапши из промисов, await и что они там еще придумали, лишь бы не писать нормально. Он лучше Го тем, что в нем нормальный ООП, и PHP не пытается быть "не таким как все". В PHP удобнее и проще работать с массивами, чем в Го. В PHP не надо явно возвращать ошибки, как в Го.
А уж запускать и разворачивать приложения на PHP куда как проще, чем на JS и Go, и поганый Докер не требуется (Докер это штука, которая запускается из-под рута, создает тонны неужных образов на каждую строчку докерфайла и может менять настройки вашего фаерволла, открывая хост для доступа снаружи. Например, у одной компании Докер после выгрузки на прод открыл доступ к монге, и вандалы дропнули ее содержимое).
>>2088258 Забудь про "просто и доступно написано", если это касается чего-то сложнее чем "Hllwrld". Ты программист или может быть однажды им станешь - привыкай думать головой, не опираясь на слова Васи с форума.
Если не понимаешь, зачем нужны классы - значит они тебе не нужны. Пиши без них. как же заебись, что можно говнокидить дома и техлид не убьет Как только поймешь, что что-то не так и вспомнишь про классы - пойди и прочитай доку еще раз. Если в голову ебнет мысль "ля, так оно мне и нужно" - круто. Если нет - жди дальше.
Впервые столкнулся с таким странным тернарным оператором. Это важно знать. Важно знать, что он здесь не такой, как в других популярных языках (Java, JS, C#). Вот статья на хабре https://habr.com/ru/post/114899/
Если коротко: ставьте скобки, чтоб все работало "как надо".
>>2087765 Ты не понимаешь что феминизм победил и сейчас везде тянки - хрюши, тимлиды, начальницы всех мастей и т.д. Как думаешь к кому они будут более благосклонны - гречневику за 30 или молодому шутливому зумерку?
>>2088137 >Пхп не от хорошей жизни выбирают Мне кажется, потратить полгода на изучение голой пыхи и ларавельки с sql и ты уже спокойно джун в дс за 60к и больше. В шарпе я буду год только учиться, как минимум.
Если ты запускаешь свой скрипт через веб-сервер и браузер, то выводимый скриптом текст браузером воспринимается как текст в формате HTML, а там перевод строки равносилен пробелу.
Чтобы переносы строки работали, поставь в начало скрипта
Более того, ты выучишь основы C#, придешь на собеседование, а там будет умник с вопросами по Си вроде "расскажите, где хранятся локальные переменные? Почему именно там, а не где-то еще", "расскажите, что такое куча и как она устроена", "расскажите, почему используется JIT и почему не используется AOT компиляция", "расскажите, почему программа компилируется в байткод".
А в PHP таких вопросов не будет.
И, кстати, если у кого-то есть вопросы про кучу, байткод или локальные переменные, в нашем треде на них ответят.
>>2089195 изначально думал еще проверять слово английское или нет путем подсчитывания количества английских/русских букв, но это не очень эффективно, потому что в таких, например, словах: всем, оно, мы, меня, тогда и т.д. Здесь программа может решить, что это английское слово, ведь тут могут быть все буквы английскими. Хотя мой вариант: проверка по уникальным буквам типа "d, v, b, h, t" - тоже не 100% вариант, но выглядит, кажется, лучше, потому что слово "всем", написанное чисто английскими буквами определится как русское и, соответственно, все ангельские буквы заменятся на русские, а в первом варианте не заменятся. Можно конечно сделать и ту проверку и эту проверку, то есть всё объединить и получится, наверное, более достоверно. В общем, устал уже думать, как достичь 100% варианта. Надо переходить к некст задачам и темам. Что скажете? Сами как решили? Буду благодарен за фидбек.
>>2089200 так в задаче как раз такой вид ошибок и есть, что в тексте встречаются русские слова с английскими буквами, которые выглядят идентично, и английские слова с русскими буквами, а суть задачи в том, чтобы исправить это, сделать так, чтобы русские слова были написаны только русскими буквами, а английские только английскими
>>2089391 >в чем отличия В подходе архитектурном. >и какие сферы применения Весь спектр веб приложений у обоих. >На какой лучше потратить время для изучения На тот который на рынке лучше себя будет чувствовать через 5 лет.
>>2089568 Скорее всего оба, если судить по тому, что на yii до сих пор полно работы, хотя он уже лет 6 как не развивается. А на лару и симфу регулярно выкатывают обновления
>>2089568 >Это который? А этого тебе точно никто не скажет. Если всё пойдёт хорошо-оба как выше отписали. Но может внезапно появиться конкурент который обоих выпиздит, или заставит меняться так сильно что старые знания станут малополезными. ИМХО оба примерно одинаково перспективны. Но вроде как у ларки побольше работодателей прямо здесь и сейчас (по крайней мере я за последний год на неё больше получил предложений, чем на симфони).
Подскажите кратко, возникла потребность сделать элементарную фидбэк форму, язык вообще не знаю, нагуглил код ниже, он работает, но в текст сообщения нужно вставить $name, $mail, $text которые из html формы передаются Вот это хоть убейте - нагуглить не могу, пытался вставлять как получается, либо отправляется как есть "$name", либо вообще пустое тело письма
Господа, в какой момент понадобится математика выше школьного уровня? Всякие графы, дискретки и т.д. Понимаю, что на джуна такие вещи спрашивать в 95% случаев не будут, но что насчет мидла пхпшника, сеньора? Стоит ли заняться ей прям сейчас или это пустая трата времени?
Заниматься матешей в соло я пробовал, начал с нуля, хотя знания в принципе были вплоть до 11 класса, но хотелось, чтоб было без пробелов, поэтому начал с книги для 5-6 классов. Прочитал ее, дальше не смог заставить себя читать. Это нереально скучно.
>>2089974 По моим наблюдениям фреймворки просят вообще чтобы, типа, тыжпогроммист был хороший. Периодически встречаю вордпресс-вакансии с требованиями знания фреймворка, причём почти всегда перечисляют их через строку. Скорее всего у тебя нерелевантно - нужно считать количество проектов, а не хотелки кабанчиков.
Можно ли в php отдать ответ пользователю, но продолжить работать еще некоторое время?
Стандартный сценарий такой: 1) Пользователь делает заказ. 2) Скрипт работает, сохраняет заказ в базе данных, пишет емейлы пользователю а так же десятку сотрудников. Всё это время пользователь ждет. 3) Когда вся работа завершена, пользователь получает подтверждение заказа.
Цель: 1) Пользователь делает заказ. 2) Мгновенно получает подтверждение заказа. 3) Скрипт продолжает работать, сохраняет заказ в базе данных, пишет емейлы пользователю а так же десятку сотрудников.
Можно конечно же сделать что-то подобное при помощи кронджобов, но мне не нравятся кронджобы. Есть еще другой вариант с отправкой джаваскрипта всместе с подтверждением. И этот джаваскипт сделает аякс запрос другому скрипту, который доделает работу с отправкой емейлов. Впрочем такой вариант тоже имеет массу недостатков. Как же быть?
>>2089933 >Господа, в какой момент понадобится математика выше школьного уровня? Всякие графы, дискретки и т.д. В тот моменнт, когда ты решишь начать заниматься чем то что требует графов, дискреток, итд. Это не про типичный веб. У меня за 9 лет практики было ноль ситуаций когда его бы не хватало (вкатился со школы). Я вижу 2 варианта: 1)Ты попадёшь на проект в котором предметная область требует знаний (и то я хуй знает в какой предметной области всё это может понадобиться в рамках веб-приложения). 2)Ты попадёшь в другую ветку программирования(разработка движка для игры там, или что нибудь алгоритмически дохуя сложное).
Если же ты планируешь сайтики клепать-нахуй не нужно.
>>2090161 Можно клонировать процесс. В ларавеле есть стандартные средства для очереди задач. Можно самому на каком нибудь реддисе, или мемкешде организовать очередь, из которой задачи забирать демон-процессом отдельным.
>>2090209 По факту возразить сможешь? Программирование это не естественная, а абстрактная наука. Все важное что могло быть изобретено для веба, уже было изобретено. Дабы времени было предостаточно. Разве что маленькие косметические улучшения будут.
Не надейся на какое чудо, которое вот-вот придумает, и которое все поменяет.
>>2090235 >Все важное что могло быть изобретено для веба, уже было изобретено Чел, от того что ты и я не видим развитие наперёд оно не останавливается. Технологии развиваются, и развиваются постоянно. Вебу всего 30 лет, какое нахуй "предостаточно времени"? Ебучие ДВС которым 100 лет в обед всё ещё развиваются, хотя "всё что было можно изобрести было изобретено" ещё в 70/80/90/00х годах в зависимости от твоей любимой эпохи машиностроения.
>>2090245 Хуевое сравнение. ДВСы это объекты реального мира, чтобы их как-то исследовать и улучшать нужны большие и ресурсы и время на эксперименты.
Код - это блять просто написанные символы. Единственный ресурс, необходимы для его улучшений - это мозговитые ребятки. И 30 лет этим ребяткам было достаточно для того чтобы выжать около-максимум.
>>2090345 >И 30 лет этим ребяткам было достаточно для того чтобы выжать около-максимум. С одной стороны 95+процентов современных концепций программирования были изобретены ещё в 80х и ранее. С другой-мы периодически переживаем то очередную контейнерную революцию, то массовое внедрение нейронок благодаря прогрессу в железе, то серьёзное смещение в балансе парадигм программирования (элементы функциональщины всё больше и больше проникают в прикладное ПО). Плюс может поменяться модель потребления смартфоны изменили этот наш веб крайне сильно, например. Да банально:нейронки могут улучшить автокомплишен до состояния "ввёл название функции, тело сгенерилось само", что позволит ещё выше в абстракциях подняться, быстрее и эффективнее генерить объёмы кода, и благодаря этому могут новые подходы возникнуть. Совершенно не принципиально материальный у нас продукт или нет, эволюция инжинернойили говнокодерской мысли происходит постоянно. Я не говорю что будет обязательно что то революционное, но я говорю что появление новых инструментов, или эволюция текущих может координально поменять твою работу, и отрицать это-глупо и недальновидно.
>>2090161 >сохраняет заказ в базе данных, пишет емейлы пользователю а так же десятку сотрудников. Всё это время >Всё это время это должно занимать примерно 0 секунд
>>2090161 >Можно ли в php отдать ответ пользователю, но продолжить работать еще некоторое время? Можно, session_write_close() и fastcgi_finish_request(). Но в твоем случае лучше очередь.
>>2090364 >fastcgi_finish_request Судя по описанию это именно то что я ищу. Правда у меня появляется фатальная ошибка Call to undefined function fastcgi_finish_request()
Видимо причина этого кроется в том, что FastCGI у меня не используется.
Неужели разработчикам PHP было так сложно написать функцию finish_request, которая работала бы всегда, не зависимо от того, используется ли FastCGI или не используется?!
>>2090415 В общем удалось решить проблему следующим образом: Первый скрипт, тот который подтверждает заказ, отправляет запрос второму скрипту при помощи curl с таймаутом в одну секунду. Второй скрипт имеет директиву ignore_user_abort(true); и выполняет всю долгую и сложную работу. В итоге пользователь, который запустил первый скрипт, ждет всего-лишь секунду таймаута и несколько мгновений подключения через curl. Я конечно понимаю, что это решение - костыль. Но оно работает и это главное.
>>2090691 Как повезет. Обычно либо блейд, если там какой-то древний проект или денег на фронтов не хватило. Либо вуе, что тоже такое себе, при чем фронт тоже беки пишут
>PHP на сегодняшний день активно используется в вебе Перевожу на русский. Кроме веба нигде нельзя использовать. Охуенный плюс, безоговорочная победа.
>Он лучше JS тем, что у него не течет память, как у приложений на Ноде Ясен хуй, если писать не приложение, а просто скрипт, который последовательно выполняется и умирает.
>в нем есть тайп-хинты и ООП Даже в сраном го есть тайпхинты и ооп. Напиши кста тайпхинт для метода, принимающего функцию, которая принимает строку, а возвращает число.
>можно писать удобный, легко читаемый синхронный код вместо нечитаемой лапши из промисов Перевожу на русский. Нельзя писать асинхронный код. Опять только выиграли.
>Он лучше Го тем, что в нем нормальный ООП Щас в го подвозят дженерики, а ты и дальше пиши по стопицот классов на каждый пердеж.
>В PHP удобнее и проще работать с массивами, чем в Го В пхп нет массивов, только хеш мапы
>В PHP не надо явно возвращать ошибки, как в Го Праильно, а нахуя явно возвращать? Мы же НОВЫЙ проект пишем, пущай с этими ошибками ебуться когда он станет легаси (через месяц)
>А уж запускать и разворачивать приложения на PHP куда как проще, чем на JS и Go, и поганый Докер не требуется (Докер это штука Нам он и нахуй не нужон, докер ВАШ! У Пятровны вишь эта хуйня магическая САМА доступы открыла. В фаерволе шебуршит безбожник. Сладу с ним нет. Не по нашенски енто. Тут закал столетний, виртуалбоксовский. Тут вагрантом фонит по низам. Тут мужик свою виртуалку, свою bsd стережет накрепко.
>>2090440 >В итоге пользователь, который запустил первый скрипт, ждет всего-лишь секунду таймаута Ты сука гонишь что ли, всего лишь секунду... У меня самые тяжелые скрипты секунды полторы отрабатывают, и каждый раз я проверяю точно ли не нужно воркер заюзать в этом месте.
>>2090980 PHP решает свои задачи и решает их отлично - рыночек порешал, а что там пердит очередной борщехлеб всем насрать. Нечего там разъёбывать. Да и не написал он ничего конкретного - манька себя "погроммистом считает", а остальных - говном.
>>2091096 Запилил по учебнику простейшую форму заказа с магазина и их обработку, но при этом не выводится цена и сумма, может кто проверить и посдказать?
Ребята подскажите ситуацию, вот работал я макакой пхпшной, все программы писал в процедурно-функциональном стиле. Стоит ли сейчас искать что-то другое и возьмут ли меня на нормальную галеру, за нормальную40-50к хотяб зп? Или требования у таких галер обязательные знания и умения применять ООП? сейчас я на гос. предприятии работаю с легаси, чувствую что что-то не так
Всем здарова, я хочу стать верстальщиком. Учил html, scss, прочитал 1 часть Кантора по js, сверстал пару лендингов, читал на metanit про typescript, потом посмотрел видео по основам react и next.js, чтобы понимать как верстать реакт-компоненты и как принято делать страницы и компоненты в next.js Насколько я понимаю теперь мне надо учиться верстать под vue и angular.
МОЙ ВОПРОС ПО РНР. Насколько в 2к21 году популярна верстка на РНР-шаблонизаторах типа twig? Мне как вонаби верстальщику надо учить twig и учиться верстать на РНР-шаблонизаторах?
Привет аноны, я не местный, не ваш, не пхпшник в клетчатой рубашке. Почему-то подумалось, что в этой ветке должны сидеть адекватные дяди, понимающие веб !
Короче, проблема проста, на на простейший get реквест получаю 401 unauthorized.
На сайте логин не требуется, прозреваю что ему нужны Куки. На моём языке в сетевых либах есть возможность заСэттить кукисы, крайне много дрочился с этим, но после сеттинга валится ошибка что-то в стиле "already connected" соотв header засеттить не могу. Да и продебажить толком не получается.
Дальше пока сумбурные мысли о том, что нужно послать какой-то хитровыебанный header в реквесте. Хуй его знает. Что думаете? Где я жидко обосрался?
>>2092582 Смотри в браузере, в инструментах разработчика что там отдаётся и принимается. Нам отсюда не видно куда ты пытаешься попасть и как, да и влом, если честно.
>>2092560 Времени у меня заняло неможечко ДОХУИЩА!
Потому что я учился в компьютерной шараге, не знал кем и куда я хочу пристроиться.
Я вообще не думал о будущем. Я думал о том как сдать предметы в шараге и не угодить защищать сапоги. Преподы всех вечно пугали отчислением, только я омежка сыч на это вёлся. Когда остальные Ерохи хуй ложили и были правы! Потому что моя шарага МухГУ в итоге выпустила с дипломами всех, кто тупо ходил на пары и не терялся подолгу!
Другие ребята думали о будущем, один челик, например, уже с 2 курса компьютерной шараги решил для себя, что не будет ничего делать по учебе, потому что учеба учит какой-то хуйне, а будет только вкатываться в веб.
Так вот, во время шараги я как лох занимался деланием домашки по мутным предметам, которые реально ничего не дают!
Так что постепенно вкатываться в вёрстку я начал аж 5 лет назад, когда поступил в шарагу! Я тогда начал дрочить штмл, цсс и пытаться верстать лендосы. Но я всё время бросал, потому что учеба в шараге требовала делать вообще другое. В шараге решали математику, физику, было море гуманитарных предметов не относящихся к специальности, учились паять, изучали устройство ПК правда устаревшее, мы, например, дискеты изучали.
Я закончил шарагу год назад. Меня пытались уволочь в армию. И пришлось в дурку ложиться. 10 дней в дурке провисел.
Извините, за изливание душе. Я искренне извиняюсь за своё существование. Я просто очень долго уже 5 лет не могу вкатиться в вёрстку. Извините.
>>2092690 Анон возьми себя в руки, че ты в самом деле. У многих в жизни ситуации бывает хуже. Я например, чуть ли не бомж. И это никак не оправдывает, моё бездействие. Нужно дальше действовать. И в армейке отслужил итд. Решай проблему постепенно, разделив на более мелкие задачи. Так проще будет, и удачи.
>>2092748 >>2092732 >>2092740 Почему весь pr утопает в токсичном говне, все выебываются друг на друга, дизморалят, и только в одном пхп-треде такая атмосфера поддержки? Это какая-то магия?
Подскажите, почему может не работать height: 100%? У html задан затемненный фон, body - основное рабочее поле, и оно сейчас половину снизу подрезано затемненным фоном. Как body до конца продлить вниз без абсолютных величин?
Это неправильное решение. strrev работает только с устаревшими 1-байтными кодировками и не переворачивает строки, закодированные в utf-8. Попробуй сам проверить свою программу на строке с русскими буквами в utf-8.
height: 100% сработает только если у родителя height жестко задан - в %, пикселях или другой величине. Причем, если у родителя height в %, то соответственно у его родителя тоже должен быть задан height.
У тебя скорее всего не задан height у html. И еще, скорее всего, на body тебе нужен не height, а min-height.
>>2093103 Это может быть связано с чем угодно, если у тебя например в инкогнито заходит на страницу, то возможно что сервер смотрит на юзер агент, а твой хттп клиент отправляет или своё имя, или вообще ничего. Но вообще скорее всего или какие-то куки ставятся, или еще какой-то хитровыебанный хедер. Тебе правильно посоветовали, открой девтулз и посмотри какие там ответы приходят
>>2092732 >анон, что за настрой... ты хоть попробывал вкатиться? Извините, просто я чет бомбанул, теперь неловко за свою пасту. Нет, я не пробовал вкатываться в работу, чувствую, что не готов, надо готовиться, учиться. Спасибо большое за совет, буду настраиваться быть ровнее и чётче.
>>2092748 Блин, ты крут, что в армейке отслужил, красавчик. А я зассал, что меня там Ерохи напихвают и через дурку закосил, 10 дней там зависал, потом тесты проходил. Врач спрашивает вопросы, я отвечаю, она в компьютере заполняет. И когда вопросы закончились, я хотел заглянуть в монитор, какой там результат. И врач отвернула монитор, чтоб я не видел, что там. Так и не узнал что мне написали, чем я болен. Хотя мне пофиг, главное, что перестали меня после этого вызывать защищать сапоги. Ещё был мужик прикольный пациент, он когда узнал, что я от военкомата, то он стал пританцовывать и говорить стишки типа "мама - поликлиника, отец - военкомат".
Прошу прощения, что-то меня понесло. Большое спасибо за совет, я буду стараться.
Посоны, насколько джуну на первый вкат надо заморачиваться с архитектурой и клин кодом для пет-проектов-крудилок? Получается, что у меня есть немного знаний, к ним добавляется шизоидное желание писать клин код, а в результате получается обфускейтед поебота типа FizzBuzzEnterpriseEdition, только все-таки не особо расширяемая. Например флоу такое: в контроллер инжектится http-реквест. Контроллер преобразует http-реквест в дто (в laravel есть FormRequest, а в symfony я его сымитировал через ParameterResolver). Сервисы получают дто-запрос, отдают дто-ответ. Контроллер перобразует дто-ответ в http-респонс. Сервисы - это домен-сервисы, которые инжектятся через интерфейсы. Воот, в моей реализации получаются следующие проблемы: 1. Жирные интерфейсы (как бы с нарушением interface segregation). В них просто круды прописаны, но вот захочу я завтра создавать-сохранять модели по-другому: мне весь круд переписывать надо будет (ну можно старый декорировать конечно, но все-равно мне кажется, что это не правильно). При этом не хочется впадать в другую крайность: дохуя интерфейсов (один - для сохранения, другой - для удаления и т.п.) - кажется, что это плохая идея. Че делать? 2. Также не понимаю как сделать легкозаменямые дто. У меня получается привязка к очень конкретным типам (вплоть до new в контроллерах). Кажется тут может помочь фабрика, но в них я еще, не шарю. Не понимаю как через них дто делать (и надо ли?), потому что в случае фабричного метода нужна логика на уровне фабрики, а в случае абстрактной фабрики дто будет на уровне интерфейса, что по-моему, не имеет смысла, так как дто нужно будет что-то делегировать, а нахуя ему что-то делегировать? 3. Когда я вернулся через две недели к своему коду, я тупил как я там собираю ошибки и откуда берется этот дто. Это говорит либо о моей тупости, либо о том что код реально запутанный, либо, что последнее - это следствие первого. Примерно так я и мучаюсь. Может на реальных проектах научат как делать надо? Или наоборот - надо сперва уметь, чтобы туда попасть?
>>2093370 Ты хотя бы один реальный рабочий пет-проект сделал? Все эти траханья с архитектурой имеют смысл, когда ты шишек набил, а без опыта это всё называется интеллектуальная мастурбация. Завязывай - с этим долго и бесполезно играться можно. Поверь моему опыту.
>>2093370 Ну и да - не гонись за идеальным кодом. Хороший программист знает где почище надо сделать, а где говна поднакинуть, но побыстрее чтоб. Это у тебя ещё детские какашки после стерильных туториалов не вышли - как увидишь реальный проект, так сразу отпустит.
Сап, такой вопрос, а зачем браузер пытается рендерить неправильную html верстку? Например, три дива <div><div><div> незакрытые будут интерпретироваться как вложенные друг в друга, и еще много всяких других странностей есть. Не логичнее ли, если тег не закрыт и он парный, интерпретировать его как текст?
>>2093519 Это если про работу. Иногда сижу-пержу делаю своим мутки для души. Плюс на них в зависимости от усталости/времени/желания от 1 до 4. Но это не каждый день
>>2093525 Самый большой секрет - не слушать музыку и не смотреть никакого говна на фоне. Ну и плюс высыпаться. Правда сегодня у меня на работе новой пинания хуев официальные, ибо мне для проекта api ещё не завезли для бизнес логики (ТМ).
>>2093557 >>2093590 Я сам в процессе обучения, если я только читаю или смотрю видосы, то если за день 4 часа наберется, то это очень хороший результат для меня. Больше читать/смотреть меня мой мозг нахуй посылает. Если пишу что-то для практики, то 5 часов чистого написания уже супер, в среднем часа 4 за сутки. Больше не получается из себя выжать. Без выходных каждый день занимаюсь.
Хз почему так, может я ленивая жопа, может со временем когда это до автомата все дойдет будет легче выходить и получится больше по времени работать, но меня моя продуктивность не устраивает. Хотел бы тоже часов по 6 хотя бы хуярить в день.
>>2093557 >Самый большой секрет - не слушать музыку и не смотреть никакого говна на фоне. Сегодня попробовал и охуел. Это реально работает, лол. Спасибо.
>>2093608 >если за день 4 часа наберется Да нормально будет, больше и не надо, можно меньше даже. Тут нужно учесть один немаловажный фактор, который многие постоянно упускают - учёба всегда тяжелее даётся, чем применение уже развитых умений. Т.е. 5 часов пилить код это в целом легче чем 2 часа учёбы - ты там над задачей думаешь и доки читаешь, а не думаешь над элементарными вещами. Учишься, понятно, постоянно, но в соотношении 75% уже умеешь и 25% новое. Короче, 2 часа в день для учёбы достаточно - главное регулярность. За 3 месяца и один инфоциганский курс разработчиками не становятся.
>>2093601 > >не слушать музыку > Хз мне под пситранс или эмбиент норм делается. Что-то в этом стиле: Ну я тут не скажу за всех, но мой опыт - пробовал я эмбиент слушать, пробовал чил степы там всякие и прочее прочее. И вроде бы сначала работает. А потом начинает отвлекать мозг.
> >не смотреть никакого говна на фоне > А как его можно смотреть? У меня, например, концетрация с потоком в процессе и я просто не вспомню о чём там было. Многие, когда я в офисе был, так делали. Да и я сам. Ставишь какой нибудь подкаст на Ютубе / видос и слушаешь. Либо в окошко мелкое сворачиваешь.
Здесь как бы многие моменты индивидуальны. Не претендую на истину.
Пишу пет на Ларе и у меня вопрос к знатокам: Как можно реализовать универсальные категории, к которым потом можно отнести как записи в блоге, так и, например, товары. Или сделать проще - на каждый модуль(блог, магазин и тд) заводить свою категорию? Чёт туплю на этом месте. Как обычно делают?
Я не понимаю, когда я подключаюсь к бд, какой хост и порт я там должен указывать? Подключение происходит через апач или свой собственный сервер от pgsql? Указываю localhost - PDOexception выдаёт "could not find driver", хотя в php.ini расширение включил.
Два Ч, спешу поделиться радостью! 7 лет ждал вката в программрование. Всё это время учил PHP (psr-*), дрочил алгоритмы, разные фрэймворки... ну короче, я джуниор битрикс разраб!
Спасибо тому анону, что 7 лет назад уговорил меня уйти с работы и заняться самообразованием. Это время прошоо незаметно. Джун в 35 это нормально.
Уметь выбирать архитектуру, конечно, было бы хорошо. Но одно дело это осознанно выбирать тот или иной подход, а другое дело - бездумно скопировать архитектуру из какой-то книги.
Не стоит слепо копировать какие-то решения. Стоит смотреть: какие есть варианты решения задачи, какие у них есть плюсы и минусы и выбирать исходя из этого.
Ну например: ты пишешь, что используешь DTO и инъекцию через интерфейсы. А для чего это нужно? Какие плюсы дает? Может быть, в твоем простом проекте без этого будет проще?
> Сервисы получают дто-запрос, отдают дто-ответ.
Здесь может получиться, что сервис залезает в зону ответственности контроллера. Ну, например, пусть у тебя есть функция поиска книги по id. И ты возвращаешь DTO с полями вида success = true, name=Название, author=Автор .... Твой сервис по сути занимается формированием view, его просили просто найти книгу, а он занимается переводом ее в JSON. В MVC это задача не сервиса, а View, представления, преобразовывать объекты в нужный пользователю формат.
>В них просто круды прописаны, но вот захочу я завтра создавать-сохранять модели по-другому
Тогда тебе надо не спешить писать интерфейсы, а посмотреть: может быть, проще без них? Может, без них придется переписывать меньше кода при изменениях?
> Также не понимаю как сделать легкозаменямые дто.
Зачем может понадобиться заменять DTO? Его делают для задачи передать данные из A в B. Зачем тебе понадобится его на что-то заменять?
> Кажется тут может помочь фабрика,
Мне кажется, ты делаешь ошибку начинающего, который прочитав про паттерн, стремится всюду его использовать, даже если проще без этого.
> Может на реальных проектах научат как делать надо?
Нет, на реальных проектах будешь писать так, как нравится ведущему программисту.
Это исторически там сложилось, что браузер пытается отобразить любой HTML код, как бы он не был написан. Это привело к тому, что появились сайты с кривым HTML. Новые браузеры не хотят ломать совместимость и такие сайты. Потому в новом стандарте HTML даже описаны правила обработки ошибок:
Ты должен указывать адрес хоста, где расположена БД, и порт, который она слушает. Апач тут вообще не при чем. Pgsql является сервером и сам принимает запросы.
Попробовал тут Нетбинс и нихуя не понял - почему он у меня пхпдок не подтягивает? Попробовал 12.4 и ЛТС 12.0 - в обеих только радостно вываливает дефолтные варианты. Без этой базовой для ИДЕ фичи это, фактически, обыкновенный редактор, только тяжелее в несколько раз чем тот же VSC. Как вы им пользуетесь вообще?
Пробовал Eclipse с год назад - там похожее было, но там решается всё сборкой проекта и тогда ИДЕ видит всё что надо. А тут как? Не поверю, что есть такие говноеды, которые юзают ИДЕ как редактор.
>>2094663 Почему когда речь идёт о ИДЕ обязательно вылезет кто-то и пукнет про шторм? Ты считаешь, что про него кто-то не знает что ли или как? С какой целью ты это написал? Я спрашивал тех, кто умеет в Нетбинс вообще-то.
>>2094696 >Почему когда речь идёт о ИДЕ обязательно вылезет кто-то и пукнет про шторм Потому что к сожалению в нашем веб болоте у тебя из альтернатив только "ломанный" шторм, и лицензия шторма. Не? Всё остальное либо для фанатиков свободного по, либо для нитакихкавсе. Шторм-к сожалению единственная адекватная ИДЕ для этих наших похапе.
>>2094464 >Нетбинс В этом вообще невозможно писать, только начинаешь, появляются какие-то окна на пол экрана сверху и снизу, вообще не видно где пишешь. Ещё и пространство имён не воспринимает, говно в общем какое-то.
>>2094703 Так я и спрашиваю - как в этом работают, потому, что на первый взгляд это убогое говно даже для бесплатного редактора. Как-то видел даже тех, кто за него срачи устраивал. Может это я чего-то не понимаю с ним?
>>2094702 >>2094706 Я это десятки раз уже слышал. Завязывайте в попугаев играть - я не про шторм спрашивал.
>>2095230 Гайд с шапки по основам языка, потом доки пхп, потом задача про студентов, потом ларавель по документации. до пхп писал на си, с++, шарпе, питоне в качестве развлечения, так что как работает код и принципы ооп знал, гитом давно пользовался, как и линуксом в дуалбуте
Для этой задачи нужно уметь работать с массивами. Общая идея примерно такая: создаем массив с значениями-номерами 1, 2, 3, ... и затем в цикле удаляем из него элементы по одному, пока в нем не останется нужное количество элементов.
Единственная сложность тут - как определить, какой именно элемент удалить. Допустим, в считалке 5 слогов. Если ключи в массиве начинаются с нуля (0, 1, 2, 3...), то первым надо удалить элемент с ключом 4 (он пятый по счету с начала), потом с номером 9, и тд. Когда мы дойдем до конца массива, у нас получится "дырявый" массив, в котором нет элементов с ключами 4, 9, итд. Мы можем его переупорядочить с помощью array_values, так что ключи снова будут идти по порядку без "дырок", и дальше продолжать удалять из него элементы.
Обычно используют mod_rewrite. Этот модуль позволяет "переписывать" URL, если он соответствует/не соответствует правилам. Документация есть, но на английском, и я бы советовал для начала почитать про этот модуль. Иначе ты не поймешь то, что написано ниже.
Используя mod_rewrite, мы пишем правило вроде: если URL не соответствует js/css/png/статическому файлу, то переписать его на index.php. Это позволяет нам делать "красивые" URL, а также защитит нас от ситуации, если злоумышленник смог загрузить на сервер свой php-файл и хочет его запустить.
Правила можно прописать в конфиг Апача (более надежно, так как он защищен правами доступа) или в файл .htaccess (чуть менее надежно, так как при наличии уязвимости его можно переписать) . Типичные правила выглядят так:
RewriteBase / # Если в URL index.php - не переписывать его RewriteRule ^index\.php$ - [L] # Если URL ссылается на существующий файл или каталог - не перепиысыыать RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Иначе, заменить URL на указанный RewriteRule . /index.php [L]
Кстати, тонкость в том, что Апач исполняет эти правила не один раз, а много раз подряд до тех пор, пока URL не перестанет меняться.
Конфиг выше не защищает от запуска других PHP файлов, если в URL прописать путь к ним. Чтобы защититься от этого, нужно поменять правила с -f и -d, чтобы они проверяли еще расширение файла. Сейчас правило выглядит как:
- если URL указывает на файл или каталог, не переписывать URL
Соответственно, если указать URL вида /upload/photo.php и такой файл есть, то он запустится.
А должно быть:
- если URL указывает на файл И этот файл имеет расширение css/js/jpg/png/... то не переписывать URL.
Думаю, что эти правила надо заменить на примерно такое:
# Если URL заканчивается на css/js/png - не переписывать RewriteRule \.(css|js|jpg)$ - [L]
В общем, почитай про mod_rewrite, напиши конфиг, протестируй:
- что вызывается index.php, - что статика отдается корректно, - что посторонние php-файлы не запустить по прямой ссылке или используя трюки вроде /upload/photo.php/styles.css
Не всем нужен PHPStorm, и даже те, кто его использует, зачастую не пользуется, а то и не знает про все его возможности. Зачем покупать программу, которую ты будешь использовать на 5%? Потому стоит посмотреть и на альтернативы:
- VS Code с плагином intellisense, с lint-плагином для проверки корректности кода - Eclipse (с багами)
В mvc во view допустимо хуярить блоки if else и ебашить / пропускать хтмл элементы по результатам выполнения этих блоков? Все вычисления в модели, из нее выходит массив с кучей true/false, потом если true, то элемент добавляется к верстке, если false, то нет. Такое же допустимо?
>>2095284 >Зачем покупать программу, которую ты будешь использовать на 5%? Потому что даже эти 5% работают лучше на 2 головы чем у всех конкурентов, не? Да и изредка даже у 5процентника возникает таки запрос на редко используемые штуки. И вот в случае если он сидит на другой иде-он будет как то терпеть и жить как жил. А если на шторме-погуглит, и начнёт использовать уже 6%. Внезапно:да, процесс изучения инструментов тоже зависит от практики.
>>2095305 Допустимо конечно, иначе этого бы не было во ВСЕХ шаблонизаторах. Тут, конечно, тонкая грань(что есть бизнес логика, а что допустимо и в шаблоне), но в целом-ничего страшного в условных операторах в шаблоне нет.
>>2095368 >>2095283 >Хотя, как я помню, там есть какие-то баги. Тоже встречался пару раз. Но там достаточно разобраться с плагинами - какие норм, а какие жопоруки писали и использовать нормальные. Вообще Эклипс мне именно своей гибкостью понравился - плагинов очень много разных и из ИДЕ собрать можно даже троллебус. Ну и да - он выполняет свою функцию помощи при написании кода, в отличие от.
>>2095368 >даже эти 5% работают лучше Эти 5% это как раз и есть обычный редактор да модуль гита. Такое сегодня везде есть искаропки, и везде отлажено.
>>2095481 >Эти 5% это как раз и есть обычный редактор да модуль гита Как минимум это ещё переход к дефайну функции, корректная работа с неймспейсами, удобный ssh клиент встроенный.
>>2095498 >переход к дефайну функции, корректная работа с неймспейсами, удобный ssh клиент встроенный Тоже везде есть - это базовые фичи. Переход к дефайну ещё в 2002 году встречал в ИДЕ для Дельфи.
Самое сложное это найти идею для проекта. Важно чтобы: а) Не требовал сбора тонн информации б) Не требовал годы на разработку в) Привлек немного пользователей
Логику можно разделить на бизнес-логику и логику отображения. Например:
- если пользователь зарегистрировался менее 7 дней назад, то он получает скидку на товар - это бизнес-логика, ей место в модели. - если пользователь VIP, то около его ника рисуется корона - это логика отображения, ей место во view. То есть просто во view пишем: if ($user->isVip()): .... endif.
А зачем в IDE поддержка git? git абсолютно удобно использовать из консоли. Наоборот, в IDE часто поддержка git реализована плохо. Например, в PhpStorm при разрешении конфликтов, если я не путаю, используется 3-панельная система сравнения в то время, как сторонние программы вроде KDiff3 имеют 4 панели.
Переход к определению есть в Eclipse, VS Code + intellisense. зачем нужен SSH клиент в IDE, не очень понятно - можно просто в консоли набрать ssh user@host.
>>2096051 >git абсолютно удобно использовать из консоли Нет, не удобно. Я никому не рекомендую начинать знакомство с гитом с консольного варианта.
>используется 3-панельная система сравнения в то время, как сторонние программы вроде KDiff3 имеют 4 панели Да? А что через консольку не разгребаешь? Тебе ведь удобно.
>>2096051 >можно просто в консоли набрать ssh user@host Алсо IDE предполагает наличие консоли, сразу настроенной под проект. Вообще сам идея IDE это когда есть один инструмент, заменяющий собой пачку различных инструментов. Так-то никто не мешает взять их все в отдельности и использовать - я сам такое иногда вытворяю.
>>2093190 А где конкретно в девтулс это? (в хроме?)
>отправляет или своё имя, или вообще ничего. Да, я же пишу c нуля реквест по сути. То есть юзер агент и всякие дефолтные поля (как бы для эмуляции браузера) могут помочь? Но всё-таки не въехал до конца с механизмом передачи кукисов. Может Postman заюзать, он такое умеет? Просто ленив пока. Вообще это мой сраный ПЕТ, поэтому всегда можно забить.
>>2093608 >если за день 4 часа наберется, то это очень хороший результат Двачую, тоже вкатываюсь, третий месяц, за все это время 4 часа чистой учебы у меня получилось всего пару раз, обычно 2 часа выходит.
>>2096111 >это мой сраный ПЕТ, поэтому всегда можно забить А я вот даже на петах на 100% всё выполняю. А если на реальном проекте встретится? Это вызов для меня скорее - могу много времени потратить, порой переделывая и прикидывая как лучше. Благо с петами рамок по времени нет.
>>2096281 >А если на реальном проекте встретится? Это вызов для меня скорее - могу много времени потратить, порой переделывая и прикидывая как лучше На реальном проекте никто не даст время на выдрачивание кода. Сделал - заработало - в прод
>>2096586 Все навыки заранее не выдрочишь. В разработке масса узких специализаций, где можно годами выдрачивать. А какие из них придется использовать на проде - чистая лотерея. Могут дать ETL, могут работу с платежами, а могут какую-нибудь аналитику строить. На каждый случай будешь код задрачивать?
>>2096612 Тебе 12 лет что ли - что за фатализм "все навыки заранее не выдрочишь" и, типа, нефига даже заниматься. Любишь на месте велосипеды писать как получится - твоё дело, но чё ты до меня-то доебался?
>>2096612 Алсо таких как ты нельзя подпускать к критическим системам - такого нахуевертишь. Приходилось общаться с людьми для которых сроки на втором месте и важнее именно качество и вот ты туда не проходишь потому, что сделал - заработало - в прод. Это подход хуятора в подвальной галере.
>>2096681 >к критическим системам Мань, критические системы не пишут на пхп. Максимум это финтех, где всё покрывается пачкой тестов и ревьюится.
>Приходилось общаться с людьми для которых сроки на втором месте и важнее именно качество и вот ты туда не проходишь Вряд ли выбирая качество люди будут писать на пхп
>>2096669 Прихожу на новое место работы - там своя предметка и архитектура, так что мои знания сразу ополовиниваются, пока в проект въедешь, пока в бизнесовой части разберешься. Ну и я заранее не знаю, какая фирма даст оффер и какой проект в фирме придет. Может это сервис доставки, может инет магаз, может какая-то црм. Заранее дрочить предметку - если на мамкиной шее сидеть, мб и можно. Но обычно погружение происходит в первые пару месяцев работы. А там уже пишешь норм код как остальные разрабы
Начинать как раз стоит с консоли и проекта из 3 файлов, так как там нет ничего лишнего, что может отвлечь или запутать. Простые команды, каждая из которых делает одно действие. Это лучше для изучения, чем сложные формы с кучей информации и кнопок.
Тем более, что эти формы - это лишь интерфейс к тем же самым консольным командам.
> А что через консольку не разгребаешь?
Для разных задач удобнее разные инструменты. Сделать коммит или посмотреть, кто и как менял функцию x, удобнее через консоль. Разрешать конфликты удобнее специально сделанной для этого программой (а не в консоли или в PhpStorm).
- оригинальный код, от которого были отпочкованы две конфликтующие ветки - код после твоих правок - код после правок на сервере
Внизу:
- результат мерджа (он включает твои принятые правки, принятые правки с сервера и ручные исправления).
То есть, если был код $x = 1; и ты его поменял на $x = 2, а кто-то другой на $x = 3 то в трех верхних панелях будут эти три версии кода, а внизу - итоговый результат (который в том числе можно править вручную, например вписать $x = 4).
В PhpStorm, как я понял из мануала, нету панели с оригинальным кодом. Нельзя увидеть, как код выглядел до правок.
Небходимо написать один SQL запрос который возвращает: имена и фамилии всех работников, список их детей через запятую и марку машины. Выбрать нужно только тех работников у которых есть или была машина (если машина была и потом её не стало то поле model становится null).
3. Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов (например “<a>”, “</td>” ), а возвращает результат проверки корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа. Например, последовательность “<a>”, “<div>”, “</div>”, “</a>”, “<span>”, “</span>” - корректная структура, а последовательность “<a>”, “<div>”, ”</a>” - некорректная структура.
Необходимо использовать нативный php без использования библиотек DOMDocument, Simplexml и тд.
4. Написать класс-оболочку хранилища «Box».
В хранилище можно установить данные (setData($key, $value)), получить данные (getData($key)), сохранить данные (save()) и загрузить данные (load())
$key — произвольный идентификатор данных
$value — скаляные данные или массив
Хранилище состоит из:
- Интерфейс описывающий методы установки данных, получения данных, сохранения и загрузки
- Абстрактный класс AbstractBox содержащий реализацию необходимых общих методов
- Класс FileBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в файл. При вызове load() достает данные из файла.
- Класс DbBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в базу. При вызове load() достает данные из базы.
Функция load не должна ничего возвращать, должна лишь сохранять полученные данные внутри объекта. Для получения данных служит функция getData($key).
При сохранении данных необходимо учитывать ключи новых данных и тех данных что хранятся в базе(файле), если значение с ключом в базе(файле) уже существует, то нужно его значение заменить на новое.
Классы FileBox и DbBox должен быть реализованы таким образом, чтобы нельзя было создать более одного экземпляра каждого из классов.
Общие пожелание по выполнению всех заданий: по 1 и 3 заданию необходимо в отдельном файле создать одну функцию с необходимой логикой, если необходимо какую-либо из функций разбить не несколько, делать все в этом же файле, по 2 заданию, необходимо в отделльном файле написать один sql запрос и больше ничего, по 4 заданию в отдельной папке создать необходимые классы. Никаких index.php, html разметки и тем более стилей добавлять не надо.
>>2096834 Так и че? Задание для джуна адекватное вполне. За вечер делается. Бери и делай, хули еще надо? Как ты работать собрался если ты эти мелкие задачки сделать не можешь сам?
>>2096804 >проекта из 3 файлов Где ты такие проекты видел и зачем им гит?
В общем у тебя консолька ради консольки, а когда не консолька, тогда можно, но почему-то только тебе. Все остальные зачем-то тоже должны вводить буковки вместо того чтобы пару раз кликнуть мышкой. Использование консоли удобно только для более хитровыебанных операций, а базовые все давно уже прокликивают. Та же работа с ветками - набери, посмотри, переключись. Через интерфейс же все ветки сразу видно. Я сам большой любитель попердолить консолечку, но когда надо писать код и думать о проекте, то посторонних движений должно быть минимум - Это хорошо экономит время.
>>2096807 >В PhpStorm, как я понял из мануала, нету панели с оригинальным кодом. Нельзя увидеть, как код выглядел до правок. Есть такое, да. Хотя не очень часто нужно обычно резолвишь конфликт и дальше идешь. А в случае чего можно откатиться
>>2096846 Ну ты борзый канеш. Некогда ебать. Одно дело помочь, а другое сделать за какого-то охуевшего черта его работу, на которую ему к тому же поебать.
>>2096834 >astrio Видел как они искали разработчиков в вкшечке, постоянно меняя аватарки и имя херочки. Глянул на их требования и в целом - мутная контора, которая, похоже, просто торгует курсами для вкатывальщиков. По крайней мере у меня такое впечатление сложилось.
А ты просто хуй с горы и думаешь вкатиться таким хитрым способом, лол. Они же там обещают обучение вроде как.
>>2096586 Да хер знает. Меня лично мотивирует только потенциальный доход от работы над ПЕТом, а ламповость в самом процессе, как впрочем и мозготрах. Много всяких тонкостей изучал в том году, а теперь вижу что я долбоеб и просто въебал время вникуда, в знания, которые ВОЗМОЖНО когда-то пригодятся или нет. Ну такое. Нужно четко структурировать кодинг и условно гуглинг различных техник в каждый момент времени, постоянно перепроверяя и соотнося это с реальными проблемами на земле, которые ты способен решить.
Пацаны, хэлп. Вкатываюсь уже какое-то время, вполне придрочился к PHP/SQL, прохожу книжечку из шапки по Гиту и уже начал забывать JS. Собственно проблема в том что я просто сижу читаю\делаю какие-то глупые упражнения и чувствую что нихуя дальше не развиваюсь, тк ни одной более менее реальной задачи не решил и даже не знаю какие они могут быть. Возможно ли с такими навыками найти подработку\стажировку за еду или даже бесплатно, или где можно дрочить скилы, чтобы не я сам оценивал свой говнокод, а мне могли указать на ошибки?
>>2098138 MVC не про глобальные переменные, а про архитектуру. Глобальные переменные вообще лучше не использовать нигде. Собери из них объект реквеста и передавай в контроллеры. Например даже древний Опенкарт при инициализации делает этот Реквест и очищает глобальные чтобы никому моча в голову не ударила их использовать при создании плагинов.
>>2098064 >Возможно ли с такими навыками найти подработку\стажировку за еду или даже бесплатно Думаешь один такой? На стажерские вакансии километровые очереди стоят. Так что дрочи скилы дальше, пиши пет проекты, пробуй собесы на джуна/мидла
>где можно дрочить скилы, чтобы не я сам оценивал свой говнокод, а мне могли указать на ошибки? Для начала возьми какой-то пет проджект, хоть банальный интернет магазин. А оценить его могут в тематических чатах в телеге. Некоторых разрабов бывает заебывает работа и хочется отвлечься - могут поревьюить твоё поделие.
У меня есть таблица авиарейсов, типов самолётов, мест в самолёте и таблица тапов мест. Для каждой таблицы есть класс с методом создание, в котором есть запрос sql, привязка значений и выполнения запроса. Но что-то я понял, что создать отдельно каждое место в таблице мест как-то глупо. Вопрос - как сделать, чтобы при создании авиарейса, в зависимости от типа самолёта(в таблице которое есть поле с числом максимальных мест), таблица мест автоматически заполнялась в каком-то соотношении типов мест? Как это вообще приблизительно реализовывать?
А зачем для каждого рейса создавать записи в таблице мест? Если во всех самолетах одного типа всегда одинаковое количество и типы мест, то можно сделать список типов самолетов, и к типу самолета привязать список мест, которые в нем есть.
То есть, в самолете типа 1 есть места A1, A2 ... и так далее. Если тебе понадобится оформить билет, то ты в нем указываешь id рейса и id места.
В принципе, можно. Но все зависит от ситуации. Если ты имел в виду "у меня есть функция регистрации пользователя. Можно я просто в нее передам $_POST целиком?", то это плохая идея. Так как функция регистрации пользователя должна заниматься именно регистрацией, а не разбором переменных из _POST или валидацией форм. У тебя же эта функция должна "знать", как выглядит форма регистрации пользователя, какие поля из нее приходят.
Обычно такую задачу разделяют на подзадачи:
- разбор данных, пришедших из формы и преобразование этих данных в объект какой-то стандартной структуры (например: User или UserRegisterForm) - проверка правильности данных - создание пользователя
Здесь каждая функция занимается своим делом и ничего не знает о других функциях. Функция валидации или регистрации ничего не знает о форме регистрации.
"реальные задачи" отличаются от учебных упражнений следующим:
- во-первых, в реальных задачах используется много готового кода, а именно: фреймворки уровня Symfony/Laravel, плагины к ним, шаблонизаторы вроде Twig, ORM вроде Doctrine. Все фреймворки учить бесполезно, но познакомиться с одним из них стоит.
- во-вторых, в реальных задачах гораздо больше "фич" и больше объем кода. В учебной задаче ты делаешь сайт из 3 страниц с 5 элементам (кнопки, ссылки, таблицы) и на каждой. В реальной задаче будет сайт из 300 страниц с 5000 элементами.
Ты не написал, какие задачи ты делал, потому непонятны твои навыки. Если максимум, что ты делал - это задачи про переворачивание строк, то наверно тебе надо учиться больше. Если ты делал какие-то веб-приложения на фреймворке, то наверно можно попробовать поискать работу.
В шапке есть задача про сайт Testhub, она по сложности приближается к реальным приложениям. Можешь посмотреть ее.
Проект из 3 файлов и консоль - это нужно для изучения гита. Потому что изучать гит удобнее на маленьком числе файлов и без перегруженного графического интерфейса.
Ты предлагаешь: не изучать гит, а сразу взять интерфейс с кнопками из phpstorm и пользоваться им. Те, кто умеет только нажимать на кнопки, не понимая толком, что они делают, в итоге ломают код при мерджах, при конфликтах. Это глупый подход.
>>2100779 >умеет только нажимать на кнопки, не понимая толком, что они делают Как это должно изменить набирание команд через консольку? Понимать гит как раз легче через интерфейс т.к. там базовые операции разделены по типам: работа с коммитами, ветками, удалёнными репами, тегами и тд.
>ломают код при мерджах, при конфликтах Через консольку всё точно так же ломается, если ты не знал.
>Это глупый подход. У тебя позиция дурачка, который считает, что копипастить код нельзя и нужно всё набирать руками.
Вообще понимание как работать с гитом это в первую очередь понимание его подходов и возможностей, которые он даёт, а не заучивание консольных команд - их в справке посмотреть всегда можно.
И ты так и не сказал - почему в одном случает нужно пользоваться только командами, но в определённых случаях ты лезешь в интерфейс? У тебя логика с двойным дном.
В laravel есть какой-нибудь способ изкаропки реализовать null object пользователя? Можно, конечно, свой сервис сделать, к нему фасад и функцию; или макрос на реквест приделать. Но, блин, не верю, что в ларе для этого свои велосипеды нужны.
>>2101578 Null object pattern, чтобы об нулл не спотыкаться. Алсо, вроде как пользователь оказался нужен только в шаблонах, поэтому расшарил переменную через View.
Подскажите, есть jquery скрипт, который должен вытаскивать $id из строки таблицы:
$(document).on('click', '.elem', function() { let id = $(this).attr('id'); $.post('index.php' , { elem_id: id } , function(data){ location.reload(); }) });
Сама строка таблицы: <tr id='{$id}' class='elem'>; $id точно не пуст. Таблица выводится в Index.php, скрипт подключён туда же.
Я не понимаю, как нужно принимать $_POST? Могу ли я его принимать в том же самом index.php вот так:?
if ($_POST) { $my_object= new MyObject($db); $my_object->id = $_POST['id']; $stmt = $my_object->запрашиваюСодержимоеДругойТаблицы(); include "другаяТаблица.php"; }
Где ошибка? Неправильно отправляется $_POST? Или он неправильно принимается? И почему чёртова перезагрузка срабатывает?
>>2101631 >чтобы об нулл не спотыкаться Для этого существуют проверки как в коде, так и в шаблонах. Если дёргать его через нулл-объект, то будут на выходе левые данные из этого нулл. Не надо тащить паттерны туда, где их не надо.
>>2101935 Блять, гений, спасибо за такое ценное замечание. Только вот post c id нихрена не приходит, и вообще, то что внутри if не срабатывает, даже если я там просто что-то вывожу с подставленным id.
>>2102053 В зависимости от способа объявления скрипта, возможно, у тебя в $this не элемент, а всё окно целиком -- проверь. В таком случае лучше передавать в функцию event.target.
> Могу ли я его принимать в том же самом index.php вот так:? Да
Почему ты не отлаживаешь сам? добавь отладку с ответом от скрипта, вместо перезагрузки страницы.
Зачем понадобилось делать такую ебанутую навигацию через $_POST-параметры вместо $_GET? При всех очевидных минусах, какие плюсы?
>>2100104 - во-вторых, в реальных задачах гораздо больше "фич" и больше объем кода. В учебной задаче ты делаешь сайт из 3 страниц с 5 элементам (кнопки, ссылки, таблицы) и на каждой. В реальной задаче будет сайт из 300 страниц с 5000 элементами.
Можно, пожалуйста, пример такого реального проекта. 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц же? Что-то не могу себе представить ни один сайт с такой вариативностью.
>>2102116 >Можно, пожалуйста, пример такого реального проекта. 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц же? Что-то не могу себе представить ни один сайт с такой вариативностью. Например у меня сейчас 130 файлов шаблонов и это только в ядре, еще больше в модулях и либах лежит.
Тот анон привел гипертрофированный пример. Если обобщить, то на учебном проекте у тебя условно 5к строк кода. На рабочем будет 100к-500к, а может и больше (больше я сам не встречал, на текущем 500к с копейками). Соответственно большая часть проблем будет с тем, как справиться с разросшейся кодовой базой
Изучать удобнее и лучше именно в консоли, потому что там ты делаешь действия по одному. Сначала add, потом commit. Нет никаких лишних прослоек или абстракций.
Новичка может привлечь GUI, так как он ошибочно думает, что так как перед нами кнопки, то ничего учить не надо и думать не требуется - просто нажимай кнопки и все само заработает. Только вот этого не будет. Наоборот, интерфейс с большим количеством кнопок и опций собьет новичка с толку.
Более того, GUI обычно рассчитаны не на новичков, а именно на тех, кто уже знает гит (и изучил его, например, с помощью консоли). Ты, наверно, просто не способен поставить себя на место новичка и понять его образ мышления.
> И ты так и не сказал - почему в одном случает нужно пользоваться только командами, но в определённых случаях ты лезешь в интерфейс? У тебя логика с двойным дном.
Читай внимательнее. Третий раз приходится писать одно и то же. Во-первых, я написал, что консоль лучше годится при изучении гита, а не в любой ситуации. Во-вторых, некоторые действия удобнее делать в консоли, а некоторые сторонними программами. Что тут непонятного. Мне удобнее коммитить в консоли, а конфликты разрешать сторонней программой.
> который считает, что копипастить код нельзя
Тут ты пишешь чушь. Конечно, это плохая идея, копипастить код, так как потом тебе придется делать правки в нескольких местах. И ты бессмысленно увеличиваешь объем кода.
По моему, это плохая идея. Так как не будут работать проверки вроде if ($this->user) ...
Обычно для авторизованного пользователя и анонимного показывается разный интерфейс и потому нужды в null object нету. Ну например, авторизованному пользователю ты показываешь "Здравствуйте, Иван", а гостю - "Войти на сайт".
При клике в this будет не tr, а элеимент, на который кликнули, наверно в этом дело?
Также, у тебя плохо сделана отправка аякс-запросов. Нет индикации, что выполняется аякс-запрос, и нет обработки ошибок. У тебя при ошибке на странице ничего не меняется и вообще непонятно, что произошла ошибка.
> Неправильно отправляется $_POST? Или он неправильно принимается?
Открой инструменты разработчика в браузере на вкладке Network, и посмотри, какой запрос отправляется.
Также, у тебя плохой PHP код. Ты как-то странно передаешь id через свойства объекта. Надо передавать его явно в метод:
$object->findData($id);
Зачем ты придумал какое-то свое вывернутое ООП? Лучше на функциях писать код, чем в таком стиле.
> 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц
Да. Такое количество страниц легко набирается: личные кабинеты, админки с кучей разделов, лендинги, промо-страницы. Вот представь админку блога. Только для таблицы постов нужно несколько страниц: список постов, редактирование поста, статистика просмотров поста. А таблиц может быть сотня.
>>2102359 >потому что там ты делаешь действия по одному. Сначала add, потом commit Мы точно про интерфейс говорим? Ну, там, где вместо набора буковок просто нужную кнопку выбрать и получить тот же результат.
>Новичка может привлечь GUI, так как он ошибочно думает, что так как перед нами кнопки, то ничего учить не надо и думать не требуется - просто нажимай кнопки и все само заработает Вот этот никак кроме бреда не назовёшь. На чём основано твоё утверждение, что при наличии кнопок человек даже не попытается узнать что же эти кнопки значат?
>Более того, GUI обычно рассчитаны не на новичков, а именно на тех, кто уже знает гит (и изучил его, например, с помощью консоли) Более того IDE обычно рассчитаны не на новичков, а именно на тех, кто уже знает язык(и изучил его, например, с помощью блокнота) Так что ли?
>Конечно, это плохая идея, копипастить код, так как потом тебе придется делать правки в нескольких местах >ты бессмысленно увеличиваешь объем кода. Ясно - это троллинг такой. Я не поверю, что кто-то до сих пор переписывает код вместо того, чтобы скопировать нужный кусок и подправить под конкретную задачу.
>>2102395 >Я не поверю, что кто-то до сих пор переписывает код вместо того, чтобы скопировать нужный кусок и подправить под конкретную задачу. Так ты любой проект похоронишь, постепенно увеличивая число багов и кол-во времени на доработки. А кодовая база будет расти как на дрожжах
>>2102484 Джун, иди и посмотри любую библиотеку на гитхабе - там в документации специально примеры для копипасты существуют. И больше не рассказывай тут про баги и время доработки - смешно выглядишь.
>>2102519 Анон выше говорит про копипаст уже существующего твоего кода, и подпиливания под новое требование, а ты про копипаст пяти строчек из примеров разных либ, это вообще разные случаи
>>2102528 >Анон выше говорит про копипаст уже существующего твоего кода Давай ты не будешь за меня выдумывать что я там говорил?
Копипаст кода из документации или когда кто-то решил схожую проблему это нормальное явление. Требовать чтобы код переписывали вручную - дурость. Как и рекомендация прописывать команды гита вручную - к обучению самому гиту и его подводных камней это имеет самое отдалённое отношение.
>>2102542 >Требовать чтобы код переписывали вручную - дурость Про это никто не говорил. Есть у тебя в методе кусок кода, который хочешь заюзать в другом месте. Копипаста в этом случае - взять этот кусок кода и вставить куда надо. Не копипаста - вынести этот кусок кода в отдельный метод, добавить в исходный и туда, куда тебе надо.
Это в простейшем случае. Бывает такое, что копипасту приходится терпеть, т.к. не заложили достаточно времени на проработку решения. Соответственно техдолг растет
>>2102561 >вынести этот кусок кода в отдельный метод, добавить в исходный и туда, куда тебе надо Не всегда целесообразно выносить кусок кода в метод или библиотеку. Только бойлерплента может выйти в разы больше.
Ты не совсем понимаешь что такое копипаста в контексте разработки. Одно дело, когда 10 строк у тебя на проекте то тут, то там мелькают - тогда надо убирать куда-то, и другое, когда время от времени на разных проектах эти строки мелькают - для такого библиотеку городить это уже показатель скуки и большого количества свободного времени. И совсем уже третье это когда у тебя декларативный язык - тот же HTML например. Ну убери давай Бутстрап-компоненты в метод, чтоб без копипасты. Тут народ уже просто сниппеты юзает без задней мысли, что по-сути является аж целой автоматизацией копипасты.
Ебать вы токсичные, пиздец. Кстати, двух недель не прошло и меня выгнали. Сказали, что я недостаточно квалифицирован. Откуда я мог знать, что нужно знать git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery и прочие аббревиатуры, которые я даже не запомнил. Мало того ещё нужен макбук и уметь в линуксе работать. Я маки с линуксом в глаза никогда не видел. Вынесли мозги какими-то докерами, виртуализацией, вагрант... вы реально это всё знаете??? Только без пиздежа, пожалуйста.
>>2102851 Скажу по себе >git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery >докерами, виртуализацией, вагрант
git - мастхев, без него ты не сможешь ни проект себе скачать, ни обновить, ни изменения свои залить в рпеозиторий.
rest - там 5 методов всего и пара рекомендаций, можно пару статей прочесть, станет понятно, что за зверь
api (в контексте веба) - помимо рендера хтмл страничек бекенд может по апи общаться с другими бекендами, например ты шлешь запрос на сайт погоды, чтобы получить текущую температуру
ajax - способ сделать запрос из жс к твоему или внешнему бекенду и получить ответ, надо знать, там несколько методов всего (в нативном жс и в жиквери)
JavaScript, css, html - хотя бы основы надо знать, не везде есть фронты, да и нужны они редко, уметь сверстать кнопку или форму с нуля или из готовых блоков собрать, навесить на неё обработчик через жс.
babel - это необзяательно, на месте разберешься, какая там сборка жс
jquery - легаси проекты на нем плотно сидят, так что если попал на легаси, то пользуйся, дока у него подробная, любые вопросы легко гуглятся
докерами, виртуализацией, вагрант - сейчас докер мастхев, удобный способ развернуть рабочее окружение одной командой, хотя бы простенький докер компоуз нужно уметь писать
>уметь в линуксе работать как правило сервера живут на линукс дистрибутиве. Поставь себе убунту и попользуйся месяцок. На работе обычно требуется подключиться по ssh на сервер и что-то там посмотреть, проверить, мб дамп бд забрать. Деплоем заниматься ты вряд ли будешь.
>вы реально это всё знаете??? Получается, что да, это те знания, которыми должен обладать джун, не супер глубоко, но справиться с помощью гугла и доки, если возникнет потребность.
Я из этого только бабелем не пользовался и вагрантом.
>>2102875 Меня на собесе спрашивали про знание языка, про алгоритмы, про разные хитрости навроде отличия print от echo, про базы данных. Обещали чистыми 30к. Взяли на должность младшего разработчика. Говорили про джуна бэкэнд.
В первый же день такая оказия вышла. Посадили за стол, а на нем только моники. Я коллег спрашиваю мол как работать то, а они ебала вытянули и гогочат что куропатки. Через пол часа какой-то ушатанный комп притащили, сказали, чтобы я со своим ноутом приходил. Блядь, у меня ноута нет. Показали confluence, jira. Там «тикеты». «Роудмап» показали, работают agile. Что блядь? чо к чему... Блядь, это пизда просто. Я даже не думал, что настолько выебут мозг.
Короче, два дня сидел читал код, все жти хтмл/цсс/джава скрипт... если с первыми двумя вроде как веатуре за неделю можно разобраться, то с джавой... ебанутый какой-то язык. По самому РНР я начал вникать на 3и сутки, тут менеджер он же старший разраб говорит, хули у меня в джире тикеты копятся, весь процесс им руиню. я столько новых слов узнал... открываю джиру, а там просто нескончаемый поток каких-то писем, хуй пойми что мне, а что не мне. Попросил коллег помочь как работать с этой системой. Они то суки походу и начали меня высиживать. Я за 1 день закрыл 3 заявки. Код оставил в комменте к тикету, коммент удетает в вики конфлюэнса. Мне говорят какого хуя не через гит отправляю правки.
Я ЕБУ БЛЯДЬ КАК ЭТОЙ ЗАЛУПОЙ ЕБАНОЙ ПОЛЬЗОВАТЬСЯ??? Я пришел код писать, баги править. Ну короче вчера утром меня рассчитали. Грустно до соплей. Но объём знаний ебанись какой. Я вот даже и не знаю чо дальше делать.
>>2102889 Нихуя. Как ты этим всем владеешь?! Я вообще не понимаю ни хуя. Я на ютубе начал смотреть про виртуализацию и тупо поплыл. Скачал virtualboz , установил в него линукс минт, пишут, что он для новичков самое то. А чо с ним дальше делать я хз. Как там программы ставить? Я качаю дистрибутивы с оф сайтов mysql/php — пишет не может установить, предлагает какую-то программу поставить для запуска win32 приложений. Я поставил эту программу, вроде установил. Ярдыков для запуска нет, структура диска не такая как в винде, как там ориентироваться в душе не ебу.
Про гит почитал, но так и не понял про ветки и прочее. Рили надо знать? Неужели он так строго нужен? Почему в виде комментария на той джире не принимают?
>>2102851 Ну да, все это надо знать. А в некоторых конторах надо еще и начальнику в жопу по понедельникам и пятницам давать. На хорошем проекте (там битрикса не будет) постараются разделить бек и фронт: тогда бек точно сможет забыть про babel, но jquery, возможно, все-равно понадобится. А вот наезды на девопс менее оправданы: от виртуалок, лиуксов и докеров никуда не деться. Гит, рест, апи, Аякс Великий - это база, без этого совсем никуда. Последние три учатся меньше чем за день. >>2102935 >Попросил коллег За редким исключением, программистишки - тупые токсики, по-сути, нихуя не знающие и не умеющие: Вероника все по-фактам разъяснила в соответствующем видео. Мимовыкатился после двух лет.
>>2102942 Похоже, кодинг - не твоё. Тут нужно уметь копнуть глубоко, разобраться в проблеме, если не шаришь
>Как ты этим всем владеешь?! Постепенно осваивал инструменты один за другим, практиковался
>установил в него линукс минт, пишут, что он для новичков самое то. А чо с ним дальше делать я хз Попробуй поднять на нем веб сервер nginx+php-fpm, настроить в nginx чтобы на твой сайт вел локалхост. Гайдов как это сделать тонны.
>Как там программы ставить? Троллишь? Погугли
>Я качаю дистрибутивы с оф сайтов mysql/php — пишет не может установить, предлагает какую-то программу поставить для запуска win32 приложений Ну ты совсем необучаемый. Не думал, что на лине софт по другому работает?
>Ярдыков для запуска нет, структура диска не такая как в винде, как там ориентироваться в душе не ебу. На ютубе полно видосов про ввод в линукс системы, если сам не можешь разобраться
>Про гит почитал, но так и не понял про ветки и прочее Не читать надо, а пробовать. Создай гит репу, добавь пару файлов, закомить, запуш в гитхаб, создай ветку и её запуш
>Рили надо знать? Неужели он так строго нужен? Почему в виде комментария на той джире не принимают? Тебя нанимают не для того, чтобы ходить за тобой по джире и код собирать. Сам должен уметь подготовить пулл реквест, чтобый старший разраб только кнопку нажал и влил твой говнокод
Если мне надо сделать несколько разных селектов из бд, стоит ли все функции PDO для такого запроса prepare, execute, fetchAll обернуть в отдельную функцию и вызывать уже её, вместо того, чтобы каждый раз прописывать все это в коде?
>>2102851 >Откуда я мог знать, что нужно знать git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery и прочие аббревиатуры Интересно чем ты 7 лет занимался. Хелловорлды писал что ли?
Допустим я сделал свой сайт и хочу добавить его в портфолио, подскажите пожалуйста, как мне это сделать? Не буду же я деньги платить чтобы это говно на хостинг поставить.
>>2103009 Читал книги по РНР, по алгоритмам очень много времени заняло, в районе 5 лет, потому что пришлось вспомнить алгебру, со всеми этими функциями и прочим. Писал конечно же код, только вместо гита я использовал структуру папок - 0.01, 0.02 и т.д. Как по мне это удобнее, чем гит.
Так как я РНР бекэнд разработчик, то писал много вещей навроде запрос к БД, а выход в чистом виде. То есть без формирования визуального отображения. Это работа фронт эндов. Поэтому не учил хтмл и цсс с джавой.
Хелло ворлды конечно тоже писал, но не как вордпресс. Я так не напишу. Ядро движка мне пока что не под силу, да и думаю в одиночку такое никто не пишет.
>>2102971 Да что там код собирать-то? Из джиры комментарий в конфлюэнс улетает, тикет закрыт - приходит уведомление, открыл его, увидел, что комментарий есть, оттуда скопировал код и вставил в проект, чего сложного то? Хули тогда старший прораб делать будет?
Посмотрел несколько видео по линуксу, да, я явно дал маху с установкой виндовых программ, ну а откуда я зналс то что линукс не винда?
Я поставил арасне2 и mysql, на винде этой же связкой пользовался, очень удобный сервер, nginx не понимаю как настраивать.
>>2103067 >Читал книги по РНР, по алгоритмам очень много времени заняло, в районе 5 лет Сдаётся мне, что ты балду пинал по большей части.
>Как по мне это удобнее, чем гит. По тебе удобнее может быть даже срать в штаны, но не факт, что тебя поймут там, куда ты работать придёшь.
>Это работа фронт эндов. Поэтому не учил хтмл и цсс с джавой. Это значит, что ты ни одного даже учебного проекта не написал за эти 7 лет. Я не понимаю как тебя взяли на работу.
>Ядро движка мне пока что не под силу, да и думаю в одиночку такое никто не пишет. Тут каждый начинающий вкатывальщик, написавший тех же студентов из ОПпоста делает свой примитивный движок. Просто надо не книжки читать, а делать.
>>2103072 >Да что там код собирать-то? Из джиры комментарий в конфлюэнс улетает, тикет закрыт - приходит уведомление, открыл его, увидел, что комментарий есть, оттуда скопировал код и вставил в проект, чего сложного то? Старшему делать больше нехуй, как за стажером код подбирать. Никто код руками не копирует, всё делается через гит.
>Хули тогда старший прораб делать будет? Ему есть чем заняться, поверь. То таски нарезать, то тз поревьюить, то по митингам походить. Старшие разрабы код почти не пишут, больше с бизнесом общаются
>nginx не понимаю как настраивать На винде его не поставишь. Ставь линь, либо виртуалку (всл или докер)
>>2103129 Слог у меня такой какой есть. В чём жирнота? Я учился на backend php developer, а требуется куча технологий знать. Попробую за пол года освоить виртуалки, линукс, и другое. Посмотрим, что выйдет.
>>2103082 Что значит балду пинал? Я нигде не писал, что 24/7 занимался. Это тупо нереально. Да и вообще более 2-3 часов в день нереально учиться. Да и возраст у меня уже не малый, я успел женится, двух детишек жена подарила, правда и развестись успели, но то моя вина, долго не мог вкатиться.
На хх.ру вакансию увидел и отослал резюме. Так и приняли. Возможно, на вью думали, что это примитивные вопросы про гит, линукс и прочее и не стали задавать.
Касаемо проектов, в шапке я видел, но мне они показаилсь скучными и я решил не делать их. Мне понравилось работать с растровой графикой. Особенно когда вводишь текст в форме, а тебе генерируется изображение с введеным текстом. Рисовать неудобно, но прикольно. Свой аналог капчи придумал, почти как на дваче. ~70% задач решил по программированию из сборника задач. На код варсе несколько задач решил, литкод пробовал. Всё не упомнишь, что писал. Думаешь стоит порешать задачи из оп поста?
>>2103152 Вот все сидел читал, а тут промолчать не могу.
У меня друг хороший очень долго работал не в IT-сфере. А потом, когда захотел, решил переучиться - я с этим ему помогал. Вот сейчас, спустя полгода примерно, он устроился на свою первую работу в веб. Да, тупит. Да, знает меньше этой университетской студентоты - но он учится, справляется, меняет стиль мышления и главное, он работает.
Я согласен с ребятами - скорее всего, прога сейчас просто не твое.
>>2103152 >Касаемо проектов, в шапке я видел, но мне они показаилсь скучными и я решил не делать их Думаешь на работе тебе, недостажеру, дадут интересные и уникальные задачи? Задачи из шапки можно как минимум сделать с нуля, выбрать под это фреймворк, бд и остальной стек. Редко где тебе дадут начинать новый проект и выбирать технологии. Придешь на работу, а там "тут у нас древний проект на yii1, поднимай у себя локально, через час кину тебе задач на багфикс"
>>2103152 >Мне понравилось работать с растровой графикой. Особенно когда вводишь текст в форме, а тебе генерируется изображение с введеным текстом Тогда ты попал не в тот стек. Php - бекенд язык, с графикой на нем практически не работают. Максимум пожмут загружаеме картинки, чтобы грузились быстрее.
>>2102103 > возможно, у тебя в $this не элемент, а всё окно целиком -- проверь. >>2102367 >При клике в this будет не tr, а элемент, на который кликнули, наверно в этом дело? В .on(events, [selector], [data], handler) я в качестве селектора передаю .elem, соответственно фильтроваться будет только по этим элементам и >обработчик будет срабатывать только в том случае, если событие «поднялось» от одного из отфильтрованных элементов. А через let id = $(this).attr('id'); я получаю id из атрибута элемента. С чего там вообще должен быть какой-то другой элемент? Но дело не в содержимом, так POST вообще не приходил. Немного поменял, теперь id получаю так: $('.elem').on('click', function(e){ var id = $(this).attr('id'); отправляю } И теперь POST приходит, вместе с id, но в index.php ни if (!empty($_POST)), ни if (isset($_POST['id'])), ни if (!empty($_POST['id'])) не видит содержимого, хотя в network в form data приходит id, почему вообще так может происходить?
Ребятушки всем привет, может кто нибудь подробно объяснить в чем сакральный смысл связки nginx + apache. На многих хостингах и сайтах встречаю такую связку где nginx отдает статичные файлы, а обработка пыхи идет уже через апач. Но вот понять в чем смысл такой связки и в чем профиты не могу.
>>2103470 >И теперь POST приходит, вместе с id, но в index.php ни if (!empty($_POST)), ни if (isset($_POST['id'])), ни if (!empty($_POST['id'])) не видит содержимого, хотя в network в form data приходит id, почему вообще так может происходить?
Так может произойти, если Content-type запроса не application/x-www-form-urlencoded или multipart/form-data. Если у тебя там application/json, то нужно совершенно по другому данные вытягивать, обрати на это внимание
>>2103672 Так network также говорит, что это Content-Type: application/x-www-form-urlencoded; charset=UTF-8 При этом if($_SERVER["REQUEST_METHOD"] == "POST") тоже не видит post...
>>2103564 Давно читал что апащ быстрее обрабатывает пхп чем нжайнкс и поэтому имеет смысл их в связке использовать. На сколько это верно было тогда и на сколько верно сейчас я хз.
Почему у меня в командной строке когда я прописываю php artisan serve, я теряю над ней контроль и не могу больше писать. А у тех по чьим видосам я начал учить лару, у них ничего такого не происходит.
Как из бд pg вывести boolean? Вывожу: CASE WHEN accepted=true THEN 'Да' WHEN accepted=false THEN 'Нет' END и получаю Undefined variable. C 1/0 то же самое.
Помогите раку. Перепробовал уже хуй знает сколько способов, и честно сказать в смятении.
Суть простая: я передаю данные с формы через fetch в файл .php. При print_r (или var_dump, неважно) $_POST показывает пустой массив. НО - на страницу с JS приходят обработанные данные в виде массива. Точно так же если я через .php запихну приходящие данные в текстовый файл, они там также появятся.
То есть данные приходят, но .php отказывается мне их выводить непосредственно У СЕБЯ. $_POST "типа" пустой, но он блять по факту не пустой как бы, раз данные приходят и уходят.
Где я туплю? Может быть, в .php и не получится выводить? Помогите плз.
>>2105527 В дополнение. Могу вывести данные в другой .php файл тоже. То есть получается, что .php файл, на который приходит запрос, является чисто обработчиком-посредником, или как?
>>2102851 > git, Это для всех разработчиков святая святых, но достаточно знать базовые команды > rest, api, Я не уверен что битриксоидам это требуется знать, я полгода с этим говном работал и там не использовалось. REST API это такия методолгия, больше подойдет для микросервисной архитектуры и бэка для мобилока и фронта на всяких реактах > ajax, 2,5 функции на жабаскрипте > JavaScript, css, html, Для веба нужно знать обязательно > babel, Тут особо знать не нужно, он нужен чтобы скомпилировать новый js в старый код чтобы его поняли все браузеры, обычно в вебпаке подключается > jquery В битриксопарашах используется повсюду, тебе лишь нужно знать ajax и суметь подключить библиотека с анимашками, слайдерами. > вы реально это всё знаете??? Да и намного больше чем это все
>>2105901 По сути это только официальная документация которая на пару лет отстает, но обычно в битриксгалеры берут всех с улицы кто может чуть-чуть по фронтенду и чуть-чуть в пхп. Скорее всего тебе через месяц другой придется сдавать первый экзамен https://academy.1c-bitrix.ru/certification/exams.php так что можешь сразу попробовать поделать эти задания. Бесплатно можешь 30 дней юзать локально, потом либо переустановить, либо расшифровать файлик include.php и там подшаманить и получить демку навсегда, в гугле есть все. Но прям с головой советую не окунаться в эту хуйню, а потихоньку дрочить лару и реакт или ву.жс иначе есть риск остаться сантехником в мире программистов и всю жизнь ковыряться в унитазе. Я когда шел туда знал что битрикс это говно, но чтобы это было настолько сильным говном я не ожидал. И большинство задач будут в стиле передвинь этот блок, добавь новое в админке и выводи оттуда текст и прочая хуйня усложненная тем что твои коллеги до этого делали наотъебись.
>>2062494 (OP) Какой SAPI лучший по производительности? Не гуглится сравнение с ReactPHP/Rachet и другими вариантами работы с постоянными соединениями. Почитал о внутреннем устройстве PHP, но так и не понял разницу в способах запуска PHP-FPM с другими вариантами. Не понимаю как PHP обрабатывает много запросов. Из за этого не могу понять как его лучше использовать.
> Суть простая: я передаю данные с формы через fetch в файл .php. При print_r (или var_dump, неважно) $_POST показывает пустой массив.
А как ты просматриваешь результат? В инструментах разработчика? Если нет, то конечно оно работать не будет.
Скорее всего ты либо как-то не так вызываешь скрипт. Либо просто опечатался, например, написал $POST вместо $_POST.
Вообще, если ты хочешь дампить данные аякс-запросов, то удобно выводить их в консоль, если ты используешь встроенный в PHP веб-сервер (не Апач или php-fpm). Для этого можно написать просто:
Чтобы объективно сравнивать, надо либо делать бенчмарки, либо найти готовые.
Если ты не хочешь писать свой сервер, то стоит использовать php-fpm и FastCGI - он рассчитан на продакшен-использование. Если ты готов писать свой сервер, то ты можешь написать его, но надо будет запустить много процессов, чтобы они могли загрузить все ядра процессора, и кто-то (nginx?) должен распределять приходящие запросы между ними.
Без запуска множества процессов у тебя будет лишь один процесс, нагружающий лишь одно ядро. Ну и нужен будет менеджер, который будет отслеживать упавшие процессы, перезапускать их, собирать логи и в общем делать то, чем занимается php-fpm.
php-fpm работает так: он запускает определенное количество процессов-работников (оптимальное количество настраивается в конфиге вручную). Затем он принимает от nginx запросы по протоколу FastCGI и распределяет их по работникам. Работников должно быть больше, чем ядер процессора, раза в полтора-два-тьри. Один работник может за свою жизнь обработать много запросов, но по очереди, по одному за раз. Работник однопоточный и использует максимум одно ядро. Поэтому их должно быть много. Но не слишком - иначе ресурсы будут уходить на переключения между ними.
Это принцип работы командной строки - пока выполняется одна команда, нельзя набирать или выполнять следующую. Более того, команда php artisan serve выводит логи и они бы мешали тебе выполнять другие команды.
Если ты хочешь что-то делать, просто открой еще одну консоль.
Если ты хочешь прервать работу сервера, то используй Ctrl + C.
Ты не прав. Для разработки как раз удобен встроенный в PHP сервер тем, что не надо ничего конфигурировать, что в фоне не крутится никаких подвисших скриптов и тд.
У тебя вопрос из серии "продайте мне эту ручку". Мы не менеджеры по продажам, чтобы на такие вопросы отвечать, но раз ты хочешь, отвечу.
В Питоне есть Доктрина? Абстрактные классы и интерфейсы? Проверка типов в рантайме? Да и он мягко говоря небыстрый. Хотя я для своих дел иногда использую: jupyter notebook, numpy, sympy и другие вещи.
Потому что Апач не очень эффективно работает с медленными клиентами.
У Апача запущено N процессор-работников, которые обрабатывают запросы. Работник обрабатывает одновременно только один запрос. Если запрос отправил пользователь с медленным интернетом, то работник быстро выполняет PHP-скрипт (или читает запрошенный файл), но долго отдает ответ (так как канал медленный). И все время пока ответ отдается, работник не может заниматься ничем другим. То есть, получается, работник меньшую часть времени занимается полезной работой, а большую часть времени просто занимается ожиданием передачи ответа.
Если таких проблемных пользователей много, то все работники могут оказаться занятыми отдачей ответов и сервер начнет тормозить, хотя процессор у него совсем не нагружен.
Нгинкс решает эту проблему - он очень быстро принимает ответ от Апача и потом не спеша отдает пользователю. При этом нгинкс параллельно с отдачей ответа обслуживает и других пользователей.
>>2106800 >Если ты готов писать свой сервер, то ты можешь написать его, но надо будет запустить много процессов, чтобы они могли загрузить все ядра процессора Зачем много процессов? Конкурентный код в одном процессе, даже в одном потоке может исполняться на нескольких ядрах.
>Без запуска множества процессов у тебя будет лишь один процесс, нагружающий лишь одно ядро. Можешь объяснить почему? Если код состоит из 100 чистых функций, то ОС же может конкурентно исполнять этот код на нескольких ядрах.
>php-fpm Все таки он не так уж хорош по производительности и ресурсоемкости.
>>2105021 >Почему у меня в командной строке когда я прописываю php artisan serve, я теряю над ней контроль и не могу больше писать. Потому что ты запустил задачу в процессе ОС, он заблокирован для дальнейшего введения инструкций пока задача не выполнится.
> Конкурентный код в одном процессе, даже в одном потоке может исполняться на нескольких ядрах
Нет. Ты не понимаешь, что такое процесс и поток и как работает процессор.
Программа - это последовательность команд. Она может выглядеть, например, так (скобка показывает текущую выполняемую команду. В процессоре есть специальный регистр, который хранит номер текущей выполняемой команды):
> 1) a = 1 2) b = a + 10 3) c = b x 2 ....
Процессор исполняет команды в программе строго по очереди. И программа рассчитана на то, что ее будут выполнять последовательно. Например, у нас в программе команда 2 использует результат команды 1 (a). Соответственно, нельзя выполнить команду 2 до выполнения команды 1 или параллельно с ней.
Такое последовательное выполнение команд еще называют "поток исполнения".
Если вдруг второе ядро попыталось бы выполнить команду 2 параллельно с тем, как первое ядро выполняет команду 1, то оно бы получило неправильный результат, так как значение a пока неизвестно.
То есть, и процессор, и программы рассчитаны именно на последовательное выполнение команд. При этом неважно, какие функции - чистые или нет - ты используешь. Они будут выполняться последовательно одним ядром.
В теории, если у тебя есть 2 чистых функции (или команды), которые не зависят друг от друга, то можно было бы написать такую программу:
1) a = b + 2 + c x 3 2) выполнить на втором ядре: d = b + 5 + с 3) e = a + d
В этой программе первое ядро могло бы выполнять команду 1, а второе - команду 2. Но это бы потребовало так называемое "переключение контекста": второе ядро должно переключиться с текущей исполняемой программы на нашу, выполнить одну команду 2 и переключиться обратно (так как оно больше не нужно). Переключения контекста относительно дорогие и занимают по времени больше, чем выполнение команды 2. То есть, мы бы больше потеряли, чем выиграли. Потому в процессорах и в ОС нет поддержки такого режима работы. Нельзя "позвать" второе ядро на помощь.
Хотя, идея использовать чистые функции для распараллеливания интересная. Возможно, когда-нибудь сделают процессор с такой возможностью.
На текущих процессорах, для того, чтобы задействовать второе ядро, ты должен либо создать новый процесс, либо новый поток исполнения. Запустить новый процесс - это по сути, запустить вторую независимую копию программы. У нее будет своя область памяти, свои переменные и она никак не будет связана с первой. Ее будет выполнять второе ядро.
Создание потока - это запуск второй копии программы в текущем процессе. То есть, мы говорим ОС "создай новый поток и пусть он выполняет команды, начиная с команды X". Второй поток будет видеть те же переменные, что и первый.
Минус использования потоков в том, что с ними сложнее программировать: так как память общая, один поток может изменить какие-нибудь данные, с которыми в это время работает второй поток, и получится неправильный результат.
И в случае с потоками, и в случае с процессами, нам нужна еще программа-менеджер, которая будет ими управлять, создавать их при необходимости, распределять запросы между ними.
Таким образом, в языках вроде PHP, питон, JS, если ты вызываешь несколько чистых функций подряд:
$a = func1(); $b = func2();
Они выполняются последовательно. В языке Го есть возможность запустить выполнение нескольких функций (неважно, чистых или нет) параллельно:
go func1(); go func2(); ...
здесь функции func1 и func2 запустятся как бы "в фоне", и будут исполняться параллельно с продолжением работы основной программы. Но это работает за счет использования потоков. В программе Го запущено несколько потоков, которые ждут задач и когда мы делаем go func1, мы посылаем такому потоку команду "выполни функцию func1" и он начинает ее выполнять.
То есть, программы на Го многопоточные и потому умеют параллельно выполнять код. В однопоточной программе задействовать более одно ядра и параллельно выполнять несколько команд на разных ядрах невозможно.
> Если код состоит из 100 чистых функций, то ОС же может конкурентно исполнять этот код на нескольких ядрах.
В теории может. На практике не может, так как переключения контекста дорогие. Если ты хочешь исполнять функции параллельно, ты должен создать новый поток и поручить ему выполнять эту функцию. Создание потока тоже не бесплатная операция, потому обычно их создают не когда они понадобятся, а заранее (это называется thread pool - пул потоков).
>>php-fpm > Все таки он не так уж хорош по производительности и ресурсоемкости.
>>2107156 >Процессор исполняет команды в программе строго по очереди. И программа рассчитана на то, что ее будут выполнять последовательно. Например, у нас в программе команда 2 использует результат команды 1 (a). Соответственно, нельзя выполнить команду 2 до выполнения команды 1 или параллельно с ней. Это не так. Ты залез в процессор, но забыл, что между кодом и процессором есть ОС. Планировщик ОС может переключать исполнение на другие ядра. Не силен в ассемблере, но знаю точно, что его код можно выполнять конкурентно и даже параллельно. Это аппаратные конкурентность и параллелизм. Есть и программные конкурентность и параллелизм, реализуемые компилятором, интерпретатором или виртуальной машиной.
>здесь функции func1 и func2 запустятся как бы "в фоне", и будут исполняться параллельно с продолжением работы основной программы Не параллельно, а конкурентно. Параллельность это когда одна задача исполняется несколькими процессорами или ядрами одновременно.
>То есть, программы на Го многопоточные и потому умеют параллельно выполнять код. Многопоточность не равно параллельность.
>Пруфов и бенчмарков, конечно, не будет. Погугли. RoadRunner и ReactPHP могут обработать в несколько раз больше запросов в секунду.
> Планировщик ОС может переключать исполнение на другие ядра.
Может, но это ничего не меняет. Допустим, код 2 периода времени выполняется на ядре 1, а потом 2 периода времени выполняется на ядре 2. Что от этого поменяется? Производительность от этого не повысится, а даже чуть понизится (из-за расходов на переключение контекста. Они происходят, когда ядро переключается с выполнения одной программы на другую).
> Не силен в ассемблере, но знаю точно, что его код можно выполнять конкурентно и даже параллельно.
Ну так давай я тебе расскажу про ассемблер. В процессоре есть счетчик команд (в архитектуре x86_64 он называется rip), который указывает номер текущей команды. Каждый такт процессор берет команду по адресу rip, исполняет ее и увеличивает rip (условно) на единицу. Как ты в такой системе получишь параллельность? Она строго последовательная.
Естественно, если у тебя два ядра, то у каждого из них свой регистр rip и каждое выполняет свою последовательность команд независимо от другого. Но чтобы задействовать два ядра для выполнения одной и той же программы, ты должен создать второй поток. Тогда одно ядро будет выполнять одну последовательность команд из программы, а другое - другую. Однопоточная программа будет выполняться только на одном ядре.
Если ты считаешь, что я ошибаюсь, дай ссылку, утверждающую обратное.
> Это аппаратные конкурентность и параллелизм.
Это ты что-то не так понял. В процессоре есть некоторый "параллелизм", когда он может выполнить, например, две соседние команды одновременно, если они не зависят друг от друга и если исполнительные устройства свободны. Но ты этим не можешь управлять и это не позволяет выполнять параллельно две произвольные функции. Это можно не рассматривать.
> Есть и программные конкурентность и параллелизм, реализуемые компилятором, интерпретатором или виртуальной машиной.
Речь изначально шла о том, что однопоточная программа не может использовать более одного ядра. Компилятор или виртуальная машина здесь ничего не меняют.
По моему, ты тут путаешь понятия "конкуррентное выполнение" и "использование нескольких ядер". В компьютере с одним ядром операционная система может периодически прерывать выполнение одной программы и выполнять другую. Таким образом реализуется многозадачность. Компилятор может скомпилировать программу так, что в ней по очереди будут выполняться разные участки, имитируя параллельное выполнение. Но это все никак не решает исходную задачу - использовать более одного ядра однопоточной программой.
> Не параллельно, а конкурентно. Параллельность это когда одна задача исполняется несколькими процессорами или ядрами одновременно.
В Го эти функции запускаются в отдельных потоках (Го многопоточный внутри) и будут исполняться параллельно при наличии свободных ядер.
> Погугли. RoadRunner и ReactPHP могут обработать в несколько раз больше запросов в секунду.
Ты не дал ссылку на бенчмарк, значит, я могу предположить, что это какой-нибудь синтетический бенчмарк. Например, уровня hello world, который не имитирует реальное приложение (работающее с базой данных, хранилищами итд.) а просто проверяет, сколько раз в секунду он может отдать строку hello world. Такой бенчмарк имеет мало ценности для оценки производительности реальных приложений.
Плюс, у этих библиотек есть свои проблемы и подводные камни.
Также, я вижу, что ты даже не пытался разобраться в том, как работает RoadRunner, хотя в документации есть картинка: https://roadrunner.dev/docs/intro-about
RoadRunner запускает множество процессов PHP и этим добивается использования множества ядер, и сам он многопоточный. А ты утверждаешь, что однопоточная программа, написанная на каких-то чистых функциях, будет задействовать несколько ядер.
Приложение на ReactPHP также нужно запускать в виде нескольких процессов, чтобы задействовать все ядра.
И попробуй просто вчитаться внимательнее в слова. Поток - это (условно) последовательность команд, которые выполняет процессор. Если программа однопоточная, значит в ней один поток и в любой момент времени выполняется одна последовательность команд. И значит, она никак не может использовать два ядра.
Увидел такое в коде класса, что оно делает? Чет не гуглится. Видимо тут идет обращение к полю user, который является объектом, и в нем считывается поле created_at, но это не точно. Причем в самом классе поля user нет, как нет его в трейтах и родительских классах и интерфейсах. Проект написан на Симфони.
>>2107413 >$this->{'user:created_at'} Вот этот кусок это чтение или запись в поле user:created_at, но это невалидное имя если обращаться напрямую, его нельзя например вызвать как $this->user:created_at, поэтому приходится ебаться с подстановкой через строку, без кода непонятно нахуя там себе жизнь усложнять, но очевидно это было сделано не прям просто так
>>2107354 >В процессоре есть некоторый "параллелизм", когда он может выполнить, например, две соседние команды одновременно, если они не зависят друг от друга и если исполнительные устройства свободны. Но ты этим не можешь управлять и это не позволяет выполнять параллельно две произвольные функции. Это можно не рассматривать. Суперскалярность, SIMD, короче параллелизм на уровне команд. Погуглив и почитав разные статьи и отрывки из книг на английском, пришел к выводу, что есть много возможностей для конкурентного и параллельного исполнения. Но это сложная тема, в ней легко запутаться. Процессоры развиваются, появляются новые аппаратные и программные фичи, также и в ОС появляются новые функции. Только вот кажется, что большая часть языков программирования это не используют.
>В Го эти функции запускаются в отдельных потоках (Го многопоточный внутри) и будут исполняться параллельно при наличии свободных ядер. Разве горутина создает поток ОС?
>>2107358 >И попробуй просто вчитаться внимательнее в слова. Поток - это (условно) последовательность команд, которые выполняет процессор. Если программа однопоточная, значит в ней один поток и в любой момент времени выполняется одна последовательность команд. И значит, она никак не может использовать два ядра. Что ты понимаешь под потоком? Непонятно тогда что есть concurrency и асинхронность.
>>2107354 >>2107358 Предположим, что один поток может выполняться только на одном ядре. Как тогда эффективно исполнять код чтобы не было блокировок и чтобы ядро было утилизировано на 100%? Node.js из коробки исполняется в одном потоке. В нем появились легкие потоки, но сейчас не о них. Node.js является concurrency системой? Да. Асинхронный? Да. Вопрос как? Как они это делают без потоков? Почему в пхп нет?
В некоторых языках реализуют concurrency and parallelism как библиотеку языка и довольно успешно. Например в Guile. Внимание вопрос, почему в PHP такой тухляк? Почему в документации толком не описано как PHP код исполняется на машине? Почему не описано как множество запросов обрабатываются одновременно? Почему в книгах этого нет? Почему разработчики об этом не говорят? Почему нет попыток что то написать для исправления ситуации? Вот я загуглил про Go и есть доскональные объяснения как это работает в нем. Как мне понять как это работает в PHP?
Параллеллизм на уровне команд - это возможность выполнять несколько команд одновременно, если они не зависят друг от друга и если есть свободные исполнительные устройства.
Исполнительное устройство - это штука внутри процессора, которая умеет выполнять какую-то операцию, например: сложение, умножение, битовые операции итд.
Например, у нас есть программа:
1) c = a + b 2) d = e + f
В этой программе команды не зависят друг от друга (команда 2 не использует результат команды 1).
Классический процессор выполнит их по очереди, затратив два такта. Современный процессор x86_64, если в нем есть два суммирующих устройства, может выполнить команды параллельно за один такт - каждую команду на своем устройстве. Но этот паралеллизм неявный, то есть ты не можешь им управлять. Ты просто пишешь программу последовательно, а процессор по возможности (анализируя зависимости команд друг от друга) выполняет команды параллельно, не нарушая последовательную логику программы. То есть, результат программы гарантированно такой же, как если бы она выполнялась последовательно.
В отечественном процессоре Эльбрус используется явный паралеллизм - ты в программе прямо пишешь группы инструкций, которые будут выполняться параллельно, и распределяешь, на каком исполнительном устройстве будет выполняться каждая из подкоманд. То есть для Эльбруса программа выглядит как-то так:
1) c = a + b, d = e + f
> SIMD
SIMD это просто выполнение одинаковой операции над несколькими парами чисел. Ну например, попарное сложение 4 пар чисел с получением 4 результатов. Если у тебя есть два массива по 1000 чисел и тебе надо их сложить, то использование SIMD здорово ускорит процесс.
Все это не меняет того, что однопоточная программа использует одно ядро процессора.
> Только вот кажется, что большая часть языков программирования это не используют.
Используют, но не все. Например, в Питоне есть библиотека numpy для работы с массивами чисел, и она использует SIMD для ускорения своей работы.
> Разве горутина создает поток ОС?
Го при запуске (если не путаю) создает пул фоновых потоков. Эти потоки изначально просто ничего не делают и ждут команд. Когда встречается команда вроде
go func1()
то в очередь команд отправляется команда выполнить функцию func1, первый свободный поток берет ее и начинает выполнять. Там у Го целый планировщик потоков написан для этого. Например, когда горутина делает какой-то блокирующий вызов (например, ожидание данных из сети), то она добровольно отдает управление и планировщик может запустить в этом потоке следующую задачу.
>>2107719 >Классический процессор выполнит их по очереди, затратив два такта. Ты сказал?
>Ты просто пишешь программу последовательно По нормальному нужно писать не последовательный, а независимый от последовательности код. Посмотри как пишут на Lisp, можешь ли ты понять в какой последовательности будет исполняться его код? Последовательный код это пережиток императивного программирования. Функциональный код как и математические выражения не подразумевает никакого исполнителя, это просто одно большое выражение состоящее из более мелких выражений. Для такого кода не важно в какой последовательности он будет исполняться.
Посмотри на Erlang. Та же история. Нет точки входа. Нет никаких инструкций. Нет состояния. Есть только выражения. Виртуальная машина сама все скейлит. К этому нужно стремиться. Нужно стремиться отходить от уровня абстракции ОС и процессора. Пусть компиляторы и виртуальные машины абстрагируют от этого уровня. Нужно писать код удобно для программиста, а не удобно для машины. Идиотизм подстраиваться под машину, пусть она подстраивается под человека. Для чего тогда нужны компиляторы и VM?
>Го при запуске (если не путаю) создает пул фоновых потоков. Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю. У него же есть рантайм, он же не голый как Си. В Эрланге создают миллионы эрланг-процессов. Естественно виртуальная машина не создает для них миллионы тредов ОС. Все они абстрактные и живут в рантайме.
Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?
Статью написал автор стека uNetworking Алекс Халтман https://github.com/uNetworking/uWebSockets.js. Их либы используют в биржевой торговле крупнейшие брокеры мира. Так как он может держать миллион активных соединений на одном ядре?
>Ну это ты эти понятия притащил, а не я. Ты их игнорируешь. Они между прочим отвечают на вопрос как на одном ядре держать миллион или более соединений.
Есть несколько вариантов. Самый простой - это запустить несколько процессов. Когда первый процесс выполняет какую-то блокирующую операцию и останавливается, ОС передаст управление второму. Если процессов много, то все доступные ядра гарантированно будут загружены на 100%.
Плюс - простота. Ты просто пишешь обычный последовательный код.
Этот подход по умолчанию использует php-fpm. Он запускает N рабочих процессов и распределяет HTTP-запросы между ними. Рабочий обрабатывает поступающие ему запросы строго по очереди, но рабочих много, потому одновременно обрабатывается несколько запросов.
Минус этого подхода в том, что переключение ядра между процессами не бесплатное. Если ты переключаешься 100 раз в секунду - это незаметно. А если 100 000 - то еще как заметно и у тебя куча времени начинает уходить на переключения. То есть, если процесс выполняет множество блокирующих, но коротких операций, то становится выгоднее вовсе не отдавать управление и ждать, чем тратить время на переключение.
Есть другой подход - асинхронный код. Мы создаем "задачи" внутри однопоточного процесса и переключаемся между ними без привлечения ОС. То есть, одна задача, запрашивает у ОС получение каких-то данных, которое требует времени, и добровольно отдает управление планировщику. Планировщик передает управление другой задаче, а когда та завершится, проверяет, не пришли ли данные для первой задачи.
А для ОС это выглядит как один постоянно что-то делающий не блокирующийся процесс.
Такой процесс нагружает только одно ядро, потому ты должен запустить столько процессов, сколько у тебя ядер. Также, тебе понадобится менеджер процессов, который будет отслеживать упавшие процессы, запускать новые и распределять поступающие запросы между ними (это называется балансировка). В простом варианте можно использовать nginx для балансировки - он умеет раскидывать запросы по нескольким бекендам.
Еще из минусов - писать асинхронный код менее удобно, чем синхронный, тем более что в PHP нет async/await. Впрочем, в новых версиях будут fibers, которые облегчат это: https://wiki.php.net/rfc/fibers
> В некоторых языках реализуют concurrency and parallelism как библиотеку языка и довольно успешно.
concurrency это "принцип". Как ты его реализуешь в библиотеке? В Guile мне разбираться лень.
> Почему в документации толком не описано как PHP код исполняется на машине?
Наверно, предполагается, что программист и так это знает. Если ты программировал на Си или ассемблере, то ты и так понимаешь это.
> Почему не описано как множество запросов обрабатываются одновременно?
Потому что язык PHP не занимается обработкой запросов. Интерпретатор PHP лишь выполняет написанный в скрипте код. А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm. Он подробно не описан, наверно потому, что предполагается, что разработчик знаком с моделью обработки запросов при помощи менеджера и множества работников.
> Почему нет попыток что то написать для исправления ситуации?
Ну а ты сам не хочешь разобраться и написать серию статей? Если нет, то почему кто-то другой должен это делать?
> Вот я загуглил про Go и есть доскональные объяснения как это работает в нем. Как мне понять как это работает в PHP?
Это потому, что в Го применен относительно новый принцип работы с потоками, а в PHP все работает по классической всем известной схеме.
Отвечая на твой первоначальный вопрос, про производительность, тебе нужно делать тесты и измерения на более-менее реалистичном бенчмарке. Померять php-fpm, сравнить с тем же Roadrunner и делать выводы.
> Ты сказал? Не понял. Ты не согласен? Опровергни ссылкой или хотя бы напиши, что тут не так. А то трудно тебя понять.
Если тебе хочется конкретные цифры, раньше в мануалах к процессорам явно указывалось, сколько тактов выполняется та или иная команда.
> По нормальному нужно писать не последовательный, а независимый от последовательности код.
Неважно, какой код ты пишешь. В конечном счете он превращается в ассемблер или интерпретируется написанным на ассемблере интерпретатором. А ассемблер на существующих процессорах выполняется строго последовательно. Код на Хаскелл тоже превращается в императивный последовательный ассемблер.
Если тебе это не нравится, ты можешь сделать свой процессор, который будет работать по другим принципам.
> Нет никаких инструкций. Нет состояния. Есть только выражения.
Ну это уже вкусовщина. Мне, например, нравится последовательный код своей простотой и удобством чтения и написания. Это удобно для описания бизнес-логики. Мне нравится, что есть операторы if и циклы for и while и не надо, как в Хаскелле, имитировать цикл через рекурсию или как там принято. А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach.
Если тебе нравится хаскелл - так просто пиши на нем, в чем проблема?
> Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю.
Ну так погугли и прочитай. Он создает несколько тредов, которые выполняют кусочки горутин по очереди. Но треды он использует, чтобы задействовать все ядра процессора.
> Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?
Одно дело принять миллион соединений, другое дело обрабатывать приходящие по ним данные. Там скорее всего ситуация, когда соединений много, но они большую часть времени неактивны и общая загрузка CPU не очень большая, и хватает одного ядра.
Например, если у него сетевое соединение 1 Гбит/с и это поделить на миллион соединений, то выходит всего лишь килобит/с (128 байт) на одно соединение. То есть данных там много не передается.
В такой ситуации однопоточная асинхронная модель подходит хорошо.
На PHP можно написать аналогичный веб-сокет сервер с помощью ReactPHP или amPHP, но я такое не делал и не могу гарантировать, что не обнаружится каких-то подводных камней.
> Ты их игнорируешь. Они между прочим отвечают на вопрос как на одном ядре держать миллион или более соединений.
Ни на что они не отвечают. То есть по твоему, когда встала задача поддерживать миллион соединений, не надо было думать, анализировать, почему классическая модель не работает, проектировать event loop - надо было просто вспомнить два слова и задача сама собой магически решилась без написания строчки кода?
Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил.
>>2107757 >Плюс - простота. Ты просто пишешь обычный последовательный код. А если нужен обмен данными? Тогда одни проблемы.
>Этот подход по умолчанию использует php-fpm. Поэтому он никуда не годится. Процессы это дорого и не эффективно. Сколько времени нужно чтобы запустить процесс? Много. Сколько нужно памяти? Очень много. И снова проблема обмена данными. Это устаревший подход.
>concurrency это "принцип". Как ты его реализуешь в библиотеке? Также как эвент луп внутри процесса. Существует много абстрактных математических моделей concurrency и parallelism, как реализовать это вопрос другой, реализуют как то же.
>Наверно, предполагается, что программист и так это знает. Не смеши. Пхпшники ничего не знают об этом. Именно по причине того, что в языке ничего нет и в доке не описано.
>Если ты программировал на Си или ассемблере, то ты и так понимаешь это. Я тебя умоляю. На php в основном приходят без опыта программирования. Только единицы переходят в php уже имея опыт. И чаще всего этот опыт нерелевантный. Они в 80-90хх что то там писали. Сейчас процессоры и подходы изменились и поэтому они не в состоянии запилить для php ничего. Чувак системщик приходит в node.js и говорит, что он плохо написан. Берет переписывает сетевой стек и код начинает летать. Это я про https://github.com/alexhultman он вроде еще написал сериализатор json для Go, который в 3 раза быстрее стандартного, написаного в гугл. В php и близко нет таких звезд. Это или недоучки или старперы, которые под многоядерные процы не писали никогда и вообще не понимают как писать современный параллельный софт.
>Потому что язык PHP не занимается обработкой запросов. Интерпретатор PHP лишь выполняет написанный в скрипте код. Что за глупость. PHP обрабатывает запросы. Он только это и делает и для этого создавался. Должно быть пояснение как код с разными SAPI будет работать. Это же не десктопная программа, запросы посылать могут тысячи пользователей одновременно. Как писать эффективно если это не описано? В общем php и его сообщество крайне непрофессиональны. Кроме как формы обрабатывать не о чем больше не пишут, а ты говоришь что то знают.
>А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm ОН поделие не так уж давно появилось. И даже авторы сейчас от него не в восторге, понимают, что написали костыль. Сейчас то у них уже больше опыта, думаю они бы не написали его так как написали.
>Он подробно не описан, наверно потому, что предполагается, что разработчик знаком с моделью обработки запросов при помощи менеджера и множества работников. Слушай, а ты не думал, что сейчас есть http2 и еще куча новых протоколов? Те же вебсокеты. Ты похоже застрял в 90-х как и весь php с его разработчиками.
>Ну а ты сам не хочешь разобраться и написать серию статей? Хочу, но не хочу лезть в код на Си. Мне проще изучать исходники Go, они понятней и написаны на самом Go. Его ассемблер также легко можно посмотреть. В php многое вообще не описано. Даже как писать расширения.
>Это потому, что в Го применен относительно новый принцип работы с потоками Если не ошибаюсь он придуман в 80-х, когда PHP еще не было.
>>2107781 >Ты не согласен? Кто сказал, что на тот код будет затрачено 2 такта?
>Если тебе хочется конкретные цифры, раньше в мануалах к процессорам явно указывалось, сколько тактов выполняется та или иная команда. Вот я об этом. Мне кажется у тебя устаревшее представление. Думаю, что процессоры сейчас выполняют больше операций за единицу времени. Количество инструкций огромно, думаю, что большую часть не используют, большинство компиляторов и виртуальных машин используют легаси инструкции, поэтому у них все так плохо.
Взять к примеру .NET Core. Его за 3 года так прокачали, что он работает наравне с c++ и раст. Помню в бенчах TechEmpower они уступали джавовому Netty раза в 2, а сейчас обходят его в 2 раза. Вот что значит написан с нуля. И хорошо написан и спроектирован грамотно.
>Неважно, какой код ты пишешь. В конечном счете он превращается в ассемблер или интерпретируется написанным на ассемблере интерпретатором. А ассемблер на существующих процессорах выполняется строго последовательно. Почитай инфу по новее. Параллелизм на уровне команд и прочее, аппаратные фичи для ускорения и параллелизма. Важно какой код пишешь, очень важно, на любом языке. От этого много что зависит. Некоторые языки позволяют скейлить код из коробки, если он нормально написан.
>Код на Хаскелл тоже превращается в императивный последовательный ассемблер. В Хаскеле есть мощный параллелизм и конкурентность, еще ленивость. Чтобы это все работало и код оптимизировался, нужно писать нормально.
>А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach. Ясно. Надо было сразу сказать. Что лучше, декларативное утверждение или императивная инструкция? Ты когда просишь жену приготовить тебе борщ, ты зачитываешь ей императивную инструкцию типа иди к холодильнику, открой дверцу, возьми мясо, положи в кастрюлю, залей водой...? Или говоришь просто приготовь борщ? Reduce это декларативное утверждение, сделай это или дай мне, или верни. Foreach это императивня инструкция, возьми это сделай с ним то, потом выполни это, потом... Разве не тупо? Зачем жить на уровне процессора если можно подняться на высшие уровни и писать декларативные утверждения. Взять к примеру html и css. Они очень удобны свой декларативностью. Не нужно вместо <h1> писать выведи в координатах x,y символы a,b,c в кодировке z цветом u и размером n.
>reduce это шаг в прошлое Какой ужас. Не представляю как можно сделать такой вывод. Я тебе описал все выше. Это цикл устаревший тупой подход, а reduce это высокоуровневый объект. Это же очевидно.
>Одно дело принять миллион соединений, другое дело обрабатывать приходящие по ним данные. Статью почитай, погугли, есть вроде и видео где он показывает как запускает эти соединения на старом ноуте и что это живые соединения, в них происходит обмен данными. Пхп даже 10к не сможет потянуть, даже пустых, неактивных. Помолчал бы уж.
>То есть данных там много не передается. Правильно, потому что вебсокеты, а не легаси http с текстовыми пакетами, в которых заголовки занимают больную часть данных.
>Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил. У меня есть понимание что это и как работает, а у тебя? Ты изначально все путал, называл конкурентную модель в Go параллельной. И еще мне говоришь, что я не понимаю. Просто смешно.
>>2107985 Laravel либо symfony, все остальное - либо микрофреймворки, либо протухший кал вроде yii2, на котором только в пидорашке некоторые отсталые и жадные кабаны заставляют писать.
> Думаю, что процессоры > думаю, что большую часть не используют
Проблема в том, что ты не знаешь, а "думаешь". Сам себе придумал что-то и пытаешься меня в этом убедить. Я знаю ассемблер, и понимаю, как работает процессор.
> Некоторые языки > Важно какой код пишешь > нужно писать нормально.
Это не аргументация. Аргументацией было бы "за счет использования команды X язык Y позволяет однопоточной программе задействовать более одного ядра процессора". Давай конкретные примеры, а не расплывчатые рассуждения что надо писать код "нормально" на "некоторых" языках.
> Кто сказал, что на тот код будет затрачено 2 такта?
Если классический процессор без ILP исполняет инструкцию за 1 такт, и их в программе две, то она выполнится за два такта. Что тут может быть непонятного.
> Reduce это декларативное утверждение, сделай это или дай мне, или верни. Foreach это императивня инструкция,
Reduce это костыль для языка, в котором нет циклов. Он снижает читабельность кода.
> Пхп даже 10к не сможет потянуть, даже пустых, неактивных.
>>2062494 (OP) Как самостоятельно научиться писать красивый код без говна? Почитал это: https://refactoring.guru/ru/design-patterns Почитал про KISS, SOLID. Но все примеры, какие там используются я не могу применять на практике, на реальных задачах. Все равно код хуевый. Я впадаю в уныние от этого. Работаю один на дядю, ему насрать, какой я код пишу, лишь бы работало. Уходить от него не планирую, т.к. нормально денег платит.
>>2108389 Почитай Рефакторинг Фаулера. Там описаны признаки плохого кода (code smell) и рецепты для избавления от него. Для рефакторинга так же полезно покрывать код юнит и интеграционными тестами, чтобы знать, что твои изменения не ломают код. Ну и 3 этапа написания кода: 1. make it work 2. make it clean 3. make it fast
>>2107439 Да, понятно, что само по себе это невалидное имя. Я так понял, что это просто упрощенная запись для доступа к полю класса, которого может в нем не быть, если в терминах js, то это было бы:
>>2108298 >Я знаю ассемблер, и понимаю, как работает процессор. Не знаешь, а знаком, в общих чертах. Мануал от intel с набором команд имеет размер более 2000 страниц. Не думаю, что ты знаешь новые оптимизирующие команды. Мало кто их вообще знает и использует.
>Reduce это костыль для языка Ясно. У тебя дибилизм.
Главный принцип - код пишется для людей, не для машины. Он должен быть легко читаем и его должно быть удобно править.
Паттерны тут особо не помогут. Наоборот, начинающие, прочитав книгу про паттерны и стараясь их всюду засунуть, делают код хуже.
Вот, на что стоит обращать внимание:
- код должно быть легко читать, даже если ты видишь его в первый раз. Делать все лучше самым простым способом (если только это не влечет каких-то проблем с производительностью или чем-то еще). Не надо демонстрировать, что ты знаешь хитрые трюки.
- имена переменных, функций, классов должны быть документирующими. В идеале, если ты видишь вызов функции, ты должен понять, что она делает, не заглядывая в нее.
- плохой практикой будет передача массивов сложной структуры, так как при чтении кода непонятно, что в нем содержится.
- старайся использовать защитное программирование и писать такой код, который трудно случайно сломать. Не должно быть такого, что ты чуть поменял код в одном месте и в другом месте что-то сломалось. Хорошо будет проверять значения параметров и выбрасывать исключение при выходе за допустимые пределы.
- не надо передавать данные в функцию или возвращать из нее обходными путями. Пример неправильной передачи данных:
- не надо писать стены кода по 150 строк или вложенностью по 6 уровней. Алгоритм должен состоять из небольшого числа действий, чтобы его легко было понять.
- не надо злоупотреблять магическими методами и демонстрировать, что ты умеешь делать хитрые трюки с их помощью.
- глобальные переменные и статические поля во многих, но не во всех, случаях это зло. Допустим, в каком-то классе есть статическое поле. Ты его меняешь. И этим ты можешь повлиять на выполнение кода где-то в другом месте.
Конечно, тесты было бы иметь полезно. Вот представь сам: тебе передали большой проект, в котором куча фич. Ты правишь код в нем. Как ты проверишь, что ничего не сломалось? Вручную будешь обходить все страницы и проверять? Но ведь ты можешь даже не знать про некоторые фичи и не заметишь, что они сломались.
Или ты решил обновить фреймворк на новую версию. Как проверить, что ничего не сломалось?
В общем, поищи советы про правильный код, читабельный код, поддерживаемый код.
А насчет паттернов беспокоиться не надо. Если ты не можешь их применить, значит они в этом месте не требуются. Отучайся мыслить черно-белыми категориями вроде "паттерны - хорошо, отсутствие паттернов - плохо".
>>2108389 >Все равно код хуевый Покаж код. Субъективщина она такая - всякое может чудиться. Ну и в целом всегда нужна конкретика, а вот это вот "как писать хорошо" оно для тех, кто одно и то же советует всем.
>>2108487 Ты прав. Нашел в коде одно место (сериализатор), где есть присваивание в это странное поле. Правда пока не понял, зачем именно такое имя, а не просто historyCreatedAt.
>>2108389 1. Ты либо радился очень мозговитым и быстро смекаешь 2. Работаешь в команде и смотришь как пишут другие. 3. Много пишешь сам. Либо по работе либо пет проекты.
Тут очевидно, что передается на вход и что вернет функция. В примере выше не очевидно. Особенно страдает читабельность, если операции разделены блоками кода:
Рассмотри каждую строчку отдельно. Понятно, что делает $userTable->setId(1234); ? К чему относится id? Как он будет использован? И если кто-то после этой строчки засеттит другой id, мы об этом не узнаем
$userTable->findUser(); На основе чего он ищет юзера? Т.е. нам надо какой-то стейт сконфигурировать внутри объекта
$user = $userTable->getResult(); Что за результат нам вернется? А если не было поиска? А если в классе есть другие методы поиска, чей результат будет возвращен?
Подобный код порождает много путаницы. Чтобы им пользоваться, нужно знать внутренности класса, чего в хорошем ООП следует избегать. $user =$userTable->findUserById(1234); - подобная запись однозначно говорит, что мы получим юзера из таблицы по его айди, либо null/exception, если юзер на найден
>>2110487 Так и скажи. Главное не в дипломе, а в голове - если увлекался IT, то делай упор на это. Если никогда не интересно было - что ты там забыл вообще?
>>2110487 >спросят общие вопросы про образование Вряд ли. Я конечно давно на стажерских собесах не был, но думаю, там спрашивают примерно то же, что и среднего разраба.
Конторе от стажера нужно, чтобы он в максимально короткие сроки вырос до джуна и ему можно было поручать простые задачи. Тут будет плюсом написание пет проекта на стеке, который используют в конторе. Можно будет про него рассказать на собесе, показать код, обозначить трудные места и как с ними справился.
Помогите, как передать в pdo-запрос дату для сравнения с датой в таблице? Вставляю String, пишет: "столбец "value" не существует ... LIKE value='202... ^" Что здесь понимается под value? По идее это дата из таблицы, а справа дата, которую я передаю, но почему value не существует? Select я точно делаю правильно, и в записях тб поля с датой не пустые.
>>2110917 >с битрикса переписывают на лару или симфони Для этого сам битрикс надо знать, нет?
Сам подумываю вкатиться потому, что берут почти с улицы. Знаю Лару, Симфу, докеры-хуёкеры, но нет опыта и поэтому меня не берут. Буду, значит, на Битриксе говно писать на работе, а дома уже на фреймворках. Вот и получается, что у одних с говнокодом и Битриксом бизнес растёт, а другие супер-пупер-погроммисты настолько выёбистые, что никого себе найти не могут.
>>2111089 >Знаю Лару, Симфу, докеры-хуёкеры, но нет опыта и поэтому меня не берут Ну еблан значит. Надо было нарисовать опыта года полтора в рога и копыта. Таким как ты дорога в битрикс
>на Битриксе говно писать на работе, а дома уже на фреймворках Не, дома ты будешь разбираться в кишках битрикса, чтобы утром доделать рабочую таску
>Вот и получается, что у одних с говнокодом и Битриксом бизнес растёт, а другие супер-пупер-погроммисты настолько выёбистые, что никого себе найти не могут. Битрикс - дешевая шлюха. В то время, как симфони - элитная эскортница, которую не каждый себе позволить сможет
>>2111089 >Знаю Лару, Симфу, докеры-хуёкеры проекты есть? на гитхабе разумеется. если нет, то ясно почему не берут, а если есть, то... то как ищешь? по всей России или только в своем мухосранске? если онли в своем мухосранске, то ясно почему не можешь найти...
>>2111109 >Битрикс - дешевая шлюха. В то время, как симфони Одни набирают людей практически с улицы на приемлемые деньги. Другие раздувают понты, выписывая в требования списки из 15-20 технологий даже на позицию младшего перекладывателя жсонов.
>>2111111 >проекты есть? на гитхабе разумеется Какие ещё проекты? В одиночку ты ничего внятного кроме очередного блога\доски объявлений\тестовых не сделаешь. Дело даже не в опыте, а в отсутствии экспертизы в бизнесе.
>>2111128 >Одни набирают людей практически с улицы на приемлемые деньги Потому что стандартными подходами в битриксе не разобраться. Это большая куча дерьма, в которой одинаково неэффективен будет чел с вышкой и опытом разработки и чел с улицы. Поэтому и нанимают вторых, т.к. они по зп не притязательны.
>Другие раздувают понты, выписывая в требования списки из 15-20 технологий даже на позицию младшего перекладывателя жсонов. Какие понты? Обычные собесы на веб инженегра. Или ты думаешь, что бекенд пилить это просто по кнопкам клацать?
>>2111128 я их и имею в виду, очередной блог/форум, мне кажется, это и есть, что называется "пет-проджект", не? если у тебя нет, то ты так и скажи, чего злишься? бесишься, что я прав, что тебя не берут никуда из-за отутствия пет-проджектов? так если ты шаришь, то сделать такой кал не проблема, за неделю сделаешь и работу найдешь
>>2111147 >Это большая куча дерьма Да? Но на Симфони требуют 25 технологий, а на Битрикс хтмл, ЦСС и пхп.
>одинаково неэффективен будет чел с вышкой и опытом разработки и чел с улицы Да мне похуй - деньги есть деньги. Страдают всё равно кабанчики, которых маркетологи битрикса развели.
>>2111151 >если у тебя нет, то ты так и скажи >бесишься, что я прав Был блог - я его снёс из своего гитхаба, ибо пошлятина. Мой последний пет это cms на Ларавел 8 с пакетами админки, чат-бота, готовой системой статей тот самый блог, готовым личным кабинетом пользователя, сделано на бутстраповском ui +15 тем под него. Делал 2 недели, где-то, по вечерам, раз-через-раз. Вот это я понимаю ПЭТ-проект - можно сесть и писать хоть доску объявлений, хоть онлайн-магазин, с поддержкой мессенджеров и прочего говна. А ты про "блог" спрашиваешь.
>>2111220 >Перечисли все 25 Открой среднюю вакуху на хх и сам почитай. Все 30 пунктов будь добр выложи - и ходи по струнке перед синьором, который нередко сам тот ещё хуй моржовый.
>Страдают разрабы Лучше страдать, но с работой, чем ходить и собеседоваться раз за разом к очередным веб инженерам с ЧСВ овер 9к. Забесплатно делая тестовые.
>>2111199 >Делал 2 недели, где-то, по вечерам, раз-через-раз Ещё сайтов с десяток есть разной паршивости - штуки 4 на вордпресс 2 на элементоре и 2 на чистом хтмл, всё самопильное - не на готовых шаблонах, 4 на Винтер\Октобер, и прочее по мелочи - всякое на Слиме\Люмен и несколько тестовых: апишки, парсеры rss с админками, система баланса на транзакциях делаю только интересные.
В ларавельке сессии не сохраняются при рефреше, редиректе на другой сайт(при руте сохраняются), при die, exit. Хотя сессия должна сохранятся как минмум на какое-то время, все таки глобальное хранилище. Пробовал сохранять через ->save(), через ::save(), ничего не помогает. Никто не знает как пофиксть, что придумать\проверить?
>>2111391 В сейчас проверил, в папке хранилище сессия остается! И не модифицируется, ничего. В коде при редиректе обратно не обновляю сессию, я просто вызываю Сессию с нужным мне ключом. Но он возвращает пустоту, хотя явижу что файлик есть и там нужная мне инфа. Но он ее просто не достает.
>>2111418 О, вот еще интересное наблюдение которое ломает мне голову. При редиректе обратно Сессия у меня не читается, так, в этом проблема. Хотя файл на месте.
Но при перезагрузке сайта и снова заходе на контроллер с сессий ОН ЧИТАЕТ данные прошлой сессии.
Я просто не понимаю как это работает, че за х. Сохранил. Вернулся с зеркала. Прочитал - не читает. Перезагрузил. Читает.
>>- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007 >>Время выполнения: все зависит от тебя, но я бы смотрел на 4-6 недель
А за сколько миддл с опытов в несколько лет должен такое делать?
https://ideone.com/o14w8h - решил задачу "Числа прописью". Суперговнокод, все онли через if-ы. Покажите как надо делать "красиво", чтоб без миллиарда ифов. Буду премного благодарен за нормальный код. Бтв, делал 4 часа. Все предыдущие задачи решил. Есть ли у меня шанс стать пхпшником или хотя бы битриксоидом с такими мозгами?
что скажете, пацаны? Шансы стать хотя бы битриксоидом есть? А то я расстраиваюсь из-за своего говнокода, не знаю, смогу ли я когда-нибудь писать изящно как синьор 300кк/нсек...
Допустим есть у меня template.php со всеми дефолтными html тегами и специальным полем типа <?=$content ?>. В общем этакий шаблон почти для любой страницы сайта. Так-же есть отдельные .html файлы со всяким текстом, в общем посты условные.
Хочу просто собирать из этого готовую страницу с html тегами и текстом поста на месте переменной $content.
Пытаюсь выбрать самый нормальный способ реализации этого:
- Создавать на каждый пост.html отдельный php файл который будет специальной функцией вставлять в шаблон файлы контента. - заместо html файла иметь лишь php файл в котором контент будет отдельной строковой переменной, тогда вообще будет достаточно инклудить шаблон, а <?= уже само подставит контент. - разделить шаблон на верхнюю и нижнею части (чтоб в одной <html> открывался, а в другой закрывался тогда опять же понадобиться только два, а не три файла и всё будет на инклудах.
Все три варианта кажутся мне очень противными, но даже не знаю как поступить иначе чтоб не захламлять файлы на сервере.
>>2113130 Если говорить о минимально приличном варианте, то: 1. Иметь index.php, который принимает GET-параметр post_id (при этом проверяется, существует ли этот параметр, и является ли он числом). 2. Этот файл по post_id считывает содержимое файла поста в переменную $content (через file_get_contents() в простом варианте, и через fopen() / fread() / fclose() с обработкой ошибок в продвинутов варианте). 3. Инклудится файл шаблона.
Я не очень понял, у тебя шаблоны страниц - это чистый HTML или они могут содержать PHP?
Если это чистый HTML, то ты можешь прочесть их с помощью file_get_contents() и поместить в переменную $content, а потом вызвать основной шаблон.
Если шаблоны могут содержать PHP-код, то ты можешь их инклудить с помощью require $page;
В обоих случаях ты должен тщательно контролировать путь к файлу. Не позволять пользователю указывать произвольный путь, иначе злоумышленник сможет читать любой файл на сервере, или даже выполнять (во втором варианте). Лучше всего будет иметь "белый" список разрешенных имен файлов и разрешать читать/инклудить только файлы из него.
То есть, делать так: file_get_contents($_GET['file']) нельзя - это уязвимость.
Функцию inclineWord можно чуть упростить. Вместо перечисления кучи вариантов можно написать выражение вроде $x >= 11 && $x <= 14.
В выражении if стоит всегда использовать фигурные скобки и явно указывать границы блоков. Не надо экономить строки.
Функцию smallNumberToText можно упростить, оставив в ней только 4 условных блока, таким образом:
Если в числе есть сотни: - добавить слово для сотен Если число оканчивается на 1..19: - добавить слово для него Если число оканчивается на 20..99: - добавить слово для десятков И если при этом в числе есть единицы: - добавить слово для них
У тебя же там штук 7 условных блоков, в которых есть повторяющиеся куски кода. Попробуй от них избавиться.
Аналогично стоит поступить с функцией numberToText. В ней достаточно трех блоков:
Если в числе есть миллионы, то... Если есть тысячи, то... Если есть единицы, то ...
Для составления фразы из кусочков удобно использовать массив, в который кладутся слова, а потом они склеиваются с помощью implode.
В общем, код надо упростить и избавиться от повторов. Тогда будет нормально.
У этого решения есть недостаточек в том, что оно полагается на то, что числа и операции чередуются. И если подать на вход некорректное выражение, то либо это не будет обнаружено, либо вызовет ошибку в программе. Хотя в задаче не требуется определять неправильные выражения, в реальном коде это может понадобиться.
Также, твоя программа не готова к наличию пробелов в выражении.
Также, ты проверяешь результат preg_split, что он не равен null или false. Но эта функция возвращает массив строк, в котором нет таких значений.
Также, если посмотреть мануал, то у функции preg_split есть опция PREG_SPLIT_NO_EMPTY, которая удаляет пустые строки.
>>2113182 Да думал о подобном варианте но забыл написать, звучит вроде нормально, хотя и надо будет над айди и всем таким подумать. Спасибо.
>>2113216 Шаблон это .php файл где 99% HTML и есть <?= $content ?> (тоже самое что и <?php echo $content; ?>). Просто нашёл в интернете такой способ шаблонизации то есть он заключается в том что ты когда используешь шаблон определяешь эту самую переменную и таким образом встраиваешь контент. Но тоже спасибо за совет с GET запросами.
Если не решусь в итоге на такой вариант то пойду долбиться генерировать статические страницы, но это уже совсем другая история...
>>2113510 ага, я тоже так думаю, всегда считал себя талантом, а тут я прямо проявил себя во всей красе, учебник ОП-а осилил всего за 15 часов, ну не успех ли это? ООП думаю за пару дней осилю и базы данных за неделю, дальше только проекты и чтение сикпа
>>2062494 (OP) Хочу делать реальные сайты и фичи, которые будут крутиться в интернете. Не для себя, а для тех кому это нужно. Пусть даже за небольшие деньги, а может и за спасибо иногда. Это даст мне мотивацию. Как найти заказчиков? Чтобы без особой конкуренции как на фриланс-биржах. И без ограничений бирж.
Не нужно советовать мне устроиться в компанию. Это я делать не буду. Дайте идею где без особо труда находить множества заинтересованных в сайте с нуля или допиливании существующего сайта?
>>2114020 сам не пробовал, исключительно мои предположения: можно искать в соцсетях (в пабликах вк, в одноклассниках и тд), писать на мыло/ватсапп компаниям, а их контакты можно найти на картах (2GIS, yandex, google), ну можно еще звонить, если ты можешь голосом общаться, так больше шансов я думаю, но проще кабанов подцепить в вкашечке мне кажется, их вполне может зацепить твой низкий ценник, они же всегда хотят наживиться, а кабаны такие обычно ведутся на всякие битриксоидные рекламные компании, где им за 100к лендос делают, а тут ты с ценником в 1к допустим, ну енто все из головы цифры взятые, но примерно так и обстоят дела
а ты только представь, сколько компаний сейчас в России, в каждом городе их тысячи, так что хоть 1 из 1000/10000 наверняка согласится
можно, кстати, так же делать и для зарубежных компаний, только как-то надо деньги с них получать, а палка, насколько помню, больше не работает в России
но выходит, что без напряга никак не выйдет, тут уж сорри, какого-то суперизичного варианта просто не существует, либо идешь как все на фриланс, либо вот так, лениво ctrlC - ctrlV спамишь компаниям в ватсапе и вк
>>2062494 (OP) Оказывается в replit есть php с веб-сервером. Только не могу понять как его правильно запускать. Нажал run, все закрутилось, но где смотреть страницу непонятно. Инструкций как это работает нигде нет.
Я не очень разбираюсь в Laravel, но вызывать config() из конструктора это не DI. В DI нужные параметры должны передаваться в конструктор снаружи.
Недостаток использования config() в конструкторе в том, что ты не можешь создать объект с произвольными параметрами - они всегда берутся только из конфига.
Изучаю Ларавель. Какая же дебилизующая вешь эти фреймворки. Очень удобно и просто становится, но можно вообще все программирование на ванили забыть с ними. Особенно этот шаблонизатор блейд. Ведь писать код в хтмл-е через <?php ?> это так сложно, нужно выдумать эти собаки @hui @pizda.
Кто-нибудь за собой замечал, что от фреймворка тупит потом на нативном пхп???
>>2115429 Хз как из-за фреймворком можно начать тупить. Я если и использую голый пхп то только для каких нить мелких консольных скриптов. Но блейд И мне не нравится.
Обязательно ли стажеру/джуну знать наизусть git/composer? Или достаточно знать, что определенные команды существуют и уметь во время загуглить/посмотреть шпору?
>>2116056 >Просто учишься паралелльно. Ну вот как раз сейчас стажируюсь, учу вот это все, но не знаю, нужно ли зубрить все эти команды и миллионы ключей, или достаточно шпаргалку/документацию добавить в закладки, и когда нужно, смотреть
Наверно, базовые команды стоит знать. Для гит это: как создать коммит, как запушить/запуллить изменения, как мержить. Для композера надо хотя бы знать принцип его работы, команду установки пакетов из composer.json, установки из composer.lock и в чем разница между ними.
Если ты знаешь больше, это, конечно, будет плюсом.
Иди напиши свой проект на пару тысяч строк - будет новый проект. Через два года развития бОльшая часть кода, написанного изначально, станет тем самым легаси.
>>2116056 >Это говно работает так криво Есть хоть один фреймворк хоть на одном языке программирования, про который не говорят "Это говно криво работает"? Уже столько раз это слышал про разные фв.
Как сделать продажу билетов на сайте? Есть ли изи вей? Я гуглил всякие плагины для цмсок, но они вроде все платные. Может есть какие-то фреймворки для этого или все нужно вручную создавать?
Массив имеет тот недостаток, что код становится менее читабельным. Представь, что у тебя есть функция, и в нее приходит такой массив. Как узнать, какие в нем есть поля? Надо найти место, где этот массив создается, и отследить весь его путь до текущей функции. В большом проекте это может быть очень запутанный путь. Это отнимает много времени. Хуже того, может оказаться, что функция иногда вызывается с одним форматом массива, а иногда с другим.
Объект лучше в том плане, что всегда можно заглянуть в класс и увидеть, какие есть поля. Объект требует побольше кода, чтобы его создать, но при использовании ORM разница не так заметна.
Потому в общем случае лучше использовать объекты и ORM.
Но есть случаи, когда выгоднее использовать массив. Как правило, загрузка данных через ORM медленнее и потребляет больше памяти. Если ты загружаешь 100 объектов, это не критично, но если 100 000, то разница получается значительной.
В таком случае лучше использовать массив. Но тогда надо писать код так, чтобы выборка данных и их использование были рядом, в идеале внутри одной функции, и чтобы эти массивы не расходились по остальному коду.
Также, ORM обычно загружают всю строку таблицы со всеми полями. Если тебе нужна всего пара полей, выгоднее может быть загрузить их массивом.
>>2117800 Допустим, каждая запись — это один объект. А множество таких объектов нормально хранить в массиве, или использовать специальный объект-коллекцию?
И еще, очень странно, что ты создал репозиторий прямо в c:\Users\user. Ты всю свою домашнюю папку с конфигами программ, системными файлами, реестром запушил на гитхаб?
>>2116443 >Какой ответ тебе нужен? Ответ на мой вопрос >Иди напиши свой проект на пару тысяч строк - будет новый проект. С радостью бы, и не на пыхе, и вообще даже близко не в вебе. Только за это никто платить не будет. Я про то, что по вузу надо было изучить пыху, но вопрос, не стоит ли сейчас сменить язык, чтобы потом не было проблем? Если ли в php долгосрочная перспектива? А если нет, то куда идти, на питон? Или это маркетинговая хуйня в плане бэкенда?
>>2120005 >не стоит ли сейчас сменить язык, чтобы потом не было проблем? Как мне кажется, это зависит от того, что ты хочешь.
Если просто нравится программировать - то без разницы на чем, на самом деле. Интересные проекты и задачи есть везде. Если же хочешь денег.. Ну хз. Можно конечно уйти в сторону всякого разрекламированного говна (или не говна), но с другой стороны и на пыхе можно заработать.
Могу точно сказать, что в ближайшие лет 10-15 навряд ли исчезнет спрос на пых-программистов.
>>2117800 >Массив имеет тот недостаток, что код становится менее читабельным. Представь, что у тебя есть функция, и в нее приходит такой массив. Как узнать, какие в нем есть поля? Надо найти место, где этот массив создается, и отследить весь его путь до текущей функции. В большом проекте это может быть очень запутанный путь. Это отнимает много времени. Хуже того, может оказаться, что функция иногда вызывается с одним форматом массива, а иногда с другим. Прям один из главных недостатков битрикса описал, там все на массивах
>>2119730 Да потому что я не могу запушить в имеющийся репозиторий гитхаб новые файлы, и просто тестирую, по умолчанию все открывается там так и сотавил чтобы быстрее
Всем привет, подскажите зачем использовать reverse proxy в связке Nginx + Apache, почему одного Nginx не достаточно, он же может обрабатывать и статику и работать с php-fpm? Скорость работы с динамическим контентом у Nginx и Apache сопоставимая, в чем преимущества?
Зря. Есть пара способов открыть консоль в произвольной папке.
Первый это зайти в папку в Проводнике и в адресную строку ввести cmd, и нажать Enter. Тогда откроется консоль с уже выбранной текущей папкой.
Второй способ это создать где-нибудь (например на рабочем столе) ярлык. В его свойствах в команду прописать cmd.exe, а в "рабочая директория" - путь к твоей папке. Тогда двойной клик по ярлыку откроет консоль в нужной папке.
А файлы ты не можешь запушить потому, что ты делаешь git push не из той папки. У тебя как я понял репозиторий в папке php-blog. Ты должен сначала зайти в нее, а только потом делать git push.
У тебя фактически два репозитория: один в users, другой в php-blog. Ты коммиты делаешь в php-blog, а запушить пытаешься репозиторий в users.
Надо сначала перейти в папку php-blog, а только потом делать push.
Генераторы не ухудшают читабельность кода. Однако, если генератор выдает массив, который потом передается в 10 функций подряд, то мы снова получаем код как в Битриксе.