• Зачем использовать кучу если есть стек? а так же где применяются указатели и ссылки?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Проблема стека в том, что там лежат только локальные данные, которые исчезнут вместе с выходом из функции. Кроме того, обычно размер всех переменных на стеке известен во время компиляции. Некоторые языки умеют выделять на стеке массивы переменной длины, но даже не все C++ компиляторы так умеют. В самом стандарте языка c++ - таких масивов нет. Поэтому стек часто не подходит.

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

    Т.е. если вам нужны данные доступные вне какой-то функции, да еще их точный размер и/или количество неизвестно на этапе компиляции - вам нужно что-то кроме стека и глобальных переменных. Это и есть куча.
    Ответ написан
    4 комментария
  • Почему экраны имеют разрешения не кратны степени 2? Почему 1080, а 1024, если вместо умножения на 1080, можно сдвинуть 10 байт?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Типа так сложно сделать 76 лишних пикселей?

    Производители дисплеев не производят отдельные дисплеи, это невыгодно.
    Вместо этого они оперируют понятием mother glass:
    mother-glass.jpg
    И уже эта стеклянная подложка нарезается на отдельные экраны, которые необходимы заказчику.

    Размеры "материнского стекла" более-менее стандартизированы в зависимости от поколения. Известны их размеры и диагональ (примерно от 50 см до 5 м).

    Это позволяет в т.ч. и заказчику расчитать сколько нужных ему дисплеев поместится на одном листе и подогнать размеры так, чтобы из одной большой матрицы получить максимум готовых изделий, минимизировав "обрезки".
    Ответ написан
    Комментировать
  • Размещать ли связанный сайт на поддомене, как QNA Habr?

    opium
    @opium
    Просто люблю качественно работать
    Зависит от вашего сеоплана, от него и надо толкаться
    Тостер один из самых грешных примеров так как он был и в директории основного сайта и на отдельном домене и теперь на субдомене, это называется горе от ума, тостеру понятное дело только плохо и до какого нибудь стековерфлоу ему надо набрать популярность в тысячи раз
    Ответ написан
    1 комментарий
  • Как настроить сервер для отладки вебхуков (webhooks) на локальной машине??

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Сбилдить .NET приложение в докере.
    2. Развернуть докер контейнер на сервере.
    3. Развернуть nginx (тоже можно в контейнере) на сервере.
    4. Настроить nginx, который будет проксировать трафик в п2:
    4.1. Запретить все.
    4.2. Разрешить :80 и :443 порты.
    4.3. Пробросить с п4.2 на внешний порт контейнера п2.
    4.4. Настроить SSL Let's Encrypt (при необходимости).

    По сути, можно взять любое руководство настройки докера и nginx, без привязки к .NET.

    UPD на основе данных из комментариев, конфиги будут выглядеть примерно так, dockerfile (поправить под свое приложение):
    # Образ asp.net.
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    # Компилируем приложение из /src.
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    
    # Копируем файл проекта и восстанавливаем зависимости.
    COPY ["Project.csproj", "."]
    RUN dotnet restore
    
    # Копируем оставшиеся файлы и компилируем приложение.
    COPY . .
    RUN dotnet build -c Release -o /app/build
    
    # Публикуем приложение.
    FROM build AS publish
    RUN dotnet publish -c Release -o /app/publish
    
    # Создание итогового образа.
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "App.dll"]

    nginx (поправить под свое приложение):
    # http.
    server {
        listen 80;
        listen [::]:80;
        # Домены для обслуживания.
        server_name domain.ru www.domain.ru;
    
        # 301 редирект http->https.
        return 301 https://$host$request_uri;
    }
    
    # https.
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        # Домены для обслуживания.
        server_name domain.ru www.domain.ru;
    
        # Пути до letsencrypt сертификатов.
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
    
        location / {
            # Адрес, по которому доступно приложение на локалке сервера (localhost не указывать, а указывать имя контейнера (project в моем случае)).
            proxy_pass http://project:80;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    P.S. рекомендую освоить Docker Compose, чтобы было меньше возьни с разворачиванием и общением между контейнерами.
    Ответ написан
    8 комментариев
  • Зачем нужны DTO, когда есть типы и интерфейсы в языках программирования?

    mayton2019
    @mayton2019
    Bigdata Engineer
    DTO объекты часто пересекают границы Языков (Java/JavaScript/GWT) и сетевых протоколов (Rest/Graphql/SOAP/Avro).

    И эти объекты могут нести на себе семантику только чистых данных. Вы не сможете через сеть
    из Java в C# например передать интерфейс или объект с методами.

    И многие фреймворки искусственно ограничивают DTO как раз для того чтобы эти объекты однозначно
    декодировались всеми сторонами-участниками протокола взаимодействия. А фреймворки - обычно
    предоставляют средства кросс-компилляции этих DTO.
    Ответ написан
    Комментировать
  • Как правильно организовать выборку зашифрованных данных PostgreSQL?

    Melkij
    @Melkij
    PostgreSQL DBA
    Никак.

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

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

    Единственное возможное исключение: если ваша функция шифрования обязуется быть immutable в терминах postgresql, т.е. на один и тот же ключ и исходные данные генерировать всегда один и тот же бинарно идентичный результат. Тогда делаете индекс по parent_iin и ищете по условию where parent_iin = функция_шифрования(данные, ключ) то есть по зашифрованному представлению данных.
    Ответ написан
    Комментировать
  • Почему в git добавляются папки, которые содержатся в gitignore?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    .gitignore действует сразу, но в нем надо косую черту переставить:
    .vs/
    Debug/
    Release/
    *.vcxproj.filters
    *.vcxproj.user
    Ответ написан
    Комментировать
  • Как в Windows разделить трафик приложений, часть через VPN, часть мимо него?

    ValdikSS
    @ValdikSS
    Настройте виртуальную машину на использование сетевого интерфейса в режиме моста.
    Ответ написан
    7 комментариев
  • Как в Windows разделить трафик приложений, часть через VPN, часть мимо него?

    @Refguser
    Делаю ИМ и другие решения
    Правильный ВПН реализуется на уровне сетевого интерфейса, поэтому в пределах одной сетевой карты что-то разделить нельзя.
    Но можно использовать не ВПН, а прокси. Тогда это возможно.
    Ответ написан
    Комментировать
  • Кому отдать предпочтение iMac или Windows PC?

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

    Хотелось бы видеть замеры температуры для начала, при нагрузке и стресс тесте. например от OCCT или аида64
    Ответ написан
    6 комментариев
  • Как хранить изображения в PostgreSql?

    @rPman
    Базы данных не очень эффективны с BLOB-ами, большими объемами данных, вопрос даже не в скорости работы с ними, а в том что инструменты резервного копирования к примеру будут работать значительно медленее, чем если копировать файлы того же объема но размещенные на диске.

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

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

    Причина - большое (десятки тысяч) количество файлов в одном каталоге не совсем удобно в том плане, что многие утилиты резервного копирования (да и просто работа с файлами, получение списка или удаление с помощью bash rm, он до сих пор глючный и тормозит), поэтому вместо хранения файла 031432532341234123.jpeg делать подкаталоги 0314/3253/2341/234123.jpeg заранее расчитав количество уровней от прогнозируемого количества файлов.
    Ответ написан
    1 комментарий
  • Как привязать домашнюю папку к пользователю?

    vabka
    @vabka
    Токсичный шарпист
    usermod -d /home/B A
    Ответ написан
    Комментировать
  • Как скомпилировать консольную программу C++ в .app?

    @dima20155
    you don't choose c++. It chooses you
    Потому что у ваша программа отработала и завершилась. Добавьте паузу, ожиданные ввода данных или что-то ещё и ваша программа будет ждать
    Вы же не удивляетесь, что запускаю компилятор, он останавливается после завершения работы? Вашей программе просто нечего больше делать.
    Ответ написан
    Комментировать
  • Между сборками и пространствами имён нет прямого соответствия. Что это значит?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Ты можешь создать сборку (грубо говоря, проект/.csproj), которая называется Service.Domain, но все классы там будут в неймспейсе (пр-ве имен) Another.Namespace
    Т.е. название проекта не накладывает ограничений на названия пр-в имен, которые в нем хранятся.
    Ответ написан
    Комментировать
  • Выражение без эффекта перемещает переменную?

    @deliro
    Если bb; убрать, то всё работает, почему так? Никакого перемещения там не происходит, но компилятор думает иначе.

    Перемещение происходит. Семантически это выражение эквивалентно `{ bb }`

    Это точно системный язык на котором можно писать серьёзные вещи?

    Нет, язык херня. Беги писать на жс

    Или тут и правда происходит некое перемещение в параллельную вселенную?

    Хорошая привычка — агриться на вещи, которые ты не понимаешь. Далеко пойдёшь.
    Ответ написан
    3 комментария
  • Можно ли создать базу данных на одной таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да. Такие эксперименты были. Лет 5 назад когда был еще жив sql.ru, один человек продвигал
    модель т.н. квинтетов. Это таблица с 5 полями которая полностью описывала любую
    доменную область. Я к сожалению не могу нигде найти следов описания этой системы
    но возможно это оно https://cyclowiki.org/wiki/QDM . Читайте смотрите.

    Второе. В эпоху новых версий DBMS (Oracle/PG/MySQL) когда мы можем использовать
    JSON/XML внутри ячейки, сама идея EAV теряет смысл. Поле атомарно? Атомарно.
    Значит законы реляционной алгебры мы не нарушаем и JSON совершенно легальный
    тип для реляционок. Хотя лет 30 назад его использование было-бы кощунством
    в БД. Но это можно было списать на жесткую экономию ресурсов и чрезмерную
    математичность моделей Бойса-Кодда. Сегодня все используют JSON и нет никаких
    архитектурных доводов против. Поэтому создавайте NoSQL табличку где есть
    key и есть значение в виде либерального типа документа. Как делают MongoDb, CouchDb.
    И если связать их в иерархию то получится вполне себе те-же самые квинтеты.

    Про EAV лучше забудьте. Их любят преподаватели SQL и теоретики. Но практически EAV
    слишком медленно работает чтобы развивать его в бизнес-приложении или в промышленности.
    Мир тяготеет к упрощению. И поэтому JSON - это упрощение EAV. И работает быстрее.
    Ответ написан
    6 комментариев
  • WPF Как управлять элементом из другого окно?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    xaml лишь язык разметки..
    все элементы доступны в коде...
    почти как в winforms..
    MSDN в помощь
    Ответ написан
    Комментировать
  • Контринтуитивный синтаксис объявления нескольких переменных одного типа?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Объясните, что я недопонимаю?

    Все правильно понимаешь. Привыкай.

    P.S. вот поэтому и рекомендуют * писать рядом с переменной, а не у типа - const char *var , а не const char* var
    Ответ написан
    1 комментарий
  • Контринтуитивный синтаксис объявления нескольких переменных одного типа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно подумать, что при объявлении указателя, символ * относится к имени(не как часть, а как что-то зависящее от него), а не к типу.

    Если взять стандарт языка (например C99) и почитать главы Declarations, Type Specifiers и Declarators, то можно увидеть, что он разделяет declaration-specifiers, в который входят только слова и declarators, в который входят скобочки и звёздочки. Т.е. твой вывод по сути верный.

    Там же можно увидеть, что часть называемую declarator всегда можно обернуть в скобки, из чего можно извлечь следующий вывод: часть объявления вокруг которой можно поставить скобки самым широким образом относится к конкретному идентификатору, оставшаяся часть -- ко всему списку. Т.е. const char *a, b; можно превратить в const char (*a), b, но нельзя превратить в const (char *a), b или в char (const *a), b.

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