Как стать автором
Обновить
9
0
Игорь @itmind

Fullstack

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

Алгоритм поиска в глубину для процедурной генерации лабиринтов

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.3K

В этой статье я расскажу об алгоритме процедурной генерации лабиринтов методом поиска в глубину (Randomized depth-first search with recursive backtracking).

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

SQL HowTo: TOP-N на субинтервалах

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.6K

Периодически сталкиваюсь с однотипными задачами вида "показать TOP-N позиций на каждом из вложенных интервалов некоторого периода".

Это может быть "5 лучших по успеваемости студентов в каждом семестре за последний учебный год", или "помесячная динамика позиции 10 наиболее продающихся товаров", или, как у нас в сервисе визуализации PostgreSQL-планов explain.tensor.ru, "3 наиболее активных страны за каждый день":

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

Инструкция по установке Postgres для OLTP приложений и 1С. Часть 1 Базовая конфигурация

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

В Postgres достаточно подробная документация, и видимо поэтому , при инсталляции Postgres для 1С большинство параметров приходится выставлять самим. Параметров в Postgres много, а составить эффективную комбинацию не так просто. Все упрощается если рассмотреть профиль нагрузки, например, 1С это прежде всего профиль OLTP нагрузки – так устроены его метаданные (объекты).  Если сосредоточится на оптимизации профиля OLTP, понимание Postgres сразу упростится.

Установить Postgres для OLTP
Всего голосов 6: ↑5 и ↓1+5
Комментарии6

Здоровая конкуренция в GO. Главное не перехитрить самого себя

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

Несколько лет назад я прочитал статью о параллелизации в GO и ничего не понял – я тогда только начинал программировать на этом языке. Но размышления автора мне очень понравились – они подкреплялись бэнчмарками, что было довольно убедительно. Автор игрался c параметром GOMAXPROCS и показал, что увеличение этого параметра не всегда приводит к увеличению производительности. Под конец статьи он подобрал такое значение, которое будет максимально эффективным для его функции, на мое удивление, это значение оказалось равно единице! Т.е. его код работал максимально эффективно, если работал всего на одном ядре процессора! Однако, в одном из комментариев под той статьей я прочел, что все эти изыскания нелепы, поскольку та же самая функция из статьи запущенная всего в один поток оказывается эффективнее любой ее параллельной реализации.


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



Читать дальше →
Всего голосов 34: ↑32 и ↓2+40
Комментарии21

Делаем дашборд для логов используя Promtail Loki Grafana

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

Как используя связку Promtail + Loki + Grafana настроить сбор логов из текстового файла и сделать простой, но функциональный дашборд.

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

Почему вам стоит отказаться от использования timestamp в PostgreSQL

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

Не секрет, что работа с часовыми поясами — боль, и многие разработчики объяснимо стараются ее избегать. Тем более что в каждом языке программирования / СУБД работа с часовыми поясами реализована по-разному.

Среди тех, кто работает с PostgreSQL, есть очень распространенное заблуждение про типы данных timestamp (который также именуется timestamp without time zone) и timestamptz (или timestamp with time zone). Вкратце его можно сформулировать так:

Мне не нужен тип timestamp with time zone, т.к. у меня все находится в одном часовом поясе — и сервер, и клиенты.

В статье я постараюсь объяснить, почему даже в таком довольно простом сценарии можно запросто напороться на проблемы. А в более сложных (которые на самом деле чаще встречаются на практике, чем может показаться) баги при использовании timestamp практически гарантированы.

Читать далее
Всего голосов 81: ↑78 и ↓3+90
Комментарии136

Байт-код — это просто! Как сделать DI по-настоящему быстрым

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

Привет! Меня зовут Григорий Юрков, и я уже несколько лет работаю в инфраструктурной команде Яндекс Маркета. Два года назад мы начали разрабатывать свой легковесный DI-фреймворк Scout, который предоставляет выразительный Kotlin DSL. Он не генерирует код, а делает всю работу в рантайме.

Недавний переход с compile-time-библиотеки Dagger 2 на нашу привёл к замедлению старта приложения. В этой статье мы будем подробно рассматривать то, как применение байт-кода помогло сохранить скорость на том же уровне и спасти проект по миграции на Scout.

Ускоримся!
Всего голосов 25: ↑23 и ↓2+27
Комментарии41

Как использовать нативный платежный сервис SberPay в кроссплатформенном приложении на Flutter

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

Всем привет! Это Мурат Насиров и Артем Баркалов, мы Flutter-разработчики в Friflex. Разрабатываем высоконагруженные мобильные приложения для бизнеса и специализируемся на Flutter. В этой статье мы собрали большую часть кейсов, с которыми вы можете столкнуться при интеграции кнопки оплаты SberPay в приложении на Flutter. Это поможет вам понять механику работы СберПэй и шаги, которые необходимо сделать для передачи событий из натива во Flutter.

Использование SberPay SDK в продакшене требует наличия установленного приложения «Сбербанк Онлайн» (СБОЛ), иначе в процессе оплаты произойдет ошибка. Тестирование можно проводить на симуляторе iOS и на реальном устройстве. На эмуляторе Android тестирование не выйдет — при попытке оплаты возникает ошибка. Разработчики SDK используют аппаратные возможности смартфонов: геолокацию, bluetooth, Wi-Fi для снижения вероятности совершения мошеннических операций (условный антифрод).

Первым делом разработчик узнает от Сбербанка (по договору о подключении SberPay SDK в приложение), логин/пароль (credentials) и ссылку, которые указываются в файле build.gradle проекта (приложения) в части Android для получения библиотеки. Либо отдельно запрашивается aar-бандл. Для подключения SDK на iOS выдадут отдельную ссылку на репозиторий, хотя он публичный

Вместе с данными для получения SDK выдают тестовые данные для регистрации заказа в шлюзе Сбера, а также специальные apiKey и merchantLogin, которые используются для инициализации SberPay SDK в вашем приложении. Тестовые данные не подходят для проверки списания реальных денежных средств с реальной карты, они исключительно для тестирования.

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

Java Unsafe API для низкоуровневого манипулирования памятью

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

Привет, Хабр!

Иногда приходится сталкиваться с задачами, которые требуют выхода за рамки стандартных абстракций и безопасности Java. Мы ищем способы оптимизации, решения проблем производительности, или, возможно, просто хотим расширить свой кругозор в Java. Для таких случаев существует Java Unsafe API. Этот инструмент предоставляет нам низкоуровневый доступ к памяти и более широкие возможности для манипуляции данными.

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

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

Читать далее
Всего голосов 13: ↑9 и ↓4+7
Комментарии3

Измеряя sequences

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

Измерение sequences в сравнении с обычными коллекциями. Смотрим под капот и разбираемся, как работают sequences и за счет чего мы получаем выигрыш в производительности.

Много кода и теории...

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

Мультиплатформенность приложений в 2023

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

Где в 2023 году искать настоящую нативную кроссплатформенность?

Я прошел Golang → Rust → C# → Python → Java → Kotlin → Free Pascal, в поисках мультиплатфореммнного GUI, для десктопов и мобильных и кое что нашел.

Многие считают что web или pwa это и есть кроссплатформенность, многие считают, что это Flutter или electron, но что там на самом деле?

Узнать
Всего голосов 30: ↑26 и ↓4+27
Комментарии82
2

Информация

В рейтинге
3 851-й
Откуда
Хабаровск, Хабаровский край, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer, 1C Developer
Lead
От 300 000 ₽
Rust
Golang
Kotlin Multiplatform
DevOps
Development management
Optimization of business processes