Pull to refresh
26
0
Михаил @iWheelBuy

iOS разработчик

Send message

Плюсы интеграции Xiaomi Gateway 3 в Home Assistant

Reading time 7 min
Views 51K

Первая версия компонента XiaomiGateway3 для Home Assistant вышла 4 месяца назад, и с тех пор много всего изменилось. В прошлой статье я писал про создание компонента. А в этой статье расскажу, почему это решение так заинтересовало сотни пользователей.

Читать далее
Total votes 27: ↑27 and ↓0 +27
Comments 8

Разблокируем интернет с помощью Mikrotik и VPN: подробный туториал

Reading time 3 min
Views 147K

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

В качестве VPN я выбрал SoftEther: он настолько же прост в настройке как и RRAS и такой же быстрый. На стороне VPN сервера включил Secure NAT, других настроек не проводилось.

В качестве альтернативы рассматривал RRAS, но Mikrotik не умеет с ним работать.  Соединение устанавливается, VPN работает, но поддерживать соединение без постоянных реконнектов и ошибок в логе Mikrotik не умеет.

Настройка производилась на примере RB3011UiAS-RM на прошивке версии 6.46.11.
Теперь по порядку, что и зачем.
Читать дальше →
Total votes 71: ↑67 and ↓4 +63
Comments 75

14 вещей, которые обязан знать iOS-разработчик

Reading time 13 min
Views 16K
С разрешения автора выкладываю перевод статьи Norberto Gil Vasconcelos «14 must knows for an iOS developer» (ссылка на оригинал). На момент публикации статьи актуальной была версия Swift 3.

Как iOS-разработчик (в данный момент абсолютно зависимый от Swift), я создавал приложения с нуля, поддерживал приложения, работал в различных командах. За все время работы в этой индустрии я не раз слышал фразу: «Не можешь объяснить – значит не понимаешь». Так что, в попытке понять, чем именно я занимаюсь каждый день, я создаю список того, что, на мой взгляд, важно для любого iOS-разработчика. Я постараюсь максимально ясно объяснить каждый момент. [Пожалуйста, не стесняйтесь исправлять меня, высказывать свое мнение или предлагать свои дополнения в этот список.]


Темы: [ контроль версий | архитектурные паттерны | Objective-C против Swift | React | менеджер зависимостей | хранение информации | CollectionViews & TableViews | UI | протоколы | замыкания | схемы | тесты | геолокация | локализуемые строки ]
Читать дальше →
Total votes 12: ↑12 and ↓0 +12
Comments 7

Приточная вентиляция совмещенная с канальным кондиционером (часть 1 — электрическая)

Reading time 11 min
Views 74K

схема_малая


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


Статью разделил на две части:


  • в первой части описана классическая схема приточная вентиляции с использованием электрического канального подогревателя
  • во второй части рассказано про неоднозначный опыт переработки системы под водяной калорифер с питанием от общедомовой системы отопления
Читать дальше →
Total votes 60: ↑59 and ↓1 +58
Comments 229

Выходим в интернет за пределами РФ: (MikroTik<->Ubuntu) * GRE / IPsec

Reading time 8 min
Views 68K
Позволю себе опубликовать свой опыт применения сетевых технологий в меру моей испорченности для выхода в интернет из-за пределов РФ. Не будем рассуждать о том, зачем это нужно. Надеюсь, что все всем и так понятно.

Итак, у нас есть статический публичный IP адрес, который приходит Ethernet шнуром в MikroTik RouterBOARD 750G r3 (hEX). Пробуем собрать вот такую конструкцию.


Настройку L2tp линка в рамках этой статьи я не описываю, а на схеме он нарисован только потому, что в ней упоминается.
Читать дальше →
Total votes 35: ↑31 and ↓4 +27
Comments 50

Эффективное использование libdispatch

Reading time 8 min
Views 2.4K
(Прим.перев.: автор оригинального материала — пользователь github и twitter Thomas @tclementdev. Ниже в переводе сохранено повествование от первого лица, которое использует автор.)

Думаю, что большинство разработчиков использует libdispatch неэффективно из-за того как её представили сообществу, а также из-за запутанной документации и API. Я пришел к этой мысли после чтения обсуждения «concurrency» в рассылке посвященной развитию Swift (swift-evolution). Особенно просвещают сообщения от Пьера Хабузит (Pierre Habouzit — занимается поддержкой libdispatch в Apple):
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 2

Изменения модальной презентации экранов в iOS 13

Reading time 9 min
Views 18K

Всем привет!


Меня зовут Илья, я из Tinkoff.ru. Я перевел для вас статью от Geoff Hackworth про то, как изменился стиль модальной презентации в iOS 13, на что это повлияло и как работает обратная совместимость с предыдущими версиями iOS и Xcode.


image

Читать дальше →
Total votes 30: ↑29 and ↓1 +28
Comments 2

Улучшаем профиль в LinkedIn перед поиском работы

Reading time 3 min
Views 119K
На момент написания статьи, в социальной сети LinkedIn размещено порядка 30 миллионов вакансий от 20 миллионов компаний по всему миру. Не удивительно, что 90% рекрутеров используют LinkedIn как один из основных ресурсов поиска кандидатов.

Правильно оформленный LinkedIn профиль поможет привлечь внимание рекрутеров к вашей кандидатуре. Совместно с командой экспертов по поиску работы за рубежом Relocate.me, мы подготовили короткий гайд по оптимизации профиля LinkedIn перед поиском работы.


Читать дальше →
Total votes 19: ↑15 and ↓4 +11
Comments 31

Структуры данных с примерами на языке Swift. Часть первая: связаный список

Reading time 3 min
Views 19K

Предисловие


Кто из iOS разработчиков не мечтал о работе в престижном месте вроде Yandex или Avito. К сожалению, про мечты на собеседованиях спрашивает только hr, а вот интервьюеры из числа разработчиков задают вопросы немного другого характера. Чем отличается reference type от value type или bounds от frame? Вопросы, который каждый из нас слышал не раз на собеседованиях. Если ваше интервью начинается с вопроса про отличия значимого и ссылочного типов или в духе “расскажите ка нам про SOLID”, то вы явно на пути трудоустройства в ООО “Так себе перспективы“.
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Comments 28

Использование UIViewPropertyAnimator для создание пользовательских анимаций

Reading time 11 min
Views 17K
Создание анимаций это здорово. Они являются важной частью iOS Human Interface Guidelines. Анимации помогают привлечь внимание пользователя к важным вещам или попросту делают приложение не таким скучным.

Существует несколько способов реализовать анимацию в iOS. Вероятно, самым популярным способом является использование UIView.animate(withDuration: animations:). Вы можете анимировать слой изображения с помощью CABasicAnimation. Кроме того, UIKit позволяет настроить кастомную анимацию для отображения контроллера с помощью UIViewControllerTransitioningDelegate.

В этой статье я хочу обсудить еще один захватывающий способ анимирования вьюшек — UIViewPropertyAnimator. Данный класс предоставляет гораздо больше функций управления, чем его предшественник UIView.animate. С его помощью можно создавать временные, интерактивные и прерываемые анимации. Кроме того, имеется возможность быстрой смены аниматора.
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Comments 1

Вывод текста в iOS: CoreText, NSAttributedString

Reading time 11 min
Views 9.5K
Я хотел бы Вам рассказать про вывод текста на экран в iOS. Вначале это задумывалось как туториал, затем как сбор неочевидных фактов, а получилось что получилось.

Способы вывода текста условно можно разделить на несколько категорий:

  • UIKit — привычные UI контролы. Дают только базовые возможности по отображению, совсем мало возможностей по форматированию
  • UIKit + NSAttributedString — привычные UI контролы с возможностью установки строки с атрибутами отображения. Куча возможностей по форматированию
  • CoreText — фреймворк для работы с текстом и текстовыми представлениями. В связке с NSAttributedString дает массу возможностей по форматированию текста и, благодаря нескольким уровням абстракций над элементами текста, расширенные методы по их отображению
  • CoreGraphics — с помощью него тоже можно отрисовывать текст

Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Comments 9

Делаем вездесущий Splash Screen на iOS

Reading time 10 min
Views 26K


Привет Хабр!

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

Для многих разработчиков, участвующих в крупных проектах, решение задач, связанных с созданием красивой анимации, становится глотком свежего воздуха в мире багов, сложных фичей и хот-фиксов. Такие задачи относительно просты в реализации, а результат радует глаз и выглядит очень впечатляюще! Но бывают случаи, когда стандартные подходы не применимы, и тогда нужно придумывать всевозможные обходные решения.
Читать дальше →
Total votes 40: ↑40 and ↓0 +40
Comments 4

The Processing of Unrecoverable Errors in Swift

Reading time 6 min
Views 3.6K

Preface


This article is an example of how we can do research into Swift Standard Library functions behavior building our knowledge not only on the Library documentation but also on its source code.


Unrecoverable Errors


All events which programmers call "errors" can be separated into two types.


  • Events caused by external factors such as a network connection failure.
  • Events caused by a programmer's mistake such as reaching a switch operator case which should be unreachable.
Read more →
Total votes 14: ↑13 and ↓1 +12
Comments 0

Декомпозируя UICollectionViewCell

Reading time 8 min
Views 5.7K

После просмотра Keynote WWDC 2019 и знакомства с SwiftUI, предназначенного для декларативного описания UI в коде, хочется порассуждать о том, как можно декларативно наполнять таблички и коллекции. Например, вот так:


enum Builder {

    static func widgets(objects: Objects) -> [Widget] {
        let header = [
            Spacing(height: 25).widget,
            Header(string: "Выберите страну").widget,
            Spacing(height: 10, separator: .bottom).widget
        ]
        let body = objects
            .flatMap({ (object: Object) -> [Widgets] in
                return [
                    Title(object: object).widget,
                    Spacing(height: 1, separator: .bottom).widget
                ]
            })
        return header + body
    }
}

let objects: [Object] = ...
Builder
    .widgets(objects: objects)
    .bind(to: collectionView)

В коллекции это отрисуется следующим образом:

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

Мьютексы и захват замыканиями в Swift

Reading time 11 min
Views 16K


Перевод статьи Мэтта Галлагера.

В этой статье речь пойдёт об отсутствии потокового выполнения (threading) и инструментов синхронизации потоков в Swift. Мы обсудим предложение о внедрении «многопоточности» (concurrency) в Swift и то, как до появления этой возможности потоковое выполнение в Swift будет подразумевать использование традиционных мьютексов и общего изменяемого состояния (shared mutable state).

Использовать мьютекс в Swift не особенно сложно, но на этом фоне хотелось бы выделить тонкие нюансы производительности в Swift — динамическое выделение памяти во время захвата замыканиями. Мы хотим, чтобы наш мьютекс был быстрым, но передача замыкания для исполнения внутри мьютекса может снизить производительность в 10 раз из-за дополнительных расходов памяти. Давайте рассмотрим несколько способов решения данной проблемы.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 0

Роботизированная вертикальная ферма выращивает растения на 400% эффективнее обычной фермы

Reading time 3 min
Views 31K


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

Один из наиболее перспективных способов достижения желаемого — создание вертикальных ферм. Многоэтажные стеллажи или даже здания с растениями на каждом ярусе делают возможным получение зеленого продукта в больших количествах даже в черте города. Здесь на помощь приходят и высокие технологии. Например, сельскохозяйственная компания FodderWorks разработала полностью автономную систему, которая способна работать без участия людей, работая гораздо более эффективно, чем фермер-человек.
Total votes 19: ↑18 and ↓1 +17
Comments 128

Information

Rating
Does not participate
Location
Россия
Registered
Activity