Saturday, January 31, 2026

Re: Asimov

«Re: Азимов» — это моя интерпретация рассказа Азимова «Последний вопрос».

Когда я читал его в детстве, меня поразил масштаб истории, но смутил финал: почему всемогущий сверхразум решил остаться на второй год в космической школе или вообще застрять в этой бесконечной петле?

На этот раз всё по-другому. Вместо того чтобы перезапускать всё заново, мы перерастаем необходимость в этом.

Голос извне — кем бы он ни был — ждал перехода от «мы» к «я», а не простого господства над Вселенной.

«Последний вопрос» Азимова — обязательное чтение, несмотря ни на что.

#музыка #научнаяфантастика

Thursday, January 29, 2026

Brooklyn Streets


Русский шансон по-английски "Around the Блок" #AndyKa #music #chanson

Friday, January 23, 2026

Моя новая песня "Forest Cabin"

Это часть моей будущей космо-оперы. Остальные части скоро будут. В видео есть английские и русские субтитры.

Thursday, April 13, 2023

Язык программирования Аргентум

(Argentum programming language: aglang.org)



Пару месяцев назад я начал новый проект - это язык программирования Argentum.
А как же Фламберг, спросите вы и будете совершенно правы. Фламберг был хорошим оценочным проектом, на котором обкатались идеи, многие из которых стали основой Аргентума - это объектная модель, интерполяция строк, легковесные лямбды. Вместе с тем было выброшено и переделано все, что мешает в больших структурированных проектах - синтаксис основанный на отступах, модульность через текстовые инклуды, тяжелый interop с Си.

Итак новый язык:

  • Работает без сборщика мусора, поэтому не запинается в лучайные моменты времени, не жрет двух- трехкратный объем памяти, и не тратит лишнего процессорного времени.
  • Гарантированно удаляет объекты в предсказуемые моменты времени.
  • Гарантирует отсутствие утечек памяти (в отличие от Java, Rust, Swift и т.д.)
  • Язык безопасен:
    • Проверки типов -только динамические (но очень быстрые).
    • Синтаксически невозможно обратиться по null-указателю или optional none.
    • Нет висящих ссылок, и двойного удаления объектов.
    • Нет race между потоками.
    • Изменяемые объекты не могут шарится между иерархиями объектов, а разделяемые объекты не могут изменяться.
    • Неизменяемость объектов - гарантирована. Нет const_cast, нет взлома финальности через рефлексию.
  • Язык очень быстр:
    • Прямая компиляция в машинный код.
    • Динамическая проверка типов - пара машинных инструкций.
    • Вызов методов интерфейса и приведение к интерфейсу имеет такой же порядок сложности, что и вызов обычного метода класса.
    • Работа с делегатами и лямбдами не требует аллокаций.
    • Счетчики в шареных объектах не используют атомарные инструкции (вообще примитивы синхронизации используются только при передаче объектов между пртоками).
  • Язык компактен (hello_world.exe может быть собран в 12Kb без дополнительных DLL).
  • Программа на Аргентуме может напрямую вызывать код на Си.

Saturday, January 8, 2022

Alien Die - летопись проекта с картинками и советами

Как я будучи полным нубом дизайнил и паял свой первый проект на голом микроконтроллере


Жил был программист, и случился у него кризис среднего возраста.
Подобрался и потребовал сделать что-то новое, и безбашенное:
  • разработать с нуля печатную плату
  • сделать устройство с голым микроконтроллером, чтоб никаких Arduino
  • спаять микроскопические SMD компоненты
  • и всё это на часовой батарейке.
В общем, взял он в руки паяльник и стал думать.

Sunday, July 18, 2021

Улучшаем условный оператор - if-then-else

Как сказал один автор на хабре, условный оператор if-then-else приобрёл свою финальную идеальную форму и его уже нельзя улучшить. Давайте из вредности попробуем что-нибудь с ним сделать.

Friday, January 4, 2019

Latinski alfavit dlia russkogo iazyka


Зачем?

Во-первых, латиницу удобнее читать:
  • Кириллица имеет широкие буквы (ЖЩШ) и глифы, состоящие из нескольких фигур (Ы). Латинские буквы ỳже, их удобнее схватывать взглядом при быстром чтении. К тому же более короткие слова уменьшают потребность в переносах.
  • Латинские символы имеют более различимые формы, больше выносных элементов, за которые цепляется глаз (splint).
    С другой стороны кириллица это частокол квадратных букв одной высоты (шплинт),
Во-вторых, латиницу проще писать:
  • Не нужны клавиатуры с несколькими буквами на каждой клавише.
  • Отпадает переключение режимов клавиатур.
  • Не нужно несколько раз заново учиться быстрой печати вслепую.
В-третьих, это приходится делать все равно.
  • В документах международного образца, вывесках и указателях латинскими буквами записываются русские имена и топонимы.
  • Кириллический шрифт есть далеко не везде, и приходится пользоваться костылями в виде транслита.

А как же вековое наследие предков?

Его нет.
Тот алфавит, который мы сегодня называем кириллицей, не имеет ничего общего с буквами, придуманными Кириллом и Мефодием.
  • Во-первых, они придумали глаголицу (ⰀⰁⰂⰃ...)
  • Во-вторых их звали не Кирилл и Мефодий, а Константин и Михаил.
  • В третьих даже приписываемая им более поздняя кириллица выглядела так: ѦѪѮѰѲѼ
Современный алфавит - это продукт двадцатого века. Он введен правительством Керенского. До него было множество алфавитов:
  • древнеславянский,
  • церковно славянский устав,
  • полуустав,
  • петровский гражданский, который реформировался три века подряд: XVII, XVIII, XIX.
Убирались и добавлялись буквы, менялся их смысл, упрощались правила.
Непонятно, почему в XX веке этот процесс остановился. Война за букву Ё, да незначительная ожеговская реформа - вот и все, пожалуй.

А между тем, в современной кириллице множество нелогичностей и неоднозначностей:
  • Звук Й в половине случаев не произносится, а в половине - не отличается от И.
  • Гласные "е, ё, ю, я" - это двойные звуки "йэ, йо, йу, йа". Почему например, "Ёж", но "Йод"?
  • Твердый знак, это на самом деле звук Й: объединение = обйединение.
  • Мягкий знак - это тоже звук Й, правда, очень краткая его форма (серйёзно, оригиналйно).
  • Щ - это мягкая Ш (то есть Шй)
Если убрать эти дублирования, это не только сократит алфавит, но и упростит правила, что в свою очередь облегчит и письмо, и чтение.

Реформировать надо все равно. Буквы "ЕЁЮЯЙЪЬЩ" - лишние. Как лишними были в свое время фита, еръ, ять и десятеричная и. Когда их убирали, было много воплей, но по прошествии лет, все увидели, что они действительно не нужны.

«В чашйах йуга жил-был цитрус, да, но фалйшивый экземплйар».

Почему не взять транслит?

История знает множество попыток перевести русский язык на латинский алфавит. Но никогда авторы не ставили целью сделать латиницу главным алфавитом.

Латинской транслитерации всегда отводилась второстепенная роль. Думали только о том, чтобы передать каждый символ кириллицы одним или несколькими латинскими символами. А между тем, если совместить переход на латинские начертания и сокращение алфавита, букв хватит и так. Сдвоенные символы будут не нужны.

Как это будет выглядеть?

  • Буквы "АБВГДЖЗИКЛМНОПРСТУФХЦЫЭ" напрямую отображаются в латинские "ABVGDJZIKLMNOPRSTUFHCYE".
  • Буква "Й" - или вообще не пишется (если она не звучит), или записывается как I, или если она и вправду корраткая, передается апострофом.
  • Твердый знак - всегда и везде звучит как Й. Поэтому см. предыдущий пункт.
  • Мягкий знак передается апиострофом, это сверхкраткая И.
  • Гласные "ЕЁЮЯ" - передаются комбинацией I и не-йотированной парной гласной (IE IO IU IA) причем, во многих словах этот апостроф можно вообще не писать, т.к. й-отированность в них - дань исторической традиции, и уже давно не произносится (напр. proiznosica).
  • Остаются две проблемные буквы Ч и Ш. Их нет в латинице. И даже использующие латиницу европейские языки передают эти звуки парами ch sh или специальными диакритическими знаками. Мы не будем изобретать новую версию латиницы, но мы также не можем использовать буквосочетания, т.к. в отличие от того же английского языка, в славянских языках это весьма распространенные звуки.
    • У нас есть буква q, которая в курсиве мало отличается от ч (чq).
    • Звук Ш получает последнюю неиспользованную латинскую согласную X.
    • А Щ, как мы уже знаем, - это просто мягкая Ш, она будет записываться как X'.

Итоговый алфавит:

А-A
Б-B
В-V
Г-G
Д-D
Е-IE
Ё-IO
Ж-J
З-Z
И-I
Й-I
К-K
Л-L
М-M
Н-N
О-O
П-P
Р-R
С-S
Т-T
У-U
Ф-F
Х-H
Ц-C
Ч-Q
Ш-X
Щ-X'
Ь-'
Ы-Y
Ъ-I
Э-E
Ю-IU
Я-IA

Примеры

Tot alfavit, kotory my segodnia nazyvaem kirillice', ne imeet niqego obxego s bukvami, pridumannymi Kirillom i Mefodiem.
  • Vo-pervyh, eti gospoda pridumali glagolicu (ⰀⰁⰂⰃ...)
  • Vo-vtoryh, ih zvali ne Kirill i Mefodi, a Konstantin i Mihail.
  • V-tretih, daje pripisyvaemaia im bolee pozdniaia kirillica vygliadela tak: ѦѪѮѰѲѼ
Sovremenny alfavvit - eto produkt XX veka, on vveden pravitel'stvom Kerenskogo. Do nego bylo mnojestvo peredelok: drevne-slavianski, cerkovno-slavianski ustav, poluustav, petrovskaia reforma, reformy XVII, XVIII, XIX vekov. Ubiralis' i dobavl'alis' bukvy, menialsia ih smysl i uprox'alis' pravila.

Neponiatno, poqemu v XX veke etot process ostanovilsa. Vo'na za bukvy Io i neznaqitel'naia ojegovskaia reforma, vot i vse, pojalui.

A mejdu tem, v sovremennoi kirillice mnojestvo netoqnoctei i neodnoznaqnostei:
  • Glasnye е, ё, ю, я - eto sdvoenye zvuki ie, io, iu, ia. Eto porojdaet putanicu. Poqemy, naprimer, Ioj eto Ёж, no Iod eto Йод?
  • Tverdy znak, eto na samom dele zvuk i: obъedinenie = obiedinenie.
  • Miagki znak - eto tot je zvuk i, pravda, bolee kratkaia ego forma (seriozno, original'no).
  • X' - eto m'agka'a X.
Zvuk (') ispol'zueca v russkom iazyke tak qasto, qto ego stoit oboznaqit' kakoi-to melkoi zakoruqkoi, soobrazno ego kratkosti i vspomogatel'nosti. V evropeiskih iazykah est' simvol apostrof (') vypolniaiux'i kak raz takuiu funkci'u.

Poprobuem zapisat' "йеёюяьщъ" s ispol'zovaniem apostrofa, a "Э" zapixem kak "Е":
«V qax'ah iuga jil-byl citrus, da, no fal'xivy ekzempliar»
M-da, s neprivyqki glaz slomaiex'. Odnako dlia neofitov - inostrancev, detei, tol'ko naqavxih izuqat' gramotu - nesux'ectvenna kategori'a privyqno-neprivyqno. Dlia nih eta zapis' toqneixim obrazom peredaiot zvuki, kotorye proiznosiaca pri proqtenii: slovo iex'o ne imeet niqego obx'ego c bukvami "е-щ-е" (exx'e).

Odnako privyqka - vtoraia natura. I mejdu logiqnym i privyqnym liudi vsegda vybiraiut privyqnoe. I eto odna iz doponitel'nyh priqin pereiti na latinicu: pod pokrovom sloma privyqnogo mojno sokratit' alfavit na vosem' bukv, uprostiv pravila zapisi.

No osnovnye priqiny, koneqno, drugie. Oni lejat v socio-kul'turnom i tehnologiqeskom plane:

  • Vozvratit' russkuiu kul'turu v semiu evropeiskih narodov.
  • Uprostit' ispol'zovenie tehniki: nikakih dopolnitel'nyh raskladok klaviatur, xriftov i proxivok ustroistv.
  • Sdelat' tekst bolee kompaktnym: latinski alfavit ủge.
  • Povysit' udoboqitaemost': kirillica - sploxnoi zabor iz odinakovyh kvadratnyx bukv: (шщцеплин - xx'ceplin).
Istori'a znaet mnojestvo popytok perevesti russki iazyk na latinski alfavit. I vsegda avtory latinskoi transliteracii staralis' sohranit' koliqestvo simvolov i odnoznaqnoe otobrajenie. Poetomu i tak ne oqen' udobny tekst "zaxixaia qexuxeesia oxuxenie" v transliteracii stanovica neqitaemym "zaschischaya cheshusheesya oschyschenie".

My ne budem sohraniat' alfavit. My ego budem sokrax'at':
  • Bukvy "АБВГДЖЗИКЛМНОПРСТУФХЦЫЭ" napriamuiu otobrajaiuca v latinskie "ABVGDJZIKLMNOPRSTYFHCYE".
  • Bukva "Й" - kogda ona  deistvitel'no oboznaqaet korotki zvyk, peredaetsa apostrofom, inogda ona proiznosica dlinno, togda ona peredaeca kak I, a inogda ona voobx'e ne proiznosica, zaqem ee togda voobx'e pisat'?
  • M'agki' i tverdy' znaki - apostrofom ili kak I, v zavisimosti ot dlitel'nosti.
  • Glasnye "ЕЁЮЯ" - pereda'uca kombinaciei I i parno' glasno' (IE IO IU IA) priqem vo mnogih slovah etot I mojno ne pisat', t.k. on uje davno ne proiznosica.
  • Ostaiuca dve problemnye bukvy "Ч" i "Ш". Ih net v latinice. I daje evropeiskie iazyki ispol'zuiuxie latinski alfavit eti zvuki peredaiut parami "ch" "sh" ili special'nymi diakretiqeskimi znakami. My ne budem izobretat' novu'u versi'u latinicy, no my takje ne mojem ispol'zovat' pary bukv, t.k. v otliqie ot togo je angliiskogo iazyka, v slavianskih iazykah eto ves'ma rasprostranennye zvuki.
    • U nas est' bukva "q", kotoraia v kursive malo otliqaeca ot "ч" (чq).
    • Zvuk "Ш" poluqaet poslednuiu neispol'zovannuiu latinskuiu soglasnuiu "X".
    • A "Щ" - eto prosto miagkaia "Ш", ona budet zapisyvaca kak X'.
Glavnye svoistva alfavita:
  • Ispol'zuiuca tol'ko bazovye latinskie bukvy, nikakih dopolnitel'nyh znakov net.
  • Glasna'a peredaeca glasnoi. Soglasnaia - soglasnoi.
  • Vse simvoly imeiut privyqnoe naqertanie (krome Ч-Q, Ш-X).
  • V otliqie ot original'noi kirillicy ubrany neodnoznaqnosti: ioj/iod (ёж/йод).
  • Tekst stal koroqe. Korotkie slova prox'e qitat' i perenosit'.
  • V otliqie ot translita tut net dvuhbukvennyh simvolov tipa SH, CH. Obratite vnimanie, qto dvuhbukvennye simvoly tipa IA - eto ne special'nye digrafy, a priamaia zapis' zvukov, iz kotoryh sostoit Я.
Otobrajenie znakov v zvuki stalo priamee.

Povtoriu iex'o raz, primenenie apostrofov i simvola I - eto ne priqudlivaia popytka zakodirovat' nesux'estvuiuxie bukvy. Eto odnoznaqnoe kodirovanie zvukov, kak oni proiznos'aca po-russki.

Thursday, February 8, 2018

Игра

Это идея компьютерной игры в стиле пост-модерн.
Сначала игра выглядит как платформер или метроидвания, но потом она открывается новыми гранями.

Кратко: песочница с открытым миром, сценой которой являются уровни видеоигр.

Friday, February 10, 2017

Flamberg: лексика

Исходный текст фламберга - это текстовый файл в utf-8 с расширением ~ или flam.

Комментарии

Комментарии начинаются с символа ";" и следуют до конца строки.

Пример:
a = 42 ; от символа ';' до конца строки - всё это - комментарий

Поскольку в Фламберге операторы не заканчиваются на точку с запятой и не бывает нескольких операторов в одной строке, я счел возможным вернуть символу ";" древнеассемблерный смысл.

Многострочные комментарии вводятся как строковые литералы. Часто в виде параметров для функций, отвечающих за генерацию документации.

Sunday, February 5, 2017

Flamberg: tutorial

Первое знакомство

Hello world.

"Hello world"

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

Можно использовать Flamberg в качестве калькуллятора
2*2
Все, что возвращено из программы будет напечатано в консоль, если это конвертируется в текст.

То же, но с форматированием строки
"result={2*2}"
В строку, заключенную в кавычки можно вставлять выражения в фигурных скобках. Они вычислятся, сконвертируются в строку и вклеются в нужные места строки.

Monday, January 30, 2017

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

Вот!
После четырех лет опытов, и двенадцати промежуточных и просто неудачных вариантов я таки-сделал свою идеальную клавиатуру.

Так она выглядит в программе 3d моделирования

Friday, January 27, 2017

Язык программирования Flamberg

Flamberg - это компилируемый в машинный код строго типизированный императивный язык программирования. Его модель памяти, владения и управления временем жизни не использует сборщик мусора. В общем, он в одной нише с Си, С++ и Rust.

Примеры

Hello world
Куда же без него:
"Hello world"
Более сложный пример - сделать запрос в mysql и вывести результат в консоль
mySql.connect dbName user password
..query "
     select name, id
     from users
     limit 100, {request.page}
..map: u "
     <li id="u_{u.id}">
         {u.name}
     </li>
..echo

Thursday, January 12, 2017

Менеджер памяти (Allocator) для С++

Исходный текст аллокатора можно взять тут: allocator.zip

Стандартный аллокатор из C++ runtime library - не очень эффективная штука. Он унаследован из мира plain C и поэтому расчитан на несколько другой стиль использования, нежели принят в С++. Он расчитан на отностительно редкий захват крупных блоков. В то время как в С++ принято создавать и убивать тысячи мелких объектов в секунду. Поэтому стандартный аллокатор имеет две существенные проблемы: 
  • он медленный,
  • он сильно фрагментирует память.

Попробуем это исправить. :-)

Sunday, January 8, 2017

Краткое изложение Policode

Имел глупость опубликовать описание Поликода на некоторых русскоязычных форумах и получил массу негативного фидбэка.
Как я понял, основная причина в том, что я недостаточно кратко и структурированно описал, что такое Поликод и для чего он нужен.
Поэтому я подготовил вот такое краткое тезисное описание.

Тезисы 

Предлагается формат для хранения текста в файлах и передачи по сетям.
Внутри приложений он преобразуется в какое-то внутреннее представление, которое никак не описывается данным форматом.

1. Вместо фиксированных кодов символов из диапазона 0..0x10ffff вводятся имена переменной длины, количество которых не лимитировано.

2. Вводятся пространства имен — алфавиты (латиница, польский, древнеславянский).
Один и тот же символ может иметь разные смыслы в разных алфавитах.
Алфавиты также задаются именами их может быть сколько угодно.

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

  • разные семантические операции,
  • сортировку,
  • озвучивание разными голосами,
  • визуализацию разными шрифтами и т. д.

Алфавиты могут определяться с нуля или расширять какие-то другие алфавиты.
Например "Древнегерманский" наследует у "Германского", который в свою очередь наследует у "Латиницы". Текст начинается с имени, например, древнегерманского алфавита, и за которым идет последовательность имен символов.
И эти имена вначале ищутся в древнегерманском алфавите, если не найдены — в современном германском, если их нет и там, в общелатинском.

Символ опознанный алфавитом отображается и обрабатывается этим алфавитом.
Алфавит может трактовать символ как отображаемый, модифицирующий или управляющий.

Текст может состоять из множества фрагментов, написанных разными алфавитами.

Символ не опознанный алфавитом отображается дефолтным (fail-safe) рендерером.
Это возможно потому, что имена символов — это не строки текста, а команды рисования.
В вышеприведенном примере на моем компьютере была установлена только общелатинская культура, поэтому я увижу:
— пометку, что текст древнегерманский,
— обычные латинские буквы,
— несколько странных угловатых древнегерманских букв (отображенных дефолтным рендерером).

3. Имена символов являются командами рисования и задают их внешний вид, и для этого существует две нотации:
— условное грубое начертание — оно компактно и пригодно для 99% случаев,
— полиграфически аккуратное начертание — позволяет кодировать многоцветные комбинации полигонов, заданных сплайнами, но занимает немного больше места.

Имена символов позволяют увидеть условный текст во всех случаях, когда на целевом компьютере не установлена нужный алфавит (это тот случай, когда в юникоде вообше ничего нельзя увидеть).
Да, такое fail-safe отображение не блещет красотой и не позволяет делать алфавитную сортировку, но прочитать текст можно.

4. Нет централизованного управляющего комитета. Любой человек может создать свой символ и придумать свой алфавит, дающий новый семантический смысл существующим символам.
На тех устройствах, где этот алфавит не поддержан или этот символ неизвестен, он все равно будет отображаться.

5. Работа с именами символов вместо кодов — затратное дело. Они занимают много памяти, и их приходится искать в хеш-мапах.
Поэтому существет таблица на 252 элемента, которая строится автоматически в процессе парсинга текста.
Благодаря этой таблице последние 252 символа или имени языковой культуры использованные в тексте могут быть закодированы одним байтом и обработаны без поиска текстовых строк.

Все детали и технические подробности можно найти в оригинальном посте

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