Как стать автором
Обновить
26
0
Михаил @iWheelBuy

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

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

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

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

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

Читать далее
Всего голосов 27: ↑27 и ↓0+27
Комментарии8

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

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

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

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

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

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

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

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

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


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

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

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

схема_малая


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


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


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

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

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

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


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

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

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

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

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

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

Всем привет!


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


image

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

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

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

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


Читать дальше →
Всего голосов 19: ↑15 и ↓4+11
Комментарии31

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

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

Предисловие


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

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

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

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

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

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

Время на прочтение11 мин
Количество просмотров9.6K
Я хотел бы Вам рассказать про вывод текста на экран в iOS. Вначале это задумывалось как туториал, затем как сбор неочевидных фактов, а получилось что получилось.

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

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

Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии9

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

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


Привет Хабр!

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

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

The Processing of Unrecoverable Errors in Swift

Время на прочтение6 мин
Количество просмотров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 →
Всего голосов 14: ↑13 и ↓1+12
Комментарии0

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

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

После просмотра 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)

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

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

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

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


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

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

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

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

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


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

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

Информация

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