Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: обучение c
Що таке нативні та кросплатформні програми? Плюси і мінуси.

Автор: Армен Маїлян

Что такое нативные приложения? Что из себя представляют кроссплатформенные приложения? Какие инструменты для разработки кроссплатформенных приложений применяют чаще всего? Преимущества и недостатки нативного подхода Преимущества и недостатки кроссплатформенных приложений Вывод Мировая статистика использования смартфонов показывает абсолютное преобладание всего двух мобильных операционных систем. Так, по данным портала statista.com, во втором квартале 2018 OS  Android была установлена на 88% всех используемых смартфонов, а iOs – на 11.9%. Данные портала netmarketshare.com, в свою очередь, показывают на апрель 2019 для OS  Android – 69.63%, а для iOs - 28.50%. По состоянию на март 2019 в Google Play Store находилось более 2 600 000 приложений. В Apple App Store, по данным на июль 2018 – 2 450 220 приложений. В течение последних лет количество доступных приложений растет на сотни тысяч в год. По прогнозам statista – к 2020 году объем рынка мобильных приложений приблизится к 190 млрд $. При таком, постоянно растущем количестве конкурентов, перед разработчиками мобильных приложений встает вопрос - какой подход использовать в разработке, чтобы новые, конкурентоспособные приложения: разрабатывались быстро; получались качественными и надежными; легко обновлялись и поддерживались; легко задействовали все необходимые возможности платформы. Фактически, рынок заставляет разработчика делать выбор между разработкой кроссплатформенных приложений и разработкой нативных приложений. Рассмотрим детальнее, что представляет из себя каждый из указанных подходов.   Что такое нативные приложения? Нативные приложения (от англ. native - родной) разрабатываются под конкретную аппаратно-программную платформу и пишутся на языках, созданных для данной платформы. И iOs, и Android имеют свои SDK (от англ. software development kit — набор средств разработки) и свой стек технологий, завязанные на определенный язык программирования. Например, родными языками для Android являются Java и Kotlin, для iOS, соответственно - Swift и Objective-C. Нативные приложения создаются специально для запуска на целевой платформе - с поддержкой всех нативных технологий и аппаратных возможностей конкретной платформы.   Что из себя представляют кроссплатформенные приложения? Как следует из названия, кроссплатформенность подразумевает создание приложений, которые могут работать в различных операционных системах. После написания кода приложения его можно развернуть на разных устройствах и платформах, не беспокоясь о проблемах несовместимости. Это универсальный подход, который широко используется для экономии времени и денег на разработку. Часто для этого используются специализированные кроссплатформенные фреймворки. Примером такой разработки является применение фреймворка Xamarin для создания приложений, работающих не только на Windows. Благодаря использованию Mono (опенсорс реализации платформы .Net), проекты, написанные на C#, успешно запускаются на Unix-like системах – iOs, Android, Linux. Какие инструменты для разработки кроссплатформенных приложений применяют чаще всего? Ссылаясь на статистику appfigures.com можно выделить такие инструменты: Как мы видим наиболее часто применяемым инструментом разработки кроссплатформенных мобильных приложений на конец 2017 года был Cordova – 39.89%. Вторым по частоте применения инструментом является Unity – 30.93%. Третьим – Adobe Flash с 10.39%. Следом идут Cocos2D – 9.37%, Xamarin – 4.5%, Appcelerator – 3.79%, Corona – 2.68%, React Native – 1.85%. Итак, стоит ли вам инвестировать в разработку отдельных нативных приложений на несколько платформ сразу, или убивать двух зайцев одним выстрелом, разрабатывая кроссплатформенные приложения? Или может стоит вообще сосредоточиться только на одной платформе и не обращать внимание на другую, пока не достигнут успех среди приложений первой? По данным портала appfigures.com на начало 2018 года количество приложений, присутствующих на обеих популярных платформах, было вполне ощутимым: 450 тысяч приложений на обеих платформах. Это более 28% приложений в Apple App store и 14% в Google Play Store. Это выглядит достаточно весомой частью, чтобы задуматься об присутствии на обеих платформах и попытке экономии используя кроссплатформенную разработку. По данным того же портала, многие уже существующие приложения расширяют свой рынок, выходя, со временем, на другой платформе. При че чаще приложения выходят дополнительно на Android, выпускаясь изначально под iOs. Можно также наблюдать тенденцию к снижению процента кроссплатформенных приложений за 2016 – 2017 годы. Так стоит ли потратить деньги на разработку двух нативных приложений, идеально соответствующих каждой платформе, или есть смысл сэкономить ресурсы и получить одно – кроссплатформенное? Давайте рассмотрим плюсы и минусы каждого из указанных подходов.   Преимущества и недостатки нативного подхода Плюсы нативных приложений Высокая производительность Поскольку технологии, используемые при разработке платформозависимых приложений, напрямую связаны с этой платформой, собственный нативный код имеет прямой доступ ко всем функциям операционной системы. Это, более простое взаимодействие приложения с собственными функциями мобильных устройств, повышает общую производительность приложения, особенно при представлении графического или мультимедийного контента. Следовательно, создание нагруженных приложений с использованием нативного кода может снизить время отклика,  вероятность сбоев и зависаний. Максимальное использование возможностей платформы Нативные приложения задумываются и разрабатываются, чтобы решать конкретные задачи на конкретной платформе. Это приводит к лучшему соответствию возможностей приложений аппаратным возможностям устройств, включая Bluetooth, NFC, камеру, GPS и т. д. Эта соответствие необходимо, когда приложение должно использовать такие данные, как физическое и географическое местоположение и др. Лучший пользовательский интерфейс Поскольку нативные приложения напрямую интегрируются с мобильной операционной системой, воспринимая и используя все доступные возможности «железа», пользователи могут перемещаться по привычному интерфейсу без особых хлопот, что приводит к положительному пользовательскому опыту (UX) и стабильному повторному использованию. К примеру сейчас, при большом количестве разнообразных вариантов разрешений экранов смартфонов очень важно иметь приложение, оптимизированное под такой экран, чтобы пользователю было удобно этим приложением пользоваться. Лучшее позиционирование в магазинах приложений Качество пользовательского опыта является важным рейтинговым показателем в магазинах приложений. Если приложение имеет высокую оценку пользовательского опыта, оно будет более высоко оценено магазином приложений, что ведет к большему числу рекомендаций для разной аудитории и увеличению доходов от приложения, соответственно. Есть предположение, что в магазинах приложений сами механизмы ранжирования будут лучше представлять приложения именно нативные для платформы, из-за их заведомо более высокой производительности и простоты использования. Минусы разработки нативных приложений Дороговизна и затраты времени на разработку Без сомнения, создание отдельных приложений сразу под каждую из нескольких операционных систем может значительно продлить процесс разработки. Один и тот же программный код не может быть развернут на разных платформах, и программистам потребуется больше времени для преобразования и перезаписи кода, что увеличивает затраты и время разработки. Если компания хочет для каждой из платформ создавать отдельные приложения, она может оказаться вынуждена нанять дополнительных программистов-специалистов. Например, один разработчик будет сосредоточен на разработке приложений для iOS, а другой - на разработке приложений для Android, что еще больше увеличивает расходы.   Несовместимость с другой мобильной операционной системой Вам придется заранее согласиться с несовместимостью вашего приложения с другими ОС. Когда разрабатывается приложение под конкретную ОС, его разработчики используют язык, специфичный только для этой операционной системы: например, Objective-C или Swift - для iOS, для различных мобильных устройств на базе Android - Kotlin и Java. В этом контексте нативное приложение, которое изначально написано для iOs, не будет совместимо с устройствами на базе Android и наоборот.   Упущенные возможности Разработка приложений, ориентированных только на одну платформу, может привести к упущенным возможностям. Особенно если другие платформы заранее не принимаются во внимание. Заведомое сокращение целевого рынка может привести к потере дохода. Плюсы и минусы кроссплатформенных приложений Как следует из названия, кроссплатформенность влечет за собой создание приложений, которые могут работать в различных операционных системах. После написания кода приложения его можно развернуть на разных устройствах и платформах, не беспокоясь о проблемах несовместимости. Это универсальный подход, который широко используется для экономии времени и денег. Вот некоторые преимущества и недостатки использования кроссплатформенного подхода в разработке мобильных приложений. Плюсы кроссплатформенных приложений   Один код доступен для повторного использования на других платформах Основным преимуществом кроссплатформенной разработки мобильных приложений является тот факт, что один и тот же код может использоваться на разных мобильных платформах. В отличие от разработки нативного приложения, для кроссплатформенного приложения не требуется  использование отдельного технического стека для каждой операционной системы. Повторное использование кода позволяет легко развертывать приложение на другой платформе, так как возможности приложения, реализованные на одной платформе, будут работать и на других платформах.    Разработка кроссплатформенных приложений экономически эффективна Одна команда может реализовать нужную идею сразу на всех платформах, используя единый технологический стек. Это приводит к меньшим затратам ресурсов.   Простое и быстрое развертывание Разработчикам кроссплатформенных приложений не нужно изучать несколько технологических стеков различных платформ перед созданием своих приложений, им нужно хорошо освоить один стек разработки и особенности его применения. Поскольку нет необходимости создавать разные кодовые базы, начальное развертывание на целевых платформах происходит намного быстрее. Кроме того, будущие изменения в приложении могут выполняться одновременно, без внесения индивидуальных изменений на каждой платформе.   Кроссплатформенные приложения покрывают более широкую аудиторию Кроссплатформенные приложения предлагают разработчикам больше возможностей для охвата более широкой аудитории, поскольку такие приложения достигают пользователей всех типов и мобильных устройств, независимо от их операционной системы. Это значительно рентабельнее для бизнеса, чем присутствие только на одной платформе.   Кроссплатформенные приложения допускают одинаковый интерфейс и UX Тогда как производительность важна для любого мобильного приложения, его внешний вид (UI) и ощущения (UX) так же важны. Использование единой общей команды разработчиков и единого кода позволяет компаниям использовать одинаковый внешний вид приложения на всех платформах. То есть один и тот же пользовательский интерфейс и UX будет одинаково выглядеть на всех платформах. Недостатки кроссплатформенной разработки приложений   Кроссплатформенные приложения не являются такими гибкими, как нативные приложения Хотя задачи приложения будут реализовываться на всех платформах, скорее всего вы не сможете адаптировать готовое приложение для использования максимальных возможностей каждой из платформ.Работа с унифицированным стеком технологий не обеспечит такой же гибкости настройки и оптимизации, как применение стека технологий, индивидуального для каждой ОС.   Кроссплатформенные приложения не работают так же хорошо, как нативные приложения Использование одного универсального стека технологий приносит в жертву гибкость. Однако потеря гибкости в разработке будет означать потерю возможности улучшить производительность. Поскольку кроссплатформенные приложения отказываются от некоторой гибкости, эти приложения не будут работать так же хорошо, как нативные приложения.   Возможное несоответствие UI в различных платформах Внешний вид интерфейса приложения и правильная настройка UI для соответствия функционала в обеих системах может доставить проблем. К примеру, у каждой системы имеются свои требования к дизайну элементов UI. В определенных случаях эти требования могут оказаться взаимоисключающими.   Отправка кроссплатформенных приложений в соответствующие Магазины приложений может иметь сложности. Механизм добавления вашего приложения, являющегося кроссплатформенным, в Apple App Store и в Google Play Store будет отличаться. Требования этих магазинов приложений к представленным у них продуктам различны.  Прохождение всех проверок и выполнение всех правил для соответствия обоим магазинам будут вызывать определенные сложности.   Вывод Подведем краткие итоги. Попробуем сузить наш достаточно сложный выбор между нативной разработкой и кроссплатформенной. Обратите внимание на стратегию продвижения приложения и на его предполагаемый функционал. Если вам сразу нужен будет охват большей аудитории и у приложения функционал не является сложным - проще и дешевле воспользоваться кроссплатформенным подходом. Если вашему приложению необходимо использовать специфические особенности платформы, при этом нет необходимости в одновременном присутствии сразу и в Apple App Store, и в Google Play Store – разрабатывайте под выбранную платформу нативное приложение. И если ваши успехи покажут вам, что можно захватывать новый рынок – у вас уже будут средства на разработку под вторую платформу. Другие промежуточные варианты будут компромиссами и могут склонять чашу весов как к нативным, так и к мультиплатформенным решениям.   Используйте выбранный вами подход для построения качественных и полезных приложений.  С нашей стороны можем порекомендовать ряд видеокурсов. Для создания кроссплатформенных игр очень удобным инструментом является Unity и на ITVDN вы найдете серию видео курсов по разработке игр на Unity. Если вы хотите попробовать себя в разработке кроссплатформенных приложений с использованием такого инструмента, как Xamarin, вам могут оказаться полезными такие уроки на портале ITVDN.com, как Xamarin. Легкий старт и Разработка пользовательского графического интерфейса (GUI) на C# под Android (Xamarin). Если вы планируете в дальнейшем разработку нативных приложений под Android, мы рекомендуем начать с таких курсов - Java Starter и Java Essential. Также смотрите на ITVDN видео курсы по специальности Android Developer и iOS Developer.
Гібридні мобільні програми - міф чи реальність? Частина 1

Автор: Дмитро Івченко

Введение Мои коллеги часто задаются вопросом: ”Сколько мы еще будем писать под разные платформы отдельно?”. Им конечно нравится разрабатывать под iOS на  Obj-C или на Java под андроид, но снова и снова возникает вопрос о необходимости иметь в своей команде специалиста в обоих направлениях. Иначе вы не сможете дать доступ к сервисам всем вашим потенциальным клиентам. Если вы хотите достичь большей аудитории, потому что ваши заказчики просят об этом или вы не хотите пропустить доход от миллионов возможных пользователей, вам нужно будет сделать ваше приложение доступным (по крайней мере на двух платформах). Начните разрабатывать гибридные приложения, которые облегчат сложность разработки для нескольких платформ одновременно. Гибридное направление предполагает разработку приложений как веб-приложений, которые работают в браузере, а затем обертывание их таким образом, что они работают как родные приложения на мобильных операционных системах, таких как IOS, Android  или Windows Phone. В дополнение к одной основной полученной кодовой базе, которая значительно упрощает управление жизненным циклом вашего приложения, гибридизованные версии веб-приложения могут быть зарегистрированы с App Store компании Apple или Play Store компании Google. Эта статья призвана показать вам, как и почему вы должны придерживаться гибридного подхода в своем следующем проекте мобильных приложений. 1.2 Наступило время фреймворков Разработка начинается с выбора фреймворка, но иногда это нелегкая задача. Они вырастают, как грибы, и может быть трудно выбрать правильный. Вы можете прочитать огромное количество статей, анализировать ваши языки программирования  или рассчитать затраты и стоимость каждой из них. А можете просто открыть глаза и подумать, что на данный момент  может быть наиболее стабильным, перспективным и бесплатным веб-фреймфорком. Ответ - AngularJS. Какие есть гибридные бесплатные фреймворки, которые предоставляют разработчикам неограниченные возможности? Ответ - Cordova Давайте объединим эти два удивительных механизма, и мы получим - Ionic Framework. 1.3 Почему именно Ionic Ionic сочетает AngularJS (JavaScript) с HTML5 + CSS и использует Cordova, чтобы получить доступ к  родным  функциям устройства. Кроме того, он бесплатный, количество разработчиков и их поддержка растет с каждым днем. Так что в целом, Ionic предлагает большие возможности для создания гибридных приложений, которые не только удивительно выглядят, но также ведут себя так естественно, как родные приложения и разработаны всего на одной общей базе кода. В следующей части этой статьи будет рассмотрено как Ionic приложения могут заменить большинство из того, что вы ежедневно используете. Мы расскажем вам, как легко заменить хорошо известные компоненты из родного IOS или Android с помощью HTML5 и JavaScript, какая у них  общая  структура и как выглядит то, что вы можете достичь с гибридным подходом разработки.
Огляд популярних сервісів тестування

Автор: Редакция ITVDN

Так как 2017 год совсем недавно остался позади, наша команда решила сделать небольшой новогодний подарок в виде разбора лучших сред автоматического тестирования, обладающих, помимо прочего, открытым исходным кодом. 1. Robot Framework Robot Framework – это фреймворк для приемного тестирования (Acceptance Testing) и, помимо прочего, так называемого ATDD (Acceptance Test-Driven Development). Среда написана на языке Python, но также может быть развернута в рамках Jython (Java) и IronPython (.NET). По сей причине считается кроссплатформенной, ибо поддерживает Windows, Linux и MacOS соответственно. Достоинства: Упрощает автоматическое тестирование благодаря использованию подхода keyword-driven тестирования, в значительной мере помогая тестерам в создании читабельных, легко производимых тестов.  Простота в использовании «тестового синтаксиса». Имеет в наличии отменную среду, включающую в себя богатый набор различных инструментов и библиотек, выполненных в виде отдельных проектов. Огромное количество различных API делает систему очень гибкой. Хотя и не в виде встроенной функции, однако Robot Framework позволяет проводить параллельные тесты при использовании библиотеки pabot или Selenium Grid. Недостатки: Трудно настроить структуру html-отчетов. Примечание: эта среда будет очень полезной, если Вы нацеливаетесь на Keyword-Driven тестирование – и обширная база библиотек и расширений вряд ли заставит Вас в этом усомниться. Однако, чтобы добавить новые ключевые слова (RF test library API) базовые познания Java/Python/C программирования обязательны. 2. JUnit JUnit – это среда для проведения юнит-тестов для приложений, написанных на языке Java. Достоинства: Тесты пишутся при помощи чистейшего Java – одного из лидирующих языков программирования современности. Поддерживает TTD. Позволяет создать свой собственный пакет для юнит-тестирования. Прекрасно интегрируется в различные инструменты разработчика (к примеру – Maven) или среды разработки (к примеру, IntelliJ). Благодаря достаточно высокой популярности поиск документации не составляет труда. Недостатки: Если необходимо использовать возможности mock-объектов, пользователь вынужден прибегать к помощи сторонних библиотек (Mockito или другие). Чтение тестов у людей без технического образования может вызвать затруднения, так как, к примеру, имена методов в JUnit ограничены условностями языка Java. Примечание: для тех разработчиков, которые желают писать юнит-тесты для собственных Java-приложений JUnit, пожалуй, лучшее из того, что можно бы пожелать. Однако, в случае если речь идет о функциональном тестировании программ, написанных на других языках, вероятно, Вам стоит выбрать другую среду. 3. Spock Spock – это среда тестирования и спецификации для приложений, написанных на языках Java или Groovy. За основу взята среда JUnit. Достоинства: Позволяет создавать читабельные тесты с поддержкой чисто английских предложений, без необходимости следовать ограничениям языков программирования. Предоставляет информативный контекст возникнувшей проблемы. Плюс, дает легко понять, что необходимо сделать, дабы исправить обнаруженный недостаток. Имеет встроенную поддержку mock и stab объектов. Поддерживает DDT (Data-Driven Tests). Недостатки: Требует базовых знаний языка программирования Groovy. Примечание: идеально подойдет, если Ваше приложение базируется на JVM, плюс, Вы нацеливаетесь на BDD автоматическое тестирование с DSL. 4. NUnit NUnit – среда для юнит-тестирования языков .NET виртуальной машины. Имевшей однажды огромное влияние JUnit, среда NUnit была полностью написана на C#. Помимо прочего, в арсенале так же имеется целый спектр новых возможностей, позволяющих использовать все преимущества языков .NET. Достоинства: Быстрая инициализация и выполнение теста. Использует методы типа Assert с поддержкой аннотаций. Позволяет проводить параллельное тестирование. Поддерживает TDD. Недостатки: Так как использует только языки .NET стандарта, не является кроссплатформенным. Интеграция в среду Visual Studio не представляется возможной. Использование NUnit означает больше расходов на сопровождение проекта. Примечание: прекрасный фреймворк юнит-тестирования для C# с открытым исходным кодом, долгой историей и проверенной репутацией. Однако, в случае, если вы уже активно работаете с .NET языками, обратите свое внимание на MSTest. 5. TestNG TestNG – сервис автоматического тестирования для Java. По сути, это те же JUnit и NUnit, но с улучшениями и новым функционалом (ибо NG читается как «новое поколение» - Next Generation). Среда была разработка для покрытия всех видов тестирования, которые только могут понадобится. А именно: юнит-тестирование, функциональное тестирование, тестирование интеграции и прочее. Достоинства: Прост во внедрении в проект. Позволяет разработчику писать гибкие и всеобъемлющие тесты. Поддерживает DDT. Простые в понимании аннотации. Простота в группировании тестовых кейсов. Позволяет создавать параллельные тесты. Недостатки: Так как поддерживает только Java, Вы должны иметь хотя бы базовые познания этого языка. Установка и калибровка среды тестирования занимает время. Примечание: если вы работаете с Java, ищите инструмент для мульти задачного тестирования и можете уделить некоторое время на установку программы – TestNG определенно для Вас. 6. Jasmine Jasmine – среда для юнит-тестирования JavaScript. Так же известен как Behavior Driven Development (BDD) подход JavaScript тестирования. Идеально подходит для веб-сайтов, проектов Node.js и вообще для всего, где JavaScript может найти свое применение. В основном используется в связке с AngularJS. Достоинства: Кроме JavaScript, так же может быть применен по отношению к Python или Ruby. Чрезвычайно полезен, если Вам нужен один сервис тестирования как для клиентской разработки, так и для серверной. Поддерживается множеством CI (Codeship, Travic и прочее). Имеет встроенный Assert-синтаксис. Недостатки: В большинстве сценариях требует прогонщика тестов (такого как Karma). В случае с асинхронным тестированием возникают трудности. Примечание: Jasmine может оказаться прекрасным решением, если Вы нуждаетесь в унифицированном (клиент-серверном) сервисе юнит-тестирования. 7. Mocha Mocha – это еще один сервис JavaScript юнит-тестирования с занятным для русскоязычного сектора названием и отнюдь не банальным функционалом. Используется на NodeJs, в основном часто применяется в связке с ReactJS. Достоинства: Обладает встроенным тестовым прогонщиком. Поддерживает асинхронное тестирование. Позволяет большую гибкость, так как Вы спокойно можете использовать любую Assert-библиотеку (Chai, expect.js, Must.js прочие), которая будет отвечать Вашим требованиям (как замена стандартной NodeJs функции «assert»). Недостатки: Относительно новый сервис (появился в 2012 году), что означает он в активном развитии и некоторые аспекты технологии могут быть не до конца задокументированными. Предоставляет только базовую структуру тестов, плюс требует дополнительную ручную установку и конфигурацию (для кого-то может быть плюсом). Примечание: если Вы ищите независимую среду юнит-тестирования для JavaScript, Mocha – Ваше все! А какую среду автоматического тестирования используете Вы? Что хорошего и что не очень Вы могли бы о ней сказать? Пожалуйста, приобщайтесь к дискуссии в комментариях! 😊 Автор перевода: Евгений Лукашук Оригинал статьи
Система контролю версій "просто, як двері" або як навчитися користуватися git за пару годин

Автор: Дмитро Івченко

Введение Я достаточно давно использую git практически во всех проектах. За это время я успел многому научиться и хочу поделиться опытом с читателями. Как известно, все новое пугает. Так говорит половина моих знакомых, которые не захотели потратить пару часов, чтобы разобраться с git раз и навсегда. Скорее всего, после прочтения этой статьи и они, и вы поймете, что это проще, чем кажется. Я постараюсь показать, как эта VCS (Version Controll System) помогает разрабатывать проект. Эта статья рекомендована к прочтению тем, кто только делает первые шаги в разработке больших проектов. Итак, Git — это «распределенная система контроля версий», где «система контроля версий» означает то, что она запоминает историю изменения своих файлов, а распределенная значит то, что мы можем работать с ней без доступа к интернету. Для того чтобы начать: Git акаунт на https://github.com Консоль или же графический интерфейс. Человек по ту сторону монитора, что сможет это поставить под свою ось, будь то Windows, Mac OS или Linux . Моё окружение - это Mac OS X + Webstorm + Git + Bash . Если у вас Windows, то, скорее всего, будет msysgit (git-bash) + TortoiseGit. Как вы уже поняли, придется работать с консолью, потому вам будет необходимо усвоить несколько команд для установки git на вашу операционную систему. Поговорим немного о том, как же установить git: Установка для Linux Установить Git под Linux как бинарный пакет можно, используя обычный менеджер. Если у вас установлена Fedora, можно воспользовать yum: $ yum install git-core Если же у вас дистрибутив, например, Ubuntu,  то вам нужно: $ apt-get install git Установка для Mac Существует два способа установки Git на Mac OS X. Первый - использовать графический компоновщик Git, который вы можете скачать здесь: http://goo.gl/nB31LK или же, для более продвинутых пользователей, просто вставьте следующую строчку в терминал $ sudo port install gitweb + git-core +doc  + bash_completion Установка в Windows Настроить Git в Windows просто: у проекта msysGit процедура установки  самая легкая. Просто скачайте *.exe инсталлятор на GitHub: http://goo.gl/cmGQSj После установки у вас будет и консольная версия, и стандартная графическая. Остались вопросы по установке? Тогда вам сюда - https://goo.gl/lec2M0 Git — это коллекция инструментов для решения определенных проблем. Давайте рассмотрим компоненты Git пошагово: Коммиты Коммит (патч) — показывает некоторые изменения в файлах, что подверглись изменениям с момента предыдущего коммита. Коммит также содержит заголовки, в которых есть автор, время его создания и прочее. Git-коммит шифрует это в заголовке «parent», указывая, после какого коммита его нужно наложить. Как применить коммит к другому коммиту? Мы можем применить коммит только к полному набору файлов. Но после этого мы получим измененный набор файлов. Поэтому «коммит» также показывает состояние репозитория после добавления нового патча. История Git — это вся цепочка изменений для воссоздания кодовой базы с нуля, коммит за коммитом. История коммиттов может выглядеть так: Commit C: Родитель — B. Добавь “Systematics” в конец файла «readMe.txt». Commit B: Родитель — A. Добавь “Bionic” в конец файла «readMe.txt». Commit A: Создай файл «readMe.txt», содержащий “Cyber”. Commit A здесь первый, это значит, что у него нет родителя. Это значит, что его патч может только добавить новые файлы — в репозитории нет никаких существующих файлов для изменения. Во всем остальном это такой же коммит, как и все остальные. Итак, мы начинаем с пустого файла. Затем мы применяем патч A, который дает текст “Cyber”. Затем мы можем применить патч B, который даст нам “Cyber Bionic”.  Наконец, мы применяем C, который дает “Cyber Bionic Systematics”. Визуализация Git изображает историю коммиттов слева-направо, описанное выше будет выглядеть так: A → B → C. Тэги Тэги —  имена для коммитов, чем-то похожие на ветки. Однако, тэги должны быть постоянными: они, в основном, используются для названий версий релизов. Вы можете переключаться по тэгу, но тэг не может быть вашей «текущей веткой», и тэг никогда не появится автоматически, если вы коммитите впервые. Также тэги (чаще всего) глобальные, с неограниченным пространством имен, как ветки. Как просмотреть историю последних коммитов: git log покажет название последних трех коммитов в ветке. git log --oneline --graph --decorate намного лучше для просмотра (можете сами убедиться). Вы также можете установить tig, который делает, в основном, то же самое, но вы сможете использовать Enter на коммите, чтобы увидеть различия. git log --follow показывает нам все изменения, только для конкретного файла (директории). --follow означает - следить за историей файла, включая изменение имени файла. А сейчас время для команд, которые вы будете писать каждый день по многу раз $ git status покажет, в какой ветке вы находитесь и какие файлы подверглись изменениям. git add file_name добавляет только указанный файл (файлы) к патчу. git add -A (all) добавляет к патчу все изменения, которые нужны вам в последующем коммите. git commit -a откроет редактор для ввода текста коммита, затем будет создан коммит со всеми произведенными изменениями. git commit -m “what is to change” запишет коммит и даст ему то описание, которое есть в скобках git branch name создает новую ветку под названием name, основаную на коммите, но не переключается на нее. Для этого тебе понадобиться команда: git checkout -b origin/develop, которая создаст новую ветку, основанную на origin/develop, или на той, в которой вы находитесь, и переключится на нее. git checkout производит переключение в ветку, которую вы укажите. Вы также можете перейти в удаленную ветку, в тэг или в конкретный коммит.   git rm file_name говорит Git, что ты собираешься удалить файл, а также удаляет его физически. Конфликты слияния Если вы делаете слияние или отправку изменений, возможно, ваши изменения будут конфликтовать с чужими. Git выведет сообщение: "Автоматическое слияние не удалось, вы должны сделать это вручную". Если вы посмотрите git status, то обнаружите новую секцию для конфликтующих файлов. И вам нужно это исправить, чтобы завершить слияние. Откройте конфликтующий файл и увидите что-то вроде этого: <<<<<<< то что мы изменили ======== то что сделал ваш предшественник >>>>>>>> origin/develop   Это говорит нам о том, что двое людей отредактировали одни и те же строки в том же самом файле по-разному, а Git не знает, что должно быть результатом. Просто отредактируйте файл, как нужно, и выполните git add -А, чтобы сообщить Git, что вы готовы к отправке. Когда все конфликты будут решены и все файлы добавлены через git add -A, сделайте простой git commit для полного слияния. Примечание: Проверяйте, что вы действительно исправили все конфликты в файлах после слияния. Иногда, конфликт - это когда один программист отредактировал файл, а другой удалил этот файл. Когда такое случается, Git покажет тебе, кто что сделал. Надеюсь, что статья дала вам много новых знаний. И если это так - то вперед, создавать первый репозиторий на github.com и закреплять все, что прочитали.
Огляд текстових редакторів та деяких корисних плагінів

Автор: Антон Гончаров

Введение Привет всем. Многие студенты, которые решили связать свою жизнь с програмированием, задаются такими вопросами: - что выбрать своим главным инструментом в работе? - чем пользуется большинство? - чем пользоваться при написании своего кода? - что лучше? На эти вопросы нет однозначного ответа, каждый редактор по-своему хорош. Но постараюсь описать главные возможности тех редакторов, с которыми я сам столкнулся и пользовался в своей практике. Сразу внесем ясность и расставим точки над i. Средства разработки делятся на два главных класса: 1 – Интегрированные среды разработки (IDE) 2 - Текстовые редакторы (text editor) Официальное определение  интегрированная среда разработки можно найти по адресу: https://ru.wikipedia.org/wiki Официальное определение текстовый редактор по адресу: https://ru.wikipedia.org/wiki Попытаюсь объяснить  разницу между двумя этими классами своими словами. Интегрированная среда разработки - это как швейцарский нож или трактор, он мультифункционален, а следственно, и граничен. Может делать много, но некоторые вещи делает не так, как нам хотелось бы. Посудите сами: трактор ведь может тянуть тяжелый груз, копать и, главное, может передвигаться. Но все это он делает медленно. К примеру, если стоит задача переместиться из пункта “А” в пункт “Б” (что является одной из функций трактора), для этого лучше пригодится спорткар или обычный легковой автомобиль, для этой операции нами не нужен трактор со всеми его функциями. Следовательно, мы можем сделать вывод, что для определенных операций нам нужны определенные инструменты. В этой статье я не буду рассматривать IDE и их фичи (feature). Хочу рассказать о главных текстовых редакторах и их возможностях. Мой TOP текстовых редакторов: 1. Sublime Text 2. Brackets 3. Visual Studio Code (на этом месте был Atom) Пробовал, но не понравились/не подошли, по каким-либо причинам (поэтому не рассматриваю их тут) 1. Notepad++ (Сайт https://notepad-plus-plus.org/) 2. Komodo Edit (Сайт http://komodoide.com/komodo-edit/) 3. Atom (Сайт https://atom.io/) 4. Textmate (Сайт https://macromates.com) Итак ,начнем. Sublime Text 3 сайт: http://www.sublimetext.com/3 Чем нравится: кроссплатформенный легкий большая и понятная библиотека плагинов (дополнений) легко настроить под себя Что следует сделать после установки. Зайти на сайт https://packagecontrol.io/installation И сделать все согласно инструкции, открыть консоль Саблайма: найти вкладку View  и кликнуть Show Console. В появившемся снизу поле ввода вставить следующий код: import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by) Должно получиться вот так: Жмем Enter. Так мы установили Package Control в наш Sublime. Теперь мы можем устанавливать плагины в редактор, нажав сочетание клавиш Ctrl+Shift+P on Windows/Linux, ⇧⌘P on OS X На сайте https://packagecontrol.io/ вы найдете множество плагинов с детальным описанием, руководством установки и руководством использования. Теперь о плагинах. Плагин – грубо говоря, это дополнение программы. Официальное определение https://ru.wikipedia.org/wiki Плагины, которые пригодились мне в работе, возможно, пригодятся и вам. 1. Emmet - https://packagecontrol.io/packages/Emmet Плагин, который помогает быстро набирать код. С помощью шпаргалки вы быстро научитесь быстро набирать сложные конструкции html, указав лишь название тега и  порядок иерархического положения елемента на странице. Его официальный сайт http://emmet.io/ и шпаргалка http://docs.emmet.io/cheat-sheet/ Еще одно условие: для работы этого дополнения нужен предустановленный nodeJS. Найти его можно тут: https://nodejs.org/ Думаю, что nodeJS у вас уже был предустановлен, а если не был, то он вам точно еще пригодится не раз. 2. SublimeCodeIntel - https://packagecontrol.io/packages/SublimeCodeIntel Плагин портирован из текстового редактора Komodo Editor, помогает автодополнением к языкам программирования JavaScript, Python, Ruby, XML, HTML, CSS, PHP и другим. 3. SideBarEnchancements - https://packagecontrol.io/packages/SideBarEnhancements Плагин открывает новые возможности боковой панели для работы с Вашими проектами. 4. BracketHighlighter - https://packagecontrol.io/packages/BracketHighlighter Плагин позволяет отображать дополнительные скобки возле номеров строк, отображая, к примеру, блоки кода. 5. AutoFileName - https://packagecontrol.io/packages/AutoFileName Плагин говорит сам за себя, когда мы пишем пути к нашим фалам, помогает, выводя дополнительное выскакивающее окошко, с выбором папок или файлов. 6. HTML-CSS-JS Prettify https://packagecontrol.io/packages/HTML-CSS-JS%20Prettify Плагин “расческа”. Причесывает наш код, делает его более читабельным для человеческого глаза. 7. Color Highlighter - https://packagecontrol.io/packages/Color%20Highlighter Плагин подсвечивает цвета при написании вайлов CSS/Less/SASS/SCSS/Stylus. Остальные плагины, для работы с такими библиотеками как jQuery, Bootstrap, AngularJS,  советую устанавливать осторожно, потому как постоянно выскакивающие окошки с помощью какого либо плагина если не пугают, то начинают очень надоедать. Поэтому советую не превращать текстовый редактор в “неубранный балкон”. Также есть возможность установки из того-же Package Control множества тем и цветовых схем. Темы и цветовые схемы отличаются тем, что тема  меняет полностью весь внешний вид Sublime, цветовая схема  меняет только цвета подсветки синтаксиcа. Файл настроек находится во вкладке Preferences>Settings Default/Settings User. Почему именно два файла? Потому что вы сможете изменять только Settings User. Оба файла являются, по сути, JSON объектами, поэтому разобраться и изменять свои настройки вы научитесь довольно быстро. Brackets сайт - http://brackets.io/ Этот текстовый редактор также поддерживает большинство перечисленых плагинов, и даже если таковых вы не найдете, то их аналоги точно есть в песочнице. На правой боковой панели вы найдете несколько кнопок: Первая в виде молнии – LivePreview. Запускает страницу с рашрирением html в вашем браузере, который установлен по умолчанию, браузер будет сам обновлять страницу.  Вторая в виде лего – Extension Manager. При клике вызывает модальное окно в, котором содержатся вкладки меню для выбора плагинов, тем, их установке и удалению.  Третья в виде “слоев торта” со стрелочкой вверх – Extract for Brackets. Ради этой кнопки и стоит устанавливать этот редактор. Она позволяет после регистрации загрузить файлы psd формата для верстки прямо  из текстового редактора, не загружая ничего больше.  Кликаете по кнопке Open PSD Регистрируетесь или же входите под своим Adobe ID, загружаете PSD шаблон и начинаете верстать в разы быстрее. Кликнув по какому либо элементу на шаблоне, вы можете моментально перенести: текст, css свойства, или же выгрузить картинку из шаблона пряму в папку с проектом. С такими возможностями верстка становится в разы быстрее! Не агитирую, просто  советую попробовать) Visual Studio Code сайт - https://code.visualstudio.com/ Бесплатный кроссплатформенный текстовый редактор, основанный на технологиях замечательного текстового редактора Atom от GitHub. Подробное описание можно прочитать по ссылке ниже: https://uk.wikipedia.org/wiki/Visual_Studio_Code Также будет полезна ссылка с документацией: https://code.visualstudio.com/Docs/setup Отличный текстовый редактор от компании Microsoft. Облегченная и кроссплатформенная версия Visual Studio. Имеет схожий дизайн со своим старшим собратом. Похожие темы и подсказки в виде выпадающих окошек (контекстные подсказки). Так что разработчикам, перешедшим с Visual Studio, будет гораздо легче адаптироваться. Еще несколько плюсов с коробки: поддержка таких языков програмирования: JavaScript, C++, C#, PHP, XML, Java, Objective-C, HTML, CSS, Less, Sass и т.д. (полный перечень находится в документации). отладчик инструменты для работы с Git автодополнения в стиле Emmet. Настоятельно рекомендую обратить внимание и попробовать Visual Studio Code. Даже просто потому, что вы установите его и все, дальше просто приступаете к работе :) На этом все. Думаю, что изложил свои мысли достаточно простым языком. Помните, что не важно, в каком текстовом редакторе или IDE вы работаете, это всего лишь инструмент, в конечном итоге вы можете остановить свой выбор на обычном блокноте и там разрабатывать приложения, для того, чтобы писать программы не обязательно иметь подсветку синтаксиса, всякие плюшки, главное, чтобы вам было удобно и при написании вы чувствовали себя комфортно. Выбор за вами. Удачи!
Застряли в поиске работы? Вам необходим карьерный консультант, а не еще один курс

Автор: Виктория Чабан

Карьерный путь сегодня выглядит совсем иначе, чем десять лет назад. Рынок труда меняется быстрее, чем мы успеваем обновлять резюме. Новые профессии появляются каждый год, компании сокращают штаты или перестраивают процессы, а конкуренция за хорошие вакансии растёт. В таких условиях даже опытные специалисты иногда теряются — не понимают, в каком направлении двигаться, как выгодно подать себя или как вернуть уверенность после неудач. Именно здесь появляется карьерный консультант — специалист, который помогает разобраться в профессиональных целях, выстроить стратегию развития и сформировать сильное позиционирование на рынке. Когда стоит обратиться к карьерному консультанту Карьерная консультация — это не только для тех, кто «не знает, кем быть».Она полезна на любом этапе профессионального пути. 1. Если вы студент или джун, который делает первые шаги Вы закончили курсы, получили базовые навыки, но не понимаете, как попасть на первую работу? Карьерный консультант поможет: составить резюме, которое действительно читают рекрутеры, правильно оформить профили на джоб-бордах и LinkedIn, понять, какие навыки нужно прокачать в первую очередь, подготовиться к собеседованию без стресса и паники. 💡 Результат: вы не тратите месяцы на безуспешные отклики, а быстрее получаете приглашения и первый оффер. 2. Если вы хотите перейти в IT из другой сферы Карьера-свитч — это смелый шаг, но без стратегии легко застрять. Карьерный консультант поможет превратить ваш предыдущий опыт в преимущество, а не в «пустое место» в резюме. Он покажет, как грамотно объяснить, почему ваш прошлый опыт ценен, даже если он не связан с технологией напрямую. 💬 Пример: Бухгалтер, переходящий в тестирование, может подать себя как внимательного аналитика с высоким уровнем ответственности. Учитель, ставший фронтенд-разработчиком, — как человека, умеющего структурировать информацию и объяснять сложное простыми словами. Карьерный консультант поможет найти именно эту историю. 3. Если вы уже работаете, но хотите карьерного роста Часто специалисты годами остаются на одной позиции не потому, что не заслуживают повышения, а потому что не умеют заявить о себе. Консультант поможет проанализировать ваши достижения, выстроить аргументацию для повышения или подготовить стратегию перехода на новый уровень (Middle → Senior, Senior → Team Lead). 💡 Вы получите: чёткую стратегию развития, план по обучению и развитию soft skills, новое видение рынка и своих возможностей. 4. Если вы ищете работу после перерыва После декрета, релокации, переезда или профессионального выгорания сложно восстановить уверенность и понять, с чего начать.  Карьерный консультант поможет: обновить резюме и профили, определить актуальный уровень знаний, найти подходящие вакансии, вернуть уверенность в диалоге с рекрутерами. 🎯 Особенно это важно в IT, где технологии обновляются каждый год, и нужен взгляд со стороны, чтобы оценить, как вернуться в профессию. 5. Если вы не понимаете, чего хотите дальше Даже опытные специалисты порой теряются в вопросе «что дальше?».  Карьерный консультант не даст готового ответа, но поможет найти собственные ориентиры: понять, в чём ваша профессиональная ценность, какой формат работы вам подходит (офис, remote, фриланс), что вас действительно мотивирует. После консультации вы перестаёте действовать хаотично — и начинаете двигаться осознанно. Как карьерный консультант экономит ваше время и деньги На первый взгляд может показаться, что консультация — это дополнительные расходы. Но на деле — это инвестиция, которая возвращается в виде ускорения результата. 1. Экономия времени Консультант помогает избежать месяцев хаотичного поиска.Он уже знает, как работает рынок, где искать вакансии, как общаться с рекрутерами и что действительно ценится. Вместо того чтобы теряться в десятках сайтов, вы получаете чёткую дорожную карту. 💬 Например: Без стратегии можно рассылать резюме полгода и не получить ни одного ответа. С консультантом вы понимаете, какие позиции вам подходят, как адаптировать резюме под каждую — и получаете обратную связь уже через пару недель. 2. Экономия денег Карьерная консультация часто стоит меньше, чем один месяц безуспешного поиска. Но она помогает вам: получить высшую зарплату благодаря правильно построенной самопрезентации, избежать неправильного выбора (курсов, направлений, компаний), не тратить деньги на бессмысленные тренинги и сертификаты. 💡 Консультант подскажет, куда действительно стоит вложить ресурсы, а что не принесёт пользы именно вам. 3. Объективный взгляд со стороны Мы часто недооцениваем собственные достижения.  Карьерный консультант помогает оценить себя глазами работодателя, найти сильные стороны и убедительно их показать. В IT, где много похожих кандидатов, это критично — важно уметь выделиться. 4. Стратегический эффект Консультация — это не разовая услуга. Это стратегия. После неё вы понимаете, куда движетесь, какие шаги нужны для следующего уровня и как выстроить карьеру надолго. Это не просто поиск работы — это управление своим профессиональным развитием. 🔹 Вывод Карьерный консультант — это не «психолог по работе», а партнёр, который помогает увидеть свои сильные стороны и превратить опыт в возможности. Он не ищет вакансии за вас — он учит вас делать это осознанно и эффективно. Помощь консультанта нужна не только новичкам, но и тем, кто хочет роста, смены направления или ясности в будущем. Главное, что вы получаете после такой работы, — это чёткое понимание: кто вы, куда идёте и как туда попасть. Если посчитать, сколько времени, нервов и ресурсов тратят люди, ищущие работу без системы, — становится ясно: консультация карьерного эксперта — это не расход, а разумная инвестиция в себя. 💬 Помните: одна правильная консультация может сэкономить вам месяцы поиска — и привести к работе, которая действительно изменит жизнь.
Angular vs React - що крутіше?

Автор: Dominik T

Angular – технология с полным набором инструментов и к тому же с лучшими вариантами подхода к решению. Кому-то он подходит, а кому-то – нет. С другой стороны, React – небольшая технология, которая необходима вам только при создании какого-то приложения.  Обе технологии имеют свои достоинства и недостатки. Какая из них подойдёт вам больше? Попытаемся выяснить в этой статье. Технологии Вот основные технологии, о которых я буду говорить: Angular React Vue Кривая обучения Допустим, вы знаете JavaScript + ES2015 достаточно хорошо. Какую следующую технологию будет проще выучить? Vue – наилучший выбор, если вы ищите легкости в процессе изучения технологии. React – менее абстрактный, тем не менее, вам понадобится больше времени, чтобы изучить best practices, так как есть много вариантов написать одно и то же или ошибиться. А вот после изучения Angular вы также будете знать всё, что связанно с ним (typescript, MVC…). Angular - большая технология и учить придётся долго.   Масштабируемость Angular - легко масштабируемый благодаря своему дизайну, который так же хорош, как и мощная командная строка. React требует больше проверок и поэтому более масштабируемый, чем Vue и, я думаю, что частично это правда. Vue идёт сразу после React. Он хорош, однако ему не хватает лучших практик масштабируемости, из-за чего вы получаете очень запутанный код. Совместимость с другими технологиями React. Несмотря на то, что он не работает с DOM-деревом, он основан на чистой JavaScript логикe и популярeн настолько, что содeржит в сeбe альтeрнативы библиотeкам, работающим с DOM. Vue прекрасно работает как с ДОМ-деревом, так и с JavaScript. Второе место занимает лишь потому, что у него меньше библиотек, которые могли бы быть действительно полезны для обоих (как для ДОМ, так и для JavaScript). Angular мог бы быть лучше, если бы не typescript, который требует строгой типизации.   Инструменты React, Angular and Vue. Все перечисленные технологии имеют отличные CLI и работают с любым инструментом по типу webpack. Пользователи и популярность React точно стал наиболее популярным в 2016, когда его стали использовать англоговорящие frontend и full stack разработчики. React – хороший выбор для мобильных и даже десктопных приложений на JavaScript. Vue и Angular. Vue – потому что он очень быстро развивается. Angular – потому что он создан Google, а его предшественник Angular 1 был когда-то очень популярен. Востребованность React и Angular. В зависимости от того, где вы находитесь, зависит, какая технология будет доминировать. Angular больше используют в Азии, особенно в Индии, а React – в англоязычных странах, таких как US и UK. Vue менее популярен и не поддерживается большими компаниями, поэтому остальные отдают предпочтение Angular и React. Производительность По этому параметру не ставлю ранги, так как все они сопоставимы. Возможно, React станет немного быстрее, когда полностью будет поддерживать Fiber, но сейчас существует только бета-версия. Перспективы для компаний Angular имеет open source лицензию. Он поддерживается Google, что, возможно, делает его лучшим выбором для компании, и разница между проектами Angular невелика.    React был бы очень хорошим выбором, если бы не лицензия с патентом. Однако, существуют бесплатные альтернативы, которые работают также, как и React. Например, Infernojs или мой любимый rax. Vue – не дитя большой компании, это очень успешный сторонний проект одного человека. Компании часто игнорируют его, хотя, возможно, и не стоило бы. Вне сети Рендеринг –  как раз то, о чем можно много говорить. Все технологии способны осуществлять его, но некоторые справляются лучше, чем другие. React – лучший выбор благодаря react native, alibaba rax, reactWindows и next.js. Vue подойдёт vue-разработчикам, которые предпочитают разработку под мобильные устройства. Спасибо за это alibaba weex. У Angular есть ionic 2 и nativescript, но эти технологии не позволяют достичь производительности react native. Простота и длина кода Vue имеет предварительно встроенные привязки данных и MVC модель, его легче настроить, нежели Angular и React. React пугающе прост для понимания, но нужно реально много времени, чтобы настроить react project. Angular совсем непростой. Эта сложность вызывает много путаницы 3rd party libraries и синтаксиса. Время разработки Vue, безусловно, лёгок в установке и не требует много изменений или синтаксиса, за что его и любят. Он был создан для борьбы с утомительной работой. React настраивается дольше, но после начала работы над приложением будет легко добавлять новые фичи. Angular хоть и является весьма конкурентоспособным, но количество ненужного синтаксиса, который он требует для работы простых вещей, отбрасывает его на последнее место. Размер Vue - наименьший и много в себе содержит. Вы можете подумать, что это не имеет значения, но если речь пойдёт о дешёвом Android 3G смартфоне, то вы уже не будете так уверены. React - больше чем Vue, но все же меньше, чем Angular. Angular - больше всех предыдущих, что вызывает увеличение времени загрузки и проблемы производительности на мобильных устройствах. Будущее Вот лично мои прогнозы для этих технологий на 2017 год: Vue будет приобретать популярность и всё большее количество разработчиков переключится на него. Вполне вероятно, что это может заставить крупные компании продвигать и поощрять Vue. Команда React представит Fiber  и сделает React быстрее, чем Vue и Angular. Создатели Angular попытаются привлечь больше людей, но, скорее всего, им это не удастся. Так что же лучше для вас? Подводя итог, можно сказать, что нет идеального решения, и никогда не будет. Тем не менее, вот полезные советы, которые помогут вам сделать выбор: Если вы разработчик «до мозга костей», тогда попробуйте все и выбирайте между Vue или React, доверяйте своему чувству. Если вы новичок в разработке, выбирайте или Vue, или React. Angular подойдёт компаниям с большими командами. Google -> Angular. Если любите простоту, тогда выбирайте Vue. Если нравится использовать шаблоны, тогда выбор стоит между Vue или Angular. Если предпочитаете JavaScript и JSX, попробуйте поработать с каждой технологией. Если вы работаете с Typescript, используйте Angular или Vue. Выбирайте подходящую технологию поскорее, не стоит пребывать в неопределённости. Я сомневался несколько месяцев, и это было невесело. Я решил пожертвовать популярностью и выбрал то, что считал для себя наилучшим вариантом – Vue. Ютубер funfunfunction сказал лучшее, что я когда-либо слышал про JS framework fatigue: «Существует точка в вашей карьере программиста, когда вы понимаете, что это не лучший инструмент». Здесь нет правильного или неправильного выбора, его просто необходимо сделать. Так что, продолжайте учиться и исследовать. Все будет учить Вас чему-то новому. Оригинал статьи на английском языке. 
Як не здатися і все ж таки стати програмістом?

Автор: Дмитро Хорошилов

Вы день и ночь в поте лица изучаете синтаксис, фреймворки, решаете задачи, посещаете курсы, смотрите видеоуроки, читаете книги, но все никак не можете сдвинуться с мертвой точки — наконец-то начать программировать самостоятельно или найти первую работу. Вы раз за разом открывает IDE, чтобы начать писать код, но потом откладываете это занятие. Потому что в данный момент вам меньше всего хочется писать код. И вы по пятому кругу читаете посты на фейсбуке, смотрите видео с котиками и глупые гифки. Вам начинает казаться, что изучать программирование - это не ваше. Вы в очередной раз открываете важную и сложную книгу по программированию, но, как бы вы не пытались сосредоточиться, информация не откладывается в памяти. Более того, постоянно приходится по несколько раз перечитывать предложение за предложением, чтобы хоть немного понять, о чем речь. Знакомо? Иногда, особенно в процессе изучения чего-то нового и сложного, ваш мозг начинает играть с вами в каверзные игры. Он всеми силами пытается сопротивляться обучению, вгоняя вас в состояние прокрастинации и ступора. Самым неверным в сложившейся ситуации будет сдаться и отдаться во власть отчаяния. В этом материале мы поговорим с вами, как справиться с прокрастинацией, как заставить мозг учиться и как в конечном итоге получить желаемую работу, влиться в среду профессиональных разработчиков. Что такое прокрастинация? На самом деле, прокрастинация — это привычка. Вы шаблонно реагируете на какой-то раздражитель, когда вам следует заниматься тем, чем вы не хотите. Как следствие, вы пытаетесь отложить «нелюбимое» дело в долгий ящик и придумываете какие угодно дела взамен, лишь бы не делать что-то важное. Но то, что приносит удовольствие на короткое время, не всегда полезно в долгосрочной перспективе. Благо, с прокрастинацией можно бороться, как и с любой другой плохой привычкой. Как бороться с прокрастинацией? Вот несколько советов, что стоит делать и на что необходимо обращаться внимание: - Не тратьте силу воли на борьбу с прокрастинацией. Потому что это настолько же безрезультатно, как и бороться с пятиголовым драконом без специального оружия. Вы будете отрезать голову и усилием воли заставлять себя учиться, то есть тратить много сил, а голова будет опять вырастать. В итоге, вы в какой-то момент просто бросите эту затею и уйдете с поля битвы. - Не оставляйте все на последнюю минуту. Представьте спортстмена, который начинает тренироваться за два дня до забега. Как думаете, как он будет себя чувствовать и  в каком состоянии будут его мышцы, если он будет заниматься два дня по 10 часов каждый, вместо 2-х месяцев по часу? Как думаете, после такого у него будут шансы пробежать марафон? Очевидно, что нет. Как и с мышцами, мозг необходимо тренировать постепенно, понемногу, но постоянно. Лучше учитесь по 20 минут, но на протяжении 10 дней, чем по 10 часов, но на протяжении двух дней. - Делайте перерывы во время учебы. Да, позволяйте себе отдыхать и хорошо высыпаться. Не зубрите дни и ночи на пролет. Подолгу сидя над учебой, вы не усвоите больше. Благодаря небольшим передышкам, наш мозг получает возможность «переварить» полученную информацию. - Не откладывайте на потом. Чем на дольше откладываем, тем больше всего нам надо изучить. А значит, тем страшнее и больнее нам этим заняться. Парадоксально, но факт, чем лучше вы овладеваете каким-то навыком, тем больше вам нравится им заниматься. - «Коллективная мудрость». Не бойтесь обращаться за советом к коллегам, другим студентам. Если вы занимаетесь в одиночку, найдите обязательно себе ментора, к которому сможете обращаться за советом в моменты ступора. Если у вас нет возможности найти наставника, сходите на курсы. Старайтесь больше задавать вопросов, даже если они вам кажутся чрезвычайно глупыми. - Ориентируйтесь на процесс, а не на результат. Очень часто мы зацикливаемся на результате. И если он не достигнут, нас посещают мысли, отзывающиеся болью в мозгу, провоцируя нас прокрастинировать. Например, мы думаем: чтобы найти свою первую работу, так много еще надо всего выучить. Отпустите эти мысли, лучше сосредоточьтесь на процессе: я учу, я пишу, я делаю. И вы не заметите, как в скором времени скажете: я работаю. В этой части мы поговорили с вами о том, как лучше учиться, как бороться с ужасной и неукротимой прокрастинацией. Когда прокрастинация побеждена Теперь я бы хотел дать несколько рекомендаций о том, что делать, когда вы победите своего змея. Как только вы научитесь держать себя под контролем, ваши дела заметно пойдут вверх. Вы будете все больше получать удовольствия от процесса получения и практического применения новых знаний. В какой-то момент вам покажется, что вы готовы начать работать. Чтобы опять не попасться в капкан прокрастинации, поставьте себе цель и придумайте мотивацию. Например, цель: я найду первую работу за 3 месяца. Обязательно спланируйте, какие шаги вы будете предпринимать для того, чтобы найти работу: - напишу хорошее резюме на двух языках, - буду отслеживать вакансии и реагировать на них, - составлю список компаний, которые подходят мне по профилю — разошлю им резюме с мотивационным письмом, - начну готовиться к собеседованиям: подтягивать теоретические знания, подготовлю свое первое программистское «портфолио». А вот мотивация — это очень индивидуально, но обязательно важно. Найдите что-то свое: деньги, отдых, друзья, любимые, покупки и т.д. Надеюсь, теперь, когда вы знаете, что такое прокрастинация и как с ней бороться, вам станет намного проще двигаться по намеченному вами пути и не сбиваться с него. Главное, помните, что отдых тоже полезен. Борясь со своими чертиками, не забывайте хорошо высыпаться (это самое главное условие для хорошего усваивания знаний), отвлекаться, например, заниматься спортом, хорошо и вкусно питаться. Я уверен, что следуя этим полезным советам, вы очень скоро добьетесь успеха!
Введення в розробку програм під iOS. Частина 2.

Автор: Volodymyr Bozhek

                                                       Здравствуйте дорогие читатели. В этом уроке мы добавим форму списка товаров на складе. Разберем класс “UITableViewController” и как с ним работать. Откройте проект Warehouse из предыдущего урока. Необходимо добавить в наш проект две View. На одной будут содержаться все товары, которые есть на складе. На второй форма редактирования товара. Для реализации View со списком всех товаров мы будем использовать готовый табличный класс контроллера “UITableViewController”. Данный класс уже реализовал все необходимые протоколы внутри себя для уверенной работы табличного контроллера. Есть и другой вариант, который мы не будем рассматривать в этом уроке, это сделать свой класс “UITableViewController”, унаследовшись от базового класса “UIViewController” и реализовав протоколы “UITableViewDelegate” и “UITableViewDatasource”. В панели навигатора откройте модуль “Main.storyboard”. Найдите в библиотеке компонентов, компонент “Table View Controller” и перетяните в пустую область дизайнера рядом с View входа в систему. В панели навигатора, нажмите правой кнопкой мыши на папке “Warehouse” и в контекстном меню выберите пункт “New File...”. Откроется диалоговое окно добавления новых модулей в проект. Найдите в нем модуль “Swift File”, выделите его и нажмите кнопку “Next”. Появится диалоговое окно задания названия добавляемого модуля. В поле “Save As” введите “SuppliesViewController.swift”, нажмите кнопку “Create”.                                                                                                           Откройте модуль “SuppliesViewController.swift”, вы увидите в нем только “import Foundation”, это добавление пространства имен на базовую библиотеку классов Swift (аналог в C#, пространство имен “System”). Удалите эту строку. Добавьте в этот модуль следующий код: Разберем это код построчно. На 9 строке, мы подключили пространство имен “UIKit” в нем содержатся классы для взаимодействия с компонентами пользовательского интерфейса в iOS. На 11 строке, мы объявили класс с именем “SuppliesViewController”, который наследуется от класса “UITableViewController”. На 12 строке, мы объявили строковый массив с именем “supplies”, в этом массиве содержится статический список товаров (чуть позже мы заменим его на модель). На 17 строке, мы переопределили метод “viewDidLoad” класса “UITableViewController”, данный метод вызывается когда View начинает загрузку. В этом методе необходимо делать предварительную инициализацию компонентов, какими либо данными. На 18 строке, мы вызываем базовый метод “viewDidLoad” класса “UITableViewController”, с помощью ключего слова “super” (аналог в C#, ключевое слово “base”). Начиная с 21 строки и по 33 строку, мы переопределяем поведение базового контроллера “UITableViewController”, для отображения данных в нем. Более конкретно, мы переопределяем реализацию протокола “UITableViewDataSource”. На 21 строке переопределенный метод “numberOfSections”, возвращает количество секций в нашем табличном представлении. Секции это разделители между сгруппированными наборами ячеек в табличном представлении. У нас будет одна секция. На 25 строке переопределенный метод “numberOfRowsInSection”, возвращает количество ячеек в секции. Секция у нас одна, поэтому возвращаем количество товаров, которые будут в этой секции. На 29 строке переопределенный метод “cellForRowAt indexPath”, возвращает представление ячейки таблицы. На 30 строке мы создаем экземпляр типа “UITableViewCell” с повторно используемым идентификатором “сell”, первый параметр в инициализаторе это стиль ячейки, второй параметр это идентификатор этой ячейки в табличном представлении. Данный метод вызывается столько раз, сколько ячеек мы добавляем в нашу таблицу. Каждый вызов данного метода содержит в аргументе “indexPath” текущую позицию ячейки относительно таблицы. На 31 строке мы обращаемся к компоненту “Label”, расположенному внутри ячейки, чтобы задать текст, для этого используем свойство “textLabel”, затем от этого свойства уже обращаемся к свойству “text”, чтобы задать текст компонента “Label”. Текст мы извлекаем из массива товаров “supplies” через subscript (по индексу). Чтобы получить текущий номер строки, необходимо обратиться к аргументу “indexPath” и обратиться к свойству “row”. На 32 строке мы возвращаем созданную ячейку. Эта ячейка затем внутренними механизмами будет добавлена в табличное представление. Откройте модуль “Main.storyboard”, выделите добавленный ранее “Table View Controller”. В панели свойств, откройте вкладку “Show the identity inspector”, найдите поле “Class”, введите значение “SuppliesViewController”. Через это свойство мы подвязываем класс контроллера “SuppliesViewController” к нашему табличному представлению в дизайнере. Найдите свойство “Storyboard ID”, задайте значение в нем “SuppliesViewController”. Данное свойство содержит уникальный идентификатор представления, этот идентификатор будет позднее использоваться нами при поиске табличного представления программно в экземпляре “Storyboard”. Теперь нам необходимо добавить в обработчик события на нажатие кнопки “Вход”, переход на табличное представление. Откройте модуль “ViewController”. Добавьте код в метод “loginButtonTapped”, как показано ниже (смотреть выделенный код): Разберем добавленный код: На 23 строке, правым операндом мы обращаемся к свойству “storyboard” контроллера “ViewController”, в этом свойстве содержится экземпляр модуля “Main.storyboard”. Вызов метода “instantiateViewController” производит поиск представления по идентификатору “Storyboard ID”, которое мы задавали ранее, в модуле “Main.Storyboard” и возвращает базовый класс контроллера “UIViewController”. Класс “UITableViewController” наследуется от класса “UIViewController”, соответственно допустимо приведение данного экземпляра к классу “UITableViewController”. Класс “SuppliesViewController“ наследуется от класса “UITableViewController”. Соответственно мы приводим полученный экземпляр в правом операнде к типу “SuppliesViewController” и присваиваем его левому операнду c именем “controller”. Левый операнд объявлен константой, поскольку он не будет в дальнейшем проходить переинициализацию. На 24 строке, мы обращаемся к свойству “navigationController”, в данном свойстве содержится экземпляр класса “UINavigationController” (сейчас он не инициализирован и содержит значение “nil”). Затем от экземпляра этого свойства мы вызываем метод “pushViewController”. Данный метод принимает два аргумента, экземпляр контроллера, который надо отобразить и флаг использовать анимацию при отображении контроллера или нет. Если вы сейчас запустите приложение, заполните поля “Имя пользователя” и “Пароль пользователя” и нажмете кнопку “Вход”, вы получите ошибку, так как текущее представление не содержит экземпляра “UINavigationController”. Давайте это исправим. Откройте модуль “Main.storyboard”. Выделите в дизайнере представление “ViewController”, затем в меню Xcode выберите “Editor -> Embed In -> Navigation Controller”. После этого действия в дизайнер Storyboard добавится представление “Navigation Controller” привязанное к представлению “ViewController”. Данное представление инициализирует свойство “navigationController” класса “ViewController”, данное свойство имеет тип доступа только для чтения и не подлежит переинициализации в коде контроллера. Модуль “Main.storyboard” должен выглядеть так: Теперь запустите приложение. Заполните поля “Имя пользователя” и “Пароль пользователя”, нажмите кнопку “Вход”. Откроется табличное представление:   Но в нем нас смущает “Top Bar”, который отображается сверху. Его не должно быть видно на странице входа в систему. Чтобы его убрать, откройте модуль “Main.storyboard”, выделите представление “ViewController”, в панели свойств перейдите на вкладку “Show the attributes inspector”. На этой вкладке найдите свойство “Top Bar” и установите для него значение “None”, в дизайнере “Top Bar” пропал, но вот если вы запустите приложение снова, то он остался на прежнем месте. Чтобы его скрыть, перейдите в модуль “ViewController.swift”. После переопределенного метода “viewDidLoad” вам необходимо переопределить еще два метода класса “UIViewController” это методы “viewWillAppear” и “viewWillDisappear”. Исправьте код в соответствии с кодом ниже: Разберем построчно внесенные изменения. На 33 строке мы переопределили метод “viewWillAppear”. Данный метод вызывается когда наше представление уже появилось на экране. На 34 строке мы вызываем метод “viewWillAppear” из базового класса “UIViewController”, чтобы сохранить его поведение. На 35 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. Данный метод скрывает или отображает “Top Bar” и принимает два аргумента, первый аргумент указывает скрыть или отобразить “Top Bar”, второй указывает, сделать это с анимацией или без. В этом методе мы скрываем “Top Bar”. На 38 строке мы переопределяем метод “viewWillDisappear”. Данный метод вызывается когда наше представление перекрывается другим представлением поверх него. На 39 строке мы вызываем метод “viewWillDisappear” из базового класса “UIViewController”, чтобы сохранить его поведение. На 40 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. В этом методе мы отображаем “Top Bar”. Запустите приложение. Теперь все отображается правильно. С одной стороны да, с другой нет. После того как мы выполнили переход на табличное представление, в нем в левом верхнем углу отображается кнопка навигации “< Back”, но ведь наше приложение на русском. Давайте изменим текст этой кнопки на “<- Назад”. Откройте модуль “SuppliesViewController.swift”. После метода “cellForRowAt indexPath”, добавьте следующий код: Разберем этот код построчно. На 36 строке мы объявили метод с именем “initNavigationButtons”, который ничего не возвращает и ничего не принимает. На 37 строке мы вызываем обращаемся в левом операнде к свойству “navigationItem” в котором содержится экземпляр класса “UINavigationItem”. Данное свойство предоставляет доступ к системным кнопкам навигации. От экземпляра свойства “navigationItem” мы обращаемся к свойству “leftBarButtonItem” в котором содержится экземпляр класса “UIBarButtonItem” инициализированный по умолчанию текстом “< Back”. В правом операнде мы создаем новый экземпляр класса “UIBarButtonItem” и вызываем его инициализатор, который принимает 4 аргумента. Первый аргумент “title” задает текст кнопки навигации. Чтобы в текст вставить специальный символ Unicode, необходимо в меню среды разработки Xcode выбрать “Edit -> Emoji & Symbols”, затем выбрать подходящий символ и нажать на него. Второй аргумент “style” принимает перечисление типа “UIBarButtonItemStyle”, в этом аргументе мы задаем значение по умолчанию. Третий аргумент “target” имеет тип “AnyObject?”, в него мы передаем экземпляр нашего контроллера. Четвертый аргумент “action” имеет тип “Selector?”, в него мы передаем метод обработчик нажатия на кнопку навигации. Обратите внимание на запись “#selector(SuppliesViewController.backToParent)”, в этой записи с помощью выражения “#selector” создается экземпляр типа “Selector”. В скобках мы указываем путь к методу обработчику события в формате “Класс контроллера . метод”. На 40 строке мы объявляем метод обработчик события нажатия по кнопке навигации с именем “backToParent”, который не принимает аргументов и ничего не возвращает. На 41 строке мы обращаемся в правом операнде к свойству “navigationController” и вызывает от экземпляра этого свойства метод “popViewController”. Данный метод скрывает текущее представление и переход на предыдущее представление в иерархии вызова представлений. Принимает один аргумент, который задает стиль открытия предыдущего представления с анимацией или без. Добавьте в метод “viewDidLoad”, вызов метода “initNavigationButtons” (19 строка). Запустите приложение. Вы увидите такой результат: На этом урок подошел к концу. На следующем уроке, мы создадим модель товара. Добавим кнопку добавления нового товара, добавим форму редактирования товара и зададим поведение в табличном представлении на редактирование/удаление товара. После того, как редактирование товаров будет завершено, можно будет приступать к уроку в котором будут разбираться иконка приложения и папка Assets.
Введення в розробку програм під iOS. Частина 1.

Автор: Volodymyr Bozhek

Здравствуйте, дорогие читатели. Данный блок будет продолжением темы “Введение в  разработку под iOS", которую мы затронули ранее. В этом уроке мы: рассмотрим пользовательский интерфейс среды разработки; сделаем форму авторизации для нашего приложения Warehouse; научимся добавлять обработчиков событий на элементы управления. Работу продолжим на примере приложения Warehouse, который мы создавали в первом уроке. В среде разработки Xcode можем видеть две панели. Левая из них - это панель навигации по составляющим проекта: Правая делится на панель свойств и панель библиотеки компонентов. Панель свойств: Библиотека компонентов: Также вы можете использовать набор функций в панели инструментов, который находится сверху: Обратите внимание на кнопки этой панели справа: Нажимая на них, вы будете скрывать или отображать левую, правую, нижнюю панель в среде разработки. Левее находится блок функциональных кнопок для отображения данных выбранного модуля: Кнопка отображения текущего представления модуля. Кнопка отображения связанного модуля с текущим модулем. Применяется для того, чтобы видеть на одной половине экрана код контроллера, а на другой - дизайнер представления.  Кнопка отображения изменений с момента последней заливки данных в репозиторий. Используется, если ваш проект находится под управлением GIT Панель снизу - это панель отладки и логирования: В панели навигации откройте модуль “Main.storyboard”. Обратите внимание на стрелку слева, которая указывает на View. Эту стрелку можно перемещать, зажав ее левой кнопкой мыши. Отмечу, что при включении в настройках вашей OS X эмуляции двухкнопочной мыши важно понимать, что на тачпаде нет понятия нажатия левой или правой кнопки мыши, есть просто нажатие. Данная стрелка означает точку входа в наше приложение. Точка входа привязывается только к одной View, и эта View будет отображаться первой при старте нашего приложения. Исключением может быть только модуль конфигурации предварительной заставки “LaunchScreen.storyboard”, тогда сначала будет появляться заставка с презентацией функций приложения, а затем наша View, на которую была привязана точка входа. Нажмите на View, на панели свойств откройте вкладку “Show the identity inspector”. В поле “Class” содержится класс контроллера, который привязан к нашему представлению (View). Рядом с названием класса “ViewController” есть серая иконка со стрелкой вправо, если вы нажмете на нее, то попадете в модуль контроллера “ViewController”. Вернитесь в модуль “Main.storyboard”. В свойствах дизайнера внизу выберите устройство “iPhone 6s”: Перенесите из библиотеки компонентов два элемента управления “Text Field” и один элемент управления “Button” на View. Выделите элемент управления “Text Field” справа и слева от него будут видны квадратики, потяните за правый квадратик и растяните поле на всю ширину экрана. То же самое проделайте со вторым элементом управления “Text Field” и элементом управления “Button”. У вас должно получится так, как на картинке ниже: Обратите внимание на кнопки внизу дизайнера: Это кнопки для отображения панелей свойств элементов управления. На этих панелях задаются выравнивания элементов управления либо относительно View, на котором они расположены, либо относительно других элементов управления, находящихся с ними по соседству. В терминологии Apple они называются ограничениями (Constraints). Это отдельная и довольно объемная тема для понимания, поэтому пока мы будем пользоваться только одной панелью задания ограничений, более простой для понимания. Выделите первый элемент управления “Text Field”, затем нажмите на кнопку “Pin” в дизайнере: Появится диалог ограничений для данного элемента управления: Выпадающие списки сверху, снизу, слева и справа - это допустимое расстояние элемента управления относительно стен View соответственно. Нам необходимо задать ограничение, чтобы наш элемент управления остался на том же месте, где он сейчас расположен на View , но при этом, в зависимости от ширины экрана устройства, подстраивался под эту ширину. Чтобы этого добиться, снимите галочку с “Constrain to margin”, отметьте галочкой поле “Height”, чтобы высота элемента управления не менялась. Отметьте линии верхняя, левая и правая. У вас должно получиться вот так: Заметьте, кнопка “Add 4 Constraints” стала активной. Нажмите на нее. Теперь проделайте ту же самую операцию для второго элемента управления “Text Field” и элемента управления “Button”. Значения в выпадающих списках не меняйте. Можно запустить приложение и посмотреть, что получилось. Остановите приложение. Откройте модуль “Main.storyboard”. Теперь нам необходимо привести в порядок пользовательский интерфейс и сделать его понятным для пользователя. Выделите первый элемент управления “Text Field”. В панели свойств откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите имя пользователя”. Свойство Placeholder задает текст, который отображается в поле ввода, когда это поле не заполнено. Выделите второй элемент управления “Text Field”, в панели свойств, откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите пароль пользователя”. Затем найдите поле “Secure Text Entry” и отметьте его галочкой. Данное свойство будет отображать звездочки вместо текста, вводимого пользователем, используется для полей ввода паролей. Выделите кнопку “Button”, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле без названия с текстом “Button”, удалите этот текст и добавьте текст “Вход”. Найдите поле “Text Color”, установите цвет текста “White Color”. Найдите поле “Background”, установите фон кнопки цветом “Blue Color”. Перетащите из библиотеки компонентов на View под кнопку “Вход” элемент управления “Label”. Растяните его по ширине экрана. Задайте ему такие же ограничения, как мы задавали выше для прошлых элементов управления. Выделите элемент управления “Label”, в панели свойств, откройте вкладку “Show the attributes inspector”. На этой вкладке найдите поле без названия с текстом “Label”. Удалите из него текст, введите текст “Нет ошибок”. Найдите поле “Alignment”, задайте выравнивание текста по центру. Выделите View, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле “Background”, установите фон View “Light Green”. У вас должно получиться следующее: Теперь необходимо добавить действие на нажатие кнопки “Вход” и объявить переменные для полей ввода и элемента управления “Label”. Для этого в панели инструментов нажмите кнопку “Show the assistant editor”, экран разделится пополам. Если экран вашего компьютера не позволяет нормально видеть дизайнер и модуль контроллера, скройте панель навигатора и панель свойств. Выделите первый элемент управления “Text Field” в дизайнере, не отводя курсор мыши с этого элемента управления, зажмите кнопку “Ctrl”, нажмите и удерживайте левую кнопку мыши, затем начинайте вести курсор на окно с модулем контроллера, когда курсор окажется между фигурными скобками класса контроллера, отпустите левую кнопку мыши, появится диалоговое окно параметров элемента управления: В данном окне есть несколько полей. Давайте их рассмотрим подробнее. Поле “Connection”,  может принимать несколько вариантов значений, в данном уроке нас будут интересовать всего два значения “Outlet” (используется для создания переменной, связанной с элементом управления) и “Action” (используйте для задания обработчика события на какое либо действие элемента управления). Поле “Name”, сюда вы вводите название вашей переменной, которая будет связана с элементом управления. Поле “Type”, содержит тип элемента управления (название класса элемента управления), можно ввести другой класс, если вы знаете иерархию наследования элемента управления UITextField. Поле “Storage”, содержит вид размещения созданной переменной в памяти операционной системы. Может принимать значения “Weak” или “Strong”. В поле “Name” введите название переменной “userNameTxt” и нажмите кнопку “Connect” или кнопку “Enter” на клавиатуре. В модуле контроллера добавится строчка с названием переменной, которую вы задали. Обратите внимание на черный шарик, находящийся на одном уровне с этой переменной слева в области нумерации строк. Нажмите на него, и в дизайнере выделится элемент управления, к которому привязана данная переменная. Вот пример: Повторите данное действие для остальных элементов управления. Для второго текстового поля  укажите название переменной “passwordTxt”. Для элемента управления “Label” укажите название переменной “validationLabel”. Для кнопки выберите в поле “Connection” значение “Action”, у вас добавится еще одно поле “Event”. В данном поле задается событие, на которые вы хотите назначить обработчик в коде контроллера. По умолчанию установлено событие “Touch Up Inside”, оставьте его как есть. В поле “Type” установлено значение “AnyObject” (Это класс, который может содержать любые типы данных, аналог подобного класса в других языка программирования, например, C# - это класс Object). Измените это значение на тип элемента управления UIButton, поскольку данный объект будет передан в аргументы метода обработчика назначенного события и намного удобнее будет обращаться явно к экземпляру кнопки, чем распаковывать этот экземпляр путем приведения к типу “UIButton” из типа “AnyObject”. В поле “Name” введите “loginButtonTapped”. У вас должно получиться вот так: Нажмите кнопку “Connect”. Код контроллера должен выглядеть вот так: Теперь давайте проверим, работает ли событие нажатия по кнопке “Вход”. Добавьте в метод “loginButtonTapped” следующий код: Давайте разберем этот код. На 16 строке идет проверка наличия текста в поле ввода “Имя пользователя”. Ключевое слово “self” означает ссылка на самого себя, в других языках программирования аналог, например, в C# - это ключевое слово “this”. Из переменной “userNameTxt” мы обращаемся к свойству “text”, данное свойство возвращает текст, который вы ввели в данный элемент управления. Знак вопроса в конце  этого свойства ставится, так как это свойство имеет тип String? и может содержать значение “nil” (аналог “null” в C#). Далее мы обращаемся к свойству “characters” , которое содержит массив символов и от этого массива вызываем свойство “count”, чтобы получить количество символов в строке. Такая запись введена, начиная со Swift 3, доступного с обновлением среды разработки до Xcode 8 версии. В ранних версиях Swift, например, версии 2.1-2.3 можно было получить длину строки намного короче “self.userNameTxt.text?.length”. Если поле ввода “Имя пользователя” не заполнено, мы отображаем сообщение валидации “Имя пользователя не задано”. На 18 строке мы делаем аналогичную проверку для поля “Пароль пользователя”. На 20 строке мы проверяем, если заполнены оба поля ввода, тогда все хорошо и мы выводим сообщение “Нет ошибок”. Обратите внимание на запись “(self.userNameTxt.text?.characters.count)!”, скобки и знак восклицания в конце, на самом деле, применяются к свойству “text”, так как оно имеется Nullable тип. Этой записью мы гарантируем компилятору, что в данном свойстве не будет содержаться значение “nil” и данное свойство будет инициализировано. Теперь запустите приложение и проверьте его работу. На этом урок подошел к концу. В следующем уроке мы рассмотрим работу с классами UITableViewController, навигацию между представлениями, понятие делегата, разберем формат и размеры иконки приложения, научимся использовать Assets.
Notification success