![R class Tech](/img/default-banner.jpg)
- 58
- 843 344
R class Tech
Russia
Приєднався 27 кві 2018
Агентство R.class
Performance-стратегия для вашего бизнеса
Мы специализируемся на performance-подходе при разработке и реализации стратегий по привлечению клиентов из интернета
Performance-стратегия для вашего бизнеса
Мы специализируемся на performance-подходе при разработке и реализации стратегий по привлечению клиентов из интернета
PHP 8.3 - Плюшки, изменения и производительность
Поговорим об основных изменениях в новой версии PHP 8.3, а они там есть, пусть и не столь существенные. Чуть-чуть затронем производительность в узких кейсах. Всё просто и понятно, как обычно.
00:00 - Вступление
00:37 - Изменение свойств при клонировании
04:07 - Типизированные константы
04:18 - #[Override] атрибут
06:11 - json_validate()
07:49 - Извлечение констант из классов
08:30 - Анонимные классы только для чтения
08:52 - Randomizer дополнения
10:52 - Новые исключения по дате/времени
11:47 - unserialize() обработка ошибок
12:05 - Изменения в range() функции
13:28 - Трейты и статические свойства
14:11 - Замыкание магических методов
15:26 - Инвариантная видимость констант
15:52 - get_class(), get_parent_class()
16:53 - Производительность
18:28 - Директивы ограничения памяти
Теги: php, php8, php что нового, разработка, php разработка, php trait, php json, json_validate, php override, php unserialize, php range, php framework, symfony, laravel, wordpress
00:00 - Вступление
00:37 - Изменение свойств при клонировании
04:07 - Типизированные константы
04:18 - #[Override] атрибут
06:11 - json_validate()
07:49 - Извлечение констант из классов
08:30 - Анонимные классы только для чтения
08:52 - Randomizer дополнения
10:52 - Новые исключения по дате/времени
11:47 - unserialize() обработка ошибок
12:05 - Изменения в range() функции
13:28 - Трейты и статические свойства
14:11 - Замыкание магических методов
15:26 - Инвариантная видимость констант
15:52 - get_class(), get_parent_class()
16:53 - Производительность
18:28 - Директивы ограничения памяти
Теги: php, php8, php что нового, разработка, php разработка, php trait, php json, json_validate, php override, php unserialize, php range, php framework, symfony, laravel, wordpress
Переглядів: 4 585
Відео
Оптимизация обработки данных на PHP
Переглядів 1,9 тис.7 місяців тому
Общие практики и подходы для работы с данными в момент выгрузки и загрузки больших (и не очень) объемов данных. Будут как Right-way так и bad practice. 00:00 - Вступление 01:58 - Планирование 04:58 - Дробление 06:40 - Индексы 07:53 - минутка bad practice 14:44 - Про UPDATE 15:47 - RAM 18:15 - ORM и LazyLoad 25:24 - Мониторинг 26:12 - Заключение Теги: php, orm, база данных, mysql, индексы, синхр...
Doctrine: запросы, связи. DQL, QueryBuilder, JOIN, каскадные операции.
Переглядів 1,3 тис.7 місяців тому
Вторая часть мини-курса по Doctrine. Изучаем связи, запросы и коллекции. Рассмотрим стратегии извлечения, Regular и Fetch Join, виды результатов запросов, а так же почему и когда стоит использовать DQL и Query Builder. Первая часть: ua-cam.com/video/K5yRtP1Nw7w/v-deo.html Презентация: docs.google.com/presentation/d/10iIITL08OFyj5S-fVoYrZMrwvMEiih_A4JCkv9Guv6Q/edit 00:00 Вступление 00:26 План 00...
Doctrine ORM: Entity, Identity Map, Unit Of Work
Переглядів 3,2 тис.10 місяців тому
Первая часть небольшого курса по Doctrine ORM. Поговорим об ORM в целом, о Doctrine и ее механизмах работы: Entity, Repository, Identity Map, Unit Of Work и так далее. 00:00 - Приветствие и вступление 00:40 - План 00:56 - Что такое ORM 03:44 - Реализации ORM 03:55 - ActiveRecord 07:34 - DataMapper 10:21 - Что лучше? 11:56 - О Doctrine 13:18 - Entity 14:12 - Anemic Model 17:12 - Rich Model 20:27...
PHP 8.0 - 8.2 | Производительность и фичи
Переглядів 15 тис.Рік тому
Краткий чейнджлог по PHP от 8.0 до 8.2. Плюсом разберем что сделали с производительностью в 8.2 (а об этом почему-то почти никто не говорит). Всё как обычно - мемы и гифки в комплекте :) 00:32 Стартуем! 01:13 8.0: полезное 06:26 8.1: полезное 13:31 8.2: полезное 15:26 Производительность 8.2 16:52 Динамические свойства 17:50 Random 18:03 Подписывайтесь :)
Ошибки web-дизайнера | Сложные элементы web-страниц | Дизайнер vs Верстальщик
Переглядів 638Рік тому
Разберем сложные элементы web-страниц, которые часто рисуют дизайнеры, а верстальщикам потом с этим жить. Как быть, куда бежать и что делать? Мемы и гифки - всё как обычно) 00:30 Стартуем! 02:11 Иконки без подложки 04:03 Формы в модалках 05:25 Endless-пагинация 06:38 Кнопка "Назад" 08:09 Анимация (но не сейчас) 09:43 Плавные переходы 13:40 Кастомные инпуты 16:24 Плавный скролл 20:10 Модные вста...
Большие файлы логов? | LogFileNavigator | Удобная работа с логами
Переглядів 2,7 тис.Рік тому
Расскажем о проблемах, связанных с большими файлами логов и небольшой программке, которая позволяет быстро и удобно работать с такими логами.
Пакетные менеджеры, composer, lock-файлы
Переглядів 4,1 тис.2 роки тому
Сегодня кратко говорим о пакетных менеджерах, в частности о composer, немного затронем yarn и npm, lock-файлы и работу пакетных менеджеров с ними. Посмотреть презентацию: docs.google.com/presentation/d/1tsqrHdba44dIT8RNIt300E-1XF-gsIV483emM7H-2A4/edit?usp=sharing Теги: composer.json, package.json, composer.lock, composer, пакетный менеджер
Inversion of Control, Dependency Injection, DI Container - что это такое и кто все эти люди?
Переглядів 19 тис.3 роки тому
В этом видео мы поговорим о: - Inversion of Control (Инверсия управления, инверсия контроля) - Dependency Injection (Инъекция зависимостей, внедрение зависимостей) - Dependency Injection Container (DI Container) - Service Locator Расскажем что это такое и покажем реализацию этих штук на примере PHP. Пачка примеров и мемасиков, всё как обычно :) Презентация: docs.google.com/presentation/d/1d1vd0...
Базы данных. ClickHouse. Колоночные СУБД
Переглядів 41 тис.3 роки тому
Базы данных. ClickHouse. Колоночные СУБД
Адаптивные изображения (webp, picture, source)
Переглядів 2,9 тис.4 роки тому
Адаптивные изображения (webp, picture, source)
Базы данных. MySQL. Left Join, Right Join
Переглядів 8 тис.4 роки тому
Базы данных. MySQL. Left Join, Right Join
Базы данных. MySQL. Cross Join, Inner Join.
Переглядів 12 тис.4 роки тому
Базы данных. MySQL. Cross Join, Inner Join.
Базы данных. MySQL. Select: GROUP, HAVING
Переглядів 16 тис.4 роки тому
Базы данных. MySQL. Select: GROUP, HAVING
Базы данных. MySQL. Функции, AS, UNION.
Переглядів 9 тис.4 роки тому
Базы данных. MySQL. Функции, AS, UNION.
Базы данных. MySQL. Select: Where, Order, Limit
Переглядів 9 тис.4 роки тому
Базы данных. MySQL. Select: Where, Order, Limit
Базы данных. SQL. MySQL: Внешние ключи
Переглядів 18 тис.4 роки тому
Базы данных. SQL. MySQL: Внешние ключи
Базы данных. SQL. MySQL: Таблицы, типы данных
Переглядів 23 тис.4 роки тому
Базы данных. SQL. MySQL: Таблицы, типы данных
23:30 а как форсить нужный тип данных для БД? Например нужно чтобы доктрина в mysql создала char(32) not null default='sometxtobj'
большое спасибо за объяснение что это происходит именно внутри фреймворка и именно в тех местах, которые нам выделены для написания кода и что мы не всегда имеем над ними полный контроль!
Старались для вас 😊
Очень понравился, без воды, все по делу, ждем еще таких докладов
как вам не стыдно сделать ролики на такую важную тему и на продолжать их
Добрый день! Презентация по следующей части готова, ролик снимать будем через неделю-две. Напишите в личку в телеграм нашему техдиру: @qantus - выдадим вам ссылку :)
Таблица users а выбирают из workers. Нормальное начало))
Почему картавых и неуверенных в себе людей заставляют этим заниматься. По населению картавых людей 2%, но судя по Ютубу кроме них некому больше этим заниматься
Непонятно зачем в этот список Nuxt попал)
Там половина не понятно зачем) Дикий компот :) Но вот так попросили осветить)
вообще не понимаю, чем третья усиленная форма отличается от второй, если что там, что там, мы вводим таблицу связей
Вам бы в языки типизирование пойти а не ПХП засирать, со своей типизацией! Кто вас тут держит!!!???
Мы прекрасно понимаем и плюсы и минусы динамической типизации и то что нам дают выбор очень ценим. В первую очередь мы за то чтобы развивался язык на котором работаем - не больше и не меньше.
@@Rclass Спасибо за ответ! Никто ни в коей мере не говорит о стагнации! Но на данный момент по моему мнению. Наш ПХП превращается в помойную яму в которую спихивают все. Не понимая, не осознавая, не думая. Хорошо ли это. Какие улучшения это дает. Гляньте на свое видео. Кака упала скорость (Да в 8.2 может и поднялась)!!! А сколько дурочков не думая прыгают с версии на версию. Это как с пластиком на планете. Тотальное, не обдуманное использование. И какой результат. Вот скажите мне, зачем теперь отрицательный индекс в массиве!!!??? Спору нет проверка json на валидность это хорошо. ?? это хорошо. Много хорошего. НО ещё больше плохого. Та же типизация. Предположим кто то хочет. Ну тогда пускай, он включит это. А в ядре все как было до этого.
О своей лекции автор точно сказал на 4-й минуте. Выключаю.
имба
5.20 так сделай Contact объектом (Интерфейсом), а в нужном месте передавай реализаций и пройдёшь ревью
Итнро топ, чисто за него сразу лайк 👍
Спасибо)
Отличный ролик, много полезной инфы доступным языком! Спасибо!
Для вас стараемся ;)
Паспорт можно утерять и будет другой номер, паспорт нельзя за первичный ключ брать
Для примера! Всё для примера! Естественно в каждой отдельной ситуации нужно думать головой)
Спасибо Гене, без него бы не понял!
Спасибо за отклик)
Парень немного зажатый, я первый раз на канале. Чисто мое мнение, надо мне кажется немного на чиле быть 😅
А так очень полезно, спасибо ❤
Сложно на камеру работать, а так Рома у нас в целом всегда на чиле)
Антон спасибо за Ваши лекции, супер
Всегда пожалуйста :)
Антон, вы супер объясняете! Спасибо!
Спасибо, стараемся :)
ведущий позитивный, класс)
Спасибо, мы стараемся)
можно было бы пару слов сказать про Criteria, что это и зачем.
В следующем видео информация эта есть :) И достаточно подробно :)
слишком много обрезали лектора, иногда он показывает рукой на какие-то пункты и не понятно на какие именно. надо было хотя бы часть экрана оставить, чтобы на нём был виден край текста.
Согласны, что-то с этим надо делать. Раньше мы просто экран камерой записывали, но в итоге было тоже плохо(
а в какой момент Доктрина использует рефлексию при работе с классами объектов?
Надо забираться "под капот" )
так и в чём разница между Active Record и Data Mapper? если и там и там можно в модель запихивать поведение?
Гм, в подходе?) Active Record - сам объект умеет себя сохранять и удалять из базы. В DataMapper объект - это просто объект.
@@Rclass но Rich Model судя по объяснению в видео это тот же Active Record.
@@GuruNemo отнюдь. Бизнес-логика и логика уровня работы с сохранением данных - это разные вещи.
@@Rclass если не пихать бизнес логику в Active Record, то отличия с Rich Model не вижу. Ещё раз пересмотрел видео, но отличия не нашёл кроме обращения напрямую и через Data Mapper.
У Зандстры в книге есть рекурсивный DI-контейнер
🚀
все круто, но цокать поменьше надо)
Спасибо, исправимся)
PHP-разработчики - самые добрые и нетоксичные среди всех😇
Именно так ^_^
дай бох здоровья
Спасибо)
Спасибо! Не всё понятно сразу, видимо, нужно еще вернуться к просмотру после небольшой практики. Но в целом - здорово!
Спасибо за положительный отклик, нам очень приятно :)
походу у меня вся база в 2 и 3 НФ, я даже составные ключи не делаю.. это уже даже вошло в привычку. Если я вижу, что две совершенно разные сущности сразу создаю таблицу объединения по внешним ключам.. до 4 и 5 НФ даже дело не доходит :)
Это же замечательно :) Отличная привычка! Всем бы такую)
@@Rclass ладно.. спасибо.. всегда хотел спросить такую вещь. Хранение и поиск по строкам очень затратно? Тогда почему ФИО мы не разбиваем на имена и отчества, которые часто встречаются, что бы в таком случае фамилию хранить рядом с их индексами и поиск выполнять только по фамилии?
@@KGB1st всё зависит от задачи, если у вас огромная информационная система в которой это будет иметь смысл - именно так и нужно делать! :)
Ответы по задачам: SELECT worker_id, SUM(salary)FROM `salaries` GROUP BY worker_id; SELECT worker_id, AVG(salary) as salary FROM `salaries` WHERE (date<"2020-03-01") GROUP BY worker_id ORDER BY salary DESC; SELECT MONTH(date) as month, AVG(salary) FROM `salaries` GROUP BY month; SELECT MONTH(date) as month, SUM(salary) as sum FROM `salaries` GROUP BY month HAVING sum >=2000; SELECT COUNT(tag_id) as count, tag_id FROM `tags_tasks` GROUP BY tag_id ORDER BY count DESC; SELECT COUNT(tag_id) as count, tag_id FROM `tags_tasks` GROUP BY tag_id ORDER BY count DESC LIMIT 1 OFFSET 1; SELECT worker_id, COUNT(end_at) as count FROM `tasks` WHERE end_at is not null and worker_id not in (11,12) GROUP BY worker_id ORDER BY count DESC; SELECT MONTH(date), DAY(date), SUM(salary) FROM `salaries` GROUP BY MONTH (date), DAY(date);
Лучший подписчик просто :) Спасибо большое :)
Запросы, которые получились по задачкам, просто оставлю здесь: 1 SELECT MAX(salary) FROM `salaries`; 2 SELECT description as `Before`, REPLACE(description,"Починить","Исправить") as `After` FROM `tasks` where description LIKE "%починить%" or description LIKE "%исправить%"; 3 SELECT AVG(salary) FROM `salaries` where date>="2020-03-01" and date<"2020-04-01"; 4 SELECT TIME(date) FROM `salaries` where salary=(SELECT MAX(salary) FROM `salaries`); 5 SELECT COUNT(salary) FROM `salaries` where date>="2020-01-01" and date<"2020-03-01"; 6 SELECT SUM(salary) FROM `salaries` where DAY(date)=10; 7 SELECT COUNT(*) FROM `tags_tasks` WHERE task_id in (10,13,22); 8 SELECT COUNT(*) AS total_tasks_started_in_january, SUM(CASE WHEN end_at IS NOT NULL THEN 1 ELSE 0 END) AS completed_tasks_in_january, (SUM(CASE WHEN end_at IS NOT NULL THEN 1 ELSE 0 END) / COUNT(*)) * 100 AS percentage_completed_in_january FROM `tasks` WHERE MONTH(started_at) = 1; 9 SELECT salary, ABS(salary-330) as `diff` FROM `salaries` ORDER BY diff ASC LIMIT 5; 10 SELECT AVG(TIMESTAMPDIFF(MINUTE, started_at, end_at)) FROM `tasks` where started_at is not null and end_at is not null;
Спасибо большое :) В закреп, как обычно)
Лучший! Антон, респект! И команде, кто помогал Отличное объяснение, коротко и по теме. Спасибо что заморочились с БД и задачками и выложили все это в открытый доступ. Я уже работал с БД, но решил закрыть все пробелы и порешать задачки. Вот запросы которые получились, может кому полезно будет: SELECT * FROM tasks WHERE (created_at>="2020-02-01" and created_at<"2020-03-01") OR (started_at>="2020-02-01" and started_at<"2020-03-01") OR (end_at>="2020-02-01" and end_at<"2020-03-01"); SELECT * FROM tasks WHERE end_at>="2020-01-01" and end_at<"2020-02-01"; SELECT * FROM tasks WHERE started_at is not null and end_at is null ORDER BY started_at DESC; SELECT * FROM tasks WHERE description like "%бюджет%"; SELECT * FROM tasks ORDER BY created_at DESC LIMIT 3; SELECT * FROM tasks WHERE started_at is null ORDER BY created_at ASC LIMIT 2; SELECT * FROM tasks WHERE worker_id IN (8,9,11); SELECT * FROM tasks WHERE end_at is not null or started_at is null; SELECT * FROM tasks WHERE creator_id=worker_id; SELECT * FROM tasks WHERE description LIKE "%изменить%" or (creator_id=12 and end_at is null);
Спасибо! За ответы особенно! В закреп!
хочется чтобы учитель был моим тимлидом в проекте
Спасибо, стараемся :)
Мне нужен такой Гена, на моей работе!😅
Нам всем иногда нужен Гена)
По факту: первый человек, что указал на концептуальное различие между тремя моделями проектирования. А за эту неделю я просмотрел многих...
Спасибо, мы старались ^_^
Очень круто розжевал. Иногда автор затачивает видео под какой-то конкретный язык что на мое мнение не является правильным так как язык это просто инструмент. В этом видео все будет понятно в не зависимости от языка программирования. Спасибо)
Именно этого и хотелось добиться, спасибо :)
Подскажите, где можно ответы на дз посмотреть? Хочется свериться
Увы, ответов нет(
Спасибо большое, классная подача!
Спасибо что смотрите:)
Объясните, пожалуйста. Третья нормальная форма предполагает, согласно видео, отсутствие связей между неключевыми атрибутами. Однако в правой таблице появляется связь между именем и телефоном: первичный ключ -> имя -> телефон. Получается транзитивная зависимость, или я неправильно понял? В свою очередь идентификатор шины никак не связан с поставщиком, а мы в примере наоборот их разносим в разные таблицы. Хотя они зависят от первичного ключа и не зависят друг от друга . Согласно тому что говорит "Гена", так и должно быть. Почему мы тогда их разнесли в разные таблицы?
О боже, пошел в шарагу после 9 на программиста т.к. думал что это халявный диплом IT-шника, а теперь сижу тут и пытаюсь вникнуть. Спасибо за ролик, благодаря вам меня допустят к практике.
в конце про нормализацию когда рассказывали, там же ошибка больше логическая в примере чем проблема не оптимальности, премия сотруднику начислялась по ОТДЕЛУ а не по тому какой он сотрудник, значит там никак у двух разных разрабов премия быть разной не может, после решили что у разрабов премия 20, так разделение таблиц нужно было что бы избавиться от двух одинаковых записей а не пофиксить, что у одного 10 а у другого 20.
В первых 10 минутах 10 ошибок и не верных терминов.
Спасибо огромное
Спасибо за отклик :)
Очень годно и доступно обьяснил , читал википедию , смотрел видео на ютубе , очень скудная инфа , а тут все просто и по полкам , респект !!!!! А главное хорошие примери
Спасибо, мы старались :)
Ребята, огромное спасибо вам. Доклад очень полезный, все объясняете максимально понятным языком!
Для вас стараемся :)
Уже хочется про 8.3 доклад от выступающего
Вы не поверите! Он уже на канале! :)
@@Rclass уже посмотрел!)
@@ruslanm.1120 Ееее!
Забавное совпадение когда лектор исчез рассказывая про TTL для memcached
Магия, не иначе :)
АЛИЛУЯ, наконецто нормальное и простое объяснение этиого заумного(не умного, а имено избыточно заумного) пиздеца.
Серия и Номер паспорта сходу - плохой первыичный ключ, потому что паспорт меняется с возрастом, а также с утерей. СНИЛС или ИНН (физ. лица) - вот они пожизненные и не меняются.
Как обычно - все зависит от задач) Каждый раз надо понимать с какими данными вы будете работать и какие гипотетические коллизии могут возникать.