|
|
Вс, 17 Авг, 2008, 15:22 Резиновые Кактусы Java
"... плюс кактификация всей страны!" Кактус - это фрэймворк для Java, который позволяет тестировать веб-приложения с использованием контейнера. Механика его работы, вкратце, состоит в том что вы встраиваете несколько служебных кактусовых сервлетов в свое веб-приложение, а они уже позволяют запускать ДВА экзмепляра одного и того же теста, один на стороне клиента (например в IDE в котрой пишется тест), а второй - внутри контейнера. Тестовый класс внутри контейнера создается рефлекшеном. Самое главное что это даже работает. Какие наблюдения? Кактус растет на старых либах. То есть, например, нужно использовать JUnit 3.8 и Ant 1.6.5. Другой JUnit использовать не удастся, впрочем наличие нового 4.5 в classpath не мешает выполнению кактусовских тестов. То есть если вдруг захочется написать обычные внеконтейнерные тесты с использование 4.5 - то всегда пожалуйста, кактусовые тесты все так же будут отлично работать. Разработчики в одном из мэйлинг-листов сказали что в следующей версии они все еще не будут переходить на 4.5, хотя работа по переходу уже ведется. Про ant... Это конечно относится ТОЛЬКО для использования связки ant+junit и запуска под консолью. IDEA вполне может запускать кактусовские тесты из своего IDE без всяких глюков. Насчет нового 1.7.1 анта, то в такске на жире ( https://issues.apache.org/jira/browse/CACTUS-246?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel) выложены два патча для Кактуса, которые позволяют тэги вида ant17cactus. Правда у меня нет ни времени ни желания накладывать эти патчи и разбираться с выращиванием кактусов из исходников. Если вам вдруг придет в голову использовать плагин Maven для кактуса, то знайте что мавен там тоже подразумевается старый. Это значит что команда maven plugin:install на новом мавене не пройдет. Самое простое решение - это поставить старый мавен 1, и тогда всё пройдет на отлично. Если старый мавен не по нутру, то можно зайти на официальный сайт нового в репозиторий плагинов ( http://maven.apache.org/plugins/index.html), найти там кактус нужной версии и скачать ВРУЧНУЮ. После чего выполнить магическую команду: "mvn install:install-file -DgroupId=cactus -DartifactId=cactus-maven -Dversion=ВЕРСИЯ_КАКТУСА_ЦЫФЕРКАМИ_ТИПА_ 1.7.2 -Dpackaging=maven-plugin -Dfile=ПУТЬ_КУДА_СКАЧАЛИ_ПЛАГИН". После чего он появится в репозитории m2 в documents and settings (ну или users под Вистой). Еще одна хренофича это то, что если проект сразу собирается в exploded-директорию, а не war-файл, то использовать кактусовые тэги для анта будет борода. Я использую сборку в exploded для ускорения сборки (это же на порядок как минимум ускорение!), и поэтому только потратил большое количество времени на выяснение деталей всяких, типа патчей для анта, а тэгами так и не попользовался :) Мегаразработчик Кактуса в одном из мэйлинг-листов сказал, что он не понимает зачем использовать exploded, и какую пользу с этого можно получить, поэтому и менять ничего не будет. Возможно, это повод объяснить ему пользу exploded, или самому покопаться в исходниках. Я не смог с помощью обычной анттаски junit заставить работать кактусовские тесты. Хотя может быть это возможно. При запуске тестов через junit выдается поразительное сообщение о том, что все тесты прошли успешно, даже если контейнер не запущен, а в тестах написан полный бред. Еще один сюрприз, это то что IDEA не поднимает графический junit-runner, если тесты запускаются из-под анта, но внутри идеевской IDE. С одной стороны - предсказуемо, с другой стороны - могли бы и придумать что-нибудь по этому поводу. Еще одно наблюдение - это то что конфиг-файл Кактуса должен лежать в класспасе проекта с тестами. То есть говоря попросту - в либе. Несколько странное место для конфига, да? Но в других местах он не подхватывается. Проверено опытным путем и прочитано в документации. Насчет отладки. Методы before и after, локально отлаживаются на ура. НО при попытке поставить бряк в тексте самого теста, а потом запустить тест в режиме отладки - ничего не произойдет. При этом Резина (у меня такой контейнер - Резина) - может зависнуть, и долго горестно материться на выдуманные причины (отсуствие классов, потоков и всего такого). Это потому что тест выполняется внутри контейнера, и попытка его подебажить довольно странна. В Идее решается созданием еще одной run/debug конфигурации, настроенной на сервер. Сначала запускается серверная отладка, потом run/debug configuration переключается назад на тесты, и после этого уже запускается тест. В Идее я не на нашел способа быстрого переключения между run/debug конфигурациями. Только шорткат альт+шифт+F10, который вызывает всё то же меню выбора конфигурации (ну, хотя бы не надо щелкать мышкой!). Возможно по этому поводу надо накатать письмецо в Jetbrains. Если они не припомнят мне описание хака на защиту 7.0.3 ;) В Идее желательно выбирать в run/debug JUnit'а не отдельный тест, а весь TestSuite. Потому что кактусовский тест выглядит несколько иначе чем JUnit'овский. Поэтому седьмая идея начинает на него периодически ругаться, а восьмая бетка (m1) - вообще глючит и у НЕЕ ИЗ ГЛАВНОГО МЕНЮ ИСЧЕЗАЕТ RUN/DEBUG CONFIGURATION! Решается это или пересозданием проекта (если ничего кроме восьмерки нет), либо открыванием в семерке, и исправлением конфигурации на test-suite вместо одиночного теста. Важно чтобы в test-suite был следующий метод: public AllTestsSuite(String theName) {
super(theName);
} |
, где AllTestsSuite - название тестсьюта Отдельно я долго вычурно матерился по поводу Турбины, у которой можно протестировать только экшены. Как это сделать - написано в официальном факе турбины на сайте turbine.apache.org. Несмотря на всё это говнище, кактус - одна из немногих технологий внутриконтейнерных тестов, которая РАБОТАЕТ.
Вс, 17 Авг, 2008, 11:52 Vista - для тех у кого перестал проверяться системный диск
Vista — решение вопроса "что делать если после перезагрузки не проверятеся системный диск"? Запускаешь проверку диска, он говорит: "диск используется, запланировать проверку на перезагрузке?". Отвечаешь "запланировать", перезагружаешься, а ничего не происходит. Если чуточку подумать, можно понять, почему это происходит. Для правозащитных компаний: нет, это происходит не только из-за взлома Висты эмуляцией Биоса :) Итак, продолжаем. Чтобы выпутаться из этой дурацкой ситуации, можно попробовать загрузиться в безопасном режиме (F8 при перезагрузке). Тогда сразу после crcdisk.sys запустится долгожданная проверка дика. Узнать это можно по долгому, очень долгому шуршанию жестким диском и сразу после этого - перезагрузка. Если проверка диска не запланирована, перезагрузки не происходит, я проверял. Нужно отметить, что при этом на экране ничегошеньки не происходит, выглядит это как рядовое (хотя и очень долгое) торможение загрузки. Еще одно наблюдение - иногда он при этом пропускает запланированную проверку диска и без всякой перезагрузки загружается в безопасном режиме. Тогда прямо из безопасного режима идем проверять диск. Он опять скажет что диск используется и назначит проверку диска уже по-настоящему. После этого перезагружаемся и снова в безопасный режим. Должно сработать.
Вт, 29 Июл, 2008, 13:37 Сбросить триал Идеи
Это очень просто. Странно, но оно не гуглится. Для этого нужно: 0) найти папку Documents and Settings/Имя_пользователя/.IntelliJIdea7 0/config 1) Удалить папку eval 2) В файле options/other.xml удалить строчку в которой содержится надпись "evlsprt" (без кавычек). Всё. За решение вопроса спасибо встроенному diff'у Идеи. Надеюсь создатели Идеи прослышав о таком хаке не будут плакать долго, а тем более менять систему защиты. Будут свободные деньги - обящзательно куплю.
Чт, 24 Июл, 2008, 00:02 о жителях академгородка :)
1. Ура, мне дали программистскую задачу. Более-менее. Или кто-то читает этот журнал, или бох внял :) Сегодня пару часов работал мозгом. 2. Продолжая тему негатива. Основной навык программистов Академа — это выпендреж. Художественный. Растолкать людей вокруг кулаками, локтями, плечами и показать какой ты охрененный. K->V. Сказать много красивых слов, раскатить грудь на две сажени. И неважно что может быть ты хуже в профессиональном смысле. Выпендреж — вот что главенствует среди зомби. "Я круче. Нет, Я!" Это слегка напоминает армию. Иерархии, авторитет. По часам расписанное время и диаграммы Ганта. От сюда и до обеда. Зомби надо истреблять ;) Основной навык жития в этом процессе — третья позиция. Или выдергивание себя прямо из первой. Каждый раз когда у коммуникаторов (тим-лидеров, проджект-менеджеров, операторов, ответственных и управляющих различных сортов) появляется эта мерзкая вибрирующая интнация "превосходства"... Херачьте им по мозгам. Можно бессознательно, но сохраняя эффективность. Каждый раз когда голос меняется на такой специальный "это-само-собой-разумеется" в отношении их правоты — херачьте им по мозгам. Ибо нефиг выпендриваться.
Сб, 19 Июл, 2008, 14:19 А если бы я умел писать игры?
Написал письма в несколько игровых компаний. Игры мне нравятся много больше сайтов. Минус — скорее всего придется сваливать из Новосибирска. Но если это произойдет — то нескоро. Учиться базовым вещам придется относительно долго. А пока поставлю-ка я себе вижуалку и dxsdk. Нет-нет, я пользуюсь только лицензионным софтом, у меня нет вижуалки ;)
Сб, 19 Июл, 2008, 02:11 Дивная верстка
Завершил создание сайта со сложной div'ной версткой. И электронным магазином на TCS. Теперь я папа верстки.
Вс, 8 Июн, 2008, 20:42 Посчитали. Переходим к VMWare :)
Короче, вчера вся эта шняга не удалась. Установить Самбу под Сигвин если и возможно, то не для меня-сейчас. Переходим к VMWare! Установил под нее Arch Linux, последннюю версию. Первое впечатление — чудо какое-то. 1. Девизом выбрана знаменитая по "автостопом по галактике" фраза "Don't panic!". Или это так релиз у них называется? Арчевцы славятся странными названиями релизов. 2. В руководстве по установке написано: "мы сделали систему которая ПРОСТО РАБОТАЕТ, но совсем непросто НАСТРАИВАЕТСЯ". Она и настраивается просто! 3. Невероятно аккуратное отношение к оперативной памяти и процессору. Сейчас я сижу за перегруженным сервером, и Арча работает как виртуальная машина... на 256мб оперативки! И при этом не грузит процессор! Заметки на память (или тем кто будет их читать при установке): (будут дополняться) 0. Прочитать инструкцию по установке!!! Читать здесь: http://wiki.archlinux.org/index.php/Beginners_Guide#Login_and_Changing_the_keymapVMWare 1. VMWare 6 не умеет корректно работать с физическими дисками. В смысле, когда говоришь ей "отдельные партишены", она всё равно будет показывать системе ВЕСЬ жесткий диск 2. Поэтому при разметке диска очень важно форматировать НУЖНЫЕ разделы, понимая что первый раздел всё равно первый, неважно что там указывал в настройках виртуальной машины. 3. Для этого нужно запустить cfdisk из консоли (или программы установки, там есть пункт меню "разбить разделы") и хорошенько запомнить как называются жесткие диски. 4. Консоль прямо в программе установки переключается с помощью альт+F2 или любой другой F 5. По причине такой странной работы VMWare ОБЯЗАТЕЛЬНО нужно создать хотя бы 1 виртуальный диск, с которого система будет ЗАГРУЖАТЬСЯ. Ни для чего больше он не нужен. Когда установщик бутлоадера спросит куда ему устанавливаться — устанавливаться именно туда. 6. Я еще смонтировал этот виртуальный диск на /boot. ХЗ что из этого выйдет... но пока что система рабоатет. Arch: 7. Сразу после установки не работает русская локаль. Это почему? Читать здесь: http://linuxforum.ru/index.php?showtopic=64648 и здесь: http://vadim303.wordpress.com/2007/03/06/012/8. Шрифта какой там в статьях написан не существует. По крайней мере пока нет интернета. А его обычно как раз и нет. Смотрим где-то в /usr/share/kbd/consolefonts, смотрим с помощью команды: ls | grep cyr. У меня оно нашло целый один шрифт, который оказался даже вполне приличным. 9. Если случайно указал неправильную локаль, то помите что ВИМА В СТАНДАРТНОЙ УСТАНОВКЕ НЕТ, есть nano, редактирование локали будет nano /etc/rc.conf, сохранять файлы с помощью ctrl+O enter, выходить из программы ctrl+X если до этого файл был сохранен, ctrl+X n — если не был сохранен.
Сб, 7 Июн, 2008, 21:05 Latest updates. Считаем до Пятиста Тридцати Тысяч
1. Неделю не был в Сети: новая работа и еще куча чего 2. Новая работа = Softage. Всё замечательно, только 2.1 туплю сильно, потому что занимаюсь не кодингом, а разбирательством с legacy-code какой-то слегка странной CMS'ки 2.2 случайно в первый день работы утащил диск с их Windows Vista :) Теперь сисадмин на меня странно смотрит, видать считает что я ее спёр и скопировал :) Невдомек чуваку что у меня покряканный Ultimate полгода стоял, а потом я его снес по причине уёбищности висты вообще, и ее x64-edition в частности 3. Туда нельзя ездить на велике. Потому что нельзя завести его внутрь, а перед зданием оставлять — нунах. Сколько раз у друзей велики крали, особенно хорошие. У меня — ни разу. Не хочу открывать счет :) 4. В Технопарке сгорел шлюз. Переставляю интернет на центральный сервер. ИМХО идиотизм, делать центральный сервер шлюзом. Хакай-нехочу. 5. Моя Widows Server 2003 SP2 Russian имеет забавный баг. Нельзя указать статический IP входящим VPN-клиентам когда работает домен. Пришлось переставить без домена. 6. Грустно без домена. Попробую поставить Самбу под Cygwin и поднять домен там. Но есть следующие задачи: 6.1 Знающие люди утверждают, что это невозможно )))) 6.2 Cygwin тормозной капец. Полчаса компилировал Git. Сейчас копирует Самбу из репозитория. И знаете что? В репозитории Самбы 530348 объектов! А эта свинья их копирует в час по чайной ложке. Сейчас на двенадцати процентах. И неизвестно, запустится ли. Ну что, считаем до пятиста тридцати тысяч? :)6.3 Если не запустится, придется на VMWare поднимать сервак с Федорой или Слакой только для того, чтобы запустить домен. Ну не фрю же ставить? Тем более что у меня нет скриптов управления доменом для фри, только для последних линуксов. И фрю качать надо, а то у меня она уж очень старая. Это форменный капец, товарищи. Зато будет линуксовиндовый сервер :) Зато будет рабоать медленнее черепахи.
Пн, 26 Май, 2008, 01:04 Еще одно тестовое
Написание тестовых заданий похоже стало у меня что-то вроде хобби. Я постоянно собираюсь куда-нибудь устроиться на работу кроме Технопарка, каждый раз почти устраиваюсь — и забиваю. Работать же надо, хуле :) И после каждого такого "захода" у меня остается еще одно резюме, и еще одно тестовое задание :)) На этот раз это задание представляет собой страничку на PHP, которая отображает график. Данные для графика вводятся в Экселе, сохраняются в файл и грузятся страничкой. Основная задача была выдержать ООП-стиль, выдержать MVC и разрулить баги ZendStudio (среды разработки на которой делается всё это безобразие). Я рад сообщить, что все эти цели были достигнуты, и теперь у меня есть удобный способ быстро писать ООП на PHP-5.
Пт, 2 Май, 2008, 10:25
"In my experience, I've rarely found the need to use a default implementation of an abstract method except in debug builds". — Trey Nash
In my experience, это фигня. Во-первых debug builds — это 99% разработки. Кому-нибудь зачем-нибудь нужны релизы? Плюс. Мне постоянно нужно дефолтное поведение, и одновременно способ с помощью кода указать классам-наследникам, что какой-то метод хорошо бы заимплементить, но не обязательно. Например, это касается контроллеров на веб-страницах. То же касается абстрактных классов, которые нельзя создавать. Чисто-абстрактный класс есть, чисто-реальный есть, а вот partial virtual — класса нет. И, да, это все легко эмулируется.
Чт, 1 Май, 2008, 03:59 Нас теперь двое
"Специалистов по юзабилити и QA всех компаний по производству мобильных телефонов следует посадить на кол. Я не буду снова рассуждать про парадигму интерфейса - для того, чтобы ее сменить, понадобится промышленное производство газенвагенов." © arkanoidнашел на http://www.livejournal.ru/gadgets/themes/id/6886
Пн, 28 Апр, 2008, 19:32 PHP 5.2.5 INI
В PHP 5.2.5 "инсталлятор для Windows" — кривой дефолтный инифайл. Что в нем конкретно кривого я не разобрался, но в нем не грузятся экстеншены. Решается использованием php.ini-recommended из 5.2.4. Может быть, решается тем же файлом и из 5.2.5, но у меня просто не было zip-версии. Кстати! В 5.2.5 zip и exe поменялись местами: теперь полный набор экстеншенов лежит в инсталляторе, а в зипе находится урезанная версия. Рекомендую сразу после установки ini-recommended включать экстеншены gd2, mysql и mbstring. Чтобы потом не удивляться, а чо ничо не работает. Для работы с 5.2.5 в Zend Studio нужен новый Zend Debugger: http://downloads.zend.com/pdtСтатья по настройке Zend Debugger лежит здесь: http://www.thierryb.net/pdtwiki/index.php?title=Using_PDT_:_Installation_:_Installing_the_Zend_Debugger#Installing_Zend_Debugger_server
Сб, 26 Апр, 2008, 10:26 Про эмуляцию и симуляцию
"Над базовой системой типов возможны только пирровы победы." — Бьёрн Страуструп
Вт, 22 Апр, 2008, 09:56 Стартовая уверенность
...Короче говоря, вы желаете получить значительное преимущество и вы не боитесь воспользоваться новыми идеями для того, чтобы обрести это преимущество. Однако, прежде чем пойти на риск, вы хотите убедиться в том , что вы по крайней мепе не полный дурак.
— Кент Бек, XP Explained
Пн, 21 Апр, 2008, 23:16 К вопросу об экзотических языках
Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot. — Eric S. Raymond
Вс, 6 Апр, 2008, 20:30 Opera это вам не Doom3
Понял, зачем нужен мощный компьютер, если не для игрушек. Сейчас у меня запушены Opera и Firefox с таким количеством открытых страничек, что это тормозит систему просто афигеть. Может потому что еще открыто куча Acrobat'ов и OpenDjVuReader'ов с книжками? :)
Вс, 6 Апр, 2008, 11:05
Реализовал в Simple ToDo движок, ru.olegchir.std.core, с пакетами session и database. Умеют ручной трэкниг сессий и простую древовидную базу данных.
Ноды умеют преобразование даты в Dojo-формате. Но пока я не подцепил Dojo, протестировать валидность этой операции не представляется возможным.
Для дерева полноценный итератор меня заломало делать. А неполноценный — лучше никому такое не показывать. Поэтому в открытый доступ выложен только поиск по всему дереву и итераторы первого уровня, а итераторы поиска в глубину и в ширину закрыты.
Следующие этапы: 2) преобразование в Spring 3) интерфейс на Dojo А времени полтора дня. Чудовищно.
Четко TDD выдержать не удалось :) При реализации бд в голове уже прочно укрепилась мысль, что это Composite+COR+Iterator. В один момент меня достало рефекторингами выводить на поверхность эту мысль, и я просто написал кусок кода.
По-моему это значит следующее: если какой-то паттерн просится быть реализованным, значит подсознание уже знает все те тесты, которые привели к этому паттерну. Просто писать их на клавиатуре — долго и накладно. По крайней мере моё подсознание — знает :)
P.S. Убегаю на чамп по тайцзицюаню. Буду там недолго, ибо нет времени. Но побывать надо, чтобы не сочли свиньёй. Будет что особо интересное — расскажу.
Сб, 5 Апр, 2008, 09:38 Axmor, todo, страсти по коллбэкам
Ночью понял, что Server Callback устроить на Ajax+Java+Tomcat — не судьба. Сложно, или нереально. Форумы полнятся обсуждением кривоработющих и платынх mod_pubsub'ов и прочей сомнительной фиготы. С этим и ушел спатеньки.
Polling делать ресурсозатратно.
Как еще организовать Observer напрямую на основе браузера — ума не приложу.
По заданию сказано, что БД хранится в сессии. Переопределим понятие сессии. Сессия будет у меня трэкиться на сервере вручную, а сохраняться в cookie. Будет установлено максимальное время жизни сессии.
Таким образом, можно будет хранить не сотню БД в "настоящих" сессиях, которые еще неизвестно когда закончатся и как их обрабатывать, а кучу флайвейтов UserSession и одну БД. Или как-то так.
|