Telegram Web Link
https://github.com/TimonPost/cargo-dependency-inheritor - неплохая простая тулза для наведения порядка с зависимостями в воркспейсах.

Workspace dependencies появились в Rust больше года назад, но в старых воркспейсах зависимости из крейтов в общие волшебным образом конечно не переехали. Я месяцами смотрел на один свой воркспейс с 34 мемберами и думал наконец навести там порядок, а тулза справилась за пару секунд.

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

p.s. не всегда умеет работать с зависимостями по path. если падает - закомментировать, прогнать, раскомментировать.
🔥8👍3😁1💩1
Сегодня буду ругать каналы, и не только в Rust.

Каналы - они хорошо, когда вы пишете какое-нибудь приложение, которое что-то куда-то складывает. Запустил канальчик, с одной стороны вебсокет принимает, с другой в базу пишется. Забился канал - вебсокет подождет: "эй, на той стороне - обождите! в очередь, сукины дети"

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

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

Но это не значит, что в системах реального времени не бывает задач, для которых нужны каналы. А вдруг мы, допустим, пишем лог? Уже желательно канал. А вдруг у нас классический пример робота - vending machine. Нам совершенно наплевать, какие кнопки по выбору товара нажимал юзер, нам нужна последняя. При этом нам (а особенно юзеру) не наплевать, сколько и каких он закинул монет в приемник.

Такую задачу уже либо классически решаем через shared context, только упражняемся с математикой и задрачиваем jitter, чтоб не пропустить монетку. Либо скрещиваем ежа с ужом, там канал - тут контекст, а потом пытаемся во всем этом разобраться.

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

std::sync::mpsc я даже не рассматриваю, там не каналы а порнография для детей старшего дошкольного и младшего школьного возраста. Возьмем crossbeam. Или async_channel. Или любой другой популярный, уважаемый крейт.

Ни в одном нет для отправителя force send. Нет возможности очистить канал, если получатель затупил. Нет возможности пушнуть в полный канал, чтобы последнее значение оттуда вывалилось.

Чтобы сделать такую элементарную операцию, нам нужно идти через жопу - иметь под рукой клон receiver'а и вычистить его самостоятельно. Других вариантов у нас не имеется.
👍18🔥6👎2
https://www.bohemia-automation.com/events/cyberscotlandweek-2024/

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

Как и картинки из Heavy IE.
👍13
На плате читаются SATA M2 но не читаются NVMe.

Как думаете, кто виноват? Я бы сам не поверил, но виноват блок питания.
👍10😁10🔥2💩2
Помнится рассказывал, как я купил по случаю Toughbook CF-19.

У меня MK7, который выпускался с довольно неплохим железом на борту (USB3, отличная поддержка SATA SSD, в машине уже стоял 2TB). При этом имеется VGA, аппаратный serial, rj12 под модем и даже Firewire 400.

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

Мне достался армейский экземпляр. Из особенностей - отсутствует веб-камера и встроенный микрофон (при этом есть разъемы как под отдельный микрофон, так и под 3.5mm гарнитуру со встроенным). Учитывая, сколько спайвари сейчас сыпят прямо из коробки, скоро чувствую перейду на такой и в повседневной жизни.

Еще из особенностей - Panasonic комплектует практически все toughbooks режимом concealed mode, который можно активировать в BIOS. Если опция включена, по Fn+F8 вырубается wifi+bluetooth, звук, а монитор переходит на пониженную яркость или выключается вообще. Всё сделано добротно и аппаратно и никакими софтварными хитростями устройствам из режима не выйти, причем после reboot/shutdown машина помнит, в каком режиме вы находились. Что именно и как выключать - настраивается там же в BIOS.

Из особенностей работы под Linux:

- Иногда (редко) ALSA психует, что система загружалась в "скрытном" режиме и отказывается играть звук после выхода. Решается походом в sleep и обратно.
- Тачскрин работает прекрасно. что компенсирует отвратительный тачпад панасоников.
- На боку находятся 6 дополнительных кнопок, которые используют в планшетном режиме. Под Linux они из коробки не работают - это отдельная мини-клава, которая висит на i2c. Можно поставить дополнительный софт от умельцев.
👍16🔥10
Сегодня на CSW обсуждали пароли, вспомнил две истории

История первая, короткая

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

История вторая, подлиннее

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

Клиенту объяснили, что мы задолбаемся строить хеши для каждой пары букв и предложили построить 4-5 вариантов, типа "первая и третья, вторая и пятая". Клиент сказал, что мы лохи и он обратится к специалистам. И таки обратился.

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

Специалисты поработали отлично. Как всегда.
😁72🔥8👍5
Задолбался я искать на свой Toughbook настройки тачскрина, которые бы эмулировали правый клик по лонг-тачу (там что-то не wacom-совместимое), поэтому накидал по-быстрому своё.

https://github.com/divi255/x-right-touch

Должно работать на любых тачскринах вообще. Под Wayland не уверен, но это вопрос к автору крейта rdev, когда он там допилит свою абстракцию

Логика тупая, как я в 3 часа ночи:

- на низком уровне иксы видят нажатие по экрану как mouse click, но если это незнакомый тачскрин, то без определенной кнопки в принципе

- в X11::listen ивент трансформируется уже в LeftButton, что запускает хендлер гестуры, который через указанное время сэмулирует клик RightButton

- второй тред слушает тачпады и мыши через libinput и если LeftButton нажата физически, гестура абортируется

- также гестура абортируется, если курсор слишком далеко ездил от начальной точки (значит у юзера dragging)

p.s. интересный опыт, под голые иксы еще на расте не писал
👍16🔥3
СЕО Nvidia заявил, что программирование умерло. ИИ заменит всех.

p.s. тем временем GPT4 отупел и почему-то разучился писать простые проц макросы.
😁44👍4
GPT действительно изменился. Если раньше он писал код, то теперь даёт пару примеров и требует чтобы ты все сам сделал по аналогии. Классика

- Вася, возвращайся, нам программист нужен
- Вы же GPT купили
- GPT уже ПМ, а нам программист нужен
😁65👍3
Записи моих вебинаров с последнего CyberScotland Week

https://www.youtube.com/playlist?list=PLC4R6pMal63rY8eMgJ8Q8bZ0kj4DKyEQV
👍13🔥5
Чем больше работаю, тем меньше понимаю Computer Science, хотя имею по ней даже диплом.

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

- есть два треда, один бегает с priority HIGH, другой с LOW
- LOW забрал Mutex и что-то там под ним пилит
- HIGH добежал до Mutex и вынужден ждать LOW

Я за свою карьеру пожалуй не встречал варианта, чтобы нельзя было быстро вытащить данные из-под Mutex и это бы привело к каким-то серьезным последствиям. Даже если у вас толстый объект, клонирование Arc даже на современном ембеде занимает порядка 5-10 наносекунд (специально когда-то мерял). А архитектуру всегда можно подпилить так, чтобы исключить любые коллизии по этому поводу.

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

Я помню ту историю. Разработчики очень гордятся, что марсоход не потерял ни байта данных, потому что они все сразу флушались на диски. А вот догадаться флушать куда-то текущую очередь команд почему-то никто не додумался - ну ладно там, окно с Землей раз в пару дней, прилетит новая, какие проблемы. Тогда нечего и ныть. Вообще в любой промышленной системе better crash+reboot than freeze - это правильно, это они молодцы. Только остальное подкачало.

Тем не менее, наука не стоит на месте и сейчас применяются два варианта, чтобы победить "ужасную проблему": priority ceiling и priority inheritance. Чтобы не описывать долго оба, скажу что они примерно одинаковы по результату - тот блок кода, который лазит под Mutex, получает high priority, либо сразу (в ceiling), либо когда HIGH-тред дополз и встал (в inheritance).

Просто вытащить данные из-под Mutex никто, видимо, даже не собирается. Clone - не наши методы, наши методы зато - костыли, говно и палки.
🔥17👍6💩2
Ни один студент не смог мне объяснить, зачем ему знать теорему Пифагора. Если он конечно не слесарь и не пилит треугольные держаки на полки.

Это примерно уровень преподавания всего, в первую очередь основ математики. А потом люди лезут в лотереи, МММ, берут микро-займы, не понимают как работает НДС и почему, если ты потерял 20%, а потом отыграл 20% назад - то ты в минусах.

Зато знают сумму квадратов катетов.

p.s. Преподавание на абстрактных вещах - лучший способ привить ненависть к предмету до конца жизни.
👍44👎10😁6🔥5
Просто с шестью пальцами проще рисовать.

Зато смотрите сколько лайков.
😁56👍2🔥1
Это я только на презах хвалю комьюнити, а так совсем наоборот. Например, на гитхабе стало больше дебилов. Намного больше, чем было раньше.

Раньше дебильный PR было видно сразу - он был дебильно оформлен с самого начала. Теперь дебилы научились открывать PR'ы, которые выглядят вполне прилично, но обязательно что-то ломают.

Поэтому обкладывайтесь тестами еще больше. Времена лихие.
😁26👍12🔥2
https://github.com/casey/just - хорошая замена make, RIIR, кому не хватает cargo. Синтаксис в целом совместим, кроме переменных, а так дает много дополнительного.

Пользуюсь уже пару месяцев, рекомендую.
👍12🔥4
Наконец дошли руки сделать себе кастомный GPT под кодинг. Наконец оно не болтает, пока не спросят.

GPT здорового асоциального человека.

https://chat.openai.com/share/f23dce39-ca1d-4390-9030-83c5cfbc33ef
👍15🔥2😁1
Раз уж начал, немного обозрю, что предлагают OpenAI в плане кастомизации.

Варианта два - либо вы делаете кастомного чатбота, тогда ваши клиенты должны покупать подписку на GPT4, либо берете API и делаете т.н. "агентов". Это коммерчески разные продукты и бюджет, само собой, раздельный.

Оба варианта дают примерно следующее:

- загрузить инструкции
- загрузить knowledge base

Агент дает возможность самому выбрать модель и немного поиграть с её настройками.

А теперь критика:

- Инструкция - это по сути статик-prefix промпта, который будет добавляться автоматом в начале сессии. Инструкция должна быть четкой и ясной и сделать универсального бота для разных тем примерно не получится - он не умеет четкий IF-ELSE-MATCH и будет постоянно нести отсебятину.

- То же самое относительно knowledge base. Либо бот начинает общение с поиска в KB, либо несет то, чего понабирался в интернете. Можно указать некоторые правила, но если не хотите рандома - указывать четко, сначала KB, потом остальное. В такой стратегии тоже есть свой минус - бот может отказаться отвечать вообще, если в KB этого нет.

- ИИ революция немного задерживается - боты страшно тупят. У нас традиционно, еще со времен первых Pandas, минуты в API-параметрах указываются как "T" (5T = 5 минут). Не смотря на то что в KB это теперь написано для дебилов (читай - для GPT) прямо возле каждого API-метода, бот всё равно пытается ставить "m" или "M" или что угодно, а "T" ставит только после того как ему сделали замечание. Это нормально для бота общего назначения, но если это "корпоративный" бот - клиенты ждут от него немного другого.

- Инструкции агентов похоже давно сломаны и всем плевать. Одинокие выкрики на форумах "бот не понимает инструкции" давятся суппортом "давайте более четкие". Я пробовал инструкции из одного приложения - нормально не работают. В чат-версии всё нормально. При том что агент жрет бабки, как 6-литровый гелик бензин.

- KB в PDF - специальная олимпиада. Если не хотите всяких "&1234#;" в ответах, давайте ему только тексты и картинки. Про PDF лучше забыть.

В общем, покопавшись внутри OpenAI, можно уверенно сказать, что это компания с неплохой моделью, но отвратительной, глючной и дорогой обвеской.
👍9🔥5😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Взял второго джуна. На удивление мне понравился.

GPT пишет общую задачу, а копилотом добиваем мелочи.
😁14🔥8👍4
Я доучил английский до С1, а техдоки мне теперь пишут GPT и Copilot. ЕЯЛ.

Скоро они за меня еще на ивентах выступать будут. А потом и зарплату получать начнут.
😁33👍7🔥1
На удивление с этим всем ИИ я стал более социален и более грамотно начал раздавать задания подчиненным.

Потому что привык объяснять как для ИИ. Кричать на ИИ тем более бесполезно. Он только глупо извиняется.
👍28😁21
2025/07/09 15:47:30
Back to Top
HTML Embed Code: