Тибетская малина
Несколько лет назад прочитал про тибетскую малину и загорелся попробовать — люблю всё необычное. Ягоды купить не удалось, зато кусты — без проблем. Посадили у тестя за домом — растение неприхотливое, спокойно растёт даже в полутени.
И вот, наконец, дождались небольшого урожая. Ягоды крупные,
Промпты и маленькие большие языковые модели
«Любые предложения
людиязыковые модели понимают иначе, чем тот, кто их вносит».
— третий закон Чизхолма.
На работе довольно много в последнее время пишу промпты для небольших больших языковых моделей. Уж извините за оксюморон, но как иначе их называть? Большие языковые модели сейчас бывают очень разного размера. Я много использую модели размером примерно до 70 миллиардов параметров. Чаще — ещё меньше.
Это очень сложно, потому что обязательно найдётся ситуация, где модель такого размера поймёт любую неаккуратно сформулированную инструкцию не так, как задумывалось.
Быстро приучаешься в промптах заменять примеры того «как не надо» на «как надо», использовать минимум указательных местоимений, писать в конце списки самопроверки для модели и прочие хитрости.
Тем не менее и это не помогает на 100%. В общих случаях всё равно
Степанищевы в Белгородской области
Как я уже несколько раз писал, у меня есть теория, что все Степанищевы — родственники. Мне казалось, что она даже проверяема —
На практике это, конечно, пока недостижимо, тем не менее, есть несколько семей в разных уголках страны, с которыми мы провели совместное исследование и нашли общие корни. Поэтому моя теория как будто бы подтверждалась.
Но вот вчера мне написал представитель белгородских Степанищевых, который
Он провёл впечатляющее исследование — по моим грубым прикидкам даже пересёк границу
Интересно, кстати, что предки моего вероятного родственника приехали
Отец мой из Курска сведён в Карпов на вечное житье, и в Карпове отец мой служил городскую службу, и в Карпове отец мой умре тому лет с тритцать и больши. А ныне я служу солдацкую службу. Поместье за мною в Карповском уезде в деревни Раковой дватцать чети, да подгородной на драгунском поли десять четвертей, в поли аж дву потому ж. Детей у меня четыре сына: Дарошка тритцать, Ротька девять лет, Ивашка семи, Раска пяти лет. А других у меня детей и братьев, и племянников, и пришлых людей никово нет.
Так что у меня родилась мысль — попробовать
Кстати, в процессе изучения этого небольшого отрывка я наткнулся на описание того как выглядел город Карпов
Детали, конечно, прорисованы отвратительно (рисовал при помощи ЧатаГПТ 5), но если не приглядываться, то сойдёт. Я минут 40 писал промпт вместе с нейросетью, вычленяя ошибки и, наконец смирился с тем, что заставить сеть учесть все детали за время, которое я согласен на это потратить, нереально. Компромиссный вариант прикрепляю.
Добавлено позднее: оказывается есть уже визуализация этого города, стоило её поискать, прежде чем пытаться рисовать свою. Вот как выглядела часть крепостной стены на самом деле:
Однодворцы и фамилии
В комментариях к предыдущей заметке один из читателей в телеграмном канале удивился, что у моих дальних предков были фамилии. В то время, когда я только начал составлять своё дерево, я бы тоже удивился — я считал своих предков сплошь крестьянами, а у крестьян их, чаще всего, не было.
Массово фамилии у крестьян начали появляться в 1861 году, после отмены крепостного права. Поддержало этот процесс постановление Сената
С моими предками ситуация обстоит так — до революции все они числились крестьянами и фамилии получили очень поздно, многие — по имени главы семьи или занятию. Если двигаться в прошлое,
Но если погрузиться ещё дальше, случится интересное — во многих ветках фамилии появятся вновь, часто те же самые, но бывает, что и нет.
Связано это с тем, что заметная часть моих предков — однодворцы. Это сословие, которое некоторые исследователи даже выделяют в отдельный субэтнос, поскольку жили они довольно компактными группами и браки заключали только между своими.
Изучены они довольно плохо, больших монографий про них и их культуре я не встречал, поэтому знаю о них не так много. Это были, по сути, служилые люди, занимавшиеся, насколько я знаю, охраной границ. Поэтому жили они
Однодворцы были уважаемым сословием и, как представители уважаемого сословия, имели фамилии. В эпоху реформ Петра I однодворцы постепенно теряли в правах, пока не сравнялись с крестьянами. В 1724 году были с ними объединены особым указом.
Позже политика в отношении однодворцев несколько раз менялась, но тренд на переход в крестьянское сословие остался, пока в начале 19 века сословие не упразднили окончательно. Видимо
Моим Степанищевым повезло — они свою фамилию не забыли. В переписи 1834 года, например, она ещё упоминается. Видимо, когда крестьянам стали возвращать фамилии, они её ещё помнили.
MS-DOS Siberian edition
Думаю на Земле живёт очень мало людей, которые хоть раз компилировали бы
Вроде там утекли и более свежие версии, но зачем нарушать закон, если всё равно какую версию собирать?
Собирал я её
Теперь у меня есть «
Дополнено: дважды ошибся — Syberia вместо Siberian и vikhorka вместо vikhotka. Первое понятно — так называлась игра, которую у нас перевели как «Сибирь», вот у меня и застряло, а второе вспомнил неправильно — больше десяти лет не слышал этого слова.
Илон-мазь
Купил себе мазь. И не просто мазь, а Илон Мазь! Как вам такое? Чисто импульсивная покупка. Китайцы, когда её называли, уверен, и не думали, что
RLE в bzip2
Очень меня поразил тот факт, что внутри очень эффективного архиватора bzip2 работает алгоритм RLE. Да, после очень хитрых перестановок данных, но RLE!
Это очень простое семейство алгоритмов сжатия, с которым я познакомился ещё в то время, когда у меня был «Спектрум».
У него может быть много разных реализаций, но та, что я тогда программировал, выглядела следующим образом.
Последовательности одинаковых значений мы кодируем как один и тот же байт, записанный дважды, плюс счётчик — сколько таких байтов надо дописать; остальное оставляем как есть.
Например:
01 02 03 03 03 03 03 03 03 04 04 04 → 01 02 03 03 05 04 04 01
Как я уже написал, могут быть варианты. Например, можно счётчик делать больше, чем один байт или записывать количество повторений около каждого байта, всё зависит от характера сжимаемых данных, но суть
Какой RLE лучше?
У меня тут в комментариях на сайте интересная дискуссия развернулась — есть ли преимущество у реализации RLE, которую я описывал, по сравнению с другим алгоритмом, который вспомнил один из читателей.
Для меня вполне очевидно, что на разных данных каждый из них может выиграть. Но что насчёт реальной жизни?
Я написал небольшую программу на Пайтоне, которая считает сколько занял бы файл, если его сжимать каждым из алгоритмов, а потом прогнал её на каждой из 7000+ файлов в моей папке «Загрузки».
Какой же итог? В 1811 случаях выиграл алгоритм, который вспомнил я, в 2152 — который вспомнил читатель, в 3193 случаях оба алгоритма сделали только хуже — файл стал длиннее.
В итоге, если бы мы писали утилиту для сжатия, можно было бы использовать все три метода (включая сохранение файла в исходном виде), указав в начале файла кодовый байт означающий метод сжатия.
from itertools import groupby
from math import ceil
import os
import sys
try:
filename = sys.argv[1]
except IndexError:
filename = __file__
def reader(filepath):
with open(filepath, "rb") as f:
while chunk := f.read(4096): yield from chunk
def mark(x, y):
if x == y: return (x, y)
c1, c2 = (32, 31) if x < y else (31, 32)
return (f'\x1B[{c1}m{x:+d}', f'\x1B[{c2}m{y:+d}')
flen = os.path.getsize(filename)
grouped_same = (tuple(x[1]) for x in groupby(reader(filename)))
chains = groupby(grouped_same, lambda it: len(it) == 1 or object())
bolk = maks = 0
for diff, x in chains:
x = tuple(x) if diff is True else tuple(x)[0]
l = len(x)
if diff is True:
bolk += l # {x} {y} {z}…
maks += l + ceil(l / (128 + 1)) # {l & 0x7F - 1} {x} {y} {z}…
else:
bolk += (2 + 1) * ceil(l / (255 + 2)) # {x} {x} {l}
maks += (1 + 1) * ceil(l / (128 + 2)) # {l & 0x7F - 2} {x}
bdiff, mdiff = mark(bolk - flen, maks - flen)
print(f'Len\t{flen}')
print(f"Bolk's\t{bolk}\t{bdiff}\x1B[0m")
print(f"Maks'\t{maks}\t{mdiff}\x1B[0m")Добавлено позднее: в комментариях есть замечания к реализации, которые я учёл позднее.
Обратная сторона Луны
На днях в Казани было видно лунное затмение, долгое, можно было рассмотреть процесс во всех подробностях. Вроде давно уже у меня не было возможности на него посмотреть.
Каждый раз, когда происходит лунное затмение, мысли переключаются на Луну и я не могу не думать о том, что если бы Луна вращалась, а не была бы повёрнута к нам всегда только одной стороной, у людей, может, вообще не было бы идей, что Земля может быть плоской.
Луну
И наоборот, именно то, что она не вращается, возможно, убедило людей прошлого в том, что это нечто плоское, прикреплённое к небесному своду.
Гвозди в лепнине
В селе Бураково Спасского района стоит очень примечательная церковь. Я
Сегодня с другом решили до неё добраться и посмотреть со всех сторон. Пока ходили вокруг, наткнулись на местную жительницу, очень приветливую, которая рассказала, что архитектором этой церкви был Александр Павлович Брюллов, а расписывали её ученики его брата — Карла Павловича Брюллова, известного художника. Сказала, что лет 70 назад, в её детстве, в этой церкви с потолка свисала огромная лампада. Сейчас её нет, осталась только цепь.
Церковь очень давно заброшена, но находится в относительно неплохом состоянии. Внутри сохранились остатки лепнины и фрагмент одной росписи. Лепнина постоянно осыпается — внизу лежат довольно крупные куски, которые отсырели и стали очень хрупкими.
Пока осматривал лепнину, обнаружил очень странную вещь — с четырёх сторон каждой колонны, на приличной высоте есть барельеф шестикрылого серафима. И прямо в лицо каждого серафима вбит гвоздь. Я осмотрел все колонны, везде так.
KDW-2025
В последние несколько месяцев мы всей командой на работе активно готовились к выставке Kazan Digital Week — планировали показать
Успели сделать всё, что запланировали. Сегодня стартовал первый день выставки и, надеюсь, я скоро начну выдыхать — гонка этих месяцев меня порядком истрепала, да и бытовых дел накопилась целая куча. К сожалению, в отпуск уйти пока не могу, но хотя бы к нормальной жизни вернусь, а то сил уже совсем не осталось.
Космонавт
Случайно узнал, что в этом году на Kazan Digital Week приедет
Спасибо
Но на выставке
Иду обратно грустный, глаза в пол. Замечаю, что иду прямо
Пока бегал, всё боялся: вдруг уйдёт. Но нет — дождался. А позже он ещё заглянул к нам на стенд: посмотреть, чем мы занимаемся, и сфотографироваться.
Хороший актёр
Это немного странно осознавать, но иногда приходится объяснять самому себе
Например, долгие десятилетия я был уверен, что хорошие актёры всегда должны быть многогранными, и никак не мог понять, почему мне нравятся актёры, которые в каждом фильме играют один и тот же образ. Точнее, я объяснял это себе тем, что у меня просто плохой вкус.
Со временем я понял: бывают хорошие актёры и одного образа. Долго не мог в это поверить, но в конце концов убедил себя в этом так: бывают хорошие многожанровые певцы, но бывают и хорошие певцы, поющие в одном жанре — узнаваемые, выразительные, и при этом остающиеся в рамках этого жанра всю жизнь. То же самое и с актёрами.
Почему мне это не было очевидно с самого начала — загадка.
Пата-пон!
Сейчас я крайне редко играю в компьютерные игры — в основном просто потому, что на это совсем нет времени.
Я знал о ней всё, что только можно, и, когда была возможность, докупал к ней разные аксессуары — колонки, GPS-трекер, модуль радио и так далее. Часто писал о ней в блоге. Со временем консоль морально устарела, и я потерял к ней всякий интерес. Много лет она пылилась в кладовке, а теперь вместе со всем накупленным барахлом лежит
Честно сказать, я уже плохо помню, во что тогда играл. Почти ничего не вспоминается, кроме одного исключения.
Так что угадайте, что первым делом я установил, когда коллеги подарили мне на день рождения
Какой RLE лучше-2
Они
Оказалось, что более сложным алгоритмом я кодирую неправильно, так как в нём потенциально есть несколько стратегий кодирования одной и той же последовательности, чего я не увидел и не учёл в своей программе. На это мне попенял читатель, который мне
У меня всё никак не доходили руки аккуратно переписать свой скрипт, чтобы учесть замечание, но сегодня я не вытерпел и сделал некрасиво, практически перебором. Правда двухбайтный счётчик повторов делать не стал, наверное он тоже повлиял бы, но пока
В общем, новые результаты такие. Использовал на той же папке, что и в прошлый раз, но с той поры её состав немного поменялся. Алгоритм, который вспомнил я, лучше сжал 440 файлов, который предложил читатель — 4159, не удалось сжать вообще — 2507 файлов.
Прежний результат был такой: 1811 лучше сжал «мой» алгоритм, 2152 — читательский, в 3193 случаях не справился ни один из алгоритмов.
В общем, соотношение сильно изменилось.
Имя-эксплоит
Читал недавно про человека, сейчас уже покойного, фамилия которого состояла из более чем шести сотен букв.
В газете «The Free
Я, конечно, сразу вспомнил известный комикс XKCD.
И хотя история вполне вероятная, — не исключено, что в программе не проверялись границы буфера при вводе фамилии и это послужило причиной зависания, всё же я думаю, что это журналистское преувеличение и в реальности проблема была в том, что столь длинная строка просто не поместилась в нужное поле.
Если кому интересно, то согласно «Книге рекордов Гиннеса», его звали так:
Adolph Blaine Charles David Earl Frederick Gerald Hubert Irvin John Kenneth Lloyd Martin Nero Oliver Paul Quincy Randolph Sherman Thomas Uncas Victor William Xerxes Yancy Zeus Wolfeschlegelsteinhausenbergerdorffwelchevoralternwarengewissenhaftschaferswessenschafewarenwohlgepflegeundsorgfaltigkeitbeschutzenvonangreifendurchihrraubgierigfeindewelchevoralternzwolftausendjahresvorandieerscheinenvanderersteerdemenschderraumschiffgebrauchlichtalsseinursprungvonkraftgestartseinlangefahrthinzwischensternartigraumaufdersuchenachdiesternwelchegehabtbewohnbarplanetenkreisedrehensichundwohinderneurassevonverstandigmenschlichkeitkonntefortpflanzenundsicherfreuenanlebenslanglichfreudeundruhemitnichteinfurchtvorangreifenvonandererintelligentgeschopfsvonhinzwischensternartigraum.
Ошмётки в консоли
Как известно, много лет назад «Эпл» перешла с процессоров «Интел» на собственные, основанные на архитектуре «АРМ». Процессоры несовместимы, однако бинарные программы, скомпилированные под «Интел», продолжают работать — в «МакОС» встроен специальный транслятор, который обеспечивает такую возможность.
Много лет я таскаю с собой различные утилиты, которые при переходе с одного «Макбука» на другой автоматически копируются при помощи встроенной в ОС процедуры миграции. Однако некоторое время назад я занялся тем, что с помощью brew перевёл всё это бинарное хозяйство на «АРМ».
По пути у меня
Я всю голову сломал, пытаясь понять что же произошло, даже переставил себе iTerm2, думал дело в нём, но не помогло. Подумал, что может у меня
Тут я
Оказывается библиотека readline, отвечающая за редактирование текста в командной строке, неправильно считает длину строки, если в ней есть управляющие символы, — например, задающие цвет. Чтобы всё работало как надо, их надо обрамлять специальными последовательностями \[ и \]. Если я
В общем, я заменил приглашение с
PS1='\e[33;1m\u: \e[31m\W$(__git_ps1)\e[0m \$ 'на
PS1='\[\e[33;1m\]\u:\[\e[0m\] \[\e[31m\]\W$(__git_ps1)\[\e[0m\] \$ 'и всё заработало как надо.
«Футурама»
Я считаю, что можно бесконечно удивляться существованию трёх вещей: звёздного неба над головой, морального закона в груди и тринадцатого сезона «Футурамы». Сериал давно сгнил, конечно, и даже самые голодные редуценты им бы побрезговали, но я, как большой фанат, всё равно настолько его люблю, что смог осилить целых две с половиной серии.
Непонятно зачем «Хулу» раз за разом откапывает стюардессу. Смотреть это уже совсем невозможно, «я столько не выпью». Это надо же вбухивать много лет столько денег, чтобы настолько испортить послевкусие отличного сериала.
Модели BitNet
Эксперементировал сегодня ночью с моделями BitNet. Это небольшие (1—2 миллиарда параметров) модели очень низкой битности — 1,58 бит. Причём это не квантизация, они сразу так обучены. Интересны тем, что работают настолько быстро, что их можно запускать без графических ускорителей.
Было интересно посмотреть с какими типами задач они способны справиться.
Давал несложные задачи генерации текста, выделения сущностей, классификации, перевода с английского на русский, написания эскуэля,
На скриншоте у меня задача по написанию крайне простого эскуэля. Выглядит хорошо, задача решена, но это верхний предел этой модели — если дать ещё одну таблицу, всё сыпется в половине моих тестов. А если в задачу добавить ещё и LEFT JOIN, то тесты не проходят вообще — модель ни разу ничего адекватного не написала даже с очень детальными подсказками.
Поразительно, конечно, что сети такой низкой битности вообще
Горлышко аптечных бутыльков
Иногда в своих поисках на чердаках я нахожу различные бутылочки — как старинные, так и раннесоветские. Беру не все — только те, что
С годами у меня их скопилось приличное количество, и, что интересно, некоторые из них можно объединить в группы и сделать определённые выводы.
Бутылочки на фотографии объединяет необычная форма горлышка. Когда я впервые нашёл такую, подумал, что она пострадала
Я уверен, что в них было лекарство, так как на двух из них есть надпись «аптека».
Прямо утерянные технологии — не припомню, чтобы у бутылочек современных лекарств попадались такие горлышки. Чаще всего делают пластиковые дозаторы, что, конечно, ещё лучше решает проблему,
Утилита cdecl
Какая интересная утилита есть, оказывается, а я и не знал! Позволяет по любой декларации типа в языке Си получить описание на английском или наоборот — свернуть такое описание в тип. Вот примеры:
cdecl> explain char *(* const volatile (*(*hydra)(int (*)(void), char * const * restrict))[13]) (unsigned long, char * const [static 3]);
declare hydra as pointer to function (pointer to function (void) returning integer, restricted pointer to constant pointer to character) returning pointer to array 13 of constant volatile pointer to function (unsigned long integer, non-empty array 3 of constant pointer to character) returning pointer to character
cdecl> declare fp as pointer to function (pointer to char) returning pointer to array of pointer to char
char* (*(*fp)(char*))[];