Я бы хотела поговорить о непрерывной интеграции и доставке для мобильных приложений с помощью fastlane. Как мы внедряем CI/CD на все мобильные приложения, как мы к этому шли и что получилось в итоге.
iOS Developer
Еще один домашний медиасервер на базе Docker
Итак решение принято, начнем.
Производительность в iOS — Core Animation, Offscreen Rendering и System Trace. Часть 2
Как избежать проблем с производительностью с помощью пресета Core Animation, что использовать для трассировки участков кода и с помощью каких функций сократить долю вычислительных операций в приложении с 26% до 0.6% — читай во второй части статьи по материалам доклада Люка Пархэма на прошлогодней конференции MBLT DEV. Первая часть статьи доступна здесь.
Под катом не только полезные советы, но и последние early bird билеты на MBLT DEV 2018 — купить их можно только сегодня.
Кроссфункциональность, менеджер зависимостей, мониторинг в iOS и UI-тесты. Как прошел Avito iOS Summer Edition
16 июня мы провели традиционную встречу Avito iOS Summer Edition. Для обсуждения на митапе выбрали четыре темы: UI-тестирование, работа в кроссфункциональных командах, мониторинг в мобильных приложениях, история и внутренности собственного менеджера зависимостей. На случай, если вы не смогли прийти на митап, не следили за трансляцией на YouTube или просто хотите узнать что-то новое — делимся фото, видео, презентациями со встречи и отзывами слушателей.
Blue Shift или оптимизация времени запуска iOS-приложения. Лекция Яндекса
— Долгое время я занимался разработкой Яндекс.Браузера. Собственно, из оптимизации времени старта этого приложения и родился мой доклад.
От «Hello World» до приложения в App Store: советы новичкам
Материал может быть полезен для людей, которые хотели бы развиваться в сфере мобильной разработки на iOS.
Заблуждения Clean Architecture
На первый взгляд, Clean Architecture – довольно простой набор рекомендаций к построению приложений. Но и я, и многие мои коллеги, сильные разработчики, осознали эту архитектуру не сразу. А в последнее время в чатах и интернете я вижу всё больше ошибочных представлений, связанных с ней. Этой статьёй я хочу помочь сообществу лучше понять Clean Architecture и избавиться от распространенных заблуждений.
Построение минимальных выпуклых оболочек
Проведя небольшое научное исследование (проще говоря, выполнив поиск на сайте), обнаружил, что на хабре имеется всего две статьи с тегом вычислительная геометрия, причем одна из них оказалась моей. Т.к. в последнее время я несколько заинтересовался этой тематикой, то решил продолжить тему алгоритмической геометрии рассмотрением задачи построения так называемых минимальных выпуклых оболочек. Хотя рисунок справа и дает проницательному хаброчитателю исчерпывающее объяснение того, что это такое, тем не менее под катом будут даны чуть более формальные определения и описаны два классических алгоритма построения минимальных выпуклых оболочек.
До чего доводит идея (Objective-C) — target-action на блоках и много рантайма
Есть готовые решения, как к примеру BlocksKit и другие библиотеки, однако их решение заключается в сохранении блока, установкой таргета и вызова блока из указанного селектора.
Зачем тогда нужна эта статья?
Я захотел создать способ генерации селектора, по которому будет вызван блок. Что здесь сложного, скажете вы? imp_implementationWithBlock + class_addMethod и дело закрыто. Но при этом подходе есть одно серьезное требование, это первый аргумент блока — владелец метода.
Как обойти это требование и сделать такое?
[button addTarget:self action:[self ax_lambda:^(UIButton *sender, UIEvent *event){
NSLog(@"click on button %@, event = %@", sender, event);
}] forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:[self ax_lambda:^{
NSLog(@"click");
}] forControlEvents:UIControlEventTouchUpInside];
Или даже вот так
__block NSInteger sum = 0;
[self performSelector:[self ax_lambda:^(NSNumber *argA, NSNumber *argB) {
sum = [argA integerValue] + [argB integerValue];
}] withObject:@(2) withObject:@(3)];
//sum — 5
SEL selSum = [self ax_lambda:^NSInteger(NSInteger argA, NSInteger argB){
return argA + argB;
}];
NSInteger(*funcSum)(id, SEL, NSInteger, NSInteger) = (NSInteger(*)(id, SEL, NSInteger, NSInteger))objc_msgSend;
NSInteger sum2 = funcSum(self, selSum, 2, 3);
//sum2 — 5
Реализация оказалась настолько интересной, что я решил написать об этом.
Quad-tree визуализация в реальном времени на Shader Model 2.0
Пролог
Доброго времени суток! Однажды ко мне на работу пришёл друг, и я ему показал свой свеженаписанный шейдер, на тот момент это была первый серьёзный опыт с ними. Данная микропрограмма преобразовывала изображение с камеры в изображение вязаной кофты.
iOS Инструменты разработчика
Вступление
Всем привет, меня зовут Григорий, последние 5 лет занимался программированием под iOS. Сейчас решил сменить сферу деятельности и ударился в веб, но чтобы добро не пропадало, хочу поделиться с сообществом своими наработками, накопившимися за это время. Библиотеки выложены на GitHub и добавлены в CocoaPods. Инструкции по установке и использованию вы сможете найти по ссылкам на GitHub, здесь же будет краткое описание.
Минимальная поддерживаемая версия — iOS 6.0.
Передача проекта от дизайнеров iOS разработчикам
В настоящее время департамент мобильной разработки Rambler&Co активно расширяется, в том числе и в плане iOS-разработчиков и UX дизайнеров. Большое количество людей и проектов, ведущихся ими, усложняет и без того непростой процесс передачи дизайна разработчикам. Всем, так или иначе связанным с мобильной разработкой, знакомы проблемы и разногласия, возникающие на стыке интересов программиста и дизайнера — начиная тем, в каких единицах измерять расстояния, и заканчивая тем, кто должен нарезать элементы экранов в различных разрешениях. Чтобы окончательно решить проблему в рамках нашей компании, мы решили подготовить подробные гайдлайны по этому взаимодействию.
Перспективные матрицы в графическом API или дьявол прячется в деталях
Это не решение проблемы! Давайте разбираться вместе!
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 2 из 6
Содержание курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Улучшение кода
Official translation (with a bit of polishing) is available here.
Update:
Внимание, статья 4в даёт новую, более простую версию растеризатора.
Давайте знакомиться, это я.
То есть, модель моей башки, отрендеренная в программе, которую мы сделаем за ближайшие час-два.
В прошлый раз мы нарисовали проволочную сетку трёхмерной модели, в этот раз мы зальём полигоны. Точнее, треугольники, так как OpenGL практически любой полигон триангулирует, поэтому ни к чему разбирать сложный случай. Напоминаю, что этот цикл статей создан для самостоятельного программирования. Время, которое я здесь привожу — это не время чтения моего кода. Это время написания вашего кода с нуля. Мой код здесь только для того, чтобы сравнить ваш (рабочий) код с моим. Я совсем не являюсь хорошим программистом, поэтому ваш код может быть существенно лучше моего. Любая критика приветствуется, любым вопросам рад.
Пожалуйста, если вы следуете этому туториалу и пишете свой код, выкладывайте его на github.com/code.google.com и им подобные и давайте ссылки в комментариях! Это может хорошо помочь как и вам (другие люди могут чего посоветовать), так и будущим читателям.
Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6
Содержание курса
- Статья 1: алгоритм Брезенхэма
- Статья 2: растеризация треугольника + отсечение задних граней
- Статья 3: Удаление невидимых поверхностей: z-буфер
- Статья 4: Необходимая геометрия: фестиваль матриц
- Статья 5: Пишем шейдеры под нашу библиотеку
- Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Улучшение кода
Official translation (with a bit of polishing) is available here.
Постановка задачи
Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.
Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:
Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Информация
- В рейтинге
- Не участвует
- Откуда
- Praha, Hlavni Mesto Praha, Чехия
- Зарегистрирован
- Активность