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

Замовити дзвінок

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

Підписка

Замовити дзвінок

+38 099 757 27 82
Результати пошуку за запитом: mvc 5
Розробка під Android. Сучасні підходи та перспективи.

Автор: Євген Мица

<p>Вебинар посвящен тенденциям, которые уже сложились в Android-разработке, а также тем, которые только набирают силу. Будут рассмотрены теоретические и практические аспекты по каждому из вопросов, обозначенных в программе вебинара.</p> <p><strong>План вебинара:</strong></p> <p>1) Архитектура Android-приложения. Рекомендуемый подход.</p> <p>2) Миграция на AndroidX.</p> <p>3) Jetpack Compose - инструмент разработки UI в Android.</p> <p>4) Coroutines. Работа с асинхронным кодом.</p> <p>5) Внедрение зависимостей. Применение в Android-проектах.</p> <p>6) Room - библиотека для работы с SQLite. Что нового?</p> <p><strong>Целевая аудитория:</strong></p> <p>Данный вебинар будет интересен начинающим Android-разработчикам, а также имеющим определенный опыт и желающим расширить теоретические знания.</p>
Підводні камені у розробці мобільних ігор під Android та iOS

Автор: Юрій Шерстобітов

<p>Данный вебинар будет посвящен основам маркетинга и гейм дизайна мобильных игр: 1. Рассчитаем стоимость разработки готовой игры Castle Clicker в реальных единицах валюты и времени. 2. Вспомним, что такое смета и концепт документы. Зададимся вопросом - мы &laquo;ковыряем&raquo; проект или нам нужен готовый продукт? 3. Приведем примеры успешной монетизации на основе игр Farms &amp; Castles, Angry Birds: Evolution и Sandstorm от Ubisoft. 4. Специально публично озвучим, как убить игру рекламой. 5. Выберем взрывную механику, ответив на вопрос о том, что лучше - казуалка или хардкор, а также рассмотрим роль соц. сетей, таблицы рейтингов, ачивок, пассивного мультиплея на примере таких игр как Art of Conquest и Clash of Clans. 6. Разберемся с подводными камнями самиздата и работы с издателем на примере нашей игры Sharks vs Dolphins: Checkers.</p>
Отказоустойчивая архитектура фронтальной системы банка

Автор: HighLoad

В докладе мы расскажем: 1. Что такое высоконагруженная фронтальная система банка, чем она отличается от веб-проекта. Место фронтальной системы в IT-ландшафте банка. 2. Как масштабируется СУБД в условиях Enterprise. Технологический стек ограничен и сложно изменяем, решения вендоров по масштабированию ненадежны. Поэтому шардируем экземплярами СУБД. 3. Для отказоустойчивости аналогично делим web-сервера, сервера приложений и т.п. Получаем слабо-связанные, независимо работающие блоки, каждый блок обслуживает часть клиентов. При отказе блока переключаемся на резервный. 4. Для распределения по блокам появляется компонент маршрутизации – как обеспечивается его отказоустойчивость? 5. Где брать данные клиента (история операций, профиль клиента) при переключении в резервный блок? Что можно, а что нельзя деградировать при отказах с точки зрения бизнеса. 6. Какие механизмы обеспечивают непрерывное обслуживание клиентов при отказах бэк-офисных систем. 7. Уголок перспективной архитектуры: омниканальность, наше видение микросервисной архитектуры.
Введення в розробку програм під iOS. Частина 6

Автор: Volodymyr Bozhek

Здравствуйте,  дорогие читатели. В этом уроке мы: Установим менеджер установки пакетов “Brew”; Научимся пользоваться базой данных “Mongo DB” и изучим библиотеку “Mongoose”; Установим и сконфигурируем базу данных “Mongo DB”; Научимся запускать демон (службу) “Mongod” и подключаться к ней; Научимся просматривать документы базы данных “Mongo DB” с помощью приложения “Robomongo”; Создадим REST сервисы для товаров и пользователей с использованием “NodeJS”; Научимся тестировать REST сервисы с помощью расширения “Chrome” браузера “Postman”; Итак, вы скорее всего задались вопросом, почему же я выбрал именно такие технологии для написания REST сервисов. Почему не выбрал то, что уже давно у всех на слуху, такие технологии как Web API + Entity Framework. Ответ прост, я выбрал ровно те технологии, которые явно подходят платформе, на которой мы ведем разработку macOS. Да, можно было установить Xamarin Community Edition, в нем создать ASP.NET проект и сделать сервисы на Mono.NET. Еще был вариант сделать сервисы на виндовс платформе, развернутой на виртуальной машине в веб сервере IIS с сетевым адаптером мост. Это для того, чтобы веб сайт и сервисы были доступны на хостовой машине macOS в браузере. Возможно, в одном из моих будущих видео курсов по разработке iOS приложений я буду использовать именно платформу Windows и Visual Studio для разработки REST сервисов. Но в этом уроке  мы будем делать сервисы на NodeJS,  и вы сами убедитесь в том, насколько это просто и как мало кода надо для этого написать :) В качестве среды разработки я буду использовать WebStorm, он довольно хорошо себя оправдал как один из продуктов JetBrains. В этом уроке мы не будем работать с приложением “Warehouse” под iOS, поскольку мы должны приступить к изучению библиотеки “Alamofire”. А для нее необходимы REST сервисы, которых у нас сейчас нет. Показывать работу на всяких httpbin, parse и других сервисах тестирования я не буду, этого полно в сети интернет, вы и сами будете видеть это в поиске нужной вам информации. “Alamofire” -  это асинхронная сетевая библиотека для работы с REST сервисами. В большинстве туториалов  не рассказывается, как сделать REST сервисы и клиент к ним на разных платформах. Мне хотелось бы нарушить этот стереотип и предоставить вам учебные примеры по созданию полнофункционального REST сервиса и полнофункционального iOS клиента в составе приложения “Warehouse” к нему. Проще говоря, дать готовое решение  для быстрого понимания, что и как делается. Это то, чего обычно не хватает новичкам и то, чего обычно нигде не выкладывают. Приходится самостоятельно разбираться и искать нужную информацию. Откройте “WebStorm”. Выберите в меню “File -> New Project”. Выделите тип проекта “Node.js Express App”. В поле “Location”  укажите название проекта “Warehouse” и путь, по которому вы будете сохранять данный проект. В поле “Template”  выберите “EJS”. Нажмите кнопку “Create”. Вы увидите диалоговое окно с предложением, откуда взять библиотеку “NodeJS”. Оставьте пункт по умолчанию “Download from the Internet” и нажмите кнопку “Configure”. Будет загружен из сети интернет “NodeJS”, “Express” и другие библиотеки. Панель навигации будет выглядеть у вас так: Рассмотрим, что создал нам данный шаблон. В папке “bin”  хранится файл “www”, в нем находится настройка сервера “NodeJS”, с этого файла происходит запуск нашего сервера. В папке “node_modules”  находятся библиотеки, которые были автоматически загружены  шаблоном проекта NodeJS. В папке “public”  находятся ресурсы, используемые нашим сервером (картинки, CSS стили, скрипты). В папке “routes”  находятся скрипты, которые должны содержать маршрутизацию относительно текущего URL,  введенного пользователем. Например,  файл с именем “users.js”  вызывется, когда пользователь введет в браузере URL: “http://localhost:{port}/users”. Файл “index.js”  вызывется, когда пользователь введет URL: “http://localhost:{port}”. Если сравнивать с паттерном MVC (Model View Controller), то в папке “routes”  находятся “контроллеры”. В папке “views”  находятся представления. Расширение “*.ejs”  говорит о том, что содержимое данного файла будет транслироваться через библиотеку “Express JS”. Данная библиотека создана в помощь, чтобы можно было проще создавать маршрутизацию в NodeJS  и проще создавать пользовательский интерфейс. Внутри этих файлов “*.ejs”  содержится обычная “HTML” разметка. Файл маршрутизации и файл представления должны называться одинаково, если они будут связаны. В текущем проекте связаны только “index.js” и “index.ejs”. Маршрут “users.js”  не имеет явного представления, для него преставление  генерируется средствами “NodeJS”. Наша задача создать только REST сервисы, поэтому работу с “EJS”  мы не будем рассматривать в данном уроке. Рассмотрим содержимое файла “www” в папке “bin”. На 7 строке  через библиотеку “Require JS”  мы подключаем содержимое модуля “app.js”  в текущий исполняемый модуль “www” и запускаем это содержимое на исполнение. В файле “app.js”  содержатся настройки для работы нашего сервера. На 8 строке  мы задаем режим отладки для нашего сервера. На 9 строке  мы подключаем модуль “http”  для работы с HTTP запросами. На 15 строке  задается порт “3000”, на этом порту сервер будет принимать входящие запросы к нему. На 16 строке  устанавливает этот порт для свойства “port” сервера. На 22 строке  создается сервер на основе настроек экземпляра “app”. На 28 строке  сервер запускается и начинает прослушивание на порту “3000”. На 29 строке  привязывается функция “onError”, вызываемый при возникновении ошибок. На 30 строке  привязывается функция “onListening”, вызываемая  при начале прослушивания запросов сервером. Остальной код в данном модуле не представляет для нас интереса. Чтобы запустить приложение, выполните в меню “Run -> Run bin/www”, сервер запустится. Затем откройте браузер и введите URL: “http://localhost:3000”, вы увидите приветствие. Чтобы остановить сервер, выполните в меню “Run -> Stop”. Теперь необходимо установить базу данных “Mongo DB”. Подробнее об установке  вы можете прочитать тут. Проще всего устанавливать базу данных  через менеджер пакетов “Brew”. Давайте установим его. Перейдите в браузере по адресу, на сайте будет предложено скопировать строку “/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” в терминал. Откройте терминал и скопируйте в него строку установки “Brew”. После установки  вы увидите следующее: Теперь необходимо установить базу данных “Mongo DB”. Установка базы данных через “Brew”  проще тем, что “Brew”  сам заполняет нужные переменные среды окружения и вам не надо этого делать вручную  в случае с установкой базы данных вручную. Перейдите в “WebStorm”, откройте внутри него терминал. И введите команду “brew install mongodb && mongod”, данная команда скачает и установит “Mongo DB”, а также выполнит настройки по умолчанию для демона “mongod”. Выполните в терминале команду “sudo mkdir -p /data/db”. Введите свой пароль и нажмите кнопку “Enter”. Данная команда создаст папку “data” и в ней папку “db”, эта папка используется по умолчанию для добавления базы данных “Mongo DB”. Команда “sudo”  используется, чтобы выполнить остальную часть команды от имени администратора.       Теперь необходимо установить в наш проект библиотеку “Mongoose”  для осуществления возможности работы с базой данных их кода приложения сервера . Выполните в терминале команду “npm install mongoose”. Документацию по этой библиотеке можно почитать тут:  Данную команду мы выполняли через  встроенный в NodeJS  менеджер пакетов, так как устанавливаем данную библиотеку исключительно для нашего проекта, а не глобально. Откройте терминал, введите команду “mongod”. Данная команда запускает сервер базы данных “Mongo DB”, который принимает входящие подключения на порту “27017”. На картинке выше  вы можете в этом убедиться “waiting for connections on port 27017”. Демон запустили, теперь перейдите в “WebStorm”, в терминале внутри введите команду “mongod –version”, вы увидите версию базы данных “Mongo DB”, которая была установлена на ваш компьютер. Теперь необходим клиент с GUI  для работы с базой данных. Откройте браузер, перейдите по адресу, нажмите кнопку “Download”, скачайте и установите приложение. После установки приложения  откройте его. Нажмите на иконку: Откроется приложение “Robomongo”. Нажмите кнопку “Connect to local or remote Mongo DB instance”. Откроется диалоговое окно подключения к базе данных. Нажмите кнопку “Create”. Откройте диалоговое окно настройки подключения к базе данных. Заполните настройки, как показано на картинке выше и только на вкладке “Connection”, нажмите кнопку “Save”. После этого в окне “Mongo DB connections”  у вас появится добавленное подключение. Выделите его и нажмите кнопку “Connect”. Нажмите правой кнопкой в панели навигации по “Warehouse” и в контекстном меню выберите пункт “Create Database”. В поле “Database Name”  введите “warehouse”, нажмите кнопку “Create”. На картинке выше  видно, что база данных “warehouse”  была успешно добавлена. Супер :) Теперь надо добавить в проект модель и схему базы данных, они создаются с помощью библиотеки “Mongoose”. Перейдите в “WebStorm”. В панели навигации, нажмите правой кнопкой по “Warehouse”, в контекстном меню выберите “New -> Directory”. Создайте папку с именем “models”. Создайте в папке “models”  модули “Product.js” и “User.js”. А в папке “routes” создайте модули “auth.js”, “products.js”. Откройте модуль “Product.js”, заполните его, как показано на картинке ниже: На 1 строке  мы подключаем библиотеку “mongoose” и создаем ее экземпляр с именем “mongoose”. На 2 строке  мы правым операндом создаем схему таблицы товаров и присваиваем ее левому операнду с именем “ProductSchema”. Таблица товаров содержит поля: скрытое поле “_id”, типа “String”, в этом поле содержится уникальный идентификатор строки. скрытое поле “__v”, типа “Number”, в этом поле содержится версия API  по умолчанию 0. Версия API  нужна для того, чтобы можно было менять реализацию сервисов и иметь несколько версий  для обратной совместимости. поле “productImage”, типа “String”, тут будет храниться название картинок из нашего проекта под iOS, названия от “tool001” до “tool012”. поле “productName”, типа “String”, тут будет храниться название товара. поле “productDescription”, типа “String”, тут будет храниться описание товара. На 7 строке  мы правым операндом создаем экземпляр модели с именем “Product” и указываем создать экземпляр на основе схемы, описанной в экземпляре “ProductSchema”.      Библиотека “mongoose”  создает данный экземпляр и присваивает его левому операнду. Свойство “exports”  содержит экземпляры объектов, которые  будут доступны из модуля  при подключении его через библиотеку “Require JS”. Откройте модуль “User.js”, заполните его, как показано на картинке ниже: На 1 строке  мы подключаем библиотеку “mongoose” и создаем ее экземпляр с именем “mongoose”. На 2 строке  мы правым операндом создаем схему таблицы товаров и присваиваем ее левому операнду с именем “UserSchema”. Таблица пользователей содержит поля: скрытое поле “_id”, типа “String”, в этом поле содержится уникальный идентификатор строки. скрытое поле “__v”, типа “Number”, в этом поле содержится версия API  по умолчанию 0. Версия API  нужна для того, чтобы можно было менять реализацию сервисов и иметь несколько версий для обратной совместимости. поле “userName”, типа “String”, тут будет храниться логин пользователя. поле “userPwd”, типа “String”, тут будет храниться пароль пользователя. поле “userDesc”, типа “String”, тут будет храниться описание пользователя. На 7 строке  мы правым операндом создаем экземпляр модели с именем “User” и указываем создать экземпляр на основе схемы, описанной в экземпляре “UserSchema”. Затем присваем созданный экземпляр свойству “exports” данного модуля. Откройте модуль “auth.js”, заполните его в соответствии с содержимым ниже: На 1 строке  подключаем модуль “express” и создаем его экземпляр с именем “express”. На 2 строке  создаем экземпляр маршрутизатора запросов с именем “router”. На 3 строке  подключаем модуль “User.js” и создаем его экземпляр с именем “User”. На 4 строке  строим маршрут типа “http://localhost:3000/auth/”. На экземпляре “router”  вызываем функцию “post”. Вызов данной функции говорит, что созданный с помощью него маршрут будет доступен только через HTTP глагол POST.       Первым аргументом задаем маршрут, вторым аргументом задаем функцию обработчик, который будет вызван при переходе по данному маршруту с учетом заданного HTTP глагола. Т.е. когда пользователь отправит POST запрос по адресу. Функция обработчик принимает три аргумента. Первый аргумент “request”  содержит экземпляр запроса по данному маршруту.     Второй аргумент “response”  содержит экземпляр ответа по запросу по данному маршруту. В этот экземпляр можно добавлять любой ответ, который вы хотите, чтобы пользователь получил. Третий аргумент “next”  содержит текущий итератор в стеке запросов по маршрутизации. Данный экземпляр необходим, чтобы была возможность перейти на следующую итерацию в стеке маршрутизации. Сам по себе сервер NodeJS  работает асинхронно и никогда никого и ничего не ждет, это нужно учитывать при работе с ним. На 5 строке мы выводим сообщение на консоль. На 6 строке мы на экземпляре “User” вызываем функцию “find”, в которую единственным аргументом передаем специальную функцию обработчик, в которой будет содержаться результат данной операции. Функция “find”  получает все записи из таблицы “User” и присваивает их в JSON формате  второму аргументу функции обработчика с именем “data”. Для  примера, в “data” может содержаться такой JSON: “[{_id:'789787sdfsd78sdfsd7', __v:0, userName: “Test1”,...},{_id:'4444447sdfsd78sdfsd7', __v:0, userName: “Test2”,...}]”. Где квадратные скобки - это массив, а в фигурных скобках - это экземпляр JSON. В аргументе “err”  содержится экземпляр ошибки, если произошла ошибка при выполнении данной функции “find”. На 7 строке мы создаем экземпляр объекта с именем “res”, данный объект содержит свойство “Error”, которое инициализировано значением по умолчанию “Authorization Error”. Как вы уже поняли, это текст ошибки, который вернется на клиент в случае ошибки авторизации клиента. На 8 строке мы проверяем, если при получении данных через функцию “find” произошла ошибка и аргумент “err” не содержит значение “undefined”, мы обращаемся к экземпляру “next” и говорим серверу выполнить следующую итерацию маршрутизации и вернуть ошибку на клиент. На клиент средствами NodeJS  будет возвращена “Stack Trace” ошибки. На 9 строке, если ошибки не было, мы выполняем цикл foreach по массиву JSON объектов “data”. В функцию “forEach”  передается специальная функция, которая содержит три аргумента. Первый аргумент “item”  содержит текущий итерируемый экземпляр JSON. Второй аргумент “i” содержит позицию итератора и имеет тип Number. Третий аргумент “data”  содержит исходный массив объектов JSON, по которым проводится итерация. На 10 строке  мы задаем условие поиска пользователя по его имени и паролю в списке всех пользователей полученной функцией “find”. В условии сравниваются имя и пароль, которые пришли в POST запросе на сервер, с именем и паролем, полученным от функции “find”. На 12 строке, если пользователь был найден, мы присваиваем экземляру “res”  JSON объект найденного пользователя. На 15 строке  мы обращаемся к экземпляру ответа “response”, вызываем на нем функцию “json”, которая принимает данные и возвращает ответ на клиент в JSON формате. В аргумент данного метода мы передаем или экземпляр найденного пользователя, или экземпляр ошибки, что пользователь не найден и авторизация не удалась. На 18 строке  мы экспортируем из модуля экземпляр маршрутизации “router”. Откройте модуль “index.js”. Заполните его в соответствии с содержимым ниже: На 1 строке  подключаем модуль “express” и создаем его экземпляр с именем “express”. На 2 строке  создаем экземпляр маршрутизатора запросов с именем “router”. На 3 строке  строим маршрут типа “http://localhost:3000/index/”, доступный через HTTP глагол GET. На 4 строке, на экземпляр ответа вызываем функцию “render”. Данная функция возьмет представление, указанное в первом аргументе функции и вернет его на сторону клиента. Вторым аргументом задается словарь, в который можно добавить свойства со значениями, к которым можно будет обращаться со стороны представления. На 6 строке  мы экспортируем из модуля экземпляр маршрутизации “router”. Откройте модуль “index.ejs”. Заполните его в соответствии с содержимым ниже: Библиотека Express JS позволяет нам обращаться к свойствам, которые мы указали во втором аргументе метода “render”  путем добавления следующей конструкции “<%= Название_Свойства %>”. На этапе отрисовки страницы данные конструкции будут заменены на значение указанного свойства. Откройте модуль “products.js”, заполните его в соответствии с содержимым ниже: На 1 строке  подключаем модуль “express” и создаем его экземпляр с именем “express”. На 2 строке  создаем экземпляр маршрутизатора запросов с именем “router”. На 3 строке  подключаем модуль “Product.js” и создаем его экземпляр с именем “Product”. На 4 строке  строим маршрут типа “http://localhost:3000/products/”. Данный маршрут будет доступен по HTTP глаголу GET. На 5 строке  мы вызываем на экземпляре “Product”  функцию “find”. Внутри функции мы проверяем, были ли ошибки, и возвращаем в ответе JSON массив со списком всех товаров. На 10 строке  строим маршрут типа “http://localhost:3000/products/”. Данный маршрут будет доступен по HTTP глаголу POST. На 11 строке  мы вызываем на экземпляре “Product”  функцию “create”. Внутри функции мы проверяем, были ли ошибки, и возвращаем в ответе JSON объект успешно созданного товара. На 16 строке  строим маршрут типа “http://localhost:3000/products/{_id}” (например, “http://localhost:3000/products/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу GET. На 17 строке  мы вызываем на экземпляре “Product”  функцию “findById”. Из названия функции ясно, что функция выполняет поиск по идентификатору товара. Для поиска используется скрытое поле “_id” в модели “Product”, объявленной в модуле “Product.js”. Внутри функции мы проверяем, были ли ошибки, и возвращаем в ответе JSON объект успешно найденного товара. На 23 строке  строим маршрут типа “http://localhost:3000/products/{_id}” (например, “http://localhost:3000/products/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу PUT. На 24 строке  мы вызываем на экземпляре “Product”  функцию “findByIdAndUpdate”. Из названия функции ясно, что выполняется поиск товара по его идентификатору “_id”, затем, в случае если найден, обновляются все его поля, кроме скрытых полей. В ответе возвращается JSON объект успешно обновленного товара. На 30 строке  строим маршрут типа “http://localhost:3000/products/{_id}” (например, “http://localhost:3000/products/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу DELETE. На 31 строке  мы вызываем на экземпляре “Product”  функцию “findByIdAndRemove”. Из названия функции ясно, что выполняется поиск товара по его идентификатору “_id”, затем, в случае если найден, товар удаляется. В ответе возвращается удаленный JSON объект. Откройте модуль “users.js”, заполните его в соответствии с содержимым ниже: В модуле “users.js”  я не вижу смысла расписывать подробно, что происходит, поскольку тут все то же самое, что и происходило в модуле “products.js”, рассмотренном выше. Разница только в том, что мы используем другую модель данных “User”. Опишу только доступные маршруты. На 4 строке  строим маршрут типа “http://localhost:3000/users/”. Данный маршрут будет доступен по HTTP глаголу GET. На 10 строке  строим маршрут типа “http://localhost:3000/users/”. Данный маршрут будет доступен по HTTP глаголу POST. На 16 строке  строим маршрут типа “http://localhost:3000/users/{_id}” (например, “http://localhost:3000/users/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу GET. На 23 строке  строим маршрут типа “http://localhost:3000/users/{_id}” (например, “http://localhost:3000/users/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу PUT. На 30 строке  строим маршрут типа “http://localhost:3000/users/{_id}” (например, “http://localhost:3000/users/789w66s2322kks4676s” ). Данный маршрут будет доступен по HTTP глаголу DELETE. Откройте модуль “app.js”, обновите его в соответствии с содержимым ниже: Конкретно в модуль “app.js”  были внесены следующие изменения. С 8 по 11 строку  были подключены модули “index.js”, “users.js”, “products.js”, “auth.js”. На 13 строке  был подключен модуль “mongoose”. На 14 строке  мы задаем свойство “Promise” в значение “global.Promise”, чтобы начать обмениваться сообщениями с базой данной “Mongo DB”. На 15 строке  мы подключаемся к базе данных “Mongo DB” c названием “warehouse”, мы ее ранее создавали в приложении “Robomongo”. Источник данных “mongodb://localhost/warehouse” можно разбить так: “mongodb://” протокол взаимодействия (аналоги “http://”, “tcp://”, “file://”). “localhost” - это адрес машины, на которой хостится база данных. “warehouse” - имя базы данных. На 16 строке  метод “then”  вызывается в случае успешного подключения к базе данных. На 17 строке  метод “catch”  вызывается в случае сбоя подключения к базе данных. С 33 по 36 строку мы задаем доступные глобальные маршруты, которые будет обрабатывать сервер. Надеюсь, все помнят разницу между сервером и сервисами, это не одно и то же. Сервер - это просто приложение, которое внутри себя способно содержать различные ресурсы. Сервер может запускать внутри себя различные потоки для обработки данных. Сервис - это функционал, который как раз запускается в отдельном потоке внутри сервера. Сам по себе сервис без наличия приложения ,в котором его можно разместить, работать не будет. В случае с WebAPI сервером является Microsoft IIS или отдельно стоящее исполняемое приложение с функцией self  хостинга. Мы закончили написание сервера. Запустите демон “mongod” в терминале. Запустите сервер. Вы увидите обновленное приветствие. Я бы рекомендовал вам прослушать курс “Angular JS”, автор Дмитрий Охрименко. Это один из лучших курсов, которые я когда-либо слушал. После данного курса вы без особых проблем сможете сделать клиентскую часть для сервера на “Angular JS”. Теперь давайте научимся тестировать наши REST сервисы. Тестировать сервисы можно и через Fiddler, но на macOS  у него есть проблемы с отрисовкой и работой. Поэтому откройте браузер и перейдите по адресу. “Postman” - это аналог “Fiddler”, доступный в качестве расширения для браузера “Google Chrome”. После установки расширения “Postman” откройте его. Выполним первый запрос к сервису “users” по HTTP глаголу GET. Заполните поле адрес, выберите глагол “GET”, нажмите кнопку “Send”. Результат придет - пусто. Обратите внимание, что в терминале “WebStorm” тоже пишется логирование вызовов при обращения к сервисам. Откройте приложение “Robomongo”, подключитесь к базе данных. Разверните папку “Collections” базы данных “warehouse”, выполните щелчок правой кнопкой мыши по таблице “users”, в контекстном меню выберите “View Documents”. В “Mongo DB” нет колонок, там есть всего одна колонка, в которой хранится JSON объект. Строки называются документами. Причем, в каждую строку одной таблицы можно класть абсолютно разный по структуре JSON объект. База данных позволяет такую операцию. Видим, что данных нет, это не удивительно, ведь мы еще ничего не добавляли. Давайте добавим. Перейдите в “Postman”, выберите глагол “POST”. Выберите “Content-Type” - “x-www-form-urlencoded”. Внимание, через другие типы “form-data”  “raw” работать не будет. Заданные свойства “userName”, “userPwd”, “userDesc” будут отправлены в запросе как JSON объект “{ userName: 'admin', userPwd: 'abc123!', userDesc: 'Administrator' }”. Нажмите кнопку “Send”. Придет ответ: В ответе мы видим JSON объект модели “User”, созданной на сервере. Перейдите в приложение “Robomongo”, выполните пункт контекстного меню “View Documents” на таблице “users”. Отлично, у нас появился первый пользователь :) Перейдите в “Postman”, выберите HTTP глагол “GET”. Нажмите кнопку “Send”. Вы увидите такой результат. Обратите внимание на квадратные скобки, в ответе пришел массив JSON объектов, а не один объект. Теперь давайте изменим пароль пользователю “admin”, на “12345678”. Нам понадобится идентификатор пользователя, выделите и скопируйте значение свойства “_id”. Выберите HTTP глагол “PUT”. Обновите данные так, как показано ниже. Обратите внимание на добавление идентификатора пользователя после основного маршрута “../users/”. Нажмите кнопку “Send”. В ответе получим старый JSON объект до внесения изменений. Теперь для того, чтобы посмотреть измененный объект, воспользуемся сервисом , который возвращает пользователя по его идентификатору “_id”. Выберите HTTP глагол “GET”, обновите адрес, добавьте в конец адреса идентификатор пользователя. Нажмите кнопку “Send”. Получим такой результат. Видим, что пароль пользователя был успешно обновлен и мы получили в ответе один JSON объект, а не массив пользователей. Теперь попробуем удалить пользователя. Адрес оставьте тот же. Выберите HTTP глагол “DELETE”  и нажмите кнопку “Send”. Видим, что в ответе содержится JSON объект удаленного пользователя.             Теперь проверим, доступен ли пользователь после удаления. Адрес оставьте тот же. Выберите HTTP глагол “GET”, нажмите кнопку “Send”. Видим, что пользователь действительно был удален. Также можете проверить это в приложении “Robomongo”.             Теперь приступим к тестированию сервиса “products”.             Получим список товаров. Товаров нет. Добавим первый товар. Обновим описание товара. Получим обновленный товар по его идентификатору. Удалим товар. На этом мы завершаем урок. К данной статье прикреплен архив с готовым сервером на NodeJS , в помощь  учащимся :) На следующем уроке мы: выполним рефакторинг проекта “Warehouse” под “iOS”; научимся пользоваться CollectionViewController; научимся пользоваться библиотекой “Alamofire”, в конце урока будут доступны исходники полноценного рабочего приложения; научимся сохранять объекты в настройки телефона и извлекать их; реализуем функциональность для работы со всеми сервисами, созданными в данном уроке; добавим представление регистрации; добавим представление редактирования пользователей. Материалы к статье тут.
Рекомендації щодо планування роботи MS Outlook

Автор: Олександр Марченко

Введение В прошлой статье мы начали знакомиться с особенностями планирования задач и встреч, используя раздел «Календарь». В этой статье мы определим основные 5 правил, которые позволят более эффективно управлять собственным временем.  Правило 1. Разделяйте задачи на несколько категорий:  «Жесткие» задачи – выполнение которых назначено на заранее известное время и дату, и у вас нет возможности их перенести во времени и пространстве. Зачастую, такие встречи подразумевают вашу договоренность о точном времени с кем-либо, будь то ваш руководитель, клиент, партнер и т.д. «Динамические» задачи – не имеющие четких временных ограничений, к примеру, «Забрать костюм из химчистки: сегодня». У вас есть возможность сделать это по пути на работу, во время обеденного перерыва, возвращаясь в офис после встречи с партнером, вовсе после работы по пути домой или даже воспользовавшись курьерской службой. Главное, что это нужно сделать сегодня. «Плавающие» задачи – не имеющие четкого срока выполнения, т.е. то что нужно сделать с некоторыми затратами по времени. К примеру: «Заказать новую книгу на Amazon» - вам нужно 30 минут чтобы выбрать книгу и оформить заказ, вы можете сделать это в любое свободное время, и у вас нет четких дедлайнов. Правило 2. Поскольку встречи бывают разовые (как, скажем, собеседование с кандидатом), а могут быть регулярными, для управления повторяющимися событиями можно пользоваться автоматическими повторами: Встречи, в которых настроено повторение, будут отображаться в календаре с круговыми стрелками в правом нижнем углу. Правило 3. Оставляйте не менее 30-40% времени в вашем резерве. У вас всегда будет потребность корректировать планы в зависимости от обстоятельств. Всегда помните, что «мы планируем что-то одно, а жизнь вносит свои коррективы». Правило 4. Для работы вне офиса стоит синхронизировать свой календарь со своим смартфоном, если у вас на работе не приветствуется концепция BYOD, распечатайте свой план на неделю и поместите в ежедневник. Так у вас будет шпаргалка, по которой вы сможете вести свои дела без промедлений и опозданий. Правило 5. Используйте четко сформулированные ключевые категории и определения для каждого проекта или направления. Правильный вариант. Неправильный вариант. Соблюдая эти простые правила, вы сможете упростить процесс планирования и сделать его более прозрачным для себя и своих коллег. В следующей статье мы детально рассмотрим процесс создания задачи или события в календаре и приглашения других участников.
Вивчай HTML5 & CSS3 англійською з native спікером

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

Наші партнери CyberBionic Systematics запускають курс HTML5 & CSS3 англійською мовою від native спікера! Опанування HTML5 & CSS3 англійською – це не лише навички кодування, а й потужний старт для кар’єри на міжнародному рівні. Ви навчитеся створювати сучасні вебсторінки, працювати з ключовими інструментами та мислити, як професійний розробник. Зробіть свій перший крок у майбутнє разом з нами!  📅 Дата старту: 5 серпня 2025 року  🕒 Графік: двічі на тиждень – вівторок і четвер  📚 Кількість занять: 10 уроків  🌟 Мова курсу: англійська (необхідний рівень – B1 і вище) Як проходитиме навчання: Онлайн у Zoom: інтерактивні заняття у зручному форматі з будь-якої точки світу. Записи уроків: можливість переглядати матеріал у будь-який час. Практика і тести: закріплення знань через реальні завдання. Сертифікація: офіційний сертифікат для підтвердження ваших навичок. Чого ви навчитеся: Створювати структуру вебсторінок за допомогою HTML5 & CSS3 Писати чистий і семантичний код Використовувати основні інструменти для веброзробки Реалізовувати власні проєкти під керівництвом ментора Про ментора курсу James Turner — Front-end Software Engineer з понад 5-річним досвідом у розробці. Керував розробкою продуктів для корпоративного сектору Навчив понад 200 студентів, які успішно почали кар’єру в IT Має бекграунд у маркетингу, що додає глибини його підходу до навчання Кому підходить курс: Новачкам, які хочуть освоїти основи веброзробки Тим, хто мріє працювати у міжнародних командах Початківцям з рівнем англійської не нижче B1 Не втрачайте можливість отримати якісну IT-освіту та нові перспективи! Реєструйтесь зараз, місця обмежені.  👉 Запишіться на курс та розпочніть навчання вже у серпні!
Пакет Преміум Plus буде закритий

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

Друзі, привіт! Маємо дуже важливе повідомлення. Як ви знаєте, в період тотальних блекаутів у листопаді-грудні 2022 року перебої зі світлом і інтернетом робили практично неможливими повноцінне онлайн навчання.  Тоді ми створили новий пакет підписки – “Преміум Plus”, фішкою якого стала можливість завантаження відео уроків, аби можна було навчатися у тих складних умовах, в яких ми всі опинилися. Наразі ситуація зі світлом по всій Україні стабілізувалася, окрім територій, наближених до зони активних бойових дій, тому ми прийняли рішення про закриття продажу пакету “Преміум Plus”. Придбати його можна буде тільки до 5 травня 2023 року. Але! Ми даємо 50% знижку на пакет “Преміум Plus” для кожного, хто придбає його до 5 травня включно. Таким чином, вартість пакету складатиме 100 USD (199.99 USD). Що входить до ”Преміум Plus”: Доступ до всіх відео курсів (понад 230) на 12 місяців Доступ до інтерактивних практикумів Вихідний код навчальних проєктів Презентації, опорний конспект, д/з Перевірка 20 домашніх завдань Консультації з тренером (120 хвилин) Онлайн тестування та сертифікати за пройденими курсами Доступ до нових курсів, які виходитимуть під час дії підписки Можливість завантажувати на свій девайс відео уроки Що можна вивчати на ITVDN? ITVDN – це освітня онлайн платформа, яка більше 9 років допомагає початківцям опановувати популярні ІТ-спеціальності. Наразі ми маємо більше 230 різноманітних відео курсів для вивчення: програмування мовами Python, Java, C#, JavaScript, TypeScript, PHP тощо; веб-дизайну та веб-розробки; тестування прграмного забезпеченння; розробки ігор на Unity; мобільної розробки під Android та iOS. Подарунковий сертифікат Преміум Plus – подвійна вигода Якщо у вас є друг, який хоче вивчати IT, або ж ви самі прагнете опанувати ІТ-спеціальність, але розпочати навчання тут і зараз не маєте змоги, пропонуємо розглянути можливість придбання Подарункового сертифікату “Преміум Plus” за акційною ціною. Активувати сертифікат ви зможете будь-коли протягом 12 місяців з моменту придбання. Таким чином навіть після закриття пакету у вас буде можливість скористатися усіма його можливостями пізніше. Придбати подарунковий сертифікат
Вітаємо переможців Шахової IT Арени для програмістів

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

7 июля состоялся финал Шахматной IT Арены для программистов. Соревнования проходили в 4 тура, всего было 184 участника. Задания можно было решать на одном из 5 языков программирования -  Python, C#, Java, C++ или Pascal. В каждом туре были отмечены победители, выполнившие задания с максимальными баллами. Сегодня мы поздравляем победителей 4 тура. Ими стали: Богдан Зарицкий Владимир Шустов Олег Деміхов Александр Восколуп (решил задания на двух языках – Java и Python!) Ekaterina Zapryagaeva Победители 4 тура получат в подарок подписку ITVDN на 3 месяца с доступом ко всем курсам, представленным в каталоге. Еще четверо участников, которые выполнили все задания 4-го тура, получают в подарок  1 видео курс на свой выбор. Имена участников: Maksym Sukhorukov, Михаил Громов, Artyko, Роман Брага. Всем на емейл, указанный при регистрации, будут отправлены письма с промо-кодами и дополнительной информацией. А теперь самое главное! Кто же стал победителем соревнований по итогам 4 туров? Вот как выглядит Топ-10 турнирной таблицы: Богдан Зарицкий -  С#, 3180 баллов Олег Деміхов – C#, 3050 баллов Владимир Шустов - Python, 3040 баллов Artyko - Python, 2970 баллов Maksym Sukhorukov - Python, 2930 баллов Ekaterina Zapryagaeva - С#, 2850 баллов Александр Восколуп - Python, 2820 баллов Александр Восколуп – Java, 2820 баллов Роман Брага -  С#, 2300 баллов Михаил Громов - С#, 2280 баллов Абсолютными победителями в финале стали Богдан Зарицкий Олег Деміхов Владимир Шустов Победители смогут выбрать себе в подарок хорошую книгу по программированию. Мы свяжемся с каждым из победителей по электронной почте. Мы благодарим всех участников соревнований, а также Евгения Волосатова, инициатора, вдохновителя, бессменного ведущего, а главное создателя платформы для тренировки навыков программирования с возможностью проверки решений на 5 языках за возможность проведения Шахматной IT Арены для программистов. Оставайтесь на ITVDN!
Результати акції Technical Skills Марафон

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

В период с 10 по 20 ноября 2017 года на ITVDN проходила акция Technical Skills Марафон. В акции приняли участие 600 человек, из них 98 успешно выполнили задания практикумов. 21 ноября в 17:00 на YouTube канале в прямом эфире были определены победители марафона. Смотрите видео запись розыгрыша. Как и было заявлено в условиях акции, мы провели розыгрыш 5 подписок на три месяца и 25 подписок на 1 месяц. Вот имена победителей: HTML&CSS Малышев Сергей – подписка на 3 месяца Krasnou Vitali – подписка на 1 месяц Цымбаленко Денис - подписка на 1 месяц Brovenko Vadim- подписка на 1 месяц Хмара Владимир- подписка на 1 месяц Bezvesilny Konstantin- подписка на 1 месяц JavaScript Takes Leios– подписка на 3 месяца Милеев Антон– подписка на 1 месяц Loktionov– подписка на 1 месяц Корольчук Александр– подписка на 1 месяц Korobka Sergey– подписка на 1 месяц Хмара Владимир– подписка на 1 месяц SQL Цуканов Илья - подписка на 3 месяца Иванова Ольга - подписка на 1 месяц Safronyuk Maxim - подписка на 1 месяц Сидоренко Борис - подписка на 1 месяц Brovenko Vadim  - подписка на 1 месяц Prokhorov Konstantin - подписка на 1 месяц C# Starter Цуканов Илья - подписка на 3 месяца Кириличев Владислав - подписка на 1 месяц Белошицкий Николай - подписка на 1 месяц Гурбич Михаил - подписка на 1 месяц Karpenko Volodymyr - подписка на 1 месяц Хмара Владимир - подписка на 1 месяц С# Essential Brovenko Vadim - подписка на 3 месяца Хмара Владимир - подписка на 1 месяц Arsen Grigoryan - подписка на 1 месяц Xazaryan Artur - подписка на 1 месяц Bulyha Nazar - подписка на 1 месяц Nakytniak Dmitry - подписка на 1 месяц 4 участника акции успешно выполнили задания всех 5 практикумов. Вот их имена: Brovenko Vadim Хмара Владимир Korobka Sergey Pokydko Anton Наш супер-герой, выполнивший все задания с максимальными результатами - Brovenko Vadim. Мы поздравляем Вадима и будем рады вручить ему фирменную дженгу и футболку ITVDN! Письма с подорочными сертификатами будут отправлены победителям 22 ноября 2017 года. Благодарим всех участников марафона!
Результати акції «70 відеокурсів у подарунок»

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

В период с 5 по 15 января 2017 года на ITVDN проходила акция «70 видеокурсов в подарок». В акции приняли участие 481 человек, из которых с помощью сервиса random.org было выбрано 70 победителей. Все победители получат в подарок те видеокурсы, которые они указали в анкете. Курсы будут открыты с 17 января 2017 года на 30 дней. Имена победителей акции: Колісник Ігор Елена Осмоловская Боровенский Александр Алькен Абиев Василий Дякив Михаил Лютов Яўгенi Новiк Alexandr Zakharyk Дмитрий Цыбенко Никита Ермаков Руслан, Вишневский Станислав Волков Ян Кучинский Сулейманов Расим Гамзат Расулов Oleh Petraniuk Богдан Жилко Андрей, Фатеев Сергей Костенко Георгій,Фретеучан Василик Виталий Кирилл Кузьменко Маританна Вазанова Артем Зинченко Абылай Куракбаев Владимир Ганич Никита Могильников Alexandr Babintsev Дмитрий Мендельсон Владислав Москаленко Богдан Турко Владислав Яськов Вячеслав Одиноков Илья, Глаговский Кудайбергенов Бибарс Георгий Шемякин Игорь Ольхов Игорь Реутов Денис Прилипко Sergey Zarva Kuziv Marian Артём Курилов Олександр Шевчук Виктория Задорожняя Иван Огуречников Лавречко Олександр Мария Лазарева Цибульский Сергій Максим Мурзак Валерий Волков Александр Хурса Арман,Элоян elina rozhkova Artsiom Yurkevich Артур, Шайдуллин Viacheslav Dosuzhiy Андрей Ткаченко Михаил Шумский Мороз Виктор Олег Васильевич Иван Кот Анатолий Парубец Руслан Добров Вадим Рыбалко Дергачёв Павел Алексей Мачехин Vova Popov Денис Коротин Спивак Валентин Глущенко Віталій Видео запись розыгрыша смотрите здесь. Оксана Третьяк и Aibek Nurbaev были дисквалифицированы из-за невыполнения условий акции. Для 5 человек, которые попали в список победителей – это Станислав Волков, Виктория Задорожняя, Artsiom Yurkevich, Андрей Ткаченко, Глущенко Віталій -  курсы будут открыты, после предоставления доступа к страницам в соц. сетях для того, чтобы мы убедились в выполнении условий акции. Благодарим всех за участие в акции! Оставайтесь на ITVDN!
Notification success