Alek�ei Matiu�hkin

сделано с умом



Там, за краем экрана

Friday, 30 Nov 2001 Tags: 2001tech

Крутится ли Animated GIF?

Самый Главный Вопрос, Волнующий Всю Прогрессивную Сетевую Общественность, известный также под псевдонимом «тайна анимированного GIF»,был сформулирован достаточно давно: «что происходит с анимированным GIF-файлом, когда посредством использования полосы прокрутки окна браузера оный перемещается за границы экрана?». Продолжает ли бедолага свое анимированное действо, или же, наоборот, с осознанием выполненного долга, устраивается на заслуженный отдых? Наблюдение эксперимента, как известно, меняетход самого эксперимента, поэтому искусственное создание «анимированных секундомеров», сменяющих картинку посекундно, не может и на йоту приблизить нас к разгадке. Вопрос этот порождает многочисленные флеймы из серии «browser war», сводящиеся к неоспоримым утверждениям о превосходстве того или иного браузера («а в опере не крутится!»), теософские корни его очевидны даже совершеннейшему профану в мире высоких технологий. Однозначного ответа на него нет, да и быть не может; есть сторонники различных точек зрения, не более того. К счастью, кажется очевидной и гипотетическая возможность дожить до глубокой старости в радости и гармонии, так и не познав тайны анимированных GIF'ов.

На самом деле, проблема гораздо глубже, чем кажется на первый взгляд, и к тому же, имеет важные проекции на повседневную жизнь программистов. То, что остается «за кадром», требует не менее тщательного исследования, чем то, что видно невооруженным глазом; основные ошибки проектирования связаны как раз с невидимым (за границами экрана), неосязаемым (нет кнопки, чтобы нажать), без цвета и запаха (нет строки состояния), зачастую — живущим самостоятельной жизнью (in separate thread). Самый очевидный пример — соединения с базами данных. Вы когда-нибудь задумывались о том, что происходит с вашим сервером, скрипящим в изнеможении жестким диском в соседней комнате под восьмым Оракулом, когда нерадивый, но продвинутый пользователь Вася убивает всемогущим контрол-альт-делитом «зависшее» по его мнению приложение, которое находится в самой середине процесса передачи данных на сервер?

Инкубационный период

Задумывались? Отлично. Сверим наши часы.

Вася только что заполнил огромную форму, внес данные клиента, реквизиты его банка (другая таблица, ага), дебет, кредит и прочую только ему, Васе, понятную абракадабру. Потом нажал кнопку «Save» (вы ведь все только собираетесь локализовать интерфейс, не так ли? Да и к чему лишние заморочки, если Вася и так справляется?.. Но сейчас не об этом). Затем Вася покурил, выпил кофе и вернулся к своему компьютеру. На экране которого увидел песочные часики. Справедливо полагая, что базу писал какой-то дурак, и даже в сотый раз проговорив эту незамысловатую сентенцию вслух, Вася нажимает «Cancel» (потому что он слышал, что любое нормальное приложение обязано реагировать на эту кнопку посредством прерывания выполнения текущей операции), а вслед за ним — и всесильный Ctrl+Alt+Del. Ну да, сейчас ни одному нормальному человеку и в голову не должно придти что-то прерывать из интерфейса, ведь ребята из Microsoft подарили нам эту чудесную комбинацию из трех ...клавиш, способную остановить и коня на скаку. И вот Вася, погоревав долю секунды о безвозвратно утерянных данных, убил интерфейсное окно. Немедленно перезапустил программу, со скоростью первоклассной машинистки повторил ввод, и снова нажал кнопку «Save». Вася очень спешит, потому что у него есть шеф, которому невозможно объяснить про «проблемы с апдейтом СУБД». А теперь, внимание, вопрос.

Что скажет на эту повторную попытку занесения данных в базу — сервер? Особенно, если он был написан в расчете на то, что в пределах слышимости никогда не может оказаться женщин и детей? А что ему ответит несчастный Вася?

Многие программисты, имевшие дело с Paradox и правившие чужие кривые сохранёнки на Oracle часто пишут в резюме: владею серверными базами данных. Я позволю себе оспорить справедливость этого тезиса.

Как себя ведет СУБД при попытке начать транзакцию, если другая транзакция уже открыта? Что происходит по тайм-ауту с открытой транзакцией, и каково значение этого самого тайм-аута в секундах? Что происходит с открытой транзакцией при сбое сервера? При аварийном выключении сервера?

Далее. В каком состоянии ваше интерфейсное приложение оставляет сервер при аварийном выходе? Дает ли оно возможность прервать длительную транзакцию? Отличает ли длительную транзакцию, от поставленной в очередь на выполнение (если сервер это позволяет)? Пользуется ли расширенной информацией о причине отказасервера (типа, 'Duplicate Unique Key'), или заставляет пользователя вводить всю информацию заново, оповестив его радостным нелокализованным «aborted»?

Вот очень неполный перечень вопросов, которые необходимо задать себе,чтобы выяснить, а действительно ли принципы работы сервера БД — прозрачныи ясны?

I’m on. Ain’t everybody so?

Вообще говоря, пример с серверной базой данных — далеко не единственный. Приложения работают не в вакууме. Есть операционная система, есть другие приложения, например, чужие сервера, интернет, и много чего еще. Если пользователь закрыл ваше приложение, он ожидает полной потери связи с внешним миром. Закрытое интернет соединение (если оно было открыто вашей программой, разумеется), освобожденные ресурсы, закрытые подключения к базе данных... А не только куски памяти, как часто принято полагать. Куски памяти за вас как раз освободит операционная система.

Освобождайте ресурсы, и вам воздастся. Дайте возможность прервать любую сколько-нибудь длительную операцию легитимным способом (без пресловутых трех клавиш). Убедитесь, что все в порядке (есть интернет, доступен сервер базы данных и необходимые библиотеки). Если чего-то не хватает — запуститесь в усеченном режиме, даже если это напрочь лишено смысла с точки зрения работоспособности приложения. Если для вас эти тезисы в новинку, почитайте Лу Гринзоу.

Только если программист, будучи разбужен ночью, в состоянии ответить на вопрос: «что произойдет с сервером БД, если клиент отключится в процессе транзакции посредством кнопки Power на фронтальной панели своего компьютера?» — он создаст работоспособное приложение.

С завтрашнего же дня буду следовать этим заповедям.

Please leave your browsers disconnected.


  ¦