Поиск похожих проектов на GitHub
Гитхаб — прекрасный сайт. Но представьте, что вы нашли проект А, и хотите узнать какие еще существуют похожие проекты. Как быть?
Именно с таким вдохновением уселся я разбирать API GitHub’a. Спустя пару недель свободного времени вот что получилось:
Для большинства проектов находится пара действительно интересных предложений. Вот несколько примеров: angular.js, front end bookmarks, three.js
Основная идея для построения рекомендаций — «Разработчики которые поставили звездочку этому проекту, также поставили звездочку. ». А детали идеи, ее недостатки и ссылка на код — ниже.
Пожалуй, мне стоит признаться что я никакой не эксперт в области машинного обучения или построения рекомендационых систем. Все что описано ниже — результат экспериментального тыка и огромного любопытства.
Идея для старта
Давай проанализируем всех фолловеров проекта А, посмотрим какие другие проекты они фолловят, и выберем наиболее часто повторяющиеся проекты? Увы, этот подход провалился с треском: среди результатов поиска рекомендаций на первые места зачастую выходят самые популярные проекты, но не обязательно имеющие отношение к текущему. Весь GitHub влюблен в Bootstrap — самый популярный проект на сегодня.
Сколько весит общая звезда?
Проект A — всего 100 звезд
Проект B — всего 200 звезд
Проект C — всего 1000 звезд
Допустим сто одних и тех же разработчиков поставили звездочку проекту А и B, и сто одних и тех же разработчиков поставили звездочку проекту А и С. Какой проект B или С будет более близким проекту А? Очевидно — B. Половина его фолловеров следят за проектом А. Лишь 10% последователей C заметили проект A.
Как же можно обобщить три переменные в одну формулу похожести? Думал я медленно и идея рассмотреть процент общих звездочек от суммарного числа звезд обоих проектов пришла не сразу:
similarity = 2 * shared_stars_count / (project_a_stars + project_b_stars)
Формула дает очень неплохие рекомендации. Как я узнал позже от Камерона Девидсона, эта формула была выведена в 1946-м году, двумя ботаниками (это не попытка оскорбить кого-либо, они действительно были специалистами в ботанике): Соренсеном и Дайсом.
Проблемы API
К сожалению у GitHub’a отсутствует bulk API, позволяющий одним запросом достать информацию обо всех фолловерах проекта. Ко всем неудобствам ограничение в 5 000 запросов в час делает анализ проектов невыносимо долгим. Адди Османи предложил ограничиться анализом лишь нескольких сотен последователей. Экспериментально, если выбрать случайных 500 последователей проекта — результат рекомендаций не ухудшится.
Метрику сходства проектов для случайных N последователей проекта A я переписал так:
alpha = N/project_a_stars
similarity = 2 * N / (alpha * (N + project_b_stars))
Такая формулировка делает проекты с примерно одинаковым числом звезд более близкими друг другу и неплохо отсеивает шум от популярных проектов.
К сожалению даже при N = 500 время постройки анализа одного проекта занимает около семи минут.
А что если вычислить все похожие проекты заранее?
Рекомендация работает неплохо для проектов с 200+ звездами. Но сколько таких проектов на GitHub’e? Как оказалось, чуть больше семи тысяч (на момент написания кода было около 7 300).
Написав паука для поиска ников всех фолловеров популярных репозиториев, я обнаружил около 457 115 уникальных пользователей :). Теперь для каждого пользователя нужно достать его любимые проекты. Но сколько это может занять времени? Даже при очень пессимистичной оценке в 300 звездочек на фолловера, учитывая ограничение на 5 000 запросов в час, пришлось бы «копать» гитхаб 11 суток без остановки.
11 суток не так и много для хобби, да? Задача хорошо распределяется, потому если у вас есть добрый друг, готовый поделиться своим токеном на гитхабе, то можно справиться за неделю! В тот же вечер появился паук для сбора любимых проектов фолловеров.
Весело шурша сеткой, время от времени часто спотыкаясь о баги, два паука насобирали необходимые данные за… 4 дня. Как оказалось, в среднем один пользователь гитхаба дает 22 звездочки. Лишь 0.02% пользователей дали больше 600 звезд. Потому при безупречной работе пауков можно было бы построить всю необходимую базу за пару суток.
Бесполезный факт
На GtHub’e больше всего ников начинается на букву ‘s’. За ними идут пользователи на ‘m’ и на ‘a’. Ники на заглавную ‘Q’ встречаются реже, чем ники на цифру 2:

В облако
Результат работы пауков я загрузил на S3. Все современные браузеры распознают CORS, потому обычным ajax запросом можно достать необходимый js файл с рекомендациями. Если вычисленных рекомендаций для проекта не существует в облаке, сайт перейдет в режим онлайн-постройки рекомендаций. Аутентифицируйтесь на гитхабе, чтобы получить большую квоту. Промежуточные данные сохраняются в локальный IndexedDB, потому можно возобновить индексацию даже после закрытия страницы.
Код
Если вы, дорогой хабрачитатель, знаете как можно улучшить рекомендации — я с огромным удовольствием! Код сайта доступен здесь: anvaka/gazer.
Ставьте звездочки проектам, которые вам нравятся — это делает приятно не только авторам репозиториев, но и может помочь другим разработчикам найти нужные проекты :).
Спасибо огромное, что дочитали до конца :)!
- github
- javascript
- recommender system
- Веб-разработка
- Open source
- JavaScript
Как искать интересные проекты на GitHub?
Изучаю программирование. Хотел бы почитать коды действующих проектов, понаблюдать за разработкой со стороны. Наверно самый популярный сейчас хостинг для проектов с открытым исходным кодом это GitHub. Но поиск на этом сайте крайне неудобен. Также существенный минус, что нет каталога проектов по категориям (как на sourceforge). В итоге сайт, хоть и хвастается показателем в 8,6М проектов, воспринимается как большая свалка. Где и как искать проекты? Интересуют небольшие разработки на языке Си, архитектуру которых можно осмыслить одному человеку и потренироваться в программировании на форке.
- Вопрос задан более трёх лет назад
- 29131 просмотр
Поиск способов для участия в разработке программного обеспечения с открытым кодом в GitHub
Вы можете найти способы участия в открытый код проектах на GitHub.com, которые относятся к вам.
В этой статье
Обнаружение соответствующих проектов
Если вас интересует определенная тема, перейдите на страницу github.com/topics/ . Например, если вас интересует машинное обучение, вы можете найти соответствующие проекты и описание основных проблем, возникающих впервые, перейдя на страницу https://github.com/topics/machine-learning. Для просмотра популярных тем перейдите на страницу Темы. Вы также можете выполнять поиск в репозиториях, соответствующих интересующей вас теме. Дополнительные сведения см. в разделе Поиск репозиториев.
Если вы были активны на GitHub.com, вы можете найти персонализированные рекомендации для проектов и хорошие первые проблемы на основе ваших прошлых вкладов, звезд и других действий в обзоре GitHub.
Просматривайте последние действия в репозиториях, которые вы отслеживаете, а также действия пользователей и организаций, на которых вы подписаны, на личной панели мониторинга. Дополнительные сведения см. в разделе Сведения о личной панели мониторинга.
Вы можете общаться с разработчиками по всему миру, задавать вопросы и отвечать на них, учиться и взаимодействовать с сотрудниками GitHub напрямую. Сведения о том, как начать беседу, см. в разделе «GitHub Community Support».
Поиск основных проблем, возникающих впервые
Если вы уже знаете, над каким проектом хотите работать, вы сможете найти описание проблем, подходящих для начинающих пользователей, перейдя на страницу github.com///contribute . Например, сведения о том, как внести свой первый вклад в проект electron/electron , можно найти на странице https://github.com/electron/electron/contribute.
Открытие проблемы
Если вы столкнулись с ошибкой в проекте с открытым кодом, проверьте, сообщалось ли ранее об этой ошибке. Если о ней не сообщалось, можно открыть проблему, чтобы сообщить об ошибке, в соответствии с рекомендациями по внесению вклада в проект.
Проверка проблемы или запроса на вытягивание
Существует множество способов участия в проектах с открытым кодом.
Воспроизведение ошибки, о которой было сообщено ранее
Вы можете внести свой вклад в проект с открытым кодом, проверив проблему или добавив дополнительный контекст к существующей проблеме.
Проверка запроса на вытягивание
Вы можете внести свой вклад в проект с открытым кодом, объединив запрос на вытягивание с локальной копией проекта и проверив изменения. Добавьте результат тестирования в комментарий к запросу на вытягивание.
Обновление проблем
Вы можете внести свой вклад в проект с открытым кодом, добавив дополнительные сведения для существующих проблем.
Дополнительные материалы
- «Классификация репозитория с помощью тем»
- «Сведения о панели мониторинга организации»
Инструкция по GitHub для рекрутеров: как найти того, кто вам нужен
Лучшие специалисты достойны того, чтобы их хорошенько поискать. Поэтому, команда Hurma System продолжает обсуждать, где искать кандидатов в 2019 году. И сегодня мы поговорим про IT-рекрутмент на крупнейшем сервисе для хостинга IT-проектов и их совместной разработки — GitHub.

Как GitHub может помочь найти специалистов?
GitHub — веб-сервис, который позволяет разработчикам хранить свой код, а также делиться этим кодом с коллегами и заниматься его совместной разработкой в open source.
Другими словами, GitHub для программистов — это как Facebook для среднестатистических пользователей. Разница в том, что технические специалисты могут работать над своим кодом совместно с другими, и отслеживать его обновления с помощью Git, распределенной системы управления версиями.
Профиль специалиста на GitHub для IT-рекрутера — ценный источник информации, поскольку именно там можно понять какая должность у кандидата, место его работы и в какой стране мира он находится. Также в профиле отображается email специалиста и его сайт.

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

Пошаговая инструкция: как искать специалистов в GitHub
Давайте разберем, какие нужно сделать первые шаги на веб-сервисе рекрутерам для поиска кандидатов.
1. Регистрация
На веб-сервисе поиском могут пользоваться только зарегистрированные пользователи. Создать учетную запись в GitHub не составит труда. После того, как вы заполните данные о себе, на указанную почту придет подтверждение, и вы сразу же сможете пользоваться сервисом.
2. Поиск по ключевым словам
Если вам нужен определенный специалист, например, Java-разработчик, то если вы пропишете слово «Java» в поиске, то GitHub выполнит поиск по таким категориям:

Веб-сервис по умолчанию выводит в результаты поиска репозитории. Если вам нужен конкретный специалист, нужно выбрать категорию Users. Тогда вы сможете увидеть всех пользователей, в профиле которых прописано это слово.
3. Поиск по языкам программирования
Также на GitHub можно сразу искать по языкам программирования, которые знает специалист.
Например, вам нужен специалист, владеющий Python. Вы вводите в Google такой запрос:
site:github.com inurl:tab=repositories Python
Далее, переходите по предложенным ссылкам.

4. Поиск по технологиям
В GitHub на страницах репозиториев также указываются кодовые названия технологий и их описания. Такой вид поиска можно осуществить по ключевым запросам, которые не являются названиями языков программирования.Например, в Google нужно ввести:
site:github.com inurl:tab.repositories Java Spring NoSQL

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

6. Коммуникация
Не спешите отправлять кандидату вакансию сразу после того, как проанализировали его профиль. Помните, GitHub не отображает навыки сотрудника и его опыт работы в полной мере. Ваша цель — познакомиться с разработчиком, отметить его достижения, например, крутой код на GitHub. А после этого обсудить интересующие вас проекты и скиллы.
Как заинтересовать кандидата?
Найти того, кто вам нужен — это половина дела. Намного труднее презентовать свою компанию так, чтобы кандидат отказался от всех других предложений и согласился работать в вашей компании. Для этого вам нужно знать несколько простых фактов.
1. Рынок подстраивается под IT-специалиста, а не наоборот
Стремительное развитие технологий превращает некоторых специалистов в сфере в «трофей», который хочет заполучить каждая компания. Но, если кандидат — профессионал, то в любом случае не он ищет работу, а она его. Поэтому пытаться достучаться до таких специалистов через другие площадки, например по поиску работы, просто бесполезно. Здесь на помощь приходят закрытые площадки, такие как GitHub. Но следует помнить: вашему кандидату прямо сейчас кто-то тоже может отправлять вакансию. Ваша задача — сделать так, чтобы он согласился именно на ваше предложение.
2. Работу в вашей компании нужно продавать
Представьте, что вы не просто предлагаете, а продаете кандидату работу в вашей компании. Тогда ваши действия должны разделиться на шаги, похожие на этапы продаж: установить контакт, выявить потребность специалиста, презентовать компанию, проработать возможные возражения, заключить сделку (оффер).
Универсальные сообщения вроде «Здравствуйте, я рекрутер такой-то компании, и у меня много отличных предложений» больше не работают. За внимание востребованного специалиста нужно бороться. Чтобы сделать это эффективно, необходимо тщательно анализировать профессиональные навыки сотрудника, его увлечения, текущее место работы и обязанности, как мы и писали выше. Только после этого напишите индивидуальное письмо с предложением, которое потенциально может его заинтересовать. В сообщении обязательно нужно отметить те преимущества компании, которые выгодно отличают ее от других работодателей; ответить на всевозможные вопросы, а после встретиться с ним лично и плавно подвести специалиста к подписанию оффера, поддерживая с ним контакт на всех этапах процесса рекрутмента.
3. Специалист может не проявлять энтузиазма
И это нормально. Иногда разработчики игнорируют сообщения. Здесь вам на помощь придет оригинальный фоллоу-ап. Если вы успешно прошли этот уровень и все-таки пригласили потенциального сотрудника на собеседование, помните, что ваш кандидат уже работает где-то или имеет на примете пару компаний. Следите за рынком и его предложениями по заработной плате, чтобы оставаться на уровне и быть интересным для специалиста. Подстраивайтесь под него в вопросах времени проведения собеседований и не создавайте преграды в виде тестовых заданий. Лучше, если тимлид в ходе интервью задаст несколько уточняющих вопросов или опишет возможную рабочую ситуацию, чтобы понять, как специалист принимает решения.
Почему важно рекрутить на GitHub?
Подбор персонала в IT — непростая и постоянно изменяющаяся сфера. Рекрутеру важно все время развиваться, быть в курсе тенденций рынка и постоянно обучаться новому. Именно поэтому точечный поиск на таких специализированных площадках, как GitHub, — отличная возможность найти нужного специалиста и проанализировать его деятельность. Все это помогает сделать более выгодное предложение и заполучить нужного специалиста в штат компании.