«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP и webdev #101 ОП 2018/04/16 00:26:35  №1174695 1
Добро пожаловать. Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и даже делаем простые сайты! Зачем? Кто-то хочет сделать себе блог, кто-то приобрести новую профессию, кому-то просто нечего делать.

Да, в нашем треде отвечают почти на все вопросы, только не сразу.

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

Предыдущий тред был тут: >>1152267 (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/

Оформляй код аккуратно!!! — например пропусти через 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? — Да, однозначно. Посмотри любую вакансию.
Важно ОП 2018/04/16 00:28:32  №1174696 2
Код важно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на http://www.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт или slovari.yandex.ru и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)

Вот ссылка на стандарты, где все это описано подробнее и даны примеры оформления:

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
ОП 2018/04/16 00:31:30  №1174698 3
Если я кому-то не ответил в прошлом треде, напомните о себе тут.

Напомню всем, что у нас есть архив тредов phpclub.tech . Там есть поиск и можно найти, например, все обсуждения задачи про кредит. Или найти свой старый пост и все ответы к нему.
Аноним 2018/04/16 01:36:43  №1174704 4
>>1174695 (OP)
>Верстальщику - HTML/CSS, JS, jQuery
Я вот не понимаю, что делает верстальщик? Если верстальщик сверстает макет, то всё-равно же придется всё заново переписывать фронетнедеру, который будет на каком-нибудь React'e описывать всё эту верстку.
Ответы: >>1174705 >>1174706 >>1174796
Аноним 2018/04/16 01:37:24  №1174705 5
Аноним 2018/04/16 01:37:44  №1174706 6
>>1174704
фикс всЮ эту верстку
Аноним 2018/04/16 06:25:19  №1174778 7
Задача на массив, застрял: https://ideone.com/NRDJRI
Учебник читал, гуглил, но все равно ничего не понял.
Ответы: >>1183545
Аноним 2018/04/16 07:11:53  №1174796 8
>>1174704
Всегда думал, что фронтендер это и верстальщик тоже. Иначе что за отдельный фронтендер? Чем он будет заниматься? Это прослойка между бекендером и верстальщиком зачастую нахуй не нужная, если пишут не на реакте-вью-ангуляре?
Ответы: >>1174800
Аноним 2018/04/16 07:37:21  №1174800 9
>>1174796
Это деление было уместно лет 10 назад в полсдений раз (ну и на проектах той эпохи), когда клиенты были тонкими, а не толстыми и на них не было иной логики, кроме как логики отображения.

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

Те же "фронтендеры" что кричат, что они занимаются только логикой отображения, просто ленивые хуеплеты, делающие двойную работу. Сначала верстальщик верстает макет, потом они его переплетают логикой - это дегенратвство. Учитывая то, что значительная часть логики отображения сегодня выносится в тот же css, анимации и прочее. И чтобы заниматься действителньо крупным проектом, нельзя быть в отрыве от верстки. Это все равно, что кричать что бэкендеру не нужно в ьазы данных. Проектировать ему может их не нужно, а дергать эффективно - еще как нужно. И если он в них не умеет, то дальше коленочных поделок пускать его нельзя. То же самое с фронтом.
Аноним 2018/04/16 09:43:33  №1174852 10
Есть контроллер с зависимостями. Как лучше посутпить - создавать поля и передавать каждую зависимость отдельно или сразу сделать одно поле и передавать туда сразу весь DI контейнер?
Ответы: >>1174967 >>1183545
Аноним 2018/04/16 09:46:54  №1174855 11
Когда нужно использовать ООП в php? Вижу, что почти все написано в процедурном стиле.
Ответы: >>1174895
Аноним 2018/04/16 10:56:00  №1174895 12
>>1174855

" Вижу, что почти все написано в процедурном стиле." - а что ты смотрел? Я например постоянно с Симфони сталкиваюсь, а это ООП.
Аноним 2018/04/16 13:20:42  №1174967 13
>>1174852
>сразу сделать одно поле и передавать туда сразу весь DI контейнер?
Вот так делать точно не стоит, в чем смысл DI в названии? Почитай комментарии ОПа к задаче о студентах. Если у тебя часто встречаются одинаковые зависимости в разных методах, то можешь их внедрять в конструктор, но лучше, как мне кажется, внедрять зависимости сразу в методы, тогда у тебя точно не будет неиспользуемых объектов. Обычно в крутых контейнерах есть функции вызова нужных тебе методов(например ты разбиваешь юрл и по заранее описанным рутам находишь коллбек), и они сами заполняют методы нужными зависимостями по тайп-хинту или по аннотациям или еще какой-то подпихне
Ответы: >>1183545
Аноним 2018/04/16 15:43:13  №1175020 14
15226146028240.jpg (67, 1000x800)
800x1000
Всё равно ничего не понятно.

> идея примерно такая: мы заводим переменные $result (результат предыдущих действий), $number (число, которое сейчас набирается) и $op (предыдущая операция). Затем разбираем строку посимвольно (циклом for).
Это есть.

>Если это цифра — добавляем ее к числу $number (умножаем на 10 и прибавляем цифру)
Это есть.

>если это операция — то выполняем предыдущую операцию (которую мы храним в $op) над $result и $number, сохраняем итог в $result, а текущую операцию на будущее сохраняем в op. Если это «=», то выполняем предыдущую операцию и выводим $result
Это тоже есть.

При этом если тут оно хоть что-то выдавало https://ideone.com/Tjfbus, то тут я добавил одну переменную и оно умолкло https://ideone.com/PwGd9r .

Если же перенести echo $result в самый конец https://ideone.com/e6qIvF, то он выдаёт набор цифр 0002222488448842662. Они должны быть в результатах вычисления, это правильные цифры, но и не правильные.

Пытался вот так https://ideone.com/niBIBF, всё равно ничего.

Но при этом я не могу понять, где ошибка.
Если попадается операция, то создаётся временная переменная с предыдущей операцией, а текущая сохраняется на будущее. После выполняется вычисление над $result и $number операции, если же операция =, то вычисляется текущая и выводится результат с прекращением дальнейшего выполнения цикла for.
Если же попадается число, то оно складывается в $number.

Пытался разобрать это https://ideone.com/T0AfO, вообще ничего не понял.
Ответы: >>1183547
Аноним 2018/04/16 22:39:08  №1175195 15
>>1174695 (OP)
ОП, ответь, пожалуйста, на вопрос - это очень важно. Вопрос без подвоха и не траленк. Ты би или гей?
Ответы: >>1175205 >>1175238
Аноним 2018/04/16 23:07:34  №1175205 16
>>1175195
Ты своей нетактичностью даже меня задел, а я за ОП-а и двор стреляю в упор.
Намек понятен?
не-ОП
Ответы: >>1175740
Аноним 2018/04/17 02:55:40  №1175237 17
У нас самый лучший на свете ОП. Спасибо ему за то что он такой молодец и няша. Я бы его чаем угостил или даже не пожалел на наго бутылку лучшего Хеннеси. Если бы конечно имел возможность ирл его встретить.
Аноним 2018/04/17 02:58:21  №1175238 18
Ответы: >>1175239 >>1175625
Аноним 2018/04/17 02:59:06  №1175239 19
15227870197200.jpg (118, 640x640)
640x640
Аноним 2018/04/17 12:31:00  №1175357 20
Что делать, если не знаешь с какой стороны начать подходить к задаче?
Ответы: >>1175371 >>1176483
Аноним 2018/04/17 12:38:37  №1175371 21
>>1175357
Не подходи, блядь, дебил сука ебаный.
Она тебя сожрет.
Аноним 2018/04/17 12:42:38  №1175380 22
Пробую решить упражнение, где надо написать программу, выводящую таблицу умножения чисел от 1 до N на самих себя, используя цикл. Программа должна вывести примерно такой результат:

1×1 = 1
2×2 = 4
...
9×9 = 81

Результат пока такой https://ideone.com/qawxeR

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

Ответы: >>1175412 >>1175556
Аноним 2018/04/17 13:16:46  №1175412 23
>>1175380
ну ес кароч бля $сум в фигурные скобки перенести всё норм будет)
Ответы: >>1175413
Аноним 2018/04/17 13:23:56  №1175413 24
>>1175412
Спасибо, добрый человек.
Аноним 2018/04/17 13:49:05  №1175435 25
Пачаны, завасянил задачку по написанию стихов, но у меня такое чувство что это можно сделать как-то пиздаче, дайте советов мудрых.
https://ideone.com/JkebMt
Ответы: >>1183547
Аноним 2018/04/17 14:47:32  №1175556 26
>>1175380
Чего такой вариант не устраивает?

for ($a = 1; $a < 10; $a++) {
\t$sum = $a $a;
\techo "$a
$a = $sum\n";
}
Аноним 2018/04/17 15:06:26  №1175585 27
Аноним 2018/04/17 15:14:07  №1175591 28
Аноним 2018/04/17 15:34:43  №1175600 29
Наверное очень тупой вопрос. Как лучше созавать объект, если у него в конструкторе нет зависимостей, со скобками - new Object () или без - new Object?
Ответы: >>1175619
Аноним 2018/04/17 16:54:24  №1175619 30
Аноним 2018/04/17 17:06:13  №1175625 31
>>1175238
Сука что же ты делаешь, теперь я правда буду думать что там может быть ОП-тян.
Ответы: >>1175633
Аноним 2018/04/17 17:17:25  №1175633 32
Ответы: >>1175636
Аноним 2018/04/17 17:20:33  №1175636 33
>>1175633
Просто раньше это казалось шуткой, а теперь обретает больше смысла.
Наверняка уже какой-нибудь ероха написал ОП-тяну и они уже пару лет как встречаются :(
Ответы: >>1184055
Аноним 2018/04/17 17:51:18  №1175648 34
Можно ли высвети сразу ответ при вызове переменных, где есть числа и операция?

Например, есть:
$z = 1;
$q = '+';
$x = 3;

echo $z, $q, $x;

Выводит: "1+3". Как сделать, чтобы оно сразу вычислялось и выводило 4?

Это касательно задачи с калькулятором. Можно же числа определить в один массив, а операции в другой, а когда for дойдёт до "=", по очереди вызвать элементы массивов с числами и операциями, так, чтобы они сложились в пример и сразу вычислялись?
Ответы: >>1175663 >>1183547
Аноним 2018/04/17 17:55:01  №1175651 35
image.png (1276, 1600x900)
900x1600
Сукаблджад, флуд тут развели.
ОП - это жнец, который вещает нам из глубин космоса.
Ноу дискасс.
Аноним 2018/04/17 18:09:48  №1175663 36
>>1175648
Гугли eval() для крайне опасного быстрохака, но вообще это задача синтаксического анализа, гугли и читай dragonbook %хотя вряд ли ты его осилишь, тупой и ленивый кусок дерьма%
Аноним 2018/04/17 19:50:08  №1175740 37
>>1175205
>нетактичностью
>2ch.hk
Туда ли ты зашёл, петушок?
Аноним 2018/04/17 20:01:52  №1175746 38
Есть простейшая логин форма следующего содержания- https://pastebin.com/JG0rLWXf, помогите докрутить цикл до следующего функционала: при логине за юзера admin, к примеру, выдает результат 1, а при логине за юзера kek выдает другой результат, такой же кусок html текста.
Ответы: >>1175749
Аноним 2018/04/17 20:04:28  №1175749 39
Аноним 2018/04/17 21:27:23  №1175794 40
Как DI контейнер "внутри" работает? Каждый раз, когда я обращаюсь к сервису из контейнера, создается новый объект?
Ответы: >>1175799 >>1183548
Аноним 2018/04/17 21:58:25  №1175799 41
>>1175794
Как я понял, то часто разные контейнеры имплементируют метод singleton(), по которому возвращается один и тот же, единожды созданный объект, а по get() возвращается новенький. Так что да, по get() ты получаешь новый объект.

Хотя в статье ОПа по DI пример куска кода контейнера, который нужно доработать, имеет функционал как раз обратный, там два массива, в одном готовые к созданию сервисы, а в другом уже созданные объекты сервисов, и get() сначала проверяет массив уже созданных объектов.
Ответы: >>1183548
Аноним 2018/04/17 23:40:36  №1175828 42
Хочу написать студентов на скорость используя свои знания в быдлокодинге на Codeigniter'e, что бы:

1. узнать за сколько примерно в комфортных для меня условиях я смогу справиться с такой вот несложной задачкой, сейчас мне кажется что я написал бы часа за 4 не больше всё это.
2. Что бы на гитхабе был такой вот хэллоу ворлд на игнайтере для собеседований. (не то что бы я хотел на нем работать дальше, просто что бы был если спросят за скилл)
3. Освежить в памяти фреймворк и посмотреть подводные камни какие-никакие.
4. У меня ступор и я хоть и хочу каждый день сесть за задачу, но понимаю что сначала надо прочитать кучу теории по местам в которых у меня дыры, а потом уже садиться и писать сразу нормально с исключениями и паттернами хотя бы для бд. А не просто обертка пдо в свой бд-класс и поперли.

Как вам такая безумная идея, имеет смысл?
Ответы: >>1183548
ОП 2018/04/18 03:38:36  №1175886 43
Проверил в старом треде посты с 24 по 29 марта. В частности:

>>1175880\t - программа про вывод чисел текстом
>>1175881 - замечания по верстке отдаленно напоминающего ВК сайта
>>1175884\t - https://github.com/7Y2RPXK3ETDCNRDD/webpaint

Если я не проверил чей-то пост - напомните о себе здесь.
Аноним 2018/04/18 10:34:56  №1175988 44
Как лучше прописать путь к юзеру (в том числе самого себя) в личном кабинете panel.php ?

1. По get запросу и id юзера - panel.php?id=25 и в самой странице поставить проверки, если юзер на которого мы зашли совпадает с залогиненым юзером, то появляются крутилочки для изменения данных

или 2
Страница panel.php будет без get запроса, и все будет выполнятся внутри нее. Правда тогда вопрос: как заходить на чужие аккаунты ?

3. Как лучше поступить с точки зрения безопасности, проверяя пользователя и его привелегии?
Проверка через $_SESSION я так понял довольно уязвима ?

Короче, как лучше запилить логику личного кабинета ?
Ответы: >>1176199 >>1183548
Аноним 2018/04/18 11:15:54  №1175997 45
Q
Аноним 2018/04/18 16:55:53  №1176196 46
1524070553291.jpeg (2560, 2309x1732)
1732x2309
Как правильно спроектировать систему уведомления на сайте? (Не email, а внутри сайта)

Есть вариант с тремя таблицами:
-Пользователи
-События
-События+пользователи(many-to-many)

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

Но! Тут есть проблема. Во-первых пользователей очень много, около 20 000, во вторых события тоже будут измеряться тысячами.
Не будет ли тормозить запрос на выборку из третьей таблицы, учитывая, что он будет происходить при каждой загрузке страницы? (Вверху счетчик непрочитанных уведомлений).

Ситуация осложняется тем, что у событий есть права доступа (по нескольким параметрам: регион/представительство/отдел), поэтому запрос на выборку событий будет ещё медленнее.




Ещё есть мысль создать табличку типа:
Айди_пользователя|количество прочитанных уведомлений
Добавлять во второй столбец значение при прочтении уведомлений.
Однако, выглядит этот вариант не очень надежно.

Буду благодарен любым советам и идеям. Спасибо!

Аноним 2018/04/18 16:58:09  №1176199 47
>>1175988
Get + проверка с сессией.
Сессии вполне себе надежная штука.
Ответы: >>1176853
Аноним 2018/04/18 19:26:52  №1176343 48
Вопрос - есть \MessageFormatter в Intl, которому можно скармливать строку вида {fileCount, plural, one{файл} few{файла} many{файлов} other{файла}} и число, на выходе получим отформатированное сообщение. Я хочу такую строку хранить в файлах переводов в Symfony. Тут http://symfony.com/doc/current/components/intl.html пишут, что "The replacement layer is limited to the locale "en". If you want to use other locales, you should install the intl extension instead."
Выходит, что русский язык работать не будет и мне нужно руками вызывать $messageFormatter->format($translator->translate('files')) ?
Ответы: >>1176395 >>1183549
Аноним 2018/04/18 20:23:17  №1176381 49
>>1176196
Решил просто порассуждать и поделиться мыслями,строго не бейте, все равно никто больше непишет ничего, а так глядишь дискач на почве указания на ошибки завяжется.

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

Допустим у тебя будет табличка в которой связь юзеров и сообщений. Ну добавилась туда 1 связь - и всё ок. Ничего не разрастается. Причем очевидно, по тому что ты хочешь отслеживать прочитанные сообщения у тебя будет у каждого сообщения некий флаг (readen) и в селектах его тоже будет легко учитывать. Даже можно например сделать переодическую отчистку таблицы, с переносом тех сообщений в которых дата создания больше чем пол года и readen=true в отдельную таблицу-архив, из которой всё будет долго и незаметно для юзера селектится когда он в своих уведомлениях кликнет на кнопку: смотреть давнишние, или что-то в таком духе, но нам то главное, что наша основная табличка не будет тормозить для большинства юзеров.

Ок, но что делать когда нужно разослать сообщения всем пользователям? (У нас в каталоге новая хуета-нейм, ознакомьтесь). Ты же не будешь генерить 20000 записей в эту таблицу с тем что бы каждому юзеру пришло подобное? Это же тупо засерание собственной базы и адуха как на этапе инсерта туда, так и на этапе селекта потом каждым юзером из неё. Лучше уж сделать отдельный функционал немного напоминающий новости - ты просто создаешь новость, и в отдельных полях указываешь группы пользователей для которых она видима например. Если у тебя там пользователи не сильно то и бьются по группам, то можно прямо в таблице завести столбцы с булевыми значениями, и типа указывать что-то типа:
everyone=true - новость для всех пользвателей
everyone=false, admin=true - новость для админов.
everyone=false, admin=false, premUser=true - сообщение сообщение только для каких-то там прем юзеров если у тебя такие есть. Ну надеюсь понятно в целом, и конечно же при такой системе придется продумать как и что ты будешь селектить и как ты будешь себя вести в случае добавления новых групп пользователей.
Либо если у тебя все юзеры разбиты на группы с разными ид, то можно в отдельном поле хранить какой-нибудь json массив с перечислением груп пользователей которым новость доступна.

С тем что бы отслеживать кто и что тут прочитал, а кто не прочитал - уже не получится. Но не придется для небольшого сайта писать хайлоад оптимизацию просто для того что бы следить кто что проситал.
Ответы: >>1176388 >>1176390
Аноним 2018/04/18 20:42:24  №1176388 50
>>1176381
Бро, спасибо, что потратил время.

Сообщениями это не может считаться и не сработает.

Это скорее похоже на описанные тобой новости, однако, как ты сам написал, отслеживать кто что прочитал не получится. А именно это мне и нужно.
Ответы: >>1176426
Аноним 2018/04/18 20:46:07  №1176390 51
>>1176381
>генерить 20000 записей

Нет, это не нужно. Просто записываешь в связующую табличку id пользователя и id новости, когда пользователь эту новость прочтет.
Тем самым исключаются проблемы с инсертом.
Ответы: >>1176426
Аноним 2018/04/18 20:56:51  №1176395 52
Аноним 2018/04/18 22:00:08  №1176426 53
>>1176388
Ну смотри, у тебя в любом случае получается таблица, которая потенциально содержит в себе число записей = число юзеров x число новостей. Так что готовься что через некоторое время тебя будет ад и погибель.

Если же тебе нужна именно таблица на бэкэнде для каких-то своих целей, то на ум разве что приходит некая оптимизация, что когда у тебя создается новость, то в неё записывается куча записей из id новости и id каждого юзера, но когда например юзер прочитал оповещение, у тебя из этой таблицы запись с id этого юзера и id оповещения удаляется. То есть в идеале на живом сервисе в теории у тебя юзеры и будут поддерживать чистоту в этой таблице. Но на практике если на сайте скажем 20к юзеров, а реально активных из них скажем 5к, то у тебя всё равно будет таблица в перспективе забита на sum(users) x sum(news) x ~0.75, потому что 75% мертвых юзеров никогда ничего не прочитают, и придется например опять же самому писать дополнительную зачистку, что бы из этой основной таблички в какой-нибудь архив тормозной всё что старше даты X, даже если оно не прочитано в случае лагов.

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

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

>>1176390
Исключается проблема с большим инсертом при создании новости, но не девается никуда проблема с тем, что у тебя юзеры при просмотре новостей эту табличку сделают очень жирной и выведут из работоспособного состояния. У меня на локалке от миллиона записей вроде уже работа с таблицей перестает быть комфортной. при этом просто разовые запросы, никаких даже тестов о том, что бы слать например <10 запросов в секунду. У тебя если 20к юзеров, и пусть даже в среднем из них 5к будут активно что-то читать, то в среднем получается, что через 200 новостей они уже этот миллион записей создадут, ну пусть для вашего сервера комфортно будет ворочать табличку с 10лямами записей - ок. Но ты же говорил о том, что
>события тоже будут измеряться тысячами.
Тебе явно нужен какой-то хитрый механизм отчистки от старого дерьма.
Аноним 2018/04/19 02:20:17  №1176459 54
По задаче со студентами и вообще в дальнейшем, подскажите кто шарит.

1. В какой конкретно кодировке лучше всего создавать базу?
utf8_general_ci
?
2. Движок по дефолту InnoDB, не трогать?

3. Если про классы в пхп всё понятно, то вот таблицы и названия баз данных сейчас как принято писать? Тоже камелкейсом?
students_list
studentsList
StudentsList
?

Аноним 2018/04/19 03:04:12  №1176462 55
Аноним 2018/04/19 04:27:06  №1176478 56
>>1176459
student
это таблица, и так понятно что она лист.
Еще есть холивар на тему student или students.
Оно в принципе не важно. Ну лучше знать о таких срачах на случай случайно детонирующих коллег.
ОП 2018/04/19 04:31:05  №1176480 57
Проверил в старом треде все оставшиеся задачи и посты, начиная с 30 марта:

- >>1176468 - задача про кредит и задача про вектор https://repl.it/repls/AcclaimedWhirlwindSoftwareengineer
- >>1176469 - почему в задаче про кредит не работает if ($a || $b || $c > $d) ?
- >>1176470 вопрос про ssh agent
- >>1176471 про просмотрщик картинок
- >>1176476 про ООП и https://github.com/mlmn/vector.loc/

Если вы писали в прошлом треде и вам не ответили - напомните о себе тут.
Аноним 2018/04/19 04:31:48  №1176481 58
Аноним 2018/04/19 04:35:10  №1176482 59
>>1176459

Про движки - погугли отличия InnoDB от MyISAM. Не выбирай бездумно.
Аноним 2018/04/19 04:38:53  №1176483 60
>>1175357

Задать конкретный вопрос в треде, что не понятно.
Аноним 2018/04/19 06:33:03  №1176502 61
3.jpg (306, 1100x1466)
1466x1100
Нужно сделать ебучую викторину с вопросами, где за правильные ответы первые n ноунеймов получат купон на скидку товаров.

С викториной проблем нет, интересна схема с купоном.

Пока есть 2 идеи - либо записать в базу n купонов и выдавать каждому, кто прошёл весь Вьетнам, выпиливаясь из базы штукой. Либо, сделать как с капчей, если все ответы верные - выдается рандом код\картинка - ноунейм пишет, и вычитается n число от общей суммы.

Что скажете, мамкины прогеры? Если что, база есть.
Ответы: >>1176768 >>1176835
Аноним 2018/04/19 13:25:39  №1176742 62
Хотел бы показать проект ОПу, но постоянно перелопачиваю код до неузнаваемости по желанию левой пятки. Стыдно.
Ответы: >>1183549
Аноним 2018/04/19 13:57:17  №1176765 63
Анончики, подскажите, как сделать это задание. Как поменять шрифт и цвет сердца, если из тегов можно использовать только <em>? А если его использовать, то шрифт не соответствует необходимому результату.
Ответы: >>1176840
Аноним 2018/04/19 14:13:06  №1176768 64
>>1176502
Сгенерировать в базу. Либо определить упорядоченное (желательно внешне рандомное) множество значений размерностью n. Ща распишу. я ж у мамы программист
Ответы: >>1177058
Аноним 2018/04/19 14:15:32  №1176770 65
Три
Аноним 2018/04/19 14:34:34  №1176781 66
Спасибо за уроки от двача, это довольно фаново и даёт мне мотивацию. Вот только один вопрос, почему не работает \n? Юзаю <br/> вместо него
Ответы: >>1183549
Аноним 2018/04/19 15:41:20  №1176830 67
Собираюсь пилить мини-сайтики, например, сайт визитку по приложению
Не напрягаясь, заскочил сюда. Мне это в ИДЕ удобней будет или с простым редактором можно обойтись? Или в какой лучше все это дело оборачивать? чтобы чекать БД, формочки и т.д.?
мимоАндройдДжуниор
Ответы: >>1176834
Аноним 2018/04/19 15:47:28  №1176834 68
>>1176830
А хотя, хули то спрашивать такую фигню.
Ебнул нетБианс.
Аноним 2018/04/19 15:49:51  №1176835 69
10127880.jpg (64, 640x487)
487x640
Ответы: >>1177058
Аноним 2018/04/19 15:59:15  №1176840 70
>>1176765
Оборачиваешь сердце в em, делаешь ресет родных для em стилей, меняешь цвет и шрифт. Остальное там через html entities набираешь, в том числе само сердце, юникодным номером.
Аноним 2018/04/19 16:00:44  №1176842 71
Блядь. Что я делаю в пхп-треде? Мискликнул так мискликнул..
Ответы: >>1176843 >>1176845
Аноним 2018/04/19 16:03:14  №1176843 72
>>1176842
Может быть это судьба?
Аноним 2018/04/19 16:04:35  №1176845 73
>>1176842
Перепили под PHP плиз!
Ответы: >>1176850
Аноним 2018/04/19 16:11:35  №1176850 74
>>1176845
Я уже забыл его напрочь. Лет 5 не писал на пхп.
Ответы: >>1176855
Аноним 2018/04/19 16:12:30  №1176853 75
>>1176199
Спасибо

Поставил php7.2 и на ровном месте образовалась ошибка (пикрелейтед), с переменной все ок же! Когда заливаю на хостинг то ошибки нет, подозреваю что там php<7.2

Вот код страницы
https://pastebin.com/Tz9D5kpK


Ответы: >>1176857 >>1183549
Аноним 2018/04/19 16:14:52  №1176855 76
>>1176850
Что посоветуешь анону, который хочет быть веб макокой но никак не выберет стул: пхп или питон? плюсы и минусы, заранее спасибо!
Ответы: >>1176863 >>1176874
Аноним 2018/04/19 16:17:33  №1176856 77
image.png (107, 1134x608)
608x1134
Почему такие непонятные версии? Авторы пхп накурились и не смогли в обратную совместимость? Какую качать для самообучения?
Ответы: >>1176859
Аноним 2018/04/19 16:23:36  №1176857 78
>>1176853
<?php
$error__test = false;

у тебя переменная неинициализирована
Ответы: >>1176873
Аноним 2018/04/19 16:24:44  №1176859 79
Аноним 2018/04/19 16:30:57  №1176863 80
>>1176855
Пхп простой, но ограниченный. На пхп можно делать только сайты и то с вебсокетами например будет уже пляска и простые cli приложения. Нет ни многопоточности, ни нормальной асинхронности, много легаси вроде тысяч функций в глобальном пространстве. Насколько помню всё так же хуёво с юникодом. Скудное разнообразие структур данных.

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

Если хочется именно вебмакакой быть, учи лучше жс и ебашь фронтэнды. Голова будет болеть от тысяч фреймворков и дебильной слабой типизации в пхп такая же, но хотя бы заработаешь что-то.
Ответы: >>1176870 >>1176874 >>1183550
Аноним 2018/04/19 16:38:03  №1176866 81
15125844024801.jpg (206, 1280x960)
960x1280
Стоит ли изучать bootstrap в 2018?
Ответы: >>1176879 >>1183550
Аноним 2018/04/19 16:44:44  №1176870 82
>>1176863
Большое спасибо, анон!
Аноним 2018/04/19 16:59:02  №1176873 83
>>1176857
В смысле? Я же ей присвоил true в случае успеха и false в случае провала регистрации.
Вынес в начало перед if, и присвоил $errors__test = 0;
Ошибок нет, так будет правильно?

Ответы: >>1177367
Аноним 2018/04/19 17:05:27  №1176874 84
>>1176855
Пхп даже на вебсервер проще положить, он в апаче вообще нативно работает. Можешь сходу прям на голом пхп уже что то клепать, а с питоном так не выйдет, нужна джанга, uswgi и еще костыли на сервак. Но анон >>1176863 правильно сказал, я считаю что питон это вклад в будущее, а пхп это быстро и без напрягов срубить бабла уже сейчас.
Ответы: >>1176912 >>1176944
Аноним 2018/04/19 17:22:57  №1176879 85
Аноним 2018/04/19 18:00:21  №1176904 86
Сап ПШПач. Как написать смс бомбер на пшп?
Нужно направление, как это всё осуществляется, че куда.
Ответы: >>1177311
Аноним 2018/04/19 18:06:58  №1176912 87
>>1176874
а что мешает порубить малость бабла и потом идти большой дорогой?
Ответы: >>1176929
Аноним 2018/04/19 18:22:54  №1176929 88
>>1176912
Ничего не мешает, если уже все знаешь в пхп, то можно по вечерам пробовать душить своего питона.
Ответы: >>1176933 >>1177303
Аноним 2018/04/19 18:26:23  №1176933 89
>>1176929
А если только начал?
Аноним 2018/04/19 18:56:53  №1176944 90
>>1176874
> я считаю что питон это вклад в будущее, а пхп это быстро и без напрягов срубить бабла уже сейчас.
>Kokoko Kokoko
В последующие лет 5 все будет жить, так что практически нихуя не изменится. Специалисты везде нужны. Очередной флейм разводишь.
Ответы: >>1176953
Аноним 2018/04/19 19:19:41  №1176953 91
>>1176944
>В последующие лет 5 все будет жить
Чего ты порвался то, я не говорил что пхп наебнется вот вот уже. Имелось в виду далекое будущее.

Я к тому, что если надо быстро освоить и идти работать за деньги то это однозначно пхп.
Если острой необходимости в деньгах нет, то изучение питона в далекой перспективе даст свои профиты. Разве я не прав ?
Ответы: >>1176961
Аноним 2018/04/19 19:29:48  №1176961 92
>>1176953
>, то изучение питона в далекой перспективе даст свои профиты. Разве я не прав ?
И почему же?
Ответы: >>1176962
Аноним 2018/04/19 19:33:10  №1176962 93
>>1176961
На далекую перспективу изучаешь питон от корки до корки и погружаешься в мир хайлоада и отсоса хиккующих выблядков.
Мимопроходил
Ответы: >>1176963
Аноним 2018/04/19 19:34:38  №1176963 94
>>1176962
Питон? Ну а может быть лучше node.js?
Ответы: >>1176965
Аноним 2018/04/19 19:38:25  №1176965 95
>>1176963
Я не знаю, я просто мимопроходил. Я вообще думаю, что надо всё на начальном уровне изучить РНР, JS, node.js, Pyhton. Чтобы уметь на всем этом тудулист смастерить. А потом выбрать что-то одно, что больше по душе и по жизненным обстоятельствам.
Ответы: >>1176967 >>1176968
Аноним 2018/04/19 19:39:37  №1176967 96
Аноним 2018/04/19 19:40:16  №1176968 97
>>1176965
Прямо с языка снял.
Аноним 2018/04/19 19:47:42  №1176970 98
Ну серьезно? Какого хера я должен ебаться с установкой апачи и другой фигни, если можно скачать тот же WAMP? Что мне это даст, когда я потрачу 2 часа на самостоятельные долбежки?
Ответы: >>1177006 >>1183550
Аноним 2018/04/19 21:11:14  №1176999 99
14595408006390.jpg (90, 747x420)
420x747
Ответы: >>1177117 >>1178091 >>1183550
Аноним 2018/04/19 22:18:30  №1177006 100
>>1176970
Какие долбежки? Весь стек устанавливается тремя командами, или одной через tasksel. Вообще это полезно как минимум потому что в будущем в виртуальной среде ты сможешь тестить свое говно на разных серверах и версиях пых. если захочешь
Аноним 2018/04/20 05:38:30  №1177058 101
>>1176768
Попробую и то и то, пока времени хватает. Маме привет.


>>1176835
Лол, сейчас бы в пыхетреде выкладывать код на питоне.
Но в принципе, саму идею понял, что-то набросаю, сяб.
Ответы: >>1177169
Аноним 2018/04/20 08:36:00  №1177117 102
>>1176999
Регулярки пиздец. (л|ю|н)? Серьёзно? [люн] блядь
Ответы: >>1177211
Аноним 2018/04/20 09:00:53  №1177153 103
Анчоусы, есть ли уже готовое расширение, позволяющее создавать формы динамически?
Например, я создаю в админке новую форму, добавляю туда любые поля, выбираю их тип, задаю правила валидации, возможно назначаю эвенты перед отправкой формы, потом все это дело сохраняется в БД. На фронте эта форма со всеми полями и правилами вытаскивается из БД и генерируется в html/js. Не представляю, как это организовать вообще, чтобы в контроллер прилетали POST-данные, ими заполнять эту динамическую форму, валидировать и сохраняться данные в БД.
Ответы: >>1177210 >>1183550
Аноним 2018/04/20 09:32:35  №1177169 104
>>1177058
Ну я на самом деле потом подумал ещё, тебе ведь всё равно нужно учитывать использовался ли купон, так что наверное только в БД тыщу рандомов писать. Единственное проверяй чтобы в кодах не было мата. FUCKBITCHTWAT
Аноним 2018/04/20 09:45:05  №1177178 105
Откуда взять символы для задачки с хакерским шифром? Я, честно говоря, не понял зачем она нужна кроме...лулзов?
Ответы: >>1177222
Аноним 2018/04/20 11:30:16  №1177210 106
Аноним 2018/04/20 11:34:49  №1177211 107
QDe84Ga.png (81, 851x1185)
1185x851
>>1177117
Через [л-ю-н] задаются диапазоны же? Тогда все буквы между ними попадут в поиск.
Ответы: >>1177225 >>1177227
Аноним 2018/04/20 11:54:11  №1177222 108
>>1177178

Из статьи википедии про l33t. Она нужна для изучения функции strtr(), если ты сделал задачу про шифровку, то можно пропустить.
Ответы: >>1177715
Аноним 2018/04/20 12:12:08  №1177225 109
>>1177211
>пишешь ему [люн]
>отвечает про [л-ю-н]
Аноним 2018/04/20 12:13:47  №1177227 110
>>1177211
Даже на пике написано, дебил блядь
Ответы: >>1177230
Аноним 2018/04/20 12:18:51  №1177230 111
Аноним 2018/04/20 14:04:10  №1177303 112
>>1176929
Нуу, я только вкатываюсь, массивы хуесивы и прочее. Заодно мб как прохать пойму немного. Ы ебать.
Аноним 2018/04/20 14:08:01  №1177311 113
Аноним 2018/04/20 14:17:44  №1177318 114
Проганон, сколько будет стоить одностраничник, так называемый лендинг, с кнопкой оплаты на электронный кошель, на сайте будет несколько фото картинок и небольшое описание.
Ответы: >>1183550
Аноним 2018/04/20 16:31:36  №1177367 115
>>1176873
if (isset($data['do_signup']))
{

даунелло, у тебя не всегда ЭТО исполняется
Аноним 2018/04/20 17:45:53  №1177400 116
Поясните про TDD. Его обычно во всяких компаниях используют, где тестировщики в штате есть, или когда просто для себя пишу, то тоже ему стоит следовать? Вот допустим есть задача от ОПа на testhub. Лучше сразу с тестов начать?
Ответы: >>1177758 >>1183551
Аноним 2018/04/21 01:20:11  №1177587 117
Алсо, если в классе есть приватный или протектед метод, но хочется его протестить, то как поступить? Сделать его публичным?
Ответы: >>1177629 >>1177631 >>1177632
Аноним 2018/04/21 07:12:15  №1177629 118
>>1177587
А где по-твоему используются такие методы?
Аноним 2018/04/21 07:13:23  №1177630 119
Ответы: >>1183551
Аноним 2018/04/21 07:18:01  №1177631 120
Аноним 2018/04/21 07:25:07  №1177632 121
>>1177587

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

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

Мы пишем тесты по мотивам требований, которые предъявляются к классу и публичным методам. Если метод должен вести себя так-то - мы это и тестируем.

Соответственно, ответ - тестируй публичные методы. Они ведь вызывают тот приватный метод.

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

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

Аноним 2018/04/21 11:33:07  №1177715 122
>>1177222
Сделалъ. Просто там была задача с "шпионским" шифром, а потом с хакерским. Вот я и не понял зачем делать это дважды.
Ответы: >>1183551
Аноним 2018/04/21 12:12:17  №1177724 123
go лучше пхп?
Ответы: >>1177752
Аноним 2018/04/21 12:59:39  №1177752 124
>>1177724
В сотню раз, это тупой вопрос ведь, гошечка лучшее решение для хай-лоад сервера.
Ответы: >>1177755 >>1177756
Аноним 2018/04/21 13:01:05  №1177755 125
>>1177752
это не тупой вопрос,прост недавно узнал про язык от гугла.
Аноним 2018/04/21 13:02:02  №1177756 126
>>1177752
это не тупой вопрос,прост недавно узнал про язык от гугла.так на нем можyо клепать сайты на поток?
Ответы: >>1183551
Аноним 2018/04/21 13:04:43  №1177758 127
>>1177400
Тесты ебень полная, ты закончишь тем, что тесты будешь писать, а не код.
Ответы: >>1177837
Аноним 2018/04/21 14:50:14  №1177837 128
>>1177758
Ты не прав, с тестами проблемы возникают у тех, кто не умеет их писать, делает хрупкими, полагается на внутренности тестируемого кода, что приводит к тому, что изменения в систему вносить очень больно. По моим ощущениям юнит-тесты вообще не добавляют сложности, пишутся быстро и проверяют сразу много всего, с приёмочными тестами возиться приходится больше, особенно если на фронте навороченное SPA, но в целом от таких тестов тоже польза есть. Не надо лезть с такими советами, человек может хорошим специалистом стать, а ты тянешь обратно в болото. У нас есть на работе мануальные тестировщики, но они, к примеру, не могут протестировать REST API, а программист может. Ещё мануальных тестировщиков не получится "запускать" так же часто, а тесты можно запускать на каждый чих.
Аноним 2018/04/21 16:02:11  №1177856 129
>>1174695 (OP)
Глупый вопрос. Зачем нужно писать в стиле ООП в вебе, если скрипты "живут" очень малое время (получают данные из БД и рисуют шаблоны)? Можно же просто статическими функциями реализовывать все требования к сайту.

Смысл вопроса: не могу понять, куда ООП "присобачить", в какие файлы и функции, в процессе своего говнокодинга. Да, можно создавать экземпляры классов, но для чего? Можно без него обойтись, не скажу, что проще, но они не нужны, лишнее нагромождение
Ответы: >>1177880 >>1183552
Аноним 2018/04/21 17:21:10  №1177880 130
>>1177856
>спойлер
Никуда, но Web-макаки не изучают компьютерную науку же.
Аноним 2018/04/21 23:06:39  №1178091 131
Ответы: >>1196643
Аноним 2018/04/22 10:38:04  №1178190 132
Ответы: >>1178230 >>1178832 >>1178979
Аноним 2018/04/22 11:05:27  №1178200 133
Привет ОП. Делаю генератор стихов. Памаги, почему из массива выводится только последний массив? А именно word5.
https://ideone.com/aoUwEY

Ps. сделол вот так, без массивов.

$word10 = array_flip($word1);
$word11 = array_rand($word10);

$word20 = array_flip($word2);
$word22 = array_rand($word20);
$finalWord = $word11 . " " . $word22;
echo $finalWord;

Но мне кажется это не очень правильно, к тому же, пытаюсь понять ту ситуацию с выводом сверху.
Ответы: >>1178982
Аноним 2018/04/22 11:11:10  №1178203 134
>>1174695 (OP)
Решил нахерачить логин форму отсюда: https://www.tutorialspoint.com/php/php_mysql_login.htm. И меня не редиректит на страницу welcome.php, хотя он проверяет по базе данных логин и пароль, то есть конект есть, редиректа нету. Не могу понять что не так, на 10 раз пересмотрел все исходники
Ответы: >>1178312 >>1178330
Аноним 2018/04/23 11:03:21  №1178229 135
Починили
Аноним 2018/04/23 11:06:01  №1178230 136
>>1178190
>http://sandbox.onlinephpfunctions.com/code/63cf89da69bab8ce6434556101059c96e78d3b8cC
Строка 18: $halfLength == $count. Это условие всегда неверно. Соответственно, скрипт даже не заходит внутрь цикла. Нужно переписать на выполнять пока $i (в твоем случае $count) меньше $halfCount.
28: elseif($halfLength == $count) {
echo "$result";
}
Это условие никогда не проверится. Ты ждешь третьего результата, там где возможно только 2 (true, false).
26: Замени на $result = "Не палиндром"; Выводи $result после цикла.
С этого момента все должно работать.

Как все заработало, время рефакторинга:

$zero = 0;
$minusone = -1;
$count = 0;
Лишние переменные. Достаточно использовать $i. С позициями при копировании символов ты все сделал верно (много анонов тут со старта ошибаются).
Условие в цикле можно сократить до одного if, когда не нужно будет обновлять эти переменные.
Ответы: >>1178659 >>1178825
Аноним 2018/04/23 11:55:13  №1178242 137
14885356640560.jpg (36, 604x453)
453x604
Ответы: >>1178274 >>1178982
Аноним 2018/04/23 12:37:43  №1178254 138
Есть строка с названием файла. Задача вынуть оттуда расширение - jpg, txt и т. д., а если у имени файла вообще нет расширения вернуть null. Я сделал регулярку '/.([^\.]+$)/i'. Но когда я ввошу preg_match('/.([^\.]+$)/i', 'test', $arr) и делаю return $arr[1], то получаю est. Что я делаю не так?
Ответы: >>1178262 >>1178265
Аноним 2018/04/23 12:50:28  №1178258 139
Привет.

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

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

Но какие нужны? Понимаю, довольно абстрактный вопрос. Но судя по объяснениям которые я видел - большинство операций и так лочат всё как требуется.

КАПЧА НЕВАЛИДНА BAD GATEWAY
Ответы: >>1178980
Аноним 2018/04/23 13:04:53  №1178262 140
>>1178254
Я так делою
$ext = array_pop(explode('.', basename($filePath)));

Ответы: >>1178347
Аноним 2018/04/23 13:12:27  №1178265 141
>>1178254
Точку экранируй, умник.
Ответы: >>1178347
Аноним 2018/04/23 13:37:53  №1178274 142
>>1178242
>>1174695 (OP)
Еще на проверку, автоматическое исправление опечаток.

Версия с проверкой на опечатки до и после исправления https://ideone.com/A7cHmQ

Урезанная версия с просто исправлением
https://ideone.com/WzIbPY

Заранее спасибо!
Ответы: >>1178980
Аноним 2018/04/23 15:13:09  №1178312 143
Аноним 2018/04/23 15:41:29  №1178329 144
>>1174695 (OP)
Делать обращения к базе в цикле это плохо или похуй? Антипаттерн или норм?
Ответы: >>1178339 >>1178978
Аноним 2018/04/23 15:43:47  №1178330 145
>>1178203
20 секунд уделил твоему вопросу, сам код не копировал и у себя на компе не запускал.

Так что на вскидку два возможных варианта, предполагая что сам код там рабочий и предельно просто всё там по схеме:
1. Если пост запрос то смотрим что в нем
2. Взяли с пост-запроса логин пароль
3. Спросили у базы строчку where логин и пароль
4. Посмотрели ответ базы, посчитали сколько в нем строк
5. Если строк == 1 (а не 0, ведь если в базе нет юзера с таким логином и паролем, то стало быть что-то неверно), то поставить куку юзернейма и редиректнуть на траницу которая как раз уже требует эту куку.


Во первых как с таким говном работать новичку:

Берешь и построчно вардампишь свой код.
После
>$result = mysqli_query($db,$sql);
пишешь
var_dump($result);
exit;
Смотришь что там в ответе, что коннект есть и всё ок.

Идешь дальше:
Смотришь что там прилетело в:
> $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
var_dump($row);
exit;
...

var_dump($count);

Дальше у тебя будет 2 варианта - либо в $count лежит 0 - значит проблема с базой, потому что нет такого юзера и ты накасячил в самой таблице и пытаешься залогиниться под неверныю юзером или с неверным паролем или еще что-то такое.

Либо в $count лежит единичка и должно бы редиректить, но ничего не работает, тут ты должен знать что пикрил. Значит ты что-то не так скопировал и у тебя какая-нибудь херня пои копипасте или ты забил пробелов перед <?php тегами и прочее.
Ответы: >>1178760
Аноним 2018/04/23 15:52:08  №1178339 146
>>1178329
Не можешь справится со сложным запросом и хочешь селать много мелких? Если можно за 1 запрос вытянуть что-то, то наверное лучше за 1 дернуть. Хотя знаешь, я на самом деле не уверен, иногда лучше потестить например, поделав оба варианта по несколько десятков/сотен/тысяч раз и справнив среднее время за сколько ты в итоге получаешь свои данные.


Сам часто делал в продакшене хуйню уровня: дернуть несколько простых запросов и их уже средствами пхп обработать всё в нужный блок данных, потому что знания мускуля не на таком уровне, и вместо того что бы 4 часа сидеть гуглить и учиться составить этот хитровыебанный запрос с условиями и подзапросами средствами мускуля, проще реально дернуть несколько разных отдельных запросов и их перелопатить вируозно на пхп. К тому же начальник прямым текстом еще на тебя налегает что давай сириусли ебош хуяк-хуяк и в продакшен.
Ответы: >>1178342 >>1178845
Аноним 2018/04/23 16:00:11  №1178342 147
>>1178339
>Не можешь справится со сложным запросом и хочешь селать много мелких?
Нет. У меня есть таблица user_info, куда я вставляю id разных сущностей. Их много - user_agent_id, phone_id, ip_address_id и т.д.
То есть перед тем как вставить запись в эту таблицу, мне нужно получить id всех необходимых сущностей (или если их нет - добавить сущность и потом вернуть её id).
Ответы: >>1178643 >>1178978
Аноним 2018/04/23 16:14:21  №1178347 148
>>1178265
>>1178262
Спасибо, про точку и функцию basename забыл.
Ответы: >>1178350
Аноним 2018/04/23 16:17:51  №1178350 149
someApprentice 2018/04/23 16:28:54  №1178355 150
>>1176471
>Какие ты видишь решения проблемы?
Я ещё не освоился с JS, но пока могу сказать, что это нужно разделить либо на отдельные функции, либо разбить на два класса - Helper и Handler, который вешает обработчики (к примеру, Handler.prototype.handleClickOnImg...).

>> var fullsize = $('.fullsize');
>Не лучше ли сохранять ссылку в переменной, а не искать каждый раз этот класс по всему дереву DOM?

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

Разве эта переменная и так не ссылка на объект jQuery?

>Что-то мне кажется, для добавления обертки надо опять откатываться к яваскрипту. Либо добить решение с флексбоксом. Вот такой вот он, CSS. Предлагай свои идеи.
У меня идеи закончились когда не получилось отцентировать картинку. Мне нравится вариант с высчитом размеров картинки и центрирования с помощью double translate, потому что мы, в любом случае, обращаемся к js чтобы вывести popup - ничего страшного если с его помощью и размеры посчитать.
Ответы: >>1180024 >>1182086 >>1196643
Аноним 2018/04/24 05:10:34  №1178627 151
1333366373208.jpg (131, 658x658)
658x658
У кого какие лайфхаки с обучением? Заметил за собой, что у меня чем дальше изучение, тем оно медленее, и не потому что темы сложнее, а скорее потому что большими объемами данных нужно ворочать. Если на первых парах ты брал маленькую задачу и решал её скажем за час, то с какими-нибудь студентами сидишь месяц и подступиться не можешь, постоянно откладываешь, не знаешь как разбить на мелкие подзадачи и т.д. Вот думаю мб разбавлять решение задач какими-нибудь другими практиками, что бы время не так сильно тратилось в никуда? Сидеть css или js ковырять по часу в день хотя бы и решать те же задачи от ОП-тян на верстку например.

Так же вот думая об этом, понимаешь зачем в итоге ооп было придумано. Ну не могут просто люди брать и в голове держать программу написанную без какой либо модульности на 300 и более строк кода, где тупо идет поток лапши. Скажем надо что-то где-то переписать и тут же понимаешь как всё плохо с этим всем, когда у тебя из-за одной переменной может в нескольких местах может всё сломаться и нужно весь код из-за такой вот мелочи перелопачивать. А так вроде как всё разбито по модулям, и ты даже можешь с этим легко работать, главное научиться их выделять логически и связывать, а сами микрозадачи решать - это легко и уже давно к этому адаптировался.
Ответы: >>1178659 >>1178979
Аноним 2018/04/24 06:24:37  №1178643 152
>>1178342
Поясни поподробнее схему? Ты когда юзера создаешь, ты всю инфу не в 1 таблицу кладешь, а раскидываешь всякую сопутствующую инфу по типу его телефона и емейла по отдельным таблицам, а юзеру собственно вносишь id для связи? В чем вообще профит? Я искренне не понимаю подобного подхода.
Ответы: >>1178678
ОП 2018/04/24 06:57:07  №1178654 153
Проверка времени поста.
Аноним 2018/04/24 07:13:47  №1178659 154
>>1178230
>$halfCount

Ты имел ввиду $halfLength (половина длины текста без пробелов)? $i заменить $count?

>Ты ждешь третьего результата, там где возможно только 2 (true, false).

Но ($halfLength == $count) либо равно, либо не равно?

>>1178627
Я вот не могу понять как кто-то решает задачу за час. Я уже месяц сижу на основах пхп из учебника ОПа. Впрочем реального времени на учебу потрачено может неделя от силы. Когда дело доходит до задач дропаю на несколько дней, пока жду тут ответа. От чтения справочника ситуация не меняется, даже наоборот - появляется еще больше вопросов.
Ответы: >>1178660 >>1178832 >>1178979
Аноним 2018/04/24 07:20:35  №1178660 155
>>1178659
Да и задачи я "решил" скопировав решения анонов, которые выкладывали их в тред. Копировал, впрочем не полностью. Используя их как примеры пришло понимание того, как это можно использовать тему урока.
Я придерживаюсь мнения что перед тем как давать задачи, нужно дать пример использования теории на практике. Этот момент в учебнике упущен.
Как было в школьных учебниках: дается теория, формула. Потом идут примеры как их применяют. Потому примеры уже с задачей. Далее идут непосредственно задачи, которые решают самостоятельно.
Очень не хватает примеров применения на практике материала. Я ведь даже предположить как можно, а как нельзя.
Может с таким ущербным майндсетом мне сразу в биореактор, совсем уже заебался
Ответы: >>1178686 >>1178978
Аноним 2018/04/24 08:18:57  №1178678 156
>>1178643
Не имейл и телефон, а разные данные о посещении сайта. Статистика - версия браузера, версия оs, ip адрес, название модели устройства, тип устройства и т.д. Телефон не юзера, а некий, который на сайте юзеру показывается, в зависимости от параметра url. Естественно мне эти данные нужно связать с id юзера.
>ты всю инфу не в 1 таблицу кладешь, а раскидываешь всякую сопутствующую инфу по типу его телефона и емейла по отдельным таблицам, а юзеру собственно вносишь id для связи?
>В чем вообще профит?
В нормализации базы данных.
Ответы: >>1178715
Аноним 2018/04/24 08:34:17  №1178686 157
>>1178660
Вроде довольно реалистичные задачи, вон типа списка студентов, файлообменника etc - дохрена же сайтов примерно такой структуры, вполне реалистично выходит.
Ответы: >>1178688
Аноним 2018/04/24 08:36:57  №1178688 158
>>1178686
Я не про задачи, а про пример применения темы урока на практике. Именно как и куда это можно вставить. Потому что когда я вижу решения анона у меня возникает только одна мысль "а так можно было?", потому как я не знаю как можно и как нельзя.
Ответы: >>1178744
Аноним 2018/04/24 09:16:29  №1178715 159
15090918220400.jpg (105, 800x800)
800x800
>>1178678
Вот почему ты теперь мне кажешься высокомерным пидорасом? Еще хотел же приписать к вопросу про твою оптимизацию:
inbifo: не слышал про нормализацию?
Но подумал, что это будет лишнее, а в итоге следовало бы.
сам надумал себе - сам обиделся


Кароче ты парсишь $_SERVER, и например видишь что там юзер зашел с какого-нибудь альфа-фаерфокс 60 версии, идешь значит в таблицу user_agents, смотришь что там ничего нету подобного, заходишь в неё, добавляешь туда себе этот новый неизведанный агент, забираешь его айдишечку, потом херачишь так по нескольким таблицам которые у тебя чисто под такие вот "сущности" выделены и содержат 2 столбца из id и значения, и обойдя в итоге все таблицы и убедившись что везде всё есть ты завозишь наконец с чистой совестью в user_info тупо наконец-то запись с кучкой айдишников? Я правильно понял? У тебя так при каждом обращении юзера к сайту происходит? Ну и я не уловил в итоге, в чем профит такого усложнения перед тем что бы просто занести все нужные тебе куски информации в одну таблицу 1 инсертом за 1 обращение? Инбифо: для нормализации.
Ответы: >>1178727 >>1178754
Аноним 2018/04/24 09:37:45  №1178727 160
>>1178715
>Вот почему ты теперь мне кажешься высокомерным пидорасом?
Пиздец ты ебанутый. Пропало желание тебе отвечать.
Подожду опа.
Ответы: >>1178730
Аноним 2018/04/24 09:40:14  №1178730 161
>>1178727
Что обиделся то сразу? Ну блэээт.
Или я был прав:?
Вебмастеринг Аноним 2018/04/24 09:54:01  №1178737 162
Аноним 2018/04/24 10:04:39  №1178744 163
>>1178688

А можешь пожалуйста написать один или несколько примеров, о чем именно, что должно бы быть написано в уроках?
Ответы: >>1178815
Аноним 2018/04/24 10:20:03  №1178754 164
>>1178715
>Ну и я не уловил в итоге, в чем профит такого усложнения перед тем что бы просто занести все нужные тебе куски информации в одну таблицу 1 инсертом за 1 обращение? Инбифо: для нормализации.
Денормализация ИНОГДА, ДОВОЛЬНО РЕДКО, бывает оправдана, но это явно не тот случай. За денормализованные данные по ебалу бьют в нормальных конторах.
Но если ты индус Кумар Ебалнасрал то, действительно, профиты могут быть неочевидны. Можешь дальше хуячить данные в базу as is.
Ответы: >>1178769
Аноним 2018/04/24 10:31:15  №1178760 165
>>1178330
Дампнул - вывод пикрил. Пробелов не видать - https://pastebin.com/F2CChrQw Еще раз проверил все файлы хотя я до сих пор могу не видеть какую-нибудь очевидную ошибку При успешном логине он крашит body, пикрил. Собсна что делать, по-другому можно редирект сделать? Пробывал локейшен заменить на echo - тот же эффект.
Ответы: >>1178775 >>1178779
Аноним 2018/04/24 10:47:10  №1178769 166
NORMALIZACIYA.jpg (173, 1280x720)
720x1280
>>1178754
Вспоминается анекодот про макак и бананы. Вот я захожу к вам ща в камеру, кидаю ненормализованную таблицу на пол, и вы на меня набрасываетесь, а пояснить то можешь на конкретном примере? А не высрать: НУ ТАК ПРИНИТА.

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

Жду пояснения на конкретном примере, с обоснованием хотя бы в духе: ну кароче у меня к этой таблице селектов 99%, поэтому тут всё нормализованно и проиндексированно по айдишникам, шоб быстрее, а инсерты 1% оче редко и похуй что там 10 запросов за раз идет.

У слившегося челика как я понял юзер при каждом клике создает в десятки таблиц по запросу только что бы проверить есть ли там то, что юзер с собой принес, потом еще потенциально по десятку инсертов может прилетать туда же, если вся инфа- свежачок, зато нормализацию базы поддерживает)))
Ответы: >>1178774 >>1178976
Аноним 2018/04/24 10:55:36  №1178774 167
Ответы: >>1178776
Аноним 2018/04/24 10:58:03  №1178775 168
Ответы: >>1178776
Аноним 2018/04/24 10:59:06  №1178776 169
Аноним 2018/04/24 11:03:30  №1178779 170
>>1178760
Смотри, а попробуй в начале welcome.php
написать перед include('session.php');
написать:
echo 123;
exit;

Вдруг у тебя всё нормально редиректит, просто я смотрю, что в session.php тоже при какой-то ошибке редиректит назад на login.php, вдруг у тебя проблема как раз в том, что прохоидт целый круг редиректов и назад тебя на login.php возвращает.
Ответы: >>1178782
Аноним 2018/04/24 11:13:55  №1178782 171
4214dfdsdaw3.png (34, 552x311)
311x552
>>1178779
Думал об этом. Написал - тот же эффект.
Ответы: >>1178787
Аноним 2018/04/24 11:23:47  №1178787 172
>>1178782
И не заходит в этот файл получается?

Значит проблема в этих 3 строчках - пикрил 1.

Заходим в мануал: http://php.net/manual/ru/function.session-register.php

Видим корень зла - пикрил 2.

И вообще, напиши ка error_reporting(-1); в начале своего кода - почему еще не сделал и не посмотрел что тебе пишет твой пхп?
Ответы: >>1178803
Аноним 2018/04/24 11:32:05  №1178794 173
Прохожу практику в одной компании. Завтра будет первый день в офисе. Пхп почти совсем не знаю. Что я могу сегодня выучить чтобы не очень сильно ударить в грязь лицом?
Аноним 2018/04/24 11:51:29  №1178803 174
321dsatst.png (103, 960x633)
633x960
>>1178787
Я тупой, возможно. Вставил вот как на пике и самой первой строкой после <?php - никакого эффекта, так же пустой экран.
Ответы: >>1178806 >>1178976
Аноним 2018/04/24 11:54:20  №1178804 175
Тут люди спорят про нормализацию.
Я конечно не гуру, даже не нуб.
Но почти любой адекват скажет что этот топик впринципе настолько сильно зависит от обстоятельств что спорить о нём нет смысла без полного их описания.
Нет никаких чётких конвенций.

Поэтому использовать нужно коммон сенс.
Вот пара высосанных из жопы примеров:

Например, если содержимое столбца никогда не используется отдельно от сущности таблицы, скорее всего нет смысла её нормализовать.
Пример: posts [ id, author_id, content ] - нет смысла нормализовать [ content ], он полностью входит в сущность поста и от неё не отрывен.

Но если мы вдруг понимаем, что в ней в итоге придется при этом держать больше одного значения, значит лучше все-же нормализовать.
Пример: posts [ id, authors_ids, content ] - имеет смысл добавить таблицу posts_authors [ post_id, author_id ]. Такое может произойти если вдруг захотелось возможность писать коллективные посты.

Если есть несколько столбцов которые всегда содержат соответствующие значения, логично нормализовать их в отдельную таблицу.
Пример: posts [ id, author_id, content, category_title, category_image ] - логично вынести данные в таблицу categories [ id, title, image ], наша таблица станет такой: posts [ id, author_id, category_id, content ].

Однако, пример: posts [ id, author_id, content, category_title ] - не факт что такая структура требует нормализации.

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

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

Пойдем дальше. Пример: requests [ user_id, ip, agent, date ].

Например, поле ip - содержит четыре числа через точку. Это-же очевидный массив. Почему бы не нормализовать его разделить его на четыре столбца, по одному на октет? А потом вынести их в отдельные таблицы: /0 [ id, octet ], /8 [ id, octet ], /16 [ id, octet], /24 [ id, octet] и получить таблицу request [ user_id, agent, date, /0_id, /8_id, /16_id, /24_id ].

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

Далее, поле agent. Ну тут уж никто не поспорит совешенно очевидно что это массив жостко огранниченных по значениям полей! Первая мысль конечно же разнести его на столбцы [ .., browser, browser_version, os, os_version, device, .. ] и так далее. Потом мы сразу же захотим выделить все эти метаданные в таблицы: browsers [ id, name, version ], osses [ id, name, version ], devices [ id, name, revision, company_id, ... ], companies [ id, title, trademark_id ... ], trademarks [ id, title, image_id, ... ], images [ id, path, svg_path, icon_id, ... ] icons [ id, СТОЙ ЧТО ЖЕ ТЫ ДЕЛАЕШЬ ТЕБЕ ПРОСТО НУЖНО ПОФИЛТРОВАТЬ РЕКВЕСТЫ!!!

Просто берешь и select * from requests where agent like "%firefox%".
Хочешь знать с каких устройств заходит твой юзер? SELECT DISTINCT reqiests.agent ...
Невероятно просто.
У себя в аппликейшене можешь просто держать мап "browser" => "wildcard" / "regex"

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

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

Мимо проходил в надежде стать более лучше одеваться.
Ответы: >>1178813 >>1178975
Аноним 2018/04/24 11:54:35  №1178805 176
Что такое Middleware?
Ответы: >>1178841 >>1178973
Аноним 2018/04/24 11:55:09  №1178806 177
>>1178803
Перед include('config.php);

А вообще, идея в том, что даже если тебе твой пхп и не покажет эрор на использовании этой функции, то ты сам её замени на то, как в мануале показано.
Ответы: >>1178808
Аноним 2018/04/24 12:05:54  №1178808 178
4324.png (8, 320x168)
168x320
>>1178806
Бляяять, костыль действительно работает. Анон, я бы тебя расцеловал во все места, в которые можно расцеловать. Счастья тебе, здоровья, жену красавицу или трапа красивого, в общем всего всего. Спасибо, что на меня дауна потратил свое время!
Аноним 2018/04/24 12:06:30  №1178809 179
нахуя углубленно учить пхп,если во вреймворках синтаксис отличается на 80% ?
Ответы: >>1178814 >>1178975
Аноним 2018/04/24 12:20:45  №1178813 180
>>1178804
>Поэтому использовать нужно коммон сенс.
>Прежде чем это делать нужно очень четко представлять себе конечную цель твоей работы. Возможно, это реально требуется. Но даже в таком случае, почти наверняка тебе не нужно нормализовать эти столбцы в отдельные таблицы, потому что почти наверняка, отдельно от сущности реквеста эти данные тебе не нужны.

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

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

Вот уж точно орнул, когда представил, что устраиваешься например в фейсбук, и там блядь вся эта ваша бигдата нормализованна и юзер размазан по милиону таблиц, ну а хуле, John - популярное имя, нехуй дублироваться, го отдельную таблицу под имена)))
Ответы: >>1178845 >>1178975
Аноним 2018/04/24 12:21:13  №1178814 181
Аноним 2018/04/24 12:23:09  №1178815 182
>>1178744
После того как осилю учебник. Навскидку - тело цикла, например, рассматривать подробнее, что в нем может находиться.
Ответы: >>1178822
Аноним 2018/04/24 12:24:18  №1178817 183
какой топ фреймворк наиболее простой?
Ответы: >>1178819
Аноним 2018/04/24 12:29:17  №1178819 184
Ответы: >>1178823
Аноним 2018/04/24 12:36:00  №1178822 185
>>1178815
Во первых перестань писать под спойлером - это адово тупо и бесит.

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

1. Напиши кусок кода который умеет считать факториалы.
Пусть выводит факториалы от 1! до 10! например.

2. То же самое но с числами фибоначи.

3. Условия знаешь? Тогда напиши физз-базз:
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»
а
Ответы: >>1178832
Аноним 2018/04/24 12:36:06  №1178823 186
>>1178819
не траллируй.
cake пойдет?
Ответы: >>1178854
Аноним 2018/04/24 12:39:05  №1178825 187
>>1178230
>Условие в цикле можно сократить до одного if, когда не нужно будет обновлять эти переменные.

Снова 2 часа перебирания. Почему бы тебе не сказать что это за условия, ибо я, откровенно говоря - идиот или необучаемый.
Ответы: >>1178832 >>1178843
Аноним 2018/04/24 12:41:05  №1178828 188
как реализовать такое,я двигаю шар из одного угла в другой,остальные пользователи видят это перемещение
Ответы: >>1178975
Аноним 2018/04/24 12:49:20  №1178832 189
>>1178822
Я в этом треде уже много насрал - вот и скрываю. Да и кому нужны эти претензии пока я не составил конкретные пояснения что/где/куда? Пока еще рано.
Спасибо за задачи, я и правда не до конца понял как работает цикл. С пониманием остального материала таких проблем не возникало. Просмотр решения других анонов + чтения учебника + учебник ОПа в моем случае сработали.
>>1178825
>>1178659
>>1178190
Видишь - много ненужного флуда. Надо выражать мысль лаконичнее. Горю я сильно от своей ограниченности, анон, контролировать получается не очень.
Аноним 2018/04/24 13:10:36  №1178841 190
Аноним 2018/04/24 13:15:28  №1178843 191
Аноним 2018/04/24 13:27:26  №1178845 192
>>1178813
Ебать тебя порвало, братишка. Сразу скатился в ad hominem и скобочки подключил с боевыми картиночками.
Но вот только нубас ты, ведь сам в этом расписался:
>>1178339
>Сам часто делал в продакшене хуйню уровня
>не можешь справиться со сложными запросами
То есть в базах данных ты хуй простой, но мнение имеешь.
Ответы: >>1178847
Аноним 2018/04/24 13:34:47  №1178847 193
>>1178845
С высокомерным пидрилой я всё же в точку попал видимо.
Ответы: >>1178885
Аноним 2018/04/24 13:36:31  №1178848 194
14846769968690.png (45, 532x495)
495x532
привет всем!я снова здесь!
Аноним 2018/04/24 14:05:32  №1178854 195
>>1178823
Cock.
Шапку и задачки читай.
Оп рекомендует slim
Ответы: >>1178856 >>1178873
Аноним 2018/04/24 14:06:57  №1178856 196
>>1178854
слим это микрофреймворк.
а нужен серьезный
Ответы: >>1178874 >>1178880
Аноним 2018/04/24 14:09:46  №1178858 197
Делаю файлообменник, и возник вопрос, как адекватно прикрутить eloquent к слиму. Я засунул \Capsule\Manager в контейнер, как советуют в документации слима, но почти ничего не работает, нельзя например через фасад модели запрос к бд делать как в ларавеле. На стаковерфлоу советуют не заворачивать подключение в контейнер, а просто его объявить глобально. Так все фишки eloquent-а работают, но мне кажется эта идея слишком сомнительной из за глобальной переменной в коде.
Ответы: >>1178973 >>1179233
Аноним 2018/04/24 14:28:25  №1178873 198
Аноним 2018/04/24 14:28:38  №1178874 199
>>1178856
Выбор фреймворка от проекта зависит
Аноним 2018/04/24 14:35:55  №1178880 200
>>1178856
Зачем тебе серьезный, если ты будешь 10% от возможностей юзать?
Ответы: >>1178881
Аноним 2018/04/24 14:37:17  №1178881 201
Аноним 2018/04/24 14:43:14  №1178885 202
>>1178847
>С высокомерным пидрилой
Я не он, но ты так говоришь, как будто это плохо. Высокомерным быть лучше, чем тупым и самоуверенным, как ты.
Ответы: >>1179167
Аноним 2018/04/24 14:55:41  №1178890 203
Анончики, хочу использовать для проекта сложного магазина laravel.
Какие подводные?
До этого работал с yii2
Аноним 2018/04/24 14:57:02  №1178891 204
Ответы: >>1181501
Аноним 2018/04/24 15:25:27  №1178922 205
Сап анонимусы, работодатель на интервью подкинул задачку на алгоритмы, пытался написать на пыхе, но ничего дельного не вышло:
Расстояние между А и В 18 км, первая заправка находится от А на расстоянии 9 км, расстояние от первой до след. заправки 4 км, от второй до B 5 км. Нужно оптимально разместить три новые заправки (помимо этих трех, эти три перемещать нельзя) чтобы минимизировать максимальное расстояние между двумя заправками подряд (на всем маршруте).
Т.е. имеем массив [9,4,5] и количество заправок k = 3, нужно конкретно для этой задачи получить массив [3,3,3,4,2.5,2.5], но как это сделать алгоритмически и для любых данных, ума не приложу..
пс может вопрос тупой, сори, но если кто сталкивался или сообразит хелп плз! Всем мир!
Ответы: >>1178943 >>1178985 >>1179124
Аноним 2018/04/24 15:44:06  №1178943 206
>>1178922
Братик, у тебя почерк неровный. Из твоего поста вытекает, что уже существует всего 2 заправки
Ответы: >>1178960
Аноним 2018/04/24 16:06:14  №1178960 207
>>1178943
Да есть такое, изначально заправки две, затем над добавить еще 3 в оптимальных местах (т.е. k = 3 это новые заправки).
ОП 2018/04/24 16:38:19  №1178973 208
>>1178858

> но почти ничего не работает, нельзя например через фасад модели запрос к бд делать как в ларавеле.
А ты уверен, что эта возможность - это особенность eloquent, а не самого Ларавеля? Я сам не в курсе, если что.

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

> Так все фишки eloquent-а работают, но мне кажется эта идея слишком сомнительной из за глобальной переменной в коде.

Ну да, это уже не DI.

>>1178805

Смотря в каком контексте. В веб-фреймворках middleware (посредник) - это обертка, в которую можно обернуть процесс обработки запроса. Ну то есть функция, которая получает на вход Request, может что-то с ним сделать, затем вызывает обработчик запроса, получает ответ (Response), опять же может с ним что-то сделать перед тем, как он будет отдан клиенту (браузеру).

Выглядеть это может так:

$middleware = function (Request $req, callable $next): Response
{
...
$response = $next($req);
...
return $response;
};

middleware может быть несколько, и они вкладываются друг в дружку.

Предвосхищая вопрос, зачем это нужно, вот несколько применений:

- ограничение доступа к определенным URL
- сжатие или кеширование ответов по определенным правилам
- шифрование кук: middleware может расшифровывать приходящие куки до обработки запроса, а после зашифровывать установленные куки до отдачи клиенту
- организация сессий
- защита от CSRF
- добавление/обработка каких-то заголовков
ОП 2018/04/24 16:38:41  №1178975 209
>>1178828

Передаешь данные о перемещении на сервер по вебсокету, пользователи по какому-нибудь вебсокету подписываются на изменения и получают информацию о перемещении. На сервере нужен демон, который будет поддерживать вебсокет-соединения и ретранслировать сообщения. Ключевые слова: javascript, websocket, Websocket Application Message Protocol, php websocket server, php multiplexor.

>>1178813

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

Если что, урок https://github.com/codedokode/pasta/blob/master/db/normalization.md

>>1178809

Так а фреймворки не на PHP написаны? Как ты собрался изучать их, если PHP не понимаешь?

>>1178804

Про нормализацию я попытался написать простыми словами тут https://github.com/codedokode/pasta/blob/master/db/normalization.md

> Однако, пример: posts [ id, author_id, content, category_title ] - не факт что такая структура требует нормализации.

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

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

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

> Например, поле ip - содержит четыре числа через точку. Это-же очевидный массив.
Вообще, конечно, нет. для IP удобно использовать BINARY и в СУБД обычно есть функции преобразования между текстовым и бинарным форматами.
Ответы: >>1178981 >>1178993
ОП 2018/04/24 16:39:04  №1178976 210
>>1178803

Не храни пароли в открытом виде, читай урок https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

После header Location надо завершать скрипт. зачем ты продолжаешь его выполнять и выводишь страницу?

Вместо error_reporting в коде лучше на своем локальном сервере прописать это в php.ini вместе с display_errors=1, но не делай так на боевом сервере.

>>1178769

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

Наоборот. Отсутствие нормализации усложняет работу с БД. Усложняет таким образом:

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

Ну возьмем простой пример. Умник решил хранить теги к посту в одной колонке:

text | tags

Пост 1| php , js
Пост 2| уроки php ,photoshop

Удобно ли тут искать записи с тегом php? Легко ли добавить тег, удалить тег SQL-запросом? Можно ли сделать индекс для быстрого поиска по тегу? Если мы захотим каждому тегу добавить атрибут "скрытый", легко ли это сделать?

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

> ну кароче у меня к этой таблице селектов 99%, поэтому тут всё нормализованно и проиндексированно по айдишникам, шоб быстрее,
Ты же не понимаешь, в чем суть нормализации. Она не для того, чтобы ускорить какой-то поиск. А чтобы данные хранить в наиболее удобном для работы с ними виде.
Ответы: >>1178993
ОП 2018/04/24 16:39:26  №1178978 211
>>1178329

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

>>1178342

> user_agent_id, phone_id, ip_address_id
Ip адрес может быть отдельной сущностью, а может и не быть в зависимости от ситуации. Если у тебя с IP-адресом связаны какие-то данные, например, "репутация", то это отдельная сущность. Вместо искуственного ключа тут можно использовать естественный - сам IP адрес в бинарной форме (BINARY(4)), благо он весит всего 4 байта, а в СУБД есть функции преобразования из текстового в бинарный формат.

То же относится к phone_id и тд.

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

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

time | user_id | device_id

Урок https://github.com/codedokode/pasta/blob/master/db/normalization.md

>>1178660

Ну общая идея такая:

- программа это последовательность команд, после каждой ставится точка с запятой:

команда 1;
команда 2;

- команда - это например echo 2 + 2; или $x = 3 + 3;
- программа по умолчанию выполняется сверху вниз
- блоком называют последовательность команд, заключенных в фигурные скобки:

{
команда 1;
команда 2;
}

блоки используются не сами по себе, а как часть операторов вроде if, for, foreach.

- специальная команда if позволяет выполнять действия в определенном блоке или пропускать блок в зависимости от условия
- циклы for, foreach, while, do позволяют выполнить блок несколько раз подряд в зависимости от условий

- в программе могут содержаться функции, они начинаются со слова function, за которой идет имя:

function x()
{
команда 1;
команда 2;
}

Слово function только создает функцию, но пока не выполняет команды в ней. Также, есть анонимные функции, у них нет имени и потому указатель для их вызова сохраняется в переменную:

$x = function () { ... };

- в программе можно вызвать функцию, указав ее имя и круглые скобки: echo x(); Анонимная функция вызывается через переменную, в которой хранится указатель на нее: echo $x();

Вот краткое описание синтаксиса PHP и того, что можно делать.

Ты бы спрашивал вопросы, если что-то непонятно.
ОП 2018/04/24 16:39:51  №1178979 212
>>1178659

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

>>1178190

> $zero = 0;
Это плохое название для переменной, так как далее ты ее увеличиваешь и там уже не zero. Надо писать, что хранится в переменной, для чего она нужна. В данном случае переменная указывает на позицию символа слева и ее можно назвать $leftPosition, $leftPos, $leftCharPos.

> for ($i = 1; $halfLength == $count; $i++) {
Цикл написан с ошибкой. Второй компонент в заголовке - это условие продолжения цикла. Пока оно верно, цикл выполняется, как только становится неверно - цикл завершается. У тебя в начале $count равно нулю, $halfLength - половина длины строки, которая больше нуля. Условие равенства не выполняется, цикл не выполняется ни разу.

Надо писать

$i < $halfCount

то есть, выполнять, пока $i меньше, чем $halfCount.

> } elseif($halfLength == $count) {
Это можно было не делать, а просто поставить echo $result после цикла. Так как цикл должен завершиться, когда перестанет выполняться условие $i < $halfCount, и начнет выполняться код за ним.

>>1178627

И еще одна причина появления ООП - это то, что многие вещи удобно представлять именно в виде объектов, у которых есть свойства (поля), и действия над ними (методы).
Ответы: >>1179285
ОП 2018/04/24 16:40:16  №1178980 213
>>1178274

> $before = checkForTypos($text);
Функция же ничего не возвращает.

> } else {
> echo "Текст успешно исправлен, опечаток больше нет!";
> exit();
exit это плохо, так как ты когда пишешь функцию, не знаешь, кто и когда ее будет вызывать (даже если ты пишешь один, притворись, что не знаешь, и не видишь код снаружи функции). Соответственно ты можешь кому-то этим exit нарушить логику работы программы, код после вызова функции не выполнится. Функция не должна самовольно завершать всю программу.

Также, твоя программа видит в латинских словах опечатки в каждой букве: https://ideone.com/LqT9UN

Надо искать только слова из смеси двух алфавитов.

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

>>1178258

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

- мы банк
- у пользователя есть в нем 2 аккаунта
- нам надо взять деньги с аккаунта 1, аккаунта 2 и найти сумму денег пользователя

Мы пишем код:

$sum1 = getValue("SELECT ... WHERE account = 1");
$sum2 = getValue("SELECT ... WHERE account = 2");
$sum = $sum1 + $sum2;

Корректен ли он?

Ну конечно нет. В промежутке между получением $sum1 и $sum2 могли произойти переводы денег с аккаунта 1 на аккаунт 2 и сумма получится больше фактической. Для предотвращения этого мы можем заблокировать строчку с первым аккаунтом:

BEGIN
SELECT ... WHERE account = 1 FOR SHARE
...
COMMIT

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

Там еще есть опция получения эксклюзивной блокировки на строчку - FOR UPDATE.

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

Теперь второй вопрос. Мы пишем перевод денег со счета 1 на счет 2. Какие тут есть подвохи?

UPDATE ... SET value = value - 100 WHERE account = 1
UPDATE ... SET value = value + 100 WHERE account = 2

Я вижу минимум два:

- скрипт может упасть на полпути, и деньги не дойдут. Или отключится электричество.
- другая транзакция может читать записи между 1-й и 2-й строчкой и увидит меньшую сумму денег, чем есть

Обе этих проблемы решаются заворачиванием в транзакцию:

BEGIN
UPDATE ... SET value = value - 100 WHERE account = 1
UPDATE ... SET value = value + 100 WHERE account = 2
COMMIT

Изменения, вносимые внутри транзакции, не видны другим до выполнения COMMIT.

Теперь вопрос: если же нам надо снять с 2 счетов по 100 тугриков с каждого и положить на третий, то что мы делаем?

Мануалы:

- https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html
- https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-shared-exclusive-locks
- https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B8%D0%B7%D0%BE%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%82%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B9
Ответы: >>1179015
Аноним 2018/04/24 16:40:19  №1178981 214
>>1178975
так вроде в пхп с сокетами все хуево
Ответы: >>1178984
ОП 2018/04/24 16:40:55  №1178982 215
>>1178242

> ([а-яёА-ЯЁ]+)?
+ и ? можно заменить на звездочку.

> (([а-яёА-ЯЁ]+)?([a-zA-Z])([а-яёА-ЯЁ]+)?){1,}
Вообще, эта регулярка не требует наличия буквы кириллицы, а вполне совпадет с единственной латинской буквой.

Хотя программа как-то и работает, регулярки, думаю, надо улучшить.

>>1178200

Так ты только его и выводишь командой var_dump. Выполняются несколько раз только действия внутри цикла (блока фигурных скобок), а var_dump стоит после и выполняется один раз.
Аноним 2018/04/24 16:43:24  №1178984 216
>>1178981
те только через костыли
Аноним 2018/04/24 16:44:33  №1178985 217
>>1178922
Смотри как тебе такое универсальное решение
На вход берешь массив сегментов и количество разделений которые нужно добавить.

Делишь 18 (общая длинна) / 5 (общее количество разделителей) = 3.6 - best т.е. в идеальном мире если бы заправки можно было двигать... заодно если у тебя всего один сегмент то ответ уже готов.

Вычисляешь
9 4 5 - наш массив ; 3 - остаток бюджета делителей
5.4 0.4 1.4 - отклонения сегментов от идеального; 2.4 - среднее отклонение

Берешь первый отрезок с самым большим отклонением и делаешь вот что: делишь его по очереди на разное количество сегментов в бюджете и считаешь среднее отклонение. Лучший разрез даст наименьшее отклонение.

4.5 4.5 4 5 ; 2
0.9 0.9 0.4 1.4 ; 0.9

3 3 3 4 5 ; 1
0.6 0.6 0.6 0.4 1.4 ; 0.72

2.25 2.25 2.25 2.25 4 5 ; 0
1.35 1.35 1.35 1.35 0.4 1.4 ; 1.2

Выбираем разрез на 3 части, в бюджете остается еще разрез. Повторим алгоритм, теперь резать будем 5, но так как вариант порезать сегмент всего один (у нас один разрез) то сразу получаем конечный результат:

3, 3, 3, 4, 2.5, 2.5 ; 0
0.6, 0.6, 0.6, 0.4, 1.1, 1.1 ; 0.88

Предположим другие входные данные:
50 22 2 9; 5; ( 10.375 )
Поехали:
25 25 22 2 9; 4; 10.125
16.66 16.66 16.66 22 2 9; 3; 6.7
12.5 12.5 12.5 12.5 22 2 9; 2; 4.26
10 10 10 10 10 22 2 9; 1; 2.9
8.33 8.33 8.33 8.33 8.33 8.33 22 2 9; 0; 3.73
Выбираем вариант с разделением на пять частей (тратим 4 делителя):
10 10 10 10 10 22 2 9; 1; 2.9
Ну думаю уже догадался что мы поделим и что получится.

На вскидку кажется нет узких мест.

Теперь давай попробуем прикинуть алгоритмическую сложность:
Первое: перед каждым разрезом мы проходимся по массиву для поиска самого большого куска, это N. Операцию выбора большого куска придется также повторить до тех пор пока k не кончится - N k, но так как k уменьшается то N log( k )
Второе: чтобы найти лучший разрез мы делим наш кусок на k..1 и каждый раздел расчитываем, это еще раз k, так что k ^ 2, но так как k уменьшается то log ( k ^ 2 )

Вторую операцию мы повторяем столько раз сколько дает первая, т.е.: N log( k ) log ( k ^ 2 )
Алгоритмическая сложность если я правильно понимаю O( N log( k ) log ( k ^ 2 ) )
Надеюсь если будет кто шарящий читать поправит.

Пойду устраиваться вместо тебя
Аноним 2018/04/24 17:04:06  №1178993 218
>>1178975 >>1178976

Про теги я знаю допустим, не случайно уточнил что примеры из жопы, а последние специально доведены до абсурда. Мысль то была не в этом, а в том что думать нужно, не просто делить всё подряд...
Аноним 2018/04/24 17:41:03  №1179015 219
>>1178980
А как будут работать локи строк с myisam таблицами? Если я правильно понял там в любом случае при DML запросах она блочится целиком. И заодно суб-вопрос, зафигом там вообще myisam если даже текста нет...

И как думаешь нужен ли мне лок всей таблицы вот для чего:
есть основная допустим main: | id | ... |
и много разных:
main_secondary: | main_id | secondary_id |
Мне нужно удалить запись из основной, предварительно почистив все остальные. Но есть вероятность, что пока я буду их чистить и дойду до удаления основной, в какую-то из них опять что-то добавят.
В то-же время не хотелось бы лочить их все. И не хотелось бы получить висяки.
Я так понимаю, если добавить констрейнты foreign key, то мне просто не даст удалить запись если в процессе кто-то что-то опять добавит, но такой вариант мне тоже не нравится - просто inconvinient для пользователя.

Что если дописать там поле допустим QUEUED_FOR_DELETION, и во всех местах приложения не давать добавлять связи для таких сущностей, а потом когда-нибудь их удалить. Можно было бы конечно вообще не удалять в таком случае но таблица будет расти и место там не резиновое.
Ответы: >>1196645
Аноним 2018/04/24 19:55:29  №1179124 220
>>1178922
У меня как то так вышло: http://sandbox.onlinephpfunctions.com/code/0494c1a1d92e3584993a9514f8e60459c33c57b5
Тут конечно еще нужно допиливать. Надо бы больше тестов. Проверка входящих значений, имена поправить и т.д. Хотя я собой доволен. Когда твой пост прочитал, вообще не понимал как подступиться.
Ответы: >>1179162
Аноним 2018/04/24 21:19:38  №1179162 221
>>1179124
Как же лаконично и алгоритмически более эффективно.
А казалось бы просто представь сегмент как что-то самостоятельное, пиздец я еще тупой, рановато мне пытаться помогать кому-то.
Аноним 2018/04/24 21:44:23  №1179167 222
>>1178885
Для чего лучше? Оба варианта хуевы для взаимодействия, что первый долбоеб которому ничего не докажешь, но он окукливается при первой же угрозе и будет тебя скрыто хейтить, иногда попердывая при удобном для него случае, как и второй, который будет стоять на своей неправоте и считать что спор выигран тем, за кем было последнее слово или тот кто громче крикнул.
Аноним 2018/04/25 05:35:23  №1179233 223
Аноним 2018/04/25 06:41:51  №1179252 224
продублирую сюда из бд-треда
Вопрос по постгресу. Уменя есть колонка в таблице с варчар данными, которые есть обычный json. Типа:
{"Lat":"123","Lon":"231"}
Суть в том, что мне нужно сделать из неё jsonb, но так, чтобы значения были нумерик, а не текст. Обычный alter, который set type jsonb using col::jsonb переводит в обычный текст (значения в кавычках), а мне нужно от этих кавычек избавиться. Как быть?
Ответы: >>1179309 >>1179390
Аноним 2018/04/25 08:17:15  №1179282 225
Ощущаю себя тупым. Сколько времени у вам заняло изучение html+css?только без толстоты плс
Ответы: >>1179304
Аноним 2018/04/25 08:21:42  №1179285 226
>>1178979
Меня почему - то ступор на самых простых вещах, каждый раз. В голову не пришла мысль, что если цикл не ломается - значит все совпало. И что считать не надо, так как уже все считается.
А по поводу условия в цикле - это уже просто невнимательность. Много раз переделывал, "глаз замылился".
http://sandbox.onlinephpfunctions.com/code/ce073838ae8fa5753fef60ff8c5018ca95a65de4
Так верно?
Ответы: >>1196645
Аноним 2018/04/25 09:02:26  №1179304 227
>>1179282
я вообще изучал этот кал. это же фронтэнед, а мы тут учим php sql ООП фреймворки линуху
Аноним 2018/04/25 09:09:48  №1179309 228
>>1179252
Покажи как ты сохраняешь
Аноним 2018/04/25 11:39:28  №1179390 229
>>1179252

Сделать бекап. Добавить новую колонку типа JSON. Сделать UPDATE и сконвертировать значения из старой колонки в новую. Проверить, что все ок. Дропнуть старую колонку.
Аноним 2018/04/25 14:17:55  №1179478 230
YRKKcAy0.png (127, 512x512)
512x512
Планирую начать изучать PHP, но сначала надо определиться с web-сервером. Когда то работал немного на OpenServer.
Какой посоветуете? Мало ли, может придется использовать сервер в будущем и я уже буду знаком со всеми настройками
Ответы: >>1179875 >>1196645
Аноним 2018/04/25 17:25:04  №1179617 231
Привет анонам. Настроил тут у себя ОЧЕРЕДЬ файлообменника, теперь могу конвертировать видео и сжимать картинки без регистрации и смс. У меня вопрос. Заресайзить картинку в пхп это не дело одной команды, ffmpeg пока еще не трогал. Я вот подумал, а почему бы не написать все эти дела на каком-то питоне(я его не знаю, но пример ресайза на питоне в 2-3 раза меньше чем на пхп), ну и может как-то наладить общение между ними типа ВСЕ_ОК или там ПРАВА_ЗАПИЛИ(понятия не имею как).
Ответы: >>1179730 >>1179739 >>1196645
Аноним 2018/04/25 20:04:30  №1179730 232
>>1179617
Умные люди ресайзят картинки на клиенте.
Аноним 2018/04/25 20:17:59  №1179739 233
>>1179617
Я опять выхожу на связь. До меня дошло что я не знаю статус выполнения задач, и как я понял то beanstalkd мне ничего не скажет. Мне теперь надо запилить еще таблицу статуса задач в бд, и к ней при реквесте обращаться? Не ну это уже некрасиво.
Ответы: >>1196645
Аноним 2018/04/26 01:18:27  №1179828 234
Ответы: >>1179830
Аноним 2018/04/26 01:21:36  №1179830 235
Аноним 2018/04/26 04:44:10  №1179846 236
Аноны, установил на laravel npm, запустил npm run watch, но когда я делаю изменения в любом vue компоненте, изменения проявляются в браузере спустя где то пол часа. Иногда все работает сразу, но обычно такая фигня. Как фиксить?
Всегда пишется что build successful
Ответы: >>1183227 >>1196646
Аноним 2018/04/26 07:15:46  №1179875 237
>>1179478
1 стул-xampp
2 стул-сразу перенести разработку на VPS
Аноним 2018/04/26 08:13:37  №1179898 238
Поясните, как вы мониторите доступность и нормальную работу своих сайтов?
Есть идея запилить скрипт, который будет чекать определённый элемент на странице сайта. Простой чек по коду 200 не подходит, потому что сайт может отдавать такой код и при этом, например, быть пустой страницей или если оплата вовремя не внесена была домен всё равно будет доступен только будет редиректить на скрипт хостера.
Норм идея так делать? Сайты мои, поэтому можно не париться, что элемент, наличие которого чекаю, исчезнет.
Ответы: >>1182122 >>1196646
someApprentice 2018/04/26 11:01:25  №1180024 239
>>1178355
>>Какие ты видишь решения проблемы?
>Я ещё не освоился с JS, но пока могу сказать, что это нужно разделить либо на отдельные функции, либо разбить на два класса - Helper и Handler, который вешает обработчики (к примеру, Handler.prototype.handleClickOnImg...).
Я ещё подумал, что можно разить ещё на отдельные классы, например PopUp и поместить в него все методы связанные с PopUp'ом. Например, PopUp.handle(); или PopUp.resize() и т.д.

Я только не знаю насколько это будет читабельно https://codepen.io/anon/pen/YLGNRY?editors=0010
Мне лично нравится такое решение.
Ответы: >>1182086 >>1182086
Я 2018/04/26 12:24:05  №1180063 240
Вкатываюсь в вашу парашу. Почти полный ноль, знаком только с основными терминами разработочки, так что надеюсь вы тут не уёбки и будете хоть иногда отвечать на мои вопросы.

1) Сразу ставить линупс и привыкать к нему или всякие апачи и на окнах нормально функционируют? Если на окнах придрочусь, не будет такого что в линупсе по другому всё работает? На каких осях кодят во всяких кампаниях, куда меня потенциально могут взять джуном? люблю вас
Ответы: >>1180066 >>1181356
Аноним 2018/04/26 12:32:54  №1180066 241
>>1180063
Ну смотри, с линуксом ты в любом случае столкнешься, так что выбор не между натуралом и геем, а между натуралом и бисексуалом.
С такой точки зрения может даже лучше быть бисексуалом - ты будешь знать много всяких тонкостей о которых натуралы даже не задумываются.
Минус же в том что обычный традиционный секс тебя уже не будет удовлетворять.
Аноним 2018/04/26 12:35:56  №1180072 242
У меня дежат на впс два сайта, один на 8080м порту, другой на 8081, однако корректный сервернэйм апач отдает только для одного, на втором (8081) он отдает IP вместо домена. Пробовал уже прописывать ServerName в sites-enabled/000-default.conf, не помогло. В чем затык? Заранее благодарен за помощь.
Ответы: >>1180074 >>1180085
Аноним 2018/04/26 12:36:34  №1180074 243
>>1180072
Если что, сервак на дебиане 8, апач 2.4, пыха 7.2.
Аноним 2018/04/26 12:42:43  №1180081 244
Привет всем.
Вопрос к про, задали сегодня на собеседование.
Написать семафор для доступа к абстрактному ресурсу на 7 строк кода PHP.
Я чет тормазнул на этом, вообще все реализации что были в голове и то что я знаю о семафорах подразумевало много больше кода.
Чего от меня хотели?
Сможет кто решить это?
Аноним 2018/04/26 12:51:31  №1180084 245
V-Dolnik-1.png (15, 694x485)
485x694
V-Dolnik-2.png (25, 691x659)
659x691
Linux.png (50, 570x459)
459x570
>>1180081
>Чего от меня хотели?
Ну, меня например, неделю назад на улице остановили и сказали сюда иди сюка. Потом избили, прошлись по мне ногами, но не обоссали, а достали свои мужыцкие достоинства и давай трясти ими.
А тебе велели семафор... семафор для доступа... для доступа к абстрактному ресурсу на 7 строк кода... на PHP.

Аноним 2018/04/26 12:51:31  №1180085 246
>>1180072
Отбой, разобрался. В апаче поменял, а про nginx забыл.
Аноним 2018/04/26 13:05:40  №1180097 247
Аноним 2018/04/26 13:45:33  №1180132 248
ОП и компания Решил задачу "Генератор имени" через конкатенацию строк и через имплод все работает верно. Для эксперемента попробовал искать рандомный слог через mt_rand,а не как делал ранее через array_rand. И тут столкнулся с проблемой - программа ни в какую не хочет видеть последний слог в массиве, правильно высчитывает его положение , а через echo выводит пустое место. Пробовал решать в phpstorm - Notice: Undefined offset: 16 in и тд.
В чем проблема? По идее все должно работать правильно =(
Для наглядности увеличил число слогов до 40 https://ideone.com/xxWWWY
Ответы: >>1180140
Аноним 2018/04/26 13:51:21  №1180140 249
>>1180132
Индексы в массивах в php начинаются с 0, а не единицы. Поэтому лучше сделать так
>$random = mt_rand(0, count($letters)-1);
Аноним 2018/04/26 13:53:53  №1180141 250
>>1174695 (OP)
Дайте пожалуйста убер-краткий гайд с примерами для даунского вката в sql на уровне "решить задачу на собеседовании". САМЫЕ основы - как добавлять, удалять, изменять данные знаю. Но вот промежуточные таблицы в запросе, функции всякие, объединения/соединения таблиц, вычитания, переменные в запросе - я вообще ноль. Памахити, братишки.
Ответы: >>1180143 >>1180223 >>1181358
Аноним 2018/04/26 13:54:40  №1180143 251
Ответы: >>1180151
Аноним 2018/04/26 14:04:44  №1180151 252
>>1180143
Так там тесты, а не гайды. Или ты вот это
http://www.sql-tutorial.ru
имел ввиду?
Там дохуя очень, я за полдня не успею прошариться. Так бы на офф-сайте доки, может, читал с гуглопереводчиком, если бы времени было вагон.
Аноним 2018/04/26 14:38:23  №1180165 253
Устроился PHP джуном. У вас в пхп да и вообще в бекенде есть хоть что-нибудь интересное? Или вы целыми днями пишете обработчики для форм? Прошла всего неделя, а меня уже заебало работать
Аноним 2018/04/26 14:52:51  №1180172 254
Объясните как на apache быстро открывать сайт php, чтобы не писать каждый раз в поисковой строке http:\\localhost
На openserver это делалось в разы интуитивней
Ответы: >>1180179
Аноним 2018/04/26 14:56:52  №1180174 255
>>1180165
Бекенд же ведь он разный бывает. Если просто сайты делать, то действительно немного интересного. А так иногда приходится и базы настраивать и проектировать, репликацию, веб-сокеты.
Аноним 2018/04/26 14:58:31  №1180179 256
>>1180172
Быстро решительно добавляешь ссылку на сайт на панель закладок. Сайт теперь открывается в один клик.
Ответы: >>1180181
Аноним 2018/04/26 15:00:07  №1180181 257
>>1180179
Я об этом не подумал. Спасибо
А почему во всех туториалах по началу работы с php советуют брать связку apache+MySQL+PHP7, а не OpenServer, где все это есть и работа происходит чисто интуитивно?
Ответы: >>1180182
Аноним 2018/04/26 15:01:48  №1180182 258
>>1180181
Потому что openserver это чисто виндовая хуйня. Следоваетльно чуть более чем полностью бесполезная. Ты когда будешь сайт на хостинг переносить столкнёшься с линухом куда будешь накатывать apache/nginx + mysql + php
Ответы: >>1180184
Аноним 2018/04/26 15:05:37  №1180184 259
>>1180182
Хмм, понятно. А есть какой нибудь туториал по apache? Я имею ввиду вот зачем мне Apache Service monitor? У меня там даже start не горит. Вдруг есть какая то инфа, про которую стоило бы узнать заранее? Был бы благодарен
Ответы: >>1180185
Аноним 2018/04/26 15:08:45  №1180185 260
>>1180184
Накати лучше линух в виртуалку хотя бы и играйся там с установкой и настройкой окружения. Там это всё приятней и быстрее делается, чем в винде.
На винду не случайно запилили все эти комбайны типа опенсервера и xammp ибо устанавливать все эти компоненты по отдельности тот ещё гемор под винду.
Ответы: >>1180188
Аноним 2018/04/26 15:10:39  №1180187 261
Как сильно надо знать пхп чтобы на божественные 15к рупий в месяц выйти? Срок по времени?
Ответы: >>1180190
Аноним 2018/04/26 15:10:57  №1180188 262
>>1180185
Да... Практика в линуксе определенно нужна, но в любом случае пока что в планах - это осилить PHP. Думаю это еще не скоро будет
Ответы: >>1180189
Аноним 2018/04/26 15:14:05  №1180189 263
>>1180188
Тогда забей и работай как удобно пока. Хоть в опенсервере.
Ответы: >>1180191
Аноним 2018/04/26 15:14:33  №1180190 264
>>1180187
Нихуя не надо знать. Прям завтра идёшь и устраиваешься.
Ответы: >>1180214
Аноним 2018/04/26 15:17:04  №1180191 265
>>1180189
Хорошо. Спасибо за ответ анончик.
Хотя у меня последний вопрос остался. Как определять, например, что нужно выполнять на js, а что на php?
Ответы: >>1180193
Аноним 2018/04/26 15:19:40  №1180193 266
>>1180191
Cлишком общий вопрос. Зависит от задачи, очевидно. Нельзя ответить коротко и однозначно.
Аноним 2018/04/26 15:22:17  №1180197 267
>>1174695 (OP)
Как в задаче с "Сумма прописью" числам придать женский род?
Ответы: >>1180208
Аноним 2018/04/26 15:35:52  №1180208 268
>>1180197
Хуяришь массив. Цифор всего десять.
Аноним 2018/04/26 15:52:51  №1180214 269
>>1180190
>устраиваешься.
Там то все понятно, требования везде примерно одинаковые по шаблону, абстрактное знание php, mysql, html, js , jquery.

А вот как быстро спасти себя от голодной смерти с помощью пхп с помощью фриланса - не известно.
Аноним 2018/04/26 16:30:38  №1180220 270
Сап, Антошки!
Задачка с выводом email-адресов из текста:
https://ideone.com/0ZiZMs

Вроде я её и решил, но мне не нравится такое решение, ибо я хотел бы, чтоб мне выводились только имэйл адреса, а не то, что получается у меня (у меня тоже адреса, но они делятся по частям регулярного выражения в массив)

Подскажите, как можно вывести только название адреса.
Спасибо!
Ответы: >>1180224 >>1196646
Аноним 2018/04/26 16:34:14  №1180223 271
Ответы: >>1180230
Аноним 2018/04/26 16:34:15  №1180224 272
Аноним 2018/04/26 16:46:36  №1180230 273
Ответы: >>1180259
Аноним 2018/04/26 17:36:42  №1180259 274
>>1180230
Шутишь? Он огромный, а в оп-посте самые азы. Ладно, спасибо.
Аноним 2018/04/26 18:49:52  №1180307 275
>>1180165
>устроился хуесосом в говноконтору ковырять лендинги
>мам у вас в пхп так скучно, где интересное то?
Чому ты такой тупой?
Я, да Я 2018/04/26 18:51:12  №1180308 276
Ладно, с дикой тоской в глазах дошел до генератора leet шифра и пошел спатки.

Кому заняться нечем, можете рейтануть, раскритиковать мой код. Советы тоже норм
Обмен валют - https://ideone.com/GxnpIE
Игра в кубики - https://ideone.com/fpmVXk
Таблица умножения - https://ideone.com/XIc2VN
Процент вклада - https://ideone.com/v9dwvI
Расчет кредита - https://ideone.com/UOy1TU
Средний балл - https://ideone.com/Wu7ve0
Сравнение роста - https://ideone.com/0iNujR
РулетОчка - https://ideone.com/akfHyX
Генератор имён - https://ideone.com/qTV2wH
Шифровка - https://ideone.com/M9ebqb

Люблю вас
Ответы: >>1180464 >>1188984 >>1196646
Аноним 2018/04/26 19:45:49  №1180331 277
>>1180165
А формы от csrf защитил? А как быть с формой, если страница кэшируется? А валидацию с сохранением промежуточных значений в сессию сделал? А что, если для записи данных нужно двадцать таблиц из трёх бд дёрнуть, как вон выше у анона с ёба-нормализованной бд, а клиент хочет сразу ответ получить? И так далее, и так далее
Ответы: >>1180355
Аноним 2018/04/26 20:17:09  №1180355 278
>>1180331
Жаль тот челик с нормализованной бд окуклился и не ответил в чем таки профит его подхода.
Аноним 2018/04/27 08:19:47  №1180464 279
>>1180308
Что там критиковать-то, кек, три строчки.
Аноним 2018/04/27 09:12:51  №1180470 280
Задачка "Кредит на айпад". Пока что пробую создать функцию для 2 из 3 банков. Выводится пустота, ошибку самостоятельно не нашел.
https://ideone.com/2ZrJCa
Ответы: >>1180471
Аноним 2018/04/27 09:21:07  №1180471 281
>>1180470
>Выводится пустота
Потому что у тебя функция ничего не возвращает. Где return?
Ответы: >>1181424
Аноним 2018/04/27 09:24:39  №1180472 282
Держу двач на втором мониторе - он немного старый и с разрешением 1280*1024, и в общем хотел немного поковырять пользовательские css, но что-то не работает ничего. Например решил начать с простого и немного уменьшить марджины у постов, что бы влезало больше текста и полоса прокрутки текста в посте тоже уехала на край. Но ничего не работает, в юзер css пытался лепить как правило вида:
post-message { margin: 5px; }
так и
blockquote { margin: 1em 5px;}
Не подхватывается, кто-нибудь сталкивался?
Ответы: >>1180473
Аноним 2018/04/27 09:25:34  №1180473 283
>>1180472
>.post-message { margin: 5px; }
.post-message { margin: 5px; }
Ответы: >>1180474
Аноним 2018/04/27 09:27:22  №1180474 284
>>1180473
Что ты хочешь мне сказать?
И вообще сори, отбой - всё заработало, я забыл галочку в настройках поставить собственно, которая активирует всё это.
Ответы: >>1180475
Я, да Я 2018/04/27 09:28:19  №1180475 285
>>1180474
>Что ты хочешь мне сказать?
Что перед классами нужна точка.
Ответы: >>1180519 >>1180520
Аноним 2018/04/27 09:45:50  №1180478 286
Чятик, где про простейший роутинг почитать. Ночью гуглил, но все какое то на базе ООП и считаю что для начала слишком сложно.
Хочу чет на безе GET, как описывалось в пасте про MVC, но загуглить не смог.
Аноним 2018/04/27 09:47:52  №1180479 287
>>1180478
Ну так это, берёшь какой-нибудь известный микрофреймворк типа Slim (или Fat Free Framework) и смотришь как там устроен роутинг.
Ответы: >>1180480
Аноним 2018/04/27 09:55:22  №1180480 288
>>1180479
так они все достаточно громоздкие, хотелось бы чет простое. Чисто для понимания как такое написать и собственно написать.
Аноним 2018/04/27 10:29:40  №1180489 289
>>1180478
Я бы начал такое вот васянить: допустим хочу что бы мои урлы были вида:
site/controller/method/argument

На примере студентов это бы выглядело:
student.list/Student/show/123
Student - это контроллер тут
show - это метод контроллера
123 - это аргумент который мы ему передаем ( id студента которого мы хотим посмотреть )

Ну и вот тебе надо смотреть в $_SERVER там смотреть в какое-нибудь ["PATH_INFO"]
дергать оттуда все эти куски урла
далее отдавать специальной функции, которая будет как-то так всё это обрабатывать:

$test = new $controller; //в $test ляжет новый объект класса Student;
$test->$method($argument); //тут она вызовет метод show и передаст ему аргумент 123 в примере

Ну и для начала норм как по мне.
Аноним 2018/04/27 10:41:05  №1180495 290
Untitled.png (171, 604x739)
739x604
>>1180478
Вот простая поэтапная инструкция

Ответы: >>1182405
Аноним 2018/04/27 11:54:17  №1180519 291
>>1180475
Спасибо энивей за помощь и молниеносный отклик, настроил себе окошко двача так, что вообще ничего лишнего и легко и приятно стало читать большие посты на мелком монике, ну и форма ответа теперь внезапно наменого менее мешающая.
Аноним 2018/04/27 11:59:57  №1180520 292
Еще с лету вот такой вопрос. Вот например есть твои посты - посты которые подсвечены красным, есть посты которые содержать ответ на твой поста - подсвечены пунктиром. А есть возможность как-то внутри этого поста как-то обозначить какая часть ответа тебе? Например что бы когда человек цитирует твой пост - то его номер:
>>1180475
Скажем выводился жирным. Или тут нужно уже кастомный js подрубать что бы высчитывать подобное? И проще сразу идти писать абу что бы вводили?
Ответы: >>1180523
Аноним 2018/04/27 12:04:07  №1180523 293
>>1180520
Да, нужно скрипт писать, ибо сообщения в самом хтмл ничем не выделяются для каждого юзера, да и с жс ты вряд ли найдешь универсальный способ определения того куска текста, который именно для тебя писался. Потому что я могу так сделать
>1
>2
текст
Могу так
текст
>1
Могу даже те>1кст
Ответы: >>1180526
Аноним 2018/04/27 12:10:35  №1180526 294
>>1180523
Вот пример маломальский того что я хотел бы на пикриле.

Хотя бы сам номер поста который мой - выделяеся жирным, помню пару тредов назад кто-то вкидывал как можно кастом js какой-то через закладки браузера активировать на страницах. Есть идеи как можно по простому и быстро такое налепить?
Ответы: >>1180527 >>1180530
Аноним 2018/04/27 12:16:49  №1180527 295
>>1180526
А, ну это легко сделать наверно. Делаешь массив ТВОИХ ответов с треда, потом смотришь в пунктирных постах ответы и проверяешь со своим массивом, если true то делаешь жирным.
Ответы: >>1180545
Аноним 2018/04/27 12:24:44  №1180530 296
>>1180526
тест, что будет если отвечать самому себе.
Я, да Я 2018/04/27 12:29:30  №1180531 297
mb_strtolower в ideone уже не работает? В ошибке пишет что неизвестный метод
Ответы: >>1180533
Аноним 2018/04/27 12:32:40  №1180533 298
>>1180531
Там mb_* функции не работают, не подключили модуль в пхп.
Ответы: >>1180542
Аноним 2018/04/27 12:58:58  №1180542 299
>>1180533
Блядь в учебнике же написано, что нужно перекатываться на ideone
Ответы: >>1180545 >>1196647
Аноним 2018/04/27 13:15:56  №1180545 300
>>1180527
Вопрос в том, что как это прикрутить к двачу со стороны клиента. Нашел уже тот пост с костылем, но во первых что-то это в лисе не работает, а во вторых надо же кнопку нажимать, а хочется автоматизировать и забыть.

>>1180542
Учебник года 3 назад писался, а на идеоне прост забыли при перекате на новую версию пыхи подключить библиотеку в ini файле, напиши им в поддержку если хочешь. contact@ideone.com
Ответы: >>1180548 >>1180913
Аноним 2018/04/27 13:18:58  №1180547 301
Если кто не слышал про букмарклеты, то расскажу. Это закладки в браузере, в которых вместо URL указан скрипт на JS. Ну например, вот как можно сделать букмарклет, который подсвечивает посты в треде без ответов.

Щелкните правой кнопкой на панели закладок (чтобы показать ее в Хроме, используйте Ctrl + Shift + B) или найдите в меню пункт "добавить закладку". В поле "название" введите что хотите, в поле URL введите:

javascript:var t = document.querySelectorAll('.post-wrapper:not(.watched-posts-marker)');Array.prototype.map.call(t, function (el) { var ref = el.querySelectorAll('.ABU-refmap a'); if (!ref.length) { var bg = el.querySelector('.post'); bg.style.backgroundColor = '#fbfb9d'; } });

(проверьте, что на сайте латинские буквы не заменены на кирилицу).

После этого сохраните закладку. Теперь при нажатии на эту кнопку запустится скрипт в контексте страницы и подсветит неотвеченные посты желтым.
Аноним 2018/04/27 13:30:05  №1180548 302
>>1180545
>Нашел уже тот пост с костылем, но во первых что-то это в лисе не работает, а во вторых надо же кнопку нажимать, а хочется автоматизировать и забыть.
Переделой
Аноним 2018/04/27 14:06:23  №1180564 303
>>1176196
Бамп, опчик, я надеюсь ты посоветуешь что-то, когда будет время :3
Ответы: >>1181501
Аноним 2018/04/27 18:34:02  №1180670 304
Нужна хелпа, попробовал решить задачу про Льва Толстого через перебор общего массива - в итоге заблудился в трех соснах и не могу вывести текст на экран. И вообще есть способ решить эту задачу с помощью foreach не используя is_array???
https://ideone.com/l7OcfA
Ответы: >>1180681 >>1180685 >>1181500
Аноним 2018/04/27 18:59:39  №1180681 305
>>1180670
Зачем там implode вообще?
Аноним 2018/04/27 19:03:46  №1180685 306
Ответы: >>1181500
Аноним 2018/04/27 23:49:04  №1180913 307
>>1180545

Букмарклет работает только по нажатию кнопки. Также, в него не запихнешь много кода.

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

Расширение пишется на HTML/CSS/JS. Оно может содержать:

- фоновую страницу. Это HTML + JS код, который работает в своем, отдельном окружении (то есть можешь представить, что в браузере открывается невидимая вкладка и в нее загружается твой код и что-то там делает)
- кнопку, добавляемую на панель браузера или в адресную строку (browser action/page action). Она может показывать HTML страницу при нажатии или реагировать на это как-то еще.
- также оно может взаимодействовать с другими вкладками и внедрять в них JS скрипты (content scripts). Эти скрипты могут взаимодействовать с DOM страницы, например, находить посты и что-то с ними делать.

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

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

Стандартный формат расширений - Chrome Extension. Этот формат разработан Гуглом и позже его адаптировали разработчики всех современных браузеров под названием WebExtension, включая Opera, Firefox и Edge. А я помню, как когда-то делал слои абстракции, чтобы сделать расширение и для chrome, и для firefox.

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

Я бы советовал для облегчения кода не использовать jQuery, если это не замедляет разработку, так как расширение будет работать только в современных браузерах, где есть querySelector, classList и другие современные DOM методы. Там, где их нет, нет и поддержки таких расширений. Или использовать облегченный аналог jQuery вроде zepto.js (для сайтов, я бы его не рекомендовал, из-за совместимости только с новыми браузерами).

Ссылки:

- пример написания расширения (рус) https://canonium.com/articles/briefly-about-building-a-chrome-
- офиц туториал (англ) https://developer.chrome.com/extensions
- офиц док (англ) https://developer.chrome.com/extensions/devguide
- док. по совместимости с фаерфоксом (англ) https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Porting_a_Google_Chrome_extension
- про content scripts (рус) http://chrome-ext.blogspot.ru/2014/02/content-scripts.html

Задавай вопросы, если что.
Аноним 2018/04/28 01:26:20  №1180921 308
Поставил сервер на LAMP, установил Drupal, но PHP не знаю, хотя говорят надо бы, или необязательно для простого интернет магазина?
Как вообще знающие PHP используют CMS, пишете свои модули?
Я собирался начать учить, но немножечко время поджимает, со всех сторон в плане учебы, просто как бы я не прогадал.
Ответы: >>1180922 >>1180976 >>1181500
Аноним 2018/04/28 01:29:48  №1180922 309
>>1180921
Еще спрошу: планирую ставить разные хостинги, на Nginx с Joomla, правда времени наверное много уйдет, кто нибудь занимался этим? Какая база нужна?
Ответы: >>1180976
Аноним 2018/04/28 06:48:39  №1180952 310
Пример переусложнения кода: https://habr.com/company/superjob/blog/354388/

Для отделения логики от представления не нужно делать второе приложение на JS (как я понял, у них на сервере 2 приложения - одно на JS/ReactJS, и оно обращается к другому на PHP). И цифры пугающие - 10 запросов к API на страницу.

Подумайте сами, все это можно было сделать на PHP:

- шаблонизаторы - есть, например, twig, они лучше чем React
- API - есть, вызываешь нужные функции напрямую вместо использования REST API и затрат на HTTP. Внутреннее API в 100 раз лучше чем REST.

Что интересно, в фронтенде у них используется еще и Angular.

Такое ощущение, что там просто набралась критическая масса яваскриптщиков, которые не хотят писать на PHP. Или может они тайно грезят о замене бекенда на PHP на что-нибудь другое, кто знает.
Ответы: >>1180977 >>1180978
Аноним 2018/04/28 08:39:50  №1180976 311
>>1180921
>>1180922
Почитал западных профи, в общем нечего с апачем делать без опыта серверника.
Аноним 2018/04/28 09:05:32  №1180977 312
>>1180952
Согласен, в Symfony например есть мощный компонент форм, позволяющий избегать дублирования кода на фронте и бекенде, ну и в целом только бекенд писать проще, чем бекенд + фронтенд. Но что делать если нужна интерактивность, например в задаче тестхаб было бы гораздо удобнее, если бы создание/редактирование теста было на одной странице, так же как и прохождение тестов (мне нравится как сделали на Duolingo, Lingualeo - там всё без перезагрузки). C jQuery начинается дикая каша, я пробовал, и цена внедрения функционала растёт с каждым новым изменением. А вот SPA на реакте подошло хорошо и существенно облегчило разработку там, где нам была нужна интерактивность.
Ответы: >>1180979 >>1180980
Аноним 2018/04/28 09:12:57  №1180978 313
>>1180952
но на реакте моднее и реактивнее
Аноним 2018/04/28 09:17:15  №1180979 314
>>1180977
зато на жс страницу перезагружать не нужно. чем больше логики переносится на жс, тем меньше ее остается для пхп. скоро пхп будут использовать только для запросов к базе.
Ответы: >>1180981
Аноним 2018/04/28 09:20:32  №1180980 315
>>1180977

Так у них реакт на сервере, как я понял. То есть там сервис на ноде рендерит страницы через реакт, а данные запрашивает с PHP-бекенда. Может в расчете перейти на какой-нибудь Го или Ноду и на бекенде.

Так-то я не спорю, что в SPA это пригодится.

В задаче на тестхаб, по моим ощущениям, хватило бы и jQuer, но если хочется, можно и реакт/ангулар использовать. Для прохождения теста, не думаю, что что-то сложное нужно, там же всего лишь выбрать опцию или ввести текст вопроса.
Аноним 2018/04/28 09:22:04  №1180981 316
>>1180979

У них JS на сервере, как я понял. Если в браузере - еще хуже, надо загрузить мегабайт, а то и больше яваскрипта, а потом делать кучу запросов к АПИ, это все не быстро и столько времени теряет, что никакой перезагрузкой не окупишь.

Реакт - для интерактивных приложений скорее.
Ответы: >>1181006
Аноним 2018/04/28 10:25:00  №1181006 317
>>1180981
аяксом эти запросы к апи быстро делаются. а пока данные не получены можно поставить заставку. в итоге получается удобный и красивый фронт. да и проще один раз запрос к апи сделать, получить все данные и обрабатывать их на клиенте, чем перегружать страницу и делать запросы к базе каждый раз.
Ответы: >>1181019 >>1181030
Аноним 2018/04/28 10:46:30  №1181019 318
>>1181006
Господа, аяк и xhr это одно и то же по сути?
Ответы: >>1181364
Аноним 2018/04/28 11:12:07  №1181030 319
>>1181006

Ты можешь написать сколь угодно крутой фронтенд, но загрузить HTML с данными всегда быстрее чем загрузить HTML + мегабайт яваскрипта + сделать запрос к API. А если ты используешь REST, то тебе скорее придется делать несколько запросов.

А если произойдет хоть одна ошибка в JS коде, будет просто белая страница. В отличие от классического HTML. Плюс, такой сайт будет наверно плохо индексироваться гуглом, так как ему не понравится, что надо запускать полноценный браузер и ждать пока там все загрузится. Статический HTML парсить быстрее.

Зачем мне смотреть на заставку если я могу смотреть сразу на нужные мне данные? Да, это скорее подходит к эпохе из 2000, но почему меня это должно беспокоить.

Если у тебя тяжелый сайт с кучей рекламы и тебя беспокоит перезагрузка страницы, то можно использовать pjax. Он загружает классическую HTML страницу аяксом и обновляет DOM. Не нужен реакт, не нужно делать REST API. Не нужна перезагрузка страницы. не нужно ничего дорабатывать на сервере. Как тебе?
Ответы: >>1181066 >>1181364
Аноним 2018/04/28 12:50:06  №1181061 320
Чет не догоняю как работает __clone и что мне нужно, что бы скажем склонировать организацию, в которой лежит куча департаментов с кучей сотрудников внутри.

Допустим есть объект внутри которого лежит другой объект - https://ideone.com/QgS6gL
Но что делать если у меня там массив департмаментов, и в каждом департаменте еще и массив рабочих. Просто массив непоклонируешь особо, там ошибка.
Ответы: >>1181064 >>1181079
Аноним 2018/04/28 12:54:40  №1181064 321
>>1181061
$this->inside = clone $this->inside;
Вот эта строчка немного голову ломает если честно :(
Аноним 2018/04/28 13:04:22  №1181066 322
>>1181030
>А если произойдет хоть одна ошибка в JS коде, будет просто белая страница
Что ты несешь.
Ответы: >>1181081
Аноним 2018/04/28 13:28:21  №1181079 323
>>1181061

Массив не объект и "клонируется" при копировании:

$a = [];
$b = $a; // независимая копия массива

При этом содержимое массива - объекты - не клонируются. Это надо сделать руками. Ты должен создать новый массив, заполнить его клонами, поместить в поле объекта.

Для понимая, представь что в переменной хранится не объект, а его порядковый номер:

$a = new X; // создаем объект #1 и кладем в $a
$b = $a; // копируем номер #1 в $b

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

То же самое при копировании массива с объектами:

$a = [new X, new X, new X];
// можно представить как $a = [#1, #2, #3];

$b = $a; // создается копия массива, но в ней лежат указатели на те же объекты #1, #2, #3

> как работает __clone

PHP создает неглубокую копию объекта и вызывает на копии метод __clone, который может что-то сделать. В примере кода с $inside:

$clone = clone $base;

Это создает "неглубокий" клон $base, когда поля (включая inside) не клонируются, а копируются обычным образом. И в $clone->inside лежит указатель на тот же объект что и в $base. затем PHP вызывает магический метод __clone, который берет объект из $inside, создает его клон и помещает указатель на него назад в этом поле.
Ответы: >>1181087
Аноним 2018/04/28 13:29:30  №1181081 324
>>1181066

Расскажи нам, что будет при ошибке в JS коде в SPA? По моему так и останется страница с прелоадером. Или например если код написан с использованием ES6, а браузер его не поддерживает - что будет?
Аноним 2018/04/28 13:29:32  №1181082 325
Перекатился в жс и фронтенд, платят норм, востребованно, ваш похапе не нужен.
Ответы: >>1181088 >>1181089
Аноним 2018/04/28 13:45:40  №1181087 326
>>1181079
Осилил уже с помощью стаковерфлоу вот так вот сделать.
Еще был вариант там с помощью array_map это делать, но чет нахрапом не смог осилить принцип и быстро еще к себе адаптировать.
Аноним 2018/04/28 13:46:25  №1181088 327
>>1181082
Рассказал бы стори хоть, что на пхп делал и сколько платили, как докатился до фронтэнда и что теперь там делаешь и что там платят собственно.
Ответы: >>1181169
Аноним 2018/04/28 13:46:33  №1181089 328
>>1181082

Так не нужен, что ты не поленился найти наш тред и сказать об этом? Ничего, проходи, устраивайся поудобнее.
Аноним 2018/04/28 14:48:31  №1181109 329
Как тестируется верстка? Руками? Или все таки можна как то автоматизировать? Вообщем, есть одна страничка с динамическим контентом. Как можно проверить, что ее не распидорасит, если там будет много текста или картинки большие, видео и т. д.?
Ответы: >>1181127 >>1181329 >>1181347
Аноним 2018/04/28 15:12:41  №1181127 330
Аноним 2018/04/28 16:15:32  №1181169 331
>>1181088
да просто маньки пхпшники не нужны уже на фоне такого обилия всяких цмс. манек пхпшников это настолько рассатривает, что они даже делают бложики из велосиедов на всяких уии и зендах вместо того, чтобы взять готовую цмс.
А вот js на острие хайповых технологий щас, все больше логики переносится на жс, приложение начинают различаться лишь интерфейсом тк в плане функциональности все давно изобретено и переизобретено под типовые нужды.
собсно меня всегда и брали пилить фронтенд там, где на бэке пхп (вордпресс или уии), потому что я в довесок знаю похапе.
и вот я пришел сказать, как человек, который в рановй степени учил и пхп и жс, что жс гораздо более востребован и оплачивается.
Ответы: >>1181292 >>1181304 >>1181500
Аноним 2018/04/28 17:50:20  №1181233 332
Аноны, спасибо за картинку с роутингом.
Такой тупой вопросец. Зачем использовать {скобки} при вписывании переменной в строку вида --- echo "Привет аноны я, {$username}";
Ответы: >>1181255
Аноним 2018/04/28 18:48:43  №1181255 333
Аноним 2018/04/28 19:46:04  №1181292 334
>>1181169
Куда устроился в итоге и сколько платят? И что за город?
Аноним 2018/04/28 20:21:28  №1181304 335
>>1181169
Ну я изчую пхп. Но я не нацелен на гавно цмс, разве когда я изучу симфони, мне с такими знаниями придется клепать хрень на цмс? Я думал там, интереснее есть задачи для бэкэнда.
Ответы: >>1181338 >>1181364
Аноним 2018/04/28 20:25:48  №1181307 336
Интересные задачи начинаются когда тебе уже всё равно на чём писать.
Ответы: >>1181362
Аноним 2018/04/28 21:28:50  №1181329 337
>>1181109

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

Также можно проверить, что если скрыть какой-то блок (сайдбар например), страница не разваливается.

Не забудь тестировать страницу на разной ширине окна браузера, чтобы проверить адаптивность.

Также, ты можешь использовать вставку php-кода в HTML, чтобы скрипт генерировал контент по заданным параметрам.

У меня был скрипт, чтобы в верстке добавлять пункты меню и удлинять тексты, но я не помню, где он.
Аноним 2018/04/28 22:13:47  №1181338 338
>>1181304
нахуй не нужны фреймворки, все можно сделать на цмс в пхп.
а на фреймворках любят костылять байтоебы-велосипедчики, в итоге костыляют ту же цмс только долго и плохо
Аноним 2018/04/28 22:38:26  №1181347 339
Аноним 2018/04/28 23:14:03  №1181356 340
>>1180063
опен сервер поставь и забей на сервер и разбирание в том, что такое апач, хуяч.

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

Мимо по своему опыту
Ответы: >>1181499
Аноним 2018/04/28 23:15:58  №1181357 341
>>1180081
>семафор
шо это ха хуйня, чем знаменита?
Ответы: >>1181499
Аноним 2018/04/28 23:17:26  №1181358 342
>>1180141
внезапно были годные уроки от webformyself
там вся кухня блядь была, давно смотрел, но помню ахуел от того как дохуя можно рассказать по теме
Аноним 2018/04/28 23:20:47  №1181359 343
>>1180165
тож устроился джуном на пхп. С сайтами вообще почти не работаю.
Пишу ботов, хуйотов, парсеры, спамеры лол и много всякой подобной хуйни, работа с сайтом часто заключается в том, чтобы я просто набросал какой нибудь интерфейс чтобы кликать можно было и управлять настройками бота
Аноним 2018/04/28 23:27:34  №1181361 344
>>1180478
Тебе без ЧПУ?
Хуле там учить тогда? Принимаешь ?page=hyi, на странице пишешь include $_GET['page'].'.php'; сверху/снизу шапка/футер. Обмазывание свистоперделками - дело индивидуальное
Ответы: >>1181499
Аноним 2018/04/28 23:32:24  №1181362 345
Аноним 2018/04/29 00:19:22  №1181364 346
>>1181304
Откуда это распространённое мнение, что работа на симфони как-то сильно отличается от остальной работы на PHP? Плохой код пишут везде, я по работе сталкиваюсь с проектами на Laravel/Symfony/Yii и скажу, что всё зависит не от фреймворка, а от разработчиков.

>>1181019
Да. https://learn.javascript.ru/ajax

>>1181030
> мегабайт яваскрипта
Есть tree shaking, мы будем заморачиваться с этим: https://medium.com/netscape/webpack-3-react-production-build-tips-d20507dba99a

> + сделать запрос к API.
Ну нет же, при первой загрузке страницы данные из бекенда передаются куда-нибудь в window.INITIAL_STATE и уже оттуда подхватываются фреймворком, без дополнительного запроса. Про "несколько запросов" тоже не понял, ничего мне не мешает передавать сразу дерево объектов на фронт.

> Плюс, такой сайт будет наверно плохо индексироваться гуглом,
Ну не всегда нужна индексация, может быть продукт закрытый для определённого круга лиц. И уже 2018-й на дворе, тут пишут, что гугл индексирует SPA: https://medium.com/@l.mugnaini/spa-and-seo-is-googlebot-able-to-render-a-single-page-application-1f74e706ab11

> Не нужен реакт, не нужно делать REST API
А потом бизнес скажет, что нужно API для мобилок (было 2 раза). И дешевле было сразу делать API. И на страницах всё больше логики и jQuery лапша становится всё запутаннее, а пилить свой очередной MVC велосипед не хочется, нужно чтобы новые разработчики быстро вникали в проект.
Ответы: >>1181498
Аноним 2018/04/29 08:29:48  №1181424 347
>>1180471
Проверьте решение - кредит на айпад.
https://ideone.com/HW6Jad

И еще: объясните что происходит с переменной $payed после того, как я ее "вернул" максимально простым языком, пожалуйста.
Ответы: >>1181496
Аноним 2018/04/29 10:24:42  №1181472 348
Анончики, стоит ли перекатываться на линукс для разработки?
Есть ли в этом профиты?
Под чем работаете вы?

В принципе пердолинг меня увлекает и я не против, если есть плюсы
Ответы: >>1181778
Аноним 2018/04/29 10:42:37  №1181496 349
>>1181424

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

Когда ты выходишь из функции, ты можешь "вернуть" какое-то значение (не переменную! локальные переменные уничтожаются после выхода из функции) с помощью return, например:

return 100;
return "Yes";
return [1, 2, 3];
$x = 1;
return $x;

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

Значение, которое было указано в return, будет возвращено в место вызова функции. То есть, если ты пишешь

echo x();

И функция x() возвращает 10, то получится echo 10 и это число выведется на экран. Или, если ты напишешь

$y = x();

То результат, который вернет x(), скопируется в переменную $y.

Можно использовать функции и в более сложных выражениях, например:

$a = x() + y() + z();

Здесь происходит вызов 3 функций, их результаты складываются и сохраняются в переменную $a. Или так:

echo x(y());

Здесь вызывается функция y(), ее результат запоминается, затем вызывается функция x(), при этом ей передается результат функции y(), и то, что вернет x(), выводится на экран.

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

w();

Здесь результат вызова функции никак не используется и отбрасывается.

По решению:

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

> $credit = 39999;
> $payPerMonth = 5000;

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

if можно было бы заменить на функцию min/max:

выплата = меньшее из (стандартная выплата, остаток кредита);

Расчет программа делает правильно.
Аноним 2018/04/29 10:42:55  №1181498 350
>>1181364

> Есть tree shaking, мы будем заморачиваться с этим:

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

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

Ну так с таким же успехом можно передавать уже отрендеренный HTML. Я напомню, что речь в статье о сайте с вакансиями.

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

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

> гугл индексирует SPA
Это требует больше процессорного времени в сравнении со статическим сайтом. Бюджет времени на 1 сайт может быть ограничен. Значит, Гугл будет индексировать меньше страниц или делать это медленее. Плюс, увеличивается вероятность каких-то ошибок. Из-за ошибки JS загрузится белая страница - ухудшение рейтинга. Напомню, что на сервере можно отдать код 5xx и робот повторит попытку позже.

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

Да это и не надо. Зачем индексировать текстовый редактор? SPA это приложения, а индексируются для поиска сайты с текстами.

> А потом бизнес скажет, что нужно API для мобилок (было 2 раза).
И для мобильного приложения нужен ровно такой де API, как для сайта (нет). В любом случае, добавить только REST API гораздо быстрее чем заморачиваться со всем, что ты описал.

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

А он и не нужен для показа вакансий.
Аноним 2018/04/29 10:43:14  №1181499 351
>>1181361

> include $_GET['page'].'.php';

Не делай так. Это уязвимость, позволяющая запустить любой php-файл на сервере. Значение из page надо проверять по белому списку разрешенных значений.

>>1180081

Читаем https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)

Затем гуглим http://php.net/manual/ru/book.sem.php и пишем код на нем. В задаче не сказано, что нельзя его использовать.

Допустим, это не прокатило. Тогда нам нужны 2 вещи:

- где-то нам нужно хранить счетчик, доступный из всех потоков (или скорее процессов). Если речь именно о потоках, то хватит переменной, если о процессах, то нужен файл или примитив ОС (разделяемая память итд)
- для реализации enter()/leave() нам нужен примитив для атомарного изменения счетчика, а также для ожидания, пока счетчик не станет более 0

Так как в задаче про это не написано, просто представим, что такие функции уже есть (atomic_inc(), atomic_dec(), wait()). Если и это не прокатывает, то есть 2 варианта:

- если речь о потоках, то храним счетчик в переменной, а wait() делаем на основе sleep(). Минус - я не уверен, что увеличение переменной атомарно даже через $x++ - есть шанс, что эта операция реализована не атомарно (и кстати, ты понимаешь, что значит "атомарно"). Это сомнительный вариант
- иначе, реализуем их на основе файла, в котором мы храним число и который блокируем на время операции увеличения/уменьшения, чтобы реализовать атомарность:

- http://php.net/manual/en/function.flock.php

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

>>1181357

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

Почитай вики https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)

>>1181356

Не надо так. Лучше уж встроенный в PHP сервер.
Аноним 2018/04/29 10:43:40  №1181500 352
>>181338

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

Твои рассуждения напоминают рассуждения человека, который что-то краем уха слышал, но ничего не понимает в предмете.

>>1181169

Сайты вакансий подтверждают твою мысль?

>>1180921

Писать кастомные модули, дорабатывать их, писать шаблоны ты не сможешь. Только использовать стандартные.

>>1180670

> echo $a = implode(" ", $word[array_rand($word)]);
Здесь не очень понятно, зачем использовать $a = ... если можно писать сразу echo implode(...).

implode склеивает значения из массива в строку. Но $word[array_rand($word)] - это не массив, а строка (одно слово), и склеивать в ней ничего не требуется. implode лишний.

>>1180685

тут все верно
Аноним 2018/04/29 10:43:59  №1181501 353
>>1176196
>>1180564
>>1178891

Давай начнем с нормализованного подхода, а потом прикинем, что с нормализацией. Не очень понятно, что имеется в виду по "событиями"? Один из стандартных текстов, который рассылается массе людей? Или произвольный, индивидуальный для каждого текст (Вася поделился 5 фото и получил 3 лайка)?

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

userId | eventType | time | isRead | text

Тут конечно все выходит немного печально, текст может быть большой, и таблица потому тяжелая. Допустим, текст весит 200 байт (100 русских букв), инты весят 8 байт в x64, получается примерно 230 байт на строку, и всего 20000 польз. x 1000 событий x 230 = 4.6Gb - это только данные. Индексы, впрочем, будут меньше из-за того, что в них не включен текст. MySQL конечно может работать с такой таблицей, но тяжеловато и надо очень тщательно писать запросы. И она ведь расти будет. В такой ситуации можно посоветовать выделить на сервер MySQL заведомо больше памяти, чем весит эта таблица.

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

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

events: id | time | text
notifications: userId | eventId | isRead

Здесь все не так печально. В таблице notifications строчка весит 8 + 8 + 1 = 17 байт, 17 x 20M = 340M, терпимо. Минус - time у нас в events, и нельзя выбрать записи из notifications отсортированными. Потому придется перенести time туда для оптимизации (индекс по (userId, time) для выборки N последних событий).

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

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

Если события рассылаются всем, то можно еще рассмотреть вариант хранить не список непрочтенных нотификаций, а наоборот, прочтенных.

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

Реализация такой системы "в лоб" непроста. Ну допустим, мы сделаем так:

subscriptions: userId | groupId - кто на что подписан

И при выводе ленты делаем примерно так:

SELECT FROM posts p JOIN subscriptions s ON ... WHERE s.userId = ? ORDER BY p.time DESC;

Это конечно ни в какие индексы не ляжет и уронит твою БД. Потому, можно попробовать другой вариант:

subscriptions: userId | groupId
news: userId | postId | time | isRead - time для оптимизации

При добавлении нового поста в группу ищем, кто на нее подписан, и кидаем им в news ссылку на пост. Если подписчиков много, вставка поста начнет тормозить, и придется делать ее отложенно через крон или gearman. Можно также использовать комбинированный подход - смотреть, сколько подписичков, если мало, вставлять напрямую, если много - отложенно.

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

Тут небольшой минус - в постоянно растущей таблице news. В ней 3 поля по 8 байт + isRead, и на большом числе пользователей и новостей она опять же будет расти. Значит, надо либо ограничить длину ленты, либо срок хранения, либо архивировать старые записи в ней.

Ну и еще небольшая оптимизация: если у пользователя мало подписок (3-5), то таким пользователям можно не использовать таблицу news, а запрашивать новые посты несколькими SELECT. Хотя это может усложнить код.

В любом случае, я советую:

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

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

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

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

> Ситуация осложняется тем, что у событий есть права доступа (по нескольким параметрам: регион/представительство/отдел), поэтому запрос на выборку событий будет ещё медленнее.

Это плохо. Для быстрой выборки запрос должен использовать индекс.

> Добавлять во второй столбец значение при прочтении уведомлений.

Это называется денормализация, но тут есть подвох. У тебя уведомления зависят от региона - значит при смене региона ты должен как-то пересчитать эту цифру.
Ответы: >>1181513
Аноним 2018/04/29 10:59:29  №1181513 354
>>1181501
Спасибо, я как раз разбираюсь с фейкером, буду пробовать как лучше в моем случае.

Ещё придумал хранить где-то в сессии количество уведомлений и изначально в счетчике непрочитанных вверху отображать данные из сессии. А уже потом, когда страничка обновится - отправлять аякс запрос на обновление счетчика и данных в сессии.
Ответы: >>1181566 >>1181594
Аноним 2018/04/29 12:11:25  №1181566 355
>>1181513

И в чем смысл? Что мешает получить число сразу?
Аноним 2018/04/29 12:54:38  №1181594 356
>>1181513
Тут где то пропал мой пост. Напишу что помню. Вообщем я померял для:
user_table
user_id, name
(20000 rows)

message_table
message_id, text(varcahr(128)), add_time
(5e6+ rows)

user_message_map
user_id(index), message_id, is_read, read_time
(5e6+ rows)

1 ядро (i5 6500) 1 Gb

Мускуль держит:
4000-6000 вставок в секунду. Мессага всем пользователям вставляется 3.7 секунды.
1300 выборок в секунду для count() непрочитанных.
Это для сообщений к юзерам 1<->1.

Для такой базы я бы не давал основным таблицам расти дальше 5е6 записей (дальше производительность резво начинает падать) и не больше 100-150 записей на одного пользователя (иначе нужно мутить хитрую пагинацию внутри БД).

А еще вспомнил. Выбор 1000 непрочитанных при 2e7 записей в БД. 0.5-0.6 секунды.
Ответы: >>1181647
Аноним 2018/04/29 14:15:41  №1181647 357
>>1181594

> 4000-6000 вставок в секунду.

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

> Для такой базы я бы не давал основным таблицам расти дальше 5е6 записей (дальше производительность резво начинает падать) и

А в посте упоминалось 20К пользователей и 1000 событий. Тесты надо было делать на соотв. объемах.

> Выбор 1000 непрочитанных

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

> user_id(index), message_id, is_read, read_time
Если ты выбираешь с сортировкой по времени, то индекс надо было делать по (user_id, time)

Аноним 2018/04/29 17:37:53  №1181764 358
image.png (936, 894x921)
921x894
Я так понял нет смысла кидать сюда задания.
Кстати есть вопрос. Можно ли в пыхе через echo выводить сразу результат деления/умножения/вычитания/etc, а не создавать отдельную переменную, записывать туда результат вычисления и потом только вставлять её в echo ?
Ответы: >>1181771
Аноним 2018/04/29 18:05:38  №1181771 359
>>1181764
>Я так понял нет смысла кидать сюда задания.
Решенные из учебника ОПа? Есть конечно. Просто у нас тут может быть большой пинг на проверки (иногда и 3 недели для больших задач).
Тут со всем помогут. Если ты конечно не притащишь откровенный фриланс или криминал.

>Можно ли в пыхе через echo выводить ...
Да. Там вообще можно отрываться по полной:

echo '$' . ($x = function($a) {return $a;})(1) (10 * 6) . PHP_EOL;
//1000000
Ответы: >>1181775
Аноним 2018/04/29 18:14:33  №1181775 360
Screenshot.png (21, 634x180)
180x634

>>1181771
Вот задача

Я просто не совсем понял задачи ОПа. Он указал, что Школьник не может заплатить в месяц больше, чем 5000 рублей. Т.е. школьник чисто гипотетически может может отдать в месяц и 4000 рублей? Иными словами ОП, я так понял, не указал конкретное сумму сколько школьник отдает в банк. Я делал задачу так, что школьник отдает в банк каждый месяц 5000 рублей.

результат все равно не совпадает

Ссыль на код: https://ideone.com/47k5fR

Задача: http://phpbooktest.ga/l1/loops.html
Ответы: >>1181782 >>1196647
Аноним 2018/04/29 18:26:06  №1181778 361
>>1181472
Стоит. Сам долго ругался и пытался в итоге остался на кубунте - годнота, удобно и приятно
Ответы: >>1181811
Аноним 2018/04/29 18:40:54  №1181782 362
>>1181775
>https://ideone.com/47k5fR
Ты переусложнил расчет баланса кредита. Как результат у тебя сначала школьник платит 5000, а потом считается новый баланс. Евросеть конечно, себя так обижать не станет и начислит проценты в 00:00, а деньги примет не раньше 9:00.

В последний месяц, когда баланс кредита меньше 5000 у тебя все равно платит всю сумму, это нужно проверять.
Аноним 2018/04/29 19:43:43  №1181811 363
>>1181778
А можешь, пожалуйста, рассказать какие преимущества дает такой переход
Ответы: >>1181813
Аноним 2018/04/29 19:47:41  №1181813 364
>>1181811
Как перекатиться на убунту если на винде у тебя пубг и прочая стимохуйня? Перекатиться на месяцок что бы отработать консольку и прочее, а потом как возьмут на работу снова установить себе дома лпмповый опен сервер?
Ответы: >>1181816 >>1181934 >>1181982
Аноним 2018/04/29 19:52:11  №1181816 365
Аноним 2018/04/29 20:17:53  №1181826 366
Аноны, подскажите пожалуйста, поставил сокс для телеграма на убунту https://github.com/Lozy/danted
Как еще полностью выключить логи на сервере?
Ответы: >>1181846 >>1181858
Аноним 2018/04/29 21:05:43  №1181846 367
>>1181826

В файле https://github.com/Lozy/danted/blob/master/install_debian.sh

(или install_centos.sh в зависимости от ОС) находим строчку

> logoutput: /var/log/sockd.log

И меняем ее на

logoutput: /dev/null

После установки проверяем файл /etc/danted/sockd.conf и убеждаемся, что там прописан /dev/null.

Это отключает логи сокс-демона.
Ответы: >>1181850 >>1181858
Аноним 2018/04/29 21:19:09  №1181850 368
Аноним 2018/04/29 21:40:10  №1181858 369
>>1181826
Не слушай этого >>1181846 пиздуй в /s/
Для того чтобы отключить логи, нужно не logoutput: /dev/null вписывать в конфиг, а удалить эту строчку из конфига.
Внезапно, да?

Ответы: >>1181871
Аноним 2018/04/29 22:27:55  №1181871 370
>>1181858
О, как хорошо, что я решил еще подождать ответов, да, ты логичнее.
Аноним 2018/04/29 23:01:18  №1181880 371
Пачаны, пытаюсь сделать загрузку на сервер нескольких фоточек. Но что-то не получатся.

html:
<b>Фотография</b><input type='file' multiple name='image[]'>

php:

$uploaddir = 'resource/photos/';
for ($i=0; $i<count($_FILES['photo']['name']); $i++)
{
$uploadfile = $uploaddir . basename($_FILES['photo']['name'][$i]);
if (move_uploaded_file($_FILES['photo']['tmp_name'][$i], $uploadfile)) {
echo "Файл успешно загружен.\n";
} else {
echo "Ошибка!\n";
}
}






Раньше загружал только один файл и норм было. А так почему-то не работает
Ответы: >>1181882
Аноним 2018/04/29 23:14:20  №1181882 372
>>1181880
Пачаны, нашел где объебался.
Все работает
Аноним 2018/04/30 05:14:48  №1181934 373
>>1181813
Дуалбут ставится поверх винды и норм.
Заодно рабочее и игровое пространство разграничиваешь.

Только ставь не убунту, лучше дебиан, иначе смысла нет, она как шиндовс, даже с консолькой работать толком не нужно
Ответы: >>1181989
Аноним 2018/04/30 09:29:35  №1181982 374
!.png (16, 415x368)
368x415
>>1181813
>отработать консольку
Аноним 2018/04/30 09:53:40  №1181989 375
>>1181934
>даже с консолькой работать толком не нужно
Не нужно но можно, да и главное же не пердолинг ради пердоинга, а изучение среды работа с правами и прочее что нужно для работы разрабом на линуксе. Мне же нужно что бы я при устройстве на работу имел навык сесть за бубунту рабочую и не сосать хуй неделю пока разбираюсь с ней.
Ответы: >>1182120
Аноним 2018/04/30 12:55:47  №1182070 376
подписался на тред
someApprentice 2018/04/30 13:25:22  №1182086 377
>>1180024
Обновил код https://github.com/richBlueElephant/phpClub/blob/master/public/media/js/script.js

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

Ответьте пожалуйста на пару вопросов выше >>1180024 >>1178355

Спасибо.
Ответы: >>1196647
Я, да Я 2018/04/30 13:33:57  №1182092 378
Критично ли, что я в проверке палиндрома прохожусь по всей длине строки вместо длины\2? Так же в 2 раза больше итераций получается.

Вот код если что https://repl.it/@2chGray/Palindrom
ideone уёбки не отвечают на моё письмо с просьбой подключить mbstring библиотеку
Ответы: >>1182135 >>1196647
Аноним 2018/04/30 14:23:06  №1182120 379
>>1181989
Всё же советую попробовать что-то другое. Далеко не факт что на работе будет убунта.
Аноним 2018/04/30 14:27:57  №1182122 380
Ответы: >>1196646
Аноним 2018/04/30 14:40:56  №1182135 381
>>1182092
А зачем тебе вся длина строки?

Давай порассуждаем. Допустим у тебя четное число символов в строке - тут всё просто и ты должен совершить 2 итерации цикла если у тебя 4 символоа, 3 если 6, 4 если 8 и так далее.
Простое деление на 2 работает для этого.

Далее допустим у тебя нечетная строка, средний символ в такой строке равен сам себе, поэтому в строке скажем из 5 символов тебе достаточно лишь сравнить первые два с последними двумя. Для строки в 5 символов нужно лишь 2 итерации, из 7 сиволов - 3 итерации, и так далее.


Значит тебе надо просто высчитывать длину строки, далее из длины строки с помощью целочисленого деления высчитывать то, сколько итераций тебе нужно для проверки на палиандром. Ща загуглил и в php 7 появилась такая штука как intdiv(); - то что нужно для тебя как раз.

Ну и в теле цикла сравнивать первый с последним, первый + 1 с последним -1 и так далее до окончания цикла.

А по поводу письма, ты же им на английском написал? Есть мнение, что сервис всё же забугорный, хоть для нас у них и русская морда.
Ответы: >>1182144
Аноним 2018/04/30 14:53:28  №1182144 382
>>1182135
>ты же им на английском написал?
Да, письмо даже как прочитанное не отметилось.
Аноним 2018/04/30 19:48:51  №1182336 383
image.png (16, 876x102)
102x876
image.png (16, 875x102)
102x875
Господа, почему когда я добавляю первый пик (с мануала bootstrap) у меня в перестают сабмитится формы, но когда добавляю 2 пик(из одного тутора с ютуба), то формы работают, но не работает dropdown menu. В первом случае меню отображается по клику как надо.

Ответы: >>1182337 >>1182353 >>1196647
Аноним 2018/04/30 19:50:25  №1182337 384
image.png (34, 1194x126)
126x1194
Аноним 2018/04/30 20:36:22  №1182353 385
>>1182336
Подключать бутстрап через cdn плохая практика. Вдруг какой нибудь ркн заблочит cdn или еще какая то неведомая хуйня произойдет. Файлы лучше иметь у себя на сервере.
Аноним 2018/04/30 21:46:43  №1182372 386
>>1174695 (OP)
ОП, у тебя в уроке какая-то хрень.

>Также, при наследовании есть правило: класс-предок не должен ничего знать о своих наследниках. Он не имеет права обращаться к полям или методам, которые появляются только в наследниках и которых нет в нем самом. Это логично: ведь кто-то сделать еще одного наследника и не добавить туда эти поля.

В тексте про объекты.
http://phpbooktest.ga/l1/pasta.html

Сразу вопрос: как можно создать проверку на актуальность сохраненных кук?
Ответы: >>1182377 >>1182389 >>1182544
Аноним 2018/04/30 22:03:39  №1182377 387
>>1182372

>Сразу вопрос: как можно создать проверку на актуальность сохраненных кук?
if (isset($_COOKIE["your cookie name"])) {
...
}
Ответы: >>1182378
Аноним 2018/04/30 22:05:49  №1182378 388
>>1182377
А если куки сохраняются в отдельном файле и не удаляются автоматически по истечению годности?
Ответы: >>1196648
Аноним 2018/04/30 23:19:16  №1182387 389
Вечерочка доброго!
А не подскажет ли кто-нибудь, где можно почитать описание такой вот не хитрой конструкции в статическом методе (его части, там несколько подобных конструкций следуют одна за другой):
if ( something true or false) { return; }
Этот метод вызывается через Paamayim Nekudotayim и в принципе понятно, что он делает, он возвращает вычисленное выражение от if всё дальше и дальше накапливая вычисления...Но описания такого подхода, что прос то return; и всё, я нигде не нашёл, подскажите, будьте любезны.
Ответы: >>1182391
Аноним 2018/04/30 23:57:00  №1182389 390
>>1182372

Поясни пожалуйста, почему ты думаешь, что это хрень? Это один из принципов ООП.

Ну смотри:

class Parent
{
public function test()
{
echo $this->something; // обращение к полю, которого нет в классе
}
}

class Child extends Parent
{
public $something = "yes";
}

$child = new Child();
$child->test();

Этот код содержит проблему: мы можем написать $p = new Parent(); $p->test(); и это вызовет ошибку (обращение к несуществущему полю). Мы можем защититься от нее, написав перед class Parent слово abstract и тем самым запретив создавать объекты Parent. Но это все равно оставляет возможность для ошибки:

class OtherChild extends Parent {}
$o = new OtherChild();
$o->test(); // обращение к несуществующему полю

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

Я хочу, чтобы неправильный код было писать нельзя в принципе. И ООП это позволяет - при соблюдении определенных правил. Одно из которых приведено в уроке, про обращение только к доступным полям и методам. В языках со статической типизацией (Ява, C#) это правило проверяется при компиляции программы и компилятор выдаст ошибку. В PHP, увы, нет.

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

abstract class Parent
{
abstract public function getSomething(); // это должен реализовать наследник
public function test()
{
echo $this->getSomething();
}
}

class Child extends Parent
{
public function getSomething()
{
return "yes";
}
}

$child = new Child();
$child->test();

Этот код не получится использовать как-то неправильно.

ООП тем и хорош, что позволяет писать код, который в принципе нельзя использовать неправильно. Вот тебе еще пример:

1) ООП позволяет запретить присваивать неправильные значения. Допустим, мы делаем класс ЖурналОценок и в нем есть метод поставитьОценку. Очевидно, оценка ставится Ученику за Урок и может быть от 1 до 5. Мы можем написать такой метод:

class Register
{
public function addScore(Lesson $lesson, Student $student, int $score)
{
if ($score < 1 || $score > 5) {
throw new \InvaldiArgumentException("Score must be 1 to 5, $score given");
}
....
}
}

Как видишь, этот метод не позволяет поставить неправильную оценку.

Ты должен стараться писать код так, чтобы его нельзя было неправильно использовать. И ООП дает возможности для этого:

- закрытие внутренних полей и методов от доступа снаружи с помощью private/protected
- закрытие всех полей от доступа снаружи; разрешаем изменение значений только через методы
- проверка передаваемых значений
- указание в конструкторе всех значений, которые нужны для работы класса
- не полагаемся на то, что методы будут вызываться в определенном порядке

Ответы: >>1182524
Аноним 2018/04/30 23:58:16  №1182391 391
>>1182387

return; это выход из функции без возврата значения. В такой ситуации, если попытаться получить значение, которое вернула функция, ты получишь null:

function test() { return; }
$a = test(); // null
Ответы: >>1182449
Аноним 2018/05/01 01:08:57  №1182401 392
Кампухтерных дел мастера, HALP! Хочу с 10 на 7 перейти обратно, но не робит привод. Есть диск с лицензионным ключом, но с офф. сайта не грузит ISO файл для создания загрузочной флешки. Я скинул содержимое диска с 7 виндой SP1 Home Premium на флешку с другого компа и хочу перенести на ПК и тупо запустить setup, такое будет работать?
Ответы: >>1182402
Аноним 2018/05/01 01:17:34  №1182402 393
>>1182401
В /s/ в виндотреде наверно быстрей помогут. Я уже не вспомню особенности пердолинга с win7, но помоему твой план не взлетит.
Ответы: >>1182403
Аноним 2018/05/01 01:26:12  №1182403 394
>>1182402
Эх, и на том спасибо
Аноним 2018/05/01 02:00:30  №1182405 395
>>1180495
я быдлокодер и я хочу возразить в оправдание своего непрофессионализма.

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

касаемо всех случаев на картинке я не увидел что будет если мы вызовем не GET, а хотя бы POST. не говоря уже о HEAD, не говоря уже о PROPFIND, OPTIONS, и других даже невалидных методах, что если вместо HTTP к нам придёт каша, а веб-сервер её пропустит до PHP-интерпретатора!?

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

// более гибкий парсер строки чем умеет сам PHP
мы не сделаем,
// это как в статье про шаблоны -- больше чем умеет сам PHP мы не реализуем.
// поэтому каждую страничку чекаем в каждом if, elseif, else 404
if (strpos($_SERVER['REQUEST_URI'], '/home/') === 0) {

// и уже потом проверяем методы
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
case 'POST':
break; // если GET или POST, мы счастливы
case 'HEAD':
exit; // HEAD не требует отдачи контента, выходим
default:
http_response_code(405);
exit; // если неизвестный метод тоже выходим
}

include(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'home.php');
}

мы не ограничиваемся возможностями нашего личного парсера маршрута REQUEST_URI,
мы также задаём действия по-умолчанию для популярных методов GET|POST|HEAD, при случае если потребуется реализовать дополнительный метод, мы это так же учтём и добавим уже для какого-то конкретного контроллера.

а не так, что обрабатываем маршрут, передаём контроллеру, а что там было -- GET|POST|HEAD|другая параша -- хер её знает, кому это важно?
Ответы: >>1182528 >>1196648
Аноним 2018/05/01 07:42:21  №1182447 396
Поясните почему кто-то торгует доменными именами? Это наебалово со стороны хостингов? И вот допустим я хочу сайт с адресом .by - мне не обязательно садить его у белорусского хостера? Чет не могу понять как вся эта система устроена с тем где сайт физически лежит, какое доменное имя имеет и вообще за что при этом нужно платить мне как человеку который хочет всем этим начать пользоваться.
Ответы: >>1182525
Аноним 2018/05/01 07:50:02  №1182449 397
>>1182391
https://codeshare.io/jGzQ9
Вот образец метода, каким-то образом все переменные доходят до конца и отправляются, как аргументы функции wp_mail
Ничего тогда не понимаю, что за магия такая.
Ответы: >>1182453
Аноним 2018/05/01 07:52:40  №1182453 398
>>1182449
Хм, или это потому что до return и не доходит дело, просто происходит вызов функции. Совсем чёт худо дело у меня с соображениями на этот счёт.
Аноним 2018/05/01 10:15:26  №1182524 399
>>1182389
>ведь кто-то сделать
Мне показалось, что тут отсутствует слово "мог".
Ответы: >>1196648
Аноним 2018/05/01 10:15:27  №1182525 400
>>1182447
>И вот допустим я хочу сайт с адресом .by - мне не обязательно садить его у белорусского хостера?
Тут особенности местного законодательства нужно гуглить. По моему для интернет магазинов (хз что у них считается интернет магазином сейчас) домен должен быть в .by и хостер только местный.
Аноним 2018/05/01 10:23:32  №1182528 401
>>1182405
Кажется ты настроен на конструктив, поэтому отвечу развернуто - насколько смогу.
Во первых, картинка - шутка, мем такой есть, поэтому воспринимать её буквально не стоит.
Во вторых, человек хотел именно пример как вообще в принципе делается роутинг, насчет этого чуть дальше.

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

Насчет методов: так как картинка - шутливый псевдокод, то учтены не все нюансы жизни. Популярные же роутеры, однако, имеют в параметрах тип запроса, как пример, объявление роута в klein:

$klein->respond('GET', '/hello-world', function () {
return 'Hello World!';
});

Так-же, пример с Request и далее подразумевают, что тип запроса и соответствующие данные разбираются этим классом самостоятельно и передаются в контроллер уже в "красивом" виде (третий пример подразумевает использование dependency injection container, где это делается автоматически, четвертый - ioc контейнера на рефлексии).

Перейдем к такому примеру, основанному на твоём (не очень честно потому что я не знаю как бы именно ты это написал):

if (strpos($_SERVER['REQUEST_URI'], '/forum/') === 0) {
_ switch ($_SERVER['REQUEST_METHOD']) {
_ _ case 'GET':
_ _ _ break;
_ _ case 'POST':
_ _ _ break;
_ _ case 'HEAD':
_ _ _ exit();
_ _ default:
_ _ _ http_response_code(405);
_ _ _ exit();
_ }
_ include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forum.php' );
}

Теперь давай пройдемся по изъянам.

Пропустили запросы GET/POST - хорошо. Но в самом forum.php тебе в итоге придется опять делать ту-же проверку, чтобы выяснить - постит юзер или хочет прочитать страницу. Если же ты проверишь это сразу, то передать в инклюд данные о проверке сможешь только через статический класс или глоаблки, постепенно превращая код в лапшу.

Если тебе понадобится валидация для HEAD (чтобы для несуществующих разделов ответить кодом 404), тебе придется пихать туда эту логику, хотя она УЖЕ будет в контроллере/где-то еще, т.к. там ТОЖЕ нужна эта валидация.

strpos - сматчит все роуты, где в начале есть /forum/. Скорее всего, в вебе будут ссылки только на реальные разделы. Не считая удаленных тредов например. И тогда тебе придется в контроллере опять проверять есть ли такой тред, рендерить другой шаблон - в общем куча работы по валидации URI в контроллере, который по идее должен лишь раскидать данные в модель и отрендерить шаблон.

Что если ты хочешь иметь подраздел, например /forum/admin/ ? С таким подходом твой URI будет отвечать сразу двумя контролами, и тебе придется опять наворачивать лапшу.

Поэтому есть смысл использовать, например, регулярки. Популярные роутеры имеют свой синтаксис вместо регулярок например. Но суть в том что /\/forum\/(.+\/)/ сматчит только то, что ты действительно хочешь. Это конечно не отменяет промежуточный слой валидации, но дополняет его.

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

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

Теперь о картинке.

Первый и второй пример очень простые и логика в них похожа на твою.

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

Разница с третьим примером в том, что у него вместо названий интерфейсов и рефлексии используются явные присвоения реализаций, со строковыми идентификаторами.

Почему третий "хуже" четвертого? Потому что любой скажет тебе что строковые идентификаторы - зло. По сути, почти то-же самое.

Почему они "лучше" первых двух? Потому что в кавычках. С одной стороны, увеличивается гибкость, всё делается автоматически, уменьшается количество рутины. С другой - ломается тайп-хинтинг, и для меня это отменяет все плюсы например...

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

https://github.com/mlmn/vector.loc Аноним 2018/05/01 10:30:17  №1182534 402
1365085375083.jpg (321, 1680x1050)
1050x1680
1364843503614.jpg (1221, 1600x1200)
1200x1600
1403859616399.jpg (419, 2560x1600)
1600x2560
1355431579513.jpg (661, 985x739)
739x985
>>1176476
1. Вывод шаблонов в конструкторе и деструкторе убрал, сделал обычные методы.

2.
>А зачем нужно OrgInfo? Нельзя ли в организации сделать методы для вычислений этих чисел? Просто у меня ощущение, что этот класс заточен только под вывод таблицы, и тогда код getOrgInfo() желательно вынести из компании куда-нибудь, хотя бы в ту же OrgInfo. Или вообще ликвидировать этот метод.
Класс OrgInfo - выпилил, перенес вычисления общих и средних показателей по организации в отдельные методы. Теперь поясню почему я так держался за это с самого начала. Изначально очень удобно и просто было высчитывать всё это за 1 цикл, тупо прокручивая все департаменты в нем 1 раз, и складывая всю инфу в 1 выходной объект, поэтому в итоге это и выросло в такую вот шизу как отдельный класс для хранения этой информации на выходе этого метода. Мне и сейчас решение с вынесением всех вычислений в разные методы не кажется хорошим, просто потому что, во первых они почти все повторяют друг друга и у них отличается только переменная на входе, выходе и название соответственно, а во вторых всё это вместо одного компактного цикла использует каждый раз по циклу на метод и опять же перебирает снова и снова департаменты. В общем я сделал как рекомендовано, но остались сомнения с точки зрения оптимизации.

3. Тайп хинты расставил везде где нашел возможным.

4. try/catch выпилил, самому не нравилась идея оборачивать каждый код с exeptionon'ом внутри в эту конструкцию. А если я например чужой класс ипользую - мне нужно идти смотреть получается нет ли там внутри выброса исключений и на методы внутри которых есть рисовать try/catch каждый раз? Звучит тупо, так что только рад что это всё не нужно.

5.
>> public function promoteStuff(array $promotionList) {
>Я не думаю, что это надо делать в департаменте. Тут от департамента ничего не требуется и работников можно повышать напрямую.
Ок, сделал напрямую повышение, зачем лишние действия совершать.

6.
>По моему было бы гораздо удачнее сделать так:
>if ($employeeSelector->matches($employee)) ...
>Это позволило бы поместить логику отбора в класс-фильтра, где ей и место. Ну и еще есть такой вариант с коллбеком:
Перенес из департамента метод фильтрации сотрудников в сам класс EmployeeSelector, сделал там метод match который принимает на вход сотрудника и выдает булево значение - подходит сотрудник под текущие параметры или нет.
> new EmployeeSelector('Engineer', [1, 2, 3], [true, false]);
>лучше сделать возможность указать "не важно" для ранга. null, например, передать.
При этом сам способ фильтрации почти не изменился, разве что добавил возможность передавать в конструктор null как вариант "не важно"

7.
> return round($pageCost, 3);
>Не надо делать тут round, так как это нужно только для вывода в таблицу и должно быть там, где делается вывод, а не тут. Тут должен быть метод, который возвращает точное значение.
Ок, округление теперь во вьюхах

8.
> $vectorSecondAC = clone $vectorVanilla;
>В клонировании у тебя допущена ошибка. Этот метод не создает глубокую копию компании. он делает клон компании, но в него помещает ссылки на те же самые департаменты с теми же самыми работниками - они по умолчанию не клонируются, а просто копируются ссылки. Изучи магический метод __clone().
Переделал, теперь при клонировании организации должны клонироваться еще и объекты департаменты, а не просто ссылки на них, и при клонировании департамента соответственно объекты сотрудников

9.
> $this->organisation->setTitle("после антикризисных мер #1");
>Это неправильно, ради решения задачи про антикризисные меры добавлять в Компанию поле-комментарий. Это не нужно компании, это нужно только в антикризисных мерах, и это надо делать где-то в другом месте.
А мне это казалось клевым - мы изменили объект - мы отметил куда-то о том что он теперь другой и не нужно ниоткуда выцеплять это из других классов, комментарий идет сразу с объектом.
У нас ведь класс компании и служит не для каких-то там бизнесс-процессов компании, а для по сути отчетов, вот и это туда же.
Убрал, но как в другом месте это выводить или впиливать - не понял.

10.
>Сортировку лучше делать в одной функции, так:
>Также, есть еще такой трюк, вычисляем "вес" и сравниваем его:
Выбрал вариант с вычислением веса, так как он мне понятнее.

11.
>По view: в идеале, надо использовать htmlspecialchars при вставке текста в HTML. Иначе может быть уязвимость XS
Ок, обернул, только ведь это имеет смысл если мы выводим информацию, на которую как-то могут влиять сами юзеры, а так то кто в мою вьюху что подсунет. И вообще сделал обертку которая тупо сокращает длину названия функции, что бы было компактнее и удобнее её исользовать в перемешку с html

С простыми правками надеюсь что пока что всё, а не будет еще больше замечаний над которыми я просижу опять неделю.
Теперь опять к самому главному.
12.
>> abstract protected function setDefaults();
>Это не очень хорошо, так как непонятно, что эта функция должна делать. Это никак не описано и никак не проверяется. Мне непонятно, что в ней надо написать. По моему так лучше сделать функции getStartingSalary(), getStartingCoffee() и тд, с которыми все проще и понятнее.
>> В общем тут у меня проблема и не понимание как из этого слабого места выкрутиться. [про абстрактные методы]
>Сделать абс. методы вроде getStartingSalary():float { return 500; } для каждого значения.
Я вообще не понимаю что тут от меня нужно.

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

Но потом когда я начал решать антикризисные меры, там вы первых написано:
>Пришло время проверить, соответствует ли твой код принципам ООП? Гибок ли он и легко ли поддается изменениям?
В во вторых в одном методе там есть условие:
>Увеличить в целях стимуляции умственной деятельности базовую ставку аналитика с 800 до 1100 тугриков, а количество выпиваемого им кофе с 50 до 75 литров.
И тут становится понятно, что просто ретернить захардкоженные значения уже не работает. Ведь их придется менять, а что бы менять - их нужно где-то хранить (в полях и храним, а значит всё предельно удачно теперь встает на свои места и зменяемов с помощью опять же сеттеров и геттеры не просто хардкод а берут то, что в текущий момент в объекте установлено. Я опять же легко могу кому-угодно что угодно поменять, а как всё это провернуть с методами вроде этого:
>getStartingSalary():float { return 500; }
- я просто НЕ ПОНИМАЮ. Если у меня снова будут в сотруднике такие методы - то как я смогу вот эти вот 800 заменить на 1100 в коде?


13. Так же добавил свистелку в виде методов setTimePoint() и benchMark() - прошу оценить реализацию. Саму идею я уже где-то видел, но вот как обычно называется это под капотом и как раскидано по коду я не ковырял пока.

14.
>Кстати, у нас еще есть задача про Гостиницу. Не хочешь отточить навыки ООП?
Да хочу, лучше было сразу просто условие скинуть.


В итоге 2 главных проблемы так и не решил - OrgInfo ращбил на кучу копипастных методов, которые пусть и удобные, но само их существование мне не нравится и они дублируются и лишь загромождают код, и вообще ничего не понял как нужно сделать абстрактные методы в сотрудниках по типу: getStartingSalary():float { return 500; }

Ответы: >>1196649
Аноним 2018/05/01 10:46:45  №1182544 403
ОП, пока ты здесь, скажи, где можно почитать о проверки перед авторизацией?!
>>1182372 - кун
Ответы: >>1196650
Аноним 2018/05/01 12:08:17  №1182595 404
Мне надо установить videojs. Я скачал ноду, и установил его через npm, но помимо videojs и его зависимостей, накачалась куча всякой хуиты типа документации, примеров кода, минифицированный video.js, и не минифицированный и т. д. Я правильно понял, что на продакшене подразумевается, что надо все это удалить руками? Или может есть какой то флаг для npm, чтобы он это сам это сделал и осталось только нужное. Я просто ввел npm install video.js. В жс и фронтенде пока еще плохо разбираюсь, так что сорри за нубский вопрос.
Ответы: >>1182598 >>1182636 >>1185224
Аноним 2018/05/01 12:14:44  №1182598 405
>>1182595
Хахахаххаха, лох ебаный блядь. Зашел в гугол, нашел оф сайт этой либы, скончал ее и подключил в своем проекте. Нахуй ноду с ее ебаным npmч
Ответы: >>1182632 >>1196650
Аноним 2018/05/01 13:19:15  №1182632 406
>>1182598
Обновлять зависимости тоже будешь вручную через гугол?
Ответы: >>1182647
Аноним 2018/05/01 13:24:27  №1182636 407
>>1182595
>Я правильно понял, что на продакшене подразумевается, что надо все это удалить руками? Или может есть какой то флаг для npm, чтобы он это сам это сделал и осталось только нужное.
Обычно используют системы сборки типа webpack для такого.
На продакшене у тебя будет только минифицированный файл. А на деве полезно иметь документацию и не аглифицированные-минифицированные сорцы, чтобы можно было в случае чего обратиться к справке либы прямо из ide своей или посмотреть как там внутри код работает.
Ответы: >>1183746 >>1185222
Аноним 2018/05/01 13:47:17  №1182647 408
>>1182632
Да нет, блядь, буду держать для зависимостей сраный ноде.
Ответы: >>1182700
Аноним 2018/05/01 13:55:43  №1182659 409
Как почитать mp3 теги (id3 или как они правильно называются?)?
Ответы: >>1182675 >>1196650
Аноним 2018/05/01 14:05:05  №1182675 410
>>1182659
Через pecl поставь либу id3 (вроде так называется) и там уже готовых функций...
Аноним 2018/05/01 14:45:19  №1182700 411
>>1182647
Допустим у тебя 10 сайтов по 10 сторонних либ в каждом. Ты это руками будешь обновлять? Или при разворачивании проекта на другой машине ты будешь всё это руками качать? Какую-то хуйню пишешь. Вангую у тебя ничего сложнее сайта-визитки не было, где в зависимостях только джиквери.
Ответы: >>1182714
Аноним 2018/05/01 15:22:13  №1182714 412
>>1182700

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

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

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

Из пальца высасываешь.
Аноним 2018/05/01 15:48:12  №1182722 413
Ананасы, кто тут умеет джаваскрипт? Почему на пхп так легко дизайнить разные классы, сценарий работы приложения легко выстраивается в голове, код понятный, идет четкое разделение обязанностей и вот это все. Я на жс хочу загрузчик файлов написать для файлообменника, и вообще понятия не имею как должен выглядеть "чтобы красиво" объект в жс. Я должен и отправлять формдату через аякс, и вызывать нужные функции при разных состояниях, которые изменяют дом(включают/выключают надписи), на каждый чих я добавляю и удаляю классы у разных нод, и в итоге у меня намешано куча разного всего, и мой класс FileUploading это вообще херня а не файл аплоадинг. А еще вот этот selectElementById(), благодаря бутстрапу у меня куча врапперов для врапперов, и я туда верх-вниз езжу по этим нодам как циган.

Ответы: >>1182742 >>1183002 >>1196650
Аноним 2018/05/01 16:56:50  №1182742 414
>>1182722
Некоторых людей это не беспокоит.
Некоторым даже нравится, да.
Те, кого такая ситуация не устраивает, либо берут чужую практику, либо делают свою. В итоге получается что-то типа React. Вот про него и почитай.
Ответы: >>1196650
Аноним 2018/05/01 18:53:43  №1182778 415
Поясните почему пхп так ругают? Чем он хуже того же пиздона? Взялся учить пайтон - хуита же... когда дошел до ООП и увидел что объект необходимо постоянно передавать в метод - дропнул
Аноним 2018/05/01 19:05:03  №1182784 416
>>1182778
Какие-то у тебя школярские проблемы. Ты хоть бы на рынок труда смотрел и выбирал где больше платят и меньше заебывают, больше свободного времени на развитие. Пхп - это мелкие галеры с потогоной системой. Будешь медленно делать пректы, тебя будут всякую фигню заставлять выполнять. Будешь быстро делать - придется говнокодить и прменять примитивные технологии в ущерб своему развитию.
Ответы: >>1182786
Аноним 2018/05/01 19:11:27  №1182786 417
>>1182784
ну я работаю пхп макакой и не жалуюсь. Меня не интересует метод оценки быдла хде больше плотють я хочу для себя выучить какойто более серьезный язык чем пхп. Пробовал ноду - дно. Взялся вот за пайтон - разочаровуюсь по мере изучения и возникла мысль чем же так хуйов пхп?
Ответы: >>1182789
Аноним 2018/05/01 19:15:31  №1182788 418
>>1182778
>когда дошел до ООП и увидел что объект необходимо постоянно передавать в метод - дропнул
лол ребёнок
Ответы: >>1182790
Аноним 2018/05/01 19:19:16  №1182789 419
>>1182786
Я работаю пхп макакой и жалуюсь на то что продуктовые компании, в которых пхп основной язык разработки по пальцам одной руки пересчитать. На счет быдла: ты конечно выбрал пхп потому, что у тебя серьезный математический (или инженерный) бэкграунд
Ответы: >>1182796
Аноним 2018/05/01 19:19:22  №1182790 420
Ответы: >>1182882
Аноним 2018/05/01 19:32:52  №1182796 421
>>1182789
>продуктовые компании
>язык разработки
чево блядь?
Я не выбирал пхп, я случайно в него вкатился, просто потомучто надо было сделать для себя пару сайтов
Аноним 2018/05/01 20:01:39  №1182815 422
>>1182778
А кто ругает то? Самый лучший язык как по мне, вкатился только из-за того что наоборот все любят и язык идет вперед, пока всякие руби адово загнивают
Ответы: >>1182819 >>1182823
Аноним 2018/05/01 20:07:59  №1182819 423
>>1182815
>А кто ругает то?
попробуй упомянут в любом месте, что ты пишешь на пхп
Аноним 2018/05/01 20:10:05  №1182823 424
>>1182815
>язык идет вперед
сказал анон и пошел писать лендинг на версии 5.3
Ответы: >>1182826
Аноним 2018/05/01 20:13:08  №1182826 425
>>1182823
Хз пишу на семерке, всё норм. А вообще ща товарищ попросил сайт ему простой сделать, а я не знаю никаких цмс толком. Думаю вот что надо бы свой первый сайт на вордпрессе сварганить уже как раз.
Ответы: >>1182831
Аноним 2018/05/01 20:20:30  №1182831 426
>>1182826
Вот тут не поспоришь: если делаешь что-то для себя или нанимаешь макак в свою студию - пхп замечательный. Если же сам макака, то вступает в действие колесо сансары из которого не выбраться. Из макаки в следующей жизни человеком не переродишься.
Ответы: >>1182906
Аноним 2018/05/01 21:18:54  №1182882 427
>>1182790
Вам в /b/ загон, животное.
Ответы: >>1182900
Аноним 2018/05/01 21:38:38  №1182900 428
>>1182882
но ведь это тебе туда, долбоебушек. Что сказать то хотел?
Ответы: >>1182904
Аноним 2018/05/01 21:52:18  №1182904 429
>>1182900
Что ты малолетний ебанат-максималист с мемами вместо головы)
Ответы: >>1182916
Аноним 2018/05/01 21:52:43  №1182906 430
>>1182831
>Если же сам макака, то вступает в действие колесо сансары из которого не выбраться. Из макаки в следующей жизни человеком не переродишься.
Поясни ка немного о чем ты? Готов поспорить, что ты нихуя не понимаешь просто, но предвзят к тому, что мол если ты разработчик на пхп, то у тебя одна лишь дорога - клепать лендосы на цмс.
Ответы: >>1182913
Аноним 2018/05/01 22:05:40  №1182910 431
Ребята, старайтесь быть конструктивне, в тематике-то.
На любых языках пишется как важный софт так и бесполезное говно.
Так-же как и на любых человеческих языках можно вести полезный диалог, а можно пиздеть без толку.
Аноним 2018/05/01 22:24:33  №1182912 432
>>1182778
Пыха хорошая, пыха замечательная. Только вот со временем ты вырастешь и захочешь писать более быстрый софт - и не сможешь, потому что она жестко прикручена к запуску отдельного скрипта на каждый процесс. Захочешь писать более надежный софт и увидишь, что это невозможно, посколько вместо числа или строки в функцию может придти прокисший борщ. Захочешь использовать крутые библиотеки - и помощи ни от языка, ни от сообщества не дождешься. Захочешь нанять кодеров себе в помощь - у тебя в коридоре будет вонь как в конюшне и толпа кидающихся какахами макак-соискателей. Карочи, пыха со временем просто перестает доставлять.
Аноним 2018/05/01 22:26:57  №1182913 433
>>1182906
Я и в правду нихуя не понимаю ,но все вакансии пхп либо студии с однодневными проектами на одно рыло (а значит дядя будет присваивать весь твой труд себе, с нулевым вкладом со своей стороны), либо какая-нибудь часть проекта работающая с фронтендом на удаленке/фрилансе (и тут ты должен быть фулстак разрабом). У тебя просто не будет ни времени, ни возможности специализироваться глубоко в чем-нибудь одном, или изучить что-то новое. Дядя специально выбрал php для своего проекта, чтобы было быстро и дешево.
Аноним 2018/05/01 22:30:00  №1182916 434
>>1182904
Всеравно непонятно. Попробуй хуй изо рта вынуть и повторить еще раз
Ответы: >>1183128
Аноним 2018/05/01 22:51:35  №1182921 435
Анон, а как можно написать проверку для парсинга, удается ли залогироваться?
Ответы: >>1182924
Аноним 2018/05/01 23:08:38  №1182924 436
>>1182921
if (залогирование === true) {
// залогирован
}

хуй изо рта так и не высунул, смотрю
Аноним 2018/05/02 04:12:16  №1182959 437
Пацаны доставьте мемасик где гопарь, начав программировать на PHP сразу стал успешным, а все остальные языки это сторчавшиеся нарики.
Аноним 2018/05/02 07:45:36  №1183002 438
Ответы: >>1196650
Аноним 2018/05/02 11:06:48  №1183128 439
>>1182916
Рвись ещё, ребёночек)
>эти шаблоны про хуй во рту
>эти стрелочки
Тебе 15?
Ответы: >>1183171 >>1183190 >>1183204
Аноним 2018/05/02 13:08:58  №1183171 440
>>1183128
>залогироваться
>мне больше 15ти и хуя во рту нет
Ответы: >>1183220
Аноним 2018/05/02 13:45:15  №1183190 441
>>1183128
Ссу на жлоба. Наверно, ты еще и алкоголик.
Аноним 2018/05/02 14:07:53  №1183204 442
>>1183128
вообще то ты первый начал писать оскорбления вроде "ребенок". так что уебывай отсюда и сагу свою забери
Аноним 2018/05/02 15:13:33  №1183220 443
>>1183171
>залогироваться
Хуя ты {'даунёнок' => 'глупнький'})0)
Рвись ниже, пажалуста, веселите меня всем тредом.
Ответы: >>1183288
Аноним 2018/05/02 15:30:50  №1183227 444
>>1179846
По итогу все не работает только в долбаном хроме, а в остальных браузерах все и всегда нормально работает. Кто то знает как это фиксить?
Ответы: >>1183233
Аноним 2018/05/02 15:49:12  №1183233 445
>>1183227
Хром любит кешировать?
Ответы: >>1183234 >>1196651
Аноним 2018/05/02 15:50:22  №1183234 446
>>1183233
ага. я чищу кеш после каждого изменения но это неудобно.
Ответы: >>1183237
Аноним 2018/05/02 15:55:52  №1183237 447
>>1183234
Disable cache в настройках Devtool
Аноним 2018/05/02 17:42:16  №1183287 448
mLvnYDI[1].png (5, 209x230)
230x209
Поясните за ехидные колобки колбэки в php. Как мне сделать нечто вроде такого: pic1

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

$obj->bob = function () {return "YOBA"}
Ответы: >>1183290 >>1183296 >>1196651
Аноним 2018/05/02 17:44:10  №1183288 449
>>1183220
Ты аут? Нахуя ты скрин куска треда кинул?
Аноним 2018/05/02 17:47:36  №1183290 450
>>1183287
Сам ответ написал, лол.
Возьми и сделай публичное поле.
Аноним 2018/05/02 17:58:12  №1183296 451
Ctl3S0L[1].png (6, 217x269)
269x217
>>1183287
Не работает. ЧЯДНТ?

Суть в том, что есть класс, который работает с html-кодом. И этот самый html-код может получаться разными способами, которые никак не унифицировать. То есть, у каждого объекта своя версия функции, которая генерирует html. По умолчанию он будет генерироваться по определенному алгоритму из переданных в скрипт параметров, но может быть результатом обращения к API, file_get_contents, генерацией по совершенно другому алгоритму и т. д.
Ответы: >>1183297
Аноним 2018/05/02 18:00:35  №1183297 452
UnKmyvJ[1].png (6, 231x272)
272x231
>>1183296
Я ёбаный наркоман и закомментировал run, но раскомментирование не помогает.
Ответы: >>1183306 >>1183383
Аноним 2018/05/02 18:22:37  №1183306 453
>>1183297
$this->tst() в run? Для поля tst можешь сделать хитрый setter, кторый будет выполнять колбэк, мне лень писать
Ответы: >>1183312
Аноним 2018/05/02 18:31:36  №1183312 454
LJHgYdw[1].png (9, 263x394)
394x263
Эта ёбанная наркомания - самое близкое к тому, чего я хочу. По умолчанию значение свойства - результат выполнения метода, при этом нужным объектам я могу прописать свои анонимные функции.

Не знаю, насколько это всрато, но мою задачу решает.

>>1183306
Не работает.
Ответы: >>1183325 >>1183354
Доделал Student List Аноним 2018/05/02 18:45:56  №1183323 455
Ответы: >>1198353 >>1198354
Аноним 2018/05/02 18:51:22  №1183325 456
>>1183312
$оbj->tst = 20;

Зачем городить лишнее?
Ответы: >>1183401
Аноним 2018/05/02 19:53:45  №1183354 457
Ответы: >>1183357 >>1183401
Аноним 2018/05/02 19:59:35  №1183357 458
>>1183354
конечно
\tpublic $_tst;
\tpublic $_cb;
--->
\tprivate $_tst;
\tprivate $_cb;

очепятка
Аноним 2018/05/02 20:28:38  №1183383 459
>>1183297
У тебя tst не в this, чем ты занимаешься там вообще?
Ответы: >>1183401
Аноним 2018/05/02 20:39:36  №1183401 460
jShfcT4[1].png (10, 629x290)
290x629
>>1183325
Затем, что это пример, а на практике там будут функции в не один десяток строк.
>>1183354
Спасибо, Анон. Я слишком сонный и пока нихуя не понял особо, но выглядит похожим на правду. Завтра разберусь.
>>1183383
Наркоман что ли? С чего вдруг оно не в $this?
Ответы: >>1183426
Аноним 2018/05/02 20:56:52  №1183426 461
Ответы: >>1183434 >>1183438
Аноним 2018/05/02 21:06:25  №1183434 462
>>1183426
На скриншоте всё работает, тебя это не смущает?
Аноним 2018/05/02 21:11:58  №1183438 463
>>1183426
Я только въезжаю в ООП, но, по-моему, ты несёшь какую-то хуйню, анон.
$this - используется для доступа к объекту изнутри класса. Я в классе объявляю tst. Объект этого класса тоже будет иметь tst. Чё не так то? Тем более, на скриншоте всё работает.
Вдвойне тем более - ты сам по своей ссылке переходил? Там написано, что да, это работает, но лучше обмазываться инкапсуляцией (или как это называется). Это архитектурный дроч, сейчас вопрос не в этом.
1-129 ОП 2018/05/03 06:48:30  №1183545 464
>>1174778

> echo "Ответ $answers[$answer[1]]\n";
Тут слишком сложное выражение. Лучше было в отдельной строчке получить ответ, сохранить его в переменную и далее выводить переменную.

Мануал по подстановке переменных в строки: http://php.net/manual/ru/language.types.string.php#language.types.string.parsing

array_rand возвращает массив только если требуется вернуть более 1 ключа, иначе она возвращает сам ключ, не в массиве.

Первый элемент массива имеет индекс 0, а не 1.

>>1174852

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

>>1174967

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

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

Для этого вызывающий код должен это поддерживать, то есть анализировать аргументы методов и подбирать сервисы. Плюс, это не работает, если у тебя для одного класса есть несколько сервисов.
ОП 2018/05/03 06:48:47  №1183547 465
>>1175020

Для отладки кода поставь везде echo, которые показывают, какие места кода выполняются и чему равны переменные в этой точке. Например, если if не выполняется, выведи, чему равны переменные перед ним и увидишь, почему.

> elseif($timeOP == '=') {
Это неправильно, так как $timeOp - это предыдущая (а не текущая) увиденная операция, а после = уже других операций нет и это условие никогда не сработает.

> то он выдаёт набор цифр 0002222488448842662. Они должны быть в результатах вычисления, это правильные цифры, но и не правильные.
Потому что надо сбрасывать number после выполнения операции.

>>1175435

>https://ideone.com/JkebMt

Короче можно сделать, если использовать функцию array_rand - подробности в мануале.

Еще короче - если составить массив, в котором каждый элемент - это массив, содержащий варианты слов:

[
['я', 'ты', 'он'],
['видел', 'слышал', 'знал'],
...
];

И обходить его в цикле.

>>1175648

Через if/else: если операция это плюс, то сложить; если операция это минус, то вычесть и тд.

> Можно же числа определить в один массив, а операции в другой, а когда for дойдёт до "=", по очереди вызвать элементы массивов с числами и операциями, так, чтобы они сложились в пример и сразу вычислялись?

Можно попробовать. Но тогда наверно проще сделать единый массив и с числами, и с операциями, и идти по нему последовательно.
Аноним 2018/05/03 06:49:10  №1183548 466
>>1175794

Зависит от реализации и от настроек. Обычно можно указать - хотим ли мы каждый раз создавать новый объект или переиспользовать старый.

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

>>1175799

Задается это обычно при настройке контейнера. Для каждого сервиса индивидуально.

>>1175828

Не советую. Этот фреймворк очень старый и даже по тем временам он выглядел весьма сомнительно. Он переполнен дурными приемами написания кода.

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

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

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

>>1175988

Если у тебя можно смотреть только свой профиль, то не надо указывать id. Если можно смореть любой профиль, то надо указывать.

> Проверка через $_SESSION я так понял довольно уязвима ?

А при чем тут вообще сессия?

> По get запросу и id юзера - panel.php?id=25 и в самой странице поставить проверки, если юзер на которого мы зашли совпадает с залогиненым юзером, то появляются крутилочки для изменения данных

Проверять надо не тут. Проверять надо в первую очередь в том обработчике, в котором эти изменения сохраняются. Перед сохранением надо проверить, что у пользователя есть права на изменение.
Аноним 2018/05/03 06:49:31  №1183549 467
>>1176343

pluralisation в Симфони 2.1 сделан максимально бездарно. Так как transChoice() не предполагает, что может быть несколько слов, зависящих от нескольких чисел. А также там нет поддержки зависимости от пола. Пример:

"{user} (расшарил|расшарила) {pictures} (картинка|картинки|картинок) для {friends} (друга|друзей)"

Что я могу посоветовать:

- посмотреть, можно ли сделать свой наследник сервиса Translator
- в нем сделать вызов Intl с полноценным форматированием + свои методы по вкусу
- если нельзя, сделать свой сервис и использовать его, добавить свои теги для перевода в Твиг
- посмотреть в issues компонента Translation, есть ли там жалобы
- если нет, подробно объяснить недостатки существующей системы (я уже создал issue)

> Но судя по сорсам - можно сделать свой MessageFormatter:

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

>>1176742

Зря. Может, у тебя глаз замылился, а ОП с анонами что-то увидят, что ты сам не видишь.

>>1176781

Потому что в браузер надо передавать не обычный текст, а текст в формате HTML.

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

header("Content-Type: text/plain; charset=utf-8");

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.

>>1176853

На хостинге может быть отключен вывод ошибок на экран (правильно), и их надо смотреть в логах.
Аноним 2018/05/03 06:49:54  №1183550 468
>>1176863

В PHP есть проверка типов и нормальные классы, а в Питоне нет. Код типичного проекта на Питоне ничем не читабельнее PHP, например https://github.com/rg3/youtube-dl/blob/master/youtube_dl/utils.py (обрати внимание на объем файла, количество комментариев и число подчеркиваний).

>>1176866

Для админок и не требущих особого дизайна страничек подойдет.

>>1176970

Даст понимание, из чего состоит веб-сервер.

>>1176999

> з(дела(л|ю|н)
Еще есть "зделаем" и "зделанный".

> (\w+)\sа\s/
Пробелов может быть более одного. После "а" может идти не пробел, а другая запятая. Лучше использовать \b

> '/\b((,)|(\.)|(;)|(:)|(!)|(\?))[^\s]\b/' Хоспаде, ну почему ты не работаешь?! //

А зачем там \b в начале? И у тебя теряется [^\s].

>>1177153

Может попробовать что-то сделать на основе Symfony Forms?

>>1177318

Спроси на сайтах фриланса.
Ответы: >>1183558 >>1183696
Аноним 2018/05/03 06:50:17  №1183551 469
>>1177400

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

>>1177630

> 1 http://jsbin.com/mofepusiko/edit?html,css,output

Ок, верно. Для вертикального выравнивания одной строки есть трюк - сделать line-height равной высоте блока.

> 2 http://jsbin.com/zofidemusi/edit?html,css,output
Ок, верно, хотя стоило бы учесть еще ширину border - он тоже место занимает.

> 3 http://jsbin.com/nofuwotoka/edit?html,css,output
Вместо цифр лучше использовать слова, например:

&lt ;

Полный список HTML-мнемоник: https://dev.w3.org/html5/html-author/charref

Попробуй там найти свои символы. А то цифры человеку читать очень трудно.

> 4 http://jsbin.com/nadevedose/2/edit?html,css,output
Верно.

> 5 http://jsbin.com/civowoweye/edit?html,css,output
Все правильно.

>>1177715

Повторение - мать учения.

>>1177756

Да, но придется изучить Си, и написать свой веб-фреймворк.
Аноним 2018/05/03 06:50:38  №1183552 470
>>1177856

Во-первых, ООП не надо "присобачивать", если ты не видишь, где он нужен, то не надо использовать.

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

- найтиПостПоid(id)
- найтиВсеПостыПоУсловию(сортировка, offset, limit)
- найтиПостыПоТегу(тег)
- получитьЧислоКомментариевКПосту(пост)
- удалитьПост(пост)
- сохранитьПост(пост)

И так далее.

Пример ООП кода есть например в моем уроке по MVC: https://github.com/codedokode/pasta/blob/master/arch/mvc.md - изучи его.

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

Статические методы ничем в принципе не отличаются от обычных функций. И соответсвенно получается такой же спутанный воедино код. Ты можешь почитать урок https://github.com/codedokode/pasta/blob/master/arch/di.md где описаны некоторые недостатки этого подхода.

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

Пример, у тебя есть метод конвертации валюты:

public static function convertDollarToRouble(float $dollars): float { ... }

В нем идет обращение к внешнему сервису, с которого скачивается текущий курс. А как протестировать этот метод без обращения к тому сервису?

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

function ($currency): float {}

либо интерфейсом:

interface RateDownloader()
{
public function downloadRate($currency);
}

Эта функция или объект становятся "зависимостью" метода convertDollarToRouble (зависимость - это то, от чего зависит работа функции). Теперь, когда мы выделили зависимость, мы должны как-то ее передать ("внедрить"). Это можно тоже сделать по-разному, например, передать как аргумент:

convertDollarToRouble(RateDownloader $rateDownloader, float $dollars): float { ... }

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

class Converter
{
public function __construct(RateDownloader $rateDownloader) {}
public function convertDollarToRouble(...) ..;
}

Вот мы и получили ООП с DI. Прочитай урок по DI, там подробнее описано.
Аноним 2018/05/03 07:19:12  №1183558 471
Аноним 2018/05/03 07:53:59  №1183570 472
Не знаю где спросить про CMS. Кто нибудь пробовал использовать вместе с разработкой?
Или смысла нет какой из них использовать, мол они все одинаковые по сути?
Ответы: >>1183614
Аноним 2018/05/03 09:52:34  №1183614 473
>>1183570
Знаю точно что есть modx - там больше ориентированности на код, нужно все шаблончики и сущности в ручную прописывать, что бы потом юзер смог типовую сущность в админке создать и заполнить например накликиванием. В каком-нибудь wordpress же знаю что для тебе заранее заготовлены некие сущности такие как page, posts ну и так далее, и админка заранее под все это заточена. Там вообще всё сделано так, что простой бложек или сайт о компании из нескольких страничек можно накликать по сути в админке и подцепить поверх понравившуюся тему там же.
Ответы: >>1183621 >>1183699
Аноним 2018/05/03 09:59:29  №1183621 474
>>1183614
Сейчас под WP есть куча писек, которые и интернет-магазин в пару кликов помогают создать. Многие макаки умудряются зарабатывать на создании сайтов никак не залезая в код, на любой чих есть плагины. Другой вопрос, конечно, в том, что если плагина на чих всё-таки нет и нужно слегка что-то изменить, то макак обделается. Да и на производительности это сказывается не очень хорошо, конечно же.
А modx да, он как CMF позиционируется. Еще Drupal вроде ёба в этом смысле, но не знаю, жив ли он еще.
Ответы: >>1183636 >>1183699
Аноним 2018/05/03 10:27:37  №1183636 475
>>1183621
Друпал вроде как жив, там новая версия выкатилась вроде как год назад с ооп-ориентацией. У нас в городе есть галера которая чисто на друпале ориентируется и они периодически проводят даже обучалки что бы новых макакичей рекрутировать.

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

Мне кажется, что это стереотип из той же оперы что и на пхп одни макаки работают и вообще это язык хуевый. Я вот вчера скачал себе wp, и там заходишь в их кодекс и там везде в документации вплетены гайды о том что писать в коде для чего и думаю что многие обучалки тоже расскажут о том как и что писать, так что любая макака спустя пару недель будет просто вынуждена хотя бы в шаблонах покопаться, а там уже и впшные функции надо знать и так далее.
Ответы: >>1183699 >>1183776
Аноним 2018/05/03 11:14:39  №1183674 476
Есть такая функция переворота UTF8 строки

function utf8_strrev($str){
preg_match_all('/./us', $str, $ar);
return implode(array_reverse($ar[0]));
}

Что значит якорь us в регулярки? Это все не ASCII символы?
Как вообще распутывать чужие регулярки.
Ответы: >>1183702 >>1185224
Аноним 2018/05/03 12:05:58  №1183696 477
160507.jpg (138, 620x408)
408x620
>>1183550
>А зачем там \b в начале?
Регулярка уровня Б
Аноним 2018/05/03 12:11:48  №1183699 478
>>1183614
>>1183621
>>1183636
Спасибо товарищиъ, попробую WP еще, неплохие вещи тоже на нем делают.
Да я писал на Drupal, худая документация пока.
Аноним 2018/05/03 12:13:56  №1183700 479
Как вам наовый принцип программирования: DRYOLO
расшифровывается как: Do Repeat YOLO
Состоит в дублировании кода везде, где это возможно, каждый инстанс должен иметь уникальные изменения.
Аноним 2018/05/03 12:24:27  №1183702 480
Аноним 2018/05/03 13:56:16  №1183746 481
>>1182636
>Обычно используют системы сборки типа webpack для такого.
А можно как нибудь без вебпака обойтись? У меня из жс-а просто только плеер нужен. Например устанавливать через композер или npm, и затем баш скриптом необходимые для продакшена файлы в публичную папку перетаскивать.
Ответы: >>1185222
Аноним 2018/05/03 14:32:49  №1183769 482
15213995942770.jpg (121, 890x892)
892x890
Сап анонимусы, возник интересный вопрос.

У нас есть статическая страница c подключенным jquery. После заполнения формы мы делаем ajax-запрос с параметрами к php, а оттуда по прошествии некоторого времени приходит ответ выстраиваемый в хтмл таблицу.

Как я понял php-файл при работе с ajax работает сам по себе, без участия браузера пользователя. Если он покинет страницу, то выполнение скрипта на сервере продолжится и без него?

Если моя теория верна даем печеньки посетителю, пусть он уходит. Результат выполнения скрипта мы отправляем в БД с привязкой к кукам посетителя. При возвращении, показываем из БД результат выполнения по кукам. Это вообще возможно?
Ответы: >>1184427 >>1185222
Аноним 2018/05/03 14:49:25  №1183776 483
>>1183636
Ты просто начитался всяких ВЫЕБУ ТВОЙ РОТ ЗА ТАКОЙ СТИЛЬ КОДА и не представляешь, какой ад творится в днищесегменте фриланса. Некоторые петухи вообще на одних конструкторах живут, а ты удивляешься тому, что они сайты на визуальных письках вроде visual composer делают абсолютно не вникая в код.
Ответы: >>1183777
Аноним 2018/05/03 14:54:37  №1183777 484
>>1183776
>Некоторые петухи вообще на одних конструкторах живут.

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

Потом таки допер в чем дело.
Аноним 2018/05/03 23:25:24  №1184055 485
>>1175636
Наркоманы. Не понимают очевидной шутки. НО БОЛЕЕ ТОГО, УЖЕ МАНЯФАНТАЗИЙ СЕБЕ ПРИДУМАЛИ ГДЕ ОП С ЕРОХОЙ ВСТРЕЧАЕТСЯ!
Ответы: >>1184180 >>1184265
Аноним 2018/05/04 11:36:45  №1184180 486
>>1184055
Ты наверное не очень умный
В каждой шутке есть доля шутки
Аноним 2018/05/04 12:53:17  №1184213 487
1377758402688.jpg (184, 1280x1432)
1432x1280
>>1174695 (OP)
Привет.

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

Что нужно знать джуну пхп? Какой базис? Что уметь делать?
Аноним 2018/05/04 12:54:20  №1184214 488
>>1184213

>за ответов на вопросо

за ответом на вопрос

быстро фикс
Аноним 2018/05/04 13:08:43  №1184218 489
Как можно проверить, актуальные ли у меня куки или нет?
Это через curl делается?
Ответы: >>1185222
Аноним 2018/05/04 13:25:20  №1184223 490
>>1184213
Для начала: ВСЕ из онлайн-учебника ОП-а - НЕОБХОДИМО
Аноним 2018/05/04 13:29:58  №1184225 491
>>1184213
Двигайся дальше и углубляйся в JS, зачем тебе пхп макакинг?
Ответы: >>1184228 >>1184523 >>1184689
Аноним 2018/05/04 13:34:31  №1184228 492
>>1184225
А если человек не хочет каждый год учить новый фреймворк?
Ответы: >>1184241 >>1184683
Аноним 2018/05/04 14:29:02  №1184241 493
>>1184228
А что плохого в новых фреймворках?
Аноним 2018/05/04 16:00:56  №1184265 494
>>1184055
Пацаны, ероха подкатывающий к ОП-тян детектед, ибо очевидно пытается выставить нашу теорию в безмуном свете, что бы замести следы. Типа как когда вор громче всех кричит: "лови вора!".
Аноним 2018/05/05 00:42:47  №1184424 495
Как то похуй какого ты пола или царства, я кот например, хули, попытайтесь доказать обратное.
Аноним 2018/05/05 01:49:39  №1184427 496
>>1183769
>Если он покинет страницу, то выполнение скрипта на сервере продолжится и без него?
Да
>Это вообще возможно?
Да
Аноним 2018/05/05 02:26:45  №1184429 497
Друзья, нет желания у кого-то вкатиться вместе с 0 по сути.
Или взять меня так скажем, под крыло и помочь начать. Хорошо умею в математику, вроде не туп
Ответы: >>1184516
Аноним 2018/05/05 10:50:51  №1184514 498
>1184429
Можно было бы. Я вот начинал и продолжаю без ментора, всё сам, ахах, а было бы гораздо быстрее, если бы можно было спросить кого-то. Иногда тупо не знал как у гугла спросить даже.
Ответы: >>1185508
Аноним 2018/05/05 10:52:20  №1184515 499
Отличный тред, остаюсь тут, ребятки :d
Аноним 2018/05/05 10:53:25  №1184516 500
>>1184429
>Хорошо умею в математику
Но при чём здесь PHP?
ДВАЧ Аноним 2018/05/05 10:54:11  №1184517 501
Хм, кто поопытней, может подскажете, какую архитектуру использует двач? Просто заметил, что страницы по старому принципу подключаются и везде есть .html . Было бы интересно почитать.
Ответы: >>1184519 >>1185222
Аноним 2018/05/05 10:59:28  №1184519 502
>>1184517
>страницы по старому принципу подключаются и везде есть .html
Я могу настроить mod_rewrite так, что все урлы на моём сайте будут иметь вид /page.html а под капотом будет какой-нибудь моднявый Yii.
Ответы: >>1184521 >>1184686
Аноним 2018/05/05 11:00:37  №1184520 503
Господа, есть у кого-то код решения задачи на регулярки, которая разбирает телефонные номера?
Ответы: >>1184538
Аноним 2018/05/05 11:00:46  №1184521 504
>>1184519
а, ну хотя, я забыл про .htaccess XD
Аноним 2018/05/05 11:04:35  №1184523 505
>>1184225
В JS треде настолько токсичные аноны, что за полтора года и наверное сотню вопросов, я получил только посылы на три буквы. Так что нет.
Ответы: >>1184526
Аноним 2018/05/05 11:07:51  №1184526 506
>>1184523
Мне кажется, что тут так во всех тредах. Только на SO всё хорошо, ибо модерация.
Собеседование Аноним 2018/05/05 11:20:02  №1184535 507
Кто подскажет, какие вопросы/тесты на собеседованиях чаще всего бывают по php? Скажем, на джуниора.
Ответы: >>1184544 >>1184547 >>1184548
Аноним 2018/05/05 11:24:43  №1184538 508
Ответы: >>1185221
Аноним 2018/05/05 11:28:42  №1184543 509
Аноны, а нормально ли отправлять изображения по http, читая их в строку, преобразуя, например, в base64, затем отправляя как обычный текст, на том конце расшифровывая и опять собирая в изображение?
Разбирал свой старый проект и нашёл там такое странное решение. Почему я вообще так сделал - непонятно. Видимо, была причина.
Ответы: >>1198355
Аноним 2018/05/05 11:30:23  №1184544 510
>>1184535
Вопросы как правило связаны со знанием синтаксиса, ооп, шаблонами. Если попадется мудак с матаном головного мозга, то заебет вопросами математического характера. Будет самоутверждаться и потом всем говорить, что ты говно итебя взяли только потому что кто то должен набирать код.

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

Говорят, остались еще пидоры, которые ебут мозги загадками на внимательность и сообразительность. Забыл как это точно называется что то типа тест на когнитивные возможности. Вопрос про бейсбольную биту и мяч за 1 доллар и 10 центов и прочие пидорские загадки.

А, ну будь еще готов к приколам, дадут тестовое задание и ты его должен будешь решать на листочке. Типа напишите нам функцию парсинга входных данных с такими то критериями. Не ссы и говори, чтобы дали комп с ИДЕ для решения, ибо вентел на хую работать в конторе, которая заставляет писать код на листочке.
Ответы: >>1184547
Аноним 2018/05/05 11:33:44  №1184547 511
>>1184535
https://github.com/codedokode/pasta/blob/master/interview-tasks.md
Ну и ты отличай, что PHP-разработка бывает разной, в веб-студиях у тебя будут спрашивать опыт работы с CMS и умение верстать, в нормальных конторах - фреймворки, вопросы по БД по алгоритмам. Вот этот >>1184544 в каких-то днищеконторах собеседовался, надеюсь ты в такие не попадёшь.
Ответы: >>1184553
Аноним 2018/05/05 11:34:24  №1184548 512
>>1184535
https://drive.google.com/file/d/0B8VvT_dbtrYMN1NKSUZXRlo4QUk/view

Вот тестовое задание одной фирмы из моей мухосрани. Я на самом деле не пойму даже обязательного задания, просто блять не представляю как это должно выглядеть. в виде таблицы, карточек, еще какого-то говна
Ответы: >>1184691 >>1185221
Аноним 2018/05/05 11:37:43  №1184553 513
>>1184547
Пошел на хуй, пидор. А если серьёзно, то я с этой ебалой сталкивался в середине 00-х и до ~2010 года, потом перекатился в другую сферу, тк заебало. Сейчас уже может все по другому, ибо рыночек порешал и квалификация не так важна. Сечёшь, всегда найдется обезьянка готовая работать чуть ли не за еду.
Аноним 2018/05/05 16:35:23  №1184683 514
>>1184228
Будто на пхп не надо каждый год учить фреймворк.
Аноним 2018/05/05 16:35:58  №1184685 515
Просто хочу спросить, нужно ли разрабу на PHP знать паттерны проектирования? Всякие синглтоны и прочий матан.
Ответы: >>1184687 >>1184690
Аноним 2018/05/05 16:38:17  №1184686 516
>>1184519
> моднявый Yii.
Оооо, так иии моднявый.
Вообще же есть ларавел, щас он модный.
Уайии уже лет 6
Аноним 2018/05/05 16:39:38  №1184687 517
>>1184685
Да, ещё как, лол.
Хотя паттерны взаимодействия с БД посмотри.
Аноним 2018/05/05 16:43:49  №1184689 518
Аноним 2018/05/05 16:51:40  №1184690 519
>>1184685
ОЧЕНЬ! Современный сайт без паттернов - каша.
Ответы: >>1184692 >>1184697
Аноним 2018/05/05 16:54:58  №1184691 520
>>1184548
>https://drive.google.com/file/d/0B8VvT_dbtrYMN1NKSUZXRlo4QUk/view
Посмотрел, чет дохуя хотят. Эту залупу в полном виде неделю минимум писать.
Это норма?
Плюс важнее, мне кажется, не что, а как. Тот же фронт лучше бы замутить на SPA, а не на голом хтмл с jquery-аякс-запросами. Но причем тут ебаный пхп, лол?
Ответы: >>1185221
Аноним 2018/05/05 16:55:15  №1184692 521
>>1184690
Нет, просто если раньше ты писал говно с минимумом знаний - это был эдакий сайт.
А сейчас это просто паттерн такой KISS называется.
Ну и тоже самое с остальным. Фабрики и прочее.
Ответы: >>1184697
Аноним 2018/05/05 16:58:37  №1184697 522
>>1184692
>>1184690
Окей, но если скажем я пишу плагин под вордпресс или сайт на laravel мне всё ещё нужны паттерны?
К тому же, много ли сейчас чего вообще делается на чистом похапе? Я думал чаще всего просто юзают фреймворки
Ответы: >>1184699 >>1184700
Аноним 2018/05/05 17:02:20  №1184699 523
>>1184697
>мне всё ещё нужны паттерны?
Да.
>много ли сейчас чего вообще делается на чистом похапе? Я думал чаще всего просто юзают фреймворки
И то юзают и то. Тут тебе не JS, где можно вообще фрэймворк выучить без знаний JS, тут надо знать PHP чтобы порой исходники вордпресса править.
Аноним 2018/05/05 17:03:11  №1184700 524
>>1184697
Вордпресс - лютейший говнокод.
Если пишешь на фреймворке, то да, он нехуево так задает тебе архитектуру, как правильно прогать. Но лучше таки иметь представление, хотя бы.

Если что-то разрабатывается с нуля, то без паттернов у тебя получится лапша, не поддающаяся дальнейшим улучшениям и хуй пойми как работающая
Ответы: >>1184705
Аноним 2018/05/05 17:06:46  №1184705 525
>>1184700
>Вордпресс - лютейший говнокод.
Пруфы? Ты что, все его исходники отмониторил лол? Да, он ебануться какой тормозной. Но весь PHP такой, разве нет?
Ответы: >>1184708 >>1184733
Аноним 2018/05/05 17:11:15  №1184708 526
>>1184705
>не использует тайп-хинтинг последних версий, неймспейсы, даже ооп внедрено в качестве костыля.
Че еще пизданешь?
Ответы: >>1184714 >>1184734
Аноним 2018/05/05 17:22:04  №1184714 527
>>1184708
Что я такого спизданул, еблан? Я тебя спросил, почему ты считаешь его говнокодом.
>не использует тайп-хинтинг последних версий, неймспейсы, даже ооп внедрено в качестве костыля.
Вот твои еблано-аргументы, значит. Но блять почему если код не июзает неймспейсы, то это сразу говнокод? И блять PHP по дефолту был не строго типизорованым, что же получается PHP по роду своему вынуждает писать говнокод, так выходит?
Ответы: >>1184716
Аноним 2018/05/05 17:29:22  №1184716 528
>>1184714
> PHP по роду своему вынуждает писать говнокод
Да, прикинь?
На языке без строгой типизации очень сложно, если сказать невозможно, что-то большое и сложное написать.
Даже js-дауничи начали что-то подозревать и выкатили typescript.

А еще в пхп есть такие штуки, как fatal error'ы (вместо исключений)(и даже появление исключений не привело к отказу от тонн старого говна, в итоге современные методы кидают исключения, а старые ерроры и предупреждения).
А еще функция в пыхе, ВНЕЗАПНО, из-за его нестрогой типизации может вернуть тебе совершенно любое говно вместо того, что ты ожидаешь.
Например, повсеместно используемая PDO:fetch() вернет тебе FALSE вместо массива, если запись не найдена.
То есть ждешь ты такой массив, а тебе фолс ебаный прилетел в ебало.
Как было бы сделано в норм языке: или пустой массив или исключение.
Но это же похапе.
И такое дерьмище там чуть ли не в каждой стандартной функции.
Хоть и стараются в новых версиях return одного типа делать.

И еще есть вещи, вынуждающие писать на пхп говно-код.
Например, там нет нормальных структур данных. Только массив.

мимо пхп-фрилансер
Аноним 2018/05/05 17:36:18  №1184719 529
>>1184716
А еще многопоточность только вчера завезли
Ответы: >>1184737
Аноним 2018/05/05 17:37:07  №1184721 530
>>1184716
>повсеместно используемая PDO:fetch() вернет тебе FALSE вместо массива, если запись не найдена. То есть ждешь ты такой массив, а тебе фолс ебаный прилетел в ебало. Как было бы сделано в норм языке: или пустой массив или исключение. Но это же похапе. И такое дерьмище там чуть ли не в каждой стандартной функции. Хоть и стараются в новых версиях return одного типа делать.
Что мещает юзать if (!PDO::fetch()) die()?
Типо это нормально, наоборот более юзабельно, нет?
>там нет нормальных структур данных. Только массив.
Лол что? PHP насколько я знаю позволяет оперировать любыми данными. Там же есть ассоциативные массивы аки словари в питоне. ЧТо же тебе ещё надо?
Ответы: >>1184722
Аноним 2018/05/05 17:38:19  №1184722 531
>>1184721
>Что мещает юзать костыли?
>Вот дед говно ел и ты ешь. Что тебе еще надо? Не жили богато - неча и начинать
Ответы: >>1184723 >>1184742
Аноним 2018/05/05 17:40:41  №1184723 532
>>1184722
Ты дурачек что ли? Какие костыли ебать? Это старинное условие ещё со времен Си.
Аноним 2018/05/05 17:48:03  №1184730 533