metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-01-31 12:31 pm

Special Enterprise Programming Olympics

[livejournal.com profile] theiced и [livejournal.com profile] skif_by и [livejournal.com profile] artureg решили устроить соревнование на тему "какой язык программирования более адекватен в руках профессионала" и попросили придумать им задание. Поскольку синтетические задания с результатом в виде консольных утилит это скучно, а они все умеют веб хорошо, я им придумал задачку с не сильно сложным веб-приложением. Условие под катом:

Special Enterprise Programming Olympics

Problem 1:

You need to implement universal web-based application for report generation.

Application consists of:
* Database. You can use any relational DBMS you like, but you should have in mind ease of linux deployment.
* Web application deployed to your favorite web-server, app-server, whatever.
* Client-side JavaScript application working in modern browsers (>=IE7,Firefox>=5,Chrome)

* Web application must have report configuration file which contains:
** Unique system report id. Any string
** User-friendly name of report. For report titles and page headers.
** SQL query for report generation. SQL query is arbitrary and should contain parameters. SQL query will be in native format of used RDBMS.
** Query parameter description list.
Each parameter description contains parameter name, user-friendly caption,type,
output format and default value.
If you can infer parameter list from SQL query then this information is optional and
parameter list can be generated automatically.

** Query result field list. Field description should contain name, user-friendly name,
visibility flag(visible/not visible) and output format.
Field descriptions are optional - without description report should contain field
with default(returned from query) name and default output format.

* Types allowed for query parameters: integer,double,date,datetime,string,bool,decimal (money)

* Default values allowed for date or datetime parameters:
** Culture-invariant (!) string representation of any date or datetime
** If default value is prefixed with “@” then default parameter value is calculated as follows:
** @now - today (date) or current time(datetime)
** @prevmonthbeg - beginning of previous month
** @prevmonthend - end of previous month. Beware of difference in date and datetime (last day of month is 30/31, but last datetime of month is <00:00:00 01-of-nextmonth)
** @currmonthbeg - beginning of current month
** @currmonthend - end of current month
** @prevyearbeg - beginning of previous year
** @prevyearend - end of previous year
** @curryearbeg - beginning of current year
** @curryearend - end of current year

* Report configuration file will be edited once in a while based on
customers (report end-user) requirements.

Errors in configuration file format or in queries should be processed with
displaying of user-friendly error messages in client application and
error logging on server.


* Client application must show report list in any usable way(list of links, menu, tree, etc)
* Click on report must open report page which consists of:
** Report header (user-friendly report name)
** Report parameters table with user-friendly labels and editable parameters.
** "Refresh Report" button
** Report result table which is populated after click on "Refresh Report" button
or after Enter key press in any of parameter's edit controls.

* Paging or lazy result loading is not usually needed - most reports contains no more than 5 pages of data.

* When printing, report should follow the same structure as page, except for "Refresh" button.

* Report data is desirable to return in json or xml format, so it will be possible to
use wget/curl/any http client application to connect to server and get report data.


* Problem solution must contain:
** Deployment package for linux (any distro you like, but Ubuntu 10.04 LTS is preferred ). Also any deployment/configuration management system can be used.
** Deployment instructions.

Configuration file example: http://www.cacodaemon.org/content/so/ReportConfig.xml

Времени им - вообще до понедельника, но я бы добавил еще несколько дней на доработки по результатам.

[identity profile] metaclass.livejournal.com 2012-01-31 03:56 pm (UTC)(link)
Оооо, пипац, пусть вешаются)

[identity profile] w00dy.livejournal.com 2012-01-31 03:57 pm (UTC)(link)
А какой деплой считается адекватным? Когда всё на автомате, или просто с внятной документацией?

[identity profile] abadonne.livejournal.com 2012-01-31 03:58 pm (UTC)(link)
Вот думал же написать "тотализатор", но испугался, что набегут "полкабанщики" и всё испортят.

[identity profile] wildman.livejournal.com 2012-01-31 03:58 pm (UTC)(link)
Special Enterprise Programming Olympics

Problem 2:

тотализатор. :)

[identity profile] metaclass.livejournal.com 2012-01-31 03:58 pm (UTC)(link)
Ну вообще говоря это порт на веб одной подсистемы из моих оперденей.
Если нужно что-то простое - не всегда имеет смысл тянуть здоровые хххReports.

[identity profile] w00dy.livejournal.com 2012-01-31 03:59 pm (UTC)(link)
будут ставить полкабана?

[identity profile] abadonne.livejournal.com 2012-01-31 03:59 pm (UTC)(link)
Таки, да. :)

[identity profile] metaclass.livejournal.com 2012-01-31 04:03 pm (UTC)(link)
Оба этих варианта считаются адекватными.

[identity profile] metaclass.livejournal.com 2012-01-31 04:05 pm (UTC)(link)
Да, примерно так оно и есть. Эта ж отчетность постоянно встречается, а заморачиваться с готовыми странными продуктами, зная sql, не всегда хочется.

[identity profile] npocmu.livejournal.com 2012-01-31 04:05 pm (UTC)(link)
Задача высосана из пальца, так сказать генератор отчетов в сферическом вакууме...

[identity profile] w00dy.livejournal.com 2012-01-31 04:06 pm (UTC)(link)
А что делать если тот кто должен готовить отчёты не знаком с sql? Просто когда-то стояла такая задача, не придумали ничего умнее чем прикрутить ворд и powerpoint - инструменты знакомые каждому менеджеру.

[identity profile] metaclass.livejournal.com 2012-01-31 04:15 pm (UTC)(link)
На самом деле не совсем из пальца - у меня такое в десктопном варианте массово используется. Еще есть веб-морда с похожей функциональностью, на дотнете, но адаптирована под одну специфическую базу.

[identity profile] asvil (from livejournal.com) 2012-01-31 04:16 pm (UTC)(link)
Отчет создается на основе первичных данных. Это не яичница, чтобы его готовить. Он генерируется.
Менеджер нажимает кнопочку и забирает результат из принтера.

Но да, в условиях перестройки нужно было достигнуть капитализма, и Бил Гейтс придумал менеджерам excell, чтобы они там рисовали, какие хочешь темпы развития свободного рынка.
develop7: (Default)

[personal profile] develop7 2012-01-31 04:17 pm (UTC)(link)
то есть за три года плотного использования не самые тупые кодеры всё равно не осиливают инфраструктуру. ок.

[identity profile] metaclass.livejournal.com 2012-01-31 04:17 pm (UTC)(link)
Отчеты (в смысле sql запросы) делаю я или специально обученные люди.
А пользуются ими обычные пользователи.
Т.е. промежуточного слоя "аналитиков", которым нужны графические построители отчетов, нету.

[identity profile] wildman.livejournal.com 2012-01-31 04:27 pm (UTC)(link)
кстати, а что вот лично Вы подразумеваете под инфраструктурой?
что именно не осиливают?

[identity profile] alexclear.livejournal.com 2012-01-31 04:46 pm (UTC)(link)
Приветствую участников специальной олимпиады!
Вообще, странная тема для сочинения, конечно - "на каком языке программирования я лучше всего напишу на JavaScript".
От серверной части требуеца только ходить в базу и делать из резалтсетов JSON, что не очень сложно на любом языке программирования.

[identity profile] dennab.livejournal.com 2012-01-31 04:48 pm (UTC)(link)
ООО как мне напоминает часть одного из моих проектов на Groovy/Grails, тока что репорты у меня в базе хранились, а не в файле.

[identity profile] metaclass.livejournal.com 2012-01-31 04:53 pm (UTC)(link)
Именно, все равно других языков кроме жабаскрипта на клиенте не осталось)

[identity profile] serbod.livejournal.com 2012-01-31 05:02 pm (UTC)(link)
Ну почему же. Я такое делал примерно в 2004 году, нужно было формировать "тяжелые" отчеты на сервере в порядке очереди. В одну сетевую папочку кладутся файлики заданий, а в другой появляются готовые файлики отчетов.

А тут то же самое, только через веб.

[identity profile] vp.livejournal.com 2012-01-31 05:07 pm (UTC)(link)
Я тоже не верю. Тут только чтоб обдумать надо время.

[identity profile] w00dy.livejournal.com 2012-01-31 05:08 pm (UTC)(link)
+1

[identity profile] metaclass.livejournal.com 2012-01-31 05:15 pm (UTC)(link)
Тут не совсем такое: файлики в рантайме не меняются, юзерами выбираются отчеты и меняются их параметры.
А список доступных отчетов меняется при настройке системы.

[identity profile] metaclass.livejournal.com 2012-01-31 05:16 pm (UTC)(link)
Это на самом деле хорошо, что оно не сложно - будет явно видно, где червие, если что :)

[identity profile] inhate.livejournal.com 2012-01-31 05:16 pm (UTC)(link)
Ну оно должно деплоится может не быстрым, но тривиальным спосбом и переживать автоматические обновления ОС в ближайшие два-три года.

Т.е. вариант "поставь томкат-рельсы-zend из SVN" отличный повод занять в данном номинации почетное третье место ;)

Page 3 of 10