Рубрика «Программирование» - 408

Сегментация томографических данных - 1

Зачем это нужно

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

Глубокое обучение с использованием R и mxnet. Часть 1. Основы работы - 1

Привет!

Эта статья является первой частью руководства по приготовления нейронных сетей с использованием библиотеки mxnet на языке R. Источником вдохновения послужила онлайн-книга Deep Learning — The Straight Dope, объема которой достаточно для осознанного использования mxnet на Питоне. Примеры оттуда будут воспроизводиться с поправкой на отсутствие реализации интерфейса Gluon для R. В первой части рассмотрим установку библиотеки и общие принципы работы, а также реализуем простую линейную модель для решения задачи регрессии.Читать полностью »

Небольшое расследование: как YouTube использует WebRTC для стриминга - 1

WebRTC — это JavaScript API в современных браузерах для видеозвонков. А еще для голосовых звонков, шаринга экрана, пробития NAT, раскрытия локального адреса и других интересных штук. В последние пару лет крупные игроки начинают переходить с пропиетарных API и расширений браузеров на WebRTC: с его помощью работает Skype for Web, частично — Hangouts, а теперь и возможности YouTube по броадкасту прямо из браузера. Пока только из хрома и с пятисекундной задержкой — но велика беда начало. Под катом мы предлагаем адаптированный для Хабра перевод детективной истории, где эксперты по WebRTC разбирают код клиентской части YouTube и рассказывают нам что и как сделали разработчики из Гугла.
Читать полностью »

Магнасанти — самый большой и самый ужасный город SimCity - 1

Похоже на набор разноцветных квадратиков без смысла и цели? На самом деле за этой картинкой — злой гений и множество формул.

Это вид на Магнасанти — мегаполис, создатель которого попытался достичь предела численности населения в игре SimCity.

Присмотримся поближе:

Магнасанти — самый большой и самый ужасный город SimCity - 2

Винсент Оскала (Vincent Oscala), 22-летний студент из Филиппин и будущий архитектор, многие годы пытался найти формулу успеха в игре Sim City 3000.
Безумная, казалось бы, затея… однако благодаря огромным усилиям, вложенным в «борьбу» с SimCity, оказались подняты интересные вопросы о городских ландшафтах, в которых мы живем, и о том, в какой ужас они могут превратиться.

Магнасанти — самый большой и самый ужасный город SimCity - 3

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

Магнасанти — самый большой и самый ужасный город SimCity - 4

Переведено в Alconost
Читать полностью »

AI, практический курс. Предисловие - 1

Блог Intel начинает публикацию русского перевода большой серии статей со специализированного ресурса Intel AI Academy. Цель этой публикации — представить разнообразные подходы к искусственному интеллекту и различные способы его применения. Первый пост серии будет в некотором роде предисловием: здесь вы найдете вступительную часть от авторов курса, а также полный список статей на английском и (по мере публикации) на русском языках.
Надеемся, что наш курс окажется для вас полезным.
Читать полностью »

Справа налево. Что такое dir=rtl и как приручить арабский язык - 1

Привет. Мы недавно перевели на арабский язык 2ГИС Онлайн, и хотим поделиться своим опытом адаптации интерфейса под RTL (right-to-left). Это будет актуально и для иврита, и для персидского языка.

Я разделю этот опыт на две статьи — теоретическую и практическую. Сегодня — больше про теорию. Я расскажу, зачем нам понадобилось переворачивать весь интерфейс, что для разработчика интерфейсов значит фраза «сделать арабскую версию» и как справиться с арабским языком, смешанным с английским. Особое внимание уделю алгоритму, по которому строится отображение текста смешанной направленности — unicode bidirectional algorithm.

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

Подоспел очередной выпуск ITренировки — задач, предлагаемых на собеседования в ведущие IT-компании.

КДПВ

В подборку вошли задачи и вопросы от Facebook, которые задают желающим устроиться на должность разработчика. Традиционно, отобраны как простые задачи, так и не очень. Рекомендуем попробовать решить задачи самостоятельно, ссылку на оригинальные решения мы обычно добавляем в секцию ответов.
Читать полностью »

Некоторые SAS процедуры имеют возможность непосредствнно контролировать количество ядер процессора.

Так например в SAS 9.3 это процедуры:

  • SORT
  • MEANS

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

Unity, ECS и все-все-все - 1

Сколько уже было мануалов "Как сделать игру на Unity за 3 часа", "Делаем Counter-Strike за вечер" и т.п.? Низкий порог входа — это, несомненно, главный плюс и минус Unity. Действительно, можно накидать “ассетов”, дописать несколько простых “скриптов”, обмотать синей изолентой и это даже будет как-то работать. Но когда проект обрастает игровыми механиками, сложной логикой поведения, то проблемы при подобном подходе нарастают как снежный ком. Для внедрения новых механик требуется переписывание кода во многих местах, постоянная проверка и переделывание префабов из-за побившихся ссылок на компоненты логики, не говоря уже об оптимизации и тестировании всего этого. Разумеется, архитектуру можно продумать изначально, но на практике это всегда недостижимая цель — дизайн-документ довольно часто меняется, какие-то части выкидываются, добавляются абсолютно новые и никак не связанные со старой логикой поведения. Компоненты в Unity — это шаг в правильном направлении в виде декомпозиции кода на изолированные блоки, но особенности реализации не позволяют достичь необходимой гибкости, а самое главное, производительности. Разработчики придумывают свои фреймворки и велосипеды, но чаще всего останавливаются на ECS (Entity Component System). ECS – одно из решений, продолжающее идею компонентной модели Unity, но придающее ей ещё больше гибкости и сильно упрощающее рефакторинг и дальнейшее расширение приложения новым функционалом без кардинальных изменений в текущем коде.

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

Разработка многопоточного кода — это сложное занятие. Действительно сложное. К счастью для упрощения жизни разработчиков давным-давно придуманы высокоуровневые абстракции, например, task-based parallelism, map-reduce/fork-join, CSP, actors и т.д.

Но когда попадаешь на профильные форумы, где общаются C++ники, то складывается ощущение, что многие просто не в курсе наличия чего-то более простого и удобного, чем std::thread в купе с std::mutex+std::condition_variable. Регулярно встречаются вопросы из категории: «Мне нужно запустить несколько рабочих потоков, в одном делается то-то, во втором то-то, а в третьем то-то. Я их запускаю вот так, а информацией между потоками обмениваюсь вот так. Правильно ли я делаю?»

Очевидно, что такие вопросы задают новички. Но, во-первых, количество неопытной молодежи в разработке софта всегда было велико, и с ростом привлекательности отрасли ИТ это количество только увеличивается. При этом печально, что новички знают про std::thread и std::mutex, но не знают про готовые инструменты, которые могли бы упростить им жизнь (вроде Intel TBB, HPX, QP/C++, Boost.Fiber, FastFlow, CAF, SObjectizer и т.д.).

И, во-вторых, среди ответов на такие вопросы довольно редко встречаются советы «возьмите вот этот готовый инструмент, ваша задача с его помощью решается всего в несколько строчек». Гораздо чаще люди обсуждают низкоуровневые детали самодельных реализаций thread-safe очередей сообщений.

Все это наводит на мысль о том, что имеет смысл на простых примерах показывать, как конкретный фреймворк может помочь в решении даже небольших и, казалось бы, несложных задач, связанных с многопоточностью. Поскольку мы развиваем SObjectizer как раз как инструмент для упрощения разработки многопоточных приложений на C++, то сегодня попробуем показать, как реализованные в SObjectizer-е CSP-шные каналы способны избавить разработчика от части головной боли при написании многопоточного кода.
Читать полностью »


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