Как выучить swift и стать ios-разработчиком: пошаговый план от roadmap до собеседований

iPhone XS и iPhone XR

В A12 внутри iPhone XS и iPhone XR поставили 8 нейроядер, к которым добавили машинное обучение в других приложениях кроме Face ID и «умную вычислительную систему».

Эта система распознаёт тип задачи, поступающей в процессор, и решает, на каких блоках её обрабатывать: в Neural Engine, CPU или GPU.

Машинное обучение улучшило:
• Предложения слов в клавиатуре
• Подборку фотографий в Воспоминаниях
• Вывод полезных мест в Картах
• Адаптацию экрана True Tone
• Поиск снимков в Фото.

А ещё Neural Engine второго поколения позволил выполнять машинное обучение в реальном времени.

Это было нужно для портретного режима с одной камерой на iPhone XR и для AR-эффектов камеры. Например, чтобы накладывать сценический свет или отслеживать движение 50-ти мышц лица во время звонка по Face Time.

Производительность: 5 триллионов операций в секунду.

Альбом L’homme Tranquille «Тихий человек»

Только в 1998 году певец выпустил новый альбом со скромным названием L’homme Tranquille («Тихий человек»). Тексты песен написаны как Жан-Пьером Лангом, так и Яном Кеффелеком.

Пьер Башле посвящал композицию Le Voilier Noir известному штурману Эрику Табарли, пропавшему в море в 1998 году.

Впервые за долгое время Башле доверил создание своего альбома кому-то, кроме себя самого: гитаристу Жан-Франсуа Ориселли и своему сыну Квентину Башле. В январе 1999 года он вышел на сцену Олимпии в Париже после написания саундтрека к фильму Жана Беккера Les Enfants du Marais. Спустя два года Пьер Башле выпустил очень интимный новый альбом Une Autre Lumière. К сожалению, работа так и осталась малоизвестной.

Поклонникам пришлось ждать ещё два года, пока певец выпустил новый альбом Bachelet Chante Brel, Tu Ne Nous Quittes Pas, в то время как 25-ю годовщину смерти исполнителя хита Orly празднуют во всём франкоговорящем мире.

В 2004 году автор хитов Vingt Ans и Les Corons отпраздновал свою 30-ю годовщину карьеры серией концертов в Casino de Paris с 19 по 24 октября. Популярный певец знал о том, что с 1974 по 2004 гг. имел очень благосклонных слушателей. Преданные поклонники следовали за ним во время каждого тура и принимали близко к сердцу каждую из его песен.

Модуль создания кода

Начиная с версии 4.0, Xamarin.iOS поддерживает две серверные системы создания кода. Это обычный Mono и модуль на основе оптимизирующего компилятора LLVM. У каждого из них есть преимущества и недостатки.

Обычно в процессе разработки чаще применяется модуль создания кода Mono, который позволяет быстро повторять регулярные процессы. Для сборки выпуска и для развертывания в AppStore лучше переключиться на модуль создания кода LLVM.

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

Вы можете выбрать используемый вариант в параметрах сборки iOS в Visual Studio или Visual Studio для Mac.

От Intel к ARM: последствия перехода

Переход от Intel к процессорам ARM будет иметь и другие последствия. Например, разработчикам придется адаптировать свои MacOS-приложения под новую архитектуру. Однако для трудоемкого процесса Apple представила им переходные решения: существующие программы продолжат работать благодаря эмуляции, пока не будут полностью переписаны. Уже адаптированы первые приложения: Adobe Photoshop, Microsoft Office и собственная программа-видеоредактор Final Cut Pro. 

Кроме того, станет невозможно запускать Windows на Mac с помощью утилиты Bootcamp. С новыми процессорами, помимо самой MacOS, на маках смогут работать только отдельные версии Linux.

И наконец, компьютеры Mac, такие как iMac или Mac Pro, больше нельзя будет апгрейдить своими силами или ремонтировать, потому что другие процессоры больше не будут с ними работать. А продавать свои процессоры отдельно Apple не будет — в общем, самостоятельно собрать мак не получится. 

  • Как появилась раскладка клавиатуры Qwerty и почему она не соответствует алфавиту?
  • Microsoft может выпустить новый смартфон в 2020 году

Загрузка с TrustZone

TrustZoneгостевой

  • включения и выключения ядер процессора (в ARMv8-A это происходит через PSCI — часть ARM Trusted Firmware, а в ARMv7 — по-разному для каждого производителя процессоров);
  • хранения ключей, данных банковских карт и т.п.;
  • хранения ключей полнодискового шифрования;
  • операций с криптографией;
  • отображения DRM-контента.
  1. стартует предзагрузчик в ROM. Он загружает ключи для проверки подписи TEE из ROM;
  2. предзагрузчик загружает в память образ TEE, проверяет подпись. Если проверка прошла успешно, запускается TEE;
  3. TEE настраивает режимы Secure и Non-Secure. Далее TEE загружает основной загрузчик ОС и переходит на него в режиме Non-Secure. Сам TEE остается в режиме Secure и ждет;
  4. загрузчик основной ОС загружает ОС как обычно;
  5. ОС вынуждена время от времени вызывать функции TEE для выполнения некоторых задач.

Зачем Neural Engine в Mac

Огромный кусок главных функций M1 занимает Neural Engine в правом верхнем углу

Apple постепенно переводит компьютеры Mac на свои процессоры. Год назад, в ноябре 2020-го представили чип M1, в октябре 2021-го к ним добавились M1 Pro и M1 Max.

Несмотря на разницу в производительности CPU и GPU, в каждом из них установлен один и тот же NPU из 16 ядер с мощностью 11 триллионов операций в секунду. То есть он дублирует таковой из A14 внутри iPhone 12.

Быстрое выделение людей в Photoshop с помощью машинного обучения

Выделенные нейроядра в Mac ускоряют процессы в работе профессионалов, завязанные на машинном обучении.

Фотографы могут применить их в Pixelmator Pro, который увеличивает разрешение изображения с помощью процессов машинного обучения, которые активирует Neural Engine.

Апскейл изображения в Pixelmator Pro

Видеографы могут использовать функцию умного отслеживания объектов в Final Cut Pro X, чтобы быстрее обрезать видео.

Для разработчиков, учёных и инженеров в их специализированных расчётах и преобразованиях данных, постановки виртуальных экспериментов он тоже будет полезен.

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

Чем Apple может быть интересен уход от процессоров Intel

Экономия средств

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

Сложно определить точную цену, которую платит Apple за процессоры Intel. Аналитики из IHS iSuppli считают, что Intel Core i5, используемые в Microsoft Surface Pro, в 4–5 раз дороже ARM-чипов в Surface RT. Процессоры A6 для iPad, по их мнению, обходятся Apple в 25 $ за штуку, тогда как чипы Intel, использующиеся в Маках, стоят 180–300 $. Идеи, что Apple могла бы заменить 200-долларовые чипы Intel на один или два 25-долларовых и породили слухи о возможности перехода компьютеров Apple на ARM-архитектуру.

Однако такое сравнение не совсем корректно, ведь современные ARM-процессоры значительно уступают в производительности чипам Intel Core i5 даже начального уровня. Между вычислительной мощностью процессоров Intel и самых быстрых ARM-процессоров лежит целая пропасть — это доказал эксперимент Microsoft по портированию Windows для ARM-чипа Surface RT.

Apple по силам создать более производительные ARM-процессоры

Apple активно наращивала вычислительную мощность своих процессоров серии Ax, благодаря финансированию за счет экономии на объемах производства. Каждый год компания продает около 70 миллионов iPad и почти 170 миллионов iPhone.

В этом году Apple могла создать еще более мощные чипы A8, если бы не ограничения, диктуемые толщиной корпуса, ограниченным размером батареи и проблемой теплоотвода в iOS-устройствах. Компания ясно дала понять, что при проектировании А8 главным приоритетом была энергоэффективность, которая так важна для iPad Air 2 (имеющего меньшую батарею, чем у предшественника), чтобы оставить автономность устройства на прежнем уровне.

Mac mini и даже MacBook Air гораздо меньше скованы ограничениями энергоемкости и теплоотвода, что позволило бы Apple увеличить рабочие частоты процессоров, количество ядер или добавить в них другие аппаратные средства, снабдив большими объемами памяти и кэша.

Учитывая все эти обстоятельства, Apple может быть заинтересована даже в создании какого-нибудь нового специфичного Mac, работающего на ARM-процессоре, который по производительности будет не так далек от бюджетных настольных процессоров. Ведь сейчас ARM уже обходит мобильные чипы Intel x86.

До перехода на процессоры Intel, Apple производила около 4 миллионов Маков в год. На данный момент ежегодные объемы производства Mac составляют почти 20 миллионов, примерно такое же количество iPad компания продала за первых четыре квартала. Изначально Apple рассматривала возможность использования в iPad чипов Intel Atom, но отказалась от этой идеи в пользу ARM.

Создание собственной технологии кремниевых ИС

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

Использование единой архитектуры в Маках и iOS-устройствах может значительно упростить применение аппаратных и программных средств, а также перенос API и другого ПО между системами.

Более того, при разработке проприетарных технологий, используемых только в Ах-процессорах, все инвестиции Apple останутся внутри компании и принесут прибыль исключительно ей. Сейчас же, покупая процессоры у Intel, Apple косвенно делает вклад в развитие всей ПК-индустрии. Intel создает новые поколения процессоров, которые доступны для всех, а расходы на их разработку снижаются за счет объемов производства, обеспечиваемых Apple.

Учитывая не самые впечатляющие успехи Intel в мотивации ПК-производителей к созданию ультрабуков, клонов Mac mini и планшетов на Android Atom, потеря такого клиента как Apple будет иметь катастрофические последствия не только для Intel, но и для всех, кто использует процессоры на архитектуре х86.

Брак с Марией Склодовской

Пьер Кюри и Мария Склодовская познакомились в 1894 году благодаря общему другу. Мари была полькой по происхождению и только что получила степень по физике в Сорбонне. После периода дружбы Пьер и Мари поженились в июле 1895 года.

Супруги Кюри после свадьбы продолжили свои исследования и учебу; Пьер работал над свойствами кристаллов, а Мари получила докторскую степень при поддержке мужа.

У Пьера и Мари было две дочери: Ева и Ирен. Ева Кюри была великим писателем, фактически в 1937 году она написала биографию своей матери. В то время Ирэн Кюри была важным исследователем в области физики и химии; Благодаря своей работе она получила Нобелевскую премию по химии в 1935 году.

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

Первые исследования и работы проводились в тяжелых условиях, так как им было сложно получить лабораторное оборудование. Оба должны были посвятить себя преподаванию в университете, чтобы получить необходимые финансовые средства.

Потоковое из консолей

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

Владельцы Mac, у которых есть Xbox One или PlayStation 4, могут на самом деле удаленно передавать свою библиотеку игр со своих консолей на свои Mac. По сравнению с ежемесячными подписками, эти параметры могут быть более экономичными, хотя есть предостережение для пользователей Xbox One, к которым мы обратимся.

PS4 Remote Play

PS4 Remote Play позволяет получить доступ к играм PlayStation на вашем Mac. Изображение через медь против стекла

Хотя технически это не облачный игровой сервис, функция PlayStation PS4 Remote Play заслуживает упоминания для владельцев PS4. Его не следует путать с облачным сервисом PlayStation Now, который не совместим с Mac.

Приложение PS4 Remote Play совершенно бесплатно, и вы можете получить к нему доступ на своем Mac (или iPad) через интернет-соединение со скоростью 15 Мбит / с. По сути, он позволяет вам играть в свою библиотеку игр для PS4 на ходу.

Это хороший вариант для пользователей Mac, которые также являются игроками PlayStation. Но вам на самом деле нужно раскошелиться на каждую купленную игру, а потоковая передача ограничена 1080p при 60 кадрах в секунду.

OneCast для Xbox One

OneCast — это стороннее решение, которое обеспечивает потоковую передачу игр с Xbox на Mac.

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

Это называется OneCast. Платформа, как и официальная потоковая передача для Xbox, позволяет пользователям транслировать свою библиотеку игр для Xbox One прямо на свое устройство Mac. Чтобы использовать его после пробного периода, пользователям нужно будет купить лицензию за 19,99 долларов. Также доступна версия для iOS и iPadOS.

Хотя это работает на удивление хорошо, есть на что обратить внимание. OneCast не является официальным приложением Microsoft или каким-либо образом связано с компанией, поэтому его долгосрочное выживание не может быть гарантировано.

NoteCuts

Данная команда от создателя Cronios, посему похожа на Cronios интерфейсом и принципом работы, однако имеет от Cronios серьёзные отличия. В отличии от Cronios, она проверяет не время и дату, а наличие указания на выполнение определённой команды в фкоторый предварительно сохраняется в Dropbox/Заметки/Evernote. То есть, к примеру, вы можете настроить IFTTT чтобы оно, при срабатывании триггера, добавляло в файл указание на выполнение определённой команды на вашем устройстве, Notecuts проверит файл, найдёт указание и выполнит команду. Всё это произойдёт в фоне. Главные минусы этого способа, как и у Крониоса, повышенное энергопотребление, а также ограниченное время работы.

Полную инструкцию можно найти в самой команде.

Создание notecut

Рассмотрим создание notecut в Dropbox

Нажмите «New Notecut».

Выберите «Local NoteCut».

Введите название (любые символы) для вашего notecut.

Выберите хранилище для сохрание файла, необходимого для работы NoteCuts. Мы рассмотрим способ с Dropbox, однако, если не хотите, чтобы NoteCuts расходовало трафик, можете выбрать Apple Notes (заметки) и отключить синхронизацию заметок в iCloud настройках.

Оставьте следущее поле пустым

Введите путь до папки Dropbox, в которую NoteCuts будет сохранять необходимый файл. Если папка находится в корне, а не в другой папке, пишите просто её название без дополнительных символов.

Notecut создано. Нажав «Back to home», вы увидете его в главном меню.

Запуск и работа NoteCuts

Запустите команду, нажмите «run continuesly» и «ок».

Теперь команда запущена. Давайте разберёмся, как заставить её запустить команду.

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

Откроем текстовый файл NoteCuts. Чтобы запустить любую команды из вашей библеотеки, доптшите в конце этого файла «️ ⟨название команды⟩», где ⟨название команды⟩ — это название, которую вы хотите запустить. Скобки и кавычки писать не надо. Например на изображении снизу показано, как запустить команду с названием «Тест».

Примерно через 30 с после того, как вы прописали команду, она запустится.

Таким образом, прописывая задачу выполнить определённую команду, вы можете запускать любые команды из любой точки земли на устройствах с вашим аккаунтом Dropbox и запущенным NoteCuts. К примеру, на телефоне ребёнка, или на iPad, который лежит дома.

Однако это был лишь фундамент для основного функционала команды

NoteCuts позволяет запускать команды сторонними сервисами по типа Zapier и IFTTT. Главное, чтобы сервис мог добавлять текст в файл Dropbox. Рассмотрим интеграцию с IFTTT.

Создаём новый апплет в IFTTT.

Нажимаем «This» и выбираем любой доступный триггер.

Затем нажмите «that», найдите и выберите «Dropbox».

Нажмите «Append to a text file».

Напишите:

  1. Имя файла notecut в Dropbox
  2. Пропишите запуск нужной команды, как было объяснено выше.
  3. Путь до файла в Dropbox, как было объяснено выше.

Например на скриншоте показано, как настроить запуск команды с именем «Тест», прописав в файл «NoteCuts (Тест)», который находится в по пути «notecuts».

Нажмите «Create action».

Нажмите «Finish».

Интеграция с IFTTT завершена.

Таким образом, можно сделать автоматизацию по геолокации, времени и т. д., которые не будут просить подтверждения перед запуском.

Первый запуск устройства

Заветная коробочка с аппаратом у вас в руках, возникает логичный вопрос: «Как начать пользоваться Айфоном?». Первым делом аккуратно распакуйте устройство, предварительно сняв защитные пленки, которыми он был обернут. После распаковки установите в телефон сим-карту, используя специальную скрепку, выдвигающую лот для симки.

Включаем новый телефон зажатием кнопки блокировки. У iPhone 4, 5 и 5 SE кнопка сверху, у яблочных смартфонов последующих поколений – сбоку справа. После нажатия появится надпись «iPnone», а снизу стрелка. Потянув ее вправо, разблокируете телефон и приступайте к работе.

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

Как начать пользоваться айфоном 5, 5 SE и высше? Сначала скачайте на компьютер программу iTunes или же подключитесь к доступной сети Wi-Fi. Вопросы: «Как пользоваться Айфоном 5?» и «Как пользоваться Айфоном 5S для новичков?» не возникнет у тех, кто уже пользовался телефоном. Поэтому стоит настроить телефон как новый, без синхронизации с данными с прошлого смартфона.

Какие операционные системы подходят для ARM?

В принципе на ARM-устройствах можно запустить любую операционную систему, которая была скомпилирована под данную архитектуру. Поэтому обычные Линукс версии, которые мы уже привыкли наблюдать на своих ПК, просто не подойдут, даже если они легковесны и подходят по другим параметрам. Но в то же время в сети можно найти приличное количество уже «готовых» дистрибутивов Linux для ARM-процессоров. Ярким представителем является известный всем Android, из менее известных, но популярных — Kali Linux.

Кстати, а вы знали, что популярный Android мегакорпорации Google — это всего лишь «операционка» на основе ядра Linux? Притом, что Андроид является самой популярной операционной системой для мобильных телефонов — этот факт, как видите, малоизвестен. Но вообще нужно понимать, что Linux здесь является всего лишь «ядром». А ядро — это всего лишь основной функционал, предполагающий использование устройствами опций аппаратной системы, драйверов, управления, утилиты для командной строки и др. Семейство Linux подразумевает совокупность всех операционных систем, использующих его ядро, но это не есть самостоятельное ядро. Различие всем системам «семейства» придает графическая оболочка, но это совсем другая история. Однако возможность использовать эти ОС без графической оболочки, а только через текстовую командную строку, расширяют сферу их применения. Именно поэтому их можно «заметить» в необычных местах:

  • в сетевом оборудовании;
  • в производственных станках;
  • в начинке самолета или автомобиля;
  • даже в современных стиральных машинах.

Итак, из семейства Linux для ARM можно подобрать конфигурации у следующих дистрибутивов:

  1. Debian. Это одна из самых старых версии Линукса, большое сообщество, много программ, написанных для этой системы, стабильность работы и мн.др. Его можно «найти» практически везде, также и в ARM-процессорах.
  2. Ubuntu. Кто не слышал об Убунту, тот не слышал о Линукс. Считается, что у него более продвинутое интерфейсное оформление, чем у Дебиан, да и вообще он сам более продвинутый. Встречается в ARM-процессорах, но совсем недавно анонсирована Ubuntu Phone — специальная ОС для смартфонов, которая будет призвана конкурировать с Android. Проект анонсирован, но пока должного «движения» не замечено.
  3. Kali, Arch, Gentoo и др., и каждый со своей отличительной особенностью, и каждый используется в ARM-системах.

На самом деле, этот список можно продолжать очень долго, потому что прогресс не стоит на месте, а земля наша славится умельцами. И многие разработчики «подтачивают» тот или иной дистрибутив Linux под ARM-процессор.

Масштабируемые векторные расширения 2

Японская компания Fujitsu создала для своего ядра ARM серию проприетарных расширений под названием SVE, что расшифровывается как Scalable Vector Extensions. По его названию вы, возможно, догадались, что речь идет о наборе инструкций SIMD. Не будем забывать, что в процессорах с ISA ARM в течение многих лет использовались инструкции Neon. Которая будет заменена инструкциями SVE2 в ARMv9.

SVE был создан Fujitsu для своего суперкомпьютера Fugaku, который использует его ядра A64-FX. Намерение? Воспользуйтесь преимуществами параллелизма данных, необходимого для научных вычислений, в которых используются числа с более высокой точностью. Это переводится в гораздо большие блоки SIMD и, следовательно, в большее количество битов.

Поскольку интересы ARM заключаются в том, чтобы вывести свои ядра на рынок высокопроизводительных вычислений и серверов, они решили принять SVE и объединить его с Neon для создания SVE2. Самое большое преимущество, которое SVE добавляет Neon? Эти инструкции не зависят от размера, поэтому нет необходимости иметь версию каждой инструкции для разных размеров, как в случае с инструкциями AVX на x86.

Отношение к окружающим

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

Дружба с Андреем Болконским

Безухов считал своего старшего друга «образцом всех совершенств», особенно поражала его сила воли Болконского. А князю Андрею Пьер был дорог, потому что он считал его одним живым человеком среди всего светского общества. Болконский из добрых побуждений предупреждал своего друга, чтобы он не женился, пока не поймёт, что сделал в жизни всё, что мог, иначе потеряет всякую свободу и все силы истратятся по мелочам. Так же он советовал, чтобы Пьер перестал участвовать в разгульной жизни Анатоля Курагина. Пьер соглашался с князем Андреем. Но он был молодой, бесхарактерный и продолжал общаться с компанией Анатоля и женился на его сестре Элен.

Отношение к Элен

Элен Курагина и Пьер познакомились, когда Безухов приехал в Петербург и стал жить в доме князя Василия Курагина, отца Элен

Когда он после смерти своего отца стал богачом и графом, Элен обратила на него внимание. Молодой человек был восхищён её красотой (хотя понимал, что не любит эту девушку) и как-то незаметно для себя оказался её женихом

Этому способствовал князь Василий, показывающий своими речами и поведением, будто Элен несомненно будет женой Пьера.

Став мужем Элен, Безухов быстро в ней разочаровался, увидев, что эта женщина очень эгоистичная и развратная.

Пьер Безухов и Наташа Ростова

Пьер познакомился с Наташей, когда ей было всего тринадцать лет. Ему очень нравилась эта озорная, весёлая девочка, и он покровительствовал ей. Когда она подросла и пришла на свой первый большой бал, Пьер, видя, что ей очень хочется танцевать первый тур вальса, попросил князя Андрея пригласить её на тур вальса. Заметив, что Наташа и князь Андрей полюбили друг друга, Безухов ещё больше стал ощущать, как он несчастлив в браке с Элен.

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
О гаджетах
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: