«Программирование» электронных таблиц - это тип программирования потока данных.
У нас есть языковая проблема, мы не должны называть это «программированием», потому что это гораздо меньше, чем мы называем программированием, но это определенно больше, чем ввод данных в программу.
Программирование потока данных представляет собой архитектуру и дисциплину, где приложение представляет собой сеть независимых модулей, они отправляют сообщения (данные) друг другу. Эта модель не применима к каждой проблеме, только для тех, где есть исходные данные или поток (или их больше), который идет через сеть обработки и производит выходные данные / потоки. Смотрите список ниже.
Программирование потока данных имеет несколько типов, давайте рассмотрим некоторые из них:
- Электронная таблица: входные числа обрабатываются по формулам, затем результаты и графики. Особые характеристики: время обработки - «однократный», при изменении входного значения (компонента) соответствующая часть графика обработки перезапускается и выдает результат.
- Канал Unix: оболочка запускает несколько программ и связывает stdout-> stdin. Особые характеристики: разрешено только связывание в стиле конвейера, график представляет собой одну очередь.
- Синхронизированное выполнение: есть часы, которые запускают обработку кадра или выборки с заданной частотой. Каждый компонент запускается один раз в такт. Видео и аудио системы обработки примеров, они работают с заданной частотой кадров / дискретизации.
- Асинхронное выполнение: график находится в режиме ожидания, пока не произойдет внешнее событие. Затем он обрабатывает событие, генерирует некоторый вывод (или нет) и переходит в состояние ожидания.
Возвращаясь к вашему вопросу: я думаю, что да, это хорошая идея, чтобы опубликовать приложение потока данных как отдельное приложение. Я уже сделал это. Дважды .
Я и мой друг создали прототип системы DF для домашней автоматизации. У нас нет редактора графиков, поэтому приложение не может быть отредактировано пользователем, некоторые параметры хранятся в файле конфигурации, но не более того. У нас есть язык сценариев DF, который «компилируется» в код C ++ (список создания компонентов и определений сообщений), который компилируется в собственный исполняемый файл. Модули представляют собой классы C ++ (другие классы, просто чтобы получить некоторую информацию о нашей системе: Message, Dispathcer, Component (abstract), Port (abstract), ConsumerPort, ProducerPort).
Кроме того, мы были поражены преимуществами системы DF: мы сделали приложение для последовательного анализатора в течение 2 минут, или мы сделали тестовую программу на месте , которая мигает лампами один за другим (документации не было) на идентификаторах оборудования). Мы создали компоненты MIDI и джойстика просто для удовольствия, я также создал для них легкий орган (см. Http://homeaut.com/under_construction/ ).
Я вижу только одну трудность в случае электронных таблиц: поскольку каждое число и формула (потенциально: каждая ячейка) является компонентом, ваш график не является окончательным. Когда вы добавляете строку в ваше простое приложение sum (), это означает, что график потока данных изменяется. Итак, вы должны «перепрограммировать» график во время выполнения, или мы должны назвать его «метапрограммирование». В Excel макрос выполнял бы эту работу, но тогда мы теряли бы чистоту потока данных.
У меня есть не слишком плохое, но не идеальное решение. Я сделал электронную таблицу, приложение AJAX с бэкэндом PHP. Вертикальная ось - время (дни), линии - компоненты. Существуют такие компоненты, как ввод (строка может редактироваться пользователем), вертикальное среднее, горизонтальное среднее / сумма и некоторые статистические вычисления по конкретным областям. Есть только одна проблема: это «одномерный». Пока я хочу только сумму, среднее и прочее, я могу добавлять новые строки и создавать компонент, который вычисляет материал. Но есть сильное ограничение: столбцы всегда дни (я сделал недельные и месячные "просмотры", которые отображают ежедневные данные в виде суммы / среднего, но они все еще одномерные). Я не могу показать это, это совместная работа, для запуска которой требуется 7/24 серверная задача PHP, она не поддерживается моим хост-провайдером.
Таким образом, моя модель (которую лучше всего описать как «дни по горизонтали») не может справиться с другими проблемами.
У меня есть идея, как решить эту проблему: вкладки .
Когда вы застряли в Excel и вам нужно создать другую таблицу, вы можете использовать отдельную область на той же вкладке или открыть другую вкладку. Кроме того, ссылки между вкладками неудобны, я предпочитаю первый метод. Я думаю, что вкладки должны отображаться на одном экране, как неперекрывающиеся окна.
Каждая таблица должна иметь свою растущую ось: вертикальную, горизонтальную или фиксированную. Вертикальные растущие таблицы имеют линейные компоненты (как моя дневная электронная таблица), где все столбцы имеют «одинаковую» формулу, горизонтальные компоненты имеют компоненты столбцов, а таблицы фиксированного размера похожи на любую электронную таблицу.
Таким образом, когда пользователь добавляет новую строку / столбец, новая строка / столбец будет иметь ту же формулу.
Кроме того, в электронных таблицах я ненавижу то, что мне нужно копировать те же самые формулы 1000 раз, если у меня есть 1000 строк. Это источник ошибок (сохранение старой версии формулы в несколько строк), трата памяти (хранение той же формулы 1000x).
Возможно, я ошибаюсь, и в этой модели есть концептуальные ошибки, но я надеюсь, что это заставило задуматься.