Как стать автором
Поиск
Написать публикацию
Обновить
1
0
Serge Sukhanov @s_suhanov

Software Engineer

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

Swift 5.2. Обзор всех изменений

Время на прочтение5 мин
Количество просмотров6.4K
В конце марта вышел релиз Swift 5.2 для Xcode 11.4. В нём улучшена диагностика ошибок, анализ зависимостей, расширен функционал SwiftPM. Обзор некоторых изменений уже был опубликован на Хабре, в этой же статье рассмотрена эволюция самого языка с возможными примерами использования.


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

Опыт переезда iOS Developer в Германию по визе на поиск работы

Время на прочтение10 мин
Количество просмотров18K
Добрый день, дорогой читатель!

В этом посте я бы хотел рассказать о том, как я переехал в Германию, в Берлин, как нашел работу и получил Голубую Карту, и какие подводные могут ожидать людей, решивших повторить мой путь. Я надеюсь, что моя статья будет полезна тебе, если ты хочешь получить новый, интересный, профессиональный IT-опыт.

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

Почему именно виза на поиск работы, а не Голубая Карта сразу? Как уже было сказано, самое главное — время.

26 февраля 2018 я подал комплект документов на визу и 28 февраля виза уже была на руках. А 15 марта 2018 вылетел в Берлин. Виза выдается на 6 месяцев беспрерывного пребывания на территории Германии.

В добавок ко времени, появляется возможность увидеть будущего работодателя в живую, что также хорошо и для работодателя, когда он видит тебя. И как итог, нашел работу за 2 недели с момента прилета в Берлин.

Здесь можно найти список основных документов на эту визу. А здесь общую информацию по визе. Данные постоянно обновляются.

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

Но обо всем по порядку.
Читать дальше →

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

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


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

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

С релизом Xcode 11 SPM начал приходить и в мир разработки под iOS. Сейчас это уже полноценный инструмент, который можно использовать, но пока с ограничениями.
Читать дальше →

Стартуем с Core Data! Сложное простыми словами

Время на прочтение5 мин
Количество просмотров43K
Тем с Core Data уже написано большое количество, но большинство этих статей на английском языке, а так же с использованием большого количества «умных» слов которые могут запутать новичков.

Продолжение серии статей [Часть 2]

В данной статье я постараюсь рассказать о фреймворке от Apple понятным языком, чтобы даже «самые маленькие» программисты смогли вынести для себя информацию, и получить тот минимальный обьем знаний который поможет им в своих проектах.
Читать дальше →

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 1

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


Выполнение HTTP запросов — это один из самых важных навыков, которые необходимо получить при разработке iOS приложений. В более ранних версиях Swift (до версии 5) вне зависимости от того, формировали ли вы эти запросы «с нуля» или с использование известного фреймворка Alamofire,  вы в конечном итоге получали сложный и запутанный код с callback типа completionHandler: @escaping(Result<T, APIError>) -> Void.

Появление в Swift 5 нового фреймворка функционального реактивного программирования Combine в сочетании с уже существующими URLSession и Codable предоставляет вам все необходимые инструменты для самостоятельного написания очень компактного кода для выборки данных из интернета.

В этой статье в соответствии с концепцией Combine мы будем создавать «издателей» Publisher для выборки данных из интернета, на которые в дальнейшем сможем легко «подписаться» и использовать при проектировании UI как с помощью UIKit, так и с помощью SwiftUI.

В SwiftUI это выглядит более лаконично и более эффектно, так как действие «издателей» Publisher не ограничивается просто выборкой данных, а простирается дальше, вплоть до управления пользовательским интерфейсом (UI). Дело в том, что в SwiftUI разделение данных и View осуществляется с помощью ObservableObject классов с @Published свойствами, изменения которых SwiftUI АВТОМАТИЧЕСКИ отслеживает и полностью «перерисовывает» свои View.

В эти ObservableObject классы можно очень просто заложить определенную бизнес-логику приложения, если некоторые из этих @Published свойств являются результатом синхронных и/ или асинхронных преобразований других @Published  свойств, которые можно напрямую менять такими «активными» элементами пользовательского интерфейса (UI) как текстовые поля TextField, Picker, Stepper, Toggle и т.д.
Читать дальше →

Современный код для выполнения HTTP запросов в Swift 5 с помощью Combine и применение их в SwiftUI. Часть 2. Hacker News

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


Hacker News, чей API мы собираемся использовать в этой статье, является социальным сайтом, сфокусированным на компьютерах и предпринимательстве. Если вы с ним ещё не знакомы, вы найдёте там много интересного.



В предыдущих статьях  на примере базы данных фильмов TMDb и агрегатора новостей NewsAPI.org была представлена стратегия применения Combine для формирования HTTP запросов и использования их во View Model для управления UI, спроектированного с помощью SwiftUI. В этой статье мы в точности воспроизведем ту же самую стратегию для разработки приложения, взаимодействующего с агрегатором новостей Hacker News, но добавим работу с «внешним» издателем Timer и для простоты исключим обработку ошибок.

Надо сказать, что выборка статей на ресурсе Hacker News имеет совершенно другую логику, чем в новостном агрегаторе NewsAPI.org, но технология, основанная на выполнении HTTP запросов с помощью Combine, прекрасно показывает свою гибкость и в этой ситуации. Кроме того, информация на сайте Hacker News очень часто обновляется и использование внешнего «издателя» Timer позволит автоматически отслеживать поступающие на сайт новые истории (Story), именно так их называют на этом ресурсе.

API агрегатора новостей Hacker News можно использовать совершенно свободно и не требуется никакой регистрации для аккаунта разработчика. Это здорово, потому что вы можете сразу начать работать над кодом без длительной регистрации, как мы делали это с другими public APIs.
Читать дальше →

Визуализация линий напряженности и движений электростатических зарядов, симулирование движения планет солнечной системы

Время на прочтение3 мин
Количество просмотров20K
Привет, сегодня я хочу вам предложить наглядное пособие по моделированию некоторых физических процессов и показать как получить красивые изображения и анимации. Осторожно много картинок.

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

Собеседования по алгоритмам: теория vs. практика

Время на прочтение17 мин
Количество просмотров46K
tl;dr За последние десятилетия мода на собеседования программистов менялась несколько раз, и каждая из них выглядит нелепо в ретроспективе. Либо мы наконец-то нашли настоящий секрет эффективных собеседований, либо увлеклись очередным модным течением, которое через десять-двадцать лет покажется столь же нелепым.

Когда я спрашиваю людей в модных больших технологических компаниях, почему на собеседовании так обязательно спрашивать об алгоритмах, самый распространённый ответ — что-то вроде: «У нас такой масштаб, мы не можем позволить, чтобы кто-то случайно написал функцию O(n^2) и повалил всю систему»1. Что особенно забавно, в последнее время я немало применял на практике эти алгоритмы и решал реальные проблемы, но не могу пройти собеседования, где о них спрашивают! Думаете, я проваливаю половину собеседований или что-то в этом роде? Нет, больше половины. Я участвовал примерно в 40 «настоящих» собеседованиях и прошёл, может, одно или два. Или ни одного2.

Когда я написал черновик этой статьи, друзья посчитали его занудным, потому что я провалил слишком много собеседований. Они говорят, нужно свести все неудачи в таблицу, потому что никто не станет читать десять страниц текста с длинным перечнем неудач. Хороший совет. Уже работаю над таблицей.
Читать дальше →

Как научить телефон видеть красоту

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

Недавно я читал книгу о математике и о красоте людей и задумался о том, что еще десятилетие назад представление о том, как понять, что такое красота человека были достаточно примитивными. Рассуждения о том, какое лицо считается красивым с точки зрения математики сводились к тому, что оно должно быть симметричным. Также со времен эпохи возрождения были попытки описать красивые лица при помощи соотношений между расстояниями в каких-то точках на лице и показать, например, что у красивых лиц какое-то отношение близко к золотому сечению. Подобные идеи о расположении точек сейчас используются как один из способов идентификации лиц (face landmarks search). Однако как показывает опыт, если не ограничивать набор признаков положением специфичных точек на лице, можно добиться лучших результатов в целом ряде задач, включая определение возраста, пола или даже сексуальной ориентации. Уже тут видно, что острым может стоять вопрос этики публикации результатов таких исследований.
Читать дальше →

Swift: Контейнеры для хранения значений по ключу

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


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


Обычно дело начинается с добавления константы для ключа и проверок на его уникальность. Это актуально и для большинства других хранилищ типа "ключ-значение". И последствия примитивного дизайна таких хранилищ не ограничиваются ключами, интерфейс в виде бессистемного набора методов приводит к целому ряду возможных проблем:


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

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

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

Мой опыт эффективной удалённой работы

Время на прочтение7 мин
Количество просмотров47K
Мой друг, у которого уже много лет опыта удалённой работы, давно подначивал меня поехать на пару зимних месяцев в Таиланд поработать удалённо, а я в свою очередь каждый раз находил одну из сотен надуманных причин, и отказывался:

  • это дорого, я потрачу все деньги;
  • я там упаду с мопеда, меня укусит крокодил-змея-комар, я заболею и умру;
  • я там не смогу работать, всё будет отвлекать;
  • меня уволят из-за того, что будут думать, что я ничего не делаю;
  • меня не отпустит менеджмент.

Список можно продолжать бесконечно. Прекрасно это понимая, я составил противоположный список с позитивными утверждениями и принял железное решение: я поеду, даже если мне придётся сменить работу и продать машину.

После этого, я тут же пошёл пообщался со своим менеджментом насчёт перехода на постоянную удалённую работу и к моему удивлению меня отпустили для начала поработать из дома в Киеве. А затем — насовсем.

Так я стал удалённым сотрудником, работающим с января по апрель из Таиланда.

image
Если вы думаете, что удалённая работа это вот так — смею вас разочаровать. Так не будет.
Как минимум нужно будет включить компьютер.
Читать дальше →

Чтобы пацанам было не стыдно показать

Время на прочтение3 мин
Количество просмотров107K
Я стар и уже глуп, а у вас всё впереди, уважаемый программист. Но позвольте дать вам один совет, который наверняка поможет в вашей карьере – если, конечно, вы планируете остаться программистом.

Советы типа «писать красивый код», «хорошо комментировать свои доработки», «изучать современные фреймворки» — очень полезные, но, увы, второстепенные. Они идут прицепом к главному качеству программиста, которое надо в себе развивать.

Вот это главное качество: пытливый ум.
Читать дальше →

Глубокое погружение в инвестиции Илона Маска

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

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


Примечания: (1) статье чуль меньше полутора лет (и потому, например, нет анализа StarLink), но весьма примечательная подходом, (2) в оригинале статья большущая и местами нудная, поэтому я привожу около 80% наиболее читабельного контента.

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

Как заговорить на английском через месяц. 9 простых и проверенных шагов

Время на прочтение8 мин
Количество просмотров464K
Хабр, привет!

Меня зовут Марина Могилко, я кофаундер онлайн-платформы LinguaTrip.com.

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

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

Итак, начинаем! Осторожно: под катом мини-словарик на все случаи жизни.

image

Архитектура MVVM в мобильных приложениях на Flutter

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

Я начала изучать Flutter и недавно потратила целый день пытаясь внедрить архитектуру Model-View-ViewModel в свое приложение на Flutter. Обычно я пишу под Андроид на Java, MVVM реализую с помощью AndroidViewModel и LiveData/MutableLiveData. То есть опыт программирования и применения паттерна есть, приложение — простой таймер. Так что ничто не предвещало столь больших временных затрат на простую задачу.


Поиски статей и инструкций по MVVM во Flutter (без использования RxDart) дали один пример причем без ссылки на полный исходник, так что хочу немного облегчить для интересующихся изучение этого паттерна во Flutter.

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

Карта развития мобильного разработчика

Время на прочтение12 мин
Количество просмотров24K
Мы ежедневно сталкиваемся с понятиями «джун», «мидл», «сеньор», но наши представления о том, какими знаниями должен обладать разработчик на разных стадиях роста, разнятся. Отсутствие четкого плана развития и непонимание, куда двигаться дальше, часто приводят к фрустрации и необдуманным сменам места работы.



Ребята из AppsCast совместно с Head of Mobile проекта Pandao Александром Черным (@AlexChernyy) попробовали разобраться в вопросе и составить собственную карту развития мобильного разработчика с момента попадания в профессию и до руководящих постов. Под катом советы о собеседовании джунов, где брать хороших разработчиков, рекомендации новичкам для устройства на работу, ключевые отличия джунов, мидлов и сеньоров, и важность навыка коммуникации для всех уровней.
Читать дальше →

Как я данные с BLE-градусника от Xiaomi забирал

Время на прочтение6 мин
Количество просмотров43K
Предыстория: в качестве одного из хобби у меня случился «Умный дом». Хочется красивых устройств, но при этом ещё хочется свободы и приватности. Поэтому занимаюсь скрещиванием ужика Xiaomi с ёжиком Home Assistant.

Для поддержания комфортных условий нам нужно знать, а что вообще у нас дома происходит. Короче говоря, нужны сенсоры. Их у Xiaomi есть много разных, но больше всего мне понравился квадратный градусник на электронных чернилах. Вот только он совсем не умный, в том смысле, что не предоставляет вообще никаких интерфейсов, кроме графического – ни тебе WiFi, ни BLE, ни ZigBee. Зато батарейки CR2032 хватает на несколько лет. Есть ещё версия с блютусом, но она чуть менее изящная – эдакий толстый блинчик.

И вот в начале весны был анонсирован новый датчик температуры/влажности, на электронных чернилах, с BLE, да ещё и с часами. Часы мне не особенно-то и нужны, а вот всё остальное немедленно подавило все рациональные доводы и градусник был заказан на одном из популярных интернет-магазинов, по предзаказу. Ехало оно ехало, и наконец приехало.



В приложение MiHome датчик добавился без проблем (у меня англоязычный интерфейс везде, с русской версией MiHome, говорят, были трудности перевода). Показывает текущие значения и историю изменения показаний.

А вот с интеграцией в Home Assistant приключились сложности. Имеющийся компонент для датчика температуры ни в какую не хотел забирать данные с устройства и жаловался на неверный формат данных. Ну, делать нечего, достаём лопату и начинаем копать.

Первой мыслью было ознакомиться с устройством протокола BLE, но оценив размер документации, было принято решение переходить к методу народного тыка.
Читать дальше →

Видео с Badoo Techleads Meetup #3: о делегировании, онбординге, бизнесе и собеседованиях в IT

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


Привет, Хабр!

Публикуем видеоотчет о третьем Badoo Techleads Meetup — встрече тимлидов, руководителей отделов и CTO. Спасибо спикерам, гостям и зрителям трансляции!

Под катом — слайды и записи докладов о построении бизнес-ориентированной разработки (ДомКлик), онбординге и делегировании (Badoo), процессе собеседования (Авито), а также запись панельной дискуссии о собеседовании разработчиков с участием представителей Яндекса, Авито, Badoo и Ins Ecosystem.

Моё разочарование в софте

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

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


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

Для примера, современные автомобили работают, скажем, на 98% от того, что физически позволяет нынешняя конструкция двигателя. Современная архитектура использует точно рассчитанное количество материала, чтобы выполнять свою функцию и оставаться в безопасности в данных условиях. Все самолёты сошлись к оптимальному размеру/форме/нагрузке и в основном выглядят одинаково.

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.

25 ошибок начинающего программиста

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

Научитесь выявлять их. Выработайте привычки избегать их.


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

От переводчика


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

Как бы это смешно не звучало, я работал над этим текстом с середины марта, стараясь подобрать подходящие формулировки и упростить для восприятия. Ещё пару дней воевал с хабра-редактором. Поэтому, если вы найдёте недочёты, прошу не винить меня в нерадении, а оповестить, я их сразу же исправлю. Я думал украсить статью картинками, но решил, что это только раздует её до совсем неприличных размеров. Приятного чтения.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Berlin, Berlin, Германия
Дата рождения
Зарегистрирован
Активность