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.

Thursday, August 29, 2013

Регистры: Как это сделаю я.

Это вторая статья про самодельный процессор, который я задумал.
Все статьи собраны тут: label-CPU

Каким мог бы быть регистровый файл моего garage-made процессора?

  1. Небольшим. Т. к. у нас FPGA, и к тому же надо как-то менее заратно переключать потоки.
  2. Дружественным к компилятору. Внутри процедуры хочется иметь много взаимозаменяемых прямо адресуемых регистров. При входе в процедуру хочется иметь автоматическое резервирование пространства в регистровом файле.
  3. Автоматическим. Операции резервирования/освобождения должен делать процессор, а не приложение.
  4. Универсальным. Все типы данных - integer ALU, FPU, SIMD processing unit - должны обрабатываться в одном универсальном регистровом файле.

В качестве первого приближения:
В режиме пользователя доступны 32 32-разрядных регистра r0..r31 (позже мы сделаем их 64-разрядными).
4  из них - глобальные и не вращаются:
  • r31 - Program Counter - указатель текущей исполняемой инструкции.
  • r30 - Stack Pointer - Вершина стека.
  • r29 - TLS Pointer - Указатель на статический блок, уникальный для каждого потока. 
  • r28 - Data Segment - Указатель на статические данные, разделяемые между потоками.
r0..r27 - вращающийся регистровый стек на 28 регистров.

Wednesday, August 28, 2013

CPU of my dream (ru)

Я собираюсь поиграть в FPGA, и сделать простой и удобный процессор.
Некоторые решения будут оригинальными, но большинство - будут нещадно заимствоваться из разных интересных архитектур.

Начну пожалуй со сбора требований и пожеланий.

Регистры, регистры, регистры, регистры!

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

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

Monday, August 26, 2013

Just a Test

+console
echo "Hello world

Работает!

Привет. Я - кодер Андрейко, а это мой новый блог.
Не знаю зачем, но пусть будет.

Мои интересы - программирование: компиляторы, процессоры, пользовательский интерфейс и всякие фреймворки, а также микроконтрллеры, и верилог.
Мои языки - C++, Java, хотя мне давно все равно на чем писать.


Jeez, it works!

Hi there, I'm Andrey the coder, and this is my new blog.
If i need it? I haven't decided yet. But why not.

I'm working on compilers, GUI frameworks as well as microcontrollers, and VHDL.
My primary programming languages are C++ and Java, and to be honest, the language is just a tool.