Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет dibr ([info]dibr)
@ 2008-09-23 00:30:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
О софте, нытельное
     Насмотрелся на работе на тестер с ком-портом, и решил что хочу себе домой такой же - не тягать же с работы, я ведь его подолгу планирую использовать. И на днях таки купил - благо оно подешевело: какой-то mastech есть аж за 1150р.
     А в комплекте с мастечем шел софт. Ожидаемо-аляповатая программа (правильно - окошко-то разработчику хочется распахнуть пошире, а рисовать в нём особо нечего), не видящая ком-порты выше четвёртого (а USB-COM возжелал сесть на COM10). Программа читает данные с тестера, рисует их красивыми графическими семисегментными цифирками в окошке, пишет лог в табличку, и умеет выгонять записанное в файл. Так вот цифирки на графическом экранчике отрисовываются правильные, а в табличку (и в файл) попадают нули.
     Оказалось, что. Если сходить в настройки системной локали, и заменить десятичный разделитель с запятой на точку, программа начинает работать нормально!
     Причем, поскольку с тестера приходит нечно явно двоичное (видное в терминалке), а графикой рисуются правильные циферки - проблема не в том что программа "не распознаёт" пришедшее с тестера - нужные цифры где-то в пузе программы есть. Программа не может сохранить их - ни в табличку, ни в файл! И придумать, как нужно напороть в коде, чтобы получилось такое поведение, мне пока не удалось. Неисповедимы пути девелоперов, воистину.
     Кстати, сохранять программка умеет в двух форматах: своём собственном (двоичном, не-человекочитаемом), и .xls (и никаких вам "comma-separated"!) Причём для xls программа втихую поднимает в воздух невидимую копию экселя, и засовывает в неё данные. Судя по скорости (30000 отсчётов сохранялись около часа) - засовывает попиксельно поячеечно.

     Впрочем, черт с ними, с поделиями неизвестных студентов - там и не такое бывает, сам такое же пишу иногда. Интереснее коммерческие, и весьма популярные, продукты. Фотошоп, например.
     Создаётся устойчивое впечатление, что в штате адобе есть специальный анти-юзабелист. Работа которого - найти какую-нибудь удобную фишку, и сделать её максимально неудобной.
     Когда-то, при пакетной обработке созданных не в фотошопе jpeg-ов (для которых фотошоп не мог сам узнать нужную степень сжатия при сохранении), фотошоп при сохранении первого в пакете файла спрашивал про настройки сжатия, после чего остальные сжимал так же. Сегодняшний фотошоп считает нужным переспросить про сжатие на каждый файл (а заодно установить system-wide хук на клавишу ESC) - пока работает фотошоп, негоже заниматься чем-то ещё! Впрочем, от этого немного помогает спичка в клавиатуре: ничем другим не позанимаешься, но хотя бы не надо как идиоту лупить по "энтеру" раз в минуту.
     Но это ещё не всё! Антиюзабелисты не спят - если в PS CS3 открыть пачку созданных Adobe(!) Camera Raw файлов, с явно указанной при сохранении степенью сжатия (12, baseline standard), чуть подправить их, а потом выбрать close all - фотошоп мало того что переспросит "сохранять ли" на каждый файл, мало того что выдаст запрос про степень сжатия, так ещё и услужливо подставит для каждого файла сжатие 8, baseline optimized. То есть адобовский продукт, поставляемый в комплекте с ФШ, создал файлы с одной степенью сжатия, а ФШ настойчиво предлагает другую. Чтобы, в рамках тсзть автоматизации, юзер на каждый файл жал "yes", набирал 12, два раза табуляцию, стрелку вверх, энтер. При том что когда-то было достаточно одного "энтера" на все файлы. Офигеть.

     На фоне этого то, что в новой опере ctrl/Z в поле ввода в формочке иногда вместо undo извлекает последнее окно из корзины (фокус ввода в поле ввода, курсор мигает) - это фигня :-)

     Всех убью, один останусь!


(Добавить комментарий)


[info]sadmitry@lj
2008-09-22 18:40 (ссылка)
Когда-то делал снимки с веб-камеры. Делать это в родном софте - проблема.
На каждый кадр надо было тянуться к мышке, жать левую кнопку, вводить имя файла, жать на клаве Еnter...
Выручил WSH :) С его помощью я эмулировал нажатия на кнопки. Я сильно его не копал, но подозреваю что можно ловить момент появления окошка с нужным титлом и эмулировать нажатия на нужные кнопки.

(Ответить)


[info]dimon_w@lj
2008-09-23 03:24 (ссылка)
С проблемой, когда установки вида десятичного разделителя влияли на работу программы я сталкивался, помоему, я тогда заставлял некую программу на Лиспе (под автокад) общаться с какой-то базой данных. (проблема в чем-то про SQL, но могу и наврать, давно это было, а с тех пор я и не программировал.)

(Ответить) (Ветвь дискуссии)


[info]dibr@lj
2008-09-23 05:01 (ссылка)
Очень хочется верить, что SQL они в эту хренотень не засунули :-)))

(Ответить) (Уровень выше)


[info]demon_nn@lj
2008-09-23 07:16 (ссылка)
Тоже встречался с проблемой зяпятых и точек.
Веся причина в двойной конверсии действительное -> строка -> действительное. Первое преобразование происходит внутри программы средствами "рантайма" и без учета выставленной локали (т.е. по дефолту - английской с разделителем точкой). Далее, полученные строки через COM пихаются в табличный элемент управления и через OLE в эксель. А внутри этих высокоуровневых примочек данные пребразуются к указанному типу (действительному), но уже с учетом локали.

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

(Ответить)


[info]tarnyagin@lj
2008-09-23 19:06 (ссылка)
Та же ляпа с десятичным разделителем присутствует в Microsoft Visual Studio 6.0 SP6 (последний сервис-пак на сегодня.. и, видимо, навсегда). Как в C, так и в C++.
Если в локали в качестве разделителя целой-дробной части указана не точка, дробная часть литералов с плавающей точкой молча обрезается. В отличие от мультиметра, в данном случае баг порождает новые баги, в собранном софте число "пи" окажется равным трём.. и это наверняка где-то работает...

(Ответить)