Регистрация | Войти
Lisp — программируемый язык программирования
RSS
Web-сайт первый опыт
alex_fff - 03.08.2017 18:29, Сообщений - 15
Привет всем!

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

Использовал hunchentoot, cl-mysql, parenscript для js и т.д.
Вроде бы со всем разобрался. На данный момент есть некий рабочий прототип.
Но когда гляжу на все это - вижу изобретенный велосипед, который едет конечно, но как-то неуклюже.

Это мой первый опыт во программированию для web. Компоненты брал чуть ли не первые, которые попадались.
Сервер - значит Hunchentoot, javascript - значит JQuery, Chartjs и parenscript.
Храним в базе данных - значит cl-mysql.

Шишек набил, проблемы порешал.
Собственно вопрос - а как умные люди решают подобные задачи? Вот, например, сейчас надо, чтобы страница с текстом и графиками формировалась и после этого можно было бросить на печать и напечаталось бы нормально. Или чтобы pdf с отчетом формировался.
А еще не до конца решен вопрос по восстановлению пароля. И совсем непонятно как, если mysql отвалился, его элегантно поднять при обращении очередного пользователя.
Странички когда формирую, если надо, организовываю div с форматированием через css. Но опыта нет никакого, и появляется ощущение, что есть пара-тройка книг или ресурсов, где описаны подходы ко всему этому. Вообще материалов очень много. Хочется как-то отфильтровать, чтобы все не перелопачивать.

Был бы очень признателен за любые советы или комментарии.
[#]
> parenscript

Вроде как 2k17 на дворе. Нынче в моде тонкие GraphQL сервера и SPA-клиенты. :)

> печать

Это делается с помощью CSS и @media print {}

> pdf

Трудно дать общий ответ. Зависит от нюансов. Можно на сервере делать, а можно и на клиенте.

> восстановление пароля

Тут могут быть варианты.
Например, по запросу "я забыл пароль" сгенерить одноразовый токен, записать в базу рядом с пользователем, и отправить e-mail с ним (http://example.com/login/?token=....).
По заходу по ссылке с токеном, пользователя пустить, а токен в базе вытереть.

> если mysql отвалился

оставьте эту проблему systemd (или что там у вас)

> div с форматированием через css

Вёрстка это слишком большая тема чтобы коротко ответить.
БЭМ.
andy128k - 03.08.2017 20:15
[#]
если понадобится JSON, то вот  обзор библиотек.
dima0905 - 12.08.2017 10:20
[#] Ответ на комментарий от dima0905 12.08.2017 10:20
Немного попиарюсь: если надо пихать CLOS объекты в JSON с иерархией, вложенными объектами и HATEOAS, а потом доставать обратно, то можно попробовать https://gitlab.com/alexey-martynov/cl-json-object/
amartynov - 15.08.2017 12:40
[#] Ответ на комментарий от amartynov 15.08.2017 12:40
> если надо пихать CLOS объекты в JSON с иерархией, вложенными объектами и HATEOAS, а потом доставать обратно

ЛОЛ, мне сейчас приходится сопровождать один проект (правда на Java), где вот так вот объекты в JSON и обратно гоняются. Так вот. НИКОГДА ТАК НЕ ДЕЛАЙТЕ. Любое изменение модели ведёт к совершенно непредвиденным изменениям по всему проекту. Особенно доставляет, когда в одном месте на сервере меняешь, а в мобильном клиенте ломается совершенно другая функция и никто этого не замечает неделю или две.
archimag - 15.08.2017 14:25
[#] Ответ на комментарий от archimag 15.08.2017 14:25
Ну не руками же эту конверсию менять? Задолбишься писать и сериализаторы, и парсеры. А там все по-человечески, с метаинформацией и прочим.

А опыт показывает, что изменение модели всегда ведет к последствиям. И если у нас столь слабо типизированная хрень как JSON посередине, то только тестирование нас спасает. И совершенно неважно, автоматически мы JSON получили или вручную. Особенно, если на версионность  внешнего интерфейса сложили не только болт, но и вообще все, что под рукой нашлось.
amartynov - 16.08.2017 13:02
[#] Ответ на комментарий от amartynov 16.08.2017 13:02
> только тестирование нас спасает.

При автоматической генерации JSON из объектов очень сложно писать тесты. Во-первых, в вывод поподает всякая хрень и всё это надо прописать в тестах. Во-вторых, изменение модели ломает половину тестов систему.
archimag - 16.08.2017 13:14
[#] Ответ на комментарий от archimag 15.08.2017 14:25
Ну мне кажется тут возможна только тотальность подхода - один генератор должен генерировать все стороны интерфейса - и сериализатор, и десериализатор. 

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

den73 - 16.08.2017 14:22
[#] Ответ на комментарий от den73 16.08.2017 14:22
> один генератор должен генерировать все стороны интерфейса

Сейчас часто к бэкэнду прилагается веб-интефрейс, android-приложение и iphone-приложение. Иметь один универсальный генератор для всех платформа малореалистично. 
archimag - 17.08.2017 15:10
[#] Ответ на комментарий от archimag 17.08.2017 15:10
>Иметь один универсальный генератор для всех платформа малореалистично.

Если только все эти клиенты не на JavaScript ;)
andy128k - 17.08.2017 17:06
[#] Ответ на комментарий от andy128k 17.08.2017 17:06
"не вижу препятствий" (c)

Независимо от целевого языка. Просто к генераторам кода отношусь осторожно-скептически. Большая часть доморощенных применима только для срочного закапывания.
amartynov - 18.08.2017 12:42
[#] Ответ на комментарий от andy128k 17.08.2017 17:06
> Если только все эти клиенты не на JavaScript ;)

Ну с точки зрения бизнес это было бы куда проще, потому что найти адекватных js-разработчиков проще, чем разработчиков под мобильные платформы, но... Недавно пришлось покопаться в исходниках cordova - я сразу понял, почему интерфейс на том же ionic "на ощупь" заметно отличается от нативного кода.
archimag - 21.08.2017 23:19
[#] Ответ на комментарий от archimag 21.08.2017 23:19
>... cordova ... ionic ...



andy128k - 22.08.2017 00:36
[#] Ответ на комментарий от archimag 21.08.2017 23:19
React-native не пробовал?
Hedin - 25.08.2017 08:57
[#] Ответ на комментарий от Hedin 25.08.2017 08:57
Все достаточно познавательно.
А вот скажем внешний вид сайта. Ну там меню сверху, меню сбоку.
Правильнее разобраться и самому написать нечто компактно несложное без изысков.
Или можно что-то использовать готовое, что сократит расходы в 5 раз.
Есть рекомендации?
alex_fff - 28.08.2017 14:07
[#] Ответ на комментарий от alex_fff 28.08.2017 14:07
Есть куча готовых CSS-библиотек (Bootstrap, Foundation...). Они сокращают время старта, но сильно ухудшают дальнейшую поддержку.
andy128k - 28.08.2017 14:40
@2009-2013 lisper.ru