Pull to refresh
7
0
Роман Гладких @RomanGL

iOS Developer

Send message

На пути к «10x инженеру»: шорткаты, сниппеты, шаблоны

Reading time15 min
Views14K
Мы разобрались, как избежать рутины с помощью шорткатов для навигации, редактирования и отладки, чем могут помочь кастомные сниппеты и как прокачать файловые шаблоны. Описали это в «методичке» по командам в Xcode. Добавляйте в закладки, чтобы посмотреть при случае (а навигация в статье поможет быстро найти то, что нужно).


Читать дальше →
Total votes 19: ↑16 and ↓3+13
Comments3

Как приручить Charles Proxy?

Reading time10 min
Views334K
Привет! Многие из тех, кто приходит к нам на собеседование на должность тестировщика, с гордостью заверяют, что они могут пользоваться Charles Proxy. Но когда погружаешься в техническую часть, то становится очевидно, что кандидат только слышал об этом инструменте. Давайте уже наконец скорее приручим эту вазу!


Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments25

YouTube — Ошибка. Повторите попытку позже. Идентификатор воспроизведения: <...>

Reading time3 min
Views232K


Чуть больше месяца назад стал замечать, что почти каждая попытка посмотреть видео с YouTube на десктопном компьютере начинается с сообщения об ошибке.

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

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

Под катом — причина возникновения ошибки (для тех, кому лень читать, это AdBlock), и что с этим можно сделать. Конечно, кроме отключения самого блокировщика рекламы.
Читать дальше →
Total votes 107: ↑95 and ↓12+107
Comments127

ВИЧ — нулевой пациент мировой пандемии

Reading time16 min
Views698K

Синдром приобретённого иммунодефицита - безжизненная и формальная фраза, описывающая состояние, развивающееся на фоне ВИЧ инфекции. Терминальная стадия заражения, заболевания Вирусом иммунодефицита человека - последний этап чумы 21 века в вашем теле. Около 40 млн человек живут с этой болезнью, медленно ожидая трагической развязки. Всемирная организация здравоохранения, ученые и средства массовой информации бесконечно тиражируют страх перед глобальной угрозой, предрекая нам катастрофу.

Но с чего все началось? От первой капли крови до эпицентра пандемии, от первого межвидового заражения до всемирной войны с вирусом. Кто был истинным «пациентом ноль»? Откуда появилось заболевание? Отчего мы все умрём и умрем ли? Каков этот длинный путь эволюции от похотливых лемуров до парада колумбийских наркотиков в южных штатах, от гей-сообществ и наркомании до африканских рабов. Что мы натворили? Что мы сделали такого, из-за чего теперь имеем дело с ВИЧ. Предлагаю вам погрузиться в небольшое расследование Scientae Vulgaris и отправиться на поиски нулевого пациента вместе со мной.

Часть 1. Рождение мифа

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

Дело было так, Центр по контролю и профилактике заболеваний публиковал еженедельные отчеты о заболеваемости и смертности, и несколько недель подряд в них отображались необычно высокие данные по числу сарком, пневмонии Pneumocystis carinii pneumonia (PCP) и оппортунистических инфекций. То, чем обычно болеют достаточно редко. Общее состояние пациентов выделили в отдельный синдром, собрали рабочую группу и стали разбираться.

И вот спустя пару месяцев, в марте 1984 года в Центре по контролю и профилактике заболеваний в США уже вовсю тщательному анализу и исследованию подвергались сексуальные связи нескольких геев и бисексуальных мужчин. По странному стечению обстоятельств из всех заболевших мужчин, женщин и детей именно эта группа была наиболее многочисленной. Одним из подопытных «содомитов» стал канадский бортпроводник Гаэтан Дугас. Он работал в Эйр Кэнада и умер в 1984-м от почечной недостаточности, вызванной оппортунистической инфекцией на фоне ослабленного иммунитета. Множество журналистов и публицистов 80-х впоследствии опишут Дугаса, как очаровательного и сексуального спортсмена с необъёмным гомосексуальным либидо. Ошибочно определённый как пациент «Ноль», Гаэтан на самом деле не были ни «пациентом О», ни нулевым как таковым. Касательно канадского бортпроводника, его случай числился за номером 57, а обозначение «О» относилось к слову «outside» - то есть, прибывшим из-за пределов США. Именно с Дугаса вообще начинается использование термина «нулевой пациент» в эпидемиологии. Но, как часто бывает, это всего лишь опечатка, вернее, неправильно воспринятая аббревиатура. 57-й пациент был ответственнен за, по меньшей мере, 40 из 248 случаев заражения ВИЧ в 1983 году (исследования Уильяма Дароу в Центре контроля заболеваний). Многие нити на нарисованной эпидемиологами схеме распространения вируса сводились к Гаэтану. Но ,во-первых, далеко не все из них и, во-вторых, на нем они не заканчивались. Молодой человек был продуктом своей эпохи, ВИЧ в его случае и его положении был скорее вопросом времени.Чтобы вы понимали, что за радужные времена в Канаде были в эти годы, нужно упомянуть, что к 1970-м ЛГБТ сообщество игривой походкой праздновало свои победы. В 1971 году в Оттаве состоялся первый в Канаде марш за права геев. Стала выпускаться первая Канадская газета на тему освобождения гомосексуалистов - The body politic - в Торонто. Вышел документальный ЛГБТ сериал «Выход» («каминг аут»). В 73-м году сразу несколько городов в Канаде провели масштабные мероприятия по защите прав геев, назвав это всё «неделей гордости» («прайд вик»). В 74-м году молодому Дугасу было 22 года, быть геем было дерзко и даже немного модно. Во время полётов в самолётах всё ещё курили и подавали крепкий алкоголь крупными порциями, небо пахло романтикой и приключениями. Дугас рос в небольшой семье в пригороде Квебека L’ansien-lorette, возле пригородного аэропорта, он учился на парикмахера и с восторгом наблюдал за пролетающими самолётами. Как только авиакомпании вслед за волной всеобщей либерализации сняли запрет на работу мужчин на борту самолётов, Дугас понял, что всю жизнь мечтал стать стюардессой: белоснежная рубашка с длинными лацканами воротника, голубые обтягивающие штаны и платочек на поясе. Он делился советами по макияжу с коллегами-женщинами и был на острие хипстерской моды 80-х, крутил романы, посещал гей бары и жил полной активной жизнью гейской стюардессы.

Читать далее
Total votes 188: ↑168 and ↓20+198
Comments228

Windows: достучаться до железа

Reading time11 min
Views55K

Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено... Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!

Читать далее
Total votes 132: ↑131 and ↓1+173
Comments90

SwiftUI по полочкам

Reading time24 min
Views88K
Каждый раз, когда в языке программирования появляется новый Фреймворк, рано или поздно, появляются люди, которые изучают язык именно с него. Вероятно так было и в IOS разработке во времена появления Swift: поначалу он рассматривался как дополнение к Objective-C — но я этого уже не застал. Сейчас, если начинаешь с нуля, выбор языка уже не стоит. Swift вне конкуренции.

То же самое, но в меньшем масштабе, происходит и с фреймворками. Появление SwiftUI — не исключение. Вероятно, я — представитель первого поколения разработчиков, кто стартовал с изучения SwiftUI, проигнорировав UIKit. У этого есть своя цена — обучающих материалов и примеров работающего кода пока очень мало. Да, в сети уже есть некоторое количество статей, рассказывающих о той или иной особенности, том или ином инструменте. На том же www.hackingwithswift.com уже довольно много примеров кода с объяснениями. Однако, они слабо помогают тем, кто решил изучать SwiftUI с нуля, как я. Большинство материалов в сети — это ответы на конкретные, сформулированные вопросы. Опытный разработчик легко разберется, как все устроено, почему именно так, и зачем это нужно применять. Новичку же, сначала нужно понять, какой вопрос задать, и только тогда он сможет добраться до этих статей.



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

Надеюсь статья поможет вам сэкономить некоторое время, когда вы тоже захотите ощутить немного магии.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments30

Как я узнал о тайных услугах Мегафона

Reading time3 min
Views126K
Добрый день всем!

Началось всё с того, что поздно вечером мне позвонила девушка из Мегафона и пролепетала что-то про скидочные купоны-талоны, которые появятся в моём личном кабинете. Мол, это просто партнерская программа и она не хочет, чтобы я пропустил такую прекрасную возможность.
Читать дальше →
Total votes 151: ↑138 and ↓13+166
Comments293

Адаптируем существующее бизнес-решение под SwiftUI. Часть 4. Навигация и конфигурация

Reading time5 min
Views2.8K
Доброго всем времени суток! С вами я, Анна Жаркова, ведущий мобильный разработчик компании «Usetech»
Теперь поговорим об еще одном интересном моменте в SwiftUI, о навигации.

Если вы пропустили предыдущие статьи цикла, то можете ознакомиться с ними по ссылке:

часть 1
часть 2
часть 3

С изменением описания визуальной части и переходом к декларативному синтаксису изменилось и управление навигацией в приложении SwiftUI. Использование UIViewContoller напрямую отрицается, UINavigationController напрямую не используется. На смену ему приходит NavigationView.

@available(iOS 13.0, OSX 10.15, tvOS 13.0, *)
@available(watchOS, unavailable)
public struct NavigationView<Content> : View where Content : View {

    public init(@ViewBuilder content: () -> Content)

    //....
}

По сути обертка над UINavigationController и его функционалом.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments5

Адаптируем существующее бизнес-решение под SwiftUI. Часть 3. Работаем с архитектурой

Reading time6 min
Views3.3K
Доброго всем времени суток! С вами я, Анна Жаркова, ведущий мобильный разработчик компании «Usetech»

Продолжаем разбирать тонкости SwiftUI. С предыдущими частями можно ознакомиться по ссылкам:

часть 1
часть 2

Сегодня поговорим уже об особенностях архитектуры, и как перенести и встроить в приложение на SwiftUI существующую бизнес-логику.

Стандартный поток данных в SwiftUI построен на взаимодействии View и некой модели, содержащей свойства и переменные состояния, или самой являющейся такой переменной состояния. Поэтому логично, что рекомендуемым архитектурным партерном для приложений на SwiftUI является MVVM. Apple предлагает использовать его совместно с фреймворком Combine, который представляет декларативный Api SwiftUI для обработки значений во времени. ViewModel реализует протокол ObservableObject и подключается как ObservedObject к конкретному View.


Читать дальше →
Rating0
Comments0

Магия SwiftUI или о Function builders

Reading time5 min
Views20K


Вы пробовали добавить в VStack больше 10 вьюх?


var body: some View {
        VStack {
            Text("Placeholder1")
            Text("Placeholder2")
            // ... тут вьюшки с 3 по 10 . . .
            Text("Placeholder11")
        }
    }

Я попробовал — это не компилируется. Да, я тоже сначала был удивлен и погрузился в изучение форума Swift и гитхаба. Результатом моего изучения стало — "все равно не компилируется ¯\_(ツ)_/¯ ". Но подождите, давайте разберемся почему.

Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments15

Реализация Grid раскладки на SwiftUI

Reading time5 min
Views4K

Что такое Grid Layout?


Разрабатывая интерфейс приложения, мы чаще всего имеем дело именно с двумерным представлением визуальных элементов. Существует множество контролов, призванных стандартизировать и упростить верстку. Если рассматривать концепции веб-разработки, то в качестве наилучшего способа создания двумерных шаблонов интерфейса CSS Working Group в 2017 году предложила Grid Layout.
image
В iOS 13 SDK в наличии у нас имеется возможность располагать элементы линейно VStack, HStack, ZStack, в виде списка: List. Но нет возможности определить семантику расположения элементов в двумерной системе координат. Поэтому мы решили создать его сами.
В iOS 14 Apple представила свою реализацию grid, о которой мы расскажем ниже в разделе Apple LazyVGrid/LazyHGrid.

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments1

Переход c Cocoapods на Swift Package Manager

Reading time4 min
Views15K


Cocoapods считается наиболее популярным менеджером зависимостей для iOS. Последние годы Apple работает над развитием своего нативного менеджера зависимостей Swift Package Manager (SPM).

Изначально его использование было возможно только для server-side Swift или приложений для терминала. На таких приложениях обкатывали и дорабатывали SPM, комьюнити знакомилось с его работой, а команда Apple получила бета тестеров.

С релизом Xcode 11 SPM начал приходить и в мир разработки под iOS. Сейчас это уже полноценный инструмент, который можно использовать, но пока с ограничениями.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments6

Свободу байтам

Reading time10 min
Views25K

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


Вы видите меня хозяином Франции, но я бы не взялся править ею и три месяца при свободной прессе.
Наполеон I

Конечно гипотетически, на самом деле, такое с нами произойти не может. А то, что сейчас блокируют (как устроена блокировка в РФ и РБ), это же конечно "для нашего блага".


Цель этой статьи: найти и проанализировать открытые или, как минимум, закрытые но бесплатные и удобные инструменты, которые позволяют получить доступ к информации в случае частичной или полной блокировки доступа к сети Интернет.


Кому лень читать, буду краток: Tor и Bridgefy — это то, что должно стоять у каждого борца за свободу информации.

Читать дальше →
Total votes 45: ↑38 and ↓7+42
Comments83

В России плохо жить, даже если ты разраб. Но я все равно отказываюсь от релокейта

Reading time6 min
Views107K


Несколько лет назад я читал на Хабре про скандал разраба Алексея Адамовского с компанией Xored. Липкий кейс, компания не заплатила человеку деньги, и для меня сразу стал очевиден главный враг в этой истории. Непонятно было другое. Адамовского наняли работать в новосибирском офисе компании, а он очень хотел поработать в пражском. За те же деньги. Кое-как уговорил их и уехал туда. В целом его право, но меня тогда очень задело другое — неужели человек настолько ненавидит жить в РФ, что готов смотаться отсюда на любых условиях?
Читать дальше →
Total votes 289: ↑195 and ↓94+166
Comments1181

Легковесный роутинг на микросервисах

Reading time13 min
Views7.5K


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


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


Кто делает всю эту важную, но незаметную работу? Советую запастись чаем и печеньками: это мини-сериал о том, как я ни в чем себе не отказывал, реализуя MVVM в одном из своих домашних проектов. Сегодня заключительная серия — про слой роутинга в iOS-приложении.

Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments0

Защита и взлом Xbox 360 (Часть 3)

Reading time9 min
Views65K


В 2011 году, через 6 лет после выпуска игровой приставки Xbox 360, исследователями был обнаружен занимательный факт — если на вывод RESET центрального процессора на очень короткое время подать сигнал «0», процессор не сбросит своё состояние (как должно быть), но вместо этого изменит своё поведение! На основе этой «особенности» был разработан Reset Glitch Hack (RGH), с помощью которого удалось полностью скомпрометировать защиту Xbox 360, запустить неподписанный код, тем самым открыв путь к взлому самой системы и победе над «невзламываемыми» приводами DG-16D5S.

Давайте же рассмотрим в деталях, как работал RGH, как разработчики пытались залатать дыру и как эти заплатки смогли обойти!
Читать дальше →
Total votes 152: ↑152 and ↓0+152
Comments65

Бюджетный DI на антипаттернах

Reading time15 min
Views12K

image


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


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


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

Читать дальше →
Total votes 33: ↑31 and ↓2+32
Comments8

Выбираем канал для точки доступа Wi-Fi. Исчерпывающее руководство

Reading time9 min
Views302K
2,4 ГГц — это плохо. 5 ГГц — это хорошо. 6 ГГц — это ещё лучше, но послезавтра. Все это знают, кого я тут учу, в самом деле. Всё это хорошо, только делать-то что, когда ты такой, как умный, открываешь какой-нибудь Wi-Fi Explorer, а там сатанизм и этажерки, как на скриншоте?



Шаг первый — поплакать. Шаг второй — нырнуть под кат. Вопрос простой, а ответ — нет.
Когда это нас останавливало?
Total votes 88: ↑87 and ↓1+109
Comments234

Мегафон продолжает вмешиваться в мой HTTP-трафик в 2020 году, отправлять рекламу, даже после получения запретов на это

Reading time7 min
Views82K
Недавний пост «Вы видели людей, которые пользуются мобильными контент-подписками?» опять всколыхнул внутреннее недовольство отношением Мегафона ко мне и я решил рассказать про свою «войну» с зелёно-фиолетовым оператором и попытками оградиться от рекламы и вмешивания в мой HTTP-трафик.

Ситуация на текущий момент: Мегафон продолжает вмешиваться в мой HTTP-трафик, хотя имеет от меня прямой запрет на это. Продолжает отправлять мне рекламу, хотя также получал от меня неоднократно требования прекратить это.

Мотивация от оператора:
При заключении между нами договора, в нём был пункт, что Вы согласны на получение рекламы при использовании наших услуг.
Вместо выполнения Федерального Закона «О Рекламе», статья 18, п. 1, при обращениях к оператору с требованием прекратить распространять рекламу в мой адрес:
Рекламораспространитель обязан немедленно прекратить распространение рекламы в адрес лица, обратившегося к нему с таким требованием.
Мегафон подключает дополнительные услуги «отказа от рекламы» (у меня их с десяток), которые иногда не работают, и реклама продолжает приходить.



Например, после скриншота выше, сегодня получил очередную зелёно-фиолетовую рекламу.
Считаю что такого рода вещи должны предаваться гласности, так как дело не в том, что «проблема» решится (хотя до сих пор не решилась) для одного абонента, а в том что этот опыт поможет многим. Ведь по всем проблемным запросам смм Мегафона уводит клиента в личное общение и решений проблем не остаётся в паблике. Попробую это исправить.
С подписками, как оказалось, разобраться проще всего. Расскажу под катом про свой опыт и с ними, и с вмешательством в HTTP-трафик:

  • почему вы видите сайты с подписками, даже если кликнули по объявлению в выдаче Google,
  • размышления, много ли мобильные подписки приносят денег оператору,
  • как Мегафон вмешивается в HTTP-трафик,
  • про рекламу, от которой вы не можете отказаться,
  • чеклист того что можно сделать, для минимизации рекламы, подписок и вмешательств в HTTP-трафик.
Total votes 179: ↑176 and ↓3+232
Comments288

Объясните мне, как вы для себя разобрались в моделях типизаций — они же все размыты

Reading time7 min
Views39K


Когда я был начинающим, я мог писать простые приложения на C# и C++. Долго игрался с консольными прогами, пощупал десктопные, и в какой-то момент захотел сделать сайт. Меня ждал большой сюрприз — чтобы делать сайты, одного сишарпа мало. Надо ещё знать жс, хтмл, цсс и прочую фронтовую хрень. Я потратил около недели на эти вещи, и понял — не мое. Я мог написать какой то код на джаваскрипт, но он не содержал типов, и я никак не мог взять в толк — как к этому вообще подходить. Это какое-то игрушечное программирование. Ну и забросил к чертям.


Уже потом, работе на третьей, меня перевели в отдел, где делали веб. Я подумывал уволиться, но мне объяснили — там тайпскрипт, тайпскрипт — это такой сишарп для браузера.


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

Читать дальше →
Total votes 120: ↑106 and ↓14+115
Comments441

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Works in
Date of birth
Registered
Activity