Как начать создание Open Source проекта в новом году. Исправление и тестирование. Начало и ознакомление

Как начать создание Open Source проекта в новом году. Исправление и тестирование. Начало и ознакомление

Это перевод заметки Брайана Форда .

Я написал это руководство, чтобы помочь любому присоединяться или выкладывать свои (contributing) open source проекты на GitHub. Одна из причин крутости open source - в желании людей помогать друг другу.

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

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

Читая этот гайд, помните, что нормально (и даже ожидаемо!) делать ошибки. Не нужно запоминать каждую мелочь. Делайте всё возможное и учитесь в процессе.

Гайд предполагает, что вы работаете с JavaScript-модулем, установленным через npm или bower , который размещён на GitHub. Кроме команд, предназначенных для npm или bower , большая часть этого гайда применима к другим платформам и языкам.

Как задавать вопрос

Перед тем, как спрашивать, поищите и почитайте существующие записи. Загляните в документы, Google, GitHub, и StackOverflow. Если на ваш вопрос уже отвечали раньше много раз, то разработчики, ответственные за проект, возможно, устали повторять ответ.

Если проект маленький, обычно принято задавать вопросы через отправку issue (см. ниже). Если большой - у них скорее всего есть рассылка или IRC-канал, через которые лучше всего обращаться с вопросами. StackOverflow - также очень хороший ресурс. Когда есть возможность, задавайте вопросы на публичном форуме. Таким образом ответить на вопрос сможет кто угодно, а ответ будет доступен любому человеку с таким же вопросом. Если ничего не работает, можно написать в твиттер или на почту поддержки проекта.

Отправка уведомления о баге (issue)

На GitHub уведомления о багах или улучшениях называются "issues".

Об этом спрашивали раньше?

Перед тем как отправить уведомление, нужно поискать существующие issues. Не забывайте проверять и открытые issues и закрытые. Если вы найдёте issue, который подобен вашему, прочтите всё о нём.

Если issue такой же как у вас, вы можете прокомментировать с дополнениями, чтобы помочь ответственным за проект разработчикам (maintainers) сделать отладку. Добавление комментария автоматически подпишет вас на уведомления по почте, что может быть полезным, когда будут появляться обновления, касающиеся этого issue. Если вам нечего добавить, но вы хотите получать уведомления об обновлениях на почту, вы можете нажать кнопку "watch", которая находится под комментариями.

Нет, никто не спрашивал

Если вы не можете ничего найти в существующих issues, не стесняйтесь отправить свой.

Нужно проверить, что указана версия проекта, так же как и версии связанных с ним приложений. Например, удостоверьтесь, что включили номера версий, выводимые командами node --version и npm list . Если вы заметите, что у вас установлена не последняя версия, используйте npm update и подтвердите, что issue всё ещё присутствует.

Разработчики проекта очень приветствуют тщательные разъяснения. Обычно это помогает им быстрее справиться с проблемой и всем это на руку.

Улучшаем код

Лучший способ - сделать "Fork" (копию) репозитория на GitHub. Это создаст экземпляр-клон репозитория в вашем GitHub аккаунте.

Перед тем как улучшать код, стоит сфокусироваться на том, что вы хотите конкретно сделать.

Каждый коммит должен выполнять что-то одно, а на каждый PR (см. ниже) должно быть одно специфическое улучшение.

Forking

  1. Нажмите на Fork в репозитории
  2. Перейдите в ваш форк внутри вашего аккаунта
  3. Сделайте git clone

Исправление и тестирование

Ок, теперь вы готовы к исправлению кода? Не совсем! Перед тем, как начать редактировать, вам нужно создать ветку (branch). Branch - как альтернативная временная линия. Можете почитать о git ветках .

Делаем ветку: git checkout -b something

Если вы пытаетесь починить баг, возможно вам стоит назвать ветку "fix-short-description". Если вы добавляете функциональность, "feat-short-description" - хорошее название. Когда вы меняете что-то в коде, возможно, вам захочется испытать его внутри какого-нибудь приложения или более крупного проекта.

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

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

Коммиты и пуш

git commit -m "your commit message"

Использование собственных изменений

Хоть это и не очевидно, вы можете начать использовать код в своих проектах сразу же.

Отправка ваших изменений обратно в проект

Вы сделали изменения, протестировали их с git commit и хотите отправить обратно в проект, чтобы они были включены в следующие версии.

На GitHub это делается с помощью отправки "pull request" (PR).

Отправка pull request

Золотое правило отправки pull request - всё выполнять так, как задумали владельцы проекта. Вы не можете читать мысли ответственных за проект, но можете посмотреть, что они делали в прошлом. Оценка этих действий заранее может повысить вероятность принятия ваших изменений.

Проще выражаясь: попытайтесь сымитировать стиль существующего кода. Обращайте внимание на отступы и стиль фигурных скобок в коде. Содержит стиль ранние инструкции return или там их избегают?

Код - не единственное, на что стоит обращать внимание. Заметьте какое время и формат имеют коммиты сообщений. Некоторые проекты используют настоящее время: "fixes the bug". А некоторые прошедшее: "fixed the bug".

Хороший способ проверить это - использовать git log и прочитать последние коммиты.

Что ещё стоит помнить:

Не меняйте номер версии софта (в package.json или bower.json). Владельцы проекта сами позаботятся об этом, когда будут выпускать новую версию.

Если проект поддерживается корпорацией, возможно у них есть Contributor License Agreement (CLA) для избежания проблем с законом.

Владельцы проекта могут быть заняты, так что дайте им немного времени. Разработчики, вовлечённые в open source, часто участвуют во множестве проектов. Нередко разработчик получает десятки нотификаций о неисправностях в день, так что будьте терпеливым.

Если они не отвечают в течение 2 недель, вы можете прокомментировать это, чтобы вынести тему наверх. Чего-нибудь, вроде, "ping @ProjectMaintainer" обычно достаточно. Если даже после этого от них ничего не слышно, электронная почта - хороший способ выйти на контакт.

Команда может ответить тремя возможными способами:

  1. Всё сливается (merge). Ура!
  2. Ответственный за проект просит вас исправить что-то в PR перед тем, как принять вас. Мы обсудим это ниже.
  3. PR закрывается, а ваши изменения не добавлены. Обычно ответственные за проект дают небольшое разъяснение. Если от вас была новая фича, возможно, уже существует способ заставить код делать то, что вы хотите, вы просто этого не заметили. Если исправление бага, возможно, они хотят решить проблему иначе. Не позволяйте трудностям отбить у вас желание продолжать.
Исправление issues в pull request

Когда команда просит внести изменения в PR, новички ошибочно закрывают существующий и создают новый. Не стоит так делать! Существующий PR легко обновляется.

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

git add some-file

Затем можете изменить свой предыдущий коммит вот так:

git commit --amend

Эта команда помещает ваши поэтапные изменения в предыдущий коммит.

Чтобы обновить коммит в вашем PR, вам нужно выполнить force push:

git push --force

Команда --force сообщает git , что вы хотите перезаписать предыдущий коммит.

Другая распространенная ошибка - создание нескольких коммитов, вместо внесения изменений в один.

Мой PR был закрыт, но я хочу использовать свои изменения!

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

$ npm install user/repo

А ещё вы можете использовать свои изменения и одновременно видеть изменения исходного кода репозитория. Обычно это называется "maintaining a fork" (поддержка копии) проекта. Для этого потребуется добавить ещё один remote .

Создание своего проекта

Перед тем как начинать свой проект, пожалуйста хорошо изучите существующие - нет ли сильно похожего на ваш.

Поиск по существующим проектам

$ npm search

Иногда вы находите старый проект, который больше не поддерживается, но он решает ваши проблемы. Как делать форк смотрите выше.

Бонус : Составляйте список заметок по ходу работы. Если найдете понравившийся модуль, можете использовать заметки, чтобы улучшить секцию «See Also» в тех модулях, которые вам встретились, пока вы вели поиск, отправив им PR. Если не найдёте нужный модуль и не создадите свой собственный, можете превратить эти заметки в секцию «See Also» для своего модуля!

Начало проекта

Начало нового open source проекта должно быть крайней мерой. Почему?

Практический опыт: Не публикуйте ничего в npm пока у проекта не будет обоснованной минимальной функциональности.

Помните: вы всегда можете использовать npm link или npm install user/repo

Название проекта

Если ваш модуль - это плагин, обычно лучший способ - сделать для него префикс, в зависимости от того для чего этот плагин. В некоторых проектах есть гайды или соглашения как это делать. Например компоненты AngularJS обычно называются "angular-something", плагины Gulp -"gulp-something", а плагины Karma - "karma-something".

Пишем Readme

Хороший readme должен состоять из следующих частей:

  • Объяснение, которое умещается в одно предложение.
  • Установка (Install)
  • Смотрите так же (See Also)

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

Пишем тесты

Есть много способов писать тесты. Их важность в том, что если они провалятся, процесс будет существовать с кодом ошибки. Вы можете использовать для этого assert или if (condition) { process.exit(1) } .

Бонус: вы используете инструмент CI вроде TravisCI .

Публикация в npm

Перед публикацией:

  1. Вы написали README.md , который объясняет что делает модуль. Он должен включать секцию See Also , которая ведёт на другие подобные пакеты.
  2. Вы написали тесты. Тесты должны запускаться с помощью npm test , и они должны проходить.

Бонус: Найдите кого-нибудь, кто будет содействовать в поддержке проекта. Отлично, если кто-то может помочь делать ревью issues и мёрджить PR. Невозможно угадать, как много свободного времени у вас будет в будущем. Обидно иметь непочиненные баги или несмёрженные PR в полезном проекте.

Этикет

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

Чаще всего - это не проблема. Но иногда у разработчиков случаются срывы, эмоции зашкаливают, они оскорбляются.

Предполагать, что все делают всё возможное

эта задача должна быть очевидной для решения! почему её никто не решил?

Возможно у владельца проекта есть другие важные дела в жизни, которыми ему нужно заниматься. Ставить в приоритет жизненные задачи - не значит быть лентяем. Здоровье, счастье и благополучие реального человека на другом конце интернета намного более важны, чем любой баг.

Одна из мощных сторон open source как раз в том, что вы всегда можете сделать копию и отладить ошибки сами.

вы очевидно не понимаете, о чём я говорю!

Такой тип комментария особенно отталкивает новичков. Совершать ошибки должно быть абсолютно приемлемым.

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

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

Заключение

Спасибо за то, что прочитали. Надеюсь этот гайд поможет вам получить то, чего вы хотели от open source.

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

  • «Я не очень хороший программист».
  • «У меня недостаточно времени, чтобы этим заниматься».
  • «Я не знаю, каким проектом заняться».
Но это не очень хороший подход к проблеме. Так, существует три основополагающих принципа, о которых необходимо помнить всякий раз, задумываясь о новых возможностях в области разработки: Наиболее распространенное заблуждение у новичков в том, что они считают, что для участия в open source-проектах необходимо быть настоящим «гением программирования». Но это совсем не так. Безусловно, в мире open source-разработки есть свои гуру, однако далеко не все. Большинство из них – обыкновенные разработчики, которые всего-навсего хорошо делают свою работу, независимо от того, насколько малый или большой вклад они вносят в проект. И далеко не всегда эта работа связана с программированием. Работа над open source-проектами в основном заключается в рутинном исполнении текущих задач. Большая часть задач, которые получают разработчики, не требует гениального видения проблемы, как у Ларри Уола, создателя Perl, или Дэвида Хейнемейера Ханссона, основателя Rails. Создание нового языка программирования или фреймворка, конечно, требует вдохновения, но остальная часть работы, которая и делает такие проекты, как Perl или Rails, успешными, требует постоянных рутинных усилий. Эти усилия едва ли могут принести вам славу, но они, безусловно, нужны и важны, и рано или поздно ваш вклад будет замечен.

Внимательно слушайте

Все стадии работы в open source-проектах так или иначе связаны с людьми, которые в них задействованы. Вы присоединяетесь к команде, а это значит, что необходимо понимать, как устроены процессы и взаимодействие между всеми ее участниками. Прийти в команду со своим видением ситуации и навязывать всем свою точку зрения - не самый удачный вариант. Для некоторых проектов такой подход может быть приемлемым, но если над продуктом работают уже не один месяц, шансы на то, что ваши идеи воспримут с энтузиазмом, очень невелики. Прислушиваться к мнению и точке зрения коллег – это, пожалуй, лучший способ понять, что необходимо проекту на текущей стадии. 1. Присоединяйтесь к рассылке. На многих проектах e-mail-рассылка является основным способом коммуникации. На крупных проектах обычно есть несколько списков рассылки. Например, на проекте PostgreSQL используют не менее 12 рассылок, касающихся обсуждения вопросов пользовательского интерфейса, а также 6 рассылок для разработчиков. Оптимальный вариант – следить за основными рассылками в каждой из групп, чтобы начать вникать в основные текущие вопросы. 2. Следите за блогом. Блоги, которые ведут ведущие разработчики, могут быть весьма полезны, поскольку будут информировать вас об изменениях и улучшениях в грядущем релизе. Существуют специализированные порталы со словом “planet” в названии, которые аккумулируют новости и посты из блогов с различных ресурсов, связанных с проектом. Найти такой ресурс можно, отправив поисковой запрос типа “planet ”в Google. 3. Добавляйтесь в чат. Во многих open source-проектах для обсуждения текущих вопросов используются групповые чаты. Поэтому не забудьте выяснить, как общаются между собой участники вашего проекта.

Работайте с “тикетами”

Безусловно, код – это основа любого open source-проекта, но не стоит полагать, что написание кода – это единственный способ участия в проекте. Технической поддержке зачастую уделяют недостаточно внимания в погоне за созданием новых функциональных возможностей и исправлением ошибок. А ведь именно это и есть те области, которые позволяют новичкам войти в проект. Большинство проектов имеют общую открытую систему работы с “тикетами”, которая связана с веб-сайтом проекта и включена в документацию. Подобная система – это основной источник коммуникации между разработчиками и пользователями. Постоянная работа с текущими запросами – это отличная возможность внести свой вклад в проект. Для работы с системой могут понадобиться специальные права доступа, которые вам предоставит тим лид, как только вы решите заняться текущими запросами от пользователей. 4. Находите баги. В проектах с открытым исходным кодом баги часто проходят незамеченными. Обнаружение и сортировка багов может значительно сэкономить время разработчикам на поиск проблемы. Если пользователь пишет: «Программа не работает, когда я делаю такие-то шаги», - не поленитесь разобраться в том, чем вызвана эта проблема. Проблема повторяется? Вы можете вызвать эту проблему, повторив ряд конкретных шагов? Вы можете сузить круг проблемы до конкретного браузера или дистра? Даже если вы не знаете истинную причину проблемы, попытки сузить круг возможных причин во многом помогут разработчикам справиться с ней. Независимо от того, что вам удалось выяснить, добавьте свои комментарии к багу, чтобы все могли с ними ознакомиться. 5. Закрывайте старые баги. Нередко случается, что баги «пофиксили», но «тикет» не закрыли. Таким образом, система «засоряется» старыми багами, которые мешают работать с актуальными проблемами. «Очистка» системы трекинга от старых багов – это скучная и длительная процедура, но она очень важна для всего проекта. Для начала отфильтруйте «тикеты» по дате, например, старше, чем один год, и посмотрите, существуют ли такие баги. Просмотрите логи по релизам и убедитесь, что эти баги устранили и их можно закрыть. Если баг исправили, необходимо добавить комментарий с упоминанием версии, в которой баг был устранен, и закрыть его. Постарайтесь воссоздать баг в последней версии продукта. Если его невозможно воспроизвести, сделайте соответствующую запись и закрывайте «тикет». Если баг продолжает повторяться, укажите это в «тикете» и оставьте его открытым.

Работайте с кодом

Все программисты, работающие на проекте, независимо от опыта и квалификации, могут помочь вам с кодом. Не думайте, что вам необходимо быть гением, чтобы начать работать над проектом. Если ваша работа связана с изменением кода, изучите методы изменения кода, которые используются на проекте. Для каждого проекта характерны свои внутренние технические процессы, поэтому узнайте о них побольше, прежде чем предложить ваш вариант кода. Например, на проекте PostgreSQL жестко регламентированы все процессы: изменения в коде отправляются в виде патча в рассылке всем основных разработчикам, которые тщательно изучают все изменения. С другой стороны, есть и другие типы проектов, как, например, Parrot, где программисты могут «коммитить» все изменения непосредственно в базу. Если на проекте используется GitHub, возможно, процессы поставлены через pull request’ы, т.е. запросы на включение сделанных изменений. Помните: нет двух одинаковых проектов. Всякий раз, когда вы переписываете код, не забывайте, что вы работаете в команде и поэтому делайте все возможное, чтобы ваш стиль совпадал с общей базой, используемой в проекте. Часть кода, которую вы добавляете или меняете, не должна выбиваться из общего кода. У вас могут быть свои предпочтения в оформлении кода, но ваш код должен соответствовать общим стандартам, принятым на проекте. В противном случае это то же самое, что сказать: «Мне не нравится ваш стиль, и я думаю, что мой лучше, поэтому вы должны делать так, как я». 6. Тестируйте бета-версии. В любом проекте, который создается для работы на нескольких платформах, могут возникать проблемы, связанные с переходом на другую платформу. Накануне нового релиза, когда выходит новая бета-версия, руководители проектов ожидают, что они будут протестированы на различных платформах. Вы можете принять участие в тестировании и убедиться, что продукт работает на той или иной платформе. Как правило, вам необходимо собрать и установить новый «билд» и протестировать продукт, но особенно значимо для проекта, если вы используете нестандартные аппаратные средства. Если вы подтвердите, что «билд» работает и при таких условиях, это существенно облегчит задачу руководителей проекта в определении текущего статуса релиза. 7. Исправляйте баги . Обычно с этого начинается работа новичков с кодом. Здесь всё просто: найдите «тикет», в котором описывается какой-нибудь баг и попробуйте устранить его в коде. Подтвердите изменение в документации (если необходимо). Неплохо также добавить тест для тестирования той части кода, которую вы исправили; некоторые проекты требуют, чтобы все баг-фиксы сопровождались соответствующими тестами. Ведите записи, по мере того как вы осваиваете незнакомый код. Даже если вы не можете справиться с багом, опишите в тикете, что вам удалось о нем выяснить. Это поможет тем участникам команды, кто будет работать с багами после вас. 8. Пишите тесты. В большинстве проектов используются тестовые комплексы, предназначенные для тестирования кода, но сложно представить себе такой комплекс, который бы не предусматривал возможности добавления в него новых тестов. Используйте такие тестовые инструменты, как gcov для C или Devel::Cover для Perl, чтобы установить те области исходного кода, которые нельзя протестировать готовым тестовым комплексом. Затем добавьте соответствующий тест, чтобы иметь возможность протестировать необходимый функционал. 9. Отключайте оповещения компилятора. Часто «билд» проектов на С сопровождается многочисленными оповещениями компилятора. Такое сообщение не всегда говорит об ошибке, но заставляет отвлекаться. Проверьте, возможно, в коде скрыт какой-то баг. Если же багов нет, отключайте ложные оповещения. 10. Добавляйте комментарии. Когда вы просматриваете код, вам могут встретиться отдельные запутанные участки. Если какой-то кусок кода привел вас в недоумение, то велика вероятность того, что и у других он вызовет такую же реакцию. Опишите эту проблему в документации и отправьте патч.

Работайте с документами

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

Работайте в команде

Работа в open source-проектах только отчасти связана с кодом. Настоящий успех проекту приносит команда. И вы можете помочь созданию сплоченной команды. 12. Отвечайте на вопросы. Лучший способ сплотить команду – это помогать другим. Для дальнейшего успеха проекта особенно важно отвечать на вопросы, в частности, на вопросы новичков. Это время не будет потрачено зря, даже если новичок задает вопрос, на который можно найти ответ, перечитав необходимую документацию. Кроме того, вы получите нового благодарного и активного участника своей команды. Все с чего-то начинают, а любому проекту необходим постоянный приток кадров, чтобы он продолжал развиваться. 13. Ведите блог. Если у вас есть блог, делитесь своим опытом, который вы получили на проекте. Расскажите о проблемах, с которыми вы столкнулись при использовании софта, и как вам удалось их решить. Таким образом, вы сможете убить двух зайцев сразу: поддержать внимание к проекту своих коллег и создать полезную базу информации для тех, кто присоединится к проекту в будущем и будет искать в сети ответы на уже описанные вами вопросы. (Блог, рассказывающий о ваших технических достижениях и изысканиях – это также отличный способ поделиться реальным опытом разработки и решения технических проблем, который может вам пригодиться при поиске новой работы). 14. Уделяйте внимание вебсайту. Большинство программистов, к сожалению, не самые лучшие дизайнеры, поэтому едва ли найдется проект, при разработке которого не прибегали дополнительно к помощи дизайнеров. Если вы талантливый веб-дизайнер и можете помочь улучшить вебсайт, а, следовательно, и представление проекта для пользователей, именно на это вам и следует направить свои усилия. Возможно, сайту необходим редизайн или собственный логотип. Именно эти умения могут требоваться в вашей команде. Многим руководителям команды на проектах не хватает именно таких креативных дизайнеров. И самое главное: прислушивайтесь к словам ваших коллег. Возможно, вам удастся помочь им в решении насущной проблемы. Так, например, недавно разработчики Parrot в процессе обсуждения в рассылке решили использовать GitHub в качестве системы работы с «тикетами» вместо прежней системы Trac. Некоторые были против этого перехода, поскольку не было возможности перенести существующие «тикеты» в новую систему. После дня обсуждения всех «за» и «против» один из разработчиков предложил написать программу-конвертер, чем и привлек к себе внимание. Через некоторое время программа была готова, и всю историю из более 450 «тикетов» удалось сохранить. В любом проекте всегда есть возможность найти для себя работу, и на open source-проектах таких возможностей множество. Нужно только суметь найти правильное применение своим способностям.

Открытое программное обеспечение стало двигателем инноваций. И в этой статье вы убедитесь в этом. Мы рассмотрим лучшие проекты OpenSource по версии премии Black Duck Open Source Rookies.

Это восьмой выпуск Black Duck Open Source Rookies. Каждый год, Black Duck рассматривает мир свободного программного обеспечения и находит лучшие новые Open Source проекты, которые были реализованы в этом году.

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

Как правило, у лауреатов премии наблюдается три тенденции в отрасли:

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

У RocketChat есть собственные приложения для Linux, Windows, MacOS, а также мобильные приложения для Android и iOS. Здесь даже есть собственное приложения для FirefoxOS, для настольных и мобильных устройств. А поскольку это Open Source проект, то это отличный выбор для разработчиков, жалеющих строить и развивать собственную платформу чата.

Mattermost

Другой отличной альтернативой для Slack есть Mattermost, ее история началась с компании - разработчика игр для HTML 5. Изначально это был игровой портал и приложение для обмена сообщениями, цель которого была найти геймеров за пределами Facebook. В итоге программа была переделана в решение для совместной работы в пределах компании, для таких случаев, когда компания не хочет, чтобы ее данные были получены провайдером. На данный момент - это отличная альтернатива Slack с открытым исходным кодом написанная на React и Go.

Mattermost объединяет все задачи коммуникации в одном месте, через удобный и интуитивно понятный интерфейс, удобный для поиска и доступный везде. Пользователи могут обмениваться сообщениями и файлами с помощью своих компьютеров и смартфонов, сохраняя всю важную информацию внутри ИТ инфраструктуры. Интерфейс Mattermost совместим с Slack и обеспечивает работу программного обеспечения разработанного для Slack. Есть две версии программы - одна рассчитана на работу с командами до 50 человек, а другая позволяет организовывать коммуникации между сотнями и тысячами пользователей.

Hubl.in

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

Hubl.in - свободное решение с открытым исходным кодом, для организации видеоконференций от компании Linagora, создателя платформы для совместной работы - OpenPaaS. Hubl.in поднимает связь в реальном времени на новый уровень, позволяя использовать браузер для организации видеоконференций, даже без каких либо плагинов.

Если вы читаете эту страницу, то вы можете попробовать Hubl.in прямо сейчас. Он основан на WebRTC, что позволяет реализовать децентрализованную связь между браузерами. Это значит, что ваша конференция не передается на Hubl.in никаким способом, это повышает безопасность и обеспечивает еще один уровень секретности.

MXNet

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

MXNet - это легкая библиотека машинного обучения, созданная DMLC разработчиками CXXNet, Minerva, и Purine2. Здесь применен опыт, полученный в этих проектах, а также смешан императивный и символический стиль программирования. MXNet использует планировщик динамических зависимостей, который автоматически паралеллизует как символические, так и императивные операции на лету. Уклон в сторону оптимизации делает MXNet быстрым и потребляющим немного памяти. Библиотека портативная и легкая, она легко масштабируется даже для нескольких машин. Можно даже использовать для таких задач, как распознавание образов на смартфоне. Группа DMLC хочет сделать открытое программное обеспечение широкодоступным. Проект MXNet тоже содержит набор руководств и схем для построения систем машинного обучения.

Bazel

Bazel стремится ускорить процесс сборки и повысить надежность за счет общего хранилища кода, в котором все программное обеспечение находится в состоянии открытого исходного кода. Здесь автоматизировано тестирование и релизы, используется как параллельность, так и кеширование, чтобы ускорить обработку. Особенно подходит для проектов с крупными базами кода, на основе нескольких языков программирования или для различных платформ. Основная особенность Bazel - тщательное тестирование в сложных условиях работы в Google. Текущая версия поддерживает Linux, OS X, но не Windows.

React Native

Разработчики мобильных приложений сталкиваются с трудным выбором: разрабатывать приложения для iOS или Android с помощью собственных инструментов, или воспользоваться кроссплатформенными. С одной стороны, родные приложения быстрее и предлагают лучший пользовательский интерфейс. Однако разработка такого приложения, означает - написать его, по крайней мере, два раза на самых разных языках программирования. Кроссплатформенные инструменты, такие как JavaScript позволяют им писать программу только раз, но эти приложения часто работают плохо и выглядят не очень красиво.

React Native - это OpenSource проект с открытым исходным кодом, поддерживаемый Facebook. Он позволяет двигаться сразу в двух направлениях. Создавая свои приложения с помощью библиотеки JavaScript React вы сохраняете логику работы приложений JavaScript, а также пользовательский интерфейс полностью нативный для обоих оболочек iOS и Android. Для разработчиков React Native представляет собой новый подход к написанию мобильных приложений - учиться раз, писать везде.

Kontena

Docker-контейнеры - революционный способ для развертывания приложений. Но многие организации все еще борются за решение для управления контейнерами.

Kontera - проект с открытым исходным кодом, для управления контейнерами. Kontera имеет много новых технологий и возможностей для ускорения развертывания. Здесь есть поддержка нескольких хостов, мульти-AZ контейнеры, сетевая технология Weave, VPN доступ к контейнерам, а также интуитивно понятный мастер развертывания. У Kontera есть все что компании может понадобиться для разработки, развертывания и контроля контейнерных систем. Она может быть установлена в любой облачной инфраструктуре. Поскольку это открытый исходный код, она скоро выйдет за рамки Docker и будет поддерживать контейнеры Windows, CoreOS PKT и другие контейнерные технологии.

Nulecule

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

Nulecule - это спецификация, для упаковки сложных многоконтейнерных приложений, обеспечивающая правильное развертывание. Nulecule при поддержке Red Hat предлагает целостную систему для управления отношениями между контейнерами. Большинство систем управления контейнерами рассматривают мультиконтейнерные приложения как отдельные объекты, а не как что-то целое. Такой подход ограничивает гибкость и портативность всего приложения. В отличие от этого решение на основе Nulecule создает стандартизированный способ описания приложения, в том числе всех ссылок на зависимости и метаданные коммуникаций внутри каждого образа контейнера.

InSpec

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

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

Hygieia

Технологические гиганты не одиноки в инвестировании в свободное программное обеспечение. В этом году Capital One попытались найти панель инструментов для разработчиков, и небыли обнаружены ни коммерческие решения ни OpenSource проекты. Поэтому компания создала собственную - Hygieia. Панель выпущена в прошлом году и ее исходный код опубликован на GitHub.

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

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

Glucosio

Когда программисту Бенджамину Кернеса был поставлен диагноз диабет второго типа в мае 2015 он понял, что нет инструментов с открытым исходным кодом для отслеживания уровня глюкозы или других показателей, для людей подобных ему. В сентябре 2015, он и небольшая команда выпустили Glucosio, первое приложение с открытым исходным кодом для мониторинга уровня глюкозы.

Пользователи Glucosio могут отслеживать уровень глюкозы в крови и получить полезные советы, через приложение помощник. Пользователи также могут внести свой вклад в исследование диабета, оставив анонимную демографическую или личную информацию. Glucosio на данный момент доступно на 20 языках и было загружено на каждом континенте. Разработчики также планируют предложить бесплатный API для исследователей, чтобы они могли получить доступ к данным, которые пользователи оставляют в программе.

Vault

Компания из Сан-Франциско HashiCorp известна своим инструментом для создания и настройки легкой, портативной среды разработки - Vagrant. Новый проект с открытым исходным кодом этой компании - Vault, инструмент для безопасного управления секретами. Здесь могут находиться ключи, API, пароли, сертификаты, учетные данные сотрудников, и другая секретная информация. У HashiCorp отличные Open Source проекты, можно сказать - так держать.

Vault шифрует и расшифровывает данные без их сохранения, а также позволяет командам безопасности определить параметры шифрования, а разработчикам - возможность хранить зашифрованные данные без разработки своих алгоритмов шифрования. Vault даже может генерировать секретные ключи по запросу AWS или баз данных SQL, а затем автоматически их отменять, когда они уже использованы. Поддерживается единый интерфейс для доступа, с жестким контролем, а также подробные журналы аудита, так что пользователи могут быть уверенны, что их секреты в безопасности.

Rancheros

Rancher Labs разработала высокоэффективную технологию запуска контейнеров - операционную систему в миниатюре, со всем необходимым для запуска контейнеров, но ничего больше. RancherOS - это дистрибутив Linux, размером 20 Мб, специально разработанный для простого способа запуска и управления контейнерами Docker. Идея заключается в том, что он похож на CoreOS, Но с одной особенностью - все здесь работает через Docker контейнеры, даже сама операционная система.

В RancherOS Docker работает непосредственно поверх ядра Linux и распределяет все сервисы пользовательского пространства как контейнеры Docker. Экземпляр системы Docker инициализирует все системные службы (Udev, DHCP, TTY) каждая из которых работает в отдельном контейнере. Экземпляр пользователя Docker создает отдельные контейнеры для всех пользователей, в пределах основного контейнера пользователя. RancherOS также обеспечивает обновление через контейнеры и может использовать различные системы управления контейнерами.

OWASP Security Knowledge Framework

OWASP Foundation (Проект Open Web Application Security) - это некоммерческое сообщество, которое предоставляет ресурсы и средства для обеспечения безопасности веб-приложений, которые разрабатывают OpenSource проекты. Многие разработчики не знают о рисках безопасности уязвимостей, с которыми они сталкиваются. С этой целью OWASP SKF (Security Knowledge Framework) обеспечивает свободный инструмент с открытым исходным кодом для обеспечения безопасности веб-приложений. Он также может служить учебным пособием, которое научит основам безопасности в веб-приложениях.

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

Выводы

Это были все новые Open Source проекты, отмеченные премией Black Duck. Награждение происходит каждый год, поэтому новые Open Source проекты за 2016 год мы увидим только в 2017.

С помощью open source проектов можно усовершенствовать свои навыки, исправляя чужие ошибки и создавая что-то новое. Можно найти проект, который будет полезен и для собственного бизнеса, например, в медицине или e-commerce. Кроме того, как практикующие программисты, один из лучших способов мотивировать себя на занятия программированием - это работа с open source проектами. Специально для читателей блога Geekbrains мы собрали список таких проектов из разных сфер деятельности:

Пакет программного обеспечения для работы с медицинскими изображениями. 3D Slicer доступен на нескольких платформах, в числе которых Windows, Linux и OS X.

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

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

Платформа для управления контентом, на которой работают миллионы веб-сайтов и приложений.

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

Свободная операционная система типа Unix.

Офисный пакет для совместной разработки с функционалом, как у Microsoft Office или OpenOffice.org.

Система для создания курсов. Бесплатное веб-приложение, которое преподаватели могут использовать для создания эффективных Интернет-сайтов для обучения. Moodle стала очень популярной среди педагогов по всему миру в качестве инструмента для создания динамических веб-сайтов для своих студентов.

ПО для создания и управления обучающим аудио и видео контентом.

Мультиплатформенная система управления корпоративным контентом написанная на Java. Работает с несколькими базами данных (в том числе MySQL, Oracle, PostgreSQL, SQLLite, и другие), а также поддерживает несколько методов аутентификации.

Софт для создания частных и общественных облаков.

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

DICOM-сервер для здравоохранения и медицинских исследований. Предназначен для облегчения управления данными медицинских изображений. Хороший инструмент для автоматизации медицинских задач визуализации, специфических для каждого медучреждения.

Проект создан силами Open Source сообщества и предназначен для обеспечения лучших решений для предприятий с помощью бизнес аналитики.
Основные области применения:

  • создание отчетов
  • анализ
  • сбор Данных
  • платформа бизнес-аналитики

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

Модульная open source система управления цифровыми данными.

Бесплатный софт для e-commerce.

Библиотека для быстрого фильтрования и сортировки больших коллекций - до 100000 элементов в браузере.

Языки c open source

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

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

Где найти больше open source проектов?

Один из самых крупных веб-сервисов для совместной разработки IT-проектов. Абсолютно бесплатен для open source проектов. Девиз сервиса “Social coding” можно перевести, как “Кодим вместе”.

Предназначен популяризовать open source проекты. С помощью инструментов, которые там предоставлены, разработчики создали мощное программное обеспечение в более чем 430,000 проектах; на ресурсе более 3,7 млн зарегистрированных пользователей. Популярный каталог объединяет более 41,8 млн клиентов с проектами open source и обслуживает более 4800000 скачиваний в день.

Цель Fossdroid - продвигать open source приложения на Android с помощью проекта F-Droid. Fossdroid берет свои данные из F-Droid и организует приложения в порядке, похожем на Google Play, с возможностью просмотра их по популярности.

Как узнать является ли ПО open source и каковы правила его использования?

Необходимо понимать, что не все open source проекты могут быть использованы в коммерческих целях или свободно модифицированы.Чтобы узнать, является ли ПО open source и каковы правила его использования, нужно посмотреть его лицензию . Обычно полный ее текст находится непосредственно в коде.

Один из докладов на прошедшей в Остине конференции OSCON (Open Source Convention) был посвящён весьма важному вопросу - началу работы в открытом проекте. Свои рекомендации новичкам дала программист Puppet Labs Люси Вайман.

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

Прежде всего, Open Source позволяет избежать изобретения колеса. Например, совершенно незачем создавать собственную ОС с нуля, если можно использовать ядро Linux в качестве основы.

Достоинств у подобного подхода много. Во-первых, использование готового кода позволяет существенно сократить как время разработки, так и необходимые для этого ресурсы. Во-вторых, этот метод повышает качество конечного продукта, поскольку открытое ПО довольно тщательно тестируется.

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

Часто забывается, что свобода и ответственность - две стороны одной медали. Продукт не может быть бесплатным, но специфика Open Source заключается в том, что пользователю предлагается оплатить его добровольно и любым удобным для себя способом.

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

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

Но что делать человеку, который боится показаться некомпетентным или не чувствует в себе достаточно сил, чтобы вносить какой-либо заметный вклад в открытый проект? Вайман предлагает несколько способов, которые позволят поддержать Open Source даже человеку, не обладающими навыками программирования.

Во-первых, тестирование. Причём понимать это следует в расширенном смысле - тестеры не только помогают обнаружить ошибки в коде, но и выносят на обсуждения предложения по улучшению функциональности.

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

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

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

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

Поддержка сообщества традиционно является сильной стороной Open Source. Подобная работа очень нужна и всегда воспринимается с благодарностью всеми участниками проекта.

В-четвёртых, обучение. Проведение семинаров и конференций очень способствует продвижению как конкретного решения, так и всего Open Source.

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

В-пятых, дизайн. В этом нуждается практически любой открытый проект.

Логотип, значки, другие элементы визуального оформления приложения - всё это делает проект действительно профессиональным.

Таким образом, Вайман уверена, что в мире Open Source найдётся место всем. Было бы желание, а возможность есть.