Tagged: github

Анализ исходного кода open source

В последнее время начало довольно много появляться исследований кода причём с какими-то очень странными результатами и почти всегда просто потрясающего идиотизма выводами. Мне стало интересно откуда они черпают информацию и как анализируют код потому что у самого давно уже было много идей занятся подобными исследованиями.
И сразу же нашёл сайт GitHubArchive который создал один из известных разработчиков протокола HTTP2 Илья Григорик.
На этом сайте лежит вся публичная информация которую можно получить через API гитхаба с 2012го года. И по этой всей информации можно делать SQL запросы за вменяемое время.
Очень прикольный доклад где чуваки проанализировали и построили много интересных графиков: какой язык вызывает больше всего ненависти а какой больше фана, как взаимосвязаны между собой языки и какие нации в мире больше всего комитящие в Гитхаб. Много неожиданного

GitHub day

Во время доклада «Грани опенсорса» на 35й минуте прозвучала отличная идея устроить День GitHub’а, когда все контрибьютят.

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

Отличная идея 🙂

Переходите все уже GitHub, хватит выпендриватся

Монополия GitHub

Лично я уже не понимаю когда вижу какой нибудь опенсорсный проект который не на GitHub, а на каком нибудь BitBucket, Google Code, SourceForge, Lanchpad, Codeplex, Java.net (kenai.com), Assembla, а то и вовсе исходники хостят у себя как например OpenJDK.

Унификация, глобализация и сетевой эффект

На сегодня очевидно что каким бы не был гитхаб, нравится он вам или нет, это это хостинг проектов №1. Все знают как пользоваться им, там больше всех проектов, многие указывают гитхаб в своих резюме, даже потенциальные работодатели заглядывают в репозитории кандидатов. Лично для меня важной фичей гитхаба является что я могу видеть и отслеживать все форки и по возможности забирать из них то что мне понравилось.
Вообщем социальный компонент в Гитхабе удачный.

Есть так называемый Сетевой эффект: ценность созданной сети, прямо пропорциональную квадрату числа пользователей N2.
Отсюда следует, что иногда приходится выбирать и пользоваться той технологией которая просто популярна, а не та что лучше.
Нравятся простые команды Bazaar? Прёшься по Меркуриал? В топку их, Гит популярнее, и всё тут.

От чего мы отказываемся, или что с конкурентами?

BitBucket — ближайший конкурент, отличный хостинг! Его купила компания Altalasian, которая делает JIRA, и все ждут и не дождутся, когда же она интегрирует эти два продукта. На самом деле никакого особого преимущества у битбакета нет. Единственная причина его пользовать — это пять приватных репозиториев. Для стартаперов из двух человек может хватить.
Но всего за пять баксов лучше купить приватные репозитории на Гитхабе и не парится. Тем более что знаешь что с этих денег они и поддерживают всю эту кучу опенсорса и это даже донейт, а не плата.
Вообщем в топку.

Google Code — несколько лет пилили поддержку гита, пока все не перешли на гитхаб. Он атисоциаелен: нет форков, имена авторов скрыты. В топку.

SourceForge — не разу не пользовался но выглядит он как адское говнище. На нём только старые проекты ещё остались. Буду в прошлом чуть ли не единственным хостингом открытых проектов они умудрились ничего не сделать чтобы хоть как то соответсовать новому десятилетию. Наконец-то в топку.

Lanchpad — классный хсотинг, но блин только для Ubuntu проектов и поддерживает только Bazzar. Круто что в нём изначально был встроенный CI. Именно там я впервые узнал что это. Я помню восторг с которым я читал логи как для компиляции моего deb пакета создаётся виртуалка, на неё полностью накатывается Linux и в чистой среде запускается компиляция. Вообщем в топку.

Codeplex — Microsoft же, в топку даже не глядя.
Java.net — туда же куда и Codeplex.
Assembla — когда был ещё только GoogleCode, у них единственных была возможность создавать приватные репозитории в SVN. Вообщем, смысл в их сервисе пропал уже давно. В топку.

Отдельный сервак: зачем? Есть же гитхаб. Когда я полез исследовать исходники OpenJDK я блин пол часа мучался с кочанным интерфейсом Merurial. Ну и опять таки, теряется социальный копонент и форки. В топку.

Так что хватит маяться дурью, переводите свои проекты на гитхаб и попробуйте не выходить за его рамки. Если у вас очень большой проект: бейте на отдельные репозитории. Всю документацию на вики страницы, все ишью — не в джиру а на гитхабовский трекер.
Да, конечно, JIRA и YouTraсk круче, но в умелых руках и гитхабовский ишью трекер сойдёт.
На крайний случай оставьте два трекера в параллели, это нормально. Гитхабовский всё равно нужен: во первых все пул реквесты будут в него попадать, во вторых я не всегда нахожу в себе силы найдя баг идти на чью-то джиру, долго регестрироватся там и только потом репортить. В Гитхабовскую джиру мне проще.
Есть ещё интересные онлайн трекреы которые просто используют REST API гитхаба добавляя своих рюшечек.
Вообщем, я считаю, выкрутится можно.

P.S. рекомендую отличный рассказ «Грани опенсорса».

Drupal JavaScript API for Grails

Это наверное самая стрёмная хрень которую я когда либо кодил: плагин для Grails который добавляет JS API от Drupal.

Дело в том что у Grails есть фундаментальная проблема: это CMF а не CMS. Т.е. после установки ты не можешь красивенько зайти и просто накликать контент. Всё нужно хардкодить. Я уверен это плохо и сильно тянет проект вниз.
А вот Drupal, несмотря на то что он написан на PHP, великолепный фреймворк. И есть чему у него поучится.
По крайней мере это единственная универсальная CMS мною виденная: хочешь делай блог, хочешь — визитку, магазин? Да на тебе пожалуйста!
Справедливости ради стоит сказать что видел я не так много CMS’ок.

И естественно в революционных умах возникают мысли перенять опыт из Drupal в Grails:
* Ставят плагин для PHP
* Ругаются в email листах
* А вот наш индийский коллега даже объявил что сделает CMS’ку. Но как то он пропал.

Сегодня. когда мне понадобилось снова изобретать велосипед который есть в Друпале, я плюнул и полностью нафиг перенёс drupal.js и написал обрезаную версию функции drupal_add_js.
И выложил на GitHub, дабы индийскому коллеге было что форкать 😉

Пример

class IndexController {

    def drupalJsService

    def index() {
        drupalJsService.addJs([someIntegerValue: 42], 'setting')
        drupalJsService.addJs('alert(Drupal.settings.someIntegerValue);', 'inline')
    }

}

И это превращается:

<html>
<head>
  <script src="/plugins/jquery-1.8.3/js/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
  <script src="/plugins/drupal-js-0.1.2/js/drupal/drupal.js" type="text/javascript"></script>
  <script type="text/javascript">
    jQuery.extend(Drupal.settings, {"someIntegerValue":42});
    alert(Drupal.settings.someIntegerValue);
  </script>
</head>
</html>

Ахтунг!
Плагин включает jQuery.noConflict(), поэтому оборачивайте всё в такой код

(function ($) {
...
})(jQuery);

По ходу роста проекта буду подпиливать его. Потом по хорошему нужно будет поднимать обсуждение и переносить функционал в Resources plugin.