Backend Developer, ML
2,4
рейтинг
13 апреля 2013 в 23:07

Разное → Открытый Java проект для тех, кто ищет первый опыт разработки

Вступление


Доброго времени суток, жители Хабра. Так повелось, что я иногда занимаюсь подготовкой кадров для мира программистов. Пытался одно время, помимо очных курсов, записать несколько обучающих видео о Java для самых маленьких (http://java.b0noi.com), но даже треть не закнчил =(. Было решено не выходить за рамки офлайн курсов, однако одну из проблем еще предстояло решить. Как дать слушателям реальный опыт разработки? Еще хотелось бы не просто опыт командной разработки, но и то, что студенты могли бы включить в свое резюме, нечто публичное и, хоть немного, полезное.

Что хотелось бы видеть в проекте, с которым работают слушатели:
  • собственно Java с элементами Java EE;
  • maven;
  • git/mercurial;
  • continues integration system;
  • DB interaction;
  • JavaScript;

Реализация



Само собой такой проект может быть, скорее всего, только проектом под Веб. Поразмыслив над тем, что можно быстро создать и передать в OpenSource, с дальнейшей поддержкой, было принято решение сделать «еще один» сервис по сокращению ссылок. Тем более, что в Украине таких не так много, как в мире — было зарегистрировано несколько доменов: l.co.ua и более национальный http://ї.co.ua (этот домен пока еще не работает).

Сам проект хостится на Jelastic'e, но для тех кто будет делать пуши на сервер эта информация скорее всего не станет востребованной. Внешняя часть написана на JavaScript + BootStrap, а за кулисами трудится REST Server, написанный на Java (jersey). В качестве БД была выбрана MongoDB.

Итак, по факту проект делится на 4 части (будет больше =)):
  • REST;
  • Веб интерфейс, который не более чем еще один клиент для REST;
  • База данных;
  • Плагины для бразуеров (сейчас пока сделан только для православного Safari);

Плагин (пока доступен только для Safari) может такое:

REST


Вот короткое описание REST'a v. 0.2:

post

l.co.ua/rest/postUrl — post long url and get short id
l.co.ua/generateShort — post long url and get short id (DEPRICATED)

get

l.co.ua[id] — get redirect html to long url with id
l.co.ua/rest/statistic[id] — get statistic for id. Statistic is array in JSON format, each field contains information about: Date, Country and OS

Присоединиться


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

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

Анти-троллинг


Раздел для тех, кто вместо разговора по сути начинает менять тему. Я прекрасно понимаю, что можно было что-либо дописать к уже существующим сотням OpenSource проектам и кто-то скажет, что это велосипед, однако на данный момент это именно то, что мне необходимо, так как не исключено, что версию 2.0 уже будем писать совместно со слушателями полностью с нуля, так что вопрос своего проекта все равно бы стоял. Плюс для себя я давно хотел попробовать что-то на jelastic, ибо до этого работал только с Amazon EC2. Есть еще много причин, по которым выбрал именно такой вариант. Тем более, что сделать подобный проект — это 2-4 часа.

UPD: линк на github
UPD2: версия языка в проекте — Java 7 (идея указать версию языка была грамотно предложена хабраюзером Odis)
Viacheslav V Kovalevskyi @b0noII
карма
44,2
рейтинг 2,4
Backend Developer, ML
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разное

Комментарии (20)

  • +1
    REST server;
    Web UI, который не более чем еще один клиент для REST server;
    DB;
    plugins for browsers (сейчас пока сделан только для православного Safari);

    Здесь бы из английских слов оставить только REST и Safari
  • +1
    может лучше выложить ссылку на github?
    • –2
      Done. Спасибо.
      • 0
        можно клонировать, изменять и прямо пушить?
        • +1
          Нельзя. Я запрещаю :)
          • 0
            уже понял, спасибо)
  • +3
    А в чем командность разработки заключается? то что проект форкнут несколько человек и каждый зальет свое решение? Имхо для реальной командной разработки нужен проект посерьезней, а это в качестве разминки или проверки на хоть какой то опыт и знания.
    • 0
      Да, думаю Вы правы, командной разработки тут не будет =(
  • 0
    Теоретический вопрос: а на пул-реквесты будет даваться нормальный фидбэк типа ревьюрирования кода?
    • 0
      На Java часть — да. На остальное по возможности, но тоже скорее всего да.
  • 0
    Статьи это хорошо, но не лучше бы было сделать курс на хекслете, как было недавно для objective-c, чтобы там были уроки, тесты и задания, которые проверяются и выставляются балы?
    • 0
      Я тоже думаю начать там курс, уже ОЧЕНЬ давно, однако там для курса необходимо довольно много времени, а самое главное постоянно выделять это время. Как только буду видеть что есть возможность, курс появится, надеюсь это будет скоро.
  • –3
    Код откровенно слабый. В изобилии ошибки в словах (типа FILED вместо FIELD, например). Есть необоснованные вещи в плане проектирования, если можно так выразиться. Есть серьезные стилистические ошибки.

    Из того, что бросилось в глаза:
    • использование имен стандартных имен классов: URL, который запутает того, кто будет читать этот код.
    • использование интерфейса, как хранилища констант
    • неоправданное использование DBCursor (достаточно и более понятно использование findOne):
      if (!c.hasNext())
        return null;
      DBObject object = c.next();
      

    • постоянная сериализация/десериализация статистики вместо хранения её в виде объекта (тогда можно использовать, например, атомарные операции обновления документов в MongoDB)
    • использование в concurrent-окружении non-threadsafe класса RandomString
    • абсолютно невнятные операция обновления статистики: во-первых она не атомарна (соответственно в статистике очень быстро появятся ошибки), во-вторых неоптимальна и запутана, в-третьих — структура данных статистики неприменима для каких либо разумных вариантов агрегации на стороне MongoDB


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

    Надеюсь, эта здоровая критика приведет Вас к исправлению ошибок и дальнейшему развитию.
    • 0
      Я же предупреждал, код учебный. Буду уповать на то что сюда слушатели не подсмотрят =). Хорошо что хоть не все указали и еще многое пока осталось за кадром.

      Так как уже затронули эти вопросы, честно признаюсь что один из пунктов был мною допущен не специально, а именно хранилище констант =(
      • +2
        Тогда стоило в топике сказать, что тонны ошибок в коде сделаны специально, чтобы не вводить людей в заблуждение.
        Мало ли, кто-нибудь из работодателей может оказаться легковерным и подумать, что это Ваш обычный код ,)

        Насчёт того, что указал не всё — не ставил такой задачи. Просто то, что бросилось в глаза больше всего, посмотрев три класса и один интерфейс.
        • 0
          Соглашусь с тем что мне действительно стоило упомянуть это более точно в статье. Однако не нравится мотивировка этого необходимостью произвести позитивное впечатление на работодателя или опасностью произвести негативное впечатление.
    • 0
      эм. а в качестве хранилища констант что ещё использовать? абстрактный класс?
      • –1
        Класс с private конструктором и private static final полями.

        Это довольно известный антипаттерн. См., например, Joshua Bloch «Effective Java» (2nd ed). Или хотя бы педивикию.
        • 0
          писать больше) а я «ленивый». технически разницы между интерфейсов и «приватным» классом разницы не вижу. главное не поддаваться желанию заимплиментить этот интерфейс в класс, использующий нужные константы.

          или таки есть отличия на техническом слое?
        • 0
          Вы же знаете прописную истину, любой программист, открывший чужой код найдет множество ошибок и неточностей (особенно если он поставил себе такую цель). Но кто мешает учится на своих же ошибках? Мне кажется, главной задачей этого поста — предоставить полигон для программистов не имеющих должного опыта. Все программисты когда-нибудь были джуниорами. И ведь автор этого поста не пытается же продать Вам свое детище.

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