metaclass: (Default)
Итого, в результате специальной олимпиады:
Постановщик задач с меня печальный. Надо было в два раза больше пунктов в задание написать и более подробно.
[livejournal.com profile] kometa_zxc справилась с адовым деплойментом двух кромешных оперденей на убунте. Тестировать, по причине нехватки времени и того, что [livejournal.com profile] theiced обвинил ее в неумении читать вывод команд, не стала.

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

Подключение базы: у обоих ок. Айсед создал еще и тестовую базу (для чего внезапно понадобился nodejs). А для артурега мы использовали айседову базу.

По запуску и использованию приложения.
Если использование гуманное, без попыток сломать приложение - айседовое работает более логично.
Артурегово работает нормально, но были баги с парсингом кривых чисел и показом клиенту бессмысленных сообщений типа "null"(исправлено, но исправление сообщает клиенту в ответе cтек-трейс в json).
Обработка кривого ввода пользователя сделана лучше у айседа.

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

Какой вариант работы с xml лучше - спорный вопрос. Главное, чтобы корректно можно было найти и починить в случае надобности.


Проверка собственно сервиса отчетов:
Айсед: от входа работает в wget, RESTful, метод GET, параметры в url, понимает хидер Accept: на предмет - ответить json,xml или html, иначе - говорит что не может ответить в таком формате.
Read more... )

Артурег: Использует json-rpc, метод POST, не работает без хидера "--header=Content-Type: application/json-rpc; charset=UTF-8" и строгого json в теле POST:
Read more... )

При поверхностных попытках слома: айседовское ведет себя более гуманно - отвечает 403 или 500, и осмысленное сообщение. Было пару багов, приводящих к странному большому сообщению.

Артурегово выдает либо стектрейсы в json, либо в html, в зависимости от фазы луны места, где сломалось - в его либах или не в его.

Короче, по деплойменту: оба еле доползли до финиша при поддержке зрителей.
В рунтайме по очкам выиграл [livejournal.com profile] theiced. Явных багов было все таки больше у артурега, особенно малопонятный с таймзонами дефолтных значений времени.

По айседу остается открытым спорный вопрос с парсингом sql-параметров с помощью regexp и sanitize. Пока внятных аргументов за или против кроме "здесь так принято", я не слышал.

При практическом использовании: работает и то и другое, но привести обе софтины в идеальное состояние понадобится дофига времени, как минимум на то, чтобы сформулировать, каким должно быть это идеальное состояние.

Да, финальный штрих: после установки приложений, все потроха:
Айсед:248 мег из них .rvm - 237 мег, worm_reports - 5 мег)
Артурег:160 мег из них .m2 - 27 мег, operden - 133 мег)

Айсед: после rvm cleanup all - 109 мег, из них .rvm 97 мег
Артурег: mvn clean скачал еще немного жабы, но ничего сделать не смог. 160 мег осталось.

Артурег 2: поправил настройки базы в pom.xml. mvn clean поработал, выдал 100500 ошибок (хардкодед имя базы в sql :) и теперь размер 109 мег, из них 81 - приложение. и еще 170 мег жабы в /usr/lib/jvm


Объемы кода:
Read more... )
У артурега там весь dojo лежит, так что жабаскрипта там 100500.
metaclass: (Default)
скриншот
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и wget и редактированием конфига нашло только несколько мелких багов, типа "приложение показывает 500 Server error если указать кривой url".
Еще один мелкий баг был - редактирование конфига отчетов привело к незапускаемости rails s вообще, с диким стек-трейсом.
После исправления практически все кривые запросы напрямую к json-сервис показывали 403.
Ошибки в конфиге отчетов пишутся в лог сервиса.

Еще один крайне спорный момент: обработка параметров запроса:
Read more... )
[livejournal.com profile] theiced не использует препаред статементы,а вместо этого заменяет параметры регэкспом, а их значения обрабатывает ActiveRecord::Base.sanitize. Т.е. если мы верим либе - то у нас sql-injection не будет. Айсед утверждает, что у них так принято, хотя я всегда считал что единственно кошерный вариант - это препаред статементы и обработка переменных-параметров сервером.

Это решение, кстати, делает невалидными(не грузит их) такого рода sql-запросы:
select *,'?somestring' from test where stringval like ?stringval and boolval=?boolval
т.к. ?somestring оно считает параметром, хотя он очевидно не параметр, а литерал
metaclass: (Default)
[livejournal.com profile] artureg
скриншот без js
скриншот с js
скриншот отчета
работает!

Значит, что по поводу решения на java:
1) Вчера коллективом из N человек разбирались "как поставить нужную жабу на убунту 10.04"
вот результат: https://operden.googlecode.com/svn/trunk/howtoinstall.txt
2) Первая же команда не работает - нужно сначала выполнить sudo apt-get install python-software-properties . Если бы не вчерашний деплоймент айседовской опердени и наличие в нем nodejs требующего этой же команды для инсталляции, или же гугла - в жизнь бы не нашли, т.к. add-apt-repository и python-software-properties в здравом уме между собой увязать сложно.
3) В итоге, деплоймент (по уже проверенной инструкции, которую вчера составлял коллектив из нескольких гуру) занял гораздо меньше времени, заодно без отсылок на сторонние сайты. Впрочем, инструкция все равно рассчитана на гуру, не подробная. Отзыв [livejournal.com profile] kometa_zxc которая все это деплоит:
"у артурега ИМХО инструкция проще, но пары команд не хватает
и телодвижений меньше"

4) факап номер раз:
Read more... )
web-приложение запущено от root. Впрочем, для одноразового демо-приложения может и пойдет, но паранойя визжит.

Далее: что у артурега, что у айседа корни веб-приложений отдают всякую тяжелую неведомую ебаную хуйню, кто со стек-трейсами, кто еще с чем. Ну стек-трейсы отключаются само собой, переводом в продакшен режим(приложения оба запущены в development моде). Но в корень я бы все таки положил index.html со ссылкой на приложение, потому что пользователи(в т.ч. и я) инструкций где указано открыть конкретный url - не читают.

5) ошибки xml конфига с отчетами: у айседа показывает что "отчетов не найдено" с выводом в лог, у артурега - "ParseError at [row,col]:[46,5] Message: Element type "re" must be followed by either attribute specifications, ">" or "/>"."

6) формально валидный xml, но без атрибута name:
Read more... )
у айседа то же самое: молча пропускает, в логах нет информации никакой, отчета не видно. пропустил - в логе сообщение "Report must have name"

7) Формально валидный но не до конца заполненный xml, окно с фразой "null" и трейс в логе:
Read more... )

8) ошибочно введенный параметр фильтра: строка в числе:
скриншот
валится в parseInt на стороне сервера.
Если ввести 1234.1 в строку для integer, то выводит сообщение "For input string: "1234.1""

9) Дефолтные значения даты-времени: скриншот. Это типа "начало и конец предыдущего месяца".
Первая ошибка здесь моя: надо было поставить формат времени HH:mm:ss.
Но даже после исправления все равно получается 01:00:00 и 00:59:59.

10) Еще баг даты времени: даже если исправить предыдущий и сделать запрос "включительно", т.е. <=, то параметр 23:59:59 не покажет событие, которое произойдет в 23:59:59.5 т.е. за полсекунды до конца месяца.

11) Айседное приложение из wget работает от входа. Артуреговое я пока не запустил, т.к. он использует для передачи параметров POST и в нем json с параметрами.
wget --post-file=query.json "--header=Content-Type: application/json-rpc; charset=UTF-8" http://localhost:9090/so/smd/so.action

содержимое query.json:
"{"params":["datetime1",[{"name":"datetimevalb","value":1328047200000},{"name":"datetimevale","value":1330552799999}]],"method":"runReport","id":4}"

12) Если попросить у айседного сервиса json/xml/чорта лысого с помощью "header=Accept: text/xml" как завещает RESTful - оно или отдаст результат или скажет что не умеет такого.
У артурега - отдаст json в любом случае. Но! Если спросить ошибочно - ответит вместо json - html с ошибкой и стектрейсом.
Если же спросить "по другому" ошибочно: т.е. json валидный, а смысл его неправильный - то отдаст json с ошибкой). При этом все равно можно добится разного поведения (правильный ответ, ошибка в html, ошибка в json)) манипулируя параметрами.

13) неправильно введенный параметр даты времени вызывает невидимое исключение "undefined" в JavaScript, запрос не уходит, отчет остается открытым старый и единственное, где это видно - восклицательный знак возле поля ввода.

14) обновление по пункту 8:
оставливаем jetty
svn up
mvn install
mvn jetty:run

выводится сообщение "Invalid number format". Если глянуть на запрос в Firebug - внутри json-ответа еще и стек трейс от сервера есть.
metaclass: (Default)
[livejournal.com profile] theiced:
Проект и инструкция по деплойменту: https://github.com/iced/worm-reports
На данный момент деплоймент этого дела выглядит как пошаговая стратегия.
Причем ребе айсед принимает активное участие в деплойменте, см https://github.com/iced/worm-reports/commits/ за 06.02

Read more... )

TL;DR: У меня приложение поставилось (по последней версии инструкции) без явных проблем, вперемежку с записью результатов в ЖЖ и спорами с айседом. Тем не менее, первая версия инструкции содержала ошибки и несколько умолчаний (nodejs, lib_pqdev).

У [livejournal.com profile] kometa_zxc приложение поставилось только со второго раза и только после вмешательства ребе айседа.
Частично проблема в том, что она спешит, не всегда читает вывод команд и промахивается по кнопкам, а опыта для диагностики странных ошибок по оккультным сообщениям у нее недостаточно. Как минимум, один такой случай я видел.

(переформулирую более литературно: у нее мало опыта, чтобы не допускать чортово вуду на автомате(как это делают айсед, я и прочие ребе) и мало опыта, чтобы допущенное чортово вуду исправлять, исходя из оккультной симптоматики).

Проблемы:
1) .bash_profile и .profile - это упоминается в выводе инсталлятора rvm, но среди полстраницы вывода нужно заметить это и увязать с тем, что нужно выполнить source ~/.profile а не source ~/.bash_profile, как написано на сайте rvm. Т.е. "ответвление в инструкции".
2) rvm не поставился. По той причине, что rvm requirements не выдал список требований. Я не знаю, почему.
3) Вывод rvm requirements понятен только тем, кто варится в руби или вообще в разработке под линукс.

Итого: подобный деплоймент годится только для разработчиков или продвинутых админов, которым не влом делать весь вышеописанный ад.

Как бы переделал инструкцию по деплойменту:
1) Все инструкции с внешних сайтов перенес бы в свою.
2) Для каждой команды добавил бы подробное описание, что она делает, и какой должен быть вывод. Это обязательно, т.к. даже я не знаю, что делает та или иная команда и верно ли она отработала - это я решал при своем деплойменте реально НАУГАД.

Насчет того, что ставить надо из пакетов и реп: все верно, но ребе айсед сознательно выбрал идеологически другой метод, т.е. формально его сравнить с пакетным менеджером и прочим сложно. Как лучше делать, я не знаю. Лично я бы предпочел стабильный метод с пакетами, потому что мне подобная идеология ближе.

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 24th, 2017 05:42 pm
Powered by Dreamwidth Studios