Bugs / Найденные баги (1)

Russian main discussion
Locked
  • Author
  • Message
Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

VladSh wrote:opk44
Я об этом писал здесь. После обновления до preSP4 этот баг прошёл, похоже, что всё-таки это было связано с "внутренностями" Винды.
Хорошо, давайте остановимся на том, что описанное поведение AkelPad связано с ошибкой стандартного Microsoft ListCtrl при использовании стиля LVS_EX_GRIDLINES в ComCtrl6 (XP). Какие у кого есть варианты?
Вариант 1: Продолжать жаловаться на Microsoft и ничего не делать. (Вариант хорош уже тем, что можно ничего не делать :) ).
Вариант 2: Дождаться когда ВСЕ установят SP3 и баг рассосется сам-собой. Нереалистично. Да и размер 3-го сервиспака, если кому интересно, больше 300Мб. Тем кто платит помегабайтно, накладно выйдет.
Вариант 3: Если как следует из слов FeyFre "у программиста нет доступа к оконной процедуре Контрола List Control", то в наличии доступа к оконной процедуре того окна, на котором этот Контрол расположен сомневаться не приходиться. Почему бы тогда не обрабатывать нужные события в ней и не обновлять в ответ на них все окно целиком? (Например при потере приложением фокуса, и его последующем восстановлении, примерно это и происходит, в результате чего сетка восстанавливается).
Вариант 4: Придумать что-то еще.

P.S. Уважаемый FeyFre! Ища виноватого Вы самому себе противоречите.
"И чья это вина? Того окна которое их не обрабатывает..."
Но ListCtrl используется не "сам по себе", а размещен на окне "Плагины". Окно "Плагины" является "начальником", а ListCtrl - "подчиненным". Так вот начальник должен отвечать за своих подчиненных. Это принцип управления. Допустим качество работы, выполненной подчиненным, начальника не устраивает. Тогда он либо вынужден выполнять эту работу сам, либо должен уволить этого подчиненного и нанять более квалифицированного. Других вариантов у него нет. Если кассир обсчитал покупателя в магазине, то покупатель идет требовать возмещения с менеджера или с директора магазина, а не идет к маме того кассира с требованием родить нового.
То же и с программированием. Если Вы разместили чей-то готовый элемент на СВОЕМ окне, то Вы его "наняли", и с этого момента только ВЫ отвечаете за его поведение в ВАШЕЙ программе.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Это принцип управления.
Я покупатель ОС Windows XP(либо другой). Я заплатил бабки, за право запускать на своём железе. Как видим ОС Windows XP не выполняет заявленного, несчастный список прорисовать не может. И тем не менее бабки уплачены. Это уже называется Права потребителя. И тут роли не играет кто я программист или пользователь.

С точки зрения программиста: моё окно не должно беспокоится о каком-либо дочернем окне если оно используется по инструкции. Я, Инструктор, Петя из камчатки этот контрол используют соотв. инструкций(MSDN) а раз так, то не нашей башке болеть о проблемах этого контрола, а тому кто гарантирует его работоспособность. И конечным пользователям наших не рекомендуется упрекать нас разработчиков в том, что чей-то там не наш контрол не работает как нужно, мы его не разрабатывали, мы его применили имея гарантию работоспособности от производителя. Если гарант будет игнорировать проблему либо нам важно чтобы эта проблема не мешала, мы пойдем иным путём - будем использовать иную библиотеку работоспособных виджетов(QT, GTK и т.д. и т.п.).
Мне вот некоторые мелкософтоские баги сильно мешают. Но я не обязан их решать. Они обязаны решить.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Ваша точка зрения понятна. Я ее не разделяю, но признаю за Вами право думать именно так, а не иначе.
Теперь готов дать дополнительные пояснения своей точки зрения.
Вспоминается монолог А.Райкина:
- К пуговицам претензии есть?
- Нет. Пришиты намертво, не оторвешь. Я Вас спрашиваю: Кто сшил костюм?
1) Вы утверждаете, что
"Как видим ОС Windows XP не выполняет заявленного, несчастный список прорисовать не может."
Очевидно, что это не так, поскольку сообщения двух пользователей установивших SP3 и выше свидетельствуют о том, что на уровне операционной системы данный баг был Microsoft исправлен. Так что права потребителей OS ее изготовителем соблюдены. Другое дело, что существует большое число пользователей, которые по тем или иным причинам не установили и не установят данного обновления. Поэтому я и назвал второй вариант решения проблемы нереалистичным.
2) Вы утверждаете, что
И конечным пользователям наших не рекомендуется упрекать нас разработчиков в том, что чей-то там не наш контрол не работает как нужно, мы его не разрабатывали, мы его применили имея гарантию работоспособности от производителя.
Тем самым, вы снимаете с себя всякую ответственность за СВОЙ конечный продукт, ссылаясь на "некачественные комплектующие". Воспользуюсь такой метафорой. Если у Покупателя сломался электрочайник, то он несет его в Магазин и тот в установленные законом сроки обменивает электрочайник на исправный. Но ведь Магазин этот эл.чайник не изготавливал! Тем не менее именно Магазин несет ответственность перед Покупателем за исправность товара и не отсылает Покупателя со своей бедой на Завод, где этот электрочайник был произведен. Теперь идем дальше. Допустим Магазин обращается на Завод с рекламацией на неисправный электрочайник. На Заводе же выясняется, что шнур из Малайзии, спираль из Китая, а сам Завод делает только корпуса и выполняет сборку. Но вот корпус-то как раз исправен, а спираль и шнур - нет. И все потому, что комплектующие поставили на Завод с нарушением спецификации и те не сопрягаются друг с другом должным образом. Но за изготовленный чайник отвечает Завод, а не отсылает Магазин ни в Малайзию ни в Китай ремонтировать шнуры и спирали! С поставщиками "неправильных" комплектующих Заводу предстоит разбираться самому, либо изменив порядок сборки и конструкцию чайника добиться того, чтобы готовые чайники из имеющихся деталей работали как надо. Таков принцип ответственности.
Если же следовать вашей логике, то:
- Всем Покупателям нужно разыскивать фабрики производящие шнуры и спирали к чайникам, а вовсе не в Магазин идти чайник обменивать;
- Не рекомендуется упрекать повара, если его суп невкусный. Тут не вина повара, сварившего его "точно по написанному рецепту", а виноваты поставщики соли и картошки;
- Не рекомендуется упрекать АвтоВАЗ в том что он производит плохие машины. Виноваты же не они, а только поставщики комплектующих;
- Не рекомендуется упрекать врача, если больному лечение не помогает. Не его же вина а тех, кто разработал не достаточно хорошие лекарства.
Неужели Вы готовы согласиться с каким-то из этих примеров? А если нет, то почему в отношении разработчиков ПО должны применяться иные критерии оценки "по результату"? На мой взгляд программист несет ответственность за свою готовую программу в той же мере, в какой и повар за сваренный им суп.
На этом все.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

В общем-то, все программисты так или иначе сталкиваются с кривым окружением и необходимостью изобретать хитрые трюки для их исправления. Это могут быть используемые компоненты или утилиты, или же АПИ. Приходится подстраиваться - а что делать? Вебкодеры уже сто лет как подлаживаются под ИЕ. Да и заказчика не колебёт, почему та или иная функция не пашет, даже если в этом действительно виноват Билл Гейтс.

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Очевидно, что это не так, поскольку сообщения двух пользователей установивших SP3 и выше свидетельствуют о том, что на уровне операционной системы данный баг был Microsoft исправлен
Точно? А как вам:
Image
Тем самым, вы снимаете с себя всякую ответственность за СВОЙ конечный продукт, ссылаясь на "некачественные комплектующие". Воспользуюсь такой метафорой. Если у Покупателя сломался электрочайник, то он несет его в Магазин и тот в установленные законом сроки обменивает электрочайник на исправный. Но ведь Магазин этот эл.чайник не изготавливал!
Не корректный пример. Не сравнивайте отношения Изготовитель-Покупатель с отношениями Изготовитель-Посредник-продавец(магазин,издатель)-Покупатель. Это разные схемы распространения, и тем более разные виды продукции.

Offline
Posts: 124
Joined: Tue Jun 03, 2008 10:32 pm

Post by Xephon »

Воспользуюсь такой метафорой. Если у Покупателя сломался электрочайник, то он несет его в Магазин и тот в установленные законом сроки обменивает электрочайник на исправный. Но ведь Магазин этот эл.чайник не изготавливал! Тем не менее именно Магазин несет ответственность перед Покупателем за исправность товара и не отсылает Покупателя со своей бедой на Завод, где этот электрочайник был произведен.
Интересная метафора от человека, пользующегося бесплатной программой. Только в данном случае больше подходит другая "метафора":
Эта программа предоставлена владельцами авторских прав и/или другими сторонами "как она есть" без какого-либо вида гарантий, выраженных явно или подразумеваемых, включая, но не ограничиваясь ими, подразумеваемые гарантии коммерческой ценности и пригодности для конкретной цели.

Offline
Posts: 31
Joined: Fri Apr 17, 2009 5:47 pm
Location: Гдето под Питером

Post by Evgenyatam »

по моему эта проблема - мелочь чисто косметическая. а вы тут устроили холивар.

Offline
Posts: 19
Joined: Mon Feb 15, 2010 9:00 am

Post by iglezz »

Словил сегодня багу....

Исходные данные:
MS Windows XP SP3, работает под VirtualBox (Хост Debian GNU/Linux), сетевые папки реализованы через VirtualBox Additions
Akelpad версий 4.0.0—4.4.1 и v3.7.4 (плагины и прочее удалены, оставлен один exe-файл)
Редактируемый файл находится на сетевой папке (\\VBOXSRV\***, смонтирована как диск)

Содержимое исходного файла (1):

Code: Select all

123
456
789
hexdump:

Code: Select all

00000000  3132 330d 0a34 3536 0d0a 3738 39        123..456..789
Создаём дубликат под именем 2, открываем и удаляем строку (<Shift+Down>, <Del>). Результат (hexdump):

Code: Select all

00000000  3435 360d 0a37 3839 0d0a 3738 39        456..789..789
Создаём дубликат под именем 3, открываем и удаляем один (первый) символ (<Del>). Результат (hexdump):

Code: Select all

00000000  3233 0d0a 3435 360d 0a37 3839 39        23..456..7899
Создаём дубликат под именем 4, открываем и удаляем два (первых) символа (<Del>, <Del>). Результат (hexdump):

Code: Select all

00000000  330d 0a34 3536 0d0a 3738 3938 39        3..456..78989
Баг этот у меня стабильно воспроизводится, если ожидается уменьшение размера отредактированого файла.
gVim, Notepad++ и стандартный notepad работают стабильно.

add:
Второе... Может баг, а может фича...
К файлу без расширения при сохранении через "Сохранить как" приклеивается .txt, если в конце имени файла не поставить точку.
То есть
"test" сохраняет как "test.txt"
"test." сохраняет "test"

Хотелось бы иметь возможность сохранения "test" как "test" без дополнительных телодвижений.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

iglezz
Словил сегодня багу....
Насколько я понял из описания - похоже на то, что VirtualBox'ом (или еще кем то) игнорируется флаг TRUNCATE_EXISTING в вызове CreateFile.
Второе... Может баг, а может фича...
Второе.

Offline
Posts: 31
Joined: Fri Apr 17, 2009 5:47 pm
Location: Гдето под Питером

Post by Evgenyatam »

iglezz wrote: Второе... Может баг, а может фича...
К файлу без расширения при сохранении через "Сохранить как" приклеивается .txt, если в конце имени файла не поставить точку.
То есть
"test" сохраняет как "test.txt"
"test." сохраняет "test"

Хотелось бы иметь возможность сохранения "test" как "test" без дополнительных телодвижений.
это глобальная фича. ms word, delphi, 1c, c++ builder и многие другие программы так действуют. и мне бы не хотелось чтобы оно потерялось.

Offline
Posts: 19
Joined: Mon Feb 15, 2010 9:00 am

Post by iglezz »

это глобальная фича. ms word, delphi, 1c, c++ builder и многие другие программы так действуют. и мне бы не хотелось чтобы оно потерялось.
Поле применения текстового редактора обычно несколько шире, чем у вышеуказаных программ. За годы использования vim/nano и scite/notepad++ привык как-то, что файл сохраняется с именем _которое_задано_мной_ и без отсебятины со стороны используемой программы.

Не подскажет ли уважаемый Instructor, что необходимо ковырнуть в исходниках, чтобы изменить поведение при сохранении на более предсказуемое для меня? Собственных знаний, увы, не хватает... :(

add:
Скачал на всякий случай последнюю версию из ветки 2.0 — там баг с сохранением отсутствует. Благодаря наводке на TRUNCATE и подсмотрев, как этот кусок кода выглядел в v2.х, решил проблему заменой

Code: Select all

hFile=API_CreateFileA(szFile, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, (dwAttr != INVALID_FILE_ATTRIBUTES)?TRUNCATE_EXISTING:CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
на

Code: Select all

hFile=API_CreateFileA(szFile, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN, NULL);
ну и FileCreateW тоже по аналогии.
Бага пропала. Теперь ещё вопрос к Instructor — Какие преимущества/недостатки/потенциальные проблемы имеются у такого решения?

Offline
Posts: 98
Joined: Thu Jul 03, 2008 7:23 pm

Post by Tony »

Settings... -> Editor -> Wrap
В полях Limit и Marker минимальное значение не 0, а -1, что посути нереально в практике :)

Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

iglezz
По вопросам работы АкелПад-а с не MS платформами становитесь в очередь за мной:
1. У меня под winelib акел не строится без шаманства(пара деклараций в исходниках акела не согласована с PlatformSDK, что спокойно глотается MinGW но не переваривается gcc)
2. Построенный Акел под winelib не отображает меню вообще.
3. Нативный Акле под Вайн не слушает половины акселераторов, не говоря уже что не работают 90% плагинов.
Не подскажет ли уважаемый Instructor, что необходимо ковырнуть в исходниках, чтобы изменить поведение при сохранении на более предсказуемое для меня? Собственных знаний, увы, не хватает... :(
Вам сюда http://www.microsoft.com/

Offline
Posts: 19
Joined: Mon Feb 15, 2010 9:00 am

Post by iglezz »

FeyFre
Мне akel как-раз под Windows нужен, под Linux есть куда более подходящие вещи вроде vim|emacs.
Там уж тем более не найду. Я не программист.

Offline
Site Admin
Posts: 6403
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

iglezz
...что необходимо ковырнуть в исходниках, чтобы изменить поведение при сохранении на более предсказуемое для меня?
Тут достаточно ResHacker'ом "txt" заменить на "" в AkelPad.exe->StringTable->7->110
Какие преимущества/недостатки/потенциальные проблемы имеются у такого решения?
TRUNCATE_EXISTING было добавлено, потому как у некоторых пользователей наблюдались подвисание AkelPad'а при сохранении файлов по сети.

Tony
Settings... -> Editor -> Wrap
В полях Limit и Marker минимальное значение не 0, а -1, что посути нереально в практике
AkelPad 4.3.4:
Добавлено: если маркер и/или лимит переносов равны -1, то их расстояние равно ширине печатной страницы (используйте моноширинные шрифты).
Locked