Архив за 04 августа 2014 - 8

«Яндекс» перезапустил свой SDK для распознавания речи — теперь он доступен не только для мобильных, но и для веб-разработчиков. Об этом говорится в пресс-релизе поисковика.

SpeechKit Cloud понимает русский и турецкий языки. Точность распознавания, по данным Siliconrus, 85% для коротких запросов, 95% для геозапросов, 82% для текстов. Для сравнения, человек распознает на слух 96-99% информации.

Читать полностью »

SSSSSpeaker — это яркая, компактная силиконовая колонка, которая подключается к смартфону, ноутбуку или планшету. И я постараюсь не только сделать обзор устройства, но и разобрать график сборов проекта.

SSSSSpeaker

Читать полностью »

Обзор наиболее интересных материалов по анализу данных и машинному обучению №7 (28 июля — 4 августа 2014)
Представляю вашему вниманию очередной выпуск обзора наиболее интересных материалов, посвященных теме анализа данных и машинного обучения. В данном обзоре есть несколько статей, которые будут интересны новичкам. Есть несколько любопытных видеолекций по тематике Data Science. В текущем выпуске как обычно много статей по машинному обучению и анализу данных с примерами кода на языка программирования R и Python. В обзоре также могут заинтересовать несколько обзоров книг по теме анализа данных.

Читать полностью »

Всем привет.

Начну с самого общеизвестного. Массив можно охарактеризовать как совокупность данных с общим именем для обращения.
Массивы в C# могут быть:

1) Одномерный (Линейный, векторный)
2) Двумерный (Матричный, массив массивов)
3) Многомерные (Трехмерные и более)
4) Ступенчатые (Зубчатые, Jagged)
Читать полностью »

Введение

Пишем простой интерпретатор на C++ с помощью TDD, часть 1
Многие C++ программисты слышали про разработку через тестирование. Но почти все материалы по данной теме касаются более высокоуровневых языков и сосредоточены больше на общей теории, чем на практике. Итак, в данной статье я попробую привести пример пошаговой разработки через тестирование небольшого проекта на C++. А именно, как можно предположить из названия, простого интерпретатора математических выражений. Такой проект также является неплохой code kata, так как на его выполнение затрачивается не более часа (если не писать параллельно статью об этом).

Архитектура

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

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

  • Вычислять значение математического выражения, состоящего из чисел с плавающий точкой и математических операторов (-+/*).
  • Учёт приоритета операторов.
  • Учёт скобок.
  • Унарные плюс и минус.
  • Вычисление нескольких выражений, разделённых точкой с запятой (;).
  • Встроенные константы (pi, e).
  • Создание собственных констант с помощью оператора присваивания (=).
  • Встроенные функции с переменным числом аргументов.
  • Задание новых функций.

В данной статье будет реализация только первых трёх пунктов. Сам проект концептуально будет состоять из четырёх частей:

  • Лексический анализатор. Преобразовывает входную строку в последовательность токенов.
  • Синтаксический анализатор. Строит из токенов синтаксическое представление в виде постфиксной нотации. Делать это будем без рекурсии и таблиц, с помощью алгоритма сортировочной станции.
  • Вычислитель. Вычисляет результат выражения на стековой машине.
  • Собственно, интерпретатор. Служит фасадом для вышеперечисленных частей.

Инструментарий

Программа будет писаться в Visual Studio 2013 с установленным Visual C++ Compiler Nov 2013 CTP. Тесты будут на основе встроенного в студию тестового фреймворка для C++ проектов CppUnitTestFramework. Он предоставляет минимальную поддержку для написания модульных тестов (по сравнению с Boost.Test, или CppUTest), но, с другой стороны, хорошо интегрирован в среду разработки.

Итак, создадим новый проект типа «Native Unit Test Project» и удостоверимся, что всё компилируется.
Читать полностью »

Всем привет!

Итак, 10 июля сего года прикупил в Москве сие чудо технологий, дабы возрадоваться прогрессу! Прошёл месяц и, как говорится, накопилось. Решил написать-таки отзыв реального использования очков. А заодно и своего рода обзор возможностей AR-очков Epson Moverio BT-200. Так сказать, без прикрас и прочего маркетинга. Собственно, именно наличие гибкой и довольно полноценной ОС Android и сподвигли меня на эту заморочку. Сухие данные технических характеристик устройства можно спокойно узнать в интернете.
Читать полностью »

Минфин разрабатывает законопроект, который полностью запретит выпуск и использование в России виртуальных валют, пишет «Коммерсант» со ссылкой на единый портал раскрытия нормативных актов regulation.gov.ru.

ЗаконопроектЧитать полностью »

Как убедить посетителей вашего сайта купить продукт, используя конкурентов? Часть 2
В первой части этого материала мы рассказали об одном из способов борьбы с конкурентами с помощью их самих. Во второй части мы хотим рассказать об еще одном способе, как склонить сомневающихся посетителей вашего сайта к покупке, проследив, о чем думают клиенты ваших конкурентов. (О том, как убедить потенциального клиента совершить покупку незаметно для него самого — в статье "Новый подход к определению свободы и независимости выбора покупателя").

Способ№2. Опрос клиентов ваших конкурентов в «диких условиях»

Наверняка вы уже слышали о «шпионаже» за конкурентами с помощью социальных медиа, но еще не пробовали это?

Читать полностью »

image

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

Например, один из моих любимых объектов съемки — облака. Я очень люблю наблюдать за небом, как облака появляются, перекатываются из одной фигуры в другую, исчезают, и на их месте появляются новые. Но для того, чтобы сделать красивую фотографию облаков зачастую недостаточно разрешения и угла обзора цифровой камеры, поэтому приходится делать панорамы. Панорамная фотография — это общая фотография, собранная из множества отдельных кадров с фрагментами сцены. Процесс сборки панорамы в редакторе называется склейкой панорамы. Я не буду расписывать каждый шаг — дам общую информацию, которая позволит начать клеить панорамы, а уж детали программ разберете сами, если будет желание.
Читать полностью »

Всем привет. Представляю очередное обновление фреймворка Matreshka.js до версии 0.2. Напомню: Матрешка — фреймворк общего назначения с окрытым исходным кодом, в идеологию которого положено доминирование данных над внешним видом: вы задаёте правила, как интерфейс должен синхронизированться с данными, затем работаете исключительно с данными, кроме случаев, когда событие интерфейса не касается данных (например, щелчек по кнопке или сабмит формы, сами по себе, не меняют данные, а запускают функцию, которая, в свою очередь, работает с данными).

Пример

Матрешка позволяет довольно просто связать данные и элементы представления (например, свойство объекта и значение поля ввода), не заботясь о дальнейшей синхронизации данных и представления. Например, самая простая привязка выглядит так:

<select class="my-select">
	<option>1</option>
	<option>2</option>
	<option>3</option>
</select>

Создаем экземпляр:

var mk = new Matreshka();

Связываем свойство x с элементом .my-select:

mk.bindElement( 'x', '.my-select' );

Меняем данные

mk.x = 2;

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

Другой важной чертой матрешки являются события (в том числе и кастомные). Например, Матрешка умеет отлавливать изменение значения свойства:

mk.on( 'change:x', function( evt ) {
	alert( 'x изменен на ' + evt.value );
});

Код выведет "x изменен на Привет":

mk.x = 'Привет';

Подробнее об этих и других фичах смотрите по ссылкам выше.

Ссылка на сайт Матрешки. Ссылка на github репозиторий.

Поддержка AMD

Матрешка теперь моддерживает спецификацию определения асинхронных модулей, Asynchronous Module Definition. Другими словами, Матрешка совместима с библиотеками, типа requirejs. Это значит, что теперь можно писать тру-код, не гадящий в глобальное пространство имен. Поддерживается два типа подключения: запрос именованного модуля и запрос безымянного модуля.

Именованные модули:

requirejs.config({
	paths: {
		xclass: 'path/to/matreshka',
		matreshka: 'path/to/matreshka'
	}
});
require(['xclass', 'matreshka'], function(Class, MK) {
	return Class({
		'extends': MK
		//...
	});
});

Но это, скорее, побочный эффыект использования новой файловой структуры проекта. А рекомендованный способ — запрос безымянного модуля:

require(['path/to/matreshka'], function( MK ) {
	return MK.Class({
		'extends': MK
		// ...
	});
});

Как видете, Матрешка содержит свойство Class, которое дублирует функцию, создающую классы: нет нужды запрашивать дополнительный модуль.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js