О составлении расписаний для учебных заведений

Товарищ подошёл и спросил: есть одна веб-ориентированная разработка касательно составления расписаний – можно ли её продать и как.

Мысль первая: продавать на условиях аренды, икс денег в месяц за аккаунт.

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

Мысль третья: институты, школы и расписания не в этом веке придуманы, и каждый год появляются новые попытки автоматизировать этот  “бизнес-процесс”. Подавляющее большинство из них скорее являются или шлаком, или результатом собственной “тренировки”.

В тему: В одной из статей наткнулся на мысль, о том что “изобретение велосипеда” просто необходимо для собственного развития. Использовать фреймворк, библиотеку, базу данных, готовый продукт — легко и продуктивно, но не даёт глубокого опыта. А вот написать своё – хороший опыт.

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

http://www.rusdoc.ru/articles/izobretajte_velosiped_chasto/19605/

И моя мысль понеслась дальше.

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

Есть у меня пара любимых игрушек – Шерлок и Эйнштейн. Механизм и логика принципиально одинаковые, различия – в части геймплея и настроек.

Головоломка Эйнштейна

И задача составления расписания лежит примерно в той же плоскости. Начальные данные получить можно: карта, отправные точки, наборы, подсказки и приоритеты. Карта имеет другую модель (посложнее квадратной матрицы); наборы, подсказки и приоритеты понавороченней; отсутствие однозначного решения – вот основные отличия реальной жизни от простой игры.

На свежую мысль я даже для себя прикинул, что в рамках Головоломки Эйнштейна запрограммировать случайную начальную раскладку, однозначно и гарантированно решающуюся, будет задачкой большей сложности, чем её автоматическое решение.

И размышления вокруг этого стали рождаться в прообраз технического задания на такую систему, которую при этом можно ещё и попытаться продать.

Задачка по программированию на любом языке

Просто к слову вспомнили задачку для начинающих.

Есть переменные A и B – целые числа.

Требуется поменять их местами, не прибегая к помощи других переменных и специальных методов. Перекладываю на язык ABAP:

Задачка по обмену значениями

Вот и требуется вписать в серединку несколько строчек.

Ответ давать и не буду, задачка решается и в уме.

“Порадовали” переводчики SAP

Вообще перевод на русский язык в системе оставляет желать много лучшего. Много непереведённого, нет контекстной справки и описания ошибок, много орфографических ошибок и прочее.

Как и в любой около-денежной системе в SAP есть справочник валют.

Сделал небольшой отчётик по курсам валют:

Курсы валют

Пару минут втуплял, что же за такая непредусмотренная колонка “Всего”, и откуда в ней ещё какое-то маленькое значение.

 

(далее…)

Использование двоеточий и запятых в ABAP

Вообще подход к двоеточиям и запятым в ABAP достаточно странный (если сравнивать с другими языками программирования). И я, как правило, использовал его или для определения данных DATA, или в операторах write.

Но вот сегодня ковырялся в чужих исходниках и обнаружил код с двоеточиями и запятыми, о котором просто раньше не догадывался.

Пример повтояющегося perform

Первый, второй и третий блоки выполняют одинаковое действие.

Трассировка транзакций и поиск провалов производительности

Если вдруг какая-то транзакция (отчёт) сильно притормаживает или даже виснет, то далеко не каждый администратор, консультант или продвинутый пользователь способен разобраться в этой проблеме.

С одной стороны администратор – это человек которому ничего не говорят транзакции и объекты бизнес-процессов, а с другой стороны консультанты и пользователи ничего не смыслят в базисе и программировании.

Есть несколько разных способов, пригодных для решения этой проблемы.

Самое главное – это выбрать достаточно точные шаги по многоразовому воспроизведению проблемы.

Один из основных – это динамический анализ (транзакция SE30).

(далее…)

Индикатор прогресса при обработке больших объёмов

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

Пользователь начинает переживать, а не зависла ли программа, а также сколько времени ещё ждать. Иногда начинает бояться, что программа упадёт с ошибкой по таймауту.

Вот как раз для этих целей и используются индикаторы прогресса. В SAP для этого обычно используется статусная строка с закрашиваемой иконкой секундомера.

Этот индикатор можно вызвать и самому – функциональный модуль SAPGUI_PROGRESS_INDICATOR, в котором нет ничего сложного – передаётся рассчитанный процент и текст.

Маленькая тонкость: если вызывать его слишком часто, то:

  • Обновляется некрасиво и неразборчиво
  • Увеличивается обмен информацией между клиентом и сервером

(далее…)

Определение расширений BAPI

Переодически забываю этот метод. Запишу себе в блокнотик, чтоб не забывать.

Транзакция: se80

Класс: CL_EXITHANDLER

Метод: GET_INSTANCE

Точка прерывания: на первой строке CALL METHOD cl_exithandler=>get_class_name_by_interface

Имя искомого BADI: в переменной exit_name

Ставится точка прерывания и запускается нужная транзакция. В переменной exit_name будут всплывать имена подключаемых BADI.

Забавное использование стратегии деривации – в качестве хранилища данных

Транзакция FMDERIVE может использоваться как хранилище данных настроек.

    В первую очередь для того, чтобы не плодить Z-таблицы. Причем можно использовать и в целях не связанных с модулем FM.

В качестве минусов, конечно, можно отметить:

  • Нецелевое использование функциональности
  • Сложность распределения прав

В ней очень удобно хранить некоторые данные – полей в структуре достаточно много, разрешены диапазоны, сроки действия, выстроена система переноса.

Примеры использования:

  • Соответствие МВЗ и счетов затрат
  • Список допустимых комбинаций Счет + МВЗ + Заказ
    Для этого заходим в транзакцию FMDERIVE и создаём там новую стратегию:

(далее…)

Разбор вложенных структур

Проблемка и решение

Есть одна достаточно полезная подпрограмма для чтения данных из Excel. Даёшь ей файл, параметры и внутреннюю таблицу. И получаешь заполненную внутреннюю таблицу.

Там в кишках слепок таблицы Excel перекладывается в целевую таблицу.

image

Дальше перекладываются значения в зависимости от типов колонок.

Проблемы начались после того, как я в целевой таблице стал использовать вложенные структуры.

image

Соответственно ASSIGN COMPONENT стал вести не на целевое поле, а на структуру со всеми вытекающими неприятными последствиями.

И вот сделал такую переборку внутренних вложенных структур:

image

Тип “u” это как раз вложенные структуры (плоские).

Ну решение простое, можно конечно ещё извернуться с рекурсией и типом “v” (это уже посложнее – deep structure). Но это пока не требуется.

Вот так и использование DESCRIBE FIELD помогает.

Между делом

Вообще использование вложенных структур сильно может помочь. Основные преимущества подхода:

  • Возможность сравнения подструктур
  • Возможность использование move-corresponding в подструктурах

В моём случае подструктуры – это блоки дебета и кредита бухгалтерской проводки.

Можно сильно сократить объём кода и его понятность в некоторых местах, например:

image

Может также использоваться для пар старых-новых значений, или для сравнения данных (источник-назначение).

Курт Воннегут — Колыбель для кошки

«Мне представляется отвратительной и комичной присущая нашей культуре особенность ждать от любого человека, что он всегда в состоянии разрешить все свои проблемы. Имеется в виду, что проблема всегда может быть решена, если ты приложишь еще чуть больше усилий, чуть больше борьбы. Это настолько не соответствует истине, что мне хочется рыдать или смеяться. Опять же в соответствии с культурной традицией американцы не имеют права плакать. Поэтому я не много плачу — но очень много смеюсь.»

Курт Воннегут

Действительно хорошая книга. Очень хорошая книга. Год 1963.

Юмор?

Воннегут не пишет добрые книги. Трагизм, сарказм, горькая ирония. Некоторые называют это юмором. Впрочем, да – сарказм является отдельной веткой юмора в общем понимании. Главное, чтобы вас это не путало.

Цитатность

Не каждую книгу можно растащить на цитаты. Но эта – одна из таких. Вот тематическая подборка:

Американцы без конца ищут любви к себе в таких местах, где ее быть не может, и в таких формах, какие она никогда не может принять. Должно быть, корни этого явления надо искать далеко в прошлом.

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

Проводя свою внешнюю политику, американцы скорее должны исходить из реально существующей ненависти к ним, а не из несуществующей любви.

Некоторые цитаты заставляют копнуть. Например парафраз евангельской фразы

Не обращай внимания на Кесаря. Кесарь не имеет ни малейшего понятия о том, что на самом деле происходит вокруг.

приводит к раздумьям вокруг оригинала

Воздайте Кесарево Кесарю и Божье Богу

А речь шла о податях и динариях. И портретах Кесаря на динариях. Вот тебе, бабушка, и портрет Франклина.

О переводе

Сам текст, я так полагаю, был не сильно труден для перевода. Космополитичен и не поэтичен. Впрочем стихи там тоже есть (так называемые калипсо) – стихи бездарные, но и задуманы таковыми. Но меня зацепил один фрагмент.

Автор демонстрирует местное наречие Сан-Лоренцо на примере известного стиха:

Шалтай-Болтай сидел на стене,
Шалтай-Болтай свалился во сне,
И вся королевская конница,
И вся королевская рать
Не может Шалтая, не может Болтая собрать.

Саратая-Боротая сидера на сатене,
Саратая-Боротая сварирася во сене,
И кося короревская конниса,
И вся короревская рати
Не могозет Саратая, не могозет Боротая соборати.

Ну а в английском переводе это совсем другой известный стих – не известный русскому читателю.

Twinkle, twinkle, little star,
How I wonder what you are,
Shining in the sky so bright,
Like a tea tray in the night,
Twinkle, twinkle, little star,
How I wonder what you are.

Tsvent-kiul, tsvent-kiul, lett-pool store,
Ko jy tsvantoor bat voo yore.
Put-shinik on lo shee zo brath,
Kam oon teetron on lo nath,
Tsvent-kiul, tsvent-kiul, lett-poll store, 
Ko jy tsvantoor bat voo yore.

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

Самый главный диссонанс в переводе – это фонетические отличия прямо переведённых неологизмов и данного стиха. Такой диссонанс в оригинале отсутствует. Лаборатория фантастики говорит о двух-трех переводах – у меня в наличии только один.

Вложенность

Здесь можно вспомнить и Стругацких и Булгакова.

Приём “Книга в книге” – не самый лёгкий писательский инструмент. Умение пользоваться таким инструментом переводит [любого?] писателя на другой уровень. Это не медаль, но разряд. Не победа, но мастер-класс.

И здесь в книге идёт речь о книгах. Здесь есть и книга, которую пишет главный герой, и стихи Боконона, и Путеводитель по Сан-Лоренцо…

Религия и неологизмы

В книге изложено вероучение Боконона и обильно используется причастная терминология: “карасс”, “вампитер” и другие.  Учение достаточно стройное для выстроения самой книги вокруг него. И имеет некоторый смысл и вне книги.

Это ещё и на Википедии имеется – добро пожаловать!

Многократность

Книга безусловно пригодна к перепрочтению. Не так много книг, которые можно  перечитать. И каждый следующий раз будет отличаться от предыдущего.

Персонажи, Сюжет, Двигатель

О да! И это всё тут найдётся.

PS

В тудузник – посмотреть фильм Бойня номер пять. И может быть Завтрак чемпионов.

PPS

А вот и собственно ожидаемая экранизация – Колыбель для кошки. Повествование перенесено в далёкое будущее. Известны сценаристы и продюсеры. Получается, что есть только сценарий и намерения его снять. Ждём-с!

PPPS

Аудиокнига сделана в очень приличном качестве.