• Новое предупреждение о неверном вычислении размера массива в gcc 5.1

      Хорошие новости для пользователей gcc — при использовании gcc 5.1 и выше им будет проще быстро находить вот такую распространенную ошибку вычисления размера массива, объявленного как параметр функции:

      void something( char arr[100] )
      {
          // this loop is broken
          for( size_t index = 0; index < sizeof(arr)/sizeof(arr[0]); index++ ) {
             //WHATEVER
         }
      }

      Хотя параметр и объявлен как массив известного размера, с точки зрения компиляторов C и C++ это указатель типа char*, поэтому sizeof(arr) даст то же значение, что и sizeof(char*) – скорее всего, 4 или 8. Цикл, скорее всего, будет работать не так, как ожидалось.
      Другой вариант:
      void something( char encryptionKey[9000] )
      {
         // WHATEVER, PROFIT
      
        // this call is broken
        SecureZeroMemory( encryptionKey, sizeof(encryptionKey)); // erase the key
      }

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

      Чтобы найти такой код было проще, в gcc 5.1 и новее на такой код выдается предупреждение и оно включено по умолчанию.
      Читать дальше →
    • При достаточном количестве денег все ошибки выплывают на поверхность

      • Перевод
      Эрик Рэймонд (Eric Raymond) в своем эссе «Собор и базар» сказал знаменитую фразу:

      «При достаточном количестве глаз все ошибки выплывают на поверхность».

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

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

      Однако переломным моментом для закона Линуса стало обнаружение уязвимости Heartbleed в OpenSSL — катастрофического эксплойта в результате серьезной ошибки в ПО с открытым исходным кодом. Каковы были масштабы катастрофы? Уязвимыми оказались примерно 18% всех сайтов с включённым HTTPS в мире. В результате злоумышленники могли просматривать весь трафик этих сайтах в незашифрованном виде… в течение двух лет.

      Вы считали эти сайты защищёнными? Как же. Эту ошибку не замечали два года.
      Читать дальше →
    • Как крупные компании организуют Общий центр обслуживания клиентов (ОЦО)

        Современный мир требует от бизнеса быстрого взаимодействия с клиентами. Чтобы обслужить как можно больше пользователей, компании стараются снимать нагрузку с фронт-офисов, перенося обработку документов в бэк-офисы. Для этого бизнес создает центры – shared services centers или общие центры обслуживания, где происходит обработка и проверка документов и данных, которые пришли из офисов, взаимодействующих с клиентами.

        Такой же подход к организации обработки документов применяют и наши заказчики. Продукты ABBYY позволяют реализовать различные сценарии обработки документов, при этом учитывая особенности бизнес-процессов компании. Мы расскажем о нескольких моделях общих центров обслуживания клиентов, реализованных с помощью ABBYY FlexiCapture, – решения, которое позволяет извлекать данные из структурированных и неструктурированных документов и сохранять их в информационных системах компаний.
        Читать дальше →
      • Fungi hunting – подозрительное хобби

        • Tutorial
        Скажи англичанам, что любишь собирать грибы, и тебя не поймут. Зачем рисковать, когда в магазинах есть простые-понятные шампиньоны & трюфели? Дикие грибы и выглядят, и пахнут подозрительно, а тот, кто их ест и ходит живой, – либо невероятный везунчик, либо тот-кто-знает-все-секреты – что тоже, в общем-то, подозрительно.

        Понять осторожных британцев поможет грибной фольклор и тест на выживаемость в английских лесах. Поехали!
        Читать дальше →
      • Перевести нельзя локализовать: как сделать сайт понятным для иностранных пользователей

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

          По данным международного исследования покупательских предпочтений потребителей, проведенного CSA (ведущей аналитической организацией на рынке лингвистических услуг и технологий), чем полнее продукт описан на родном для клиента языке, тем выше вероятность, что его купят.

          Немного о терминах
          Строго говоря, сайты не переводят, а локализуют. Локализация — это не просто перевод с одного языка на другой. Это комплексная адаптация к культуре и реалиям рынка, в результате которой тексты на сайте, графика, мультимедиа, верстка — все выглядит так, как этого ожидает целевая аудитория. Именно поэтому очень важно учесть множество нюансов, в том числе таких, которые на первый взгляд могут показаться незначительными. К примеру, подумать о длине слов в целевом языке (в английском они короче, чем в русском, а в немецком — длиннее) уже на этапе проектирования интерфейса. Например, «выход» и «exit» ещё не так сильно отличаются, а вот немецкий «Beenden» и китайский 退出 уже тянут на задачку для дизайнеров интерфейса.
          Читать дальше →
          • +22
          • 8,1k
          • 5
        • Открыта регистрация на конференцию по компьютерной лингвистике «Диалог»

            С 27 по 30 мая в Российском государственном гуманитарном университете (РГГУ) пройдет международная научная конференция по компьютерной лингвистике «Диалог». Подробно о том, что такое «Диалог» и почему ABBYY организует эту конференцию, мы писали здесь .

            Основные темы конференции этого года:

            Анализ текстов социальных медиа. С одной стороны, лингвистов интересует живой динамичный язык социальных сетей, а с другой, эти сети порождают огромное количество актуальной информации, в том числе – оценочной, которая интересует всех, от политиков до создателей фотокамер и кинофильмов.

            Проблемы связывания различных лингвистических ресурсов, созданных для разных языков, в единое информационное целое (т.н. Linked Data).

            Поскольку «Диалог» – международная конференция, традиционно в ней принимают участие специалисты по компьютерной лингвистике мирового масштаба
            Читать дальше →
            • +22
            • 3,9k
            • 4
          • 10 советов по нетворкингу для людей, которые его терпеть не могут

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

            Вы пришли на мероприятие лично, хотя могли потом посмотреть его в записи в любимых тапочках дома или в вагоне метро по пути на работу. Вы сделали это с какой-то целью, не правда ли? Пообщаться с какими-то важными специалистами; послушать, как решают аналогичные проблемы с анализом больших данных в Hadoop или уменьшают глюки отслеживания Google Analytics более опытные специалисты; познакомиться с новым потенциально интересным стартапом или журналистом, а может, вы сами – стартап и пришли искать полезные знакомства; окучить множество новых клиентов; найти и замотивировать будущих сотрудников. Ваша задача – в течение следующих нескольких часов оставить положительное неизгладимое впечатление на максимальное количество людей. Уже начинает посасывать под ложечкой?
            Читать дальше →
          • 1 год в ABBYY: Часть 2 — База рекламаций, тапочки и ABBYY Road

              Добрый день всем.

              Продолжаю трилогию о «плюсах, минусах и подводных камнях» работы в ABBYY. В первой части я рассказывал, как трудоустраивался, теперь перейдём собственно к тому, как устроены процессы и с чем может столкнуться продукт-менеджер мобилок за первые полгода работы в компании.
              Поехали!
              • +13
              • 7,3k
              • 3
            • Арабская локализация: слова, слова, слова

              • Tutorial


              Эта вторая часть рассказа про локализацию ABBYY FineReader Sprint на арабский. В отличие от первой части, где собственно про язык было мало, а про окна много, здесь речь пойдет уже про письменность и ее особенности.
              Читать дальше →
            • 1 год в ABBYY: Часть 1 – Поиск работы и первые впечатления

                Добрый день всем. Надеюсь, вы помните меня по рассказу о внутренней “кухне” разработки мобильного приложения к Играм в Сочи-2014. После окончания Игр мне часто поступали вопросы о том, куда и каким образом я устроился, нравится ли мне и пригодился ли опыт такого большого проекта, так что я решил посвятить этой истории отдельный пост: он может быть полезен стоящим на распутье или только начинающим свой карьерный путь.

                На мой взгляд, историй поиска и нахождения работы сильно не хватает на Хабре, а ведь это очень важный вопрос. При всей любви творческих профессионалов к своему бизнесу, предпринимательству и стартаперству, работа в отличной компании позволяет усилить множество компетенций, повысить скиллы практически по всем аспектам бизнеса и в целом дать возможность общаться с отличными людьми из разных областей бесплатно/без смс.
                Поехали!
              • 10 способов бумажного шифрования для школьников с помощью ABBYY FineReader

                  Способ раз


                  Создание шифровки




                  Скопируем текст в MS Word, сделаем его одного размера и форматирования, и применим к нему какой-нибудь иконочный шрифт, такой как Webdings или любой другой. Распечатаем и отправим полученную шифровку другу.

                  Ваш друг, конечно, моряк, и легко и быстро прочитает полученную шифровку. Но представим, что вы отправили другу не строчку, а много строчек. Что делать тогда?
                  Читать дальше →
                • Вычислите длину окружности

                  • Перевод
                  «Пожалуйста, напишите на C++ функцию, которая получает диаметр круга как float и возвращает длину окружности как float».

                  Звучит как задание на первой неделе курса по C++. Но это только на первый взгляд. Сложности возникают уже на первых этапах решения задачи. Предлагаю рассмотреть несколько подходов.

                  Студент: Как вам такой вариант?

                  #include <math.h>
                  float CalcCircumference1(float d)
                  {
                      return d * M_PI;
                  }

                  Преподаватель: Да, этот код может нормально откомпилироваться. А может и нет.
                  Читать дальше →
                • Лекции Технопарка. 1 семестр. Алгоритмы и структуры данных

                  • Tutorial
                  Очередной пост в рамках нашего цикла лекций Технопарка. В этот раз мы предлагаем вашему вниманию курс, посвящённый алгоритмам и структурам данных. Автор курса — Степан Мацкевич, сотрудник компании ABBYY.

                  Лекция 1. Основы


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


                  Читать дальше →
                • Арабская локализация: окна и рисование

                  • Tutorial
                  Однажды в очередную версию ABBYY FineReader Sprint (программа для распознавания текста, которая поставляется вместе с МФУ и сканерами) потребовалось добавить арабский язык интерфейса. И все заверте…

                  Обычно локализация на «новый» язык – дело (для разработки) нехитрое: завести константу-другую, поднастроить билдовую систему, и, в общем-то, все. Остальное ложится на плечи техписов и переводчиков. Но в арабском пишут справа налево, а это влечет за собой множество изменений и в интерфейсе. Об этом опыте я и расскажу в статье.
                  Читать дальше →
                • Городские легенды о медленных вызовах виртуальных функций

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

                    Процесс поиска конкретной функции по указателю на объект называется поздним связыванием и выполняется во время работы программы. Позднее связывание не только увеличивает накладные расходы на вызов, но и препятствует оптимизации кода компилятором. Из-за этого сами виртуальные функции принято считать замедляющими работу.

                    В тексте выше ключевое слово «если». Что, если компилятор знает, какую функцию на самом деле надо вызывать?
                    Читать дальше →
                  • Онтоинженер: от сотворения мира к порождению сущностей

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

                      Напомню, первая часть подвела нас к тому, что онтоинженеры строят онтологии, чтобы технология могла работать (без них — никуда, так уж всё устроено).
                      Чуть более полное описание первой части:
                      • Наша система извлечения информации опирается на представление текста в виде синтактико-семантических деревьев Compreno.
                      • Узлы деревьев примерно соответствуют словам в предложении, а дуги отражают зависимости между ними (с точки зрения грамматики зависимостей).
                      • Деревья являются формальным представлением «смысла» высказывания, поэтому в них уже разрешены языковые неоднозначности.
                      • Получив на вход эти деревья, на выходе система выдает информационные объекты — сущности (персоны, организации, локации и т.п.) или факты (аресты, смерти, покупки, родство, получение образования и т.п.).
                      • Формальные модели действительности, внутри которых существуют все эти факты и сущности, называются онтологиями. Онтоинженеры разрабатывают онтологии, используя стандарт OWL.

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

                      Семь битв – одно поддерево


                      Основную часть рабочего времени онтоинженер посвящает не «моделированию мира» (хотя это и звучит очень гордо), а созданию системы извлечения. И хотя мы всё больше экспериментируем со статистикой, машинным обучением и автоматическим извлечением паттернов, пока в наших продуктах и проектах используются правила, написанные вручную. Однако правила эти представляют собой не какие-то жесткие шаблоны, опирающиеся на линейный порядок слов в предложении, а описания фрагментов семантико-синтаксических деревьев ABBYY Compreno. Это позволяет нам сравнительно легко обходить вариативность и неоднозначность языка, кратко задавая множество вариантов, используемых для выражения одного и того же смысла.
                      Читать дальше →
                    • Онтоинженер: работа по понятиям

                        Привет, Хабр! Меня зовут Даня, и я работаю в группе извлечения знаний ДогадайтесьКакойКомпании. В двух постах я расскажу,
                        • как мы извлекаем факты и сущности из текстов,
                        • кто такие онтоинженеры,
                        • зачем они отделяют трупы от костей,
                        • причём здесь Лев Толстой.

                        На Хабре уже было несколько публикаций, посвященных извлечению информации из неструктурированного текста (много чего ищется по тегами Text Mining, Information Extraction). Вот здесь, например, приведен краткий джентльменский набор того, что желательно сделать с текстом, прежде чем из него будет удобно что-нибудь извлечь (спойлер: мы все это тоже делаем). А вот тут коллеги из Яндекса описывают свой подход с использованием КС-грамматик (кстати, там тоже замешан Толстой). В общем, тема для Хабра не новая, но и нельзя сказать, что достаточно раскрытая. Потому мы и решили поделиться нашим опытом.
                        Читать дальше →
                      • «Уроки английского»: Habrahabr vs Geektimes

                          Товарищи хабравчане, хотим обсудить с вами свежие события в нашем блоге, а также его светлое будущее.

                          HeadMatters написала интересные вещи с уже почти легендарным тегом «уроки английского». По этому поводу мы, конечно, запилили пост на ГТ, но остались в смешанных чувствах по результатам этого мероприятия: мало же.

                          Читатель сейчас, конечно, может возмутиться и сказать, мол, зажрались вы там совсем, +58 им недостаточно. Но нет, речь не о плюсах, речь о просмотрах, которых для такой годноты (это моё личное оценочное суждение), кажется, маловато. Поэтому хочется понять, в чём дело.
                          Читать дальше →
                        • Драма you и thou, или шекспировские страсти

                            В современном английском (я сейчас про «язык королевы» или Received Pronunciation) тыканье и выканье управляется местоимением you, отчего у иностранцев складывается примерно такая картина мира: «о, удобно, не то, что у нас!» или «а мне сейчас тыкнули или что?». Открою тайну: технически и по идейным соображениям англичане выкают всем подряд вот уже 500 лет. Почему так вышло, и какие они – настоящие шекспировские страсти – читайте под катом.
                            Читать дальше →
                          • Укрощение строптивого (на самом деле, нет) FineReader

                            • Tutorial

                            После короткого рассказа о том, как устроен ABBYY FineReader (aka «теоретическая часть»), самое время перейти к применению полученных знаний. И да, котиков под катом нет: всё очень серьёзно.

                            Как пользователю поучаствовать в обработке документа


                            Чтобы не изобретать велосипед, начну с простой и понятной схемы из Справки (см. рисунок справа).

                            Теперь, зная список всех операций, посмотрим на примерах – что может пойти не по плану и как с этим бороться.
                            Читать дальше →

                          Самое читаемое