Как стать автором
Обновить
0
0
Mike Saushkin @mike0007

Fullstack developer.

Отправить сообщение

Dagger 2 – это элементарно (Часть 1)

Время на прочтение3 мин
Количество просмотров58K
Содержание

  1. Введение
  2. Что такое Dependency Injection, Пример зависимости
  3. Dagger 2 – введение
  4. Первое использование Dagger 2

Введение


Статья написана не продвинутым программистом для таких же, обычными и понятными словами
В статье используется пример кода на Kotlin. Версия dagger 2.17. Пример можно скачать в конце статьи.
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Apache Spark… Это база

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров9.6K

Apache Spark — это фреймворк для обработки и анализа данных, который позволяет выполнять операции на вычислительных кластерах и поддерживает несколько языков программирования: Scala, Java, Python, R и SQL.

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

Читать далее
Всего голосов 10: ↑4 и ↓60
Комментарии4

JSONB и hstore: использование специальных типов данных PostgreSQL для работы с полуструктурированными данными

Время на прочтение11 мин
Количество просмотров15K

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

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

Читать далее
Всего голосов 18: ↑14 и ↓4+12
Комментарии0

Работаем с Zigbee-устройствами через Zigbee2mqtt и Node-RED

Время на прочтение10 мин
Количество просмотров39K

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

Во второй статье «Слезаем с облачной иглы Aqara и подключаем устройства к контроллеру Wiren Board» я отказался от фирменного облака Aqara, после чего перевел все устройства на контроллер с оболочкой Sprut.hub. Конечно, я прикрутил Алису от Яндекса для сбора статистики и голосового управления.

Настало время следующего этапа — использовать открытые бесплатные решения Zigbee2mqtt и Node-RED. В качестве хаба я возьму контроллер Wiren Board 7, но вы можете использовать любые другие решения, например, отдельный ПК.

Читать далее
Всего голосов 19: ↑19 и ↓0+19
Комментарии14

Реализация двустороннего A* на двух потоках

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров5.3K

На Хабре можно найти немало статей, посвящённых оптимизациям поиска кратчайшего пути на графе. Я расскажу ещё про еще один подход. Речь пойдёт о распараллеливании алгоритма A* и исполнении его на двух потоках, а также о сложностях, с которыми я столкнулся при реализации, и их преодолении.

Читать далее
Всего голосов 56: ↑56 и ↓0+56
Комментарии35

PostgreSQL Antipatterns: Индиана Джонс и максимальное значение ключа, или В поисках «последних» записей

Время на прочтение2 мин
Количество просмотров10K

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

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

Читать далее
Всего голосов 18: ↑16 и ↓2+20
Комментарии42

Конструктор дашбордов своими руками – базовые идеи для реализации

Время на прочтение8 мин
Количество просмотров4.6K

Всем привет! На связи команда разработки модуля ESMP Metrica.

Зачем может понадобиться конструктор дашбордов?

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

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

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

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

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

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии4

Разрабатываем чат с помощью Nest, React и Postgres

Время на прочтение17 мин
Количество просмотров18K


Привет, друзья!


В данном туториале мы разработаем чат с использованием следующих технологий:


  • TypeScript — статический типизатор;
  • NestJS — сервер;
  • Socket.IO — библиотека для работы в веб-сокетами;
  • React — клиент;
  • TailwindCSS — библиотека для стилизации;
  • PostgreSQL — база данных (далее — БД);
  • PrismaORM;
  • Docker — платформа для разработки, доставки и запуска приложений в изолированной среде — контейнере.

Функционал чата будет таким:


  • фейковая регистрация пользователей:
    • хранение имен пользователей в памяти (объекте) на сервере;
    • хранение имен и идентификаторов пользователей в localStorage на клиенте;
  • регистрация подключений и отключений пользователей на сервере и передача этой информации подключенным клиентам;
  • запись, обновление и удаление сообщений из БД в реальном времени на сервере и передача этой информации клиентам.

Репозиторий с кодом проекта.


Если вам это интересно, прошу под кат.

Читать дальше →
Всего голосов 8: ↑6 и ↓2+5
Комментарии11

[В закладки] Как работает браузер

Время на прочтение17 мин
Количество просмотров31K

К старту курса по Fullstack-разработке на Python делимся лонгридом от ведущего программиста компании THG. Специалистам материал будет полезен в подготовке к собеседованиям, а новичкам поможет получить целостное представление о том, что происходит у браузера под капотом.

Читать далее
Всего голосов 16: ↑12 и ↓4+9
Комментарии1

«Ленивый сахар» PostgreSQL

Время на прочтение7 мин
Количество просмотров42K

SQL - декларативный язык - то есть вы описываете "что" хотите получить, а СУБД сама решает, "как" именно она будет это делать. Некоторые из них при этом позволяют им "подсказывать", как именно лучше выполнять запрос, но PostgreSQL - нет.

Тем не менее, "синтаксический сахар" некоторых языковых конструкций позволяет не только писать меньше кода (учите матчасть!), но и добиться, что ваша база будет делать часть вычислений "лениво", только при фактической необходимости.

Читать далее
Всего голосов 42: ↑42 и ↓0+42
Комментарии15

Авторизация в PostgreSQL. Часть 2. Безопасность на уровне строк

Время на прочтение10 мин
Количество просмотров8.6K
image
Приветствую вас в очередном разборе инструментов авторизации PostgreSQL. В первых двух разделах предыдущей статьи мы обсуждали, чем интересна авторизация в PostgreSQL. Вот содержание этой серии материалов:

  • Роли и привилегии;
  • Безопасность на уровне строк (мы сейчас здесь);
  • Производительность безопасности на уровне строк (coming soon!);

В первой статье мы рассмотрели, как роли и предоставленные привилегии влияют на действия (запросы SELECT, INSERT, UPDATE и DELETE) в отношении объектов БД (таблиц, представлений и функций). Та статья закончилась небольшим клиффхэнгером: если вы создадите многопользовательское приложение, используя только роли и привилегии для авторизации, то ваши пользователи смогут удалять данные друг друга, а может и вообще друг друга. Необходим другой механизм, позволяющий ограничить пользователей чтением и изменением только собственных данных — механизм безопасности на уровне строк (RLS).
Читать дальше →
Всего голосов 11: ↑10 и ↓1+12
Комментарии2

Как мы ускорили выполнение запросов PostgreSQL в 100 раз

Время на прочтение10 мин
Количество просмотров40K

Существует великое множество статей об оптимизации PostgreSQL — эта «кроличья нора» весьма глубока. Когда несколько лет назад я начал разрабатывать бэкэнд аналитического сервиса, у меня уже был опыт работы с другими СУБД, такими как MySQL и SQL Server. Тем не менее, раньше мне не приходилось так фокусироваться на производительности. В прошлых проектах, над которыми я работал, либо не было жестких требований к времени обработки (DS/ML), либо не требовалось обрабатывать много строк одновременно (обыкновенные веб-приложения). Однако в этот раз мои запросы:

состояли из 3-10 JOIN-ов по коррелирующим запросам;

уielded от 10 до 1,000,000 строк;

должны были выполняться в течение времени, определенного UX-ом;

не могли быть hinted — пока Cloud SQL, управляемый PostgreSQL в Google Cloud, не стал поддерживать pg_hint_plan в конце 2021 года;

запрещали прямой доступ к серверному процессу, чтобы, например, хакнуть некоторые perf — потому что PostgreSQL был managed.

Получение целого миллиона строк в одном API endpoint сигнализирует о проблеме в алгоритме или архитектуре. Конечно, все можно переписать и перепроектировать, но за это нужно платить.

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

Читать далее
Всего голосов 27: ↑24 и ↓3+24
Комментарии2

Как я «напрограммировал» себе скилл рисования диаграмм в скетч-стиле

Время на прочтение5 мин
Количество просмотров26K

По работе мне часто приходится рисовать разные схемы, диаграммы процессов и графики, в том числе и те, которые потом используются в качестве иллюстраций для сайта, статей и презентаций. Всё бы ничего, но есть у диаграмм и графиков, сделанных в популярных онлайн-сервисах наподобие draw.io или lucidcharts одна беда — они выглядят как-то слишком уныло и «олдскульно», в духе «90-х». Всю эту инфографику хотелось бы сделать более заметной, привлекательной и душевной (и, желательно, без привлечения дизайнера).

Так у меня возникла идея создания инструмента для отрисовки диаграмм и графиков в стиле «нарисовано от руки». Об истории создания сервиса и «подводных камнях» я расскажу в этой заметке.

Читать далее
Всего голосов 157: ↑157 и ↓0+157
Комментарии38

Пришло время избавиться от Angular и сэкономить миллиарды долларов

Время на прочтение6 мин
Количество просмотров59K
Я знаю, что эта статья вызовет поток гневных комментариев, но… так тому и быть. Кто-то должен наконец озвучить то, о чём уже некоторое время размышляют программисты, обладающие некоторым опытом.

Я занимаюсь программированием более 20 лет, работал в некоторых из самых приличных североамериканских компаний. Вот уже несколько лет я наблюдаю за тем, что происходит в сфере разработки интерфейсов. Ситуация здесь постоянно ухудшается. В частности, я говорю о «модных технологиях», о довольно крупных фрагментах JS- и CSS-кода, претендующих на остроумное исполнение, которые вроде как должны пользоваться неистовой популярностью у толп новичков. Теперь в эти толпы включают даже и опытных разработчиков, которым полагается что-то понимать в том, чем они пользуются.



Количество случаев практического применения фреймворков, выдающих подобный код, наподобие Angular, растёт как снежный ком. В результате разработчиков подхватила лавина, ввергнувшая их в настоящий «ад программного кода». При этом события развиваются по нарастающей. Сейчас нельзя заметить даже признаков того, что всё это безумие хотя бы выходит на какой-то постоянный уровень.

Каждый день мне на почту приходят вакансии. Компании всех размеров и мастей рыщут в поисках ОПЫТНЫХ Angular 4, 5, 6, 7, 8, 10, 12-разработчиков, которые как минимум 5 лет занимались разработкой и поддержкой того дурдома, который все называют «современнейшими пользовательскими интерфейсами».

Это — не нечто «современнейшее». Это — дурдом.

Несколько лет назад я был на собеседовании в EA (Electronic Arts). Там мне сказали, что компания избавляется от всех своих UI-фреймворков и возвращается к написанию кода на чистом JavaScript (речь идёт о модулях, или о том, что тот, кто работает с jQuery, назвал бы JS-плагинами). Я был удивлён и заинтригован.

Теперь о причинах подобного хода знают не только в EA, но и во всех остальных компаниях.
Читать дальше →
Всего голосов 125: ↑90 и ↓35+80
Комментарии196

Используем GPU для повышения производительности JavaScript

Время на прочтение7 мин
Количество просмотров16K
image

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

Но думали ли вы об использовании мощи GPU для повышения производительности веб-приложений?

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

Что такое GPU.js и почему его стоит использовать?


Если вкратце, GPU.js — это библиотека ускорения JavaScript, которую можно использовать для любых стандартных вычислений на GPU при работе с JavaScript. Она поддерживает браузеры, Node.js и TypeScript.

Кроме повышения производительности есть и множество других причин, по которым я рекомендую использовать GPU.js:

  • В основе GPU.js лежит JavaScript, что позволяет использовать синтаксис JavaScript.
  • Библиотека берёт на себя задачу автоматической транспиляции JavaScript на язык шейдеров и их компиляции.
  • Если в устройстве отсутствует GPU, она может «откатиться» к обычному движку JavaScript. То есть вы ничего не потеряете, работая с GPU.js.
  • GPU.js можно использовать и для параллельных вычислений. Кроме того, можно асинхронно выполнять множественные вычисления одновременно и на CPU, и на GPU.

Учитывая всё вышесказанное, я не вижу никаких причин не пользоваться GPU.js. Давайте узнаем, как его освоить.
Читать дальше →
Всего голосов 31: ↑29 и ↓2+34
Комментарии13

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

Время на прочтение13 мин
Количество просмотров35K

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

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

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

Читать далее
Всего голосов 48: ↑47 и ↓1+56
Комментарии20

DBA: когда почти закончился serial

Время на прочтение10 мин
Количество просмотров8.2K

"Шеф, всё пропало, у нас serial на мегатаблице кончился!" - а это значит, что либо вы его неаккуратно накрутили сами, либо у вас действительно данных столько, что разрядности integer-столбца уже не хватает для вашей большой и активной таблицы в PostgreSQL-базе.

Да и столбец этот не простой, а целый PRIMARY KEY, на который еще и ряд других немаленьких таблиц по FOREIGN KEY завязан. А еще и приложение останавливать совсем не хочется, ибо клиентам 24x7 обещано...

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

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии12

RBAC в Angular-приложениях

Время на прочтение13 мин
Количество просмотров5.4K

«Каждый уважающий себя блогер должен написать статью о RBAC. Каждый уважающий себя читатель должен написать в комментарии, что всё равно ничего не понял». С этой фразы началось мое знакомство с RBAC. И я имел прекрасную возможность узнать, что всё так и есть.

Но теперь я разобрался с тем, что RBAC такое, и готов рассказать вам. Более того, я создал на основе RBAC собственный продукт, позволяющий использовать RBAC-паттерн в Angular-приложениях. Но обо всём по порядку.

Читать далее
Всего голосов 7: ↑6 и ↓1+8
Комментарии6

Спецификация D-Bus. Часть 1

Время на прочтение31 мин
Количество просмотров12K

Данная статья открывает серию публикаций с переводом спецификации D-Bus (Версия 0.36 от 2020-04-21). Поскольку у D-Bus нет логотипа, то в качестве обложки была использована картинка автобуса с D-образным корпусом. Для краткого введения в тему D-Bus рекомендую прочитать перевод обзорной статью написанной авторами D-Bus: https://habr.com/ru/post/529966/

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

DBA: когда пасует VACUUM — чистим таблицу вручную

Время на прочтение7 мин
Количество просмотров27K
VACUUM может «зачистить» из таблицы в PostgreSQL только то, что никто не может увидеть — то есть нет ни одного активного запроса, стартовавшего раньше, чем эти записи были изменены.

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


Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии20
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Thurgau, Швейцария
Дата рождения
Зарегистрирован
Активность