logo

Мальцев Денис Анатольевич

к.т.н., доцент


Остальные новости в твиттере: @ulsunews

Расписание занятий, e-mail: maltsevda@yandex.ru

Раздел 1. Программирование в Windows.

  1. OS Windows. Основные различия в версиях OS Windows. Понятие API, версии Windows API.
  2. Система, управляемая сообщениями. Основные оконные сообщения. Функции для работы с сообщениями.
  3. Основные этапы создания простейшего однооконного приложения.
  4. Модальные и немодальные диалоговые окна. Окна сообщений. Диалоговые окна общего пользования.
  5. Динамически загружаемые библиотеки (DLL). Явное и неявное подключение. Module Definition File.
  6. Хуки (Hooks) и DLL. Разделяемые сегменты данных (Shared-секции).
  7. Процессы и потоки. Классы процессов и приоритеты потоков.
  8. Объекты синхронизации. Функции синхронизации потоков (ожидающие функции).

Раздел 2 (дополнительные вопросы). Язык программирования C.

  1. Типы данных в языке C. Объявление переменных и констант.
  2. Основные инструкции языка С.
  3. Указатели и массивы.
  4. Структуры.
  5. Функции.
  1. Система, управляемая сообщениями. Интерфейс прикладного программирования. Основные этапы создания простейшего приложения.
  2. Основные сообщения, принимаемые окном.
  3. Фунцкии для работы с графическим контекстом устройства GDI.
  4. Модальные диалоговые окна.
  5. Функции для работы с элементами диалоговых окон.
  6. Окна сообщений.
  7. Немодальные диалоговые окна.
  8. Диалоговые окна общего пользования.

Лабораторная работа предполагает написание программы на Microsoft Visual C++ с использованием только функций Win32 API (без использования MFC, VCL, ATL и т.п.).

Один вариант л/р может сдавать не более двух человек. Естественно, эти л/р не должны быть одинаковыми (т.е. списанными друг с друга). В л/р допускается наличие одинаковых блоков кода только в common местах, рассмотренных на лекциях или практических занятиях.

Работа должна быть выполнена на уровне, соответствующем курсу ФМИиАТ УлГУ, который определяется мной. Значимые имена переменных, отступы табуляции и т.п. не только улучшают "читабельность" работы, но и способствуют ее скорейшей сдаче. Комментарии к исходному тексту работы добавляются студентом по мере необходимости и в достаточном количестве. В заголовке каждого файла работы обязательно наличие следующих атрибутов:

  • Фамилия Имя Отчество.
  • Группа и курс.
  • Номер л/р. Вариант л/р.
  • Текст задания л/р.
Эта информация должна присутствовать в About (О программе) исполняемого файла.

  1. Просмотрщик bmp-файлов. Принимает в командной строке имя файла, открывает окно и показывает картину, растягивая ее на все окно (не нарушая пропорций).
  2. Программа открывает окно, заголовком которого является командная строка. Обеспечить возможность перетаскивания окна за любую точку его содержимого.
  3. Программа принимает в командной строке число N и создает окно в форме правильного N-угольника.
  4. Программа открывает окно, заголовком которого является командная строка. При перетаскивании окна, когда оно приближается на 15 или менее пикселов к границе экрана, оно должно автоматически "прилипать" к границе. "Отлипание" должно происходить аналогично.
  5. Проигрыватель wav-файлов. Принимает в командной строке имя файла, открывает окно и при нажатии левой кнопки мыши в пределах окна проигрывает указанный wav-файл.
  6. Программа открывает окно. При изменении размеров окна с помощью мыши окно должно быть нельзя уменьшить менее чем до 300x200 и увеличить более чем до 600x400.
  7. Программа открывает два окна, которые имеют одинаковый размер (200x200) и располагаются в один ряд по горизонтали. При перетаскивании первого окна второе также должно изменять свое местоположение, чтобы положение окон относительно друг друга не менялось.
  8. Программа открывает окно 300x300, в центре которого нарисован черный квардрат 200x200. При изменении размеров окна квадрат также пропорционально изменяет свои размеры.
  9. Программа открывает окно. При нажатии левой кнопкой мыши внутри окна в текстовый файл записывается текущее время и координаты курсора мыши относительно верхнего левого угла окна.
  10. Программа открывает окно, заголовком которого является командная строка. В окне отображаются текущие координаты верхнего левого угла окна и размер окна. При перетаскивании окна или изменении размеров числа в окне также должны меняться.
  1. Реализовать три разных алгоритма сортировки, работающих в трех потоках. Все алгоритмы работают с одним массивом, т.е. нужно реализовать их синхронизацию, таким образом: поток захватывает эту область памяти, случайным образом заполняет ее, и начинает сортировать, потом освобождает эту область памяти для других потоков. Также нужно вывести такую информацию: тип сортировки, время старта, время окончания работы потока, время, ушедшее на сортировку.
  2. Подвесить хук ко всем потокам, и с его помошью отлавливать нажатия на клавиши и записывать их в файл.
  3. Подвесить хук ко всем потокам, и с его помошью отлавливать перемещение окна и изменение его размеров. В файл записывать: заголовок окна, его положение и размеры, плюс дата и время изменения.
  4. Смоделировать солнечную систему (Солнце, планеты и Луну). Пропорции расстояний от Солнца до планет и от Земли до Луны можно не соблюдать. Главное - чтобы все было отчетливо нарисовано. Каждая планета (и Луна тоже) управляется отдельной нитью. Одна из планет (Земля) движется самостоятельно с заранее заданной скоростью, движение остальных планет осуществляется через синхронизацию с движением Земли. Все орбиты считать круговыми.
  5. Две нити. Одна нить порождает случайное количество (от 3 до 12) случайных чисел, которые могут быть длинами сторон соответствующего многоугольника; вторая нить отрисовывает в окне в случайном месте многоугольник, длины сторон которого порождены первой нитью. Передача чисел происходит с использованием синхронизации.
  6. Подвесить хук ко всем потокам, и с его помошью отлавливать нажатия на кнопки мыши. Записывать в файл дату и время нажатия, координаты курсора на экране, а также какая кнопка нажата.
  7. Три нити. Одна генерирует тройки чисел, вторая решает соответсвующее квадратное уравнение, третья записывает данные о решении в файл (a, b, c, D, x1, x2). Передача чисел происходит с использованием синхронизации.
  8. Игра в крестики-нолики. Играют две нити. Провести 1000 партий, окончательный вид поля для каждой партии вывести в файл, результаты (счет, например, 500:500) вывести в окне. Взаимодействие нитей через синхронизацию. Ходы делаются не случайным образом, а в соответствии с правилами и стратегией на не-проигрыш.
  9. Игра "камень-ножницы-бумага". Три нити генерируют случайно свои ходы. Провести 10000 ходов. Данные о ходах вывести в файл. Результат в виде счета вывести в окне. Взаимодействие нитей через синхронизацию.
  10. Три нити. Первая генерирует три точки на плоскости в области (0..10, 0..10), вторая одну точку в этой же области. Третья принимает данные от первых двух нитей и определяет, лежит ли точка внутри треугольника. Данные о координатах всех точек и результат работы третьей нити записывать в файл. Провести 10000 итераций. Количество удачных итераций (точка находится внутри треугольника) вывести в окне.
  1. Реализовать простейший текстовый редактор, обладающий возможностями стандартного notepad, поставляемого с Windows. Фичи, которые желательно видеть (плюсик на экзамене), но необязательно делать: печать и все что с ней связано, переход по номеру строки и отображение самих номеров строк, форматирование текста, чтобы он помещался в окно. Остальные возможности notepad должны быть реализованы обязательно. Небольшое дополнение: обязательно должна быть возможность выбора шрифта (тип, размер и пр.) для всего текста в редакторе. Т.е. я от вас не требую RichEdit'a - шрифт применяется ко всему тексту.
  2. Реализовать простейший графический редактор, аналог Paint'а, поставляемого с Windows. Различия в следующем: убираем все виды выделения, заливку, увеличительное стекло и спрэй. Оставляем: кисть, линия/поли-линия, текст, прямоугольник, овал. Для всех этих объектов должна быть предоставлена возможность изменения кисти, карандаша и пр. Сохранять художества в BMP-файл, читать из него же. Хорошо бы видеть toolbar. Печать, как и в первом пункте, желательна, но не обязательна.
  3. Реализовать простейший файловый менеджер. Типа TotalCommander (реализации Far'а не предлагать - т.к. курс программирование в Windows и поэтому хотелось бы видеть окошки). Реализовать следующие возможности: копирование, перемещение, удаление, переименование, запуск/открытие файла. Из настроек редактора: выбор дефолтного просмотрщика файлов (по умолчанию пусть будет notepad), выбор дефолтного редактора файлов (WordPad), цвет бэкграунда программы (по умолчанию серый, а не белый). Toolbar желателен. Иконки файлов считанные у системы, тоже желательно видеть (в этом случае лучше использовать List-View Control). Не желательно, но по некоторым вопросам реализации можно обращаться ко мне, ессно при помощи почты - сразу сказать, как получить иконку у файла я не смогу :) Полезная ссылка: Пространство имён shell.
  4. Реализовать простейший просмотрщик Web-страниц. Функциональность как у стандартного MS Explorer. В настройки вынести: стартовую страницу, собственный списочек Избранного и пр. Toolbar обязателен, если сделаете в точности как у Эксплорера (с 16-битными картинками и текстом на некоторых кнопках справа), будет дополнительный плюс на экзамене.
  5. Реализовать эксплорер по папкам. Аналог того что появляется при выборе Start->My Computer. Слева дерево папок, справа список файлов. Действия аналогичны заданию с "файловым менеджером". Условия на которых можно обращаться за помощью ко мне, аналогичны заданию с "файловым менеджером".
  6. Реализовать простейшую игрушку - Тетрис. Т.к. игра должна быть игрой интересной, то и оформлена она должна быть соответствующим образом - красивые кнопочки, красивый бэк, все выводится без морганий и желательно без тормозов на компьютерах в л/р классе. Да, желательно использовать GDI, т.к. я не могу обещать последних версий драйверов для видеокарт (OpenGL) и установленного DirectX 9.0 (соотв. DirectX). Помимо графики, игрушка должна пищать, т.е. воспроизводить какие-нибудь звуки на какие-нибудь события.
  7. Реализовать простейший вьюэр картинок. Аналог Windows Picture and Fax Viewer из Windows XP. Желательно использовать GDI+. Поддерживаемые форматы: BMP, JPEG, PNG. Функции стандартные: выбираем папочку, выводится первая картинка, далее нажимая вверх и вниз выводятся соотв. предыдущая и последующая картинки. Желательно, но необязательно, видеть слева дерево файлов и папок. Обязательно реализовать режим слайд-шоу. Если будут трудности с разворотом на весь экран, можно это делать в оконном режиме.
  8. Реализовать проигрыватель звуковых файлов. Пример - WinAmp (кста, файлы можно играть с его помощью). Что нужно помимо стандартных кнопок СТАРТ, СТОП, ПАУЗА: playlist, вывод текущего проигрываемого файла, зацикливание, случайный выбор мелодии. Если будете делать только проигрыватель звуковых файлов (можно только wav, но крайне не желательно), то он должен влазить в высоту заголовка окна, как WinAmp в свернутом состоянии. Если же реализуете проигрывание видео файлов (ActiveX MediaPlayer вам в руки), то оформить лучше в виде стандартного (старого) Windows - проигрывателя.
  9. Создать подобие Registry Editor (regedit.exe) из стандартной поставки MS Windows. Нужно уметь: добавлять ключи, создавать ключи, устанавливать значения для ключей, удалять ключи, переименовывать ключи. То же самое и для значений ключей и для данных. Подсказка: не грузите в дерево слева сразу все ключи - грузите только тогда, когда мы начинаем разворачивать node дерева (жмем на "+"). Поиск должен быть обязательно, хотя бы по имени ключа. Контекстное меню (по правой клавиши мыши) крайне рекомендуется.
  10. Сделать подобие инсталляционной программы. Внимание, никакими NSIS, InoSetup или их подобиями пользоваться нельзя! Должны быть следующие экраны: Welcome, Выбор папки, Выбор типа установки (пара чек боксов), Установка с прогресс баром, Finish. Инсталлится пусть 2-3 текстовых файла из исходников. Файлы можно запихнуть как в exe, так и просто положить рядом с exe. Главное в этой программе, показать умение работать с Property Sheet и Property Pages. Шот инсталляшки:
    sample
  1. Компиляторы. Основные этапы компиляции. Понятия compiled-time и run-time. Оптимизация приложений.
  2. Процедурное программирование. Типы, переменные и функции. Указатели и ссылки.
  3. Процедурное программирование. Массивы, структуры. Выражения и инструкции.
  4. ООП. Инкапсуляция. Классы. Конструкторы и деструктор, методы и данные.
  5. ООП. Наследование. Множественное наследование. Доступ к данным.
  6. ООП. Полиморфизм. Виртуальные функции, "чистые виртуалы".
  7. Обобщенное программирование. Библиотека STL. Контейнеры: string, vector, list и map.
  8. Обобщенное программирование. Итераторы. Алгоритмы.
  9. Шаблоны. Стратегии. Специализация шаблонов. Частичная специализация шаблонов классов.
  10. Обработка исключений. Классы и обработка исключений.
  1. Стандарт языка программирования и компиляторы. Основные этапы компиляции.
  2. Типы, переменные и функции.
  3. Указатели и ссылки.
  4. Массивы, структуры.
  5. Инструкции for, while, if и switch.
  6. Работа с файлами.
  7. ООП. Инкапсуляция. Классы. Данные и методы.
  8. ООП. Инкапсуляция. Классы. Конструкторы и деструктор.

Методические пособия и примеры

Статьи:
Обзор литературы по ЯП С++ - статья на базе сайта Анатолия Орлова.
Полезные ресурсы:
boost и loki - две библиотеки, которые должны быть у каждого С++ программиста.
Книги, которые обязательно нужно прочесть (от Анатолия Орлова) | веб-архив
Лекции Александра Степанова (eng) (914.61KB) - Это тот дядя, который придумал STL :)
Open Standards - Открытые версии стандартов: C11 | C++11
cplusplus.com - Отличная онлайн документация по языку С++ (eng)
isocpp.org - Последние новости о развитии языка С++ (eng), твиттер: @isocpp
wikipedia.org [C++11] - ключевые особенности новой версии языка C++ (ru)
cppreference.com - таблица методов у STL-контейнеров (С++03 и С++11)
Support For C++11 Features - таблица поддержки фич стандарта С++11 в компиляторах от Microsoft (VC2010, VC2012, VC2013).
C++11/14 compiler and library shootout - и еще одна табличка о поддержке фич стандартов C++11 и C++14 в современных компиляторах
Пример "Соглашения по оформлению кода"
Google C++ Style Guide - еще один пример оформления кода (eng)
Анимация добавления элементов в красно-черное дерево
  1. Что такое ОС. ОС как виртуальная машина. ОС как менеджер ресурсов. ОС как защита пользователей и программ. ОС как резидентная программа.
  2. Эволюция вычислительных систем и ОС.
  3. Основные понятия ОС. Системные вызовы. Прерывания. Искючительные ситуации. Файлы.
  4. Процессы. Состояния процесса. Переключение контекста.
  5. Потоки. Многозадачность и планирование. Вытесняющая и невытесняющая многозадачность.
  6. Потоки. Алгоритмы планирования. Методы синхронизации.
  7. Виртуальная память. Организация памяти компьютера. Сегментная организация памяти.
  8. Виртуальна память. Страничная организация памяти. Виртуальные адреса.
  9. Файловая система. Файлы. Имена файлов и типы файлов. Физическая и логическая организация файлов.
  10. Файловая система. Таблица размещения файлов. Права доступа к файлу. Общая модель ФС, и современная архитектура ФС.
Написать коммандный файл (bat-файл) и разработать консольную программу. Порядок функционирования: пользователь запускает bat-файл с параметром(и), который выбирает нужные входные файлы и запускает exe файл необходимое число раз. EXE-файл принимает от bat-файла имя одного входного файла и дополнительные параметры, которые указал пользователь. Результат работы в случае успеха добавляется в файл output.txt. В случае ошибки exe файл возвращает ненулевой код ошибки и пишет в консоль ее расшифровку.
  1. Входной файл имеет расширение "*.int" и содержит целые числа разделенные пробельными символами. Необходимо вычислить сумму (доп. параметр --add) либо произведение (--mul) этих чисел. Вывод в output построчно: (имя файла): (результат). По умолчанию (в случае отсутствия доп параметра) считается сумма чисел.
  2. Входной файл имеет расширение "*.flt" и содержит вещественные числа разделенные пробельными символами. Необходимо вычислить минимальное (доп. параметр --min) либо максимальное (--max) из этих чисел. Вывод в output построчно: (имя файла): (результат). По умолчанию (в случае отсутствия доп параметра) выводится минимальное и максимальное число.
  3. Входной файл имеет расширение "*.sqr" и содержит тройки вещественных чисел в каждой строке. Необходимо вычислить корни квадрантного уравнения заданного этими числами. Вывод в output построчно: (имя файла): (число уравнений без решений), (число уравнений с одним корнем) и (число уравнений с 2-мя корнями). Если указан параметр --verbose, то в output выводится со следующей строки все результаты через символ ';'.
  4. Входной файл имеет расширение "*.wrd" и содержит слова разделенные пробельными символами. Необходимо вычислить число повторений каждого слова в этом файле. Гарантированно, что число уникальных слов не превышает 256 штук. Вывод в output построчно: (имя файла): (слово, которое встречается реже всего) - (слово, которое встречается чаще всего). Если добавлен параметр --info, добавить к выводу число повторений.
  5. Входной файл имеет расширение "*.fnd" и содержит произвольную текстовую информацию. Необходимо вычислить число вхождений искомой строки, которая задается параметром "--find:искомая_строка". Гарантируется, что искомая строка не содержит пробелов. Вывод в output построчно: (имя файла): (число вхождений). По умолчанию (в случае отсутствия доп параметра) ищется имя коммандного файла.
  6. Входной файл имеет расширение "*.int" и содержит целые числа разделенные пробельными символами. Необходимо вычислить НОК для всех этих чисел, если указан параметр --nok, или НОД, если указан параметр --nod. Вывод в output построчно: (имя файла): (НОД) (НОК). При отсутствии дополнительных параметров (--nok и --nod) считать, что указаны оба параметра.
  7. Входной файл имеет расширение "*.wrd" и содержит слова разделенные пробельными символами и знаками пунктуации. Необходимо вычислить общую длину всех слов в этом файле, без учета пробельных символов и пунктуации. Символы пунктуации: .,:-;!?"' другие символы считаются буквами. Вывод в output построчно: (имя файла): (общая длина слов). Если добавлен параметр --sign, добавить к выводу кол-во знаков пунктуации в файле.
  8. Входной файл имеет расширение ".bin" и представлен в бинарном виде. Файл содержит массив 2D-вершин (x,y). Структура файла: первые 2 байта - кол-во вершин, далее следуют пары типа float (по 4 байта на каждый), указывающие на x и y соответственно. Задача - найти геометрический центр фигуры, заданной этими точками. Если указан параметр --perimeter, то также необходимо вычислить периметр фигуры. Вывод в output построчно: (имя файла): (x-центр, y-центр) : (периметр если необходимо).
  9. Входной файл имеет расширение ".bin" и представлен в бинарном виде. Файл содержит массив 2D-вершин (x,y). Структура файла: первые 2 байта - кол-во вершин, далее следуют пары типа float (по 4 байта на каждый), указывающие на x и y соответственно. Задача - найти площадь фигуры, заданной этими точками. Если указано меньше 3-х точек, считать площадь равной 0. Если указан параметр --perimeter, то также необходимо вычислить периметр фигуры. Вывод в output построчно: (имя файла): (площадь) : (периметр если необходимо).
  10. Входной файл имеет расширение ".bin" и представлен в бинарном виде. Файл содержит массив 2D-вершин (x,y). Структура файла: первые 2 байта - кол-во вершин, далее следуют пары типа float (по 4 байта на каждый), указывающие на x и y соответственно. Каждая тройка вершин образует треугольник, если число вершин не кратно трем, то лишние вершины игнорируются. Посчитать кол-во треугольников. Если указан параметр --perimeter, то также необходимо вычислить наибольший периметр у треульника. Вывод в output построчно: (имя файла): (число треугольников) : (периметр если необходимо).
Последние варианты оперируют с бинарным файлом. Сгенерировать его можно при помощи этого кода (постарайтесь понять его, когда будете набирать):

Коммандный файл может выглядеть таким образом:
  1. Реализовать три разных алгоритма сортировки (любых), работающих в трех потоках. Все алгоритмы работают с одним массивом, потоки запускаются одновременно, обеспечить синхронизацию потоков. Алгоритм работы такой: поток "захватывает" массив, случайным образом заполняет его, и начинает сортировать, потом освобождает этот массив для других потоков. Нужно вывести такую информацию: тип сортировки, время старта, время окончания работы потока, время, ушедшее на сортировку.
  2. Две нити. Одна нить порождает случайное количество пар (от 3 до 12) случайных чисел (от -100 до 100), которые могут быть координатами вершин соответствующего многоугольника; вторая нить вычисляет периметр многоугольника, порожденого первой нитью. Передача чисел происходит с использованием синхронизации. Выполнить 10000 итераций. Вывести максимальный и минимальный периметр.
  3. Три нити. Одна генерирует тройки чисел, вторая решает соответсвующее квадратное уравнение, третья записывает данные о решении в файл (a, b, c, D, x1, x2) заданный в командной строке. Передача чисел происходит с использованием синхронизации. Выполнить 10000 итераций.
  4. Игра в крестики-нолики. Играют две нити. Провести 10000 партий, окончательный вид поля для каждой партии вывести в файл, результаты (счет, например, 500:500) вывести в окне. Взаимодействие нитей через синхронизацию. Ходы делаются не случайным образом, а в соответствии с правилами и стратегией на не-проигрыш.
  5. Игра "камень-ножницы-бумага". Три нити генерируют случайно и одновременно свои ходы. Провести 10000 ходов. Данные о ходах и том кто выиграл вывести в файл. Результат в виде счета вывести в окне. Взаимодействие нитей через синхронизацию.
  6. Три нити. Первая генерирует три точки на плоскости в области (0..10, 0..10), вторая одну точку в этой же области. Третья принимает данные от первых двух нитей и определяет, лежит ли точка внутри треугольника. Данные о координатах всех точек и результат работы третьей нити записывать в файл. Провести 10000 итераций. Количество удачных итераций (точка находится внутри треугольника) вывести в окне.

Методические пособия и примеры

Статьи:
habrahabr.ru - видео лекции по курсу «Операционные системы» с Алексеем Брагиным в МГТУ им. Баумана.
habrahabr.ru - продолжение видео лекций по курсу «Операционные системы» с Алексеем Брагиным в МГТУ им. Баумана.
hexlet.org - еще один хороший курс лекций по "Операционным Системам".
Python на Хабре - перечень ссылок на интересные ресурсы по языку Python.
Полезные ресурсы:
Far Manager - консольный файловый менеджер.
Python - официальная страничка языка Python.
Portable Python - скачиваем третью версию (сейчас это 3.2.5.1), устанавливаем в минимальной конфигурации на HDD (убираем галки с модулей и редакторов), перекидываем на флешку. Можно посмотреть и на другие варианты: WinPython или eGenix PyRun.
Sublime Text - удобный текстовый редактор.
Урок bat-аники и Урок bat-аники 2-ой - учимся писать командные файлы для Windows.
Ошибка работы с файлами и строчками (fopen, strcpy и др.) в VS2013
2013-я студия по умолчанию ругается на некоторые функции из <stdio.h> или <string.h>, например на fopen в приведенном ниже примере:

Для начала нужно внимательно прочитать ошибку и понять, что в ней сказано. Оригинал звучит так:

error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Переведем на русский язык:

ошибка C4996: 'fopen': Эта функция или переменная может быть не безопасной. Вместо нее используйте fopen_s. Для отключения этого механизма предупреждений, используйте _CRT_SECURE_NO_WARNINGS. Подробности в онлайн справке.

Статья на эту тему в интернете: Security Features in the CRT.
Начинаем вносить правки в наш проект, для начала открываем его свойства и переходим на страничку настроек препроцессора:

Нужно добавить еще один дефайн _CRT_SECURE_NO_WARNINGS к определениям препроцессора (Preprocessor Definitions). Либо просто добавив его к строчке через точку с запятой, либо развернув комбо-бокс и выбрав пункт меню Edit. В последнем случае получим вот такое окно:

Сохраняем настройки и ошибка должна исчезнуть.
Сдавшие л/р зачет получают автоматом.
  1. Задачи стоящие перед 3D API. Конвеер OpenGL. Библиотеки OpenGL, их использование.
  2. Подключение OpenGL. Синтаксис команд OpenGL. Рисование геометрических примитивов. Битовые плоскости (bit-planes) и их очистка.
  3. Квадрические поверхности. Функции управления квадрическими объектами из библиотеки GLU.
  4. Понятия фонового, диффузного, зеркального и исходящего света. Понятие материала. Функции для работы со светом и материалами.
  5. Матричные преобразования в OpenGL.
  6. Текстурирование.
  7. Расширения OpenGL.
  8. Вершинные массивы и расширение VBO.
  9. Прозрачность и смешивание (полупрозрачность) в OpenGL. Мультитекстурирование. Расширение ARB_texture_env_combine (?).
  10. Графические контексты устройств. GDI+. Функции для работы с различными форматами файлов.
  11. Библиотеки для работы со звуком. Пример работы со звуком на базе библиотеки OpenAL.
  1. Задачи стоящие перед 3D API.
  2. Создание OpenGL приложения при помощи библиотеки GLUT.
  3. Синтаксис команд OpenGL.
  4. Рисование геометрических примитивов (точки, линии, треугольники и четырехугольники). Битовые плоскости (bit-planes) и их очистка.
  5. Рисование 3D объектов GLUT
  6. Матричные преобразования в OpenGL.
  7. Материалы и Текстурирование.
Требования к оформлению л/р:
Значимые имена переменных, отступы табуляции и т.п. не только улучшают "читабельность" работы, но и способствуют ее скорейшей сдаче.
Комментарии к исходному тексту работы добавляются студентом по мере необходимости и в достаточном количестве.
В заголовке каждого файла работы обязательно наличие следующих атрибутов:
  • ФИО сдающего;
  • Группа;
  • Номер л/р;
  • Текст задания л/р.
Без вышеприведенных атрибутов работы приниматься не будут.
  1. Часики. 2 варианта (на выбор): аналоговые и электронные. Все в 3D, можно повращать, посмотреть с разных сторон. В аналоговых обязательно присутствуют: часовая, минутная и секундная стрелки, циферблат. В электронных чиселки: ЧЧ:ММ:СС. Естественно время должны показывать правильно :)
  2. Медиаплеер. Поворот "экрана" с видео в любом направлении, приближение/удаление. Звук играть необязательно но желательно. Понимать все форматы установленные в Windows, т.е. грамотное использование инсталлированных кодеков.
  3. "Модель" солнечной системы в движении. Обязательно присутствуют: солнце, земля, луна. Обязательно натянуть на все элементы текстуры поверхностей. Солнце - источник света, земля и луна должны освещаться соответственно. Желательно наличие "атмосферы" у земли.
  4. Игра шашки (крестики нолики, шахматы) в полном 3D. Доску можно вращать, приближать и удалять. Фигурки перемещаются по полю плавно или плавно возникают. Основная проблема: правильно определить куда тыкнул пользователь мышкой. Обязательные элементы: игровая доска, игровые фигурки.
  5. Просмотрщик 3D-моделей. Формат выбрать либо свой (в этом случае предоставить 5-6 моделей не меньше чем по 50 полигонов), либо использовать существующие (3ds, x, obj). Должна существовать возможность натягивания текстуры на модель. Обязательные элементы у вершины модели: позиция, текстурная координата, нормаль.
  6. Простейший GUI (графический пользовательский интерфейс) на OGL. Необходимые элементы: button, label, edit, listbox. Соотв. продумать как реализовывать в программе обработку сообщений от них. Обязательна реакция на мышь (нажатие на клавишу, мышь над объектом). Желательно (но необязательно) еще и обработка с клавиатуры. Размеры и обработчики задаются при создании элемента.
  7. Работа с расширениями OGL. Проверить поддерживается ли расширение на компьютере. Инициализировать относящиеся к нему функции. И использовать их. Все шаги написать самостоятельно. Информацию брать из документации. Расширение - ARB_vertex_buffer_object. Документация по нему
  8. Система частиц. Настраиваемая. Обеспечить отображение не меньше 5000 частиц без тормозов (>=30fps). Должна настраиваться из внешнего файла. Предоставить файлы показывающие эффект огня (желательно с дымом), фонтана, следа от ракеты (т.е. источник частиц должен двигаться), дождя или снега.
  9. Использование GDI+. Реализовать просмотрщик графических файлов (минимум: bmp, jpg, gif и png). Получившуюся картинку можно "подвигать" по экрану, масштабировать (от 25% до 500%). Желательно использовать OGL для вывода (чтобы небыло тормозов при перерисовке), в этом случае разрешается читать только картинки размерами кратными степени двойки.
  10. Проигрыватель MP3 или OGG файлов. Функции проигрывателя: отображение текущей песни, играть, стоп, пауза, след. песня, пред. песня. Соотв. необходимо наличие "Play List".
* 2 последние л/р можно писать без использования OGL. Если будут трудности при реализации или вопросы обращайтесь. Если вопрос окажется "правильным" отвечу :)
** Вы можете делать свою л/р, которую придумаете сами. Но, перед этим вы должны согласовать ее со мной.

Методические пособия и примеры

ms01.pdf (1,58MB) - Мультимедиа технологии. Введение в технологии отображения 3D графики.
ms02.pdf (2,58MB) - Мультимедиа технологии. Основы работы с редактором шейдеров FX Composer.
ms02_src.zip (42.1KB) - Исходный код к методичке по FX Composer.
ms03.pdf (681KB) - Мультимедиатехнологии. Создание DirectX-приложений.
Для работы примеров, вам надо закачать GLUT, особенности установки см. в архиве в файле readme.txt. Задача примеров - пояснить то или иное поведение OpenGL и показать общие принципы работы с OpenGL. Писать за вас лабораторные не входит в мою задачу :) Поэтому комментарии расставлены в тех местах, которые я считаю важными для понимания, если вас интересует остальное - разбирайтесь сами. Перед запуском примеров или изучения их кодов, советую читать файл readme.txt
GLUT (96,5KB) - урезанный вариант, полную версию, можно забрать на официальном сайте
Первый пример (24.5KB) - работа с матрицами
Второй пример (21.4KB) - параметры glBegin
Третий пример (сти',23.4KB) - квадрические поверх
Четвертый пример (39.4KB) - материалы и освещение
Пятый пример (26.2KB) - текстурирование
Шестой пример (66.21KB) - stencil буфер
Седьмой пример (60.29KB) - вывод меша
Восьмой пример (49.96KB) - блендинг
Девятый пример (248.53KB) - ARB_framebuffer_object | EXE (126.8KB)
Пример системы частиц (3.6KB)
Экспорт из 3dsmax (1.6MB) - Пример экспорта из 3dsmax и отображения меша в своей программе. За модельку спасибо игре Left4Dead.

Полезные ссылки

Драйвера: nVidia | ATI | Intel
gamedev.ru - разработка игр | Форум | Cтатьи | Лекции | Ссылки | OpenGL
dailytelefrag.com - The Daily Telefrag - разработка игр | Форум | Статьи | Блоги | КРИ
OpenGL Red Book. Русский перевод. (pdf | zip-html)
Игорь Тарасов "Часть 1. Основы OpenGL."
nehe.gamedev.net - NeonHelium - примеры работы с OpenGL | Русский перевод
Официальный сайт OpenGL | Форум | Спецификации | Расширения
codesampler.com - сэмплы по 3D графике | DirectX 9.0 | DirectX 8.0 | OpenGL
RSDN - Russian Software Developer Network | GDI+
XNA на сайте M$ | О XNA по-русски | Форум
My OpenGL Demos - Примеры старых OpenGL работ от _Winnie. Обратите внимание там есть часики и солнечная система.
Подарок от nVidia: Полная версия книги GPU Gems. (eng)
Подарок от nVidia: Полная версия книги GPU Gems 2. (eng)
Подарок от nVidia: Первые главы книги GPU Gems 3. (eng)
Вопросы к экзамену (XML):
  1. XML как формат документов. Элементы, теги и атрибуты. XML-имена. Ссылки на сущности. Инструкции обработки. XML-объявление. Корректность XML-документа.
  2. Пространства имен. Поддержка многоязычности.
  3. Проверка действительности (validation) XML-документа. Структура DTD. Объявления элементов и атрибутов.
  4. XSL-трансформации. XSL-процессоры. Элементы xsl:stylesheet, xsl:transform, xsl:value-of и xsl:apply-template. Дополнительные элементы xsl:if и xsl:when.
  5. Объектная модель документа (DOM).
  6. Событийно-ориентированный API для анализа XML документов (SAX).
  7. Язык XML Path (XPath). Маршруты поиска. Предикаты. Выражения. Функции.
Вопросы к экзамену (C#):
  1. XmlTextWriter и пример сохранения в XML.
  2. XmlDocument и пример парсинга XML при помощи технологии DOM.
  3. XmlTextReader и пример парсинга XML при помощи технологии SAX.
  4. XslTransform и пример создания XSL-процессора.
  5. XmlValidatingReader и пример валидации XML документа.
На данный момент приведен предвариетльный список возможных вариантов. По мере сдачи л/р он будет увеличиваться, чтобы заданий хватило всем. Один вариант л/р может сдать только один студент из одной группы. Л/р должны быть написаны на языке C# (и Java), содержать достаточное кол-во комментариев, необходимых для понимания функционирования программы. Каждая л/р должна содержать readme.txt файл, в котором указаны: ФИО сдающего, группа, вариант л/р и текст задания л/р.
  1. RSS-ридер. На вход подается URL к XML файлу. При первом запуске читаются все новости, сортируются (если это возможно). При последующих запусках, добавляется только новая информация. Примеров подобных программ достаточно, проблем с пониманием функциональности быть не должно.
  2. Парсер формата COLLADA. Всю информацию можно получить с офф. файта: collada.org. Необходимо читать текстовый (xml вариант) файлов. Вывести суммарную информацию о загруженном файле (кол-во материалов, мешей, источников света и пр.) в виде дерева. При выборе одного из пунктов, дополнительно выводить расширенную информацию: имена, кол-во вершин, полигонов, RGB составляющие материалов и источников света и т.п. Выводить информацию об анимации, о "скелетах" и т.п. не нужно, но приветствуется.
  3. Book reader. На вход подается книга в формате FictionBook. Программа должна правильно отобразить эту книгу. Т.е. выделить заголовок, автора, соблюдать форматирование, выделять главы и т.д. Подробнее о формате читаем на офф. сайте: fictionbook.org. Книжки в этом формате можно получить тут: fictionbook.ru (смотрим архивы вида fb2.zip).
  4. Замена ini-файлам. Необходимо самостоятельно реализовать древовидный формат для сохранения настроек программы. Формат должен представлять собой XML файл и давать возможность неограниченного числа вложений. Поддрежка сохранений след. типов: целое, число с плавающей точкой, строка и любая бинарная (!!!) информация. Для этого формата необходимо создать класс, позволяющий быстро и просто добраться до любого параметра. Например: xml.window.border.size = 10, или xml["window"]["border"]["size"] = 10, или любой другой удобный вариант. Для документа обязателено сделать DTD.
  5. Book converter. Похоже на третью л/р. Но, задачей является написание XST-транслятора, на вход которому подается книга в формате FictionBook, а на выходе получается XHTML 1.0 Strict файл. В конце трансляции можно автоматом запустить браузер и отобразить эту книгу. Подробнее о формате читаем на офф. сайте: fictionbook.org. Книжки в этом формате можно получить тут: fictionbook.ru (смотрим архивы вида fb2.zip).
  6. Простейший поисковый робот. На вход подается набор URL (в виде текстового файла, ваш формат) и ключевая фраза для поиска. Робот читает метаинформацию в каждом файле. Если находит keywords, то производит сравнение по ним. Если не находит, то парсит весь файл на вхождение ключевой фразы. Регулярные выражения приветствуются. Оптимизация по скорости тоже, т.е. робот (и XML-парсер) сначала парсит header html-файла и только в случае неудачи парсит весь файл.
  7. Анализатор XHTML. Задача л/р проанализировать XHTML файл на корректность и действительность (valid). В случае если документ не содержит ошибок, оставить документ неизменным. В случае если ошибки есть, указать число ошибок, выделить эти ошибки в документе и дать пояснения по этим ошибкам.
  8. GUI из XML. Разработать формат XML и программу на C#. Программа на вход получает XML-документ содержащий параметры GUI (графического пользовательского интерфейса): элементы, их положение и их настройки. По этому документу, программа создает и располагает на себе указанные элементы. Обязательна поддержка след. элементов: label, edit, button, progress bar, check box, radio button, picture control, slider. Какие параметры этих элементов можно указать в документе выбирайте сами.

Полезные ссылки и примеры

Примеры:
Должны компилироваться в MSVS.NET2003 и MSVS2005.
XSL-транслятор (2.12KB)
WebClient (5.94KB) - пример получения XML файла из сети
XmlTextWriter (6.83KB) - пример сохранения в XML
XmlDocument (6.41KB) - пример парсинга XML при помощи технологии DOM
XmlTextReader (6.56KB) - пример парсинга XML при помощи технологии SAX
XslTransform (6.80KB) - пример XSL-процессора, для работы берем из XSL-транслятор
XmlValidatingReader (7.86KB) - пример валидации XML документа при помощи XSD схемы
SocketsChat (13.85KB) - пример работы с сокетами (клиет+сервер для чата), взято с codeproject.com
Полезные ссылки:
Прочесть! MSXML is Not Supported in .NET
SAXON - XSL-процессор, запускаемый из коммандной строки
Apache Cocoon - XSL-процессор, встроенный в веб-сервер
GotDotNet - все для .NET программистов | Статьи | Форумы
Книги:
Джеффри Рихтер. CLR via C#. Программирование ... на языке C#
Эндрю Троелсен. Язык программирования С# 2005 и платформа .NET 2.0
Кристиан Нейгел и Ко. C# 2005 и платформа .NET 3.0 для профессионалов
Сергей Звездин. Программирование панели задач в Windows 7. PDF (1471.0KB)
  1. Протоколы. Сокеты.
  2. Формат XHTML.
  3. Формы и элементы форм.
  4. JavaScript. Основы.
  5. JavaScript. Объекты среды: window, layer.
  6. JavaScript. Объекты среды: document. Коллекции объектов.
  7. PHP. Синтаксис. Работа с массивами.
  8. PHP. Синтаксис. Строки и регулярные выражения.
  9. PHP. Работа с файлами, файловой системой и плоскими файлами.
  10. PHP. Работа с БД. MySQL.
  11. CGI. FastCGI. ISAPI.
  1. Формат XHTML. Структура HTML документа. Основные тэги HTML-формата.
  2. Формы и элементы форм: текстовое поле, текстовая область, флажок, переключатель, список и кнопки для передачи данных.
  3. Каскадные таблицы стилей. CSS в элементе разметки. CSS в заголовке HTML документа для стандартных элементов.
  4. Каскадные таблицы стилей. CSS в заголовке HTML для произвольных классов. CSS в заголовке HTML для объектов (ID). Размещение CSS во внешнем файле.
  5. JavaScript. Работа с типами. Циклы и условия. Функции.
  6. JavaScript. События. Иерархия объектов. Объект document. Объект location.
  7. PHP. Типы данных. Переменные и идентификаторы. Операторы.
  8. PHP. Вывод данных, сохранение данных в файл и отправка данных по e-mail.
Лабораторные работы, оцениваемые в 1 балл (сдаются максимум 2-мя студентами).
  1. Создайте документ в новом окне браузера. Для активации документа используйте кнопку формы. Предусмотрите возможность закрытия окна из родительского. Сделайте то же самое с использованием фреймов.
  2. Создайте кнопку с текстом в виде бегущей стороки.
  3. Создать скрипт, считающий число дней, прошедших с определенной даты.
  4. Создать скрипт, позволяющий осуществить быстрый переход по ссылке с использованием списка значений и кнопки ("Go!").
  5. Создать скрипт, мешающий литеральные значения, занесенные в массив, в случайном порядке.
  6. Создать скрипт, выводящий не менее 20 :) параметров настройки браузера.
Лабораторные работы, оцениваемые в 2 балла.
  1. Идентифицировать пользователя, зашедшего на страницу. Запомнить имя пользователя на будущее. При каждом последующем заходе на страницу отображать имя пользователя. предусмотреть возможность смены имени.
  2. В зависимости от выбора пользователя, загружать ту или иную цветовую гамму страницы. Предусмотреть предварительный(уменьшенный) просмотр.
  3. Создать скрипт, показывающий текст с плавно меняющимися оттенками (как в OpenGL заставках Windows).
  4. Создать скрипт, имитирующий работу HTML тэга <MAP>.
  5. Создать скрипт, выводящий часы в окне программы. Предусмотреть возможность отключения.
  6. Создать скрипт, аналогичный п.5., но в строке состояния броузера.
  7. Создать скрипт, позволяющий выбирать цвет фона/текста/ссылок из набора предложенных.
  8. Создать счетчик попаданий пользователя на страницу. Предусмотреть перезагрузки (ReLoad).
  9. Создать скрипт, оформляющий навигацию по странице в зависимости от языка пользователя. (предусмотреть русский/english).
Лабораторные работы, оцениваемые в 3 балла.
  1. Создать скрипт, имитирующий баннерную "крутилку" на странице. Т.е. из списка рисунков(текстовых ссылок) на экран выдается случайный. Рисунок должен быть выдан в отдельном окне (iframe).
  2. Создать генератор паролей. Определить группы парольных символов, возможность выбора длины пароля.
  3. Создать скрипт, выводящий календарь на произвольно заданный год. Указать текущий день.
  4. Создать скрипт, аналогичный п.5. (из заданий на 2 балла). Часы представлять в виде циферблата.
  5. Создать скрипт, разбирающий арифметические выражения с поддержкой всех арифметических операций и скобок.
  6. Создать скрипт, имитирующий вертикально падающие объекты (как в фильме "Матрица").
  7. Создать скрипт, имитирующий новостную ленту. Имеется некоторый файл в текстовом виде (win1251), формата:"время" "новость", где "время"- время выхода "новости". "Новость" - произвольный текст. Известен адрес сайта, на котором "раскрывается" новость и алгоритм, по которому в зависимости от времени новости формируется ее .html файл.
  8. Создать скрипт, позволяющий осуществлять поиск информации на нескольких отечественных поисковых системах одновременно или по выбору.
Лабораторные работы, оцениваемые в 4 балла.
  1. Создать скрипт, имитирующий многоуровневое выпадающее меню.
  2. Создать скрипт, передвигающий некий объект (например, рисунок) за курсором мыши.
  3. Создать скрипт, верстающий текст в зависимости от разрешения экрана (640х480 и меньше - 1 колонка, до 800х600 - 2 колонки, выше - 3 колонки).
  4. Разработать персональную телефонную книгу на основе Cookies.
  5. Разработать персональную телефонную книгу на основе записи информации в простейшую БД (текстовый файл).
Лабораторные работы, оцениваемые в 5 баллов.
  1. Создать скрипт, кодирующий html-страницы и дающий доступ к ним только при вводе пароля.
  2. Создать скрипт, реализующий игру в "15". Движение фишек осуществлять при помощи мыши.
  3. Создать скрипт, позволяющий играть в "крестики-нолики". Ход осуществляется мышью. Компьютер ходит не случайным образом.
Лабораторные работы, оцениваемые в 6 баллов.
  1. Создать навигатор по жестким дискам компьютера, по аналогии с Far и т.п.
  2. Игра "шарики" ("линии").
  3. Игра flip-flop.
  4. ВАША игра (необходимо ДО сдачи согласовать с преподавателем).
В этой лабораторной работе оценивается как знание базовых технологий PHP, так и умение применять их в конкретных web-приложениях.
Ниже указаны обязательные к выполнению технологии:
  1. Ассоциативные массивы
  2. Суперглобальные массивы
  3. Работа с файлами (может быть заменена на СУБД по желанию студента. Вообще, использование СУБД в любом Web-приложении только добавит вам баллов)
В силу индивидуальности стилей программирования снимается ограничение на число студентов, выполняющих одну работу. По этой же причине любая работа может быть оценена и бОльшим количеством баллов, чем указано в таблице ниже. При этом работы, "написанные" путем замены имен переменных в работе товарища (или аналогичным образом) безжалостно пресекаются, в соответствии с п.7 "Правил приема л/р".
Желающие получить оценку 4 или 5 на экзамене, обязаны реализовать web-приложение, оцениваемое в 5 баллов.
Варианты:
  1. (3 балла) Список рассылки. Это приложение, позволяющее создавать, администрировать и использовать списки e-mail адресов, полученных законным :) путем. Приложение должно уметь принимать новые адреса, выполнять стандартные действия (просмотр, удаление, ручное добавление и т.п.) с имеющимся списком адресов и рассылать (используя функцию -заглушку mail()(параметры - как в PHP) - считать, что на сервере настройка связи с почтовым сервером имеется, а "заглушка" реализовывается кем-то другим) некоторую информацию (например, рассылку новостей) на каждый из этих адресов.
  2. (3 балла) Гостевая книга. Это приложение, принимающее от посетителей сайта отзывы о нем (о сайте). Приложение должно уметь принять от посетителя его отзыв и имя и правильно отобразить их на экране. Порядок сообщений - от более поздних к более ранним (последнее сообщение размещается вверху). Администрирование гостевой книги заключается в возможности комментирования автором сайта любого сообщения, а также возможности удаления сообщений. В качестве константы (кто хочет - может сделать этот параметр динамическим - "+1" балл) задается число сообщений отображаемых на одной странице "Гостевой книги". Необходимо дать пользователю возможность перемещаться между страницами книги.
  3. (3 балла) Графичекий интерфейс к таблице (базе данных). Приложение задает формат представления данных (текстовый файл или таблица), принимает их от пользователя и выводит данные в виде графика/гистограммы/круговой диаграммы и т.п. Пределов для фантазии (а следовательно, и дополнительным баллам) не существует :)
  4. (3 балла) Экспортируемая лента новостей. Имеем сайт, "генерирующий" новости (например, сидит девочка и "ручками" их вбивает). Новости (последние 5-10) отображаются на сайте. Ведется архив новостей с разбивкой по дням. Необходимо предусмотреть возможность экспорта новостей на любой другой сайт. Желающим выдается код, который необходимо разместить на своем сайте. После встраивания новости "мигрируют" на новый сайт, при этом, разумеется, есть ссылка на старый. Второй вариант - новости "сливаются" в файл установленного формата, доступный через HTTP (можно и через FTP, но про это на лекциях не рассказывается => будет больше баллов). Этот формат описывается + предлагаются базовые средства для его прочтения (через HTTP).
  5. (5 баллов) Форум. Приложение - "потомок" гостевой книги. Любой пользователь, пройдя обязательную регистрацию на форуме, может создавать новые темы для общения и участвовать в уже существующих. При этом форум должен обеспечивать наглядную "древовидную" иерархию обсуждаемых тем; при этом число уровней иерархии не ограничивается (допускаются ответы на ответ и т.д.). Как и в гостевой книге, более поздние темы размещаются "выше". В отношении ответов(обсуждений) действует обратное правило - они располагаются в прямом (временном порядке). Администратор форума долженбыть в состоянии получить о каждом пользователе всю его регистрационную информацию + IP адрес сессии, иметь возможность удалять любые сообщения (с поддеревьями) форума и пользователей форума (со всеми их сообщениями).
  6. (5 баллов) Чат. Кто не знает, что должен уметь делать чат - нечего и браться за данное задание :) Напоминаю, что необходимыми условиями являются: регистрация пользователя, работа в режиме реального времени, автоматическая защита от "бранных" слов (по ведущемуся администратором списку), автоматическое отключение пользователя от чата при неактивности в течение некоторого интервала времени (в интересах преподавателя рекомендуется сделать эту величину изменяемой - дабы не сидеть по 10 и более минут :) )
  7. (5 баллов) Рейтинг сайтов. Web-приложение, позволяющее выявить наиболее посещаемый сайт в течение дня/недели/месяца (можно продолжить список). Каждому сайту выдается некий код, который необходимо "встроить" на любую из страниц сайта. После этого каждое посещение пользователями рейтингуемого сайта отслеживается и динамически демонстрируется в основном рейтинге.
Для желяющих проявить фантазию пределов нет. Есть только требование :) согласуйте свои желания с требованиями преподавателя до начала сдачи л/р. В противном случае ее прием не гарантируется.
В этой лабораторной работе оценивается знание базовых технологий CGI и расширений ISAPI (если вы знаете другие серверные скриптовые технологии и сумеете продемонстрировать их в соответствии с требованиями - замечательно! Умножим баллы на 1.5) и умение применять их в конкретных web-приложениях. Ниже приведены технологии обязательные к выполнению.
  1. Создание консольного CGI приложения (для любителей Delphi/Visual Studio - никаких визуальных компонентов и т.п.) или ISAPI приложения в виде .DLL со стандартными точками входа.
  2. Возможность URL-кодирования/декодирования информации, поступающей от пользователя.
  3. Работа с файлами (может быть заменена на СУБД по желанию студента. Вообще, использование СУБД в любом Web-приложении только добавит вам баллов)
Задания на л/р те же, что и во 2-й работе. Что ж, посмотрим, как вы сумеете "портировать" свои работы с PHP :) Кол-во баллов за задания одинаковые. Правила и требования не изменяются.
Лабораторные работы сдаются в исходных текстах, размещенных на сервере class303 или на локальном компьютере.
Для доступа к FTP-серверу class303 устанавливаются единые для все студентов логин: is4 и пароль: is4. Регистры ОТЛИЧАЮТСЯ!
Студент самостоятельно заводит себе домашний каталог с произвольным именем (ex: pupkin) в папке /student/ FTP-сервера. Обращение к домашнему каталогу через протокол HTTP происходит так: http://class303/~pupkin/
Сохранность данных в домашних каталогах пользователей НЕ ГАРАНТИРУЕТСЯ!
НЕ ПРИНИМАЮТСЯ работы, размещенные на внешних хостингах, в т.ч. на внутренних и внешних серверах УлГУ.
Требования к оформлению работ
  1. Работа должна быть выполнена на уровне, соответствующем 4-му курсу ФИТТ УлГУ. Значимые имена переменных, отступы табуляции и т.п. не только улучшают "читабельность" работы, но и способствуют ее скорейшей сдаче :)
  2. Комментарии к исходному тексту работы добавляются студентом по мере необходимости.
  3. На ЗАГЛАВНОЙ странице каждой работы ОБЯЗАТЕЛЬНО наличие следующих атрибутов:
    • ФИО сдающего и его группа;
    • № л/р;
    • № ВАРИАНТА л/р;
    • Текст задания на л/р.
    Без вышеприведенных атрибутов работы приниматься НЕ БУДУТ.
Лабораторный практикум предназначен для оценки умения студентов пользоваться основными технологиями Интернет- и Web-программирования.
  1. Цикл работ включает в себя 3 обязательные работы и одну дополнительную (для желающих получить на экзамене оценку "отлично").
  2. Каждое задание оценивается в баллах от 1 до 6.
  3. Задание может быть оценено как большим, так и меньшим количеством баллов, в зависимости от степеней сложности работы и коэффициента ее выполнения.
  4. Студент может выбирать любое задание из предложенных. Однако, каждое задание будет засчитано только первым двум/трем сдавшим студентам. Всем остальным задание засчитывается с "половинным коэффициентом", т.е. задание, сложностью 4 балла будет оценено в 2 и т.д, если студент не подпадает под п.7 правил :)
  5. Для допуска к экзамену необходимо набрать определенное число баллов. От этого зависит максимальная оценка на экзамене (см. табл. 1).
  6. Лабораторная работа, не сданная в срок, может быть принята только после сдачи 3-й л/р, если останется время до начала сессии. По желанию студента просроченная л/р может быть принята в любое время. При этом максимальная оценка на экзамене становится равной трем и не может возрасти. В любое время допускается досдача дополнительных вариантов работы с целью улучшения рейтинга (общего количества баллов) студента.
  7. При попытке сдать чужое задание, из суммы баллов, набранной студентом, будет вычтена сложность сдаваемого задания. При этом сдаваемая работа, разумеется, не будет засчитана. !WARNING! Преподаватель знает большинство сайтов с бесплатными скриптами. "Свой" скрипт, списанный с www.webscript.ru или аналогичных будет вычислен. Тем не менее, приветствуется самостоятельное освоение информации из любых внешних источников. !END OF WARNING!
  8. Студент, не сдавший некоторое количество лабораторных работ может быть допущен к экзамену, при условии, что набранной им суммы хватает для сдачи экзамена на оценку "три" (см. табл. 1). При этом на экзамене он получает дополнительные вопросы по несданным работам.
  9. Студенты, претендующие на отличную оценку на экзамене, получают задания к дополнительной лабораторной работе на 10-й неделе обучения или после успешной сдачи 2-й л/р. Критерии приема дополнительной лабораторной работы устанавливаются преподавателем во время выдачи задания на работу.
  10. За лабораторную работу в 4 балла может быть засчитан экзамен, сданный на www.brainbench.com в соответствии с правилами.
  11. Лабораторная работа сдается в браузере MS IE 4+, если иное не оговаривается особо. Устанавливаются ЕДИНЫЕ для всех студентов технические условия выполнения работ.

Таблица 1
Оценка Мин. кол-во баллов Примечание
3 9 (девять)  
4 15 (пятнадцать) л/р должны быть сданы в срок
5 24(двадцать четыре) см. прим. к оц. 4, + доп. л/р

Сроки приема л/р:
1 работа: 5 неделя (10-14 марта)
2 работа: 10 неделя (14-18 апреля)
3 работа: 15 неделя (19-23 мая)

P.S. Преподаватель тоже человек, поэтому он вправе облегчать/усложнять данные правила в зависимости от обстоятельств, в т.ч. в индивидуальном порядке. :)

Необходимая информация

Лекции по этому курсу (3331KB)
Установка Apache + Mysql + Php
Denwer - Джентльменский набор Web-разработчика

В связи с тем, что Антон не сможет прочесть вам лекцию по ISAPI. И в связи с тем, что мне хотелось бы увидеть на ISAPI хоть пару лабораторных, от "advanced" студентов. Я выкладываю пример работы с этой технологией. Коментарии присутствуют :) Изучайте, пишите, сдавайте. Да, для тех кто еще не понял - сданные лабораторные на ISAPI, ох, как зачтутся вам на экзамене.
wikipedia.org - cамая крупная бесплатная on-line энциклопедия
Правила деловой переписки по e-mail
Для начала, надо обязательно прочесть это: "Элементарные правила деловой переписки по e-mail". Теперь пару слов от меня. Хочу поговорить о вложениях, естественно разговор пойдет о ваших лабораторных.
  1. Код л/р должен быть запакован. Это понимают все. Но, на всякий случай, повторюсь: архив занимает меньше места и вытаскивать 50 вложений из письма гораздо сложнее, чем 1 файл. Однако с выбором архиватора и типом запаковки возникают проблемы. Первое, никогда не высылайте самораспаковывающийся архив. В статье об этом ясно сказано: "не вкладывайте в письма EXE, PIF, BAT, COM, CMD, SCR", мой клиент срубает такие письма еще на подходе. Второе, не каждый архиватор подходит для упаковки вашего кода. Не надо мне слать RAR, 7z и другие подобные архивы, на некоторых платформах я чисто физически не могу их распаковать. Стандартом запаковки считается ZIP, или если вы хотите сильно ужать код, то используйте комбинацию TAR + GZip (в этом случае можно указывать расширение *.tgz).
  2. Старайтесь максимально уменьшить размер письма. У меня не безлимит, за траффик я плачу денюшку и я не хочу тратить ее на всякую бессмыслицу.
  3. Если вы высылаете EXE-файл, то высылайте только Release версию, без отладочной информации. Более того, у вас должна быть серьезная причина для такого шага. Высылая откомпилированную версию программы вместе с исходниками, вы тем самым показываете, что сомневаетесь в умении преподавателя пользоваться компилятором, IDE и прочим софтом.
  4. В проектах, генерируемых MSVS очень много "лишних" файлов, которые могут быть заново сгенерированы по исходному коду программы. Не стоит их отправлять, т.к. именно они являются основной "массой" ваших л/р. Высылать надо только файлы с расширениями: *.c, *.cpp, *.h, *.hpp, *.vcproj, *.sln. Так же высылается все, что относится к ресурсам: *.bmp, *.ico, *.cur, *.manifest, *.rc, *.rc2. Никогда не отправляйте содержимое папок Release и Debug. Никогда не отправляйте файл *.ncb. Без особой необходимости (а если вы не понимаете что это, то никогда) не отправляйте файл *.aps. Выкладываю небольшой батничек, который очистит ваши проекты от лишних файлов.
everfall.com - код постить сюда. (highlighting by geshi and winnie colorizer)
Генерация странички в браузере Safari
Для студентов защищающих дипломные работы, связанные с интернет-сайтами. Очень часто вы в презентации вставляете скриншоты своих страничек. Данный раздел поможет вам правильно оформить эти скриншоты. Я не буду вдаваться в тонкости дизайна и эстетики, просто советую посмотреть, как это делают «большие дяди» (например, Артем Лебедев). Обратили внимание? В качестве браузера используется Safari. Есть 2 варианта сделать правильный скриншот: установить браузер или воспользоваться сторонними утилитами. С установкой браузера не все гладко: сам процесс установки ради пары шотов, скриншот будет ограничен размером экрана по вертикали. Поэтому пойдем по второму пути.
  1. Сначала идем на browsrcamp.com и вводим адрес вашей странички, например yandex.ru :) Можно настроить дополнительные параметры: ширину страницы и формат (я советую выбрать формат PNG).
  2. Итог – картинка. Копируем ее адрес.
  3. Теперь идем на makepreview.ru и вставляем адрес картинки. Ставим галочку на «URL сайта, картинки». Можно настроить дополнительные параметры (я советую изменить только параметр URL).
  4. Итог – готовая страничка в ее полный размер. Вставляйте в презентацию и маленький бонус за правильное оформление вам гарантирован.
Программист в большой компании. Автор: Дмитрий Долгов.
Интервью глазами пострадавшего. Автор: Борис Баткин.
Краткая история кибернетики (конспект лекций для Светы) © 1994, А.Соловьев
Много, много книжек по математике
Решения задач по физике из учебника Иродова