Не так я представлял себя в 25 лет. Всего 2 года назад я не имел никакого отношения ни к космонавтике, ни к астрономии, ни к оптике, был упертым радиотехником, мечтал повторить опыты Теслы по беспроводной передаче энергии. Специально ради этого поступил на базовую кафедру при ОАО "Радиофизика", где занимаются в основном фазированными антенными решетками, чтобы познакомится с теорией и практикой антенных систем и понять, насколько такие вещи физически реализуемы.
Поэтому я бы не поверил, если бы кто сказал, что я буду заниматься расшифровкой данных, переданных с МКС по лазерному лучу, моделировать прохождение этих лучей через атмосферу, пересчитывать данные звездного каталога под спектральную чувствительность КМОП-матрицы, писать алгоритм автономной ориентации системы лазерной связи по показаниям оптико-волоконных гироскопов и другими подобными вещами! И надо сказать, не смел и мечтать.
Даже название должности мне очень нравится - "Инженер-исследователь". Да, всегда хотел быть именно им! Каждый день заниматься чем-то новым, не погружаться в рутину однообразных действий, но в то же время видеть результат своей работы "в железе".
А вчера сбылась еще одна моя мечта, очень глупая и детская.
Я научился делать кнопку undo в своих программах. Отмену действий на любое число шагов назад. Ну и redo для кучи, и список последних действий. Меня всегда завораживала эта кнопка - с виду все так просто, но стоило попытаться понять, как это сделать самому, да еще чтобы памяти не отжирало выше крыши, храня каждое состояние документа, как я надолго впадал в ступор.
Читал злобную книжку, "паттерны проектирования", упорно на ней засыпал, а вчера решил наконец-то попробовать реализовать undo в своей graph2txt - и сделал все за полдня! Ну, не совсем все - пока отменить можно добавление точек на график, стирание всей кривой, изменение координат, переключение с линейной шкалы на логарифмическую и замену друг на друга осей X и Y. Но принцип уже ясен, и изменений понадобилось внести на удивление мало.
Такие разные команды - добавить точку и стереть вообще все данные, а механизм действия один и тот же. Только в одном случае запоминается лишь, куда была добавлена точка - и пока в списке последних действий эта команда есть, ее можно отменить - точка будет удалена. А во втором - как только стирание выполняется, в память команды (команда - это отдельный класс, производная от абстрактного класса, в котором определены только процедуры execute и undo) заносятся эти самые стертые данные, а при нажатии undo - возращаются на место.
Вот новая версия, можно поиграться :) Конечно, над этой программкой еще работать и работать.
Научиться бы еще делать undo в реальной жизни...