Задать вопрос
  • Как правильно поступить с датой?

    @abcd0x00
    Сначала переделай это
    get_proxy_list() {
      savefile=~/.PROXY_LIST
      date=$(date +%d.%m.%Y)
      url="http://site.com/proxy/list_${date}.txt"
    
      ...
    
    }


    В это
    make_dmy_date() {
        date "+%d.%m.%Y"
    }
    
    make_proxy_url() {
        echo "http://site.com/proxy/list_$(make_dmy_date).txt"
    }
    
    make_proxy_ofname() {
        echo "~/.PROXY_LIST"
    }
    
    get_proxy_list() {
      url=$1
      savefile=$2
    
      ...
    
    }
    
    get_proxy_list `make_proxy_url` `make_proxy_ofname`


    А потом уже пиши функции, какие нужно. Если нужно декрементировать дату, пиши для этого функцию. Заодно внутри функции идёт контроль над кодом, но и сам код может получиться нетривиальным, так как при декременте даты нужно учитывать, что она может дойти до нуля и это нужно будет тоже обкладывать кодом каким-то.

    А если всё в куче писать, то будет вот такая свалка, как у тебя сейчас, - неповоротливая и непригодная для каких-то тонких изменений и настройки.
    Ответ написан
    8 комментариев
  • Что тормозит загрузку?

    @abcd0x00
    Кто может подсказать в какую сторону копать, какие журналы посмотреть?

    Журналы загрузки и сообщений. Но для начала нужно просто в консоль войти изначально и посмотреть, есть ли в ней тормоза. Чтобы в консоль зайти, нужно к ядру в загрузчике присоединить число 3. То есть надо просто локализовать проблему, разделив область анализа дихотомически. Если проблема возникает и без графики, то в графике можно не искать решение. А если проблема возникает только при графике, то можно не искать решение в каких-то базовых, консольных процессах.
    Ответ написан
    Комментировать
  • Есть ли хорошие задачники по СИ?

    @abcd0x00
    Вот тут неплохие задачи
    acm.timus.ru/problemset.aspx

    И проверка есть для многих языков
    acm.timus.ru/submit.aspx
    Ответ написан
    Комментировать
  • Куда пропал comment-line из Emacs?

    @abcd0x00
    Выдели нужную строку и нажми Alt-; (комментировать/раскомментировать). И это работает для всех языков.
    Ответ написан
    Комментировать
  • Как сконвертировать unicode escape последовательности?

    @abcd0x00
    Есть функция insert-char, вызываемая через C-x 8 RET. Она преобразует один символ в виде 043D. Можно на её основе написать функцию с циклом для преобразования всех символов выделения. А если по-простому, то за пару минут записывается макрос, который преобразует один символ, а потом этот макрос можно запустить и по одному символу, и с аргументом Alt-0 (в буфер отдельный заносишь текст).
    Ответ написан
    Комментировать
  • Как в bash обработать кучу строк?

    @abcd0x00
    и как дальше работать с $temp ?

    echo "$temp" | что-то работает дальше

    Пример
    [guest@localhost ~]$ text=$(head -3 /etc/passwd)
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$text"
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    [guest@localhost ~]$ 
    [guest@localhost ~]$ echo "$text" | grep oo
    root:x:0:0:root:/root:/bin/bash
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Какой хороший курс или ресурс по СИ для подготовки к собеседованию?

    @abcd0x00
    Тут писал (это не освежитель, а центральная документация)
    Откуда узнавать о библиотеках?
    Ответ написан
    Комментировать
  • Как присвоить строку перемененной типа char[]?

    @abcd0x00
    char s1[7];
    
    sprintf(s1, "hello");
    strcpy(s1, "hello");


    #include <stdio.h>
    
    int main(void)
    {
        char s1[7];
    
        sprintf(s1, "hello");
        printf("%s\n", s1);
        return 0;
    }
    Ответ написан
    Комментировать
  • Для чего в Си ввели синтаксис указателя на массив?

    @abcd0x00
    Представь, например, что у тебя есть точка, которая описывается массивом её координат:
    typedef int Point2D[2];
    И дальше ты делаешь массив таких точек:
    Point2D array[5];
    А потом ты выводишь их по очереди:
    Point2D *p, *q;
    
    for (p = array, q = p + 5; p < q; p++) {
        print_point(*p);
    }


    А вот немного по-другому записано - и у тебя уже прямая получается:
    typedef struct {
        Point2D *pt1;
        Point2D *pt2;
    } Line2D;

    Почему здесь указатели? Да потому что они жрут меньше памяти, чем массивы чисел. Так одна прямая жрёт 8 байт, а без указателей она жрала бы 16 байт. А была бы прямая в трёхмерном пространстве, то это так же занимало бы 8 байт, а без указателей - 24 байта.

    Дальше код пошёл:
    код
    #include <stdio.h>
    
    typedef int Point2D[2];
    
    typedef struct {
        Point2D *pt1;
        Point2D *pt2;
    } Line2D;
    
    void print_point(Point2D p)
    {
        printf("(%d,%d)\n", p[0], p[1]);
    }
    
    void print_line(Line2D l)
    {
        printf("Line[\n");
        print_point(*l.pt1);
        print_point(*l.pt2);
        printf("Line]\n");
    }
    
    int main(void)
    {
        Point2D array[5] = {{1, 2}, {3, 4}, {5, 6}};
        Point2D *p, *q;
        Line2D l;
    
        for (p = array, q = p + 5; p < q; p++) {
            print_point(*p);
        }
    
        l.pt1 = array;
        l.pt2 = array + 2;
        print_line(l);
    
        return 0;
    }


    Вывод
    [guest@localhost c]$ .ansi t.c -o t
    [guest@localhost c]$ ./t
    (1,2)
    (3,4)
    (5,6)
    (0,0)
    (0,0)
    Line[
    (1,2)
    (5,6)
    Line]
    [guest@localhost c]$



    Как видишь, без этой возможности язык был бы гораздо ограниченней и сдох бы ещё в 80-е годы.
    Ответ написан
    Комментировать
  • Как узнать, какая команда встречается в максимальном количестве категорий справки (man)?

    @abcd0x00
    [guest@localhost ~]$ man -k . | awk 'BEGIN {n = 0} {arr[$1]++; x=arr[$1]; if(x > n) {n = x; w = $1}} END {print w, n}'
    intro 8
    [guest@localhost ~]$
    Ответ написан
    Комментировать
  • Как разбить текст на предложения, не используя регулярные выражения?

    @abcd0x00
    Казалось бы легко -

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

    @abcd0x00
    В C функция free() ищет, какие блоки можно слить вместе, но это без перемещений. Например, один большой блок был занят данными A и B, при освобождении этих подблоков они сливаются обратно в один большой блок.
    Ответ написан
    Комментировать
  • Как перекодировать строку в Python из utf-16 в utf-8?

    @abcd0x00
    >>> s = 'абвг'.encode('utf-16be')
    >>> s
    b'\x040\x041\x042\x043'
    >>> 
    >>> out = s.decode('utf-16be').encode('utf-8')
    >>> out
    b'\xd0\xb0\xd0\xb1\xd0\xb2\xd0\xb3'
    >>> 
    >>> out.decode('utf-8')
    'абвг'
    >>>
    Ответ написан
    Комментировать
  • Как разобрать такую строку? Регулярные выражения?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = 'Some random string , Round A 1 day - Trip'
    >>> 
    >>> match = re.search(r'^(.+) , (\S+ \S+) (.+) - (.+)$', s)
    >>> match.groups()
    ('Some random string', 'Round A', '1 day', 'Trip')
    >>>
    Ответ написан
    1 комментарий
  • Как узнать, какие файлы подверглись изменению при checkout в Git?

    @abcd0x00
    В один прекрасный момент заметил, что в проекте кое-что сломалось и уже давно

    Чтобы найти, когда сломалось, выполни
    git blame -- file.txt
    там покажутся коммиты по каждой строке файла.

    Т.е., какие файлы подверглись изменениям между этими двумя коммитами?

    Все изменения между коммитами
    git log -p коммит_раньше..коммит_позже

    Все изменения между коммитами в одном файле
    git log -p коммит_раньше..коммит_позже -- file.txt

    Можно так ещё
    git log -p коммит_раньше~..коммит_позже
    от коммита_раньше отнимается единица (чтобы включить его).
    Ответ написан
    Комментировать
  • Как написать цикл для прочтения всего файла по 8 байт на Pythone?

    @abcd0x00
    >>> def read_blocks(fname, block_size):
    ...     with open(fname, 'rb') as fin:
    ...         while True:
    ...             data = fin.read(block_size)
    ...             if data:
    ...                 yield data
    ...             else:
    ...                 break
    ... 
    >>> out = read_blocks('/etc/passwd', 8)
    >>> 
    >>> list(out)[:5]
    [b'root:x:0', b':0:root:', b'/root:/b', b'in/bash\n', b'bin:x:1:']
    >>> 
    >>> out = read_blocks('/etc/passwd', 10)
    >>> 
    >>> list(out)[:5]
    [b'root:x:0:0', b':root:/roo', b't:/bin/bas', b'h\nbin:x:1:', b'1:bin:/bin']
    >>>
    Ответ написан
    Комментировать
  • Как пропустить весь поток для того, чтобы можно было воспользоваться getchar()?

    @abcd0x00
    Запомни одно
    fflush(stdin);
    это полное фуфло от незнающих. В стандарте оно не определено, поэтому на разных компиляторах оно будет по-разному себя вести в итоге. В лучшем случае оно ничего не будет делать, в худшем - выдаст какой-нибудь мусор.

    Твоя проблема в том, что после ввода числа там сохраняется перевод строки (нажатый Enter) и вот его-то и надо прочитать.

    scanf("%d%*c", &a);

    А вообще, не надо использовать scanf() таким образом. Вместо этого надо сделать getline() на базе fgets() + sscanf() - и тогда всё будет работать точно.
    Ответ написан
    Комментировать
  • Возможно ли работать локально Git lab?

    @abcd0x00
    Ни разу не пользовался ни GitWeb, ни Gitosis, ни Gitolite, хотя изучил их сразу. Для использования git'а они не нужны. Это нужно только тогда, когда появляется несколько человек, которым нужно раздать разные права на репозиторий - то есть в организации локально поставить или когда команда работает над проектом.
    Ответ написан
    Комментировать
  • Как узнать подробнее о методах/функциях?

    @abcd0x00
    В Python есть прекрасная функция dir(). Она показывает, какие методы/функции можно преминить к нашему объекту.

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

    Так же и в Go: есть документация - ею и пользуйся.
    golang.org/ref/spec
    golang.org/pkg
    Ответ написан
    Комментировать