• Акселерометр в системе ПИД-регулирования круиз-контроля автомобиля

      Я эксплуатирую в общем-то довольно современный, напичканный электроникой американский автомобиль. Из того, что управляет движением, в нем есть электронная система стабилизации, ПБС с эмуляцией блокировки дифференциала, естественно АБС, и конечно же, круиз-контроль. Последний еще не адаптивный (то есть без функции поддержания дистанции до впереди идущего авто). В машине — электронная педаль газа (это принципиальный момент для данной статьи — позже объясню, почему).

      Всем, кто хочет знать, чем не угодил круиз-контроль, и что предлагается улучшить — welcome под кат.
      Читать дальше →
    • Yet Another Производственный Календарь на MS SQL. ПО->ША->ГО->ВО

        Написать свое решение меня подтолкнул пост на Хабре на аналогичную тему, в котором эта задача была решена «в лоб» — простым перечислением дней и флагом рабочий/выходной за весь диапазон жизнедеятельности системы, в которой этот календарь используется. В аналогичной ситуации я решил поступить немного хитрее, что в итоге оказывается и гораздо проще в поддержке. Если интересно, как это было сделано — welcome под кат:
        Читать дальше →
      • XSL-трансформация на MS SQL без CLR

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

          Содержимое письма при таком способе приходится формировать plain-текстом, а рассылать почту либо через xp_sendmail, либо (более гибко) через почтовый COM-объект (например, CDO.Message), инстанциируя и управляя им через SQL-обертки для работы с OLE sp_OAxxxx.

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

          +-----------+--------------+--------------+
          | АБСОЛЮТНО | НЕ ВИДИТ ПРО | БЛЕМ В ТАКОМ |
          | ОФОРМЛЕНИ | И СЛУЖЕБНОГО | ВЫВОДА <EOT> |
          +-----------+--------------+--------------+

          Что делать, если подобный формат начинает напрягать, а регистрировать на сервере свои компоненты, или «выныривать» из уровня БД на уровень приложения для отправки чего-то более красивого ну очень не хочется:
          Читать дальше →
        • Переход через NULL

            Многие знают и используют встроенную функцию ISNULL(X, Y), которая заменяет первый аргумент на второй в случае, если он (первый) NULL. Менее употребима обратная встроенная функция NULLIF(X, Y), которая возвращает NULL, если первый аргумент равен второму. Комбинация этих двух функций позволяет избежать использования конструкций IF-ELSE или CASE-WHEN, что делает код компактнее. Если интересно посмотреть пару примеров — добро пожаловать под кат.
            Читать дальше →
          • «1-wire» для кнопок с индикацией

              Задумал я как-то в одной из конструкций применить вот такую кнопку с индикацией состояния:

              image

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

              Как это решить, и что для этого нужно — под катом
              Читать дальше →
            • Интеллектуальное реле управления вентилятором охлаждения двигателя

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

                image

                Надо сказать, что на тот момент уже существовало немало разнообразных решений — от чисто аналоговых до микроконтроллерных, с той или иной степенью совершенства выполняющих нужную функцию. Одним из них был контроллер вентилятора компании Силычъ (то, что сейчас выглядит вот так, известной среди интересующихся своим автоматическим регулятором опережения зажигания, программно детектирующим детонационные стуки двигателя. Я некоторое время следил за форумом изготовителя этих устройств, пытаясь определить, чтов устройстве получилось хорошо, а что — не очень, и в результате решил разработать свое.
                Читать дальше →
              • Постраничная выборка данных — альтернативный взгляд на давно известное

                  Проблема постраничной выборки информации из БД стара, как сама БД, и соответственно, обсуждена не одну тысячу раз. Нет, пожалуй, ни одной клиент-серверной системы, в которой эта проблема так или иначе не была бы адресована и решена. Сегодня я хочу рассказать об одном немного нестандартном способе взаимодействия клиентского слоя и MS SQL-бакенда при организации постраничной выборки в типичном публичном веб-приложении.
                  Читать дальше →
                  • +5
                  • 13.4k
                  • 9
                • Идея и реализация простого средства контроля расхода энергии аккумуляторов

                    Наверное первое, о чем задумывается владелец после покупки троллингового мотора к лодке, или, скажем, установки электрокита на велосипед — это то, насколько далеко можно безопасно уплыть/уехать без необходимости возвращаться обратно на веслах или педалях. Подобная же участь не обошла и меня, поэтому когда несколько лет назад у меня появился электрический лодочный мотор, сразу же возникла идея реализовать контроль расхода ампер-часов из питающей мотор батареи простым, но при этом более-менее точным способом.
                    Читать дальше →
                    • +25
                    • 14.4k
                    • 9
                  • MS SQL: генерация псевдослучайных данных с использованием newID(). Возможности и подводные камни

                    Известно, что встроенная функция newID() широко используется разработчиками не только по прямому назначению — то есть для генерации уникальных первичных ключей, но и в качестве средства для генерации массивов псевдослучайных данных.
                    Читать дальше →
                    • +19
                    • 37.3k
                    • 7