Как стать автором
Обновить
12
0

Пользователь

Отправить сообщение

История одного Crash-а, и NSLog'а его лечившего

Время на прочтение11 мин
Количество просмотров30K
Лечу Crash'и NSLog'ами. Недорого. Многолетний опыт. 100% гарантия.

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

Все началось с того, что на одном из относительно больших проектов начало стабильно вываливаться исключение при авторизации пользователя. «Ну и что тут такого? У всех бывает. Проверку на nil забыли поставить или где-то накосячили. „Тоже, мне, большое событие — crash на проекте“, — подумает большая часть программистов. В принципе — абсолютно согласен. Crash — не такое уж и редкое явление в программировании под iPhone, и с ним сталкиваешься по десять раз на день. Но этот был особенным. От него уже начало попахивать „магией“, когда мне сказали про его некоторые параметры и особенности:

  • Воспроизводимость на симуляторе: 100%
  • Воспроизводимость на устройстве: 0%
  • Путь к крэшу (после локализации крэша): ~ 40 секунд
  • Настройки оптимизации при компиляции (-O1,-O2...) не влияют на воспроизводимость
  • XIB'ы в проекте не используются


Да выглядел он довольно безобидно:

// Code
UITextView * textView = [ [UITextView alloc] initWithFrame:CGRectMake(0, 150, _width, _height)];

// Exception
*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', 
    reason: 'CALayer bounds contains NaN: [0 0; nan 200]'


»Ну тут же и ежу понятно, что width — после вычисления — NaN!", — подумал я. Бегло поглядев где и как вычисляется ширина вьюхи, и не найдя ничего особого опасного, я, для утверждения своей догадки, поставил перед созданием вьюхи NSLog. А вдобавок, и точку останова на строке с созданием элемента.
// Source:
NSLog(@"width = %f", _width);

//Output:
width = 200


«Гм», — подумал про себя я, и продолжил выполнение программы после точки останова. И крэша не произошло…

Что было дальше? Читайте во второй части сразу под катом...
Всего голосов 162: ↑157 и ↓5+152
Комментарии50

Как вы выбираете продукты в магазине?

Время на прочтение5 мин
Количество просмотров14K

image
Самая главная формула успеха — знание, как обращаться с людьми. Теодор Рузвельт


В прошлой статье попытался рассказать про основы аналитики ценообразования. Теперь давайте поговорим о более интересных вещах.


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

Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии29

Проблемные личности среди разработчиков

Время на прочтение22 мин
Количество просмотров103K


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

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

Но с такими возможностями часто приходит полное отсутствие уважения к участникам проекта других профессий. Это отсутствие уважения может оказаться настолько глубоким, что порождает в уме разработчика твёрдую уверенность, что он не только самый ценный участник программного проекта, но и необходим компании в целом. К сожалению, хотя лишь малое число разработчиков способны накапливать что-либо напоминающее богатство, многие ведут себя так, словно они следующие Марк Цукерберг, Билл Гейтс или Стив Джобс; хотя это очень далеко от истины. Это приводит к личностным проблемам, которые так же увлекательно наблюдать со стороны, как страшно созерцать в себе.
Читать дальше →
Всего голосов 93: ↑74 и ↓19+55
Комментарии179

Как писать на Objective-C в 2018 году. Часть 1

Время на прочтение10 мин
Количество просмотров27K

Большинство iOS-проектов частично или полностью переходят на Swift. Swift — замечательный язык, и за ним будущее разработки под iOS. Но язык нераздельно связан с инструментарием, а в инструментарии Swift есть недостатки.


В компиляторе Swift по-прежнему находятся баги, которые приводят к его падению или генерации неправильного кода. У Swift нет стабильного ABI. И, что очень важно, проекты на Swift собираются слишком долго.


В связи с этим существующим проектам может быть выгоднее продолжать разработку на Objective-C. А Objective-C уже не тот, что был раньше!


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


Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии49

Как оптимизировать энергопотребление в iOS

Время на прочтение8 мин
Количество просмотров7K

image


Пользователи устройств под управлением iOS часто жалуются, что аккумулятор быстро разряжается. Когда это происходит? Чаще всего при использовании GPS, но есть и другие причины ускоренного разряда батареи. Например, насыщенный обмен через разные виды приемопередатчиков (сотовая связь, bluetooth) или интенсивная отрисовка графики. Некоторые любители яблочных девайсов грешат на батарею, но часто в быстрой разрядке виноваты разработчики приложений. Пользователям важно, чтобы заряда хватало надолго, поэтому при разработке стоит избегать решений, которые повышают энергопотребление. Но зачем разработчикам вообще думать о том, как долго телефон держит заряд? Чем дольше iPhone включен, тем больше шанс, что пользователь откроет приложение и будет им пользоваться.


Я рассмотрю основные энергопотребители и подходы, которые помогают уменьшить энергопотребление девайса.

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии6

Как стать GPU-инженером за час

Время на прочтение20 мин
Количество просмотров25K
Нужно ли iOS-разработчику, не занимающемуся играми, уметь работать с GPU? Нужно ли ему вообще знать о том, что в айфоне есть GPU? Многие успешно работают в iOS-разработке, никогда не задумываясь об этой теме. Но GPU может быть полезен как для 3D-графики, так и для других задач, в ряде случаев оставляя CPU позади.

Когда на конференции Mobius 2017 Moscow Андрей Володин (Prisma AI) рассказал об использовании GPU в iOS, его доклад стал одним из фаворитов конференции, получив высокие оценки зрителей. А теперь на основе этого доклада мы подготовили хабрапост, позволяющий получить всю ту же информацию текстом. Интересно будет даже тем, кто не работает с iOS: доклад начинается с вещей, не привязанных конкретно к этой платформе.
Осторожно, трафик: под катом очень много изображений со слайдов.

Читать дальше →
Всего голосов 47: ↑42 и ↓5+37
Комментарии18

Сила воли: как устроена и как ею управлять?

Время на прочтение10 мин
Количество просмотров61K


Мы бы поленились сделать этот выпуск, если бы не такая наболевшая тема. Представьте, сколько можно достичь, если сделать хотя бы половину из того, что мы откладываем из-за лени. Но правда ли, что достаточно просто побороть себя? А что если сила воли работает совсем не так, как мы привыкли думать? Не поленитесь, посмотрите об этом наш выпуск про силу воли с Ириной Якутенко и вы получите ответы. Если вам очень лень смотреть видео, то почитайте под катом расшифровку этого видео, максимально адаптированную для чтения.
Всего голосов 38: ↑33 и ↓5+28
Комментарии94

Swift и TensorFlow

Время на прочтение8 мин
Количество просмотров13K
Я не люблю читать статьи, сразу иду на GitHub

Заранее прошу прощения за это неудобство.
Все, что будет описано в данной статье тем или иным образом затронет несколько сфер computer science, но погрузиться в каждую отдельную сферу не представляется возможным. Заранее прошу прощения за это неудобство.


Рассказывать о том, что такое машинное обучение и искусственный интеллект, в 2017 году наверное нет необходимости. На эту тему уже написано большое количество как публицистических статей, так и серьезных научных работ. Поэтому предполагается, что читатель уже знает, что это такое. Говоря о машинном обучении, сообщество data scientist и software engineers, как правило подразумевает глубокие нейронные сети, которые приобрели большую популярность по причине своей производительности. На сегодняшний день в мире существует большое количество различных программных решений и комплексов для решения задачи искусственных нейронных сетей: Caffe, TensorFlow, Torch, Theano(rip), cuDNN etc.

Swift


Swift — инновационный, protocol — oriented, open source язык программирования, выращенный в стенах компании Apple Крисом Латнером (недавно покинувшим компанию Apple, после SpaceX и обосновавшимся в Google).
В Apple’s OSs уже были различные библиотеки для работы с матрицами и векторной алгеброй: BLAS, BNNS, DSP, впоследствии объединенные под крышей одной библиотеки Accelerate.
В 2015 появились небольшие решения для реализации математики на основе графической технологии Metal.
В 2016 появился CoreML:
image
CoreML способен импортировать готовую, натренированную модель (CaffeV1, Keras, scikit-learn) и далее предоставить разработчику возможность экспортировать ее в приложение.
То есть, вам необходимо: Собрать модель на другой платформе, на языке Python или C++, используя сторонние фреймворки. Далее обучить ее на стороннем аппаратном решении.
И только после этого вы можете импортировать и работать на языке Swift. На мой взгляд очень нагромождено и сложно.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии8

Физики высказали новый аргумент, почему Вселенная не может быть компьютерной симуляцией: гравитационные аномалии

Время на прочтение5 мин
Количество просмотров72K

Художественное представление искажения пространства-времени в кристалле

Каков шанс, что наша Вселенная представляет собой результат компьютерной симуляции? Эта идея давно обсуждается учёными и специалистами, и они расходятся во мнениях. Ясно, что наши далёкие потомки будут обладать практически неограниченными вычислительными ресурсами и смогут создавать виртуальные миры, подобные нашему. Учитывая большое количество таких миров, остаются небольшие шансы, что именно нам повезло жить в реальном мире, а не в симуляции. Например, Илон Маск оценивает наши шансы в 0,1%, а астрофизик Нил Деграсс Тайсон — в 50%. В общем, вопрос спорный.

Сейчас двое теоретических физиков из Израиля и России выдвинули новый аргумент в пользу того, что наш мир не может быть компьютерной симуляцией. Некоторые свойства пространства-времени слишком сложно рассчитать на компьютере любой производительности.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии294

Blockchain

Время на прочтение9 мин
Количество просмотров121K
Данный текст будет являться новой главой для учебного пособия по защите информации кафедры радиотехники и систем управления МФТИ (ГУ). Полностью учебник доступен на github. На хабре я же планирую выкладывать новые «большие» куски, во-первых, чтобы собрать полезные комментарии и замечания, во-вторых, дать сообществу больше обзорного материала по полезным и интересным темам.

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

Технология blockchain используется для организации журналов транзакций, при этом под транзакцией может пониматься что угодно: финансовая транзакция (перевод между счетами), аудит событий аутентификации и авторизации, записи о выполненных ТО и ТУ автомобилей. При этом событие считается случившимся, если запись о нём включена в журнал.

В таких системах есть три группы действующих лиц:

  • источники событий (транзакций)
  • источники блоков (фиксаторы транзакций)
  • получатели (читатели) блоков и зафиксированных транзакций.

В зависимости от реализации эти группы могут пересекаться. В системах типа BitCoin, например, все участники распределённой системы могут выполнять все три функции. Хотя за создание блоков (фиксацию транзакций) обычно отвечают выделенные вычислительные мощности, а управляющими их участников называют майнерами (см. раздел про децентрализованный blockchain далее).

Основное требование к таким журналам таково:

  • Невозможность модификации журнала: после добавления транзакции в журнал должно быть невозможно её оттуда удалить или изменить.
Читать дальше →
Всего голосов 53: ↑49 и ↓4+45
Комментарии73

Идиомы С++. Static visitor

Время на прочтение5 мин
Количество просмотров26K
Паттерн Visitor предлагает еще один способ отделить алгоритм обработки данных от самих данных. В этой статье я кратко опишу идею, стоящую за оригинальным паттерном, его С++ специфическую вариацию и приведу несколько простых примеров использования.
Читать дальше →
Всего голосов 34: ↑28 и ↓6+22
Комментарии15

Шаблоны проектирования в автоматном программировании

Время на прочтение6 мин
Количество просмотров17K

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

В статье рассматриваются особенности применения шаблонов Visitor/Double Dispatch и State при реализации системы на основе конечного автомата. Кроме того, статью можно рассматривать как продолжение цикла публикаций о шаблонах проектирования на Хабрахабре.

Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии12

Deep Learning, теперь и в OpenCV

Время на прочтение13 мин
Количество просмотров64K


Данная статья является кратким обзором возможностей dnn — модуля OpenCV, предназначенного для работы с нейросетями. Если вам интересно, что это такое, что оно умеет и как быстро работает, добро пожаловать под кат.
Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии26

Постквантовая криптография и закат RSA — реальная угроза или мнимое будущее?

Время на прочтение14 мин
Количество просмотров39K
RSA, эллиптические кривые, квантовый компьютер, изогении… На первый взгляд, эти слова напоминают какие-то заклинания, но все куда проще сложнее, чем кажется!

Необходимость перехода к криптографии, устойчивой к атаке на квантовом компьютере, уже официально анонсирована NIST и NSA, из чего вывод довольно-таки простой: пора вылезать из зоны комфорта!

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

Чтобы разобраться в тонкостях криптографии на эллиптических кривых, проследить новомодные веяния постквантовой криптографии и даже прикоснуться к ней с помощью библиотеки Microsoft SIDH, добро пожаловать под кат, %username%!
Читать дальше →
Всего голосов 39: ↑37 и ↓2+35
Комментарии46

Повесть о настоящем Интернете

Время на прочтение13 мин
Количество просмотров170K
Abstract: Рассказ про устройство Интернета, как «сети сетей» в виде текста для чтения, без двоичной системы счисления и нюансов BGP. Большая часть расказа будет не про процесс общения ноутбука с точкой доступа, а о том, что происходит после того, как данные пройдут «шлюз по умолчанию». Предупреждаю, букв много.

Вступление


Маленький провокативный вброс: ни один из читателей этой статьи к Интернету не подключен. Все подключены к сети своего провайдера, и не более. Подключение к Интернету дорогое, его сложно делать, вам потребуется очень крутое оборудование, несколько договоров с несколькими операторами связи и квалифицированные сотрудники. Простому домашнему пользователю это никак и никогда не светит. Не говоря уже о том, что в Интернете может быть не больше 4 миллиардов подключившихся (а до недавнего времени было даже «не более 65536») [1]. Даже если весь Интернет перейдёт на ipv6, это число не поменяется.

Вот число подключившихся к Интернету [2]:

По оси Y — число в штуках. Штуках, штуках. И вас в этом числе не посчитали.

Почему?

Дело в том, что Internet — это, если переводить буквально, «межсетье». Сеть Сетей. И участниками Интернета являются не пользователи (их компьютеры, планшеты, микроволновки с wifi и т.д.), а сети. Сети и только сети участвуют в работе Интернета. Интернет — это то, что связывает разные сети между друг другом.
Читать дальше →
Всего голосов 179: ↑173 и ↓6+167
Комментарии52

Как компьютерные профи раскалывают хакеров

Время на прочтение9 мин
Количество просмотров60K


В последнее время, на фоне всевозможных вирусов Wanna Cry и Petya, тема кибербезопасности не сходит с первых полос СМИ. В этой связи показалась примечательной заметка найденная на одном из заморских сайтов. Под катом рассказ Роджера Краймса о том, как одни профессионалы доставляют неприятности другим и наоборот. Суть статьи сводится к тому, что если хотите познакомиться с действительно толковым хакером, поговорите со специалистом по защите от кибератак. Эти талантливые люди каждый день работают над тем, чтобы совершать киберпреступления становилось труднее и наименее прибыльно. Кстати, с удивлением узнал, что любимое развлечение специалистов по информационной безопасности, «ломать» компы соседей на профессиональных конференциях.
Читать дальше →
Всего голосов 63: ↑49 и ↓14+35
Комментарии61

Как PVS-Studio может помочь в поиске уязвимостей?

Время на прочтение15 мин
Количество просмотров6.8K


Уязвимость в терминах компьютерной безопасности — недостаток в системе, позволяющий намеренно нарушить её целостность или вызвать неправильную работу. Как показывает практика, даже, казалось бы, незначительный баг может являться серьёзной уязвимостью. Уязвимостей можно избежать, используя различные методики валидации и верификации программного обеспечения, в том числе — статический анализ. О том, как с задачей поиска уязвимостей справляется PVS-Studio, и пойдёт речь.
Читать дальше →
Всего голосов 39: ↑33 и ↓6+27
Комментарии6

Потенциально опасные алгоритмы

Время на прочтение25 мин
Количество просмотров54K

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


Без высшей математики мы бы лишились алгоритма Шора для факторизации целых чисел в квантовых компьютерах, калибровочной теории Янга-Миллса для построения Стандартной модели в физике элементарных частиц, интегрального преобразования Радона для медицинской и геофизической томографии, моделей эпидемиологии, анализов рисков в страховании, моделей стохастического ценообразования финансовых производных, шифрования RSA, дифференциальных уравнений Навье-Стокса для прогнозирования изменений движения жидкостей и всего климата, всех инженерных разработок от теории автоматического управления до методов нахождения оптимальных решений и еще миллиона других вещей, о которых даже не задумываемся.


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


Мы воспринимаем ошибки как нечто чуждое, но что если вокруг них и строится наша жизнь?

Читать дальше →
Всего голосов 94: ↑85 и ↓9+76
Комментарии27

Открытый курс машинного обучения. Тема 1. Первичный анализ данных с Pandas

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров1M


Открытый курс машинного обучения mlcourse.ai сообщества OpenDataScience – это сбалансированный по теории и практике курс, дающий как знания, так и навыки (необходимые, но не достаточные) машинного обучения уровня Junior Data Scientist. Нечасто встретите и подробное описание математики, стоящей за используемыми алгоритмами, и соревнования Kaggle Inclass, и примеры бизнес-применения машинного обучения в одном курсе. С 2017 по 2019 годы Юрий Кашницкий yorko и большая команда ODS проводили живые запуски курса дважды в год – с домашними заданиями, соревнованиями и общим рейтингом учаcтников (имена героев запечатлены тут). Сейчас курс в режиме самостоятельного прохождения.

Читать дальше →
Всего голосов 44: ↑43 и ↓1+42
Комментарии61

Читаем бинарные файлы iOS-приложений

Время на прочтение7 мин
Количество просмотров9.8K

На хабре есть много статей о том, как работает рантайм Swift/Objective-C, но для еще более полного понимания того, что происходит под капотом, полезно залезть на самый низкий уровень и посмотреть, как код iOS приложений укладывается в бинарные файлы. Кроме того, безусловно, под капот приходится залезать при решении реверс-инжиниринговых задач. В этой статье мы обсудим самые простые конструкции Objective-C, а о Swift и более сложных примерах поговорим в последующих статьях.


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




Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии6

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность