Двач.hk не отвечает.
Вы видите копию треда, сохраненную 22 апреля 2020 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Клуб изучающих PHP #115 /php/ 1599201 В конец треда | Веб
Непонятный сезон стоит за окном, а мы по-прежнему изучаем язык 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.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра. Также можно начинать смотреть фильмы и видео на английском.

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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? — Да, однозначно. Посмотри любую вакансию.
grammar.png56 Кб, 500x644
2 1599203
Стоит писать код как попало, а аккуратно. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

Если тебе лень выравнивать код руками, закачай его на 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.md
PSR-2 (рус.): https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
3 1599205
Напомню себе проверить позже: >>1598967 →

https://github.com/Vladrigos/StudentList/

Если вдруг я кому-то не ответил в прошлом треде, можете напомнить о себе тут.
4 1599212
https://github.com/izicoder/todosite
Накалякол говно
Но хотя бы работает...
мимо долбоеб
5 1599216
>>599205

Могу, кстати, сразу несколько советов дать по поводу 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
6 1599237
>>599212
Осталось это же через ООП запилить
7 1599358
ну наконец таки перекатили. и полугода не прошло. анчоусы, подскажите, делаю аякс пагинацию и там такой код https://ideone.com/fRquks
он отсылает меня в шаблон, который парсит в нужной мне разметке уже то, что пришло с контроллера. проблема только в том что сам js код проблем не вызывает и ajax не ловит .fail
вместо этого при переходи на любую из страниц пыха мне выдает что undefined variable т.к. видимо из за того, что с контроллера нихуя не прилетает. так вот с чем связано то что ничего не приходит?
8 1599369
Недавно сделал студентов. Жду негатив <3 https://github.com/Back1ng/students Использовал Singletone для базы данных, как пример антипаттерна, анон сказал попробовать, чтобы знал. Еще и роутинг хотел по другому сделать, но подумал про параметры, и решил сделать так как есть, ведь все равно большего кода тут не будет
9 1599501
>>599369
У тебя контроллер наследуется от БД, че за пиздец, во всю используются глобальные переменные. Нет тестов.
Пиздец!
10 1599535
Пацаны, я паровозик, который смог.
Давайте вместе порадуемся этому.

Тащемта если отбросить обсер с видимостью переменных в функциях, я ломал голову над знаками, которые должны быть в запросе sql. Стаоался там кавычки поставить, запятые как отдельные символы ставить. Но это оказало проще.
11 1599681
>>599501

>У тебя контроллер наследуется от БД


Теперь не наследуется

>во всю используются глобальные переменные


Ты про статические методы?

>Пиздец!


Понимаю! =)
12 1599739
>>599501

>Нет тестов


Сейчас бы тесты на студентов писать.
Толсто.
image.png1 Кб, 225x18
13 1599741
>>599681
Нафига вы так пишете? Строки что ли экономите?
14 1599770
>>599739
Потом удивляемся, почему в проде никто тесты не пишет
15 1599791
>>599770
Какой прод, шиз? Тут учебный проект.
16 1599795
>>599770
Тесты заебись писать когда ты сидишь на работе и тебе за это платят, а не с голодухи в поисках вката, или заказа, или обучения.
Т.е. только тогда когда это хоть кому-то нужно.
17 1599881
>>599681
Глобальные переменные вроде $_SESSION. Не используй их, потому что тесты потом не сможешь написать. Есть всякие библиотеки, которые позволяют работать с сессиями и куки как с объектами, гугли.
18 1599895
Сап /pr. Занимаюсь пыхой уже второй год, ковыряю фреймворки потихоньку, немного зарабатываю на фрилансе, вроде получается. Сейчас я студент последнего курса, поэтому летом уже пора искать работу. Но в моей шараге сейчас есть курс по тестированию веб-приложений на питоне. Стоит ли вкатываться? Или забить и подрочить пых ещё пару месяцев?
19 1599954
>>599881

>Есть всякие библиотеки, которые позволяют работать с сессиями и куки как с объектами, гугли.


Да ему одного объекта хватит, куда это всё убрать можно. Зачем библиотеки?
20 1599962
>>599954
Чтобы по psr все было.
21 1599963
Суп. Подскажите как фронтенд скотине быстренько влететь в пхп, чтоб без всякой воды и говна для полных новичков типа "что такое DOM, бигоу нотейшон и т.д"? Там на удеми может что-нибудь? Надо по работе, там yii2
22 1600007
>>599963

>что такое DOM


>бигоу нотейшон


Тут нет такого - придётся сидеть как новичок.
23 1600041
Привет, помогите советом:

Пишу бота, как лучше организовать хранения справочника типов ответа?

Есть родительский класс Response,
есть подклассы ResponseImage, ResponseText
Есть таблица в бд response - история ответов.

Как оргранизовать справочник типов Response, чтобы в дальнейшем, знать как правильно обрабатывать историю ответов из бд.
1. Хранить в отдельной таблице response_type(id, class_name), и получать type_id в дочернем классе каждый раз запросом к этому справочнику (поиск по имени класса)? Это увеличит кол-во запросов к бд, на сколько это существенно?
2. Или прописать типы в родительском классе? Тогда каждый раз создавая новый класс-ResponseNew нужно будет изменять родительский класс.
3. Создать справочник в бд по всем типам, а в дочернем классе прописать только его type_id?
Два последних варианта - это вероятность возникновения коллизий в будущем при поддержке нескольких ботов.
24 1600042
>>599741
Это случайно получилось, вроде code cleanup в phpstorme
25 1600051
>>599895
забей, нахуй не надо. если есть потребность в тестах на питоне - изучай сам.
будет быстрее, эффективней, дешевле.
так что дрочи пых и пытайся щас уже галеру найти где будешь грести, ибо летом после выпуска будет огромная волна студентов, а осенью еще больше. в связи с этим будет как бы проблематично искать будет. алсо, летом все в отпусках и особо вакансий на рынок не выкидывают
26 1600062
>>600051
Курсы бесплатные если что, от мэйла. Спасибо за совет, анон.
27 1600087
>>599358
бампец
28 1600103
>>599791
Сразу прививаем хуевые практики
29 1600105
>>599795
Во многих ваках спрашивают за тесты с порога.
Если конечно не хочешь пойти в говноконтору, где нет тестов и всё тестируют вручную
30 1600316
>>599201 (OP)
ОП задача про палиндром, проверь пожалуйста!

https://ideone.com/2Z7dTu
31 1600318
>>600316
Если что это переделанная.
32 1600320
>>599201 (OP)
Дается массив с числами например
[01,0,1,02,2,5,04,4]
Как убрать из него восьмеричные числа типа 01,02,04.
33 1600322
>>599895
Ребят скажите плиз, как в php фриланс вкатится? Если я уже все основы веба знаю, только опыта нет. Можно где-то беслпатно поработать? Заказики повыполнять, постажироваться
image.png566 Кб, 600x436
34 1600426
>>600103

>учебный проект на 2 с половиной класса


>тесты

35 1600434
Опчик проверь задачу про новый айпад.

https://ideone.com/9SjyMv
36 1600439
>>600426

>Очень трудно написать 2 с половиной теста

37 1600448
>>600322
Если ты правда знаешь как верстать, PHP и т.д То ты никогда не согласишься делать что-то забесплатно.
38 1600452
>>600448
Так у меня практики нету, я не знаю как монетизировать свои умения. Если я не получу денег но получу опыт, который потом смогу монетизировать, это уже хорошо.
Но да, конечно забесплатно делать это крайний вариант
39 1600455
>>600105
Сменил три работы - нигде тестов не писали. Что-то где-то про это говорилось на начале проекта, но потом всегда хуй забивали. Да, это плохо, но далеко не везде их пишут.
40 1600467
>>600455
Сейм на двух работах сидел и сижу без тестов и это хуево. Сам для себя пишу тесты в изолированных кусках кода
41 1600491
>>600439
А нах? Знаешь зачем тесты пишутся?
42 1600492
Кто решил все бонусные задачки? Долго решали? Вот собираюсь ими заняться, хочу спросить есть ли ребята которым удалось?
43 1600493
>>600439
Иди нах, короч, со своими тестами на студентах, шиз.
44 1600546
>>600491
Проверить бизнес логику
45 1600548
>>600493
Чтоб тебе на продакшене ни одного теста не было, пидор
46 1600561
https://career.habr.com/vacancies/1000049256

>Зарплата от 200 000 до 300 000 рублей в месяц. Зависит от количества допускаемых вами ошибок (объективно).


>ошибок



Че за нахер?
47 1600563
Как на пхп сайт с http на htpps перевести?
48 1600567
>>600563
Это уже к веб серверу. Погугли https имя твоего веб сервера. https apache2 Там уже есть инструкции.
49 1600582
>>600561
Ну очевидно, что заносчивые люди будут при любом найденном проблемном или спорном моменте качать права и предлагать снизить зп
50 1600596
>>600561
Компания еще и полулегальная небось, так как продает акки
51 1601092
ОПчик, будь добр проверь задачку про регулярки, тема сложная:

https://ideone.com/kieK0K
52 1601115
>>601092

>регулярки, тема сложная


да нет всего лишь паттерн матчинг, что искать и на что менять
53 1601129
Наверное это нубский вопрос, но все же. Вот допустим есть простой контроллер c тайпхинтом int на айди теста, который берет айди и показывает страничку с описанием и прочей инфой или 404, если тест не найден. Все работает, но вот, допустим, если юзер случайно наберет в адресной строке слишком большой айди, который больше допустимого int в php, то ларавель преобразовывает этот большой айди в строку и соответсвенно выскакивает исключение, что в контролер пришла строка, а не int. Как это пофиксить? Через middleware?
54 1601135
>>601115
Первый раз с этим сталкиваюсь. В Си такого не было. Хотя с поддержкой сайтов про регулярки не так уж и сложно, но подумать всё равно надо.
55 1601181
Случайно удалил через DELETE записи в innodb. Как можно быстро сделать откат?
56 1601193
>>601129
Я думаю через try catch и typeException, или какие там есть исключения, выдать 404 страницу
57 1601267
>>601129
Заменить инт на строку?
58 1602133
>>601267
Тогда уже ошибка при запросе в бд будет.
>>601193
Я проще сделал. В документации нашел, что можно параметры запроса регулярками в роутере фильтровать и поставил от одной до десяти цифр.
59 1602256
Аноны, Оп, помогите. Хочу сделать опросник, но не могу придумать структуру бд. Т.е есть вопросы и ответы, но не простые. У вопросов и ответов должны быть последовательности, аля "выберите ваш пол: М, Ж". И к каждому ответу разные ветви опросов. И так можно сделать к каждому ответу. Это вообще реализуемо? Еще хочу попробовать сокеты, на пхп же можно их написать? (думаю сделать простенький чат чтобы потестить) Или же такие вещи реализуют на ноде?
60 1602258
>>602256
напиши ветвления
61 1602259
>>602256
дополню в бородатые времена была программа элиза она хоть и на лиспе но прочитав код поймешь принцип, работала как чатбот.
62 1602336
Подбуханный сеньер в пятницу разбирает требования к вакансиям по PHP и около того. Респонс не требуется, но может быть кому-то будет полезно. Смотреть на скорости 1.25, иначе скучно.

https://www.youtube.com/watch?v=ixfsmWVAD_0
63 1602340
>>602336
Я просто своего друга учу и делаю ему видео. Если вас тут покажется полезным, могу улучшить звук и закидывать. А так, это не реклама, я просто напился и решил, чобы не поделиться.
64 1602344
>>602340
извените за ашипки
я проста бухой слигка
65 1602346
>>602344
инфа для нубов от этого не становится менее ценной
66 1602348
>>1599185 →

>Проще сделать папку, в ней хранить файлы с именами, соответствующим логинам или id пользователей, а не пытаться это засунуть в конфиг. Если пользователей всего несколько, можно и в конфиг, благо YAML позволяет многострочные тексты. От 150 строк ничего страшного не будет, и при желании можно это вынести в отдельный файл и инклудить его.


Да, пользователей всего несколько - 3-ое (Alice, Bob, Tester). Правило ли будет поместить в services.yaml в поле parameters следующие поля: alice_public_key, alice_private_key и т.д, и поместить в них многострочный текст? Как потом получить доступ к этим параметрам Symfony Console?
67 1602372
>>602348
Ключи хранятся в отдельной папке. Папка исключена (так как ключи приватные) из систем контроля версий. Ключи берешь через file_get_contents или что-то подобное (к примеру криптобиблиотеки могут принимать файл ключа как параметер). Файлы или именуешь по айдишникам пользователей (как анон выше говорил) или добавляешь в таблицу юзеров поле с именем файла ключа.
Untitled1.png47 Кб, 1048x649
68 1602387
>>602256
Что-то типа такого. Три нижних таблицы это если тебе нужно сохранять ответы пользователей (причем каждый пользователь может пройти несколько тестов) для самого теста они не нужны.
69 1602615
>>602336
Сорре, протрезвел, грохнул этот видос, стыдобра, лучше потом сделаю нормально и трезвым.
70 1602686
>>602615
нормально
71 1602882
>>599201 (OP)
Аноны, как лучше обрабатывать тяжёлые POST-запросы, многомегабайтные, с BigData в виде JSON'a?

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

Что посоветуете?
72 1602977
Как в методах полиморфно определить имя класса?
Хочу родительский дженерик-метод, который использует имя класса, но self::class и __CLASS__ возвращают класс-родитель.
73 1603039
>>602258
>>602259
>>602387
Спасибо, аноны. Попробую
74 1603086
>>602977
ОК, я понял.
self => static
75 1603088
Когда нужно использовать прослойку для модели аля сервис, репозиторий? Если у меня не особо большой проект - есть ли в этом смысл?
76 1603289
>>602882
php://input
77 1603307
>>603088
Репозиторий это абстракция от хранилища. Это нужно чтобы код модели не зависел от конкретного способа сохранения данных.
Профиты будут, соответственно, если хранилище данных придется менять. Некоторые долбоебы думают что это типа переезда с mysql на postgres, но это относится и к переезду на новую версию базы или кешированию.
Так что я рекомендую репозитории использовать всегда. Если проект маленький, то и времени ты на них потратишь немного, а если большой, ну ты понел. Кашу маслом не испортишь.
78 1603310
>>601129
Просто кастишь значение к числу (int)$veryBigInt и получаешь максимально возможный int https://3v4l.org/3F9GN
79 1603376
А можно делать запросы к сфинксу через постгрес клиент, а не mysql?
32064275300x300.jpeg16 Кб, 300x300
81 1603540
В статье ОПа по исключениям есть такая заметка: "Исключения имеют и недостатки в сравнении с явным возвратом ошибок. Например, они могут быть выброшены при выполнении любой функции, и сложнее становится угадать, как будет выполняться код."
Не могу понять, что имеется в виду. Если исключение предусмотрено разработчиками в описании определенной функции, то оно сработает при любом вызове этой функции, если в ходе ее выполнения условия для выброса исключения будут удовлетворены. Другими словами, если выражение внутри скобок после if будет равно true (1) в if (expression) { throw new Exception("Yada yada yada"); }, то скрипт будет прерван.
Однако то же самое произойдет в случае с явным возвратом ошибок:
if (expression) { die("Yada yada yada"); }
Помогите понять мысль ОПа.
82 1603634
>>603540

Явный возврат ошибок это возврат через 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 и это было бы очевиднее.
83 1603656
>>603086
Угу, позднее статическое связывание.
84 1603967
>>603540
>>603634
Тут все намного сложнее. Выбрасываемые исключения можно прописать в комменте, тот же phpstorm явно просит тебя это сделать.

А дело все в том что исключения используются как продвинутый goto. Сам goto в пхп ничего криминального из себя не представляет, и ничего действительно запутанного сделать не даст. Вот пример, где мы пытаемся из контекста функции перескочить в другое место https://3v4l.org/f2WLK. Как видишь это нихуя не работает.

А вот пример типичного использования исключений https://3v4l.org/X8QGJ. Как видишь, то чего не смог goto вполне себе могут исключения. Как я уже сказал - этот код ТИПИЧНЫЙ и ты будешь писать точно так же.

Причиной, как мне кажется, является отсутствие возможности нормально вернуть несколько значений, т.к. массивы не типизированы и туплов нет. А так же отсутствие промисов или монады maybe из коробки.
85 1604012
Продолжаю решение задачи про банкомат, про тот вариант, когда задача не решается жадным алгоритмом 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/Размещение ). Есть готовые "алгоритмы для генерации размещений". У нас не совсем размещение, но очень близкая к нему вещь, можно погуглить эти алгоритмы.
Дальше алгоритм можно оптимизировать. Например, не перебирать комбинации, которые заведомо превышают искомую сумму (вроде комбинации 2x5000, когда надо выдать 6000). Перебирать комбинации не от (0, 0) к (1, 3), а начиная с наиболее близких к искомой сумме.
В любом случае, тут нужна рекурсивная функция. Либо стек.
Для начала, можешь попробовать написать код, который просто выведет все возможные комбинации купюр на экран. А потом уже добавлять проверку, дает комбинация нужную сумму или нет

Я попробовал написать код, который просто выведет все возможные комбинации , рекурсивно не получилось , получилось со вложенными циклами , но если количество номиналов купюр будет от 3 и более , то вложенные циклы никуда не годятся, получается плохой код. Порывшись в гугле нашел , вот такой рекурсивный цикл https://ideone.com/TRasJW , его чуть чуть поменять , и он уже будет выдавать наши комбинации купюр, в самом этом коде я разобрался, но кажется мне , можно сделать рекурсивный цикл намного проще и понятнее, но самостоятельно написать у меня не получилось, поэтому ищу опять совета здесь
85 1604012
Продолжаю решение задачи про банкомат, про тот вариант, когда задача не решается жадным алгоритмом 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/Размещение ). Есть готовые "алгоритмы для генерации размещений". У нас не совсем размещение, но очень близкая к нему вещь, можно погуглить эти алгоритмы.
Дальше алгоритм можно оптимизировать. Например, не перебирать комбинации, которые заведомо превышают искомую сумму (вроде комбинации 2x5000, когда надо выдать 6000). Перебирать комбинации не от (0, 0) к (1, 3), а начиная с наиболее близких к искомой сумме.
В любом случае, тут нужна рекурсивная функция. Либо стек.
Для начала, можешь попробовать написать код, который просто выведет все возможные комбинации купюр на экран. А потом уже добавлять проверку, дает комбинация нужную сумму или нет

Я попробовал написать код, который просто выведет все возможные комбинации , рекурсивно не получилось , получилось со вложенными циклами , но если количество номиналов купюр будет от 3 и более , то вложенные циклы никуда не годятся, получается плохой код. Порывшись в гугле нашел , вот такой рекурсивный цикл https://ideone.com/TRasJW , его чуть чуть поменять , и он уже будет выдавать наши комбинации купюр, в самом этом коде я разобрался, но кажется мне , можно сделать рекурсивный цикл намного проще и понятнее, но самостоятельно написать у меня не получилось, поэтому ищу опять совета здесь
86 1604059
Basic Auth не зашквар использовать в 2020?
Разумеется всё на https будет крутиться.
87 1604086
>>604012

Давай попробуем еще упростить задачу. Допустим, у нас есть 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 и увеличиваем цифру перед ней.

Этот способ тоже можно попробовать.
87 1604086
>>604012

Давай попробуем еще упростить задачу. Допустим, у нас есть 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 и увеличиваем цифру перед ней.

Этот способ тоже можно попробовать.
authors.jpg103 Кб, 1913x864
88 1604093
Совсем пиздец или сойдёт?

Тестовое задание для стажировки.
89 1604094
>>604086
Благодарю , буду разбираться !
90 1604096
>>604093

>Совсем пиздец


Это даже мягко сказано.
91 1604102
>>604096
А как сделоть?
92 1604152
>>599201 (OP)

> - Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев


Это вместе с

> SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery.


?
А если я знаю html, css, js, jquery и git - сколько пхп займёт? Просто в городе пхп требуют в каждой второй вакансии, думаю стоит выучить.
93 1604180
>>604093
Если строк в массиве будет миллион че будешь делать?
94 1604243
>>604180
Я уже переделал в foreach.
В первый раз не смог додуматься как оформить прост, поэтому сделал через echo.
95 1604248
>>604152
Ну тебе осталось выучить SQL, PHP + его ООП, паттерны, хттп\s-протокол, ну и хотя бы один современный фреймворк.
Полгода минимум.
У тебя фактически только фронтенд и бэкенда вообще нет.
96 1604256
>>604248
Звучит долго. Это время нужно для хорошего уровня или для начального устройства на работу? Просто я видел вакансии в стиле "вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёром". Старт меня и такой устроит.
97 1604275
>>604256

>Звучит долго.


Это только до уровня вкатывальщика-джуна на нормальный современный стек. Потом ещё доучиваться надо на работе.
Времена когда в пыху вкатывались за 2 месяца давным-давно прошли. Сегодня так в js вкатываются.

>Просто я видел вакансии в стиле "вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёром".


Не видел таких. Это либо на вротпресс, либо кидалово.
В обоих случаях дно.
98 1604315
>>604275

>Сегодня так в js вкатываются.


жс только кажется легко там такой ебаный зоопарк с колбеками шо пыха не самое худшее в жизни
99 1604325
>>604315
Со всяким поработал, да и работаю. В целом в клиент вкатиться проще, может даже за 2 месяца, если не тупишь. Бекенд (не только на пхп, а любой, в жс тоже) гораздо более широкая тема. Работаю лет 10 уже и только интереснее и интереснее становится расти, а конца и края не видно. Сейчас даже сложно представить, какой объем инфы надо освоить в 2020, чтобы уверенно в бекенд залететь.
100 1604332
>>604325
бекенд не устаревает как фронт за полгода и хайпуется так
101 1604333
>>604332

>не хайпуется

102 1604613
>>604315

>жс только кажется легко


Он и есть - легко. То же самое, что и Луа, который вообще для мимокроков в индустрии сделан. Собственно поэтому в js такой ажиотаж и много молодых макак.

>там такой ебаный зоопарк с колбеками


Какой зоопарк? Промисы давно завезли. И в чём сложность этих коллбеков?
Там если только с асинком могут быть проблемы, и то только поначалу на ноде той же.

>>604325

>только интереснее и интереснее становится


Есть такое дело. Чем больше изучаю - тем дальше горизонт.
103 1604677
>>604613

>жс


>хоть и говно но общего назначения


>Луа


>встраиваемый


температуры нет? спал хорошо? прими таблеточку
104 1604691
>>604677

>общего назначения


>встраиваемый


Вообще не в ту степь полез.
Оба языка позволяют шлёпать код не заморачиваясь с нормальным ООП. Юным вайтишникам он не понятен и сложен.
105 1604740
>>604691

>нормальным ООП


ооп как явление костыль фабрики фабрик

>Оба языка позволяют шлёпать код не заморачиваясь


и давно у нас чистые луа вакансии появились?
стек жопаскрипта за последние годы растолстел что скоро больше жабы со спрингом станет, а учитывая вагоны джунов которые повелись на легкость вкота, требования там растут как на дрожжах, это не учитывая подводные айсберги самого языка со слабой типизацией.
106 1604767
>>604059
Бампирую вопрос.
Есть смысл базовую аутентификацию на админку ставить на https? Мне по-простому чтоб.
107 1604769
Может знает кто, какие в ДС есть стажировки по php/битрикс кроме qsoft?
108 1604870
>>604243
Сообщи если тебя возьмут на работу, потому-что если это случится, то я перестану переживать на счёт себя.
109 1604882
>>604767
Без https пароли передаются простым текстом. Любой кто снифает твой трафик может его прочиать.
110 1604939
>>603307

Все равно не могу понять зачем нужно это храниоище. В той же Ларе есть орм и свои коллекции. Зачем мне еще 1 слой делать, если и так уде все сделано
111 1604978
>>604939
Ну ведь тебе свои запросы через орм нужно где-то записать.
А потом изменить,
а потом добавить кеширование,
а потом добавить сброс кеша,
а потом добавить добавление в кеш сразу с добавлением в базу
Если у тебя есть репозиторий, то в десяти местах, где ты получаешь свою сущность будет написано просто $item = $items->getById($id), а вся техническая часть будет скрыта под капотом. Я уже не говорю про то, что если его не делать, то у тебя будет жесткая зависимость от ларавелевской орм.
112 1605001
Изучаю пхп что-то прям очень похоже на js по основам и видимо не только на него - возник один вопрос - а зачем перед переменными знак даллара? Ну то есть да, нужно так - но нельзя было проще сам язык сделать, чтобы не понижать скорость написания кода? Let/const/var - это ведь гораздо удобнее, если вслепую печатаешь. Доллар слишком далеко от дефолтного положения рук.
113 1605027
аноны, есть тут кто работал с опенкартом?
у нюфага есть пару вопросов к вам сразу говорю-гугл не помог
114 1605028
>>600320
$result = array_filter($a, function($number) {
return decoct(octdec($number)) == $number;
});
115 1605033
>>605001
Потому что на пыхе можно заработать денех
116 1605035
>>603088
Да делай все на чистом сикуле, зачем все эти ормы и абтстракции?
117 1605055
>>605033
Двачую, надо вместо $ ввести b24 и тогда ваще огонь будет
118 1605067
>>604093
Я смотрю, вы из индии
119 1605069
>>604769

>битрикс


Надеюсь, ты понимаешь во что ввязываешься
120 1605070
>>605001
Переменные платные.
1 переменная - доллар
Массив - размер массива долларов
Объект - сумма полей и массивов в долларах
121 1605075
>>605069
Я тоже начал рассматривать битрикс, как что-то, что даст старт. Какие подводные? Я конечно пока что на другие вакансии откликаться буду, но что-то везде опыт нужен но я не теряя надежды буду откликаться на вакансии с опытом от года, если в самом описании осознанно не написано о том, что опыт обязателен, а с битриксом не обязательно.
122 1605077
>>605070
То есть я уже где-то 30 долларов торчу, за использование языка? У меня нет столько денег.
123 1605099
>>605055
дристанул на всю борду. спасибо анон, ты сделал мой день

>>605075
ну вакансий море. поищи хоть что нибудь получше. тот же опенкарт или вордпресс если есть, идеальным вариантом будет october cms
124 1605103
>>604978
Почитал статьи. Репозиторий - слой для получения данных с бд, а сервис - слой для занесения данных в бд. Я правильно понял?
125 1605109
>>605075
Подводные в том, работа с битриксом - не разработка, максимум - веб мастер. Путь к работе на основе фреймворков или кастомных решений закрыт.
Это не говоря про низкую зп и скотские условия работы
126 1605150
>>605099

> вордпресс


А он лучше? Я думал, что это дно дна, почему-то. Вакансий нет, в любом случае - на удалёнку поди без опыта не возьмут. Мой удел - битрикс газонюх.
>>605109

> битриксом - не разработка


Пишут "разработка сайтов на платформе 1с-битрикс и доработка crm битрикс24". Врут? Ну и если это не разработка - получается мне это не поможет в дальнейшем устроиться в разработку и лучше дальше искать?
127 1605163
>>605150
Лучше сразу искать Symfony/Laravel/Yii(крайний случай).
В битриксе уровень кода лаба1.php, только этого кода десятки тысяч строк
128 1605171
>>605163
Так я только начал изучать пхп и как бы он ни был похож на js, надо вникать во всякие тонкости, mysql изучить, до выбора php фреймворка я пока не дошёл. Есть вакансии с пхп, но для них мне ещё пару месяцев бы дома посидеть, а я не хочу.
А тут попадается вакансия, где вроде как я научусь по крайней мере мне так кажется всему, что нужно для поиска нормальной работы, так ещё и платят какие-никакие никакие деньги - 3к стипендия за обучение, если пройду если нет, то наверное можно сразу выпиливаться, потом за 10к 3 месяца, потом я уже старший газонюх за 18к и может быть, когда-нибудь я дорасту до 30к и к этому моменту свалю от них. Хотя вроде там кому-то до 80к платят.
Суть в том, что на эту вакансию я с чистой совестью подхожу.
129 1605289
>>605171
Ты спокойно найдешь местную конторку, где тебя возьмут стажером на yii, научат пилить круд (львиная доля работы пхп макаки), а там уже рост пойдет, через пару лет на удаленку выйдешь и будешь спокойно пописывать
130 1605346
>>605171
пиздец это че за рабские условия труда такие
ни за что к ним не иди, анон.
или проси чтобы платили как норм стажеру 20-35к на первые три месяца
131 1605372
>>605001

>что-то прям очень похоже на js


Да вообще не похоже. Это ты, скорее всего, пишешь на пхп как на js он позволяет так делать до первого серьёзного проекта.
132 1605374
sup, программач. аноны, как делать ебучую интеграцию с api сдека ?нихуя непонятно
133 1605379
>>605346
Меня посадили в первый месяц фуллстек проект делать. lara/vue spa. Все делаю сам, общаюсь с заказчиком и серв настраиваю тоже. за 20. Благо проект не тяжелый и заказчик не ебет.
134 1605385
>>605379
Кмк, если кушать есть что - за копейки первое время работаь не должно быть проблемой. Хотя 3м за 10к как то мало. 15 хоть
135 1605465
>>605385

> Хотя 3м за 10к как то мало. 15 хоть


Ну там не факт, что 10 будет. Там от 10, потом от 18, потом от 35. Думаю 15 можно получать на старте.
>>605289

> Ты спокойно найдешь местную конторку, где тебя возьмут стажером на yii


Так что-то не вижу таких вакансий на основных сайтах с раьотой. Вообще мало стажировок, но куча вакансий с требованием года опыта - на них конечно можно и без опыта попасть, но обычно много всего знать надо, больше чем я знаю в данный момент.
136 1605475
>>605465
Ясно, понятно.
Можешь забить хуй на 90% требований в вакансиях.
Кадровый голод такой, что многие фирмы, где пишут 1-3 года опыта могут взять стажера на вырост.
Помимо вак стучи в сами фирмы, пиши на почту, звони, расслылай резюме везде, куда сможешь.
137 1605483
>>605465
Опыт разный бывает. Можешь считать что у тебя он есть, просто это не "опыт коммерческой разработки"
138 1605507
>>605475

> Помимо вак стучи в сами фирмы, пиши на почту, звони, расслылай резюме везде, куда сможешь.


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

> Кадровый голод такой, что многие фирмы, где пишут 1-3 года опыта могут взять стажера на вырост.


Вот им бы стоило вакансии стажёров создавать. А то слабо ощущается этот голод - в конторе, где я недавно был на собеседовании, сказали что один из 15 человек дальше первого, ознакомительного собеса проходит, а чтобы туда попасть, надо уже некоторые задания решить, которые показывают, что кандидат не случайно откликнулся. То есть навыки то могут быть нужные, но стиль работы не тот и они не дойдут до технического собеса а их 2-3 минимум и тз не получат.
>>605483
Да, я его указываю, со ссылками и кратким описанием. Но не думаю, что кто-то читает.
139 1605661
>>605507

>То есть навыки то могут быть нужные


С чего ты это решил? Качество решения любых задач, в том числе стажерских, можешь по этому треду заценить. Разброс очень большой. Очень даже может быть здравым решением пропускать только 1 из 15 решивших, если только он справился хотя бы на четверочку.
140 1605671
>>605661
Не, сначала дают задания после отклика, их 10-15 и они проверяют знание стека, используемого конторой, умение решать задачи несколькими способами и оптимально, понимание прочих важных для них штук. Вот из 15 тех, кто выполнил все эти задачи, 14 бракуют до технических собеседований и полноценного тз. У них специфический рабочий процесс и если они считают, что кандидат не подходит, он может хоть сколько лет опыта иметь.
141 1605787
Анчоусы, можете меня поздравить. Устроился пхп-макакой в контору. Зарплата средняя по городу. Но есть проблема. Я толком нихуя не знаю. То есть на базовом уровне могу написать анонимный форум типа базовой версии вакабы. Но постоянное ощущение, что меня слишком рано взяли на работу. Что почитать для правильной организации самой структуры кода? На работе проект, которому 12 лет, ООП там и не пахнет, но вот все равно ощущение, что я тупой
142 1605812
У меня есть два вопроса.
На один из них га сайте пхп.нет ответе не написано.
1.
printf ();
как использовать к многобайтовым русским символам?
если (никак) ? "Какие аналоги есть?" : "Анон, молю, подскажи";

2.
Как можно из пхп открыть другой файл?

К примеру, в хтмл можно параметр action="file.php" написать и это сработает.
А чот в пхп я пробовал fopen("page.html") и никак.
143 1605822
>>599358

Проверь отладчиком в браузере (F12 на вкладке Script или Debugger), что там формируется и передается в переменной obj

>>599535

У тебя SQL-инъекция в коде. Используй плейсхолдеры.

>>599739

Вообще, тесты удобно изучать на примере простого проекта ведь.

>>599963

Можешь попробовать для начала прочесть туториал в мануале: https://www.php.net/manual/ru/index.php

Но дальше тебе надо еще изучить ООП и фреймворки, язык SQL.

>>600041

Если у тебя есть классы, которые наследуются и ты хочешь их хранить в БД, то есть три паттерна: Class Table Inheritance, Concrete Table Inheritance и Single Table Inheritance.

Они описаны, например, тут http://design-pattern.ru/index.html

Самый простой, наверно, это STI.
144 1605825
>>600316

1) Если ты понял, что перед тобой не палиндром, то можно выходить из цикла по break
2) Ставь фигурные скобки после if/else, чтобы не было разночтений, где там начинается и заканчивается блок

>>600320

Восьмеричные числа никак не отличить от обычных, так как в процессе создания массива они все становятся просто числами, без системы счисления. Если у тебя строки ['06', '7'] - то отличить можно, а если просто числа, то никак. Массив содержит просто числа, без указания системы счисления.

>>600434

> for ($sumOfCredit += ($sumOfCredit * $percentage); $sumOfCredit > 0



тут слишком много действий, и тяжело читать заголовок цикла. Стоит вынести эти действия из скобок в for() и сделать обычными действиями.

"} else {" пишется в одну строчку.

А так, решено хорошо.
145 1605828
>>605787
Рад за тебя, анон.
Ощущение, что ты тупой, обязательно пройдет.

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

Не боись ошибаться, учись на этом.
146 1605831
>>605812

1) printf выводит русские буквы, но не умеет корректно их выравнивать и считать ширину текста (он считает что 1 символ = 1 байт, а русская буква занимает 2 байта в utf-8). придется писать свою функцию для выравнивания.

2) include/require. Они выполняют код из другого файла, как будто ты вызвал функцию.

В HTML с помощью action=... ты не "подключаешь" файл, а указываешь, на какой URL браузер должен отправить запрос с данными формы (и откуда он должен брать новую страницу для показа), когда пользователь нажмет кнопку отправки.

fopen "открывает" (подготавливает) файл для чтения или записи в него с помощью fwrite/fread. Он не будет выполнять код из файла.
147 1605847
Спасибо.
Значит, выравнивать текст придется не через printf, а через div'ы на странице.

> include/require


Сработает, если я вызываю не пхп, а чистый хтмл?

Алсо. На счет include/require.
Можно ли их использовать на каждой странице для подтверждения авторизации?

Типа, в одном файле авторизовался, перешел на вторую страницу, которая доступна только есть твой $pass == 'password'из БД.
148 1605860
>>605828
Но я работаю на работе и мне платят за это деньги. Постоянное ощущение, что мне скажут: ты слишком долго и хуево делаешь х, ты нам не подходишь
149 1605861
>>605847
Не изобретай велосипед, авторизация делается либо сессиями в случае твоего встроенного в шаблоны говнокода, либо всякими токенами в случае стейтлесс апи
150 1605863
>>605847
Инклюд подключает кампелированный код, require - в процессе исполнения.
Я вообще все шаблоны подключаю через инклюд
151 1605865
>>605847
Вообще да, Антон прав. Используй сессии. Можешь ещё в куке хранить хэш пароля
152 1605891
Аноны помогите со студентами.

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

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

3. Грамотно ли в контроллере при успешной регистрация ставить сессии и куки через глобальную переменную? Читал, что лучше вообще не пользоваться глобальными переменными. Но как тогда сделать?

4. Создавать отдельно хейдер и футер, и затем его подключать в контроллере через инклюд нормальный подход?

В общем я чувствую пробелы в понимании работы MVC, но не знаю, где восполнить эти пробелы.
153 1605897
>>599535
Че названия столбцов такие шизоидные?
IMG20200129125146208.jpg45 Кб, 474x412
154 1605899
>>600426

>использовать print_r вместо написания теста

155 1605901
>>605831
Разве в пыхе уже не давно ютф8 нативный везде?
156 1605902
>>605001
Не пытайся искать логику в этой хуйне, ее нет, пых писал какой-то упоротый жирдяй для своей домашней странички, вангую с тех времен доллары и пошли, а были они там, потому что васянскому интерпритатору было так легче переменные находить
157 1605912
>>605902
а почему жид компиляцию еще не прикрутили
158 1606027
>>605912
На хабре читал что от нее прирост в производительности только в теории есть. А на практике чуть ли не в минус идет. Но говорят в 8 версии запилят
159 1606034
>>606027

>только в теории есть


ага у пыхи же уже производительность как у жабы нечего выжимать(сарказм).
многопоток это отдельное бдсм в текущем виде
160 1606038
>>605787
«Чистый код» почитай, хотя бы половину, больше не надо.
161 1606069
https://ideone.com/MJT2d9

Еще не решил первую задачу в повторениях, объясните я даун или так можно решить? Меня пока что смущает цикл который я сделал, implode не работает почему-то, не могу этого понять. Плюс нет функций для того чтоб сделать первую букву в предложений заглавной, нашел вариант на сайте пыхи.
Сейчас осталось добавить пробелы и вроде решил.
162 1606072
>>605899
Вот жеж долбоёбы на ларавеле даже dd ввели для принта.
Таблетки прими, шиз. Тесты не везде нужны.
163 1606074
>>605897
Таблетки забыл принять.
154118960709293.jpg128 Кб, 1240x826
164 1606097
Че ребят как у кого успехи? Олды есть которые заглядывают сюда? Интересно истории какие-нибудь послушать.

Сам ~5 лет назад начинал проходить эти ваши задачи про вектор и прочее, потом работа начала появляться на которой не особо нужен был компьютер саенс, паттерны и алгоритмы (небольшие проекты на codeigniter). В общем не особо что-то прям развивающее, а чисто ебашилово молотком и долотоом так сказать.
Последние полтора года ебашу аутсорсером на легаси проекте, чувствую что опять болото. Да и платят наверное ниже рынка по большому счету. Периодически заглядываю в тред, но отвечать по большому счету некому, либо слишком простые вопросы, либо не моя компетенция или стену текста адовую нужно писать - просто тупо лень.
165 1606150
>>605374
ну же,анон,помоги. третий день мозг ебу
166 1606151
>>605860
сейм щит. гребу уже второй месяц в таком темпе
167 1606155
>>606097

>Олды есть которые заглядывают сюда?


видимо нет. здесь 90% вопросов моих почему то в игнор улетают ))). судя по всему все олды разбежались по другим тредам и языкам

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


Такая же проблема
168 1606187
>>606097
Пару месяцев гребу, ничего тяжелого пока. Хочется паттерны там учить и т.д. Хз че делать
169 1606206
>>606097

> Че ребят как у кого успехи?


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

> потом работа начала появляться


Через какое время?
170 1606213
>>606097
Типичная PHP-разработка. Хорошие конторы, наверное, где-то есть (должны же быть), но я не встречал ни разу.
171 1606234
Сап, двач. Делаю докер-кампот файл для 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.

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

Помогите дополнить, пожалуйста. Редактирование по ссылке не открываю, чтобы не испортили, пишите ответами тут.

Сразу говорю: понятно, что есть вакансии, где на джуна спрашивают как написать модуль для PHP на Си, как настроить кеширование в nginx по памяти или как бы ты оптимизировал sql-запросы, это понятно. Всё, что я сделал - это достаточно приблизительно, исходя из того, что я бы сам ждал от того или иного уровня.

https://docs.google.com/spreadsheets/d/1FvHiZp9xZRXMvPM4XKUuyrdR9v5vBEVccFx-mEWhnds/edit#gid=0
173 1606253
>>606206

>Через какое время?


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

Хз, сначала пришел в контору в которой была адовая текучка, куча макак делает какие-то там мобильные игры, все это сдабривалось скрытой рекламой для заработка (потом еще вроде как адовый скандал был в отрасли), а пхп отдел из 5 челов должен был лепить под все это дело мелкосайты и дендосы вроде как, ну и внутреконторные админки и всякие отчеты со статистикой. Когда спросили че умеешь - я ответил честно что вообще нихуя и меня взяли. Самым топовым программистом на пхп, помимо тимлида, там без шуток был школьник с 1.5 годом опыта. С одной стороны рили криндж, с другой я мог сидеть и без особых проблем разбираться в любой хуйне. Все понимали что с меня ничего не взять. Правда выдержал я там 2-3 недели всего, потому что ездить было далековато и на общественном транспорте. Кароче ебанули морозы, и я послал стояние на остановке в лесу -35 нахуй.

Потом была работа куда уже пришел через несколько месяцев, и там чел в соло делал какие-то проекты и ему нужна была помощь. В целом собеседовал он меня по php, html и css, нарешал я что-то только на php, сам потом перезвонил ему узнать о его решении (именно по этому он меня и взял в итоге, лол). Там уже началось рубилово на codeigniter.

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

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

>Сегодня написала контора, мол приходи, оценишь свой уровень


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

>Через какое время?


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

Хз, сначала пришел в контору в которой была адовая текучка, куча макак делает какие-то там мобильные игры, все это сдабривалось скрытой рекламой для заработка (потом еще вроде как адовый скандал был в отрасли), а пхп отдел из 5 челов должен был лепить под все это дело мелкосайты и дендосы вроде как, ну и внутреконторные админки и всякие отчеты со статистикой. Когда спросили че умеешь - я ответил честно что вообще нихуя и меня взяли. Самым топовым программистом на пхп, помимо тимлида, там без шуток был школьник с 1.5 годом опыта. С одной стороны рили криндж, с другой я мог сидеть и без особых проблем разбираться в любой хуйне. Все понимали что с меня ничего не взять. Правда выдержал я там 2-3 недели всего, потому что ездить было далековато и на общественном транспорте. Кароче ебанули морозы, и я послал стояние на остановке в лесу -35 нахуй.

Потом была работа куда уже пришел через несколько месяцев, и там чел в соло делал какие-то проекты и ему нужна была помощь. В целом собеседовал он меня по php, html и css, нарешал я что-то только на php, сам потом перезвонил ему узнать о его решении (именно по этому он меня и взял в итоге, лол). Там уже началось рубилово на codeigniter.

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

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

>Сегодня написала контора, мол приходи, оценишь свой уровень


Просто иди и попробуй без сомнений особых. Опять же пока ты не можешь самостоятельно решать бизнес-задачи, то ты сам должен проситься работать за еду. Если тебе скажут что можешь посидеть тут недельку поделать тестовое за бесплатно и позаебывать всех вопросами - соглашайся.
174 1606257
>>606252
Я как раз думал о чём-то похожем. Но я бы сделал не таблицу, а блок-схему.
175 1606258
>>606257
Да похуй как это выглядит, главное - суть. Таблица или схема - это дело 15 минут. А изучение - это дело лет.
176 1606259
>>606252
Глянул одним глазом на таблицу - хуета какая-то.

У тебя в голове каша. Условный Вордпресс и Ларавел, а так же разные субд - это не звенья одной цепи по которой ты идешь. Это как разные профы в линейке, лол. Можно быть суперспециалистом, который никогда не окунался в modx-парашу, и работать за 300кк в секунду в серьезных проектах, а можно быть "мастер на все руки в каждой cms" и работать за дошик в веб-студии "лидере отрасли", где тебя по факту просто перепродают решать проблемы челиков которые не понимают нихуя в разработке.

Лучше бы ты дал ему учебник опа и помогал решать задачу за задачей, повышая уровень сложности, если ты сам конечно чет понимаешь (судя по таблице такой же нубас с кашей в голове, который только через вакансии может примерно представить что там в реальности как устроено)
177 1606262
>>606259
Спасибо за мнение, но у меня все окей с головой. Если ты изучаешь с нуля, то: ты пишешь сначала PHP-код, потом подрубаешь веб-сервер и делаешь сайт на чистом PHP, потом ты берешь CMS, т.к. она ничего кроме этого не требует, а потом ты берешь фреймворк и оказывается, что там нужны паттерны, ORM, GIT и прочее блядство. Это по возрастающей.

Ты можешь, конечно, сразу взять фреймворк. И в душе не ебать, как веб-сервер переваривает твой URL, и сразу начать хуярить роутинг. Это полезно, как ты думаешь? Ну, чтобы специалист, насколько про PHP это можно сказать вообще, был всесторонне развит?

Кроме того, я не уверен, что есть вакансии а-ля WordPress Senior.

В общем, я не спорить сюда пришел. И не принес свою таблицу а-ля "смотрите, это лучшее, что есть в мире!". Я попросил помощи дополнить ее, не более того.
178 1606268
>>606252
микросервисная архитектура и многопоток в пыхе? чего блядь?
179 1606271
>>606258
Блок-схема удобней, позволяя как создавать связи, так и выделяя области: например выделяя из "разработки сайта" области "фронтэнд", "бэкэнд", которые в свою очередь можно разбить на ещё меньшие части, например "Server Page" и "база данных, в которых будут как параллельные,так и альтернативные пути.
180 1606272
>>606268
Я сам охуел, но я это видел в вакансиях на сеньера. С микросервисами еще понятно, но многопоток - это пушка. У самого большой стаж работы, но я собираюсь на днях пойти и почитать, что это за зверь. Видимо, имеется ввиду, когда тебе надо написать демона на PHP. Что на мой взгляд, уже пиздец.
181 1606274
>>606271
Да, согласен с тобой. Если сделаешь, будет годно. Мне лично лень. Мне надо просто примерно обозначить дорогу для нового джуна и всё.
182 1606278
>>606097
Не то что бы олд, но опыт есть.
Сижу на поддержке продукта болото с пыхой и жиквери, разработка идет со скоростью улитки.
Между тасками почитываю Чистый код и Чистую архитектуру, пилю пет на современном стеке, прохожу собесы.
183 1606280
>>606150
Чем тебе помочь?
Открываешь доку сдека и ебашишь.
По всем вопросам пишешь им в техподдержку, подробно описывая проблему.
184 1606281
>>606272
особенность пыхи, хуевая, что каждый скрипт выполняется в отдельном потоке, в той же жабе и тд в памяти поднимаются объекты, висят в ней, треды там чето делают, в пыхе не так, что то распараллелить это костылизм
если языки которые специально сделанные для многопотока или изоморфных приложений которые можно писать не садясь на раскаленный лом, но пыха это хуяк хуяк и в продакшен.
185 1606283
>>606281
Я даже спорить не берусь, я про многопоток в пыхе слышу первый раз в вакансии. Я про это что-то когда-то читал, но это было давно и там прямо писали - НЕ используете пыху для этого и НЕ используйте пыху для написания демонов, ибо она течет и вылетает без повода.

С джавой знаком, есть пара проектов на спринге, там вопросов нет, все эти атомики, валотайлы и синки, окей. Но, если хотя бы в одной вакансии встретилось требование многопотока в пыхе, надо это посмотреть, как минимум. В конце-концов, в пыхе, похоже, через пару лет будет строгая типизация (с кривой обратной совместимостью), так что почему бы и нет. Мы же тут не ленивые, да?.. :) Почитать никто не мешает, а на собесе можно и блеснуть знаниями, особенно на джуна.
186 1606284
>>606262
Пс, не хотел показаться уебком. Просто по факту за каждым вторым пунктом этой таблицы стоит огромное количество человеко часов, которые нужно потратить на изучение, и которые выльются ни во что. С таким планом я бы бросил изучение уже на третий день. Нужно принципы учить и подходы, а инструменты конкретные уже следом под конкретные задачи. Я понимаю хочется как-то систематизировать, что бы облегчить себе понимание опять же происходящего. Но пытаться охватить все - огромная ошибка.

Опять же призноки каши в голове: каким образом Codeigniter - это синьер скилл, если это во первых достаточно простой фреймворк, а во вторых устаревший на 5-10 лет инструмент? На нем сейчас вакансии будут либо только на поддержку, либо клепать по отработанной схеме инет-магазины какие-нибудь конвеерно.
Как у тебя установка пхп на линукс - это мидл-скилл, если это делается еще до начала работы? Ты либо ставишь себе линукс сразу и начинаешь на нем ковыряться и ставишь в первый же день LAMP стек по гайду и уже дальше начинаешь в этом разбираться и пердолиться до бесконечности, либо совсем не паришься и накатываешь себе на винду OpenServer и можешь хоть чередовать обучение/разработку со своей любимой докой-2.

Ты либо ныряешь в вордплесс/modx/joomla если это от тебя требуют по работе и остаешься там до того момента пока не одумаешься (навсегда, лол), либо сразу скипаешь это и учишь более интересные и продуманные вещи.

Битрикс - вообще либо ныряешь навсегда, либо не трогай - она_тебя_сожрет.webm
Ты либо работаешь полноценно на каком-нибудь фреймворке каждый день, и даже при этом и за год не запомнишь все его возможности, и будешь энивей постоянно гуглить документацию, либо не работаешь. Или в чем смысл этого всего вообще? Посмотреть часовой видосик по каждому пункту на ютубе?
187 1606289
>>606262

>потом ты берешь CMS


Этот этап спокойно пропускаешь, т.к. там нечему учиться в плане разработки.

>я не уверен, что есть вакансии а-ля WordPress Senior


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

Есть гораздо более адекватный роадмап по бекенду на английском, легко гуглится
188 1606291
>>606284

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

> Нужно принципы учить и подходы, а инструменты конкретные уже следом под конкретные задачи.



Понимаешь, я как бы с тобой согласен, а как бы и нет. Представь ситуацию: человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить? Если я ему сразу дам фреймворки, он нихуя не поймет, обделается и забьет.

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

> каким образом Codeigniter


> Как у тебя установка пхп на линукс - это мидл-скилл


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

> Ты либо ставишь себе линукс сразу


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

> Битрикс - вообще либо ныряешь навсегда, либо не трогай - она_тебя_сожрет.webm


Подписываюсь. Но вернись в реальность! Если берут только туда, где битрикс, неплохо бы его хоть немного знать.

> Или в чем смысл этого всего вообще? Посмотреть часовой видосик по каждому пункту на ютубе?


Отчасти хотя бы так. Смысл - не знать все на 146%, а пройти собес, показаться уверенным или хотя бы смышленым.
189 1606294
>>606289

> Этот этап спокойно пропускаешь, т.к. там нечему учиться в плане разработки.


Да, только вакансий - дохуя.

> Натянул верстку, накидал плагинов, настроил и готово.


Базару нет, только это не делает тебя хоть где-то сеньером.

> Есть гораздо более адекватный роадмап по бекенду на английском, легко гуглится


Слушай, не в службу, а в дружбу, принеси пожалуйста, я уже уехал и с телефона пишу.
190 1606303
>>606291
если

>цель: устроиться куда-то


То пилишь круд на yii/laravel/symfony и устраиваешься

>человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить?


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

>Ты не поверишь, в студиях до сих пор заливают сайты на хостинг через веб-морду ("файловый менеджер") этого же хостинга


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

>Если берут только туда, где битрикс, неплохо бы его хоть немного знать


А может не надо туда идти?

>Смысл - не знать все на 146%, а пройти собес, показаться уверенным или хотя бы смышленым


Для этого достаточно написать круд
191 1606309
>>606303
Бро, извини, я не буду больше с тобой спорить, мы смотрим с разных точек зрения.

> То пилишь круд на yii/laravel/symfony и устраиваешься


Это смотря куда. У меня были собесы, где я проходил сразу, а были, где меня внезапно ебали о том, как внутри устроен ассоциативный массив.

> От таких товарищей держаться максимально далеко.


Не согласен. Для первой работы - это опыт. И еще деньги.

В общем, если смена работы с грузчика на пхпшника это для тебя "не надо туда идти", то ты не забыл, насколько приятнее работать хотя бы за 30-40к в офисе, чем грузить говно в пятерке :)
192 1606313
>>606309
*то ты не забыл = то ты забыл
image.png1,2 Мб, 1250x1664
193 1606315
>>606294

>Да, только вакансий - дохуя


А вакансий кассиром еще больше. Но мы же хотим идти код писать и большой рубль получать?

>Базару нет, только это не делает тебя хоть где-то сеньером


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

роадмап прикрепил
194 1606317
>>606315
Так это не роадмап, это просто вилки, откуда и чего начинается. Приоритетов-то нет.

> А вакансий кассиром еще больше. Но мы же хотим идти код писать и большой рубль получать?


Опять же, если речь про первую работу, мое личное мнение - похуй чего и как они там делают. Нужна: а) зарплата, б) хоть какой-то продакшн опыт. Никто не мешает получить его и через полгода перейти куда-то еще.
195 1606319
>>606315
Заорал. Мне про Java понравилось. Там технологий больше, чем на всей этой картинке. Хуевая роадмапа, короче.
196 1606320
>>606309

>Это смотря куда. У меня были собесы, где я проходил сразу, а были, где меня внезапно ебали о том, как внутри устроен ассоциативный массив.



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

>Для первой работы - это опыт. И еще деньги


Опыт - возможно. Деньги - не такие большие для айти.
197 1606324
>>606315

>в адекватные сроки запилить проект с нуля


сеньором тебя делает возможность из туманных хотелок заказчика высрать решение его проблем, а на крупный продукт с нуля попасть это еще ой как повезти должно
198 1606326
>>606320
Повторюсь и пойду по своим делам уже наконец. Вопрос в получении первой работы. Любой. Для человека, который не знает вообще нихуя. Я всё еще считаю, что выучить WP проще, чем фреймворк, т.к. последний тянет за собой другие знания, на WP занимаются добавлением плагинов в wp-plugins. И это точно проще.
199 1606327
>>606326
А работа кассира еще проще
200 1606328
>>606327
Демагогия. Хорошего дня.
201 1606329
>>606315
Я вот после этой картинки и задумался, почему бы здесь не запилить что-то аналогичное для обучения.. Но она довольно кривая, как мне кажется.
202 1606330
>>606291

>Представь ситуацию: человек работает грузчиком в пятерочке, его заебало и он готов куда угодно, но только не так. И тут я такой на белом коне. Что ему посоветовать учить?


О, такие стори есть у меня. раз в полгода-год условный знакомый из 5-очки выходит на связь, спрашивает как растет моя карьера, спрашивает что нужно что бы вкатиться и сколько это займет. Говорю ему что усердных занятий в пару месяцев хватит что бы начать ходить по собеседованиям. Скидываю ему учебник ОП-а этоого треда. И говорю что бы решил для начала самую первую страницу (это 10-20минут) и потом подходил с вопросами дальше. И это не какая-то абстрактная таблица с неведомой хуетой, вот тебе френдли учебник для нуба, сриусли. Просто не ленись и прочитай 1 страницу и открой ideone мать твою!
...
Через пол года знакомый снова выходит на связь, снова рассказывает как его все заебало в его пятерочке и что готов на что угодно, спрашивает как растет моя карьера, спрашивает что нужно что бы вкатиться и сколько это займет...

>Что ему посоветовать учить? Если я ему сразу дам фреймворки, он нихуя не поймет, обделается и забьет.


Учебник ОП-а для начала, сириусли, это все равно лишь примитивы и без этого никуда. Это норм старт в любой ситуакции, хоть он у тебя попадет на разработку в яндекс, хоть станет modx-sinior. Это не требует наката линукса и все задачи включая Вектор можно сделать на ideone и подобных ресурсах между делом хоть с телефона - было бы желание. (я сам так делал 5 лет назад, что уж).

Зачем ты ебешь себе и другим мозг таблицей, которая не имеет никакого отношения к реальности?
203 1606339
>>606330

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



Как. Блядь. Знакомо. И этот, возможно, из этих. Я его учу уже не первый раз, к слову. Прошло уже полгода с начала "занятий", но он еще не написал свой первый тестовый класс. Я составил эту таблицу, отчасти, уже в отчаянии. Мол, вот, держи, учи вот это, сам, без меня, я сделал, что мог.

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


Я просто не ебу, что за учебник ОПа, я в этом треде в первый раз и последний год изучал Java вообще, а в PHP работаю лет 10, поэтому мне этот тред нахуй не нужен был и я тут пробегом. Ознакомлюсь, спасибо.

> Зачем ты ебешь себе и другим мозг таблицей, которая не имеет никакого отношения к реальности?


Ну опять же, на мой взгляд имеет, еще и какой. Я не хотел бы столкнуться с мидлом, которые пишет на фреймворке и не знает, что такое mod_rewrite.
204 1606348
>>606330
Учебник ОПа это вот эта хуйня? https://phpbooktest2.ga/
С кошко-девочками и изображениям?
205 1606353
>>606324

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


По нормальному этим лид или пм занимаются. Именно разработчику такой скилл только как бонусный идет.
>>606315

>Сеньером тебя делает способность в адекватные сроки запилить проект с нуля


Тоже нет. Хотя бы потому что адекватных сроков никто в сущности никогда не может заранее назвать. Кроме того условный эникей на вп может в еще более адекватные сроки вложиться. Будет ли он за счет этого хотя бы на уровне условного сеньора на симфе? Нет.
Помидор в первую очередь пишет качественный код в проект, который будет жить, процветать, легко улучшаться (другими сеньорами в идеале, но если мидлы и джунами изи справятся - ваще молодец) и этот код не будет обузой и кандидатом на выпиливание. Конечно так можно и целый проект с нуля запилить, но это будет частный случай. Все, кроме этого - бонусы, которые повышают ценность сеньора, но не являются основополагающими.
206 1606356
207 1606357
>>606356
Ок, спасибо, прикольно. Никогда этой хуйни не видел. Скину ему, спасибо.
208 1606360
>>606353

>легко улучшаться (другими сеньорами в идеале


если твой код может быть понятен только сеньорам, то это хуевый код, идеальный код такой что даже тетя зина прочитав учебник до половины могла его прочитать
image.png345 Кб, 941x863
209 1606366
>>606339

>Я не хотел бы столкнуться с мидлом, которые пишет на фреймворке и не знает, что такое mod_rewrite.



Ну столкнулся и че? У него мб не стояла за пару лет задача которая бы его в это окунула. Повезло пацану что он не пердолился с настройками htaccess и прочей хуетой которая как бы все равно лежит на уровень ниже пхп-программирования.

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

Зато вот возник прецедент и в этот момент он столкнулся - все, вопрос исчерпан и зошквар снят?
210 1606368
>>606366

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



Ну, кстати, может ты и прав, я утка и не понимаю этого.
211 1606376
>>606366
>>606368
Хотя, в свое оправдание, хотя сейчас на той же Java можно ебашить через спринг бут, но при этом понимание как работают сервлеты и томкат на собесах все равно просят. Зависит от собеса.
154118960709593.jpg103 Кб, 1242x1212
212 1606382
>>606360
Пилю ща некий конструктор апи, стараюсь сделать так, что когда меня уволят, то новое апи будет легко собрать даже джуну на которого это скинут. Все больше прохавываюсь в ООП, абстракциях и прочих тайпхинтах, загоняя потенциального дописывателя в такие рамки, что ему просто не в чем будет ошибиться.
Хуйнул не то не в том месте? Лови исключение с описанием того что ты сделал не так и где надо сделать. Доставляет этот процесс прям. Некая крупица творчества есть что ли в отличие от повседневных тасков даже.

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

>>606253

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


А если не скажут, то сам попросись обязательно. Откажут - ну ладно. Но если разрешат, то считай повезло. Главное не слейся, даже если нихуя не понимаешь, спрашивай и гугли. Затупил и нихуя не понятно - попроси совета. Даже если оче стыдно - главное не сливайся так что походил пару дней и исчез (с мыслью о том что недостоин и нужно еще подучить). Глядишь сойдешь за того самого мифического "с огнем в глазах" сотрудника, которого все мечтают к себе нанять на работу.
213 1606384
>>606376

>но при этом понимание как работают сервлеты и томкат на собесах все равно просят. Зависит от собеса.


Ребята, которые не понимают что нужно конкретно спросить для понимания, справится ли человек с конкретной текущей работой, спрашивают все что знают сами, что бы не нанять ни в коем случае спеца который будет сильно ниже навыком, ну или стандартную типовую хрень что бы вообще не париться? Ну что поделать. Мы люди - хули с нас взять.
214 1606390
>>606384
Ну, не совсем, это собес в одну крупную галеру, название которой я не скажу по понятным соображениям. Спрашивают это всех. Спрашивают еще и за софт-скиллы тоже.
215 1606393
>>606360
Ты похоже давно не видел ждунов и мидлов. Немыслимо тупят на всем, что сложнее решения в лоб. Из 10 только 1 сможет вообще вникнуть в любую абстракцию сложнее метода в классе, остальные 9 будут заниматься копипастом и даже пытаться вникать не станут. Это на словах и в резюме все красивые с кейвордами в плащах стоят, а на работе оказывается, что код то писать сучары не умеют. Даже когда от а до я решение расписываешь псевдокодом - типа опытные мидлы не могут это в код перенести. Пару раз так и на выход. Вот сегодня какой-то дед травил историю, что почти все пришедшие на собес мидла ларки не знают, как использовать форич. И это уровень макак с популярно фрейма, в целом по больнице получается даже хуже. Вся эта досеньорская толпа вайтишников - обсуживающий мусор, которым скидывается неинтересная и несложная работа. Щас бы ориентироваться на эти хилые умишки, чтоб они не обиделись. Когда кто-то из них начинает качественно расти - его вытягивают и получается еще один помидор, однако это очень редко.
А еще я написал про способность улучшить, а не просто прочитать. Могут даже не читать поидее, для пользователей моего кода всегда есть апихи. Те же, кто захочет развивать должны иметь для этого знания, а не только рабочее место.

>даже тетя зина прочитав учебник до половины могла его прочитать


Так ты и есть тетя зина, которая хочется чтобы сеньоры писали понятный ей код, потому что вторую половину какой-то брошюрки, названной учебником, осилить не можешь. О каких вообще может быть речь? Никакой книжонки, которая сделает из тебя даже джуна по прочтению не существует.
216 1606394
Вижу тут все-таки идет обсуждение работы, хотя когда-то ОП ругал за такое и гнал в перезвоните-тред, где сидят какие-то депрессивные аноны. Поэтому срошу здесь, я уже как год работаю в проекте на yii2, в основном поддержка, недавно я остался единственным разрабом, и я уже не могу видеть этот код, переписывать постоянно падающие модули, тут еще в компании обработка эксель-файлов очень интенсивная, и вместо веб-итеграций, идет какая-то эксель-интеграция. У меня переживание, а вдруг я совсем закопался, работая один, иногда я не могу даже строчку кода выдавить. Анон, как быть?
217 1606395
>>606393
обоссаной галерой запахло
218 1606397
>>606394
перегорел, иди ной шоб нанимали или сам уебывай
219 1606400
>>606397
Спасибо, анон. Думаю вместо или сделать и.
220 1606402
>>606262

>потом ты берешь CMS, т.к. она ничего кроме этого не требует,


Это пиздец какое сильное заблуждение. Любая CMS обладает собственной логикой (часто очень порочной), собственной структурой (часто неудачной) и собственными подходами к разработке (часто плохими). Для того, что бы успешно работать в рамках CMS нужно хорошо её знать.

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

Сам я считаю себя достаточно продвинутым специалистом в не к ночи будет помянут Битриксе. Только в последние 2 года удалось с него немножко слезть. Так вот, для того, что бы совладать с этим говном мне потребовалась херова туча знаний и размышлений. И половина постов о хейте Битры в этом треде - моя. В отличие от хабрапидоров, которые не уважают его в стиле стереотипов, я ненавижу его потому что я с ним работал. Я не могу сказать, что 3 года битры были временем, спущенным в унитаз, но я определенно мог бы их потратить более продуктивно.
221 1606407
>>606315
устаревший пик.
джанга сейчас асинхронной стала
дальше не смотрел
222 1606408
>>606402

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



На первыйз вгляд все верно. Но оказывается, что CMS все же проще и устроиться на работу с ней проще тоже, в отличие от.
223 1606410
>>606395
Читал что это норма. Когда на галере под видом мидлов работают джуны, а под видом синьоров - едва ли мидлы. Тут уже продажники пытаются наебать клиента, пытаясь впарить спеца классом ниже за больше бабок. Не нужно людей за это ненавидеть. Они то и рады что их взяли куда-то "синьорами-помидорами", лол.
224 1606411
>>606410

>Читал что это норма. Когда на галере под видом мидлов работают джуны, а под видом синьоров - едва ли мидлы


да так и есть, на сеньорах маржа выше, отсюда и берутся 21 летние тимлиды-сеньоры.
хотя по факту то они откровенно не тянут.
225 1606421
>>606410
Это не имеет отношения к набору, дружище. Не важно, что говорят заказчику, набирать могут по совсем другим принципам и из сеньеров делать pm'ов, например. Короче, мимо.
226 1606430
>>606394
Меняй галеру.
А то так выгоришь и выпадешь из индустрии.
Сидеть на поддержке легаси - болото
227 1606432
>>606407
Да, взял устаревший, т.к. в новых какая-то обобщенная несуразица
228 1606450
>>606421

>из сеньеров делать pm'ов


разработка и менеджмент вещи разные, многие с возрастом просто туда уходят, ибо заебало писать код, нельзя делать пма из человека с херовыми софт скилами.
229 1606451
>>606450
Само собой. Кто ж спорит. Ты как будто что-то новое сейчас говоришь.
230 1606454
>>606451
ты так сказал как будто пм следующая ступень сеньора, как мидл джуна, это вообще другая ветка.
231 1606472
Все так любят названия джун, мидл, синьер. Но ни одна хуила так и не может привести пример задач, которые решает тот же мидл или синьер. Такая градация если и есть, то только внутри компании
232 1606483
>>606472
Все просто!
Помидор ходит по офису с кружкой кофе/стаканом смузи, флиртует с хрюшами, скидывает задачи на паровозов в ИТ компаниях(мидлов).

Мидл хуярит сутками по клавишам, метается между желанием сдохнуть и посрать.

Ждун просто как маленький щенок бегает по офису и гавкает "ООП хуйня, давайте писать в функциональщине" за что получает леща и идет на свое место до нового прихода гениальных идей в его голову, опционально пишет Хелло ворлд, забирает остатки пиццы с обеда домой.
233 1606512
>>606430
Да, снова выхожу на тропу поиска себя.
234 1606515
>>606512
Мимо тем же занимаюсь.
Уже заебало поддерживать продукт месиво из говна
235 1606540
В свое время начинал задрачивать питон, потом бросил, но получил предсталение. Еще пощупал джанго, посмотрел пару уроков на ютабе. Вроде ничего сложного. Но еще тогда все советовали пыху изучать и яву. И еще в би кидали пасту про питон и кучу бабла. Так вот, снова хочу вкатиться, но для себя, хотя хз, мб и найду РАБоту, а мб буду кворки делать. Кароч. питон или пыха все таки. А в чем суть реквеста еще. На пыхе делают генераторы сайтов, те можно создавать кучу сайтов по шаблонам. Можно что-то делать подобное на питоне. Или лучше делать на пыхе все таки? Ну и попутно, да, что задрачивать лучше.
236 1606543
>>606483

>ООП хуйня


ну да
237 1606545
>>606540
это разные языки
238 1606546
>>606545
Да, там синтаксис разный. Но суть то одна. Как по мне, пыха ближе к си, визуально. Питон позиционируют проще, хз. Ну нарпимер, на питоне можно написать генератор сайта, или что-то подобное. Ну типо доргена в народе.
239 1606574
Написали с одной конторы, условия устроили. Сегодня звонила эйчарка, побеседовали. Спросила про семейное положение, сказала, что они собирают команду и надо пройти психологические тесты, которые она вышлет на почту. Только после них пригласят или не пригласят на собес. Это норма?
240 1606579
>>606574
ну пройди
241 1606580
>>606546
для того чтобы сайтики на питоне писать тебе надо сначала его освоить, а затем уже фреймворке
пыха же была спроектирована таким образом чтобы сразу сайтики писать
тебе решать
242 1606581
>>606402

>Любая CMS обладает собственной логикой (часто очень порочной), собственной структурой (часто неудачной) и собственными подходами к разработке (часто плохими)


двачую адеквата. сам щас работаю со всякими cms и понимаю что если ты джун и многих вещей не знаешь - то эта хуйня привьет тебе неправильные практики. например логику в модели прописывать, как это в опенкарте сделано)))
243 1606582
>>606579
Там три теста на 120 вопросов. Первый прошел, он показал, что я забитый омеган. Мне как-то стыдно это эйчарке слать, она же результаты попросила.
244 1606583
>>606574

> Спросила про семейное положение,


Потому что если семья и дети есть - ты не дропнешь работу, как свободный человек.
Если тебя спросят, кем ты видишь себя через 5 лет - помни, крайне важно видеть себя в той же самой конторе, просто на должности повыше.
245 1606584
>>606583

>Если тебя спросят, кем ты видишь себя через 5 лет


А она спросила) Я ответил, что съебу в машоб из этого вашего веба, как только наберу достаточно знаний))
246 1606586
>>606582

> Первый прошел, он показал, что я забитый омеган


Интересно насколько это распространено среди айтишников.

> Мне как-то стыдно это эйчарке слать, она же результаты попросила.


Ты ведь в итоге можешь получить работу - отправляй. Может она команду омеганов наберёт и будет комфортно работать с ними, в отличие от нормисов.
247 1606589
>>606584
Ууу, всё. Не перезвонят. Я так с собеса вылетел.
image.png274 Кб, 604x604
248 1606591
>>606574
пиздец эти хрюши совсем поехали. а случайно аккаунты на все свои соц сеточки не попросили скинуть? ну чтобы проверить насколько ты адекват. заходят - а там в подписках раковники, на стене пасты про говно, и вот это на аватарке. многие ебнутые галеры так делают, только без твоего ведома
а если закроешь профиль - то сразу все пок пок закрытый человек нам такой нинужон
249 1606593
>>606584
дата сатанист ты думаешь там ии, хуй там ночевал будешь улучшать таргетированную рекламу.
250 1606595
>>606591
Она сама вроде адекватной женщиной показалась, а тесты - приказ начальства, якобы.
251 1606596
>>606593
за 300кк/нс чо бы и не поулучшать.
252 1606597
>>606591
А уж если профиль открытый, но пустой...
253 1606601
>>606586
Первый тест
https://onlinetestpad.com/ru/testview/801-mnogofaktornyj-lichnostnyj-oprosnik-fpi

Вторые два в виде экзешников для винды, а у меня линух стоит. Придется виртуалку накатывать ептыть.
254 1606603
>>606596
за 300 хуев я б сказал, еще найди давай.
255 1606606
>>606603
У меня знакомый работает в стартапе. Они там привлекали сатаниста за 200к в месяц на три месяца работы, и то этот хуй еще и совмещал (на основной работе у него примерно такой же ценник был).
256 1606610
>>606606
я к тому шо каждый пиздонист, а их дохера, хочет в дата сатанисты.
257 1606614
>>606601
тест за 2012 год
мда
258 1606618
>>606610
похапешников гораздо больше и чо
259 1606621
>>606614
опросники это не фронтенд они не меняется так быстро
260 1606624
>>606618
в очо епт, натягивать вротпресс и машобить это дохера разные вещи
261 1606625
>>606621
меня сам факт их наличия смущает, и что это приказ начальства. То есть есть некоторые сомнения в адекватности этих людей.
262 1606630
>>606601
Проходил подобный, только на 300+ вопросов, у психотерапевта. Получился депрессивным шизоидом, склонным к депрессии дополнительно.
>>606614

> за 2012 год


Mmpi с прошлого века используется и остаётся актуальным. Люди же те же.
263 1606665
>>606630

>Люди же те же.


нееееет погромисты сверхлюди у них на одну хромосому больше
264 1606691
>>606625
я тебе говорил с самого начала
>>606621
дристанул чет

аноны, сейчас в шаблоне на проекте внезапно наткнулся на такой синтаксис:
<% _.each (model.addresses, function(address) { %>
<%= address.city %>
что это за хуйня и как с ней вообще работать то ? на твиг обработчик это непохоже

>>606591 - кун
265 1606692
>>606540

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


Чем тебе Django не подходит?
266 1607030
>>606252
Хуета какая то бро
267 1607043
>>606252
Получается пхп программист должен включать в себя фронтендера? Вроде есть вакансии, где чисто фронтенд требуют и пхп не нужно.
268 1607058
>>607043
может, а может нет
269 1607093
Аноны, с пхп на питон/руби/джаву/go не тяжело же перекатиться? Ибо судя по "вступлениям в язык", которые я на хабре читаю - все одно и то же, только синтаксис языка разный. Или я хуйню какую то читаю, или что?
270 1607221
>>604256

>вы немного знаете пхп и отличаете бэк от фронта? Го к нам на 20к стажёром



Очевидно же что наебочка и тебе вообще не заплатят, а под "немного знаете" подразумеваются вполне себе знания вкатывальщика
271 1607222
>>607043
Фулстеку больше платят. И на пхп мало вакансий, где нужен только пхп.
272 1607229
Шалом, такой вопрос, часто в вакансих вижу язык Go(да и на собесе последнем про него спросили), кто знает зачем пыхеру нужен GO?
273 1607231
>>607093
писал на жабе больше года, за три дня вкатился в пыху(тип мог накидать сайт и тд), нормально-читабельный код писать начал через 3-4 недели

Все языки похожи(тип паттерны, алгоритмы, ООП, многопоточку ты не изменишь), просто на чем то проще писать под какую то задачу
274 1607238
>>607222
Чем тот же пхп отличается от питона или руби? Или в этой нише как таковой больше востребованы фуллстеки?
275 1607244
>>607238
Да фулстек - это всегда плюс. Но пхп-то изначально был заменой перла, чтобы делать сайтики быстрее. Ключевое слово - сайтики. Там html/css по дефолту знать нужно было. А в наше время это react/vue. Ну и один хер, дешевле нанять макаку, которая и то и то может за +40% к зарплате, чем двух чуваков на x2 денег.
276 1607246
>>607231

>Все языки похожи


если похожа парадигма и синтаксис, дай тебе лисп или эрланг и ты утонешь в нем
277 1607251
>>607231
Нахуй ты из жабы вкатился в пыху, ебанутый? Я пытаюсь наоборот выкатиться нахуй из пыхи, она просто днище.
278 1607252
>>607093
>>607246
Да, скорее всего так. Не могу рассуждать в этом направление(с одной парадигмы на другую), возможно проблема синтаксиса встанет не так остро(тип за недельку разгребешь), прост все языки на которых я писал были функциональный, процедурные или ооп
279 1607256
>>607251
Лоооол, сидишь-пердишь в универе на парах, ждешь чтобы заказчик кость бросил(я помнб тогда вообще за любые деньги работал, тип кому нужна жаба на фрилансе), все друзья писали на пыхе, тип заказов жопой жуй, ща вот второй год сижу на пыхе, с работой вообще проблем нет
280 1607257
>>607251
кст, мой путь был скорее похож на деградацию
C + asm вставки для AVR8
Потом с++(qt)
Java => android
Пыхы + js
281 1607258
>>607256

> сидишь-пердишь в универе на парах


А, ну тогда понятно, больше вопросов нет.
282 1607259
>>607257
Ставлю свой носок, что ты ничего из этого глубоко не выучил, ни на одной серьезной должности с этим не работал, поэтому и жалеть не о чем.
283 1607262
>>607257
Примерно так же было. Только андроид после пхп на годик поработал, а до пыхи на шарпе. Плюс питон и го недавно добавились.
284 1607263
>>607259
с асм и микроконтроллерами просто поигрался
с++ чисто чтобы комп и контроллер связать
жаба для работы(пару заказов), но язык я старался понять как можно глубже, а не просто кодить
пыха - здесь дольше всего

так что, на нормальном уровне только пыха и малеха жаба, но все равно полезный опыт, тип понимание во что превращается код и как он выглядит после компиляции(asm), тип жаба дала основательное понимание ооп, а на пыхе патерны и уже нормальная разработка
285 1607264
>>607262
Я там пару постов назад про го спрашивал, так зачем он нужен пыхеру?
286 1607265
>>607263
Ну нормич, в принципе. У меня, на самом деле такой же путь примерно, от C++ в школе до PHP сейчас плачет

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

Особенный разрыв у меня вызывают паттерны в php. Вот нахуя они там, если пхп выполнился и умер? Я на нем давным давно пишу и до сих пор не понимаю, нахуя их знать? СИНГЛТОН в пыхе, блядь, ну серьезно? Какая разница? Если бы это было c/java/c# приложение, которое висит в памяти, то там и правда нужен синглтон. А тут синглтон получается из любого класса просто потому, что пхп завершается после выполнения задачи.

Короче, ладно, чото меня понесло на ночь глядя, пойду спать.
287 1607266
>>607265
НУ смари, чисто что сейчас смог вспомнить

Всегда использую фабрику в API, всегда юзаю команду для js(если в целом о веб), и вот не знаю можно ли назвать реализацию одного статик метода синголтоном
288 1607268
>>607264
Не видел, искать не стану.
Не обязательно пыхеру, вообще бекендеру пригодится. Микросервисами на нем можно с легкостью закрывать узкие места, требовательные к производительности. Если микросервис простой планируется, то можно даже не выбирать особо, а сразу писать на го сейчас, не прогадаешь.
Заметная вещь для пхп - roadrunner. Возможная замена php-fpm, хотя на данном этапе многим пхпшникам работать с ним тяжело и непривычно(но многие пытаются), как дело с ним дальше пойдет посмотрим.
Я и роадраннер юзаю и микросервисы на го попиливаю.
Далее лирика.
Некоторые компании сейчас решаются полностью переходить с пхп на го. Правда как по мне это преждевременный шаг, но мир мое мнение не изменит. Перекат опытного пхпшника на го происходит прямо с места, язык очень прост, поэтому это вероятный вариант, куда тебя жизнь и мода заведет в дальнейшем по беку. Даже сейчас в го каждый третий наверное перекатился с пхп.
289 1607269
>>607268
Оке, спасибо, опять двач выручает
290 1607270
>>607266

> Всегда использую фабрику в API


> всегда юзаю команду для js(если в целом о веб)


Чего?

> и вот не знаю можно ли назвать реализацию одного статик метода синголтоном


При чем тут вообще один статик метод и синглтон? Что за шизу ты написал?)))000
291 1607273
>>607266

> команду


А, блядь, я наркоман, я сначала подумал, что ты про какую-то консольную команду (npm start, блядь, какой-нибудь). Но при чем тут АПИ и фабрика - так и осталось загадкой.
292 1607274
>>607270
Последнее это попытка пошутить, сори(
-------------
Про команду, это тип когда ты навешиваешь он-действие и потом разбираешь с чего оно прошло(самый банальный пример)

Команда — это поведенческий паттерн проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы при вызове методов, ставить запросы в очередь, логировать их, а также поддерживать отмену операций.

-------------

Фабрика в апи, тип пришло что то на вход, ты определил что и создал тот или иной класс, а методы одни и тежи вызываешь ти

Фабричный метод — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
293 1607276
>>607273
ахахха, в такой голос с npm start
294 1607277
>>607266
он тебе рассказывает что любая операция в пыхе идет как отдельный тред и падает а ты ему про апи
295 1607278
>>607274
А, я понял о чем ты, окей, сорри. Уже пол второго, в глаза ебусь. А нахуй тебе создавать тот или иной класс в зависимости от того, что пришло из апи?
296 1607279
>>607277
мб я что то не оч понимаю, то просьба пояснить, но когда у тебя идешь лапша из вызовов классов, то патерны нужны для больше читаемости, я так предпологал
297 1607280
>>607277
Этот прав. Хотя хуй с ним уже, под утро я уже сам теряю нить своего же разговора.
298 1607282
>>607279
Ну что-то вроде того, мои стенания были скорее о том, нахуя некоторые паттерны именно в пхп. Они там (для меня) выглядят как кобыле пятая нога.
299 1607283
>>607278
ну тип я помню делал такие конструкции,пришел запрос в гет параметре у тебя название метода(тип спарсить что то или еще что), ты вызвал класс который нужно(исходя из гет запроса, например через switch вызвал нужный класс), а потом с ним идут операции типовые
300 1607285
>>607279
>>607277
Я вот еще одну штуку не понимаю, например, прямо наболело. На кой хуй нужен принцип Барбары Лисков, если в наше время уже есть юнит-тестирование (и вообще тестирование)? Ну нахуя он, ну нахуя, блядь?.. Короче, ладно.
301 1607286
>>607279
это особенность рантайма пыхи, там нет тредов выполнения как в жабе, скрипт выполнился и умер, потом встал новый и умер и дальше, потому нет и многопотока толком.
302 1607287
>>607283
Это какая-то конкретная задача, видимо, может там так и удобнее, не знаю, короче. У меня ощущение, что мы не про фабрику, а про банальный полиморфизм.
303 1607289
>>607278

свитч (getParm )

case getParam:
$a = new Что-то
case getParam:
$a = new Что-то
case getParam:
$a = new Что-то

$a->getName();
$a->getAge();

echo все говно

Если очень приземлено или мб я даун и назвал это фабрикой
304 1607290
>>607289
НУ понятно классы разные
305 1607294
>>607285
Хах, надо чаще на двач заходить, сразу пропадает ощущение что ты что-то знаешь в проге
306 1607295
>>607289
Эээ, нет, это не фабрика, ты просто свичем создаешь. Мог бы и ифами, мог бы и иначе, это не делает такой код фабрикой.
307 1607296
>>607294
Я скоро свалю из треда и опять будете разбираться какой фреймворк лучше и как запустить PHP, не переживай, хахаха
308 1607298
>>607289
Дополню >>607295
Вот тебе пример фабрики на пыхе, найди пять отличий, как говорится )

<?php
interface 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 products
foreach ($creators as $creator) {
$products[] = $creator->FactoryMethod()->getName();
}

header("content-type:text/plain");
echo var_export($products);
308 1607298
>>607289
Дополню >>607295
Вот тебе пример фабрики на пыхе, найди пять отличий, как говорится )

<?php
interface 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 products
foreach ($creators as $creator) {
$products[] = $creator->FactoryMethod()->getName();
}

header("content-type:text/plain");
echo var_export($products);
309 1607299
>>607295
да, ты прав, ща погугли фабрику, че то я пургу нес
310 1607300
>>607296
разве не Symfony?
311 1607301
>>607298
Ну и за методы с заглавной буквы и не отвечающие требованию "это должен быть глагол", надо убивать нахуй, конечно. Как этот код пролез в Вики, блядь, вообще...
312 1607302
>>607300
Ваще похуй, как по мне, всё говно.
313 1607303
>>607299
Ты еще почитай, например, когда лучше применять билдер, а не конструктор. Ну, в общем, тебя ждет большой удивительный мир, и это хорошо )
314 1607304
>>607294
есть такое easy to learn hard to master сам столкнулся с ним когда начинал жабу, базовый язык простой как три копейки, но из-за огромного стека фреймворков багаж необходимого пухнет как баул на рынке в 90х, так и с обратным принципом когда начал жевать кложуру, ебать как это так код в виде аст дерева, как писать код и не писать мегатонну хуеты к нему, почему обход одной функцией, это дробило мне мозг а потом пришло просветление.
315 1607305
>>607303
хах, с другой стороны, мы на пыхе, кому здесь нужны наши патеры, ахах?
316 1607307
>>607305
Здесь - никому, а на собесах нужны :) Да и вообще, чем больше знаешь, тем лучше ты можешь писать код, независимо от языка. Я когда про паттерны лихо заявил а-ля "нинужна!", я только синглтон имел ввиду. Я бы еще несколько разных туда же в "нинужна!" приписал (обсервер, например, в пыхе он смотрится СТРАННОВАТО), но в целом паттерны - это хорошо.
317 1607308
>>607304
а вот честно, я так что задумываюсь о последних проектах, чистоте кода, патернах, чаще всего я вижу это тяп ляп и в продакшн(тип во многих компаниях), один чувак сказал, что пока ты тут будешь правильную архитектуру мутить, конкурент уже приложение состряпает и поэтому все пишут говнокод, так что у меня двоякое чувство про изчение этого всего, может только если для души...
318 1607309
>>607304
Да там и саму джавку можно учить годами, похоже. Я хотел пройти тесты OCA/OCP (оракловские сертификаты на знание джавы). От функциональщины у меня мозг просто сломался и вытек. Я ее дрочил-дрочил, все эти би-консьюмеры, сапплаеры, стримы и прочее дерьмо. А когда решил пройти демо-тест (не настоящий даже!), то я чуть не заплакал - я просто _не могу_ понять, что будет в результате выполнения запутанного функционального кода, просто, сука, НЕ МОГУ.
319 1607310
>>607308
Угу. А когда твой конкурент через год сделает продукт лучше и работающий правильнее, то ты будешь локти кусать, т.к. ты свой говно-код уже поправить не сможешь никак, не начав писать с нуля. Почитай про проекты, которые от этого загнулись. ВНЕЗАПНО, например, официальный клиент ICQ. И у меня есть серьезные подозрения, что многие проекты мелко-мягких испытывают эти проблемы прямо сейчас, например.
320 1607311
>>607309
в жабе куча теор. говна, я когда к собесу готовился, я думал захлебнусь от всего этого,
>>607310
мнение не мое, а чувака на которого работал, я так понял он про то, что главное пораньше запуститься, а тип дальше хоть потоп
321 1607312
>>607308
дело даже не чистоте, дело в костылях, многословности, я накладываю эти слои абстракции, а потом я увидел что есть что то где нет этих фабрик которые делают фабрики, писать приятно.
>>607309
это даже не функциональщина, это огрызки
многопоток в мутабельном языке это боль, изоморфное приложение это как сесть на раскаленный лом.
322 1607313
>>607311

>в жабе куча теор. говна


устаревшего теор говна, обратная совместимость же
323 1607314
>>607308
У меня есть просто охуенная история по этому поводу, кстати. Прямо вот из первых рук. Напишу и пойду спать все-таки.

Короче, года два назад устроился в одну контору. Они там мутили супер-мега-saas-приложение на пыхе в стиле "нам надо сделать это очень быстро и в продакшн", не буду раскрывать подробностей, травлядианон. Так вот. Мне дали двух джунов, задачи и сроки, сказали - ебош.

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

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

Мне сказали, что это долго-дорого, а значит нинужно. И вместо этого выкатили еще кучу всяких новых фич в разработку.

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

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

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

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

Наверняка, я как тимлид тоже накосячил много, но я хотя бы понимал, к чему все идет. Но позиция руководства а-ля "это же всего лишь ПХП, вы ПРОСТО пишите код и ПРОСТО добавляйте еще тонну функционала со сроками позавчера" меня убила, никогда такого не видел.
323 1607314
>>607308
У меня есть просто охуенная история по этому поводу, кстати. Прямо вот из первых рук. Напишу и пойду спать все-таки.

Короче, года два назад устроился в одну контору. Они там мутили супер-мега-saas-приложение на пыхе в стиле "нам надо сделать это очень быстро и в продакшн", не буду раскрывать подробностей, травлядианон. Так вот. Мне дали двух джунов, задачи и сроки, сказали - ебош.

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

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

Мне сказали, что это долго-дорого, а значит нинужно. И вместо этого выкатили еще кучу всяких новых фич в разработку.

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

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

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

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

Наверняка, я как тимлид тоже накосячил много, но я хотя бы понимал, к чему все идет. Но позиция руководства а-ля "это же всего лишь ПХП, вы ПРОСТО пишите код и ПРОСТО добавляйте еще тонну функционала со сроками позавчера" меня убила, никогда такого не видел.
324 1607316
>>607312

> это даже не функциональщина, это огрызки


Ну я кроме джавы и пыхи ничего толком не знаю, на си - только баловался. Функциональщину в джаву подвезли по принципу "чтоб было как у всех", насколько я помню.

> изоморфное приложение


Я сейчас загуглил, пишут, что это приложение, когда сервер может рендерить фронт. Чо? Пояснишь?
325 1607317
>>607316

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



ХАХХАХА, такая жиза
326 1607318
>>607312

> мутабельном языке


И вот это поясни, пожалуйста. Я понимаю, что такое мутабельный-иммутабельный объект, например, в концепциях того же String/StringBuilder в джавке, но что такое ЯЗЫК?
327 1607319
>>607316

>Чо? Пояснишь?


просто пример есть некий тяжелый сервис, скриптов много и ты видишь какую нибудь крутилку при загрузке, изоморфное при первом запуске делает это на сервере и отсылает браузеру, который в это время фоново поднимает скрипты и нет лага при запуске, когда страница открылась а скрипты нет.
328 1607321
>>607319
То есть мы говорим про обычный Server Side Rendering? А почему это называется таким умным словом "изоморфное"?
bvb.JPG17 Кб, 361x219
329 1607322
>>607321
потому что дальше оно работает на клиенте как обычное приложение и на сервере и на клиенте.
>>607318
я создал список 1 2 3 добавил к нему 4, список не изменился, а функция конж вернула новый список, не меняя старый.
330 1607324
>>607321
>>607321
Выдержка с хабра

В 2011 году Чарли Роббинс сформулировал это так, что под изоморфным мы подразумеваем тот код, в котором каждая взятая строка может исполнятся как на сервере, так и на клиенте. С небольшими исключениями.

Выглядит это все так, что у нас есть браузер, есть фронтенд-сервер (выделяется отдельно), и есть старый привычный бэкенд-сервер. Это может быть даже база данных без какого-то сервера. Браузер обращается к фронтенд-серверу, тот может обратиться за данными куда-то к старому серверу либо к базе данных, получить данные.

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

И в конце отдать JS bundle. В этот момент у нас будет собран на клиентской части и поднят фронтенд-клиент, который в свою очередь дальнейшую коммуникацию может осуществлять с бэкенд-сервером предыдущим, допустим, через RESTful API.
331 1607325
>>606303
Что такое круд? НЕ в первый раз слышу
332 1607326
>>607325
create read update delete
333 1607331
>>607324
Я может совсем отупел, но

> котором каждая взятая строка может исполнятся как на сервере, так и на клиенте.



Что это за хуйня. Если буквально, то весь код должен быть написан на JS и бекенд на ноде, блядь? Или я отупел все таки.
334 1607332
>>607322

> я создал список 1 2 3 добавил к нему 4, список не изменился, а функция конж вернула новый список, не меняя старый.



Ты хочешь сказать, что есть языки, где все объекты иммутабельные или что?.. Я ничего кроме пыхи и джавки не знаю, там ты можешь кодить как хочешь в этом отношении.
335 1607333
>>607331
тут с картинками https://habr.com/ru/company/oleg-bunin/blog/319038/

Слухайте, мб кто шарит, а какие есть еще подходы для HighLoad?

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

Есть пара мыслей про очереди или Round robin DNS(тима зеленая так что накидывайте даже что то очевидное, мб мы этого не знаем)
336 1607334
>>607331

>JS и бекенд на ноде


нуб трапа
337 1607335
>>607333

> 10к запросов в день


С каких пор это хайлоад?
338 1607337
>>607334
Ну я, может быть, по дефолту беру в качестве клиента - браузер. Мы же в пхп треде. В чем подвох, объясняй давай, я спать хочу )))000
339 1607338
>>607333

>10к запросов в день.


Это очень мало. Даже в минуту это не много. Разве что у вас на каждый запрос выполняется какой-то тяжелейший пиздец.
340 1607339
>>607335
простите за название, для серваков за 160р это хайлоад
341 1607340
>>607332
да все объекты иммутабельны, они не меняются, если х = 5 то оно и будет 5, а если ты ниже напишешь что х = 6 то оно просто затрёт предыдущее а не поменяет.
342 1607341
>>607340
Забавно. Надо посмотреть это будет. А нахуй они так сделали, им память не жалко или что?
343 1607342
>>607338
по запросу идет поиск по карте, довольно тяжелый, около секунды ответа

то есть, забить, и написать обычный код особо не парясь(сказать купите сервера по мощнее)?
344 1607343
>>607339

> для серваков за 160р это хайлоад


В смысле, блядь? Хайлоад - это хайлоад. Говно-сервер - это говно-сервер.
345 1607344
>>607343
не особо шарю, думал что highLoad это просто высокая нагрузка на сервер

на сайтах обычно написано что-то вроде
Если Ваш сайт не справляется с нагрузкой — все, теперь Вы в клубе highload.
346 1607345
>>607344
Нууу... Слушай, ну да, хайлоад - это высокая нагрузка. Только обычно это что-то в духе "100 миллионов обращений в сутки", а не 10к. И речь там идет о том обычно, когда просто добавляя железо (нормальные сервера, а не говно-виртуалки) ты не можешь решить проблему какого-нибудь "узкого места" в своем говнокоде.
347 1607346
>>607341
у тебе данные еще ни разу не перемалывало просто
348 1607348
>>607346
Я не понимаю что ты пишешь, постоянно приходится переспрашивать.
yPSkXrhjstk.jpg31 Кб, 400x400
349 1607349
>>607345
оке, спс за инфу
zrwxqL7.jpg6 Кб, 236x236
350 1607350
>>607349
Да, блядь, даже сказать нечего. Что такое нахуй "перемалывало" данные? В мясорубке или что? Ты наркоман, дружище, или пьян или чего?
351 1607351
>>607349
Ой, не туда, сорре.
Это сюда:
>>607346
>>607350
352 1607352
>>607345
слухай, а можешь просто терминов накидать из области распределения нагрузок(или статью или просто наводочку какую-то), ну тип у меня есть 5 дедиков, как между ними распределить нагрузку например?
353 1607353
>>607352
Извини, я в этом не разбираюсь. Самый сильный проект, над которым довелось работать, это новостной сайт с 2 миллионами посещений в сутки. И там он спокойно работал на одном (но производительном) физическом сервере вместе с базой данных даже, просто всякие кеширования в nginx были настроены правильно и всё. Мне даже рассказать нечего особо про этот проект, сложных запросов даже не было (select where, update where, пара джоинов, нечего оптимизировать, короче).
354 1607354
>>607352
Алсо, сейчас работаю над проектом, где как раз около 10к посещений в сутки, он вообще на виртуалке крутится и не пердит, всё окей, хотя накручено там будь здоров (и должно бы уже тужиться, но нет). Так что я хуй знает. Если что найдешь - кидай в тредю.
355 1607356
>>607350
пишешь ты дурачек распаралливание и тебе нужно колдовать с приоритетом, потоки нужно синхронизировать, данные надо копировать, какие волатилы какие нет, в мутабельности если наебешься они начнут давать кашу и ты будет копать как джамшут ища где ты объебался.
в иммутабельности у тебя вообще нет эти проблем, ни одной блядь, ты просто настраиваешь ссылочные типы, для больших систем или атомы если много не надо и все блядь, и не парится что какой то поток изменит переменную не так или не вовремя и все остальные потоки получат хуйню.
356 1607357
>>607353
Я стараюсь что то читать, смотерть по этой теме, но реально не работал пока, вот что слышал

Round robin DNS - тип разные выдавать ip адреса
Совать в очередь и оттуда забирать как только обработал и так контролить потоки

Еще про БД - про ноды и репликации

Просто тема интересная и я уверен пригодится, я так то зеленый, тупо третий год на фрилансе сижу какие то конченные проекты выполняю
357 1607360
>>607356
А, ну примерно понял, ок.
358 1607361
>>607357
Мы может о разном...

> Round robin DNS - тип разные выдавать ip адреса


А при чем тут хайлоад? Это ж обычный cdn, если я правильно понял.

> Совать в очередь и оттуда забирать как только обработал и так контролить потоки


И какая разница, если у тебя эта очередь под нагрузкой забьется и последний вставший будет ждать 10 лет?
А так да, тема хорошая, изучай.
359 1607362
>>607361
хых, материала и направления бы кто подкинул

>А так да, тема хорошая, изучай.



Round robin DNS - я так понял, у тебя 3 дедика, а с dns сервера ты просто выдаешь их последовательно, тем самым распределяю нагрузку

CDN просто статику выплевывает по примеру какой нить jquery библиотеки
360 1607364
>>607362

> Round robin DNS - я так понял, у тебя 3 дедика, а с dns сервера ты просто выдаешь их последовательно, тем самым распределяю нагрузку



А, ок. Мне это известно как "балансирующий сервер" или балансер или типа того. Теперь понял, о чем ты. Да, это хайлоад, базару нет.

В общем, чтобы ты совсем обиженный не ушел, загуглил за тебя. Попробуй поискать лекции с этих конф: https://www.highload.ru/
361 1607365
>>607364
>>607362

> а с dns сервера


Разница между нами, кстати, в том, что я читал о другой схеме: днс всегда указывает на один сервер, твой. Но уже он следит за нагрузкой и вызывает самый менее нагруженный дедик, где уже реально находится бекенд. Что-то вроде прокси-который-следит-за-нагрузкой. Как организовать - в душе не ебу, только читал.
362 1607367
>>607364
хах, так это я оттуда это и услышал, там чуваки могут 2 часа тереть что сфинкс лучше эластика, или лекция по снижению нагрузки где чувак очевидные вещи час затирает(по типу не пиши 2 вложенных цикла без необходимости), так что это тоже не панацея от незнания в области хайлоад
363 1607368
>>607365
а ты не больше времени потеряешь на доставку пакетов, вики вот что говорит:
В простейшем случае Round robin DNS работает, отвечая на запросы не только одним IP-адресом, а списком из нескольких адресов серверов, предоставляющих идентичный сервис. Порядок, в котором возвращаются IP-адреса из списка, основан на алгоритме round-robin. С каждым ответом последовательность ip-адресов меняется. Как правило, простые клиенты пытаются устанавливать соединения с первым адресом из списка, таким образом разным клиентам будут выданы адреса разных серверов, что распределит общую нагрузку между серверами.
364 1607369
>>607367
Луль. Я вообще лекции не люблю, одна вода обычно и нихуя непонятно и конкретики нет. Я попробовал книги на амазоне глянуть, нихуя нет тоже. В общем, я тоже по этой же причине в свое время забил на хайлоад - слово громкое, а конкретики как-то и не найти.
external-content.duckduckgo.com.jpeg132 Кб, 1200x630
365 1607372
>>605860
Прекрати так думоть, сейчас же!
366 1607374
>>605860
>>606151
>>607372
Синдром самозванца. Я уже лет 10 работаю и до сих пор все время жду пинка под зад, но, что характерно, в итоге ухожу обычно сам.
367 1607375
Задачка про клавишу SHIFT.

https://ideone.com/wkR4dA
368 1607376
>>607375
чо сделать-то надо?
369 1607378
>>607376
Исправить текст и предложения (Сделать первые буквы в предложений заглавными) и расставить пробелы после знаков препинания.
370 1607379
>>607378
лол, а мы рандомным кодом делимся ?
371 1607380
>>607379
Не, просто скидываю ОПу чтобы проверил.
372 1607382
>>607378
Какой-то дроч ради дроча. Скорее всего ты все это может сделать одной-двумя регулярками.
373 1607383
>>607382
Я не опытный в регулярках. Потом переделаю когда наберусь ума.
374 1607384
>>607383
Назови принципы ООП, не глядя в гугл.
375 1607385
А где вообще есть нормальная инфа по регуляркам, а то я читаю документацию на сайтах с онлайн редактором, а на сайтах какая то слишком она базовая, тип чтобы комплексно, я пытался пройти курс теории рег. выражений из теории алгоритмов, но как то не пошло, че то дедок сложно все объяснял?
376 1607386
>>607384
Что за допрос внезапный? Ну насколько я знаю ООП это исплользование объектов, в которых заключена информация для использования на протяжений всей программы. То есть мы берем объект, в нем вся нужная нам информация которой можно манипулировать.
ООП не знаю. Вот собираюсь изучить.
377 1607387
>>607386
как можно сделать что то сложнее CLI приложки без ооп?
378 1607389
>>607386
А, окей. Я уж хотел тебя подловить, но ты вообще дно. Вопрос был наводящий, который должен тебя заставить задуматься, что лучше - дрочить рандомные задачи, которые никому нахуй не нужны или изучать то, что спросят на собеседовании. Удачи.
379 1607390
>>607387
Действительно, как?
https://github.com/torvalds/linux
380 1607391
>>607389
Тут спорить нет смысла. Решать задачи обязательно, плевать какие. Они помогают закрепить материал и развивают мышление в этом направлений. Без разницы какие задачи. А если спросят на собеседований о какой то теме я её уже буду знать на автомате.
Мне не нужно получить крутую работу, мне нравится то что я делаю.
381 1607392
>>607390
ухххх, подловил, ну если придраться, то это тоже CLI.

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

мемас на эту тему, с которого я долго орал https://github.com/torvalds/linux/pull/335
382 1607394
>>607391
Да хуйня это все. Просто берешь и пишешь проект. Можешь получать тот же кайф, только все навыки будут "боевые", а не абстрактные, непонятно кому нужные.

>>607392
Ну, ладно, я просто доебался, ты прав, без ООП уже даже не плюнуть никуда, в объект попадешь.
Да, я тоже долго орал с long long :D
383 1607400
>>607394
Ты меня никак не переубедишь. Понимаешь, я настолько конченный, что решаю это всё в Виме, на который я устанавливал плагины и вручную устанавливал зависимости.
384 1607401
Да что говорить, я даже Вим скомпилировал.
385 1607402
>>607400
Я занимался этой хуйней, когда мне было 20. Сейчас я использую то, что действительно удобно и не занимаюсь хуйней. Короче, ты не про работу, ты так, дроч для себя, пока родители кормят, я понимаю. Тогда уж лучше учи нормальный язык, а не пхп.
386 1607403
>>607402
Ну я тебя понял, нужно как то стремиться монетизировать изучая то что используется на рынке, так?
387 1607404
>>607402
Ты какой то ебаный ноунейм который несет хуйню. Не ебу чего ты добился, но явно не результатов с таким мышлением. Ты наверно один из вкатывальщиков? Что хуево да?
388 1607405
>>607404
Нет. А вот ты несешь хуйню, это уж точно, вим, хуим. Ебанутый, не?

>>607403
Если хочешь вкатиться - ясен хуй, надо использовать то, что на рынке. Если не хочешь, то похуй, хоть дрочи вприсядку.
389 1607406
>>607405
Ну понятно всё с тобой, обыкновенный додик. Заебись вкатился? Как в конторе? Ебут нормально? Как полёт? Сколько таким говнокодерам как ты башляют? Ммм.
390 1607407
>>607405
Хотя сомневаюсь что ты вообще можешь хоть что-то кодить. Залетыш.
391 1607408
>>607406
Да все хорошо, спасибо, что спросил. А по поводу вима, был у нас один фронтендер в команде, который работал через вим и считал себя очень крутым, когда на ретро обсуждали вопрос, что неплохо бы иметь единый кодстайл и решили попробовать сделать это через плагины к IDE, всем было смешно и забавно, ему особенно.

>>607407
Да конечно не могу, расслабься уже, шизик ебаный.
392 1607409
>>607408
Фу блять, фууу
393 1607410
>>607409
Орнул. Найс аргументы :) Удачи тебе, шизик, в жизни будет не легко, когда вырастешь.
394 1607413
>>607410
Господи какой ты дегенерат, пиздец просто.
395 1607414
Есть же такие ебанутые.
396 1607415
>>607413

> Господи какой ты дегенерат, пиздец просто.


Господи какой ты дегенерат, пиздец просто.
397 1607419
>>607415
Ты даже не понял где ты обосрался.
398 1607422
>>607419

> Ты даже не понял где ты обосрался.


Ты даже не понял где ты обосрался.
399 1607428
Почему выдает ошибки неизвестная переменная:

https://ideone.com/OzaZ77
400 1607430
>>607428
Почитай про области видимости
401 1607433
>>607428
Переменная $paymentTotal объявлена в цикле for и видно её только там. При выходе из цикла переменная пропадает. Тебе нужно объявить её в теле цикла.
В функций у тебя так же идёт возврат двух значений, после того как выполняется выражение $paymentTotal, следующее за ним выражение return $month пропадает, потому-что за ним успевает первое, которое завершает функцию.
Тебе нужно объявить $paymentTotal в теле функций, либо $paymentTotal = null, либо $paymentTotal = 0.
Почитай как тебе уже сказал анон про области видимости и очередность исполнения. А так же немного про функций.

https://www.php.net/manual/ru/language.variables.scope.php
https://www.php.net/manual/ru/functions.returning-values.php
402 1607443
>>605671
лол, 15 задач в месяц можно абсолютно бесплатно скидывать на джунов )
unidentifiedobject.png43 Кб, 469x257
403 1607448
Аргументом в функцию-обработчик передается только один обьект - $exception. Однако затем происходит обращение к методу на обьекте $e: error_log($e->__toString()). Анон, подскажи, как подобное возможно. Откуда в функции взялся обьект $e?
404 1607452
Блин, как вы заливаете базу данных на сервак?

А то у меня база данных из 5 таблиц, сохранил в файл экспорта SQL - всего 50к строк.
База примитивна - там даже связей нет.

И не могу нормально залить - на хостинге phpMyAdmin - нажимаю экспорт загружаю файл. и через какое-то время проблемы (в основном почему-то MySQL ломается). и дело не хостере - делаю тоже самое в WAMP - так один раз вообще вынесло весь MySQL пришлос переставлять.

Вот сейчас на хостинге при открытии любой базы или таблицы (не только залитой а вообще в том числе старых) пишет ошибки про
Undefined index: HMAC_secret
вот примерно так:
https://pastebin.com/CKbgp94v

Я не понимаю что не так и как теперь исправлять (это на рабочем хостинге - неужели тоже похерило)
405 1607489
>>607229
часть функционала с пыхи переводят зачастую сейчас на го. связано это с тем что дает возможности которых нет в пхп, а все заново собирать с нуля это не варик
406 1607522
>>607433

>объявить её в теле цикла.


В теле функций*
>>607428
407 1607524
Как можно сайтики тестить?
Вот у меня есть ламповая тудушечкавнутри она с mysql работает, и я хочу проверить как оно вообще будет работать при 1000/10000 запросах, сервак xampp на шиндоус.
Пока я только додумался на жс тестик написать чтоб оно само формочки заполняло и кнопочки нажимало.
408 1607546
>>607448

Это ошибка в коде. Неправильно написано название переменной.
409 1607564
>>607452
Скорее всего проблемы с конфигурацией БД у тебя на локальной версии и в проде, надо внимательно проверить версии, настройки, доступы. И еще лучше работать через консольные команды: mysql -u username -p database_name < file.sql
410 1607593
>>607452

Похоже на баг в 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
411 1607611
>>607452
mysqldump -uuser -ppassword db_name > file.sql
mysql -uuser -ppassword db_name < file.sql
Чего ты мучаешься, блядь.
412 1607613
Привет пхп, делал задачку про заглавные буквы и сейчас я не понимаю, как троеточие в регулярку засунуть
https://ideone.com/SY7llL вот мое решение, у которого возникли проблемы
413 1607629
>>607524
Игнорите...
414 1607640
>>607524
jmeter
415 1607679
Пиздец, что за шиз ночью тред засрал?
416 1607699
>>607524

apache benchmark (просто долбит запросы в одну страницу, совсем простая штука)
siege (делает запросы по списку)
Yandex Tank (навороченная штука с админкой): https://yandex.ru/dev/tank/

Должен предупредить, что логично тестировать нагрузку не на windows, а на линукс (обычно сервера на нем работают). Логично тестировать не примитивное приложение, а что-то посложнее и ближе к реальности.

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

Но в общем-то, стоит попробовать, хотя бы чтобы научиться.
417 1607723
поругайте за код и объясните как лучше написать :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
8DB3ADB8-7AE9-4D07-BC29-16D83376EE9F.jpeg161 Кб, 960x720
418 1607816
Реквестирую помощи.

Короче.
Есть несколько файлов:
1. логин/регистрация
2. список сообщений
3. Страница с формой добавления сообщения.

Все работает, как и должно на стороне php. Но есть один нюанс (как в анекдоте).

Хтмл-формы стакаются, блять, при переходе от файла к файлу.

Залогинился -> форма с логином пропала, показались посты через инклюд ("посты пхп"). Ок.

Но потом, при отправке поста у меня остается форма добавления текста и список постов.
Мне надо, чтоб форма ввода убиралась и показывались только файл с постами.

Как сделать?
419 1607827
>>607816
Самое просто не инклудить форму добавления поста, а с нее редиректить
Screenshot120.png41 Кб, 990x482
420 1607829
Нихуя себе блять.
Ковариантность и контрвариантность 600 лет ждал блядь. Сколько я граблей об это говно сломал.

Типизированные члены тоже пушка. Правда не понятно почему callable нельзя.

Расширения на сиське тоже охуенно.

Предзагрузка тоже пушка.

Блядь, да пых становится прям охуенным языком
421 1607853
>>607829
Нет бы знак доллара убрать при объявлении переменной.

> стрелочные функции


Как в жс? Делали бы сразу синтаксис в точности как у жс, было б удобнее.
422 1607867
>>607829
Дай ссылку
423 1607895
Phalcon норм?
424 1607931
>>607221

> Очевидно же что наебочка и тебе вообще не заплатят


Почему не заплатят? Особенно если

> под "немного знаете" подразумеваются вполне себе знания вкатывальщика


Если что, под стажёром я не имел ввиду работу без оформления, а минимум зп 15к - нельзя разве себе выбрать вкатыша и обучить его за эти деньги? Особенно учитывая, что откликнутся многие, а выберут того, кто уже более менее разбирается.
425 1607947
А ооп для пхп будет таким же, как и для жс? Это же подход к программированию в отрыве от конкретных языков?
426 1607955
>>607947
В js вроде бы другое ооп чем в пхп.
427 1608079
>>607955
Там оно хранит ссылку на родителя, прототипное называется
428 1608080
>>607947
Есть объект, в нем ссылка на радотилея, цепочка может быть длиной .

И когда ты какой-нибудь туСтринг вызваешь он проходится как по списку, до того как не найдёт
429 1608123
>>607829

>Ковариантность и контрвариантность 600 лет ждал блядь.


Двачую блять
430 1608175
>>599201 (OP)
Yii2-аноны есть итт? Аноны, есть ли либы/софт для того чтобы все таблицы+связи из дампа постгрис базы превратить в миграции?
431 1608217
>>608175
Есть какая-то ХзХуйня но я ее не пользовался, так что хуй знает
https://github.com/Hzhihua/yii2-dump
432 1608245
>>608217
Это находил, но пока что не юзал, последний комит пару лет назад и их количество вызывает опасение, может есть какой-то общепринятый инструмент для таких задач? В любом случае - спасибо за ответ, анон.
433 1608265
>>607827
Спасибо. Помогло отчасти, но завтра узнаю, в чем были причины.

Так же спасибо анонам, которые рассказали про сессию и печенье.
434 1608695
>>607723
Всё ок.
435 1608796
Аноны, помогите. Юзаю Eloquent , без ларавел
Не понимаю как сделать транзакцию.
Без ларавел фасад DB чет не работает. Как сделать транзакцию мож кто знает?
436 1608875
>>608796
П.С.
Мне нужна банальная вещь - одним запросом добавить строки сразу в несоколько таблиц. Что бы или все таблы обновились, или откат.
Используя PDO я использовал транзакции.
В Eloquent транзакции по документации доступны из фасада DB ларавел. Я же использую Eloquent отдельно в slim.
И я забуксовал.
437 1609093
анчоусы, прошу помощи. накидайте советы по тому как мне лучше всего дебажить модель и видеть что в нее прилетает то ? контроллер или представление могу, а вот модели чому то не выводятся если юзаю там print_r();exit();
438 1609096
>>609093
Если ты пишешь print_r();exit(); и у тебя не белый экран - значит ты не в том месте пишешь это.

Сначала напиши в начале файла, сразу после <?php что бы узнать инклудится он вообще или нет
Далее погружаешься вниз, пишешь в конструкторе, что бы узнать создается ли вообще данный класс, потом в предполагаемом методе и так далее. Вплоть до нужного тебе if() или строчки.
439 1609099
Как написать скрипт. Надо чтобы - есть файл, в нем содержимое. Надо сделать например 1к таких же файлов, только нужно нужное название файла и желательно чтобы контент был как-то рандомизирован. И все это надо на серваке.
440 1609153
>>609099
Сделай через system
Например for на нужное кол во
system(cat /dev/urand >$ i.txt)
441 1609176
>>608875
Сам разобрался.
442 1609177
>>609093
Exeption помогают.
443 1609207
>>609096
ну вот я обычно и занимаюсь таким реверс инженирингом. но чет нихуя не выходит пока что сейчас лел. надо просто переписать api, и он плотно зашит в стандартные системные файлы. и вот хуй знает как его искать и где че вызывать.

>>609177
расскажи поподробней. не очень понял тебя
444 1609225
>>609207
var_dump(get_included_files());
445 1609277
>>609176
Запости решение, мб кому будет интересно.
446 1609287
>>607895
Предлагали ваку в ТОРе с фалконом?
447 1609290
>>609093
xdebug + phpstorm
448 1609320
Пацаны, а есть ли в ПХП аналог innerHTML из JS, чтоб обновлять инфу, не перезагружая страницу? Пусть и с задаваемой периодичностью (было ы весьма удобно).
449 1609330
>>607374
Почему уходишь?
для-вайпа.jpg195 Кб, 1042x827
450 1609352
>>599201 (OP)
Анон, не будь терпилой!
451 1609474
>>609320

>обновлять инфу, не перезагружая страницу


Нет. Только если по Ajax подтягивать обновлённую инфу.
452 1609614
>>609290
Пхп это серверный блять язык. Что за хуйню ты несёшь? А к базе данных из браузера через джаваскрипт подключаться не хочешь?
453 1609644
>>609614

> А к базе данных из браузера через джаваскрипт подключаться не хочешь?


Хипстеры уже додумались до такого в своём Firebase.

мимо
454 1609784
Нужно ли знание линукса пхп разработчику? Стоит ли вкатиться, или нет?
455 1609804
Jj
456 1609820
>>609644
это просто сервер в облаке, к базе данных подключается сервер по запросу
457 1609821
>>609352
Иди нахуй отсюда, даун.
458 1609860
>>609784
Работать с командной строкой надо уметь, так как порой возникает необходимость в конфигурировании веб-серверов, большая часть которых работает на ОС Linux. Если у тебя стоит винда, можешь 2 ОС поставить себе Kubuntu, и учиться писать код пхп в ней.
459 1609864
>>609860

>Kubuntu


Иди нахуй с такими советами.
460 1609875
>>599201 (OP)
Есть API, которое выдает товарные фиды в виде XML и JSON. Необходимо брать эти данные, нормализовывать, и потом ложить в базу. Как лучше такое выполнять, что использовать? Ни разу с таким не сталкивался. Еще проблема в том, что данных очень много. Нужно как то фильтровать. Или пилить админку, чтобы можно было выбирать какую часть фида загружать. Как вообще в PHP работать с XML и JSON?
461 1609949
>>609614
Дебажишь прямо на продакшене?
462 1610044
Налетайте

https://career.habr.com/vacancies/1000055798

>150.000 руб (Middle) и 200000 руб (Senior)

463 1610069
>>609875
Json делается так:
1. Через курл или файл гет контент грузишь контент.
2. Затем jsondecode и работаешь как с объектом
464 1610243
>>609875
такая же проблема, анон. только вот мне наоборот со сторого api который работает через xml как раз надо перевести на новый, который как раз на json. легче было бы с нуля написать, но нет же, заказчику нада чтобы старый перелопачивали
в итоге сижу целую неделю ниче не написал и толком не выяснил как эта залупа работает. хуй знает че делать и как ловить. все раскидано по файлам и что то идет с пхп файлов, что то с js, что то блять вообще с <script type=text/html>
я отчаился, анонсы
465 1610306
Пацаны, добрый вечер в хату. Подскажите, пожалуйста, можно ли не через композер, а архивом (как, например, вордпресс) установить Laravel на хостинг?
466 1610389
>>610069
Пасиб

>>610243
Собери в кучу все и выполняй нормализацию. Мне как бы тоже самое предстоит делать. Только я пока с xml и json вообще не работал.
468 1610392
>>610306
Почему нет? Только это неудобно.
469 1610393
>>610390
Не знаю. Пока только вникаю что к чему. Спасибо, гляну.
470 1610427
>>610392
А как это сделать? Скачать архив с фреймворком и просто залить на хостинг через файловый менеджер я правильно понимаю?
471 1610434
>>610427
Обычный виртуальный хостинг с доступом через панель?
472 1610524
Знает кто аналоги acmp.ru для PHP? Ну чтобы задачки решать.
473 1610532
>>610524
Не язык определяет программиста. Попробуй написать обычные задачи
474 1610550
>>610532
??? Acmp удобен тем, что там есть проверяющая система, есть рейтинг. Просто в стол писать не интересно.
475 1610558
>>610524
codewars?
476 1610609
>>610434
Да free-хостинг от бегет
477 1610675
>>610558

>codewars?


Не нравится. Интерфейс неудобный, русского языка нет, задачи не совсем олимпиадные.
479 1610760
>>610550
Скидывай нам свой код и ссылку на задачу. Я буду писать почему ты говноед
480 1610902
>>609330
Всегда что-то идет не так. То фирма теряет бабки и предлагает урезать ЗП, то меняется начальство на неадекватов, то ищется работа получше, а то меня заебывает работать в офисе.
481 1610912
>>610675

>русского языка нет


Сударь, вы зажрались

>задачи не совсем олимпиадные


Причем тут php? Олимпиадники на питоне пишут
482 1610930
Давайте пилить свои прохладные по собесам - кто, на чем запоролся, кого, в какой позе имели.
Меня вот эйчарка обоссала за то, что я до 30 лет ни разу официально не работал, а потом тимлид засмеял, когда я не смог быстро на бумажке написать обход дерева в ширину с выводом вершин по уровням. Уже потом, идя домой обоссаный и осмеянный, понял, что задача для 3-го класса.
483 1611041
>>610930
да нахуй ты себя так приложил
484 1611042
Посоны, вот в JavaScript есть такая охуенная вещь облегчающая написание скриптов как JQuery, а какая на этом же уровне альтернатива идёт для написая кода в PHP? Чтобы так же удобно и покайфу обращаться к формам, DB и вообще к всяким готовым ништякам тупа так же в 1 строчку решая большинство задач, посмотрел для начала Laravel и чёто меня блевать потянуло от того как там всё уёбищно и измучено по сравнению с ванильным кодом, ещё и помимо виртуального сервера нужно кучу дерьма и консоль ставить

В общем какая лучшая паралель jquery есть на php? Для написая простых задач и скриптов, а не ебли с сложными сайтами с нуля, чисто чтобы баловаться приятными ништяками для себя и надрачивать как ты удобно сделал считая себя сверхразумом являясь дауном учитывая что такие задачи у остальных не занимают даже 1% напряга мозга
485 1611109
>>610760
Смотри сам не обосрись, умник.
486 1611110
>>611042

>консоль ставить


Какую консоль?
487 1611111
>>611042

>Посоны, вот в JavaScript есть такая охуенная вещь облегчающая написание скриптов как JQuery, а какая на этом же уровне альтернатива идёт для написая кода в PHP?


JQuery создавался для того, что один код работал в разных браузерах. В то время код для разных браузеров отличался.
488 1611216
>>611042

>Чтобы так же удобно и покайфу обращаться к формам, DB и вообще к всяким готовым ништякам тупа так же в 1 строчку решая большинство задач


Но ведь это и есть Laravel, чем не понравился тебе?
489 1611313
Идиотский вопрос, но вот "установка" ларавеля это по сути скачивание архива с исходным кодом блог аппа и подтягивание зависимостей, верно? А когда я собственно говоря уже сто тыщ изменений внес в сорцы, то тогда "установка" моего проекта это получается скачивание моего измененного разросшегося кода блог аппа без папки вендор, и последующая установка зависимостей композером?
490 1611315
>>611042
Если хочешь писать как на ванильной пыхе, то попробуй CodeIgniter, очень тупой и прямолинейный фреймворк
491 1611317
>>611313
В общем да. Плюс база, сервисы (если используешь, типа редис, еластик) и подобное.
492 1611348
>>611110
Ну терминал

>>611111
Но ведь как он охуенно сокращал код, и синтаксис понятный и приятный

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

Я правильно понимаю, сейчас всё пришло к тому что вся работа возложена на браузер пользователя? Сервер отдаёт только каркас страницы и джейсон с данными, а уже браузер тонной библиотек парсит его и вставляет в по сути пустую страницу, типа сняли нагрузку с серверов, отдав им только работу с бд, и то этйо бд управляет ещё тонны говна с костылями которые они называют вмс и хвалят за скорость написания, по сути просто накладывая на чистые js и php тонны уродского синтаксиса их фреймворков чтобы быстрее высрать говно, спихнуть это под видом технологий лошку клиенту и съебаться в туман насрав что это куча костылей и говна которые неоптимизированы от слова совсем, пример сейчас это ютуб и твич, где у тебя грузится просто фон и уже куча скриптов на скрипте начинают верстать страничку и всё это дерьмо логает если у тебя не компьютер хотя бы старее 2017 года
493 1611353
>>611348

>конструкторами


контроллерами
fix.
494 1611363
>>611348

>сняли нагрузку с серверов


Нет, дело в том, что браузерный клиент давно перестал быть единственным. Чистые апишки пилятся для взаимодействия с любым клиентом. При этом сср нужен самим фронтам, хоть и костыльно выглядит на первый взгляд (и на второй тоже). Причины, правда, не то чтобы критичные были, но уж пусть так. Кроме того это дело все кешируется насколько может. Нагрузка на бек важна конечно, но сср там малую роль играет.

Из всего тобой сказанного - тебе нужен вротпресс.
495 1611374
>>611363

>вротпресс


Это понятно, но хочется для себя для удовольствия пописать всякие ништяки не находясь на вордпрессе, да даже просто на локальном сервере например парсер написать, на чистом php не то, слишком выгвиглазно, а увидев все эти структуры и взаимодействия этих костылей на том же ларавеле просто блевать хочется а не писать, по этому и захотелось найти что-то типа jquery на js, но только для php, чтобы так же логично, красиво, просто и удобно
496 1611387
>>611374
Тебе зря так кажется.
Если хочешь либу для парсинга/работы с DOM на пхп, то SimpleDOM может подойти. Древний он правда.
https://github.com/ziadoz/awesome-php#scraping
В этой секции еще можешь глянуть.

>так же логично, красиво, просто и удобно


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

>логично


Логики там не нужно. Это же библиотека, она ни на что такое не претендует. В давнее время упрощалась работа, но сейчас это уже лишнее. ты даже не представляешь насколько.

>красиво


Красоты тоже нет никакой. В самом лучшем случае становится чуть меньше кода, чем на ваниле, но он красивым от этого не становится.

>простоты


Вот это мб. Совсем не умея в ванилу вкатывались ведь предки нынешних фронтов в живквери. Значит простая.
497 1611416
>>611348
Тогда slim посмотри. Из коробки тупо роутер, все нужное тебе подключаешь сам.
498 1611419
>>611416
Слим наоборот для тех, кто понимает что делает и как это готовить.
499 1611452
>>611387
>>611416
Спасибо за ссылки, уже что-то, поизучаю.

>>611387

>Жиквери не является образцом логики, простоты и удобства


Ну почему же, $("#2ch").click(function()) логичнее, красивее и удобнее же чем document.querySelector("#2ch").onclick = function()
Или $.getJSON("2ch.json", function()) чем ебаться с громадным XMLHttpRequest, не буду даже его рассписывать

Вот и хочется нечто подобное охуенное для сокращения и PHP
500 1611455
>>611452

>чем ебаться с громадным XMLHttpRequest


fetch погляди.

>$("#2ch").click(function()) логичнее, красивее и удобнее же чем document.querySelector("#2ch").onclick = function()


Чуть короче и что еще?
501 1611458
>>611455
На fetch пока не смотрел бы, так как многие до сих пор деревянными браузерами пользуются

Это ленивые премеры были, попробуй например сделать на ваниле скрипт вкладок и на jq, он будет в разы приятнее и короче на jq, не суть, я просто ищу что-то подобное для php, или ты намекаешь что проще писать на чистом php, так как текущие фреймворки все вырвиглазное дерьмо с помойнейшим синтаксисом для макак пушечного мяса
502 1611464
>>611458

>проще писать на чистом php, так как текущие фреймворки все вырвиглазное дерьмо с помойнейшим синтаксисом для макак пушечного мяса


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

>На fetch пока не смотрел бы, так как многие до сих пор деревянными браузерами пользуются


Полифилы решают. Ну и если уж прямо говорить - ты зачем к жиквери в 2020 прилип? В наше время цветут вью, реакт и ангуляры всякие. Они гораздо мощнее, проще и выразительнее будут, чем либа с декораторами над ванилой.
Аналогия жиквери и чистого пхп даже ближе, чем ты думаешь.
503 1611473
>>611042
ASP.NET MVC Framework с Entity Framework
504 1611477
>>611464

>простым фреймам так противишься


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

Все эти вью, реакт и ангуляр как минимум просто противоречат и не дружат с SEO как минимум, вся твоя страница превращается просто в фейк, а весь сайт в одностраничник, где всю работу переложили на фронт и железо пользователя, грузя данные и верстая всё находу, в что-то мерзкое и лагучее
505 1611486
>>611477

>не дружат с SEO как минимум


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

>делают сайт на ларавеле


На фреймах писать можно вообще по разному. Хотя это не слишком очевидно из концепции, но так оно и есть. Я вот видел сайты на ларке, где в каждом эндпоинте die юзался и прочая мимофреймовая херня. Ну красота, чо. Зато на ларочке няшечке. И такого полно везде.
506 1611557
>>611042
Пиши на ваниле и не выебывайся.
Только далеко ты не уедешь без либ и фреймов
507 1611704
>>604086

>Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с >зафиксированными значениями на кубиках слева.


Но в примере твоей функции, она получала на вход пустой массив

>Если ей переданы значения на всех 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 , и просто с помощью цикла
508 1611731
Аноны, подскажите, не понимаю как правильно работать с базой данных. А точнее логику работы с соединением к БД.
Я подключаюсь к БД с помощью eloquent и capsule.
В пхп после выполнения скрипта соединение обрывается? Или каждый раз при обращению к базе создается подключение, которое если явно не закрыть - повисает?
Поясните пожалуйста за соединения с БД
509 1611750
Я php джун без знаний и опыта, уже почти месяц откликаюсь на вакансии, делаю тестовые, хожу по собеседованиям, порой меня даже хвалят, но до сих пор ни одного оффера. Меня скоро выпрут из общаги, бабки заканчиваются, а я даже к родителям не смогу уехать, они не могут меня больше содержать. Я уже было совсем приуныл, вакансии почти закончились, новых нет, молюсь Богу каждый день.
И тут короче мне дают тестовое найдите ошибки в 27 строчках, а там ошибки типа ';' вместо ',' написано и прочее, для даунов на 15 минут. Сделал я его, пригласили на собес, иду весь трясусь нервничаю, захожу зажусь, а hr мне после пары вопросов про мою общительность и дальность от дома говорит: "ЭЭЭ, ну вообщем, приходи во вторник, зарплата 40к, официально. " И я просто охерел тогда, сидел не знал что сказать. Просто без собеса без ничего. Одно тестовое на 15 минут. А в других конторах ебали только так и не взяли.
Теперь получается моя жизнь спасена, я успешно вкатился, бабки не проблема, думаю теперь о будущем.
510 1611752
Если я создам код внутри рамки по типу:
<фрейм>
<? некоторый кот ?>
</фрейм>

К примеру, там будут данные из БД и их надо время от времени проверять.

И сделаю кнопку для перезапроса инфы к коду внутри фрейма, то она будет обновлять данные в рамке, или все равно придется обновлять всю страницу?

Мне уже тут говорили за ajax, но у меня свой путь шиноби возник интерес именно к такому способу. Сработает ли?
511 1611888
>>611750
Рандомное волконогокормление.
512 1611895
>>611888
Не понял? Что это
513 1611901
>>611888
п.с. рад за тебя. Сам некоторое время назад интереса ради откликнулся в одну конторуна реакт + нода. Сходил пообщался , дали тестовое,сделал как смог. В ответ на почту скинули что тестовое принято. И запланируют встречу с гендиром. Через пару недель пригласили, пообщался с их гендиром. Он приятное впечатление оставил. По итогу предложили месяц оплачиваемой стажировки, и если продолжим - то 70к зп. А я в основном на пхп пишу, и не пипец опытный. Да и на вакансию откликнулся потому что нода интересна, и я с ней немного пердолюсь. А так у меня и сейчас есть работа, которая оч уютная и хорошая.
Тестовое - что то типа фуллстак тудухи - морда реакт, бек на ноде.
514 1611905
>>611895
А то что нужно ходить на собесы, делать тестовые , и подскакивать кабанчиком.
Что тот аноны если он не ты совершенно правильно и делал.
515 1611919
>>611901
Я может тоже потом перекачусь во фронт/фуллстек. А то что-то php-шникам намного меньше платят.
516 1612009
>>611901

>70к


ДСье?
517 1612033
>>612009
Нет, регион, ближе к югам.
518 1612055
>>611919
Скорее просто ниша для начинающих не самая денежная. Небольшие сайтописательские конторы.
519 1612163
>>612055
php сеньеры получают в среднем на 20к меньше java и javascript синьоров
520 1612170
>>611750
Поздравляю. Как-то так оно и случается.
521 1612171
>>611752

>Сработает ли


Возьми, да проверь. Руки отсохнут пару строк написать, да код запустить?
522 1612300
>>611752
Во фрейме у тебя находится отдельная страница.
2020-02-19-09:27:361920x1080-screenshot.png76 Кб, 1920x1080
someApprentice !EaaiHmIJms 523 1612400
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: BOOLEAN

Conference:
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,
user

Message:
uuid,
author,
readed
date,
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,
message

Message_Attachment:
uuid,
type: ENUM('image', 'audio', 'video', 'file', 'forwarding', 'reply'), // Либо изображение, аудио, видео, файл, пересылка сообщения, либо ответ на сообщение
message,
src // Содержит либо URL на файл для изображений/аудио/видео/файлов, либо uuid сообщения для пересылки/ответа

Какие запросы нужно выполнить:

1. Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть (в случае приватной конференции), и вместе с Получателями в случае с публичной конференции:

SELECT
conference.uuid,
conference.updated
conference_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_key
ps.last_seen AS participants_last_seen
FROM conference
INNER JOIN conference_reference ON conference.uuid = conference_reference.conference
INNER JOIN user AS participant ON conference_reference.participant = participant.uuid
INNER JOIN message AS m ON conference.last_message = m.uuid
INNER JOIN participant AS pu ON pu.conference = conference.uuid
INNER JOIN user AS ps ON pu.user = ps.uuid
WHERE conference_reference.user = :uuid
ORDER BY conference.updated DESC;

Такой запрос вернёт количество строк равный количеству Конференций помноженных на количество Получателей. pic-1. Как сделать лимит на первые 20 конференций, а не на первые 20 строк (при условии что используется Doctrine)?

2. Получить Конференцию по Получателю, вместе с получателем.

Примерно такой же запрос, только выборка будет WHERE conference_reference.participant = :uuid.

3. Получить последнее 20 Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.

Doctrine и DQL конечно же упрощают написание таких больших запросов как я написал выше, поэтому я напишу его:

SELECT m
FROM Crypter\Entity\Message m
INNER JOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.message
WHERE m.conference = :conference AND mr.user = :user
ORDER BY m.date DESC

4. Получить первые 20 непрочитанных Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.

Примерно такой же запрос, только выборка будет помимо прочего ещё и по полю readed и author:

...AND m.readed = FALSE AND m.author != :user.

5. Получить первые 20 Сообщений начиная с данного таймстампа (получить новые сообщения), для определённой конференции для конкретного пользователя вместе с конференцией и автором

Примерно такой же запрос как и в 3-ем запросе только добавляется ещё и выборка по дате: ...AND m.date > :date

6. Получить последние 20 Сообщений начиная с данного таймстампа (получить старые сообщения)... -//-

Такой же запрос только наоборот: AND m.date < :date

7. Получить все прочитанные Сообщения с определённого момента.

Такой запрос нужно чтобы обновить локально сохранённые сообщения (в IndexedDB), которые были прочитаны пока клиент был в офлайне.

SELECT m
FROM Crypter\Entity\Message m
JOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.message
WHERE mr.user = :user AND readedAt > :date
ORDER BY m.date DESC

Думаю, что нормализованная структура определена и осталось её оптимизировать. Пожалуйста, научите меня этому.
2020-02-19-09:27:361920x1080-screenshot.png76 Кб, 1920x1080
someApprentice !EaaiHmIJms 523 1612400
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: BOOLEAN

Conference:
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,
user

Message:
uuid,
author,
readed
date,
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,
message

Message_Attachment:
uuid,
type: ENUM('image', 'audio', 'video', 'file', 'forwarding', 'reply'), // Либо изображение, аудио, видео, файл, пересылка сообщения, либо ответ на сообщение
message,
src // Содержит либо URL на файл для изображений/аудио/видео/файлов, либо uuid сообщения для пересылки/ответа

Какие запросы нужно выполнить:

1. Получить последние 20 Конференций для конкретного пользователя, вместе с последним Сообщением и вместе с Получателем если есть (в случае приватной конференции), и вместе с Получателями в случае с публичной конференции:

SELECT
conference.uuid,
conference.updated
conference_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_key
ps.last_seen AS participants_last_seen
FROM conference
INNER JOIN conference_reference ON conference.uuid = conference_reference.conference
INNER JOIN user AS participant ON conference_reference.participant = participant.uuid
INNER JOIN message AS m ON conference.last_message = m.uuid
INNER JOIN participant AS pu ON pu.conference = conference.uuid
INNER JOIN user AS ps ON pu.user = ps.uuid
WHERE conference_reference.user = :uuid
ORDER BY conference.updated DESC;

Такой запрос вернёт количество строк равный количеству Конференций помноженных на количество Получателей. pic-1. Как сделать лимит на первые 20 конференций, а не на первые 20 строк (при условии что используется Doctrine)?

2. Получить Конференцию по Получателю, вместе с получателем.

Примерно такой же запрос, только выборка будет WHERE conference_reference.participant = :uuid.

3. Получить последнее 20 Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.

Doctrine и DQL конечно же упрощают написание таких больших запросов как я написал выше, поэтому я напишу его:

SELECT m
FROM Crypter\Entity\Message m
INNER JOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.message
WHERE m.conference = :conference AND mr.user = :user
ORDER BY m.date DESC

4. Получить первые 20 непрочитанных Сообщений для определённой конференции для конкретного пользователя, вместе с конференцией и автором.

Примерно такой же запрос, только выборка будет помимо прочего ещё и по полю readed и author:

...AND m.readed = FALSE AND m.author != :user.

5. Получить первые 20 Сообщений начиная с данного таймстампа (получить новые сообщения), для определённой конференции для конкретного пользователя вместе с конференцией и автором

Примерно такой же запрос как и в 3-ем запросе только добавляется ещё и выборка по дате: ...AND m.date > :date

6. Получить последние 20 Сообщений начиная с данного таймстампа (получить старые сообщения)... -//-

Такой же запрос только наоборот: AND m.date < :date

7. Получить все прочитанные Сообщения с определённого момента.

Такой запрос нужно чтобы обновить локально сохранённые сообщения (в IndexedDB), которые были прочитаны пока клиент был в офлайне.

SELECT m
FROM Crypter\Entity\Message m
JOIN Crypter\Entity\MessageReference mr WITH m.uuid = mr.message
WHERE mr.user = :user AND readedAt > :date
ORDER BY m.date DESC

Думаю, что нормализованная структура определена и осталось её оптимизировать. Пожалуйста, научите меня этому.
15812237674180.png596 Кб, 643x820
524 1612440
525 1612445
>>599205

Я вижу, появилась папка 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) дублируется в нескольких местах кода, в валидаторе и тут. Хорошо бы это исправить.

Так, пока для начинающего неплохо, но надо исправить замечания, чтобы второй раз на те же грабли не наступать.
525 1612445
>>599205

Я вижу, появилась папка 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) дублируется в нескольких местах кода, в валидаторе и тут. Хорошо бы это исправить.

Так, пока для начинающего неплохо, но надо исправить замечания, чтобы второй раз на те же грабли не наступать.
526 1612508
>>611752

Фрейм это как отдельная вкладка и он может загружаться независимо от основной страницы.

>>611731

Да. Все соединения закрываются, открытые файлы закрываются при завершении скрипта автоматически.

Обрати внимание, что во многих БД вроде MySQL/MariaDB, долгий запрос не завершается при отсоединении. Если ты запустишь запрос, который выполняется 24 часа, он продолжит выполняться, хотя ответ на него отдавать уже некуда. Используй настройку таймаута в БД для борьбы с этим.

>>611704

>>Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с >зафиксированными значениями на кубиках слева.


> Но в примере твоей функции, она получала на вход пустой массив



Это значит, что пока ни одно значение не зафиксировано и все кубики надо перебирать.

>>Если ей переданы значения на всех 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. В таком случае, первая полученная комбинация будет соответствовать тому, что дает "жадный" алгоритм. А если она не подошла, то мы начинаем менять количества купюр и пробовать другие варианты.
526 1612508
>>611752

Фрейм это как отдельная вкладка и он может загружаться независимо от основной страницы.

>>611731

Да. Все соединения закрываются, открытые файлы закрываются при завершении скрипта автоматически.

Обрати внимание, что во многих БД вроде MySQL/MariaDB, долгий запрос не завершается при отсоединении. Если ты запустишь запрос, который выполняется 24 часа, он продолжит выполняться, хотя ответ на него отдавать уже некуда. Используй настройку таймаута в БД для борьбы с этим.

>>611704

>>Если попробовать обобщить это, то можно придумать такую функцию: пусть она получает на вход массив с >зафиксированными значениями на кубиках слева.


> Но в примере твоей функции, она получала на вход пустой массив



Это значит, что пока ни одно значение не зафиксировано и все кубики надо перебирать.

>>Если ей переданы значения на всех 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. В таком случае, первая полученная комбинация будет соответствовать тому, что дает "жадный" алгоритм. А если она не подошла, то мы начинаем менять количества купюр и пробовать другие варианты.
527 1612509
>>611458

Не нравятся большие фреймворки - используй микрофреймворки вроде Slim или собери свой фреймворк из компонентов Симфони.

>>610930

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

>>610524

Есть codeforces от Дурова: https://codeforces.com/blog/entry/79

Можно решать на PHP и даже соревноваться с другими. Задачи от примитивнейших до мозголомных. Как тебе?
528 1612570
>>612400

Для мессенджера советую в 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/Индексы+в+mysql

Если есть конкретные вопросы, уточняй.
528 1612570
>>612400

Для мессенджера советую в 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/Индексы+в+mysql

Если есть конкретные вопросы, уточняй.
529 1613310
Анончик, чем синхронизировать локальную папку с sftp на debian?

Раньше пользовался правкой файлов по ftp через notepad++, на линуксах же в правки по sftp имеют 2.5 приложения, да и те осваивать месяц
530 1613324
>>611477
Да, двачую анон, складывается такое впечатление, что это какой-то рынок для гиков, нердов, но им вместо чего-то обычного впаривают реакты, вью, свелт или еще что-то, это все обрастает конференциями, курсами. Целая кампания какая-то. А ведь нужно то отобразить страницу с текстом или сделать удобную форму.
someApprentice !EaaiHmIJms 531 1613334
>>612570

>Для мессенджера советую в 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, и выполню все запросы к БД напрямую?
someApprentice !EaaiHmIJms 531 1613334
>>612570

>Для мессенджера советую в 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, и выполню все запросы к БД напрямую?
532 1613373
Как-то забил на программирование, кроме задачек на codewars, но начал читать литературы (учебники, сайты и т.д.) в промышленных масштабах. Такое чувство, что скоро на меня снизойдёт просветление.
533 1613444
>>613324
Нет никакой кампании, лол. Это просто обычные попытки стандартизировать используемые подходы. На фронте у PHP щас только ДВА фреймворка осталось - Symfony для корпората и Laravel для стартапов - выбирай, где хочешь больше работать, и учи. Оба они показывают, как надо писать на этом языке - это PHP в его лучшем виде. Если тебе по-прежнему кажется, что они сделаны плохо и лучше писать самому, то либо ты очень крутой спец, который может одной левой на Slim построить крутую систему под конкретные задачи, либо школьник.
534 1613581
>>612509

>Есть codeforces от Дурова


От Дурова? Интерфейс конечно ужасный. Непонятно где задачи и как вообще пользоваться сайтом.
535 1613639
>>607723

>} else if($i == 10) {


А если я строку изначальную поменяю на другую?
536 1613853
>>599201 (OP)
аноны, прошу совета.

мне почти 30.

образование 9 классов. да и то формально.

работаю на дно-работе. зарабатываю копейки. и всё меня устраивало.

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

и я рассматриваю как вариант вкат в php-программинг.

но у меня реально крайне хуёво с образованием ( в т.ч. с физ-мат науками ).

тем не менее вот эту задачу ( с которой тут, я сморю, многие ебутся ) я решил за 20 минут на онлайн-интерпретаторе.

имея из опыта в этой области только 1 прочитанную в детстве ( пролистанную ) книженцию по языку си для школьников.

<Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?

что посоветуете?
537 1613862
>>613853
Учи выкатывайся хуле
Самообразование.jpg631 Кб, 2400x2100
538 1613864
>>613853

>что посоветуете?


Ебашь, что сказать, сперва погромирование, затем догоняй математику, по типу пикрелейтед книги почитай, если есть где-то жесткие пробелы в знаниях, то заделывай их.
539 1613871
>>613864
>>613862

уточню.

возможно ли устроиться работать php-шником, имея познания в области физ-мат наук на уровне примерно начальной школы?
540 1613889
>>613871
Конечно
Ты же не ракеты собрался пилить
541 1613932
Платиновый вопрос. Какую IDE из бесплатных посоветуете?
542 1613941
>>613932
VS code
543 1613958
>>613941
Ее допиливать ебанно
544 1614057
Аноны, это снова я, спасибо за ответы, многое понял для себя и разобрал кашу

Я пришёл к такому выводу, что сейчас всё пришло к тому, чтобы отделить взаимодействие разработчиков фронта и бека, каждый делает по своему и как может, а если не может, то его просто заменяет другой, главная их цель это использование стандарта между собой, который в основном сейчас это JSON, то есть задача бека вывести данные из БД в формате JSON, а фронта принять их, спарсить и вывести на экран тонной фреймворков, вся нагрузка на железо теперь распределилась на сторону клиента, а взаимодействие бека и фронта на реализации создании джейсона и его вывода на страницу, я всё правильно понял?

Посмотрев ютуб, понравилась концепция создания интернет магазина, где вся суть в том чтобы получив данные из GET/POST запроса сконвертировать нужные данные в JSON и получив их вывести на экран, весь магазин в итоге сводится к 3-х страничнику, главная/корзина/страница товара, но всё это конечно заебись если ты не собираешься индексироваться в коисковиках, иначе над беком придётся сильно ебаться чтобы он ещё и страницы генерировал, хотя бы при 1 запросе

>>611042-хуй
С выбором фреймворка пока не определился, смотрел ютуб, но все предложения сохранил в закладки, пока для себя определился что первым делом нужно будет попробовать Slim, то есть я так понял нужно просто найти фреймворк который превратил основной функционал в функции, файл которых нужно будет просто подключить и уже пользуясь ими писать короткий код
545 1614080
>>613444
Может ли Symfony конкурировать где-нибудь в энтерпрайзе с Джавой?
546 1614105
>>614080
Со Spring вполне может. Но Java - это не только Spring, экосистема Java вполне может покрывать все нужды энтерпрайза и даже больше, в то время как PHP нет.
547 1614112
>>614105
Имеется в виду, что Java - это BigData, ML, concurrency, highload и куча всего еще, что может быть в составе крупного энтерпрайза. А PHP - это только веб.
548 1614128
>>614057

>первым делом нужно будет попробовать Slim


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

>чтобы отделить взаимодействие разработчиков фронта и бека, каждый делает по своему и как может


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

>вся нагрузка на железо теперь распределилась на сторону клиента


Нет, сложная бизнес-логика по-прежнему на сервере.

>понравилась концепция создания интернет магазина


Это одна из дефолтных сфер, где доминирует PHP - e-commerce (мелкий/средний бизнес).
549 1614143
>>614105
Значит ли это, что при необходимости можно относительно безболезненно перекатиться с PHP на Джаву? (в контексте веба)
550 1614164
>>614143
Да, можно. Причем, может быть так, что Java после PHP не понравится, но примеры таких перекатов среди моих знакомых есть - один из них щас в СберТехе 200к получает, перекатился 2 года назад где-то.
551 1614244
>>613958
Это же охуенно, анон. Когда с пыхи будешь слезать, то даже ide не придётся менять.
552 1614407
553 1614464
>>614244
С Идеей будет то же самое, если до этого писал на PHPStorm.
554 1614552
>>614128
Ну а в остальном я правильно понял? Бекенду нужно высрать джейсон из базы, а фронту пропарсить его и отрисовать?
555 1614615
556 1614635
>>613853
Аааа, помню тебя, а это я с ней неделю ебался пока не погуглил решение.
557 1614833
анчоусы, подскажите такой момент с ассоц массивами. https://ideone.com/eYintb вот пример где мне надо сложить два массива. но не просто сложить, а чтобы по ключу значения из второго массива как бы встроились в первый. так вот как это реализовать? нагуглить как вы понимаете нихуя не смог везде только одна ебучая конкатенация
558 1614837
>>614057
скинь как этот видос где пишут этот магазин. интересно пиздец как стало
Аноним 559 1614838
>>599201 (OP)
Подскажите, я на laravel могу красиво крудошлепить используя его инструменты(всякие курсы-хуюрсы качаю и смотрю, как строят приложения) и композерем тащить нужные зависимости , но когда нужно создать какой-нибудь модуль - я обсираюсь и пизжю решение из инета. Так вот, собственно, вопрос: как научится (мыслить логически, хз) создавать модули? Как прокачать этот скил? Логические задачки решать или что? Или это нормально в начале и все дальше все поедет? Чувствую себя идиотом.
Аноним 560 1614852
>>614838
или во фронтэнд переучиваться? лол
561 1614879
>>614838
Декомпозируешь функционал и пилишь потихонечку. В конце концов любая таска сводится к множеству атомарных тасок типа "сделать запрос в бд" или "обрезать строку".
562 1614880
>>614852
Во фронтенде та же херня. Дают тебе таску на человеко-день и ебись с ней как хочешь
563 1614912
>>599201 (OP)
Ребята, а есть кто работает дома? На каких сайтах ищите работу? Что обычно делаете по работе (сайты или что?).
564 1614920
>>599201 (OP)
Изучив Php, реально ли работать дома? Или будешь мало получать, и придется работать на дядю-контору каждый день в офисе?
565 1614964
>>613871
Да. В веб-разработке каждый второй такой лол
566 1614966
>>614920
Первые пару лет в офисе лучше. Потом можешь перекатываться на удалёнку.
567 1614972
>>614966
Почему лучше в офисе? Лучше, но необязательно - правильно понимаю?
568 1615000
>>614972

>Почему лучше в офисе?


А сам как думаешь, есть мысли? Научишься взаимодействовать с разработчиками и вообще с людьми, если сычуешь.
569 1615005
>>615000
Зачем взаимодействовать с разработчиками какими-то с офиса, если во фрилансе ты сам на себя работаешь?
Не сычую
570 1615008
>>615005
В будущем захочешь стать сеньором 300к/наносек - навыки и знания из "внутренней кухни" пригодятся.
571 1615014
>>615008
то есть ситуация такая: сидишь-пердишь в офисе пару лет, потом домашний фрилансер и опять работа в офисе, но уже покрупнее и посолиднее?
572 1615113
>>614912

>есть кто работает дома?


Есть

>На каких сайтах ищите работу?


хх, мойкруг, линкедин, телеграм чаты с работой php_jobs

>Что обычно делаете по работе (сайты или что?)


Поддерживаю продукт, что-то допиливаю, фикшу.
573 1615115
>>615014
В начале пару лет пердишь в офисе. Потом думаешь, что больше хочется - офис/релокейт/удаленка/фриланс
574 1615139
>>614552
REST API это называется, и это целый архитектурный паттерн поверх HTTP со своими правилами и особенностями, а не просто "высрать джейсон из базы". Если ты собрался срать джейсонами, то пожалуйста, не иди в веб или как минимум в PHP. Иди лучше в JS - там щас наибольшая концентрация всяких сирунов разной мастистости - они тебя встретят как родного и научат филигранно высирать каждый месяц очередной ShitJS, с которым ты будешь носиться по местным общественным туалетам (по ошибке называемым митапами и конфами), где будешь доказывать, что твое говно самое красивое и наименее вонючее, и что все должны кушать именно его. Короче, съеби.
575 1615142
>>615005
Не на себя работаешь, а на заказчика. И с ним порой труднее взаимодействовать, чем с коллегой-программистом.
576 1615151
>>615142
то есть с оплатой могут наебать?)
34plydoi435t.png447 Кб, 800x1000
577 1615193
578 1615224
>>615151
Не, это вряд ли. Просто заказчики обычно не шарят в программировании, поэтому трудно договориться.
579 1615561
сейчас встретил такого вида запись $dispatch_number = $array['response']['Order'][0]['butes']['orderNumber'];
анонсы, подскажите что это значит?
580 1615621
>>615561
многомерный массив значит
581 1615644
>>615621
ну это понятно. а что значит то что идет в правой части? отдебажить ипонять что за че отвечает нихуя не смогу тк этого прилетает с устаревшего api
582 1615684
>>615644
Уберай по одному индексу и пиши var_dump(); die;
Не знаешь что-ли, как деды отладку делали?
583 1615717
>>615684

>var_dump(); die;


бля, недавно в довольно крупном гос проекте такое встретил в продакт-коде, аж сердце прихватило.
584 1615724
>>599201 (OP)
Верстка страницы про регулярные выражения пиздецовая конечно - очень много инфы и картинок, нет какого-то порядка, скроллить просто мучение и сразу 8 задачек
585 1615796
>>615684
да так и делал, только он мне фаталы выбрасывает и говорит шобi я шел нахуй с неправильными оффсетами. в гугле для многомерных массивов я инфы не нашел
586 1616038
>>615717
Откопал историю про маскот пыхи - elePHPant, https://7php.com/elephpant. Мб кому интересно будет.
587 1616066
мимо сеньер со стажем в 10 лет
если хотите, могу за чонить пояснить в ближайшие пару часов, пока вискарь меня совсем не забрал
а может я забуду про тред и пойду дальше пьянствовать, сорри
588 1616210
>>615796

Многомерный массив - это массив, в котором значением элемента является другой массив. Например:

// обычный массив
$a = [1 => 'test'];

// 2-мерный массив
$b = [777 => $a];
// то же самое, что
$b = [777 => [1 => 'test']];

>>615724

Справедливое замечание. Если будет время, постараюсь поправить.

>>614057

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

С точки зрения простоты как раз сгенерировать на сервере страничку из имеющихся данных будет проще. Однако, если команда большая, то разделение работы между двумя командами может упростить жизнь.
589 1616214
как сделать чатик на сайте?
590 1616354
Анончики (или ОП, если увидишь),поясните за Sphinx. Делаю задачу про файлообменник, на стадии реализации поиска через Сфинкс. Я правильно понимаю, что из сфинкса я получаю id записи в базе и потом беру данные из БД, используя полученный ранее id?
591 1616383
>>616354
Вопрос снят, разобрался
592 1616418
>>616210

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


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

Поправьте если ошибаюсь.
593 1616524
>>616210
Вот ещё вопрос насчет задачи - "На вход скрипта дан введенный пользователем номер телефона..." Это надо делать отдельный хтмл с полем ввода?
594 1616870
>>615139
Но ведь я не веб макака раб, я просто вебмастер и учу php и js для своих целей, для обслуживания и накручивания ништяков для своего сайта, но с тобой согласен, ебучие хохлядские макаки навысирали фрейворков как их навысирали их матери шлюхи за сало
595 1616876
>>614837
Александр Лущенко
596 1616893
Аноны, снова выхожу на связь

Дошёл до такого момента как - как сделать ЧПУ, я правильно понимаю что это называется роутинг?

Бля, неужели ЧПУ приходит к тому, что создаётся файл в котором каждую страницу прописывают вручную и указывают содержимое какого php файла выводить в контент по нужному url?

Или вручную это делается только на мелких проектах, а на крупных в автоматическом ражиме это происходит с помощью хранения названий всех ЧПУ в БД? И уже какой-то файл асоциируя контент всё в тот же файл подставляет нужный нам ЧПУ и вызывает нужный для него контент?

Бля, надеюсь понятно объяснил, в общем вопрос в том в чём заключается суть и концепция создания нужного мне урл для каждой страницы, это создание файла в котором всё это прописывается, или файла который хранит все эти урл в бд и с помощью хитровыебанного кода решает какой контент выводить?
597 1616895
И ещё такой вопрос, вчера дошёл до Монго ДБ, его же можно использовать совместно с PHP вместо MySQL?

А так по сути получается с монго дб можно работать и прямо из JS скрипта? Проблема в том что там будет палиться инвормация для связи с БД и для этого и используют Node JS?
598 1617265
>>616895
спроси в js треде. там за такое поясняли недавно если это не ты был
599 1617498
ОП, глянь, пожалуйста, задачу абитуриентов. Несколько месяцев назад ещё отправлял, но ты, видимо, пропустил. Сейчас файлообменник пишу, и не хотелось бы косяки переносить в него.

https://github.com/deadj/student-list
http://f914421i.beget.tech/
600 1617537
>>616893

>неужели ЧПУ приходит к тому, что создаётся файл в котором каждую страницу прописывают вручную и указывают содержимое какого php файла выводить в контент по нужному url?


Гугли MVC.
sage 601 1617559
Блять анонсы блять ну в что за хуйню вы превратили ламповый пиэйчпи? Что блять за композеры, тонны блять мегатонны говна и папок фреймворков, вы совсем ебанулись от лени? Что это за хуйня, нахуй блять так жить! М? Просто сука ебануться, чтобы просто написать код, раньше надо было просто создать файл индекс пиэйчпи, а щас блять я ещё должен тонный говна установить на пк и ебаться блять пердолиться как красноглазик в консоль, ну нахуй так жить м? Что за пидорас это придумал? Нахуй вы все его послушали? Ооп блять мвс блять конченные блять ну вас нахуй блять
602 1617572
Анонсы, я почитал про mysql на w3scool и запутался, какой способ подключения лучше использовать и в чём их отличия, нахуй их столько наштамповали? Из 3-х предложенных мне больше всего понравился по виду объектно ориентированный, по синтаксису процедурный, а PDO это пиздец что за хуйня вообще, вырвиглаз
603 1617573
>>617572

> почитал про mysql на w3scool и запутался, какой способ подключения лучше использовать и в чём их отличия, нахуй их столько наштамповали?


Хуёво же ты прочитал, если у тебя вопросы остались. Иди читай по новой.

>понравился по виду объектно ориентированный


>PDO это пиздец что за хуйня вообще, вырвиглаз


мда...
604 1617574
И как можно скачать фреймворк без всяких компостеров и терминалов, чтобы просто поковырять его внутренности, почему просто нельзя скачать ЗИП архив, что за аутизм с установками
605 1617575
>>617573
Ну вот что тут можно понять https://schoolsw3.com/php/php_mysql_connect.php на инглиш версии я не осилил
606 1617577
>>617575
И сразу в первых предложениях.

>Если вам нужен короткий ответ, выбирайте "Что вам нравится".


ты пиздец.
607 1617585
>>617559
Говнокодер порвался.
608 1617586
>>617574
Что тебе мешает с гитхаба zip скачать?
609 1617603
>>617577
Мне просто сдаётся что если выбирать то что нравится, вы изведётесь говном, хая какое небезопасное говно я выбрал, что так подключаются к БД только мудаки, значит отличие не в безопасности? Сейчас дошло что PDO ещё и через страйкер работает, вообще пиздец какой-то, нахуй его выслали, и прочитать нормальными русскими словами негде, теоретики с Ютуба сами не могут объяснить
610 1617607
>>617586
Спасибо я не знал
611 1617609
>>617603

>страйкер


Трай кетч
fix.
612 1617612
>>617559

>Что блять за композеры


Руками собрался либы менеджерить? Или свои велосипедить?

>тонны блять мегатонны говна и папок фреймворков


Проекты растут, нужен инструментарий, базовый каркасс веб приложения. Ты всё еще волен писать на ваниле, но по темпу разработки не поспеешь за васяном с фреймворком

>я ещё должен тонный говна установить на пк и ебаться блять пердолиться как красноглазик в консоль


Ставишь пхп, композер, установщик фреймворка, пишешь 1 команду в консоль - проект готов. Сложно?
613 1617614
>>617574
Давно пора освоить гит.

git clone ссылка на репу
614 1617621
>>617612

>Руками собрался либы менеджерить?


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

Это блять что получается, после написания на этих хуеворках, всё это говно из статысяч папок ещё и на сервер надо грузить? Пиздец, ещё и хостинг говном забивать, пиздец даунизм
615 1617625
>>617603
Щас бы слушать довенов которые критикуют СТАНДАРТНЫЕ приёмы работы с БД...
Суть в том, что ты выбираешь не технологию, а стиль кода. Любишь ООП - бери одно, любишь процедурный стиль - другое. Я вот процедурный люблю, потому-что PDO - яебал ручками прописывать. Но например в YII PDO наоборот быстрее получается. Потому-что 90% работы фрэймворк на себя берёт.
И да, если ты умеешь в ООП PHP, ты уже на кровне где нужно формировать своё мнение исходя из опыта использования.
616 1617630
>>617625
Спасибо, просто хотел понять в чём различия, говноютуберы посеяли сомнения своими домыслами как лучше, мне тоже больше нравится процедурный даже, никаких ебучих стрелочек, так то я пришёл с яваскрипта в пхп, по этому мне это роднее
617 1617632
>>617498
1.У тебя там XSS как минимум
2. При выборе страницы в списке передается параметр search если туда ввести например admin, он выдаст таблицу без значений(скуля скорее всего)
3. первый и второй текстбокс при реге называются имя и валидатор выдает одно и то же сообщение
618 1617633
Посоны, а в процедурном методе обязательно нужно в конце mysqli_close() делать или это опять теории ютуберов?
619 1617634
>>617632
Нашел причину вставки XSS, в валидаторе исправь, у тебя не строгая регулярка идет
620 1617640
>>617633
Соединение само закроется, когда скрипт завершит работу.
621 1617651
Блин посоны, а Check connection обязательно нужен? Нафига нам пользователям то показывать ошибку, он есть во всех примерах, там же и так выведет ошибку

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

>>617640
А как же миф типа если его не закрыть, то оно останется открытым в ожидании пользователя? Или это уже давно пофикшено? То есть можно забить на закрытие?
622 1617707
623 1617726
>>617632
Спасибо, анончик
624 1617727
>>617632
Объясни, пожалуйста, на счёт XSS. Прочитал урок ОП, как я понял XSS можно решить, используя htmlspecialchars(). Разве нет?
626 1617735
>>617707
Бля, беать он душный, вроде бы рофельный видос но больше пяти минут не осилил
627 1617737
>>617727
Возможность добавления появляется, потому что ты криво регулярку сделал и она у тебя англ символы пропускает и <>, а возможность вывода из-за htmlspecialchars() эта функция должна работать при выводе значений в таблице(в данном случаи), короче открой свой сайт, открой список через Ctrl+U и посмотри, что необычного есть у студента "Василий Вася", а потом глянь как он у тебя записан в бд.
628 1617739
>>617727
Тебе про XSS ещё в тот раз писали, помню как ты скидывал список, хз чё ты не исправил
629 1617766
>>617621

>почему просто нельзя скачать архив


Сейчас бы со скачкой ебаться, с архивом. Когда можно одной строкой поставить.
630 1617769
>>617630

>так то я пришёл с яваскрипта


Постоянно от яваскриптеров слышу - какой бэк простой.
Поздравляю - у тебя глазки раскрылись на всю эту парашу.
631 1617913
>>617737
Понял. Спасибо, что объяснил
632 1617931
>>616066
У меня очень зловонный пердеж, и я не знаю как сидеть с этим на работе - постоянно бегать в туалет только чтобы пердануть? А если не успею, или мне расхочется по пути, а это вредно сдерживать газы, что посоветуешь по этому поводу кроме очевидной удаленки?
634 1617940
>>617937
Выглядит как жаваскрипт.
635 1617945
>>617621

>Вот тут вот не понял, я имею ввиду почему просто нельзя скачать архив


Какой архив?
Под новый проект будешь каждый раз качать пару десятков архивов?
Потом будешь разгребать совместимость версий либ, чтобы всё со всем работало.

Нет бы взять композер, который берет эту задачу на себя
636 1617948
>>617621

> всё это говно из статысяч папок ещё и на сервер надо грузить


Ты грузишь только код своего проекта. Либы ставятся на сервере одной командой: composer install
637 1618019
>>617937
Выглядит охуенно.
638 1618108
ОП, и/или другой грамотный господин. Ты когда то говорил о том как в приложени совместить ноду + пхп. Вот я хочу такое что то запилить.
Но как концептуально это должно выглядеть?
Нода-сервер принимает запрос, и отправляет этот запрос на api пхп сервера? ПХП делает какое то оче-долгое математическое вычисление фибоначи до миллиарда считает ( которое в ноде бы заблокировало бы цикл libuv ), пхп завершает вычисления, нода резолвит этот запрос и возвращает клиенту данные.
Как то так это выглядит? Я понимаю что пхп для математических вычислений это наркомания.

А воообще ирл какой кейс пхп + нода может быть?
639 1618118
>>618019
Чего там охуенного, что работа с фронтом в бэк уезжает? Очередной васянский лисопед.

Давай ещё вставки js генерить на пхп? Вообще охуеешь при отладке.
640 1618125
>>618118

>Давай ещё вставки js генерить на пхп?


Yii же
641 1618130
>>618125
Не работал с ним. Говорят - параша.
Чисто на вскидку - там нехороший мужчина впиливает обработку событий в шаблонизатор. И к этому говну, как я понял, ещё и жс прилагается. Получается, что под соусом наглядности нам фуфло двигают: работы - больше, код - запутаннее, зато очередной васян звёздочек отхватит от наивных дурачков вроде этого >>618019
642 1618135
Аноны, я не могу никак понять как работают ларавел, симфони, юи2 и т.п. фреймворки, для меня эти подключения классов, все эти модели, вьюверы, контроллеры - это какой-то пиздец, я не понимаю их логику и почему они считают что так лучше, по мне это какой-то пиздец с тонной ненужных файлов и назовём их редиректами, когда итоговый файл лежит со всем не там где должен по логики запроса в урл, а совсем в других папках и эти ебучие подключения тонн файлов в другие файлы которые в свою очередь тоже поключают ещё тонны файлов, блять, это пиздец какой-то

Я это всё учу просто для себя, идти с этим на работу я как минимум ссу, потому что засмеют да и спецов пиздюков там уже наверняка тонны которые щёлкают это как семечки и будут смотреь на меня как на дебила

Я к чему пришёл, я уже знаю js и php, мне показлось если сейчас изучить vue, а потом angular я смогу понять принцип всего этого взаимодействия и того в чём задумка разработчиков фреймворком для php?
643 1618137
>>618130

>Говорят - параша


Всё так. В 3 версии yii хотят уйти от этого, но уже поздно, yii никому нахер не нужен
644 1618138
>>617945
Теперь я запутался ещё больше, что за совместимости ещё там нужны? Почему нет просто архива с исходниками, те же папки с файлами но в архиве
645 1618140
>>618138
Тебе нужно поставить 2 либы. У одной версия X, у второй Y. Версия X требует версии YY у второго.
А теперь помножь это на сотню либ
646 1618142
>>618135

>Я это всё учу просто для себя, идти с этим на работу я как минимум ссу, потому что засмеют


Тебя даже на собес не позовут без указания знания пары MVC фреймворков

>если сейчас изучить vue, а потом angular я смогу понять принцип всего этого взаимодействия


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

Совет как изучить MVC - берешь курсец laracasts или елисеева и пилишь паралеллельно видео проект из курса. Потом поймешь, зачем нужно разделять к примеру логику представления от моделей
647 1618149
>>618140
Это всё из-з этого ебучие подхода с git? Где каждый файл блять каждую минуту меняется, что сука нельзя просто скачать ебучий архим, блять ну нахуй так жить, мудаки сука напридумывали говна и рады
648 1618151
>>618149
Добро пожаловать в интернет.
Еще скажи, что гитом не умеешь пользоваться - любая контора тут же нахер пошлет
649 1618152
>>618142

>т.к. ангуляр следует примерно той же архитектуре


По этому и придумал дял себя такой лайт вариант, сперва вью, чтобы вообще понять зачем ебанаты ушли от ванилы, потому ангулар, чтобы понять зачем ебанаты всё эторазделили на миллион папок и библиотек и потом уже ларавел, просто js я пока понимаю больше
650 1618154
>>618151
Не умею, из работы работал пару месяцев в местном провайдере, всё остальное время занимался пиратскими сайтами, а сейчас хочется для себя понять принципы и куда всё движется, не всю же жизнь ставочки и казино рекламировать
651 1618155
>>618152

>зачем ебанаты ушли от ванилы


Затем же, зачем придумали ООП.
Чтобы пилить более сложные проекты. В реальной работе не будет laba1.cpp на 10 строк. Это будут ебы на несколько десятков или даже сотен тысяч строк
652 1618156
>>607853

>Как в жс?


Как в жаве, быдло
653 1618158
>>618156
Да я смотрю пыха вообще в жаву превращается. В какой-нить 10 версии уже можно будет пыхарями жавистов заменять. Все охуеют от такого поворота.
654 1618162
>>618158
Если асинхронный io подвезут, то еще и go сдохнет
655 1618164
>>618155
Вот все на ютуб еговорят сложные проекты, а что блять такое сложные проекты? Вывести список товаров на алике - это блять сложно? И по этому надо так голову ломать ради их видения того как всё должно работать?
656 1618166
>>618164

>Вывести список товаров на алике - это блять сложно


Да, сложно. Там может быть с десяток таблиц для хранения данных по товарам + склады + акции + еще хуета какая. И нужно умудриться сделать так, чтобы это отрабатывало за адекватное время.
sage 657 1618167
>>617931
Не обедать на работе и не жрать всякое говно. Не пердеть, короче. У меня одно время была проблема вонючих ног, лол, решил всякими средствами, но некоторое время было неловко.
658 1618169
>>618164

>Вывести список товаров на алике - это блять сложно


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

На самом деле действительно сложные проекты сложные уже настолько, что какой-то единой инфраструктуры у них вообще нет, кругом микросервисы, которые общаются между собой по заданным протоколам, каждый сервис разрабатывают отдельные разрабы на своем стеке и как работает какой-то другой в душе не ебут даже, чисто по той причине, что невозможно синхронизировать такую разработку.
659 1618173
Блять мне просто стыдно что программисты так деградровали и убили веб разработку, превратив всё в кучу говна из костылей на костылях, всё из-за своей лени и подходе лишь бы быстрее высрать, получть бабки и сбежать на балии ебись оно конём как оно после него будет работать, блядская хипсерская сущность пидораса
660 1618177
>>618173
Ты сразу в двух тредах рвёшься что ли? Эка у тебя пердак разметало от собственной необучаемости.
661 1618178
>>618173

>деградровали и убили веб разработку


А десктоп-разработку кто убил?
Кто в андроид-апи насрал, почему оно состоит из костылей абсолютно полностью?
Кто в C++ насрал, почему эта говнина такая кривая и немощная, что на ней невозможно разрабатывать сложный надежный софт?
662 1618181
Смерть хипстерам
663 1618183
>>618178

>C++


И не надо тут пиздеть, мол, давно делали, в ту пору можно было говно лепить.
Тот же пых уже несколько мажорных версий поменял и PHP7 - это совсем не то самое, что PHP4.
А кресты как были кривой парашей, так и остались
664 1618191
Посмотрел этот высер https://www.youtube.com/watch?v=2qdpP-jWH5E

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

Где вообще все эти блять невьебенные бекендеры и фронтендеры работают? Я вот чёто нихуя ни 1 не вижу и не слышу, почитав интернет и посмотрев ютуб куда не плюнь везде невьебенный программист, НО ГДЕ БЛЯТЬ ОНИ ВСЕ, мне вот нарример просто интересно посмотреть на такую контору, что эти распиздяи за 200к там такого невьебатого делают что имеют такое невьебенное чсв и считают что жизнь удалась, по мне так это ленивые создающие вид работы черви, ну не видел я ни одного за работой, не верю я что там пиздец так всё сложно что прям пизда
665 1618194
>>618181
тебе в руби тред
666 1618205
>>618191
Завидно?
667 1618215
>>618205
Нет же, я хочу понять чем я буду заниматься, если решу окунуться в это говно из костылей и мочи с головой
668 1618221
>>618191
Фичи всякие добавляют, ящитаю. Вот год назад мой банк не умел в статистику, обмен валют на сайте и много других операций, сейчас все это прикрутили, стало заебись.
669 1618222
>>618221

>Фичи всякие добавляют


Всё верно. Фичи, дебаг, документация, прочая поддержка. Запил сервиса это только начало и никто на этом не останавливается. Зачастую сервис начинает работать и приносить прибыль будучи даже не дописанным до полного функционала. Ну а потом программист сидит как минимум для того, чтобы было кому разбираться в этом говне если что-то упадёт.
670 1618223
почему пыху чморят?
671 1618224
>>618223
Кто чморит?
672 1618225
>>618224
все,даже сами пхпешники
673 1618227
>>618225
Таблетки попей что ли - у тебя галлюцинации.
674 1618234
>>618225
потому что вебдев - это "не тру программинг"
675 1618241
>>618234

>тру программинг


чоэта?
676 1618272
>>618215
Допиливать какой-нить проект на mvc фреймворке на ~100к строк
677 1618285

>>1618267


>создав сайт с говном можно иметь в 2 раза больше с рекламы


Если б я хотел бы говно рекламировать - не лез бы в программирование. Ты совсем даун?
678 1618288
Опа.
679 1618316
Сап, двач. Короче, сижу на петушиной работе на похапе уже 4 месяца. Мне скучно, хочу найти другое место. Посоветуйте чё написать в гитхабе.
Я фулстек, знаю laravel, vue, angular и немножко ноды. Но проект хочу делать на похыче
Чё сделать заебатого? Идей вообще нет. Желательно что-то такое, что можно рили хостануть и чтоб польза была.

Единственное что в голову лезет - это приложение по генерации тестов и опросов, но это же такая лажа...
680 1618368
>>618316
shadowcloud
3123123123131231.png8 Кб, 514x310
681 1618406
>>599201 (OP)
Приветствую) Вопрос от новичка:
в пятой строке все верно написал?
682 1618411
>>618406
Название переменной неудачное. Оно должно говорить о содержимом, а не быть каким-то невнятным глаголом.
683 1618577
>>618167

>Не обедать на работе



Ну охуеть теперь, мне что голодным сидеть?
684 1618579
>>618224
Он наверное имеет ввиду ХуйДихо и прочих программистов с ютуба
685 1618632
>>618222

>документация


А как это делается, где можно почитать или посмотреть образец составления документации?
686 1618677
>>618579
Они ж ролики по пхп делают - старательно пересказывают мануалы, разбавляя рекламой каждые 10 минут.
687 1618724
А почему люди на cms гонят? - это же админка, которую без готовой cms надо будет самому делать? То есть без cms, самописной или покупной - не обойтись для какого-нибудь интернет магазины?
image.png16 Кб, 515x212
688 1618769
Анонсы, скачал с гитхаба похапе фреймворков для вскрытия, я правильно понимаю, что пердолиться в сосноль и ставить компостер нужно для того чтобы он к этим мёртворождённым докачивал всякие доп. жс библиотеки и прочую хуйню чтобы этот гондон штопаный ожил и начал работать?

В копмостер.жсон как раз и написано какое говно ему надо скачать чтобы это говно наполнилось говном и мясом и перестало быть просто высушенным скелетом?

На пике я так понимаю это типа как в нормальных языках подключение библиотек происходит? В данном случаи других каталогов фреймворка с прочим говном?

Тред вроде бы утонул, почему не пересоздают?
689 1618770
>>618724
Наверно потому что весь код цмс в открытом доступе и все кулцхацкеры их уже изъебали и прошурстрили от и до и знают с какой стороны к ним подойти чтобы присунуть админу в жопу и в рот
690 1618775
>>618724

>А почему люди на cms гонят?


Потому что там практически нет написания кода. По сути конфигурируешь готовую систему. Т.е. к разработке относится опосредованно.
691 1618787
>>618769
Композер ставит только php библиотеки, с жс он не работает.

>В копмостер.жсон как раз и написано какое говно ему надо скачать чтобы это говно наполнилось говном и мясом и перестало быть просто высушенным скелетом?


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

>На пике я так понимаю это типа как в нормальных языках подключение библиотек происходит?


Вроде того. Далее либо создаешь нужный объект, либо через DI тащишь что нужно.
692 1618790
>>618787
Зачем ты отвечаешь зелени?
693 1618792
>>618769

Да, композер скачивает (в папку vendor), устанавливает и обеспечивает автозагрузку библиотек, прописанных в composer.json.

Ты можешь найти любую библиотеку, зайдя на https://packagist.org/ и вбив ее имя из composer.json. Там будет выдана ссылка на гитхаб, на котором ты можешь скачать библиотеку архивом и вручную установить в папку vendor, если у тебя много свободного времени, чтобы делать вручную то, что может сделать программа.

Композер также настраивает автозагрузку для кода и всех сторонних библиотек. Почитать про автозагрузку можно тут https://github.com/codedokode/pasta/blob/master/php/autoload.md Про композер можно почитать в документации к нему на англ.

Если ты хочешь разбираться в фреймворках, тебе надо понимать ООП и некоторые паттерны. Про ООП ты можешь почитать, открыв главу "ООП" из учебника в шапке, или в любом другом учебнике. Куча полезной информации, например, про паттерны работы с БД в фрйемворках или шаблонизацию, есть тут https://github.com/codedokode/pasta/

>>618775

Ну так она и называется - система управления контентом, а не система написания кода.
694 1618800
>>618769

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

Тред пересоздадим на 800-900 посте, или позже, если у меня будет мало времени.

>>618632

Документации бывают разные. Есть документация по коду - 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/
695 1618801
>>618790
Делать нехуй
696 1618803
>>618191

Если ты хороший специалист, то даже если тебя уволят, у тебя будет несколько новых предложений о работе.

Платить 200к не проблема, если человек приносит компании больше прибыли. Ну, например, автоматизирует работу, которую бы делали несколько других человек. Или делает продукт, который продается намного дороже/приносит прибыль.

То, что ты не видел, не значит, что этого нет.

>>618164

Ты когда-нибудь видел магазин изнутри? "просто список товаров" - это не просто список товаров, а список от разных продавцов, с проверкой наличия, с импортом, с расчетом скидок и предложений, с хитрой сортировкой, дающей максимальную прибыль, с всякими заманивающими надписями (осталось полчаса до конца скидки).

По твоей логике, дом построить - тоже просто кирпичи друг на друга положить. Зачем проектировать, делать расчеты, производственные графики, оптимизацию снабжения итд.
697 1618815
>>618152

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

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

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

Я тебе советую: попробуй сделать какую-то экранную форму с зависимостями сначала на чистом JS, а потом на фреймворке. Например: форма заказа в магазине, форма выдачи кредита (с кучей условий, проверок, зависимых друг от друга полей). Или еще лучше: сделай ленту новостей. Просто есть новости, в виде бесконечной ленты, которая подтягивается с сервера. Новости можно читать, можно лайкать и комментировать. Есть также категории можно смотреть новости только в категории. Еще круче, если твое приложение сможет кешировать данные и работать даже при временном пропадании интернета (например: ты ставишь лайк, и при появлении интернета он отправляется на сервер и фиксируется окончательно). В ходе разработки такого приложения тебе придется и промисы изучать, и реактивное программирование, и может rx.js
698 1618817
>>618790
Всмысле бля, а зачем этот тред нужен? Прочитай название "Клуб изучающих PHP". Или ты чсв анимешник который считает себя тру прогером и всех кто только начинает ненавидит потому что знает больше них и выше них и считает их нелью?Анимешники нелюдь и есть кста

>>618787
>>618792
>>618800
Спасибо за развёрнутые ответы аноны, не понял только что за библиотеки качает например ларавел, в нём же вроде как уже всё должно быть, или у них такая задумка изначально, не писать ещё одини велосипеды, а написать код связующий кучи всеми использующихся библиотек и он получается в момент скачивает качает последнюю их версию которую разрабы ларавела посчитали совместимой с их кодом и прописали в композер файлах

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

Ну и по жс либам, неужели он не качает какой-нибудь бутстрап или ангуляры с вьювами
699 1618819
Кстати аноны что думаете об этом барадаче? Вроде хорошо объясняет основы https://www.youtube.com/channel/UCeObZv89Stb2xLtjLJ0De3Q только после него нормально смог понять некоторые вещи
700 1618829
>>618817

>Или ты чсв


Как охуевшее чсв тут ведешь себя ты, поэтому и впизду тебе отвечать.
701 1618837
>>618149

С гитхаба можно скачать zip-архив любой версии кода. Разве плохо? Также, у библиотек часто есть страница "релизы", где есть архивы с кодом определенных, протестированных версий.

Ты лишь демонстрируешь свою неграмотность. Почему бы тебе нормально не спросить то, что непонятно, и не узнать ответ.

>>618138

Архив есть, но тебе надо скачать отдельно основную программу и отдельно каждую библиотеку, которая ей нужна. И да, любая версия не подойдет, а только та, которая указана в composer.json.

>>618135

Для начала, почему бы тебе не почитать про 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. В твоем самописном коде это есть? Или ты предлагаешь тратить рабочее время и пытаться сделать то, что уже сделано другими?
701 1618837
>>618149

С гитхаба можно скачать zip-архив любой версии кода. Разве плохо? Также, у библиотек часто есть страница "релизы", где есть архивы с кодом определенных, протестированных версий.

Ты лишь демонстрируешь свою неграмотность. Почему бы тебе нормально не спросить то, что непонятно, и не узнать ответ.

>>618138

Архив есть, но тебе надо скачать отдельно основную программу и отдельно каждую библиотеку, которая ей нужна. И да, любая версия не подойдет, а только та, которая указана в composer.json.

>>618135

Для начала, почему бы тебе не почитать про 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. В твоем самописном коде это есть? Или ты предлагаешь тратить рабочее время и пытаться сделать то, что уже сделано другими?
702 1618847
>>618792

>codedokode/pasta


Это охуенно, просто какой-то олдскулл, спасибо
703 1618849
>>618829
Я чсв? Да ты чего, я обычный мамкин херой
704 1618851
>>618135

Также, не берись за Симфони сразу, начни со Slim. И прочти документацию или перевод или уроки по нему, а параллельно изучай код. Слим маленький, там по сути только роутер + request/response + DI (про DI тебе тоже надо почитать отдельно).

>>618108

Это извращение, по моему. Ну например: у тебя нет ограничений и при большом числе запросов запустится куча процессов PHP и все зависнет намертво. То есть твое решение работает "на авось". Это плохое решение.

Тебе нужна очередь задач. Код веб-скрипта создает задачу, и кладет в очередь. Рабочие-воркеры, запущенные из CLI, следят за очередью и берут из нее задачи, выполняют, кладут результат в другую очередь или в БД. Ты определяешь число воркеров и твой сервер никогда не перегружается, разве что задачи начинают обрабатываться с большей задержкой. Для этого не нужен PHP.

>>617931

Сходи к врачу для начала и подбери диету. Только вот зачем этот оффтопик писать в наш тред про программирование?
705 1618861
>>618770
А битрикс например в открытом доступе разве? Может ли быть дело только в безопасности? - разработчики cms могут ведь просто закрыть все дыры, а хейт останется.
>>618775

> По сути конфигурируешь готовую систему.


> Т.е. к разработке относится опосредованно.


Не вижу связи. И там ведь готова только админка - надо её как-то связать с фронтом, фронт надо написать или нет?, вроде бы компоненты cms можно редактировать, писать свои.
706 1618872
>>618861

>хейт останется.


Ты ведь наверняка знаешь ответ на свой вопрос. Это ужасный код, но он подходит бизнесу и потому живет. Разработчикам не нравится работать с говнокодом, поэтому мы хейтим. И по сути мало кто с этим работает из тех, у кого голова на плечах. Обычно на долю цмсок приходятся эникеи всякие.
Ты скорее всего подумаешь, что определение говнокода субъективно. В мелочах да, но в общем случае код всяких битриксов никакой здравомыслящий разраб не назовет нормальным.
Алсо, именно эта вот срань сделала плохую репутацию пхп.
707 1618873
>>617651

Молодец. Ты рассуждаешь правильно, а в уроке тебя учат фигне. Подумай: что на самом деле надо делать при возникновении ошибки в веб-скрипте? Зачем пользователю текст ошибки? Надо логгировать ошибку в стандартный лог (журнал) ошибок PHP, отдавать HTTP-код состояния 5xx, а пользователю показывать красивую заглушку, чтобы он понял, что на сайте временная проблема и админы в курсе. Некоторые еще в реальном/почти реальном времени эту ошибку постят в какой-нибудь чат. Теперь можешь попробовать это реализовать и запостить код на проверку

Урок про исключения, может он тебе пригодится: https://github.com/codedokode/pasta/blob/master/php/exceptions.md

> А как же миф типа если его не закрыть, то оно останется открытым в ожидании пользователя?



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

>>617633

mysqli_close имеет тот плюс, что позволяет тебе увидеть какую-то ошибку (например: не все данные получены). Или понять, что соединение успешно закрыто. При автоматическом закрытии ошибки скорее всего не логгируются.

>>617621

Можно скачать руками. Можно не использовать библиотеки и все писать с нуля самому.

>>617603

PDO поддерживает исключения по желанию. try/catch писать не требуется, изучи исключения для начала: https://github.com/codedokode/pasta/blob/master/php/exceptions.md
708 1618883
>>618817

Почему бы тебе самому не ответить на свой вопрос. Возьми главный репозиторий 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. У них есть свой сайт-репозиторий, где можно искать пакеты по названию.
709 1618885
>>618803
Неужели эту задачу можно делать годами целым блять отделом дормоедов, я не верю, стройку и то за пол года делают
710 1618894
>>618815
Ванилу давно заменил jquery, потому что сам понял что это куча лишних повторений, хочешь сказать что тут и jquery неосиляет такие задачи что ты описал, по этому и хочу сперва внянуться в вью, на вервый взгляд его синктакси понравился больше, ну а потом постепенно и в бекенд втянуться

Аноны, в каком возрасте уже поздно втягиваться в веб дев? Ведь в выборе межуд тобой стоит куча вариантов с пездюками

Если например в 30 начать окунаться в веб дев, мне кажется так можно и 40 летним девственником остаться в полнмо одиночестве
711 1618900
>>618837
В общем после твоего описания могу сказать что не стоит смотреть пидоров самоучек с ютуба, это они так засрали голову что сложно понять то что ты описал без практики, а какая может быть практика у начинающего, спасибо за инфу попробую её усвоить
712 1618903
>>618894

>jquery


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

>хочешь сказать что тут и jquery неосиляет такие задачи что ты описал


Осиляет не лучше, чем ванила. Jquery, как ты мог бы уже заметить, вообще о другом. Она не дает каких-то новых фич для разработки, просто немного код меняет. Раньше считалось, что в сторону упрощения и лаконичности, сейчас уже практически никем не считается.
713 1618913
>>618873

>codedokode/pasta


Ору анон, у тебя есть ответы на всё, спасибо что мучаешься с нами
714 1618918
>>618883
Ещё раз спасибо, как будто говно из головы выгрузил и начал понимать что к чему
715 1618927
>>618903
Ну почему же, если добавить к нему ещё плагины https://plugins.jquery.com/ очень даже чего много нового он можеи предложить, вью пока ещё сильно не изучал, но думаю там не особо много нового будет с чем бы джейквери не справился, посмотрим
716 1618932
717 1618933
>>618927

>не особо много нового будет


>посмотрим


Ты для себя откроешь совершенно другой мир.
718 1618984
>>618819
С виду уровень хаудихо. 95% воды, 5% пересказ документации.
719 1618989
>>618900

>не стоит смотреть пидоров самоучек с ютуба


С этого и стоило начать. В ру сегменте можно максимум 1-2 чела назвать, материалы которых будут полезны. Остальное - инфомусор.
720 1618995
>>618861

>разработчики cms могут ведь просто закрыть все дыры


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

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

Как-то так и приходим к тому, что есть. Отвратительная кодовая база платформы, популярность которой обеспечена маркетингом.
721 1618998
>>618885

>Неужели эту задачу можно делать годами целым блять отделом дормоедов


Да, вполне можно годами делать гигантов уровня алика.
Какой-нибудь средней величины продукт вполне может потребовать на разработку пару человеколет.
Раньше софт писали десятилетиями в прошлом веке.
722 1619027
>>618998
Судя по алику, делают его по 1 строчке кода в сутки, как вспомню его вырвиглазные описания когда он только стал на русском языке и охуеваю, что-то уровня веб сайтов 90-х годов с таблицами и розовыми рамками и прочим, неужели этим обмуткам так сложно сделать нормальный редактор для продавцов, чтобы они делали вменяемое описание, а с этих их опечаток и строк с маленькой буквы и кучей пробелов и знаков препинания, как блять иглами по глазам
723 1619249
спрашивал в вин10 треде так что думаю будет не лишним и тут спросить, мможет кто сталкивался
анчоусы, есть ноутбук на вин10. устанавливал опенсервер, попросил перезагрузиться после становки чтобы заработал серак mysql. в итоге после перезагрузки отвалился вай фай. в устройствах вот че показывает. перезагрузился в xubuntu - там все пашет как часы. в чем может быть трабла?
2313212.png74 Кб, 706x518
724 1619266
<?php
echo "Снова вопрос от нуба:\n";

№1) http://codepad.org/MdeA8uM6
№2) http://codepad.org/TB3jendg

Операция "$teaBags + 1;" в переменной $teaBagsAfter работает, но если написать форму операции попроще "$teaBags ++" (№2) то получается пи*дец.

Собственно, что я не так написал?
?>
725 1619325
>>619266
Поясняю. Оператор "++", ещё называется постинкрементом. То есть вначале происходит присвоение значения, после чего идёт увеличение на +1.
726 1619448
>>619325
https://ideone.com/34kOLI
Так что я в ПЯТОЙ строчке неправильно написал то?

Блин, ощущение что я зря просто ради эксперимента накалякал текст, вдруг там вообще операций ещё не хватает, которые ещё не начал изучать...
727 1619545
>>619448
Объясняю:

$teaBags = 25;
Тут всё логично, $teaBags ровен 25
$teaBagsAfter = $teaBags ++;
А вот тут идут хитрости: $teaBagsAfter равен $teaBags,то есть 25, после чего происходит инкремент $teaBags на единичку и он становится 26.
728 1619564
>>619545
АНОН, не хочу утомлять конечно Я БЛ#ЯТЬ НЕ ТУ ССЫЛКУ КИНУЛ! ТАМ ВСЁ ВЕРНО!
У меня вопрос по скриншотам был.
$teaBangsAfter = $teaBangs ++; -вот в этом варианте получается нелогичная ситуация см 2 скрин. - ПОЧЕМУ?
Пожалуйста, вчитайся во-второй скрин
пробую еще раз запилить нормальную ссылку https://ideone.com/Mt0r0V
729 1619600
>>619564
Постфиксный инкремент сначала возвращает старое значение, а потом меняет существующее. По этому у тебя так и выходит.
Кроме того раз уж ты делаешь с двумя переменными, то тебе не нужно старое значение менять, а инкременты и декременты это делают. На твоем коде лучше подойдет просто $teaBags + 1.
А еще можешь вообще без второй переменной обойтись.
730 1619674
>>618577
Ну или перди. А чего ты хотел? Обожраться своим смуззи и не пердеть вонюче?
731 1619677
>>618769

> сосноль


> компостер


> и прочую хуйню


> этот гондон штопаный


> какое говно ему надо


> чтобы это говно наполнилось говном


> типа как в нормальных языках


> с прочим говном



С таким отношением ты даже в PHP не разберешься.
732 1619718
кто пользовался свулом в проде?
733 1619736
Как убедить руководтсво не использовать Битрикс? Две маркетолухички крепко сели на лицо директору, и мои доводы перестали работать. В целом-то мне пох, я просто найду другую работу, но жалко компанию, в которой больше года проработал и столько всего хорошего сделал.
734 1619752
>>619736

>я просто найду другую работу


this.
Других вариантов нет.
735 1619759
>>619736
Скажи честно, что Bitrix24 - это CRM система, за которую надо платить каждый год тысячи рублей.
736 1619834
>>619736
Похер на компанию, для себя живешь, а не для дяди.
Ливай сразу как только завезут битрикс. А лучше превентивными мерами: начать искать другую галеру + обозначить, что с этим говном работать не будешь.
737 1619887
>>619600
Спасибо, адекватный анон! впредь не буду выдумывать задания себе если надо будет, то поищу в нете, также смотреть о целесообразности как в данном случае.
738 1619891
>>617931
Моя тян также на работе держит газок. Терпит до прихода домой 12ч, а как придёт - пердит на два этажа вверх-вниз.
739 1619893
В треде есть программисты с больной шеей? Как жизнь живёте? Какие меры принимаете по улучшению остеоили как там его, забыл что-тохандроза? Все-таки работа седячая, горбиться за монитором призодится не один час.
740 1619896
>>619893
У меня походу все виды остеохандроза. Да и думаю у многих тут, просто не все проверяются.
Как-то терплю, но иногда очень бесит, особенно шейный. Иногда вспоминаю и делаю зарядку, но толку от нее ноль.
741 1619924
>>619896
100% ты делаешь неправильную зарядку, я так один раз в больницу слёг на 2-3 недели (неправильно и не то делал, аж перекосило подбородком к груди).
Советую записаться к ...не массажисту, а покруче, я не помню как у них профессия называется, но некоторые из них обучают всяких ссаненьких массажистов (которые не шарят за работу мышц, костей и т.д.). Короче этот специалист сделает массаж за 1-2к и покажет упражнения которые именно тебе подойдут, то есть индивидуально - А там уже от тебя зависит, я например делаю когда только заболит, хотя надо каждый день делать.
742 1619926
>>619924
Мануальщики?

>я например делаю когда только заболит


У меня чаще ощущение давления, чем боль.
743 1619929
>>619736

>Две маркетолухички


Можно попытаться намекнуть этому директору, что тебе как программисту виднее.
744 1619931
>>619929
Он пришел к мнению, что я просто ленюсь.
745 1619939
>>619931
Тогда без вариантов - меняй контору.
746 1619949
>>619249

Скорее всего опенсервер не при чем.

>>613334

> Приведите пожалуйста аргументы почему нужно шифровать 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 напрямую, но может, и через Доктрину будет приемлемая скорость.
746 1619949
>>619249

Скорее всего опенсервер не при чем.

>>613334

> Приведите пожалуйста аргументы почему нужно шифровать 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 напрямую, но может, и через Доктрину будет приемлемая скорость.
748 1620015
749 1620017
>>619956
Лучше все-таки с мануальным терапевтом, который тебя помассажирует и ну ты понял составит упражнения
750 1620252
>>619893
>>619896
По поводу остеохондроза могу одну неочевидную вещь посоветовать - если боли хронические и длятся более трех месяцев, начинайте пить антидепрессанты. Остеохондроз это просто дегенеративные изменения - это не должно болеть, если у вас 1-2 степень. У меня вот 2 степень грудного остеохондроза - были лютейшие боли до антидепрессантов, теперь иногда есть дискомфорт, но в целом болей нет. У друга ему врач в итоге тоже антидепрессанты назначил сначала фенибут правда есть шейный остеохондроз - как я понял, шейный это пиздос, но тоже можно загнать в ремиссию, а болей быть по-хорошему не должно.
751 1620447
Двач, как решить задачу с регулярками где надо найти правильные номера телефона?
Я понял что мне надо найти +7|8 после чего должны быть 10 чисел и между ними могут быть скобки, пробелы или -
И если 10 чисел найти можно просто вписав [0-9]{10} то как сделать так чтобы между ними еще и эти символы находило?
Все что пока что смог сделать это ^(\+ ?7| ?8)([0-9]{10}[- ()]?+)$ , но оно не работает
752 1620526
Аноны, посоветуйте хорошую php сборочку с гитхаба которая собирает данные о пользователи, то есть я например с помощью ajax отправляю запрос на нужный файл, а они записывает айпи, страницу с которой был запрос и возможно дополнительный get запрос который я передам ajax вместе с url файла сборочки
753 1620531
>>619893
А лучше скажите как выбрать нормальное кресло для долгого сидения, НУ ЖЕ АНОНЫ
754 1620609
>>620252
Вообще актуальная тема. Надо в медаче тред поискать для ИТшников. Набор болячек-то у всех одинаковый почти.
755 1620721
>>620447

Если писать [0-9]{10} то между цифрами не может быть других символов. Но ты можешь использовать здесь круглые скобки, чтобы написать:

(ровно 1 цифра + любые символы){10}

И тогда повторяться 10 раз будет все выражение в круглых скобках.
756 1620746
>>620609
Спинотред есть, только толку от него мало. Не те подходы к лечению там исповедуют. Глазотред - основной посыл в том, что ко врачу надо идти. Остальные проблемы опциональные.
757 1620783
>>620526
Возьми парсер, да напиши. Дел на один вечер.
758 1620834
>>620783
Почитав и посмотрел эти ваши ютубчики, я понял что писать велосипед заново - это признак дурачка, и что на этих ваших гитхабах уже всё написано и отшлифовано тоннами програмистов, вот и прошу поделиться хорошим движком/модулем на php по сбору статистики + возможность передавать в него свои get данные и всё это через ajax, в моём случае айди пользователя, ну или как подобное искать в гитхабе
759 1620869
>>620526

Если тебя устраивает стороннее решение, что это Гугл Аналитика или Яндекс Метрика. Ты удивишься от того, сколько там возможностей и какие красивые графики там строятся.

Если не хочется отдавать данные, то установи Piwik к себе.
760 1620931
>>620834
У тебя задача без конкретики. Не понятно, откуда ты собрался собирать данные, в каком формате хранить.
761 1620941
>>620834

>передавать в него свои get данные и всё это через ajax


Чё сказал? Какие данные передавать?
Не лезь.
762 1620955
>>620721
^(\+ ?7| ?8)([0-9]-? ?\(?\)?){10}$
Если попробовать написать в () то оно искать будет ровно 10 символов. То есть если будет номер 8(1)234567890 то регулярка его пропустит из за того что там 12 знаков а не 10. Как сделать чтобы регулярка находила ровно 10 цифр между которыми может быть любое кол-во знаков?
image.png33 Кб, 971x402
763 1620987
https://developers.google.com/recaptcha/docs/v3

Поясните кто мб сталкивался с интеграцией капчи, не совсем понимаю что должно быть внутри метода вместо '...'
764 1621058
>>620955
Решил
(\+ ?7| ?8)(([-0() ]*[0-9])){10}$
WEB.jpg183 Кб, 1024x677
Помогите с ошибкой говнокодер 765 1621273
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>
WEB.jpg183 Кб, 1024x677
Помогите с ошибкой говнокодер 765 1621273
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>
говнокодер 766 1621278
>>621273
Так лучше
<!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 == +)
$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>
говнокодер 766 1621278
>>621273
Так лучше
<!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 == +)
$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>
767 1621281
>>621273

>if($p == +)


if($p == '+')
Если я правильно понял твой код.
В следующий раз используй Switch
768 1621330
>>621281

>В следующий раз используй Switch


switch ($p)
case '+':
$c=$a+$b;
case '-':
$c=$a==0 or $b==0 ? $a-$b: error;
case '/':
$c=$a/$b
case '':
$c=$a
$b
769 1621347
>>621281
Два чая этому сеньору! Реально, спасибо большое, весь вечер ебался думал что не так, а свитч пока не знаю конструкции думаю буду сейчас разбираться.
770 1621420
>>621347
Поставил бы phpstorm, он бы подсветил эту ошибку
771 1621452
>>621420
Поставлю, спасибо за советы, они мне сейчас бесценные просто,чувствую себя слепым щенком просто
772 1621526
>>620931
>>620941
Ну смотрите, пользователь заходит на страницу, нажимает кнопочки, а в это время повешанные на них события запускают ajax на url нашего php скрипта и подцепляют к нему уникальные айди, например mysite.ru/stat.php?iduser=2281488, а этот скрипт сохраняет в бд его айкпи, страницу с которой был запрос, его айди и ещё чего небудь, а потом я пишу админку или она может быть со скриптом, где я удобно смогу с какого url было больше всего запросов, какой пользователь какие урл посмотрел и сколько раз нажал заскриптованную кнопку, ну и с каких айпи на какие url были запросы, плюс можно сохранить их юзерагент чтобы отловить ботов и забанить их нахуй и в пизду по айпи, можно самому написать, но мне кажется это уже 100500 написали и отшлифовали на гитхабе, а всякие метрики и гугланалитики это для пидорасов и хипстеров с магбуком
773 1621653
>>621420
Маркетолог джетбрейнс, залогинься.
774 1621815
>>621653
Так не обязательно платить)
775 1621818
>>621526
Ну да, похоже на гугл/яндекс аналитику. Ими и пользуются для подобных задач.

>всякие метрики и гугланалитики это для пидорасов и хипстеров с магбуком


Тыскозал?
776 1621847
>>621815
Возня с мокрописьками - недойстойное занятие. Да и нех привыкать вообще.
Проще тот же NetBeans поставить, благо он бесплатный и есть поддержка пхп, да и вообще веба.
777 1621893
>>621847

>NetBeans


Который даже 10% функционала жидбрейнса не умеет
Кушоем говно, зато бесплатно
778 1621926
>>621893

>10% функционала жидбрейнса не умеет


Нинужно в 90% случаев.
779 1622045
новость треда
https://laravel-news.com/laravel7
780 1622057
>>622045
А я 6 версию только учу. Что делоть теперь? Доучивать шестую или сразу на седьмую?
781 1622059
>>622057
нет,прост потом посмотришь новые фичи 7,там их немного
782 1622062
>>622057
Учи 8ую. Как раз к релизу успеешь
783 1622066
>>622062
зачем ты его тралишь?
784 1622067
>>622059
Пасиб за совет.
785 1622103
>>622066
Глупость спросил.
Там же версии идут по нарастающей
5+немного говна = 6
6+немного говна = 7
786 1622111
>>622103

>+немного говна


а где нет говна?
787 1622117
>>622111
говно - фичи, которые ты скорее всего не будешь использовать
788 1622133
>>622045
Добавили туда это >>617937 велосипедное говно или нет?
789 1622159
>>621818
Да бля анон нуне тупи, мне нужно просто чтобы при нажатии на нужную кнопку на скрипт отсылало уникальное айди и сам скрипт вдобавок записывал айпи с которого был запрос, то есть нажата кнопка и вносило в базу данных айпи, айдишник отосланный скрипту и ещё что-нибудь полезное заодно, например браузер и операционку, причём блять тут анальная метрика и аналитика? Мне это нужно для отлова багов и чтобы знать с какого устройства был юзер и с какйо страны, чтобы повторить баг, ну ёптвоюмать, или подскажи подобный скрипт или если знаешь скажи что таких готовых на гите нет и всё равно придётся писать свой
790 1622169
>>622159
Сам пиши.
Сам пиши всё - и скрипты для этого, и админку не забудь, и базу задеплой под это дело. Ты ж знатный велосипедист, как я посмотрю.
791 1622184
>>622169
Да ты гонишь, зачем мне для этих целей метрика и аналитика, я хочу статистику для выяления багов собрать, а не сливать своих юзеров в анальное рабство яндексу и гуглу, на вот вкуси немного своих корпораций добра https://www.youtube.com/watch?v=S8GlJk-wHSU
792 1622202
>>622184

>пачаны, дайте мне плагин для сбора статистики


>вот тебе от гугла и яндекса - удобная админка, пользуются даж домохозяйки


>не хочу, дайте другое


Ищи сам.
793 1622226
>>622202
Товарищ майор, идите нахуй, я не вас спрашивал, а анонов.
794 1622260
>>622184

Я писал выше, есть piwik - это как гугл аналитика, но без гугла, на своем собственном сервере, open source.
795 1622281
>>622260
Спасибо анон, но как-то слишком элитно, я думал о чём-то более крестьянском и простом, в админке тупо табличка где от самых кликабельных страниц с моим уникальным айди для каждой страницы к менее кликабельным и как доп информация это айпи/страна, браузер и система, мне хватит и этого, ладно я так понимаю аноны не подскажут, придётся писать самому, изобретать очереднйо велосипед, но я всё равно уверен что кто-то уже писал подобное
796 1622323
как дела с асинхронностью у php?
797 1622500
>>622281
Запили своё крестьянское и простое, если не смог найти
798 1622504
>>622323
Поддвачну вопрос. Какая-то контора whatshelp искала к себе асинхронщика на пхп, что поставило меня в ступор. Ессесна мне перезвонили.
799 1622557
>>622500
Я не знаю как подобное искать на гитхабе, по этому и спрашивал
800 1622623
>>622557
Пришёл сюда ебать нам мозг.
Классека.
801 1622652
>>617769
Ну так говорят те кто настраивают бэк уровня амазона, где тебе на халяву дали БД с 10 таблицами и коннекты прописали. Считай аникеи среди JS. Те у кого опыт год и более уже так не говорят. Хотя конечно ебанаты находятся и среди них, но это уже клиника.
802 1622660
Аноны, разместил свою резюмеху на хх и в первый же день мне оффер прилетел от местного держателя онлайн-магазина.
У него там Ларавель везде, а я сейчас его только изучаю сделал углублённый квикстарт с одного сайта, повозившись с совместимостью версий немного, немного копался с CodeIgniter оче простой оказался. Делал студентов и хостинг на Слиме.
Есть смысл ломиться на вакансию, как думаете? Не уверен, что там старший программист будет.
803 1622673
>>618984

>хаудихо


прогорел. спасибо
804 1622675
>>618995
мне теперь кажется что ты работал сам в 1с и в частности над движком битрикса раз знаешь как там вся кухня устроена
805 1622685
>>622673
Прогорание за 1 час. #От Профессианала
806 1622698
>>622685
Ребят а сегодня я вам покажу как рейджнуть всего за четрые строки. А сделаем мы это на моем любимом языке пайтон
807 1622706
>>622660
Если будешь там один без нормального наставника, то нет.
808 1622708
Йии по ходу никогда не умрет:

>Senior PHP Developer (Yii2)


>Зарплата


От 2>40 000 до 290 000 ₽

https://career.habr.com/vacancies/1000051562
809 1622717
Программист-фрилансер, сколько часов в день работаешь? Сколько выходных выпадает?
Не устаешь часами сидеть-пердеть над кодом?
Есть такие кто устает? - Как борешься с усталостью? Может энергетический напиток пьешь или кофе?
810 1622727
>>622708
Он уже умер. Это на легаси разраба хотят.
811 1622735
>>622706
Вот и я не хочу один сидеть без советов мудрых, но местные галеры не выкидывают вакансии для джунов.

Посижу с неделю - мож появится чего нормальное. К тому же приболел горлом кажись, может и к добру.
812 1622849
>>622698
Бля, прочитал это его ебаным голосом
813 1622860
какой же у пыха синтаксис Г
814 1622966
Как считаете, в задаче про вычисление угла между стрелками часов имеет смысл учитывать, что может быть ввод по типу 56 часов и 10000 минут? Или итак понятно, что на циферблате нет этих чисел и учитывать их необязательно?
815 1622993
>>622717

>сколько часов в день работаешь?


14

>Сколько выходных выпадает?


Сколько захочу.

>Не устаешь часами сидеть-пердеть над кодом?


Нет.

>Может энергетический напиток пьешь или кофе?


Если не укладываюсь в 12 часов завершить задачу - пью бёрн, даёт ещё 8 часов.
816 1623043
>>622623
Пришёл спросить как искать готовые скрипты статистики на гитхабе или совета хорошего простого скрипта, что не так? Для этого же тред и создан
817 1623138
>>622966
Ну кинь эксепшен, если вводные зайдут за допустимые границы
818 1623287
Вот есть два богомерзких языка: пыха, и джаваскрипт. Все пинают эти языки, плюются на них, хоть и используют буквально везде. На среднекод на этих языках тошно смотреть особенно на пыхе, по крайней мере мне. Это же просто месиво, блядь. Но я сам в один из них вкатился, а именно в жабаскрипт. И с вот, что я узнал: за последние лет 5 для него появились сотни допила от васяна и блестящих обёрток, да с модульной системой, да с статическими типами, да без глобальных объектов, да с функциональщиной, да с сотнями постоянно поступающего нового синтаксического сахара, и всего вот этого вот. Под этим всем на него и смотреть не тошно, а со временем и официальный стандарт подтянется до уровня того, что сейчас допиливается вебпаком, бабелем и тайпскриптом. А напилили ли подобного, тонущего под хейтом и макаками для пыхи?
819 1623291
>>623287
руби
820 1623436
Кто в движке https://www.cs-cart.ru/ ?
Есть работа. Пишите в tg: snekl
821 1623461
>>623287
Напилили. Там уже и строгая типизация и DI/CI, статический анализ, трейты, нормальное ООП (js нервно курит, кстати), нормальные вменяемые фреймворки, а не cms-поделия, git workflow можно организовать по-человечески и т.п. Он вообще очень стал похож на Java. Так что ты считаешь его богомерзким просто потому, что нихуя о нем толком не знаешь, видимо.
822 1623464
Так, котаны. Вот вам задачка, принес. Через пару дней проверю, кто решил - молодец.

Дан массив целых чисел. Вернуть индексы двух чисел, таких, что их сумма равна 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].
822 1623464
Так, котаны. Вот вам задачка, принес. Через пару дней проверю, кто решил - молодец.

Дан массив целых чисел. Вернуть индексы двух чисел, таких, что их сумма равна 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].
823 1623513
>>623464
Зачем бы нам тестовые для тебя делать? Решай сам.
824 1623531
>>623513
Так ты никогда нихуя не научишься кодить. Это литкод, баран.
825 1623537
>>623531
А нахрена ты сюда это несёшь, небаран? Тебя просили об этом или ты думаешь, что народ задачки по пхп найти в интернете не может?
826 1623627
>>623531
Сейчас бы порешать задачки с литкода вместо пета и тестовых. Это же полезнее в разы.
827 1623652
Сап, пыхач.
В тред вкатывается NodeJS-макака с 2 годами опыта, хочу стать мультиязычным, да и скоро переведут на проект с PHP + Laravel.

Подкиньте каких-то видео-курсов по ларке, по которым можно будет быстренько начать круды хреначить с рестами, готов даже на платные курсы, лишь бы прок был.
828 1623665
>>623652
Настолько не нужна нода, что кидают на пыху?
829 1623668
>>623665
Да хуй знает нужна или нет, просто клиент тот же, но у него помимо приложух на ноде оказалась где-то пыха, которую саппортит один чувак, и вот меня ему в довесок накинули.

Я просто упомянул, что в 2017 писал на пыхе модуль для вордпресса и завертелось
830 1623673
>>623668

>Я просто упомянул, что в 2017 писал на пыхе модуль для вордпресса и завертелось


Сам себе могилу вырыл. Сидел бы на ноде.
Я б уже подыскивал другую работу, если б мне дали неинтересующий меня стек.
831 1623675
>>623673
Да я не говорил, что не интересующий, потому и мануалы ищу, говорю ж, хочу мультиязычным быть. Полгода так писал на джаве
832 1623680
>>623675
Так на джаве или джаваскрипте?
833 1623682
>>623680
Я вообще NodeJS бэкенд-макака, чистого опыта на нем - 2+ года. Но в остальном иногда прыгаю по другим проектам с другими стеками, ибо мне это интересно, так полгода писал на джаве, где-то три месяца на питоне, вот скоро на пыху прыгнуть хочу
834 1623689
>>623537
>>623627
Что хочу, то и несу.
835 1623691
>>623682
Если интересно, то збс.
Просто странно из одной динамики прыгать в другую, тем более в пыху (с её то зп)
836 1623697
>>623682
Где быстрее вставка элемента - в аррейлисте или линкедлисте? Если сходу не ответил, рекомендую вкатиться хоть в один стек глубоко. Если ответил, окей, прыгай, если нравится.
837 1623707
>>623691
А зп нодовская остается, я галерный гребец.

>>623697
ЛинкедЛисте но не всегда, зависит от кучи факторов, это ж не от стека зависит, базовые структуры

А курсы кто-то посоветует? (:
838 1623711
>>623707
Если лара, то ларакасты топ
839 1623717
>>623711
Пушка, спасибо, анончик
840 1623719
>>623707
Советую выкатываться из пхп нахуй и катиться обратно в джаву. Нехуй тут делать, уж поверь.
841 1623731
>>623719
Поддвачну
В php кроме symfony жизни нет
842 1623749
>>623731
И там жизнь довольно примитивная, учитывая, как (не) много можно сделать по сравнению с Java, или, не дай бог, C++.
843 1623771
>>623749
Для задач веба и небольшого тырпрайза хватит
844 1623780
>>623749
Так мне не надо много или нет, мне надо задачи на конкретном проекте решать
845 1623790
>>623689
Тогда сам и решай.
Нехватало чтобы какие-то васяны нам тут с умным видом чужие задачки несли.
846 1624920
В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.
847 1624929
>>624920
В CSS можно, узнав размер экрана. Через JS можно, узнав координаты (это хуевый способ, не делай так).
848 1624991
>>617498

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

Если есть возможность, то корнем (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 с кучей атрибутов копипастится два раза. Это неудобно, так как при правках тебе придется делать в два раза больше работы. Нужно избегать копипасты тут.
848 1624991
>>617498

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

Если есть возможность, то корнем (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 с кучей атрибутов копипастится два раза. Это неудобно, так как при правках тебе придется делать в два раза больше работы. Нужно избегать копипасты тут.
849 1624994
>>617498

И еще, у тебя при переходе с 1 на 2 страницу меняется направление сортировки с desc на asc почему-то.
850 1625063
ПЕРЕСОЗДОВАЙТЕ ТРЕАД
851 1625965
>>624920
Flex или Grid
852 1625987
Почитал задачку на тестхаб и спешу донести до вас, что там перебор по всем направлениям.
Screenshot from 2020-03-07 10-26-11.png143 Кб, 733x826
853 1625993
Я никогда не строил полноценных приложений, поэтому мне сложно разобраться в данном сценарии.
Мой ход суждений выглядит следующим образом. Функцию может вызывать либо тот, кто имеет к ней доступ, т. е. программист, либо пользователь приложения. Программист может изменить сообщение об ошибке в исходном коде, а пользователю менять сообщение, как правило, вообще незачем.
Также я вижу только один возможный вариант, когда файл может быть не найден - когда путь к файлу прописывается вручную. Пользователь кидает все через <input>, а если речь идет о программисте, то ему опять же проще поправить путь в исходнике.
Подскажите, пожалуйста, что я упустил из виду.

Также какое преимущество имеет разделение ответственности, если при ошибке (отсутствие файла) результат все равно тот же - мы завершаем скрипт через тот же die() и пользователь функции все так же не имеет никакого выбора?
854 1626005
>>625993

>Функцию может вызывать либо тот, кто имеет к ней доступ, т. е. программист, либо пользователь приложения.


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

>результат все равно тот же - мы завершаем скрипт через тот же die() и пользователь функции все так же не имеет никакого выбора?


Это как раз сейчас так.
Если же возвращать результат (да даже выбрасывать исключение) - то уже пользователь решает как поступить дальше. Может вообще наплевать на это и какие-нибудь моки подсунуть например. Или же это вообще валидная ситуация, так сказать "а юзеров то пока что и нет". Вариантов сколько хочешь, даже вон на картинке пара штук приведена, а не только собственно die.
Алсо, die это вообще хуйский способ завершения выполнения скрипта, т.к. во многих прилогах есть такая штука, как жизненный цикл, который даже в случае ошибки по хорошему должен отрабатывать. die же просто рубит с плеча, грязное завершение, аналогичное падению. А допустим это вообще совсем чужая библиотека, которая по каким-то причинам валит весь твой код, потому что кто-то когда-то не захотел разделить овтетственность. Ты бы сам захотел, чтобы нечто левое решало, когда умирать всему твоему приложению? А ведь ты всего-лишь пытался массив юзеров или чего-то еще подтянуть.
В конце концов функция попросту делает не то, что обещает из названия, тем самым порождая неожиданный сайд эффект. Можешь сделать loadUsersFromFileOrDie например функцию, в противовес этой, но врядли ей реально кто-то станет тогда пользоваться.
855 1626459
Привет Анон. Решаю вкатиться к вам из фронтенд треда, сам я работаю верстальщиком, верстаем под cms написанной на yii первой версии, лул. Очень часто так же у нас проскакивают задачи по битриксу и очень редко по другим цмс типо опенкарта. Понял, что программирование мне не особо то доставляет, чтобы дрочить его дома так как хочу заняться другим делом в будущем. Js у нас мало и обычно это простые скрипты которые я придрочился писать на чистом js, но зато куча php кода и разных cms из них более интересен битрикс так как много вакансий связанных с ним. И решил на работе просить мне кидать небольшие штуки на прогу связанных с админками, чтобы колупать php и перейти с верстальщика на php/битрикс "программиста". С чего лучше начать, используем вроде как php 5ой версии.
856 1626527
>>626459
Хочешь начать писать под платформу - начни писать под неё. По ходу разберёшься.
whybackslash.png17 Кб, 730x226
857 1627478
>>626005
Спасибо за внимание, анон! Я делаю вывод, что любая (custom) function должна по-хорошему что-то возвращать.

Другой вопрос. Тут при наследовании от встроенного класса Exception указывается backslash - \Exception. Тут есть какая-то особая мотивация? Спрашиваю, потому что без слеша все также работает.
858 1627517
>>627478

>любая (custom) function должна по-хорошему что-то возвращать


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

>Тут при наследовании от встроенного класса Exception указывается backslash - \Exception. Тут есть какая-то особая мотивация?


Да, есть. \Exception - это явное указание на класс Exception из корневого неймспейса. А просто Exception это либо из корневого, либо из текущего неймспейса. Если в текущем неймспейсе будет объявлен Exception собственный (именно с таким именем), то без слеша подцепит именно его, а не корневой. Корневой в данном случае это базовый из пхп.
859 1627531
>>627517

>либо из корневого, либо из текущего неймспейса


Забыл добавить, что так же может быть не из текущего, а из юзингов.
К примеру:
use app\Exception;
или
use app\CustomException as Exception;

В этом случае так же явное указание корневого неймспейса через \Exception так же помогает. Имя одно может быть, а получить ты хочешь что-то конкретное, и поэтому так конкретизируешь. В корневом неймспейсе еще куча всего лежит, не только исключения.
Тестхаб 861 1628355
ОП, я правильно понимаю, что изначальная идея тестхаба как сервиса в том, чтобы дать возможность учителям создавать тесты и смотреть результаты прохождения других людей? Такое не очень интересно делать, так как я не учитель и пользоваться таким сервисом не буду. Другое дело если взять те же тесты и сделать аналог anki - чтобы пользователь мог создавать тесты для себя и тренироваться, тут можно даже интервальное повторение прикрутить. Думаю в таком случае часть функционала можно вырезать, например оповещения о том, что кто-то прошёл тест. Разделить тесты на приватные и публично доступные, добавить группировку (например я делаю конспект книги по англ языку и хочу создать из набора тестов группу). Есть какие-то идеи на этот счёт?
862 1628506
Читаю сейчас про ооп в пхп и не понимаю, почему жс и пхп существуют отдельно. Когда пойдут принципиальные отличия, а не синтаксические? inb4 там стиль написания кода другой - пример стиля можно?
Если б пхп умел получать элементы дом-дерева и накидывать стили, он же не умеет? то жс не нужен был бы. Хотя у него синтаксис приятнее.
863 1628524
>>628506

Пхп это классический джава-ооп, а жс это микс скорее непонятный.
maxresdefault.jpg137 Кб, 1086x830
864 1628584
>>628524

Как в foreach реализовать показ неправильных элементов? В смысле, чтобы эхал false
865 1628606
>>628355

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

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

>>628506

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

>>628584

Не понял вопрос. Значение false нельзя вывести с помощью echo (к тому же, preg_match возвращает числа 0 или 1 - количество найденных совпадений, а не true/false). Можно разве что вывести строчку echo "false"; если тебе это зачем-то нужно.

Если ты хочешь выводить, что именно в номере не так - то надо как-то отдельно это определять. Например, считать число цифр и предупреждать, если их не 11. Или отдельными регулярками проверять другие части номера. То есть надо вместо одного сопоставления с регуляркой делать N проверок (что нет лишних символов, что цифр 11, что в начале +7 или 8 итд) и при неудаче проверки -
выводить сообщение.
H33031.jpg195 Кб, 1000x1000
866 1629016
>>599201 (OP)
Подскажите нубу.Cтавлю отрицание в условии выводит "hui", убираю отрицание тоже выводит "hui". Если поменяешь $a с 2 на 3 то все работает как надо.Почему так? Сам допереть не могу)
<?php
$a=2;
if(!$a % 2 == 0){
echo "hui";
}
867 1629096
>>629016

> if(!$a % 2 == 0){


Если остаток от деления числа на 2 равен нулю, то... Тебе это надо от %?
868 1629099
>>629096

> 2 равен


Не равен вернее.
>>629016

> $a % 2 == 0


Это в скобки возьми и должно получиться.
869 1629106
>>629016
Ты точно правильно написал условие?
У тебя сейчас оно читается так: НЕ-$a (а == 2, значит не-а равно false с приведением к 0 делить с остатком на 2 == 2)
Тоесть у тебя вообще всегда там будет true в условии, вне зависимости от переменной а. Перенеси отрицание к !==
870 1629107
>>629016
https://implode.io/bnLiP0

Держи, анон. Тебе видимо это надо было
871 1629109
>>629106
Проебался с пояснением че там в ифе, короче, надеюсь, ты поймешь
872 1629269
>>626459
Боль в каждом предложении.
873 1629378
>>629106
Нихуя не понял, разве что нужно отрицание к знаку неравенства поставить.
Хочу сделать проверку числа на четное нечетное, мне надо найди нечетное. Хотел одним условием обойтись(чтобы не писать else), поэтому поставил отрицание.
Вот так собственно работает.
$a=2;
if ($a%2 !== 0)
echo 'чётное';
>>629099

>Не равен вернее.


Да
874 1629379
>>629378
Проебался заместо echo будет return, и он мне вернет нечетное число.
875 1629394
>>629016

Надо писать if (!($a % 2 == 0)) так как иначе из-за приоритетов операторов это воспринимается как

if ((!$a) % 2 == 0)

Почитать про приоритеты: https://www.php.net/manual/ru/language.operators.precedence.php
876 1629405
>>629394

>if (!($a % 2 == 0))


А еще проще if ($a % 2 !== 0)
877 1629421
Отравил в четверг вечером тзшку - никакого ответа. 2 рабочих дня конечно было, но всё же есть подозрения, что ответа не будет. Когда стоит звонить и узнавать вердикт, при отсутствии ответа?
878 1629470
>>629421

>Отравил в четверг вечером тзшку - никакого ответа


Клятый душегуб
879 1629472
>>629421
Если не договаривались о дедлайне проверки, то хоть каждый день пиши им/звони
880 1629494
>>599201 (OP)
Привет, подскажите начинающему:
Сильно страшно, если я двойные скобки пишу и && вместо просто and?
В гайде рекомендуют писать так, например: ((условие) == (условие)), ((условие) && (условие)) и т.д.
881 1629497
>>629494
Ещё кстати не знал о ">=" и "<=" ( в гайде пока не наблюдается)
Так что за это тапками не кидать!
882 1629514
Насколько актуален гайд по установке апача? Всё было нормально до шага с кастомным доменом - всё как надо по-моему прописал и в хостс и в конфиге - не работает. Ещё и localhost перестал работать.
Безымянный.png65 Кб, 848x648
883 1629536
И ещё вопрос: я правильно понимаю, что если в коде несколько условий, то после каждого условия кроме последнего нужно писать exit(); чтобы всё не смешалось "в кашу"?
884 1629538
>>629536
На этом уровне может быть и да. Но в целом - нет. exit(die) это вообще моветон. Буквально в следующих уроках ты узнаешь о функциях и вопрос отпадет. А потом и о классах. После этого у тебя возникнут другие вопросы наверняка. Просто сначала дочитай до конца.
885 1629549
>>629394
Понял, спасибо отписавшимся.
886 1629708
Ананисты, дайте какой-то то костыль для написания красивого ПХП, типа пишем consol($hui); а он нам выводит оформленное содержимое переменной типа если бы мы написали echo '<pre>'; print_r($hui); echo '</pre>' и т.п. Штуку облегчающую и сокращающую написание кода на ПХП как это делает ЖКВЕРИ на ЖАВАСКРИПТ, то есть штуку работающую на готовых функциях я так понимаю
887 1629727
Сап двощь. Где хранить тот же каштомный конфиг nginx'a? В отдельной репе или кинуть в корень проекта? И вот еще вопрос, если есть какие-то наносервисы на ноде, например для ресайза и оптимизации картинок, как это дело лучше версионировать в связке с остальным приложением? Я вот думал на пхп иметь какой-то конфиг размеров и через шаблонизатор высирать полноценный srcset и в ноде на лету конвертить и кешировать через нгинкс, при том желательно что этот же конфиг размеров дублировался и на ноду(чтобы не дудосили разными размерами и не забивали кеш). Имеет ли смысл ради такого начать учить докер и вот это всё? Опыта особо нет в таких вещах и толком не знаю как это правильно делается, но в моей голове это должно быть что-то типа git clone ... туда сюда ... и проект поднялся со всеми сервисами на деве
888 1629746
Блджад анонсы, по сути классы в пхп получается это все те же функции просто в наборе? Как объекты в яваскрипт? Где объект это по сути ассоциативный массив из пхп, но только он ещё вместе с переменными может хранить и функции, которые тоже становятся его методами вызываемыми через точку
Кстати в пхп методы класса можно вызывать только через стрелочку? ->
Почему вообще ушли от процедурного метода? Это же приятнее, чем тонна папок с контроллерами и виверами
889 1629802
Ёбнутые блять пересоздание тред, он нахуй и впизду утонул и отвечают здесь полторы калеки
someApprentice !EaaiHmIJms 890 1629813
>>619949

>> Приведите пожалуйста аргументы почему нужно шифровать 100% сообщений?


>


>- в Телеграме те, кто использует секретные чаты, выделяются из толпы и привлекают внимание


>- проще шифровать все по умолчанию, чем отправить что-то не то, а потом вспомнить, что шифрование выключено


>


>Если делать шифрование отключаемым, может делать по дефолту его включенным, а далее отключать по желанию?


>


>Насчет поиска и сортировки - интересный аргумент.


У меня не будет шанса объяснить пользователям что это не приложение тормозит, а происходит дешифровка.
891 1629985
А кто такой этот codedokode? Зачем ему всё это?
892 1630066
>>629985
Он мёртвый русский, это была агония

Перекатываемся, тред скоро удалится:
https://2ch.hk/pr/res/1630065.html (М)
https://2ch.hk/pr/res/1630065.html (М)
https://2ch.hk/pr/res/1630065.html (М)
893 1631944
Анончики, подскажите, как поменять корневой каталог на сервере? Это через htaccess или инструментами хостинга надо делать?
894 1632501
Ладно, раз уж создали новый тред, давайте в него перейдем >>1630065 (OP) , хотя там творится какой-то флуд.

>>631944

Это делается директивой 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/ (иногда на каждый хост делается отдельный файл) из-под админа.

>>629813

> У меня не будет шанса объяснить пользователям что это не приложение тормозит, а происходит дешифровка.



Ну ок. Вообще, есть еще вариант попробовать поменять алгоритмы шифрования. Асимметричное шифрование медленное. Потому часто (например, в SSL (и в HTTPS)) с помощью асимметричного шифрования шифруют только ключ, который используется в быстром алгоритме симметричного шифрования. А сообщения уже шифруют симметричным ключом.

То есть, можно сделать так:

1) создатель беседы генерирует для нее ключ
2) шифрует его публичными ключами собеседников (включая свой публичный ключ) и сохраняет полученные копии на сервер
3) шифрует сообщения в беседе симметричным шифрованием с этим ключом
4) все собеседники скачивают с сервера свою копию зашифрованного ключа и расшифровывают эту копию своим приватным, после чего расшифровывают сообщения

В такой схеме не нужно генерировать отдельную копию сообщения каждому собеседнику. Возможно, тут есть какие-то слабости, и стоит внимательно все продумать. Можно для надежности раз в N часов/дней генерировать новый ключ беседы.

Можно почитать по этой теме про протокол Диффи-Хеллмана - там похожая ситуация.

Если тебе интересно поломать над этим голову, можешь попробовать сделать. Если нет - можно, как ты предлагаешь, просто сделать шифрование включаемым по желанию.
894 1632501
Ладно, раз уж создали новый тред, давайте в него перейдем >>1630065 (OP) , хотя там творится какой-то флуд.

>>631944

Это делается директивой 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/ (иногда на каждый хост делается отдельный файл) из-под админа.

>>629813

> У меня не будет шанса объяснить пользователям что это не приложение тормозит, а происходит дешифровка.



Ну ок. Вообще, есть еще вариант попробовать поменять алгоритмы шифрования. Асимметричное шифрование медленное. Потому часто (например, в SSL (и в HTTPS)) с помощью асимметричного шифрования шифруют только ключ, который используется в быстром алгоритме симметричного шифрования. А сообщения уже шифруют симметричным ключом.

То есть, можно сделать так:

1) создатель беседы генерирует для нее ключ
2) шифрует его публичными ключами собеседников (включая свой публичный ключ) и сохраняет полученные копии на сервер
3) шифрует сообщения в беседе симметричным шифрованием с этим ключом
4) все собеседники скачивают с сервера свою копию зашифрованного ключа и расшифровывают эту копию своим приватным, после чего расшифровывают сообщения

В такой схеме не нужно генерировать отдельную копию сообщения каждому собеседнику. Возможно, тут есть какие-то слабости, и стоит внимательно все продумать. Можно для надежности раз в N часов/дней генерировать новый ключ беседы.

Можно почитать по этой теме про протокол Диффи-Хеллмана - там похожая ситуация.

Если тебе интересно поломать над этим голову, можешь попробовать сделать. Если нет - можно, как ты предлагаешь, просто сделать шифрование включаемым по желанию.
895 1632502
>>629746

Объект - это данные (поля, переменные) и набор методов (функций) для работы с ними. Класс - это описание объекта: какие поля, какие методы в нем есть. Все объекты одного класса имеют одинаковый набор и названия полей, но значения в них могут быть разные.

В ОП-посте есть учебник, в нем есть глава про ООП, там все объясняется с нуля, советую прочитать и решить задачи оттуда.

>>629727

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

> если есть какие-то наносервисы на ноде, например для ресайза и оптимизации картинок, как это дело лучше версионировать в связке с остальным приложением?



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

Если не хочется использовать Докер, можно написать bash-скрипт, который запустит нужные сервера вроде такого:

php -S 127.0.0.1:9001 .... &
# сохраняем PID процесса
PHP_PID=$?

npm start-server .... &
NODE_PID=$?

При завершении скрипта можно сделать прибивание запущенных в фоне сервисов командой kill.
896 1632503
>>629708

var_dump() все подсвечивает, если установить расширение xdebug.

>>629536

Если ты можешь сделать без exit(), то код будет красивее.

>>629514

Сейчас есть более простой способ, не требующий правки hosts. Назови свой хост вроде xxx.localhost и он автоматически будет резолвиться в адрес твоего компьютера (127.0.0.1). Тогда содержимое hosts можно восстановить в исходное значение и не трогать.

Гайд относительно актуален, хотя сейчас можно использовать встроенный в PHP веб-сервер и обойтись без Апача вообще.

>>629494

Скобки помогают явно указать порядок выполнения действий и в этом смысле полезны. Можно писать and, но учти, что у него другой приоритет в отличие от &&.
897 1642917
>>632503
А неперекрывающиеся условия не помогают? Ну когда выполняется одно - другие точно возвращают ложь.
898 1642975
HELP
Пытаюсь ui в лару, выдает вот такую хуйню. Я может дебил конченный, уже 2 часа гуглю, но проблема не проходит:

composer require laravel/ui --dev
Using version ^2.0 for laravel/ui
./composer.json has been updated
Loading composer repositories with package information
Updating 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.
898 1642975
HELP
Пытаюсь ui в лару, выдает вот такую хуйню. Я может дебил конченный, уже 2 часа гуглю, но проблема не проходит:

composer require laravel/ui --dev
Using version ^2.0 for laravel/ui
./composer.json has been updated
Loading composer repositories with package information
Updating 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.
899 1643024
>>642975
Кароче в пизду я просто перенесу всё в новый проект, там всё работает. Надо было сразу так сделать =)
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 22 апреля 2020 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски