Как стать автором
Обновить
81
19.1
Дмитрий Синявский @r3code

SRE

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

Я программист, и я тупой

Время на прочтение2 мин
Количество просмотров79K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Всего голосов 297: ↑283 и ↓14+324
Комментарии334

Наблюдаемость сетевой инфраструктуры Kubernetes. Часть вторая

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

Вторая часть статьи "Наблюдаемость сетевой инфраструктуры Kubernetes" про рассмотрение Observability инструментов.

В этой части мы сравним разворачиваемые решения в выбранном сетевом сценарии на основе собранных метрик приложения и кластера Kubernetes. Сделаем выводы о дальнейшем использовании инструментов в DevOps/K8S окружении.

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

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

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

Время на прочтение5 мин
Количество просмотров864K
Золотой Остап и его стулВопрос о столах поднимался несколько раз (раз, два).

Однако, на чем же мы сидим перед столом?

Стул — не менее важная часть рабочего места любого человека, много времени работающего за компьютером в течение дня.

Все мы работаем с компьютером и порой не замечаем, на чем же мы сидим.

Оказывается наши санитарные правила и нормы (СанПиН 2.2.2/2.4.1340-03) достаточно хорошо описывают удобный эргономичный стул для работы взрослых за компьютером!

А какой стул правильный?
Читать дальше →
Всего голосов 134: ↑125 и ↓9+116
Комментарии309

Бенчмаркинг Linkerd и Istio

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

image
Фото с сайта linkerd.io


Пару лет назад ребята из Kinvolk сравнили производительность Linkerd и Istio и узнали, что Linkerd значительно быстрее и меньше Istio везде, кроме одной области. Linkerd использовала больше процессорных ресурсов в плоскости данных (data plane). Недавно мы повторили эти эксперименты с последними версиями обеих service mesh. Как показывают результаты, Linkerd не только по-прежнему заметно быстрее Istio, но и использует на порядок меньше ресурсов памяти и процессора в плоскости данных (data plane). Причем это происходит, даже если число запросов в секунду в три с лишним раза больше, чем в бенчмарке Kinvolk. Вы легко можете это повторить.


А теперь подробности.

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

Автоматизируем выбор ревьюера с помощью GitLab CI и Danger JS

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

Всем здравствуйте! Я расскажу о том, как решал задачу ускорения проверки merge request’ов(MR)  в нашей команде. Почему вообще это понадобилось? Потому что разработчики ленивы экономят силы и обычно не стремятся брать новые MR на проверку, либо выбирают что попроще. Так что я решил сделать бота, который для каждого MR автоматически расставлял бы приоритеты и назначал проверяющего.

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

Напишите свою инфраструктуру Kubernetes — как код Go

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

cdk8s (Cloud Development Kit for Kubernetes) — это опенсорсный фреймворк (часть CNCF), при помощи которого можно определять приложения Kubernetes при помощи обычных языков программирования (вместо yaml). В предыдущих постах по этой теме я познакомил читателей с фреймворком и рассказал об использовании библиотеки cdk8s-plus для дальнейшего расширения базовых возможностей функций библиотеки cdk8s. В этом посте мы ещё больше расширим границы возможностей cdk8s.

Я продемонстрирую, как можно использовать Kubernetes Custom Resource Definitions при помощи cdk8s. Мы начнём с простого примера Nginx, а затем используем комбинацию CRD проекта Strimzi вместе с Go cdk8s для описания и развёртывания кластера Kafka на Kubernetes!
Читать дальше →
Всего голосов 22: ↑20 и ↓2+28
Комментарии4

Переход на микросервисную архитектуру

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


Вместо введения


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

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

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

Эта статья будет первой из многих. И ее цель в первую очередь – ввести в нашу проблематику в контексте перехода на микросервисную архитектуру и плавно подвести к следующим темам, подробно раскрывающим отдельные аспекты перехода.
Читать дальше →
Всего голосов 9: ↑6 и ↓3+9
Комментарии10

Что происходит, когда вводишь url, или как работает интернет

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

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

Хочу представить краткую выжимку о работе протоколов. А если тема окажется интересной, могу продолжить работать с ней более детально. Рассмотрим простейший пример: вы ввели некоторый url в адресную строку. Поехали.

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

Go как первый язык программирования для школьников

Время на прочтение5 мин
Количество просмотров38K
Перевод рассказа об опыте обучения программированию группы школьников, с использованием языка Go. Оригинальный текст в почтовой рассылке тут

(ориг. фото)
Читать дальше →
Всего голосов 27: ↑19 и ↓8+11
Комментарии62

Тюнинг производительности запросов в PostgreSQL

Время на прочтение8 мин
Количество просмотров32K
Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в PostgreSQL. Мои методы не является исчерпывающими, скорее учебником для тех, кто просто тащится от тюнинга.

Поиск медленных запросов


Первый очевидный способ начать тюнинг — это найти конкретные операторы, которые работают плохо.

pg_stats_statements


Модуль pg_stats_statements — отличное место для начала. Он просто отслеживает статистику выполнения операторов SQL и может быть простым способом поиска неэффективных запросов.

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

SELECT *
FROM
  pg_stat_statements
ORDER BY
  total_time DESC;

user_id dbid queryid query calls total_time
16384 16385 2948 SELECT address_1 FROM addresses a INNER JOIN people p ON a.person_id = p.id WHERE a.state = @state_abbrev; 39483 15224.670
16384 16385 924 SELECT person_id FROM people WHERE name = name; 26483 12225.670
16384 16385 395 SELECT _ FROM orders WHERE EXISTS (select _ from products where is_featured = true) 18583 224.67

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

Дебажим chaincode в Hyperledger Fabric

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

image

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


Про сам блокчейн, его особенности и различные реализации в интернете, и на Хабре в частности, можно найти тонну информации. Но чем глубже вопросы, тем меньше на них ответов. В официальной документации fabric очень мало информации про дебаг, а та которая есть заключается в том, что бы просто залогировать весь код и смотреть, что же пошло не так. Русскоязычные разработчики IBM ответили точно так же. Так что в данной статье будет освещена одна из наших бывших проблем, связанная с дебагом чейнкода в одном из проектов Hyperledger, а именно — Fabric (v0.6).


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

Техника безопасности при работе с PostgreSQL

Время на прочтение7 мин
Количество просмотров27K
Так получилось, что я начал работать с PostgreSQL три года назад и за это время умудрился методично собрать все возможные грабли, которые можно вообразить. И сказать по правде, если бы была возможность поделиться с собой трехлетней давности нынешним горьким опытом, моя жизнь была бы куда проще и нервные клетки целее. Именно поэтому я решил написать абсолютно субъективную статью со сводом правил, которых придерживаюсь при разработке на PostgreSQL. Возможно, кому-то эта статья поможет обойти собранные мной грабли (и наступить на другие, ха-ха!).


Читать дальше →
Всего голосов 75: ↑71 и ↓4+67
Комментарии43

Clean Decomposition

Время на прочтение4 мин
Количество просмотров5.3K
В данной статье я хочу рассмотреть подход к разбиению задач на подзадачи при использовании Clean Architecture.

С проблемой декомпозиции столкнулась команда мобильной разработки компании NullGravity и ниже то как мы ее решали и что в итоге получилось.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии7

7 штук, которые точно не надо делать при открытии кружка робототехники. Вот совсем не надо делать

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


Уже 2 года я развиваю робототехнику в России. Наверно громко сказано, однако недавно устроив вечер воспоминаний понял, что за это время под моим руководством было открыто 12 кружков по России. Сегодня решил написать об основных штуках, которые я делал в процессе открытия, но Вам этого делать точно не нужно. Так сказать, концентрированный опыт в 7 пунктах. Выделил только самый сок. Приятного чтения.
Читать дальше →
Всего голосов 104: ↑98 и ↓6+92
Комментарии151

Освобождаемся от обработки ошибок, устраняя ошибки

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


Go2 имеет целью уменьшить накладные расходы на обработку ошибок, но знаете ли вы, что лучше, чем улучшенный синтаксис для обработки ошибок?

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

Эта статья черпает вдохновение из главы «Define Errors Out of Existence”» книги « A philosophy of Software Design» Джона Оустерхаута. Я постараюсь применить его совет к Go.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии17

Собеседуем работодателя или как не уволиться в первый месяц

Время на прочтение2 мин
Количество просмотров74K
Первый рабочий день и… о боже, что я тут делаю?! Нет, ну серьезно кто вообще так пишет код?
Дружный коллектив? Мои коллеги вообще заметили, что я вышел на работу?

Древний SVN, шумный опен спейс и «типа SCRUM», и это лишь малая часть из тех «приятных» сюрпризов, которые вас могут поджидать в первый рабочий день.
Знакомая ситуация?
Читать дальше →
Всего голосов 155: ↑134 и ↓21+113
Комментарии176

Как работает реляционная БД

Время на прочтение51 мин
Количество просмотров546K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Всего голосов 232: ↑229 и ↓3+226
Комментарии134

Чтобы избавиться от боли в спине вам, возможно, придётся сидеть по-другому

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


Когда я сижу, у меня болит спина.

Это происходит уже последние 10 лет. И неважно, где я нахожусь – на работе, в ресторане, даже дома на диване. Моя поясница кричит: «Прекрати сидеть!»

Чтобы уменьшить боли в спине, на работу я купила себе коленный стул. Потом стол для работы стоя. Потом вернулась к обычному стулу, потому что мне стало больно стоять.

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

Эти средства немного помогли – сначала. Но боль так и не ушла. Поэтому несколько лет назад я решила принять это как должное: сидячее положение причиняет мне боль, и так будет всегда.
Всего голосов 72: ↑62 и ↓10+52
Комментарии231

Архитектура кода

Время на прочтение15 мин
Количество просмотров63K
В этой статье я хочу поделиться своим личным опытом, связанным с правильной организацией кода (архитектурой). Правильная архитектура существенно упрощает долгосрочную поддержку.
Это очень философская тема, поэтому я не могу предложить ничего более, чем мой субъективный анализ и опыт.

Проблемы, симптомы


Мой начальный опыт программиста был весьма безоблачным – я без лишних проблем клепал вебсайты-визитки. Писал код, как я это сейчас называю “в строчку” или “полотном”. На маленьких объемах и простых задачах все было хорошо.

Но я сменил работу, и пришлось разрабатывать один единственный вебсайт в течение 4-х лет. Естественно, сложность этого кода была несопоставима с визитками из моей прошлой работы. В какой-то момент проблемы просто посыпались на меня – количество регрессии зашкаливало. Было ощущение, что я просто хожу по кругу – пока чинил “здесь”, сломал что-то “там”. И поэтом это “здесь” и “там” банально менялось местами и круг повторялся.

У меня исчезла уверенность в том, что я контролирую ситуацию – при всем моем желании недопустить баги, они проскакивали. Все эти 4 года проект активно разрабатывался – мы улучшали уже существующий функционал, расширяли, достраивали его. Я видел и чувствовал, как удельная стоимость каждого нового рефакторинга/доработки растет – увеличивался общий объем кода, и соответственно увеличивались затраты на любую его правку. Банально, я вышел на порог, через который уже не мог переступить, продолжая писать код “в строчку”, без использования архитектуры. Но в тот момент, я этого еще не понимал.
Читать дальше →
Всего голосов 44: ↑41 и ↓3+38
Комментарии25

Современный CSS для динозавров

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

— Двигать пиксели в CSS и так было трудно! А теперь мне говорят, насколько круто использовать несемантические названия классов, встроенные стили в HTML и даже писать стили CSS на JavaScript!
[Вставь тут гифку из «Гриффинов»] — Ха!
Иллюстрации из Dinosaur Comics Райана Норта


Как ни странно, CSS считается одновременно одним из самых простых и одним из самых сложных языков для веб-разработчика. Определённо он достаточно прост в начале — вы определяете свойства стиля, значения для конкретных элементов и… это практически всё, что нужно знать! Однако в больших проектах ситуация становится довольно запутанной и сложной, чтобы организовать CSS каким-то осмысленным образом. Изменение любой строчки CSS для стилизации элемента на одной странице часто ведёт к непредвиденным последствиям для элементов на других страницах.

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

Цель этой статьи — показать исторический контекст, как развивались техники и инструменты CSS до их нынешнего состояния в 2018 году. Поняв эту историю будет легче понять каждый подход и как с выгодой его использовать. Итак, начнём!
Читать дальше →
Всего голосов 43: ↑39 и ↓4+35
Комментарии41
1
23 ...

Информация

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

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

Backend Developer, Site Reliability Engineer
Senior
SRE
Monitoring
GitLab
Golang
PostgreSQL
Redis