Feb. 7th, 2012

metaclass: (Default)
Ключевой элемент этой модели: никогда и ни за что не строить четких планов, тем более с сроками исполнения. И ни в коем случае НИЧЕГО не фиксировать на бумаге-в багтрекере-в электронной почте, где попало. "А вдруг спросят за записанное".
Например, делают капремонт - нигде нет ни сроков, ни планов "что будет делаться", ни явного указания, что нужно делать жильцам. Вместо этого за 1 день до события в произвольное время вешается объявление "вам срочно нужно разломать полквартиры, чтобы дать доступ к инженерным сетям". А потом забывают уточнить, что для приемки замененных сетей нужно собрать все обратно, это нужно звонить и выяснять самому.
Любимая работающая модель исполнения каких-то проектов - это "беларусиковая" модель "реакция на внешние стимулы". "Срочно понадобилось - сделаем сегодня". "Сегодня не лень - идем строить хату". "Ебут мозги - пойдем что-нибудь сделаем". А лучше - "пойдем походим посмотрим подумаем". А еще лучше - найдем причину типа "у нас нету A,B и С, поэтому ничего сделать нельзя" и с легким сердцем идем отдыхать. Отнестись к A,B,С как к ресурсам и составить список вида "чем можно заменить, где найти ресурсы, что нужно чтобы их найти и в какие сроки это будет сделано" - запрещено, кромешное адское ТАБУ.
Т.е. вообще думать об нескольких методах решения проблем - табу. Всегда надо делать так как привыкли, если так нельзя - значит ждем пока будет можно.
Я так понимаю, это и вот это: http://artureg.livejournal.com/137663.html - следствия того, что в Беларуси спокойных времен практически не было. То войны, то революции, то чернобыль то еще какая трасца. Т.е. "ты построил план", но тут пришел очередной гитлер-сталин-ленин-сатана и все разъебалось в пух и прах. Или "решил вылезть из жопы, начал улучшать жизнь" - тебя заметили и расстреляли нахер, в назидание окружающим.
Я, как минимум, точно помню, как нас в детском саду, школе итд учили "не высовываться".
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)
скриншот
Полудневное (поверхностное) вздрючивание айседного приложения как средствами собственно веб-морды, так и 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] 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.

Profile

metaclass: (Default)
metaclass

April 2017

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

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 10th, 2025 02:53 am
Powered by Dreamwidth Studios