Pull to refresh
4
0
Андрей @UncleAndy

User

Send message

Лучший regexp для Go. Benchmark c другими ЯП. Сравнение библиотек

Level of difficultyMedium
Reading time9 min
Views4.2K

"Не используйте регулярки - иначе вместо 1 проблемы, у вас их станет 2!" - как то так говорят знатоки... А что остается делать непослушным, желающим эффективный поиск по большому количеству шаблонов?

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

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

Читать далее
Total votes 11: ↑10 and ↓1+12
Comments8

Используем Hashicorp Vault для хранения секретов

Level of difficultyMedium
Reading time12 min
Views45K

В этой статье хотелось бы поделиться практикой использования хранилища секретов от компании Hashicorp, и называется оно Vault.

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

Читать далее
Total votes 10: ↑7 and ↓3+7
Comments12

Sphinx Search 2 -> 3: бенефиты и проблемы миграции

Reading time13 min
Views3.1K

Автобиографический трактат о кардинальном обновлении версии поисковой системы, увлекательном приготовлении оного и ожидаемо скучный эпилог о том, как всё хорошо получилось: у нас был Sphinx Search 2.0.9, мы вовремя спохватились (посмотрев на календарь) и повезли актуальную версию.

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

Проследовать в длиннопост
Total votes 12: ↑12 and ↓0+12
Comments6

Миграция с Docker на CRI-O в Kubernetes

Reading time4 min
Views7K

Для запуска контейнеров платформа Kubernetes использует Container runtime, т. е. движок для контейнеров. Долгое время основным движком считался Docker, но им не ограничивался — Kubernetes также поддерживает такие движки, как CRI-O и containerd. Однако начиная с версии Kubernetes 1.20, было объявлено, что в будущих версиях поддержка Docker (а если быть точнее, то dockershim) будет полностью прекращена. Начиная с версии Kubernetes 1.24, Docker был полностью удален из Kubernetes. Одной из причин такого решения было то, что в Docker отсутствует поддержка интерфейса CRI (Container Runtime Interface). В качестве замены можно перейти на CRI-O, который позиционирует себя как легковесную исполняемую среду для контейнеров в Kubernetes. В данной статье мы рассмотрим миграцию с движка Docker на CRI-O.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments2

Как протестировать код на Go с базой данных?

Level of difficultyMedium
Reading time10 min
Views6.4K

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

Читать далее
Total votes 7: ↑3 and ↓40
Comments4

В Go 1.21 существенно расширяется стандартная библиотека

Reading time4 min
Views15K
// теперь в Go так можно!
slices.Contains(s, v)

Год назад в блоге Каруны мы писали про дженерики в Go, и там упоминалось, что гошное сообщество разделилось на две части. Не всем это нововведение было нужно, особенно в простом продуктовом коде. И надо сказать, это до сих пор так, дженерики по-прежнему используют далеко не все проекты.


Однако для стандартной библиотеки Go это было по-настоящему царским подарком. Появились новые стандартные обобщенные функции, и, отстоявшись в экспериментальном репозитории golang.org/x/exp, теперь появятся в Go 1.21. Релиз буквально через месяц.


TLDR: появилось множество функций по работе со слайсами, мапами, а также новый логгер с (почти) всеми нужными фишечками.


Лично для меня знаковым событием стало появление возможности поиска элемента в слайсе и получение ключей мапы, потому что ну давно пора, 10 лет языку.


Но давайте обо всём по порядку.

Читать дальше →
Total votes 35: ↑33 and ↓2+39
Comments7

Паттерн Saga в микросервисной архитектуре

Level of difficultyMedium
Reading time9 min
Views39K


Автор статьи: Артем Михайлов

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

Но, разумеется, с такой архитектурой возникают и свои сложности, особенно касающиеся управления транзакциями. Когда у нас был монолит, одна транзакция могла обернуть в себя несколько операций и либо выполняться успешно, либо полностью откатываться при ошибке. В микросервисах такой простоты уже нет.
Читать дальше →
Total votes 20: ↑10 and ↓10+1
Comments17

Простые правила, которые помогают мне писать на Go без побочных эффектов

Level of difficultyEasy
Reading time7 min
Views11K

Роб Пайк сказал, что простое лучше, чем сложное. Я бы добавил: простое лучше, чем прикольное. Ведь Go спроектирован, чтобы писать программы в простом стиле. 

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

Читать далее
Total votes 25: ↑23 and ↓2+24
Comments11

Краткая и на 146% точная история языков программирования

Reading time4 min
Views83K


1800


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


1842


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

Читать дальше →
Total votes 154: ↑140 and ↓14+166
Comments154

Пример настройки Linux для высоконагруженных кластеров Kubernetes

Reading time5 min
Views11K

Довольно часто можно встретить примеры настройки (тюнинга) сетевого стека Linux для высоконагруженных систем, однако некоторые из этих гайдов сильно устарели и не используют рекомендованные подходы к конфигурированию системы. В этом обзоре мы рассмотрим подготовку Linux, для использования в качестве узла плоскости управления Kubernetes.

Читать далее
Total votes 9: ↑7 and ↓2+5
Comments1

Обработка ошибок в go в 2023 г

Level of difficultyMedium
Reading time6 min
Views15K

В go нет исключений. Разработчики, начинающие знакомиться с go, часто не знают как лучше всего обработать ошибку, как её отобразить в логах и что с ней делать дальше.

Рассмотрим все варианты, которые можно встретить в проектах на golang в 2023 году.

Читать далее
Total votes 15: ↑13 and ↓2+15
Comments24

Анонимная сеть с теоретически доказуемой моделью на базе увеличения энтропии

Level of difficultyHard
Reading time14 min
Views7.9K

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

Читать далее
Total votes 16: ↑15 and ↓1+18
Comments12

table-driven testing в Go

Level of difficultyEasy
Reading time4 min
Views3.9K

Привет Хабр!

Продолжая тему тестирования на Go, сегодня поговорим про table-driven тестирование.
У нас есть основная проблема: дублированный тестовый код.

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

Читать далее
Total votes 9: ↑7 and ↓2+6
Comments1

Как не ошибиться с конкурентностью в Go

Reading time12 min
Views35K

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


Мы берём Go, начинаем писать конкурентный код. Конечно, ожидаем, что легко сможем обуздать мощь каждого ядра нашего процессора. Так ли это?


Меня зовут Артемий. Этот пост — вольная расшифровка моего доклада с GopherCon Russia. Он появился как попытка дать толчок людям, которые хотят разобраться, как писать хороший, конкурентный код.



Видео с конференции GopherCon Russia

Total votes 62: ↑58 and ↓4+54
Comments16

CPU Load: когда начинать волноваться?

Reading time5 min
Views228K
Данная заметка является переводом статьи из блога компании Scout. В статье дается простое и наглядное объяснение такого понятия, как load average. Статья ориентирована на начинающих Linux-администраторов, но, возможно, будет полезна и более опытным админам. Заинтересовавшимся добро пожаловать под кат.
Читать дальше →
Total votes 152: ↑143 and ↓9+134
Comments87

Как обрабатывать ошибки в Golang – рассказываем на собственном примере

Level of difficultyMedium
Reading time6 min
Views9.7K

Ошибки это один из самых важных аспектов любого языка программирования. То, как обрабатываются ошибки, влияет на приложения многими способами. То, как определяются ошибки в Golang, немного отличается от таких языков как Java, Python, Javascript. В Go ошибки – это значения.

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

Читать далее
Total votes 7: ↑4 and ↓3+3
Comments6

Мои налоги как Испанского ИП(Autonomo). Открыл после одобрения ВНЖ Цифрового Кочевника

Level of difficultyMedium
Reading time3 min
Views20K

На следующий день после одобрения ВНЖ, я открыл испанское ИП (Autonomo), через специальный сервис, который меня зарегистрировал в налоговой и в соцстрахе (Seguridad social), если кому то надо поделюсь ссылочкой, не уверен что тут можно.

У меня как испанского ИП есть 3 обязательства по «налогам»:

1. НДС (VAT)

2. Подоходный налог (IRPF)

3. Соцстрах (Seguridad social)

Читать далее
Total votes 18: ↑12 and ↓6+8
Comments20

Какие документы нужны для подачи на ВИЗУ Цифрового кочевника в консульстве Испании в Москве

Level of difficultyEasy
Reading time2 min
Views6K

😏Во первых поделюсь своим мнением думаю что, ЕСЛИ ЕСТЬ ВОЗМОЖНОСТЬ ВЪЕХАТЬ ПО ШЕНГЕНУ И ПОДАТЬСЯ СРАЗУ НА ВНЖ (которое выдается на 3 года), лучше въезжать по шенгену и податься на внж на месте!) 

🌞Мне кажется в Испании на месте рассматривают более позитивно и быстрее такие визы, чем в консульстве, я делаю вывод так как имел опыт общения с Португальским консульством которое выдумывала свои собственные правила и собственные решения.

Я даже слышал истории что людям в Москве по каким-то визам отказывали, они приезжали на месте подаваться на ВНЖ, оказывалось что оно уже одобрено.

👉Вот такая отсебятина, страхи и слухи, а теперь по делу

В случае визы можно будет въехать и находится в Испании до 1 года, затем только запрашивать ВНЖ.

Документы:

Читать далее
Total votes 21: ↑12 and ↓9+8
Comments13

Обнаружение утечек памяти в Go через Pyroscope

Level of difficultyEasy
Reading time3 min
Views4.7K

Для обнаружения аномально высокой длительности выполнения отдельных функций (а также избыточного выделения или утечек памяти) используются инструменты профилирования над виртуальной машиной (например, JProfiler или Visual VM для JVM) или интегрированные в выполняемый код, например встроенный механизм при компиляции Go-приложений. Альтернативой может стать использование универсальных механизмов профилирования, которые интегрируются со средой выполнения и отправляют результаты профилирования на сервер, который может анализировать аномальное поведение и визуализировать выделение памяти и время выполнения отдельных функций (и построить flame graph по результатам анализа приложения во время выполнения). В этой статье мы рассмотрим использование Pyroscope совместно с Go для обнаружения утечек памяти.

Читать далее
Total votes 14: ↑13 and ↓1+16
Comments1

Кащеева смерть — защищаем свои пароли с помощью аппаратного хранилища ключей Android

Reading time3 min
Views5.6K

Несколько лет назад меня начала посещать мысль, что менеджеры паролей всё-таки «для честных людей». Как раз все встречные и поперечные стали заявлять, что у них теперь сквозное шифрование… И настали типа спокойные и безопасные времена (ну если не считать миллиардов, которые крадут с криптобирж каждый второй день, прослушки всех этих чатов со сквозным шифрованием, слива баз паролей, взлома LastPass…)

Короче, решил я замутить что-то своё, чтоб не хранить все свои доступы удобно (не)доступными в одном файле KeePass, а то ведь мало ли что. Просто так, из принципа. Биткойнов не держу.

Шли годы…

Читать далее
Total votes 13: ↑12 and ↓1+13
Comments3

Information

Rating
Does not participate
Location
Подгорица, Подгорица, Черногория
Date of birth
Registered
Activity

Specialization

Backend Developer, Database Developer
From 500,000 ₽
Golang
Docker
PostgreSQL
Git
Nginx
High-loaded systems
Kubernetes
Linux
MySQL
Redis