iPhone 4S + iOS 5 = Бэтеригейт?

14 октября они встретились: новая модель iPhone и те, кто о ней мечтал, и заполучить её в свои руки одним из первых. И, как это часто бывает, не обошлось без обид. Оказалось, что iPhone 4S, в выключенном состоянии, стремительно уничтожает заряд батареи. На каждом десятом (примерно) устройстве. Возмущению пострадавших не было предела… Можно было подумать что мир на пороге конца света, Apple и iPhone пришел конец, новый телефон вообще не работает – немедленно разряжаясь (как если бы сборщики умыкнули его аккумулятор для каких-то неведомых нужд). Для коллекционеров обсценной лексики чужих языков наступил звездный час.

Очищенная от эмоций картина происходящего выглядела менее драматичной, но весьма неприятной: на значительной части устройств батарея в пассивном режиме съедала 10% заряда в час, по неизвестной для Apple причине. Упреки в непрофессионализме компании были несправедливы: видимо, в 9 из 10 случаев (точной статистики у меня нет) эффект не наблюдался.

А “антеннагейт” еще не был забыт. И критики компании с упоением предсказывали: сейчас они назовут какую-нибудь абсолютно идиотскую причину проблемы и выпустят iOS 5.0.1 с её исправлением, потом соберут пресс-конференцию, потом…

Это семнадцатая часть серии про iPhone и ему подобных, предыдущие части здесь:

Первая часть: MacWorld Expo 2007;
Вторая часть: Touch-интерфейс приходит на iPod;
Третья часть: iPhone для предприятий, iPhone SDK и App Store;
Четвертая часть: Леопард переселяется в iPhone.
Пятая часть: Следующий шаг: iPhone 3G, iPhone OS 2.0 и много чего еще…;
Шестая часть: iPhone OS 2.1, уже не бета-версия…;
Седьмая часть: iPhone OS 3.0 и поле искажения реальности;
Восьмая часть: iPhone 3GS – на 2 грамма легче, в 2 раза быстрее…;
Девятая часть: iPod touch третьего поколения, и другие iPod’ы…;
Десятая часть: iPhone OS 4…;
Одиннадцатая часть: iPhone 4: телефон с криминальным прошлым…;
Двенадцатая часть: iPhone 4: Антеннагейт, утечки и “белая горячка”;
Тринадцатая часть: Стив Джобс: людям нужны кнопки…;
Четырнадцатая часть: iPod touch 4G;
Пятнадцатая часть: iPhone вырывается на свободу…;
Шестнадцатая часть: Apple Special Event 4 октября 2011 года.

Загадочная “S” в названии iPhone 4S

Существовало много версий расшифровки этой “S”.

Самая взвешенная версия, из маркетингового подразделения занимавшегося iPhone (даже они не знали кто и почему так назвал очередную модель) – у буквы заключенной в квадрат “перевод” был таким же как у аналогичной части названия iPhone 3GS. “Скорость”. В этом был смысл: внешне новый iPhone был почти неотличим от предшественника, превосходил его по производительности (почти в два раза).

Самой популярной в 2011 была версия о причастности к этой букве Siri. Персональный ассистент, с яркой индивидуальностью и с чувством юмора, запросто отвечающая даже на самые дурацкие вопросы (женский голос в версии с американским акцентом провоцировал придурков на интимные темы) – беседы с персональным ассистентом на самые разные темы охотно публиковали сайта зарабатывающие на рекламе.

Версия что это “iPhone для Стива” (числительное 4 в английском созвучно предлогу “for”, и даже используется в сокращениях) точно не соответствует действительности. Название для новой модели было утверждено в июле или августе 2011 года, если не раньше – его утверждал Стив Джобс.

Впрочем, какой бы в эту букву не вкладывали смысл, у каждого из нас есть неотъемлемое право интерпретировать её как нам нравится: 4 октября 2011 года официальное значение этой буквы озвучено не было.

Бэтеригейт

10 ноября 2011 года, как и предсказывали критики (с нетерпением ждавший скандального продолжения), Apple выпустила iOS 5.0.1.

Компании удалось удивить написавших нелицеприятные (не всегда корректные) отзывы на форумах технической поддержки: с ними связывались инженеры Apple, задавали вопросы, некоторых даже пригласили в компанию – для подтверждения факта и выявления причин.

Причина была выявлена. В операционной системе действительно были баги, в том числе и в системе геолокации. Это причина была не единственной, и выявлены были не все. Не все iPhone 4S после установки на них iOS 5.0.1 перестали ускоренно истощать аккумуляторы, но теперь это были сотые доли процента – и на каждое обращение по поводу этих проблем инженеры Apple немедленно обращали внимание.

Люблю иметь дело с Apple когда она в таком настроении. Это совершенно другая Apple.

Кроме неприятностей с батареей, вызвавших громкий общественный резонанс, в iOS 5.0.1 были исправлены и другие – связанные с синхронизацией документов в iCloud, например.

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

Новые ошибки (в том числе и с точно таким же эффектом) были впереди. Что поделаешь – ошибки это самый мощный инструмент познания мира.

Продолжение следует

Предлагаем подписаться на наш канал в «Яндекс.Дзен». Там вы сможете найти эксклюзивные материалы, которых нет на сайте.

Objective-C: управление памятью и сборщики мусора

“Чем меньше кода пишет программист, тем меньше в коде ошибок” – сказал консультант главы Apple Computer Стив Джобс на январском MacWorld Expo 1997 года. Во второй половине нулевых выяснилось, что это правило работает не всегда… В 2006 Крис Латнер, один из руководителей и ключевых разработчиков LLVM, задумался над исправлением недостатков Objective-C. Сначала это было чем-то вроде хобби. Крис обратился к участникам нескольких профильных “почтовых” форумов с вопросом “Что бы вы улучшили в Objective-C?”. Ваш покорный слуга тоже внес свою лепту.

В том году Крис стал начальником одной из групп в отделении средств разработки Apple.

Обсуждение, временами переходящее в ожесточенные встречные бои, продолжалось и после выхода в свет Objective-C 2.0 – но на этом экскурс в историю Objective-C прервем. Про этот язык, и про “Objective-C 3.0”, который без “C” и называется иначе, поговорим в отдельной серии.

Сообщу только один малоизвестный факт: это был не первый Objective-C 2.0 в истории, в начале 90-х, когда NeXT приобрела права на торговый знак и на язык, её специалисты всерьез занялись доработкой и улучшением языка. Заменили “тормозную” среду времени исполнения на собственную (неплохую), посадили язык на GCC C (считавшийся лучшим в то время).

Для удобства, релизы с очередными новшествами обозначали версиями. Были не только 2.0 и, вроде бы, даже 2.1 – кончилось все не то на Objective-C 4.1, не то на 5.3. К 1993 или 1994 году бурное развитие языка прекратилось, и он снова стал “просто Objective-C”.

В 2006 году был объявлен Objective-C 2.0 третьего тысячелетия, в 2007 он пришел на смену просто Objective-C. Будущая iOS была написана, большей частью, на Objective-C 2.0.

В Objective-C 2.0 было много новшеств, но одно из них было одновременно благом и злом. Система управления памятью осталась той же, что и раньше – но теперь приличную часть кода подставлял компилятор…

Это продолжение серии про WWDC 2011, предыдущие части здесь:

Первая часть: WWDC 2011: Apple уходит на облака…;
Вторая часть: WWDC 2011: Про убийство;
Третья часть: iCloud, по другую сторону экрана.

Почему в Objective-C нет сборщика мусора?

Этот вопрос занимал многих. До великой мобильной революции 2008 года Objective-C был экзотикой для большей части программирующего населения. Те, кому все же пришлось с ним познакомиться (мимолетно), его ненавидели. Самой ненавистной особенностью языка было обилие квадратных скобок. Недели через две к ним привыкаешь, это не проблема вообще – но ненависти не прикажешь.

Второй в шкале ненависти была система управления памяти. Строго говоря, она не была частью языка – это был “грех” объектно-ориентированных библиотек, и обладала массой достоинств, но её освоение стояло прочной каменной стеной на пути неофитов. “Почему в Objective-С нет встроенного сборщика мусора?” – спрашивали они, в тысячный раз воюя с непослушными и загадочными retain/release/autorelease – “Ведь существуют десятки его реализаций с открытым исходным кодом?”

Были. Я пробовал штук пять, и слышал еще про столько же – на доведение любого из них до ума ушло бы две или три жизни. Приучить самого себя постоянно (в фоновом режиме) чувствовать систему управления памяти в процессе написания кода было непросто, но в разы проще. Вбивание навыка в подкорку заняло полгода.

Система управления памятью в Objective-C (забудем про библиотеки) была самой лучшей в мире. Не без недостатков, но где их нет? Славное было времечко.

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

Но это моё личное мнение.

Преступление Objective-C 2.0

В улучшенном Objective-C было много новшеств, например инициализация неизменяемых коллекций литералами.

Было еще одно новшество, тоже сберегающее печатающие пальцы и клавиши клавиатур – свойства. Properties, говоря по-русски. Опуская подробности, динамические переменные, работая с которыми требовалось педантично соблюдать кодекс управления памятью, во избежание её утечек или аварийного завершения работы программы, теперь можно было объявить в виде свойства, указав каким способом должен управляться занимаемый этой переменной кусок памяти – и все.

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

К восторгу неофитов, все работало!!! Никаких препятствий, которые нужно преодолевать, не было… казалось бы. На самом деле, система управления памяти была той же самой, и синтаксический сахар слетал с неё, рано или поздно – но всегда. Никто в здравом уме и в трезвой памяти не сядет за штурвал сверхзвукового самолеты, надеясь на автопилот и не умея управлять самолетом вручную.

Это было в тысячи раз хуже, чем управление памятью вручную. Потому что человек уже был уверен в неплохом овладении ремеслом, отважно брался за реальные задачи, и вдруг “бум” – совершенно непонятные неожиданные проблемы, на ровном месте.

Без веры в свое оружие победить невозможно. Простите за банальность.

Пришлось проводить жесткий ликбез. Сколько неофитов (да, я избегаю слова “новичок”), столкнувшись с этим, плюнули и ушли? В честные жестокие времена неофиты знали что перед ними – опасный враг, с которым надо бороться, были начеку и делали значительно меньше глупостей.

Говорят, в первобытные времена в диком лесу взрослый человек запросто справлялся с целыми стаями крупных псовых. Современный человек – увы.

Сборщик мусора

В том же году в Obj-C появился и сборщик мусора. Экспериментальный, на основе самого лучшего сборщика с открытым исходным кодом, доработанный инженерами Apple и самим автором (не за так, естественно) – мне не довелось иметь с ним дело, в iOS его не было. По понятным причинам.

Потом его еще раз доработали, потом еще – и в конце концов наступил 2011 год.

В течение какого-то времени после “закрытия” сборщика мусора, он поддерживался – а через год или два окончательно ушел в небытие.

Не сложилось.

О том, что случилось в 2011 году, читайте в продолжении

Обсудить историю Apple вы можете в нашем Telegram-чате.

WWDC 2011: iCloud, по другую сторону экрана

Для пользователей iCloud – магия. Заколдованные этой магией данные достаточно ввести на одном из устройств, и они моментально появляются на всех устройствах пользователя. С точки зрения разработчика, решившего “заколдовать” свои приложения, освоение iCloud не было непреодолимо сложным – но… iCloud был очень непрост для тех, кто разрабатывал эту технологию. После её презентации скептики, усмехаясь, заявляли что весь этот iCloud можно разработать за две-три недели, не особенно перенапрягаясь. Интересно, почему до июня 2011 года никто этого не сделал?

Допустим, просто не догадались – подобные глупости могли прийти в голову ненормальной Apple и больше никому. Но почему что-то вроде iCloud появилось через несколько лет после того как очередная глупость от Apple вышла в свет и оказалась не такой уж и глупостью?

А заявления некоторых СМИ о том что Apple “изобрела облачные технологии”, к чему Apple не имела никакого отношения, не остались без ответа. Волны испепеляющей критики обрушились… на Apple.

Apple пришлось сделать официальное заявление – эти технологии существовали задолго до iCloud. Более того, iCloud не был первым случаем применения облачных технологий самой Apple.

Примеры? Электронная почта с помощью IMAP, контакты и календари с помощью CalDav, iTunes Store. В App Store и Mac App Store облачные технологии применялись при загрузке приложений на компьютеры пользователей и при их обновлениях.

iCloud разработан инженерами с опытом участия в этих проектах.

А свой iCloud за две-три недели? С него мы и начнем…

Это продолжение серии про WWDC 2011, предыдущие части здесь:
Первая часть: WWDC 2011: Apple уходит на облака…;
Вторая часть: WWDC 2011: Про убийство.

Как создать собственный сервис, аналогичный iCloud?

Как утверждали скептики, элементарно. Хорошо, отвечали им разработчики iCloud, пусть кто-нибудь попробует. Это и в самом деле несложно.

Для этого надо:

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

И еще пара-другая разных “надо”.

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

Но все равно это обойдется дороже и хлопотнее, чем применение iCloud. Тем более что он написан не худшими в мире инженерами, и “просто работает”.

А для встраивания приложения в его инфраструктуру даже не потребуется Mac. Почему на привычные для Apple не слишком умные замечания компания ответила.

Для создания сервиса уровня iCloud требуются возможности Google или Microsoft.

iCloud для прикладных разработчиков

По сравнению с созданием собственного аналога, интегрировать приложение в iCloud было несложно.

Для подключения приложения к сервису iCloud, требовалось:

— Иметь представление об «анатомии» iCloud (прочитать его описание до конца, хотя бы один раз)
— Решить, как именно приложение должно взаимодействовать с iCloud, и продумать взаимодействие с целью уменьшения трафика
— Зарегистрировать в приложении его «владения на облаках»
— Используя iCloud API, реализовать продуманное во втором пункте

Третий пункт делал размещение приложения в Mac App Store обязательным. То есть, ко всем другим заботам добавлялось соответствие требованиям приемщиков этого магазина. Хороший повод еще раз подумать.

Регистрация владений была несложной: в список прав (entitlements) добавлялся ключ или ключи для работы с хранилищами iCloud.

В наши дни процесс регистрации владений упрощен, в 2011 он выполнялся вручную, выглядело это, например, так:


com.apple.developer.ubiquity-container-identifiers

0102030405.chanadu.TheApp.ipad
0102030405.chanadu.TheApp.iphone

com.apple.developer.ubiquity-kvstore-identifier
0102030405.chanadu.TheApp.kvstore

Взаимодействие с сервисом нетривиально, но iCloud API упрощали этот процесс почти до безобразия.

В OS X управление взаимодействием встроили в класс NSDocument, добавив полдюжины новых классов которые брали на себя нетривиальные частности (разрешение конфликтов, поиск, хранение версий). Новые классы использовались еще в нескольких новшествах OS X Lion.

До пятой версии в iOS для работы с документами (например, документами MS Word или Numbers) использовался суррогатный класс – в iOS 5 появился класс UIDocument, почти полная копия “настоящего”, но учитывающий местную специфику.

Теоретически все было несложно, на практике существенно сложней, особенно в первый раз.

Краткий очерк анатомии iCloud

Пользователю (точнее, Apple ID пользователя, их можно заиметь сколько угодно, за так и без особых усилий) выделялось 5 Гигабайт облачной памяти. Увеличение квоты в первые месяцы существования iCloud было невозможно, ни за какие деньги. Платное увеличение квоты было встречено овациями – но об этом когда-нибудь потом.

Данные всех программ пользователя, размещенные в облаках, в сумме, выйти за пределы квоты не могли. Но были кое-какие подробности.

Во-первых, некоторые данные контролируемые программами Apple, размещались вне квоты.

Во-вторых, хранилища были двух типов. Одно хранило документы. Разработчик решал что и как сохранять на облаке – в наставлениях был целый раздел, обучавший его экономному ведению хозяйства. Второе хранило пары “ключ-значение”, вне квоты, но с массой других ограничений. У приложения могло быть только одно хранилище этого типа, по размеру оно не могло превышать 64 К, а пара “ключ-значение” не могла быть больше 4 К.

Зато разрешалось использовать один комплект хранилищ для нескольких программ. Apple приводила пример с вариантами Lite и Pro, которые работали с документами одного типа, и могли быть установлены на разных устройствах пользователя. От себя добавлю еще более распространенный случай: приложение существующее в вариантах для OS X и iOS – это на самом деле, как минимум, два разных приложения.

И напоследок о конфликтах: имеются в виду не конфликты между разработчиками, и даже не их конфликты с менеджерами и руководством компании. Существовала теоретическая, как казалось всем кто сталкивался с iCloud впервые, возможность внесения изменений в тот же документ одновременно с нескольких устройств. Увы, чисто практическая.

Можно было бы рассказать еще много интересных вещей про iCloud, но в серии это не последняя тема.

Продолжение следует

Предлагаем подписаться на наш канал в «Яндекс.Дзен». Там вы сможете найти эксклюзивные материалы, которых нет на сайте.

WWDC 2011: Про убийство и другие события

О том, что Apple убивает файловую систему, ссылаясь на слова самого Джобса, написали самые разные издания. Даже такие авторитетные, как Los Angeles Times. Будто бы в Apple уже давно испытывали к жертве неприязнь, и мечтали убрать её с пути… Вот эти слова Джобса: “Мы давно мечтали убрать с пути пользователя файловую систему, и теперь мы это сделали”. Внимательно прочитайте еще раз, если вы не поняли, зачем я их привел.

Даже если вы не имеете никакого отношения к следственным органам, и не прочитали за свою жизнь ни одного детектива, вы наверняка обратили внимание на некоторые детали. Если вы не возражаете, жертву этого убийства я буду обозначать инициалами. Ф.С., то есть “Файловая Система”.

Стив действительно признался в том, что в Apple хотели “убрать Ф.С. с пути”, но только не со своего пути, а с пути пользователя. В повествовании появляется еще один персонаж, но обозначать его инициалом мы не будем – при всей его важности для создателей программ и компьютеров для их исполнения, как только они его не называли. В том числе и букву П.

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

А сама Ф.С., кстати, через почти десять лет после её убийства, жива и более или менее здорова, в macOS, в iOS, и даже в остальных xxxOS…

Это продолжение серии про WWDC 2011, предыдущие части здесь:

Первая часть: WWDC 2011: Apple уходит на облака….

Она существует!

Среди пользователей iOS, в течение долгих лет, бытовало представление о том что в ней вообще нет никакой файловой системы. Есть только программы, сообщения, и картинки, есть какая-то загадочная песочница, которая как-то образом связана с безопасностью данных – но никаких файлов, директорий (или папок) нет.

И соответственно, нет никакой файловой системы. Где она? Покажите!

Потому что на “батуте” (программа, которая рисует на экране иконки приложений, папки и прочие сущности интерфейса iOS, называется SpingBoard, сама она невидима) есть только программы.

Проекты систем без системы (файловой) время от времени возникают на пространстве Интернета, но все они либо откровенный бред, либо иносказание: файловая система в них все-таки предполагается, но пользователь заботливо изолирован от неё.

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

Это в доисторические времена файловых систем не было, и именно тогда был настоящий кошмар. Файловые системы были избавлением от него, подобно тому как цивилизация избавила нас от бега по кишащим хищниками и змеями джунглям в поисках завтрака. Этот здоровый образ жизни ограничивал её продолжительность годами 30. Хотели бы вы туда вернуться?

Файловая система в iOS есть. Такая же, как в OS X, где большая её часть тоже спрятана от обычного пользователя, для его же блага.

А в iOS абсолютно все файлы и директории спрятаны от пользователя. В поздних версиях появилась программа “Файлы”, потому что совсем без файловой оказалось… даже еще хуже, чем с ними. А где файлы, там появляется и файловая система.

При чем тут iCloud?

Что они (Apple) сделали, чтобы убрать файловую систему с пути пользователя? В OS X Lion в этом великом избавлении участвовал не только iCloud.

Launchpad был едва ли не самым эффективным средством избавления. В связке с Mac App Store, он брал на себя заботы о всем цикле жизни приложения, от приобретения до смерти (удаления), включая обнаружение, запуск и обновления. Это аналог не менее тесной связки SpingBoard и App Store в iOS.

Но Launchpad с Mac App Store упрощают использование программ, а в OS X, о ужас, есть и просто файлы: контакты, сообщения электронной почты, картинки, видео, документы Word или Numbers.

До iCloud во всех (в большинстве) реализаций облачных технологий облако было всего лишь еще одним “диском”, размещавшимся где-то за пределами осязаемого мира. iCloud тоже размещает данные где-то, на одной из серверных ферм Apple (сегодня их десятки, в разных странах мира).

Почти все приложения для iOS (и очень многие приложения для OS X) задолго до iCloud уже использовали, по сути, облачные технологии – перекладывая на сервер часть задач, сохраняя на нем важные данные, используя сервер для координации действий.

Главным в iCloud была технология синхронизации данных между устройствами одного пользователя, автоматической и ничего (кроме логина) не требующая от пользователя. Не всех данных, а определенных данных обслуживаемых конкретными приложениями.

Сообщения электронной почты (для аккаунтов “@me.com”), контакты, приобретенные в iTunes, iBook или App Store приложения, документы iWorks (Pages, Numbers и Keynote), и некоторые другие данные моментально (как правило) моментально появлялись на всех подключенных к аккаунту устройствах.

Без настроек и без освоения чего-либо, легко и непринужденно. Некоторые из них вообще бесплатно, другие, пока объем “платных” данных не превышал 5 Гигабайт, тоже бесплатно.

Со временем появилась возможность увеличения доступного пространства, за ежегодную плату (небольшую).

Для подключения к iCloud применялся Apple ID, идентификатор который привязан к адресу электронной почты, несложно было завести себе альтернативные хранилища в количестве, ограниченном только количеством адресов электронной почты (хоть миллиард!). Это менее удобно, магии становится меньше – зато Гигабайт на облаке может быть больше в разы.

Компьютеры перестали быть основной цифровой жизни (по мнению Apple), и все слабее подходили на роль “цифрового хаба”. То есть, центра цифровой жизни.

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

Это очень многое, но это – все. Параноидальные размышления о контроле Apple за всеми пользователями macOS и iOS параноидальны.

Продолжение следует

Обсудить историю Apple вы можете в нашем Telegram-чате.