Серёжа Пономарёв aka stokito

Java & Grails developer

kranonit S20 Django — легко, быстро, эффективно

stokito:

Ух ты, кранонит выходит из спячки!

Originally posted on #kranonit Клуб анонимных айтишников в Кривом Роге:

9646be688285186b8605df7ec308e29f

Легко, быстро, эффективно — эти слова в полной мере описывают самый популярный фреймворк для веб-приложений на языке Python. Отличная документация, быстрая скорость работы, удобная настройка и разработка приложений, гибкость инструментов и возможность наработки собственных стандартных фрагментов кода, которые затем могут применяться повторно… На этом преимущества Django не заканчиваются. 7 марта Сережа Бурма, наш давний друг, расскажет гораздо больше о самом фреймворке, его особенностях и преимуществах, покажет, как за пару часов можно создать сайт, его админку да и в целом как довести проект до ума. Не пропустите! Такой мастер-класс бывает не каждый день ;)
Место проведения неизменно — 322 ауд. пединститута (главный корпус, Гагарина, 54). Ждем вас в 10:00. Взнос на чай и печеньки — 15 грн.

View original

Оставить комментарий »

Как быстро можно стать Java Junior?

Максим Педич поделился опытом: для того чтобы изучить Джаву с нуля нужно пол года активного вкалывания.

Макс Криворучко дополнил

Чтобы стать программистом (читай освоить Java core) нужно пол года. Чтобы стать интересным для компаний программистом нужно знать кроме Java Core как минимум еще и тулы (maven/gradle, svn/git), jdbc, Servlet API, Spring (IoC). Было бы хорошо знать еще и html, sql, xml на базовом уровне.

В случае знания Java Core светить может интернатура,

во втотом случае — могут взять джуном.

Самое главное: по каждой теме иметь практику. И чем ее больше — тем лучше. Даже читая книгу, в которой примеры кода — нужно как обезьяна его перепечатать в IDE и запустить.

чтобы стать джуном нужно год-полтора

Оставить комментарий »

Частые вопросы Java Juniors

Ко мне в последнее время было много вопросов от Джава Джуниоров, запишу по памяти что отвечал:

скажите пожалуйста, нет ли у вас тестовых заданий от компаний на java или возможно пример проектика, который вы советуете делать начинающим java девам

У меня нет, а если бы и были то не дал. Это не честно, это всё равно что на экзамен прийти зная что за билеты.
Каждая компания старается задавать свои вопросы чтобы лучше узнать уровень соискателя. Они их придумывают, они не хотят чтобы эти вопросы другие знали, это их авторские права в конце концов.
Эта информация практически с грифом для служебного пользователя и не распространяется. Точно также как не распространяется информация о том какие грейды разработчиков (уровни Мидл, Синьёр) потому что в каждой компании разный уровень и по этой информации можно определить насколько в целом уровень профессионализма в ней.

Им нужно узнать ваш уровень чтобы для себя определить справитесь вы с работой или нет.
Можно конечно заучить ответы на базовые вопросы, и даже пройти интервью, но тебя же тогда выгонят на испытательном сроке без знаний. Потратишь время своё и чужое.

Есть часть вопросов которые практически стандартные, и их легко найти в интернете.
Например: «Чем отличается абстрактный класс от интерфейса?»
И даже если вы ответите на этот вопрос, то его можно немного перефразировать или усложнить.
Например на вопрос «Чем List отличается от Set?» можно задать следующий вопрос «А почему Set не наследуется от List если он по сути похож, разве что не позволяет сохранять дубликаты?».
Ответ уже на этот вопрос потребует от вас именно полного понимания темы.

Так что заучивать стандартные вопросы можно и нужно, но опытного интервьюера этим вы не обойдёте.

Большинство вопросов идут из сертификации OCJP их легко найти и есть книги для подготовки по теме.

Так что вопросы с реальных собеседований не выпрашивайте, это преступление и они всё равно вам особо не помогут.

А пример проектика?

Опять таки, нельзя. Вам вышлют тестовое задание или вы можете в резюме указать ссылку на свой проект с исходниками. Если интервьюеру будет интересно он сам зайдёт посмотрит какой код вы пишите, оценит уровень и будет спрашивать уже более предметно.

Как правило, если это вакансия для веб разработчика, вас попросят написать простое CRUD приложение, например TODO лист с использованием БД.

а сколько по времени должно примерно уходить на его выполнение?

По времени — чем быстрее, тем лучше. Обычно когда дают тестовое выставляют делайн — два-три дня. Если больше — это уже не тестовое задание, тут либо компания не адекватная и не учитывает что у тебя тоже может быть работа и ты можешь потратить на одну компанию не больше двух вечеров, либо они не очень спешат и дают тебе времени, но это всё равно значит что сделать нужно быстро и не растягивать. Если у тебя самого нет времени сейчас то это нормально попросить больше срок, обычно идут на встречу но это не повод этим злоупотреблять и мухлевать.
Опять таки: если дают тестовое то это не просто так, а чтобы сразу отсеять тех кто не просто не потянет эту работу. Так что отнесись так как будто это тестовое не тебя, самой работы. Точно также относится нужно к интервью — если отказали значит вы друг другу просто не подходите, это нормально, я видел несколько примеров когда отказывали вполне крутым кандидатам, просто работодателю нужно было другое.

Тут ещё такой момент: бывает что на тестовом задании ты где-то застрял. Например у тебя исключение какое-то и ты не можешь двигаться дальше. Т.е. ты в приницпе понимаешь как это сделать но вот конкретно в этом случае застрял. В таком случае абсолютно нормально спросить помощи у знакомого программиста\ментора.
Ещё это вполне нормально когда ты уже готовое тестовое задание покажешь ментору чтобы он проверил перед отправкой заказчику. Ты его уже написал, так что если кто-то тебе найдёт ошибку или подскажет как лучше и объяснит то от этого ты только умнее станешь а твой необходимый уровень знаний ты итак покажешь.
Это примерно как с курсовым проектом в университете — тебе может и помогли, но рассказывать всё равно придётся тебе самому. Но с курсачём тебе его главное сдать, а тут от твоих знаний будет зависеть реально чья то жизнь и бизнес.

Что учить?

Только то что востребовано на рынке и за что больше платят. Например, может Ruby on Rails или какой нибудь Python и кажутся вам самыми модными, но вакансий намного меньше чем на Java или PHP. А из Java и PHP больше платят за Java. Следовательно её и нужно учить (по крайней мере сегодня).

Походите по сайтам работы, посмотрите вакансии, почитайте в Википедии что за технологии там описаны. Зайдите на сайт indeed.com и посмотрите какие там тренды.

Что сегодня на рынке востребовано я точно не скажу. Что будет востребовано в будущем вообще никто точно сказать не может. Может новую версию PHP доведут до ума, а может все вообще перейдут на MPS.
Всё меняется, елси раньше Хибернет был «маст хэв» то сегодня уже, насколько я могу судить, работодатели уже интересуются знанием NoSQL баз данных, в частности MongoDB. А Hibernate им уже может быть не принципиально.

На сегодняшний день в принципе ещё актуальная моя старая статья. Её может и стоит переписать или дополнить, но в целом там описывается подход по которому вы сможете немного сориентироваться на рынке, а он не меняется.

1) Какими веб технологиями должен обладать хороший программист на Java? Sping, JDBC, Hibernate? Что еще? Есть ли смысл читать книги по этим технологиям или хватает спецификации / туториалов?

Точно нужно вникнуть в базовые технологии. Если с БД то в Java вы не опуститесь ниже JDBC, если делайте веб то ниже уровня JSP и Servlets вы не уйдёте. Поэтому с ними нужно точно разобраться. Поэтому может быть лучше вместо знаний Hibernate и Spring вникнуть в базовые JDBC и Servlets.
Скорее всего вас будут их спрашивать. Но тем не менее Хайбернейт и Спринг нужно тоже как минимум потрогать чтобы знать что это и куда его пихать.
Есть ли смысл читать книги — да. В книгах обычно пишут почему спроектированно именно так, т.е. передают некую инженерную мудрость которая намного ценнее чем даже знание самой технологии. Вы можете прочесть книгу по Спрингу и применить знания если вы нашли работу в ASP.NET где те же самые контроллеры.
Поэтому одна из самых важных книг по Джаве так и называется — Философия Java.

Туториалы нужны для того чтобы быстро и пошагово развернуть у себя проект с их использованием и чтобы вы могли сами прощупать как это делается. Это тоже важно — это мышечная память, без этого знания не зафиксируются в голове.
Вот недавно был выпуск подкаста Разбор полётов где как раз гуру давали рекомендации. И смысл такой: знаний Спринга у тебя может и не быть, это нормально для джуна, даже было бы удивительно если бы они были.
Но фундаментальные знания которые написаны в книгах у тебя должны быть, потому что интервьюверы хотят прежде всего понять насколько ты вообще обучаемый.
Если ты не смог прочесть и понять книжку, то как же ты будешь разбираться с кодом на работе?
Некий мифический параметр «Обучаемость» это то что они хотят вычислить прежде всего. Но это практически только интуитивно можно определить.
Есть и другие параметры, например знание конкретной технологии. Например работа на которую тебя рассматривают требуют чтобы ты занимался больше фронтендом и нужно там разобраться с CSS3 и HTML5. Может даже быть что в той команде никто их не знает толком и ты как джун там будешь их же обучать.
Я знаю такой реальный случай, там даже было неловко тимлиду который собеседовал джуна потому что он не знал что спрашивать по CSS3 (как там анимации делать, например), потому что он сам не знал, но на проект такой человек был нужен.
Ты может даже не очень обучаем и тебе сложнее въезжать в тему, но зато ты очень прилежный и исполнительный. И тебя могут взять вместо другого более «обучаемого» и опытного джуна. Или ты может просто прикольный весельчак и тебя возьмут разбавить команду нердов. Знаю случай когда девочку взяли в команду из девяти пацанов чтобы они хоть бриться начали :)

Так что не стоит на этом сильно зацикливаться, но в любом случае, знание определённое знание фундаментальных основ всегда нужно. Вопрос в том что либо ты это сам с трудом по книгам выучишь, либо за неделю на реальной работе. Но вникать придётся па-лю-бэ.

2) Посоветуйте литературу по архитектуре / паттернам. По паттернам читал книгу headfirst, но она, видимо, не очень глубоко описывает все. Есть ли альтернатива банде четырех не с кодом на С++?

Тут сразу нужно разделить два понятия: ты либо имеешь опыт программирования на других языках, например ПХП, а теперь учишь Джаву либо ты вообще студент и толкового опыта программирования у тебя нет.
В первом случае, тебе лучше взять книгу по языку программирования который ты лучше знаешь, просто ищешь по запросу, например «Шаблоны проектирования в PHP». И вникаешь на одном языке.
Паттерны практически не зависимы от языка программирования, поэтому главное понять их суть, а там уже на Джаве напишешь и сам. Но опять таки, половина шаблонов проектирования нафиг не не нужны в функциональных языках программирования где всё делается простой кложурой
Functional programming patterns

Но и там есть свои заморочки, например в JavaScript применения шаблонов проектирования становится приключением.
Но если у тебя код джаваскрипта разросся так что тебе понадобились шаблоны, то тут есть смысл задуматься правильно ли ты живёшь и проветрить мозги кислотой.

Опять таки, для базовых ООП языков C++, Java, C# и даже PHP реализации шаблонов будут одинаковы. Но в отличии от PHP в Java все вообще представлено объектами и в ней без шаблонов не выжить.

Изначально само понятие «паттерны проектирования» и их классификацию ввели GoF в своей книге. Соответственно те шаблоны которые они в ней описали называют «паттерны по Гофу».
Просто потом всем так понравилось понятие паттернов что каждый поупражнялся в интеллекте и напридумали ещё потом тысячу других паттернов и даже антипаттернов.
Но больше ничем примечательным их книга не отличается — ни доступностью материала, ни даже полнотой. Именно поэтому есть более поздние книги где лучше разжёвано с большим числом примеров и с конкретными особенностями платформы.
Иногда может хватить статьи на Хабре, благо их валом.
Лично мне ещё было проще: мне мой ментор сказал «ну вот помнишь как Xml парсер ты создаёшь? Ну вот, это абстрактная фабрика» или «ну вот тебе нужно получить неизменяемый List, для этого есть метод Collections.unmodifableList(myList) который вернёт тебе декоратор myList с скопироваными элементами который на самом деле будет подклассом UnmodifableArrayList с заглушками на методы add() и remove(). Но это от тебя скрыто за методом unmodifableList() и тебя вообщем и не интересует какой там класс реально будет.».
И всё стало сразу мне понятно: «Тю, так я эти шаблоны постоянно использовал! Просто не знал что у них есть названия».
Вот в том и смысл: шаблоны, точно также как и рефакторинги — это классификация для программистов чтобы им было проще общаться между собой: «Слушай, а давай здесь выделим интерфейс и сделаем фабрику?».
Поэтому вся ценность паттернов — это то знают ли их. А все остальные шаблоны можно смело выкидывать потому что пользы от них нет. Это обычные структурные конструкции которых может быть безграничное количество и смысла им давать свои имена нет.
Поэтому когда говорим паттерн — подразумеваем паттерны ГоФ, и то только ту часть что используем.

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

Поэтому отнеситесь к книге Head First как к комиксу «как сделать коронарное шунтирование сердца».

А вот что намного важнее понять, это когда именно нужно применять и какой именно шаблон. К этому можно только прийти постепенно изменяя код с помощью рефакторинга.
И соответственно самые лучшие книжки про шаблоны проектирования — это книжки не про паттерны, а про рефакторинг.
Я уже повторял неоднократно и не постесняюсь ещё раз повторить, что лучшая книга для того чтобы разобраться как лучше проектировать архитектуру, писать код, писать тесты, и сопровождать его, это бестселлер Матрина Фаулера «Рефакторинг — улучшение существующего кода».
Рефаткоринг

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

Для чуть опытных программистов есть более продвинутая книга Джошуа Кириевски которая так и называется Refactoring to Patterns. Я её сам правда как-то так и не прочёл, но все знакомые кто читал были в восторге.

А вообще я не понимаю почему джуны так сильно зацикливаются на паттернах. И зачем их спрашивают на интервью. Когда я искал себе работу и меня спрашивали по шаблонам то вопрос звучал примерно так «расскажи хоть какой нибудь шаблон». И я просто заучил их и по очереди называл их названия всех 23х шаблонов. И каждый раз интервьюеры офигевали «ого, это их столько? А можешь хоть один объяснить». И я рассказывал про один из трёх которые я реально понял. Интервьюер как правило знал столько же.

Я так понимаю что это связано с тем что вокруг шаблонов некий ореол «проектирования» которое якобы их делает чем то таким научным и теоретическим. Как будто их знание делает тебя умнее тех быдлокодеров унтерменшей.

Поэтому у нас есть такие наумняченные программисты которые могут отличить Прокси от Декоратора, а при этом не знают комбинацию клавиш в IDE для форматирования когда.

Так что вы поймите хоть парочку шаблонов, желательно из разных групп, например структурный — Декоратор, creational — Singleton и behavioral — Observer. Это реально, остальные просто знайте что есть. Для джуна это нормально.

3) Как вы относитесь к различным онлайн курсам типа: курсера. юдасити. У меня начинает складываться впечатление, что там знания дают довольно поверхностные и много воды. Что Вы используете в большей степени при самообучении? Возможно посоветуете ресурсы?

У меня тоже впечатление, но это впечатление. Тут довольно сложная и большая тема возникает о самом формате обучения, у меня по этому поводу очень много мыслей но не все ещё сформулировал для себя. Если в двух словах то примерно такие мысли:
* Курсера — это всё таки курсы солидных унверситетов, это уже вызывает доверие. Это годами отработанные обучающие материалы, и они там не зря. Зарплаты преподавателей огромны, и это люди как правило имеющие отношение к реальной индустрии.
* Качество курсов от чуть ниже нормального до хорошего. Отлично сделать практически невозможно, всегда будет какая-то вода, всегда будут недостаточно хорошие примеры. Всегда может быть по теме более интересная книга или туториал на ютубе, всегда можно найти чувака который лучше расскажет, но на курсе всегда будет некая усреднённая доведённая до занудства «академичная» информация.
* Что ещё важно там есть вопросы для самопроверки и определённая сертификация. Это очень важно, а просто книга такого не даст.

Всё. Больше никаких особо преимуществ нет и быть не может. На курсере невозможно получить практическую пользу и интерес большую чем от реального проекта или видео на ютубе.
Это всё равно что сравнивать статью в Википедии и статью на Хабре.
Но если взять статью на хабре и дописать к ней то что в ней опустили, и убрать то что может меняться со временем, попытаться вывести из материала какие-то общие законы и убрать субъективный и упрощённый научно-популярный стиль, то получится та же статья с Википедии.
Например, вот одна из самых первых статьей про Юнит тестирование за 2008й год к тому моменту это уже докатилось до нас и было отхоливорено со всех сторон и эта статья была подведением черты.
А вот какая статья в Википедии на сегодня.
А вот все курсы на Курсере где тебя обучат рефакторингу.

Например я бы мог в сто раз лучше базы данных чем на курсере, но я бы два года составлял курс прорабатывая материал, отбирая что важно что не важно, прийдя к выводу что всё важно, тестируя эффективность на студентах и он бы у меня разросся в пять раз больше и я бы стал его сокращать а на выходе получилось бы почти тоже самое что сейчас на курсе Introduction to Databases.

Нужно чётко осознать важный закон: кто не знает, но умеет — делает, кто знает, но не умеет — учит, кто не знает и не умеет — руководит.

Почти все учёные и преподаватели в вузах себя считают теоретиками и почти вся их суть в этом видео

В наших почти все повально такие. В западных ситуация менее удручающая, но такая же.

Но где же найти тех кто реально шарит, и рассказать может хорошо и правильно, и самый свежий опыт?
Собственно мы программисты постоянно и много обучаемся, поэтому уже всё сформировали для себя:
* Блоги, правки в документации, меил листы, форумы, StackOverflow, скринкасты, туториалы, и напрямую чтение спецификаций. Написать более менее толковую развёрнутую статью занимает ну просто дофигища времени, сколько точно не знаю, зависит, но четыре часа минимум. А теперь представь что ты синьйор с загруженным графиком, у тебя семья, как ты выдыхаешься и при этом найти время и силы написать статью. А потом ещё переругаться с тролями в каментах.
* Конференции с докладами по часу-два с презентацией или мастер классом с живым кодированием. На подготовку одного часового доклада может уйти почти столько же времени как на статью, но, статью нужно писать и это напрягает, а презентацию к докладу накидывать как-то намного приятнее и там рассказывать можно голосом по ходу подстраиваясь под публику.
* Книги, программисты читают много их.

Итак, наиболее эффективными и ценными являются именно конференции с докладами. Там можно получить самый свежий опыт, и даже зачастую от самих создателей технологии.
Там же разворачиваются самые интересные дискуссии.
Но проблема в том, что как правило новичкам это совсем не подходит, это наиболее ценно для мидлов.
Рассказывать какие-то основы для джунов им не интересно. Это всё равно что если Шекспира попросить стать учителем английского. Да он сам создавал этот английский.

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

По своему опыту могу сказать что все «фундаментальные» знания в вузах рассказывают именно технари по конкретным инженерным специальностям.
Можно долго вкуривать воду из курса про Булеву алгебру, а можно прийти на курс по созданию ПЛИС и там тебе на пальцах в двух словах объяснят быстро самое нужное и даже научат за один слайд как вычислять дифференциалы от булевых функций и что это нужно для того чтобы по ним определять нужна ли эта микросхема вообще на плате, если изменения на её входах никак не влияют на её вывод.
Точно также основы статистики тебе в двух словах тебе объяснять на курсе по криптографии. Т.е. лучше всего учить всё в конкретном применении.

Я сам почти не проходил никаких курсов на Курсере (где же взять 8 недель на это?), но из того что видел считаю самым полезным и вменяемым курс основам вычтехники The Hardware/Software Interface. Тут вам расскажут как работает булева алгебра, как устроен компьютер, как считаются и складываются числа внутри, что такое указатели, освоите основы Си и перейдёте к высокоуровневым языкам. При этом это полноценный курс с множеством классных заданий.
Это очень и очень правильный курс который закрывает огромный пробел знаний и почти полностью имеет практическую пользу. Всё остальное что на курсере по компьютерам, имхо можно выкинуть нафиг. Разве что по алгоритмам может адекватный курс, но не смотрел.

4) Хочу начать делать какой-то пет проект, но не очень представляю с чего приступить.

блядь, просто начни

Начать это ещё пол беды, главное закончить, и на выходе иметь работающий и задокументированный проект, с инсталятором, а не недописанную поделку. На это все смотрят в каком состоянии твой проект, готов ли он к употреблению.

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

Могу дополнить только что у вас должна быть личная мотивация и интерес сделать проект. А такое может быть только если вы делаете программу для себя.
Например мой знакомый когда учил английский сделал себе программу под 1С с тестом слов. Потом когда он учил Джаву он себе написал фотовьювер как ему нравился.
Напиши любую программу например свой броузер. Джаст фор фан, пофигу что такое уже есть. А вдруг в твоей программе будет (или не будет) такой функционал который кому-то нужен. Твоя программа может найти своего пользователя и вырасти в полноценный продукт, как это было например с операционной системой Linux которую написал школьник а теперь используется многомиллиардными корпорациями.

Тут я могу ещё посоветовать не зацикливаться на технологиях. Просто некоторые начинают: о блин, мне тут нужно всё делать со Спрингом и Хибернейтом потому что их требуют при устройстве на работу. Забей. Сделай просто для себя программу на чём сможешь. Опять таки, парень который написал себе фотовьювер потом прошёл туториал по спрингу и нашёл себе работу.

Очень часто ещё часто советуют поконтрибьютить в опенсорс. Из моего опыта — идея никакая.
В опен сорс проектах человек который его ведёт всё таки должен разбираться в коде который ему присылают, и все хотят как правило чтобы контрибьютили уже опытные разработчики.
Так что например законтрибьютить в Друпал тебе никто не даст, потому что ты скорее всего напишешь никому не нужную плохо написанную фигню.
Примитивной работы, где много чего-то которое нужно однотипно переписать, на опен сорсе практически мало, потому что хорошие программисты потому и хорошие что пытаются писать код без дублирования.
Можно чисто теоретически найти проект где ребята вашего уровня пишут, но тогда чему вы там научитесь? Хотя если интересы совпадают — делайте.

Но.
Есть очень много софта который поддерживает плагины. И вот тут получается ситуация что ты делаешь свой проект в рамках другого, т.е. разбираешься с их кодом и у тебя есть примеры других плагинов, но при этом то что ты напишешь это твой отдельный проект.
Это такой симбиоз и очень классно работает на практике. Более того, у меня в университете один более менее вменяемый препод прямо так и давал задание написать плагин в Тотал Командеру.
Я например так когда-то написал плагин для Pidgin где мне пришлось изучить Си, программирование под Линукс и много ещё чего.

Ещё советуют брать заказы на фрилансе, но это тоже бред. Никто вам ничего нормального не доверит.

Идеальный вариант: найти себе программиста ментора который для своего джаст фор фан пишет какой-то сайт после работы. И ему в принципе будет не лень взять себе в подмастерье падавана чисто чтобы не так скучно было. Именно так можно выхватить больше всего интересного опыта.

Что реально ещё работает: у Гугла есть программа Summer of Code и в её рамках можно поконрибьютить в опенсорс проекте под присмотром менторов. Опенсорс проекты готовят задачи для студентов и вместе их фигачат.
Вот например есть интересная программа для чата и онлайн звонков Jitsi и её страница с идеями для GSoC.
Задачи довольно интересные и в меру сложные.

5) Посоветуйте проекты с открытым кодом на Java, чтобы посмотреть как строиться архитектура и тд.

Опять таки, берите проект с плагинами и пишите свой плагин. А так, я не знаю что посоветовать, но есть например книга The Architecture of Open Source Applications и в ней же есть и описание тай же Jisti.
Вот посмотри исходники проектов из этой книги.

6) Как вы совмещаете изучение теории и практики? Предпочитаете читать только то, что в данный момент необходимо или же изучаете наперед?

Сначала немного наперёд, точнее обзорно по сторонам, потом углубляюсь. В принципе сейчас я знаю что есть что кругом и теперь точно знаю что мне именно нужно. Так что моя теория теперь почти полностью совпадает с практикой.

P.S. Статью написал под эту песню

Оставить комментарий »

Human readable past date formating in Grails

Sometimes it better to write ‘2 days ago’ instad of ’28 Jan 2015′.
You can find a lot of solution in How to calculate “time ago” in Java?.

Here is a simplest snippet for making it in Grails from my project with i18n support.
Just create new tag `timeAgo` in your project taglib:

    static encodeAsForTags = [ timeAgo: [taglib:'html'] ]

    final static long ONE_SECOND = 1000;
    final static long ONE_MINUTE = ONE_SECOND * 60;
    final static long ONE_HOUR = ONE_MINUTE * 60;
    final static long ONE_DAY = ONE_HOUR * 24;

    /**
     Converts time (in milliseconds) to human-readable format
     "<w> days, <x> hours, <y> minutes ago" or "just now"
     <code>
     System.out.println(millisToLongDHMS(123));
     System.out.println(millisToLongDHMS((5 * ONE_SECOND) + 123));
     System.out.println(millisToLongDHMS(ONE_DAY + ONE_HOUR));
     System.out.println(millisToLongDHMS(ONE_DAY + 2 * ONE_SECOND));
     System.out.println(millisToLongDHMS(ONE_DAY + ONE_HOUR + (2 * ONE_MINUTE)));
     System.out.println(millisToLongDHMS((4 * ONE_DAY) + (3 * ONE_HOUR) + (2 * ONE_MINUTE) + ONE_SECOND));
     System.out.println(millisToLongDHMS(42 * ONE_DAY));
     </code>
     output :
     0 second
     5 seconds
     1 day, 1 hour
     1 day and 2 seconds
     1 day, 1 hour, 2 minutes
     4 days, 3 hours, 2 minutes
     42 days
     */
    private String millisToLongDHMS(long duration) {
        StringBuffer res = new StringBuffer();
        long temp;
        if (duration >= ONE_MINUTE) {
            temp = duration / ONE_DAY;
            if (temp > 0) {
                duration -= temp * ONE_DAY;
                res.append(temp).append(' ').append(temp > 1 ? g.message(code: 'timeAgo.days') : g.message(code: 'timeAgo.day')).append(duration >= ONE_MINUTE ? ', ' : '')
            }
            temp = duration / ONE_HOUR;
            if (temp > 0) {
                duration -= temp * ONE_HOUR;
                res.append(temp).append(' ').append(temp > 1 ? g.message(code: 'timeAgo.hours') : g.message(code: 'timeAgo.hour')).append(duration >= ONE_MINUTE ? ', ' : '')
            }
            temp = duration / ONE_MINUTE
            if (temp > 0) {
                res.append(temp).append(' ').append(temp > 1 ? g.message(code: 'timeAgo.minutes') : g.message(code: 'timeAgo.minute'))
            }
            res.append(' ').append(g.message(code: 'timeAgo.ago'))
            return res.toString()
        } else {
            return g.message(code: 'timeAgo.justNow')
        }
    }

    /**
     * @emptyTag
     *
     * @attr date the date in past
     */
    def timeAgo = { attrs ->
        Date date = attrs.date
        out << millisToLongDHMS((new Date().getTime()) - date.getTime());
    }

And then you need to add message codes in `messages.properties`:

timeAgo.justNow=just now
timeAgo.minute=minute
timeAgo.minutes=minutes
timeAgo.hour=hour
timeAgo.hours=hours
timeAgo.day=day
timeAgo.days=days
timeAgo.ago=ago
# for Russian
timeAgo.justNow=только что
timeAgo.minute=минуту
timeAgo.minutes=минут
timeAgo.hour=час
timeAgo.hours=часов
timeAgo.day=день
timeAgo.days=дней
timeAgo.ago=назад
# for Ukrainian
timeAgo.justNow=тіки що
timeAgo.minute=хвилину
timeAgo.minutes=хвилин
timeAgo.hour=годину
timeAgo.hours=годин
timeAgo.day=день
timeAgo.days=днів
timeAgo.ago=тому
Оставить комментарий »

Avatars in Grails with Gravatar

On every site we often need ability to show user avatars. The simplest way is to use external serive Gravatar.com.

There exists even a plugin for Grails but you don’t need it.
You can use gravatars in gsp files like this:

<img src="https://www.gravatar.com/avatar/${user.email.encodeAsMD5()}"/>

That’s all. But if you want you can create a tag in taglib:

class TagLib {
    static encodeAsForTags = [ gravatar: [taglib: 'none'] ]

    /**
     * Render img tag with user avatar from Gravatar.com
     * @emptyTag
     *
     * @attr user User
     */
    def gravatar = { attrs ->
        User user = attrs.user
        assert user
        out << "<img src='https://www.gravatar.com/avatar/${user.email.encodeAsMD5()}'/>"
    }
}
Оставить комментарий »

Grails class reloading: Spring Loaded vs JRebel

Grails uses Spring Loaded for hot class reloading during run-app in development.
It’s open source but look like not actively developed (last commit was at october 2014). I had some issues with reloading on JVM 8. Also Spring Loaded has performance issues.
And the best tool for reloading is JRebel from estonian company ZeroTurnaround.
And you can use JRebel instead of Spring Loaded.

And few weeks ago, Anton Arhipov, technology evangelist of JRebel, in podcast said that they working on improvement of JRebel integration with Grails 2 for one customer. But they are not interested because Grails 3 will use a Spring Boot, and JRebel already has a good support of it.

So, lets wait :)

By the way JRebel has a new update 6 with a huge improvement of performance.

1 комментарий »

Я — Java Junior, как найти работу

Один из самых ранних рассказов о том как найти работу джуну, но при этом один из самых дельных

Я — junior, как найти работу (RU) from JavaTalks on Vimeo.

Оставить комментарий »

Дайджест прикольных докладов по Java

Никита лапин из новосибирской компании Excelsior которые пилят крутую JVM ExcelsiorJet и компиляторы для Оберона и Модулы2 (если кто такие помнит те оценят).

Про то как можно Яву полноценно компилировать сразу в нейтив код без всякого байткода

Про то как джава платформа пытается решить старые проблемы с модульностью и лёгкостью инсталяции

Вообще меня в этом докладе напрягло что пацаны из Эксельсиор походу не учавствуют во всяких там JSRах и узнают о том что будет в новой джаве уже кагбы постфактум. Как-то несерьёзно, особенно что команда OpenJDK у них считай под боком — в Питере, всего в трёх часовых поясах.
Кстати для меня это был самый интересный доклад за последнее время, давно интересовался темой.

Александр Олейников рассказал как на примере сервиса Яндекс.Телепрограмма лучше проектировать API. Ничё такого, но для мидлов будет самое то

Владимир Цукур рассказал как правильно готовить REST API.
Он вообще красавчик и его доклады всегда классные, несмотря на его тягу наматанить подачу инфы.

Вообще чтобы оценить всю глубину «какой только хернёй люди не страдают лишь бы не юзать WebServices» и у вас есть время попердеть мозгом чтобы познать Истину, рекомендую посмотреть видосы с 19той встречи #uadevclub. Я вам гарантирую катарсис.

Ну и про микросервисы, куда же без них. У нас новый базворд который срочно нужно дописать в резюме пока эйчарки ещё не отошли от девопс. Доклад норм, но я в тему не въехал ещё чтобы оценить

Артём Оробец, один из разработчиков клёвой базы данных OrientDB которого схантили в Смарлинг рассказал… ну вообщем что-то там рассказал. К сожалению Артём не мастер крутых докладов, хотя по теме мог бы выдать много вау вау брейн бум.
Тем кто уже немного въехал в тему NoSQL будет интересно, а те кто уже въехал полностью ничего особо нового не узнают.

Вообще, у них там в Смарлинге походу бьют палками девелоперов чтобы они на разные конфы ходили докладывать и хакатоны хакатонить. Это такая стратегия чтобы заманивать всяких джава старов.
Там есть ещё немного их докладов про континьюс деливери, про то как девочка потеряла QA джоб и стала автоматизатором, но они вроде ничем таким примечательным не отличаются.
Советую по тем темам лучше посмотреть доклады с 22й встречи #uadevclub и с SeleniumCamp, они позадорнее.

Алексей Токарь, главный технарь в Яндекс Украина рассказал про MongoDB.
Алексей когда-то меня собеседовал, мужик толковый, но объясняет мало (с понтом «ну это же все знают,чё»).
Рассказ я полностью не смотрел, мне Монга индифферентна, но вроде тоже достойный

Алексей Дёмин рассказывает как боротся с проблемами серверной джавы, типа утечек памяти. Рассказ так себе, но по теме инфы вообще мало. Тоже советую сначала посмотреть доклады с 20й встречи #uadevclub где Виталий Тимчишин классно рассказал про то какими тулами и как пользоваться.

Алексей Резчиков делится правильным опытом как разбрестись с зоопарком тестов. Лёха как всегда на высоте. Ключевая идея: у вас юнит тесты должны прогоняться максимально быстро чтобы девелопер не заскучал и не пошёл читать хабру. Без быстрых тестов никакого ТДД не получится.
А все остальные тесты скидывайте на CI. Но это я очень вульгарно и отсебятиной, лучше смотрите сами.
Полезно будет только синьйорам которые уже пару проектов имели проблемы по теме (как йа)

33 клёвый вещей и тулов для Джавы:
Lombok, Guava, LambdaJ, Mockito, Spock, Byteman, Groovy, Gradle, Logback

Ну и на закуску коротенький лайттолк про то что в восмьмой Джаве наконец-то причесали дейт апи.
Кагбе особо ниочём, но для ознакомления с ThreeTen сойдёт.

Вообще, если вы хотите заюзать JSR 310 я бы рекомендовал заложить больше времени.
Особенно если вы будете мигрировать с JodaTime то там будет мноооооооого подводных камней. Я возможно единственный человек в мире который знает чем там они отличаются поскольку переколбасил плагин для греилс. И я вам сразу говорю: покройте всё что сможете тестами, благо юнит тестить на Spock даты элементарно.
У меня есть черновик где записано куча моментов как правильно мигрировать но мне его нужно будет как-то сесть и привести в порядок, так что сори ребят.

Оставить комментарий »

«Я решил стать программистом. Что дальше?»

Хороший рассказ, советую

Другие мои посты для студентов и джунов

Оставить комментарий »

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

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

Матчасть:

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

Стандарты

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

Java

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

jsapi.sourceforge.net

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

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.

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

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

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

Yandex.SpeechKit

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

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

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

Для Cloud API можно сгенерировать звук по GET запросу например так
http://tts.voicetech.yandex.net/generate?text=»Какой%20ровный%20и%20пра%27вильный%20голос»&speaker=zahar

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

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

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

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

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

Google Speech API

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

http://translate.google.com/translate_tts?ie=UTF-8&q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&tl=ru&prev=input

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

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

https://github.com/gillesdemey/google-speech-v2

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

Microsoft Bing translator (Microsoft Translator API)

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

http://api.microsofttranslator.com/V2/Http.svc/Speak

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

SpokenText

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.

YAKiToMe!

http://www.yakitome.com/

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.
Просто дофигища голосов английского, женский и мужской голос русского. Украинского нет.

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

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

Cравнение

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 где тоже можно порыться.

eSpeak

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

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

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

festvox

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

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

Praat

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. Имеет какой-то свой встроенный скриптовый язык.

Epos

http://sourceforge.net/projects/epos/

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

Вот здесь можно опробовать движки Ольга, Дмитрий, Милена:
http://www.oddcast.com/home/demos/tts/tts_example.php

Обратите внимание на движок Милена, это премиум голос. Его можно взять тут:
rutracker.org/forum/viewtopic.php?t=4606928
Ещё послушать тут

http://www.Nuance.Com/vocalizer5/flash/index.Html

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

Loquendo TTS

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

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

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

http://wiki.audacityteam.org/wiki/Mixer_Toolbar_Issues#cp

http://www.pcadvisor.co.uk/how-to/windows/3400328/how-record-windows-audio-on-your-pc-or-laptop/

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

Apple’s Speech Synthesizer (VoiceOver)

https://www.apple.com/accessibility/osx/voiceover/

http://www.tuaw.com/2012/07/28/mountain-lion-101-updated-high-quality-voice-synthesis/

https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/SpeechOverview/SpeechOverview.html

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

Android

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

http://www.geoffsimons.com/2012/06/7-best-android-text-to-speech-engines.html

http://www.greenbot.com/article/2105862/how-to-get-started-with-google-text-to-speech.html

https://play.google.com/store/apps/details?id=com.google.android.marvin.talkback

http://developer.android.com/reference/android/speech/package-summary.html

https://play.google.com/store/apps/details?id=com.google.android.tts

https://support.google.com/googleplay/answer/1062965?hl=en

http://habrahabr.ru/post/224685/

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.

Оставить комментарий »

Отслеживать

Get every new post delivered to your Inbox.

Join 769 other followers