Эволюция портабельности
February 10th, 2010 Begemot Posted in Шаровароварение
Давно собирался написать про свой опыт с выпуском портабельных версий? Сегодня прочел пост ночного программиста – Portable-версия – легко и непринужденно и вижу, что народ повторяет мои ошибки, а значит откладывать дальше нельзя – пора писать 🙂 Причем технические детали реализации я опущу (банально же), а опишу только грабли в подходе к решению проблемы, на которые я натыкался. Для того, чтобы вы могли сразу переходить на пятый уровень:)
Итак у меня было пять ступеней эволюции:
0. Просто программа, без поддержки переносной версии. Народ жаловался и требовал гибкости. Ведь действительно всегда иметь с собой свои быстрые заметки весьма удобно…
1. Параметр командной строки, который переключал приложение в портабельный режим. Я написал об этом в хелпе, а потом, всем кто спрашивал отвечал как использовать параметры командной строки в саппорте – благо быстрая вставка готовых ответов, весьма облегчает это занятие. Народ жаловался, на неудобство.
2. Я сообразил, что можно сделать и положить в дистрибутив батник – который будет запускать программу с параметром, что-то типа _RUN_Clipdiary_Portable.bat. На неудобство стали жаловаться меньше, на мелькающее черное (консольное) окно и периодические ошибки (народ постоянно запускал exe вместо батника). Продвинутые даже компилили батник в ехешник.
rem instruction for user
start clipdiary.exe –portable
3. Кто-то меня надоумил что избежать последней проблемы можно положив все файлы программы в подпапку APP, а рядом с ней батник который будет запускать ехе. И так типа поступают многие портабельные программы. Правильный текст бат файла
rem instruction for user
@echo off
cls
title Clipdiary Portable launcher
start /D"%~p0App" App\clipdiary.exe –portable
4. Через месяц, после того как я перевел все свои портабельные дистрибутивы на использование этого механизма, я вдруг придумал более лучший подход. Который позволяет избавится как от случайного запуска exe вместо бат файла, так и от мелькания консольного окна, которое раздражает пользователя. Теперь достаточно просто добавить –portable в имя программы – и все будет в шоколаде. Разумеется я при старте анализирую имя ехе и перехожу в портабельный режим если что. Пользователи пока что довольны.
Видите, все гениальное просто 🙂
Кстати, у нас тут недавно разгорелся спор с одним человеком какой термин использовать – переносимая, портабельная или портативная. Имхо, все они звучат криво по-русски, но ведь что-то использовать надо. Вот что говорит гугл
Results 1 – 10 of about 52,600 for "портативная версия".
Results 1 – 10 of about 30,600 for "портабельная версия"
Results 1 – 10 of about 1,870 for "Переносимая версия"
Причем в выдаче по каждому варианту – присутствуют программы с мировым именем 🙂 В общем, бардак полный – что писать не ясно. А вы как ее называете?
February 10th, 2010 at 2:04
По русски правильно “портативная”.
Мое ИМХО: Пользователей нельзя напрягать ни одним из вышеперечисленных способов. Лучший вариант, сделать полноценный инсталлятор для портативной версии. Очень грамотно это реализовано в AIMP. Чуть менее удобно, но тоже хорошо воспринимаемо пользователями в PasswordBoss.
February 10th, 2010 at 2:14
Обоснуешь? имхо портативным может быть фотопааат, стиральная машинка, сварочный аппарат… но не как не программа
А кто напрягает? у меня готовая портабельная версия скачивается отдельно с сайта, в виде зипа – просто распаковывается и все – никакого напряга. \
AIMP не видел, но как по мне так инсталятор и портабельная версия – вещи в какой-то степени диаметрально противоположные.
February 10th, 2010 at 2:59
я, пока читал о проблеме, придумал что инсталлированая версия должно создавать файлик флаг в папку, по которому программа и определит режим запуска. Ты же сделал этот флаг в имени файла – просто и понятно.
По поводу как называть… имхо портативная самое “плохое” название, но странички можно сделать для каждого варианта 🙂
Инсталятор для портабельной версии? оригинально 🙂 Но опять таки в самой программе может быть функционал по изготовлению портабельного варианта, причем вместе с данными пользователя.
February 10th, 2010 at 3:05
Тоже задумывался над этим вопросом… IMHO, самый удобный вариант — просто класть (или не класть) файлик с определенным названием (например, “portable.enable”) рядом с экзешником. Его наличие и будет являться ключем для активации портативного режима.
February 10th, 2010 at 4:45
Имхо, название версии – это как документация: что к чему да почему. Название должно быть понятно пользователю, если ему понятнее “портабельная” – значит так, если “переносимая” то пусть так, а если “мобильная” то хоть и так.
Главное, чтобы автор и пользователь друг друга верно поняли. В данном случае это термин. А термин – это всегда в первую очередь именно передача информации. Если термин информацию искажает – то это *авно, а не термин – он не выполняет своей главной функции, не передает информацию.
Мобильная версия – думаю у подавляющего большинства это вызовет ассоциации с мобилами, а вовсе не с чем надо.
Портативная версия – 2Николай: 5 с плюсом 🙂 – это пылесосы, кофемолки с вертикальным взлетом и прочая лабуда. Вообще никаких ассоциаций не вызовет.
Портабельная версия – имхо весьма распространенное название в рунете, могу поискать где-то была ссылка в Google Q&A – дык там все верно разъяснили спросительнице. Ну а если им, нашим пользователям так понятнее, привычнее, то почему бы и нет!?!
Про английский: криво, правильно – все это не важно. Здесь вам не словарь Даля. И потом не бум уж про аглицкий! Слова “мобильная”, “портативная” – это все равно по любому заимствования из английского языка. Дык чем тогда хуже сленговая “портабельная”? Кстати говоря, никто не мешает на сайте употребить оба термина – что-то вроде: “портабельная”, а в скобках написать “переносимая”. А ниже не грех и нормальную расшифровку термина написать в пару строк именно для новичков.
2Николай: спасибо за интереснейший пост и разумную критику. Решение “бат-ник + субдиректория в архиве” весьма любопытно. Я как-то и не подумал даже!
February 10th, 2010 at 6:43
Это как я понял “стандарт” принятый portableapps.com, но мне все таки решение с изменением имени файла нравится больше.
Кстати оно более однозначное чем наличие файлика – потому что при запуске xxx-portable.exe – сразу ясно что это портабельная версия, а вот если ориентироватся на файлик – то еще смотреть надо…
February 10th, 2010 at 7:51
Все популярные программы с приставкой “portable” говоришь ищут? Почти все результаты поиска ведут на варезники. Как мою программу крякер может превратить в портативную – не понимаю?
February 11th, 2010 at 4:59
1. это единственное слово которое на данный момент можно найти в русских словарях.
2. Перевод термина “portable” по версии гугла:
1. портативный
2. переносный
3. передвижной
4. съемный
5. переносный
6. переносной
7. передвижной
8. портативный
9. складной
10. разборный
Если идет распространение только портативной версии программы, то конечно архив (лучше саморпспоковывающийся) самое то, но если портативная версия идет как дополнение к продукту, лучше делать инсталлятор с возможностью выбора версии. Заставлять выкачивать доп. дистрибутив только ради сокрытого в архиве флага “portable” – как то не серьезно.
February 11th, 2010 at 3:20
“Теперь достаточно просто добавить –portable в имя программы – и все будет в шоколаде” ровно до тех пор, пока любопытный пользователь не переименует application-portable.exe в “Моя любимая программа.exе”
Я думаю, положить в папку специальный сигнальный файл самый надёжный путь.
И предусмотреть в десктопной версии возможность миграции на флешку, что сильно облегчит пользователю жизнь. Хотя, если ваша цель заманить его на свой сервер и заставить скачать еще несколько мегабайт, это конечно лишнее 🙂
February 11th, 2010 at 4:27
А если любопытный пользователь вообще удалит программу или откроет ехе в редакторе и поправит?:) следуя это логике, вообще тогда надо ложить рядом еще 1 сервисный ехе который будет следить за целостностью и наличием ехе 🙂
Моя цель дать пользователю удобную портабельную версию, и с минимальными напрягами для меня:) И еще подозреваю что большинству пользователей легче скачать портабельный дистрибутив с сайта, чем прочесть инструкцию про файлик, найти установленную прогу, скопировать папку и создать файл..
February 12th, 2010 at 3:13
Sergey дело говорит. Мой отец постоянно так делает, возможно сказывается не знание инглиша. Все проги переименовывает русскими символами. Когда нет ярлыка, а запуск идет напрямую exe, шанс что это произойдет, резко возрастает.
По поводу слова “портативный” – компактный, предназначен для легкого перемещения. Т.к. в цифровом мире от “веса” программы вес флешки не зависит, ключевыми словами будет “предназначен для легкого перемещения”.
February 12th, 2010 at 4:30
Я конечно извиняюсь за упорство, но как ты думаешь сколько процентом пользователей – так делают?
February 12th, 2010 at 5:32
да уж, столько эмоций по простому вопросу.. я так понимаю сложные вопросы даже не стоит выносить на обсуждении 🙂
February 12th, 2010 at 9:07
Между 99% довольных пользователей и 100% я выберу 100% 🙂
Конечно стоит. В споре рождается истина, пусть даже у каждого своя 🙂
А иначе зачем вообще этот блог и комьюнити? Чем сложнее вопросы, тем интереснее беседа.
February 12th, 2010 at 11:33
Обычно я исхожу из предположения, что пользователь никогда не читает инструкцию, а если читает, то не понимает что там написано, а если понимает, то все равно не знает как это сделать 🙂
Поэтому в главном меню программы в пункте “Сервис” есть команда “Создать портативную версию”, которая делает все что надо – копирует программу на сьемный носитель и настраивает ее для работы.
February 12th, 2010 at 11:54
Этот подход не идеален 🙁
Очень многие хотят портабельную версияю – из соображений того чтобы “не устанавливать” программу – типа там всякие записи в рееестр, следы компе…
February 12th, 2010 at 1:05
Я только указал на один из возможных подводных камней и предложил способ его преодоления 🙂
February 12th, 2010 at 4:14
Если программа распространяется как портативная изначально, то не понятно в чем вообще вопрос? Компилируйте отдельно как портативную и внешние флаги будут не нужны.
February 12th, 2010 at 7:10
Одним из посылов который я уже тут озвучивал – было наименьший геморой для меня – так вот компиляция двух версия – не способствует минимизации геммороя для разрабочика. К тому же лищает гибкости, пользователя… имхо ужасный вариант
February 13th, 2010 at 2:47
Установить в заголовке исходника флаг портативности и его изменение занимает 2 движения мышью и 4-5 нажатых клавиш.
Дискуссия зашла в тупик, можно подитожить: Два ИМХО не сошлись 🙂 🙂
February 13th, 2010 at 4:06
Ну-у, вообще-то, разделить две версии можно не на этапе компиляции, а на этапе сборки инсталлятора: десктопную собрать в установочный пакет, а портативную пошлейшим образом зазиповать с сигнальным файлом. В чем тут геморрой – искренне не понимаю. А bat-файл соберет все это двойным кликом мыши 🙂
February 13th, 2010 at 4:12
Лично меня это выводит из себя, постоянно менять флаги туда-сюда 🙂 Поэтому для себя я решил, что программа будет одна и сама будет определять в каком режиме она работает. И без привязок ни к функциям API по определению типа носителя, ни, тем более, к названию запускаемого файла. Я даже для GetAppName() сам устанавливаю название приложения, чтобы исключить проблемы с переименованием исполняемого файла.
February 13th, 2010 at 4:24
Мне приходилось поддерживать 2 версии файла – скажу что это не сахар и далеко не 2 движения мышью и 5 нажатых клавиш:) В данном случае будет отдельно собиратся английская и отдельно (ifdefam’и) русская (так надо) и делать из этух двух – четыре – это а) напряг, б) потенциальный источник ошибок. с) лишение юзера возможности самостоятельно получить портабльную версию из обычной.
Да, именно так я и делаю, компилю 1 раз и собираю инсталлятор\зипую (правда без файла флага, а переименовываю ехе). геммороя действительно минимум – консенсус 🙂
February 17th, 2010 at 6:03
1. При старте программы проверяется директория экзешника на наличие файла конфига и параметр в самом файле конфига (чтобы случайно не зацепиться за старый конфиг).
2. Ключ в ком. строке. Имеет высший приоритет.
3. Изолированный режим, для запуска с диска например. Ничего никуда не пишется/сохраняется. Ес-но для того софта в котором это возможно.
Вариант с батником (как и наличие скомпиленных версий с флагами) не нравиться, чисто по эстетическим соображениям.
Описаный вариант с именем экзешника нравится, спасибо, возьму на карандаш.
Портативная. Слово “портабельная” до ПК/интернетов в обиходе не встречал. Кому-то ближе портабельная, переносимая, носимая, карманная, ЮСБ. Смысл один.
February 18th, 2010 at 10:02
И мой душевный покой нарушает данный вопрос.
А что если в самом ЕXE проверить местонахождение программы?! Если путь к “Program Files” системы, содержится в пути к самой программе, то запустить ее как обычную (хранить настройки, данные в AppData), если же нет, тогда данные хранить рядом с программой.
Что скажете, какие подводные камни тут есть?
February 18th, 2010 at 10:19
Program Files (x86) – на 64 битных системах 🙂
Ну и имхо некоторая неочевидность для юзера. Я иногда копирую программы из программ файлс в E:\sandbox – папку для программ которые переживают переустановку винды – и я бы удивился если бы скопированное приложение “потеряло” бы данные.
February 18th, 2010 at 10:31
>>А что если в самом ЕXE проверить местонахождение программы?!
А не проще ли позвать GetDriveType? Но и то, должна быть возможность запустить в портабельном режиме даже с харда принудительно!!!
А вот GetDriveType нужна только если не указан специальный ключ командной строки, чтобы решить что делать по умолчанию.
Ключ должен иметь более высокий приоритет. Потому как, так многие делают – сначала ставят на хард портабельную версию, смотрят – и если понравится, то только ПОТОМ копируют на флешку (прям щаз я буду каждую пробную версию, чтобы только взглянуть на флешку писать).
Так что все эти умолчания, проверки путей, типов диска – это все хорошо. Но должен быть явный путь для пользователя сделать как ему надо, откуда угодно – то бишь указать, чтобы запускалась в портабельном виде (режиме и.т.п.)
February 18th, 2010 at 12:27
“Program Files (x86) – на 64 битных системах :)”
Поподробней, пожалуйста. С 64 битными не знаком.
“иногда копирую программы из программ файлс в E:\sandbox”
Может тогда, в папке с программой сделать ярлык на папку с данными программы в AppData 😉
Я всегда считал, что если пользователь такое сделать додумается, значит он и про AppData знает. В месяц, друзьям и знакомым, мне приходится устанавливать до пяти систем. Ни разу за пять лет не слышал чтобы хотел кто сохранить данные из AppData – только Вордовские документы с “Рабочего Стола” и из папки “Мои Документы”.
О чем это я?! Я о портативной программе с инсталятором. В таком случае нужно четко показать и предложить пользователю что можно и нужно хранить данные программы там где ему захочется, а обычные настройки (размер окна, позиция) можно хранить и в AppData – если что, невелика потеря.
А ZIP – это для продвинутых пользователей. У меня сестра “училась компьютерной грамоте”. Звонит: а как извлечь данные из ZIP-а? Мама у меня учитель информатики – как извлечь из ZIP-а?…
Для себя уже решил – быть портативной программе с инсталятором.
February 18th, 2010 at 12:41
А чо там подробнее…
на x64 есть две папки Program Files (x86) и обычная Program Files, это надо будет учесть.
February 18th, 2010 at 12:54
Тут такая тонкость, портабельная версия должна работать как портабельная из любого места: хоть из Program Files, хоть с флешки, или даже с компакт диска. Весь интерес в том, как намекнуть программе что она портабельная? Были предложены варианты с ключом запуска, переименованием программы и с сигнальным файлом в папке с программой. Был еще с негодованием отметенный вариант с перекомпиляцией программы. Самый простой, удобный и надежный – сигнальный файл :), но это строго ИМХО
February 18th, 2010 at 1:31
Sergey, а что если так:
Так как большинство пользователей установят программу в Program Files…
1. При запуске программа проверяет где она находится(Program Files) и есть ли у нее права на запись в собственную папку. Определяем режим – портативный или обычный.
2. Если обычный режим, тогда настройки (размер окна,…) пишем в AppData. А если нет, тогда ищем/пишем настройки и данные рядом с программой.
3. Если обычный режим, то перед сохранением данных предложить пользователю выбрать место для хранения файла, а путь к данному файлу опять же указать в файле настроек в AppData. Иначе сохраняем радом с EXE.
4. Если же переместить папку с программой на флешку, и не забыть про файл с данными 😉 , то п. 1.
February 18th, 2010 at 10:03
Имхо, инсталлятора для portable-версии не должно быть.
February 20th, 2010 at 4:18
Большинство установит программу туда куда им хочется, а куда им хочется – хрен его знает
И зачем городить геморрой с пунктами 1-4? Мы ведь ищем пути как сделать это просто и надежно 🙂 Причем, чтобы просто было и нам и пользователю. Программа не должна задавать пользователю лишних вопросов, пользователи от этого теряются.
Можно в десктопной версии предусмотреть функцию создания портабельной, чтобы пользователю не пришлось вручную копировать программу и данные на флешку, а все это сделалось одним нажатием кнопки. Предлагать ему найти и скопировать файл с данными который лежит в AppData – ужас!
February 26th, 2010 at 8:47
Можно найти много различных методов «мобилизации» своего ПО.
Можно переименовывать основной файл программы, создавать батник или файл метки… все это можно… (вы же разработчик, кто ж вам запретит)
НО:
1. Переименование файла – а кто сказал, что я как пользователь данного продукта не переименую его иначе? Ну не нравится мне родное его имя и тем более эта приписка portable. Имя у меня не по фэншую получается… не 8 символов. И все, и вдруг программа перестала работать… лезем на сайт производителя… пишем… спрашиваем…
Ответ мы, конечно, получим, НО тех.поддержке это быстро надоест (и как я читал многим уже такие вопросы надоели)
2. Батник – Сценарий похож. Удалили файл – потеряли портативность, а как восстановить??? Правильно – лезем и читаем мануалы, ридми и прочие faq.
3. Файл-метка – хорошо, но что делать , если его тоже удалят? А вот тут я и подошел к самому главному…
Давайте определим основные положения (как их вижу я):
а. речь здесь идет только о тех программах, которым необходимо хранить свои настройки (программу, которая не сохраняет настроек по умолчанию можно считать portable)
б. создавать инсталлятор для portable-версии программы крайне нелогично. «Распаковал и работает» – таков наш девиз.
в. отдельная portable сборка – глупо, если в ней меняется только флаг переключающий ее в таковую.
ИТОГ: у нас нет инсталлятора, и есть одна программа, способная работать в двух режимах, и у нас есть одна проблема : как узнать portable мы или нет …
Мое предложение – спросить у пользователя. Это разумно, ведь именно он решает, где именно он хочет хранить свои настройки. Но спрашивать его об этом каждый раз не то что глупо, а полный идиотизм.
По моему мнению, алгоритм работы должен быть такой:
1. После запуска программа должна найти файл-метку (или файл настроек) и из него узнать в каком режиме она (программа) работает. Если она этого файла не найдет, то это первый запуск программы и необходимо спросить у пользователя о том, где же мы будем хранить свои настройки. Таким нехитрым способом мы определили первый запуск.
2. В окне настроек программы следует обязательно предоставить возможность изменить место хранения настроек (реестр или ini-файл). При этом всю ответственность за перенос существующих настроек из файла в реестр или наоборот программа должна взять на себя. При этом необходимо скрыть от пользователя ВСЕ настройки влияющие на «портативность» программы.
ИТАК: у нас есть корректно работающая «переключалка» на portable-версию и обратно, а также пользователь, которому предоставлен выбор в каком именно его любимая программа будет работать сегодня.
ЛОЖКА ДЕГТЯ: а что если удалить файл метку или файл настроек… Да действительно это проблема, но она тоже решаема. Программа должна проверить, не было ли ранее сохранены ее настройки в реестре, и если таковые она там найдет, то разумно пользователю задать следующий вопрос: «В реестре были найдены настройки от предыдущей версии программы, оставить их или применить настройки по умолчанию?» и действовать в зависимости от ответа.
February 27th, 2010 at 4:49
in0, ты случайно не для атомных станций или космических программ софт пишешь?:)
March 2nd, 2010 at 12:12
2in0:
1) не стоит пользователя “грузить” возможностями настройки, вопросами и прочия, и прочия и прочия. 90% пользователей никогда НЕ меняют настройки по умолчанию. Настройки по умолчанию должны быть изначально подходящими для большинства.
2) удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет.
Так что имхо замечание не принимается – волков бояться, в лес не ходить. Да и не будет никто так вникать во внутреннее устройство софта, у пользователей своих забот полон рот – что-то потярелось, полностью переустанавливают и не маются вниканием в подробности. 100 раз это уже видел по фидбеку.
Нафига пользователю вникать в подробности, которые за него продумал разработчик? У пользователя есть масса своих задач, причем таких, которые в отличие от софта никакой разработчик за него даже и в принципе решить не может!
March 3rd, 2010 at 9:16
Carc > Настройки по умолчанию должны быть изначально подходящими для большинства.
А кто вам мешает наряду с возможностью изменения настроек создать определенный набор, который и будет использоваться по умолчанию??? я разве что-то говорил против этого?
Carc > не стоит пользователя “грузить” возможностями настройки
Грузить действительно не стоит, а предоставить возможность ЛЕГКО получить требуемый результат просто необходимо. Пользователь вдруг решил, что его программа со всеми его настройками крайне необходима ему в отпуске и решил ее скопировать на флэшку (вместе со всеми настройками, которые лежали в реестре), и я предлагаю дать ему эту возможность.
Carc > удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет
Такое может произойти и вполне случайно… например во время сбоя системы… отключения электричества и прочего… да мало ли по какой причине.
Разработчик программы просто обязан предусмотреть поведение своего творения в случаях какого-либо сбоя. Да, действительно не всё можно предусмотреть и тем более не на все можно корректно реагировать, НО если ошибку можно обработать – ее необходимо обрабатывать и если не решить, то, по крайней мере, выдать пользователю ВМЕНЯЕМОЕ сообщение об ошибке и предполагаемых путях ее решения. А пока программы будут писаться тяп-ляп, то и работать они будут также.
ЗЫ
Нет, я не пишу программы для атомных станций.
Если программа некорректно работает в какой-либо самой ненужной и не относящейся к ее основному функционалу “мульке”, то возникает вопрос о ее корректной работе в целом.
March 3rd, 2010 at 9:28
Прямо таки обязан?:)
О, а можно посмотреть ваши программы которые корректно обрабатывают такие “сбои” типа случайного удаления батника, файла метки, ехешника… ?
Как минимум ожидаю увидить рядом с ехешноком, запакованную копию оригинала ехе, вдруг вирус повредит основной, тогда программа сможет проверить сrc и самовостановится из копии, правда?:)
Конечно хорошо что бы программа работала хорошо и стабильно в любой ситуации, но есть рамки здравого смысла…
March 3rd, 2010 at 10:37
2Николай: 5 с двумя плюсами, абсолютно со всем согласен.
2in: если удалят exe-шник ОС и сама выдаст разумное сообщение об ошибке при попытке запуска несуществующего exe-шника.
Кароче (C) все это уже оверфлуд чистейшей воды. Мы помним как все начиналось, я рассказал про свой способ БЫСТРОГО!!! создания portable-версии, со сравнительно минимальными усилиями, Николай его дополнил своим.
Если почитать исходный пост, то там четко сказано: смотрим на показатель затрачиваемые усилия\довольство пользователей.
Можно конечно и мудреннее сделать, и с массой настроек. О чем я же и писал в своем собственном посте – это и так есть у меня уже 100 лет в обед. Все есть ну очень давно, только пользователи хотят ЕЩЕ!! проще, они платят и их мнение уже поэтому перевесит Ваше.
Но пока “разработчеги” не поймут простой мысли: что самый главный “тормоз” и источник ошибок в программировании это пользователь – разговаривать особо не о чем.
Именно пользовательские усилия нужно оптимизировать, причем желательно с минимальными затратами – на каждый роток не накинешь платок.
Ну, а в принципе лично я завсегда не против дискуссии на тему: почему нельзя (или все-таки можно) написать программу для любых задач на все времена подо все платформы и для любых теоретических ситуаций… 🙂
March 3rd, 2010 at 2:41
Во-первых, я не говорил ни разу про удаление exe-шников или батников (если вам так показалось, простите). Речь шла только о потере файла-метки и файла-настроек.
Во-вторых, согласен, что если речь идет о том как быстро сделать программу портативной, то можно использовать и батник и переименование файла. Если же говорить о том, как это должно быть сделано по-человечески и для людей, то … я уже описал, как оно должно быть: оно должно быть просто и прозрачно для пользователя, а самое главное УДОБНО.
Действительно, переименование файла – это и просто и прозрачно, но это НЕ удобно.
В-третьих, когда программа создается для пользователей, то и исходить следует из желаний этого самого пользователя. Конечно, невозможно реализовать все их желания – это понятно, они будут постоянно пополняться и пополняться, но на это есть версии вашего ПО.
В-четвертых, нельзя забывать про пользовательский интерфейс. Пользователю должно быть УДОБНО пользоваться вашей программой, ему должно быть удобно абсолютно все: и установка, и работа в программе, ее обновление и ее удаление. Все это необходимо чтобы у пользователя создалось приятное впечатление от вашей программы, и он знал, что ваши продукты будут такого же качества как и этот, даже если конкретно эта программа ему не пригодилась или не подошла.
Установка (или первый запуск) программы должен сопровождаться созданием первоначальных настроек и поддерживать два основных режима:
а. стандартная – наиболее общие и оптимальные настройки программы, которые вы предлагаете использовать.
б. по выбору – ну раз полез, то и пусть настраивает, но тоже не стоит его здесь “грузить” кучей настроек, которые есть в вашей программе, здесь тоже следует предоставить ему лишь несколько вариантов развития событий, которые опять же вы за него уже определили.
Программные продукты должны стремиться упростить жизнь пользователя и уменьшить его трудозатраты. К сожалению, уменьшение трудозатрат пользователя всегда ведет к увеличению труда разработчика по этому самому уменьшению и упрощению.
Вы как разработчик предлагаете пользователю инструмент для решения его задач, и чем меньше усилий будет прилагать пользователь в решении этих задач, используя предоставленный вами инструмент, тем лучше с его точки зрения будет ваша программа. Хотя при этом ваша программа может управлять очень сложным прибором или высчитывать шестнадцатиэтажные уравнения с производными четвертого порядка. Но если пользователь при этом будет называть вашу программу «калькулятором», то значит, вы с задачей более чем справились.
ЗЫ
НЕТ, вы не обязаны и не должны, но очень бы хотелось, чтобы вы думали о тех, кто вашими программами пользуется
ЗЗЫ
все, что я здесь написал это лишь мое мнение о том, как должна себя вести программа по отношению к пользователям. Всегда стоит помнить о том, что таких программ у пользователя на компьютере стоит ооочень много и ему совсем неинтересно как же именно ему следуте переименовать файл, точбы она наконец-заработала так как он ожидает.
March 3rd, 2010 at 4:07
Существует альтернативное мнение, что программные продукты
должны приносить деньги, а все остальное просто красивые слова.
March 3rd, 2010 at 6:24
Прости за длинную цитату, я покажу место, после которого мы подумали что ты говоришь про удаление как минимум батника
———————-
Carc > удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет
in0>Такое может произойти и вполне случайно… например во время сбоя системы… отключения электричества и прочего… да мало ли по какой причине.
in0>Разработчик программы просто обязан предусмотреть поведение своего творения в случаях какого-либо сбоя.
———————-
Теперь по существу, можешь аргументировать почему переименования файла не удобно для пользователя. Я все понимаю что программа должна быть удобной, дружественной и так далее и то что специальный визард вызываемый из меню для создания портабельной копии – более удобен, но все-таки чем переименование файла существенно менее удобно чем опция в программе???
Собственно, все программы именно так и делают – по умолчанию
используется наиболее удобный дефолтный набор опций, но пользователь всегда может залеть в настройки и изменить их:)
Исходя из того что портабельная версия нужна примерно 5% пользователей, а при первом запуске этот процент в районе 1-2%, стоит ли напрягать пользователей лишними вопросами при инсталяции?
То есть с одной стороны мы стремимся упростить жизнь пользователям и уменьшить его трудозатраты, а с другой – мы заставляем 98-99% пользователей думать и отвечать на глупые вопросы? Точно ли так надо делать?
Фи, какой ты меркантильный, хотя в принципе я с тобой согласен:)))
March 4th, 2010 at 8:02
Begemot > мы заставляем 98-99% пользователей думать и отвечать на глупые вопросы?
Нет, не заставляем, вся эта толпа пользователей воспользуется установкой с дефолтовыми настройками и не будет отвечать ни на один вопрос, кроме согласия с лицензионным соглашением (я говорил о таком варианте установки).
Begemot > чем переименование файла существенно менее удобно чем опция в программе???
она неудобна тем, что для этого надо прочитать определенную инструкцию по тому как переделать программу в портативную и именно из этой инструкции узнать, что для этого достаточно переименовать файл. А для того, чтобы прочитать инструкцию, надо знать, где она лежит, и в каком разделе этой инструкции мне прочитать интересующую меня информацию (о том что инструкции бывают больше чем в одно предложение, я надеюсь, вы слышали).
Sergey > Существует альтернативное мнение, что программные продукты должны приносить деньги, а все остальное просто красивые слова.
Знаете за какую программу заплатил бы вам любой пользователь? За программу с одной единственной кнопкой “Решить проблему!”, которая бы действительно решала его проблему.
March 4th, 2010 at 8:05
Хочу еще дополнить:
Begemot > чем переименование файла существенно менее удобно
чем опция в программе???
Кроме того опция в программе позволяет тебе, как разработчкику, отследить момент переключения программы из одного режима в другой и, если необходимо, выполнить какие-то действия, например, скопировать настройки из одного места хранения в другое.
March 4th, 2010 at 8:17
Судя по моему опыту – увидить настройку в опциях, определенная часть пользователей тоже не может сама по себе 🙁
Если мы говорим о том, что программа сама должна все сделать для перехода в портабельный режим – скопировать настройки, себя и так далее – то согласен это самый удобный и правильный вариант. Но к сожалению, такая идилия крайне редко встречаетя…
А если выбирать просто между переключением в режим портабельности – 1. установкой флажка в опциях и перезапуском программы и 2. Переименованием программы. То я не вижу большой разницы для пользователя.
Более того опция доступная все пользователем из которых 95ти% она не нужна – потенциальна даже опаснее, так как стоит пользователю случайно ее отметить – и при следующем запуске он будет весьма удивлен отстуствием его данных 🙂
А когда пользователь переименовывает программу – он точно знает что и зачем он делает.:)
March 4th, 2010 at 10:08
фуф. Считаю, что мы пришли к взаимному пониманию, по кр.мере в той части как оно должно быть идеально.
А все остальное уже определяется соотношением трудозатрат разработчика к необходимости того или иного функционала. Если на определенном этапе жизни программы достаточно подхода с переименованием, то пусть он таким и будет.
Про потенциальную опасность:
Сам работаю в тех.поддержке, поэтому могу смело сказать одно: если программу можно сломать – ее сломают, куда бы вы не запрятали, то, что ее ломает. Предусмотреть абсолютно полную защиту нельзя. Стремиться к этому можно, но и параноиками быть не стоит.
March 4th, 2010 at 11:37
Вот такие мы, разработчики программного обеспечения. И если кто-то думает, что я ему что-то ДОЛЖЕН, то он глубоко заблуждается.
March 4th, 2010 at 11:38
Да, и ежели что, все это прописано в лицензионном соглашении
March 4th, 2010 at 11:40
А я считаю, что мы – разработчики – все-таки должны… Но только вот завсегда нужен в этом случае один предикат: утром деньги – днем стулья, днем деньги – вечером стулья, вечером деньги – утром стулья :)))))
March 4th, 2010 at 11:50
PS: вообще, мне кажется, мы же пришли по большому счету к общей точке зрения, только чуть разными высказываниями и разными путями.
Бегемот прав! Портабельность нужна далеко не всем (это сильно зависит от софта к тому же). Какому-то числу процентов – и просто не получится, физически не выйдет бросить на третьестепенную фичу все человеко-(мозго)-ресурсы.
У Джоэла Сполски есть отличное высказывание: “Извините, но за 100 баксов Вы заказную версию НЕ получите!!!”. Ничего личного – простая экономика.
А если про направления эмоций разработчиков: то все мы люди, все мы человеки. Я лично доводил свою софтину до отдельной портабельной версии всего лишь по одной единственной просьбе одного единственного, но весьма уважаемого мною по человечески пользователя. Но в любом случае, я даже ради него не могу бросить на это целый месяц, потому как есть и все остальные.
ЗЫ: кстати по другой занудной просьбе этого же пользователя я убил не один месяц. Но там совсем другой коленкор был: нужно многим, перспективно, да и заюзано может быть в разных продуктах.
Так что как не крути, а “экономика” работает.