Николай Ланец
26 нояб. 2018 г., 7:57

Обновления на сайте MODX-Клуба. Проекты, задачи, таймтрекинг, схема и API.

Всем привет!

Заголовок получился объемный, но и обновлений тоже весьма не мало приплыло...

Во-первых, на сайт вернулись проекты. Это тот же каталог сайтов, что и был ранее (просто не сразу он вернулся после смены движка), но значительно доработанный. Это тот же каталог сайтов, что и был ранее (просто не сразу он вернулся после смены движка), но значительно доработанный. То есть изначально это был просто каталог сайтов (портфолио), где каждый мог не только разместить свои выполненные работы, но и указать с кем совместно эта работа была выполнена. А так же можно было объединяться в команды (компании) и указывать для какой команды была выполнена эта работа. Более подробно обо всем этом я писал здесь. К сожалению, тогда не получилось реализовать всего задуманного, работы добавляли (и не мало), но в команды народ так и не стал объединяться. Но теперь-то у нас новые технологии :) И сейчас я буду эту тему активно развивать (благо есть заказчик со схожим функционалом, то есть помимо желания еще и бюджеты и реальные кейсы).

Итак, со старой базы были восстановлены команды, проекты и участники. Пока нельзя редактировать существующие и добавлять новые команды, но это тоже скоро появится. Отредактировать свои работы и добавить новые можно. Но плюс к этому поменялся сам смысл этих проектов. Повторюсь, ранее это были просто сайты (уже готовые проекты), но сейчас время такое, что многие проекты начинают перекликаться друг с другом (повторное использование кода, свои и сторонние готовые компоненты и т.п.). В JS так вообще беда, проекты могут состоять из сотен компонентов, часть из которых может быть вашими собственными. И вот когда вы создаете свои компоненты и начинаете использовать их в нескольких других проектах, сам по себе каждый такой компонент становится самостоятельным проектом. И вот уже у вас головняк следить не только за конечными проектами, но и за этими компонентами, развиваться их, использовать в новых проектах, развивать, следить за обратной совместимостью, обновлять в используемых ранее проектах дабы получить новые фишки и исправления (а вместе с ними не редко и баги), и т.д. и т.п. Посмотрите мою ленту активности на гитхабе за последние пару месяцев, мало того, что кучность сильно возросла, так еще и в отдельные дни у меня по 60+ коммитов было. Это очень большой объем работы. В общем, в таких условиях просто раз в месяц-два-n добавить готовую работу и все - слишком неактуальная методика. И я решил расширить суть проектов. Теперь это могут быть не только сайты, но и любые другие (компоненты или типа того), а так же по ним теперь можно ставить задачи и выполнять эти задачи. Пока что эта модель сильно упрощенная (точнее недоработанная), ибо весь этот функционал слишком объемный и за эти несколько дней я просто не мог больше написать, но базовый функционал имеется (о чем я и спешу сегодня поведать), а остальное будет добавляться по мере и с учетом приоритетов.

Расскажу об этом еще чуть больше, зачем вообще все это нужно было.

Вообще, подобных сервисов конечно же полно (трелло, битрикс24, планфикс, жира, тоггл и т.д. и т.п.). Их реально очень много. Так зачем же я пишу этот свой велосипед? На это есть несколько причин.

1. Разрозненность функционала. Я довольно много поработал со многими сервисами (не только перечисленными, хотя в основном с перечисленными, за исключением жиры, с которой только знаком). Так вот, можно сказать, что каждый из них по своему хорош: трелло проста и очень удобна в использовании, все очень интерактивно; битрикс24 хорош в отслеживании всяких воронок продаж, оценке трудозатрат и т.п.; планфикс крайне круто подходил для управления IT-проектами, много всяких API-фишек, тоже все довольно интерактивно (хоть и не так, как в трелло). и именно в планфиксе больше всего я проработал (более сотни проектов там было); тоггл - просто лучший таймтрекер! Я от него был в восторге!.
Но минус всех этих проектов в том, что ни один из этих проектов не подходил комплексно, так, чтобы закрыть все потребности. В битрикс24 был весьма посредственный таймтрекер (даже без возможности отредактировать забытый ранее счетчик), в планфиксе все было плохо с маркетинговой составляющей (то есть проекты были и управлялись, но откуда пришли клиенты, каковы на них были затраты и т.д. и т.п. - всего этого там не было. И хотя они провели довольно большую работу в этом направлении, все равно это все было как маркетинговый костыль поверх программерского инструмента). В тоггл (ах этот тоггл! *вздохнул*)... Ничего, кроме таймтрекинга больше не было. То есть как таймтрекниг он превосходен, но ни маркетинговой составляющей, ни нормального управления проектами там близко не было. Это только таймтрекер. В трелло утопаешь даже на среднем проекте, а крупный, даже один, там тяжело тянуть.

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

2. Финансы. Ясное дело, что как правило в таких сервисах бесплатно только базовый функционал. При чем здесь есть не только прямые плановые расходы, но и определенные риски, связанные с изменениями условий. К примеру, планфикс был долгое время бесплатным, а потом он стал платным. Надо отдать должное, они долго предупреждали, потом порядка года наверно с меня еще не брали денег, потом еще дали специальный тариф, но все равно, при моих объемах на них только приходилось порядка $70 в квартал (а плюс к этому еще тоггл (от $9 за юзера)). Битрикс24 в какой-то момент сильно урезал функционал в бесплатной версии, да так, что пришлось в принципе с него сразу съезжать, потому что в таком виде он сильно потерял полезность (а там осталась история, взаимосвязи, затраченные калории на настройку и т.п.).
В какой-то момент я не только потерял некоторые инструменты, но и огромный объем по клиентской базе. В свое время я выполнил очень много проектов, но сейчас о многих из них остались только воспоминания.

3. Наращивание функционала. Как многие уже наверняка поняли, я сейчас с головой ушел в JS, при чем все мои наработки идут с открытым кодом и выкладываются в npm и github (за исключением некоторых клиентских проектов, но их доля сейчас сильно снижается). Моя личная цель - эти компоненты должны быть полезными и производительными, выполняющими реальные задачи. А чтобы в этом убедиться, их надо гонять на реальных и сложных проектах. MODX-Клуб - это теперь реально сложный проект. И если мои компоненты позволят хотя бы частично воплощать мои идеи, это будет свидетельствовать о том, что эти компоненты соответствуют поставленным целям. На клиентских проектах многие из подобных экспериментов не получится сделать по причине рисков (здесь-то риски только мои), там уже чаще всего используются более проверенные версии компонентов.

4. Увеличение эффективности. Вот это вообще больной вопрос. Как я уже говорил, программерская нагрузка сильно возросла, компонентов и проектов много, при чем многие из них перекликаются. По этой причине хотелось бы лучше понимать какие задачи надо выполнять в первую очередь (чтобы эффект был более высоким, повлияв на больше количество проектов и перекрыв большее число задач). Для таких вещей я работаю не только над программной базой, но и над интерфейсами, как, к примеру, диаграмма Ганта, иерархия задач (прямые зависимости задач), взаимосвязанные задачи (когда решение одних задач дает эффект на другие, в том числе и в других проектах) и т.п.

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

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

Схема и API

Ну а теперь немного интерактивного и наглядного:)

Во-первых, схема. Это крайне полезный инструмент, без которого на проекте выше среднего довольно сложно. В ней видны все взаимосвязи между объектами (имеется ввиду сущности, как правило записываемыми в базу данных, хотя не обязательно). Если вы внимательно ее изучите, то увидите взаимосвязи между пользователями, топиками, тегами, комментариями, проектами и т.п. При чем если переключиться в схему Mutation (то есть модифицирующих операций), можно увидеть, что операции по созданию/редактированию блогов, топиков и комментариев ведут на один и тот же объект Resource. http://joxi.ru/zANepBNhBdG4P2. И здесь все верно. Дело в том, что все это есть суть один тип объектов (кстати, проекты тоже имеют связь с ресурсами, но в мутации этого не видно (потому что я скрыл), хотя можно отследить в основной схеме).

Вот так вот даже если на некоторое время оставить проект, то вернувшись к нему (и к тому времени уже позабыв откуда ноги растут), глянешь на схему, и сразу многое становится понятным.

Ну а во-вторых, это конечно же API. Это теперь постоянный адрес и интерфейс, так что можно готовить для себя запросы и выводить информацию на своих проектах.
К примеру, вот так можно получить проекты пользователя, участников в этих проектах, их проекты и т.п.
query projects { projects( first: 5 orderBy: updatedAt_DESC where: { OR:[ { Members_some: { User: { username: "Fi1osof" } } }, { CreatedBy:{ username:"Fi1osof" } } ] } ) { id name Resource { uri Image{ path } } Members { User { username fullname Projects(first: 3) { Project { id name url Resource { uri } Members { User { username fullname } } } } } } Tasks{ id name Timers( first: 3 ){ id createdAt stopedAt } CreatedBy{ username fullname } } } }

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

UPD: а вот здесь можно посмотреть сколько времени я потратил на написание этой статьи :)

Понял, спасибо! Копаюсь.

htaccess работает, до nginx доступа нету.

Ругается на css и js, но на картинках тоже нет сжатия, но на них не ругается.

Дима, а вот как так сейчас получилось, что ты не туда коммент написал? Все не могу понять, люди ошибаются или ошибка какая-то.

Добавить комментарий