// Subscribing to the published tasks
Meteor.subscribe("tasks");
// Show/Hide functionality
Template.body.helpers({
tasks: function () {
if (Session.get("hideCompleted")) {
// If hide completed is checked, filter tasks
return Tasks.find({checked: {$ne: true}}, {sort: {createdAt: -1}});
} else {
// Otherwise, return all of the tasks
return Tasks.find({}, {sort: {createdAt: -1}});
}
},
hideCompleted: function () {
return Session.get("hideCompleted");
},
incompleteCount: function () {
return Tasks.find({checked: {$ne: true}}).count();
}
});
// Events for creating new tasks and Show/Hide functionality.
// Calling methods from the server
Template.body.events({
"submit .new-task": function (event) {
event.preventDefault();
var text = event.target.text.value;
Meteor.call("addTask", text);
event.target.text.value = "";
},
"change .hide-completed input": function (event) {
Session.set("hideCompleted", event.target.checked);
}
});
// Events for Deleting and Check/Uncheck functionality
Template.Task.events({
"click .toggle-checked": function () {
// Set the checked property to the opposite of its current value
Meteor.call("setChecked", this._id, ! this.checked);
},
"click .delete": function () {
Meteor.call("deleteTask", this._id);
}
});
Листинг client/main.html
<head>
<title>Todo App</title>
</head>
<body>
<h1>Todo List ({{incompleteCount}})</h1>
<label class = "hide-completed">
<input type = "checkbox" checked = "{{hideCompleted}}" />
Hide Completed Tasks
</label>
<form class = "new-task">
<input type = "text" name = "text" placeholder = "Add new tasks" />
</form>
<ul>
{{#each tasks}}
{{> task}}
{{/each}}
</ul>
</body>
<template name = "task">
<li class = "{{#if checked}}checked{{/if}}">
<button class = "delete">x</button>
<input type = "checkbox" checked = "{{checked}}" class = "toggle-checked" />
<span>{{username}} - {{text}}</span>
</li>
</template>
Листинг server/main.js
// Publishing tasks from the server...
Meteor.publish("tasks", function () {
return Tasks.find({});
});
// Methods for handling MongoDb Tasks collection data...
Meteor.methods({
addTask: function (text) {
Tasks.insert({
text: text,
createdAt: new Date(),
});
},
deleteTask: function (taskId) {
var task = Tasks.findOne(taskId);
Tasks.remove(taskId);
},
setChecked: function (taskId, setChecked) {
var task = Tasks.findOne(taskId);
Tasks.update(taskId, { $set: { checked: setChecked} });
}
});
Напишем код для сортировки пузырьком. Затем, зададим массив данных, выведем его и отсортируем.
class ArrayBubble{
private long[] a; //ссылка на массив
private int elems; //количество элементов в массиве
public ArrayBubble(int max){ //конструктор класса
a = new long[max]; //создание массива размером max
elems = 0; //при создании массив содержит 0 элементов
}
public void into(long value){ //метод вставки элемента в массив
a[elems] = value; //вставка value в массив a
elems++; //размер массива увеличивается
}
public void printer(){ //метод вывода массива в консоль
for (int i = 0; i < elems; i++){ //для каждого элемента в массиве
System.out.print(a[i] + " "); //вывести в консоль
System.out.println(""); //с новой строки
}
System.out.println("----Окончание вывода массива----");
}
private void toSwap(int first, int second){ //метод меняет местами пару чисел массива
long dummy = a[first]; //во временную переменную помещаем первый элемент
a[first] = a[second]; //на место первого ставим второй элемент
a[second] = dummy; //вместо второго элемента пишем первый из временной памяти
}
public void bubbleSorter(){ //МЕТОД ПУЗЫРЬКОВОЙ СОРТИРОВКИ
for (int out = elems - 1; out >= 1; out--){ //Внешний цикл
for (int in = 0; in < out; in++){ //Внутренний цикл
if(a[in] > a[in + 1]) //Если порядок элементов нарушен
toSwap(in, in + 1); //вызвать метод, меняющий местами
}
}
}
}
public class Main {
public static void main(String[] args) {
ArrayBubble array = new ArrayBubble(5); //Создаем массив array на 5 элементов
array.into(163); //заполняем массив
array.into(300);
array.into(184);
array.into(191);
array.into(174);
array.printer(); //выводим элементы до сортировки
array.bubbleSorter(); //ИСПОЛЬЗУЕМ ПУЗЫРЬКОВУЮ СОРТИРОВКУ
array.printer(); //снова выводим отсортированный йсписок
}
}
Для нашей модели будет выведена следующая статистика
Средняя абсолютная погрешность. Среднее значение абсолютной погрешности (погрешность — это разница между спрогнозированным и фактическим значением)
Среднеквадратичное отклонение. Квадратный корень из среднего значения возведенных в квадрат арифметических отклонений спрогнозированных значений тестового набора данных
Относительное арифметическое отклонение. Среднее арифметическое отклонение по отношению к абсолютной разнице между фактическими значениями и средним арифметическим всех фактических значений
Относительное среднеквадратичное отклонение. Среднее арифметическое среднеквадратичных отклонений по отношению к абсолютной разнице между фактическими значениями и средним арифметическим всех фактических значений
Коэффициент смешанной корреляции (R в квадрате). Статистический показатель, который оценивает соответствие модели данным
Чем меньше значение каждой погрешности, тем лучше. Меньшее значение указывает на то, что прогноз лучше соответствует фактическим значениям. Для показателя коэффициент смешанной корреляции чем ближе его значение к единице (1,0), тем точнее прогноз
Алгоритм выполнения работы
Начальные данные «сырые», имеют в своем составе аномалии
Чтобы избавиться от аномалий были использованы специальные модули
Далее были выбраны необходимые переменные, благодаря которым будет построена регрессия на результативный признак
Строим линейную регрессию по инструкции с помощью модулей, рекомендованных Microsoft, используя выбранную совокупность
from random import randint
N = 10
a = []
for i in range(N):
a.append(randint(1, 99))
print(a)
for i in range(N-1):
for j in range(N-i-1):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
Всё в Пайтоне является объектами. Это очень расплывчатое утверждение, если до этого вы не изучали программирование вообще. Это означает, что каждый объект в Пайтоне имеет метод и значение по той причине, что все объекты базируются на классе. Класс – это проект объекта. Давайте посмотрим на примере, что это значит:
В примере мы видим строку, присвоенную переменной х. Это может выглядеть как большой объем, но дело в том, что у этой строки много методов. Если вы используете ключевое слово dir, вы получите список всех методов, которые можно присвоить строке. Мы видим 71 метод! Технически, мы не можем вызвать методы, которые начинаются с подчеркивание, так что это сужает список до 38 методов, но это все еще очень много! Что это значит? Это значит что, строка основана на классе, а переменная х – и есть экземпляр этого класса. В Пайтоне мы можем создавать собственные классы
Этот класс не делает ничего конкретного, тем не менее, это очень хороший инструмент для изучения. Например, чтобы создать класс, мы используем ключевое слово class, за которым следует наименование класса. В Пайтоне, конвенция указывает на то, что наименование класса должно начинаться с заглавной буквы. Далее нам нужно открыть круглые скобки, за которыми следует слово object и закрытые скобки. «object» — то, на чем основан класс, или наследуется от него. Это называется базовым классом или родительским классом. Большая часть классов в Пайтоне основаны на объекте. У классов есть особый метод, под названием __init__.
Этот метод вызывается всякий раз, когда вы создаете (или создаете экземпляр) объект на основе этого класса. Метод __init__ вызывается единожды, и не может быть вызван снова внутри программы. Другое определение метода __init__ — это конструктор, кстати, этот термин редко встречается в Пайтоне. Вы можете подумать, почему я называю это методом, а не функцией? Функция меняет свое имя на «method», когда она находится внутри класса. Обратите внимание на то, что каждый метод должен иметь как минимум один аргумент, что в случае с обычной функцией уже не вяжется. В Python 3 нам не нужно прямо указывать, что мы наследуем у объекта. Вместо этого, мы можем написать это следующим образом:
Суть алгоритма в сравнении пары соседних элементов — если они стоят в неправильном порядке, то их меняют местами. Чтобы отсортировать таким образом весь массив длиной N, придется пройтись по нему N-1 раз (последний элемент уже будет отсортирован на предыдущей итерации, поэтому для него проход не требуется). Также за каждый проход в конец массива “всплывает” при сортировке по возрастанию — наибольшее число, по убыванию — наименьшее. А значит на следующей итерации его можно уже не проверять
Ниже приведен синтаксис функции кода для сортировки
function bubbleSort(arr) {
for (var i = 0, endI = arr.length - 1; i < endI; i++) {
for (var j = 0, endJ = endI - i; j < endJ; j++) {
if (arr[j] > arr[j + 1]) {
var swap = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = swap;
}
}
}
return arr;
}
Конструкция class – удобный «синтаксический сахар» для задания конструктора вместе с прототипом
class Название [extends Родитель] {
constructor
методы
}
Пример приведен ниже:
'use strict';
class User {
constructor(name) {
this.name = name;
}
sayHi() {
alert(this.name);
}
}
let user = new User("Вася");
user.sayHi(); // Вася
classне позволяет задавать свойства-значения
Геттеры, сеттеры и вычисляемые свойства
В классах, как и в обычных объектах, можно объявлять геттеры и сеттеры через get/set, а также использовать […] для свойств с вычисляемыми именами:
'use strict';
class User {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// геттер
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
// сеттер
set fullName(newValue) {
[this.firstName, this.lastName] = newValue.split(' ');
}
// вычисляемое название метода
["test".toUpperCase()]() {
alert("PASSED!");
}
};
let user = new User("Вася", "Пупков");
alert( user.fullName ); // Вася Пупков
user.fullName = "Иван Петров";
alert( user.fullName ); // Иван Петров
user.TEST(); // PASSED!
При чтении fullName будет вызван метод get fullName(), при присвоении – метод set fullName() с новым значением
Статические свойства
Класс, как и функция, является объектом. Статические свойства класса User – это свойства непосредственно User, то есть доступные из него «через точку».
Для их объявления используется ключевое слово static.
Например:
'use strict';
class User {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
static createGuest() {
return new User("Гость", "Сайта");
}
};
let user = User.createGuest();
alert( user.firstName ); // Гость
alert( User.createGuest ); // createGuest ... (функция)
Microsoft Azure — это постоянно расширяющийся набор облачных служб, который помогает вашей организации решать бизнес-задачи. Это свобода создания, развертывания приложений и управления ими в обширной глобальной сети с использованием ваших любимых инструментов и платформ
Давайте рассмотрим основную панель управления Azure
принято называть это меню на манер западных коллег — Cockpit
Основной экран
Здесь мы видим ссылки на все доступные ресурсы, а так же ссылки на последние активные. Обратите внимание, сейчас на нашем облачном сервисе уже активен компонент — это тот самый сайт, на который вы смотрите
Добавим веб — приложение, краткая настройка ниже
После нажатия создать начнется развертывание, которое длится 3 — 5 минут
Приложение готово к работе, отображает статистику работы
Следуя указаниям Microsoft, создадим еще виртуальную машину на Ubuntu 18.04 LTS
В последнее время в IT — кругах часто можно услышать термин ITIL в отношении построения работы IT — подразделения, предоставления услуг бизнесу или нового способа организации технической поддержки
ITIL расшифровывается как IT Infrastructure Library (библиотека инфраструктуры информационных технологий)
Библиотека ITIL содержит полный и подробный набор лучших практик, которые используются для разработки и осуществления управления IT — услугами. Реализация этих практик дает бизнесу целый ряд плюсов:
Увеличение конкурентного преимущества за счет снижения затрат и гибкости управления
Повышение эффективности за счет оптимизации IT — процессов
Понимание IT для бизнеса и усиление значимости
Повышение удовлетворенности пользователей и клиентов
История ITIL
Библиотека ITIL появилась в 1980-х по заказу британского правительства. Работа над ней велась с 1986 по 1989 год, а публикации начались с 1992 года. Однако долгое время за пределами Великобритании она была мало известна, пока большое число крупных компаний не заявило об использовании ITIL, а в СМИ не стали появляться публикации об опыте внедрения. На протяжении всего времени существования библиотеки она продолжает активно развиваться и сейчас доступна уже третья версия (ITIL v. 3)
На сегодняшний день более 10 000 компаний по всему миру используют ITIL для управления IT
Структура ITIL
В процессе развития библиотеки ITIL меняло число книг и их организацию
Сейчас актуальна третья редакция ITIL (ITIL v.3), которая была выпущена в мае 2007-го. Она была сильно переработана по сравнению со второй, чтобы поддержать новый подход «формата жизненного цикла услуг»
ITIL v. 3 содержит уже только 5 книг, а не 7, как во второй редакции:
Стратегия услуг (англ. Service Strategy)
Проектирование услуг (англ. Service Design)
Преобразование услуг (англ. Service Transition)
Эксплуатация услуг (англ. Service Operation)
Постоянное улучшение услуг (англ. Continual Service Improvement)
Кроме того, в эту редакцию входят еще две книги: Обзор ITIL и Карманный справочник, а также набор дополнительных отраслевых рекомендаций
Базовые концепции
Общее представление о функциях техподдержки дают начинающим IT — специалистам базовые концепции, описанные в книгах ITIL. Перечислим основные из них:
решая задачи бизнеса, ориентируйтесь на клиента
концентрируйте внимание на предоставлении интегрированных сервисов, а не на аппаратных платформах, используемых для этого
не посвящайте пользователя во все тонкости и трудности организации техподдержки, для него это лишняя информация
используйте специальные инструменты, помогающие организовать совместную работу сотрудников техподдержки
расширьте объем задач, которые выполняет техподдержка, не ограничивайте ее функции лишь восстановлением обслуживания, пусть она занимается управляющим анализом ключевых причин сбоев, обеспечивает готовность необходимых мощностей и т.д
Для реализации принципов ITIL на практике, мелким компаниям можно применять простые шаблоны документов или электронные таблицы, а среднему и крупному бизнесу для этих целей необходимо специализированное ПО
Внедрение практик ITIL
Внедрение практик ITIL – это изменение корпоративной культуры. На первых этапах пользователи будут недовольны тем, что им приходится делать все иначе, чем раньше, не так, как они привыкли. Чтобы преодолеть это скепсис, необходим сильный инициатор – «локомотив», которой сможет убедить людей и продвинуть проект, а также заинтересовать бизнес в изменении IT. Без такого человека реализация не приведет к желаемому успеху
ITIL как средство управления проектами
Практики ITIL сфокусированы на предоставлении IT -услуг организации и процессе непрерывного совершенствования услуг и процессов их обеспечивающих, а не на управлении проектами компании
Содержание библиотек ITIL
Библиотека содержит передовые подходы и лучшие практики для организации модели предоставления IT — услуг. В ней описаны некоторые процессы и шаблоны, но не детальная методология реализации процессного подхода. Компания, которая принимает решение использовать ITIL, получает общие принципы, но конкретные процессы должна разработать под свою инфраструктуру самостоятельно. Для более практического изучения построения IT согласно методологии ITIL можно пройти новый курс ITIL® Practitioner, направленный именно на людей, которые уже хорошо освоили модель предоставления IT — услуг для бизнеса, но не понимают, как лучше реализовать свои знания
ITIL – это не инструмент
Для реализации принципов ITIL можно использовать многие профессиональные инструменты, но это совсем не обязательно. Если компания небольшая, будет вполне достаточно простых шаблонов документов и электронных таблиц, а для крупных организаций потребуется специализированное программное обеспечение
Применение ITIL
Поскольку ITIL описывает подходы из разных областей, то компания может применять все сразу или только некоторые из них – нет строгих регламентов
Поэтапное внедрение
Так как нет правил, что внедрить необходимо сразу все практики, многие компании выбирают поэтапное внедрение в течение определенного периода. Это позволяет экономить ресурсы и добиться стабильного успеха на каждом из промежуточных этапов
Сертификация по ITIL
Существуют три основных уровня сертификации по ITIL:
Foundation. Этот уровень означает, что вы понимаете основные термины и имеете базовые знания о модели ITIL
Practitioner – ваших знаний модели ITIL достаточно для применения конкретных процессов на практике
Intermediate – для специалистов с углубленными знаниями отдельных разделов ITIL