Евгений Степанищев

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

«Гопник» возвращается

Скомпилированный «ФриПаскалем» примитивный клон игры «Гопник», запущенный на макОСи

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

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

Но с годами в выдаче «Гугла» ничего не менялось, пока сегодня в результатах не попался клон игры «Гопник», написанный в 2014 году на примитивнейшем Паскале «коллективом GalAndGames».

К сожалению уже по исходнику было видно, что это — не более, чем чья-то проба пера, к которой автор или авторы полностью потеряли интерес. Но для интереса скачал «ФриПаскаль», попробовал скомпилировать. С элементарными правками получилось — у трёх переменных надо было указать другой тип.

Сюжет явно взят из первой части оригинальной серии — пацан, отчисленный лично ректором, жаждет мести. Игра начинается с момента отчисления и заканчивается битвой с ректором. В начале игры можно выбрать собственную специализацию — «гопник», «вор» или «маньяк», но этот выбор ни на что не влияет.

Увлекательнейший процесс битвы с ректором, я победил и немудрено — в игру вставлены читы

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

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

17 ноября   game

Йогурт в СССР

Недавно Артемий Лебедев у себя в блоге, в заметке о йогуртах написал следующее, цитирую: «удивительно, но йогурт — это один из продуктов, которого не было ни в каком виде в СССР». И я позволил себе в этом усомниться.

Сначала посмотрим когда примерно слово появилось, знали ли его в СССР?

В терминах и определениях ГОСТа 17164-71 («Молочная промышленность. Производство цельномолочных продуктов из коровьего молока») слово встречается в ряду других кисломолочных продуктов.

А ещё раньше? Большая Советская Энциклопедия 1931 года издания знает его под названием «ягурт», цитирую небольшую часть:

ЯГУРТ (по-турецки — кислое молоко), вид простокваши специального приготовления: молоко кипятится и, по охлаждении его, заражается микробами молочно-кислого брожения (коккобацилл и лактобацилл кавказский).

Но не в революцию же слово появилось? Было оно известно и при царе, вот такой рецепт можно найти на страницах седьмого тома «Реальной энциклопедіи практической медицины» (С.-Пб., 1914):

Нѣсколько сходенъ съ кислымъ молокомъ и ягуртъ (іогхуртъ, юхуртъ, джаурди), изготовляемый въ Турціи и Болгаріи: коровье, козье или овечье молоко выпариваютъ въ широкомъ сосудѣ при 80°С. до ⅔—¹⁄₂ объема при помѣшиваніи, затѣмъ охлаждаютъ до 55°С., прибавляютъ около 2 куб. стм. на литръ ягурта со вчерашняго или третьяго дня и закутываютъ сосудъ въ шерстяные одѣяла для сохраненія температуры часовъ на 5, послѣ чего ставятъ въ холодное мѣсто на 3—4 часа. За это время ягуртъ скискаетъ. Для полученія первой порціи бродила даютъ молоку скиснуть при 30°С. и собирают пѣнку.

Хорошо, по всей видимости в СССР и даже раньше слово знали, но выпускался ли йогурт промышленно?

Ответ на этот вопрос быстро находится в брошюре «Мясная и молочная промышленность СССР за 50 лет советской власти и перспективы её дальнейшего развития» за 1968 год. Цитировать текстом я оттуда не буду, лучше приведу скан страницы.

Из брошюры «Мясная и молочная промышленность СССР за 50 лет советской власти и перспективы её дальнейшего развития», М., 1968

Я неплохо помню ассортимент полок в 1980-е. В моём родном Лениногорске йогурта я в те годы не встречал и не слышал о нём, видимо распространённым продуктом он не был, но определённо в СССР производился — страница выше подтверждает.

14 ноября   история

Живой конденсатор

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

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

Иллюстрация процесса ремонта автомобиля ЗИС при помощи лягушки («Техника — молодёжи», №8 за 1966)

Примитивное устройство позволяло тогдашним водителям знать свой автомобиль от и до, это вам не КАН-шина, всё на виду. И чем это «от и до» только не ремонтировали! Читал недавно журнал «Техника — молодёжи», восьмой номер за 1966 год, внимание привлекла рубрика «Шофёрские байки», вот полностью один из рассказов, подтверждающий вышеозвученный тезис о ремонтнопригодности.

Возвращался я из далёкого рейса на своём стареньком ЗИСе. Дело было под утро. Вдруг равномерный гул мотора нарушили громкие хлопки в глушителе, машина резко сбавила скорость, но не остановилась и продолжала шумное и медленное движение. В чём дело? Я проверил систему зажигания, подачу топлива… — всё в порядке. И тогда моё подозрение пало на конденсатор.

И тут я вспомнил «Технику — молодёжи». Один старый шофёр писал как-то в «Шофёрских байках», что вместо конденсатора можно использовать сырую картошку или… лягушку!

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

Я сам ещё не верил в успех моей затеи. Однако каков был мой восторг, когда мотор спокойно завёлся и старенький мой ЗИС помчался по городу! «Старик» и не подозревал, что его стальная мощь обусловлена нынче безобидным земноводным существом…

Вернувшись в гараж, я отсоединил бедняжку, мою спасительницу. Она лежала без чувств. На всякий случай я опустил её в арык, и тут случилось второе чудо: жаба ожила!

9 ноября  

99 бутылок: Эль-76

65. Эль-76 — язык высокого уровня советских многопроцессорных вычислительных комплексов «Эльбрус». Разработан в Институте точной механики и вычислительной техники АН СССР имени С. А. Лебедева в 1972—73 годах.

Язык процедурный, как и следовало ожидать, но с обработкой исключений, который тут называются «ситуациями». Довольно необычно. Из-за задуманной авторами близости к железу, в языке разделено понятие представления и типа — то есть того как нечто хранится и что мы под ним понимаем. Ключевое слово «ф32», которое постоянно используется в программе — это 32-битный формат хранения.

Внешний вид интегрированной среды разработки языка программирования «Эль-76» в эмуляторе L76

Что-то написать на нём удалось благодаря найденному на «Вебархиве» эмулятору и документации с примерами кода. Эмулятор далеко не полный, поэтому некоторые вещи приходилось писать вовсе не так, как задумывали создатели языка.

% Песня о пиве 99.l76
программа
  процедура пиво = проц(ф32 бутылок)
  начало
    если бутылок = 0 то
      печатьмс(стр8 "no bottles")
    инес бутылок = 1 то
      печатьмс(стр8 "1 bottle")
    иначе
      печать(бутылок);
      печатьмс(стр8 " bottles")
    все
  конец;

  ф32 бутылок;
  для бутылок от 99 вниздо 1 цикл
    пиво(бутылок);
    печатьмс(стр8 " of beer on the wall, ");
    пиво(бутылок);
    печатьмс(стр8 " of beer.");
    печатькс();
    печатьмс(стр8 "Take one down and pass it around, ");
    пиво(бутылок - 1);
    печатьмс(стр8 "of beer on the wall.");
    печатькс();
    печатькс()
  повторить;

  печатьмс(стр8 "No more bottles of beer on the wall, no more bottles of beer.");
  печатькс();
  печатьмс(стр8 "Go to the store and buy some more, 99 bottles of beer on the wall.")
конец

Тем не менее, программа запускается и выводит задуманное, хотя могла бы выглядеть менее уродливо, будь у меня компилятор, реализующий «Эль-76» полностью.

4 ноября   99   программинг

Удобство чтения

Страница из книги «Эпическія творенія Михайла Хераскова, Дѣйствительнаго Статскаго Совѣтника, ИМПЕРАТОРСКАГО Московскаго Университета Куратора, Россійской Академіи ЧЛЕНА», 1786

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

В этой связи стало ощущаться следующее.

И прежде мне приходилось задумываться об удобстве проговаривания читаемого — на страничках блога я рассуждал об ударениях, букве «ё», написании слов из других языков в произношении на русском и так далее. Но кажется теперь я стал обращать на это ещё больше внимания, все трудности или подспорья в тексте как-то сразу бросаются в глаза.

Сегодня, читая страницу «Эпических творений Михаила Хераскова…», случайно попавший мне в руки труд 1786 года издания, обратил внимание, что в правом нижнем углу каждой страницы есть одно-единственное слово или его часть. Это же слово всегда встречается первым на следующей странице.

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

Интересное улучшение интерфейса бумажной книги. Жаль не прижилось.

4 ноября  

Как открыть файл в формате HLP

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

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

diff --ignore-blank-lines --minimal -urd a/winhelpcgi/dib2png.c b/winhelpcgi/dib2png.c
--- winhelpcgi-1.0/winhelpcgi/dib2png.c	2004-06-15 11:38:40.000000000 +0400
+++ winhelpcgi-1.0-patched/winhelpcgi/dib2png.c	2018-11-03 13:59:03.405031382 +0300
@@ -85,7 +85,7 @@
   /* Set error handling.  REQUIRED if you aren't supplying your own
 	* error hadnling functions in the png_create_write_struct() call.
 	*/
-  if (setjmp(png_ptr->jmpbuf))
+  if (setjmp(png_jmpbuf(png_ptr)))
 	 {
       /* If we get here, we had a problem writing the file */
       png_destroy_write_struct(&png_ptr,  (png_infopp)NULL);
@@ -93,7 +93,7 @@
 	 }

   /* Set the I/O callback function to transfer directly to memory */
-  png_set_write_fn(png_ptr, (voidp) sbout, user_write_data, NULL);
+  png_set_write_fn(png_ptr, (png_voidp) sbout, user_write_data, NULL);

   /* Get access to the windows DIB data */
   lpbmi = (LPBITMAPINFOHEADER) GlobalLock(hDIB);

Утилита с грехом пополам преобразовала файл в нечитаемый ХТМЛ, который пришлось перекодировать:

/usr/local/bin/winhelpcgi.cgi --tar HELP.HLP |
php -r 'echo mb_convert_encoding(strtr(stream_get_contents(STDIN), ["\0"=>""]),
"CP1252", "HTML-ENTITIES");' > help.html

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

Числа от «n» до нуля без сравнений

На «Хабре» интересную задачу увидел, требуется написать на Си программу, выводящую числа от «n» до нуля, не используя (скрыто или явно) операторы сравнения.

Мой вариант:

#include <stdlib.h>
#include <stdio.h>

void print(const int n) {
	printf("%d\n", n - 1);
}

int main(int argc, char* argv[])
{
	const int N = atoi(argv[argc - 1]);

	void (*f[])(int) = {print, exit};
	for (int n = -1;;n++) {
		f[~n/~N](N - n);
	}
}
31 октября   программирование   си

Магниты в форме монет

Магнитики из риолита с рисунком булгарских монет

Гуглил недавно булгарские монеты (мне попал в руки один образец и я пытался определить что он такое), и случайно натолкнулся на статью о декоративных магнитиках с рисунком булгарских монет. «Вконтакте» (вот она — сила социальных сетей) отыскал автора статьи и через неё вышел на мастера.

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

У мастера готовы только шесть рисунков, а я хотел десять магнитов, поэтому у меня на фотографии повторы. За резкий свет на фотографии прошу прощения — у меня нет софтбокса, но очень хотелось показать рельеф. Каждый магнит обошёлся мне в 100 рублей (я просил сделать размером в 27—28 миллиметров, цена зависит от расхода материала).

27 октября  

ТЭГК 2-2

Термоэлектрогенератор ТЭГК 2-2 в омском музее радио

Полвека назад на территории нашей необъятной Родины многое было иначе. Люди обходились без «айфонов», интернета и иногда — электричества.

Электрификация страны началась в двадцатых, но к 50—60 годам ещё немало деревень и прочих населённых пунктов не знало «лампочки Ильича» — вместо неё избы освещала керосиновая лампа. Конечно и там людям хотелось быстро получать новости, знать чем живёт остальная страна.

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

На фотографии — «ТЭГК 2-2» из омского музея, где его сфотографировал один мой друг. Выпускался с 1956 года московским заводом «Металламп».

Немаленькая бандурина в 6,6 килограмма, состоящая из термоголовки и керосиновой лампы «Молния». Выдаваемой мощности в два ватта хватало для питания ламповых радиоприёмников «Новь», «Родина-52», «Искра», «Б-2», «Воронеж» и некоторых других.

Судя по тому, что инструкция к нему шла на трёх языках — русском, французском и английском, эта модель шла и на экспорт.

При объёме лампы 0,75 литра, расходе керосина в 70—80 г/ч и плотности 830—860 кг/м³, легко подсчитать, что радио можно было слушать около 7—9 часов на одной «заправке» (правда порядка 20 минут ещё съедал прогрев после каждого включения). Одновременно генератор являлся и источником света.

24 октября   гаджет   история

Как починить PNG и JPEG

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

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

Заклинания для восстановления звучат так:

optipng -fix broken.png -out fixed.png
jpegtran -outfile fixed.jpg broken.jpg

Первая утилита распространяется самостоятельно, вторая — в составе libjpeg или mozjpeg.

20 октября   jpeg   png
Ранее Ctrl + ↓