23 июня 2009

Скромный локальный Summer of Code

Сие послание, в основном, адресовано недавно отмучавшимся с САКОДом второкурсникам.
Если кто-нибудь не знает, чем заняться летом,  и не против что-нибудь такое полезное попрограммировать, то у меня есть для вас пара идей, добротная реализация которых может принести вам, как минимум, всемирную славу (это почти не шутка :). Обе связаны с программой GanttProject, с которой я вожусь на досуге.

  1. Хочется сделать интеграцию с Google'овским календарём и контактами. Так чтоб в GanttProject'овский проект можно было засосать коллег из контактов в качестве "ресурсов", проассоцировать проект с календарём, а задачи проекта и занятые в них "ресурсы" -- с событиями календаря и их участниками.

  2. Рассказываю историю:

    Иван Петрович -- менеджер проекта, он управляет задачами и десятком исполнителей. То задачку создаст, то назначит кого-нибудь её выполнять. Исполнтели, допустим, такие же офисные крысы, сидят за компьютерами и шарятся вконтакте работают. Скажем, делают архитектурный и технический проект торгового центра. Ивану Петровичу хочется чтоб как только он сделает в проекте задачу "нарисовать изометрическую проекцию" и назначит на выполнение 3D-мастера Колю Синицына, то у Коли в его GanttProject'е эта задача бы появилась и Коля увидел бы что у него прибавилось работы.

    В принципе, и Коля был бы доволен, если бы по окончании работы нажал на кнопку "задача выполнена" и эта информация мгновенно переслалась бы Ивану Петровичу

    А ещё им хочется чтоб это всё "просто работало", без танцев с бубном вокруг какого-нибудь Exchange сервера, системы контроля версий, базы данных или ещё чего-нибудь в этом духе. Они в принципе используют электронную почту и пересылают друг другу файлы, но уже даже Колю подзадолбало отыскивать наиболее актуальную версию файла, что уж говорить про Ивана Петровича, у которого этих Коль десять штук.

    Соответственно, идея: хочется чтоб в GanttProject был встроен маленький jabber клиент, который умел бы сериализовывать весь проект или его часть (одну задачу например) в читаемый текстовый вид и посылать через GMail или через QIP или через Яндекс или через локальный jabber сервер другому GanttProject'у. А тот бы полученное сообщение парсил, превращал в свои структуры и вставлял бы в проект. В совсем сказочном мире Иван Петрович просто написал бы Коле в GTalk: "Коля, сделай изометрическую проекцию, срок три часа", а Коля через три часа ответил бы "Сделано". И всё это отобразилось бы в GanttProject. Но мы увы не в сказке и подобный диалог придётся вести между машинами, а людям давать интерфейс с кнопками.
Язык разработки -- Java. Обе идеи предполагают использование сторонних библиотек и чтение документации и стороннего кода. Сроки ничем в общем-то не ограничены, но делать такие задачи дольше чем несколько недель, наверное, не стоит. Система контроля версий -- SVN. Дисциплина строгая :) Реализация должна быть качественной во всех смыслах, поэтому надо, во-первых, быть готовым писать хороший код, во-вторых, следовать стилистическим соглашениям, в-третьих, уметь выдавать код небольшими порциями, а в четвёртых, после code review каждой порции не сидеть букой ((С) не мой) а исправлять указанные недостатки. Всё как у взрослых, короче.

Добротная реализация этх вещей, повторюсь, принесёт как минимум всемирную благодарность (ибо GanttProject -- програмулина довольно таки популярная), а в материальном плане, возможно, принесёт немного денег. Золотые горы не обещаю. Но на несколько хороших книг хватит (может, книги и объявить призом?).

Кому интересно -- пишите. Общие вопросы лучше наверное задавать прям тут (чтоб всем были видны), более приватные -- по почте.

05 июня 2009

Видеозаписи сессий Google I/O

На прошедшей на прошлой неделе в Сан-Франциско конференции Google I/O было много интересных презентаций и лекций. Сейчас начали появляться видеозаписи -- рекомендую смотреть. Из имеющихся на данный момент, на мой взгляд, интересны записи с сессий про Wave. Эта штука впечатляет и как продукт, и как открытая  платформа для написания интересных средств коммуникации.