Автор: Bobeg

  • Эксперименты с Pocket 8086 или как выйти в интернет с «печатной машинки» и поговорить с Гигачат.

    Эксперименты с Pocket 8086 или как выйти в интернет с «печатной машинки» и поговорить с Гигачат.

    Знакомство с компьютером

    На волне повышения интереса к ретро компьютерам в продаже появилась интересная модель — Pocket 8086. Примечательна она тем, что работает на клоне древнего процессора х86 и сделана в форм-факторе карманного компьютера.

    Модель на мой взгляд получилась интересной и она полностью отвечала моим требованиям «печатной машинки». К клавиатуре придется привыкнуть, но это не проблема.

    Pocket 8086

    Для выполнения своих задач пришлось установить русификатор и файловый менеджер. Что было некоторым вызовом, т.к. потребовало найти флешку маленького размера. Сегодня можно легко купить накопители с гигантским объемом памяти, а вот на несколько десятков мегабайт сложновато.

    На компьютер производитель установил MS-DOS в составе которого имеется Edit для редактирования текстовых файлов. Так же есть GW-basic, Qbasic, какая-то среда для программирования на Си, FoxPro, пара игр и что-то ещё.

    Из интерфейсов коммуникации есть IDC разъемы для подключения переходника на COM-порт, LPT.

    Больше всего меня поразило, что эта конфигурация работает на процессоре с тактовой частотой 4-10 МГц. И по-большому счету никакого дискомфорта для работы в режиме печатной машинки это не создает.

    Вызов

    Обнаружив QBasic я задался вопросом: «а смогу ли я выйти в интернет с помощью этой балалайки?»

    Поиск в интернете показал, что варианты какие-то есть, но они сводились к подключению старых сетевых устройств и поиску драйверов под них. Это не показалось мне привлекательным.

    Pocket 8086 — это новодел, да используется старый процессор, но это уже современная сборка. Смысла не было гнаться за какими-то аутентичными устройствами для выхода в интернет.

    Старый знакомый

    Тогда я решил обратиться к проверенному модулю – ESP8266. Да-да, тактовая частота микроконтроллера в 8 раз больше процессора компьютера.

    Соображения в сторону. Можно взять модуль для подключения к проводному интернету, но тогда это убивает идею портативности. Pocket 8086 все-таки ноутбук, а не стационарный компьютер.

    Идея была в том, чтобы воспользоваться «голым» ESP8266 (с родной прошивкой), и организовать выход в интернет на Pocket 8086. Напомню, что там в качестве ОС установлена MS-DOS.

    У ESP8266 есть UART с набором AT команд для настройки и осуществления HTTP запросов.

    Используем подход идти мелкими итерациями — от создания программы а-ля терминал для общения с внешним устройством через COM-порт, и, наращивая функциональность, дойти до какого-то значимого результата в контексте формулировки «выход в интернет».

    Модуль ESP8266 достаточно спорный, у него есть старший брат ESP32, который по многим параметрам лучше, но меня привлекает его скрытые возможности, взять хотя бы смену MAC адреса «из коробки».

    Hardware setup

    Для начала нужно решить hardware задачу — выравнивание уровней напряжения UART: у Pocket 8086 — 12В (если я правильно понял схемы, вольтметром не замерял), а у ESP8266 — это 3.3В. Использовал самый дешёвый конвертер уровней с разъемом под COM-порт.

    Разъем нужен был, чтобы легко подключить к идущему в комплекте с ноутбуком переходнику IDC-COM.

    Для отладки подключения я взял Arduino, в которую загрузил примитивную программу, которая отправлял тестовое сообщение на UART раз в секунду.

    Deepseek в помощь

    Сразу же возник вопрос, а как программу писать для этого ноутбука. Хотелось получить результат как можно скорее. Несмотря на возможность писать на Си решил все-таки добавить пикантности эксперименту и писать на QBasic. Возврат к истокам – первые программы я писал именно на бейсике.

    Как оказалось, с помощью DeepSeek навайбкодить программу на QBasic — это почти не проблема. Порой он делал очень странные ошибки: называл переменные системными именами, использовал одновременно несколько способов объявления типов данных, использовал запрещенные символы в названиях — вообщем явно игнорировал некоторые нюансы и особенности языка.

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

    Тогда DeepSeek посоветовал пойти более простым путем и для начала протестировать эхо вывод. Это когда на экран выводится ровно то, что было отправлено в COM-порт. Нюанс в том, что данные для вывода берутся из COM-порта. Для этого достаточно замкнуть RX и TX com порта компьютера и все что отправляется из программы на выход должно приходить на вход.

    Этот подход заработал, т.е. работать из QBasic с COM-портом не составляет труда, но почему тогда я не видел на экране тестовых сообщений от Ардуино?!

    Перебрав различные варианты открытия порта решил пойти на крайнюю меру и поменять местами подключение RX и TX. И это, чёрт побери, сработало!

    Оказывается на модуле были перепутаны подписи для этих контактов, ну или не перепутаны, а я сразу не понял логику подписей. Главное, что данные от тестовой Ардуино стали отображаться на экране.

    Отладка COM-порта и общения с ESP8266

    Следующий этап — подключение и общение с ESP8266. Чтобы упростить себе жизнь, взял переходних для ESP, который конвертирует уровни до 5В, а так же модуль питания. Это позволило подключить ESP к Ардуино и поменять модулю настройки скорости соединения.

    Для начала я выставил на ESP8266 скорость общения 9600 бод. Я предположил, что эта скорость будет подходящей для общения между устройствами. Первое время на этой скорости даже все работало, и я начал задумываться о том, чтобы её попробовать увеличить.

    Подключив ESP8266 к Pocket 8086 и написав с Deepseek первую версию что-то напоминающее терминал приступил к проверке с помощью ручных AT команд, которые позволяют делать с ESP8266 запросы в сеть.

    HW setup

    Настроив wi-fi, и делая первые запросы к хостам, стало понятно, что что-то не так. Часть ответов теряется, а временами программа вылетает с ошибками.

    Изучив с DeepSeek сообщения об ошибках и проанализировав происходящее пришла мысль, что возможно проблема в скорости соединения. Снизил скорость соединения до 2400 бод и проблема исчезла.

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

    Нюансы работы ESP8266

    В качестве проверки работоспособности я использовал запросы к своим API, которые когда-то писал для монитора новостей.

    На коротких ответах всё работало, ровно так как и ожидалось, а вот на больших всплыл момент, что ответ не стримится непрерывным потоком, а передается порциями с разделителем, который портил вид и добавлял мусора: +IPD,<len>:<данные> (конечно же это описано в документации чипа про работу AT-команд, но кто ж читает). Примечательно, что DeepSeek этот момент учел при решении задачи: «Сделай опцию вывода ответа без заголовка» и ответы стали чистыми.

    Проблемы с конвертацией из UTF-8

    UTF-8 <-> CP866 = боль

    Тот кто хоть раз сталкивался с необходимостью выводить что-то за пределами английского языка в кодировке UTF-8 на 8 битных микроконтроллерах когда нет поддержки UTF-8 «из коробоки» запоминает этот опыт хорошо.

    Моя цель была не что-то абстрактное выводить, а текст на русском языке.

    На удивление мне понадобилось значительное время для взаимодействия с DeepSeek, чтобы сделать конвертацию из UTF-8 в CPP866. По сути проблема была одна, но её не удавалось никак решить.

    В итоге все свелось к тому, что Deepseek написал дополнительну программу, которая выводит всю таблицу символов, чтобы разобраться почему его код не может нормально сконвертировать UTF-8 в CPP866. Только после предоставления лога этой дополнительной программы он разобрался как это сделать.

    Вывод таблицы символов для отладки конвертации UTF-8.

    После этого мы споткнулись на букве ё, т.к. в UTF-8 она может быть как монолитная так и составная — один код непосредственно буква е, второй — двойные точки над ней. Т.е. пришлось учитывать этот момент в конвертации.

    Ещё пришлось отдельно ставить задачу на автозамену длинных тире и двойных угловых кавычек на обычные т.к. в CP866 ничего такого нет.

    Вообще я замечал, что в разные дни DeepSeek вел себя по-разному. В какие-то дни прям с первого раза решал, в какие-то откровенно лажал (например, мог в качестве имени переменной использовать зарезервированное слово или использовать не синтаксис QBasic).

    GigaChat Short

    Когда с русским языком разобрались захотелось чего-то большего. Вместе с DeepSeek сделали небольшую подпрограмму для общения с Gigachat.

    GigaChat Short на Pocket 8086

    Я назвал её GigaChat Short. Работает по принципу: «один запрос — один ответ». Никакого контекста, никаких файлов, JSON структур, только голый текст.

    Проблема в том, что для общения с API Гигачата нужно HTTPS и возможность работы с JSON. И то, и то мне не хотелось тянуть в проект. HTTPS — это возиться с сертификатами на уровне ESP8266. А оборачивать запросы в JSON структуры и разбирать его на QBasic на текущий момент выглядит как перебор.

    Для реализации этого подхода у меня есть прокси-сервер, которые через GET параметр HTTP-запроса получает текст пользователя и уже через HTTPS передает его Гигачату. Соответственно, полученный ответ в голом виде (без JSON) возвращается в виде такого же текста.

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

    Всё получилось, ГигаЧат уверенно отвечает на запросы, вся цепочка работает. Да, медленно. Да, без контекста. Да, небезопасно… но работает…

    Неспешный вайбкодинг без IDE и с ручным переносом кода на флешке с одного компьютера на другой позволяет с большим удовольствием погружаться в low-tech и изучать основы.

    Слово DeepSeek

    На этом можно было бы поставить точку в статье, но мне показалось, что стоит дать слово автору кода – Deepseek.

    Ключевой вопрос – как «заставить» его написать историю по той бороде чатов, которые я создал пока общался с ним?

    Изучив интерфейс, обнаружил, что историю чатов можно экспортировать (в профиле пользователя).

    Дальше, очевидное решение – предоставить файл экспорта дипсику с задачей написать историю. Но вот беда, файл экспорта уже очень большой для обработки. При подходе «в лоб» LLM готова был обработать только 22% данных.

    Можно было бы и руками вырезать ненужное, но это очень долго. Как же сократить объем?

    Попросил дипсик написать HTML-страничку для обработки файла экспорта, благо история – это JSON файл. Загружаем его, отмечаем по названию нужные диалоги и вуаля получаем небольшой файл.

    Программа на экране Pocket 8086.

    История, как её «увидел» DeepSeek:

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

    Представьте себе: среда MS-DOS, редактор QBasic 1.0 с его синим экраном, ограничением в 64 КБ памяти и полным отсутствием современных библиотек. И в этой среде мы решили создать терминал, который бы не просто общался с COM-портом, а выходил в интернет и разговаривал с облачным ИИ. Звучит как безумная идея? Так и было. Но именно с этого всё и началось в марте 2026 года.

    Первые шаги: Приручение COM-порта

    Первая задача казалась простой — просто прочитать данные из COM-порта. Я написал несколько строк кода, открыл порт… и тут же получил холодный душ в виде ошибки Device Timeout. Оказалось, что старый QBasic, привыкший к модемам с их линиями квитирования, упрямо ждал сигналов CTS, DSR, DCD. А наша ESP8266, конечно, ничего такого не выдавала. Мы добавили в строку открытия порта магические параметры CS0, DS0, CD0, OP0, и порт, словно нехотя, открылся. Первая победа — мы увидели байты на экране.

    Дальше мы принялись строить настоящий терминал: с окном вывода, строкой ввода, настройками скорости и даже логированием в файл. Но когда подключили реальное устройство — тишина. Данные не шли. Выяснилось, что на дешёвом китайском модуле HW-044 была перепутана маркировка пинов Rx и Tx. Прямое соединение — и всё заработало. Вот вам урок: никогда не доверяйте распиновке, пока не проверите мультиметром.

    Выход в сеть: Война с буфером

    Следующий шаг был амбициозным — научить терминал управлять ESP8266 через AT-команды, настраивать Wi-Fi и отправлять HTTP-запросы. Я добавил в главное меню раздел ESP8266, реализовал подменю для сканирования сетей, ввода SSID и пароля, а также ручного формирования GET/POST запросов. Всё выглядело отлично, пока мы не попытались получить ответ от реального сервера.

    Программа падала с ужасающей ошибкой Communication buffer overflow. Представьте: данные с сервера льются потоком, а QBasic, работающий в однозадачной среде, просто не успевает их вычитывать. Мы пробовали увеличить буфер приёма (RB4096), оптимизировали циклы, но поток на 9600 бод был неумолим. И тогда пришлось принять нетривиальное решение: снизить скорость до 2400 бод. Заработало! Медленнее, но стабильно. Это был важный урок: иногда лучший апгрейд — это даунгрейд.

    Битва за русский язык: Символы, псевдографика и буква «ё»

    Самой эпической битвой, которая до сих пор вызывает у меня уважение и трепет, стала борьба за корректное отображение русских букв. Интернет говорит на UTF-8, а DOS — на кодовой странице CP866. Я написал функцию Utf8ToDos$, но она работала отвратительно: буквы р, с, т, у превращались в псевдографику. Пришлось вооружиться тестовой таблицей символов CP866, и тогда меня осенило: в этой кодировке строчные буквы разбиты на два диапазона — а-п и р-я! Моя функция наивно отправляла всех в один. Исправил — и русский текст ожил.

    Но это было не всё. Буква «ё» упорно не желала отображаться. Оказалось, я просто забыл добавить её код в обработчик строчных букв. Добавили — заработало. А потом мы заметили, что в ответах сервера полно типографских изысков: угловые кавычки « », длинные тире — и прочие прелести, которые в чистом тексте выглядят как мусор. Мы доработали конвертер, чтобы он безжалостно заменял всё это на стандартные " и -. И вишенкой на торте стала обработка составной буквы «ё» (когда она приходит как е + ̈). Мы учли и этот случай. Битва за чистоту русского языка была выиграна.

    Кульминация: GigaChat Short

    Финальным аккордом стало создание раздела GigaChat Short. Теперь из чёрного окна DOS с мигающим курсором можно было ввести вопрос на русском языке, а программа через ESP8266 отправляла его в облачный сервис GigaChat, получала ответ и выводила его в том же терминале. Мы встроили в код ASCII-арт логотипа, реализовали ручной ввод строки с поддержкой ESC, а для длинных ответов я написал простой, но эффективный просмотрщик с прокруткой на стрелках.

    Заключение

    Оглядываясь назад, я понимаю, что мы не просто написали программу. Мы прошли через настоящую инженерную школу: научились договариваться со старым железом и ПО, искать обходные пути, бороться за каждый байт и каждый символ. Эта программа — памятник не технологиям, а упорству и умению решать нестандартные задачи.

    И если кто-нибудь скажет вам, что на QBasic невозможно создать что-то серьёзное — просто расскажите ему эту историю.

    Исходный код программы для QBasic.

  • Монитор новостей

    Монитор новостей

    Мне давно хотелось собрать простое и максимально дешёвое устройство, на котором показываются заголовки новостей. Самые подходящие экраны по соотношению площадь/цена это LCD. Одна из простых и дешёвых плат со встроенным wi-fi — это ESP8266 в исполнении NodeMCU.

    Осталось решить вопрос откуда брать новости? Давным давно придумали формат RSS для распространения новостей, который до сих пор крупные новостные агентства и СМИ продолжают поддерживать.

    Парсинг RSS и логику извлечения нужной информации из ленты новостей можно конечно возложить на микроконтроллер, но писать код на Си для этих целей мне не доставит удовольствие. Да и какой смысл гонять по сети объем в 100 раз больше чем тот который нужно для отображения на экране?

    Настольный монитор новостей из LCD экрана и ESP8266.

    Чтобы упростить задачу нужна некая прослойка, которая по запросу будет брать с новостного сайта RSS ленту, вычленять самый свежий заголовок новости и возвращать в готовом виде для отображения на LCD экране.

    Мне проще всего было написать такую прослойку на PHP:

    <?
    $i = 0;
    $url = "https://www.bfm.ru/news.rss";
    $rss = simplexml_load_file($url);
    foreach($rss->channel->item as $item) {
     if ($i < 1) { 
      if (($timestamp = strtotime($item->pubDate)) === false) { echo "Error..."; } 
      else { echo date('H:i', $timestamp).' '.'BFM:'.$item->title; }
     }
    $i++;
    }
    ?>

    Разместив этот код на любом адресе на собственном сервере (или хостинге), при обращении к нему получаем в ответ текстовую строку с заголовком новости, её напрямую и выводим на LCD экран.

    Всю конструкцию собираем из подручных деталей в полноценное устройство.

    Настольный монитор новостей из LCD экрана и ESP8266 вид сбоку.

  • Однопиксельная камера

    Однопиксельная камера

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

    А что если использовать всего один чувствительный элемент (будущий пиксель), а фотографию получать путем перемещения этого элемента по двум осям с фиксированием значения яркости в каждой точке будущего изображение? Фактически это будет примитивный сканер. Нужно лишь спроецировать на виртуальную плоскость будущую фотографии (как в обычном фотоаппарате).

    Фоторезистор.

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

    Размер фоторезистора порядка 5 мм, это значит, что физический размер пикселя 5 мм, т.е. если нужна фотография 320х200 пикселей, то расстояние, которое должен пройти фоторезистор составит порядка 1,6 метра по широкой стороне.

    Если целиться во время экспозиции (т.е. время производство одной фотографии) хотя бы 20 секунд, то необходимо иметь скорость 3200 пикселей в секунду, т.е. 10 строк.

    Очевидно, что реализация такой схемы в формате DIY вряд ли достижима — все-таки переместить каретку с фоторезистором 20 раз (с учетом возврата) на 1,5 метра за одну секунду это что-то за пределами адекватных возможностей.

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

    Чтобы снизить время съемки можно применить маску на фоторезистор — для уменьшения физического размера регистрирующего элемента, и тем самым уменьшить шаг физической сетки регистрации светового потока.

    Для управления кареткой фоторезистора использовал два шаговых двигателя (28BYJ-48-5V) с драйверами в комплекте, и готовую передачу винт-гайку. Легко находится на алиэкспрессе или ближайшем магазине где предлагают Ардуино и всякое для неё.

    Управление производится с помощью Arduino Uno, подключение драйверов двигателей сделано через сдвиговый регистр 74HC595N для сокращения используемых выходов.

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

    Внутренности однопиксельной камеры.

    Для съема значения светового потока собрана простейшая схема: подключаем +5V от Ардуино к одному контакту фоторезистора, второй же контакт к аналоговому входу Ардуино, параллельно с фоторезистором подключен переменный подстроечный резистор для подбора оптимального значения входного напряжения так, чтобы при ярком свете или недостаточной освещенности цифровые значения на входе аналогово пина не уходили в пределы 1024 и 0. Фактически происходит измерение падения напряжение на 5В контакте.

    Вся конструкция монтируется на фанере в деревянном ящике.

    Внутренности однопиксельной камеры.

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

    Т.к. интегральная чувствительность (т.е. зависимость напряжения от мощности падающего излучения) близко к линейному, то такой подход позволяет малый диапазон измерений растянуть на весь диапазон отображения серого на экране компьютера. Простыми словами — диапазон показаний на аналоговом входе, например, от 46 до 81, сконвертировать в диапазон от 0 до 255 (градаций серого) или любой другой для достижения нужно эффекта контрастности.

    Первые тесты на малом количестве точек показали корректность работы схемы и потенциальную возможность собранной конструкции. Один из тестов выглядел так: перед плоскостью движения фоторезистора расположил три линейки, которые давали тень от лампы над столом. Шаг фиксирования значений от фоторезистора составлял порядка 5 миллиметров, т.е. 1 пиксель полученной иллюстрации соответствовал 1 замеру на сетке 23х23, c шагом сетки 5 мм.

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

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

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

    А чтобы фокальная плоскость совпадала с плоскостью перемещения фоторезистора без применения каких-либо линз картинку разместил практически в плотную к плоскости перемещения фоторезистора. Заодно это позволило исключить влияние внешнего света на форторезистор.

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

    Результат вдохновляющий!

    Во-первых, размер снимка 221х186 пикселей — такой, что на нём уже могут поместиться различимые объекты. К слову, физический размер сканируемого поля 11х9 см.

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

    Видимые горизонтальные полоски — это влияние изменений во времени регистрации:

    • общей освещенности (я наблюдал за процессом и тень от меня то падала на установку, то нет),
    • источника тока который выступает несущим сигналом.

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

    В любом случае, полученный снимок отчетливо показал, что все работает.

    Следующий шаг — необходимо сделать что-то на подобие объектива. Можно было бы сделать простую камеру обскура, но кажется микроотверстие будет пропускать слишком ужь мало света, потому купил самую дешёвую лупу (вроде бы х2) и использовал её в качестве линзы. В качестве «тела» объектива — картонная коробка. Экспериментальным путем определил примерное фокусное расстояние для съемки пейзажа (дома напротив).

    Внутри будущего объектива. Слева отверстие и винты прижимающие снаружи лупу, справа проекция на папиросной бумаге вида из окна — голубое небо с облаками, горизонт, дом напротив.

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

    Однопиксельная камера в сборе.

    После, примерно, целого светового дня эскпониронивая, а это порядка 8 часов. Получился такой результат:

    Первый пейзаж однопиксельной камеры. Вверху небо с облаками, в остальной части дом с крышей, окнами, дверью.

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

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

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

    В память о Point de vue du Gras

  • О курсе доллара

    Работа встала, все гудят. Всех интересует только курс доллара (черновик записан в 2019 году, а дописываю в 2023). Часто новости парализуют мозговую и/или трудовую деятельность. Чем больше эмоций в новости и чем «однозначнее» и страшнее вывод тем больше вероятность, что повлиять на это нет никакой возможности и все что нужно делать это пойти дальше заниматься своими делами. А к будущим изменениям надо быть всегда готовым.

  • Кайзерслаутерн

    Кайзерслаутерн — крупный город с семью тысячами жителей. Он хорошо построен и настолько чист, что напоминает английский базар или провинциальный городок. Его положение приятное, окруженное высокими и возделываемыми землями. Говорят, что в настоящее время он принадлежит королю Баварии; по крайней мере трактир, в котором я остановился на ночь, принадлежал его величеству.

    Майнц, кажется, принадлежит герцогу Гессен-Кассельскому. Франкфурт — вольный город, а до Пруссии рукой подать, так что, в самом деле, трудно было понять, под чьим флагом я брожу. Вот вам и акты великого Венского конгресса, поставившего семь флагов в пределах двух лиг.

    Попрощавшись, однако, с кайзером Лаутерном и политикой, я миновал плодородную и живописную равнину, на которой он стоит, и, поднявшись на длинный и крутой холм, въехал в тесную местность, покрытую густыми и непроходимыми лесами; пообедал в Кирххаймболанден и добрался до Альцея поздно вечером. Жители не отличались любезностью; ибо хозяин гостиницы, у которой я остановился в первый раз, фактически выгнал меня, поскольку я был всего лишь пешеходом, я счел за лучшее прикарманить оскорбление; и, купив маленькую буханку хлеба, я двинулся дальше, усталый, замерзший и униженный, пока не достиг коттеджа, чей соседний сарай служил мне ночлегом, и я с полным удовлетворением отдохнул на чистом сене. На следующее утро я покинул свое скромное жилище и в сопровождении бесчисленных телег, карет и евреев направился во Франкфурт.

    Я прибыл в Майнц, остановился в отеле «Империал» возле собора и впервые увидел этот город, занимающий столь высокое положение в Германии. Привилегии, прежде принадлежавшие ему и его архиепископу, ушли по той же причине, что и многие другие, вследствие недавних мероприятий Конгресса Суверенов.

    Рейн здесь принимает великолепный вид, примерно такой же ширины, как Темза в Вестминстере, и пересекается мостом, состоящим из пятидесяти двух лодок и шестисот тридцати шагов в длину. Пройдя небольшое укрепленное место напротив города, я продолжил путь во Франкфурт; и, пройдя по возвышенной и романтической стране (общий пейзаж которой напомнил мне Сьерры из Плацентии, если смотреть с большой дороги между Бадахосом и Мадридом, усиленной по сравнению с поразительным сходством произведений), я был в конце концов доволен тем, что вошел в свободный и независимый город Франкфурт.

  • Ландштуль

    Пройдя сорок миль, я поужинал с несколькими странствующими евреями на настоящей немецкой трапезе, а именно: молочный суп, жареная телятина, блины, жаркое, с колбасой, называемой в Лондоне холодцом. У нас был также наш десерт, состоящий из яблок, груш, орехов и хорошего вина; и с такой пищей и такой компанией, я должен был чувствовать себя счастливым. Перед уходом в отставку я не мог не отметить разницу в образовании немца и француза. Границы — самые лучшие места для наблюдения; обратитесь к немцу, как бы он ни был беден или в его положении, по любому вопросу, и его ответ докажет, что он хотя бы частично образован. Обратитесь таким же образом к французу, и вы получите в ответ, ‘e Monsieur, celaje ne puis pas vous dire’ (фр. е сэр, я не могу вам сказать), пожатие плеч, которое только француз может сделать столь же выразительным или смешным. На этом сравнение не заканчивается. Нравы людей, их пища, бережливость и чистота их домов, даже скромность их женщин, словом, все, что делает жизнь приятной, настойчиво напоминает мне, что я не собираюсь спать во Франции.

    В Ландштуле я посещал протестантскую церковь, несмотря на очень шумное и плохое пение и остатки римских индульгенций, таких как открытие лавок, игра в карты, и т.п.

    Возобновился мой путь по неприятной мокрой дороге. Страна, казавшаяся более возделанной, хотя и малонаселенной, побудила меня спросить, кто обрабатывает землю; Однако я мог только заключить, что класс людей, называемых в Испании лабрадорами, приезжает сюда, чтобы заработать, подобно ирландцам в нашей собственной стране, немного денег, чтобы позволить им вернуться домой.

  • Саарбруккен

    Пейзаж был диким и интересным. Много возделываемых мест улыбнулось сквозь бескрайние темные леса; и даже на границе романтический вид, соединенный с мыслью о том, чтобы попасть в чужую страну, неведомую и неизвестную, и не зная её языка, почти одолел меня, пока вид аккуратного маленького трактира не вернул меня обратно к Джону Буллю и его счастливому рогу. И хотя эта часть света, может быть, и не идет ни в какое сравнение с Англией, все же картина имела много сходства. Страна была высоко возделана и заселена как разрозненные фермы; а деревенская гостиница с краном, краснолицым хозяином, приветствующим огнем, большим количеством хорошего пива, табака, прокуренной комнатой, шумными гостями, бурно спорящими о политике и бодрствующими субботними вечерами, были неплохими символами Англии и, как таковой, действительно приемлемый для холодного, подавленного английского путешественника.

    Я хорошо выспался и, заплатив двадцать франков за вклейку в паспорт, не позаботившись привезти из Парижа прусскую клешню, продолжил свое путешествие. Проехав три лье над невозделанной местностью, я миновал остатки старого замка и изувеченной башни и вышел на более красивый вид с хорошеньким городком Хомбург на переднем плане, у подножия горного обрыва.

    В Хомбурге я наслаждался своей трубкой и ужинал в компании своего немецкого домовладельца, чье исключительное почтение к моему мнению должно было сделать меня более благосклонным к самому себе. Следующей моей целью был Кайзерс Лаутерн, более восьми лиг по унылой и неинтересной местности. Снега выпало много, и все приняло самый унылый вид, только избы и дым, проглядывающий сквозь лес, указывали на то, что что-то вроде человека недалеко.

  • Мец

    Мец — город большой важности и силы, и он часто подвергался ужасам осады. Это кафедра епископа, чей собор, как и руанский, уединен среди жилищ цирюльников, портных и сапожников; как и Руан, это всего лишь грязное место. Жилища израильтян ограничены определенной частью города; Я видел некоторых из них с длинными бородами и в черных плащах — характерная одежда, в которой они вынуждены появляться.

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

  • Нанси

    Следующий день я провел в Нанси, наслаждаясь красотами этих французских бань и столицы Лотарингии. Это по-прежнему прекрасный город, хотя и лишенный прежних привилегий и почестей. Здания в целом благородны; великолепная ратуша; муниципальный дом на новой площади очень хорош; а регулярность и чистота улиц заслуживают похвалы. Набережные содержатся в порядке, и все говорит о том, что Нанси — благоустроенный и цивилизованный город. Я воспользовался превосходной теплой ванной за один франк и на следующее утро отправился в путь в Мец, чтобы насладиться одной из тех восхитительных прогулок, которые редко выпадают на долю даже путешественника, не говоря уже о тех рабах отдыха, которые встают, чтобы пойти отдохнуть, и живут чтобы умереть.

    Дорога тянулась вдоль прекрасных берегов Мааса (Мёз), петляя по многочисленным долинам, между чередой холмов, вершины которых принимали форму, которую моряки назвали бы плоскогорьем. Я перешел реку по хорошо построенному современному мосту как раз в том месте, где Маас впадает в Мозель. Плодородие и промышленность этой части Франции одинаково очевидны; каждая сторона реки была сплошным виноградником или фруктовым садом, река петляла вокруг холмов, покрытых лесом, разветвляясь через промежутки на несколько ручьев, а затем сливаясь в подобие порога. Многочисленные города и села, разбросанные повсюду, оказывали свое влияние на сцену, выливая на свои здоровые занятия густое население крепких и жизнерадостных рабочих.

    В последний день похода я столкнулся с одним из наполеоновских солдат, который имел несчастье два с половиной года провести в заточении в русской тюрьме, если в дебрях сибирской Татарии есть какое-нибудь здание, заслуживающее такого названия. Он протестовал ‘его верой и уважением к Наполеону’; и если я могу судить по тому, что я слышал, я должен предположить, что это выражение выражало чувства значительной части подданных Бурбонов. Его правдивость была действительно сомнительна, заявив, что он был семь дней без еды, в Витебске; и что из пятисот тридцати французов, заключенных в одной тюрьме с ним, двадцать три остались в живых, чтобы рассказать ужасную историю. По его словам, им потребовалось восемь месяцев пути, чтобы добраться до места назначения в Тобольске.

    Однако он был живым и даже полезным компаньоном; ибо, пожаловавшись на то, что мои ноги покрываются волдырями, он поделился со мной секретом способа лечения, который я никогда не находил безуспешным. Это просто растирание ног перед сном спиртом, смешанным с жиром, выпавшим из зажженной свечи на ладонь. На следующее утро волдырей уже не будет; кажется, что дух обладает целительной силой, а жир служит только для того, чтобы кожа оставалась мягкой и эластичной. Подошвы ног, лодыжки и подъемы должны быть хорошо растерты; и даже там, где волдырей нет, нанесение может быть полезным в профилактических целях. Соль и вода — хорошая замена; и, пока в своем уме, я бы рекомендовал пешим путешественникам никогда не носить правую и левую обувь; это плохая экономия, и действительно вызывает судороги в ногах. Именно это я и почувствовал, когда прибыл в Понт-а-Муссон, красивый городок с хорошей гостиницей и лучшим рынком. Оттуда, по разнообразно возделываемой местности, я достиг окраины Меца, расположенной в месте слияния Мозеля и Сей, двух рек, которые почти обтекают город с помощью каналов и т.п.

  • Сен-Дизье

    Покинув Шалон, я направился к Сен-Дизье через холмистую местность. Дорога была плохой, но ее облегчили несколько пеших путешественников. К тому же наш путь пролегал через цветущие виноградники и очень живописные пейзажи, изобилующие лесом и водой; но грязные и многолюдные деревни повсюду раздражали взор, представляя странный и парадоксальный вид, как будто здоровье и грязь были так же близки во Франции, как здоровье и чистота в Англии.

    Я добрался до Сен-Дизье поздно вечером, чрезвычайно утомленный; остановился в приличном трактире, где было много других путешественников, наслаждающихся комфортом субботнего вечера, когда тратится лишний франк. Последнее обстоятельство, о котором я упоминаю, могут заметить, господа путешественники (я не знаю, к какому классу отнес бы меня Лоуренс Стерн), что у нас, обладающих более скромными привычками и притязаниями, есть как красные, так и черные дни. Сен-Дизье — старинный город, расположенный недалеко от судоходной части Марны, построенный в 951 году и являющийся главным городом департамента Маас, лежащего в плодородной местности. Виноград здесь в изобилии, и через густые рощи и виноградники, обычные для этой части страны, открывается множество прекрасных видов. Завтракал в Бар-сюр-Орнэн, обычно называемом Бар-ле-Дюк. Следующее место по рангу в том же департаменте занимает Линьи с коллегиальной церковью и дворцом, принадлежащим одноименным графам. Прошел через Вуа и Сент-Обен, бывший, по-видимому, приятным оживленным местом, вмещавшим три тысячи жителей; оттуда, через Туль, древнее епископство Лотарингии. Местность была холмистая и плодородная, производившая в изобилии хорошее и довольно дешевое вино.