Category: Инструменты

07
Янв
2021

Веб-скрейпинг на Python: запускаем парсинг сайтов за 1 час

Парсинг решает кучу практических задач — например, можно отслеживать скидки и сравнивать цены. Простое решение на Python.
— Читать дальше «Веб-скрейпинг на Python: запускаем парсинг сайтов за 1 час»

30
Дек
2020

📊 Что такое Big Data простыми словами

Рассказываем об основных терминах, методах и инструментах, которые используются при анализе больших данных.

О тенденция развития больших данных мы писали в статье «Почему Big Data так быстро развивается?». В новой статье расскажем о применениях больших данных простыми словами.

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

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

<a href="https://thinkandsell.com/wp-content/uploads/2017/07/big-data-marketing.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

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

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

Как классифицируются большие данные?

Выделим три категории:

  • Структурированные данные, имеющие связанную с ними структуру таблиц и отношений. Например, хранящаяся в СУБД информация, файлы CSV или таблицы Excel.
  • Полуструктурированные (слабоструктурированные) данные не соответствуют строгой структуре таблиц и отношений, но имеют другие маркеры для отделения семантических элементов и обеспечения иерархической структуры записей и полей. Например, информация в электронных письмах и файлах журналов.
  • Неструктурированные данные вообще не имеют никакой связанной с ними структуры, либо не организованы в установленном порядке. Обычно это текст на естественном языке, файлы изображений, аудиофайлы и видеофайлы.
<a href="https://www.google.com/url?sa=i&amp;url=https%3A%2F%2Fwww.msab.com%2F2020%2F03%2F09%2Fbig-data-in-digital-forensics-the-challenges-impact-and-solutions%2F&amp;psig=AOvVaw3LtOCEJLprXk_tb1j89SAW&amp;ust=1609341125999000&amp;source=images&amp;cd=vfe&amp;ved=0CAIQjRxqFwoTCPjK6oS98-0CFQAAAAAdAAAAABAD" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Характеристики больших данных

Большие данные характеризуются четырьмя правилами (англ. 4 V’s of Big Data: Volume, Velocity, Variety, Veracity):

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

Традиционный подход к хранению и обработке больших данных

При традиционном подходе данные, которые генерируются в организациях, подаются в систему ETL (от англ. Extract, Transform and Load). Система ETL извлекает информацию, преобразовывает и загружает в базу данных. Как только этот процесс будет завершен, конечные пользователи смогут выполнять различные операции, вроде создание отчетов и запуска аналитических процедур.

По мере роста объема данных, становится сложнее ими управлять и тяжелее обрабатывать их с помощью традиционного подхода. К его основным недостаткам относятся:

  • Дорогостоящая система, которая требует больших инвестиций при внедрении или модернизации, и которую малые и средние компании не смогут себе позволить.
  • По мере роста объема данных масштабирование системы становится сложной задачей.
  • Для обработки и извлечения ценной информации из данных требуется много времени, поскольку инфраструктура разработана и построена на основе устаревших вычислительных систем.
<a href="https://www.d3vtech.com/assets/images/insights/what-is-data-science.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Термины

Облачные Вычисления

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

Прогнозная Аналитика

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

Описательная Аналитика

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

Базы данных

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

Хранилище Данных

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

Бизнес-аналитика

Бизнес-аналитика (BI) – это набор инструментов, технологий и концепций, которые поддерживают бизнес, предоставляя исторические, текущие и прогнозные представления о его деятельности. BI включает в себя интерактивную аналитическую обработку (англ. OLAP, online analytical processing), конкурентную разведку, бенчмаркинг, отчетность и другие подходы к управлению бизнесом.

Apache Hadoop

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

Apache Spark

Apache Spark – это мощный процессорный движок с открытым исходным кодом, основанный на скорости, простоте использования и сложной аналитике, с API-интерфейсами на Java, Scala, Python, R и SQL. Spark запускает программы в 100 раз быстрее, чем Apache Hadoop MapReduce в памяти, или в 10 раз быстрее на диске. Его можно использовать для создания приложений данных в виде библиотеки или для выполнения специального анализа в интерактивном режиме. Spark поддерживает стек библиотек, включая SQL, фреймы данных и наборы данных, MLlib для машинного обучения, GraphX для обработки графиков и потоковую передачу.

Интернет вещей

Интернет вещей (IoT) – это растущий источник больших данных. IoT – это концепция, позволяющая осуществлять интернет-коммуникацию между физическими объектами, датчиками и контроллерами.

Машинное Обучение

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

Интеллектуальный Анализ Данных

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

<a href="https://cdn.datafloq.com/cache/blog_pictures/878x531/big-data-analytics-paving-path-businesses-decision.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Где применяются большие данные

Аналитика больших данных применяется в самых разных областях. Перечислим некоторые из них:

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

Если вы хотите освоить новую профессию или повысить квалификацию в сфере Big Data, стоит обратить внимание на курс факультета аналитики Big Data онлайн-университета GeekBrains. Программа включает основательную математическую подготовку, изучение языка Python и получение навыков практической работы с базами данных. Также изучаются Hadoop и Apache Spark – востребованные инструменты для работы с большими данными. Курс ориентирован на применение машинного обучения в бизнесе и построен по принципам практической работы над проектами с ведущими специалистами отрасли и личным помощником-куратором.

27
Дек
2020

😢 Дорогостоящие ошибки: почему нам пришлось отказаться от Firebase

Печальный рассказ о том, как из-за неправильного выбора инструмента пропал результат трехлетней работы.

Статья публикуется в переводе, автор оригинального текста – Mohammad Faisa…

16
Дек
2020

Интенсив «Станьте хакером на Python за 3 дня»

Освойте базовые принципы работы на языке Python и создайте утилиту для автоматического подбора паролей.
— Читать дальше «Интенсив «Станьте хакером на Python за 3 дня»»

11
Дек
2020

Изучение Vue.js в 2021 году: дорожная карта разработчика

Хотите начать изучение Vue.js в 2021 году? В этом поможет дорожная карта с включёнными в неё этапами изучения и необходимыми инструментами.
— Читать дальше «Изучение Vue.js в 2021 году: дорожная карта разработчика»

10
Дек
2020

👨‍🔧️ API для QA: учимся тестированию ПО без доступа к коду

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

Инженерам QA (Quality Assurance – обеспечение качества) и QC (Quality Control – контроль качества) нередко приходится проверять работу программного обеспечения и веб-сайтов, не имея доступа к программному коду. Для организации работы и безопасности продукта такой подход проще, ведь не нужно настраивать дополнительные доступы для пользователей или отслеживать отсутствие изменений после каждого тестирования. Для упрощения работы тестировщики используют дополнительные инструменты.

Для проверки коммуникации между установленными на разных устройствах системами используют специальный API (Application Programming Interface). При этом обмен информацией между программами осуществляется в обход пользовательского интерфейса, т. е. идёт функциональное тестирование. При помощи API проверяют функции регистрации нового пользователя, точность передачи и удаления данных, а также другие возможности продукта.

Использование Postman

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

Возможности продукта:

· Создание и отправка запросов

· Изменение параметров запросов.

· Сохранение созданных запросы в коллекции и папках.

· Запуск автоматических тестов на основе коллекций при помощи Collection Runner.

· Изменение окружения для одинаковых запросов.

· Добавление контрольных точек к вызову API.

Создание метода Postman

Стоит отметить, что тестирование при помощи API возможно только при наличии самого API и документации от разработчика. Это позволит точно понимать функции продукта без противостояния инженера QA и программиста на вечную тему: «Это баг!» & «Нет, это фича!».

В статье для начинающих мы рассмотрим ручное тестирование по 4 основным запросам:

· POST – создание ресурса на сервисе, т. е. отправку данных на сервер.

· GET – получение ресурса с сайта.

· PUT – обновление данных на сервере.

· DELETE – удаление ресурса с сайта.

Речь пойдёт об архитектуре REST, часто использующейся для взаимодействия сайтов и приложений. При этом активно применяется JSON (JavaScript Object Notation – текстовый формат обмена данными на языке JavaScript). Практиковать составление запросов можно, используя ресурс reqres.in. Здесь представлены разные Request и ожидаемые результаты (Response). Это и будет тренировочным API с документацией.

При работе с Postman стоит знать о статусах и классах состояний сервера:

Классы состояний сервера
Классы состояний сервера

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

Примеры запросов в Postman для быстрого обучения тестировщика

После запуска в Postman стоит создать папку с коллекцией запросов. Для этого нужно во вкладке Collections нажать на New Collection.


Указываем название коллекции.


Создаем запрос нажатием на Add requests.


POST

Рассмотрим регистрацию пользователя, поэтому указываем соответствующее название и нажимаем на Save to [Collections name].


Выбираем POST.


Указываем url тестируемого сайта.


Прописываем название соответствующего API, в данном случае api/register.


Во вкладке Body выбираем raw.


Далее выбираем формат текста JSON.


Нажатием на Send отправляем данные.


В соответствующем поле видим ожидаемый результат, указанный в документации и статус 200 ОК.


GET

Выполним запрос на получение данных о созданном пользователе, выбираем GET.


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


PUT

Попробуем обновить данные пользователя, для этого создаём update_user.


Выбраем PUT.


Указываем ссылку с url и API, открываем окно для кода.


Отправляем новые данные.


В результате указана обновленная информация и время, когда были внесены изменения. Дополнительно успешность операции подтверждает ответ 200 от сервера.


DELETE

Создаём запрос на удаление пользователя.


Выбираем DELETE.


Указываем полную ссылку на страницу пользователя и отправляем.


Получаем от сервера в ответ статус 204 No Content, информирующий об успешности запроса, но без содержимого, т. е. данные были успешно удалены.


Документация, необходимая тестировщику для обучения

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

***

Разобраться с нюансами профессии QA и QC, а также получить необходимые знания и изучить инструменты можно на курсе по тестированию ПО от GeekBrains. Вебинары проводят практикующие специалисты, которые не только помогут студентам стать тестировщиками с нуля, но и подскажут, как составить резюме и получить работу.

07
Дек
2020

🎥 Создаём рекомендательный алгоритм для YouTube, чтобы не тратить время зря

YouTube API и Amazon AWS Lambda можно использовать для создания собственного алгоритма выбора видео, чтобы не тратить время на просмотр предложенного мусора. Рассказываем как.

Создаем собственный алгоритм YouTube (чтобы не тратить время зря)

Я люблю смотреть на YouTube видео, которые существенно улучшают мою жизнь. К сожалению, алгоритм YouTube на это не согласен: он обожает подсовывать мне “ловушки кликов” и прочий мусор.

Здесь нет ничего удивительного – алгоритм ставит на первое место количество кликов и время просмотров.

Поэтому я поставил перед собой задачу: смогу ли я написать код, который автоматически найдет полезные видео, покончив с зависимостью от алгоритма YouTube?

И вот чего я добился.

Самый лучший план

Я начал с попытки представить, что бы мне хотелось получить от собственного инструмента. Я хотел, чтобы он:

  1. Ранжировал видео по ожидаемой привлекательности для меня и
  2. Автоматически присылал мне избранные видео, из которых я мог бы выбирать.

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


Я знал, что мне потребуется YouTube API для получения информации о видео. Затем я создал бы процедуру, обрабатывающую эту информацию для ранжирования видео. В качестве последнего шага я планировал установить автоматическую рассылку списков самых лучших видео самому себе с помощью AWS Lambda.

Однако все закончилось не совсем так, как ожидалось. (Если вы хотите пропустить историю и сразу увидеть финальный код, вам сюда).

Путешествие по YouTube API

Я хотел найти метрики, которые можно было бы использовать для ранжирования видео в терминах их привлекательности для меня.

Я изучил документацию YouTube и узнал, что можно получить информацию на уровне видео (название, дата публикации, количество просмотров, уменьшенное изображение и т.д.) и на уровне канала (количество подписчиков, комментариев, просмотров, плейлисты канала и пр.)

Увидев все это, я получил уверенность, что смогу применить эту информацию для определения метрик и ранжирования видео.

Я получил код API через консоль разработчика и скопировал его в свой скрипт Python. Это позволяет инициализировать вызов API и получать результаты следующими строками кода:

        api_key = 'AIzpSyAq3L9DiPK0KxrGBbdY7wNN7kfPbm_hsPg'  # Введите свой ключ API вместо этого

youtube_api = build('youtube', 'v3', developerKey = api_key)

results = youtube_api.search().list(q=search_terms, part='snippet', type='video', 
                                order='viewCount', maxResults=50).execute()
    

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

        publishedAt = results['items'][0]['snippet']['publishedAt']
    

Здесь можно найти полезную серию видео, демонстрирующих весь процесс использования YouTube API.

Находим полезные видео: определение формулы

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

Это был сложный вопрос. Что делает видео хорошим? Количество просмотров? Количество комментариев? Количество подписчиков канала?

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

Однако, есть несколько моментов, которые общее количество просмотров не учитывает:

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

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

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

Я протестировал ранжирование, основанное исключительно на отношении просмотров к подписчикам (т.е. делим количество просмотров на количество подписчиков).

        # Функция для подсчета количества просмотров по отношению к подписчикам
def view_to_sub_ratio(viewcount, num_subscribers):
    if num_subscribers == 0:
        return 0
    else:
        ratio = viewcount / num_subscribers
        return ratio
    

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

Первое видео выглядит потенциально интересным, а вот второе и третье – совсем не то, что я искал
Первое видео выглядит потенциально интересным, а вот второе и третье – совсем не то, что я искал

Я предпринял кое-какие попытки устранить подобные крайние случаи:

  • Установил минимальное количество просмотров в 5000.
  • Установил максимальное значение соотношения количества просмотров к количеству подписчиков в 5.
        # Убираем крайние случаи (низкое количество просмотров или подписчиков
def custom_score(viewcount, ratio, days_since_published):
    ratio = min(ratio, 5)
    score = (viewcount * ratio)
    return score
    

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

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

Я планировал запускать этот код раз в неделю, так что я решил ограничить поиск видео теми, которые были опубликованы за последние 7 дней:

        def get_start_date_string(search_period_days):
    """Returns string for date at start of search period."""
    search_start_date = datetime.today() - timedelta(search_period_days)
    date_string = datetime(year=search_start_date.year,month=search_start_date.month,
                           day=search_start_date.day).strftime('%Y-%m-%dT%H:%M:%SZ')
    return date_string

date_string = vf.get_start_date_string(7)
results = youtube_api.search().list(q=search_terms, part='snippet',
                              type='video', order='viewCount', maxResults=50,
                              publishedAfter=date_string).execute()
    

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

        def custom_score(viewcount, ratio, days_since_published):
    ratio = min(ratio, 5)
    score = (viewcount * ratio) / days_since_published
    return score
    

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

videoValue=Views∗min(ViewToSubscriberRatio,5)DaysSincePublished

Тестирование моего нового инструмента

Сначала я протестировал его с запросом термина “medical school” и получил следующие результаты:


Затем я пошел на YouTube и вручную поискал там видео, относящиеся к медицине и обучению медицине. Оказалось, что мой инструмент захватил все видео, которые мне было бы интересно посмотреть. Особенно мне понравилось второе видео, от доктора Кевина Джаббала.

Я протестировал с другим условием поиска, “productivity”, и результаты снова меня порадовали.


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

Несколько месяцев назад OpenAI выложила действительно интересную новую нейронную сеть, называемую “GPT-3”. Я решил протестировать мой поисковик видео, передав в качестве критерия поиска “GPT-3”, и нашел вот это видео:

Источник: https://www.youtube.com/watch?v=wx4GQUXOHIQ

Это интересное видео от создателя, имеющего всего несколько тысяч подписчиков

Если бы я выполнил такой же поиск на YouTube, мне пришлось бы прокрутить все видео от крупных каналов, прежде чем я нашел бы это видео на 31-м месте.

Видео про GPT-3 от каналов с большой аудиторией
Видео про GPT-3 от каналов с большой аудиторией

С помощью кода Video Finder, который я написал, намного проще находить эти интересные видео, содержащие новые перспективы.

За последние несколько месяцев я перепробовал множество условий поиска видео, основанных на моих интересах – например, ‘artificial intelligence’, ‘medical AI’ и ‘Python programming’. Практически всегда в первой пятерке предложений Video Finder’а было хотя бы одно интересное видео.

Запускаем рабочий процесс

Я причесал весь свой код и выложил его на GitHub.

На высоком уровне, теперь мой код работал примерно так:

  1. Используем условия поиска, период поиска и ключ API для получения информации о видео с YouTube.
  2. Рассчитываем “метрику интересности” для видео.
  3. Используем “функцию ценности” для ранжирования этих видео по предполагаемой интересности.
  4. Сохраняем интересующую нас информацию в DataFrame.
  5. Печатаем информацию (включая ссылки) о 5 лучших видео в консоль.

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

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

Однако этот план не сработал.

Это была моя первая попытка использовать Lambda, и как я ни старался, я не смог заставить все импортированные библиотеки работать одновременно. Чтобы выполняться, коду требовался почтовый клиент boto3, OAuth для вызова API, Pandas для хранения результатов, и множество модулей, от которых они зависят. Обычно установка этих пакетов довольно проста, но на Lambda возникли дополнительные сложности. Во-первых, там есть лимиты на загрузку файлов, так что мне пришлось упаковать библиотеки, а потом распаковать их после загрузки. Во-вторых, AWS Lambda использует собственную версию Linux, которая затруднила использование правильных библиотек с кросс-платформной совместимостью. В-третьих, мой Mac вел себя странно с ее виртуальными окружениями.

Потратив около 10-15 часов на поиск советов на StackOverflow, загрузку и повторную загрузку различных codebase и совещания с несколькими друзьями, я так и не смог заставить все это заработать. Так что, в конце концов я решил сдаться (если у вас есть какие-нибудь хорошие идеи, сообщите мне!)

Вместо этого, я реализовал план Б: запускать скрипт вручную на своем локальном компьютере раз в неделю (после автоматического напоминания через email). Честно говоря, это не конец света.

Итоговые мысли

В целом, это был действительно забавный проект. Я научился использовать YouTube API, познакомился с AWS Lambda и создал инструмент, который могу использовать в дальнейшем.

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

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

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

Возможные дальнейшие шаги

В целом, проект еще достаточно сырой, и здесь многое можно сделать:

  1. Метрика для ранжирования видео довольно груба, и я мог бы ее улучшить. Естественным следующим шагом было бы встроить соотношение лайков и дизлайков.
  2. При задании условий поиска также много условностей. Если строка поиска не содержится в названии видео или его описании, видео не будет выбрано. Я мог бы исследовать способы обойти эту проблему.
  3. Я мог также создать интерфейс, позволяющий пользователю просто вводить условия поиска и период поиска. Это сделало бы инструмент более доступным, а также позволило бы пользователям смотреть видео, не заходя на youtube.com.
  4. В настоящее время код работает довольно медленно. Я не приложил особых усилий к его оптимизации и ускорению, учитывая, что я собирался запускать этот код всего раз в неделю. Но есть несколько очевидных мест, где можно было бы повысить эффективность.

Полезные ссылки

Похожие проекты:

YouTube API:

AWS Lambda:

04
Дек
2020

Как стать React-разработчиком в 2021: дорожная карта

Хотите знать, как стать React-разработчиком в 2021? Держите дорожную карту, которая собрала must-have темы и инструменты.
— Читать дальше «Как стать React-разработчиком в 2021: дорожная карта»

03
Дек
2020

🎨 5 лучших инструментов веб-разработчика: учимся делать сайты без погружения в код

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

Для чего нужны инструменты веб-разработки?

Веб-разработчики давно отказались от индивидуального кодирования страниц в HTML/CSS, JavaScript, PHP или другом языке, с использованием только текстового редактора. В наши дни доступны платформы, которые помогают во всех этапах процесса вплоть до дизайна.

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

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


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

Sketch – набор инструментов для цифрового дизайна


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

демонстрация работы в Sketch
демонстрация работы в Sketch

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

Sketch поддерживает только OS X, к тому же это коммерческое приложение — ценовая политика предполагает единовременную оплату лицензии на одного пользователя, либо ежемесячную или годовую подписку.

Преимущества:

  • создает простые анимации;
  • есть интерактивные прототипы;
  • поддерживается совместная работа в облаке.

Недостатки:

  • только под OS X.

InVision Cloud – платформа для дизайна цифровых продуктов

принцип работы Prototype
принцип работы Prototype

Список использующих InVision Cloud технологических компаний включает Amazon, SoundCloud, Evernote и Netflix, что подтверждает эффективность платформы для разработки цифровых продуктов.

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

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

Преимущества:

  • есть бесплатная версия;
  • есть набор полезных инструментов;
  • возможность создания прототипа веб-сайта.

Sublime Text – редактор кода, упрощающий продвинутый дизайн сайтов

демонстрация Sublime Text
демонстрация Sublime Text

Sublime Text – популярный редактор кода, который является полезным инструментом для веб-дизайна и доступен для загрузки под Windows, OS X и Linux. К полезным функциям относятся команда GoTo Anything для поиска фрагмента кода, команда Multiple Selections, которая вносит изменения в повторяющиеся разделы кода, и Split Editing для максимизации отображения кода на широкоэкранном мониторе или даже на нескольких мониторах.

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

Преимущества:

  • есть версии для Windows, OS X и Linux;
  • поддерживаются расширенные команды;
  • доступна бесплатная пробная версия.

Недостатки:

  • нет версии для мобильных платформ.

Foundation

установка и работа в Foundation

Что-либо спроектировать проще, когда заложены основы. Foundation использует этот подход, предлагая «семейство гибких интерфейсных фреймворков», которые можно применять для дизайна веб-сайтов и электронной почты. Каждый из них нетрудно настроить для получения нужного вида. В списке использующих этот инструмент сайтов есть несколько серьезных «тяжеловесов», включая Disney, HP и Adobe.

Foundation предлагает серию шаблонов HTML, каждый из которых оптимизирован для конкретного приложения, например, для блога или сайта о недвижимости. Они могут быть добавлено к веб-сайту с помощью «строительных блоков», например, в виде полноэкранной страницы, формы подписки, блока рейтинга или закругленных кнопок социальных сетей. Варианты обширны. Для освоения инструмента пользователям предлагается серия вебинаров под названием «Базовые классы». Цена непрозрачная, но есть бесплатная демка. Опытные пользователи предупреждают, что начинающим предстоит крутая кривая обучения.

Преимущества:

  • фреймворк для упрощения дизайна;
  • настраиваемые строительные блоки;

Недостатки:

  • непрозрачное ценообразование;
  • крутая кривая обучения

Chrome DevTools – инструмент для веб-разработчиков


Chrome по-прежнему остается популярным выбором для пользователей Интернета: он также включает инструменты разработчика прямо в браузере. Они предназначены для отладки JavaScript, применения стилей к элементам HTML, вывода сообщений о работе страницы, а также оптимизации скорости веб-сайта.

В одной из предыдущих статей мы уже рассмотрели 14 наиболее полезных особенностей Chrome DevTools.

К сожалению этот бесценный набор инструментов ограничен одним браузером – он не всегда подходит для прочих, даже основанных на Chromium.

Использование инструментов разработчика Chrome бесплатно, а поддержка предоставляется через активное сообщество DevTools.

Преимущества:

  • бесплатность;
  • доступность.

Недостатки:

  • инструменты оптимизированы только для одного браузера.

Кому и для чего пригодится

Sketch будет полезен использующим компьютеры Apple разработчиком для создания дизайна и верстки сайтов. InVision Cloud подойдет для дизайна, прототипирования и модульного создания сайтов. Sublime Text облегчит работу с кодом сайта или веб-приложения. Foundation поможет подобрать и кастомизировать шаблон HTML. Chrome DevTools хороши тестирования и отладки сайта в браузере Chrome.

***

Автоматизированные помощники хороши, но это именно помощники – знания матчасти они не заменят. Если вы только осваиваете профессию, стоит обратить внимание на курс по веб-разработке от Geek Brains и Mail.ru. Начав с основ, здесь можно получить необходимые для старта карьеры знания. Актуальная программа, 2 – 3 вебинара в неделю и 2 месяца стажировки. Под руководством опытных преподавателей студенты наработают необходимую для дальнейшего развития в сфере IT базу и получат помощь в трудоустройстве.

03
Дек
2020

Что такое доступность сайта и как её проверить

Разобрались, что такое доступность сайта, зачем об этом заботиться разработчикам и как проверять с помощью Chrome DevTools.
— Читать дальше «Что такое доступность сайта и как её проверить»

30
Ноя
2020

🐛 Типовые ошибки в разработке UI: найти и обезвредить

Умение найти баг – не всегда точная наука, но некоторые приемы будущему инженеру по QA стоит освоить в процессе обучения. Рассматриваем типовые ошибки разработчиков интерфейса.

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

UX (user experience) – пользовательский опыт, и это про удобство работы с ПО. Про то, какой путь пройдет пользователь для решения своего вопроса.

UI (user interface) – пользовательский интерфейс – про взаимодействие с продуктом. UI сфокусирован на том, как продукт выглядит на внешнем уровне.

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


Навигация должна быть логичной

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

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

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

Картинку придумали, а вариативность забыли

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

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

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

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


Разработка – это не только логичный код, но еще и дружелюбный

Реализовали какой-то код – протестируйте. Все ли удобно нажимать, все ли реагирует так, как заложено в ТЗ, соответствует ли результат ожиданиям? Вот чек-лист для разработчика, по которому сразу можно провести проверку:

  1. Есть реакция на нажатие у кликабельных элементов, приложение адекватно реагирует на действия пользователя и все идет по плану.
  2. Нет реакции у тех элементов, где нажатие не предусмотрено.
  3. Скролл работает.
  4. Экранная клавиатура появляется и исчезает в соответствии с заложенной логикой.
  5. Ввод текста начинается с заглавной буквы.
  6. Есть фокус на следующем поле ввода при нажатии Enter, т.е. когда вы ввели текст в одном поле и нажали “Готово”, приложение автоматически переходит на другое.
  7. Программная отправка формы работает, никаких дополнительных действией не требуется.
  8. Если нужно показать какой-то прогресс, есть специальный индикатор .

Чтобы сделать что-то нужное для пользователя, нужно думать как пользователь.

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

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

Для этого существует подход Jobs To Be Done (Работа, которая должна быть выполнена): ваше приложение помогает выполнить работу? Если нет, нужно поработать ещё. Понимая задачу пользователя, гораздо проще сделать эффективное решение.


Правильно выстроенные приоритеты – залог успеха

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

Правила успешных “не”:

  1. Не добавлять иллюстрации ради иллюстраций.
  2. Не разрабатывать ненужную функциональность.
  3. Не встраивать регистрационные формы на каждый клик, не предложив что-то существенное взамен.
  4. Не прятать строку поиска.
  5. Не игнорировать оптимизацию.
  6. Не терять связи с пользователями.

Когда ошибки в UI/UX допустимы?

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

Как избежать ошибок?

  • Создавайте чек-листы.
  • Используйте элементы визуального тестирования.
  • Соберите свой тестовый стенд.
  • Тестируйте свои разработки внутри компании.
  • Развивайтесь и создавайте собственную базу знаний.

Подробнее об инструментах тестировщика мы уже писали.

***

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

30
Ноя
2020

🐧 Lynis, Lunar, LSAT и LBSA: изучаем набор утилит для аудита безопасности Linux

Применение автоматизированных методов аудита – часть процесса обучения специалиста по кибербезопасности. Рассказываем об утилитах для Linux, помогающих выявить слабые места в системе.

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

Кстати, новичкам стоит ознакомиться с нашим списком ресурсов для изучения Linux.

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

Lynis

результаты проверки Lynis
результаты проверки Lynis

Lynis – это инструмент аудита для UNIX-подобных систем, таких как Linux, OS X, Free/Net/Open BSD и других. Основная цель утилиты – проверить средства защиты и дать советы по настройке безопасности. Lynis сканирует общую информацию о системе, уязвимые пакеты программного обеспечения и возможные проблемы с конфигурацией.

Поддерживаемые дистрибутивы Linux

  • CentOS;
  • Debian;
  • Fedora;
  • OEL;
  • openSUSE;
  • RHEL;
  • Ubuntu;
запуск Lynis
запуск Lynis

Для чего предназначен

  • автоматизированный аудит безопасности;
  • тестирование на соответствие ISO27001, PCI-DSS, HIPAA;
  • обнаружение уязвимости;
  • конфигурирование и управление активами;
  • управление исправлениями для программного обеспечения;
  • укрепление системы;
  • тестирование на проникновение;
  • обнаружения вторжений.

Установка и запуск

Установка через YUM

        $ yum install lynis
    

Debian-подобные

        $ apt-get install lynis
    

openSUSE

        $ zypper install lynis
    

Установка через Git

        $ cd /usr/local
$ git clone https://github.com/CISOfy/lynis
$ cd lynis
    

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

        $ lynis audit system
    
Lynis в работе
Lynis в работе

Полезные опции

-checkall, -c – запуск сканирования;

-check-update – проверка обновлений;

-cronjob – запускает Lynis через планировщик;

-quick, -Q – не ждать ввода пользователя, кроме ошибок;

-version, -V – выводит версию Lynis.

Lunar

<span>LUNAR</span>
LUNAR

LUNAR – сокращение от Lockdown UNix Auditing and Reporting. Этот сценарий генерирует отчет аудита безопасности хоста UNIX. Он основан на CIS и других фреймворках.

Поддерживаемые ОС и дистрибутивы Linux

  • RHEL 5,6,7;
  • Centos 5,6,7;
  • Scientific Linux;
  • SLES 10,11,12;
  • Debian;
  • Ubuntu;
  • Amazon Linux;
  • Solaris (6,7,8,9,10 и 11);
  • Mac OS X.

Утилита также поддерживает облачную платформу Amazone и контейнеры Docker.

Для чего предназначен

LUNAR обычно используется для оценки безопасности, самооценки или повышения безопасности системы.

Установка и запуск

LUNAR это сценарий командной строки sh, поэтому особых усилий по установке он не требует. Качаем архив с Github, распаковываем в соответствующую директорию и запускаем из командной строки.

        $ ./lunar.sh -a
    

Рекомендуется запускать в режиме аудита (параметр -a).

Lunar в работе
Lunar в работе

Полезные опции

Будьте внимательны и осторожны при запуске в режиме исправлений! У автора статьи при запуске в режиме изменений скрипт выкинул основного пользователя из группы sudoers, в результате пришлось грузиться из recovery mode и откатываться из бэкапа, благо lunar сам создает их перед внесением изменений.

Список параметров:

-a – запуск в режиме аудита (в систему не вносятся изменения);

-v – подробный режим [используется с -a и -A];

-d – просмотр предлагаемых изменений системы до их внесения в конфиги;

-s – запуск в выборочном режиме;

-l – запуск в режиме блокировки (внесение изменений);

-S – список всех функций UNIX, доступных для выборочного режима;

-W – список всех функций AWS, доступных для выборочного режима;

-D – список всех функций Docker, доступных для выборочного режима;

-Z – показать изменения, ранее внесенные в систему;

-b – список файлов резервных копий;

-n – выводить доступные сегменты кода;

-u – восстановление из резервной копии.

LSAT

Linux security auditing tool (LSAT) имеет модульную конструкцию, поэтому можно быстро добавлять новые функции. LSAT проверяет записи inetd, просматривает ненужные пакеты RPM и проверяет версии ядра.

Поддерживаемые ОС и дистрибутивы Linux

  • Gentoo;
  • RedHat;
  • Debian;
  • Mandrake;
  • Linux Mint 18;
  • CentOS 7
  • Sparc: Sun OS (2.x);
  • Redhat sparc, Mandrake Sparc;
  • Apple OS X;
  • Должен нормально работать под Slackware и другими дистрибутивами Linux.

Для чего предназначен

Комплексный аудит безопасности ОС.

Установка и запуск

LSAT устанавливается с помощью сборки из исходников и имеет заранее заготовленный автоконфиг — autoconf.

        $ ./configure
$ make

    


Для установки в систему на /usr/local/bin

        $ make install
    
запуск LSAT для Debian
запуск LSAT для Debian

Полезные опции

-d diff – текущий и старый md5, вывод в lsatmd5.diff;

-m – тест для конкретного дистрибутива:

  • redhat;
  • debian;
  • mandrake;
  • solaris;
  • gentoo;
  • macosx.

-a – показать расширенную страницу справки;

-o – имя выходного файла, по умолчанию lsat.out

-r – проверить целостность rpm, только redhat или mandrake;

-s – тихий режим;

-v – подробный вывод;

-w – выходной файл в формате HTML;

-x – исключить модули из списка файлов из проверок.

LBSA

Это базовый сценарий аудита безопасности Linux для непрерывного применения политик (CPE). Запускать его можно из командной строки от имени пользователя root или на регулярной основе с использованием планировщика.

Для чего предназначен

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

В настоящее время скрипт ищет:

  • распространенные уязвимости безопасности в настройке учетной записи для входа в Linux;
  • распространенные уязвимости безопасности в настройках SSH;
  • распространенные уязвимости безопасности во временных файловых системах и файловых системах с общей памятью (например: /tmp, /var/tmp, /dev/shm);
  • рекомендации по разрешениям файловой системы, которые могут усилить защиту большинства систем, не влияя на нормальную работу;
  • Heartbeat и разрешения файла конфигурации DRBD;

Использование

LBSA в работе
LBSA в работе

Полную версию скрипта можно взять на официальной странице.

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

Если рекомендаций нет, сценарий просто выводит единственную строку с сообщением «System Checks Completed». Этот сценарий должен работать «из коробки» и рекомендовать лишь несколько небольших, но важных изменений в системе, которые должно быть легко внести.

В заключении

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

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

***

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

25
Ноя
2020

Интенсив «Стань хакером на Java за 3 дня»

Yаучитесь основам популярного языка программирования, попробуете себя в разработке и напишете программу для мониторинга рабочего стола.
— Читать дальше «Интенсив «Стань хакером на Java за 3 дня»»

24
Ноя
2020

Конференция DartUP 2020

В программе 2 потока докладов по Dart и Flutter, соревнования и активности для Dart-энтузиастов, а также общение с экспертами в Spatial chat.
— Читать дальше «Конференция DartUP 2020»

23
Ноя
2020

🖥🛠❓Брендовый неттоп vs самосборный мини-ПК: выбираем компьютер для программиста

Собрать компактный компьютер для программирования самому или взять готовый? Наш сравнительный обзор поможет выбрать. В него вошли восемнадцать неттопов и комплектующие для системника Mini ATX.

21
Ноя
2020

🐍 10 классных функций Python 3.9

Новая версия популярного языка программирования вышла не так давно. Рассмотрим наиболее интересные возможности Python 3.9, на которые стоит обратить внимание как новичкам, так и профессионалам.

Перевод подготовлен совместно с факультетом Python-разработки GeekBrains. Автор оригинального текста Farhad Malik.

***

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

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

***

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

Давайте разбираться с нововведениями.

1. Операторы обновления и слияния словарей

Во встроенный класс dict добавлено два оператора: | и |=.

| используется для объединения словарей, |= – для их обновления.

PEP 584

Код:

Объединение: |

        >>> a = {‘farhad’: 1, 'blog’: 2, 'python’: 3}

>>> b = {’farhad’: 'malik’, 'topic’: 'python3.9’}

>>> a | b

{’blog’: 2, 'python’: 3, ’farhad’:’malik’, 'topic’: 'python3.9’}

>>> b | a

{’farhad’: 1,’blog’: 2, 'python’: 3, 'topic’:’python3.9’ }
    

Обновление: |=

        >>> a |= b

>>> a

{’blog’: 2, 'python’: 3,’farhad’:’malik’}
    

В случае конфликта ключей верным будет считаться крайнее правое значение. Это соответствует поведению аналогичных операций dict.

Более детально

Как мы видим, добавлены новые операторы | и |=.

| можно рассматривать как оператор + (сложения) в списках, а |= – как оператор += (расширения).

В Python 3.8 есть несколько способов слияния и обновления словарей.

К примеру, можно использовать first_dict.update(second_dict). Проблема этого метода в том, что он изменит first_dict на месте. Чтобы этого избежать, нужно объявить временную переменную, сохранить в ней first_dict, а затем выполнить операцию обновления. Но появляется лишняя строка кода, просто чтобы оператор объединения/обновления работал.

Также мы можем применить {**first_dict, **second_dict}. Сложность этого метода в том, что его трудно обнаружить и сложнее понять смысл кода. Кроме того, исключаются типы mapping и учитывается только тип dict. Например, если first_dict – это defaultdict, а second_dict – это тип dict, то программа завершится ошибкой.

Этот способ не работает с подклассами dict, которые содержат функцию _init_.

Наконец, библиотека collections содержит функцию ChainMap. Она может принять два словаря, как ChainMap (first_dict, second_dict), и вернуть объединенный словарь, но об этой библиотеке знают немногие.

***

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

https://www.python.org/dev/peps/pep-0584

2. Новый высокопроизводительный парсер на основе PEG

С Python 3.9 можно отказаться от использования LL (1) в пользу более гибкого и стабильного синтаксического анализатора на основе PEG.

PEP: 617

Более детально

Текущий парсер CPython основан на LL (1). Грамматика основана на LL (1), что позволяет парсить ее с помощью LL (1) анализатора. Парсер LL (1) работает сверху вниз и анализирует входные данные слева направо. Грамматика является контекстно-свободной, поэтому контекст токенов не учитывается.

Python 3.9 предлагает заменить его новым парсером на основе PEG, который снимет ограничения Python грамматики LL (1). Будет удален ряд хаков, существующих в текущем синтаксическом анализаторе. В долгосрочной перспективе это снизит стоимость обслуживания.

Несмотря на то, что синтаксические анализаторы и грамматики LL (1) просты в реализации, ограничения не позволяют им выражать общие конструкции естественным образом для разработчика языка и читателя. Парсер смотрит только на один токен вперед, чтобы различать возможности.

Оператор выбора | упорядоченный. Рассмотрим следующее правило:

rule: A|B|C

Контекстно-свободный парсер грамматики LL (1) будет генерировать конструкции, которые при заданной входной строке определят, нужно ли расширять A, B или C. Анализатор PEG отличается. Он проверит, успешна ли первая переменная, и только в случае провала перейдет ко второй или третьей.

Парсер PEG генерирует ровно одно допустимое дерево для строки. Он определенный, в отличие парсер LL (1).

Синтаксический анализатор PEG также напрямую генерирует узлы AST для правила через грамматические действия. За счет этого удается избежать создания промежуточных шагов.

Парсер PEG был тщательно протестирован. У него отлажена производительность. Поэтому для большинства инструкций он расходует примерно 10% от объема памяти и вычислительных ресурсов текущего анализатора. Все благодаря тому, что не создается промежуточное синтаксическое дерево.

***

Я опустил некоторые детали, чтобы не усложнять прочтение статьи. Для получения более подробной информации вы можете ознакомиться с источником.

https://www.python.org/dev/peps/pep-0617

3. Новые строковые функции для удаления префикса и суффикса

К объекту str добавлено две новых функции.

1. Первая удаляет префикс – str.removeprefix(‘префикс’).

2. Вторая удаляет суффикс – str.removesuffix(‘суффикс’).

PEP: 616

Код:

        'farhad_python'.removeprefix('farhad_')

#возвращает python

'farhad_python'.removesuffix('_python')

#возвращает farhad
    

Более детально

Одна из обыденных задач в приложении data science, которое включает в себя манипулирование текстом – удалить префикс/суффикс строк. Добавленные к объекту str функции можно использовать для удаления ненужных префиксов и суффиксов из строки.

Как мы уже знаем, первая функция удаляет префикс. Это str.removeprefix(‘префикс’). Вторая функция удаляет суффикс. Это str.removesuffix(‘суффикс’).

Строка – это набор символов, и каждый символ имеет индекс в строке. Индексы можно использовать вместе с : , чтобы вернуть подмножество строки. Эта функция известна как slice (срез) строки.

Если мы говорим о функциях, они проверяют, начинается ли строка с префикса (заканчивается ли она суффиксом), и если да, то возвращают строку без префикса или после суффикса, используя функцию среза str [:].

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

***

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

https://www.python.org/dev/peps/pep-0616

4. Подсказки типов для встроенных универсальных типов

Аннотирование программ стало проще за счет удаления иерархии параллельных типов в Python.

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

Мы можем использовать встроенные типы коллекций list или dict в качестве универсальных типов вместо использования typing.List или typing.Dict в сигнатуре нашей функции.

Код стал выглядеть чище, а его понимание и объяснение упростилось.

PEP: 585

Более детально

Несмотря на то, что Python – это язык с динамической типизацией, аннотация типов в программе позволяет проводить самоанализ. Впоследствии аннотацию можно использовать для создания API проверки типов во время выполнения.

Как я говорил ранее, в Python 3.9 добавили поддержку универсального синтаксиса во всех стандартных коллекциях, доступных в модуле набора текста.

Универсальный тип – это обычно контейнер, к примеру list. Это тип, который можно параметризовать. Параметризованный тип – это пример универсального дженерика с ожидаемыми типами для элементов контейнера типа list [str].

Мы можем использовать встроенные типы коллекций list или dict в качестве универсальных типов вместо использования typing.List или typing.Dict.

Например, мы могли бы управлять проверкой типов среды выполнения Python, аннотируя код:

        print_value(input: str):

print(input)

# Мы получим уведомление, если входные данные не являются строкой
    

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

Например, мы увидим typing.List, typing.Dictionary вместе со встроенными list, dictionary и т. д. Это позволяет писать код:

        def read_blog_tags(tags: list[str]) -> None:

for tag in tags:

print("Tag Name", tag)
    
***

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

https://www.python.org/dev/peps/pep-0585

5. Поддержка часового пояса IANA в DateTime

Модуль zoneinfo был создан в качестве поддержки базы данных часовых поясов IANA. Эта поддержка была добавлена в стандартную библиотеку.

PEP: 615

Часовые пояса IANA часто называют tz или zone info. Существует много часовых поясов IANA с разными путями поиска для указания часового пояса IANA объекта datetime. Например, мы можем передать имя пути поиска объекту datetime как Continent/City, чтобы установить его tzinfo.

dt = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("Europe/London"))

Если мы передадим неверный ключ, возникнет ошибка zoneinfo.ZoneInfoNotFoundError.

Более детально

Библиотека datetime используется для создания объекта datetime и указания его часового пояса, путем установки свойства tzinfo. Все может обернуться созданием сложных правил часового пояса при использовании базового показателя datetime.tzinfo.

В большинстве случаев нужно просто установить объект и его часовой пояс: UTC, локальный часовой пояс системы, или часовой пояс IANA.

Можно создать объект zoneinfo.ZoneInfo(key), где ключ имеет строковый тип, указывающий путь поиска файла зоны в базе данных часовых поясов системы. Объект zoneinfo.ZoneInfo(key) может быть создан и установлен как свойство tzinfo объекта datetime.

Код:

        from zoneinfo import ZoneInfo

from datetime import datetime

dt = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("America/Los_Angeles"))
    
***

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

https://www.python.org/dev/peps/pep-0615

6. Возможность отмены одновременных фьючерсов.

В concurrent.futures.Executor.shutdown () добавлен новый параметр cancel_futures.

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

До версии 3.9 процесс ожидал их завершения перед завершением работы исполнителя.

Пояснение

Новый параметр cancel_futures был добавлен в ThreadPoolExecutor и ProcessPoolExecutor. Это работает так: если его значение – True, все ожидающие фьючерсы отменяются при вызове функции shutdown ().

При выполнении shutdown () интерпретатор проверяет, не собран ли исполнитель сборщиком мусора. Если он все еще находится в памяти, он получает все ожидающие обработки элементы, а затем отменяет фьючерсы.

Когда не остается незавершенных рабочих элементов, он завершает работу.

***

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

https://bugs.python.org/issue30966

7. Улучшения AsyncIO и многопроцессорности

В библиотеку asyncio и многопроцессорную обработку были внесен ряд улучшений.

Например:

1. Параметр reuse_address asyncio.loop.create_datagram_endpoint () больше не поддерживается из-за серьезных пробелов в безопасности.

2. Добавлены новые сопрограммы: shutdown_default_executor () и asyncio.to_thread (). shutdown_default_executor назначает завершение работы для исполнителя по умолчанию, который ждет завершения ThreadPoolExecutor. asyncio.to_thread () в основном используется для запуска функций, связанных с вводом-выводом, в отдельном потоке, чтобы избежать блокировки цикла событий.

Что касается улучшений библиотеки многопроцессорности, в класс multiprocessing.SimpleQueue был добавлен новый метод close ().

Этот метод точно закрывает очередь. Это гарантирует, что очередь будет закрыта и не останется дольше ожидаемого. Помните, что методы get (), put (), empty () не должны вызываться после закрытия очереди.

***

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

https://bugs.python.org/issue30966

8. Постоянные ошибки импорта пакетов

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

Встроенная функция __ import __ () вызывает ошибку ValueError, а importlib .__ import __ () вызывает ошибку ImportError.

Теперь это исправили. __Import __ () вызывает ImportError вместо ValueError.

***

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

https://bugs.python.org/issue37444

9. Генерация случайных байтов

Еще одна функция, добавленная в версии 3.9 – random.Random.randbytes (). Эта функция может использоваться для генерации случайных байтов.

Можно генерировать случайные числа, но что, если нужно генерировать случайные байты? Раньше разработчикам приходилось для этого проявлять изобретательность. Хотя можно использовать os.getrandom (), os.urandom () или secrets.token_bytes (), но нельзя генерировать псевдослучайные паттерны.

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

В результате был введен метод random.Random.randbytes (). Он также может генерировать случайные байты контролируемым способом.

***

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

https://bugs.python.org/issue40286

10. Исправление функции замены строки

Раньше «» .replace («», s, n) возвращал пустую строку вместо s для всех ненулевых n.

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

В Python 3.9 проблема была устранена, и теперь функция замены совместима с "" .replace ("", s).

Работает она следующим образом: для заданного максимального аргумента вхождения замены, набор символов из строки заменяется новым набором символов:

string.replace(s, old, new[, maxreplace])

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

До этого функция replace имела непоследовательное поведение

        "".replace("", "blog", 1)

Возвращает ''

Ожидалось увидеть blog

"".replace("", "|", 1)

Возвращает ''

Ожидалось увидеть |

"".replace("", "prefix")

Но возвращает 'prefix'
    

Теперь:

        “”.replace(“”,s,n) возвращает s вместо пустой строки для всех ненулевых n
    

В Python 3.9 также был исключен ряд избыточных функций, таких как Py_UNICODE_MATCH.

Если вы хотите узнать больше об этих улучшениях, прочтите официальное руководство здесь.

***

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

18
Ноя
2020

💲🛠 🖥 👍 Лучшие настольные компьютеры для программиста в 2020 году

Мы отобрали 80 моделей комплектующих, из которых можно собрать десктоп для айтишника под разный бюджет и различные задачи. В статью вошли сборки от бюджетной за 33 тыс. руб. до способной тренировать нейронные сети за 200 тыс. руб.

16
Ноя
2020

👨‍💻 Самые востребованные в России ИТ-профессии

Разбираемся по вакансиям на HH.ru, какие специалисты в сфере ИТ нужны работодателям в 2020 году. Выделим четыре наиболее популярных профессии и определим требующийся для резюме технологический стек.

В этом году количество предложений о работе в сфере информационных технологий значительно увеличилось. По итогам первых трех кварталов отрасль занимает 2 место по размещенным вакансиям (на первом традиционно – «Продажи»). Рынок труда в ИТ развивается быстрее общего рынка труда. Декрет о цифровой экономике, развитие технологий, популярность стартапов – все это положительно влияет на индустрию.


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

Перед вами наиболее востребованные специализации, предоставленные сайтом HH.ru в 2020 году.


Разберем первые четыре позиции из этого списка, которые перевалили барьер в 4%.


1. Quality Assurance engineer

QA engineer – это специалист по обеспечению качества, деятельность которого направлена на улучшение процесса разработки ПО и выявление ошибок в работе продукта.

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

В нашей стране различия между должностями QA и тестировщика смазаны, и на практике это одно и то же лицо.

Какие задачи решает QA?

В круг обязанностей QA-инженера входит планирование процесса тестирования, написание тест-кейсов (сценариев тестирования), тестирование функциональности, анализ и оптимизация процесса тестирования и ведение тестовой документации.

Какие навыки требуются QA?

Чтобы стать QA, нужно понимать цикл разработки ПО, изучить теорию и основные инструменты тестирования, иметь хороший уровень английского. Желательно изучить HTML, SQL, CSS – на базовом уровне. Также необходимо иметь широкий ИТ-кругозор, быть внимательным к деталям, обладать аналитическими способностями, уметь моделировать и работать с абстракциями.

Каков самый важный навык?

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


2. Java-разработчик

Java – универсальный объектно-ориентированный язык программирования, который используется в создании веб-приложений (серверной части), мобильных приложений под Android, облачных хранилищ данных, компьютерных игр и т. д.

Что нужно знать?

Java-разработчик должен знать базовые вещи: машинная математика, переменные и типы данных, условные конструкции, логические операции, циклы, методы и т.п. Далее идут более продвинутые темы: коллекции, карты (Map), основы вывода (IO, NIO), методы работы со строками (StringBuilder, StringBuffer), регулярные выражения, Date API, рефлексия и многое другое.Помимо теоретических знаний, у вас должны быть сформированы необходимые навыки написания кода.

Как стать Java-разработчиком?

Совокупность вышеперечисленных разделов Java + ООП в среде джавистов называется Java Core (от англ. “core” – ядро). Если вы хотите освоить эту профессию, начинать нужно именно с ядра.

Также стоит изучить одну из систем управления базами данных (СУБД). Это может быть MySQL или PostgreSQL. Часто работодатели ищут людей со знаниями Hibernate (фреймворк, для работы с ООП и БД) и MVC(Model-View-Controller – паттерн для ускорения разработки проектов)


3. PHP developer

PHP (Hypertext Preprocessor) – скриптовый язык, активно используемый для создания серверной части интернет-ресурсов.

Что нужно знать?

Если вы твёрдо намерены устроиться на должность PHP-разработчика, то первое, что нужно будет изучить – принципы работы протокола HTTP и сервера DNS. Далее пойдут основы языка и знакомство с возможностями последних его версий. Надо будет уметь настраивать веб-серверы Nginx и Apache, а также знать MySQL. PHP и HTML очень тесно связаны, так что знание языка разметки – обязательно.

Каковы дополнительные скилы?

Часто компании требуют от соискателя следующие знания и навыки:

– понимание паттерна MVC;

– владение английским на уровне чтения;

– умение работать с менеджером зависимостей Composer;

– знание Docker и Vagrant

– опыт работы с системой контроля версий Git

– опыт проектирования REST API

– опыт работы с веб-фреймворками (Yii, Laravel, Symfony).


4. Frontend-developer

Фронтенд-программист создаёт клиентскую (пользовательскую) часть интернет-ресурса в тестом сотрудничестве с дизайнерами.

Что нужно знать?

Фундаментальными технологиями для фронтенд-разработки являются HTML (для создания структуры страницы), CSS (для стилизации) и JavaScript (для динамики). Также следует разбираться с инструментами, повышающими продуктивность разработки клиентской части:

– CSS препроцессоры Less, Sass, Stylus;

– HTML постпроцессоры Pug, Blade;

– сборщики Webpack, Gulp, Grunt;

– система контроля версий Git

– графические редакторы Photoshop, Figma;

– использование сетки Bootstrap.

Каковы дополнительные скилы?

Очень часто от соискателей требуют опыта работы с популярными СMS(Wordpress, Joomla, Bitrix).

Отдельно хочется сказать про библиотеки JS: Angular, Backbone, Ember и React. Они предоставляют готовую структуру вашего JavaScript кода. Существуют различные типы фреймворков под разнообразные нужды, однако четыре вышеупомянутых являются самыми популярными в списке требований при приеме на работу в 2020 году.

Заключение

Если говорить о конкретной профессии, больше всего сейчас требуется инженеров QA, но в списке направлений лидирует веб-разработка (если посчитать суммарно вакансии по фронтенду и бэкенду на PHP, Java, JavaScript и т. д.). Порой работодатели пишут в требованиях все известные им стеки технологий от А до Я. Посмотрев на запросы компании, люди начинают сомневаются в своих способностях, не владея и половиной умений из списка. Никогда не теряйте самообладание и пробуйте продвигать свою кандидатуру в понравившиеся компании. Обязательно найдётся фирма, которая оценит ваш профессиональный уровень по достоинству.

***

Если вы только начинаете путь в ИТ, стоит присмотреться к учебным курсам по веб-разработке онлайн-академии GeekBrains. Начав с основ, здесь можно получить необходимые для старта карьеры знания. Актуальная программа, 2 – 3 вебинара в неделю и 2 месяца стажировки. Под руководством опытных преподавателей студенты наработают необходимую для дальнейшего развития базу и получат помощь в трудоустройстве.

14
Ноя
2020

🌎 🕵 Навыки OSINT(интернет-разведки) в кибербезопасности

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

OSINT (Open Source Intelligence) – сбор и анализ информации из публично доступных источников. В нынешних реалиях речь идет в основном про интернет-источники. От русскоязычных экспертов можно услышать термин «интернет-разведка», что по смыслу приравнивается к OSINT.

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

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

OSINT удобен тем, что:

  1. подразумевает гораздо меньше рисков: вы не нарушаете чью-то приватность и законы;
  2. дешевле – не нужно какое-то дополнительное оборудование и дорогой софт;
  3. к такой информации легко получить доступ (зайти в интернет), и чаще всего она всегда свежая.

Есть два основных метода сбора информации:

1. Пассивный. В этом случае вы никак не выдаете себя и то, что вы ищите. Поиск ограничивается контентом на сайте объекта исследования, архивной или кешированной информацией, незащищенными файлами.

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

Выбор метода зависит от того, на каких условиях вы собираете информацию, а также от того, какие данные вам нужны. Вы анализируете безопасность компании, подписали NDA и вам можно лезть куда хочешь? Или вас попросили добыть информацию о конкурентах?

Важно понимать, что не всегда то, к чему вы можете с легкостью получить доступ, – легально.

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

Почитать подробнее о правовых рамках и законодательстве России и зарубежных стран можно здесь.


Основные источники OSINT, которые используются в информационной безопасности

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

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

1. Метаданные файлов.

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

2. Конфиденциальная документация.

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

3. Данные о домене.

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

  • е-мейлы,
  • телефоны,
  • факсы,
  • технологии, на которых построен сайт,
  • криптографические сертификаты, которые используются на конкретном домене.

После исследования основного домена стоит поизучать, как компания организует свои Интернет-ресурсы. Среди субдоменов обычно есть плохо защищенные сайты для тестирования новых технологий. Такие субдомены могут содержать какие-то важные документы, оставленные на сервере.

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


Обучение OSINT для использования в информационной безопасности

Чтобы на базовом уровне изучить OSINT и начать проводить небольшие исследования, вам хватит пары дней.

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

Развитие в OSINT делится примерно не следующие этапы:

1. Освоение базовых техник, вроде Google dorks (продвинутый поиск в Гугл). Для этого – читайте блоги специалистов или специализирующихся компаний. Например:

  • Hrazvedka – в разделе «Разведнет» можно найти подборки разных инструментов. Кроме этого в блоге собираются видео, статьи, книги, фильмы по теме на русском;
  • Sector035 – еженедельные подборки с новыми техниками и инструментами;
  • OSINT Curious – кроме блога у них есть вебкаст, куда приглашают гостей и обсуждают новости;
  • Aware Online;
  • значительная тусовка собрана в Твиттере: i-intelligence, Dutch OSINT Guy, Henk van Ess. В этой подборке можно найти и других деятелей, на которых будет интересно подписаться.

2. Начинайте применять знания в деле. Ищите интересные подходы использования инструментов и техник и пробуйте писать об этом небольшие отчеты с визуализацией результатов. Своими инсайтами делитесь в Твиттере, добавляя соответствующие хэштеги или в комьюнити на Reddit.

Необходимые для разведки инструменты есть в подборках:

3. Станьте максимально анонимным. При изучении OSINT значительное время уделяется обеспечению своей безопасности при поиске. Это нужно, чтобы компания или человек не смогли распознать, что вы собираете какую-то информацию. Вот несколько практик:

  • создание фейковых профилей;
  • использование андроид-эмуляторов (вы заходите в мобильные приложения через специальную программу на компьютере);
  • VPN;
  • браузер Tor;
  • правила, вроде того, что не стоит осуществлять разведку в одно и то же время дня. Это может выдать даже самых искусных хакеров.

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

Много материалов по этому поводу можно найти в выше описанных блогах и книгах. Вот один из них.

4. Изучайте более продвинутые инструменты, для которых необходимо знание:

  • Kali Linux. Есть много инструментов OSINT, которые работают только на этой операционной системе.
  • Python – работа с некоторыми инструментами требует знания синтаксиса языка.

5. Пробуйте самостоятельно писать на Python автоматизирующие инструменты по сбору и анализу информации.


Инструменты OSINT в информационной безопасности

1. Shodan – поисковик по устройствам, подключенным к сети (в т.ч. интернет вещей и веб-приложения). Раздел «Explore» поможет начать поиски, так как туда собираются запросы пользователей. Чтобы получить доступ к расширенному поиску, надо зарегистрироваться. В платных версиях у вас будет доступ к большему количеству устройств, а также неограниченное количество поисковых запросов в сутки. Руководство по Shodan на русском (ссылка для скачивания).

2. MaltegoMaltego – ПО, которое собирает все данные вместе, помогает увидеть взаимосвязи и сделать выводы. Результат визуализируется в виде дерева, собирающего в единую систему IP-адреса, е-мейлы, телефоны, домены и т.д. Есть три версии клиента, но большинству специалистов будет достаточно бесплатной. Туториалы по Мальтего: на русском и английском (они разные).

3. Google Dorks – это запросы в Гугл с использованием специальных операторов. Вы наверняка слышали, что для поиска точного словосочетания нужно поставить слова в кавычки, а чтобы исключить какое-то слово из выдачи, необходимо поставить перед ним «-». Это как раз про Гугл доркинг. Здесь вы найдете базовые операторы, а здесь – огромное количество дорков для поиска уязвимостей.

4. Foca – программа, которая помогает с выгрузкой, классификацией и анализом файлов на удаленном веб-сервере. Для этого она сканирует определенный домен с помощью поисковиков Google, Bing, DuckDuckGo. ПО бесплатное и быстро устанавливается. В этом материале можно найти небольшую инструкцию, как пользоваться программой.

5. Spyse – поисковик по технической информации веб-сайтов. С его помощью вы найдете разнообразные данные, вроде уязвимостей, IP-адресов, субдоменов и SSL/TLS.

Заключение

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

***

Чтобы начать использовать базовый OSINT, достаточно на пару дней погрузиться в книги и туториалы по теме. Если же вы планируете выйти на более продвинутый уровень, скорее всего понадобятся курсы по информационной безопасности и помощь наставников. Например, на Факультете информационной безопасности образовательного портала GeekBrains вы сможете подробно изучить работу с Linux и Python. Также портал дает возможность полностью освоить профессию на практический кейсах.

13
Ноя
2020

🐛 🛠 Изучаем инструменты тестировщика

Работа инженера QA требует внимательности при решении множества рутинных задач. Специальные инструменты позволяют автоматизировать управление тестированием и уменьшить объем ручного труда.

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

Управление тестированием

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

  • Jira (https://www.atlassian.com/ru/software/jira/guides) – решение для комфортной работы над проектами, отслеживания задач, совместной корректировки документов, планирования и наглядного проектирования.
  • Redmine (https://www.easyredmine.com/redmine-org/) позволяет контролировать проекты, отслеживать задачи, составлять контрольные списки дел, строить диаграммы и графики. Есть бесплатная пробная версия.
  • TestRail (https://www.gurock.com/testrail/) – решение, созданное специально для команд QA. Оно позволяет управлять тестовыми примерами, планами и запусками, а также получать информацию о ходе тестирования в режиме реального времени. С помощью TestRail можно настроить интеграцию с трекерами проблем.

Скриншоты и работа с ними

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

  • Snagit (https://www.techsmith.com/screen-capture.html) содержит все лучшее из возможного. Приложение вырезает скриншоты, записывает видео и аудио, работает с веб-камерой, создает gif, рисует, пересылает. Есть бесплатная пробная версия.
  • Recordit API (http://help.recordit.co/api/) создает видео и отправляет сразу в приложение, а еще одним кликом превращает его в gif.
  • Monosnap (https://monosnap.com/welcome) редактирует скриншоты, выделает детали, скрывает конфиденциальную информацию.
  • GreenShot (https://getgreenshot.org/) – свободное ПО для создания скриншотов на Windows. Легкий, гибкий и надежный инструмент.

Генераторы данных

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

  • Mockaroo.com (https://www.mockaroo.com/) может не только заполнить тестовые данные человека (имя, номер карты и прочее), но и генерирует SQL-запрос.
  • Bugmagnet (https://bugmagnet.org/) – плагин для Chrome и Firefox. После установки достаточно кликнуть правой кнопкой мыши и нажать название плагина: после этого можно выбирать из предложенных вариантов данных и добавлять свои.

Визуальное отображение и интеллект-карты

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

  • Coogle (https://coggle.it/) – бесплатное онлайн-приложение с простым интерфейсом и большим набором функций.
  • Xmind (https://www.xmind.net/) – кросс-платформенное приложение, доступное в бесплатной и в расширенной платной версиях. Большой его плюс – возможность работать с диаграммами Ганта.
  • Freemind (https://sourceforge.net/projects/freemind/) – бесплатное приложение для создания диаграмм связей с почти полным набором функций для работы. Отлично подойдет начинающим тестировщикам. Единственный минус – устаревший дизайн.

Чек-листы

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

  • Testpad (https://ontestpad.com/) – инструмент для составления плана тестирования и контроля с помощью списков. Комфортный и гибкий в работе.
  • Sitechсo (https://sitechco.ru/) – онлайн-сервис для ведения чек-листов, позволяющий хранить результаты, просматривать отчеты и статистику. Большое достоинство Sitechсo – возможность интеграции с Jira Cloud.
  • Teamsuccess (https://teamsuccess.io) – сервис, в котором перечислены некоторые проверки, которые пригодятся при тестировании и помогут структурировать идею. По аналогии существуют целые базы базы чек-листов, их иногда удобно использовать в работе.

Валидаторы HTML/CSS

Валидатор анализирует данные по URL приложения. Он проверяет правильность разметки веб-документов в HTML, совместимость с мобильными устройствами, работоспособность ссылок и многое другое:

  • World Wide Web (http://validator.w3.org/) создали валидатор, в котором тремя способами можно проверить приложение, найти неработающие alt- параметры и линки.
  • Плагины для браузеров, которые можно скачать в большом количестве по запросу “плагин валидации” и выбрать любой подходящий.
***

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

11
Ноя
2020

Интенсив «Станьте хакером на Python за 3 дня»

Изучите основы кодинга на Python, разберётесь с файлами и типами данных, научитесь проводить атаки методом грубой силы и добавите проект в портфолио.
— Читать дальше «Интенсив «Станьте хакером на Python за 3 дня»»

09
Ноя
2020

Java-конференция Joker 2020

Более 20 специалистов расскажут обо всём, что касается Java: JVM, фреймворки, хранилища данных, высоконагруженные системы и др.
— Читать дальше «Java-конференция Joker 2020»

19
Окт
2020

🤖 9 лучших инструментов разработки для Интернета вещей в 2020 году

Выбираем поставщика IoT под конкретную задачу. Девять опенсорсных и платных платформ для создания Интернета вещей.

Интернет вещей (IoT) проник во многие сферы нашей жизни: от аграр…

15
Окт
2020

Интенсив «Станьте хакером на Python за 3 дня»

Изучите основы кодинга на Python, разберётесь с файлами и типами данных, научитесь проводить атаки методом грубой силы и добавите проект в портфолио.
— Читать дальше «Интенсив «Станьте хакером на Python за 3 дня»»

14
Окт
2020

Необработанные данные не имеют никакой ценности. Для преобразования и анализа BigData необходимы инструменты, придающие объему информации полезную структуру.

Собранные компанией да…

28
Сен
2020

Расширения браузера Chrome для управления свойствами элементов страницы, необходимые каждому веб-разработчику.

OctoTree

20
Сен
2020

Сравниваем инструменты тестирования производительности мобильных приложений, в том числе предоставляемые услуги и стоимость: Gatling, JMeter, Apptim и другие.

Пользователи не любят…

17
Сен
2020

DigitalOcean запустил новую облачную платформу для хостинга приложений. Сравниваем цены с AWS

DigitalOcean запустили вторую бета-версию своей новой платформы для хостинга приложений — App Platform. Сравнили их цены с сервисами AWS.
— Читать дальше «DigitalOcean запустил новую облачную платформу для хостинга приложений. Сравниваем цены с AWS»