Как заставить сайт зачитывать новости голосом

Не думал, что придется когда-нибудь с JavaScript ковыряться. Но захотелось прикрутить кнопку голосового чтения текста статьи через HTML5 Speech Synthesis API. Вместо голосовых движков от Microsoft внутри OS Windows 10 лучше использовать движок от Chrome. Качество заметно лучше как для русского, так и для английского языков. Но при использовании гугловского движка возникают две проблемы, с которыми уже столкнулись многие. Во-первых, иногда при попытке прочитать большой текст можно услышать лишь вечную тишину.

Почему объектно-ориентированное программирование часто усложняет, а не упрощает разработку

Казалось бы, очередной холивар на горячую тему (особенно последнее время). Но автор наброса Brian Will сделал это вполне аргументированно. У меня, кстати, отношение к этому такое же. Особенно, когда ковыряешься в чужом оо-спагетти, прыгая туда-сюда между методами, добираясь до реальной логики. Я активно использую модульный подход. Нет никакого смысла неадекватно плодить всякие объекты из того, что ими не является. А последний ролик “Object-Oriented Programming is Good” — это что-то вроде ответа на фразу “Критикуешь?

Nvidia GauGAN: скетчи в изображения

Это офигенно :) Новое ПО компании Nvidia, используя генеративно-состязательную сеть (GAN), позволяет превращать небольшие скетчи в довольно реалистичные изображения Вспомнились текстовые квесты на ZX Spectrum, иногда сопровождающиеся похожими примитивными изображениями из линий и кругов. Прикрутить кроме этой нейросети еще голосовой синтез и распознавание ввода команд, и те старинные игры, которым три с половиной десятка лет, будут восприниматься совершенно по-другому. Вот так примерно выглядели такие схематические зарисовки. Quest Adventure

Получение предложений из HTML

Довел до формата библиотеки и выложил на github - html2sent. Эта небольшая либа принимает на вход HTML и делает в нем кое-какие правки (удаление явно “неинтересных” тегов, простановка точек в некоторых местах при их отсутствии и прочее), чтобы на следующем этапе nltk tokenizer намного качественней смог разбить текст на предложения. Ну и опционально можно включить удаление таблиц, списков и т.п. Очень удобно для массового прогона HTML файлов с целью вытягивания красивого текста.

NLP: список русских стоп-слов

Решил тут немного поконтрибьютить в питоновскую библиотеку summa. Кроме того, что там в функционале извлечения ключевых слов из русского текста происходит ненужный стемминг английских слов (послал pull-request), там еще полностью отсутствует список русских стоп-слов. Вообще, само понятие стоп-слов немного размытое у людей. Некоторые используют это для фильтрации наиболее частотных слов языка в задачах классификации документов, например, если ипользуют алгоритмы, учитывающие частоту появления встречающихся слов. Но почему тогда так и не называть это словарем самых частотых слов?

Положение дел в Deep Learning

Поймал сегодня себя на такой мысли, что нейросети сегодня чем-то напоминают первые игры, разработку которых очень сильно ограничивало железо. Взять ту же Elite, авторы которой не могли просто взять и добавить 8 галактик с тысячами планет в 22 кб оперативки. Пришлось им выдумывать псевдослучайную генерацию с фильтрацией “плохих” данных. Вот и нейросети сегодня - это постоянное перебалансирование таких параметров как размер сети, объем входных данных для обучения, их качество (и степень “упрощения”).

TensorFlow GPU

Ох и провозился я тут с удалением/установкой TensorFLow. Со вчера был запущен один тестовый нейро-проектик, но сегодня решил его стопорнуть — закралось подозрение, что у меня все только на CPU работатает, а не на GPU. Как-то не хватает привычного громкого жужжания всех кулеров, как было тогда, когда я раньше на ноуте tensorflow гонял. Открыл System Information в “Process Hacker” - в разделе GPU нулевая активность. И это при том, что CPU дико нагружен - даже система стала не особо отзывчивая.

Программерский детектив

Итак, пока я тут доделал парсер-конвертер html-статей в набор предложений (с помощью BeautifulSoup4, различных регулярок и NLTK.tokenize - для подачи на вход нейросети на TensorFlow) и доволен чистотой результата, решил сделать паузу и, все-таки, написать эту забавную и поучительную историю. Программерский детектив Приятно наблюдать как недавно собранный компьютер “перемалывает” всеми 8(16) ядрами нужную мне задачу. Вот только я не ожидал, что придется перезапускать это так много раз. В последний раз так мозг закипал, наверное, только когда нужно было сделать динамический пересчет релокейшенов загруженного модуля win32.

AutoSSH on WSL

Сижу такой, настраиваю на удаленном сервере работу скрипта, который через ssh-туннель делает запрос к сервису, который у меня дома локально под WSL работает. Так вот, запускаю lynx 127.0.0.1:port, чтобы проверить, что туннель выключился. Но он, почему-то, работает… Делаю netstat -lntp|grep port, получаю PID, затем kill PID. lynx 127.0.0.1:port … Хм. Все еще работает… Повторяю действие несколько раз, убиваю каждый раз новый ID процесса. Тоннель все еще работает. Чешу репу… И тут осознаю всю ржачность ситуации.

Написал переключалку языков на CAPSLOCK

Вчера вдруг осознал, насколько удобней будет переключать RUS/ENG не привычным CTRL+SHIFT, а клавишей CAPS LOCK, учитывая, что я использую слепой 10-типальцевый метод и для русского, и для английского текста. (Тогда пальцы не нужно будет центрировать заново каждый раз) Как оказалось, в Windows 10 нельзя выбрать такой вариант. Но есть некоторые сторонние программки для этого дела. И тут мне захотелось самому быстренько такую зафигачить. Сначала кое-как вымучил такую утилитку на Go. Офигел от кривости этого всего кода, с кучей обвязок для Win32 API.