- JupyterLab: визуальное программирование и управление роботами с Blockly
- Что же такое Blockly?
- Начало работы: установка расширения Blockly
- Функциональность расширения
- Изучение робототехники
- Графический интерфейс на Python за 5 минут
- Библиотеки Python, которые можно использовать для графического интерфейса
- Проверьте два одинаковых файла
- Запрограммируйте графический интерфейс
- Подключаем логику
- Заключительные мысли
JupyterLab: визуальное программирование и управление роботами с Blockly
80% наших курсов — это практика, в том числе в Jupyter Notebook. Сегодня кратко представим расширения визуального программирования и управления роботами Nyrio. За подробностями приглашаем под кат — к старту нашего флагманского курса по Data Science.
Визуальное программирование, или программирование с управляющей графикой, стало неотъемлемой частью любого школьного курса информатики: основные понятия программирования изучаются без обращения к синтаксису текстовых языков программирования.
В совершенно новый мир школьники попадают при переходе от графических языков к классике вроде Python. Чтобы перекинуть мост через пропасть между этими мирами, мы создали расширение JupyterLab для Blockly. Оно упрощает работу с Jupyter на этапе первого знакомства с Jupyter.
Что же такое Blockly?
Запуск простого цикла в расширении JupyterLab-Blockly и соответствующий код на Python в окне
Blockly — библиотека с открытым исходным кодом от Google. Благодаря управляющей графике она делает программирование проще и доступнее. Связи графических блоков друг с другом представляется в виде кода, а все требования языка к синтаксису в этом графическом интерфейсе устранены. Пользователь получает полную свободу творчества.
Начало работы: установка расширения Blockly
Для установки расширения выполните команду:
mamba install -c conda-forge jupyterlab-blockly
После установки откройте Blockly прямо из программы запуска и начинайте творить!
Функциональность расширения
Пользовательский интерфейс прост: слева панель инструментов, справа — рабочая область, куда можно перетаскивать блоки, которые вы хотите использовать в своём коде. Когда вы закончите, просто нажмите кнопку запуска, и внизу экрана появится синтаксически корректный код на выбранном языке с готовыми выходными данными!
Короткое видео про JupyterLab-Blockly
Расширение также может адаптироваться под ваши потребности. Блоки в рабочей области генерируются с учётом выбранного ядра JupyterLab, а их цвета меняются сообразно выбранной или настроенной темы.
JupyterLab-Blockly без проблем интегрируется со стеком Jupyter: при выполнении генерируемого кода с помощью ядер Jupyter, а также при повторном использовании компонента ячейки кода JupyterLab (code cell) для отображения сгенерированного кода и т. д.
При этом JupyterLab-Blockly согласуется с остальным интерфейсом пользователя (согласуются подсветка синтаксиса, выбор тем и жизненный цикл ядер Jupyter).
Изучение робототехники
На основе JupyterLab-Blockly мы собрали ещё одно расширение для управления роботами с помощью средствами визуального программирования. Точнее, мы создали набор инструментов с необходимыми блоками для программирования роботов Niryo One. Формат ROS требователен ко времени загрузки, однако готовые визуальные блоки упрощают и ускоряют создание прототипа любого задуманного проекта.
Для установки расширения выполните эту команду:
mamba install -c conda-forge jupyterlab-niryo-one
Остаётся только переключиться с набора инструментов ‘default’ на ‘niryo’ — и вы сразу получите доступ к 42 новым блокам. Если у вас есть доступ к одному из этих роботов, попробуйте!
Короткое видео про JupyterLab-NiryoOne
Оба расширения можно найти на GitHub. Расширение JupyterLab-Blockly готово стать основой для ваших проектов. Регистрируйте новые блоки, наборы инструментов и генераторы. Используйте расширение JupyterLab-Niryo-One как пример и экспериментируйте в своё удовольствие!
Управление роботом Niryo One из расширения JupyterLab-blockly
Вы можете пользоваться расширением JupyterLab-Blockly уже сейчас и прямо из браузера с помощью JupyterLite! Просто перейдите по этой ссылке.
Дениза Чечиу изучает робототехнику на QuantStack. Готовится к защите дипломной работы бакалавра. Основные дисциплины — робототехника и интеллектуальные системы, дополнительная дисциплина — информатика.
Карлос Херреро — разработчик учебного и исследовательского программного обеспечения на QuantStack. Увлечён ИИ и его робототехническими задачами. Его текущая работа посвящена стеку JupyterLab и расширениям экосистемы Jupyter для интеграции JupyterLab с ROS, а также работе с Voil.
- Профессия Data Scientist
- Профессия Data Analyst
- Курс «Математика для Data Science»
- Курс «Математика и Machine Learning для Data Science»
- Курс по Data Engineering
- Курс «Machine Learning и Deep Learning»
- Курс по Machine Learning
- Профессия Fullstack-разработчик на Python
- Курс «Python для веб-разработки»
- Профессия Frontend-разработчик
- Профессия Веб-разработчик
- Профессия iOS-разработчик
- Профессия Android-разработчик
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия C#-разработчик
- Профессия Разработчик игр на Unity
- Курс «Алгоритмы и структуры данных»
- Профессия C++ разработчик
- Профессия «Белый хакер»
- Курс по DevOps
- Все курсы
Графический интерфейс на Python за 5 минут
Python легко использовать. В нем вы можете найти огромное количество библиотек для чего угодно. И это его основное преимущество. Из нескольких строк кода вы ничего не сделаете. Если вам нужны скрипты для личного пользования или для технически подкованной аудитории, то вам даже не придется думать о графическом интерфейсе.
Однако иногда ваша целевая аудитория не сильно подкована технически. Люди не против использовать ваши скрипты на Python до тех пор пока им не нужно смотреть на одну строку кода. В таком случае скриптов командной строки будет недостаточно. В идеале вам нужен графический интерфейс. Цель этого поста использовать только Python.
Библиотеки Python, которые можно использовать для графического интерфейса
По сути, есть 3 большие библиотеки Python для графического интерфейса; Tkinter, wxPython и PyQT. Рассматривая их, я не нашел там ничего из того, что мне нравится в Python. Библиотеки Python, как правило, очень хорошо абстрагируются от супер-технических моментов. Если бы мне нужно было работать с объектно-ориентированным программированием, я мог бы с таким же успехом загрузить Java или .Net.
Статья переведена при поддержке компании EDISON Software, которая заботится о здоровье программистов и их завтраке, а также разрабатывает программное обеспечение на заказ.
Однако, к счастью, я наткнулся на четвёртый вариант, который был мне по душе. Это PySimpleGUI, я до сих пор ей пользуюсь. Как ни странно, эта библиотека использует все 3 популярные библиотеки, о которых шла речь выше, но при этом абстрагируется от супер технических моментов
Давайте погрузимся в эту библиотеку и изучим ее, одновременно решая реальную проблему.
Проверьте два одинаковых файла
Я рассказал как это сделать в своей статье “3 быстрых способа сравнить данные в Python”. Мы можем использовать первый раздел, проверку целостности данных, чтобы попытаться создать пользовательский интерфейс.
Запрограммируйте графический интерфейс
Чтобы создать графический интерфейс, можно использовать этот код:
import PySimpleGUI as sg layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break
Подключаем логику
Когда есть пользовательский интерфейс, легко понять, как подключить остальную часть кода. Нам просто нужно следить за тем, что вводит пользователь и действовать соответственно. Мы можем очень легко сделать это с помощью следующего кода:
import PySimpleGUI as sg import re import hashlib def hash(fname, algo): if algo == 'MD5': hash = hashlib.md5() elif algo == 'SHA1': hash = hashlib.sha1() elif algo == 'SHA256': hash = hashlib.sha256() with open(fname) as handle: #opening the file one line at a time for memory considerations for line in handle: hash.update(line.encode(encoding = 'utf-8')) return(hash.hexdigest()) layout = [ [sg.Text('File 1'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('MD5'), sg.Checkbox('SHA1') ], [sg.Text('File 2'), sg.InputText(), sg.FileBrowse(), sg.Checkbox('SHA256') ], [sg.Output(size=(88, 20))], [sg.Submit(), sg.Cancel()] ] window = sg.Window('File Compare', layout) while True: # The Event Loop event, values = window.read() # print(event, values) #debug if event in (None, 'Exit', 'Cancel'): break if event == 'Submit': file1 = file2 = isitago = None # print(values[0],values[3]) if values[0] and values[3]: file1 = re.findall('.+:\/.+\.+.', values[0]) file2 = re.findall('.+:\/.+\.+.', values[3]) isitago = 1 if not file1 and file1 is not None: print('Error: File 1 path not valid.') isitago = 0 elif not file2 and file2 is not None: print('Error: File 2 path not valid.') isitago = 0 elif values[1] is not True and values[2] is not True and values[4] is not True: print('Error: Choose at least one type of Encryption Algorithm') elif isitago == 1: print('Info: Filepaths correctly defined.') algos = [] #algos to compare if values[1] == True: algos.append('MD5') if values[2] == True: algos.append('SHA1') if values[4] == True: algos.append('SHA256') filepaths = [] #files filepaths.append(values[0]) filepaths.append(values[3]) print('Info: File Comparison using:', algos) for algo in algos: print(algo, ':') print(filepaths[0], ':', hash(filepaths[0], algo)) print(filepaths[1], ':', hash(filepaths[1], algo)) if hash(filepaths[0],algo) == hash(filepaths[1],algo): print('Files match for ', algo) else: print('Files do NOT match for ', algo) else: print('Please choose 2 files.') window.close()
Он даст нам такой результат:
Заключительные мысли
Может это и не самый красивый пользовательский интерфейс, но PySimpleGUI позволяет вам быстро разворачивать простые пользовательские интерфейсы Python и делиться ими с кем угодно. Код, который вам нужен для этого, прост и легко читается. У вас все еще будет проблема запуска кода для получения пользовательского интерфейса. Из-за этого могут возникнуть сложности с совместным использованием кода. Советую скачать что-то вроде PyInstaller, который превратит ваш скрипт на python в .exe файл. Люди смогут запустить его просто нажав на него дважды.