[Из песочницы] Типичные ошибки начинающих работать с изображениями

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

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

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

Читать дальше →
[Из песочницы] Типичные ошибки начинающих работать с изображениями
Source: habrahabr

[Из песочницы] Сериализация данных: тест производительности и описание применения

Сериализация

Сериализация (Serialize, в последующем «сохранение») – это процесс сохранения данных объекта во внешнем хранилище. Эта операция работает в паре с обратной – восстановлением данных, называемой десереализацией (Deserealize, в последующем «восстановление»).

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

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

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

Но, помимо работы с элементарными типами, в Java существует несколько разных типов готовых механизмов для сохранения данных классов и множество библиотек, реализующих работу с одними и теми же форматами, отличающихся друг от друга производительностью, объемом и предоставляемыми возможностями.

Ниже будут рассмотрены типовые способы сохранения данных: встроенные в стандартную библиотеку Java, а так же сохранение в формате XML и JSON.

Читать дальше →
[Из песочницы] Сериализация данных: тест производительности и описание применения
Source: habrahabr

Обработка препроцессорных директив в Objective-C

Язык программирования с препроцессорными директивами сложен для обработки, поскольку в этом случае необходимо вычислять значения директив, вырезать ненужные фрагменты некомпилируемого кода, а затем производить парсинг очищенного кода. Обработка директив может осуществляться также во время парсинга обычного кода. Данная статья подробно описывает оба подхода применительно к языку Objective-C, а также раскрывает их достоинства и недостатки. Эти подходы существуют не только в теории, но уже реализованы и используются на практике в таких веб-сервисах, как Swiftify и Codebeat.


Swiftify — веб-сервис для преобразования исходников на Objective-C в Swift. На данный момент сервис поддерживает обработку как одиночных файлов, так и целых проектов. Таким образом, он может сэкономить время разработчикам, желающим освоить новый язык от Apple.


Codebeat — автоматизированная система для подсчета метрик кода и проведения анализа для различных языков программирования, в том числе и Objective-C.

Читать дальше →
Обработка препроцессорных директив в Objective-C
Source: habrahabr

Энтузиаст нашёл на старом компьютере исходный код игры Turok


На YouTube-канале винтажных компьютерных игр SiliconClassics энтузиаст по имени Аарон опубликовал видео с замечательной находкой. Ему удалось найти старый компьютер, видимо, принадлежавший одному из разработчиков популярной в 90-е игры Turok: Dinosaur Hunter. На компьютере оказались исходные коды этой игры для приставки Nintendo 64.
Читать дальше →
Энтузиаст нашёл на старом компьютере исходный код игры Turok
Source: geektimes

Пост №2952350

Автор: raptor

Девушка против пожарных 1:0 Принципиальная девушка на внедорожнике Lexus отказался пропустить пожарные расчеты к месту пожара в Петербурге на улице Оптиков. Дама пыталась выехать со двора и перекрыла подъезд к дому, где произошел пожар (позже выяснилось, что горели вещи на лестничной клетке). По словам очевидцев, барышня требовала, чтобы ей дали выехать, а сдавать назад чтобы пропустить машины МЧС и «скорую» отказывалась, аргументируя это тем, что «это не мой дом, мне пофиг».В результате пожарным пришлось оставить машины и разворачивать рукава через весь двор. Впрочем, в этот раз пожар ликвидировали быстро, никто не пострадал. А весь Рунет теперь гудит и решает, как впредь поступать с такими девушками, а то положенный за подобные действия штраф в 500 рублей ($8) лексусоводок не пугает. Развернуть { «@context»: «http://schema.org», «@type»: «BlogPosting», «mainEntityOfPage»:{ «@type»:»WebPage», «@id»:»/post/2952350″ }, «headline»: «Девушка против пожарных 1:0 / пожар :: девушка :: Петербург :: lexus :: МЧС :: не мое не жалко :: тп», «image»: { «@type»: «ImageObject», «url»: «http://img0.joyreactor.cc/pics/post/full/%D0%BF%D0%BE%D0%B6%D0%B0%D1%80-%D0%B4%D0%B5%D0%B2%D1%83%D1%88%D0%BA%D0%B0-lexus-%D0%BD%D0%B5-%D0%BC%D0%BE%D0%B5-%D0%BD%D0%B5-%D0%B6%D0%B0%D0%BB%D0%BA%D0%BE-3605474.jpeg», «height»: 373, «width»: 720 }, «datePublished»: «2017-01-16T12:20:03+03:00», «dateModified»: «2017-01-16T12:20:03+03:00», «author»: { «@type»: «Person», «name»: «raptor» }, «publisher»: { «@type»: «Organization», «name»: «JoyReactor.cc», «logo»: { «@type»: «ImageObject», «url»: «http://joyreactor.cc/images/joyreactor_ie6.png», «width»: 207, «height»: 54 } }, «description»: «Принципиальная девушка на внедорожнике Lexus отказался пропустить пожарные расчеты к месту пожара в Петербурге на улице Оптиков. Дама пыталась выехать со двора и перекрыла подъезд к дому, где произошел пожар (позже выяснилось, что горели вещи на лестничной клетке). По словам очевидцев, барышня требо» }
Комментировать 
Пост №2952350
Source: Joyreactor

Волшебные фонари: 200-летние проекторы

Все мы ходим в кино, а в детстве смотрели диафильмы на стене. Почти у всех есть проекторы в офисе, у некоторых — дома, встроенные в планшет или в качестве дополнения к смартфону. В корпоративную культуру прочно засела демонстрация слайдов, без которых выступления и презентации проходят крайне редко. А с чего всё началось? С волшебного фонаря, которым можно было пугать верующих, развлекать народ на ярмарках и проводить лекции для студентов XVII века.

image
Читать дальше →
Волшебные фонари: 200-летние проекторы
Source: geektimes

Пост №2952346

Автор: sashkauskas

ссылка на гифкуРазвернуть { «@context»: «http://schema.org», «@type»: «BlogPosting», «mainEntityOfPage»:{ «@type»:»WebPage», «@id»:»/post/2952346″ }, «headline»: «крыша :: гиф анимация (гифки — ПРИКОЛЬНЫЕ gif анимашки)», «image»: { «@type»: «ImageObject», «url»: «http://img1.joyreactor.cc/pics/post/full/%D0%B3%D0%B8%D1%84%D0%BA%D0%B8-%D0%BA%D1%80%D1%8B%D1%88%D0%B0-3605463.gif», «height»: 337, «width»: 600 }, «datePublished»: «2017-01-16T12:16:56+03:00», «dateModified»: «2017-01-16T12:16:56+03:00», «author»: { «@type»: «Person», «name»: «sashkauskas» }, «publisher»: { «@type»: «Organization», «name»: «JoyReactor.cc», «logo»: { «@type»: «ImageObject», «url»: «http://joyreactor.cc/images/joyreactor_ie6.png», «width»: 207, «height»: 54 } }, «description»: «» }
Комментировать 
Пост №2952346
Source: Joyreactor

Пост №2952343

Автор: sl33pyl1nx

Когда хочешь поучаствовать в сраче, но уже настолько жирный, что руки не дотягиваются до клавы Развернуть { «@context»: «http://schema.org», «@type»: «BlogPosting», «mainEntityOfPage»:{ «@type»:»WebPage», «@id»:»/post/2952343″ }, «headline»: «Когда хочешь поучаствовать в сраче, но уже настолько жирный, что руки не дотягиваются до клавы / Мару (maru) :: чипсы :: реактор :: кола :: жирнота :: котэ (прикольные картинки с кошками)», «image»: { «@type»: «ImageObject», «url»: «http://img1.joyreactor.cc/pics/post/full/%D1%80%D0%B5%D0%B0%D0%BA%D1%82%D0%BE%D1%80-%D1%87%D0%B8%D0%BF%D1%81%D1%8B-%D0%BA%D0%BE%D0%BB%D0%B0-%D0%BA%D0%BE%D1%82%D1%8D-3605459.jpeg», «height»: 360, «width»: 480 }, «datePublished»: «2017-01-16T12:14:32+03:00», «dateModified»: «2017-01-16T12:14:32+03:00», «author»: { «@type»: «Person», «name»: «sl33pyl1nx» }, «publisher»: { «@type»: «Organization», «name»: «JoyReactor.cc», «logo»: { «@type»: «ImageObject», «url»: «http://joyreactor.cc/images/joyreactor_ie6.png», «width»: 207, «height»: 54 } }, «description»: «» }
Комментировать 
Пост №2952343
Source: Joyreactor

Пост №2952340

Автор: Тень Петросян

инфа для стеснительных аноновРазвернуть { «@context»: «http://schema.org», «@type»: «BlogPosting», «mainEntityOfPage»:{ «@type»:»WebPage», «@id»:»/post/2952340″ }, «headline»: «инфа для стеснительных анонов / Тайланд :: мисс кастомер сервис», «image»: { «@type»: «ImageObject», «url»: «http://img1.joyreactor.cc/pics/post/full/%D0%A2%D0%B0%D0%B9%D0%BB%D0%B0%D0%BD%D0%B4-%D0%BC%D0%B8%D1%81%D1%81-%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B5%D1%80-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81-3605455.jpeg», «height»: 2048, «width»: 1536 }, «datePublished»: «2017-01-16T12:09:10+03:00», «dateModified»: «2017-01-16T12:09:10+03:00», «author»: { «@type»: «Person», «name»: «Тень Петросян» }, «publisher»: { «@type»: «Organization», «name»: «JoyReactor.cc», «logo»: { «@type»: «ImageObject», «url»: «http://joyreactor.cc/images/joyreactor_ie6.png», «width»: 207, «height»: 54 } }, «description»: «» }
Комментировать 
Пост №2952340
Source: Joyreactor

Тестирование с базой данных в .NET

Обычным подходом в .NET к тестированию приложений работающих с базой данных является внедрение зависимостей (Dependency Injection). Предлагается отделить код работающий с базой, от основной логики путем создания абстракции, которую в дальнейшем можно подменить в тестах. Это очень мощный и гибкий подход, который тем не менее имеет некоторые недостатки — увеличение сложности, разделение логики, взрывной рост количества типов. Подробнее в предыдущей статье Что-то не то с тестированием в .NET (Java и т.д.) или в Wiki/Dependency Injection.

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

Читать дальше →
Тестирование с базой данных в .NET
Source: habrahabr