Обновить

Разработка

Сначала показывать
Порог рейтинга

По определенным обстоятельствам я не могу тупо дропать звонки от неизвестных. Но скаммерсанты достают. Что делать ? Все очень просто:

1) подождать пока отзвонит. 2 сек на звонок - тоже нехороший признак но не 100%.

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

2) номер телефона из пропущенных копипастом в ватсапп "+ создать новый контакт". если "этот номер телефона не зарегистрирован ... пригласить" то пошли они. в телеграме то же самое.

3) если мессенджер взял контакт, то стандартно: "Здравствуйте, от вас один пропущенный", если в ответ скам то бан и жалоба.

ps: мошонники и скаммерсанты, а также честные колл-центры ! не стесняйтесь регистрировать мессенджеры wa/tg на свои 1разовые sim-карты. вас ждет много удивительных приключений.

Теги:
Всего голосов 4: ↑0 и ↓4-4
Комментарии9

С момента запуска на платформе Lichess ИИ-бот Allie уже сыграл свыше 11 300 партий, из которых выиграл более 6 600. Бот доступен всем желающим, причём абсолютно бесплатно и с открытым исходным кодом. Попробовать его можно только в режиме блица, а также наблюдать за его партиями в реальном времени.

Шахматного бота Allie создал аспирант Карнеги-Меллона Йимин Чжан. В отличие от классических движков, Allie обучался не на просчётах позиций, а на 91 миллионе партий, сыгранных людьми. Поэтому его стиль максимально приближен к человеческому: он нападает, защищается и даже «задумывается» в критических моментах. Исследователи отмечают, что Allie демонстрирует уровень игры гроссмейстера, особенно в партиях против сильных соперников. Но главное — играть против него полезно: его ходы понятны, и обучение становится «естественным».

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Пройдите опрос и получите подарки от Selectel

Мы развиваем в Академии Selectel Security Center — спецпроект по информационной безопасности. Чтобы сделать его еще полезнее, нам важно знать, какие темы вам интересны.

Возможно, вы читаете новости об утечках? Или вас интересуют инструкции по защите инфраструктуры? А может, вы хотите узнать о новых угрозах? Расскажите об этом — пройдите короткий опрос.

С нас — подарки

15–21 сентября среди всех, кто поделится мнением, разыграем подарки:

— 10 сертификатов в крупный маркетплейс,

— 5 плюшевых Тирексов.

Пройти опрос ➡️

Теги:
Всего голосов 5: ↑5 и ↓0+9
Комментарии0

Делимся расписанием бесплатных вебинаров на следующую неделю:

🎬 19 августа в 16:00 (Мск) «Как ускорить работу с данными в 3 раза? Основы ДБТ за час» вебинар про DBT, его возможности, принципы работы и способы с его помощью сделать свою деятельность эффективнее.

🎬 21 августа в 16:00 (Мск) «От идеи до продакшена: какой Kafka-клиент упростит вам жизнь?» — практический вебинар: какие высокоуровневые клиенты Kafka выбрать для Spring Boot, .NET и NestJS. Разберём ключевые отличия, реальные примеры использования и лучшие практики.

🎬 22 августа в 18:00 (Мск) «Как LDA и ARTM могут изменить подход к анализу текстовых данных» — вебинар по тематическому моделированию с LDA и ARTM, примеры на Python и практические кейсы.

Увидимся на вебинарах!

Теги:
Рейтинг0
Комментарии0

Давно у нас не было игрушек на $mol...

Встречайте Гипер Шары! - ремейк классической игры Color Lines!

Не смотря на простые правила, она имеет не только тактическую, но и стратегическую глубину, что объясняет её залипательность и более 9000 клонов.

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

Ставьте её на домашний экран, и в минуты скуки помогайте этим разноцветным милашкам находить друг друга.

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Новая версия Gramax!

Приглашаем вас протестировать экспериментальные функции:

  • 💡  Статический сайт в облаке Gramax. Можно опубликовать свою документацию буквально за пару кликов, для этого не нужен сервер или хостинг. Достаточно нажать «Опубликовать в облако» и войти в почтовый аккаунт.

  • 💡  Фильтр по содержимому. В каталоге можно создавать статьи и абзацы для разных сборок. На портале для чтения они будут фильтроваться с помощью переключателя. 

  • 💡  Браузерная версия на мобильном. Браузерную версию Gramax можно использовать на мобильном телефоне. Доступны все действия, как при работе на компьютере.

А также:

  • 📌  Новая главная страница. Улучшили внешний вид главной страницы. Добавили возможность создавать вложенные группы.

  • 📌 Транскрипция речи с помощью ИИ. Если в пространстве включены ИИ-функции, редактор может автоматически транскрибировать аудиозаписи в текст.

  • 📌 Просмотр изменений после синхронизации. После синхронизации автоматически открывается окно сравнения ревизий: сравнивается новая версия каталога с версией до синхронизации.

Об этих и других изменениях читайте в Release Notes 🔥

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Жёсткая структура React-компонентов

При работе над React-приложениями я часто сталкиваюсь с тем, что мои коллеги смешивают в одном файле и JSX, и CSS-in-JS стили, и логику, и типы компонента. Работать с таким месивом очень сложно. Даже если настаивать на выделении логики, стилей и типов в отдельные файлы, это то делается, то нет. Для введения жёсткой структуры компонентов мною была написана простейшая библиотека react-component-structure.

https://github.com/sergeyshpadyrev/react-component-structure

Работает она простейшим образом. Любой компонент необходимо разделить на три хука и файл с типами:

-| Component
    -| index.ts
    -| logic.ts
    -| render.tsx
    -| style.ts
    -| types.ts

В файле logic.ts мы пишем хук useLogic - контроллер компонента, включающий в себя всю его бизнес-логику - все хуки useCallback, useEffect, useMemo и подобные. В этом хуке у нас есть доступ к props компонента.

import { useCallback, useState } from 'react';
import type { Props } from './types';

const useLogic = (props: Props) => {
    const [count, setCount] = useState(props.defaultCount);

    const onClickMinus = useCallback(() => setCount((c) => c - 1), []);
    const onClickPlus = useCallback(() => setCount((c) => c + 1), []);

    return {
        count,
        onClickMinus,
        onClickPlus,
    };
};

export default useLogic;

В файле styles.ts мы помещаем хук useStyle со стилями нашего компонента. Тут мы можем использовать inline-стили, CSS-in-JS или Tailwind. В этом хуке у нас есть доступ к props нашего компонента и к его контроллеру.

import type { Props } from './types';
import useLogic from './logic';
import { useMemo } from 'react';

const useStyle = (props: Props, logic: ReturnType<typeof useLogic>) =>
    useMemo(
        () => ({
            counter: {
                fontSize: logic.count + 10,
            },
            title: {
                color: props.color,
            },
        }),
        [logic.count, props.color],
    );

export default useStyle;

В файле render.tsx мы помещаем хук useRender с JSX, то бишь отображение компонента. В этом хуке у нас есть доступ и к props компонента, и к его контроллеру logic, и к стилям.

import type { Props } from './types';
import type useLogic from './logic';
import type useStyle from './style';

const useRender = (props: Props, logic: ReturnType<typeof useLogic>, style: ReturnType<typeof useStyle>) => {
    return (
        <div>
            <div style={style.title}>Hello {props.greeting}!</div>
            <div style={style.counter}>Count: {logic.count}</div>
            <div onClick={logic.onClickMinus}>Decrease</div>
            <div onClick={logic.onClickPlus}>Increase</div>
        </div>
    );
};

export default useRender;

В index.ts файле мы соединяем все три хука с помощью функции createComponent:

import { createComponent } from 'react-component-structure';

import useLogic from './logic';
import useRender from './render';
import useStyle from './style';

const Component = createComponent({ useLogic, useRender, useStyle });

export default Component;

И в файле types.ts мы объявляем тип для props компонента:

export interface Props {
    color: string;
    defaultCount: number;
    greeting: string;
}

Если у компонента нет props, то можно объявить их так:

export type Props = unknown

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

Если подход и библиотека вам понравились, поставьте репозиторию звезду на гитхабе. Надеюсь этот подход будет вам полезен.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии12

Просмотр кода в интерфейсе Amvera Cloud

Мы сделали возможность просмотра содержимого файлов репозитория в интерфейсе.

Раньше было сложно понять, какая версия файла загружена в облако. 

Теперь можно зайти в файл в разделе Репозиторий и посмотреть его содержимое.

Amvera – облако для простого запуска проектов со встроенным CI/CD (деплой идёт через Git или загрузку файлов в интерфейсе). C Amvera вам не нужно думать о настройке NGINX, виртуальных машин и другой инфраструктуры.

Теги:
Рейтинг0
Комментарии0

Qwen и "неподобающий контент" - сообщения, которые ломают чат

Наверняка не я один сталкивался при работе с Qwen, что в ответ на самое безобидное сообщение пользователя, вдруг выскакивает системное сообщение вместо ответа:

Упс! Возникла проблема подключения к Qwen2.5-Max. Предупреждение о безопасности контента: выходные данные текст могут содержать неподобающий контент!"

Выхода нет. Такие сообщения сыпятся на каждую вашу попытку что-то ввести в чат. Особенно обидно, когда чат длинный, контекст хорошо проработан и это заняло много времени. До жути обидно все терять и начинать сначала. Есть разные предложения, например, выгружать чат в JSON, вручную стирать там последнюю группу сообщений до возникновения этой ошибки и загружать исправленный JSON обратно в Qwen в новый чат. Так себе занятие, я считаю. Но если выхода простого нет, можно попробовать.

Если ошибка постоянна и появляется в ответ на любое ваше сообщение, то явно что-то сломалось внутри логики обработки данного конкретного чата. И я подумал, а что если сломать ее еще раз? перешел в веб-разработку, сгенерил абсолютно левый лендинг. Кнопкой вернуться обратно в нормальный чат не получилось, не активна.

Тогда я спросил "как вернуться обратно в нормальный чат?" Ответ: "никак. но мы можем продолжить здесь". Я спросил, что он помнит из предыдущих 5 сообщений нормального чата - помнит все! И мы продолжили решать настоящую нужную мне задачу находясь в режиме веб-разработки, но именно так, как в обычном чате.

Возможно, кому то поможет мой опыт и не придется терять хорошо проработанный чат.

Спасибо, что прочитали.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Гендиректор OpenAI Сэм Альтман признал, что на фондовом рынке вокруг ИИ образовался финансовый пузырь с небольшими стартапами, который может скоро лопнуть.

На вопрос о том, не чересчур ли много энтузиазма инвесторы проявляют к технологии, Альтман ответил: «По моему мнению, да».

Гендиректор OpenAI сравнил реакцию рынка на ИИ с пузырём доткомов в 1990-х, который лопнул в 2000 году и привёл к краху интернет‑стартапов с раздутыми оценками. «Когда образуются пузыри, умные люди становятся крайне эмоциональны из‑за крупицы правды. Если посмотреть на большинство пузырей прошлого, например технологический пузырь, у него была реальная основа. Технологии действительно были важны. Интернет был настоящим прорывом. Люди стали слишком эмоциональны», — отметил Альтман.

Глава OpenAI считает «безумным» то, что некоторые ИИ‑стартапы «с тремя людьми и одной идеей» получают финансирование при баснословных оценках. «Это не рациональное поведение. Думаю, кто‑то обожжётся», — сказал глава OpenAI.

За последний год стартапы нескольких экс‑топов OpenAI — Safe Superintelligence Ильи Суцкевера и Thinking Machines Миры Мурати — получили миллиарды долларов инвестиций. «Кто‑то потеряет феноменальные суммы денег. Мы не знаем, кто это будет, но многие люди заработают феноменальное количество денег. Могу ошибаться, но мне кажется, что в целом экономика от этого сильно выиграет», — сказал Альтман. Он уверен, что OpenAI в любом случае переживёт пузырь.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

Unit-тесты во фронтенде: развеиваем мифы

После статьи о навыках джуниоров многие не согласились с моей оценкой unit-тестов. Давайте посмотрим, где они действительно полезны, а где создают иллюзию ценности.

Если вы начинающий разработчик, вас наверняка убеждали:
«Без unit-тестов никуда! Всё должно быть покрыто тестами!»
Но так ли это на самом деле?

Где unit-тесты полезны:

  • Бизнес-логика и утилиты (форматирование данных, расчёты)

  • Кастомные хуки (управление состоянием, формы)

  • Критичные функции (редкий зверь во фронтенде)

Где они бесполезны (и даже вредны):

  • UI-компоненты (скриншотные тесты часто ломаются из-за изменений вёрстки)

  • API с моками (моки не показывают реальное поведение сервера)

  • Тестирование библиотек (проверяете чужой код)

Что использовать вместо?

  1. Интеграционные тесты — проверяют реальные сценарии

  2. Zod для валидации API — предотвращает ошибки из-за неожиданных данных

  3. Ручные проверки — быстрее и точнее, чем скриншотные тесты

Для джуниора unit-тесты — не приоритет. Важнее:

  • Глубокое изучение фреймворка

  • Умение работать с API

  • Навык чтения и отладки кода

Не стоит тратить время на «тесты ради тестов». Сосредоточьтесь на том, что действительно поможет в работе.

Теги:
Рейтинг0
Комментарии0

Переход 1С на PostgreSQL и прогнозы до 2031 года

Ни для кого не секрет, что клиент‑серверный вариант 1С изначально затачивался под MS SQL. Вспоминаю год 2017-й и точно помню, что в тот момент Postgres ставили в основном те компании, которые хотели сэкономить. Плевались, но использовали. Чуть более или менее серьезная нагрузка — и всё.

Помню, как мы для «Управления IT‑отделом 8» написали расчет SLA по графикам техподдержки. На файловой базе и в MS SQL все работало прекрасно. Выпустили обновление, но один клиент на Postgres начал жаловаться. Долго выясняли, в чем дело. В конечном итоге я подключился к нему на тестовый сервер, прошелся отладчиком и… бинго! Действительно наша ошибка: не указали сортировку в одном из вложенных запросов. На файловой и на MS SQL такой запрос, повторю, работал отлично. Postgres в этом деле оказался строже — сказано в документации, что выборка не гарантирует порядок? Будьте добры предусмотрите это.

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

Если коротко, то вот главные грабли, на которые наступают при миграции 1С на PostgreSQL:

Проблема № 1: Деградация производительности. Миграция «в лоб» почти всегда приводит к проблемам с блокировками и работой планировщика запросов. Приходится переписывать код и оптимизировать его под PostgreSQL. Возможно, даже менять что‑то в самой платформе.

Проблема № 2: Кадры. Найти опытного DBA по Postgres, который глубоко понимает специфику 1С, значительно сложнее и дороже. С MS SQL всё было проще: установил, клик, клик — готово. Даже без тонких настроек многое работало «из коробки».

Ну и самое главное: миграция — это не просто смена СУБД. Это полноценный проект, требующий тестирования, переписывания узких мест в коде и, возможно, обучения команды. Экономия на лицензиях может быть полностью съедена затратами на внедрение и поддержку (да и не сказал бы, что тот же Postgres Pro дешевый).

А теперь о том, почему этот разговор вообще имеет смысл.

Раньше мы всегда советовали клиентам MS SQL как надежную и проверенную СУБД. Да, в 2015-м появился платный Postgres Pro, но, честно сказать, мы его всерьез не рассматривали. Зачем, если есть деньги на проверенный MS SQL? А если хотелось сэкономить — был бесплатный Postgres со всеми его тогдашними особенностями.

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

Это не просто ощущения, это подтверждают цифры из исследования ЦСР.

Уже в 2024 году на новые продажи зарубежного ПО пришлось всего ~10% рынка. Прогноз до 2031 года следующий: российские решения для работы с базами данных могут занять до 99% новых продаж (!) Процесс импортозамещения будет идти, а если мы берем 1С, то тут в выигрыше PostgreSQL/Postgres Pro. Причины понятны: уход западных вендоров, требования регуляторов и развитие отечественных продуктов.

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

У меня вопрос. Планируете переход на PostgreSQL или, как и мы, пока живете на старом софте?

‑-

Понравилась эта аналитика? В моем блоге Код ИТ‑директора я гораздо чаще делюсь мыслями, короткими кейсами и полезными инструментами, которые не всегда доходят до формата большой статьи.

Теги:
Всего голосов 3: ↑1 и ↓2-1
Комментарии2

Вебинар "От кода до запуска: российский стек для Java — Axiom JDK и OpenIDE"

Приглашаем на вебинар, посвященный безопасному стеку базовых технологий для разработки и исполнения Java-приложений и безопасной среде разработке OpenIDE. Вы поймете, что такое OpenIDE, как это всё относится к Intellij IDEA, зачем OpenIDE бизнесу и какие у проекта OpenIDE планы на будущее.

Кому будет полезен вебинар:
• тимлидам
• разработчикам
• DevOps

Вебинар проведут:
• Дмитрий Сапожников, технологический консультант Axiom JDK
• Илья Сазонов, директор по продуктам Axiom JDK, направления Spring и OpenIDE

Когда: 21 августа 2025 г.

Во сколько: 11:00–12:30 по мск

Формат: Онлайн

Участие: Бесплатное (нужно предварительно зарегистрироваться)

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Ближайшие события

Прошиваем CH32V003 с помощью платы Arduino

Задался вопросом, а можно ли сделать программатор из подручных средств для CH32V003 на экстренный случай? Или это еще может пригодится тем, у кого его еще нет.

Оказывается можно и способов не один, но я расскажу обо одном. Другие пока еще не пробовал. Решил написать эту заметку, т.к. в рунете ничего не нашел, пусть будет.

В проекте ch32fun есть программа minichlink, так вот она умеет прошивать WCH микроконтроллеры с помощью разных программаторов, например, b003boot, ardulink, esp32s2chfun. Нас интересует программатор ardulink.

Код программатора Ardulink можно взять из arduino-ch32v003-swio. На гитхабе есть обертка его для PlatformIO, кому как удобнее. Он написан под atmega328p, поэтому спокойно запускается на Arduino Nano. Подсоединяем провод от D8 (PB0) ножки Ардуино к SWIO (например, восьмая ножка у CH32V003J4M6), питание к питанию, земля к земле. Всего 3 провода. (Ножку D9 (PB1) так и не понял к чему подключать, но про нее есть в Readme.)

Дальше выполняем команды:

minichlink.exe -c COM3 -i этой командой можно проверить определяется ли микроконтроллер, где COM3 номер порта платы Ардуино, которую используем как программатор.

minichlink.exe -c COM3 -w .\firmware.bin flash -b а этой командой можно залить файл прошивки, где firmware.bin сам файл.

Пока у меня не получилось подключить такой программатор напрямую к PlatformIO, только получилось работать из командой строки, но при желании это сделать можно.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

GPT-5 Pro думала 69 минут, чтобы просто ответить «Нет». Пользователь спросил у ИИ, сможет ли он установить CUDA на Linux Ubuntu. Нейронка задумалась на час с лишним, чтобы ответить: «Нет, не сможешь». Самое печальное — ответ оказался неправильный.

Теги:
Всего голосов 9: ↑8 и ↓1+9
Комментарии12

Представлен открытый проект Open Lovable, который клонирует любые сайты за один клик. Не надо учить дизайн и разметку — система генерит любые лендинги и сайты. Работает просто — получает URL и выдаёт результат. Можно контролировать стили и редактировать проект прямо на ходу — достаточно вписывать команды в чат с нейросетью. Сервис полностью клонирует ресурсы — от дизайна и разметки до бизнес-логики и всего функционала. Внутри — самые хайповые и мощные нейронки прямо сейчас — GPT-5, Claude 4.1, Grok 4 или Gemini 2.5 Pro. Код Open Lovable лежит тут. В вебе доступен — здесь.

Теги:
Рейтинг0
Комментарии0

Митап Python-разработчиков в Новосибирске

Всем привет! С недавних пор я заметил что в НСК маловато таких открытых IT митапов. И я решил исправить это. Я и еще несколько людей организовываем сообщество "PythoNSK". Встречи некоммерческие, бесплатные. Ближайшая планируется 13 сентября - в день программиста.

По плану у нас две-три лекции, викторина, общение, а также онлайн встреча с CPython Core Developer'ом Никитой Соболевым.

Нам нужны люди! Проект бесплатный и общественный, мы собираем народ.

Если вы из Новосибирска - заходите в наш чат. Мы ждем каждого, чтобы вместе развивать сообщество программистов в Новосибирске!

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

Теги:
Всего голосов 6: ↑6 и ↓0+7
Комментарии1

ИБ-ДАЙДЖЕСТ INFOWATCH

Больше миллиона человек пострадали от утечки данных лабораторий для диализа компании DaVita — скомпрометированы ПДн, финансовая и медицинская информация.

Хакеры завладели ПДн участников Венецианского кинофестиваля, но его представители утверждают, что это не повлияет на работу мероприятия этого года.

Сеть онкологических клиник Highlands Oncology Group призналась в утечке ПДн более 113 тыс. пациентов — они могут добиться компенсации, подав коллективный иск.

Авиакомпании KLM и Air France сообщили об утечке данных пассажиров, произошедшей на стороне их внешнего партнера.

У рентгенологической компании Northwest Radiologists злоумышленники украли ПДн около 350 тыс. пациентов из штата Вашингтон.

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

Теги:
Рейтинг0
Комментарии0

Попросил GPT5 написать скрипт для приложения 3ds max, который сможет информировать об потенциальных угрозах в 3d-сцене программы. После нескольких часов возни и исправлений, скрипт заработал и отлично показал себя в деле, обнаружив в сцене имитационный вредоносный код.

Кто из специалистов может посмотреть этот код? Будет от него реальная польза или это бесполезная пустышка?

По словам ИИ, MaxScript по синтаксису напоминает смесь JavaScript + Pascal, с динамической типизацией.

/*
   MaxScript Exorcist 3.1 (fixed - helpers moved to top-level)
   - Исправлена ошибка "No outer local variable references permitted here"
   - Вспомогательные функции вынесены на верхний уровень
   - Проверка папки с .ms/.mcr/.mse
   - Расширенное сканирование сцены (все свойства, контроллеры, материалы, XRef)
   - ⚡ Подсветка найденных потенциально опасных токенов
   - Авторы: Юра и GPT5-mini
*/

-- ===== GLOBAL PATTERNS =====
global patterns
patterns = #(
    "shell",
    "cmd\.exe",
    "CreateProcess",
    "WinExec",
    "system\s*\(",
    "Process\.Start",
    "ProcessStartInfo",
    "DotNet\.loadAssembly",
    "LoadAssembly",
    "LoadLibrary",
    "ImportDLL",
    "dll",
    "WriteLine\s*\(",
    "Write\s*\(",
    "DeleteFile\s*\(",
    "removeFile",
    "renameFile",
    "copyFile",
    "RunScript",
    "Execute",
    "openFile",
    "fileStream",
    "StartProcess",
    "Run",
    "ShellExecute",
    "regsvr32",
    "CreateObject",
    "WScript",
    "ActiveXObject"
)

-- ===== Helper: read ASCII strings from binary .mse =====
fn readBinaryStrings filePath =
(
    local strings = #()
    try
    (
        local f = openFile filePath mode:"rb"
        local buf = ""
        while not eof f do
        (
            local b = readByte f
            if b >= 32 and b <= 126 then buf += (bit.intAsChar b)
            else
            (
                if buf.count >= 4 then append strings buf
                buf = ""
            )
        )
        if buf.count >= 4 then append strings buf
        close f
    )
    catch()
    return strings
)

-- ===== Helper: scan files in folder (text and .mse) =====
fn scanFilesInFolder folderPath =
(
    local suspicious = #()
    local files = getFiles (folderPath + "\\*.ms*")
    if files.count == 0 then
    (
        format "No .ms/.mcr/.mse files found in %\n" folderPath
        return suspicious
    )

    for f in files do
    (
        local isText = true
        local content = ""
        try
        (
            if matchPattern f pattern:"*.mse" then
            (
                local lines = readBinaryStrings f
                for l in lines do
                    for p in patterns do
                        -- сравниваем в нижнем регистре для устойчивости
                        if findString (toLower l) (toLower p) != undefined then append suspicious #(f, p)
                isText = false
            )
            else
            (
                local fh = openFile f mode:"r"
                while not eof fh do content += readLine fh + "\n"
                close fh
            )
        )
        catch
        (
            isText = false
            append suspicious #(f, "<binary or unreadable>")
        )

        if isText then
            for p in patterns do if findString (toLower content) (toLower p) != undefined then append suspicious #(f, p)
    )

    return suspicious
)

-- ===== Helper: recursive scan of an object (uses global 'patterns') =====
fn scanObjectRecursively obj =
(
    local findings = #()
    try
    (
        -- Все свойства объекта (без аварий при чтении)
        local propNames = #()
        try ( propNames = getPropNames obj ) catch()
        for p in propNames do
        (
            try
            (
                local val = getProperty obj p
                if classOf val == String then
                (
                    for pattern in patterns do
                        if matchPattern val pattern pattern:"regex" then append findings #(obj.name, p, pattern)
Теги:
Рейтинг0
Комментарии3

Это же шутка, да? Ведь, да?(С)падме.джпг

https://www.securitylab.ru/blog/personal/Bitshield/355756.php

Самое серьёзное обвинение связано с подозрением, что MAX передаёт пользовательские данные на зарубежные серверы. Автор Telegram-канала Scamshot утверждает, что с последним обновлением мессенджер получил полный доступ к буферу обмена смартфона и начал собирать информацию обо всех установленных приложениях, после чего эти данные якобы отправляются за пределы России.

Особенно иронично выглядит тот факт, что мессенджер, позиционируемый как «полностью отечественный», использует библиотеки из «недружественных стран». В коде MAX обнаружили украинскую библиотеку uCrop от компании Yalantis, а также компоненты из США и Польши. Критики язвительно называют это «безопасным национальным мессенджером с утечкой данных непосредственно в днепровские офисы».

Теги:
Всего голосов 5: ↑4 и ↓1+4
Комментарии3