Sunday, February 23, 2014

Бинарный формат для сериализации объектов

Я уже пару месяцев использую CatML для сохранения данных приложения в файлы, передачи объектов по сети и даже для дампа объектов в лог.
Формат хорош. В своих проектах я отказался от XML/Json/Yaml и не жалею.
Но с ростом объемов данных все более заметными становятся фундаментальные недостатки текстовых форматов:
- они избыточно-огромные,
- они долго записываются и еще дольше парсятся.

Поэтому, в общем, вот новый бинарный формат BinaryCatML.

  • Он однозначно конвертируется в текстовый CatML и обратно. Для этого есть консольная утилитка. Вы можете открыть бинарный файл, просмотреть его содержимое, если надо исправить в любом текстовом редакторе и уаковать обратно в бинарный вид.
  • Как и текстовый CatML, он имеет в себе всю метаинформацию и умеет кодировать произвольные графы объектов. 
  • Он разумно компактен. Любое имя поля, имя структуры или объект присутствуют в файле ровно один раз. Это не компрессия, компрессия - убирает избыточность, а BinaryCatML просто не вносит ненужной избыточности.
  • Он быстро записывается и быстро загружается. Все идентификаторы - стркутур, объектов - просто индексы в массивах. Никих look-up-ов в словари, никаких сравнений текстовых строк.
  • Кодек по минимуму использует память и может работать даже на очень слабых устройствах.
  • Он не зависит от разрядности или порядка байт архитектуры, в нем нет ни одного зашитого в формат ограничения.
  • Его кодек занимает меньше 300 строк на Java и может быть портирован на любой язык буквально за день.

Sunday, November 24, 2013

В поисках идеальной клавиатуры - 2. Вверх ногами.

Отличия от предыдущей модели:
  • Клавиатура плоская и горизонтальная, пальцам удобнее нажимать сверху вниз.
  • Для переключения регистров будет двигаться не корпус клавиатуры, а ладонь, лежащая на рычажке. Тогда единственным элементом, имеющим инерцию будет сама рука, что мало отличается от обычных клавиатур.

Saturday, November 23, 2013

Английский язык: Нуб для нубов.

Краткая шпаргалка по построению английских предложений.

Thursday, October 24, 2013

Текстовое представление объектов

Почему XML и JSON – плохо, и как сделать хорошо.

Краткое резюме:

  • XML, JSON, YAML, SDL – плохо пригодны для описания произвольных иерархий типизированных объектов.
  • Но теперь у нас есть альтернативный формат CatML:
    • простой,
    • интуитивно понятный,
    • не допускающий неоднозначности,
    • удобный для парсинга,
    • кодирующий и строго типизированные данные,
    • кодирующий перекрестные ссылки,
    • кодирующий глобально именованные объекты и ссылки на них.
  • Можно прямо сейчас скачать и использовать его енкодер и декодер для Java, который поддерживает:
    • сериализацию объектов
    • и DOM-like способ доступа.
  • Java-библиотека занимает около 1 тыс. строк и может легко портироваться на любой язык.
Скачать Библиотеку энкодера и декодера CatML

Saturday, September 28, 2013

Файлы не нужны

Файлы не нужны.

(По крайней мере на несменных носителях).

Сколько себя помню, в компьютерах были файлы.
Мы храним в файлах всё — документы, программы, настройки, временные данные...

Что есть файл?
  • Массив байт.
  • Имя, по которому его можно найти и открыть.
  • Атрибуты доступа, чтобы его не открыл/не изменил кто попало.
  • Средства совместного доступа (или ограничения одновременного доступа).

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

Файлы можно заменить объектами, которые хранятся в персистентной памяти.


Monday, September 2, 2013

В поисках идеальной клавиатуры - 1

Зачем?

Несколько месяцев назад мне в руки попалась хорошая эргономичная мышь. В руке лежала как влитая, и была удобна настолько, что убирать руку с нее не хотелось.
Однако программисты работают пальцами по клавиатуре (и еще немного головой - в нее они пьют пиво).
Перенося руку с мыши на клаву и обратно, я стал задавать себе вопросы:
  • wat$^&*ck
  • и how^#%& it
И в конце концов сформировал несколько требований к своему будущему устройству ввода:
  • оно должно совмещать мышь и клавиатуру,
  • все действия должны выполняться не глядя на устройство и на собственные руки,
  • пальцы должны лежать естественно в максимально удобной позиции,
  • движения должны быть минимальными и удобными.

Saturday, August 31, 2013

CPU: Виртуальная память не обязана быть сложной

Это третья статья на тему процессора. Все статьи по теме - тут: label-CPU

Современный процессор должен иметь встроенный MMU, иначе это будет микроконтроллер какой-то.
C MMU можно делать много всяких полезных штук - виртуализацию, защиту, можно запускать Linux и ворочать огромными объемами памяти имея небольшое количество RAM.