Распознавание чеков в Google Docs с помощью ABBYY OCR SDK

В северном полушарии нынче зима, а это значит что пора на лыжи! Мы с друзьями поддались этому течению и приступили к подготовке нашего совместного зимнего отдыха. Детали всего процесса планирования раскрывать не буду, скажу лишь только, что мне выпала ответственная роль сбора магазинных чеков наших совместных трат.
Читать дальше →
Распознавание чеков в Google Docs с помощью ABBYY OCR SDK
Source: habrahabr

Изоморфные React-приложения: производительность и масштабирование

Денис Измайлов ( DenisIzmaylov )


Всем привет! Вкратце расскажу о себе. Я — Денис Измайлов. Последние 5 лет сосредоточился на JS-разработке, делал много Single Page Application, highload, React, выступал на MoscowJS несколько раз, каммитил webpack и т.д.


Сегодня хотел бы поговорить вот о чем: почему от Single Page Application в его классическом виде стоит отказаться; как изоморфные приложения отразятся на Вашей зарплате; и что вы будете делать на этих выходных?
Читать дальше →
Изоморфные React-приложения: производительность и масштабирование
Source: habrahabr

Сравнение Lock-free алгоритмов — CAS и FAA на примере JDK 7 и 8

Много ядер не бывает

Атомарные операции (atomics), например, Compare-and-Swap (CAS) или Fetch-and-Add (FAA) широко распространены в параллельном программировании.


Мульти- или многоядерные архитектуры установлены одинаково как в продуктах настольных и серверных компьютеров, так и в крупных центрах обработки данных и суперкомпьютерах. Примеры конструкций включают Intel Xeon Phi с 61 ядрами на чипе, который установлен в Tianhe-2, или AMD Bulldozer с 32 ядрами на узле, развернутых в Cray XE6. Кроме того, количество ядер на кристалле неуклонно растет и процессоры с сотнями ядер, по прогнозам, будут изготовлены в обозримом будущем. Общей чертой всех этих архитектур является растущая сложность подсистем памяти, характеризующаяся несколькими уровнями кэш-памяти с разными политиками включения, различными протоколами когерентности кэш-памяти, а также различными сетевыми топологиями на чипе, соединяющими ядра и кэш-память.

Практически все такие архитектуры обеспечивают атомарные операции, которые имеют многочисленные применения в параллельном коде. Многие из них (например, Test-and-Set) могут быть использованы для реализации блокировок и других механизмов синхронизации. Другие, например, Fetch-and-Add и Compare-and-Swap позволяют строить разные lock-free и wait-free алгоритмы и структуры данных, которые имеют более прочные гарантии прогресса, чем блокировки на основе кода. Несмотря на их важность и повсеместное употребление, выполнение атомарных операций полностью не проанализировано до сих пор. Например, по общему мнению, Compare-and-Swap идет медленнее, чем Fetch-and-Add. Тем не менее, это всего лишь показывает, что семантика Compare-and-Swap вводит понятие «wasted work», в результате – более низкая производительность некоторого кода. Читать дальше
Сравнение Lock-free алгоритмов — CAS и FAA на примере JDK 7 и 8
Source: habrahabr

Инфраструктура простой электронной подписи. Часть 2: Моделирование целевой системы



В предыдущей части была построена диаграмма использующих систем в проектируемой инфраструктуре ПЭП. Следующим этапом необходимо проанализировать целевую систему в этой инфраструктуре. Целевой системой у нас является ПЭП, которая, согласно законодательству, является аналогом личной собственноручной подписи. Поэтому дальнейший анализ будет вестись как для личной собственноручной подписи, так и для ПЭП.
Читать дальше →
Инфраструктура простой электронной подписи. Часть 2: Моделирование целевой системы
Source: habrahabr

Трудности в моделировании операций стандартными способами. Моделирование 4-объектов, постановка задачи

При написании этой статьи я сделал все возможное, чтобы сделать ее простой для чтения. Однако, в ней содержится очень сложный и нетривиальный вывод — почему методы моделирования операций, которые мы встречаем почти в каждой нотации, не дают нам удовлетворения. Я не видел подобного анализа нигде, даже в книге Криса Партриджа, которую я очень люблю: Business Objects: Re-Engineering for Re-Use. Поэтому я надеюсь, что статья будет легка и полезна одновременно.


Все модели, которые мы строим, должны так или иначе моделировать 4-х мерное пространство-время, потому что именно так мы представляем себе окружающий нас мир. Об этом рассказано в книге Криса Партриджа. Даже то, что кажется, не имеет отношения к 4-пространству, при внимательном рассмотрении оказывается оным. Правда, не всегда существующим в реальности, иногда — это воображаемый нами мир. Всем, кому интересно, как это происходит, рекомендую внимательно прочитать эту книгу. Однако, советую не обращать внимания на определение события в этой книге, — оно дано неверно.

Например, что такое болт? Это 4-х мерный объект, который ограничен в пространстве-времени определенными границами. Для моделирования болта существуют нотации, которые моделируют эти границы. Например, чертеж болта моделирует поверхность, которая ограничивает 3-х мерный объем. Добавив к этому чертежу еще 6 координат, зависящих от времени, мы получим модель поверхности 4-Д пространства — времени, которая моделирует болт.


Однако, что такое операция? Это — тоже 4-х мерный объект, который также, как и болт ограничен определенными границами в пространстве и во времени. Правда, представить себе операцию как 4-объект намного сложнее. Существуют три причины, по которым нам сложно это сделать.
Читать дальше →
Трудности в моделировании операций стандартными способами. Моделирование 4-объектов, постановка задачи
Source: habrahabr

Сегментация как она есть. Часть 2

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


В продолжение темы, мы расскажем о работе с данными, которые стали результатом взаимодействия подписчика с вашими рассылками и сайтом. А еще о том, как компания Finish Line повысила продажи с помощью сегментации на 50%.


Фото Rob Sinclair (Flickr)
Читать дальше →
Сегментация как она есть. Часть 2
Source: habrahabr

Как работают ИТ-специалисты. Иван Новиков, СЕО компании Wallarm

image


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


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


Сегодня наш гость — Иван Новиков, генеральный директор компании Wallarm. Нельзя сказать, что его работа заключается только в управлении компанией: ему приходится многое брать на себя — от исследований до поддержки клиентов. Читать дальше →
Как работают ИТ-специалисты. Иван Новиков, СЕО компании Wallarm
Source: habrahabr

Проектирование и рефакторинг: по стопам Эвклида

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


Итак, кому же? В первую очередь, наверное, таким же как я — новичкам в области проектирования программных систем. Тем, кто не обладает колоссальным эмпирическим опытом и владеет шаблонами проектирования исключительно на основании общих рассуждений. Ещё более эффективным будет прочтение такой статьи тем, кто ни разу не слышал про SOLID, GRASP и прочие принципы проектирования. Ибо я искренне уповаю на то, что мне удастся показать, как из базовых теоретических суждений на основании законов логики выводятся все те непоколебимые постулаты, ранее казавшиеся a priori истинными.


Тем не менее, не смотря на столь низкую планку, я бы всё же пожелал, дабы опытный и уже матёрый программист, обладающий мощной эмпирической базой, крепко засевшей в его нейронных сетях, подсобил конструктивным советом скромным начинаниям.
Читать дальше →
Проектирование и рефакторинг: по стопам Эвклида
Source: habrahabr

Производительность запросов в PostgreSQL – шаг за шагом

Илья Космодемьянский ( hydrobiont )


Для начала сразу пару слов о том, о чем пойдет речь. Во-первых, что такое оптимизация запросов? Люди редко формулируют и, бывает так, что часто недооценивают понимание того, что они делают. Можно пытаться ускорить какой-то конкретный запрос, но это не обязательно будет оптимизацией. Мы немного на эту тему потеоретизируем, потом поговорим о том, с какого конца к этому вопросу подходить, когда начинать оптимизировать, как это делать, и как понять, что какой-то запрос или набор запросов никак нельзя оптимизировать – такие случаи тоже бывают, и тогда нужно просто переделывать. Как ни странно, я почти не буду приводить примеров того, как запросы оптимизировать, потому что даже 100 примеров не приблизят нас к разгадке.
Читать дальше →
Производительность запросов в PostgreSQL – шаг за шагом
Source: habrahabr