• Sendmail - насколько повышается уязвимость сервера?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    //COPY01 EXEC PGM=IEBGENER
    Вот интересно - я использую sendmail c ... ээээ... 1997-го года (не дома у себя, а на корпоративном почтовике, с приличным таким трафиком) - и ни разу не ломали. Да, пытаются конечно. Greylisting, черные списки, все такое.
    Ответ написан
    1 комментарий
  • Как правильно использовать команды установки служб для Powershell?

    @BeatHazard
    Приветствую.
    Я устанавливаю Zabbix через Powershell таким скриптом:
    Copy-Item -Path "$PSScriptRoot\ZabbixAgent" -Recurse -Destination 'C:\Program Files' -Force
    Start-Process -FilePath "C:\Program Files\ZabbixAgent\bin\zabbix_agentd.exe" -ArgumentList "--config ""C:\Program Files\ZabbixAgent\conf\zabbix_agentd.conf"" --install" -Wait
    Start-Sleep 10
    Start-Service "Zabbix Agent"
    Ответ написан
    1 комментарий
  • Почему при передаче данных порт закрыт, а при принятии он открыт?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Для создания коннекта инициатор соединения использует случайный номер порта, и как правило его номер выше 1000. В вашем случае (скриншот) это порт 55616 с компьютера LINUX-SERVER.
    Ответ написан
    4 комментария
  • Как вернуть массив из структуры?

    В данном случае в вашей программе нет необходимости использовать массив, лучше завести 3 переменные в структуре ivector3d
    struct ivector3d {
      int x = 0;
      int y = 0; 
      int z = 0;
    };

    Затем обращаться к ним из функции scale.
    Если вас интересует возвращение массива из функции, то вам нужно вернуть указатель на первый элемент массива
    int* get() {
        return array;
      }

    Но это плохой способ, т.к. при таком подходе теряется информация о размере массива. Эту проблему можно решить возвращая размер массива в параметрах функции.
    int* get(int& size) {
        size = 3;
        return array;
      }

    Но, согласитесь, это не очень удобно. В таком случае предлагается изменить код на использование контейнера std::array.
    struct ivector3d {
    
      std::array<int, 3> array;
      std::array<int, 3> get() {
        return array;
      }
    };

    По итогу, программа будет выглядеть следующим образом
    #include <iostream>
    #include <array>
    
    using namespace std;
    
    struct ivector3d {
    
      std::array<int, 3> array;
      std::array<int, 3> get() {
        return array;
      }
    };
    
    void scale(ivector3d* v, int k) {
      for (int i = 0; i != 3; ++i)
        v->array[i] *= k;
    }
    
    
    int main() {
    
      ivector3d iv3d = {1,1,1};
      scale(&iv3d, 2);
    
      auto b = iv3d.get();
      for(auto i : b)
      {
          cout << i << " ";
      }
    }
    Ответ написан
    1 комментарий
  • Как работать с огромными массивами данных?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Вероятно не хватает памяти. Используйте опцию max-old-space-size.
    node --max-old-space-size=8192 index.js
    Если оперативной памяти тоже недостаточно, то тут уже нужен потоковый JSON парсер: например stream-json.
    Ответ написан
    Комментировать
  • Как работать с огромными массивами данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В этой операции мало смысла. Расскажи что будешь дальше делать - и я подскажу как. Возможно тебе нужен Pandas.
    Ответ написан
    Комментировать
  • Что в Windows занимает почти 50 ГБ?

    @rPman
    c:\AMD - содержит временные файлы установщика драйверов (например на видеокарту), можно (нужно) удалить
    c:\$WinREAgent содержит бакап системы перед очередным крупным обновлением, должен удалиться через некоторое время сам, если у тебя все работает - удаляй
    c:\Recovery смело удаляй, содержит бакап с обновления с другой версии (типа win8 -> win10), на сколько я понимаю крупные обновления win10 так же туда попадают
    c:\Users - пользовательские файлы (документы, рабочий стол), временные и часто приложения, для установки которых не требовались права администратора, чистить этот каталог сложно но там легко десяток гигабайт найти
    например %localappdata%\Temp (можно прямо так в проводнике написать) - временный каталог, где скапливается гигабайтами мусор который надо удалять
    hiberfil.sys — размером с ОЗУ. Если оно вам не надо powercfg -h off.
    используется для быстрого включения/выключения машины без закрытия программ (по умолчанию оно используется даже при обычном выключении, пользовательские программы закрываются но службы и др. остаются и делается hibernate (очень удобно на ноутбуках настроить гибернацию при закрытии крышки)
    Отключить это безопасно, но скорость включения компьютера заметно увеличится (не секунды а минуты на слабом железе).
    c:\System Volume Information - системный каталог, содержит файлы точек восстановления, удалять не надо но можно регулировать процент занимаемого места в настройках восстановления

    p.s. запусти штатный cleanmgr (Освобождение места на диске за счет удаления ненужных файлов) в нем кнопку Очистить системные файлы, и внимательно посмотри на чекбоксики, почти всегда достаточно их отметить все, и нажми ОК

    p.p.s. после чистки лишних файлов, можно еще нажать чекбоксик - Сжимать этот диск для экономии места в свойствах диска, это освободит примерно 30% занятого места (будет долго думать, до неск. часов, выдаст несколько раз ошибки, их можно игнорировать), делать это безопасно, в очень редких случаях (медленный процессор + ssd) будет легкое замедление записи, во всех остальных случаях даже ускорится работа с диском
    Ответ написан
    2 комментария
  • Почему при выводе массива в консоль пишется что-то странное?

    Nipheris
    @Nipheris Куратор тега C++
    Array-to-pointer decay.
    There is an implicit conversion from lvalues and rvalues of array type to rvalues of pointer type: it constructs a pointer to the first element of an array. This conversion is used whenever arrays appear in context where arrays are not expected, but pointers are:
    ...

    Ваш массив неявно сконвертился к указателю на int, т.к. оператор << класса std::ostream массивы выводить не умеет, а вот указатели - вполне себе.
    Ответ написан
    Комментировать
  • Как так оказалось, что часть Windows 10 не русифицирована?

    vla3d
    @vla3d
    У меня версия 19041. Такого пункта в данном месте нет.
    Возможно, вкладка добавляется драйверами на аудио (такое бывает например с тачпадом)
    Ответ написан
    3 комментария
  • Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Никак не пойму что за ошибка, и что она хочет от меня.

    Ошибка -- обращение к памяти, к которой нельзя обращаться, первая ссылка по запросу sigsegv в гугле.
    Хочет она от тебя чтобы ты веделил память для colonies[i].aparts перед тем как к ним обращаться.
    Ответ написан
    Комментировать
  • Есть ли хоть какое-то преимущество использования функтора перед обычной функцией в данном случае?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    У функтора перед функцией есть только одно преимущество - это наличие состояния функтора, которое может меняться между обращениями к его функциональному оператору и влиять на его поведение. Функтор настраивается эксклюзивно, функция - по понятным причинам - только глобально.
    У функции перед функтором тоже есть преимущество - это адрес функции, по которому сразу можно начать ее исполнение. У функтора всегда будет два адреса - адрес метода функционального оператора и адрес самого функтора.

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

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

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Если коротко, правила автоматического вывода шаблонных аргументов предусматривают вывод полного типа для переданного аргумента при инстанцировании шаблона функции.

    Что это означает на практике? В языке есть термин массива статического размера. Частным примером такого массива является строковой литерал. Конкретно у строкового литерала из простых символов тип будет таким: const char[N], где N - это размер памяти под строковой лиерал, в байтах.

    Таким образом, если сделать такое объявление шаблона
    template< typename TValue >
    void Foo( TValue& value ); // (1)

    то при инстанцировании как Foo( "Hello" ); аргумент TValue определится как const char[6].
    И мы довольно легко можем воспользоваться этим механизмом. Нужно только дать пояснение, как и во что стоит выводить шаблонные аргументы.

    Шаблон можно записать вот так:
    template< typename TValue, size_t LENGTH >
    void Foo( TValue (&value)[ LENGTH ] ); // (2)

    В этом случае при инстанцировании как Foo( "Hello" );, аргумент TValue будет выведен как const char, а нетиповой аргумент LENGTH будет выведен в значение 6.
    Собственно, все. Размер переданного массива получен.

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

    В чем суть модификаторов в параметрах шаблона

    Если первый шаблон объявить как
    template< typename TValue >
    void Foo( TValue value );

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

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

    Параметр такой "другой" функции лучше всего определить универсальной ссылкой и использовать идеальную передачу. Тогда все будет работать правильно.
    Ответ написан
    2 комментария
  • Как массово переименовать файлы по порядку?

    wisgest
    @wisgest
    Не ИТ-специалист
    Переименование файлов в текущем каталоге будет выглядеть так:
    setlocal enableextensions enabledelayedexpansion
    set /a "num = 0"
    for %%I in (*.jpg) do (
    	set /a "num += 1"
    	ren "%%~I" !num!.ren_jpg
    )
    ren *.ren_jpg *.jpg
    endlocal
    Ответ написан
  • В каком направление двигаться начинающему системному администратору?

    @ewgenc
    А что вы хотите? Можно сети изучать дальше, Linux администрирование, DevOps, базы данных, виртуализацию и т.п. За вас никто не решит.
    Ответ написан
    1 комментарий
  • В каком направление двигаться начинающему системному администратору?

    @TheBigBear
    СтарОдмины мы
    Для начала определитесь - стагнация или потеря интереса к профессии
    Даже в рамках одной конторы можно интересно и с пользой для дела получать знания
    Вот навскидку:
    Поиграйтесь с VLAN, разделение сети на сегменты, поднятием MESH
    Поставьте и настройте Zabbix, натравите на мониторинг сети
    Подберите на свой вкус программу инвентаризации и учета (например, GLPI)
    Найдите удалённую подработку
    Самое главное - это чтобы было интересно
    Ответ написан
    Комментировать
  • В каком направление двигаться начинающему системному администратору?

    Viji
    @Viji
    DevOps Engineer
    В конце концов можно заняться сертифицированием, получите CISCO CCNA или Microsoft сертификаты, автоматизируйте ваши типичные задачи с помощью PowerShel - заодно его выучите, поставьте на один комп Линукс.. дополните его аутентификацией в AD, поизучайте сам Линукс.

    У вас есть свободное время и пространство для развития - кайфуйте с этого!
    Ответ написан
    Комментировать
  • Как поменять код, чтобы при заполнении двумерного массива распознавалась переменная int и не запрашивало указатель?

    by_kapt0xa
    @by_kapt0xa
    Учу кресты катаюсь на велике
    #include <random>
    #include <iostream>
    using namespace std;
    
    void zxc(int* arr, const int row, const int col)
    {
    
    	srand(time(NULL));
    	for (int f = 0; f < row; f++)
    	{
    		for (int j = 0; j < col; j++)
    			arr[f* col + j] = rand() % 10;
    	}
    
    }
    
    void qwe(int* arr, const int row, const int col)
    {
    
    	for (int i = 0; i < col; i++) {
    		for (int f = 0; f < row; f++)
    			cout << arr[f * col + i] << "\t";
    		cout << endl;
    	}
    }
    
    //qwe и zxc это самые удачные названия для функции, из названия сразу ясно что эти функции делают.
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	int arr[row * col];
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    программисты C++ таким не занимаются, это больше похоже на C.
    вот как выглядит нормальный код на C++:
    #include <random>
    #include <iostream>
    #include <vector>
    using namespace std;
    
    void zxc(vector<vector<int>>& arr, const int row, const int col)
    {
    	srand(time(NULL));
    	arr.resize(row);
    	for (auto& line : arr)
    	{
    		line.resize(col);
    		for (auto& x: line)
    		{
    			x = rand() % 10;
    		}
    	}
    
    }
    
    void qwe(const vector<vector<int>>& arr, const int row, const int col)
    {
    	for (const auto& line : arr)
    	{
    		for (const auto& x : line)
    		{
    			cout << x << "\t";
    		}
    		cout << endl;
    	}
    }
    
    int main()
    {
    	const int row = 5;
    	const int col = 7;
    	vector<vector<int>> arr;
    	zxc(arr, row, col);
    	qwe(arr, row, col);
    }

    простые массивы имеют массу неприятностей, связанных с НЕгибкостью кода. если вы пишете на плюсах, познакомьтесь с векторами.
    !!!!!!!!!извиняюсь, предыдущая версия была с ошибками, я отредачил
    Ответ написан
    1 комментарий
  • Почему при использовании переменной в методе, выдает ошибку Linker Tools Error LNK2001?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему при использовании переменной в методе, выдает ошибку
    class Test
    {
      static std::string question;


    Потому что статическое поле класса нужно определить, его упоминание в определении класса -- это не определение. Определить его можно например так в .cpp вне всех функций:
    std::string Test::question;
    Ответ написан
    Комментировать
  • Какая максимальная скорость LAN портов у роутера при одновременном подключении к ним устройств?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Если все порты на одном свитч-чипе, то у него обычно пропускная способность = скорость порта * кол-во портов * 2. И между двумя любыми портами будет гигабит.
    Если свитч-чипы разные (как у 10 портовых микротиков), то нужно смотреть по схеме какая линия между ними.
    WAN - отдельная история, там большую задержку и соответственно ограничение скорости вносят программые алгоритмы маршрутизации и фильтрации, но обычно с выключенной маршрутизацией скорость LAN-WAN приближается к максимальной скорости порта.
    Ответ написан
    Комментировать