По сообщениям в комментариях к статье про блокнот, во всех версиях Microsoft Excel, начиная по крайней мере с '97 и до самых новых, в имени листа не всегда можно ввести большую букву Ж. Данная проблема обсуждается в сети уже давно, например на этом форуме забавно наблюдать, как некоторые утверждают, что у них проблемы нет, а у других есть, но не всегда, и никто не понимает, почему так. На первый взгляд можно подумать, что это просто недоработка программистов: они хотели не дать пользователю ввести символ ':', и просто не подумали о том, что Ж находится на той же кнопке.
На деле оказалось всё гораздо хуже. Описать нормальными словами то, что происходит в excel, когда вы просто нажимаете кнопку 'Ж', практически невозможно. Поэтому я попытаюсь обрисовать в целом процесс исследования, сократив его где возможно, и не слишком перегружая статью ассемблерным кодом. В итоге мы узнаем, почему получается так, что не любые символы можно ввести, и как это можно исправить.
С чего начать? Поэкспериментируем немного. Оказывается, что иногда ввести Ж в название листа всё-таки можно, причём если уж один раз это сработало, то её можно будет вводить сколько угодно и где угодно, пока не закроешь Excel. А если не получилось, то как ни старайся, ввести эту букву уже не получится никак. Выяснить, почему так происходит, пока не удаётся. Известно одно: скопипастить её можно всегда.
Ну хорошо. Раз ошибка имеется где-то в коде проверки символов, попробуем найти её через действительно запрещённый символ ':'. Копипастим его в название листа, нажимаем Enter, и получаем сообщение, что такие символы не допускаются. Прервём на этом месте выполнение программы. Мы попадаем куда-то в дебри системных вызовов, во главе с user32.dll, общая вложенность 22 в глубину стека. Начинаем искать, как мы сюда попали. Поднявшись примерно на 15 уровней вверх, обнаруживаем следующий код:
Очевидно, здесь в уже набранной строке проверяется наличие всех запрещённых в имени листа символов. Конечно, как мы уже знаем, до этого места буква 'Ж' не доходит, она срубается ещё при нажатии самой клавиши, но можно предположить, что там анализ происходит аналогично. Поищем подобный код в программе. Похожих мест оказывается несколько, и одно из них как раз срабатывает при нажатии клавиши, когда мы находимся в редактировании имени листа:
Пока всё идёт неплохо. При нажатии проверяются те же самые символы. Код немного отличается, ну уж так видно сработал компилятор. Пора выяснить, почему же не вводится буква 'Ж'. Нажимаем её, и тут нас ждёт сюрприз: точка останова не срабатывает! Как же так? Опять приходится возвращаться выше по стеку вызовов. В эту подпрограмму мы попадаем отсюда:
To есть вызывается подпрограмма по адресу, который содержится в регистре rdi плюс 8. Вот только оказывается, что при нажатии большинства клавиш там будет адрес той самой «правильной» подпрограммы, которую мы видели выше. А если мы нажимаем Ж с шифтом (чтобы она была большая), в этом месте оказывается совсем другая подпрограмма. Вот она:
Это подпрограмма типа «давай, до свидания!» То есть она сразу завершается с кодом 1, ничего не анализируется, и нажатая клавиша никуда не сохраняется.
Мы обнаружили классический вызов по таблице. rdi — индексный регистр, его содержимое указывает на таблицу адресов, и в зависимости от его содержимого, вызывается та или иная подпрограмма. Вот эта таблица:
Анализируя код, который с ней работает, удалось выяснить следующее: в начале таблицы — число строк (0Eh = 14), правда почему-то 2 раза. Каждая строка — описание комбинации клавиш. Сначала диапазон скан-кодов (выделен зеленым), затем допустимые состояния shift, alt и Ctrl (биты 4,8,20 — синим), маска для них (красным), и в конце 64-битный адрес подпрограммы (желтым), которая выполняется при совпадении условий. Большая Ж в этой таблице находится в 6-й строчке.
Скан-код 0BAh (VK_OEM_1), при нажатом шифте (4) приводит к вызову 000000013FB0A454 = «до свидания». Если же ни одна из комбинаций не проходит, то в последней строчке срабатывает код от 0 до FF, и вызывается п/п 000000014039530С, часть которой мы видели выше, где всё идёт по обычному плану, и символ попадает в имя листа.
Ну вот. Казалось бы, всё понятно. Программисты не учли раскладку, просто отсекли некоторые скан-коды и в результате ошибка. Теперь осталось только выяснить, как таблица заполняется. Нигде в файлах офиса её нет, значит она генерируется на этапе исполнения. Снова повторяется муторное скитание по многовложенным кодам, которое я пропущу. В этом процессе конечно excel пришлось много раз перезапускать.
И вот, в очередной раз остановившись где-то в недрах mso.dll, я с удивлением вижу, что в этой таблице какие-то совсем другие числа! Так я наконец узнал страшную тайну microsoft excel.
Как видим, здесь теперь не 14, а 13 строк, и в середине другие скан-коды (выделены зеленым). А именно, в шестой строке, там где раньше была буква Ж, теперь shift-6. То есть то же самое двоеточие, только из русской раскладки. То же самое и с остальными клавишами. Вот теперь действительно стало всё понятно. Довольно быстро выяснилось, что таких таблиц тут не одна, а целых 43 штуки (для каждой области экрана, отдельно для основного поля, поля ввода формул и т.д.). И все они заполняются один раз, при первом нажатии клавиши, а заполнение зависит от выбранной именно в этот момент раскладки и больше никогда не меняется.
То есть если после запуска excel при первом нажатии любой клавиши, пусть даже стрелки вниз, выбрана английская раскладка, буквы 'Ж' вы больше не увидите. И наоборот, если раскладка была русская, больших 'Ж' будет сколько угодно, а запрещённым «назначается» shift-б, и, кстати, shift-7 тоже. И после этого назвать лист, скажем, «рога & копыта» уже не получится, хотя символ '&' вроде как разрешён.
Ещё раз напомню, что всё вышесказанное относится к вводу текста в названии листа, а для остальных областей экрана excel таблицы другие, некоторые по 40 и более строк. О том, что там может происходить при нажатии клавиш, лучше не думать.
Тем не менее, исправить эту ошибку можно, и даже проще, чем ожидалось. Оказалось, что исходным материалом для заполнения всех этих таблиц служит текстовая (!) таблица комбинаций клавиш, расположенная в файле XLINTL32.DLL, лежащего в одной из папок офиса. Его часть как раз изображена на КДПВ.
Вот так выглядит фрагмент, касающийся названия листа:
~Sh+~Alt+~Ctrl+Return~Sh+~Alt+~Ctrl+Execute~Sh+~Alt+~Ctrl+Escape~Sh+~Alt+~Ctrl+Cancel ~Sh+~Alt+~Ctrl+Tab:*?Ctrl+;Ctrl+:Ctrl+'Ctrl+"F2Default
Что же делает excel? Он разбирает части этой строки и делает из неё ту самую таблицу, подбирая такие скан-коды, которые приводили бы к вводу нужных символов, с учётом раскладки. Представляете? Он анализирует текстовое представление, чтобы сделать из него таблицу скан-кодов, чтобы потом, при нажатии клавиш, сравнивать полученный код с каждой строкой и вызывать соответствующую процедуру. Заполнять все 43 таблицы при каждом нажатии естественно не годится. Поэтому это делается один раз. Так что программисты не забыли про раскладки, а провели с ними огромную работу. Только одно они не учли — во время работы excel их можно переключать.
Кстати, теперь ясно, почему в русском варианте не 14 строк, а 13. Одна из запрещённых комбинаций Ctrl+' невозможна в русской раскладке, потому что апострофа в ней в принципе нет, поэтому и скан-кода для него не находится.
Вернёмся однако к ошибке. В середине текста видны подряд те самые 3 символа :*? для запрещения. Чтобы всё исправить, достаточно в файле XLINTL32.DLL заменить эти 3 символа :*? на 3 звёздочки, потому что звёздочка на обоих раскладках в одном месте. Это можно сделать с помощью любого двоичного редактора или даже FAR, т.к. он позволяет менять текстовую часть двоичного файла по F4, при этом не испортив его.
После этого excel перестанет отбрасывать нужные скан-коды, и можно будет при любой раскладке вводить большую Ж, '&', '^' и запятую, при этом действительно запрещённые ':' и '?' всё равно не пройдут 2 проверки, которые описаны в начале статьи. Короче всё будет хорошо. И в следующий раз, когда будете набирать какой-нибудь текст в ворде или другом приложении офиса, постарайтесь не думать о том, что там происходит внутри.
Комментарии (86)
ivlis
06.08.2015 20:01+2MSO то ладно, а вот представьте сколько таких багов во подсистемах безопасности и шифрования.
Интересно зачем некорректный символ проверяется 3 раза? И ну и по сканкоду, это сильно конечно.MaximChistov
06.08.2015 20:12+14Интересно зачем некорректный символ проверяется 3 раза?
Разные индусы эти куски кода писали, у каждого было тз такие символы не пропсукать, а вмержились они все одновременно, как вариант,
MacIn
07.08.2015 00:53+2MSO то ладно, а вот представьте сколько таких багов во подсистемах безопасности и шифрования.
Это же совсем разные команды. Прикладники — сами по себе, «ядерщики» — сами и т.д.
SomebodyElse
06.08.2015 20:08+11И эти люди
запрещают мне ковыряться в носуучать меня как нужно писать программы :)goodbear
06.08.2015 21:53+56Когда смотришь вопросы на собеседовании — не иначе гениев набирают.
Когда смотришь на код — и куда они всех этих гениев дели…matiouchkine
07.08.2015 10:52У меня есть небезосновательная гипотеза, что лид продукта в то время, когда писался этот код, спустя некоторое время основал FogCreek и StackOverflow. И вообще, кажется, мужик довольно неглупый.
bitterman
07.08.2015 11:49а как связана разработка VBA с разработкой всего экселя? Или VBA — отдельный продукт, а эксель — отдельный?
matiouchkine
07.08.2015 11:58А как связан ваш вопрос с моим комментарием?
bitterman
07.08.2015 11:59наверное, тем, что Джоел Спольски отвечал всё-таки за VBA?
matiouchkine
07.08.2015 13:15Да вроде нет.
> I left the company in 1994, assuming Bill had completely forgotten me, until I noticed a short interview with Bill Gates in the Wall Street Journal, in which he mentioned, almost in passing, something along the lines of how hard it was to recruit, say, ?a good program manager for Excel?. They don't just grow on trees, or something.
— www.joelonsoftware.com/items/2006/06/16.htmlbitterman
07.08.2015 13:461. как соотносится «лид продукта» и program manager? Сколько менеджеров работают над одним продуктом и как из них называется ответственный за продукт в целом? Который «лид продукта»?
2. в этой же статье отчётливо написано, что будучи «program manager» он разрабатывал подсистему VBA для экселя. VBA < Excel < Microsoft Office < Microsoft, при этом код, отвечающий за букву Ж во страницах экселя никоим образом с Джоэлом не связан.
ishevchuk
06.08.2015 20:10+12Читая статьи о реверс-инжиниринге Майкрософтских программ иногда кажется, что не видя исходный код такое раскопать невозможно...(а это говорит о мастерстве автора :) ).
Или может намного проще понять в чем проблема НЕ имея исходный код, чем бегать по сотням классов/функций в IDE и читать код?iago
07.08.2015 16:15Какой-нибудь крэш одинаково легко. А такую работу, как проделал автор, конечно проще было бы проделать через IDE с сорцами. Он вообще большой умница!
divanikus
06.08.2015 20:26В 2016-м превью вроде бы проблемы нет. Вводиться в любой раскладке. Есть подозрения что могли пофиксить с переходом xslx.
divanikus
06.08.2015 20:28+4Ха, а в постановке с форума действительно не работает:
Эта старинная хохма достигается следующим макаром:
— в ENG-раскладке попытаться ввести двоеточие (:)
— сказать «ой» (ибо не получится)
— переключиться в RUS-раскладку
— попытаться ввести «Ж»
— опять — «ой»
dax
06.08.2015 20:36После таких статей начинаешь понимать, почему Микрософт не любит open source. Иной исходник может неслабо так подмочить репутацию.
creker
06.08.2015 21:38+13Я просто оставлю это здесь
github.com/dotnet
github.com/aspnet
github.com/Microsoft
Первое, что по памяти нашел.zed91
07.08.2015 07:08+3Каждый опенсорсник считает нужным пнуть мс за легаси код, этого не исправить
505abc
07.08.2015 08:37-31) Исправить
2) Не пускать в продакшен такой код. Не пофиксить баг и просто забить, я ума не приложу, как такое можно сделать. Хотя справидливости ради хочеться отметить, что не плохо бы знать частоту появления этого бага. В этой статье эти данный представлены расплывчато.Ubuntovod
07.08.2015 08:51+11) Исправить-то можно, а нужно ли? Когда софт работает идеально — нет повода «пинать».
2) Ошибка не критическая, скорее просто неприятная. К тому же на продажи исправление такого бага не влияет совершенно никак — а соответственно нет повода вкладывать в это дело ни цента. Microsoft может себе позволить не исправлять ошибку, встречающуюся «раз на миллион».
xel
07.08.2015 11:13+1Вы когда пишете код/делаете концепт предусматриваете rtl-языки?
По опыту работы американцы где-то также относятся к другим локалям, европейцы -к другим таймзонам: вроде понятно, что оно существует и даже будет где-то использоваться, но внимания к этому по остаточному принципу.
Вспомните баг в Netscape Navigator — стоило в javascript использовать букву «я», как браузер сходил с ума. Ну а что? Удобно же 255-й код использовать для своих нужд, он всё равно «где-то в неиспользуемой части» ascii-таблицы.Archon
07.08.2015 16:00+2Среднему американскому программисту вообще не приходит в голову, что у клавиатуры может переключаться раскладка. Как раз этим, например, можно объяснить решение Эпла включить всем по умолчанию отдельную раскладку для смайликов. Для американца этот интерфейс прост и понятен: нажали кнопку, включился режим смайликов, нажали ещё раз, он выключился. А про народы, вынужденные писать в двух раскладках, никто и не подумал.
fuCtor
07.08.2015 19:31+5По опыту работы американцы где-то также относятся к другим локалям
Где-то видел, на одном англоязычном форуме, перевод в UTF-8 путем приписывания 0x00 спереди, мол и так работает же.
Muzzy0
12.08.2015 08:58Вы когда пишете код/делаете концепт предусматриваете rtl-языки?
Вы даже не представляете, на какую больную мозоль наступили…
ploop
06.08.2015 20:42+3А у майкрософта есть какой-нибудь багтрекер или нечто подобное?
Автору спасибо, люблю такие детективы. Главное доступно и интересно написано.PastorGL
06.08.2015 21:52Есть suggestion box, excel.uservoice.com
Багтрекер, о котором почему-то никто не знает, хотя он вполне публичный, много лет был на MS connect, но его сейчас постепенно прикрывают.gotch
06.08.2015 22:36+6А знаете почему?
Muxto
07.08.2015 09:52+13Почему?
gotch
10.08.2015 15:16Вероятно потому, что ваше мнение и ваши усилия в направлении улучшения продукта больше не нужны.
MacIn
10.08.2015 15:36Это неверно.
Запросы на форумах TechNet от специалистов, а не конечных пользователей (у меня тут зависло, почините) обрабатываются пасущимися там MSFT.
У меня смешанный опыт: иногда получалось достучаться, иногда нет.gotch
11.08.2015 10:44Есть ли у вас примеры, что в форуме получен ответ или решение, недоступное простому обывателю, внимательно читающему библиотеку Technet?
MacIn
11.08.2015 14:31+1Да. Я дважды получал помощь: один раз оказалось, что в SDK не включены кое-какие .h файлы, я указал на это, они извинились за ошибку и включили их в следующий выпуск.
В другой раз мне нужно было решить одну хитрую задачу с WinJobs, мне подсказали нестандартный трюк. Насколько я помню, это были как раз MSFT участники.
А вот ответа по поводу OLE интерфейсов в RichEdit компоненте ответа получить не смог нигде. Ни через багтрекер, ни через форумы технет, ни через твиттер их техподдержки.
BlackRaven86
07.08.2015 03:28+11Тем не менее, исправить эту ошибку можно, и даже проще, чем ожидалось.
Кстати, позавчера LibreOffice 5 вышел… На всякий случай, вдруг кому :)
idiv
07.08.2015 08:42Это похоже на ошибку Автокада версии до 2009 вроде. Там нельзя было использовать в названии слоя букву Б. К сожалению, не помню, можно ли было сделать копировать-вставить. Причем у них в багах это висело лет 7-8, пока исправили (это важно, так как каждые 3 года они меняют формат файла и в целом вносят много изменений в код, а тут 3 поколения не исправляли).
ef_end_y
07.08.2015 09:54+6MS видимо не понимают, что название состоит из символов, а не нажатых клавиш. Надо проверять само название на валидность, а оно может быть сформировано как с клавиатуры, как еще кучей разных способов, включая ситуацию, когда кто-то залезет в исходник документа и там поменяет символ в обход excel.
Представляете сколько избыточного и тупого кода в других частях системы? Например, проверка клавиш при сохранении файла. И эта проверка может быть своя в каждом продукте. Понятно куда деваются гигабайты на системе виндовсploop
07.08.2015 10:07+1Надо проверять само название на валидность
Тоже спорный вопрос. Зачем ставить ограничение на название? Ладно в ФС, и то там минимум ограничений, слеш и какое-нибудь двоеточие, остальное от лукавого, но внутри документа???khim
07.08.2015 10:21-1Вы когда-нибудь работали с Excel или вообще никогда? Название листа там вполне может фигурировать как часть формулы! Если всякие двоеточия будут допустимы в имени — как это всё будет работать, по вашему?
ploop
07.08.2015 10:52+3Вы когда-нибудь работали с Excel или вообще никогда?
По минимуму.
Название листа там вполне может фигурировать как часть формулы!
Почему бы в синтаксисе не предусмотреть квотирование? Пример из коммента ниже "[Файл]Лист!$A$8" может выглядеть вполне как "[Файл]'Лист: *красненький*, \для Мариванны\'$A$8"
Эти проблемы давно решены.
el777
07.08.2015 10:34Потому что потом вам надо будет делать ссылку на ячейку вида "[Файл]Лист!$A$8". Если у вас будут левые символы, то ссылка не распарсится и что-то обязательно упадет в другом месте или посчитает неверный результат.
Собственно та же самая проблема, что и с названиями файлов — если они сами по себе, то без разницы, а если нужно использовать их где-то, то уже важно название.DmitryAnatolich
16.08.2015 00:27Ой, да ну что за проблема! В T-SQL, значит, можно экранировать [Пробелы и прочую ересь] квадратными скобками в именах колонок, таблиц и прочего, а в Excel проблема так же распарсить?
khim
07.08.2015 10:19-4MS всё прекрасно понимает. Если бы вы дочитали статью до конца, то увидели бы, что символы они тоже проверяют — чуть позже. А тут они хотели сделать «как лучше». Проблема в том, что две раскладки бывают только в ограниченном числе стран: там Греция, Россия, Израиль… если людей из этих стран в команде нет, то может не найтись никого, кто бы осознавал не только то, что в природе бывают раскладки, но и то, что в природе бывают люди, которые их во время работы регулярно меняют — и их довольно много…
P.S. Причём тут именно важно иметь людей именно из этих стран. Эмигранты часто смиряются с тем, что раскладка на клавиатуре не написана и пользуются всякими translit.ru, если им нужно вводить русский текст.vlivyur
07.08.2015 10:37+6Я б сказал что двух раскладок НЕ бывает в ограниченном числе стран, а остальные минимум с двумя и живут. Вот только MS из США, а там как раз она одна.
khim
07.08.2015 11:28-8Опять этот великорусский шовинизм, LOL. «Остальные» — это хто? США и Европа (включая Турцию), Латинская Америка и Китай, Япония и Австралия — все они живут с одной раскладкой. Да-да, даже страны, где пишут иероглифами. Там ввод текста осуществляется совсем особым образом — но именно поэтому проверка скан-кодов никому не мешает. Так что, увы и ах, но это именно страны с двумя кодировками — исключение. Потому с ними и возникают проблемы то в Linux, то в Windows. А вовсе не потому, что софт только в Штатах разрабатывают.
iroln
07.08.2015 12:42+1А это что?
en.wikipedia.org/wiki/German_keyboard_layout
The German keyboard layout is a QWERTZ keyboard layout commonly used in Germany and Austria
khim
07.08.2015 13:41Ммм. Не понял вопроса. Это клавиатура, которой пользуются в германии, QWERTZ, да. QWERTY ни при этом, разумеется, не пользуют, раскладки не переключают, Office и другие подобные «сумасшедшие» программы их не напрягают. В чём проблема?
KReal
07.08.2015 13:44В немецкой раскладке прекрасно можно писать на английском, я гарантирую это.
EvilFox
07.08.2015 13:48-1Там если начать ввод на обычной раскладке, а потом переключиться на эту дополнительную то тот знак что находится где «:» тоже нельзя будет ввести. Вряд ли только он вводится так же часто как Ж.
khim
07.08.2015 14:07Там нет никакой «основной» и «дополнительной». Все многочисленные символы, которые вы там видите вводятся с разными всякими AltGr'ами в основной раскладке и Office со своими трюками это прекрасно поддерживает.
EvilFox
07.08.2015 13:44+1Как-то слишком самоуверено.
Япония
Как вы быстро лишили японцев хираганы и катаканы. У них есть ввод каной. Поэтому в принципе ромадзи там могло и не быть. Просторомадзи навязалиIME очень наворочен и позволяет задать клавишу на переключение внутренней раскладки с кана на ромазди и обратно. У нас к слову тоже есть умельцы которые впихнули в одну раскладку и латиницу и кириллицу и сделали переключение по caps lock (при этом не сломав верхний регистр по Shift, но сломав типичную проверку орфографии). В общем японцам тут чуть больше повезло. А так объективно их нельзя выписывать из списка двух-раскладочных. Сюда ещё можно добавить Корею. Как у китайцев я не знаю.
На память приходит что ещё свои раскладки есть у:
- Армении
- Грузии
- Тайланда
Одна раскладка только у стран где принята в основе латиница (доп знаки они набирают через AltGr) и то как видно в случае Германией есть исключение.khim
07.08.2015 14:05-3Поэтому в принципе ромадзи там могло и не быть.
Не могло. Компьютеры японцы получили с Запада и хотя изначально они тоже были двураскладочниками, но латинница там была изначально. Каны не было — это да.
Как вы быстро лишили японцев хираганы и катаканы.
Вот именно они и вводились на второй раскладке на какой-нибудь MSX. Но в современных системах (хоть Windows, хоть ChromeOS) японцы — однораскладочники.
А так объективно их нельзя выписывать из списка двух-раскладочных. Сюда ещё можно добавить Корею. Как у китайцев я не знаю.
У всех трёх есть переключение режимов внутри одной раскладки. Собственно IME есть пошла из Китая — причём она в ранние времена была программно-аппаратным комплексом, на продаже которого поднялась одна небезизвестная компания. Microsoft свою версию разработал вроде бы независимо, но «по образу и подобию». И, опять-таки: поскольку всё это надстраивалось над QWERTY, то латинница там была в основе изначально.
У меня просто есть знакомый, занимавшийся разработкой ChromeOS. Так вот: первой страной, которая потребовала заморачиваться с двумя раскладками была Россия. Греки и евреи были уже позже. А до этого они «окучили» большую часть мира, включая Японию, часть Латинскую Америки и Африки.
Возможно в какой-то другой, альтернативной, вселенной развитие компьютерной техники могло пойти иначе и там бы Япония и Китай попали бы в список «многораскладочников». Но, увы, на нашей планете этого не случилось и мы с вам попадаем в жалкое меньшинство о котором редко кто задумывается.
Я не говорю, что это хорошо — это просто неизбежно.
sup
10.08.2015 19:54Странам, набирающим символы через AltGr тоже можно свинью подложить, использовав в программе шорткаты Ctrl + Alt + something.
Мало кто из русских программистов знает, что таким образом можно заблокировать ввод некоторых символов туркам, полякам и т.д. 8)
EvilFox
07.08.2015 12:43Какое-то нелепое оправдание. Если продукт идёт на рынок других стран, он должен разрабатываться с учётом их особенностей и тестироваться в том числе в их условиях.
khim
07.08.2015 13:48Microsoft не раскрывает подробную статистику по продажам в разных странах, но есть основания считать, что вряд ли он получает в двураскладочных странах более нескольких процентов продаж.
Если продукт идёт на рынок стран, которые приносят вам 1% дохода, то вы выделите на адаптацию ресурсов ровно столько, сколько он заслуживает. Никто не будет разрабатывать продукт специально для такого рынка. Его доработают — как смогут.
Более того, если вам придётся жизнь людей с этого однопроцентного рынка сильно ухудшить из-за того, что какая-то фишка облегчит при этом жизнь 99% ваших потребителей — это нужно делать особо не задумываясь, так как улучшение продаж на, скажем, 10% на двадцатипроцентном рынке скомпенсирует вам возможные потери с лихвой. Простая математика.
Очевидно тестировщики этот баг не воспроизвели, а если и воспроизвели — то не обратили внимание.EvilFox
07.08.2015 14:25+3Microsoft не раскрывает подробную статистику по продажам в разных странах
есть основания считать что вряд ли он получает в двураскладочных странах более нескольких процентов продаж
Взаимоисключающие параграфы.
Ваши домыслы ничем не подкреплены.khim
07.08.2015 15:21Если вы считаете, что единственные данные, на основании которых можно что-то оценивать — это бумажки, издаваемые Microsoft'ом, то мне вас жаль. Это для компании «рога и копыта», продающей два с половиной компьютера в день невозможно точно узнать сколько точно и кому она продала, но тут мы всё-таки про лидера рынка говорим! Есть данные об объемах рынка, есть данные о распространённости пиратской продукции, есть данные о ценах в разных странах, наконец! Это вполне достаточно для того, чтобы примерно оценить объёмы и перспективность рынков.
muon
10.08.2015 14:11И давно ли Mircosoft стал лидером рынка? По Вашей ссылке он упоминается два раза — 5% в тексте и четвёртое место в графике. Давайте определимся, о рынке чего идёт речь.
А потом определимся, относить ли к «однораскладочным» странам Китай и Индию, с её месивом культур и национальностей.
Muzzy0
12.08.2015 09:11Израиль…
Кто ещё шовинист…
Допустим, что нас тут в Израиле мало и поэтому с локализацией заморачиваются по минимуму — и не только в программном обеспечении. Но есть ещё двоюродные братья (арабы) коих куда больше. А для них актуально всё то же, что и для нас: своя раскладка клавиатуры, RTL. И даже больше: у них количество символов поболее, ибо есть всякие лигатуры и обязательные огласовки (в иврите огласовки опциональны, а реально ли вводить теамим — я даже не знаю).
Кроме того, у арабов даже цифры свои
Maccimo
07.08.2015 11:19В одной из древних, ещё до поглощения Adobe-ом, версий среды разработки Macromedia Flash было невозможно использовать букву «я» ни в коде скрипта, ни даже в комментариях.
Приходилось в таких случаях обходить баг при помощи escape-последовательность \377.khim
07.08.2015 11:35Был такой редактор, одно время очень популярный: MultiEdit. В нём та же проблема была. Причём в DOS это никому не мешало (там символ с кодом 255 — это «неразрывный пробел», который мало кого волновал в те годы), а в Windows (где туда попала полезная буква «я») — это стало просто катастрофой.
Dinir102
07.08.2015 20:10-3Ещё заметил, что блочится "?". Так вот, берём Английский язык и пытаемся поставить знак вопроса (Shift+/). Вопросительный знак не ставится. Переключаемся на Русскую клавиатуру и пытаемся поставить запятую той-же комбинацией. Поздравляю! Вы получили ещё одну нерабочую кнопку :D
ID_Daemon
07.08.2015 20:22+3Это уже есть в статье, и включено в исправление ошибки, описанное в последних 2 абзацах.
sim-dev
Я подспудно всегда чувствовал, что если вопросами искусственного интеллекта займется Microsoft, восстания машин нам не избежать. Не по злому умыслу, а…
edogs
И оно провалится при команде: «1. Убить все[ вы; ивши[» :)
Arkham
А что за прикол с "[ вы; ивши["?
Ubuntovod
«Убить всех выживших» — на традиционной 101-кнопочной клавиатуре символы "[" и «х» находятся на одной клавише. Аналогично ";" и «ж». Такое может вылезти при фильтрации по коду кнопки, а не по символу.
Arkham
Спасибо, а то подумал может ещё какая пасхалка офиса :)
Eternalko
Когда винда накенец-то увидит и распознает мой сетевой принто-сканер, тогда я начну за это опасаться.
Я буду держать всех в курсе и скажу если «началось».
Godless
Да пусть хотя бы локальный Olivetti PR2E увидит…
Muzzy0
Да ладно… Если у них получится искуственный интеллект, то он пройдёт первую же проверку — не будет работать.
Что он, дурной?