Непонятный сезон стоит за окном, а мы по-прежнему изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.В нашем треде отвечают почти на все вопросы, только бампайте каждые 5 дней. Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.Предыдущий тред был тут: >>1552970 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, так что можно легко найти обсуждение какой-то задачи или ответы на свой старый пост) или ищутся в гугле по словам "клуб изучающих php" и в архиваче. Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467Форматируй свой код, если хочешь, чтобы его читали (как, написано во втором посте).Правила: ведем себя воспитанно, помогаем новичкам, читаем учебники, решаем задачки, постим ссылки на решения, ОП их проверяет и дает советы и замечания. ОП заходит редко, где-то раз в 2-3 дня, у него мало времени, не жди его, решай задачки дальше. ОП отвечает на все вопросы по его задачкам и учебнику, а вот насчет каких-то других вещей - только если останется время. Но в треде немало анонимных экспертов разного уровня, так что вряд ли вопрос останется без ответа. С чего начатьУ нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный). Это учебник для изучающих с нуля, то есть если ты вообще ничего не знаешь, то можно начать с него. Он простой и понятный. Там есть задачи, их нужно решать (чтобы стать программистом, надо писать код — иначе никак). Пости ссылки на решения в тред, мы их проверим, напишем замечания и дадим советы по улучшению. С другой стороны, если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Visual Studio Code, Netbeans PHP или PhpStorm (с ним будет удобнее).Если не знаешь как решать, запости код, напиши в каком месте остановился и попроси подсказку.Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP, этого недостаточно. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. Надо переходить к более серьезным задачкам, которые научат тебя всему этому.- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php- Учи HTML/CSS и SQL, PDO, хотя бы основы- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217- Еще более сложная и долгая задача на Yii/Symfony: https://gist.github.com/codedokode/8733007- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a- Если ты все решил, переходи к Symfony 3/Doctrine 2 - Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы. Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:https://github.com/codedokode/pasta/blob/master/soft/php-install.mdhttps://github.com/codedokode/pasta/blob/master/soft/apache-install.mdМожет тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.mdРешения задач лучше показать мне, особенно на ООП,так как сам ты вряд ли увидишь все ошибки. Пости свой код на гитхаб и вкидывай ссылку в тред по мере решения. Я прокомментирую и укажу на ошибки.Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра. Также можно начинать смотреть фильмы и видео на английском.Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.mdЧто почитать- Мануал по PHP — http://www.php.net/manual/ru/langref.php- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования- JS: learn.javascript.ru- Про Git: https://git-scm.com/book/ru/v1- Новости IT на англ. https://news.ycombinator.com/- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492 У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.Платиновые вопросы- Почему PHP? Потому что вакансий море, и учить легко. - Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Стоит писать код как попало, а аккуратно. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()- Название функции начинается с глагола, в стиле «сделайЧтоТо»- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там- в именах классов используется CamelCase, первая буква большая, «_» может использоваться- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления: PSR-1 (рус.): https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.mdPSR-2 (рус.): https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.mdPSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
Напомню себе проверить позже: >>1598967 → https://github.com/Vladrigos/StudentList/Если вдруг я кому-то не ответил в прошлом треде, можете напомнить о себе тут.
>>1599205Могу, кстати, сразу несколько советов дать по поводу https://github.com/Vladrigos/StudentList/- сделай папку public, как описано в задаче, чтобы из браузера не были доступны все файлы проекта- почитай урок про SQL инъекции и используй плейсхолдеры при подстановке переменных в запрос: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md- почитай урок по DI и явно передавай объект PDO в StudentGateway вместо использования синглтонов: https://github.com/codedokode/pasta/blob/master/arch/di.md
ну наконец таки перекатили. и полугода не прошло. анчоусы, подскажите, делаю аякс пагинацию и там такой код https://ideone.com/fRquksон отсылает меня в шаблон, который парсит в нужной мне разметке уже то, что пришло с контроллера. проблема только в том что сам js код проблем не вызывает и ajax не ловит .failвместо этого при переходи на любую из страниц пыха мне выдает что undefined variable т.к. видимо из за того, что с контроллера нихуя не прилетает. так вот с чем связано то что ничего не приходит?
Недавно сделал студентов. Жду негатив <3 https://github.com/Back1ng/students Использовал Singletone для базы данных, как пример антипаттерна, анон сказал попробовать, чтобы знал. Еще и роутинг хотел по другому сделать, но подумал про параметры, и решил сделать так как есть, ведь все равно большего кода тут не будет
>>1599369У тебя контроллер наследуется от БД, че за пиздец, во всю используются глобальные переменные. Нет тестов.Пиздец!
Пацаны, я паровозик, который смог. Давайте вместе порадуемся этому. Тащемта если отбросить обсер с видимостью переменных в функциях, я ломал голову над знаками, которые должны быть в запросе sql. Стаоался там кавычки поставить, запятые как отдельные символы ставить. Но это оказало проще.
>>1599501>У тебя контроллер наследуется от БДТеперь не наследуется>во всю используются глобальные переменныеТы про статические методы?>Пиздец!Понимаю! =)
>>1599770Тесты заебись писать когда ты сидишь на работе и тебе за это платят, а не с голодухи в поисках вката, или заказа, или обучения.Т.е. только тогда когда это хоть кому-то нужно.
>>1599681Глобальные переменные вроде $_SESSION. Не используй их, потому что тесты потом не сможешь написать. Есть всякие библиотеки, которые позволяют работать с сессиями и куки как с объектами, гугли.
Сап /pr. Занимаюсь пыхой уже второй год, ковыряю фреймворки потихоньку, немного зарабатываю на фрилансе, вроде получается. Сейчас я студент последнего курса, поэтому летом уже пора искать работу. Но в моей шараге сейчас есть курс по тестированию веб-приложений на питоне. Стоит ли вкатываться? Или забить и подрочить пых ещё пару месяцев?
>>1599881>Есть всякие библиотеки, которые позволяют работать с сессиями и куки как с объектами, гугли.Да ему одного объекта хватит, куда это всё убрать можно. Зачем библиотеки?
Суп. Подскажите как фронтенд скотине быстренько влететь в пхп, чтоб без всякой воды и говна для полных новичков типа "что такое DOM, бигоу нотейшон и т.д"? Там на удеми может что-нибудь? Надо по работе, там yii2
Привет, помогите советом:Пишу бота, как лучше организовать хранения справочника типов ответа?Есть родительский класс Response,есть подклассы ResponseImage, ResponseTextЕсть таблица в бд response - история ответов. Как оргранизовать справочник типов Response, чтобы в дальнейшем, знать как правильно обрабатывать историю ответов из бд. 1. Хранить в отдельной таблице response_type(id, class_name), и получать type_id в дочернем классе каждый раз запросом к этому справочнику (поиск по имени класса)? Это увеличит кол-во запросов к бд, на сколько это существенно?2. Или прописать типы в родительском классе? Тогда каждый раз создавая новый класс-ResponseNew нужно будет изменять родительский класс. 3. Создать справочник в бд по всем типам, а в дочернем классе прописать только его type_id? Два последних варианта - это вероятность возникновения коллизий в будущем при поддержке нескольких ботов.
>>1599895забей, нахуй не надо. если есть потребность в тестах на питоне - изучай сам.будет быстрее, эффективней, дешевле.так что дрочи пых и пытайся щас уже галеру найти где будешь грести, ибо летом после выпуска будет огромная волна студентов, а осенью еще больше. в связи с этим будет как бы проблематично искать будет. алсо, летом все в отпусках и особо вакансий на рынок не выкидывают
>>1599795Во многих ваках спрашивают за тесты с порога.Если конечно не хочешь пойти в говноконтору, где нет тестов и всё тестируют вручную
>>1599201 (OP)Дается массив с числами например[01,0,1,02,2,5,04,4]Как убрать из него восьмеричные числа типа 01,02,04.
>>1599895Ребят скажите плиз, как в php фриланс вкатится? Если я уже все основы веба знаю, только опыта нет. Можно где-то беслпатно поработать? Заказики повыполнять, постажироваться
>>1600322Если ты правда знаешь как верстать, PHP и т.д То ты никогда не согласишься делать что-то забесплатно.
>>1600448Так у меня практики нету, я не знаю как монетизировать свои умения. Если я не получу денег но получу опыт, который потом смогу монетизировать, это уже хорошо.Но да, конечно забесплатно делать это крайний вариант
>>1600105Сменил три работы - нигде тестов не писали. Что-то где-то про это говорилось на начале проекта, но потом всегда хуй забивали. Да, это плохо, но далеко не везде их пишут.
>>1600455Сейм на двух работах сидел и сижу без тестов и это хуево. Сам для себя пишу тесты в изолированных кусках кода
Кто решил все бонусные задачки? Долго решали? Вот собираюсь ими заняться, хочу спросить есть ли ребята которым удалось?
https://career.habr.com/vacancies/1000049256>Зарплата от 200 000 до 300 000 рублей в месяц. Зависит от количества допускаемых вами ошибок (объективно). >ошибокЧе за нахер?
>>1600563Это уже к веб серверу. Погугли https имя твоего веб сервера. https apache2 Там уже есть инструкции.
>>1600561Ну очевидно, что заносчивые люди будут при любом найденном проблемном или спорном моменте качать права и предлагать снизить зп
Наверное это нубский вопрос, но все же. Вот допустим есть простой контроллер c тайпхинтом int на айди теста, который берет айди и показывает страничку с описанием и прочей инфой или 404, если тест не найден. Все работает, но вот, допустим, если юзер случайно наберет в адресной строке слишком большой айди, который больше допустимого int в php, то ларавель преобразовывает этот большой айди в строку и соответсвенно выскакивает исключение, что в контролер пришла строка, а не int. Как это пофиксить? Через middleware?
>>1601115Первый раз с этим сталкиваюсь. В Си такого не было. Хотя с поддержкой сайтов про регулярки не так уж и сложно, но подумать всё равно надо.
>>1601267Тогда уже ошибка при запросе в бд будет.>>1601193Я проще сделал. В документации нашел, что можно параметры запроса регулярками в роутере фильтровать и поставил от одной до десяти цифр.
Аноны, Оп, помогите. Хочу сделать опросник, но не могу придумать структуру бд. Т.е есть вопросы и ответы, но не простые. У вопросов и ответов должны быть последовательности, аля "выберите ваш пол: М, Ж". И к каждому ответу разные ветви опросов. И так можно сделать к каждому ответу. Это вообще реализуемо? Еще хочу попробовать сокеты, на пхп же можно их написать? (думаю сделать простенький чат чтобы потестить) Или же такие вещи реализуют на ноде?
>>1602256дополню в бородатые времена была программа элиза она хоть и на лиспе но прочитав код поймешь принцип, работала как чатбот.
Подбуханный сеньер в пятницу разбирает требования к вакансиям по PHP и около того. Респонс не требуется, но может быть кому-то будет полезно. Смотреть на скорости 1.25, иначе скучно.https://www.youtube.com/watch?v=ixfsmWVAD_0
>>1602336Я просто своего друга учу и делаю ему видео. Если вас тут покажется полезным, могу улучшить звук и закидывать. А так, это не реклама, я просто напился и решил, чобы не поделиться.
>>1599185 →>Проще сделать папку, в ней хранить файлы с именами, соответствующим логинам или id пользователей, а не пытаться это засунуть в конфиг. Если пользователей всего несколько, можно и в конфиг, благо YAML позволяет многострочные тексты. От 150 строк ничего страшного не будет, и при желании можно это вынести в отдельный файл и инклудить его.Да, пользователей всего несколько - 3-ое (Alice, Bob, Tester). Правило ли будет поместить в services.yaml в поле parameters следующие поля: alice_public_key, alice_private_key и т.д, и поместить в них многострочный текст? Как потом получить доступ к этим параметрам Symfony Console?
>>1602348Ключи хранятся в отдельной папке. Папка исключена (так как ключи приватные) из систем контроля версий. Ключи берешь через file_get_contents или что-то подобное (к примеру криптобиблиотеки могут принимать файл ключа как параметер). Файлы или именуешь по айдишникам пользователей (как анон выше говорил) или добавляешь в таблицу юзеров поле с именем файла ключа.
>>1602256Что-то типа такого. Три нижних таблицы это если тебе нужно сохранять ответы пользователей (причем каждый пользователь может пройти несколько тестов) для самого теста они не нужны.
>>1599201 (OP)Аноны, как лучше обрабатывать тяжёлые POST-запросы, многомегабайтные, с BigData в виде JSON'a?Сходу вижу два варианта.Первый - это читать JSON из TCP-потока, и сразу обрабатывать,второй вариант - это писать его в файл,пока соединение не оборвалось, а потом обрабатывать,и если оборвётся то есть время и место - обработать запрос частично - пусть позже, но из кэша.Что посоветуете?
Как в методах полиморфно определить имя класса?Хочу родительский дженерик-метод, который использует имя класса, но self::class и __CLASS__ возвращают класс-родитель.
Когда нужно использовать прослойку для модели аля сервис, репозиторий? Если у меня не особо большой проект - есть ли в этом смысл?
>>1603088Репозиторий это абстракция от хранилища. Это нужно чтобы код модели не зависел от конкретного способа сохранения данных. Профиты будут, соответственно, если хранилище данных придется менять. Некоторые долбоебы думают что это типа переезда с mysql на postgres, но это относится и к переезду на новую версию базы или кешированию. Так что я рекомендую репозитории использовать всегда. Если проект маленький, то и времени ты на них потратишь немного, а если большой, ну ты понел. Кашу маслом не испортишь.
>>1601129Просто кастишь значение к числу (int)$veryBigInt и получаешь максимально возможный int https://3v4l.org/3F9GN
В статье ОПа по исключениям есть такая заметка: "Исключения имеют и недостатки в сравнении с явным возвратом ошибок. Например, они могут быть выброшены при выполнении любой функции, и сложнее становится угадать, как будет выполняться код."Не могу понять, что имеется в виду. Если исключение предусмотрено разработчиками в описании определенной функции, то оно сработает при любом вызове этой функции, если в ходе ее выполнения условия для выброса исключения будут удовлетворены. Другими словами, если выражение внутри скобок после if будет равно true (1) в if (expression) { throw new Exception("Yada yada yada"); }, то скрипт будет прерван.Однако то же самое произойдет в случае с явным возвратом ошибок:if (expression) { die("Yada yada yada"); }Помогите понять мысль ОПа.
>>1603540Явный возврат ошибок это возврат через return.if (expression) {return E_NOT_FOUND; // или return new Error('....');}Вариант с die() никаких достоинств не имеет и вообще не рассматривается.Отличия между явным возвратом и исключениями проявляются, когда у нас несколько функций вызвыают друг друга: function a() { b() ; } function b() { c(); } function c() { throw new Exception(".."); }Глядя на код функции a(), неочевидно, что она может выкинуть исключение. В случае с явным возвратом ошибок в каждой функции стоял бы if + return и это было бы очевиднее.
>>1603540>>1603634Тут все намного сложнее. Выбрасываемые исключения можно прописать в комменте, тот же phpstorm явно просит тебя это сделать.А дело все в том что исключения используются как продвинутый goto. Сам goto в пхп ничего криминального из себя не представляет, и ничего действительно запутанного сделать не даст. Вот пример, где мы пытаемся из контекста функции перескочить в другое место https://3v4l.org/f2WLK. Как видишь это нихуя не работает.А вот пример типичного использования исключений https://3v4l.org/X8QGJ. Как видишь, то чего не смог goto вполне себе могут исключения. Как я уже сказал - этот код ТИПИЧНЫЙ и ты будешь писать точно так же. Причиной, как мне кажется, является отсутствие возможности нормально вернуть несколько значений, т.к. массивы не типизированы и туплов нет. А так же отсутствие промисов или монады maybe из коробки.
Продолжаю решение задачи про банкомат, про тот вариант, когда задача не решается жадным алгоритмом https://phpbooktest2.ga/l1/mou-ikkai.html , для решении этого , оп дал такой совет , за что большое спасибо !>Готового решения, наверно, нету."Жадный" алгоритм достаточно прост. Мы сначала вычисляем число купюр большого достоинства, потом кол-во купюр чуть меньшего достоинства, и так до самых мелких. "Жадный" алгоритм работает хорошо, когда каждая купюра в N раз больше другой (где N - целое) и когда нет нехватки купюр.Например: у нас есть 1x5000 и 3x2000, нам надо выдать 6000. "Жадный" алгоритм выдаст 1x5000 и застопорится. Он тут не применим, так как мы не можем заменить 5000-ю купюру несколькими 2000-ми.Там, где неприменим "жадный" алгоритм, мы вынуждены перейти к полному перебору всех возможных комбинаций купюр. В общем виде алгоритм выглядит так. Обозначим S - сумма, которую надо выдать, k - количество номиналов купюр, N[1] ... N[k] - количество купюры каждого номинала, A[1] .. A[k] - запас купюр каждого номинала:- берем все возможные комбинации N[1] .. N[k], где N может быть от 0 до A (то есть, учитываем имеющийся запас купюр и не пытаемся брать больше, чем есть)- для каждой комбинации проверяем:- если она в сумме дает S, то сумму можно выдать этой комбинациейНапример, если у нас есть 1x5000 и 3x2000, то мы должны перебрать такие комбинации:- 0x5000 + 0x2000 (я буду писать эту комбинацию сокращенно как (0, 0))- 0x5000 + 1x2000 (или (0, 1))- (0, 2)- (0, 3)- (1, 0)- (1, 1)- (1, 2)- (1, 3)То есть, для каждого номинала мы перебираем значения от 0 до запаса этой купюры. Мы фиксируем значение 0x5000 и перебираем все возможные количества более младших купюр, затем фиксируем значение 1x5000 и перебираем более мелкие купюры снова.Генерацию комбинаций можно реализовать с помощью рекурсии (функции, вызывающей саму себя). Сделаем функцию такого вида:generateCombinations(array $A, array $N): arrayГде $A - массив запасов купюр (A[1] .. A[k]), например, [1 => 1, 2 => 3] для 1x5000, 3x5000, $N - зафиксированные количества старших купюр. Функция вернет массив всех возможных комбинаций, которые начинаются с комбинации в $N.Поскольку массив комбинаций может получиться огромным, можно вместо его возврата сделать функцию-генератор, которая выдает комбинации с помощью команды yield, не тратя память на хранение огромных массивов.Количество таких возможных комбинаций легко посчитать: оно равно произведению запасов купюр, то есть (1 + A[1]) x (1 + A[2]) x ... x (1 + A[k]). Я добавил 1, чтобы учесть вариант, когда мы берем 0 купюр данного номинала.Такие комбинации похожи на "размещения" из комбинаторики ( https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5 ). Есть готовые "алгоритмы для генерации размещений". У нас не совсем размещение, но очень близкая к нему вещь, можно погуглить эти алгоритмы.Дальше алгоритм можно оптимизировать. Например, не перебирать комбинации, которые заведомо превышают искомую сумму (вроде комбинации 2x5000, когда надо выдать 6000). Перебирать комбинации не от (0, 0) к (1, 3), а начиная с наиболее близких к искомой сумме.В любом случае, тут нужна рекурсивная функция. Либо стек.Для начала, можешь попробовать написать код, который просто выведет все возможные комбинации купюр на экран. А потом уже добавлять проверку, дает комбинация нужную сумму или нет Я попробовал написать код, который просто выведет все возможные комбинации , рекурсивно не получилось , получилось со вложенными циклами , но если количество номиналов купюр будет от 3 и более , то вложенные циклы никуда не годятся, получается плохой код. Порывшись в гугле нашел , вот такой рекурсивный цикл https://ideone.com/TRasJW , его чуть чуть поменять , и он уже будет выдавать наши комбинации купюр, в самом этом коде я разобрался, но кажется мне , можно сделать рекурсивный цикл намного проще и понятнее, но самостоятельно написать у меня не получилось, поэтому ищу опять совета здесь
>>1604012Давай попробуем еще упростить задачу. Допустим, у нас есть N кубиков. Напиши функцию, которая выведет все возможные комбинации чисел, которые на них могут выпасть. Начнем с ситуации с одним кубиком. Тут все просто: функция должна вывести числа от 1 до 6.Теперь, пусть кубиков два. Тогда функция должна вывести все комбинации, начинающиеся с 1 (1 1, 1 2 ... 1 6), потом, начиная с 2, и так до 6.Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с зафиксированными значениями на кубиках слева. В этом массиве может быть от 0 до N значений. И функция должна перебрать все оставшиеся значения кубиков справа и вывести комбинации. Если ей переданы значения на всех N кубиках, то перебирать нечего - остается только вывести комбинацию.Если ей передан массив с меньше чем N значениями, кроме последнего, то она просто перебирает числа от 1 до 6, добавляет их по очереди к массиву (так, что получается массив на 1 длиннее, чем был передан) и вызвает себя 6 раз с этим новым массивом.Вот примерный вид функции: function generateCombinations(int $n, array $values) { ... }И вот, как она вызывается (для 3 кубиков): generateCombinations(3, []);Этот вызов должен сделать такие вызовы самой себя: - generateCombinations(3, [1])- этот вызов сделает такие вызовы: - generateCombinations(3, [1, 1])- generateCombinations(3, [1, 2])- ... - generateCombinations(3, [1, 6])Далее будут вызываться:- generateCombinations(3, [2])- ...- generateCombinations(3, [6])Попробуй написать такую функцию, или напиши, если что-то непонятно.Есть еще другой способ вывести все комбинации без рекурсии. Он проще, но будет менее удобен для решения задачи про банкомат. Делаем массив, состоящий из всех единиц ([1, 1, 1, 1]). Вывыодим его. Увеличиваем последнюю единицу на 1: [1, 1, 1, 2]. Выводим. Если где-то получается 7 - мы сбрасываем ее на 1 и увеличиваем цифру перед ней. Этот способ тоже можно попробовать.
>>1599201 (OP)> - Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцевЭто вместе с> SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery.?А если я знаю html, css, js, jquery и git - сколько пхп займёт? Просто в городе пхп требуют в каждой второй вакансии, думаю стоит выучить.
>>1604180Я уже переделал в foreach.В первый раз не смог додуматься как оформить прост, поэтому сделал через echo.
>>1604152Ну тебе осталось выучить SQL, PHP + его ООП, паттерны, хттп\s-протокол, ну и хотя бы один современный фреймворк.Полгода минимум.У тебя фактически только фронтенд и бэкенда вообще нет.
>>1604248Звучит долго. Это время нужно для хорошего уровня или для начального устройства на работу? Просто я видел вакансии в стиле "вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёром". Старт меня и такой устроит.
>>1604256>Звучит долго.Это только до уровня вкатывальщика-джуна на нормальный современный стек. Потом ещё доучиваться надо на работе.Времена когда в пыху вкатывались за 2 месяца давным-давно прошли. Сегодня так в js вкатываются.>Просто я видел вакансии в стиле "вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёром".Не видел таких. Это либо на вротпресс, либо кидалово.В обоих случаях дно.
>>1604275>Сегодня так в js вкатываются.жс только кажется легко там такой ебаный зоопарк с колбеками шо пыха не самое худшее в жизни
>>1604315Со всяким поработал, да и работаю. В целом в клиент вкатиться проще, может даже за 2 месяца, если не тупишь. Бекенд (не только на пхп, а любой, в жс тоже) гораздо более широкая тема. Работаю лет 10 уже и только интереснее и интереснее становится расти, а конца и края не видно. Сейчас даже сложно представить, какой объем инфы надо освоить в 2020, чтобы уверенно в бекенд залететь.
>>1604315>жс только кажется легкоОн и есть - легко. То же самое, что и Луа, который вообще для мимокроков в индустрии сделан. Собственно поэтому в js такой ажиотаж и много молодых макак.>там такой ебаный зоопарк с колбекамиКакой зоопарк? Промисы давно завезли. И в чём сложность этих коллбеков?Там если только с асинком могут быть проблемы, и то только поначалу на ноде той же.>>1604325>только интереснее и интереснее становитсяЕсть такое дело. Чем больше изучаю - тем дальше горизонт.
>>1604613>жс >хоть и говно но общего назначения>Луа>встраиваемыйтемпературы нет? спал хорошо? прими таблеточку
>>1604677>общего назначения>встраиваемыйВообще не в ту степь полез.Оба языка позволяют шлёпать код не заморачиваясь с нормальным ООП. Юным вайтишникам он не понятен и сложен.
>>1604691>нормальным ООПооп как явление костыль фабрики фабрик>Оба языка позволяют шлёпать код не заморачиваясьи давно у нас чистые луа вакансии появились?стек жопаскрипта за последние годы растолстел что скоро больше жабы со спрингом станет, а учитывая вагоны джунов которые повелись на легкость вкота, требования там растут как на дрожжах, это не учитывая подводные айсберги самого языка со слабой типизацией.
>>1604059Бампирую вопрос.Есть смысл базовую аутентификацию на админку ставить на https? Мне по-простому чтоб.
>>1604243Сообщи если тебя возьмут на работу, потому-что если это случится, то я перестану переживать на счёт себя.
>>1604767Без https пароли передаются простым текстом. Любой кто снифает твой трафик может его прочиать.
>>1603307Все равно не могу понять зачем нужно это храниоище. В той же Ларе есть орм и свои коллекции. Зачем мне еще 1 слой делать, если и так уде все сделано
>>1604939Ну ведь тебе свои запросы через орм нужно где-то записать. А потом изменить, а потом добавить кеширование, а потом добавить сброс кеша, а потом добавить добавление в кеш сразу с добавлением в базуЕсли у тебя есть репозиторий, то в десяти местах, где ты получаешь свою сущность будет написано просто $item = $items->getById($id), а вся техническая часть будет скрыта под капотом. Я уже не говорю про то, что если его не делать, то у тебя будет жесткая зависимость от ларавелевской орм.
Изучаю пхп что-то прям очень похоже на js по основам и видимо не только на него - возник один вопрос - а зачем перед переменными знак даллара? Ну то есть да, нужно так - но нельзя было проще сам язык сделать, чтобы не понижать скорость написания кода? Let/const/var - это ведь гораздо удобнее, если вслепую печатаешь. Доллар слишком далеко от дефолтного положения рук.
аноны, есть тут кто работал с опенкартом?у нюфага есть пару вопросов к вам сразу говорю-гугл не помог
>>1600320$result = array_filter($a, function($number) { return decoct(octdec($number)) == $number;});
>>1605001Переменные платные. 1 переменная - долларМассив - размер массива долларовОбъект - сумма полей и массивов в долларах
>>1605069Я тоже начал рассматривать битрикс, как что-то, что даст старт. Какие подводные? Я конечно пока что на другие вакансии откликаться буду, но что-то везде опыт нужен но я не теряя надежды буду откликаться на вакансии с опытом от года, если в самом описании осознанно не написано о том, что опыт обязателен, а с битриксом не обязательно.
>>1605055дристанул на всю борду. спасибо анон, ты сделал мой день>>1605075ну вакансий море. поищи хоть что нибудь получше. тот же опенкарт или вордпресс если есть, идеальным вариантом будет october cms
>>1604978Почитал статьи. Репозиторий - слой для получения данных с бд, а сервис - слой для занесения данных в бд. Я правильно понял?
>>1605075Подводные в том, работа с битриксом - не разработка, максимум - веб мастер. Путь к работе на основе фреймворков или кастомных решений закрыт.Это не говоря про низкую зп и скотские условия работы
>>1605099> вордпрессА он лучше? Я думал, что это дно дна, почему-то. Вакансий нет, в любом случае - на удалёнку поди без опыта не возьмут. Мой удел - битрикс газонюх. >>1605109> битриксом - не разработкаПишут "разработка сайтов на платформе 1с-битрикс и доработка crm битрикс24". Врут? Ну и если это не разработка - получается мне это не поможет в дальнейшем устроиться в разработку и лучше дальше искать?
>>1605150Лучше сразу искать Symfony/Laravel/Yii(крайний случай).В битриксе уровень кода лаба1.php, только этого кода десятки тысяч строк
>>1605163Так я только начал изучать пхп и как бы он ни был похож на js, надо вникать во всякие тонкости, mysql изучить, до выбора php фреймворка я пока не дошёл. Есть вакансии с пхп, но для них мне ещё пару месяцев бы дома посидеть, а я не хочу. А тут попадается вакансия, где вроде как я научусь по крайней мере мне так кажется всему, что нужно для поиска нормальной работы, так ещё и платят какие-никакие никакие деньги - 3к стипендия за обучение, если пройду если нет, то наверное можно сразу выпиливаться, потом за 10к 3 месяца, потом я уже старший газонюх за 18к и может быть, когда-нибудь я дорасту до 30к и к этому моменту свалю от них. Хотя вроде там кому-то до 80к платят.Суть в том, что на эту вакансию я с чистой совестью подхожу.
>>1605171Ты спокойно найдешь местную конторку, где тебя возьмут стажером на yii, научат пилить круд (львиная доля работы пхп макаки), а там уже рост пойдет, через пару лет на удаленку выйдешь и будешь спокойно пописывать
>>1605171пиздец это че за рабские условия труда такиени за что к ним не иди, анон.или проси чтобы платили как норм стажеру 20-35к на первые три месяца
>>1605001>что-то прям очень похоже на jsДа вообще не похоже. Это ты, скорее всего, пишешь на пхп как на js он позволяет так делать до первого серьёзного проекта.
>>1605346Меня посадили в первый месяц фуллстек проект делать. lara/vue spa. Все делаю сам, общаюсь с заказчиком и серв настраиваю тоже. за 20. Благо проект не тяжелый и заказчик не ебет.
>>1605379Кмк, если кушать есть что - за копейки первое время работаь не должно быть проблемой. Хотя 3м за 10к как то мало. 15 хоть
>>1605385> Хотя 3м за 10к как то мало. 15 хотьНу там не факт, что 10 будет. Там от 10, потом от 18, потом от 35. Думаю 15 можно получать на старте.>>1605289> Ты спокойно найдешь местную конторку, где тебя возьмут стажером на yiiТак что-то не вижу таких вакансий на основных сайтах с раьотой. Вообще мало стажировок, но куча вакансий с требованием года опыта - на них конечно можно и без опыта попасть, но обычно много всего знать надо, больше чем я знаю в данный момент.
>>1605465Ясно, понятно.Можешь забить хуй на 90% требований в вакансиях.Кадровый голод такой, что многие фирмы, где пишут 1-3 года опыта могут взять стажера на вырост.Помимо вак стучи в сами фирмы, пиши на почту, звони, расслылай резюме везде, куда сможешь.
>>1605465Опыт разный бывает. Можешь считать что у тебя он есть, просто это не "опыт коммерческой разработки"
>>1605475> Помимо вак стучи в сами фирмы, пиши на почту, звони, расслылай резюме везде, куда сможешь.Надо бы. Просто я хекка-социофоб, таблетки уже давно не принимаю они уже не нужны, но с ними всё было легче и начать что-то социально активное сложно. Причём на собесе могу легко и непринуждённо общаться, а позвонить/написать - невольно откладываю это. Сегодня создал резюме на втором по популярности работном сайте в городе - там есть потенциально подходящие вакансии, буду им писать. > Кадровый голод такой, что многие фирмы, где пишут 1-3 года опыта могут взять стажера на вырост.Вот им бы стоило вакансии стажёров создавать. А то слабо ощущается этот голод - в конторе, где я недавно был на собеседовании, сказали что один из 15 человек дальше первого, ознакомительного собеса проходит, а чтобы туда попасть, надо уже некоторые задания решить, которые показывают, что кандидат не случайно откликнулся. То есть навыки то могут быть нужные, но стиль работы не тот и они не дойдут до технического собеса а их 2-3 минимум и тз не получат.>>1605483Да, я его указываю, со ссылками и кратким описанием. Но не думаю, что кто-то читает.
>>1605507>То есть навыки то могут быть нужныеС чего ты это решил? Качество решения любых задач, в том числе стажерских, можешь по этому треду заценить. Разброс очень большой. Очень даже может быть здравым решением пропускать только 1 из 15 решивших, если только он справился хотя бы на четверочку.
>>1605661Не, сначала дают задания после отклика, их 10-15 и они проверяют знание стека, используемого конторой, умение решать задачи несколькими способами и оптимально, понимание прочих важных для них штук. Вот из 15 тех, кто выполнил все эти задачи, 14 бракуют до технических собеседований и полноценного тз. У них специфический рабочий процесс и если они считают, что кандидат не подходит, он может хоть сколько лет опыта иметь.
Анчоусы, можете меня поздравить. Устроился пхп-макакой в контору. Зарплата средняя по городу. Но есть проблема. Я толком нихуя не знаю. То есть на базовом уровне могу написать анонимный форум типа базовой версии вакабы. Но постоянное ощущение, что меня слишком рано взяли на работу. Что почитать для правильной организации самой структуры кода? На работе проект, которому 12 лет, ООП там и не пахнет, но вот все равно ощущение, что я тупой
У меня есть два вопроса. На один из них га сайте пхп.нет ответе не написано. 1. printf (); как использовать к многобайтовым русским символам? если (никак) ? "Какие аналоги есть?" : "Анон, молю, подскажи";2. Как можно из пхп открыть другой файл? К примеру, в хтмл можно параметр action="file.php" написать и это сработает. А чот в пхп я пробовал fopen("page.html") и никак.
>>1599358Проверь отладчиком в браузере (F12 на вкладке Script или Debugger), что там формируется и передается в переменной obj>>1599535У тебя SQL-инъекция в коде. Используй плейсхолдеры.>>1599739Вообще, тесты удобно изучать на примере простого проекта ведь.>>1599963Можешь попробовать для начала прочесть туториал в мануале: https://www.php.net/manual/ru/index.phpНо дальше тебе надо еще изучить ООП и фреймворки, язык SQL. >>1600041Если у тебя есть классы, которые наследуются и ты хочешь их хранить в БД, то есть три паттерна: Class Table Inheritance, Concrete Table Inheritance и Single Table Inheritance.Они описаны, например, тут http://design-pattern.ru/index.htmlСамый простой, наверно, это STI.
>>16003161) Если ты понял, что перед тобой не палиндром, то можно выходить из цикла по break2) Ставь фигурные скобки после if/else, чтобы не было разночтений, где там начинается и заканчивается блок>>1600320Восьмеричные числа никак не отличить от обычных, так как в процессе создания массива они все становятся просто числами, без системы счисления. Если у тебя строки ['06', '7'] - то отличить можно, а если просто числа, то никак. Массив содержит просто числа, без указания системы счисления.>>1600434> for ($sumOfCredit += ($sumOfCredit * $percentage); $sumOfCredit > 0тут слишком много действий, и тяжело читать заголовок цикла. Стоит вынести эти действия из скобок в for() и сделать обычными действиями."} else {" пишется в одну строчку.А так, решено хорошо.
>>1605787Рад за тебя, анон. Ощущение, что ты тупой, обязательно пройдет. Просто подумай, что раньше некоторых вещей ты вовсе не понимал, а теперь на хую вертишь играючи и не глядя. И с каждой строчкой будешь все меньше париться, так как будешь получать опыт. Не боись ошибаться, учись на этом.
>>16058121) printf выводит русские буквы, но не умеет корректно их выравнивать и считать ширину текста (он считает что 1 символ = 1 байт, а русская буква занимает 2 байта в utf-8). придется писать свою функцию для выравнивания.2) include/require. Они выполняют код из другого файла, как будто ты вызвал функцию.В HTML с помощью action=... ты не "подключаешь" файл, а указываешь, на какой URL браузер должен отправить запрос с данными формы (и откуда он должен брать новую страницу для показа), когда пользователь нажмет кнопку отправки.fopen "открывает" (подготавливает) файл для чтения или записи в него с помощью fwrite/fread. Он не будет выполнять код из файла.
Спасибо. Значит, выравнивать текст придется не через printf, а через div'ы на странице. > include/requireСработает, если я вызываю не пхп, а чистый хтмл? Алсо. На счет include/require. Можно ли их использовать на каждой странице для подтверждения авторизации?Типа, в одном файле авторизовался, перешел на вторую страницу, которая доступна только есть твой $pass == 'password'из БД.
>>1605828Но я работаю на работе и мне платят за это деньги. Постоянное ощущение, что мне скажут: ты слишком долго и хуево делаешь х, ты нам не подходишь
>>1605847Не изобретай велосипед, авторизация делается либо сессиями в случае твоего встроенного в шаблоны говнокода, либо всякими токенами в случае стейтлесс апи
>>1605847Инклюд подключает кампелированный код, require - в процессе исполнения.Я вообще все шаблоны подключаю через инклюд
Аноны помогите со студентами.1. Грамотный ли это подход, данные из формы сначала отправлять в валидатор, и если данные проходят валидацию тогда уже создавать объект студента и сразу же его отправлять в бд? ОП написал, что мы создаем объект со студентом, а потом уже его отправляем на валидацию, но зачем создавать объект если он не прошёл валидацию?2. Как сделать флеш сообщение об успешной регистрации(редактировании) если у меня в роутах только 2 страницы(сам список и регистрация) отправлять мне нужно же на новую, а фронт контроллер о ней ничего не знает.3. Грамотно ли в контроллере при успешной регистрация ставить сессии и куки через глобальную переменную? Читал, что лучше вообще не пользоваться глобальными переменными. Но как тогда сделать?4. Создавать отдельно хейдер и футер, и затем его подключать в контроллере через инклюд нормальный подход?В общем я чувствую пробелы в понимании работы MVC, но не знаю, где восполнить эти пробелы.
>>1605001Не пытайся искать логику в этой хуйне, ее нет, пых писал какой-то упоротый жирдяй для своей домашней странички, вангую с тех времен доллары и пошли, а были они там, потому что васянскому интерпритатору было так легче переменные находить
>>1605912На хабре читал что от нее прирост в производительности только в теории есть. А на практике чуть ли не в минус идет. Но говорят в 8 версии запилят
>>1606027>только в теории естьага у пыхи же уже производительность как у жабы нечего выжимать(сарказм).многопоток это отдельное бдсм в текущем виде
https://ideone.com/MJT2d9Еще не решил первую задачу в повторениях, объясните я даун или так можно решить? Меня пока что смущает цикл который я сделал, implode не работает почему-то, не могу этого понять. Плюс нет функций для того чтоб сделать первую букву в предложений заглавной, нашел вариант на сайте пыхи. Сейчас осталось добавить пробелы и вроде решил.
>>1605899Вот жеж долбоёбы на ларавеле даже dd ввели для принта.Таблетки прими, шиз. Тесты не везде нужны.
Че ребят как у кого успехи? Олды есть которые заглядывают сюда? Интересно истории какие-нибудь послушать.Сам ~5 лет назад начинал проходить эти ваши задачи про вектор и прочее, потом работа начала появляться на которой не особо нужен был компьютер саенс, паттерны и алгоритмы (небольшие проекты на codeigniter). В общем не особо что-то прям развивающее, а чисто ебашилово молотком и долотоом так сказать. Последние полтора года ебашу аутсорсером на легаси проекте, чувствую что опять болото. Да и платят наверное ниже рынка по большому счету. Периодически заглядываю в тред, но отвечать по большому счету некому, либо слишком простые вопросы, либо не моя компетенция или стену текста адовую нужно писать - просто тупо лень.
>>1606097>Олды есть которые заглядывают сюда?видимо нет. здесь 90% вопросов моих почему то в игнор улетают ))). судя по всему все олды разбежались по другим тредам и языкам>Периодически заглядываю в тред, но отвечать по большому счету некому, либо слишком простые вопросы, либо не моя компетенция или стену текста адовую нужно писать - просто тупо лень.Такая же проблема
>>1606097> Че ребят как у кого успехи?Ищу работу, пока не очень успешно. Сегодня написала контора, мол приходи, оценишь свой уровень - я не откликался на их вакансии, но поглядывал. Но говорят, что это не очень хорошая контора и там надо будет ебашить как черт. Вакансии у них вечно висят текучка?, так что сначала другие проверю, потом к ним схожу. У них там верстальщик требуется - думаю на него то точно подойду. > потом работа начала появлятьсяЧерез какое время?
>>1606097Типичная PHP-разработка. Хорошие конторы, наверное, где-то есть (должны же быть), но я не встречал ни разу.
Сап, двач. Делаю докер-кампот файл для nginx+php.php: image: php:7.2-fpm ports: - 9000:9000 volumes: - ./app:/appТак вот, хлопцы, а если я хочу имидж не php:7.2-fpm, а со своего докерфайла Docker-php, который базируется на php:7.2-fpmМне надо скачать mcrypt. Как мне это сделать?
Парни, запилил таблицу для друга-вкатывальщика, где примерно расписал, что надо знать условному джуну, мидлу и сеньеру, чтобы он понимал масштаб проблемы. Технологии взяты не из головы, до этого я потратил время и прошерстил вакансии более или менее, выписав то, что требуют в основной массе.Помогите дополнить, пожалуйста. Редактирование по ссылке не открываю, чтобы не испортили, пишите ответами тут.Сразу говорю: понятно, что есть вакансии, где на джуна спрашивают как написать модуль для PHP на Си, как настроить кеширование в nginx по памяти или как бы ты оптимизировал sql-запросы, это понятно. Всё, что я сделал - это достаточно приблизительно, исходя из того, что я бы сам ждал от того или иного уровня.https://docs.google.com/spreadsheets/d/1FvHiZp9xZRXMvPM4XKUuyrdR9v5vBEVccFx-mEWhnds/edit#gid=0
>>1606206>Через какое время? Я уже не помню, я мб учил дома и месяцами весь этот начальный учебник опа, но по факту играл в игры, а занимался чем-то полезным по 4 часа в неделю.Хз, сначала пришел в контору в которой была адовая текучка, куча макак делает какие-то там мобильные игры, все это сдабривалось скрытой рекламой для заработка (потом еще вроде как адовый скандал был в отрасли), а пхп отдел из 5 челов должен был лепить под все это дело мелкосайты и дендосы вроде как, ну и внутреконторные админки и всякие отчеты со статистикой. Когда спросили че умеешь - я ответил честно что вообще нихуя и меня взяли. Самым топовым программистом на пхп, помимо тимлида, там без шуток был школьник с 1.5 годом опыта. С одной стороны рили криндж, с другой я мог сидеть и без особых проблем разбираться в любой хуйне. Все понимали что с меня ничего не взять. Правда выдержал я там 2-3 недели всего, потому что ездить было далековато и на общественном транспорте. Кароче ебанули морозы, и я послал стояние на остановке в лесу -35 нахуй.Потом была работа куда уже пришел через несколько месяцев, и там чел в соло делал какие-то проекты и ему нужна была помощь. В целом собеседовал он меня по php, html и css, нарешал я что-то только на php, сам потом перезвонил ему узнать о его решении (именно по этому он меня и взял в итоге, лол). Там уже началось рубилово на codeigniter.Некст работа уже сама меня нашла. Стоило ради прикола запостить резюме с одной тоолько строчкой, что у меня опыт работы на codeigniter, и все - меня самого уже начали вызванивать раз в месяц. Это не тот скилл который нужно учить сейчас нубу офк. Просто как оп советует, берешь какой-нибудь актуальный фреймворк, делаешь на нем маломальский проект, понимаешь как в нем гонять туда-сюда строчки и вуаля, ты более менее можешь искать что-то.В целом по началу всегда ад и конфуз на первых работах как я понимаю у большинства был. Не знаю сейчас понавыпускали уже универы волну специально подготовленных макак или нет и есть ли на рынке джунов огромная конкуренция из-за говнокурсов которые бесконечно форсятся как раз последние 5 лет из каждого утюга. Мб все уже совсем по другому.>Сегодня написала контора, мол приходи, оценишь свой уровень Просто иди и попробуй без сомнений особых. Опять же пока ты не можешь самостоятельно решать бизнес-задачи, то ты сам должен проситься работать за еду. Если тебе скажут что можешь посидеть тут недельку поделать тестовое за бесплатно и позаебывать всех вопросами - соглашайся.
>>1606257Да похуй как это выглядит, главное - суть. Таблица или схема - это дело 15 минут. А изучение - это дело лет.
>>1606252Глянул одним глазом на таблицу - хуета какая-то.У тебя в голове каша. Условный Вордпресс и Ларавел, а так же разные субд - это не звенья одной цепи по которой ты идешь. Это как разные профы в линейке, лол. Можно быть суперспециалистом, который никогда не окунался в modx-парашу, и работать за 300кк в секунду в серьезных проектах, а можно быть "мастер на все руки в каждой cms" и работать за дошик в веб-студии "лидере отрасли", где тебя по факту просто перепродают решать проблемы челиков которые не понимают нихуя в разработке.Лучше бы ты дал ему учебник опа и помогал решать задачу за задачей, повышая уровень сложности, если ты сам конечно чет понимаешь (судя по таблице такой же нубас с кашей в голове, который только через вакансии может примерно представить что там в реальности как устроено)
>>1606259Спасибо за мнение, но у меня все окей с головой. Если ты изучаешь с нуля, то: ты пишешь сначала PHP-код, потом подрубаешь веб-сервер и делаешь сайт на чистом PHP, потом ты берешь CMS, т.к. она ничего кроме этого не требует, а потом ты берешь фреймворк и оказывается, что там нужны паттерны, ORM, GIT и прочее блядство. Это по возрастающей.Ты можешь, конечно, сразу взять фреймворк. И в душе не ебать, как веб-сервер переваривает твой URL, и сразу начать хуярить роутинг. Это полезно, как ты думаешь? Ну, чтобы специалист, насколько про PHP это можно сказать вообще, был всесторонне развит?Кроме того, я не уверен, что есть вакансии а-ля WordPress Senior.В общем, я не спорить сюда пришел. И не принес свою таблицу а-ля "смотрите, это лучшее, что есть в мире!". Я попросил помощи дополнить ее, не более того.
>>1606258Блок-схема удобней, позволяя как создавать связи, так и выделяя области: например выделяя из "разработки сайта" области "фронтэнд", "бэкэнд", которые в свою очередь можно разбить на ещё меньшие части, например "Server Page" и "база данных, в которых будут как параллельные,так и альтернативные пути.
>>1606268Я сам охуел, но я это видел в вакансиях на сеньера. С микросервисами еще понятно, но многопоток - это пушка. У самого большой стаж работы, но я собираюсь на днях пойти и почитать, что это за зверь. Видимо, имеется ввиду, когда тебе надо написать демона на PHP. Что на мой взгляд, уже пиздец.
>>1606271Да, согласен с тобой. Если сделаешь, будет годно. Мне лично лень. Мне надо просто примерно обозначить дорогу для нового джуна и всё.
>>1606097Не то что бы олд, но опыт есть.Сижу на поддержке продукта болото с пыхой и жиквери, разработка идет со скоростью улитки.Между тасками почитываю Чистый код и Чистую архитектуру, пилю пет на современном стеке, прохожу собесы.
>>1606150Чем тебе помочь?Открываешь доку сдека и ебашишь.По всем вопросам пишешь им в техподдержку, подробно описывая проблему.
>>1606272особенность пыхи, хуевая, что каждый скрипт выполняется в отдельном потоке, в той же жабе и тд в памяти поднимаются объекты, висят в ней, треды там чето делают, в пыхе не так, что то распараллелить это костылизмесли языки которые специально сделанные для многопотока или изоморфных приложений которые можно писать не садясь на раскаленный лом, но пыха это хуяк хуяк и в продакшен.
>>1606281Я даже спорить не берусь, я про многопоток в пыхе слышу первый раз в вакансии. Я про это что-то когда-то читал, но это было давно и там прямо писали - НЕ используете пыху для этого и НЕ используйте пыху для написания демонов, ибо она течет и вылетает без повода.С джавой знаком, есть пара проектов на спринге, там вопросов нет, все эти атомики, валотайлы и синки, окей. Но, если хотя бы в одной вакансии встретилось требование многопотока в пыхе, надо это посмотреть, как минимум. В конце-концов, в пыхе, похоже, через пару лет будет строгая типизация (с кривой обратной совместимостью), так что почему бы и нет. Мы же тут не ленивые, да?.. :) Почитать никто не мешает, а на собесе можно и блеснуть знаниями, особенно на джуна.
>>1606262Пс, не хотел показаться уебком. Просто по факту за каждым вторым пунктом этой таблицы стоит огромное количество человеко часов, которые нужно потратить на изучение, и которые выльются ни во что. С таким планом я бы бросил изучение уже на третий день. Нужно принципы учить и подходы, а инструменты конкретные уже следом под конкретные задачи. Я понимаю хочется как-то систематизировать, что бы облегчить себе понимание опять же происходящего. Но пытаться охватить все - огромная ошибка.Опять же призноки каши в голове: каким образом Codeigniter - это синьер скилл, если это во первых достаточно простой фреймворк, а во вторых устаревший на 5-10 лет инструмент? На нем сейчас вакансии будут либо только на поддержку, либо клепать по отработанной схеме инет-магазины какие-нибудь конвеерно. Как у тебя установка пхп на линукс - это мидл-скилл, если это делается еще до начала работы? Ты либо ставишь себе линукс сразу и начинаешь на нем ковыряться и ставишь в первый же день LAMP стек по гайду и уже дальше начинаешь в этом разбираться и пердолиться до бесконечности, либо совсем не паришься и накатываешь себе на винду OpenServer и можешь хоть чередовать обучение/разработку со своей любимой докой-2.Ты либо ныряешь в вордплесс/modx/joomla если это от тебя требуют по работе и остаешься там до того момента пока не одумаешься (навсегда, лол), либо сразу скипаешь это и учишь более интересные и продуманные вещи.Битрикс - вообще либо ныряешь навсегда, либо не трогай - она_тебя_сожрет.webm Ты либо работаешь полноценно на каком-нибудь фреймворке каждый день, и даже при этом и за год не запомнишь все его возможности, и будешь энивей постоянно гуглить документацию, либо не работаешь. Или в чем смысл этого всего вообще? Посмотреть часовой видосик по каждому пункту на ютубе?
>>1606262>потом ты берешь CMSЭтот этап спокойно пропускаешь, т.к. там нечему учиться в плане разработки.>я не уверен, что есть вакансии а-ля WordPress SeniorКак же ты ошибаешься. Есть такие макаки, ебашут сайтики на вп со скоростью конвейера. Натянул верстку, накидал плагинов, настроил и готово.Ничего общего с разработкой на основе фреймворка не имеет.Есть гораздо более адекватный роадмап по бекенду на английском, легко гуглится
>>1606284Я сразу тебе еще раз напомню цель: устроиться куда-то, а не стать йоба-программистом. Чем меньше тир в таблице, тем меньше он требует времени на изучение. Я зря там подписал про джуна-мидла, ибо это не совсем правильно, скорее это тир фирмы, куда ты устроишься.> Нужно принципы учить и подходы, а инструменты конкретные уже следом под конкретные задачи.Понимаешь, я как бы с тобой согласен, а как бы и нет. Представь ситуацию: человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить? Если я ему сразу дам фреймворки, он нихуя не поймет, обделается и забьет.Я скорее пытаюсь исходить не из "как хорошо было бы, если бы ты сначала разобрался вот в этом", а хочу, чтобы человек быстрее пошел на первую работу с пробелами в знаниях.> каким образом Codeigniter > Как у тебя установка пхп на линукс - это мидл-скиллВсё это довольно условно. Я писал с мыслью "пусть сначала попробует то, что нужно, а когда дорастет до сеньера, будет время попробовать то, что можно".> Ты либо ставишь себе линукс сразуТы не поверишь, в студиях до сих пор заливают сайты на хостинг через веб-морду ("файловый менеджер") этого же хостинга. То есть для реальной работы не нужен ни xamp/openserver, ни линукс, достаточно мышкой тыкать.> Битрикс - вообще либо ныряешь навсегда, либо не трогай - она_тебя_сожрет.webmПодписываюсь. Но вернись в реальность! Если берут только туда, где битрикс, неплохо бы его хоть немного знать.> Или в чем смысл этого всего вообще? Посмотреть часовой видосик по каждому пункту на ютубе?Отчасти хотя бы так. Смысл - не знать все на 146%, а пройти собес, показаться уверенным или хотя бы смышленым.
>>1606289> Этот этап спокойно пропускаешь, т.к. там нечему учиться в плане разработки.Да, только вакансий - дохуя.> Натянул верстку, накидал плагинов, настроил и готово.Базару нет, только это не делает тебя хоть где-то сеньером.> Есть гораздо более адекватный роадмап по бекенду на английском, легко гуглитсяСлушай, не в службу, а в дружбу, принеси пожалуйста, я уже уехал и с телефона пишу.
>>1606291если>цель: устроиться куда-тоТо пилишь круд на yii/laravel/symfony и устраиваешься>человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить?Кидаешь ему курсец того же елисеева, где с нуля пишут веб приложухи на фреймворке. Пока не повторит весь куд из курса продолжать нет смысла.>Ты не поверишь, в студиях до сих пор заливают сайты на хостинг через веб-морду ("файловый менеджер") этого же хостингаОт таких товарищей держаться максимально далеко.Должен быть настроен автодеплой, а залив фич через гит флоу.>Если берут только туда, где битрикс, неплохо бы его хоть немного знатьА может не надо туда идти?>Смысл - не знать все на 146%, а пройти собес, показаться уверенным или хотя бы смышленымДля этого достаточно написать круд
>>1606303Бро, извини, я не буду больше с тобой спорить, мы смотрим с разных точек зрения.> То пилишь круд на yii/laravel/symfony и устраиваешьсяЭто смотря куда. У меня были собесы, где я проходил сразу, а были, где меня внезапно ебали о том, как внутри устроен ассоциативный массив.> От таких товарищей держаться максимально далеко.Не согласен. Для первой работы - это опыт. И еще деньги.В общем, если смена работы с грузчика на пхпшника это для тебя "не надо туда идти", то ты не забыл, насколько приятнее работать хотя бы за 30-40к в офисе, чем грузить говно в пятерке :)
>>1606294>Да, только вакансий - дохуяА вакансий кассиром еще больше. Но мы же хотим идти код писать и большой рубль получать?>Базару нет, только это не делает тебя хоть где-то сеньеромСеньером тебя делает способность в адекватные сроки запилить проект с нуля, по возможности удовлетворив все бизнес требования клиента.роадмап прикрепил
>>1606315Так это не роадмап, это просто вилки, откуда и чего начинается. Приоритетов-то нет.> А вакансий кассиром еще больше. Но мы же хотим идти код писать и большой рубль получать?Опять же, если речь про первую работу, мое личное мнение - похуй чего и как они там делают. Нужна: а) зарплата, б) хоть какой-то продакшн опыт. Никто не мешает получить его и через полгода перейти куда-то еще.
>>1606315Заорал. Мне про Java понравилось. Там технологий больше, чем на всей этой картинке. Хуевая роадмапа, короче.
>>1606309>Это смотря куда. У меня были собесы, где я проходил сразу, а были, где меня внезапно ебали о том, как внутри устроен ассоциативный массив.Нормальная ситуация. Особенно по началу много отказов, много непонятных вопросов - вот их и нужно прорабатывать, если они встречаются больше чем в одном месте.>Для первой работы - это опыт. И еще деньгиОпыт - возможно. Деньги - не такие большие для айти.
>>1606315>в адекватные сроки запилить проект с нулясеньором тебя делает возможность из туманных хотелок заказчика высрать решение его проблем, а на крупный продукт с нуля попасть это еще ой как повезти должно
>>1606320Повторюсь и пойду по своим делам уже наконец. Вопрос в получении первой работы. Любой. Для человека, который не знает вообще нихуя. Я всё еще считаю, что выучить WP проще, чем фреймворк, т.к. последний тянет за собой другие знания, на WP занимаются добавлением плагинов в wp-plugins. И это точно проще.
>>1606315Я вот после этой картинки и задумался, почему бы здесь не запилить что-то аналогичное для обучения.. Но она довольно кривая, как мне кажется.
>>1606291>Представь ситуацию: человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить?О, такие стори есть у меня. раз в полгода-год условный знакомый из 5-очки выходит на связь, спрашивает как растет моя карьера, спрашивает что нужно что бы вкатиться и сколько это займет. Говорю ему что усердных занятий в пару месяцев хватит что бы начать ходить по собеседованиям. Скидываю ему учебник ОП-а этоого треда. И говорю что бы решил для начала самую первую страницу (это 10-20минут) и потом подходил с вопросами дальше. И это не какая-то абстрактная таблица с неведомой хуетой, вот тебе френдли учебник для нуба, сриусли. Просто не ленись и прочитай 1 страницу и открой ideone мать твою! ...Через пол года знакомый снова выходит на связь, снова рассказывает как его все заебало в его пятерочке и что готов на что угодно, спрашивает как растет моя карьера, спрашивает что нужно что бы вкатиться и сколько это займет...>Что ему посоветовать учить? Если я ему сразу дам фреймворки, он нихуя не поймет, обделается и забьет.Учебник ОП-а для начала, сириусли, это все равно лишь примитивы и без этого никуда. Это норм старт в любой ситуакции, хоть он у тебя попадет на разработку в яндекс, хоть станет modx-sinior. Это не требует наката линукса и все задачи включая Вектор можно сделать на ideone и подобных ресурсах между делом хоть с телефона - было бы желание. (я сам так делал 5 лет назад, что уж).Зачем ты ебешь себе и другим мозг таблицей, которая не имеет никакого отношения к реальности?
>>1606330> Через пол года знакомый снова выходит на связь, снова рассказывает как его все заебало в его пятерочке и что готов на что угодно, спрашивает как растет моя карьера, спрашивает что нужно что бы вкатиться и сколько это займет...Как. Блядь. Знакомо. И этот, возможно, из этих. Я его учу уже не первый раз, к слову. Прошло уже полгода с начала "занятий", но он еще не написал свой первый тестовый класс. Я составил эту таблицу, отчасти, уже в отчаянии. Мол, вот, держи, учи вот это, сам, без меня, я сделал, что мог.> Учебник ОП-а для начала, сириусли, это все равно лишь примитивы и без этого никуда.Я просто не ебу, что за учебник ОПа, я в этом треде в первый раз и последний год изучал Java вообще, а в PHP работаю лет 10, поэтому мне этот тред нахуй не нужен был и я тут пробегом. Ознакомлюсь, спасибо.> Зачем ты ебешь себе и другим мозг таблицей, которая не имеет никакого отношения к реальности?Ну опять же, на мой взгляд имеет, еще и какой. Я не хотел бы столкнуться с мидлом, которые пишет на фреймворке и не знает, что такое mod_rewrite.
>>1606324>сеньором тебя делает возможность из туманных хотелок заказчика высрать решение его проблемПо нормальному этим лид или пм занимаются. Именно разработчику такой скилл только как бонусный идет.>>1606315>Сеньером тебя делает способность в адекватные сроки запилить проект с нуляТоже нет. Хотя бы потому что адекватных сроков никто в сущности никогда не может заранее назвать. Кроме того условный эникей на вп может в еще более адекватные сроки вложиться. Будет ли он за счет этого хотя бы на уровне условного сеньора на симфе? Нет.Помидор в первую очередь пишет качественный код в проект, который будет жить, процветать, легко улучшаться (другими сеньорами в идеале, но если мидлы и джунами изи справятся - ваще молодец) и этот код не будет обузой и кандидатом на выпиливание. Конечно так можно и целый проект с нуля запилить, но это будет частный случай. Все, кроме этого - бонусы, которые повышают ценность сеньора, но не являются основополагающими.
>>1606353>легко улучшаться (другими сеньорами в идеалеесли твой код может быть понятен только сеньорам, то это хуевый код, идеальный код такой что даже тетя зина прочитав учебник до половины могла его прочитать
>>1606339>Я не хотел бы столкнуться с мидлом, которые пишет на фреймворке и не знает, что такое mod_rewrite.Ну столкнулся и че? У него мб не стояла за пару лет задача которая бы его в это окунула. Повезло пацану что он не пердолился с настройками htaccess и прочей хуетой которая как бы все равно лежит на уровень ниже пхп-программирования.И что - все, зошквар сразу в твоих глазах? Хз вот по мне это все такие маня-стереотипы и подходы, что бы пытаться других людей хоть как-то классифицировать для себя.Зато вот возник прецедент и в этот момент он столкнулся - все, вопрос исчерпан и зошквар снят?
>>1606366> И что - все, зошквар сразу в твоих глазах? Хз вот по мне это все такие маня-стереотипы и подходы, что бы пытаться других людей хоть как-то классифицировать для себя.Ну, кстати, может ты и прав, я утка и не понимаю этого.
>>1606366>>1606368Хотя, в свое оправдание, хотя сейчас на той же Java можно ебашить через спринг бут, но при этом понимание как работают сервлеты и томкат на собесах все равно просят. Зависит от собеса.
>>1606360Пилю ща некий конструктор апи, стараюсь сделать так, что когда меня уволят, то новое апи будет легко собрать даже джуну на которого это скинут. Все больше прохавываюсь в ООП, абстракциях и прочих тайпхинтах, загоняя потенциального дописывателя в такие рамки, что ему просто не в чем будет ошибиться.Хуйнул не то не в том месте? Лови исключение с описанием того что ты сделал не так и где надо сделать. Доставляет этот процесс прям. Некая крупица творчества есть что ли в отличие от повседневных тасков даже.>>1606368Проблема в том что есть огромный масив инфы, который невозможно освоить, и нормально все даже в своем повседневном стеке знать. Типа не нужно зацикливаться на шаблонных понятиях как по мне. Доучить пробелы или нужный под конкретную задачу инструмент - почти всегда довольно легко. Таблицы мифические городить для нубов тоже имхо ошибка.>>1606253>Если тебе скажут что можешь посидеть тут недельку поделать тестовое за бесплатно и позаебывать всех вопросами - соглашайся. А если не скажут, то сам попросись обязательно. Откажут - ну ладно. Но если разрешат, то считай повезло. Главное не слейся, даже если нихуя не понимаешь, спрашивай и гугли. Затупил и нихуя не понятно - попроси совета. Даже если оче стыдно - главное не сливайся так что походил пару дней и исчез (с мыслью о том что недостоин и нужно еще подучить). Глядишь сойдешь за того самого мифического "с огнем в глазах" сотрудника, которого все мечтают к себе нанять на работу.
>>1606376>но при этом понимание как работают сервлеты и томкат на собесах все равно просят. Зависит от собеса.Ребята, которые не понимают что нужно конкретно спросить для понимания, справится ли человек с конкретной текущей работой, спрашивают все что знают сами, что бы не нанять ни в коем случае спеца который будет сильно ниже навыком, ну или стандартную типовую хрень что бы вообще не париться? Ну что поделать. Мы люди - хули с нас взять.
>>1606384Ну, не совсем, это собес в одну крупную галеру, название которой я не скажу по понятным соображениям. Спрашивают это всех. Спрашивают еще и за софт-скиллы тоже.
>>1606360Ты похоже давно не видел ждунов и мидлов. Немыслимо тупят на всем, что сложнее решения в лоб. Из 10 только 1 сможет вообще вникнуть в любую абстракцию сложнее метода в классе, остальные 9 будут заниматься копипастом и даже пытаться вникать не станут. Это на словах и в резюме все красивые с кейвордами в плащах стоят, а на работе оказывается, что код то писать сучары не умеют. Даже когда от а до я решение расписываешь псевдокодом - типа опытные мидлы не могут это в код перенести. Пару раз так и на выход. Вот сегодня какой-то дед травил историю, что почти все пришедшие на собес мидла ларки не знают, как использовать форич. И это уровень макак с популярно фрейма, в целом по больнице получается даже хуже. Вся эта досеньорская толпа вайтишников - обсуживающий мусор, которым скидывается неинтересная и несложная работа. Щас бы ориентироваться на эти хилые умишки, чтоб они не обиделись. Когда кто-то из них начинает качественно расти - его вытягивают и получается еще один помидор, однако это очень редко.А еще я написал про способность улучшить, а не просто прочитать. Могут даже не читать поидее, для пользователей моего кода всегда есть апихи. Те же, кто захочет развивать должны иметь для этого знания, а не только рабочее место.>даже тетя зина прочитав учебник до половины могла его прочитатьТак ты и есть тетя зина, которая хочется чтобы сеньоры писали понятный ей код, потому что вторую половину какой-то брошюрки, названной учебником, осилить не можешь. О каких вообще может быть речь? Никакой книжонки, которая сделает из тебя даже джуна по прочтению не существует.
Вижу тут все-таки идет обсуждение работы, хотя когда-то ОП ругал за такое и гнал в перезвоните-тред, где сидят какие-то депрессивные аноны. Поэтому срошу здесь, я уже как год работаю в проекте на yii2, в основном поддержка, недавно я остался единственным разрабом, и я уже не могу видеть этот код, переписывать постоянно падающие модули, тут еще в компании обработка эксель-файлов очень интенсивная, и вместо веб-итеграций, идет какая-то эксель-интеграция. У меня переживание, а вдруг я совсем закопался, работая один, иногда я не могу даже строчку кода выдавить. Анон, как быть?
>>1606262>потом ты берешь CMS, т.к. она ничего кроме этого не требует, Это пиздец какое сильное заблуждение. Любая CMS обладает собственной логикой (часто очень порочной), собственной структурой (часто неудачной) и собственными подходами к разработке (часто плохими). Для того, что бы успешно работать в рамках CMS нужно хорошо её знать.Дихотомия CMS для нубов, а фреймворк для гуру ложная насквозь. Любой подход требует знаний и опыта. Проблема с CMS в том, что они дают слишком узкоспециализированный опыт, не применимый нигде кроме работы в них же. И именно поэтому тут советуют их избегать.Сам я считаю себя достаточно продвинутым специалистом в не к ночи будет помянут Битриксе. Только в последние 2 года удалось с него немножко слезть. Так вот, для того, что бы совладать с этим говном мне потребовалась херова туча знаний и размышлений. И половина постов о хейте Битры в этом треде - моя. В отличие от хабрапидоров, которые не уважают его в стиле стереотипов, я ненавижу его потому что я с ним работал. Я не могу сказать, что 3 года битры были временем, спущенным в унитаз, но я определенно мог бы их потратить более продуктивно.
>>1606402> Дихотомия CMS для нубов, а фреймворк для гуру ложная насквозь. Любой подход требует знаний и опыта. Проблема с CMS в том, что они дают слишком узкоспециализированный опыт, не применимый нигде кроме работы в них же. И именно поэтому тут советуют их избегать.На первыйз вгляд все верно. Но оказывается, что CMS все же проще и устроиться на работу с ней проще тоже, в отличие от.
>>1606395Читал что это норма. Когда на галере под видом мидлов работают джуны, а под видом синьоров - едва ли мидлы. Тут уже продажники пытаются наебать клиента, пытаясь впарить спеца классом ниже за больше бабок. Не нужно людей за это ненавидеть. Они то и рады что их взяли куда-то "синьорами-помидорами", лол.
>>1606410>Читал что это норма. Когда на галере под видом мидлов работают джуны, а под видом синьоров - едва ли мидлыда так и есть, на сеньорах маржа выше, отсюда и берутся 21 летние тимлиды-сеньоры.хотя по факту то они откровенно не тянут.
>>1606410Это не имеет отношения к набору, дружище. Не важно, что говорят заказчику, набирать могут по совсем другим принципам и из сеньеров делать pm'ов, например. Короче, мимо.
>>1606421>из сеньеров делать pm'овразработка и менеджмент вещи разные, многие с возрастом просто туда уходят, ибо заебало писать код, нельзя делать пма из человека с херовыми софт скилами.
>>1606451ты так сказал как будто пм следующая ступень сеньора, как мидл джуна, это вообще другая ветка.
Все так любят названия джун, мидл, синьер. Но ни одна хуила так и не может привести пример задач, которые решает тот же мидл или синьер. Такая градация если и есть, то только внутри компании
>>1606472Все просто!Помидор ходит по офису с кружкой кофе/стаканом смузи, флиртует с хрюшами, скидывает задачи на паровозов в ИТ компаниях(мидлов).Мидл хуярит сутками по клавишам, метается между желанием сдохнуть и посрать.Ждун просто как маленький щенок бегает по офису и гавкает "ООП хуйня, давайте писать в функциональщине" за что получает леща и идет на свое место до нового прихода гениальных идей в его голову, опционально пишет Хелло ворлд, забирает остатки пиццы с обеда домой.
В свое время начинал задрачивать питон, потом бросил, но получил предсталение. Еще пощупал джанго, посмотрел пару уроков на ютабе. Вроде ничего сложного. Но еще тогда все советовали пыху изучать и яву. И еще в би кидали пасту про питон и кучу бабла. Так вот, снова хочу вкатиться, но для себя, хотя хз, мб и найду РАБоту, а мб буду кворки делать. Кароч. питон или пыха все таки. А в чем суть реквеста еще. На пыхе делают генераторы сайтов, те можно создавать кучу сайтов по шаблонам. Можно что-то делать подобное на питоне. Или лучше делать на пыхе все таки? Ну и попутно, да, что задрачивать лучше.
>>1606545Да, там синтаксис разный. Но суть то одна. Как по мне, пыха ближе к си, визуально. Питон позиционируют проще, хз. Ну нарпимер, на питоне можно написать генератор сайта, или что-то подобное. Ну типо доргена в народе.
Написали с одной конторы, условия устроили. Сегодня звонила эйчарка, побеседовали. Спросила про семейное положение, сказала, что они собирают команду и надо пройти психологические тесты, которые она вышлет на почту. Только после них пригласят или не пригласят на собес. Это норма?
>>1606546для того чтобы сайтики на питоне писать тебе надо сначала его освоить, а затем уже фреймворкепыха же была спроектирована таким образом чтобы сразу сайтики писатьтебе решать
>>1606402>Любая CMS обладает собственной логикой (часто очень порочной), собственной структурой (часто неудачной) и собственными подходами к разработке (часто плохими)двачую адеквата. сам щас работаю со всякими cms и понимаю что если ты джун и многих вещей не знаешь - то эта хуйня привьет тебе неправильные практики. например логику в модели прописывать, как это в опенкарте сделано)))
>>1606579Там три теста на 120 вопросов. Первый прошел, он показал, что я забитый омеган. Мне как-то стыдно это эйчарке слать, она же результаты попросила.
>>1606574> Спросила про семейное положение,Потому что если семья и дети есть - ты не дропнешь работу, как свободный человек. Если тебя спросят, кем ты видишь себя через 5 лет - помни, крайне важно видеть себя в той же самой конторе, просто на должности повыше.
>>1606583>Если тебя спросят, кем ты видишь себя через 5 летА она спросила) Я ответил, что съебу в машоб из этого вашего веба, как только наберу достаточно знаний))
>>1606582> Первый прошел, он показал, что я забитый омеганИнтересно насколько это распространено среди айтишников. > Мне как-то стыдно это эйчарке слать, она же результаты попросила.Ты ведь в итоге можешь получить работу - отправляй. Может она команду омеганов наберёт и будет комфортно работать с ними, в отличие от нормисов.
>>1606574пиздец эти хрюши совсем поехали. а случайно аккаунты на все свои соц сеточки не попросили скинуть? ну чтобы проверить насколько ты адекват. заходят - а там в подписках раковники, на стене пасты про говно, и вот это на аватарке. многие ебнутые галеры так делают, только без твоего ведомаа если закроешь профиль - то сразу все пок пок закрытый человек нам такой нинужон
>>1606586Первый тестhttps://onlinetestpad.com/ru/testview/801-mnogofaktornyj-lichnostnyj-oprosnik-fpiВторые два в виде экзешников для винды, а у меня линух стоит. Придется виртуалку накатывать ептыть.
>>1606603У меня знакомый работает в стартапе. Они там привлекали сатаниста за 200к в месяц на три месяца работы, и то этот хуй еще и совмещал (на основной работе у него примерно такой же ценник был).
>>1606621меня сам факт их наличия смущает, и что это приказ начальства. То есть есть некоторые сомнения в адекватности этих людей.
>>1606601Проходил подобный, только на 300+ вопросов, у психотерапевта. Получился депрессивным шизоидом, склонным к депрессии дополнительно.>>1606614> за 2012 годMmpi с прошлого века используется и остаётся актуальным. Люди же те же.
>>1606625я тебе говорил с самого начала>>1606621дристанул чет аноны, сейчас в шаблоне на проекте внезапно наткнулся на такой синтаксис: <% _.each (model.addresses, function(address) { %><%= address.city %> что это за хуйня и как с ней вообще работать то ? на твиг обработчик это непохоже>>1606591 - кун
>>1606540>Кароч. питон или пыха все таки. А в чем суть реквеста еще. На пыхе делают генераторы сайтов, те можно создавать кучу сайтов по шаблонам. Можно что-то делать подобное на питоне. Или лучше делать на пыхе все таки? Ну и попутно, да, что задрачивать лучше.Чем тебе Django не подходит?
>>1606252Получается пхп программист должен включать в себя фронтендера? Вроде есть вакансии, где чисто фронтенд требуют и пхп не нужно.
Аноны, с пхп на питон/руби/джаву/go не тяжело же перекатиться? Ибо судя по "вступлениям в язык", которые я на хабре читаю - все одно и то же, только синтаксис языка разный. Или я хуйню какую то читаю, или что?
>>1604256>вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёромОчевидно же что наебочка и тебе вообще не заплатят, а под "немного знаете" подразумеваются вполне себе знания вкатывальщика
Шалом, такой вопрос, часто в вакансих вижу язык Go(да и на собесе последнем про него спросили), кто знает зачем пыхеру нужен GO?
>>1607093писал на жабе больше года, за три дня вкатился в пыху(тип мог накидать сайт и тд), нормально-читабельный код писать начал через 3-4 неделиВсе языки похожи(тип паттерны, алгоритмы, ООП, многопоточку ты не изменишь), просто на чем то проще писать под какую то задачу
>>1607222Чем тот же пхп отличается от питона или руби? Или в этой нише как таковой больше востребованы фуллстеки?
>>1607238Да фулстек - это всегда плюс. Но пхп-то изначально был заменой перла, чтобы делать сайтики быстрее. Ключевое слово - сайтики. Там html/css по дефолту знать нужно было. А в наше время это react/vue. Ну и один хер, дешевле нанять макаку, которая и то и то может за +40% к зарплате, чем двух чуваков на x2 денег.
>>1607231>Все языки похожиесли похожа парадигма и синтаксис, дай тебе лисп или эрланг и ты утонешь в нем
>>1607231Нахуй ты из жабы вкатился в пыху, ебанутый? Я пытаюсь наоборот выкатиться нахуй из пыхи, она просто днище.
>>1607093>>1607246Да, скорее всего так. Не могу рассуждать в этом направление(с одной парадигмы на другую), возможно проблема синтаксиса встанет не так остро(тип за недельку разгребешь), прост все языки на которых я писал были функциональный, процедурные или ооп
>>1607251Лоооол, сидишь-пердишь в универе на парах, ждешь чтобы заказчик кость бросил(я помнб тогда вообще за любые деньги работал, тип кому нужна жаба на фрилансе), все друзья писали на пыхе, тип заказов жопой жуй, ща вот второй год сижу на пыхе, с работой вообще проблем нет
>>1607251кст, мой путь был скорее похож на деградациюC + asm вставки для AVR8Потом с++(qt) Java => androidПыхы + js
>>1607257Ставлю свой носок, что ты ничего из этого глубоко не выучил, ни на одной серьезной должности с этим не работал, поэтому и жалеть не о чем.
>>1607257Примерно так же было. Только андроид после пхп на годик поработал, а до пыхи на шарпе. Плюс питон и го недавно добавились.
>>1607259с асм и микроконтроллерами просто поигралсяс++ чисто чтобы комп и контроллер связатьжаба для работы(пару заказов), но язык я старался понять как можно глубже, а не просто кодитьпыха - здесь дольше всеготак что, на нормальном уровне только пыха и малеха жаба, но все равно полезный опыт, тип понимание во что превращается код и как он выглядит после компиляции(asm), тип жаба дала основательное понимание ооп, а на пыхе патерны и уже нормальная разработка
>>1607263Ну нормич, в принципе. У меня, на самом деле такой же путь примерно, от C++ в школе до PHP сейчас плачетДругое дело, что пхп, вроде как, "глубоко" и невозможно знать. Вот, например, джавку - можно. Люди кодят на джавке и не знают, чем аррейлист отличается от линкедлист и почему, а в пыхе просто берешь и хуяришь.Особенный разрыв у меня вызывают паттерны в php. Вот нахуя они там, если пхп выполнился и умер? Я на нем давным давно пишу и до сих пор не понимаю, нахуя их знать? СИНГЛТОН в пыхе, блядь, ну серьезно? Какая разница? Если бы это было c/java/c# приложение, которое висит в памяти, то там и правда нужен синглтон. А тут синглтон получается из любого класса просто потому, что пхп завершается после выполнения задачи.Короче, ладно, чото меня понесло на ночь глядя, пойду спать.
>>1607265НУ смари, чисто что сейчас смог вспомнитьВсегда использую фабрику в API, всегда юзаю команду для js(если в целом о веб), и вот не знаю можно ли назвать реализацию одного статик метода синголтоном
>>1607264Не видел, искать не стану.Не обязательно пыхеру, вообще бекендеру пригодится. Микросервисами на нем можно с легкостью закрывать узкие места, требовательные к производительности. Если микросервис простой планируется, то можно даже не выбирать особо, а сразу писать на го сейчас, не прогадаешь.Заметная вещь для пхп - roadrunner. Возможная замена php-fpm, хотя на данном этапе многим пхпшникам работать с ним тяжело и непривычно(но многие пытаются), как дело с ним дальше пойдет посмотрим.Я и роадраннер юзаю и микросервисы на го попиливаю.Далее лирика.Некоторые компании сейчас решаются полностью переходить с пхп на го. Правда как по мне это преждевременный шаг, но мир мое мнение не изменит. Перекат опытного пхпшника на го происходит прямо с места, язык очень прост, поэтому это вероятный вариант, куда тебя жизнь и мода заведет в дальнейшем по беку. Даже сейчас в го каждый третий наверное перекатился с пхп.
>>1607266> Всегда использую фабрику в API> всегда юзаю команду для js(если в целом о веб)Чего?> и вот не знаю можно ли назвать реализацию одного статик метода синголтономПри чем тут вообще один статик метод и синглтон? Что за шизу ты написал?)))000
>>1607266> команду А, блядь, я наркоман, я сначала подумал, что ты про какую-то консольную команду (npm start, блядь, какой-нибудь). Но при чем тут АПИ и фабрика - так и осталось загадкой.
>>1607270Последнее это попытка пошутить, сори(-------------Про команду, это тип когда ты навешиваешь он-действие и потом разбираешь с чего оно прошло(самый банальный пример) Команда — это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.-------------Фабрика в апи, тип пришло что то на вход, ты определил что и создал тот или иной класс, а методы одни и тежи вызываешь тиФабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
>>1607266он тебе рассказывает что любая операция в пыхе идет как отдельный тред и падает а ты ему про апи
>>1607274А, я понял о чем ты, окей, сорри. Уже пол второго, в глаза ебусь. А нахуй тебе создавать тот или иной класс в зависимости от того, что пришло из апи?
>>1607277мб я что то не оч понимаю, то просьба пояснить, но когда у тебя идешь лапша из вызовов классов, то патерны нужны для больше читаемости, я так предпологал
>>1607279Ну что-то вроде того, мои стенания были скорее о том, нахуя некоторые паттерны именно в пхп. Они там (для меня) выглядят как кобыле пятая нога.
>>1607278ну тип я помню делал такие конструкции,пришел запрос в гет параметре у тебя название метода(тип спарсить что то или еще что), ты вызвал класс который нужно(исходя из гет запроса, например через switch вызвал нужный класс), а потом с ним идут операции типовые
>>1607279>>1607277Я вот еще одну штуку не понимаю, например, прямо наболело. На кой хуй нужен принцип Барбары Лисков, если в наше время уже есть юнит-тестирование (и вообще тестирование)? Ну нахуя он, ну нахуя, блядь?.. Короче, ладно.
>>1607279это особенность рантайма пыхи, там нет тредов выполнения как в жабе, скрипт выполнился и умер, потом встал новый и умер и дальше, потому нет и многопотока толком.
>>1607283Это какая-то конкретная задача, видимо, может там так и удобнее, не знаю, короче. У меня ощущение, что мы не про фабрику, а про банальный полиморфизм.
>>1607278свитч (getParm )case getParam: $a = new Что-тоcase getParam: $a = new Что-тоcase getParam: $a = new Что-то$a->getName();$a->getAge();echo все говноЕсли очень приземлено или мб я даун и назвал это фабрикой
>>1607289Эээ, нет, это не фабрика, ты просто свичем создаешь. Мог бы и ифами, мог бы и иначе, это не делает такой код фабрикой.
>>1607294Я скоро свалю из треда и опять будете разбираться какой фреймворк лучше и как запустить PHP, не переживай, хахаха
>>1607289Дополню >>1607295Вот тебе пример фабрики на пыхе, найди пять отличий, как говорится )<?phpinterface Product{ public function GetName();} class ConcreteProductA implements Product{ public function GetName() { return "ProductA"; }} class ConcreteProductB implements Product{ public function GetName() { return "ProductB"; }} interface Creator{ public function FactoryMethod();} class ConcreteCreatorA implements Creator{ public function FactoryMethod() { return new ConcreteProductA(); }}class ConcreteCreatorB implements Creator{ public function FactoryMethod() { return new ConcreteProductB(); }}// An array of creators$creators = array( new ConcreteCreatorA(), new ConcreteCreatorB() );// Iterate over creators and create productsforeach ($creators as $creator) { $products[] = $creator->FactoryMethod()->getName();} header("content-type:text/plain");echo var_export($products);
>>1607298Ну и за методы с заглавной буквы и не отвечающие требованию "это должен быть глагол", надо убивать нахуй, конечно. Как этот код пролез в Вики, блядь, вообще...
>>1607299Ты еще почитай, например, когда лучше применять билдер, а не конструктор. Ну, в общем, тебя ждет большой удивительный мир, и это хорошо )
>>1607294есть такое easy to learn hard to master сам столкнулся с ним когда начинал жабу, базовый язык простой как три копейки, но из-за огромного стека фреймворков багаж необходимого пухнет как баул на рынке в 90х, так и с обратным принципом когда начал жевать кложуру, ебать как это так код в виде аст дерева, как писать код и не писать мегатонну хуеты к нему, почему обход одной функцией, это дробило мне мозг а потом пришло просветление.
>>1607305Здесь - никому, а на собесах нужны :) Да и вообще, чем больше знаешь, тем лучше ты можешь писать код, независимо от языка. Я когда про паттерны лихо заявил а-ля "нинужна!", я только синглтон имел ввиду. Я бы еще несколько разных туда же в "нинужна!" приписал (обсервер, например, в пыхе он смотрится СТРАННОВАТО), но в целом паттерны - это хорошо.
>>1607304а вот честно, я так что задумываюсь о последних проектах, чистоте кода, патернах, чаще всего я вижу это тяп ляп и в продакшн(тип во многих компаниях), один чувак сказал, что пока ты тут будешь правильную архитектуру мутить, конкурент уже приложение состряпает и поэтому все пишут говнокод, так что у меня двоякое чувство про изчение этого всего, может только если для души...
>>1607304Да там и саму джавку можно учить годами, похоже. Я хотел пройти тесты OCA/OCP (оракловские сертификаты на знание джавы). От функциональщины у меня мозг просто сломался и вытек. Я ее дрочил-дрочил, все эти би-консьюмеры, сапплаеры, стримы и прочее дерьмо. А когда решил пройти демо-тест (не настоящий даже!), то я чуть не заплакал - я просто _не могу_ понять, что будет в результате выполнения запутанного функционального кода, просто, сука, НЕ МОГУ.
>>1607308Угу. А когда твой конкурент через год сделает продукт лучше и работающий правильнее, то ты будешь локти кусать, т.к. ты свой говно-код уже поправить не сможешь никак, не начав писать с нуля. Почитай про проекты, которые от этого загнулись. ВНЕЗАПНО, например, официальный клиент ICQ. И у меня есть серьезные подозрения, что многие проекты мелко-мягких испытывают эти проблемы прямо сейчас, например.
>>1607309в жабе куча теор. говна, я когда к собесу готовился, я думал захлебнусь от всего этого, >>1607310мнение не мое, а чувака на которого работал, я так понял он про то, что главное пораньше запуститься, а тип дальше хоть потоп
>>1607308дело даже не чистоте, дело в костылях, многословности, я накладываю эти слои абстракции, а потом я увидел что есть что то где нет этих фабрик которые делают фабрики, писать приятно.>>1607309это даже не функциональщина, это огрызкимногопоток в мутабельном языке это боль, изоморфное приложение это как сесть на раскаленный лом.
>>1607308У меня есть просто охуенная история по этому поводу, кстати. Прямо вот из первых рук. Напишу и пойду спать все-таки.Короче, года два назад устроился в одну контору. Они там мутили супер-мега-saas-приложение на пыхе в стиле "нам надо сделать это очень быстро и в продакшн", не буду раскрывать подробностей, травлядианон. Так вот. Мне дали двух джунов, задачи и сроки, сказали - ебош.Смысл был в том, что у юзера очень много всяких настроек, он может и такие галочки поставить и сякие, они все перекрывают друг друга по бизнес логике, от каждой из них меняется что-то в рассчетах денег и так далее. Короче, очень запутанно.Когда я понял, что нам медленно приходит пиздец, т.к. изменения в одном месте влияют на какой-то вообще десятое место и человеческим мозгом уже разобраться не получается, как это так выходит, я начал бить тревогу и требовать ввести хотя бы регрессионное юнит-тестирование, иначе мы просто не сможем даже узнать, что новые правки что-то сломали.Мне сказали, что это долго-дорого, а значит нинужно. И вместо этого выкатили еще кучу всяких новых фич в разработку.Через полгода проект дошел до такого состояния, что внести правки было просто невозможно. Чинишь тут, ломается там. Чинишь там, ломается где-то еще. Вносить новую функциональность стало никак.Мы еще 2 месяца ебались и пытались все исправить (тесты нам писать так и не дали), после чего я просто дропнул эту контору.Запомнился один момент, когда мы под какого-то клиента срочно-срочно перепиливали кусок до глубокой ночи. На утро состояние проекта было такое: старое сломалось, новое работает через жопу, что делать, непонятно, сроки - вчера.Ну и отдельным пиздецом шло то, что мне приходилось день и ночь ревьювить код джунов, ибо этот код - это был пиздец. И они относились к работе на отъебись, а я не мог их даже премии лишить в качестве поощрительных мер, не то, что уволить. В общем, это был какой-то ад, блядь. И проект в итоге сдох, конечно.Наверняка, я как тимлид тоже накосячил много, но я хотя бы понимал, к чему все идет. Но позиция руководства а-ля "это же всего лишь ПХП, вы ПРОСТО пишите код и ПРОСТО добавляйте еще тонну функционала со сроками позавчера" меня убила, никогда такого не видел.
>>1607312> это даже не функциональщина, это огрызкиНу я кроме джавы и пыхи ничего толком не знаю, на си - только баловался. Функциональщину в джаву подвезли по принципу "чтоб было как у всех", насколько я помню.> изоморфное приложение Я сейчас загуглил, пишут, что это приложение, когда сервер может рендерить фронт. Чо? Пояснишь?
>>1607316>Запомнился один момент, когда мы под какого-то клиента срочно-срочно перепиливали кусок до глубокой ночи. На утро состояние проекта было такое: старое сломалось, новое работает через жопу, что делать, непонятно, сроки - вчера.ХАХХАХА, такая жиза
>>1607312> мутабельном языкеИ вот это поясни, пожалуйста. Я понимаю, что такое мутабельный-иммутабельный объект, например, в концепциях того же String/StringBuilder в джавке, но что такое ЯЗЫК?
>>1607316>Чо? Пояснишь?просто пример есть некий тяжелый сервис, скриптов много и ты видишь какую нибудь крутилку при загрузке, изоморфное при первом запуске делает это на сервере и отсылает браузеру, который в это время фоново поднимает скрипты и нет лага при запуске, когда страница открылась а скрипты нет.
>>1607319То есть мы говорим про обычный Server Side Rendering? А почему это называется таким умным словом "изоморфное"?
>>1607321потому что дальше оно работает на клиенте как обычное приложение и на сервере и на клиенте.>>1607318я создал список 1 2 3 добавил к нему 4, список не изменился, а функция конж вернула новый список, не меняя старый.
>>1607321>>1607321Выдержка с хабраВ 2011 году Чарли Роббинс сформулировал это так, что под изоморфным мы подразумеваем тот код, в котором каждая взятая строка может исполнятся как на сервере, так и на клиенте. С небольшими исключениями.Выглядит это все так, что у нас есть браузер, есть фронтенд-сервер (выделяется отдельно), и есть старый привычный бэкенд-сервер. Это может быть даже база данных без какого-то сервера. Браузер обращается к фронтенд-серверу, тот может обратиться за данными куда-то к старому серверу либо к базе данных, получить данные.Далее он может сформировать полный HTML, отдать какой-то критичный CSS, который необходим только для рендеринга этой страницы, а не, как в случае с SPA, для рендеринга всего приложения, которое может вполне вам понадобиться.И в конце отдать JS bundle. В этот момент у нас будет собран на клиентской части и поднят фронтенд-клиент, который в свою очередь дальнейшую коммуникацию может осуществлять с бэкенд-сервером предыдущим, допустим, через RESTful API.
>>1607324Я может совсем отупел, но> котором каждая взятая строка может исполнятся как на сервере, так и на клиенте.Что это за хуйня. Если буквально, то весь код должен быть написан на JS и бекенд на ноде, блядь? Или я отупел все таки.
>>1607322> я создал список 1 2 3 добавил к нему 4, список не изменился, а функция конж вернула новый список, не меняя старый.Ты хочешь сказать, что есть языки, где все объекты иммутабельные или что?.. Я ничего кроме пыхи и джавки не знаю, там ты можешь кодить как хочешь в этом отношении.
>>1607331тут с картинками https://habr.com/ru/company/oleg-bunin/blog/319038/Слухайте, мб кто шарит, а какие есть еще подходы для HighLoad?Ща просто проект взяли, обещают до 10к запросов в день, тип как сделать так чтобы сервак не лег и при этом сбалансировать все(время/производительность), мб статью на хабре или еще что, а то не знаю куда сунуться Есть пара мыслей про очереди или Round robin DNS(тима зеленая так что накидывайте даже что то очевидное, мб мы этого не знаем)
>>1607334Ну я, может быть, по дефолту беру в качестве клиента - браузер. Мы же в пхп треде. В чем подвох, объясняй давай, я спать хочу )))000
>>1607333>10к запросов в день.Это очень мало. Даже в минуту это не много. Разве что у вас на каждый запрос выполняется какой-то тяжелейший пиздец.
>>1607332да все объекты иммутабельны, они не меняются, если х = 5 то оно и будет 5, а если ты ниже напишешь что х = 6 то оно просто затрёт предыдущее а не поменяет.
>>1607338по запросу идет поиск по карте, довольно тяжелый, около секунды ответато есть, забить, и написать обычный код особо не парясь(сказать купите сервера по мощнее)?
>>1607339> для серваков за 160р это хайлоадВ смысле, блядь? Хайлоад - это хайлоад. Говно-сервер - это говно-сервер.
>>1607343не особо шарю, думал что highLoad это просто высокая нагрузка на серверна сайтах обычно написано что-то вродеЕсли Ваш сайт не справляется с нагрузкой — все, теперь Вы в клубе highload.
>>1607344Нууу... Слушай, ну да, хайлоад - это высокая нагрузка. Только обычно это что-то в духе "100 миллионов обращений в сутки", а не 10к. И речь там идет о том обычно, когда просто добавляя железо (нормальные сервера, а не говно-виртуалки) ты не можешь решить проблему какого-нибудь "узкого места" в своем говнокоде.
>>1607349Да, блядь, даже сказать нечего. Что такое нахуй "перемалывало" данные? В мясорубке или что? Ты наркоман, дружище, или пьян или чего?
>>1607345слухай, а можешь просто терминов накидать из области распределения нагрузок(или статью или просто наводочку какую-то), ну тип у меня есть 5 дедиков, как между ними распределить нагрузку например?
>>1607352Извини, я в этом не разбираюсь. Самый сильный проект, над которым довелось работать, это новостной сайт с 2 миллионами посещений в сутки. И там он спокойно работал на одном (но производительном) физическом сервере вместе с базой данных даже, просто всякие кеширования в nginx были настроены правильно и всё. Мне даже рассказать нечего особо про этот проект, сложных запросов даже не было (select where, update where, пара джоинов, нечего оптимизировать, короче).
>>1607352Алсо, сейчас работаю над проектом, где как раз около 10к посещений в сутки, он вообще на виртуалке крутится и не пердит, всё окей, хотя накручено там будь здоров (и должно бы уже тужиться, но нет). Так что я хуй знает. Если что найдешь - кидай в тредю.
>>1607350пишешь ты дурачек распаралливание и тебе нужно колдовать с приоритетом, потоки нужно синхронизировать, данные надо копировать, какие волатилы какие нет, в мутабельности если наебешься они начнут давать кашу и ты будет копать как джамшут ища где ты объебался.в иммутабельности у тебя вообще нет эти проблем, ни одной блядь, ты просто настраиваешь ссылочные типы, для больших систем или атомы если много не надо и все блядь, и не парится что какой то поток изменит переменную не так или не вовремя и все остальные потоки получат хуйню.
>>1607353Я стараюсь что то читать, смотерть по этой теме, но реально не работал пока, вот что слышалRound robin DNS - тип разные выдавать ip адресаСовать в очередь и оттуда забирать как только обработал и так контролить потокиЕще про БД - про ноды и репликацииПросто тема интересная и я уверен пригодится, я так то зеленый, тупо третий год на фрилансе сижу какие то конченные проекты выполняю
>>1607357Мы может о разном...> Round robin DNS - тип разные выдавать ip адресаА при чем тут хайлоад? Это ж обычный cdn, если я правильно понял.> Совать в очередь и оттуда забирать как только обработал и так контролить потокиИ какая разница, если у тебя эта очередь под нагрузкой забьется и последний вставший будет ждать 10 лет?А так да, тема хорошая, изучай.
>>1607361хых, материала и направления бы кто подкинул>А так да, тема хорошая, изучай.Round robin DNS - я так понял, у тебя 3 дедика, а с dns сервера ты просто выдаешь их последовательно, тем самым распределяю нагрузкуCDN просто статику выплевывает по примеру какой нить jquery библиотеки
>>1607362> Round robin DNS - я так понял, у тебя 3 дедика, а с dns сервера ты просто выдаешь их последовательно, тем самым распределяю нагрузкуА, ок. Мне это известно как "балансирующий сервер" или балансер или типа того. Теперь понял, о чем ты. Да, это хайлоад, базару нет.В общем, чтобы ты совсем обиженный не ушел, загуглил за тебя. Попробуй поискать лекции с этих конф: https://www.highload.ru/
>>1607364>>1607362> а с dns сервераРазница между нами, кстати, в том, что я читал о другой схеме: днс всегда указывает на один сервер, твой. Но уже он следит за нагрузкой и вызывает самый менее нагруженный дедик, где уже реально находится бекенд. Что-то вроде прокси-который-следит-за-нагрузкой. Как организовать - в душе не ебу, только читал.
>>1607364хах, так это я оттуда это и услышал, там чуваки могут 2 часа тереть что сфинкс лучше эластика, или лекция по снижению нагрузки где чувак очевидные вещи час затирает(по типу не пиши 2 вложенных цикла без необходимости), так что это тоже не панацея от незнания в области хайлоад
>>1607365а ты не больше времени потеряешь на доставку пакетов, вики вот что говорит: В простейшем случае Round robin DNS работает, отвечая на запросы не только одним IP-адресом, а списком из нескольких адресов серверов, предоставляющих идентичный сервис. Порядок, в котором возвращаются IP-адреса из списка, основан на алгоритме round-robin. С каждым ответом последовательность ip-адресов меняется. Как правило, простые клиенты пытаются устанавливать соединения с первым адресом из списка, таким образом разным клиентам будут выданы адреса разных серверов, что распределит общую нагрузку между серверами.
>>1607367Луль. Я вообще лекции не люблю, одна вода обычно и нихуя непонятно и конкретики нет. Я попробовал книги на амазоне глянуть, нихуя нет тоже. В общем, я тоже по этой же причине в свое время забил на хайлоад - слово громкое, а конкретики как-то и не найти.
>>1605860>>1606151>>1607372Синдром самозванца. Я уже лет 10 работаю и до сих пор все время жду пинка под зад, но, что характерно, в итоге ухожу обычно сам.
>>1607376Исправить текст и предложения (Сделать первые буквы в предложений заглавными) и расставить пробелы после знаков препинания.
А где вообще есть нормальная инфа по регуляркам, а то я читаю документацию на сайтах с онлайн редактором, а на сайтах какая то слишком она базовая, тип чтобы комплексно, я пытался пройти курс теории рег. выражений из теории алгоритмов, но как то не пошло, че то дедок сложно все объяснял?
>>1607384Что за допрос внезапный? Ну насколько я знаю ООП это исплользование объектов, в которых заключена информация для использования на протяжений всей программы. То есть мы берем объект, в нем вся нужная нам информация которой можно манипулировать. ООП не знаю. Вот собираюсь изучить.
>>1607386А, окей. Я уж хотел тебя подловить, но ты вообще дно. Вопрос был наводящий, который должен тебя заставить задуматься, что лучше - дрочить рандомные задачи, которые никому нахуй не нужны или изучать то, что спросят на собеседовании. Удачи.
>>1607389Тут спорить нет смысла. Решать задачи обязательно, плевать какие. Они помогают закрепить материал и развивают мышление в этом направлений. Без разницы какие задачи. А если спросят на собеседований о какой то теме я её уже буду знать на автомате. Мне не нужно получить крутую работу, мне нравится то что я делаю.
>>1607390ухххх, подловил, ну если придраться, то это тоже CLI.Я про то что я свою жизнь без ООП уже не представляю и если чувак вкатывается в прогу, то надо первом на эти вещи смотреть мемас на эту тему, с которого я долго орал https://github.com/torvalds/linux/pull/335
>>1607391Да хуйня это все. Просто берешь и пишешь проект. Можешь получать тот же кайф, только все навыки будут "боевые", а не абстрактные, непонятно кому нужные.>>1607392Ну, ладно, я просто доебался, ты прав, без ООП уже даже не плюнуть никуда, в объект попадешь.Да, я тоже долго орал с long long :D
>>1607394Ты меня никак не переубедишь. Понимаешь, я настолько конченный, что решаю это всё в Виме, на который я устанавливал плагины и вручную устанавливал зависимости.
>>1607400Я занимался этой хуйней, когда мне было 20. Сейчас я использую то, что действительно удобно и не занимаюсь хуйней. Короче, ты не про работу, ты так, дроч для себя, пока родители кормят, я понимаю. Тогда уж лучше учи нормальный язык, а не пхп.
>>1607402Ну я тебя понял, нужно как то стремиться монетизировать изучая то что используется на рынке, так?
>>1607402Ты какой то ебаный ноунейм который несет хуйню. Не ебу чего ты добился, но явно не результатов с таким мышлением. Ты наверно один из вкатывальщиков? Что хуево да?
>>1607404Нет. А вот ты несешь хуйню, это уж точно, вим, хуим. Ебанутый, не?>>1607403Если хочешь вкатиться - ясен хуй, надо использовать то, что на рынке. Если не хочешь, то похуй, хоть дрочи вприсядку.
>>1607405Ну понятно всё с тобой, обыкновенный додик. Заебись вкатился? Как в конторе? Ебут нормально? Как полёт? Сколько таким говнокодерам как ты башляют? Ммм.
>>1607406Да все хорошо, спасибо, что спросил. А по поводу вима, был у нас один фронтендер в команде, который работал через вим и считал себя очень крутым, когда на ретро обсуждали вопрос, что неплохо бы иметь единый кодстайл и решили попробовать сделать это через плагины к IDE, всем было смешно и забавно, ему особенно.>>1607407Да конечно не могу, расслабься уже, шизик ебаный.
>>1607428Переменная $paymentTotal объявлена в цикле for и видно её только там. При выходе из цикла переменная пропадает. Тебе нужно объявить её в теле цикла. В функций у тебя так же идёт возврат двух значений, после того как выполняется выражение $paymentTotal, следующее за ним выражение return $month пропадает, потому-что за ним успевает первое, которое завершает функцию. Тебе нужно объявить $paymentTotal в теле функций, либо $paymentTotal = null, либо $paymentTotal = 0. Почитай как тебе уже сказал анон про области видимости и очередность исполнения. А так же немного про функций.https://www.php.net/manual/ru/language.variables.scope.phphttps://www.php.net/manual/ru/functions.returning-values.php
Аргументом в функцию-обработчик передается только один обьект - $exception. Однако затем происходит обращение к методу на обьекте $e: error_log($e->__toString()). Анон, подскажи, как подобное возможно. Откуда в функции взялся обьект $e?
Блин, как вы заливаете базу данных на сервак?А то у меня база данных из 5 таблиц, сохранил в файл экспорта SQL - всего 50к строк.База примитивна - там даже связей нет.И не могу нормально залить - на хостинге phpMyAdmin - нажимаю экспорт загружаю файл. и через какое-то время проблемы (в основном почему-то MySQL ломается). и дело не хостере - делаю тоже самое в WAMP - так один раз вообще вынесло весь MySQL пришлос переставлять.Вот сейчас на хостинге при открытии любой базы или таблицы (не только залитой а вообще в том числе старых) пишет ошибки про Undefined index: HMAC_secretвот примерно так:https://pastebin.com/CKbgp94vЯ не понимаю что не так и как теперь исправлять (это на рабочем хостинге - неужели тоже похерило)
>>1607229часть функционала с пыхи переводят зачастую сейчас на го. связано это с тем что дает возможности которых нет в пхп, а все заново собирать с нуля это не варик
Как можно сайтики тестить?Вот у меня есть ламповая тудушечкавнутри она с mysql работает, и я хочу проверить как оно вообще будет работать при 1000/10000 запросах, сервак xampp на шиндоус.Пока я только додумался на жс тестик написать чтоб оно само формочки заполняло и кнопочки нажимало.
>>1607452Скорее всего проблемы с конфигурацией БД у тебя на локальной версии и в проде, надо внимательно проверить версии, настройки, доступы. И еще лучше работать через консольные команды: mysql -u username -p database_name < file.sql
>>1607452Похоже на баг в PhpMyAdmin, попробуй другую версию или другую программу вроде adminer. Или заливать дамп из консоли (если умеешь): cat /tmp/dump.sql | mysql -hhost -uuser -p database_nameЕсли дамп сжат gzip: cat /tmp/dump.sql.gz | gunzip | mysql -hhost -uuser -p database_name
>>1607452mysqldump -uuser -ppassword db_name > file.sqlmysql -uuser -ppassword db_name < file.sqlЧего ты мучаешься, блядь.
Привет пхп, делал задачку про заглавные буквы и сейчас я не понимаю, как троеточие в регулярку засунутьhttps://ideone.com/SY7llL вот мое решение, у которого возникли проблемы
>>1607524apache benchmark (просто долбит запросы в одну страницу, совсем простая штука)siege (делает запросы по списку)Yandex Tank (навороченная штука с админкой): https://yandex.ru/dev/tank/Должен предупредить, что логично тестировать нагрузку не на windows, а на линукс (обычно сервера на нем работают). Логично тестировать не примитивное приложение, а что-то посложнее и ближе к реальности.В идеале запросы надо запускать с другой машины, и обеспечить между ними достаточный канал связи.Но в общем-то, стоит попробовать, хотя бы чтобы научиться.
поругайте за код и объясните как лучше написать :c<?php error_reporting(-1); header('content-type: text/plain; charset=utf-8'); $text = 'А роза упала на лапу Азора'; $result = ''; $text = mb_strtolower($text); $text = str_replace(' ', '', $text); $lenght = round((mb_strlen($text)/2), 0, PHP_ROUND_HALF_EVEN); for($i = 1; $i <= $lenght; $i++) { if(mb_substr($text, $i-1, 1) != mb_substr($text, -$i, 1)) { echo 'это не палиндром... :c'; break; } else if($i == 10) { echo 'это палиндром!!1'; } }?>ну или вот https://ideone.com/xrUXeG
Реквестирую помощи. Короче. Есть несколько файлов: 1. логин/регистрация2. список сообщений3. Страница с формой добавления сообщения. Все работает, как и должно на стороне php. Но есть один нюанс (как в анекдоте). Хтмл-формы стакаются, блять, при переходе от файла к файлу. Залогинился -> форма с логином пропала, показались посты через инклюд ("посты пхп"). Ок. Но потом, при отправке поста у меня остается форма добавления текста и список постов. Мне надо, чтоб форма ввода убиралась и показывались только файл с постами. Как сделать?
Нихуя себе блять.Ковариантность и контрвариантность 600 лет ждал блядь. Сколько я граблей об это говно сломал.Типизированные члены тоже пушка. Правда не понятно почему callable нельзя.Расширения на сиське тоже охуенно.Предзагрузка тоже пушка.Блядь, да пых становится прям охуенным языком
>>1607829Нет бы знак доллара убрать при объявлении переменной.> стрелочные функцииКак в жс? Делали бы сразу синтаксис в точности как у жс, было б удобнее.
>>1607221> Очевидно же что наебочка и тебе вообще не заплатятПочему не заплатят? Особенно если> под "немного знаете" подразумеваются вполне себе знания вкатывальщикаЕсли что, под стажёром я не имел ввиду работу без оформления, а минимум зп 15к - нельзя разве себе выбрать вкатыша и обучить его за эти деньги? Особенно учитывая, что откликнутся многие, а выберут того, кто уже более менее разбирается.
А ооп для пхп будет таким же, как и для жс? Это же подход к программированию в отрыве от конкретных языков?
>>1607947Есть объект, в нем ссылка на радотилея, цепочка может быть длиной .И когда ты какой-нибудь туСтринг вызваешь он проходится как по списку, до того как не найдёт
>>1599201 (OP)Yii2-аноны есть итт? Аноны, есть ли либы/софт для того чтобы все таблицы+связи из дампа постгрис базы превратить в миграции?
>>1608175Есть какая-то ХзХуйня но я ее не пользовался, так что хуй знаетhttps://github.com/Hzhihua/yii2-dump
>>1608217Это находил, но пока что не юзал, последний комит пару лет назад и их количество вызывает опасение, может есть какой-то общепринятый инструмент для таких задач? В любом случае - спасибо за ответ, анон.
>>1607827Спасибо. Помогло отчасти, но завтра узнаю, в чем были причины. Так же спасибо анонам, которые рассказали про сессию и печенье.
Аноны, помогите. Юзаю Eloquent , без ларавелНе понимаю как сделать транзакцию.Без ларавел фасад DB чет не работает. Как сделать транзакцию мож кто знает?
>>1608796П.С.Мне нужна банальная вещь - одним запросом добавить строки сразу в несоколько таблиц. Что бы или все таблы обновились, или откат.Используя PDO я использовал транзакции.В Eloquent транзакции по документации доступны из фасада DB ларавел. Я же использую Eloquent отдельно в slim.И я забуксовал.
анчоусы, прошу помощи. накидайте советы по тому как мне лучше всего дебажить модель и видеть что в нее прилетает то ? контроллер или представление могу, а вот модели чому то не выводятся если юзаю там print_r();exit();
>>1609093Если ты пишешь print_r();exit(); и у тебя не белый экран - значит ты не в том месте пишешь это.Сначала напиши в начале файла, сразу после <?php что бы узнать инклудится он вообще или нетДалее погружаешься вниз, пишешь в конструкторе, что бы узнать создается ли вообще данный класс, потом в предполагаемом методе и так далее. Вплоть до нужного тебе if() или строчки.
Как написать скрипт. Надо чтобы - есть файл, в нем содержимое. Надо сделать например 1к таких же файлов, только нужно нужное название файла и желательно чтобы контент был как-то рандомизирован. И все это надо на серваке.
>>1609096ну вот я обычно и занимаюсь таким реверс инженирингом. но чет нихуя не выходит пока что сейчас лел. надо просто переписать api, и он плотно зашит в стандартные системные файлы. и вот хуй знает как его искать и где че вызывать. >>1609177расскажи поподробней. не очень понял тебя
Пацаны, а есть ли в ПХП аналог innerHTML из JS, чтоб обновлять инфу, не перезагружая страницу? Пусть и с задаваемой периодичностью (было ы весьма удобно).
>>1609320>обновлять инфу, не перезагружая страницуНет. Только если по Ajax подтягивать обновлённую инфу.
>>1609290Пхп это серверный блять язык. Что за хуйню ты несёшь? А к базе данных из браузера через джаваскрипт подключаться не хочешь?
>>1609614> А к базе данных из браузера через джаваскрипт подключаться не хочешь?Хипстеры уже додумались до такого в своём Firebase.мимо
>>1609784Работать с командной строкой надо уметь, так как порой возникает необходимость в конфигурировании веб-серверов, большая часть которых работает на ОС Linux. Если у тебя стоит винда, можешь 2 ОС поставить себе Kubuntu, и учиться писать код пхп в ней.
>>1599201 (OP)Есть API, которое выдает товарные фиды в виде XML и JSON. Необходимо брать эти данные, нормализовывать, и потом ложить в базу. Как лучше такое выполнять, что использовать? Ни разу с таким не сталкивался. Еще проблема в том, что данных очень много. Нужно как то фильтровать. Или пилить админку, чтобы можно было выбирать какую часть фида загружать. Как вообще в PHP работать с XML и JSON?
>>1609875Json делается так:1. Через курл или файл гет контент грузишь контент.2. Затем jsondecode и работаешь как с объектом
>>1609875такая же проблема, анон. только вот мне наоборот со сторого api который работает через xml как раз надо перевести на новый, который как раз на json. легче было бы с нуля написать, но нет же, заказчику нада чтобы старый перелопачивалив итоге сижу целую неделю ниче не написал и толком не выяснил как эта залупа работает. хуй знает че делать и как ловить. все раскидано по файлам и что то идет с пхп файлов, что то с js, что то блять вообще с <script type=text/html> я отчаился, анонсы
Пацаны, добрый вечер в хату. Подскажите, пожалуйста, можно ли не через композер, а архивом (как, например, вордпресс) установить Laravel на хостинг?
>>1610069Пасиб>>1610243Собери в кучу все и выполняй нормализацию. Мне как бы тоже самое предстоит делать. Только я пока с xml и json вообще не работал.
>>1610392А как это сделать? Скачать архив с фреймворком и просто залить на хостинг через файловый менеджер я правильно понимаю?
>>1610532??? Acmp удобен тем, что там есть проверяющая система, есть рейтинг. Просто в стол писать не интересно.
>>1610558>codewars? Не нравится. Интерфейс неудобный, русского языка нет, задачи не совсем олимпиадные.
>>1609330Всегда что-то идет не так. То фирма теряет бабки и предлагает урезать ЗП, то меняется начальство на неадекватов, то ищется работа получше, а то меня заебывает работать в офисе.
>>1610675>русского языка нетСударь, вы зажрались>задачи не совсем олимпиадныеПричем тут php? Олимпиадники на питоне пишут
Давайте пилить свои прохладные по собесам - кто, на чем запоролся, кого, в какой позе имели.Меня вот эйчарка обоссала за то, что я до 30 лет ни разу официально не работал, а потом тимлид засмеял, когда я не смог быстро на бумажке написать обход дерева в ширину с выводом вершин по уровням. Уже потом, идя домой обоссаный и осмеянный, понял, что задача для 3-го класса.
Посоны, вот в JavaScript есть такая охуенная вещь облегчающая написание скриптов как JQuery, а какая на этом же уровне альтернатива идёт для написая кода в PHP? Чтобы так же удобно и покайфу обращаться к формам, DB и вообще к всяким готовым ништякам тупа так же в 1 строчку решая большинство задач, посмотрел для начала Laravel и чёто меня блевать потянуло от того как там всё уёбищно и измучено по сравнению с ванильным кодом, ещё и помимо виртуального сервера нужно кучу дерьма и консоль ставитьВ общем какая лучшая паралель jquery есть на php? Для написая простых задач и скриптов, а не ебли с сложными сайтами с нуля, чисто чтобы баловаться приятными ништяками для себя и надрачивать как ты удобно сделал считая себя сверхразумом являясь дауном учитывая что такие задачи у остальных не занимают даже 1% напряга мозга
>>1611042>Посоны, вот в JavaScript есть такая охуенная вещь облегчающая написание скриптов как JQuery, а какая на этом же уровне альтернатива идёт для написая кода в PHP?JQuery создавался для того, что один код работал в разных браузерах. В то время код для разных браузеров отличался.
>>1611042>Чтобы так же удобно и покайфу обращаться к формам, DB и вообще к всяким готовым ништякам тупа так же в 1 строчку решая большинство задачНо ведь это и есть Laravel, чем не понравился тебе?
Идиотский вопрос, но вот "установка" ларавеля это по сути скачивание архива с исходным кодом блог аппа и подтягивание зависимостей, верно? А когда я собственно говоря уже сто тыщ изменений внес в сорцы, то тогда "установка" моего проекта это получается скачивание моего измененного разросшегося кода блог аппа без папки вендор, и последующая установка зависимостей композером?
>>1611042Если хочешь писать как на ванильной пыхе, то попробуй CodeIgniter, очень тупой и прямолинейный фреймворк
>>1611110Ну терминал>>1611111Но ведь как он охуенно сокращал код, и синтаксис понятный и приятный>>1611216>>1611315Я мягко сказать был в шоке, почему просто нельзя скачать директорию с модулями и подключать нужные, почему нужно качать тонну говна которая скачает ларавел с ещё большей тонной говна и потом в этой тонне говна бегать по тонне файлов и что-то там создавать, то что они называют конструкторами, блять, сука, даже чтобы просто страницу создать, нужно для неё прописать url и шаблон в разных и отдельных файлах, что это бля вообще за хуйня, в общем нужно что-то простое для написания типа парсеров, ништяков для сайта, а не ебучего комбайна из тонн костылей с ужаснейший вырвиглазным синтаксисом, без всех этих еблей с кучей дерикторий и непонятных тонн файловЯ правильно понимаю, сейчас всё пришло к тому что вся работа возложена на браузер пользователя? Сервер отдаёт только каркас страницы и джейсон с данными, а уже браузер тонной библиотек парсит его и вставляет в по сути пустую страницу, типа сняли нагрузку с серверов, отдав им только работу с бд, и то этйо бд управляет ещё тонны говна с костылями которые они называют вмс и хвалят за скорость написания, по сути просто накладывая на чистые js и php тонны уродского синтаксиса их фреймворков чтобы быстрее высрать говно, спихнуть это под видом технологий лошку клиенту и съебаться в туман насрав что это куча костылей и говна которые неоптимизированы от слова совсем, пример сейчас это ютуб и твич, где у тебя грузится просто фон и уже куча скриптов на скрипте начинают верстать страничку и всё это дерьмо логает если у тебя не компьютер хотя бы старее 2017 года
>>1611348>сняли нагрузку с серверовНет, дело в том, что браузерный клиент давно перестал быть единственным. Чистые апишки пилятся для взаимодействия с любым клиентом. При этом сср нужен самим фронтам, хоть и костыльно выглядит на первый взгляд (и на второй тоже). Причины, правда, не то чтобы критичные были, но уж пусть так. Кроме того это дело все кешируется насколько может. Нагрузка на бек важна конечно, но сср там малую роль играет.Из всего тобой сказанного - тебе нужен вротпресс.
>>1611363>вротпрессЭто понятно, но хочется для себя для удовольствия пописать всякие ништяки не находясь на вордпрессе, да даже просто на локальном сервере например парсер написать, на чистом php не то, слишком выгвиглазно, а увидев все эти структуры и взаимодействия этих костылей на том же ларавеле просто блевать хочется а не писать, по этому и захотелось найти что-то типа jquery на js, но только для php, чтобы так же логично, красиво, просто и удобно
>>1611374Тебе зря так кажется.Если хочешь либу для парсинга/работы с DOM на пхп, то SimpleDOM может подойти. Древний он правда.https://github.com/ziadoz/awesome-php#scrapingВ этой секции еще можешь глянуть.>так же логично, красиво, просто и удобноЖиквери не является образцом логики, простоты и удобства. Недаром сейчас предпочитают при прочих равных писать просто на ваниле. Сейчас жиквери - рудимент.>логичноЛогики там не нужно. Это же библиотека, она ни на что такое не претендует. В давнее время упрощалась работа, но сейчас это уже лишнее. ты даже не представляешь насколько.>красивоКрасоты тоже нет никакой. В самом лучшем случае становится чуть меньше кода, чем на ваниле, но он красивым от этого не становится.>простотыВот это мб. Совсем не умея в ванилу вкатывались ведь предки нынешних фронтов в живквери. Значит простая.
>>1611387>>1611416Спасибо за ссылки, уже что-то, поизучаю.>>1611387>Жиквери не является образцом логики, простоты и удобстваНу почему же, $("#2ch").click(function()) логичнее, красивее и удобнее же чем document.querySelector("#2ch").onclick = function()Или $.getJSON("2ch.json", function()) чем ебаться с громадным XMLHttpRequest, не буду даже его рассписыватьВот и хочется нечто подобное охуенное для сокращения и PHP
>>1611452>чем ебаться с громадным XMLHttpRequestfetch погляди.>$("#2ch").click(function()) логичнее, красивее и удобнее же чем document.querySelector("#2ch").onclick = function()Чуть короче и что еще?
>>1611455На fetch пока не смотрел бы, так как многие до сих пор деревянными браузерами пользуютсяЭто ленивые премеры были, попробуй например сделать на ваниле скрипт вкладок и на jq, он будет в разы приятнее и короче на jq, не суть, я просто ищу что-то подобное для php, или ты намекаешь что проще писать на чистом php, так как текущие фреймворки все вырвиглазное дерьмо с помойнейшим синтаксисом для макак пушечного мяса
>>1611458>проще писать на чистом php, так как текущие фреймворки все вырвиглазное дерьмо с помойнейшим синтаксисом для макак пушечного мясаВ некотором смысле да, но тебе я не это пытаюсь сказать точно. Странно, что ты реально простым фреймам так противишься, где очень многое уже сделано за тебя.>На fetch пока не смотрел бы, так как многие до сих пор деревянными браузерами пользуютсяПолифилы решают. Ну и если уж прямо говорить - ты зачем к жиквери в 2020 прилип? В наше время цветут вью, реакт и ангуляры всякие. Они гораздо мощнее, проще и выразительнее будут, чем либа с декораторами над ванилой.Аналогия жиквери и чистого пхп даже ближе, чем ты думаешь.
>>1611464>простым фреймам так противишьсяЯ просто ужаснулся увидев то как делают сайт на ларавеле, это просто бездушно, никакой ламповости, в общем после всего увиденного сложить ощущение что все просто хотят всё свалить друг на друга, фрот на бек, без на фронт, и в итоге этого перекладывания ответственности получается просто дерьмище, доходит просто до какаго-то маразма и уродования языкаи без того уродливогоВсе эти вью, реакт и ангуляр как минимум просто противоречат и не дружат с SEO как минимум, вся твоя страница превращается просто в фейк, а весь сайт в одностраничник, где всю работу переложили на фронт и железо пользователя, грузя данные и верстая всё находу, в что-то мерзкое и лагучее
>>1611477>не дружат с SEO как минимумКак раз для этого есть специально придуманный сср спа приложений.В остальном минусов нет, кроме большей сложности разработки, но это мало кого уже волнует.>делают сайт на ларавелеНа фреймах писать можно вообще по разному. Хотя это не слишком очевидно из концепции, но так оно и есть. Я вот видел сайты на ларке, где в каждом эндпоинте die юзался и прочая мимофреймовая херня. Ну красота, чо. Зато на ларочке няшечке. И такого полно везде.
>>1604086>Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с >зафиксированными значениями на кубиках слева. Но в примере твоей функции, она получала на вход пустой массив>Если ей переданы значения на всех N кубиках, то перебирать нечего - остается только вывести комбинацию. Не совсем понял это.>Если ей передан массив с меньше чем N значениями, кроме последнего, Тоже не понял этого предложения , массив меньше с N значениями , это пустой массив ?. И что значит , кроме последнего Почему функцию , которые ты описал работает с 2 значениями в массиве, мы же рассматриваем 3 кубика>Попробуй написать такую функцию, или напиши, если что-то непонятно. Ну вообщем , при моих оставшихся вопросах получилось как-то так https://ideone.com/JPEs7m , нормально ли ? Тут есть проблема , в том , что по завершении вызовов функции с массивом одного и двух значений при 3 кубиках, допустим: generateCombinations(3, [1]) и generateCombinations(3, [1,1]), эти массивы тоже у меня бы выводились , если бы я не написал условие if (count($values) == $n) . Коментарии, которые с 21 по 33 строчку это я оставил для себя >Есть еще другой способ вывести все комбинации без рекурсии. Решил вот так https://ideone.com/AyUsGV , нормально ? Программа сама заканчивается по завершению циклу , но у меня возник вопрос, а если бы я захотел остановить цикл при значениях [5, 5, 5,] , при этом перебор остается осуществляться до [6,6,6], но я его как-бы останавливаю на других значениях , как лучше это было бы сделать, я в комментариях оставил свой вариант через array_filter и функцию stop , и просто с помощью цикла
Аноны, подскажите, не понимаю как правильно работать с базой данных. А точнее логику работы с соединением к БД.Я подключаюсь к БД с помощью eloquent и capsule.В пхп после выполнения скрипта соединение обрывается? Или каждый раз при обращению к базе создается подключение, которое если явно не закрыть - повисает?Поясните пожалуйста за соединения с БД
Я php джун без знаний и опыта, уже почти месяц откликаюсь на вакансии, делаю тестовые, хожу по собеседованиям, порой меня даже хвалят, но до сих пор ни одного оффера. Меня скоро выпрут из общаги, бабки заканчиваются, а я даже к родителям не смогу уехать, они не могут меня больше содержать. Я уже было совсем приуныл, вакансии почти закончились, новых нет, молюсь Богу каждый день.И тут короче мне дают тестовое найдите ошибки в 27 строчках, а там ошибки типа ';' вместо ',' написано и прочее, для даунов на 15 минут. Сделал я его, пригласили на собес, иду весь трясусь нервничаю, захожу зажусь, а hr мне после пары вопросов про мою общительность и дальность от дома говорит: "ЭЭЭ, ну вообщем, приходи во вторник, зарплата 40к, официально. " И я просто охерел тогда, сидел не знал что сказать. Просто без собеса без ничего. Одно тестовое на 15 минут. А в других конторах ебали только так и не взяли.Теперь получается моя жизнь спасена, я успешно вкатился, бабки не проблема, думаю теперь о будущем.
Если я создам код внутри рамки по типу:<фрейм> <? некоторый кот ?></фрейм>К примеру, там будут данные из БД и их надо время от времени проверять. И сделаю кнопку для перезапроса инфы к коду внутри фрейма, то она будет обновлять данные в рамке, или все равно придется обновлять всю страницу? Мне уже тут говорили за ajax, но у меня свой путь шиноби возник интерес именно к такому способу. Сработает ли?
>>1611888п.с. рад за тебя. Сам некоторое время назад интереса ради откликнулся в одну конторуна реакт + нода. Сходил пообщался , дали тестовое,сделал как смог. В ответ на почту скинули что тестовое принято. И запланируют встречу с гендиром. Через пару недель пригласили, пообщался с их гендиром. Он приятное впечатление оставил. По итогу предложили месяц оплачиваемой стажировки, и если продолжим - то 70к зп. А я в основном на пхп пишу, и не пипец опытный. Да и на вакансию откликнулся потому что нода интересна, и я с ней немного пердолюсь. А так у меня и сейчас есть работа, которая оч уютная и хорошая.Тестовое - что то типа фуллстак тудухи - морда реакт, бек на ноде.
>>1611895А то что нужно ходить на собесы, делать тестовые , и подскакивать кабанчиком.Что тот аноны если он не ты совершенно правильно и делал.
>>1611901Я может тоже потом перекачусь во фронт/фуллстек. А то что-то php-шникам намного меньше платят.
https://github.com/someApprentice/CrypterНаписал часть кода с шифрованием и использованием библиотеки openpgp.js. Приложение получилось нагруженным, и на дешифровку нескольких сообщений сразу (например при подхвате связки из 20 сообщений с бэкенда) уходит от 4 до 8 секунд. Это не очень userfriendly, и я принимаю решение создать секретные чаты, как в телеграме — только в них сообщения будут шифроваться, и они будут создаваться по запросу пользователя.Изначально я хотел шифровать приватный ключ хэшом (SHA-512) от пароля и сохранять его в локальном хранилище под ключом shadow, и затем дешифровать им приватный ключ каждый раз при инициализации приложения, а ключ сохранять в памяти. Но выяснилось, что дешифрованый ключ переведённый в ASCII-armor имеет другую структуру/контент в отличие от зашифрованного. Поэтому, я принял решение шифровать ключ простым паролем и просто сохранить дешифрованный ключ в IndexedDB при залогинивании. Код проверять не нужно, так как обо всех ошибках я, скорее всего, знаю, и я собираюсь отрефкторить фронтенд код. Но то что мне хотелось бы знать, и мы хотели оставить это на последнее, это оптимизация.Я никогда с этим не сталкивался и это будет для меня совершенно новый опыт. Поэтому, я снова опишу схему БД, со всеми комментариями и мыслями, чтобы проще было сориентироваться.User:uuid,email,name,hash,private_key,public_key,revocation_certificate,last_seen// Нужно добавить ещё urlname, которое будет уникальным идентификатором пользователя по URL запросу (прим. @alice). // Может быть ещё нужно добавить поле online: BOOLEANConference:uuid,updated, // время когда конференция последний раз обновилась (появилось новое сообщение)// Нужно добавить поле type: ENUM('private', 'public', 'secret')// Нужно добавить поле last_message, чтобы в интерфейсе можно было вывести его, а так же чтобы можно было отсортировать их по последнему сообщению, а не по колонке update. Колонку update можно будет удалить.// Содержит в себе ссылки на конференции для каждого пользователя.// Она нужна чтобы у каждого пользователя была своя "копия" конференции. Или можно сказать своё представление конференции, т.к. она содержит специфичную для каждого пользователя информацию (такую как количество непрочитанных сообщений или количество сообщений в общем конкретно для этого пользователя)// Изначально идея создания этой таблицы была, то что пользователь может удалить отдельно для себя эту конференцию, а у его собеседника она останется. (В популярных мессенджерах это так и работает — можно удалить конференцию либо только для себя, либо и для собеседника тоже, т.е. конференция и все сообщения в ней удаляться вообще.)Conference_Reference: uuid,user,conference,participant, // Ссылка на собеседника, в случае приватной конференции, для публичных это поле остаётся пустым. Нужна чтобы получить конференцию по собеседнику за 1 запрос и является денормализацией (см. ниже таблицу Participants)unread // Количество непрочитанных сообщений у данного пользователяcount // Количество сообщений в общем для данного пользователя. (Ведь сообщения, так же как и конференции, можно удалять как и только для себя, так и вообще)// Таблица всех получателей для определённой конференции. Изначально создавалась для публичных конференций где количество получателей больше 2-ух, а для приватных, она осталась как представление конференции из всего лишь 2-ух собеседников. Для приватных конференций можно опустить.Participant:uuid,conference,userMessage:uuid,author,readeddate,type: ENUM('text/plain', 'audio/ogg', 'video/mp4') // Либо текстовое, либо голосовое, либо видео сообщениеcontent: TEXT // Содержит либо простой текст для текстового сообщения, либо URL на медиа-файл для голосового/видео сообщенияconsumed: BOOLEAN // Определяет было ли прослушано/просмотрено аудио/видео сообщениеedited: BOOLEAN // Было ли отредактировано сообщениеreaded_at: TIMESTAMP WITH TIMEZONE // Определяет когда сообщение было прочитано и нужно чтобы получить все прочитанные сообщения в момент когда клиент был в офлайне, чтобы обновить их локальном хранилище// Нужно добавить поле edited_at// Тоже самое что Conference_Reference (т.е. имеет ту же идею под собой)Message_Reference:uuid,conference, // Нужно перенести в таблицу Message user,messageMessage_Attachment:uuid,type: ENUM('image', 'audio', 'video', 'file', 'forwarding', 'reply'), // Либо изображение, аудио, видео, файл, пересылка сообщения, либо ответ на сообщениеmessage,src // Содержит либо URL на файл для изображений/аудио/видео/файлов, либо uuid сообщения для пересылки/ответаКакие запросы нужно выполнить:1. Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть (в случае приватной конференции), и вместе с Получателями в случае с публичной конференции: SELECTconference.uuid,conference.updatedconference_reference.unread,conference_reference.count,participant.uuid AS participant_uuid,participant.name AS participant_name,participant.urlname AS participant_urlname,participant.public_key AS participant_public_key,participant.last_seen AS participant_last_seen,m.uuid AS last_message_uuid,m.author AS last_message_author,m.readed AS last_message_readed,m.date AS last_message_date,m.type AS last_message_type,m.content AS last_message_content,m.consumed AS last_message_consumed,m.edited AS last_message_edited,m.readed_at AS last_message_readed_at,m.updated_at AS last_message_updated_at,ps.uuid AS participants_uuid,ps.name AS participants_name,ps.urlname AS participants_urlname,ps_public_key AS participants_public_keyps.last_seen AS participants_last_seen FROM conferenceINNER JOIN conference_reference ON conference.uuid = conference_reference.conferenceINNER JOIN user AS participant ON conference_reference.participant = participant.uuidINNER JOIN message AS m ON conference.last_message = m.uuidINNER JOIN participant AS pu ON pu.conference = conference.uuidINNER JOIN user AS ps ON pu.user = ps.uuidWHERE conference_reference.user = :uuidORDER BY conference.updated DESC;Такой запрос вернёт количество строк равный количеству Конференций помноженных на количество Получателей. pic-1. Как сделать лимит на первые 20 конференций, а не на первые 20 строк (при условии что используется Doctrine)?2. Получить Конференцию по Получателю, вместе с получателем.Примерно такой же запрос, только выборка будет WHERE conference_reference.participant = :uuid.3. Получить последнее 20 Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.Doctrine и DQL конечно же упрощают написание таких больших запросов как я написал выше, поэтому я напишу его:SELECT mFROM Crypter\Entity\Message mINNER JOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.messageWHERE m.conference = :conference AND mr.user = :userORDER BY m.date DESC 4. Получить первые 20 непрочитанных Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.Примерно такой же запрос, только выборка будет помимо прочего ещё и по полю readed и author:...AND m.readed = FALSE AND m.author != :user.5. Получить первые 20 Сообщений начиная с данного таймстампа (получить новые сообщения), для определённой конференции для конкретного пользователя вместе с конференцией и автором Примерно такой же запрос как и в 3-ем запросе только добавляется ещё и выборка по дате: ...AND m.date > :date6. Получить последние 20 Сообщений начиная с данного таймстампа (получить старые сообщения)... -//-Такой же запрос только наоборот: AND m.date < :date7. Получить все прочитанные Сообщения с определённого момента.Такой запрос нужно чтобы обновить локально сохранённые сообщения (в IndexedDB), которые были прочитаны пока клиент был в офлайне.SELECT mFROM Crypter\Entity\Message mJOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.messageWHERE mr.user = :user AND readedAt > :dateORDER BY m.date DESCДумаю, что нормализованная структура определена и осталось её оптимизировать. Пожалуйста, научите меня этому.
>>1599205Я вижу, появилась папка public. Это хорошо. Если это еще не сделано, то стоит сделать ее корневой папкой веб-сервера (чтобы DocumentRoot указывал на нее), чтобы из браузера в принципе нельзя было обращаться к файлам за ее пределами. Стоит также это упомянуть в README, можно даже вставить туда нужный кусочек конфига сервера. И перенести в папку файл htaccess.> `studentLocal` enum('l','n') NOT NULL COMMENT 'l - local, n - not localМожно было использовать строки local/nonlocal вместо букв ради читабельности. Они будут занимать в базе ровно столько же, так как ENUM хранит в таблице номер выбранного варианта, а не сам текст.Для email, возможно, стоит добавить уникальный индекс в базе, чтобы нельзя было вставить одинаковый.> studentNameОбычно не стоит добавлять в поле название таблицы. Вот, если что, SQL guide, где даются рекомендации по названиям: https://www.sqlstyle.guide/ru/> ini_set('display_errors', 1);Это лучше убрать, так как на продакшене требуется отключать вывод на экран. Лучше перенести настройку в php.ini или в конфиг веб-сервера.> require_once(ROOT.'/app/components/Router.php');> require_once(ROOT.'/app/components/autoload.php');Логичнее сначала подключать autoload - вдруг он понадобится при подключении роутера.> https://github.com/Vladrigos/StudentList/blob/master/app/components/autoload.phpздесь можно сделать одну функцию, которая будет в цикле перебирать варианты префиксов. Также, можно добавить эти пути в include_path и использовать встроенный в PHP автозагрузчик (spl_autoload).> $uri = explode("?", $_SERVER["REQUEST_URI"])[0]; Можно просто с помощью parse_url взять компонент PHP_URL_PATH.> //удаляем первый элемент массива и добавляем Controller> $controllerName = array_shift($segments).'Controller';Лучше сразу писать имя контроллера в routes.php, тогда можно будет переходить к нему по клику в IDE и искать роут поиском по имени класса. Не стоит писать в коде кусочки от имен классов/функций вместо полного имени. Так как в этом случае поиском по полному имени нельзя найти все места, где используется класс. > 'main$'Тут не должно быть ^main$ ? > $isRegister = isset($_COOKIE['student']);Стоит сделать отдельную функцию/метод для определения залогиненности, и собрать все, что связано с авторизацией, в один класс, а не размазывать эту логику кусочками по коду.> StudentGateway::getStudents> StudentGateway::getSearchStudentsСкорее всего, выборку с поиском и без поиска можно объединить в одну функцию. Ведь и там, и там понадобится сортировка и пагинация. Проще сделать поиск дополнительной опцией.Также, стоит отказаться от статических вызовов и почитать урок про DI: https://github.com/codedokode/pasta/blob/master/arch/di.md> return 1;Если это признак, что страница существует, то может, стоит сделать тут константу вроде PAGE_EXISTS или хотя бы использовать true (истина). Так как цифра 1 обозначает количество, и непонятно, чего тут одна штука.> return $_GET['page'] * $this->limit Стоит использовать intval() для принудительного преобразования в число. Неизвестно что может придти от пользователя. > if(isset($_POST['submitInput']))Можно проверять $_SERVER['REQUEST_METHOD'] https://www.php.net/manual/ru/reserved.variables.server.php> $student = new Student($_POST['name'], $_POST['surName'],Значения в $_POST могут отсутствовать или быть не строкой. Стоит писать хотя бы strval($_POST['x'] ?? '') или сделать функцию для их безопасного получения. > Validator::formatStudent($student); //trim, firstToUpper имя/фамилиюЭто, строго говоря, не задача валидатора. trim() удобнее делать в функции получения данных из _POST. Или можно сделать функцию-помощник, которая сделает нужные преобразования.> //генерируем куки> $cookie = md5(rand(0, 10000)) . md5(rand(0, 10000));Это надо выносить в отдельную функцию с понятными названием, и комментарий не понадобится. Также, md5 тут бессмысленнен. У тебя возможны всего 10000 x 10000 вариантов значений, и md5 не увеличивает их количество, а лишь удлиняет код, но там все равно будет лишь 10000 вариантов. То есть ты только удлиняешь код, не повышая число вариантов. Для безопасности надо, чтобы каждый символ в коде выбирался случайно и независимо от других.Также, в RegistrationController есть 2 больших куска почти одинакового кода, которые стоит объединить.Для пола и local/nonlocal стоит сделать константы в Student, а не Validator. Это же свойства студента, а не особенности валидации. То есть, эти константы имеют смысл только для валидации, или они могут пригодиться и в других случаях? Да, могут. Значит, им место не в валидаторе.> (int $limit, int $offset, $order = NULL, $as = NULL)Тип стоит поставить для всех аргументов и для возвращаемого значения.> $query = $query . "ORDER BY $order ";Здесь SQL-инъекция. Почитай урок по ним и сделай проверку по белому списку разрешенных значений.> //как то переделать что бы каунт получатьКак вариант, можно сделать аргумент, в который передается, что вернуть: либо RETURN_COUNT, либо RETURN_ROWS. Либо же использовать 2 отдельных функции. > INSERT INTO student VALUES(DEFAULT,:name, :surname,Надо явно указать названия полей после student, а то у тебя нет гарантии, что ты их вставляешь в правильном порядке. > return new Student($stmt['studentName'], $stmt['studentSurname'], ...> else> {> return 0;> }Есть значение null для обозначения отсутствующего объекта. А 0 - это число, оно обозначает количество.> $stmt->fetch(PDO::FETCH_ASSOC)['COUNT()'];Есть fetchColumn(), и другие функции, изучи.> $db->query("UPDATE student SET studentName = '{$student->getName()}', SQL инъекция тут.> (':studentName' => $student->getName(),> так почему то не работаетНадо разобраться, какая ошибка выводится и почему.> catch (PDOException $e)> print "ERROR: Нет соединения с базой данных";Неправильная работа с исключениями. Ты не пишешь в лог ошибок информацию о сути проблемы, которая хранится в $e, и теряешь эту информацию. Разработчик и не узнает, что на сайте была проблема. Также, для PDO надо включить режим ERRMODE_EXCEPTION, иначе он не сообщает об ошибках. https://github.com/Vladrigos/StudentList/blob/master/app/components/Uri.phpТут плохо то, что класс использует $_GET, он должен быть независим от этой переменной и получать параметры явно. А так, ты смешиваешь в кучу логику получения данных от пользователя и логику обработки этих данных. Это две независимых логики.У тебя нет объекта и состояния. По идее, ты должен создавать объект, в нем хранятся данные и ты с этим объектом работаешь, так: $uri = new Uri(.....данные....);echo $uri->getPage();Что-то у тебя пока слабовато с ООП, может тебе задачки про ООП-гостиницу или ООО Вектор надо порешать? > public static function checkGetHave($key, $value)Можно назвать hasElement/findElement.> //очень похоже на костыль, не придумал как лучше> //Если в массиве есть хоть 1 ошибка> foreach($errors as $error) Удали из массива пустые значения с помощью array_filter или цикла и проверь, пуст ли результирующий массив.> return $errors;> return 0;Логичнее возвращать значения одного типа, например, пустой массив, так как проще работать, когда ты знаешь, что вернется только массив и ничего больше.> if(strlen($name) > 25Надо использовать mb_strlen, strlen считает байты, а не символы. Протестируй.> return "Ошибка, поле содержит недопустимые символы!";Нужно больше информации, например, какие символы допустимы или недопустимы. А то непонятно.Также, ты должен сам протестировать все ограничения. То есть пройтись по каждому полю и попробовать вбить правильные и неправильные значения и убедиться, что все сообщения показываются правильно. Это немного муторно, но поможет тебе выдавать качественный результат, когда ты будешь работать. Никто не любит, когда программист сдает непротестированную работу. Это помогло бы обнаружить баг с strlen().> https://github.com/Vladrigos/StudentList/blob/master/app/views/404.htmlА ты выдаешь код статуса (состояния) HTTP 404 для этой страницы? Ведь число 404 важно не показать на экране (людям-то оно не нужно), а отдать роботам в нужном поле ответа.> href="<?php Uri::setPageUri($i);?>Здесь по идее тоже надо использовать htmlspecialchars, символ & например надо экранировать как & amp ; . > ?php if($currentStudent && $currentStudent->getGender() == VALIDATOR::GENDER_FEMALE) { echo 'checked'; } ?>Лучше использовать <?= и тернарный оператор. Не нужно использовать echo в шаблонах вообще.> maxlength="25"Здесь есть небольшой недостаток: длина поля (25) дублируется в нескольких местах кода, в валидаторе и тут. Хорошо бы это исправить.Так, пока для начинающего неплохо, но надо исправить замечания, чтобы второй раз на те же грабли не наступать.
>>1611752 Фрейм это как отдельная вкладка и он может загружаться независимо от основной страницы.>>1611731 Да. Все соединения закрываются, открытые файлы закрываются при завершении скрипта автоматически.Обрати внимание, что во многих БД вроде MySQL/MariaDB, долгий запрос не завершается при отсоединении. Если ты запустишь запрос, который выполняется 24 часа, он продолжит выполняться, хотя ответ на него отдавать уже некуда. Используй настройку таймаута в БД для борьбы с этим.>>1611704>>Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с >зафиксированными значениями на кубиках слева.> Но в примере твоей функции, она получала на вход пустой массивЭто значит, что пока ни одно значение не зафиксировано и все кубики надо перебирать.>>Если ей переданы значения на всех N кубиках, то перебирать нечего - остается только вывести комбинацию.> Не совсем понял это.Если у нас 3 кубика, а в функцию пришел массив [1, 4, 2] то перебирать ничего не надо - надо просто вывести комбинацию 1, 4, 2 так как все значения на 3 кубиках зафиксированы. А если бы пришло [1, 4] то это значит что на первых 2 кубиках значения зафиксированы (1 и 4), а третий нам надо перебирать. А если пришло [] то надо перебирать значения всех трех кубиков.Функция перебирает значения за раз только на одном кубике. И вызвыает себя для перебора остальных значений. Допустим, у нас 3 кубика и пришел массив [1] (зафиксированное значение для первого кубика). Тогда функция перебирает значения второго кубика, фиксирует их, вызывая саму себя с такими массивами: - [1, 1]- [1, 2]- [1, 3] ...- [1, 6]> Ну вообщем , при моих оставшихся вопросах получилось как-то так https://ideone.com/JPEs7m , нормально ли ? Ты правильно сделал функцию. Как раз, как я описал. Только один цикл тут лишний: > for ($z = 0; $z < $n; $z++) {> if (count($values) == $z) {Если присмотреться, то понятно, что этот if срабатывает только один раз, а переменная $z нигде не используется и цикл по $z ничего не делает, и его можно убрать. Цикл - это повторение несколько раз, у тебя же код внутри if выполняется всегда ровно один раз и цикл не нужен.> Тут есть проблема , в том , что по завершении вызовов функции с массивом одного и двух значений при 3 кубиках, допустим: generateCombinations(3, [1]) и generateCombinations(3, [1,1]), эти массивы тоже у меня бы выводились Ты правильно добавил условие, мы выводим комбинацию только если у нас есть значения на всех кубиках, а не на части из них. Если на части - то мы перебираем значения на оставшихся, рекурсивно вызывая сами себя.Мне, наверно, стоит найти время и сделать урок про рекурсию. Я и сам-то плохо читаю рекурсивные функции, а начинающему это вообще ад.> Решил вот так https://ideone.com/AyUsGV , нормально ? Да.> у меня возник вопрос, а если бы я захотел остановить цикл при значениях [5, 5, 5,] , при этом перебор остается осуществляться до [6,6,6], но я его как-бы останавливаю на других значениях , как лучше это было бы сделать,Проще всего сравнением массива, то есть if ($combination === [5, 5, 5]) (мануал https://www.php.net/manual/ru/language.operators.array.php ). Или if ($combination[0] >= 5 && $combination[1] >= 5 ....).Если ты смог генерировать комбинации кубиков, то ты можешь попробовать теперь сделать функцию-генератор, выдающую комбинации кубиков, а затем и купюр, с помощью yield. Погугли "генераторы в PHP". Можно и без генераторов, но тогда ты будешь писать все в одной огромной запутанной функции, а так у тебя одна функция будет генерировать комбинации купюр, а другая их проверять - код будет чище.После этого стоит добавить оптимизацию: перебирать число купюр не подряд от 0 до максимума, а с умом: - не перебирать число, которое заведомо превышает требуемую сумму. Например, если надо выдать 2300, то нет смысла пробовать комбинации вида 5x500, 6x500 итд (и перебирать комбинации более мелких купюр при 5x500 тоже нет смысла). Или, если мы уже зафиксировали комбинацию 4x500 и перебираем 100-е купюры, то не брать более 3-х купюр. То есть, мы берем требуемую сумму, вычитаем из нее сумму, которую дают "зафиксированные" старшие купюры, и используем остаток для ограничения максимального числа перебираемых купюр.- начинать перебор с ближайшего к сумме значения. Например, если нам надо выдать 2400, то мы начинаем с 4x500, потом пробуем 3x500, 2x500 .. 0x500. В таком случае, первая полученная комбинация будет соответствовать тому, что дает "жадный" алгоритм. А если она не подошла, то мы начинаем менять количества купюр и пробовать другие варианты.
>>1611458 Не нравятся большие фреймворки - используй микрофреймворки вроде Slim или собери свой фреймворк из компонентов Симфони.>>1610930 Ну так попробуй извлечь из этого опыта что-то полезное. Например, подучи деревья и добейся того, чтобы без запинки писать любой популярный алгоритм для них. Тогда это собеседование будет не потерянным временем, а еще одним шагом вверх.>>1610524Есть codeforces от Дурова: https://codeforces.com/blog/entry/79Можно решать на PHP и даже соревноваться с другими. Задачи от примитивнейших до мозголомных. Как тебе?
>>1612400 Для мессенджера советую в README добавить скриншоты/гифки, описание основных фич (что тут есть сложного и крутого), будет хорошее демо для собеседований. Перечислить использованные технологии и библиотеки. И подключенных ботов. README сухой и краткий и не очевидно, что за ним сложный интересный проект. А может получиться хорошая реклама твоих навыков, которая выделяет тебя среди других разработчиков.> Приложение получилось нагруженным, и на дешифровку нескольких сообщений сразу (например при подхвате связки из 20 сообщений с бэкенда) уходит от 4 до 8 секунд.Это можно пофиксить на уровне UI:- показываем сначала блоки-плейсхолдеры вместо сообщений- по мере расшифровки заменяем их на текст. Создается ощущение, что все надежно зашифровано и ничего не тормозит.- в первую очередь расшифровываем сообщения, видимые на экране, снизу вверх. Не расшифровываем то, что далеко от видимой области.- можно кешировать в оперативной памяти последние N (например, 5000) расшифрованных сообщений для быстрого показа, когда пользователь переключается между несколькими контактамиНаконец, можно рассмотреть вариант переписать/подключить декодер на WebAssembly (заодно освоишь эту технологию), или asm.js (фаерфоксовая старая версия для выполнения машинного кода). NaCl не буду рекомендовать, так как он x86-only. Должно ускориться.Имхо, компромисс, выбранный Телеграм - неудачный. Шифровать надо 100% сообщений. Но, конечно, это тебе решать. > Нужно добавить ещё urlnameЭто можно назвать login или slug.> Может быть ещё нужно добавить поле online: BOOLEANА можно сделать отдельную таблицу online_users (uuid, last_seen). Плюс: при обновлении статуса пользователя (пришел/ушел) мы не трогаем тяжелую таблицу users, а только эту. Она будет меньше users, так как обычно онлайн только часть пользователей и так как тут мало колонок. Кто знает, может она целиком в RAM поместится. Просто даю как идею, не гарантирую, что это будет лучше.> updated, // время когда конференция последний раз обновилась (появилось новое сообщение)Может, last_event_time? Хотя, updated тоже норм.> participant, // Ссылка на собеседника, в случае приватной конференции, для публичных это поле остаётся пустым.Не лучше ли назвать partner/other_party? > date,Может, лучше писать send_time? И еще по схеме БД - а не слишком ли много метаданных в открытом виде? Может, есть смысл хранить метаданные сообщения как JSON и шифровать, и хранить шифротекст в единственной колонке metadata ? > 1. Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть5 джойнов выглядит чуть страшновато. Это, наверно, кандидат на кеширование, хотя без нагрузочного теста я не скажу, быстро или медленно оно будет работать.> Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть (в случае приватной конференции), и вместе с Получателями в случае с публичной конференции: Не очень понятно, зачем тут выбирать Получателей? Мы же выбираем только сообщения, адресованные данному пользователю? Я предполагаю, что если пользователь - участник конференции, то все сообщения в ней (не написанные им) адресованы ему. Или это на случай, если пользователь состоит в чате, но как-то забанен в нем? На случай игнора отправителя? > Такой запрос вернёт количество строк равный количеству Конференций помноженных на количество Получателей. pic-1. Как сделать лимит на первые 20 конференций, а не на первые 20 строк (при условии что используется Doctrine)?По моему, в Доктрине это есть. Там LIMIT применяется к основной сущности запроса, но это делается за счет оборачивания запроса в какую-то сложную конструкцию. Попробуй проверить, вроде: $qb->select('a', 'b')->from('a')->leftJoin('a.b', 'b')->setMaxResults(10);И посмотреть, какой запрос он сформирует. Это по идее должно вернуть 10 сущностей a независимо от числа приджойненных b.Так, по идее - группировка нужна, наверно. Либо выборка в 2 запроса: сначала список конференций, потом список последних сообщений в них.Увы, Доктрина - не самый быстрый способ делать запросы.> Думаю, что нормализованная структура определена и осталось её оптимизировать. Пожалуйста, научите меня этому.- нужно освоить команду EXPLAIN и прочитать мануал по тому, как понимать ее результаты (слова для поиска: postgres analyze query plan)- прогнать запросы через эту команду и понять, эффективно они работают или нет (я смогу подсказать что-то). В идеале мы хотим: выборка из одной таблицы с LIMIT по индексу, который оптимизирует WHERE и ORDER.- для тестирования было бы здорово сделать генератор, который нагенерирует произвольное число пользователей, конференций, сообщений. По ним прогонять запросы по одному и параллельно для измерения реальной производительности. Для Доктрины такой генератор делается, например, на основе Faker и https://github.com/thephpleague/factory-muffin. Хорошо оптимизированный запрос выполняется тысячами в секунду.На тестах может выясниться что-то интересное, например, могут всплыть какие-то блокировки, мешающие параллельному выполнению запросов. Так их предсказать трудно, я не смогу.- БД работает хорошо только пока индексы помещаются в память. Размер индексов можно как-то увидеть, не помню как. А если таблица помещается в память - то вообще все чудесно. Хайлоад обычно предполагает, что все влезает в память, кроме может быть редко используемых данных. Помещаются данные в память или нет - очень важный фактор, влияющий на производительность.- скорее всего, может понадобиться больше денормализации. Денормализовать удобнее всего то, что никогда не меняется (вроде uuid получателя сообщения). Так как иначе надо будет думать об обновлении денормализованных полей.- может понадобиться кеширование, если денормализация и индексы не помогут. Смотри на это как на последнюю надежду, так как при кешировании появляется проблема сброса/обновления кеша и она очень сложна.- возможно, вместо запросов с джойнами быстрее будет сделать несколько отдельных запросов. Индексы для начинающих: https://ruhighload.com/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+%D0%B2+mysqlЕсли есть конкретные вопросы, уточняй.
Анончик, чем синхронизировать локальную папку с sftp на debian?Раньше пользовался правкой файлов по ftp через notepad++, на линуксах же в правки по sftp имеют 2.5 приложения, да и те осваивать месяц
>>1611477Да, двачую анон, складывается такое впечатление, что это какой-то рынок для гиков, нердов, но им вместо чего-то обычного впаривают реакты, вью, свелт или еще что-то, это все обрастает конференциями, курсами. Целая кампания какая-то. А ведь нужно то отобразить страницу с текстом или сделать удобную форму.
>>1612570>Для мессенджера советую в README добавить скриншоты/гифки, описание основных фич (что тут есть сложного и крутого), будет хорошее демо для собеседований. Перечислить использованные технологии и библиотеки. И подключенных ботов. README сухой и краткий и не очевидно, что за ним сложный интересный проект. А может получиться хорошая реклама твоих навыков, которая выделяет тебя среди других разработчиков.Я хочу свой стартап закончить. Если не получиться, то оформлю README, в качестве запасного плана. Спасибо за эти слова, я часто сомневаюсь что моих навыки выделяются среди других разработчиков. Очень важно было это услышать.>Имхо, компромисс, выбранный Телеграм - неудачный. Шифровать надо 100% сообщений. Но, конечно, это тебе решать.Мне нужно подумать об этом.Приведите пожалуйста аргументы почему нужно шифровать 100% сообщений?В противовес, здесь есть недостаток - нельзя сделать поиск по сообщениям.Это касается и метаданных, о которых вы сделали замечание ниже. Если зашифровать дату отправки сообщения, то нельзя будет отсортировать последние или первые 20 сообщений.И поделюсь сырыми мыслями которые крутятся у меня сейчас на этот счет:Может быть Телеграм как шифровальный мессенджер неудачен, с этим я согласен, но как мессенджер сам по себе, нужно признать, чрезвычайно удобен. Им пользуются все, и такая популярность достигнута благодаря тому, что его юзабилити привычны пользователю. Что-то не знакомое отталкивает. Нужно повторить подобный трюк и сделать это лучше - вместо самопальных алгоритмов шифрования, который использует телеграм, я уже использую проверенный OpenPGP. Осталось только повторить интерфейс.Я вижу как предложенный вами способ может сработать. Действительно, на расшифровку одного единственного сообщения, в независимости от его размера, уходят доли секунды. Проблемы начинаются когда сообщений несколько, и их дешифровать одновременно - начинаются перегрузы в памяти и приложение начинает работать медленней (и даже фризить если не использовать Web Worker). И расшифровка сообщений по одному может решить проблему. К тому же, вы предложили как можно вывести сообщения плавно и это может выглядеть симпатично. Я проведу тесты. Но если дешифровка будет проходить всё равно медленно или это будет выглядеть некрасиво, или будут технические проблемы в реализации, придётся отказаться от этого решения.Пока вопрос:>- показываем сначала блоки-плейсхолдеры вместо сообщенийКак рассчитать размер плейсхолдера? Сообщения могут быть разного размера, и после дешифровки, если размер плейсхолдера статичный, то будет выглядеть немного "дёргано".Критический, всё же, момент то что нельзя сделать поиск по сообщениям.>> Нужно добавить ещё urlname>>Это можно назвать login или slug.Или username. Я только что посмотрел в api телеграма, и это называется так https://core.telegram.org/bots/api#user>> participant, // Ссылка на собеседника, в случае приватной конференции, для публичных это поле остаётся пустым.>>Не лучше ли назвать partner/other_party?А можно назвать ещё проще и лаконичней - party? Это может подразумевать под собой как раз другую сторону:https://translate.google.com/?source=osdd#auto/ru/party>Noun>③ a person or people forming one side in an agreement or dispute.>соучастник partner, accomplice, accessory, accessary, party, associate>участник party, participant, member, partner, participator, partaker>сторона side, party, hand, part, way, aspect>> date,>>Может, лучше писать send_time?>>И еще по схеме БД - а не слишком ли много метаданных в открытом виде? Может, есть смысл хранить метаданные сообщения как JSON и шифровать, и хранить шифротекст в единственной колонке metadata ?>Может, лучше писать send_time?А почему нельзя назвать просто и лаконично date? Разве на очевидно что это дата сообщения?>И еще по схеме БД - а не слишком ли много метаданных в открытом виде? Может, есть смысл хранить метаданные сообщения как JSON и шифровать, и хранить шифротекст в единственной колонке metadata ?Какие метаданные, помимо даты, вы хотели бы чтобы шифровались?Что касается даты, как я писал выше, если её зашифровать, то нельзя будет сделать выборку по первым или последним сообщениям. >> Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть (в случае приватной конференции), и вместе с Получателями в случае с публичной конференции:>>Не очень понятно, зачем тут выбирать Получателей? Мы же выбираем только сообщения, адресованные данному пользователю? Я предполагаю, что если пользователь - участник конференции, то все сообщения в ней (не написанные им) адресованы ему. Или это на случай, если пользователь состоит в чате, но как-то забанен в нем? На случай игнора отправителя?Да, я как раз думал об этом, что получателей не обязательно получать, потому что единственный случай, когда нужно получить их, это когда пользователь сам захочешь посмотреть кто состоит в беседе (публичной конференции).Это как раз решает проблему с кешированием выше и проблему с сортировкой ниже.По поводу оптимизации:Спасибо, что указали в каком направлении нужно двигаться, думаю я понял что нужно делать.Задавать какие-то конкретные вопросы тяжело, и я буду задавать их и делать отчеты по мере прогресса.Сейчас у меня есть такие вопросы:Как тестируются параллельное выполнение запросов?Если написать скрипт, например на PHP, который будет обращаться к БД, он будет выполнять одну команду за другой, императивно. Нужно что-то, что будет выполнять запросы параллельно. Как это сделать? >- БД работает хорошо только пока индексы помещаются в память. Размер индексов можно как-то увидеть, не помню как. А если таблица помещается в память - то вообще все чудесно. Хайлоад обычно предполагает, что все влезает в память, кроме может быть редко используемых данных. Помещаются данные в память или нет - очень важный фактор, влияющий на производительность.Тяжело представить что таблица сообщений или конференций поместиться в память, потому что количество записей, в теории, будет катастрофически велико. Как с этим выйдет на практике?И ещё я сейчас поймал себя на мысли, что ничего не знаю о том когда данные хранятся в RAM, я всегда думал что записи хранятся на диске. Я погуглил этот вопрос, и создаётся впечатление что PostgreSQL решает автоматически когда хранить данные в RAM а когда на диске, и предпочтительнее в RAM. Это верно?>- для тестирования было бы здорово сделать генератор, который нагенерирует произвольное число пользователей, конференций, сообщений. По ним прогонять запросы по одному и параллельно для измерения реальной производительности.А у меня есть подобный генератор, который заполняет базу тремя пользователями (Alice, Bob и Tester) и заполняет по сотне сообщений между ними: (☣ Warning! Code with a smell! ☣) https://github.com/someApprentice/Crypter/blob/master/api/src/Command/PopulateCommand.phpСледовало бы увеличить количество пользователей до сотен и количество сообщений до тысяч?Будет ли лучше если я вместо выполнения HTTP-запросов создам объекты с помощью Faker и factory-muffin, и выполню все запросы к БД напрямую?
Как-то забил на программирование, кроме задачек на codewars, но начал читать литературы (учебники, сайты и т.д.) в промышленных масштабах. Такое чувство, что скоро на меня снизойдёт просветление.
>>1613324Нет никакой кампании, лол. Это просто обычные попытки стандартизировать используемые подходы. На фронте у PHP щас только ДВА фреймворка осталось - Symfony для корпората и Laravel для стартапов - выбирай, где хочешь больше работать, и учи. Оба они показывают, как надо писать на этом языке - это PHP в его лучшем виде. Если тебе по-прежнему кажется, что они сделаны плохо и лучше писать самому, то либо ты очень крутой спец, который может одной левой на Slim построить крутую систему под конкретные задачи, либо школьник.
>>1612509>Есть codeforces от ДуроваОт Дурова? Интерфейс конечно ужасный. Непонятно где задачи и как вообще пользоваться сайтом.
>>1599201 (OP)аноны, прошу совета.мне почти 30.образование 9 классов. да и то формально.работаю на дно-работе. зарабатываю копейки. и всё меня устраивало.но сейчас возникли проблемы со здоровьем, решение которых требует больших финансовых затрат.и я рассматриваю как вариант вкат в php-программинг.но у меня реально крайне хуёво с образованием ( в т.ч. с физ-мат науками ).тем не менее вот эту задачу ( с которой тут, я сморю, многие ебутся ) я решил за 20 минут на онлайн-интерпретаторе.имея из опыта в этой области только 1 прочитанную в детстве ( пролистанную ) книженцию по языку си для школьников.<Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?что посоветуете?
>>1613853>что посоветуете?Ебашь, что сказать, сперва погромирование, затем догоняй математику, по типу пикрелейтед книги почитай, если есть где-то жесткие пробелы в знаниях, то заделывай их.
>>1613864>>1613862уточню.возможно ли устроиться работать php-шником, имея познания в области физ-мат наук на уровне примерно начальной школы?
Аноны, это снова я, спасибо за ответы, многое понял для себя и разобрал кашуЯ пришёл к такому выводу, что сейчас всё пришло к тому, чтобы отделить взаимодействие разработчиков фронта и бека, каждый делает по своему и как может, а если не может, то его просто заменяет другой, главная их цель это использование стандарта между собой, который в основном сейчас это JSON, то есть задача бека вывести данные из БД в формате JSON, а фронта принять их, спарсить и вывести на экран тонной фреймворков, вся нагрузка на железо теперь распределилась на сторону клиента, а взаимодействие бека и фронта на реализации создании джейсона и его вывода на страницу, я всё правильно понял? Посмотрев ютуб, понравилась концепция создания интернет магазина, где вся суть в том чтобы получив данные из GET/POST запроса сконвертировать нужные данные в JSON и получив их вывести на экран, весь магазин в итоге сводится к 3-х страничнику, главная/корзина/страница товара, но всё это конечно заебись если ты не собираешься индексироваться в коисковиках, иначе над беком придётся сильно ебаться чтобы он ещё и страницы генерировал, хотя бы при 1 запросе>>1611042-хуйС выбором фреймворка пока не определился, смотрел ютуб, но все предложения сохранил в закладки, пока для себя определился что первым делом нужно будет попробовать Slim, то есть я так понял нужно просто найти фреймворк который превратил основной функционал в функции, файл которых нужно будет просто подключить и уже пользуясь ими писать короткий код
>>1614080Со Spring вполне может. Но Java - это не только Spring, экосистема Java вполне может покрывать все нужды энтерпрайза и даже больше, в то время как PHP нет.
>>1614105Имеется в виду, что Java - это BigData, ML, concurrency, highload и куча всего еще, что может быть в составе крупного энтерпрайза. А PHP - это только веб.
>>1614057>первым делом нужно будет попробовать SlimПлохой выбор. Для новичка нужно брать что-то готовое, созданное по лучшим практикам, и разбираться, как все устроено внутри - Laravel, Symfony, все остальное сейчас - легаси.>чтобы отделить взаимодействие разработчиков фронта и бека, каждый делает по своему и как можетНе "как может", а по вполне определенным подходам, которые еще и могут пересекаться между фронтом и бэком, т.е. опыт частично можно переносить.>вся нагрузка на железо теперь распределилась на сторону клиентаНет, сложная бизнес-логика по-прежнему на сервере.>понравилась концепция создания интернет магазинаЭто одна из дефолтных сфер, где доминирует PHP - e-commerce (мелкий/средний бизнес).
>>1614105Значит ли это, что при необходимости можно относительно безболезненно перекатиться с PHP на Джаву? (в контексте веба)
>>1614143Да, можно. Причем, может быть так, что Java после PHP не понравится, но примеры таких перекатов среди моих знакомых есть - один из них щас в СберТехе 200к получает, перекатился 2 года назад где-то.
>>1614128Ну а в остальном я правильно понял? Бекенду нужно высрать джейсон из базы, а фронту пропарсить его и отрисовать?
анчоусы, подскажите такой момент с ассоц массивами. https://ideone.com/eYintb вот пример где мне надо сложить два массива. но не просто сложить, а чтобы по ключу значения из второго массива как бы встроились в первый. так вот как это реализовать? нагуглить как вы понимаете нихуя не смог везде только одна ебучая конкатенация
>>1599201 (OP)Подскажите, я на laravel могу красиво крудошлепить используя его инструменты(всякие курсы-хуюрсы качаю и смотрю, как строят приложения) и композерем тащить нужные зависимости , но когда нужно создать какой-нибудь модуль - я обсираюсь и пизжю решение из инета. Так вот, собственно, вопрос: как научится (мыслить логически, хз) создавать модули? Как прокачать этот скил? Логические задачки решать или что? Или это нормально в начале и все дальше все поедет? Чувствую себя идиотом.
>>1614838Декомпозируешь функционал и пилишь потихонечку. В конце концов любая таска сводится к множеству атомарных тасок типа "сделать запрос в бд" или "обрезать строку".
>>1599201 (OP)Ребята, а есть кто работает дома? На каких сайтах ищите работу? Что обычно делаете по работе (сайты или что?).
>>1599201 (OP)Изучив Php, реально ли работать дома? Или будешь мало получать, и придется работать на дядю-контору каждый день в офисе?
>>1614972>Почему лучше в офисе?А сам как думаешь, есть мысли? Научишься взаимодействовать с разработчиками и вообще с людьми, если сычуешь.
>>1615000Зачем взаимодействовать с разработчиками какими-то с офиса, если во фрилансе ты сам на себя работаешь?Не сычую
>>1615005В будущем захочешь стать сеньором 300к/наносек - навыки и знания из "внутренней кухни" пригодятся.
>>1615008то есть ситуация такая: сидишь-пердишь в офисе пару лет, потом домашний фрилансер и опять работа в офисе, но уже покрупнее и посолиднее?
>>1614912>есть кто работает дома?Есть>На каких сайтах ищите работу?хх, мойкруг, линкедин, телеграм чаты с работой php_jobs>Что обычно делаете по работе (сайты или что?)Поддерживаю продукт, что-то допиливаю, фикшу.
>>1615014В начале пару лет пердишь в офисе. Потом думаешь, что больше хочется - офис/релокейт/удаленка/фриланс
>>1614552REST API это называется, и это целый архитектурный паттерн поверх HTTP со своими правилами и особенностями, а не просто "высрать джейсон из базы". Если ты собрался срать джейсонами, то пожалуйста, не иди в веб или как минимум в PHP. Иди лучше в JS - там щас наибольшая концентрация всяких сирунов разной мастистости - они тебя встретят как родного и научат филигранно высирать каждый месяц очередной ShitJS, с которым ты будешь носиться по местным общественным туалетам (по ошибке называемым митапами и конфами), где будешь доказывать, что твое говно самое красивое и наименее вонючее, и что все должны кушать именно его. Короче, съеби.
>>1615005Не на себя работаешь, а на заказчика. И с ним порой труднее взаимодействовать, чем с коллегой-программистом.
>>1615151Не, это вряд ли. Просто заказчики обычно не шарят в программировании, поэтому трудно договориться.
сейчас встретил такого вида запись $dispatch_number = $array['response']['Order'][0]['butes']['orderNumber'];анонсы, подскажите что это значит?
>>1615621ну это понятно. а что значит то что идет в правой части? отдебажить ипонять что за че отвечает нихуя не смогу тк этого прилетает с устаревшего api
>>1615684>var_dump(); die;бля, недавно в довольно крупном гос проекте такое встретил в продакт-коде, аж сердце прихватило.
>>1599201 (OP)Верстка страницы про регулярные выражения пиздецовая конечно - очень много инфы и картинок, нет какого-то порядка, скроллить просто мучение и сразу 8 задачек
>>1615684да так и делал, только он мне фаталы выбрасывает и говорит шобi я шел нахуй с неправильными оффсетами. в гугле для многомерных массивов я инфы не нашел
>>1615717Откопал историю про маскот пыхи - elePHPant, https://7php.com/elephpant. Мб кому интересно будет.
мимо сеньер со стажем в 10 летесли хотите, могу за чонить пояснить в ближайшие пару часов, пока вискарь меня совсем не забрала может я забуду про тред и пойду дальше пьянствовать, сорри
>>1615796 Многомерный массив - это массив, в котором значением элемента является другой массив. Например: // обычный массив$a = [1 => 'test'];// 2-мерный массив$b = [777 => $a];// то же самое, что$b = [777 => [1 => 'test']];>>1615724Справедливое замечание. Если будет время, постараюсь поправить.>>1614057 Общая идея, да, в разделении работы между бекендщиками и фронтендщиками. Но вот только это вряд ли проще и быстрее, чем монолитное приложение. Ведь теперь у нас не одно, а два приложения (фронт и бек), нужно их делать, документировать, синхронизировать разработку. А каково отлаживать баг, для которого надо разобраться в работе обоих частей?С точки зрения простоты как раз сгенерировать на сервере страничку из имеющихся данных будет проще. Однако, если команда большая, то разделение работы между двумя командами может упростить жизнь.
Анончики (или ОП, если увидишь),поясните за Sphinx. Делаю задачу про файлообменник, на стадии реализации поиска через Сфинкс. Я правильно понимаю, что из сфинкса я получаю id записи в базе и потом беру данные из БД, используя полученный ранее id?
>>1616210>Однако, если команда большая, то разделение работы между двумя командами может упростить жизнь.Да и снять часть работы с сервера, думаю. Всё таки просто отдать данные клиенту, а тот пускай сам их рисует - вполне здравая идея.Только эффект от этого будет на действительно хайлоад приложениях с тысячами пользователей.Поправьте если ошибаюсь.
>>1616210Вот ещё вопрос насчет задачи - "На вход скрипта дан введенный пользователем номер телефона..." Это надо делать отдельный хтмл с полем ввода?
>>1615139Но ведь я не веб макака раб, я просто вебмастер и учу php и js для своих целей, для обслуживания и накручивания ништяков для своего сайта, но с тобой согласен, ебучие хохлядские макаки навысирали фрейворков как их навысирали их матери шлюхи за сало
Аноны, снова выхожу на связьДошёл до такого момента как - как сделать ЧПУ, я правильно понимаю что это называется роутинг?Бля, неужели ЧПУ приходит к тому, что создаётся файл в котором каждую страницу прописывают вручную и указывают содержимое какого php файла выводить в контент по нужному url?Или вручную это делается только на мелких проектах, а на крупных в автоматическом ражиме это происходит с помощью хранения названий всех ЧПУ в БД? И уже какой-то файл асоциируя контент всё в тот же файл подставляет нужный нам ЧПУ и вызывает нужный для него контент? Бля, надеюсь понятно объяснил, в общем вопрос в том в чём заключается суть и концепция создания нужного мне урл для каждой страницы, это создание файла в котором всё это прописывается, или файла который хранит все эти урл в бд и с помощью хитровыебанного кода решает какой контент выводить?
И ещё такой вопрос, вчера дошёл до Монго ДБ, его же можно использовать совместно с PHP вместо MySQL? А так по сути получается с монго дб можно работать и прямо из JS скрипта? Проблема в том что там будет палиться инвормация для связи с БД и для этого и используют Node JS?
ОП, глянь, пожалуйста, задачу абитуриентов. Несколько месяцев назад ещё отправлял, но ты, видимо, пропустил. Сейчас файлообменник пишу, и не хотелось бы косяки переносить в него.https://github.com/deadj/student-listhttp://f914421i.beget.tech/
>>1616893>неужели ЧПУ приходит к тому, что создаётся файл в котором каждую страницу прописывают вручную и указывают содержимое какого php файла выводить в контент по нужному url?Гугли MVC.
Блять анонсы блять ну в что за хуйню вы превратили ламповый пиэйчпи? Что блять за композеры, тонны блять мегатонны говна и папок фреймворков, вы совсем ебанулись от лени? Что это за хуйня, нахуй блять так жить! М? Просто сука ебануться, чтобы просто написать код, раньше надо было просто создать файл индекс пиэйчпи, а щас блять я ещё должен тонный говна установить на пк и ебаться блять пердолиться как красноглазик в консоль, ну нахуй так жить м? Что за пидорас это придумал? Нахуй вы все его послушали? Ооп блять мвс блять конченные блять ну вас нахуй блять
Анонсы, я почитал про mysql на w3scool и запутался, какой способ подключения лучше использовать и в чём их отличия, нахуй их столько наштамповали? Из 3-х предложенных мне больше всего понравился по виду объектно ориентированный, по синтаксису процедурный, а PDO это пиздец что за хуйня вообще, вырвиглаз
>>1617572> почитал про mysql на w3scool и запутался, какой способ подключения лучше использовать и в чём их отличия, нахуй их столько наштамповали?Хуёво же ты прочитал, если у тебя вопросы остались. Иди читай по новой.>понравился по виду объектно ориентированный>PDO это пиздец что за хуйня вообще, вырвиглазмда...
И как можно скачать фреймворк без всяких компостеров и терминалов, чтобы просто поковырять его внутренности, почему просто нельзя скачать ЗИП архив, что за аутизм с установками
>>1617573Ну вот что тут можно понять https://schoolsw3.com/php/php_mysql_connect.php на инглиш версии я не осилил
>>1617575И сразу в первых предложениях.>Если вам нужен короткий ответ, выбирайте "Что вам нравится".ты пиздец.
>>1617577Мне просто сдаётся что если выбирать то что нравится, вы изведётесь говном, хая какое небезопасное говно я выбрал, что так подключаются к БД только мудаки, значит отличие не в безопасности? Сейчас дошло что PDO ещё и через страйкер работает, вообще пиздец какой-то, нахуй его выслали, и прочитать нормальными русскими словами негде, теоретики с Ютуба сами не могут объяснить
>>1617559>Что блять за композерыРуками собрался либы менеджерить? Или свои велосипедить?>тонны блять мегатонны говна и папок фреймворковПроекты растут, нужен инструментарий, базовый каркасс веб приложения. Ты всё еще волен писать на ваниле, но по темпу разработки не поспеешь за васяном с фреймворком>я ещё должен тонный говна установить на пк и ебаться блять пердолиться как красноглазик в консольСтавишь пхп, композер, установщик фреймворка, пишешь 1 команду в консоль - проект готов. Сложно?
>>1617612>Руками собрался либы менеджерить?Вот тут вот не понял, я имею ввиду почему просто нельзя скачать архивЭто блять что получается, после написания на этих хуеворках, всё это говно из статысяч папок ещё и на сервер надо грузить? Пиздец, ещё и хостинг говном забивать, пиздец даунизм
>>1617603Щас бы слушать довенов которые критикуют СТАНДАРТНЫЕ приёмы работы с БД...Суть в том, что ты выбираешь не технологию, а стиль кода. Любишь ООП - бери одно, любишь процедурный стиль - другое. Я вот процедурный люблю, потому-что PDO - яебал ручками прописывать. Но например в YII PDO наоборот быстрее получается. Потому-что 90% работы фрэймворк на себя берёт. И да, если ты умеешь в ООП PHP, ты уже на кровне где нужно формировать своё мнение исходя из опыта использования.
>>1617625Спасибо, просто хотел понять в чём различия, говноютуберы посеяли сомнения своими домыслами как лучше, мне тоже больше нравится процедурный даже, никаких ебучих стрелочек, так то я пришёл с яваскрипта в пхп, по этому мне это роднее
>>16174981.У тебя там XSS как минимум2. При выборе страницы в списке передается параметр search если туда ввести например admin, он выдаст таблицу без значений(скуля скорее всего)3. первый и второй текстбокс при реге называются имя и валидатор выдает одно и то же сообщение
Посоны, а в процедурном методе обязательно нужно в конце mysqli_close() делать или это опять теории ютуберов?
Блин посоны, а Check connection обязательно нужен? Нафига нам пользователям то показывать ошибку, он есть во всех примерах, там же и так выведет ошибкуif ($conn->query($sql) === TRUE) { echo "New record created successfully";} else { echo "Error: " . $sql . "<br>" . $conn->error;}>>1617640А как же миф типа если его не закрыть, то оно останется открытым в ожидании пользователя? Или это уже давно пофикшено? То есть можно забить на закрытие?
>>1617632Объясни, пожалуйста, на счёт XSS. Прочитал урок ОП, как я понял XSS можно решить, используя htmlspecialchars(). Разве нет?
>>1617727Возможность добавления появляется, потому что ты криво регулярку сделал и она у тебя англ символы пропускает и <>, а возможность вывода из-за htmlspecialchars() эта функция должна работать при выводе значений в таблице(в данном случаи), короче открой свой сайт, открой список через Ctrl+U и посмотри, что необычного есть у студента "Василий Вася", а потом глянь как он у тебя записан в бд.
>>1617621>почему просто нельзя скачать архивСейчас бы со скачкой ебаться, с архивом. Когда можно одной строкой поставить.
>>1617630>так то я пришёл с яваскриптаПостоянно от яваскриптеров слышу - какой бэк простой.Поздравляю - у тебя глазки раскрылись на всю эту парашу.
>>1616066У меня очень зловонный пердеж, и я не знаю как сидеть с этим на работе - постоянно бегать в туалет только чтобы пердануть? А если не успею, или мне расхочется по пути, а это вредно сдерживать газы, что посоветуешь по этому поводу кроме очевидной удаленки?
>>1617621>Вот тут вот не понял, я имею ввиду почему просто нельзя скачать архивКакой архив?Под новый проект будешь каждый раз качать пару десятков архивов? Потом будешь разгребать совместимость версий либ, чтобы всё со всем работало.Нет бы взять композер, который берет эту задачу на себя
>>1617621> всё это говно из статысяч папок ещё и на сервер надо грузитьТы грузишь только код своего проекта. Либы ставятся на сервере одной командой: composer install
ОП, и/или другой грамотный господин. Ты когда то говорил о том как в приложени совместить ноду + пхп. Вот я хочу такое что то запилить.Но как концептуально это должно выглядеть?Нода-сервер принимает запрос, и отправляет этот запрос на api пхп сервера? ПХП делает какое то оче-долгое математическое вычисление фибоначи до миллиарда считает ( которое в ноде бы заблокировало бы цикл libuv ), пхп завершает вычисления, нода резолвит этот запрос и возвращает клиенту данные.Как то так это выглядит? Я понимаю что пхп для математических вычислений это наркомания.А воообще ирл какой кейс пхп + нода может быть?
>>1618019Чего там охуенного, что работа с фронтом в бэк уезжает? Очередной васянский лисопед.Давай ещё вставки js генерить на пхп? Вообще охуеешь при отладке.
>>1618125Не работал с ним. Говорят - параша.Чисто на вскидку - там нехороший мужчина впиливает обработку событий в шаблонизатор. И к этому говну, как я понял, ещё и жс прилагается. Получается, что под соусом наглядности нам фуфло двигают: работы - больше, код - запутаннее, зато очередной васян звёздочек отхватит от наивных дурачков вроде этого >>1618019
Аноны, я не могу никак понять как работают ларавел, симфони, юи2 и т.п. фреймворки, для меня эти подключения классов, все эти модели, вьюверы, контроллеры - это какой-то пиздец, я не понимаю их логику и почему они считают что так лучше, по мне это какой-то пиздец с тонной ненужных файлов и назовём их редиректами, когда итоговый файл лежит со всем не там где должен по логики запроса в урл, а совсем в других папках и эти ебучие подключения тонн файлов в другие файлы которые в свою очередь тоже поключают ещё тонны файлов, блять, это пиздец какой-тоЯ это всё учу просто для себя, идти с этим на работу я как минимум ссу, потому что засмеют да и спецов пиздюков там уже наверняка тонны которые щёлкают это как семечки и будут смотреь на меня как на дебилаЯ к чему пришёл, я уже знаю js и php, мне показлось если сейчас изучить vue, а потом angular я смогу понять принцип всего этого взаимодействия и того в чём задумка разработчиков фреймворком для php?
>>1618130>Говорят - парашаВсё так. В 3 версии yii хотят уйти от этого, но уже поздно, yii никому нахер не нужен
>>1617945Теперь я запутался ещё больше, что за совместимости ещё там нужны? Почему нет просто архива с исходниками, те же папки с файлами но в архиве
>>1618138Тебе нужно поставить 2 либы. У одной версия X, у второй Y. Версия X требует версии YY у второго.А теперь помножь это на сотню либ
>>1618135>Я это всё учу просто для себя, идти с этим на работу я как минимум ссу, потому что засмеютТебя даже на собес не позовут без указания знания пары MVC фреймворков>если сейчас изучить vue, а потом angular я смогу понять принцип всего этого взаимодействияНет, ты так же обосрешься на изучении, т.к. ангуляр следует примерно той же архитектуре.Совет как изучить MVC - берешь курсец laracasts или елисеева и пилишь паралеллельно видео проект из курса. Потом поймешь, зачем нужно разделять к примеру логику представления от моделей
>>1618140Это всё из-з этого ебучие подхода с git? Где каждый файл блять каждую минуту меняется, что сука нельзя просто скачать ебучий архим, блять ну нахуй так жить, мудаки сука напридумывали говна и рады
>>1618149Добро пожаловать в интернет.Еще скажи, что гитом не умеешь пользоваться - любая контора тут же нахер пошлет
>>1618142>т.к. ангуляр следует примерно той же архитектуреПо этому и придумал дял себя такой лайт вариант, сперва вью, чтобы вообще понять зачем ебанаты ушли от ванилы, потому ангулар, чтобы понять зачем ебанаты всё эторазделили на миллион папок и библиотек и потом уже ларавел, просто js я пока понимаю больше
>>1618151Не умею, из работы работал пару месяцев в местном провайдере, всё остальное время занимался пиратскими сайтами, а сейчас хочется для себя понять принципы и куда всё движется, не всю же жизнь ставочки и казино рекламировать
>>1618152>зачем ебанаты ушли от ванилыЗатем же, зачем придумали ООП.Чтобы пилить более сложные проекты. В реальной работе не будет laba1.cpp на 10 строк. Это будут ебы на несколько десятков или даже сотен тысяч строк
>>1618156Да я смотрю пыха вообще в жаву превращается. В какой-нить 10 версии уже можно будет пыхарями жавистов заменять. Все охуеют от такого поворота.
>>1618155Вот все на ютуб еговорят сложные проекты, а что блять такое сложные проекты? Вывести список товаров на алике - это блять сложно? И по этому надо так голову ломать ради их видения того как всё должно работать?
>>1618164>Вывести список товаров на алике - это блять сложноДа, сложно. Там может быть с десяток таблиц для хранения данных по товарам + склады + акции + еще хуета какая. И нужно умудриться сделать так, чтобы это отрабатывало за адекватное время.
>>1617931Не обедать на работе и не жрать всякое говно. Не пердеть, короче. У меня одно время была проблема вонючих ног, лол, решил всякими средствами, но некоторое время было неловко.
>>1618164>Вывести список товаров на алике - это блять сложноДа, блять, это сложно, надо учесть твои индивидуальные предпочтения и сезонные изменения с помощью нейронки и только потом вывести. Все это на 100500 серверах с автодеплоем.Сложные проекты - это про дружбу говна с мочой, спермой и слизью, чтобы все это вместе работало.На самом деле действительно сложные проекты сложные уже настолько, что какой-то единой инфраструктуры у них вообще нет, кругом микросервисы, которые общаются между собой по заданным протоколам, каждый сервис разрабатывают отдельные разрабы на своем стеке и как работает какой-то другой в душе не ебут даже, чисто по той причине, что невозможно синхронизировать такую разработку.
Блять мне просто стыдно что программисты так деградровали и убили веб разработку, превратив всё в кучу говна из костылей на костылях, всё из-за своей лени и подходе лишь бы быстрее высрать, получть бабки и сбежать на балии ебись оно конём как оно после него будет работать, блядская хипсерская сущность пидораса
>>1618173Ты сразу в двух тредах рвёшься что ли? Эка у тебя пердак разметало от собственной необучаемости.
>>1618173>деградровали и убили веб разработкуА десктоп-разработку кто убил?Кто в андроид-апи насрал, почему оно состоит из костылей абсолютно полностью?Кто в C++ насрал, почему эта говнина такая кривая и немощная, что на ней невозможно разрабатывать сложный надежный софт?
>>1618178>C++И не надо тут пиздеть, мол, давно делали, в ту пору можно было говно лепить.Тот же пых уже несколько мажорных версий поменял и PHP7 - это совсем не то самое, что PHP4.А кресты как были кривой парашей, так и остались
Посмотрел этот высер https://www.youtube.com/watch?v=2qdpP-jWH5EВот вы аноны тут сидите такие невьебенные бекендеры, а чем вы вообще занимаетесь-то? Вот вы говорите устроился в фирму, ну и что вы там делаете? Ну написали вы сайт для неё, вывели товары и что потом? На это максимум месяц уйдёт, ну а дальше нахуй вы там нужны? Вас же рано или поздно просто пидорнут за ненадобностью, потому что просто добавлять контент может и секретарша скачащая на хую директора, что там блять можно сутками с утра до вечера несколько лет каждый день писать на своему злоебучем ларавеле и прочей нечести?Где вообще все эти блять невьебенные бекендеры и фронтендеры работают? Я вот чёто нихуя ни 1 не вижу и не слышу, почитав интернет и посмотрев ютуб куда не плюнь везде невьебенный программист, НО ГДЕ БЛЯТЬ ОНИ ВСЕ, мне вот нарример просто интересно посмотреть на такую контору, что эти распиздяи за 200к там такого невьебатого делают что имеют такое невьебенное чсв и считают что жизнь удалась, по мне так это ленивые создающие вид работы черви, ну не видел я ни одного за работой, не верю я что там пиздец так всё сложно что прям пизда
>>1618205Нет же, я хочу понять чем я буду заниматься, если решу окунуться в это говно из костылей и мочи с головой
>>1618191Фичи всякие добавляют, ящитаю. Вот год назад мой банк не умел в статистику, обмен валют на сайте и много других операций, сейчас все это прикрутили, стало заебись.
>>1618221>Фичи всякие добавляютВсё верно. Фичи, дебаг, документация, прочая поддержка. Запил сервиса это только начало и никто на этом не останавливается. Зачастую сервис начинает работать и приносить прибыль будучи даже не дописанным до полного функционала. Ну а потом программист сидит как минимум для того, чтобы было кому разбираться в этом говне если что-то упадёт.
>>1618267>создав сайт с говном можно иметь в 2 раза больше с рекламыЕсли б я хотел бы говно рекламировать - не лез бы в программирование. Ты совсем даун?
Сап, двач. Короче, сижу на петушиной работе на похапе уже 4 месяца. Мне скучно, хочу найти другое место. Посоветуйте чё написать в гитхабе. Я фулстек, знаю laravel, vue, angular и немножко ноды. Но проект хочу делать на похычеЧё сделать заебатого? Идей вообще нет. Желательно что-то такое, что можно рили хостануть и чтоб польза была.Единственное что в голову лезет - это приложение по генерации тестов и опросов, но это же такая лажа...
>>1618406Название переменной неудачное. Оно должно говорить о содержимом, а не быть каким-то невнятным глаголом.
>>1618222>документацияА как это делается, где можно почитать или посмотреть образец составления документации?
>>1618579Они ж ролики по пхп делают - старательно пересказывают мануалы, разбавляя рекламой каждые 10 минут.
А почему люди на cms гонят? - это же админка, которую без готовой cms надо будет самому делать? То есть без cms, самописной или покупной - не обойтись для какого-нибудь интернет магазины?
Анонсы, скачал с гитхаба похапе фреймворков для вскрытия, я правильно понимаю, что пердолиться в сосноль и ставить компостер нужно для того чтобы он к этим мёртворождённым докачивал всякие доп. жс библиотеки и прочую хуйню чтобы этот гондон штопаный ожил и начал работать?В копмостер.жсон как раз и написано какое говно ему надо скачать чтобы это говно наполнилось говном и мясом и перестало быть просто высушенным скелетом?На пике я так понимаю это типа как в нормальных языках подключение библиотек происходит? В данном случаи других каталогов фреймворка с прочим говном?Тред вроде бы утонул, почему не пересоздают?
>>1618724Наверно потому что весь код цмс в открытом доступе и все кулцхацкеры их уже изъебали и прошурстрили от и до и знают с какой стороны к ним подойти чтобы присунуть админу в жопу и в рот
>>1618724>А почему люди на cms гонят?Потому что там практически нет написания кода. По сути конфигурируешь готовую систему. Т.е. к разработке относится опосредованно.
>>1618769Композер ставит только php библиотеки, с жс он не работает.>В копмостер.жсон как раз и написано какое говно ему надо скачать чтобы это говно наполнилось говном и мясом и перестало быть просто высушенным скелетом?Да. Причем в каждой либе свой композер.жсон лежит. Композер собирает эти зависимости в кучу и разруливает. На выходе получаешь папку вендор, в которой лежат все необходимые либы для твоего проекта.>На пике я так понимаю это типа как в нормальных языках подключение библиотек происходит?Вроде того. Далее либо создаешь нужный объект, либо через DI тащишь что нужно.
>>1618769Да, композер скачивает (в папку vendor), устанавливает и обеспечивает автозагрузку библиотек, прописанных в composer.json.Ты можешь найти любую библиотеку, зайдя на https://packagist.org/ и вбив ее имя из composer.json. Там будет выдана ссылка на гитхаб, на котором ты можешь скачать библиотеку архивом и вручную установить в папку vendor, если у тебя много свободного времени, чтобы делать вручную то, что может сделать программа. Композер также настраивает автозагрузку для кода и всех сторонних библиотек. Почитать про автозагрузку можно тут https://github.com/codedokode/pasta/blob/master/php/autoload.md Про композер можно почитать в документации к нему на англ.Если ты хочешь разбираться в фреймворках, тебе надо понимать ООП и некоторые паттерны. Про ООП ты можешь почитать, открыв главу "ООП" из учебника в шапке, или в любом другом учебнике. Куча полезной информации, например, про паттерны работы с БД в фрйемворках или шаблонизацию, есть тут https://github.com/codedokode/pasta/>>1618775Ну так она и называется - система управления контентом, а не система написания кода.
>>1618769На картинке не подключение библиотек, а указывается, какому полному имени класса соответствует короткий синоним в коде. Например, там указано полное имя классов Exists, In, NotIn, которые в коде пишутся просто одним словом без длинного неймспейса. Тред пересоздадим на 800-900 посте, или позже, если у меня будет мало времени.>>1618632Документации бывают разные. Есть документация по коду - phpDoc - погугли сам - это специальные комментарии в коде. Из них можно сгененировать что-то такое: https://devdocs.io/symfony~3.4/symfony/component/httpfoundation/cookieА бывает документация к API, например: - https://tech.yandex.ru/maps/jsapi/doc/2.1/ref/reference/Clusterer-docpage/- https://api.apiship.ru/doc/
>>1618191Если ты хороший специалист, то даже если тебя уволят, у тебя будет несколько новых предложений о работе.Платить 200к не проблема, если человек приносит компании больше прибыли. Ну, например, автоматизирует работу, которую бы делали несколько других человек. Или делает продукт, который продается намного дороже/приносит прибыль. То, что ты не видел, не значит, что этого нет. >>1618164Ты когда-нибудь видел магазин изнутри? "просто список товаров" - это не просто список товаров, а список от разных продавцов, с проверкой наличия, с импортом, с расчетом скидок и предложений, с хитрой сортировкой, дающей максимальную прибыль, с всякими заманивающими надписями (осталось полчаса до конца скидки). По твоей логике, дом построить - тоже просто кирпичи друг на друга положить. Зачем проектировать, делать расчеты, производственные графики, оптимизацию снабжения итд.
>>1618152Я тебе облегчу путь. "Ушли от ванилы", так как в каких-то сложных экранных формах, где больше десятка элементов, код на "ваниле" превращается в копирование данных туда-сюда. Например: покупатель поменял тип доставки, надо рассчитать и обновить: стоимость доставки, срок доставки, цену заказа, скидку. Покупатель добавил одну единицу товара, надо все пересчитать, плюс у него включилась бесплатная доставка, опять же, надо все пересчитать.В итоге большая часть кода состоит из этих "обновлений" информации, и очень легко что-то пропустить, запутаться и забыть обновить (например: забыть показать плашку бесплатной доставки после увеличения кол-ва товара). Потому и появляются новые техники: - дата-байндинг - автоматическое копирование данных из переменных на экран и назад- реактивное программирование - автоматический пересчет выражения (например: сумма заказа) при изменении любых компонентов формулы (кол-во товара, тип доставки итд)- реактивные шаблоны - шаблоны, которые автоматически обновляются и обновляют содержимое экрана при изменении величин (переменных), которые использовались при их рендеринге.Я тебе советую: попробуй сделать какую-то экранную форму с зависимостями сначала на чистом JS, а потом на фреймворке. Например: форма заказа в магазине, форма выдачи кредита (с кучей условий, проверок, зависимых друг от друга полей). Или еще лучше: сделай ленту новостей. Просто есть новости, в виде бесконечной ленты, которая подтягивается с сервера. Новости можно читать, можно лайкать и комментировать. Есть также категории можно смотреть новости только в категории. Еще круче, если твое приложение сможет кешировать данные и работать даже при временном пропадании интернета (например: ты ставишь лайк, и при появлении интернета он отправляется на сервер и фиксируется окончательно). В ходе разработки такого приложения тебе придется и промисы изучать, и реактивное программирование, и может rx.js
>>1618790Всмысле бля, а зачем этот тред нужен? Прочитай название "Клуб изучающих PHP". Или ты чсв анимешник который считает себя тру прогером и всех кто только начинает ненавидит потому что знает больше них и выше них и считает их нелью?Анимешники нелюдь и есть кста>>1618787>>1618792>>1618800Спасибо за развёрнутые ответы аноны, не понял только что за библиотеки качает например ларавел, в нём же вроде как уже всё должно быть, или у них такая задумка изначально, не писать ещё одини велосипеды, а написать код связующий кучи всеми использующихся библиотек и он получается в момент скачивает качает последнюю их версию которую разрабы ларавела посчитали совместимой с их кодом и прописали в композер файлахИнтересно а может разраб одной из либ зная что его либу качает композер - изменить её тем самым изначально заделать в коде дыру, или такая западна возможна только у снгхохло разработчиковНу и по жс либам, неужели он не качает какой-нибудь бутстрап или ангуляры с вьювами
Кстати аноны что думаете об этом барадаче? Вроде хорошо объясняет основы https://www.youtube.com/channel/UCeObZv89Stb2xLtjLJ0De3Q только после него нормально смог понять некоторые вещи
>>1618149С гитхаба можно скачать zip-архив любой версии кода. Разве плохо? Также, у библиотек часто есть страница "релизы", где есть архивы с кодом определенных, протестированных версий.Ты лишь демонстрируешь свою неграмотность. Почему бы тебе нормально не спросить то, что непонятно, и не узнать ответ. >>1618138Архив есть, но тебе надо скачать отдельно основную программу и отдельно каждую библиотеку, которая ей нужна. И да, любая версия не подойдет, а только та, которая указана в composer.json.>>1618135Для начала, почему бы тебе не почитать про MVC: https://github.com/codedokode/pasta/blob/master/arch/mvc.mdФреймворк - "каркас" - это такой набор кода, который не заточен под конкретное приложение, а может пригодиться в любом. Люди, которые делали много сайтов, знают, что есть какие-то повторяющиеся куски кода, вот если их сделать универсальными, то и получаетс яфреймворк.Сложный он, так как ты видимо не изучил ООП, MVC, паттерны, а берешься сразу за код и ничего не понимаешь. Изучай последовательно, когда видишь что-то незнакомое, какой-то паттерн, разберись в нем сначала. Я видел код без фреймворков, почти всегда это нечитаемая, неудобная лапша. Ну например: люди берут, на каждый раздел делают свой файл вроде index,php, news.php, forum.php. В итоге код получается не повторно используемый - код взятия последних новостей жестко зашит в news.php и его нельзя вызвать из forum.php, чтобы отобразить блок с новостями в сайдбаре. И это, по твоему, лучше, чем фреймворк? Или другой пример: в "ванильном" коде часто работа с БД ведется без ООП, просто пишутся SQL-запросы (часто опасные, с уязвимостями, без плейсхолдеров), получаются данные в виде массивов и где-то 1000 строчек нижу эти массивы выводятся на странице. И чтобы понять, что может быть в массиве, какие поля , каких типов тебе надо мучительно прокручивать весь код и вручную разбирать, какие действия делаются с массивом. А в той же Симфони есть Доктрина, сущности (новость, пост на форуме, пользователь) представлены в виде объектов, с полями, методами и комментариями. Все понятно: какие есть свойства, что с ними можно делать. Если используешь IDE, то она тебе дополняет код и чуть ли не за тебя его пишет. А ты предлагаешь от этого отказаться и вернуться к лапше? Также, фреймворк содержит готовые классы для организации форм. Вот тебе надо ввести адрес, проверить и сохранить в базу его идентификатор из КЛАДР. На лапше ты все это делаешь вручную, это нельзя никак повторно использовать. А на фреймворке ты делаешь специальное поле или под-форму и можешь их вставлять в любую форму. И ты от этого предлагаешь отказаться? Также, фреймворк содержит средства для перевода сайта на другие языки. Организации "красивых" URL. Шаблонизатор. Защита от SQL inj, XSS, XSRF. В твоем самописном коде это есть? Или ты предлагаешь тратить рабочее время и пытаться сделать то, что уже сделано другими?
>>1618135Также, не берись за Симфони сразу, начни со Slim. И прочти документацию или перевод или уроки по нему, а параллельно изучай код. Слим маленький, там по сути только роутер + request/response + DI (про DI тебе тоже надо почитать отдельно). >>1618108Это извращение, по моему. Ну например: у тебя нет ограничений и при большом числе запросов запустится куча процессов PHP и все зависнет намертво. То есть твое решение работает "на авось". Это плохое решение.Тебе нужна очередь задач. Код веб-скрипта создает задачу, и кладет в очередь. Рабочие-воркеры, запущенные из CLI, следят за очередью и берут из нее задачи, выполняют, кладут результат в другую очередь или в БД. Ты определяешь число воркеров и твой сервер никогда не перегружается, разве что задачи начинают обрабатываться с большей задержкой. Для этого не нужен PHP.>>1617931Сходи к врачу для начала и подбери диету. Только вот зачем этот оффтопик писать в наш тред про программирование?
>>1618770А битрикс например в открытом доступе разве? Может ли быть дело только в безопасности? - разработчики cms могут ведь просто закрыть все дыры, а хейт останется. >>1618775> По сути конфигурируешь готовую систему.> Т.е. к разработке относится опосредованно.Не вижу связи. И там ведь готова только админка - надо её как-то связать с фронтом, фронт надо написать или нет?, вроде бы компоненты cms можно редактировать, писать свои.
>>1618861>хейт останется.Ты ведь наверняка знаешь ответ на свой вопрос. Это ужасный код, но он подходит бизнесу и потому живет. Разработчикам не нравится работать с говнокодом, поэтому мы хейтим. И по сути мало кто с этим работает из тех, у кого голова на плечах. Обычно на долю цмсок приходятся эникеи всякие.Ты скорее всего подумаешь, что определение говнокода субъективно. В мелочах да, но в общем случае код всяких битриксов никакой здравомыслящий разраб не назовет нормальным.Алсо, именно эта вот срань сделала плохую репутацию пхп.
>>1617651Молодец. Ты рассуждаешь правильно, а в уроке тебя учат фигне. Подумай: что на самом деле надо делать при возникновении ошибки в веб-скрипте? Зачем пользователю текст ошибки? Надо логгировать ошибку в стандартный лог (журнал) ошибок PHP, отдавать HTTP-код состояния 5xx, а пользователю показывать красивую заглушку, чтобы он понял, что на сайте временная проблема и админы в курсе. Некоторые еще в реальном/почти реальном времени эту ошибку постят в какой-нибудь чат. Теперь можешь попробовать это реализовать и запостить код на проверкуУрок про исключения, может он тебе пригодится: https://github.com/codedokode/pasta/blob/master/php/exceptions.md> А как же миф типа если его не закрыть, то оно останется открытым в ожидании пользователя?Чушь. Или приведи какие-то технические аргументы, как это должно сработать, желательно со ссылкой на доки.>>1617633mysqli_close имеет тот плюс, что позволяет тебе увидеть какую-то ошибку (например: не все данные получены). Или понять, что соединение успешно закрыто. При автоматическом закрытии ошибки скорее всего не логгируются.>>1617621Можно скачать руками. Можно не использовать библиотеки и все писать с нуля самому.>>1617603PDO поддерживает исключения по желанию. try/catch писать не требуется, изучи исключения для начала: https://github.com/codedokode/pasta/blob/master/php/exceptions.md
>>1618817Почему бы тебе самому не ответить на свой вопрос. Возьми главный репозиторий Laravel, https://github.com/laravel/laravel нажми на composer.json в нем, найди там список зависимостей (библиотек) в разделах require и require-dev и каждую вбей в поиске на packagist.org. Прочти описание каждой и нам тут отпишись кратким списком: используется N библиотек для того-то, M библиотек для того-то.У каждой библиотеки есть свой composer.json, проверь и его также, чтобы увидеть зависимости этой библиотеки. Можешь даже схему зависимостей со стрелочками нарисовать. А, хотя, есть готовый инструмент для этого: https://github.com/clue/graph-composer> Интересно а может разраб одной из либ зная что его либу качает композер - изменить еёМожет. Потому надо указывать конкретные версии, а не "любая старше X", проверять библиотеку перед подключением, а репозиторий вроде packagist должен на своей стороне сохранять релизы библиотек (что он не делает).> Ну и по жс либам, неужели он не качает какой-нибудь бутстрап или ангуляры с вьювамиПроверь. Там есть package.json - это фронтенд-зависимости, скорее всего это конфиг менеджера пакетов npm или yarn. У них есть свой сайт-репозиторий, где можно искать пакеты по названию.
>>1618803Неужели эту задачу можно делать годами целым блять отделом дормоедов, я не верю, стройку и то за пол года делают
>>1618815Ванилу давно заменил jquery, потому что сам понял что это куча лишних повторений, хочешь сказать что тут и jquery неосиляет такие задачи что ты описал, по этому и хочу сперва внянуться в вью, на вервый взгляд его синктакси понравился больше, ну а потом постепенно и в бекенд втянутьсяАноны, в каком возрасте уже поздно втягиваться в веб дев? Ведь в выборе межуд тобой стоит куча вариантов с пездюкамиЕсли например в 30 начать окунаться в веб дев, мне кажется так можно и 40 летним девственником остаться в полнмо одиночестве
>>1618837В общем после твоего описания могу сказать что не стоит смотреть пидоров самоучек с ютуба, это они так засрали голову что сложно понять то что ты описал без практики, а какая может быть практика у начинающего, спасибо за инфу попробую её усвоить
>>1618894>jqueryЭто кучка оберток и другой интерфейс. Где-то в треде проскакивало, что влезетело это все на фоне недостаточной реализации ванилы, а сейчас уже и ни к чему получается. Не знаю, насколько это правда. Но вообще уже давно за собой заметил, что по jquery даже не задумываюсь гуглить, т.к. проще на ванилке сделать.>хочешь сказать что тут и jquery неосиляет такие задачи что ты описалОсиляет не лучше, чем ванила. Jquery, как ты мог бы уже заметить, вообще о другом. Она не дает каких-то новых фич для разработки, просто немного код меняет. Раньше считалось, что в сторону упрощения и лаконичности, сейчас уже практически никем не считается.
>>1618903Ну почему же, если добавить к нему ещё плагины https://plugins.jquery.com/ очень даже чего много нового он можеи предложить, вью пока ещё сильно не изучал, но думаю там не особо много нового будет с чем бы джейквери не справился, посмотрим
>>1618900>не стоит смотреть пидоров самоучек с ютубаС этого и стоило начать. В ру сегменте можно максимум 1-2 чела назвать, материалы которых будут полезны. Остальное - инфомусор.
>>1618861>разработчики cms могут ведь просто закрыть все дырыВозьмем битрикс. В нем огромная кодовая база отвратительно написанная. Чтобы это привести в человеческий вид, понадобиться минимум х3 времени от разработки битрикса, соответственно бюджеты разработки улетят в небеса.Бизнесу деньги нужно зарабатывать, а не терять как выше описано. Никто не будет закрывать косяки платформы, пока она продается. А чтобы она продавалась, вбухивают деньги в маркетинг.Как-то так и приходим к тому, что есть. Отвратительная кодовая база платформы, популярность которой обеспечена маркетингом.
>>1618885>Неужели эту задачу можно делать годами целым блять отделом дормоедовДа, вполне можно годами делать гигантов уровня алика.Какой-нибудь средней величины продукт вполне может потребовать на разработку пару человеколет.Раньше софт писали десятилетиями в прошлом веке.
>>1618998Судя по алику, делают его по 1 строчке кода в сутки, как вспомню его вырвиглазные описания когда он только стал на русском языке и охуеваю, что-то уровня веб сайтов 90-х годов с таблицами и розовыми рамками и прочим, неужели этим обмуткам так сложно сделать нормальный редактор для продавцов, чтобы они делали вменяемое описание, а с этих их опечаток и строк с маленькой буквы и кучей пробелов и знаков препинания, как блять иглами по глазам
спрашивал в вин10 треде так что думаю будет не лишним и тут спросить, мможет кто сталкивалсяанчоусы, есть ноутбук на вин10. устанавливал опенсервер, попросил перезагрузиться после становки чтобы заработал серак mysql. в итоге после перезагрузки отвалился вай фай. в устройствах вот че показывает. перезагрузился в xubuntu - там все пашет как часы. в чем может быть трабла?
<?phpecho "Снова вопрос от нуба:\n"; №1) http://codepad.org/MdeA8uM6№2) http://codepad.org/TB3jendgОперация "$teaBags + 1;" в переменной $teaBagsAfter работает, но если написать форму операции попроще "$teaBags ++" (№2) то получается пи*дец.Собственно, что я не так написал??>
>>1619266Поясняю. Оператор "++", ещё называется постинкрементом. То есть вначале происходит присвоение значения, после чего идёт увеличение на +1.
>>1619325https://ideone.com/34kOLIТак что я в ПЯТОЙ строчке неправильно написал то?Блин, ощущение что я зря просто ради эксперимента накалякал текст, вдруг там вообще операций ещё не хватает, которые ещё не начал изучать...
>>1619448Объясняю:$teaBags = 25; Тут всё логично, $teaBags ровен 25$teaBagsAfter = $teaBags ++;А вот тут идут хитрости: $teaBagsAfter равен $teaBags,то есть 25, после чего происходит инкремент $teaBags на единичку и он становится 26.
>>1619545АНОН, не хочу утомлять конечно Я БЛ#ЯТЬ НЕ ТУ ССЫЛКУ КИНУЛ! ТАМ ВСЁ ВЕРНО! У меня вопрос по скриншотам был.$teaBangsAfter = $teaBangs ++; -вот в этом варианте получается нелогичная ситуация см 2 скрин. - ПОЧЕМУ?Пожалуйста, вчитайся во-второй скринпробую еще раз запилить нормальную ссылку https://ideone.com/Mt0r0V
>>1619564Постфиксный инкремент сначала возвращает старое значение, а потом меняет существующее. По этому у тебя так и выходит.Кроме того раз уж ты делаешь с двумя переменными, то тебе не нужно старое значение менять, а инкременты и декременты это делают. На твоем коде лучше подойдет просто $teaBags + 1. А еще можешь вообще без второй переменной обойтись.
>>1618769> сосноль > компостер > и прочую хуйню> этот гондон штопаный> какое говно ему надо> чтобы это говно наполнилось говном > типа как в нормальных языках > с прочим говномС таким отношением ты даже в PHP не разберешься.
Как убедить руководтсво не использовать Битрикс? Две маркетолухички крепко сели на лицо директору, и мои доводы перестали работать. В целом-то мне пох, я просто найду другую работу, но жалко компанию, в которой больше года проработал и столько всего хорошего сделал.
>>1619736Скажи честно, что Bitrix24 - это CRM система, за которую надо платить каждый год тысячи рублей.
>>1619736Похер на компанию, для себя живешь, а не для дяди.Ливай сразу как только завезут битрикс. А лучше превентивными мерами: начать искать другую галеру + обозначить, что с этим говном работать не будешь.
>>1619600Спасибо, адекватный анон! впредь не буду выдумывать задания себе если надо будет, то поищу в нете, также смотреть о целесообразности как в данном случае.
>>1617931Моя тян также на работе держит газок. Терпит до прихода домой 12ч, а как придёт - пердит на два этажа вверх-вниз.
В треде есть программисты с больной шеей? Как жизнь живёте? Какие меры принимаете по улучшению остеоили как там его, забыл что-тохандроза? Все-таки работа седячая, горбиться за монитором призодится не один час.
>>1619893У меня походу все виды остеохандроза. Да и думаю у многих тут, просто не все проверяются.Как-то терплю, но иногда очень бесит, особенно шейный. Иногда вспоминаю и делаю зарядку, но толку от нее ноль.
>>1619896100% ты делаешь неправильную зарядку, я так один раз в больницу слёг на 2-3 недели (неправильно и не то делал, аж перекосило подбородком к груди).Советую записаться к ...не массажисту, а покруче, я не помню как у них профессия называется, но некоторые из них обучают всяких ссаненьких массажистов (которые не шарят за работу мышц, костей и т.д.). Короче этот специалист сделает массаж за 1-2к и покажет упражнения которые именно тебе подойдут, то есть индивидуально - А там уже от тебя зависит, я например делаю когда только заболит, хотя надо каждый день делать.
>>1619736>Две маркетолухичкиМожно попытаться намекнуть этому директору, что тебе как программисту виднее.
>>1619249Скорее всего опенсервер не при чем. >>1613334> Приведите пожалуйста аргументы почему нужно шифровать 100% сообщений?- в Телеграме те, кто использует секретные чаты, выделяются из толпы и привлекают внимание- проще шифровать все по умолчанию, чем отправить что-то не то, а потом вспомнить, что шифрование выключено Если делать шифрование отключаемым, может делать по дефолту его включенным, а далее отключать по желанию? Насчет поиска и сортировки - интересный аргумент. Ну вот тебе и задачка на проектирование, подумай, реально ли реализовать 1) сортировку 2) поиск при полном шифровании сообщений? Что касается сортировки, то тут точно можно присваивать сообщениям какие-то номера вместо времени. Поиск обычно (без шифрования) делается построением индекса, такого вида: { слово -> [список id всех сообщений, где оно есть и позиция в сообщениях ] }Как минимум реально сделать поиск, если у нас приложение поддерживает локальную БД со всеми сообщениями. > но как мессенджер сам по себе, нужно признать, чрезвычайно удобенЗначит, у него хорошо продуманный интерфейс и процессы взаимодействия с пользователями.> Осталось только повторить интерфейс.Хорошая идея, взять за основу продуманный интерфейс.> Как рассчитать размер плейсхолдера?Никак, на то оно и шифрование. Но если мы будет заменять блоки снизу вверх, фиксируя позицию самого нижнего блока, то ничего дергаться не будет (кроме плейсхолдеров, которые никто не читает). Неудобно, когда дергается то, на что человек смотрит. Можно попробовать другой вариант: внизу уже расшифрованные сообщения, а сверху над ними один плейсхолдер, который поднимается вверх по мере расшифровки. Можно расшифровывать сообщения и заменять плейсхолдеры пачками, используя кеш расшифрованных сообщений.> А можно назвать ещё проще и лаконичней - party?Можно, хотя мне показалось, что partner наиболее очевидный вариант.> А почему нельзя назвать просто и лаконично date? Разве на очевидно что это дата сообщения?Можно и так, мне показалось, что может быть, со словом send будет еще более очевидно.> Какие метаданные, помимо даты, вы хотели бы чтобы шифровались?В идеале - все, что можно.> Как тестируются параллельное выполнение запросов?Проще всего сделать скрипт, который шлет запросы без перерыва, и запустить через bash-скрипт несколько его копий. До штук 50-100 скриптов эта схема будет работать, потом могут быть большие накладные расходы на постоянные переключения контекста.> Тяжело представить что таблица сообщений или конференций поместиться в память, потому что количество записей, в теории, будет катастрофически велико. Как с этим выйдет на практике?Надо, чтобы хотя бы индексы влезали, а лучше вся таблица. Иначе будет возникать нагрузка на дисковую подсистему, хотя тут SSD и выручает, но он не сравнится по скорости с памятью. Либо писать какие-то свои решения на Си/Раст/Го, которые будут более тесно хранить данные в памяти, но это очень сложно. Если речь о бизнесе, то купить память будет дешевле.> Я погуглил этот вопрос, и создаётся впечатление что PostgreSQL решает автоматически когда хранить данные в RAM а когда на диске, и предпочтительнее в RAM. Это верно?В MySQL это просто задается опциями в конфиге. Там есть "пул" (InnoDB Pool) в памяти, в котором кешируются "страницы" - куски таблиц и индексов. Администратор задает размер пула. В Postgres - не знаю, возможно, что она полагается на системный кеш страниц (все современные ОС используют невыделенную память как кеш страниц с диска, то есть при чтении кладут туда страницы и при повторном обращении оттуда же берут: https://habr.com/ru/company/smart_soft/blog/228937/ ). В этом случае объем кеша определяется количеством свободной памяти.> Следовало бы увеличить количество пользователей до сотен и количество сообщений до тысяч?Было бы хорошо, так как на сотнях тысяч и миллионах записей могут выскочить какие-то эффекты, которых не было на маленьком кол-ве.> Будет ли лучше если я вместо выполнения HTTP-запросов создам объекты с помощью Faker и factory-muffin, и выполню все запросы к БД напрямую?Не знаю, надо попробовать. Быстрее всего будет делать большие INSERT напрямую, но может, и через Доктрину будет приемлемая скорость.
>>1619956Лучше все-таки с мануальным терапевтом, который тебя помассажирует и ну ты понял составит упражнения
>>1619893>>1619896По поводу остеохондроза могу одну неочевидную вещь посоветовать - если боли хронические и длятся более трех месяцев, начинайте пить антидепрессанты. Остеохондроз это просто дегенеративные изменения - это не должно болеть, если у вас 1-2 степень. У меня вот 2 степень грудного остеохондроза - были лютейшие боли до антидепрессантов, теперь иногда есть дискомфорт, но в целом болей нет. У друга ему врач в итоге тоже антидепрессанты назначил сначала фенибут правда есть шейный остеохондроз - как я понял, шейный это пиздос, но тоже можно загнать в ремиссию, а болей быть по-хорошему не должно.
Двач, как решить задачу с регулярками где надо найти правильные номера телефона?Я понял что мне надо найти +7|8 после чего должны быть 10 чисел и между ними могут быть скобки, пробелы или -И если 10 чисел найти можно просто вписав [0-9]{10} то как сделать так чтобы между ними еще и эти символы находило?Все что пока что смог сделать это ^(\+ ?7| ?8)([0-9]{10}[- ()]?+)$ , но оно не работает
Аноны, посоветуйте хорошую php сборочку с гитхаба которая собирает данные о пользователи, то есть я например с помощью ajax отправляю запрос на нужный файл, а они записывает айпи, страницу с которой был запрос и возможно дополнительный get запрос который я передам ajax вместе с url файла сборочки
>>1620252Вообще актуальная тема. Надо в медаче тред поискать для ИТшников. Набор болячек-то у всех одинаковый почти.
>>1620447Если писать [0-9]{10} то между цифрами не может быть других символов. Но ты можешь использовать здесь круглые скобки, чтобы написать: (ровно 1 цифра + любые символы){10}И тогда повторяться 10 раз будет все выражение в круглых скобках.
>>1620609Спинотред есть, только толку от него мало. Не те подходы к лечению там исповедуют. Глазотред - основной посыл в том, что ко врачу надо идти. Остальные проблемы опциональные.
>>1620783Почитав и посмотрел эти ваши ютубчики, я понял что писать велосипед заново - это признак дурачка, и что на этих ваших гитхабах уже всё написано и отшлифовано тоннами програмистов, вот и прошу поделиться хорошим движком/модулем на php по сбору статистики + возможность передавать в него свои get данные и всё это через ajax, в моём случае айди пользователя, ну или как подобное искать в гитхабе
>>1620526Если тебя устраивает стороннее решение, что это Гугл Аналитика или Яндекс Метрика. Ты удивишься от того, сколько там возможностей и какие красивые графики там строятся.Если не хочется отдавать данные, то установи Piwik к себе.
>>1620834У тебя задача без конкретики. Не понятно, откуда ты собрался собирать данные, в каком формате хранить.
>>1620834>передавать в него свои get данные и всё это через ajaxЧё сказал? Какие данные передавать?Не лезь.
>>1620721^(\+ ?7| ?8)([0-9]-? ?\(?\)?){10}$Если попробовать написать в () то оно искать будет ровно 10 символов. То есть если будет номер 8(1)234567890 то регулярка его пропустит из за того что там 12 знаков а не 10. Как сделать чтобы регулярка находила ровно 10 цифр между которыми может быть любое кол-во знаков?
https://developers.google.com/recaptcha/docs/v3Поясните кто мб сталкивался с интеграцией капчи, не совсем понимаю что должно быть внутри метода вместо '...'
Parse error: syntax error, unexpected ')' in C:\...\index.php on line 15Сап всем, помогите новичку пожалуйста. Написал по обучающему видосику калькулятор на пыхе, но возникает такая ошибка, собственно эта скобочка там должна быть. Может ошибка в построении самих условий, подскажите пожалуйста. Сорри что выкинул код так гит еще не освоил. Номер строки отметил. (с фигурными скобочками так же если что).<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Калькулятор</title> </head><body> <?php if($_POST['submit'] ) { $a = (int)$_POST['first_textbox']; $b = (int)$_POST['second_textbox']; $p = $_POST['operation']; $c = ''; if($p == +) //15 $c = $a + $b; else if($p == -) $c = $a - $b; else if($p == ) $c = $a $b; else if($p == /) { if($b == 0) echo "You can not divide by zero"; else $c = $a / $b; } else $c = pow($a , $b); } ?> <form action="" method="post"> <input type="textarea" name="first_textbox" required /> <select name="operation" required> <option value="+">+</option> <option value="-">-</option> <option value=""></option> <option value="/">/</option> <option value="^">^</option> </select> <input type="textarea" name="second_textbox" required /> <br> <input type="submit" name="submit" /> </form><?php if($c){ echo $c; }?></body><footer></footer></html>
>>1621273Так лучше<!DOCTYPE html><html><head><meta charset="utf-8"><title>Калькулятор</title></head><body><?phpif($_POST['submit'] ){$a = (int)$_POST['first_textbox'];$b = (int)$_POST['second_textbox'];$p = $_POST['operation'];$c = '';if($p == +)$c = $a + $b;else if($p == -)$c = $a - $b;else if($p == )$c = $a $b; else if($p == /){if($b == 0)echo "You can not divide by zero";else$c = $a / $b;}else$c = pow($a , $b); }?><form action="" method="post"><input type="textarea" name="first_textbox" required /><select name="operation" required><option value="+">+</option><option value="-">-</option><option value=""></option><option value="/">/</option><option value="^">^</option> </select><input type="textarea" name="second_textbox" required /><br><input type="submit" name="submit" /></form><?phpif($c){echo $c;}?></body><footer></footer></html>
>>1621281>В следующий раз используй Switchswitch ($p)case '+':$c=$a+$b;case '-':$c=$a==0 or $b==0 ? $a-$b: error;case '/':$c=$a/$bcase '':$c=$a$b
>>1621281Два чая этому сеньору! Реально, спасибо большое, весь вечер ебался думал что не так, а свитч пока не знаю конструкции думаю буду сейчас разбираться.
>>1621420Поставлю, спасибо за советы, они мне сейчас бесценные просто,чувствую себя слепым щенком просто
>>1620931>>1620941Ну смотрите, пользователь заходит на страницу, нажимает кнопочки, а в это время повешанные на них события запускают ajax на url нашего php скрипта и подцепляют к нему уникальные айди, например mysite.ru/stat.php?iduser=2281488, а этот скрипт сохраняет в бд его айкпи, страницу с которой был запрос, его айди и ещё чего небудь, а потом я пишу админку или она может быть со скриптом, где я удобно смогу с какого url было больше всего запросов, какой пользователь какие урл посмотрел и сколько раз нажал заскриптованную кнопку, ну и с каких айпи на какие url были запросы, плюс можно сохранить их юзерагент чтобы отловить ботов и забанить их нахуй и в пизду по айпи, можно самому написать, но мне кажется это уже 100500 написали и отшлифовали на гитхабе, а всякие метрики и гугланалитики это для пидорасов и хипстеров с магбуком
>>1621526Ну да, похоже на гугл/яндекс аналитику. Ими и пользуются для подобных задач.>всякие метрики и гугланалитики это для пидорасов и хипстеров с магбукомТыскозал?
>>1621815Возня с мокрописьками - недойстойное занятие. Да и нех привыкать вообще.Проще тот же NetBeans поставить, благо он бесплатный и есть поддержка пхп, да и вообще веба.
>>1621818Да бля анон нуне тупи, мне нужно просто чтобы при нажатии на нужную кнопку на скрипт отсылало уникальное айди и сам скрипт вдобавок записывал айпи с которого был запрос, то есть нажата кнопка и вносило в базу данных айпи, айдишник отосланный скрипту и ещё что-нибудь полезное заодно, например браузер и операционку, причём блять тут анальная метрика и аналитика? Мне это нужно для отлова багов и чтобы знать с какого устройства был юзер и с какйо страны, чтобы повторить баг, ну ёптвоюмать, или подскажи подобный скрипт или если знаешь скажи что таких готовых на гите нет и всё равно придётся писать свой
>>1622159Сам пиши. Сам пиши всё - и скрипты для этого, и админку не забудь, и базу задеплой под это дело. Ты ж знатный велосипедист, как я посмотрю.
>>1622169Да ты гонишь, зачем мне для этих целей метрика и аналитика, я хочу статистику для выяления багов собрать, а не сливать своих юзеров в анальное рабство яндексу и гуглу, на вот вкуси немного своих корпораций добра https://www.youtube.com/watch?v=S8GlJk-wHSU
>>1622184>пачаны, дайте мне плагин для сбора статистики>вот тебе от гугла и яндекса - удобная админка, пользуются даж домохозяйки>не хочу, дайте другоеИщи сам.
>>1622184Я писал выше, есть piwik - это как гугл аналитика, но без гугла, на своем собственном сервере, open source.
>>1622260Спасибо анон, но как-то слишком элитно, я думал о чём-то более крестьянском и простом, в админке тупо табличка где от самых кликабельных страниц с моим уникальным айди для каждой страницы к менее кликабельным и как доп информация это айпи/страна, браузер и система, мне хватит и этого, ладно я так понимаю аноны не подскажут, придётся писать самому, изобретать очереднйо велосипед, но я всё равно уверен что кто-то уже писал подобное
>>1622323Поддвачну вопрос. Какая-то контора whatshelp искала к себе асинхронщика на пхп, что поставило меня в ступор. Ессесна мне перезвонили.
>>1617769Ну так говорят те кто настраивают бэк уровня амазона, где тебе на халяву дали БД с 10 таблицами и коннекты прописали. Считай аникеи среди JS. Те у кого опыт год и более уже так не говорят. Хотя конечно ебанаты находятся и среди них, но это уже клиника.
Аноны, разместил свою резюмеху на хх и в первый же день мне оффер прилетел от местного держателя онлайн-магазина.У него там Ларавель везде, а я сейчас его только изучаю сделал углублённый квикстарт с одного сайта, повозившись с совместимостью версий немного, немного копался с CodeIgniter оче простой оказался. Делал студентов и хостинг на Слиме.Есть смысл ломиться на вакансию, как думаете? Не уверен, что там старший программист будет.
>>1618995мне теперь кажется что ты работал сам в 1с и в частности над движком битрикса раз знаешь как там вся кухня устроена
>>1622685Ребят а сегодня я вам покажу как рейджнуть всего за четрые строки. А сделаем мы это на моем любимом языке пайтон
Йии по ходу никогда не умрет:>Senior PHP Developer (Yii2)>ЗарплатаОт 2>40 000 до 290 000 ₽https://career.habr.com/vacancies/1000051562
Программист-фрилансер, сколько часов в день работаешь? Сколько выходных выпадает?Не устаешь часами сидеть-пердеть над кодом? Есть такие кто устает? - Как борешься с усталостью? Может энергетический напиток пьешь или кофе?
>>1622706Вот и я не хочу один сидеть без советов мудрых, но местные галеры не выкидывают вакансии для джунов.Посижу с неделю - мож появится чего нормальное. К тому же приболел горлом кажись, может и к добру.
Как считаете, в задаче про вычисление угла между стрелками часов имеет смысл учитывать, что может быть ввод по типу 56 часов и 10000 минут? Или итак понятно, что на циферблате нет этих чисел и учитывать их необязательно?
>>1622717>сколько часов в день работаешь?14>Сколько выходных выпадает?Сколько захочу.>Не устаешь часами сидеть-пердеть над кодом?Нет.>Может энергетический напиток пьешь или кофе?Если не укладываюсь в 12 часов завершить задачу - пью бёрн, даёт ещё 8 часов.
>>1622623Пришёл спросить как искать готовые скрипты статистики на гитхабе или совета хорошего простого скрипта, что не так? Для этого же тред и создан
Вот есть два богомерзких языка: пыха, и джаваскрипт. Все пинают эти языки, плюются на них, хоть и используют буквально везде. На среднекод на этих языках тошно смотреть особенно на пыхе, по крайней мере мне. Это же просто месиво, блядь. Но я сам в один из них вкатился, а именно в жабаскрипт. И с вот, что я узнал: за последние лет 5 для него появились сотни допила от васяна и блестящих обёрток, да с модульной системой, да с статическими типами, да без глобальных объектов, да с функциональщиной, да с сотнями постоянно поступающего нового синтаксического сахара, и всего вот этого вот. Под этим всем на него и смотреть не тошно, а со временем и официальный стандарт подтянется до уровня того, что сейчас допиливается вебпаком, бабелем и тайпскриптом. А напилили ли подобного, тонущего под хейтом и макаками для пыхи?
>>1623287Напилили. Там уже и строгая типизация и DI/CI, статический анализ, трейты, нормальное ООП (js нервно курит, кстати), нормальные вменяемые фреймворки, а не cms-поделия, git workflow можно организовать по-человечески и т.п. Он вообще очень стал похож на Java. Так что ты считаешь его богомерзким просто потому, что нихуя о нем толком не знаешь, видимо.
Так, котаны. Вот вам задачка, принес. Через пару дней проверю, кто решил - молодец.Дан массив целых чисел. Вернуть индексы двух чисел, таких, что их сумма равна target.Можете считать, что существует только одно решение. Нельзя использовать один и тот же элемент несколько раз (то есть решить без вложенных for'ов).Пример:Дано nums = [2, 7, 11, 15], target = 9,Так как nums[0] + nums[1] = 2 + 7 = 9,То return [0, 1].Заготовочка для кода:class Solution { / @param Integer[] $nums @param Integer $target @return Integer[] / function twoSum($nums, $target) { }}Оригинал текста, если нужен, это мой вольный перевод:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the same element twice.Example:Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].
>>1623531А нахрена ты сюда это несёшь, небаран? Тебя просили об этом или ты думаешь, что народ задачки по пхп найти в интернете не может?
Сап, пыхач.В тред вкатывается NodeJS-макака с 2 годами опыта, хочу стать мультиязычным, да и скоро переведут на проект с PHP + Laravel.Подкиньте каких-то видео-курсов по ларке, по которым можно будет быстренько начать круды хреначить с рестами, готов даже на платные курсы, лишь бы прок был.
>>1623665Да хуй знает нужна или нет, просто клиент тот же, но у него помимо приложух на ноде оказалась где-то пыха, которую саппортит один чувак, и вот меня ему в довесок накинули.Я просто упомянул, что в 2017 писал на пыхе модуль для вордпресса и завертелось
>>1623668>Я просто упомянул, что в 2017 писал на пыхе модуль для вордпресса и завертелосьСам себе могилу вырыл. Сидел бы на ноде.Я б уже подыскивал другую работу, если б мне дали неинтересующий меня стек.
>>1623673Да я не говорил, что не интересующий, потому и мануалы ищу, говорю ж, хочу мультиязычным быть. Полгода так писал на джаве
>>1623680Я вообще NodeJS бэкенд-макака, чистого опыта на нем - 2+ года. Но в остальном иногда прыгаю по другим проектам с другими стеками, ибо мне это интересно, так полгода писал на джаве, где-то три месяца на питоне, вот скоро на пыху прыгнуть хочу
>>1623682Если интересно, то збс.Просто странно из одной динамики прыгать в другую, тем более в пыху (с её то зп)
>>1623682Где быстрее вставка элемента - в аррейлисте или линкедлисте? Если сходу не ответил, рекомендую вкатиться хоть в один стек глубоко. Если ответил, окей, прыгай, если нравится.
>>1623691А зп нодовская остается, я галерный гребец.>>1623697ЛинкедЛисте но не всегда, зависит от кучи факторов, это ж не от стека зависит, базовые структурыА курсы кто-то посоветует? (:
>>1623731И там жизнь довольно примитивная, учитывая, как (не) много можно сделать по сравнению с Java, или, не дай бог, C++.
>>1623689Тогда сам и решай.Нехватало чтобы какие-то васяны нам тут с умным видом чужие задачки несли.
Вoпpoc пo СSS.Moжнo ли aвтoмaтичecки измeнять вид блoкa, ecли oн cмecтилcя вниз? Дoпуcтим, ecть 4 дивa, нa бoльшoм экpaнe oни pacпoлoжeны пo гopизoнтaли. Пpи умeньшeнии экpaнa пocлeдний див cпoлзaeт вниз. Boт мoжнo ли кaк-тo oтcлeдить этoт мoмeнт и измeнить вид cпoлзшeгo элeмeнтa? Дoбaвить бopдep-тoп, нaпpимep.
>>1624920В CSS можно, узнав размер экрана. Через JS можно, узнав координаты (это хуевый способ, не делай так).
>>1617498Да, я вижу, что ты несколько раз постил, а я не проверил. У меня просто иногда не хватает времени, и я не успеваю все проверить.Если есть возможность, то корнем (DocumentRoot) веб-сервера стоило бы сделать папку public - тогда будут не нужны всякие RewriteBase, из-за которых твой проект надо располагать в папке с определенным названием. А также, в этом случае файл конфига будет за пределами корневой папки. Сейчас он защищен в htaccess, но надежнее, когда он в принципе не доступен снаружи.> DEFAULT CHARSET=utf8;Стоит переходить на utf8mb4, погугли про отличия от utf8.> https://github.com/deadj/student-list/blob/master/src/autoloader.phpтут можно сделать один автозагрузчик, перебирающий папки в цикле.В роутере стоит извлечь из URL только путь (PATH), например, функцией parse_url() - и тогда не надо будет беспокоиться о параметрах после знака вопроса и добавлять их в регулярку.> $segments = explode('/', preg_replace("~$urlPattern~", $path, $uri));Не лучше ли тут просто разбивать на части $path без вызова preg_replace? > $firstStudent = $this->getFirstStudent();Тут было бы логично передать внутрь $page, чтобы не получать эту переменную дважды в разных местах контроллера.exit() лучше бы не ставить в контроллере - а вдруг в роутере ты захочешь что-то сделать после выполнения контроллера (например, померять и сохранить время генерации страницы).> private function highlightWord(string $search, string $cellValue): string> $pattern = '/' . $value . '/ui';Есть ли тут гарантия, что в value нет спецсимволов (звездочек, бекслешей, скобок)? Если гарантии нет, то при подстановке переменной в регулярку надо экранировать специмволы с помощью preg_quote(). Она экранирует символы так: Было: hello[world]+\bСтало: hello\[world\]\+\\bПосле нее все символы теряют специальное значение и соответствуют просто символам. Если ты наблюдателен, то заметил, что экранирование при подстановке переменных делается почти в любой ситуации (при вставке в HTML, в SQL запрос, в параметр URL), просто каждый раз используются разные функции.Функции вроде highlightWord() имеет смысл выносить в класс-помощник, сделанный по паттерну Utility Class, чтобы этот код можно было вызывать из других мест программы.В highlightWord есть недостаток: тут возможна ситуация, когда мы на первом шаге цикла вставляем тег mark, а на втором заменяем его кусок на что-то. Также возможно двойное экранирование: на первом шаге мы что-то экранируем, а на втором шаге делаем замену и экранируем еще раз. Также, часть строки, которая не соответствует регулярке, не экранируется.Попробуй протестировать свою функцию, давая ей на вход куски строк со спецсимволами вроде < и > и проверяя, экранируются ли они на выходе или нет. А также, давая слова вроде mark или lt и проверяя, не происходит ли некорректных замен кусков тегов.То есть, экранирование делается непредсказуемо. Вот, что можно сделать: 1) попробовать разбить строку на куски, состоящие из искомых слов и кусков между ними (например, функцией preg_split с выражением вида /слово1|слово2|слово3/). Затем каждый кусок экранировать и склеить, вставив между ними теги mark.То есть, дана фраза "Иванов Иван" и поисковое слово "ива" -> получаются куски "Ива", "нов ", "Ива", "н".2) сначала заэкранировать всю строку, а потом делать вставку тегов mark уже в экранированную строку.3) заэкранировать строку. Подготовить массив замен (тоже с экранированными словами) вида [экр. слово => <mark>экр. слово</mark>] и одним действием сделать замену функцией вроде strtr(). Этим мы защищаемся от ситуации, когда мы пытаемся сделать замену в самом теге mark.Если у тебя есть идеи, как сделать проще, предлагай. Тут, конечно, лучше всего подошло бы простое решение, где было бы очевидно, что замены делаются всегда корректно.> if (isset($_COOKIE['id']) && $studentTable->checkId($_COOKIE['id']) == 1) {Функции, связанные с авторизацией (проверка авторизации, установка авторизации, очистка) - надо выносить в отдельный класс в виде функций, а не размазывать по коду.Вместо кучи функций вида getLastName(string $id), getGender(string $id), ... лучше сделать одну функцию, которая загружает одну строчку со всеми полями из БД и заполняет из нее объект студента. И одну для сохранения студента обратно в БД.> $id = md5(rand(0, 1000000) rand(0, 100000));Здесь md5 никакой пользы не несет. У тебя источник случайности - два числа, и оттого что ты возьмешь md5, число вариантов не увеличится, просто идентификатор удлинится и все. То есть md5 тут бесполезен. Чтобы получить полностью случайный идентификатор, надо каждый символ в нем генерировать случайно.> header("Location: /student-list/register?notify=$done"); В ссылках не может быть пробелов, спецсимволы надо экранировать через urlencode() перед подстановкой. Плюс, тут есть уязвимость, что злоумышленник может сформировать ссылку, которая покажет любой текст, и тем самым ввести пользователя в заблуждение. Лучше передавать код сообщения вроде 'registered', и брать сообщение из массива по этому коду.Ты в RegisterController представляешь студента то в виде объекта, то в виде массива (getEmptyStudentInformation()). Удобнее использовать везде одно представление - в виде объекта.> checkStudentData($student, "add")В таких случаях надо использовать константы вместо строк (Validator::ACTION_ADD).> return $result->fetch_assoc()['COUNT()'];Проще использовать fetch_row с индексом 0.> public function checkId(string $id): intТут логичнее возвращать тип bool (true/false), а функцию назвать более явно: doesIdExist() или isValidId().> addStudentsToObjectsArray(object $students)Здесь в качестве типа можно указать класс mysqli_result, а не просто object.> if ($accommodation != "local" Здесь стоило бы сделать константу вроде Student::ACCOMODATION_LOCAL. Константы лучше "магических" строк тем, что защищают от опечаток (PHP выдаст ошибку в этом случае), а также по коду видно, какие константы доступны. > [а-яё]|[ ]|[-]Это можно объединить: [а-яё \-]> mb_strlen($groupNumber < 2 Скобку забыл поставить.> !preg_match('/\\d+/ui'Без ^$ это выражение просто проверяет наличие цифр, но не отсутствие других символов.> <?php if (isset($errors['firstName'])): ?>> <?php else: ?>Здесь плохо, что input с кучей атрибутов копипастится два раза. Это неудобно, так как при правках тебе придется делать в два раза больше работы. Нужно избегать копипасты тут.
>>1617498И еще, у тебя при переходе с 1 на 2 страницу меняется направление сортировки с desc на asc почему-то.
Я никогда не строил полноценных приложений, поэтому мне сложно разобраться в данном сценарии.Мой ход суждений выглядит следующим образом. Функцию может вызывать либо тот, кто имеет к ней доступ, т. е. программист, либо пользователь приложения. Программист может изменить сообщение об ошибке в исходном коде, а пользователю менять сообщение, как правило, вообще незачем.Также я вижу только один возможный вариант, когда файл может быть не найден - когда путь к файлу прописывается вручную. Пользователь кидает все через <input>, а если речь идет о программисте, то ему опять же проще поправить путь в исходнике.Подскажите, пожалуйста, что я упустил из виду.Также какое преимущество имеет разделение ответственности, если при ошибке (отсутствие файла) результат все равно тот же - мы завершаем скрипт через тот же die() и пользователь функции все так же не имеет никакого выбора?
>>1625993>Функцию может вызывать либо тот, кто имеет к ней доступ, т. е. программист, либо пользователь приложения.Когда говорят о пользователях куска кода - имеют ввиду других разработчиков, а не пользователей приложения на том конце.>результат все равно тот же - мы завершаем скрипт через тот же die() и пользователь функции все так же не имеет никакого выбора?Это как раз сейчас так.Если же возвращать результат (да даже выбрасывать исключение) - то уже пользователь решает как поступить дальше. Может вообще наплевать на это и какие-нибудь моки подсунуть например. Или же это вообще валидная ситуация, так сказать "а юзеров то пока что и нет". Вариантов сколько хочешь, даже вон на картинке пара штук приведена, а не только собственно die. Алсо, die это вообще хуйский способ завершения выполнения скрипта, т.к. во многих прилогах есть такая штука, как жизненный цикл, который даже в случае ошибки по хорошему должен отрабатывать. die же просто рубит с плеча, грязное завершение, аналогичное падению. А допустим это вообще совсем чужая библиотека, которая по каким-то причинам валит весь твой код, потому что кто-то когда-то не захотел разделить овтетственность. Ты бы сам захотел, чтобы нечто левое решало, когда умирать всему твоему приложению? А ведь ты всего-лишь пытался массив юзеров или чего-то еще подтянуть.В конце концов функция попросту делает не то, что обещает из названия, тем самым порождая неожиданный сайд эффект. Можешь сделать loadUsersFromFileOrDie например функцию, в противовес этой, но врядли ей реально кто-то станет тогда пользоваться.
Привет Анон. Решаю вкатиться к вам из фронтенд треда, сам я работаю верстальщиком, верстаем под cms написанной на yii первой версии, лул. Очень часто так же у нас проскакивают задачи по битриксу и очень редко по другим цмс типо опенкарта. Понял, что программирование мне не особо то доставляет, чтобы дрочить его дома так как хочу заняться другим делом в будущем. Js у нас мало и обычно это простые скрипты которые я придрочился писать на чистом js, но зато куча php кода и разных cms из них более интересен битрикс так как много вакансий связанных с ним. И решил на работе просить мне кидать небольшие штуки на прогу связанных с админками, чтобы колупать php и перейти с верстальщика на php/битрикс "программиста". С чего лучше начать, используем вроде как php 5ой версии.
>>1626005Спасибо за внимание, анон! Я делаю вывод, что любая (custom) function должна по-хорошему что-то возвращать.Другой вопрос. Тут при наследовании от встроенного класса Exception указывается backslash - \Exception. Тут есть какая-то особая мотивация? Спрашиваю, потому что без слеша все также работает.
>>1627478>любая (custom) function должна по-хорошему что-то возвращатьНе обязательно. Только если там есть, что обработать. В прошлом примере это либо список юзеров, либо наличие ошибки или типа того. Полно функций, которые не возвращают вообще ничего. Например какая-ниюудь функция логирования, которая допустим тебе в файл пишет что-то. Ты ее просто вызываешь и дальше идешь, как ни в чем не бывало.>Тут при наследовании от встроенного класса Exception указывается backslash - \Exception. Тут есть какая-то особая мотивация?Да, есть. \Exception - это явное указание на класс Exception из корневого неймспейса. А просто Exception это либо из корневого, либо из текущего неймспейса. Если в текущем неймспейсе будет объявлен Exception собственный (именно с таким именем), то без слеша подцепит именно его, а не корневой. Корневой в данном случае это базовый из пхп.
>>1627517>либо из корневого, либо из текущего неймспейсаЗабыл добавить, что так же может быть не из текущего, а из юзингов.К примеру:use app\Exception;илиuse app\CustomException as Exception;В этом случае так же явное указание корневого неймспейса через \Exception так же помогает. Имя одно может быть, а получить ты хочешь что-то конкретное, и поэтому так конкретизируешь. В корневом неймспейсе еще куча всего лежит, не только исключения.
ОП, я правильно понимаю, что изначальная идея тестхаба как сервиса в том, чтобы дать возможность учителям создавать тесты и смотреть результаты прохождения других людей? Такое не очень интересно делать, так как я не учитель и пользоваться таким сервисом не буду. Другое дело если взять те же тесты и сделать аналог anki - чтобы пользователь мог создавать тесты для себя и тренироваться, тут можно даже интервальное повторение прикрутить. Думаю в таком случае часть функционала можно вырезать, например оповещения о том, что кто-то прошёл тест. Разделить тесты на приватные и публично доступные, добавить группировку (например я делаю конспект книги по англ языку и хочу создать из набора тестов группу). Есть какие-то идеи на этот счёт?
Читаю сейчас про ооп в пхп и не понимаю, почему жс и пхп существуют отдельно. Когда пойдут принципиальные отличия, а не синтаксические? inb4 там стиль написания кода другой - пример стиля можно? Если б пхп умел получать элементы дом-дерева и накидывать стили, он же не умеет? то жс не нужен был бы. Хотя у него синтаксис приятнее.
>>1628355Да, ты можешь поменять условия задачи, если тебе так удобнее. Главная идея там - научиться работать с большими проектами, где много таблиц, сущностей, форм, правил валидации.Советую вначале продумать функционал и написать требования, а только потом их реализовывать. Ну и не строить поначалу наполеоновских планов, а начинать с минимального функционала.>>1628506Языки разные, так как придуманы разными людьми. Много языков - это хорошо, так как в результате конкуренции и отбора остаются наиболее подходящие для своих целей, появляются какие-то новые идеи. >>1628584Не понял вопрос. Значение false нельзя вывести с помощью echo (к тому же, preg_match возвращает числа 0 или 1 - количество найденных совпадений, а не true/false). Можно разве что вывести строчку echo "false"; если тебе это зачем-то нужно.Если ты хочешь выводить, что именно в номере не так - то надо как-то отдельно это определять. Например, считать число цифр и предупреждать, если их не 11. Или отдельными регулярками проверять другие части номера. То есть надо вместо одного сопоставления с регуляркой делать N проверок (что нет лишних символов, что цифр 11, что в начале +7 или 8 итд) и при неудаче проверки - выводить сообщение.
>>1599201 (OP)Подскажите нубу.Cтавлю отрицание в условии выводит "hui", убираю отрицание тоже выводит "hui". Если поменяешь $a с 2 на 3 то все работает как надо.Почему так? Сам допереть не могу)<?php$a=2;if(!$a % 2 == 0){ echo "hui";}
>>1629016Ты точно правильно написал условие?У тебя сейчас оно читается так: НЕ-$a (а == 2, значит не-а равно false с приведением к 0 делить с остатком на 2 == 2)Тоесть у тебя вообще всегда там будет true в условии, вне зависимости от переменной а. Перенеси отрицание к !==
>>1629106Нихуя не понял, разве что нужно отрицание к знаку неравенства поставить. Хочу сделать проверку числа на четное нечетное, мне надо найди нечетное. Хотел одним условием обойтись(чтобы не писать else), поэтому поставил отрицание.Вот так собственно работает.$a=2;if ($a%2 !== 0)echo 'чётное';>>1629099>Не равен вернее.Да
>>1629016Надо писать if (!($a % 2 == 0)) так как иначе из-за приоритетов операторов это воспринимается как if ((!$a) % 2 == 0)Почитать про приоритеты: https://www.php.net/manual/ru/language.operators.precedence.php
Отравил в четверг вечером тзшку - никакого ответа. 2 рабочих дня конечно было, но всё же есть подозрения, что ответа не будет. Когда стоит звонить и узнавать вердикт, при отсутствии ответа?
>>1599201 (OP)Привет, подскажите начинающему: Сильно страшно, если я двойные скобки пишу и && вместо просто and?В гайде рекомендуют писать так, например: ((условие) == (условие)), ((условие) && (условие)) и т.д.
>>1629494Ещё кстати не знал о ">=" и "<=" ( в гайде пока не наблюдается)Так что за это тапками не кидать!
Насколько актуален гайд по установке апача? Всё было нормально до шага с кастомным доменом - всё как надо по-моему прописал и в хостс и в конфиге - не работает. Ещё и localhost перестал работать.
И ещё вопрос: я правильно понимаю, что если в коде несколько условий, то после каждого условия кроме последнего нужно писать exit(); чтобы всё не смешалось "в кашу"?
>>1629536На этом уровне может быть и да. Но в целом - нет. exit(die) это вообще моветон. Буквально в следующих уроках ты узнаешь о функциях и вопрос отпадет. А потом и о классах. После этого у тебя возникнут другие вопросы наверняка. Просто сначала дочитай до конца.
Ананисты, дайте какой-то то костыль для написания красивого ПХП, типа пишем consol($hui); а он нам выводит оформленное содержимое переменной типа если бы мы написали echo '<pre>'; print_r($hui); echo '</pre>' и т.п. Штуку облегчающую и сокращающую написание кода на ПХП как это делает ЖКВЕРИ на ЖАВАСКРИПТ, то есть штуку работающую на готовых функциях я так понимаю
Сап двощь. Где хранить тот же каштомный конфиг nginx'a? В отдельной репе или кинуть в корень проекта? И вот еще вопрос, если есть какие-то наносервисы на ноде, например для ресайза и оптимизации картинок, как это дело лучше версионировать в связке с остальным приложением? Я вот думал на пхп иметь какой-то конфиг размеров и через шаблонизатор высирать полноценный srcset и в ноде на лету конвертить и кешировать через нгинкс, при том желательно что этот же конфиг размеров дублировался и на ноду(чтобы не дудосили разными размерами и не забивали кеш). Имеет ли смысл ради такого начать учить докер и вот это всё? Опыта особо нет в таких вещах и толком не знаю как это правильно делается, но в моей голове это должно быть что-то типа git clone ... туда сюда ... и проект поднялся со всеми сервисами на деве
Блджад анонсы, по сути классы в пхп получается это все те же функции просто в наборе? Как объекты в яваскрипт? Где объект это по сути ассоциативный массив из пхп, но только он ещё вместе с переменными может хранить и функции, которые тоже становятся его методами вызываемыми через точкуКстати в пхп методы класса можно вызывать только через стрелочку? ->Почему вообще ушли от процедурного метода? Это же приятнее, чем тонна папок с контроллерами и виверами
>>1619949>> Приведите пожалуйста аргументы почему нужно шифровать 100% сообщений?>>- в Телеграме те, кто использует секретные чаты, выделяются из толпы и привлекают внимание>- проще шифровать все по умолчанию, чем отправить что-то не то, а потом вспомнить, что шифрование выключено>>Если делать шифрование отключаемым, может делать по дефолту его включенным, а далее отключать по желанию?>>Насчет поиска и сортировки - интересный аргумент. У меня не будет шанса объяснить пользователям что это не приложение тормозит, а происходит дешифровка.
>>1629985Он мёртвый русский, это была агонияПерекатываемся, тред скоро удалится:https://2ch.hk/pr/res/1630065.htmlhttps://2ch.hk/pr/res/1630065.htmlhttps://2ch.hk/pr/res/1630065.html
Анончики, подскажите, как поменять корневой каталог на сервере? Это через htaccess или инструментами хостинга надо делать?
Ладно, раз уж создали новый тред, давайте в него перейдем >>1630065 (OP) , хотя там творится какой-то флуд. >>1631944 Это делается директивой DocumentRoot. Если открыть ее описание, то видно, где ее можно размещать: https://httpd.apache.org/docs/2.4/mod/core.html> Context: server config(щелкнув по ссылке)> server config> This means that the directive may be used in the server configuration files (e.g., httpd.conf), but not within any <VirtualHost> or <Directory> containers. It is not allowed in .htaccess files at all.То есть нужно править конфиг сервера, на хостинге это делается как-то через панель управления. Если ты поднял Апач у себя, то просто редактируется файл в /etc/apache2/ (иногда на каждый хост делается отдельный файл) из-под админа.>>1629813> У меня не будет шанса объяснить пользователям что это не приложение тормозит, а происходит дешифровка. Ну ок. Вообще, есть еще вариант попробовать поменять алгоритмы шифрования. Асимметричное шифрование медленное. Потому часто (например, в SSL (и в HTTPS)) с помощью асимметричного шифрования шифруют только ключ, который используется в быстром алгоритме симметричного шифрования. А сообщения уже шифруют симметричным ключом.То есть, можно сделать так:1) создатель беседы генерирует для нее ключ2) шифрует его публичными ключами собеседников (включая свой публичный ключ) и сохраняет полученные копии на сервер3) шифрует сообщения в беседе симметричным шифрованием с этим ключом4) все собеседники скачивают с сервера свою копию зашифрованного ключа и расшифровывают эту копию своим приватным, после чего расшифровывают сообщенияВ такой схеме не нужно генерировать отдельную копию сообщения каждому собеседнику. Возможно, тут есть какие-то слабости, и стоит внимательно все продумать. Можно для надежности раз в N часов/дней генерировать новый ключ беседы.Можно почитать по этой теме про протокол Диффи-Хеллмана - там похожая ситуация.Если тебе интересно поломать над этим голову, можешь попробовать сделать. Если нет - можно, как ты предлагаешь, просто сделать шифрование включаемым по желанию.
>>1629746Объект - это данные (поля, переменные) и набор методов (функций) для работы с ними. Класс - это описание объекта: какие поля, какие методы в нем есть. Все объекты одного класса имеют одинаковый набор и названия полей, но значения в них могут быть разные.В ОП-посте есть учебник, в нем есть глава про ООП, там все объясняется с нуля, советую прочитать и решить задачи оттуда. >>1629727Конфиг стоит добавить в проект, хотя бы чтобы другие разработчики могли на него посмотреть.> если есть какие-то наносервисы на ноде, например для ресайза и оптимизации картинок, как это дело лучше версионировать в связке с остальным приложением? Есть два подхода: все в одном большом репозитории или отдельные репозитории на каждый сервис. С конфигами - не знаю. По идее, для них можно завести отдельный репозиторий, так как с микросервисами конфигов может быть много, и из репозитория разливать их куда требуется. Но я такое не проверял на практике.Если не хочется использовать Докер, можно написать bash-скрипт, который запустит нужные сервера вроде такого: php -S 127.0.0.1:9001 .... & # сохраняем PID процессаPHP_PID=$? npm start-server .... &NODE_PID=$?При завершении скрипта можно сделать прибивание запущенных в фоне сервисов командой kill.
>>1629708var_dump() все подсвечивает, если установить расширение xdebug.>>1629536Если ты можешь сделать без exit(), то код будет красивее.>>1629514Сейчас есть более простой способ, не требующий правки hosts. Назови свой хост вроде xxx.localhost и он автоматически будет резолвиться в адрес твоего компьютера (127.0.0.1). Тогда содержимое hosts можно восстановить в исходное значение и не трогать.Гайд относительно актуален, хотя сейчас можно использовать встроенный в PHP веб-сервер и обойтись без Апача вообще.>>1629494 Скобки помогают явно указать порядок выполнения действий и в этом смысле полезны. Можно писать and, но учти, что у него другой приоритет в отличие от &&.
>>1632503А неперекрывающиеся условия не помогают? Ну когда выполняется одно - другие точно возвращают ложь.
HELPПытаюсь ui в лару, выдает вот такую хуйню. Я может дебил конченный, уже 2 часа гуглю, но проблема не проходит:composer require laravel/ui --devUsing version ^2.0 for laravel/ui./composer.json has been updatedLoading composer repositories with package informationUpdating dependencies (including require-dev)Your requirements could not be resolved to an installable set of packages. Problem 1 - Conclusion: remove laravel/framework v6.18.3 - Conclusion: don't install laravel/framework v6.18.3 - laravel/ui 2.x-dev requires illuminate/console ^7.0 -> satisfiable by illuminate/console[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.2.0, v7.2.1, v7.2.2, v7.3.0]. - laravel/ui v2.0.0 requires illuminate/console ^7.0 -> satisfiable by illuminate/console[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.2.0, v7.2.1, v7.2.2, v7.3.0]. - laravel/ui v2.0.1 requires illuminate/console ^7.0 -> satisfiable by illuminate/console[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.2.0, v7.2.1, v7.2.2, v7.3.0]. - don't install illuminate/console 7.x-dev|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.0|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.1|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.2|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.3|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.4|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.5|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.6|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.7|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.0.8|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.1.0|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.1.1|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.1.2|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.1.3|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.2.0|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.2.1|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.2.2|don't install laravel/framework v6.18.3 - don't install illuminate/console v7.3.0|don't install laravel/framework v6.18.3 - Installation request for laravel/framework (locked at v6.18.3, required as ^6.2) -> satisfiable by laravel/framework[v6.18.3]. - Installation request for laravel/ui ^2.0 -> satisfiable by laravel/ui[2.x-dev, v2.0.0, v2.0.1].Installation failed, reverting ./composer.json to its original content.
>>1642975Кароче в пизду я просто перенесу всё в новый проект, там всё работает. Надо было сразу так сделать =)