Блог Михаила Крамера. PHP и JS

Последние публикации
Проверка подписи эфириума и других криптовалют на PHP
Иногда при работе с эфиром надо проверять подпись. И вот как это можно сделать на PHP
Правильное уведомление о глобальных событиях в Angular
Иногда в системе может происходить какое-то событие, которое нас должно заставить перерисовать огромное количество несвязанных компонентов. Яркий пример - пользователь вошёл на сайт, и надо сменить и хедер, и сайтбар, и ещё черт знает что. Давайте посмотрим, как это делается неправильно и правильно.
Подключение серверного рендеринга Angular Universal
Сейчас SPA-приложения стали фактически стандартом. У большей части веб-приложений фронт написан либо на Vue, либо на React, либо на Angular. Но иногда возникают ситуации, когда нам нужено отреднерить наш HTML на сервере. В этом посте я опишу мой опыт с Angular Universal.
Максимальная высота для любого устройства
На хроме в анроиде высота 100vh считается некорректно. Но есть небольшой трюк в JS, чтоб это решить
Установка Libre Office без GUI, для использования для генерации pdf из docx
[code] apt-get install libreoffice --no-install-recommends [/code]
Почему важно уметь работать с промисами, а не только с async/await
Опыт руководства командой молодых фронтенд разработчиков показал, что сейчас при обучении уделяется недостаточно внимание "классу" Promise, а делается ставка на синтаксический сахар async/await. Это не всегда себя оправдывает. Небольшое отступление: во многих источниках, даже на MDN, пишут "объект Promise", но с точки зрения теории ООП, это скорее класс. Но настоящих классов в JS не бывает (даже в новом стандарте это сахар для прототипов), поэтому слово класс я беру в кавычки
Linux узнать тип памяти
sudo lshw -class memory…
Git - удаление чувствительных данных (конфигов и т.п.) из всех веток репозитория
Бывает так, что случайно добавился конфиг или какой-то левый файл в гит, но заметил это только когда уже запушил. Вот решение проблемы. (постоянно забываю этот приём). Оригинал на английском
@ViewChild, ссылка на динамический блок под *ngIf
Иногда бывает необходимо получить через @ViewChild() ссылку на блок/компонент, который в шаблоне закрыт на *ngIf, т.е. по определённому условию появляется и исчезает. К счастью, сделать это достаточно просто.
Дополняем работу с деревьями в TypeORM
Бэкенд этого блога написан на фреймворке NestJS с использованием TypeORM. По началу я был почти в восторге от последней, особенно порадовала поддержка сохранения древовидных структур разными методами, в том числе с использованием любимых мной Nested Sets. Но, к сожалению, поддержка деревьев сделана неполно. При удалении не пересчитывались left и right, не реализованы ни перестановка элементов, ни перенос элементов из одной ветки в другую и т.п. Пришлось переписать модуль для работы с Nested Sets с php.
Мои впечатления от NestJS
Недавно я решил поиграться с фреймворками для NodeJS. После первого тестового проекта на express захотелось поискать что-то более серьёзное и удобное. Наткнулся на NestJS. Для теста написал на нём бэкенд для этого блога
Слоты в компонентах Angular
Предположим вам нужно разработать компонент какой-нибудь панели, которая повторяется много раз в дизайне. У неё есть заголовок, у неё есть футер, у неё есть контент. Как сделать это оптимальным образом
Рекурсивный ng-template
Иногда необходимо отобразить рекурсивную структуру данных: меню, дерево каталогов, структуру организации. В ангуляре для этого можно эффективно использовать ng-template. Статья написана на основе аглоязычной статьи Playing With Recursive Ng-Template References In Angular 6.1.10
Ng-template и передача вёрстки между компонентами
В этой статье я хочу рассказать об о возможности Angular, которая впечатляет лично меня больше всего - это тег ng-template, который фактически позволяет передавать кусок вёрстки вместе со всеми обработчиками событий из одного компонента в другой. Такие пакеты, как ng-bootstrap активно пользуются этой возможностью для реализации модальных окон, а сегодня мы рассмотрим, как этим воспользоваться самим
basename + Apache + русские имена файлов
Для извращенцев вроде меня, которые ещё используют апач периодически. basename врёт, когда в именах файла русские буквы
Динамическое формирование where для создания фильтров
Написать этот пост меня побудили вопросы на эту тему на форуме php.ru. Итак, нужно при задании фильтров каких-то объектов (например, товаров) динамически формировать where. Сейчас я покажу, как это делается в построителях запросов известных мне фреймворкоа. Возьмём простой случай, когда все поля для фильтрации в одной таблице, и не требуется join-ов.
Запрос на удаление дубликатов
Для удаления дубликатов записей можно использовать следующие команды:
Проверка, входит ли IP в заданную подсеть
Проверка, входит ли IP в заданную подсеть
Правильные окончания для количества
Ещё одна функция из разряда "маленький полезный пустячок". Задача - подставить правильное окончание для количества чего-нибудь. К примеру, 1 комментарий, 2 комментария и т.п.
MySQL, сортировка в произвольном порядке (in и сортировка)
Задача такая: выдать все строки таблицы с id, входящим во множество (13, 15, 14, 29, 11), и к тому же именно в таком порядке. Недавно обнаружил, что в MySQL есть оператор, решающий именно эту задачу