Обновить
160
43.2
Родион Горковенко@RodionGork

IT-энтузиаст

Отправить сообщение

Забавный парадокс отправки в канал в Go

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8.5K

Коллега давеча показал любопытный "фокус", который вызвал изрядный спор в рабочем канальчике посвящённом Golang. Сначала обозвали коллегу двоечником, мол синхронизацию забыл - но выходит что дело тоньше и выдаёт небольшую неконсистентность эволюции средств языка, в частности каналов.

(UPD - нет не единственный, смотри примечание в конце - код более похожий на то что можно встретить в жизни)

Читать далее

Мелкий нюанс безопасности логина на примере Госуслуг

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели17K

Если внезапно пришла СМС‑ка «код для входа на госуслуги 314159» — какие обычно ваши чувства и действия? Если кратко — пароль, похоже, надо поменять — код приходит только после того как ввели правильный пароль, если не ошибаюсь.

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

Читать далее

Горе от Ума — почему IT-проекты пишутся долго и стоят дорого (иногда)

Время на прочтение6 мин
Охват и читатели16K

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

Готовится релиз. Сроки подходят. Мне скидывают странный баг: Наше приложение вдруг стало жаловаться на невозможность соединиться с соседним.

А почему не может? Защищённое соединение не устанавливается.

А почему не устанавливается? Файлы сертификатов для этого соединения не удаётся загрузить.

А почему файлы не грузятся? А потому что путь к файлам "отсутствует в конфигурации".

А если руками залезть и глазами посмотреть - присутствует. Чудеса! Эффект Шрёдингера!

Ну и что это за грязная магия?

Программирование Роботов — разбор задач «квалификации» соревнования от МТС — немного кода, видео и геометрии

Время на прочтение18 мин
Охват и читатели5.6K

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

Задачи были такие: 1) проехать по известному «лабиринту» из двух комнат с фиксированными препятствиями, то есть запрограммировать фиксированный маршрут — кое‑кто бился над этим неделю и больше — но всё же решений около сотни; 2) проехать неизвестный лабиринт из стенок под прямыми углами — с этим справились вчетверо меньше команд; 3) проехать по змеевидной платформе, используя камеру глубины, и не упасть за край — мне известно примерно о двух с половиной решениях её.

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

Погнали!

Закройте сокет, даже если он не открылся

Время на прочтение3 мин
Охват и читатели5.2K

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

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

Если вы создали сокет, попытались его открыть и отвалились по таймауту - не переиспользуйте его! Для новой попытки обязательно создавайте новый сокет!

Это не вполне очевидно и в документации порой лишь вскользь упомянуто, либо не упомянуто вообще. Ниже немного подробностей с кодом, но в общем вся суть в этой фразе. Не переиспользуйте!

Читать далее

Программирование Роботов от МТС — соревнование с педальным приводом

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели6.3K

Недавно МТС анонсировали очередное соревнование TrueTechChamp 2025 — в нём две части — одна с типичными «алгоритмическими» задачами, другая на «программирование роботов». Участвовать можно в любой (или в обеих), но с первой всё незамысловато — а мы поговорим о второй.

«Отборочный» этап продлится ещё больше 3 недель (до 20 октября), так что любой желающий может влиться. Эта заметка расскажет, в чём собственно заключаются задачи, и с какими сложностями мы сталкиваемся — также будут замечания организационного характера. Надеюсь это поможет тем, кто также захочет поучаствовать. Ну или просто поведает о происходящем для тех, кому любопытно, но регистрироваться неохота. Можно даже погонять роботов локально, без регистрации, скачав нужные материалы.

Читать далее

Простота и Гласность

Время на прочтение1 мин
Охват и читатели4.7K

В именах Masha, Rodion и Ekaterina насчитываем 2, 3 и 5 гласных букв — это всё простые числа. Гласными в рамках этой задачи считаются aouie, без y (хотя это дискриминация).

Представьте, даны две строки одинаковой длины, например abbas и abzac — они задают некий диапазон всевозможных строк (этой же длины) в алфавитном порядке:

abbas, abbat, ..., abyzz, abzaa, abzab, abzac

Сколько в этом диапазоне строк, имеющих «простое» количество гласных? Тут даже ребёнок легко сосчитает — всего 7289:)

А как посчитать если ограничение на длину строки — до 150 символов? Приглашаем попробовать новую задачу на CodeAbbey от Клайва Фрэйзера: Prime Vowel Count — она хороша тем что демонстрирует довольно общий подход к целому классу подобных задач (не обязательно даже про строки).

Читать далее нечего

Несколько занятных вопросов собеседований по Go

Время на прочтение3 мин
Охват и читатели9.7K

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

Читать далее

3 кусочка «сахара» к синтаксису языка Lua

Время на прочтение10 мин
Охват и читатели6.7K

Lua — симпатичный и хороший язык — умещает богатый функционал в очень маленькой реализации (интерпретатор и библиотека — это всего один исполнимый файл на 300кб) — и притом изначально ориентирован на «человечный» синтаксис. Хотя он не в топе популярности, но за простоту встраивания (помимо человечности и функциональности) он используется в ряде популярных проектов — от Roblox до Tarantool, например.

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

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

Читать далее

Первый Спутник, язык FORTH и немного о JIT-компиляции

Время на прочтение10 мин
Охват и читатели7.9K

Здесь не будет песен и сказок о том какой крутой и недооценённый язык Forth:) По совокупности обстоятельств он скорее уже история. Однако некоторые связанные с ним аспекты поучительны и перспективны (например, для энтузиастов и разработчиков языков и компиляторов) — и хочется их записать на память, да и поделиться с коллегами.

-

Читать далее

Самобеглый Код :-)

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.2K

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

MOV 0, 1

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

Мне неизвестны реальные процессоры в которых были бы подобные "удобные" инструкции. И вот любопытно - насколько короткой можно сделать (а можно ли?) подобную "самобеглую" программу для какой-нибудь настоящей архитектуры. Ну хотя бы для 8086. Тем более что там сегменты обозримого размера - 64 килобайта.

Не страшно если вы не знаете или плохо помните команды ассемблера, их будет немного и мы снабдим их пояснениями.

Читать далее

Старый но симпатичный DEBUG.EXE

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели7.1K

Почему-то не нашёл с первой попытки здесь на Хабре какого-нибудь демо или инструкции по использованию этой старинной, но милой тулы из стандартной поставки DOS. Давайте быстренько это исправим. Как легко догадаться из названия - DEBUG.EXE предполагается использовать для отладки. Мы же напишем пару коротких ассемблерных программ "с нуля" - это не займет много времени, а притом даст лёгкое ощущение магии!

Экспериментировать можно в DosBox или DosEmu - правда если вы возьмёте версию DEBUG.EXE например из MS-DOS 6.22 то скорее всего обнаружите что она не заработает в эмуляторе. Несложно отыскать в интернете рабочую версию (из Windows XP или FreeDOS например - иногда также под именем DEBUG.COM) - либо установить полноценный ДОС в виртуалку вроде VirtualBox.

Внимание! Эта статья имеет скорее развлекательно-познавательное назначение - её автор вовсе не думает что кому-то (кроме студентов со старыми лабами по "архитектуре микро-ЭВМ") в наше время это понадобится в практических целях. Мне же эта мини-инструкция пригодится как вспомогательная для будущей статьи про "самокопирующуюся программу".

Читать далее

Язык Cangjie от Huawei — скачаем, запустим, попробуем

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели8.2K

О том что Huawei обнародует собственный язык программирования новости ходили уже давно. Ещё в прошлом году при поиске работы мне уже предлагали работать с этим языком - правда "не сейчас а вот-вот вскоре" :) На тот момент компилятор и прочие инструменты ещё не были в открытом доступе. Сейчас же страница скачивания - вот она - под Linux, Windows и Darwin (да ещё и плагин к VSCode)!

В этой статье - беглый обзор. Я попробовал скачать-запустить и, пройдясь по разделам документации, описал основные фичи - так что вы можете сэкономить себе время и за 5-10 минут составить представление о Cangjie. Сразу скажу - чего-то оригинального, инновационного - я не заметил. Нет такого, чтобы как с Haskell, Erlang или Rust на первых порах пришлось ломать голову. Для программистов на Java, Go, C++ много будет довольно привычных вещей (можно сказать - "обокрали" эти языки тут и там понемногу).

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

Есть нюанс с примерами - Habr естественно не поддерживает подсветку синтаксиса для Cangjie (пока) - а для наглядности это желательно. Пожалуй буду вставлят картинками, за что заранее прошу извинения.

Читать далее

Ваша модель не играет в шахматы, а только притворяется

Время на прочтение8 мин
Охват и читатели5.3K

В комментариях обратили внимание на статью от 2022 года, где специалисты компании Meanotek взялись специально натренировать GPT-2 «весьма прилично играть в шахматы». К счастью они оставили демо‑страничку где можно поиграть против их модели — то есть, потестировать результат вместо чтения длинной статьи (о чем пару слов тоже скажем).

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

Читать далее

Некоторые замечания об игре в Шахматы против LLM (на примере deepseek)

Время на прочтение6 мин
Охват и читатели8.1K

Поскольку LLM (все эти ChatGPT, DeepSeek и т.п.) это языковые модели, которые по идее просто складывают ответ из кусочков фраз, как в калейдоскопе - мы не ожидаем от них чудес логики. Тем больше они нас удивляют пытаясь генерировать ответы на достаточно мудрёные задачи - от генерации и исправления программного кода до, например, игры в шахматы.

Идея с игрой в шахматы хороша тем что на ней легко продемонстрировать и неспециалисту как возможности так и ограничения LLM. Эксперименты на эту тему появились уже давно, например в статье на Хабре же от 2023 года. Там автор на 6м ходу сделал неправильный ход но LLM этого не заметила. Мы кратенько посмотрим есть ли прогресс в этом направлении, попробуем немного изменить подход и потестируем ещё пару игр.

(сразу скажу - несмотря на прошедшие два года и явно принятые разработчиками усилия добиться адекватности мне почти не удалось)

Читать далее

Простой программатор для атмеловских 8051

Время на прочтение7 мин
Охват и читатели3.1K

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

Собственно программатор — голый Arduino с прошивкой, разбирающей HEX‑файл построчно и реализующий программирование целевого чипа по SPI. Прошивка и инструкции сложены в репозитории на гитхабе: At89s‑prog.

Конкретные чипы (At89s...) здесь скорее для примера. Мы не будем воспевать достоинства 8051-й архитектуры (конечно, они архаичны но у них есть плюсы, благодаря которым они до сих пор сохраняют популярность). У меня в какой‑то момент оказалась их горстка а программатора под рукой не нашлось. Они (те что с индексом S) программируются через SPI, а не стандартным «многоногим» интерфейсом что делает удобным их применение в любительских поделках.

Читать далее

О типах отрицательных сопротивлений — и как они используются в генераторах сигналов

Время на прочтение12 мин
Охват и читатели3.1K

Что такое "отрицательное сопротивление"? Под этот термин подходят различные явления и устройства - но нам годятся далеко не все. Данная статья содержит пояснения по теории к статье про Гармонический Осциллятор с Отрицательным Сопротивлением. Её можно читать отдельно или только заглядывать сюда по ходу чтения основной статьи, для справки.

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

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

Читать далее

Генератор синусоиды из LC-контура и отрицательного сопротивления

Время на прочтение14 мин
Охват и читатели4.4K

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

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

Поэтому мы обсудим альтернативу - с использованием "отрицательного сопротивления" - подключая к нему LC-контур прямо в том виде в каком он нарисован в учебнике, мы сразу получаем рабочий осциллятор и с широчайшим диапазоном по частоте!

Мы проверим эту идею на практике! Подключим LC-контур к двум типам схем с отрицательным сопротивлением - сперва к "лямбда-диоду" (на транзисторах), а потом к "транзитрону" (на электронной трехсеточной лампе - пентоде).

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

Читать далее

Дело о Транзитроне — или Ламповый тьюториал для любопытных

Время на прочтение20 мин
Охват и читатели4.3K

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

Многих останавливает кажущаяся сложность таких экспериментов - хотя сами лампы можно купить рублей по 50 за штуку, трансформатор для питания достанется уже несколько сложнее и дороже. Да и анодное питание под 300 Вольт - а ну как дёрнет?

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

Ну, посмотреть-то не страшно! Вперёд!

Упражнение на ассемблер 8051 для LLM — или «игра в испорченный компилятор»

Время на прочтение5 мин
Охват и читатели1.8K

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

Возьмём очень простую задачу - скомпилировать код. Для наиболее однозначного соответствия я беру код на ассемблере - и хочу получить HEX-файл. Это задача которую можно выполнить на бумажке (имея под рукой список команд и помня формат файла) - да в древние времена кому-то и приходилось такую "ручную компиляцию" выполнять. А что нам ответит, например DeepSeek?

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

Итак, заработает ли сгенерённый код?

Информация

В рейтинге
181-й
Откуда
Санкт-Петербург и область, Россия
Работает в
Зарегистрирован
Активность