- PVSM.RU - https://www.pvsm.ru -

Форкни это: 8 проектов на Go, в исходном коде которых интересно покопаться

Мы в Binary District проводим интенсивы по Go. За два дня можно научиться понимать идеологию и внутренности Go, писать чистый тестируемый код. Но это первый шаг, а дальше — практика, практика, практика: читать чужой код, писать и править свой.

Для этого идеально подходит open source:

  • Open source повышает насмотренность. Можно невозбранно изучать исходники.
  • Open source дает стимул писать максимально чистый код и документировать логику.
  • Вклад в open source движение улучшает карму.

Форкни это: 8 проектов на Go, в исходном коде которых интересно покопаться - 1

Вместе с выпускником нашего Go-курса [1] Сергеем Tolsi [2] мы составили список открытых проектов разного уровня и направленности, которые подходят, чтобы учиться писать хороший код и заодно делать мир лучше.

 Стратегия Tolsi [2]:

«Если хочешь использовать open source для обучения, сначала определись с конкретной областью работы и поставь цель — например, сделать сайт или игру, какой-то сервис, — а затем найди схожий проект или фреймворк с примерами. Например, я работаю в области криптовалют и выяснил, что на Go пишут реализацию Lightning network [3] для ускорения переводов в сети Bitcoin и самую стабильную ноду для Ethereum — geth [4]».

1. Docker

Начнем с одних из самых сложных и объемных проектов, известных далеко за пределами Go Community. Docker [5] с 2013 распространяется свободно, по лицензии Apache 2.0, и представляет собой систему для создания изолированных виртуальных машин с любой необходимой для тестирования приложений средой. Его ключевой компонент — libcontainer [6] — стандарт для такого рода систем. Лучшей реализации «песочницы» для примера не найти.

2. Kubernetes

С Docker тесно связан другой интересный проект, появившийся в середине 2014 года: Kubernetes [7], ПО для группового управления контейнерами на большом парке устройств. Не исключено, что вы уже имели с ним дело, но заглядывали ли под капот этого проекта?

Если вы изучаете Go, это стоит сделать хотя бы потому, что Kubernetes писали программисты Google, а среди контрибьюторов проекта спецы из RedHat, IBM и Microsoft. Кодовая база Kubernetes снабжена неплохим руководством Kubernetes Contributor guide [8], а с командой разработчиков можно пообщаться в Slack во время регулярных сессий вопросов и ответов [9].

3. Syncthing

Syncthing — удачно спроектированный проект без заметных технических проблем и критических багов, созданный с оглядкой на практики Effective Go [10].

Эта реализация распределенной системы обмена файлами типа BitTorrent Sync основана на протоколе Block Exchange (BEP) с открытым исходным кодом.

По сравнению с Kubernetes, Syncthing обладает простейшей архитектурой, состоящей всего из трех основных слоев. Код программы соответствует стандартной библиотеке Go и сочетает ее с LevelDB и еще несколькими библиотеками. Они используются для шифрования сетевых подключений, расчета хэшей и хранения данных. Разобраться в его кодовой базе помогут руководство с официального сайта [11] и оживленный форум [12].

4. G3N

А как насчет 3D-движка, созданного программистами, для программистов? Этот титул носит G3N [13], и он также целиком написан на Go. Движок подходит для игр, но позиционируется как инструмент для написания интерактивных приложений.

5. GoLearn

Машинное обучение и Python почти синонимы, однако и Go бывает полезен для data scientists. На этом языке написана простая и гибкая библиотека машинного обучения GoLearn [14]. Она использует оболочку BLAN от Gonum [15] и поддерживает основные алгоритмы машинного обучения, включая: метод опорных векторов, линейную регрессию, нейронные сети, random forest, деревья решений и наивный байесовский классификатор.

6. Gorgonia

Низкоуровневое решение для машинного обучения на Go — Gorgonia [16]  — также заслуживает внимания. Эта библиотека, напоминающая по концепции TensorFlow [17], использует концепцию представления уравнений в виде графа и упакована в единственный бинарный файл.

7. acra

Интересным опытом может стать изучение кодовой базы acra [18] — инструмента для шифрования и безопасного хранения баз данных, разработанного для микросервисов на мобильных платформах и в вебе. Это возможность изучить действительно безопасный код и на чужом опыте научиться обнаруживать и защищаться от утечек данных, интегрировать в проект криптографию.

Кроме того, клиентская библиотека AcraWriter [19] доступна не только на Go, но и на Ruby, Python, NodeJS, iOS (Objective-C / Swift), Android Java и PHP [20] — можно сравнить реализации и узнать некоторые тонкости портирования ПО на практике.

Новейшая версия документации и учебников по Acra доступна на официальном сервере Cossack Labs [21].

8. ConnectorDB

ConnectorDB [22] подходит, если вы не просто хотите изучить чужой код, но и сделать нечто полезное для себя лично. Это open source платформа для развертывания собственного сегмента интернета вещей на базе уже имеющихся под рукой устройств. Она агрегирует данные с компьютеров, смартфонов из браузеров и обрабатывает их.

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

А еще...

Идеальное место для начала поисков — список Awesome Go [23], где сообщество собирает ссылки на лучшие open source библиотеки и приложения на Go. Кроме того, полезна Wiki при репозитории языка. В ней есть списки потенциально полезных статей [24], курсов [25] и книг [26].

Анализируя код проекта и внося свой вклад, можно развить приобретенные навыки и актуализировать знания. Есть вероятность втянуться в open source движение, и существует только один способ узнать, как глубоко и надолго. А для тех, кто собирается начать с азов и хочет сразу влиться в разработку, 8 и 9 декабря в Binary District пройдет практический интенсив по программированию на Go [1].

Автор: dzakhour

Источник [27]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/301130

Ссылки в тексте:

[1] Go-курса: https://binarydistrict.com/ru/workshop/go-workshop/?utm_source=blogs&utm_medium=habrhabr&utm_campaign=opensource_go

[2] Tolsi: https://habr.com/users/tolsi/

[3] Lightning network: https://github.com/lightningnetwork/lnd

[4] geth: https://github.com/ethereum/go-ethereum

[5] Docker: https://github.com/docker

[6] libcontainer: https://github.com/docker/libcontainer

[7] Kubernetes: https://github.com/kubernetes/kubernetes

[8] Kubernetes Contributor guide: https://github.com/kubernetes/community/tree/master/contributors/guide

[9] регулярных сессий вопросов и ответов: https://github.com/kubernetes/community/blob/master/mentoring/meet-our-contributors.md

[10] Effective Go: https://golang.org/doc/effective_go.html

[11] руководство с официального сайта: https://docs.syncthing.net/dev/intro.html

[12] оживленный форум: https://forum.syncthing.net/

[13] G3N: https://github.com/g3n/engine

[14] GoLearn: https://github.com/sjwhitworth/golearn

[15] BLAN от Gonum: https://github.com/gonum/gonum

[16] Gorgonia: https://github.com/gorgonia/gorgonia

[17] TensorFlow: https://www.tensorflow.org/

[18] acra: https://github.com/cossacklabs/acra

[19] AcraWriter: https://github.com/cossacklabs/acra/wiki/AcraConnector-and-AcraWriter#acrawriter

[20] PHP: https://docs.cossacklabs.com/pages/documentation-acra/#building-acrawriter-for-php

[21] сервере Cossack Labs: https://docs.cossacklabs.com/products/acra/

[22] ConnectorDB: https://github.com/connectordb/connectordb

[23] список Awesome Go: https://awesome-go.com/

[24] потенциально полезных статей: https://github.com/golang/go/wiki/Articles

[25] курсов: https://github.com/golang/go/wiki/Courses

[26] книг: https://github.com/golang/go/wiki/Books

[27] Источник: https://habr.com/post/432022/?utm_campaign=432022