вторник, 23 декабря 2008 г.

Условия гонки в ASYNEQ

Давайте для начала я покажу вам скриншот моего SXEmacs:

Скриншот

Ничего необычного не замечаете? У меня почти невидимые клеточки. Цвет #C4C4C4 на фоне #CCCCCC да ещё с моим дальтонизмом — я их действительно еле вижу, главное что я знаю, что они там есть и если приглядеться, то я их отчётливо вижу. Особо внимательные заметят, что в каждую клеточку помещается 4 символа по горизонтали и 2 по вертикали.

Теперь немного утомительной истории. Путём наблюдений и экспериментов я пришёл к выводу, что у меня есть некая особенность — проблемы лучше решаются, если во время размышлений вести записи на листочке в клеточку. Первый раз я это заметил решая просто гигантское количество задач по планиметрии в 8 классе. В дальнейшем доходило даже до маразма; для того, чтобы решить одну задачу на вступительных экзаменах в МГУ мне пришлось разлиновать в клеточку выданный листочек. Я всё не мог понять с чем это связано, и вот, когда начал использовать XEmacs в году '97-98, то понял. Как сейчас помню, сидел набирал текст какой-то программы и возникло острое ощущение, что буквы, которые я так старательно набираю, сейчас разбегутся, а вместе с этими буквами разбегутся и вкладываемые мысли. Тогда то я и понял, что хорошие мысли порождаются свободным разумом, но истинно свободный разум также легко теряет мысли как и порождает их, для разума-рабочей лошадки, нужна «клетка». Вот такая вот психология.

Со временем, поэкспериментировав с цветом и размером клеток в окнах (S)XEmacs я нашёл оптимальный (дающий наибольшую продуктивность) для себя вариант — тот, что на картинке.

И вот представьте, сижу я как обычно печатаю текст, пытаясь вложить в него хоть немного смысла, как вдруг, буквы, в прямом смысле этого слова, начинают убегать и смешиваться друг с другом. Всё думаю, доигрался, колёсики уехали. Как ни странно, но первая мысль была именно, что проблемы у меня, а не у SXEmacs. Немного успокоившись задался вопросом почему так произошло, ведь раньше такого не было. Нашёл особенность — использовался flyspell режим, который обычно выключен. Покопавшись в flyspell нашёл особенность, что self-insert команда может породить вызов accept-process-output. Дальнейшее разбирательство привело к ASYNEQ. А текст так и не написал :(

ReST source Скачать оригинал

UPD: Код для сетки

(defface lg-grido-face
  '((((class color) (background dark))
     (:foreground "gray10"))
    (((class color) (background light))
     (:foreground "gray77"))
    (t (:foreground "gray77")))
  "Face for grid.")

(push '("grido" (face-foreground 'lg-grido-face)) xpm-color-symbols)

(defconst lg-square-64x64-xpm
  (concat
   "/* XPM */\n"
   "static char *mini_square_xpm[] = {\n"
   "/* columns rows colors chars-per-pixel */\n"
   "\"64 64 2 1\",\n"
   "\"       c None s background\",\n"
   "\".      c gray77 s grido\",\n"
   "/* pixels */"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"................................................................\"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n,"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "\"    .                                                           \"\n"
   "};"))

(set-face-background-pixmap
 'default
 (make-image-specifier (vector 'xpm :data lg-square-64x64-xpm))) 

9 комментариев:

Alex комментирует...

А не подскажете, с помощью чего это вы нарисовали такую замечатльную сеточку??

lg комментирует...

добавил upd. по хорошему эту xpm нужно генерировать на лету, а не явно задавать

Alex комментирует...

А такое возможно только в SXEmacs?
GNU/Emacs выдал вот такую вот ошибку:

Symbol's value as variable is void: xpm-color-symbols

lg комментирует...

да, это будет работать только в (S)XEmacs. Но я думаю в GNU Emacs тоже есть возможность использовать tiled background для фрейма, но вот как - не могу подсказать :(

lg комментирует...

только что сообщили, что нельзя в GNU Emacs сделать такое, но есть какой-то неофициальный давнишний патч, который уже не прикручивается .. вобщем вот так

Dmitry комментирует...

не могли бы вы выложить свои dotfiles для sxemacs (например на github)?
интересно посмотреть как что настраивается, какие различия с GNU Emacs

lg комментирует...

лучше на ты, вроде свои люди :)

http://lgarc.narod.ru/sxemacsen/init.el

в принципе, можно спрашивать по любым вещам, лишь бы не утомиться

PS: сразу извиняюсь, может спорол какие глупсоти, сейчас малясь нажрался сегодня и на то есть веские причины, но об этом позже .. под новый год поднаготная SXEmacs откроется! ;))) ржать будут все, особенно разработчики

lg комментирует...

ссылку ещё разо продублирую, а то бог знает, что от blogerrа ожидать

Dmitry комментирует...

"под новый год поднаготная SXEmacs откроется! ;))) ржать будут все, особенно разработчики"

заинтриговал, буду ждать