Category: Разное

30
Окт
2020

🦋 7 мифов о профессии тестировщика

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

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

Иллюстрация с pixabay.com
Иллюстрация с pixabay.com

Миф 1. Тестировщик – как программист, только похуже.

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

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

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

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

Миф 2. Тестировщики – самые бесполезные участники процесса. Они только ищут ошибки, а значит можно работать без них.

Инженер по QA – не стартовая площадка в ИТ с ростом до более важной позиции. Это сложная и самодостаточная профессия, требующая таланта и особого склада ума.

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

Инженер по QA – это буфер между разработкой и пользователем. Он понимает обе стороны и с каждой говорит на ее языке.

Иллюстрация с pixabay.com
Иллюстрация с pixabay.com

Миф 3. Программист vs тестировщик.

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

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

Миф 4 . Работа тестировщика лишена творчества.

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

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

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

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

Миф 5. Тестировщики зарабатывают меньше всех в ИТ.

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

Иллюстрация с pixabay.com
Иллюстрация с pixabay.com

Миф 6. Тестировщику некуда расти. Тупиковая ветвь карьеры.

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

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

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

Миф 7. Если программа работает плохо, виноват тестировщик.

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

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

***

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

30
Окт
2020

🐍 Хакатоны, конференции и митапы: календарь мероприятий для программиста на Python

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

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

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

Иллюстрация с сайта pixabay.com
Иллюстрация с сайта pixabay.com

Хакатоны

На хакатонах (англ. hackathon от hack + marathon) собираются специалисты для совместной работы над проектами. Начинается все с презентаций, сбора идей и формирования команд для их реализации. Затем участники демонстрируют результаты – часто хакатоны проводятся в виде конкурсов.

HackPSU

Организатор: Университет штата Пенсильвания

Дата: 6-8 ноября 2020

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

Место проведения: онлайн

Контакты: HackPSU Fall 2020

Тема: программирование python

Призы: будут, но детали не раскрываются

EazyHacks

Организатор: EazyML

Дата: 13-15 ноября 2020

Описание: спонсируемый EazyML виртуальный хакатон на 36 часов для студентов. Участникам дадут сутки на создание любого программного или аппаратного проекта с использованием платформы или API EazyML. Также пройдут семинары по Python, JavaScript, машинному обучению и другим интересным темам. Хакерам будут помогать опытные наставники.

Место проведения: онлайн

Контакты: EazyHacks

Тема: машинное обучение, ИИ

Призы: 12580 долларов США в виде призов

Хакатон по квантовым вычислениям в Монпелье

Организатор: AD’OCC (Agence de Développement Economique d’Occitanie), Университетом Монпелье и IBM

Дата: 3-4 декабря 2020

Описание: первый хакатон по квантовым вычислениям. Для участия потребуются python 3, библиотека qiskit и платформа anaconda.

Место проведения: 132 Boulevard Pénélope, 34000 Montpellier, Франция или онлайн

Контакты: Mpl-QC-Hack-2020

Тема: квантовые вычисления

Призы: неизвестно

Cloudfest 2021

Организатор: CloudFest

Дата: 23-25 марта 2021

Описание: мероприятие ориентировано на веб-разработчиков, пишущих код на Python, PHP, JavaScript, Bash или Go. Для участия требуется понимание азов облачных вычислений и опыт работы с Git

Место проведения: онлайн

Контакты: Cloudfest 2021

Тема: облачные вычисления

Призы: неизвестно

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

Иллюстрация с сайта pixabay.com
Иллюстрация с сайта pixabay.com

Конференции

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

Python Brasil 2020

Организатор: поддерживается Бразильской ассоциацией Python (APyB) и Фондом программного обеспечения Python (PSF)

Дата: 2-8 ноября 2020

Описание: Python Brasil 2020 – крупнейшая конференция по Python в Латинской Америке, организованная сообществом разработчиков. Участники прослушают интересные доклады, получат возможность учиться у опытных профессионалов и даже смогут внести вклад в проекты со свободным кодом: в рамках конференции пройдет множество интересных мероприятий.

Место проведения: онлайн

Контакты: Python Brasil 2020

Группа по изучению Python для начинающих

Организатор: WWCode. Ришика Сингх, Карен Вонг, Стефани Райдаут и Кхьяти Таплиял

Дата: 4 и 18 ноября, 2 декабря 2020

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

Место проведения: онлайн

Контакты: WWCodePython

PyCon Italy 11

Организатор: PyCon

Дата: 5-8 ноября 2020

Описание: PyCon Italia – итальянская конференция по Python считается одной из важнейших в Европе. Следующее мероприятие будет 11-ым по счету.

Место проведения: Lungarno del Tempio, 44 отель Mediterraneo, Флоренция, Италия

Контакты: PyCon

Loginom Days 2020: конференция по продвинутой аналитике

Организатор: Loginom

Дата: 9-13 ноября 2020

Описание: новые возможности low-code платформы Loginom. Отраслевые решения для B2B и B2C. Кейсы от ведущих аналитиков России и СНГ: ЭОС, ТБМ, Estée Lauder Companies и других.

Место проведения: онлайн

Контакты: Loginom Days

PyCon Sweden

Организатор: Python Sverige

Дата: 12-13 ноября 2020

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

Место проведения: онлайн

Контакты: PyCon

Plone Conference 2020

Организатор: Plone Foundation

Дата: 5-13 декабря 2020

Описание: конференция для участников сообществ Plone, Zope, Guillotina, Pyramid & Volto

Место проведения: онлайн

Контакты: Plone Conference 2020

PyCascades 2021

Организатор: PyCascades

Дата: 19 – 21 февраля 2021

Описание: PyCascades – это региональный PyCon на северо-западе Тихого океана, посвященный сообществу разработчиков и пользователей Python.

Место проведения: онлайн

Контакты: PyCascades

enterPy

Организатор: enterPy

Дата: 26 мая 2021

Описание: EnterPy нацелен на профессионалов, использующих (или только собирающихся делать это) Python для анализа данных, машинного обучения, веб-программирования или внедрения практик DevOps.

Место проведения: онлайн

Контакты: enterPy

Conf42.com: Python для финансов 2021

Организатор: Conf42

Дата: 27 мая 2021

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

Место проведения: онлайн

Контакты: Conf42

Иллюстрация с сайта pixabay.com
Иллюстрация с сайта pixabay.com

Митапы

Митап (англ. meet up, meetup) – неформальная встреча специалистов для обсуждения насущных вопросов и обмена опытом. Проходит в свободном формате, иногда между другими мероприятиями. Организаторы могут пригласить на митап спикеров с короткими докладами, но в основном расчет на самоорганизацию.

Автоматизируйте скучные вещи с помощью Python

Организатор: Tokyo Python Society Club

Дата: 4 ноября 2020

Описание: на этой встрече имеющие опыт работы с Python помогут новичкам.

Место проведения: онлайн

Контакты: Tokyo Python Society Club

Тема: автоматизация, Python

Solvery code-review. Разбор django-проектов

Организатор: Solvery

Дата: 5 ноября 2020

Описание: Code-review проведет Назарий Романченко, Python Developer в Stem SC. Он посмотрит код участников, найдет в нем слабые места и предложит улучшения. Самые интересные кейсы Назарий разберет в прямом эфире.

Место проведения: онлайн

Контакты: Solvery code-review

Тема: code-review, Python

PyATL Jam Session (In-town)

Организатор: PyATL

Дата: 5 ноября 2020

Описание: встречи Jam Session предназначены для практического взаимодействия с другими участниками PyATL. Приглашаются программисты любого уровня подготовки.

Место проведения: онлайн

Контакты: PyATL Jam Session

Тема: Python

Rhino.Inside Python и Django REST Framework

Организатор: Tokyo AEC Industry Dev Group

Дата: 7 ноября 2020

Описание: семинар посвящен разработке REST API, который можно запустить из Rhino, а также Python и Django REST Framework.

Место проведения: онлайн

Контакты: Tokyo AEC Industry Dev Group

Тема: Python

9-й семинар по Python для высокопроизводительных и научных вычислений

Организатор: PyHPC совместно с SC20

Дата: 13 ноября 2020

Описание: в этом году PyHPC возвращается к суперкомпьютерам.

Место проведения: онлайн

Контакты: PyHPC

Тема: высокопроизводительные вычисления

Практический семинар по Python

Организатор: Фрэнк В. и Лорел Т.

Дата: 17 ноября 2020

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

Место проведения: онлайн

Контакты: Tucson-Python-Meetup

Тема: Python

Саммит python Universe WEB Edition

Организатор: Geekle

Дата: 19 ноября 2020

Место проведения: онлайн

Контакты: Geekle

Тема: Python WEB Edition

SPb Python Drinkup

Организатор: SPb Python Community

Дата: 26 ноября 2020

Описание: встреча единомышленников, программистов на Python

Место проведения: Санкт-Петербург, Россия

Контакты: SPb Python Community

Тема: Python

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

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

***

Где учиться программировать на Python?

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

27
Окт
2020

☕ Начало работы с JavaFX на Raspberry Pi

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

Недорогой одноплатный компьютер Raspberry Pi отлично работает с Java, отчего hardware-разработка становится не сложнее классической разработки ПО.

***

Из этой статьи вы узнаете, как разработать приложение на JavaFX в
стиле дашборд, используя библиотеку
TilesFX.

На рис. 1 изображен
пользовательский интерфейс (далее UI).

<b>Рис. 1</b> UI приложения
Рис. 1 UI приложения

Также вы можете ознакомиться
с видео
, на
котором показана работа приложения на Raspberry Pi 3B+ и функциональность интерфейса с тачскрином.

Приведенный код и рассмотренные методы применимы только к микрокомпьютерам Raspberry Pi на чипах ARM v7 и ARM
v8. В разделе
спецификаций плат Raspberry Pi на Википедии вы найдете типы поставляющихся с этими процессорами плат:

Модель A+,
версия 3;

Модель B, версии 2, 3 и 4;

Вычислительный модуль (Compute Module), версия
3.

Прочие используемые в проекте электронные компоненты вы найдете в большинстве стартовых наборов
Arduino/Pi. Если вы хотите использовать другие элементы, можете
начать с компонентов из проекта, и подстроить их под свои
нужны. Мой комплект выглядит следующим образом:

Raspberry Pi 3 Модель B+;

SD карта 32 GB (или более) на ОС Raspberry Pi
(бывш. Raspbian);

Монитор, клавиатура и мышь;

Светодиод и резистор (для большинства подойдет
330 Ом);

Кнопочный переключатель;

Датчик расстояния HC-SR04;

Беспаечная макетная плата и провода.

Подготовка платы Raspberry Pi

Если вы работаете Raspberry Pi впервые, подготовьте карту SD с операционной системой. В проекте
используется Full ОС Raspbian (полная версия). Загрузите инструмент
Imager
. Для своей работы я взял версию Raspberry Pi Imager 1.2 от марта 2020 г. (рис. 2 и рис. 3). Убедитесь,
что устанавливаете полную версию.

<b>Рис. 2 </b>Страница скачивания инструмента Imager
Рис. 2 Страница скачивания инструмента Imager
<b>Рис.3</b> Выберите полную версию (Raspbian Full)
Рис.3 Выберите полную версию (Raspbian Full)

Как только SD карта будет готова,
вставьте ее в плату Raspberry Pi, запустите операционную систему и выполните
действия по настройке и подключению к вашей сети Wi-Fi.

Установка JDK (Java Development Kit) с помощью JavaFX

В примечаниях к релизу Raspbian
указано, что используемая мной версия ОС включает OpenJDK 11.

        2019-06-20:
* Based on Debian Buster
* Oracle Java 7 and 8 replaced with OpenJDK 11

    

Java-версия:

        $ java -version
openjdk version "11.0.3" 2019-04-16 
OpenJDK Runtime Environment (build 11.0.3+7-post-Raspbian-5) 
OpenJDK Server VM (build 11.0.3+7-post-Raspbian-5, mixed mode)

    

Теперь плата готова к запуску любых
приложений на основе Java 11. Однако JavaFX больше не является частью JDK
(начиная с Java 11), и запустить JavaFX-программу на Raspberry Pi «из коробки» не
получится.

К счастью, BellSoft разработала Liberica JDK. Предназначенная для Raspberry Pi версия включает JavaFX,
поэтому вы сможете запускать упакованное приложение JavaFX с помощью команды
java -jar yourapp.jar. Используйте ссылку для загрузки от BellSoft, чтобы установить
альтернативную JDK:

        $ cd /home/pi 
$ wget https://download.bell-sw.com/java/13/bellsoft-jdk13-linux-arm32-vfp-hflt.deb 
$ sudo apt-get install ./bellsoft-jdk13-linux-arm32-vfp-hflt.deb 
$ sudo update-alternatives --config javac 
$ sudo update-alternatives --config java

    

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

        $ java --version 
openjdk version "13-BellSoft" 2019-09-17 
OpenJDK Runtime Environment (build 13-BellSoft+33) 
OpenJDK Server VM (build 13-BellSoft+33, mixed mode)

    

На моей тестовой плате хранятся
различные версии Liberica JDK. Переключаться между ними несложно с
помощью команды
update-alternatives. (см. Рис.4)

<b>Рис. 4 </b>Переключение между версиями Liberica JDK
Рис. 4 Переключение между версиями Liberica JDK

В папке исходного кода Chapter_04_Java/scripts на GitHub расположены установочные скрипты
различных версий Liberica JDK. Они содержат ссылки для скачивания. (см. Рис. 5)

<b>Рис. 5</b> Установочные скрипты различных версий Liberica JDK
Рис. 5 Установочные скрипты различных версий Liberica JDK

Различные схемы нумерации Raspberry Pi

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

Нумерация Header Pin.
Это логическая нумерация заголовка платы. Один ряд содержит четные пины, другой – нечетные.(см. Рис. 6)

<b>Рис. 6</b> Нумерация пинов заголовка платы
Рис. 6 Нумерация пинов заголовка платы

Нумерация BCM. Относится
к номеру канала Broadcom – нумерации внутри микросхемы, используемой на
Raspberry Pi.

Нумерация WiringPi.
Wiring Pi
– основной фреймворк, используемый Pi4J (в проекте он применяется в качестве
библиотеки в Java) для управления GPIO. Причина другой схемы нумерации
кроется в истории платы. Когда еще велась разработка первых моделей Raspberry Pi,
предполагалось всего восемь контактов. В результате дальнейшего развития
микрокомпьютера и добавления дополнительных контактов, нумерацию в WiringPi расширили, чтобы можно было на них ссылаться.

Чтобы Java разработчикам было проще
понять разницу между различными типами заголовков, пинами и функциями, я
разработал небольшую библиотеку, расположенную в репозитории Maven по адресу
be.webtechie.pi-headers. Используя ее и небольшое приложение JavaFX, я
сделал вспомогательную таблицу (см. Рис.
7
), которая упрощает поиск и сопоставление номеров с соответствующими им
пинами на плате. Более
подробную информацию вы найдете по ссылке Raspberry
Pi history, versions, pins and headers as a Java Maven library
.”

<b>Рис. 7 </b>Сопоставление номеров с пинами на плате
Рис. 7 Сопоставление номеров с пинами на плате

Подключение оборудования

Давайте подключим оборудование, чтобы использовать часть мощностей платы Pi: светодиод,
кнопку и датчик расстояния. См. Табл. 1,
Рис. 8, Рис. 9.

<b>Табл. 1 </b>Сопоставление пинов с соответствующими устройствами
Табл. 1 Сопоставление пинов с соответствующими устройствами
<b>Рис. 8</b> Подключение проводов
Рис. 8 Подключение проводов
<b>Рис. 9</b> Схема подключения
Рис. 9 Схема подключения

На рис. 10 изображена система с использованием моста на макетной плате RasPiO, что упрощает поиск правильного пина. Разъем моста помещает номера
BCM в логическом порядке, но я все еще использую отдельную макетную плату,
чтобы было немного больше места.
Portsplus предлагает аналогичное удобное решение.

<b>Рис. 10 </b>Фото системы с использованием моста макетной платы RasPiO
Рис. 10 Фото системы с использованием моста макетной платы RasPiO

Чтобы проверить, подключен ли
светодиод в правильном положении с учетом его полярности, отсоедините кабель
между светодиодом и пином GPIO (оранжевый кабель на рис. 10) и подключите его непосредственно к контакту 3,3 В (или к
плюсу на плате). Если светодиод не загорится, вам нужно поменять его положение.

Проверьте светодиод и кнопку через терминал

Чтобы проверить соединение,
запустите команду
gpio через
терминал.

Примечание: Если вы работаете с платой Raspberry Pi 4,
обязательно используйте версию 2.52 утилиты gpio.
Поскольку внутренняя проводка процессора на плате Pi 4
отличается от предыдущих моделей, при необходимости доступно обновление для
утилиты. Проверьте свою версию с помощью команды gpio -v через терминал и, если
нужно, установите новую с помощью следующих команд:

        $ gpio -v
gpio version: 2.50
$ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb
$ gpio -v
gpio version: 2.52

    

Включить (1) и
выключить (0) светодиод:

        $ gpio mode 29 out
$ gpio write 29 1
$ gpio write 29 0

    

Состояние кнопки
(1=нажата, 2=не нажата) 27 пина WiringPi

        $ gpio mode 27 in 
$ gpio read 27
1

    

Переключение светодиода с помощью Java

Начинается самое интересное! Следующий код настраивает 29 пин WiringPi и 10 раз переключает его
между включением и выключением с интервалом в 500 мс, используя ту же команду,
которую я применял в терминале. Создайте файл под именем
HelloGpio.java со следующим содержанием:

        public class HelloGpio {
    public static void main (String[] args) {
        System.out.println("Hello Gpio");

        try {
            Runtime.getRuntime().exec("gpio mode 29 out");

            var loopCounter = 0;
            var on = true;

            while (loopCounter < 10) {
                System.out.println("Changing LED to " + (on ? "on" : "off"));
                Runtime.getRuntime().exec("gpio write 29 " + (on ? "1" : "0"));

                on = !on;

                Thread.sleep(500);

                loopCounter++;
            }
        } catch (Exception ex) {
            System.err.println("Exception from Runtime: " + ex.getMessage());
        }
    }
}

    

Поскольку код будет использовать Java 11 (или выше), файл
Java может быть выполнен без компиляции:

        $ java HelloGpio.java
Hello Gpio
Changing LED to on
Changing LED to off
Changing LED to on
…

    

Использование датчика движения

Написанное для этого
блока приложение использует обычный ультразвуковой датчик расстояния, который можно найти
во многих стартовых наборах Arduino и Pi. Это модуль под названием HC-SR04;
дополнительную информацию и примеры вы можете найти в интернете. Модулю
требуются входные и выходные GPIO-соединения. Датчик работает по той же
схеме, что и система, используемая летучей мышью для полета в темноте: он использует отражение ультразвука для расчета расстояния до
объекта.

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

  1. Модуль нужно запитать на 5 V;
  2. Приложению нужно установить вывод trig в положение high как минимум на 10 мкс;
  3. Модуль посылает несколько (обычно восемь) сигналов 40 кГц и определяет, когда сигнал принимается обратно;
  4. Вывод echo устанавливается в положение high на ту же продолжительность, что и время, необходимое для возврата ультразвука к датчику;
  5. Приложение измеряет длительность положения high echo-вывода, чтобы рассчитать расстояние на основе скорости звука.

Готовое приложение

Запуск одного файла Java хорошо для
тестирования системы, но это только первый шаг. В приложении используется
библиотека
Pi4J
для объединения Java и портов GPIO
на плате Raspberry Pi. Pi4J должен быть установлен на Raspberry Pi и может быть
интегрирован в приложение Java с Maven. Полный исходный код примера вы можете найти на
GitHub.

Следующие зависимости Maven указаны
в файле POM:

Для JavaFX,
расширенная зависимость javafx-web, которая включает:

javafx-controls – основу для приложения JavaFX;

Веб-компоненты,
необходимые для TilesFX.

Логирование;

TilesFX для
панели инструментов Tiles;

Pi4J для
использования портов GPIO.

        <dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-web</artifactId>
    <version>11.0.2</version>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.13.1</version>
</dependency>

<dependency>
    <groupId>eu.hansolo</groupId>
    <artifactId>tilesfx</artifactId>
    <version>11.13</version>
</dependency>

<dependency>
    <groupId>com.pi4j</groupId>
    <artifactId>pi4j-core</artifactId>
    <version>1.2</version>
</dependency>

    

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

Класс GpioHelper. В нем сгруппированы функции, связанные с портами GPIO. Код начинается с
определения контактов, к которым подключены компоненты оборудования, и
инициализации Pi4J GpioController. Расширенная функциональность обрабатывается в
отдельных классах: ButtonChangeEventListener и DistanceSensorMeasurement
(описаны вкратце). Дополнительные методы и геттеры будут использоваться в UI
позже.

        public class GpioHelper {

    private static final Logger logger = LogManager.getLogger(GpioHelper.class);

    /**
     * The pins being used in the example.
     */
    private static final Pin PIN_LED = RaspiPin.GPIO_29;        // BCM 21, Header pin 40
    private static final Pin PIN_BUTTON = RaspiPin.GPIO_27;     // BCM 16, Header pin 36
    private static final Pin PIN_ECHO = RaspiPin.GPIO_05;       // BCM 24, Header pin 18
    private static final Pin PIN_TRIGGER = RaspiPin.GPIO_01;    // BCM 18, Header pin 12

    /**
     * The connected hardware components.
     */
    private GpioController gpioController;

    /**
     * The Pi4J GPIO input and outputs.
     */
    private GpioPinDigitalOutput led = null;

    /**
     * The GPIO handlers.
     */
    private ButtonChangeEventListener buttonChangeEventListener = null;
    private DistanceSensorMeasurement distanceSensorMeasurement = null;

    /**
     * Constructor.
     */
    public GpioHelper() {
        try {
            // Initialize the GPIO controller
            this.gpioController = GpioFactory.getInstance();

            // Initialize the LED pin as a digital output pin with an initial low state
            this.led = gpioController.provisionDigitalOutputPin(PIN_LED, "RED", PinState.LOW);
            this.led.setShutdownOptions(true, PinState.LOW);

            // Initialize the input pin with pulldown resistor
            GpioPinDigitalInput button = gpioController
                    .provisionDigitalInputPin(PIN_BUTTON, "Button", PinPullResistance.PULL_DOWN);

            // Initialize the pins for the distance sensor and start thread
            GpioPinDigitalOutput trigger = gpioController.provisionDigitalOutputPin(PIN_TRIGGER, "Trigger", PinState.LOW);
            GpioPinDigitalInput echo = gpioController.provisionDigitalInputPin(PIN_ECHO, "Echo", PinPullResistance.PULL_UP);
            this.distanceSensorMeasurement = new DistanceSensorMeasurement(trigger, echo);
            ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
            executorService.scheduleAtFixedRate(this.distanceSensorMeasurement, 1, 1, TimeUnit.SECONDS);

            // Attach an event listener
            this.buttonChangeEventListener = new ButtonChangeEventListener();
            button.addListener(this.buttonChangeEventListener);
        } catch (UnsatisfiedLinkError | IllegalArgumentException ex) {
            logger.error("Problem with Pi4J! Probably running on non-Pi-device or Pi4J not installed. Error: {}",
                    ex.getMessage());
        }
    }

    public GpioController getGpioController() {
        return this.gpioController;
    }

    /**
     * Set the state of the LED.
     *
     * @param on Flag true if the LED must be switched on
     */
    public void setLed(boolean on) {
        if (this.led != null) {
            if (on) {
                this.led.high();
            } else {
                this.led.low();
            }
        }
    }

    /**
     * Get the data from the button.
     *
     * @return {@link XYChart.Series}
     */
    public XYChart.Series<String, Number> getButtonEvents() {
        if (this.buttonChangeEventListener != null) {
            return this.buttonChangeEventListener.getData();
        } else {
            return new Series<>();
        }
    }

    /**
     * Get the data from the distance measurement.
     *
     * @return {@link XYChart.Series}
     */
    public XYChart.Series<String, Number> getDistanceMeasurements() {
        if (this.distanceSensorMeasurement != null) {
            return this.distanceSensorMeasurement.getData();
        } else {
            return new Series<>();
        }
    }
}

    

Класс
ButtonChangeEventListener.
Поскольку этот класс реализует Pi4J
GpioPinListenerDigital, он может обрабатывать изменение кнопки и сохранять
изменение в XYChart.Series с отметкой времени.

        @Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
    var timeStamp = LocalTime.now().format(DateTimeFormatter.ofPattern("HH.mm.ss"));
    this.data.getData().add(new XYChart.Data<>(timeStamp, event.getState().isHigh() ? 1 : 0));

    logger.info("Button state changed to {}", event.getState().isHigh() ? "high" : "low");
}

    

Класс DistanceSensorMeasurement. Этот класс является Runnable. Он добавляет отмеренное
расстояние к аналогичной серии данных с отметкой времени для каждого пробега.

        @Override
public void run() {
    // Set trigger high for 0.01 ms
    this.trigger.pulse(10, PinState.HIGH, true, TimeUnit.NANOSECONDS);

    // Start the measurement
    while (this.echo.isLow()) {
        // Wait until the echo pin is high, indicating the ultrasound was sent
    }
    long start = System.nanoTime();

    // Wait until measurement is finished
    while (this.echo.isHigh()) {
        // Wait until the echo pin is low,  indicating the ultrasound was received back
    }
    long end = System.nanoTime();

    // Output the distance
    float measuredSeconds = getSecondsDifference(start, end);
    int distance = getDistance(measuredSeconds);
    logger.info("Distance is: {}cm for {}s ", distance, measuredSeconds);

    var timeStamp = new SimpleDateFormat("HH.mm.ss").format(new Date());
    this.data.getData().add(new XYChart.Data<>(timeStamp, distance));
}

    

UI. Благодаря
TilesFX приложение в стиле дашборда может быть создано быстро. Полное
построение интерфейса выполняется в классе DashboardScreen.java. В следующем
фрагменте кода показана кнопка переключателя для включения и выключения
светодиода:

        var ledSwitchTile = TileBuilder.create()
        .skinType(SkinType.SWITCH)
        .prefSize(200, 200)
        .title("LED")
        .roundedCorners(false)
        .build();

ledSwitchTile.setOnSwitchReleased(e -> gpioHelper.setLed(ledSwitchTile.isActive()));

    

Чтобы показать измерение расстояния, я использую tile типа SMOOTHED_CHART, который в свою очередь использует XYChart.Series из доступного через GpioHelper DistanceSensorMeasurement.

        var distanceChart = TileBuilder.create()
        .skinType(SkinType.SMOOTHED_CHART)
        .prefSize(500, 280)
        .title("Distance measurement")
        //.animated(true)
        .smoothing(false)
        .series(gpioHelper.getDistanceMeasurements())
        .build();

    

Класс приложения. Теперь все
элементы готовы к объединению в класс приложения JavaFX. Ниже описано, как
инициализировать GpioHelper и использовать его для инициализации
DashboardScreen, а также есть дополнительный код, позволяющий красиво закрыть
приложение.

        public class DashboardApp extends Application {

    private GpioHelper gpioHelper;

    @Override
    public void start(Stage stage) {
        Platform.setImplicitExit(true);

        this.gpioHelper = new GpioHelper();

        var scene = new Scene(new DashboardScreen(this.gpioHelper), 640, 480);
        stage.setScene(scene);
        stage.setTitle("JavaFX demo application on Raspberry Pi");
        stage.show();

        // Make sure the application quits completely on close
        stage.setOnCloseRequest(t -> CleanExit.doExit(this.gpioHelper.getGpioController()));
    }

    public static void main(String[] args) {
        launch();
    }

}

    

Запуск приложения на одноплатном компьютере
Raspberry Pi

Вы можете запустить приложение на
своем ПК через среду IDE, и UI отобразится, но большинство возможностей будут
недоступны, потому что необходимы Pi4J и аппаратные компоненты. Перейдем
к Raspberry Pi! Сначала вам нужно установить Pi4J. Это можно сделать с помощью
однострочной команды:

$ curl -sSL
https://pi4j.com/install | sudo bash

Финальный шаг – загрузить
скомпилированный файл JAR с вашего ПК на плату Pi, что можно сделать с помощью
SSH, USB-накопителя, загрузки или SD-карты. Поместите файл в /home/pi и
запустите его с помощью java -jar:

        $ cd /home/pi
$ ls *.jar
javamagazine-javafx-example-0.0.1-jar-with-dependencies.jar
$ java -jar javamagazine-javafx-example-0.0.1-jar-with-dependencies.jar
INFO  be.webtechie.gpio.DistanceSensorMeasurement - Distance is: 103cm for 0.006021977s 
INFO  be.webtechie.gpio.DistanceSensorMeasurement - Distance is: 265cm for 0.01544218s 
INFO  be.webtechie.gpio.DistanceSensorMeasurement - Distance is: 198cm for 0.011520567s 
INFO  be.webtechie.gpio.ButtonChangeEventListener - Button state changed to high
INFO  be.webtechie.gpio.ButtonChangeEventListener - Button state changed to low

    

Сначала на экране отобразятся логи,
а чуть позже откроется экран JavaFX. Диаграмма расстояний получает новое
значение каждую секунду, а диаграмма кнопки обновляется при каждом ее нажатии.
Светодиод можно переключать с помощью кнопки переключения на экране в одной из
плиток. (см. Рис. 11)

<b>Рис. 11 </b>Фото запущенного приложения вместе с Raspberry Pi и другими компонентами
Рис. 11 Фото запущенного приложения вместе с Raspberry Pi и другими компонентами

Заключение

Как только вы узнаете, какую версию
Java нужно использовать на Pi, вы можете очень быстро начать работу с простыми
тестовыми программами и расширить их с помощью пользовательского интерфейса
JavaFX. Создание сложного приложения требует дополнительных усилий, чтобы настроить
все в вашей среде IDE и иметь возможность тестового запуска. Это позволяет вам легко разрабатывать программы на ПК и выполнять их на Pi.

Текст опубликован в переводе. Автор оригинальной статьи Frank Delporte.

***

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

23
Окт
2020

💪 13 онлайн-курсов по изучению английского языка для ИТ-специалистов

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

Перево…

23
Окт
2020

? 13 онлайн-курсов по изучению английского языка для ИТ-специалистов

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

Перево…

06
Окт
2020

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

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

Чтобы стать Data Scientist необходимо специальное образование

Распространенное заблуждение заключается в том, что Data Scientists являются также специалистами в статистике и математике. Это не совсем так. В Data Science действительно требуется понимание статистики, но компании могут использовать анализ данных и не имея статистика в штате. У большинства разработчиков есть базовое представление о статистике, благодаря прослушанным в вузе курсам. Хотя в машинном обучении и Deep learning требуются продвинутые знания, это не означает, что не обладая степенью в области математики или статистики нельзя стать экспертом по данным.

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

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

Если вы захотите изменить или оптимизировать модель, могут потребоваться более глубокие познания в математике и статистике. Они помогут понять, какие параметры влияют на результаты модели. В статье Как я перешел из математиков в аналитики данных мы писали о Тиме Хоппере, математике, который самостоятельно освоил профессию Data Scientist и работает в сфере кибербезопасности и инжиниринга машинного обучения. Тим является отличным примером специалиста Data Science, который построил свою карьеру практически с нуля и научился всему самостоятельно.

Чтобы стать Data Scientist необходим диплом

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

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

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

Стоит понимать, что получение степени большая затрата времени, а также ответственность, как моральная так и финансовая. Итак, в какой роли вы видите себя? Это очень важный вопрос, на который нужно ответить, прежде чем перейти в профессию Data Scientist.

Data Science подходит только для крупных организаций с большими ресурсами

Многие бизнесмены и предприниматели имеют ложное представление о Data Science. Одно из самых распространенных заблуждений заключается в том, что наука о данных якобы нужна только крупным организациям. Это происходит из-за неправильного представления о требованиях к инфраструктуре для обработки данных и получения максимальной ценности для бизнеса. На самом деле необходима только группа людей, которые знают, как извлечь полезную информацию из имеющихся данных. Учитывая основанный на данных подход, не стоит вкладывать значительные средства в создание аналитической инфраструктуры. Существует множество инструментов с открытым исходным кодом, которые помогут в обработке крупномасштабных данных с высокой точностью и эффективностью.

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

Чтобы стать Data Scientist достаточно приобрести опыт работы с инструментами Data Science

Многие придерживаются неверного мнения о том, что изучения статистического инструмента, наподобие SAS, или освоения программирования на Python с использованием библиотек для Data Science, достаточно, чтобы получить профессию. Изучение инструментов важно, но не является единственными необходимым условием для эффективной работы в Data Science. Для специалиста в этой области требуется умение выйти за рамки инструментов и быстро овладеть знаниями в бизнес-области и навыками правильного применения доступных средств для решения бизнес-проблем. Большим плюсом являются хорошие коммуникативные навыки: они необходимы, чтобы представить идеи и результаты самым простым из возможных способов.

Существует также заблуждение о том, что специалист по анализу данных должен писать сложный код и иметь степень в области компьютерных наук. Чтобы получить профессию Data Scientist, не нужно быть отличным программистом. Если перечислить рутинные задачи науки о данных, можно обнаружить, что никакого сложного кодирования не требуется. На самом деле большинство методов или алгоритмов Data Science легко доступны, они предполагают лишь небольшую настройку и оптимизацию под цели и задачи проекта. Для этого необходим логический склад ума — особенность психики, которая является ключевой в профессии Data Scientist.

Data Science – это только построение моделей

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

  1. Понимание и постановка задач;
  2. Построение гипотезы;
  3. Сбор данных;
  4. Проверка данных;
  5. Очистка данных;
  6. Исследовательский анализ;
  7. Проектирование модели;
  8. Тестирование/верификация модели;
  9. Возврат к этапу проверки или очистки в случае обнаружения ошибки;
  10. Запуск проекта в производство (развертывание модели).

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

ИИ аменит Data Science в будущем

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

Заключение

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

01
Окт
2020

⌛ Правило трех лет: как сохранить мотивацию на долгосрочных проектах

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

Перевод выполнен с сокращениями, автор о…

23
Фев
2020

V – значит… язык программирования!

А вы знали о существовании языка программирования V? Это простой компилируемый язык для разработки быстрого и легковесного софта. И главное, что он продолжает активно развиваться.

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

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

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

Основные
характеристики

Вот как характеризуют язык автор проекта и те, кто им успели воспользоваться:

  • Простота: при знакомстве с другими языками, изучить V можно выучить менее, чем за час
  • Быстрая компиляция: от 100 тыс. до 1,2 млн строк кода в секунду на одном ядре CPU (данные приведены для Intel i5-7500 @ 3.40GHz, SM0256L SSD, без оптимизации). Самосборка компилятора: от 0.15 – 0.6 с
  • Безопасность: нет null и globals, никакого неопределенного поведения, иммутабельный по умолчанию
  • Возможность бесшовного взаимодействия с C-кодом
  • Трансляция проектов на C/С++
  • Кроссплатформенная UI-библиотека
  • Встроенная графическая библиотека
  • Легкая кросс-компиляция
  • Программы компилируются в исполняемые файлы без внешних зависимостей
  • Поддержка hot reload: при внесении изменений не требуется компилировать код заново
  • Есть интерактивная среда (REPL)
  • Встроенный ORM (объектно-реляционное отображение)
  • Встроенный веб-фреймворк
  • Нет сборщика мусора или подсчета ссылок. Очистка происходит во время компиляции. Если V-программа компилируется, в ней нет утечек памяти.
  • Язык имеет модульную структуру, есть менеджер пакетов vpm. Установка пакетов выглядит так: v install sqlite
  • Чтобы вызвать функцию foo() в новом потоке, достаточно написать go foo()

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

Временная лента автора на GitHub

Примеры кода

Не будем далеко ходить, посмотрим сразу на примеры кода. Протестировать их и примеры из документации можно, не устанавливая V – на онлайн-площадке Playground.

Расширенный “Hello world”

            fn main() { 
	areas := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile']
        for area in areas {
                println('Hello, $area developers!')
        }
} 

        
            Hello, game developers!
Hello, web developers!
Hello, tools developers!
Hello, science developers!
Hello, systems developers!
Hello, GUI developers!
Hello, mobile developers!
        

Числа Фибоначчи

            fn fib(n int) int {
        if n <= 1 {
                return n
        }
        return fib(n - 1) + fib(n - 2)
}

fn main() {
        for i := 0; i < 10; i++ {
                println(fib(i))
        }
}

        
            0
1
1
2
3
5
8
13
21
34
        

Числа Фибоначчи + мемоизация

            const (
        MAX = 15 
)

struct Fib {
        nums []int
}

fn (fib mut Fib) calc(n int) int {
        if n <= 1 {
                return n
        }
        if fib.nums[n] != 0 {
                return fib.nums[n]
        }
        fib.nums[n] = fib.calc(n - 1) + fib.calc(n - 2)
        return fib.nums[n]
}

fn main() {
        mut fib := Fib {
                nums: [0].repeat(MAX)
        }
        for i := 0; i < MAX; i++ {
                println(fib.calc(i))
        }
}

        
            0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
        

JSON кодирование/декодирование

            import json

struct User {
	name          string
	age           int
mut: 
	is_registered bool
}

fn main() {
	s := '[{ "name":"Frodo", "age":25}, {"name":"Bobby", "age":10}]'
	mut users := json.decode( []User, s) or {
		eprintln('Failed to parse json')
		return 
	}
	for user in users {
		println('$user.name: $user.age')
	}
	println('')
	for i, user in users {
		println('$i) $user.name')
		if !user.can_register() {
			println('Cannot register $user.name, they are too young')
			continue 
		}
		users[i].register() // `user` is immutable, we have to modify the array 
	}
	// Let's encode users again just for fun
	println('')
	println(json.encode(users))
}

fn (u User) can_register() bool {
        return u.age >= 16
}

fn (u mut User) register() {
        u.is_registered = true
}

        

Перегрузка операторов

            struct Vec {
	x int
	y int
}

pub fn (a Vec) str() string {
	return '{$a.x, $a.y}'
}

fn (a Vec) + (b Vec) Vec {
	return Vec {
		a.x + b.x,
		a.y + b.y
	}
}

fn (a Vec) - (b Vec) Vec {
	return Vec {
		a.x - b.x,
		a.y - b.y
	}
}

fn main() {
	a := Vec{2, 3}
	b := Vec{4, 5}
	println(a + b) 
	println(a - b) 
}

        
            {6, 8}
{-2, -2}
        

Обновленная копия struct

            struct User {
	name string
	age  int	 
} 

fn main() { 
	user1 := User{'Bob', 20} 
	user2 := { user1 | name: 'Peter' } 
	println(user1.name)
	println(user1.age)
	println(user2.name) 
	println(user2.age)
} 

        
            Bob
20
Peter
20
        

Установка
V

Средства работы с языком можно установить из сборок (Linux, macOS, Windows) или из исходников, клонировав репозиторий с GitHub:

            git clone https://github.com/vlang/v
cd v
make

        

Это уже полностью готовый V, который доступен по адресу [путь к V repo]/v. На
Windows следует через командную строку использовать make.bat.

Язык постоянно обновляется. Чтобы сделать апдейт, используем простую команду:

            v up
        

Компилятор C. Для работы с языком V вам также понадобится C-компилятор – можно использовать такие средства, как Clang, GCC или Visual Studio. Если у вас нет компилятора, воспользуйтесь инструкциями для своей платформы.

  • macOS: Установите XCode из App Store или запустите xcode-select --install для установки инструментов XCode.
  • Debian/Ubuntu: в терминалеsudo apt install build-essential
  • CentOS/RHEL: sudo yum groupinstall "Development Tools"
  • Fedora: sudo dnf install @development-tools
  • Arch Linux: V можно найти в AUR vlang или vlang-git.

На Windows можно использовать MinGW-w64, Visual Studio или llvm-mingw.
Visual Studio занимает гораздо больше места, но если вы планируете использовать UI-библиотеку, эта среда предпочтительнее. Язык V использует функции Windows: поддержка вывода цвета в консоли, IPv6, TLS на сокетах и др.

Симлинк. Можно создать символьную ссылку /usr/local/bin/v, чтобы V был доступен глобально: sudo ./v symlink

Docker. Средства языка также доступны в виде образа Docker:

            git clone https://github.com/vlang/v
cd v
docker build -t vlang .
docker run --rm -it vlang:latest

        

Docker на Alpine/musl:

            git clone https://github.com/vlang/v
cd v
docker build -t vlang --file=Dockerfile.alpine .
docker run --rm -it vlang:latest
/usr/local/v/v

        

Тестируем!

Убедимся, что V может сам себя скомпилировать:

            v -o v2 cmd/v

$ v
V 0.1.x
Use Ctrl-C or `exit` to exit

>>> println('hello world')
hello world
>>>

        

Проверим, что работают примеры:

            cd examples
v hello_world.v && ./hello_world    # или проще
v run hello_world.v                 # так можно собрать и запустить код

v word_counter.v && ./word_counter cinderella.txt
v run news_fetcher.v
v run tetris/tetris.v

        

Чтобы с помощью графического модуля создать тетрис или что-то подобное, вам также потребуются библиотеки glfw и freetype.

Если вы планируете использовать пакет http, то на системах, отличных от Windows, необходимо установить
OpenSSL:

            macOS:
brew install glfw freetype openssl

Debian/Ubuntu:
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev libssl-dev

Arch/Manjaro:
sudo pacman -S glfw-x11 freetype2

Fedora:
sudo dnf install glfw glfw-devel freetype-devel

Windows:
git clone --depth=1 https://github.com/ubawurinna/freetype-windows-binaries [path to v repo]/thirdparty/freetype/

        

Графический интерфейс V

V UI – это кроссплатформенный инструментарий, написанный на V для Windows, macOS, Linux (скоро будет для Android, iOS и JS/WASM). Графический интерфейс V использует нативные виджеты на Windows и macOS, а на других платформах они написаны сразу на V.


            ui.window({
    width:  600
    height: 400
    title:  'V UI Demo'
}, [
    ui.row({
        stretch: true
        margin:  {10, 10, 10, 10}
    }, [
        ui.column({
            width:   200
            spacing: 13
        }, [
            ui.textbox({
                max_len:     20
                width:       200
                placeholder: 'First name'
            })
            ui.textbox({
                max_len:     50
                width:       200
                placeholder: 'Last name'
            })
        ])
   ])
]);

        

Установка:

            v up
v install ui

        

Запуск:

            cd examples
v run users.v
v run temperature.v
v run ...

        

Библиотеке
предстоит еще долгий процесс роста, многие функции пока отсутствуют.

Бинарники, созданные с помощью V UI, не имеют зависимостей. Для того чтобы начать разработку V UI-приложений необходимо установить V, glfw и freetype (glfw скоро будет изъята из списка необходимых).

            macOS:
brew install glfw freetype

Debian/Ubuntu:
sudo apt install libglfw3 libglfw3-dev libfreetype6-dev

Arch/Manjaro:
sudo pacman -S glfw-x11 freetype2

Fedora:
sudo dnf install glfw glfw-devel freetype-devel

ClearLinux:
sudo swupd bundle-add devpkg-libX11 devpkg-mesa devpkg-freetype devpkg-glfw3

Windows:
git clone --depth=1 https://github.com/ubawurinna/freetype-windows-binaries [path to v repo]/thirdparty/freetype/

        

Что уже написано на языке V

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

  • Компилятор языка и средства работы с языком: V UI, транслятор из C/C++ на V и др.
  • Volt – легковесный десктопный клиент для работы со Slack, Skype, Gmail, Twitter, Facebook, Telegram, Twitch и другими ресурсами
  • Vid – небольшой и быстрый текстовый редактор для кода
  • Gitly – open source альтернатива GitHub/GitLab
  • vgram – библиотека для написания телеграм-ботов

Другие примеры

Заключение

Язык программирования V является интересной альтернативой популярным языкам с компиляцией кода быстрее, чем в C++. По сравнению с Go, в V поддерживается только один вид
присваиваний, отсутствует null и глобальные переменные. Если вам интересно сопоставить V с этими и другими языками, просмотрите эту страницу.

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

26
Авг
2019

Почему Scrum не работает (и что с этим можно сделать)

Почему Scrum не работает (и что с этим можно сделать)Как работает Scrum, и работает ли он вообще? Разбираемся с фреймворком Agile, его преимуществами и не самыми очевидными недостатками. Скрам – самый популярный Agile-фреймворк. Точка. Согласно отчету VersionOne 11th State of Agile, Скрам используют 58% респондентов (или 68%, если суммировать Скрам и гибрид «Скрам/XP»). Среди масштабируемых фреймворков Скрам, безусловно, занимает лидирующее положение: на долю Scrum-of-Scrums […]

Запись Почему Scrum не работает (и что с этим можно сделать) впервые появилась Библиотека программиста.

01
Июл
2019

Создание приложения для заметок на Flutter/Dart

Хотите изучить новый язык – пожалуйста. Мы подготовили для вас туториал по созданию приложения для заметок на Dart и Flutter.

Flutter – это мобильный кроссплатформенный SDK с открытым исходным кодом от Google. Приложения, написанные на Dart и Flutter, по умолчанию включают в себя Material Design компоненты, что придает привлекательный внешний вид и юзабилити.

22
Июн
2019

ТОП-5 книг для программиста по управлению программистами

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

Хьюман менеджмент уже давно стал частью IT и требует отдельного рассмотрения и изучения. Без знания правильной стратегии и

19
Июн
2019

Что такое IoT и зачем он срочно всем понадобился

Углубимся в этот термин, вокруг которого не утихают дебаты, и разберемся, что же такое IoT, и с чем его едят в современном IT-мире.

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

15
Май
2019

Масштабируемый WordPress-кластер почти бесплатно

Как директор по разработке Design Home, одной из ведущих мобильных игр Glu Mobile, я имею дело с действительно большими вопросами масштабируемости. Поэтому, когда я решил настроить свой собственный блог Effective Programmer, используя WordPress, для меня было естественным создать что-то, что можно масштабировать для работы с сотнями тысяч пользователей в сутки.

30
Янв
2019

10 советов: как подтянуть разговорный английский язык

10 советов: как подтянуть разговорный английский языкХотите работать в международных компаниях, но знаете только русский? Рассказываем, как подтянуть разговорный английский язык программисту. Профессия программиста тем и хороша, что не существует привязки к отдельной компании, региону, стране. Вакансий много, а значит найти наиболее интересную достаточно просто. И уж незнание языка не должно быть препятствием для серьёзного специалиста. Согласитесь, довольно странно, когда профессионал […]

Запись 10 советов: как подтянуть разговорный английский язык впервые появилась Библиотека программиста.

25
Дек
2018

Резервное копирование и архивация данных − курс Microsoft

Резервное копирование и архивация данных − курс MicrosoftКурс для системных администраторов и всех, кому нужно настроить синхронизацию и резервное копирование данных с локальных устройств. О чём курс Компания Microsoft запустила курс, который поможет администраторам разобраться с настройкой архивации данных с помощью сервисов Microsoft − Azure BackUp, Azure Site Recovery. Кроме того, участники узнают про софтверные решения для резервного копирования от партнёров компании […]

Запись Резервное копирование и архивация данных − курс Microsoft впервые появилась Библиотека программиста.

06
Дек
2018

Как управлять развертыванием Windows-приложений

Как управлять развертыванием Windows-приложенийКурс об управлении развертыванием приложений – для тех, кому нужно установить и настроить продукты Microsoft на устройства организации. О чём курс Практический курс, демонстрирующий возможности быстрого и массового развертывания Windows 10 и Office 365. Компания Microsoft запустила курс, который поможет администраторам разобраться с настройкой базовых функций и персонализировать систему управления компьютерной сетью. Участникам курса расскажут […]

Запись Как управлять развертыванием Windows-приложений впервые появилась Библиотека программиста.

30
Ноя
2018

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

Настройка инструментов совместной работы для бизнесаКурс для компаний о том, как настроить инструменты совместной работы на Windows, необходимые для выполнения корпоративных задач. О чём курс В данном курсе администраторы узнают о применении PowerShell для управления онлайн-службами Microsoft 365. Как создать подписку, синхронизировать пользователей домена AD, подключаться к службам Office 365; что необходимо сделать для создания скриптов, автоматизации типовых задач администратора. […]

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

27
Ноя
2018

Управление безопасностью в малом и среднем бизнесе

Управление безопасностью в малом и среднем бизнесеПрактический курс онлайн-университета Нетология об управлении безопасностью и защите данных компании от утечки в случае хакерской атаки. О чём курс Компания Microsoft запустила обучающий курс, который поможет разобраться с настройкой и управлением систем безопасности в Microsoft 365: начиная с конфигураций защиты от шифровальщиков Advanced Threat Protection для малых/средних компаний и защиты информации, заканчивая настройками устройств […]

Запись Управление безопасностью в малом и среднем бизнесе впервые появилась Библиотека программиста.

16
Июл
2018

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

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

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

20
Окт
2014

Руководство по SVG-анимациям (SMIL)

Перевод статьи A Guide to SVG Animations (SMIL) с сайта css-tricks.com, автор — Сара Суэйдан. Публикуется с разрешения автора. Перед вами гостевой постинг Сары Суэйдан. Сара — мастер докапываться до самых глубин классных веб-новинок, подробно и понятно разбирая их до…
ДАЛЕЕ