Думается, а что могло быть далее крупным внедрённым в цивилизации изобретением, поразительным, в крупном масштабе применяемом, компьютеры, гаджеты, софт, интернет, нейросети, ... что ещё нагрянет?
А кроме "внезапно врывающегося" есть последовательно развиваемое, меняющееся.
💡 Оказывается, даже обычные давно известные вещи можно "оптимизировать". "Апгрейдить, разогнать, улучшить производительность"? Иногда это можно сделать, почти не вмешиваясь в конструкцию, единственное изменив это алгоритм работы. Только вдумайтесь...
❓ Не меняя сами вещи, а только алгоритмы, схемы их работы менять, что можно улучшить!???
Что-то поменяется от изменения, возможно будет какой-то выйгрыш. А есть ли такие простые алгоритмы, до которых мало кто догадывается?
Вот например светофоры могут стоять одни и теже, а переключать их можно по разному, то есть подобрать такой алгоритм, при котором транспорт в общем меньше скапливается и стоит, быстрее проезжает перекрёсток.
Что казалось бы можно улучшить в знакомой с детства вещи, даже не меняя сами правила "на красный запрещено движение, на зелёный разрешено, на жёлтый готовься"? Мало кто задумывался. 🚦
✨ Строго говоря, алгоритмы заметно стали часто менять лишь недавно, но сами светофоры тоже апгрейдили, меняли не раз в истории. Какие изменения были?
В конце 90х-начале 2000х стали появляться светофоры с светодиодами вместо лампочек накаливания. Ярче, надёжнее, и меньше потребляют электроэнергию.
На светофорах стали появляться цифровые значения времени в секундах. Удобно знать, сколько ждать.
Дополнительные секции и стрелочки на светофорах это далеко не новое изобретение, в СССР уже были некоторые светофоры с стрелками, а в России стало гораздо больше их.
Раньше были наиболее распространены просто круглые линзы, а теперь на пешеходных переходах повсеместно светофоры с контуром человечков.
Увеличивалось количество перекрёстков и переходов, оборудованных светофорами. В СССР транспорта было меньше. Если смотреть на проспекты, то точно, трафик стал гуще. А если на тихие узкие улицы в спальных районах? Местами, кажется, движение почти как тогда. Но светофоры поставлены и работают даже когда пусто на дороге.
Внедрение кнопок для пешеходов уже было в СССР, но на единичных светофорах. В 1990-е переходов с кнопками стало чуть больше, но помню, кнопки часто не работали и были разбиты... Да тогда многое что было разбито.
В 2000-е, и в 2010-е было поставлено множество светофоров в тех местах, где их раньше не было. И до сих пор процесс идёт, но гораздо менее активно (везде на перекрёстках уже наставили светофоров, но продолжают находить новые места, делать новые переходы на участках дорог меж перекрёстками)
Применение кнопок стало очень частым, теперь они не разбиты, не заклеены жевачками, кнопки эти обычно выглядят чистыми.
❗ Но светофоры работают по разному! Многие - сами переключаются, а некоторые переключаются только если пешеход нажмёт кнопку. (Бывают надписи "нажмите кнопку и ждите разрешающего сигнала светофора". Но, там не сказано, обязательно ли это! Будет ли светофор сам переключаться когда нибудь, сколько ждать, неизвестно...)
❓ Как поступать, задерживать ли транспорт ради одного пешехода!? Предпочитаю подождать, либо ещё народ подойдёт, либо транспорта станет меньше и так проскочу.
***
💥 Поговорим о меняющихся алгоритмах. Во первых, после распространения светофоров с стрелками были изменения в алгоритмах, стрелки вбок зажигали то вместе с прямо, то отдельно, с этим мудрили. Но такие изменения работы светофора замечали лишь внимательные водители.
Теперь возьмём, допустим, обычный перекрёсток с светофорами без стрелок. С детства всем знакомый алгоритм, просто переключения, если прямо - зелёный свет авто и пешеходам, то поперёк - красный и наоборот.
❓ Казалось бы, схема проста, привычна, лаконична, а усложнять тут нечего, только портить. Что можно намудрить, рационализировать, оптимизировать так, чтоб заметили все и удивились, что почему-то не догадывались до такого раньше!?
А вот оказывается, можно!
Сделали так: зелёный для транспорта на дороге прямо, затем на дороге поперёк, а затем... зелёный только для пешеходов сразу и прямо и поперёк, в всех направлениях.
Какие плюсы такой схемы? Когда зелёный для пешеходов, то на перекрёстке нет машин. Снижаются риски происшествий.
Быстрый пешеход успеет за раз перейти две дороги, прямо и поперёк. А некоторые идут перекрёсток по диагонали.
Но время на переход сокращено, например - изначально было как у транспорта две разных зелёных фазы по 50 секунд, затем у пешеходов сократили, сделали две по 20 секунд, а затем сделали одну 25 секунд - отдельно от транспорта и сразу в всех перпендикулярных направлениях перехода.
Для автомобилистов допустим, осталось две фазы по 50 секунд так же как и было, добавилось 25 сек ожидания пешеходов, но стала вероятность заторов ниже и удобство проезда.
При поворотах автомобили больше не останавливаются чтоб пропускать пешеходов (ведь у пешеходов в это время красный сигнал светофора), по идее это помогает быстрее и проще проехать перекрёсток, сократить риск заторов и аварий.
Плюсы очевидны. Но почему-то раньше на такой алгоритм не переводили светофоры.
❓ А какие минусы? Увеличение ожидания для пешеходов...❗
💥 При классическом алгоритме пешеход стоял и ждал, допустим максимум 50 секунд - ровно столько, сколько и водители ожидали включение зелёного, он горел и для транспорта и для пешеходов одинаково.
💥 При алгоритме с сокращённым до 20 сек. временем зелёного света на переходе: 50+50-20 (оба направления движения машин за вычетом времени зелёного света для пешеходов)
💥 А при новом алгоритме с отдельным движением пешеходов можно попасть на двойное ожидание, в худшем случае, пешеходу стоять и ждать когда авто проедут, например, 50 секунд в одну сторону + 50 в поперечную, и только затем для пешеходов загорится зелёный свет светофора.
❓ А что можно намудрить ещё?
Добавили на светофоры стрелки и специальные дополнительные зелёные фазы для транспорта, который поворачивает налево. Прямо и направо - одна зелёная фаза, а затем налево другая. (Это отличается от классического популярного применения стрелок на светофоре - правых) Нововведение, распространяются именно отдельной фазой левые.
То есть, когда горит только стрелка налево, в это время на перекрёстке запрещено движение транспорта прямо, не сталкиваются, и для поворачивающих больше нет нужды стоять, скапливаться в центре перекрёстка и уступать дорогу едущим прямо, вместо задержек сразу поворачивают налево.
Сам проезд перекрёстка стал более удобный и безпрепятственный, но поворачивающим нужно стоять перед светофором и дожидаться пока загорится стрелка налево. А когда горит одна стрелка, то стоят те кто хотел ехать прямо.
Получается, при плотном трафике автомобили стоят и скапливаются перед светофором, вместо того чтоб скапливаться и вставать в затор на самом перекрёстке. Перекрёсток становится свободнее и безопаснее, аварий и заторов меньше. Надеюсь, нововведения не просто так ввели, а протестировали, опробовали, изучили статистику происшествий, пробок и аварий.
💥 Можно ещё кое-что изменить в алгоритмах - тот момент, когда транспорт едет в ограниченных направлениях, можно использовать чтобы в это время двигались пешеходы по переходам на пустующих направлениях.
❓ Но что ещё можно намудрить!? А вот оказывается, можно ещё усложнить, "оптимизировать"!!! В последнее время стало заметно, что алгоритмы вновь поменяли на некоторых перекрёстках!
Там, где есть стрелки транспорту, и есть разделительные полосы в середине дороги, островки для пешеходов.
💥 Придумано - для пешеходов стали зажигать зелёный свет только на половинке перехода дороги...
Когда такое нововведение видишь на том перекрёстке на котором была другая схема, недоумеваешь, неужели светофоры сломались.🤔 Такая схема сложнее и непросто прикинуть преимущества. Дополнительное время, или наоборот, урезанное?
По ощущениям не сильно отличается от предыдущей схемы. Но разработчики алгоритмов должны обосновать, просчитать, доказать, чем лучше обновление.
Возможно, выгода есть, увеличение так сказать пропускной способности перекрёстка.
❗ А с точки зрения пешехода... неприятно, неудобно, и провоцирует на нарушения. Например - видишь что на половинке дороги горит красный, а на той, дальней половинке, зелёный. Думаешь - ну, если дожидаться тут зелёный, то там может загореться красный и опять придётся ждать (а вдруг ожидание будет долгим, пока проедут машины в всех направлениях). Тянет быстрее перебежать половину проспекта на красный, чтоб спокойно успеть на зелёный на второй половине перехода... ❗❗❗ И если зрение не острое, то плохо видно число секунд на дальнем светофоре. Там может быть больше, а видно размыто и думаешь что осталось немного, торопишься.
Такой алгоритм конечно оптимизирован, и в нём для пешеходов зажигают зелёный на половинке дороги - там где стоит транспорт и пусть пешеходы в это время переходят а не стоят. Да, логично. Но не учтена психология пешеходов. Непривычность как к новому алгоритму, так и непривычность вообще останавливаться на полдороге, "начал переход - надо завершить".
Если переходить в обратную сторону - где сначала на половине перехода дороги горит зелёный, а на второй половине другой светофор где горит красный, то пешеход будет недоволен что "так мало времени дают на переход" и подумает что прошёл по правилам на зелёный половину и более чем половину(разделительный островок имеет большую ширину), соблюдал правила для приличия когда вступил на перекрёсток и начал переход, а теперь осталось совсем немного, и решит уже не так строго соблюдать. На второй половине перехода кажется, что менее вероятно что поступок перебегания будет замечен и легче будет скрыться, - ведь вон, осталось совсем немного до тротуара, толпы, домов, дворов...
Заодно накладывается знание Правил - мол, если начал переход или проезд на зелёный и не успеваешь, разрешено завершить начатое, и более того обязаны скорее освободить дорогу. (Это относится только к одному месту которое регулируется светофором. А если светофоры идут последовательно, регулируют по отдельности половины перехода - как два отдельных перехода, и поэтому правила обязывают подчиняться по отдельности каждому из светофоров, и если первый перешёл на зелёный, это НЕ даёт право перейти второй переход на красный)
❓ А ещё что-нибудь можно оптимизировать в алгоритмах?
Ну, не только сам алгоритм переключений менять, а длительность фаз подстраивать тоже можно.
💥 Если на одном из направлений скапливается больше транспорта, то там зажигать зелёный на относительно большее время. Камеры следят за трафиком, алгоритм регулирует светофоры, старается сделать чтоб красный горел в среднем поменьше, чтоб было в общем меньше задержек. О таких разработках пишут уже давно, и наверняка где-то внедряют, но где именно такие динамично регулируемые светофоры, не знаю.
💥 Управление целой последовательностью перекрёстков.
Помню, читал ещё в советских журналах, ещё тогда были идеи "зелёной волны" для отдельных проспектов. Кое-то даже начали внедрять. А ещё планировали управление движением в районах, городах.
Вот транспорт едет на зелёный, едет с рекомендуемой скоростью и тогда на следущих перекрёстках успевает проехать на зелёный свет. Самая простейшая система "зелёной волны" работала автоматически без регулировки, просто подобрано время зажигания светофоров.
В более сложной системе присутствовали камеры наблюдения, диспетчер, и пульт дистанционного управления светофорами. Ещё в советское время были такие разработки, но, где именно их применяли, на каких проспектах? В Москве вроде бы и не только, в крупных городах.
☝️ В 90-е в народе ходили слухи, что в крупнейших универсамах есть системы видеонаблюдения за покупателями, мол, охрана сидит где-то и смотрит на экраны.
А о уличном наблюдении и регулировке движения тоже ходили слухи, якобы гаишники сидят где-то в диспетчерской и наблюдают за движением как минимум на самых крупных проспектах.
💥 Ходили слухи, анегдоты, байки, что диспетчеры могут на заказ делать зелёный на всех светофорах по пути для беспрепятственного проезда кортежа чиновника или богатого олигарха, нового русского. И наоборот, чтоб задержать кого-то, могут включить ему красный свет.
В то же время, вопреки этим слухам, было видно что в реальности при проезде кортежей высоких чиновников гаишники физически присутствуют на каждом перекрёстке. И было видно, как открывают крышечки ящиков на светофорах, в этих ящиках оказывается пульт с кнопками для управления светофорами. То есть, не дистанционно переключали светофоры, а присутствуя на местах.
А дистанционное наблюдение и управление? Уже тогда в принципе были технические возможности. А сейчас тем более это возможно.
❓ Что в дальнейшем? Камеры много где стоят и будет ещё больше слежения за транспортом и пешеходами. Диспетчеры не будут сидеть постоянно смотреть вид с каждой камеры, сотрудники будут лишь проверять как работает система.
Наконец-то будут реализованы для пешеходов переходы без всяких кнопок! Пешеход подходит - а светофор с камерой и алгоритмом видит и разрешает переход, включая зелёный. (Но надо будет продумать алгоритм и предусмотреть случаи что пешеходы будут стоять и не собираться переходить, сделать чтоб не задерживали движение)
Алгоритмы, нейросети будут штрафовать за нарушения, к сожалению, будут более зоркими. Будут регулировать движение, смотреть, если скапливается затор, то перенастроить светофоры оптимальнее для пропуска трафика с меньшей задержкой. Дальше будут замечать закономерности и "предсказывать" заранее, за несколько шагов ещё до скопления затора действовать на опережение.
💡 Кроме светофоров есть другие способы регулировки движения. Например, сделать чтоб навигаторы у водителей строили маршруты в обьезд узких мест, заторов.
До синхросистемы далеко, но шаги уже делаются.
Не регулировать запретом и требованием остановки, а синхронизировать движение. Появляются беспилотные автомобили. Их проще синхронизировать, чем мозги своевольных водителей.
***
❗❓ Где ещё можно, всего лишь поменяв алгоритм, схему работы, распорядок, тактику действий, получить какую-то существенную оптимизацию, выйгрыш? 💥 Это может быть в самых различных местах, применениях.
Производство, быт, спорт, игры, бизнес, и другое.
Везде есть какие-то типичные, привычные схемы действий. И разве можно изобрести как действовать чтоб получить лучше результат? Неужели можно совсем что-то немного поменять... или непременно нужно очень менять действия и прилагать усилия чтоб получить заметный выйгрыш?
Вот например, программирование - это очень яркий пример, ведь там пишутся алгоритмы, схемы. И быстро запускаются, легко проверяются и видно результат их работы. (Здесь в смысле, не сложные программные решения долго делать и проверять, а какие-то отдельные участки, алгоритмы, можно написать код и практически мгновенно запустить, проверить как работает и заметить различия, можно сравнивать разные версии на скорость работы и другое.)
Бывает, что есть задача и нужно получить такой-то результат.
А решить задачу можно разными способами!!! Впрочем, это ведь не только в программировании бывает - есть решения простые и есть нетривиальные, есть решения относительно кратко записываемые, а есть длинные.
В чём же разница? Кому как удобнее, так и пишут решение, хотят, "базовой арифметикой" обходясь и стандартными функциями, а хотят, нагромождают что-то?
❗❓ Если решение задачи написано и если ответ подходит, не всё ли равно, какое именно решение?
☝️ Нет, не всё равно, и технике и людям!
Техника которая исполняет код, справится быстрее или дольше. Разный размер файла программы. Разное потребление оперативной памяти и других ресурсов. Разная скорость выполнения. Процессор выполнит разные алгоритмы за разное время. Будет различная нагрузка, тепловыделение, энергопотребление.
Нет сомнения, разница есть! Но её не всегда замечают или не хотят замечать и даже не пытаются оптимизировать отдельные участки, функции, алгоритмы и в целом программы делать быстрее и компактнее, менее потребляющими ресурсы. Может быть, многим программистам дают задачи вообще - написать код чтоб работало хоть как нибудь, но не дают задачи тщательно оптимизировать, дотошно исследовать и тестировать, сделать всё возможное чтоб ускорить.
И только лишь некоторым дают задачи тщательно ускорить, оптимизировать продукт, в основном тем, кто разрабатывает специальное программное обеспечение либо под крайне слабые устройства. Либо наоборот, под крайне мощные сервера, датацентры, в них будет экономический эффект в огромных суммах, если хоть немного ускорить, и\или если хоть немного снизить энергопотребление, то крупные суммы будут сэкономлены.
А те кто делают приложения для устройств пользователей, не на столько мотивированы тщательно оптимизировать продукт, облегчать, ускорять, экономить потребление ресурсов на устройствах пользователей. Делают как удобнее делать, как придётся, лишь бы совсем не зависало(иначе пользователи перестанут пользоваться приложением).
И ещё не всё равно людям, которые читают код. Программисты некоторые работают не на себя, а в компаниях где действуют правила, как писать. Если напишут эффективное решение задачи, но не читаемое, не понимаемое коллегами и начальством, не стандартное, не приемлемое, то код у них не примут, потребуют переделывать.
Но эта статья совсем не о разработчиках! Просто о том, что возможны альтернативы. Всё возможно улучшать, либо делать то же самое но иначе, решить задачу другим решением, которое чем-то оптимальнее.
***
💥 Как связан размер кода (размер текстовой записи решения задачи) и производительность (как быстро процессор выполнит алгоритм)?
❓ Действительно ли чем короче код, тем он быстрее выполнится? Вот вопрос, который могут задать те, которые далеки от программирования, но не только.
1. Если есть очень простой случай - последовательные операции, то естественно, чем в коде больше количество операций идущих друг за другом, тем дольше процессор проходит по всему списку и выполняет все инструкции. Но время выполнения ещё зависит от того какие именно инструкции, например, инструкции для операций с целочисленным типом данных выполняются быстрее чем с типом с плавающей точкой.
2. Такой код со списком последовательно выполняемых операций встречается крайне редко. Часто применяются - логические условия, "если ..., то выполнить ..., а иначе выполнить это ...", переходы по условиям, ветвление и циклы, может применяться рекурсия и многое другое. Исполнение операций идёт не по всему списку последовательно, а может перескакивать и циклически повторяться.
💥 Размер кода не говорит о скорости исполнения. Ведь относительно короткий вариант кода может быть не самым быстровыполняемым решением задачи.
В относительно более длинном коде могут содержаться способы ускорения алгоритма, например, ветвление, какие-то логические условия, которые фильтруют параметры и направляют на различные версии алгоритма или подпрограммы (узкооптимизированные именно под такие исходные данные). Банальная фильтрация и отсев особых случаев, исключений, например, деления на ноль и прочих параметров при которых весь рассчёт нет смысла выполнять, можно быстрее завершить. Ещё, может быть кэширование. Ещё, может быть использование таблиц перекодировки или что-то в этом роде, матрицы с готовыми вычисленными значениями либо помогающими ускорить вычисления могут занимать некоторое дополнительное место.
Вариант может быть содержащим приёмы для ускорения решения задачи, а может быть и другим, ну, просто кое-как длинно написанным и содержать "узкие места" и какие-то избыточные, излишние(!) операции и будет работать медленнее краткого решения...
❓ А действительно ли чем длиннее исходный код, тем больше размер готовой скомпилированной программы?
Чем больше исходный код, тем как правило, он преобразуется в большее количество данных и инструкций для процессора, компилятор производит обьектный файл большего размера.
Есть исключения.
1. Компилятор (утилита на вход принимающая исходный код и создающая скомпилированную программу) с включенной оптимизацией будет перед компиляцией удалять из кода избыточные операции, неиспользуемые функции. Оптимизирующий компилятор в некоторых случаях наоборот увеличивает код, например разворачивает циклы. У компилятора могут иметься настройки оптимизации - оптимизировать для сокращения размера программы или для ускорения её работы, или то и другое. Обычно разница невелика, но следует включить максимальную оптимизацию для большинства обычных применений, обычных приложений. Оптимизацию следует отключить только если по какой-то причине критически важно чтоб компилятор просто преобразовал операции в исходном коде в инструкции процессора и ничего не было компилятором изменено, "оптимизировано".
2. В исходном коде могут быть подключены функции из статических библиотек. И тогда при компиляции внутрь программы добавятся дополнительные обьектные файлы взятые из статических библиотек. А если библиотеки написаны недостаточно хорошо, и вместо независимых обьектных файлов с отдельными функциями имеют взаимосвязанные функции в одном обьектном файле, то добавится он, то есть всё содержимое библиотеки вместо части...
Во первых компилятор добавляет библиотеки с функциями из самого языка программирования. Во вторых, библиотеки подключенные в проект программистом (он может пользоваться теми библиотеками что написал сам, либо взял у других, фреймворки, библиотеки для широкой помощи в создании приложений, или какие-либо узкоспециализированные)
☝ То есть, исходный код даже из всего нескольких строк может привести при компиляции к созданию исполняемого файла большого размера, если в коде вызваны функции которые зависят от весомых статических библиотек. А также разработчики добавляют в комплект к своим программам динамические библиотеки как отдельные файлы (например в Виндовс - dll файлы).
❓ Ещё какие оптимизации бывают, кроме как сокращать потребление ресурсов программой? Оптимизация типичного пользовательского применения, удобство выполнения действий. Оптимизация интерфейса чтоб было нагляднее и удобнее. Сокращение числа действий для достижения результата.
Например, если надо часто заходить в меню, а там в следущее, и так дальше, то сделать чтоб действий было поменьше. Расположить самые нужные пункты на виду и ближе, чем редкоиспользуемые. Как минимум для самых часто вызываемых функций сделать сочетания клавиш, чтоб возможно было с клавиатуры вызвать нужное.
🔥💡 Кстати, вот насчёт клавиатуры! Даже в те времена, когда компьютеров не было распространено, когда печатали на печатных машинках, то находились рационализаторы, которые были уверены, что если изменить число клавиш, изменить расположение букв, то работать станет легче, удобнее и печать будет быстрее. Когда-то очень многие предлагали свои собственные варианты клавиатуры. Но современники почти ничего не знают о альтернативных QWERTY вариантах. Слышали о раскладке Дворака, а другие малопопулярны.
Расположение клавиш с их функциями принято называть "раскладкой клавиатуры". Смена раскладки - это не обязательно смена языка, потому что на один язык могут быть разные раскладки (расположения клавиш).
В современных устройствах с экранной клавиатурой при переключении раскладки меняются надписи у кнопок на экране. Кстати, в смартфонах возможно устанавливать альтернативные приложения-клавиатуры.
В компьютерной физической клавиатуре надписи на клавишах не меняются, они сделаны для нескольких, например двух языков и соответственно разных раскладок, раскладка меняется программно, причём, при желании можно в настройках ввода добавить раскладку не совпадающую с буквами на физической клавиатуре.
❓ А что бы оптимизировать? 💡 Ну, вот например, есть идея сделать чтоб при переключении раскладок менялись лишь буквы, а знаки препинания и т.п. символы оставались на тех же клавишах. Придётся делать собственную раскладку, и возможно, переделать обозначения символов на части клавиш(сделать наклейки на клавиши). Но это всё не так уж нужно.
❓ Eщё как можно улучшить клавиатуру? 🔥 О, да, есть ещё идеи, даже более простые и такие, которые мало кто делает, и при которых не обязательно менять что-то в самой клавиатуре.
💥 Я заметил, у меня почему-то сам по себе переключается NumLock (я вроде бы не задеваю эту клавишу...). Я хочу чтоб он был всегда включен.
💥 Ещё я заметил, что нечаянно задеваю CapsLock и он включается, надоело. Хочу чтоб капслок был всегда отключен!
Я искал и нашёл в сети способ как с помощью редактирования реестра отключить указанные кнопки, но не пробовал, так как поступил совсем иначе и есть ещё идеи как сделать.
❓ А ещё? 🔥🔥🔥 Да, есть ещё идеи. ❗ И я думаю, кто-то удивится, а чего это мало кто догадывался сделать такое, хоть идеи очевидные, проще простого.
💥 Вот например - в операционной системе есть стандартное переключение раскладок с помощью двух клавиш. Alt+Shift, либо можно выбрать в настройках Ctrl+Shift. А я решил переключать раскладки одной кнопкой.
💥 И ещё идея - назначить на одну из кнопок временное переключение раскладки. Нажал такую кнопку и пока держишь, печатаешь, а затем отпускаешь и раскладка возвращается обратно.
Да, я давно реализовал все эти идейки, написал программку для назначения действий на кнопки. Когда программа запущена, у NumLock и CapsLock стандартные функции этих клавиш отключены.
Num Enter переключает раскладку. А CapsLock переключает раскладку только на время пока нажата. Правда, с этим функционалом пришлось повозиться немало...! С первого раза не заработало как надо, не работал Shift, пока удерживается заблокированный капслок. Пришлось стандартную функцию вновь вернуть, а по таймеру вскоре после нажатия переключать капс обратно в выключенное состояние.
В общем всё работает, но изредка если очень быстрое нажатие, то CapsLock вызывает свою обычную функцию(включение верхнего регистра букв), а задумано чтоб капс не включался. Ещё попробую исправить это. (Хотя это можно подать как фичу)
А в остальном работает всё чётко. При этом стандартная комбинация (Alt+Shift) разумеется, тоже работает. Программа может переключать раскладку по заданным кнопкам и отображает иконку в трее и рядом с курсором. Ещё в программе есть меню в трее, в него можно добавить свои пункты с любыми папками, файлами, программами, можно добавлять произвольные сочетания клавиш для их запуска. Например, можно поставить на клавишу "Виндовс" вместо стандартной функции открытия меню Пуск - другое действие, запуск какой-нибудь нужной программы, и так с любой клавишей, на неё что-то своё назначить.
Скачать программу KsKey можно тут. Кстати, это пример, какой полезный функционал может быть в крошечной программе размером всего лишь около 100Кб! Программа лёгкая и не требует установки. Если нужны исходники написанные на бейсике, обращайтесь. Когда-то может быть доделаю и опубликую.