Мои мысли и ощущения


Недавно затащил в проект SwiftLint, чтобы код как можно ближе соответствовал Swift Style Guide, ну чтобы в общем был по всем канонам. Куча ворнингов, и довольно часто встречается вот такой:

Line Length Violation: Line should be 120 characters or less: currently 139 characters (line_length)

Вылазит для куска кода, где в wireframe инстанциируется View-слой для VIPER-модуля. Аналогично и для получения ячейки по идентификатору из UICollectionView / UITableView

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

Подробнее




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

Но решение есть в виде команды:

⇧+⌘+⌥+L

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

Подробнее




... или история “плохого” iOS-погроммиста

Статья написана под вдохновением рассказа вот этого мужчины
Скрытая опасность: впереди много букв и элементы подгорания субъективного мнения автора

Вступление

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

Для начала обозначим, что если у вас есть аккаунт в LinkedIn, то вам периодически будет кто-то написывать. Так случилось и со мной. В принципе, это ОК, Вас будут пытаться захерить различные рекрутеры. Это все прекрасно 

Подробнее




Представим, что у нас бывают тяжеловатые задачи, которые на некоторое время заметно блокируют UI приложения. Например, это может быть чтение и десериализация какого-нибудь JSON-файла из Bundle на старте приложения. Для заметного ускорения можно разгрузить главный runloop приложения, а также задействовать для решения задачи другие свободные ядра процессора на смартфоне.

Для этого нам поможет класс-хелпер, чем-то напоминающий Promise, но без возможности зафейлиться, т.е. результат будет возвращаться всегда. Базироваться он будет на DispatchQueue, где в глобальной очереди будет исполнятся сама задача, а результат возвращаться в главную очередь обратно.

Подробнее




Ранее я уже писал, как собирать Qt 4.8 для OS X Sierra и Linux. Осталось уточнить некоторые моменты для Windows. Основное отличие от ранее описанных инструкций таится в том, что мы будем все собирать под Visual Studio 2010 в отличие от GCC. Стоит отметить, что 2010 студия - последняя, которая поддерживается со стороны Qt 4.8.

Подробнее




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

Подробнее




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

Swift Custom TextField

 

Реализовано, конечно, не совсем как в гайдлайне материал дизайна, но задача была сформулирована именно таким образом. В реализации используется CoreGraphics Affine Transform для плавной анимации UILabel для плейсхолдера. Также переопределено само свойство placeholder со своими сеттерами и геттерами для текста нового UILabel. Можно задавать текст прямо из storyboard и, внимание, менять цвет текста плейсхолдера, ведь раньше приходилось хачить в рантайме через attributedPlaceholder. Исходный код лежит на гитхабе.

Подробнее




Если вдруг в гите понадобилось безболезненно переменовать текущую ветку как локально так и удаленно, то помогают такие команды:

git branch -m new_branch
git push origin :old_branch
git push --set-upstream origin new_branch

Подробнее




Для начала нужно установить программку на свой телефон - Packet Capture. Программа  является прокси-сервером, в котором для мониторинг SSL-траффика используется аттака "Man in the Middle". В программу добавляется подставной сертификат, который для клиента считается доверенным. А сам прокси-сервер устанавливает две независимсые SSL-сессии, анализируя дешифрованные данные. А рут не нужен потому, что приложуха использует VPNService, доступный с Android 4.0. С помощью такого прокси можно анализировать работу различных REST API, которые ходят по https протоколу. Например, мне понадобилось починить музыкальное API ВКонтакте для VkAudioSaver.

Packet Capture VK API

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

Подробнее