Хочу представить вашему вниманию бесплатный сервис, который должен быть полезен всем, кто имеет дело с фрилансерами.
Встречайте — Greentask
Если кратко — это инструмент для создания и управления задачами c расширенными функциями. Небольшой спойлер — сервис написан на Go.
О сервисе
Данный сервис имеет множество применений, но для начала проведем аналогию.
Наверняка все знают сервисы быстрого обмена скриншотами типа Joxi. Другая аналогия — разнообразные pastebin’ы для быстрого обмена кусками кода. Greentask может выступать в роли сервиса быстрого обмена заданиями, но с куда более расширенными возможностями, о которых написано ниже.
История создания
Изначально хотелось сделать очень простой сервис, чтобы это не затянулось на долго, как это часто случается. В процессе работы появились новые идеи, и от некоторых от них отказаться не получилось. В итоге был выработан список маст хев функций и твердо решено не поддаваться искушению добавить что-то еще. Все остальное — в беклог.
У меня есть опыт работы с удаленными сотрудниками и фрилансерами, и каждый раз при поиске и работе возникают одни и те же проблемы:
- Канал общения
- Доставка задания
- Структура задания
- Изменение задания в процессе работы
Ниже мы разберем каждую из этих проблем в отдельности. Но чтобы родился новый проект осознания этих проблем недостаточно, необходимо чтобы сложились и другие условия. И они сложились. Я начал разработку прототипа и бекенда летом 15-го года, когда для этого появилось достаточно свободных денежных средств и времени, а также жгучее желание опробовать эту идею на базе новой для меня технологии. К этому времени я давно присматривался к языку программирования Go, и теперь когда в голове была идея нового проекта уже не было причин не начать разработку. Как известно лучший способ изучить новый язык программирования — это написать на нем что-то реальное и более сложное чем “Hello world!”. Решено — сделано. Работал в основном по выходным дням, на фултайме можно было бы уложиться в гораздо меньшие сроки, но такой задачи не стояло. Ниже я расскажу подробнее о своих впечатлениях при работе с Go и какие преимущества он дал в данном проекте.
Проблемы
Давайте разберем вышеупомянутые проблемы более детально, а также подходы которые использует Greentask для их решения.
Канал общения
Представьте, что у вас есть задача, но нет исполнителя. Вы публикуете объявление на нескольких фри-ланс биржах, и ждете ответа. Стоп. А куда вы ждете ответа? Как правило по нескольким каналам. Кто-то напишет через личные сообщения самой биржы, кто-то на почту, кто-то в skype, кто-то даже в icq. Но у вас нет ICQ уже много лет как. Хорошо, что есть skype, но в нем и без этого осталось куча контактов еще с публикации прошлого задания. В результате спагетти из разных каналов. Знакомо?
Greentask предлагает свести все общение в саму задачу. Все что вам нужно сделать на фриланс бирже — оставить ссылку на задание в вместо текста самого задания. Ссылка вида: greentask.in/your_task_hash. Для особо настырных, можно под ссылкой оставить текст: “Писать предложения и вопросы строго на странице задания”. Ведь браузер то есть у каждого.
Доставка задания
В случае если вы используете skype или другие мессенджеры, то первое что спросит кандидат: “Расскажите задачу более подробно”, и тут возможны варианты. Вы можете каждому копипастить задачу, или как-то передать “ворд” файл, который надо открыть локально. Потом все равно появятся вопросы, которые будут ссылаться на разные разделы задания, и вам придется прыгать туда-сюда, чтобы отыскать нужный пункт и потом ответить в скайпе.
Greentask решает проблему передачи оформленного задания просто открытием ссылки в браузере, ничего скачивать не нужно, а вопросы для каждого пункта задания можно задать прямо под ним. Каждый он-лайн посетитель задания выделяется кружком правой верхней части, таким образом вы можете оценить количество изучающих ваше задание.
Структура задания
Как известно, правильно сформулированное и оформленное задание уже на 50% выполнено. Greentask помогает вам выстроить структуру задания, понятную для исполнителя. За это сами исполнители вам скажут спасибо. А если вы фрилансер, то имеет смысл рекомендовать greentask вашим заказчикам, для обоюдного упрощения работы. Тут важно отметить, тот факт, что сам по себе сервис не исключает возможности написать ТЗ кое как, и не является эксклюзивным для этого инструментом, но помогает допустить меньше ошибок, только и всего. Хотя это уже не мало.
Изменение задания в процессе работы
Нередко случается, что уже после ознакомления исполнителя с заданием, требуется внести изменение в ТЗ. И хорошо бы чтобы он об этом узнал. И еще лучше, чтобы видно было, что конкретно изменилось. Для этого в общем случае придется сообщать отдельно об этом. И это не удобно, но если исполнителей(кандидатов) несколько, то это еще более неудобно.
Greentask разошлет всем участникам задания уведомления обо всех изменениях, ссылкой на страницу, где реализовано визуальное сравнений версий задания: версии которую видел исполнитель в последний раз и самой свежей версией задания. Это избавит от лишних вопросов, типа “А что изменилось с того раза?”
Почему сервис бесплатен?
Изначально я видел этот сервис бесплатным для всех, к тому же это в некотором роде экспериментальный проект. В будущем проект обещает остаться бесплатным для всех.
Chrome расширение
Специально для greentask разработано Chrome расширение для удобства доступа к заданиям, а также оперативного получения информации о об изменениях в задачах. Функционал очень прост и, надеюсь, понятен.
Мобильная версия
Сайт оптимизирован для просмотра в мобильных устройствах, а множественные элементы из Material создают почти нативный look and feel =)
Немного о Go
О Go уже написано достаточно, поэтому расскажу лишь какие преимущества дал язык в данном проекте, не растекаясь философскими мыслями. Лишь скажу, что Go, по моему мнению, язык для практиков, которые хотят быстро реализовать надежный функционал, и для которых не имеет значения есть ли там дженерики или сборщик мусора. Эти люди пишут программы которые просто работают.
Статический бинарник
Сам я бекендщик и люблю и умею фронтенд чуть более чем никак. Хоть и имею достаточное предоставление, о том, как лучше подстроить бекенд под фронт. Поэтому пришлось искать исполнителя. А как исполнителю поднять бекенд у себя локально? В случае с Go это 2 комманды: запуск миграций для создания таблиц в sqlite, и собственно запуск веб-сервера. Все. К тому же нет нужды передавать исходники как случае с python/ruby/php/… Про деплой и говорить нечего, это действительно просто.
Раздача статики и отсутствие Nginx
В greentask можно загружать вложения в пункты задания, при этом задача может быть приватной, то есть недоступной публично. В этом случае и вложения тоже не должны быть доступны публично. В случае с обычной схемой раздачи статики через Nginx, пришлось бы прибегать к разным нетривиальным способам настройки Nginx для контроля прав доступа к статике. В greentask эта логика находится внутри приложения.
Nginx или другой вебсервер не используется вовсе. Сжатие и ssl терминация происходят в приложении.
Асинхронные задачи
Не все задачи выполняются мгновенно, поэтому их желательно запускать асинхронно. В django для этого потребовался бы celery или аналог, то есть отдельный процесс. В go все работает в едином процессе и в коде запускается через оператор go. Очень просто и красиво. Использую для асинхронной отправки почты.
Вебсокеты
Ввиду наличия встроенных механизмов для асинхронной работы и готовых библиотек, реализация вебсокетов не составляет большого труда. В greentask я использую их для отображения онлайн юзеров и процедур обновления данных на странице при изменении. Поэтому открытая страница задания всегда отображает актуальные данные без перезагрузки, будь то комментарий, изменение в тексте или загрузка аттача исполнителем. Еще как бонус, вам не придет уведомление на email о новом комментарии и изменении задания если вы онлайн, потому что вы и так его увидите.
Задачи по расписанию
Аналогично асинхронным задачам, это также реализуется в едином процессе(вместо celery / celerybeat)
Генерация документации API для swagger
Это не эксклюзивная особенность и вообще не особенность Go, просто приятная функция в веб-фреймворке Beego на котором построен проект.
Если сообщество проявит интерес, то я бы мог более детально рассказать о тонкостях реализации некоторых функций сервиса с конкретными примерами кода.
Планы
Планы по дальнейшему развитию сервиса во многом зависят от пожеланий пользователей, поэтому прошу, если вас заинтересовал проект, оставить комментарий.
Из того что хотелось бы реализовать:
- Улучшить интерфейс(сервиса и chrome приложения)
- Мобильное приложение
- Больше настроек и опций, в том числе на счет политики комментирования задачи
- Возможность расшарить write доступ в задание для своих коллег
- Возможность скачать архив всех аттачей сразу
PS
Хочу заметить, что Greentask можно использовать не по прямому назначению — для создания и обсуждения задач. К примеру вы можете :
- составлять для себя TODO лист, и по факту выполнения ставить галочки готовности. Либо просто как блокнот.
- также возможно быстро обменяться файлами, при этом опция приватности не даст доступа третьим лицам.
- провести опрос среди определенного круга лиц, вы будете видеть все ответы, а комментаторы только свои. (“У Вани сегодня день рождения, я как * руководитель прошу назвать сумму которую вы можете пожертвовать на подарок из з/п”)
- публиковать новость
- создавать раздел FAQ
- использовать как WIKI движок c оповещением об изменениях
- создавать и делиться фотоальбомами(публично и приватно)
- скачивать файл из интернета напрямую в greentask, а потом скачивать уже с него. Это может быть полезно, когда файл напрямую по каким-то причинам не скачивается/скачивается медленно.
- Все остальное, что вы можете придумать, кстати напишите об этом в комментариях)
Автор: serzhb