Pull to refresh
-6
0
Александр @ALito

Разработчик

Send message

Web3: Фантастические SDAPPS и где они обитают

Level of difficultyEasy
Reading time5 min
Views1.8K

Сейчас разработка Web3 проектов стала уже обычным делом и выпустить свой токен может каждый школьник (даже отстающий, если спросит у ChatGPT, где какую кнопку нажать). Останется лишь написать DAPP (Decentralized application), добавить к нему пользовательский интерфейс (UI), разместить его на сервере и вот Web3 проект готов.

Но подождите! Мы говорим о «разместить на сервере»? Разве проект, размещенный на одном сервере, может называться «Decentralized»? Или надо разместить его на нескольких серверах, чтобы он стал «Decentralized»?

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

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

Но так ли это на самом деле? Кажется, мы сильно лукавим, когда утверждаем, что UI, расположенный на нашем сервере, никак не влияет на пользовательский опыт.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments0

Поисковый движок в 80 строках Python

Reading time11 min
Views12K

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

Давайте поговорим о целях. Слышали когда-нибудь о «кризисе сложности обнаружения маленьких веб-сайтов»? Проблема в том. что маленькие веб-сайты наподобие моего невозможно найти при помощи Google или любого другого поискового движка. Какова же моя миссия? Сделать эти крошечные веб-сайты снова великими. Я верю в возвращение славы этих малышей вдали от SEO-безумия Google.

В этом посте я подробно расскажу о процессе создания поискового движка с нуля на Python. Как обычно, весь написанный мной код можно найти в моём GitHub (репозиторий microsearch). Эта реализация не будет притворяться готовым к продакшену поисковым движком, это лишь полезный пример, демонстрирующий внутреннюю работу поискового движка.

Кроме того, мне стоит признаться, что в заголовке поста я слегка преувеличил. Да, поисковый движок действительно реализован примерно в 80 строках Python, но я ещё и писал вспомогательный код (краулер данных, API, HTML-шаблоны и так далее), из-за которого весь проект становится немного больше. Однако я считаю, что интересная часть проекта находится в поисковом движке, который состоит из менее чем 80 строк.

P.S. Написав этот пост и microsearch, я осознал, что пару лет назад нечто похожее написал Барт де Гёде. Моя реализация очень похожа на работу Барта, но я считаю что кое-что улучшил, в частности: (1) мой краулер асинхронный, что сильно ускоряет работу, (2) я реализовал пользовательский интерфейс, позволяющий взаимодействовать с поисковым движком.

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments5

Django, PostgreSQL, Gunicorn/uWSGI, Nginx

Level of difficultyHard
Reading time12 min
Views13K

Подробное описание шагов при деплое web-проекта на Django с PostgreSQL, Nginx, Gunicorn.

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

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments4

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

Reading time12 min
Views14K

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

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

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

Вам не нужен для этого JavaScript

Level of difficultyMedium
Reading time11 min
Views28K

Прошу вас не возмущаться названием статьи. Я не ненавижу JavaScript, я люблю его. Ежедневно я пишу на нём кучу кода. Но ещё я люблю CSS и даже люблю JSX HTML. Я люблю все эти три технологии по причине, которая называется…

▍ Правило наименьших полномочий


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

В случае веба это означает, что нужно по возможности выбирать HTML вместо CSS, а затем CSS вместо JS. JS — самый универсальный язык из всех трёх, потому что на нём вы описываете, как должен вести себя браузер; но также он может ломаться, отказываться загружаться, требует дополнительных ресурсов для скачивания, парсинга и исполнения. Кроме того, при его использовании очень легко ограничить доступ пользователей, выполняющих браузинг при помощи клавиатуры или специальных возможностей.

В отличие от JS с его императивностью, HTML и CSS декларативны. Вы говорите браузеру, что делать, а не как это делать. Это значит, что браузер сам выбирает, как это делать, и может сделать это наиболее эффективным образом.

Так как функции HTML и CSS обрабатываются браузером, они могут быть более производительными, более нативными, более адаптируемыми к предпочтениям пользователя и в общем случае иметь бОльшую accessibility. Это не значит, что так будет всегда (особенно когда дело касается accessibility), но когда все сложные задачи берёт на себя браузер, от этого обычно выигрывают конечные пользователи.
Читать дальше →
Total votes 81: ↑79 and ↓2+93
Comments38

Бекап макбуков на удаленный сервер Time Machine для путешественников

Reading time4 min
Views13K

У меня есть рабочий макбук и я часто путешествую. Я боюсь потерять данные на нем, поэтому я делаю бекапы через родную Time Machine на удаленный сервер. Для этого я поднял в офисе сервер SMB, который всегда доступен через VPN.

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

Решение: я написал скрипт Time Machine Traveler, который проверяет скорость доступа к SMB шаре и запускает бекап только если качество соединения высокое.

Читать далее
Total votes 25: ↑25 and ↓0+25
Comments22

GOST: швейцарский нож для туннелирования и обхода блокировок

Level of difficultyMedium
Reading time13 min
Views100K

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

Сегодня я расскажу о замечательном инструменте под названием GOST. Не пугайтесь, он не имеет никакого отношения к ГОСТ-шифрованию или чему-то подобному, на самом деле это Go Simple Tunnel. Он действительно simple (простой) в использовании и настройке, но при этом невероятно мощный, поскольку поддерживает огромное количество протоколов и транспортов, из которых вы при желании сможете построить самые упоротые и бронебойные комбинации, а именно...

Читать далее
Total votes 145: ↑142 and ↓3+174
Comments113

Пакуем весь трафик в Ping message, чтобы не платить за интернет | ICMP NAT traversal

Level of difficultyHard
Reading time29 min
Views89K

Бывало ли у вас такое, что вы подключились к общественной сети или мобильному интернету, но он себя странно ведёт. Надпись «Подключено, без доступа к интернету» отсутствует, устройство думает, что всё нормально. Вы открываете браузер и видите «Пройдите проверку личности в сети нашего кафе» или в случае с мобильным интернетом «Пополнить баланс можно тут, тут и тут».

Так вот, переходя ближе к теме. Вы можете воспроизвести подобное поведение очень просто прямо сейчас при помощи вашего мобильного телефона и ноутбука. Я в своём конкретном кейсе буду пользоваться услугами оператора красного цвета, однако проблема актуальна для всех текущих 4 монополистов рынка сотовой связи. Как вам, скорее всего, уже известно, они около года меняют свою политику, внедряя одно интересное нововведение — с вас требуют дополнительной платы за раздачу интернета поверх основного пакета. То есть вы не можете взять и использовать свои 7 гигов на месяц как ресурс для раздачи при помощи точки доступа. Для точки доступа вам предлагают отдельный, зачастую совсем невыгодный тариф. Конечно, можно сменить основной тариф на специальный «тариф для раздачи» и платить втридорога, но, как вы понимаете, сегодня мы в потребителя будем играть совсем недолго. Сейчас по пунктам нужно доказать нечестность подобной политики и с чувством завершённого введения перейдём к непосредственно технотексту.

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

За интернет они платят? — Да.

Раздача как-либо использует ресурсы провайдера сверх нормы? — Нет.
Читать дальше →
Total votes 233: ↑231 and ↓2+294
Comments91

Детектирование атак на контейнеры с помощью eBPF

Level of difficultyMedium
Reading time14 min
Views3.5K

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

Меня зовут Илья Зимин, я аналитик-исследователь угроз в компании R-Vision. Сегодня в статье я расскажу о возможностях обнаружения атак на контейнеризированные приложения с помощью такого инструмента, как eBPF, на примере приемов, связанных с побегом из Docker-контейнеров на Linux-системах.

eBPF (extended Berkeley Packet Filter) — это технология, которая предоставляет программный интерфейс в ядре Linux для обработки его событий в режиме реального времени. Он позволяет загружать и выполнять пользовательские программы в ядре без необходимости модификации самого ядра. Программы выполняются в виртуальной машине, что не позволяет ошибке в пользовательской программе повлиять на всю систему.

Используя возможности eBPF, мы можем отслеживать любое (или почти любое) взаимодействие в системе на уровне ядра, "присоединяясь" к вызовам системных функций, и получать информацию о них: контекст, аргументы, выходные значения и другие. Также на уровне пользователя можно добавить дополнительную логику для обработки этих данных.

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments0

Обход блокировок на OpenWRT с помощью v2rayA (xray-core) и баз GeoIP, Geosite Antifilter

Level of difficultyEasy
Reading time5 min
Views20K

В данном гайде будем устанавливать пакет v2rayA на OpenWRT на примере стабильной 23.05.0. Рекомендуется роутер минимум с 128 МБ RAM (256 предпочтительно) и памятью более 16 Мб (установка занимает около 30МБ памяти)

v2rayA — это простой в использовании и мощный клиент ориентированный на Linux. Несмотря на название актуальная версия использует xray-core, хотя есть возможность использовать и v2ray-core. Имеет веб-интерфейс для управления настройками и импорта конфигураций, подписок. Поддерживает всё, что поддерживает xray-core:

Shadowsocks (в т.ч. 2022), ShadowsocksR, Trojan, Vless (включая XTLS-Reality), Vmess, Juicity, Tuic

Руководство будет включать:

1. Установку из репозитория

2. Настройку v2rayA и обход блокировок с помощью Antifilter GeoIP, Geosite

Читать далее
Total votes 31: ↑31 and ↓0+31
Comments10

Разработка real-time приложений с Python и WebSocket

Level of difficultyEasy
Reading time15 min
Views36K

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

Читать далее
Total votes 28: ↑23 and ↓5+26
Comments17

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

Level of difficultyEasy
Reading time19 min
Views32K

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

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

Читать далее
Total votes 50: ↑49 and ↓1+70
Comments19

Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика

Level of difficultyMedium
Reading time13 min
Views35K

Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python. С декораторами, наверное, знакомы все джуны (хотя бы в рамках подготовки к собеседованиям). Однако, крайне мало разработчиков пишут их правильно. Особенно принимая во внимания тенденции последних нескольких лет к аннотированию всего и вся. Даже популярные open-source проекты (если основная часть их кода была написана до 2018 года) вряд ли дадут вам примеры декораторов, отвечающих всем современным требованиям к коду.

Так давайте разбираться!

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

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

Давайте разбираться
Total votes 43: ↑43 and ↓0+43
Comments9

Thinkpad T480 — сравнение вариантов охлаждения ноутбука (MX4, PTM7950, жидкий металл, разные радиаторы и т. д.)

Reading time3 min
Views13K

Thinkpad T480 с i5 8350U троттлит в своей стоковой комплектации, я провёл несколько тестов с разными вариантами охлаждения процессора этого ноутбука, и детально сравнил результаты в этом гайде. Он будет полезен не только для владельцев T480, так как эти способы могут быть использованы и в других устройствах.

T480 выпускается в различных комплектациях, версия с i5 8350u без дискретной видеокарты имеет радиатор с одной медной трубкой, он справа на фотографии. Версия ноутбука с процессором i7 8550U и дискретной видеокартой mx150 имеет радиатор с двумя медными трубками и область для GPU.

Ничто не мешает поставить большой радиатор в ноутбук без дискретной видеокарты, чтобы значительно понизить температуру процессора. Я купил радиатор с двумя медными трубками на Aliexpress за 26$ (2100 рублей на момент написания статьи).
Маленький радиатор весит 69 грамм, большой 93.

Читать далее
Total votes 14: ↑13 and ↓1+18
Comments53

Kafka за 20 минут. Ментальная модель и как с ней работать

Level of difficultyMedium
Reading time19 min
Views93K

Привет! Меня зовут Глеб Гончаров, и я руковожу подгруппой ИТ-инфраструктуры в СберМаркете. В работе мы широко используем Kafka как шину данных для микросервисов и не раз убедились на практике, что к инструменту важно подобрать правильный подход. Об этом сегодня и поговорим в двух частях — сначала обсудим основы, а в конце статьи будет ссылка на практические задания.

Читать далее
Total votes 41: ↑41 and ↓0+41
Comments15

Как привести очередь из клиентов в B2B? Список рабочих рекомендаций

Level of difficultyEasy
Reading time4 min
Views1.7K

В статье речь идет именно о платных каналах трафика. Подходит тем кто решает задачу поднять количество обращений от клиентов в B2B

Читать далее
Total votes 7: ↑2 and ↓5-3
Comments0

Propan — Python фреймворк для написания микросервисов с использованием брокеров сообщений

Level of difficultyEasy
Reading time4 min
Views11K

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

И все это время меня не покидало чувство некой неудовлетворенности и неполноценности инструментария, который был мне доступен.

Приходя из мира HTTP фреймворков ты чувствуешь себя как будто на костылях - ни тебе hotreload'а, который есть практически в любом wsgi-asgi сервере, хочешь тестировать - поднимай контейнеры окружения или мокай зависимости (особенно удобно в CI, ага), не забудь о реконнектах, логировании, трассировке и тд и тп.

И вот, таская от сервиса к сервису ворох всех этих проблем (и код который эти проблемы решает), до меня дошла гениальная идея: оформить весь однотипный код, общий для всех сервисов в единый пакет!

Так появился на свет фреймворк Propan.

Читать далее
Total votes 31: ↑31 and ↓0+31
Comments23

Как заставить бэкендера писать фронтенд

Level of difficultyEasy
Reading time10 min
Views16K

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

Для начала давайте вспомним, что же это за панели. Панель администрирования (или админка) — это приложение, которое используется для управления и настройки приложения. То есть это такой продукт для продукта. Панели администрирования нужны для различных целей, например, для создания и редактирования контента, настройки параметров продукта или управления пользователями.

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

А теперь вы готовы погрузиться в эту кроличью нору.

Читать далее
Total votes 24: ↑21 and ↓3+23
Comments70

Wireshark — подробное руководство по началу использования

Level of difficultyMedium
Reading time8 min
Views178K

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети. Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

Читать далее
Total votes 32: ↑30 and ↓2+36
Comments21

Что не так с OpenAPI?

Level of difficultyHard
Reading time7 min
Views35K

Как мы боролись с документированием API на наших проектах, и как мы немного сошли с ума

У вас на проекте порядок с документацией на API? Скорее всего нет. И в нашей компании порядка не было.

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

Читать далее
Total votes 55: ↑47 and ↓8+50
Comments100

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity

Specialization

Backend Developer
Middle
From 150,000 ₽
Git
OOP
Python
PostgreSQL
Linux
Django
Celery
Bash
Redis
SQL