Pull to refresh

Qt + OpenCV. Runtime и Widget для CvCapture (устройства видеозахвата)

Reading time 14 min
Views 21K
C++ *Qt *Image processing *

Введение.


Анализируя замечания предыдущего поста (Qt Designer & Runtime Qt библиотеки на службе OpenCV...), пришлось более детально проработать устройство видеозахвата библиотеки OpenCV и методы разделения библиотек runtime и виджетов.
Работа с Qt Designer удобна (я — лентяй), поэтому и возник компонент проектирования интерфейса для CvCapture. После начала работы подтянулось и «научное » тому объяснение — удобно применить нечто похожее, скажем, при проектировании интерфейса свойств или параметров приложения, использующего устройство видеозахвата.
Пока идёт скачивание архива проекта, читайте далее.

Благодарности.


Спасибо всем, кто оставил свои замечания по предыдущему посту.

Библиотека времени выполнения.


Итак, библиотека OpenCV установлена, примеры кода просмотрены. Самое время «прикрутить» устройство видеозахвата к Qt. Да не просто так, а чтобы и изображения получать, меняя устройства динамически. Да, чтобы помнило все пути к изображению, видео. Да, чтобы и номера камер переключало. Да, чтобы и… пост покороче получился.
Библиотека.

Чего проще! Наследуем новый класс библиотеки от QObject, прячем ненужные разработчику поля и методы в приватный класс как элемент коллекции QScopedPointer, монтируем сигналы оповещения и слоты-обработчики.
Читать дальше →
Total votes 33: ↑31 and ↓2 +29
Comments 10

Objective-C Runtime изнутри

Reading time 5 min
Views 34K
Development for iOS *Objective C *
(оригинал — Mike Ash, взято отсюда)

Многие Cocoa разработчики имеют довольно смутное представление об Objective-C Runtime API. Они знают, что он существует где-то там (некоторые не знают даже этого!), что он важен, и Objective-C без него неработоспособен, но обычно этим все знания и ограничиваются.

Сегодня я расскажу о том, как устроен Objective-C на уровне Runtime и о том, как конекретно вы можете это использовать.
Читать дальше →
Total votes 37: ↑32 and ↓5 +27
Comments 13

Переопределение реализации метода. Вдохновленный Java'ой

Reading time 10 min
Views 10K
Development for iOS *Objective C *
Продолжение можно почитать тут habrahabr.ru/post/170265

Вступление


Изучая основы разработки под Android мне пришлось познакомится с таким замечательным языком, как Java. Читая очередной раздел гугловского GetStarted я наткнулся на такую конструкцию:

Button.OnClickListener mTakePicSOnClickListener = 
		new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			
		}
	};

Объявление представителя OnClickListener и переопределения у него метода onClick (поправьте меня Java программисты). Хм, подумал я, а круто бы эту фичу поиметь в Objective-C, а именно возможность переопределять реализацию метода у объекта(конкретного объекта, а не реализацию метода для всех объектов класса) да еще и через блоки в runtime (!) и забыл о этом всем… пока не оказался в полупустом автобусе в дождливую погоду. Времени было много и я решил поразмыслить над тем, что же тут можно сделать.
Зачем это нужно было? Изначально хотелось уметь делать так:

tableView1.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
       NSLog(@"selected row %i", ip.row);
}]
tableView2.delegate = [[NSObject new] override:@selector(tableView:didDeselectRowAtIndexPath:) imp:^void(NSIndexPath* ip){
       NSLog(@"selected row %i", ip.row);
}]

Обратите внимание, что предполагается изменение именно делегата и добавление/предопределение методов у него. А tableView остается оригинальным, без каких либо изменений.

Тем самым местом я чувствовал, что это вполне реализуемо благодаря богатому внутреннему миру Objective-C Runtime.
И да, то самое место меня не подвело.
Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Comments 3

Objective-C Runtime. Теория и практическое применение

Reading time 6 min
Views 60K
Development for iOS *Objective C *
Tutorial
Recovery mode
В данном посте я хочу обратиться к теме, о которой многие начинающие iPhone-разработчики часто имеют смутное представление: Objective-C Runtime. Многие знают, что он существует, но каковы его возможности и как его использовать на практике?
Попробуем разобраться в базовых функциях этой библиотеки. Материал основан на лекциях, которые мы в Coalla используем для обучения сотрудников.
Читать дальше →
Total votes 24: ↑22 and ↓2 +20
Comments 8

Облегчаем жизнь разработчику мобильных игр

Reading time 3 min
Views 8.4K
«Alawar Entertainment» corporate blog Development for iOS *Game development *
Всем привет,

Сделать хорошую игру — это далеко не вся работа. Для того, чтобы получить законченный продукт, который можно будет успешно распространять, необходимо интегрировать в игру разного рода маркетинговые инструменты: трекинг реферальных установок, баннерокрутилки и офферволлы, модули подписки на новостную рассылку и показа других хороших игр, различные партнерские SDK и т.д. и т.п. В этом посте я расскажу, какие инструменты для этого используем в Alawar мы и наши разработчики. Возьмем как пример наши iOS-проекты.
Читать дальше →
Total votes 18: ↑11 and ↓7 +4
Comments 4

Objective-C Runtime в примерах

Reading time 1 min
Views 8.5K
e-legion corporate blog Development for iOS *Development of mobile applications *
Tutorial
Продолжаем выкладывать видео с одиннадцатой встречи Apple Developers Community, которую 27 февраля провели компании e-Legion и Jetbrains.

Следующий докладчик Алексей storoj Сторожев, разработчик e-Legion. Цель доклада — вдохновить разработчиков на более глубокое изучение возможностей Objective-C Runtime, показать способы исследования системы, воодушевить аудиторию на эксперименты.


Презентация

В докладе показаны несколько примеров использования Objective-C Runtime для решения нетипичных задач.
Первый пример — реализация простого KVO своими руками тремя способами. Вторым примером показана полезность исследования приватных классов. Рассказано, как во время работы программы получить информацию о протянутых IBOutlet и IBAction в xib и storyboard. В каждом примере присутствуют особенности реализации, на которых сделан акцент и показаны варианты решения.
Total votes 20: ↑16 and ↓4 +12
Comments 2

Приватные методы для отладки

Reading time 13 min
Views 8.4K
Development for iOS *
Наверняка уже все знают, что у UIView есть полезный метод recursiveDescription.
Вызов которого, вернет строку с описанием всей иерархии вью.

(lldb) po [[self view] recursiveDescription]
<UIView: 0x6a107c0; frame = (0 20; 320 460); autoresize = W+H; layer = […]
   | <UIRoundedRectButton: 0x6a103e0; frame = (124 196; 72 37); opaque = NO; […]
   |    | <UIButtonLabel: 0x6a117b0; frame = (19 8; 34 21); text = 'Test'; […]
   .....

Еще многие знают, что при помощи рантайма, можно получить список переменных/методов/свойств/протоколов/… класса. И обычно для этих целей пишут вспомогательный код. Но оказывается, все уже давно написано сотрудниками Apple. В UIKit.framework реализована категория с именем IvarDescription.

@interface NSObject (IvarDescription)
- (id)_shortMethodDescription;
- (id)_methodDescription;
- (id)__methodDescriptionForClass:(Class)arg1;
- (id)_ivarDescription;
- (id)__ivarDescriptionForClass:(Class)arg1;
@end

Названия метдов говорят за себя. Но давайте посмотрим, что же они возвращают.
Читать дальше →
Total votes 26: ↑20 and ↓6 +14
Comments 1

Как джависты сделали .NET-конференцию

Reading time 6 min
Views 22K
JUG Ru Group corporate blog Java *.NET *
В .NET-мире есть беда с пониманием рантайма. Ведущие разработчики крупных .NET-компаний, безусловно, понимают общие принципы работы GC, JIT-компилятора, аллокатора и других компонент. Но даже они признают, что не знают деталей. Книги Рихтера помогают узнать какие-то базовые вещи, но не более того. Отсутствие внятных технических докладов о CLR (и зарубежных и русскоязычных) от инженеров Microsoft порождает ненужное брожение в умах девелоперов. Закрытость информации порождает нежелание лезть вглубь. Всё равно фиг узнаешь, что там майкрософтовцы понаписали.

Осознав эту проблему, в апреле этого года мы вместе с компанией JetBrains провели конференцию .NEXT 2014 Piter, посвященную техническим аспектам программирования на .NET. Послушав некоторые доклады и вволю наобщавшись с людьми в кулуарах, я и сделал вывод, о котором написал выше. Под катом я расскажу о деталях прошедшей конфы и о том, на какие мысли они меня навели.


Читать дальше →
Total votes 42: ↑37 and ↓5 +32
Comments 64

Age of JIT compiling. Part II. CLR is watching you

Reading time 9 min
Views 13K
Programming *.NET *Compilers *C# *
Продолжая тему JIT-компиляции .NET'a, сегодня мы рассмотрим диспетчеризацию методов у интерфейсов, generics (как классов, так и отдельных методов вместе с реальными сигнатурами); производить отладку релизных сборок с оптимизациями; разберемся с истинным предназначением типа System.__Canon (это не то, что Вы подумали).
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Comments 11

Objective-C что такое на самом деле метод и self? + runtime

Reading time 8 min
Views 22K
Development for iOS *Objective C *Swift *Development for MacOS *
Как self и _cmd оказываются в методе? Как работает dispatch table и категории? Что такое мета-класс? Сколько на самом деле методов у ваших классов в ARC и в MRC? Как работает swizzling?
Интересно? Добро пожаловать под кат!

ВНИМАНИЕ!

Эта статья не рассчитана на начинающих разработчиков… Приношу свои извинения за то, что не рассматриваю многие моменты, которые должен знать Objective-C разработчик.


Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 4

Погружение в ASP.NET 5 Runtime

Reading time 16 min
Views 27K
Website development *.NET *ASP *C# *
Recovery mode
Translation

Вступление от переводчика


Данная статья является переводом ASP.NET 5 — A Deep Dive into the ASP.NET 5 Runtime — введения в архитектуру DNX и построенного на нем ASP.NET 5. Так как оригинальная статья была написана в марте 2015 года, во время, когда ASP.NET 5 был еще в стадии активной разработки (примерно beta 3), многое в ней устарело. Поэтому при переводе вся информация была актуализирована до текущей версии ASP.NET 5 (RC1), также были добавлены ссылки на связанные ресурсы (в основном на docs.asp.net) и исходный код на GitHub (смотрите только в случаях, если вам интересна реализация). Приятного погружения!

.NET Runtime Environment (DNX)


ASP.NET 5 базируется на гибком, кроссплатформенном runtime, который может работать с разными .NET CLR (.NET Core CLR, Mono CLR, .NET Framework CLR). Вы можете запустить ASP.NET 5 используя полный .NET Framework или можете запустить используя новый .NET Core docs, который позволяет вам просто копировать все необходимые библиотеки вместе с приложением в существующее окружение, без изменения чего-либо еще на вашей машине. Используя .NET Core вы также можете запустить ASP.NET 5 кроссплатформенно на Linux docs и Mac OS docs.

Инфраструктура позволяющая запускать и исполнять приложения ASP.NET 5 называется .NET Runtime Environment docs или кратко DNX. DNX предоставляет все что необходимо для работы .NET приложений: host process, CLR hosting логику, обнаружение управляемой Entry Point и т.д.

Логически архитектура DNX имеет пять слоев. Я опишу каждый из этих слоев вместе с их обязанностями.
Изображение взято из статьи DNX-structure wiki
Архитектура ASP.NET 5 и DNX

Читать дальше →
Total votes 25: ↑22 and ↓3 +19
Comments 14

Method Swizzling и Swift: но есть нюанс

Reading time 3 min
Views 26K
Development for iOS *Swift *
Sandbox
Иногда для удобства, иногда для того, чтобы обойти баг в фрэймворке, а иногда просто от безысходности, может понадобиться переопределить поведение некоторого метода класса, созданного кем-то другим. Method Swizzling позволяет подменить метод вашим прямо в runtime, притом оставляя оригинальную имплементацию доступной.

В статье Objective-C Runtime. Теория и практическое применение этот процесс хорошо описан. Но с переходом на Swift появляются некоторые нюансы.
Читать дальше →
Total votes 9: ↑7 and ↓2 +5
Comments 10

Swift улучшаем performSegueWithIdentifier или удобный роутер со сторибордами

Reading time 3 min
Views 11K
Development for iOS *Objective C *Swift *Development for MacOS *
Редкий разработчик под iOS или OS X не использовал сториборды и еще меньше программистов не передавали данные между экранами.
Все мы знаем метод performSegueWithIdentifier и трудности работы с ним.

Начав проект на Swift в один момент мне стало обидно: «Почему мы должны в строго-типизированном языке использовать обертку для передачи данных?»
Через пару минут сформировалось видение решения и в скором времени реализация.

Долго думал, стоит ли писать об этом, поскольку материал крайне небольшой, но эти 50 строк могут вам очень сильно помочь

menuController?.performSegueWithIdentifier(changeItemIdentifier, sender: nil) { segue in
    let controller = segue.destinationViewController as! ChangeMenuItemController
    controller.viewModel.sourceMenuItem = item
}


Таким образом, легко использовать сториборды и роутеры вместе. Устранить разрастание prepareForSegue и увеличить контекст чтения кода. В то же время это не вынуждает отказываться от prepareForSegue при удобных ситуациях.

Разберемся как это работает? Не претендую на уникальность, но мне кажется подход интересным.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 6

Анонс Mobius 2016: конференция по мобильной разработке

Reading time 2 min
Views 3K
JUG Ru Group corporate blog Development for iOS *Development of mobile applications *Development for Android *Mobile applications testing *


В субботу, 4 июня 2016 года, состоится третья конференция Mobius для мобильных разработчиков. Место проведения – Санкт-Петербург, гостиница Park Inn Пулковская.

Мы знатно покопались в фидбеках наших прошлых конференций, а пару недель назад провели открытую встречу, на которой обсудили fail-ы конференции 2015 года и способы превращения их в win-ы 2016 года. В результате стало понятна основная проблема: прошлые Mobius получились не настолько хардкорны, насколько задумывались.

Так чего же ждать от конференции в 2016 году?

Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Comments 2

Что браузеры делают с вашим JavaScript-кодом: об оптимизациях в JS-движках на примере V8

Reading time 7 min
Views 39K
JUG Ru Group corporate blog Website development *JavaScript *Client optimization *
Оптимизация кода начинается не столько с изучения особенностей языка программирования, сколько с понимания схемы работы всей «технологической цепочки», задействованной при создании приложения — от алгоритма программы до компилятора.

Мы поговорили с Вячеславом Егоровым aka mraleph, инженером из Google, компиляторщиком до мозга костей, который работал над JavaScript движком под названием V8, встроенным в Chromium (и, как следствие в Chrome, Android версию браузера, облачную операционную систему Chrome OS) и в менее известный Maxthone.
JavaScript-программистам Вячеслав, скорее всего, известен как автор постов про внутренности V8 и как докладчик, увлеченно показывающий машинный код на конференциях для Web-разработчиков.

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

Читать дальше →
Total votes 61: ↑58 and ↓3 +55
Comments 34

Простой, естественный вопрос: какие бывают библиотеки UWP?

Reading time 5 min
Views 5.9K
Development for Windows Phone *Development for Windows *


Повторное использование кода и совместимость под различные платформы в наше время довольно актуальный вопрос. Кроме того MSFT в последнее время старается угодить разработчикам различных платформ и языков программирования. Именно поэтому, вероятно, возможности универсальной платформы Windows позволяют использовать не один тип библиотек. Под катом о том, какие библиотеки, как и зачем можно использовать в приложениях UWP.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Comments 4

Немного о пустых интерфейсах. Быстрый взгляд изнутри

Reading time 3 min
Views 5.2K
Go *
Всем привет!

Warning: статья не принесет ничего нового для профи, но будет полезна новичкам.

Если вы это читаете, значит я уже мертв вы, как минимум, интересуетесь языком Go. Следовательно, знаете, о такой вещи, как interface{}. А что будет, если я скажу, что любой интерфейс это просто структура? А также, что довольно легко реализовать самому свои интерфейсы? Прошу под кат.
Читать дальше →
Total votes 15: ↑11 and ↓4 +7
Comments 4

Type assertation without allocations

Reading time 5 min
Views 2.8K
Go *
Всем привет. В дополнении к моей предыдущей статье был интересный диалог с kirill_danshin. В конце концов мы это сделали. Встречайте — efaceconv, тулза для go generate, с помощью которой можно приводить типы из interface{} без аллокаций и в ~4 раза быстрее.
Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Comments 8

Немного о Swift runtime или куда пропал NSObject

Reading time 11 min
Views 27K
Development for iOS *Development of mobile applications *Objective C *Swift *
Sandbox
Привет друзья! Я из тех, кому скучно просто дергать за ниточки, торчащие из черной коробки, хочется увидеть все своими глазами, как оно работает под капотом. Мы поговорим с вами про рантайм, да-да рантайм. Для наших опытов рассмотрим старого доброго дедушку Objective C и революционного, но пока еще находящегося в стадии развития, Swift. Нам с вами понадобиться нырнуть практически на самое дно абстракций, которые заботливо придумали программисты Apple. Давайте немного разберемся, зачем вообще понадобилось разрабатывать новый язык. Я слышал много негативных отзывов в самом начале, особенно от уже матерых разработчиков Objective C. Если посмотреть повнимательнее на новый язык Swift, он на мой взгляд значительнее взрослее и серьезнее. Во-первых, он написал на языке С++ в отличии от Си, который лежит в основе Objective C. Я здесь высказываю только свои сугубо личные предубеждения, с которыми можно согласиться, можно и поспорить.
Читать дальше →
Total votes 25: ↑22 and ↓3 +19
Comments 17