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

Программирование *

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

Сначала показывать
Порог рейтинга
Уровень сложности

Golang: как найти мёртвый код в проекте, а заодно оценить покрытие тестами живого кода

Время на прочтение 3 мин
Количество просмотров 698

В Go 1.20 сделали возможность сбилдить приложение с флагом cover


go build -cover

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


Это, конечно, было сделано для интеграционных тестов, когда приложение запускается целиком в каких-то сценариях (а не через go test), но, вероятно, это можно попробовать использовать и по-другому:


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


Так можно найти недовыпиленный легаси-код, старые эндпоинты API, которые давно никому не нужны, малозначимые проверки if err != nil и прочее. Как минимум, на это интересно посмотреть, можно найти что-нибудь удивительное.


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

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

Новости

Фундаментальные подходы при работе с Git

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

Git - одна из наиболее популярных систем контроля версий, используемых разработчиками по всему миру. Однако, существует множество различных подходов к организации рабочего процесса с использованием Git. В этой статье мы рассмотрим некоторые из наиболее популярных методов, такие как Git Flow, Trunk-Based Development (TBD), на их основе бизируются остальные:

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

Эволюция структур данных в языках программирования

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

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

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

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

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

Конкурс: можно ли написать быструю программу на C/C++?

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

По работе попалась несложная, но достаточно интересная задачка из области обработки данных. Так как она была связана с вычислениями над массивами, то я по-быстрому запрограммировал её на Фортране. Но мне стало интересно, насколько эффективным или неэффективным будет её решение на C или C++. Поэтому, если кто любит решать задачки среднего уровня сложности с литкода, тот может поучаствовать в предлагаемом конкурсе, где я упростил эту задачу, оставив только самое интересное.

Читать далее
Всего голосов 9: ↑2 и ↓7 -5
Комментарии 43

Истории

Реализация отражений и преломлений света в трассировщике (Введение в трассировку лучей — часть 5)

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

Можно ли напечатать трассировщик на визитной карточке?
Как реализовать преломление и отражение света?

Узнаем в этой статье 👇

Отрендерить статью
Всего голосов 2: ↑1 и ↓1 0
Комментарии 0

Сказка про собес наоборот

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

Вы помните свое первое собеседование? Я свое помню отлично, преподаватель дольше обычного гонял мою плис в симуляторе Keil-C, придирался к любой мелочи, докапывался до каждой запятой в коде прошивки. А потом начал гонять по алгоритмам трассировки печатных плат, которые мы должны были проходить только в следующем семестре. Я уже мысленно готовился на допсу, видно же что валит, как и предыдущих двух одногруппников. Но в конце сдачи лабы по проектированию мк преподаватель спросил хочу ли я делать "железное железо для железной дороги?" (с). Студенту второго курса ИТМО, которого кормили родители, и подрабатывавшего разгрузкой вагонов ночами, это было сродни офферу в гугль. С тех пор я много раз побывал с обеих сторон стола, и в качестве испытуемого, и как придирчивый лид (отнюдь этим не горжусь, но и не стыжусь), и как группа поддержки у коллег из соседних отделов. Всегда хотелось надеяться, что наши собеседования - это не таинственные квесты, где каждая задача - это каст сложного заклятия, а ошибки не выкидывают с данжа.

Но сначала сказка о том, как к нам попал Миша: однажды в славном городе Панкт-Сетербург погромист-джедай по имени Михаил отправился на собеседование в компанию "Кодозавры". Он был уверен, что знает все, и даже изучил новейшие фреймворки "NoScript" и "Unreal С--". Как он думал, ничто не может его остановить. Когда Миша пришел на собеседование, его встретил HR-менеджер по имени Анна. Она с улыбкой спросила: "Расскажите, как вы бы пояснили своей бабушке, что такое мьютекс?". Ага, прям с порога наш доблестный HR накинул Мишке затравочный вопрос. Ну а чё, это ж сказка, герои на белых самокатах и все такое...

Налево пойдешь, мидла потеряешь...
Всего голосов 25: ↑20 и ↓5 +15
Комментарии 41

Ключ к эффективности разработки: делать то, что нужно, но лишнего не делать

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

Кучу времени можно сэкономить если:


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


Тщательно проработать важные аспекты нового проекта, собрав нужных людей на встречу(и), написав понятно задачи.
Не прорабатывать тщательно то, что допустимо придумать на ходу / не особо важно / можно спросить.

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

Основы проектирования архитектуры простой социальной сети

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

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

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

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

FIFO очередь asyncio в Python

Уровень сложности Средний
Время на прочтение 19 мин
Количество просмотров 1.3K
Туториал
Перевод

Очереди в Asyncio могут быть полезны для создания программ, в которых используются паттерны производитель-потребитель, где одна или несколько корутин производят элементы и помещают их в очередь, а одна или несколько корутин потребляют элементы и обрабатывают их из очереди.

В этой статье на примерах вы узнаете как работает асинхронная очередь asyncio.Queue.

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

Тестирование смарт-контрактов в Foundry (часть 2)

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

В прошлой части мы познакомились с Foundry, создали новый проект и освоили самые базовые команды для тестирования. Сегодня нам предстоит окунуться чуть поглубже, освоить автоматическое форматирование кода (forge fmt), научится отслеживать качество тестирования наших контрактов (forge coverage), выводить подробные логи (vvvv), управлять временем (warp, roll) и деньгами(deal, hoax).

Поехали!
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 3

Делаем простые отчеты в CI с помощью GitLab Pages для Playwright

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 1.2K
Туториал

Привет, Хабр! Я Саша Алексеев, старший инженер по тестированию в Selectel. Некоторое время назад мы столкнулись с необходимостью реорганизовать отчеты end-to-end-тестов. Их прогон стал занимать слишком много времени, мы искали способы распределить их еще больше.

Под катом я поделюсь вариантом, к которому мы в итоге пришли. Сейчас у нас параллельное выполнение тестов в разных джобах с использованием shard=x/y, а общий репорт мы научились склеивать из отчетов разных прогонов.

Хотел бы обсудить это решение в комментариях. Возможно, вы решаете подобную проблему иначе. Выбранный вариант описал в виде инструкции на тестовом стенде, так что сможете легко повторить его в собственных целях.
Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 0

10 лет Docker: от революционной идеи до современной практики

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

Привет, Хабр! На момент написания статьи, я занимаюсь надежностью (SRE) в компании Workday, еще помогаю студентам в Практикуме осваивать курс по DevOps-практикам.

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

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

Проектирование высокопроизводительных кэширующих решений с использованием Redis и Memcached

Уровень сложности Сложный
Время на прочтение 15 мин
Количество просмотров 2.1K
Обзор

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

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

Redis и Memcached – два из самых популярных и мощных инструментов для реализации кэширования. Redis, изначально разработанный как in-memory хранилище данных, позволяет эффективно хранить и быстро извлекать информацию в памяти, что делает его идеальным выбором для кэширования. Memcached, с другой стороны, специализируется исключительно на кэшировании данных и предоставляет простой, но мощный способ ускорить доступ к данным.

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

Ближайшие события

Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Joker
Дата 9 – 14 октября
Время 16:00 – 19:30
Место Санкт-Петербург Онлайн
Открытый урок «Kafka Streams»
Дата 16 октября
Время 10:00
Место Онлайн
Питч-сессия pravo (tech) impulse
Дата 19 октября
Время 15:45 – 17:30
Место Москва
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн
IT Recruiting – HR Forum 2023
Дата 8 – 10 ноября
Время 9:00 – 18:00
Место Москва
Онлайн IT HR-конференция HR42
Дата 17 – 18 ноября
Время 10:00 – 14:00
Место Онлайн
HighLoad++ 2023
Дата 27 – 28 ноября
Время 9:00 – 20:00
Место Москва Онлайн

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

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

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

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

Под кат
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 1

В чем конечная цель программирования?

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

В чем конечная цель программирования? В том, чтобы иметь код, который легко изменять.

Давайте разберемся. Какую проблему мы пытаемся решить?

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

Читать далее
Всего голосов 18: ↑6 и ↓12 -6
Комментарии 41

Собираем машину для стринг-арта

Уровень сложности Средний
Время на прочтение 12 мин
Количество просмотров 4.4K
Туториал
Перевод

Творческие люди такие творческие, что могут рисовать чем угодно на чём угодно. Например, нитками по гвоздям. Этот вид искусства называется стринг-арт (побудем капитаном очевидность и скажем, что нет, стринги тут ни при чём). На самом деле, итоговый результат выглядит красиво и необычно. Правда, работа очень тонкая и кропотливая, далеко не все с ней справятся. А что, если попробовать автоматизировать это искусство? Оказалось, что задача хоть и сложная, но реальная.

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

Год ожиданий — и мы получили Python 3.12. Изменения, новшества и дополнения

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

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

Кроме того, запущен процесс альфа-тестирования Python 3.13, где заявлен режим сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock). Тестировать ветку будут в течение семи месяцев, исправляя ошибки и добавляя новые возможности. Затем еще три месяца — тестирование бета-версий и еще через два месяца появится пред-финальная версия. Но будет потом, а сейчас поговорим о том, что уже есть в руках — о Python 3.12.
Читать дальше →
Всего голосов 70: ↑70 и ↓0 +70
Комментарии 63

C++ Дайджест №4 (18 сентября – 1 октября 2023)

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

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

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

Scala Digest. Выпуск 9

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

Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать. Собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные новости и собственные комментарии. Свою мотивацию черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! 

Читать девятый выпуск
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 0

В чем разница между мидлом и сеньором

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

Заметка навеяна вопросом друга на эту тему, решил развернуто ответить.

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

В чем разница между мидлом и сеньором? Пройдем по пунктам:

Зам тимлида

Да, позиция сеньора означает, что он может быть потенциальным замом тимлида, Что это значит?

Читать далее
Всего голосов 35: ↑8 и ↓27 -19
Комментарии 56

Вклад авторов