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

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

11.03.2020, 10:51. Показов 32501. Ответов 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
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2020, 22:59
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GoshaM Посмотреть сообщение
а задания стоящие в очереди отменяю,
Таким образом "буквально" нельзя отменить текущее задание. Т.е. такая отмена будет работать только "между" заданиями. Но если задание "длительное" т.е. тяжелое он не будет остановлено пока не выполнится полностью со всеми последствиями.
По этом либо задания должны быть легкими и выполнятся за не критичное по длительности время или же все же придется использовать атомик и расставлять точки "отмены". И тут уж не такие и большие "трения" атомик все же не мютекс.

Добавлено через 2 минуты
В любом случае лучше тут нужен wait.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
29.06.2020, 23:21  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Но если задание "длительное" т.е. тяжелое он не будет остановлено пока не выполнится полностью со всеми последствиями.
тут, честно говоря, ещё и последствия не совсем понятны... сами файлы ~100kb - лёгенькие... но если гружу и отключу i'net (тестово - посмотреть реакцию на внезапный обрыв связи) - я пока тупо возвращала bool downloader= false во вторичный поток из класса-загрузчика... но зависает чего-то?.. наверно, не сразу понимает-верит, что i'net уже disconnected?
(пока не многопоточно - без thread pool'a)

Добавлено через 10 минут
дело даже не в том, что зависает (наверно, синхронизацию надо подправить) - а в том, что с момента disconnected до момента появления окна PromptExclamation - проходит время...
хотя, действительно, - надо, наверно, пробовать синхронизацию сделать главным потоком?... чтобы даже это время проходило не заметно... но загрузка то в др. классе (кл downloader)... вот тоже пока задумалась?..
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2020, 23:22
Ну есть таймаут соединения и таймаут чтения пока не отработают будет висеть.
Можно конечно пробовать принудительно сокет закрывать, но это зависит от библиотеки и вообще насколько целесообразно резко останавливать.
1
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
30.06.2020, 00:55
Цитата Сообщение от Avazart Посмотреть сообщение
Таким образом "буквально" нельзя отменить текущее задание. Т.е. такая отмена будет работать только "между" заданиями. Но если задание "длительное" т.е. тяжелое он не будет остановлено пока не выполнится полностью со всеми последствиями.
Я привел абстрактный пример. Причем тут какие-то частности. Не всегда можно разбить функцию на кусочки, и наоборот можно, дойти до того, что после прочтения каждого байта из файла проверять, а не завершить ли поток. Я ничего не знаю, об этой функции, поэтому условно текущие задания завершаются сами, а задания которые в очереди отменяются. А нужно и можно ли прерывать текущие задания в середине это уже другой вопрос, но для этого уже есть готовый CoWork::IsCanceled()
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
30.06.2020, 07:04  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Вы в код посмотрите,там нет вызова деструкторов.
посмотреда - действительно,ни у кого нет ... а надо бы, наверно, как в моём кривом коде
C++
1
2
3
4
5
6
// Destructor
myApp::~myApp()
{
    //terminated = 1;
    ShutdownThreads();
}
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2020, 09:36
Цитата Сообщение от GoshaM Посмотреть сообщение
Не всегда можно разбить функцию на кусочки, и наоборот можно, дойти до того, что после прочтения каждого байта из файла проверять, а не завершить ли поток.
Нельзя только в одном случае когда код уходит внутрь какой-то библиотеки.
И никто не читает по байтам, вполне нормально проверять флаг после N прочтенных байт.
Как детально разбивать зависит от ситуации и требований.

Добавлено через 2 минуты
Цитата Сообщение от GoshaM Посмотреть сообщение
А нужно и можно ли прерывать текущие задания в середине это уже другой вопрос, но для этого уже есть готовый CoWork::IsCanceled()
Я же сказал но не будет прерывать задания которые уже выполняются. Кроме того это никак не меняет дело так как стоит использовать wait а не крутить циклы со слипом.

Добавлено через 1 минуту
Цитата Сообщение от JeyCi Посмотреть сообщение
осмотреда - действительно,ни у кого нет ... а надо бы, наверно, как в моём кривом коде
Я говорил про деструкторы GuiLock.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
30.06.2020, 14:51
Цитата Сообщение от Avazart Посмотреть сообщение
Нельзя только в одном случае когда код уходит внутрь какой-то библиотеки.
И никто не читает по байтам, вполне нормально проверять флаг после N прочтенных байт.
Как детально разбивать зависит от ситуации и требований.
Я мысль до вас пытаюсь донести, в том что функция неизвестна поэтому говорить об оптимизации выхода из нее где-то в середине не имеет смысла. И в тоже время мой код никак не исключает такую оптимизацию, если она будет необходима.
И еще раз объясню вам, что выход по левой переменной, какой вы предлагаете не завершит поток, а завершит одно текущее задание и поток получит новое задание из очереди. У вас все потоки в итоге, скорее всего начнут выполняться последовательно т.к. сразу вначале нового задания будут пытаться обратиться к этой переменной. И вот если осталось 2000 заданий и у вас будет 2000 бесполезных вызовов WorkP.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2020, 16:51
Так я не говорил что нужно отмену по заданиям стоит убирать.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
30.06.2020, 18:23  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
деструкторы GuiLock.
так они вроде сами удаляются... структуру GuiLock я чуть выше показала (там и mutex-lock и unlock)... действуют только на зону видимости и GoshaM показал, как выделить зону видимости {} ... понимаю так... имхо

Добавлено через 45 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
Нельзя только в одном случае когда код уходит внутрь какой-то библиотеки.
а когда код уходит внутрь др. класса?

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
стоит использовать wait а не крутить циклы со слипом.
sleep - это какое-то действие (можно заменить чем угодно)... а вот wait - верю, надо посмотреть...

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
вполне нормально проверять флаг после N прочтенных байт. Как детально разбивать зависит от ситуации и требований.
ну конкретно по ситуации, ситуацию описала выше - до 100 кб... тоже не вижу смысла кромсать на части... если речь о request'ах... когда речь пойдёт о сокетах (что маловероятно по этой задаче) - то да, приём вероятно и сам будет идти частями... там и искать точки отмены... имхо

Добавлено через 8 минут
Цитата Сообщение от GoshaM Посмотреть сообщение
в том что функция неизвестна
да простая она здесь: чтение малого текстовика или http.request за инфо...

Добавлено через 3 минуты
Цитата Сообщение от GoshaM Посмотреть сообщение
поэтому говорить об оптимизации выхода из нее где-то в середине не имеет смысла.
согласна... но на перспективу интересно, конечно, но пока рано на перспективу пока перспектива в начале ветки и в середине
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
30.06.2020, 18:24
Цитата Сообщение от Avazart Посмотреть сообщение
Так я не говорил что нужно отмену по заданиям стоит убирать.
Серьезно? Почитайте сообщения с 256 по 259. Если поток в ожидании откуда вы отмену вызвали?
Вы явно предлагаете примерно так отмену делать:
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
#include <Core/Core.h>
#include <atomic>
 
using namespace Upp;
 
std::atomic<bool> isInterruptionRequested;
 
void WorkerP(int n)
{
    for ( ;; )
    {
        if ( isInterruptionRequested )
        {
            DUMP(n);
            return;
        }
 
        Sleep ( 1 );
    }
};
 
CONSOLE_APP_MAIN
{
    IsCanceled = false;
    
    StdLogSetup ( LOG_COUT | LOG_FILE );
 
    CoWork co;
 
        for ( int i = 0; i < 2048; i++ )
        co &[i]{ WorkerP(i);};
 
    Sleep ( 100 );
 
    isInterruptionRequested = true;
}
А вот так делают по-человечески:
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
#include <Core/Core.h>
 
using namespace Upp;
 
void WorkerP(int n)
{
    for ( ;; )
    {
        if ( CoWork::IsCanceled() )
        {
            DUMP(n);
            return;
        }
 
        Sleep ( 1 );
    }
};
 
CONSOLE_APP_MAIN
{
    
    StdLogSetup ( LOG_COUT );
 
    CoWork co;
 
    for ( int i = 0; i < 2048; i++ )
        co &[i]{ WorkerP(i);};
 
    Sleep ( 100 );
 
    co.Cancel();
}
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2020, 18:37
Можно и так но сути не меняет от слова совсем.

Добавлено через 3 минуты
Цитата Сообщение от GoshaM Посмотреть сообщение
Вы явно предлагаете примерно так отмену делать:
Хотя стоп.Где я конкретно предлагал использовать Sleep() ? Я предлагал противоположное - его выпилить...
Отчасти по тому что в Вашем коде был Sleep я его и назвал гавнокодом.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
30.06.2020, 19:07
Avazart, мне надоела эта пустая перепалка. Если вам есть что сказать, по сути, давайте вы напишите свое видение программы, что я написал в сообщении 222.

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Можно и так но сути не меняет от слова совсем.
Пусть это будет для JeyCi, а она выберет как ей поступить

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.06.2020, 19:20
Я уже все сказал что хотел сказать при чем довольно прямо и однозначно, жаль Вы не признаете свои ошибки, удачи!
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
30.06.2020, 20:55  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
Если поток в ожидании откуда вы отмену вызвали?
я вот всё, что поняла - это то, что поток может или что-то делать, или спать (часто используют, как заглушку в коде имитируя любую работу, которую можно потом вставить) или ждать ! Сигнала... надо ведь чего-то ждать...
Цитата Сообщение от GoshaM Посмотреть сообщение
Если поток в ожидании откуда вы отмену вызвали?
может смены флага дождался?..
Цитата Сообщение от GoshaM Посмотреть сообщение
выход по левой переменной, какой вы предлагаете не завершит поток, а завершит одно текущее задание и поток получит новое задание из очереди.
дождаться флага и Cancel() thread... мне в моей вба-шной манере тоже приходила в голову только такая мысль... НО если мы хотим пул-потоков, то тут вообще как-то всего Worker'a надо ликвидировать, не каждую конкретную thread... имхо... НО последняя цитата очень интересный know-how...
вообще, я пока без комментов - мне кажется, немного беспредметны некоторые споры - если не влазить во внутренности CoWork... но лезть туда очень не хочу... поэтому спасибо за каждый share experience!.. - на все случаи жизни...
но по сути, с этими http.requests, ещё и Queue придётся выстраивать, жаль, что тоже не очень компилится моим mingw пример из ide... вобщем буду смотреть пробовать - чуть что добавлю конкретики... не хочу ставить MSVC...
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
01.07.2020, 17:36  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
дождаться флага и Cancel() thread... мне в моей вба-шной манере тоже приходила в голову только такая мысль...
я на свой процедурный вариант прикинула (т.к. без очереди):
1. запуск с кнопки Thread.Run -> в которой
2. запуск длинной (на всю загрузку всего) void workerThread
3. флаг вне класса myWindow
(т.к. void workerThread вне класса)
4. кнопку Стоп
C++
1
2
3
4
5
6
7
8
void MyAppWindow::btn2_Click()
{
    isInterruptionRequested = true;
    //this->work.ShutdownThreads();
 
        this->status="Stopped";
        this->btn_1.Activate();
}
5. проставив в void workerThread:
C++
1
if ( isInterruptionRequested ) return;
Итого:
остановить функцию в доп. потоке удаётся... НО thread, видимо, не закрывается... т.к. status не меняется и окно начинает виснуть...
уже не виснет (как закомментировать то, что закомментировала)... в принципе для 1-го потока - как вариант - но со статусом ещё разобраться... - и всё-таки выход из функции - ещё не закрывает автоматически поток... имхо...
класс Thread u++ не выполняет ни ShutdownThreads(), ни Exit() в таком контексте, наверно. или что-то ещё...
про Wait() пока промолчу, как указала выше:
Wait is blocking...
Добавлено через 6 минут
p.s.
для thread_pool -- вариант от GoshaM "по-человечески" клеить

Добавлено через 7 минут
или 1 Thread тоже заворачивать в CoWork - чтобы останавливать по-человечески?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
01.07.2020, 17:52
По прежнему слишком не конкретно что бы что-то советовать.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
01.07.2020, 20:20  [ТС]
oleg-m1973 оставлял здесь вариант - для STD... но для U++ что-то не очень предусмотрено "остановить поток" в классе Thread - или work.ShutdownThreads() надо подумать, откуда выполнять при экстренном выходе... имхо... или опять дело в компиляторе?..

Добавлено через 9 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
или 1 Thread тоже заворачивать в CoWork
просто в классе CoWork как-то линейка методов пошире - из примера от GoshaM,

Добавлено через 49 минут
Цитата Сообщение от Avazart Посмотреть сообщение
не конкретно что бы что-то советовать.
мне кажется. тут советовать нечего по Stopped
.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
31
32
#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;
        //std::atomic<bool> isInterruptionRequested;
};
    
void WorkerThread ( MyAppWindow* pw );
 
#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
#include "win.h"
#include <CtrlLib/CtrlLib.h>
 
using namespace Upp;
 
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); 
    }
    
    
MyAppWindow::~MyAppWindow()
{
    ShutdownThreads();
}
    
std::atomic<bool> isInterruptionRequested;
 
 
void MyAppWindow::btn1_Click()
{
    this->btn_1.Deactivate();
    isInterruptionRequested = false;
    work.Run ( [=]{WorkerThread ( this );} );    
}
 
 
 
void MyAppWindow::btn2_Click()
{
    isInterruptionRequested = true;
    //this->work.ShutdownThreads();
        
        this->status.Set("Stopped!");   //??????????????????
        this->btn_1.Activate();     //??????????????????
}
 
 
void WorkerThread ( MyAppWindow* pw )
{   
    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 нажать для теста..
                {
                GuiLock __;
                pw->status=GetFileName(fileName);
                }
                }
                if ( isInterruptionRequested ) return;                                          
        }
        {
        GuiLock __;
        pw->status="Finished!";
        pw->btn_1.Activate();
        }
        PromptOK("loaded");     
        return;
}
 
GUI_APP_MAIN
{
#ifdef _DEBUG
    StdLogSetup(LOG_FILE|LOG_COUT|LOG_TIMESTAMP );
#endif
    
    MyAppWindow app;
    app.Run();
}
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.07.2020, 20:59
JeyCi, как правило логику остановки потока должны писать вы сами. Универсально и безопасно на библиотечном уровне это сделать в общем случае нельзя.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
01.07.2020, 21:11  [ТС]
DrOffset, да я видела на форуме U++ , что чтобы остановить поток - много рутины надо выполнить - и зависит она от того, что там is executing тот поток...
поэтому и думаю, что надо выкручиваться как-то в те моменты, когда он ничего не executing - если таковые возможно отлавливать... может, во время его спячки или ещё когда... вобщем ещё покручу примеры от GoshaM...

Добавлено через 1 минуту
в любом случае - одного выхода из функции мало, чтобы завершить поток
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
01.07.2020, 21:14
JeyCi, выход из функции потока + join. Этого достаточно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2020, 21:14

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
280
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru