vak: (Бодхидхарма)
Serge Vakulenko ([personal profile] vak) wrote2025-11-02 11:07 pm

Китайцы шпионят через пылесосы

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

Умный пылесос был удалённо заблокирован из-за отсутствия сбора данных.

Инженер заинтересовался работой своего умного пылесоса iLife A11 и начал отслеживать сетевой трафик, исходящий от устройства. Тогда он заметил, что тот постоянно отправляет производителю журналы и данные телеметрии, на что он не давал своего согласия. Пользователь, Харишанкар, решил заблокировать IP-адреса серверов телеметрии в своей сети, оставив прошивку и серверы OTA открытыми. Его умный гаджет работал какое-то время, но вскоре перестал включаться. После долгого расследования он обнаружил, что устройству была выдана команда на удалённое отключение.

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

Поскольку A11 был умным устройством, он был оснащен чипсетом AllWinner A33 с операционной системой TinaLinux, а также микроконтроллером GD32F103 для управления множеством датчиков, включая лидар, гироскопы и энкодеры. Он подключил разъёмы к печатной плате и написал скрипты на Python для управления ими с помощью компьютера, с целью индивидуальной проверки каждого компонента и выявления неисправностей. Затем он собрал джойстик на Raspberry Pi для ручного управления пылесосом, доказав, что с оборудованием всё в порядке.



После этого он изучил его программное обеспечение и операционную систему, и именно здесь он обнаружил мрачную правду: его умный пылесос был кошмаром безопасности и чёрной дырой для его личных данных. Прежде всего, Android Debug Bridge, предоставляющий ему полный root-доступ к пылесосу, не был защищён никаким паролем или шифрованием. Производитель добавил импровизированный протокол безопасности, убрав важный файл, из-за чего пылесос отключался вскоре после загрузки, но Харишанкар легко обошёл его. Затем он обнаружил, что пылесос использует Google Cartographer для построения трёхмерной карты его дома в режиме реального времени.

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



Итак, почему A11 работал в сервисном центре, но отказывался работать дома? Техники переустанавливали прошивку умного пылесоса, удаляя код отключения, а затем подключали его к открытой сети, восстанавливая нормальную работу. Но как только он снова подключался к сети, в которой были заблокированы серверы телеметрии, он удалённо блокировался, поскольку не мог связаться с серверами производителя. Поскольку он заблокировал сбор данных устройства, производитель решил просто полностью отключить его. «Кто-то — или что-то — удалённо дал команду на отключение», — говорит Харишанкар. «Будь то намеренное наказание или автоматическое принуждение к «соблюдению правил», результат был один и тот же: потребительское устройство напало на своего владельца».

К сожалению, многие другие бренды умных пылесосов используют похожее оборудование, поэтому неудивительно, что у них та же схема. Это, вероятно, особенно актуально для более дешёвых устройств с менее мощным оборудованием и без поддержки периферийных вычислений, а значит, им придётся отправлять данные на какой-то удалённый сервер для обработки. Но поскольку ваша информация переносится на другое устройство, находящееся вне вашего контроля, вы на самом деле не имеете ни малейшего представления о том, что с ней происходит, предоставляя производителю полную свободу действий в использовании ее по своему усмотрению.
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-02 09:56 am

Алгоритмы сравнения файлов

Чем отличается алгоритм Котлера от алгоритма Хекеля? Вот статья, которая всё объясняет.

https://github.com/sergev/ifcomp/blob/main/Theory.md
vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-11-01 12:28 pm

ifcomp

Приходится ли вам сравнивать файлы? Риторический вопрос: очевидно, приходится. Я лично команду "git diff" выдаю тысячу раз за день. Всем классический diff хорош, кроме одного: не различает перестановку фрагмента. Показывает только удаления и вставки. Если же часть текста переехала в другое место, diff учитывает его дважды: и как удаление, и как вставку.

Для некоторых применений такое не годится. Представьте, что вы хранитель коллекции ценных документов. И вдруг с одним файлом что-то случилось. Стандартный diff говорит, что всё пропало, документ полностью испорчен. А просто строки перемешались, ничего на самом деле не потеряно. Надо только порядок восстановить. В эпоху перфокарт такое сплошь и рядом происходило, когда колоду рассыпали и собрали впопыхах. Или кто-то решил навести порядок и переставил главы в тексте.

45 лет назад мой коллега Рид Котлер сделал утилиту сравнения файлов: "Text File Comparator". Трудился он тогда молодым студентом на компанию Intermetrics по контракту NASA. Сохранилось упоминание на странице 117 журнала NASA Tech Briefs Winter 1982 Vol. 7, No. 2: https://ntrs.nasa.gov/api/citations/20100028127/downloads/20100028127.pdf

Программа сравнивает два файла и выводит список их различий.

Программа сравнения файлов IFCOMP — это сравнение текстовых файлов для систем, совместимых с IBM OS/VS. IFCOMP принимает на вход два текстовых файла и выводит список их различий в форме псевдообновления. Все различия представлены в виде строк, которые следует удалить, заменить, вставить или переместить в первом входном файле для преобразования его во второй входной файл. Также выводится сводка с указанием количества строк, затронутых каждым типом изменений.

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

Программа IFCOMP написана на языке XPL (расширенный язык PLI, для которого поставляются исполняемые файлы компилятора) для пакетного выполнения и была реализована на компьютере IBM серии 370 с объёмом центральной памяти около 46 КБ 8-битных байт. IFCOMP была разработана в 1979 году.

Эта программа была написана Ридом С. Котлером из Intermetrics, Inc. для Космического центра имени Джонсона. Для получения дополнительной информации обведите кружком S на карточке запроса COSMIC.
Алгоритм подробно описан в статье: "A Technique for Isolating Differences Between Files", Paul Heckel 1978. 

Исходники на языке XPL утеряны, увы. Но сохранился вариант, переписанный Томом Пенелло на Си. Его я и решил поковырять. С ним Рид мне прислал четыре теста, и они работали. Но на некоторых других файлах программа выдавала внутреннюю ошибку или циклилась. Ошибка там неочевидная.

Я подумал: хороший случай применить ИИ для отладки. Интересно, как неестественный ум справится, скажем Cursor или Cline. Получился увлекательный сеанс. 😀

В целом программирование с помощью современного AI-агента напоминает походовую стратегическую игру. Если помните первую Empire, ещё в текстовом виде. Из неё потом выросла Civilization. Здесь нечто похожее, только без карты и в диалоге. Стратегически плодите и размещаете юнит тесты, и постепенно боретесь за расширение функционала и покрытия.

Благо, ИИ агент теперь удобно встроен в VS Code. Работает с файлами прямо в вашем локальном git-репозитории. Или даже прямо на Гитхабе, вам решать. Компилирует, запускает, пишет документацию, находит причины ошибок посредством юнит тестов, чинит, и по новому кругу. Вы внимательно наблюдаете за "сражением" и адресно вмешиваетесь в критические моменты.

Первый "подход к штанге" мы с Курсором продули. 😀 Для начала насоздавали несколько десятков юнит тестов, из которых больше половины не проходили. Хорошо, значит покрытие приемлемое. После этого несколько часов бились все эти тесты пройти. Курсор кромсал код без жалости. Объём Си-шных текстов увеличился вдвое, но справиться с глюками не удавалось. Стало понятно, что зашли в тупик.

Второй подход я распланировал иначе. Сначала переписываем всё с Си на Си++, чтобы уменьшить базовую сложность кода. Вместо доморощенных строк и примитивного выделения памяти переходим на стандартные строки и контейнеры из библиотеки Си++. После этого начинаем покрывать юнит тестами и отлаживать размеренно, по стадиям. Благо алгоритм имеет чёткое разделение на восемь проходов: от pass1() до pass8().

Главная бага обнаружилась на стадии pass6(). При слиянии двух блоков криво обновлялось дерево. Но проявлялся глюк только на уровне pass8(). Тесты уровней pass6 и pass7 багу не ловили. Курсор пытался "чинить" сначала уровень pass8, потом догадывался вернуться и сделать что-то с pass7, и даже заглядывал с сомнением в pass6, но тут его чутья не хватало. Как только я догадался скомандовать создать юнит тест, воспроизводящий нужную багу на уровне pass6, дело пошло на лад. Починка остального была уже делом техники.

Все исходники здесь: github.com/sergev/ifcomp
izard: (Default)
izard ([personal profile] izard) wrote2025-11-01 07:19 pm

When a “C” in math mean the same as “A”

Looking back at my own education, I realize I never really understood what grades meant.
In school I always had straight A’s in math - through my 'math/physics magnet middle/high school' and the early university years. Then, near the end of my undergraduate studies and into graduate level, the abstraction level finally outran me. What once felt easy became a fog of symbols and proofs I could barely follow. My grades dropped from A’s to barely passing.

Now my son is in middle school, facing math tests that seem simple compared with what I used to do, and yet he usualy brings home B’s and C’s. At first I was worried he was struggling. But after thinking about how math actually builds from one layer to the next, I began to see grades differently.
Math is cumulative: arithmetic => fractions => basic algebra => trigonometry => calculus => abstract algebra and other abstract branches.
To pass any stage, even with a C, a student must already handle the lower levels - fractions, negative numbers, operations, with near-A competence. In that sense, every “passing” grade is built on a pyramid of earlier mastery. A C in algebra implies solid command of arithmetic; otherwise the algebra would collapse.
And mathematics is abstract all the way down. Even counting natural numbers is an act of abstraction - something crows and primates can do. As we climb the ladder, the required abstraction doesn’t suddenly appear; it grows, from trivial symbolic mapping to ever more demanding mental models. And eventually each person reaches their ceiling - the point where abstraction exceeds what their working memory and reasoning capacity can handle.

This leads to what I see as a two-axis model of learning math. One axis is vertical, measuring mastery of the current/latest subject - the top of the stack of skills built layer by layer. The other is horizontal, measuring the mind’s abstraction capacity - how far one can extend that structure before it becomes too complex to hold. Grades only measure the first axis. The second one, which defines how far a person can ultimately go, remains totally invisible.
Piaget hinted at this when describing the “formal operational” stage — the onset of abstract reasoning — but reality is more continuous. The ability to handle higher abstraction isn’t a stage that suddenly starts; it’s a spectrum that stretches through life, unevenly across individuals.

And here lies the problem: all education systems remain centred on test scores that capture only the vertical axis. It rewards fluency and accuracy but ignores the horizontal reach of abstraction that truly defines mathematical potential. Until education finds a way to see and nurture that dimension, grades will continue to tell only half the story, and I would argue not the most important one.
vak: (Кризис так себе)
Serge Vakulenko ([personal profile] vak) wrote2025-11-01 11:19 am
Entry tags:

Сколько ядрёных бомб, говоришь?

Затеяли Трамп и Си крутизной меряться.

«Сколько у тебя ядрёных бомб?» - спрашивает Си.

«Да я! Да у меня! Еще с холодной войны столько запасено!» - Трамп называет цифру.

«И сколько из них взорвутся? Всё протухло давно.»

Трамп срочно побежал проводить подземные испытания.

https://www.dw.com/ru/tramp-prikazal-nemedlenno-vozobnovit-ispytania-adernogo-oruzia/a-74549506
juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2025-11-01 12:25 pm
Entry tags:

и ещё фотки

Макдональдз в Нанси


Нанси. Повернёшь направо...


Читаем сказки


Troyes, центр города. Кривые дорожки.


В храме Св.Петра в Труа.






Шампанское в Шампани


Разливанное море шампанского.
vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2025-11-01 10:38 am

Новое в московском быте

Вот поймал в кадр работников Росавтодора, которые заправляют бензином переносной генератор, питающий светофоры на пешеходном переходе через Широкую улицу. Что-то уже месяц как светофоры работают по такой временной схеме.

рабочий момент

А вот утки на берегу Чермянки. Почему-то они не плавают в речке, а толпятся на суше на высоком бережку

ути-ути

X-Post to LJ

ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-31 06:40 pm
vitus_wagner: My photo 2005 (Default)
vitus_wagner ([personal profile] vitus_wagner) wrote2025-10-31 04:11 pm
Entry tags:

Граф Толстой.

Задал поисковой машине вопрос "граф Толстой". Результат (в duckduckgo) меня крайне удивил. Почему-то первой ссылкой оказалась статья про Федора Толстого-Американца. Да, я нежно люблю этого персонажа, но всё же. То же самое выдал bing (что неудивительно, duckduckgo по умолчанию ищет в bing). Google и Yandex выдали все-таки более известного Льва Николаевича.

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

Конечно "Красный граф", Алексей Николаевич заслуживал бы на мой взгляд второго места по этому запросу. Именно потому что графский титул как-то выделял его из прочих советских писателей. В отличие от Льва Николаевича и Алексея Константиновича, современникам котороых было в общем непринципиально, какой конкретно титул носит древний и достойный род Толстых - графский, княжеский или герцогский. Важно то что они выходцы из некоего знатного титулованного рода. Одного из.

vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-10-30 08:53 pm

v-edit фунциклирует

Дополировал я текстовый редактор, теперь уже и показать не жалко. Получился красивый код на Си++, и даже кое-как покрытый тестами. Не стыдно людям показать. Не знаю зачем оно может пригодиться, но ещё одна ностальгическая тема закрыта. 😀

github.com/sergev/v-edit

Внутри всё устроено ровно как в древнем Rand Editor. Редактируемые файлы не зачитываются целиком в память. Вместо этого строится компактный список сегментов, облегчающих подчитывание строк файлов по мере необходимости. Изменения в изначальные файлы не вносятся. Модифицированные строки записываются в отдельный временный файл. И только по команде записи в файл происходят перемены. Изначальный редактируемый файл foo переименовывается в бэкап foo~, а в новый foo записываются все строки по порядку, как изменённые (из временного файла), так и прежние (из старого файла). Таким образом обеспечивается устойчивость к сбоям: в любой момент, что бы ни случилось с компьютером, на диске имеется как минимум одна правильная копия файла.

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

Cursor в прошлые выходные глючил нещадно. Я даже разочаровался и переключился на Cline с горя. Это такой плагин для VS Code, от claude.ai. Он тоже приемлемо работает. Но вчера Cursor выкатил новую версию 2.0, я поставил и порадовался. Ничего не глючит, и кодит заметно умнее, чем Cline. Отличный инструмент.
ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-30 10:54 pm

(no subject)

Hacker MemesHacker Memes wrote the following post Fri, 27 Oct 2023 17:34:46 +0300
Halloween NAND gates 🎃 Trick OR Treat: Complete Double Venn Trick AND Treat: Intersection of Venn only Trick XOR Treat: Complete Venn excluding the intersection Trick NOR Treat: Everything outside the Venn Trick NOR Treat: Everything excluding the Venn <br />intersection Trick XNOR Treat: Venn intersection and everything outside Original author credits: t/@38mo1


Source:https://twinkle.lol/item/36653431-47a0-4743-a463-37263173e47c
izard: (Default)
izard ([personal profile] izard) wrote2025-10-30 08:09 pm
Entry tags:

Full circle

I was in middle school in the late 80s and early 90s, in a small town in the Soviet Union. Our school had a computer lab - a real rarity back then. In a class of about thirty, three kids had a PC at home. By sixth grade, those few could type, and the rest learned slowly at school.

Twenty years later, in the mid-2000s, things were completely different. In most countries, almost every family had a computer. Even poor families could afford an old PCs and were buying them "for kid's education". Children grew up clicking, typing, chatting, coding. It felt like the world became more digital and advanced.

Now it’s 2025. My son is in sixth grade at a Bavarian Gymnasium - a demanding, high-performing school. You’d expect every child there to be digitally fluent. But when I asked, he said only three kids in his class of thirty have a real computer, same experience as mine. But there is a difference: the rest have phones and tablets. And Jacob is the only one who can actually type pretty fast.

It feels like we’ve looped back to where it all started - a few kids at the keyboard, most just watching. Except this time, it’s not because computers are rare or expensive. It’s because no one thinks they’re needed anymore :(
ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-30 12:07 pm

(no subject)

BACALLOWEENBACALLOWEEN wrote the following post Tue, 24 Dec 2024 10:08:17 +0200
The periodic table of the elements coded in a four color key and titled "Can I lick it?&quot; Green element - Sure, it's probably fine Yellow element - Maybe not a good idea Red element - You really shouldn't Purple element - Please reconsider Green: <br />H, He, B, C, N, O, Ne, Mg, Al, Si, S, Ar, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, Kr, Y, Zr, Nb, Mo, Ru, Rh, Pd, Ag, In, Sn, Xe, La, Hf, Ta, W, Re, Ir, Pt, Au, Bi, Ce, Pr, Nd, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu Yellow: Li, P, Se, Sb, Te, <br />Os, Pb, Th, U Red: Be, F, Na, Cl, K, As, Br, Rb, Sr, Tc, Cd, I, Cs, Ba, Hg, Tl, Pm Purple: Po, At, Rn, Fr, Ra, Ac, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn, Nh, Fl, Mc, Lv, Ts, Og, Pa, Np, Pu, Am, Cm, Bk, Cf, Es, Fm, Md, No, Lr
[profile] bruces Can I lick it?
Alt text:


Source:https://twinkle.lol/item/402e93df-71bc-4707-832e-6aea7aac838c
ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-29 09:02 pm

(no subject)

В голанге продолжают пошатывать GC.

🔗 https://go.dev/blog/greenteagc

Source:https://twinkle.lol/item/19c06a75-d02d-48dd-aa57-1fdc81284f13
ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-29 06:55 pm
ufm: (Default)
ufm ([personal profile] ufm) wrote2025-10-29 05:27 pm

(no subject)

link (t)wink :neocat_flag_bi:link (t)wink :neocat_flag_bi: wrote the following post Wed, 29 Oct 2025 12:19:29 +0200
YouTube is taking down videos on performing nonstandard Windows 11 installs Videos from several creators have been taken down on topics including how to install Windows 11 without logging into a Microsoft account and how to install Windows 11 on <br />unsupported hardware. CyberCPU Tech reports: *two YouTube links*
lmaoooooooooooo


Source:https://twinkle.lol/item/9685ae44-4051-41a8-ac73-40e12044414c
avva: (Default)
avva ([personal profile] avva) wrote2025-10-29 04:41 pm

решения задач

Обещанные решения задач из "Кванта":

1. Четыре полоски положить вдоль краев квадрата 10x10, так что каждая закрывает одну из сторон целиком, кроме одной клетки. Потом оставшийся внутри квадрат 8x8 покрыть восемью вертикальными паралленьными полосками 1x9, так, что они поочередно касаются верхнего/нижнего края большого квадрата.

Можно доказать, что это единственное решение, кроме очевидных вариаций (вертикальные/горизонтальные полоски, поочередность выступов, порядок покрытия четырьмя крайними). Вот идеа доказательства, без подробностей. Сначала доказываем, что по краям должны лежать четыре полоски. Потом, что клетка, покрытая двумя полосками, должна быть на краю (если это не так, найдем диагонального соседа, полоска через которого обязана нарушить правила). Отсюда следует, что внутренний квадрат 8x8 покрыт параллельными полосками.

2. Есть несколько красивых решений, мне особенно нравится предложенное юзером migmit в ЖЖ. В первый раз Малыш ест только варенье, поэтому можно заменить его на пол-Карлсона, во второй раз он ест только торт, можно заменить его на треть Карлсона. В первый раз 1.5 Карлсона съели все за два часа, т.е. один съел бы за три, во второй 4/3 Карлсона съели то же самое, т.е. время заняло 3/4 от трех часов. Ответ 2 часа 15 минут.

Я решил в уме следующим образом. Можно предположить, что Карлсон ест торт за час, тогда к концу этого часа осталось столько варенья, что Малыш и еще два Малыша (Карлсон) съели его тоже за час, так что один Малыш съел бы за три. Значит, за первый час Малыш съел 1/4 варенья, а все варенье съедает за четыре часа. Значит, Карлсон за два часа, и во второй раз первые два часа уходят на это, и Малыш тем временем съедает 2/3 торта (весь торт за 3 часа). Оставшуюся треть едят четыре Малыша, обычно бы ее съели за час, управляются в четыре раза быстрее - за 15 минут.

3. Красивое решение опирается на то, что KH в два раза меньше AC, т.е. AK+HC = KH. Следовательно, если мы от K отложим тот же отрезок, что до A, но право, а от H до C, но влево, придем в одну и ту же точку O. Из равнобедренности треугольников следует OM = AM = BC = BO, и теперь легко расставить все углы при точках A,M,O,C в этом порядке.

"В лоб" тригонометрией я ее решил так. Можно взять ΑΚ=1, а коэффициент подобия треугольников AMK и ABH = x. Тогда MK=tan(22), BH=x*tan(22), AH=x, KH=x-1, AC=2(x-1), HC = AC-AH, и теперь можно выразить квадраты AM и BC двумя применениями теоремы Пифагора, приравнять и получить квадратное уравнение от x.

4. Если апельсины и яблоки стоят 3 монеты каждый, а груша 1 монету, то легко видеть, что каждый обмен снижает стоимость на 1 монету, а вначале у лисы 210 монет. В самом конце после последнего обмена она остается не с 0, а как минимум с 2 монетами (две груши), так что максимум, на который можно надеяться - 208 обменов. Это можно достигнуть разными способами. Я поискал вручную, как сохранить одинаковое кол-во фруктов. Если правила по порядку назвать 1,2,3, то семь обменов: "1,2,3" "2" "1,2,3" снижают все фрукты на 1. Это можно сделать 29 раз, а на тридцатом только первые пять из семи.