Как-то резко всплыли на моём горизонте сразу несколько вещей, связанных с ПЛИС (#fpga), и как ни странно... с #python
Zinq, это такие SoC (System on Chip) c ARM ядром рядом с FPGA и даже GPU в некоторых моделях - отличные штуки для машинного зрения, самоуправляемых автомобилей, вот этого всего. Pynq позволяет всё это богатство мощностей программировать прямо из Jupyter Notebook! Для исследований на стыке железок и datascience - "самое то"!
Платы на старших "цинках" довольно дорогие, что не удивляет. Но есть и решения "для дома", например платы вроде Pynq-Z2 (на картинке к посту) - розовенькие, что характерно
Если приглядеться к картинке, то можно увидеть шину расширения от Raspberry Pi и посадочное место для #arduino sheilds, помимо USB host, пары HDMI, Ethernet и прочих mini jack. Идельная плата для хоббиста-электронщика! Ещё и цена подъемная.
:)
Во-первых, Pynq - инструментарий для Xilinx Zinq.Zinq, это такие SoC (System on Chip) c ARM ядром рядом с FPGA и даже GPU в некоторых моделях - отличные штуки для машинного зрения, самоуправляемых автомобилей, вот этого всего. Pynq позволяет всё это богатство мощностей программировать прямо из Jupyter Notebook! Для исследований на стыке железок и datascience - "самое то"!
Платы на старших "цинках" довольно дорогие, что не удивляет. Но есть и решения "для дома", например платы вроде Pynq-Z2 (на картинке к посту) - розовенькие, что характерно
:)Если приглядеться к картинке, то можно увидеть шину расширения от Raspberry Pi и посадочное место для #arduino sheilds, помимо USB host, пары HDMI, Ethernet и прочих mini jack. Идельная плата для хоббиста-электронщика! Ещё и цена подъемная.
Второй проект - MyHDL, инструментарий, позволяющий использовать #python как HDL (язык для описания железа).
MyHDL транслирует код на Python в Verilog и VHDL, после чего разработчик может использовать стандартные для нужной #fpga инструменты. Помимо того, что в Python доступна работа с периферией, заявлена возможность трансляции практически любых функций, реализованных на Python, в функциональные аналоги на HDL!
Вот и статейка по данной теме (да, habr-не-торт, но это не перевод, а оригинальный материал, так что можно потерпеть).
MyHDL транслирует код на Python в Verilog и VHDL, после чего разработчик может использовать стандартные для нужной #fpga инструменты. Помимо того, что в Python доступна работа с периферией, заявлена возможность трансляции практически любых функций, реализованных на Python, в функциональные аналоги на HDL!
Вот и статейка по данной теме (да, habr-не-торт, но это не перевод, а оригинальный материал, так что можно потерпеть).
Раз уж так сталось, что я теперь преподаватель на Hexlet и буду поднимать там направление обучению #python, то пропиарю бесплатный дочерний ресурс с курсами по "самым основам": https://code-basics.ru
На CodeBasics есть курс по Python за моим авторством, а ещё начал формироваться курс по #racket (моё участие в его наполнении пока довольно скромное, но то ли ещё будет!). Курс по Racket не совсем новичковый, он в основном расчитан на тех, кто уже с программированием знаком - "второй курс", можно сказать - но и особой сложности не ожидается, "можно давать детям"
Приглашаю бетатестить это всё. Можно писать комменты к урокам, а можно и в гитхаб реквестить!
#learning
На CodeBasics есть курс по Python за моим авторством, а ещё начал формироваться курс по #racket (моё участие в его наполнении пока довольно скромное, но то ли ещё будет!). Курс по Racket не совсем новичковый, он в основном расчитан на тех, кто уже с программированием знаком - "второй курс", можно сказать - но и особой сложности не ожидается, "можно давать детям"
:)Приглашаю бетатестить это всё. Можно писать комменты к урокам, а можно и в гитхаб реквестить!
#learning
ru.hexlet.io
Хекслет — онлайн-школа программирования, онлайн-обучение ИТ-профессиям
Хекслет — лучшая школа программирования по версии пользователей Хабра. Авторские программы обучения с практикой и готовыми проектами в резюме. Помощь в трудо...
Смотрите, какая прелесть!
Это Circuit Playground Express - платка от AdaFruit в их любимом исполнении (круглая). На борту
- неопиксели (куда уж без них?)
- микрофон
- пищалка
- датчик температуры
- датчик освещённости
ну и по мелочи всякое вроде светодиода "на помигать" и пары кнопок.
Мозги - Cortex M0 (атмеловский ATSAMD21) + 2МБ флеша (для CircuitPython, о котором я ещё напишу!)
#electronics #python
Это Circuit Playground Express - платка от AdaFruit в их любимом исполнении (круглая). На борту
- неопиксели (куда уж без них?)
- микрофон
- пищалка
- датчик температуры
- датчик освещённости
ну и по мелочи всякое вроде светодиода "на помигать" и пары кнопок.
Мозги - Cortex M0 (атмеловский ATSAMD21) + 2МБ флеша (для CircuitPython, о котором я ещё напишу!)
#electronics #python
Так вот, CircuitPython, это форк MicroPython, который AdaFriut отпочковали, чтобы поддержать программно свои образовательные инициативы в виде железок вроде вышеупомянутой Circuit Playground Express.
Проект CPy (это официальный акроним, есто что) нацелен на ещё большее упрощение и понижений порога входа для новичков в области разработки встраиваемых систем. Работает с платами на базе "мозжечков" M0 и M4, т.к. именно они стоят на адафрутовых платках. Также поддерживаются ESP8266, а вот другие камушки пока в пролёте, поэтому не факт, что я смогу завести BBC:MicroBit в связке с CPy (была мысль такое провернуть).
Насколько я понял, новичкам предлагается использовать в качестве визуальной части среды разработки редактор Mu (это ещё одна интересная штука, которую я планирую попробовать). Выбор разумный, одобряю. И у меня есть смутное подозрение, что редактор для MicroPython на сайте BBC:MicroBit, это всё тот же Mu
P.S. Как потыкаю Mu, напишу об этом.
#diy #electronics #python #micropython #microbit #esp8266
Проект CPy (это официальный акроним, есто что) нацелен на ещё большее упрощение и понижений порога входа для новичков в области разработки встраиваемых систем. Работает с платами на базе "мозжечков" M0 и M4, т.к. именно они стоят на адафрутовых платках. Также поддерживаются ESP8266, а вот другие камушки пока в пролёте, поэтому не факт, что я смогу завести BBC:MicroBit в связке с CPy (была мысль такое провернуть).
Насколько я понял, новичкам предлагается использовать в качестве визуальной части среды разработки редактор Mu (это ещё одна интересная штука, которую я планирую попробовать). Выбор разумный, одобряю. И у меня есть смутное подозрение, что редактор для MicroPython на сайте BBC:MicroBit, это всё тот же Mu
:) Заявлено, что Mu работает с MicroBit "из коробки", поэтому хотя бы тут проблем у меня быть не должно, надеюсь.P.S. Как потыкаю Mu, напишу об этом.
#diy #electronics #python #micropython #microbit #esp8266
GitHub
GitHub - adafruit/circuitpython: CircuitPython - a Python implementation for teaching coding with microcontrollers
CircuitPython - a Python implementation for teaching coding with microcontrollers - adafruit/circuitpython
Записали с Никитой Соболевым подкаст про всякое околопитоновое: пакеты и пакетирование, безопасность этого всего.
В этой ипостаси (со мной в роли ведущего и с уклоном в IT таки) подкаст ещё только возрождается, так что нужно будет и над звуком поработать и над "отбивками". Но первый блин, хоть и комковат, но на оладушек потянет!
#podcast #python
В этой ипостаси (со мной в роли ведущего и с уклоном в IT таки) подкаст ещё только возрождается, так что нужно будет и над звуком поработать и над "отбивками". Но первый блин, хоть и комковат, но на оладушек потянет!
:)
P.S. Помучились с настройкой записи и вообще общения изрядно. Mumble на мною поднятом сервере на DigitalOcean позволил сконнектиться, но услышать друг друга нам так и не удалось. В итоге записали беседу силами бота в Discord — модно, молодёжно :)#podcast #python
ru.hexlet.io
#Hexlet Podcast: Пакеты, репозитории, безопасность
Представляем вам новый формат подкаста Hexlet. Ведущий подкаста - Алексей Пирогов. В гостях Никита Соболев.
👍1
Есть для #python такая библиотека, prompt_toolkit (я вроде как писал уже про неё?). Она позволяет создавать свои интерактивные командные оболочки с автодополнением, всплывающими меню, статусной строкой, богатыми средствами редактирования командной строки.
На базе toolkit создан отличный Python REPL, ptpython. IPython тоже перешёл на использование PT в какой-то момент — и это отлично, ибо унификация!
Но не #repl едиными жив PT. На нём сделаны
- pgcli, популярная командная оболочка к PostgreSQL,
- wharfee, оболочка для docker CLI (да, с автодополнением контейнеров, процессов, тегов!),
- Kube-shell, оболочка для Kubernetes.
Питонистам может быть интересен проект click-repl, который превращает любое приложение с CLI на базе замечательной click в интерактивную программу (добавляет команду
Есть даже shell полноценный: xonsh. Умеет и команды запускать и автодополнять всё, от ключей командной строки и путей до страниц в man. По совместительству является ещё и Python REPL — позволяет сделать
Из интересных и курьёзных проектов PT используют
- pymux, terminal multiplexer (с интересными отличиями от tmux),
- pyvim, "pure Python vim clone" (!)
P.S. На страничке библиотеки (первая ссылка) вы можете найти длинный список других проектов, использующих PT. Советую посмотреть!
На базе toolkit создан отличный Python REPL, ptpython. IPython тоже перешёл на использование PT в какой-то момент — и это отлично, ибо унификация!
Но не #repl едиными жив PT. На нём сделаны
- pgcli, популярная командная оболочка к PostgreSQL,
- wharfee, оболочка для docker CLI (да, с автодополнением контейнеров, процессов, тегов!),
- Kube-shell, оболочка для Kubernetes.
Питонистам может быть интересен проект click-repl, который превращает любое приложение с CLI на базе замечательной click в интерактивную программу (добавляет команду
repl, с очевидным поведением).Есть даже shell полноценный: xonsh. Умеет и команды запускать и автодополнять всё, от ключей командной строки и путей до страниц в man. По совместительству является ещё и Python REPL — позволяет сделать
ls, а результат вызова прямо в list comprehension обработать!Из интересных и курьёзных проектов PT используют
- pymux, terminal multiplexer (с интересными отличиями от tmux),
- pyvim, "pure Python vim clone" (!)
P.S. На страничке библиотеки (первая ссылка) вы можете найти длинный список других проектов, использующих PT. Советую посмотреть!
В блоге проекта Jupyter недавно написали о voilà — инструменте, превращающем .ipynb-блокнот в самостоятельное web-приложение.
Для запуска приложения нужно всего лишь "скормить" файл программе
Помимо отображения блокнотов, voilà предоставляет средства настройки этого отображения через встроенный механизм шаблонов. Например, можно вывести dashboards с "живыми" графиками (см gif-ку), и даже Vue'фицировать его и получить rich GUI на стороне клиента!
Поддерживаются любые Jupyter kernels, поэтому программировать можно не только на #python, но и на #haskell (IHaskell) — красота!
Сейчас авторы ведут работу над интеграцией voilà с JupyterHub/JupyterLab. Так что скоро можно будет опубликовать блокнот в hub, и вуаля, интерактивное приложение готово!
Для запуска приложения нужно всего лишь "скормить" файл программе
voila и приложение откроется в браузере. На странице будут отображены текстовые блоки с разметкой, виджеты, графики. Код же по-умолчанию будет скрыт. Пользователь приложения не сможет изменять код и выполнять свой, но виджеты, подразумевающие интерактивность, продолжат работать интерактивно!Помимо отображения блокнотов, voilà предоставляет средства настройки этого отображения через встроенный механизм шаблонов. Например, можно вывести dashboards с "живыми" графиками (см gif-ку), и даже Vue'фицировать его и получить rich GUI на стороне клиента!
Поддерживаются любые Jupyter kernels, поэтому программировать можно не только на #python, но и на #haskell (IHaskell) — красота!
Сейчас авторы ведут работу над интеграцией voilà с JupyterHub/JupyterLab. Так что скоро можно будет опубликовать блокнот в hub, и вуаля, интерактивное приложение готово!
👍1
Я уже писал про конструктор "собери себе телефон" — MAKERphone. Вот ещё один телефон для самодельщиков: ZeroPhone.
Эта машинка уже посерьёзнее: работает #RaspberryPi Zero вместо ESP32, да и прочего обвеса побольше имеет на борту. Собрано всё в виде бутерброда, все модули взаимозаменяемы — скажем, модем 2G можно заменить на модем 3G. Красивого корпуса как у MAKERphone пока нет, но напечатают, думаю, скоро
Вольно перескажу идеи, заложенные в основу проекта:
- максимальная открытость (насколько это возможно),
- высокая ремонтопригодность,
- простота модификации как железа, так и ПО,
- возможность писать софт на #python (автор даже вынес это в отдельный пункт).
Это всё подчёркнуто ставится в противовес современным телефонам для широкого рынка, которые закрыты для изучения и модификации, да и о самостоятельном ремонте предлагают забыть.
Ну что же, посыл интересный, будем посмотреть!
Меня позабавил выбор устройств ввода и вывод: это мембранная цифровая клавиатура и графический OLED-экран низкого разрешения (128x64). Ведь Pi Zero может и полноценный рабочий стол показывать, а тут такое ретроградство! Зато так сильно более гиково, это уж точно
Эта машинка уже посерьёзнее: работает #RaspberryPi Zero вместо ESP32, да и прочего обвеса побольше имеет на борту. Собрано всё в виде бутерброда, все модули взаимозаменяемы — скажем, модем 2G можно заменить на модем 3G. Красивого корпуса как у MAKERphone пока нет, но напечатают, думаю, скоро
:)Вольно перескажу идеи, заложенные в основу проекта:
- максимальная открытость (насколько это возможно),
- высокая ремонтопригодность,
- простота модификации как железа, так и ПО,
- возможность писать софт на #python (автор даже вынес это в отдельный пункт).
Это всё подчёркнуто ставится в противовес современным телефонам для широкого рынка, которые закрыты для изучения и модификации, да и о самостоятельном ремонте предлагают забыть.
Ну что же, посыл интересный, будем посмотреть!
Меня позабавил выбор устройств ввода и вывод: это мембранная цифровая клавиатура и графический OLED-экран низкого разрешения (128x64). Ведь Pi Zero может и полноценный рабочий стол показывать, а тут такое ретроградство! Зато так сильно более гиково, это уж точно
:) UI реализован на ZPUI — форке библиотеки pyLCI, которую как раз и используют для создания пользовательских интерфейсов для Linux-машинок с такими вот экранами.Рубрика "ссылка на видео"!
Let's Reverse: Adventures of Lomax graphics — интересный и довольно необычный скринкаст (куда уж без стримов сейчас?) разбора одной старой игры (The Adventures of Lomax от крутейших Psygnosis) на предмет того, как игра хранит графику.
Зрелище само по себе нескучное, особенно если вы интересуетесь #reverse_engineering, но в этот раз ещё и инструментарий использован примечательный: вся работа делается в IPython REPL. И не в Jupyter, а именно в текстовом режиме — текстом выводятся гистограммы, палитры, даже сама графика! Используется для всего этого фреймворк Mr.Crowbar, предоставляющий eDSL (автор вдохновлялся Django ORM,
Сам я положу Mr.Crowbar в копилочку, а вам желаю приятного просмотра! А может быть даже и вдохновлю кого-то (менее ленивого, чем я) что-то эдакое пореверсить
#python #gamedev #video
Let's Reverse: Adventures of Lomax graphics — интересный и довольно необычный скринкаст (куда уж без стримов сейчас?) разбора одной старой игры (The Adventures of Lomax от крутейших Psygnosis) на предмет того, как игра хранит графику.
Зрелище само по себе нескучное, особенно если вы интересуетесь #reverse_engineering, но в этот раз ещё и инструментарий использован примечательный: вся работа делается в IPython REPL. И не в Jupyter, а именно в текстовом режиме — текстом выводятся гистограммы, палитры, даже сама графика! Используется для всего этого фреймворк Mr.Crowbar, предоставляющий eDSL (автор вдохновлялся Django ORM,
%)), с помощью которого вы жонглировать байтиками, описывать структуры и обрабатывать их так, как Web-разработчики работают с моделями ORM. Собственно это видео как раз и записано автором фреймворка как demo для "Мистера Фомки".Сам я положу Mr.Crowbar в копилочку, а вам желаю приятного просмотра! А может быть даже и вдохновлю кого-то (менее ленивого, чем я) что-то эдакое пореверсить
>;^F#python #gamedev #video
Повозился тут со штуками вокруг Gemini (см выше).
Серверы
Именно статический "сайт" поднимать не особо хотелось, но таки поднял:
Потыкал пакеты из набора haskell-gemini: пока сыровато. Так что #Haskell с Gemini я подружу позже.
Зато приятно оказалось пользоваться Jetforce. Это фреймворк для #Python такой. Построен на Twisted, внутри типы проаннотированы, async тут и там, при этом код выглядит "как Flask", то есть как набор декорированных функций — современненько!
Мне интересно было именно "Gemini приложение" написать, то есть что-то, создающее контент на лету. Получилось вполне прилично: основная функциональность в Jetforce уже есть. Нужно только будет написать eDSL для более удобного (чем захват регулярками) описания параметров в путях.
Клиенты
На десктопе попробовал пожить с Castor, графическим клиентом, написанным на #Rust, опять же. Но клиент пока слишком юн, и им не слишком удобно пользоваться.
В итоге пересел на Lagrange. Вот этот — красавец! Написан на C11 и SDL, аппаратно ускоряет отрисовку, красиво показывает текст, может и графику показать inline, управляется хоткеями. Даже "лого" генерирует для ресурсов на основе их имени — как умолчательные аватары на GitHub, вы такие точно видели. Пока я крайне доволен пользованием, рекомендую!
На Android пока остановился на deedum. Он не слишком красив, но крайне шустр и нетребователен к ресурсам.
Контент
В Gemlogs — это такие дневники в Geminiverse — народ пишет, есть что почитать. А ещё есть зеркала Lobste.rs и HackerNews, даже с комментариями. Ту же Wikipedia можно почитать через такой прокси. Словом, уютненько
Серверы
Именно статический "сайт" поднимать не особо хотелось, но таки поднял:
gemini://recursive.one (он же через проксю). Раздаётся с помощью Agate, минималистичного Gemini-сервера, написанного на #Rust. Agate кроме раздачи статики ничего не умеет, так что пока статическая страница и повисит %)Потыкал пакеты из набора haskell-gemini: пока сыровато. Так что #Haskell с Gemini я подружу позже.
Зато приятно оказалось пользоваться Jetforce. Это фреймворк для #Python такой. Построен на Twisted, внутри типы проаннотированы, async тут и там, при этом код выглядит "как Flask", то есть как набор декорированных функций — современненько!
Мне интересно было именно "Gemini приложение" написать, то есть что-то, создающее контент на лету. Получилось вполне прилично: основная функциональность в Jetforce уже есть. Нужно только будет написать eDSL для более удобного (чем захват регулярками) описания параметров в путях.
Клиенты
На десктопе попробовал пожить с Castor, графическим клиентом, написанным на #Rust, опять же. Но клиент пока слишком юн, и им не слишком удобно пользоваться.
В итоге пересел на Lagrange. Вот этот — красавец! Написан на C11 и SDL, аппаратно ускоряет отрисовку, красиво показывает текст, может и графику показать inline, управляется хоткеями. Даже "лого" генерирует для ресурсов на основе их имени — как умолчательные аватары на GitHub, вы такие точно видели. Пока я крайне доволен пользованием, рекомендую!
На Android пока остановился на deedum. Он не слишком красив, но крайне шустр и нетребователен к ресурсам.
Контент
В Gemlogs — это такие дневники в Geminiverse — народ пишет, есть что почитать. А ещё есть зеркала Lobste.rs и HackerNews, даже с комментариями. Ту же Wikipedia можно почитать через такой прокси. Словом, уютненько
:^)👍1
Я вам скажу, с вводом данных в #Gemini работать не скучно: аналога POST в Gemini нет, как нет и URL encoded параметров! И cookies тоже отсутствуют, как класс, как вы помните. Да, вы можете привязаться к пользовательскому сертификату и таким образом реализовать сессионность, но это уже будет сквозное состояние, чего хотелось бы избежать.
Зато Gemini сервер может запросить строку специальным ответом. После чего клиент покажет пользователю диалог с заданным приглашением, а результат ввода отправит обратно на сервер в виде query string. Соответственно, если вы хотите получить несколько значений, то вам нужно будет каждое запросить отдельно и сохранить в URL (кроме последнего, которое будет в query string). При этом размер запроса ограничен килобайтом на всё про всё — много не попостишь. Но тем интереснее!
Лелею идею написать FSM, которая взяла бы на себя весь этот сбор параметров, чтобы в обработчике запроса уже иметь все данные введёнными. Для Jetforce описание параметров можно будет оформить как "eDSL #Python-style" — на декораторах.
Также было бы интересно попробовать воплотить в Gemini интерактивность, подобную той, что использует #Racket в своих Stateful Servlets. Там вы тоже пишете код так, что данные вводятся "запросами к пользователю": вы отравляете пользователю форму, и получаете результат тут же в коде. Внутри всё реализовано на сохранении состояния в URL и рэкетовых continuations, снаружи же выглядит как магия — люблю такое
Зато Gemini сервер может запросить строку специальным ответом. После чего клиент покажет пользователю диалог с заданным приглашением, а результат ввода отправит обратно на сервер в виде query string. Соответственно, если вы хотите получить несколько значений, то вам нужно будет каждое запросить отдельно и сохранить в URL (кроме последнего, которое будет в query string). При этом размер запроса ограничен килобайтом на всё про всё — много не попостишь. Но тем интереснее!
Лелею идею написать FSM, которая взяла бы на себя весь этот сбор параметров, чтобы в обработчике запроса уже иметь все данные введёнными. Для Jetforce описание параметров можно будет оформить как "eDSL #Python-style" — на декораторах.
Также было бы интересно попробовать воплотить в Gemini интерактивность, подобную той, что использует #Racket в своих Stateful Servlets. Там вы тоже пишете код так, что данные вводятся "запросами к пользователю": вы отравляете пользователю форму, и получаете результат тут же в коде. Внутри всё реализовано на сохранении состояния в URL и рэкетовых continuations, снаружи же выглядит как магия — люблю такое
;) А уж насколько магически выглядят Web Cells: вы имеете переменную, которая помнит состояние между вызовами обработчика запроса, и таких переменных даже может быть несколько!