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

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

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

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

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

Результати пошуку за запитом: mvc 5*
ТОП-10 найкращих відео з Python

Автор: Влад Сверчков

Вітаємо! Друзі, цього разу ми підготували для вас підбірку найкращих вебінарів від ITVDN за напрямком Python. До рейтингу увійшли як пізнавальні вебінари з актуальною інформацією, так і вебінари, орієнтовані на прокачування ваших навичок створення коду. Давайте приступимо до їх розгляду.     Пишемо API додаток на Python за допомогою FastAPI та Docker   Автор – Антон Козаченко, Python Back-end Developer з Латвії   На вебінарі автор розбирає приклад написання API додатку на Python за допомогою фреймворку FastAPI та інструменту Docker. Розглядається фреймворк FastAPI, також створюється декілька методів API. Автор розглядає Docker, пише свою конфігурацію та запускає контейнери. Додатково відбувається покриття API додатку тестами.   План вебінару:   Ознайомлення із фреймворком FastAPI. Написання кількох endpoint-ів API. Написання тестів для цих endpoint-ів. Написання конфігурації для Docker. Запуск додатку в Docker containers. Запуск тестів.     2. Підготовка до технічної співбесіди з Python ➤ Як пройти співбесіду на Junior Python?   Авторка – Людмила Міщенко, Python розробниця   Вебінар присвячений ключовим моментам технічної співбесіди на позицію Junior Python Developer. Розглядаються найчастіші питання, логічні та технічні завдання. Ви дізнаєтесь, як правильно готуватися до співбесіди. Приділено увагу тому, як отримати користь від проходження технічного інтерв'ю та як залишити приємне враження про себе у спеціалістів компанії. Також автор порушує теми важливості роботи над помилками та аналізу співбесіди.   План вебінару:   Як готуватися до технічної співбесіди? На які запитання має знати відповідь Junior Python Developer? На що у відповідях кандидатів найбільше звертають увагу? Чи потрібні (і яку роль грають) pet-projects для фахівця-початківця? Як не розгубитися під час кодингу на співбесіді? (+ поради та лайфхаки) Робота над помилками та аналіз фідбеку після співбесіди.     3. Що краще: Django, Flask чи FastAPI? Огляд фреймворків для веб-розроблення на Python.   Автор – Максим Кузнєцов, Senior Python Developer   В даному вебінарі розглядаються декілька популярних веб-фреймворків на Python (Django, Flask, FastAPI). Автор порівнює їхню продуктивність і пояснює, для яких цілей який фреймворк більше підійде.   План вебінару:   Огляд Django та його фічі. Огляд Flask та його фічі. Огляд FastAPI та його фічі. Порівняння продуктивності. Коли який фреймворк вигідно застосовувати. Відповіді на питання.   Даний вебінар буде цікавий Python розробникам-початківцям, і тим, хто збирається перейти на Python і хоче спланувати своє навчання з урахуванням особливостей різних інструментів.     4. Створення гри BlackJack на Python з нуля (Частина 1 та Частина 2)   Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics   "Створення гри BlackJack на Python" – це дводенний інтенсивний тренінг зі створення відомої карткової гри. Вебінар покликаний у захоплюючій формі познайомити новачків з Python та попрактикуватися у написанні коду цією мовою. Мінімум теорії та максимум практики – що ще потрібно для швидкого старту в програмуванні?   Чому можна навчитися, вивчивши відео матеріали тренінгу та випробувавши отримані знання на практиці:   Писати просту програму мовою Python Розбивати завдання на дрібні підзадачі та успішно їх вирішувати Проєктувати архітектуру програм Писати програми на рівні класів Розв'язувати алгоритмічні задачі Розуміти призначення патернів проєктування   План першого відео (першої частини):   Знайомство із середовищем розроблення PyCharm та мовою програмування Python. Розбір основних елементів мови. Створення архітектури програми на рівні класів. Поліпшення архітектури з використанням патернів. Створення перших об'єктів.   План другого відео (другої частини):   Створення структури проєкту. Наслідування та композиція. Створення спеціальних типів даних. Зв'язок компонентів між собою. Тестування. Підбиття підсумків.     5. Об'єктно-орієнтоване програмування в Python ➤ Що таке ООП та як воно працює.   Автор – Бондаренко Кирило, Data Scientist / Python Developer, "CreatorIQ"   Об'єктно-орієнтоване програмування (ООП) – дуже важлива парадигма у сучасному програмуванні. Цей вебінар розкриває основні принципи ООП і показує, як вони реалізовані у мові Python.   Наскільки важливим є знання ООП для Python розробника? Як часто доводиться використовувати ООП у роботі? У яких проєктах, у яких завданнях? Чи візьмуть вас працювати без знання ООП? Ці та інші питання будуть поставлені в даному вебінарі.   Теми, що розкриваються:   Що таке ООП і як це працює у Python. Приклади розв'язання задач через ООП. Підбиття підсумків. Відповіді на питання.     6. Створення чат-бота "прогноз погоди" на Python   Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics   Якщо ви хочете випробувати свої сили в програмуванні на Python і створити власного Telegram-бота, який сповіщатиме вас про актуальну погоду, цей відеоролик буде дуже доречним.   Підійде як новачкам, які ніколи не програмували, так і розробникам-початківцям, які бажають поглибити і застосувати на практиці свої знання Python.   План:   Рівні моделі мережі Інтернет. Що таке бібліотеки на Python. Що таке API. Telegram API. Бібліотеки для Telegram API. Робота з чистим API.   Чого ви навчитеся:   Реалізовувати нескладну програму мовою Python, яка прогнозуватиме погоду. Основам базового синтаксису мови Python. Теоретичним основам API – зрозумієте, як він працює. Працювати із запитами. Створювати роботів для месенджеру Telegram. Використовувати існуючі сервіси для прив'язки до вашої програми.     Автоматизація парсингу сайтів на Python   Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics   В епоху машинного навчання інформація стає нафтою XXI століття. Проєкти, пов'язані зі збором та аналізом даних, виходять на перші позиції у глобальних компаніях та в стартапах.   Як збирати та обробляти інформацію? Залежно від цілей проєкту, дані можуть збиратися абсолютно різні. На вебінарі ми розглянемо один із найпоширеніших підходів – парсинг сайтів.   Ми візьмемо один із популярних сайтів з робочими вакансіями та на його прикладі розберемо бібліотеки для парсингу веб-сайтів, бібліотеки для роботи із запитами. Розберемо види популярних баз даних і зрозуміємо, де і яку потрібно використовувати.   План вебінару:   Що таке парсинг веб-сайтів? Бібліотеки для парсингу веб-сайтів. Бібліотеки для роботи із мережею. Написання коду парсерів. SQL та NoSQL – за яких завдань який тип використовується. Написання коду менеджерів баз даних.     8. Створення простої казуальної гри на Python   Авторка – Людмила Міщенко, Python розробниця   На вебінарі буде розглянуто реалізацію простої гри на Python. Суть гри полягає у навчанні людей, особливо дітей, вести еко-дружній спосіб життя – правильно сортувати сміття. Тобто, користь буде не тільки для вас у отриманні нових знань у програмуванні, а й у спробі виявити більше турботи про нашу планету.   План вебінару:   1. Постановка задачі.   а) Мета вебінару – створити свою гру на Python, яка вчить сортувати сміття; б) правила гри – обирати правильний кошик для різного типу сміття; закінчення гри за таймером; наприкінці гри користувач отримує суму зароблених балів за правильно обрані кошики.   2. Реалізація програми:   а) встановлення модулів; б) завантаження потрібних зображень; в) написання логіки влучення сміття в кошик (поведінка кошика); г) оголошення та опис елементів сміття (органіка, пластик, папір) – клас поведінки сміття; д) виклик написаних класів та запуск гри.   3. Отримання результатів:   а) запуск та тестування коду; б) проходження гри; в) аналіз виконаної роботи – додавання та зміна умов гри, оптимізація коду, майбутні доопрацювання.       9. Структури даних у Python. Рівень Advanced   Автор – Бондаренко Кирило, Data Scientist / Python Developer, "CreatorIQ"   Якщо ви маєте труднощі з розумінням документованих структур мови Python, таких як list, tuple, dict, set, цей вебінар для вас. Ми розбиратимемося з тим, як написати такі структури даних, як черги (queues), дерева (trees), розглянемо роботу зі вкладеними словниками (nested dicts), а також застосування ООП для розширення можливостей існуючих структур даних.   Матеріал цієї зустрічі буде корисний Python розробникам із різних областей, зокрема Data Science спеціалістам та web-розробникам.   План вебінару:   Робота з розширенням структур даних мови через наслідування та ООП. Робота з комбінованими структурами, такими як nested dict, defaultdict, named tuple і т. д. Написання незадокументованих структур даних, таких як дерева, черги, зв'язані списки та інші.   Цей вебінар буде цікавий розробникам, які добре знайомі з Python, знають про імпорт бібліотек і хочуть заглибитися в роботу зі структурами даних для більшої ефективності роботи з ними.     10. Як стати Python розробником у 2021 році?   Автор – Артем Мураховський, Python Developer, тренер-консультант CyberBionic Systematics   В останні роки мова програмування Python стрімко набирає популярність. За даними Stack Overflow Developer Survey 2019, в якому взяли участь понад 87 тисяч IT-фахівців з різних країн, Python випередила навіть таких постійних та безперечних лідерів, як Java, С# та С++.   Зараз вона широко використовується в Data Science (машинне навчання, аналіз даних, візуалізація), розробленні вбудованого програмного забезпечення та реалізації серверної частини веб-додатків. Також за допомогою Python можна створювати ігри, десктопні та мобільні програми, писати тести для ПЗ та спрощувати адміністрування ОС.   Програма зустрічі:   Хто такий Python розробник і що він робить? Які знання, вміння та навички потрібні Python розробнику? Вимоги до розробників рівня Junior. З чого розпочати вивчення мови Python? Складання плану навчання. Рекомендована література. Відповіді на питання.   Вивчайте Python розроблення на ITVDN!
Що повинен знати C#/.NET розробник

Автор: Влад Сверчков

На сегодняшний день .NET программист может применять свои навыки в различных сферах разработки программных продуктов: создание веб-приложений и веб-сервисов создание настольных приложений; создание облачных сервисов; создание игр; создание мобильных приложений. Когда говорят о .NET разработчиках, имеют в виду программистов, которые пишут на языке С#. Этот язык программирования, как и вся платформа .NET, был создан, развивается и поддерживается компанией Microsoft, которая стабильно уже несколько десятилетий входит в TOP-10 компаний - мировых лидеров рынка информационных технологий. Все продукты компании Microsoft созданы на платформе .NET. Какие же технологии необходимо изучить, чтобы стать .NET программистом? Поскольку львиная доля .NET-вакансий приходится именно на веб-сегмент, данная статья будет охватывать как фундамент, которым обязаны владеть все разработчики этой платформы, так и основные технологии серверной стороны веб-решений.     Язык программирования C# (“си шарп”) Любой .NET разработчик не может называться и быть таковым, если он не умеет хорошо программировать на языке C#. Это универсальный объектно-ориентированный язык, который является мощным инструментом создания программного обеспечения с широкой областью применения. При столь высокой функциональности он является достаточно несложным в изучении и отлично подойдет тем, кто собирается сделать первый шаг навстречу программированию. Благодаря широкому спектру применения, С# является очень востребованным языком. Различные ресурсы по поиску работы предлагают большое количество вакансий, причем, как на крупные проекты с четко определенным консервативным стеком технологий, так и в компании, которые создают новый программный продукт с применением самых современных инструментов. Компания Microsoft активно развивает свое детище - .NET направление, потому C# всегда актуален, идет расширение функционала, добавляются новые возможности. Тенденция последних лет - кроссплатформенность, реализуемая в .NET Core. Огромное количество учебных материалов, качественная официальная документация, видео курсы и образовательные вебинары - все это создает максимально комфортные условия для грамотного поэтапного изучения данного языка.     ООП Объектно-ориентированное программирование - это методология разработки программного обеспечения, в основе которой лежат четыре главных принципа: абстракция, инкапсуляция, наследование и полиморфизм. Поскольку C# является объектно-ориентированным языком, необходимость изучения и полного понимания ООП парадигм обязательно. Однако, есть и приятная новость: все принципы быстро и легко усваиваются во время изучения C#.      Алгоритмы и структуры данных Понимание алгоритмов и структур данных  - обязательные знания для любого программиста. Изучив структуры данных, вы сможете управлять сложностью своих программ, делая их более доступными для понимания, а также разрабатывать высокопроизводительные программы, которые будут эффективно работать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач.   Шаблоны проектирования Паттерны (они же шаблоны) представляют собой архитектурные конструкции, которые описывают типичные способы решения распространенных задач, возникающих в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако знать их все - это обязанность архитектора, а не .NET. разработчика.  Обычно в одном проекте используется небольшое количество паттернов, поэтому вам достаточно знать самые популярные из них.   SQL Structured Query Language - декларативный язык структурированных запросов, который создан для взаимодействия с базами данных. Особенность SQL состоит в том, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Каждый программный продукт подразумевает работу с данными, будь то обыкновенная процедура приема данных от сервера (например, скачивание файлов) или внесение в БД информации о новом зарегистрированном пользователе - умение работать с данными одинаково важно во всех сферах разработки, разве что за исключением FrontEnd.   ASP.NET Active Server Pages для .NET - платформа, использующая среду выполнения .NET Framework и предоставляющая необходимые службы для создания серверных веб-приложений и веб-сервисов. Является развитием более ранней технологии Microsoft ASP. ASP.NET базируется на среде выполнения Common Language Runtime (CLR), которая является основой всех приложений Microsoft .NET. Также данная платформа имеет преимущество в скорости по сравнению со скриптовыми технологиями. ASP.NET MVC является расширением ASP.NET и представляет собой платформу для создания веб-сервисов при помощи паттерна MVC. Данный шаблон предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, благодаря чему реализуется концепция разделения и закрепления ответственности за каждым компонентом, что упрощает разработку проектов.   ASP.NET Core Фреймворк от компании Microsoft, который использует среду выполнения .NET Core, предназначен для разработки качественных современных веб-приложений и является продолжением развития платформы ASP.NET. Однако, это не просто обновленная технология. Выход ASP.NET Core фактически обозначил качественное изменение всей платформы. Последняя версия 3.0 была выпущена не так давно - в сентябре 2019 года. Главные особенности ASP.NET Core: наличие открытого исходного кода на GitHub; кроссплатформенность; модульность; расширяемость; возможность применения облачных технологий. Более подробную информацию обо всех нововведениях можно найти на официальном сайте Microsoft. Таким образом, платформа .NET Core существенно расширила области применения технологии ASP.NET и предоставила разработчикам большое количество возможностей по созданию программного продукта.   Entity Framework 6 Entity Framework -  специальная объектно-ориентированная технология на базе фреймворка .NET, которая позволяет разработчикам получать доступ к данным, используя концептуальную объектную модель, а не непосредственно реляционную базу данных. Благодаря такому подходу уменьшается количество кода, необходимое для получения доступа к базе, растет производительность и уменьшается время на поддержку объектов в приложениях, которые работают с данными. В двух словах, эта технология позволяет программисту абстрагироваться от самой базы данных и работать с данными независимо от типа хранилища.   LINQ Language Integrated Query (язык интегрированных запросов) - это простая и удобная .NET технология доступа к данным. Особенность данного языка запросов: возможность применения ко всем источникам данных (XML-документы, XML-потоки, наборы данных ADO.NET, базы данных SQL, массивы и коллекции .NET и т. д.) одного и того же самого подхода выборки данных.   Git Наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы. Не во всех вакансиях можно встретить среди требований владение системой контроля версий, однако, знание Git или ее аналогов даст вам дополнительное преимущество перед остальными кандидатами.   Английский язык Традиционное требование для каждого разработчика в IT. Знание языка на уровне чтения технической документации и комментирования кода вполне достаточно.   Подведем итоги В статье были перечислены основные технологии, которыми должен обладать каждый .NET-программист. Поскольку веб-разработка ныне является очень популярной и востребованной, мы также добавили в список .NET средства, которые используются во время создания соответствующих серверных веб-решений. Однако среди всех пунктов наиболее важным является знание языка С# - каждый “дотнетчик” обязан им владеть на высоком уровне.   В свою очередь, перечень можно дополнить такими технологиями, как: TDD (разработка через тестирование), WCF, Unit тестирование, рефакторинг приложений. Их знание не является обязательным, однако, дает дополнительное преимущество перед другими кандидатами в глазах работодателя.  Также вы можете ознакомиться со списком всех необходимых к изучению технологий на странице специальности .NET Developer. Комплексная программа обучения состоит из 49 видео курсов общей продолжительностью 346 часов. Перейдя на страницу, вы найдете много полезной информации  - как для новичка, так и для разработчика, желающего углубить и дополнить свои знания. Более подробно тему требований IT компаний к .NET разработчику рассматривал на вебинаре Виталий Емец - FullStack Developer, Microsoft Certified Specialist. Почему многие выбирают веб-направление и какими технологиями должен владеть кандидат? Ответы на эти и другие вопросы вы найдете в этом видео -  “Как стать C#/.NET разработчиком?”. ITVDN желает Вам достижения Ваших целей и готов быть надежным помощником в вопросах обучения программированию. Оставайтесь с ITVDN! 
Уразливості в .NET платформі

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

Необходимо ли вам знать об уязвимостях в .NET? Возможно, вы по-новому взглянете на код, а может, и на свою жизнь. А вдруг вам захочется сменить квалификацию и уйти в research новых видов атак? Кто знает. Но если вы задались вопросом об уязвимости, то вы наверняка интересуетесь тем, как разрабатывать надёжные и защищённые приложения. Итак, давайте поговорим об уязвимостях, которые находят в .NET Framework.  DoS (Denial of service) – атака на ASP .NET MVC приложение. Эта атака способна серьезно нарушить работу вашего сайта, например, замедлить его, а в отдельных случаях и вовсе его заблокировать.  Как работает На сервер производятся запросы, которые он не может обработать, в результате чего сервер не успевает обрабатывать запросы обычных посетителей и выглядит для них как неработающий. Как исправлять Упростить регулярное выражение Заменить регулярное выражение на custom алгоритм Задать timeout для обработки любого регулярного выражения, используя конструктор, или для всех регулярных выражений, используя AppDomain.   Это отличные примитивные меры, когда вам не очень хочется разбираться в том, какие у вас регулярные выражения и насколько они сложные. Тем более, что такие решения вам ничего не стоят, но дают результат. Атака повышения привилегий (ЕоР) на SQL-сервер. В данном случае это luring атака, которая может скомпрометировать все данные на сервере. Атака повышения привилегий (ЕоР) в ASP .NET Core 1.0. Эта уязвимость была зафиксирована как ошибка бизнес-логики, но позже выяснилось, что она может привести к раскрытию данных и повышению привилегий пользователя. Как работает Атакующий «заманивает» более привилегированный компонент, чтобы что-то сделать от его имени. Самый простой способ осуществить такую атаку – убедить цель запустить код атакующего в более привилегированном контексте безопасности. Как исправлять Единого сюжета, как избежать этих уязвимостей, к сожалению, нет. Можно дать лишь общие рекомендации. Например: Зарегистрировать request-сервис в контексте синглтона Дважды проверять любой код, работающий с security sensitive, c sandboxing и с модификацией данных Runtime check – ещё один хороший способ защиты от подобных вещей Минимум привилегий везде Раскрытие информации ХХЕ -  это уязвимость к XML-инъекциям, которая приводит к чтению произвольных файлов на атакуемом сервере. Как работает Чтобы понять суть ХХЕ, давайте сначала разберёмся с ХМL форматом. ХМL формат может содержать описание своей структуры в теге DOCTYPE. В этом же теге могут содержаться и некоторые Entity. Если говорить по-простому, то это аналог константы, который дальше может использоваться в ХМL коде и, при парсинге этого кода, будет автоматически раскрываться. Уже это обстоятельство может привести к DoS атаке, если вы добавите Entity, которые рекурсивно раскрываются, и не зададите timeout. Парсер начнёт их раскрывать бесконечно долго. Классическая ХХЕ атака проходит следующим образом. Атакующий отправляет скомпрометированный ХМL файл на сервер, где этот файл парсится, после чего из сервера возвращается ответ. Ответ может быть совершенно любого типа, хотя существует вероятность, что злоумышленник получит именно тот локальный файл, который ему нужен. Как исправлять Запретить использование DTD файлов и External Entity Занулить resolver Ввести ограничение на размер и установку timeout Одной из причин появления уязвимостей может быть десериализация бинарных данных. Десериализация данных – это обратный процесс сериализации. То есть если при сериализации мы переводим какую-либо структуру данных в последовательность битов, то при десериализации мы восстанавливаем начальное состояние этой структуры. Как при этом процессе может возникнуть уязвимость? Допустим, у вас есть класс, реализующий команду, который запускает какой-то конвертор. Вы через конструктор передаете ему параметры этого конвертора и они валидируются в конструкторе. При этом использовать можно не каждый, а только ваш локальный конструктор. В чём же проблема? А проблема состоит в том, что при десериализации данных конструктор не будет запущен. То есть ваши данные будут десериализованы так, как они есть, включая приватные поля. Как исправлять Использовать кастомный сериализатор Использовать минимум привилегий в процессе десериализации О возможных способах десериализации вы можете узнать больше в статье Джеймса Форшав «Are you my Type? Breaking .NET Trough Serialization». Вывод К всеобщему сожалению, сейчас не существует ни одного полностью защищённого  веб-приложения. Поэтому проблема уязвимостей остаётся актуальной. Злоумышленники находят всё новые и новые способы взлома серверов и нанесения всяческого вреда компаниям или обычным людям. Следовательно, для гарантии безопасности вашего приложения вам необходимо знать, как устранять уязвимости и препятствовать их появлению. Материал подготовлен на основе выступления Михаила Щербакова, Independent Consultant, на конференции по .NET-технологиям DotNext 2016 Moscow.
Використання Redis як сервісу в Azure для прискорення роботи ASP.NET додатків

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

Введение Microsoft Azure использует кэш Redis в качестве сервиса. В нем существуют два уровня. Уровень Basic является одним узлом кеша, а Standard – полностью воспроизведенным кэшем (два узла с автоматической отработкой отказа). Microsoft управляет автоматической репликацией между двумя узлами и предлагает высокую доступность SLA (Service Level Agreement).  Уровень Premium может использовать до половины терабайта оперативной памяти, десятки тысяч подключений клиентов и группироваться или масштабироваться в большие блоки. Разумеется, Вы можете управлять своим Redis через виртуальную машину, но существует SAAS (Software as a Service/программное обеспечение как сервис), который все значительно упрощает – достаточно просто использовать его и остальное будет обработано. Мы испробуем Redis в качестве кэша для ASP.NET веб-приложений. В нем есть интересный Redis Desktop Manager с открытым исходным кодом. Еще один интересный графический интерфейс для Redis - это Redsmin. Для небольших приложений и сайтов мы можем сделать простой (Basic) кэш и получить 250 мегабайт. Мы сделали экземпляр объекта Redis в Azure. Его создание занимает пару минут. С ним можно взаимодействовать программно с помощью StackExchange.Redis, ServiceStack.Redis или любой из многих других больших пользовательских библиотек. Впрочем, сейчас существует мощная поддержка для Redis и кеширования в ASP.NET. Это библиотека под названием Microsoft.Web.RedisSessionStateProvider, которую можно получить из NuGet: Install-Package Microsoft.Web.RedisSessionStateProvider Она использует в себе библиотеку StackExchange, но это позволяет ASP.NET использовать объект Session и сохранять результаты в Redis, а не в памяти веб-сервера. Добавьте это к Вашей веб-конфигурации web.config: mode="Custom" customProvider="FooFoo">                       name="MySessionStateStore"             type="Microsoft.Web.Redis.RedisSessionStateProvider"             host="hanselcache.redis.cache.windows.net"             accessKey="THEKEY"             ssl="true"             port="1234" />      Вот строка из сессии ASP.NET, сохраненная в Redis, как показано диспетчером Redis Desktop Manager. Удобно использовать поставщик, если Вам не нужно делать изменений в любом коде. Вы можете отключить SSL и подключиться к кэшу Azure Redis Cache через открытый доступ в Интернет, но вам действительно лучше использовать SSL. Вот инструкции по использованию диспетчера Redis Desktop Manager с SSL и Azure Redis. Обратите внимание на часть, где Вам понадобится файл с .pem расширением, который является открытым SSL-ключом для Azure Redis Cache. Вы можете получить этот ключ SSL здесь (на момент написания этой статьи). Redis можно использовать не только в качестве состояния сессии, но и как молниеносный вывод кеша. Это означает кеширование HTTP-ответов в полном объеме. Его настройка в ASP.NET 4.x похожа на настройку провайдера состояния сессии (Session State Provider): Install-Package Microsoft.Web.RedisOutputCacheProvider Теперь, когда мы использовали атрибуты [OutputCache] в контроллерах MVC, или директивах OutputCache в веб-формах, как <%@ OutputCache Duration="60" VaryByParam="*" %>, ответы будут обработаны с помощью Redis. Только подумав о том, как работают Ваши строки запроса и URL-адреса, Вы можете быстро сделать приложение, как каталог продукции, например. И сделать это в 4-ре или 10 раз быстрее, используя кеширование. Это требует минимальных усилий, а результат приносит огромный. Странно, что даже в 2015 году некоторые люди обращаются к базе данных при каждом HTTP-запросе, когда теперешние нужды данных веб-приложений этого не требуют. Конечно, Вы можете работать с Redis напрямую через код. Вот документы для .NET, Node.js, Java и Python на Azure. Это удивительный проект, и обладать им, полностью управляемым, в качестве услуги приятно. С сайта Azure Redis: Redis является расширенным хранилищем значений ключей, которые могут содержать такие структуры данных, как строки, хэши, списки, наборы и сортированные наборы. Redis поддерживает набор атомарных операций с этими типами данных. Redis также поддерживает в установке репликацию «master-slave» с очень быстрой первой синхронизацией без блокирования, автоматическим переподключением при разделении сети и так далее. Другие особенности включают транзакции, публикации/подписки, сценарии Lua, ключи с ограниченным временем действия и параметры конфигурации, что позволяют Redis действовать как кэш. Вы можете использовать Redis с помощью большинства теперешних языков программирования. Кэш Redis для Azure использует идентификацию Redis, а также поддерживает SSL-подключения к Redis. Возможно, Вы заинтересованы в Redis, но не хотите запускать его на Azure или, возможно, даже на Linux. Возможно запустить Redis с помощью Redis MSOpenTech на ОС Windows. Его можно установить с NuGet, Chocolatey или загрузить напрямую с репозитория проектов GitHub. Если у Вас Redis для Windows (это легко с Chocolatey), можете использовать redis-cli.exe в командной строке для коммуникации с Azure Redis Cache. Запустить локальный сервер Redis легко: с помощью redis-server.exe проверить его в разработке, а затем изменить строку Redis-подключения Вашего приложения при развертывании на Azure. Можете проверить. В течение 30 минут Вы сможете настроить Ваше приложение, чтобы использовать кэш (Redis или другой) и увидеть некоторое, действительно, значительное ускорение. Источник: http://www.hanselman.com/blog/UsingRedisAsAServiceInAzureToSpeedUpASPNETApplications.aspx
Логування проекту за допомогою NLog Framework

Автор: Богдан Ромашко

Введение Многие начинающие разработчики при создании своих проектов не задумываются о такой вещи, как создание журнала события. Мол, проект у меня нормальный, и так сойдет. Но не забываем, что наше приложение мы пишем не для себя самих, а для клиента. Всем нужна статистика и слежение за проектами. Итак, что же насчет логирования, так это процесс записи всех сведений о проекте, а именно: информации о работе тех или иных элементах приложения, предупреждение о критической нагрузке, всяческие ошибки и т.д. Для .NET приложений был разработан очень удобный фреймворк под название NLog, с его помощью можно вести учет о состоянии всего приложения. Есть поддержка записи в файл, в базу данных. Настройка данной платформы очень удобна и легка, есть два способа: через конфигурационный файл; через конфигурационный объект LoggingConfiguration; Первый способ самый простой, так как зондирование проекта уже встроено в саму библиотеку NLog. Вся работа основа на объекте Logger – парне, который занимается ведением учета состояния нашего проекта. Для того чтобы продемонстрировать работу NLog, создадим проект по шаблону консольного приложения и назовем его NLogUnderstanding. Изначально наш проект выглядит следующим образом: using System; namespace NLogUnderstanding {     class Program     {         static void Main(string[] args)         {                          }     } } Чтобы начать работу данного фреймворка в нашем проекте, нужно установить следующие библиотеки через Package Manager Console (или же через сам менеджер расширений):  После установки NLog выбираем подход, по которому будем строить процесс слежения за состоянием приложение.  Настройка через конфигурационный файл: Первое, что нужно сделать- это установить данный пакет: После это у нас в проекте появится указанный файлик NLog.config: Начальное содержимое файла выглядеть будет примерно так: xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   <targets>     targets>   <rules>     rules> nlog> Все, после того как мы подготовили данную библиотеку, начинаем настройку объекта Logger. Первое, что мы должны сделать, это указать ему, куда мы будем писать те или иные сообщения. Все эти файлы указываются в разделе <targets>. Первое, что мы добавим, так это все возможные записи, которые мы сможем проводить:   <targets>     <target xsi:type="File" name="file" fileName="${basedir}/logs/${shortdate}.log"             layout="${longdate} | ${uppercase:${level}} | ${logger} | ${message}" />   targets> Шесть возможных вариантов ведения учета: Информация о состоянии элементов; Информация, запущенная в режиме debug для отладки проекта (можно применять в тестах); Всяческие предупреждения (например, связанные с нагрузкой); Информация об исключениях; Информация об ошибках, которые привели к критическому завершению приложения. Для каждого сообщения присутствует свой метод все в том же объекте Logger, который мы чуть позже будем разбирать. Основные атрибуты, которые нужно заполнить, это: name – название файла, нам оно понадобиться для организации правил, по которым мы будем писать именно в этот файл; fileName – указываем файл и путь к файлу, в который будем писать наши логи; layout – шаблон, по которому будет заполнятся наш файл. Как Вы уже заметили,  заполнение значений атрибутов ведется в характерной манере регулярных выражений. То есть, мы используем заранее подготовленные в библиотеке маркеры подстановки для ведения учета наших сообщений в разные файлы. Основные, которые мы использовали, это: ${basedir} – вернет базовую директорию вашего приложения. При компиляции этот маркер вернет изначальный путь (папку bin); ${shortdate} / ${longdate} – маркеры подстановки устанавливают текущую дату и время в зависимости от маркера (полную дату и время или же только дату); ${uppercase:${level}} – интересное использование вложения маркеров. Как Вы поняли, маркер ${level} будет указываться уровень сообщения (мы их перечислили ранее), приводим в верхний регистр; ${message} – под данный маркер подставляется сообщение, указанное в аргументных скобках методов (об этом далее); ${logger} – название класса, от которого поступило сообщение. После настройки целей для записи наших сообщений мы приступаем к организации правил, по которым будем заполнять наши файлы:   <rules>     <logger name="*" minlevel="Trace" writeTo="file" />   rules> Тут все намного проще, единственное, что нужно заполнить - это основные атрибуты, т.к. minlevel (минимальный уровень заполнения файла, имя которого указанного в атрибуте writeTo). После того как настроили конфигурационный файл, приступаем к работе с проектом и нашим Logger. Первое, что нужно - это создать экземпляр Logger. Это можно сделать двумя способами: Создать через первый фабричный метод LogManager.GetLogger("Example"), в аргументах указываем название логгера, менее эффективный способ, т.к. всегда нужно указывать название класса, в котором происходит запись в журнал; Создание через второй фабричный метод LogManager.GetCurrentClassLogger(), пользуясь данным методом, мы предоставляем возможность экземпляру логгера самому узнать полное квалификационное название класса, в котором произошла запись в журнал. Теперь привнесем изменения в наш созданный проект: using System; using NLog; namespace NLogUnderstanding {     class Program     {         static void Main()         {             Logger logger = LogManager.GetCurrentClassLogger();               log.Trace("trace message");             log.Debug("debug message");             log.Info("info message");             log.Warn("warn message");             log.Error("error message");             log.Fatal("fatal message");         }     } } После компиляции проекта у нас создается файл с текущей датой и в него внесутся следующий записи: 2015-05-06 14:33:46.0911 | TRACE | NLogUnderstanding.Program | trace message 2015-05-06 14:33:46.1380 | DEBUG | NLogUnderstanding.Program | debug message 2015-05-06 14:33:46.1380 | INFO | NLogUnderstanding.Program | info message 2015-05-06 14:33:46.1536 | WARN | NLogUnderstanding.Program | warn message 2015-05-06 14:33:46.1536 | ERROR | NLogUnderstanding.Program | error message 2015-05-06 14:33:46.1693 | FATAL | NLogUnderstanding.Program | fatal message Теперь можно приступать к внедрению NLog в Ваш проект, и отслеживать состояние ваших объектов. P.S. Если вы планируете применять слежение за состоянием вашего проекта, то экземпляр логгера нужно будет создавать в нужных для отладки классах. В следующей части я опишу, как применять логгирование в веб проектах на основе ASP.NET MVC.
Як не треба використовувати патерн "Repository"

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

Обобщенный паттерн Репозиторий Чтобы избежать недоразумений, давайте для начала проясним, что здесь имеется ввиду под понятием обобщенного репозитория. Видели ли вы когда-нибудь интерфейс вроде этого: Или может вы видели его брата-близнеца, который имеет иной вариант метода Get: Вдохновение для написания первого примера пришло из официальной документации Microsoft для ASP.NET MVC 4. Что же касательно второго примера, в Интернете вы можете найти бесконечное число блогов, описывающих именно этот вариант написания репозитория — иногда лишь с небольшими отличиями в виде возвращения IEnumerable<TEntity> вместо IQueryable<TEntity>. И в последнем случае часто еще и с дополнительным методом для генерации запросов. Что-то вроде этого: Так что плохого в них, вы можете спросить? Почти ничего, если не считать плохое именование методов из примера Microsoft (здесь лучше было бы использовать Find и FindAll вместо Get и GetAll). Но «почти ничего» - это далеко не то же самое, что «ничего». Первую проблему, которую я здесь вижу, так это нарушение Принципа Сегрегации Интерфейсов (Interface Segregation Principle). Они выражают полный набор CRUD-операций даже для тех сущностей, для которых операции удаления не имеют никакого смысла (к примеру, когда вы деактивируете пользователей вместо удаления их записей из базы данных). Но эта проблема может быть решена при помощи просто разбиения на три интерфейса — для чтения, обновления и удаления записей. Реальная проблема, которую мы здесь имеем, заключается в некорректном использовании. Оригинальная идея заключается в том, что интерфейсы должны быть использованы в качестве базовых для ваших пользовательских интерфейсов. Что-то вроде этого: Ваши обработчики событий и сервисы (клиенты пользовательских репозиториев) должны сами определять нужные методы и помещать их в пользовательские интерфейсы. Это в теории. К сожалению, за свою карьеру мне довольно часто приходилось видеть несколько иную картину: Кто-то создал рабочую реализацию IGenericRepository. Что хуже в этой реализации, так это то, что эта имплементация почти всегда регистрируется в IoC-контейнере и может быть внедрена в ваши обработчики команд и сервисы точно так же, как и любая другая зависимость. Код выглядит достаточно красиво и чисто. На самом деле — нет. Почему именно так — скажу немного позже. Теперь же я бы хотел поговорить об одном из решений неправильной интерпретации GenericRepository<T> многих разработчиков. Само решение выглядит примерно так (диалог на code-review): Джим Сеньор: вы когда-либо слышали, что NHibernate ISession или DbSet из Entity Framework на самом деле репозитории? А то, что вы только что создали — всего лишь небольшая обертка над ISession или DbSet? Де-факто, мы можем отказаться от этого обобщенного репозитория и просто использовать DbSet — результат будет аналогичным. Единственное, в чем IGenericRepository<T> действительно полезен — так это в том, что он скрывает большую часть ненужных для нас методов, которыми обладает DbSet. Джонни Джуниор: да, в этом действительно есть смысл. Я полагаю, использование обобщенного репозитория в нашем случае было лишним (счастливо возвращаемся к написанию программы…) Как по мне, что GenericRepository<T>, что DbSet – в большинстве ситуаций их использование лишнее (ну разве что вы пишите наиболее заCRUDженное приложение в своей жизни). Почему? Вот почему: Единственный способ убедиться, что все LINQ-запросы будут верно преобразованы в SQL — это протестировать их на том же типе базы данных, что находятся в продакшине. Кроме того, в таком случае задача написания интеграционных тестов становится достаточно затруднительной. К примеру, взглянем на код: Чтобы выполнить эти запросы, должны быть соблюдены два условия. За счет этого интеграционный тест становится менее читабельным. Теперь же давайте представим, что этот метод помещен в метод репозитория. Теперь в тесте нам нужно просто вызвать метод репозитория и проверить результат — просто, не так ли? Я уверен, вы согласитесь, что LINQ-предикаты внутри сервисов нельзя использовать повторно и они имеют плохую тенденцию повторяться на протяжении всего кода. Даже если программист желает извлечь запрос в свой собственный метод, обычно это будет приватный метод конкретного сервиса. Инкапсуляция запросов внутри методов репозитория приведет к большей читабельности кода и в значительной мере упростить его использование. LINQ-предикаты не именуются. Как правило, единственный способ узнать, что же, собственно говоря, делает наш запрос (без углубления в его логику), так это имя переменной-результата. К сожалению, искусство информативного именования переменных постигается с опытом, а поскольку в нашей индустрии полно начинающих программистов, мы имеем дело с переменными вроде result, ordersToProcess или просто — orders. Создавая обертку над запросами в виде метода репозитория, это автоматически обязывает разработчика дать этому самому методу конкретное имя. Даже если это имя не из лучших, в последствии провести небольшой рефакторинг не составит труда! Порой, по причине скорости, мы вынуждены доставать данные из базы посредством чистого SQL. Подумайте, вы действительно хотите в своей бизнес-логике работать с такими низкоуровневыми сущностями, как DbConnection или SqlException? Подобный код лучше прятать за методами репозиториями.   Никаких обобщений — только конкретные репозитории   Перед тем как начать разработку репозитория, необходимо определить его интерфейс. Интерфейс должен содержать только те методы, которые нужны конечным клиентам. Другими словами, если никому не нужно удалять сущности данного типа, нет никакого смысла в написании функционала для их удаления. Если вы боитесь закончить среди разных имен для базовых CRUD-операций — таких как Delete в одном репозитории и Remove в другом — вы можете создать полезные интерфейсы типа ICanDeleteEntity<TEntity>, ICanUpdateEntity<TEntity> и так далее. В таком случае конкретный репозиторий будет реализовывать только действительно нужные из них. Ни один из методов репозитория не должен возвращать IQueryable<T>. Также убедитесь, что репозиторий не возвращает IQueryable<T>, скрытые за IEnumerable<T>. Всегда вызывайте ToList() или ToArray() дабы «материализовать» значения, придав им более конкретный тип данных. Как только заходит речь о реализации репозитория, вы можете наследовать абстрактный класс GenericRepository<TEntity>. Если угодно — можно также использовать напрямую ISession и DbSet. Не важно, какой подход вы выбираете. Помните: любые «лишние» в данном контексте методы — по типу Delete из базового класса — будут скрыты за интерфейсом репозитория. Также не забывайте, что ваш репозиторий не несет ответственности за транзакции базы данных. Лучше всего эта концепция реализуется при помощи паттерна Unit Of Work. Этот паттерн уже реализован в рамках ISession и DatabaseContext. Все, что нам нужно — это хороший интерфейс над ними: Для большинства веб-приложений чтобы начать транзакцию через IUnitOfWork в виде начала запроса и Commit / Rollback в конце запроса — этого функционала вполне достаточно. Так же подобное может быть достигнуто при помощи фильтров действий или декораторов обработчиков / сервисов. Пример репозитория, созданного при соблюдении всех приведенных рекомендаций:   Сейчас все стало ясно, но давайте еще раз проясним. Каждый метод наших репозиториев должен быть учтен по крайней мере одним интеграционным тестом, который должен использовать тот же тип базы данных, что и продакшн. Всегда используйте интеграционные тесты для проверки своих репозиториев. Немного о недостатках Не существует роз без шипов, и представленный выше подход — не исключение. Некоторые из них можно решить, используя отличимую от трехуровневой архитектуру. Наиболее часто с конкретными репозиториями возникали следующие проблемы: За длительное время репозитории могут набрать большое количество Find-методов. Достаточно часто эти методы похожи друг на друга. Есть два способа это предотвратить. Один из них — это группировка нескольких Find-методов в один общий. Этот метод должен принимать object, что представляет собой критерий запроса. Пример: Чтобы создать запрос с критерием запроса, мы строим набор критериев шаг за шагом:   Зачастую слишком большие репозитории обрастают целой плеядой различных сервисов. Вы можете избежать этого при помощи чего-то, что я называю CQRS-light. Отличием от полной версии является использование тех же таблиц как для чтения, так и для записи. Используя эту технологию, мы можем использовать ту же самую ORM как для чтения, так и для записи. Обращаться же к CQRS только в тех случаях, когда приложение в этом действительно нуждается (например, при обработке 80+ колонок, с использованием 20+ join). Диаграмма ниже представляет типичную архитектуру CQRS-приложения: Ключевые принципы CQRS-light следующие: Деление всех действий пользователя на две категории. Первая категория — действия, изменяющие систему. К примеру, оформление заказа в интернет-магазине. Вторая категория — действия, систему не трогающие. К примеру, просмотр списка товаров. Первая категория пишет — это команды, другая — читает, это запросы. Обработчики запросов для доступа к данным могут использовать только репозитории. Доступ к данным может осуществяться посредством любой технологии. Обычная конфигурация включает в себя ORM для чтения-записи, ORM для записи и микро-ORM для чтения (вроде Dapper) или же ORM для записи и чистый SQL для чтения. Обработчики команд для доступа и изменения данных могут использовать только репозитории. Для получения данных из базы обработчики команд не должны использовать обработчики запросов. Если обработчик команд должен выполнить комплексный запрос и этот запрос должен получить ответ от обработчика запроса, вы должны продублировать логику этого обработчика запроса и поместить его как в обработчик запроса, так и в метод репозитория (операции чтения и записи должны быть разделены). Обработчики запросов тестируются только в интеграционных тестах. Для обработчиков команд существуют юнит и — опционально — также интеграционные тесты. CQRS даже в своей легкой форме — сама по себе объемная тема и заслуживает отдельного блога. Теперь же давайте вернемся к теме недостатков паттерна конкретного репозитория. Другой недостаток, о котором я бы хотел упомянуть, заключается в нежелательной миграции бизнес-логики в определение запросов. К примеру, даже такой простой запрос:   содержит часть бизнес-логики, описывающей необходимые параметры, дабы заказ стал активным. Как правило, ORM не позволяет нам инкапсулировать такие части логики в отдельные свойства, как IsActive. Что нам здесь нужно, так это паттерн спецификации. Теперь наш запрос в форме паттерна спецификации будет выглядеть так: Автор перевода: Евгений Лукашук Источник
Введення в розробку програм під iOS. Частина 0.

Автор: Volodymyr Bozhek

Здравствуйте, дорогие читатели. Меня зовут Владимир. Любая технология рано или поздно приедается и рост себя как специалиста затрудняется. Было принято решение что то кардинально поменять в своей жизни. А так как писать различные интересные проекты я просто обожаю, было принято решение начать изучение в корне другой платформы, среды разработки и языка программирования. Поиск этой платформы оказался достаточно прост для меня. Я решил, что это будет мобильная платформа. У меня было много разных телефонов с разными операционными системами. Но свой выбор я сделал в пользу iOS, так как при железе слабее, чем у других телефонов, софт работает намного быстрее, чем на других платформах. Это не все преимущества этой платформы, но о других я рассказывать я не буду, дабы не раздувать дискуссию на эту тему. Скажу лишь одно, что телефон c iOS меня ни разу не подвел, даже в самые нужные моменты. Разумеется, что для разработки под iOS необходим mac, и я его купил. Перед покупкой, разумеется, пробовал разработку под мобильные платформы в гибридных платформах типа Xamarin, Ionic, но на то время функционал в них был не так совершенен, как сейчас, да и пользуясь ими, я бы остался на платформе Windows, это нарушало цель, которую я перед собой поставил по поводу другой платформы. В течение отпуска, где то за месяц я разобрался, как писать под iOS приложения и сразу начал искать проект, на котором смогу потренироваться. Друг предложил такой проект и я взялся. За 9 месяцев написал серьезное приложение, купил учетную запись разработчика, выкладывал сборки на Test Flight, их тестировали тестировщики, прошел валидацию в App Store и выложил приложение в App Store. А теперь по сути. Я постараюсь написать серию статей, в которых распишу простым языком, что надо делать, чтобы у вас тоже это получилось и вы таки выложили свое приложение в App Store. Касаемо разработки под iOS, то это просто мое хобби во вне рабочее время (надо же как то развлекаться), основной хлеб приносит разработка под Windows/Web платформу с технологиями Microsoft. Итак, приступим. Включите свой мак, найдите на панели задач иконку App Store и нажмите на нее. Выглядит эта иконка вот так: Затем введите в поле поиска, текст “xcode”, вы должны увидеть следующее:  У меня Xcode уже установлен, поэтому на скриншоте отображается кнопка “Open”, у вас будет отображаться кнопка “Install”. Установите Xcode себе на компьютер, версия Xcode с которой мы будет работать с вами в этом примере, будет 8, на текущий момент это последняя версия этой среды разработки. Язык программирования, который мы будем использовать, называется Swift, по синтаксису он больше похож на JavaScript и где-то даже на C# местами. Синтаксис языка Swift в этих статьях мы разбирать не будем, в сети интернет есть полно руководств на эту тему. Сам синтаксис языка не сложно изучить, это делается за день, сложность как раз возникнет при попытке разработки приложения под iOS. Вот именно эту сложность, мы с вами и постараемся одолеть. Чтобы серия статей была как-то взаимосвязана, мы с вами напишем проект под названием “Warehouse” (склад), в котором можно будет добавлять товары, заполнять их атрибуты, редактировать и удалять товары. Данные будут сохраняться в настройки телефона. Вы уже установили Xcode 8? Если да, тогда запускайте его, вы увидите следующее: Нажмите кнопку “Create a new Xcode project”. Вы увидите такой экран:  Выделите проект “Single View Application” и нажмите кнопку “Next”. Вы попадете на экран задания названия проекта: На данном скриншоте виден пример того, как заполнить название приложения. В поле “Product Name“, введите “Warehouse”, так будет называться наше приложение. В поле “Organization Name”, введите свои имя и фамилию, или название вашей компании. В поле “Organization Identifier”, вводится уникальный идентификатор приложения, который будет использоваться как ключ при регистрации данного приложения в iTunes, чтобы была возможность подписывать сборки и отправлять на бета сервер Test Flight для тестирования, но об этом позже. Вкратце “com” - это сокращенно “company”, “bozhek” это название компании, у вас это будет другое название. В поле Bundle identifier видно полное название вашего приложения в iTunes. В поле Language, оставьте Swift. В поле Devices, выберите iPhone. Нажмите кнопку “Next”. Откроется проект, который мы создали: Обратите внимание на красный кружок в поле Status: “Signing for Warehouse reguires a development team”. Это сообщение говорит нам о том, что приложение надо подписать сертификатом, без сертификата мы не соберем и не запустим это приложение. Давайте это исправим. В поле Team, откройте выпадающий список и выберите в нем пункт “Add an Account...”, откроются свойства среды разработки Xcode, с предложением ввести логин и пароль от  вашей учетной записи в App Store, под которой вы устанавливаете приложения себе на телефон: Если же у вас по каким то причинам нет этой учетной записи, создайте ее, нажав на кнопку “Create Apple ID”. Создание этой учетной записи я не буду рассматривать в данной статье, поскольку она создается очень легко и в сети интернет есть полно информации на эту тему. Итак, вы ввели в поля Apple ID и Password свои данные, нажмите кнопку “Sign In”. После этого красный круг с ошибкой пропадет и вы увидите следующее: Теперь вы сможете собрать и запустить свой проект. Заметьте, я рассказываю чисто практически как и что делается, особо не вникая в детали. Если вам нужна более подробная информация, вбейте в гугл WWDC, и посмотрите официальные видео сессии от компании Apple, в их двухчасовом видео много воды, но зато есть теория, которая будет вам нужна. Я даю только суть. Нажмите на иконку приложения в проекте: Выберите симулятор “iPhone 7”. Затем нажмите на кнопку Собрать и запустить приложение: Будет запущена сборка проекта и запущен симулятор “iPhone 7”, в котором откроется наше приложение: Сейчас мы видим только белый экран и больше ничего, так как мы еще ничего не делали. Чтобы выйти на рабочий стол в симуляторе, выполните сочетание клавиш Shift + Command + H, это сочетание означает нажатие кнопки Home: Вы увидите на рабочем столе наше приложение "Warehouse". Теперь давайте остановим выполнение приложения, для этого в Xcode нажмите кнопку: Теперь давайте посмотрим, что у нас есть внутри проекта. Выделите в левой панели среды разработки файл “Main.storyboard”, в этом файле содержится представление приложения. В панели справа отображаются свойства представления. Разработка под iOS строится через паттерн MVC (Model View Controller), файл Main.storyboard, содержит View, которые вы будете использовать в своем приложении для создания визуального  интерфейса. Теперь давайте выделим в панели свойств вкладку Class: В поле Class , мы видим класс контроллера, привязанный к данному представлению. Теперь выделите вкладку Size: На данной вкладке задаются размеры представления. Выделите вкладку Events: На данной вкладке задаются обработчики событий в представлении с привязкой к методам в контроллере. Теперь выберите в левой панели файл ViewController.swift : На 9 строке подключено пространство имен UIKit. На 11 строке объявляется класс с именем ViewController, который наследуется от базового класса контроллера UIViewController. На 13 строке мы переопределяем метод, загрузки представления, этот метод вызывается когда представление начинает свою загрузку. В этом методе необходимо предварительно проинициализировать данные элементов управления, используемых на вашем представлении. На строке 14, вызывается метод базового класса ViewController. Код на строке 18 нам пока не интересен, мы его рассматривать не будем, чтобы не путаться. На этом урок завершается. На следующем уроке, в первой части, мы рассмотрим с вами, как пользоваться элементами управления, как привязывать к ним обработчики событий и как взаимодействовать с ними.
Що повинен знати Python розробник у 2020 році

Автор: Влад Сверчков

Общие знания, которые нужны каждому Python разработчику Что должен знать Python Developer, работающий в сфере Data Science Python BackEnd Developer Python Developer в сфере DevOps Automation QA Engineer (Python) Desktop, Mobile, Game Python Developer Итоги   Добрый день, дорогие читатели блога ITVDN! Предлагаем вашему вниманию новую публикацию в рубрике “Что должен знать разработчик...”, в которой мы пишем о самых популярных IT-профессиях. Ранее уже были опубликованы обзоры по FrontEnd и .NET. В этот раз в центре внимания язык Python. В каких сферах он успешно применяется, а в каких буквально незаменим? Какими знаниями нужно обладать, чтобы стать, к примеру, Python BackEnd разработчиком? Все это вы узнаете в нашей статье. Приятного чтения! В последние годы язык программирования Python стремительно набирает популярность. По данным Stack Overflow Developer Survey 2019, в котором приняли участие более 87 тысяч IT специалистов из разных стран, Python в 2019 году опередил даже таких постоянных и несомненных лидеров как Java, С# и С++. Сейчас он широко используется в Data Science (машинное обучение, анализ данных, визуализация), разработке встроенного программного обеспечения и в реализации серверной части веб-приложений. Также при помощи Python можно создавать игры, десктопные и мобильные приложения, писать тесты для ПО, а также упрощать администрирование ОС. Как видите, сферы применения довольно обширны. Мы постараемся затронуть самые популярные, в которых Python используется в качестве основного средства программирования. Начнем с технологий, которые должен знать любой Python-разработчик вне зависимости от специализации.   Python Многие сходятся во мнении, что язык программирования Python  - один из самых легких для изучения, его часто рекомендуют в качестве первого языка начинающим программистам. В то же время это высокоуровневый язык программирования общего назначения, с большим потенциалом повышения производительности программиста, скорости разработки и читаемости кода. Каждый Python-девелопер должен владеть таким набором знаний: Синтаксис языка Python: типы данных, строки и символы, операции с целыми и вещественными числами, отступы, условные и циклические конструкции, функции, списки, словари, классы, файловый ввод-вывод, логические операции и операции сравнения. Популярные библиотеки и фреймворки. Этот пункт зависит от выбранного IT-направления. К примеру, если вы планируете себя реализовать в веб-разработке, отличным выбором станет библиотека Requests, которая облегчит процессы составления HTTP-запросов, также будут полезны фреймворки Django и Flask. Если же вас увлекает машинное обучение, то Theano, TensorFlow, Keras и другие библиотеки помогут с построением и тренировкой нейронных сетей. IDE и редактором кода. Проекты лучше создавать в интегрированной среде разработки (IDE) или в редакторе кода. Это позволяет сделать написание кода максимально удобным: подсветка синтаксиса, автодополнение, инструменты сборки, возможность отладки код и прочее. Самыми популярными платформами являются PyCharm, WingWare IDE, Komodo.   Открытым остается и вопрос, какую версию Python стоит изучать: 2.x либо 3.х? Согласно информации из официального источника разработчиков python.org, в 2020 году прекращается поддержка Python 2.7. Соответственно, стоит сконцентрировать усилия на изучении именно версии 3.х. Разработчик должен иметь глубокие знания языка Python, понимать и уметь применять на практике принципы объектно-ориентированного программирования (ООП).    Английский язык Знание английского языка - естественное требование для каждого разработчика в IT, поскольку большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете самостоятельно вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.    Git & GitHub Git - наиболее популярная система контроля версий, которая позволяет вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Помимо этого, стоит уметь работать с сервисом онлайн-хостинга проектов, использующих систему контроля версий. В данном случае это GitHub. В тандеме с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы.   Алгоритмы и структуры данных Понимание алгоритмов и структур данных является очень важным для любого программиста. Исключением могут быть разве что FrontEnd разработчики. Данные используются во всех сферах нашей жизни: от банковских счетов и медицинских карт вплоть до списка оплаченных покупок в супермаркете. Знание структур данных поможет вам хранить информацию в упорядоченном виде, что упростит работу с ней. Также это повысит общую производительность ваших программ. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач.   Методологии разработки Agile/Scrum Методологии разработки - это своеобразные путеводители по процессам эффективной разработки ПО. Их применение помогает организовать максимально продуктивную работу всех участников, которые напрямую или косвенно задействованы в разработке продукта в соответствии с выбранной стратегией.  Agile - семейство гибких методологий разработки программного обеспечения, которое позволяет выпускать продукт небольшими частями, постоянно его дополняя и совершенствуя. При таком подходе технические и бизнес-подразделения работают совместно, ПО постоянно обновляется, обеспечивается быстрое принятие решений и выявление неправильных подходов, приложение проще обслуживать, а качество кода готового продукта более высокое. Agile имеет собственный манифест, который подробно описывает основные принципы, на которых строится гибкая разработка. Scrum является одной из реализаций agile-подхода. Его используют многие команды, поэтому знание особенностей работы со scrum-моделью для разработчика серверного ПО является востребованным и весьма полезным. Итак, мы рассмотрели технологии, которыми должны владеть все Python разработчики, не зависимо от прикладной области, в которой они работают. Теперь давайте рассмотрим наиболее популярные специализации, в которых может себя реализовать Python разработчик, а это: Data Scientist BackEnd Developer DevOps Engineer Automation QA Engineer (Python) Проанализируем каждое направление, затронув основные технологии. Также расскажем, каким образом Python используется в Desktop, Mobile и Game разработке.   Что должен знать Python Developer, работающий в сфере Data Science   Легкий и лаконичный Python нашел себе широкое применение в такой важной сфере разработки, как Data Science. Почему именно Python? Он прост в изучении и способен в несколько строк кода создать искусственный интеллект, который будет способен к самообучению, либо посчитать матрицу внушительных размеров. Data Science подразумевает работу с большими объемами данных и включает в себя сбор, анализ, структурирование и дальнейшую визуализацию информации. Каждый специалист данной области занимается: сбором большого количества неупорядоченных данных и преобразованием их в удобный формат; решением бизнес-задач с использованием данных; программированием на Python, R и других языках; работой со статистикой; использованием Machine Learning, Deep Learning и текстовой аналитике; сотрудничеством с IT и бизнесом в равной мере; изучением современных тенденций, которые могут помочь в разработке, которая ведется на данный момент в компании.    Итак, какими технологиями необходимо владеть, чтобы стать Data Scientist?   Линейная алгебра и математический анализ Data Science - это как раз та область, в которой без знаний математики ну никак. Работа с колоссальным объемом данных предусматривает в обязательном порядке применение аппарата линейной алгебры. А это матрицы, векторы, линейные уравнения, различные алгоритмы классификации и кластеризации, которые широко используются (подробнее в следующих разделах). Также необходимо знать оптимизацию средствами матанализа.   Статистика Наука, которая применяет совокупность методов и приемов по сбору, обработке, представлению и анализу числовых данных, чтобы впоследствии на их основании сделать те или иные выводы. Статистика содержит такие важные разделы, как: выборка, распределение частот, среднее значение, взвешенное среднее значение, медиана, вероятность, распределения вероятностей, тестирование значимости, а также ряд других тем и понятий. В интернете есть множество хороших англоязычных курсов, которые помогут освоить разделы статистики, которые обязательны для специалиста Data Science.   Библиотеки и дополнительные инструменты Python Для всевозможных математических вычислений используется Python, а точнее - его библиотеки. К примеру, Matplotlib и Seaborn используются при необходимости визуализации данных, NumPy для работы с уже упомянутой линейной алгеброй. Для научных вычислений прибегают к использованию SciPy. Pandas позволяет выполнять быстрый анализ, очистку и подготовку данных из разных источников - Excel, SQL, веб-страницы, файлы CSV. Таким образом, библиотеки Python предоставляют отличный набор для анализа данных и визуализации. Среди дополнительных инструментов особого внимания заслуживает Jupyter Notebook, который позволяет создавать очень наглядные и информативные аналитические отчеты путем совместного хранения кода, иллюстраций, комментариев, формул и графиков.    Базы данных Поскольку работа Data Scientist-а плотно связана с обработкой большого количества информации, очевидно, что без баз данных тут не обойтись. Необходимо знать, как извлекать и обрабатывать данные, уметь писать и выполнять сложные запросы. Существуют реляционные базы данных (так называемые, SQL базы данных) которые используют структурированный язык запросов, и нереляционные (NoSQL), которые предлагают динамическую структуру для определения и обработки данных. К системам управления баз данных (СУБД) первого типа относят MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Ко второму типу - MongoDB, Cassandra, BigTable, Redis, RavenDB и прочие. Несмотря на широкое распространение NoSQL, специалисты Data Science все же используют SQL технологии, поскольку зачастую работают именно с упорядоченным множеством данных (медицинские карты пациентов, транзакции клиентов и т. д.). Здесь наилучшим выбором станет PostgreSQL/MySQL/SQL Server.   Машинное обучение Это ответвление искусственного интеллекта, основная идея которого состоит в следующем: компьютер должен не просто использовать заранее написанный алгоритм, а самостоятельно обучаться решению поставленной задачи (например, задачи определения символов по отсканированному изображению текста, опознавания лиц и голосов, подборки видеороликов на YouTube с учетом просмотренных ранее). Минимальный набор базовых алгоритмов машинного обучения, который необходимо знать: линейная регрессия, логистическая регрессия, SVM (метод опорных векторов), random forest (“случайный лес”), дерево принятия решений, Gradient Boosting, РСА (метод главных компонент), k-means (кластеризация методом k-средних), k-NN (классификация методом k-ближайших соседей), ARIMA (интегрированная модель авторегрессии скользящего среднего). Говоря о библиотеках Python, которые применяются в машинном обучении, отметим scikit-learn (работа с классическими алгоритмами машинного обучения), TensorFlow и Keras (работа с глубоким обучением, которое направленное на работу с нейронными сетями). Если подытожить вышеизложенное, вам необходимо знать основные алгоритмы кластеризации, классификации, уметь работать с нейронными сетями, умело использовать указанные библиотеки в ходе решения задач, а также понимать и применять на практике принципы машинного обучения. Затем можно будет переходить к подробному изучению глубокого обучения, искусственного интеллекта и разрабатывать проекты для портфолио.   Что должен знать Python BackEnd Developer   Веб-сервера (Nginx, Apache) BackEnd разработчику необходимо знать общие принципы работы веб-серверов, а также понимать, как в целом работает интернет и каким образом ваш код взаимодействует с серверами, базами данных и вообще с “внешним миром”.  Веб-сервер - это программное обеспечение либо аппаратное средство, которое работает с целью приема HTTP-запросов, их обработки и последующей выдачи НТТР-ответов. На данный момент их существует множество, однако наибольшее распространение получили Nginx и Apache. Этим двум веб-серверам посвящено несметное количество статей, которые рассматривают их плюсы и минусы и благодаря которым вы сможете определиться, какой из них лучше всего подходит под решение ваших задач. Но также отметим, что сами по себе Nginx и Apache способны не только конкурировать, а и эффективно взаимодействовать между собой при правильной конфигурации, создавая мощную, гибкую и высокофункциональную систему с возможностью горизонтального масштабирования.   Базы данных (MySQL, MongoDB) Серверная сторона программного обеспечения предусматривает активное использование серверов (от англ. “to serve” - служить). Это компьютеры, которые выполняют какую-либо сервисную задачу по приему, обработке и предоставлению информации пользователям. Для BackEnd разработчика знание серверов и умение работать с ними является настолько же важным, насколько для FrontEnd разработчика - знание триады HTML, CSS и JavaScript.  Работаете со структурированными данными, а среди ваших приоритетов надежность, окупаемость и совместимость со всеми основными ОС? Выбирайте MySQL. Если же вы ориентируетесь на скорость, гибкость, масштабируемость, удобство в управлении СУБД, либо вы просто не можете определить схему для своей БД, вам стоит сфокусироваться на изучении систем управления нереляционными базами данных. Хорошим выбором станет MongoDB благодаря своей распространенности.      Фреймворки Flask/Django Два данных фреймворка являются самыми популярными в веб-разработке на языке Python. Какому стоит отдать предпочтение? Flask подойдет тем, кто заинтересован в тонкостях настройки проекта, и кто хочет иметь полноту власти над всеми его компонентами. Также данный фреймворк лучше подходит для создания REST API. Минимализм, максимальный контроль составляющих приложения, свобода в управлении каждым элементом - это визитные карточки Flask. С другой стороны, если вы ищете набор готовых инструментов, стоит обратить внимание на Django. Он ориентирован больше на стек готовых решений и конечный продукт, нежели на подробную настройку всех компонентов проекта. Если вас интересует разработка и развертывание приложения в кратчайшие сроки, простота в его создании, масштабируемость, поддерживаемость и наличие очень хорошо структурированной и детальной документации по используемому фреймворку, смело выбирайте Django.   Паттерн MVC (Model-View-Controller) Паттерн MVC достаточно востребован в наше время. Данный шаблон предусматривает разделение приложения на три компонента: Модель, Представление, Контроллер, благодаря чему реализуется концепция разделения и закрепления ответственности за каждым компонентом, что упрощает разработку веб-проектов.    Вспомогательные технологии (Celery, RabbitMQ) Среди известных технологий, которые облегчают жизнь BackEnd разработчику можно отметить Celery. Это инструмент для управления очередями задач, который применяется для фоновой обработки долго выполняющихся задач, снижая нагрузку на процессор. Упомянем также и RabbitMQ - менеджер сообщений, который предназначен для передачи данных (так называемых сообщений) между сервисами и упрощающий работу со сложными ресурсоемкими задачами при помощи очередей.   Что должен знать Python Developer для работы в сфере DevOps   Python особо популярен у DevOps специалистов. DevOps - это методология, которая совмещает в себе разработку (Development) и системное администрирование (Operations) с целью увеличения частоты выпуска релизов. Данные специалисты также должны обладать навыками использования облачных технологий и автоматизации инфраструктуры. DevOps инженеры отдают свое предпочтение Python за его простоту, мощность, надежность, многозадачность, поддержку большого количества специальных пакетов, которые повышают эффективность данного языка программирования и за другие преимущества. Python используют, в основном, вместе с командной оболочкой Bash для упрощения процессов развертывания ПО и автоматизации различных задач системного администрирования (написание скриптов). Что еще должен уметь DevOps инженер, помимо написания скриптов? Понимать устройство ОС Linux/Windows. Знать, как работают компьютерные сети (сетевая модель передачи данных TCP/IP и эталонная модель OSI), понимать инфраструктуру сетей. Знать основные сетевые протоколы (HTTP, HTTPS, SSH, IP, TCP и другие). Работать с популярной облачной инфраструктурой AWS. Применять контейнеризацию (Docker), кластеризацию (Kubernetes), принципы CI/CD (Jenkins), инструменты мониторинга (Zabbix, Nagios), управлять ПО на удаленных серверах (Ansible). Работать с веб-серверами (например, Nginx и Apache), уметь их настраивать. Данный стек технологий вполне достаточный для уверенного старта в качестве DevOps инженера.   Что должен знать Automation QA Engineer (Python)   Python также имеет большую популярность в тестировании. Он применяется для написания скриптов, которые автоматизируют процессы проведения тестов. Помимо классических навыков и знаний тестирования необходимо владеть языком Python, разбираться в принципах ООП и также владеть тестовыми фреймворками (в данном случае - PyTest, Robot Framework, unittest и другие).     Desktop, Mobile, Game Python Developer   Менее популярные сферы использования Python. Для разработки настольных приложений можно использовать библиотеку Tkinter и фреймворк PyQt, который позволяет работать с графическим инструментарием, подобным тому, что использует Visual Studio для создания Windows Forms приложений. Игры на Python также можно создавать - PyGame библиотека в помощь. Однако они будут далеко не уровня ААА. При этом Python успешно используется в таких тяжеловесах гейм-индустрии, как World Of Tanks, Battlefield 2 и EVE Online для запуска скриптовых сцен, реализации пользовательского интерфейса, обработки событий. Если говорить о мобильных приложениях, то там Python применяется разве что для реализации серверной стороны приложения. К примеру, клиент Instagram для iOS написан на языке Objective-C, а сервер — на Python.   Итоги Мы рассказали вам об IT-специальностях, в которых Python пользуется наибольшим спросом. Благодаря своей универсальности, кроссплатформенности, простому синтаксису, читабельности и значительному количеству разнообразных библиотек и фреймворков этот язык программирования значительно облегчает работу программистов и тестировщиков, позволяя существенно сократить время написания кода. Сейчас Python просто незаменим в Data Science из-за своего богатейшего инструментария сбора, анализа, обработки и дальнейшей визуализации данных. DevOps инженеры в несколько строк кода могут с легкостью автоматизировать рутинные и/или масштабные процессы. BackEnd разработчики используют все возможности, которые им предоставляют веб-фреймворки для создания эффективных веб-приложений.    На ITVDN есть подборка видео курсов по языку программирования Python, а также по нескольким самым популярным технологиям, которые должен знать специалист. Комплексная программа обучения состоит из 12 курсов общей продолжительностью более 82 часов. Для формирования практических навыков написания кода мы рекомендуем использовать интерактивные тренажеры по Python. Если вам понравилась эта статья, поделитесь информацией с теми, кому она может быть интересна. Пишите в комментариях, на какие еще вопросы, связанные с выбором специальности и планированием обучения вы хотите получить ответы. Мы постараемся ответить на них в наших новых обзорах.   Смотрите также: Знакомство с Python Как стать Python разработчиком?
Notification success