Search
Write a publication
Pull to refresh
6
0
Антон Филатов @fannt

User

Send message

Dependency Injection в Objective-C с Магией и Кровью

Reading time5 min
Views16K

Разделения на MVC недостаточно


С каждым днем iOS приложения становятся все более громоздкими, в следствие чего одного MVC становится мало.

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

Очень часто для решения проблемы зависимостей используется Singleton, по сути глобальная переменная, к которой все имеют доступ.
Как часто вам приходилось видеть подобный код?

[[RequestManager sharedInstance] loadResourcesAtPath:@"http://example.com/resources" withDelegate:self];
// или
[[DatabaseManager sharedManager] saveResource:resource];

Этот подход используется во множестве проектов, но он имеет некоторые недостатки:

  • синглтон, который используется внутри тестируемого класса, тяжело заменить на mock-объект
  • по сути синглтон это глобальная переменная
  • с точки зрения SRP объект не должен контролировать свое Singleton'овское поведение

Первую проблему решить довольно просто — нужно использовать свойства:

@interface ViewController : UIViewController

@property (nonatomic, strong) RequestManager *requestManager;

@end

Но этот подход имеет другие минусы — теперь кто-то должен «заполнить» это свойство.
Магия Крови способствует решению этой проблемы.
О том как стать адептом

Автоматическое тестирование iOS приложений

Reading time6 min
Views30K
image
Бывает, наступает момент, когда нужно следить, не развалился ли лишний раз интерфейс мобильного приложения. Чтобы решить эту проблему используются автоматические тесты. Для веб страниц считается общепринятой практикой использовать Selenium Web driver, поэтому для мобильных приложений я искал похожие вещи. И, на счастье, таких нашлось немало, в них используется Selenium WebDriver JSON Wire Protocol.
Читать дальше →

Локализация мобильных приложений. Часть 2

Reading time6 min
Views16K
Если по-честному, то эта статья не должна являться продолжением первой моей статьи о мгновенном изменении языка iOS-приложений. Если первая статья была написана программистом для программистов, то в этой заметке пойдет речь непосредственно о процессе локализации, применимом к любой мобильной (и не очень) платформе.

Но мы меня простим и сделаем вид, что это цикл статей ;).

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

Попробуем ответить на каждый из этих вопросов по отдельности.
Читать далее...

Offline восстановление OSX с раздела Recovery HD

Reading time3 min
Views78K


Предыстория


В свете выхода OS X Mavericks Golden Master решил посмотреть на нового зверя, установив его на морально устаревший iMac7,1. Установка прошла успешно, обычным способом из рабочей системы версии 10.7. Но все работало очень медленно. Этот mac пережил не одно обновление поколений ОС и ни единой установки с «0». Ввиду отсутствия ценных данных — решено было поставить начисто. Я переформатировал раздел из режима восстановления, aka Recovery HD, и вот тут меня ожидал неприятный сюрприз и даже не один. Подробности того, как удалось уговорить, уже не кисоньку из Купертино, без доступа к Интернет и загрузочного устройства
под катом

Процедурный генератор хрущёвок

Reading time9 min
Views111K
Сидел я как-то дома, читал статью про хрущёвки и восторгался гением архитектора. Потом меня отпустило, и я подумал, что унылость и однообразие хрущёвок очень легко можно описать математически. Прямые углы, равные интервалы, минимум украшений — что может быть проще?

На самом деле, у хрущёвок существует несколько десятков модификаций, но некая основа, сущность хрущёвки всё равно прослеживается.

В общем, недолго думая, я сел и написал генератор хрущёвок на C# под Unity3d. Под катом описание работы алгоритма и размышления на тему uv-карт, сабмешей и шейдеров.
Читать дальше →

Тонкости благополучного git-merge

Reading time8 min
Views374K

Вступительное слово


Считается, что «киллер фичей» СКВ Git является легковесное ветвление. Я ощутил это преимущество в полной мере, ведь я перешел на Git с SVN, где ветвление было достаточно дорогим процессом: для создания ветки нужно было скопировать весь рабочий каталог. В Git все проще: создание ветки подразумевает лишь создание нового указателя на определенный коммит в папке .git/refs/heads, который является файлом с 40 байтами текста, хешем коммита.

Основными командами пользовательского уровня для ветвления в Git являются git-branch, git-checkout, git-rebase, git-log и, конечно же, git-merge. Для себя я считаю git-merge зоной наибольшей ответственности, точкой огромной магической энергии и больших возможностей. Но это достаточно сложная команда, и даже достаточно длительный опыт работы с Git порой бывает недостаточным для освоение всех ее тонкостей и умения применить ее наиболее эффективно в какой-либо нестандартной ситуации.

Попробуем же разобраться в тонкостях git-merge и приручить эту великую магию.

Здесь я хочу рассмотреть только случай благополучного слияния, под которым я понимаю слияние без конфликтов. Обработка и разрешение конфликтов — отдельная интересная тема, достойная отдельной статьи. Я очень рекомендую так же ознакомиться со статьей Внутреннее устройство Git: хранение данных и merge, содержащей много важной информации, на которую я опираюсь.
Читать дальше →

А много ли дроны дают молока? Приёмы обратной разработки в звуковом дизайне

Reading time7 min
Views32K
Статья является попыткой разобраться, можно ли передавать опыт обратной разработки в звуковом дизайне средствами выразительности русского языка.

Как-то раз, читая музыкальные форумы, я наткнулся на тему с обсуждением саунд дизайна в фильме Обливион. Людей интересовал процесс создания звуков дронов. Так как ответов по существу, спустя несколько недель, в той теме так и не появилось, а в официальном видео была одна вода, я решил попробовать найти ответ самостоятельно, применив методы обратной разработки.

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


Если вам ещё интересно, прошу под кат. Трафик!

Постутюжная технология производства печатных плат

Reading time5 min
Views127K
image
Последний раз я делал печатную плату, когда ещё не было интернета, лазерных принтеров и другой современной ерунды, зато была клейкая лента, скальпель и куча свободного времени. И вот теперь для меня пришло время вернуться к решению этой задачи.
Теперь, вроде как, всё есть, однако проблема осталась. Всем ведь понятно, чем неудобен заказ печатных плат на специализированном производстве, когда нужно сделать лишь одну штуку, или прототип. Потому и используют ЛУТ, фоторезист, фрезерование, в общем, кто что может. Но ведь хочется без развития специальных навыков получить гарантированный и повторяемый результат. Вот и приступим…
Читать дальше →

iOS 7 и Xamarin

Reading time2 min
Views25K
18 сентября, одновременно с официальным релизом iOS 7, вышел Xamarin.iOS 7.

Xamarin подготовил обширную документацию (на английском), чтобы помочь разобраться с чего начать.

Под катом Мигель рассказывает о самых интересных, на его взгляд, изменениях в iOS 7 API с ссылками на примеры кода.




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

[Перевод] BADLAND – игра на cocos2d-iphone

Reading time3 min
Views20K
BADLAND был запущен 4 апреля 2013 на App Store для iPad, iPhone и iPod touch. С тех пор было продано более 100 000 экземпляров. Сыграйте в эту игру (iTunes link) или посмотрите трейлер, прежде чем продолжить чтение — так вы получите более полную картину об игре, про которую я собираюсь рассказать. BADLAND была создана нашей инди-компанией, называемой Frogmind и состоящей из двух человек. Это наша первая игра на iOS и в ней используется последняя версия cocos2d-iphone 2.1 наряду со множеством других open source библиотек.


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

Практическое руководство по оценке уровня “дружелюбности” медицинских приложений к пользователям

Reading time6 min
Views4.9K
(Оригинальная статья является адаптацией официального документа организации mHIMSS)

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

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

Правильная аналитика в мобильном приложении

Reading time6 min
Views65K
Подавляющее большинство мобильных приложений выходит в свет без интегрированных фреймворков аналитики и без правильной их настройки. Это очень печально, приложение не веб-сайт, где можно воткнуть Google Analytics за 10 минут и собирать статистику.

Я вижу четыре причины для того чтобы задуматься над аналитикой в мобильном приложении ДО его выхода:
  • С первого раза никогда не получается сделать успешное мобильное приложение. После выпуска требуется анализ поведения настоящих пользователей в «бою».
  • Оценка эффективности рекламных кампаний невозможна без аналитики.
  • Две недели занимает выкладка iOs приложения, когда вы спохватитесь придется ждать аналитику около месяца.
  • Данные из прошлого не вернуть.

Под катом набор инструментов для аналитики и рекомендации по их настройке принятые в Touch Instinct и ценные комментарии от LinguaLeo и агентства мобильной рекламы Mobio.


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

Модификация стоковых прошивок для Android. Часть 1

Reading time9 min
Views290K
Здравствуй Хабр!

Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.

Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.

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

В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.
Читать дальше →

Инспектор UIKit в реальном времени (Reveal App)

Reading time2 min
Views11K


Программу сравнивают с Web Inspector для WebKit, если это сравнение вам о чём-нибудь говорит. Если без сравнения, то это инструмент, который позволяет вживую исследовать всю иерархию объектов UIKit в вашем приложении и менять их аттрибуты.
Читать дальше →

Как заставить внешние кнопки iPhone работать на себя

Reading time4 min
Views15K
Здравствуйте, дорогие читатели Хабра!

Уже довольно давно работаю фрилансером и иногда беру пару-тройку простеньких проектов за $100-200 для разгрузки мозга. В этот раз клиент попросил использовать внешние кнопки регулировки громкости в iPhone. Проблема состояла в том, что встроенного API для внешних кнопок в iOS не существует: до недавних пор использование хардверных элементов устройства, отличное от системного поведения, было запрещено. Поэтому различные приложения типа «Camera+» и «Camera Pro» никак не могли донести подобный функционал до пользователя. Однако, по счастливой случайности, в iOS 5 разработчики Apple сами начали использовать подобный подход к интерфейсу: сделать фотографию в системном приложении камеры теперь можно, нажав на клавишу увеличения громкости.

Как реализовать подобное поведение внешних клавиш в своем приложении, смотрите под катом. Исходники прилагаются в конце статьи.
Читать дальше →

Real-time дебаг Android и iOS приложений на Unity

Reading time6 min
Views20K
Когда разработка проекта идёт на компьютере, проблемы просмотра лога не встаёт. Но когда начинаешь разрабатывать на планшете, то всё становится гораздо печальнее. Разработчики движка добавили много разных полезных вещей в профайлер, но к сожалению забыли о простой консоли, чтобы переключившись на её вкладку разработчик мог смотреть сообщения от своей игры и отправлять какие-то консольные команды прямо с компьютера на планшет.
Это упущение мы сейчас и будем исправлять.
Читать дальше →

Начался реверс-инжиниринг процессора PlayStation 1: безумству храбрых поём мы песню!

Reading time2 min
Views96K
Вероятно многие из вас уже слышали о проекте Visual6502 — в котором умельцы отсняли по слоям легендарный процессор 6502 (а затем и 6800), восстановили электрическую схему, и написали визуальный эмулятор процессора на JavaScript. Помимо академической ценности, это также позволяет реализовать абсолютно точный эмулятор любых компьютеров, построенных на этих процессорах.

Однако наши соотечественники решили поднять планку выше, намного выше — и начали проект по восстановлению электрической схемы процессора Playstation 1 (MIPS R3051). Этот процессор — изготовлен по намного более тонким нормам чем 6502 (~800нм против ~5000нм), содержит 3 слоя металлизации (вместо 1), и имеет бОльшую площадь (~250тыс транзисторов против 3.5тыс у 6502) — потому объем работы обещает быть по меньшей мере в 100 раз больше.

Цель проекта — создание абсолютно точного эмулятора Playstation 1.
Читать дальше →

Использование разметки schema.org для логотипов организаций

Reading time1 min
Views33K
Уровень подготовки веб-мастера: любой

Теперь наша система поддерживает разметку schema.org для логотипов организаций. Это позволит вам выбрать логотип, который будет представлять ваш сайт в результатах поиска Google.

С помощью этой разметки вы можете указать системе, где находится ваш логотип. Например, если вы – владелец сайта www.example.com, можно использовать следующую разметку элементов на странице:

<div itemscope itemtype="http://schema.org/Organization">
<a itemprop="url" href="http://www.example.com/">Главная</a>
<img itemprop="logo" src="http://www.example.com/logo.png" />
</div>

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

Тёплый деревянный звук

Reading time1 min
Views39K


Аманда Гассей, которая несколькими месяцами ранее умудрилась распечатать на 3D-принтере работающую грампластинку, продолжает безумствовать. Опираясь на наработки из предыдущей серии экспериментов, теперь она с помощью скриптов на Python и Processing преобразовала файл MP3 в программу для 120-ваттного лазерного резака Epilog Legend 36EXT и смогла вырезать грампластинку из дерева и даже из плотной бумаги. Характеристики несколько хуже, чем у записей, распечатанных на 3D-принтере — 4-5 бит и 4,5 кГц. Как и в прошлый раз, подробное описание эксперимента и все использованные скрипты опубликованы на Instructables.


Под катом - больше фотографий и видео.

Распределённая атака на WordPress сайты

Reading time1 min
Views22K


Компания Hostgator в своём блоге сообщила о массированной атаке на сайты под управлением WordPress. Десятки тысяч зараженных компьютеров по словарю пытаются подобрать пароль к административной панели этого популярнейшего движка.

Другой хостинг-провайдер — CloudFlare считает, что одной из целей атакующих является создание более мощного ботнета из серверов, ресурсы которых впоследствии могут быть использованы для совершения DDoS-атак:
Что интересно в этой атаке — это то, что атакующий использует относительно слабый ботнет из домашних ПК чтобы создать гораздо бОльший и более мощный ботнет для подготовки последующих атак. Эти мощные машины могут причинить гораздо больше вреда с помощью DDoS-атак, т.к. сервера имеют широкие сетевые каналы и способны генерить значительные объемы трафика. Эта тактика похожа на ту, что была использована при создании ботнета itsoknoproblembro/Brobot осенью 2012 года. Это была одна из самых серьезных атак на финансовые институты США.

Как защититься

Information

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