Показаны сообщения с ярлыком translation. Показать все сообщения
Показаны сообщения с ярлыком translation. Показать все сообщения

25 мая 2013 г.

Шпаргалка по разработке Objective-C приложений

Вольный... Нет. Очень вольный перевод статьи Стюарта Холла "iOS Development Tips I Would Want If I Was Starting Out Today" (Шпаргалка по iOS разработке, которую я хотел бы иметь, если бы начинал разрабатывать сегодня).

Программирование под iOS становится легче с каждым релизом Xcode. И каждая новая фича увеличивает количество вариантов выбора. 
В мои годы (запах плесени) было гораздо тяжелее! Это так. Но сейчас предъявляют все более высокие требования к качеству. Планка качества постоянно растет. И это хорошо.
И доведись мне начинать свое знакомство с iOS-разработкой сегодня, я бы сильно хотел, чтобы мне кто-то дал почитать этот текст. Надеюсь он кому-то поможет.

Используйте ARC!

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

Тулим блоки где только можно

Блоки похожи на ARC. По крайней мере в том, что блоки — это тоже замечательно. Используя блок ты пишешь меньше кода, и он значительно лучше, чем раньше. Меньше кода == меньше багов. Вот тут - классное введение к использованию блоков (ахтунг - тут и далее много нерусских букв - прим. переводчика). 
NSNotifications и _delegate/@protocol все еще на коне. Но сначала подумайте о блоках, а потом уже — про Акима

Опасносте детектед! Retain Cycles в Блоках

Тут тема разжована. Кратко: retain cycles, это когда два объекта (будь-то блок, таймер или вездесущий self) ретейнят друг друга и не могут со спокойной душой отойти в мир иной и устраивают утечку памяти. С блоками такое легко подхватить.

Потоки? Не, не слышал. Пользуй GCD

"Был у дева головняк. Он решил заюзать thread. Головняк теперь двояк."
GCD облегчает нам жизнь. Он — наш друг. Только не забудьте вернуться в главный поток, если делаете что-то с UI.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
    // Your code
    dispatch_async(dispatch_get_main_queue(), ^(void) {
        // Now you can interact with the UI
    });
});
Хорошее объяснение GCD можно найти хере

Singletons / Shared Objects

В продолжение о GCD. Он помогает забыть про ручное выпиливание синглтона:
    + (MyClass *)sharedClass {
static MyClass *_shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    _shared = [[MyClass alloc] init];
});   
return _shared;
}
Все! Боле ничего не нужно. А зацените, сколько весит NSDateFormatter и его создание при каждом обращении! Хороший повод засунуть его в синглтон.

Story Boards — только для быстрых прототипов

ИМХО, со Story Boards больше геморроя, чем пользы. Но это мое мнение. Многие любят их. Решите сами.

XIBы — только для базовых набросков

У Interface Builder столько "низзя", что проще собрать нужную вьюшку в рантайме. К тому же, мержинг двух версий XIB-файла — тот еще трюк, который обычно никто и не делает. Гораздо проще смержить два сорца.
Можно что-то набросать базовое. Но ровнять все равно лучше в коде.

Держите свой проект упорядоченным

Я подзавязал с Ruby on Rails. Но организация проекта мне понравилась. Я так организую свои проекты в Xcode:
Xcode structure
Чистота — залог здоровья!

Присмотритесь к Open Source

Существует множество бесплатных опенсорсных библиотек и компонент. Github забит выдающимися сорцами, который можно просто кинуть в свой проект и пользовать их. Кроме того есть Cocoa Controls. Там тоже полно вкусняшек.
Некоторые либы я включаю почти в каждый свой проект:
Если вы гуглите какой-то модуль, он скорее всего уже тут есть. Ну, по крайней мере что-то похожее.

Управление зависимостями проекта

Чтобы управляться с набором либ, подключенных к проекту, рекомендую пользовать CocoaPods. Этот инструмент делает amazing job. Прямо как Ruby's gems.
Или можете просто использовать отдельные модули.

Попробуйте полюбить Stack Overflow

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

Элегантная деградация

Зачастую хочется использовать свежие фичи новых версий iOS. Но девайсы со старой версией iOS все еще в ходу, и фишки типа  Tweet Sheets в iOS 5, SKStoreProductViewController & UIActivityViewController в iOS 6 приходится поддерживать и для более взрослых версий.
В этом нам поможет не Бахметьев, а проверка существования класса в рантайме:
if (NSClassFromString(@"SKStoreProductViewController")) {
// Класс существует, значит мы в iOS 6+
    SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
….
}
else {
    // Нет такого класса - значит мы на старом корыте
}

Кастомные шрифты

В прежних версиях iOS (lj 3.2) это была жопа. Поэтому все использовали штатную Helvetica. Но теперь все стало шикарно!
Тутe — краткое описание. Если непонятно как называется шрифт, загляните в Font Book и посмотрите PostScript-имя шрифта.

Локализация должна начинаться до проекта

Локализация реализуется с помощью Xcode очень просто. Особенно, если не использовать xib-файлы. Но легкость локализации проекта в самом начале пропорциональна сложности локализации уже существующего проекта.
Это — замечательный пример локализации приложения под iPhone.

Отслеживайте краши

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

Analyze

Инструмент Product -> Analyze должен стать вашим другом. Статические анализаторы — мощное орудие в борьбе с Хейзенбергом.

Instruments

Product -> Profile билдит приложение и запускает Instruments. Instruments — коллекция инструментов (внезапно) проверки вашего приложения. Во-первых стоит взглянуть на "Time Profiler", который покажет сколько процессорного времени занимает ваше приложение. Если ваша табличка скроллится как растекшееся масло, скорее всего она потреблят слишком много процессорного времени.
Instruments

Отслеживайте обзоры

<без ложной скромности>Баги были, есть и будут. Никуда от них не деться. И в отзывах они будут упомянуты. И будут вести они к плохим обзорам. В том числе от юзверей из стран, про которые вы даже не слышали. Не игнорируйте их. Обрабатывайте и получайте их с помощью AppBot. </без ложной скромности>
Уверен, что забыл кучу полезных советов. Да и не все мои советы будут приняты единогласно. Но буде единая заблудшая душа спасена сим постом, буду считать свою миссию выполненной.

13 дек. 2010 г.

Журналисты должны уяснить, что на самом деле означает слово "Хакер"

На сайтике Geek Juice некий Kole опубликовал заметку "Journalists need to learn what a 'hacker' really is" "Журналисты должны уяснить, что на самом деле означает слово "Хакер"". Ниже - вольный перевод этой заметки. Сумлеваюсь, чтобы она возымела какое-то действие в новостной среде, ибо слово Хакер очень уж красочное и удобное для запугивания обывателя. Избавляться от него журналистам будет влом. Сказать, что одмины сайт плохо настроили - скучно. Никому не интересно. А сказать, что малолетний ХАКЕР взломал коррпоративный сайт СПД Пупырышкин, так это сразу страшно и интересно. И пофиг, что совсем непонятно. Однако заметку перевел.


“The Globe and Mail”, одна из самых уважаемых газет в Торонто, опубликовала сегодня (11/12/2010) статью под заголовком «2010 может войти в историю, как Год Хакера». Статья рассказывает о скандале с WikiLeaks, а так же о том, как группа “хакеров” положила Visa.com, Mastercard.com und Paypal.com

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

Сегодня я бросаю им вызов (вах! все кинулись за бронежилетами :) - прим. переводчика). Раз и навсегда я разъясню значение звания Хакер. А заодно помогу понять, как группа сосунков может положить корпоративный вебсайт несмотря на полное отсутствие основ хакинга.

Итак. Начнем с хакинга 101.

Возможно, вы помните киношку 90-х годов “Хакеры”. Это был веселый экшн про жизни разных хакерил, как они отрывались в свои 20 лет. То, что показано в фильме, считается взломом большинством экспертов (не уверен в переводе - прим. переводчика). Для придания привлекательности процессу хаккинга он сдобрен веселой графикой и анимацией. Однако результат этих действий - получение контроля над компьютерами для всяких грязных делишек.

На самом деле взлом (как одна из ипостасей хаккинга) не терпит суеты. Нужно терпеливо искать пути проникновения в систему. Ежели ты сталкиваешься с какой-то защитой, ты программишь некий утиль, чтобы обойти её. По ходу дела ты пишешь свои утилиты, которые позволят тебе остаться незамеченным в системе.

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

Участие в DDOSе не требует ничего из этого.
DOS-атака заключается, грубо говоря, в пинговании сайта клиентским компьютером снова и снова. Большинство современных сайтов легко справляются с этим. Становится гораздо интереснее, когда этим начинают заниматься тысячи клиентских компов. Тогда это называется DDOS (распределенная атака типа Отказ в Обслуживании). Она может быть реализована по разному. Как вариант, хакеры могут использовать тысячи компьютеров, контроль над которыми они получили в ходе заражения оных вирусАми. Однако чаще всего эта атака выполняется тысячами друзей, одновременно выполняющими DOS (одиночное пингование).

И наконец, что же случилось с Visa.com?

Тысячи объединенных нетожителей начали пинговать Visa.com (Mastercard.com, Paypal.com) одновременно. Они координировали свои действия через Twitter или другой протокол социальных сетей. Все, что нужно было сделать, это скачать программулину, которая была доступна через Twitter, и нажать одну-две кнопки. Скачал, поставил, запустил - и ты уже хакер.

Пожалуйста! Ради высокого звания Технического Журналиста не называйте то, что сделала эта школота, “Хаккингом” (“Взломом” - прим. переводчика). Это больше похоже на манифестацию перед штаб-квартирой большой конторы. Только в формате HD. Забаррикадировали входные двери и боле никто не может войти. Даже разносчик пиццы.