• Как в python3 проверить, запущен ли процесс с таким именем (на linux)?

    @lorc
    Так же как это делает ps - просканировать содержимое "каталога" /proc/. Все подкаталоги из номеров - это id процессов. Внутри в "файле" comm хранится название команды, а симлинк exe указывает на реальный бинарь из которого был запущен этот процесс.

    Хотя, если можно ставить дополнительные пакеты, то конечно проще поставить psuitl и не мучится.
    Ответ написан
    Комментировать
  • Какие есть готовые сборки ОС тонкого клиента в режиме киоска?

    @lorc
    Готовой сборки не знаю, да и ее все равно придется допиливать под ваши нужды.

    Я бы просто взял Arch. На вики написано как грузить его по сети, как интегрировать с АД, как запускать иксы с одним приложением, да и вообще там множество информации по любым аспектам настройки.
    Ответ написан
    3 комментария
  • Что происходит при вводе в git команды HEAD?

    @lorc
    Все гитовые команды начинаются со слова git - git add, git commit, git log, git push.

    В контексте гита, HEAD - это алиас на текущий коммит. Т.е. это вообще не команда. Можно например написать git show HEAD - увидеть текущий коммит.

    Но в вашей системе кроме гита есть много других команд (программ). Одна из них и называется HEAD. Так совпало.
    Ответ написан
    1 комментарий
  • Что лучше проверять mime тип файла или его расширение или все вместе?

    @lorc
    Так как нельзя доверять любому вводу от пользователя, то по хорошему надо бы проверить не расширение и не mime (которые могут прийти любые), а собственно содержимое файла. Например - если вы ожидаете изображение jpeg - убедиться что у него есть соответствующие заголовки.
    Ответ написан
    Комментировать
  • Почему grub2.02 требует пароль при любой загрузке?

    @lorc
    Вроде бы в документации все понятно описано:

    Other users may be allowed to execute specific menu entries by giving a list of usernames (as above) using the --users option to the ‘menuentry’ command (see menuentry). If the --unrestricted option is used for a menu entry, then that entry is unrestricted. If the --users option is not used for a menu entry, then that only superusers are able to use it.


    Поэтому вам нужно пройтись по всем частям конфига grub и для всех menuentry добавить --unrestricted.
    Ответ написан
    Комментировать
  • Не работает sort, но явную ошибку в коде не находит. Как исправить?

    @lorc
    Вы бы хотя бы привели сообщение об ошибке.

    Проблема в том, что ваш компаратор - это метод класса. Было бы странно использовать его без объекта. На что вам компилятор и намекает.

    Вот исправленный вариант:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <list>
    #include <string>
    #include <fstream>
    #include <cmath>
    #include <functional>
    
    using namespace std;
    
    class Finder
    {
    public:
        list<vector<double>> lines; //список, в котором информация
        vector<double> input = {0, 0}; //массив, который вводит пользователь
        string path; //путь к файлу
    
        Finder(string path, string numbs) //конструктор открывает файл и создает входной массив
        {
            this->path = path;
    
            int l = numbs.size();
            vector<double> input;
    
            for (int i = 0; i < l; i++)
            {
                string buffer = "";
    
                if (numbs[i] != ' ')
                {
                    buffer += numbs[i];
                }
                else
                {
                    input.push_back(stod(buffer));
                    buffer = "";
                }
            }
    
            this->input = input;
            cout << "Initialization was successful" << endl;
        }
    
        void GetData() //да, загружать из файла в память обязательно
        {
            ifstream fin(path);
            string line;
    
            while (getline(fin, line))
            {
                int l = line.size();
                string buffer = "";
                vector<double> numbers;
    
                for (int i = 0; i < l; i++)
                {
                    if (line[i] != ' ')
                    {
                        buffer += line[i];
                    }
                    else
                    {
                        numbers.push_back(stod(buffer));
                        buffer = "";
                    }
                }
    
                this->lines.push_back(numbers);
            }
    
            fin.close();
            cout << lines.size();
        }
    
        double GetDistance(vector<double> a) //расчет расстояним между точками
        {
            int l = this->input.size();
            double sum = 0;
    
            for (int i = 0; i < l; i++)
            {
                double el_i = this->input.at(i);
                double el_a = a.at(i);
    
                sum += pow((el_i - el_a), 2);
            }
    
            return sqrt(sum);
        }
    
        bool compareTo(vector<double> a, vector<double> b) //компаратор
        {
            return GetDistance(a) < GetDistance(b);
        }
    
        void ShowHeigbor() //для пользователя
        {
        	using namespace std::placeholders;  // for _1, _2, _3...
    
            this->lines.sort(std::bind(&Finder::compareTo, this, _1, _2));
        }
    };
    
    int main()
    {
        string inp;
        cout << "Input vector: ";
        cin >> inp;
    
        Finder f{"data.txt", inp};
    
        f.GetData();
        //f.ShowHeigbor();
    }
    Ответ написан
    4 комментария
  • В чём разница способов подключения кириллицы?

    @lorc
    Исходя из опытов выше, возникает вопрос: а чем различаются эти два варианта подключения кириллицы к проекту?


    Практически всем. На самом деле, у вас есть две сущности - ваша программа и терминал. Ваша программа читает данные из stdin и пишет в stdout/stderr. Терминал же занимается тем, что отображает данные на экран. Для вас критически важно, чтобы программа передавала данные в той кодировке, в которой их ожидает увидеть терминал.

    Соотвественно, когда вы вызываете SetConsoleOutputCP(1251), вы говорите терминалу "ожидай данные в кодировке СР1251". Это плохо по нескольким причинам:

    • Это чисто виндова функция. Она не переносима на другие платформы
    • СР1251 - однобайтовая кодировка и ее лучше не использовать в 21 веке. Нужен юникод.
    • Другие программы, работающие в этом же терминале (например echo) не знают что вы поменяли кодировку терминала. Потому вы и видите мусор.


    Когда вы вызываете setlocale - вы говорите своей программе "возьми настройки кодировки из окружения и выдавай текст в ней". В результате вы подстраиваетесь под терминал и используете ту кодировку, в которой он работает. Скорее всего это будет юникод. В этом варианте все минусы превращаются в плюсы - это переносимо, это юникод, остальные программы будут работать нормально.

    Кстати, вызывать setlocale с параметром Russian не совсем верно. Нужно использовать пустую строку -"". Интересно, что я уже второй раз вижу на тостере именно "Russian". Кажется, где-то по рунету гуляет неправильный пример.
    Ответ написан
    Комментировать
  • Не получается объявить двухмерный динамический массив?

    @lorc
    int newMapLineAndColumnSize = sqrt(arrayLineAndColumnSize * coefficient);

    Тут точно sqrt() нужен? Мне кажется, что без него будет лучше.
    Ответ написан
  • Как получить вывод консоли?

    @lorc
    к сожалению с system() у вас так не получится. Вам нужно пойти длинным и сложным путем - через fork, pipe, dup и execve.

    В принципе вот тут расписано более-менее.

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

    @lorc
    Это удивительно, потому что вообще-то git не умеет коммитить пустые каталоги. Там должен быть хотя бы один файл.

    Если вы хотите закоммитить вообще все - сделаейте git add . (обратите внимание на точку) перед git commit.

    И убедитесь что ваш .gitignore не заставляет git игнорировать новые файлы.
    Ответ написан
    2 комментария
  • Как реализовывается своя ОС на android?

    @lorc
    Да, это немного другие люди. Они чаще всего вырастают из embedded. Но в вашем случае этого не надо, я думаю.
    В вашем случае будет достаточно человека, который разбирается в android framework и умеет собирать AOSP. Думаю, не ошибусь, если скажу что многие опытные разработчики приложений умеют это.

    К тому же, вы наверное не хотите писать прошивку с нуля? Самым логичным способом было по получить исходные коды от вашего поставщика железа и дальше уже допиливать их прошивку под свои нужды.
    Ответ написан
    Комментировать
  • Для чего нужен формат "%lc" в printf?

    @lorc
    Потому что функция wcrtomb не знает в какую кодировку нужно превратить ваш символ. Правильное решение - вызвать setlocale:


    On startup of the main program, the portable "C" locale is selected as default. A program may be made portable to all locales by calling:

    setlocale(LC_ALL, "");


    Это настроит локаль вашего приложения согласно окружению. Это более правильный и переносимый вариант того, что предложил @sergey-gornostaev

    Вот пример.
    Ответ написан
    Комментировать
  • Как корректно завершить процесс?

    @lorc
    Судя по тому что эта бага еще открыта - никак. Но вообще можете попробовать посылать SIGINT, а не SIGTERM:

    os.system('pkill -f firefox -SIGINT')

    Только было бы неплохо отфильтровать нужный инстанс firefox и воспользоваться os.kill
    Ответ написан
  • Как правильно написать gitignore для путей?

    @lorc
    Из "man gitignore":


    • If the pattern ends with a slash, it is removed for the purpose of the following description, but it would only find a match with a directory. In other words, foo/ will match
    a directory foo and paths underneath it, but will not match a regular file or a symbolic link foo (this is consistent with the way how pathspec works in general in Git).

    • If the pattern does not contain a slash /, Git treats it as a shell glob pattern and checks for a match against the pathname relative to the location of the .gitignore file
    (relative to the toplevel of the work tree if not from a .gitignore file).

    • Otherwise, Git treats the pattern as a shell glob: "*" matches anything except "/", "?" matches any one character except "/" and "[]" matches one character in a selected
    range. See fnmatch(3) and the FNM_PATHNAME flag for a more detailed description.

    • A leading slash matches the beginning of the pathname. For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".


    Еще в мане есть примеры:

    # exclude everything except directory foo/bar
    /*
    !/foo
    /foo/*
    !/foo/bar
    Ответ написан
    Комментировать
  • "ошибка сегментирования" как исправить(С++)?

    @lorc
    В данном случае ошибка в строке virus.getline(str,255);. Там должно быть virus.getline(vir,255);. Именно это приводит к segfault. Но как я написал в комментарии к другому ответу - это не единственная проблема в вашем коде.
    Ответ написан
    3 комментария
  • Можно ли как-нибудь отправить в удаленный репозиторий коммит, в котором нет моих промежуточных коммитов, с помощью которых я и дошел до последнего?

    @lorc
    Зависит от того что вы хотите сделать. Если вы хотите отправить только изменения из последнего коммита, то нужно сделать интерактивный rebase или cherry-pick на ветку удаленного репозитория.

    Если вы все же хотите отправить все изменения, но в виде одного коммита - то вам нужен squash, как тут правильно порекомендовали. Его тоже можно сделать через интерактивный rebase.
    Ответ написан
  • Как решить проблему на сервере с GIT?

    @lorc
    Если вы видите через ftp что файлы действительно изменились - значит проблема не в git. Вы точно все кеши сбросили? И в nginx и в вашем application сервере?
    Ответ написан
    Комментировать
  • Не дает клонировать по SSH, почему?

    @lorc
    А просто "ssh github.com" нормально отрабатывает? Показывает что-то типа "Hi lorc! You've successfully authenticated, but GitHub does not provide shell access." ?

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

    @lorc
    Ну собственно алгоритм прямо в Википедии описан.

    Если термов не очень много - можно попробовать применить Метод Куайна—Мак-Класки. Таким образом вы убьете двух зайцев сразу - получите не просто КНФ, а минимальную КНФ.
    Ответ написан
    Комментировать
  • T - это массив из 3 указателей на структуры с типом car?

    @lorc
    Это указатель на массив из трех структур типа `car`
    Ответ написан