Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26

Нужна помощь в понимании как реализовать сбор данных и их обработку

30.01.2024, 19:40. Показов 2889. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Имеется контроллер, с которого читаю время его работы. я получаю это время, далее через час я получаю еще раз время работы с устройства, с этих данных мне надо получить разницу. И так в течении всего дня собирать данные, и каждый час получать статистику)
С этих параметров получаю часы и миллисекунды с контроллера 6752 6751 .

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

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
TimeSpan[] all_day = new TimeSpan[250];
TimeSpan[] all_day_sub = new TimeSpan[250];
void run_time()
{
    //6752 hours   6751 milisec
    
    ret = FanucOpe.cnc_rdparam(FanucOpe.h, 6751, 0, 8 + 4, param6751);
    ret1 = FanucOpe.cnc_rdparam(FanucOpe.h, 6752, 0, 8, param6752);
    if (ret == FanucOpe.EW_OK && ret1 == FanucOpe.EW_OK)
    {
        textBox2.Text = convert_param_to_TimeSpan(param6751.ldata, param6752.ldata).ToString();
        textBox1.Text = convert_TimeSpan_to_Hours(convert_param_to_TimeSpan(param6751.ldata, param6752.ldata));
    }
    void writeToList(TimeSpan[] all_day)
    {
        listBox1.Items.Clear();
        for (int i = 0; i <= 23; i++)
        {
            all_day_sub[i] = this.all_day[i].Subtract(this.all_day[i + 1]);
            listBox1.Items.Add(this.all_day_sub[i]);
        }
    }
 
 
    TimeSpan convert_param_to_TimeSpan(int _param6751, int _param6752)  //
    {
        //hh:mm:ss
        var mils = TimeSpan.FromMinutes(_param6752).TotalMilliseconds;  //из минут в лиллисикунды
        var out_milisec = mils + _param6751;   //сложение двух полей милисикундных
        var timeSpan = TimeSpan.FromMilliseconds(out_milisec);
        int dd = timeSpan.Days;
        int hh = (int)timeSpan.TotalHours;
        int mm = timeSpan.Minutes;
        int ss = timeSpan.Seconds;
        // TimeSpan ts = timeSpan.Subtract();
        var currenttime = DateTime.Now;
 
        // if (currenttime.Minute == 0 && currenttime.Second <= 1)
        if (currenttime.Second == 0 || currenttime.Second == 5 || currenttime.Second == 10 || currenttime.Second == 15 ||
            currenttime.Second == 20 || currenttime.Second == 25 || currenttime.Second == 30 || currenttime.Second == 35 ||
            currenttime.Second == 40 || currenttime.Second == 45 || currenttime.Second == 50 || currenttime.Second == 55)
        {
            all_day[currenttime.Second] = timeSpan;
            writeToList(all_day);
        }
 
        return timeSpan;
    }
    string convert_TimeSpan_to_Hours(TimeSpan ts)  // timespan to hours
    {
        int dd = ts.Days;
        int hh = (int)ts.TotalHours;
        int mm = ts.Minutes;
        int ss = ts.Seconds;
        return string.Format("H{0}:M{1}:S{2} -ts:{3}", hh, mm, ss, ts); ;
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2024, 19:40
Ответы с готовыми решениями:

Помощь в понимании
const char х = {&quot;Jason &quot;, &quot;at your service\n&quot;}; const char * у = &quot;Quillstone &quot;; for (int і = 0; і &lt; 3; і++) cout « ((i&lt;2) ? !i ? x :...

Помощь в понимании RowViewModel
Есть ли у кого внятные примеры, как использовать RowViewModel&lt;TEntity&gt; и CellViewModel&lt;TValue&gt; Спасибо.

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

37
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,753
Записей в блоге: 1
31.01.2024, 08:27
А можете словами описать что требуется, а то по коду как-то не очень понятно. Вместо метода convert_TimeSpan_to_Hours можно использовать форматированный вывод метода ToString().
0
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263
31.01.2024, 09:06
Цитата Сообщение от ssuss Посмотреть сообщение
далее через час я получаю еще раз время работы с устройства
Там какое то другое время чтоли?? Или он работает не постоянно?
Через час же вроде прошел всего час. Чего тут разницу то считать?
0
31.01.2024, 09:45

Не по теме:

Цитата Сообщение от Worldmaster Посмотреть сообщение
Чего тут разницу то считать?
устройство могло перезапускаться. ну или под работой подразумевается какое-то действие, которое запускается переодически.

0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,753
Записей в блоге: 1
31.01.2024, 11:14
Пока ТС молчит сделаю замечания по представленному коду.
а) метод writeToList следует исключить из кода и заменить массив, данные которого выводятся в listBox1, на BindingList например. В этом случае обновление элемента списка автоматически транслируется в listBox1 и не только в него.
б) в метод writeToList передаётся параметр, но внутри метода он не используется, зачем так сделано?!?
в) не понятно назначение блока if, в котором определяется кратность 5 секунд текущего времени.
г) в методе convert_param_to_TimeSpan создаётся куча неиспользуемых переменных.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
31.01.2024, 11:47
Цитата Сообщение от Uswer Посмотреть сообщение
Пока ТС молчит сделаю замечания по представленному коду.
Цитата Сообщение от ssuss Посмотреть сообщение
у меня неделя программирования, самообучение)
  
0
2287 / 1603 / 400
Регистрация: 26.06.2017
Сообщений: 4,753
Записей в блоге: 1
31.01.2024, 13:31
wizard41, ну и-и-и? Когда кто-то подсказывает начинающему (направляет его) как надо делать это же здорово или нет?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
31.01.2024, 13:42
Uswer, да все верно, я ничего не говорю... Так, типа активность на форуме проявляю )
0
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 17:43  [ТС]
работает чпу станок. у него свое время наработки, то есть работает по программе, включается таймер его наработки, останавливается станок, таймер тоже останавливается. вот, получается реального времени прошло час , и за этот час мне надо получить разницу на времени)) надеюсь понятно написал)
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 17:48
ssuss, ну, логика тут простая: ваше приложение запрашивает это время из контроллера и сравнивает - вот и все. Запрашивать/получать это время можно как угодно, хоть в ручную по кнопке, хоть по таймеру, хоть по событию приема... Например, если контроллер сам инициирует передачу, если время изменилось...
0
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 18:19  [ТС]
сейчас выглядит как-то так, даже вроди работает) понимаю что говнокод . тут у меня вывод в лист для отладки , а потом в датагрид перевожу эту всю шляпу, ну а далее в планах в БД писать
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 BindingList<CNCWORKTIME> data = new BindingList<CNCWORKTIME>();
 public class CNCWORKTIME
 {
     public int index { get; set; }
     public DateTime datatime { get; set; }
     public string time_first { get; set; }
     public string time_sec { get; set; }
     public string time_sub { get; set; }
 
     public CNCWORKTIME(int index, DateTime datatime, string time_first, string time_sec, string time_sub)
     {
         this.index = index;
         this.datatime = datatime;
         this.time_first = time_first;
         this.time_sec = time_sec;
         this.time_sub = time_sub;
     }
 }
 TimeSpan[] all_day = new TimeSpan[24];
 TimeSpan[] all_day_sub = new TimeSpan[24];
 void run_time()
 {
     int milisec_cnc = return_parametr_value(6751); //get milliseconds
     int hours_cnc = return_parametr_value(6752); //get hours
     TimeSpan ts_out = convert_param_to_TimeSpan(milisec_cnc, hours_cnc);  //получаем форматированый вывод времени в TimeSpan виде
     string hours_out = convert_TimeSpan_to_Hours(convert_param_to_TimeSpan(milisec_cnc, hours_cnc));  //вывод в читаемой форме часов работы станка
 
     textBox2.Text = ts_out.ToString();
     textBox1.Text = hours_out;
 
     writer_data(ts_out);
 
     TimeSpan convert_param_to_TimeSpan(int _param6751, int _param6752)  //
     {
         //hh:mm:ss
         var mils = TimeSpan.FromMinutes(_param6752).TotalMilliseconds;  //из минут в лиллисикунды
         var out_milisec = mils + _param6751;   //сложение двух полей милисикундных
         var timeSpan = TimeSpan.FromMilliseconds(out_milisec);
         int dd = timeSpan.Days;
         int hh = (int)timeSpan.TotalHours;
         int mm = timeSpan.Minutes;
         int ss = timeSpan.Seconds;
         return timeSpan;
     }
 
     string convert_TimeSpan_to_Hours(TimeSpan ts)  // timespan to hours
     {
         int dd = ts.Days;
         int hh = (int)ts.TotalHours;
         int mm = ts.Minutes;
         int ss = ts.Seconds;
         //return string.Format("H{0}:M{1}:S{2} -ts:{3}", hh, mm, ss, ts); 
         return string.Format("ч{0}:м{1}:с{2}", hh, mm, ss);
     }
 
     void writer_data(TimeSpan _timeSpan)
     {
         var currenttime = DateTime.Now;
         var _minute = currenttime.Minute;
         var _hours = currenttime.Hour;
         var _seconds = currenttime.Second;
 
         if (_minute == 0 && _seconds < 2)
         {
             all_day[_hours] = _timeSpan;
             writeToList(all_day);
             substract(all_day);
             data.Add(new CNCWORKTIME(_hours, currenttime, convert_TimeSpan_to_Hours(all_day[_hours]).ToString(), 
                 convert_TimeSpan_to_Hours(all_day[_hours + 1]).ToString(), convert_TimeSpan_to_Hours( all_day_sub[_hours]).ToString()));
             Thread.Sleep(2000);
         }
     }
     void writeToList(TimeSpan[] all_day)
     {
         listBox1.Items.Clear();
         int index_time = 0;
         foreach (var item in all_day)
         {
             listBox1.Items.Add($"{index_time}:00,  {convert_TimeSpan_to_Hours(item)}");
             index_time++;
         }
     }
     void substract(TimeSpan[] _all_day)
     {
         listBox2.Items.Clear();
         all_day_sub[0] = _all_day[0].Subtract(_all_day[1]);
         all_day_sub[1] = _all_day[1].Subtract(_all_day[2]);
         all_day_sub[2] = _all_day[2].Subtract(_all_day[3]);
         all_day_sub[3] = _all_day[3].Subtract(_all_day[4]);
         all_day_sub[4] = _all_day[4].Subtract(_all_day[5]);
         all_day_sub[5] = _all_day[5].Subtract(_all_day[6]);
         all_day_sub[6] = _all_day[6].Subtract(_all_day[7]);
         all_day_sub[7] = _all_day[7].Subtract(_all_day[8]);
         all_day_sub[8] = _all_day[8].Subtract(_all_day[9]);
         all_day_sub[9] = _all_day[9].Subtract(_all_day[10]);
         all_day_sub[10] = _all_day[10].Subtract(_all_day[11]);
         all_day_sub[11] = _all_day[11].Subtract(_all_day[12]);
         all_day_sub[12] = _all_day[12].Subtract(_all_day[13]);
         all_day_sub[13] = _all_day[13].Subtract(_all_day[14]);
         all_day_sub[14] = _all_day[14].Subtract(_all_day[15]);
         all_day_sub[15] = _all_day[15].Subtract(_all_day[16]);
         all_day_sub[16] = _all_day[16].Subtract(_all_day[17]);
         all_day_sub[17] = _all_day[17].Subtract(_all_day[18]);
         all_day_sub[18] = _all_day[18].Subtract(_all_day[19]);
         all_day_sub[19] = _all_day[19].Subtract(_all_day[20]);
         all_day_sub[20] = _all_day[20].Subtract(_all_day[21]);
         all_day_sub[21] = _all_day[21].Subtract(_all_day[22]);
         all_day_sub[22] = _all_day[22].Subtract(_all_day[23]);
         all_day_sub[23] = _all_day[23].Subtract(_all_day[0]);
         int index_time = 0;
         foreach (var item in all_day_sub)
         {
             listBox2.Items.Add($"{index_time}:00-{index_time + 1}:00,  {convert_TimeSpan_to_Hours(item)}");
             index_time++;
         }
     }
 
 
 
     dataGridView1.DataSource = data;
 
 }
Добавлено через 12 минут
1. сделал BindingList
2.Действительно так и есть, постоянно редактирую, может забыл удалить.
3.кратность 5 стоит, это во время отладки ставлю минуты, допустим, сейчас 4 минуты, я ставлю 5 изапускаю прогу, при достижении 5 минут, прога срабатывает и получаю данные, а вообще стоит ноль, чтобы каждый час в нулевую минуту получать данные))
4.куча неиспользованых переменных, это последствия моего донного уровня программирования)) потом буду причесывать по возможности
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 18:22
Цитата Сообщение от ssuss Посмотреть сообщение
понимаю что говнокод
Не то слово. void substract(TimeSpan[] _all_day) вообще атас.
По моему скромному мнению 95% всего что тут написано не нужно.
0
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 18:33  [ТС]
Сегодня, 17:48 Нужна помощь в понимании как реализовать сбор данных и их обработку [В закладки] [Окно ответа] 10 (permalink)
ssuss, ну, логика тут простая: ваше приложение запрашивает это время из контроллера и сравнивает - вот и все. Запрашивать/получать это время можно как угодно, хоть в ручную по кнопке, хоть по таймеру, хоть по событию приема... Например, если контроллер сам инициирует передачу, если время изменилось...



сам контроллер молчит как рыба, пока его не спросят) ну какое-то понимание пришло, как эту шляпу реализовать. Ну вы наверно смотрите на мой код, и думаете , что это можно в 5 строчек написать, хотелось бы упростить, оптимизировать... тк , у меня в приложении куча всего происходит, это что-то типа системы мониторинга станка, и чем больше я добавляю опций, тем менее отзывчивей приложение, типа крутится все в одном потоке, через таймер, пока все запросы пройду, пока туда-сюда, приложение подлагивает) не знаю как это на умном описать 0_о

Добавлено через 1 минуту
все что связано с листбоксом удалится , это для вывода, чтобы понимать , чо собственно происходит, что я получаю

Добавлено через 1 минуту
Сегодня, 18:22 Нужна помощь в понимании как реализовать сбор данных и их обработку [В закладки] [Окно ответа] 12 (permalink)
Цитата Сообщение от ssuss Посмотреть сообщение
понимаю что говнокод
Не то слово. void substract(TimeSpan[] _all_day) вообще атас.
По моему скромному мнению 95% всего что тут написано не нужно.

мой мозг начинает взрываться, когда надо что-то прокрутить в цикле и я ничо не могу понять что там конкретно происходит, поэтому все расписал построчно, уж простите
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 18:44
ssuss, чтобы мозг не сильно взрывался, надо самому себе четко представить: что конкретно вытягивается из контроллера, с чем сравнивается. И что должно получится в итоге.
Зачем тут TimeSpan и излишняя работа с ним - нам тем более не понятно. Какие-то конвертации туда-сюда...
Такое ощущение, что взял первое попавшееся, что "кажется подходит" для задачи - и вляпал в код, без какого-нибудь ясного представления что это такое и как правильно с этим есть борщ.
0
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 18:54  [ТС]
Сегодня, 18:44 Нужна помощь в понимании как реализовать сбор данных и их обработку [В закладки] [Окно ответа] 14 (permalink)
ssuss, чтобы мозг не сильно взрывался, надо самому себе четко представить: что конкретно вытягивается из контроллера, с чем сравнивается. И что должно получится в итоге.
Зачем тут TimeSpan и излишняя работа с ним - нам тем более не понятно. Какие-то конвертации туда-сюда...
Такое ощущение, что взял первое попавшееся, что "кажется подходит" для задачи - и вляпал в код, без какого-нибудь ясного представления что это такое и как правильно с этим есть борщ.


в станке два поля, одно минутное, другое миллисикундное, я эти поля складываю при помощи TimeSpan, что бы более точное время получать, до секунды
Миниатюры
Нужна помощь в понимании как реализовать сбор данных и их обработку  
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 19:02
Цитата Сообщение от ssuss Посмотреть сообщение
одно минутное, другое миллисикундное
Я вижу часовое, минутное и секундное. Миллисекундного не вижу.
Цитата Сообщение от ssuss Посмотреть сообщение
я эти поля складываю при помощи TimeSpan
Зачем для этого TimeSpan? Чтобы из него же потом получать обратно чч:мм:сс ??

Ладно, зайдем с другой стороны: что конкретно прилетает из MCU в качестве времени работы? В каком формате?
0
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 19:06  [ТС]
прилетает 61 и 37488 то что в этих полях.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 19:14
Цитата Сообщение от ssuss Посмотреть сообщение
61 и 37488
а что это за цифры?

Добавлено через 5 минут
1h:1m:37s == 3697 секунд. Считать время наработки с точностью до миллисекунд - такое себе. Кому это надо?
Думаю, в самом контроллере расчет этих данных неверен - в канал летит туфта какая-то.
1
0 / 0 / 0
Регистрация: 30.01.2024
Сообщений: 26
01.02.2024, 19:16  [ТС]
Цитата Сообщение от ssuss Посмотреть сообщение
61 и 37488
а что это за цифры?


это получается 61 минута и 37488 миллисекунд. ТОесть то что я стрелочками указывал, там сама стойка переводит в 1час 1 минута 37 секунд.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3438 / 2758 / 575
Регистрация: 04.09.2018
Сообщений: 8,654
Записей в блоге: 3
01.02.2024, 19:20
Цитата Сообщение от ssuss Посмотреть сообщение
это получается 61 минута и 37488 миллисекунд
а почему минута прибавляется к минутам в часах, а секунды летят в миллисекундах?
В любом случае - все что надо -> привести это все к чему-то одному и просто высчитать прошедшее время в нужном формате, типа Дней:Часов:Минут:Ослов...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2024, 19:20
Помогаю со студенческими работами здесь

Помощь в понимании чужого кода
Сижу разбираю чужой ,код пытаюсь разобраться в нем , и ни как не пойму зачем вот эти поля ? private int FPS = 30; private int...

Помощь в понимании части программы
Всем доброго вечера! Я был бы очень благодарен, если бы поможете мне в понимании части кода программы. Это функция, через которую...

Нужно реализовать сбор данных
Добрый день, помогите реализовать сбор данных с разных страниц. Имеется таблица в Excel ...

Потоки. Помощь в понимании примера из книги
Доброго времени суток.... Есть вопрос. начал разбираться с потоками JAVAи столкнулся с проблемой....набрал код с книжки, и видимо в...

Как ускорить обработку обработку данных в Пайтон?!?!
Можно ли как-то ускорить обработку данных в Пайтон?!?! Мне нужно таблицу умножения I строк на J столбцов, где потом посчитать количество...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru