Search
Write a publication
Pull to refresh
1
0

User

Send message

Как стабильно расти в IT

Reading time14 min
Views40K

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

Вместе с HR BP компании TAGES Маргаритой Рачкулик разбираемся, как двигаться по карьерной лестнице быстро и уверенно, правильно отслеживать и оценивать свой рост, а также выбирать верные шаги для достижения карьерных целей.

Читать далее

Доводим разработчика до выгорания: три простых шага

Reading time7 min
Views47K
Если вы менеджер и хотите, чтобы ваши лучшие разработчики выгорели и разуверились в вашей способности руководить – могу помочь. Мне довелось работать в двух командах, подверженных выгоранию, и молча смотреть, как окружающие меня талантливые программисты один за другим покидали команду или компанию.

В первом случае я был ведущим специалистом в стартапе на посевной стадии с финансированием, работал непосредственно под и совместно с руководителем. Во втором я был одним из рядовых разработчиков, работал в команде из одиннадцати человек в составе крупной технологической компании (уровня Meta, Google, Apple и т.д.). Вот пошаговое руководство из методички выгорания, по которой работали эти команды.
Читать дальше →

Приходите к нам на завод, у нас тяжело

Reading time10 min
Views141K
Короче, ИТ на заводе — это вам не романтика, особенно в нашем цифровом направлении.

Между «давайте этим займёмся» и «о, смотрите, какая гламурная ML-модель» лежит очень много того, про что не рассказывают. Сейчас расскажу.

Вначале у нас была банда энтузиастов из разных подразделений: несколько человек из ИТ, АСУТП, технологи со знанием статистики — чтобы смотреть с разных углов и видеть всё в целом, насколько это возможно. Начали с оценки перспектив. Они были необъятные — наше производство размером с небольшой город. Стали формироваться подразделения и направления: кто-то пошёл собирать роботов, кто-то в видеоаналитику, кто-то в лайтовый анализ данных, кто-то в самый хардкор — в дата-сатанизм. Работы у нас всегда больше, чем рук.

И на каждой из этих дорожек нас поджидали свои чудеса и сюрпризы.

Вот, к примеру, видеоаналитика:

  • Мы поняли, что ML в 50% задач не нужны. Нужна, например, камера, которая по цвету определяет, где есть железка, и смотрит её геометрию в реальности. Всё. Или другая камера, которая следит, чтобы в нужной зоне ничего не шевелилось.
  • Всё это прекрасно до первого солнечного зайчика. ML отлично показывают себя там, где вам лень строить крышу или ставить прожектор над конвейером.
  • У нас была идея, что мы можем сами в нейросети. Чуть не написали свой сервис для распознавания номеров вагонов. Казалось, делов-то на 20 минут, а у подрядчика это стоит 25 копеек за фото. Сделали свой, сферические вагоны в вакууме он определял хорошо. Потом приехало вот это:

image

А потом внезапно пошёл дождь. Знаете что? Вагоны под дождём становятся мокрыми. Это было неожиданно. Ещё они бывают после снега, битые, немытые, обновлённые криворукими малярами и ПРОЧИЕ. И в солнечных зайчиках тоже.

Мы накалывались на получении данных (кто сказал, что прошивка станка без костылей?), на роботизации, инфраструктуре, связи, на всём. Мы облазили весь завод, испачкались в солидоле, мазуте и масле. Но стали делать то, что должны, — оптимизировать мир.
Читать дальше →

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

Reading time8 min
Views33K
Настройка производительности базы данных — разработчики обычно либо любят это, либо ненавидят. Я получаю удовольствие от этого и хочу поделиться некоторыми методами, которые я использовал в последнее время для настройки плохо выполняющихся запросов в 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

Читать дальше →

О сложности и монолитах

Level of difficultyEasy
Reading time18 min
Views7.3K
Изображение сгенерировано с помощью DALL·E. Запрос: a complex monolith in a server room, with the faces of IT consultants with suits engraved in it with twisted faces, mathematical formulations about complexity floating around, and with a mysterious malevolent godlike presence in the background (комплексный монолит в серверной с искажёнными лицами IT-консультантов. Вокруг витают сложные математические формулы, а на фоне присутствует мистическое злобное богоподобное существо).

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

Слово Божие — функциональное программирование как основа Вселенной

Level of difficultyMedium
Reading time15 min
Views43K

В одном из своих предыдущих постов под названием "Эйлер, Чёрч и Мандельброт — этюд о красоте и математике" я немного затронул тему рассмотрения функционального программирования в качестве основы реальности. Под тем постом было оставлено множество интересных комментариев, один из которых, написанный @nickolaym, вдохновил меня на развитие мысли в данном направлении. Так появился этот пост, в котором прямо как во времена пифагорейской школы и платоновской академии философия переплелась с математикой, а математика с философией.

Читать далее

Проектирование REST API: спорные вопросы с проектов и собеседований на системного аналитика (и не только)

Level of difficultyMedium
Reading time13 min
Views84K

Проектирование REST API - это процесс создания дизайна методов обмена данными. Дизайн - это субъективное. У одних "так", у других "сяк". А кто прав? Иногда все, а иногда нет.

Можно ли сделать в проекте все методы POST? Как правильно именовать эндпоинты - ед. число или мн. число (/user или /users)? Можно ли использовать метод POST для получения данных? ...

Холиварные вопросы! Вкусовщина! Давайте разбираться!

Читать далее

Создаем свой VPN с защищенным от блокировок протоколом AmneziaWG, или WireGuard на максималках

Reading time5 min
Views183K


Всем привет! Возможно уже совсем скоро разные новостные и  IT-ресурсы будут подчищать информацию о способах обхода блокировок. А пока этого не случилось, запасаемся полезными гайдами и разворачиваем свои собственные VPN с защищенными от блокировок протоколами. Расскажу как это сделать, как изменилась Amnezia и как мы защитили WireGuard от блокировок.

Читать далее

Обход блокировок: настройка сервера XRay для Shadowsocks-2022 и VLESS с XTLS-Vision, Websockets и фейковым веб-сайтом

Level of difficultyMedium
Reading time14 min
Views288K

Предыдущие статьи серии:

Современные технологии обхода блокировок: V2Ray, XRay, XTLS, Hysteria и все-все-все
Программы-клиенты для протоколов недетектируемого обхода блокировок сайтов: V2Ray/XRay, Clash, Sing-Box, и другие

С протоколами разобрались, с клиентами разобрались, теперь наконец-то настало время рассказать о том, как же настроить свой личный прокси-сервер с современными протоколами для обхода блокировок. Мы будем настраивать сервер на базе XRay (который является форком известного V2Ray, и еще я немного упомяну Sing-Box) с протоколами Shadowsocks-2022 и VLESS с транспортом XTLS-Vision и фейковым веб-сайтом для защиты от выявления. И в качестве запасного варианта на том же сервере мы настроим fallback на VLESS+Websockets, чтобы была возможность работать через CDN типа Cloudflare, если вдруг IP-адрес вашего сервера попадет под блокировку. В конце я приведу настройки десктопных и мобильных клиентов для подключения ко всему этому.

Читать далее

Bleeding-edge обход блокировок с полной маскировкой: настраиваем сервер и клиент XRay с XTLS-Reality быстро и просто

Level of difficultyEasy
Reading time11 min
Views571K

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

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

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

Читать далее

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

Reading time12 min
Views16K

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

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

Читать далее

Умные программисты пишут STUPID-код

Level of difficultyEasy
Reading time9 min
Views54K
Умные программисты пишут STUPID-код, ведь они понимают, что неожиданно возникшая сложность может привести к провалу проекта.


▍ Страдание


На момент написания этой статьи на моих часах 21:30.

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

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

Примитивы синхронизации в Python Asyncio: Исчерпывающее руководство

Level of difficultyHard
Reading time14 min
Views19K

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

Что было дальше?

Архитектурный паттерн для обработки больших данных: Lambda

Level of difficultyHard
Reading time13 min
Views13K

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

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

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

Читать далее

Как сделать вакансию, на которую будут откликаться — инструкция

Level of difficultyEasy
Reading time5 min
Views9.4K

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

В общем-то, все ответы под катом.

Читать далее

Сбер. Как некрасиво поступить на конкурсе красоты

Reading time13 min
Views54K

Хабр - не жалобная книга, я знаю. Но тут история про код, с примерами, разбором антипаттернов и всё такое, поэтому я рискну.

Всё началось, когда я узнал про конкурс красоты кода от Сбера. Я как раз хотел поучаствовать в каком-нибудь эпичным конкурсе, а тут как раз он мне и подвернулся, тем более что я - тот человек, которому есть что рассказать про красивый код. Я даже целую статью запилил о том, как писать красивый и понятный код. Так что что я решил, что в данном случае мои шансы на победу - в отличие от остальных конкурсов - всё же больше 0%. Кроме того, я хотел выступить на конференции PiterPy (спойлер: хрен мне), чтобы рассказать там про красивый код и всё такое, поэтому участие в конкурсе и сравнение результатов было бы классным подспорьем.

Что же пошло не так?

REST API vs GraphQL: в чём между ними разница

Reading time7 min
Views17K

Сегодня в среде разработчиков часто продвигают GraphQL в качестве замены REST, хотя обе технологии можно использовать одновременно. В этой статье Анастасия Иванова, технический писатель платформы МТС Exolve (входит в экосистему МТС), рассмотрит интерфейсы подробнее, чтобы понять, как выбрать подходящее решение под каждый конкретный проект. Подробности — под катом.

Читать далее

Самый маленький Docker образ Rust приложения

Level of difficultyMedium
Reading time5 min
Views12K

Привет %username%, эта статья про то, как поместить Rust приложение в Docker и получить образ размером с бинарный файл (6 Мб). А также про причины, которые привели к переходу с NodeJS на Rust. Отдельная пара слов о проблемах вначале, переходе на Go, и том, как команда Rust устранила эти проблемы за пол года.

TL;DR Dockerfile в конце статьи и ссылка на example репозиторий

Читать далее

Лучше быть, чем казаться. 10 шагов, чтобы стать «вкусным» кандидатом на собеседовании

Level of difficultyEasy
Reading time8 min
Views67K

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

Сегодня я хочу поговорить о том, как стать «вкусным» кандидатом для крупных компаний с развитой системой отбора. Советы подойдут не только программистам, но и ребятам с других айтишных специализаций: тестировщикам, аналитикам.

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

Читать далее

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

Level of difficultyEasy
Reading time19 min
Views42K

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

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

Читать далее

Information

Rating
Does not participate
Registered
Activity