Monday, November 28, 2016

Игры, которые играют нами. История Рокмана

Часть первая, 1989 год.

27 лет назад компьютеры были большими, программы - маленькими, cоюз - нерушимым, а я - повернутым на компьютерах школьником-старшеклассником.
Наш школьный компьютерный класс состоял из Агат-7 - неудачных "аналогов" Apple II.
Агат-7
Игр для него было исчезающе мало, поэтому мы писали их сами (что есть хорошо: многие стали программистами).
Я уже написал игру а ассемблере про какого-то робота в лабиринте и ходил гоголем (возняком?), снисходительно поглядывая на одноклассников, искавших на клавиатуре any key.

Sunday, June 21, 2015

Чехол-геймпад для телефона

Собственно все описывается одной картинкой
На задней панели удобно располагаются несколько кнопок, на верхней панели - шифты под большие пальцы.
Андроид и iOS игры (и эмуляторы консолей) страдают  от отсутствия аппаратных кнопок.
Раскладные, выдвижные и пристегивающие геймпады ломают идею портативности. А такой чехол... я бы купил :-)

Saturday, June 20, 2015

Чем плох Юникод и как его можно улучшить.

Предлагается замена Юникоду - новый формат кодирования текста со следующими свойствами:
  • Кодирует все теоретически возможные виды символов.
  • Не требует централизованного стандартизирующего органа.
  • Позволяет увидеть текст на любом языке даже при отсутствии подходящих шрифтов.
  • Раздельно сохраняет визуальную и лингвистическую информацию о символах, позволяя приложениям игнорировать те части, которые им не нужны.
  • Позволяет включать в текст индивидуальные авторские символы и рисунки.
  • Обратно совместим с ASCII.
  • Поддерживается всеми приложениями, которые работают с однобайтными строками с 0-терминированием.
  • Может быть конвертирован из Юникода без ограничений и конвертирован в Юникод в той части, которая поддерживается Юникодом.
  • Обеспечивает быстрое декодирование во внутренний формат приложений и быстрое кодирование.
  • Компактен.

Под катом - детали и пример реализации.

Saturday, August 2, 2014

В поисках идеальной клавиатуры 3. Аккорды.

Посвящается Дагласу Энгельбарту,
изобретателю мышки, гипертекста,
форумов и аккордной клавиатуры.



Это третья статья про клавиатуру.
Все статьи этой темы собраны тут: http://0x8d.blogspot.com/search/label/Klava

Мои почти полугодовые опыты с разными компоновками джойстико-клавиатур привели меня к мысли, что удобную и быструю клавиатуру таким способом не сделать.
  • Джойстик засунутый под ладонь заставляет двигаться всю руку, существенно замедляя набор.
  • Джойстик размещенный под каждым пальцем заставляет пальцы двигаться во всех направлениях,  что неестественно, и потому приводит к быстрой усталости и множественным ошибкам набора.
Оказалось, что пальцы любят двигаться вдоль своей оси. Сгибаться и разгибаться. При этом основное усилие они развивают на сгибании (Сюрприз :-).

Но мне все-таки хотелось чтобы на моей клвиатуре было по одной клавише на палец. Потому, что я по-прежнему считаю, что основные ошибки при наборе текста возникают из-за того, что пальцы не попадают по клавишам (ваш К.О.).

Пробема в том, что у нас всего десять пальцев, а символов на стандартной  клавиатуре около ста, и всем символам пальцев не хватит.

Решение есть: пусть каждый символ вводится аккордом - одновременным нажатием нескольких кнопок.


Tuesday, June 17, 2014

Простой эффективный логгер на C++

Проект начинается с логгера

Хотя... некоторые проекты логгером и заканчиваются :-)

Обычно начинающие кодеры полагают, что логгер не нужен. Ведь приложение можно погонять под отладчиком. 
Ну что сказать, отладчик вешь хорошая, пока не придется отлаживать многопоточные приложения с проблемами временнОй синхронизации. Или ставить приложения на платформу, где отладка затруднена. Или получать от заказчика невнятное: "У вас не работает", вместо лога с регулируемой детализацией.

Есть еще одно заблуждение, что достаточно понатыкать в код что-то подобное: 
std::out << "message";
OutputDebugStr("message");

Почему это не катит? Потому что логгер это не только простой вывод сообщений куда-то, логгер должен решать множество задач.

Какие задачи решает логгер:

  • Фильтрация (какие сообщения показывать, а какие блокировать)
  • Форматирование (текстовое представления разнотипных данных)
  • Атрибутирование (добавление в лог маркеров, упрощающих анализ)
  • Буфферизация (накапливание фрагментов сообщения в для ускорения работы)
  • Вывод.

Thursday, June 5, 2014

C/C++. Парсер и калькуллятор выражений, заданных текстовой строкой

Выражения состоят из double-констант, операторов +-*/ и скобок.
Ловятся синтаксические ошибки. Результат выдается в double.
38 строк исходного текста - просто, прямолинейно, расширяемо, без использования сторонних библиотек.
in english