Архив автора: admin

Видеолекции курса Алгоритмы и структуры данных. Часть 2

Видеолекции курса Алгоритмы и структуры данных. Часть 2.

Лекторы: Александр Куликов, Михаил Дворкин.


Лекция 1. Пути в графах.
Кратчайшие пути при наличии рёбер отрицательного веса: алгоритм Беллмана-Форда; определение наличия цикла отрицательного веса в графе. Кратчайшие пути в ациклических ориентированных графах. Кратчайшие пути между всеми парами вершин: алгоритм Флойда-Уоршолла, алгоритм Джонсона.


Посмотреть видео на сайте Лекториума

Лекция 2. Жадные алгоритмы.
Общие принципы жадного метода. Непрерывная и дискретная задачи о рюкзаке. Задача о выборе заявок. Минимальное покрывающее дерево: свойство разреза, жадная стратегия.


Посмотреть видео на сайте Лекториума

Лекция 3. Алгоритм Крускала, система непересекающихся множеств.
Алгоритм Крускала, система непересекающихся множеств.


Посмотреть видео на сайте Лекториума

Семинар 1. Алгоритм Прима.


Посмотреть видео на сайте Лекториума

Семинар 2.


Посмотреть видео на сайте Лекториума

Семинар 3.


Посмотреть видео на сайте Лекториума

Лекция 4. Числовые алгоритмы.
Система непересекающихся множеств: доказательство оценки на время работы алгоритма с эвристикой сжатия путей. Числовые алгоритмы. Основные арифметические операции: сложение, умножение, деление, нахождение наибольшего общего делителя.


Посмотреть видео на сайте Лекториума

Семинар 4.


Посмотреть видео на сайте Лекториума

Лекция 5. Проверка простоты числа.
Арифметика сравнений: сложение, умножение, возведение в степень, нахождение обратного по модулю. Вероятностный тест на простоту.


Посмотреть видео на сайте Лекториума

Семинар 5.


Посмотреть видео на сайте Лекториума

Лекция 6. RSA.
Генерация случайных простых чисел. Криптография: схемы с закрытым ключом, RSA.


Посмотреть видео на сайте Лекториума

Семинар 6.


Посмотреть видео на сайте Лекториума

Лекция 7. Быстрое преобразование Фурье.
Быстрое вычисление значений многочлена в точках: два способа задания многочленов — коэффициентами и значениями в точках; вычисление значений многочлена в точках методом «разделяй и властвуй»; дискретное преобразование Фурье; быстрое преобразование Фурье. Интерполяция: интерполяция в терминах матриц; матрица Вандермонда; интерполяция как домножение на обратную матрицу.


Посмотреть видео на сайте Лекториума

Семинар 7.


Посмотреть видео на сайте Лекториума

Лекция 8. Линейное программирование.
Линейное программирование: общий вид задачи, двойственность. Задача о макси
мальном потоке. Задача о паросочетании в двудольном графе.


Посмотреть видео на сайте Лекториума

Семинар 8.


Посмотреть видео на сайте Лекториума

Лекция 9. Симплекс-метод.
Подробнее о двойственности, симплекс-метод.


Посмотреть видео на сайте Лекториума

Семинар 9.


Посмотреть видео на сайте Лекториума

Лекция 10. Алгоритм Кнута-Морриса-Пратта.
Задача поиска подстроки в строке. Наивный алгоритм, алгоритм Карпа-Рабина, алгоритм Кнута-Морриса-Пратта.


Посмотреть видео на сайте Лекториума

Семинар 10.


Посмотреть видео на сайте Лекториума

Лекция 11. Суффиксные деревья.
Построение суффиксного дерева за линейное время.


Посмотреть видео на сайте Лекториума

Семинар 11.


Посмотреть видео на сайте Лекториума

Лекция 12. NP-полные задачи.
Задачи поиска, классы P и NP. Сведения. Доказательство NP-полноты задач выполнимости, 3-выполнимости, выполнимости схемы, задачи о независимом множестве.


Посмотреть видео на сайте Лекториума

Семинар 12.


Посмотреть видео на сайте Лекториума

Автор: Roman Brovko

Видеолекции курса Алгоритмы и структуры данных. Часть 1

Видеолекции курса Алгоритмы и структуры данных. Часть 1.

Лектор: Александр Куликов.


Лекция 1. Введение.
Вычисление чисел Фибоначчи: экспоненциальный рекурсивный алгоритм, полиномиальный алгоритм, более детальный анализ. Время работы алгоритма, O-символика. Скорость роста функций: логарифм, полином, экспонента.


Посмотреть видео на сайте Лекториума

Лекция 2. Рекуррентные соотношения.
Метод «разделяй и властвуй». Умножение n-битовых чисел: простой рекурсивный алгоритм, улучшенный рекурсивный алгоритм. Рекуррентные соотношения: основная теорема. Двоичный поиск.


Посмотреть видео на сайте Лекториума

Лекция 3. Алгоритмы сортировки.
Сортировка слиянием: с рекурсией и без. Сортировка с помощью кучи. Нижняя оценка (n log n) для сортировки. Быстрая сортировка: анализ среднего времени работы, анализ глубины рекурсии, элиминация хвостовой рекурсии.


Посмотреть видео на сайте Лекториума

Лекция 4. Алгоритмы сортировки (продолжение).
Быстрая сортировка (продолжение). Порядковые статистики: нахождение за линейное в среднем время.


Посмотреть видео на сайте Лекториума

Лекция 5. Элементарные структуры данных.
Абстрактные типы данных, интерфейс и реализация. Массивы переменного размера: аддитивная и мультипликативная схемы реаллокации. Анализ учётных стоимостей операций: функция потенциала, истинные и учётные стоимости. Стек, очередь, дек. Реализация на основе массива переменного размера и на основе связанного списка. Моделирование очереди с помощью двух стеков. Корневое дерево: бинарное дерево, дерево с произвольным ветвлением, представление «левый ребёнок — правый сосед».


Посмотреть видео на сайте Лекториума

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


Посмотреть видео на сайте Лекториума

Лекция 7. Динамическое программирование (продолжение).
Задача о рюкзаке: рюкзак с повторениями и без, ленивые вычисления. Перемножение последовательности матриц: представление порядка перемножения в виде дерева, оценка на количество порядков. Независимые множества в деревьях. О времени и памяти алгоритмов, основанных на методе динамического программирования.


Посмотреть видео на сайте Лекториума

Лекция 8. Двоичные деревья поиска.
Дерево поиска: поиск, вставка, удаление, поиск следующего и предыдущего элемента за время, пропорциональное высоте. АВЛ-дерево (или какое-нибудь другое сбалансированное дерево): верхняя оценка на высоту, малое и большое вращение.

Лекция 9. Декартовы деревья.
Декартовы деревья, операции split и merge, реализация стандартных операций деревьев поиска через split и merge.

Лекция 10. Сплей-деревья.
Верхняя оценка O(log n) на среднюю стоимость операций.

Лекция 11. Декомпозиция графов.
Графы и способы их представления, способы использования графов. Поиск в глубину в неориентированных графах, выделение компонент связности.


Посмотреть видео на сайте Лекториума

Лекция 12. Декомпозиция графов (продолжение).
Поиск в глубину в ориентированных графах: ориентированные ациклические графы, топологическая сортировка вершин, наличие стока и истока в ациклическом графе, выделение компонент сильной связности.


Посмотреть видео на сайте Лекториума

Лекция 13. Пути в графах.
Расстояния в графе. Поиск в ширину: обход, дерево кратчайших путей, сравнение с поиском в глубину. Алгоритм Дейкстры: адаптация поиска в ширину введением дополнительных вершин; установка будильников; алгоритм Дейкстры; альтернативный взгляд на алгоритм: последовательное расширение множества вершин, до которых расстояние уже посчитано; время работы алгоритма при различных реализациях очереди с приоритетами.


Посмотреть видео на сайте Лекториума

Автор: Roman Brovko

Let's have a REST, часть III

В части I рассказано о том, что такое REST и что значит для приложения быть RESTful. На несложном примере проиллюстрирован процесс проектирования RESTful приложения. В части II рассмотрены некоторые детали протокола HTTP в связи с реализацией на его основе RESTful приложений. В частности, рассказано, в чем разница между HTTP-методами POST и PUT, что такое идемпотентность, как обойти ограничения языка HTML и сделать браузерное HTML-приложение RESTful (ну, почти RESTful).

В данной, заключительной части, будут рассмотрены два RESTful приложения, написанные на Python с использованием микрофреймворка Flask. Оба приложения позволяют вести список книг, то есть, просматривать, добавлять, изменять и удалять книги из списка. Эти два приложения:

  • RESTful web-сервис и его клиент,
  • RESTful HTML-приложение, с которым пользователь работает в браузере.

Я не буду рассказывать о том, как установить Flask (соответствующая инструкция есть на сайте), а также об основах работы с Flask (об этом отлично рассказано в разделе Quickstart руководства пользователя).

Перейду сразу к делу и представлю код web-сервиса, возвращающего CSV-представление списка книг:

# -*- coding: utf-8 -*-

from flask import Flask, url_for

app = Flask(__name__)

books = {1 : [u'Лев Толстой', u'Война и мир']}
HEADERS = {'Content-Type' : 'text/csv; charset=utf-8'}

def csvbook(id):
return u"%s;%s;%sn" % (id, books[id][0], books[id][1])

@app.route('/')
@app.route('/books')
def index():
text = ''
for key in books.keys():
text += csvbook(key)
return text, 200, HEADERS


if __name__ == '__main__':
app.run(debug=True)

Поскольку приложение призвано продемонстрировать принципы REST, то все, что сопутствует этой демонстрации, написано как можно проще, чтобы занимать меньше места и быть понятным без объяснений. Так, книги будем хранить не в базе данных, а в словаре books, где ключ — целое число, а значение — список из двух строковых значений: автор книги, название книги.

Функция index() обрабатывает запросы GET для URL /books и /. Формируется CSV-представление списка книг из словаря books, используя функцию csvbook(id) для получения CSV-строки с данными каждой книги. Сформированное представление возвращается клиенту, причем ответ имеет статус 200 (OK) и HTTP-заголовок, задающий тип и кодировку возвращаемых данных.

Запустив наш сервис

C:> python restful-ws-01.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader

и введя в брузере адрес http://localhost:5000/books, получим файл, содержащий

1;Лев Толстой;Война и мир

Не очень удобно тестировать RESTful web-сервис с помощью браузера. В интернет-магазине Chrome есть приложение Advanced Rest Client, которое существенно упрощает ручное тестирование RESTful web-сервиса. Рекомендую попробовать.

Но в этой статье пойду другим путем и напишу клиента для нашего web-сервиса на Python:

# -*- coding: utf-8 -*-

import requests

def print_response(resp):
print " url: %s" % resp.url
print " status: %s %s" % (resp.status_code, resp.reason)
print "headers: %s " % resp.headers
print " data:n%s" % resp.text

print_response(requests.get("http://localhost:5000/books"))

Я использую библиотеку Requests, которая делает отправку HTTP-запросов с различными методами тривиальной задачей. Результат выполнения приведенного кода:

    url: http://localhost:5000/books
status: 200 OK
headers: CaseInsensitiveDict({'date': 'Thu, 13 Mar 2014 04:39:50 GMT', 'content-length': '45', 'content-type': 'text/csv; charset=utf-8', 'server': 'Werkzeug/0.9.4 Python/2.7.3'})
data:
1;Лев Толстой;Война и мир

Прежде чем реализовать следующие методы web-сервиса и написать для них клиентские запросы, приведу полный список ресурсов и методов web-сервиса:

/books        GET       получить список книг
/books POST создать новую книгу
/books/ GET получить данные книги
/books/ PUT изменить данные книги
/books/ DELETE удалить книгу

Вот код, реализующий перечисленные методы web-сервиса, а также обработчик для случая, когда запрошенный ресурс отсутствует:

# -*- coding: utf-8 -*-

from flask import Flask, request, abort, url_for

app = Flask(__name__)

books = {1 : [u'Лев Толстой', u'Война и мир']}
HEADERS = {'Content-Type' : 'text/csv; charset=utf-8'}

def csvbook(id):
return u"%s;%s;%s;%sn" %
(id, books[id][0], books[id][1], url_for('show', id=id, _external = True))

@app.route('/')
@app.route(&# 39;/books')
def index():
text = ''
for key in books.keys():
text += csvbook(key)
return text, 200, HEADERS

@app.route('/books', methods=['POST'])
def create():
new_id = len(books) + 1
books[new_id] = [request.form['author'], request.form['title']]
return csvbook(new_id), 201, HEADERS

@app.route('/books/')
def show(id):
if books.get(id):
return csvbook(id), 200, HEADERS
else:
abort(404)

@app.route('/books/', methods=['PUT'])
def update(id):
if books.get(id):
books[id] = [request.form['author'], request.form['title']]
else:
abort(404)
return csvbook(id), 200, HEADERS

@app.route('/books/', methods=['DELETE'])
def delete(id):
if books.get(id):
del books[id]
return u'OK', 200, HEADERS

@app.errorhandler(404)
def not_found(error):
return u'404: not found', 404, HEADERS


if __name__ == '__main__':
app.run(debug=True)

Ниже код клиента, тестирующий все методы нашего web-сервиса:

# -*- coding: utf-8 -*-

import requests

def print_response(resp):
print " url: %s" % resp.url
print " status: %s %s" % (resp.status_code, resp.reason)
print "headers: %s " % resp.headers
print " data:n%s" % resp.text

def list_books():
print("n### GET http://localhost:5000/booksn")
print_response(requests.get("http://localhost:5000/books"))


list_books

print("n### POST http://localhost:5000/booksn")
payload = {'author' : u'Александр Пушкин', 'title' : u'Пиковая дама'}
resp = requests.post("http://localhost:5000/books", data=payload)
print_response(resp)

list_books

print("n### PUT http://localhost:5000/books/2n")
payload = {'author' : u'Лев Толстой', 'title' : u'Анна Каренина'}
resp = requests.put("http://localhost:5000/books/2", data=payload)
print_response(resp)

list_books

print("n### DELETE http://localhost:5000/books/2n")
print_response(requests.delete("http://localhost:5000/books/2"))

list_books

print("n### GET http://localhost:5000/books/1n")
print_response(requests.get("http://localhost:5000/books/1"))

print("n### GET http://localhost:5000/books/2n")
print_response(requests.get("http://localhost:5000/books/2"))

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

Теперь перейдем к браузерному RESTful приложению. Оно поддерживает следующие ресурсы и операции:


/books GET получить представление списка книг
/books/new GET получить форму для ввода данных новой книги
/books POST создать новую книгу
/books/ GET получить представление книги
/books//edit GET получить форму для изменения данных книги
/books/ POST изменить данные книги
_method='PUT'
/books//delete POST удалить книгу
_method='DELETE'

Здесь адреса ресурсов следуют соглашениям фреймворка Ruby on Rails — законодателя мод в области RESTful web-приложений. Так как язык HTML не поддерживает запросы к серверу с методами PUT и DELETE, то эти методы имитируются при помощи скрытых полей форм с именем _method.

Ниже приведен код браузерного приложения:

# -*- coding: utf-8 -*-

from flask import Flask, request, redirect, abort

# GET and HEAD are safe
# GET, HEAD, PUT and DELETE are idempotent
# (RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9)


app = Flask(__name__)
books = {1 : [u'Лев Толстой', u'Война и мир']}

list_books_template = u"""



Список книг



Список книг




%s
idАвторНазвание







"""

show_book_template = u"""



Книга



Книга






id%s
Автор%s
Название%s


К списку книг


"""

edit_book_template = u"""



Книга - Изменить



Книга - Изменить








id%s
Автор
Название








К списку книг


"""

new_book_template = u"""



Книга - Добавить



Книга - Добавить






Автор
Название




К списку книг


"""

error404_template = u"""



Список книг


Такой страницы нет :(




"""

@app.route('/')
@app.route('/books')
def index():
text = ''
for key, val in books.items():
text += u'Edit%s%s%s' % (key, key, key, val[0], val[1])
return list_books_template % text

@app.route('/books/new')
def new():
return new_book_template

@app.route('/books', methods=['POST'])
def create():
new_id = len(books) + 1
books[new_id] = [request.form['author'], request.form['title']]
return show_book_template % (new_id, books[new_id][0], books[new_id][1])


@app.route('/books//edit')
def edit(id):
if books.get(id):
return edit_book_template % (id, id, books[id][0], books[id][1], id)
else:
abort(404)

@app.route('/books/', methods=['GET', 'POST']) # PUT and DELETE
def show(id):
if request.method == 'GET':

# /books/ GET

if books.get(id):
return show_book_template % (id, books[id][0], books[id][1])
else:
abort(404)
elif request.method == 'POST' and request.form['_method'] == 'PUT':

# /books/ PUT

if books.get(id):
books[id] = [request.form['author'], request.form['title']]
else:
abort(404)
return show_book_template % (id, books[id][0], books[id][1])
elif request.method == 'POST' and request.form['_method'] == 'DELETE':

# /books/ DELETE

if books.get(id):
del books[id]
return redirect('/books')


@app.errorhandler(404)
def not_found(error):
return error404_template, 404


if __name__ == '__main__':
app.run(debug=True)

Запустив приложение

C:> python restful-server.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader

и введя в браузере адрес http://localhost:5000/books, попробуйте просматривать, изменять, добавлять и удалять книги.

В отличие от web-сервиса, в браузерном RESTful приложении большую роль играют гиперссылки, содержащиеся в представлениях (HTML-страницах), возвращаемых сервером клиенту (браузеру). Гиперссылки раскрывают перед пользователем структуру приложения, предлагая ему на выбор возможные варианты действий.

Пока всё. Let's have a rest!

Автор: Andrei Trofimov
Дата публикации: 2014-03-19T21:05:00.000+11:00

Видеолекции курса Распределенные системы хранения и обработки данных

Видеолекции курса Распределенные системы хранения и обработки данных.

Лектор: Владислав Белогрудов.

В курсе дано всестороннее представление о системах и сетях хранения данных, их применимости для построения облачной инфраструктуры. Подробно рассматриваются вопросы дизайна и виртуализации сетей хранения данных, информационной безопасности и доступности.


Лекция 1. Введение в системы хранения данных (СХД).

  • данные и информация
  • типы данных
  • большие данные
  • эволюция СХД
  • архитектура центра обработки данных (ЦОД)
  • характеристики ЦОД
  • жизненный цикл информации
  • иерархическое управление носителями


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 2. Среда систем хранения данных.

  • Oсновные элементы
  • Виртуализация приложений и серверов
  • Компоненты жесткого диска и его производительность
  • Накопители SSD


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 3. Защита данных с помощью RAID.

  • Методы и техники
  • Типы
  • Производительность
  • Cравнение и области применения


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 4. Архитектура СХД.

  • основные компоненты
  • управление кешированием, защита от сбоев
  • классы СХД


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 5. Сети хранения FC SAN.

  1. DAS
  2. SCSI
  3. SAN
    • компоненты
    • архитектура
    • топологии
    • зонирование


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 6. IP SAN, FCoE, NAS, CAS.

  • протоколы
  • компоненты
  • топологии


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 7. OpenStack.

  • Собственное облако
    • Зачем
    • Отличия от решений виртуализации серверов
  • История развития
  • Проекты
    • Swift
    • Glance
    • Nova
    • Cinder
    • Quantum

  • Посмотреть видео на сайте Лекториума

    Дополнительные материалы


    Скачать: Презентация

    Лекция 8. Непрерывность бизнеса, резервное копирование и восстановление.

    • необходимость
    • метрики непрерывности
    • методы борьбы с SPOF
    • топологии резервного копирования
    • дедупликация
    • резервное копирование в виртуальной среде


    Посмотреть видео на сайте Лекториума

    Дополнительные материалы


    Скачать: Презентация

    Лекция 9. Локальная и удаленная репликация.

    • синхронный и асинхронный режим
    • методы
    • топологии


    Посмотреть видео на сайте Лекториума

    Дополнительные материалы


    Скачать: Презентация

    Лекция 10. Безопасность инфраструктуры хранения в облачных датацентров.

    • угрозы
    • уязвимости
    • методы борьбы


    Посмотреть видео на сайте Лекториума

    Дополнительные материалы

    Скачать: Презентация

    Лекция 11. Программно определяемые сети (SDN).

    • Предпосылки
    • История
    • Принципы
    • Технологии
    • Области применения

    Дополнительные материалы

    Скачать: Презентация

    Лекция 12. Управление инфраструктурой хранения и обработки данных.

    • Ключевые понятия
    • Стандарты управления
    • Технологии
    • Архитектуры

    Дополнительные материалы

    Скачать: Презентация

    Автор: Roman Brovko

Видеолекции курса Современные технологии разработки ПО

Видеолекции курса Современные технологии разработки ПО.

Лектор: Александр Смаль.

Курс предназначен для краткого знакомства с некоторыми широко распространёнными с технологиями, которые используются при разработке программного обеспечения. В курсе будет рассказано о Linux, скриптовых языках, VCS, XML и многом другом.

Лекция 1. История UNIX систем.

  • Создание UNIX.
  • Ответвление BSD.
  • Коммерческие версии UNIX.
  • Возникновение GNU.
  • Становление Linux систем.
  • Развитие BSD систем.
  • Краткая характеристика современных дистрибутивов Linux.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 2. Файлы и пользователи в Linux.

  • Зачем нужен shell?
  • Основы работы в bash-e.
  • Файлы и файловая система.
  • Пользователи и группу.
  • Права доступа.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 3. Работа и программирование в shell-e.

  • Процессы
  • Маски файлов
  • «Одна задача — одна программа».
  • Работа с потоками ввода-вывода (stdout, stdin, stderr).
  • Перенаправление потоков.
  • Создание конвееров.
  • Редакторы. Как выйти из vi =).
  • Создание скриптов.
  • Основы программирования bash: переменные, циклы, условные выражения.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 4. Регулярные выражения.

  • Зачем нужны регулярные выражения?
  • Типы регулярных выражений.
  • Введение в синтаксис PCRE.
  • «Жадные» и не «жадные» регулярные выражения.
  • Способы применения регулярных выражений: поиск и замена.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 5. Язык Perl.

  • История.
  • Что значит «интерпретируемый язык».
  • Основные типы данных.
  • Основы синтаксиса.
  • Основные операции с числами и строками («.», сравнение строк)
  • Основные конструкции (циклы, услоные выражения, switch).
  • Регулярные выражения.
  • Массивы и хэши.
  • Функции.


Посмотреть видео на сайте Лекториума

Дополнительные материалы

Лекция 6. Язык Ruby.

  • История.
  • Области применения.
  • Основы синтаксиса.
  • Основные типы данных.
  • Структуры данных.
  • ООП.


Посмотреть видео на сайте Лекториума

Дополнительные материалы

Лекция 7. XML.

  • Зачем нужны языки разметки?
  • Почему именно XML?
  • Какие проблемы решаются использованием XML, а какие нет.
  • Что такое DOM и SAX?
  • XML библиотеки для разных языков программирования.
  • Описания XML схем.
  • XSLT.
  • XPath.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 8. Системы контроля версий.

  • История систем контроля версий.
  • Основные понятия.
  • CVS, SVN.
  • Распределённые системы контроля версий.
  • Основные сценарии работы.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 9. LaTeX.

  • WYSISWG.
  • История не WYSISWG издательских систем: ROFF, TeX, LaTeX.
  • Как TeX обрабатывает документы.
  • Математические формулы в TeX.
  • Как LaTeX расширяет TeX.
  • Основные средства разметки LaTeX.
  • Создание презентаций в LaTeX.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 10. Кодировки текста.

  • История появления кодировок.
  • Кодировки для кириллического текста.
  • Много байтовые кодировки.
  • Unicode.
  • Передача данных через почтовый протокол: base64.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Лекция 11. Технологии Web-разработки.

  • Протокол HTTP.
  • CGI.
  • DHTML.
  • CMF и CMS.


Посмотреть видео на сайте Лекториума

Дополнительные материалы


Скачать: Презентация

Автор: Roman Brovko

Худеем в любом возрасте. 50+

Худеем в любом возрасте. 50+Как ни парадоксально, но многие женщины после 50
задумываются о похудении чаще, чем в 30 или 40. Просто именно в этом возрасте
они начинают в полной мере понимать, какое негативное действие оказывают
избыточный вес и неправильное питание на их здоровье и самочувствие.

 Почему ты толстеешь?

Худеем в любом возрасте. 50+Замедленный обмен веществ уже не в состоянии справиться с
лишней съеденной конфеткой так же легко, как это было в 20 или 30 лет.

Обострение хронических заболеваний и приобретение новых
снижают физической активность, порой заставляя напрочь забыть о ней.

За всю свою жизнь женщина настолько привыкла заниматься кем
угодно (детьми, мужем, родителями), только не собой, что после 50 «похудательные
мероприятия» кажутся ей просто диковинными.

Расшатанная за 50 лет жизни психика уже не может справляться
с сильными эмоциями. Поэтому во время стрессов организм быстро откладывает про запас
жир из простых углеводов.

Секреты стройности 

Худеем в любом возрасте. 50+Объяви бойкот сидячему образу жизни! Прочь от телевизора с «мыльными»
сериалами и айда на прогулку в парк! Старайся проходить за день не менее 5-6
км.

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

Не налегай на белок. Его избыток отправится в «жировые
ловушки». Употребляй мясо 2-3 раза в неделю по 70 гр.

Включи в рацион больше клетчатки. Но с нею тоже не
переборщи. Норму легко почувствовать по состоянию кишечника.

Чаще находись на солнце (только не под прямыми лучами!). Солнце
– двигатель обменных процессов и источник энергии.

Наилучший вид спорта в этом возрасте – плавание. Оно не
только порадует тонизирующим эффектом, но и пощадит суставы.

  ТОП-5 продуктов для тебя

Худеем в любом возрасте. 50+1. Авакадо, благодаря высокому содержанию витамина Е и
мононасыщенных жиров, поможет сохранить гладкость кожи, блеск волос, снизить
уровень вредного холестерина в крови.

2. Ягоды (особенно черного и синего цвета!) обладают
антиоксидантным, антиварикозным, кардиопротекторным, противоаллергическим и
иммуномоделирующим действием. Отдавай предпочтение чернике, смородине, темному
винограду.

3. Растения семейства крестоцветных (цветная, брюссельская,
краснокачанная капуста, брокколи, репа, редис) помогут в борьбе с токсинами,
замедлят процесс старения организма.

4. Рыба понизит уровень вредного холестерина и станет
источником молодости и красоты.

5. Шпинат – источник железа, кальция, витаминов А, С и К –
защитит от инфаркта, инсульта, остеопороза и артрита.

Выше нос! Все только начинается!

 Узнай, как похудеть в 20+30+40+ лет!