• Как правильно расшифровать данные из изображения в c#?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Нашел много недочетов, но главная ошибка здесь:
    char charToEncode = textToEncrypt[charIndex++];
    
                        byte[] colorBytes = new byte[] { originalColor.R, originalColor.G, originalColor.B };
                        for (int i = 0; i < 3; i++)
                        {
                            int bitIndex = (bitsPerChannel * i); 
                            if (bitIndex < 8)
                            {
                                colorBytes[i] = (byte)((colorBytes[i] & ~1) | ((charToEncode >> bitIndex) & 1));
                            }
                        }


    Я так полагаю, что символы сообщения кодируются в LSB, но проблема здесь в том, что кодируются только последние 3 бита - остальное (8 - 3 = 5 битов теряются). Т.е. сообщение восстановить никак

    + Сам цикл выглядит очень странно.
    Главный вопрос - зачем?
    Параметризовать алгоритм стеганографии подобным образом не очень оптимально, т.к. каждый создается с использованием тех или иных фич, который строго захардкожены и используют особенности конкретного формата. Цикл + проверка здесь только ухудшают понимание кода (ИМХО)
    Убери этот цикл, т.к. во-первых, станет понятнее, во-вторых, условие внутри при этой константе всегда выполняется.

    Теперь про декодирование:
    for (int i = 0; i < 3; i++)
                    {
                        int bitIndex = (bitsPerChannel * i);
                        if (bitIndex < 8)
                        {
                            charCode |= (byte)((encodedColor.ToArgb() >> bitIndex) & 1);
                            if (bitIndex <= 2)
                            {
                                charCode <<= bitsPerChannel;
                            }
                        }
                    }

    Вот этот участок тоже неправильно работает, т.к. ты кодируешь символы в LSB, а читаешь последние 3 бита - из них только 1 бит содержит данные.
    Ответ написан
    Комментировать
  • Как создать процедуру, которая будет возвращать что-то?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Процедуры, в отличие от функций, не возвращают значение; поэтому в CREATE PROCEDURE отсутствует предложение RETURNS. Однако процедуры могут выдавать данные в вызывающий код через выходные параметры.

    https://postgrespro.ru/docs/postgresql/16/xproc (имеются в виду SQL-процедуры)

    Для возврата значений из PL/pgSQL процедуры используются OUT и INOUT параметры.

    https://postgrespro.ru/docs/postgresql/16/plpgsql-... (пример имеется)
    Ответ написан
    Комментировать
  • Как создать процедуру, которая будет возвращать что-то?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вам нужно начать с туториала и примеров, а не с тупых статей в интернете и собственных догадок.
    Просто возьмите учебник и потратьте некоторое время на изучение самых базовых основ. Если вам лень этим заниматься. то почему вы думаете, что людям тут будет не лень сочинять вам индивидуальные экспресс-курсы по изучению основ баз данных?
    Ответ написан
    Комментировать
  • Зачем комментарии на сайте оборачивать в тег article?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    его рекомендуют оборачивать тегом article
    Тут нужно дать ссылку на эту рекомендацию, чтобы мы могли её оценить не на уровне "Рабинович по телефону напел".

    его можно использовать в любом другом месте, а как использовать комментарий на другом сайте
    Когда говорят об использовании "в любом месте", подразумевают "любое место данного сайта". И в рамках сайта комментарий действительно может быть оторван от условного рецепта: например, в профиле пользователя может выводиться список всех его комментариев (как здесь) или в сайдбаре может выводиться список всех последних комментариев (как на vc.ru).

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

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

    TLDR: Не хотите - не оборачивайте, не случится ровным счётом ничего. Это всего лишь рекомендация и примеры в них для семантических тегов иногда притянуты за уши, потому что эти теги в большинстве своём не решали какие-то реальные проблемы, а были введены для красоты, которая у каждого своя.
    Ответ написан
    7 комментариев
  • Автоматическая генерация классов на основе других классов?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для C# это можно сделать 2 путями (без учета ручного создания):
    - Source Generators
    - Генерация IL кода (динамическая сборка)

    Лично я за 1 вариант, т.к. он будет быстрее в рантайме (все уже скомпилировано).
    Ответ написан
    2 комментария
  • Почему gRPC подменяет исключения?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    А откуда другой сервис знает, какие КЛАССЫ/ОБЪЕКТЫ есть в другом сервисе?
    Если нужно кидать такое-же исключение на сервисе клиенте, то нужно это исключение там и создать.

    А вообще, для своих типов исключений необходимо использовать GRPC_STATUS_UNKNOWN. В документации так и написано:
    Server threw an exception (or did something other than returning a status code to terminate the RPC)


    Решение только одно - в каждом сервисе писать свои обработчики таких исключений и свои классы исключений
    Ответ написан
    2 комментария
  • Какая формула xpath будет переходить с главной страницы по условию(названию анкора) и находить заданные данные?

    ThunderCat
    @ThunderCat Куратор тега HTML
    {PHP, MySql, HTML, JS, CSS} developer
    xpath сам никуда не переходит. Это инструмент поиска по нодам внутри уже полученного хтмл/хмл, а не инструмент запросов.
    Ответ написан
    Комментировать
  • Как максимально быстро кликнуть на элемент в браузере?

    kawabanga
    @kawabanga
    vadimeasy,
    КРЫСА она) Это ответ.
    Представь, что разница в 70 лидов стоят условные 1К за лид.
    За откат в 30-50% она может и начальника обработать и группу разработчиков.

    Т.е. на ее аккаунт может заявка сразу уходить, если она проходит по параметрам (Жирная заявка). А вы пытаетесь найти способ вытащить несуществующие лиды из системы. В этом и проблема.

    Вы можете даже проверить, если ваш скрипт работает, и в среднем будет у всех 30 лидов, а у вас допустим 45, а у этой коллеги так же 100 - это будет означать как минимум то, что ваш скрипт работает. И дело тут не в скорости скрипта.

    Ответ 2
    Появление кнопки - это следствие.
    Ищите событие, которое его запускает, там либо соединение с сокетом, и вам надо будет внедриться в функцию сокета, либо в ajax проверку. Так вы сможете ускорить получение ответа.
    +
    Пинг до сервера проверяйте. 20-30мс разницы - уже громадная.
    Ответ написан
    1 комментарий
  • Почему возникает ошибка Fatal error. System.Runtime.InteropServices.SEHException?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Проблема в том, что библиотека бросила исключение. В ней какая-то ошибка. Это не проблема сборки или компиляции - это проблема в логике. Что-то вы не то библиотеке передаете. И там, допустим, деление на ноль. Или обращение по нулевому указателю.

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

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

    Судя по сигнатурам функции, возможно вы пустой массив туда передаете вместо чего то осмысленного.
    Ответ написан
    7 комментариев
  • Как максимально быстро кликнуть на элемент в браузере?

    Попробуй для начала в тупую в бесконечном цикле пытаться находить эту кнопку при помощи
    document.querySelector()
    document.querySelectorAll()
    и нажимать, если нашлась.
    Ответ написан
    4 комментария
  • Как реализовать роутинг между элементами внутри модального окна?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    1. Роутинг внутри модалки: Можно использовать библиотеку react-router-dom даже внутри модального окна для обеспечения роутинга между различными экранами.

    Создайте отдельный <Switch> внутри модалки:
    <Modal>
        <Switch>
            <Route path="/modal/presets" component={Presets} />
            <Route path="/modal/edit/:id" component={EditPhrase} />
            <Route path="/modal/create" component={CreatePhrase} />
            <Route path="/modal/delete/:id" component={DeletePhrase} />
            {/* ... */}
        </Switch>
    </Modal>


    2. Компоненты экранов: Разделите разные экраны модалки на отдельные компоненты. Это позволит упростить их управление и сделать код более читаемым.

    3. Состояние: Вместо того чтобы использовать сложную систему контекстов, можно просто использовать локальное состояние (useState) или глобальное состояние (например, с помощью redux или mobx), в зависимости от ваших потребностей.

    4. Хуки: Избегайте избыточного использования useMemo, useCallback и прочих, если нет явных причин для оптимизации. Часто избыточное использование этих хуков только усложняет код и на самом деле может замедлить приложение.

    Псевдокод:

    Основной компонент модалки:
    function ModalComponent() {
        return (
            <Modal>
                <Switch>
                    <Route path="/modal/presets" component={Presets} />
                    <Route path="/modal/edit/:id" component={EditPhrase} />
                    <Route path="/modal/create" component={CreatePhrase} />
                    <Route path="/modal/delete/:id" component={DeletePhrase} />
                    {/* ... */}
                </Switch>
            </Modal>
        );
    }


    Компонент пресетов:
    function Presets() {
        const phrases = ... // получите фразы
    
        return (
            <div>
                {phrases.map(phrase => (
                    <div key={phrase.id}>
                        {phrase.text}
                        <Link to={`/modal/edit/${phrase.id}`}>Редактировать</Link>
                    </div>
                ))}
                <Link to="/modal/create">Создать новую фразу</Link>
            </div>
        );
    }


    Этот пример очень общий, но я надеюсь, что он даст вам представление о том, как можно структурировать ваш код. Если что-то кажется запутанным или избыточным, вероятно, так оно и есть
    Ответ написан
    Комментировать
  • Как пофиксить ошибку c++?

    vabka
    @vabka
    Токсичный шарпист
    Не пытаться устанавливать MySqlConnector.
    Это библиотека, которая предназначена для .NET, а не для нативных плюсов.

    Чтобы ей воспользоваться, тебе нужно сменить тип проекта на "C++/CLI ", но если тебе хочется C++/CLI, то лучше совсем переходи на C#.

    Если хочешь оставаться на C++, то тогда тебе следует поискать другие библиотеки для взаимодействия с mysql.

    PS: а если это новый проект, то лучше бери postgresql, а не mysql
    Ответ написан
    5 комментариев
  • Почему Version of PostgreSQL not supported, если версии компонентов последние?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    phpPgAdmin History
    ------------------
    Version 7.13.0
    --------------
    Released: November 7th, 2020
    Features:
    * Add support for Postgres 13
    * Add provisional support for Postgres 14
    Ответ написан
    1 комментарий
  • Как исправить ошибку при подключении библиотеки?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    but the server responded with a MIME type of "text/html".

    Сервер отдает html. Скорее всего 404. => неверный путь к файлу => Смотрите в консоли что запрашивается и что отдается.
    Ответ написан
    Комментировать
  • Как сделать фиксированную высоту сайта?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    В таких вопросах хорошо показывать код, а не скриншоты, но в общем случае если нам нужно вписать что-то очень большое на фон и сделать так, чтобы оно вылезало за края экрана, но не вызывало скролла нигде, то этой большой штуке делается контейнер с overflow: hidden. Внутри контейнера она может вылезать куда угодно, это уже не будет влиять на размер страницы в целом.
    Ответ написан
    3 комментария
  • Поиск-замена в html?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Вот так: https://codepen.io/yarkovaleksei/pen/NWJbYrL?edito...

    <div id="coub">
    <div class="coub" onmouseover="showName(this);">
    <a href="//coub.com/view/eeuyn" onclick="return frame(this);">
    <img src="https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_image/f42a9c98bfd/f876723cdbb307c191e94/1472200578_00031.jpg"></a>
    <span>Watch on the road! #jimdrives</span></div>
    
    <div class="coub" onmouseover="showName(this);">
    <a href="//coub.com/view/2q1t7k" onclick="return frame(this);">
    <img src="https://3fc4ed44-3fbc-419a-97a1-a29742511391.selcdn.net/coub_storage/coub/simple/cw_image/27475bd9033/6a9fb30fb888702736ce6/%{version}_1615659518_00032.jpg"></a>
    <span>Everyone!</span></div>
    </div>


    const images = Array.from(document.querySelectorAll('img'));
    
    images.forEach((image) => {
      let src = image.getAttribute('src');
      
      src = src.replace('%{version}', 'small');
      
      image.setAttribute('src', src);
    });
    Ответ написан
    1 комментарий
  • Как ограничить количество запросов на сервер при создании поисковика?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Не то, чтобы ответ, но идея ответа. И если чо непонятно - могу в каментах поуточнять.
    Со стороны тыла (на C#) можно ограничить число параллельных запросов в целом к сервису безо всяких там плагинов, а саморучно сделанным велосипедом: семафором (например, SemaphoreSlim, как самым модным в этом сезоне). Либо сделать его статическим, либо (чтобы веру в IoC свято блюсти и модульные тесты делать) - запихнув в Singleton-сервис с теми же свойствами/методами, что и у семафора используются, и получать этот сервис через конструктор (передавать через DI - в бою, напрямую - в тесте).
    Для семафора(сервиса) устанавливаете максимальное число параллельно выполняемых запросов в качестве начального значения. При входе в обработчик захватываете семафор (Wait/WaitAsync, таймаут - по вкусу), при выходе (лучше - в блоке finally того try, который начинается после захвата семафора) - освобождаете (Release).
    Таймаут выставляете в зависимости от поведения фронта: какие у него у самого таймауты на запрос (в том числе - на повторение) и как он реагирует на задержку ответа и на всякие разные коды статуса HTTP в ответе. В целом, стратегии тут две. Первая - пытаться захватывать семафор с коротким таймаутом и в случае неудачи - возвращать другой код статуса, кроме ОК, чтобы сказать фронту, что он не прав. Вторая - тормозить лишние запросы таймаутами. Кароче, без знания вашего фронтового плагина тут точно не скажешь, а я его знать не знаю и знать не хочу.
    Ответ написан
    Комментировать
  • Почему C# не кроссплатформенный?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист

    Почему C# не кроссплатформенный?

    На этот вопрос нельзя ответить сразу по двум причинам:
    1. C# - это язык, а язык не может быть кросс-платформенным, так как платформы в разрезе языка и нет.
    2. .NET уже много лет как кросс-платформенный.
    Начиная с уже мейнстримного .NET 8, заканчивая mono и всякой экзотикой типа nano framework


    но при этом, это не так

    Ничто нельзя запустить на "чём угодно"


    но в неё вопрос кроссплатформенности решена абсолютно полностью

    Если вопрос "абсолютно полностью" решён, то почему я не могу запускать программы, написанные на Java, на любом железе?
    Ответ написан
    Комментировать
  • Насколько опасно использование конструктора Function?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    И конструктор Function, и eval, в теории позволяют без каких-либо проверок выполнить код, который мы не контролируем. Мы не можем проверить его на этапе разработки и не можем быть уверенными, что у пользователя будет выполняться именно он. Он прилетает откуда-то. И весь вопрос в доверии к источнику. Если кто-то (пользователи, контент-редакторы, или кто там еще может быть) может влиять на то, что прилетит - возникает простор для потенциальных атак на пользователей системы. Кто-то что-то куда-то написал, скопипастил, а потом это что-то у пользователя выполнилось. И кто знает, что оно с данными пользователя сделает. Тут каждый оценивает риски сам, но в общем случае выполнять непроверенный код действительно не рекомендуется.

    В вашем случае скорее всего можно поделить формулы на части. Сделать отдельно число-масштаб, отдельно число-смещение. В вопросах фоматирования данных обычно есть разнообразие значений коэффициентов в формулах, но при этом мало различных смыслов этих самых коэффициентов. Так что именно отдельная формула на каждый чих обычно не нужна, нужны просто разные числа.
    Ответ написан
    6 комментариев
  • Насколько опасно использование конструктора Function?

    @alexalexes
    такой способ представляет угрозу для безопасности

    Потому, что если злоумышленник будет иметь возможность статично внедрять HTML-фрагменты в тело документа, не имея доступа к интерпретатору JS пользователя, то с помощью атрибута data-format-value он эту возможность получит напрямую, так как может вставлять любой код JS в этот атрибут, получая доступ к локальному хранилищу, кукам. Если по кукам он не угонит сессию пользователя, то хотя бы сможет составить его фингерпринт.
    Ответ написан
    7 комментариев