Pull to refresh
77
0
Сергей @nekoval

Пользователь

Send message

Тестируем в браузере с помощью Geb

Reading time 10 min
Views 14K

Geb на практике


Я вот, скажем, люблю, когда всю работу за меня делают роботы. Поэтому считаю необходимым всякие скрипты, inspections, проверщики орфографии и, разумеется, автоматические тесты. Кстати, как вам такой тестик:

Browser.drive(driver: new InternetExplorerDriver()) {

    go "http://www.google.com"

    $('form', action:endsWith('/search')).q = 
                    'тестирование при помощи geb и spock'
    $('button', value:'Поиск').click()
    waitFor { $('#search') }
    assert $('#search').size() == 1
    assert $('#search').find('li.g a.l').size() > 0
    println "Первый результат: " + $('#res').find('li.g a.l', 0).text()
}.quit()

Мне кажется, у таких тестов высокая степень читаемости — неважно даже, какой это язык. Можно по такому вот образцу написать еще несколько подобных же тестов, не имея вообще никакого понятия о Geb, Groovy и о том, как это работает. Но для полного понимания немного углубимся в основы.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 2

Пишем deploy-скрипт для Grails

Reading time 5 min
Views 3.5K

Зачем нужен deploy-скрипт


Grails-приложения очень легко собираются в WAR. Делается это так:

grails war

Помимо того, что WAR собирается, очень хочется этот WAR еще и установить на сервер. В нашем случае это Tomcat. Установка вручную требует некоторой возни:
  1. Остановить сервер. Убить процесс, если он не остановился сам.
  2. Удалить старые файлы приложения (на всякий случай)
  3. Скопировать новый WAR на сервер. Иногда его нужно переименовывать (скажем, в ROOT.war)
В Maven эту работу может проделать, например, cargo plugin. Но с ним много приключений и настройки, причем он не особо учитывает особенности сервере.

Мы также можем использовать shell-скрипт. Но зачем писать на неудобном языке shell, когда есть замечательный кроссплатформенный язык Groovy?

Подробности
Total votes 6: ↑4 and ↓2 +2
Comments 4

Полнотекстовый поиск в Grails

Reading time 4 min
Views 3.2K
Подключить полнотекстовый поиск в Grails — задача довольно легкая. Для этого используется плагин Searchable, который делает все сущности Grails-приложения индексируемыми. Searchable позволяет абстрагировать весь процесс индексирования и поиска. При этом сам плагин использует библиотеку Compass, которая следит за тем, чтобы при изменении объекта (т.е. при сохранении в БД) он автоматически переиндексировался. Сам по себе Compass по сути является довольно мощным средством «поискового ORM»:
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Comments 0

Java Logging: история кошмара

Reading time 13 min
Views 128K

Вступление


Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
Вперед и с песней!
Total votes 148: ↑146 and ↓2 +144
Comments 89

Grails, jQuery, AJAX: делаем anchor-навигацию. Часть 2, финальная

Reading time 4 min
Views 3.4K

Полная и неполная страницы


Продолжаем разговор про anchor-навигацию. Наша цель — сделать рабочее приложение на Grails.

Есть одна тонкость. Очень хочется, чтобы страница могла быть показана как в полном варианте (с шапкой, навигацией и т.п.), так и в сокращенном (для AJAX-вызовов). Однако набрав /my-app/do/receipts, получим полный вариант. Теперь это выглядит так:
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Comments 1

Grails, jQuery, AJAX: делаем anchor-навигацию. Часть 1

Reading time 5 min
Views 17K

AJAX и все, все, все


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

Нетрудно заметить, что все больше сайтов используют AJAX и частичные обновления страниц, причем в невероятном количестве. В частности, «начиненные» AJAX ссылки могут использоваться для внутренней навигации по странице, переключения каких-то вкладок. Это хорошо тем, что
А) меньше данных нужно перегонять от сервера — только нужный кусок страницы и
Б) веб-страницы часто загружают просто гигантские CSS и JavaScript-файлы, которые при AJAX-обновлении можно повторно не загружать.

Итак, очень распространено построение приложений по сценарию: одна большая «стартовая» страница, загружающая весь JavaScript-код и CSS и более мелкие «внутренние» функциональные блоки, загружаемые через AJAX. С этим есть ряд проблем:
  1. В результате AJAX-действий внутреннее состояние страницы не отражено в адресной строке браузера.
  2. Как следствие, внутренние страницы не могут быть запомнены в закладки, нельзя «отправить ссылку другу».
  3. Не работает Back/Forward навигация в браузере, т.к. AJAX-ссылки не попадают в историю браузера.
Однако крупные сайты нашли некое «хакерское» решение, которое мы сейчас рассмотрим и напишем небольшой свой собственный аналог на Grails и jQuery.
Читать дальше →
Total votes 43: ↑37 and ↓6 +31
Comments 51

Как устроен видео-хостинг

Reading time 2 min
Views 6K
Жизнь устроена так, что показывать и обрабатывать цифровое видео всегда сложнее, чем цифровые фото:
  • Видео-контент занимает гораздо больше места.
  • Все манипуляции с видео (сжатие, масштабирование, перекодировка) требуют неизмеримо больше ресурсов, чем преобразование фото.
  • Из-за большего объема контента суммарный видео-трафик сильно перегоняет трафик всех остальных ресурсов, да еще и требует хорошей пропускной способности.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 16

СУБД — поворот на 90 градусов

Reading time 3 min
Views 5.8K
Объемы данных и требования к скорости их обработки за последние десятилетия многократно выросли. Системы управления базами данных (СУБД) пытаются соответствовать новым реалиям и претерпевают значительные эволюционные и революционные изменения. Одним из таких эволюционных факторов является движение в сторону т.н. вертикальных (column-based) систем хранения.
Примеры на пальцах
Total votes 18: ↑15 and ↓3 +12
Comments 32

Grails, jQuery, AJAX: первое знакомство

Reading time 2 min
Views 6.4K

Добавляем jQuery в Grails


Собственно никаких проблем с AJAX в Grails не наблюдается: контроллеры могут спокойно возвращать JSON-данные, GSP-страницы могут использовать соответствующие вспомогательные тэги.

По умолчанию Grails дружит с Prototype JS. Однако можно легким движением руки установить плагин поддержки jQuery.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Comments 1

Google Chrome aka браузер будущего… светлого будущего

Reading time 2 min
Views 463
Я уже года полтора вполне успешно пользуюсь Google Chrome — браузер шустрый, оставляет веб-страницам много места, минималистичный (а я это люблю).

Есть, однако, одна неприятная особенность — браузер периодически прячет чекбоксы в формах. Кстати, radio buttons он тоже с большим удовольствием прячет.
Читать дальше →
Total votes 35: ↑18 and ↓17 +1
Comments 39

Абсолютно бесполезный тест №1: PHP vs Groovy

Reading time 2 min
Views 1K
Недавно меня попросили сравнить провести тесты шаблонизатора для используемого нами фреймворка Grails. Зачем такие тесты нужны и что они, собственно, скажут о производительности приложения — не знаю. Однако это весело и народ такие тесты очень любит.

Собственно, у Grails никакого шаблонизатора нет, а есть язык Groovy, который можно использовать внутри серверных страничек (GSP — Groovy Server Pages). Итак, хотим измерить производительность языка Groovy. В качестве базовой точки отсчета используется язык PHP.

Читать дальше →
Total votes 11: ↑8 and ↓3 +5
Comments 11

Хочу, чтобы красиво!

Reading time 4 min
Views 617
У каждого программиста с накоплением опыта возникает некое обостренное чувство прекрасного. Думаю, это ощущение многим знакомо. Со временем формируется «вкус» к содержимому программы или её архитектуре. Возникает понимание того, что это должно быть сделано именно так, а не иначе, что хорошо, а что плохо. Появляются даже профессиональные капризы (Ненавижу, когда скобку переносят на следующую строку!)

От чувства прекрасного к грубой реальности...
Total votes 28: ↑23 and ↓5 +18
Comments 17

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity