Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22

Скорость чтения csv с разных носителей

21.05.2020, 23:27. Показов 9902. Ответов 148
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, джентльмены.
На днях набросал простой код поиска нужной строки в CSV-файле, см. под спойлером
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
extern "C" __declspec(dllexport) LPXLOPER12  WINAPI FindInCSV(char *  arg1, char *  arg2, wchar_t *  arg3)
{
    LPXLOPER12 OperOut = new XLOPER12;
    OperOut->xltype = xltypeStr | xlbitDLLFree;
    OperOut->val.str = new XCHAR[32767 + 2]; //+1 под размер + 1 под нуль-терминатор
    OperOut->val.str[0] = 0;
    OperOut->val.str[1] = '\0';
    std::filebuf fb;
    if (fb.open(arg1, std::ios::in | std::ios::binary))
    {
        int x = 0;
        int lenStrOut = 0; //0й элемент - размер строки
        int lenArg3 = wcslen(arg3);
        bool overflow = false;
        std::string str;
        std::istream is(&fb);
        XCHAR* strTmp= OperOut->val.str + 1;
 
        while (is) 
        {
            std::getline(is, str);
            size_t found = str.find(arg2);
            if (found != std::string::npos)
            {
                x++;
                if (lenArg3 > 0 && x > 1)
                {
                    if (lenStrOut + lenArg3 > 32767) { overflow = true;  goto end_; }
                    wcscpy(strTmp + lenStrOut, arg3);
                    lenStrOut = lenStrOut + lenArg3;
 
                    if (lenStrOut + str.length() > 32767) { overflow = true;  goto end_; }
                    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str.c_str(), -1, strTmp + lenStrOut, str.length() + 1);
                    lenStrOut = lenStrOut + str.length();
                }
                else if (lenArg3 > 0)
                {
                    if (lenStrOut + str.length() > 32767) { overflow = true;  goto end_; }
                    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str.c_str(), -1, strTmp + lenStrOut, str.length() + 1);
                    lenStrOut = lenStrOut + str.length();
                }
                else
                {
                    if (lenStrOut + str.length() > 32767) { overflow = true;  goto end_; }
                    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str.c_str(), -1, strTmp + lenStrOut, str.length() + 1);
                    lenStrOut = lenStrOut + str.length();
                    goto end_ ;
                }
            };
        }
    end_:
        if (overflow) {
            wcscpy(strTmp, L"Qverflow. Max char 32767\0");
            OperOut->val.str[0] = 24;
        }
        else
        {
            OperOut->val.str[0] = lenStrOut;
        }
        fb.close();
    }
    return OperOut;
}

Сегодня протестировал работу на з-х накопителях:
HDD WDC WD10EACS-00ZJB0 (1000 ГБ, SATA-II)
HDD WDC WD5000AAKX-001CA0 (500 ГБ, 7200 RPM, SATA-III)
SSD KINGSTON SV300S37A120G (120 ГБ, SATA-III)

В итоге время обработки CSW-файла размером 1ГБ у всех примерно одинаковое, что стало для меня откровением. Я предполагал, что в данном коде узкое место скорость чтения с накопителя. Чем можно объяснить такой результат теста?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2020, 23:27
Ответы с готовыми решениями:

Скорость записи и чтения данных с разных источников - из реестра и Json
Всем привет. Возникла необходимость где то хранить данные приложения. Было выбрано два варианта: Реестр JSON Из какого...

Создание тестов на скорость чтения и скорость записи
Проблемка такая - пишу простенький тест на скорость записи и скорость чтения, локальных и съемных дисков. Как написать тесты вроде...

Так ли важна в реальной жизни скорость записи SSD, или смотреть надо только на скорость чтения, а на запись пофигу
https://www.citilink.ru/catalog/computers_and_notebooks/hdd/ssd_in/420250/ вот у него скорость записи низкая, но он самый популярный

148
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
20.06.2020, 23:40  [ТС]
Студворк — интернет-сервис помощи студентам
Структура тайминга bedvit:
0.52 сек. просто асинхронное чтение из кеша
2.42 просто асинхронное чтение с диска FILE_FLAG_NO_BUFFERING
3.082 просто асинхронное чтение с диска

0.23 memcpy (рабочий буфер - копия буфера ReadFile)

0.76 - выполнение самого кода поиска и работы с копией буфера + блок дозагрузки основного буфера межбуферной строкой (асинхронно)

Итого:
1.выполнение из кеша 0.52+0.76=1,28 (в идеале должно быть 0.76, т.к. эти операции асинхронны), но по факту видимо накладные расходы?
2.чтение с диска FILE_FLAG_NO_BUFFERING 2.42+0,23=2,65 (0.76 - здесь, норм, асинхронно, внутри 2,65 сек)
3.чтение с диска 3,082+0,23=3,31 (0.76 - здесь, норм, асинхронно, внутри 3.31 сек)

т.е. выигрыш от асинхронности:0.76-0.23=0.53 сек


Структура тайминга XLAT (если я все правильно понял):
0.52 сек. просто чтение из кеша
3.11 сек. просто чтение с диска

с поиском
1.01 сек. чтение из кеша
3.24 сек. чтение с диска

в итоге 0.49 сам поиск в кеше и 0.13 при чтении с диска. Почему разница? В моем алгоритме, тоже чтение из кеша выше ожидаемого.

Выводы:
Чтение с диска и из кеша в обоих алгоритмах сопоставимое, за исключением режима FILE_FLAG_NO_BUFFERING, который есть в первом алгоритме.
Поиск нужной строки по подстроке быстрее во втором алгоритме.
Здесь стоит отметить, что в первом алгоритме размер строки макс = размеру буфера (16777216 байт), во втором = 1024 байта.
Пока неясно можно ли еще ускорить поиск в первом алгоритме, и почему он так отстает от второго.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
21.06.2020, 16:15  [ТС]
Цитата Сообщение от bedvit Посмотреть сообщение
0.76 - выполнение самого кода поиска и работы с копией буфера + блок дозагрузки основного буфера межбуферной строкой (асинхронно)
это включая 0.23 memcpy, значит без копирования в рабочий буфер 0.53 сек. из них поиск - strstr() - 0.52 сек
Сравнимо со вторым алгоритмом (0,49). Я предполагал. что strstr() - одно из быстрейших реализаций поиска подстроки, или нет?
Итого проигрываю на формирование второго буфера для асинхронности на те 0.23 сек. - memcpy().

Цитата Сообщение от bedvit Посмотреть сообщение
т.е. выигрыш от асинхронности:0.76-0.23=0.53 сек
поправлюсь 0.53-0.23=0.3 сек.
т.е. любой алгоритм который медленнее копирования второго буфера (0.23 сек - memcpy()) будет выгоднее в асинхронной реализации.

Цитата Сообщение от bedvit Посмотреть сообщение
1.выполнение из кеша 0.52+0.76=1,28 (в идеале должно быть 0.76, т.к. эти операции асинхронны), но по факту видимо накладные расходы?
предполагаю, что при чтении из буфера асинхронность не работает (на основании тестов). Тогда все сходится.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
22.06.2020, 11:47
Цитата Сообщение от bedvit Посмотреть сообщение
значит без копирования в рабочий буфер 0.53 сек. из них поиск - strstr() - 0.52 сек
здорово всё разложили...
и здесь Выводы заслуживают внимания...
всё очень интересно на пальцах разжёвано... спасибо!..
===
даже то, чего я опасалась - необходимости такой рукопашной для нормального кода - а оказалось банально - "библиотека - друг человека" (и комитет, который её ввёл)
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
24.06.2020, 00:41  [ТС]
Запилил алгоритм Boyer-Moore.
Просел в скорости почти в два раза в сравнении с обычной strstr(). Вот и быстрейший алгоритм.
Поиск подстроки 7 символов в буфере 16 МБ.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2020, 11:15
А зачем его пилить если он уже реализован в стандартной библиотеке в С++17?

https://en.cppreference.com/w/cpp/algorithm/search

И там есть как вариант еще и Boyer-Moore-Horspool

Добавлено через 2 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
библиотека - друг человека
И ... таки да.

Добавлено через 24 секунды
Цитата Сообщение от JeyCi Посмотреть сообщение
библиотека - друг человека
И ... таки да.
1
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
24.06.2020, 12:02  [ТС]
Опять вы меня в std:: завлекаете. Придет время и к стандартной библиотеке.
хм...
Complexity
1-4) At most S*N comparisons where S = std::distance(s_first, s_last) and N = std::distance(first, last).
5) Depends on the searcher
хотя я больше надеялся на O(s+n) или даже O(n / s).
Будет ли это быстрее strstr() - вопрос.

Сейчас хочу закончить Си проект.
Если есть инфо по быстрой Си-реализации этого алгоритма, буду благодарен.

Добавлено через 13 минут
Возможно boyer_moore_searcher и boyer_moore_horspool_searcher заходят в п.
Цитата Сообщение от bedvit Посмотреть сообщение
5) Depends on the searcher
, но к сожалению, там не удалось найти сложность.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.06.2020, 14:16
Цитата Сообщение от bedvit Посмотреть сообщение
Возможно boyer_moore_searcher и boyer_moore_horspool_searcher заходят в п.
Именно их я и имел виду. Названия алгоритмов ничего не говорят?

Цитата Сообщение от bedvit Посмотреть сообщение
Сейчас хочу закончить Си проект.
Тогда почему тема в С++ разделе?
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 11:45  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Тогда почему тема в С++ разделе?
Упомянутый проект включает не только данную функцию. Данная тема это С/С++, изначально была цель понять проблему. Далее выбрать оптимальное решение. std:: это будет (на котором ранее и было опубликовано решение) или Си-шные функции (которые посоветовали использовать выше) - решает скорость.
Вот мои тесты по boyer_moore_searcher усредненные по 10 итерациям (на другом ПК, оптимизация полная - по умолчанию, функции штатные без допилов, таких как у XLAT) поэтому данный тайминг с предыдущими таимингами не сравним:

strstr 0,09
std::
find 0,21
search 3,96
boyer_moore_searcher 0,22
boyer_moore_horspool_searcher 0,48

Без допилов Си-шные функции выигрывают. Как допилить boyer_moore_searcher я не знаю. Да и более чем в 3 раза, для профита, думаю, не выйдет.
Причем boyer_moore_searcher() сравним с find(). А search() очень медленная, возможно руки кривые, но делал в стандартной реализации.
C++
1
auto it = std::search(in.begin(), in.end(), needle.begin(), needle.end());
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2020, 11:59
Цитата Сообщение от bedvit Посмотреть сообщение
Вот мои тесты по boyer_moore_searcher усредненные по 10 итерациям (на другом ПК, оптимизация полная - по умолчанию, функции штатные без допилов, таких как у XLAT) поэтому данный тайминг с предыдущими таимингами не сравним:
Одно из двух: Ваш код велосипед работает не верно или же Вы неверно делали тесты.

Добавлено через 1 минуту
C++
1
auto it = std::search(in.begin(), in.end(), needle.begin(), needle.end());
Где здесь boyer_moore_searcher ?

Добавлено через 1 минуту
Цитата Сообщение от bedvit Посмотреть сообщение
возможно руки кривые
"С++17 STL. Стандартная библиотека шаблонов" Галовиц Яцек
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 12:00  [ТС]
Для примера, вышеупомянутая реализация алгоритма Boyer-Moore отрабатывает за 0,77 сек., т.е. в 3 раза медленнее, чем std::boyer_moore_searcher.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 12:03  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Одно из двух: Ваш код велосипед работает не верно или же Вы неверно делали тесты.
Можете сделать свои и опровергнуть мои.

Цитата Сообщение от Avazart Посмотреть сообщение
Где здесь boyer_moore_searcher ?
здесь нет, потому как это относится к тесту
Цитата Сообщение от bedvit Посмотреть сообщение
search 3,96
. Прочтите внимательнее. Тест был по нескольким функциям.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2020, 12:04
Как я сказал значит Ваша реализация не верная. Ну не может быть там такая разница.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 12:04  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Одно из двух: Ваш код велосипед работает не верно или же Вы неверно делали тесты.
Можете сделать свои и опровергнуть мои.

Цитата Сообщение от Avazart Посмотреть сообщение
Где здесь boyer_moore_searcher ?
здесь нет, потому как это относится к тесту
Цитата Сообщение от bedvit Посмотреть сообщение
search 3,96
. Прочтите внимательнее. Тест был по нескольким функциям.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2020, 12:11
Не меняет сути.

Добавлено через 3 минуты
Цитата Сообщение от bedvit Посмотреть сообщение
Можете сделать свои и опровергнуть мои.
Это настолько очевидно что попросту жалко тратить время на это.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 14:53  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
жалко тратить время на это.
Я потрачу за вас:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "pch.h"
#include <string>
#include <ctime>
#include <algorithm>
#include <functional>
#include <iostream>
 
int main() {
    const int N = 4000000; // количество строк
    std::string str = "Пятый; Тридацть четвертый; 44221100; BBB; CIFRAPOLE; POLEPVTRETYE; ODIN ODIN - TRI; CC; 01.01.2013; 01.01.2013; 8963; 2UTY39ADVGKR; СU707039; 40200М У0026034; -; 11; 2; 150; 1998; 1; -; 21; 1980; 1490; НОМЕР ПЯТЬ; -; ПОЛЕ ОДИН; ПОЛЕ ОДИН ПЯТЬ; -; -";
    std::string Out("");
    std::string needle = "4000000";
    Out.reserve(1027000000);
    for (int i = 0; i < N; ++i)
    {
        Out.append(std::to_string(i + 1) + str + '\n');
    }
 
    clock_t t1;
    clock_t t2;
 
    t1 = clock();
    auto s = strstr(Out.c_str(), needle.c_str());
    t2 = clock();
    printf("strstr: Time - %f\n", (t2 - t1 + .0) / CLOCKS_PER_SEC); // время отработки
 
    t1 = clock();
    auto f = Out.find(needle);
    t2 = clock();
    printf("find: Time - %f\n", (t2 - t1 + .0) / CLOCKS_PER_SEC); // время отработки
 
    t1 = clock();
    auto sr = std::search(Out.begin(), Out.end(), needle.begin(), needle.end());
    t2 = clock();
    printf("std::search: Time - %f\n", (t2 - t1 + .0) / CLOCKS_PER_SEC); // время отработки
 
    t1 = clock();
    auto srb = std::search(Out.begin(), Out.end(), std::boyer_moore_searcher(needle.begin(), needle.end()));
    t2 = clock();
    printf("std::boyer_moore_searcher: Time - %f\n", (t2 - t1 + .0) / CLOCKS_PER_SEC); // время отработки
 
    t1 = clock();
    auto srbs = std::search(Out.begin(), Out.end(), std::boyer_moore_horspool_searcher(needle.begin(), needle.end()));
    t2 = clock();
    printf("std::boyer_moore_horspool_searcher: Time - %f\n", (t2 - t1 + .0) / CLOCKS_PER_SEC); // время отработки
 
    system("pause");
    return 0;
}
strstr: Time - 0.077000
find: Time - 0.202000
std::search: Time - 3.673000
std::boyer_moore_searcher: Time - 0.489000
std::boyer_moore_horspool_searcher: Time - 0.464000
Миниатюры
Скорость чтения csv с разных носителей  
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.06.2020, 15:35
bedvit, а так другой результат
Кликните здесь для просмотра всего текста
хотя у меня в студии результат аналогичен вашему
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 16:30  [ТС]
zayats80888, вы несколько cмухлевали, так корректнее. Даже здесь видно, что strstr() одна из быстрых, а std::search() к моему удивлению сильно отстает. А еще удивительнее, что отстают "boyer_moore...()" одни из быстрейших алгоритмов на длинной строке и 7-значной строке поиска (проверяем не все 7 а только часть).

Добавлено через 5 минут
Хотя результат на границе чувствительности (хороший видимо стоит сервак). И ориентироваться на него сложно. Тот тайминг, который я выкладывал отрабатывает в exe файле. Итого: или в студии другой алгоритм оптимизации или результат на серваке отличный от выполнения ехе.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.06.2020, 16:55
bedvit, я сомневаюсь, что за strstr стоит какой-то наивный алгоритм. Наверняка там что-то специализированное и эффективное.
Но std::search + searcher - универсален, в отличии от strstr, может искать что угодно где угодно.
Везде есть свои плюсы и минусы.

Кликните здесь для просмотра всего текста
Цитата Сообщение от bedvit Посмотреть сообщение
вы несколько cмухлевали
Мне показалось, что тестировать сам поиск будет корректнее.
0
 Аватар для bedvit
1210 / 261 / 22
Регистрация: 20.05.2016
Сообщений: 1,147
Записей в блоге: 22
25.06.2020, 17:17  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Везде есть свои плюсы и минусы.
Согласен.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Мне показалось, что тестировать сам поиск будет корректнее.
в общем-то так и есть, есть строка, остальное - это время на поиск нужного указателя/индекса/и т.д. на подстроку. Если мы часть операций, к примеру формирование таблицы суфиксов или плохих символов и т.д. выносим за рамки времени - это в некотором роде заметания мусора под ковер. Хотя в своей реализации, где файл читается блоками в буфер, расчет этих таблиц я вынес за рамки расчета внутри буфера, т.к. подстрока поиска при загрузке новых данных в буфер - не меняется. Но в общем времени, поиска в файле - учитывал. В итоге, сейчас, strstr() все равно оказался быстрее, хотя надежды возлагал на что-то побыстрее чем O(s*n).
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.06.2020, 17:29
C++
1
2
3
4
5
const int N = 4000000; // количество строк
 
std::string needle = "4000000";
 
for (int i = 0; i < N; ++i)

Т.е. совпадение не будет найдено? Смысл тогда этого теста?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.06.2020, 17:29

Программа для чтения csv
Нужно прочитать csv-файл, записать в массив и потом делать с ним всякие манипуляции и сортировки (ну это как раз самое простое). У меня...

Скорость импорта CSV
Здравствуйте. Прислали мне CSV-шник размером 10 гигов, чтобы сделать пару запросов. Поставил я себе MySQL Workbench, подготовил...

Bat - файл для чтения только одной строки из файла CSV
Добрый день! Подскажите пожалуйста как сделать батник чтобы он выводил только одну (2, 3, 4,...) строку из файла CSV. На текущий...

Как правильно написать скрипт для чтения файла с расширением .csv(Excel) ?
как правильно написать скрипт для чтения файла с расширением .csv(Excel) пишу вот такой програмный код: &lt;? $count = 1; $file =...

Скорость чтения/записи
Всем привет! Есть ли какие-нибудь библиотеки в Java, чтобы узнать скорость чтения/записи на диск? Интересует именно Java, потому что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru