DevFM – Telegram
DevFM
2.35K subscribers
80 photos
5 videos
492 links
О разработке: технологии, инструменты, system design, процессы, команды

Для связи @sa_bul
Download Telegram
Пятничное развлекательное

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

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

#fun
🔥5🌭421
Асинхронность в браузере

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

Для людей, связанных с фронтендом, статья также будет полезна. Автор собирает многие знания воедино, рассказывает о некоторых экспериментальных функциях, а также даёт множество ссылок для более глубокого изучения. Нам показались интересными: Оптимизация производительности фронтенда и Визуализация промисов и Async/Await
👍10🌭32
Работа с json в PostgreSQL

Цикл супер-полезных практических заметок о работе с json в PostgreSQL.

Затрагиваются вопросы:
— чем json отличается от jsonb
— как парсить json. В том числе: извлечение поля из json-объекта, получение тип данных, проверка существования поля или значения
— как разложить json по колонкам
— как конвертировать в json. В том числе: перевод строки в json, создание json-объекта из наборов ключей и значений
— как индексировать json. В том числе: всю колонку или отдельно взятое поле
— как сделать красивый вывод json
— как изменять json. В том числе: конкатенация двух json, удаление определенных полей или null-значений

Для более глубокого изучения того или иного вопроса автор даёт ссылки на документацию, другие статьи и SO.

#database
👍8🔥421🌭1
Вариантность типов

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

Простой пример: тип Natural является подтипом Integer и Positive. И все трое одновременно являются подтипами Real. А тип Prime является подтипом всех вышеперечисленных.

Есть у нас функция, которая в качестве параметра принимает на вход определённый тип данных. А можем ли мы передать в качестве параметра подтип или надтип исходного типа данных? За это как раз отвечает вариантность типов.

Контравариантность, ковариантность, инвариантность — в статье все эти замечательные термины рассматриваются на конкретных понятных примерах.

Также прочтение статьи позволит более глубокого понять принцип подстановки Барбары Лисков (LSP), который фигурирует в известной аббревиатуре soLid.

В конце рассматривается реализация вариантности в различных языках программирования –TypeScript, C#, Java, C++.

А на тему вариантности в python у Диджи было замечательное видео.

#procode
🔥7👍521🌭1
Пятничное развлекательное

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

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

Не только развлекательное, но и полезное: у нас в канале есть тег #резюме о подготовке к собеседованиям с личным опытом.

Было что-то запоминающееся в вашей практике?
👍8😁4🌭211
VPN — не панацея

Цикл удачных статей на горячую тему обхода блокировок в сети.

В первой статье автор рассказывает о том, как можно выявлять попытки обхода блокировок. Если у вас настроен VPN или прокси, не стоит расслабляться – их можно выявить и заблокировать. В статье автор приводит подобные примеры из реальной жизни.

Вторая статья рассказывает, что всё не так уж и плохо. Всё-таки есть технологии обхода блокировок, которые пока не детектируются (хотя наверняка в эту сторону идут активные исследования). Автор рассматривает такие технологии как: V2Ray, XRay, XTLS, Hysteria, Cloak. Статья больше теоретическая, но неплохо так расширяет кругозор.

А кому хочется потрогать, что было описано ранее и иметь запасной вариант выхода в мир, есть еще две чисто практические статьи: Обход блокировок: настройка сервера XRay для Shadowsocks-2022 и VLESS с XTLS, Websockets и фейковым веб-сайтом и Программы-клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing-Box, и другие.

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

#security
👍82😁2🌭2
Три года DevFM

Мы создали этот канал 25 апреля 2020 года. Начинался он как инициатива двух друзей, которые делились контентом "для своих". Когда в десятый раз с кем-то поделился одним и тем же интересным материалом, возникло желание такой материал систематизировать и опубликовать. Первые посты не теряют актуальности:

– Как правильно постоянно ботать
Паттерны проектирования
– Первое пятничное развлекательное – история xkcd
– Качественные публичные выступления для студентов
– О важности предсказуемости
– Не строй велосипед, переиспользуй
Как изучать предметную область перед стартом проекта

А год назад мы основательно взялись за канал и с тех пор не сбавляем темп. Также иногда пишем видео для ютуба, например, Идеальный скрипт на bash и статьи для Пикабу, которые выходят за формат поста тут. Недавно мы вышли на Хабр со статьёй по реверсу, и набрали почти 50 плюсов и две сотни закладок.

В закреплённом посте у нас есть навигация по каналу с продуманной системой тегов.

В этом году мы планируем ещё больше и ещё круче. А вам спасибо за интерес, спасибо, что читаете. Хотелось бы узнать подробнее о вас. Чем вы занимаетесь и как долго? Два небольших опроса в следующих постах

#ToTheMoon
🔥16👍94🌭2
DevFM
ACID в PostgreSQL Видео про ACID в БД от наших друзей. В двадцатиминутном видео показывается: — atomicity на примере транзакции в виде небольших SQL-запросов в postgres через docker, всё как мы любим — consistency на примере демонстрации влияния незавершённой…
Ребята из SQL-чатика проводят онлайн-встречу 12 мая в 19.00. Темы:
– о работе
– как войти в айти
– софт скиллы
– технические вопросы
– о том, что спрашивают на собеседованиях

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

Ссылка в зум на встречу. Любые вопросы можно уточнить в чате.
🔥31👍1🌭1
Domain Driven Design

Domain Driven Design (DDD) – на первый взгляд, что-то такое сложное. Да и на второй тоже сложное. Не очень понятно, с чего начинать.

Начать можно со статьи Domain-driven design: рецепт для прагматика.

Автор на примерах проходится по основным концептам DDD:
– ubiquitous language – всё обсуждение происходит в терминах единого языка
– domain model – некий набор сущностей и сценариев, связанных с предметной областью
– bounded context – некие рамочки, в которых существует доменная модель и единый язык

Основная идея DDD – борьба со сложностью бизнес-процессов, их автоматизации и реализации в коде. Domain – предметная область и от неё нужно отталкиваться при проектировании и разработке.
Бороться со сложностью – звучит многообещающе, но "прежде чем начать бороться со сложностью с помощью Domain-Driven Design, нужно научиться бороться со сложностью самого Domain-Driven Design".

Не факт, что будете применять, но знать что это за зверь – стоит. К тому же, можно перенять некоторые полезные практики, например, ubiquitous languge – единый язык общения. На эту тему написан занимательный комментарий, что пример, приведённый в статье из мира продаж всем понятен, тривиален и нет смысла для него составлять ubiquitous languge. На что ему приводят такие термины из мира продаж: ретроскидка, скидка по фактуре, ценовое соглашение, отличное от базового и др. Кажется, не всем понятно. Это я к тому, что использование ubiquitous languge в любой области облегчит взаимодействие.

Можете посоветовать что-то толковое на тему DDD?

#skills
👍6🔥4🌭3
Пятничное развлекательное

Хочется порекомендовать очень классный бесплатный курс на Coursera – Learning How to Learn. Название говорит само за себя. Курс имеет почти 90 тысяч рецензий с общим рейтингом 4.8.

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

Курс лёгкий для освоения, поэтому можно смотреть, не напрягаясь.

#fun #edu
👍15🌭21
Приоритизация технического долга

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

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

— Если мы ничего не будем предпринимать, усугубится ли проблема, или всё в целом останется на прежнем уровне, или вообще всё будет двигаться в сторону улучшения?

— Проблема относится к той части системы, которая активно развивается и используется или находится просто на обслуживании?

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

#procode
👍83🔥1😁1🌭1
Backup: апрель

Архитектура проекта
Межсервисное взаимодействие
Выбор брокера сообщений
DDD – Domain Driven Design

О программировании
Вариантность типов
Приоритизация технического долга
Асинхронность в браузере

Базы данных
Postgres – как хранить строки?
Работа с json в PostgreSQL

Инструменты
Рисуем схемы
VPN — не панацея

Софтскиллы
Биология поведения человека и лекция о депрессии
Курс Learning How to Learn

В этом месяце мы отметили три года. Если пропустили, то подборка за март.

#backup
👍10🔥52🌭1
This media is not supported in your browser
VIEW IN TELEGRAM
Load balancing

Прочитал на одном дыхании замечательную статью о балансировке нагрузки (load balancing).

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

По сути, оптимизировать можно два показателя: задержки при запросах и количество отклонённых сервером запросов.

Автор рассматривает:
– алгоритм round robin, когда запросы отправляются на сервера по кругу. Этот алгоритм не учитывает, что сервера могут иметь разную мощность. Тогда более мощные сервера будут быстро обрабатывать запросы, а менее мощные могут загибаться и давать отлупы.

– алгоритм dynamic weighted round robin учитывает мощность серверов. На основе среднего времени ответа им динамически устанавливаются веса. И, в зависимости от весов, будет автоматически варьироваться количество запросов.

– алгоритм least connection учитывает количество подключений, поддерживаемых серверами в текущий момент времени. Запрос будет передан серверу с наименьшим количеством активных подключений.

– алгоритм peak exponentially weighted moving average (PEWMA) направлен на уменьшение задержек в запросах. По сути, сочетает в себе dynamic weighted round robin, least connection и немного магии сверху.

Каждый из описанных алгоритмов сопровождается красивой и понятной анимацией. А в конце статьи можно поиграться с наглядным симулятором каждого из методов.

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

#skills
🔥20👍63
Пятничное развлекательное

Настало время моего любимого фильма Город грехов (2005). Четыре новеллы с интересными переплетениями между собой. Каждый фрагмент захватывает своими персонажами, вызывая сопереживание.

Старик умирает... Девочка остается жить. Честный обмен

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

Рекомендую к просмотру. Продолжение 2014 кода мне нравится куда меньше, но атмосферу фильм смог сохранить. Рад был видеть Кристофера Ллойда, хоть и в эпизоде. Кто не знает, это Док из трилогии Назад в будущее.

#films
🔥6👍2🌭21
Zero-Downtime Deployments with Docker Compose

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

Нашли свеженькую статью, где автор реализует blue-green деплоймент без даунтайма с применением docker compose.

Из приятного – автор пользуется полюбившимся многим traefik вместо nginx. Также в процессе знакомства можно кое-что новое узнать о композе. Из не очень приятного – bash всё ещё активно применяется.

Всё описанное можно потрогать, исходники выложены на github.

#skills
🔥82👍2🌭2
Пагинируем по-всякому

Занимательная статья, посвящённая способам реализации пагинации.

Достаточно частая задача – отдавать что-то порционно. В зависимости от потребностей, нужно применять разные способы пагинации.

Помимо классического page-based pagination автор рассматривает KeySet-based pagination и Cursor-based pagination. Также рассматриваются плюсы и минусы каждого из способов.

В конце приводятся примеры, как реализована пагинация у больших ребят: Stripe, Shopify, Github.

#skills
🔥6👍52🌭1
О производительности Postgres

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

– использовать расширение pg_stat_statements – такая штука, которая собирает полезную информацию о запросах к БД. Например, можно узнать, какие запросы самые долгие, какие в сумме по времени дольше всего выполнялись, какие выполнялись чаще всего

– логировать медленные запросы – можно настроить логирование запросов, которые выполнялись дольше заданного времени. В ту же сторону – логировать EXPLAIN-планы медленных запросов

– автоматически убивать запросы, которые очень долго выполняются

#database
👍822🌭2
Пятничное развлекательное

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

Есть прекрасный проверенный ресурс для этих целей – lamptest. Ребята конкретно заморачиваются, проверяют множество показателей и даже ведут блог на хабре.

У них еще есть похожий проект batterytest, где они тестируют элементы питания.

UPD: оказывается и в тг есть канальчик.

#edu
👍102🌭2