Привет, Хабр!
С моей первой статьи прошло чуть больше недели, я не ждал, что её вообще одобрят, у меня до этого даже аккаунта на Хабре не было.
Программированием я никогда не занимался, хотя интересно было всегда, а потом пришли новые технологии, и код за тебя теперь могут писать роботы.
Пересказывать, как я решился сделать Писаря, не буду, про это была первая статья, здесь хочу подвести небольшой итог.
Если коротко: увидел, как GigaAM от Сбера распознаёт русскую речь, офигел и сделал диктовку для себя, а вам спасибо за такую высокую оценку, я её не ожидал.
Теперь к цифрам, не знаю, много это или мало, но кроме одной статьи на Хабре я нигде про Писаря не рассказывал, просмотры вы и так видите под первой статьёй, а установок уже больше четырёх сотен. Приятно.
Ещё меня заметили на Хабре и предложили вести блог, я с удовольствием согласился, мне это ничего не стоит, и мне это интересно, а вам, возможно, будет полезно посмотреть, как не программист дорабатывает приложение и как оно расходится по людям, какие хотелки появляются, на какие сложности я натыкаюсь и как их решаю.
Скачать и обновиться
После статьи посыпались баги, я разумеется их правил, и версии пошли одна за другой, а значит, нужно было как-то обновляться, тут была первая засада, так как опыта у меня не было, сначала я сделал как проще: приложение сообщало, что вышла новая версия, и отправляло человека на страницу GitHub, а там список файлов с непонятными названиями, разработчику, даже начинающему, всё ясно, человек с улицы привык нажать одну кнопку «Установить», а тут надо угадать, какой из файлов качать.
Что сломалось и как чинилКогда-то, очень давно, у меня был ZX-Spectrum, затем его аналог Magic 06. Это действительно замечательный компьютер для своего времени. Сейчас интерес к созданию компьютера из набора микросхем в обнимку с паяльником снова актуален для любительских проектов и не только. Но когда я стал искать информацию о процессорах Z80, то не смог найти корректную информацию по применению и возможностям процессора, а также «распиновке» процессора и его маркировке. Поэтому данная статья и последующие будут постепенно раскрывать этот пробел.
Данная статья рассматривает процессор Zilog Z84C008PEC (Z80) с точки зрения описания основных функций, маркировки, а также «распиновки». Данный процессор был куплен в Китае, для меня было удивительно, что данные процессоры не просто еще используются, но и даже производятся в поднебесной, хотя официальное производство свернуто. Внимание, данный процессор производится и применяется с 1976 года, уже почти 50 лет. Оказывается, его применяют в промышленной автоматике по сей день, в любительских бытовых компьютерах, в компьютерах управляющих автоматикой на производстве, в том числе в «кустарной» автоматике.
Лично для себя я приобрел этот процессор, чтобы собрать ZX-Spectrum на макетной плате
Итак, о процессоре.
Тактовая частота процессора Z80 с маркировкой линейки Z84C…PEC напрямую зависят от цифр, которые идут сразу после «Z84C00».
Если указанно «04», то тактовая частота 4 МГц, если указано «08», то тактовая частота 8 МГц. Но самое интересное в другом маркере, а именно в букве «С» идущей сразу после «Z84». Эта буква говорит о том, что рабочая частота может быть от 0 МГц до значения указанного выше («04» – 4 Мгц, «08» - 8 МГц).
Читать далееПохоже что тема сложности и грязи в играх нашла отклик у читателей Хабра, и @andz даже пообещал поставить тысячу плюсов если бы мог, так что ловите вторую часть, которая должна была быть в части первой, но её там не было.
В основе любого инженерного искусства лежит великая иллюзия контроля над хаосом и открывая пустой файл, мы искренне верим, что в этот раз архитектура точно‑точно останется кристально чистой. Никто в здравом уме не пишет сложный код ради удовольствия (хотя нет, пару человек я все‑таки знаю, но это скорее исключение из правил), и если вы открыли систему частиц и увидели там хардкод для каждой платформы, то это, скорее всего, программисту, писавшему эту систему, выдали число, мало времени и сказади сделать красиво «читобыработало», но читобыработало — не всегда красиво, красиво — не всегда быстро, быстро — не всегда работает.
Число... например, 16 мс или 33 мс или 8 гигабайт, из которых 5 доступны, или «игра должна показать первый интерактивный кадр не позже чем через десять секунд после запуска, иначе сертификацию не пройдем». Как только у свойства системы появляется измеримая цель, простота перестаёт быть бесплатной и превращается в то, чем вы платите.
Читать далееЗадача звучала невинно: два браузера, кнопка «Call», голос в обе стороны. Под капотом — Asterisk 22 в Docker, Coturn, JsSIP и SIP поверх WebSocket. На деле — пять разных багов с одним и тем же симптомом «нет звука»: заблокированный STUN, зависший ICE gathering, забытый event.ready() на 40 секунд, приватные IP в SDP и петля 403 Forbidden на собственном TURN-сервере. Детективная история одного WebRTC-звонка: улики, ложные следы, RTP-дебаг в двух терминалах — и финальный pjsip show channelstats с голосом в обе стороны.
Кто убил звук?Компьютер является математической структурой, отлитой в кремний. И фактически с ним можно взаимодействовать так же, как с любым другим математическим обьектом.
Чтобы лучше раскрыть эту мысль, мы разберем компьютер сначала как математическую абстракцию, а потом реализуем его в двумерном, трехмерном и четырехмерном измерений, и напишем для них инструкции.
Носителям прекрасного языка программирования C++ тема частичного применения может показаться скучной. Что примечательного в пяти строчках кода? Но дьявол кроется в деталях: я часто встречал реализации, которые работали не так, как ожидали их авторы. Иногда дело доходило до undefined behavior. Поэтому здесь хочется разобраться прежде всего с владением, временем жизни и категориями значений.
Разобраться в деталяхПриложение на Tauri 2 проходит все тесты на Ubuntu, а на ALT Linux теряет HTTPS сразу после проверки обновлений. Разбираю, почему так происходит, как это воспроизвести и как исправить одной функцией в своём коде.
Читать далееПредставьте компанию, которая настолько внимательно слушает рынок, что постепенно перестаёт слышать себя. Клиент говорит, что дорого, — продажи добиваются скидки; жалуется, что мало функций, — разработчики расширяют дорожную карту; спрашивает, почему у конкурента всё иначе, — маркетинг готовит презентацию, объясняющую, что скоро у нас тоже будет иначе, только лучше. Разработку ускорили, подрядчика сменили, скидку согласовали — а сравнение снова не в нашу пользу. Продукт становится сложнее, маржа меньше, и собственная стратегия, если снять с неё корпоративный шаблон, подозрительно напоминает список чужих преимуществ.
Все заняты полезным делом, особенно конкурент, который фактически руководит вашей разработкой, не выплачивая ей зарплату. Получается вполне литературная история: вы, как Алиса у Красной королевы, бежите всё быстрее, чтобы оставаться на месте, только здесь за бег ещё выставляют счета.
В этой условной сцене покупатель вполне может быть прав: отсутствующая функция ему действительно нужна, а цена действительно не соответствует продукту. Но прежде чем исправлять всё по очереди, полезно выяснить, почему именно эти признаки стали главными. Кто объяснил клиенту, что хороший сервис обязательно должен содержать сорок модулей? Почему современность инфраструктуры определяется способом её размещения? И с какого момента лучший автомобиль — тот, который первым доезжает до следующего красного светофора?
Мы привыкли обсуждать качество аргументов: достаточно ли убедительно написано, хватает ли доказательств, не добавить ли ещё один график. Между тем часть конкурентной борьбы происходит раньше — в тот момент, когда определяется, на какой вопрос все эти аргументы вообще должны отвечать.
Читать далееВероятно вам приходилось принимать участие в проектах, которые практически утратили способность быстро вносить изменения из-за огромного объема техдолга. Поначалу все идет гладко, но в какой-то момент стоимость сопровождения проекта начинает расти экспоненциально и команда замечает это слишком поздно, когда выпуск релизов в срок уже становится сложной задачей.
Агентская разработка сильно снизила стоимость поддержки уже написанного кода и одновременно дала инструмент для быстрого написания нового. Но кто нам обещал, что эта стоимость так и будет оставаться небольшой?
Читать далееВ KiCad нет штатной поддержки многоплатных проектов, хотя в одном устройстве могут соседствовать десятки плат сложной формы. На примере проекта из 22 плат автор показывает, как связать KiKit, FreeCAD и Python для подготовки и позиционирования STEP-моделей.
Разобрать процессЧтобы оптимизировать производительность больших языковых моделей (LLM), необходимо понимать весь программный стек. Мне не удалось найти подробную статью, которая показывала бы этот стек как общую картину, поэтому я решил написать такую статью сам. Эта статья не является исчерпывающим обзором или набором наилучших практик. Здесь я в большей степени делюсь моими общими представлениями о том, как выглядит ландшафт современных LLM‑систем.
Во‑первых, любая система проектируется с расчётом на достижение конкретных целей с учётом заданных ограничений. В LLM‑системах наиболее принципиальные цели связаны с увеличением пропускной способности и минимизацией задержек. Два этих показателя необходимо оптимизировать в рамках ограничений, задаваемых тремя принципиальными факторами: вычислительные (скорость аппаратных операций и поддерживаемые типы), память (ёмкость и иерархия) и коммуникация (ширина передачи данных в памяти и сети, задержка и иерархия). Эти концепции отлично рассмотрены в книге Scaling Book от Google, а именно в разделе Roofline.
Читать далееМой язык программирования HydraScript, написанный на C#, уже умел выполнять такой код:
let x = 10 x = x + 1 >>> x
Получаем 11; >>> — это оператор вывода. Присваивание работает, сложение работает. Захотелось добавить привычное сокращение:
let x = 10 x += 1 >>> x
Результат должен остаться тем же — 11. Зачем учить весь компилятор ещё одной операции, если всё необходимое у него уже есть? Можно прямо в парсере превратить x += 1 в дерево для x = x + 1.
Эта часть уместилась в несколько строк. Основная работа досталась методу Clone().
Читать далееСколько сервера уходит на одного игрока 2D MMO — вместе с существами, которых он будит вокруг себя? Показываю, как платформа считает расход живого мира ещё до установки игры: по онлайну, плотности существ и цене каждой механики, — и что из этого вышло на мире из 26 карт.
Читать далееPod'ы в Kubernetes появляются, исчезают и меняют IP. Разбираемся, как Service даёт приложению стабильную точку доступа, как работает ClusterIP, DNS, selectors, EndpointSlice и readiness - и как запрос в итоге попадает на конкретный Pod.
Читать далееНе война двух языков (хоть и бывает), не разные идиомы и взгляды на реализацию делают инструмент “плохим”, а по классике - забивание гвоздей молотком и карго-культ
Читать далееСегодня была волна блокировок некоторых IP-адресов на территории РФ. Узнайте подробнее ниже и проверьте свой IP-адрес на нарушения.
Примерно с декабря 2025г. для защиты рунета от угроз используют Active Probing: сканирование IPv4 адресов интернета для сбора информации о запущенных на них сервисах.
Примеры сервисов: веб-сервер NGINX, SSH сервер, ГOСT-VРN сервер.
При обнаружении запрещенных сервисов IP-адрес блокируется на территории РФ.
Точного списка запрещенных сервисов в открытом источнике нет, но самая частая причина блокировок IP-адресов в последнее время - средства потенциального oбхoдa блoкирoвoк.
Для проверки IP-адресов методом Active Probing можно использовать платформу Censys.
Как первый пример: https://platform.censys.io/hosts/89.167.91.206 - можно увидеть что IP-адрес относится к сети Hetzner, доменному имени 7-zip.net по DNS, запущен SSH сервер c портом 22, веб-сервер NGINX с портами 80 и 443, имя HTTPS сертификата = DNS имени (важно). Ничего подозрительного, IP-адрес в безопасности.
Как второй пример: https://platform.censys.io/hosts/212.192.4.104 - IP-адрес относится к сети DePowered, не имеет DNS имени, но на порте 443 имеется HTTPS сертификат с именами которые относятся к Yandex (признак сервера который притворяется яндексом), так же открыт веб сервер на порте 2096 (относится к известному ПО oбхoдa блoкирoвoк). Два красных флага - IP-адрес очень подозрителен и скорее всего будет заблокирован.
(Вместо яндекса часто встречаются apple, google, rutube и т.п.)
Проверьте IP-адрес вашего сервера на Censys и проанализируйте весь вывод, загуглите названия всех непонятных сервисов чтобы убедиться в их легальности и удалите всё запрещённое со своего сервера.
Для проверки IP-адреса на уже действующую блокировку можно использовать трассировку (traceroute/tracert/mtr/winmtr), как пример
заблокированный: 77.239.101.244
доступный: 77.239.101.243
Трассировка до заблокированного адреса обрывается в самом начале, не выходя из сети интернет провайдера. Сделайте сравнение на своей сети чтобы видеть разницу.
(Для проверки на доступность трассировке не обязательно доходить до самого конца, чаще всего достаточно выйти за пределы вашего интернет провайдера или РФ)
Делитесь статьёй с друзьями и если что-то непонятно или нужна помощь то пишите комментарии (но аккуратно).
Читать далееЗапустить контейнер — дело нескольких секунд. Но как только их количество начинает исчисляться сотнями и тысячами, начинаются сложности — их нужно размещать по узлам, распределять ресурсы, обновлять приложения, не нарушая их доступность, обеспечивать отказоустойчивость и следить, чтобы вся система работала стабильно. И очень быстро оказывается, что основная проблема уже не в самих контейнерах, а в инфраструктуре, на которой они работают.
В ответ на эти сложности появились сервисные модели, позволяющие снять с команд часть рутинных задач и операций. Одни из них полностью скрывают от пользователя серверы и механику оркестрации, оставляя только возможность передать образ и получить работающий сервис. Другие предоставляют готовый Kubernetes-кластер, избавляя от необходимости разворачивать и обслуживать его control plane, но сохраняя привычную модель работы через API Kubernetes.
На первый взгляд различие между ними не то чтобы огромное — и там, и там в итоге запускаются контейнеры. Но по факту это два разных подхода с разным уровнем контроля, гибкости и разделением зон ответственности. В этой статье разберем, чем Container as a Service отличается от Kubernetes as a Service и как выбрать более подходящую под ваши задачи модель.
Читать далееЧего же можно достичь от какой то "встройки" от АМД, так ли будет медленно? Будет полезно не только владельцам Ryzen AI Max, но и видеокарт от AMD. Статья созрела когда в очередные выходные все старые инструкции потеряли актуальность, пришлось перелопатить кучу форумов и провести много опытов.
В финале могу предоставить сравнения разных моделек с разным контекстом и сравнение с RTX 5060Ti 16GB.
Читать далееБольшая часть ниш в B2C обладает коротким циклом сделки и, согласитесь, отделу маркетинга гораздо удобнее отчитываться о результатах, когда продаж с рекламы не приходится долго ждать. Потратили деньги, получили продажи, посчитали стоимость привлечения и выручку, оценили ROAS каждого канала. В B2B процесс выглядит совсем иначе.
В некоторых бизнесах цикл сделки может занимать три или четыре месяца. А в некоторых еще дольше. И получается следующая картина: рекламную кампанию в новом канале запустили в сентябре, потратили бюджет, получили лиды, провели квалификацию. В октябре только-только вывели эти лиды на первую встречу. К ноябрю половина из тех, кто был на встрече, просит подождать из-за долгого согласования бюджета. И вот в декабре происходит долгожданное закрытие сделок. При этом фаундер просит отчет по эффективности нового канала уже в октябре, а финансовый отчет компании строится по календарным месяцам.
Сопоставляя в соседних колонках расходы за сентябрь с выручкой за сентябрь, мы не сможем сделать правильные выводы, потому что выручка сентября была сгенерирована за счет лидов, привлеченных, например, в июле, а окупаемость маркетинговых инвестиций сентября мы увидим сильно позже. Но отказаться от отчетности, заявив «увидим через три месяца», тоже нельзя. Поэтому на длинном цикле сделки появляются следующие вызовы: корректно оценить полученные результаты и спланировать инвестиции в рекламные каналы при условии их медленной окупаемости.
Месяц закрытия сделки мало говорит об эффективности маркетинга
Читать далееВ свежем отчете экспертов «Лаборатории Касперского» разбирается ранее неизвестное вредоносное ПО, получившее название MovieReaper. Его особенностью является распространение на популярных торрент-трекерах под видом фильмов, игр и другого контента. MovieReaper представляет собой модульный многоэтапный фреймворк, результатом работы которого стала компрометация сотен пользователей по всему миру.
Схема работы MovieReaper достаточно сложная и включает ряд контрмер против обнаружения защитным ПО. На начальном этапе пользователь вместо ожидаемого фильма получает файл с именем типа the odyssey (2026) [1080p] [webrip] [5.1].exe. Файл, как правило, имеет достаточно длинное имя и иконку популярного приложения, например видеоплеера VLC. При запуске вредоносной программы происходит связь с командным сервером для установки шелл-кода.
Читать далее