Pull to refresh
2
0.5
Дмитрий Померанцев @pda0

User

Send message

Как мы в России сделали микрофон как у Артемия Лебедева и продаем по всему миру

Level of difficultyEasy
Reading time12 min
Views101K

В 2016-м у меня была ипотека, беременная жена, а мое производство микрофонов на 80 кв.м в Туле приносило убытков на 1 млн в месяц. Я брал кредиты, занимал у родителей и смотрел на подработку в такси. А сейчас мы продаем на 200 млн ₽ в год, а наши микрофоны известны по всему миру. 

Читать далее
Total votes 246: ↑209 and ↓37+225
Comments259

Подборка ресурсов для начинающих дизайнеров интерфейсов

Level of difficultyEasy
Reading time3 min
Views4.7K

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

Я — Анна, продуктовый дизайнер в компании Ozon, занимаюсь проектированием интерфейсов сайта и приложения компании, также являюсь ревьюером курсов «Дизайнер интерфейсов» и «Веб-дизайнер». Когда я начинаю работать над продуктом, я обращаюсь к разным ресурсам, ссылками на которые поделюсь в этой статье.

Читать далее
Total votes 12: ↑11 and ↓1+12
Comments0

Два слова о процедурной графике

Reading time5 min
Views7K

Среди многочисленных демосценерских конкурсов, которые традиционно входят в программу различных demo party, незаслуженно недооценённым, на мой взгляд, является конкурс процедурной графики (procedural graphics). Смысл этого специфического вида компьютерного творчества — формирование статичного изображения при помощи короткой программы. Стандартные ограничения на размер — 4кб, 1кб, 256 байт.

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

Первые работы во многом были вызваны интересом к теме трассировки лучей (raytracing). Сам по себе алгоритм довольно простой, но требует много вычислений, поэтому работы стали возможны, когда распространились компьютеры с, во‑первых, достаточно высокой производительностью и, во‑вторых, с достаточным количеством отображаемых цветов (или, хотя бы, градаций серого). Я порылся на pouet и нашёл одну из первых работ в категории «procedural graphics» — Digital Phantasy by EG:

Читать далее
Total votes 50: ↑50 and ↓0+69
Comments21

Готовим k8s кластер на OrangePi 3 LTS

Level of difficultyMedium
Reading time11 min
Views6.9K

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

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

Идеальным и бюджетным решением являются микрокомпьютеры на базе архитектуры ARM, например Orange Pi 3 LTS. Я слышал о российских аналогах, таких как Repka Pi, но пока не имел опыта работы с ними, а Raspberry Pi, хоть и обладает множеством модулей, но является дороговатым вариантом. Orange Pi 3 LTS компактный, достаточно мощный и поставляется с образом OC Debian 11. Это устройство оснащено 4 ядрами, 2 ГБ оперативной памяти и процессором с тактовой частотой 1,8 ГГц. Стоимость этого устройства, на момент написания статьи, весьма демократичная - около 4000 ₽.

Читать далее
Total votes 13: ↑13 and ↓0+16
Comments31

Запускаем ComfyUI на GPU AMD Radeon в Docker

Level of difficultyMedium
Reading time7 min
Views2.8K

В этой статье я хочу рассказать об опыте контейнеризации с использованием видеокарты Radeon от AMD. В качестве примера возьмём ComfyUI и поместим его в контейнер. А в конце, для демонстрации успешной работы, создадим видео в стиле аниме.

Читать далее
Total votes 8: ↑7 and ↓1+9
Comments5

Система Топологического Консенсуса (СТК)

Level of difficultyMedium
Reading time17 min
Views1.6K

Topological consensus system (TCS)

Автор: Александр Коробкин и его верная команда разработчиков

Сегодня мы рады представить вашему вниманию нашу новую инновационную технологию, основанную на протоколе Chord (https://en.wikipedia.org/wiki/Chord_(peer-to-peer)), но с рядом уникальных особенностей, которые увеличивают его функциональность и производительность. Мы назвали нашу технологию "СТК" (Система Топологического Консенсуса).

Предназначение СТК

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

Распределенные файловые системы: Обеспечение масштабируемого и надежного хранения данных.

Облачные решения: Организация данных и ресурсов в крупных облачных инфраструктурах.

Сетевые службы имен: Обеспечение эффективного и быстрого доступа к распределенным данным.

Интернет вещей (IoT): Управление огромными объемами данных от различных устройств в сети.

Системы контент-распределения (CDN): Оптимизация хранения и доступа к контенту для пользователей по всему миру.

Блокчейн приложения: Распределение и хранение транзакций и данных в сети блокчейн.

Читать далее
Total votes 4: ↑3 and ↓1+5
Comments1

Циклические массивы

Level of difficultyEasy
Reading time3 min
Views2.6K

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

Например, с датчика непрерывно поступают данные с частотой дискретизации F=1000 Гц, которые сохраняются в массиве. Однако, для анализа данных используется конечное временное окно наблюдения, например, T=10 секунд. Таким образом, при поступлении нового отсчета данных необходимы лишь последние N=T*F=10 000 значений.

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

Читать далее
Total votes 9: ↑4 and ↓5+1
Comments35

Об одном интересном свойстве триангуляции Делоне

Level of difficultyMedium
Reading time7 min
Views7.7K

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

Свойство: Если какой‑то отрезок AB не включен в триангуляцию Делоне, то существует путь из A в B по отрезкам из триангуляции, такой что каждый из отрезков в нем не длиннее |AB|. На картинке выше отсутствующий отрезок показан красным цветом, а путь — зеленым цветом.

Дальше в статье я приведу пример его использования в задачах, а также формальное его доказательство.

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

Читать далее
Total votes 41: ↑40 and ↓1+51
Comments6

Пишем сервис на GO. Runtime контроллер и Graceful Shutdown

Reading time20 min
Views27K


Напишем вместе HTTP-сервис на golang с нуля? Я уверен, что это довольно несложно. Для тех, кто каждую неделю этим занимается, моя статья не будет особенно интересна, но я все равно рекомендую взглянуть и оценить, возможно, ваши комментарии спасут кому-то жизнь. А может кое-какие из моих рассуждений спасут вашу.


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


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


  • Выработаем понимание структуры и жизненного цикла приложения.
  • Формализуем наше представление жизненного цикла на языке go.
Читать дальше →
Total votes 15: ↑13 and ↓2+13
Comments19

Решаем задачу уровня «Невозможно». Сжатие хаотического бинарного кода. Суперпозиционные системы счисления

Level of difficultyHard
Reading time10 min
Views2.2K

Для наилучшего восприятия выделим основные пункты изложенного материала:

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

Читать далее
Total votes 18: ↑3 and ↓15-10
Comments28

Python: потоки по-другому

Reading time4 min
Views16K

Знаете, почему я решил написать эту статью? Я писал программу, где использовал потоки. Во время работы с ними в Python всё больше убеждаешь себя, что тут с ними всё плохо. Нет, не то, чтобы они плохо работали. Просто использовать их, мягко говоря, неудобно. Я решил написать простую, но более удобную библиотеку, и здесь поделюсь процессом.

P.S.: В конце оставлю ссылку на GitHub

Читать далее
Total votes 15: ↑3 and ↓12-7
Comments15

Python threading или GIL нам почти не помеха

Reading time7 min
Views24K
Наверное всем, кто хоть раз интересовался Python, известно про GIL — его одновременно и сильное и слабое место.
Не мешая однопоточным скриптам работать, он ставит изрядные палки в колеса при многопоточной работе на CPU-bound задачах (когда потоки выполняются, а не висят попеременно в ожидании I/O и т.п.).
Подробности хорошо описаны в переводе двухгодичной давности. Побороть GIL в официальной сборке Python для настоящего распараллеливания потоков мы не можем, но можно пойти другим путем — запретить системе перебрасывать потоки Python между ядрами. В общем пост из серии, «если не нужно, но очень хочется» :)
Если вы знаете про processor/cpu affinity, пользовались ctypes и pywin32, то ничего нового не будет.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments34

Многопоточность в Python: очевидное и невероятное

Level of difficultyMedium
Reading time4 min
Views35K

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

Изначально я планировал что это будет простая и короткая заметка, но пока готовил и тестировал код нашел интересный неочевидный момент связанных с внутренностями CPython, так что не спешите закрывать вкладку, даже если вы уверены что вы знаете о потоках в Python всё :)

Читать далее
Total votes 37: ↑34 and ↓3+38
Comments16

8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить

Reading time20 min
Views94K

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


image


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


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

Читать дальше →
Total votes 14: ↑12 and ↓2+15
Comments6

Магия динамического маппинга. Реализация универсальной обработки файлов нефиксированной структуры на Python

Level of difficultyMedium
Reading time15 min
Views2.3K

Привет! На связи Никита Ильин из Spectr, Backend-разработчик с опытом более 5 лет. 

Один из проектов, с которым мы работаем, — IBP-платформа для планирования и прогнозирования спроса и продаж в ритейле. В статье поговорим о конкретной реализации для одной из задач в рамках этой платформы на Python и Django. При этом сама концепция может быть реализована абсолютно на любом фреймворке или платформе: Spring, .NET, Laravel.

Узнать о магии больше
Total votes 5: ↑5 and ↓0+5
Comments1

Об извлечении кода в Python

Reading time6 min
Views6K
Я начал изучать Python в 2009 году, столкнувшись с очень нетривиальной и, кстати, необычной задачей на этом языке. Тогда я разрабатывал приложение для ПК, где графический пользовательский интерфейс создавался на PyQT, а основным языком в программе был Python.

Чтобы скрыть код, я встроил интерпретатор Python в самостоятельный исполняемый файл Windows. Это можно сделать при помощи множества инструментов (напр., pyinstaller, pyexe), все они функционально похожи. Они компилируют в байт-код ваши скрипты, написанные на Python, а далее, связывая их с интерпретатором, укладывают в исполняемый файл. Если компилировать скрипты, понижая их до байт-кода, то злоумышленникам становится сложнее добраться до вашего исходного кода и взломать ваше приложение. Байт-код приходится извлекать из исполняемого файла и декомпилировать. Кроме того, таким способом можно выполнять обфускацию кода, и в результате код становится гораздо сложнее понимать.
Читать дальше →
Total votes 11: ↑11 and ↓0+15
Comments2

Засады многопоточности

Level of difficultyMedium
Reading time8 min
Views8.8K

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

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

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

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

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

Читать далее
Total votes 19: ↑2 and ↓17-15
Comments185

Почему люди злятся из-за итераторов в Go 1.23

Level of difficultyMedium
Reading time8 min
Views11K

Недавно я увидел сообщение, демонстрирующее будущий дизайн итераторов для Go 1.23 (август 2024 года). Насколько я могу судить, многим людям этот дизайн не нравится. Я хотел высказать свои мысли по этому поводу как разработчик языка.

Читать далее
Total votes 16: ↑10 and ↓6+6
Comments7

Information

Rating
1,961-st
Location
Химки, Москва и Московская обл., Россия
Date of birth
Registered
Activity