Pull to refresh
-24
0
Антон Холодцов @Error_403_Forbidden

User

Send message

NFX — Ультраэффективная Бинарная Сериализация в CLR

Reading time8 min
Views21K

Требования


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

  • самозацикленные графы объектов (деревья с back-references)
  • массивы структур (value types)
  • классы/структуры с readonly полями
  • инстансы существующих .Net коллекций (Dictionary, List), которые внутренне используют custom-сериализацию
  • большое кол-во инстансов типов, специализированных для конкретной задачи


Речь пойдёт о трёх аспектах, которые очень важны в распределённых кластерных системах:

  • скорость сериализации/десериализации
  • объём объектов в сериализированном виде
  • возможность использовать существующие объекты без надобности “украшения” этих объектов и их полей вспомогательными атрибутами для сериализации

Читать дальше →

Лекции Техносферы. 2 семестр. Современные методы и средства построения систем информационного поиска

Reading time6 min
Views21K


Снова в эфире наша образовательная рубрика. На этот раз предлагаем ознакомиться с очередным курсом Техносферы, посвящённым информационному поиску. Цель курса — рассказать об основных методах, применяемых при создании поисковых систем. Некоторые из них представляют собой хороший пример смекалки, некоторые показывают, где и как может применяться современный математический аппарат. Преподаватели курса: Алексей Воропаев, Владимир Гулин, Дмитрий Соловьев, Игорь Андреев, Алексей Романенко, Ян Кисель.
Читать дальше →

Анализ изображений и видео. Сегментация изображений

Reading time2 min
Views25K
Сегодня мы публикуем восьмую лекцию из курса «Анализ изображений и видео», прочитанного Натальей Васильевой в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео»;
  2. Основы пространственной и частотной обработки изображений;
  3. Морфологическая обработка изображений;
  4. Построение признаков и сравнение изображений: глобальные признаки;
  5. Построение признаков и сравнение изображений: локальные признаки;
  6. Поиск по подобию. Поиск нечетких дубликатов;
  7. Анализ изображений и видео. Классификация изображений и распознавание объектов.

Под катом вы найдете план новой лекции и слайды.
Читать дальше →

Расширяем Selenium WebDriver. Пишем робота для RSDN, не думая о контексте

Reading time5 min
Views8.2K
Сегодня я хотел бы рассказать, как можно сделать свой PageObject паттерн на основе Selenium. Да, я знаю, что у них есть свой PageObject, но какой же программист не хочет написать свой велосипед с блэкджеком и женщинами легкого поведения.

Вообще, писать автоматические тесты для UI очень сложно — постоянные проблемы, то там что-то не подгрузилось, то там запрос не дошел и упал по таймауту. Кто написал хотя бы сотню тестов — тот меня поймет. А теперь представьте, что ваши страницы не просто состоят из простого HTML, но и содержат много разных фреймов и попап окошек. Если вы хорошо знаете Selenium, то понимаете, чем это грозит. Selenium может одновременно работать только в контексте одного документа, будь то frame, iframe или отдельное модальное окно.
Читать дальше →

Определяем веса шахматных фигур регрессионным анализом

Reading time15 min
Views85K
Здравствуй, Хабр!

В этой статье речь пойдёт о небольшом программистском этюде на тему машинного обучения. Замысел его возник у меня при прохождении известного здесь многим курса «Machine Learning», читаемого Andrew Ng на Курсере. После знакомства с методами, о которых рассказывалось на лекциях, захотелось применить их к какой-нибудь реальной задаче. Долго искать тему не пришлось — в качестве предметной области просто напрашивалась оптимизация собственного шахматного движка.

Вступление: о шахматных программах



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

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

Строго говоря, настоящая оценка может принимать только три значения: выигрыш, проигрыш или ничья — 1, 0 или ½. По теореме Цермело для любой заданной позиции она определяется однозначно. На практике же из-за комбинаторного взрыва ни один компьютер не в состоянии просчитать варианты до листьев полного дерева игры (исчерпывающий анализ в эндшпильных базах данных — это отдельный случай; 32-фигурных таблиц в обозримом будущем не появится… и в необозримом, скорее всего, тоже). Поэтому программы работают в так называемой модели Шеннона — пользуются усечённым деревом игры и приближённой оценкой, основанной на различных эвристиках.
Читать дальше →

Алгоритм Quickhull для нахождения выпуклой оболочки

Reading time20 min
Views25K
Как гласит определение, выпуклая оболочка некоторого множества — это наименьшее выпуклое множество , содержащее в себе множество . Выпуклой оболочкой конечного множества попарно различных точек является многогранник.
Для реализации одномерного случая алгоритма Quickhull годится функция std::minmax_element. В сети можно найти множество реализаций алгоритма Quickhull для плоского случая. Однако, для случая произвольной размерности сходу находится лишь одна тяжёловесная реализация с сайта qhull.org.
Читать дальше →

CTB-Locker. Мы решили платить

Reading time3 min
Views93K


CTB Locker — очень хорошо продуманный и опасный вирус. Писать о нем не буду — информации об этом вирусе в интернете очень много.

За последние 3 месяца некоторые наши клиенты поймали этого зверя, несмотря на предупреждения, обновленные корпоративные антивирусы и прочие решения защиты. У некоторых страдала отдельная рабочая машина, у других — сервер терминалов. Но средства резервного копирования всех спасали.

Последнее заражение одного из клиентов привело к потере большого количества данных, а также некоторых резервных копий. Ответственность за это лежала на клиенте — финансирование на расширение сервера резервного копирования не могли выделить пол года. Но суть не в этом. Нам поставили задачу платить создателям вируса (и тут финансирование резко нашлось).

Я не агитирую пользователей сообщества платить злоумышленникам (я противник этого), но, возможно, этот небольшой мануал кому-то поможет.

Далее я опишу пошагово, как платил плохим людям за расшифровку клиентских данных.
Читать дальше →

Разбор естественного языка: под капотом

Reading time4 min
Views15K


API синтаксического анализатора


Продолжаю свой предыдущий пост. Время сфокусироваться на деталях внутреннего устройства синтаксического анализатора. В качестве языка реализации я выбрал Go, поскольку хотел малой ценой получить параллельный (в смысле, использующий все доступные ядра CPU) производительный инструмент, без погружения в низкоуровневую пучину C++.

Полученный код предоставляет следующий API:
type Attribute struct {
    Name   string
    Value  string
}

type ParseMatch struct {
    Text            string
    Nonterminal     string
    Rule            string
    Attributes      []Attribute
    Submatches      []ParseMatch
    Hypotheses      []string
    HypothesisCount uint
}

func Parse(text, nonterminal string, hypotheses_limit uint) []ParseMatch

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

Итак, функция Parse берёт text — текст для разбора, nonterminal — название нетерминала (например, «sentence»), а также максимальное число выдвигаемых гипотез hypotheses_limit (об этом чуть ниже). Параметр nonterminal может быть пустым. В этом случае тексту будет сопоставляться лексический терминал, найденный в морфологической базе.

В терминах данного анализатора гипотеза — это предположение того, что нарушенное ограничение значения атрибута вызвано случайной причиной. Если анализатор встречает несоответствие значения атрибута ограничению, заданному рассматриваемым в данный момент правилом, а число выдвинутых гипотез не достигло hypotheses_limit, то данное несоответствие игнорируется. В противном случае рассматриваемое правило отбрасывается. Данный механизм удобен для отладки правил, но должен избегаться в реальной работе, поскольку чудовищно замедляет процесс разбора.
Читать дальше →

28 секретов исключительно продуктивных людей

Reading time7 min
Views22K
image

В этой статье Jeff Haden, расскажет секреты продуктивности от знаменитых авторов, успешных предпринимателей, инвесторов, руководителей и людей творческих профессий.
Читать дальше →

Французский телеканал был взломан после интервью сотрудника на фоне стикеров с паролями

Reading time2 min
Views84K
Вот уже несколько дней развивается история со взломом внутренней сети и аккаунтов в социальных сетях французского телеканала TV5Monde, работа которого на некоторое время была просто парализована в результате деятельности хакеров, причисляющих себя к сторонникам Исламского государства. Были выведены из строя служебные серверы, отвечающие за обработку электронной почты, видеомонтаж, трансляцию сигнала.
Нападение на ресурсы TV5 Monde анонимные взломщики начали в среду вечером около 22:00 по Парижу(/23:00 мск), вскрыв защиту официального сайта телеканала и его страниц в социальных сетях. Ближе к полуночи было прервано и телевещание — канал пропал из эфира, вместо изображения на несколько часов на частотах TV5 Monde был черный экран без звука, изредка переключавшийся на заставку с логотипом канала.
Некоторое время в аккаунте TV5 Monde в Facebook можно было наблюдать фотографии людей в черной одежде и арабских платках с подписью «Киберхалифат» и «Я — ИГ». Среди сообщений были опубликованы угрозы в адрес французских военнослужащих, участвующих в операциях против исламистов в Африке и на Ближнем Востоке.
Как признал генеральный директор компании Ив Биго, в течение нескольких часов специалисты были «не в состоянии передавать сигнал ни по одному из каналов». «Постепенно мы начинаем восстанавливать вещание в ряде регионов, — сообщил он агентству France-Presse. — Наши системы крайне серьезно пострадали, речь идет об атаке невиданной мощности. На полное восстановление уйдут многие часы, если не дни». ТАСС
Чуть позднее стали выяснятся интересные подробности, свидетельствующие о том, что отправной точкой для атаки на TV5Monde могло стать интервью с репортером Дэвидом Делосом, где невольно засветили по крайней мере один пароль компании в социальных сетях. Дело в том, что он был снят на фоне стола сотрудника бюро, который буквально утопал в стикерах с паролями к учетным записям канала в популярных социалках.
Читать дальше →

Tesla Model S: теперь с двумя моторами и батареей на 70 кВт*ч

Reading time1 min
Views19K


Компания Tesla Motors не стоит на месте, стараясь не только создавать новые модели электромобилей, но и совершенствовать существующие. На днях было объявлено о том, что Model S 60 снимается с производства, а на замену этому электрокару приходит Model S 70D. Правда, новая модель на 5 тысяч долларов дороже старой, но и обновлений здесь немало.

К примеру, S60 — это заднеприводной электрокар с одним электромотором мощностью в 385 л.с. и аккумулятором емкостью в 60 кВт*ч. А вот новая модель получила сразу два мотора общей мощностью в 522 л.с. и аккумулятор на 70 кВт*ч. Запас хода при этом вырос с 333 до 384 км. Максимальная скорость при этом составляет 225 км/ч с разгоном до 100 км/ч всего за 5,4 секунды.
Читать дальше →

Теперь проводящие контуры можно печатать на струйном принтере

Reading time1 min
Views6.1K
image

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

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

Полная энергетическая автономия или как выжить с солнечными батареями в глубинке (часть 4. Сделано в России)

Reading time6 min
Views119K


В России есть вся инфраструктура и собственные средства для построения солнечной электростанции в конкретно взятом хозяйстве. Более того, вся необходимая электроника, да и солнечные батареи производятся у нас самостоятельно и все это отлично работает. После экспериментов с ноунеймом, брендовым европейским китаем и прочей техникой, я решил обратиться к российским разработчикам техники для автономки и на себе испытать эти устройства. Первым попал на тест гибридный инвертор МАП HYBRID v.1 24В: 4.5 кВт , а следом за ним пойдет производительный солнечный MPPT-контроллер.



Даёшь свет!

Лекции Технопарка. 3 семестр. Проектирование высоконагруженных систем

Reading time3 min
Views74K


И снова в эфире наша постоянная рубрика «Лекции Технопарка». На этот раз предлагаем вам ознакомиться с материалами курса «Проектирование высоконагруженных систем». Цель курса — получение студентами навыков проектирования высокоэффективных программных систем.
Читать дальше →

Учёные научились готовить персональные вакцины для борьбы с раком

Reading time1 min
Views11K
Микробиологи из вашингтонского университета 2 апреля опубликовали работу, посвящённую успехам, достигнутым на фронте борьбы с раком. Их вакцины, генетически приспособленные к конкретным пациентам, помогли запустить в организме иммунную реакцию на клетки рака кожи.

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

Navigation Drawer в стиле Material Design за 5 минут

Reading time9 min
Views116K
imageВ данной статье я расскажу, как быстро добавить в ваше приложение для Android боковое меню (aka Navigation Drawer) в стиле Material Design. Для этого мы воспользуемся библиотекой, любезно предоставленной Mike Penz.

У вас получится Navigation Drawer, который:

  • Соответствует последним рекомендациям по дизайну (Google Material Design Guidelines);
  • Поддерживает использование нескольких Drawer (можно выдвигать второй справа);
  • Поддерживает использование бейджей;
  • Имеет простой и понятный интерфейс (API);
  • Может выползать как под, так и поверх Status Bar;
  • Позволяет менять иконки, цвета, бейджи во время выполнения;
  • Использует AppCompat support library;
  • Работает, начиная с API 14.

Помимо этого, новички обучатся интеграции сторонних библиотек в свой проект, что крайне полезно, учитывая их грандиозное разнообразие на Github.

Читать дальше →

Компания Festo показала робота-муравья и робота-бабочку

Reading time1 min
Views11K


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

На одном заряде аккумулятора муравей может продержаться около 40 минут. Роботизированное насекомое «общается» с собратьями по беспроводной связи, у каждого муравья есть 3D стереокамера для обнаружения объектов, находящихся вокруг и навигации. Корпус робота создан путем селективного спекания полимера. Электронная часть — это ряд модулей, соединенных между собой.
Читать дальше →

Авторизация через китайские соцсети

Reading time3 min
Views48K
Любой нормальный сайт\приложение нынче позволяет зарегистрироваться, используя аккаунты третьих служб. И если по англоязычным\русскоязычным информации более чем достаточно, то по китайским (в русском сегменте Интернета) — кот наплакал. Между тем, помимо того, что это около 700 млн пользователей интернета, это еще и более 5 млн китайцев, посетивших Россию в 2014 году и около 500 тысяч китайцев, оставшихся в России на временное\постоянное проживание — в первую очередь студентов. Так как интеграция китайцев в местное общество всегда проходит со скрипом, они предпочитают пользоваться программным обеспечением, знакомым с детства — таким, как интернет-мессенджер QQ.

В этой статье я хотел бы осветить процесс интеграции логина через QQ в мобильных приложениях и на веб-сайтах. Это очень просто. Расскажу на примере нашего приложения для платформы Android:


Читать дальше →

Как происходит рендеринг кадра видеоигры

Reading time5 min
Views66K
Deus Ex Human Revolution — это компьютерная игра 2011 года, которая является более успешным продолжением оригинальной Deus Ex, чем Invisible War. Но этот пост не о качестве игры, а о демонстрации её технических принципов. Адриан Курреж провёл несколько часов за реверс-инжинирингом, пытаясь понять с помощью инструмента Renderdoc, как происходит обработка каждого из кадров Human Revolution. Затем Адриан изложил результаты в своём блоге.
Осторожно, трафик

GridFS vs SQL Server vs Local

Reading time5 min
Views6.3K

Для дотошных


В последнее время в среде разработчиков серверных приложений часто возникают споры о том, как лучше управлять фалами и какая технология обеспечивает более быстрые чтение/запись файлов. В сети стали появляться статьи и статейки о сравнительной производительность локальной файловой системы и GridFS. Или о хранении файлов в реляционной базе как BLOB против хранения на жёстком диске в файловой системе. Вот и я решил ввязаться в этот противостояние. Сегодня мы будем сравнивать производительность и накладные расходы MongoDB 2.6.7 x64 GridFS против MS SQL Server Express 2012 v11.0.5058.0 x64 против NTFS. Для эксперимента была использована платформа Windows 7 x64 SP1 на AMD Athlon(tm) II X2 250 Processor 3.00 GHz c 4ГБ ОЗУ 1033 MHz и HDD 600 Gb SATA 6Gb/s Western Digital VelociRaptor 10000rpm 32Mb. После каждого теста компьютер перезапускался, а базы обнулялись. Производительность будем рассматривать на примере файлового сервера на C# под .NET 4.5, код которого прикреплён к статье.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity