The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум Программирование под UNIX
Вайб-кодинг и замена программистов на AI, !*! zionist, (Средства разработки) 28-Апр-25, 15:41  [ | | | ] [линейный вид] [смотреть все]
От людей, занимающих те или иные руководящие посты в IT компаниях нередко слышу мнение, которое крактко можно выразить следующими словами: Совсем скоро AI сильно сократит или даже обнулит количество программистов, заменив их собой.

Из личного же опыта работы с AI у меня таких ощущений не возникло. А что вы думаете об этом?

Например, смог бы чувак из ютуба (ссылка ниже) написать свою реляционную базу данных исключительно при помощи вайб-кодинга? Это pet-project, но довольно нетривиальный.

https://www.youtube.com/@tony_saro/videos

  • Реклама своего кАнала Иди работай И вот почему Руководители в этой сфере сп, !*! Аноним (1), 22:45 , 28-Апр-25 (1)
    Реклама своего кАнала? Иди работай ))

    >От людей, занимающих те или иные руководящие посты в IT компаниях нередко слышу мнение

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

    Ищет баги. Всякую мелочь из-за невнимательности прекрасно находит.
    Простыни неинтересного шаблонного кода генерит прекрасно. Стиль соблюдает. Тесты генерит вообще прекрасные - я бы поленился такие написать.  
    Код ревью делает. Ченджлоги пишет. Я кайфую. Раньше работал 4 часа в день, теперь 4 часа в неделю (ну почти). Ощущение, будто у меня появился умный коллега, приносит радость и душевный комфорт.

    >Совсем скоро AI сильно сократит или даже обнулит количество программистов

    По причине неспособности 95% людей сформулировать задание ИИ, беспокоиться об этом не стоит. Однако, вполне возможно, что ИИ отменит тех, кто им обычно дает работу. Что исключительно к лучшему: умные люди не должны заниматься переводами с языка идиотов на языки программирования.

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

    Селяви...

    сообщить модератору +/ответить
  • Мне тоже кажется, что разговоры о 171 полной замене программистов 187 8212, !*! Anna2606 (ok), 16:39 , 12-Июн-25 (20)
    > От людей, занимающих те или иные руководящие посты в IT компаниях нередко
    > слышу мнение, которое крактко можно выразить следующими словами: Совсем скоро AI
    > сильно сократит или даже обнулит количество программистов, заменив их собой.
    > Из личного же опыта работы с AI у меня таких ощущений не
    > возникло. А что вы думаете об этом?
    > Например, смог бы чувак из ютуба (ссылка ниже) написать свою реляционную базу
    > данных исключительно при помощи вайб-кодинга? Это pet-project, но довольно нетривиальный.
    > https://www.youtube.com/@tony_saro/videos

    Мне тоже кажется, что разговоры о «полной замене программистов» — это скорее хайп, чем реальность. Да, AI отлично справляется с рутинными задачами, генерацией шаблонного кода, может ускорить разработку и даже помочь с архитектурой, но написать свою полноценную реляционную БД с нуля — это всё ещё требует глубокого понимания, опыта и системного мышления.

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

    Кстати, похожее происходит и в digital-маркетинге: ИИ помогает автоматизировать рутину, но без живой стратегии и профессионального подхода результат будет посредственным. В этом плане smm агентство с опытом https://fivestars.agency/ всё ещё даёт фору любому ИИ. Думаю, и в программировании будет похожая динамика: вместо исчезновения профессии — её трансформация.

    сообщить модератору +/ответить


Ошибка сегментирования (код 139) ПОСЛЕ завершения работы., !*! Just friend, (GUI, XWindow, Qt, GTK) 07-Фев-21, 05:13  [ | | | ] [линейный вид] [смотреть все]
Доброго времени суток, к сожалению не могу привести пример кода, поскольку проект уже разросся на 1000+ строк, а причина так и не найдена.
Теперь к сути. Разрабатываю на Qt5, в один момент во время тестирования заметил, что при закрытии основного окна приложения (closeEvent(...), qApp->quit() или qApp->exit(0) пробовал все 3) возникает интересная ситуация. Код отрабатывает именно то, что и планировалось, ошибок никаких, но среда QtCreator выводит сообщение не об успешном завершении с кодом 0, а что приложение было завершено с ошибкой и его работа была аварийно остановлена.
При завершении работы (по воле пользователя) присутствует ошибка сегментирования (код ошибки 139).
На данный момент это совершенно не затрагивает работоспособность программы, однако боюсь, что это может повлиять в дальнейшем. Очень хочется знать в чем может быть источник проблемы.
Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск в гугл не увенчался успехом. Рассчитываю на вашу помощь.
  • Может быть стоит почитать более глубоко что и как возвращают программы и для чег, !*! Аноним (-), 07:23 , 07-Фев-21 (1)
    > Я только начинаю познавать разработку. К сожалению

    Может быть стоит почитать более глубоко что и как возвращают программы и для чего это нужно.

    сообщить модератору +/ответить
  • gt оверквотинг удален Запустите под отладчиком, поставьте точку остановки на з, !*! ыы (?), 09:52 , 07-Фев-21 (2)
    >[оверквотинг удален]
    > что и планировалось, ошибок никаких, но среда QtCreator выводит сообщение не
    > об успешном завершении с кодом 0, а что приложение было завершено
    > с ошибкой и его работа была аварийно остановлена.
    > При завершении работы (по воле пользователя) присутствует ошибка сегментирования (код
    > ошибки 139).
    > На данный момент это совершенно не затрагивает работоспособность программы, однако боюсь,
    > что это может повлиять в дальнейшем. Очень хочется знать в чем
    > может быть источник проблемы.
    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

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

    сообщить модератору +/ответить
  • 1000 строк это ниочем базовыe методы поиска и локализации ошибки для данног, !*! nekto (?), 11:15 , 07-Фев-21 (3) +1
    > Доброго времени суток, к сожалению не могу привести пример кода, поскольку проект
    > уже разросся на 1000+ строк, а причина так и не найдена.

    ...
    1000 строк это ниочем...
    базовыe методы поиска и локализации ошибки для данного случая:

    - методом половинного деления коментируем, пересобираем, выполняем код - до просветления или офигивания.
    - ставим множественные вызовы printf/std::cout/qWarn/etc...

    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

    ...
    все когда-то начинали

    В дальнейшем указывется:
    - OS, version
    - copmiler, version
    - минимальный воспроизводимый пример кода с ошибкой

    сообщить модератору +1 +/ответить
  • gt оверквотинг удален В твоей программе вызывается уничтожение объекта по нева, !*! деанон (ok), 00:10 , 20-Фев-23 (4)
    >[оверквотинг удален]
    > что и планировалось, ошибок никаких, но среда QtCreator выводит сообщение не
    > об успешном завершении с кодом 0, а что приложение было завершено
    > с ошибкой и его работа была аварийно остановлена.
    > При завершении работы (по воле пользователя) присутствует ошибка сегментирования (код
    > ошибки 139).
    > На данный момент это совершенно не затрагивает работоспособность программы, однако боюсь,
    > что это может повлиять в дальнейшем. Очень хочется знать в чем
    > может быть источник проблемы.
    > Я только начинаю познавать разработку, по-этому не судите строго. К сожалению поиск
    > в гугл не увенчался успехом. Рассчитываю на вашу помощь.

    В твоей программе вызывается уничтожение объекта по невалидному указателю. Вероятно, ты где-то забыл обнулить этот пресловутый указатель. И вообще, не красиво приходить к джентельменам без кода. В конце концов, есть github. Поверь, твой овнокод никому не нужен.

    сообщить модератору +/ответить
bash Buffer Overflow?, !*! BUMP, (Shell скрипты) 24-Апр-25, 11:05  [ | | | ] [линейный вид] [смотреть все]
Прошу помощи с bash переменными.

сам tail отрабатывает без ошибок.

tail -n1 /var/log/emerge.log
1745476238:  *** terminating.


при сохранении последней в переменную выводит мусор.

llog=$(tail -n1 /var/log/emerge.log)

echo $llog
1745476238: 0-runtime-dir.eJT 0-runtime-dir.ggf 0-runtime-dir.gpj 0-runtime-dir.ktY dbus-YMZUcktE5L dolphin.FzHAlP dolphin.JKDwhH dolphin.tKRQUu dumps f79d601e26a782fd149b3ffb098aae9f-{87A94AB0-E370-4cde-98D3-ACC110C5967D} gameoverlayui.log gameoverlayui.log.last genlopt llog llog.save nekoraylocalserver-9473811468922938843 plasma-csd-generator.yUGeaa portage pressure-vessel-libs-95N742 qipc_sharedmemory_dbafafcffecabcefca5216d7b68d487bf9b5a36323b0b398d992ab094 qipc_systemsem_caeddabbbedfcfdabbfc002c3865a15602d41f4c416f5f195921e64ea213 qipc_systemsem_dbafafcffecabcefca5216d7b68d487bf9b5a36323b0b398d992ab094 Spectacle.AXScnp stdErrFifosNA stdInFifoYF2 stdOutFifouAD steam steam_chrome_overlay_uid1000_spid11004 steam_chrome_overlay_uid1000_spid1557 steam_chrome_overlay_uid1000_spid15985 steam_chrome_overlay_uid1000_spid24757 steam_chrome_shmem_uid1000_spid15252 steamgOMCIc steampedeIC temp-aweal terminating.

некоторые отрабатывает без ошибок:
llog=$(tail -n1 /var/log/messages)
Apr 24 07:56:48 SN 1054 rtkit-daemon[2879]: Successfully made thread 8860 of process 8547 owned by '1000' RT at priority 10.


Сборка vhci_hcd для ядра 6.6, !*! Анон70, (C/C++) 03-Янв-24, 17:19  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте. Есть такой проект virtual usb dirver https://github.com/linuxbuh/vhci_hcd.
Он без проблем собирается на ядрах от 5.х до 6.1. Однако на 6.6 завершается ошибкой:
/home/arch/abs/testing/vhci-hcd/src/build/vhci-hcd/1.15/build/usb-vhci-iocifc.c:1072:10: error: ‘struct class’ has no member named ‘owner’
1072 |         .owner = THIS_MODULE,
      |          ^~~~~
In file included from ./include/linux/linkage.h:7,
                 from ./arch/x86/include/asm/cache.h:5,
                 from ./include/linux/cache.h:6,
                 from ./include/linux/time.h:5,
                 from ./include/linux/stat.h:19,
                 from ./include/linux/module.h:13:
./include/linux/export.h:29:21: error: initialization of ‘const char *’ from incompatible pointer type ‘struct module *’ [-Werror=incompatible-pointer-types]
   29 | #define THIS_MODULE (&__this_module)
      |                     ^
/home/arch/abs/testing/vhci-hcd/src/build/vhci-hcd/1.15/build/usb-vhci-iocifc.c:1072:18: note: in expansion of macro ‘THIS_MODULE’
1072 |         .owner = THIS_MODULE,
      |                  ^~~~~~~~~~~
./include/linux/export.h:29:21: note: (near initialization for ‘vhci_iocifc_class.name’)
   29 | #define THIS_MODULE (&__this_module)
      |                     ^
/home/arch/abs/testing/vhci-hcd/src/build/vhci-hcd/1.15/build/usb-vhci-iocifc.c:1072:18: note: in expansion of macro ‘THIS_MODULE’
1072 |         .owner = THIS_MODULE,
      |                  ^~~~~~~~~~~
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:243: /home/arch/abs/testing/vhci-hcd/src/build/vhci-hcd/1.15/build/usb-vhci-iocifc.o] Error 1

Вот кусок кода
static struct class vhci_iocifc_class = {
    .owner = THIS_MODULE,
    .name = driver_name
};

#define CHARDEV_NAME "usb-vhci"

static struct device vhci_iocifc_device = {
    .class = &vhci_iocifc_class,
    .release = vhci_iocifc_device_release,
#ifndef NO_DEV_INIT_NAME
    .init_name = CHARDEV_NAME,
#endif
    .driver = &vhci_iocifc_driver.driver
};

Как это исправить ?

Схема Как понять Продолжения?, !*! noname nobody, (Языки программирования) 02-Янв-25, 16:26  [ | | | ] [линейный вид] [смотреть все]
Ускользает смысл, уже не раз пытался понять.

Схема прекрасна, решил подтянуть матчасть. Если кто понимает простым языком поделитесь.

(define (range start end)
    (if (> start end)
        (list)
        (cons start (range (+ start 1) end))))

(range 1 10); => (1 2 3 4 5 6 7 8 9 10)

Материалы по gdb, !*! torsar, (Отладка и профилирование) 22-Мрт-25, 09:29  [ | | | ] [линейный вид] [смотреть все]
Сабж на опеннет.
Что стоит почитать для новичка?

Дайте ссылей.

зы поиск дает много результатов

Rust: Как разделить типаж на части?, !*! Ан Оним, (Rust) 16-Фев-25, 00:32  [ | | | ] [линейный вид] [смотреть все]
Можно ли как-то большой типаж (trait) с большими методами по-умолчанию разделить на несколько файлов? Ну то есть часть функций в одном файле описать, а остальные - в другом.
ассемблерные вставки в код Линукса 'это другое'?, !*! Анонимище, (Rust) 20-Фев-25, 12:00  [ | | | ] [линейный вид] [смотреть все]
Слышал жалобы на то, что якобы введение Раста в ядро Линукса нарушит идиллию, так как сейчас весь код на Си, а теперь будет смесь двух языков.

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

Как сгенерировать заданный код выхода/exit code одной командой?, !*! xintrea, (Shell скрипты) 26-Апр-23, 14:53  [ | | | ] [линейный вид] [смотреть все]
Мне нужно выполнить такую команду, которая бы возвратила заданный код возврата. Код возврата принимается из входного потока.

Пытаюсь сделать так:

> echo 32 | xargs exit
xargs: exit: Нет такого файла или каталога

Неожиданный сюрприз. Какого-то черта xargs не работает со встроенными командами шелла...

Как по-другому можно решить эту задачу?



Селектор и повторитель-запускатель команд из .bash_history, !*! dcc0, (C/C++) 24-Янв-25, 01:25  [ | | | ] [линейный вид] [смотреть все]
Если время есть - минут 5, хочу попросить кого-нибудь протестировать программу и сказать своё мнение. Но не по коду, а больше по самому функционалу.
Программа для Linux. Написана на C. Реализует возможность просмотра и выполнения команд из файла .bash_history по номеру.

Управление: s - сброс, клавиши 0-9 (можно переходить по разрядам) - переход к номеру команды. Стрелки вверх и вниз - переход к ближайшим командам. Выход 501 или "`".
Работает из директории пользователя. Прокрутки нет (только стрелки), но если нужна, то можно использовать в сочетании с tmux:


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////ПОИСК И ЗАПУСК КОМАНД ИЗ .BASH_HISTORY/////
//////////MSK. 2025///////
//////////Сrafted by: dcc0@yandex.ru///////////
/////////MoLoT////////
//////////Принцип: селектор, выбор через цифры. Enter: подтверждение//////////
////////////////////////////////////////////////////Рассчитан на 500 строк .bash_history/////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>

#include <stdlib.h>

#include <termios.h>

#include <string.h>

#include <unistd.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*Перевод в режим non-canonical, getch работает без Enter. Этот фрагмент кода взят в Интернете*/
//This function found on stackoverflow
                           //////////////////////////////////////////////SWITCH TO NON-CANONICAL///////////////////////
                           /////////////////////////////////////////////////////////ФУНКЦИЯ////////////////////////////////////////////
/////////SOURCE: stackoverflow.com SLASH questions/63751531/non-canonical-terminal-mode-buffer-stdout-in-c-program//////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static struct termios stored_settings;

void set_keypress(void) {
  struct termios new_settings;

  tcgetattr(0, & stored_settings);

  new_settings = stored_settings;

  /* Disable canonical mode, and set buffer size to 1 byte */
  new_settings.c_lflag &= (~ICANON);
  new_settings.c_cc[VTIME] = 0;
  new_settings.c_cc[VMIN] = 1;

  tcsetattr(0, TCSANOW, & new_settings);
  return;
}

void reset_keypress(void) {
  tcsetattr(0, TCSANOW, & stored_settings);
  return;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                      //////////////////////////////Вызов Селектора/////////////////
                 ///////////////////////////////////////////////////////////////////////////////////
      /////////////////////////////////////////////////ФУНКЦИЯ////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Функция вывода селектора.  Возвращает название программы
char * print_select(int select, char * p, char  arr1[500][200], int z)  {
  int j = 0;
  /*Выделение цветом*/
  char colored[14] = "\033[43m";
  /*Сброс цвета*/
  char uncolored[14] = "\033[0m";

  //====ВЫВОДИМ СЕЛЕКТОР===
  /*Очистим экран. Обновим. Первый раз выводим*/
  system("clear");
  if (select == 0) {
    /*Количество вариантов выбора в переменной z*/
    for (j = 0; j != z; j++) {
      printf("%d.[%s]\n", j + 1, arr1[j]);
    }
  }

  //====ЕСЛИ СДЕЛАН ВЫБОР===
  int choice = select - 1;
  // Выводим результат выбора
  if (select > 0) {
    for (j = 0; j < z; j++) {
      // Выделяем цветом выбор
      if (select == j && select != 501) {
        // Запомним выбор. Нужно, чтобы напечатать в правильно
        // последовательности так как селектор с 1 по 6, массив с 0 по 5
        choice = select - 1;
        printf("->[%s%s%s]\n", colored, arr1[select - 1], uncolored);
        /* Возвращаем указатель на область памяти, где эта строка. Заодно
         * выделили память под нее (strlen - если не известен размер)*/
        //p = (char * ) malloc(strlen(arr1[select - 1]) + 1);
        //Но мы знаем размер 20. char * - приведение к типу "указатель на строку"
        p = (char * ) malloc(400);
        strcpy(p, arr1[select - 1]);
        break;
      }
      if (j != choice) printf("%d.[%s]\n", j + 1, arr1[j]);
    }

//Последнюю опцию добавим вне цикла
if (select ==500) {
    printf("->[%s%s%s]\n", colored, arr1[select - 1], uncolored);
      p = (char * ) malloc(400);
     strcpy(p, arr1[select -1]);
}

  }

  printf("Для выхода: `  или 501 \n");
  printf("Для сброса нажмите  букву: s  \n");
  printf("Если трехзначное число, то нажатие s обнулит буфер!\n");

  /*Вернем название программы, которую надо выполнить*/
  if (p != "")
    return p;
  return "1";
}

              //////////////////////////////BUFFERING ////////////////////////////////
        ////////////////////////////БУФЕРИЗАЦИЯ ФАЙЛА//////////////////////////
/////////////////////////////////////////////ФУНКЦИЯ/////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


char * buffering (char arr1[500][200], int z_size ) {


///////////////////////////////////////////////////////////////////////////////////////////
  //==================READING FILE============//
  /////////////////////////////////////////////////////////////////////////////////////////
  // Читаем файл с программами 1 раз. Потом будем хранить в буфере arr1
  FILE * file;
  char buffer1;
  char str[200];
  int i = 0;
  /*Количество вариантов*/
  int z = 0;
  int j = 0;
  // Количество показываемых файлов. Массив. Буфер для .bash_history

  file = fopen(".bash_history", "r");

while ((buffer1 = getc(file)) != EOF) {
    if(z==500)
    break;
    str[i] = buffer1;

    if (str[i] == '\n') {
      // Пишем строку  посимвольно в отдельный массив
      for (j = 0; str[j] != '\n'; j++) {
        arr1[z][j] = str[j];
      }
      /*Запишем 0 в конец строки*/
      arr1[z][j] = '\0';
      z++;
      //Сбросим i , чтобы очистить str[0]
      //Так как ниже инкремент, то сбросим в -1, т.е. ниже i уже = 0
      //Иначе в str[0] всегда будет в начале первый символ
      i = -1;
    }
    i++;
  }

  fclose(file);
  //Вернем указатель на массив
  return * arr1;

}
                      ////////////////////////////////MAIN///////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                     ///////////////////////////////////////////////////////////////////////////////
                  ////////////////////////////////////ФУНКЦИЯ//////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void) {

      ////////////////////////////////KEYS//////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////УПРАВЛЕНИЕ/////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////////////////////
    char  const KEY_A='A'; //Стрелка вверх
    char const KEY_B='B'; //Стрелка вниз
    char const KEY_s='s';  //Сброс
    char const KEY_EXIT='`'; //Выход (`)
    char const KEY_SPACE=' '; //Пробел
    char const KEY_ENTER='\n'; //Enter
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

//Массив хранит .bash_history
  char arr1[500][200];
//Функция буферизации
  buffering(arr1, 500);
//Размер массива - буфера
  int z = 500;
///////////////////////////////////////////////////////////////////////////////


  char * run_program;
  //для названия команды
  char * p;
  //Цвет
  char colored[14] = "\033[43m";
  /*Сброс цвета*/
  char uncolored[14] = "\033[0m";
  int select = 0;
  //Вызываем селектор 1 раз, пустой
  print_select(select, p, arr1, z);
  //С помощью terminos переключим вывод терминала в non-canonical mode.
  //Это позволит не нажимать Enter при переходе от опции к опции, но для выполнения нажать надо
  set_keypress();
  //Для чтения   с терминала
  char value = getchar();
  //Для перемещения по разрядам
  char buffer[3] = {0};
  //Счётчик буфера
  int i = 0;
  int y = 0;


//////////////////////////////////////////////////////////////////////////////////
////////////////////////СЕЛЕКТОР В ЦИКЛЕ////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

  while (1) {
//////////////////////////////////////////////////////////////////////////////////
///////////////////УПРАВЛЕНИЕ СТРЕЛКАМИ///////////////////
//////////////////////////////////////////////////////////////////////////////////
//Листаем вниз
     if (value == KEY_B) {
         y++;
         value = KEY_SPACE;
        select=select+y;
        run_program = print_select(select, p, arr1, 500);
        select=0;
        }

//Листаем вверх
    if (value == KEY_A) {
        y--;
         value = KEY_SPACE;
        select=select+y;
        run_program = print_select(select, p, arr1, 500);
        select=0;
        }
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////

    if (value != KEY_SPACE && value != KEY_s) {
      buffer[i] = value;
      value = KEY_SPACE;
      //Приведем к int
      select = strtol(buffer, NULL, 10);
      //Вызываем селектор с выбором
      run_program = print_select(select, p, arr1, 500);
      i++;
      //Освободим память
      //free(run_program);
    }


    ///////////////////////////////////////////////////////////////////////////////
    //Проверим буфер. Если буфер заполнен, то обнулим его. Напечатаем то что в нем было в начале
    ///////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////
    //Проверим буфер. Если буфер заполнен, то обнулим его. Напечатаем то что в нем было в начале
    //Можно описать циклом, но оставим всё явно для наглядности
    //Тут конъюнкция (логическое "и", логическое сложение, в курсе булевой алгебры или логики:))
    if (value !=  KEY_A && value !=  KEY_B && y == 0)  {
        if (buffer[0] > 0  && buffer[1]  == 0) {
      printf("%c", buffer[0]);

    }

       if (buffer[0] > 0 && buffer[1] > 0 && buffer[2]  == 0) {
      printf("%c %c", buffer[0], buffer[1]);

    }

         if (buffer[0] > 0 && buffer[1] > 0 && buffer[2] > 0) {
      printf("%c %c %c", buffer[0], buffer[1], buffer[2]);

    }
    value = KEY_SPACE;
}
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////


    //Добавляем новое число в буфер
    if (buffer[i] > 0) {
        //Чтобы не получить stack smashing
        if (i >= 3) {
            i = 3;
        }
      buffer[i] = value;
    }

    //Ожидаем ввод
    value = getchar();
    //Выполним программу
    //Проверим, что нажат Enter (\n) и то, что не выходим
    if (value == KEY_ENTER && select !=501) {
        system(run_program);
      //Чтобы остановить обновление
      //и показать результат программы
    value = KEY_SPACE;
    }
    //Обнулим проход (для наглядности все опишем явно)
    if (value == KEY_s && select!=501) {
      //Обнулим буфер
      buffer[0] = 0;
      buffer[1] = 0;
      buffer[2] = 0;
      //Обнулим счётчик буфера
      i = 0;
      select = 0;
      y = 0;
      print_select(select, p, arr1, z);
    }
    //Выход (дизъюнкция - нестрогое "или".  Или то, или то. Если первое условие верно, то второе не проверяется)
    if (value == KEY_EXIT || select==501) {
      break;
  }

  }

  printf("\033[43m Выход \033[0m \n");
  return 0;
}


  

Проблема при сборке Linux From Scratch, пакет Gettext-0.22, !*! vvm13, (Компиляция) 14-Сен-23, 13:35  [ | | | ] [линейный вид] [смотреть все]
/Надо отметить, что с C/C++ не работаю и с Linux'ом не очень дружен/

Итак, развлекаюсь со сборкой LFS в виртуалке с Fedora 32.
Всё шло более-менее хорошо, прошёл довольно далеко. И вдруг неожиданно и с размаху налетел на проблему.
Итак, https://www.linuxfromscratch.org/lfs/view/stable-systemd/cha...
Глава 8.32. Gettext-0.22.

Я получаю ошибку в
libtool: link:  gcc -shared  -fPIC -DPIC  -Wl,--whole-archive ./.libs/libgnu.a -Wl,--no-whole-archive  -lc  -g -O2   -Wl,-soname -Wl,libgettextpo.so.0 -Wl,-version-script -Wl,.libs/libgettextpo.ver -o .libs/libgettextpo.so.0.5.9
/usr/bin/ld:.libs/libgettextpo.ver:2: syntax error in VERSION script

Внутри libgettextpo.ver фигня:
[root@fedora .libs]# cat libgettextpo.ver
{ global:
local: *; };

Претензия, видимо, к тому, что после global: должен быть список external-зависимостей a la
{ global:
libgettextpo_version;
local: *; };
, но он пустой.

Формируется он на основе файла .libs/libgettextpo.exp:

libtool: link: /usr/bin/nm -B   ./.libs/libgnu.a | /usr/bin/sed -n -e 's/^.*[    ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | /usr/bin/sed '/ __gnu_lto/d' | /usr/bin/sed 's/.* //' | sort | uniq > .libs/libgettextpo.exp
libtool: link: /usr/bin/grep -E -e "^([^l]|l[^i]|li[^b]|lib[^g]|libg[^e]|libge[^t]|libget[^t]|libgett[^e]|libgette[^x]|libgettex[^t]|libgettext[^p]|libgettextp[^o]|libgettextpo[^_]|libgettextpo_version).*" ".libs/libgettextpo.exp" > ".libs/libgettextpo.expT"


Первая команда даёт непустой список:

(lfs chroot) root:/sources/src/gettext-0.22/gettext-tools/libgettextpo# /usr/bin/nm -B   ./.libs/libgnu.a | /usr/bin/sed -n -e 's/^.*[    ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | /usr/bin/sed '/ __gnu_lto/d' | /usr/bin/sed 's/.* //' | sort | uniq
libgettextpo_asnprintf
libgettextpo_printf_fetchargs
libgettextpo_printf_parse
libgettextpo_rpl_fopen
libgettextpo_vasnprintf

Но вторая его обнуляет!
libtool: link: /usr/bin/grep -E -e "^([^l]|l[^i]|li[^b]|lib[^g]|libg[^e]|libge[^t]|libget[^t]|libgett[^e]|libgette[^x]|libgettex[^t]|libgettext[^p]|libgettextp[^o]|libgettextpo[^_]|libgettextpo_version).*" ".libs/libgettextpo.exp"
даёт пустой список.

Предполагаю, что на самом деле имеется в виду вырезать всё, кроме "libgettextpo_version". Но этой строки почему-то нет.

Вот то, что я понял из происходящего. И что libgettextpo_version - это какая-то переменная в одном из C-файлов. Но что с ней не так? И ведь не сам же я писал все эти скрипты. И gcc три раза перекомпилён.

Как непросто учится СИ, !*! dcc0, (C/C++) 17-Сен-16, 15:38  [ | | | ] [линейный вид] [смотреть все]
У меня почти весь ушёл на одну мизерную программу, чтобы написать без ошибок и то сомневаюсь.
Ищет символ в строке. Большего ничего не делает:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char * str=argv[2];
    char * patrn=argv[1];
            
             if (argc < 2) {
             printf("Enter a symbol and string\n");
             return 0;
           }
             if (patrn[1] !='\0') {
             printf("Enter just one symbol\n");
             return 0;
           }
            if (argc < 3 ) {
             printf("Enter pattern and string\n");
             return 0;
           }
             if (argc > 3 ) {
             printf("Use double \" \" quotes for strings containing spaces\n");
             return 0;
           }
            
             int j =0;
             while (str[j] != 0) {
                  if (patrn[0] == str[j]) {
                  printf("Found: %c in position %d", str[j], j);
                  break;
                  return 1;            
                  }            
                  ++j;
             }
            
             return 0;        
}



Какой язык функционального программирования учить?, !*! Аноним, (Средства разработки) 11-Мрт-21, 12:32  [ | | | ] [линейный вид] [смотреть все]
Доброго! Уважаемые анонимусы, подскажите, какому языку посвятить свое драгоценное время?
Давно изучаю и программирую на ++, сейчас потянуло на что-то новенькое.
Присматриваюсь к Elang, Haskell, Sсala.
Хотелось бы в последствии пофрилансить и поваять свои проекты для души.
Интересуют задачи типа бэкэнда торговой платформы.


Атомарная замена 'файлов', !*! Аноним, (Разное) 16-Дек-24, 06:07  [ | | | ] [линейный вид] [смотреть все]
... по-видимому невозможна в Linux.

Требования: транзакционность. Два разрешённых состояния:
* есть оригинальный файл, нет замены нигде
* есть замена в нужном месте, оригинального файла нет

Два запрещённых:
* есть оригинальный файл, замена насрана где-то
* нет ни оригинала, ни замены

Обычный файл вы можете создать с флагом O_TMPFILE (временный файл, не пишущийся в журнал), а потом попробовать атомарно заменить через renameat2(..., RENAME_EXCHANGE), но файлы в /proc/self/fd - это симлинки, и renameat2 в них не умеет. Можно, конечно, попробовать поиграться с readlink, но он вам выдаст несуществующий путь.

Hardlink - не умеет заменять файлы, флаг AT_REPLACE так и не был добавлен.

Директория/симлинк: вы не можете ни создать их с заменой, ни создать их файлы через open с флагом O_TMPFILE, и потом тип поменять. Сами же вызовы для их создания флаги не поддерживают.

Складывается впечатление, что так сделано намеренно, чтобы с race conditions дел не иметь.

Нужно записать видео/аудио Telegram-трансляции , !*! strannik7j, (Разное) 04-Дек-23, 02:33  [ | | | ] [линейный вид] [смотреть все]
Нужно написать скрипт (желательно на python) для записи видео/аудио из telegram-трансляции.
Я пытался найти ответ в документации таких библиотек, как tgcalls, pytgcalls, ntgcalls, но то ли это пока невозможно, то ли я плохо искал. А может есть другие подходящие библиотеки.
Bash regex, !*! Sarge, (Shell скрипты) 19-Дек-24, 16:26  [ | | | ] [линейный вид] [смотреть все]
например есть каталоги вида
/home/user/qwe123
/home/user/asd456
/home/user/zxc789
надо сделать 2 переменные где:
a='/home/user/qwe'    b='123'
a='/home/user/asd'    b='456'
a='/home/user/zxc'    b='789'

по цифрам вроде нагуглил вот такое
STRING='/home/user/qwe123'
echo ${STRING//[^0-9]/}
123

подскажите как для первой части будет выглядеть

V или Nim, !*! Анонин, (C/C++) 27-Янв-21, 12:47  [ | | | ] [линейный вид] [смотреть все]
Два модных языка. Оба транслируют код в С и компиляют обычным gcc. Кто-нибудь использует?


проблемы с точностью команды at, !*! AS, (Shell скрипты) 07-Ноя-24, 12:57  [ | | | ] [линейный вид] [смотреть все]
вот когда нужно например запустить трояна например ровно в 15:00:58 - at только минуты понимает..
в агонии пришлось заколотить примерно такое:

(while ! date|grep -q '15:00:58'; do sleep 1; done;  ./troyanStart.exe)&

но веть оно после разлогинивания неподсоединяемо
что мне делать? или у меня древняя версия atd?

Ошибка понимания списка Python: неожиданный вывод, !*! Jeevan11, (Языки программирования) 01-Сен-23, 13:47  [ | | | ] [линейный вид] [смотреть все]
Я столкнулся с неожиданным результатом при использовании понимания списка в Python. Я пытаюсь создать список квадратов значений четных чисел в заданном диапазоне, но результат не тот, который я ожидал. Вот код, который я использую:

even_numbers = [x for x in range(10) if x % 2 == 0]
squared_values = [x**2 for x in even_numbers]

print(squared_values)

Я ожидал, что результат будет [0, 4, 16, 36, 64], но вместо этого я получаю [0, 4, 16]. Кажется, что последнее четное число (8) и соответствующее ему квадратное значение (64) отсутствуют.

Может ли кто-нибудь помочь мне понять, почему это происходит и как исправить мой код понимания списка, чтобы получить желаемый результат? Есть ли что-то, что я упускаю из виду в своем подходе? Ваши идеи будут очень признательны. Спасибо!

Команда time вывод в мс., !*! evi, (Shell скрипты) 04-Сен-24, 12:23  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте!

При использовании команды time --format хочу вывод времени в милисекундах при форматированном выводе.

Если использовать команду без аргументов, команда выводит следующим образом _и_такой_вывод_меня_устраивает_:
# time ./my_prog < input.txt
> real    0m0,058s
> user    0m0,019s
> sys    0m0,040s

Но для использования флагов, необходимо использовать абсолютный путь, но от этого меняется формат вывода по default как указано в man 1 time (переменная окружения $TIME не задана), а точность указывается на один порядок меньше:
# /bin/time ./my_prog < input.txt
> 0.02user 0.02system 0:00.05elapsed 96%CPU (0avgtext+0avgdata 2428maxresident)k
> 0inputs+0outputs (0major+302minor)pagefaults 0swaps

Далее проделываю использую флаги -p или -f и вывод тоже с точностью на порядок меньше:
# /bin/time -p ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

# /bin/time -f "real\t%e\nuser\t%U\nsys\t%S" ./my_prog < input.txt
> real 0.05
> user 0.02
> sys 0.03

#



Подскажите по замене строки с помощью sed, !*! danswano, (Shell скрипты) 04-Июл-24, 14:44  [ | | | ] [линейный вид] [смотреть все]
Всем привет!
Когда я пытаюсь в куче конфигов заменить часть IP-адреса, то пишу команду
sed -i '/s/192.168.0/10.55.200/g'
Проблема в том, что в конфиге dhcpd есть настройки отдачи таблицы маршрутизации вида
24,172,21,0,192,168,0,254
Такие строки в результате выполнения sed заменяются на
24,172,21,0,10.55.200,254
Вопрос: как правильно написать выражение для sed, чтобы он корректно обработал эти строки или просто пропустил их? Запятая в качестве разделителя встречается только в конфиге dhcpd, если я правильно помню...
Базис S, K на плюсах, !*! Аноним, (C/C++) 04-Июн-24, 22:21  [ | | | ] [линейный вид] [смотреть все]
Ребят, можете проверить, правильно реализовал Комбинаторы базиса S,K лямбдами на C++11?

// C++11
#include <iostream>

int main() {
    //-I-----------------------------
    const auto I = [](const auto x){
        return x;
    };
    //-K-S----------------------------
    const auto K = [](const auto x){
      return [x](const auto y){ return x; };
    };
    const auto S = [](const auto x){
        return[x](const auto y){
            return [x,y](const auto z){
                auto xz = x(z);
                return xz(y(z));
            };
        };
    };
    //------------------------------
    const auto x = 42;
    const auto y = 41;

    const auto Ix = I(x);
    const auto Iy = I(y);
    const auto SKKx = S(K)(K)(x);

    if( Ix == SKKx ) std::cout << "Success! : Ix == SKKx" << std::endl;
    if( Iy not_eq SKKx ) std::cout << "Success! : Iy not_eq SKKx" << std::endl;
    

    return 0;
}
// https://github.com/kodxxl/CL/blob/main/SKbasis.cpp

psycopg2 не может вернуть текущую схему через команду SHOW, !*! xintrea, (PostgreSQL) 20-Июн-24, 16:44  [ | | | ] [линейный вид] [смотреть все]
1. Создаю собственную схему,
2. переключаюсь на нее,
3. и сразу хочу посмотреть какая схема используется.

Делаю это следующим кодом:


# Подключение к БД с заданными параметрами
connection = psycopg2.connect(**pgConnectionParameters)
cursor = connection.cursor()

# Переключение на заданную схему
dbSchema = 'our_schema'
cursor.execute("CREATE SCHEMA IF NOT EXISTS %s" % dbSchema)
cursor.execute("SET search_path TO %s" % dbSchema)

# Проверка текущей схемы
result = cursor.execute("SHOW search_path;")
print( result )


А результат None. Соответственно, даже fetchone/fetchall от результата вызвать не могу.

Вопрос: почему переменная result равна None?

GDB. Команда 'step' не входит в функцию., !*! Tsorion, (Отладка и профилирование) 12-Май-24, 19:37  [ | | | ] [линейный вид] [смотреть все]
Здравствуйте!
Использую язык C++ и отладчик gdb. Вот исходный код:

---------------------------------------------------------------
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

pair<bool, double> CalcMedian(vector<double> samples) {
    // верните {true, медиана}, если она существует,
    // то есть вектор непустой,
    // иначе - {false, 0}
    // обратите внимание - вектор принимаем по значению,
    // так как его придётся немного подпортить, чтобы вернуть ответ
    pair<bool, double> result(false, 0);

    if (!samples.empty())
    {
        sort(samples.begin(), samples.end());
        double median = 0;
        int mid_index = samples.size() / 2;
        if (samples.size() % 2 == 0)
        {
            median = (samples[mid_index - 1] + samples[mid_index]) / 2;
        }
        else
        {
            median = samples[mid_index];
        }
        result.first = true;
        result.second = median;
    }
    return result;
}

int main() {
    int size;
    cin >> size;

    vector<double> samples;
    for (int i = 0; i < size; ++i) {
        double sample;
        cin >> sample;
        samples.push_back(sample);
    }

    pair<bool, double> result = CalcMedian(samples);
    if (result.first) {
        cout << result.second << endl;
    } else {
        cout << "Empty vector"s << endl;
    }
}
---------------------------------------------------------------

Здесь важна строчка "pair<bool, double> result = CalcMedian(samples);" в функции main(). Если, находясь на этой строчке, в gdb вызвать команду "step", то я не оказываюсь в функции CalcMedian(). Меня бросает, как я понимаю, в конструктор класса vector:

---------------------------------------------------------------
...
vector(const vector& __x)
: _Base(__x.size(),
_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
...
---------------------------------------------------------------

Почему вызывается конструктор, я понимаю, но я хочу каким-то способом избежать этого, и сразу попасть внутрь функции CalcMedian(). Как сделать это? Только не через установку break внутри функции CalcMedian().

Компилирую так: g++ -g [имя файла]

Random и Zeromemory, !*! kapibara, (C/C++) 13-Мрт-21, 01:06  [ | | | ] [линейный вид] [смотреть все]
Как реализовать следующие криптографические функции в юникс: генерация случайных данных (да, знаю что истинно случайных данных нет, но все же) и secure_zero_memory, т.е. гарантированная очистка данных в памяти? Может есть какие-то готовые либы, примеры етц.
Код нейронной сети, !*! BuxarNET, (Библиотеки, функции) 12-Авг-23, 04:32  [ | | | ] [линейный вид] [смотреть все]
Есть ли в открытом доступе код нейронной сети?

Есть несколько проектов

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

2. Нужно нейронку научить анализировать фото и 100% разпознавать разновидность растений.

Может уже и готовые есть подобные решения с открытым кодом?

ldapsearch и bash, !*! sarge, (Shell скрипты) 16-Мрт-16, 21:24  [ | | | ] [линейный вид] [смотреть все]
Добрый вечер. Я новичек в скриптинге на bash так что не судите строго.

Столкнулся с такой проблемой. В bash если запускаю данную команду, то все работает
ldapsearch  -H ldap://server -w password -b "DC=domain,DC=local" -s sub -D
'CN=user,DC=domain,DC=local' -x "(objectClass=user)" sn cn mail
-----------------------

но если начинаю использовать переменные, а точнее в параметре -D то выскакивает ошибка:
LDAPSERVER='ldap://server'
PASSWORD='password'
BINDPATH='DC=domain,DC=local'
DN='CN=user,DC=domain,DC=local'
FILTER='(objectClass=user)'
ATTRIB='sn cn mail'
ldapsearch  -H $LDAPSERVER -w $PASSWORD -b $BINDPATH -s sub -D $DN -x $FILTER $ATTRIB

ldap_bind: Invalid credentials (49)
        additional info: 80090308: LdapErr: DSID-0C0903AA, comment:
AcceptSecurityContext error, data 525, v1772

------------------------
ldapsearch  -H $LDAPSERVER -w $PASSWORD -b $BINDPATH -s sub -D 'CN=user,DC=domain,DC=local' -x $FILTER $ATTRIB
так работает если для параметра -D непосредственно в строке прописать.

------------------------
подскажите в чем может быть проблема.
Debian8.3

ldapsearch:
        buildd@x86-csail-01:/build/openldap-EAKxYy/openldap-2.4.40+dfsg/debian/build/clients/tools
        (LDAP library: OpenLDAP 20440

ошибка в команде wget, !*! Chainikk, (Shell скрипты) 04-Мрт-24, 01:32  [ | | | ] [линейный вид] [смотреть все]
Граждане дорогие. Не первый раз обращаюсь на Ваш спасительный форум)
Нынче бьюсь над командой получить научные данные.
Если просто запустить из адресной строки броузера, то данные мне выдаются:

https://lgdc.uml.edu/common/DIDBGetValues?ursiCode=AT138&cha... fromDate=2024%2F03%2F01+00%3A00%3A00&toDate=2024%2F03%2F02+05%3A00%3A00

Но нужен скрипт на shell, чтобы запускать автоматически.
Вставляю я во wget, но увы, в результате создается папка AT138202403f.txt с файлом "DIDBGetValues?ursiCode=AT138"

и файл этот вместо данных содержит назидательное содержимое:

To access this servlet use format: DIDBGetValues?ursiCode=CODE&charName=NAME&fromDate=yyyy.mm.dd%20(...)%20hh:mm:ss&toDate=yyyy.mm.dd%20(...)%20hh:mm:ss
For example: DIDBGetValues?ursiCode=DB049&charName=foF2&fromDate=2007.06.25%20(...)%2000:00:00&toDate=2007.06.26%20(...)%2000:00:00
or: DIDBGetValues?ursiCode=DB049&charName=foF2&fromDate=2007.06.25&toDate=2007.06.26

Пробовала как написано в файле, - результат такой же((

То есть что-то в грамматике запроса не то.

Может кто знает в чем дело??

(Мой запрос: wget -N -P /var/папка такая-то/AT138202403f.txt https://lgdc.uml.edu/common/DIDBGetValues?ursiCode=AT138&cha...)

Посоветуйте мультиформатный пакетировщик!, !*! Гарло дАо, (Разное) 25-Мрт-23, 00:30  [ | | | ] [линейный вид] [смотреть все]
На что посмотреть для мультиформатного опакечивания в Deb/Rpm/SFX-Tar и др.?

Своё написано. Осталось неудовлетворённым чувство прекрасного. Перед следующим заходом хочется попользоваться написанным другими.

На что посмотреть, что попробовать? Чтобы похожее на: даю цель install для make, а оно в ответ собирает, в chroot, и отдаёт собранное в пакетах разных форматов.


Как предложить функциональность в ядро Linux, !*! Аноним, (Средства разработки) 27-Фев-24, 17:08  [ | | | ] [линейный вид] [смотреть все]
Подскажите пожалуйста, куда писать с предложением функциональности в ядро Linux. Конкретно хочется добавить функционал в vfs fs/open.c. Сам наколеночный патч у меня есть и вроде всё работает, но его такой не примут в mainline и стыдно слать, сами они сделают круче - стеково или ещё как. Поэтому не берусь сам программировать, но идея интересная и хочется чтоб её реализовали.
Спасибо.
 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру