Pull to refresh
0
Берти Вустер @AgentSmith

Пользователь

Send message

Ответы генерального директора ABBYY Сергея Андреева на вопросы читателей Хабра. Часть 1

Reading time11 min
Views37K
image
Уважаемые читатели и писатели Хабра!

Хочу сказать спасибо всем участникам этого обсуждения за их искреннее желание сделать нашу страну лучше. Это видно во всех вопросах, заданных здесь, даже если они порой звучат жёстко и предубеждённо. Я посчитал важным ответить на вопросы, потому что ABBYY слишком давно не рассказывала о том, чем мы занимаемся, и как мы это делаем. А отсутствие информации порождает много нелепых догадок. Итак, время отвечать на вопросы.

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

Начну с того, что компании ABBYY уже 21 год. Все это время мы делаем интересные продукты и технологии, известные во всём мире. Сейчас это продукты распознавания печатного и рукописного текста и словари. В будущем – это продукты, основанные на компьютерной лингвистике. Наши интересы не лежат в области потребления. Наши руководители и акционеры не ездят на роскошных автомобилях, не покупают яхт, вертолетов и дворцов, у нас нет дач на Рублевке. Нам интересно делать новые удивительные продукты, а не ходить по магазинам.
Читать дальше →
Total votes 139: ↑115 and ↓24+91
Comments171

MongoDB и C# driver от 10gen, неочевидные моменты

Reading time4 min
Views5.5K

Под катом частичная загрузка объектов, поиск объекта по элементу вложенного в него массива и немного идентификаторов. Вещи, которые так или иначе отняли у меня время на расследование как это работает, а иногда и на копание в исходных кодах драйвера при использовании MongoDB в реальном проекте.
Читать дальше →
Total votes 36: ↑27 and ↓9+18
Comments20

Профессиональный курс по ASP.NET MVC 3 бесплатно до 18 марта!

Reading time1 min
Views3.7K
image 

Компания Pluralsight, при поддержке Microsoft, делает прекрасное предложение для веб-разработчиков и предлагает бесплатный доступ к своему профессиональному видео-курсу обучения технологии ASP.NET MVC 3. Предложение ограничено по времени, курс будет свободно доступен только до 18 марта. Курс подготовлен на английском языке.

image

Курс состоит из следующих частей:
  • введение: новый проект, шаблон MVC, маршрутизация, контроллеры, представления, создание действия;
  • движок представлений Razor: преимущества Razor, создание простого представления, смешивание кода и разметки, модели и ViewData, HTML-хелперы, частичные представления, модель компоновки представления, код для автоматического запуска, конфигурация;
  • контроллеры: глобальные фильтры действий, кэширование результатов вложенных действий, ViewBag, новые результаты действий, валидация запросов;
  • модели: валидация в MVC3, аннотация данных, пользовательские атрибуты валидации, модели с поддержкой валидации, клиентская валидация, пользовательская клиентская валидация, удаленная валидация;
  • NuGet: средство управления пакетами, зависимости пакетов, использование PowerShell, пользовательские пакеты;
  • Dependency Injection: инъекции зависимостей, использование IDependencyResolver, инъекция в контроллерах, инъекция в представлениях, активаторы, расширяемость фильтров, расширяемость моделей.
Pluralsight делает весьма и весьма качественные видео-курсы, поэтому рекомендую всем не упустить возможность и ознакомиться с этим бесплатным предложением. Очень хороший шанс начать изучать ASP.NET MVC или узнать что нового было представлено в MVC3.
Total votes 76: ↑50 and ↓26+24
Comments17

Транзакции и многопоточный доступ к базе данных

Reading time5 min
Views30K
Недавно мне понадобилось выполнить следующий код (представлен в максимально упрощенном виде):

public void Start()
{
    using (var transactionScope = new TransactionScope())
    {
        ...
        GetOrCreateCompany(someValue);
        ...
        transactionScope.Complete();
    }
}

private Company GetOrCreateCompany(string companyName)
{
    var company = _companiesRepository.GetCompany(companyName); //простая выборка из таблицы по названию; если компания не найдена - возвращается null
    if (company == null)
        company = _companiesRepository.Add(companyName);
    return company;
}


Код этот выполнялся в многопоточной среде, где каждый поток на вход получал метод Start (а значит у каждого потока была своя транзакция).

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

Читать дальше →
Total votes 48: ↑34 and ↓14+20
Comments116

Что почитать на выходных? Рекомендуем

Reading time2 min
Views1.9K
Это первый, пробный выпуск подборки интересных ссылок на статьи по разработке веб-приложений на платформе .NET (и не только). Сегодня я представляю первую подборку статей, которые будет полезно почитать в свободные минуты на выходных. Большинство статей написаны на английском, но, со временем, я надеюсь публиковать больше ссылок на русскоязычные статьи.

Тема номера:

Мега-подборка видео-материалов по разработке на ASP.NET WebForms, ASP.NET MVC и WebMatrix:
  • 35 видео: что нового в ASP.NET и быстрое введение в новые функции [link];
  • 114 видео: руководства по доступу к данным в ASP.NET [link];
  • 155 видео: руководства по AJAX, AJAX Control Toolkit [link];
  • 29 видео: руководства по вопросам безопасности ASP.NET [link];
  • 17 видео: введение в разработку на WebMatrix [link];
  • 24 видео: работа с IIS, развертывание ASP.NET-сайтов [link];
  • 61 видео: руководства по построению приложений на ASP.NET MVC [link];
  • 17 видео: руководства по доступу к данным в ASP.NET MVC [link];
  • 5 видео: руководства по вопросам безопасности в ASP.NET MVC [link].
WebForms:
Читать дальше →
Total votes 127: ↑77 and ↓50+27
Comments35

TortoiseHG 2.0 и Mercurial 1.8

Reading time1 min
Views4.3K
Наконец-то, случилось то, чего ждали многие пользователи графической оболочки системы управления версиями Mercurial. Обновился TortoiseHg.

Изменения в первую очередь коснулись юзабилити интерфейса. Стало заметно удобнее работать.

Серьезно изменения коснулись окна отображения истории репозитория (отображения веток).
image

Скриншоты

Загрузить TortoiseHG 2.0

Upd: так же стоит отметить и обновление версии самой Mercurial до 1.8
Total votes 39: ↑38 and ↓1+37
Comments22

Детектор границ Канни

Reading time6 min
Views92K
Доброго времени суток!

Последнее время, на Хабре часто стал упоминаться алгоритм выделения границ Канни (который, к моему удивлению, переводится дословно: хитрый). Итак, я созрел поделиться с общественностью своим опытом реализации этого детектора.
Читать дальше →
Total votes 70: ↑67 and ↓3+64
Comments26

Индексирование и поиск с помощью Xapian в .NET

Reading time3 min
Views4.2K
Если слово Xapian вам незнакомо, рекомендую ознакомиться с небольшой статьей.
Вкратце же, Xapian — представляет собой написанный на с++ набор инструментов для индексирования текстовой информации, с возможностью поиска по базе индексированной информации. Для работы не требует установленного сервера, достаточно наличия его библиотек. Может обрабатывать огромные массивы информации(проверено до 1.5Тб), измеряемой миллионами документов. Является конкурирующим продуктом Sphinx и Apache Lucene.
Мной он был выбран из этих трех продуктов за возможность использования из .Net.

Пробуем
Total votes 36: ↑30 and ↓6+24
Comments31

Забавляемся с хешами

Reading time5 min
Views88K
Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же md5 сумму. Проверьте никакого обмана нет. Md5 хеш обоих равен ecea96a6fea9a1744adcc9802ab7590d. Теперь запустите программу good.exe и вы увидите на экране следующее.
Попробуйте запустить программу evil.exe.
Что-то пошло не так? Хотите попробовать сами?
Тогда добро пожаловать под кат.
Total votes 264: ↑254 and ↓10+244
Comments123

Криптографическая головоломка: импорт ключа WebMoney в Crypto Service Provider

Reading time10 min
Views5.2K
Приватные ключи в системе Windows, как правило, сохраняются в специальном хранилище ключей. Работа с этими ключами происходит путем вызова функций криптографического провайдера (далее CSP). При использовании стандартного CSP (Microsoft Base Cryptographic Provider) ключи пользователя хранятся в папке C:\Users\[Vasia]\AppData\Roaming\Microsoft\Crypto. При использовании специальных устройств, ключи хранятся в памяти самого устройства.

Для повышения безопасности, было принято решение импортировать ключ WebMoney (тот самый .kwm, которым подписывают запросы к интерфейсам) в CSP. Обычно те, кто использует ключ для подписи запросов к WM-интерфейсам, хранят его либо в виде файла .kwm в файловой системе, либо в виде xml-представления – оба варианта не очень-то безопасны.

Это оказалось не так уж просто.

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

Читать дальше →
Total votes 47: ↑43 and ↓4+39
Comments19

MVC Framework: большое введение для начинающих

Reading time16 min
Views81K
Необходимое отступление: не так давно я разместил статью предназначавшуюся для печатного издания. Приведенная ниже статья имеет ту же самую судьбу: она не попала в печать в связи с тяжелым положением журнала. Как и в прошлый раз, я решил опубликовать статью на Хабре, благо тематика попадает под формат. Необходимо заметить, что статья оформлена и содержит текст для журнала, если бы она готовилась для Хабра, то некоторые часть могли бы быть изменены. Надеюсь, статья вам понравится.

В последнее время заметно, что компания Microsoft уделяет повышенное внимание развитию своих средств разработки, новым инструментам и механизмам разработки программ на своей платформе .net. Быстро развивается язык C#, четвертая версия которого не за горами. Представлен и активно продвигается новый язык F#. Для разработчиков баз данных разработан Entity Framework, который уже доступен в виде финальной версии в первом сервиспаке к .Net Framework 3.5 и Visual Studio 2008. Microsoft активно занялась и клиентской частью разработки web-проектов. Для нашего внимания предложен путь развития Ajax.Net 4.0. Internet Explorer 8 все больше соответствует стандартам и становится привлекательным инструментом для web-программистов, так например, его вкладка Developer Tools включает в себя профайлер JavaScript. Очень хорошей новостью стало недавно объявление о полной поддержке и включении JavaScript-библиотеки jQuery в следующее обновление Visual Studio. В этом свете возникает вопрос, что же предложено разработчикам ASP.NET? Ответ — MVC Framework. Целью данной статьи рассмотреть некоторые общие проблемы, с которыми могут столкнуться программисты, решившие использовать MVC Framework для своих web-проектов, и их решения.
Читать дальше →
Total votes 65: ↑59 and ↓6+53
Comments71

ASP.NET MVC на реальном примере. Теория и вступление.

Reading time9 min
Views65K
Команда Microsoft очень интенсивно развивает свои продукты и средства для разработчиков. На эту тему уже и выхлопы шуточные были, по поводу выхода новых версий фреймворков. Разработчики, которые работают в крупных компаниях, ввязаны в большие проекты в общем-то без особого энтузиазма на это смотрят, так как такие махины нельзя в короткие сроки перевести на новую версию. Может быть чревато как всплыванием багов, так и изменением всей структуры проекта, что делать не всегда получается легко. Сказанное выше, к сожалению (или к счастью), меня не касается и это дает мне возможность использовать все самое новое без оглядки на бекграунд. Проекты довольно таки обозримые, часто переводятся на новую версию безболезненно, и новые фичи начинаю внедрять уже при реализации следующей задачи в пректе. На момент внедрения это, конечно, вносит некий хаос в код, так как в разных кусках кода используются разные принципы (например, внедрение LINQ), но последующий рефакторинг кода приводит все к единому виду и все приходит в норму.

К чему все это?


Одним из таких нововведений является ASP.NET MVC — реализация шаблона Model-View-Controller под платформу .NET. Попробуем разобраться что же это такое, зачем нужно, и применим наши знания на простом, но реальном приложении.
Приступим
Total votes 36: ↑33 and ↓3+30
Comments166

Делаем PDF-книгу из веб-комикса при помощи C# на примере xkcd

Reading time6 min
Views5.4K
Sony PRS-650 и xkcdРассматривая новый выпуск xkcd, я взглянул на свою свежеприобретённую электрокнигу Sony PRS-650, и немедленно подумал — хочу смотреть комиксы на ней! Xkcd как раз чёрно-белые и, обычно, небольшие по размеру. Слегка погуглив, нашел лишь сборник картинок на TPB, и скрипт на bash, который должен делать PDF. Решил слегка поразмяться в программировании и сделать граббер комиксов на любимом C#.

Можно было бы обойтись консольным приложением, но, для наглядности, сделал простой интерфейс на WPF.

Увидеть код и результат
Total votes 85: ↑76 and ↓9+67
Comments36

Обзор C# библиотек для работы с PDF

Reading time5 min
Views169K
topic image
На написание данной статьи меня подтолкнул топик HTML в PDF, правда по причине того, что он посвящен языку php, лично мне он был мало полезен, т.к. весь опыт работы с php у меня сводился в переводе нескольких скриптов на C#, поэтому я решил сделать небольшой обзор того, что доступно для работы с pdf по средствам языка C#.

Ко мне в список попало 7 библиотек, о которых я скажу несколько слов, а для самой популярной (судя по ответам на stackoverflow), я напишу, как с помощью неё сделать простейший документ. Сразу скажу, что это iTextSharp и работа с ней будет описана в конце статьи.
Читать дальше →
Total votes 87: ↑77 and ↓10+67
Comments24

Обфускация JavaScript

Reading time5 min
Views196K
В статье собраны всем известные методы и предельно извращенные. Эту статью я решил написать после недавнего прочтения поста в блоге Badass JavaScript и решил её дополнить своими находками.

Первый способ


Он всем известен — обфускация минимизаторами такими как JS Packer, JSmin, YUI Compressor, Closure compiler или можно просто пугуглить «JavaScript Obfuscator» и найдется ещё сто штук разных обфускаторов.
Они превращают существующий код
function MyClass(){
    this.foo = function(argument1, argument2){
        var addedArgs = parseInt(argument1)+parseInt(argument2);
        return addedArgs;
    }
    var anonymousInnerFunction = function(){
        // do stuff here!
    }
}

В какой-то такой вид:
function MyClass(){this.foo=function(c,b){var d=parseInt(c)+parseInt(b);return d};var a=function(){}};

Или такой:
var _0xd799=["\x66\x6F\x6F"];function MyClass(){this[_0xd799[0]]=function (_0xefcax2,_0xefcax3){var _0xefcax4=parseInt(_0xefcax2)+parseInt(_0xefcax3);return _0xefcax4;} ;var _0xefcax5=function (){} ;} ;

Или вот такой:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 0="3 5!";9 2(1){6(1+"\\7"+0)}2("8");',10,10,'a|msg|MsgBox|Hello|var|World|alert|n|OK|function'.split('|'),0,{}))

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

Все это были цветочки под катом жесткие методы обфускации.
Читать дальше →
Total votes 171: ↑165 and ↓6+159
Comments85

Знакомство с OCR библиотекой tessnet2 (язык C#)

Reading time5 min
Views60K
example
Буквально на днях у меня появилась необходимость распознать простой текст на картинке и совсем не было желания реализовывать свой алгоритм, т.к. знаком с теорией и знаю, что это не такое простое дело, поэтому сразу решил изучить сначала рынок готовых библиотек. Буквально несколько запросов в гугл и я понял, что ничего более подходящего мне как библиотека tessnet2 невозможно найти. Постоянно читаю хабр и знаю, что тут есть уйма статей посвященных теории OCR и очень удивился, что нет ничего о библиотеке tessnet2.
Читать дальше →
Total votes 77: ↑70 and ↓7+63
Comments21

Методы распознавания текстов

Reading time6 min
Views59K
Несмотря на то, что в настоящее время большинство документов составляется на компьютерах, задача создания полностью электронного документооборота ещё далека до полной реализации. Как правило, существующие системы охватывают деятельность отдельных организаций, а обмен данными между организациями осуществляется с помощью традиционных бумажных документов.
Читать дальше →
Total votes 85: ↑73 and ↓12+61
Comments59

Создаем свой SVN сервер: 3$ и 30 минут

Reading time4 min
Views14K
Многих хабрачитателей иногда волнует вопрос хостинга SVN. В интернете полно вариантов захостить SVN репозиторий, с ценой порядка 10-15уе в месяц, но смущает одно: хостинг репозитория — намного более ответственное дело, нежели хостинг сайта. В коде — ваши «сверхценные идеи», от аптайма сервера и надежности бэкапов напрямую зависит работа вашего бизнеса. Некоторые выбирают все же хостить SVN в серьёзных компаниях. Хорошее сравнение по параметрам тут: http://www.svnhostingcomparison.com/, open-source кстати можно захостить в неплохом месте на букву G ;-).

Другие же, как и я, решают хостить SVN на своём VDS / Dedicated сервере. На этом вопросе я и остановлюсь, рассказав заодно немного о вариантах запуска/настройки svn сервера (в том числе относительно новых — шифрование/аутентификация SASL и хранение в FS). Выльеться все это вам в 3-4$/месяц, в полный контроль за бэкапами и доступом к серверу. Пожертвовать придется 30 минут драгоценного времени на настройку.

Целевая аудитория: начальный — средний уровень опыта работы с Linux.
PS. Я в курсе что FreeBSD is not Linux ;-)
Читать дальше →
Total votes 79: ↑73 and ↓6+67
Comments78

Точка, точка, запятая: машинное обучение

Reading time7 min
Views17K
Как научить поисковую машину правильно разбивать текст на предложения? Сделать так, чтобы она могла распознавать точки, которые не являются концами предложений.

Наша статья о машинном обучении объясняет одну из техник, которые применяются в поисковой машине тогда, когда возникает нужда в корректном разбиения текста на предложения. Решение такой задачи имеет принципиальное значение, например, при генерации сниппетов поисковыми системами или при построении базы контекстов словоупотребления. Сейчас эта технология встраивается в индексатор Поиска@Mail.Ru. Точность метода, по нашим наблюдениям — не менее 99%.
О том, как это работает, читайте в нашей статье.
Читать дальше →
Total votes 56: ↑41 and ↓15+26
Comments8

Онлайн генератор схем баз данных

Reading time1 min
Views252K
Хочу представить онлайн генератор схем баз данных dbdsgnr. Сервис сделан на питоне и google app engine. Залогиниться в него можно имея аккаунт в гугле. Вкратце о сервисе: вы рисуете схему баз данных, а сервис создает вам код. На данный момент можно получить только для MySQL, но обещают поддержку PostgreSQL, SQLite, MySQL, MSSql, Oracle. Под катом пример работы с данным сервисом.
Читать дальше →
Total votes 63: ↑57 and ↓6+51
Comments33

Information

Rating
Does not participate
Location
Горелки, Тульская обл., Россия
Date of birth
Registered
Activity