Промпт-инженер
Сейчас многие говорят о рождении профессии будущего —
Не уверен, что у этой профессии действительно есть будущее, ведь вся история развития компьютеров антропоцентрична, — больше пользы от компьютера, который начинает лучше понимать естественный язык, а новые языки программирования никому, кроме специалистов, не интересны.
Поэтому я думаю, что звезда
Приживутся
Я уже немного пожаловался на то, что иногда люди хуже понимают, что я хочу спросить, чем нейросети, а дальше, кажется, будет ещё веселее. Нейросети будут всё умнее, а люди, совсем расслабившись, — в среднем ещё глупее. Думаю, это будет заметно уже в ближайшее время.
То ли нас ждёт расслоение на элоев и морлоков, то ли
Тот и другой сценарий так себе, у меня одна надежда — на кардинальную реформу образования. Я чувствую, что мы
Надеюсь нейросети смогут вырабатывать для нас не только лёгкую мозговую нямку в реальном времени, но и помогут выработать качественные персонализированные методы обучения.
«Из» → «с»
Грустно, но кажется замена предлога «из» на «с», на которую я обращал внимание несколько лет назад, становится новой нормой. Я сужу по тому как меняется частотность этой замены в текстах со временем. Самое главное — непонятно с чего вдруг так много людей стали приверженцами этого изменения.
Понятно, что язык меняется, но мне очень не нравятся потери в языке, я против. Я имею ввиду — когда пропадают
Кажется многие уже настолько небрежно пишут и допускают столько ошибок, что понимать друг друга становится всё тяжелее. Я недавно обратил внимание, что иногда добиться ответа от людей на свой вопрос невероятно сложно, такое ощущение, что у каждого в мозгу срабатывает
А так как коррекция у каждого своя, ответы сыпятся
Особенно очевидно это становится по сравнению с нейросетями, которые хоть и высасывают из пальца часть ответа, но всё же возвращают веру в то, что я ещё умею формулировать вопросы.
Умная собачка «Соня»
Купил дочке нового друга — очень ей хотелось
По такому техзаданию, если честно, найти ничего в магазинах не удалось. Есть на выбор — либо всё требуемое умеет, но из пластика, либо с мехом,
Решил посмотреть нет ли чего похожего в забугорных магазинах
Я не знал, что он уже не производится, а то бы не стал дальше искать. Но повезло и на «Авито» нашлось
Дочка роботу чрезвычайно обрадовалась и назвала «Соней», в честь серии рассказов про умную собачку Соню. Пока с ней не расстаётся, таскает из комнаты в комнату за собой.
Наш пёс Бейсик, по всей видимости, ещё не решил как относиться к новому приобретению, — с одной стороны собакой от робота не пахнет, с другой робот лает и дышит, как настоящая собака. Пока робот не двигается, Бейсик не реагирует, а когда начинает двигаться и лаять, осторожно смотрит
Кирпич «Боровичи ALFA»
Постоянные читатели блога знают, что очень люблю находить малые исторические артефакты. В частности мне нравятся дореволюционные кирпичные клейма, которых я нашёл очень много.
Сейчас я уже почти не нахожу новых, хотя редкий раз удаётся увидеть
Не очень чётко видно, но на кирпиче стоит клеймо «Боровичи ALFA». ALFA — это класс огнестойкости (до 2100°С), а Боровичи — город в Новгородской области, откуда в Казань попадало немало кирпичей разных производителей, видимо были налажены хорошие торговые связи.
История завода хорошо описана у известного коллекционера кирпичей Владимира Смирнова:
В 1888 году в местечке Лысцово недалеко от Боровичей предприниматели (также с немецкими корнями)
инженер-технолог Фридрих Карлович Тауцен, статские советники Николай Васильевич Нерлинг и Владимир Карлович Бекман построили завод для производства огнеупорных изделий «Надежда». В 1893 году ими было образовано «Товарищество производства глиняных и гончарных изделий» (сокращенно ТОПГИ). Несмотря на несколько случившихся за период работы пожаров (в частности, в 1897 году), к 1903 году завод набрал мощности и имел 2 производственные площадки.В 1913г. Товарищество было ликвидировано и заводы вошли в состав «Общества Боровичского завода огнеупорных, кислотоупорных изделий и канализационных труб бывш. К. Вахтера и Ко».
Слеш в имени файлов «МакОСи»
Принято считать, что в мире «Эпла» легко избавляются от наследия, невзирая на несовместимость программ или оборудования. В большой степени так оно и есть, но иногда можно наткнуться на очень странные штуки, которые до сих пор используются:
Another obvious problem is the different path separators between HFS+ (colon, ’:’) and UFS (slash, ’/’). This also means that HFS+ file names may contain the slash character and not colons, while the opposite is true for UFS file names. This was easy to address, though it involves transforming strings back and forth.
The HFS+ implementation in the kernel’s VFS layer converts colon to slash and vice versa when reading from and writing
to the on-disk format. So on disk the separator is a colon, but at the VFS layer (and therefore anything above it and the kernel, such as libc) it’s a slash. However, the traditional Mac OS toolkits expect colons, so above the BSD layer, the core Carbon toolkit does yet another translation. The result is that Carbon applications see colons, and everyone else sees slashes. This can createa user-visible schizophrenia in the rare cases of file names containing colon characters, which appear to Carbon applications as slash characters, but to BSD programs and Cocoa applications as colons.
На скриншоте видно как это выглядит в жизни: в командной строке создаём папку с двоеточием в имени, в Файндере в этом месте — слеш. В цитате такое поведение метко названо «шизофренией».
ChatGPT 3.5 vs 4
Пару дней подряд мучал нейросеть GPT разных версий. Мне хотелось нащупать язык, по которому у этой модели пограничные знания. Примерно как у меня в татарском —
Целью было проверить насколько можно дополнить неполные знания инструкциями из интернета, догружая отсутствующие знания прямо в окно диалога.
Попробовал на примере
С версией 3,5
К сожалению, размера контекста у ChatGPT не хватило, чтобы дойти до конца, но в целом, считаю, эксперимент прошёл удачно, а вывод такой — если дать возможность модели
С четвертой версией вышел облом, дело застопорилось в самом начале. Сеть каждый раз отвечает
Unfortunately, we cannot provide
a step-by-step guide for rewriting the program in COBOL as it requires a deep understanding of the language and its syntax. However, we recommend consulting resources and tutorials specific to COBOL programming.
И сильно дальше этого мне пока продвинуться не удалось. Осложняется всё тем, что у меня сейчас нет доступа к
Поэтому я его переношу между запросами руками и, вероятно, делают это неправильно — просто наивно копирую целиком в следующий запрос, а надо, наверное,
Гиперссылки в терминале
Решил сегодня скоротать вечерок со статическим анализатором в gcc — уже несколько раз натыкался на статьи о нём, пока читал про Си++. Всё откладывал знакомство и вот решил посмотреть.
Попробовал проанализировать им исходники
Пока читал, что мне вывелось, заметил, что в терминале работают гиперссылки. Не знал, что такая возможность есть. Про графику слышал, а про гиперссылки — не припомню,
Выше на скриншоте их хорошо видно — они подчёркнуты прерывистой линией. В данном случае по ссылкам можно перейти на документацию о соответствующей ошибке, очень удобно.
Штука достаточно свежая и поддерживают её не все терминалы. У себя попробовать можно вот так:
printf '\e]8;;https://bolknote.ru\e\\Сайт Степанищева Евгения\e]8;;\e\\\n'
Перекодировка вручную
Меня удивляет, что многие программисты сейчас не умеют перекодировать строку в ошибочной кодировке вручную, даже если знают как она получилась.
С различными кодировками сейчас мало где можно столкнуться, тем не менее мне неясно в чём сложность задачи. Вроде даже ничего знать не надо.
Например, я вижу вот такую строку: Требуется авторизация. Она так выглядит, потому что она была в кодировке
iconv -f utf8 -t cp1251 <<<"Требуется авторизация"
Требуется авторизацияДиапазоны в Си
Почитал тут на досуге какие ещё расширения есть у «ГНУ Си». Хотя я их и не использую, но знать не помешает. Оказалось, что там много такого, что лично мне хотелось бы видеть в языке. Например, хорошая штука — диапазоны. Выглядят они так:
const char *whatisit(char code) {
switch (code) {
case 'a' ... 'z':
return "lowercase";
case 'A' ... 'Z':
return "capital";
case '0' ... '9':
return "digit";
case 0 ... 31:
return "special";
default:
return "unknown";
}
}Но написал я про них не только потому что мне нравится конструкция, но и потому, что оказалось, что меня неконсистентно бесит пробел слева от многоточия, который надо обязательно поставить, если диапазон начинается в цифры.
Если его не будет, компилятор подумает, что перед ним число с плавающей точкой и заругается на ошибку синтаксиса.
Непонятно почему меня это так раздражает. Ну пробел, это же не первый синтаксический костыль, который я вижу,
Everyone is my brother, but some are brothest
Как я уже писал, у меня есть несколько спорная, но пока статистически хорошо подкрепляемая теория о том, что все Степанищевы — родственники.
Я в ней так уверен, что в прошлом году заключил любопытное пари. К нам пришёл на удалённую работу парень из Бугульмы
Вот на эту тему мы и поспорили, — родственники мы с тем приятелем или нет. Решили выяснить. Сначала я связался с самим претендентом на родство, потом с его папой и мы довольно легко нашли общие корни.
Ненормальный цикл на «баше»
Сегодня в чате бывших коллег на фоне вопросов по одной из вакансий случилось обсуждение на тему что делать, если на собеседовании спросили как написать на «баше» цикл от одного до десяти, а ты не помнишь синтаксис for и команду seq тоже не знаешь.
Предположим ты честно говоришь, что не помнишь, а тебя просят
Мой вариант:
«Назаваль»
Сейчас многие аллергики, в том числе и я, страдают от весеннего цветения. Пьют таблетки, стараются меньше появляться на улице. Хочу посоветовать средство, которое выручает меня, когда ничего уже не помогает.
Это барьерный противоаллергенный препарат «Назаваль», — порошок, который при вдыхании образует плёнку на слизистой носа и помогает меньше контактировать с аллергенами в воздухе.
К сожалению, пользоваться им
«Гопник-2»: переход на нормальный Си++11
Как я писал прежде, когда я адаптировал
Тут у нас в Татарстане выдались длинные выходные, — в праздник
Вызов _fileno у меня использовался для получения номера дескриптора входного потока, так что тут всё решилось просто, — для этого есть специальная константа STDIN_FILENO. А вот с strdup пришлось повозиться.
Сначала я, разумеется, сделал свою реализацию — там
Первым делом пошёл на поклон к «ЧатГПТ», спросил совета. Советы не заработали, но дали направление мысли.
Первая мысль была забахать макрос, который заменял бы собой strdup в проблемном компиляторе, а остальные не трогал. Тут надо сказать, что под «Виндой» далеко не во всех наборах утилит компиляторы не содержат функцию strdup, например в msys2 она есть.
Мне хотелось
Пришлось пошарить по исходникам. Оказалось, есть ряд макросов, которые присутствуют в msys2, но отсутствуют в msys. Из них я выбрал __MINGW64_VERSION_MAJOR:
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
#define strdup(s) (__extension__({ const char* __s = (s); size_t __l = strlen(__s) + 1; char* __d = (char*)malloc(__l);\
__d ? (char*)memcpy(__d, __s, __l) : nullptr; }))
#endifТут используется расширение, которое позволяет писать многострочные макросы. Хотя этот вариант мне и нравится, но опять используется не нормальный Си++, а расширение компилятора.
Вторая мысль, на которую меня навела нейросеть — использовать слабые символы языка Си++. Это совершенно новая для меня штука, поэтому нужно небольшое пояснение. Прежде всего для меня же, чтобы я в будущем не забыл что это вообще такое.
Если упрощать, то символы — это экспортируемые именованные сущности. Те, что
Слабые символы используются для библиотек, чтобы пользователь мог заменить некоторые сущности, если они его не устраивают.
Если перевернуть ситуацию, и считать мой код библиотекой, а тот код, где должна быть определена strdup основным, то всё должно получиться.
«ЧатГПТ», к сожалению, помочь не смог, — сначала подсовывал нерабочий код, а потом зациклился в своих советах. Поэтому пришлось разбираться самостоятельно.
Всё оказалось не так уж и сложно. Сначала в заголовочном файле определяем прототип функции:
#ifdef __MINGW32__
char *strdup(const char *s1);
#endifЯ его спрятал под условие, чтобы мой редактор перестал ругаться на избыточное определение, но всё работает и без этого.
Потом в самом коде создаём слабый символ для strdup:
#ifdef __MINGW32__
#pragma weak my_strdup
char *strdup(const char *src) {
size_t len = strlen(src) + 1;
char *s = (char *) malloc(len);
return s == nullptr ? nullptr : (char *) memcpy(s, src, len);
}
#endifСлабый символ я определяю через директиву #pragma weak, у которой надо указать имя слабого символа, причём оно должно отличаться от имени функции. Я пока не до конца понял зачем это нужно делать, но без этого не работает.
Кстати, #pragma weak тоже расширение, но оно легко заменяется на атрибут weak, надо только будет изучить его синтаксис, я не успел этого сделать.
На имя my_strdup у меня ругается редактор — говорит, что слабый символ нигде не определён, поэтому я опять же засунул всё это в условную компиляцию.
В выходные, как всегда, есть куча дел, кроме хобби, поэтому до конца я разобраться не успел и буду рад, если
Дополнено: в итоге все ситуации я побороть не смог и откатился на самое простое решение со своей собственной реализацией strdup.
Поиск «Яндекса» по архивам
Те, кто занимается генеалогией не могли не заметить, что «Яндекс» выкатил очень полезный сервис «Поиск по архивам», позволяющий искать по некоторым архивным фондам.
Этих самых фондов там пока мало, но это неважно, важно то, что у «Яндекса» получилось довольно неплохо распознавать рукописный текст. Пока до идеала далеко, но прежде нам и такое не было доступно.
Искать пока тяжело — много ложных срабатываний, но если взять
Сразу нашлось несколько интересных записей, которые ручным поиском не найдёшь — нет признаков по которым можно понять, что в этих делах могут упоминаться мои предки или родственники.
Покажу что удалось найти и как выглядят записи, чтобы можно было оценить на что способен движок распознавания рукописного текста.
Семён Венедиктович (1885—?) — потомок моего прапрапрадеда Павла Степанищева.
Яков Платонович Степанищев (1865—?) — прапрадед, Жилины — родственники по той же стороне.
«Пристроить» в дерево удаётся не всех, вот один из примеров — Евдоким Михайлович Степанищев, кто он мне — непонятно. Таких беспризорных записей нашлось несколько штук, не стал их все скриншотить.
Василий Васильевич Степанищев (1873—?) — опять же потомок моего прапрапрадеда Павла Степанищева.
А тут Феврония Фроловна (1892—?) и Герасим Павлович (1887—?), потомки моего прапрапрапрадеда Григория, выступают свидетелями на бракосочетании.
В каждом из текстов под скриншотами мне пришлось исправить много опечаток, но общий вывод — пользоваться этим можно, польза есть.
Незаменимо, если вообще непонятно откуда начинать. Такое бывает, например, если неизвестна география, а тут хоть
ЧатГПТ и понимание смысла
Илья Бирман в своём блоге опубликовал небольшую заметку на тему понимания ЧатГПТ смысла. Он попросил нейросеть ответить ему через пятнадцать минут. Естественно, с заданием она не справилась.
Пример некорректный, потому что тестируется совершенно другое. Я, например, смысл фразы понимаю, но через пятнадцать минут без часов ответить не смогу.
На мой взгляд, очень просто проиллюстрировать отсутствие у ЧатГПТ понимания смысла примером на скриншоте, — я всего лишь дважды попросил ничего не отвечать на моё сообщение.
Агафия Захариевна Макридина
Все мои ближайшие предки, к сожалению, жили в деревнях. К сожалению, потому что в деревнях редко выпадал случай сфотографироваться,
Я всё ещё надеюсь, что
Как я уже писал, недавно познакомился с дальними родственниками, с которыми до этого не был знаком, а у них сохранились
На ней хоть и не мой предок, но тоже родственник, хоть и ментальный, — мачеха моей прабабушки Груни — Агафия Захариевна Макридина, примерно 1870 года рождения.
Милота
Милота — Ева написала своей
Чей почерк?
Уходящее, кажется, умение — понимать чьей рукой написан текст.
Чем дальше, тем меньше мы пишем руками, скоро, думаю, само умение ухватывать стиль письма из почерка пропадёт, так как навык замечать разницу совершенно не тренируется.
Я имею ввиду не умение различить два разных почерка, а умение запомнить и сказать в другой раз на какой из показанных он был похож.
Примерно, как запомнить оттенок цвета. Попробуйте, например, не глядя на стену, выбрать её цвет в графическом редакторе. Вот я не смогу,
В будущем, если понадобится, будем у нейросеточек спрашивать, — а кто это написал из моих предков? А это? Это тот же самый почерк или другой?
Beta than nothing
В результате изделие, чей сектор больше всех, развивается быстрее и постепенно уходит в отрыв. Эта картина совершенно не зависит от качества товаров, а исключительно от начального распределения. Вот и получается что стандартом
де-факто становится наихудший товар из работоспособных — изделие наименее добросовестных разработчиков, стремящихся побыстрее застолбить место, первыми выбросив на рынок плохо продуманную «сырую» дрянь.
— из приложения «Знакомимся с кодировками символов» к книге «Фокал снаружи и изнутри».
Принцип известен в программировании как «Beta than nothing».
К сожалению, именно так это и работает, — пока ребята из Вилларибо вылизывают свой код и постепенно разоряются, жители Виллабаджо уже наговнякали прототип, продали его за денежки и доводят его до ума на живом заказчике, который их проклинает, но деться уже никуда не может — деньги на внедрение уже потрачены.
Ничего не поделаешь, это стороны одной монеты — мы любим, чтобы всё появлялось быстро, но при этом закономерно жалуемся на сопутствующие баги, хотя они суть последствия аврала и спешки, в которых сейчас принято разрабатывать программное обеспечение.
На этом принципе взлетел
Любопытно что тут поменяет искусственный интеллект.
В принципе, переводить мысли в понятный машине код будет проще, — не надо учить никакие машинные языки, оно там
Классное время настанет для креативных людей!
«Гопник-2»: новости
Может показаться, что после релиза
Как можно догадаться по этой заметке, это не так. За последнее время я исправил несколько незначительных багов и реализовал
Я долго не понимал как во внутреннем АПИ игры формируются
Шокер может вывалиться из одного из неигровых персонажей и немного оживляет бои, а то они очень уж скучные.
Думаю добавить в ларёк ещё пару предметов, а так же новую локацию. Так как пока не уверен стоит ли её добавлять, не буду писать какую. После всех добавлений выпущу следующий релиз.
В общем, игру потихоньку развиваю, хоть фантазия