Эволюция портабельности

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 "Переносимая версия"

Причем в выдаче по каждому варианту – присутствуют программы с мировым именем 🙂 В общем, бардак полный – что писать не ясно. А вы как ее называете?

Related:

52 Responses to “Эволюция портабельности”

  1. По русски правильно “портативная”.
    Мое ИМХО: Пользователей нельзя напрягать ни одним из вышеперечисленных способов. Лучший вариант, сделать полноценный инсталлятор для портативной версии. Очень грамотно это реализовано в AIMP. Чуть менее удобно, но тоже хорошо воспринимаемо пользователями в PasswordBoss.

  2. Night_Rain: По русски правильно “портативная”.

    Обоснуешь? имхо портативным может быть фотопааат, стиральная машинка, сварочный аппарат… но не как не программа

    Night_Rain: Пользователей нельзя напрягать ни одним из вышеперечисленных способов. Лучший вариант, сделать полноценный инсталлятор для портативной версии.

    А кто напрягает? у меня готовая портабельная версия скачивается отдельно с сайта, в виде зипа – просто распаковывается и все – никакого напряга. \
    AIMP не видел, но как по мне так инсталятор и портабельная версия – вещи в какой-то степени диаметрально противоположные.

  3. я, пока читал о проблеме, придумал что инсталлированая версия должно создавать файлик флаг в папку, по которому программа и определит режим запуска. Ты же сделал этот флаг в имени файла – просто и понятно.

    По поводу как называть… имхо портативная самое “плохое” название, но странички можно сделать для каждого варианта 🙂

    Инсталятор для портабельной версии? оригинально 🙂 Но опять таки в самой программе может быть функционал по изготовлению портабельного варианта, причем вместе с данными пользователя.

  4. Тоже задумывался над этим вопросом… IMHO, самый удобный вариант — просто класть (или не класть) файлик с определенным названием (например, “portable.enable”) рядом с экзешником. Его наличие и будет являться ключем для активации портативного режима.

  5. Имхо, название версии – это как документация: что к чему да почему. Название должно быть понятно пользователю, если ему понятнее “портабельная” – значит так, если “переносимая” то пусть так, а если “мобильная” то хоть и так.

    Главное, чтобы автор и пользователь друг друга верно поняли. В данном случае это термин. А термин – это всегда в первую очередь именно передача информации. Если термин информацию искажает – то это *авно, а не термин – он не выполняет своей главной функции, не передает информацию.

    Мобильная версия – думаю у подавляющего большинства это вызовет ассоциации с мобилами, а вовсе не с чем надо.
    Портативная версия – 2Николай: 5 с плюсом 🙂 – это пылесосы, кофемолки с вертикальным взлетом и прочая лабуда. Вообще никаких ассоциаций не вызовет.
    Портабельная версия – имхо весьма распространенное название в рунете, могу поискать где-то была ссылка в Google Q&A – дык там все верно разъяснили спросительнице. Ну а если им, нашим пользователям так понятнее, привычнее, то почему бы и нет!?!

    Про английский: криво, правильно – все это не важно. Здесь вам не словарь Даля. И потом не бум уж про аглицкий! Слова “мобильная”, “портативная” – это все равно по любому заимствования из английского языка. Дык чем тогда хуже сленговая “портабельная”? Кстати говоря, никто не мешает на сайте употребить оба термина – что-то вроде: “портабельная”, а в скобках написать “переносимая”. А ниже не грех и нормальную расшифровку термина написать в пару строк именно для новичков.

    2Николай: спасибо за интереснейший пост и разумную критику. Решение “бат-ник + субдиректория в архиве” весьма любопытно. Я как-то и не подумал даже!

  6. Carc: Решение “бат-ник + субдиректория в архиве” весьма любопытно. Я как-то и не подумал даже!

    Это как я понял “стандарт” принятый portableapps.com, но мне все таки решение с изменением имени файла нравится больше.
    Кстати оно более однозначное чем наличие файлика – потому что при запуске xxx-portable.exe – сразу ясно что это портабельная версия, а вот если ориентироватся на файлик – то еще смотреть надо…

  7. Все популярные программы с приставкой “portable” говоришь ищут? Почти все результаты поиска ведут на варезники. Как мою программу крякер может превратить в портативную – не понимаю?

  8. Begemot:
    Обоснуешь? имхо портативным может быть фотопааат, стиральная машинка, сварочный аппарат… но не как не программа

    1. это единственное слово которое на данный момент можно найти в русских словарях.
    2. Перевод термина “portable” по версии гугла:

    1. портативный
    2. переносный
    3. передвижной
    4. съемный
    5. переносный
    6. переносной
    7. передвижной
    8. портативный
    9. складной
    10. разборный

    Begemot:
    А кто напрягает? у меня готовая портабельная версия скачивается отдельно с сайта, в виде зипа – просто распаковывается и все– никакого напряга. \
    AIMP не видел, но как по мне так инсталятор и портабельная версия – вещи в какой-то степени диаметрально противоположные.

    Если идет распространение только портативной версии программы, то конечно архив (лучше саморпспоковывающийся) самое то, но если портативная версия идет как дополнение к продукту, лучше делать инсталлятор с возможностью выбора версии. Заставлять выкачивать доп. дистрибутив только ради сокрытого в архиве флага “portable” – как то не серьезно.

  9. “Теперь достаточно просто добавить –portable в имя программы – и все будет в шоколаде” ровно до тех пор, пока любопытный пользователь не переименует application-portable.exe в “Моя любимая программа.exе”
    Я думаю, положить в папку специальный сигнальный файл самый надёжный путь.
    И предусмотреть в десктопной версии возможность миграции на флешку, что сильно облегчит пользователю жизнь. Хотя, если ваша цель заманить его на свой сервер и заставить скачать еще несколько мегабайт, это конечно лишнее 🙂

  10. Sergey: ровно до тех пор, пока любопытный пользователь не переименует application-portable.exe в “Моя любимая программа.exе”

    А если любопытный пользователь вообще удалит программу или откроет ехе в редакторе и поправит?:) следуя это логике, вообще тогда надо ложить рядом еще 1 сервисный ехе который будет следить за целостностью и наличием ехе 🙂

    Sergey: Хотя, если ваша цель заманить его на свой сервер и заставить скачать еще несколько мегабайт, это конечно лишнее

    Моя цель дать пользователю удобную портабельную версию, и с минимальными напрягами для меня:) И еще подозреваю что большинству пользователей легче скачать портабельный дистрибутив с сайта, чем прочесть инструкцию про файлик, найти установленную прогу, скопировать папку и создать файл..

  11. Begemot:
    А если любопытный пользователь вообще удалит программу или откроет ехе в редакторе и поправит?:) следуя это логике, вообще тогда надо ложить рядом еще 1 сервисный ехе который будет следить за целостностью и наличием ехе

    Sergey дело говорит. Мой отец постоянно так делает, возможно сказывается не знание инглиша. Все проги переименовывает русскими символами. Когда нет ярлыка, а запуск идет напрямую exe, шанс что это произойдет, резко возрастает.

    По поводу слова “портативный” – компактный, предназначен для легкого перемещения. Т.к. в цифровом мире от “веса” программы вес флешки не зависит, ключевыми словами будет “предназначен для легкого перемещения”.

  12. Night_Rain: Sergey дело говорит. Мой отец постоянно так делает, возможно сказывается не знание инглиша. Все проги переименовывает русскими символами. Когда нет ярлыка, а запуск идет напрямую exe, шанс что это произойдет, резко возрастает.

    Я конечно извиняюсь за упорство, но как ты думаешь сколько процентом пользователей – так делают?

  13. да уж, столько эмоций по простому вопросу.. я так понимаю сложные вопросы даже не стоит выносить на обсуждении 🙂

  14. Begemot:
    Я конечно извиняюсь за упорство, но как ты думаешь сколько процентом пользователей – так делают?

    Между 99% довольных пользователей и 100% я выберу 100% 🙂

    NikoNiko: да уж, столько эмоций по простому вопросу.. я так понимаю сложные вопросы даже не стоит выносить на обсуждении

    Конечно стоит. В споре рождается истина, пусть даже у каждого своя 🙂
    А иначе зачем вообще этот блог и комьюнити? Чем сложнее вопросы, тем интереснее беседа.

  15. Begemot: И еще подозреваю что большинству пользователей легче скачать портабельный дистрибутив с сайта, чем прочесть инструкцию про файлик, найти установленную прогу, скопировать папку и создать файл..

    Обычно я исхожу из предположения, что пользователь никогда не читает инструкцию, а если читает, то не понимает что там написано, а если понимает, то все равно не знает как это сделать 🙂
    Поэтому в главном меню программы в пункте “Сервис” есть команда “Создать портативную версию”, которая делает все что надо – копирует программу на сьемный носитель и настраивает ее для работы.

  16. Этот подход не идеален 🙁
    Очень многие хотят портабельную версияю – из соображений того чтобы “не устанавливать” программу – типа там всякие записи в рееестр, следы компе…

  17. Я только указал на один из возможных подводных камней и предложил способ его преодоления 🙂

  18. Begemot: Этот подход не идеален
    Очень многие хотят портабельную версияю – из соображений того чтобы “не устанавливать” программу – типа там всякие записи в рееестр, следы компе…

    Если программа распространяется как портативная изначально, то не понятно в чем вообще вопрос? Компилируйте отдельно как портативную и внешние флаги будут не нужны.

  19. Одним из посылов который я уже тут озвучивал – было наименьший геморой для меня – так вот компиляция двух версия – не способствует минимизации геммороя для разрабочика. К тому же лищает гибкости, пользователя… имхо ужасный вариант

  20. Begemot: Одним из посылов который я уже тут озвучивал – было наименьший геморой для меня – так вот компиляция двух версия – не способствует минимизации геммороя для разрабочика. К тому же лищает гибкости, пользователя… имхо ужасный вариант

    Установить в заголовке исходника флаг портативности и его изменение занимает 2 движения мышью и 4-5 нажатых клавиш.
    Дискуссия зашла в тупик, можно подитожить: Два ИМХО не сошлись 🙂 🙂

  21. Ну-у, вообще-то, разделить две версии можно не на этапе компиляции, а на этапе сборки инсталлятора: десктопную собрать в установочный пакет, а портативную пошлейшим образом зазиповать с сигнальным файлом. В чем тут геморрой – искренне не понимаю. А bat-файл соберет все это двойным кликом мыши 🙂

  22. Night_Rain: Установить в заголовке исходника флаг портативности и его изменение занимает 2 движения мышью и 4-5 нажатых клавиш.

    Лично меня это выводит из себя, постоянно менять флаги туда-сюда 🙂 Поэтому для себя я решил, что программа будет одна и сама будет определять в каком режиме она работает. И без привязок ни к функциям API по определению типа носителя, ни, тем более, к названию запускаемого файла. Я даже для GetAppName() сам устанавливаю название приложения, чтобы исключить проблемы с переименованием исполняемого файла.

  23. Night_Rain: Установить в заголовке исходника флаг портативности и его изменение занимает 2 движения мышью и 4-5 нажатых клавиш.

    Мне приходилось поддерживать 2 версии файла – скажу что это не сахар и далеко не 2 движения мышью и 5 нажатых клавиш:) В данном случае будет отдельно собиратся английская и отдельно (ifdefam’и) русская (так надо) и делать из этух двух – четыре – это а) напряг, б) потенциальный источник ошибок. с) лишение юзера возможности самостоятельно получить портабльную версию из обычной.

    Sergey: Ну-у, вообще-то, разделить две версии можно не на этапе компиляции, а на этапе сборки инсталлятора: десктопную собрать в установочный пакет, а портативную пошлейшим образом зазиповать с сигнальным файлом. В чем тут геморрой – искренне не понимаю.

    Да, именно так я и делаю, компилю 1 раз и собираю инсталлятор\зипую (правда без файла флага, а переименовываю ехе). геммороя действительно минимум – консенсус 🙂

  24. 1. При старте программы проверяется директория экзешника на наличие файла конфига и параметр в самом файле конфига (чтобы случайно не зацепиться за старый конфиг).
    2. Ключ в ком. строке. Имеет высший приоритет.
    3. Изолированный режим, для запуска с диска например. Ничего никуда не пишется/сохраняется. Ес-но для того софта в котором это возможно.

    Вариант с батником (как и наличие скомпиленных версий с флагами) не нравиться, чисто по эстетическим соображениям.
    Описаный вариант с именем экзешника нравится, спасибо, возьму на карандаш.

    Портативная. Слово “портабельная” до ПК/интернетов в обиходе не встречал. Кому-то ближе портабельная, переносимая, носимая, карманная, ЮСБ. Смысл один.

  25. И мой душевный покой нарушает данный вопрос.

    А что если в самом ЕXE проверить местонахождение программы?! Если путь к “Program Files” системы, содержится в пути к самой программе, то запустить ее как обычную (хранить настройки, данные в AppData), если же нет, тогда данные хранить рядом с программой.
    Что скажете, какие подводные камни тут есть?

  26. Program Files (x86) – на 64 битных системах 🙂
    Ну и имхо некоторая неочевидность для юзера. Я иногда копирую программы из программ файлс в E:\sandbox – папку для программ которые переживают переустановку винды – и я бы удивился если бы скопированное приложение “потеряло” бы данные.

  27. >>А что если в самом ЕXE проверить местонахождение программы?!
    А не проще ли позвать GetDriveType? Но и то, должна быть возможность запустить в портабельном режиме даже с харда принудительно!!!
    А вот GetDriveType нужна только если не указан специальный ключ командной строки, чтобы решить что делать по умолчанию.

    Ключ должен иметь более высокий приоритет. Потому как, так многие делают – сначала ставят на хард портабельную версию, смотрят – и если понравится, то только ПОТОМ копируют на флешку (прям щаз я буду каждую пробную версию, чтобы только взглянуть на флешку писать).

    Так что все эти умолчания, проверки путей, типов диска – это все хорошо. Но должен быть явный путь для пользователя сделать как ему надо, откуда угодно – то бишь указать, чтобы запускалась в портабельном виде (режиме и.т.п.)

  28. “Program Files (x86) – на 64 битных системах :)”
    Поподробней, пожалуйста. С 64 битными не знаком.

    “иногда копирую программы из программ файлс в E:\sandbox”
    Может тогда, в папке с программой сделать ярлык на папку с данными программы в AppData 😉
    Я всегда считал, что если пользователь такое сделать додумается, значит он и про AppData знает. В месяц, друзьям и знакомым, мне приходится устанавливать до пяти систем. Ни разу за пять лет не слышал чтобы хотел кто сохранить данные из AppData – только Вордовские документы с “Рабочего Стола” и из папки “Мои Документы”.
    О чем это я?! Я о портативной программе с инсталятором. В таком случае нужно четко показать и предложить пользователю что можно и нужно хранить данные программы там где ему захочется, а обычные настройки (размер окна, позиция) можно хранить и в AppData – если что, невелика потеря.
    А ZIP – это для продвинутых пользователей. У меня сестра “училась компьютерной грамоте”. Звонит: а как извлечь данные из ZIP-а? Мама у меня учитель информатики – как извлечь из ZIP-а?…
    Для себя уже решил – быть портативной программе с инсталятором.

  29. AnalogXP: Поподробней, пожалуйста. С 64 битными не знаком.

    А чо там подробнее…
    на x64 есть две папки Program Files (x86) и обычная Program Files, это надо будет учесть.

  30. AnalogXP: А что если в самом ЕXE проверить местонахождение программы?!

    Тут такая тонкость, портабельная версия должна работать как портабельная из любого места: хоть из Program Files, хоть с флешки, или даже с компакт диска. Весь интерес в том, как намекнуть программе что она портабельная? Были предложены варианты с ключом запуска, переименованием программы и с сигнальным файлом в папке с программой. Был еще с негодованием отметенный вариант с перекомпиляцией программы. Самый простой, удобный и надежный – сигнальный файл :), но это строго ИМХО

  31. Sergey, а что если так:
    Так как большинство пользователей установят программу в Program Files…
    1. При запуске программа проверяет где она находится(Program Files) и есть ли у нее права на запись в собственную папку. Определяем режим – портативный или обычный.
    2. Если обычный режим, тогда настройки (размер окна,…) пишем в AppData. А если нет, тогда ищем/пишем настройки и данные рядом с программой.
    3. Если обычный режим, то перед сохранением данных предложить пользователю выбрать место для хранения файла, а путь к данному файлу опять же указать в файле настроек в AppData. Иначе сохраняем радом с EXE.
    4. Если же переместить папку с программой на флешку, и не забыть про файл с данными 😉 , то п. 1.

  32. Имхо, инсталлятора для portable-версии не должно быть.

  33. AnalogXP: Sergey, а что если так:

    Большинство установит программу туда куда им хочется, а куда им хочется – хрен его знает

    И зачем городить геморрой с пунктами 1-4? Мы ведь ищем пути как сделать это просто и надежно 🙂 Причем, чтобы просто было и нам и пользователю. Программа не должна задавать пользователю лишних вопросов, пользователи от этого теряются.

    Можно в десктопной версии предусмотреть функцию создания портабельной, чтобы пользователю не пришлось вручную копировать программу и данные на флешку, а все это сделалось одним нажатием кнопки. Предлагать ему найти и скопировать файл с данными который лежит в AppData – ужас!

  34. Можно найти много различных методов «мобилизации» своего ПО.
    Можно переименовывать основной файл программы, создавать батник или файл метки… все это можно… (вы же разработчик, кто ж вам запретит)
    НО:
    1. Переименование файла – а кто сказал, что я как пользователь данного продукта не переименую его иначе? Ну не нравится мне родное его имя и тем более эта приписка portable. Имя у меня не по фэншую получается… не 8 символов. И все, и вдруг программа перестала работать… лезем на сайт производителя… пишем… спрашиваем…
    Ответ мы, конечно, получим, НО тех.поддержке это быстро надоест (и как я читал многим уже такие вопросы надоели)
    2. Батник – Сценарий похож. Удалили файл – потеряли портативность, а как восстановить??? Правильно – лезем и читаем мануалы, ридми и прочие faq.
    3. Файл-метка – хорошо, но что делать , если его тоже удалят? А вот тут я и подошел к самому главному…
    Давайте определим основные положения (как их вижу я):
    а. речь здесь идет только о тех программах, которым необходимо хранить свои настройки (программу, которая не сохраняет настроек по умолчанию можно считать portable)
    б. создавать инсталлятор для portable-версии программы крайне нелогично. «Распаковал и работает» – таков наш девиз.
    в. отдельная portable сборка – глупо, если в ней меняется только флаг переключающий ее в таковую.
    ИТОГ: у нас нет инсталлятора, и есть одна программа, способная работать в двух режимах, и у нас есть одна проблема : как узнать portable мы или нет …
    Мое предложение – спросить у пользователя. Это разумно, ведь именно он решает, где именно он хочет хранить свои настройки. Но спрашивать его об этом каждый раз не то что глупо, а полный идиотизм.
    По моему мнению, алгоритм работы должен быть такой:
    1. После запуска программа должна найти файл-метку (или файл настроек) и из него узнать в каком режиме она (программа) работает. Если она этого файла не найдет, то это первый запуск программы и необходимо спросить у пользователя о том, где же мы будем хранить свои настройки. Таким нехитрым способом мы определили первый запуск.
    2. В окне настроек программы следует обязательно предоставить возможность изменить место хранения настроек (реестр или ini-файл). При этом всю ответственность за перенос существующих настроек из файла в реестр или наоборот программа должна взять на себя. При этом необходимо скрыть от пользователя ВСЕ настройки влияющие на «портативность» программы.
    ИТАК: у нас есть корректно работающая «переключалка» на portable-версию и обратно, а также пользователь, которому предоставлен выбор в каком именно его любимая программа будет работать сегодня.
    ЛОЖКА ДЕГТЯ: а что если удалить файл метку или файл настроек… Да действительно это проблема, но она тоже решаема. Программа должна проверить, не было ли ранее сохранены ее настройки в реестре, и если таковые она там найдет, то разумно пользователю задать следующий вопрос: «В реестре были найдены настройки от предыдущей версии программы, оставить их или применить настройки по умолчанию?» и действовать в зависимости от ответа.

  35. in0, ты случайно не для атомных станций или космических программ софт пишешь?:)

  36. 2in0:
    1) не стоит пользователя “грузить” возможностями настройки, вопросами и прочия, и прочия и прочия. 90% пользователей никогда НЕ меняют настройки по умолчанию. Настройки по умолчанию должны быть изначально подходящими для большинства.

    2) удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет.
    Так что имхо замечание не принимается – волков бояться, в лес не ходить. Да и не будет никто так вникать во внутреннее устройство софта, у пользователей своих забот полон рот – что-то потярелось, полностью переустанавливают и не маются вниканием в подробности. 100 раз это уже видел по фидбеку.
    Нафига пользователю вникать в подробности, которые за него продумал разработчик? У пользователя есть масса своих задач, причем таких, которые в отличие от софта никакой разработчик за него даже и в принципе решить не может!

  37. Carc > Настройки по умолчанию должны быть изначально подходящими для большинства.

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

    Carc > не стоит пользователя “грузить” возможностями настройки

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

    Carc > удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет

    Такое может произойти и вполне случайно… например во время сбоя системы… отключения электричества и прочего… да мало ли по какой причине.

    Разработчик программы просто обязан предусмотреть поведение своего творения в случаях какого-либо сбоя. Да, действительно не всё можно предусмотреть и тем более не на все можно корректно реагировать, НО если ошибку можно обработать – ее необходимо обрабатывать и если не решить, то, по крайней мере, выдать пользователю ВМЕНЯЕМОЕ сообщение об ошибке и предполагаемых путях ее решения. А пока программы будут писаться тяп-ляп, то и работать они будут также.

    ЗЫ

    Нет, я не пишу программы для атомных станций.
    Если программа некорректно работает в какой-либо самой ненужной и не относящейся к ее основному функционалу “мульке”, то возникает вопрос о ее корректной работе в целом.

  38. in0: Разработчик программы просто обязан

    Прямо таки обязан?:)

    in0: А пока программы будут писаться тяп-ляп, то и работать они будут также.

    in0: Если программа некорректно работает в какой-либо самой ненужной и не относящейся к ее основному функционалу “мульке”, то возникает вопрос о ее корректной работе в целом.

    О, а можно посмотреть ваши программы которые корректно обрабатывают такие “сбои” типа случайного удаления батника, файла метки, ехешника… ?
    Как минимум ожидаю увидить рядом с ехешноком, запакованную копию оригинала ехе, вдруг вирус повредит основной, тогда программа сможет проверить сrc и самовостановится из копии, правда?:)

    Конечно хорошо что бы программа работала хорошо и стабильно в любой ситуации, но есть рамки здравого смысла…

  39. 2Николай: 5 с двумя плюсами, абсолютно со всем согласен.

    2in: если удалят exe-шник ОС и сама выдаст разумное сообщение об ошибке при попытке запуска несуществующего exe-шника.

    Кароче (C) все это уже оверфлуд чистейшей воды. Мы помним как все начиналось, я рассказал про свой способ БЫСТРОГО!!! создания portable-версии, со сравнительно минимальными усилиями, Николай его дополнил своим.

    Если почитать исходный пост, то там четко сказано: смотрим на показатель затрачиваемые усилия\довольство пользователей.

    Можно конечно и мудреннее сделать, и с массой настроек. О чем я же и писал в своем собственном посте – это и так есть у меня уже 100 лет в обед. Все есть ну очень давно, только пользователи хотят ЕЩЕ!! проще, они платят и их мнение уже поэтому перевесит Ваше.

    Но пока “разработчеги” не поймут простой мысли: что самый главный “тормоз” и источник ошибок в программировании это пользователь – разговаривать особо не о чем.
    Именно пользовательские усилия нужно оптимизировать, причем желательно с минимальными затратами – на каждый роток не накинешь платок.

    Ну, а в принципе лично я завсегда не против дискуссии на тему: почему нельзя (или все-таки можно) написать программу для любых задач на все времена подо все платформы и для любых теоретических ситуаций… 🙂

  40. Во-первых, я не говорил ни разу про удаление exe-шников или батников (если вам так показалось, простите). Речь шла только о потере файла-метки и файла-настроек.

    Во-вторых, согласен, что если речь идет о том как быстро сделать программу портативной, то можно использовать и батник и переименование файла. Если же говорить о том, как это должно быть сделано по-человечески и для людей, то … я уже описал, как оно должно быть: оно должно быть просто и прозрачно для пользователя, а самое главное УДОБНО.
    Действительно, переименование файла – это и просто и прозрачно, но это НЕ удобно.

    В-третьих, когда программа создается для пользователей, то и исходить следует из желаний этого самого пользователя. Конечно, невозможно реализовать все их желания – это понятно, они будут постоянно пополняться и пополняться, но на это есть версии вашего ПО.

    В-четвертых, нельзя забывать про пользовательский интерфейс. Пользователю должно быть УДОБНО пользоваться вашей программой, ему должно быть удобно абсолютно все: и установка, и работа в программе, ее обновление и ее удаление. Все это необходимо чтобы у пользователя создалось приятное впечатление от вашей программы, и он знал, что ваши продукты будут такого же качества как и этот, даже если конкретно эта программа ему не пригодилась или не подошла.

    Установка (или первый запуск) программы должен сопровождаться созданием первоначальных настроек и поддерживать два основных режима:

    а. стандартная – наиболее общие и оптимальные настройки программы, которые вы предлагаете использовать.

    б. по выбору – ну раз полез, то и пусть настраивает, но тоже не стоит его здесь “грузить” кучей настроек, которые есть в вашей программе, здесь тоже следует предоставить ему лишь несколько вариантов развития событий, которые опять же вы за него уже определили.

    Программные продукты должны стремиться упростить жизнь пользователя и уменьшить его трудозатраты. К сожалению, уменьшение трудозатрат пользователя всегда ведет к увеличению труда разработчика по этому самому уменьшению и упрощению.
    Вы как разработчик предлагаете пользователю инструмент для решения его задач, и чем меньше усилий будет прилагать пользователь в решении этих задач, используя предоставленный вами инструмент, тем лучше с его точки зрения будет ваша программа. Хотя при этом ваша программа может управлять очень сложным прибором или высчитывать шестнадцатиэтажные уравнения с производными четвертого порядка. Но если пользователь при этом будет называть вашу программу «калькулятором», то значит, вы с задачей более чем справились.

    ЗЫ
    НЕТ, вы не обязаны и не должны, но очень бы хотелось, чтобы вы думали о тех, кто вашими программами пользуется

    ЗЗЫ
    все, что я здесь написал это лишь мое мнение о том, как должна себя вести программа по отношению к пользователям. Всегда стоит помнить о том, что таких программ у пользователя на компьютере стоит ооочень много и ему совсем неинтересно как же именно ему следуте переименовать файл, точбы она наконец-заработала так как он ожидает.

  41. in0: Программные продукты должны стремиться упростить жизнь пользователя и уменьшить его трудозатраты.

    Существует альтернативное мнение, что программные продукты
    должны приносить деньги, а все остальное просто красивые слова.

  42. in0: Во-первых, я не говорил ни разу про удаление exe-шников или батников (если вам так показалось, простите). Речь шла только о потере файла-метки и файла-настроек.

    Прости за длинную цитату, я покажу место, после которого мы подумали что ты говоришь про удаление как минимум батника

    ———————-
    Carc > удалили файл, удалили метку, удалили батник – да вообще в конце концов удалили и exe-шник, тогда и вовсе ни черта работать не будет

    in0>Такое может произойти и вполне случайно… например во время сбоя системы… отключения электричества и прочего… да мало ли по какой причине.

    in0>Разработчик программы просто обязан предусмотреть поведение своего творения в случаях какого-либо сбоя.
    ———————-

    Теперь по существу, можешь аргументировать почему переименования файла не удобно для пользователя. Я все понимаю что программа должна быть удобной, дружественной и так далее и то что специальный визард вызываемый из меню для создания портабельной копии – более удобен, но все-таки чем переименование файла существенно менее удобно чем опция в программе???

    in0: Установка (или первый запуск) программы должен сопровождаться созданием первоначальных настроек и поддерживать два основных режима:

    Собственно, все программы именно так и делают – по умолчанию
    используется наиболее удобный дефолтный набор опций, но пользователь всегда может залеть в настройки и изменить их:)

    in0: Программные продукты должны стремиться упростить жизнь пользователя и уменьшить его трудозатраты.

    Исходя из того что портабельная версия нужна примерно 5% пользователей, а при первом запуске этот процент в районе 1-2%, стоит ли напрягать пользователей лишними вопросами при инсталяции?
    То есть с одной стороны мы стремимся упростить жизнь пользователям и уменьшить его трудозатраты, а с другой – мы заставляем 98-99% пользователей думать и отвечать на глупые вопросы? Точно ли так надо делать?

    Sergey: Существует альтернативное мнение, что программные продукты
    должны приносить деньги, а все остальное просто красивые слова.

    Фи, какой ты меркантильный, хотя в принципе я с тобой согласен:)))

  43. Begemot > мы заставляем 98-99% пользователей думать и отвечать на глупые вопросы?

    Нет, не заставляем, вся эта толпа пользователей воспользуется установкой с дефолтовыми настройками и не будет отвечать ни на один вопрос, кроме согласия с лицензионным соглашением (я говорил о таком варианте установки).

    Begemot > чем переименование файла существенно менее удобно чем опция в программе???

    она неудобна тем, что для этого надо прочитать определенную инструкцию по тому как переделать программу в портативную и именно из этой инструкции узнать, что для этого достаточно переименовать файл. А для того, чтобы прочитать инструкцию, надо знать, где она лежит, и в каком разделе этой инструкции мне прочитать интересующую меня информацию (о том что инструкции бывают больше чем в одно предложение, я надеюсь, вы слышали).

    Sergey > Существует альтернативное мнение, что программные продукты должны приносить деньги, а все остальное просто красивые слова.

    Знаете за какую программу заплатил бы вам любой пользователь? За программу с одной единственной кнопкой “Решить проблему!”, которая бы действительно решала его проблему.

  44. Хочу еще дополнить:

    Begemot > чем переименование файла существенно менее удобно
    чем опция в программе???

    Кроме того опция в программе позволяет тебе, как разработчкику, отследить момент переключения программы из одного режима в другой и, если необходимо, выполнить какие-то действия, например, скопировать настройки из одного места хранения в другое.

  45. in0: она неудобна тем, что для этого надо прочитать определенную инструкцию по тому как переделать программу в портативную и именно из этой инструкции узнать…

    Судя по моему опыту – увидить настройку в опциях, определенная часть пользователей тоже не может сама по себе 🙁

    Если мы говорим о том, что программа сама должна все сделать для перехода в портабельный режим – скопировать настройки, себя и так далее – то согласен это самый удобный и правильный вариант. Но к сожалению, такая идилия крайне редко встречаетя…
    А если выбирать просто между переключением в режим портабельности – 1. установкой флажка в опциях и перезапуском программы и 2. Переименованием программы. То я не вижу большой разницы для пользователя.

    Более того опция доступная все пользователем из которых 95ти% она не нужна – потенциальна даже опаснее, так как стоит пользователю случайно ее отметить – и при следующем запуске он будет весьма удивлен отстуствием его данных 🙂
    А когда пользователь переименовывает программу – он точно знает что и зачем он делает.:)

  46. фуф. Считаю, что мы пришли к взаимному пониманию, по кр.мере в той части как оно должно быть идеально.

    А все остальное уже определяется соотношением трудозатрат разработчика к необходимости того или иного функционала. Если на определенном этапе жизни программы достаточно подхода с переименованием, то пусть он таким и будет.

    Про потенциальную опасность:
    Сам работаю в тех.поддержке, поэтому могу смело сказать одно: если программу можно сломать – ее сломают, куда бы вы не запрятали, то, что ее ломает. Предусмотреть абсолютно полную защиту нельзя. Стремиться к этому можно, но и параноиками быть не стоит.

  47. Begemot: Фи, какой ты меркантильный, хотя в принципе я с тобой согласен:)))

    Вот такие мы, разработчики программного обеспечения. И если кто-то думает, что я ему что-то ДОЛЖЕН, то он глубоко заблуждается.

  48. Да, и ежели что, все это прописано в лицензионном соглашении

  49. А я считаю, что мы – разработчики – все-таки должны… Но только вот завсегда нужен в этом случае один предикат: утром деньги – днем стулья, днем деньги – вечером стулья, вечером деньги – утром стулья :)))))

  50. PS: вообще, мне кажется, мы же пришли по большому счету к общей точке зрения, только чуть разными высказываниями и разными путями.

    Бегемот прав! Портабельность нужна далеко не всем (это сильно зависит от софта к тому же). Какому-то числу процентов – и просто не получится, физически не выйдет бросить на третьестепенную фичу все человеко-(мозго)-ресурсы.

    У Джоэла Сполски есть отличное высказывание: “Извините, но за 100 баксов Вы заказную версию НЕ получите!!!”. Ничего личного – простая экономика.

    А если про направления эмоций разработчиков: то все мы люди, все мы человеки. Я лично доводил свою софтину до отдельной портабельной версии всего лишь по одной единственной просьбе одного единственного, но весьма уважаемого мною по человечески пользователя. Но в любом случае, я даже ради него не могу бросить на это целый месяц, потому как есть и все остальные.

    ЗЫ: кстати по другой занудной просьбе этого же пользователя я убил не один месяц. Но там совсем другой коленкор был: нужно многим, перспективно, да и заюзано может быть в разных продуктах.
    Так что как не крути, а “экономика” работает.