Долго думал как назвать этот пост в итоге назвал как пришлось.
О чем же я хочу рассказать
Сей пост о программе.
Очень маленькой программе, которую я написал в первую очередь для себя.
О маленьком скриншотере, умеющем интегрировать с Dropbox.
Но я не хочу ничего пиарить, скриншоттеров полно, полно скриншоттеров намного лучше моего.
Цель этого поста, разобрать ошибки.
Об идее
Программист должен решать проблемы не только общественные, но и свои.
На работе мы постоянно пользуемся замечательной программой для снятия скриншотов gyazo.
Наша версия gyazo заливает скриншоты на внутренний сервер компании и далее я уже никак не могу ими управлять.
Мне же хотелось иметь возможность управлять временем жизни скриншотов и при этом так же просто шарить их по url как это умеет gyazo, а т.к. я активно использую dropbox с ним и решено было дружить.
Ошибка номер 1: Невнимательность
Cкриншоттер будет заливать скрины прямо на сервер дропбокса.
Удобно, т.к. я могу установить его на комп, на котором не установлен dropbox client, при этом все скрины будут попадать в нужную папку в dropbox'е.
Скачал DropNet и через день был готов первый вариант скриншоттера. Точная копия Gyazo, но интегрированая в Dropbox.
Все бы ничего, если бы не вот это ограничение dropbox'а.
Программа прекрасно работала с AppKey для разработчиков, но не прошла аппрува =(
Ошибка номер 2: Усложнение
Я понял, что проблему с dropbox надо решать с другого конца.
Тогда я убрал форму авторизации и сделал в настройках поле для ввода userId пользователя.
Пользователь должен был скопировать публичный линк и вставить его в это поле.
Я выдирал из линка userId и мог формировать public link.
Решение корявое, сложное и отталкивающее пользователей своей кривизной.
Ошибка номер 3: Зависимость от стереотипов
Хочу скриншотить регион, окно или весь экран.
Изучив разные сриншотеры, решил сделать как везде, три хоткея и окошко-хелпер с кнопками для каждого вида скриншота.
Решение дурацкое. Нужно лишний раз подумать какой тип скриншота тебе нужен и выбрать один из вариантов.
Еще одна ошибка
Хочу уметь делать скриншоты меню и тултипов.
Большинство скриншотеров работают по такому принципу:
- жмем хоткей
- выбираем что сфотографировать
- фотографируем
Проблема в том, что на этапе номер 2 у нас отваливает возможность отскриншотить меню и тултип, т.к. они пропадут из-за потери фокуса =(
Я решил ввести задержку в секундах, до того момента как произойдет снимок экрана. Т.е. пользователь должен нажать что-то типа кнопки «Отложенный скриншот» и за короткое время привести рабочую область в нужное ему состояние.
Решение неверное. А вдруг пользователь не успеет? А вдруг сделает все очень быстро и ем придется ждать пока программа сделает скриншот? Да, это всего-лишь несколько секунд, но ведь будет раздражать если надо сфоткать подряд несколько тултипов.
Ошибка N: нетерпеливость
Хочу чтобы публичный скриншот автоматом открывался в браузере
Ошибка заключалась в том, что после сохранения я сразу открывал url вбраузере и пользователь лицезрел Ошибку 404, т.к. dropbox client еще не успевал закачать файл на сервер.
Я уже устал писать об ошибках
Хочу рассказать о найденных решениях.
- Интеграция с Dropbox только на компьютерах с установленным dropbox client. По сути я записываю файл на диск в MyDropbox/Public/ и жду когда он загрузится на сервер
- Не надо требовать UserId от пользователя. Его можно получить через WinAPI, вызвав copy public link в контекстном меню публичного файла
- Нет окна-хелпера с тремя кнопками. Один хоткей. Можно сфотографировать область экрана, растянув регион, или сфотографировать окно, кликнув в него.
- Скриншот делается при нажатии хоткея. Все меню и тултипы, присутствовавшие в этот момент на экране, фотографируются. Далее вам нужно выбрать требуемую область экрана или кликнуть в нужное окно.
- После сохранения срикншота на диск, жду его загрузки на сервер и только потом открываю в браузере.
В программе есть еще несколько удобностей, типа просмотра списка недавно сделанных скриншотов и возможность поменять базовые настройки.
Тем кто дочитал
Проект решил делать открытым, т.ч. все могут узреть мои косяки в коде =)
Ссылка на страничку проекта на codeplex
На данный момент распространяется в виде ClickOnce приложения, но могу сделать и инсталлер.
P.S.
Большое спасибо моим коллегам за интересные идеи и помощь в тестировании.
Наверняка в CloudShot есть ошибки, не пинайте за них сильно, а лучше отпишите и я их по мере возможности исправлю ;)