Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!


<<
[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 1075 | 88 | 224

Клуб изучающих PHP и webdev #101 ОП # OP  16/04/18 Пнд 03:26:35  1174695  
php-noob-1.png (33Кб, 500x500)
cat-cafe-osaka.jpg (157Кб, 1024x683)
watamote-kuroki[...].jpg (43Кб, 721x480)
minamike6.png ([...].png (321Кб, 1024x576)
Добро пожаловать. Тут мы изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.
Важно ОП 16/04/18 Пнд 03:28:32  1174696
Код важно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть.

Если тебе лень выравнивать код руками, закачай его на 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
ОП 16/04/18 Пнд 03:31:30  1174698
Если я кому-то не ответил в прошлом треде, напомните о себе тут.

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

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

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

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

> идея примерно такая: мы заводим переменные $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, вообще ничего не понял.
Аноним 17/04/18 Втр 01:39:08  1175195
>>1174695 (OP)
ОП, ответь, пожалуйста, на вопрос - это очень важно. Вопрос без подвоха и не траленк. Ты би или гей?
Аноним 17/04/18 Втр 02:07:34  1175205
>>1175195
Ты своей нетактичностью даже меня задел, а я за ОП-а и двор стреляю в упор.
Намек понятен?
не-ОП
Аноним 17/04/18 Втр 05:55:40  1175237
У нас самый лучший на свете ОП. Спасибо ему за то что он такой молодец и няша. Я бы его чаем угостил или даже не пожалел на наго бутылку лучшего Хеннеси. Если бы конечно имел возможность ирл его встретить.
Аноним 17/04/18 Втр 05:58:21  1175238
>>1175195
Он тян.
Аноним 17/04/18 Втр 05:59:06  1175239
15227870197200.jpg (118Кб, 640x640)
>>1175238
Аноним 17/04/18 Втр 15:31:00  1175357
Что делать, если не знаешь с какой стороны начать подходить к задаче?
Аноним 17/04/18 Втр 15:38:37  1175371
>>1175357
Не подходи, блядь, дебил сука ебаный.
Она тебя сожрет.
Аноним 17/04/18 Втр 15:42:38  1175380
Пробую решить упражнение, где надо написать программу, выводящую таблицу умножения чисел от 1 до N на самих себя, используя цикл. Программа должна вывести примерно такой результат:

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

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

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

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

for ($a = 1; $a < 10; $a++) {
$sum = $a $a;
echo "$a
$a = $sum\n";
}
Аноним 17/04/18 Втр 18:06:26  1175585
>>1174695 (OP)
кэк
Аноним 17/04/18 Втр 18:14:07  1175591
>>1174695 (OP)
Аноним 17/04/18 Втр 18:34:43  1175600
Наверное очень тупой вопрос. Как лучше созавать объект, если у него в конструкторе нет зависимостей, со скобками - new Object () или без - new Object?
Аноним 17/04/18 Втр 19:54:24  1175619
>>1175600
Разницы нет, но по PSR - со скобками, ради единобразия: https://github.com/php-fig/fig-standards/blob/master/proposed/extended-coding-style-guide.md#4-classes-properties-and-methods

> When instantiating a new class, parenthesis MUST always be present even when there are no arguments passed to the constructor.
Аноним 17/04/18 Втр 20:06:13  1175625
>>1175238
Сука что же ты делаешь, теперь я правда буду думать что там может быть ОП-тян.
Аноним 17/04/18 Втр 20:17:25  1175633
>>1175625
Это правда.
Аноним 17/04/18 Втр 20:20:33  1175636
>>1175633
Просто раньше это казалось шуткой, а теперь обретает больше смысла.
Наверняка уже какой-нибудь ероха написал ОП-тяну и они уже пару лет как встречаются :(
Аноним 17/04/18 Втр 20:51:18  1175648
Можно ли высвети сразу ответ при вызове переменных, где есть числа и операция?

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

echo $z, $q, $x;

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

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

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

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

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

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

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

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

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

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

Короче, как лучше запилить логику личного кабинета ?
Аноним 18/04/18 Срд 14:15:54  1175997
Q
Аноним 18/04/18 Срд 19:55:53  1176196
1524070553291.jpeg (2560Кб, 2309x1732)
Как правильно спроектировать систему уведомления на сайте? (Не email, а внутри сайта)

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

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

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

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




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

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

Аноним 18/04/18 Срд 19:58:09  1176199
>>1175988
Get + проверка с сессией.
Сессии вполне себе надежная штука.
Аноним 18/04/18 Срд 22:26:52  1176343
Вопрос - есть \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')) ?
Аноним 18/04/18 Срд 23:23:17  1176381
>>1176196
Решил просто порассуждать и поделиться мыслями,строго не бейте, все равно никто больше непишет ничего, а так глядишь дискач на почве указания на ошибки завяжется.

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

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

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

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

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

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

Нет, это не нужно. Просто записываешь в связующую табличку id пользователя и id новости, когда пользователь эту новость прочтет.
Тем самым исключаются проблемы с инсертом.
Аноним 18/04/18 Срд 23:56:51  1176395
>>1176343
Внимательнее почитал доку - оказалось у Symfony там свой велосипед и Intl они не юзают: http://symfony.com/doc/2.1/book/translation.html#pluralization
Но судя по сорсам - можно сделать свой MessageFormatter: https://github.com/symfony/translation/blob/master/Formatter/MessageFormatter.php
И уже там дёргать \MessageFormatter
Аноним 19/04/18 Чтв 01:00:08  1176426
>>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лямами записей - ок. Но ты же говорил о том, что
>события тоже будут измеряться тысячами.
Тебе явно нужен какой-то хитрый механизм отчистки от старого дерьма.
Аноним 19/04/18 Чтв 05:20:17  1176459
По задаче со студентами и вообще в дальнейшем, подскажите кто шарит.

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

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

Аноним 19/04/18 Чтв 06:04:12  1176462
>>1176459
1. Да
2. Да
3. students_list
Аноним 19/04/18 Чтв 07:27:06  1176478
>>1176459
student
это таблица, и так понятно что она лист.
Еще есть холивар на тему student или students.
Оно в принципе не важно. Ну лучше знать о таких срачах на случай случайно детонирующих коллег.
ОП 19/04/18 Чтв 07:31:05  1176480
Проверил в старом треде все оставшиеся задачи и посты, начиная с 30 марта:

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

Если вы писали в прошлом треде и вам не ответили - напомните о себе тут.
Аноним 19/04/18 Чтв 07:31:48  1176481
>>1176459

По SQL берите за основу sql guide: http://www.sqlstyle.guide/ru/
Аноним 19/04/18 Чтв 07:35:10  1176482
>>1176459

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

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

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

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

Что скажете, мамкины прогеры? Если что, база есть.
Аноним 19/04/18 Чтв 16:25:39  1176742
harddaybywhited[...].jpg (77Кб, 649x681)
Хотел бы показать проект ОПу, но постоянно перелопачиваю код до неузнаваемости по желанию левой пятки. Стыдно.
Аноним 19/04/18 Чтв 16:57:17  1176765
2018-04-1720-16[...].png (16Кб, 920x289)
Анончики, подскажите, как сделать это задание. Как поменять шрифт и цвет сердца, если из тегов можно использовать только <em>? А если его использовать, то шрифт не соответствует необходимому результату.
Аноним 19/04/18 Чтв 17:13:06  1176768
>>1176502
Сгенерировать в базу. Либо определить упорядоченное (желательно внешне рандомное) множество значений размерностью n. Ща распишу. я ж у мамы программист
Аноним 19/04/18 Чтв 17:15:32  1176770
Три
Аноним 19/04/18 Чтв 17:34:34  1176781
Спасибо за уроки от двача, это довольно фаново и даёт мне мотивацию. Вот только один вопрос, почему не работает \n? Юзаю <br/> вместо него
Аноним 19/04/18 Чтв 18:41:20  1176830
Собираюсь пилить мини-сайтики, например, сайт визитку по приложению
Не напрягаясь, заскочил сюда. Мне это в ИДЕ удобней будет или с простым редактором можно обойтись? Или в какой лучше все это дело оборачивать? чтобы чекать БД, формочки и т.д.?
мимоАндройдДжуниор
Аноним 19/04/18 Чтв 18:47:28  1176834
>>1176830
А хотя, хули то спрашивать такую фигню.
Ебнул нетБианс.
Аноним 19/04/18 Чтв 18:49:51  1176835
10127880.jpg (64Кб, 640x487)
>>1176502
Вот.
https://ideone.com/UFYCbC
Аноним 19/04/18 Чтв 18:59:15  1176840
>>1176765
Оборачиваешь сердце в em, делаешь ресет родных для em стилей, меняешь цвет и шрифт. Остальное там через html entities набираешь, в том числе само сердце, юникодным номером.
Аноним 19/04/18 Чтв 19:00:44  1176842
140b091f13bbd36[...].jpg (49Кб, 550x413)
Блядь. Что я делаю в пхп-треде? Мискликнул так мискликнул..
Аноним 19/04/18 Чтв 19:03:14  1176843
>>1176842
Может быть это судьба?
Аноним 19/04/18 Чтв 19:04:35  1176845
>>1176842
Перепили под PHP плиз!
Аноним 19/04/18 Чтв 19:11:35  1176850
python-gpio-534[...].jpg (55Кб, 534x462)
>>1176845
Я уже забыл его напрочь. Лет 5 не писал на пхп.
Аноним 19/04/18 Чтв 19:12:30  1176853
>>1176199
Спасибо

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

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


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

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

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

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

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

Я к тому, что если надо быстро освоить и идти работать за деньги то это однозначно пхп.
Если острой необходимости в деньгах нет, то изучение питона в далекой перспективе даст свои профиты. Разве я не прав ?
Аноним 19/04/18 Чтв 22:29:48  1176961
>>1176953
>, то изучение питона в далекой перспективе даст свои профиты. Разве я не прав ?
И почему же?
Аноним 19/04/18 Чтв 22:33:10  1176962
>>1176961
На далекую перспективу изучаешь питон от корки до корки и погружаешься в мир хайлоада и отсоса хиккующих выблядков.
Мимопроходил
Аноним 19/04/18 Чтв 22:34:38  1176963
>>1176962
Питон? Ну а может быть лучше node.js?
Аноним 19/04/18 Чтв 22:38:25  1176965
>>1176963
Я не знаю, я просто мимопроходил. Я вообще думаю, что надо всё на начальном уровне изучить РНР, JS, node.js, Pyhton. Чтобы уметь на всем этом тудулист смастерить. А потом выбрать что-то одно, что больше по душе и по жизненным обстоятельствам.
Аноним 19/04/18 Чтв 22:39:37  1176967
>>1176965
фикс Python
Аноним 19/04/18 Чтв 22:40:16  1176968
>>1176965
Прямо с языка снял.
Аноним 19/04/18 Чтв 22:47:42  1176970
Ну серьезно? Какого хера я должен ебаться с установкой апачи и другой фигни, если можно скачать тот же WAMP? Что мне это даст, когда я потрачу 2 часа на самостоятельные долбежки?
Аноним 20/04/18 Птн 00:11:14  1176999
14595408006390.jpg (90Кб, 747x420)
>>1174695 (OP)
https://ideone.com/kBdER9
На проверочку :3
Аноним 20/04/18 Птн 01:18:30  1177006
>>1176970
Какие долбежки? Весь стек устанавливается тремя командами, или одной через tasksel. Вообще это полезно как минимум потому что в будущем в виртуальной среде ты сможешь тестить свое говно на разных серверах и версиях пых. если захочешь
Аноним 20/04/18 Птн 08:38:30  1177058
>>1176768
Попробую и то и то, пока времени хватает. Маме привет.


>>1176835
Лол, сейчас бы в пыхетреде выкладывать код на питоне.
Но в принципе, саму идею понял, что-то набросаю, сяб.
Аноним 20/04/18 Птн 11:36:00  1177117
>>1176999
Регулярки пиздец. (л|ю|н)? Серьёзно? [люн] блядь
Аноним 20/04/18 Птн 12:00:53  1177153
Анчоусы, есть ли уже готовое расширение, позволяющее создавать формы динамически?
Например, я создаю в админке новую форму, добавляю туда любые поля, выбираю их тип, задаю правила валидации, возможно назначаю эвенты перед отправкой формы, потом все это дело сохраняется в БД. На фронте эта форма со всеми полями и правилами вытаскивается из БД и генерируется в html/js. Не представляю, как это организовать вообще, чтобы в контроллер прилетали POST-данные, ими заполнять эту динамическую форму, валидировать и сохраняться данные в БД.
Аноним 20/04/18 Птн 12:32:35  1177169
>>1177058
Ну я на самом деле потом подумал ещё, тебе ведь всё равно нужно учитывать использовался ли купон, так что наверное только в БД тыщу рандомов писать. Единственное проверяй чтобы в кодах не было мата. FUCKBITCHTWAT
Аноним 20/04/18 Птн 12:45:05  1177178
Откуда взять символы для задачки с хакерским шифром? Я, честно говоря, не понял зачем она нужна кроме...лулзов?
Аноним 20/04/18 Птн 14:30:16  1177210
>>1177153
Очевидный JavaScript очевиден: http://www.r-5.org/books/computers/all-js/
Аноним 20/04/18 Птн 14:34:49  1177211
QDe84Ga.png (81Кб, 851x1185)
>>1177117
Через [л-ю-н] задаются диапазоны же? Тогда все буквы между ними попадут в поиск.
Аноним 20/04/18 Птн 14:54:11  1177222
>>1177178

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

даунелло, у тебя не всегда ЭТО исполняется
Аноним 20/04/18 Птн 20:45:53  1177400
Поясните про TDD. Его обычно во всяких компаниях используют, где тестировщики в штате есть, или когда просто для себя пишу, то тоже ему стоит следовать? Вот допустим есть задача от ОПа на testhub. Лучше сразу с тестов начать?
Аноним 21/04/18 Суб 04:20:11  1177587
Алсо, если в классе есть приватный или протектед метод, но хочется его протестить, то как поступить? Сделать его публичным?
Аноним 21/04/18 Суб 10:12:15  1177629
>>1177587
А где по-твоему используются такие методы?
Аноним 21/04/18 Суб 10:13:23  1177630
ОП, посмотри задания по html, пожалуйста

1 http://jsbin.com/mofepusiko/edit?html,css,output
2 http://jsbin.com/zofidemusi/edit?html,css,output
3 http://jsbin.com/nofuwotoka/edit?html,css,output
4 http://jsbin.com/nadevedose/2/edit?html,css,output
5 http://jsbin.com/civowoweye/edit?html,css,output
Аноним 21/04/18 Суб 10:18:01  1177631
>>1177587
http://php.net/manual/ru/language.oop5.visibility.php

Почитай
Аноним 21/04/18 Суб 10:25:07  1177632
>>1177587

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

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

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

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

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

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

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

Смысл вопроса: не могу понять, куда ООП "присобачить", в какие файлы и функции, в процессе своего говнокодинга. Да, можно создавать экземпляры классов, но для чего? Можно без него обойтись, не скажу, что проще, но они не нужны, лишнее нагромождение
Аноним 21/04/18 Суб 20:21:10  1177880
>>1177856
>спойлер
Никуда, но Web-макаки не изучают компьютерную науку же.
Аноним 22/04/18 Вск 02:06:39  1178091
>>1176999
Переделал решение, заранее спасибо.
https://ideone.com/QBsXdT
Аноним 22/04/18 Вск 13:38:04  1178190
Привет. Нужна помощь в задачке на палиндром. Выводится пустота. Я ковыряюсь уже не первый час и запутался пздц.
http://sandbox.onlinephpfunctions.com/code/63cf89da69bab8ce6434556101059c96e78d3b8c
Аноним 22/04/18 Вск 14:05:27  1178200
Привет ОП. Делаю генератор стихов. Памаги, почему из массива выводится только последний массив? А именно 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;

Но мне кажется это не очень правильно, к тому же, пытаюсь понять ту ситуацию с выводом сверху.
Аноним 22/04/18 Вск 14:11:10  1178203
>>1174695 (OP)
Решил нахерачить логин форму отсюда: https://www.tutorialspoint.com/php/php_mysql_login.htm. И меня не редиректит на страницу welcome.php, хотя он проверяет по базе данных логин и пароль, то есть конект есть, редиректа нету. Не могу понять что не так, на 10 раз пересмотрел все исходники
Аноним 23/04/18 Пнд 14:03:21  1178229
Починили
Аноним 23/04/18 Пнд 14:06:01  1178230
>>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, когда не нужно будет обновлять эти переменные.
Аноним 23/04/18 Пнд 14:55:13  1178242
14885356640560.jpg (36Кб, 604x453)
>>1174695 (OP)
На проверку, задача про мошеннические опечатки.

Вариант только с русским текстом:
https://ideone.com/sz1DCU
Вариант с русским и английским текстом: https://ideone.com/IjnjLz
Аноним 23/04/18 Пнд 15:37:43  1178254
Есть строка с названием файла. Задача вынуть оттуда расширение - jpg, txt и т. д., а если у имени файла вообще нет расширения вернуть null. Я сделал регулярку '/.([^\.]+$)/i'. Но когда я ввошу preg_match('/.([^\.]+$)/i', 'test', $arr) и делаю return $arr[1], то получаю est. Что я делаю не так?
Аноним 23/04/18 Пнд 15:50:28  1178258
Привет.

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

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

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

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

Аноним 23/04/18 Пнд 16:12:27  1178265
>>1178254
Точку экранируй, умник.
Аноним 23/04/18 Пнд 16:37:53  1178274
>>1178242
>>1174695 (OP)
Еще на проверку, автоматическое исправление опечаток.

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

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

Заранее спасибо!
Аноним 23/04/18 Пнд 18:13:09  1178312
>>1178203
mysql старье.
дрочи pdo
Аноним 23/04/18 Пнд 18:41:29  1178329
>>1174695 (OP)
Делать обращения к базе в цикле это плохо или похуй? Антипаттерн или норм?
Аноним 23/04/18 Пнд 18:43:47  1178330
>>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 тегами и прочее.
Аноним 23/04/18 Пнд 18:52:08  1178339
>>1178329
Не можешь справится со сложным запросом и хочешь селать много мелких? Если можно за 1 запрос вытянуть что-то, то наверное лучше за 1 дернуть. Хотя знаешь, я на самом деле не уверен, иногда лучше потестить например, поделав оба варианта по несколько десятков/сотен/тысяч раз и справнив среднее время за сколько ты в итоге получаешь свои данные.


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

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

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

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

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

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

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

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

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

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


Кароче ты парсишь $_SERVER, и например видишь что там юзер зашел с какого-нибудь альфа-фаерфокс 60 версии, идешь значит в таблицу user_agents, смотришь что там ничего нету подобного, заходишь в неё, добавляешь туда себе этот новый неизведанный агент, забираешь его айдишечку, потом херачишь так по нескольким таблицам которые у тебя чисто под такие вот "сущности" выделены и содержат 2 столбца из id и значения, и обойдя в итоге все таблицы и убедившись что везде всё есть ты завозишь наконец с чистой совестью в user_info тупо наконец-то запись с кучкой айдишников? Я правильно понял? У тебя так при каждом обращении юзера к сайту происходит? Ну и я не уловил в итоге, в чем профит такого усложнения перед тем что бы просто занести все нужные тебе куски информации в одну таблицу 1 инсертом за 1 обращение? Инбифо: для нормализации.
Аноним 24/04/18 Втр 12:37:45  1178727
>>1178715
>Вот почему ты теперь мне кажешься высокомерным пидорасом?
Пиздец ты ебанутый. Пропало желание тебе отвечать.
Подожду опа.
Аноним 24/04/18 Втр 12:40:14  1178730
>>1178727
Что обиделся то сразу? Ну блэээт.
Или я был прав:?
Вебмастеринг Аноним 24/04/18 Втр 12:54:01  1178737
Долго ждал сего урока. Поделюсь с аноном годнотой:
http://nnm-club.me/forum/viewtopic.php?t=1220587
Аноним 24/04/18 Втр 13:04:39  1178744
>>1178688

А можешь пожалуйста написать один или несколько примеров, о чем именно, что должно бы быть написано в уроках?
Аноним 24/04/18 Втр 13:20:03  1178754
>>1178715
>Ну и я не уловил в итоге, в чем профит такого усложнения перед тем что бы просто занести все нужные тебе куски информации в одну таблицу 1 инсертом за 1 обращение? Инбифо: для нормализации.
Денормализация ИНОГДА, ДОВОЛЬНО РЕДКО, бывает оправдана, но это явно не тот случай. За денормализованные данные по ебалу бьют в нормальных конторах.
Но если ты индус Кумар Ебалнасрал то, действительно, профиты могут быть неочевидны. Можешь дальше хуячить данные в базу as is.
Аноним 24/04/18 Втр 13:31:15  1178760
Screenshot2018-[...].png (7Кб, 1167x86)
Screenshot2018-[...].png (3Кб, 307x84)
Screenshot2018-[...].png (1Кб, 149x113)
1.png (69Кб, 1713x757)
>>1178330
Дампнул - вывод пикрил. Пробелов не видать - https://pastebin.com/F2CChrQw Еще раз проверил все файлы хотя я до сих пор могу не видеть какую-нибудь очевидную ошибку При успешном логине он крашит body, пикрил. Собсна что делать, по-другому можно редирект сделать? Пробывал локейшен заменить на echo - тот же эффект.
Аноним 24/04/18 Втр 13:47:10  1178769
NORMALIZACIYA.jpg (173Кб, 1280x720)
>>1178754
Вспоминается анекодот про макак и бананы. Вот я захожу к вам ща в камеру, кидаю ненормализованную таблицу на пол, и вы на меня набрасываетесь, а пояснить то можешь на конкретном примере? А не высрать: НУ ТАК ПРИНИТА.

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

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

У слившегося челика как я понял юзер при каждом клике создает в десятки таблиц по запросу только что бы проверить есть ли там то, что юзер с собой принес, потом еще потенциально по десятку инсертов может прилетать туда же, если вся инфа- свежачок, зато нормализацию базы поддерживает)))
Аноним 24/04/18 Втр 13:55:36  1178774
>>1178769
Деньги вперед.
Аноним 24/04/18 Втр 13:58:03  1178775
>>1178760
А я то думал мы тут ща обсуждать будем и рождать в споре истину.

https://www.youtube.com/watch?v=AQqiUusn04k
Аноним 24/04/18 Втр 13:59:06  1178776
>>1178775 мимо
>>1178774 сюда

Аноним 24/04/18 Втр 14:03:30  1178779
>>1178760
Смотри, а попробуй в начале welcome.php
написать перед include('session.php');
написать:
echo 123;
exit;

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

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

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

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

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

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

Например, если содержимое столбца никогда не используется отдельно от сущности таблицы, скорее всего нет смысла её нормализовать.
Пример: 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.

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

Мимо проходил в надежде стать более лучше одеваться.
Аноним 24/04/18 Втр 14:54:35  1178805
Что такое Middleware?
Аноним 24/04/18 Втр 14:55:09  1178806
>>1178803
Перед include('config.php);

А вообще, идея в том, что даже если тебе твой пхп и не покажет эрор на использовании этой функции, то ты сам её замени на то, как в мануале показано.
Аноним 24/04/18 Втр 15:05:54  1178808
4324.png (8Кб, 320x168)
>>1178806
Бляяять, костыль действительно работает. Анон, я бы тебя расцеловал во все места, в которые можно расцеловать. Счастья тебе, здоровья, жену красавицу или трапа красивого, в общем всего всего. Спасибо, что на меня дауна потратил свое время!
Аноним 24/04/18 Втр 15:06:30  1178809
нахуя углубленно учить пхп,если во вреймворках синтаксис отличается на 80% ?
Аноним 24/04/18 Втр 15:20:45  1178813
изображение.png (720Кб, 584x587)
>>1178804
>Поэтому использовать нужно коммон сенс.
>Прежде чем это делать нужно очень четко представлять себе конечную цель твоей работы. Возможно, это реально требуется. Но даже в таком случае, почти наверняка тебе не нужно нормализовать эти столбцы в отдельные таблицы, потому что почти наверняка, отдельно от сущности реквеста эти данные тебе не нужны.

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

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

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

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

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

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

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

Снова 2 часа перебирания. Почему бы тебе не сказать что это за условия, ибо я, откровенно говоря - идиот или необучаемый.
Аноним 24/04/18 Втр 15:41:05  1178828
как реализовать такое,я двигаю шар из одного угла в другой,остальные пользователи видят это перемещение
Аноним 24/04/18 Втр 15:49:20  1178832
>>1178822
Я в этом треде уже много насрал - вот и скрываю. Да и кому нужны эти претензии пока я не составил конкретные пояснения что/где/куда? Пока еще рано.
Спасибо за задачи, я и правда не до конца понял как работает цикл. С пониманием остального материала таких проблем не возникало. Просмотр решения других анонов + чтения учебника + учебник ОПа в моем случае сработали.
>>1178825
>>1178659
>>1178190
Видишь - много ненужного флуда. Надо выражать мысль лаконичнее. Горю я сильно от своей ограниченности, анон, контролировать получается не очень.
Аноним 24/04/18 Втр 16:10:36  1178841
>>1178805
Применимо к PHP это, например, вот что:
https://github.com/idealo/php-middleware-stack

по крайней мере к этому идет.
Аноним 24/04/18 Втр 16:15:28  1178843
>>1178825
вот:
http://sandbox.onlinephpfunctions.com/code/ee8b5691bf732bd63333003f7425003db2fdee7f
>идиот или необучаемый
Терпение, труд и регулярные занятия решат эти проблемы.
Аноним 24/04/18 Втр 16:27:26  1178845
>>1178813
Ебать тебя порвало, братишка. Сразу скатился в ad hominem и скобочки подключил с боевыми картиночками.
Но вот только нубас ты, ведь сам в этом расписался:
>>1178339
>Сам часто делал в продакшене хуйню уровня
>не можешь справиться со сложными запросами
То есть в базах данных ты хуй простой, но мнение имеешь.
Аноним 24/04/18 Втр 16:34:47  1178847
>>1178845
С высокомерным пидрилой я всё же в точку попал видимо.
Аноним 24/04/18 Втр 16:36:31  1178848
14846769968690.png (45Кб, 532x495)
привет всем!я снова здесь!
Аноним 24/04/18 Втр 17:05:32  1178854
>>1178823
Cock.
Шапку и задачки читай.
Оп рекомендует slim
Аноним 24/04/18 Втр 17:06:57  1178856
>>1178854
слим это микрофреймворк.
а нужен серьезный
Аноним 24/04/18 Втр 17:09:46  1178858
Делаю файлообменник, и возник вопрос, как адекватно прикрутить eloquent к слиму. Я засунул \Capsule\Manager в контейнер, как советуют в документации слима, но почти ничего не работает, нельзя например через фасад модели запрос к бд делать как в ларавеле. На стаковерфлоу советуют не заворачивать подключение в контейнер, а просто его объявить глобально. Так все фишки eloquent-а работают, но мне кажется эта идея слишком сомнительной из за глобальной переменной в коде.
Аноним 24/04/18 Втр 17:28:25  1178873
>>1178854
по нему мало инфы
Аноним 24/04/18 Втр 17:28:38  1178874
>>1178856
Выбор фреймворка от проекта зависит
Аноним 24/04/18 Втр 17:35:55  1178880
>>1178856
Зачем тебе серьезный, если ты будешь 10% от возможностей юзать?
Аноним 24/04/18 Втр 17:37:17  1178881
>>1178880
для работы на дядю
Аноним 24/04/18 Втр 17:43:14  1178885
>>1178847
>С высокомерным пидрилой
Я не он, но ты так говоришь, как будто это плохо. Высокомерным быть лучше, чем тупым и самоуверенным, как ты.
Аноним 24/04/18 Втр 17:55:41  1178890
Анончики, хочу использовать для проекта сложного магазина laravel.
Какие подводные?
До этого работал с yii2
Аноним 24/04/18 Втр 17:57:02  1178891
>>1176196
Бамп
Аноним 24/04/18 Втр 18:25:27  1178922
Сап анонимусы, работодатель на интервью подкинул задачку на алгоритмы, пытался написать на пыхе, но ничего дельного не вышло:
Расстояние между А и В 18 км, первая заправка находится от А на расстоянии 9 км, расстояние от первой до след. заправки 4 км, от второй до B 5 км. Нужно оптимально разместить три новые заправки (помимо этих трех, эти три перемещать нельзя) чтобы минимизировать максимальное расстояние между двумя заправками подряд (на всем маршруте).
Т.е. имеем массив [9,4,5] и количество заправок k = 3, нужно конкретно для этой задачи получить массив [3,3,3,4,2.5,2.5], но как это сделать алгоритмически и для любых данных, ума не приложу..
пс может вопрос тупой, сори, но если кто сталкивался или сообразит хелп плз! Всем мир!
Аноним 24/04/18 Втр 18:44:06  1178943
>>1178922
Братик, у тебя почерк неровный. Из твоего поста вытекает, что уже существует всего 2 заправки
Аноним 24/04/18 Втр 19:06:14  1178960
>>1178943
Да есть такое, изначально заправки две, затем над добавить еще 3 в оптимальных местах (т.е. k = 3 это новые заправки).
ОП 24/04/18 Втр 19:38:19  1178973
>>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
- добавление/обработка каких-то заголовков
ОП 24/04/18 Втр 19:38:41  1178975
>>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 и в СУБД обычно есть функции преобразования между текстовым и бинарным форматами.
ОП 24/04/18 Втр 19:39:04  1178976
>>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%, поэтому тут всё нормализованно и проиндексированно по айдишникам, шоб быстрее,
Ты же не понимаешь, в чем суть нормализации. Она не для того, чтобы ускорить какой-то поиск. А чтобы данные хранить в наиболее удобном для работы с ними виде.
ОП 24/04/18 Втр 19:39:26  1178978
>>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 и того, что можно делать.

Ты бы спрашивал вопросы, если что-то непонятно.
ОП 24/04/18 Втр 19:39:51  1178979
>>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

И еще одна причина появления ООП - это то, что многие вещи удобно представлять именно в виде объектов, у которых есть свойства (поля), и действия над ними (методы).
ОП 24/04/18 Втр 19:40:16  1178980
>>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
Аноним 24/04/18 Втр 19:40:19  1178981
>>1178975
так вроде в пхп с сокетами все хуево
ОП 24/04/18 Втр 19:40:55  1178982
>>1178242

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

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

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

>>1178200

Так ты только его и выводишь командой var_dump. Выполняются несколько раз только действия внутри цикла (блока фигурных скобок), а var_dump стоит после и выполняется один раз.
Аноним 24/04/18 Втр 19:43:24  1178984
>>1178981
те только через костыли
Аноним 24/04/18 Втр 19:44:33  1178985
>>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 ) )
Надеюсь если будет кто шарящий читать поправит.

Пойду устраиваться вместо тебя
Аноним 24/04/18 Втр 20:04:06  1178993
>>1178975 >>1178976

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

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

Что если дописать там поле допустим QUEUED_FOR_DELETION, и во всех местах приложения не давать добавлять связи для таких сущностей, а потом когда-нибудь их удалить. Можно было бы конечно вообще не удалять в таком случае но таблица будет расти и место там не резиновое.
Аноним 24/04/18 Втр 22:55:29  1179124
>>1178922
У меня как то так вышло: http://sandbox.onlinephpfunctions.com/code/0494c1a1d92e3584993a9514f8e60459c33c57b5
Тут конечно еще нужно допиливать. Надо бы больше тестов. Проверка входящих значений, имена поправить и т.д. Хотя я собой доволен. Когда твой пост прочитал, вообще не понимал как подступиться.
Аноним 25/04/18 Срд 00:19:38  1179162
>>1179124
Как же лаконично и алгоритмически более эффективно.
А казалось бы просто представь сегмент как что-то самостоятельное, пиздец я еще тупой, рановато мне пытаться помогать кому-то.
Аноним 25/04/18 Срд 00:44:23  1179167
>>1178885
Для чего лучше? Оба варианта хуевы для взаимодействия, что первый долбоеб которому ничего не докажешь, но он окукливается при первой же угрозе и будет тебя скрыто хейтить, иногда попердывая при удобном для него случае, как и второй, который будет стоять на своей неправоте и считать что спор выигран тем, за кем было последнее слово или тот кто громче крикнул.
Аноним 25/04/18 Срд 08:35:23  1179233
>>1178858
https://www.youtube.com/watch?v=70IkLMkPyPs&list=PLfdtiltiRHWGc_yY90XRdq6mRww042aEC&index=7
Аноним 25/04/18 Срд 09:41:51  1179252
продублирую сюда из бд-треда
Вопрос по постгресу. Уменя есть колонка в таблице с варчар данными, которые есть обычный json. Типа:
{"Lat":"123","Lon":"231"}
Суть в том, что мне нужно сделать из неё jsonb, но так, чтобы значения были нумерик, а не текст. Обычный alter, который set type jsonb using col::jsonb переводит в обычный текст (значения в кавычках), а мне нужно от этих кавычек избавиться. Как быть?
Аноним 25/04/18 Срд 11:17:15  1179282
Ощущаю себя тупым. Сколько времени у вам заняло изучение html+css?только без толстоты плс
Аноним 25/04/18 Срд 11:21:42  1179285
>>1178979
Меня почему - то ступор на самых простых вещах, каждый раз. В голову не пришла мысль, что если цикл не ломается - значит все совпало. И что считать не надо, так как уже все считается.
А по поводу условия в цикле - это уже просто невнимательность. Много раз переделывал, "глаз замылился".
http://sandbox.onlinephpfunctions.com/code/ce073838ae8fa5753fef60ff8c5018ca95a65de4
Так верно?
Аноним 25/04/18 Срд 12:02:26  1179304
>>1179282
я вообще изучал этот кал. это же фронтэнед, а мы тут учим php sql ООП фреймворки линуху
Аноним 25/04/18 Срд 12:09:48  1179309
>>1179252
Покажи как ты сохраняешь
Аноним 25/04/18 Срд 14:39:28  1179390
>>1179252

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

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

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

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

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

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

Подскажите, как можно вывести только название адреса.
Спасибо!
Аноним 26/04/18 Чтв 19:34:14  1180223
>>1180141
Бамп вопросу
Аноним 26/04/18 Чтв 19:34:15  1180224
>>1180220
https://ideone.com/1DDdHJ
Аноним 26/04/18 Чтв 19:46:36  1180230
>>1180223
В оп-посте же есть. Пока ты бампаешь уже успел бы весь http://sql-tutorial.ru/ прочитать.
Аноним 26/04/18 Чтв 20:36:42  1180259
>>1180230
Шутишь? Он огромный, а в оп-посте самые азы. Ладно, спасибо.
Аноним 26/04/18 Чтв 21:49:52  1180307
>>1180165
>устроился хуесосом в говноконтору ковырять лендинги
>мам у вас в пхп так скучно, где интересное то?
Чому ты такой тупой?
Я, да Я 26/04/18 Чтв 21:51:12  1180308
Ладно, с дикой тоской в глазах дошел до генератора 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

Люблю вас
Аноним 26/04/18 Чтв 22:45:49  1180331
>>1180165
А формы от csrf защитил? А как быть с формой, если страница кэшируется? А валидацию с сохранением промежуточных значений в сессию сделал? А что, если для записи данных нужно двадцать таблиц из трёх бд дёрнуть, как вон выше у анона с ёба-нормализованной бд, а клиент хочет сразу ответ получить? И так далее, и так далее
Аноним 26/04/18 Чтв 23:17:09  1180355
>>1180331
Жаль тот челик с нормализованной бд окуклился и не ответил в чем таки профит его подхода.
Аноним 27/04/18 Птн 11:19:47  1180464
>>1180308
Что там критиковать-то, кек, три строчки.
Аноним 27/04/18 Птн 12:12:51  1180470
Задачка "Кредит на айпад". Пока что пробую создать функцию для 2 из 3 банков. Выводится пустота, ошибку самостоятельно не нашел.
https://ideone.com/2ZrJCa
Аноним 27/04/18 Птн 12:21:07  1180471
>>1180470
>Выводится пустота
Потому что у тебя функция ничего не возвращает. Где return?
Аноним 27/04/18 Птн 12:24:39  1180472
Держу двач на втором мониторе - он немного старый и с разрешением 1280*1024, и в общем хотел немного поковырять пользовательские css, но что-то не работает ничего. Например решил начать с простого и немного уменьшить марджины у постов, что бы влезало больше текста и полоса прокрутки текста в посте тоже уехала на край. Но ничего не работает, в юзер css пытался лепить как правило вида:
post-message { margin: 5px; }
так и
blockquote { margin: 1em 5px;}
Не подхватывается, кто-нибудь сталкивался?
Аноним 27/04/18 Птн 12:25:34  1180473
>>1180472
>.post-message { margin: 5px; }
.post-message { margin: 5px; }
Аноним 27/04/18 Птн 12:27:22  1180474
>>1180473
Что ты хочешь мне сказать?
И вообще сори, отбой - всё заработало, я забыл галочку в настройках поставить собственно, которая активирует всё это.
Я, да Я 27/04/18 Птн 12:28:19  1180475
>>1180474
>Что ты хочешь мне сказать?
Что перед классами нужна точка.
Аноним 27/04/18 Птн 12:45:50  1180478
Чятик, где про простейший роутинг почитать. Ночью гуглил, но все какое то на базе ООП и считаю что для начала слишком сложно.
Хочу чет на безе GET, как описывалось в пасте про MVC, но загуглить не смог.
Аноним 27/04/18 Птн 12:47:52  1180479
>>1180478
Ну так это, берёшь какой-нибудь известный микрофреймворк типа Slim (или Fat Free Framework) и смотришь как там устроен роутинг.
Аноним 27/04/18 Птн 12:55:22  1180480
>>1180479
так они все достаточно громоздкие, хотелось бы чет простое. Чисто для понимания как такое написать и собственно написать.
Аноним 27/04/18 Птн 13:29:40  1180489
>>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 в примере

Ну и для начала норм как по мне.
Аноним 27/04/18 Птн 13:41:05  1180495
Untitled.png (171Кб, 604x739)
>>1180478
Вот простая поэтапная инструкция

Аноним 27/04/18 Птн 14:54:17  1180519
изображение.png (84Кб, 1280x1024)
>>1180475
Спасибо энивей за помощь и молниеносный отклик, настроил себе окошко двача так, что вообще ничего лишнего и легко и приятно стало читать большие посты на мелком монике, ну и форма ответа теперь внезапно наменого менее мешающая.
Аноним 27/04/18 Птн 14:59:57  1180520
Еще с лету вот такой вопрос. Вот например есть твои посты - посты которые подсвечены красным, есть посты которые содержать ответ на твой поста - подсвечены пунктиром. А есть возможность как-то внутри этого поста как-то обозначить какая часть ответа тебе? Например что бы когда человек цитирует твой пост - то его номер:
>>1180475
Скажем выводился жирным. Или тут нужно уже кастомный js подрубать что бы высчитывать подобное? И проще сразу идти писать абу что бы вводили?
Аноним 27/04/18 Птн 15:04:07  1180523
>>1180520
Да, нужно скрипт писать, ибо сообщения в самом хтмл ничем не выделяются для каждого юзера, да и с жс ты вряд ли найдешь универсальный способ определения того куска текста, который именно для тебя писался. Потому что я могу так сделать
>1
>2
текст
Могу так
текст
>1
Могу даже те>1кст
Аноним 27/04/18 Птн 15:10:35  1180526
изображение.png (45Кб, 1321x882)
>>1180523
Вот пример маломальский того что я хотел бы на пикриле.

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

>>1180542
Учебник года 3 назад писался, а на идеоне прост забыли при перекате на новую версию пыхи подключить библиотеку в ini файле, напиши им в поддержку если хочешь. contact@ideone.com
Аноним 27/04/18 Птн 16:18:58  1180547
Если кто не слышал про букмарклеты, то расскажу. Это закладки в браузере, в которых вместо 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'; } });

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

После этого сохраните закладку. Теперь при нажатии на эту кнопку запустится скрипт в контексте страницы и подсветит неотвеченные посты желтым.
Аноним 27/04/18 Птн 16:30:05  1180548
>>1180545
>Нашел уже тот пост с костылем, но во первых что-то это в лисе не работает, а во вторых надо же кнопку нажимать, а хочется автоматизировать и забыть.
Переделой
Аноним 27/04/18 Птн 17:06:23  1180564
>>1176196
Бамп, опчик, я надеюсь ты посоветуешь что-то, когда будет время :3
Аноним 27/04/18 Птн 21:34:02  1180670
Нужна хелпа, попробовал решить задачу про Льва Толстого через перебор общего массива - в итоге заблудился в трех соснах и не могу вывести текст на экран. И вообще есть способ решить эту задачу с помощью foreach не используя is_array???
https://ideone.com/l7OcfA
Аноним 27/04/18 Птн 21:59:39  1180681
>>1180670
Зачем там implode вообще?
Аноним 27/04/18 Птн 22:03:46  1180685
>>1180670
https://ideone.com/xXVM5M
Аноним 28/04/18 Суб 02:49:04  1180913
>>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

Задавай вопросы, если что.
Аноним 28/04/18 Суб 04:26:20  1180921
Поставил сервер на LAMP, установил Drupal, но PHP не знаю, хотя говорят надо бы, или необязательно для простого интернет магазина?
Как вообще знающие PHP используют CMS, пишете свои модули?
Я собирался начать учить, но немножечко время поджимает, со всех сторон в плане учебы, просто как бы я не прогадал.
Аноним 28/04/18 Суб 04:29:48  1180922
>>1180921
Еще спрошу: планирую ставить разные хостинги, на Nginx с Joomla, правда времени наверное много уйдет, кто нибудь занимался этим? Какая база нужна?
Аноним 28/04/18 Суб 09:48:39  1180952
Пример переусложнения кода: 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 на что-нибудь другое, кто знает.
Аноним 28/04/18 Суб 11:39:50  1180976
>>1180921
>>1180922
Почитал западных профи, в общем нечего с апачем делать без опыта серверника.
Аноним 28/04/18 Суб 12:05:32  1180977
>>1180952
Согласен, в Symfony например есть мощный компонент форм, позволяющий избегать дублирования кода на фронте и бекенде, ну и в целом только бекенд писать проще, чем бекенд + фронтенд. Но что делать если нужна интерактивность, например в задаче тестхаб было бы гораздо удобнее, если бы создание/редактирование теста было на одной странице, так же как и прохождение тестов (мне нравится как сделали на Duolingo, Lingualeo - там всё без перезагрузки). C jQuery начинается дикая каша, я пробовал, и цена внедрения функционала растёт с каждым новым изменением. А вот SPA на реакте подошло хорошо и существенно облегчило разработку там, где нам была нужна интерактивность.
Аноним 28/04/18 Суб 12:12:57  1180978
>>1180952
но на реакте моднее и реактивнее
Аноним 28/04/18 Суб 12:17:15  1180979
>>1180977
зато на жс страницу перезагружать не нужно. чем больше логики переносится на жс, тем меньше ее остается для пхп. скоро пхп будут использовать только для запросов к базе.
Аноним 28/04/18 Суб 12:20:32  1180980
>>1180977

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

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

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

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

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

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

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

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

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

Допустим есть объект внутри которого лежит другой объект - https://ideone.com/QgS6gL
Но что делать если у меня там массив департмаментов, и в каждом департаменте еще и массив рабочих. Просто массив непоклонируешь особо, там ошибка.
Аноним 28/04/18 Суб 15:54:40  1181064
>>1181061
$this->inside = clone $this->inside;
Вот эта строчка немного голову ломает если честно :(
Аноним 28/04/18 Суб 16:04:22  1181066
>>1181030
>А если произойдет хоть одна ошибка в JS коде, будет просто белая страница
Что ты несешь.
Аноним 28/04/18 Суб 16:28:21  1181079
>>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, создает его клон и помещает указатель на него назад в этом поле.
Аноним 28/04/18 Суб 16:29:30  1181081
>>1181066

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

Так не нужен, что ты не поленился найти наш тред и сказать об этом? Ничего, проходи, устраивайся поудобнее.
Аноним 28/04/18 Суб 17:48:31  1181109
Как тестируется верстка? Руками? Или все таки можна как то автоматизировать? Вообщем, есть одна страничка с динамическим контентом. Как можно проверить, что ее не распидорасит, если там будет много текста или картинки большие, видео и т. д.?
Аноним 28/04/18 Суб 18:12:41  1181127
>>1181109
>После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
Аноним 28/04/18 Суб 19:15:32  1181169
>>1181088
да просто маньки пхпшники не нужны уже на фоне такого обилия всяких цмс. манек пхпшников это настолько рассатривает, что они даже делают бложики из велосиедов на всяких уии и зендах вместо того, чтобы взять готовую цмс.
А вот js на острие хайповых технологий щас, все больше логики переносится на жс, приложение начинают различаться лишь интерфейсом тк в плане функциональности все давно изобретено и переизобретено под типовые нужды.
собсно меня всегда и брали пилить фронтенд там, где на бэке пхп (вордпресс или уии), потому что я в довесок знаю похапе.
и вот я пришел сказать, как человек, который в рановй степени учил и пхп и жс, что жс гораздо более востребован и оплачивается.
Аноним 28/04/18 Суб 20:50:20  1181233
Аноны, спасибо за картинку с роутингом.
Такой тупой вопросец. Зачем использовать {скобки} при вписывании переменной в строку вида --- echo "Привет аноны я, {$username}";
Аноним 28/04/18 Суб 21:48:43  1181255
>>1181233
http://php.net/manual/ru/language.types.string.php#language.types.string.parsing
Аноним 28/04/18 Суб 22:46:04  1181292
>>1181169
Куда устроился в итоге и сколько платят? И что за город?
Аноним 28/04/18 Суб 23:21:28  1181304
>>1181169
Ну я изчую пхп. Но я не нацелен на гавно цмс, разве когда я изучу симфони, мне с такими знаниями придется клепать хрень на цмс? Я думал там, интереснее есть задачи для бэкэнда.
Аноним 28/04/18 Суб 23:25:48  1181307
Интересные задачи начинаются когда тебе уже всё равно на чём писать.
Аноним 29/04/18 Вск 00:28:50  1181329
>>1181109

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

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

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

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

У меня был скрипт, чтобы в верстке добавлять пункты меню и удлинять тексты, но я не помню, где он.
Аноним 29/04/18 Вск 01:13:47  1181338
>>1181304
нахуй не нужны фреймворки, все можно сделать на цмс в пхп.
а на фреймворках любят костылять байтоебы-велосипедчики, в итоге костыляют ту же цмс только долго и плохо
Аноним 29/04/18 Вск 01:38:26  1181347
>>1181109
Может будет полезно
https://habr.com/company/2gis/blog/246831/
Аноним 29/04/18 Вск 02:14:03  1181356
>>1180063
опен сервер поставь и забей на сервер и разбирание в том, что такое апач, хуяч.

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

Мимо по своему опыту
Аноним 29/04/18 Вск 02:15:58  1181357
>>1180081
>семафор
шо это ха хуйня, чем знаменита?
Аноним 29/04/18 Вск 02:17:26  1181358
>>1180141
внезапно были годные уроки от webformyself
там вся кухня блядь была, давно смотрел, но помню ахуел от того как дохуя можно рассказать по теме
Аноним 29/04/18 Вск 02:20:47  1181359
>>1180165
тож устроился джуном на пхп. С сайтами вообще почти не работаю.
Пишу ботов, хуйотов, парсеры, спамеры лол и много всякой подобной хуйни, работа с сайтом часто заключается в том, чтобы я просто набросал какой нибудь интерфейс чтобы кликать можно было и управлять настройками бота
Аноним 29/04/18 Вск 02:27:34  1181361
>>1180478
Тебе без ЧПУ?
Хуле там учить тогда? Принимаешь ?page=hyi, на странице пишешь include $_GET['page'].'.php'; сверху/снизу шапка/футер. Обмазывание свистоперделками - дело индивидуальное
Аноним 29/04/18 Вск 02:32:24  1181362
>>1181307
подрбней?
Аноним 29/04/18 Вск 03:19:22  1181364
>>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 велосипед не хочется, нужно чтобы новые разработчики быстро вникали в проект.
Аноним 29/04/18 Вск 11:29:48  1181424
>>1180471
Проверьте решение - кредит на айпад.
https://ideone.com/HW6Jad

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

В принципе пердолинг меня увлекает и я не против, если есть плюсы
Аноним 29/04/18 Вск 13:42:37  1181496
>>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:

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

Расчет программа делает правильно.
Аноним 29/04/18 Вск 13:42:55  1181498
>>1181364

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

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

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

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

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

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

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

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

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

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

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

А он и не нужен для показа вакансий.
Аноним 29/04/18 Вск 13:43:14  1181499
>>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 сервер.
Аноним 29/04/18 Вск 13:43:40  1181500
>>181338

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

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

>>1181169

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

>>1180921

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

>>1180670

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

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

>>1180685

тут все верно
Аноним 29/04/18 Вск 13:43:59  1181501
>>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 строк по индексу - нет. Если сотни - то на большой нагрузке. Если десятки тысяч - то всегда.

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

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

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

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

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

И в чем смысл? Что мешает получить число сразу?
Аноним 29/04/18 Вск 15:54:38  1181594
>>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 секунды.
Аноним 29/04/18 Вск 17:15:41  1181647
>>1181594

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

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

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

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

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

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

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

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

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

echo '$' . ($x = function($a) {return $a;})(1) (10 * 6) . PHP_EOL;
//1000000
Аноним 29/04/18 Вск 21:14:33  1181775
Screenshot.png (21Кб, 634x180)

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

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

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

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

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

В последний месяц, когда баланс кредита меньше 5000 у тебя все равно платит всю сумму, это нужно проверять.
Аноним 29/04/18 Вск 22:43:43  1181811
>>1181778
А можешь, пожалуйста, рассказать какие преимущества дает такой переход
Аноним 29/04/18 Вск 22:47:41  1181813
>>1181811
Как перекатиться на убунту если на винде у тебя пубг и прочая стимохуйня? Перекатиться на месяцок что бы отработать консольку и прочее, а потом как возьмут на работу снова установить себе дома лпмповый опен сервер?
Аноним 29/04/18 Вск 22:52:11  1181816
>>1181813
дуалбут
Аноним 29/04/18 Вск 23:17:53  1181826
Аноны, подскажите пожалуйста, поставил сокс для телеграма на убунту https://github.com/Lozy/danted
Как еще полностью выключить логи на сервере?
Аноним 30/04/18 Пнд 00:05:43  1181846
>>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.

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

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

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";
}
}






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

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

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

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

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

Вот код если что https://repl.it/@2chGray/Palindrom
ideone уёбки не отвечают на моё письмо с просьбой подключить mbstring библиотеку
Аноним 30/04/18 Пнд 17:23:06  1182120
>>1181989
Всё же советую попробовать что-то другое. Далеко не факт что на работе будет убунта.
Аноним 30/04/18 Пнд 17:27:57  1182122
>>1179898
Бамп
Аноним 30/04/18 Пнд 17:40:56  1182135
>>1182092
А зачем тебе вся длина строки?

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

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


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

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

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

Аноним 30/04/18 Пнд 22:50:25  1182337
image.png (34Кб, 1194x126)