Category: Link set

[LinkSet] Database migration tools

Версионная миграция структуры базы данных: основные подходы

DBMaintain and Unitils
Использование Unitils для тестирования в Java


Grails Database Migration Plugin
Использование Liquibase без головной боли. 10 советов из опыта реальной разработки




Tapestry 5 Database Migrations

For .NET

Плюсы: процесс создания и редактирования БД напоминает то, как бы вы это делали с Management Studio.
Минусы: сложность написания миграционных скриптов. Т.к. инкрементальные изменения строит сам проект, сохранность данных обеспечивается за счет pre-deploy и post-deploy-скриптов. Придется опираться на наличие/отсутствие полей в БД или «изобретать» таблицу schema version, уже реализованную в миграционных движках.

ECM7 Migrator
Движок миграций с открытым кодом. Проект поддерживает хабраюзер dima117.
Плюсы: поддерживаются разные СУБД, если что-то вас не устраивает, код открыт. Мигратор поддерживается и обрастает новыми функциями. И, пожалуй, самое важное, поддерживает несколько ключей миграций в одной базе данных. Это может быть очень полезно, если ваше приложение модульное и поддерживает плагины в том или ином виде. Каждый плагин может выполнять свои миграции и при этом использовать одну БД
Минусы: нет плюшек Entity Framework Migrations.

Entity Framework Migrations
Плюсы: работает из коробки, автоматически создает миграции по Db-контексту, понимает команды из консоли visual studio, миграции публикуются с помощью стандартного Publish из Visual Studio.
Минусы: зависит от Entity Framework.


FluentMigrator — система версионных миграций


[LinkSet] OWASP

Тестирование сканеров безопасности веб-приложений: подходы и критерии / Блог компании Positive Technologies / Хабрахабр

Category:OWASP Application Security Verification Standard Project — OWASP

Избранное: ссылки по IT безопасности / Блог компании Digital Security / Хабрахабр

Уязвимы по определению / Блог компании Positive Technologies / Хабрахабр

Атака на отказ в обслуживании методом slow HTTP POST / Хабрахабр

Лучшие практики и рекомендации по защите php-приложений от XSS-атак / Блог компании PENTESTIT / Хабрахабр

Безопасность приложения: это почти просто / Хабрахабр

Вся правда об XSS или Почему межсайтовое выполнение сценариев не является уязвимостью? / Хабрахабр

Стандарт верификации защищённости приложений.odt — Google Drive

Обзор площадки для тестирования веб-уязвимостей OWASP Top-10 на примере bWAPP

[Linkset] Migration to Java 8

Notes from Oracle

Also possible problems:

  • switching to 64bit JVM can require more memory (actually as I know it was only in few builds of Oracle JDK 6 and all next versions comes with enabled flag -XX:+UseCompressedOops)
  • changes in garbage collection can lead to unexpected pauses
  • inclusion of XML parsers into JDK proper requires changes to web application packaging or configuration
  • memory and runtime characterics of String#substring completely change in «minor» JDK revision
  • sorting a collection with a custom (incorrectly implemented) comparator suddenly throws exceptions it did not throw before  (Java error: Comparison method violates its general contract)
  • Calling Thread#stop(Throwable) (which was never a good idea and has been deprecated for a very long time) throws a UnsupportedOperationException since Java 8
  • Updated Unicode support changing sorting and casing behavior for some strings
  • Changes in generics compilation
  • inability to extend BitSet and implement Set<Integer> due to new default methods
  • Bigin rounding behavior (affected early builds of JDK7 and JDK8)

Also I tried to mark all this issues on StackOverflow with tags migration+java-8 and migration+java-7

Most valuable article
Key points: you need to update ASM lib and use cglib-nodep where possible.

Managing compatibility

See linkset [LinkSet] Compatibility
Tool for checking API and BPI

How Spring achieves compatibility with Java 6, 7 and 8

And don’t forget to enable -parameters option

In some cases it possible speed downgrade

Also from my experience of migration from JDK6 to JDK8:

1 . APT (Annotations Processing Tool) was removed. We used Enunciate for Web Services and it uses APT. So now we waiting next version of Enunciate that will use JSR 269 instead of APT.

And actually there was a lot of API that was removed from Java and in first link Oracle told about it just see «Features Removed from Java SE 8» and «Features Removed from JDK 8».

2 . java.util.Locale class was updated and it causes error in our application.
We have some users with ISO country code CS i.e. Serbia and Montenegro. In 2004 Montenegro separated from Serbia and this code CS was removed in new version of Locale.getISOCountries().
Since our application had checks on this code we got a lot of exceptions.

3 . maven-tomcat-plugin hasn’t yet version for Tomcat 8. You can vote or contribute MTOMCAT-234. And in Tomcat 8 in some configs we needed to change path starting with root /

4 . HashMap descendants should keep contract between put() and putAll()
All classes that extends HashMap and overrides `put() method may have errors if not overrides putAll() method.
You can see interest bug in Spring framework for details

5 . Clashing Getters.
Also we had an error when our domain classes contains two getters for the same property.
For example, class MerchantData contains two methods getParentMerchant() and isParentMerchant()

public void setParentMerchant(MerchantData parentMerchant) {
this.parentMerchant = parentMerchant;

public MerchantData getParentMerchant() {
return parentMerchant;

public boolean isParentMerchant() {
return subMerchants != null &amp;&amp; !subMerchants.isEmpty();

According to JavaBeans specification all getters of boolean properties should be named isSomething().
Hibernate tries to determine the type of property parentMerchant and it looks that type is Boolean.
Then he tries to get id of parentMerchant ant fail with error:

Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of

To fix that we need to rename method isParentMerchant() or get rid of it.
This kind of issues are happened only when we run project on JDK8.
So, please take it into account when you create a new getters.

I asked guys from JetBrains to make inspection for IntelliJ that reports about this potential bugs, please vote.
Also I created plugin

Something similar Why did PropertyDescriptor behavior change from Java 1.6 to 1.7?

6 . Groovy code may fails with java.lang.IncompatibleClassChangeError during constructing exceptions that was compiled in Java 6. Good article How to fix IncompatibleClassChangerError with groovy on jdk7
It’s very often error in Grails applications

7 . Maven is not working in Java 8 when JavaDoc tags are incomplete
You can easily find all this incomplete tags in IntelliJ by running inspection Ctrl+Alt+Shift+i «Declaration has JavaDoc problems»
Also there was few other errors in maven plugins, most of them already fixed but check them anyway

8 . ActiveMQ still has a bug that occurs only in JDK 8 AMQ-5356 Unable to see message contents from the web UI

9 . You really should resolve your JAR HELL before upgrading.

Also known bug:
Xstream no-args constructor error

Tutorial: Migrating to Java 8

Migration plan:

  1. Make build stable: migrate to the latest Maven, introduce Continuous Integration.
  2. Resolve JAR hell, explicitly define all libraries and plugins versions.
  3. Improve test coverage, take care to rounding of BigDecimal, working with dates, localization (country codes and time zones),  Comparators, XML parsing,  Reflection and serialization. Integration tests for all parts of application that using external JAR’s or classes for example database  (JDBC drivers).
  4. Fix basic and common errors: clashing geters, missing @Override annotations.
  5. Upgrade all bytecode-level manipulation libraries (CGLIB, ASM, JavaAssist)
  6. Try to compile with old JDK (6, 7) but try to run with new JDK (8, 9).
  7. Run all regression tests and fix all bugs that you’ll find.
  8. Upgrade other core libraries (Hibernate, Spring, JDBC divers) and try to remove obsolete (com.sun package)
  9. Test again and fix new founded bugs.
  10. Then try to compile with new JDK (8,9) but with target language level 6. But still run with new one.
  11. Test again and fix new founded bugs.
  12. Then try to compile with new JDK (8,9) and with last target language level (8, 9). And run with last.
  13. Test again and fix new founded bugs. Migration finished

[Linkset] «Stringly typed» Antipatern: Avoid string where other types are more appropriate

[Linkset] Синтез речи: беглый обзор

Тем кто ищет как автоматически произносить текст несколько ссылок с кратким описанием. Системы прозношения текста называются термином Text-to-speech (TTS) или Diphone Speech Synthesis и по этим терминам проще гуглить.


Синтез речи на Википедии
Speech Synthesis on Wikipedia


Speech Synthesis Markup Language (SSML) вкратце на Википедии.
Media Resource Control Protocol (MRCP)
Folstein Mini Mental Status Exam (MMSE) какой-то там тест по которому проверяют качество TTS.
Web Speech API Specification


Есть стандарт Java Speech API (JSAPI) и JSR 113: JavaTM Speech API 2.0 но с его реализацией похоже туго.
No reference implementation exists for JSAPI. Вот мне всегда было непонятно зачем тогда создавать стандарт.
Насколько я понял, синтезатор голоса был изначально во первой версии Java от Sun, но потом его вырезали в FreeTTS, и у IBM тоже была какая-то своя приблуда для этого IBM Speech.
Вот их FAQ можно найти ответы на другие вопросы и посмотреть древний список реализаций этого апи.

Java Speech API
Wrapper for vendors to simplify usage of the Java Speech API (JSR 113). Note that the spec is an untested early access and that there may be changes in the API. Demo implementations support FreeTTS, Sphinx 4, Microsoft Speech API 5.4 and the Mac OSX speech synthesizer.
Т.е. это просто биндинг к другим сервисам.


FreeTTS выглядит заброшенным но вполне рабочий. Я его уже использовал для озвучивания логов как Log4J Appender где он справлялся хорошо.
Изначально разрабатывался в лаборатории компании Sun. Поддерживает JSAPI 1.0 (а уже есть 2.0) но только по синтезу (javax.speech.synthesis), не по распознаванию.
Поддерживает три голоса английского, но вроде как можно импортировать MBROLA голоса но русского и украинского там нет.
Вообщем рекомендую для базового синтеза простых текстов.

FreeTTS is a speech synthesis system written entirely in the JavaTM programming language. It is based upon Flite: a small run-time speech synthesis engine developed at Carnegie Mellon University. Flite is derived from the Festival Speech Synthesis System from the University of Edinburgh and the FestVox project from Carnegie Mellon University.
Т.е. корнями FreeTTS уходит в плюсовые программы описанные тут ниже.

Как я уже говорил, проект заброшенный, но есть форк на Гитхабе который делается одним пацаном для софта для больных Афазией.

Вот пример кода с использованием: FreeTTS Hello World Java Maven.

MARY Text-to-Speech System (MaryTTS)

Более серьёзный синтезатор разработанный в немецком университете и имеющий коммерческое применение. Разработка поддерживается, последний комит был пять дней назад.
Поддерживаются американский и британский английский, мужской русский, немецкий, итальянский, шведский, турецкий, французский, телугу (язык юго-восточноо штата в Индии) и была попытка сделать тибетский и арабский (статья). Украинского нету.
Список языков и голосов и если что можно сделать самому поддержку языка.

MARY is an open-source, multilingual Text-to-Speech Synthesis platform written in Java. It was originally developed as a collaborative project of DFKI’s Language Technology lab and the Institute of Phonetics at Saarland University and is now being maintained by DFKI. As of version 4.3, MARY TTS supports German, British and American English, Telugu, Turkish, and Russian; more languages are in preparation. MARY TTS comes with toolkits for quickly adding support for new languages and for building unit selection and HMM-based synthesis voices.

Я не пробовал в работе, но мне кажется что его вполне можно использовать в продакшене.

Облачные сервисы —

Послыешь запрос, получаешь


«распознавание и синтез речи, голосовую активацию и выделение смысловых объектов в произносимом тексте.»
Есть в виде облачного сервиса и HTTP API к нему и в виде Mobile SDK для iOS, Android и WindowsPhone которые шлют поток с микрофона на сервер для распознавания.
Платный для коммерческого использования, до 10000 запросов бесплатен, но нужно запросить API ключ и я его уже четвёртый день жду.
Можно попробовать установив приложение Яндекс.Диктовка и оно распознаёт практически идеально.

Работает на своём движке. Вот тут Яндекс рассказали как Распознавание речи от Яндекса. Под капотом у Yandex.SpeechKit
Поддерживает распознавание и синтез русского языка и только распознавание турецкого, разрабатывается поддержка английского, но есть возможность говорить с разными эмоциями (добрый, злой, нейтральный) что довольно прикольно как по мне. Ещё интересно что может учитывать гео координаты для более точного распознавания названий улиц.

Железки начали понимать. А мы их всё равно считаем глупыми
Почему роботы разговаривают с нами только в кино

Для Cloud API можно сгенерировать звук по GET запросу например так»Какой%20ровный%20и%20пра%27вильный%20голос»&speaker=zahar

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

Центр речевых технологий

«Центр речевых технологий» российская компания делающая синтезаторы текста и другой софт например для голосовой аутентификации и распознавалки для спецслужб.
Семь голосов, один женский голос на казахском языке. Украинского нету.
Дают облачный API для синтеза VoiceFabric, вроде не дорого.

VoiceFabric: технология синтеза речи из облака

Ребята очень крутые и даже умудрились сгенерировать голос умершего человека:

Google Speech API

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

Голос неприятный и ограничение на длину текста примерно в сто букв, но зато есть все языки которые поддерживаются гугловым онлайн переводчиком, включая украинский, белорусский и казахский.
Говорят что внутри переводчик использует движок eSpeak о котором ниже.

Также есть возможность распозновать текст но там уже нужно иметь апи ключ и лимит на 50 запросов в сутки

J.A.R.V.I.S. — Java биндинг (врапер) к Google Speech API

Microsoft Bing translator (Microsoft Translator API)

У поисковика Бинг тоже есть свой переводчик.
И у него похоже адекватное АПИ с доступом через AJAX, HTTP и SOAP с методом Speak
Который также шлёт GET запрос на адрес

Доступен всем через Azure и до двух миллионов символов в месяц бесплатен, если выше смотрите цены.
Русский и Украинский есть, всего 45 языков.
Выглядит солидно, но не пробовал в деле. Поскольку это Майкрософт то где-то подвох будет точно.


SpokenText lets you easily convert text in to speech. Record (English, French, Spanish or German) PDF, Word, plain text, PowerPoint files, and web pages, and convert them to speech automatically. Create .mp3 or .m4b (Audio Book) recordings (in English, French, Spanish and German) of any text content on your computer or mobile phone.

Free text to speech. Uses the world’s best text to speech (TTS) software. Upload documents, cut and paste text or link to feeds. Text reader converts text to speech automatically. Download audio and podcasts. It’s fast and easy to use. Get started right away! No software to download or install.
Просто дофигища голосов английского, женский и мужской голос русского. Украинского нет.

Другие синтезаторы требующие установки на комп

Правда некоторые предоставляются облачный сервис.


The MBROLA Project

The aim of the MBROLA project, initiated by the TCTS Lab of the Faculté Polytechnique de Mons (Belgium), is to obtain a set of speech synthesizers for as many languages as possible, and provide them free for non-commercial applications.
Проект выглядит заброшенным. Но вот тут есть список рилейтед проектов Non-commercial TTS systems and components compatible with MBROLA где тоже можно порыться.


C++, open source
eSpeak uses a “formant synthesis” method. This allows many languages to be provided in a small size. The speech is clear, and can be used at high speeds, but is not as natural or smooth as larger synthesizers which are based on human speech recordings. Google has integrated eSpeak, an open source software speech synthesizer for English and other languages, in its online translation service Google Translate. The move allow users of Google Translate to hear translations spoken out loud (text-to-speech) by clicking the speaker icon beside some translations.

Первая версия бесплатного синтезатора речи eSpeak была выпущена в 2006 году. С тех пор компания-разработчик постоянно выпускает все более усовершенствованные версии. Последняя версия была представлена в весной 2013.

eSpeak можно установить под следующие операционные системы: Microsoft Windows, Mac OS X, Linux, RISC OS
Возможна также компиляция кода для Windows Mobile, но делать ее придется самостоятельно.
А вот с мобильной ОС Android программа работает без проблем, хотя русские словари еще не до конца разработаны. Русскоязычных голосов много, можно выбрать на свой вкус.


Festival — это целая система распознавания и синтеза речи, которая была разработана в эдинбургском университете.
Программы и все модули абсолютно бесплатно и распространяются по системе open source. Скачать их и ознакомиться с демо-версиями можно на официальном сайте университета Эдинбурга.

Русский голос представлен в одном варианте, но звучание довольно хорошее и ясное, без акцента и с правильной расстановкой ударений.
К сожалению, программа пока может быть установлена только в среде API, Linux. Также есть модуль для работы в Mac OS, но русский язык пока поддерживается не очень хорошо.


The Festvox project aims to make the building of new synthetic voices more systemic and better documented, making it possible for anyone to build a new voice.

Flite: a small, fast run time synthesis engine

Flite (festival-lite) is a small, fast run-time synthesis engine developed at CMU and primarily designed for small embedded machines and/or large servers. Flite is designed as an alternative synthesis engine to Festival for voices built using the FestVox suite of voice building tools.

Вообще, у них там в университете ещё много всякого софта для синтеза Speech Software at CMU, есть смысл поковыряться.


RHVoice синтезатор русской речи с тремя голосами и открытым кодом. Среди исходников видел биндинги к андроиду. Ещё интересно что есть язык эсперанто.
Я так понял что разработчица одна, так что даже не смотрел. Там есть модуль для программы NVDA для слепых, наверное автор программы хотел сделать их мир лучше.
«Наверное, лучшее, что можно найти под линукс. Под виндой тоже работает. Голоса есть.
Речь, на мой взгляд, получается очень естественная, если не учитывать часто неправильные ударения.»


Praat is a free scientific software program for the analysis of speech in phonetics. It has been designed and continuously developed by Paul Boersma and David Weenink of the University of Amsterdam. It can run on a wide range of operating systems, including various Unix versions, Mac and Microsoft Windows (95, 98, NT4, ME, 2000, XP, Vista). The program also supports speech synthesis, including articulatory synthesis.
Написан на С++, несмотря на то что сайт Web 1.0 последние исходники помечены датой 18 December 2014. Имеет какой-то свой встроенный скриптовый язык.

License: GNU
Last Update: 2013-04-23
Writen in C++
Epos is a language independent rule-driven Text-to-Speech (TTS) system primarily designed to serve as a research tool. Epos is (or tries to be) independent of the language processed, linguistic description method, and computing environment.
Разрабатывался в каком-то чешском университете, сайт уже не работает. Кроме английского и немецкого поддерживает чешский и словацкий, что редкость и кому-то может быть принципиально.

Acapela TTS

Хороший синтезатор с множеством языков. Разработан шведами, так что шведский поддерживается лучше всего причём аж в трёх вариантах. Русский поддерживает.

Есть Cloud API, но не интересовался ценой. В интернете хвалили.

Nuance Vocalizer

Вот здесь можно опробовать движки Ольга, Дмитрий, Милена:

Обратите внимание на движок Милена, это премиум голос. Его можно взять тут:
Ещё послушать тут
«Голос звучит очень естественно, речь чистая. Есть возможность установить различные словари, а также подкорректировать громкость, скорость и ударение, что не маловажно.
Как и в случае с Акапелой, программа имеет различные версии для мобильных, автомобильных и компьютерных приложений. Прекрасно подходит для чтения книг.»

Loquendo TTS

Loquendo TTS платный, но есть на торентах.

Встроенные в Windows

Это будет работать не для всех звуковых картах

Microsoft Speech API и прикольная программка CoolSpeech которая его использует.
Microsoft Speech API (SAPI) 5.4 на MSDN
Нужно попробовать.

Apple’s Speech Synthesizer (VoiceOver)

Выглядит достойно. Нет мака под рукой чтобы попробовать.


Я так и не понял, андроид сам может синтезировать голос или шлёт запросы на сервер гугла.

AT&T Natural Voices

AT&T Natural Voices® Text-to-Speech Demo

I’ve used AT&T Natural Voices which provides JSAPI and MS SAPI hooks. It provides excellent quality voices, a good «general» speech dictionary, many controls over pronunciation, and multiple languages. It’s a little pricey, but works very well.

I used it to read important sensor telemetry to drivers in a mobile sensor application. We had no complaints about the voice quality. It had about 75% out-of-the-box accuracy with scientific terms and a much higher (maybe 90%+) with normal dialogue. We got it up to about 99+% accuracy by using markups (most errors were on scientific terms with unusual phoneme combinations).

It was a bit hard on the processor (we were running on a Pentium-III equivalent machine and it was pushing 50%-75% peak CPU). This uses a native speech engine (Windows, Linux, and Mac compatible) with a Java interface.
There’s a huge variety of voices and languages…

Web Speech API — распознавание и озвучивание текста сразу из броузера

Вообщем вместо тысячи слов смотрите демо
chrome.tts API для броузера

Web Speech API Specification — стандарт W3C.

«С кофеваркой надо разговаривать» Интервью Дениса Филиппова, главного по речевым технологиям в «Яндексе»

[Linkset] Сугата Митра: Учителя — не нужны. А нужны просто добрые бабушки

Это линк сет про учёного который исследует новые возможности обучения.

Главный вывод всех его исследований:

Довольно модно говорить, что система образования сломана. Она не сломана. Она прекрасно построена, просто она нам больше не нужна. Она устарела.

Sugata Mitra at Wikipedia

Сугата Митра: «Дыра в стене» на

Используя результаты проведенного им эксперимента «Дыра в стене», профессор образовательных технологий Сугата Митра доходчиво объясняет основные ошибки, допускаемые при попытках улучшить системы начального образования как в Индии, так и по всему миру.

Сугата Митра рассказывает, как дети обучают самих себя

Индийский ученый и просветитель, Сугата Митра, берётся разрешить одну из величайших проблем образования: дело в том, что лучшие учителя и школы не всегда находятся там, где они больше всего нужны. В ходе серии практических экспериментов, прокатившейся от Дели до Южной Африки и Италии, Сугата Митра давал детям возможность самостоятельно работать в Интернете. Полученные результаты превзошли все ожидания и могут перевернуть наши представления о педагогике: дети самостоятельно добывали себе знания и осваивали очень непростые курсы.

Сугата Митра: Построим «Школу в Облаках»

Выступая на TED2013, Сугата Митра рассказывает о своём смелом желании при получении премии TED Prize: Помогите мне создать «Школу в облаках», лабораторию в Индии, где дети смогут проводить исследования и обучаться друг у друга, используя ресурсы из «облаков». Слушайте о его вдохновляющей идее Самоорганизующихся Учебных Пространств (СОУП).

Технологии образования — блог Интела на Хабре

Презентация «Самоупорядочивающиеся процессы в образовании»