Pull to refresh
2
0
Send message

Пишем свой Google, или асинхронный краулер с rate limits на Python

Reading time11 min
Views13K

Меня зовут Александр, я руковожу backend-разработкой в КТS. Сегодня расскажу, как написать асинхронный краулер.

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

Статья написана по мотивам вебинара, который мы провели в рамках нового курса «Асинхронное программирование на Python для начинающих». Курс стартует 18 октября, поэтому, если вам интересно — загляните посмотреть.

Что будет в статье:

1. Цель
2. Исходный код
3. Планировщик
4. Задача для краулера
5. Пробный запуск
6. Промежуточный итог
7. Функции put и join
8. Semaphore
9. Остановка фонового планировщика
10. Работа краулера на примере обкачки нашего блога на Хабре
11. Заключение

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

FVWA (Flask Vulnerable Web Application)

Level of difficultyEasy
Reading time34 min
Views4.4K

Дорогие друзья, добро пожаловать в нашу веб-лабораторию! Мы создали эту лабораторию с одной целью — помочь начинающим ИБ-специалистам ознакомиться с основными уязвимостями в веб-приложениях.

Приложение содержит несколько заданий, в каждом из которых реализован некоторый изъян в безопасности (будь то слабый пароль, SQL-инъекция или XXE). Вы смело можете искать нестандартные пути решения, знакомиться с новыми для себя средствами анализа защищённости веб-приложений, пробовать различные полезные нагрузки и, главное, смотреть исходный код, позволяющий увидеть причину возникновения обнаруженной вами уязвимости.
Мы сделали минималистичную борду для сдачи флагов, а это значит, что вы сможете поделиться своими результатами с другими энтузиастами, обсудить интересные находки или поделиться способом решения)

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

Исходники на GitHub: смотреть

К лаборатории!
Total votes 6: ↑6 and ↓0+6
Comments0

Решето Эратосфена за O(n). Доказательство

Reading time4 min
Views18K
В комментариях к одному из прошлых постов о решете Эратосфена был упомянут этот короткий алгоритм из Википедии:

Алгоритм 1:

1: для i := 2, 3, 4, ..., до n: 
2:  если lp[i] = 0:
3:       lp[i] := i
4:       pr[] += {i}
5:   для p из pr пока p ≤ lp[i] и p*i ≤ n:
6:       lp[p*i] := p
Результат:
 lp - минимальный простой делитель для кажого числа до n
 pr - список всех простых до n.

Алгоритм простой, но не всем он показался очевидным. Главная же проблема в том, что на Википедии нет доказательства, а ссылка на первоисточник (pdf) содержит довольно сильно отличающийся от приведенного выше алгоритм.

В этом посте я попытаюсь, надеюсь, доступно доказать, что этот алгоритм не только работает, но и делает это за линейную сложность.
Читать дальше →
Total votes 29: ↑28 and ↓1+27
Comments43

Аннотирование повреждений автомобилей для обучения искусственного интеллекта

Level of difficultyEasy
Reading time6 min
Views1.6K

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

Однако обучение систем визуального контроля при помощи ИИ имеет свои сложности, поскольку требует постоянного наполнения высококачественными и разнообразными данными. Из-за расширения области действия таких сервисов на разные регионы стало необходимым получение из каждого региона данных, аннотированных в точности согласно таксономии каждой страховой компании.
Читать дальше →
Total votes 3: ↑3 and ↓0+3
Comments2

Мнение большинства для разметки данных в задачах компьютерного зрения

Level of difficultyMedium
Reading time8 min
Views3.1K

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

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

Инструменты Дата-сайнтиста. Универсальная база

Reading time4 min
Views9.5K

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

Какие инструменты нужны для анализа данных
Total votes 13: ↑11 and ↓2+10
Comments2

Полезные материалы и инструменты для погружения в Flask: выбор сотрудников Selectel

Reading time4 min
Views8.5K

Часто Python-разработчики выбирают Flask в качестве «быстрого старта» для создания веб-приложений. Он прост в использовании и имеет много преимуществ перед другими фреймворками — например, легкий синтаксис, удобные шаблоны и инструменты для гибкой настройки сайтов.

Однако у начинающих могут быть трудности в работе с фреймворком. Чтобы свести их к минимуму и помочь с погружением в Flask, наши коллеги собрали полезные материалы. Сохраняйте подборку в закладки и делитесь своими вариантами в комментариях.
Читать дальше →
Total votes 22: ↑18 and ↓4+19
Comments6

Опенсорс-библиотеки для Python: 40+ вариантов, как упростить жизнь начинающего дата-сайентиста

Level of difficultyEasy
Reading time22 min
Views12K

Для Python существует более 137 тысяч библиотек с открытым исходным кодом, автоматизирующих работу в разных областях — от отдельных рутинных рабочих процессов в компаниях до создания сложных многофункциональных приложений. Одна из самых популярных областей применения «змеиного языка» — наука о данных, а также задачи, связанные с искусственным интеллектом и машинным обучением.

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

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

Декораторы, о которых вам не расскажут

Reading time11 min
Views31K

От переводчика: мне понравился подход к объяснению декораторов, описанный в этой статье, а так как других вариантов перевода я не нашёл, я решил поделиться этим с аудиторией Хабра. Надеюсь что этот текст будет полезен как новичкам, так и опытным программистам.

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

Цель этого краткого руководства — развеять мифы, которые вы слышали о декораторах, и показать вам другие их стороны, о которых вы и не подозревали.

Читать далее
Total votes 42: ↑41 and ↓1+49
Comments12

Первые шаги в импульсных нейронных сетях

Level of difficultyMedium
Reading time21 min
Views15K

Давайте попробуем немного разобраться в теме импульсных нейронных сетей (spiking neural network, SNN). Напишем простую импульсную нейронную сеть, используя только NumPy и Pandas, для классической задачи машинного обучения с использованием кодирования рецептивными полями.

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

Семантическая сегментация на основе архитектуры U-Net и определение расстояния между объектами

Level of difficultyMedium
Reading time7 min
Views13K

Всем привет!

Возвращаясь к бытовому применению нейронных сетей, изначально была идея усовершенствовать модель детекции свободного парковочного места из предыдущей моей статьи (Определение свободного парковочного места с помощью Computer Vision), сделать возможность сегментации дороги, тротуара и исключать из парковочных мест, автомобили, которые стоят на газоне (было несколько гневных комментариев на этот счёт).

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

Модель на базе U-Net архитектуры сегментирует различные объекты (кот, стул, стол, тарелка с котлетами итд) и при сближении двух объектов сегментации (кот - тарелка) модель сигнализирует об этом с помощью телеграмм бота.

Отлично, задача поставлена, теперь реализация!

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

Генерация Лабиринта | Алгоритм Эллера

Level of difficultyEasy
Reading time5 min
Views11K

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

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

VOT Challenge: как мы поучаствовали в соревнованиях по компьютерному зрению

Reading time8 min
Views845

Привет, хабристы. В этой короткой заметке мы хотим рассказать о нашем опыте участия в конкурсе по компьютерному зрению - VOT Challenge 2023, посвященном трекингу объектов на видео. Порефлексируем об ошибках, которые мы допустили и зачем вообще участвовать в этих конкурсах. Это вольный перевод нашей заметки на ACM, если Вам понравится, сходите и на оригинал. Нам будет приятно.

Читать далее
Rating0
Comments1

Алгоритмы поиска простых чисел

Reading time6 min
Views177K
«Самое большое простое число 232582657-1. И я с гордостью утверждаю, что запомнил все его цифры… в двоичной форме».
Карл Померанс

Натуральное число называется простым, если оно имеет только два различных делителя: единицу и само себя. Задача поиска простых чисел не дает покоя математикам уже очень давно. Долгое время прямого практического применения эта проблема не имела, но все изменилось с появлением криптографии с открытым ключом. В этой заметке рассматривается несколько способов поиска простых чисел, как представляющих исключительно академический интерес, так и применяемых сегодня в криптографии.
Читать дальше →
Total votes 28: ↑28 and ↓0+28
Comments12

Алгоритм нахождения простых чисел

Reading time3 min
Views475K

Оптимизация алгоритма нахождения простых чисел


2 3 5 7 11 13 17 19 23 29 31… $250.000…

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

Алгоритм был придуман и тутже реализован на изучаемом языке. Программа запрашивала у пользователя число N и искала все простые числа до N включительно. После первого успешного теста сразу же возникло непреодолимое желание ввести N = «много». Программа работала, но не так быстро как хотелось бы. Естественно, дело было в многочисленных проверках (порядка N*N/2), поэтому пришлось избавиться от лишних. В итоге получилось 5 похожих алгоритмов каждый из которых работал быстре предыдущего. Недавно захотелось их вспомнить и реализовать, но на этот раз на Python.
Читать дальше →
Total votes 88: ↑58 and ↓30+28
Comments64

Задачи третьего этапа олимпиады «IT-Планеты» по PostgreSQL

Reading time13 min
Views9.1K

В шахматы меня когда-то легко обыгрывал восьмибитный компьютер, а действующего чемпиона мира IBM-овский Deep Blue одолел уже в 1997 году. Но игра Го держалась значительно дольше: победить обладателя девятого дана Ли Седоля удалось только в 2016 году компании Гугл с машиной AlphaGo. В Го простые правила, которые, однако, приводят к очень сложным стратегическим построениям. Ровно то, что нужно: простое условие, не дающее намека на то, как справиться с задачей одним SQL-запросом. Тема Го и легла в основу задач финала олимпиады, про которую я уже начал рассказывать в прошлый раз.

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

Поговорим про задачи
Total votes 12: ↑12 and ↓0+12
Comments10

Книга «Python для data science»

Reading time19 min
Views11K
image Привет, Хаброжители!

Python — идеальный выбор для манипулирования и извлечения информации из данных всех видов. «Python для data science» познакомит программистов с питоническим миром анализа данных. Вы научитесь писать код на Python, применяя самые современные методы, для получения, преобразования и анализа данных в управлении бизнесом, маркетинге и поддержке принятия решений.

Познакомьтесь с богатым набором встроенных структур данных Python для выполнения основных операций, а также о надежной экосистемы библиотек с открытым исходным кодом для data science, включая NumPy, pandas, scikit-learn, matplotlib и другие. Научитесь загружать данные в различных форматах, упорядочивать, группировать и агрегировать датасеты, а также создавать графики, карты и другие визуализации. На подробных примерах стройте реальные приложения, в том числе: службу такси, использующую геолокацию, анализ корзины для определения товаров, которые обычно покупаются вместе, а также модель машинного обучения для прогнозирования цен на акции.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments1

Приложение Getcontact светит вашими персональными данными, даже если вы им никогда не пользовались

Level of difficultyEasy
Reading time5 min
Views156K

Getcontact — мобильное приложение, позиционирующее себя как менеджер звонков и блокировщик спама. Появилось в конце 2017-го и стремительно взлетело на первые места магазинов приложений. Создатели сервиса оценивают свою аудиторию в 400+ миллионов пользователей.

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

Читать далее
Total votes 142: ↑137 and ↓5+162
Comments277

Нейронные сети не могут обобщать периодические зависимости. Как это исправить?

Level of difficultyMedium
Reading time15 min
Views4.4K

Изучая нейронные сети все глубже, сталкиваешься с тем, что не ко всем задачам применимы полносвязные глубокие нейронные сети с классическими слоями Linear и слоями активации Relu, Sigmoid, Than и их вариации. Почему не используют остальные функции в качестве активации, например, периодические?
В целом, периодические функции являются одними из основных функций, важными для человеческого общества и естествознания: суточные и годовые циклы в мире диктуются периодическими движениями солнечной системы, графики изменения погоды, показателей мировой экономики также включают периодическую компоненту.

Читать далее
Total votes 17: ↑12 and ↓5+16
Comments6

Простейший бот «на движке» WEB WhatsApp

Level of difficultyMedium
Reading time6 min
Views8.8K

Доброго времени суток всем!

Продолжу изгаляться над Web версией Whatsapp и попробую превратить его в подобие телеграмм-бота. Тем более, что все это бесплатно и не требует никаких внешних сервисов.

Я не буду повторять все действия, которые нужны для для запуска python c необходимыми пакетами, он описаны в моей предыдущей статье: https://habr.com/ru/articles/737990/

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

Теперь опишу суть задумки. Так как нет специализированного сервера, то придётся использовать выделенный компьютер (виртуальную машину, docker-образ & etc). На нём в цикле запускать робота, который будет просматривать группу, где подключены все пользователи бота, и отвечать на их запросы. Данный робот ничего умного не умеет, кроме как отправить назад, в группу текст сообщения с префиксом "Echo:". Но с учетом предыдущего поста, думаю, что можно превратить его в полноценного "ответчика".

А сейчас, подробнее по структуре бота. Он реализован в классе, который называется whatapp(). В нём есть следующие методы:

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

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Junior
Linux
OOP
Python
SQL
Git