Category: технологии

Category was added automatically. Read all entries about "технологии".

Ультразвук

Начал монитор издавать ультразвук. Не всегда, правда, а пока холодный. Потащил на ремонт.

Испытываем — не пищит. Значит, не остыл ещё. Ладно, оставляю, иду на работу.

Через четыре часа прихожу — не смог услышать, говорит старый ремонтник. Запускаем. Я слышу, он нет. И к тому же говорит: если тихо пищит, шум вентилятора всё равно перебьёт. Нет, отвечаю: хорошие системы охлаждения уводят в инфразвук, всё равно будет слышно.

Даю ему пятидесятку и ухожу. Запускаю монитор на работе — четверо программистов помоложе тоже услышали.

Почему состояние автомобиля с автокоробкой по умолчанию — «ехать»

В ответ Илье Бирману (хотя он вряд ли услышит).

Если вы играли во всякие там Need for Speed, а потом сели в прокатный карт — всё примерно одинаково. Нажимаешь на газ — разгоняется, нажимаешь на тормоз — останавливается. А если, наигравшись в Need, сели в автомобиль с автокоробкой — если отпустишь все педали, он потихоньку едет.

Если ДВС остановится, он глохнет. Потому даже на остановках нужно постоянно поддерживать небольшие обороты (порядка 600). Первые пару занятий по вождению вас учат именно этому: останавливаешься — выжимай сцепление. На мопедах и картах этим занимается автоматическое центробежное сцепление: нажимаешь на газ, двигатель начинает быстрее крутиться, сцепление замыкается. Гидротрансформатор действует слегка по-другому: он постоянно перемешивает масло, чтобы сорваться с места, как только тормоза ослабнут.

И тут в начале 2000-х появляется новая трансмиссия — робот. Обычная ручка со сцеплением, но полностью компьютеризированная — ей-то какой интерфейс делать?

Оказалось, что немалую часть автомобильной жизни занимают низкоскоростные участки: пробки и стоянки. Они отличаются высокой точностью движения и большой ценой ошибок. Ради интереса загуглил «перепутала педали» — из десятка эпизодов, которые успел увидеть, прежде чем в ужасе закрыл вкладку, все происходили в этом контексте, кроме одного — под светофором. Сам путал, отделался лёгким испугом.

Если долго ехать на полусцеплении, сцепление перегревается, да и робот не умножает крутящего момента, в отличие от гидротрансформатора. Тем не менее, роботы стараются этот «creep mode» (эмуляцию автомата) реализовать, насколько возможно, и только трогание с места бывает по нажатию газа. Причина — все эти стоянки с пробками. На них безопаснее работать с одной педалью.

В 2006 появляется Маск с «Теслой». «Тесла» при отпускании газа плавно останавливается, так что главной низкоскоростной педалью становится газ. Потом появился и старый добрый creep mode, но, судя по видео — «Теслу» не водил — на ней работать газом на стоянках вполне нормально, и только для экстренной остановки жмёшь тормоз.

Возникает вопрос: а почему на автоматах не перенести тормоз под левую? Думаю, причин много, и нет единственной: совместимость с механикой, стоп-сигналы, срабатывающие при самом лёгком нажатии тормоза, водитель может убрать левую ногу и будет не готов тормозить, удержание водителя на сиденье.

UPD. Если педаль газа уже почти всегда электронная, тормоз всегда гидравлический, и это также осложняет интерфейс.

Странная ошибка

Не так давно на работе случилась странная ошибка. При переходе на x64 самодельная библиотека XLSX отказала при попытке импорта. Забавная, но на задачу не тянет. Проблема была вот в чём.

В компьютерах есть две стратегии работы с многобайтовыми числами. Число 90AB16 может записать в два байта как 90 AB (порядок Motorola, или big-endian), или AB 90 (порядок Intel, или little-endian). x86 и x64 относятся ко вторым, раз уж они Intel.

А ещё некоторые машины для упрощения схемы не могут обращаться к 4-байтовым числам, чей адрес не кратен четырём. То есть по адресам 0 и 4 могут, а по адресам 1, 2, 3 — уже нет. Машины x86 и x64 свободны от такого ограничения (правда, по некратным адресам обращение несколько медленнее), а вот у несовместимого с ними Itanium это ограничение есть.

Задача: сравнить пять байтов с «xmlns». Неоптимальный способ: сравнивать по байту или вызвать стандартную функцию сравнения. Оптимальный: сравнить четыре байта с «xmln» и пятый с «s». Но для этого нужно, чтобы эти четыре байта схватило одним махом (нет ограничения на адреса). И, разумеется, константа «xmln» по-разному переводится в число в зависимости от того, Intel машина или Motorola. На Intel старший байт «n», на Motorola — «x».

Код такой (простите, не хочу проверять, как в ЖЖ работают хэштэги — потому пускай будет «собака»).

@ifdef _M_IX86
  @define LITTLE_ENDIAN
  @define UNALIGNED
@endif
// аналогично для x64, проверяется макрос _M_IX64

@ifdef UNALIGNED
  @ifdef LITTLE_ENDIAN
    // Константа для порядка байтов Intel
  @else
    // Константа для порядка байтов Motorola
  @endif
  // Оптимальный вариант
@else
  // Неоптимальный вариант
@endif

Ошибка случилась двойная. Макрос проверки на машину x64, _M_IX64, оказался неверным (вроде правильно _M_AMD64), но где-то глубоко в хедерах MinGW определён макрос UNALIGNED. А теперь посмотрите на вторую часть кода. Макрос UNALIGNED есть — включается оптимизация. Макроса LITTLE_ENDIAN нет — оптимизация под порядок байтов Motorola. Вот и говорит, что в XML нет пространств имён: вместо префикса «xmlns» искало «nlmxs».

Как исправить? Уже замена UNALIGNED → MACHINE_UNALIGNED (и аналогично для LITTLE_ENDIAN) всё решает методом выключения оптимизации. Ну и _M_IX64 → _M_AMD64, чтобы оптимизация-то включилась.

Выводы. 1) Макросы — зло, но замены этому злу пока не придумали. 2) По-хорошему, все системные макросы должны иметь такие префиксы, чтобы с ними было сложно пересечься. 3) Хотелось бы иметь в языке возможность преобразовать несколько символов в число на уровне компилятора, с учётом порядка байтов. В Турбо-Паскале было, но в плохом виде было: машина x86 всё-таки Intel, и чтобы одним махом сравнить два байта, надо было писать 'mx', а не 'xm'. 4) Если ты придумал ветку под какую-то машину, но не можешь её проверить, поскольку этой машины нет — ставь аварийный останов с сообщением: «Ветка не проверена, испытывайте на свой риск».

Антон Жиянов. Законы роботехники применительно к интерфейсам [реферат]

Полная статья на блоге Антона

Интерфейсы служат, чтобы решать задачу. Задача — найти туалет, интерфейс — информационный автомат. Интерфейс хорош, если выполняет эту задачу. Хороший интерфейс, как робот из фантастики, отвечает трём законам.

1. Пользовательские данные бесценны. Компьютер не может причинить данным человека вред или своим бездействием допустить, чтобы они пострадали.

Для этого используется автосохранение «под шумок», урна и прочее.

2. Вкалывают роботы. Программа не должна впустую тратить время человека или заставлять его выполнять действия сверх необходимых. При этом надо решать именно ту задачу, что нужна пользователю, а не ту, что выдумал программист.

Не «Заказ отправлен», а «Менеджер перезвонит через полчаса, чтобы согласовать доставку». Или даже «По выходным мы не работаем, завтра мы с вами свяжемся».

Всё, что может делать робот, пусть он делает. Форматирует номер карты, помнит промежуточные результаты вычислений, определяет индекс и город…

Не заставлять человека ждать без нужды.

И, разумеется, форма загрузки не должна «крутиться и крутиться», в то время как внутри она сломалась.

3. Общаться на языке человека. Хороший, человечный интерфейс думает о задачах пользователя и говорит на его языке.

«23 задачи», а не «задач: 23». Программа для книжного магазина работает с книгами и открытками, а не «объектами учёта». При ошибке честно говорит, что случилось и как с этим жить.

Saboteur II: я сделал это

Я всё-таки смог побить тот рекорд. Смотрите!

Началось всё с того, что я посмотрел видео рекордсмена. У него и у меня время закладки в ракету получилось одинаковое, но он сбежал быстрее. Это значит, мой маршрут оптимальнее!

Как я до этого маршрута додумался… А никак. Мне иногда приходится водить брата по Киеву: он указывает магазины, я продумываю маршрут. Насобачился как-то видеть, каким путём идти. Только в одном месте рекордсмен всё же оказался прав: первые две перфоленты в восточной сети подвалов. Мой путь — прямиком через подвал, он решил проехать на лифте. Мой путь, видимо, теоретически чуть быстрее, но зависит от удачи: робот с пантерой в подвалах, да с разными диапазонами патрулирования — не очень приятная встреча.

Пробные прохождения были на игровом пульте. Впрочем, пульт Logitech F310 оказался непригоден: перемещение пальца с плеча на плечо отнимает время. Хорошо, если всё это время ниндзя стоит и отдыхает. Но ведь приходится и сходить с лестниц. Я попробовал усовершенствовать пульт, посадив на гашетки движение влево-вправо. Позднее вернулся к старой доброй клавиатуре.

Есть несколько мест, которые проходятся дважды и трижды. Даже там, по опыту, не стоит устраивать бойню. Разве что если удаётся запустить в робота чем-то тяжёлым или сбить выпрыжкой — значит, повезло.

И, считаю, этот результат можно улучшить единицы на три-четыре (больше — уже манипуляция удачей).

P.S. Кажется, без секретной перфоленты пройти в принципе невозможно.

ОТ и автомобили, автомобили и ОТ. Есть ли третье?

Писаки любят размышлять про «транспорт будущего». Многое что из их измышлений не имеет смысла. Вообще.

Персональный автоматический транспорт. Красиво: кабинки едут, маршрутизируемые автоматикой. Проблемы три. Одна из них была описана на IT Happens - бомж на железной дороге замыкал рельсы, чтобы вывести из себя СЦБистов и они дали опохмелиться. Таких «лайфхакеров» в СССР традиционно много. Вторая - пустые кабинки занимают не намного меньше машин. И третья - в местах, которые генерируют большой поток за короткое время (заведения культуры, заводы) посадка превращается в хаос; если же большой поток не иссякает (вокзалы, крупные торговые центры) - ПАТ практически невозможен (представьте себе ситуацию, когда каждый приходящий с поезда садится на такси). Напоследок - многие разрабатываемые концепции ПАТ элементарно не подходят под своё ТЗ. То резиновые шины (превед, зима!), то тяга от аккумуляторов, то неприемлемая дистанция движения.

Водородный транспорт. Покажите мне природный водород. Значит, водород - это всего лишь аккумулятор энергии, полученной другим путём. Опасный.

Биотопливо. Актуально только для стран, которым до нефти далеко, и то с оговоркой. Даже плохих почв не так много, чтобы изводить их монокультурой. ГМО, как ни странно, не снижает расход ядохимикатов - вредители приспосабливаются к технологии, и даже раундап перестаёт на них действовать так, как поначалу.

Гибридные автомобили. Никто не исследовал влияние на окружающую среду высокотехнологичного мусора. Других проблем, кроме меньшего загаживания воздуха, они как бы не решают: и занимают места, как машины, и управляются теми же обывателями-непрофессионалами.