Как стать автором
Обновить
1
0

Пользователь

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

Server Side Rendering на Go

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

Жизнь – это вечная спираль, где всё идёт по кругу, но с каждым витком становится лучше. Ещё 20 лет назад я писал веб-приложения на Perl + Template Toolkit 2, генерируя HTML на стороне сервера. Время шло, и веб-разработка разделилась на две половины: фронтенд и бэкенд, а между ними API. Со временем я переключился с Perl на Go для бэкенда и AngularJS, а потом и Vue для фронтенда. В таком стеке я создал несколько проектов, включая HighLoad.Fun. Писать API и генерировать клиентскую библиотеку на TypeScript было удобно, а Vue-приложение деплоилось как SPA. Всё вроде бы шло хорошо... до тех пор, пока не пришла необходимость внедрить SSR для SEO. Тут начались проблемы: нужно было поднять NodeJS сервер для выполнения SSR, который должен ходить на Go сервер за данными, думать о том, где в данный момент выполняется код, на сервере или в браузере и писать и писать бессмысленный код перекладывающий данные.

Тогда я встал перед выбором: либо отказаться от Go на бэкенде, либо отказаться от Vue на фронтенде. Для меня выбор был очевиден: я остался с Go.

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

Мне нужен был генератор, который бы:

* Превращал Vue-подобные шаблоны в Go-код с типизированными переменными, позволяя ловить ошибки на этапе компиляции.

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

* Собирал и подключал только нужные JS и CSS файлы из лежащих рядом с шаблонами TypeScript и SCSS файлов.

* Поддерживал переменные, выражения, условия и циклы в шаблонах, как во Vue.

* Объединял шаблоны из подпапок по принципу Vue-тега <router-view/>.

* Автоматически маршрутизировал страницы, поддерживая динамические параметры.

И главное – всё это должно работать в автоматическом режиме: изменения в исходном коде автоматически пересобираются и перезапускаются без лишних усилий.

После ряда экспериментов и нескольких ночей мне это кажется удалось. Под катом – подробный туториал, как разрабатывать быстрые и удобные сайты с помощью GoSSR.

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

Усиление PostgreSQL с помощью PL/Python

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

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

Сегодня мы прокачаем PostgreSQL, добавив в него Python. А именно — PL/Python. Это расширение позволяет писать функции на Python прямо внутри базы данных. Лично для меня это как объединение двух лучших миров: любимого PostgreSQL и могучего Python.

PL/Python — это про то, когда стандартного SQL мало. Когда надо сделать что-то действительно интересное: сложные расчеты, массивы данных, или интеграция с аналитикой прямо в базе. А самое крутое — можно тянуть любые Python-библиотеки.

Для начала нужно просто установить расширение в PostgreSQL.

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

Транзакции в БД на Go с использованием многослойной архитектуры

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

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

Однажды, я столкнулся с инцидентом на проде и обратился за помощью к самому опытному инженеру. Он пришел на помощь и с легкостью изменил значение в БД с помощью... ручного обновления. 🤯 Проблема заключалась в том, что набор SQL-обновлений не был выполнен внутри транзакции.

Работа в новой компании — это всегда увлекательно. Я осознал, что даже если какой-то аспект кажется простым, например, SQL-транзакции, его легко упустить из виду.

SQL кажется чем-то, что мы все хорошо знаем, и мало чем может удивить. (Ему уже 50 лет!) Возможно, пришло время пересмотреть подходы, так как мы уже прошли фазу хайпа по поводу NoSQL, и снова возвращаемся к “используйте просто Postgres”, а иногда и к “SQLite тут за глаза”.

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

Основной принцип многослойной архитектуры заключается в разделении критически важных частей кода (логики) от деталей реализации (например, SQL-запросов). Одним из способов достижения такого разделения является паттерн «Репозиторий». Однако, наиболее сложным аспектом такой архитектуры является обработка транзакций.

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

Эффективные трассировки в Go

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

Пакет runtime/trace содержит мощный инструмент для понимания программ Go и устранения неполадок. Функциональность внутри позволяет создавать трассировку исполнения каждой горутины за определенный период времени. С помощью go tool trace command (или превосходного инструмента gotraceui с открытым исходным кодом) можно визуализировать и исследовать данные в этих трассировках.

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

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

Сериализация данных в Golang с Protobuf

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

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

Protobuf, или Protocol Buffers, это бинарный формат сериализации, разработанный в Google для эффективного обмена данными между сервисами. Это как JSON, только компактнее, быстрее и типизированнее. Если JSON был вашим первым крашем в мире сериализации, то Protobuf – это тот, с кем вы хотите серьёзных отношений.

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

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

19 способов сделать сокет-сервер на Python. Эволюционный подход. Часть 5. Асинхронное программирование

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

Выше мы рассмотрели, как появились генераторы, как они работают и как их можно использовать в роли сопрограмм. Еще раньше было разобрано, как реализовать асинхронность на колбеках с помощью модуля selectors. Теперь соединим оба материала и реализуем настоящую асинхронность — на сопрограммах (coroutines).

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

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

Пишем gRPC сервис на Go — сервис авторизации

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

Пишем gRPC сервис на Go — сервис авторизации


В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер.


Видео-версия этого гайда с более подробными объяснениями

Исходный код проекта: https://github.com/GolangLessons/sso


Итого, наш план:


  • Напишем простой, но полноценный gRPC-сервис
  • Разберемся с базовыми принципами работы авторизации — чтобы не было скучно
  • Настроим автоматический деплой в прод — потому что руками деплоить лень
  • Подружим его с уже готовым сервисом URL Shortener — чтобы был практический смысл
  • Напишем полноценные функциональные тесты

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


Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал.

Читать дальше →
Всего голосов 62: ↑60 и ↓2+66
Комментарии44

Как в git заменить master на другую ветку без использования push --force (перенос стейта одной ветки на другую)

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

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

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

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

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

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

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

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

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

Итак, что такое pg_trgm? Этот модуль PostgreSQL предоставляет набор функций и операторов, которые позволяют работать с трехграммами (триграммами) - это последовательности из трех символов. Для понимания, давайте взглянем на пример...

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

10 лучших практик логирования в Python

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

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

В этой статье мы рассмотрим лучшие практики логирования в Python. Следуя им, вы сможете обеспечить информативность, практичность и масштабируемость генерируемых логов. Давайте начнём!

Читать далее
Всего голосов 50: ↑49 и ↓1+70
Комментарии19

Пакет context в Go: взгляд профессионала

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

А вы часто читаете реализацию стандартной библиотеки своего любимого языка?..

Меня зовут Константин Соколов, и мы с Сергеем Мачульскисом, моим коллегой из бэкенд-разработки в Positive Technologies, хотим с вами поделиться вдохновением. Давайте вместе посмотрим на пакет context с последними обновлениями. На наш взгляд, он идеально выражает философию языка Go! Образцовый интерфейс, постоянное развитие пакета и использование самых распространенных приемов Go — все это говорит о том, что наш материал будет полезен не только новичкам, но и знатокам.

Под кат
Всего голосов 34: ↑33 и ↓1+35
Комментарии8

Книги для Golang-разработчиков: подборка для программистов с опытом

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

Привет, Хабр! Относительно недавно мы уже публиковали подборку книг по Go для начинающих разработчиков. Теперь пришёл черёд изданий для специалистов с опытом. В этой статье рассказываем о книгах для программистов, у которых уже есть опыт работы с Golang и кто готов двигаться дальше. Книги актуальные, написаны как на русском, так и на английском языке. Как всегда, просьба: если у вас есть собственные предпочтения, расскажите о них в комментариях.

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

Поиск по регулярным выражениям может быть простым и быстрым

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

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

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

Как оказалось, с тех пор мало что поменялось, так что статья не потеряла своей актуальности.

Обо всех ошибках и опечатках большая просьба сообщать, чтобы я мог их поправить.

Заблудиться в тёмном лесу
Всего голосов 25: ↑24 и ↓1+32
Комментарии6

Проксируем OpenVPN с помощью Cloak

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

Cloak — это подключаемый транспорт, который расширяет возможности традиционных прокси-инструментов, таких как OpenVPN, Shadowsocks и Tor для обхода сложной цензуры и дискриминации данных.

Руководство будет включать:

1. Предисловие

2. Описание работы Cloak

3. Настройку сервера Cloak

4. Настройку клиента Cloak на OpenWRT

5. Настройку клиента OpenVPN

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

Книги, которые можно рекомендовать любому программисту: от «Карьеры программиста» до «Математических алгоритмов»

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

Привет, Хабр! Сегодня хотим представить подборку книг, которые было бы полезно прочитать любому программисту. Многие из них, вероятно, вами уже прочитаны, но если нет, рекомендуем ознакомиться. В подборке 7 книг — конечно, это субъективный выбор. Но если у вас есть любимые книги по разработке, которые вы можете рекомендовать, расскажите о них в комментариях, пожалуйста.

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

Домашка на лето: что почитать разработчику

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

У нашего разработчика Михаила Ефремова есть хобби — читать книги и делать подборки особенно полезных. В этой статье он расскажет, как собрал книжную полку с лучшими, на его взгляд, книгами для разработчиков и поделится мнением о них. Миша подобрал книги по алгоритмам, архитектуре, базам данных, Linux/UNIX, Golang, Python.

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

Golang — архитектурный линтер

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

Для того чтобы повысить качество приложения, написанного на языке go, можно использовать разные линтеры. Один из таких линтеров — архитектурный.

В данной статье расскажу про свой бесплатный, open-source, линтер под MIT лицензией и чем он может быть полезен.

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

Превращаем любой фреймворк в FastAPI. На прицеле Flask

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

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

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

В этой же статье я хочу поделиться некоторым опытом создания своего инструмента для сериализации данных на основе pydantic. После прочтения этой статьи вы сможете превратить практически любой Python фреймворк в идейное подобие FastAPI. Причем речь идет не только об HTTP фреймворках. Никто не запрещает вам сделать, например, фреймворк для создания CLI, или telegram-ботов, или того, чего ваша душа пожелает.

Интересно? Тогда добро пожаловать!

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

Механические клавиатуры 2023. Продолжение

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

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

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

Обход блокировок WireGuard в Египте

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

В 2021 году VPN протокол WireGuard стал настолько популярен в Египте, что удостоился чести пополнить список заблокированных, несказанно “обрадовав” не только клиентов Cloudflare Warp+, Mullvad Wireguard и других коммерческих VPN-провайдеров, но и некоторых пользователей корпоративных VPN. Предварительные исследования показали, что по всей видимости DPI нацелен на WireGuard Handshake Initiate пакеты, которые имеют фиксированный размер (148 байт) и узнаваемую структуру (первые четыре байта UDP пакета [0x01, 0x00, 0x00, 0x00]). Мы постараемся разобраться с особенностями работы DPI по блокировке WireGuard и попробуем ее обойти. Кого заинтересовал - добро пожаловать под кат.

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность