Как стать автором
Обновить
39
0
Дмитрий Волк @dvolk

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

Отправить сообщение
>вот у Вас John идёт на «Д», хотя у англофона он никаким образом с «D» не ассоциируется, потому что там другой звук, не связанный с буквой «D» никак

Вы упустили один момент — John у меня на букву «Д», когда включена _русская_ локаль.

В английской локали он будет на букву «J», как и положено.

С Яковом — да, действительно неоднозначно, так же как и с Вильямом/Уильямом.

А насчет Хаксли/Гексли — мне не кажется, что это имеет отношение к данной задаче. Так же как и то, что возможны варианты, когда одно и то же произношение можно передать разными буквами — в первом приближении мне было бы достаточно, чтобы во всех случаях выбирался один и тот же вариант. Я не собираюсь переводит имена и фамилии на другой язык. (оффтоп) я обалдел, когда узнал, что по правилам польского (блин, или чешского?!) языка Маргарет Тэтчер пишется как Малгожата Тэтчерова. И во всех газетах так и писалась.(/оффтоп)
Дерево — это скучно, и не очень хорошо отражает реальные связи между объектами (в данном случае — людьми). Вот тут (http://blog.cornelius-schumacher.de/2011/03/its-not-address-book.html) один КДЕ-шник предложил другой способ группировки контактов, мне кажется, интересно. Я себе поставил, поигрался. Пока программа сырая, но имеет потенциал.

Тут же главный интерес в том, чтобы такое появилось вообще, поэтому и написал в блог «Интерфейсы»
Огромное спасибо. Я ж видел эту статью, но почему-то решил, что это немного не то, что надо. Сейчас внимательно перечитал, и понял, что это очень и очень то.

Осталось решить проблему адаптации для сортировки в условиях ограниченных ресурсов (телефоны). Сразу приходит в голову несколько вариантов:

1. Генерить полные фонетические коды для всех контактов и записывать в кастом поле в адресной книге. В принципе, при наличии кучи API для популярных адресных книг, это можно реализовать как отдельный сервис, если их генерация на телефоне будет заметно отнимать ресурсы. Или просто в виде скрипта

2. Расширить адресную книгу, чтобы генерировать только те части фонетических кодов, которые нижны для сортировки. Например, для списка в статье достаточно первых пары букв, а для «Иванченко» и «Иванченков» — генерить полностью, и эта генерация будет работать при добавлении новых контактов, что происходит не так часто. В-общем, из расплывчато-теоретической задача _внезапно_ превратилась в «да возьми и сделай».

Еще раз спасибо.
Естественно, а если соответствующая библиотека будет выложена в open-source, то вообще замечательно будет!

Хмм… а если б я сказал «нет»? ;-)
Спасибо за наводку. Про soundex прочел, а бывает ли он для не-английских языков?
Для меня очень полезной была поддержка XML-а в Груви. Намного удобнее, чем в Джаве. Но когда я стал разбираться со Скалой, понял, что это все были детские игрушки :)
Я делал так — совершенно спокойно все работает. Единственный подводный камень, с которым я столкнулся: по некоторым причинам я использовал propertyMissing() — перехватчик обращения к несуществующему полю класса для других целей. И когда Hibernate из-за ошибки в маппинге попытался присвоить значение несуществующему полю в классе, результат был совершенно неожиданный, и я довольно долго искал причину.
Ну, или если без поноса, то как создатель веб-приложения я в принципе не могу отследить тот факт, что на некой комбинации ОС, браузера, и настройки шрифтов, шрифт заголовка рендерится криво. Ну нет такой возможности, ни у кого. Чтобы иметь возможность это заметить, люди должны смотреть глазами, и сообщать мне. Или пользователи, или же я могу посмотреть видео-запись моих автоматических веб-тестов. Не факт, что я замечу, но, предположим, что я заметил. И что мне с этим делать? Найти шрифт, работающий хорошо для этой комбинации, и написать тест, который проверит, что везде используется стандартный шрифт, а на этой комбинации внешнего окружения — специальный. И все. Я не тестирую браузеры и операционные системы (кроме случаев, когда я пишу браузер или операционную систему). Я могу тестировать только свой код. Мой код не занимается рендерингом, поэтому я рендеринг тестировать и не буду.
Еще раз: насчет эталонного сферического железа -это было в порядке бреда неспециалиста. Единственно правильный подход, как мне кажется, описан тут.
Про все, кроме последнего абзаца: А что вы реально можете сделать? Ваш код работает правильно? Правильно. Параметры переданы верно? Верно. Добавление «хака» для какой-то платформы — это не починка бага, а новая фича по-любому. Тесты и не могут ее поймать, по определению. А уже для хака пишется отдельный тест, который, опять же, проверяет не картинку, то, что хак задействован на нужной платформе, и незадействован на ненужной.

Если проводить аналогию с близкой мне областью (веб-приложения), то ни один тест никогда не поймает тот факт, что цвет заголовка страницы вызывает понос у зам-директора. Когда этот факт станет известен, я добавлю себе новое задание: Не использовать цвета: красный, оранжевый и желтый, а то у замдира от них понос. И буду проверять, что ни один элемент в странице не будет использовать эти цвета. Но я никогда не подумаю вставлять замдиру беспроводной датчик поноса и интегриривать в свои тесты данные с оного.

А насчет последнего абзаца — это, вообще, о чем?
Ну, блин, фанера и пенопласт — я до такого не додумался :) Моя идея была проще — срендерить картинку на эталонном железе/драйвере, глазками посмотреть (а еще лучше, чтобы начальство глазками посмотрело и подписало), а потом сравнивать эту эталонную картинку с полученной в тесте. Подозреваю, что идиотская идея
Извините, не специалист в этом, поэтому даже не представляю, как подступиться. Первое, что приходит в голову — двигаться в лоб, т.е. сравнивать результат с эталоном. Подозреваю, что это смешное предложение :)

На самом деле, специалист именно в этой области должен спросить себя: что конкретно надо тестировать, какие данные подвергаются верификации? Какие части процесса находятся под моим контролем, и какие нет? То есть если упомянутые глюки заведомо являются глюками комбинации железа и драйвера, а мы пишем мультимедийное приложение, то можем ли мы что-нибудь с этим сделать, даже если найдем способ протестировать? Если же единственное, что мы можем сделать — это передать некоторые дополнительные параметры видео-драйверу, то и надо тестировать тот алгоритм, который передает эти параметры в зависимости от окружения, т.е., грубо говоря, assertNvidiaParametersSet(myAlgorithm(nvidia)), а не изобретать способы сравнения направления тени.
Честно говоря, я не очень понимаю, что означает «нормально работать без xml-конфига». Он что, не работал просто через Alt-Shift-X, N? Или «Run As..» -> «TestNG»? А как у вас тестовый класс назывался?
Оно, конечно, правильно, но вы упускаете существование кучи библиотек дл я тестирования, имеющий в своей основе JUnit 3, 4, или TestNG.

IDE — Эклипс, плагин для TestNG, и все прекрасно запускается через Alt-Shift-X, N (TestNG) или Alt-Shit-X, T (JUnit любой версии).

В мавене используется maven-surefire-plugin, в котором тоже все просто работает (если соблюдены конвенции названия тестов). Пару раз бывало, что какая-то версия surefire не работала с какой-то конкретной версией TestNG, но это все решаемо.
Ага, она самая. Я много лет не имел дела ни с чем, кроме связки Spring+Hibernate, поэтому слегка не в курсе, какие проблемы существуют за ее пределами, и могу только сказать, что dependency injection очень помогает с тестированием, в числе прочего. Т.е. позволяет легко подменить боевую базу на тестовую in-memory для тестов. А дальше задача сводится к предыдущей :)
Эээ… а почему «вместо»? У нас, например, куча тестов на JUnit3, JUnit4, TestNG, все вместе прекрасно работает. В зависимости от потребности используем наиболее подходящий инструмент.

Разобраться с очередной несовместимостью версий — час от силы, требуется это сделать один или два раза за весь проект.
И да, согласен, что далеко не на каждый метод нужен поведенческий тест в изоляции. Только на те, которые принимают решения и на основе этих решений делают что-то с, грубо говоря, вводом-выводом.
К сожалению, мой пример с DeploymentServiceImpl.deploy() немного неудачный. В реальности, там есть пара-тройка веток исполнения (хотя весь метод не превышает 15 строк), и мне нужно быть уверенным, что всегда, после всех рефакторингов, если исходные данные нормальные, новый деплоймент будет записан в базу, послан мессидж в MQ, и еще произойдет пара вещей. Именно поэтому мне было легче сделать моки, которые бы сразу возвращали нужные мне результаты проверки исходных данных. Хотя, конечно, этого же можно было бы достичь через использование Mothers (т.е ApplicationMother.makeValidApp(), DeploymentDescriptionMother.makeValidDescriptionForApp(app) )

Информация

В рейтинге
Не участвует
Откуда
California, США
Зарегистрирован
Активность