Как стать автором
Обновить
4
0.6
Виталий @olivera507224

Разработчик серверного ПО

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

Применения Continuation-passing style в Go

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

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

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

Уровни изолированности транзакций для самых маленьких

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


Сегодня хотел бы довести крайне интересный, но часто покрытый тайнами для обычных смертных программистов раздел базы данных (БД) — уровни изолированности транзакций. Как показывает практика, многие люди, связанные с IT, в частности с работой с БД, слабо понимают зачем нужны эти уровни и как их можно использовать себе во благо.

Немного теории


Сами транзакции особых объяснений не требуют, транзакция — это N (N≥1) запросов к БД, которые выполнятся успешно все вместе или не выполнятся вовсе. Изолированность же транзакции показывает то, насколько сильно влияют друг на друга параллельно выполняющиеся транзакции.
Выбирая уровень транзакции, мы пытаемся прийти к консенсусу в выборе между высокой согласованностью данных между транзакциями и скоростью выполнения этих самых транзакций.
Стоит отметить, что самую высокую скорость выполнения и самую низкую согласованность имеет уровень read uncommitted. Самую низкую скорость выполнения и самую высокую согласованность — serializable.
Читать дальше →
Всего голосов 42: ↑36 и ↓6+30
Комментарии17

Go: жарим общие данные. Атомно, быстро и без мьютексов

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


Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику.

Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
Пожарим омлет по атомному?
Всего голосов 41: ↑40 и ↓1+52
Комментарии29

Записки bash-скриптера. Листок первый. Сокращённый if

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

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

Я всегда любил bash-скриптинг, и сейчас пишу довольно много кода на bash. Периодически наталкиваюсь на неочевидные моменты; решил, что настала пора поделиться опытом с уважаемым хабрасообществом.

Кому интересно разобраться, что же может быть не так с bash/zsh на этот раз -- добро пожаловать под кат.

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

Насколько быстр Javascript? Симулируем 20 миллионов частиц

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

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее
Всего голосов 109: ↑108 и ↓1+133
Комментарии34

Ruby Telegram Mini App

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

Разрабатываем telegram mini-app используя Ruby on Rails

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

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

Циклические массивы

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

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

Например, с датчика непрерывно поступают данные с частотой дискретизации F=1000 Гц, которые сохраняются в массиве. Однако, для анализа данных используется конечное временное окно наблюдения, например, T=10 секунд. Таким образом, при поступлении нового отсчета данных необходимы лишь последние N=T*F=10 000 значений.

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

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

Пять способов пагинации в Postgres, от базовых до диковинных

Время на прочтение13 мин
Количество просмотров83K
Вас может удивить тот факт, что пагинация, распространенная, как таковая, в веб приложениях, с легкостью может быть реализована нерационально. В этой статье мы испробуем различные способы пагинации на стороне сервера и обсудим их удобство при использовании в PostgreSQL. Статья поможет Вам понять, какая техника более уместна в Вашей ситуации, в том числе некоторые Вы, возможно, не видели прежде, а именно те, которые полагаются на физическую кластеризацию и сборщика статистики базы данных.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии33

Анти-паттерны в Go Web Applications

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

В какой-то момент моей карьеры меня перестало радовать ПО которое я разрабатывал.

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

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

Оптимизация Go: как повысить скорость и эффективность кода

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

Привет, Хабр! Меня зовут Макс, я Go-разработчик в компании SimbirSoft. Язык Go (Golang) стремительно набирает популярность, он всё чаще внедряется в существующие программные решения, а также встречается в стеке новых проектов. Высокая производительность и скорость работы – его главные преимущества, поэтому для реализации бизнес-задач он подходит как нельзя кстати. Go легко поддерживается и отлично годится для создания MVP, из-за чего востребованность в нём растёт.

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

Мы начинаем!

Go ⏩
Всего голосов 11: ↑10 и ↓1+9
Комментарии8

Как заставить Docker работать в России и Беларуси (самое простое и быстрое решение)

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

Вчера, 30 мая 2024 года, Docker без предупреждений заблокировал доступ к DockerHub для РФ, что для проектов стоящих в продакшене на Docker стало серьёзным форс-мажором и проблемой, сборка проекта так, как это было раньше, стала невозможной. Статья - простой доступный гайд как эту проблему решить

Узнать решение
Всего голосов 37: ↑30 и ↓7+25
Комментарии82

Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд

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

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

Я немного опоздал, соревнования проводились в январе. И на Java. Меня не особо интересует Java, зато давно интересует оптимизация кода на Go.

Этот челлендж был очень прост: обработать текстовый файл названий метеорологических станций и температур, и для каждой станции вывести минимальное, среднее и максимальное значение. Чтобы упростить задачу, было ещё несколько ограничений, однако я проигнорировал те, что относятся только к Java.

Читать далее
Всего голосов 50: ↑48 и ↓2+62
Комментарии20

Искусство типизации: TypeScript Utility Types

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

Что вы чувствуете от познания нового? За себя скажу, что в такие моменты просветления меня переполняет неподдельная детская радость от свершившегося открытия. Жаль, что этих моментов становится всё меньше. К чему я это? Когда мне в голову мне пришла мысль о написании статьи на эту тему, я сразу вспомнил то ощущение прозрения, которое испытал в момент открытия Utility Types. Всё сразу встало на свои места, и я понял какого кусочка пазла мне всё это время не хватало. Именно о нём я расскажу далее.

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

Python и чистая архитектура…

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

Всем привет! Сегодня я хочу поделиться своими опытом разработки на различных языках программирования и размышлениями касаемо проектирования серверных приложений. Речь пойдет про много обсуждаемую в последнее время чистую архитектуру в рамках языка python. Казалось бы, по заветам Роберта Мартина мы не должны зависеть от инструмента(зачастую под этим понимают фреймворк или библиотеку), однако это порождает множество ошибок и просто небольших неточностей в проектировании сервисов и даже выборе языка программирования.

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

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

Typescript: лучшие практики

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

Привет👋 В последние годы среди фронтенд разработчиков Typescript используется практически везде по умолчанию, начиная небольшими пет-проектами и заканчивая огромнейшими веб-приложениями. Однако, до сих пор на некоторых проектах можно встретить кучу any и Function. Давайте разберемся используете ли вы этот невероятно мощный инструмент правильно?

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

Дизайн-система Gravity UI: как легко построить свой интерфейс

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

Всем привет, я Алексей Сизиков, руководитель отдела User Experience в Yandex Cloud. В этой статье я хочу поделиться новостью: мы выпустили нашу дизайн-систему и библиотеку компонентов Gravity UI в опенсорс. 

Под катом — рассказ, зачем мы сделали Gravity UI, как его используем, в чём особенности и преимущества нашего подхода и как мы планируем развивать его дальше. А ещё — как настроить разные цветовые схемы в своих проектах и почему у нас четыре темы вместо двух стандартных.

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

Продвинутый TypeScript

Время на прочтение12 мин
Количество просмотров24K
Фридайвинг — ныряние на глубину без акваланга. Ныряльщик ощущает на себе закон Архимеда: он вытесняет некоторый объём воды, который выталкивает его обратно. Поэтому первые несколько метров даются тяжелее всего, но потом сила давления толщи воды над тобой начинает помогать двигаться глубже. Этот процесс напоминает изучение и погружение в системы типов TypeScript — по мере погружения становится немного легче. Но надо не забыть вовремя вынырнуть.


Фотография с сайта One Ocean One Breath.

Михаил Башуров (saitonakamura) — Senior Frontend Engineer в компании WiseBits, фанат TypeScript и фридайвер-любитель. Аналогии изучения TypeScript и ныряния на глубину не случайны. Михаил расскажет, что такое discriminated unions, как использовать вывод типов, зачем нужна номинальная совместимость и брендирование. Задержите дыхание и погружайтесь.
Всего голосов 26: ↑23 и ↓3+27
Комментарии3

Основные ресурсы нейронных сетей для начинающих и энтузиастов

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

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

Ознакомиться
Всего голосов 21: ↑21 и ↓0+21
Комментарии4

Реализация Graceful Shutdown в Go

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

Изящное завершение работы (Graceful Shutdown) важно для любого длительного процесса, особенно для того, который обрабатывает состояние. Например, что если вы хотите завершить работу базы данных, поддерживающей ваше приложение, а процесс db не сбрасывает текущее состояние на диск, или что если вы хотите завершить работу веб-сервера с тысячами соединений, но не дожидаетесь окончания запросов. Изящное завершение работы не только положительно сказывается на пользовательском опыте, но и облегчает внутренние операции, что приводит к более счастливым инженерам и менее напряженным SRE.

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

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

Магия степеней двойки, или Запуск кучи docker контейнеров

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

Праздник «день программиста» отмечается в 256-й день года, а это 2⁸, т.е. два в степени восемь. Это не просто так — на степенях двойки многое завязано в компьютерах и программировании, они повсюду. Настолько повсюду, что иногда даже слишком.

Благодаря празднику я вспомнил, что давно хотел написать эту статью, и поделиться несколькими техническими байками, где числа, являющиеся степенями двойки, вставляли «палки в колёса» мне или моим коллегам.

Читать байки
Всего голосов 12: ↑11 и ↓1+13
Комментарии9
1

Информация

В рейтинге
1 705-й
Откуда
Железнодорожный (Московск.), Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

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

Backend Developer, Fullstack Developer
Senior
SQL
PostgreSQL
Python
Linux
Docker
.NET Core
Golang
Tarantool
ClickHouse
Fastapi