Saturday, September 28, 2013

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

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

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

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

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

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

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


Monday, September 2, 2013

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

Зачем?

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