Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

19 янв 2023 Чт Моя первая крупная программа

Время написания истории из жизни продолжается и потому я расскажу о том, как я писал свой Norton в 11 лет. Как я рассказывал в прошлом, у меня приключился компьютер в 5 лет. Одними из самых запомнившихся моментов были это как папа играет в Prince of Persia, как он рисовал кота и то, как я через Norton Commander сломал компьютер, а точнее, протер один из системных файлов до нерабочего состояния.
Дело было вот как. Сидели мы с братом за включенным компом (видимо, мы сами его включили), и хотели поиграть в Принца Персии. Собственно, поиграть то мы смогли, а потом я включил режим очень умного и прошаренного сверх-программиста и попытался повторить то, что делал папа, то есть, копался в Norton Commander и в прямом смысле тыкал случайные (рандомные) клавиши. Все было ничего, если бы не то, что внезапно выключился свет. Не помню, это было днем или вечером. Следующее что я помню это то как мы сидим в темной комнате и страдаем. К папе приехал его знакомый программист и стал там чинить что-то через дискету. Я чувствовал себя виноватым в этой истории. Ах да, заговорился совсем. Через год нашего компа не стало. cray Мы уехали с квартиры и компа больше не было. Вот такие дела.
Спустя несколько лет мне попалась книжка "128 советов начинающему программисту" (кстати, у меня она снова есть), и я заново открыл для себя мир компьютеров и программирования. Помню, много каких еще книг было, которые я прочел, но книга "128 советов" оказалась очень интересной, там были веселые картинки и программы. Да, я припоминаю, что читал еще и другую книгу, справочник по языку Бейсик, где и научился кодить. Мне было тогда 9 лет.
Почти 1.5-2 года я совершенствовался в создании программ на Бейсике. Однажды, призадумавшись о том, смогу ли я написать особую программу под названием Noron Commander, я приступил к делу. У меня была ручка и огромный плакат карты покрытия МТС для города Москвы в 1999 году. Глаза мои горели, я программировал... на бумаге. Да, это все так. Мало того, что я писал на обратной стороне плаката МТС, так еще и света особо не было по вечерам, приходилось сидеть при свечах иногда, так еще и компа не было. Какой там комп. Окна в комнату разбиты, на улице холод собачий, в комнате есть только камин, чтобы согреться, а от здания, где мы тогда жили, веяло страшным ужасом. Когда я вспоминаю об этом времени, мне думается о том, как я тогда вообще выжил.
Да, я опять отвлекся, воспоминания... они такие. Почему я писал эту программу? Просто суть в том, что тогда, в то непростое время, у меня была возможность ходить в компьютерный кружок и прикасаться к священному компьютеру. В кружке были разные компьютеры, такие как ZX Spectrum 128K, УКНЦ, мажорные 286 и еще какие-то. Мне так нравилось там быть, ведь я мог делать то, что я любил и люблю сейчас — программировать!
Была только одна незадача. На 286 был Norton Commander, а на УКНЦ, где я сидел иногда, Нортона не было. Я захотел его написать. Но как? Компьютер мне давался максимум на час примерно, так что пришлось делать то, что я делал — писать на обратной стороне плаката, неизвестно откуда у меня взявшегося.
Эту программу и сам плакат я берегу до сих пор. Это — единственная такая вещь, оставшаяся с моего непростого прошлого. Саму же программу и даже попытку ее реализации я разместил у себя на сайте уже достаточно давно. Как известно, написанное в 11 лет без всяческой отладки, работать не будет. Но я не стал ничего исправлять, ведь это такое ретро. Уже 24 года прошло с того момента.
А я все помню.

18 янв 2023 Ср Вчера сделал код сжатия музыки

Оказалось, это не так и сложно, если тщательно все продумать. Код получился очень даже небольшим, где-то на 200 строк всего лишь. Для сжатия я использовал код Хаффмана, который уже давно изучал, но никак не мог реализовать его в виде программы на C/C++ и вот у меня получилось это сделать. Вчера сделал на Си, а сегодня переписал на использование классов, поскольку это удобнее получается намного. Код, правда, еще не доделан и ему достаточно далеко до завершения. Нужно придумать как хранить файл.
Например, я могу формировать файл .wah, в котором будут следующие поля:
  • Частота дискретизации (1 байт)
  • Стартовый байт
  • 512 байт для воссоздания дерева Хаффмана
  • Весь оставшийся код
Хранить данные для дерева довольно просто. Первые 256 байт всегда будут указывать на родительский элемент 256 + n, где n=0..254 (родительских элементов может быть максимум 255), а код номер 255 будет означать, что этот символ пустой. Причем, кстати интересно, если указывать родителя, то в заданной таблице всегда будет левая и правая часть (0 и 1). Слева будет потомок 0, справа — потомок 1. Это очень важно, поскольку именно так кодируется дерево.
Для остальных 256 все точно так же, в том числе порядок потомков. Если к примеру, из диапазона первых 256 указывает на родителя 5, и из диапазона 512 тоже на родителя 5, то первый будет потомок ветки 0, второй — ветки 1. Таким образом, можно закодировать все дерево через 512 байт. Но это, конечно же, надо проверить. Надеюсь, у меня получится.
Да, еще вчера все же заказал книгу по FoxPro 2.0 с Озона. Хорошо бы, если она у меня была. Может, я даже ее частично прочту.
Теги: Алгоритмы

17 янв 2023 Вт Моя первая программа

Когда я был совсем еще небольшим, примерно ростом чуть ниже метра или около того, к нам домой заявился Его Величество Компьютер 286. И Нортон. Коммандер, конечно же. Из всего, что я помню до этого знаменательного периода, это то, что моя жизнь представляла из себя сплошную тоску, в которой... так, постойте, это получается, что я всю жизнь страдаю?!.. scratch1
Ладно, опустим детали прозрения на пустом месте и продолжим рассказ. Так вот, привезли этот чудо-агрегат и водрузили его на свое место — на стол, естественно. И вот, стоит он себе на столе, чарует взор. На нем папа пишет программы, изучает его, что-то делает, и мне крайне любопытно все, что связано с этим. Мне тоже интересно было, как это все делается. Там еще был матричный принтер, который производил очень громкий звук печати и выводил различные интересные картинки. Например, там была программа "Плакат", от вида которой у меня начинает неистово сводить олдскулы. Папа любил написать что-нибудь там и распечатать на черно-белом принтере.
Конечно же, меня было не оторвать от зрелища чудесной машины, где либо на GW Basic или в FoxPro делались какие-то программы. Помню эту очаровательную книгу по FoxPro 2.0 (обратите внимание на слово Fox). Я помню, что у меня эта книга все лежала, лежала потом, да куда-то исчезла. Печально. Надеюсь, я смогу ее вернуть как-нибудь.
Особенно меня впечатлила программа, где папа с помощью Бейсика нарисовал кошку на крыше. И мне захотелось сделать то же самое! Но я долго не мог сделать тоже самое, да и сейчас пока что не могу, потому что я не особо помню, как выглядела картинка. Однако, я попробую это сделать в будущем.
Помню, что у папы был блокнот, который он мне подарил после того, как я написал там свою первую программу вот в таком роде:
110 LET 5=A
220 PRINT A
Даже от такого небольшого количества программ я в свои 5 лет был счастлив. Долго сомневался, правильно ли я написал LET, и выбрал ошибочный вариант. Как обычно, блокнота у меня этого не сохранилось, но что поделать. Все ушло в прошлое, жаль конечно.
У меня есть еще несколько интересных истории по поводу того, что было со мной в детстве, но я их отложу на следующие посты. Наверное, я смогу рассказать их все, ведь истории ограничены. Пусть будет дневник моей жизни запечатлён здесь, на страницах моего сайта. Ведь зачем я создавал сайт? Не только чтобы писать статьи, но и делиться своей жизнью, своим прошлым и настоящим. Так что, все правильно.

16 янв 2023 Пн Про алгоритм Хаффмана

Уже не помню, когда и как я впервые услышал про этот алгоритм, но как и обычно, это было очень давно и выдумка. Обычно я сначала узнаю о чем-то, а через год, два или даже десять лет изучаю этот вопрос и реализовываю. Так же произошло и с кодом Хаффмана. Как и обычно, я сразу не смог его понять, мне показался он чересчур сложным и потому просто не стал изучать, да и всё. Впервые серьезно пытался его разобрать я после того, как однажды мы как-то зашли в магазин и купили там книгу по распродаже, она называлась что-то вроде "алгоритмы изображений", я уже реально не помню как, а книгу я эту читал очень поверхностно.
В этой книге тоже был описан алгоритм кода Хаффмана, но я его опять не понял, хоть и пытался. Но не понял. Там в этой книге, помимо Хаффмана, еще были и gif, и png, и jpg — все основные картинки в интернете. Не спорю, книга хорошая, но я не умею читать книги, просто не могу, не получается. Мне подходят различные короткие статьи с интернета, а не книги. С последних толка никакого.
Окончательно я с этим алгоритмом смог разобраться только в прошлом году. При помощи страшных мучений примитивного мозга, преодоление препятствия было выполнено, и у меня получилось даже написать алгоритм как на PHP (Pre Historic Programming, в переводе как До Историческое Программирование - ДИП), так и на Си, который является языком, на котором программируют сейчас абсолютно все и который является языком для мажоров. Ладно, я опять отступил от темы, как обычно. biggrin
Этот алгоритм Хаффмана интересен тем, что он работает только для алфавита из фиксированного количества символов, при этом необходимо, чтобы частота встречи каждого символа очень сильно различалась, чтобы каким-то образом попытаться сжать эти данные. Эффект кода Хаффмана заключается в том, чтобы сжимать более часто встречающиеся символы более короткими кодами и это факт. Этот алгоритм очень распространен, используясь везде где можно и где не можно. Да, кстати, насчет этого...
Мне пришла мысль, а что если кодировать музыку через Хаффмана? Степень сжатия, конечно, не всегда может быть, но вот как кодировать музыку? Самая первая мысль, которая у меня была, это взять все семплы, подсчитать их частотность и закодировать. Но эта мысль оказалась ошибочной, сжатия почти не было, какие-то жалкие проценты. И тут я подумал о втором варианте — кодировать не сами семплы, а разницу между ними. Вот здесь все получилось гораздо успешнее!
Для этого я написал алгоритм по-быстрому, чтобы проверить догадку. Действительно, сжатие удается до 44% примерно для аудиотрека, что чуть больше чем в 2 раза. Для очень хороших случаев сжимать получается и до 15%, но это в хороших случаях, а вообще, кодом Хаффмана более чем в 8 раз не получится сжать, потому что минимальный код — это 1 бит, который бы кодировал 8 бит.
Я не придумывал какой-то собственный формат, но мне было реально интересно, что получится и получится ли сжатие, и у меня получилось. На данный момент у меня нет реализации формата этого файла для сжатия, так что думаю, что надо будет над этим подумать, и попробовать сделать. Как обычно, через пару месяцев или через пару лет, по традиции. Кто здесь главный слоупок? Я, конечно! facepalm

15 янв 2023 Вс Странные мечты

Моя жизнь связана с кодом и программированием, а также с компьютерами. Всю свою жизнь я мечтал разработать собственный компьютер и создать для него собственную ОС. Однако, есть проблема, которую все время озвучиваю, над которой постоянно бьюсь: почему мне это надо, и если я сделаю, то что от этого мне будет? Это очень сложный вопрос, на который у меня нет никакого ответа. Так трудно разобраться в себе.
С одной стороны, сделать что-то собственное — это было бы так классно, просто, меня сейчас устраивает и то что есть в данный момент. Есть хороший компьютер, много жестких дисков на большое количество терабайт, так зачем мне делать собственный слабомощный компьютер, если все это есть уже.
Недавно, я подумал о следующем. Могу предположить, что дело в том, что я однажды утратил. Это свежий взгляд на вещи, когда я радовался и умел радоваться даже простой программе, когда изучал чего-то новое. Очень не хватает того волшебства первооткрывателя, которое было в детстве. Мне бы так хотелось научиться писать такой код, который бы меня радовал. Теперь все кажется пресным и неинтересным. От многого я устал... но пожалуй, не буду много писать об этом здесь.
Лучше посвятить этот блог хорошим новостям и разработке кода.
Теги: Нытье

15 янв 2023 Вс Статья про код Хэмминга

Как же давно я хотел написать эту статью по этим кодам, и вот день этот настал и я смог затащить эту изи-катку, как выражаются CS:GO-еры. Интерес к этому коду у меня возник еще тогда, когда я обнаружил, что SDRAM-память для Марсохода2 у меня жестко сбоит и совершает непоправимые ошибки. Видимо, память битая оказалась, что очень плохо. Тогда я стал искать, как это исправить и наткнулся на статью о том, что существует волшебный метод, как исправить единичные ошибки в сообщении. И это оказался код Хэмминга.
Сначала я пытался его понять, но у меня не получилось разобраться в самой сути. Я читал в разных источниках, но не находил простого объяснения, как именно это дело работает. И вот вчера как говорится, психанул и начал искать. Вначале сам прикинул, как это может работать, а потом прочел прекрасную статью от хабраюзера и на меня прямо снизошло Знание!
Сообщениеr0r10r2123r34567
Бит №123456789101112
Бит #0xxxxxx
Бит #1xxxxxx
Бит #2xxxxx
Бит #3xxxxx

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

14 янв 2023 Сб Элита на Quick Basic 4.5

Как истинный старый дряхлый олдскульный дед в 35 (или 36 лет), я начну свой рассказ этими словами, потому что это мантра, заклинание, молитва, заговор, как угодно можно это называть, но суть не меняет:
Раньше было лучше, раньше было веселей,
Раньше было ярче небо, трава — зеленей.
Все что было раньше — просто рай блаженный.
Там все было лучше, а не то, как тут.
Вот, собственно, я повторяю эту фразу как "Харе Кришна харе харе Кришны харя हरे कृष्ण", и мне становится как-то лучше, но самое главное в этом всем деле — не оскоробить чувства неверующих, потому что вот я скажу харя Кришны и обидятся, скажут, что я плохобуддийский невериалист, а я отвечу...
Кстати, а тема то вообще другая у сегодняшнего поста, а меня понесло не в ту степь. Это всё из-за того, что я вспомнил всё. Всё, что не надо было вспоминать, вспомнил, потому что это погрузило меня в пучину лучших воспоминаний о прошлом.
Так вот, все началось с того, что я увидел великий и могучий ZX Spectrum Sinclair 128k Edition. Но суть не в этом. Элита — это игра, которая называется Elite, и она запускалась на 48к памяти легко, умещала в себя несколько галактик и сотни звезд в каждой из галактик. Это была поистине мощь космической Оперы (не том сверхпопулярном Opera браузере, о которой все подумали, конечно же), где нужно было летать, залетать в огромную Щель, вылетать из нее, торговать и невозбранно © грабить корованны™, чем не преминали заниматься отважные искатели истины и приключений. Но я был гораздо проще. Я не играл в эту игру.
BBC_Micro_Elite_screenshot.png
Рис. Знаменитая щель biggrin
На этом все было можно и закончить, но не тут то было.
Я никогда в эту игру не играл, а если играл, то не мог пролететь и минут 10, как меня либо выносили, либо я не мог попасть в великую щель и я выносился самостоятельно. Эта игра — легендарная, потому что в нее никто толком не умел играть, поэтому она и легендарная. Эта игра про то, как сделать целое состояние, перевозя с места где подешевле в место где подороже. Или же грабить ЦеЛыЕ КоРоВаНы и оттуда выносить весь разбросанный по космосу мусор и толкать где-нибудь на базаре. Все это делать я не умел, потому не делал.
И тут у меня под рукой оказался Quick Basic 4.5. Не путать с Quick Basic 4.4(9) (я без понятия, а он был вообще), и вот, бейсик у меня приключился, я там смог нарисовать звёзды, которые исходили из единого центра и создавали такое странное ощущение, как будто я лечу в космосе, а на самом деле, я никуда не летел, а сидел, как юзер-недопрограммист перед черным монитором и прыгал, и радовался, и возносил хвалы Билли Гейсту (Billy Gayste) за то, что он создал мощный Quick Basic 4.5 и я смог даже в него поиграть и проиграть, между прочим.
Я не помню, что я нажал, но все не исчезло, а по какому-то волшебству появилось и стало работать. Станции вращались вокруг своей оси, были даже врата между системами, куда я периодически залетал, была даже сетка панели, и все это было сделано на 386 процессоре в Quick Basic 4.5. Невероятно! Только количество багов превышало количество профита, так что я после некоторого количества строк забил на игру и далее делать не стал. У меня кончилось топливо и я не смог продолжить эту игру делать.
Вот такая вот незамысловатая история от меня. Если вы думаете, что я приврал все это, то это не так. Всё совершенная правда. Ну, разве что кроме Билла Гейста.

13 янв 2023 Пт Конфигурация компьютера на AVR

Однажды, я решил, что мне не нужны никакие высокие разрешения для того, чтобы выводить что-то на экране. И самым интересным и самым ретро-олдовым решением стало 256 x 192 от ZX Spectrum.
screen.png
Мне пришла мысль, что можно сделать интерфейс даже несмотря на такое низкое разрешение от спектрума. Но вот ядро процессора я выбрал не Z80, а другое, а именно AVR. Почему такой выбор я сделал?
  • Он относительно простой в реализации
  • Быстрый, большинство инструкции за 1 такт
  • Достаточно распространен
  • Под него есть компилятор avr-gcc
Так что довольно много преимуществ, но есть и большие недостатки.
  • Памяти всего 64Кб
  • Гарвардская архитектура — память программ и оперативная память раздельные
Память можно расширять различными методами, писать в порты например или использовать банки памяти. И в том, и в том случае есть свои достоинства и недостатки. Можно и так и так сделать, вообще-то.
Эта система на чипе (SoC) все еще не дописана из-за моей легендарной лени. Это не я такой, это жизнь такая, что мне лениво все делать.
Какие у меня планы на этот компьютер и процессор? Да, если подумать, особо то и никаких. Мне лично не требуется какой-то отдельный компьютер для работы и хобби, хватает вообще лишь только одного. Даже два монитора не нужно, обхожусь единственным. У меня есть два монитора, но я их не использую, так что под большим вопросом, а буду ли я вообще использовать свой собственный компьютер? Ответ — нет. А зачем? Что на нем делать? Софта нет, писать не хочу. Конечно, мне как-то хотелось создать что-то вроде своего уютного уголка компьютерного, где я мог бы отдыхать, такая у меня была задача и стремление.
Допустим, что я бы сделал? Ну, к примеру, календарь. Зачем, когда и так есть под рукой несколько на разные вкусы. Или текстовый редактор, и опять-таки, зачем? Зачем, зачем — эти вопросы мучают меня. Есть более выгодные, приятные и правильные альтернативы. Все что я делаю, полностью бессмысленно.
Теги: Процессор, AVR

13 янв 2023 Пт Нашел свой самый старый клип

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

Я делал этот клип в windows movie maker для windows xp. Это прекрасно, я считаю. Прошло где-то 12 лет с того момента, как этот клип был создан, но до сих пор совершенно неактуален. Но это не страшно, ведь главное — это память.
Теги: Ютуб

13 янв 2023 Пт Обдумывал процессор на NAND

У меня есть одна проблема, она прямо сильно меня тревожит, это то, что я постоянно хочу сделать какой-то процессор на простых логических элементах или на транзисторах. Ясное дело, чтобы сделать что-то более-менее рабочее, надо потратить тысячи транзисторов, тогда да, будет какой-то толк. Но мне же хочется что-то на коленке собрать.
Когда-то давно, когда я учился еще в 9-м классе, я ездил на одну олимпиаду по программированию и встретил там парня, который мне рассказал, как он смог сделать процессор из транзисторов. Я был потрясен до глубины души и всю жизнь мечтал понять и разобраться в том, как он это сделал, и как это вообще возможно. Спустя большое количество времени, а именно, мне там было 16 лет, сейчас уже 36, то есть, через 20 лет, я осознал, что ничего сделать быстро и просто невозможно. Он похоже, сделал не то, что я думал, не полноценный компьютер Intel Pentium 233 Mhz, а похоже, он сделал обычный сумматор, который был выдан за компьютер. Сумматор на транзисторах я тоже могу сделать уже без проблем. И он упомянул, что этот его процессор был собран на коленке.
Вспоминая все это, я пришел к выводу, что если и делать что-то, то не замахиваться на реальные процессоры, а будет вообще достаточно собрать даже пусть на весу на транзисторах схему сумматора и вычитателя, либо на NAND. Как обычно, я начал вести подсчет того, сколько мне чего надо и просто ужаснулся, честно говоря. Надо очень много и это еще будет только 5% того, что реально надо будет сделать.
Чтобы сделать сумматор 4 битный, потребуется 9 микросхем 4-NAND. Но ведь сумматора недостаточно. Еще надо приделать туда триггеры на вход и выход, вычитатель. Для вычитателя потребуется например, еще +5 микросхем для реализации XOR (4 входа и 1 перенос), то есть уже 14 микросхем только для того, чтобы сделать сумматор с вычитателем. Это просто ужасно много.
И да, а стоит ли оно того, чтобы сделать? Что это мне даст? Ровным счетом, ничего, кроме того, что это будет просто сувениром на полочке, который занимает лишнее место. Поэтому все что я делаю, обычно делаю на ПЛИС-е, потому что это в тысячи раз удобнее, проще и возможностей больше. Но ведь даже то, что я сделал на ПЛИС, я не пользуюсь этим. Так что еще неизвестно...
Итак, поскольку процессор на NAND я делать не буду, может быть, мне можно будет сделать его в ПЛИС? В целом, конечно, да, но этот процессор слишком примитивный. Как ни крути, со всех сторон это никак невыгодно, неудобно, глупо и бесполезно.
Мне, кроме прослушивания музыки, сидения в соцсетях и написания бредовых текстов, вообще ничего не надо от компа. bore