Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/131: Рейтинг темы: голосов - 131, средняя оценка - 4.52
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Архитектура: парсинг и выгрузка текстовиков

11.03.2020, 10:51. Показов 32394. Ответов 421

Студворк — интернет-сервис помощи студентам
начало было положено в ветке - Считать текстовые файлы из папки - там и возник вопрос об Архитектуре...
Цитата Сообщение от JeyCi Посмотреть сообщение
так и не собрала эти все объекты этого класса в group class...
вроде уже собрала...
осталось отображение создать (типа I_tbl_Show) и пронаследовать ? в разные классы пункта назначения (или на консоль, или в файл, или в БД, или допустим ещё в форму)... N.B. классы (пункты-назначения) делать не надо - эти View уже реализованы разработчиками того ПО, на котором сейчас идёт работа...
а) пока что можно просто прописать функции-члены класса; и по месту использовать, что надо при разработке - в файл или на консоль;
б) в перспективе для Release - реализовать и откомпилировать и выгрузку и в файл, и выгрузку в БД, и отражение в DataGrid...
===
!! Т.Е. если в Release захочется и выгрузку в текст, и в БД, и допустим ещё в форму (например с разных кнопок сделать) - тут уж лучше и писать, как положено, наследование??... -- к слову из прошлой ветки о:
Цитата Сообщение от JeyCi Посмотреть сообщение
полагаю тут Наследования никакого не пригодится?
... или как раз тут (при выборе направления выгрузки) его (наследование) делать??
===
Обоснование выбора уровня Абстракции (I_tbl_Show со всеми виртуальными функциями):
чтобы не дублировать код-сбора-для-выгрузки -- сделать class Table - и класс-интерфейс I_tbl_Show, в котором обозначить virtual-функции выгрузки... эти функции определить в др. классах - типа Interface (IwriteCSV, IwriteDB, IwriteDataGrid)...
p.s.
классы консоль, файл, бд, DataGrid - не создаём, т.к. эти пункты назначения уже присутствуют...
p.p.s.
вывести конечные интерфейсы с определёнными методами записи на кнопки...
===
ИЛИ то, что подчёркнуто чуть выше, стоит реализовать в одном классе Table, и здесь же задать все virtual функции ??
===
на скрине: синие - классы, зелёные - интерфейсы (в с++ по сути тоже классы)
птицами отмечены уже кое-как реализованные классы (2 птицы)
курсивные стрелки - отсутствие наследования


Добавлено через 7 минут
вобщем вопрос:
class Table и класс I_Tbl_Show - объединить или нет?

Добавлено через 10 минут
p.p.s.
чтобы избежать проблем Ромба и такого:
Неоднозначность при множественном наследовании
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут нужно виртуальное наследование.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.03.2020, 10:51
Ответы с готовыми решениями:

Проверка двух текстовиков
Написать прогу на языке Си, проверяющую, совпадают ли тексты в двух файлах #include <stdio.h> #include <stdlib.h> ...

Access модуль объединения текстовиков
Добрый день. Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и...

Сделать скрипт для вывода текстов из текстовиков
Здравствуйте! Не могли бы помочь сделать скрипт для вывода текстов песен из текстовиков в папке. Расскажу подробней: есть папка с...

421
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.07.2020, 19:01  [ТС]
Студворк — интернет-сервис помощи студентам
и U++ Semaphore - если понадобиться
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.07.2020, 08:32  [ТС]
код #222 от GoshaM работает на U++ v.13068 от 2019-05-01 (2019.1 ) -- upp-win-13068.7z -- theide32.exe...
Build_Method настройки приложила к посту... Path, Include и Lib настраивала к msys2 c mingw_9_3...
надеюсь со временем они поправят свой CoWork и для более новых версий Фреймворка u++
Вложения
Тип файла: zip BM_9_3.zip (457 байт, 4 просмотров)
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.07.2020, 15:39  [ТС]
здесь
CoWork is loop paralelizer, it starts only as much tasks (globally!) as there is cores in CPU (well, in fact, it starts 2 more to cover 'wait for I/O' issues, but that it is).
Добавлено через 1 час 9 минут
P.S.
И нюансы про volatile & Atomic на память -
there really is complex theory about lock-less multithreading, it is pretty tough stuff. I would not dare suggesting new MT tools before reading it all
поскольку -
If you build multi-thread program, then you must achieve some goals, like performance or other.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
07.07.2020, 21:06  [ТС]
и тем не мененее
U++ callbacks - potentially-critical-bottleneck class like thread queue.
Each time you create callback, you create system core sync object, use it, and then delete it when callback is destroyed.
не знаю, можно ли расценивать сигнал слоту в Qt, как синхронизирующий (т.е. блокирующий) объект?... вероятно, да... и если да, то кто быстрее отрабатывает - сигнал Qt или callback U++?..
в любом случае для перегруженных коллбэками app'ов можно посмотреть:
Mt-Alt gives queue to any thread you want, including main/GUI and main/non-GUI thread.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
07.07.2020, 21:47
Цитата Сообщение от JeyCi Посмотреть сообщение
не знаю, можно ли расценивать сигнал слоту в Qt, как синхронизирующий (т.е. блокирующий) объект?
Если работаете из другого потока, то блокировка очереди будет.
Помимо сигналов-слотов, в Qt также доступны Events.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.07.2020, 10:18  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
советовать нечего по Stopped
ИТОГО по моему коду #277: (почистила код)
1) сделала WorkerThread членом класса (=> Call, который унаследован от родного для U++ Ctrl, - перестал быть undeclared)
2) воспользовалась родным свойством U++ потоков IsShutdownThread (сделала по-человечески)
3) проверку IsShutdownThread переместила до локирования Gui для его обновления (иначе снова попадала в deadlock)
.h
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
#ifndef _MY_test_1_thread_win_h_
#define _MY_test_1_thread_win_h_
 
#include <CtrlLib/CtrlLib.h>
 
using namespace Upp;    
    
class MyAppWindow : public TopWindow {
        
        typedef MyAppWindow CLASSNAME;
        
    public:
            
        //Declaration
        Button btn_1;
        Button btn_2;       
          
        StatusBar status; 
            
        MyAppWindow();
        ~MyAppWindow();
        
        void btn1_Click();      
        void btn2_Click();      
                
        Thread work;
        void WorkerThread();
};
 
#endif

.cpp
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "win.h"
#include <CtrlLib/CtrlLib.h>
#include <Core/Core.h>
 
using namespace Upp;
 
//Constructor 
MyAppWindow::MyAppWindow() {
            Title("My application with button");
            Sizeable(true);
            SetPos(PosLeft(0,400),PosTop(0,170));
            //CenterScreen();
    
            //Button button
            Add(btn_1.LeftPos(10, 100).TopPos(40, 42));
            btn_1.SetLabel("Load");
            
            //Button button
            Add(btn_2.LeftPos(200, 100).TopPos(40, 42));
            btn_2.SetLabel("Stop"); 
            
            //  StatusBar
            AddFrame(status);
            status="working!";
            
            btn_1 <<= THISBACK(btn1_Click); 
            btn_2 <<= THISBACK(btn2_Click);             
    }
    
// Destructor    
MyAppWindow::~MyAppWindow()
{
    ShutdownThreads();
}    
 
 
void MyAppWindow::btn1_Click()
{
    this->btn_1.Disable();
    work.Run( [=]{WorkerThread ();} );    
}
 
  
void MyAppWindow::btn2_Click()
{
    this->work.ShutdownThreads();
    this->work.Wait();      // выход из функции потока + join. Этого достаточно. 
  
        this->status.Set("Stopped!");  
        this->btn_1.Enable();    
}
 
 
void MyAppWindow::WorkerThread()
{   
    String s;
    String fileName;
    bool b;
    String fldNm;
    fldNm=Nvl(GetDownloadFolder(), GetHomeDirFile("downloads"))+"\\";   //<< в папку Downloads... или др м. указать...
    //========================================== 
    //Создаем список (вектор) имен файлов
    Vector <String> fname;
    for ( int i = 0; i < 20; i++ )
        fname << ( IntStr ( i ) + ".txt" );
    //Сохраняем файлы 
    for (auto&  row:fname){
    
        s="!";
          //do something using the element col
          String oLink=row;             
 
            fileName=fldNm+oLink+".txt";    
            b=SaveFile(fileName, s);                
            Sleep(100);     // чтобы успеть кнопку btn_2 нажать для теста..
            if (!work.IsShutdownThreads()) 
            {
                // with PostCallback - OK и раньше!!
                GuiLock __;
                Call([=] {
                    this->status=GetFileName(fileName);
                });
            }
            else {return;}                                            
        }    
        {
            GuiLock __;
            Call([=]{
                this->status="Finished!";
                this->btn_1.Enable();
            });
        }
        PromptOK("loaded");     
        return;
}
 
GUI_APP_MAIN
{
#ifdef _DEBUG
    StdLogSetup(LOG_FILE|LOG_COUT|LOG_TIMESTAMP );
#endif
    
    MyAppWindow app;
    app.Run();
}

p.s.
а с callback'ами всё ещё проще при подстановке их в код вместо GuiLock + Call
p.p.s.
а закрыться по крестику - это банально Деструктор
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
08.07.2020, 10:22
JeyCi, в деструктор еще можно добавить Wait, если вы запустили поток, а потом решили закрыть приложение.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.07.2020, 10:45  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
в деструктор еще можно добавить Wait, если вы запустили поток, а потом решили закрыть приложение.
честно говоря, проверяла и без Wait'а работает, но по логике - логично... посмотрю библиотеку - может их SchutdownTreads уже учитывает это... если что-нибудь пойму там...
спасибо

Добавлено через 3 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
а с callback'ами
в смысле Postcallback'ами...


Добавлено через 15 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
и без Wait'а работает, но по логике - логично... посмотрю библиотеку - может их SchutdownTreads уже учитывает это...
а вообще-то и btn2_Click() без Wait'а срабатывает... видимо, thread join'ится в самом ShutdownThreads()... но для knowledge - конечно, стоит помнить... а для practice - изучать классы, которыми пользуемся... = experience!
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
08.07.2020, 12:32
Цитата Сообщение от JeyCi Посмотреть сообщение
честно говоря, проверяла и без Wait'а работает
UB же.

Цитата Сообщение от JeyCi Посмотреть сообщение
видимо, thread join'ится в самом ShutdownThreads()...
Нет. В ShutdownThreads он ждет пока счетчик запущенных потоков не будет равен нулю. Но join`а там нет.
Во многих реализациях системных потоков вы должны обязательно делать join всякому потоку, который был запущен не в режиме detach. Так что вы потенциально оставляете программу в состоянии UB, если не будете делать Wait.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.07.2020, 14:59  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
состоянии UB
undefined behavior
Цитата Сообщение от DrOffset Посмотреть сообщение
вы должны обязательно делать join всякому потоку, который был запущен не в режиме detach
запомню! поправила:
C++
1
2
    ShutdownThreads();
    this->work.Wait();
(в обратном порядке - не OK)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
08.07.2020, 16:59
Цитата Сообщение от JeyCi Посмотреть сообщение
(в обратном порядке - не OK)
В обратном порядке получим перемену местами причины и следствия. Сначала надо попросить поток завершиться, а потом его присоединять.

Добавлено через 1 минуту
JeyCi, Грубо говоря, попросили занятого друга присоединиться к вашей компании, а потом удивляемся, что он всех задерживает )
Пусть сначала доделает свои дела, а потом приглашайте
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
08.07.2020, 20:29  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Сначала надо попросить поток завершиться, а потом его присоединять
ну вот допустим, такой запуск Thread::Start(THISBACK(cb)); в коде предпоследнего поста -
Цитата Сообщение от DrOffset Посмотреть сообщение
Пусть сначала доделает свои дела
можно ведь и без приглашения?.. или это какой-то необычный thread по линку?..

Добавлено через 56 секунд
хотя, действительно, тут, наверно, ещё в процессе... ещё не приглашали? ещё не присоединяли после завершения поток? т.е. он ещё живой?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
09.07.2020, 00:08
Цитата Сообщение от JeyCi Посмотреть сообщение
в коде предпоследнего поста -
Я бы сказал, что там ошибки в коде, вот и все.

Они там ждут завершения в цикле, разбавляя это sleep`ами. У нас бы такой код ревью не прошел.
При том, что дождавшись, они все ранво должны вызвать join, если в их системе под капотом потока, например, pthread. А они этого не делают.

Добавлено через 9 минут
Например, joinable потоки, для которых не вызван join становятся потоками-зомби в unix.
Отсюда собственно все вышесказанное мной.
https://man7.org/linux/man-pag... oin.3.html
Failure to join with a thread that is joinable (i.e., one that is not detached), produces a "zombie thread". Avoid doing this, since each zombie thread consumes some system resources, and when enough zombie threads have accumulated, it will no longer be possible to create new threads (or processes).
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
09.07.2020, 09:54
...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
10.07.2020, 08:30  [ТС]
вобщем оттестила httpRequestЫ в CoWork'ах
LastErrorMessage: Операция на незаблокированном сокете не может быть завершена немедленно.
что подтверждает моё видение
Цитата Сообщение от JeyCi Посмотреть сообщение
получать ответы на запросы... ведь всё равно с моего одного сокета я параллельно не пошлю запросы, только последовательно...
(и не в ядрах дело, видится мне, а в работе 80-го сокета, мьютексами это дело не спасти??)
и совет
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Если у тебя один коннект, то достаточно одного потока.
===
делать с клиента WebSocket::Connection - не вижу смысла, т.к. async_read в U++ с одного сокета только если писать свой класс... и этот зверь всё-таки, видимо, для вывода в html_browser, а не мои текстовики...
===
а самого родителя request'ов - TCPConnection класс - подрядить иначе, чем 2 указанных варианта - не вижу... да и зачем connection (если sendall по stream с сокета, как в Python в u++ не нашла)... всё свои классы писать надо...
да и наверно, действительно, connection - слишком жирно, когда нужны просто ответы на запросы, для сохранения их в БД... имхо - придётся по вопросу файлов с i'net (чужого сервера) остаться на одном потоке
в любом случае - всем спасибо за разбор полётов

Добавлено через 6 минут
возможности Qt - (Qnetworkrequest и Websocketserver, по последнему картинки здесь)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
10.07.2020, 08:41
Цитата Сообщение от JeyCi Посмотреть сообщение
Операция на незаблокированном сокете не может быть завершена немедленно.
Это на самом деле не ошибка.

Это статус, в соответствии с которым программист должен выполнить асинхронное ожидание завершения операции на сокете.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
10.07.2020, 08:43  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
асинхронное ожидание завершения операции на сокете.
но ведь ??
Цитата Сообщение от JeyCi Посмотреть сообщение
мьютексами это дело не спасти??
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
10.07.2020, 08:48
https://docs.microsoft.com/en-... or-codes-2
WSAEWOULDBLOCK 10035

Resource temporarily unavailable.
This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
Добавлено через 45 секунд
Цитата Сообщение от JeyCi Посмотреть сообщение
мьютексами это дело не спасти??
Я бы сказал, что мьютексы тут вообще не при чем.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
10.07.2020, 20:45  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Я бы сказал, что мьютексы тут вообще не при чем.
тоже так подумала...
Цитата Сообщение от DrOffset Посмотреть сообщение
асинхронное ожидание завершения операции на сокете.
completion port, вероятно, ближе к тому что надо? или просто oAsync.Get() будет достаточно - даже не смотря на то, что он блокирующий?.. сомневаюсь - ведь тут блокировка даже не на уровне сокета, а уже даже рабочего потока (более высоком)... имхо
===
честно говоря, тема, видимо, не нова...
и в U++ имеется (даже без select'ов)
class SocketWaitEvent
Encapsulates POSIX select call, allowing waiting on set of sockets for specified events.
- смущает (уже не смущает) POSIX - означает ли это, что только для разработки для Linux этот класс можно подрядить?.. или это как раз то, что стоит поковырять, с вашей точки зрения? - ОК и для Windows...
направьте на путь истинный, please, чтобы уже со спокойной душой ушла в др. ветку... а то как-то поток логической мысли по потокам остановить не возможно...
===
боюсь, что вы посоветуете async-await, а для него нужен MSVC компилятор...
-----
или boost может помочь?
-----
хорошее описание асинхронности vs. параллелизма здесь... хоть библиотека и под Node.js рассматривается, но она на C и некоторые умудряются рассмотреть её и для С++ для работы с resumable functions (хотя тоже компилируется MSVC - всё дело в этом переключателе контекстов, который в boost context.h под mingw никак)
Using C++ lambdas for the callback functions can help somewhat, but passing data along the chain of callbacks requires a lot of boilerplate code
- наверно, начинаю понимать ваш скептицизм к коллбэкам - когда их окажется много, наверно, даже можно будет сказать callback Hell

Добавлено через 2 часа 1 минуту
P.S.
нет, всё-таки, наверно, банально как-то надо обработать эту ошибку через метод IsSocketError() класса HttpRequest : public TcpSocket ... и как-то это сделать в асинхронном режиме?

Добавлено через 48 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
WSAEWOULDBLOCK 10035
для пополненя словарного запаса... но всё-таки всё ещё не хочется писать на Win32API

Добавлено через 1 час 38 минут
ВОБЩЕМ инструменты имеются в U++
Кликните здесь для просмотра всего текста
dword GetWaitEvents()
Returns a combination of WAIT_READ and WAIT_WRITE flags to indicate what is blocking the progress of HTTP request. Can be used with SocketWaitEvent.

int GetPhase() const
Returns the current phase of request processing, one of BEGIN, START, DNS, SSLPROXYREQUEST, SSLPROXYRESPONSE, SSLHANDSHAKE, REQUEST, HEADER, BODY, CHUNK_HEADER, CHUNK_BODY, TRAILER, FINISHED, FAILED.

String GetPhaseName() const
Returns the text description of current request phase.

bool InProgress() const
Returns true if request is still in progress.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
10.07.2020, 21:24
Цитата Сообщение от JeyCi Посмотреть сообщение
даже не смотря на то, что он блокирующий?
Наоборот он у вас НЕ блокирующий.

Добавлено через 1 минуту
Цитата Сообщение от JeyCi Посмотреть сообщение
POSIX - означает ли это, что только для разработки для Linux этот класс можно подрядить?
Нет. В windows тоже есть select.

Добавлено через 3 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
направьте на путь истинный, please,
Я думаю нужно детальнее изучить методологию работы с сетью в U++.
В целом, должно здорово помочь общее представление о программировании сетей, например по книге У.Р.Стивенса. Если классы в U++ - это тонкие обертки над системными сокетами, то различий будет крайне мало, в основном в сторону упрощения.

Добавлено через 5 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
нет, всё-таки, наверно, банально как-то надо обработать эту ошибку через метод IsSocketError() класса HttpRequest : public TcpSocket ... и как-то это сделать в асинхронном режиме?
Это не ошибка, еще раз. Это статус, говорящий о том, что прямо сейчас сокет не готов выполнить вашу операцию.

Скорее всего это происходит потому, что вы пытаетесь слать данные в неблокирующий сокет без какого-либо контроля, да еще и из разных потоков. Я бы сказал, что это плохая практика. Сделайте очередь запросов к сокету, в нее будете добавлять из произвольного потока, разматывайте очередь через select\poll\etc в каком-то одном потоке.

Или верните блокирующий режим, тогда операция будет ждать завершения, но в целом это хуже для вычислений в текущем потоке. Лучше сделайте по первому варианту.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2020, 21:24

В указанном dsn архитектура драйвера и архитектура приложения не соответствуют друг другу
Добрый день. При запуске программы выскакивает вот такая вот ошибка. В чем может быть проблема и как ее исправить?

архитектура процессоров и компьютерная архитектура,Intel32. для первокурсников
сабж. кто чем может помочь юному,непонемающему в этой области человеку.желательно книгами.спасибо.

Ошибка "в указанном dsn архитектура драйвера и архитектура приложения"
Вот такая ошибка при нажатии на кнопку &quot;Проверить соединение&quot; Я прочитал, что это возможно из за того, что моя система 64, а...

Архитектура бд
Я начинающий php-разраб. Пишу свой проект для своего города. Но встал вопрос о архитектуре. Пользователь создает свою страницу с...

Архитектура БД
Доброго времени суток.Задание написать АИС Учёт абонентов телефонной сети предприятия. Краткое описание предметной области: В состав...


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

Или воспользуйтесь поиском по форуму:
340
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru